therion/0000755000076400010400000000000012270034370013263 5ustar userAdministratorstherion/abisso2th.py0000755000076400010400000000173211222235766015551 0ustar userAdministrators#!/usr/bin/python # # copyright 2009 Martin Budaj import sys,os if len(sys.argv) < 2: print "usage: ss2th " sys.exit() file_in = open(sys.argv[1]); file_out = open(os.path.splitext(sys.argv[1])[0]+'.th', 'w') f_prev = 0 m = 2 print >>file_out, 'centreline' for i,l in enumerate(file_in): if i < 8: continue toks = l.split() if i < 18 and float(toks[0]) < 0 and sum(abs(float(x)) for x in toks[1:4]): print >>file_out, ' fix ', for j in range(4): print >>file_out, toks[j], print >>file_out if i == 18: print >>file_out, ' units clino compass deg' print >>file_out, ' calibrate tape 0 0.01' print >>file_out, ' data normal from to compass clino length' if len(toks) < 9: continue l,s,a,f,t = [float(x) for x in toks[0:5]] if l == s == f == a == t == 0: continue t = m if t==0 else t f = t_prev if f == 0 else f t_prev = t m += 1 print >>file_out, '%8d%8d%8s%8s%8s' % (f,t,a,s,l) print >>file_out, 'endcentreline' therion/cclass.pl0000755000076400010400000001437310721452264015110 0ustar userAdministrators#!/usr/bin/perl $myname = "cclass.pl"; $nargin = $#ARGV + 1; die "$myname: missing class name\n" if ($nargin < 1); if ($nargin < 2) { $father = "dataobject"; } else { $father = $ARGV[1]; } $class = $ARGV[0]; $thclass = "th$class"; $thfather = "th$father"; $CLASS = uc($class); $FATHER = uc($father); die "$myname: $thclass.h already exists\n" if (open(TST,"$thclass.h")); die "$myname: $thclass.cxx already exists\n" if (open(TST,"$thclass.cxx")); die "$myname: $thfather.h does not exist\n" unless (open(TST,"$thfather.h")); $level = 0; while () { if (/TT\_$FATHER\_UNKNOWN\s*\=\s*(\d+)/) { $level = $1; } } die "$myname: uknown level\n" if ($level == 0); close(TST); $level += 1000; $levelp = $level + 1; print "class $thclass : public class $thfather at level $level\n"; print "writing $thclass.h ... "; open(OUT,">$thclass.h"); print OUT <$thclass.cxx"); print OUT <opt = 0; } $thclass\::~$thclass() { } int $thclass\::get_class_id() { return TT_$CLASS\_CMD; } bool $thclass\::is(int class_id) { if (class_id == TT_$CLASS\_CMD) return true; else return $thfather\::is(class_id); } int $thclass\::get_cmd_nargs() { // replace by real number of arguments return 0; } const char * $thclass\::get_cmd_end() { // insert endcommand if multiline command return NULL; } const char * $thclass\::get_cmd_name() { // insert command name here return \"$class\"; } thcmd_option_desc $thclass\::get_cmd_option_desc(const char * opts) { int id = thmatch_token(opts, thtt_$class\_opt); if (id == TT_$CLASS\_UNKNOWN) return $thfather\::get_cmd_option_desc(opts); else return thcmd_option_desc(id); } void $thclass\::set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline) { switch (cod.id) { // replace this by real properties setting case TT_$CLASS\_OPTION: this->opt = sscanf("%d", *args); break; // if not found, try to set fathers properties default: $thfather\::set(cod, args, argenc, indataline); } } void $thclass\::self_delete() { delete this; } void $thclass\::self_print_properties(FILE * outf) { $thfather\::self_print_properties(outf); fprintf(outf,"$thclass:\\n"); // insert intended print of object properties here } ENDBODY close(OUT); print "done\n"; therion/CHANGES0000644000076400010400000007413412267533434014302 0ustar userAdministratorsTherion 5.3.13 (2014-01-22): therion: * bugs fixed: - update survex img parser to v8 (should fix various errors) - several patches from Wookey's debian distribution applied -------------------------------------------------------------------------------- Therion 5.3.12 (2013-12-22): therion: * -enable/disable spay-shots should work for VRML and DXF format (splay shots in separate layer) * added ATTR__shotflag_splay, ATTR__shotflag_duplicate, ATTR__shotflag_approx to metapost code before line survey * warning raised, if equate statement creates new station in some subsurvey * removed transaction from SQL export * bugs fixed: - color map-fg altitude should work for elevation projection - error deleting temporary directory - missing vcomp100.dll in Win32 installation xtherion: * bugs fixed: - BOM handling in UTF-8 files - ver.tcl ends with lf only loch: * bugs fixed: - file open dialog not working properly on Debian linux -------------------------------------------------------------------------------- Therion 5.3.11 (2012-12-22): therion: * added -survey option for map for setting survey associated with map. For example all surveying statistics from this survey will be used, when this map is selected for output. * added sketch-colors option to thconfig file, to reduce size of sketch bitmap images in maps * hide symbol from legend, if it has explicitly empty translation * survey-level works for point station-name labels, if station name is automatically determined (no -text is specified) * symbol-show|hide group text for point label, remark, date and line label * grid-angle - can be used in centerline to specify magnetic grid angle (declination against grid north). * -cs output specification works for export cave-list (including lat-long) * dates are shown using OS locale settings in map export * layout statistics explo/topo-length on/hide/off -- if it is off, team members are sorted alphabetically * KML export format supported for cave-list and continuation-list * bugs fixed: - PLT export in output coordinate system - context point air-draught not working - instrument position in centerline does not work - debug scrap-names crashes if empty scraps - counter not working in centerline data diving - revise not working outside of survey context - wrong length/depth and other statistics calculation for map output - sketch bitmaps inserted multiple times in PDF files xtherion: * bugs fixed: - new file in xtherion works, even if file is already open -------------------------------------------------------------------------------- Therion 5.3.10 (2012-08-13): therion: * added new point types: ice-stalactite, ice-stalagmite, ice-pillar, clay-choke, clay-tree * added new wall subtypes: pit, flowstone, moonmilk, overlying * added new symbol groups: ice, sediments * added -height option for pit/wall:pit * added new layout option: color map-bg transparent * full OSGB grid coverage (e.g. cs OSGB:ST) * Austrian symbol set added (thanks to Georg Pacher) * added New Zealand symbol set (NZSS, thanks to Bruce Mutton) * updated UIS symbol set (thanks to Bruce Mutton) * updated German translation (thanks to Georg Pacher) * updated Italian translation (thanks to Marco Corvi) * added bulgarian translation (thanks to Alexander Yanev) * updated English translation (thanks to Bruce Mutton) * added te reo Maori translation (thanks to Kyle Davis) * added possibility to define own coordinate system in therion.ini (cs-def) * updated survex img library to version 1.1.15 * added option -enable/disable splay-shots to 3d model export (works with .3d and .kml file formats) * bugs fixed: - fixed huge coordinate numbers in extended elevation xvi - xvi with sketches export - unnecessary warningcheck changes eliminated from metapost code - fixed bug with 3d model generation from scraps without outline - fixed bug with missing patterns in symbols.xhtml - fixed bug - direction point not working with line secion - fixed inaccurate clipping of coloured scrap background - fixed placement of surface bitmaps with larger offset - fixed alignment of some point symbols in AUT symbol set - missing white fill below cave passages in transparent PDFs if background colour is white (needed if the map is included into other map with non-white background) - fixed incorrect line width conversion in some patterns - hide white background of scraps when the PDF layer containing them is invisible - constrained Delaunay triangulation engine replaced by poly2tri - passage outline scanning algorithm improved - "nosurvey" shots allowed between unfixed stations - added missing area flowstone, moonmilk and bedrock into legend - fixed xvi export of extended elevation - fixed symbol-hide/show point remark bug - fixed wall:debris bug in AUT symbol set (thanks to Georg Pacher) - fixed layout color map-bg transparent bug - LRUD area dimensions is drawn for all shots before these shots are drawn (centerline is compact when map is exported from centerline only) xtherion: * bugs fixed: - loch: * VTK file export changed to binary type (problem with coordinate systems) * added checkbox that enables/disables surface lighting (Scene->Surface) * bugs fixed: - vthreshold should work now for LRUD modelling -------------------------------------------------------------------------------- Therion 5.3 (2010-02-17): therion: * added language selector for strings * -filter (on)|off option added to continuation export to support export of all continuations * -surveys (on)|off option added to cave-list export to allow export of raw list of caves * new easy setup for OpenType and TrueType fonts (requires lcdf-typetools) (new otf2pfb and pdf-fonts options in therion.ini) * basic support for right-to-left scripts in labels and legend * PDF files now contain unicode mapping information to allow searching and copying texts consisting of accented and non-latin characters * georeferencing data added to pdf maps * new layout option: symbol-color * new symbol groups: water, speleothems, passage-fills, equipment * new flags for stations: arch and overhang to mark these surface karst features * support for splay shots without station names (using "-" or "." as station name) * added greek translation (thanks to Stelios Zacharias) * added albanian translation (thanks to Fatos Katallozi) * updated german translation (thanks to Roger Schuster; Georg Pacher's additions to be implemented soon) * sketches displayed in map layer in pdf and svg, not among surface bitmaps (T#8996) * PROJ.4 library updated to 4.7.0 * geomag data updated until 2015 * bugs fixed: - BCRA3 and BCRA5 survey grades fixed - missing altitudes in cave list - atlas page exclusion - map header positioning using real numbers - attribute export to metapost - fixed russian translation (B#26399) - transparency in metapost reset when followed by clipped area - back readings supported in data roles+instruments - missing LRUD data in PLT export (B#25532) - segfault on line with single point - "-flip none" not working for scrap - lat/long out of range - map-header x y off behaves as if map-header x y nw (B#25537) - incorrect boundary of background sketches in pdf and svg maps xtherion: * script for creation of OziExplorer MAP files for georeferenced maps (Help->Calibrate bitmap) * added import functions for PocketTopo export - centerline in text editor: File->Import->PocketTopo therion export - sketches in map editor: Backgroud Images->Insert->PocketTopo therion export * bugs fixed: - increasing of station numbers with leading zeros or trailing letters loch: * added File->Import function to allow merging of e.g. 3d files with DTM in loch format * added Tools->Options->Measurement system setup * splay and duplicate shots are hidden by default * entrances, stations and fixed stations and their labels can be displayed on screen (added toolbar buttons and Scene setup->Stations control panel) -------------------------------------------------------------------------------- Therion 5.2 (2008-08-07): therion: * statistics of explored but not yet surveyed passages. Just specify `-explored ' to point continuation or add `explored ' to station flags and this length will be used in survey/cave statistics. * new handling of user defined symbols (including legend) * improved station flags handling. Added new flags for stations: sink, spring, doline, dig, air-draught(:winter|summer). Also `not' is supported before flag. User defined attributes may be added to stations using flag `attr' followed by attribute name and value. * station flags can be turned on|off using layout: symbol-show|hide point flag:entrance|continuation|sink|spring|doline|dig... * added `splay' and `approx[imate]' survey shot flag * grid labeling using coordinates - layout option grid-coords off|border|all * ability to color labels by scrap color using `color labels on|off' in layout * user can change translation of therion texts at runtime using `text' option in configuration or initialization files * when layouts are copied one into another, map-comments are concatenated instead of replaced * added russian translations + encodings (thanks to Vasily Vl. Suhachev) * updated french translations (thanks to Gilbert Fernandes) * attributes to metapost are exported as strings only * bugs fixed: - symbol-show|hide line moonmilk works - declination output fixed (half year shift removed) - invalid LRUD dimensions in PDF map output - installation script - page grid origin not affected by rotation/meridian convergence - scale works with all point labels xtherion: * ERROR/WARNING state of compilation * changed increased default sidebar width + default sidebar width configuration option in xtherion.ini file * single .xtherion.dat file containing survey and map structures is created after compilation * bugs fixed: - "end of line" characters translation - toolbar icon decriptions added to localization files loch: * export of cave 3D model in VTK format using File->Export * bugs fixed: - wxWidgets 2.8.0 compilation thanks to Olly Betts - walls altitude coloring under Linux -------------------------------------------------------------------------------- Therion 0.5.1 (2007-08-29): therion: * added configuration for debian based linux systems: make config-debian * new samples directory * new subtypes for air-draught symbol: winter and summer * new area types: flowstone, moonmilk * ability to display overlying maps in offset * new point and line type: map-connection (used to indicate connection between map parts - extended elevations, maps in offset) * improved default centerline symbols * LRUD envelopes of maps exported from centerline * point -extend option changed to -from * user defined types of points/lines/areas (using u type and custom subtype string e.g. u:electric-cable) * scraps without calibration stations are allowed * coordinate system specification allowed for scraps * areas exported to SHP files * export of simple DXF maps * updated Italian translation (thanks to Marco Corvi) * bugs fixed: - top level objects selection - generation of extended elevation - map coloring - creating surveys from .3d files - subpixel inaccuracy with bitmap morphing - entering angles/lat-long in degree:minutes format - shapefile export fixes xtherion: * DXF/SVG import in map editor (File->Import) * symbol themes and translations comboboxes * autocompletion in symbol type comboboxes * bugs fixed: - translations of type:subtype works loch: * first Mac OS X version works * bugs fixed: - surface texture mapping under Linux -------------------------------------------------------------------------------- Therion 0.5.0 (2007-02-02): therion: * geodetic coordinate systems support -- CS specification in layout, centerline, surface, import and configuration file. Coordinate systems used all around the world are supported (EPSG and ESRI standards). * added GEOMAG model for automatic calculation of magnetic declination according to cave coordinates and survey date * multiple images (PDF, PNG, JPEG) in PDF map supported (e.g. plan and xelevation in single PDF) using new layout option map-image * new improved vector morphing algorithm * morphing of survey sketches now supported. New -sketch option for scrap + sketches switch in layout. Allows export of morphed survey sketches in PDF and XVI. ImageMagick package (convert and identify executables) are needed to use these features. * -attr option for specification of user defined attributes, valid for all objects. Attributes are exported to metapost code using ATTR_* variables. * shapefile map export format * Google Earth (.kml) map (scrap outlines) and model (centerline) export * -enc|-encoding option allowed for map and model export * top level survey command not needed any more * survey: new -namespace switch, enables using datasets with unique station names * new area type: bedrock * subtype specification is now possible using ":" separator (e.g. border:invisible) * added "system" command in configuration files to execute system commands during therion compilation * new layout option: north (true)|grid * -calibrate option for import * source/endsource construct allowed in configuration files * input allowed within multiline commands * improved ceiling and floor meander symbols * background centerline map exported only when no scraps or maps exist * support for 1.1 survex .3d file format * added German translation of symbols (thanks to Roger Schuster), updated Italian translation (thanks to Marco Corvi). * default Linux installation is done into "/usr/local" instead of "/usr" directory * bugs fixed: - automatic calculation of atlas paper size when only size is specified - extended elevation generation ("break" removed, only "ignore" works) - empty map when exported with -layout-color map-fg map xtherion: * compiler preview toolbox (experimental, acrobat reader supported on Win32, xpdf on Linux (original idea of Marco Corvi)) * sketch control (insert, remove) in scrap toolbox * 3D viewer removed from xtherion * does not connect to Internet any more to check new version available * remembers last working directory on Windows * improved scrap scaling - "Scale" button + scale preview arrow in scrap control * scrap selection selects current scrap first * bugs fixed: - hang when area inserted at the end of file - deleting contents of configuration files should not happen any more - fixed zooming of transparent pictures loch: * bugs fixed: - initial size on multiple display machines - crash when file with texture is opened as loch argument (or doubleclick on Win) -------------------------------------------------------------------------------- Therion 0.4.0 (2006-10-02): therion: * loch - new 3D viewer and default 3D export format * VRML model export improved (added surface texture) * export model: -wall-source (all)|maps|centerline -- specify the source of passage walls * layout: survey-level -- show up to N surveys with station names (default N=0, survey-level all is also accepted). * 3d file import improved -- multiple imports of the same centerline allowed * if no map is selected with export, also centerline is exported * symbol sets overview using --print-symbols option. Output in XHTML format (file symbols.xhtml). * fixed bug with autojoin and multiple projection output xtherion: * images outside .th2 file path accepted, relative path is still created using ".." directory reference * area border lines are highlighted, when selected in listbox * backup of configuration files is created after OK compilation * added IT translation -------------------------------------------------------------------------------- Therion 0.3.10 (2006-04-05): therion: * decimal point in low passage heights * fixed bugs: loop closure errors log, symbol-hide group cave-centreline * SVG export in XHTML format * flowstone and waterflow symbols joined in legend, if used as line and point together * improved loop closure method selection - if there was an error when processed using survex - therion is used for loop closure * when scrap size exceed metapost limits - more reasonable errors are generated + limit for centerline scraps is larger * layout: you can change overlap or size and page setup is automatically recalculated * layout: color map-fg scrap * layout: debug station-names xtherion: * added toolbar (thanks to dzach) * added text editor template (in xtherion.ini file) -------------------------------------------------------------------------------- Therion 0.3.9 (2005-08-30): therion: * units (metric)|imperial in layout and initialization file * new therion.ini switch: loop-closure therion|survex By default, survex is used if present, otherwise therion. * fixed bugs - error log when disk full, vtreshold -> vthreshold * map export to .3d files * scraps in one .th2 file that have common end line points are automatically joined * scrap names in map output, via layout: debug scrap-names xtherion: * fixed bugs - view is not moved when line is split, file is not changed when image insertion is canceled -------------------------------------------------------------------------------- Therion 0.3.8 (2005-05-10): therion: * SVG export added (features not yet supported: map header, font embedding, layers, map transparency -- this requires SVG 1.2 features) * DXF model export added * export format automatically determined from file extension * layout: map-header-bg on|(off) - when on, background of map header is filled with background color * .ini files installed into /etc directory, .ini.new files always installed xtherion: * new items in xtherion.ini file * text editor - indent mode now similar to ordinary text editors -------------------------------------------------------------------------------- Therion 0.3.7 (2005-03-16): therion: * new (more intuitive) extended elevation arrangement * new import options: filter, surveys * new surface option: grid-flip * new centerline option: extend * new point type: dimensions * new scrap option: flip * new scrap/centerline option: station-names * reduced `extend' point option * all altitudes are exported as a difference against grid Z origin * XVI (xtherion vector image) map export * UD data from centerline used in 3D model generated from scraps * plt export with LRUD data * `/' supported as survey name character * Unicode characters support in layout TeX code * fixed bugs: plumbed shots; join; statistics of centerline only maps xtherion: * limited i18n support * XVI support (automatic insertion of survey stations, LRUD data) * fixed bug with gamma correction -------------------------------------------------------------------------------- Therion 0.3.6 (2005-01-31): therion: * LRUD passage dimensions support * centreline processed in other programs (*.3d, *.plt) may be imported * transparent solid surface in 3D model * map colouring support * map grid support * if station subtype is not specified, Therion reads it from centreline, if it's specified there * MetaPost symbols completed and improved (error handling, division by zero fixed) * scrap filled and clipped correctly even if scrap border intersects itself * centerline, bounding box and surface supported in 3DMF and VRML export * Spanish translation added * input language changes: - centreline command: mark, walls, vtreshold; + new role pics + new data item ignoreall + new data type dimensions (station, up/ceiling, down/floor, left, right) + LRUD dimensions may specified as pair [ ] - point command: snow - line command: ceiling/floor-meander, border:presumed + line gradient and water-flow not clipped by default - area command: blocks, snow, ice, clay, pebbles - scrap command: -3d changed to -walls option - equate command: may be used outside of centreline - import command added * configuration file changes: - layout command: grid, grid-size, code/endcode, color map-fg , color-legend xtherion: * new items in xtherion.ini * file timestamps are checked while saving * auto save feature * lot of bugfixes * Map editor: new shortcuts (ctrl-a, ctrl-r, page up/down, shift page up/down) * Map editor: clicking twice on the same point ends the point insertion mode * Map editor: station names are automatically increased (or decreased :) in extended elevation) -------------------------------------------------------------------------------- Therion 0.3.5 (2004-11-25): therion: * map rotation in 2D output supported * bug fixed: -scale option works for point labels * input language changes: - centreline command: percent[age] clino units support * configuration file changes: - layout command: rotate xtherion: * Map editor: point, line and area symbol are never inserted outside of a scrap -------------------------------------------------------------------------------- Therion 0.3.4 (2004-10-22): therion: * MetaPost and TeX supplied in Therion for Windows installer work even if there is other TeX(Live) installation present in the system (see the tex-env initialization file option) * if there are no maps defined and map is exported, all scraps in given projection are exported * input language changes: - centreline command: group/endgroup * initialization file: - new option: tex-env * fixed bug in atlas export introduced in 0.3.3 * fixed minor MetaPost bugs xtherion: * Compiler: hyperlinked error messages * Map editor: larger tick at the line symbol beginning * Map editor: new scrap is inserted in the beginning of the file * Map editor: fixed bug when deleting last line point * Map editor: line symbol type change resets rotations and lengths set-up in the line points -------------------------------------------------------------------------------- Therion 0.3.3 (2004-09-10): therion: * surface (topographical) map supported in 2D maps * surface grid supported in 3D models (therion format) * typesetting of legend symbols in multiple columns fixed * input language changes: - new command surface - point, line and area commands have new option: context - line command: survey has new subtypes: cave, surface - line command has new option: adjust - map command: ability to draw centreline from specified survey without drawing a scrap; new option: projection * configuration file changes: - layout command has new options: legend-width, legend-columns, surface, surface-opacity - export model has new options: enable, disable xtherion: * Model viewer: mouse wheel supported -------------------------------------------------------------------------------- Therion 0.3.2 (2004-07-22): therion: * configuration file changes: - layout command: scale 1 50 up to 1 100000 allowed and supported * Therion constructs accented characters if the character is not present in the font. It used to omit the accent and display the base character only * error message `invalid command context' changed to `missing xxx command before yyy command' * French translation added xtherion: * line split bug fixed * automatically checks for updates * 3D viewer: reload (Ctrl+R) * 3D viewer: bounding box computation fixed -------------------------------------------------------------------------------- Therion 0.3.1 (2004-04-23): therion: * input language changes: - scrap command has new option: 3d * windows version: accepts slashes as directory separators in the export command * Czech translation added xtherion: * Map editor: fixed bug with empty lines displayed as text * Map editor: doesn't allow to insert a background image if the *.th2 file hasn't been saved -------------------------------------------------------------------------------- Therion 0.3.0 (2004-04-16): therion: * Therion exports 3D model * loop closure algorithms implemented in Therion * input language changes: - centreline command: fix doesn't accept covariances specification * configuration file changes: - layout command: map-header improved - export command: new formats for 3D model export added -- vrml, 3dmf, therion (default) * initialization file changes: - removed item: path-cavern * log file contains both loop errors and scrap distortions at the end * completely new Win32 installation with TeX and Tcl/Tk included xtherion: * data file may be specified as an argument from the command line * basic 3D model viewer added * Map editor: only the visible part of background images is zoomed (less memory consumption and speed improvement) -------------------------------------------------------------------------------- Therion 0.2.19 (2004-03-01): therion: * input language changes: - place option of point, line, area commands: none renamed to default - area command: place bottom is default - line command: if contour has no gradient specified, visualization is symbol-set dependent (no gradient tick in UIS, tick in the middle in SKBB) - line command: pit may be spelled as pitch - line command has new type: gradient - survey command has new option: person-rename * configuration file changes: - layout command has new option: debug - select command: new rules for selection if there is no map selected * scrap transformation improved, distortion logged in the log file * debugging map mode shows scrap distortions * bug fixed in PLT export xtherion: * Map editor: status bar displays command preview * Map editor: new Area control * Map editor: `Move to' in File commands added * Map editor: name of the edited scrap displayed in Title bar * Map editor: edited line is highlighted * Map editor: selected area is highlighted * Map editor: orientation tick at the beginning of line symbols * Help/Control dialog with key and mouse shortcuts * input (keyboard) encoding menu -------------------------------------------------------------------------------- Therion 0.2.18 (2004-02-12): therion: * Therion supports translations of texts in PDF map/atlas output * Therion exports centreline to SQL database * input language changes: - line command has new type: water-flow - centerline command: discovery-date/team renamed to explo-date/team - layout command has new options: language, colo[u]r, symbol-show, map-comment, map-header, scale-bar, statistics - -author and -copyright options apply only to centreline and scrap, -title to survey, centreline, map and scrap - it's possible to leave date field unspecified `-' * configuration file changes: - export command has new type: database * initialization file changes: - new items: language, encoding-sql - encoding_default renamed to encoding-default * air-draught ticks set according to -scale option -------------------------------------------------------------------------------- Therion 0.2.17 (2003-12-04): therion: * input language changes: - layout command has new options: base-scale, symbol-set, symbol-assign, symbol-hide - size option for point and line symbols accepts following values: tiny (xs), small (s), normal (m), large (l), huge (xl) * support for run-time loading of map symbols * MetaPost processing optimizations -------------------------------------------------------------------------------- Therion 0.2.16 (2003-11-24): therion: * input language changes: - centerline command has new team roles: instruments (insts), assistant (dog) - centerline command has new data readings: up/ceiling, down/floor, left, right, ignore - centerline may be spelled as centreline - deg:min:sec syntax allowed for degree values - point, line and area commands have new option: visibility on/off * new rules for displaying map previews * new initialization file items: tmp-path, tmp-remove * error if no source files are specified * if error occurs under Win32, Therion waits until RETURN is pressed xtherion: * Help/BAC Calculator dialog added -------------------------------------------------------------------------------- Therion 0.2.15: therion: * input language changes: - layout command has new option: code - join command has new option: count * therion checks validity of UTF-8 encoded input files xtherion: * bug fixed -- compiler does not add empty lines to config files -------------------------------------------------------------------------------- Therion 0.2.14 (2003-07-16): therion: * input language changes: - layout command has new option: layers on/off * initialization file syntax changes: cavern-path, pdftex-path, mpost-path, source-path * fonts setup for PDF output * updated documentation * Therion reads (definitely) following environment variable: - THERION -- search paths for [x]therion.ini file -------------------------------------------------------------------------------- Therion 0.2.13 (2003-06-16): therion: * thpdf, theps2pdf and 3dtops external programs integrated into Therion * MetaPost and TeX macros compiled into Therion * compilation: just "make" is enough; works also on win32 systems * input language changes: - centerline command has new options: discovery-date, discovery-team - point command: type anostomosen renamed to anastomosis - layout command has new option: transparency on/off - layout command has changed option: opacity 0.0-100.0 - layout command has changed option: grid-size is measured in real units * Therion reads following environment variables: - THINIT -- search paths for [x]therion.ini file - THERION -- search paths for configuration and source files * PDF output: support for Optional Content Groups (Layers) in Acrobat 6 xtherion: * Text editor: text undo/redo works with tcltk8.4.3 * Map editor: line symbols may be split therion/COPYING0000644000076400010400000004313107777756224014351 0ustar userAdministrators GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. therion/extern/0000755000076400010400000000000012270034353014571 5ustar userAdministratorstherion/extern/dbfopen.c0000644000076400010400000014551510557554444016403 0ustar userAdministrators/****************************************************************************** * $Id: dbfopen.c,v 1.48 2003/03/10 14:51:27 warmerda Exp $ * * Project: Shapelib * Purpose: Implementation of .dbf access API documented in dbf_api.html. * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 1999, Frank Warmerdam * * This software is available under the following "MIT Style" license, * or at the option of the licensee under the LGPL (see LICENSE.LGPL). This * option is discussed in more detail in shapelib.html. * * -- * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. ****************************************************************************** * * $Log: dbfopen.c,v $ * Revision 1.48 2003/03/10 14:51:27 warmerda * DBFWrite* calls now return FALSE if they have to truncate * * Revision 1.47 2002/11/20 03:32:22 warmerda * Ensure field name in DBFGetFieldIndex() is properly terminated. * * Revision 1.46 2002/10/09 13:10:21 warmerda * Added check that width is positive. * * Revision 1.45 2002/09/29 00:00:08 warmerda * added FTLogical and logical attribute read/write calls * * Revision 1.44 2002/05/07 13:46:11 warmerda * Added DBFWriteAttributeDirectly(). * * Revision 1.43 2002/02/13 19:39:21 warmerda * Fix casting issues in DBFCloneEmpty(). * * Revision 1.42 2002/01/15 14:36:07 warmerda * updated email address * * Revision 1.41 2002/01/15 14:31:49 warmerda * compute rather than copying nHeaderLength in DBFCloneEmpty() * * Revision 1.40 2002/01/09 04:32:35 warmerda * fixed to read correct amount of header * * Revision 1.39 2001/12/11 22:41:03 warmerda * improve io related error checking when reading header * * Revision 1.38 2001/11/28 16:07:31 warmerda * Cleanup to avoid compiler warnings as suggested by Richard Hash. * * Revision 1.37 2001/07/04 05:18:09 warmerda * do last fix properly * * Revision 1.36 2001/07/04 05:16:09 warmerda * fixed fieldname comparison in DBFGetFieldIndex * * Revision 1.35 2001/06/22 02:10:06 warmerda * fixed NULL shape support with help from Jim Matthews * * Revision 1.33 2001/05/31 19:20:13 warmerda * added DBFGetFieldIndex() * * Revision 1.32 2001/05/31 18:15:40 warmerda * Added support for NULL fields in DBF files * * Revision 1.31 2001/05/23 13:36:52 warmerda * added use of SHPAPI_CALL * * Revision 1.30 2000/12/05 14:43:38 warmerda * DBReadAttribute() white space trimming bug fix * * Revision 1.29 2000/10/05 14:36:44 warmerda * fix bug with writing very wide numeric fields * * Revision 1.28 2000/09/25 14:18:07 warmerda * Added some casts of strlen() return result to fix warnings on some * systems, as submitted by Daniel. * * Revision 1.27 2000/09/25 14:15:51 warmerda * added DBFGetNativeFieldType() * * Revision 1.26 2000/07/07 13:39:45 warmerda * removed unused variables, and added system include files * * Revision 1.25 2000/05/29 18:19:13 warmerda * avoid use of uchar, and adding casting fix * * Revision 1.24 2000/05/23 13:38:27 warmerda * Added error checks on return results of fread() and fseek(). * * Revision 1.23 2000/05/23 13:25:49 warmerda * Avoid crashing if field or record are out of range in dbfread*attribute(). * * Revision 1.22 1999/12/15 13:47:24 warmerda * Added stdlib.h to ensure that atof() is prototyped. * * Revision 1.21 1999/12/13 17:25:46 warmerda * Added support for upper case .DBF extention. * * Revision 1.20 1999/11/30 16:32:11 warmerda * Use atof() instead of sscanf(). * * Revision 1.19 1999/11/05 14:12:04 warmerda * updated license terms * * Revision 1.18 1999/07/27 00:53:28 warmerda * ensure that whole old field value clear on write of string * * Revision 1.1 1999/07/05 18:58:07 warmerda * New * * Revision 1.17 1999/06/11 19:14:12 warmerda * Fixed some memory leaks. * * Revision 1.16 1999/06/11 19:04:11 warmerda * Remoted some unused variables. * * Revision 1.15 1999/05/11 03:19:28 warmerda * added new Tuple api, and improved extension handling - add from candrsn * * Revision 1.14 1999/05/04 15:01:48 warmerda * Added 'F' support. * * Revision 1.13 1999/03/23 17:38:59 warmerda * DBFAddField() now actually does return the new field number, or -1 if * it fails. * * Revision 1.12 1999/03/06 02:54:46 warmerda * Added logic to convert shapefile name to dbf filename in DBFOpen() * for convenience. * * Revision 1.11 1998/12/31 15:30:34 warmerda * Improved the interchangability of numeric and string attributes. Add * white space trimming option for attributes. * * Revision 1.10 1998/12/03 16:36:44 warmerda * Use r+b instead of rb+ for binary access. * * Revision 1.9 1998/12/03 15:34:23 warmerda * Updated copyright message. * * Revision 1.8 1997/12/04 15:40:15 warmerda * Added newline character after field definitions. * * Revision 1.7 1997/03/06 14:02:10 warmerda * Ensure bUpdated is initialized. * * Revision 1.6 1996/02/12 04:54:41 warmerda * Ensure that DBFWriteAttribute() returns TRUE if it succeeds. * * Revision 1.5 1995/10/21 03:15:12 warmerda * Changed to use binary file access, and ensure that the * field name field is zero filled, and limited to 10 chars. * * Revision 1.4 1995/08/24 18:10:42 warmerda * Added use of SfRealloc() to avoid pre-ANSI realloc() functions such * as on the Sun. * * Revision 1.3 1995/08/04 03:15:16 warmerda * Fixed up header. * * Revision 1.2 1995/08/04 03:14:43 warmerda * Added header. */ /* * static char rcsid[] = * "$Id: dbfopen.c,v 1.48 2003/03/10 14:51:27 warmerda Exp $"; */ #include "shapefil.h" #include #include #include #include #ifndef FALSE # define FALSE 0 # define TRUE 1 #endif static int nStringFieldLen = 0; static char * pszStringField = NULL; /************************************************************************/ /* SfRealloc() */ /* */ /* A realloc cover function that will access a NULL pointer as */ /* a valid input. */ /************************************************************************/ static void * SfRealloc( void * pMem, int nNewSize ) { if( pMem == NULL ) return( (void *) malloc(nNewSize) ); else return( (void *) realloc(pMem,nNewSize) ); } /************************************************************************/ /* DBFWriteHeader() */ /* */ /* This is called to write out the file header, and field */ /* descriptions before writing any actual data records. This */ /* also computes all the DBFDataSet field offset/size/decimals */ /* and so forth values. */ /************************************************************************/ static void DBFWriteHeader(DBFHandle psDBF) { unsigned char abyHeader[XBASE_FLDHDR_SZ]; int i; if( !psDBF->bNoHeader ) return; psDBF->bNoHeader = FALSE; /* -------------------------------------------------------------------- */ /* Initialize the file header information. */ /* -------------------------------------------------------------------- */ for( i = 0; i < XBASE_FLDHDR_SZ; i++ ) abyHeader[i] = 0; abyHeader[0] = 0x03; /* memo field? - just copying */ /* date updated on close, record count preset at zero */ abyHeader[8] = psDBF->nHeaderLength % 256; abyHeader[9] = psDBF->nHeaderLength / 256; abyHeader[10] = psDBF->nRecordLength % 256; abyHeader[11] = psDBF->nRecordLength / 256; /* -------------------------------------------------------------------- */ /* Write the initial 32 byte file header, and all the field */ /* descriptions. */ /* -------------------------------------------------------------------- */ fseek( psDBF->fp, 0, 0 ); fwrite( abyHeader, XBASE_FLDHDR_SZ, 1, psDBF->fp ); fwrite( psDBF->pszHeader, XBASE_FLDHDR_SZ, psDBF->nFields, psDBF->fp ); /* -------------------------------------------------------------------- */ /* Write out the newline character if there is room for it. */ /* -------------------------------------------------------------------- */ if( psDBF->nHeaderLength > 32*psDBF->nFields + 32 ) { char cNewline; cNewline = 0x0d; fwrite( &cNewline, 1, 1, psDBF->fp ); } } /************************************************************************/ /* DBFFlushRecord() */ /* */ /* Write out the current record if there is one. */ /************************************************************************/ static void DBFFlushRecord( DBFHandle psDBF ) { int nRecordOffset; if( psDBF->bCurrentRecordModified && psDBF->nCurrentRecord > -1 ) { psDBF->bCurrentRecordModified = FALSE; nRecordOffset = psDBF->nRecordLength * psDBF->nCurrentRecord + psDBF->nHeaderLength; fseek( psDBF->fp, nRecordOffset, 0 ); fwrite( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp ); } } /************************************************************************/ /* DBFOpen() */ /* */ /* Open a .dbf file. */ /************************************************************************/ DBFHandle SHPAPI_CALL DBFOpen( const char * pszFilename, const char * pszAccess ) { DBFHandle psDBF; unsigned char *pabyBuf; int nFields, nHeadLen, nRecLen, iField, i; char *pszBasename, *pszFullname; /* -------------------------------------------------------------------- */ /* We only allow the access strings "rb" and "r+". */ /* -------------------------------------------------------------------- */ if( strcmp(pszAccess,"r") != 0 && strcmp(pszAccess,"r+") != 0 && strcmp(pszAccess,"rb") != 0 && strcmp(pszAccess,"rb+") != 0 && strcmp(pszAccess,"r+b") != 0 ) return( NULL ); if( strcmp(pszAccess,"r") == 0 ) pszAccess = "rb"; if( strcmp(pszAccess,"r+") == 0 ) pszAccess = "rb+"; /* -------------------------------------------------------------------- */ /* Compute the base (layer) name. If there is any extension */ /* on the passed in filename we will strip it off. */ /* -------------------------------------------------------------------- */ pszBasename = (char *) malloc(strlen(pszFilename)+5); strcpy( pszBasename, pszFilename ); for( i = strlen(pszBasename)-1; i > 0 && pszBasename[i] != '.' && pszBasename[i] != '/' && pszBasename[i] != '\\'; i-- ) {} if( pszBasename[i] == '.' ) pszBasename[i] = '\0'; pszFullname = (char *) malloc(strlen(pszBasename) + 5); sprintf( pszFullname, "%s.dbf", pszBasename ); psDBF = (DBFHandle) calloc( 1, sizeof(DBFInfo) ); psDBF->fp = fopen( pszFullname, pszAccess ); if( psDBF->fp == NULL ) { sprintf( pszFullname, "%s.DBF", pszBasename ); psDBF->fp = fopen(pszFullname, pszAccess ); } free( pszBasename ); free( pszFullname ); if( psDBF->fp == NULL ) { free( psDBF ); return( NULL ); } psDBF->bNoHeader = FALSE; psDBF->nCurrentRecord = -1; psDBF->bCurrentRecordModified = FALSE; /* -------------------------------------------------------------------- */ /* Read Table Header info */ /* -------------------------------------------------------------------- */ pabyBuf = (unsigned char *) malloc(500); if( fread( pabyBuf, 32, 1, psDBF->fp ) != 1 ) { fclose( psDBF->fp ); free( pabyBuf ); free( psDBF ); return NULL; } psDBF->nRecords = pabyBuf[4] + pabyBuf[5]*256 + pabyBuf[6]*256*256 + pabyBuf[7]*256*256*256; psDBF->nHeaderLength = nHeadLen = pabyBuf[8] + pabyBuf[9]*256; psDBF->nRecordLength = nRecLen = pabyBuf[10] + pabyBuf[11]*256; psDBF->nFields = nFields = (nHeadLen - 32) / 32; psDBF->pszCurrentRecord = (char *) malloc(nRecLen); /* -------------------------------------------------------------------- */ /* Read in Field Definitions */ /* -------------------------------------------------------------------- */ pabyBuf = (unsigned char *) SfRealloc(pabyBuf,nHeadLen); psDBF->pszHeader = (char *) pabyBuf; fseek( psDBF->fp, 32, 0 ); if( fread( pabyBuf, nHeadLen-32, 1, psDBF->fp ) != 1 ) { fclose( psDBF->fp ); free( pabyBuf ); free( psDBF ); return NULL; } psDBF->panFieldOffset = (int *) malloc(sizeof(int) * nFields); psDBF->panFieldSize = (int *) malloc(sizeof(int) * nFields); psDBF->panFieldDecimals = (int *) malloc(sizeof(int) * nFields); psDBF->pachFieldType = (char *) malloc(sizeof(char) * nFields); for( iField = 0; iField < nFields; iField++ ) { unsigned char *pabyFInfo; pabyFInfo = pabyBuf+iField*32; if( pabyFInfo[11] == 'N' || pabyFInfo[11] == 'F' ) { psDBF->panFieldSize[iField] = pabyFInfo[16]; psDBF->panFieldDecimals[iField] = pabyFInfo[17]; } else { psDBF->panFieldSize[iField] = pabyFInfo[16] + pabyFInfo[17]*256; psDBF->panFieldDecimals[iField] = 0; } psDBF->pachFieldType[iField] = (char) pabyFInfo[11]; if( iField == 0 ) psDBF->panFieldOffset[iField] = 1; else psDBF->panFieldOffset[iField] = psDBF->panFieldOffset[iField-1] + psDBF->panFieldSize[iField-1]; } return( psDBF ); } /************************************************************************/ /* DBFClose() */ /************************************************************************/ void SHPAPI_CALL DBFClose(DBFHandle psDBF) { /* -------------------------------------------------------------------- */ /* Write out header if not already written. */ /* -------------------------------------------------------------------- */ if( psDBF->bNoHeader ) DBFWriteHeader( psDBF ); DBFFlushRecord( psDBF ); /* -------------------------------------------------------------------- */ /* Update last access date, and number of records if we have */ /* write access. */ /* -------------------------------------------------------------------- */ if( psDBF->bUpdated ) { unsigned char abyFileHeader[32]; fseek( psDBF->fp, 0, 0 ); fread( abyFileHeader, 32, 1, psDBF->fp ); abyFileHeader[1] = 95; /* YY */ abyFileHeader[2] = 7; /* MM */ abyFileHeader[3] = 26; /* DD */ abyFileHeader[4] = psDBF->nRecords % 256; abyFileHeader[5] = (psDBF->nRecords/256) % 256; abyFileHeader[6] = (psDBF->nRecords/(256*256)) % 256; abyFileHeader[7] = (psDBF->nRecords/(256*256*256)) % 256; fseek( psDBF->fp, 0, 0 ); fwrite( abyFileHeader, 32, 1, psDBF->fp ); } /* -------------------------------------------------------------------- */ /* Close, and free resources. */ /* -------------------------------------------------------------------- */ fclose( psDBF->fp ); if( psDBF->panFieldOffset != NULL ) { free( psDBF->panFieldOffset ); free( psDBF->panFieldSize ); free( psDBF->panFieldDecimals ); free( psDBF->pachFieldType ); } free( psDBF->pszHeader ); free( psDBF->pszCurrentRecord ); free( psDBF ); if( pszStringField != NULL ) { free( pszStringField ); pszStringField = NULL; nStringFieldLen = 0; } } /************************************************************************/ /* DBFCreate() */ /* */ /* Create a new .dbf file. */ /************************************************************************/ DBFHandle SHPAPI_CALL DBFCreate( const char * pszFilename ) { DBFHandle psDBF; FILE *fp; char *pszFullname, *pszBasename; int i; /* -------------------------------------------------------------------- */ /* Compute the base (layer) name. If there is any extension */ /* on the passed in filename we will strip it off. */ /* -------------------------------------------------------------------- */ pszBasename = (char *) malloc(strlen(pszFilename)+5); strcpy( pszBasename, pszFilename ); for( i = strlen(pszBasename)-1; i > 0 && pszBasename[i] != '.' && pszBasename[i] != '/' && pszBasename[i] != '\\'; i-- ) {} if( pszBasename[i] == '.' ) pszBasename[i] = '\0'; pszFullname = (char *) malloc(strlen(pszBasename) + 5); sprintf( pszFullname, "%s.dbf", pszBasename ); free( pszBasename ); /* -------------------------------------------------------------------- */ /* Create the file. */ /* -------------------------------------------------------------------- */ fp = fopen( pszFullname, "wb" ); if( fp == NULL ) return( NULL ); fputc( 0, fp ); fclose( fp ); fp = fopen( pszFullname, "rb+" ); if( fp == NULL ) return( NULL ); free( pszFullname ); /* -------------------------------------------------------------------- */ /* Create the info structure. */ /* -------------------------------------------------------------------- */ psDBF = (DBFHandle) malloc(sizeof(DBFInfo)); psDBF->fp = fp; psDBF->nRecords = 0; psDBF->nFields = 0; psDBF->nRecordLength = 1; psDBF->nHeaderLength = 33; psDBF->panFieldOffset = NULL; psDBF->panFieldSize = NULL; psDBF->panFieldDecimals = NULL; psDBF->pachFieldType = NULL; psDBF->pszHeader = NULL; psDBF->nCurrentRecord = -1; psDBF->bCurrentRecordModified = FALSE; psDBF->pszCurrentRecord = NULL; psDBF->bNoHeader = TRUE; return( psDBF ); } /************************************************************************/ /* DBFAddField() */ /* */ /* Add a field to a newly created .dbf file before any records */ /* are written. */ /************************************************************************/ int SHPAPI_CALL DBFAddField(DBFHandle psDBF, const char * pszFieldName, DBFFieldType eType, int nWidth, int nDecimals ) { char *pszFInfo; int i; /* -------------------------------------------------------------------- */ /* Do some checking to ensure we can add records to this file. */ /* -------------------------------------------------------------------- */ if( psDBF->nRecords > 0 ) return( -1 ); if( !psDBF->bNoHeader ) return( -1 ); if( eType != FTDouble && nDecimals != 0 ) return( -1 ); if( nWidth < 1 ) return -1; /* -------------------------------------------------------------------- */ /* SfRealloc all the arrays larger to hold the additional field */ /* information. */ /* -------------------------------------------------------------------- */ psDBF->nFields++; psDBF->panFieldOffset = (int *) SfRealloc( psDBF->panFieldOffset, sizeof(int) * psDBF->nFields ); psDBF->panFieldSize = (int *) SfRealloc( psDBF->panFieldSize, sizeof(int) * psDBF->nFields ); psDBF->panFieldDecimals = (int *) SfRealloc( psDBF->panFieldDecimals, sizeof(int) * psDBF->nFields ); psDBF->pachFieldType = (char *) SfRealloc( psDBF->pachFieldType, sizeof(char) * psDBF->nFields ); /* -------------------------------------------------------------------- */ /* Assign the new field information fields. */ /* -------------------------------------------------------------------- */ psDBF->panFieldOffset[psDBF->nFields-1] = psDBF->nRecordLength; psDBF->nRecordLength += nWidth; psDBF->panFieldSize[psDBF->nFields-1] = nWidth; psDBF->panFieldDecimals[psDBF->nFields-1] = nDecimals; if( eType == FTLogical ) psDBF->pachFieldType[psDBF->nFields-1] = 'L'; else if( eType == FTString ) psDBF->pachFieldType[psDBF->nFields-1] = 'C'; else psDBF->pachFieldType[psDBF->nFields-1] = 'N'; /* -------------------------------------------------------------------- */ /* Extend the required header information. */ /* -------------------------------------------------------------------- */ psDBF->nHeaderLength += 32; psDBF->bUpdated = FALSE; psDBF->pszHeader = (char *) SfRealloc(psDBF->pszHeader,psDBF->nFields*32); pszFInfo = psDBF->pszHeader + 32 * (psDBF->nFields-1); for( i = 0; i < 32; i++ ) pszFInfo[i] = '\0'; if( (int) strlen(pszFieldName) < 10 ) strncpy( pszFInfo, pszFieldName, strlen(pszFieldName)); else strncpy( pszFInfo, pszFieldName, 10); pszFInfo[11] = psDBF->pachFieldType[psDBF->nFields-1]; if( eType == FTString ) { pszFInfo[16] = nWidth % 256; pszFInfo[17] = nWidth / 256; } else { pszFInfo[16] = nWidth; pszFInfo[17] = nDecimals; } /* -------------------------------------------------------------------- */ /* Make the current record buffer appropriately larger. */ /* -------------------------------------------------------------------- */ psDBF->pszCurrentRecord = (char *) SfRealloc(psDBF->pszCurrentRecord, psDBF->nRecordLength); return( psDBF->nFields-1 ); } /************************************************************************/ /* DBFReadAttribute() */ /* */ /* Read one of the attribute fields of a record. */ /************************************************************************/ static void *DBFReadAttribute(DBFHandle psDBF, int hEntity, int iField, char chReqType ) { int nRecordOffset; unsigned char *pabyRec; void *pReturnField = NULL; static double dDoubleField; /* -------------------------------------------------------------------- */ /* Verify selection. */ /* -------------------------------------------------------------------- */ if( hEntity < 0 || hEntity >= psDBF->nRecords ) return( NULL ); if( iField < 0 || iField >= psDBF->nFields ) return( NULL ); /* -------------------------------------------------------------------- */ /* Have we read the record? */ /* -------------------------------------------------------------------- */ if( psDBF->nCurrentRecord != hEntity ) { DBFFlushRecord( psDBF ); nRecordOffset = psDBF->nRecordLength * hEntity + psDBF->nHeaderLength; if( fseek( psDBF->fp, nRecordOffset, 0 ) != 0 ) { fprintf( stderr, "fseek(%d) failed on DBF file.\n", nRecordOffset ); return NULL; } if( fread( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp ) != 1 ) { fprintf( stderr, "fread(%d) failed on DBF file.\n", psDBF->nRecordLength ); return NULL; } psDBF->nCurrentRecord = hEntity; } pabyRec = (unsigned char *) psDBF->pszCurrentRecord; /* -------------------------------------------------------------------- */ /* Ensure our field buffer is large enough to hold this buffer. */ /* -------------------------------------------------------------------- */ if( psDBF->panFieldSize[iField]+1 > nStringFieldLen ) { nStringFieldLen = psDBF->panFieldSize[iField]*2 + 10; pszStringField = (char *) SfRealloc(pszStringField,nStringFieldLen); } /* -------------------------------------------------------------------- */ /* Extract the requested field. */ /* -------------------------------------------------------------------- */ strncpy( pszStringField, ((const char *) pabyRec) + psDBF->panFieldOffset[iField], psDBF->panFieldSize[iField] ); pszStringField[psDBF->panFieldSize[iField]] = '\0'; pReturnField = pszStringField; /* -------------------------------------------------------------------- */ /* Decode the field. */ /* -------------------------------------------------------------------- */ if( chReqType == 'N' ) { dDoubleField = atof(pszStringField); pReturnField = &dDoubleField; } /* -------------------------------------------------------------------- */ /* Should we trim white space off the string attribute value? */ /* -------------------------------------------------------------------- */ #ifdef TRIM_DBF_WHITESPACE else { char *pchSrc, *pchDst; pchDst = pchSrc = pszStringField; while( *pchSrc == ' ' ) pchSrc++; while( *pchSrc != '\0' ) *(pchDst++) = *(pchSrc++); *pchDst = '\0'; while( pchDst != pszStringField && *(--pchDst) == ' ' ) *pchDst = '\0'; } #endif return( pReturnField ); } /************************************************************************/ /* DBFReadIntAttribute() */ /* */ /* Read an integer attribute. */ /************************************************************************/ int SHPAPI_CALL DBFReadIntegerAttribute( DBFHandle psDBF, int iRecord, int iField ) { double *pdValue; pdValue = (double *) DBFReadAttribute( psDBF, iRecord, iField, 'N' ); if( pdValue == NULL ) return 0; else return( (int) *pdValue ); } /************************************************************************/ /* DBFReadDoubleAttribute() */ /* */ /* Read a double attribute. */ /************************************************************************/ double SHPAPI_CALL DBFReadDoubleAttribute( DBFHandle psDBF, int iRecord, int iField ) { double *pdValue; pdValue = (double *) DBFReadAttribute( psDBF, iRecord, iField, 'N' ); if( pdValue == NULL ) return 0.0; else return( *pdValue ); } /************************************************************************/ /* DBFReadStringAttribute() */ /* */ /* Read a string attribute. */ /************************************************************************/ const char SHPAPI_CALL1(*) DBFReadStringAttribute( DBFHandle psDBF, int iRecord, int iField ) { return( (const char *) DBFReadAttribute( psDBF, iRecord, iField, 'C' ) ); } /************************************************************************/ /* DBFReadLogicalAttribute() */ /* */ /* Read a logical attribute. */ /************************************************************************/ const char SHPAPI_CALL1(*) DBFReadLogicalAttribute( DBFHandle psDBF, int iRecord, int iField ) { return( (const char *) DBFReadAttribute( psDBF, iRecord, iField, 'L' ) ); } /************************************************************************/ /* DBFIsAttributeNULL() */ /* */ /* Return TRUE if value for field is NULL. */ /* */ /* Contributed by Jim Matthews. */ /************************************************************************/ int SHPAPI_CALL DBFIsAttributeNULL( DBFHandle psDBF, int iRecord, int iField ) { const char *pszValue; pszValue = DBFReadStringAttribute( psDBF, iRecord, iField ); switch(psDBF->pachFieldType[iField]) { case 'N': case 'F': /* NULL numeric fields have value "****************" */ return pszValue[0] == '*'; case 'D': /* NULL date fields have value "00000000" */ return strncmp(pszValue,"00000000",8) == 0; case 'L': /* NULL boolean fields have value "?" */ return pszValue[0] == '?'; default: /* empty string fields are considered NULL */ return strlen(pszValue) == 0; } } /************************************************************************/ /* DBFGetFieldCount() */ /* */ /* Return the number of fields in this table. */ /************************************************************************/ int SHPAPI_CALL DBFGetFieldCount( DBFHandle psDBF ) { return( psDBF->nFields ); } /************************************************************************/ /* DBFGetRecordCount() */ /* */ /* Return the number of records in this table. */ /************************************************************************/ int SHPAPI_CALL DBFGetRecordCount( DBFHandle psDBF ) { return( psDBF->nRecords ); } /************************************************************************/ /* DBFGetFieldInfo() */ /* */ /* Return any requested information about the field. */ /************************************************************************/ DBFFieldType SHPAPI_CALL DBFGetFieldInfo( DBFHandle psDBF, int iField, char * pszFieldName, int * pnWidth, int * pnDecimals ) { if( iField < 0 || iField >= psDBF->nFields ) return( FTInvalid ); if( pnWidth != NULL ) *pnWidth = psDBF->panFieldSize[iField]; if( pnDecimals != NULL ) *pnDecimals = psDBF->panFieldDecimals[iField]; if( pszFieldName != NULL ) { int i; strncpy( pszFieldName, (char *) psDBF->pszHeader+iField*32, 11 ); pszFieldName[11] = '\0'; for( i = 10; i > 0 && pszFieldName[i] == ' '; i-- ) pszFieldName[i] = '\0'; } if ( psDBF->pachFieldType[iField] == 'L' ) return( FTLogical); else if( psDBF->pachFieldType[iField] == 'N' || psDBF->pachFieldType[iField] == 'F' || psDBF->pachFieldType[iField] == 'D' ) { if( psDBF->panFieldDecimals[iField] > 0 ) return( FTDouble ); else return( FTInteger ); } else { return( FTString ); } } /************************************************************************/ /* DBFWriteAttribute() */ /* */ /* Write an attribute record to the file. */ /************************************************************************/ static int DBFWriteAttribute(DBFHandle psDBF, int hEntity, int iField, void * pValue ) { int nRecordOffset, i, j, nRetResult = TRUE; unsigned char *pabyRec; char szSField[400], szFormat[20]; /* -------------------------------------------------------------------- */ /* Is this a valid record? */ /* -------------------------------------------------------------------- */ if( hEntity < 0 || hEntity > psDBF->nRecords ) return( FALSE ); if( psDBF->bNoHeader ) DBFWriteHeader(psDBF); /* -------------------------------------------------------------------- */ /* Is this a brand new record? */ /* -------------------------------------------------------------------- */ if( hEntity == psDBF->nRecords ) { DBFFlushRecord( psDBF ); psDBF->nRecords++; for( i = 0; i < psDBF->nRecordLength; i++ ) psDBF->pszCurrentRecord[i] = ' '; psDBF->nCurrentRecord = hEntity; } /* -------------------------------------------------------------------- */ /* Is this an existing record, but different than the last one */ /* we accessed? */ /* -------------------------------------------------------------------- */ if( psDBF->nCurrentRecord != hEntity ) { DBFFlushRecord( psDBF ); nRecordOffset = psDBF->nRecordLength * hEntity + psDBF->nHeaderLength; fseek( psDBF->fp, nRecordOffset, 0 ); fread( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp ); psDBF->nCurrentRecord = hEntity; } pabyRec = (unsigned char *) psDBF->pszCurrentRecord; psDBF->bCurrentRecordModified = TRUE; psDBF->bUpdated = TRUE; /* -------------------------------------------------------------------- */ /* Translate NULL value to valid DBF file representation. */ /* */ /* Contributed by Jim Matthews. */ /* -------------------------------------------------------------------- */ if( pValue == NULL ) { switch(psDBF->pachFieldType[iField]) { case 'N': case 'F': /* NULL numeric fields have value "****************" */ memset( (char *) (pabyRec+psDBF->panFieldOffset[iField]), '*', psDBF->panFieldSize[iField] ); break; case 'D': /* NULL date fields have value "00000000" */ memset( (char *) (pabyRec+psDBF->panFieldOffset[iField]), '0', psDBF->panFieldSize[iField] ); break; case 'L': /* NULL boolean fields have value "?" */ memset( (char *) (pabyRec+psDBF->panFieldOffset[iField]), '?', psDBF->panFieldSize[iField] ); break; default: /* empty string fields are considered NULL */ memset( (char *) (pabyRec+psDBF->panFieldOffset[iField]), '\0', psDBF->panFieldSize[iField] ); break; } return TRUE; } /* -------------------------------------------------------------------- */ /* Assign all the record fields. */ /* -------------------------------------------------------------------- */ switch( psDBF->pachFieldType[iField] ) { case 'D': case 'N': case 'F': if( psDBF->panFieldDecimals[iField] == 0 ) { int nWidth = psDBF->panFieldSize[iField]; if( sizeof(szSField)-2 < nWidth ) nWidth = sizeof(szSField)-2; sprintf( szFormat, "%%%dd", nWidth ); sprintf(szSField, szFormat, (int) *((double *) pValue) ); if( (int)strlen(szSField) > psDBF->panFieldSize[iField] ) { szSField[psDBF->panFieldSize[iField]] = '\0'; nRetResult = FALSE; } strncpy((char *) (pabyRec+psDBF->panFieldOffset[iField]), szSField, strlen(szSField) ); } else { int nWidth = psDBF->panFieldSize[iField]; if( sizeof(szSField)-2 < nWidth ) nWidth = sizeof(szSField)-2; sprintf( szFormat, "%%%d.%df", nWidth, psDBF->panFieldDecimals[iField] ); sprintf(szSField, szFormat, *((double *) pValue) ); if( (int) strlen(szSField) > psDBF->panFieldSize[iField] ) { szSField[psDBF->panFieldSize[iField]] = '\0'; nRetResult = FALSE; } strncpy((char *) (pabyRec+psDBF->panFieldOffset[iField]), szSField, strlen(szSField) ); } break; case 'L': if (psDBF->panFieldSize[iField] >= 1 && (*(char*)pValue == 'F' || *(char*)pValue == 'T')) *(pabyRec+psDBF->panFieldOffset[iField]) = *(char*)pValue; break; default: if( (int) strlen((char *) pValue) > psDBF->panFieldSize[iField] ) { j = psDBF->panFieldSize[iField]; nRetResult = FALSE; } else { memset( pabyRec+psDBF->panFieldOffset[iField], ' ', psDBF->panFieldSize[iField] ); j = strlen((char *) pValue); } strncpy((char *) (pabyRec+psDBF->panFieldOffset[iField]), (char *) pValue, j ); break; } return( nRetResult ); } /************************************************************************/ /* DBFWriteAttributeDirectly() */ /* */ /* Write an attribute record to the file, but without any */ /* reformatting based on type. The provided buffer is written */ /* as is to the field position in the record. */ /************************************************************************/ int DBFWriteAttributeDirectly(DBFHandle psDBF, int hEntity, int iField, void * pValue ) { int nRecordOffset, i, j; unsigned char *pabyRec; /* -------------------------------------------------------------------- */ /* Is this a valid record? */ /* -------------------------------------------------------------------- */ if( hEntity < 0 || hEntity > psDBF->nRecords ) return( FALSE ); if( psDBF->bNoHeader ) DBFWriteHeader(psDBF); /* -------------------------------------------------------------------- */ /* Is this a brand new record? */ /* -------------------------------------------------------------------- */ if( hEntity == psDBF->nRecords ) { DBFFlushRecord( psDBF ); psDBF->nRecords++; for( i = 0; i < psDBF->nRecordLength; i++ ) psDBF->pszCurrentRecord[i] = ' '; psDBF->nCurrentRecord = hEntity; } /* -------------------------------------------------------------------- */ /* Is this an existing record, but different than the last one */ /* we accessed? */ /* -------------------------------------------------------------------- */ if( psDBF->nCurrentRecord != hEntity ) { DBFFlushRecord( psDBF ); nRecordOffset = psDBF->nRecordLength * hEntity + psDBF->nHeaderLength; fseek( psDBF->fp, nRecordOffset, 0 ); fread( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp ); psDBF->nCurrentRecord = hEntity; } pabyRec = (unsigned char *) psDBF->pszCurrentRecord; /* -------------------------------------------------------------------- */ /* Assign all the record fields. */ /* -------------------------------------------------------------------- */ if( (int)strlen((char *) pValue) > psDBF->panFieldSize[iField] ) j = psDBF->panFieldSize[iField]; else { memset( pabyRec+psDBF->panFieldOffset[iField], ' ', psDBF->panFieldSize[iField] ); j = strlen((char *) pValue); } strncpy((char *) (pabyRec+psDBF->panFieldOffset[iField]), (char *) pValue, j ); psDBF->bCurrentRecordModified = TRUE; psDBF->bUpdated = TRUE; return( TRUE ); } /************************************************************************/ /* DBFWriteDoubleAttribute() */ /* */ /* Write a double attribute. */ /************************************************************************/ int SHPAPI_CALL DBFWriteDoubleAttribute( DBFHandle psDBF, int iRecord, int iField, double dValue ) { return( DBFWriteAttribute( psDBF, iRecord, iField, (void *) &dValue ) ); } /************************************************************************/ /* DBFWriteIntegerAttribute() */ /* */ /* Write a integer attribute. */ /************************************************************************/ int SHPAPI_CALL DBFWriteIntegerAttribute( DBFHandle psDBF, int iRecord, int iField, int nValue ) { double dValue = nValue; return( DBFWriteAttribute( psDBF, iRecord, iField, (void *) &dValue ) ); } /************************************************************************/ /* DBFWriteStringAttribute() */ /* */ /* Write a string attribute. */ /************************************************************************/ int SHPAPI_CALL DBFWriteStringAttribute( DBFHandle psDBF, int iRecord, int iField, const char * pszValue ) { return( DBFWriteAttribute( psDBF, iRecord, iField, (void *) pszValue ) ); } /************************************************************************/ /* DBFWriteNULLAttribute() */ /* */ /* Write a string attribute. */ /************************************************************************/ int SHPAPI_CALL DBFWriteNULLAttribute( DBFHandle psDBF, int iRecord, int iField ) { return( DBFWriteAttribute( psDBF, iRecord, iField, NULL ) ); } /************************************************************************/ /* DBFWriteLogicalAttribute() */ /* */ /* Write a logical attribute. */ /************************************************************************/ int SHPAPI_CALL DBFWriteLogicalAttribute( DBFHandle psDBF, int iRecord, int iField, const char lValue) { return( DBFWriteAttribute( psDBF, iRecord, iField, (void *) (&lValue) ) ); } /************************************************************************/ /* DBFWriteTuple() */ /* */ /* Write an attribute record to the file. */ /************************************************************************/ int SHPAPI_CALL DBFWriteTuple(DBFHandle psDBF, int hEntity, void * pRawTuple ) { int nRecordOffset, i; unsigned char *pabyRec; /* -------------------------------------------------------------------- */ /* Is this a valid record? */ /* -------------------------------------------------------------------- */ if( hEntity < 0 || hEntity > psDBF->nRecords ) return( FALSE ); if( psDBF->bNoHeader ) DBFWriteHeader(psDBF); /* -------------------------------------------------------------------- */ /* Is this a brand new record? */ /* -------------------------------------------------------------------- */ if( hEntity == psDBF->nRecords ) { DBFFlushRecord( psDBF ); psDBF->nRecords++; for( i = 0; i < psDBF->nRecordLength; i++ ) psDBF->pszCurrentRecord[i] = ' '; psDBF->nCurrentRecord = hEntity; } /* -------------------------------------------------------------------- */ /* Is this an existing record, but different than the last one */ /* we accessed? */ /* -------------------------------------------------------------------- */ if( psDBF->nCurrentRecord != hEntity ) { DBFFlushRecord( psDBF ); nRecordOffset = psDBF->nRecordLength * hEntity + psDBF->nHeaderLength; fseek( psDBF->fp, nRecordOffset, 0 ); fread( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp ); psDBF->nCurrentRecord = hEntity; } pabyRec = (unsigned char *) psDBF->pszCurrentRecord; memcpy ( pabyRec, pRawTuple, psDBF->nRecordLength ); psDBF->bCurrentRecordModified = TRUE; psDBF->bUpdated = TRUE; return( TRUE ); } /************************************************************************/ /* DBFReadTuple() */ /* */ /* Read one of the attribute fields of a record. */ /************************************************************************/ const char SHPAPI_CALL1(*) DBFReadTuple(DBFHandle psDBF, int hEntity ) { int nRecordOffset; unsigned char *pabyRec; static char *pReturnTuple = NULL; static int nTupleLen = 0; /* -------------------------------------------------------------------- */ /* Have we read the record? */ /* -------------------------------------------------------------------- */ if( hEntity < 0 || hEntity >= psDBF->nRecords ) return( NULL ); if( psDBF->nCurrentRecord != hEntity ) { DBFFlushRecord( psDBF ); nRecordOffset = psDBF->nRecordLength * hEntity + psDBF->nHeaderLength; fseek( psDBF->fp, nRecordOffset, 0 ); fread( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp ); psDBF->nCurrentRecord = hEntity; } pabyRec = (unsigned char *) psDBF->pszCurrentRecord; if ( nTupleLen < psDBF->nRecordLength) { nTupleLen = psDBF->nRecordLength; pReturnTuple = (char *) SfRealloc(pReturnTuple, psDBF->nRecordLength); } memcpy ( pReturnTuple, pabyRec, psDBF->nRecordLength ); return( pReturnTuple ); } /************************************************************************/ /* DBFCloneEmpty() */ /* */ /* Read one of the attribute fields of a record. */ /************************************************************************/ DBFHandle SHPAPI_CALL DBFCloneEmpty(DBFHandle psDBF, const char * pszFilename ) { DBFHandle newDBF; newDBF = DBFCreate ( pszFilename ); if ( newDBF == NULL ) return ( NULL ); newDBF->pszHeader = (char *) malloc ( 32 * psDBF->nFields ); memcpy ( newDBF->pszHeader, psDBF->pszHeader, 32 * psDBF->nFields ); newDBF->nFields = psDBF->nFields; newDBF->nRecordLength = psDBF->nRecordLength; newDBF->nHeaderLength = 32 * (psDBF->nFields+1); newDBF->panFieldOffset = (int *) malloc ( sizeof(int) * psDBF->nFields ); memcpy ( newDBF->panFieldOffset, psDBF->panFieldOffset, sizeof(int) * psDBF->nFields ); newDBF->panFieldSize = (int *) malloc ( sizeof(int) * psDBF->nFields ); memcpy ( newDBF->panFieldSize, psDBF->panFieldSize, sizeof(int) * psDBF->nFields ); newDBF->panFieldDecimals = (int *) malloc ( sizeof(int) * psDBF->nFields ); memcpy ( newDBF->panFieldDecimals, psDBF->panFieldDecimals, sizeof(int) * psDBF->nFields ); newDBF->pachFieldType = (char *) malloc ( sizeof(int) * psDBF->nFields ); memcpy ( newDBF->pachFieldType, psDBF->pachFieldType, sizeof(int) * psDBF->nFields ); newDBF->bNoHeader = TRUE; newDBF->bUpdated = TRUE; DBFWriteHeader ( newDBF ); DBFClose ( newDBF ); newDBF = DBFOpen ( pszFilename, "rb+" ); return ( newDBF ); } /************************************************************************/ /* DBFGetNativeFieldType() */ /* */ /* Return the DBase field type for the specified field. */ /* */ /* Value can be one of: 'C' (String), 'D' (Date), 'F' (Float), */ /* 'N' (Numeric, with or without decimal), */ /* 'L' (Logical), */ /* 'M' (Memo: 10 digits .DBT block ptr) */ /************************************************************************/ char SHPAPI_CALL DBFGetNativeFieldType( DBFHandle psDBF, int iField ) { if( iField >=0 && iField < psDBF->nFields ) return psDBF->pachFieldType[iField]; return ' '; } /************************************************************************/ /* str_to_upper() */ /************************************************************************/ static void str_to_upper (char *string) { int len; short i = -1; len = strlen (string); while (++i < len) if (isalpha(string[i]) && islower(string[i])) string[i] = toupper ((int)string[i]); } /************************************************************************/ /* DBFGetFieldIndex() */ /* */ /* Get the index number for a field in a .dbf file. */ /* */ /* Contributed by Jim Matthews. */ /************************************************************************/ int SHPAPI_CALL DBFGetFieldIndex(DBFHandle psDBF, const char *pszFieldName) { char name[12], name1[12], name2[12]; int i; strncpy(name1, pszFieldName,11); name1[11] = '\0'; str_to_upper(name1); for( i = 0; i < DBFGetFieldCount(psDBF); i++ ) { DBFGetFieldInfo( psDBF, i, name, NULL, NULL ); strncpy(name2,name,11); str_to_upper(name2); if(!strncmp(name1,name2,10)) return(i); } return(-1); } therion/extern/getline.c0000644000076400010400000000713412047263476016405 0ustar userAdministrators/* getline.c -- Replacement for GNU C library function getline Copyright (C) 1993, 1996, 1997 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Written by Jan Brittenson, bson@gnu.ai.mit.edu. */ #if HAVE_CONFIG_H # include #endif /* The `getdelim' function is only declared if the following symbol is defined. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #include #include #if defined __GNU_LIBRARY__ && HAVE_GETDELIM int getline (lineptr, n, stream) char **lineptr; size_t *n; FILE *stream; { return getdelim (lineptr, n, '\n', stream); } #else /* ! have getdelim */ # define NDEBUG # include # include /* Always add at least this many bytes when extending the buffer. */ # define MIN_CHUNK 64 /* Read up to (and including) a TERMINATOR from STREAM into *LINEPTR + OFFSET (and null-terminate it). *LINEPTR is a pointer returned from malloc (or NULL), pointing to *N characters of space. It is realloc'd as necessary. Return the number of characters read (not including the null terminator), or -1 on error or EOF. */ int getstr (lineptr, n, stream, terminator, offset) char **lineptr; size_t *n; FILE *stream; char terminator; size_t offset; { int nchars_avail; /* Allocated but unused chars in *LINEPTR. */ char *read_pos; /* Where we're reading into *LINEPTR. */ int ret; if (!lineptr || !n || !stream) return -1; if (!*lineptr) { *n = MIN_CHUNK; *lineptr = malloc (*n); if (!*lineptr) return -1; } nchars_avail = *n - offset; read_pos = *lineptr + offset; for (;;) { register int c = getc (stream); /* We always want at least one char left in the buffer, since we always (unless we get an error while reading the first char) NUL-terminate the line buffer. */ assert(*n - nchars_avail == read_pos - *lineptr); if (nchars_avail < 2) { if (*n > MIN_CHUNK) *n *= 2; else *n += MIN_CHUNK; nchars_avail = *n + *lineptr - read_pos; *lineptr = realloc (*lineptr, *n); if (!*lineptr) return -1; read_pos = *n - nchars_avail + *lineptr; assert(*n - nchars_avail == read_pos - *lineptr); } if (c == EOF || ferror (stream)) { /* Return partial line, if any. */ if (read_pos == *lineptr) return -1; else break; } *read_pos++ = c; nchars_avail--; if (c == terminator) /* Return the line. */ break; } /* Done - NUL terminate and return the number of chars read. */ *read_pos = '\0'; ret = read_pos - (*lineptr + offset); return ret; } #ifndef __APPLE__ int getline (lineptr, n, stream) char **lineptr; size_t *n; FILE *stream; { return getstr (lineptr, n, stream, '\n', 0); } int getdelim (lineptr, n, delimiter, stream) char **lineptr; size_t *n; int delimiter; FILE *stream; { return getstr (lineptr, n, stream, delimiter, 0); } #endif #endiftherion/extern/getline.h0000644000076400010400000000177710430102004016366 0ustar userAdministrators/* Copyright (C) 1995, 1997 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef GETLINE_H_ # define GETLINE_H_ 1 #ifdef __cplusplus extern "C" { #endif # include int getline (char **_lineptr, size_t *_n, FILE *_stream); int getdelim (char **_lineptr, size_t *_n, int _delimiter, FILE *_stream); #ifdef __cplusplus } #endif #endif /* not GETLINE_H_ */ therion/extern/getopt.c0000644000076400010400000007301510402755572016255 0ustar userAdministrators/* Getopt for GNU. NOTE: getopt is now part of the C library, so if you don't know what "Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu before changing it! Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97 Free Software Foundation, Inc. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* This tells Alpha OSF/1 not to define a getopt prototype in . Ditto for AIX 3.2 and . */ #ifndef _NO_PROTO #define _NO_PROTO #endif #ifndef __GNU_LIBRARY__ #define __GNU_LIBRARY__ 1 #endif #ifdef HAVE_CONFIG_H #include #endif #if !defined (__STDC__) || !__STDC__ /* This is a separate conditional since some stdc systems reject `defined (const)'. */ #ifndef const #define const #endif #endif #include /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself. This code is part of the GNU C Library, but also included in many other GNU distributions. Compiling and linking in this code is a waste when using the GNU C library (especially if it is a shared library). Rather than having every GNU program understand `configure --with-gnu-libc' and omit the object files, it is simpler to just do this in the source for each such file. */ #define GETOPT_INTERFACE_VERSION 2 #if !defined (_LIBC) && defined (__GLIBC__) && __GLIBC__ >= 2 #include #if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION #define ELIDE_CODE #endif #endif #ifndef ELIDE_CODE /* This needs to come after some library #include to get __GNU_LIBRARY__ defined. */ #ifdef __GNU_LIBRARY__ /* Don't include stdlib.h for non-GNU C libraries because some of them contain conflicting prototypes for getopt. */ #include #ifndef THMSVC #include #endif #endif /* GNU C library. */ #ifdef VMS #include #if HAVE_STRING_H - 0 #include #endif #endif #if defined (WIN32) && !defined (__CYGWIN32__) /* It's not Unix, really. See? Capital letters. */ #include #define getpid() GetCurrentProcessId() #endif #ifndef _ /* This is for other GNU distributions with internationalized messages. When compiling libc, the _ macro is predefined. */ #ifdef HAVE_LIBINTL_H # include # define _(msgid) gettext (msgid) #else # define _(msgid) (msgid) #endif #endif /* This version of `getopt' appears to the caller like standard Unix `getopt' but it behaves differently for the user, since it allows the user to intersperse the options with the other arguments. As `getopt' works, it permutes the elements of ARGV so that, when it is done, all the options precede everything else. Thus all application programs are extended to handle flexible argument order. Setting the environment variable POSIXLY_CORRECT disables permutation. Then the behavior is completely standard. GNU application programs can use a third alternative mode in which they can distinguish the relative order of options and other arguments. */ #include "getopt.h" /* For communication from `getopt' to the caller. When `getopt' finds an option that takes an argument, the argument value is returned here. Also, when `ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ char *optarg = NULL; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to `getopt'. On entry to `getopt', zero means this is the first call; initialize. When `getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, `optind' communicates from one call to the next how much of ARGV has been scanned so far. */ /* 1003.2 says this must be 1 before any call. */ int optind = 1; /* Formerly, initialization of getopt depended on optind==0, which causes problems with re-calling getopt as programs generally don't know that. */ int __getopt_initialized = 0; /* The next char to be scanned in the option-element in which the last option character we returned was found. This allows us to pick up the scan where we left off. If this is zero, or a null string, it means resume the scan by advancing to the next ARGV-element. */ static char *nextchar; /* Callers store zero here to inhibit the error message for unrecognized options. */ int opterr = 1; /* Set to an option character which was unrecognized. This must be initialized on some systems to avoid linking in the system's own getopt implementation. */ int optopt = '?'; /* Describe how to deal with options that follow non-option ARGV-elements. If the caller did not specify anything, the default is REQUIRE_ORDER if the environment variable POSIXLY_CORRECT is defined, PERMUTE otherwise. REQUIRE_ORDER means don't recognize them as options; stop option processing when the first non-option is seen. This is what Unix does. This mode of operation is selected by either setting the environment variable POSIXLY_CORRECT, or using `+' as the first character of the list of option characters. PERMUTE is the default. We permute the contents of ARGV as we scan, so that eventually all the non-options are at the end. This allows options to be given in any order, even with programs that were not written to expect this. RETURN_IN_ORDER is an option available to programs that were written to expect options and other ARGV-elements in any order and that care about the ordering of the two. We describe each non-option ARGV-element as if it were the argument of an option with character code 1. Using `-' as the first character of the list of option characters selects this mode of operation. The special argument `--' forces an end of option-scanning regardless of the value of `ordering'. In the case of RETURN_IN_ORDER, only `--' can cause `getopt' to return -1 with `optind' != ARGC. */ static enum { REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER } ordering; /* Value of POSIXLY_CORRECT environment variable. */ static char *posixly_correct; #ifdef __GNU_LIBRARY__ /* We want to avoid inclusion of string.h with non-GNU libraries because there are many ways it can cause trouble. On some systems, it contains special magic macros that don't work in GCC. */ #include #define my_index strchr #else /* Avoid depending on library functions or files whose names are inconsistent. */ char *getenv (); static char * my_index (str, chr) const char *str; int chr; { while (*str) { if (*str == chr) return (char *) str; str++; } return 0; } /* If using GCC, we can safely declare strlen this way. If not using GCC, it is ok not to declare it. */ #ifdef __GNUC__ /* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h. That was relevant to code that was here before. */ #if !defined (__STDC__) || !__STDC__ /* gcc with -traditional declares the built-in strlen to return int, and has done so at least since version 2.4.5. -- rms. */ extern int strlen (const char *); #endif /* not __STDC__ */ #endif /* __GNUC__ */ #endif /* not __GNU_LIBRARY__ */ /* Handle permutation of arguments. */ /* Describe the part of ARGV that contains non-options that have been skipped. `first_nonopt' is the index in ARGV of the first of them; `last_nonopt' is the index after the last of them. */ static int first_nonopt; static int last_nonopt; #ifdef _LIBC /* Bash 2.0 gives us an environment variable containing flags indicating ARGV elements that should not be considered arguments. */ /* Defined in getopt_init.c */ extern char *__getopt_nonoption_flags; static int nonoption_flags_max_len; static int nonoption_flags_len; static int original_argc; static char *const *original_argv; extern pid_t __libc_pid; /* Make sure the environment variable bash 2.0 puts in the environment is valid for the getopt call we must make sure that the ARGV passed to getopt is that one passed to the process. */ static void __attribute__ ((unused)) store_args_and_env (int argc, char *const *argv) { /* XXX This is no good solution. We should rather copy the args so that we can compare them later. But we must not use malloc(3). */ original_argc = argc; original_argv = argv; } text_set_element (__libc_subinit, store_args_and_env); # define SWAP_FLAGS(ch1, ch2) \ if (nonoption_flags_len > 0) \ { \ char __tmp = __getopt_nonoption_flags[ch1]; \ __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \ __getopt_nonoption_flags[ch2] = __tmp; \ } #else /* !_LIBC */ # define SWAP_FLAGS(ch1, ch2) #endif /* _LIBC */ /* Exchange two adjacent subsequences of ARGV. One subsequence is elements [first_nonopt,last_nonopt) which contains all the non-options that have been skipped so far. The other is elements [last_nonopt,optind), which contains all the options processed since those non-options were skipped. `first_nonopt' and `last_nonopt' are relocated so that they describe the new indices of the non-options in ARGV after they are moved. */ #if defined (__STDC__) && __STDC__ static void exchange (char **); #endif static void exchange (argv) char **argv; { int bottom = first_nonopt; int middle = last_nonopt; int top = optind; char *tem; /* Exchange the shorter segment with the far end of the longer segment. That puts the shorter segment into the right place. It leaves the longer segment in the right place overall, but it consists of two parts that need to be swapped next. */ #ifdef _LIBC /* First make sure the handling of the `__getopt_nonoption_flags' string can work normally. Our top argument must be in the range of the string. */ if (nonoption_flags_len > 0 && top >= nonoption_flags_max_len) { /* We must extend the array. The user plays games with us and presents new arguments. */ char *new_str = malloc (top + 1); if (new_str == NULL) nonoption_flags_len = nonoption_flags_max_len = 0; else { memcpy (new_str, __getopt_nonoption_flags, nonoption_flags_max_len); memset (&new_str[nonoption_flags_max_len], '\0', top + 1 - nonoption_flags_max_len); nonoption_flags_max_len = top + 1; __getopt_nonoption_flags = new_str; } } #endif while (top > middle && middle > bottom) { if (top - middle > middle - bottom) { /* Bottom segment is the short one. */ int len = middle - bottom; register int i; /* Swap it with the top part of the top segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[top - (middle - bottom) + i]; argv[top - (middle - bottom) + i] = tem; SWAP_FLAGS (bottom + i, top - (middle - bottom) + i); } /* Exclude the moved bottom segment from further swapping. */ top -= len; } else { /* Top segment is the short one. */ int len = top - middle; register int i; /* Swap it with the bottom part of the bottom segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[middle + i]; argv[middle + i] = tem; SWAP_FLAGS (bottom + i, middle + i); } /* Exclude the moved top segment from further swapping. */ bottom += len; } } /* Update records for the slots the non-options now occupy. */ first_nonopt += (optind - last_nonopt); last_nonopt = optind; } /* Initialize the internal data when the first call is made. */ #if defined (__STDC__) && __STDC__ static const char *_getopt_initialize (int, char *const *, const char *); #endif static const char * _getopt_initialize (argc, argv, optstring) int argc; char *const *argv; const char *optstring; { /* Start processing options with ARGV-element 1 (since ARGV-element 0 is the program name); the sequence of previously skipped non-option ARGV-elements is empty. */ first_nonopt = last_nonopt = optind; nextchar = NULL; posixly_correct = getenv ("POSIXLY_CORRECT"); /* Determine how to handle the ordering of options and nonoptions. */ if (optstring[0] == '-') { ordering = RETURN_IN_ORDER; ++optstring; } else if (optstring[0] == '+') { ordering = REQUIRE_ORDER; ++optstring; } else if (posixly_correct != NULL) ordering = REQUIRE_ORDER; else ordering = PERMUTE; #ifdef _LIBC if (posixly_correct == NULL && argc == original_argc && argv == original_argv) { if (nonoption_flags_max_len == 0) { if (__getopt_nonoption_flags == NULL || __getopt_nonoption_flags[0] == '\0') nonoption_flags_max_len = -1; else { const char *orig_str = __getopt_nonoption_flags; int len = nonoption_flags_max_len = strlen (orig_str); if (nonoption_flags_max_len < argc) nonoption_flags_max_len = argc; __getopt_nonoption_flags = (char *) malloc (nonoption_flags_max_len); if (__getopt_nonoption_flags == NULL) nonoption_flags_max_len = -1; else { memcpy (__getopt_nonoption_flags, orig_str, len); memset (&__getopt_nonoption_flags[len], '\0', nonoption_flags_max_len - len); } } } nonoption_flags_len = nonoption_flags_max_len; } else nonoption_flags_len = 0; #endif return optstring; } /* Scan elements of ARGV (whose length is ARGC) for option characters given in OPTSTRING. If an element of ARGV starts with '-', and is not exactly "-" or "--", then it is an option element. The characters of this element (aside from the initial '-') are option characters. If `getopt' is called repeatedly, it returns successively each of the option characters from each of the option elements. If `getopt' finds another option character, it returns that character, updating `optind' and `nextchar' so that the next call to `getopt' can resume the scan with the following option character or ARGV-element. If there are no more option characters, `getopt' returns -1. Then `optind' is the index in ARGV of the first ARGV-element that is not an option. (The ARGV-elements have been permuted so that those that are not options now come last.) OPTSTRING is a string containing the legitimate option characters. If an option character is seen that is not listed in OPTSTRING, return '?' after printing an error message. If you set `opterr' to zero, the error message is suppressed but we still return '?'. If a char in OPTSTRING is followed by a colon, that means it wants an arg, so the following text in the same ARGV-element, or the text of the following ARGV-element, is returned in `optarg'. Two colons mean an option that wants an optional arg; if there is text in the current ARGV-element, it is returned in `optarg', otherwise `optarg' is set to zero. If OPTSTRING starts with `-' or `+', it requests different methods of handling the non-option ARGV-elements. See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. Long-named options begin with `--' instead of `-'. Their names may be abbreviated as long as the abbreviation is unique or is an exact match for some defined option. If they have an argument, it follows the option name in the same ARGV-element, separated from the option name by a `=', or else the in next ARGV-element. When `getopt' finds a long-named option, it returns 0 if that option's `flag' field is nonzero, the value of the option's `val' field if the `flag' field is zero. The elements of ARGV aren't really const, because we permute them. But we pretend they're const in the prototype to be compatible with other systems. LONGOPTS is a vector of `struct option' terminated by an element containing a name which is zero. LONGIND returns the index in LONGOPT of the long-named option found. It is only valid when a long-named option has been found by the most recent call. If LONG_ONLY is nonzero, '-' as well as '--' can introduce long-named options. */ int _getopt_internal (argc, argv, optstring, longopts, longind, long_only) int argc; char *const *argv; const char *optstring; const struct option *longopts; int *longind; int long_only; { optarg = NULL; if (optind == 0 || !__getopt_initialized) { if (optind == 0) optind = 1; /* Don't scan ARGV[0], the program name. */ optstring = _getopt_initialize (argc, argv, optstring); __getopt_initialized = 1; } /* Test whether ARGV[optind] points to a non-option argument. Either it does not have option syntax, or there is an environment flag from the shell indicating it is not an option. The later information is only used when the used in the GNU libc. */ #ifdef _LIBC #define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \ || (optind < nonoption_flags_len \ && __getopt_nonoption_flags[optind] == '1')) #else #define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0') #endif if (nextchar == NULL || *nextchar == '\0') { /* Advance to the next ARGV-element. */ /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been moved back by the user (who may also have changed the arguments). */ if (last_nonopt > optind) last_nonopt = optind; if (first_nonopt > optind) first_nonopt = optind; if (ordering == PERMUTE) { /* If we have just processed some options following some non-options, exchange them so that the options come first. */ if (first_nonopt != last_nonopt && last_nonopt != optind) exchange ((char **) argv); else if (last_nonopt != optind) first_nonopt = optind; /* Skip any additional non-options and extend the range of non-options previously skipped. */ while (optind < argc && NONOPTION_P) optind++; last_nonopt = optind; } /* The special ARGV-element `--' means premature end of options. Skip it like a null option, then exchange with previous non-options as if it were an option, then skip everything else like a non-option. */ if (optind != argc && !strcmp (argv[optind], "--")) { optind++; if (first_nonopt != last_nonopt && last_nonopt != optind) exchange ((char **) argv); else if (first_nonopt == last_nonopt) first_nonopt = optind; last_nonopt = argc; optind = argc; } /* If we have done all the ARGV-elements, stop the scan and back over any non-options that we skipped and permuted. */ if (optind == argc) { /* Set the next-arg-index to point at the non-options that we previously skipped, so the caller will digest them. */ if (first_nonopt != last_nonopt) optind = first_nonopt; return -1; } /* If we have come to a non-option and did not permute it, either stop the scan or describe it to the caller and pass it by. */ if (NONOPTION_P) { if (ordering == REQUIRE_ORDER) return -1; optarg = argv[optind++]; return 1; } /* We have found another option-ARGV-element. Skip the initial punctuation. */ nextchar = (argv[optind] + 1 + (longopts != NULL && argv[optind][1] == '-')); } /* Decode the current option-ARGV-element. */ /* Check whether the ARGV-element is a long option. If long_only and the ARGV-element has the form "-f", where f is a valid short option, don't consider it an abbreviated form of a long option that starts with f. Otherwise there would be no way to give the -f short option. On the other hand, if there's a long option "fubar" and the ARGV-element is "-fu", do consider that an abbreviation of the long option, just like "--fu", and not "-f" with arg "u". This distinction seems to be the most useful approach. */ if (longopts != NULL && (argv[optind][1] == '-' || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1]))))) { char *nameend; const struct option *p; const struct option *pfound = NULL; int exact = 0; int ambig = 0; int indfound = -1; int option_index; for (nameend = nextchar; *nameend && *nameend != '='; nameend++) /* Do nothing. */ ; /* Test all long options for either exact match or abbreviated matches. */ for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp (p->name, nextchar, nameend - nextchar)) { if ((unsigned int) (nameend - nextchar) == (unsigned int) strlen (p->name)) { /* Exact match found. */ pfound = p; indfound = option_index; exact = 1; break; } else if (pfound == NULL) { /* First nonexact match found. */ pfound = p; indfound = option_index; } else /* Second or later nonexact match found. */ ambig = 1; } if (ambig && !exact) { if (opterr) fprintf (stderr, _("%s: option `%s' is ambiguous\n"), argv[0], argv[optind]); nextchar += strlen (nextchar); optind++; optopt = 0; return '?'; } if (pfound != NULL) { option_index = indfound; optind++; if (*nameend) { /* Don't test has_arg with >, because some C compilers don't allow it to be used on enums. */ if (pfound->has_arg) optarg = nameend + 1; else { if (opterr) { if (argv[optind - 1][1] == '-') /* --option */ fprintf (stderr, _("%s: option `--%s' doesn't allow an argument\n"), argv[0], pfound->name); else /* +option or -option */ fprintf (stderr, _("%s: option `%c%s' doesn't allow an argument\n"), argv[0], argv[optind - 1][0], pfound->name); } nextchar += strlen (nextchar); optopt = pfound->val; return '?'; } } else if (pfound->has_arg == 1) { if (optind < argc) optarg = argv[optind++]; else { if (opterr) fprintf (stderr, _("%s: option `%s' requires an argument\n"), argv[0], argv[optind - 1]); nextchar += strlen (nextchar); optopt = pfound->val; return optstring[0] == ':' ? ':' : '?'; } } nextchar += strlen (nextchar); if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } /* Can't find it as a long option. If this is not getopt_long_only, or the option starts with '--' or is not a valid short option, then it's an error. Otherwise interpret it as a short option. */ if (!long_only || argv[optind][1] == '-' || my_index (optstring, *nextchar) == NULL) { if (opterr) { if (argv[optind][1] == '-') /* --option */ fprintf (stderr, _("%s: unrecognized option `--%s'\n"), argv[0], nextchar); else /* +option or -option */ fprintf (stderr, _("%s: unrecognized option `%c%s'\n"), argv[0], argv[optind][0], nextchar); } nextchar = (char *) ""; optind++; optopt = 0; return '?'; } } /* Look at and handle the next short option-character. */ { char c = *nextchar++; char *temp = my_index (optstring, c); /* Increment `optind' when we start to process its last character. */ if (*nextchar == '\0') ++optind; if (temp == NULL || c == ':') { if (opterr) { if (posixly_correct) /* 1003.2 specifies the format of this message. */ fprintf (stderr, _("%s: illegal option -- %c\n"), argv[0], c); else fprintf (stderr, _("%s: invalid option -- %c\n"), argv[0], c); } optopt = c; return '?'; } /* Convenience. Treat POSIX -W foo same as long option --foo */ if (temp[0] == 'W' && temp[1] == ';') { char *nameend; const struct option *p; const struct option *pfound = NULL; int exact = 0; int ambig = 0; int indfound = 0; int option_index; /* This is an option that requires an argument. */ if (*nextchar != '\0') { optarg = nextchar; /* If we end this ARGV-element by taking the rest as an arg, we must advance to the next element now. */ optind++; } else if (optind == argc) { if (opterr) { /* 1003.2 specifies the format of this message. */ fprintf (stderr, _("%s: option requires an argument -- %c\n"), argv[0], c); } optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; return c; } else /* We already incremented `optind' once; increment it again when taking next ARGV-elt as argument. */ optarg = argv[optind++]; /* optarg is now the argument, see if it's in the table of longopts. */ for (nextchar = nameend = optarg; *nameend && *nameend != '='; nameend++) /* Do nothing. */ ; /* Test all long options for either exact match or abbreviated matches. */ for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp (p->name, nextchar, nameend - nextchar)) { if ((unsigned int) (nameend - nextchar) == strlen (p->name)) { /* Exact match found. */ pfound = p; indfound = option_index; exact = 1; break; } else if (pfound == NULL) { /* First nonexact match found. */ pfound = p; indfound = option_index; } else /* Second or later nonexact match found. */ ambig = 1; } if (ambig && !exact) { if (opterr) fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"), argv[0], argv[optind]); nextchar += strlen (nextchar); optind++; return '?'; } if (pfound != NULL) { option_index = indfound; if (*nameend) { /* Don't test has_arg with >, because some C compilers don't allow it to be used on enums. */ if (pfound->has_arg) optarg = nameend + 1; else { if (opterr) fprintf (stderr, _("\ %s: option `-W %s' doesn't allow an argument\n"), argv[0], pfound->name); nextchar += strlen (nextchar); return '?'; } } else if (pfound->has_arg == 1) { if (optind < argc) optarg = argv[optind++]; else { if (opterr) fprintf (stderr, _("%s: option `%s' requires an argument\n"), argv[0], argv[optind - 1]); nextchar += strlen (nextchar); return optstring[0] == ':' ? ':' : '?'; } } nextchar += strlen (nextchar); if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } nextchar = NULL; return 'W'; /* Let the application handle it. */ } if (temp[1] == ':') { if (temp[2] == ':') { /* This is an option that accepts an argument optionally. */ if (*nextchar != '\0') { optarg = nextchar; optind++; } else optarg = NULL; nextchar = NULL; } else { /* This is an option that requires an argument. */ if (*nextchar != '\0') { optarg = nextchar; /* If we end this ARGV-element by taking the rest as an arg, we must advance to the next element now. */ optind++; } else if (optind == argc) { if (opterr) { /* 1003.2 specifies the format of this message. */ fprintf (stderr, _("%s: option requires an argument -- %c\n"), argv[0], c); } optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; } else /* We already incremented `optind' once; increment it again when taking next ARGV-elt as argument. */ optarg = argv[optind++]; nextchar = NULL; } } return c; } } int getopt (argc, argv, optstring) int argc; char *const *argv; const char *optstring; { return _getopt_internal (argc, argv, optstring, (const struct option *) 0, (int *) 0, 0); } #endif /* Not ELIDE_CODE. */ #ifdef TEST /* Compile with -DTEST to make an executable for use in testing the above definition of `getopt'. */ int main (argc, argv) int argc; char **argv; { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; c = getopt (argc, argv, "abc:d:0123456789"); if (c == -1) break; switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value `%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ therion/extern/getopt.h0000644000076400010400000001104610402755572016256 0ustar userAdministrators/* Declarations for getopt. Copyright (C) 1989,90,91,92,93,94,96,97 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef _GETOPT_H #define _GETOPT_H 1 #ifndef __GNU_LIBRARY__ #define __GNU_LIBRARY__ 1 #endif #ifdef __cplusplus extern "C" { #endif /* For communication from `getopt' to the caller. When `getopt' finds an option that takes an argument, the argument value is returned here. Also, when `ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ extern char *optarg; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to `getopt'. On entry to `getopt', zero means this is the first call; initialize. When `getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, `optind' communicates from one call to the next how much of ARGV has been scanned so far. */ extern int optind; /* Callers store zero here to inhibit the error message `getopt' prints for unrecognized options. */ extern int opterr; /* Set to an option character which was unrecognized. */ extern int optopt; /* Describe the long-named options requested by the application. The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector of `struct option' terminated by an element containing a name which is zero. The field `has_arg' is: no_argument (or 0) if the option does not take an argument, required_argument (or 1) if the option requires an argument, optional_argument (or 2) if the option takes an optional argument. If the field `flag' is not NULL, it points to a variable that is set to the value given in the field `val' when the option is found, but left unchanged if the option is not found. To have a long-named option do something other than set an `int' to a compiled-in constant, such as set a value from `optarg', set the option's `flag' field to zero and its `val' field to a nonzero value (the equivalent single-letter option character, if there is one). For long options that have a zero `flag' field, `getopt' returns the contents of the `val' field. */ struct option { #if defined (__STDC__) && __STDC__ const char *name; #else char *name; #endif /* has_arg can't be an enum because some compilers complain about type mismatches in all the code that assumes it is an int. */ int has_arg; int *flag; int val; }; /* Names for the values of the `has_arg' field of `struct option'. */ #define no_argument 0 #define required_argument 1 #define optional_argument 2 #if defined (__STDC__) && __STDC__ #ifdef __GNU_LIBRARY__ /* Many other libraries have conflicting prototypes for getopt, with differences in the consts, in stdlib.h. To avoid compilation errors, only prototype getopt for the GNU C library. */ extern int getopt (int argc, char *const *argv, const char *shortopts); #else /* not __GNU_LIBRARY__ */ extern int getopt (); #endif /* __GNU_LIBRARY__ */ extern int getopt_long (int argc, char *const *argv, const char *shortopts, const struct option *longopts, int *longind); extern int getopt_long_only (int argc, char *const *argv, const char *shortopts, const struct option *longopts, int *longind); /* Internal only. Users should not call this directly. */ extern int _getopt_internal (int argc, char *const *argv, const char *shortopts, const struct option *longopts, int *longind, int long_only); #else /* not __STDC__ */ extern int getopt (); extern int getopt_long (); extern int getopt_long_only (); extern int _getopt_internal (); #endif /* __STDC__ */ #ifdef __cplusplus } #endif #endif /* _GETOPT_H */ therion/extern/getopt1.c0000644000076400010400000001070406635503600016326 0ustar userAdministrators/* getopt_long and getopt_long_only entry points for GNU getopt. Copyright (C) 1987,88,89,90,91,92,93,94,96,97 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H #include #endif #include "getopt.h" #if !defined (__STDC__) || !__STDC__ /* This is a separate conditional since some stdc systems reject `defined (const)'. */ #ifndef const #define const #endif #endif #include /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself. This code is part of the GNU C Library, but also included in many other GNU distributions. Compiling and linking in this code is a waste when using the GNU C library (especially if it is a shared library). Rather than having every GNU program understand `configure --with-gnu-libc' and omit the object files, it is simpler to just do this in the source for each such file. */ #define GETOPT_INTERFACE_VERSION 2 #if !defined (_LIBC) && defined (__GLIBC__) && __GLIBC__ >= 2 #include #if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION #define ELIDE_CODE #endif #endif #ifndef ELIDE_CODE /* This needs to come after some library #include to get __GNU_LIBRARY__ defined. */ #ifdef __GNU_LIBRARY__ #include #endif #ifndef NULL #define NULL 0 #endif int getopt_long (argc, argv, options, long_options, opt_index) int argc; char *const *argv; const char *options; const struct option *long_options; int *opt_index; { return _getopt_internal (argc, argv, options, long_options, opt_index, 0); } /* Like getopt_long, but '-' as well as '--' can indicate a long option. If an option that starts with '-' (not '--') doesn't match a long option, but does match a short option, it is parsed as a short option instead. */ int getopt_long_only (argc, argv, options, long_options, opt_index) int argc; char *const *argv; const char *options; const struct option *long_options; int *opt_index; { return _getopt_internal (argc, argv, options, long_options, opt_index, 1); } #endif /* Not ELIDE_CODE. */ #ifdef TEST #include int main (argc, argv) int argc; char **argv; { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; int option_index = 0; static struct option long_options[] = { {"add", 1, 0, 0}, {"append", 0, 0, 0}, {"delete", 1, 0, 0}, {"verbose", 0, 0, 0}, {"create", 0, 0, 0}, {"file", 1, 0, 0}, {0, 0, 0, 0} }; c = getopt_long (argc, argv, "abc:d:0123456789", long_options, &option_index); if (c == -1) break; switch (c) { case 0: printf ("option %s", long_options[option_index].name); if (optarg) printf (" with arg %s", optarg); printf ("\n"); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value `%s'\n", optarg); break; case 'd': printf ("option d with value `%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ therion/extern/img.c0000644000076400010400000021112612265423540015520 0ustar userAdministrators/* img.c * Routines for reading and writing Survex ".3d" image files * Copyright (C) 1993-2004,2005,2006,2010,2011,2013,2014 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include #include "img.h" #define TIMENA "?" #ifdef IMG_HOSTED # define INT32_T int32_t # include "debug.h" # include "filelist.h" # include "filename.h" # include "message.h" # include "useful.h" # define TIMEFMT msg(/*%a,%Y.%m.%d %H:%M:%S %Z*/107) #else # ifdef HAVE_STDINT_H # include # define INT32_T int32_t # else # include # if INT_MAX >= 2147483647 # define INT32_T int # else # define INT32_T long # endif # endif # define TIMEFMT "%a,%Y.%m.%d %H:%M:%S %Z" # define EXT_SVX_3D "3d" # define EXT_SVX_POS "pos" # define FNM_SEP_EXT '.' # define METRES_PER_FOOT 0.3048 /* exact value */ # define xosmalloc(L) malloc((L)) # define xosrealloc(L,S) realloc((L),(S)) # define osfree(P) free((P)) # define osnew(T) (T*)malloc(sizeof(T)) /* in IMG_HOSTED mode, this tests if a filename refers to a directory */ # define fDirectory(X) 0 /* open file FNM with mode MODE, maybe using path PTH and/or extension EXT */ /* path isn't used in img.c, but EXT is */ # define fopenWithPthAndExt(PTH,FNM,EXT,MODE,X) \ ((*(X) = NULL), fopen(FNM,MODE)) # ifndef PUTC # define PUTC(C, FH) putc(C, FH) # endif # ifndef GETC # define GETC(FH) getc(FH) # endif # define fputsnl(S, FH) (fputs((S), (FH)) == EOF ? EOF : putc('\n', (FH))) # define SVX_ASSERT(X) #ifdef __cplusplus # include using std::max; using std::min; #else /* Return max/min of two numbers. */ /* May be defined already (e.g. by Borland C in stdlib.h) */ /* NB Bad news if X or Y has side-effects... */ # ifndef max # define max(X, Y) ((X) > (Y) ? (X) : (Y)) # endif # ifndef min # define min(X, Y) ((X) < (Y) ? (X) : (Y)) # endif #endif static INT32_T get32(FILE *fh) { INT32_T w = GETC(fh); w |= (INT32_T)GETC(fh) << 8l; w |= (INT32_T)GETC(fh) << 16l; w |= (INT32_T)GETC(fh) << 24l; return w; } static void put32(long w, FILE *fh) { PUTC((char)(w), fh); PUTC((char)(w >> 8l), fh); PUTC((char)(w >> 16l), fh); PUTC((char)(w >> 24l), fh); } static short get16(FILE *fh) { short w = GETC(fh); w |= (short)GETC(fh) << 8l; return w; } static void put16(short w, FILE *fh) { PUTC((char)(w), fh); PUTC((char)(w >> 8l), fh); } static char * baseleaf_from_fnm(const char *fnm) { const char *p; const char *q; char * res; size_t len; p = fnm; q = strrchr(p, '/'); if (q) p = q + 1; q = strrchr(p, '\\'); if (q) p = q + 1; q = strrchr(p, FNM_SEP_EXT); if (q) len = (const char *)q - p; else len = strlen(p); res = (char *)xosmalloc(len + 1); if (!res) return NULL; memcpy(res, p, len); res[len] = '\0'; return res; } #endif static char * my_strdup(const char *str); static time_t mktime_with_tz(struct tm * tm, const char * tz) { time_t r; char * old_tz = getenv("TZ"); #ifdef _MSC_VER if (old_tz) { old_tz = my_strdup(old_tz); if (!old_tz) return (time_t)-1; } if (_putenv_s("TZ", tz) != 0) { osfree(old_tz); return (time_t)-1; } #elif defined HAVE_SETENV if (old_tz) { old_tz = my_strdup(old_tz); if (!old_tz) return (time_t)-1; } if (setenv("TZ", tz, 1) < 0) { osfree(old_tz); return (time_t)-1; } #else char * p; if (old_tz) { size_t len = strlen(old_tz) + 1; p = (char *)xosmalloc(len + 3); if (!p) return (time_t)-1; memcpy(p, "TZ=", 3); memcpy(p + 3, tz, len); old_tz = p; } p = (char *)xosmalloc(strlen(tz) + 4); if (!p) { osfree(old_tz); return (time_t)-1; } memcpy(p, "TZ=", 3); strcpy(p + 3, tz); if (putenv(p) != 0) { osfree(p); osfree(old_tz); return (time_t)-1; } #define CLEANUP() osfree(p) #endif tzset(); r = mktime(tm); if (old_tz) { #ifdef _MSC_VER _putenv_s("TZ", old_tz); #elif !defined HAVE_SETENV putenv(old_tz); #else setenv("TZ", old_tz, 1); #endif osfree(old_tz); } else { #ifdef _MSC_VER _putenv_s("TZ", ""); #elif !defined HAVE_UNSETENV putenv((char*)"TZ"); #else unsetenv("TZ"); #endif } #ifdef CLEANUP CLEANUP(); #undef CLEANUP #endif return r; } static unsigned short getu16(FILE *fh) { return (unsigned short)get16(fh); } #include #if !defined HAVE_LROUND && !defined HAVE_DECL_LROUND /* The autoconf tests are not in use, but C99 and C++11 both added lround(), * so set HAVE_LROUND and HAVE_DECL_LROUND conservatively based on the language * standard version the compiler claims to support. */ # if (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L) || \ (defined __cplusplus && __cplusplus >= 201103L) # define HAVE_LROUND 1 # define HAVE_DECL_LROUND 1 # endif #endif #ifdef HAVE_LROUND # if defined HAVE_DECL_LROUND && !HAVE_DECL_LROUND /* On older systems, the prototype may be missing. */ extern long lround(double); # endif # define my_lround lround #else static long my_lround(double x) { return (x >= 0.0) ? (long)(x + 0.5) : -(long)(0.5 - x); } #endif /* portable case insensitive string compare */ #if defined(strcasecmp) || defined(HAVE_STRCASECMP) # define my_strcasecmp strcasecmp #else static int my_strcasecmp(const char *s1, const char *s2) { unsigned char c1, c2; do { c1 = *s1++; c2 = *s2++; } while (c1 && toupper(c1) == toupper(c2)); /* now calculate real difference */ return c1 - c2; } #endif unsigned int img_output_version = IMG_VERSION_MAX; static img_errcode img_errno = IMG_NONE; #define FILEID "Survex 3D Image File" #define EXT_PLT "plt" #define EXT_PLF "plf" /* Attempt to string paste to ensure we are passed a literal string */ #define LITLEN(S) (sizeof(S"") - 1) /* Fake "version numbers" for non-3d formats we can read. */ #define VERSION_CMAP_SHOT -4 #define VERSION_CMAP_STATION -3 #define VERSION_COMPASS_PLT -2 #define VERSION_SURVEX_POS -1 static char * my_strdup(const char *str) { char *p; size_t len = strlen(str) + 1; p = (char *)xosmalloc(len); if (p) memcpy(p, str, len); return p; } static char * getline_alloc(FILE *fh) { int ch; size_t i = 0; size_t len = 16; char *buf = (char *)xosmalloc(len); if (!buf) return NULL; ch = GETC(fh); while (ch != '\n' && ch != '\r' && ch != EOF) { buf[i++] = ch; if (i == len - 1) { char *p; len += len; p = (char *)xosrealloc(buf, len); if (!p) { osfree(buf); return NULL; } buf = p; } ch = GETC(fh); } if (ch == '\n' || ch == '\r') { int otherone = ch ^ ('\n' ^ '\r'); ch = GETC(fh); /* if it's not the other eol character, put it back */ if (ch != otherone) ungetc(ch, fh); } buf[i++] = '\0'; return buf; } img_errcode img_error(void) { return img_errno; } static int check_label_space(img *pimg, size_t len) { if (len > pimg->buf_len) { char *b = (char *)xosrealloc(pimg->label_buf, len); if (!b) return 0; pimg->label = (pimg->label - pimg->label_buf) + b; pimg->label_buf = b; pimg->buf_len = len; } return 1; } #define has_ext(F,L,E) ((L) > LITLEN(E) + 1 &&\ (F)[(L) - LITLEN(E) - 1] == FNM_SEP_EXT &&\ my_strcasecmp((F) + (L) - LITLEN(E), E) == 0) img * img_open_survey(const char *fnm, const char *survey) { img *pimg; size_t len; char buf[LITLEN(FILEID) + 9]; int ch; if (fDirectory(fnm)) { img_errno = IMG_DIRECTORY; return NULL; } pimg = osnew(img); if (pimg == NULL) { img_errno = IMG_OUTOFMEMORY; return NULL; } pimg->buf_len = 257; pimg->label_buf = (char *)xosmalloc(pimg->buf_len); if (!pimg->label_buf) { osfree(pimg); img_errno = IMG_OUTOFMEMORY; return NULL; } pimg->fh = fopenWithPthAndExt("", fnm, EXT_SVX_3D, "rb", &(pimg->filename_opened)); if (pimg->fh == NULL) { osfree(pimg->label_buf); osfree(pimg); img_errno = IMG_FILENOTFOUND; return NULL; } pimg->fRead = 1; /* reading from this file */ img_errno = IMG_NONE; pimg->flags = 0; /* for version >= 3 we use label_buf to store the prefix for reuse */ /* for VERSION_COMPASS_PLT, 0 value indicates we haven't * entered a survey yet */ /* for VERSION_CMAP_SHOT, we store the last station here * to detect whether we MOVE or LINE */ pimg->label_len = 0; pimg->label_buf[0] = '\0'; pimg->survey = NULL; pimg->survey_len = 0; pimg->separator = '.'; #if IMG_API_VERSION == 0 pimg->date1 = pimg->date2 = 0; #else /* IMG_API_VERSION == 1 */ pimg->days1 = pimg->days2 = -1; #endif pimg->is_extended_elevation = 0; pimg->style = pimg->oldstyle = img_STYLE_UNKNOWN; pimg->l = pimg->r = pimg->u = pimg->d = -1.0; pimg->title = pimg->datestamp = NULL; pimg->datestamp_numeric = (time_t)-1; if (survey) { len = strlen(survey); if (len) { if (survey[len - 1] == '.') len--; if (len) { char *p; pimg->survey = (char *)xosmalloc(len + 2); if (!pimg->survey) { img_errno = IMG_OUTOFMEMORY; goto error; } memcpy(pimg->survey, survey, len); /* Set title to leaf survey name */ pimg->survey[len] = '\0'; p = strchr(pimg->survey, '.'); if (p) p++; else p = pimg->survey; pimg->title = my_strdup(p); if (!pimg->title) { img_errno = IMG_OUTOFMEMORY; goto error; } pimg->survey[len] = '.'; pimg->survey[len + 1] = '\0'; } } pimg->survey_len = len; } /* [VERSION_COMPASS_PLT, VERSION_CMAP_STATION, VERSION_CMAP_SHOT] pending * IMG_LINE or IMG_MOVE - both have 4 added. * [VERSION_SURVEX_POS] already skipped heading line, or there wasn't one * [version 0] not in the middle of a 'LINE' command * [version >= 3] not in the middle of turning a LINE into a MOVE */ pimg->pending = 0; len = strlen(fnm); if (has_ext(fnm, len, EXT_SVX_POS)) { pos_file: pimg->version = VERSION_SURVEX_POS; if (!pimg->survey) pimg->title = baseleaf_from_fnm(fnm); pimg->datestamp = my_strdup(TIMENA); if (!pimg->datestamp) { img_errno = IMG_OUTOFMEMORY; goto error; } pimg->start = 0; return pimg; } if (has_ext(fnm, len, EXT_PLT) || has_ext(fnm, len, EXT_PLF)) { long fpos; plt_file: pimg->version = VERSION_COMPASS_PLT; /* Spaces aren't legal in Compass station names, but dots are, so * use space as the level separator */ pimg->separator = ' '; pimg->start = 0; if (!pimg->survey) pimg->title = baseleaf_from_fnm(fnm); pimg->datestamp = my_strdup(TIMENA); if (!pimg->datestamp) { img_errno = IMG_OUTOFMEMORY; goto error; } while (1) { ch = GETC(pimg->fh); switch (ch) { case '\x1a': fseek(pimg->fh, -1, SEEK_CUR); /* FALL THRU */ case EOF: pimg->start = ftell(pimg->fh); return pimg; case 'N': { char *line, *q; fpos = ftell(pimg->fh) - 1; if (!pimg->survey) { /* FIXME : if there's only one survey in the file, it'd be nice * to use its description as the title here... */ ungetc('N', pimg->fh); pimg->start = fpos; return pimg; } line = getline_alloc(pimg->fh); if (!line) { img_errno = IMG_OUTOFMEMORY; goto error; } len = 0; while (line[len] > 32) ++len; if (pimg->survey_len != len || memcmp(line, pimg->survey, len) != 0) { osfree(line); continue; } q = strchr(line + len, 'C'); if (q && q[1]) { osfree(pimg->title); pimg->title = my_strdup(q + 1); } else if (!pimg->title) { pimg->title = my_strdup(pimg->label); } osfree(line); if (!pimg->title) { img_errno = IMG_OUTOFMEMORY; goto error; } if (!pimg->start) pimg->start = fpos; fseek(pimg->fh, pimg->start, SEEK_SET); return pimg; } case 'M': case 'D': pimg->start = ftell(pimg->fh) - 1; break; } while (ch != '\n' && ch != '\r') { ch = GETC(pimg->fh); } } } /* Although these are often referred to as "CMAP .XYZ files", it seems * that actually, the extension .XYZ isn't used, rather .SHT (shot * variant, produced by CMAP v16 and later), .UNA (unadjusted) and * .ADJ (adjusted) extensions are. Since img has long checked for * .XYZ, we continue to do so in case anyone is relying on it. */ if (has_ext(fnm, len, "sht") || has_ext(fnm, len, "adj") || has_ext(fnm, len, "una") || has_ext(fnm, len, "xyz")) { char *line; xyz_file: /* Spaces aren't legal in CMAP station names, but dots are, so * use space as the level separator. */ pimg->separator = ' '; line = getline_alloc(pimg->fh); if (!line) { img_errno = IMG_OUTOFMEMORY; goto error; } /* There doesn't seem to be a spec for what happens after 1999 with cmap * files, so this code allows for: * * 21xx -> xx (up to 2150) * * 21xx -> 1xx (up to 2199) * * full year being specified instead of 2 digits */ len = strlen(line); if (len > 59) { /* Don't just truncate at column 59, allow for a > 2 digit year. */ char * p = strstr(line + len, "Page"); if (p) { while (p > line && p[-1] == ' ') --p; *p = '\0'; len = p - line; } else { line[59] = '\0'; } } if (len > 45) { /* YY/MM/DD HH:MM */ struct tm tm; unsigned long v; char * p; pimg->datestamp = my_strdup(line + 45); p = pimg->datestamp; v = strtoul(p, &p, 10); if (v <= 50) { /* In the absence of a spec for cmap files, assume <= 50 means 21st * century. */ v += 2000; } else if (v < 200) { /* Map 100-199 to 21st century. */ v += 1900; } if (v == ULONG_MAX || *p++ != '/') goto bad_cmap_date; tm.tm_year = v - 1900; v = strtoul(p, &p, 10); if (v < 1 || v > 12 || *p++ != '/') goto bad_cmap_date; tm.tm_mon = v - 1; v = strtoul(p, &p, 10); if (v < 1 || v > 31 || *p++ != ' ') goto bad_cmap_date; tm.tm_mday = v; v = strtoul(p, &p, 10); if (v >= 24 || *p++ != ':') goto bad_cmap_date; tm.tm_hour = v; v = strtoul(p, &p, 10); if (v >= 60) goto bad_cmap_date; tm.tm_min = v; if (*p == ':') { v = strtoul(p + 1, &p, 10); if (v > 60) goto bad_cmap_date; tm.tm_sec = v; } else { tm.tm_sec = 0; } tm.tm_isdst = 0; /* We have no indication of what timezone this timestamp is in. It's * probably local time for whoever processed the data, so just assume * UTC, which is at least fairly central in the possibilities. */ pimg->datestamp_numeric = mktime_with_tz(&tm, ""); } else { pimg->datestamp = my_strdup(TIMENA); } bad_cmap_date: if (strncmp(line, " Cave Survey Data Processed by CMAP ", LITLEN(" Cave Survey Data Processed by CMAP ")) == 0) { len = 0; } else { if (len > 45) { line[45] = '\0'; len = 45; } while (len > 2 && line[len - 1] == ' ') --len; if (len > 2) { line[len] = '\0'; pimg->title = my_strdup(line + 2); } } if (len <= 2) pimg->title = baseleaf_from_fnm(fnm); osfree(line); if (!pimg->datestamp || !pimg->title) { img_errno = IMG_OUTOFMEMORY; goto error; } line = getline_alloc(pimg->fh); if (!line) { img_errno = IMG_OUTOFMEMORY; goto error; } if (line[0] != ' ' || (line[1] != 'S' && line[1] != 'O')) { img_errno = IMG_BADFORMAT; goto error; } if (line[1] == 'S') { pimg->version = VERSION_CMAP_STATION; } else { pimg->version = VERSION_CMAP_SHOT; } osfree(line); line = getline_alloc(pimg->fh); if (!line) { img_errno = IMG_OUTOFMEMORY; goto error; } if (line[0] != ' ' || line[1] != '-') { img_errno = IMG_BADFORMAT; goto error; } osfree(line); pimg->start = ftell(pimg->fh); return pimg; } if (fread(buf, LITLEN(FILEID) + 1, 1, pimg->fh) != 1 || memcmp(buf, FILEID"\n", LITLEN(FILEID) + 1) != 0) { if (fread(buf + LITLEN(FILEID) + 1, 8, 1, pimg->fh) == 1 && memcmp(buf, FILEID"\r\nv0.01\r\n", LITLEN(FILEID) + 9) == 0) { /* v0 3d file with DOS EOLs */ pimg->version = 0; goto v03d; } rewind(pimg->fh); if (buf[1] == ' ') { if (buf[0] == ' ') { /* Looks like a CMAP .xyz file ... */ goto xyz_file; } else if (strchr("ZSNF", buf[0])) { /* Looks like a Compass .plt file ... */ /* Almost certainly it'll start "Z " */ goto plt_file; } } if (buf[0] == '(') { /* Looks like a Survex .pos file ... */ goto pos_file; } img_errno = IMG_BADFORMAT; goto error; } /* check file format version */ ch = GETC(pimg->fh); pimg->version = 0; if (tolower(ch) == 'b') { /* binary file iff B/b prefix */ pimg->version = 1; ch = GETC(pimg->fh); } if (ch != 'v') { img_errno = IMG_BADFORMAT; goto error; } ch = GETC(pimg->fh); if (ch == '0') { if (fread(buf, 4, 1, pimg->fh) != 1 || memcmp(buf, ".01\n", 4) != 0) { img_errno = IMG_BADFORMAT; goto error; } /* nothing special to do */ } else if (pimg->version == 0) { if (ch < '2' || ch > '0' + IMG_VERSION_MAX || GETC(pimg->fh) != '\n') { img_errno = IMG_TOONEW; goto error; } pimg->version = ch - '0'; } else { img_errno = IMG_BADFORMAT; goto error; } v03d: if (!pimg->title) pimg->title = getline_alloc(pimg->fh); else osfree(getline_alloc(pimg->fh)); pimg->datestamp = getline_alloc(pimg->fh); if (!pimg->title || !pimg->datestamp) { img_errno = IMG_OUTOFMEMORY; error: osfree(pimg->title); osfree(pimg->datestamp); osfree(pimg->filename_opened); fclose(pimg->fh); osfree(pimg); return NULL; } if (pimg->version >= 8) { int flags = GETC(pimg->fh); if (flags & img_FFLAG_EXTENDED) pimg->is_extended_elevation = 1; } else { len = strlen(pimg->title); if (len > 11 && strcmp(pimg->title + len - 11, " (extended)") == 0) { pimg->title[len - 11] = '\0'; pimg->is_extended_elevation = 1; } } if (pimg->datestamp[0] == '@') { unsigned long v; char * p; errno = 0; v = strtoul(pimg->datestamp + 1, &p, 10); if (errno == 0 && *p == '\0') pimg->datestamp_numeric = v; /* FIXME: We're assuming here that the C time_t epoch is 1970, which is * true for Unix-like systems, Mac OS X and Windows, but isn't guaranteed * by ISO C. */ } else { /* %a,%Y.%m.%d %H:%M:%S %Z */ struct tm tm; unsigned long v; char * p = pimg->datestamp; while (isalpha((unsigned char)*p)) ++p; if (*p == ',') ++p; while (isspace((unsigned char)*p)) ++p; v = strtoul(p, &p, 10); if (v == ULONG_MAX || *p++ != '.') goto bad_3d_date; tm.tm_year = v - 1900; v = strtoul(p, &p, 10); if (v < 1 || v > 12 || *p++ != '.') goto bad_3d_date; tm.tm_mon = v - 1; v = strtoul(p, &p, 10); if (v < 1 || v > 31 || *p++ != ' ') goto bad_3d_date; tm.tm_mday = v; v = strtoul(p, &p, 10); if (v >= 24 || *p++ != ':') goto bad_3d_date; tm.tm_hour = v; v = strtoul(p, &p, 10); if (v >= 60 || *p++ != ':') goto bad_3d_date; tm.tm_min = v; v = strtoul(p, &p, 10); if (v > 60) goto bad_3d_date; tm.tm_sec = v; tm.tm_isdst = 0; while (isspace((unsigned char)*p)) ++p; /* p now points to the timezone string. * * However, it's likely to be a string like "BST", and such strings can * be ambiguous (BST could be UTC+1 or UTC+6), so it is impossible to * reliably convert in all cases. Just pass what we have to tzset() - if * it doesn't handle it, UTC will be used. */ pimg->datestamp_numeric = mktime_with_tz(&tm, p); } bad_3d_date: pimg->start = ftell(pimg->fh); return pimg; } int img_rewind(img *pimg) { if (!pimg->fRead) { img_errno = IMG_WRITEERROR; return 0; } if (fseek(pimg->fh, pimg->start, SEEK_SET) != 0) { img_errno = IMG_READERROR; return 0; } clearerr(pimg->fh); /* [VERSION_SURVEX_POS] already skipped heading line, or there wasn't one * [version 0] not in the middle of a 'LINE' command * [version >= 3] not in the middle of turning a LINE into a MOVE */ pimg->pending = 0; img_errno = IMG_NONE; /* for version >= 3 we use label_buf to store the prefix for reuse */ /* for VERSION_COMPASS_PLT, 0 value indicates we haven't entered a survey * yet */ /* for VERSION_CMAP_SHOT, we store the last station here to detect whether * we MOVE or LINE */ pimg->label_len = 0; pimg->style = img_STYLE_UNKNOWN; return 1; } img * img_open_write(const char *fnm, char *title, int flags) { time_t tm; img *pimg; if (fDirectory(fnm)) { img_errno = IMG_DIRECTORY; return NULL; } pimg = osnew(img); if (pimg == NULL) { img_errno = IMG_OUTOFMEMORY; return NULL; } pimg->buf_len = 257; pimg->label_buf = (char *)xosmalloc(pimg->buf_len); if (!pimg->label_buf) { osfree(pimg); img_errno = IMG_OUTOFMEMORY; return NULL; } pimg->fh = fopen(fnm, "wb"); if (!pimg->fh) { osfree(pimg->label_buf); osfree(pimg); img_errno = IMG_CANTOPENOUT; return NULL; } pimg->filename_opened = NULL; /* Output image file header */ fputs("Survex 3D Image File\n", pimg->fh); /* file identifier string */ if (img_output_version < 2) { pimg->version = 1; fputs("Bv0.01\n", pimg->fh); /* binary file format version number */ } else { pimg->version = (img_output_version > IMG_VERSION_MAX) ? IMG_VERSION_MAX : img_output_version; fprintf(pimg->fh, "v%d\n", pimg->version); /* file format version no. */ } fputs(title, pimg->fh); if (pimg->version < 8 && (flags & img_FFLAG_EXTENDED)) { /* Older format versions append " (extended)" to the title to mark * extended elevations. */ size_t len = strlen(title); if (len < 11 || strcmp(title + len - 11, " (extended)") != 0) fputs(" (extended)", pimg->fh); } PUTC('\n', pimg->fh); tm = time(NULL); if (tm == (time_t)-1) { fputsnl(TIMENA, pimg->fh); } else if (pimg->version <= 7) { char date[256]; /* output current date and time in format specified */ strftime(date, 256, TIMEFMT, localtime(&tm)); fputsnl(date, pimg->fh); } else { fprintf(pimg->fh, "@%ld\n", (long)tm); } if (pimg->version >= 8) { /* Clear bit one in case anyone has been passing true for fBinary. */ flags &=~ 1; PUTC(flags, pimg->fh); } #if 0 if (img_output_version >= 5) { static const unsigned char codelengths[32] = { 4, 8, 8, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; fwrite(codelengths, 32, 1, pimg->fh); } #endif pimg->fRead = 0; /* writing to this file */ img_errno = IMG_NONE; /* for version >= 3 we use label_buf to store the prefix for reuse */ pimg->label_buf[0] = '\0'; pimg->label_len = 0; #if IMG_API_VERSION == 0 pimg->date1 = pimg->date2 = 0; pimg->olddate1 = pimg->olddate2 = 0; #else /* IMG_API_VERSION == 1 */ pimg->days1 = pimg->days2 = -1; pimg->olddays1 = pimg->olddays2 = -1; #endif pimg->style = pimg->oldstyle = img_STYLE_UNKNOWN; pimg->l = pimg->r = pimg->u = pimg->d = -1.0; pimg->n_legs = 0; pimg->length = 0.0; pimg->E = pimg->H = pimg->V = 0.0; /* Don't check for write errors now - let img_close() report them... */ return pimg; } static void read_xyz_station_coords(img_point *pt, const char *line) { char num[12]; memcpy(num, line + 6, 9); num[9] = '\0'; pt->x = atof(num) / METRES_PER_FOOT; memcpy(num, line + 15, 9); pt->y = atof(num) / METRES_PER_FOOT; memcpy(num, line + 24, 8); num[8] = '\0'; pt->z = atof(num) / METRES_PER_FOOT; } static void read_xyz_shot_coords(img_point *pt, const char *line) { char num[12]; memcpy(num, line + 40, 10); num[10] = '\0'; pt->x = atof(num) / METRES_PER_FOOT; memcpy(num, line + 50, 10); pt->y = atof(num) / METRES_PER_FOOT; memcpy(num, line + 60, 9); num[9] = '\0'; pt->z = atof(num) / METRES_PER_FOOT; } static void subtract_xyz_shot_deltas(img_point *pt, const char *line) { char num[12]; memcpy(num, line + 15, 9); num[9] = '\0'; pt->x -= atof(num) / METRES_PER_FOOT; memcpy(num, line + 24, 8); num[8] = '\0'; pt->y -= atof(num) / METRES_PER_FOOT; memcpy(num, line + 32, 8); pt->z -= atof(num) / METRES_PER_FOOT; } static int read_coord(FILE *fh, img_point *pt) { SVX_ASSERT(fh); SVX_ASSERT(pt); pt->x = get32(fh) / 100.0; pt->y = get32(fh) / 100.0; pt->z = get32(fh) / 100.0; if (ferror(fh) || feof(fh)) { img_errno = feof(fh) ? IMG_BADFORMAT : IMG_READERROR; return 0; } return 1; } static int skip_coord(FILE *fh) { return (fseek(fh, 12, SEEK_CUR) == 0); } static int read_v3label(img *pimg) { char *q; long len = GETC(pimg->fh); if (len == EOF) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } if (len == 0xfe) { len += get16(pimg->fh); if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } } else if (len == 0xff) { len = get32(pimg->fh); if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } if (feof(pimg->fh) || len < 0xfe + 0xffff) { img_errno = IMG_BADFORMAT; return img_BAD; } } if (!check_label_space(pimg, pimg->label_len + len + 1)) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } q = pimg->label_buf + pimg->label_len; pimg->label_len += len; if (len && fread(q, len, 1, pimg->fh) != 1) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } q[len] = '\0'; return 0; } static int read_v8label(img *pimg, int common_flag, size_t common_val) { char *q; size_t del, add; if (common_flag) { if (common_val == 0) return 0; add = del = common_val; } else { int ch = GETC(pimg->fh); if (ch == EOF) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } if (ch != 0x00) { del = ch >> 4; add = ch & 0x0f; } else { ch = GETC(pimg->fh); if (ch == EOF) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } if (ch != 0xff) { del = ch; } else { del = get32(pimg->fh); if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } } ch = GETC(pimg->fh); if (ch == EOF) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } if (ch != 0xff) { add = ch; } else { add = get32(pimg->fh); if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } } } if (add > del && !check_label_space(pimg, pimg->label_len + add - del + 1)) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } } if (del > pimg->label_len) { img_errno = IMG_BADFORMAT; return img_BAD; } pimg->label_len -= del; q = pimg->label_buf + pimg->label_len; pimg->label_len += add; if (add && fread(q, add, 1, pimg->fh) != 1) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } q[add] = '\0'; return 0; } static int img_read_item_new(img *pimg, img_point *p); static int img_read_item_v3to7(img *pimg, img_point *p); static int img_read_item_ancient(img *pimg, img_point *p); static int img_read_item_ascii_wrapper(img *pimg, img_point *p); static int img_read_item_ascii(img *pimg, img_point *p); int img_read_item(img *pimg, img_point *p) { pimg->flags = 0; if (pimg->version >= 8) { return img_read_item_new(pimg, p); } else if (pimg->version >= 3) { return img_read_item_v3to7(pimg, p); } else if (pimg->version >= 1) { return img_read_item_ancient(pimg, p); } else { return img_read_item_ascii_wrapper(pimg, p); } } static int img_read_item_new(img *pimg, img_point *p) { int result; int opt; pimg->l = pimg->r = pimg->u = pimg->d = -1.0; if (pimg->pending >= 0x40) { if (pimg->pending == 256) { pimg->pending = 0; return img_XSECT_END; } *p = pimg->mv; pimg->flags = (int)(pimg->pending) & 0x3f; pimg->pending = 0; return img_LINE; } again3: /* label to goto if we get a prefix, date, or lrud */ pimg->label = pimg->label_buf; opt = GETC(pimg->fh); if (opt == EOF) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } if (opt >> 6 == 0) { if (opt <= 4) { if (opt == 0 && pimg->style == 0) return img_STOP; /* end of data marker */ /* STYLE */ pimg->style = opt; goto again3; } if (opt >= 0x10) { switch (opt) { case 0x10: { /* No date info */ #if IMG_API_VERSION == 0 pimg->date1 = pimg->date2 = 0; #else /* IMG_API_VERSION == 1 */ pimg->days1 = pimg->days2 = -1; #endif break; } case 0x11: { /* Single date */ int days1 = (int)getu16(pimg->fh); #if IMG_API_VERSION == 0 pimg->date2 = pimg->date1 = (days1 - 25567) * 86400; #else /* IMG_API_VERSION == 1 */ pimg->days2 = pimg->days1 = days1; #endif break; } case 0x12: { /* Date range (short) */ int days1 = (int)getu16(pimg->fh); int days2 = days1 + GETC(pimg->fh) + 1; #if IMG_API_VERSION == 0 pimg->date1 = (days1 - 25567) * 86400; pimg->date2 = (days2 - 25567) * 86400; #else /* IMG_API_VERSION == 1 */ pimg->days1 = days1; pimg->days2 = days2; #endif break; } case 0x13: { /* Date range (long) */ int days1 = (int)getu16(pimg->fh); int days2 = (int)getu16(pimg->fh); #if IMG_API_VERSION == 0 pimg->date1 = (days1 - 25567) * 86400; pimg->date2 = (days2 - 25567) * 86400; #else /* IMG_API_VERSION == 1 */ pimg->days1 = days1; pimg->days2 = days2; #endif break; } case 0x1f: /* Error info */ pimg->n_legs = get32(pimg->fh); pimg->length = get32(pimg->fh) / 100.0; pimg->E = get32(pimg->fh) / 100.0; pimg->H = get32(pimg->fh) / 100.0; pimg->V = get32(pimg->fh) / 100.0; return img_ERROR_INFO; case 0x30: case 0x31: /* LRUD */ case 0x32: case 0x33: /* Big LRUD! */ if (read_v8label(pimg, 0, 0) == img_BAD) return img_BAD; pimg->flags = (int)opt & 0x01; if (opt < 0x32) { pimg->l = get16(pimg->fh) / 100.0; pimg->r = get16(pimg->fh) / 100.0; pimg->u = get16(pimg->fh) / 100.0; pimg->d = get16(pimg->fh) / 100.0; } else { pimg->l = get32(pimg->fh) / 100.0; pimg->r = get32(pimg->fh) / 100.0; pimg->u = get32(pimg->fh) / 100.0; pimg->d = get32(pimg->fh) / 100.0; } if (pimg->survey_len) { size_t l = pimg->survey_len; const char *s = pimg->label_buf; if (strncmp(pimg->survey, s, l + 1) != 0) { return img_XSECT_END; } pimg->label += l; /* skip the dot if there */ if (*pimg->label) pimg->label++; } /* If this is the last cross-section in this passage, set * pending so we return img_XSECT_END next time. */ if (pimg->flags & 0x01) { pimg->pending = 256; pimg->flags &= ~0x01; } return img_XSECT; default: /* 0x25 - 0x2f and 0x34 - 0x3f are currently unallocated. */ img_errno = IMG_BADFORMAT; return img_BAD; } goto again3; } if (opt != 15) { /* 1-14 and 16-31 reserved */ img_errno = IMG_BADFORMAT; return img_BAD; } result = img_MOVE; } else if (opt >= 0x80) { if (read_v8label(pimg, 0, 0) == img_BAD) return img_BAD; result = img_LABEL; if (pimg->survey_len) { size_t l = pimg->survey_len; const char *s = pimg->label_buf; if (strncmp(pimg->survey, s, l + 1) != 0) { if (!skip_coord(pimg->fh)) return img_BAD; pimg->pending = 0; goto again3; } pimg->label += l; /* skip the dot if there */ if (*pimg->label) pimg->label++; } pimg->flags = (int)opt & 0x7f; } else if ((opt >> 6) == 1) { if (read_v8label(pimg, opt & 0x20, 0) == img_BAD) return img_BAD; result = img_LINE; if (pimg->survey_len) { size_t l = pimg->survey_len; const char *s = pimg->label_buf; if (strncmp(pimg->survey, s, l) != 0 || !(s[l] == '.' || s[l] == '\0')) { if (!read_coord(pimg->fh, &(pimg->mv))) return img_BAD; pimg->pending = 15; goto again3; } pimg->label += l; /* skip the dot if there */ if (*pimg->label) pimg->label++; } if (pimg->pending) { *p = pimg->mv; if (!read_coord(pimg->fh, &(pimg->mv))) return img_BAD; pimg->pending = opt; return img_MOVE; } pimg->flags = (int)opt & 0x1f; } else { img_errno = IMG_BADFORMAT; return img_BAD; } if (!read_coord(pimg->fh, p)) return img_BAD; pimg->pending = 0; return result; } static int img_read_item_v3to7(img *pimg, img_point *p) { int result; int opt; pimg->l = pimg->r = pimg->u = pimg->d = -1.0; if (pimg->pending == 256) { pimg->pending = 0; return img_XSECT_END; } if (pimg->pending >= 0x80) { *p = pimg->mv; pimg->flags = (int)(pimg->pending) & 0x3f; pimg->pending = 0; return img_LINE; } again3: /* label to goto if we get a prefix, date, or lrud */ pimg->label = pimg->label_buf; opt = GETC(pimg->fh); if (opt == EOF) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } switch (opt >> 6) { case 0: if (opt == 0) { if (!pimg->label_len) return img_STOP; /* end of data marker */ pimg->label_len = 0; goto again3; } if (opt < 15) { /* 1-14 mean trim that many levels from current prefix */ int c; if (pimg->label_len <= 17) { /* zero prefix using "0" */ img_errno = IMG_BADFORMAT; return img_BAD; } /* extra - 1 because label_len points to one past the end */ c = pimg->label_len - 17 - 1; while (pimg->label_buf[c] != '.' || --opt > 0) { if (--c < 0) { /* zero prefix using "0" */ img_errno = IMG_BADFORMAT; return img_BAD; } } c++; pimg->label_len = c; goto again3; } if (opt == 15) { result = img_MOVE; break; } if (opt >= 0x20) { switch (opt) { case 0x20: /* Single date */ if (pimg->version < 7) { int date1 = get32(pimg->fh); #if IMG_API_VERSION == 0 pimg->date2 = pimg->date1 = date1; #else /* IMG_API_VERSION == 1 */ if (date1 != 0) { pimg->days2 = pimg->days1 = (date1 / 86400) + 25567; } else { pimg->days2 = pimg->days1 = -1; } #endif } else { int days1 = (int)getu16(pimg->fh); #if IMG_API_VERSION == 0 pimg->date2 = pimg->date1 = (days1 - 25567) * 86400; #else /* IMG_API_VERSION == 1 */ pimg->days2 = pimg->days1 = days1; #endif } break; case 0x21: /* Date range (short for v7+) */ if (pimg->version < 7) { INT32_T date1 = get32(pimg->fh); INT32_T date2 = get32(pimg->fh); #if IMG_API_VERSION == 0 pimg->date1 = date1; pimg->date2 = date2; #else /* IMG_API_VERSION == 1 */ pimg->days1 = (date1 / 86400) + 25567; pimg->days2 = (date2 / 86400) + 25567; #endif } else { int days1 = (int)getu16(pimg->fh); int days2 = days1 + GETC(pimg->fh) + 1; #if IMG_API_VERSION == 0 pimg->date1 = (days1 - 25567) * 86400; pimg->date2 = (days2 - 25567) * 86400; #else /* IMG_API_VERSION == 1 */ pimg->days1 = days1; pimg->days2 = days2; #endif } break; case 0x22: /* Error info */ pimg->n_legs = get32(pimg->fh); pimg->length = get32(pimg->fh) / 100.0; pimg->E = get32(pimg->fh) / 100.0; pimg->H = get32(pimg->fh) / 100.0; pimg->V = get32(pimg->fh) / 100.0; if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } return img_ERROR_INFO; case 0x23: { /* v7+: Date range (long) */ if (pimg->version < 7) { img_errno = IMG_BADFORMAT; return img_BAD; } int days1 = (int)getu16(pimg->fh); int days2 = (int)getu16(pimg->fh); if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } #if IMG_API_VERSION == 0 pimg->date1 = (days1 - 25567) * 86400; pimg->date2 = (days2 - 25567) * 86400; #else /* IMG_API_VERSION == 1 */ pimg->days1 = days1; pimg->days2 = days2; #endif break; } case 0x24: { /* v7+: No date info */ #if IMG_API_VERSION == 0 pimg->date1 = pimg->date2 = 0; #else /* IMG_API_VERSION == 1 */ pimg->days1 = pimg->days2 = -1; #endif break; } case 0x30: case 0x31: /* LRUD */ case 0x32: case 0x33: /* Big LRUD! */ if (read_v3label(pimg) == img_BAD) return img_BAD; pimg->flags = (int)opt & 0x01; if (opt < 0x32) { pimg->l = get16(pimg->fh) / 100.0; pimg->r = get16(pimg->fh) / 100.0; pimg->u = get16(pimg->fh) / 100.0; pimg->d = get16(pimg->fh) / 100.0; } else { pimg->l = get32(pimg->fh) / 100.0; pimg->r = get32(pimg->fh) / 100.0; pimg->u = get32(pimg->fh) / 100.0; pimg->d = get32(pimg->fh) / 100.0; } if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } if (pimg->survey_len) { size_t l = pimg->survey_len; const char *s = pimg->label_buf; if (strncmp(pimg->survey, s, l + 1) != 0) { return img_XSECT_END; } pimg->label += l; /* skip the dot if there */ if (*pimg->label) pimg->label++; } /* If this is the last cross-section in this passage, set * pending so we return img_XSECT_END next time. */ if (pimg->flags & 0x01) { pimg->pending = 256; pimg->flags &= ~0x01; } return img_XSECT; default: /* 0x25 - 0x2f and 0x34 - 0x3f are currently unallocated. */ img_errno = IMG_BADFORMAT; return img_BAD; } if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } goto again3; } /* 16-31 mean remove (n - 15) characters from the prefix */ /* zero prefix using 0 */ if (pimg->label_len <= (size_t)(opt - 15)) { img_errno = IMG_BADFORMAT; return img_BAD; } pimg->label_len -= (opt - 15); goto again3; case 1: if (read_v3label(pimg) == img_BAD) return img_BAD; result = img_LABEL; if (pimg->survey_len) { size_t l = pimg->survey_len; const char *s = pimg->label_buf; if (strncmp(pimg->survey, s, l + 1) != 0) { if (!skip_coord(pimg->fh)) return img_BAD; pimg->pending = 0; goto again3; } pimg->label += l; /* skip the dot if there */ if (*pimg->label) pimg->label++; } pimg->flags = (int)opt & 0x3f; break; case 2: if (read_v3label(pimg) == img_BAD) return img_BAD; result = img_LINE; if (pimg->survey_len) { size_t l = pimg->survey_len; const char *s = pimg->label_buf; if (strncmp(pimg->survey, s, l) != 0 || !(s[l] == '.' || s[l] == '\0')) { if (!read_coord(pimg->fh, &(pimg->mv))) return img_BAD; pimg->pending = 15; goto again3; } pimg->label += l; /* skip the dot if there */ if (*pimg->label) pimg->label++; } if (pimg->pending) { *p = pimg->mv; if (!read_coord(pimg->fh, &(pimg->mv))) return img_BAD; pimg->pending = opt; return img_MOVE; } pimg->flags = (int)opt & 0x3f; break; default: img_errno = IMG_BADFORMAT; return img_BAD; } if (!read_coord(pimg->fh, p)) return img_BAD; pimg->pending = 0; return result; } static int img_read_item_ancient(img *pimg, img_point *p) { int result; static long opt_lookahead = 0; static img_point pt = { 0.0, 0.0, 0.0 }; long opt; again: /* label to goto if we get a cross */ pimg->label = pimg->label_buf; pimg->label[0] = '\0'; if (pimg->version == 1) { if (opt_lookahead) { opt = opt_lookahead; opt_lookahead = 0; } else { opt = get32(pimg->fh); } } else { opt = GETC(pimg->fh); } if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } switch (opt) { case -1: case 0: return img_STOP; /* end of data marker */ case 1: /* skip coordinates */ if (!skip_coord(pimg->fh)) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } goto again; case 2: case 3: { size_t len; result = img_LABEL; if (!fgets(pimg->label_buf, pimg->buf_len, pimg->fh)) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } if (pimg->label[0] == '\\') pimg->label++; len = strlen(pimg->label); if (len == 0 || pimg->label[len - 1] != '\n') { img_errno = IMG_BADFORMAT; return img_BAD; } /* Ignore empty labels in some .3d files (caused by a bug) */ if (len == 1) goto again; pimg->label[len - 1] = '\0'; pimg->flags = img_SFLAG_UNDERGROUND; /* no flags given... */ if (opt == 2) goto done; break; } case 6: case 7: { long len; result = img_LABEL; if (opt == 7) pimg->flags = GETC(pimg->fh); else pimg->flags = img_SFLAG_UNDERGROUND; /* no flags given... */ len = get32(pimg->fh); if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } /* Ignore empty labels in some .3d files (caused by a bug) */ if (len == 0) goto again; if (!check_label_space(pimg, len + 1)) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } if (fread(pimg->label_buf, len, 1, pimg->fh) != 1) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } pimg->label_buf[len] = '\0'; break; } case 4: result = img_MOVE; break; case 5: result = img_LINE; break; default: switch ((int)opt & 0xc0) { case 0x80: pimg->flags = (int)opt & 0x3f; result = img_LINE; break; case 0x40: { char *q; pimg->flags = (int)opt & 0x3f; result = img_LABEL; if (!fgets(pimg->label_buf, pimg->buf_len, pimg->fh)) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } q = pimg->label_buf + strlen(pimg->label_buf) - 1; /* Ignore empty-labels in some .3d files (caused by a bug) */ if (q == pimg->label_buf) goto again; if (*q != '\n') { img_errno = IMG_BADFORMAT; return img_BAD; } *q = '\0'; break; } default: img_errno = IMG_BADFORMAT; return img_BAD; } break; } if (!read_coord(pimg->fh, &pt)) return img_BAD; if (result == img_LABEL && pimg->survey_len) { if (strncmp(pimg->label, pimg->survey, pimg->survey_len + 1) != 0) goto again; pimg->label += pimg->survey_len + 1; } done: *p = pt; if (result == img_MOVE && pimg->version == 1) { /* peek at next code and see if it's an old-style label */ opt_lookahead = get32(pimg->fh); if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } if (opt_lookahead == 2) return img_read_item_ancient(pimg, p); } return result; } static int img_read_item_ascii_wrapper(img *pimg, img_point *p) { /* We need to set the default locale for fscanf() to work on * numbers with "." as decimal point. */ int result; char * current_locale = my_strdup(setlocale(LC_NUMERIC, NULL)); setlocale(LC_NUMERIC, "C"); result = img_read_item_ascii(pimg, p); setlocale(LC_NUMERIC, current_locale); free(current_locale); return result; } /* Handle all ASCII formats. */ static int img_read_item_ascii(img *pimg, img_point *p) { int result; pimg->label = pimg->label_buf; if (pimg->version == 0) { ascii_again: pimg->label[0] = '\0'; if (feof(pimg->fh)) return img_STOP; if (pimg->pending) { pimg->pending = 0; result = img_LINE; } else { char cmd[7]; /* Stop if nothing found */ if (fscanf(pimg->fh, "%6s", cmd) < 1) return img_STOP; if (strcmp(cmd, "move") == 0) result = img_MOVE; else if (strcmp(cmd, "draw") == 0) result = img_LINE; else if (strcmp(cmd, "line") == 0) { /* set flag to indicate to process second triplet as LINE */ pimg->pending = 1; result = img_MOVE; } else if (strcmp(cmd, "cross") == 0) { if (fscanf(pimg->fh, "%lf%lf%lf", &p->x, &p->y, &p->z) < 3) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } goto ascii_again; } else if (strcmp(cmd, "name") == 0) { size_t off = 0; int ch = GETC(pimg->fh); if (ch == ' ') ch = GETC(pimg->fh); while (ch != ' ') { if (ch == '\n' || ch == EOF) { img_errno = ferror(pimg->fh) ? IMG_READERROR : IMG_BADFORMAT; return img_BAD; } if (off == pimg->buf_len) { if (!check_label_space(pimg, pimg->buf_len * 2)) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } } pimg->label_buf[off++] = ch; ch = GETC(pimg->fh); } pimg->label_buf[off] = '\0'; pimg->label = pimg->label_buf; if (pimg->label[0] == '\\') pimg->label++; pimg->flags = img_SFLAG_UNDERGROUND; /* default flags */ result = img_LABEL; } else { img_errno = IMG_BADFORMAT; return img_BAD; /* unknown keyword */ } } if (fscanf(pimg->fh, "%lf%lf%lf", &p->x, &p->y, &p->z) < 3) { img_errno = ferror(pimg->fh) ? IMG_READERROR : IMG_BADFORMAT; return img_BAD; } if (result == img_LABEL && pimg->survey_len) { if (strncmp(pimg->label, pimg->survey, pimg->survey_len + 1) != 0) goto ascii_again; pimg->label += pimg->survey_len + 1; } return result; } else if (pimg->version == VERSION_SURVEX_POS) { /* Survex .pos file */ int ch; size_t off; pimg->flags = img_SFLAG_UNDERGROUND; /* default flags */ againpos: off = 0; while (fscanf(pimg->fh, "(%lf,%lf,%lf )", &p->x, &p->y, &p->z) != 3) { if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } if (feof(pimg->fh)) return img_STOP; if (pimg->pending) { img_errno = IMG_BADFORMAT; return img_BAD; } pimg->pending = 1; /* ignore rest of line */ do { ch = GETC(pimg->fh); } while (ch != '\n' && ch != '\r' && ch != EOF); } pimg->label_buf[0] = '\0'; do { ch = GETC(pimg->fh); } while (ch == ' ' || ch == '\t'); if (ch == '\n' || ch == EOF) { /* If there's no label, set img_SFLAG_ANON. */ pimg->flags |= img_SFLAG_ANON; return img_LABEL; } pimg->label_buf[0] = ch; off = 1; while (!feof(pimg->fh)) { if (!fgets(pimg->label_buf + off, pimg->buf_len - off, pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } off += strlen(pimg->label_buf + off); if (off && pimg->label_buf[off - 1] == '\n') { pimg->label_buf[off - 1] = '\0'; break; } if (!check_label_space(pimg, pimg->buf_len * 2)) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } } pimg->label = pimg->label_buf; if (pimg->label[0] == '\\') pimg->label++; if (pimg->survey_len) { size_t l = pimg->survey_len + 1; if (strncmp(pimg->survey, pimg->label, l) != 0) goto againpos; pimg->label += l; } return img_LABEL; } else if (pimg->version == VERSION_COMPASS_PLT) { /* Compass .plt file */ if (pimg->pending > 0) { /* -1 signals we've entered the first survey we want to * read, and need to fudge lots if the first action is 'D'... */ /* pending MOVE or LINE */ int r = pimg->pending - 4; pimg->pending = 0; pimg->flags = 0; pimg->label[pimg->label_len] = '\0'; return r; } while (1) { char *line; char *q; size_t len = 0; int ch = GETC(pimg->fh); switch (ch) { case '\x1a': case EOF: /* Don't insist on ^Z at end of file */ return img_STOP; case 'X': case 'F': case 'S': /* bounding boX (marks end of survey), Feature survey, or * new Section - skip to next survey */ if (pimg->survey) return img_STOP; skip_to_N: while (1) { do { ch = GETC(pimg->fh); } while (ch != '\n' && ch != '\r' && ch != EOF); while (ch == '\n' || ch == '\r') ch = GETC(pimg->fh); if (ch == 'N') break; if (ch == '\x1a' || ch == EOF) return img_STOP; } /* FALLTHRU */ case 'N': line = getline_alloc(pimg->fh); if (!line) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } while (line[len] > 32) ++len; if (pimg->label_len == 0) pimg->pending = -1; if (!check_label_space(pimg, len + 1)) { osfree(line); img_errno = IMG_OUTOFMEMORY; return img_BAD; } pimg->label_len = len; pimg->label = pimg->label_buf; memcpy(pimg->label, line, len); pimg->label[len] = '\0'; osfree(line); break; case 'M': case 'D': { /* Move or Draw */ long fpos = -1; if (pimg->survey && pimg->label_len == 0) { /* We're only holding onto this line in case the first line * of the 'N' is a 'D', so skip it for now... */ goto skip_to_N; } if (ch == 'D' && pimg->pending == -1) { if (pimg->survey) { fpos = ftell(pimg->fh) - 1; fseek(pimg->fh, pimg->start, SEEK_SET); ch = GETC(pimg->fh); pimg->pending = 0; } else { /* If a file actually has a 'D' before any 'M', then * pretend the 'D' is an 'M' - one of the examples * in the docs was like this! */ ch = 'M'; } } line = getline_alloc(pimg->fh); if (!line) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } /* Compass stores coordinates as North, East, Up = (y,x,z)! */ if (sscanf(line, "%lf%lf%lf", &p->y, &p->x, &p->z) != 3) { osfree(line); if (ferror(pimg->fh)) { img_errno = IMG_READERROR; } else { img_errno = IMG_BADFORMAT; } return img_BAD; } p->x *= METRES_PER_FOOT; p->y *= METRES_PER_FOOT; p->z *= METRES_PER_FOOT; q = strchr(line, 'S'); if (!q) { osfree(line); img_errno = IMG_BADFORMAT; return img_BAD; } ++q; len = 0; while (q[len] > ' ') ++len; q[len] = '\0'; len += 2; /* ' ' and '\0' */ if (!check_label_space(pimg, pimg->label_len + len)) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } pimg->label = pimg->label_buf; if (pimg->label_len) { pimg->label[pimg->label_len] = ' '; memcpy(pimg->label + pimg->label_len + 1, q, len - 1); } else { memcpy(pimg->label, q, len - 1); } q += len - 1; /* Now read LRUD. Technically, this is optional but virtually * all PLT files have it (with dummy negative values if no LRUD * was measured) and some versions of Compass can't read PLT * files without it! */ while (*q && *q <= ' ') q++; if (*q == 'P') { if (sscanf(q + 1, "%lf%lf%lf%lf", &pimg->l, &pimg->r, &pimg->u, &pimg->d) != 4) { osfree(line); if (ferror(pimg->fh)) { img_errno = IMG_READERROR; } else { img_errno = IMG_BADFORMAT; } return img_BAD; } pimg->l *= METRES_PER_FOOT; pimg->r *= METRES_PER_FOOT; pimg->u *= METRES_PER_FOOT; pimg->d *= METRES_PER_FOOT; } else { pimg->l = pimg->r = pimg->u = pimg->d = -1; } osfree(line); pimg->flags = img_SFLAG_UNDERGROUND; /* default flags */ if (fpos != -1) { fseek(pimg->fh, fpos, SEEK_SET); } else { pimg->pending = (ch == 'M' ? img_MOVE : img_LINE) + 4; } return img_LABEL; } default: img_errno = IMG_BADFORMAT; return img_BAD; } } } else { /* CMAP .xyz file */ char *line = NULL; char *q; size_t len; if (pimg->pending) { /* pending MOVE or LINE or LABEL or STOP */ int r = pimg->pending - 4; /* Set label to empty - don't use "" as we adjust label relative * to label_buf when label_buf is reallocated. */ pimg->label = pimg->label_buf + strlen(pimg->label_buf); pimg->flags = 0; if (r == img_LABEL) { /* nasty magic */ read_xyz_shot_coords(p, pimg->label_buf + 16); subtract_xyz_shot_deltas(p, pimg->label_buf + 16); pimg->pending = img_STOP + 4; return img_MOVE; } pimg->pending = 0; if (r == img_STOP) { /* nasty magic */ read_xyz_shot_coords(p, pimg->label_buf + 16); return img_LINE; } return r; } pimg->label = pimg->label_buf; do { osfree(line); if (feof(pimg->fh)) return img_STOP; line = getline_alloc(pimg->fh); if (!line) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } } while (line[0] == ' ' || line[0] == '\0'); if (line[0] == '\x1a') return img_STOP; len = strlen(line); if (pimg->version == VERSION_CMAP_STATION) { /* station variant */ if (len < 37) { osfree(line); img_errno = IMG_BADFORMAT; return img_BAD; } memcpy(pimg->label, line, 6); q = (char *)memchr(pimg->label, ' ', 6); if (!q) q = pimg->label + 6; *q = '\0'; read_xyz_station_coords(p, line); /* FIXME: look at prev for lines (line + 32, 5) */ /* FIXME: duplicate stations... */ return img_LABEL; } else { /* Shot variant (VERSION_CMAP_SHOT) */ char old[8], new_[8]; if (len < 61) { osfree(line); img_errno = IMG_BADFORMAT; return img_BAD; } memcpy(old, line, 7); q = (char *)memchr(old, ' ', 7); if (!q) q = old + 7; *q = '\0'; memcpy(new_, line + 7, 7); q = (char *)memchr(new_, ' ', 7); if (!q) q = new_ + 7; *q = '\0'; pimg->flags = img_SFLAG_UNDERGROUND; if (strcmp(old, new_) == 0) { pimg->pending = img_MOVE + 4; read_xyz_shot_coords(p, line); strcpy(pimg->label, new_); osfree(line); return img_LABEL; } if (strcmp(old, pimg->label) == 0) { pimg->pending = img_LINE + 4; read_xyz_shot_coords(p, line); strcpy(pimg->label, new_); osfree(line); return img_LABEL; } pimg->pending = img_LABEL + 4; read_xyz_shot_coords(p, line); strcpy(pimg->label, new_); memcpy(pimg->label + 16, line, 70); osfree(line); return img_LABEL; } } } static void write_coord(FILE *fh, double x, double y, double z) { SVX_ASSERT(fh); /* Output in cm */ static INT32_T X_, Y_, Z_; INT32_T X = my_lround(x * 100.0); INT32_T Y = my_lround(y * 100.0); INT32_T Z = my_lround(z * 100.0); X_ -= X; Y_ -= Y; Z_ -= Z; put32(X, fh); put32(Y, fh); put32(Z, fh); X_ = X; Y_ = Y; Z_ = Z; } static int write_v3label(img *pimg, int opt, const char *s) { size_t len, n, dot; /* find length of common prefix */ dot = 0; for (len = 0; s[len] == pimg->label_buf[len] && s[len] != '\0'; len++) { if (s[len] == '.') dot = len + 1; } SVX_ASSERT(len <= pimg->label_len); n = pimg->label_len - len; if (len == 0) { if (pimg->label_len) PUTC(0, pimg->fh); } else if (n <= 16) { if (n) PUTC(n + 15, pimg->fh); } else if (dot == 0) { if (pimg->label_len) PUTC(0, pimg->fh); len = 0; } else { const char *p = pimg->label_buf + dot; n = 1; for (len = pimg->label_len - dot - 17; len; len--) { if (*p++ == '.') n++; } if (n <= 14) { PUTC(n, pimg->fh); len = dot; } else { if (pimg->label_len) PUTC(0, pimg->fh); len = 0; } } n = strlen(s + len); PUTC(opt, pimg->fh); if (n < 0xfe) { PUTC(n, pimg->fh); } else if (n < 0xffff + 0xfe) { PUTC(0xfe, pimg->fh); put16((short)(n - 0xfe), pimg->fh); } else { PUTC(0xff, pimg->fh); put32(n, pimg->fh); } fwrite(s + len, n, 1, pimg->fh); n += len; pimg->label_len = n; if (!check_label_space(pimg, n + 1)) return 0; /* FIXME: distinguish out of memory... */ memcpy(pimg->label_buf + len, s + len, n - len + 1); return !ferror(pimg->fh); } static int write_v8label(img *pimg, int opt, int common_flag, size_t common_val, const char *s) { size_t len, del, add; /* find length of common prefix */ for (len = 0; s[len] == pimg->label_buf[len] && s[len] != '\0'; len++) { } SVX_ASSERT(len <= pimg->label_len); del = pimg->label_len - len; add = strlen(s + len); if (add == common_val && del == common_val) { PUTC(opt | common_flag, pimg->fh); } else { PUTC(opt, pimg->fh); if (del <= 15 && add <= 15 && (del || add)) { PUTC((del << 4) | add, pimg->fh); } else { PUTC(0x00, pimg->fh); if (del < 0xff) { PUTC(del, pimg->fh); } else { PUTC(0xff, pimg->fh); put32(del, pimg->fh); } if (add < 0xff) { PUTC(add, pimg->fh); } else { PUTC(0xff, pimg->fh); put32(add, pimg->fh); } } } if (add) fwrite(s + len, add, 1, pimg->fh); pimg->label_len = len + add; if (add > del && !check_label_space(pimg, pimg->label_len + 1)) return 0; /* FIXME: distinguish out of memory... */ memcpy(pimg->label_buf + len, s + len, add + 1); return !ferror(pimg->fh); } static void img_write_item_date_new(img *pimg) { int same, unset; /* Only write dates when they've changed. */ #if IMG_API_VERSION == 0 if (pimg->date1 == pimg->olddate1 && pimg->date2 == pimg->olddate2) return; same = (pimg->date1 == pimg->date2); unset = (pimg->date1 == 0); #else /* IMG_API_VERSION == 1 */ if (pimg->days1 == pimg->olddays1 && pimg->days2 == pimg->olddays2) return; same = (pimg->days1 == pimg->days2); unset = (pimg->days1 == -1); #endif if (same) { if (unset) { PUTC(0x10, pimg->fh); } else { PUTC(0x11, pimg->fh); #if IMG_API_VERSION == 0 put16(pimg->date1 / 86400 + 25567, pimg->fh); #else /* IMG_API_VERSION == 1 */ put16(pimg->days1, pimg->fh); #endif } } else { #if IMG_API_VERSION == 0 int diff = (pimg->date2 - pimg->date1) / 86400; if (diff > 0 && diff <= 256) { PUTC(0x12, pimg->fh); put16(pimg->date1 / 86400 + 25567, pimg->fh); PUTC(diff - 1, pimg->fh); } else { PUTC(0x13, pimg->fh); put16(pimg->date1 / 86400 + 25567, pimg->fh); put16(pimg->date2 / 86400 + 25567, pimg->fh); } #else /* IMG_API_VERSION == 1 */ int diff = pimg->days2 - pimg->days1; if (diff > 0 && diff <= 256) { PUTC(0x12, pimg->fh); put16(pimg->days1, pimg->fh); PUTC(diff - 1, pimg->fh); } else { PUTC(0x13, pimg->fh); put16(pimg->days1, pimg->fh); put16(pimg->days2, pimg->fh); } #endif } #if IMG_API_VERSION == 0 pimg->olddate1 = pimg->date1; pimg->olddate2 = pimg->date2; #else /* IMG_API_VERSION == 1 */ pimg->olddays1 = pimg->days1; pimg->olddays2 = pimg->days2; #endif } static void img_write_item_date(img *pimg) { int same, unset; /* Only write dates when they've changed. */ #if IMG_API_VERSION == 0 if (pimg->date1 == pimg->olddate1 && pimg->date2 == pimg->olddate2) return; same = (pimg->date1 == pimg->date2); unset = (pimg->date1 == 0); #else /* IMG_API_VERSION == 1 */ if (pimg->days1 == pimg->olddays1 && pimg->days2 == pimg->olddays2) return; same = (pimg->days1 == pimg->days2); unset = (pimg->days1 == -1); #endif if (same) { if (img_output_version < 7) { PUTC(0x20, pimg->fh); #if IMG_API_VERSION == 0 put32(pimg->date1, pimg->fh); #else /* IMG_API_VERSION == 1 */ put32((pimg->days1 - 25567) * 86400, pimg->fh); #endif } else { if (unset) { PUTC(0x24, pimg->fh); } else { PUTC(0x20, pimg->fh); #if IMG_API_VERSION == 0 put16(pimg->date1 / 86400 + 25567, pimg->fh); #else /* IMG_API_VERSION == 1 */ put16(pimg->days1, pimg->fh); #endif } } } else { if (img_output_version < 7) { PUTC(0x21, pimg->fh); #if IMG_API_VERSION == 0 put32(pimg->date1, pimg->fh); put32(pimg->date2, pimg->fh); #else /* IMG_API_VERSION == 1 */ put32((pimg->days1 - 25567) * 86400, pimg->fh); put32((pimg->days2 - 25567) * 86400, pimg->fh); #endif } else { #if IMG_API_VERSION == 0 int diff = (pimg->date2 - pimg->date1) / 86400; if (diff > 0 && diff <= 256) { PUTC(0x21, pimg->fh); put16(pimg->date1 / 86400 + 25567, pimg->fh); PUTC(diff - 1, pimg->fh); } else { PUTC(0x23, pimg->fh); put16(pimg->date1 / 86400 + 25567, pimg->fh); put16(pimg->date2 / 86400 + 25567, pimg->fh); } #else /* IMG_API_VERSION == 1 */ int diff = pimg->days2 - pimg->days1; if (diff > 0 && diff <= 256) { PUTC(0x21, pimg->fh); put16(pimg->days1, pimg->fh); PUTC(diff - 1, pimg->fh); } else { PUTC(0x23, pimg->fh); put16(pimg->days1, pimg->fh); put16(pimg->days2, pimg->fh); } #endif } } #if IMG_API_VERSION == 0 pimg->olddate1 = pimg->date1; pimg->olddate2 = pimg->date2; #else /* IMG_API_VERSION == 1 */ pimg->olddays1 = pimg->days1; pimg->olddays2 = pimg->days2; #endif } static void img_write_item_new(img *pimg, int code, int flags, const char *s, double x, double y, double z); static void img_write_item_v3to7(img *pimg, int code, int flags, const char *s, double x, double y, double z); static void img_write_item_ancient(img *pimg, int code, int flags, const char *s, double x, double y, double z); void img_write_item(img *pimg, int code, int flags, const char *s, double x, double y, double z) { if (!pimg) return; if (pimg->version >= 8) { img_write_item_new(pimg, code, flags, s, x, y, z); } else if (pimg->version >= 3) { img_write_item_v3to7(pimg, code, flags, s, x, y, z); } else { img_write_item_ancient(pimg, code, flags, s, x, y, z); } } static void img_write_item_new(img *pimg, int code, int flags, const char *s, double x, double y, double z) { switch (code) { case img_LABEL: write_v8label(pimg, 0x80 | flags, 0, -1, s); break; case img_XSECT: { INT32_T l, r, u, d, max_dim; img_write_item_date_new(pimg); l = (INT32_T)my_lround(pimg->l * 100.0); r = (INT32_T)my_lround(pimg->r * 100.0); u = (INT32_T)my_lround(pimg->u * 100.0); d = (INT32_T)my_lround(pimg->d * 100.0); if (l < 0) l = -1; if (r < 0) r = -1; if (u < 0) u = -1; if (d < 0) d = -1; max_dim = max(max(l, r), max(u, d)); flags = (flags & img_XFLAG_END) ? 1 : 0; if (max_dim >= 32768) flags |= 2; write_v8label(pimg, 0x30 | flags, 0, -1, s); if (flags & 2) { /* Big passage! Need to use 4 bytes. */ put32(l, pimg->fh); put32(r, pimg->fh); put32(u, pimg->fh); put32(d, pimg->fh); } else { put16(l, pimg->fh); put16(r, pimg->fh); put16(u, pimg->fh); put16(d, pimg->fh); } return; } case img_MOVE: PUTC(15, pimg->fh); break; case img_LINE: img_write_item_date_new(pimg); if (pimg->style != pimg->oldstyle) { switch (pimg->style) { case img_STYLE_NORMAL: case img_STYLE_DIVING: case img_STYLE_CARTESIAN: case img_STYLE_CYLPOLAR: case img_STYLE_NOSURVEY: PUTC(pimg->style, pimg->fh); break; } pimg->oldstyle = pimg->style; } write_v8label(pimg, 0x40 | flags, 0x20, 0x00, s ? s : ""); break; default: /* ignore for now */ return; } write_coord(pimg->fh, x, y, z); } static void img_write_item_v3to7(img *pimg, int code, int flags, const char *s, double x, double y, double z) { switch (code) { case img_LABEL: write_v3label(pimg, 0x40 | flags, s); break; case img_XSECT: { INT32_T l, r, u, d, max_dim; /* Need at least version 5 for img_XSECT. */ if (pimg->version < 5) return; img_write_item_date(pimg); l = (INT32_T)my_lround(pimg->l * 100.0); r = (INT32_T)my_lround(pimg->r * 100.0); u = (INT32_T)my_lround(pimg->u * 100.0); d = (INT32_T)my_lround(pimg->d * 100.0); if (l < 0) l = -1; if (r < 0) r = -1; if (u < 0) u = -1; if (d < 0) d = -1; max_dim = max(max(l, r), max(u, d)); flags = (flags & img_XFLAG_END) ? 1 : 0; if (max_dim >= 32768) flags |= 2; write_v3label(pimg, 0x30 | flags, s); if (flags & 2) { /* Big passage! Need to use 4 bytes. */ put32(l, pimg->fh); put32(r, pimg->fh); put32(u, pimg->fh); put32(d, pimg->fh); } else { put16(l, pimg->fh); put16(r, pimg->fh); put16(u, pimg->fh); put16(d, pimg->fh); } return; } case img_MOVE: PUTC(15, pimg->fh); break; case img_LINE: if (pimg->version >= 4) { img_write_item_date(pimg); } write_v3label(pimg, 0x80 | flags, s ? s : ""); break; default: /* ignore for now */ return; } write_coord(pimg->fh, x, y, z); } static void img_write_item_ancient(img *pimg, int code, int flags, const char *s, double x, double y, double z) { size_t len; INT32_T opt = 0; SVX_ASSERT(pimg->version > 0); switch (code) { case img_LABEL: if (pimg->version == 1) { /* put a move before each label */ img_write_item_ancient(pimg, img_MOVE, 0, NULL, x, y, z); put32(2, pimg->fh); fputsnl(s, pimg->fh); return; } len = strlen(s); if (len > 255 || strchr(s, '\n')) { /* long label - not in early incarnations of v2 format, but few * 3d files will need these, so better not to force incompatibility * with a new version I think... */ PUTC(7, pimg->fh); PUTC(flags, pimg->fh); put32(len, pimg->fh); fputs(s, pimg->fh); } else { PUTC(0x40 | (flags & 0x3f), pimg->fh); fputsnl(s, pimg->fh); } opt = 0; break; case img_MOVE: opt = 4; break; case img_LINE: if (pimg->version > 1) { opt = 0x80 | (flags & 0x3f); break; } opt = 5; break; default: /* ignore for now */ return; } if (pimg->version == 1) { put32(opt, pimg->fh); } else { if (opt) PUTC(opt, pimg->fh); } write_coord(pimg->fh, x, y, z); } /* Write error information for the current traverse * n_legs is the number of legs in the traverse * length is the traverse length (in m) * E is the ratio of the observed misclosure to the theoretical one * H is the ratio of the observed horizontal misclosure to the theoretical one * V is the ratio of the observed vertical misclosure to the theoretical one */ void img_write_errors(img *pimg, int n_legs, double length, double E, double H, double V) { PUTC((pimg->version >= 8 ? 0x1f : 0x22), pimg->fh); put32(n_legs, pimg->fh); put32((INT32_T)my_lround(length * 100.0), pimg->fh); put32((INT32_T)my_lround(E * 100.0), pimg->fh); put32((INT32_T)my_lround(H * 100.0), pimg->fh); put32((INT32_T)my_lround(V * 100.0), pimg->fh); } int img_close(img *pimg) { int result = 1; if (pimg) { if (pimg->fh) { if (pimg->fRead) { osfree(pimg->survey); osfree(pimg->title); osfree(pimg->datestamp); } else { /* write end of data marker */ switch (pimg->version) { case 1: put32((INT32_T)-1, pimg->fh); break; default: if (pimg->version <= 7 ? (pimg->label_len != 0) : (pimg->style != img_STYLE_NORMAL)) { PUTC(0, pimg->fh); } /* FALL THROUGH */ case 2: PUTC(0, pimg->fh); break; } } if (ferror(pimg->fh)) result = 0; if (fclose(pimg->fh)) result = 0; if (!result) img_errno = pimg->fRead ? IMG_READERROR : IMG_WRITEERROR; } osfree(pimg->label_buf); osfree(pimg->filename_opened); osfree(pimg); } return result; } therion/extern/img.h0000644000076400010400000002121012265325004015512 0ustar userAdministrators/* img.h * Header file for routines to read and write Survex ".3d" image files * Copyright (C) Olly Betts 1993,1994,1997,2001,2002,2003,2004,2005,2006,2010,2011,2012,2013,2014 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef IMG_H # define IMG_H /* Define IMG_API_VERSION if you want more recent versions of the img API. * * 0 (default) The old API. date1 and date2 give the survey date as time_t. * Set to 0 for "unknown". * 1 days1 and days2 give survey dates as days since 1st Jan 1900. * Set to -1 for "unknown". */ #ifndef IMG_API_VERSION # define IMG_API_VERSION 0 #elif IMG_API_VERSION > 1 # error IMG_API_VERSION > 1 too new #endif #ifdef __cplusplus extern "C" { #endif #include #include /* for time_t */ # define img_BAD -2 # define img_STOP -1 # define img_MOVE 0 # define img_LINE 1 /* NB: img_CROSS is never output and ignored on input. * Put crosses where labels are. */ /* # define img_CROSS 2 */ # define img_LABEL 3 # define img_XSECT 4 # define img_XSECT_END 5 # define img_ERROR_INFO 6 /* Leg flags */ # define img_FLAG_SURFACE 0x01 # define img_FLAG_DUPLICATE 0x02 # define img_FLAG_SPLAY 0x04 /* Station flags */ # define img_SFLAG_SURFACE 0x01 # define img_SFLAG_UNDERGROUND 0x02 # define img_SFLAG_ENTRANCE 0x04 # define img_SFLAG_EXPORTED 0x08 # define img_SFLAG_FIXED 0x10 # define img_SFLAG_ANON 0x20 # define img_SFLAG_WALL 0x40 /* File-wide flags */ # define img_FFLAG_EXTENDED 0x80 /* When writing img_XSECT, img_XFLAG_END in pimg->flags means this is the last * img_XSECT in this tube: */ # define img_XFLAG_END 0x01 # define img_STYLE_UNKNOWN -1 # define img_STYLE_NORMAL 0 # define img_STYLE_DIVING 1 # define img_STYLE_CARTESIAN 2 # define img_STYLE_CYLPOLAR 3 # define img_STYLE_NOSURVEY 4 /* 3D coordinates (in metres) */ typedef struct { double x, y, z; } img_point; typedef struct { /* members you can access when reading (don't touch when writing) */ char *label; int flags; char *title; /* Older .3d format versions stored a human readable datestamp string. * Format versions >= 8 versions store a string consisting of "@" followed * by the number of seconds since midnight UTC on 1/1/1970. Some foreign * formats contain a human readable string, others no date information * (which results in "?" being returned). */ char *datestamp; /* The datestamp as a time_t (or (time_t)-1 if not available). * * For 3d format versions >= 8, this is a reliable value and in UTC. Older * 3d format versions store a human readable time, which img will attempt * to decode, but it may fail, particularly with handling timezones. Even * if it does work, beware that times in local time where DST applies are * inherently ambiguous around when the clocks go back. * * CMAP XYZ files contain a timestamp. It's probably in localtime (but * without any timezone information) and the example files are all pre-2000 * and have two digit years. We do our best to turn these into a useful * time_t value. */ time_t datestamp_numeric; char separator; /* character used to separate survey levels ('.' usually) */ #if IMG_API_VERSION == 0 time_t date1, date2; #else /* IMG_API_VERSION == 1 */ int days1, days2; #endif double l, r, u, d; /* Error information - valid when IMG_ERROR is returned: */ int n_legs; double length; double E, H, V; /* The filename actually opened (e.g. may have ".3d" added). */ char * filename_opened; int is_extended_elevation; /* The style of the data - one of the img_STYLE_* constants above */ int style; /* all other members are for internal use only */ FILE *fh; /* file handle of image file */ char *label_buf; size_t buf_len; size_t label_len; int fRead; /* 1 for reading, 0 for writing */ long start; /* version of file format: * -4 => CMAP .xyz file, shot format * -3 => CMAP .xyz file, station format * -2 => Compass .plt file * -1 => .pos file * 0 => 0.01 ascii * 1 => 0.01 binary, * 2 => byte actions and flags * 3 => prefixes for legs; compressed prefixes * 4 => survey date * 5 => LRUD info * 6 => error info * 7 => more compact dates with wider range * 8 => lots of changes */ int version; char *survey; size_t survey_len; int pending; /* for old style text format files and survey filtering */ img_point mv; #if IMG_API_VERSION == 0 time_t olddate1, olddate2; #else /* IMG_API_VERSION == 1 */ int olddays1, olddays2; #endif int oldstyle; } img; /* Which version of the file format to output (defaults to newest) */ extern unsigned int img_output_version; /* Minimum supported value for img_output_version: */ #define IMG_VERSION_MIN 1 /* Maximum supported value for img_output_version: */ #define IMG_VERSION_MAX 8 /* Open a .3d file for reading * fnm is the filename * Returns pointer to an img struct or NULL */ #define img_open(F) img_open_survey((F), NULL) /* Open a .3d file for reading * fnm is the filename * Returns pointer to an img struct or NULL * survey points to a survey name to restrict reading to (or NULL for all * survey data in the file) */ img *img_open_survey(const char *fnm, const char *survey); /* Open a .3d file for output * fnm is the filename * title is the title * flags contains a bitwise-or of any file-wide flags - currently only one * is available: img_FFLAG_EXTENDED. (The third parameter used to be * 'fBinary', but has been ignored for many years, so the parameter has * been repurposed for flags - for this reason, img.c deliberately ignores bit * 1 being set, but callers should be written/updated not to set it). * * Returns pointer to an img struct or NULL for error (check img_error() * for details) */ img *img_open_write(const char *fnm, char *title, int flags); /* Read an item from a .3d file * pimg is a pointer to an img struct returned by img_open() * coordinates are returned in p * flags and label name are returned in fields in pimg * Returns img_XXXX as #define-d above */ int img_read_item(img *pimg, img_point *p); /* Write a item to a .3d file * pimg is a pointer to an img struct returned by img_open_write() * code is one of the img_XXXX #define-d above * flags is the leg, station, or xsect flags * (meaningful for img_LINE, img_LABEL, and img_XSECT respectively) * s is the label (only meaningful for img_LABEL) * x, y, z are the coordinates */ void img_write_item(img *pimg, int code, int flags, const char *s, double x, double y, double z); /* Write error information for the current traverse * n_legs is the number of legs in the traverse * length is the traverse length (in m) * E is the ratio of the observed misclosure to the theoretical one * H is the ratio of the observed horizontal misclosure to the theoretical one * V is the ratio of the observed vertical misclosure to the theoretical one */ void img_write_errors(img *pimg, int n_legs, double length, double E, double H, double V); /* rewind a .3d file opened for reading so the data can be read in * several passes * pimg is a pointer to an img struct returned by img_open() * Returns: non-zero for success, zero for error (check img_error() for * details) */ int img_rewind(img *pimg); /* Close a .3d file * pimg is a pointer to an img struct returned by img_open() or * img_open_write() * Returns: non-zero for success, zero for error (check img_error() for * details) */ int img_close(img *pimg); /* Codes returned by img_error */ typedef enum { IMG_NONE = 0, IMG_FILENOTFOUND, IMG_OUTOFMEMORY, IMG_CANTOPENOUT, IMG_BADFORMAT, IMG_DIRECTORY, IMG_READERROR, IMG_WRITEERROR, IMG_TOONEW } img_errcode; /* Read the error code * If img_open(), img_open_survey() or img_open_write() returns NULL, or * img_rewind() or img_close() returns 0, or img_read_item() returns img_BAD * then you can call this function to discover why. */ img_errcode img_error(void); #ifdef __cplusplus } #endif #endif therion/extern/poly2tri/0000755000076400010400000000000012050456012016351 5ustar userAdministratorstherion/extern/poly2tri/common/0000755000076400010400000000000012270034353017645 5ustar userAdministratorstherion/extern/poly2tri/common/shapes.cc0000644000076400010400000002065711705753624021464 0ustar userAdministrators/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "shapes.h" #include namespace p2t { Triangle::Triangle(Point& a, Point& b, Point& c) { points_[0] = &a; points_[1] = &b; points_[2] = &c; neighbors_[0] = NULL; neighbors_[1] = NULL; neighbors_[2] = NULL; constrained_edge[0] = constrained_edge[1] = constrained_edge[2] = false; delaunay_edge[0] = delaunay_edge[1] = delaunay_edge[2] = false; interior_ = false; } // Update neighbor pointers void Triangle::MarkNeighbor(Point* p1, Point* p2, Triangle* t) { if ((p1 == points_[2] && p2 == points_[1]) || (p1 == points_[1] && p2 == points_[2])) neighbors_[0] = t; else if ((p1 == points_[0] && p2 == points_[2]) || (p1 == points_[2] && p2 == points_[0])) neighbors_[1] = t; else if ((p1 == points_[0] && p2 == points_[1]) || (p1 == points_[1] && p2 == points_[0])) neighbors_[2] = t; else throw(0); //assert(0); } // Exhaustive search to update neighbor pointers void Triangle::MarkNeighbor(Triangle& t) { if (t.Contains(points_[1], points_[2])) { neighbors_[0] = &t; t.MarkNeighbor(points_[1], points_[2], this); } else if (t.Contains(points_[0], points_[2])) { neighbors_[1] = &t; t.MarkNeighbor(points_[0], points_[2], this); } else if (t.Contains(points_[0], points_[1])) { neighbors_[2] = &t; t.MarkNeighbor(points_[0], points_[1], this); } } void Triangle::ClearNeighbors() { neighbors_[0] = NULL; neighbors_[1] = NULL; neighbors_[2] = NULL; } void Triangle::ClearDelunayEdges() { delaunay_edge[0] = delaunay_edge[1] = delaunay_edge[2] = false; } Point* Triangle::OppositePoint(Triangle& t, Point& p) { Point *cw = t.PointCW(p); double x = cw->x; double y = cw->y; x = p.x; y = p.y; Point* ham = PointCW(*cw); return PointCW(*cw); } // Legalized triangle by rotating clockwise around point(0) void Triangle::Legalize(Point& point) { points_[1] = points_[0]; points_[0] = points_[2]; points_[2] = &point; } // Legalize triagnle by rotating clockwise around oPoint void Triangle::Legalize(Point& opoint, Point& npoint) { if (&opoint == points_[0]) { points_[1] = points_[0]; points_[0] = points_[2]; points_[2] = &npoint; } else if (&opoint == points_[1]) { points_[2] = points_[1]; points_[1] = points_[0]; points_[0] = &npoint; } else if (&opoint == points_[2]) { points_[0] = points_[2]; points_[2] = points_[1]; points_[1] = &npoint; } else { throw(0); //assert(0); } } int Triangle::Index(const Point* p) { if (p == points_[0]) { return 0; } else if (p == points_[1]) { return 1; } else if (p == points_[2]) { return 2; } throw(0); //assert(0); } int Triangle::EdgeIndex(const Point* p1, const Point* p2) { if (points_[0] == p1) { if (points_[1] == p2) { return 2; } else if (points_[2] == p2) { return 1; } } else if (points_[1] == p1) { if (points_[2] == p2) { return 0; } else if (points_[0] == p2) { return 2; } } else if (points_[2] == p1) { if (points_[0] == p2) { return 1; } else if (points_[1] == p2) { return 0; } } return -1; } void Triangle::MarkConstrainedEdge(const int index) { constrained_edge[index] = true; } void Triangle::MarkConstrainedEdge(Edge& edge) { MarkConstrainedEdge(edge.p, edge.q); } // Mark edge as constrained void Triangle::MarkConstrainedEdge(Point* p, Point* q) { if ((q == points_[0] && p == points_[1]) || (q == points_[1] && p == points_[0])) { constrained_edge[2] = true; } else if ((q == points_[0] && p == points_[2]) || (q == points_[2] && p == points_[0])) { constrained_edge[1] = true; } else if ((q == points_[1] && p == points_[2]) || (q == points_[2] && p == points_[1])) { constrained_edge[0] = true; } } // The point counter-clockwise to given point Point* Triangle::PointCW(Point& point) { if (&point == points_[0]) { return points_[2]; } else if (&point == points_[1]) { return points_[0]; } else if (&point == points_[2]) { return points_[1]; } throw(0); //assert(0); } // The point counter-clockwise to given point Point* Triangle::PointCCW(Point& point) { if (&point == points_[0]) { return points_[1]; } else if (&point == points_[1]) { return points_[2]; } else if (&point == points_[2]) { return points_[0]; } throw(0); //assert(0); } // The neighbor clockwise to given point Triangle* Triangle::NeighborCW(Point& point) { if (&point == points_[0]) { return neighbors_[1]; } else if (&point == points_[1]) { return neighbors_[2]; } return neighbors_[0]; } // The neighbor counter-clockwise to given point Triangle* Triangle::NeighborCCW(Point& point) { if (&point == points_[0]) { return neighbors_[2]; } else if (&point == points_[1]) { return neighbors_[0]; } return neighbors_[1]; } bool Triangle::GetConstrainedEdgeCCW(Point& p) { if (&p == points_[0]) { return constrained_edge[2]; } else if (&p == points_[1]) { return constrained_edge[0]; } return constrained_edge[1]; } bool Triangle::GetConstrainedEdgeCW(Point& p) { if (&p == points_[0]) { return constrained_edge[1]; } else if (&p == points_[1]) { return constrained_edge[2]; } return constrained_edge[0]; } void Triangle::SetConstrainedEdgeCCW(Point& p, bool ce) { if (&p == points_[0]) { constrained_edge[2] = ce; } else if (&p == points_[1]) { constrained_edge[0] = ce; } else { constrained_edge[1] = ce; } } void Triangle::SetConstrainedEdgeCW(Point& p, bool ce) { if (&p == points_[0]) { constrained_edge[1] = ce; } else if (&p == points_[1]) { constrained_edge[2] = ce; } else { constrained_edge[0] = ce; } } bool Triangle::GetDelunayEdgeCCW(Point& p) { if (&p == points_[0]) { return delaunay_edge[2]; } else if (&p == points_[1]) { return delaunay_edge[0]; } return delaunay_edge[1]; } bool Triangle::GetDelunayEdgeCW(Point& p) { if (&p == points_[0]) { return delaunay_edge[1]; } else if (&p == points_[1]) { return delaunay_edge[2]; } return delaunay_edge[0]; } void Triangle::SetDelunayEdgeCCW(Point& p, bool e) { if (&p == points_[0]) { delaunay_edge[2] = e; } else if (&p == points_[1]) { delaunay_edge[0] = e; } else { delaunay_edge[1] = e; } } void Triangle::SetDelunayEdgeCW(Point& p, bool e) { if (&p == points_[0]) { delaunay_edge[1] = e; } else if (&p == points_[1]) { delaunay_edge[2] = e; } else { delaunay_edge[0] = e; } } // The neighbor across to given point Triangle& Triangle::NeighborAcross(Point& opoint) { if (&opoint == points_[0]) { return *neighbors_[0]; } else if (&opoint == points_[1]) { return *neighbors_[1]; } return *neighbors_[2]; } void Triangle::DebugPrint() { using namespace std; cout << points_[0]->x << "," << points_[0]->y << " "; cout << points_[1]->x << "," << points_[1]->y << " "; cout << points_[2]->x << "," << points_[2]->y << endl; } } therion/extern/poly2tri/common/shapes.h0000644000076400010400000001627611705752532021325 0ustar userAdministrators/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Include guard #ifndef SHAPES_H #define SHAPES_H #include #include #include #include namespace p2t { struct Edge; struct Point { double x, y; /// Default constructor does nothing (for performance). Point() { x = 0.0; y = 0.0; } /// The edges this point constitutes an upper ending point std::vector edge_list; /// Construct using coordinates. Point(double x, double y) : x(x), y(y) {} /// Set this point to all zeros. void set_zero() { x = 0.0f; y = 0.0f; } /// Set this point to some specified coordinates. void set(double x_, double y_) { x = x_; y = y_; } /// Negate this point. Point operator -() const { Point v; v.set(-x, -y); return v; } /// Add a point to this point. void operator +=(const Point& v) { x += v.x; y += v.y; } /// Subtract a point from this point. void operator -=(const Point& v) { x -= v.x; y -= v.y; } /// Multiply this point by a scalar. void operator *=(double a) { x *= a; y *= a; } /// Get the length of this point (the norm). double Length() const { return sqrt(x * x + y * y); } /// Convert this point into a unit point. Returns the Length. double Normalize() { double len = Length(); x /= len; y /= len; return len; } }; // Represents a simple polygon's edge struct Edge { Point* p, *q; /// Constructor Edge(Point& p1, Point& p2) : p(&p1), q(&p2) { if (p1.y > p2.y) { q = &p1; p = &p2; } else if (p1.y == p2.y) { if (p1.x > p2.x) { q = &p1; p = &p2; } else if (p1.x == p2.x) { // Repeat points // assert(false); throw(false); } } q->edge_list.push_back(this); } }; // Triangle-based data structures are know to have better performance than quad-edge structures // See: J. Shewchuk, "Triangle: Engineering a 2D Quality Mesh Generator and Delaunay Triangulator" // "Triangulations in CGAL" class Triangle { public: /// Constructor Triangle(Point& a, Point& b, Point& c); /// Flags to determine if an edge is a Constrained edge bool constrained_edge[3]; /// Flags to determine if an edge is a Delauney edge bool delaunay_edge[3]; Point* GetPoint(const int& index); Point* PointCW(Point& point); Point* PointCCW(Point& point); Point* OppositePoint(Triangle& t, Point& p); Triangle* GetNeighbor(const int& index); void MarkNeighbor(Point* p1, Point* p2, Triangle* t); void MarkNeighbor(Triangle& t); void MarkConstrainedEdge(const int index); void MarkConstrainedEdge(Edge& edge); void MarkConstrainedEdge(Point* p, Point* q); int Index(const Point* p); int EdgeIndex(const Point* p1, const Point* p2); Triangle* NeighborCW(Point& point); Triangle* NeighborCCW(Point& point); bool GetConstrainedEdgeCCW(Point& p); bool GetConstrainedEdgeCW(Point& p); void SetConstrainedEdgeCCW(Point& p, bool ce); void SetConstrainedEdgeCW(Point& p, bool ce); bool GetDelunayEdgeCCW(Point& p); bool GetDelunayEdgeCW(Point& p); void SetDelunayEdgeCCW(Point& p, bool e); void SetDelunayEdgeCW(Point& p, bool e); bool Contains(Point* p); bool Contains(const Edge& e); bool Contains(Point* p, Point* q); void Legalize(Point& point); void Legalize(Point& opoint, Point& npoint); void ClearNeighbors(); void ClearDelunayEdges(); inline bool IsInterior(); inline void IsInterior(bool b); Triangle& NeighborAcross(Point& opoint); void DebugPrint(); private: /// Triangle points Point* points_[3]; /// Neighbor list Triangle* neighbors_[3]; /// Has this triangle been marked as an interior triangle? bool interior_; }; inline bool cmp(const Point* a, const Point* b) { if (a->y < b->y) { return true; } else if (a->y == b->y) { // Make sure q is point with greater x value if (a->x < b->x) { return true; } } return false; } /// Add two points_ component-wise. inline Point operator +(const Point& a, const Point& b) { return Point(a.x + b.x, a.y + b.y); } /// Subtract two points_ component-wise. inline Point operator -(const Point& a, const Point& b) { return Point(a.x - b.x, a.y - b.y); } /// Multiply point by scalar inline Point operator *(double s, const Point& a) { return Point(s * a.x, s * a.y); } inline bool operator ==(const Point& a, const Point& b) { return a.x == b.x && a.y == b.y; } inline bool operator !=(const Point& a, const Point& b) { return a.x != b.x && a.y != b.y; } /// Peform the dot product on two vectors. inline double Dot(const Point& a, const Point& b) { return a.x * b.x + a.y * b.y; } /// Perform the cross product on two vectors. In 2D this produces a scalar. inline double Cross(const Point& a, const Point& b) { return a.x * b.y - a.y * b.x; } /// Perform the cross product on a point and a scalar. In 2D this produces /// a point. inline Point Cross(const Point& a, double s) { return Point(s * a.y, -s * a.x); } /// Perform the cross product on a scalar and a point. In 2D this produces /// a point. inline Point Cross(const double s, const Point& a) { return Point(-s * a.y, s * a.x); } inline Point* Triangle::GetPoint(const int& index) { return points_[index]; } inline Triangle* Triangle::GetNeighbor(const int& index) { return neighbors_[index]; } inline bool Triangle::Contains(Point* p) { return p == points_[0] || p == points_[1] || p == points_[2]; } inline bool Triangle::Contains(const Edge& e) { return Contains(e.p) && Contains(e.q); } inline bool Triangle::Contains(Point* p, Point* q) { return Contains(p) && Contains(q); } inline bool Triangle::IsInterior() { return interior_; } inline void Triangle::IsInterior(bool b) { interior_ = b; } } #endif therion/extern/poly2tri/common/utils.h0000644000076400010400000000563711447322660021177 0ustar userAdministrators/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef UTILS_H #define UTILS_H #include #include namespace p2t { const double PI_3div4 = 3 * M_PI / 4; const double EPSILON = 1e-12; enum Orientation { CW, CCW, COLLINEAR }; /** * Forumla to calculate signed area
* Positive if CCW
* Negative if CW
* 0 if collinear
*
 * A[P1,P2,P3]  =  (x1*y2 - y1*x2) + (x2*y3 - y2*x3) + (x3*y1 - y3*x1)
 *              =  (x1-x3)*(y2-y3) - (y1-y3)*(x2-x3)
 * 
*/ Orientation Orient2d(Point& pa, Point& pb, Point& pc) { double detleft = (pa.x - pc.x) * (pb.y - pc.y); double detright = (pa.y - pc.y) * (pb.x - pc.x); double val = detleft - detright; if (val > -EPSILON && val < EPSILON) { return COLLINEAR; } else if (val > 0) { return CCW; } return CW; } bool InScanArea(Point& pa, Point& pb, Point& pc, Point& pd) { double pdx = pd.x; double pdy = pd.y; double adx = pa.x - pdx; double ady = pa.y - pdy; double bdx = pb.x - pdx; double bdy = pb.y - pdy; double adxbdy = adx * bdy; double bdxady = bdx * ady; double oabd = adxbdy - bdxady; if (oabd <= EPSILON) { return false; } double cdx = pc.x - pdx; double cdy = pc.y - pdy; double cdxady = cdx * ady; double adxcdy = adx * cdy; double ocad = cdxady - adxcdy; if (ocad <= EPSILON) { return false; } return true; } } #endif therion/extern/poly2tri/poly2tri.h0000644000076400010400000000327111447322660020323 0ustar userAdministrators/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef POLY2TRI_H #define POLY2TRI_H #include "common/shapes.h" #include "sweep/cdt.h" #endif therion/extern/poly2tri/sweep/0000755000076400010400000000000012270034353017500 5ustar userAdministratorstherion/extern/poly2tri/sweep/advancing_front.cc0000644000076400010400000000607711705753624023176 0ustar userAdministrators/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "advancing_front.h" namespace p2t { AdvancingFront::AdvancingFront(Node& head, Node& tail) { head_ = &head; tail_ = &tail; search_node_ = &head; } Node* AdvancingFront::LocateNode(const double& x) { Node* node = search_node_; if (x < node->value) { while ((node = node->prev) != NULL) { if (x >= node->value) { search_node_ = node; return node; } } } else { while ((node = node->next) != NULL) { if (x < node->value) { search_node_ = node->prev; return node->prev; } } } return NULL; } Node* AdvancingFront::FindSearchNode(const double& x) { // TODO: implement BST index return search_node_; } Node* AdvancingFront::LocatePoint(const Point* point) { const double px = point->x; Node* node = FindSearchNode(px); const double nx = node->point->x; if (px == nx) { if (point != node->point) { // We might have two nodes with same x value for a short time if (point == node->prev->point) { node = node->prev; } else if (point == node->next->point) { node = node->next; } else { // assert(0); throw(0); } } } else if (px < nx) { while ((node = node->prev) != NULL) { if (point == node->point) { break; } } } else { while ((node = node->next) != NULL) { if (point == node->point) break; } } if(node) search_node_ = node; return node; } AdvancingFront::~AdvancingFront() { } } therion/extern/poly2tri/sweep/advancing_front.h0000644000076400010400000000556411447322660023033 0ustar userAdministrators/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef ADVANCED_FRONT_H #define ADVANCED_FRONT_H #include "../common/shapes.h" namespace p2t { struct Node; // Advancing front node struct Node { Point* point; Triangle* triangle; Node* next; Node* prev; double value; Node(Point& p) : point(&p), triangle(NULL), value(p.x), next(NULL), prev(NULL) { } Node(Point& p, Triangle& t) : point(&p), triangle(&t), value(p.x), next(NULL), prev(NULL) { } }; // Advancing front class AdvancingFront { public: AdvancingFront(Node& head, Node& tail); // Destructor ~AdvancingFront(); Node* head(); void set_head(Node* node); Node* tail(); void set_tail(Node* node); Node* search(); void set_search(Node* node); /// Locate insertion point along advancing front Node* LocateNode(const double& x); Node* LocatePoint(const Point* point); private: Node* head_, *tail_, *search_node_; Node* FindSearchNode(const double& x); }; inline Node* AdvancingFront::head() { return head_; } inline void AdvancingFront::set_head(Node* node) { head_ = node; } inline Node* AdvancingFront::tail() { return tail_; } inline void AdvancingFront::set_tail(Node* node) { tail_ = node; } inline Node* AdvancingFront::search() { return search_node_; } inline void AdvancingFront::set_search(Node* node) { search_node_ = node; } } #endif therion/extern/poly2tri/sweep/cdt.cc0000644000076400010400000000440611447322660020573 0ustar userAdministrators/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "cdt.h" namespace p2t { CDT::CDT(std::vector polyline) { sweep_context_ = new SweepContext(polyline); sweep_ = new Sweep; } void CDT::AddHole(std::vector polyline) { sweep_context_->AddHole(polyline); } void CDT::AddPoint(Point* point) { sweep_context_->AddPoint(point); } void CDT::Triangulate() { sweep_->Triangulate(*sweep_context_); } std::vector CDT::GetTriangles() { return sweep_context_->GetTriangles(); } std::list CDT::GetMap() { return sweep_context_->GetMap(); } CDT::~CDT() { delete sweep_context_; delete sweep_; } } therion/extern/poly2tri/sweep/cdt.h0000644000076400010400000000421011447322660020426 0ustar userAdministrators/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef CDT_H #define CDT_H #include "advancing_front.h" #include "sweep_context.h" #include "sweep.h" namespace p2t { class CDT { public: /// Constructor CDT(std::vector polyline); /// Destructor ~CDT(); /// Add a hole void AddHole(std::vector polyline); /// Add a single point void AddPoint(Point* point); /// Triangulate points void Triangulate(); /// Get Delaunay triangles std::vector GetTriangles(); /// Get triangle map std::list GetMap(); private: SweepContext* sweep_context_; Sweep* sweep_; }; } #endif therion/extern/poly2tri/sweep/sweep.cc0000644000076400010400000005573011712224760021147 0ustar userAdministrators/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "sweep.h" #include "sweep_context.h" #include "advancing_front.h" #include "../common/utils.h" namespace p2t { // Triangulate simple polygon with holes void Sweep::Triangulate(SweepContext& tcx) { tcx.InitTriangulation(); tcx.CreateAdvancingFront(nodes_); // Sweep points; build mesh SweepPoints(tcx); // Clean up FinalizationPolygon(tcx); } void Sweep::SweepPoints(SweepContext& tcx) { for (int i = 1; i < tcx.point_count(); i++) { Point& point = *tcx.GetPoint(i); Node* node = &PointEvent(tcx, point); for (int i = 0; i < point.edge_list.size(); i++) { EdgeEvent(tcx, point.edge_list[i], node); } } } void Sweep::FinalizationPolygon(SweepContext& tcx) { // Get an Internal triangle to start with Triangle* t = tcx.front()->head()->next->triangle; Point* p = tcx.front()->head()->next->point; while (!t->GetConstrainedEdgeCW(*p)) { t = t->NeighborCCW(*p); // TU TO PADLO! if (t == NULL) return; } // Collect interior triangles constrained by edges tcx.MeshClean(*t); } /** * Find closes node to the left of the new point and * create a new triangle. If needed new holes and basins * will be filled to. * * @param tcx * @param point * @return */ Node& Sweep::PointEvent(SweepContext& tcx, Point& point) { Node& node = tcx.LocateNode(point); Node& new_node = NewFrontTriangle(tcx, point, node); // Only need to check +epsilon since point never have smaller // x value than node due to how we fetch nodes from the front if (point.x <= node.point->x + EPSILON) { Fill(tcx, node); } //tcx.AddNode(new_node); FillAdvancingFront(tcx, new_node); return new_node; } void Sweep::EdgeEvent(SweepContext& tcx, Edge* edge, Node* node) { tcx.edge_event.constrained_edge = edge; tcx.edge_event.right = (edge->p->x > edge->q->x); if (IsEdgeSideOfTriangle(*node->triangle, *edge->p, *edge->q)) { return; } // For now we will do all needed filling // TODO: integrate with flip process might give some better performance // but for now this avoid the issue with cases that needs both flips and fills FillEdgeEvent(tcx, edge, node); EdgeEvent(tcx, *edge->p, *edge->q, node->triangle, *edge->q); } void Sweep::EdgeEvent(SweepContext& tcx, Point& ep, Point& eq, Triangle* triangle, Point& point) { if (IsEdgeSideOfTriangle(*triangle, ep, eq)) { return; } Point* p1 = triangle->PointCCW(point); Orientation o1 = Orient2d(eq, *p1, ep); if (o1 == COLLINEAR) { //throw new RuntimeException( "EdgeEvent - Collinear not supported" ); throw(false); //assert(false); } Point* p2 = triangle->PointCW(point); Orientation o2 = Orient2d(eq, *p2, ep); if (o2 == COLLINEAR) { //throw new RuntimeException( "EdgeEvent - Collinear not supported" ); throw(false); //assert(false); } if (o1 == o2) { // Need to decide if we are rotating CW or CCW to get to a triangle // that will cross edge if (o1 == CW) { triangle = triangle->NeighborCCW(point); } else{ triangle = triangle->NeighborCW(point); } EdgeEvent(tcx, ep, eq, triangle, point); } else { // This triangle crosses constraint so lets flippin start! FlipEdgeEvent(tcx, ep, eq, triangle, point); } } bool Sweep::IsEdgeSideOfTriangle(Triangle& triangle, Point& ep, Point& eq) { int index = triangle.EdgeIndex(&ep, &eq); if (index != -1) { triangle.MarkConstrainedEdge(index); Triangle* t = triangle.GetNeighbor(index); if (t) { t->MarkConstrainedEdge(&ep, &eq); } return true; } return false; } Node& Sweep::NewFrontTriangle(SweepContext& tcx, Point& point, Node& node) { Triangle* triangle = new Triangle(point, *node.point, *node.next->point); triangle->MarkNeighbor(*node.triangle); tcx.AddToMap(triangle); Node* new_node = new Node(point); nodes_.push_back(new_node); new_node->next = node.next; new_node->prev = &node; node.next->prev = new_node; node.next = new_node; if (!Legalize(tcx, *triangle)) { tcx.MapTriangleToNodes(*triangle); } return *new_node; } /** * Adds a triangle to the advancing front to fill a hole. * @param tcx * @param node - middle node, that is the bottom of the hole */ void Sweep::Fill(SweepContext& tcx, Node& node) { Triangle* triangle = new Triangle(*node.prev->point, *node.point, *node.next->point); // TODO: should copy the constrained_edge value from neighbor triangles // for now constrained_edge values are copied during the legalize triangle->MarkNeighbor(*node.prev->triangle); triangle->MarkNeighbor(*node.triangle); tcx.AddToMap(triangle); // Update the advancing front node.prev->next = node.next; node.next->prev = node.prev; // If it was legalized the triangle has already been mapped if (!Legalize(tcx, *triangle)) { tcx.MapTriangleToNodes(*triangle); } } /** * Fills holes in the Advancing Front * * * @param tcx * @param n */ void Sweep::FillAdvancingFront(SweepContext& tcx, Node& n) { // Fill right holes Node* node = n.next; while (node->next) { double angle = HoleAngle(*node); if (angle > M_PI_2 || angle < -M_PI_2) break; Fill(tcx, *node); node = node->next; } // Fill left holes node = n.prev; while (node->prev) { double angle = HoleAngle(*node); if (angle > M_PI_2 || angle < -M_PI_2) break; Fill(tcx, *node); node = node->prev; } // Fill right basins if (n.next && n.next->next) { double angle = BasinAngle(n); if (angle < PI_3div4) { FillBasin(tcx, n); } } } double Sweep::BasinAngle(Node& node) { double ax = node.point->x - node.next->next->point->x; double ay = node.point->y - node.next->next->point->y; return atan2(ay, ax); } /** * * @param node - middle node * @return the angle between 3 front nodes */ double Sweep::HoleAngle(Node& node) { /* Complex plane * ab = cosA +i*sinA * ab = (ax + ay*i)(bx + by*i) = (ax*bx + ay*by) + i(ax*by-ay*bx) * atan2(y,x) computes the principal value of the argument function * applied to the complex number x+iy * Where x = ax*bx + ay*by * y = ax*by - ay*bx */ double ax = node.next->point->x - node.point->x; double ay = node.next->point->y - node.point->y; double bx = node.prev->point->x - node.point->x; double by = node.prev->point->y - node.point->y; return atan2(ax * by - ay * bx, ax * bx + ay * by); } /** * Returns true if triangle was legalized */ bool Sweep::Legalize(SweepContext& tcx, Triangle& t) { // To legalize a triangle we start by finding if any of the three edges // violate the Delaunay condition for (int i = 0; i < 3; i++) { if (t.delaunay_edge[i]) continue; Triangle* ot = t.GetNeighbor(i); if (ot) { Point* p = t.GetPoint(i); Point* op = ot->OppositePoint(t, *p); int oi = ot->Index(op); // If this is a Constrained Edge or a Delaunay Edge(only during recursive legalization) // then we should not try to legalize if (ot->constrained_edge[oi] || ot->delaunay_edge[oi]) { t.constrained_edge[i] = ot->constrained_edge[oi]; continue; } bool inside = Incircle(*p, *t.PointCCW(*p), *t.PointCW(*p), *op); if (inside) { // Lets mark this shared edge as Delaunay t.delaunay_edge[i] = true; ot->delaunay_edge[oi] = true; // Lets rotate shared edge one vertex CW to legalize it RotateTrianglePair(t, *p, *ot, *op); // We now got one valid Delaunay Edge shared by two triangles // This gives us 4 new edges to check for Delaunay // Make sure that triangle to node mapping is done only one time for a specific triangle bool not_legalized = !Legalize(tcx, t); if (not_legalized) { tcx.MapTriangleToNodes(t); } not_legalized = !Legalize(tcx, *ot); if (not_legalized) tcx.MapTriangleToNodes(*ot); // Reset the Delaunay edges, since they only are valid Delaunay edges // until we add a new triangle or point. // XXX: need to think about this. Can these edges be tried after we // return to previous recursive level? t.delaunay_edge[i] = false; ot->delaunay_edge[oi] = false; // If triangle have been legalized no need to check the other edges since // the recursive legalization will handles those so we can end here. return true; } } } return false; } /** * Requirement:
* 1. a,b and c form a triangle.
* 2. a and d is know to be on opposite side of bc
*
 *                a
 *                +
 *               / \
 *              /   \
 *            b/     \c
 *            +-------+
 *           /    d    \
 *          /           \
 * 
* Fact: d has to be in area B to have a chance to be inside the circle formed by * a,b and c
* d is outside B if orient2d(a,b,d) or orient2d(c,a,d) is CW
* This preknowledge gives us a way to optimize the incircle test * @param a - triangle point, opposite d * @param b - triangle point * @param c - triangle point * @param d - point opposite a * @return true if d is inside circle, false if on circle edge */ bool Sweep::Incircle(Point& pa, Point& pb, Point& pc, Point& pd) { double adx = pa.x - pd.x; double ady = pa.y - pd.y; double bdx = pb.x - pd.x; double bdy = pb.y - pd.y; double adxbdy = adx * bdy; double bdxady = bdx * ady; double oabd = adxbdy - bdxady; if (oabd <= 0) return false; double cdx = pc.x - pd.x; double cdy = pc.y - pd.y; double cdxady = cdx * ady; double adxcdy = adx * cdy; double ocad = cdxady - adxcdy; if (ocad <= 0) return false; double bdxcdy = bdx * cdy; double cdxbdy = cdx * bdy; double alift = adx * adx + ady * ady; double blift = bdx * bdx + bdy * bdy; double clift = cdx * cdx + cdy * cdy; double det = alift * (bdxcdy - cdxbdy) + blift * ocad + clift * oabd; return det > 0; } /** * Rotates a triangle pair one vertex CW *
 *       n2                    n2
 *  P +-----+             P +-----+
 *    | t  /|               |\  t |
 *    |   / |               | \   |
 *  n1|  /  |n3           n1|  \  |n3
 *    | /   |    after CW   |   \ |
 *    |/ oT |               | oT \|
 *    +-----+ oP            +-----+
 *       n4                    n4
 * 
*/ void Sweep::RotateTrianglePair(Triangle& t, Point& p, Triangle& ot, Point& op) { Triangle* n1, *n2, *n3, *n4; n1 = t.NeighborCCW(p); n2 = t.NeighborCW(p); n3 = ot.NeighborCCW(op); n4 = ot.NeighborCW(op); bool ce1, ce2, ce3, ce4; ce1 = t.GetConstrainedEdgeCCW(p); ce2 = t.GetConstrainedEdgeCW(p); ce3 = ot.GetConstrainedEdgeCCW(op); ce4 = ot.GetConstrainedEdgeCW(op); bool de1, de2, de3, de4; de1 = t.GetDelunayEdgeCCW(p); de2 = t.GetDelunayEdgeCW(p); de3 = ot.GetDelunayEdgeCCW(op); de4 = ot.GetDelunayEdgeCW(op); t.Legalize(p, op); ot.Legalize(op, p); // Remap delaunay_edge ot.SetDelunayEdgeCCW(p, de1); t.SetDelunayEdgeCW(p, de2); t.SetDelunayEdgeCCW(op, de3); ot.SetDelunayEdgeCW(op, de4); // Remap constrained_edge ot.SetConstrainedEdgeCCW(p, ce1); t.SetConstrainedEdgeCW(p, ce2); t.SetConstrainedEdgeCCW(op, ce3); ot.SetConstrainedEdgeCW(op, ce4); // Remap neighbors // XXX: might optimize the markNeighbor by keeping track of // what side should be assigned to what neighbor after the // rotation. Now mark neighbor does lots of testing to find // the right side. t.ClearNeighbors(); ot.ClearNeighbors(); if (n1) ot.MarkNeighbor(*n1); if (n2) t.MarkNeighbor(*n2); if (n3) t.MarkNeighbor(*n3); if (n4) ot.MarkNeighbor(*n4); t.MarkNeighbor(ot); } /** * Fills a basin that has formed on the Advancing Front to the right * of given node.
* First we decide a left,bottom and right node that forms the * boundaries of the basin. Then we do a reqursive fill. * * @param tcx * @param node - starting node, this or next node will be left node */ void Sweep::FillBasin(SweepContext& tcx, Node& node) { if (Orient2d(*node.point, *node.next->point, *node.next->next->point) == CCW) { tcx.basin.left_node = node.next->next; } else { tcx.basin.left_node = node.next; } // Find the bottom and right node tcx.basin.bottom_node = tcx.basin.left_node; while (tcx.basin.bottom_node->next && tcx.basin.bottom_node->point->y >= tcx.basin.bottom_node->next->point->y) { tcx.basin.bottom_node = tcx.basin.bottom_node->next; } if (tcx.basin.bottom_node == tcx.basin.left_node) { // No valid basin return; } tcx.basin.right_node = tcx.basin.bottom_node; while (tcx.basin.right_node->next && tcx.basin.right_node->point->y < tcx.basin.right_node->next->point->y) { tcx.basin.right_node = tcx.basin.right_node->next; } if (tcx.basin.right_node == tcx.basin.bottom_node) { // No valid basins return; } tcx.basin.width = tcx.basin.right_node->point->x - tcx.basin.left_node->point->x; tcx.basin.left_highest = tcx.basin.left_node->point->y > tcx.basin.right_node->point->y; FillBasinReq(tcx, tcx.basin.bottom_node); } /** * Recursive algorithm to fill a Basin with triangles * * @param tcx * @param node - bottom_node * @param cnt - counter used to alternate on even and odd numbers */ void Sweep::FillBasinReq(SweepContext& tcx, Node* node) { // if shallow stop filling if (IsShallow(tcx, *node)) { return; } Fill(tcx, *node); if (node->prev == tcx.basin.left_node && node->next == tcx.basin.right_node) { return; } else if (node->prev == tcx.basin.left_node) { Orientation o = Orient2d(*node->point, *node->next->point, *node->next->next->point); if (o == CW) { return; } node = node->next; } else if (node->next == tcx.basin.right_node) { Orientation o = Orient2d(*node->point, *node->prev->point, *node->prev->prev->point); if (o == CCW) { return; } node = node->prev; } else { // Continue with the neighbor node with lowest Y value if (node->prev->point->y < node->next->point->y) { node = node->prev; } else { node = node->next; } } FillBasinReq(tcx, node); } bool Sweep::IsShallow(SweepContext& tcx, Node& node) { double height; if (tcx.basin.left_highest) { height = tcx.basin.left_node->point->y - node.point->y; } else { height = tcx.basin.right_node->point->y - node.point->y; } // if shallow stop filling if (tcx.basin.width > height) { return true; } return false; } void Sweep::FillEdgeEvent(SweepContext& tcx, Edge* edge, Node* node) { if (tcx.edge_event.right) { FillRightAboveEdgeEvent(tcx, edge, node); } else { FillLeftAboveEdgeEvent(tcx, edge, node); } } void Sweep::FillRightAboveEdgeEvent(SweepContext& tcx, Edge* edge, Node* node) { while (node->next->point->x < edge->p->x) { // Check if next node is below the edge if (Orient2d(*edge->q, *node->next->point, *edge->p) == CCW) { FillRightBelowEdgeEvent(tcx, edge, *node); } else { node = node->next; } } } void Sweep::FillRightBelowEdgeEvent(SweepContext& tcx, Edge* edge, Node& node) { if (node.point->x < edge->p->x) { if (Orient2d(*node.point, *node.next->point, *node.next->next->point) == CCW) { // Concave FillRightConcaveEdgeEvent(tcx, edge, node); } else{ // Convex FillRightConvexEdgeEvent(tcx, edge, node); // Retry this one FillRightBelowEdgeEvent(tcx, edge, node); } } } void Sweep::FillRightConcaveEdgeEvent(SweepContext& tcx, Edge* edge, Node& node) { Fill(tcx, *node.next); if (node.next->point != edge->p) { // Next above or below edge? if (Orient2d(*edge->q, *node.next->point, *edge->p) == CCW) { // Below if (Orient2d(*node.point, *node.next->point, *node.next->next->point) == CCW) { // Next is concave FillRightConcaveEdgeEvent(tcx, edge, node); } else { // Next is convex } } } } void Sweep::FillRightConvexEdgeEvent(SweepContext& tcx, Edge* edge, Node& node) { // Next concave or convex? if (Orient2d(*node.next->point, *node.next->next->point, *node.next->next->next->point) == CCW) { // Concave FillRightConcaveEdgeEvent(tcx, edge, *node.next); } else{ // Convex // Next above or below edge? if (Orient2d(*edge->q, *node.next->next->point, *edge->p) == CCW) { // Below FillRightConvexEdgeEvent(tcx, edge, *node.next); } else{ // Above } } } void Sweep::FillLeftAboveEdgeEvent(SweepContext& tcx, Edge* edge, Node* node) { while (node->prev->point->x > edge->p->x) { // Check if next node is below the edge if (Orient2d(*edge->q, *node->prev->point, *edge->p) == CW) { FillLeftBelowEdgeEvent(tcx, edge, *node); } else { node = node->prev; } } } void Sweep::FillLeftBelowEdgeEvent(SweepContext& tcx, Edge* edge, Node& node) { if (node.point->x > edge->p->x) { if (Orient2d(*node.point, *node.prev->point, *node.prev->prev->point) == CW) { // Concave FillLeftConcaveEdgeEvent(tcx, edge, node); } else { // Convex FillLeftConvexEdgeEvent(tcx, edge, node); // Retry this one FillLeftBelowEdgeEvent(tcx, edge, node); } } } void Sweep::FillLeftConvexEdgeEvent(SweepContext& tcx, Edge* edge, Node& node) { // Next concave or convex? if (Orient2d(*node.prev->point, *node.prev->prev->point, *node.prev->prev->prev->point) == CW) { // Concave FillLeftConcaveEdgeEvent(tcx, edge, *node.prev); } else{ // Convex // Next above or below edge? if (Orient2d(*edge->q, *node.prev->prev->point, *edge->p) == CW) { // Below FillLeftConvexEdgeEvent(tcx, edge, *node.prev); } else{ // Above } } } void Sweep::FillLeftConcaveEdgeEvent(SweepContext& tcx, Edge* edge, Node& node) { Fill(tcx, *node.prev); if (node.prev->point != edge->p) { // Next above or below edge? if (Orient2d(*edge->q, *node.prev->point, *edge->p) == CW) { // Below if (Orient2d(*node.point, *node.prev->point, *node.prev->prev->point) == CW) { // Next is concave FillLeftConcaveEdgeEvent(tcx, edge, node); } else{ // Next is convex } } } } void Sweep::FlipEdgeEvent(SweepContext& tcx, Point& ep, Point& eq, Triangle* t, Point& p) { Triangle& ot = t->NeighborAcross(p); Point& op = *ot.OppositePoint(*t, p); if (&ot == NULL) { // If we want to integrate the fillEdgeEvent do it here // With current implementation we should never get here //throw new RuntimeException( "[BUG:FIXME] FLIP failed due to missing triangle"); throw(0); //assert(0); } if (InScanArea(p, *t->PointCCW(p), *t->PointCW(p), op)) { // Lets rotate shared edge one vertex CW RotateTrianglePair(*t, p, ot, op); tcx.MapTriangleToNodes(*t); tcx.MapTriangleToNodes(ot); if (p == eq && op == ep) { if (eq == *tcx.edge_event.constrained_edge->q && ep == *tcx.edge_event.constrained_edge->p) { t->MarkConstrainedEdge(&ep, &eq); ot.MarkConstrainedEdge(&ep, &eq); Legalize(tcx, *t); Legalize(tcx, ot); } else { // XXX: I think one of the triangles should be legalized here? } } else { Orientation o = Orient2d(eq, op, ep); t = &NextFlipTriangle(tcx, (int)o, *t, ot, p, op); FlipEdgeEvent(tcx, ep, eq, t, p); } } else { Point& newP = NextFlipPoint(ep, eq, ot, op); FlipScanEdgeEvent(tcx, ep, eq, *t, ot, newP); EdgeEvent(tcx, ep, eq, t, p); } } Triangle& Sweep::NextFlipTriangle(SweepContext& tcx, int o, Triangle& t, Triangle& ot, Point& p, Point& op) { if (o == CCW) { // ot is not crossing edge after flip int edge_index = ot.EdgeIndex(&p, &op); ot.delaunay_edge[edge_index] = true; Legalize(tcx, ot); ot.ClearDelunayEdges(); return t; } // t is not crossing edge after flip int edge_index = t.EdgeIndex(&p, &op); t.delaunay_edge[edge_index] = true; Legalize(tcx, t); t.ClearDelunayEdges(); return ot; } Point& Sweep::NextFlipPoint(Point& ep, Point& eq, Triangle& ot, Point& op) { Orientation o2d = Orient2d(eq, op, ep); if (o2d == CW) { // Right return *ot.PointCCW(op); } else if (o2d == CCW) { // Left return *ot.PointCW(op); } else{ //throw new RuntimeException("[Unsupported] Opposing point on constrained edge"); throw(0); //assert(0); } } void Sweep::FlipScanEdgeEvent(SweepContext& tcx, Point& ep, Point& eq, Triangle& flip_triangle, Triangle& t, Point& p) { Triangle& ot = t.NeighborAcross(p); Point& op = *ot.OppositePoint(t, p); if (&t.NeighborAcross(p) == NULL) { // If we want to integrate the fillEdgeEvent do it here // With current implementation we should never get here //throw new RuntimeException( "[BUG:FIXME] FLIP failed due to missing triangle"); throw(0); //assert(0); } if (InScanArea(eq, *flip_triangle.PointCCW(eq), *flip_triangle.PointCW(eq), op)) { // flip with new edge op->eq FlipEdgeEvent(tcx, eq, op, &ot, op); // TODO: Actually I just figured out that it should be possible to // improve this by getting the next ot and op before the the above // flip and continue the flipScanEdgeEvent here // set new ot and op here and loop back to inScanArea test // also need to set a new flip_triangle first // Turns out at first glance that this is somewhat complicated // so it will have to wait. } else{ Point& newP = NextFlipPoint(ep, eq, ot, op); FlipScanEdgeEvent(tcx, ep, eq, flip_triangle, ot, newP); } } Sweep::~Sweep() { // Clean up memory for(int i = 0; i < nodes_.size(); i++) { delete nodes_[i]; } } } therion/extern/poly2tri/sweep/sweep.h0000644000076400010400000001007211447322660021002 0ustar userAdministrators/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Sweep-line, Constrained Delauney Triangulation (CDT) See: Domiter, V. and * Zalik, B.(2008)'Sweep-line algorithm for constrained Delaunay triangulation', * International Journal of Geographical Information Science * * "FlipScan" Constrained Edge Algorithm invented by Thomas Åhlén, thahlen@gmail.com */ #ifndef SWEEP_H #define SWEEP_H #include namespace p2t { class SweepContext; struct Node; struct Point; struct Edge; class Triangle; class Sweep { public: void Triangulate(SweepContext& tcx); ~Sweep(); private: void SweepPoints(SweepContext& tcx); Node& PointEvent(SweepContext& tcx, Point& point); void EdgeEvent(SweepContext& tcx, Edge* edge, Node* node); void EdgeEvent(SweepContext& tcx, Point& ep, Point& eq, Triangle* triangle, Point& point); Node& NewFrontTriangle(SweepContext& tcx, Point& point, Node& node); void Fill(SweepContext& tcx, Node& node); bool Legalize(SweepContext& tcx, Triangle& t); bool Incircle(Point& pa, Point& pb, Point& pc, Point& pd); void RotateTrianglePair(Triangle& t, Point& p, Triangle& ot, Point& op); void FillAdvancingFront(SweepContext& tcx, Node& n); double HoleAngle(Node& node); double BasinAngle(Node& node); void FillBasin(SweepContext& tcx, Node& node); void FillBasinReq(SweepContext& tcx, Node* node); bool IsShallow(SweepContext& tcx, Node& node); bool IsEdgeSideOfTriangle(Triangle& triangle, Point& ep, Point& eq); void FillEdgeEvent(SweepContext& tcx, Edge* edge, Node* node); void FillRightAboveEdgeEvent(SweepContext& tcx, Edge* edge, Node* node); void FillRightBelowEdgeEvent(SweepContext& tcx, Edge* edge, Node& node); void FillRightConcaveEdgeEvent(SweepContext& tcx, Edge* edge, Node& node); void FillRightConvexEdgeEvent(SweepContext& tcx, Edge* edge, Node& node); void FillLeftAboveEdgeEvent(SweepContext& tcx, Edge* edge, Node* node); void FillLeftBelowEdgeEvent(SweepContext& tcx, Edge* edge, Node& node); void FillLeftConcaveEdgeEvent(SweepContext& tcx, Edge* edge, Node& node); void FillLeftConvexEdgeEvent(SweepContext& tcx, Edge* edge, Node& node); void FlipEdgeEvent(SweepContext& tcx, Point& ep, Point& eq, Triangle* t, Point& p); Triangle& NextFlipTriangle(SweepContext& tcx, int o, Triangle& t, Triangle& ot, Point& p, Point& op); Point& NextFlipPoint(Point& ep, Point& eq, Triangle& ot, Point& op); void FlipScanEdgeEvent(SweepContext& tcx, Point& ep, Point& eq, Triangle& flip_triangle, Triangle& t, Point& p); void FinalizationPolygon(SweepContext& tcx); std::vector nodes_; }; } #endif therion/extern/poly2tri/sweep/sweep_context.cc0000644000076400010400000001211611447322660022705 0ustar userAdministrators/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "sweep_context.h" #include #include "advancing_front.h" namespace p2t { SweepContext::SweepContext(std::vector polyline) { basin = Basin(); edge_event = EdgeEvent(); points_ = polyline; InitEdges(points_); } void SweepContext::AddHole(std::vector polyline) { InitEdges(polyline); for(int i = 0; i < polyline.size(); i++) { points_.push_back(polyline[i]); } } void SweepContext::AddPoint(Point* point) { points_.push_back(point); } std::vector SweepContext::GetTriangles() { return triangles_; } std::list SweepContext::GetMap() { return map_; } void SweepContext::InitTriangulation() { double xmax(points_[0]->x), xmin(points_[0]->x); double ymax(points_[0]->y), ymin(points_[0]->y); // Calculate bounds. for (int i = 0; i < points_.size(); i++) { Point& p = *points_[i]; if (p.x > xmax) xmax = p.x; if (p.x < xmin) xmin = p.x; if (p.y > ymax) ymax = p.y; if (p.y < ymin) ymin = p.y; } double dx = kAlpha * (xmax - xmin); double dy = kAlpha * (ymax - ymin); head_ = new Point(xmax + dx, ymin - dy); tail_ = new Point(xmin - dx, ymin - dy); // Sort points along y-axis std::sort(points_.begin(), points_.end(), cmp); } void SweepContext::InitEdges(std::vector polyline) { int num_points = polyline.size(); for (int i = 0; i < num_points; i++) { int j = i < num_points - 1 ? i + 1 : 0; edge_list.push_back(new Edge(*polyline[i], *polyline[j])); } } Point* SweepContext::GetPoint(const int& index) { return points_[index]; } void SweepContext::AddToMap(Triangle* triangle) { map_.push_back(triangle); } Node& SweepContext::LocateNode(Point& point) { // TODO implement search tree return *front_->LocateNode(point.x); } void SweepContext::CreateAdvancingFront(std::vector nodes) { // Initial triangle Triangle* triangle = new Triangle(*points_[0], *tail_, *head_); map_.push_back(triangle); af_head_ = new Node(*triangle->GetPoint(1), *triangle); af_middle_ = new Node(*triangle->GetPoint(0), *triangle); af_tail_ = new Node(*triangle->GetPoint(2)); front_ = new AdvancingFront(*af_head_, *af_tail_); // TODO: More intuitive if head is middles next and not previous? // so swap head and tail af_head_->next = af_middle_; af_middle_->next = af_tail_; af_middle_->prev = af_head_; af_tail_->prev = af_middle_; } void SweepContext::RemoveNode(Node* node) { delete node; } void SweepContext::MapTriangleToNodes(Triangle& t) { for (int i = 0; i < 3; i++) { if (!t.GetNeighbor(i)) { Node* n = front_->LocatePoint(t.PointCW(*t.GetPoint(i))); if (n) n->triangle = &t; } } } void SweepContext::RemoveFromMap(Triangle* triangle) { map_.remove(triangle); } void SweepContext::MeshClean(Triangle& triangle) { if (&triangle != NULL && !triangle.IsInterior()) { triangle.IsInterior(true); triangles_.push_back(&triangle); for (int i = 0; i < 3; i++) { if (!triangle.constrained_edge[i]) MeshClean(*triangle.GetNeighbor(i)); } } } SweepContext::~SweepContext() { // Clean up memory delete head_; delete tail_; delete front_; delete af_head_; delete af_middle_; delete af_tail_; typedef std::list type_list; for(type_list::iterator iter = map_.begin(); iter != map_.end(); ++iter) { Triangle* ptr = *iter; delete ptr; } for(int i = 0; i < edge_list.size(); i++) { delete edge_list[i]; } } } therion/extern/poly2tri/sweep/sweep_context.h0000644000076400010400000000777211575361406022566 0ustar userAdministrators/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef SWEEP_CONTEXT_H #define SWEEP_CONTEXT_H #include #include #include namespace p2t { // Inital triangle factor, seed triangle will extend 30% of // PointSet width to both left and right. const double kAlpha = 0.3; struct Point; class Triangle; struct Node; struct Edge; class AdvancingFront; class SweepContext { public: /// Constructor SweepContext(std::vector polyline); /// Destructor ~SweepContext(); void set_head(Point* p1); Point* head(); void set_tail(Point* p1); Point* tail(); int point_count(); Node& LocateNode(Point& point); void RemoveNode(Node* node); void CreateAdvancingFront(std::vector nodes); /// Try to map a node to all sides of this triangle that don't have a neighbor void MapTriangleToNodes(Triangle& t); void AddToMap(Triangle* triangle); Point* GetPoint(const int& index); Point* GetPoints(); void RemoveFromMap(Triangle* triangle); void AddHole(std::vector polyline); void AddPoint(Point* point); AdvancingFront* front(); void MeshClean(Triangle& triangle); std::vector GetTriangles(); std::list GetMap(); std::vector edge_list; struct Basin { Node* left_node; Node* bottom_node; Node* right_node; double width; bool left_highest; Basin() : left_node(NULL), bottom_node(NULL), right_node(NULL), width(0.0), left_highest(false) { } void Clear() { left_node = NULL; bottom_node = NULL; right_node = NULL; width = 0.0; left_highest = false; } }; struct EdgeEvent { Edge* constrained_edge; bool right; EdgeEvent() : constrained_edge(NULL), right(false) { } }; Basin basin; EdgeEvent edge_event; private: friend class Sweep; std::vector triangles_; std::list map_; std::vector points_; // Advancing front AdvancingFront* front_; // head point used with advancing front Point* head_; // tail point used with advancing front Point* tail_; Node *af_head_, *af_middle_, *af_tail_; void InitTriangulation(); void InitEdges(std::vector polyline); }; inline AdvancingFront* SweepContext::front() { return front_; } inline int SweepContext::point_count() { return points_.size(); } inline void SweepContext::set_head(Point* p1) { head_ = p1; } inline Point* SweepContext::head() { return head_; } inline void SweepContext::set_tail(Point* p1) { tail_ = p1; } inline Point* SweepContext::tail() { return tail_; } } #endif therion/extern/proj4/0000755000076400010400000000000012270034353015627 5ustar userAdministratorstherion/extern/proj4/aasincos.c0000644000076400010400000000120511137333414017572 0ustar userAdministrators/* arc sin, cosine, tan2 and sqrt that will NOT fail */ #include #define ONE_TOL 1.00000000000001 #define TOL 0.000000001 #define ATOL 1e-50 double aasin(double v) { double av; if ((av = fabs(v)) >= 1.) { if (av > ONE_TOL) pj_errno = -19; return (v < 0. ? -HALFPI : HALFPI); } return asin(v); } double aacos(double v) { double av; if ((av = fabs(v)) >= 1.) { if (av > ONE_TOL) pj_errno = -19; return (v < 0. ? PI : 0.); } return acos(v); } double asqrt(double v) { return ((v <= 0) ? 0. : sqrt(v)); } double aatan2(double n, double d) { return ((fabs(n) < ATOL && fabs(d) < ATOL) ? 0. : atan2(n,d)); } therion/extern/proj4/adjlon.c0000644000076400010400000000070711137333420017244 0ustar userAdministrators/* reduce argument to range +/- PI */ #include #include #define SPI 3.14159265359 #define TWOPI 6.2831853071795864769 #define ONEPI 3.14159265358979323846 double adjlon (double lon) { if (fabs(lon) <= SPI) return( lon ); lon += ONEPI; /* adjust to 0..2pi rad */ lon -= TWOPI * floor(lon / TWOPI); /* remove integral # of 'revolutions'*/ lon -= ONEPI; /* adjust back to -pi..pi rad */ return( lon ); } therion/extern/proj4/bch2bps.c0000644000076400010400000000702011137333424017317 0ustar userAdministrators/* convert bivariate w Chebyshev series to w Power series */ #include /* basic support procedures */ static void /* clear vector to zero */ clear(projUV *p, int n) { static const projUV c = {0., 0.}; while (n--) *p++ = c; } static void /* clear matrix rows to zero */ bclear(projUV **p, int n, int m) { while (n--) clear(*p++, m); } static void /* move vector */ bmove(projUV *a, projUV *b, int n) { while (n--) *a++ = *b++; } static void /* a <- m * b - c */ submop(projUV *a, double m, projUV *b, projUV *c, int n) { while (n--) { a->u = m * b->u - c->u; a++->v = m * b++->v - c++->v; } } static void /* a <- b - c */ subop(projUV *a, projUV *b, projUV *c, int n) { while (n--) { a->u = b->u - c->u; a++->v = b++->v - c++->v; } } static void /* multiply vector a by scalar m */ dmult(projUV *a, double m, int n) { while(n--) { a->u *= m; a->v *= m; ++a; } } static void /* row adjust a[] <- a[] - m * b[] */ dadd(projUV *a, projUV *b, double m, int n) { while(n--) { a->u -= m * b->u; a++->v -= m * b++->v; } } static void /* convert row to pover series */ rows(projUV *c, projUV *d, int n) { projUV sv, *dd; int j, k; dd = (projUV *)vector1(n-1, sizeof(projUV)); sv.u = sv.v = 0.; for (j = 0; j < n; ++j) d[j] = dd[j] = sv; d[0] = c[n-1]; for (j = n-2; j >= 1; --j) { for (k = n-j; k >= 1; --k) { sv = d[k]; d[k].u = 2. * d[k-1].u - dd[k].u; d[k].v = 2. * d[k-1].v - dd[k].v; dd[k] = sv; } sv = d[0]; d[0].u = -dd[0].u + c[j].u; d[0].v = -dd[0].v + c[j].v; dd[0] = sv; } for (j = n-1; j >= 1; --j) { d[j].u = d[j-1].u - dd[j].u; d[j].v = d[j-1].v - dd[j].v; } d[0].u = -dd[0].u + .5 * c[0].u; d[0].v = -dd[0].v + .5 * c[0].v; pj_dalloc(dd); } static void /* convert columns to power series */ cols(projUV **c, projUV **d, int nu, int nv) { projUV *sv, **dd; int j, k; dd = (projUV **)vector2(nu, nv, sizeof(projUV)); sv = (projUV *)vector1(nv, sizeof(projUV)); bclear(d, nu, nv); bclear(dd, nu, nv); bmove(d[0], c[nu-1], nv); for (j = nu-2; j >= 1; --j) { for (k = nu-j; k >= 1; --k) { bmove(sv, d[k], nv); submop(d[k], 2., d[k-1], dd[k], nv); bmove(dd[k], sv, nv); } bmove(sv, d[0], nv); subop(d[0], c[j], dd[0], nv); bmove(dd[0], sv, nv); } for (j = nu-1; j >= 1; --j) subop(d[j], d[j-1], dd[j], nv); submop(d[0], .5, c[0], dd[0], nv); freev2((void **) dd, nu); pj_dalloc(sv); } static void /* row adjust for range -1 to 1 to a to b */ rowshft(double a, double b, projUV *d, int n) { int k, j; double fac, cnst; cnst = 2. / (b - a); fac = cnst; for (j = 1; j < n; ++j) { d[j].u *= fac; d[j].v *= fac; fac *= cnst; } cnst = .5 * (a + b); for (j = 0; j <= n-2; ++j) for (k = n - 2; k >= j; --k) { d[k].u -= cnst * d[k+1].u; d[k].v -= cnst * d[k+1].v; } } static void /* column adjust for range -1 to 1 to a to b */ colshft(double a, double b, projUV **d, int n, int m) { int k, j; double fac, cnst; cnst = 2. / (b - a); fac = cnst; for (j = 1; j < n; ++j) { dmult(d[j], fac, m); fac *= cnst; } cnst = .5 * (a + b); for (j = 0; j <= n-2; ++j) for (k = n - 2; k >= j; --k) dadd(d[k], d[k+1], cnst, m); } int /* entry point */ bch2bps(projUV a, projUV b, projUV **c, int nu, int nv) { projUV **d; int i; if (nu < 1 || nv < 1 || !(d = (projUV **)vector2(nu, nv, sizeof(projUV)))) return 0; /* do rows to power series */ for (i = 0; i < nu; ++i) { rows(c[i], d[i], nv); rowshft(a.v, b.v, d[i], nv); } /* do columns to power series */ cols(d, c, nu, nv); colshft(a.u, b.u, c, nu, nv); freev2((void **) d, nu); return 1; } therion/extern/proj4/bchgen.c0000644000076400010400000000254511137333426017233 0ustar userAdministrators/* generate double bivariate Chebychev polynomial */ #include int bchgen(projUV a, projUV b, int nu, int nv, projUV **f, projUV(*func)(projUV)) { int i, j, k; projUV arg, *t, bma, bpa, *c; double d, fac; bma.u = 0.5 * (b.u - a.u); bma.v = 0.5 * (b.v - a.v); bpa.u = 0.5 * (b.u + a.u); bpa.v = 0.5 * (b.v + a.v); for ( i = 0; i < nu; ++i) { arg.u = cos(PI * (i + 0.5) / nu) * bma.u + bpa.u; for ( j = 0; j < nv; ++j) { arg.v = cos(PI * (j + 0.5) / nv) * bma.v + bpa.v; f[i][j] = (*func)(arg); if ((f[i][j]).u == HUGE_VAL) return(1); } } if (!(c = (projUV *) vector1(nu, sizeof(projUV)))) return 1; fac = 2. / nu; for ( j = 0; j < nv ; ++j) { for ( i = 0; i < nu; ++i) { arg.u = arg.v = 0.; for (k = 0; k < nu; ++k) { d = cos(PI * i * (k + .5) / nu); arg.u += f[k][j].u * d; arg.v += f[k][j].v * d; } arg.u *= fac; arg.v *= fac; c[i] = arg; } for (i = 0; i < nu; ++i) f[i][j] = c[i]; } pj_dalloc(c); if (!(c = (projUV*) vector1(nv, sizeof(projUV)))) return 1; fac = 2. / nv; for ( i = 0; i < nu; ++i) { t = f[i]; for (j = 0; j < nv; ++j) { arg.u = arg.v = 0.; for (k = 0; k < nv; ++k) { d = cos(PI * j * (k + .5) / nv); arg.u += t[k].u * d; arg.v += t[k].v * d; } arg.u *= fac; arg.v *= fac; c[j] = arg; } f[i] = c; c = t; } pj_dalloc(c); return(0); } therion/extern/proj4/biveval.c0000644000076400010400000000362011137333432017425 0ustar userAdministrators/* procedures for evaluating Tseries */ # include # define NEAR_ONE 1.00001 static double ceval(struct PW_COEF *C, int n, projUV w, projUV w2) { double d=0, dd=0, vd, vdd, tmp, *c; int j; for (C += n ; n-- ; --C ) { if (j = C->m) { vd = vdd = 0.; for (c = C->c + --j; j ; --j ) { vd = w2.v * (tmp = vd) - vdd + *c--; vdd = tmp; } d = w2.u * (tmp = d) - dd + w.v * vd - vdd + 0.5 * *c; } else d = w2.u * (tmp = d) - dd; dd = tmp; } if (j = C->m) { vd = vdd = 0.; for (c = C->c + --j; j ; --j ) { vd = w2.v * (tmp = vd) - vdd + *c--; vdd = tmp; } return (w.u * d - dd + 0.5 * ( w.v * vd - vdd + 0.5 * *c )); } else return (w.u * d - dd); } projUV /* bivariate Chebyshev polynomial entry point */ bcheval(projUV in, Tseries *T) { projUV w2, w; projUV out; /* scale to +-1 */ w.u = ( in.u + in.u - T->a.u ) * T->b.u; w.v = ( in.v + in.v - T->a.v ) * T->b.v; if (fabs(w.u) > NEAR_ONE || fabs(w.v) > NEAR_ONE) { out.u = out.v = HUGE_VAL; pj_errno = -36; } else { /* double evaluation */ w2.u = w.u + w.u; w2.v = w.v + w.v; out.u = ceval(T->cu, T->mu, w, w2); out.v = ceval(T->cv, T->mv, w, w2); } return out; } projUV /* bivariate power polynomial entry point */ bpseval(projUV in, Tseries *T) { projUV out; double *c, row; int i, m; out.u = out.v = 0.; for (i = T->mu; i >= 0; --i) { row = 0.; if (m = T->cu[i].m) { c = T->cu[i].c + m; while (m--) row = *--c + in.v * row; } out.u = row + in.u * out.u; } for (i = T->mv; i >= 0; --i) { row = 0.; if (m = T->cv[i].m) { c = T->cv[i].c + m; while (m--) row = *--c + in.v * row; } out.v = row + in.u * out.v; } return out; } projUV /* general entry point selecting evaluation mode */ biveval(projUV in, Tseries *T) { if (T->power) { return bpseval(in, T); } else { return bcheval(in, T); } } therion/extern/proj4/dmstor.c0000644000076400010400000000433511137333434017313 0ustar userAdministrators/* Convert DMS string to radians */ #include #include #include static double proj_strtod(char *nptr, char **endptr); /* following should be sufficient for all but the rediculous */ #define MAX_WORK 64 static const char *sym = "NnEeSsWw"; static const double vm[] = { .0174532925199433, .0002908882086657216, .0000048481368110953599 }; double dmstor(const char *is, char **rs) { int sign, n, nl; char *p, *s, work[MAX_WORK]; double v, tv; if (rs) *rs = (char *)is; /* copy sting into work space */ while (isspace(sign = *is)) ++is; for (n = MAX_WORK, s = work, p = (char *)is; isgraph(*p) && --n ; ) *s++ = *p++; *s = '\0'; /* it is possible that a really odd input (like lots of leading zeros) could be truncated in copying into work. But ... */ sign = *(s = work); if (sign == '+' || sign == '-') s++; else sign = '+'; for (v = 0., nl = 0 ; nl < 3 ; nl = n + 1 ) { if (!(isdigit(*s) || *s == '.')) break; if ((tv = proj_strtod(s, &s)) == HUGE_VAL) return tv; switch (*s) { case 'D': case 'd': n = 0; break; case '\'': n = 1; break; case '"': n = 2; break; case 'r': case 'R': if (nl) { pj_errno = -16; return HUGE_VAL; } ++s; v = tv; goto skip; default: v += tv * vm[nl]; skip: n = 4; continue; } if (n < nl) { pj_errno = -16; return HUGE_VAL; } v += tv * vm[n]; ++s; } /* postfix sign */ if (*s && (p = strchr(sym, *s))) { sign = (p - sym) >= 4 ? '-' : '+'; ++s; } if (sign == '-') v = -v; if (rs) /* return point of next char after valid string */ *rs = (char *)is + (s - work); return v; } static double proj_strtod(char *nptr, char **endptr) { char c, *cp = nptr; double result; /* * Scan for characters which cause problems with VC++ strtod() */ while ((c = *cp) != '\0') { if (c == 'd' || c == 'D') { /* * Found one, so NUL it out, call strtod(), * then restore it and return */ *cp = '\0'; result = strtod(nptr, endptr); *cp = c; return result; } ++cp; } /* no offending characters, just handle normally */ return strtod(nptr, endptr); } therion/extern/proj4/emess.c0000644000076400010400000000260511137333440017112 0ustar userAdministrators/* Error message processing */ #ifdef _MSC_VER # ifndef _CRT_SECURE_NO_DEPRECATE # define _CRT_SECURE_NO_DEPRECATE # endif # ifndef _CRT_NONSTDC_NO_DEPRECATE # define _CRT_NONSTDC_NO_DEPRECATE # endif #endif #include #include #include #include #include #include #define EMESS_ROUTINE #include "emess.h" void emess(int code, char *fmt, ...) { va_list args; va_start(args, fmt); /* prefix program name, if given */ if (fmt != NULL) (void)fprintf(stderr,"%s\n<%s>: ",pj_get_release(), emess_dat.Prog_name); /* print file name and line, if given */ if (emess_dat.File_name != NULL && *emess_dat.File_name) { (void)fprintf(stderr,"while processing file: %s", emess_dat.File_name); if (emess_dat.File_line > 0) (void)fprintf(stderr,", line %d\n", emess_dat.File_line); else (void)fputc('\n', stderr); } else putc('\n', stderr); /* if |code|==2, print errno code data */ if (code == 2 || code == -2) (void)fprintf(stderr, "Sys errno: %d: %s\n", errno, #ifdef HAVE_STRERROR strerror(errno)); #else ""); #endif /* post remainder of call data */ (void)vfprintf(stderr,fmt,args); va_end(args); /* die if code positive */ if (code > 0) { (void)fputs("\nprogram abnormally terminated\n", stderr); exit(code); } else putc('\n', stderr); } therion/extern/proj4/emess.h0000644000076400010400000000130711076404756017130 0ustar userAdministrators/* Error message processing header file */ #ifndef EMESS_H #define EMESS_H #ifndef lint static char EMESS_H_ID[] = "@(#)emess.h 4.1 93/03/08 GIE REL"; #endif struct EMESS { char *File_name, /* input file name */ *Prog_name; /* name of program */ int File_line; /* approximate line read where error occured */ }; #ifdef EMESS_ROUTINE /* use type */ /* for emess procedure */ struct EMESS emess_dat = { (char *)0, (char *)0, 0 }; #ifdef sun /* Archaic SunOs 4.1.1, etc. */ extern char *sys_errlist[]; #define strerror(n) (sys_errlist[n]) #endif #else /* for for calling procedures */ extern struct EMESS emess_dat; void emess(int, char *, ...); #endif /* use type */ #endif /* end EMESS_H */ therion/extern/proj4/geocent.c0000644000076400010400000003527111130501332017415 0ustar userAdministrators/***************************************************************************/ /* RSC IDENTIFIER: GEOCENTRIC * * ABSTRACT * * This component provides conversions between Geodetic coordinates (latitude, * longitude in radians and height in meters) and Geocentric coordinates * (X, Y, Z) in meters. * * ERROR HANDLING * * This component checks parameters for valid values. If an invalid value * is found, the error code is combined with the current error code using * the bitwise or. This combining allows multiple error codes to be * returned. The possible error codes are: * * GEOCENT_NO_ERROR : No errors occurred in function * GEOCENT_LAT_ERROR : Latitude out of valid range * (-90 to 90 degrees) * GEOCENT_LON_ERROR : Longitude out of valid range * (-180 to 360 degrees) * GEOCENT_A_ERROR : Semi-major axis lessthan or equal to zero * GEOCENT_B_ERROR : Semi-minor axis lessthan or equal to zero * GEOCENT_A_LESS_B_ERROR : Semi-major axis less than semi-minor axis * * * REUSE NOTES * * GEOCENTRIC is intended for reuse by any application that performs * coordinate conversions between geodetic coordinates and geocentric * coordinates. * * * REFERENCES * * An Improved Algorithm for Geocentric to Geodetic Coordinate Conversion, * Ralph Toms, February 1996 UCRL-JC-123138. * * Further information on GEOCENTRIC can be found in the Reuse Manual. * * GEOCENTRIC originated from : U.S. Army Topographic Engineering Center * Geospatial Information Division * 7701 Telegraph Road * Alexandria, VA 22310-3864 * * LICENSES * * None apply to this component. * * RESTRICTIONS * * GEOCENTRIC has no restrictions. * * ENVIRONMENT * * GEOCENTRIC was tested and certified in the following environments: * * 1. Solaris 2.5 with GCC version 2.8.1 * 2. Windows 95 with MS Visual C++ version 6 * * MODIFICATIONS * * Date Description * ---- ----------- * 25-02-97 Original Code * */ /***************************************************************************/ /* * INCLUDES */ #include #include "geocent.h" /* * math.h - is needed for calls to sin, cos, tan and sqrt. * geocent.h - is needed for Error codes and prototype error checking. */ /***************************************************************************/ /* * DEFINES */ #define PI 3.14159265358979323e0 #define PI_OVER_2 (PI / 2.0e0) #define FALSE 0 #define TRUE 1 #define COS_67P5 0.38268343236508977 /* cosine of 67.5 degrees */ #define AD_C 1.0026000 /* Toms region 1 constant */ /***************************************************************************/ /* * FUNCTIONS */ long pj_Set_Geocentric_Parameters (GeocentricInfo *gi, double a, double b) { /* BEGIN Set_Geocentric_Parameters */ /* * The function Set_Geocentric_Parameters receives the ellipsoid parameters * as inputs and sets the corresponding state variables. * * a : Semi-major axis, in meters. (input) * b : Semi-minor axis, in meters. (input) */ long Error_Code = GEOCENT_NO_ERROR; if (a <= 0.0) Error_Code |= GEOCENT_A_ERROR; if (b <= 0.0) Error_Code |= GEOCENT_B_ERROR; if (a < b) Error_Code |= GEOCENT_A_LESS_B_ERROR; if (!Error_Code) { gi->Geocent_a = a; gi->Geocent_b = b; gi->Geocent_a2 = a * a; gi->Geocent_b2 = b * b; gi->Geocent_e2 = (gi->Geocent_a2 - gi->Geocent_b2) / gi->Geocent_a2; gi->Geocent_ep2 = (gi->Geocent_a2 - gi->Geocent_b2) / gi->Geocent_b2; } return (Error_Code); } /* END OF Set_Geocentric_Parameters */ void pj_Get_Geocentric_Parameters (GeocentricInfo *gi, double *a, double *b) { /* BEGIN Get_Geocentric_Parameters */ /* * The function Get_Geocentric_Parameters returns the ellipsoid parameters * to be used in geocentric coordinate conversions. * * a : Semi-major axis, in meters. (output) * b : Semi-minor axis, in meters. (output) */ *a = gi->Geocent_a; *b = gi->Geocent_b; } /* END OF Get_Geocentric_Parameters */ long pj_Convert_Geodetic_To_Geocentric (GeocentricInfo *gi, double Latitude, double Longitude, double Height, double *X, double *Y, double *Z) { /* BEGIN Convert_Geodetic_To_Geocentric */ /* * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z), * according to the current ellipsoid parameters. * * Latitude : Geodetic latitude in radians (input) * Longitude : Geodetic longitude in radians (input) * Height : Geodetic height, in meters (input) * X : Calculated Geocentric X coordinate, in meters (output) * Y : Calculated Geocentric Y coordinate, in meters (output) * Z : Calculated Geocentric Z coordinate, in meters (output) * */ long Error_Code = GEOCENT_NO_ERROR; double Rn; /* Earth radius at location */ double Sin_Lat; /* sin(Latitude) */ double Sin2_Lat; /* Square of sin(Latitude) */ double Cos_Lat; /* cos(Latitude) */ /* ** Don't blow up if Latitude is just a little out of the value ** range as it may just be a rounding issue. Also removed longitude ** test, it should be wrapped by cos() and sin(). NFW for PROJ.4, Sep/2001. */ if( Latitude < -PI_OVER_2 && Latitude > -1.001 * PI_OVER_2 ) Latitude = -PI_OVER_2; else if( Latitude > PI_OVER_2 && Latitude < 1.001 * PI_OVER_2 ) Latitude = PI_OVER_2; else if ((Latitude < -PI_OVER_2) || (Latitude > PI_OVER_2)) { /* Latitude out of range */ Error_Code |= GEOCENT_LAT_ERROR; } if (!Error_Code) { /* no errors */ if (Longitude > PI) Longitude -= (2*PI); Sin_Lat = sin(Latitude); Cos_Lat = cos(Latitude); Sin2_Lat = Sin_Lat * Sin_Lat; Rn = gi->Geocent_a / (sqrt(1.0e0 - gi->Geocent_e2 * Sin2_Lat)); *X = (Rn + Height) * Cos_Lat * cos(Longitude); *Y = (Rn + Height) * Cos_Lat * sin(Longitude); *Z = ((Rn * (1 - gi->Geocent_e2)) + Height) * Sin_Lat; } return (Error_Code); } /* END OF Convert_Geodetic_To_Geocentric */ /* * The function Convert_Geocentric_To_Geodetic converts geocentric * coordinates (X, Y, Z) to geodetic coordinates (latitude, longitude, * and height), according to the current ellipsoid parameters. * * X : Geocentric X coordinate, in meters. (input) * Y : Geocentric Y coordinate, in meters. (input) * Z : Geocentric Z coordinate, in meters. (input) * Latitude : Calculated latitude value in radians. (output) * Longitude : Calculated longitude value in radians. (output) * Height : Calculated height value, in meters. (output) */ #define USE_ITERATIVE_METHOD void pj_Convert_Geocentric_To_Geodetic (GeocentricInfo *gi, double X, double Y, double Z, double *Latitude, double *Longitude, double *Height) { /* BEGIN Convert_Geocentric_To_Geodetic */ #if !defined(USE_ITERATIVE_METHOD) /* * The method used here is derived from 'An Improved Algorithm for * Geocentric to Geodetic Coordinate Conversion', by Ralph Toms, Feb 1996 */ /* Note: Variable names follow the notation used in Toms, Feb 1996 */ double W; /* distance from Z axis */ double W2; /* square of distance from Z axis */ double T0; /* initial estimate of vertical component */ double T1; /* corrected estimate of vertical component */ double S0; /* initial estimate of horizontal component */ double S1; /* corrected estimate of horizontal component */ double Sin_B0; /* sin(B0), B0 is estimate of Bowring aux variable */ double Sin3_B0; /* cube of sin(B0) */ double Cos_B0; /* cos(B0) */ double Sin_p1; /* sin(phi1), phi1 is estimated latitude */ double Cos_p1; /* cos(phi1) */ double Rn; /* Earth radius at location */ double Sum; /* numerator of cos(phi1) */ int At_Pole; /* indicates location is in polar region */ At_Pole = FALSE; if (X != 0.0) { *Longitude = atan2(Y,X); } else { if (Y > 0) { *Longitude = PI_OVER_2; } else if (Y < 0) { *Longitude = -PI_OVER_2; } else { At_Pole = TRUE; *Longitude = 0.0; if (Z > 0.0) { /* north pole */ *Latitude = PI_OVER_2; } else if (Z < 0.0) { /* south pole */ *Latitude = -PI_OVER_2; } else { /* center of earth */ *Latitude = PI_OVER_2; *Height = -Geocent_b; return; } } } W2 = X*X + Y*Y; W = sqrt(W2); T0 = Z * AD_C; S0 = sqrt(T0 * T0 + W2); Sin_B0 = T0 / S0; Cos_B0 = W / S0; Sin3_B0 = Sin_B0 * Sin_B0 * Sin_B0; T1 = Z + gi->Geocent_b * gi->Geocent_ep2 * Sin3_B0; Sum = W - gi->Geocent_a * gi->Geocent_e2 * Cos_B0 * Cos_B0 * Cos_B0; S1 = sqrt(T1*T1 + Sum * Sum); Sin_p1 = T1 / S1; Cos_p1 = Sum / S1; Rn = gi->Geocent_a / sqrt(1.0 - gi->Geocent_e2 * Sin_p1 * Sin_p1); if (Cos_p1 >= COS_67P5) { *Height = W / Cos_p1 - Rn; } else if (Cos_p1 <= -COS_67P5) { *Height = W / -Cos_p1 - Rn; } else { *Height = Z / Sin_p1 + Rn * (gi->Geocent_e2 - 1.0); } if (At_Pole == FALSE) { *Latitude = atan(Sin_p1 / Cos_p1); } #else /* defined(USE_ITERATIVE_METHOD) */ /* * Reference... * ============ * Wenzel, H.-G.(1985): Hochauflösende Kugelfunktionsmodelle für * das Gravitationspotential der Erde. Wiss. Arb. Univ. Hannover * Nr. 137, p. 130-131. * Programmed by GGA- Leibniz-Institue of Applied Geophysics * Stilleweg 2 * D-30655 Hannover * Federal Republic of Germany * Internet: www.gga-hannover.de * * Hannover, March 1999, April 2004. * see also: comments in statements * remarks: * Mathematically exact and because of symmetry of rotation-ellipsoid, * each point (X,Y,Z) has at least two solutions (Latitude1,Longitude1,Height1) and * (Latitude2,Longitude2,Height2). Is point=(0.,0.,Z) (P=0.), so you get even * four solutions, every two symmetrical to the semi-minor axis. * Here Height1 and Height2 have at least a difference in order of * radius of curvature (e.g. (0,0,b)=> (90.,0.,0.) or (-90.,0.,-2b); * (a+100.)*(sqrt(2.)/2.,sqrt(2.)/2.,0.) => (0.,45.,100.) or * (0.,225.,-(2a+100.))). * The algorithm always computes (Latitude,Longitude) with smallest |Height|. * For normal computations, that means |Height|<10000.m, algorithm normally * converges after to 2-3 steps!!! * But if |Height| has the amount of length of ellipsoid's axis * (e.g. -6300000.m), algorithm needs about 15 steps. */ /* local defintions and variables */ /* end-criterium of loop, accuracy of sin(Latitude) */ #define genau 1.E-12 #define genau2 (genau*genau) #define maxiter 30 double P; /* distance between semi-minor axis and location */ double RR; /* distance between center and location */ double CT; /* sin of geocentric latitude */ double ST; /* cos of geocentric latitude */ double RX; double RK; double RN; /* Earth radius at location */ double CPHI0; /* cos of start or old geodetic latitude in iterations */ double SPHI0; /* sin of start or old geodetic latitude in iterations */ double CPHI; /* cos of searched geodetic latitude */ double SPHI; /* sin of searched geodetic latitude */ double SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */ int At_Pole; /* indicates location is in polar region */ int iter; /* # of continous iteration, max. 30 is always enough (s.a.) */ At_Pole = FALSE; P = sqrt(X*X+Y*Y); RR = sqrt(X*X+Y*Y+Z*Z); /* special cases for latitude and longitude */ if (P/gi->Geocent_a < genau) { /* special case, if P=0. (X=0., Y=0.) */ At_Pole = TRUE; *Longitude = 0.; /* if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis * of ellipsoid (=center of mass), Latitude becomes PI/2 */ if (RR/gi->Geocent_a < genau) { *Latitude = PI_OVER_2; *Height = -gi->Geocent_b; return ; } } else { /* ellipsoidal (geodetic) longitude * interval: -PI < Longitude <= +PI */ *Longitude=atan2(Y,X); } /* -------------------------------------------------------------- * Following iterative algorithm was developped by * "Institut für Erdmessung", University of Hannover, July 1988. * Internet: www.ife.uni-hannover.de * Iterative computation of CPHI,SPHI and Height. * Iteration of CPHI and SPHI to 10**-12 radian resp. * 2*10**-7 arcsec. * -------------------------------------------------------------- */ CT = Z/RR; ST = P/RR; RX = 1.0/sqrt(1.0-gi->Geocent_e2*(2.0-gi->Geocent_e2)*ST*ST); CPHI0 = ST*(1.0-gi->Geocent_e2)*RX; SPHI0 = CT*RX; iter = 0; /* loop to find sin(Latitude) resp. Latitude * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */ do { iter++; RN = gi->Geocent_a/sqrt(1.0-gi->Geocent_e2*SPHI0*SPHI0); /* ellipsoidal (geodetic) height */ *Height = P*CPHI0+Z*SPHI0-RN*(1.0-gi->Geocent_e2*SPHI0*SPHI0); RK = gi->Geocent_e2*RN/(RN+*Height); RX = 1.0/sqrt(1.0-RK*(2.0-RK)*ST*ST); CPHI = ST*(1.0-RK)*RX; SPHI = CT*RX; SDPHI = SPHI*CPHI0-CPHI*SPHI0; CPHI0 = CPHI; SPHI0 = SPHI; } while (SDPHI*SDPHI > genau2 && iter < maxiter); /* ellipsoidal (geodetic) latitude */ *Latitude=atan(SPHI/fabs(CPHI)); return; #endif /* defined(USE_ITERATIVE_METHOD) */ } /* END OF Convert_Geocentric_To_Geodetic */ therion/extern/proj4/geocent.h0000644000076400010400000001421311076404756017440 0ustar userAdministrators#ifndef GEOCENT_H #define GEOCENT_H /***************************************************************************/ /* RSC IDENTIFIER: GEOCENTRIC * * ABSTRACT * * This component provides conversions between Geodetic coordinates (latitude, * longitude in radians and height in meters) and Geocentric coordinates * (X, Y, Z) in meters. * * ERROR HANDLING * * This component checks parameters for valid values. If an invalid value * is found, the error code is combined with the current error code using * the bitwise or. This combining allows multiple error codes to be * returned. The possible error codes are: * * GEOCENT_NO_ERROR : No errors occurred in function * GEOCENT_LAT_ERROR : Latitude out of valid range * (-90 to 90 degrees) * GEOCENT_LON_ERROR : Longitude out of valid range * (-180 to 360 degrees) * GEOCENT_A_ERROR : Semi-major axis less than or equal to zero * GEOCENT_B_ERROR : Semi-minor axis less than or equal to zero * GEOCENT_A_LESS_B_ERROR : Semi-major axis less than semi-minor axis * * * REUSE NOTES * * GEOCENTRIC is intended for reuse by any application that performs * coordinate conversions between geodetic coordinates and geocentric * coordinates. * * * REFERENCES * * An Improved Algorithm for Geocentric to Geodetic Coordinate Conversion, * Ralph Toms, February 1996 UCRL-JC-123138. * * Further information on GEOCENTRIC can be found in the Reuse Manual. * * GEOCENTRIC originated from : U.S. Army Topographic Engineering Center * Geospatial Information Division * 7701 Telegraph Road * Alexandria, VA 22310-3864 * * LICENSES * * None apply to this component. * * RESTRICTIONS * * GEOCENTRIC has no restrictions. * * ENVIRONMENT * * GEOCENTRIC was tested and certified in the following environments: * * 1. Solaris 2.5 with GCC version 2.8.1 * 2. Windows 95 with MS Visual C++ version 6 * * MODIFICATIONS * * Date Description * ---- ----------- * * */ /***************************************************************************/ /* * DEFINES */ #define GEOCENT_NO_ERROR 0x0000 #define GEOCENT_LAT_ERROR 0x0001 #define GEOCENT_LON_ERROR 0x0002 #define GEOCENT_A_ERROR 0x0004 #define GEOCENT_B_ERROR 0x0008 #define GEOCENT_A_LESS_B_ERROR 0x0010 /***************************************************************************/ /* * FUNCTION PROTOTYPES */ /* ensure proper linkage to c++ programs */ #ifdef __cplusplus extern "C" { #endif typedef struct { double Geocent_a; /* Semi-major axis of ellipsoid in meters */ double Geocent_b; /* Semi-minor axis of ellipsoid */ double Geocent_a2; /* Square of semi-major axis */ double Geocent_b2; /* Square of semi-minor axis */ double Geocent_e2; /* Eccentricity squared */ double Geocent_ep2; /* 2nd eccentricity squared */ } GeocentricInfo; void pj_Init_Geocentric( GeocentricInfo *gi ); long pj_Set_Geocentric_Parameters( GeocentricInfo *gi, double a, double b); /* * The function Set_Geocentric_Parameters receives the ellipsoid parameters * as inputs and sets the corresponding state variables. * * a : Semi-major axis, in meters. (input) * b : Semi-minor axis, in meters. (input) */ void pj_Get_Geocentric_Parameters ( GeocentricInfo *gi, double *a, double *b); /* * The function Get_Geocentric_Parameters returns the ellipsoid parameters * to be used in geocentric coordinate conversions. * * a : Semi-major axis, in meters. (output) * b : Semi-minor axis, in meters. (output) */ long pj_Convert_Geodetic_To_Geocentric ( GeocentricInfo *gi, double Latitude, double Longitude, double Height, double *X, double *Y, double *Z); /* * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z), * according to the current ellipsoid parameters. * * Latitude : Geodetic latitude in radians (input) * Longitude : Geodetic longitude in radians (input) * Height : Geodetic height, in meters (input) * X : Calculated Geocentric X coordinate, in meters. (output) * Y : Calculated Geocentric Y coordinate, in meters. (output) * Z : Calculated Geocentric Z coordinate, in meters. (output) * */ void pj_Convert_Geocentric_To_Geodetic (GeocentricInfo *gi, double X, double Y, double Z, double *Latitude, double *Longitude, double *Height); /* * The function Convert_Geocentric_To_Geodetic converts geocentric * coordinates (X, Y, Z) to geodetic coordinates (latitude, longitude, * and height), according to the current ellipsoid parameters. * * X : Geocentric X coordinate, in meters. (input) * Y : Geocentric Y coordinate, in meters. (input) * Z : Geocentric Z coordinate, in meters. (input) * Latitude : Calculated latitude value in radians. (output) * Longitude : Calculated longitude value in radians. (output) * Height : Calculated height value, in meters. (output) */ #ifdef __cplusplus } #endif #endif /* GEOCENT_H */ therion/extern/proj4/Makefile0000644000076400010400000000047411207755610017301 0ustar userAdministratorsall: $(CC) *.c -c -I. ar cr libproj.a *.o remove: rm -f proj.c gen_cheb.c p_series.c jniproj.c cs2cs.c \ cs2cs.c gen_cheb.c p_series.c nad2nad.c nad2bin.c \ geod.c geod_set.c geod_for.c geod_inv.c geodesic.h clean: perl ../../makefile.pl rm *.o perl ../../makefile.pl rm *~ perl ../../makefile.pl rm *.a therion/extern/proj4/mk_cheby.c0000644000076400010400000001036111137333460017557 0ustar userAdministrators#include static void /* sum coefficients less than res */ eval(projUV **w, int nu, int nv, double res, projUV *resid) { int i, j; double ab; projUV *s; resid->u = resid->v = 0.; for (i = 0; i < nu; ++i) for (s = w[i], j = 0; j < nv; ++j, ++s) { if ((ab = fabs(s->u)) < res) resid->u += ab; if ((ab = fabs(s->v)) < res) resid->v += ab; } } static Tseries * /* create power series structure */ makeT(int nru, int nrv) { Tseries *T; int i; if ((T = (Tseries *)pj_malloc(sizeof(Tseries))) && (T->cu = (struct PW_COEF *)pj_malloc( sizeof(struct PW_COEF) * nru)) && (T->cv = (struct PW_COEF *)pj_malloc( sizeof(struct PW_COEF) * nrv))) { for (i = 0; i < nru; ++i) T->cu[i].c = 0; for (i = 0; i < nrv; ++i) T->cv[i].c = 0; return T; } else return 0; } Tseries * mk_cheby(projUV a, projUV b, double res, projUV *resid, projUV (*func)(projUV), int nu, int nv, int power) { int j, i, nru, nrv, *ncu, *ncv; Tseries *T; projUV **w; double cutres; if (!(w = (projUV **)vector2(nu, nv, sizeof(projUV))) || !(ncu = (int *)vector1(nu + nv, sizeof(int)))) return 0; ncv = ncu + nu; if (!bchgen(a, b, nu, nv, w, func)) { projUV *s; double ab, *p; /* analyse coefficients and adjust until residual OK */ cutres = res; for (i = 4; i ; --i) { eval(w, nu, nv, cutres, resid); if (resid->u < res && resid->v < res) break; cutres *= 0.5; } if (i <= 0) /* warn of too many tries */ resid->u = - resid->u; /* apply cut resolution and set pointers */ nru = nrv = 0; for (j = 0; j < nu; ++j) { ncu[j] = ncv[j] = 0; /* clear column maxes */ for (s = w[j], i = 0; i < nv; ++i, ++s) { if ((ab = fabs(s->u)) < cutres) /* < resolution ? */ s->u = 0.; /* clear coefficient */ else ncu[j] = i + 1; /* update column max */ if ((ab = fabs(s->v)) < cutres) /* same for v coef's */ s->v = 0.; else ncv[j] = i + 1; } if (ncu[j]) nru = j + 1; /* update row max */ if (ncv[j]) nrv = j + 1; } if (power) { /* convert to bivariate power series */ if (!bch2bps(a, b, w, nu, nv)) goto error; /* possible change in some row counts, so readjust */ nru = nrv = 0; for (j = 0; j < nu; ++j) { ncu[j] = ncv[j] = 0; /* clear column maxes */ for (s = w[j], i = 0; i < nv; ++i, ++s) { if (s->u) ncu[j] = i + 1; /* update column max */ if (s->v) ncv[j] = i + 1; } if (ncu[j]) nru = j + 1; /* update row max */ if (ncv[j]) nrv = j + 1; } if (T = makeT(nru, nrv)) { T->a = a; T->b = b; T->mu = nru - 1; T->mv = nrv - 1; T->power = 1; for (i = 0; i < nru; ++i) /* store coefficient rows for u */ if (T->cu[i].m = ncu[i]) if ((p = T->cu[i].c = (double *)pj_malloc(sizeof(double) * ncu[i]))) for (j = 0; j < ncu[i]; ++j) *p++ = (w[i] + j)->u; else goto error; for (i = 0; i < nrv; ++i) /* same for v */ if (T->cv[i].m = ncv[i]) if ((p = T->cv[i].c = (double *)pj_malloc(sizeof(double) * ncv[i]))) for (j = 0; j < ncv[i]; ++j) *p++ = (w[i] + j)->v; else goto error; } } else if (T = makeT(nru, nrv)) { /* else make returned Chebyshev coefficient structure */ T->mu = nru - 1; /* save row degree */ T->mv = nrv - 1; T->a.u = a.u + b.u; /* set argument scaling */ T->a.v = a.v + b.v; T->b.u = 1. / (b.u - a.u); T->b.v = 1. / (b.v - a.v); T->power = 0; for (i = 0; i < nru; ++i) /* store coefficient rows for u */ if (T->cu[i].m = ncu[i]) if ((p = T->cu[i].c = (double *)pj_malloc(sizeof(double) * ncu[i]))) for (j = 0; j < ncu[i]; ++j) *p++ = (w[i] + j)->u; else goto error; for (i = 0; i < nrv; ++i) /* same for v */ if (T->cv[i].m = ncv[i]) if ((p = T->cv[i].c = (double *)pj_malloc(sizeof(double) * ncv[i]))) for (j = 0; j < ncv[i]; ++j) *p++ = (w[i] + j)->v; else goto error; } else goto error; } goto gohome; error: if (T) { /* pj_dalloc up possible allocations */ for (i = 0; i <= T->mu; ++i) if (T->cu[i].c) pj_dalloc(T->cu[i].c); for (i = 0; i <= T->mv; ++i) if (T->cv[i].c) pj_dalloc(T->cv[i].c); pj_dalloc(T); } T = 0; gohome: freev2((void **) w, nu); pj_dalloc(ncu); return T; } therion/extern/proj4/nad/0000755000076400010400000000000012050456014016367 5ustar userAdministratorstherion/extern/proj4/nad/epsg0000644000076400010400000206414411256477230017275 0ustar userAdministrators# HD1909 <3819> +proj=longlat +ellps=bessel +towgs84=595.48,121.69,515.35,4.115,-2.9383,0.853,-3.408 +no_defs <> # TWD67 <3821> +proj=longlat +ellps=aust_SA +no_defs <> # TWD97 <3824> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # IGRS <3889> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # MGI 1901 <3906> +proj=longlat +ellps=bessel +no_defs <> # Unknown datum based upon the Airy 1830 ellipsoid <4001> +proj=longlat +ellps=airy +no_defs <> # Unknown datum based upon the Airy Modified 1849 ellipsoid <4002> +proj=longlat +ellps=mod_airy +no_defs <> # Unknown datum based upon the Australian National Spheroid <4003> +proj=longlat +ellps=aust_SA +no_defs <> # Unknown datum based upon the Bessel 1841 ellipsoid <4004> +proj=longlat +ellps=bessel +no_defs <> # Unknown datum based upon the Bessel Modified ellipsoid <4005> +proj=longlat +a=6377492.018 +b=6356173.508712696 +no_defs <> # Unknown datum based upon the Bessel Namibia ellipsoid <4006> +proj=longlat +ellps=bess_nam +no_defs <> # Unknown datum based upon the Clarke 1858 ellipsoid <4007> +proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs <> # Unknown datum based upon the Clarke 1866 ellipsoid <4008> +proj=longlat +ellps=clrk66 +no_defs <> # Unknown datum based upon the Clarke 1866 Michigan ellipsoid <4009> +proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs <> # Unknown datum based upon the Clarke 1880 (Benoit) ellipsoid <4010> +proj=longlat +a=6378300.789 +b=6356566.435 +no_defs <> # Unknown datum based upon the Clarke 1880 (IGN) ellipsoid <4011> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> # Unknown datum based upon the Clarke 1880 (RGS) ellipsoid <4012> +proj=longlat +ellps=clrk80 +no_defs <> # Unknown datum based upon the Clarke 1880 (Arc) ellipsoid <4013> +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs <> # Unknown datum based upon the Clarke 1880 (SGA 1922) ellipsoid <4014> +proj=longlat +a=6378249.2 +b=6356514.996941779 +no_defs <> # Unknown datum based upon the Everest 1830 (1937 Adjustment) ellipsoid <4015> +proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs <> # Unknown datum based upon the Everest 1830 (1967 Definition) ellipsoid <4016> +proj=longlat +ellps=evrstSS +no_defs <> # Unknown datum based upon the Everest 1830 Modified ellipsoid <4018> +proj=longlat +a=6377304.063 +b=6356103.038993155 +no_defs <> # Unknown datum based upon the GRS 1980 ellipsoid <4019> +proj=longlat +ellps=GRS80 +no_defs <> # Unknown datum based upon the Helmert 1906 ellipsoid <4020> +proj=longlat +ellps=helmert +no_defs <> # Unknown datum based upon the Indonesian National Spheroid <4021> +proj=longlat +a=6378160 +b=6356774.50408554 +no_defs <> # Unknown datum based upon the International 1924 ellipsoid <4022> +proj=longlat +ellps=intl +no_defs <> # MOLDREF99 <4023> +proj=longlat +ellps=GRS80 +no_defs <> # Unknown datum based upon the Krassowsky 1940 ellipsoid <4024> +proj=longlat +ellps=krass +no_defs <> # Unknown datum based upon the NWL 9D ellipsoid <4025> +proj=longlat +ellps=WGS66 +no_defs <> # Unknown datum based upon the Plessis 1817 ellipsoid <4027> +proj=longlat +a=6376523 +b=6355862.933255573 +no_defs <> # Unknown datum based upon the Struve 1860 ellipsoid <4028> +proj=longlat +a=6378298.3 +b=6356657.142669561 +no_defs <> # Unknown datum based upon the War Office ellipsoid <4029> +proj=longlat +a=6378300 +b=6356751.689189189 +no_defs <> # Unknown datum based upon the WGS 84 ellipsoid <4030> +proj=longlat +ellps=WGS84 +no_defs <> # Unknown datum based upon the GEM 10C ellipsoid <4031> +proj=longlat +ellps=WGS84 +no_defs <> # Unknown datum based upon the OSU86F ellipsoid <4032> +proj=longlat +a=6378136.2 +b=6356751.516927429 +no_defs <> # Unknown datum based upon the OSU91A ellipsoid <4033> +proj=longlat +a=6378136.3 +b=6356751.616592146 +no_defs <> # Unknown datum based upon the Clarke 1880 ellipsoid <4034> +proj=longlat +a=6378249.144808011 +b=6356514.966204134 +no_defs <> # Unknown datum based upon the Authalic Sphere <4035> +proj=longlat +a=6371000 +b=6371000 +no_defs <> # Unknown datum based upon the GRS 1967 ellipsoid <4036> +proj=longlat +ellps=GRS67 +no_defs <> # Unknown datum based upon the Average Terrestrial System 1977 ellipsoid <4041> +proj=longlat +a=6378135 +b=6356750.304921594 +no_defs <> # Unknown datum based upon the Everest (1830 Definition) ellipsoid <4042> +proj=longlat +a=6377299.36559538 +b=6356098.359005156 +no_defs <> # Unknown datum based upon the WGS 72 ellipsoid <4043> +proj=longlat +ellps=WGS72 +no_defs <> # Unknown datum based upon the Everest 1830 (1962 Definition) ellipsoid <4044> +proj=longlat +a=6377301.243 +b=6356100.230165384 +no_defs <> # Unknown datum based upon the Everest 1830 (1975 Definition) ellipsoid <4045> +proj=longlat +a=6377299.151 +b=6356098.145120132 +no_defs <> # RGRDC 2005 <4046> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Unspecified datum based upon the GRS 1980 Authalic Sphere <4047> +proj=longlat +a=6371007 +b=6371007 +no_defs <> # Unspecified datum based upon the Clarke 1866 Authalic Sphere <4052> +proj=longlat +a=6370997 +b=6370997 +no_defs <> # Unspecified datum based upon the International 1924 Authalic Sphere <4053> +proj=longlat +a=6371228 +b=6371228 +no_defs <> # Unspecified datum based upon the Hughes 1980 ellipsoid <4054> +proj=longlat +a=6378273 +b=6356889.449 +no_defs <> # Popular Visualisation CRS <4055> +proj=longlat +a=6378137 +b=6378137 +towgs84=0,0,0,0,0,0,0 +no_defs <> # SREF98 <4075> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # REGCAN95 <4081> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Greek <4120> +proj=longlat +ellps=bessel +no_defs <> # GGRS87 <4121> +proj=longlat +ellps=GRS80 +datum=GGRS87 +no_defs <> # ATS77 <4122> +proj=longlat +a=6378135 +b=6356750.304921594 +no_defs <> # KKJ <4123> +proj=longlat +ellps=intl +no_defs <> # RT90 <4124> +proj=longlat +ellps=bessel +no_defs <> # Samboja <4125> +proj=longlat +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +no_defs <> # LKS94 (ETRS89) <4126> +proj=longlat +ellps=GRS80 +no_defs <> # Tete <4127> +proj=longlat +ellps=clrk66 +no_defs <> # Madzansua <4128> +proj=longlat +ellps=clrk66 +no_defs <> # Observatario <4129> +proj=longlat +ellps=clrk66 +no_defs <> # Moznet <4130> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +no_defs <> # Indian 1960 <4131> +proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs <> # FD58 <4132> +proj=longlat +ellps=clrk80 +no_defs <> # EST92 <4133> +proj=longlat +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +no_defs <> # PSD93 <4134> +proj=longlat +ellps=clrk80 +no_defs <> # Old Hawaiian <4135> +proj=longlat +ellps=clrk66 +no_defs <> # St. Lawrence Island <4136> +proj=longlat +ellps=clrk66 +no_defs <> # St. Paul Island <4137> +proj=longlat +ellps=clrk66 +no_defs <> # St. George Island <4138> +proj=longlat +ellps=clrk66 +no_defs <> # Puerto Rico <4139> +proj=longlat +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +no_defs <> # NAD83(CSRS98) <4140> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Israel <4141> +proj=longlat +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +no_defs <> # Locodjo 1965 <4142> +proj=longlat +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +no_defs <> # Abidjan 1987 <4143> +proj=longlat +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +no_defs <> # Kalianpur 1937 <4144> +proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs <> # Kalianpur 1962 <4145> +proj=longlat +a=6377301.243 +b=6356100.230165384 +no_defs <> # Kalianpur 1975 <4146> +proj=longlat +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +no_defs <> # Hanoi 1972 <4147> +proj=longlat +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +no_defs <> # Hartebeesthoek94 <4148> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> # CH1903 <4149> +proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs <> # CH1903+ <4150> +proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs <> # CHTRF95 <4151> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # NAD83(HARN) <4152> +proj=longlat +ellps=GRS80 +no_defs <> # Rassadiran <4153> +proj=longlat +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +no_defs <> # ED50(ED77) <4154> +proj=longlat +ellps=intl +no_defs <> # Dabola 1981 <4155> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +no_defs <> # S-JTSK <4156> +proj=longlat +ellps=bessel +no_defs <> # Mount Dillon <4157> +proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs <> # Naparima 1955 <4158> +proj=longlat +ellps=intl +no_defs <> # ELD79 <4159> +proj=longlat +ellps=intl +no_defs <> # Chos Malal 1914 <4160> +proj=longlat +ellps=intl +no_defs <> # Pampa del Castillo <4161> +proj=longlat +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0 +no_defs <> # Korean 1985 <4162> +proj=longlat +ellps=bessel +no_defs <> # Yemen NGN96 <4163> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> # South Yemen <4164> +proj=longlat +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +no_defs <> # Bissau <4165> +proj=longlat +ellps=intl +towgs84=-173,253,27,0,0,0,0 +no_defs <> # Korean 1995 <4166> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> # NZGD2000 <4167> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Accra <4168> +proj=longlat +a=6378300 +b=6356751.689189189 +no_defs <> # American Samoa 1962 <4169> +proj=longlat +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +no_defs <> # SIRGAS 1995 <4170> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # RGF93 <4171> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # POSGAR <4172> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # IRENET95 <4173> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Sierra Leone 1924 <4174> +proj=longlat +a=6378300 +b=6356751.689189189 +no_defs <> # Sierra Leone 1968 <4175> +proj=longlat +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +no_defs <> # Australian Antarctic <4176> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Pulkovo 1942(83) <4178> +proj=longlat +ellps=krass +no_defs <> # Pulkovo 1942(58) <4179> +proj=longlat +ellps=krass +no_defs <> # EST97 <4180> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Luxembourg 1930 <4181> +proj=longlat +ellps=intl +towgs84=-193,13.7,-39.3,-0.41,-2.933,2.688,0.43 +no_defs <> # Azores Occidental 1939 <4182> +proj=longlat +ellps=intl +no_defs <> # Azores Central 1948 <4183> +proj=longlat +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +no_defs <> # Azores Oriental 1940 <4184> +proj=longlat +ellps=intl +towgs84=-203,141,53,0,0,0,0 +no_defs <> # Madeira 1936 <4185> +proj=longlat +ellps=intl +no_defs <> # OSNI 1952 <4188> +proj=longlat +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +no_defs <> # REGVEN <4189> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # POSGAR 98 <4190> +proj=longlat +ellps=GRS80 +no_defs <> # Albanian 1987 <4191> +proj=longlat +ellps=krass +no_defs <> # Douala 1948 <4192> +proj=longlat +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +no_defs <> # Manoca 1962 <4193> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs <> # Qornoq 1927 <4194> +proj=longlat +ellps=intl +no_defs <> # Scoresbysund 1952 <4195> +proj=longlat +ellps=intl +towgs84=105,326,-102.5,0,0,0.814,-0.6 +no_defs <> # Ammassalik 1958 <4196> +proj=longlat +ellps=intl +towgs84=-45,417,-3.5,0,0,0.814,-0.6 +no_defs <> # Garoua <4197> +proj=longlat +ellps=clrk80 +no_defs <> # Kousseri <4198> +proj=longlat +ellps=clrk80 +no_defs <> # Egypt 1930 <4199> +proj=longlat +ellps=intl +no_defs <> # Pulkovo 1995 <4200> +proj=longlat +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +no_defs <> # Adindan <4201> +proj=longlat +ellps=clrk80 +no_defs <> # AGD66 <4202> +proj=longlat +ellps=aust_SA +no_defs <> # AGD84 <4203> +proj=longlat +ellps=aust_SA +no_defs <> # Ain el Abd <4204> +proj=longlat +ellps=intl +no_defs <> # Afgooye <4205> +proj=longlat +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +no_defs <> # Agadez <4206> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> # Lisbon <4207> +proj=longlat +ellps=intl +no_defs <> # Aratu <4208> +proj=longlat +ellps=intl +no_defs <> # Arc 1950 <4209> +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs <> # Arc 1960 <4210> +proj=longlat +ellps=clrk80 +no_defs <> # Batavia <4211> +proj=longlat +ellps=bessel +no_defs <> # Barbados 1938 <4212> +proj=longlat +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +no_defs <> # Beduaram <4213> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-106,-87,188,0,0,0,0 +no_defs <> # Beijing 1954 <4214> +proj=longlat +ellps=krass +no_defs <> # Belge 1950 <4215> +proj=longlat +ellps=intl +no_defs <> # Bermuda 1957 <4216> +proj=longlat +ellps=clrk66 +no_defs <> # Bogota 1975 <4218> +proj=longlat +ellps=intl +towgs84=307,304,-318,0,0,0,0 +no_defs <> # Bukit Rimpah <4219> +proj=longlat +ellps=bessel +towgs84=-384,664,-48,0,0,0,0 +no_defs <> # Camacupa <4220> +proj=longlat +ellps=clrk80 +no_defs <> # Campo Inchauspe <4221> +proj=longlat +ellps=intl +no_defs <> # Cape <4222> +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs <> # Carthage <4223> +proj=longlat +a=6378249.2 +b=6356515 +datum=carthage +no_defs <> # Chua <4224> +proj=longlat +ellps=intl +no_defs <> # Corrego Alegre <4225> +proj=longlat +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +no_defs <> # Cote d'Ivoire <4226> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> # Deir ez Zor <4227> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> # Douala <4228> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> # Egypt 1907 <4229> +proj=longlat +ellps=helmert +no_defs <> # ED50 <4230> +proj=longlat +ellps=intl +no_defs <> # ED87 <4231> +proj=longlat +ellps=intl +no_defs <> # Fahud <4232> +proj=longlat +ellps=clrk80 +no_defs <> # Gandajika 1970 <4233> +proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 +no_defs <> # Garoua <4234> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> # Guyane Francaise <4235> +proj=longlat +ellps=intl +no_defs <> # Hu Tzu Shan 1950 <4236> +proj=longlat +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +no_defs <> # HD72 <4237> +proj=longlat +ellps=GRS67 +no_defs <> # ID74 <4238> +proj=longlat +a=6378160 +b=6356774.50408554 +no_defs <> # Indian 1954 <4239> +proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +no_defs <> # Indian 1975 <4240> +proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs <> # Jamaica 1875 <4241> +proj=longlat +a=6378249.144808011 +b=6356514.966204134 +no_defs <> # JAD69 <4242> +proj=longlat +ellps=clrk66 +no_defs <> # Kalianpur 1880 <4243> +proj=longlat +a=6377299.36559538 +b=6356098.359005156 +no_defs <> # Kandawala <4244> +proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=-97,787,86,0,0,0,0 +no_defs <> # Kertau 1968 <4245> +proj=longlat +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +no_defs <> # KOC <4246> +proj=longlat +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0,0,0,0 +no_defs <> # La Canoa <4247> +proj=longlat +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +no_defs <> # PSAD56 <4248> +proj=longlat +ellps=intl +no_defs <> # Lake <4249> +proj=longlat +ellps=intl +no_defs <> # Leigon <4250> +proj=longlat +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +no_defs <> # Liberia 1964 <4251> +proj=longlat +ellps=clrk80 +towgs84=-90,40,88,0,0,0,0 +no_defs <> # Lome <4252> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> # Luzon 1911 <4253> +proj=longlat +ellps=clrk66 +no_defs <> # Hito XVIII 1963 <4254> +proj=longlat +ellps=intl +no_defs <> # Herat North <4255> +proj=longlat +ellps=intl +towgs84=-333,-222,114,0,0,0,0 +no_defs <> # Mahe 1971 <4256> +proj=longlat +ellps=clrk80 +towgs84=41,-220,-134,0,0,0,0 +no_defs <> # Makassar <4257> +proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +no_defs <> # ETRS89 <4258> +proj=longlat +ellps=GRS80 +no_defs <> # Malongo 1987 <4259> +proj=longlat +ellps=intl +no_defs <> # Manoca <4260> +proj=longlat +ellps=clrk80 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs <> # Merchich <4261> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +no_defs <> # Massawa <4262> +proj=longlat +ellps=bessel +towgs84=639,405,60,0,0,0,0 +no_defs <> # Minna <4263> +proj=longlat +ellps=clrk80 +no_defs <> # Mhast <4264> +proj=longlat +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +no_defs <> # Monte Mario <4265> +proj=longlat +ellps=intl +no_defs <> # M'poraloko <4266> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> # NAD27 <4267> +proj=longlat +ellps=clrk66 +datum=NAD27 +no_defs <> # NAD27 Michigan <4268> +proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs <> # NAD83 <4269> +proj=longlat +ellps=GRS80 +datum=NAD83 +no_defs <> # Nahrwan 1967 <4270> +proj=longlat +ellps=clrk80 +no_defs <> # Naparima 1972 <4271> +proj=longlat +ellps=intl +no_defs <> # NZGD49 <4272> +proj=longlat +ellps=intl +datum=nzgd49 +no_defs <> # NGO 1948 <4273> +proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +no_defs <> # Datum 73 <4274> +proj=longlat +ellps=intl +no_defs <> # NTF <4275> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +no_defs <> # NSWC 9Z-2 <4276> +proj=longlat +ellps=WGS66 +no_defs <> # OSGB 1936 <4277> +proj=longlat +ellps=airy +datum=OSGB36 +no_defs <> # OSGB70 <4278> +proj=longlat +ellps=airy +no_defs <> # OS(SN)80 <4279> +proj=longlat +ellps=airy +no_defs <> # Padang <4280> +proj=longlat +ellps=bessel +no_defs <> # Palestine 1923 <4281> +proj=longlat +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +no_defs <> # Pointe Noire <4282> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> # GDA94 <4283> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Pulkovo 1942 <4284> +proj=longlat +ellps=krass +no_defs <> # Qatar 1974 <4285> +proj=longlat +ellps=intl +no_defs <> # Qatar 1948 <4286> +proj=longlat +ellps=helmert +no_defs <> # Qornoq <4287> +proj=longlat +ellps=intl +towgs84=164,138,-189,0,0,0,0 +no_defs <> # Loma Quintana <4288> +proj=longlat +ellps=intl +no_defs <> # Amersfoort <4289> +proj=longlat +ellps=bessel +no_defs <> # SAD69 <4291> +proj=longlat +ellps=GRS67 +no_defs <> # Sapper Hill 1943 <4292> +proj=longlat +ellps=intl +towgs84=-355,21,72,0,0,0,0 +no_defs <> # Schwarzeck <4293> +proj=longlat +ellps=bess_nam +no_defs <> # Segora <4294> +proj=longlat +ellps=bessel +no_defs <> # Serindung <4295> +proj=longlat +ellps=bessel +no_defs <> # Sudan <4296> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> # Tananarive <4297> +proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +no_defs <> # Timbalai 1948 <4298> +proj=longlat +ellps=evrstSS +no_defs <> # TM65 <4299> +proj=longlat +ellps=mod_airy +datum=ire65 +no_defs <> # TM75 <4300> +proj=longlat +ellps=mod_airy +no_defs <> # Tokyo <4301> +proj=longlat +ellps=bessel +no_defs <> # Trinidad 1903 <4302> +proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs <> # TC(1948) <4303> +proj=longlat +ellps=helmert +no_defs <> # Voirol 1875 <4304> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +no_defs <> # Bern 1938 <4306> +proj=longlat +ellps=bessel +no_defs <> # Nord Sahara 1959 <4307> +proj=longlat +ellps=clrk80 +no_defs <> # RT38 <4308> +proj=longlat +ellps=bessel +no_defs <> # Yacare <4309> +proj=longlat +ellps=intl +towgs84=-155,171,37,0,0,0,0 +no_defs <> # Yoff <4310> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> # Zanderij <4311> +proj=longlat +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +no_defs <> # MGI <4312> +proj=longlat +ellps=bessel +datum=hermannskogel +no_defs <> # Belge 1972 <4313> +proj=longlat +ellps=intl +towgs84=106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1 +no_defs <> # DHDN <4314> +proj=longlat +ellps=bessel +datum=potsdam +no_defs <> # Conakry 1905 <4315> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +no_defs <> # Dealul Piscului 1930 <4316> +proj=longlat +ellps=intl +no_defs <> # Dealul Piscului 1970 <4317> +proj=longlat +ellps=krass +no_defs <> # NGN <4318> +proj=longlat +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +no_defs <> # KUDAMS <4319> +proj=longlat +ellps=GRS80 +no_defs <> # WGS 72 <4322> +proj=longlat +ellps=WGS72 +no_defs <> # WGS 72BE <4324> +proj=longlat +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +no_defs <> # WGS 84 <4326> +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs <> # Anguilla 1957 <4600> +proj=longlat +ellps=clrk80 +no_defs <> # Antigua 1943 <4601> +proj=longlat +ellps=clrk80 +no_defs <> # Dominica 1945 <4602> +proj=longlat +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +no_defs <> # Grenada 1953 <4603> +proj=longlat +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +no_defs <> # Montserrat 1958 <4604> +proj=longlat +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +no_defs <> # St. Kitts 1955 <4605> +proj=longlat +ellps=clrk80 +no_defs <> # St. Lucia 1955 <4606> +proj=longlat +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +no_defs <> # St. Vincent 1945 <4607> +proj=longlat +ellps=clrk80 +towgs84=195.671,332.517,274.607,0,0,0,0 +no_defs <> # NAD27(76) <4608> +proj=longlat +ellps=clrk66 +no_defs <> # NAD27(CGQ77) <4609> +proj=longlat +ellps=clrk66 +no_defs <> # Xian 1980 <4610> +proj=longlat +a=6378140 +b=6356755.288157528 +no_defs <> # Hong Kong 1980 <4611> +proj=longlat +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +no_defs <> # JGD2000 <4612> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Segara <4613> +proj=longlat +ellps=bessel +no_defs <> # QND95 <4614> +proj=longlat +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +no_defs <> # Porto Santo <4615> +proj=longlat +ellps=intl +towgs84=-499,-249,314,0,0,0,0 +no_defs <> # Selvagem Grande <4616> +proj=longlat +ellps=intl +no_defs <> # NAD83(CSRS) <4617> +proj=longlat +ellps=GRS80 +no_defs <> # SAD69 <4618> +proj=longlat +ellps=aust_SA +no_defs <> # SWEREF99 <4619> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Point 58 <4620> +proj=longlat +ellps=clrk80 +towgs84=-106,-129,165,0,0,0,0 +no_defs <> # Fort Marigot <4621> +proj=longlat +ellps=intl +towgs84=137,248,-430,0,0,0,0 +no_defs <> # Guadeloupe 1948 <4622> +proj=longlat +ellps=intl +no_defs <> # CSG67 <4623> +proj=longlat +ellps=intl +towgs84=-186,230,110,0,0,0,0 +no_defs <> # RGFG95 <4624> +proj=longlat +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +no_defs <> # Martinique 1938 <4625> +proj=longlat +ellps=intl +no_defs <> # Reunion 1947 <4626> +proj=longlat +ellps=intl +no_defs <> # RGR92 <4627> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Tahiti 52 <4628> +proj=longlat +ellps=intl +towgs84=162,117,154,0,0,0,0 +no_defs <> # Tahaa 54 <4629> +proj=longlat +ellps=intl +no_defs <> # IGN72 Nuku Hiva <4630> +proj=longlat +ellps=intl +no_defs <> # K0 1949 <4631> +proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs <> # Combani 1950 <4632> +proj=longlat +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +no_defs <> # IGN56 Lifou <4633> +proj=longlat +ellps=intl +no_defs <> # IGN72 Grand Terre <4634> +proj=longlat +ellps=intl +no_defs <> # ST87 Ouvea <4635> +proj=longlat +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798 +no_defs <> # Petrels 1972 <4636> +proj=longlat +ellps=intl +towgs84=365,194,166,0,0,0,0 +no_defs <> # Perroud 1950 <4637> +proj=longlat +ellps=intl +towgs84=325,154,172,0,0,0,0 +no_defs <> # Saint Pierre et Miquelon 1950 <4638> +proj=longlat +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +no_defs <> # MOP78 <4639> +proj=longlat +ellps=intl +no_defs <> # RRAF 1991 <4640> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> # IGN53 Mare <4641> +proj=longlat +ellps=intl +no_defs <> # ST84 Ile des Pins <4642> +proj=longlat +ellps=intl +no_defs <> # ST71 Belep <4643> +proj=longlat +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7 +no_defs <> # NEA74 Noumea <4644> +proj=longlat +ellps=intl +no_defs <> # RGNC 1991 <4645> +proj=longlat +ellps=intl +towgs84=0,0,0,0,0,0,0 +no_defs <> # Grand Comoros <4646> +proj=longlat +ellps=intl +no_defs <> # Reykjavik 1900 <4657> +proj=longlat +a=6377019.27 +b=6355762.5391 +towgs84=-28,199,5,0,0,0,0 +no_defs <> # Hjorsey 1955 <4658> +proj=longlat +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +no_defs <> # ISN93 <4659> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Helle 1954 <4660> +proj=longlat +ellps=intl +towgs84=982.609,552.753,-540.873,32.3934,-153.257,-96.2266,16.805 +no_defs <> # LKS92 <4661> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # IGN72 Grande Terre <4662> +proj=longlat +ellps=intl +no_defs <> # Porto Santo 1995 <4663> +proj=longlat +ellps=intl +no_defs <> # Azores Oriental 1995 <4664> +proj=longlat +ellps=intl +no_defs <> # Azores Central 1995 <4665> +proj=longlat +ellps=intl +no_defs <> # Lisbon 1890 <4666> +proj=longlat +ellps=bessel +no_defs <> # IKBD-92 <4667> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> # ED79 <4668> +proj=longlat +ellps=intl +towgs84=-86,-98,-119,0,0,0,0 +no_defs <> # LKS94 <4669> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # IGM95 <4670> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Voirol 1879 <4671> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> # Chatham Islands 1971 <4672> +proj=longlat +ellps=intl +towgs84=175,-38,113,0,0,0,0 +no_defs <> # Chatham Islands 1979 <4673> +proj=longlat +ellps=intl +towgs84=174.05,-25.49,112.57,-0,-0,0.554,0.2263 +no_defs <> # SIRGAS 2000 <4674> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Guam 1963 <4675> +proj=longlat +ellps=clrk66 +towgs84=-100,-248,259,0,0,0,0 +no_defs <> # Vientiane 1982 <4676> +proj=longlat +ellps=krass +no_defs <> # Lao 1993 <4677> +proj=longlat +ellps=krass +no_defs <> # Lao 1997 <4678> +proj=longlat +ellps=krass +towgs84=44.585,-131.212,-39.544,0,0,0,0 +no_defs <> # Jouik 1961 <4679> +proj=longlat +ellps=clrk80 +towgs84=-80.01,253.26,291.19,0,0,0,0 +no_defs <> # Nouakchott 1965 <4680> +proj=longlat +ellps=clrk80 +towgs84=124.5,-63.5,-281,0,0,0,0 +no_defs <> # Mauritania 1999 <4681> +proj=longlat +ellps=clrk80 +no_defs <> # Gulshan 303 <4682> +proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs <> # PRS92 <4683> +proj=longlat +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +no_defs <> # Gan 1970 <4684> +proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 +no_defs <> # Gandajika <4685> +proj=longlat +ellps=intl +no_defs <> # MAGNA-SIRGAS <4686> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # RGPF <4687> +proj=longlat +ellps=GRS80 +no_defs <> # Fatu Iva 72 <4688> +proj=longlat +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +no_defs <> # IGN63 Hiva Oa <4689> +proj=longlat +ellps=intl +no_defs <> # Tahiti 79 <4690> +proj=longlat +ellps=intl +no_defs <> # Moorea 87 <4691> +proj=longlat +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +no_defs <> # Maupiti 83 <4692> +proj=longlat +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +no_defs <> # Nakhl-e Ghanem <4693> +proj=longlat +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0 +no_defs <> # POSGAR 94 <4694> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Katanga 1955 <4695> +proj=longlat +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +no_defs <> # Kasai 1953 <4696> +proj=longlat +ellps=clrk80 +no_defs <> # IGC 1962 6th Parallel South <4697> +proj=longlat +ellps=clrk80 +no_defs <> # IGN 1962 Kerguelen <4698> +proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs <> # Le Pouce 1934 <4699> +proj=longlat +ellps=clrk80 +towgs84=-770.1,158.4,-498.2,0,0,0,0 +no_defs <> # IGN Astro 1960 <4700> +proj=longlat +ellps=clrk80 +no_defs <> # IGCB 1955 <4701> +proj=longlat +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +no_defs <> # Mauritania 1999 <4702> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Mhast 1951 <4703> +proj=longlat +ellps=clrk80 +no_defs <> # Mhast (onshore) <4704> +proj=longlat +ellps=intl +no_defs <> # Mhast (offshore) <4705> +proj=longlat +ellps=intl +no_defs <> # Egypt Gulf of Suez S-650 TL <4706> +proj=longlat +ellps=helmert +towgs84=-146.21,112.63,4.05,0,0,0,0 +no_defs <> # Tern Island 1961 <4707> +proj=longlat +ellps=intl +towgs84=114,-116,-333,0,0,0,0 +no_defs <> # Cocos Islands 1965 <4708> +proj=longlat +ellps=aust_SA +towgs84=-491,-22,435,0,0,0,0 +no_defs <> # Iwo Jima 1945 <4709> +proj=longlat +ellps=intl +towgs84=145,75,-272,0,0,0,0 +no_defs <> # St. Helena 1971 <4710> +proj=longlat +ellps=intl +towgs84=-320,550,-494,0,0,0,0 +no_defs <> # Marcus Island 1952 <4711> +proj=longlat +ellps=intl +towgs84=124,-234,-25,0,0,0,0 +no_defs <> # Ascension Island 1958 <4712> +proj=longlat +ellps=intl +towgs84=-205,107,53,0,0,0,0 +no_defs <> # Ayabelle Lighthouse <4713> +proj=longlat +ellps=clrk80 +towgs84=-79,-129,145,0,0,0,0 +no_defs <> # Bellevue <4714> +proj=longlat +ellps=intl +towgs84=-127,-769,472,0,0,0,0 +no_defs <> # Camp Area Astro <4715> +proj=longlat +ellps=intl +towgs84=-104,-129,239,0,0,0,0 +no_defs <> # Phoenix Islands 1966 <4716> +proj=longlat +ellps=intl +towgs84=298,-304,-375,0,0,0,0 +no_defs <> # Cape Canaveral <4717> +proj=longlat +ellps=clrk66 +towgs84=-2,151,181,0,0,0,0 +no_defs <> # Solomon 1968 <4718> +proj=longlat +ellps=intl +no_defs <> # Easter Island 1967 <4719> +proj=longlat +ellps=intl +towgs84=211,147,111,0,0,0,0 +no_defs <> # Fiji 1986 <4720> +proj=longlat +ellps=WGS72 +no_defs <> # Fiji 1956 <4721> +proj=longlat +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +no_defs <> # South Georgia 1968 <4722> +proj=longlat +ellps=intl +towgs84=-794,119,-298,0,0,0,0 +no_defs <> # Grand Cayman 1959 <4723> +proj=longlat +ellps=clrk66 +towgs84=67.8,106.1,138.8,0,0,0,0 +no_defs <> # Diego Garcia 1969 <4724> +proj=longlat +ellps=intl +towgs84=208,-435,-229,0,0,0,0 +no_defs <> # Johnston Island 1961 <4725> +proj=longlat +ellps=intl +towgs84=189,-79,-202,0,0,0,0 +no_defs <> # Little Cayman 1961 <4726> +proj=longlat +ellps=clrk66 +no_defs <> # Midway 1961 <4727> +proj=longlat +ellps=intl +no_defs <> # Pico de las Nieves 1984 <4728> +proj=longlat +ellps=intl +towgs84=-307,-92,127,0,0,0,0 +no_defs <> # Pitcairn 1967 <4729> +proj=longlat +ellps=intl +towgs84=185,165,42,0,0,0,0 +no_defs <> # Santo 1965 <4730> +proj=longlat +ellps=intl +towgs84=170,42,84,0,0,0,0 +no_defs <> # Viti Levu 1916 <4731> +proj=longlat +ellps=clrk80 +towgs84=51,391,-36,0,0,0,0 +no_defs <> # Marshall Islands 1960 <4732> +proj=longlat +a=6378270 +b=6356794.343434343 +towgs84=102,52,-38,0,0,0,0 +no_defs <> # Wake Island 1952 <4733> +proj=longlat +ellps=intl +towgs84=276,-57,149,0,0,0,0 +no_defs <> # Tristan 1968 <4734> +proj=longlat +ellps=intl +towgs84=-632,438,-609,0,0,0,0 +no_defs <> # Kusaie 1951 <4735> +proj=longlat +ellps=intl +towgs84=647,1777,-1124,0,0,0,0 +no_defs <> # Deception Island <4736> +proj=longlat +ellps=clrk80 +towgs84=260,12,-147,0,0,0,0 +no_defs <> # Korea 2000 <4737> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Hong Kong 1963 <4738> +proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs <> # Hong Kong 1963(67) <4739> +proj=longlat +ellps=intl +towgs84=-156,-271,-189,0,0,0,0 +no_defs <> # PZ-90 <4740> +proj=longlat +a=6378136 +b=6356751.361745712 +no_defs <> # FD54 <4741> +proj=longlat +ellps=intl +no_defs <> # GDM2000 <4742> +proj=longlat +ellps=GRS80 +no_defs <> # Karbala 1979 <4743> +proj=longlat +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +no_defs <> # Nahrwan 1934 <4744> +proj=longlat +ellps=clrk80 +no_defs <> # RD/83 <4745> +proj=longlat +ellps=bessel +no_defs <> # PD/83 <4746> +proj=longlat +ellps=bessel +no_defs <> # GR96 <4747> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Vanua Levu 1915 <4748> +proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +no_defs <> # RGNC91-93 <4749> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # ST87 Ouvea <4750> +proj=longlat +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +no_defs <> # Kertau (RSO) <4751> +proj=longlat +a=6377295.664 +b=6356094.667915204 +no_defs <> # Viti Levu 1912 <4752> +proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +no_defs <> # fk89 <4753> +proj=longlat +ellps=intl +no_defs <> # LGD2006 <4754> +proj=longlat +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +no_defs <> # DGN95 <4755> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> # VN-2000 <4756> +proj=longlat +ellps=WGS84 +no_defs <> # SVY21 <4757> +proj=longlat +ellps=WGS84 +no_defs <> # JAD2001 <4758> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> # NAD83(NSRS2007) <4759> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # WGS 66 <4760> +proj=longlat +ellps=WGS66 +no_defs <> # HTRS96 <4761> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # BDA2000 <4762> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Pitcairn 2006 <4763> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> # RSRGD2000 <4764> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Slovenia 1996 <4765> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Bern 1898 (Bern) <4801> +proj=longlat +ellps=bessel +pm=bern +no_defs <> # Bogota 1975 (Bogota) <4802> +proj=longlat +ellps=intl +pm=bogota +no_defs <> # Lisbon (Lisbon) <4803> +proj=longlat +ellps=intl +pm=lisbon +no_defs <> # Makassar (Jakarta) <4804> +proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +no_defs <> # MGI (Ferro) <4805> +proj=longlat +ellps=bessel +pm=ferro +no_defs <> # Monte Mario (Rome) <4806> +proj=longlat +ellps=intl +pm=rome +no_defs <> # NTF (Paris) <4807> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +no_defs <> # Padang (Jakarta) <4808> +proj=longlat +ellps=bessel +pm=jakarta +no_defs <> # Belge 1950 (Brussels) <4809> +proj=longlat +ellps=intl +pm=brussels +no_defs <> # Tananarive (Paris) <4810> +proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +no_defs <> # Voirol 1875 (Paris) <4811> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +pm=paris +no_defs <> # Batavia (Jakarta) <4813> +proj=longlat +ellps=bessel +pm=jakarta +no_defs <> # RT38 (Stockholm) <4814> +proj=longlat +ellps=bessel +pm=stockholm +no_defs <> # Greek (Athens) <4815> +proj=longlat +ellps=bessel +pm=athens +no_defs <> # Carthage (Paris) <4816> +proj=longlat +a=6378249.2 +b=6356515 +pm=paris +no_defs <> # NGO 1948 (Oslo) <4817> +proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +no_defs <> # S-JTSK (Ferro) <4818> +proj=longlat +ellps=bessel +pm=ferro +no_defs <> # Nord Sahara 1959 (Paris) <4819> +proj=longlat +ellps=clrk80 +pm=paris +no_defs <> # Segara (Jakarta) <4820> +proj=longlat +ellps=bessel +pm=jakarta +no_defs <> # Voirol 1879 (Paris) <4821> +proj=longlat +a=6378249.2 +b=6356515 +pm=paris +no_defs <> # unnamed ellipse <4901> +proj=longlat +a=6376523 +b=6355862.933255573 +pm=2.3372291666985 +no_defs <> # NDG (Paris) <4902> +proj=longlat +a=6376523 +b=6355862.933255573 +pm=paris +no_defs <> # Madrid 1870 (Madrid) <4903> +proj=longlat +a=6378298.3 +b=6356657.142669561 +pm=madrid +no_defs <> # Lisbon 1890 (Lisbon) <4904> +proj=longlat +ellps=bessel +pm=lisbon +no_defs <> # Anguilla 1957 / British West Indies Grid <2000> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs <> # Antigua 1943 / British West Indies Grid <2001> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs <> # Dominica 1945 / British West Indies Grid <2002> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +units=m +no_defs <> # Grenada 1953 / British West Indies Grid <2003> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +units=m +no_defs <> # Montserrat 1958 / British West Indies Grid <2004> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +units=m +no_defs <> # St. Kitts 1955 / British West Indies Grid <2005> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs <> # St. Lucia 1955 / British West Indies Grid <2006> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +units=m +no_defs <> # St. Vincent 45 / British West Indies Grid <2007> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=195.671,332.517,274.607,0,0,0,0 +units=m +no_defs <> # NAD27(CGQ77) / SCoPQ zone 2 <2008> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(CGQ77) / SCoPQ zone 3 <2009> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(CGQ77) / SCoPQ zone 4 <2010> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(CGQ77) / SCoPQ zone 5 <2011> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(CGQ77) / SCoPQ zone 6 <2012> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(CGQ77) / SCoPQ zone 7 <2013> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(CGQ77) / SCoPQ zone 8 <2014> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(CGQ77) / SCoPQ zone 9 <2015> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(CGQ77) / SCoPQ zone 10 <2016> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(76) / MTM zone 8 <2017> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(76) / MTM zone 9 <2018> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(76) / MTM zone 10 <2019> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(76) / MTM zone 11 <2020> +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(76) / MTM zone 12 <2021> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(76) / MTM zone 13 <2022> +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(76) / MTM zone 14 <2023> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(76) / MTM zone 15 <2024> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(76) / MTM zone 16 <2025> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(76) / MTM zone 17 <2026> +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(76) / UTM zone 15N <2027> +proj=utm +zone=15 +ellps=clrk66 +units=m +no_defs <> # NAD27(76) / UTM zone 16N <2028> +proj=utm +zone=16 +ellps=clrk66 +units=m +no_defs <> # NAD27(76) / UTM zone 17N <2029> +proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs <> # NAD27(76) / UTM zone 18N <2030> +proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs <> # NAD27(CGQ77) / UTM zone 17N <2031> +proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs <> # NAD27(CGQ77) / UTM zone 18N <2032> +proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs <> # NAD27(CGQ77) / UTM zone 19N <2033> +proj=utm +zone=19 +ellps=clrk66 +units=m +no_defs <> # NAD27(CGQ77) / UTM zone 20N <2034> +proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs <> # NAD27(CGQ77) / UTM zone 21N <2035> +proj=utm +zone=21 +ellps=clrk66 +units=m +no_defs <> # NAD83(CSRS98) / New Brunswick Stereo (deprecated) <2036> +proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / UTM zone 19N (deprecated) <2037> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / UTM zone 20N (deprecated) <2038> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Israel / Israeli TM Grid <2039> +proj=tmerc +lat_0=31.73439361111111 +lon_0=35.20451694444445 +k=1.0000067 +x_0=219529.584 +y_0=626907.39 +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +units=m +no_defs <> # Locodjo 1965 / UTM zone 30N <2040> +proj=utm +zone=30 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs <> # Abidjan 1987 / UTM zone 30N <2041> +proj=utm +zone=30 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs <> # Locodjo 1965 / UTM zone 29N <2042> +proj=utm +zone=29 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs <> # Abidjan 1987 / UTM zone 29N <2043> +proj=utm +zone=29 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs <> # Hanoi 1972 / Gauss-Kruger zone 18 <2044> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs <> # Hanoi 1972 / Gauss-Kruger zone 19 <2045> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs <> # Hartebeesthoek94 / Lo15 # Unable to translate coordinate system EPSG:2046 into PROJ.4 format. # # Hartebeesthoek94 / Lo17 # Unable to translate coordinate system EPSG:2047 into PROJ.4 format. # # Hartebeesthoek94 / Lo19 # Unable to translate coordinate system EPSG:2048 into PROJ.4 format. # # Hartebeesthoek94 / Lo21 # Unable to translate coordinate system EPSG:2049 into PROJ.4 format. # # Hartebeesthoek94 / Lo23 # Unable to translate coordinate system EPSG:2050 into PROJ.4 format. # # Hartebeesthoek94 / Lo25 # Unable to translate coordinate system EPSG:2051 into PROJ.4 format. # # Hartebeesthoek94 / Lo27 # Unable to translate coordinate system EPSG:2052 into PROJ.4 format. # # Hartebeesthoek94 / Lo29 # Unable to translate coordinate system EPSG:2053 into PROJ.4 format. # # Hartebeesthoek94 / Lo31 # Unable to translate coordinate system EPSG:2054 into PROJ.4 format. # # Hartebeesthoek94 / Lo33 # Unable to translate coordinate system EPSG:2055 into PROJ.4 format. # # CH1903+ / LV95 <2056> +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs <> # Rassadiran / Nakhl e Taqi <2057> +proj=omerc +lat_0=27.51882880555555 +lonc=52.60353916666667 +alpha=0.5716611944444444 +k=0.999895934 +x_0=658377.437 +y_0=3044969.194 +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +units=m +no_defs <> # ED50(ED77) / UTM zone 38N <2058> +proj=utm +zone=38 +ellps=intl +units=m +no_defs <> # ED50(ED77) / UTM zone 39N <2059> +proj=utm +zone=39 +ellps=intl +units=m +no_defs <> # ED50(ED77) / UTM zone 40N <2060> +proj=utm +zone=40 +ellps=intl +units=m +no_defs <> # ED50(ED77) / UTM zone 41N <2061> +proj=utm +zone=41 +ellps=intl +units=m +no_defs <> # Madrid 1870 (Madrid) / Spain <2062> +proj=lcc +lat_1=40 +lat_0=40 +lon_0=0 +k_0=0.9988085293 +x_0=600000 +y_0=600000 +a=6378298.3 +b=6356657.142669561 +pm=madrid +units=m +no_defs <> # Dabola 1981 / UTM zone 28N (deprecated) <2063> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs <> # Dabola 1981 / UTM zone 29N (deprecated) <2064> +proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs <> # S-JTSK (Ferro) / Krovak <2065> +proj=krovak +lat_0=49.5 +lon_0=42.5 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> # Mount Dillon / Tobago Grid <2066> +proj=cass +lat_0=11.25217861111111 +lon_0=-60.68600888888889 +x_0=37718.66159325 +y_0=36209.91512952 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.201166195164 +no_defs <> # Naparima 1955 / UTM zone 20N <2067> +proj=utm +zone=20 +ellps=intl +units=m +no_defs <> # ELD79 / Libya zone 5 <2068> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> # ELD79 / Libya zone 6 <2069> +proj=tmerc +lat_0=0 +lon_0=11 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> # ELD79 / Libya zone 7 <2070> +proj=tmerc +lat_0=0 +lon_0=13 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> # ELD79 / Libya zone 8 <2071> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> # ELD79 / Libya zone 9 <2072> +proj=tmerc +lat_0=0 +lon_0=17 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> # ELD79 / Libya zone 10 <2073> +proj=tmerc +lat_0=0 +lon_0=19 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> # ELD79 / Libya zone 11 <2074> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> # ELD79 / Libya zone 12 <2075> +proj=tmerc +lat_0=0 +lon_0=23 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> # ELD79 / Libya zone 13 <2076> +proj=tmerc +lat_0=0 +lon_0=25 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> # ELD79 / UTM zone 32N <2077> +proj=utm +zone=32 +ellps=intl +units=m +no_defs <> # ELD79 / UTM zone 33N <2078> +proj=utm +zone=33 +ellps=intl +units=m +no_defs <> # ELD79 / UTM zone 34N <2079> +proj=utm +zone=34 +ellps=intl +units=m +no_defs <> # ELD79 / UTM zone 35N <2080> +proj=utm +zone=35 +ellps=intl +units=m +no_defs <> # Chos Malal 1914 / Argentina zone 2 <2081> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs <> # Pampa del Castillo / Argentina zone 2 <2082> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0 +units=m +no_defs <> # Hito XVIII 1963 / Argentina zone 2 <2083> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs <> # Hito XVIII 1963 / UTM zone 19S <2084> +proj=utm +zone=19 +south +ellps=intl +units=m +no_defs <> # NAD27 / Cuba Norte (deprecated) <2085> +proj=lcc +lat_1=22.35 +lat_0=22.35 +lon_0=-81 +k_0=0.99993602 +x_0=500000 +y_0=280296.016 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / Cuba Sur (deprecated) <2086> +proj=lcc +lat_1=20.71666666666667 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +k_0=0.99994848 +x_0=500000 +y_0=229126.939 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # ELD79 / TM 12 NE <2087> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> # Carthage / TM 11 NE <2088> +proj=tmerc +lat_0=0 +lon_0=11 +k=0.9996 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +datum=carthage +units=m +no_defs <> # Yemen NGN96 / UTM zone 38N <2089> +proj=utm +zone=38 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Yemen NGN96 / UTM zone 39N <2090> +proj=utm +zone=39 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # South Yemen / Gauss Kruger zone 8 (deprecated) <2091> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs <> # South Yemen / Gauss Kruger zone 9 (deprecated) <2092> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs <> # Hanoi 1972 / GK 106 NE <2093> +proj=tmerc +lat_0=0 +lon_0=106 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs <> # WGS 72BE / TM 106 NE <2094> +proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y_0=0 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # Bissau / UTM zone 28N <2095> +proj=utm +zone=28 +ellps=intl +towgs84=-173,253,27,0,0,0,0 +units=m +no_defs <> # Korean 1985 / Korea East Belt <2096> +proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs <> # Korean 1985 / Korea Central Belt <2097> +proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs <> # Korean 1985 / Korea West Belt <2098> +proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs <> # Qatar 1948 / Qatar Grid <2099> +proj=cass +lat_0=25.38236111111111 +lon_0=50.76138888888889 +x_0=100000 +y_0=100000 +ellps=helmert +units=m +no_defs <> # GGRS87 / Greek Grid <2100> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=GGRS87 +units=m +no_defs <> # Lake / Maracaibo Grid M1 <2101> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=0 +y_0=-52684.972 +ellps=intl +units=m +no_defs <> # Lake / Maracaibo Grid <2102> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=200000 +y_0=147315.028 +ellps=intl +units=m +no_defs <> # Lake / Maracaibo Grid M3 <2103> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=500000 +y_0=447315.028 +ellps=intl +units=m +no_defs <> # Lake / Maracaibo La Rosa Grid <2104> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=-17044 +y_0=-23139.97 +ellps=intl +units=m +no_defs <> # NZGD2000 / Mount Eden 2000 <2105> +proj=tmerc +lat_0=-36.87972222222222 +lon_0=174.7641666666667 +k=0.9999 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Bay of Plenty 2000 <2106> +proj=tmerc +lat_0=-37.76111111111111 +lon_0=176.4661111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Poverty Bay 2000 <2107> +proj=tmerc +lat_0=-38.62444444444444 +lon_0=177.8855555555556 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Hawkes Bay 2000 <2108> +proj=tmerc +lat_0=-39.65083333333333 +lon_0=176.6736111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Taranaki 2000 <2109> +proj=tmerc +lat_0=-39.13555555555556 +lon_0=174.2277777777778 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Tuhirangi 2000 <2110> +proj=tmerc +lat_0=-39.51222222222222 +lon_0=175.64 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Wanganui 2000 <2111> +proj=tmerc +lat_0=-40.24194444444444 +lon_0=175.4880555555555 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Wairarapa 2000 <2112> +proj=tmerc +lat_0=-40.92527777777777 +lon_0=175.6472222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Wellington 2000 <2113> +proj=tmerc +lat_0=-41.3011111111111 +lon_0=174.7763888888889 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Collingwood 2000 <2114> +proj=tmerc +lat_0=-40.71472222222223 +lon_0=172.6719444444444 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Nelson 2000 <2115> +proj=tmerc +lat_0=-41.27444444444444 +lon_0=173.2991666666667 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Karamea 2000 <2116> +proj=tmerc +lat_0=-41.28972222222222 +lon_0=172.1088888888889 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Buller 2000 <2117> +proj=tmerc +lat_0=-41.81055555555555 +lon_0=171.5811111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Grey 2000 <2118> +proj=tmerc +lat_0=-42.33361111111111 +lon_0=171.5497222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Amuri 2000 <2119> +proj=tmerc +lat_0=-42.68888888888888 +lon_0=173.01 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Marlborough 2000 <2120> +proj=tmerc +lat_0=-41.54444444444444 +lon_0=173.8019444444444 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Hokitika 2000 <2121> +proj=tmerc +lat_0=-42.88611111111111 +lon_0=170.9797222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Okarito 2000 <2122> +proj=tmerc +lat_0=-43.11 +lon_0=170.2608333333333 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Jacksons Bay 2000 <2123> +proj=tmerc +lat_0=-43.97777777777778 +lon_0=168.6061111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Mount Pleasant 2000 <2124> +proj=tmerc +lat_0=-43.59055555555556 +lon_0=172.7269444444445 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Gawler 2000 <2125> +proj=tmerc +lat_0=-43.74861111111111 +lon_0=171.3605555555555 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Timaru 2000 <2126> +proj=tmerc +lat_0=-44.40194444444445 +lon_0=171.0572222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Lindis Peak 2000 <2127> +proj=tmerc +lat_0=-44.735 +lon_0=169.4675 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Mount Nicholas 2000 <2128> +proj=tmerc +lat_0=-45.13277777777778 +lon_0=168.3986111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Mount York 2000 <2129> +proj=tmerc +lat_0=-45.56361111111111 +lon_0=167.7386111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Observation Point 2000 <2130> +proj=tmerc +lat_0=-45.81611111111111 +lon_0=170.6283333333333 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / North Taieri 2000 <2131> +proj=tmerc +lat_0=-45.86138888888889 +lon_0=170.2825 +k=0.99996 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Bluff 2000 <2132> +proj=tmerc +lat_0=-46.6 +lon_0=168.3427777777778 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / UTM zone 58S <2133> +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / UTM zone 59S <2134> +proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / UTM zone 60S <2135> +proj=utm +zone=60 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Accra / Ghana National Grid <2136> +proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.7391633579 +y_0=0 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs <> # Accra / TM 1 NW <2137> +proj=tmerc +lat_0=0 +lon_0=-1 +k=0.9996 +x_0=500000 +y_0=0 +a=6378300 +b=6356751.689189189 +units=m +no_defs <> # NAD27(CGQ77) / Quebec Lambert <2138> +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD83(CSRS98) / SCoPQ zone 2 (deprecated) <2139> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / MTM zone 3 (deprecated) <2140> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / MTM zone 4 (deprecated) <2141> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / MTM zone 5 (deprecated) <2142> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / MTM zone 6 (deprecated) <2143> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / MTM zone 7 (deprecated) <2144> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / MTM zone 8 (deprecated) <2145> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / MTM zone 9 (deprecated) <2146> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / MTM zone 10 (deprecated) <2147> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / UTM zone 21N (deprecated) <2148> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / UTM zone 18N (deprecated) <2149> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / UTM zone 17N (deprecated) <2150> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / UTM zone 13N (deprecated) <2151> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / UTM zone 12N (deprecated) <2152> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / UTM zone 11N (deprecated) <2153> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGF93 / Lambert-93 <2154> +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # American Samoa 1962 / American Samoa Lambert (deprecated) <2155> +proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / UTM zone 59S (deprecated) <2156> +proj=utm +zone=59 +south +ellps=GRS80 +units=m +no_defs <> # IRENET95 / Irish Transverse Mercator <2157> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=0.99982 +x_0=600000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # IRENET95 / UTM zone 29N <2158> +proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Sierra Leone 1924 / New Colony Grid <2159> +proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1 +x_0=152399.8550907544 +y_0=0 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs <> # Sierra Leone 1924 / New War Office Grid <2160> +proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1 +x_0=243839.7681452071 +y_0=182879.8261089053 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs <> # Sierra Leone 1968 / UTM zone 28N <2161> +proj=utm +zone=28 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs <> # Sierra Leone 1968 / UTM zone 29N <2162> +proj=utm +zone=29 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs <> # unnamed <2163> +proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +units=m +no_defs <> # Locodjo 1965 / TM 5 NW <2164> +proj=tmerc +lat_0=0 +lon_0=-5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs <> # Abidjan 1987 / TM 5 NW <2165> +proj=tmerc +lat_0=0 +lon_0=-5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs <> # Pulkovo 1942(83) / Gauss Kruger zone 3 (deprecated) <2166> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(83) / Gauss Kruger zone 4 (deprecated) <2167> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(83) / Gauss Kruger zone 5 (deprecated) <2168> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Luxembourg 1930 / Gauss <2169> +proj=tmerc +lat_0=49.83333333333334 +lon_0=6.166666666666667 +k=1 +x_0=80000 +y_0=100000 +ellps=intl +towgs84=-193,13.7,-39.3,-0.41,-2.933,2.688,0.43 +units=m +no_defs <> # MGI / Slovenia Grid (deprecated) <2170> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # Pulkovo 1942(58) / Poland zone I (deprecated) <2171> +proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5647000 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / Poland zone II <2172> +proj=sterea +lat_0=53.00194444444445 +lon_0=21.50277777777778 +k=0.9998 +x_0=4603000 +y_0=5806000 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / Poland zone III <2173> +proj=sterea +lat_0=53.58333333333334 +lon_0=17.00833333333333 +k=0.9998 +x_0=3501000 +y_0=5999000 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / Poland zone IV <2174> +proj=sterea +lat_0=51.67083333333333 +lon_0=16.67222222222222 +k=0.9998 +x_0=3703000 +y_0=5627000 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / Poland zone V <2175> +proj=tmerc +lat_0=0 +lon_0=18.95833333333333 +k=0.999983 +x_0=237000 +y_0=-4700000 +ellps=krass +units=m +no_defs <> # ETRS89 / Poland CS2000 zone 5 <2176> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999923 +x_0=5500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / Poland CS2000 zone 6 <2177> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.999923 +x_0=6500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / Poland CS2000 zone 7 <2178> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.999923 +x_0=7500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / Poland CS2000 zone 8 <2179> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999923 +x_0=8500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / Poland CS92 <2180> +proj=tmerc +lat_0=0 +lon_0=19 +k=0.9993 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +units=m +no_defs <> # Azores Occidental 1939 / UTM zone 25N <2188> +proj=utm +zone=25 +ellps=intl +units=m +no_defs <> # Azores Central 1948 / UTM zone 26N <2189> +proj=utm +zone=26 +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +units=m +no_defs <> # Azores Oriental 1940 / UTM zone 26N <2190> +proj=utm +zone=26 +ellps=intl +towgs84=-203,141,53,0,0,0,0 +units=m +no_defs <> # Madeira 1936 / UTM zone 28N (deprecated) <2191> +proj=utm +zone=28 +ellps=intl +units=m +no_defs <> # ED50 / France EuroLambert <2192> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.337229166666667 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +ellps=intl +units=m +no_defs <> # NZGD2000 / New Zealand Transverse Mercator 2000 <2193> +proj=tmerc +lat_0=0 +lon_0=173 +k=0.9996 +x_0=1600000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # American Samoa 1962 / American Samoa Lambert (deprecated) <2194> +proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / UTM zone 2S <2195> +proj=utm +zone=2 +south +ellps=GRS80 +units=m +no_defs <> # ETRS89 / Kp2000 Jutland <2196> +proj=tmerc +lat_0=0 +lon_0=9.5 +k=0.99995 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / Kp2000 Zealand <2197> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.99995 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / Kp2000 Bornholm <2198> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # Albanian 1987 / Gauss Kruger zone 4 (deprecated) <2199> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> # ATS77 / New Brunswick Stereographic (ATS77) <2200> +proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=300000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs <> # REGVEN / UTM zone 18N <2201> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # REGVEN / UTM zone 19N <2202> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # REGVEN / UTM zone 20N <2203> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD27 / Tennessee <2204> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=609601.2192024384 +y_0=30480.06096012192 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD83 / Kentucky North <2205> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # ED50 / 3-degree Gauss-Kruger zone 9 <2206> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=intl +units=m +no_defs <> # ED50 / 3-degree Gauss-Kruger zone 10 <2207> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=intl +units=m +no_defs <> # ED50 / 3-degree Gauss-Kruger zone 11 <2208> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=intl +units=m +no_defs <> # ED50 / 3-degree Gauss-Kruger zone 12 <2209> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=intl +units=m +no_defs <> # ED50 / 3-degree Gauss-Kruger zone 13 <2210> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=intl +units=m +no_defs <> # ED50 / 3-degree Gauss-Kruger zone 14 <2211> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=intl +units=m +no_defs <> # ED50 / 3-degree Gauss-Kruger zone 15 <2212> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=intl +units=m +no_defs <> # ETRS89 / TM 30 NE <2213> +proj=tmerc +lat_0=0 +lon_0=30 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # Douala 1948 / AOF west (deprecated) <2214> +proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +units=m +no_defs <> # Manoca 1962 / UTM zone 32N <2215> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +units=m +no_defs <> # Qornoq 1927 / UTM zone 22N <2216> +proj=utm +zone=22 +ellps=intl +units=m +no_defs <> # Qornoq 1927 / UTM zone 23N <2217> +proj=utm +zone=23 +ellps=intl +units=m +no_defs <> # Scoresbysund 1952 / Greenland zone 5 east # Unable to translate coordinate system EPSG:2218 into PROJ.4 format. # # ATS77 / UTM zone 19N <2219> +proj=utm +zone=19 +a=6378135 +b=6356750.304921594 +units=m +no_defs <> # ATS77 / UTM zone 20N <2220> +proj=utm +zone=20 +a=6378135 +b=6356750.304921594 +units=m +no_defs <> # Scoresbysund 1952 / Greenland zone 6 east # Unable to translate coordinate system EPSG:2221 into PROJ.4 format. # # NAD83 / Arizona East (ft) <2222> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83 / Arizona Central (ft) <2223> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83 / Arizona West (ft) <2224> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83 / California zone 1 (ftUS) <2225> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / California zone 2 (ftUS) <2226> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / California zone 3 (ftUS) <2227> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / California zone 4 (ftUS) <2228> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / California zone 5 (ftUS) <2229> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / California zone 6 (ftUS) <2230> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Colorado North (ftUS) <2231> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Colorado Central (ftUS) <2232> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Colorado South (ftUS) <2233> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Connecticut (ftUS) <2234> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Delaware (ftUS) <2235> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Florida East (ftUS) <2236> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Florida West (ftUS) <2237> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Florida North (ftUS) <2238> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Georgia East (ftUS) <2239> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Georgia West (ftUS) <2240> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Idaho East (ftUS) <2241> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Idaho Central (ftUS) <2242> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Idaho West (ftUS) <2243> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Indiana East (ftUS) (deprecated) <2244> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Indiana West (ftUS) (deprecated) <2245> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Kentucky North (ftUS) <2246> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Kentucky South (ftUS) <2247> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Maryland (ftUS) <2248> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Massachusetts Mainland (ftUS) <2249> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Massachusetts Island (ftUS) <2250> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Michigan North (ft) <2251> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83 / Michigan Central (ft) <2252> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83 / Michigan South (ft) <2253> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83 / Mississippi East (ftUS) <2254> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Mississippi West (ftUS) <2255> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Montana (ft) <2256> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83 / New Mexico East (ftUS) <2257> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / New Mexico Central (ftUS) <2258> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / New Mexico West (ftUS) <2259> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / New York East (ftUS) <2260> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / New York Central (ftUS) <2261> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / New York West (ftUS) <2262> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / New York Long Island (ftUS) <2263> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / North Carolina (ftUS) <2264> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / North Dakota North (ft) <2265> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83 / North Dakota South (ft) <2266> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83 / Oklahoma North (ftUS) <2267> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Oklahoma South (ftUS) <2268> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Oregon North (ft) <2269> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83 / Oregon South (ft) <2270> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83 / Pennsylvania North (ftUS) <2271> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Pennsylvania South (ftUS) <2272> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / South Carolina (ft) <2273> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83 / Tennessee (ftUS) <2274> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Texas North (ftUS) <2275> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Texas North Central (ftUS) <2276> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Texas Central (ftUS) <2277> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Texas South Central (ftUS) <2278> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Texas South (ftUS) <2279> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Utah North (ft) <2280> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83 / Utah Central (ft) <2281> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83 / Utah South (ft) <2282> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83 / Virginia North (ftUS) <2283> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Virginia South (ftUS) <2284> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Washington North (ftUS) <2285> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Washington South (ftUS) <2286> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Wisconsin North (ftUS) <2287> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Wisconsin Central (ftUS) <2288> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Wisconsin South (ftUS) <2289> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # ATS77 / Prince Edward Isl. Stereographic (ATS77) <2290> +proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=700000 +y_0=400000 +a=6378135 +b=6356750.304921594 +units=m +no_defs <> # NAD83(CSRS98) / Prince Edward Isl. Stereographic (NAD83) (deprecated) <2291> +proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs <> # NAD83(CSRS98) / Prince Edward Isl. Stereographic (NAD83) (deprecated) <2292> +proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ATS77 / MTM Nova Scotia zone 4 <2294> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=4500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs <> # ATS77 / MTM Nova Scotia zone 5 <2295> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=5500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs <> # Ammassalik 1958 / Greenland zone 7 east # Unable to translate coordinate system EPSG:2296 into PROJ.4 format. # # Qornoq 1927 / Greenland zone 1 east (deprecated) # Unable to translate coordinate system EPSG:2297 into PROJ.4 format. # # Qornoq 1927 / Greenland zone 2 east (deprecated) # Unable to translate coordinate system EPSG:2298 into PROJ.4 format. # # Qornoq 1927 / Greenland zone 2 west # Unable to translate coordinate system EPSG:2299 into PROJ.4 format. # # Qornoq 1927 / Greenland zone 3 east (deprecated) # Unable to translate coordinate system EPSG:2300 into PROJ.4 format. # # Qornoq 1927 / Greenland zone 3 west # Unable to translate coordinate system EPSG:2301 into PROJ.4 format. # # Qornoq 1927 / Greenland zone 4 east (deprecated) # Unable to translate coordinate system EPSG:2302 into PROJ.4 format. # # Qornoq 1927 / Greenland zone 4 west # Unable to translate coordinate system EPSG:2303 into PROJ.4 format. # # Qornoq 1927 / Greenland zone 5 west # Unable to translate coordinate system EPSG:2304 into PROJ.4 format. # # Qornoq 1927 / Greenland zone 6 west # Unable to translate coordinate system EPSG:2305 into PROJ.4 format. # # Qornoq 1927 / Greenland zone 7 west # Unable to translate coordinate system EPSG:2306 into PROJ.4 format. # # Qornoq 1927 / Greenland zone 8 east # Unable to translate coordinate system EPSG:2307 into PROJ.4 format. # # Batavia / TM 109 SE <2308> +proj=tmerc +lat_0=0 +lon_0=109 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=bessel +units=m +no_defs <> # WGS 84 / TM 116 SE <2309> +proj=tmerc +lat_0=0 +lon_0=116 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / TM 132 SE <2310> +proj=tmerc +lat_0=0 +lon_0=132 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / TM 6 NE <2311> +proj=tmerc +lat_0=0 +lon_0=6 +k=0.9996 +x_0=500000 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # Garoua / UTM zone 33N <2312> +proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs <> # Kousseri / UTM zone 33N <2313> +proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs <> # Trinidad 1903 / Trinidad Grid (ftCla) <2314> +proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392052001 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.3047972654 +no_defs <> # Campo Inchauspe / UTM zone 19S <2315> +proj=utm +zone=19 +south +ellps=intl +units=m +no_defs <> # Campo Inchauspe / UTM zone 20S <2316> +proj=utm +zone=20 +south +ellps=intl +units=m +no_defs <> # PSAD56 / ICN Regional <2317> +proj=lcc +lat_1=9 +lat_2=3 +lat_0=6 +lon_0=-66 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs <> # Ain el Abd / Aramco Lambert <2318> +proj=lcc +lat_1=17 +lat_2=33 +lat_0=25.08951 +lon_0=48 +x_0=0 +y_0=0 +ellps=intl +units=m +no_defs <> # ED50 / TM27 <2319> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> # ED50 / TM30 <2320> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> # ED50 / TM33 <2321> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> # ED50 / TM36 <2322> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> # ED50 / TM39 <2323> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> # ED50 / TM42 <2324> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> # ED50 / TM45 <2325> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> # Hong Kong 1980 Grid System <2326> +proj=tmerc +lat_0=22.31213333333334 +lon_0=114.1785555555556 +k=1 +x_0=836694.05 +y_0=819069.8 +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger zone 13 <2327> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger zone 14 <2328> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger zone 15 <2329> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger zone 16 <2330> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger zone 17 <2331> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger zone 18 <2332> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger zone 19 <2333> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger zone 20 <2334> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger zone 21 <2335> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger zone 22 <2336> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger zone 23 <2337> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger CM 75E <2338> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger CM 81E <2339> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger CM 87E <2340> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger CM 93E <2341> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger CM 99E <2342> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger CM 105E <2343> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger CM 111E <2344> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger CM 117E <2345> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger CM 123E <2346> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger CM 129E <2347> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger CM 135E <2348> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 25 <2349> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 26 <2350> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 27 <2351> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 28 <2352> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 29 <2353> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 30 <2354> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 31 <2355> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 32 <2356> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 33 <2357> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 34 <2358> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 35 <2359> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 36 <2360> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 37 <2361> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 38 <2362> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 39 <2363> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 40 <2364> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 41 <2365> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 42 <2366> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 43 <2367> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 44 <2368> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 45 <2369> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 75E <2370> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 78E <2371> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 81E <2372> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 84E <2373> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 87E <2374> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 90E <2375> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 93E <2376> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 96E <2377> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 99E <2378> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 102E <2379> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 105E <2380> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 108E <2381> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 111E <2382> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 114E <2383> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 117E <2384> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 120E <2385> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 123E <2386> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 126E <2387> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 129E <2388> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 132E <2389> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 135E <2390> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # KKJ / Finland zone 1 <2391> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs <> # KKJ / Finland zone 2 <2392> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs <> # KKJ / Finland Uniform Coordinate System <2393> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +units=m +no_defs <> # KKJ / Finland zone 4 <2394> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=4500000 +y_0=0 +ellps=intl +units=m +no_defs <> # South Yemen / Gauss-Kruger zone 8 <2395> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs <> # South Yemen / Gauss-Kruger zone 9 <2396> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs <> # Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 3 <2397> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 4 <2398> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 5 <2399> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs <> # RT90 2.5 gon W (deprecated) <2400> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 25 <2401> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 26 <2402> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 27 <2403> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 28 <2404> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 29 <2405> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 30 <2406> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 31 <2407> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 32 <2408> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 33 <2409> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 34 <2410> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 35 <2411> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 36 <2412> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 37 <2413> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 38 <2414> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 39 <2415> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 40 <2416> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 41 <2417> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 42 <2418> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 43 <2419> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 44 <2420> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 45 <2421> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 75E <2422> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 78E <2423> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 81E <2424> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 84E <2425> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 87E <2426> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 90E <2427> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 93E <2428> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 96E <2429> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 99E <2430> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 102E <2431> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 105E <2432> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 108E <2433> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 111E <2434> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 114E <2435> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 117E <2436> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 120E <2437> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 123E <2438> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 126E <2439> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 129E <2440> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 132E <2441> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 135E <2442> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS I <2443> +proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS II <2444> +proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS III <2445> +proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS IV <2446> +proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS V <2447> +proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS VI <2448> +proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS VII <2449> +proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS VIII <2450> +proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS IX <2451> +proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS X <2452> +proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS XI <2453> +proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS XII <2454> +proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS XIII <2455> +proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS XIV <2456> +proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS XV <2457> +proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS XVI <2458> +proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS XVII <2459> +proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS XVIII <2460> +proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS XIX <2461> +proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Albanian 1987 / Gauss-Kruger zone 4 <2462> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 21E <2463> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 27E <2464> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 33E <2465> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 39E <2466> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 45E <2467> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 51E <2468> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 57E <2469> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 63E <2470> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 69E <2471> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 75E <2472> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 81E <2473> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 87E <2474> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 93E <2475> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 99E <2476> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 105E <2477> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 111E <2478> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 117E <2479> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 123E <2480> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 129E <2481> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 135E <2482> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 141E <2483> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 147E <2484> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 153E <2485> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 159E <2486> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 165E <2487> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 171E <2488> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 177E <2489> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 177W <2490> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 171W <2491> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 9E (deprecated) <2492> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 15E (deprecated) <2493> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 21E <2494> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 27E <2495> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 33E <2496> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 39E <2497> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 45E <2498> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 51E <2499> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 57E <2500> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 63E <2501> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 69E <2502> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 75E <2503> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 81E <2504> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 87E <2505> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 93E <2506> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 99E <2507> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 105E <2508> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 111E <2509> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 117E <2510> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 123E <2511> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 129E <2512> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 135E <2513> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 141E <2514> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 147E <2515> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 153E <2516> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 159E <2517> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 165E <2518> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 171E <2519> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 177E <2520> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 177W <2521> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 171W <2522> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 7 <2523> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 8 <2524> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 9 <2525> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 10 <2526> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 11 <2527> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 12 <2528> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 13 <2529> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 14 <2530> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 15 <2531> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 16 <2532> +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 17 <2533> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 18 <2534> +proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 19 <2535> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 20 <2536> +proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 21 <2537> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 22 <2538> +proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 23 <2539> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 24 <2540> +proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 25 <2541> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 26 <2542> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 27 <2543> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 28 <2544> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 29 <2545> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 30 <2546> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 31 <2547> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 32 <2548> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 33 <2549> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Samboja / UTM zone 50S (deprecated) <2550> +proj=utm +zone=50 +south +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 34 <2551> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 35 <2552> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 36 <2553> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 37 <2554> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 38 <2555> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 39 <2556> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 40 <2557> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 41 <2558> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 42 <2559> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 43 <2560> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 44 <2561> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 45 <2562> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 46 <2563> +proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 47 <2564> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 48 <2565> +proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 49 <2566> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 50 <2567> +proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 51 <2568> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 52 <2569> +proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 53 <2570> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 54 <2571> +proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 55 <2572> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 56 <2573> +proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 57 <2574> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 58 <2575> +proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 59 <2576> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 60 (deprecated) <2577> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 61 <2578> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 62 <2579> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 63 <2580> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 64 <2581> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 21E <2582> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 24E <2583> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 27E <2584> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 30E <2585> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 33E <2586> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 36E <2587> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 39E <2588> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 42E <2589> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 45E <2590> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 48E <2591> +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 51E <2592> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 54E <2593> +proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 57E <2594> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 60E <2595> +proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 63E <2596> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 66E <2597> +proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 69E <2598> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 72E <2599> +proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Lietuvos Koordinoei Sistema 1994 (deprecated) <2600> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 75E <2601> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 78E <2602> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 81E <2603> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 84E <2604> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 87E <2605> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 90E <2606> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 93E <2607> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 96E <2608> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 99E <2609> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 102E <2610> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 105E <2611> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 108E <2612> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 111E <2613> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 114E <2614> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 117E <2615> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 120E <2616> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 123E <2617> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 126E <2618> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 129E <2619> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 132E <2620> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 135E <2621> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 138E <2622> +proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 141E <2623> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 144E <2624> +proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 147E <2625> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 150E <2626> +proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 153E <2627> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 156E <2628> +proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 159E <2629> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 162E <2630> +proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 165E <2631> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 168E <2632> +proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 171E <2633> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 174E <2634> +proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 177E <2635> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 180E <2636> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 177W <2637> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 174W <2638> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 171W <2639> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 168W <2640> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 7 <2641> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 8 <2642> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 9 <2643> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 10 <2644> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 11 <2645> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 12 <2646> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 13 <2647> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 14 <2648> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 15 <2649> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 16 <2650> +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 17 <2651> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 18 <2652> +proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 19 <2653> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 20 <2654> +proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 21 <2655> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 22 <2656> +proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 23 <2657> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 24 <2658> +proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 25 <2659> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 26 <2660> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 27 <2661> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 28 <2662> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 29 <2663> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 30 <2664> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 31 <2665> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 32 <2666> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 33 <2667> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 34 <2668> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 35 <2669> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 36 <2670> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 37 <2671> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 38 <2672> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 39 <2673> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 40 <2674> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 41 <2675> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 42 <2676> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 43 <2677> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 44 <2678> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 45 <2679> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 46 <2680> +proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 47 <2681> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 48 <2682> +proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 49 <2683> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 50 <2684> +proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 51 <2685> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 52 <2686> +proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 53 <2687> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 54 <2688> +proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 55 <2689> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 56 <2690> +proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 57 <2691> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 58 <2692> +proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 59 <2693> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 60 (deprecated) <2694> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 61 <2695> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 62 <2696> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 63 <2697> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 64 <2698> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 21E <2699> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 24E <2700> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 27E <2701> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 30E <2702> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 33E <2703> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 36E <2704> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 39E <2705> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 42E <2706> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 45E <2707> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 48E <2708> +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 51E <2709> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 54E <2710> +proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 57E <2711> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 60E <2712> +proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 63E <2713> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 66E <2714> +proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 69E <2715> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 72E <2716> +proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 75E <2717> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 78E <2718> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 81E <2719> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 84E <2720> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 87E <2721> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 90E <2722> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 93E <2723> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 96E <2724> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 99E <2725> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 102E <2726> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 105E <2727> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 108E <2728> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 111E <2729> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 114E <2730> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 117E <2731> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 120E <2732> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 123E <2733> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 126E <2734> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 129E <2735> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Tete / UTM zone 36S <2736> +proj=utm +zone=36 +south +ellps=clrk66 +units=m +no_defs <> # Tete / UTM zone 37S <2737> +proj=utm +zone=37 +south +ellps=clrk66 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 132E <2738> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 135E <2739> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 138E <2740> +proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 141E <2741> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 144E <2742> +proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 147E <2743> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 150E <2744> +proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 153E <2745> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 156E <2746> +proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 159E <2747> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 162E <2748> +proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 165E <2749> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 168E <2750> +proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 171E <2751> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 174E <2752> +proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 177E <2753> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 180E <2754> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 177W <2755> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 174W <2756> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 171W <2757> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 168W <2758> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # NAD83(HARN) / Alabama East <2759> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Alabama West <2760> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Arizona East <2761> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Arizona Central <2762> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Arizona West <2763> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Arkansas North <2764> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Arkansas South <2765> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / California zone 1 <2766> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / California zone 2 <2767> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / California zone 3 <2768> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / California zone 4 <2769> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / California zone 5 <2770> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / California zone 6 <2771> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Colorado North <2772> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Colorado Central <2773> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Colorado South <2774> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Connecticut <2775> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Delaware <2776> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Florida East <2777> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Florida West <2778> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Florida North <2779> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Georgia East <2780> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Georgia West <2781> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Hawaii zone 1 <2782> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Hawaii zone 2 <2783> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Hawaii zone 3 <2784> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Hawaii zone 4 <2785> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Hawaii zone 5 <2786> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Idaho East <2787> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Idaho Central <2788> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Idaho West <2789> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Illinois East <2790> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Illinois West <2791> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Indiana East <2792> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Indiana West <2793> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Iowa North <2794> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Iowa South <2795> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Kansas North <2796> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Kansas South <2797> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Kentucky North <2798> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Kentucky South <2799> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Louisiana North <2800> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Louisiana South <2801> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Maine East <2802> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Maine West <2803> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Maryland <2804> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Massachusetts Mainland <2805> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Massachusetts Island <2806> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Michigan North <2807> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Michigan Central <2808> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Michigan South <2809> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Minnesota North <2810> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Minnesota Central <2811> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Minnesota South <2812> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Mississippi East <2813> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Mississippi West <2814> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Missouri East <2815> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Missouri Central <2816> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Missouri West <2817> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Montana <2818> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Nebraska <2819> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Nevada East <2820> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Nevada Central <2821> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Nevada West <2822> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / New Hampshire <2823> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / New Jersey <2824> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / New Mexico East <2825> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / New Mexico Central <2826> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / New Mexico West <2827> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / New York East <2828> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / New York Central <2829> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / New York West <2830> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / New York Long Island <2831> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / North Dakota North <2832> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / North Dakota South <2833> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Ohio North <2834> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Ohio South <2835> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Oklahoma North <2836> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Oklahoma South <2837> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Oregon North <2838> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Oregon South <2839> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Rhode Island <2840> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / South Dakota North <2841> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / South Dakota South <2842> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Tennessee <2843> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Texas North <2844> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Texas North Central <2845> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Texas Central <2846> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Texas South Central <2847> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Texas South <2848> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Utah North <2849> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Utah Central <2850> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Utah South <2851> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Vermont <2852> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Virginia North <2853> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Virginia South <2854> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Washington North <2855> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Washington South <2856> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / West Virginia North <2857> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / West Virginia South <2858> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Wisconsin North <2859> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Wisconsin Central <2860> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Wisconsin South <2861> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Wyoming East <2862> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Wyoming East Central <2863> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Wyoming West Central <2864> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Wyoming West <2865> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Puerto Rico and Virgin Is. <2866> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Arizona East (ft) <2867> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / Arizona Central (ft) <2868> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / Arizona West (ft) <2869> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / California zone 1 (ftUS) <2870> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / California zone 2 (ftUS) <2871> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / California zone 3 (ftUS) <2872> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / California zone 4 (ftUS) <2873> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / California zone 5 (ftUS) <2874> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / California zone 6 (ftUS) <2875> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Colorado North (ftUS) <2876> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Colorado Central (ftUS) <2877> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Colorado South (ftUS) <2878> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Connecticut (ftUS) <2879> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Delaware (ftUS) <2880> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Florida East (ftUS) <2881> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Florida West (ftUS) <2882> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Florida North (ftUS) <2883> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Georgia East (ftUS) <2884> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Georgia West (ftUS) <2885> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Idaho East (ftUS) <2886> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Idaho Central (ftUS) <2887> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Idaho West (ftUS) <2888> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Indiana East (ftUS) (deprecated) <2889> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Indiana West (ftUS) (deprecated) <2890> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Kentucky North (ftUS) <2891> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Kentucky South (ftUS) <2892> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Maryland (ftUS) <2893> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Massachusetts Mainland (ftUS) <2894> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Massachusetts Island (ftUS) <2895> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Michigan North (ft) <2896> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / Michigan Central (ft) <2897> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / Michigan South (ft) <2898> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / Mississippi East (ftUS) <2899> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Mississippi West (ftUS) <2900> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Montana (ft) <2901> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / New Mexico East (ftUS) <2902> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / New Mexico Central (ftUS) <2903> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / New Mexico West (ftUS) <2904> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / New York East (ftUS) <2905> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / New York Central (ftUS) <2906> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / New York West (ftUS) <2907> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / New York Long Island (ftUS) <2908> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / North Dakota North (ft) <2909> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / North Dakota South (ft) <2910> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / Oklahoma North (ftUS) <2911> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Oklahoma South (ftUS) <2912> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Oregon North (ft) <2913> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / Oregon South (ft) <2914> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / Tennessee (ftUS) <2915> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Texas North (ftUS) <2916> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Texas North Central (ftUS) <2917> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Texas Central (ftUS) <2918> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Texas South Central (ftUS) <2919> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Texas South (ftUS) <2920> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Utah North (ft) <2921> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / Utah Central (ft) <2922> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / Utah South (ft) <2923> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / Virginia North (ftUS) <2924> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Virginia South (ftUS) <2925> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Washington North (ftUS) <2926> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Washington South (ftUS) <2927> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Wisconsin North (ftUS) <2928> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Wisconsin Central (ftUS) <2929> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Wisconsin South (ftUS) <2930> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # Beduaram / TM 13 NE <2931> +proj=tmerc +lat_0=0 +lon_0=13 +k=0.9996 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +towgs84=-106,-87,188,0,0,0,0 +units=m +no_defs <> # QND95 / Qatar National Grid <2932> +proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.99999 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +units=m +no_defs <> # Segara / UTM zone 50S <2933> +proj=utm +zone=50 +south +ellps=bessel +units=m +no_defs <> # Segara (Jakarta) / NEIEZ (deprecated) <2934> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +pm=jakarta +units=m +no_defs <> # Pulkovo 1942 / CS63 zone A1 <2935> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=41.53333333333333 +k=1 +x_0=1300000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / CS63 zone A2 <2936> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=44.53333333333333 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / CS63 zone A3 <2937> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=47.53333333333333 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / CS63 zone A4 <2938> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=50.53333333333333 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / CS63 zone K2 <2939> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=50.76666666666667 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / CS63 zone K3 <2940> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=53.76666666666667 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / CS63 zone K4 <2941> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=56.76666666666667 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +units=m +no_defs <> # Porto Santo / UTM zone 28N <2942> +proj=utm +zone=28 +ellps=intl +towgs84=-499,-249,314,0,0,0,0 +units=m +no_defs <> # Selvagem Grande / UTM zone 28N <2943> +proj=utm +zone=28 +ellps=intl +units=m +no_defs <> # NAD83(CSRS) / SCoPQ zone 2 <2944> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 3 <2945> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 4 <2946> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 5 <2947> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 6 <2948> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 7 <2949> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 8 <2950> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 9 <2951> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 10 <2952> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / New Brunswick Stereographic <2953> +proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / Prince Edward Isl. Stereographic (NAD83) <2954> +proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 11N <2955> +proj=utm +zone=11 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 12N <2956> +proj=utm +zone=12 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 13N <2957> +proj=utm +zone=13 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 17N <2958> +proj=utm +zone=17 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 18N <2959> +proj=utm +zone=18 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 19N <2960> +proj=utm +zone=19 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 20N <2961> +proj=utm +zone=20 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 21N <2962> +proj=utm +zone=21 +ellps=GRS80 +units=m +no_defs <> # Lisbon 1890 (Lisbon) / Portugal Bonne # Unable to translate coordinate system EPSG:2963 into PROJ.4 format. # # NAD27 / Alaska Albers <2964> +proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD83 / Indiana East (ftUS) <2965> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Indiana West (ftUS) <2966> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83(HARN) / Indiana East (ftUS) <2967> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Indiana West (ftUS) <2968> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +units=us-ft +no_defs <> # Fort Marigot / UTM zone 20N <2969> +proj=utm +zone=20 +ellps=intl +towgs84=137,248,-430,0,0,0,0 +units=m +no_defs <> # Guadeloupe 1948 / UTM zone 20N <2970> +proj=utm +zone=20 +ellps=intl +units=m +no_defs <> # CSG67 / UTM zone 22N <2971> +proj=utm +zone=22 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs <> # RGFG95 / UTM zone 22N <2972> +proj=utm +zone=22 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +units=m +no_defs <> # Martinique 1938 / UTM zone 20N <2973> +proj=utm +zone=20 +ellps=intl +units=m +no_defs <> # RGR92 / UTM zone 40S <2975> +proj=utm +zone=40 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Tahiti 52 / UTM zone 6S <2976> +proj=utm +zone=6 +south +ellps=intl +towgs84=162,117,154,0,0,0,0 +units=m +no_defs <> # Tahaa 54 / UTM zone 5S <2977> +proj=utm +zone=5 +south +ellps=intl +units=m +no_defs <> # IGN72 Nuku Hiva / UTM zone 7S <2978> +proj=utm +zone=7 +south +ellps=intl +units=m +no_defs <> # K0 1949 / UTM zone 42S (deprecated) <2979> +proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs <> # Combani 1950 / UTM zone 38S <2980> +proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs <> # IGN56 Lifou / UTM zone 58S <2981> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs <> # IGN72 Grand Terre / UTM zone 58S (deprecated) <2982> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs <> # ST87 Ouvea / UTM zone 58S (deprecated) <2983> +proj=utm +zone=58 +south +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798 +units=m +no_defs <> # RGNC 1991 / Lambert New Caledonia (deprecated) <2984> +proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=intl +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Petrels 1972 / Terre Adelie Polar Stereographic # Unable to translate coordinate system EPSG:2985 into PROJ.4 format. # # Perroud 1950 / Terre Adelie Polar Stereographic # Unable to translate coordinate system EPSG:2986 into PROJ.4 format. # # Saint Pierre et Miquelon 1950 / UTM zone 21N <2987> +proj=utm +zone=21 +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +units=m +no_defs <> # MOP78 / UTM zone 1S <2988> +proj=utm +zone=1 +south +ellps=intl +units=m +no_defs <> # RRAF 1991 / UTM zone 20N <2989> +proj=utm +zone=20 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Reunion 1947 / TM Reunion (deprecated) <2990> +proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=50000 +y_0=160000 +ellps=intl +units=m +no_defs <> # NAD83 / Oregon Lambert <2991> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Oregon Lambert (ft) <2992> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83(HARN) / Oregon Lambert <2993> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Oregon Lambert (ft) <2994> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> # IGN53 Mare / UTM zone 58S <2995> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs <> # ST84 Ile des Pins / UTM zone 58S <2996> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs <> # ST71 Belep / UTM zone 58S <2997> +proj=utm +zone=58 +south +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7 +units=m +no_defs <> # NEA74 Noumea / UTM zone 58S <2998> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs <> # Grand Comoros / UTM zone 38S <2999> +proj=utm +zone=38 +south +ellps=intl +units=m +no_defs <> # Segara / NEIEZ <3000> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +units=m +no_defs <> # Batavia / NEIEZ <3001> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +units=m +no_defs <> # Makassar / NEIEZ <3002> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +units=m +no_defs <> # Monte Mario / Italy zone 1 <3003> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs <> # Monte Mario / Italy zone 2 <3004> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +units=m +no_defs <> # NAD83 / BC Albers <3005> +proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # SWEREF99 TM <3006> +proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 12 00 <3007> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 13 30 <3008> +proj=tmerc +lat_0=0 +lon_0=13.5 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 15 00 <3009> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 16 30 <3010> +proj=tmerc +lat_0=0 +lon_0=16.5 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 18 00 <3011> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 14 15 <3012> +proj=tmerc +lat_0=0 +lon_0=14.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 15 45 <3013> +proj=tmerc +lat_0=0 +lon_0=15.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 17 15 <3014> +proj=tmerc +lat_0=0 +lon_0=17.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 18 45 <3015> +proj=tmerc +lat_0=0 +lon_0=18.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 20 15 <3016> +proj=tmerc +lat_0=0 +lon_0=20.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 21 45 <3017> +proj=tmerc +lat_0=0 +lon_0=21.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 23 15 <3018> +proj=tmerc +lat_0=0 +lon_0=23.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RT90 7.5 gon V <3019> +proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # RT90 5 gon V <3020> +proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # RT90 2.5 gon V <3021> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # RT90 0 gon <3022> +proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # RT90 2.5 gon O <3023> +proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # RT90 5 gon O <3024> +proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # RT38 7.5 gon V <3025> +proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # RT38 5 gon V <3026> +proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # RT38 2.5 gon V <3027> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # RT38 0 gon <3028> +proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # RT38 2.5 gon O <3029> +proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # RT38 5 gon O <3030> +proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # WGS 84 / Antarctic Polar Stereographic <3031> +proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / Australian Antarctic Polar Stereographic <3032> +proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=70 +k=1 +x_0=6000000 +y_0=6000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / Australian Antarctic Lambert <3033> +proj=lcc +lat_1=-68.5 +lat_2=-74.5 +lat_0=-50 +lon_0=70 +x_0=6000000 +y_0=6000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # ETRS89 / ETRS-LCC <3034> +proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-LAEA <3035> +proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +units=m +no_defs <> # Moznet / UTM zone 36S <3036> +proj=utm +zone=36 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs <> # Moznet / UTM zone 37S <3037> +proj=utm +zone=37 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs <> # ETRS89 / ETRS-TM26 <3038> +proj=utm +zone=26 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-TM27 <3039> +proj=utm +zone=27 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-TM28 <3040> +proj=utm +zone=28 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-TM29 <3041> +proj=utm +zone=29 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-TM30 <3042> +proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-TM31 <3043> +proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-TM32 <3044> +proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-TM33 <3045> +proj=utm +zone=33 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-TM34 <3046> +proj=utm +zone=34 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-TM35 <3047> +proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-TM36 <3048> +proj=utm +zone=36 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-TM37 <3049> +proj=utm +zone=37 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-TM38 <3050> +proj=utm +zone=38 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-TM39 <3051> +proj=utm +zone=39 +ellps=GRS80 +units=m +no_defs <> # Reykjavik 1900 / Lambert 1900 # Unable to translate coordinate system EPSG:3052 into PROJ.4 format. # # Hjorsey 1955 / Lambert 1955 # Unable to translate coordinate system EPSG:3053 into PROJ.4 format. # # Hjorsey 1955 / UTM zone 26N <3054> +proj=utm +zone=26 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs <> # Hjorsey 1955 / UTM zone 27N <3055> +proj=utm +zone=27 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs <> # Hjorsey 1955 / UTM zone 28N <3056> +proj=utm +zone=28 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs <> # ISN93 / Lambert 1993 <3057> +proj=lcc +lat_1=64.25 +lat_2=65.75 +lat_0=65 +lon_0=-19 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Helle 1954 / Jan Mayen Grid <3058> +proj=tmerc +lat_0=0 +lon_0=-8.5 +k=1 +x_0=50000 +y_0=-7800000 +ellps=intl +towgs84=982.609,552.753,-540.873,32.3934,-153.257,-96.2266,16.805 +units=m +no_defs <> # LKS92 / Latvia TM <3059> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=-6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # IGN72 Grande Terre / UTM zone 58S <3060> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs <> # Porto Santo 1995 / UTM zone 28N <3061> +proj=utm +zone=28 +ellps=intl +units=m +no_defs <> # Azores Oriental 1995 / UTM zone 26N <3062> +proj=utm +zone=26 +ellps=intl +units=m +no_defs <> # Azores Central 1995 / UTM zone 26N <3063> +proj=utm +zone=26 +ellps=intl +units=m +no_defs <> # IGM95 / UTM zone 32N <3064> +proj=utm +zone=32 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # IGM95 / UTM zone 33N <3065> +proj=utm +zone=33 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ED50 / Jordan TM <3066> +proj=tmerc +lat_0=0 +lon_0=37 +k=0.9998 +x_0=500000 +y_0=-3000000 +ellps=intl +units=m +no_defs <> # ETRS89 / ETRS-TM35FIN <3067> +proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs <> # DHDN / Soldner Berlin <3068> +proj=cass +lat_0=52.41864827777778 +lon_0=13.62720366666667 +x_0=40000 +y_0=10000 +ellps=bessel +datum=potsdam +units=m +no_defs <> # NAD27 / Wisconsin Transverse Mercator <3069> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=500000 +y_0=-4500000 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD83 / Wisconsin Transverse Mercator <3070> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(HARN) / Wisconsin Transverse Mercator <3071> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +units=m +no_defs <> # NAD83 / Maine CS2000 East <3072> +proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Maine CS2000 Central (deprecated) <3073> +proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Maine CS2000 West <3074> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(HARN) / Maine CS2000 East <3075> +proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Maine CS2000 Central (deprecated) <3076> +proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Maine CS2000 West <3077> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83 / Michigan Oblique Mercator <3078> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(HARN) / Michigan Oblique Mercator <3079> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +units=m +no_defs <> # NAD27 / Shackleford <3080> +proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=914400 +y_0=914400 +ellps=clrk66 +datum=NAD27 +units=ft +no_defs <> # NAD83 / Texas State Mapping System <3081> +proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Texas Centric Lambert Conformal <3082> +proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Texas Centric Albers Equal Area <3083> +proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(HARN) / Texas Centric Lambert Conformal <3084> +proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Texas Centric Albers Equal Area <3085> +proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +units=m +no_defs <> # NAD83 / Florida GDL Albers <3086> +proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(HARN) / Florida GDL Albers <3087> +proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83 / Kentucky Single Zone <3088> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Kentucky Single Zone (ftUS) <3089> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83(HARN) / Kentucky Single Zone <3090> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Kentucky Single Zone (ftUS) <3091> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +units=us-ft +no_defs <> # Tokyo / UTM zone 51N <3092> +proj=utm +zone=51 +ellps=bessel +units=m +no_defs <> # Tokyo / UTM zone 52N <3093> +proj=utm +zone=52 +ellps=bessel +units=m +no_defs <> # Tokyo / UTM zone 53N <3094> +proj=utm +zone=53 +ellps=bessel +units=m +no_defs <> # Tokyo / UTM zone 54N <3095> +proj=utm +zone=54 +ellps=bessel +units=m +no_defs <> # Tokyo / UTM zone 55N <3096> +proj=utm +zone=55 +ellps=bessel +units=m +no_defs <> # JGD2000 / UTM zone 51N <3097> +proj=utm +zone=51 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / UTM zone 52N <3098> +proj=utm +zone=52 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / UTM zone 53N <3099> +proj=utm +zone=53 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / UTM zone 54N <3100> +proj=utm +zone=54 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / UTM zone 55N <3101> +proj=utm +zone=55 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # American Samoa 1962 / American Samoa Lambert <3102> +proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=95169.31165862332 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs <> # Mauritania 1999 / UTM zone 28N (deprecated) <3103> +proj=utm +zone=28 +ellps=clrk80 +units=m +no_defs <> # Mauritania 1999 / UTM zone 29N (deprecated) <3104> +proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs <> # Mauritania 1999 / UTM zone 30N (deprecated) <3105> +proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs <> # Gulshan 303 / Bangladesh Transverse Mercator <3106> +proj=tmerc +lat_0=0 +lon_0=90 +k=0.9996 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> # GDA94 / SA Lambert <3107> +proj=lcc +lat_1=-28 +lat_2=-36 +lat_0=-32 +lon_0=135 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / Guernsey Grid <3108> +proj=tmerc +lat_0=49.5 +lon_0=-2.416666666666667 +k=0.999997 +x_0=47000 +y_0=50000 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / Jersey Transverse Mercator <3109> +proj=tmerc +lat_0=49.225 +lon_0=-2.135 +k=0.9999999000000001 +x_0=40000 +y_0=70000 +ellps=GRS80 +units=m +no_defs <> # AGD66 / Vicgrid66 <3110> +proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x_0=2500000 +y_0=4500000 +ellps=aust_SA +units=m +no_defs <> # GDA94 / Vicgrid94 <3111> +proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x_0=2500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GDA94 / Geoscience Australia Lambert <3112> +proj=lcc +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=134 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GDA94 / BCSG02 <3113> +proj=tmerc +lat_0=-28 +lon_0=153 +k=0.99999 +x_0=50000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # MAGNA-SIRGAS / Colombia Far West zone <3114> +proj=tmerc +lat_0=4.596200416666666 +lon_0=-80.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # MAGNA-SIRGAS / Colombia West zone <3115> +proj=tmerc +lat_0=4.596200416666666 +lon_0=-77.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # MAGNA-SIRGAS / Colombia Bogota zone <3116> +proj=tmerc +lat_0=4.596200416666666 +lon_0=-74.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # MAGNA-SIRGAS / Colombia East Central zone <3117> +proj=tmerc +lat_0=4.596200416666666 +lon_0=-71.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # MAGNA-SIRGAS / Colombia East zone <3118> +proj=tmerc +lat_0=4.596200416666666 +lon_0=-68.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Douala 1948 / AEF west <3119> +proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +units=m +no_defs <> # Pulkovo 1942(58) / Poland zone I <3120> +proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5467000 +ellps=krass +units=m +no_defs <> # PRS92 / Philippines zone 1 <3121> +proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs <> # PRS92 / Philippines zone 2 <3122> +proj=tmerc +lat_0=0 +lon_0=119 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs <> # PRS92 / Philippines zone 3 <3123> +proj=tmerc +lat_0=0 +lon_0=121 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs <> # PRS92 / Philippines zone 4 <3124> +proj=tmerc +lat_0=0 +lon_0=123 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs <> # PRS92 / Philippines zone 5 <3125> +proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs <> # ETRS89 / ETRS-GK19FIN <3126> +proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-GK20FIN <3127> +proj=tmerc +lat_0=0 +lon_0=20 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-GK21FIN <3128> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-GK22FIN <3129> +proj=tmerc +lat_0=0 +lon_0=22 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-GK23FIN <3130> +proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-GK24FIN <3131> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-GK25FIN <3132> +proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-GK26FIN <3133> +proj=tmerc +lat_0=0 +lon_0=26 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-GK27FIN <3134> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-GK28FIN <3135> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-GK29FIN <3136> +proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-GK30FIN <3137> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-GK31FIN <3138> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # Vanua Levu 1915 / Vanua Levu Grid # Unable to translate coordinate system EPSG:3139 into PROJ.4 format. # # Viti Levu 1912 / Viti Levu Grid <3140> +proj=cass +lat_0=-18 +lon_0=178 +x_0=109435.392 +y_0=141622.272 +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +to_meter=0.201168 +no_defs <> # Fiji 1956 / UTM zone 60S <3141> +proj=utm +zone=60 +south +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +units=m +no_defs <> # Fiji 1956 / UTM zone 1S <3142> +proj=utm +zone=1 +south +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +units=m +no_defs <> # Fiji 1986 / Fiji Map Grid (deprecated) <3143> +proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=2000000 +y_0=4000000 +ellps=WGS72 +units=m +no_defs <> # FD54 / Faroe Lambert # Unable to translate coordinate system EPSG:3144 into PROJ.4 format. # # ETRS89 / Faroe Lambert # Unable to translate coordinate system EPSG:3145 into PROJ.4 format. # # Pulkovo 1942 / 3-degree Gauss-Kruger zone 6 <3146> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 18E <3147> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Indian 1960 / UTM zone 48N <3148> +proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> # Indian 1960 / UTM zone 49N <3149> +proj=utm +zone=49 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 6 <3150> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 18E <3151> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # ST74 <3152> +proj=tmerc +lat_0=0 +lon_0=18.05779 +k=0.99999425 +x_0=100178.1808 +y_0=-6500614.7836 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / BC Albers <3153> +proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 7N <3154> +proj=utm +zone=7 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 8N <3155> +proj=utm +zone=8 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 9N <3156> +proj=utm +zone=9 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 10N <3157> +proj=utm +zone=10 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 14N <3158> +proj=utm +zone=14 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 15N <3159> +proj=utm +zone=15 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 16N <3160> +proj=utm +zone=16 +ellps=GRS80 +units=m +no_defs <> # NAD83 / Ontario MNR Lambert <3161> +proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x_0=930000 +y_0=6430000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(CSRS) / Ontario MNR Lambert <3162> +proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x_0=930000 +y_0=6430000 +ellps=GRS80 +units=m +no_defs <> # RGNC91-93 / Lambert New Caledonia <3163> +proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ST87 Ouvea / UTM zone 58S <3164> +proj=utm +zone=58 +south +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +units=m +no_defs <> # NEA74 Noumea / Noumea Lambert <3165> +proj=lcc +lat_1=-22.24469175 +lat_2=-22.29469175 +lat_0=-22.26969175 +lon_0=166.44242575 +x_0=0.66 +y_0=1.02 +ellps=intl +units=m +no_defs <> # NEA74 Noumea / Noumea Lambert 2 <3166> +proj=lcc +lat_1=-22.24472222222222 +lat_2=-22.29472222222222 +lat_0=-22.26972222222222 +lon_0=166.4425 +x_0=8.313000000000001 +y_0=-2.354 +ellps=intl +units=m +no_defs <> # Kertau (RSO) / RSO Malaya (ch) <3167> +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=40000 +y_0=0 +a=6377295.664 +b=6356094.667915204 +to_meter=20.116756 +no_defs <> # Kertau (RSO) / RSO Malaya (m) <3168> +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804670.24 +y_0=0 +a=6377295.664 +b=6356094.667915204 +units=m +no_defs <> # RGNC91-93 / UTM zone 57S <3169> +proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGNC91-93 / UTM zone 58S <3170> +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGNC91-93 / UTM zone 59S <3171> +proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # IGN53 Mare / UTM zone 59S <3172> +proj=utm +zone=59 +south +ellps=intl +units=m +no_defs <> # fk89 / Faroe Lambert FK89 # Unable to translate coordinate system EPSG:3173 into PROJ.4 format. # # NAD83 / Great Lakes Albers <3174> +proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-84.455955 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Great Lakes and St Lawrence Albers <3175> +proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-83.248627 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # Indian 1960 / TM 106 NE <3176> +proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> # LGD2006 / Libya TM <3177> +proj=tmerc +lat_0=0 +lon_0=17 +k=0.9965000000000001 +x_0=1000000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # GR96 / UTM zone 18N <3178> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GR96 / UTM zone 19N <3179> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GR96 / UTM zone 20N <3180> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GR96 / UTM zone 21N <3181> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GR96 / UTM zone 22N <3182> +proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GR96 / UTM zone 23N <3183> +proj=utm +zone=23 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GR96 / UTM zone 24N <3184> +proj=utm +zone=24 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GR96 / UTM zone 25N <3185> +proj=utm +zone=25 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GR96 / UTM zone 26N <3186> +proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GR96 / UTM zone 27N <3187> +proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GR96 / UTM zone 28N <3188> +proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GR96 / UTM zone 29N <3189> +proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # LGD2006 / Libya TM zone 5 <3190> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # LGD2006 / Libya TM zone 6 <3191> +proj=tmerc +lat_0=0 +lon_0=11 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # LGD2006 / Libya TM zone 7 <3192> +proj=tmerc +lat_0=0 +lon_0=13 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # LGD2006 / Libya TM zone 8 <3193> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # LGD2006 / Libya TM zone 9 <3194> +proj=tmerc +lat_0=0 +lon_0=17 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # LGD2006 / Libya TM zone 10 <3195> +proj=tmerc +lat_0=0 +lon_0=19 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # LGD2006 / Libya TM zone 11 <3196> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # LGD2006 / Libya TM zone 12 <3197> +proj=tmerc +lat_0=0 +lon_0=23 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # LGD2006 / Libya TM zone 13 <3198> +proj=tmerc +lat_0=0 +lon_0=25 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # LGD2006 / UTM zone 32N <3199> +proj=utm +zone=32 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # FD58 / Iraq zone <3200> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +units=m +no_defs <> # LGD2006 / UTM zone 33N <3201> +proj=utm +zone=33 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # LGD2006 / UTM zone 34N <3202> +proj=utm +zone=34 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # LGD2006 / UTM zone 35N <3203> +proj=utm +zone=35 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # WGS 84 / SCAR IMW SP19-20 <3204> +proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SP21-22 <3205> +proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SP23-24 <3206> +proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-42 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ01-02 <3207> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-174 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ19-20 <3208> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ21-22 <3209> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ37-38 <3210> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ39-40 <3211> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ41-42 <3212> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ43-44 <3213> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ45-46 <3214> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ47-48 <3215> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ49-50 <3216> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ51-52 <3217> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ53-54 <3218> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ55-56 <3219> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ57-58 <3220> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR13-14 <3221> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-102 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR15-16 <3222> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR17-18 <3223> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-78 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR19-20 <3224> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR27-28 <3225> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-18 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR29-30 <3226> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-6 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR31-32 <3227> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=6 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR33-34 <3228> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=18 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR35-36 <3229> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=30 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR37-38 <3230> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR39-40 <3231> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR41-42 <3232> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR43-44 <3233> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR45-46 <3234> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR47-48 <3235> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR49-50 <3236> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR51-52 <3237> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR53-54 <3238> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR55-56 <3239> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR57-58 <3240> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR59-60 <3241> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=174 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS04-06 <3242> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-153 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS07-09 <3243> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-135 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS10-12 <3244> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-117 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS13-15 <3245> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-99 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS16-18 <3246> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-81 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS19-21 <3247> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-63 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS25-27 <3248> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-27 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS28-30 <3249> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-9 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS31-33 <3250> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=9 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS34-36 <3251> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=27 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS37-39 <3252> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=45 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS40-42 <3253> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=63 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS43-45 <3254> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=81 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS46-48 <3255> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=99 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS49-51 <3256> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=117 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS52-54 <3257> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=135 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS55-57 <3258> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=153 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS58-60 <3259> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=171 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST01-04 <3260> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-168 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST05-08 <3261> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-144 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST09-12 <3262> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-120 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST13-16 <3263> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-96 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST17-20 <3264> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-72 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST21-24 <3265> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-48 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST25-28 <3266> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-24 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST29-32 <3267> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST33-36 <3268> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=24 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST37-40 <3269> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=48 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST41-44 <3270> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=72 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST45-48 <3271> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=96 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST49-52 <3272> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=120 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST53-56 <3273> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=144 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST57-60 <3274> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=168 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU01-05 <3275> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-165 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU06-10 <3276> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-135 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU11-15 <3277> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-105 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU16-20 <3278> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-75 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU21-25 <3279> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU26-30 <3280> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-15 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU31-35 <3281> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=15 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU36-40 <3282> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=45 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU41-45 <3283> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=75 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU46-50 <3284> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=105 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU51-55 <3285> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=135 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU56-60 <3286> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=165 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SV01-10 <3287> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SV11-20 <3288> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-90 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SV21-30 <3289> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-30 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SV31-40 <3290> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=30 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SV41-50 <3291> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=90 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SV51-60 <3292> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SW01-60 <3293> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / USGS Transantarctic Mountains <3294> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-78 +lon_0=162 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # Guam 1963 / Yap Islands # Unable to translate coordinate system EPSG:3295 into PROJ.4 format. # # RGPF / UTM zone 5S <3296> +proj=utm +zone=5 +south +ellps=GRS80 +units=m +no_defs <> # RGPF / UTM zone 6S <3297> +proj=utm +zone=6 +south +ellps=GRS80 +units=m +no_defs <> # RGPF / UTM zone 7S <3298> +proj=utm +zone=7 +south +ellps=GRS80 +units=m +no_defs <> # RGPF / UTM zone 8S <3299> +proj=utm +zone=8 +south +ellps=GRS80 +units=m +no_defs <> # Estonian Coordinate System of 1992 <3300> +proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +units=m +no_defs <> # Estonian Coordinate System of 1997 <3301> +proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # IGN63 Hiva Oa / UTM zone 7S <3302> +proj=utm +zone=7 +south +ellps=intl +units=m +no_defs <> # Fatu Iva 72 / UTM zone 7S <3303> +proj=utm +zone=7 +south +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +units=m +no_defs <> # Tahiti 79 / UTM zone 6S <3304> +proj=utm +zone=6 +south +ellps=intl +units=m +no_defs <> # Moorea 87 / UTM zone 6S <3305> +proj=utm +zone=6 +south +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +units=m +no_defs <> # Maupiti 83 / UTM zone 5S <3306> +proj=utm +zone=5 +south +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +units=m +no_defs <> # Nakhl-e Ghanem / UTM zone 39N <3307> +proj=utm +zone=39 +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0 +units=m +no_defs <> # GDA94 / NSW Lambert <3308> +proj=lcc +lat_1=-30.75 +lat_2=-35.75 +lat_0=-33.25 +lon_0=147 +x_0=9300000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD27 / California Albers <3309> +proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD83 / California Albers <3310> +proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(HARN) / California Albers <3311> +proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +units=m +no_defs <> # CSG67 / UTM zone 21N <3312> +proj=utm +zone=21 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs <> # RGFG95 / UTM zone 21N <3313> +proj=utm +zone=21 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +units=m +no_defs <> # Katanga 1955 / Katanga Lambert (deprecated) <3314> +proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=0 +lon_0=26 +x_0=0 +y_0=0 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <> # Katanga 1955 / Katanga TM (deprecated) <3315> +proj=tmerc +lat_0=-9 +lon_0=26 +k=0.9998 +x_0=0 +y_0=0 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <> # Kasai 1953 / Congo TM zone 22 <3316> +proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> # Kasai 1953 / Congo TM zone 24 <3317> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> # IGC 1962 / Congo TM zone 12 <3318> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> # IGC 1962 / Congo TM zone 14 <3319> +proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> # IGC 1962 / Congo TM zone 16 <3320> +proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> # IGC 1962 / Congo TM zone 18 <3321> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> # IGC 1962 / Congo TM zone 20 <3322> +proj=tmerc +lat_0=0 +lon_0=20 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> # IGC 1962 / Congo TM zone 22 <3323> +proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> # IGC 1962 / Congo TM zone 24 <3324> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> # IGC 1962 / Congo TM zone 26 <3325> +proj=tmerc +lat_0=0 +lon_0=26 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> # IGC 1962 / Congo TM zone 28 <3326> +proj=tmerc +lat_0=0 +lon_0=28 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> # IGC 1962 / Congo TM zone 30 <3327> +proj=tmerc +lat_0=0 +lon_0=30 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> # Pulkovo 1942(58) / GUGiK-80 <3328> +proj=sterea +lat_0=52.16666666666666 +lon_0=19.16666666666667 +k=0.999714 +x_0=500000 +y_0=500000 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 5 <3329> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 6 <3330> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 7 <3331> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 8 <3332> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / Gauss-Kruger zone 3 <3333> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / Gauss-Kruger zone 4 <3334> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / Gauss-Kruger zone 5 <3335> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs <> # IGN 1962 Kerguelen / UTM zone 42S <3336> +proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs <> # Le Pouce 1934 / Mauritius Grid <3337> +proj=lcc +lat_1=-20.19506944444445 +lat_0=-20.19506944444445 +lon_0=57.52182777777778 +k_0=1 +x_0=1000000 +y_0=1000000 +ellps=clrk80 +towgs84=-770.1,158.4,-498.2,0,0,0,0 +units=m +no_defs <> # NAD83 / Alaska Albers <3338> +proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # IGCB 1955 / Congo TM zone 12 <3339> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs <> # IGCB 1955 / Congo TM zone 14 <3340> +proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs <> # IGCB 1955 / Congo TM zone 16 <3341> +proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs <> # IGCB 1955 / UTM zone 33S <3342> +proj=utm +zone=33 +south +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs <> # Mauritania 1999 / UTM zone 28N <3343> +proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Mauritania 1999 / UTM zone 29N <3344> +proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Mauritania 1999 / UTM zone 30N <3345> +proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # LKS94 / Lithuania TM <3346> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Statistics Canada Lambert <3347> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(CSRS) / Statistics Canada Lambert <3348> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +units=m +no_defs <> # WGS 84 / PDC Mercator (deprecated) <3349> +proj=merc +lon_0=-150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # Pulkovo 1942 / CS63 zone C0 <3350> +proj=tmerc +lat_0=0.1 +lon_0=21.95 +k=1 +x_0=250000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / CS63 zone C1 <3351> +proj=tmerc +lat_0=0.1 +lon_0=24.95 +k=1 +x_0=1250000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / CS63 zone C2 <3352> +proj=tmerc +lat_0=0.1 +lon_0=27.95 +k=1 +x_0=2250000 +y_0=0 +ellps=krass +units=m +no_defs <> # Mhast (onshore) / UTM zone 32S <3353> +proj=utm +zone=32 +south +ellps=intl +units=m +no_defs <> # Mhast (offshore) / UTM zone 32S <3354> +proj=utm +zone=32 +south +ellps=intl +units=m +no_defs <> # Egypt Gulf of Suez S-650 TL / Red Belt <3355> +proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=810000 +ellps=helmert +towgs84=-146.21,112.63,4.05,0,0,0,0 +units=m +no_defs <> # Grand Cayman 1959 / UTM zone 17N <3356> +proj=utm +zone=17 +ellps=clrk66 +towgs84=67.8,106.1,138.8,0,0,0,0 +units=m +no_defs <> # Little Cayman 1961 / UTM zone 17N <3357> +proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs <> # NAD83(HARN) / North Carolina <3358> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / North Carolina (ftUS) (deprecated) <3359> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024385 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / South Carolina <3360> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / South Carolina (ft) <3361> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / Pennsylvania North <3362> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Pennsylvania North (ftUS) <3363> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Pennsylvania South <3364> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Pennsylvania South (ftUS) <3365> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # Hong Kong 1963 Grid System (deprecated) <3366> +proj=cass +lat_0=22.31213333333334 +lon_0=114.1785555555556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=6378293.645208759 +b=6356617.987679838 +units=m +no_defs <> # IGN Astro 1960 / UTM zone 28N <3367> +proj=utm +zone=28 +ellps=clrk80 +units=m +no_defs <> # IGN Astro 1960 / UTM zone 29N <3368> +proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs <> # IGN Astro 1960 / UTM zone 30N <3369> +proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs <> # NAD27 / UTM zone 59N <3370> +proj=utm +zone=59 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 60N <3371> +proj=utm +zone=60 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD83 / UTM zone 59N <3372> +proj=utm +zone=59 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 60N <3373> +proj=utm +zone=60 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # FD54 / UTM zone 29N <3374> +proj=utm +zone=29 +ellps=intl +units=m +no_defs <> # GDM2000 / Peninsula RSO <3375> +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257964666666 +k=0.99984 +x_0=804671 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # GDM2000 / East Malaysia BRSO <3376> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31580995 +k=0.99984 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # GDM2000 / Johor Grid <3377> +proj=cass +lat_0=2.121679744444445 +lon_0=103.4279362361111 +x_0=-14810.562 +y_0=8758.32 +ellps=GRS80 +units=m +no_defs <> # GDM2000 / Sembilan and Melaka Grid <3378> +proj=cass +lat_0=2.682347636111111 +lon_0=101.9749050416667 +x_0=3673.785 +y_0=-4240.573 +ellps=GRS80 +units=m +no_defs <> # GDM2000 / PahangGrid <3379> +proj=cass +lat_0=3.769388088888889 +lon_0=102.3682989833333 +x_0=-7368.228 +y_0=6485.858 +ellps=GRS80 +units=m +no_defs <> # GDM2000 / Selangor Grid <3380> +proj=cass +lat_0=3.68464905 +lon_0=101.3891079138889 +x_0=-34836.161 +y_0=56464.049 +ellps=GRS80 +units=m +no_defs <> # GDM2000 / Terengganu Grid <3381> +proj=cass +lat_0=4.9762852 +lon_0=103.070275625 +x_0=19594.245 +y_0=3371.895 +ellps=GRS80 +units=m +no_defs <> # GDM2000 / Pinang Grid <3382> +proj=cass +lat_0=5.421517541666667 +lon_0=100.3443769638889 +x_0=-23.414 +y_0=62.283 +ellps=GRS80 +units=m +no_defs <> # GDM2000 / Kedah and Perlis Grid <3383> +proj=cass +lat_0=5.964672713888889 +lon_0=100.6363711111111 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # GDM2000 / Perak Grid <3384> +proj=cass +lat_0=4.859063022222222 +lon_0=100.8154105861111 +x_0=-1.769 +y_0=133454.779 +ellps=GRS80 +units=m +no_defs <> # GDM2000 / Kelantan Grid <3385> +proj=cass +lat_0=5.972543658333334 +lon_0=102.2952416694444 +x_0=13227.851 +y_0=8739.894 +ellps=GRS80 +units=m +no_defs <> # KKJ / Finland zone 0 <3386> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> # KKJ / Finland zone 5 <3387> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=5500000 +y_0=0 +ellps=intl +units=m +no_defs <> # Pulkovo 1942 / Caspian Sea Mercator <3388> +proj=merc +lon_0=51 +k=1 +x_0=0 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 60 <3389> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 60 <3390> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Karbala 1979 / UTM zone 37N <3391> +proj=utm +zone=37 +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +units=m +no_defs <> # Karbala 1979 / UTM zone 38N <3392> +proj=utm +zone=38 +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +units=m +no_defs <> # Karbala 1979 / UTM zone 39N <3393> +proj=utm +zone=39 +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +units=m +no_defs <> # Nahrwan 1934 / Iraq zone <3394> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +units=m +no_defs <> # WGS 84 / World Mercator <3395> +proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # PD/83 / 3-degree Gauss-Kruger zone 3 <3396> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # PD/83 / 3-degree Gauss-Kruger zone 4 <3397> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # RD/83 / 3-degree Gauss-Kruger zone 4 <3398> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # RD/83 / 3-degree Gauss-Kruger zone 5 <3399> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # NAD83 / Alberta 10-TM (Forest) <3400> +proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alberta 10-TM (Resource) <3401> +proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(CSRS) / Alberta 10-TM (Forest) <3402> +proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / Alberta 10-TM (Resource) <3403> +proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / North Carolina (ftUS) <3404> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # VN-2000 / UTM zone 48N <3405> +proj=utm +zone=48 +ellps=WGS84 +units=m +no_defs <> # VN-2000 / UTM zone 49N <3406> +proj=utm +zone=49 +ellps=WGS84 +units=m +no_defs <> # Hong Kong 1963 Grid System <3407> +proj=cass +lat_0=22.31213333333334 +lon_0=114.1785555555556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.3047972654 +no_defs <> # unnamed <3408> +proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs <> # unnamed <3409> +proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs <> # NSIDC EASE-Grid Global <3410> +proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs <> # NSIDC Sea Ice Polar Stereographic North <3411> +proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs <> # NSIDC Sea Ice Polar Stereographic South <3412> +proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs <> # WGS 84 / NSIDC Sea Ice Polar Stereographic North <3413> +proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # SVY21 / Singapore TM <3414> +proj=tmerc +lat_0=1.366666666666667 +lon_0=103.8333333333333 +k=1 +x_0=28001.642 +y_0=38744.572 +ellps=WGS84 +units=m +no_defs <> # WGS 72BE / South China Sea Lambert <3415> +proj=lcc +lat_1=18 +lat_2=24 +lat_0=21 +lon_0=114 +x_0=500000 +y_0=500000 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # ETRS89 / Austria Lambert <3416> +proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m +no_defs <> # NAD83 / Iowa North (ft US) <3417> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Iowa South (ft US) <3418> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Kansas North (ft US) <3419> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Kansas South (ft US) <3420> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Nevada East (ft US) <3421> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Nevada Central (ft US) <3422> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Nevada West (ft US) <3423> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / New Jersey (ft US) <3424> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83(HARN) / Iowa North (ft US) <3425> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Iowa South (ft US) <3426> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Kansas North (ft US) <3427> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Kansas South (ft US) <3428> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Nevada East (ft US) <3429> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Nevada Central (ft US) <3430> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Nevada West (ft US) <3431> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / New Jersey (ft US) <3432> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83 / Arkansas North (ftUS) <3433> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Arkansas South (ftUS) <3434> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Illinois East (ftUS) <3435> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Illinois West (ftUS) <3436> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / New Hampshire (ftUS) <3437> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Rhode Island (ftUS) <3438> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # PSD93 / UTM zone 39N <3439> +proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs <> # PSD93 / UTM zone 40N <3440> +proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs <> # NAD83(HARN) / Arkansas North (ftUS) <3441> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Arkansas South (ftUS) <3442> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Illinois East (ftUS) <3443> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Illinois West (ftUS) <3444> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / New Hampshire (ftUS) <3445> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Rhode Island (ftUS) <3446> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # ETRS89 / Belgian Lambert 2005 <3447> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=50.797815 +lon_0=4.359215833333333 +x_0=150328 +y_0=166262 +ellps=GRS80 +units=m +no_defs <> # JAD2001 / Jamaica Metric Grid <3448> +proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=750000 +y_0=650000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JAD2001 / UTM zone 17N <3449> +proj=utm +zone=17 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JAD2001 / UTM zone 18N <3450> +proj=utm +zone=18 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Louisiana North (ftUS) <3451> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Louisiana South (ftUS) <3452> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Louisiana Offshore (ftUS) <3453> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / South Dakota North (ftUS) <3454> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / South Dakota South (ftUS) <3455> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83(HARN) / Louisiana North (ftUS) <3456> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Louisiana South (ftUS) <3457> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / South Dakota North (ftUS) <3458> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / South Dakota South (ftUS) <3459> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # Fiji 1986 / Fiji Map Grid <3460> +proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=2000000 +y_0=4000000 +ellps=WGS72 +units=m +no_defs <> # Dabola 1981 / UTM zone 28N <3461> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +units=m +no_defs <> # Dabola 1981 / UTM zone 29N <3462> +proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +units=m +no_defs <> # NAD83 / Maine CS2000 Central <3463> +proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(HARN) / Maine CS2000 Central <3464> +proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(NSRS2007) / Alabama East <3465> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Alabama West <3466> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Alaska Albers <3467> +proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Alaska zone 1 <3468> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Alaska zone 2 <3469> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Alaska zone 3 <3470> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Alaska zone 4 <3471> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Alaska zone 5 <3472> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Alaska zone 6 <3473> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Alaska zone 7 <3474> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Alaska zone 8 <3475> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Alaska zone 9 <3476> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Alaska zone 10 <3477> +proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Arizona Central <3478> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Arizona Central (ft) <3479> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / Arizona East <3480> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Arizona East (ft) <3481> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / Arizona West <3482> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Arizona West (ft) <3483> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / Arkansas North <3484> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Arkansas North (ftUS) <3485> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Arkansas South <3486> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Arkansas South (ftUS) <3487> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / California Albers <3488> +proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / California zone 1 <3489> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / California zone 1 (ftUS) <3490> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / California zone 2 <3491> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / California zone 2 (ftUS) <3492> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / California zone 3 <3493> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / California zone 3 (ftUS) <3494> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / California zone 4 <3495> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / California zone 4 (ftUS) <3496> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / California zone 5 <3497> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / California zone 5 (ftUS) <3498> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / California zone 6 <3499> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / California zone 6 (ftUS) <3500> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Colorado Central <3501> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Colorado Central (ftUS) <3502> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Colorado North <3503> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Colorado North (ftUS) <3504> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Colorado South <3505> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Colorado South (ftUS) <3506> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Connecticut <3507> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Connecticut (ftUS) <3508> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Delaware <3509> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Delaware (ftUS) <3510> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Florida East <3511> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Florida East (ftUS) <3512> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Florida GDL Albers <3513> +proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Florida North <3514> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Florida North (ftUS) <3515> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Florida West <3516> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Florida West (ftUS) <3517> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Georgia East <3518> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Georgia East (ftUS) <3519> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Georgia West <3520> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Georgia West (ftUS) <3521> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Idaho Central <3522> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Idaho Central (ftUS) <3523> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Idaho East <3524> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Idaho East (ftUS) <3525> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Idaho West <3526> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Idaho West (ftUS) <3527> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Illinois East <3528> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Illinois East (ftUS) <3529> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Illinois West <3530> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Illinois West (ftUS) <3531> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Indiana East <3532> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Indiana East (ftUS) <3533> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Indiana West <3534> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Indiana West (ftUS) <3535> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Iowa North <3536> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Iowa North (ft US) <3537> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Iowa South <3538> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Iowa South (ft US) <3539> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Kansas North <3540> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Kansas North (ft US) <3541> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Kansas South <3542> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Kansas South (ft US) <3543> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Kentucky North <3544> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Kentucky North (ftUS) <3545> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Kentucky Single Zone <3546> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Kentucky Single Zone (ftUS) <3547> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Kentucky South <3548> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Kentucky South (ftUS) <3549> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Louisiana North <3550> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Louisiana North (ftUS) <3551> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Louisiana South <3552> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Louisiana South (ftUS) <3553> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Maine CS2000 Central <3554> +proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Maine CS2000 East <3555> +proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Maine CS2000 West <3556> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Maine East <3557> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Maine West <3558> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Maryland <3559> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Utah North (ftUS) <3560> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # Old Hawaiian / Hawaii zone 1 <3561> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +units=us-ft +no_defs <> # Old Hawaiian / Hawaii zone 2 <3562> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +units=us-ft +no_defs <> # Old Hawaiian / Hawaii zone 3 <3563> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +units=us-ft +no_defs <> # Old Hawaiian / Hawaii zone 4 <3564> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +units=us-ft +no_defs <> # Old Hawaiian / Hawaii zone 5 <3565> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +units=us-ft +no_defs <> # NAD83 / Utah Central (ftUS) <3566> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Utah South (ftUS) <3567> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83(HARN) / Utah North (ftUS) <3568> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Utah Central (ftUS) <3569> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Utah South (ftUS) <3570> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +units=us-ft +no_defs <> # WGS 84 / North Pole LAEA Bering Sea <3571> +proj=laea +lat_0=90 +lon_0=180 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / North Pole LAEA Alaska <3572> +proj=laea +lat_0=90 +lon_0=-150 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / North Pole LAEA Canada <3573> +proj=laea +lat_0=90 +lon_0=-100 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / North Pole LAEA Atlantic <3574> +proj=laea +lat_0=90 +lon_0=-40 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / North Pole LAEA Europe <3575> +proj=laea +lat_0=90 +lon_0=10 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / North Pole LAEA Russia <3576> +proj=laea +lat_0=90 +lon_0=90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # GDA94 / Australian Albers <3577> +proj=aea +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=132 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Yukon Albers <3578> +proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(CSRS) / Yukon Albers <3579> +proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> # NAD83 / NWT Lambert <3580> +proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(CSRS) / NWT Lambert <3581> +proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(NSRS2007) / Maryland (ftUS) <3582> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Massachusetts Island <3583> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Massachusetts Island (ftUS) <3584> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Massachusetts Mainland <3585> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Massachusetts Mainland (ftUS) <3586> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Michigan Central <3587> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Michigan Central (ft) <3588> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / Michigan North <3589> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Michigan North (ft) <3590> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / Michigan Oblique Mercator <3591> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Michigan South <3592> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Michigan South (ft) <3593> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / Minnesota Central <3594> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Minnesota North <3595> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Minnesota South <3596> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Mississippi East <3597> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Mississippi East (ftUS) <3598> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Mississippi West <3599> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Mississippi West (ftUS) <3600> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Missouri Central <3601> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Missouri East <3602> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Missouri West <3603> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Montana <3604> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Montana (ft) <3605> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / Nebraska <3606> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Nevada Central <3607> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Nevada Central (ft US) <3608> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Nevada East <3609> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Nevada East (ft US) <3610> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Nevada West <3611> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Nevada West (ft US) <3612> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / New Hampshire <3613> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / New Hampshire (ftUS) <3614> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / New Jersey <3615> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / New Jersey (ft US) <3616> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / New Mexico Central <3617> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / New Mexico Central (ftUS) <3618> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / New Mexico East <3619> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / New Mexico East (ftUS) <3620> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / New Mexico West <3621> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / New Mexico West (ftUS) <3622> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / New York Central <3623> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / New York Central (ftUS) <3624> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / New York East <3625> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / New York East (ftUS) <3626> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / New York Long Island <3627> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / New York Long Island (ftUS) <3628> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / New York West <3629> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / New York West (ftUS) <3630> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / North Carolina <3631> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / North Carolina (ftUS) <3632> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / North Dakota North <3633> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / North Dakota North (ft) <3634> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / North Dakota South <3635> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / North Dakota South (ft) <3636> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / Ohio North <3637> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Ohio South <3638> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Oklahoma North <3639> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Oklahoma North (ftUS) <3640> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Oklahoma South <3641> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Oklahoma South (ftUS) <3642> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Oregon Lambert <3643> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Oregon Lambert (ft) <3644> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / Oregon North <3645> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Oregon North (ft) <3646> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / Oregon South <3647> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Oregon South (ft) <3648> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / Pennsylvania North <3649> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Pennsylvania North (ftUS) <3650> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Pennsylvania South <3651> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Pennsylvania South (ftUS) <3652> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Rhode Island <3653> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Rhode Island (ftUS) <3654> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / South Carolina <3655> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / South Carolina (ft) <3656> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / South Dakota North <3657> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / South Dakota North (ftUS) <3658> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / South Dakota South <3659> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / South Dakota South (ftUS) <3660> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Tennessee <3661> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Tennessee (ftUS) <3662> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Texas Central <3663> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Texas Central (ftUS) <3664> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Texas Centric Albers Equal Area <3665> +proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Texas Centric Lambert Conformal <3666> +proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Texas North <3667> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Texas North (ftUS) <3668> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Texas North Central <3669> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Texas North Central (ftUS) <3670> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Texas South <3671> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Texas South (ftUS) <3672> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Texas South Central <3673> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Texas South Central (ftUS) <3674> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Utah Central <3675> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Utah Central (ft) <3676> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / Utah Central (ftUS) <3677> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Utah North <3678> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Utah North (ft) <3679> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / Utah North (ftUS) <3680> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Utah South <3681> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Utah South (ft) <3682> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / Utah South (ftUS) <3683> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Vermont <3684> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Virginia North <3685> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Virginia North (ftUS) <3686> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Virginia South <3687> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Virginia South (ftUS) <3688> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Washington North <3689> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Washington North (ftUS) <3690> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Washington South <3691> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Washington South (ftUS) <3692> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / West Virginia North <3693> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / West Virginia South <3694> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Wisconsin Central <3695> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Wisconsin Central (ftUS) <3696> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Wisconsin North <3697> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Wisconsin North (ftUS) <3698> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Wisconsin South <3699> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Wisconsin South (ftUS) <3700> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Wisconsin Transverse Mercator <3701> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Wyoming East <3702> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Wyoming East Central <3703> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Wyoming West Central <3704> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Wyoming West <3705> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 59N <3706> +proj=utm +zone=59 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 60N <3707> +proj=utm +zone=60 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 1N <3708> +proj=utm +zone=1 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 2N <3709> +proj=utm +zone=2 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 3N <3710> +proj=utm +zone=3 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 4N <3711> +proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 5N <3712> +proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 6N <3713> +proj=utm +zone=6 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 7N <3714> +proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 8N <3715> +proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 9N <3716> +proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 10N <3717> +proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 11N <3718> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 12N <3719> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 13N <3720> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 14N <3721> +proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 15N <3722> +proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 16N <3723> +proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 17N <3724> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 18N <3725> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 19N <3726> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Reunion 1947 / TM Reunion <3727> +proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=160000 +y_0=50000 +ellps=intl +units=m +no_defs <> # NAD83(NSRS2007) / Ohio North (ftUS) <3728> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Ohio South (ftUS) <3729> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Wyoming East (ftUS) <3730> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Wyoming East Central (ftUS) <3731> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Wyoming West Central (ftUS) <3732> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Wyoming West (ftUS) <3733> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Ohio North (ftUS) <3734> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Ohio South (ftUS) <3735> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Wyoming East (ftUS) <3736> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Wyoming East Central (ftUS) <3737> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Wyoming West Central (ftUS) <3738> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Wyoming West (ftUS) <3739> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83(HARN) / UTM zone 10N <3740> +proj=utm +zone=10 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / UTM zone 11N <3741> +proj=utm +zone=11 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / UTM zone 12N <3742> +proj=utm +zone=12 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / UTM zone 13N <3743> +proj=utm +zone=13 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / UTM zone 14N <3744> +proj=utm +zone=14 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / UTM zone 15N <3745> +proj=utm +zone=15 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / UTM zone 16N <3746> +proj=utm +zone=16 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / UTM zone 17N <3747> +proj=utm +zone=17 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / UTM zone 18N <3748> +proj=utm +zone=18 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / UTM zone 19N <3749> +proj=utm +zone=19 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / UTM zone 4N <3750> +proj=utm +zone=4 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / UTM zone 5N <3751> +proj=utm +zone=5 +ellps=GRS80 +units=m +no_defs <> # WGS 84 / Mercator 41 (deprecated) <3752> +proj=merc +lon_0=100 +lat_ts=-41 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # NAD83(HARN) / Ohio North (ftUS) <3753> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Ohio South (ftUS) <3754> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Wyoming East (ftUS) <3755> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Wyoming East Central (ftUS) <3756> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Wyoming West Central (ftUS) <3757> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Wyoming West (ftUS) <3758> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83 / Hawaii zone 3 (ftUS) <3759> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83(HARN) / Hawaii zone 3 (ftUS) <3760> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(CSRS) / UTM zone 22N <3761> +proj=utm +zone=22 +ellps=GRS80 +units=m +no_defs <> # WGS 84 / South Georgia Lambert <3762> +proj=lcc +lat_1=-54 +lat_2=-54.75 +lat_0=-55 +lon_0=-37 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # ETRS89 / Portugal TM06 <3763> +proj=tmerc +lat_0=39.66825833333333 +lon_0=-8.133108333333334 +k=1 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NZGD2000 / Chatham Island Circuit 2000 <3764> +proj=tmerc +lat_0=-44 +lon_0=-176.5 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # HTRS96 / Croatia TM <3765> +proj=tmerc +lat_0=0 +lon_0=16.5 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # HTRS96 / Croatia LCC <3766> +proj=lcc +lat_1=45.91666666666666 +lat_2=43.08333333333334 +lat_0=0 +lon_0=16.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # HTRS96 / UTM zone 33N <3767> +proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # HTRS96 / UTM zone 34N <3768> +proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Bermuda 1957 / UTM zone 20N <3769> +proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs <> # BDA2000 / Bermuda 2000 National Grid <3770> +proj=tmerc +lat_0=32 +lon_0=-64.75 +k=1 +x_0=550000 +y_0=100000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD27 / Alberta 3TM ref merid 111 W <3771> +proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / Alberta 3TM ref merid 114 W <3772> +proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / Alberta 3TM ref merid 117 W <3773> +proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / Alberta 3TM ref merid 120 W (deprecated) <3774> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD83 / Alberta 3TM ref merid 111 W <3775> +proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alberta 3TM ref merid 114 W <3776> +proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alberta 3TM ref merid 117 W <3777> +proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alberta 3TM ref merid 120 W (deprecated) <3778> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(CSRS) / Alberta 3TM ref merid 111 W <3779> +proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / Alberta 3TM ref merid 114 W <3780> +proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / Alberta 3TM ref merid 117 W <3781> +proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / Alberta 3TM ref merid 120 W (deprecated) <3782> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # Pitcairn 2006 / Pitcairn TM 2006 <3783> +proj=tmerc +lat_0=-25.06855261111111 +lon_0=-130.1129671111111 +k=1 +x_0=14200 +y_0=15500 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Pitcairn 1967 / UTM zone 9S <3784> +proj=utm +zone=9 +south +ellps=intl +towgs84=185,165,42,0,0,0,0 +units=m +no_defs <> # Popular Visualisation CRS / Mercator (deprecated) <3785> +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs <> # World Equidistant Cylindrical (Sphere) (deprecated) <3786> +proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371007 +b=6371007 +units=m +no_defs <> # MGI / Slovene National Grid (deprecated) <3787> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # NZGD2000 / Auckland Islands TM 2000 <3788> +proj=tmerc +lat_0=0 +lon_0=166 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Campbell Island TM 2000 <3789> +proj=tmerc +lat_0=0 +lon_0=169 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Antipodes Islands TM 2000 <3790> +proj=tmerc +lat_0=0 +lon_0=179 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Raoul Island TM 2000 <3791> +proj=tmerc +lat_0=0 +lon_0=-178 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Chatham Islands TM 2000 <3793> +proj=tmerc +lat_0=0 +lon_0=-176.5 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Slovenia 1996 / Slovene National Grid <3794> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD27 / Cuba Norte <3795> +proj=lcc +lat_1=23 +lat_2=21.7 +lat_0=22.35 +lon_0=-81 +x_0=500000 +y_0=280296.016 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / Cuba Sur <3796> +proj=lcc +lat_1=21.3 +lat_2=20.13333333333333 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +x_0=500000 +y_0=229126.939 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / MTQ Lambert <3797> +proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD83 / MTQ Lambert <3798> +proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(CSRS) / MTQ Lambert <3799> +proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD27 / Alberta 3TM ref merid 120 W <3800> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD83 / Alberta 3TM ref merid 120 W <3801> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(CSRS) / Alberta 3TM ref merid 120 W <3802> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / Belgian Lambert 2008 <3812> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=50.797815 +lon_0=4.359215833333333 +x_0=649328 +y_0=665262 +ellps=GRS80 +units=m +no_defs <> # NAD83 / Mississippi TM <3814> +proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(HARN) / Mississippi TM <3815> +proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +units=m +no_defs <> # NAD83(NSRS2007) / Mississippi TM <3816> +proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # TWD97 / TM2 zone 119 <3825> +proj=tmerc +lat_0=0 +lon_0=119 +k=0.9999 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # TWD97 / TM2 zone 121 <3826> +proj=tmerc +lat_0=0 +lon_0=121 +k=0.9999 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # TWD67 / TM2 zone 119 <3827> +proj=tmerc +lat_0=0 +lon_0=119 +k=0.9999 +x_0=250000 +y_0=0 +ellps=aust_SA +units=m +no_defs <> # TWD67 / TM2 zone 121 <3828> +proj=tmerc +lat_0=0 +lon_0=121 +k=0.9999 +x_0=250000 +y_0=0 +ellps=aust_SA +units=m +no_defs <> # Hu Tzu Shan / UTM zone 51N <3829> +proj=utm +zone=51 +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +units=m +no_defs <> # WGS 84 / PDC Mercator <3832> +proj=merc +lon_0=150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # Pulkovo 1942(58) / Gauss-Kruger zone 2 <3833> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(83) / Gauss-Kruger zone 2 <3834> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(83) / Gauss-Kruger zone 3 <3835> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(83) / Gauss-Kruger zone 4 <3836> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 3 <3837> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 4 <3838> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 9 <3839> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 10 <3840> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 6 <3841> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 7 <3842> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 8 <3843> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / Stereo70 <3844> +proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 +y_0=500000 +ellps=krass +units=m +no_defs <> # SWEREF99 / RT90 7.5 gon V emulation <3845> +proj=tmerc +lat_0=0 +lon_0=11.30625 +k=1.000006 +x_0=1500025.141 +y_0=-667.282 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 / RT90 5 gon V emulation <3846> +proj=tmerc +lat_0=0 +lon_0=13.55626666666667 +k=1.0000058 +x_0=1500044.695 +y_0=-667.13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 / RT90 2.5 gon V emulation <3847> +proj=tmerc +lat_0=0 +lon_0=15.80628452944445 +k=1.00000561024 +x_0=1500064.274 +y_0=-667.711 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 / RT90 0 gon emulation <3848> +proj=tmerc +lat_0=0 +lon_0=18.0563 +k=1.0000054 +x_0=1500083.521 +y_0=-668.8440000000001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 / RT90 2.5 gon O emulation <3849> +proj=tmerc +lat_0=0 +lon_0=20.30631666666667 +k=1.0000052 +x_0=1500102.765 +y_0=-670.706 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 / RT90 5 gon O emulation <3850> +proj=tmerc +lat_0=0 +lon_0=22.55633333333333 +k=1.0000049 +x_0=1500121.846 +y_0=-672.557 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / NZCS2000 <3851> +proj=lcc +lat_1=-37.5 +lat_2=-44.5 +lat_0=-41 +lon_0=173 +x_0=3000000 +y_0=7000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RSRGD2000 / DGLC2000 <3852> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=157 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # County ST74 <3854> +proj=tmerc +lat_0=0 +lon_0=18.05787 +k=0.99999506 +x_0=100182.7406 +y_0=-6500620.1207 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # WGS 84 / Pseudo-Mercator <3857> +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs <> # IGRS / UTM zone 37N <3890> +proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # IGRS / UTM zone 38N <3891> +proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # IGRS / UTM zone 39N <3892> +proj=utm +zone=39 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ED50 / Iraq National Grid <3893> +proj=tmerc +lat_0=29.02626833333333 +lon_0=46.5 +k=0.9994 +x_0=800000 +y_0=0 +ellps=intl +units=m +no_defs <> # MGI 1901 / Balkans zone 5 <3907> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # MGI 1901 / Balkans zone 6 <3908> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=6500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # MGI 1901 / Balkans zone 7 <3909> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # MGI 1901 / Balkans zone 8 <3910> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=8500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # MGI 1901 / Slovenia Grid <3911> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # MGI 1901 / Slovene National Grid <3912> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=bessel +units=m +no_defs <> # Puerto Rico / UTM zone 20N <3920> +proj=utm +zone=20 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=m +no_defs <> # RGF93 / CC42 <3942> +proj=lcc +lat_1=41.25 +lat_2=42.75 +lat_0=42 +lon_0=3 +x_0=1700000 +y_0=1200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGF93 / CC43 <3943> +proj=lcc +lat_1=42.25 +lat_2=43.75 +lat_0=43 +lon_0=3 +x_0=1700000 +y_0=2200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGF93 / CC44 <3944> +proj=lcc +lat_1=43.25 +lat_2=44.75 +lat_0=44 +lon_0=3 +x_0=1700000 +y_0=3200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGF93 / CC45 <3945> +proj=lcc +lat_1=44.25 +lat_2=45.75 +lat_0=45 +lon_0=3 +x_0=1700000 +y_0=4200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGF93 / CC46 <3946> +proj=lcc +lat_1=45.25 +lat_2=46.75 +lat_0=46 +lon_0=3 +x_0=1700000 +y_0=5200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGF93 / CC47 <3947> +proj=lcc +lat_1=46.25 +lat_2=47.75 +lat_0=47 +lon_0=3 +x_0=1700000 +y_0=6200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGF93 / CC48 <3948> +proj=lcc +lat_1=47.25 +lat_2=48.75 +lat_0=48 +lon_0=3 +x_0=1700000 +y_0=7200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGF93 / CC49 <3949> +proj=lcc +lat_1=48.25 +lat_2=49.75 +lat_0=49 +lon_0=3 +x_0=1700000 +y_0=8200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGF93 / CC50 <3950> +proj=lcc +lat_1=49.25 +lat_2=50.75 +lat_0=50 +lon_0=3 +x_0=1700000 +y_0=9200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Virginia Lambert <3968> +proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(HARN) / Virginia Lambert <3969> +proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(NSRS2007) / Virginia Lambert <3970> +proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # WGS 84 / NSIDC EASE-Grid North # Unable to translate coordinate system EPSG:3973 into PROJ.4 format. # # WGS 84 / NSIDC EASE-Grid South # Unable to translate coordinate system EPSG:3974 into PROJ.4 format. # # WGS 84 / NSIDC EASE-Grid Global <3975> +proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / NSIDC Sea Ice Polar Stereographic South <3976> +proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # NAD83 / Canada Atlas Lambert <3978> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=49 +lon_0=-95 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(CSRS) / Canada Atlas Lambert <3979> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=49 +lon_0=-95 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # Katanga 1955 / Katanga Lambert <3985> +proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=9 +lon_0=26 +x_0=500000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <> # Katanga 1955 / Katanga Gauss zone A <3986> +proj=tmerc +lat_0=-9 +lon_0=30 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <> # Katanga 1955 / Katanga Gauss zone B <3987> +proj=tmerc +lat_0=-9 +lon_0=28 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <> # Katanga 1955 / Katanga Gauss zone C <3988> +proj=tmerc +lat_0=-9 +lon_0=26 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <> # Katanga 1955 / Katanga Gauss zone D <3989> +proj=tmerc +lat_0=-9 +lon_0=24 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <> # Puerto Rico State Plane CS of 1927 <3991> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=us-ft +no_defs <> # Puerto Rico / St. Croix <3992> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=30480.06096012192 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=us-ft +no_defs <> # Guam 1963 / Guam SPCS # Unable to translate coordinate system EPSG:3993 into PROJ.4 format. # # WGS 84 / Mercator 41 <3994> +proj=merc +lon_0=100 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / Arctic Polar Stereographic <3995> +proj=stere +lat_0=90 +lat_ts=71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / IBCAO Polar Stereographic <3996> +proj=stere +lat_0=90 +lat_ts=75 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / Dubai Local TM <3997> +proj=tmerc +lat_0=0 +lon_0=55.33333333333334 +k=1 +x_0=500000 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # MOLDREF99 / Moldova TM <4026> +proj=tmerc +lat_0=0 +lon_0=28.4 +k=0.9999400000000001 +x_0=200000 +y_0=-5000000 +ellps=GRS80 +units=m +no_defs <> # WGS 84 / TMzn35N <4037> +proj=utm +zone=35 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / TMzn36N <4038> +proj=utm +zone=36 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # RGRDC 2005 / Congo TM zone 12 <4048> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGRDC 2005 / Congo TM zone 14 <4049> +proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGRDC 2005 / Congo TM zone 16 <4050> +proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGRDC 2005 / Congo TM zone 18 <4051> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGRDC 2005 / Congo TM zone 20 <4056> +proj=tmerc +lat_0=0 +lon_0=20 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGRDC 2005 / Congo TM zone 22 <4057> +proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGRDC 2005 / Congo TM zone 24 <4058> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGRDC 2005 / Congo TM zone 26 <4059> +proj=tmerc +lat_0=0 +lon_0=26 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGRDC 2005 / Congo TM zone 28 <4060> +proj=tmerc +lat_0=0 +lon_0=28 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGRDC 2005 / UTM zone 33S <4061> +proj=utm +zone=33 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGRDC 2005 / UTM zone 34S <4062> +proj=utm +zone=34 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGRDC 2005 / UTM zone 35S <4063> +proj=utm +zone=35 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Chua / UTM zone 23S <4071> +proj=utm +zone=23 +south +ellps=intl +units=m +no_defs <> # REGCAN95 / UTM zone 27N <4082> +proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # REGCAN95 / UTM zone 28N <4083> +proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # WGS 84 / World Equidistant Cylindrical # Unable to translate coordinate system EPSG:4087 into PROJ.4 format. # # World Equidistant Cylindrical (Sphere) # Unable to translate coordinate system EPSG:4088 into PROJ.4 format. # # EPSG topocentric example A # Unable to translate coordinate system EPSG:5819 into PROJ.4 format. # # EPSG topocentric example B # Unable to translate coordinate system EPSG:5820 into PROJ.4 format. # # EPSG vertical perspective example # Unable to translate coordinate system EPSG:5821 into PROJ.4 format. # # Pulkovo 1995 / Gauss-Kruger zone 4 <20004> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 5 <20005> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 6 <20006> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 7 <20007> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 8 <20008> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 9 <20009> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 10 <20010> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 11 <20011> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 12 <20012> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 13 <20013> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 14 <20014> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 15 <20015> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 16 <20016> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 17 <20017> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 18 <20018> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 19 <20019> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 20 <20020> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 21 <20021> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 22 <20022> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 23 <20023> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 24 <20024> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 25 <20025> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 26 <20026> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 27 <20027> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 28 <20028> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 29 <20029> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 30 <20030> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 31 <20031> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 32 <20032> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 4N (deprecated) <20064> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 5N (deprecated) <20065> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 6N (deprecated) <20066> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 7N (deprecated) <20067> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 8N (deprecated) <20068> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 9N (deprecated) <20069> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 10N (deprecated) <20070> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 11N (deprecated) <20071> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 12N (deprecated) <20072> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 13N (deprecated) <20073> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 14N (deprecated) <20074> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 15N (deprecated) <20075> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 16N (deprecated) <20076> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 17N (deprecated) <20077> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 18N (deprecated) <20078> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 19N (deprecated) <20079> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 20N (deprecated) <20080> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 21N (deprecated) <20081> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 22N (deprecated) <20082> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 23N (deprecated) <20083> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 24N (deprecated) <20084> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 25N (deprecated) <20085> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 26N (deprecated) <20086> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 27N (deprecated) <20087> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 28N (deprecated) <20088> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 29N (deprecated) <20089> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 30N (deprecated) <20090> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 31N (deprecated) <20091> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 32N (deprecated) <20092> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Adindan / UTM zone 35N <20135> +proj=utm +zone=35 +ellps=clrk80 +units=m +no_defs <> # Adindan / UTM zone 36N <20136> +proj=utm +zone=36 +ellps=clrk80 +units=m +no_defs <> # Adindan / UTM zone 37N <20137> +proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs <> # Adindan / UTM zone 38N <20138> +proj=utm +zone=38 +ellps=clrk80 +units=m +no_defs <> # AGD66 / AMG zone 48 <20248> +proj=utm +zone=48 +south +ellps=aust_SA +units=m +no_defs <> # AGD66 / AMG zone 49 <20249> +proj=utm +zone=49 +south +ellps=aust_SA +units=m +no_defs <> # AGD66 / AMG zone 50 <20250> +proj=utm +zone=50 +south +ellps=aust_SA +units=m +no_defs <> # AGD66 / AMG zone 51 <20251> +proj=utm +zone=51 +south +ellps=aust_SA +units=m +no_defs <> # AGD66 / AMG zone 52 <20252> +proj=utm +zone=52 +south +ellps=aust_SA +units=m +no_defs <> # AGD66 / AMG zone 53 <20253> +proj=utm +zone=53 +south +ellps=aust_SA +units=m +no_defs <> # AGD66 / AMG zone 54 <20254> +proj=utm +zone=54 +south +ellps=aust_SA +units=m +no_defs <> # AGD66 / AMG zone 55 <20255> +proj=utm +zone=55 +south +ellps=aust_SA +units=m +no_defs <> # AGD66 / AMG zone 56 <20256> +proj=utm +zone=56 +south +ellps=aust_SA +units=m +no_defs <> # AGD66 / AMG zone 57 <20257> +proj=utm +zone=57 +south +ellps=aust_SA +units=m +no_defs <> # AGD66 / AMG zone 58 <20258> +proj=utm +zone=58 +south +ellps=aust_SA +units=m +no_defs <> # AGD84 / AMG zone 48 <20348> +proj=utm +zone=48 +south +ellps=aust_SA +units=m +no_defs <> # AGD84 / AMG zone 49 <20349> +proj=utm +zone=49 +south +ellps=aust_SA +units=m +no_defs <> # AGD84 / AMG zone 50 <20350> +proj=utm +zone=50 +south +ellps=aust_SA +units=m +no_defs <> # AGD84 / AMG zone 51 <20351> +proj=utm +zone=51 +south +ellps=aust_SA +units=m +no_defs <> # AGD84 / AMG zone 52 <20352> +proj=utm +zone=52 +south +ellps=aust_SA +units=m +no_defs <> # AGD84 / AMG zone 53 <20353> +proj=utm +zone=53 +south +ellps=aust_SA +units=m +no_defs <> # AGD84 / AMG zone 54 <20354> +proj=utm +zone=54 +south +ellps=aust_SA +units=m +no_defs <> # AGD84 / AMG zone 55 <20355> +proj=utm +zone=55 +south +ellps=aust_SA +units=m +no_defs <> # AGD84 / AMG zone 56 <20356> +proj=utm +zone=56 +south +ellps=aust_SA +units=m +no_defs <> # AGD84 / AMG zone 57 <20357> +proj=utm +zone=57 +south +ellps=aust_SA +units=m +no_defs <> # AGD84 / AMG zone 58 <20358> +proj=utm +zone=58 +south +ellps=aust_SA +units=m +no_defs <> # Ain el Abd / UTM zone 36N <20436> +proj=utm +zone=36 +ellps=intl +units=m +no_defs <> # Ain el Abd / UTM zone 37N <20437> +proj=utm +zone=37 +ellps=intl +units=m +no_defs <> # Ain el Abd / UTM zone 38N <20438> +proj=utm +zone=38 +ellps=intl +units=m +no_defs <> # Ain el Abd / UTM zone 39N <20439> +proj=utm +zone=39 +ellps=intl +units=m +no_defs <> # Ain el Abd / UTM zone 40N <20440> +proj=utm +zone=40 +ellps=intl +units=m +no_defs <> # Ain el Abd / Bahrain Grid <20499> +proj=utm +zone=39 +ellps=intl +units=m +no_defs <> # Afgooye / UTM zone 38N <20538> +proj=utm +zone=38 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs <> # Afgooye / UTM zone 39N <20539> +proj=utm +zone=39 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs <> # Lisbon (Lisbon) / Portuguese National Grid <20790> +proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=200000 +y_0=300000 +ellps=intl +pm=lisbon +units=m +no_defs <> # Lisbon (Lisbon) / Portuguese Grid <20791> +proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=0 +y_0=0 +ellps=intl +pm=lisbon +units=m +no_defs <> # Aratu / UTM zone 22S <20822> +proj=utm +zone=22 +south +ellps=intl +units=m +no_defs <> # Aratu / UTM zone 23S <20823> +proj=utm +zone=23 +south +ellps=intl +units=m +no_defs <> # Aratu / UTM zone 24S <20824> +proj=utm +zone=24 +south +ellps=intl +units=m +no_defs <> # Arc 1950 / UTM zone 34S <20934> +proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs <> # Arc 1950 / UTM zone 35S <20935> +proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs <> # Arc 1950 / UTM zone 36S <20936> +proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs <> # Arc 1960 / UTM zone 35S <21035> +proj=utm +zone=35 +south +ellps=clrk80 +units=m +no_defs <> # Arc 1960 / UTM zone 36S <21036> +proj=utm +zone=36 +south +ellps=clrk80 +units=m +no_defs <> # Arc 1960 / UTM zone 37S <21037> +proj=utm +zone=37 +south +ellps=clrk80 +units=m +no_defs <> # Arc 1960 / UTM zone 35N <21095> +proj=utm +zone=35 +ellps=clrk80 +units=m +no_defs <> # Arc 1960 / UTM zone 36N <21096> +proj=utm +zone=36 +ellps=clrk80 +units=m +no_defs <> # Arc 1960 / UTM zone 37N <21097> +proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs <> # Batavia (Jakarta) / NEIEZ (deprecated) <21100> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +pm=jakarta +units=m +no_defs <> # Batavia / UTM zone 48S <21148> +proj=utm +zone=48 +south +ellps=bessel +units=m +no_defs <> # Batavia / UTM zone 49S <21149> +proj=utm +zone=49 +south +ellps=bessel +units=m +no_defs <> # Batavia / UTM zone 50S <21150> +proj=utm +zone=50 +south +ellps=bessel +units=m +no_defs <> # Barbados 1938 / British West Indies Grid <21291> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +units=m +no_defs <> # Barbados 1938 / Barbados National Grid <21292> +proj=tmerc +lat_0=13.17638888888889 +lon_0=-59.55972222222222 +k=0.9999986 +x_0=30000 +y_0=75000 +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 13 <21413> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 14 <21414> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 15 <21415> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 16 <21416> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 17 <21417> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 18 <21418> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 19 <21419> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 20 <21420> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 21 <21421> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 22 <21422> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 23 <21423> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 75E <21453> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 81E <21454> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 87E <21455> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 93E <21456> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 99E <21457> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 105E <21458> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 111E <21459> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 117E <21460> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 123E <21461> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 129E <21462> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 135E <21463> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 13N (deprecated) <21473> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 14N (deprecated) <21474> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 15N (deprecated) <21475> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 16N (deprecated) <21476> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 17N (deprecated) <21477> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 18N (deprecated) <21478> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 19N (deprecated) <21479> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 20N (deprecated) <21480> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 21N (deprecated) <21481> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 22N (deprecated) <21482> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 23N (deprecated) <21483> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Belge 1950 (Brussels) / Belge Lambert 50 <21500> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=0 +x_0=150000 +y_0=5400000 +ellps=intl +pm=brussels +units=m +no_defs <> # Bern 1898 (Bern) / LV03C <21780> +proj=somerc +lat_0=46.95240555555556 +lon_0=0 +k_0=1 +x_0=0 +y_0=0 +ellps=bessel +pm=bern +units=m +no_defs <> # CH1903 / LV03 <21781> +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=600000 +y_0=200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs <> # CH1903 / LV03C-G <21782> +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs <> # Bogota 1975 / UTM zone 17N (deprecated) <21817> +proj=utm +zone=17 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> # Bogota 1975 / UTM zone 18N <21818> +proj=utm +zone=18 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> # Bogota 1975 / Colombia West zone (deprecated) <21891> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> # Bogota 1975 / Colombia Bogota zone (deprecated) <21892> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> # Bogota 1975 / Colombia East Central zone (deprecated) <21893> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> # Bogota 1975 / Colombia East (deprecated) <21894> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> # Bogota 1975 / Colombia West zone <21896> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> # Bogota 1975 / Colombia Bogota zone <21897> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> # Bogota 1975 / Colombia East Central zone <21898> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> # Bogota 1975 / Colombia East <21899> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> # Camacupa / UTM zone 32S <22032> +proj=utm +zone=32 +south +ellps=clrk80 +units=m +no_defs <> # Camacupa / UTM zone 33S <22033> +proj=utm +zone=33 +south +ellps=clrk80 +units=m +no_defs <> # Camacupa / TM 11.30 SE <22091> +proj=tmerc +lat_0=0 +lon_0=11.5 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> # Camacupa / TM 12 SE <22092> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> # POSGAR 98 / Argentina 1 <22171> +proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # POSGAR 98 / Argentina 2 <22172> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # POSGAR 98 / Argentina 3 <22173> +proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # POSGAR 98 / Argentina 4 <22174> +proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # POSGAR 98 / Argentina 5 <22175> +proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # POSGAR 98 / Argentina 6 <22176> +proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # POSGAR 98 / Argentina 7 <22177> +proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # POSGAR 94 / Argentina 1 <22181> +proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # POSGAR 94 / Argentina 2 <22182> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # POSGAR 94 / Argentina 3 <22183> +proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # POSGAR 94 / Argentina 4 <22184> +proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # POSGAR 94 / Argentina 5 <22185> +proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # POSGAR 94 / Argentina 6 <22186> +proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # POSGAR 94 / Argentina 7 <22187> +proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Campo Inchauspe / Argentina 1 <22191> +proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs <> # Campo Inchauspe / Argentina 2 <22192> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs <> # Campo Inchauspe / Argentina 3 <22193> +proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +units=m +no_defs <> # Campo Inchauspe / Argentina 4 <22194> +proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=intl +units=m +no_defs <> # Campo Inchauspe / Argentina 5 <22195> +proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=intl +units=m +no_defs <> # Campo Inchauspe / Argentina 6 <22196> +proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=intl +units=m +no_defs <> # Campo Inchauspe / Argentina 7 <22197> +proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=intl +units=m +no_defs <> # Cape / UTM zone 34S <22234> +proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs <> # Cape / UTM zone 35S <22235> +proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs <> # Cape / UTM zone 36S <22236> +proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs <> # Cape / Lo15 # Unable to translate coordinate system EPSG:22275 into PROJ.4 format. # # Cape / Lo17 # Unable to translate coordinate system EPSG:22277 into PROJ.4 format. # # Cape / Lo19 # Unable to translate coordinate system EPSG:22279 into PROJ.4 format. # # Cape / Lo21 # Unable to translate coordinate system EPSG:22281 into PROJ.4 format. # # Cape / Lo23 # Unable to translate coordinate system EPSG:22283 into PROJ.4 format. # # Cape / Lo25 # Unable to translate coordinate system EPSG:22285 into PROJ.4 format. # # Cape / Lo27 # Unable to translate coordinate system EPSG:22287 into PROJ.4 format. # # Cape / Lo29 # Unable to translate coordinate system EPSG:22289 into PROJ.4 format. # # Cape / Lo31 # Unable to translate coordinate system EPSG:22291 into PROJ.4 format. # # Cape / Lo33 # Unable to translate coordinate system EPSG:22293 into PROJ.4 format. # # Carthage (Paris) / Tunisia Mining Grid # Unable to translate coordinate system EPSG:22300 into PROJ.4 format. # # Carthage / UTM zone 32N <22332> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +datum=carthage +units=m +no_defs <> # Carthage / Nord Tunisie <22391> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=9.9 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +datum=carthage +units=m +no_defs <> # Carthage / Sud Tunisie <22392> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=9.9 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +datum=carthage +units=m +no_defs <> # Corrego Alegre / UTM zone 21S <22521> +proj=utm +zone=21 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs <> # Corrego Alegre / UTM zone 22S <22522> +proj=utm +zone=22 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs <> # Corrego Alegre / UTM zone 23S <22523> +proj=utm +zone=23 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs <> # Corrego Alegre / UTM zone 24S <22524> +proj=utm +zone=24 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs <> # Corrego Alegre / UTM zone 25S <22525> +proj=utm +zone=25 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs <> # Deir ez Zor / Levant Zone <22700> +proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs <> # Deir ez Zor / Syria Lambert <22770> +proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs <> # Deir ez Zor / Levant Stereographic <22780> +proj=sterea +lat_0=34.2 +lon_0=39.15 +k=0.9995341 +x_0=0 +y_0=0 +a=6378249.2 +b=6356515 +units=m +no_defs <> # Douala / UTM zone 32N (deprecated) <22832> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs <> # Egypt 1907 / Blue Belt <22991> +proj=tmerc +lat_0=30 +lon_0=35 +k=1 +x_0=300000 +y_0=1100000 +ellps=helmert +units=m +no_defs <> # Egypt 1907 / Red Belt <22992> +proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=810000 +ellps=helmert +units=m +no_defs <> # Egypt 1907 / Purple Belt <22993> +proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=200000 +ellps=helmert +units=m +no_defs <> # Egypt 1907 / Extended Purple Belt <22994> +proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=1200000 +ellps=helmert +units=m +no_defs <> # ED50 / UTM zone 28N <23028> +proj=utm +zone=28 +ellps=intl +units=m +no_defs <> # ED50 / UTM zone 29N <23029> +proj=utm +zone=29 +ellps=intl +units=m +no_defs <> # ED50 / UTM zone 30N <23030> +proj=utm +zone=30 +ellps=intl +units=m +no_defs <> # ED50 / UTM zone 31N <23031> +proj=utm +zone=31 +ellps=intl +units=m +no_defs <> # ED50 / UTM zone 32N <23032> +proj=utm +zone=32 +ellps=intl +units=m +no_defs <> # ED50 / UTM zone 33N <23033> +proj=utm +zone=33 +ellps=intl +units=m +no_defs <> # ED50 / UTM zone 34N <23034> +proj=utm +zone=34 +ellps=intl +units=m +no_defs <> # ED50 / UTM zone 35N <23035> +proj=utm +zone=35 +ellps=intl +units=m +no_defs <> # ED50 / UTM zone 36N <23036> +proj=utm +zone=36 +ellps=intl +units=m +no_defs <> # ED50 / UTM zone 37N <23037> +proj=utm +zone=37 +ellps=intl +units=m +no_defs <> # ED50 / UTM zone 38N <23038> +proj=utm +zone=38 +ellps=intl +units=m +no_defs <> # ED50 / TM 0 N <23090> +proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> # ED50 / TM 5 NE <23095> +proj=tmerc +lat_0=0 +lon_0=5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> # Fahud / UTM zone 39N <23239> +proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs <> # Fahud / UTM zone 40N <23240> +proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs <> # Garoua / UTM zone 33N (deprecated) <23433> +proj=utm +zone=33 +a=6378249.2 +b=6356515 +units=m +no_defs <> # HD72 / EOV <23700> +proj=somerc +lat_0=47.14439372222222 +lon_0=19.04857177777778 +k_0=0.99993 +x_0=650000 +y_0=200000 +ellps=GRS67 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 46.2 <23830> +proj=tmerc +lat_0=0 +lon_0=94.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 47.1 <23831> +proj=tmerc +lat_0=0 +lon_0=97.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 47.2 <23832> +proj=tmerc +lat_0=0 +lon_0=100.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 48.1 <23833> +proj=tmerc +lat_0=0 +lon_0=103.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 48.2 <23834> +proj=tmerc +lat_0=0 +lon_0=106.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 49.1 <23835> +proj=tmerc +lat_0=0 +lon_0=109.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 49.2 <23836> +proj=tmerc +lat_0=0 +lon_0=112.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 50.1 <23837> +proj=tmerc +lat_0=0 +lon_0=115.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 50.2 <23838> +proj=tmerc +lat_0=0 +lon_0=118.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 51.1 <23839> +proj=tmerc +lat_0=0 +lon_0=121.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 51.2 <23840> +proj=tmerc +lat_0=0 +lon_0=124.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 52.1 <23841> +proj=tmerc +lat_0=0 +lon_0=127.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 52.2 <23842> +proj=tmerc +lat_0=0 +lon_0=130.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 53.1 <23843> +proj=tmerc +lat_0=0 +lon_0=133.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 53.2 <23844> +proj=tmerc +lat_0=0 +lon_0=136.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 54.1 <23845> +proj=tmerc +lat_0=0 +lon_0=139.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ID74 / UTM zone 46N <23846> +proj=utm +zone=46 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # ID74 / UTM zone 47N <23847> +proj=utm +zone=47 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # ID74 / UTM zone 48N <23848> +proj=utm +zone=48 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # ID74 / UTM zone 49N <23849> +proj=utm +zone=49 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # ID74 / UTM zone 50N <23850> +proj=utm +zone=50 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # ID74 / UTM zone 51N <23851> +proj=utm +zone=51 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # ID74 / UTM zone 52N <23852> +proj=utm +zone=52 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # ID74 / UTM zone 53N (deprecated) <23853> +proj=utm +zone=53 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # DGN95 / UTM zone 46N <23866> +proj=utm +zone=46 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / UTM zone 47N <23867> +proj=utm +zone=47 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / UTM zone 48N <23868> +proj=utm +zone=48 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / UTM zone 49N <23869> +proj=utm +zone=49 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / UTM zone 50N <23870> +proj=utm +zone=50 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / UTM zone 51N <23871> +proj=utm +zone=51 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / UTM zone 52N <23872> +proj=utm +zone=52 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / UTM zone 47S <23877> +proj=utm +zone=47 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / UTM zone 48S <23878> +proj=utm +zone=48 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / UTM zone 49S <23879> +proj=utm +zone=49 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / UTM zone 50S <23880> +proj=utm +zone=50 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / UTM zone 51S <23881> +proj=utm +zone=51 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / UTM zone 52S <23882> +proj=utm +zone=52 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / UTM zone 53S <23883> +proj=utm +zone=53 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / UTM zone 54S <23884> +proj=utm +zone=54 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ID74 / UTM zone 46S (deprecated) <23886> +proj=utm +zone=46 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # ID74 / UTM zone 47S <23887> +proj=utm +zone=47 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # ID74 / UTM zone 48S <23888> +proj=utm +zone=48 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # ID74 / UTM zone 49S <23889> +proj=utm +zone=49 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # ID74 / UTM zone 50S <23890> +proj=utm +zone=50 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # ID74 / UTM zone 51S <23891> +proj=utm +zone=51 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # ID74 / UTM zone 52S <23892> +proj=utm +zone=52 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # ID74 / UTM zone 53S <23893> +proj=utm +zone=53 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # ID74 / UTM zone 54S <23894> +proj=utm +zone=54 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # Indian 1954 / UTM zone 46N <23946> +proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs <> # Indian 1954 / UTM zone 47N <23947> +proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs <> # Indian 1954 / UTM zone 48N <23948> +proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs <> # Indian 1975 / UTM zone 47N <24047> +proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> # Indian 1975 / UTM zone 48N <24048> +proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> # Jamaica 1875 / Jamaica (Old Grid) <24100> +proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=167638.49597 +y_0=121918.90616 +a=6378249.144808011 +b=6356514.966204134 +to_meter=0.3047972654 +no_defs <> # JAD69 / Jamaica National Grid <24200> +proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=250000 +y_0=150000 +ellps=clrk66 +units=m +no_defs <> # Kalianpur 1937 / UTM zone 45N <24305> +proj=utm +zone=45 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> # Kalianpur 1937 / UTM zone 46N <24306> +proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> # Kalianpur 1962 / UTM zone 41N <24311> +proj=utm +zone=41 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs <> # Kalianpur 1962 / UTM zone 42N <24312> +proj=utm +zone=42 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs <> # Kalianpur 1962 / UTM zone 43N <24313> +proj=utm +zone=43 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs <> # Kalianpur 1975 / UTM zone 42N <24342> +proj=utm +zone=42 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> # Kalianpur 1975 / UTM zone 43N <24343> +proj=utm +zone=43 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> # Kalianpur 1975 / UTM zone 44N <24344> +proj=utm +zone=44 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> # Kalianpur 1975 / UTM zone 45N <24345> +proj=utm +zone=45 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> # Kalianpur 1975 / UTM zone 46N <24346> +proj=utm +zone=46 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> # Kalianpur 1975 / UTM zone 47N <24347> +proj=utm +zone=47 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> # Kalianpur 1880 / India zone 0 <24370> +proj=lcc +lat_1=39.5 +lat_0=39.5 +lon_0=68 +k_0=0.99846154 +x_0=2153865.73916853 +y_0=2368292.194628102 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs <> # Kalianpur 1880 / India zone I <24371> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs <> # Kalianpur 1880 / India zone IIa <24372> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs <> # Kalianpur 1880 / India zone III <24373> +proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs <> # Kalianpur 1880 / India zone IV <24374> +proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs <> # Kalianpur 1937 / India zone IIb <24375> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743185.69 +y_0=914395.23 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> # Kalianpur 1962 / India zone I <24376> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs <> # Kalianpur 1962 / India zone IIa <24377> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs <> # Kalianpur 1975 / India zone I <24378> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> # Kalianpur 1975 / India zone IIa <24379> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> # Kalianpur 1975 / India zone IIb <24380> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> # Kalianpur 1975 / India zone III <24381> +proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> # Kalianpur 1880 / India zone IIb <24382> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs <> # Kalianpur 1975 / India zone IV <24383> +proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> # Kertau 1968 / Singapore Grid <24500> +proj=cass +lat_0=1.287646666666667 +lon_0=103.8530022222222 +x_0=30000 +y_0=30000 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs <> # Kertau 1968 / UTM zone 47N <24547> +proj=utm +zone=47 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs <> # Kertau 1968 / UTM zone 48N <24548> +proj=utm +zone=48 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs <> # Kertau / R.S.O. Malaya (ch) (deprecated) <24571> +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804671.2997750348 +y_0=0 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +to_meter=20.11678249437587 +no_defs <> # KOC Lambert <24600> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0,0,0,0 +units=m +no_defs <> # La Canoa / UTM zone 18N <24718> +proj=utm +zone=18 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs <> # La Canoa / UTM zone 19N <24719> +proj=utm +zone=19 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs <> # La Canoa / UTM zone 20N <24720> +proj=utm +zone=20 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs <> # PSAD56 / UTM zone 17N <24817> +proj=utm +zone=17 +ellps=intl +units=m +no_defs <> # PSAD56 / UTM zone 18N <24818> +proj=utm +zone=18 +ellps=intl +units=m +no_defs <> # PSAD56 / UTM zone 19N <24819> +proj=utm +zone=19 +ellps=intl +units=m +no_defs <> # PSAD56 / UTM zone 20N <24820> +proj=utm +zone=20 +ellps=intl +units=m +no_defs <> # PSAD56 / UTM zone 21N <24821> +proj=utm +zone=21 +ellps=intl +units=m +no_defs <> # PSAD56 / UTM zone 17S <24877> +proj=utm +zone=17 +south +ellps=intl +units=m +no_defs <> # PSAD56 / UTM zone 18S <24878> +proj=utm +zone=18 +south +ellps=intl +units=m +no_defs <> # PSAD56 / UTM zone 19S <24879> +proj=utm +zone=19 +south +ellps=intl +units=m +no_defs <> # PSAD56 / UTM zone 20S <24880> +proj=utm +zone=20 +south +ellps=intl +units=m +no_defs <> # PSAD56 / UTM zone 21S <24881> +proj=utm +zone=21 +south +ellps=intl +units=m +no_defs <> # PSAD56 / UTM zone 22S <24882> +proj=utm +zone=22 +south +ellps=intl +units=m +no_defs <> # PSAD56 / Peru west zone <24891> +proj=tmerc +lat_0=-6 +lon_0=-80.5 +k=0.99983008 +x_0=222000 +y_0=1426834.743 +ellps=intl +units=m +no_defs <> # PSAD56 / Peru central zone <24892> +proj=tmerc +lat_0=-9.5 +lon_0=-76 +k=0.99932994 +x_0=720000 +y_0=1039979.159 +ellps=intl +units=m +no_defs <> # PSAD56 / Peru east zone <24893> +proj=tmerc +lat_0=-9.5 +lon_0=-70.5 +k=0.99952992 +x_0=1324000 +y_0=1040084.558 +ellps=intl +units=m +no_defs <> # Leigon / Ghana Metre Grid <25000> +proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.51 +y_0=0 +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +units=m +no_defs <> # Lome / UTM zone 31N <25231> +proj=utm +zone=31 +a=6378249.2 +b=6356515 +units=m +no_defs <> # Luzon 1911 / Philippines zone I <25391> +proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # Luzon 1911 / Philippines zone II <25392> +proj=tmerc +lat_0=0 +lon_0=119 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # Luzon 1911 / Philippines zone III <25393> +proj=tmerc +lat_0=0 +lon_0=121 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # Luzon 1911 / Philippines zone IV <25394> +proj=tmerc +lat_0=0 +lon_0=123 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # Luzon 1911 / Philippines zone V <25395> +proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # Makassar (Jakarta) / NEIEZ (deprecated) <25700> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +units=m +no_defs <> # ETRS89 / UTM zone 28N <25828> +proj=utm +zone=28 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / UTM zone 29N <25829> +proj=utm +zone=29 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / UTM zone 30N <25830> +proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / UTM zone 31N <25831> +proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / UTM zone 32N <25832> +proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / UTM zone 33N <25833> +proj=utm +zone=33 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / UTM zone 34N <25834> +proj=utm +zone=34 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / UTM zone 35N <25835> +proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / UTM zone 36N <25836> +proj=utm +zone=36 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / UTM zone 37N <25837> +proj=utm +zone=37 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / UTM zone 38N <25838> +proj=utm +zone=38 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / TM Baltic93 <25884> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # Malongo 1987 / UTM zone 32S <25932> +proj=utm +zone=32 +south +ellps=intl +units=m +no_defs <> # Merchich / Nord Maroc <26191> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=-5.4 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs <> # Merchich / Sud Maroc <26192> +proj=lcc +lat_1=29.7 +lat_0=29.7 +lon_0=-5.4 +k_0=0.9996155960000001 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs <> # Merchich / Sahara (deprecated) <26193> +proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.9996 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs <> # Merchich / Sahara Nord <26194> +proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.999616304 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs <> # Merchich / Sahara Sud <26195> +proj=lcc +lat_1=22.5 +lat_0=22.5 +lon_0=-5.4 +k_0=0.999616437 +x_0=1500000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs <> # Massawa / UTM zone 37N <26237> +proj=utm +zone=37 +ellps=bessel +towgs84=639,405,60,0,0,0,0 +units=m +no_defs <> # Minna / UTM zone 31N <26331> +proj=utm +zone=31 +ellps=clrk80 +units=m +no_defs <> # Minna / UTM zone 32N <26332> +proj=utm +zone=32 +ellps=clrk80 +units=m +no_defs <> # Minna / Nigeria West Belt <26391> +proj=tmerc +lat_0=4 +lon_0=4.5 +k=0.99975 +x_0=230738.26 +y_0=0 +ellps=clrk80 +units=m +no_defs <> # Minna / Nigeria Mid Belt <26392> +proj=tmerc +lat_0=4 +lon_0=8.5 +k=0.99975 +x_0=670553.98 +y_0=0 +ellps=clrk80 +units=m +no_defs <> # Minna / Nigeria East Belt <26393> +proj=tmerc +lat_0=4 +lon_0=12.5 +k=0.99975 +x_0=1110369.7 +y_0=0 +ellps=clrk80 +units=m +no_defs <> # Mhast / UTM zone 32S (deprecated) <26432> +proj=utm +zone=32 +south +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +units=m +no_defs <> # Monte Mario (Rome) / Italy zone 1 (deprecated) <26591> +proj=tmerc +lat_0=0 +lon_0=-3.45233333333333 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +pm=rome +units=m +no_defs <> # Monte Mario (Rome) / Italy zone 2 (deprecated) <26592> +proj=tmerc +lat_0=0 +lon_0=2.54766666666666 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +pm=rome +units=m +no_defs <> # M'poraloko / UTM zone 32N <26632> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs <> # M'poraloko / UTM zone 32S <26692> +proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +units=m +no_defs <> # NAD27 / UTM zone 1N <26701> +proj=utm +zone=1 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 2N <26702> +proj=utm +zone=2 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 3N <26703> +proj=utm +zone=3 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 4N <26704> +proj=utm +zone=4 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 5N <26705> +proj=utm +zone=5 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 6N <26706> +proj=utm +zone=6 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 7N <26707> +proj=utm +zone=7 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 8N <26708> +proj=utm +zone=8 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 9N <26709> +proj=utm +zone=9 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 10N <26710> +proj=utm +zone=10 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 11N <26711> +proj=utm +zone=11 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 12N <26712> +proj=utm +zone=12 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 13N <26713> +proj=utm +zone=13 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 14N <26714> +proj=utm +zone=14 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 15N <26715> +proj=utm +zone=15 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 16N <26716> +proj=utm +zone=16 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 17N <26717> +proj=utm +zone=17 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 18N <26718> +proj=utm +zone=18 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 19N <26719> +proj=utm +zone=19 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 20N <26720> +proj=utm +zone=20 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 21N <26721> +proj=utm +zone=21 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 22N <26722> +proj=utm +zone=22 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / Alabama East <26729> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alabama West <26730> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alaska zone 1 <26731> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000.001016002 +y_0=-5000000.001016002 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alaska zone 2 <26732> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alaska zone 3 <26733> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alaska zone 4 <26734> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alaska zone 5 <26735> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alaska zone 6 <26736> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alaska zone 7 <26737> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=213360.4267208534 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alaska zone 8 <26738> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alaska zone 9 <26739> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alaska zone 10 <26740> +proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=914401.8288036576 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / California zone I <26741> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / California zone II <26742> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / California zone III <26743> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / California zone IV <26744> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / California zone V <26745> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / California zone VI <26746> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / California zone VII (deprecated) <26747> +proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=127079.524511049 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Arizona East <26748> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Arizona Central <26749> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Arizona West <26750> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Arkansas North <26751> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Arkansas South <26752> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Colorado North <26753> +proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Colorado Central <26754> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Colorado South <26755> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Connecticut <26756> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Delaware <26757> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Florida East <26758> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Florida West <26759> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Florida North <26760> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Georgia East <26766> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Georgia West <26767> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Idaho East <26768> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Idaho Central <26769> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Idaho West <26770> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Illinois East <26771> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Illinois West <26772> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Indiana East <26773> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Indiana West <26774> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Iowa North <26775> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Iowa South <26776> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Kansas North <26777> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Kansas South <26778> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Kentucky North <26779> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Kentucky South <26780> +proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Louisiana North <26781> +proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.66666666666667 +lon_0=-92.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Louisiana South <26782> +proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Maine East <26783> +proj=tmerc +lat_0=43.83333333333334 +lon_0=-68.5 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Maine West <26784> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Maryland <26785> +proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.83333333333334 +lon_0=-77 +x_0=243840.4876809754 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Massachusetts Mainland <26786> +proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Massachusetts Island <26787> +proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=60960.12192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Minnesota North <26791> +proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Minnesota Central <26792> +proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Minnesota South <26793> +proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Mississippi East <26794> +proj=tmerc +lat_0=29.66666666666667 +lon_0=-88.83333333333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Mississippi West <26795> +proj=tmerc +lat_0=30.5 +lon_0=-90.33333333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Missouri East <26796> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Missouri Central <26797> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Missouri West <26798> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / California zone VII <26799> +proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=1268253.006858014 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD Michigan / Michigan East <26801> +proj=tmerc +lat_0=41.5 +lon_0=-83.66666666666667 +k=0.999942857 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs <> # NAD Michigan / Michigan Old Central <26802> +proj=tmerc +lat_0=41.5 +lon_0=-85.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs <> # NAD Michigan / Michigan West <26803> +proj=tmerc +lat_0=41.5 +lon_0=-88.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs <> # NAD Michigan / Michigan North <26811> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs <> # NAD Michigan / Michigan Central <26812> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs <> # NAD Michigan / Michigan South <26813> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs <> # NAD83 / Maine East (ftUS) (deprecated) <26814> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Maine West (ftUS) (deprecated) <26815> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Minnesota North (ftUS) (deprecated) <26819> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Minnesota Central (ftUS) (deprecated) <26820> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Minnesota South (ftUS) (deprecated) <26821> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Nebraska (ftUS) (deprecated) <26822> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / West Virginia North (ftUS) (deprecated) <26823> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / West Virginia South (ftUS) (deprecated) <26824> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(HARN) / Maine East (ftUS) (deprecated) <26825> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Maine West (ftUS) (deprecated) <26826> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Minnesota North (ftUS) (deprecated) <26830> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Minnesota Central (ftUS) (deprecated) <26831> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Minnesota South (ftUS) (deprecated) <26832> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Nebraska (ftUS) (deprecated) <26833> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / West Virginia North (ftUS) (deprecated) <26834> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / West Virginia South (ftUS) (deprecated) <26835> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(NSRS2007) / Maine East (ftUS) (deprecated) <26836> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Maine West (ftUS) (deprecated) <26837> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Minnesota North (ftUS) (deprecated) <26841> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Minnesota Central (ftUS) (deprecated) <26842> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Minnesota South (ftUS) (deprecated) <26843> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Nebraska (ftUS) (deprecated) <26844> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / West Virginia North (ftUS) (deprecated) <26845> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / West Virginia South (ftUS) (deprecated) <26846> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Maine East (ftUS) <26847> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Maine West (ftUS) <26848> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Minnesota North (ftUS) <26849> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Minnesota Central (ftUS) <26850> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Minnesota South (ftUS) <26851> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Nebraska (ftUS) <26852> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / West Virginia North (ftUS) <26853> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / West Virginia South (ftUS) <26854> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83(HARN) / Maine East (ftUS) <26855> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Maine West (ftUS) <26856> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Minnesota North (ftUS) <26857> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Minnesota Central (ftUS) <26858> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Minnesota South (ftUS) <26859> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Nebraska (ftUS) <26860> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / West Virginia North (ftUS) <26861> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / West Virginia South (ftUS) <26862> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Maine East (ftUS) <26863> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Maine West (ftUS) <26864> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Minnesota North (ftUS) <26865> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Minnesota Central (ftUS) <26866> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Minnesota South (ftUS) <26867> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Nebraska (ftUS) <26868> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / West Virginia North (ftUS) <26869> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / West Virginia South (ftUS) <26870> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(CSRS) / MTM zone 11 <26891> +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 12 <26892> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 13 <26893> +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 14 <26894> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 15 <26895> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 16 <26896> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 17 <26897> +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 1 <26898> +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 2 <26899> +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83 / UTM zone 1N <26901> +proj=utm +zone=1 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 2N <26902> +proj=utm +zone=2 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 3N <26903> +proj=utm +zone=3 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 4N <26904> +proj=utm +zone=4 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 5N <26905> +proj=utm +zone=5 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 6N <26906> +proj=utm +zone=6 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 7N <26907> +proj=utm +zone=7 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 8N <26908> +proj=utm +zone=8 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 9N <26909> +proj=utm +zone=9 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 10N <26910> +proj=utm +zone=10 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 11N <26911> +proj=utm +zone=11 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 12N <26912> +proj=utm +zone=12 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 13N <26913> +proj=utm +zone=13 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 14N <26914> +proj=utm +zone=14 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 15N <26915> +proj=utm +zone=15 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 16N <26916> +proj=utm +zone=16 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 17N <26917> +proj=utm +zone=17 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 18N <26918> +proj=utm +zone=18 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 19N <26919> +proj=utm +zone=19 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 20N <26920> +proj=utm +zone=20 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 21N <26921> +proj=utm +zone=21 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 22N <26922> +proj=utm +zone=22 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 23N <26923> +proj=utm +zone=23 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alabama East <26929> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alabama West <26930> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alaska zone 1 <26931> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alaska zone 2 <26932> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alaska zone 3 <26933> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alaska zone 4 <26934> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alaska zone 5 <26935> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alaska zone 6 <26936> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alaska zone 7 <26937> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alaska zone 8 <26938> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alaska zone 9 <26939> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alaska zone 10 <26940> +proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / California zone 1 <26941> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / California zone 2 <26942> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / California zone 3 <26943> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / California zone 4 <26944> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / California zone 5 <26945> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / California zone 6 <26946> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Arizona East <26948> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Arizona Central <26949> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Arizona West <26950> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Arkansas North <26951> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Arkansas South <26952> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Colorado North <26953> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Colorado Central <26954> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Colorado South <26955> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Connecticut <26956> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Delaware <26957> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Florida East <26958> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Florida West <26959> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Florida North <26960> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Hawaii zone 1 <26961> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Hawaii zone 2 <26962> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Hawaii zone 3 <26963> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Hawaii zone 4 <26964> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Hawaii zone 5 <26965> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Georgia East <26966> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Georgia West <26967> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Idaho East <26968> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Idaho Central <26969> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Idaho West <26970> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Illinois East <26971> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Illinois West <26972> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Indiana East <26973> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Indiana West <26974> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Iowa North <26975> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Iowa South <26976> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Kansas North <26977> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Kansas South <26978> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Kentucky North (deprecated) <26979> +proj=lcc +lat_1=37.96666666666667 +lat_2=37.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Kentucky South <26980> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Louisiana North <26981> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Louisiana South <26982> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Maine East <26983> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Maine West <26984> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Maryland <26985> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Massachusetts Mainland <26986> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Massachusetts Island <26987> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Michigan North <26988> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Michigan Central <26989> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Michigan South <26990> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Minnesota North <26991> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Minnesota Central <26992> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Minnesota South <26993> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Mississippi East <26994> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Mississippi West <26995> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Missouri East <26996> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Missouri Central <26997> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Missouri West <26998> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # Nahrwan 1967 / UTM zone 37N <27037> +proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs <> # Nahrwan 1967 / UTM zone 38N <27038> +proj=utm +zone=38 +ellps=clrk80 +units=m +no_defs <> # Nahrwan 1967 / UTM zone 39N <27039> +proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs <> # Nahrwan 1967 / UTM zone 40N <27040> +proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs <> # Naparima 1972 / UTM zone 20N <27120> +proj=utm +zone=20 +ellps=intl +units=m +no_defs <> # NZGD49 / New Zealand Map Grid <27200> +proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Mount Eden Circuit <27205> +proj=tmerc +lat_0=-36.87986527777778 +lon_0=174.7643393611111 +k=0.9999 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Bay of Plenty Circuit <27206> +proj=tmerc +lat_0=-37.76124980555556 +lon_0=176.46619725 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Poverty Bay Circuit <27207> +proj=tmerc +lat_0=-38.62470277777778 +lon_0=177.8856362777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Hawkes Bay Circuit <27208> +proj=tmerc +lat_0=-39.65092930555556 +lon_0=176.6736805277778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Taranaki Circuit <27209> +proj=tmerc +lat_0=-39.13575830555556 +lon_0=174.22801175 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Tuhirangi Circuit <27210> +proj=tmerc +lat_0=-39.51247038888889 +lon_0=175.6400368055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Wanganui Circuit <27211> +proj=tmerc +lat_0=-40.24194713888889 +lon_0=175.4880996111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Wairarapa Circuit <27212> +proj=tmerc +lat_0=-40.92553263888889 +lon_0=175.6473496666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Wellington Circuit <27213> +proj=tmerc +lat_0=-41.30131963888888 +lon_0=174.7766231111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Collingwood Circuit <27214> +proj=tmerc +lat_0=-40.71475905555556 +lon_0=172.6720465 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Nelson Circuit <27215> +proj=tmerc +lat_0=-41.27454472222222 +lon_0=173.2993168055555 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Karamea Circuit <27216> +proj=tmerc +lat_0=-41.28991152777778 +lon_0=172.1090281944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Buller Circuit <27217> +proj=tmerc +lat_0=-41.81080286111111 +lon_0=171.5812600555556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Grey Circuit <27218> +proj=tmerc +lat_0=-42.33369427777778 +lon_0=171.5497713055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Amuri Circuit <27219> +proj=tmerc +lat_0=-42.68911658333333 +lon_0=173.0101333888889 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Marlborough Circuit <27220> +proj=tmerc +lat_0=-41.54448666666666 +lon_0=173.8020741111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Hokitika Circuit <27221> +proj=tmerc +lat_0=-42.88632236111111 +lon_0=170.9799935 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Okarito Circuit <27222> +proj=tmerc +lat_0=-43.11012813888889 +lon_0=170.2609258333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Jacksons Bay Circuit <27223> +proj=tmerc +lat_0=-43.97780288888889 +lon_0=168.606267 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Mount Pleasant Circuit <27224> +proj=tmerc +lat_0=-43.59063758333333 +lon_0=172.7271935833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Gawler Circuit <27225> +proj=tmerc +lat_0=-43.74871155555556 +lon_0=171.3607484722222 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Timaru Circuit <27226> +proj=tmerc +lat_0=-44.40222036111111 +lon_0=171.0572508333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Lindis Peak Circuit <27227> +proj=tmerc +lat_0=-44.73526797222222 +lon_0=169.4677550833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Mount Nicholas Circuit <27228> +proj=tmerc +lat_0=-45.13290258333333 +lon_0=168.3986411944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Mount York Circuit <27229> +proj=tmerc +lat_0=-45.56372616666666 +lon_0=167.7388617777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Observation Point Circuit <27230> +proj=tmerc +lat_0=-45.81619661111111 +lon_0=170.6285951666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / North Taieri Circuit <27231> +proj=tmerc +lat_0=-45.86151336111111 +lon_0=170.2825891111111 +k=0.99996 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Bluff Circuit <27232> +proj=tmerc +lat_0=-46.60000961111111 +lon_0=168.342872 +k=1 +x_0=300002.66 +y_0=699999.58 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / UTM zone 58S <27258> +proj=utm +zone=58 +south +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / UTM zone 59S <27259> +proj=utm +zone=59 +south +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / UTM zone 60S <27260> +proj=utm +zone=60 +south +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / North Island Grid <27291> +proj=tmerc +lat_0=-39 +lon_0=175.5 +k=1 +x_0=274319.5243848086 +y_0=365759.3658464114 +ellps=intl +datum=nzgd49 +to_meter=0.9143984146160287 +no_defs <> # NZGD49 / South Island Grid <27292> +proj=tmerc +lat_0=-44 +lon_0=171.5 +k=1 +x_0=457199.2073080143 +y_0=457199.2073080143 +ellps=intl +datum=nzgd49 +to_meter=0.9143984146160287 +no_defs <> # NGO 1948 (Oslo) / NGO zone I <27391> +proj=tmerc +lat_0=58 +lon_0=-4.666666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <> # NGO 1948 (Oslo) / NGO zone II <27392> +proj=tmerc +lat_0=58 +lon_0=-2.333333333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <> # NGO 1948 (Oslo) / NGO zone III <27393> +proj=tmerc +lat_0=58 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <> # NGO 1948 (Oslo) / NGO zone IV <27394> +proj=tmerc +lat_0=58 +lon_0=2.5 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <> # NGO 1948 (Oslo) / NGO zone V <27395> +proj=tmerc +lat_0=58 +lon_0=6.166666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <> # NGO 1948 (Oslo) / NGO zone VI <27396> +proj=tmerc +lat_0=58 +lon_0=10.16666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <> # NGO 1948 (Oslo) / NGO zone VII <27397> +proj=tmerc +lat_0=58 +lon_0=14.16666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <> # NGO 1948 (Oslo) / NGO zone VIII <27398> +proj=tmerc +lat_0=58 +lon_0=18.33333333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <> # Datum 73 / UTM zone 29N <27429> +proj=utm +zone=29 +ellps=intl +units=m +no_defs <> # Datum 73 / Modified Portuguese Grid (deprecated) <27492> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +units=m +no_defs <> # Datum 73 / Modified Portuguese Grid <27493> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +units=m +no_defs <> # unnamed <27500> +proj=lcc +lat_1=49.5 +lat_0=49.5 +lon_0=5.4 +k_0=0.99950908 +x_0=500000 +y_0=300000 +a=6376523 +b=6355862.933255573 +pm=2.3372291666985 +units=m +no_defs <> # NTF (Paris) / Lambert Nord France <27561> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / Lambert Centre France <27562> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / Lambert Sud France <27563> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / Lambert Corse <27564> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / Lambert zone I <27571> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / Lambert zone II <27572> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / Lambert zone III <27573> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / Lambert zone IV <27574> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / France I (deprecated) <27581> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / France II (deprecated) <27582> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / France III (deprecated) <27583> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / France IV (deprecated) <27584> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / Nord France (deprecated) <27591> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / Centre France (deprecated) <27592> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / Sud France (deprecated) <27593> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / Corse (deprecated) <27594> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # OSGB 1936 / British National Grid <27700> +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +datum=OSGB36 +units=m +no_defs <> # Palestine 1923 / Palestine Grid <28191> +proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs <> # Palestine 1923 / Palestine Belt <28192> +proj=tmerc +lat_0=31.73409694444445 +lon_0=35.21208055555556 +k=1 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs <> # Palestine 1923 / Israeli CS Grid <28193> +proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs <> # Pointe Noire / UTM zone 32S <28232> +proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +units=m +no_defs <> # GDA94 / MGA zone 48 <28348> +proj=utm +zone=48 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GDA94 / MGA zone 49 <28349> +proj=utm +zone=49 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GDA94 / MGA zone 50 <28350> +proj=utm +zone=50 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GDA94 / MGA zone 51 <28351> +proj=utm +zone=51 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GDA94 / MGA zone 52 <28352> +proj=utm +zone=52 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GDA94 / MGA zone 53 <28353> +proj=utm +zone=53 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GDA94 / MGA zone 54 <28354> +proj=utm +zone=54 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GDA94 / MGA zone 55 <28355> +proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GDA94 / MGA zone 56 <28356> +proj=utm +zone=56 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GDA94 / MGA zone 57 <28357> +proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GDA94 / MGA zone 58 <28358> +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 2 (deprecated) <28402> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 3 (deprecated) <28403> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 4 <28404> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 5 <28405> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 6 <28406> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 7 <28407> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 8 <28408> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 9 <28409> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 10 <28410> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 11 <28411> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 12 <28412> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 13 <28413> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 14 <28414> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 15 <28415> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 16 <28416> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 17 <28417> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 18 <28418> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 19 <28419> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 20 <28420> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 21 <28421> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 22 <28422> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 23 <28423> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 24 <28424> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 25 <28425> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 26 <28426> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 27 <28427> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 28 <28428> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 29 <28429> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 30 <28430> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 31 <28431> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 32 <28432> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 2N (deprecated) <28462> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 3N (deprecated) <28463> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 4N (deprecated) <28464> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 5N (deprecated) <28465> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 6N (deprecated) <28466> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 7N (deprecated) <28467> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 8N (deprecated) <28468> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 9N (deprecated) <28469> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 10N (deprecated) <28470> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 11N (deprecated) <28471> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 12N (deprecated) <28472> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 13N (deprecated) <28473> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 14N (deprecated) <28474> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 15N (deprecated) <28475> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 16N (deprecated) <28476> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 17N (deprecated) <28477> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 18N (deprecated) <28478> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 19N (deprecated) <28479> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 20N (deprecated) <28480> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 21N (deprecated) <28481> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 22N (deprecated) <28482> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 23N (deprecated) <28483> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 24N (deprecated) <28484> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 25N (deprecated) <28485> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 26N (deprecated) <28486> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 27N (deprecated) <28487> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 28N (deprecated) <28488> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 29N (deprecated) <28489> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 30N (deprecated) <28490> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 31N (deprecated) <28491> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 32N (deprecated) <28492> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Qatar 1974 / Qatar National Grid <28600> +proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.99999 +x_0=200000 +y_0=300000 +ellps=intl +units=m +no_defs <> # Amersfoort / RD Old <28991> +proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Amersfoort / RD New <28992> +proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +units=m +no_defs <> # SAD69 / Brazil Polyconic (deprecated) <29100> +proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=GRS67 +units=m +no_defs <> # SAD69 / Brazil Polyconic <29101> +proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=aust_SA +units=m +no_defs <> # SAD69 / UTM zone 18N (deprecated) <29118> +proj=utm +zone=18 +ellps=GRS67 +units=m +no_defs <> # SAD69 / UTM zone 19N (deprecated) <29119> +proj=utm +zone=19 +ellps=GRS67 +units=m +no_defs <> # SAD69 / UTM zone 20N (deprecated) <29120> +proj=utm +zone=20 +ellps=GRS67 +units=m +no_defs <> # SAD69 / UTM zone 21N (deprecated) <29121> +proj=utm +zone=21 +ellps=GRS67 +units=m +no_defs <> # SAD69 / UTM zone 22N (deprecated) <29122> +proj=utm +zone=22 +ellps=GRS67 +units=m +no_defs <> # SAD69 / UTM zone 18N <29168> +proj=utm +zone=18 +ellps=aust_SA +units=m +no_defs <> # SAD69 / UTM zone 19N <29169> +proj=utm +zone=19 +ellps=aust_SA +units=m +no_defs <> # SAD69 / UTM zone 20N <29170> +proj=utm +zone=20 +ellps=aust_SA +units=m +no_defs <> # SAD69 / UTM zone 21N <29171> +proj=utm +zone=21 +ellps=aust_SA +units=m +no_defs <> # SAD69 / UTM zone 22N <29172> +proj=utm +zone=22 +ellps=aust_SA +units=m +no_defs <> # SAD69 / UTM zone 17S (deprecated) <29177> +proj=utm +zone=17 +south +ellps=GRS67 +units=m +no_defs <> # SAD69 / UTM zone 18S (deprecated) <29178> +proj=utm +zone=18 +south +ellps=GRS67 +units=m +no_defs <> # SAD69 / UTM zone 19S (deprecated) <29179> +proj=utm +zone=19 +south +ellps=GRS67 +units=m +no_defs <> # SAD69 / UTM zone 20S (deprecated) <29180> +proj=utm +zone=20 +south +ellps=GRS67 +units=m +no_defs <> # SAD69 / UTM zone 21S (deprecated) <29181> +proj=utm +zone=21 +south +ellps=GRS67 +units=m +no_defs <> # SAD69 / UTM zone 22S (deprecated) <29182> +proj=utm +zone=22 +south +ellps=GRS67 +units=m +no_defs <> # SAD69 / UTM zone 23S (deprecated) <29183> +proj=utm +zone=23 +south +ellps=GRS67 +units=m +no_defs <> # SAD69 / UTM zone 24S (deprecated) <29184> +proj=utm +zone=24 +south +ellps=GRS67 +units=m +no_defs <> # SAD69 / UTM zone 25S (deprecated) <29185> +proj=utm +zone=25 +south +ellps=GRS67 +units=m +no_defs <> # SAD69 / UTM zone 17S <29187> +proj=utm +zone=17 +south +ellps=aust_SA +units=m +no_defs <> # SAD69 / UTM zone 18S <29188> +proj=utm +zone=18 +south +ellps=aust_SA +units=m +no_defs <> # SAD69 / UTM zone 19S <29189> +proj=utm +zone=19 +south +ellps=aust_SA +units=m +no_defs <> # SAD69 / UTM zone 20S <29190> +proj=utm +zone=20 +south +ellps=aust_SA +units=m +no_defs <> # SAD69 / UTM zone 21S <29191> +proj=utm +zone=21 +south +ellps=aust_SA +units=m +no_defs <> # SAD69 / UTM zone 22S <29192> +proj=utm +zone=22 +south +ellps=aust_SA +units=m +no_defs <> # SAD69 / UTM zone 23S <29193> +proj=utm +zone=23 +south +ellps=aust_SA +units=m +no_defs <> # SAD69 / UTM zone 24S <29194> +proj=utm +zone=24 +south +ellps=aust_SA +units=m +no_defs <> # SAD69 / UTM zone 25S <29195> +proj=utm +zone=25 +south +ellps=aust_SA +units=m +no_defs <> # Sapper Hill 1943 / UTM zone 20S <29220> +proj=utm +zone=20 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs <> # Sapper Hill 1943 / UTM zone 21S <29221> +proj=utm +zone=21 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs <> # Schwarzeck / UTM zone 33S <29333> +proj=utm +zone=33 +south +ellps=bess_nam +units=m +no_defs <> # Schwarzeck / Lo22/11 # Unable to translate coordinate system EPSG:29371 into PROJ.4 format. # # Schwarzeck / Lo22/13 # Unable to translate coordinate system EPSG:29373 into PROJ.4 format. # # Schwarzeck / Lo22/15 # Unable to translate coordinate system EPSG:29375 into PROJ.4 format. # # Schwarzeck / Lo22/17 # Unable to translate coordinate system EPSG:29377 into PROJ.4 format. # # Schwarzeck / Lo22/19 # Unable to translate coordinate system EPSG:29379 into PROJ.4 format. # # Schwarzeck / Lo22/21 # Unable to translate coordinate system EPSG:29381 into PROJ.4 format. # # Schwarzeck / Lo22/23 # Unable to translate coordinate system EPSG:29383 into PROJ.4 format. # # Schwarzeck / Lo22/25 # Unable to translate coordinate system EPSG:29385 into PROJ.4 format. # # Sudan / UTM zone 35N (deprecated) <29635> +proj=utm +zone=35 +a=6378249.2 +b=6356515 +units=m +no_defs <> # Sudan / UTM zone 36N (deprecated) <29636> +proj=utm +zone=36 +a=6378249.2 +b=6356515 +units=m +no_defs <> # Tananarive (Paris) / Laborde Grid (deprecated) <29700> +proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs <> # Tananarive (Paris) / Laborde Grid # Unable to translate coordinate system EPSG:29701 into PROJ.4 format. # # Tananarive (Paris) / Laborde Grid approximation <29702> +proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs <> # Tananarive / UTM zone 38S <29738> +proj=utm +zone=38 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs <> # Tananarive / UTM zone 39S <29739> +proj=utm +zone=39 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs <> # Timbalai 1948 / UTM zone 49N <29849> +proj=utm +zone=49 +ellps=evrstSS +units=m +no_defs <> # Timbalai 1948 / UTM zone 50N <29850> +proj=utm +zone=50 +ellps=evrstSS +units=m +no_defs <> # Timbalai 1948 / RSO Borneo (ch) <29871> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8714630401 +y_0=442857.653094361 +ellps=evrstSS +to_meter=20.11676512155263 +no_defs <> # Timbalai 1948 / RSO Borneo (ft) <29872> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8727431979 +y_0=442857.6545573985 +ellps=evrstSS +to_meter=0.3047994715386762 +no_defs <> # Timbalai 1948 / RSO Borneo (m) <29873> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.87 +y_0=442857.65 +ellps=evrstSS +units=m +no_defs <> # TM65 / Irish National Grid (deprecated) <29900> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +datum=ire65 +units=m +no_defs <> # OSNI 1952 / Irish National Grid <29901> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1 +x_0=200000 +y_0=250000 +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs <> # TM65 / Irish Grid <29902> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +datum=ire65 +units=m +no_defs <> # TM75 / Irish Grid <29903> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS I <30161> +proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS II <30162> +proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS III <30163> +proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS IV <30164> +proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS V <30165> +proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS VI <30166> +proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS VII <30167> +proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS VIII <30168> +proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS IX <30169> +proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS X <30170> +proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS XI <30171> +proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS XII <30172> +proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS XIII <30173> +proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS XIV <30174> +proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS XV <30175> +proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS XVI <30176> +proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS XVII <30177> +proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS XVIII <30178> +proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS XIX <30179> +proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Trinidad 1903 / Trinidad Grid <30200> +proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392051999 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.201166195164 +no_defs <> # TC(1948) / UTM zone 39N <30339> +proj=utm +zone=39 +ellps=helmert +units=m +no_defs <> # TC(1948) / UTM zone 40N <30340> +proj=utm +zone=40 +ellps=helmert +units=m +no_defs <> # Voirol 1875 / Nord Algerie (ancienne) <30491> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs <> # Voirol 1875 / Sud Algerie (ancienne) <30492> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs <> # Voirol 1879 / Nord Algerie (ancienne) <30493> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs <> # Voirol 1879 / Sud Algerie (ancienne) <30494> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs <> # Nord Sahara 1959 / UTM zone 29N <30729> +proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs <> # Nord Sahara 1959 / UTM zone 30N <30730> +proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs <> # Nord Sahara 1959 / UTM zone 31N <30731> +proj=utm +zone=31 +ellps=clrk80 +units=m +no_defs <> # Nord Sahara 1959 / UTM zone 32N <30732> +proj=utm +zone=32 +ellps=clrk80 +units=m +no_defs <> # Nord Sahara 1959 / Voirol Unifie Nord <30791> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m +no_defs <> # Nord Sahara 1959 / Voirol Unifie Sud <30792> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m +no_defs <> # RT38 2.5 gon W (deprecated) <30800> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # Yoff / UTM zone 28N <31028> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +units=m +no_defs <> # Zanderij / UTM zone 21N <31121> +proj=utm +zone=21 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs <> # Zanderij / TM 54 NW <31154> +proj=tmerc +lat_0=0 +lon_0=-54 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs <> # Zanderij / Suriname Old TM <31170> +proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs <> # Zanderij / Suriname TM <31171> +proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.9999 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs <> # MGI (Ferro) / Austria GK West Zone <31251> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +pm=ferro +units=m +no_defs <> # MGI (Ferro) / Austria GK Central Zone <31252> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +pm=ferro +units=m +no_defs <> # MGI (Ferro) / Austria GK East Zone <31253> +proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +pm=ferro +units=m +no_defs <> # MGI / Austria GK West <31254> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / Austria GK Central <31255> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / Austria GK East <31256> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / Austria GK M28 <31257> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / Austria GK M31 <31258> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / Austria GK M34 <31259> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / 3-degree Gauss zone 5 (deprecated) <31265> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / 3-degree Gauss zone 6 (deprecated) <31266> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / 3-degree Gauss zone 7 (deprecated) <31267> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / 3-degree Gauss zone 8 (deprecated) <31268> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / Balkans zone 5 (deprecated) <31275> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=5500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / Balkans zone 6 (deprecated) <31276> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=6500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / Balkans zone 7 (deprecated) <31277> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / Balkans zone 8 (deprecated) <31278> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / Balkans zone 8 (deprecated) <31279> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=8500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI (Ferro) / Austria West Zone <31281> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> # MGI (Ferro) / Austria Central Zone <31282> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> # MGI (Ferro) / Austria East Zone <31283> +proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> # MGI / Austria M28 <31284> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / Austria M31 <31285> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / Austria M34 <31286> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / Austria Lambert <31287> +proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI (Ferro) / M28 <31288> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> # MGI (Ferro) / M31 <31289> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> # MGI (Ferro) / M34 <31290> +proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> # MGI (Ferro) / Austria West Zone (deprecated) <31291> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> # MGI (Ferro) / Austria Central Zone (deprecated) <31292> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> # MGI (Ferro) / Austria East Zone (deprecated) <31293> +proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> # MGI / M28 (deprecated) <31294> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / M31 (deprecated) <31295> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / M34 (deprecated) <31296> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / Austria Lambert (deprecated) <31297> +proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # Belge 1972 / Belge Lambert 72 <31300> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=4.356939722222222 +x_0=150000.01256 +y_0=5400088.4378 +ellps=intl +towgs84=106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1 +units=m +no_defs <> # Belge 1972 / Belgian Lambert 72 <31370> +proj=lcc +lat_1=51.16666723333333 +lat_2=49.8333339 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.013 +y_0=5400088.438 +ellps=intl +towgs84=106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1 +units=m +no_defs <> # DHDN / 3-degree Gauss zone 1 (deprecated) <31461> +proj=tmerc +lat_0=0 +lon_0=3 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> # DHDN / 3-degree Gauss zone 2 (deprecated) <31462> +proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> # DHDN / 3-degree Gauss zone 3 (deprecated) <31463> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> # DHDN / 3-degree Gauss zone 4 (deprecated) <31464> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> # DHDN / 3-degree Gauss zone 5 (deprecated) <31465> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> # DHDN / 3-degree Gauss-Kruger zone 2 <31466> +proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> # DHDN / 3-degree Gauss-Kruger zone 3 <31467> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> # DHDN / 3-degree Gauss-Kruger zone 4 <31468> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> # DHDN / 3-degree Gauss-Kruger zone 5 <31469> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> # Conakry 1905 / UTM zone 28N <31528> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs <> # Conakry 1905 / UTM zone 29N <31529> +proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs <> # Dealul Piscului 1930 / Stereo 33 <31600> +proj=sterea +lat_0=45.9 +lon_0=25.39246588888889 +k=0.9996667 +x_0=500000 +y_0=500000 +ellps=intl +units=m +no_defs <> # Dealul Piscului 1970/ Stereo 70 (deprecated) <31700> +proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 +y_0=500000 +ellps=krass +units=m +no_defs <> # NGN / UTM zone 38N <31838> +proj=utm +zone=38 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +units=m +no_defs <> # NGN / UTM zone 39N <31839> +proj=utm +zone=39 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +units=m +no_defs <> # KUDAMS / KTM (deprecated) <31900> +proj=tmerc +lat_0=0 +lon_0=48 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # KUDAMS / KTM <31901> +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 11N <31965> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 12N <31966> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 13N <31967> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 14N <31968> +proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 15N <31969> +proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 16N <31970> +proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 17N <31971> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 18N <31972> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 19N <31973> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 20N <31974> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 21N <31975> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 22N <31976> +proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 17S <31977> +proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 18S <31978> +proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 19S <31979> +proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 20S <31980> +proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 21S <31981> +proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 22S <31982> +proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 23S <31983> +proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 24S <31984> +proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 25S <31985> +proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 1995 / UTM zone 17N <31986> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 1995 / UTM zone 18N <31987> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 1995 / UTM zone 19N <31988> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 1995 / UTM zone 20N <31989> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 1995 / UTM zone 21N <31990> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 1995 / UTM zone 22N <31991> +proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 1995 / UTM zone 17S <31992> +proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 1995 / UTM zone 18S <31993> +proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 1995 / UTM zone 19S <31994> +proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 1995 / UTM zone 20S <31995> +proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 1995 / UTM zone 21S <31996> +proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 1995 / UTM zone 22S <31997> +proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 1995 / UTM zone 23S <31998> +proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 1995 / UTM zone 24S <31999> +proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 1995 / UTM zone 25S <32000> +proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD27 / Montana North <32001> +proj=lcc +lat_1=48.71666666666667 +lat_2=47.85 +lat_0=47 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Montana Central <32002> +proj=lcc +lat_1=47.88333333333333 +lat_2=46.45 +lat_0=45.83333333333334 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Montana South <32003> +proj=lcc +lat_1=46.4 +lat_2=44.86666666666667 +lat_0=44 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Nebraska North <32005> +proj=lcc +lat_1=41.85 +lat_2=42.81666666666667 +lat_0=41.33333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Nebraska South <32006> +proj=lcc +lat_1=40.28333333333333 +lat_2=41.71666666666667 +lat_0=39.66666666666666 +lon_0=-99.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Nevada East <32007> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Nevada Central <32008> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Nevada West <32009> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / New Hampshire <32010> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / New Jersey <32011> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.66666666666667 +k=0.9999749999999999 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / New Mexico East <32012> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / New Mexico Central <32013> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / New Mexico West <32014> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / New York East <32015> +proj=tmerc +lat_0=40 +lon_0=-74.33333333333333 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / New York Central <32016> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / New York West <32017> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / New York Long Island <32018> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.5 +lon_0=-74 +x_0=304800.6096012192 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / North Carolina <32019> +proj=lcc +lat_1=34.33333333333334 +lat_2=36.16666666666666 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / North Dakota North <32020> +proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / North Dakota South <32021> +proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Ohio North <32022> +proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Ohio South <32023> +proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Oklahoma North <32024> +proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Oklahoma South <32025> +proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Oregon North <32026> +proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Oregon South <32027> +proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Pennsylvania North <32028> +proj=lcc +lat_1=40.88333333333333 +lat_2=41.95 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Pennsylvania South <32029> +proj=lcc +lat_1=39.93333333333333 +lat_2=40.8 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Rhode Island <32030> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.9999938 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / South Carolina North <32031> +proj=lcc +lat_1=33.76666666666667 +lat_2=34.96666666666667 +lat_0=33 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / South Carolina South <32033> +proj=lcc +lat_1=32.33333333333334 +lat_2=33.66666666666666 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / South Dakota North <32034> +proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / South Dakota South <32035> +proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Tennessee (deprecated) <32036> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=30480.06096012192 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Texas North <32037> +proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Texas North Central <32038> +proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-97.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Texas Central <32039> +proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Texas South Central <32040> +proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Texas South <32041> +proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Utah North <32042> +proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Utah Central <32043> +proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Utah South <32044> +proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Vermont <32045> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Virginia North <32046> +proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Virginia South <32047> +proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Washington North <32048> +proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Washington South <32049> +proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / West Virginia North <32050> +proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / West Virginia South <32051> +proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Wisconsin North <32052> +proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Wisconsin Central <32053> +proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Wisconsin South <32054> +proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Wyoming East <32055> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-105.1666666666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Wyoming East Central <32056> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-107.3333333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Wyoming West Central <32057> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-108.75 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Wyoming West <32058> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-110.0833333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Guatemala Norte <32061> +proj=lcc +lat_1=16.81666666666667 +lat_0=16.81666666666667 +lon_0=-90.33333333333333 +k_0=0.99992226 +x_0=500000 +y_0=292209.579 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / Guatemala Sur <32062> +proj=lcc +lat_1=14.9 +lat_0=14.9 +lon_0=-90.33333333333333 +k_0=0.99989906 +x_0=500000 +y_0=325992.681 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / BLM 14N (ftUS) <32064> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / BLM 15N (ftUS) <32065> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / BLM 16N (ftUS) <32066> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / BLM 17N (ftUS) <32067> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / BLM 14N (feet) (deprecated) <32074> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / BLM 15N (feet) (deprecated) <32075> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / BLM 16N (feet) (deprecated) <32076> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / BLM 17N (feet) (deprecated) <32077> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / MTM zone 1 <32081> +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / MTM zone 2 <32082> +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / MTM zone 3 <32083> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / MTM zone 4 <32084> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / MTM zone 5 <32085> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / MTM zone 6 <32086> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / Quebec Lambert <32098> +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / Louisiana Offshore <32099> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD83 / Montana <32100> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Nebraska <32104> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Nevada East <32107> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Nevada Central <32108> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Nevada West <32109> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / New Hampshire <32110> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / New Jersey <32111> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / New Mexico East <32112> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / New Mexico Central <32113> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / New Mexico West <32114> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / New York East <32115> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / New York Central <32116> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / New York West <32117> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / New York Long Island <32118> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / North Carolina <32119> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / North Dakota North <32120> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / North Dakota South <32121> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Ohio North <32122> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Ohio South <32123> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Oklahoma North <32124> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Oklahoma South <32125> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Oregon North <32126> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Oregon South <32127> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Pennsylvania North <32128> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Pennsylvania South <32129> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Rhode Island <32130> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / South Carolina <32133> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / South Dakota North <32134> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / South Dakota South <32135> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Tennessee <32136> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Texas North <32137> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Texas North Central <32138> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Texas Central <32139> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Texas South Central <32140> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Texas South <32141> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Utah North <32142> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Utah Central <32143> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Utah South <32144> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Vermont <32145> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Virginia North <32146> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Virginia South <32147> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Washington North <32148> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Washington South <32149> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / West Virginia North <32150> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / West Virginia South <32151> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Wisconsin North <32152> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Wisconsin Central <32153> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Wisconsin South <32154> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Wyoming East <32155> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Wyoming East Central <32156> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Wyoming West Central <32157> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Wyoming West <32158> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Puerto Rico & Virgin Is. <32161> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / BLM 14N (ftUS) <32164> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / BLM 15N (ftUS) <32165> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / BLM 16N (ftUS) <32166> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / BLM 17N (ftUS) <32167> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / SCoPQ zone 2 <32180> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 1 <32181> +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 2 <32182> +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 3 <32183> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 4 <32184> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 5 <32185> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 6 <32186> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 7 <32187> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 8 <32188> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 9 <32189> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 10 <32190> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 11 <32191> +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 12 <32192> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 13 <32193> +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 14 <32194> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 15 <32195> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 16 <32196> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 17 <32197> +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Quebec Lambert <32198> +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Louisiana Offshore <32199> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # WGS 72 / UTM zone 1N <32201> +proj=utm +zone=1 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 2N <32202> +proj=utm +zone=2 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 3N <32203> +proj=utm +zone=3 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 4N <32204> +proj=utm +zone=4 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 5N <32205> +proj=utm +zone=5 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 6N <32206> +proj=utm +zone=6 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 7N <32207> +proj=utm +zone=7 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 8N <32208> +proj=utm +zone=8 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 9N <32209> +proj=utm +zone=9 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 10N <32210> +proj=utm +zone=10 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 11N <32211> +proj=utm +zone=11 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 12N <32212> +proj=utm +zone=12 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 13N <32213> +proj=utm +zone=13 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 14N <32214> +proj=utm +zone=14 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 15N <32215> +proj=utm +zone=15 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 16N <32216> +proj=utm +zone=16 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 17N <32217> +proj=utm +zone=17 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 18N <32218> +proj=utm +zone=18 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 19N <32219> +proj=utm +zone=19 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 20N <32220> +proj=utm +zone=20 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 21N <32221> +proj=utm +zone=21 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 22N <32222> +proj=utm +zone=22 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 23N <32223> +proj=utm +zone=23 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 24N <32224> +proj=utm +zone=24 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 25N <32225> +proj=utm +zone=25 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 26N <32226> +proj=utm +zone=26 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 27N <32227> +proj=utm +zone=27 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 28N <32228> +proj=utm +zone=28 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 29N <32229> +proj=utm +zone=29 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 30N <32230> +proj=utm +zone=30 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 31N <32231> +proj=utm +zone=31 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 32N <32232> +proj=utm +zone=32 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 33N <32233> +proj=utm +zone=33 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 34N <32234> +proj=utm +zone=34 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 35N <32235> +proj=utm +zone=35 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 36N <32236> +proj=utm +zone=36 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 37N <32237> +proj=utm +zone=37 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 38N <32238> +proj=utm +zone=38 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 39N <32239> +proj=utm +zone=39 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 40N <32240> +proj=utm +zone=40 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 41N <32241> +proj=utm +zone=41 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 42N <32242> +proj=utm +zone=42 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 43N <32243> +proj=utm +zone=43 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 44N <32244> +proj=utm +zone=44 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 45N <32245> +proj=utm +zone=45 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 46N <32246> +proj=utm +zone=46 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 47N <32247> +proj=utm +zone=47 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 48N <32248> +proj=utm +zone=48 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 49N <32249> +proj=utm +zone=49 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 50N <32250> +proj=utm +zone=50 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 51N <32251> +proj=utm +zone=51 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 52N <32252> +proj=utm +zone=52 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 53N <32253> +proj=utm +zone=53 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 54N <32254> +proj=utm +zone=54 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 55N <32255> +proj=utm +zone=55 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 56N <32256> +proj=utm +zone=56 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 57N <32257> +proj=utm +zone=57 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 58N <32258> +proj=utm +zone=58 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 59N <32259> +proj=utm +zone=59 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 60N <32260> +proj=utm +zone=60 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 1S <32301> +proj=utm +zone=1 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 2S <32302> +proj=utm +zone=2 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 3S <32303> +proj=utm +zone=3 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 4S <32304> +proj=utm +zone=4 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 5S <32305> +proj=utm +zone=5 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 6S <32306> +proj=utm +zone=6 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 7S <32307> +proj=utm +zone=7 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 8S <32308> +proj=utm +zone=8 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 9S <32309> +proj=utm +zone=9 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 10S <32310> +proj=utm +zone=10 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 11S <32311> +proj=utm +zone=11 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 12S <32312> +proj=utm +zone=12 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 13S <32313> +proj=utm +zone=13 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 14S <32314> +proj=utm +zone=14 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 15S <32315> +proj=utm +zone=15 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 16S <32316> +proj=utm +zone=16 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 17S <32317> +proj=utm +zone=17 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 18S <32318> +proj=utm +zone=18 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 19S <32319> +proj=utm +zone=19 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 20S <32320> +proj=utm +zone=20 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 21S <32321> +proj=utm +zone=21 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 22S <32322> +proj=utm +zone=22 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 23S <32323> +proj=utm +zone=23 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 24S <32324> +proj=utm +zone=24 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 25S <32325> +proj=utm +zone=25 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 26S <32326> +proj=utm +zone=26 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 27S <32327> +proj=utm +zone=27 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 28S <32328> +proj=utm +zone=28 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 29S <32329> +proj=utm +zone=29 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 30S <32330> +proj=utm +zone=30 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 31S <32331> +proj=utm +zone=31 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 32S <32332> +proj=utm +zone=32 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 33S <32333> +proj=utm +zone=33 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 34S <32334> +proj=utm +zone=34 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 35S <32335> +proj=utm +zone=35 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 36S <32336> +proj=utm +zone=36 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 37S <32337> +proj=utm +zone=37 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 38S <32338> +proj=utm +zone=38 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 39S <32339> +proj=utm +zone=39 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 40S <32340> +proj=utm +zone=40 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 41S <32341> +proj=utm +zone=41 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 42S <32342> +proj=utm +zone=42 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 43S <32343> +proj=utm +zone=43 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 44S <32344> +proj=utm +zone=44 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 45S <32345> +proj=utm +zone=45 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 46S <32346> +proj=utm +zone=46 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 47S <32347> +proj=utm +zone=47 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 48S <32348> +proj=utm +zone=48 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 49S <32349> +proj=utm +zone=49 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 50S <32350> +proj=utm +zone=50 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 51S <32351> +proj=utm +zone=51 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 52S <32352> +proj=utm +zone=52 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 53S <32353> +proj=utm +zone=53 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 54S <32354> +proj=utm +zone=54 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 55S <32355> +proj=utm +zone=55 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 56S <32356> +proj=utm +zone=56 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 57S <32357> +proj=utm +zone=57 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 58S <32358> +proj=utm +zone=58 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 59S <32359> +proj=utm +zone=59 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 60S <32360> +proj=utm +zone=60 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72BE / UTM zone 1N <32401> +proj=utm +zone=1 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 2N <32402> +proj=utm +zone=2 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 3N <32403> +proj=utm +zone=3 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 4N <32404> +proj=utm +zone=4 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 5N <32405> +proj=utm +zone=5 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 6N <32406> +proj=utm +zone=6 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 7N <32407> +proj=utm +zone=7 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 8N <32408> +proj=utm +zone=8 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 9N <32409> +proj=utm +zone=9 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 10N <32410> +proj=utm +zone=10 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 11N <32411> +proj=utm +zone=11 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 12N <32412> +proj=utm +zone=12 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 13N <32413> +proj=utm +zone=13 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 14N <32414> +proj=utm +zone=14 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 15N <32415> +proj=utm +zone=15 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 16N <32416> +proj=utm +zone=16 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 17N <32417> +proj=utm +zone=17 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 18N <32418> +proj=utm +zone=18 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 19N <32419> +proj=utm +zone=19 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 20N <32420> +proj=utm +zone=20 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 21N <32421> +proj=utm +zone=21 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 22N <32422> +proj=utm +zone=22 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 23N <32423> +proj=utm +zone=23 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 24N <32424> +proj=utm +zone=24 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 25N <32425> +proj=utm +zone=25 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 26N <32426> +proj=utm +zone=26 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 27N <32427> +proj=utm +zone=27 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 28N <32428> +proj=utm +zone=28 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 29N <32429> +proj=utm +zone=29 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 30N <32430> +proj=utm +zone=30 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 31N <32431> +proj=utm +zone=31 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 32N <32432> +proj=utm +zone=32 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 33N <32433> +proj=utm +zone=33 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 34N <32434> +proj=utm +zone=34 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 35N <32435> +proj=utm +zone=35 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 36N <32436> +proj=utm +zone=36 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 37N <32437> +proj=utm +zone=37 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 38N <32438> +proj=utm +zone=38 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 39N <32439> +proj=utm +zone=39 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 40N <32440> +proj=utm +zone=40 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 41N <32441> +proj=utm +zone=41 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 42N <32442> +proj=utm +zone=42 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 43N <32443> +proj=utm +zone=43 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 44N <32444> +proj=utm +zone=44 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 45N <32445> +proj=utm +zone=45 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 46N <32446> +proj=utm +zone=46 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 47N <32447> +proj=utm +zone=47 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 48N <32448> +proj=utm +zone=48 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 49N <32449> +proj=utm +zone=49 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 50N <32450> +proj=utm +zone=50 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 51N <32451> +proj=utm +zone=51 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 52N <32452> +proj=utm +zone=52 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 53N <32453> +proj=utm +zone=53 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 54N <32454> +proj=utm +zone=54 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 55N <32455> +proj=utm +zone=55 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 56N <32456> +proj=utm +zone=56 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 57N <32457> +proj=utm +zone=57 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 58N <32458> +proj=utm +zone=58 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 59N <32459> +proj=utm +zone=59 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 60N <32460> +proj=utm +zone=60 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 1S <32501> +proj=utm +zone=1 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 2S <32502> +proj=utm +zone=2 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 3S <32503> +proj=utm +zone=3 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 4S <32504> +proj=utm +zone=4 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 5S <32505> +proj=utm +zone=5 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 6S <32506> +proj=utm +zone=6 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 7S <32507> +proj=utm +zone=7 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 8S <32508> +proj=utm +zone=8 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 9S <32509> +proj=utm +zone=9 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 10S <32510> +proj=utm +zone=10 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 11S <32511> +proj=utm +zone=11 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 12S <32512> +proj=utm +zone=12 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 13S <32513> +proj=utm +zone=13 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 14S <32514> +proj=utm +zone=14 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 15S <32515> +proj=utm +zone=15 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 16S <32516> +proj=utm +zone=16 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 17S <32517> +proj=utm +zone=17 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 18S <32518> +proj=utm +zone=18 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 19S <32519> +proj=utm +zone=19 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 20S <32520> +proj=utm +zone=20 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 21S <32521> +proj=utm +zone=21 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 22S <32522> +proj=utm +zone=22 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 23S <32523> +proj=utm +zone=23 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 24S <32524> +proj=utm +zone=24 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 25S <32525> +proj=utm +zone=25 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 26S <32526> +proj=utm +zone=26 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 27S <32527> +proj=utm +zone=27 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 28S <32528> +proj=utm +zone=28 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 29S <32529> +proj=utm +zone=29 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 30S <32530> +proj=utm +zone=30 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 31S <32531> +proj=utm +zone=31 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 32S <32532> +proj=utm +zone=32 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 33S <32533> +proj=utm +zone=33 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 34S <32534> +proj=utm +zone=34 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 35S <32535> +proj=utm +zone=35 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 36S <32536> +proj=utm +zone=36 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 37S <32537> +proj=utm +zone=37 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 38S <32538> +proj=utm +zone=38 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 39S <32539> +proj=utm +zone=39 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 40S <32540> +proj=utm +zone=40 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 41S <32541> +proj=utm +zone=41 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 42S <32542> +proj=utm +zone=42 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 43S <32543> +proj=utm +zone=43 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 44S <32544> +proj=utm +zone=44 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 45S <32545> +proj=utm +zone=45 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 46S <32546> +proj=utm +zone=46 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 47S <32547> +proj=utm +zone=47 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 48S <32548> +proj=utm +zone=48 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 49S <32549> +proj=utm +zone=49 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 50S <32550> +proj=utm +zone=50 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 51S <32551> +proj=utm +zone=51 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 52S <32552> +proj=utm +zone=52 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 53S <32553> +proj=utm +zone=53 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 54S <32554> +proj=utm +zone=54 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 55S <32555> +proj=utm +zone=55 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 56S <32556> +proj=utm +zone=56 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 57S <32557> +proj=utm +zone=57 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 58S <32558> +proj=utm +zone=58 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 59S <32559> +proj=utm +zone=59 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 60S <32560> +proj=utm +zone=60 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 84 / UTM grid system (northern hemisphere) # Unable to translate coordinate system EPSG:32600 into PROJ.4 format. # # WGS 84 / UTM zone 1N <32601> +proj=utm +zone=1 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 2N <32602> +proj=utm +zone=2 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 3N <32603> +proj=utm +zone=3 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 4N <32604> +proj=utm +zone=4 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 5N <32605> +proj=utm +zone=5 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 6N <32606> +proj=utm +zone=6 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 7N <32607> +proj=utm +zone=7 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 8N <32608> +proj=utm +zone=8 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 9N <32609> +proj=utm +zone=9 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 10N <32610> +proj=utm +zone=10 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 11N <32611> +proj=utm +zone=11 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 12N <32612> +proj=utm +zone=12 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 13N <32613> +proj=utm +zone=13 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 14N <32614> +proj=utm +zone=14 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 15N <32615> +proj=utm +zone=15 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 16N <32616> +proj=utm +zone=16 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 17N <32617> +proj=utm +zone=17 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 18N <32618> +proj=utm +zone=18 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 19N <32619> +proj=utm +zone=19 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 20N <32620> +proj=utm +zone=20 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 21N <32621> +proj=utm +zone=21 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 22N <32622> +proj=utm +zone=22 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 23N <32623> +proj=utm +zone=23 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 24N <32624> +proj=utm +zone=24 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 25N <32625> +proj=utm +zone=25 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 26N <32626> +proj=utm +zone=26 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 27N <32627> +proj=utm +zone=27 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 28N <32628> +proj=utm +zone=28 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 29N <32629> +proj=utm +zone=29 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 30N <32630> +proj=utm +zone=30 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 31N <32631> +proj=utm +zone=31 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 32N <32632> +proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 33N <32633> +proj=utm +zone=33 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 34N <32634> +proj=utm +zone=34 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 35N <32635> +proj=utm +zone=35 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 36N <32636> +proj=utm +zone=36 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 37N <32637> +proj=utm +zone=37 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 38N <32638> +proj=utm +zone=38 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 39N <32639> +proj=utm +zone=39 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 40N <32640> +proj=utm +zone=40 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 41N <32641> +proj=utm +zone=41 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 42N <32642> +proj=utm +zone=42 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 43N <32643> +proj=utm +zone=43 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 44N <32644> +proj=utm +zone=44 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 45N <32645> +proj=utm +zone=45 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 46N <32646> +proj=utm +zone=46 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 47N <32647> +proj=utm +zone=47 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 48N <32648> +proj=utm +zone=48 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 49N <32649> +proj=utm +zone=49 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 50N <32650> +proj=utm +zone=50 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 51N <32651> +proj=utm +zone=51 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 52N <32652> +proj=utm +zone=52 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 53N <32653> +proj=utm +zone=53 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 54N <32654> +proj=utm +zone=54 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 55N <32655> +proj=utm +zone=55 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 56N <32656> +proj=utm +zone=56 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 57N <32657> +proj=utm +zone=57 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 58N <32658> +proj=utm +zone=58 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 59N <32659> +proj=utm +zone=59 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 60N <32660> +proj=utm +zone=60 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UPS North <32661> +proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / Plate Carree (deprecated) <32662> +proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / World Equidistant Cylindrical (deprecated) # Unable to translate coordinate system EPSG:32663 into PROJ.4 format. # # WGS 84 / BLM 14N (ftUS) <32664> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=us-ft +no_defs <> # WGS 84 / BLM 15N (ftUS) <32665> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=us-ft +no_defs <> # WGS 84 / BLM 16N (ftUS) <32666> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=us-ft +no_defs <> # WGS 84 / BLM 17N (ftUS) <32667> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=us-ft +no_defs <> # WGS 84 / UTM grid system (southern hemisphere) # Unable to translate coordinate system EPSG:32700 into PROJ.4 format. # # WGS 84 / UTM zone 1S <32701> +proj=utm +zone=1 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 2S <32702> +proj=utm +zone=2 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 3S <32703> +proj=utm +zone=3 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 4S <32704> +proj=utm +zone=4 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 5S <32705> +proj=utm +zone=5 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 6S <32706> +proj=utm +zone=6 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 7S <32707> +proj=utm +zone=7 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 8S <32708> +proj=utm +zone=8 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 9S <32709> +proj=utm +zone=9 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 10S <32710> +proj=utm +zone=10 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 11S <32711> +proj=utm +zone=11 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 12S <32712> +proj=utm +zone=12 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 13S <32713> +proj=utm +zone=13 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 14S <32714> +proj=utm +zone=14 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 15S <32715> +proj=utm +zone=15 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 16S <32716> +proj=utm +zone=16 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 17S <32717> +proj=utm +zone=17 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 18S <32718> +proj=utm +zone=18 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 19S <32719> +proj=utm +zone=19 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 20S <32720> +proj=utm +zone=20 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 21S <32721> +proj=utm +zone=21 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 22S <32722> +proj=utm +zone=22 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 23S <32723> +proj=utm +zone=23 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 24S <32724> +proj=utm +zone=24 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 25S <32725> +proj=utm +zone=25 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 26S <32726> +proj=utm +zone=26 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 27S <32727> +proj=utm +zone=27 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 28S <32728> +proj=utm +zone=28 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 29S <32729> +proj=utm +zone=29 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 30S <32730> +proj=utm +zone=30 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 31S <32731> +proj=utm +zone=31 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 32S <32732> +proj=utm +zone=32 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 33S <32733> +proj=utm +zone=33 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 34S <32734> +proj=utm +zone=34 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 35S <32735> +proj=utm +zone=35 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 36S <32736> +proj=utm +zone=36 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 37S <32737> +proj=utm +zone=37 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 38S <32738> +proj=utm +zone=38 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 39S <32739> +proj=utm +zone=39 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 40S <32740> +proj=utm +zone=40 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 41S <32741> +proj=utm +zone=41 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 42S <32742> +proj=utm +zone=42 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 43S <32743> +proj=utm +zone=43 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 44S <32744> +proj=utm +zone=44 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 45S <32745> +proj=utm +zone=45 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 46S <32746> +proj=utm +zone=46 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 47S <32747> +proj=utm +zone=47 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 48S <32748> +proj=utm +zone=48 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 49S <32749> +proj=utm +zone=49 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 50S <32750> +proj=utm +zone=50 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 51S <32751> +proj=utm +zone=51 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 52S <32752> +proj=utm +zone=52 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 53S <32753> +proj=utm +zone=53 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 54S <32754> +proj=utm +zone=54 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 55S <32755> +proj=utm +zone=55 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 56S <32756> +proj=utm +zone=56 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 57S <32757> +proj=utm +zone=57 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 58S <32758> +proj=utm +zone=58 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 59S <32759> +proj=utm +zone=59 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 60S <32760> +proj=utm +zone=60 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UPS South <32761> +proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / TM 36 SE <32766> +proj=tmerc +lat_0=0 +lon_0=36 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> therion/extern/proj4/nad/esri0000644000076400010400000156547411076405004017302 0ustar userAdministrators# Anguilla 1957 / British West Indies Grid <2000> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs no_defs <> # Antigua 1943 / British West Indies Grid <2001> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-255,-15,71,0,0,0,0 +units=m +no_defs no_defs <> # Dominica 1945 / British West Indies Grid <2002> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +units=m +no_defs no_defs <> # Grenada 1953 / British West Indies Grid <2003> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +units=m +no_defs no_defs <> # Montserrat 58 / British West Indies Grid <2004> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +units=m +no_defs no_defs <> # St Kitts 1955 / British West Indies Grid <2005> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=9,183,236,0,0,0,0 +units=m +no_defs no_defs <> # St Lucia 1955 / British West Indies Grid <2006> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +units=m +no_defs no_defs <> # St Vincent 45 / British West Indies Grid <2007> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs no_defs <> # NAD27(CGQ77) / SCoPQ zone 2 <2008> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(CGQ77) / SCoPQ zone 3 <2009> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(CGQ77) / SCoPQ zone 4 <2010> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(CGQ77) / SCoPQ zone 5 <2011> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(CGQ77) / SCoPQ zone 6 <2012> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(CGQ77) / SCoPQ zone 7 <2013> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(CGQ77) / SCoPQ zone 8 <2014> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(CGQ77) / SCoPQ zone 9 <2015> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(CGQ77) / SCoPQ zone 10 <2016> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(76) / MTM zone 8 <2017> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(76) / MTM zone 9 <2018> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(76) / MTM zone 10 <2019> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(76) / MTM zone 11 <2020> +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(76) / MTM zone 12 <2021> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(76) / MTM zone 13 <2022> +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(76) / MTM zone 14 <2023> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(76) / MTM zone 15 <2024> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(76) / MTM zone 16 <2025> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(76) / MTM zone 17 <2026> +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(76) / UTM zone 15N <2027> +proj=utm +zone=15 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(76) / UTM zone 16N <2028> +proj=utm +zone=16 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(76) / UTM zone 17N <2029> +proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(76) / UTM zone 18N <2030> +proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(CGQ77) / UTM zone 17N <2031> +proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(CGQ77) / UTM zone 18N <2032> +proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(CGQ77) / UTM zone 19N <2033> +proj=utm +zone=19 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(CGQ77) / UTM zone 20N <2034> +proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(CGQ77) / UTM zone 21N <2035> +proj=utm +zone=21 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD83(CSRS98) / New Brunswick Stereo <2036> +proj=stere +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / UTM zone 19N <2037> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / UTM zone 20N <2038> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # Israel / Israeli TM Grid <2039> +proj=tmerc +lat_0=31.73439361111111 +lon_0=35.20451694444445 +k=1.000007 +x_0=219529.584 +y_0=626907.39 +ellps=GRS80 +units=m +no_defs no_defs <> # Locodjo 1965 / UTM zone 30N <2040> +proj=utm +zone=30 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs no_defs <> # Abidjan 1987 / UTM zone 30N <2041> +proj=utm +zone=30 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs no_defs <> # Locodjo 1965 / UTM zone 29N <2042> +proj=utm +zone=29 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs no_defs <> # Abidjan 1987 / UTM zone 29N <2043> +proj=utm +zone=29 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs no_defs <> # Hanoi 1972 / Gauss-Kruger zone 18 <2044> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs no_defs <> # Hanoi 1972 / Gauss-Kruger zone 19 <2045> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs no_defs <> # Hartebeesthoek94 / Lo15 # Hartebeesthoek94 / Lo17 # Hartebeesthoek94 / Lo19 # Hartebeesthoek94 / Lo21 # Hartebeesthoek94 / Lo23 # Hartebeesthoek94 / Lo25 # Hartebeesthoek94 / Lo27 # Hartebeesthoek94 / Lo29 # Hartebeesthoek94 / Lo31 # Hartebeesthoek94 / Lo33 # CH1903+ / LV95 <2056> +proj=omerc +lat_0=46.95240555555556 +lonc=7.439583333333333 +alpha=90 +k=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs no_defs <> # Rassadiran / Nakhl e Taqi <2057> +proj=omerc +lat_0=27.51882880555555 +lonc=52.60353916666667 +alpha=0.5716611944444444 +k=0.999895934 +x_0=658377.437 +y_0=3044969.194 +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +units=m +no_defs no_defs <> # ED50(ED77) / UTM zone 38N <2058> +proj=utm +zone=38 +ellps=intl +units=m +no_defs no_defs <> # ED50(ED77) / UTM zone 39N <2059> +proj=utm +zone=39 +ellps=intl +units=m +no_defs no_defs <> # ED50(ED77) / UTM zone 40N <2060> +proj=utm +zone=40 +ellps=intl +units=m +no_defs no_defs <> # ED50(ED77) / UTM zone 41N <2061> +proj=utm +zone=41 +ellps=intl +units=m +no_defs no_defs <> # Madrid 1870 (Madrid) / Spain <2062> +proj=lcc +lat_1=40 +lat_0=40 +lon_0=-3.687938888888889 +k_0=0.9988085293 +x_0=600000 +y_0=600000 +a=6378298.3 +b=6356657.142669562 +pm=madrid +units=m +no_defs no_defs <> # Dabola 1981 / UTM zone 28N <2063> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs no_defs <> # Dabola 1981 / UTM zone 29N <2064> +proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs no_defs <> # S-JTSK (Ferro) / Krovak <2065> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <> # Mount Dillon / Tobago Grid <2066> +proj=cass +lat_0=11.25217861111111 +lon_0=-60.68600888888889 +x_0=37718.66154375 +y_0=36209.915082 +a=6378293.63683822 +b=6356617.979337744 +to_meter=0.2011661949 +no_defs no_defs <> # Naparima 1955 / UTM zone 20N <2067> +proj=utm +zone=20 +ellps=intl +units=m +no_defs no_defs <> # ELD79 / Libya zone 5 <2068> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ELD79 / Libya zone 6 <2069> +proj=tmerc +lat_0=0 +lon_0=11 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ELD79 / Libya zone 7 <2070> +proj=tmerc +lat_0=0 +lon_0=13 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ELD79 / Libya zone 8 <2071> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ELD79 / Libya zone 9 <2072> +proj=tmerc +lat_0=0 +lon_0=17 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ELD79 / Libya zone 10 <2073> +proj=tmerc +lat_0=0 +lon_0=19 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ELD79 / Libya zone 11 <2074> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ELD79 / Libya zone 12 <2075> +proj=tmerc +lat_0=0 +lon_0=23 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ELD79 / Libya zone 13 <2076> +proj=tmerc +lat_0=0 +lon_0=25 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ELD79 / UTM zone 32N <2077> +proj=utm +zone=32 +ellps=intl +units=m +no_defs no_defs <> # ELD79 / UTM zone 33N <2078> +proj=utm +zone=33 +ellps=intl +units=m +no_defs no_defs <> # ELD79 / UTM zone 34N <2079> +proj=utm +zone=34 +ellps=intl +units=m +no_defs no_defs <> # ELD79 / UTM zone 35N <2080> +proj=utm +zone=35 +ellps=intl +units=m +no_defs no_defs <> # Chos Malal 1914 / Argentina zone 2 <2081> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # Pampa del Castillo / Argentina zone 2 <2082> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # Hito XVIII 1963 / Argentina zone 2 <2083> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=18.38,192.45,96.82,0.056,-0.142,-0.2,-0.0013 +units=m +no_defs no_defs <> # Hito XVIII 1963 / UTM zone 19S <2084> +proj=utm +zone=19 +south +ellps=intl +towgs84=18.38,192.45,96.82,0.056,-0.142,-0.2,-0.0013 +units=m +no_defs no_defs <> # NAD27 / Cuba Norte <2085> +proj=lcc +lat_1=22.35 +lat_0=22.35 +lon_0=-81 +k_0=0.99993602 +x_0=500000 +y_0=280296.016 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / Cuba Sur <2086> +proj=lcc +lat_1=20.71666666666667 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +k_0=0.99994848 +x_0=500000 +y_0=229126.939 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # ELD79 / TM 12 NE <2087> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.999600 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # Carthage / TM 11 NE <2088> +proj=tmerc +lat_0=0 +lon_0=11 +k=0.999600 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # Yemen NGN96 / UTM zone 38N <2089> +proj=utm +zone=38 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # Yemen NGN96 / UTM zone 39N <2090> +proj=utm +zone=39 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # South Yemen / Gauss Kruger zone 8 <2091> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs no_defs <> # South Yemen / Gauss Kruger zone 9 <2092> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs no_defs <> # Hanoi 1972 / GK 106 NE <2093> +proj=tmerc +lat_0=0 +lon_0=106 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs no_defs <> # WGS 72BE / TM 106 NE <2094> +proj=tmerc +lat_0=0 +lon_0=106 +k=0.999600 +x_0=500000 +y_0=0 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # Bissau / UTM zone 28N <2095> +proj=utm +zone=28 +ellps=intl +towgs84=-173,253,27,0,0,0,0 +units=m +no_defs no_defs <> # Korean 1985 / Korea East Belt <2096> +proj=tmerc +lat_0=38 +lon_0=129 +k=1.000000 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs no_defs <> # Korean 1985 / Korea Central Belt <2097> +proj=tmerc +lat_0=38 +lon_0=127 +k=1.000000 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs no_defs <> # Korean 1985 / Korea West Belt <2098> +proj=tmerc +lat_0=38 +lon_0=125 +k=1.000000 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs no_defs <> # Qatar 1948 / Qatar Grid <2099> +proj=cass +lat_0=25.38236111111111 +lon_0=50.76138888888889 +x_0=100000 +y_0=100000 +ellps=helmert +units=m +no_defs no_defs <> # GGRS87 / Greek Grid <2100> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999600 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +units=m +no_defs no_defs <> # Lake / Maracaibo Grid M1 <2101> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=0 +y_0=-52684.972 +ellps=intl +units=m +no_defs no_defs <> # Lake / Maracaibo Grid <2102> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=200000 +y_0=147315.028 +ellps=intl +units=m +no_defs no_defs <> # Lake / Maracaibo Grid M3 <2103> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=500000 +y_0=447315.028 +ellps=intl +units=m +no_defs no_defs <> # Lake / Maracaibo La Rosa Grid <2104> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=-17044 +y_0=-23139.97 +ellps=intl +units=m +no_defs no_defs <> # NZGD2000 / Mount Eden Circuit 2000 <2105> +proj=tmerc +lat_0=-36.87972222222222 +lon_0=174.7641666666667 +k=0.999900 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Bay of Plenty Circuit 2000 <2106> +proj=tmerc +lat_0=-37.76111111111111 +lon_0=176.4661111111111 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Poverty Bay Circuit 2000 <2107> +proj=tmerc +lat_0=-38.62444444444444 +lon_0=177.8855555555556 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Hawkes Bay Circuit 2000 <2108> +proj=tmerc +lat_0=-39.65083333333333 +lon_0=176.6736111111111 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Taranaki Circuit 2000 <2109> +proj=tmerc +lat_0=-39.13555555555556 +lon_0=174.2277777777778 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Tuhirangi Circuit 2000 <2110> +proj=tmerc +lat_0=-39.51222222222222 +lon_0=175.64 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Wanganui Circuit 2000 <2111> +proj=tmerc +lat_0=-40.24194444444444 +lon_0=175.4880555555555 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Wairarapa Circuit 2000 <2112> +proj=tmerc +lat_0=-40.92527777777777 +lon_0=175.6472222222222 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Wellington Circuit 2000 <2113> +proj=tmerc +lat_0=-41.3011111111111 +lon_0=174.7763888888889 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Collingwood Circuit 2000 <2114> +proj=tmerc +lat_0=-40.71472222222223 +lon_0=172.6719444444444 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Nelson Circuit 2000 <2115> +proj=tmerc +lat_0=-41.27444444444444 +lon_0=173.2991666666667 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Karamea Circuit 2000 <2116> +proj=tmerc +lat_0=-41.28972222222222 +lon_0=172.1088888888889 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Buller Circuit 2000 <2117> +proj=tmerc +lat_0=-41.81055555555555 +lon_0=171.5811111111111 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Grey Circuit 2000 <2118> +proj=tmerc +lat_0=-42.33361111111111 +lon_0=171.5497222222222 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Amuri Circuit 2000 <2119> +proj=tmerc +lat_0=-42.68888888888888 +lon_0=173.01 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Marlborough Circuit 2000 <2120> +proj=tmerc +lat_0=-41.54444444444444 +lon_0=173.8019444444444 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Hokitika Circuit 2000 <2121> +proj=tmerc +lat_0=-42.88611111111111 +lon_0=170.9797222222222 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Okarito Circuit 2000 <2122> +proj=tmerc +lat_0=-43.11 +lon_0=170.2608333333333 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Jacksons Bay Circuit 2000 <2123> +proj=tmerc +lat_0=-43.97777777777778 +lon_0=168.6061111111111 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Mount Pleasant Circuit 2000 <2124> +proj=tmerc +lat_0=-43.59055555555556 +lon_0=172.7269444444445 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Gawler Circuit 2000 <2125> +proj=tmerc +lat_0=-43.74861111111111 +lon_0=171.3605555555555 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Timaru Circuit 2000 <2126> +proj=tmerc +lat_0=-44.40194444444445 +lon_0=171.0572222222222 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Lindis Peak Circuit 2000 <2127> +proj=tmerc +lat_0=-44.735 +lon_0=169.4675 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Mount Nicholas Circuit 2000 <2128> +proj=tmerc +lat_0=-45.13277777777778 +lon_0=168.3986111111111 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Mount York Circuit 2000 <2129> +proj=tmerc +lat_0=-45.56361111111111 +lon_0=167.7386111111111 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Observation Point Circuit 2000 <2130> +proj=tmerc +lat_0=-45.81611111111111 +lon_0=170.6283333333333 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / North Taieri Circuit 2000 <2131> +proj=tmerc +lat_0=-45.86138888888889 +lon_0=170.2825 +k=0.999960 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Bluff Circuit 2000 <2132> +proj=tmerc +lat_0=-46.6 +lon_0=168.3427777777778 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / UTM zone 58S <2133> +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / UTM zone 59S <2134> +proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / UTM zone 60S <2135> +proj=utm +zone=60 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # Accra / Ghana National Grid <2136> +proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.999750 +x_0=274319.7391633579 +y_0=0 +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +to_meter=0.3047997101815088 +no_defs no_defs <> # Accra / TM 1 NW <2137> +proj=tmerc +lat_0=0 +lon_0=-1 +k=0.999600 +x_0=500000 +y_0=0 +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +units=m +no_defs no_defs <> # NAD27(CGQ77) / Quebec Lambert <2138> +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD83(CSRS98) / SCoPQ zone 2 <2139> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / MTM zone 3 <2140> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / MTM zone 4 <2141> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / MTM zone 5 <2142> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / MTM zone 6 <2143> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / MTM zone 7 <2144> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / MTM zone 8 <2145> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / MTM zone 9 <2146> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / MTM zone 10 <2147> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / UTM zone 21N <2148> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / UTM zone 18N <2149> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / UTM zone 17N <2150> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / UTM zone 13N <2151> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / UTM zone 12N <2152> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / UTM zone 11N <2153> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # RGF93 / Lambert-93 <2154> +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # American Samoa 1962 / American Samoa Lambert <2155> +proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / UTM zone 59S <2156> +proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # IRENET95 / Irish Transverse Mercator <2157> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=0.999820 +x_0=600000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # IRENET95 / UTM zone 29N <2158> +proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # Sierra Leone 1924 / New Colony Grid <2159> +proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1.000000 +x_0=152399.8550907544 +y_0=0 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs no_defs <> # Sierra Leone 1924 / New War Office Grid <2160> +proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1.000000 +x_0=243839.7681452071 +y_0=182879.8261089053 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs no_defs <> # Sierra Leone 1968 / UTM zone 28N <2161> +proj=utm +zone=28 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs no_defs <> # Sierra Leone 1968 / UTM zone 29N <2162> +proj=utm +zone=29 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs no_defs <> # US National Atlas Equal Area <2163> +proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +units=m +no_defs no_defs <> # Locodjo 1965 / TM 5 NW <2164> +proj=tmerc +lat_0=0 +lon_0=-5 +k=0.999600 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs no_defs <> # Abidjan 1987 / TM 5 NW <2165> +proj=tmerc +lat_0=0 +lon_0=-5 +k=0.999600 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs no_defs <> # Pulkovo 1942(83) / Gauss Kruger zone 3 <2166> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs no_defs <> # Pulkovo 1942(83) / Gauss Kruger zone 4 <2167> +proj=tmerc +lat_0=0 +lon_0=12 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs no_defs <> # Pulkovo 1942(83) / Gauss Kruger zone 5 <2168> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs no_defs <> # Luxembourg 1930 / Gauss <2169> +proj=tmerc +lat_0=49.83333333333334 +lon_0=6.166666666666667 +k=1.000000 +x_0=80000 +y_0=100000 +ellps=intl +towgs84=-193,13.7,-39.3,-0.41,-2.933,2.688,0.43 +units=m +no_defs no_defs <> # MGI / Slovenia Grid <2170> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999900 +x_0=500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Pulkovo 1942(58) / Poland zone I <2171> +proj=stere +lat_0=50.625 +lon_0=21.08333333333333 +k=0.999800 +x_0=4637000 +y_0=5647000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs no_defs <> # Pulkovo 1942(58) / Poland zone II <2172> +proj=stere +lat_0=53.00194444444445 +lon_0=21.50277777777778 +k=0.999800 +x_0=4603000 +y_0=5806000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs no_defs <> # Pulkovo 1942(58) / Poland zone III <2173> +proj=stere +lat_0=53.58333333333334 +lon_0=17.00833333333333 +k=0.999800 +x_0=3501000 +y_0=5999000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs no_defs <> # Pulkovo 1942(58) / Poland zone IV <2174> +proj=stere +lat_0=51.67083333333333 +lon_0=16.67222222222222 +k=0.999800 +x_0=3703000 +y_0=5627000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs no_defs <> # Pulkovo 1942(58) / Poland zone V <2175> +proj=tmerc +lat_0=0 +lon_0=18.95833333333333 +k=0.999983 +x_0=237000 +y_0=-4700000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs no_defs <> # ETRS89 / Poland CS2000 zone 5 <2176> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999923 +x_0=5500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / Poland CS2000 zone 6 <2177> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.999923 +x_0=6500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / Poland CS2000 zone 7 <2178> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.999923 +x_0=7500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / Poland CS2000 zone 8 <2179> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999923 +x_0=8500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / Poland CS92 <2180> +proj=tmerc +lat_0=0 +lon_0=19 +k=0.999300 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +units=m +no_defs no_defs <> # Azores Occidental 1939 / UTM zone 25N <2188> +proj=utm +zone=25 +ellps=intl +units=m +no_defs no_defs <> # Azores Central 1948 / UTM zone 26N <2189> +proj=utm +zone=26 +ellps=intl +units=m +no_defs no_defs <> # Azores Oriental 1940 / UTM zone 26N <2190> +proj=utm +zone=26 +ellps=intl +units=m +no_defs no_defs <> # Madeira 1936 / UTM zone 28N <2191> +proj=utm +zone=28 +ellps=intl +units=m +no_defs no_defs <> # ED50 / France EuroLambert <2192> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.337229166666667 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +ellps=intl +units=m +no_defs no_defs <> # NZGD2000 / New Zealand Transverse Mercator <2193> +proj=tmerc +lat_0=0 +lon_0=173 +k=0.999600 +x_0=1600000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # American Samoa 1962 / American Samoa Lambert <2194> +proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / UTM zone 2S <2195> +proj=utm +zone=2 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # ETRS89 / Kp2000 Jutland <2196> +proj=tmerc +lat_0=0 +lon_0=9.5 +k=0.999950 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / Kp2000 Zealand <2197> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.999950 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / Kp2000 Bornholm <2198> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> # Albanian 1987 / Gauss Kruger zone 4 <2199> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # ATS77 / New Brunswick Stereographic (ATS77) <2200> +proj=stere +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=300000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <> # REGVEN / UTM zone 18N <2201> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # REGVEN / UTM zone 19N <2202> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # REGVEN / UTM zone 20N <2203> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD27 / Tennessee <2204> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=609601.2192024384 +y_0=30480.06096012192 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Kentucky North <2205> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # ED50 / 3-degree Gauss-Kruger zone 9 <2206> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ED50 / 3-degree Gauss-Kruger zone 10 <2207> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=10500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ED50 / 3-degree Gauss-Kruger zone 11 <2208> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=11500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ED50 / 3-degree Gauss-Kruger zone 12 <2209> +proj=tmerc +lat_0=0 +lon_0=36 +k=1.000000 +x_0=12500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ED50 / 3-degree Gauss-Kruger zone 13 <2210> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=13500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ED50 / 3-degree Gauss-Kruger zone 14 <2211> +proj=tmerc +lat_0=0 +lon_0=42 +k=1.000000 +x_0=14500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ED50 / 3-degree Gauss-Kruger zone 15 <2212> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=15500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ETRS89 / TM 30 NE <2213> +proj=tmerc +lat_0=0 +lon_0=30 +k=0.999600 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> # Douala 1948 / AOF west <2214> +proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999000 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs no_defs <> # Manoca 1962 / UTM zone 32N <2215> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +units=m +no_defs no_defs <> # Qornoq 1927 / UTM zone 22N <2216> +proj=utm +zone=22 +ellps=intl +units=m +no_defs no_defs <> # Qornoq 1927 / UTM zone 23N <2217> +proj=utm +zone=23 +ellps=intl +units=m +no_defs no_defs <> # ATS77 / UTM zone 19N <2219> +proj=utm +zone=19 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <> # ATS77 / UTM zone 20N <2220> +proj=utm +zone=20 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <> # NAD83 / Arizona East (ft) <2222> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> # NAD83 / Arizona Central (ft) <2223> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> # NAD83 / Arizona West (ft) <2224> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> # NAD83 / California zone 1 (ftUS) <2225> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / California zone 2 (ftUS) <2226> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / California zone 3 (ftUS) <2227> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / California zone 4 (ftUS) <2228> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / California zone 5 (ftUS) <2229> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / California zone 6 (ftUS) <2230> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Colorado North (ftUS) <2231> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Colorado Central (ftUS) <2232> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Colorado South (ftUS) <2233> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Connecticut (ftUS) <2234> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Delaware (ftUS) <2235> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Florida East (ftUS) <2236> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Florida West (ftUS) <2237> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Florida North (ftUS) <2238> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Georgia East (ftUS) <2239> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Georgia West (ftUS) <2240> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Idaho East (ftUS) <2241> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Idaho Central (ftUS) <2242> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Idaho West (ftUS) <2243> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Indiana East (ftUS) <2244> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Indiana West (ftUS) <2245> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Kentucky North (ftUS) <2246> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Kentucky South (ftUS) <2247> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Maryland (ftUS) <2248> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Massachusetts Mainland (ftUS) <2249> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Massachusetts Island (ftUS) <2250> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Michigan North (ft) <2251> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> # NAD83 / Michigan Central (ft) <2252> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> # NAD83 / Michigan South (ft) <2253> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> # NAD83 / Mississippi East (ftUS) <2254> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Mississippi West (ftUS) <2255> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Montana (ft) <2256> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> # NAD83 / New Mexico East (ftUS) <2257> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / New Mexico Central (ftUS) <2258> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / New Mexico West (ftUS) <2259> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / New York East (ftUS) <2260> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / New York Central (ftUS) <2261> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / New York West (ftUS) <2262> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / New York Long Island (ftUS) <2263> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / North Carolina (ftUS) <2264> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / North Dakota North (ft) <2265> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> # NAD83 / North Dakota South (ft) <2266> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> # NAD83 / Oklahoma North (ftUS) <2267> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Oklahoma South (ftUS) <2268> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Oregon North (ft) <2269> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> # NAD83 / Oregon South (ft) <2270> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> # NAD83 / Pennsylvania North (ftUS) <2271> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Pennsylvania South (ftUS) <2272> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / South Carolina (ft) <2273> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> # NAD83 / Tennessee (ftUS) <2274> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Texas North (ftUS) <2275> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Texas North Central (ftUS) <2276> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Texas Central (ftUS) <2277> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Texas South Central (ftUS) <2278> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Texas South (ftUS) <2279> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Utah North (ft) <2280> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> # NAD83 / Utah Central (ft) <2281> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> # NAD83 / Utah South (ft) <2282> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> # NAD83 / Virginia North (ftUS) <2283> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Virginia South (ftUS) <2284> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Washington North (ftUS) <2285> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Washington South (ftUS) <2286> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Wisconsin North (ftUS) <2287> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Wisconsin Central (ftUS) <2288> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Wisconsin South (ftUS) <2289> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # ATS77 / Prince Edward Isl. Stereographic (ATS77) <2290> +proj=stere +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=700000 +y_0=400000 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <> # NAD83(CSRS98) / Prince Edward Isl. Stereographic (NAD83) <2291> +proj=stere +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <> # NAD83(CSRS98) / Prince Edward Isl. Stereographic (NAD83) <2292> +proj=stere +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # ATS77 / MTM Nova Scotia zone 4 <2294> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.999900 +x_0=4500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <> # ATS77 / MTM Nova Scotia zone 5 <2295> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.999900 +x_0=5500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <> # Batavia / TM 109 SE <2308> +proj=tmerc +lat_0=0 +lon_0=109 +k=0.999600 +x_0=500000 +y_0=10000000 +ellps=bessel +units=m +no_defs no_defs <> # WGS 84 / TM 116 SE <2309> +proj=tmerc +lat_0=0 +lon_0=116 +k=0.999600 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / TM 132 SE <2310> +proj=tmerc +lat_0=0 +lon_0=132 +k=0.999600 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / TM 6 NE <2311> +proj=tmerc +lat_0=0 +lon_0=6 +k=0.999600 +x_0=500000 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # Garoua / UTM zone 33N <2312> +proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs no_defs <> # Kousseri / UTM zone 33N <2313> +proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs no_defs <> # Trinidad 1903 / Trinidad Grid (ftCla) <2314> +proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46380699999 +y_0=65379.01334249999 +a=6378293.63683822 +b=6356617.979337744 +towgs84=-61.702,284.488,472.052,0,0,0,0 +to_meter=0.304797265 +no_defs no_defs <> # Campo Inchauspe / UTM zone 19S <2315> +proj=utm +zone=19 +south +ellps=intl +units=m +no_defs no_defs <> # Campo Inchauspe / UTM zone 20S <2316> +proj=utm +zone=20 +south +ellps=intl +units=m +no_defs no_defs <> # PSAD56 / ICN Regional <2317> +proj=lcc +lat_1=9 +lat_2=3 +lat_0=6 +lon_0=-66 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs no_defs <> # Ain el Abd / Aramco Lambert <2318> +proj=lcc +lat_1=17 +lat_2=33 +lat_0=25.08951 +lon_0=48 +x_0=0 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ED50 / TM27 <2319> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ED50 / TM30 <2320> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ED50 / TM33 <2321> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ED50 / TM36 <2322> +proj=tmerc +lat_0=0 +lon_0=36 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ED50 / TM39 <2323> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ED50 / TM42 <2324> +proj=tmerc +lat_0=0 +lon_0=42 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ED50 / TM45 <2325> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # Hong Kong 1980 Grid System <2326> +proj=tmerc +lat_0=22.31213333333334 +lon_0=114.1785555555556 +k=1.000000 +x_0=836694.05 +y_0=819069.8 +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger zone 13 <2327> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=13500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger zone 14 <2328> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=14500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger zone 15 <2329> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=15500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger zone 16 <2330> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=16500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger zone 17 <2331> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=17500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger zone 18 <2332> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=18500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger zone 19 <2333> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=19500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger zone 20 <2334> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=20500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger zone 21 <2335> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=21500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger zone 22 <2336> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=22500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger zone 23 <2337> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=23500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger CM 75E <2338> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger CM 81E <2339> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger CM 87E <2340> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger CM 93E <2341> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger CM 99E <2342> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger CM 105E <2343> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger CM 111E <2344> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger CM 117E <2345> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger CM 123E <2346> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger CM 129E <2347> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger CM 135E <2348> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 25 <2349> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=25500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 26 <2350> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=26500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 27 <2351> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=27500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 28 <2352> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=28500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 29 <2353> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=29500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 30 <2354> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=30500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 31 <2355> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=31500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 32 <2356> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=32500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 33 <2357> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=33500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 34 <2358> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=34500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 35 <2359> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=35500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 36 <2360> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=36500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 37 <2361> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=37500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 38 <2362> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=38500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 39 <2363> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=39500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 40 <2364> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=40500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 41 <2365> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=41500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 42 <2366> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=42500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 43 <2367> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=43500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 44 <2368> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=44500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 45 <2369> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=45500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 75E <2370> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 78E <2371> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 81E <2372> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 84E <2373> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 87E <2374> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 90E <2375> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 93E <2376> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 96E <2377> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 99E <2378> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 102E <2379> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 105E <2380> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 108E <2381> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 111E <2382> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 114E <2383> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 117E <2384> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 120E <2385> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 123E <2386> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 126E <2387> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 129E <2388> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 132E <2389> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 135E <2390> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # KKJ / Finland zone 1 <2391> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-90.7,-106.1,-119.2,4.09,0.218,-1.05,1.37 +units=m +no_defs no_defs <> # KKJ / Finland zone 2 <2392> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=-90.7,-106.1,-119.2,4.09,0.218,-1.05,1.37 +units=m +no_defs no_defs <> # KKJ / Finland Uniform Coordinate System <2393> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=intl +towgs84=-90.7,-106.1,-119.2,4.09,0.218,-1.05,1.37 +units=m +no_defs no_defs <> # KKJ / Finland zone 4 <2394> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=intl +towgs84=-90.7,-106.1,-119.2,4.09,0.218,-1.05,1.37 +units=m +no_defs no_defs <> # South Yemen / Gauss-Kruger zone 8 <2395> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs no_defs <> # South Yemen / Gauss-Kruger zone 9 <2396> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs no_defs <> # Pulkovo 1942(83) / Gauss-Kruger zone 3 <2397> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs no_defs <> # Pulkovo 1942(83) / Gauss-Kruger zone 4 <2398> +proj=tmerc +lat_0=0 +lon_0=12 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs no_defs <> # Pulkovo 1942(83) / Gauss-Kruger zone 5 <2399> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs no_defs <> # RT90 2.5 gon W <2400> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 25 <2401> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 26 <2402> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 27 <2403> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 28 <2404> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 29 <2405> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 30 <2406> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 31 <2407> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 32 <2408> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 33 <2409> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 34 <2410> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 35 <2411> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 36 <2412> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 37 <2413> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 38 <2414> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 39 <2415> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 40 <2416> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 41 <2417> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 42 <2418> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 43 <2419> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 44 <2420> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 45 <2421> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 75E <2422> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 78E <2423> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 81E <2424> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 84E <2425> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 87E <2426> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 90E <2427> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 93E <2428> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 96E <2429> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 99E <2430> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 102E <2431> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 105E <2432> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 108E <2433> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 111E <2434> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 114E <2435> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 117E <2436> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 120E <2437> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 123E <2438> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 126E <2439> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 129E <2440> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 132E <2441> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 135E <2442> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS I <2443> +proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS II <2444> +proj=tmerc +lat_0=33 +lon_0=131 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS III <2445> +proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS IV <2446> +proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS V <2447> +proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS VI <2448> +proj=tmerc +lat_0=36 +lon_0=136 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS VII <2449> +proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS VIII <2450> +proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS IX <2451> +proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS X <2452> +proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS XI <2453> +proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS XII <2454> +proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS XIII <2455> +proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS XIV <2456> +proj=tmerc +lat_0=26 +lon_0=142 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS XV <2457> +proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS XVI <2458> +proj=tmerc +lat_0=26 +lon_0=124 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS XVII <2459> +proj=tmerc +lat_0=26 +lon_0=131 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS XVIII <2460> +proj=tmerc +lat_0=20 +lon_0=136 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS XIX <2461> +proj=tmerc +lat_0=26 +lon_0=154 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # Albanian 1987 / Gauss-Kruger zone 4 <2462> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 21E <2463> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 27E <2464> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 33E <2465> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 39E <2466> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 45E <2467> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 51E <2468> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 57E <2469> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 63E <2470> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 69E <2471> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 75E <2472> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 81E <2473> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 87E <2474> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 93E <2475> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 99E <2476> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 105E <2477> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 111E <2478> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 117E <2479> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 123E <2480> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 129E <2481> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 135E <2482> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 141E <2483> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 147E <2484> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 153E <2485> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 159E <2486> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 165E <2487> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 171E <2488> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 177E <2489> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 177W <2490> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 171W <2491> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 9E <2492> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 15E <2493> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 21E <2494> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 27E <2495> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 33E <2496> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 39E <2497> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 45E <2498> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 51E <2499> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 57E <2500> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 63E <2501> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 69E <2502> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 75E <2503> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 81E <2504> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 87E <2505> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 93E <2506> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 99E <2507> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 105E <2508> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 111E <2509> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 117E <2510> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 123E <2511> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 129E <2512> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 135E <2513> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 141E <2514> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 147E <2515> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 153E <2516> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 159E <2517> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 165E <2518> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 171E <2519> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 177E <2520> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 177W <2521> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 171W <2522> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 7 <2523> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 8 <2524> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 9 <2525> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 10 <2526> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 11 <2527> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 12 <2528> +proj=tmerc +lat_0=0 +lon_0=36 +k=1.000000 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 13 <2529> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 14 <2530> +proj=tmerc +lat_0=0 +lon_0=42 +k=1.000000 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 15 <2531> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 16 <2532> +proj=tmerc +lat_0=0 +lon_0=48 +k=1.000000 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 17 <2533> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 18 <2534> +proj=tmerc +lat_0=0 +lon_0=54 +k=1.000000 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 19 <2535> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 20 <2536> +proj=tmerc +lat_0=0 +lon_0=60 +k=1.000000 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 21 <2537> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 22 <2538> +proj=tmerc +lat_0=0 +lon_0=66 +k=1.000000 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 23 <2539> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 24 <2540> +proj=tmerc +lat_0=0 +lon_0=72 +k=1.000000 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 25 <2541> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 26 <2542> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 27 <2543> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 28 <2544> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 29 <2545> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 30 <2546> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 31 <2547> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 32 <2548> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 33 <2549> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Samboja / UTM zone 50S <2550> +proj=utm +zone=50 +south +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 34 <2551> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 35 <2552> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 36 <2553> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 37 <2554> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 38 <2555> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 39 <2556> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 40 <2557> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 41 <2558> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 42 <2559> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 43 <2560> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 44 <2561> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 45 <2562> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 46 <2563> +proj=tmerc +lat_0=0 +lon_0=138 +k=1.000000 +x_0=46500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 47 <2564> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=47500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 48 <2565> +proj=tmerc +lat_0=0 +lon_0=144 +k=1.000000 +x_0=48500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 49 <2566> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=49500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 50 <2567> +proj=tmerc +lat_0=0 +lon_0=150 +k=1.000000 +x_0=50500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 51 <2568> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=51500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 52 <2569> +proj=tmerc +lat_0=0 +lon_0=156 +k=1.000000 +x_0=52500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 53 <2570> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=53500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 54 <2571> +proj=tmerc +lat_0=0 +lon_0=162 +k=1.000000 +x_0=54500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 55 <2572> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=55500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 56 <2573> +proj=tmerc +lat_0=0 +lon_0=168 +k=1.000000 +x_0=56500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 57 <2574> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=57500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 58 <2575> +proj=tmerc +lat_0=0 +lon_0=174 +k=1.000000 +x_0=58500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 59 <2576> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=59500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 60 <2577> +proj=tmerc +lat_0=0 +lon_0=180 +k=1.000000 +x_0=60000000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 61 <2578> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=61500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 62 <2579> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1.000000 +x_0=62500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 63 <2580> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=63500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 64 <2581> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1.000000 +x_0=64500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 21E <2582> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 24E <2583> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 27E <2584> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 30E <2585> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 33E <2586> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 36E <2587> +proj=tmerc +lat_0=0 +lon_0=36 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 39E <2588> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 42E <2589> +proj=tmerc +lat_0=0 +lon_0=42 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 45E <2590> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 48E <2591> +proj=tmerc +lat_0=0 +lon_0=48 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 51E <2592> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 54E <2593> +proj=tmerc +lat_0=0 +lon_0=54 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 57E <2594> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 60E <2595> +proj=tmerc +lat_0=0 +lon_0=60 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 63E <2596> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 66E <2597> +proj=tmerc +lat_0=0 +lon_0=66 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 69E <2598> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 72E <2599> +proj=tmerc +lat_0=0 +lon_0=72 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Lietuvos Koordinoei Sistema 1994 <2600> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999800 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 75E <2601> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 78E <2602> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 81E <2603> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 84E <2604> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 87E <2605> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 90E <2606> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 93E <2607> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 96E <2608> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 99E <2609> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 102E <2610> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 105E <2611> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 108E <2612> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 111E <2613> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 114E <2614> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 117E <2615> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 120E <2616> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 123E <2617> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 126E <2618> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 129E <2619> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 132E <2620> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 135E <2621> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 138E <2622> +proj=tmerc +lat_0=0 +lon_0=138 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 141E <2623> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 144E <2624> +proj=tmerc +lat_0=0 +lon_0=144 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 147E <2625> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 150E <2626> +proj=tmerc +lat_0=0 +lon_0=150 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 153E <2627> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 156E <2628> +proj=tmerc +lat_0=0 +lon_0=156 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 159E <2629> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 162E <2630> +proj=tmerc +lat_0=0 +lon_0=162 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 165E <2631> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 168E <2632> +proj=tmerc +lat_0=0 +lon_0=168 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 171E <2633> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 174E <2634> +proj=tmerc +lat_0=0 +lon_0=174 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 177E <2635> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 180E <2636> +proj=tmerc +lat_0=0 +lon_0=180 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 177W <2637> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 174W <2638> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 171W <2639> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 168W <2640> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 7 <2641> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 8 <2642> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 9 <2643> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 10 <2644> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 11 <2645> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 12 <2646> +proj=tmerc +lat_0=0 +lon_0=36 +k=1.000000 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 13 <2647> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 14 <2648> +proj=tmerc +lat_0=0 +lon_0=42 +k=1.000000 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 15 <2649> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 16 <2650> +proj=tmerc +lat_0=0 +lon_0=48 +k=1.000000 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 17 <2651> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 18 <2652> +proj=tmerc +lat_0=0 +lon_0=54 +k=1.000000 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 19 <2653> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 20 <2654> +proj=tmerc +lat_0=0 +lon_0=60 +k=1.000000 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 21 <2655> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 22 <2656> +proj=tmerc +lat_0=0 +lon_0=66 +k=1.000000 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 23 <2657> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 24 <2658> +proj=tmerc +lat_0=0 +lon_0=72 +k=1.000000 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 25 <2659> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 26 <2660> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 27 <2661> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 28 <2662> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 29 <2663> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 30 <2664> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 31 <2665> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 32 <2666> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 33 <2667> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 34 <2668> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 35 <2669> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 36 <2670> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 37 <2671> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 38 <2672> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 39 <2673> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 40 <2674> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 41 <2675> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 42 <2676> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 43 <2677> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 44 <2678> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 45 <2679> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 46 <2680> +proj=tmerc +lat_0=0 +lon_0=138 +k=1.000000 +x_0=46500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 47 <2681> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=47500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 48 <2682> +proj=tmerc +lat_0=0 +lon_0=144 +k=1.000000 +x_0=48500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 49 <2683> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=49500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 50 <2684> +proj=tmerc +lat_0=0 +lon_0=150 +k=1.000000 +x_0=50500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 51 <2685> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=51500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 52 <2686> +proj=tmerc +lat_0=0 +lon_0=156 +k=1.000000 +x_0=52500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 53 <2687> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=53500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 54 <2688> +proj=tmerc +lat_0=0 +lon_0=162 +k=1.000000 +x_0=54500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 55 <2689> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=55500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 56 <2690> +proj=tmerc +lat_0=0 +lon_0=168 +k=1.000000 +x_0=56500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 57 <2691> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=57500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 58 <2692> +proj=tmerc +lat_0=0 +lon_0=174 +k=1.000000 +x_0=58500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 59 <2693> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=59500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 60 <2694> +proj=tmerc +lat_0=0 +lon_0=180 +k=1.000000 +x_0=60000000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 61 <2695> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=61500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 62 <2696> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1.000000 +x_0=62500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 63 <2697> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=63500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 64 <2698> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1.000000 +x_0=64500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 21E <2699> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 24E <2700> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 27E <2701> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 30E <2702> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 33E <2703> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 36E <2704> +proj=tmerc +lat_0=0 +lon_0=36 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 39E <2705> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 42E <2706> +proj=tmerc +lat_0=0 +lon_0=42 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 45E <2707> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 48E <2708> +proj=tmerc +lat_0=0 +lon_0=48 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 51E <2709> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 54E <2710> +proj=tmerc +lat_0=0 +lon_0=54 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 57E <2711> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 60E <2712> +proj=tmerc +lat_0=0 +lon_0=60 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 63E <2713> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 66E <2714> +proj=tmerc +lat_0=0 +lon_0=66 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 69E <2715> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 72E <2716> +proj=tmerc +lat_0=0 +lon_0=72 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 75E <2717> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 78E <2718> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 81E <2719> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 84E <2720> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 87E <2721> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 90E <2722> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 93E <2723> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 96E <2724> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 99E <2725> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 102E <2726> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 105E <2727> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 108E <2728> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 111E <2729> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 114E <2730> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 117E <2731> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 120E <2732> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 123E <2733> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 126E <2734> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 129E <2735> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Tete / UTM zone 36S <2736> +proj=utm +zone=36 +south +ellps=clrk66 +units=m +no_defs no_defs <> # Tete / UTM zone 37S <2737> +proj=utm +zone=37 +south +ellps=clrk66 +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 132E <2738> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 135E <2739> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 138E <2740> +proj=tmerc +lat_0=0 +lon_0=138 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 141E <2741> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 144E <2742> +proj=tmerc +lat_0=0 +lon_0=144 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 147E <2743> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 150E <2744> +proj=tmerc +lat_0=0 +lon_0=150 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 153E <2745> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 156E <2746> +proj=tmerc +lat_0=0 +lon_0=156 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 159E <2747> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 162E <2748> +proj=tmerc +lat_0=0 +lon_0=162 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 165E <2749> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 168E <2750> +proj=tmerc +lat_0=0 +lon_0=168 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 171E <2751> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 174E <2752> +proj=tmerc +lat_0=0 +lon_0=174 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 177E <2753> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 180E <2754> +proj=tmerc +lat_0=0 +lon_0=180 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 177W <2755> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 174W <2756> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 171W <2757> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 168W <2758> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # NAD83(HARN) / Alabama East <2759> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Alabama West <2760> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Arizona East <2761> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Arizona Central <2762> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Arizona West <2763> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Arkansas North <2764> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Arkansas South <2765> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / California zone 1 <2766> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / California zone 2 <2767> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / California zone 3 <2768> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / California zone 4 <2769> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / California zone 5 <2770> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / California zone 6 <2771> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Colorado North <2772> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Colorado Central <2773> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Colorado South <2774> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Connecticut <2775> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Delaware <2776> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Florida East <2777> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Florida West <2778> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Florida North <2779> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Georgia East <2780> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Georgia West <2781> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Hawaii zone 1 <2782> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Hawaii zone 2 <2783> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Hawaii zone 3 <2784> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Hawaii zone 4 <2785> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Hawaii zone 5 <2786> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Idaho East <2787> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Idaho Central <2788> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Idaho West <2789> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Illinois East <2790> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Illinois West <2791> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Indiana East <2792> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Indiana West <2793> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Iowa North <2794> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Iowa South <2795> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Kansas North <2796> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Kansas South <2797> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Kentucky North <2798> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Kentucky South <2799> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Louisiana North <2800> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Louisiana South <2801> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Maine East <2802> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.999900 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Maine West <2803> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Maryland <2804> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Massachusetts Mainland <2805> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Massachusetts Island <2806> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Michigan North <2807> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Michigan Central <2808> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Michigan South <2809> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Minnesota North <2810> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Minnesota Central <2811> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Minnesota South <2812> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Mississippi East <2813> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Mississippi West <2814> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Missouri East <2815> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Missouri Central <2816> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Missouri West <2817> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Montana <2818> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Nebraska <2819> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Nevada East <2820> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Nevada Central <2821> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Nevada West <2822> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / New Hampshire <2823> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / New Jersey <2824> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / New Mexico East <2825> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / New Mexico Central <2826> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / New Mexico West <2827> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / New York East <2828> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / New York Central <2829> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / New York West <2830> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / New York Long Island <2831> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / North Dakota North <2832> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / North Dakota South <2833> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Ohio North <2834> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Ohio South <2835> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Oklahoma North <2836> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Oklahoma South <2837> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Oregon North <2838> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Oregon South <2839> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Rhode Island <2840> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / South Dakota North <2841> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / South Dakota South <2842> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Tennessee <2843> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Texas North <2844> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Texas North Central <2845> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Texas Central <2846> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Texas South Central <2847> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Texas South <2848> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Utah North <2849> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Utah Central <2850> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Utah South <2851> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Vermont <2852> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Virginia North <2853> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Virginia South <2854> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Washington North <2855> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Washington South <2856> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / West Virginia North <2857> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / West Virginia South <2858> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Wisconsin North <2859> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Wisconsin Central <2860> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Wisconsin South <2861> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Wyoming East <2862> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.999938 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Wyoming East Central <2863> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.999938 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Wyoming West Central <2864> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.999938 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Wyoming West <2865> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.999938 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Puerto Rico & Virgin Is. <2866> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Arizona East (ft) <2867> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> # NAD83(HARN) / Arizona Central (ft) <2868> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> # NAD83(HARN) / Arizona West (ft) <2869> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> # NAD83(HARN) / California zone 1 (ftUS) <2870> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / California zone 2 (ftUS) <2871> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / California zone 3 (ftUS) <2872> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / California zone 4 (ftUS) <2873> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / California zone 5 (ftUS) <2874> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / California zone 6 (ftUS) <2875> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Colorado North (ftUS) <2876> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Colorado Central (ftUS) <2877> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Colorado South (ftUS) <2878> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Connecticut (ftUS) <2879> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Delaware (ftUS) <2880> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Florida East (ftUS) <2881> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Florida West (ftUS) <2882> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Florida North (ftUS) <2883> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Georgia East (ftUS) <2884> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Georgia West (ftUS) <2885> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Idaho East (ftUS) <2886> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Idaho Central (ftUS) <2887> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Idaho West (ftUS) <2888> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Indiana East (ftUS) <2889> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Indiana West (ftUS) <2890> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Kentucky North (ftUS) <2891> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Kentucky South (ftUS) <2892> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Maryland (ftUS) <2893> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Massachusetts Mainland (ftUS) <2894> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Massachusetts Island (ftUS) <2895> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Michigan North (ft) <2896> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> # NAD83(HARN) / Michigan Central (ft) <2897> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> # NAD83(HARN) / Michigan South (ft) <2898> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> # NAD83(HARN) / Mississippi East (ftUS) <2899> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Mississippi West (ftUS) <2900> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Montana (ft) <2901> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> # NAD83(HARN) / New Mexico East (ftUS) <2902> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / New Mexico Central (ftUS) <2903> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / New Mexico West (ftUS) <2904> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / New York East (ftUS) <2905> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / New York Central (ftUS) <2906> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / New York West (ftUS) <2907> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / New York Long Island (ftUS) <2908> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / North Dakota North (ft) <2909> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> # NAD83(HARN) / North Dakota South (ft) <2910> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> # NAD83(HARN) / Oklahoma North (ftUS) <2911> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Oklahoma South (ftUS) <2912> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Oregon North (ft) <2913> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> # NAD83(HARN) / Oregon South (ft) <2914> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> # NAD83(HARN) / Tennessee (ftUS) <2915> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Texas North (ftUS) <2916> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Texas North Central (ftUS) <2917> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Texas Central (ftUS) <2918> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Texas South Central (ftUS) <2919> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Texas South (ftUS) <2920> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Utah North (ft) <2921> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> # NAD83(HARN) / Utah Central (ft) <2922> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> # NAD83(HARN) / Utah South (ft) <2923> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> # NAD83(HARN) / Virginia North (ftUS) <2924> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Virginia South (ftUS) <2925> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Washington North (ftUS) <2926> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Washington South (ftUS) <2927> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Wisconsin North (ftUS) <2928> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Wisconsin Central (ftUS) <2929> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Wisconsin South (ftUS) <2930> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # Beduaram / TM 13 NE <2931> +proj=tmerc +lat_0=0 +lon_0=13 +k=0.999600 +x_0=500000.0000000001 +y_0=0 +a=6378249.2 +b=6356515 +to_meter=0.3048006096012192 +no_defs no_defs <> # QND95 / Qatar National Grid <2932> +proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.999990 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +units=m +no_defs no_defs <> # Segara / UTM zone 50S <2933> +proj=utm +zone=50 +south +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +units=m +no_defs no_defs <> # Segara (Jakarta) / NEIEZ <2934> +proj=merc +lat_ts=0 +lon_0=216.8077194444444 +k=0.997000 +x_0=3900000 +y_0=900000 +ellps=bessel +pm=jakarta +units=m +no_defs no_defs <> # Pulkovo 1942 / CS63 zone A1 <2935> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=41.53333333333333 +k=1.000000 +x_0=1300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / CS63 zone A2 <2936> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=44.53333333333333 +k=1.000000 +x_0=2300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / CS63 zone A3 <2937> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=47.53333333333333 +k=1.000000 +x_0=3300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / CS63 zone A4 <2938> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=50.53333333333333 +k=1.000000 +x_0=4300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / CS63 zone K2 <2939> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=50.76666666666667 +k=1.000000 +x_0=2300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / CS63 zone K3 <2940> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=53.76666666666667 +k=1.000000 +x_0=3300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / CS63 zone K4 <2941> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=56.76666666666667 +k=1.000000 +x_0=4300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Porto Santo / UTM zone 28N <2942> +proj=utm +zone=28 +ellps=intl +units=m +no_defs no_defs <> # Selvagem Grande / UTM zone 28N <2943> +proj=utm +zone=28 +ellps=intl +units=m +no_defs no_defs <> # NAD83(CSRS) / SCoPQ zone 2 <2944> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / MTM zone 3 <2945> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / MTM zone 4 <2946> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / MTM zone 5 <2947> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / MTM zone 6 <2948> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / MTM zone 7 <2949> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / MTM zone 8 <2950> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / MTM zone 9 <2951> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / MTM zone 10 <2952> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / New Brunswick Stereo <2953> +proj=stere +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / Prince Edward Isl. Stereographic (NAD83) <2954> +proj=stere +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / UTM zone 11N <2955> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / UTM zone 12N <2956> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / UTM zone 13N <2957> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / UTM zone 17N <2958> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / UTM zone 18N <2959> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / UTM zone 19N <2960> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / UTM zone 20N <2961> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / UTM zone 21N <2962> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # Moznet / UTM zone 36S <3036> +proj=utm +zone=36 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs no_defs <> # Moznet / UTM zone 37S <3037> +proj=utm +zone=37 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs no_defs <> # Indian 1960 / UTM zone 48N <3148> +proj=utm +zone=48 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <> # Indian 1960 / UTM zone 49N <3149> +proj=utm +zone=49 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <> # Indian 1960 / TM 106 NE <3176> +proj=tmerc +lat_0=0 +lon_0=106 +k=0.999600 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <> # FD58 / Iraq zone <3200> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +units=m +no_defs no_defs <> # Estonian Coordinate System of 1992 <3300> +proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +units=m +no_defs no_defs <> # Estonian Coordinate System of 1997 <3301> +proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # PSD93 / UTM zone 39N <3439> +proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs no_defs <> # PSD93 / UTM zone 40N <3440> +proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs no_defs <> # Old Hawaiian / Hawaii zone 1 <3561> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <> # Old Hawaiian / Hawaii zone 2 <3562> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <> # Old Hawaiian / Hawaii zone 3 <3563> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <> # Old Hawaiian / Hawaii zone 4 <3564> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <> # Old Hawaiian / Hawaii zone 5 <3565> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <> # Puerto Rico / UTM zone 20N <3920> +proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs no_defs <> # Puerto Rico State Plane CS of 1927 <3991> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <> # Puerto Rico / St. Croix <3992> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=30480.06096012192 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <> # Unknown datum based upon the Airy 1830 ellipsoid <4001> +proj=longlat +ellps=airy +no_defs no_defs <> # Unknown datum based upon the Airy Modified 1849 ellipsoid <4002> +proj=longlat +a=6377340.189 +b=6356034.447938534 +no_defs no_defs <> # Unknown datum based upon the Australian National Spheroid <4003> +proj=longlat +ellps=aust_SA +no_defs no_defs <> # Unknown datum based upon the Bessel 1841 ellipsoid <4004> +proj=longlat +ellps=bessel +no_defs no_defs <> # Unknown datum based upon the Bessel Modified ellipsoid <4005> +proj=longlat +a=6377492.018 +b=6356173.508712696 +no_defs no_defs <> # Unknown datum based upon the Bessel Namibia ellipsoid <4006> +proj=longlat +ellps=bess_nam +no_defs no_defs <> # Unknown datum based upon the Clarke 1858 ellipsoid <4007> +proj=longlat +a=6378293.63683822 +b=6356617.979337744 +no_defs no_defs <> # Unknown datum based upon the Clarke 1866 ellipsoid <4008> +proj=longlat +ellps=clrk66 +no_defs no_defs <> # Unknown datum based upon the Clarke 1866 Michigan ellipsoid <4009> +proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs no_defs <> # Unknown datum based upon the Clarke 1880 (Benoit) ellipsoid <4010> +proj=longlat +a=6378300.789 +b=6356566.435 +no_defs no_defs <> # Unknown datum based upon the Clarke 1880 (IGN) ellipsoid <4011> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> # Unknown datum based upon the Clarke 1880 (RGS) ellipsoid <4012> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # Unknown datum based upon the Clarke 1880 (Arc) ellipsoid <4013> +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs no_defs <> # Unknown datum based upon the Clarke 1880 (SGA 1922) ellipsoid <4014> +proj=longlat +a=6378249.2 +b=6356514.996941779 +no_defs no_defs <> # Unknown datum based upon the Everest 1830 (1937 Adjustment) ellipsoid <4015> +proj=longlat +a=6377276.345 +b=6356075.413140239 +no_defs no_defs <> # Unknown datum based upon the Everest 1830 (1967 Definition) ellipsoid <4016> +proj=longlat +ellps=evrstSS +no_defs no_defs <> # Unknown datum based upon the Everest 1830 Modified ellipsoid <4018> +proj=longlat +a=6377304.063 +b=6356103.038993155 +no_defs no_defs <> # Unknown datum based upon the GRS 1980 ellipsoid <4019> +proj=longlat +ellps=GRS80 +no_defs no_defs <> # Unknown datum based upon the Helmert 1906 ellipsoid <4020> +proj=longlat +ellps=helmert +no_defs no_defs <> # Unknown datum based upon the Indonesian National Spheroid <4021> +proj=longlat +a=6378160 +b=6356774.50408554 +no_defs no_defs <> # Unknown datum based upon the International 1924 ellipsoid <4022> +proj=longlat +ellps=intl +no_defs no_defs <> # Unknown datum based upon the Krassowsky 1940 ellipsoid <4024> +proj=longlat +ellps=krass +no_defs no_defs <> # Unknown datum based upon the NWL 9D ellipsoid <4025> +proj=longlat +ellps=WGS66 +no_defs no_defs <> # Unknown datum based upon the Plessis 1817 ellipsoid <4027> +proj=longlat +a=6376523 +b=6355862.933255573 +no_defs no_defs <> # Unknown datum based upon the Struve 1860 ellipsoid <4028> +proj=longlat +a=6378298.3 +b=6356657.142669562 +no_defs no_defs <> # Unknown datum based upon the War Office ellipsoid <4029> +proj=longlat +a=6378300 +b=6356751.689189189 +no_defs no_defs <> # Unknown datum based upon the WGS 84 ellipsoid <4030> +proj=longlat +ellps=WGS84 +no_defs no_defs <> # Unknown datum based upon the GEM 10C ellipsoid <4031> +proj=longlat +ellps=WGS84 +no_defs no_defs <> # Unknown datum based upon the OSU86F ellipsoid <4032> +proj=longlat +a=6378136.2 +b=6356751.516927429 +no_defs no_defs <> # Unknown datum based upon the OSU91A ellipsoid <4033> +proj=longlat +a=6378136.3 +b=6356751.616592146 +no_defs no_defs <> # Unknown datum based upon the Clarke 1880 ellipsoid <4034> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # Unknown datum based upon the Authalic Sphere <4035> +proj=longlat +a=6371000 +b=6371000 +no_defs no_defs <> # Unknown datum based upon the GRS 1967 ellipsoid <4036> +proj=longlat +ellps=GRS67 +no_defs no_defs <> # Unknown datum based upon the Average Terrestrial System 1977 ellipsoid <4041> +proj=longlat +a=6378135 +b=6356750.304921594 +no_defs no_defs <> # Unknown datum based upon the Everest (1830 Definition) ellipsoid <4042> +proj=longlat +a=6377299.36559538 +b=6356098.357204817 +no_defs no_defs <> # Unknown datum based upon the WGS 72 ellipsoid <4043> +proj=longlat +ellps=WGS72 +no_defs no_defs <> # Unknown datum based upon the Everest 1830 (1962 Definition) ellipsoid <4044> +proj=longlat +a=6377301.243 +b=6356100.230165385 +no_defs no_defs <> # Unknown datum based upon the Everest 1830 (1975 Definition) ellipsoid <4045> +proj=longlat +a=6377299.151 +b=6356098.145120132 +no_defs no_defs <> # Unspecified based upon the GRS 1980 Authalic Sphere <4047> +proj=longlat +a=6370997 +b=6370997 +no_defs no_defs <> # Greek <4120> +proj=longlat +ellps=bessel +no_defs no_defs <> # GGRS87 <4121> +proj=longlat +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +no_defs no_defs <> # ATS77 <4122> +proj=longlat +a=6378135 +b=6356750.304921594 +no_defs no_defs <> # KKJ <4123> +proj=longlat +ellps=intl +towgs84=-90.7,-106.1,-119.2,4.09,0.218,-1.05,1.37 +no_defs no_defs <> # RT90 <4124> +proj=longlat +ellps=bessel +no_defs no_defs <> # Samboja <4125> +proj=longlat +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +no_defs no_defs <> # LKS94 (ETRS89) <4126> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # Tete <4127> +proj=longlat +ellps=clrk66 +no_defs no_defs <> # Madzansua <4128> +proj=longlat +ellps=clrk66 +no_defs no_defs <> # Observatario <4129> +proj=longlat +ellps=clrk66 +no_defs no_defs <> # Moznet <4130> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +no_defs no_defs <> # Indian 1960 <4131> +proj=longlat +a=6377276.345 +b=6356075.413140239 +no_defs no_defs <> # FD58 <4132> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # EST92 <4133> +proj=longlat +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +no_defs no_defs <> # PDO Survey Datum 1993 <4134> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # Old Hawaiian <4135> +proj=longlat +ellps=clrk66 +no_defs no_defs <> # St. Lawrence Island <4136> +proj=longlat +ellps=clrk66 +no_defs no_defs <> # St. Paul Island <4137> +proj=longlat +ellps=clrk66 +no_defs no_defs <> # St. George Island <4138> +proj=longlat +ellps=clrk66 +no_defs no_defs <> # Puerto Rico <4139> +proj=longlat +ellps=clrk66 +no_defs no_defs <> # NAD83(CSRS98) <4140> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # Israel <4141> +proj=longlat +ellps=GRS80 +no_defs no_defs <> # Locodjo 1965 <4142> +proj=longlat +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +no_defs no_defs <> # Abidjan 1987 <4143> +proj=longlat +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +no_defs no_defs <> # Kalianpur 1937 <4144> +proj=longlat +a=6377276.345 +b=6356075.413140239 +no_defs no_defs <> # Kalianpur 1962 <4145> +proj=longlat +a=6377301.243 +b=6356100.230165385 +towgs84=283,682,231,0,0,0,0 +no_defs no_defs <> # Kalianpur 1975 <4146> +proj=longlat +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +no_defs no_defs <> # Hanoi 1972 <4147> +proj=longlat +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +no_defs no_defs <> # Hartebeesthoek94 <4148> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # CH1903 <4149> +proj=longlat +ellps=bessel +no_defs no_defs <> # CH1903+ <4150> +proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs no_defs <> # CHTRF95 <4151> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # NAD83(HARN) <4152> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # Rassadiran <4153> +proj=longlat +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +no_defs no_defs <> # ED50(ED77) <4154> +proj=longlat +ellps=intl +no_defs no_defs <> # Dabola 1981 <4155> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +no_defs no_defs <> # S-JTSK <4156> +proj=longlat +ellps=bessel +no_defs no_defs <> # Mount Dillon <4157> +proj=longlat +a=6378293.63683822 +b=6356617.979337744 +no_defs no_defs <> # Naparima 1955 <4158> +proj=longlat +ellps=intl +no_defs no_defs <> # ELD79 <4159> +proj=longlat +ellps=intl +no_defs no_defs <> # Chos Malal 1914 <4160> +proj=longlat +ellps=intl +no_defs no_defs <> # Pampa del Castillo <4161> +proj=longlat +ellps=intl +no_defs no_defs <> # Korean 1985 <4162> +proj=longlat +ellps=bessel +no_defs no_defs <> # Yemen NGN96 <4163> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # South Yemen <4164> +proj=longlat +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +no_defs no_defs <> # Bissau <4165> +proj=longlat +ellps=intl +towgs84=-173,253,27,0,0,0,0 +no_defs no_defs <> # Korean 1995 <4166> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # NZGD2000 <4167> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # Accra <4168> +proj=longlat +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +no_defs no_defs <> # American Samoa 1962 <4169> +proj=longlat +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +no_defs no_defs <> # SIRGAS <4170> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # RGF93 <4171> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # POSGAR <4172> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # IRENET95 <4173> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # Sierra Leone 1924 <4174> +proj=longlat +a=6378300 +b=6356751.689189189 +no_defs no_defs <> # Sierra Leone 1968 <4175> +proj=longlat +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +no_defs no_defs <> # Australian Antarctic <4176> +proj=longlat +ellps=GRS80 +no_defs no_defs <> # Pulkovo 1942(83) <4178> +proj=longlat +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +no_defs no_defs <> # Pulkovo 1942(58) <4179> +proj=longlat +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +no_defs no_defs <> # EST97 <4180> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # Luxembourg 1930 <4181> +proj=longlat +ellps=intl +towgs84=-193,13.7,-39.3,-0.41,-2.933,2.688,0.43 +no_defs no_defs <> # Azores Occidental 1939 <4182> +proj=longlat +ellps=intl +no_defs no_defs <> # Azores Central 1948 <4183> +proj=longlat +ellps=intl +no_defs no_defs <> # Azores Oriental 1940 <4184> +proj=longlat +ellps=intl +no_defs no_defs <> # Madeira 1936 <4185> +proj=longlat +ellps=intl +no_defs no_defs <> # OSNI 1952 <4188> +proj=longlat +ellps=airy +no_defs no_defs <> # REGVEN <4189> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # POSGAR 98 <4190> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # Albanian 1987 <4191> +proj=longlat +ellps=krass +no_defs no_defs <> # Douala 1948 <4192> +proj=longlat +ellps=intl +no_defs no_defs <> # Manoca 1962 <4193> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs no_defs <> # Qornoq 1927 <4194> +proj=longlat +ellps=intl +no_defs no_defs <> # Scoresbysund 1952 <4195> +proj=longlat +ellps=intl +towgs84=105,326,-102.5,0,0,0.814,-0.6 +no_defs no_defs <> # Ammassalik 1958 <4196> +proj=longlat +ellps=intl +towgs84=-45,417,-3.5,0,0,0.814,-0.6 +no_defs no_defs <> # Garoua <4197> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # Kousseri <4198> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # Egypt 1930 <4199> +proj=longlat +ellps=intl +no_defs no_defs <> # Pulkovo 1995 <4200> +proj=longlat +ellps=krass +no_defs no_defs <> # Adindan <4201> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # AGD66 <4202> +proj=longlat +ellps=aust_SA +no_defs no_defs <> # AGD84 <4203> +proj=longlat +ellps=aust_SA +no_defs no_defs <> # Ain el Abd <4204> +proj=longlat +ellps=intl +no_defs no_defs <> # Afgooye <4205> +proj=longlat +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +no_defs no_defs <> # Agadez <4206> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> # Lisbon <4207> +proj=longlat +ellps=intl +no_defs no_defs <> # Aratu <4208> +proj=longlat +ellps=intl +no_defs no_defs <> # Arc 1950 <4209> +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs no_defs <> # Arc 1960 <4210> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # Batavia <4211> +proj=longlat +ellps=bessel +no_defs no_defs <> # Barbados 1938 <4212> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # Beduaram <4213> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> # Beijing 1954 <4214> +proj=longlat +ellps=krass +no_defs no_defs <> # Belge 1950 <4215> +proj=longlat +ellps=intl +no_defs no_defs <> # Bermuda 1957 <4216> +proj=longlat +ellps=clrk66 +towgs84=-73,213,296,0,0,0,0 +no_defs no_defs <> # Bogota 1975 <4218> +proj=longlat +ellps=intl +no_defs no_defs <> # Bukit Rimpah <4219> +proj=longlat +ellps=bessel +towgs84=-384,664,-48,0,0,0,0 +no_defs no_defs <> # Camacupa <4220> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # Campo Inchauspe <4221> +proj=longlat +ellps=intl +no_defs no_defs <> # Cape <4222> +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs no_defs <> # Carthage <4223> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> # Chua <4224> +proj=longlat +ellps=intl +towgs84=-134,229,-29,0,0,0,0 +no_defs no_defs <> # Corrego Alegre <4225> +proj=longlat +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +no_defs no_defs <> # Cote d'Ivoire <4226> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> # Deir ez Zor <4227> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> # Douala <4228> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> # Egypt 1907 <4229> +proj=longlat +ellps=helmert +no_defs no_defs <> # ED50 <4230> +proj=longlat +ellps=intl +no_defs no_defs <> # ED87 <4231> +proj=longlat +ellps=intl +towgs84=-82.981,-99.719,-110.709,-0.5076,0.1503,0.3898,-0.3143 +no_defs no_defs <> # Fahud <4232> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # Gandajika 1970 <4233> +proj=longlat +ellps=intl +no_defs no_defs <> # Garoua <4234> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> # Guyane Francaise <4235> +proj=longlat +ellps=intl +no_defs no_defs <> # Hu Tzu Shan <4236> +proj=longlat +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +no_defs no_defs <> # HD72 <4237> +proj=longlat +ellps=GRS67 +no_defs no_defs <> # ID74 <4238> +proj=longlat +a=6378160 +b=6356774.50408554 +no_defs no_defs <> # Indian 1954 <4239> +proj=longlat +a=6377276.345 +b=6356075.413140239 +towgs84=217,823,299,0,0,0,0 +no_defs no_defs <> # Indian 1975 <4240> +proj=longlat +a=6377276.345 +b=6356075.413140239 +no_defs no_defs <> # Jamaica 1875 <4241> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # JAD69 <4242> +proj=longlat +ellps=clrk66 +no_defs no_defs <> # Kalianpur 1880 <4243> +proj=longlat +a=6377299.36559538 +b=6356098.357204817 +no_defs no_defs <> # Kandawala <4244> +proj=longlat +a=6377276.345 +b=6356075.413140239 +towgs84=-97,787,86,0,0,0,0 +no_defs no_defs <> # Kertau <4245> +proj=longlat +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +no_defs no_defs <> # KOC <4246> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # La Canoa <4247> +proj=longlat +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +no_defs no_defs <> # PSAD56 <4248> +proj=longlat +ellps=intl +no_defs no_defs <> # Lake <4249> +proj=longlat +ellps=intl +no_defs no_defs <> # Leigon <4250> +proj=longlat +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +no_defs no_defs <> # Liberia 1964 <4251> +proj=longlat +ellps=clrk80 +towgs84=-90,40,88,0,0,0,0 +no_defs no_defs <> # Lome <4252> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> # Luzon 1911 <4253> +proj=longlat +ellps=clrk66 +no_defs no_defs <> # Hito XVIII 1963 <4254> +proj=longlat +ellps=intl +towgs84=18.38,192.45,96.82,0.056,-0.142,-0.2,-0.0013 +no_defs no_defs <> # Herat North <4255> +proj=longlat +ellps=intl +towgs84=-333,-222,114,0,0,0,0 +no_defs no_defs <> # Mahe 1971 <4256> +proj=longlat +ellps=clrk80 +towgs84=41,-220,-134,0,0,0,0 +no_defs no_defs <> # Makassar <4257> +proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +no_defs no_defs <> # ETRS89 <4258> +proj=longlat +ellps=GRS80 +no_defs no_defs <> # Malongo 1987 <4259> +proj=longlat +ellps=intl +no_defs no_defs <> # Manoca <4260> +proj=longlat +ellps=clrk80 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs no_defs <> # Merchich <4261> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +no_defs no_defs <> # Massawa <4262> +proj=longlat +ellps=bessel +towgs84=639,405,60,0,0,0,0 +no_defs no_defs <> # Minna <4263> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # Mhast <4264> +proj=longlat +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +no_defs no_defs <> # Monte Mario <4265> +proj=longlat +ellps=intl +no_defs no_defs <> # M'poraloko <4266> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> # NAD27 <4267> +proj=longlat +ellps=clrk66 +datum=NAD27 +no_defs no_defs <> # NAD27 Michigan <4268> +proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs no_defs <> # NAD83 <4269> +proj=longlat +ellps=GRS80 +datum=NAD83 +no_defs no_defs <> # Nahrwan 1967 <4270> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # Naparima 1972 <4271> +proj=longlat +ellps=intl +no_defs no_defs <> # NZGD49 <4272> +proj=longlat +ellps=intl +no_defs no_defs <> # NGO 1948 <4273> +proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +no_defs no_defs <> # Datum 73 <4274> +proj=longlat +ellps=intl +no_defs no_defs <> # NTF <4275> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +no_defs no_defs <> # NSWC 9Z-2 <4276> +proj=longlat +ellps=WGS66 +no_defs no_defs <> # OSGB 1936 <4277> +proj=longlat +ellps=airy +no_defs no_defs <> # OSGB70 <4278> +proj=longlat +ellps=airy +no_defs no_defs <> # OS(SN)80 <4279> +proj=longlat +ellps=airy +no_defs no_defs <> # Padang <4280> +proj=longlat +ellps=bessel +no_defs no_defs <> # Palestine 1923 <4281> +proj=longlat +a=6378300.789 +b=6356566.435 +no_defs no_defs <> # Pointe Noire <4282> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> # GDA94 <4283> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # Pulkovo 1942 <4284> +proj=longlat +ellps=krass +no_defs no_defs <> # Qatar 1974 <4285> +proj=longlat +ellps=intl +no_defs no_defs <> # Qatar 1948 <4286> +proj=longlat +ellps=helmert +no_defs no_defs <> # Qornoq <4287> +proj=longlat +ellps=intl +towgs84=164,138,-189,0,0,0,0 +no_defs no_defs <> # Loma Quintana <4288> +proj=longlat +ellps=intl +no_defs no_defs <> # Amersfoort <4289> +proj=longlat +ellps=bessel +no_defs no_defs <> # SAD69 <4291> +proj=longlat +ellps=GRS67 +no_defs no_defs <> # Sapper Hill 1943 <4292> +proj=longlat +ellps=intl +towgs84=-355,21,72,0,0,0,0 +no_defs no_defs <> # Schwarzeck <4293> +proj=longlat +ellps=bess_nam +no_defs no_defs <> # Segora <4294> +proj=longlat +ellps=bessel +no_defs no_defs <> # Serindung <4295> +proj=longlat +ellps=bessel +no_defs no_defs <> # Sudan <4296> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> # Tananarive <4297> +proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +no_defs no_defs <> # Timbalai 1948 <4298> +proj=longlat +ellps=evrstSS +no_defs no_defs <> # TM65 <4299> +proj=longlat +a=6377340.189 +b=6356034.447938534 +no_defs no_defs <> # TM75 <4300> +proj=longlat +a=6377340.189 +b=6356034.447938534 +no_defs no_defs <> # Tokyo <4301> +proj=longlat +ellps=bessel +no_defs no_defs <> # Trinidad 1903 <4302> +proj=longlat +a=6378293.63683822 +b=6356617.979337744 +towgs84=-61.702,284.488,472.052,0,0,0,0 +no_defs no_defs <> # TC(1948) <4303> +proj=longlat +ellps=helmert +no_defs no_defs <> # Voirol 1875 <4304> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +no_defs no_defs <> # Bern 1938 <4306> +proj=longlat +ellps=bessel +no_defs no_defs <> # Nord Sahara 1959 <4307> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # RT38 <4308> +proj=longlat +ellps=bessel +no_defs no_defs <> # Yacare <4309> +proj=longlat +ellps=intl +towgs84=-155,171,37,0,0,0,0 +no_defs no_defs <> # Yoff <4310> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> # Zanderij <4311> +proj=longlat +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +no_defs no_defs <> # MGI <4312> +proj=longlat +ellps=bessel +no_defs no_defs <> # Belge 1972 <4313> +proj=longlat +ellps=intl +no_defs no_defs <> # DHDN <4314> +proj=longlat +ellps=bessel +no_defs no_defs <> # Conakry 1905 <4315> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +no_defs no_defs <> # Dealul Piscului 1933 <4316> +proj=longlat +ellps=intl +towgs84=103.25,-100.4,-307.19,0,0,0,0 +no_defs no_defs <> # Dealul Piscului 1970 <4317> +proj=longlat +ellps=krass +no_defs no_defs <> # NGN <4318> +proj=longlat +ellps=WGS84 +no_defs no_defs <> # KUDAMS <4319> +proj=longlat +ellps=GRS80 +no_defs no_defs <> # WGS 72 <4322> +proj=longlat +ellps=WGS72 +no_defs no_defs <> # WGS 72BE <4324> +proj=longlat +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +no_defs no_defs <> # WGS 84 <4326> +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs no_defs <> # Anguilla 1957 <4600> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # Antigua 1943 <4601> +proj=longlat +ellps=clrk80 +towgs84=-255,-15,71,0,0,0,0 +no_defs no_defs <> # Dominica 1945 <4602> +proj=longlat +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +no_defs no_defs <> # Grenada 1953 <4603> +proj=longlat +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +no_defs no_defs <> # Montserrat 1958 <4604> +proj=longlat +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +no_defs no_defs <> # St. Kitts 1955 <4605> +proj=longlat +ellps=clrk80 +towgs84=9,183,236,0,0,0,0 +no_defs no_defs <> # St. Lucia 1955 <4606> +proj=longlat +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +no_defs no_defs <> # St. Vincent 1945 <4607> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # NAD27(76) <4608> +proj=longlat +ellps=clrk66 +no_defs no_defs <> # NAD27(CGQ77) <4609> +proj=longlat +ellps=clrk66 +no_defs no_defs <> # Xian 1980 <4610> +proj=longlat +a=6378140 +b=6356755.288157528 +no_defs no_defs <> # Hong Kong 1980 <4611> +proj=longlat +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +no_defs no_defs <> # JGD2000 <4612> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # Segara <4613> +proj=longlat +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +no_defs no_defs <> # QND95 <4614> +proj=longlat +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +no_defs no_defs <> # Porto Santo <4615> +proj=longlat +ellps=intl +no_defs no_defs <> # Selvagem Grande <4616> +proj=longlat +ellps=intl +no_defs no_defs <> # NAD83(CSRS) <4617> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # Bern 1898 (Bern) <4801> +proj=longlat +ellps=bessel +pm=bern +no_defs no_defs <> # Bogota 1975 (Bogota) <4802> +proj=longlat +ellps=intl +pm=bogota +no_defs no_defs <> # Lisbon (Lisbon) <4803> +proj=longlat +ellps=intl +pm=lisbon +no_defs no_defs <> # Makassar (Jakarta) <4804> +proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +no_defs no_defs <> # MGI (Ferro) <4805> +proj=longlat +ellps=bessel +pm=ferro +no_defs no_defs <> # Monte Mario (Rome) <4806> +proj=longlat +ellps=intl +pm=rome +no_defs no_defs <> # NTF (Paris) <4807> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +no_defs no_defs <> # Padang (Jakarta) <4808> +proj=longlat +ellps=bessel +pm=jakarta +no_defs no_defs <> # Belge 1950 (Brussels) <4809> +proj=longlat +ellps=intl +pm=brussels +no_defs no_defs <> # Tananarive (Paris) <4810> +proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +no_defs no_defs <> # Voirol 1875 (Paris) <4811> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +pm=paris +no_defs no_defs <> # Batavia (Jakarta) <4813> +proj=longlat +ellps=bessel +pm=jakarta +no_defs no_defs <> # RT38 (Stockholm) <4814> +proj=longlat +ellps=bessel +pm=stockholm +no_defs no_defs <> # Greek (Athens) <4815> +proj=longlat +ellps=bessel +pm=athens +no_defs no_defs <> # Carthage (Paris) <4816> +proj=longlat +a=6378249.2 +b=6356515 +pm=paris +no_defs no_defs <> # NGO 1948 (Oslo) <4817> +proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +no_defs no_defs <> # S-JTSK (Ferro) <4818> +proj=longlat +ellps=bessel +pm=ferro +no_defs no_defs <> # Nord Sahara 1959 (Paris) <4819> +proj=longlat +ellps=clrk80 +pm=paris +no_defs no_defs <> # Segara (Jakarta) <4820> +proj=longlat +ellps=bessel +pm=jakarta +no_defs no_defs <> # ATF (Paris) <4901> +proj=longlat +a=6376523 +b=6355862.933255573 +pm=paris +no_defs no_defs <> # NDG (Paris) <4902> +proj=longlat +a=6376523 +b=6355862.933255573 +pm=paris +no_defs no_defs <> # Madrid 1870 (Madrid) <4903> +proj=longlat +a=6378298.3 +b=6356657.142669562 +pm=madrid +no_defs no_defs <> # Lisbon 1890 (Lisbon) <4904> +proj=longlat +ellps=bessel +pm=lisbon +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 4 <20004> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 5 <20005> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 6 <20006> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 7 <20007> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 8 <20008> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 9 <20009> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 10 <20010> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 11 <20011> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 12 <20012> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 13 <20013> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 14 <20014> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 15 <20015> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 16 <20016> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 17 <20017> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 18 <20018> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 19 <20019> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 20 <20020> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 21 <20021> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 22 <20022> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 23 <20023> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 24 <20024> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 25 <20025> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 26 <20026> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 27 <20027> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 28 <20028> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 29 <20029> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 30 <20030> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 31 <20031> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 32 <20032> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 4N <20064> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 5N <20065> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 6N <20066> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 7N <20067> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 8N <20068> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 9N <20069> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 10N <20070> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 11N <20071> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 12N <20072> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 13N <20073> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 14N <20074> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 15N <20075> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 16N <20076> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 17N <20077> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 18N <20078> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 19N <20079> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 20N <20080> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 21N <20081> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 22N <20082> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 23N <20083> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 24N <20084> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 25N <20085> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 26N <20086> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 27N <20087> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 28N <20088> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 29N <20089> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 30N <20090> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 31N <20091> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 32N <20092> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Adindan / UTM zone 37N <20137> +proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs no_defs <> # Adindan / UTM zone 38N <20138> +proj=utm +zone=38 +ellps=clrk80 +units=m +no_defs no_defs <> # AGD66 / AMG zone 48 <20248> +proj=utm +zone=48 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD66 / AMG zone 49 <20249> +proj=utm +zone=49 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD66 / AMG zone 50 <20250> +proj=utm +zone=50 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD66 / AMG zone 51 <20251> +proj=utm +zone=51 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD66 / AMG zone 52 <20252> +proj=utm +zone=52 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD66 / AMG zone 53 <20253> +proj=utm +zone=53 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD66 / AMG zone 54 <20254> +proj=utm +zone=54 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD66 / AMG zone 55 <20255> +proj=utm +zone=55 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD66 / AMG zone 56 <20256> +proj=utm +zone=56 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD66 / AMG zone 57 <20257> +proj=utm +zone=57 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD66 / AMG zone 58 <20258> +proj=utm +zone=58 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD84 / AMG zone 48 <20348> +proj=utm +zone=48 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD84 / AMG zone 49 <20349> +proj=utm +zone=49 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD84 / AMG zone 50 <20350> +proj=utm +zone=50 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD84 / AMG zone 51 <20351> +proj=utm +zone=51 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD84 / AMG zone 52 <20352> +proj=utm +zone=52 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD84 / AMG zone 53 <20353> +proj=utm +zone=53 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD84 / AMG zone 54 <20354> +proj=utm +zone=54 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD84 / AMG zone 55 <20355> +proj=utm +zone=55 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD84 / AMG zone 56 <20356> +proj=utm +zone=56 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD84 / AMG zone 57 <20357> +proj=utm +zone=57 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD84 / AMG zone 58 <20358> +proj=utm +zone=58 +south +ellps=aust_SA +units=m +no_defs no_defs <> # Ain el Abd / UTM zone 37N <20437> +proj=utm +zone=37 +ellps=intl +units=m +no_defs no_defs <> # Ain el Abd / UTM zone 38N <20438> +proj=utm +zone=38 +ellps=intl +units=m +no_defs no_defs <> # Ain el Abd / UTM zone 39N <20439> +proj=utm +zone=39 +ellps=intl +units=m +no_defs no_defs <> # Ain el Abd / Bahrain Grid <20499> +proj=utm +zone=39 +ellps=intl +units=m +no_defs no_defs <> # Afgooye / UTM zone 38N <20538> +proj=utm +zone=38 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs no_defs <> # Afgooye / UTM zone 39N <20539> +proj=utm +zone=39 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs no_defs <> # Lisbon (Lisbon)/Portuguese National Grid <20790> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=200000 +y_0=300000 +ellps=intl +pm=lisbon +units=m +no_defs no_defs <> # Lisbon (Lisbon)/Portuguese Grid <20791> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=0 +y_0=0 +ellps=intl +pm=lisbon +units=m +no_defs no_defs <> # Aratu / UTM zone 22S <20822> +proj=utm +zone=22 +south +ellps=intl +units=m +no_defs no_defs <> # Aratu / UTM zone 23S <20823> +proj=utm +zone=23 +south +ellps=intl +units=m +no_defs no_defs <> # Aratu / UTM zone 24S <20824> +proj=utm +zone=24 +south +ellps=intl +units=m +no_defs no_defs <> # Arc 1950 / UTM zone 34S <20934> +proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs no_defs <> # Arc 1950 / UTM zone 35S <20935> +proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs no_defs <> # Arc 1950 / UTM zone 36S <20936> +proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs no_defs <> # Arc 1960 / UTM zone 35S <21035> +proj=utm +zone=35 +south +ellps=clrk80 +units=m +no_defs no_defs <> # Arc 1960 / UTM zone 36S <21036> +proj=utm +zone=36 +south +ellps=clrk80 +units=m +no_defs no_defs <> # Arc 1960 / UTM zone 37S <21037> +proj=utm +zone=37 +south +ellps=clrk80 +units=m +no_defs no_defs <> # Arc 1960 / UTM zone 35N <21095> +proj=utm +zone=35 +ellps=clrk80 +units=m +no_defs no_defs <> # Arc 1960 / UTM zone 36N <21096> +proj=utm +zone=36 +ellps=clrk80 +units=m +no_defs no_defs <> # Arc 1960 / UTM zone 37N <21097> +proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs no_defs <> # Batavia (Jakarta) / NEIEZ <21100> +proj=merc +lat_ts=0 +lon_0=216.8077194444444 +k=0.997000 +x_0=3900000 +y_0=900000 +ellps=bessel +pm=jakarta +units=m +no_defs no_defs <> # Batavia / UTM zone 48S <21148> +proj=utm +zone=48 +south +ellps=bessel +units=m +no_defs no_defs <> # Batavia / UTM zone 49S <21149> +proj=utm +zone=49 +south +ellps=bessel +units=m +no_defs no_defs <> # Batavia / UTM zone 50S <21150> +proj=utm +zone=50 +south +ellps=bessel +units=m +no_defs no_defs <> # Barbados 1938 / British West Indies Grid <21291> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs no_defs <> # Barbados 1938 / Barbados National Grid <21292> +proj=tmerc +lat_0=13.17638888888889 +lon_0=-59.55972222222222 +k=0.999999 +x_0=30000 +y_0=75000 +ellps=clrk80 +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger zone 13 <21413> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger zone 14 <21414> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger zone 15 <21415> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger zone 16 <21416> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger zone 17 <21417> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger zone 18 <21418> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger zone 19 <21419> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger zone 20 <21420> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger zone 21 <21421> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger zone 22 <21422> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger zone 23 <21423> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger CM 75E <21453> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger CM 81E <21454> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger CM 87E <21455> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger CM 93E <21456> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger CM 99E <21457> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger CM 105E <21458> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger CM 111E <21459> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger CM 117E <21460> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger CM 123E <21461> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger CM 129E <21462> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger CM 135E <21463> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger 13N <21473> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger 14N <21474> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger 15N <21475> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger 16N <21476> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger 17N <21477> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger 18N <21478> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger 19N <21479> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger 20N <21480> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger 21N <21481> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger 22N <21482> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger 23N <21483> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Belge 1950 (Brussels) / Belge Lambert 50 <21500> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=4.367975 +x_0=150000 +y_0=5400000 +ellps=intl +pm=brussels +units=m +no_defs no_defs <> # Bern 1898 (Bern) / LV03C <21780> +proj=omerc +lat_0=46.95240555555556 +lonc=7.439583333333333 +alpha=90 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=bern +units=m +no_defs no_defs <> # CH1903 / LV03 <21781> +proj=omerc +lat_0=46.95240555555556 +lonc=7.439583333333333 +alpha=90 +k=1 +x_0=600000 +y_0=200000 +ellps=bessel +units=m +no_defs no_defs <> # Bogota 1975 / UTM zone 17N <21817> +proj=utm +zone=17 +ellps=intl +units=m +no_defs no_defs <> # Bogota 1975 / UTM zone 18N <21818> +proj=utm +zone=18 +ellps=intl +units=m +no_defs no_defs <> # Bogota 1975 / Colombia West zone <21891> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1.000000 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs no_defs <> # Bogota 1975 / Colombia Bogota zone <21892> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1.000000 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs no_defs <> # Bogota 1975 / Colombia East Central zone <21893> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1.000000 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs no_defs <> # Bogota 1975 / Colombia East <21894> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1.000000 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs no_defs <> # Camacupa / UTM zone 32S <22032> +proj=utm +zone=32 +south +ellps=clrk80 +units=m +no_defs no_defs <> # Camacupa / UTM zone 33S <22033> +proj=utm +zone=33 +south +ellps=clrk80 +units=m +no_defs no_defs <> # Camacupa / TM 11.30 SE <22091> +proj=tmerc +lat_0=0 +lon_0=11.5 +k=0.999600 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs no_defs <> # Camacupa / TM 12 SE <22092> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.999600 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs no_defs <> # Campo Inchauspe / Argentina 1 <22191> +proj=tmerc +lat_0=-90 +lon_0=-72 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # Campo Inchauspe / Argentina 2 <22192> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # Campo Inchauspe / Argentina 3 <22193> +proj=tmerc +lat_0=-90 +lon_0=-66 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # Campo Inchauspe / Argentina 4 <22194> +proj=tmerc +lat_0=-90 +lon_0=-63 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # Campo Inchauspe / Argentina 5 <22195> +proj=tmerc +lat_0=-90 +lon_0=-60 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # Campo Inchauspe / Argentina 6 <22196> +proj=tmerc +lat_0=-90 +lon_0=-57 +k=1.000000 +x_0=6500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # Campo Inchauspe / Argentina 7 <22197> +proj=tmerc +lat_0=-90 +lon_0=-54 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # Cape / UTM zone 34S <22234> +proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs no_defs <> # Cape / UTM zone 35S <22235> +proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs no_defs <> # Cape / UTM zone 36S <22236> +proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs no_defs <> # South African Coordinate System zone 15 # South African Coordinate System zone 17 # South African Coordinate System zone 19 # South African Coordinate System zone 21 # South African Coordinate System zone 23 # South African Coordinate System zone 25 # South African Coordinate System zone 27 # South African Coordinate System zone 29 # South African Coordinate System zone 31 # South African Coordinate System zone 33 # Carthage (Paris) / Tunisia Mining Grid # Carthage / UTM zone 32N <22332> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # Carthage / Nord Tunisie <22391> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=9.9 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # Carthage / Sud Tunisie <22392> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=9.9 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # Corrego Alegre / UTM zone 23S <22523> +proj=utm +zone=23 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs no_defs <> # Corrego Alegre / UTM zone 24S <22524> +proj=utm +zone=24 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs no_defs <> # Deir ez Zor / Levant Zone <22700> +proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # Deir ez Zor / Syria Lambert <22770> +proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # Deir ez Zor / Levant Stereographic <22780> +proj=stere +lat_0=34.2 +lon_0=39.15 +k=0.999534 +x_0=0 +y_0=0 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # Douala / UTM zone 32N <22832> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # Egypt 1907 / Blue Belt <22991> +proj=tmerc +lat_0=30 +lon_0=35 +k=1.000000 +x_0=300000 +y_0=1100000 +ellps=helmert +units=m +no_defs no_defs <> # Egypt 1907 / Red Belt <22992> +proj=tmerc +lat_0=30 +lon_0=31 +k=1.000000 +x_0=615000 +y_0=810000 +ellps=helmert +units=m +no_defs no_defs <> # Egypt 1907 / Purple Belt <22993> +proj=tmerc +lat_0=30 +lon_0=27 +k=1.000000 +x_0=700000 +y_0=200000 +ellps=helmert +units=m +no_defs no_defs <> # Egypt 1907 / Extended Purple Belt <22994> +proj=tmerc +lat_0=30 +lon_0=27 +k=1.000000 +x_0=700000 +y_0=1200000 +ellps=helmert +units=m +no_defs no_defs <> # ED50 / UTM zone 28N <23028> +proj=utm +zone=28 +ellps=intl +units=m +no_defs no_defs <> # ED50 / UTM zone 29N <23029> +proj=utm +zone=29 +ellps=intl +units=m +no_defs no_defs <> # ED50 / UTM zone 30N <23030> +proj=utm +zone=30 +ellps=intl +units=m +no_defs no_defs <> # ED50 / UTM zone 31N <23031> +proj=utm +zone=31 +ellps=intl +units=m +no_defs no_defs <> # ED50 / UTM zone 32N <23032> +proj=utm +zone=32 +ellps=intl +units=m +no_defs no_defs <> # ED50 / UTM zone 33N <23033> +proj=utm +zone=33 +ellps=intl +units=m +no_defs no_defs <> # ED50 / UTM zone 34N <23034> +proj=utm +zone=34 +ellps=intl +units=m +no_defs no_defs <> # ED50 / UTM zone 35N <23035> +proj=utm +zone=35 +ellps=intl +units=m +no_defs no_defs <> # ED50 / UTM zone 36N <23036> +proj=utm +zone=36 +ellps=intl +units=m +no_defs no_defs <> # ED50 / UTM zone 37N <23037> +proj=utm +zone=37 +ellps=intl +units=m +no_defs no_defs <> # ED50 / UTM zone 38N <23038> +proj=utm +zone=38 +ellps=intl +units=m +no_defs no_defs <> # ED50 / TM 0 N <23090> +proj=tmerc +lat_0=0 +lon_0=0 +k=0.999600 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ED50 / TM 5 NE <23095> +proj=tmerc +lat_0=0 +lon_0=5 +k=0.999600 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # Fahud / UTM zone 39N <23239> +proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs no_defs <> # Fahud / UTM zone 40N <23240> +proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs no_defs <> # Garoua / UTM zone 33N <23433> +proj=utm +zone=33 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # HD72 / EOV <23700> +proj=omerc +lat_0=47.14439372222222 +lonc=19.04857177777778 +alpha=90 +k=0.99993 +x_0=650000 +y_0=200000 +ellps=GRS67 +units=m +no_defs no_defs <> # ID74 / UTM zone 46N <23846> +proj=utm +zone=46 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 47N <23847> +proj=utm +zone=47 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 48N <23848> +proj=utm +zone=48 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 49N <23849> +proj=utm +zone=49 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 50N <23850> +proj=utm +zone=50 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 51N <23851> +proj=utm +zone=51 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 52N <23852> +proj=utm +zone=52 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 53N <23853> +proj=utm +zone=53 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 46S <23886> +proj=utm +zone=46 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 47S <23887> +proj=utm +zone=47 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 48S <23888> +proj=utm +zone=48 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 49S <23889> +proj=utm +zone=49 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 50S <23890> +proj=utm +zone=50 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 51S <23891> +proj=utm +zone=51 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 52S <23892> +proj=utm +zone=52 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 53S <23893> +proj=utm +zone=53 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 54S <23894> +proj=utm +zone=54 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # Indian 1954 / UTM zone 46N <23946> +proj=utm +zone=46 +a=6377276.345 +b=6356075.413140239 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs no_defs <> # Indian 1954 / UTM zone 47N <23947> +proj=utm +zone=47 +a=6377276.345 +b=6356075.413140239 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs no_defs <> # Indian 1954 / UTM zone 48N <23948> +proj=utm +zone=48 +a=6377276.345 +b=6356075.413140239 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs no_defs <> # Indian 1975 / UTM zone 47N <24047> +proj=utm +zone=47 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <> # Indian 1975 / UTM zone 48N <24048> +proj=utm +zone=48 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <> # Jamaica 1875 / Jamaica (Old Grid) <24100> +proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=167638.49575 +y_0=121918.906 +ellps=clrk80 +to_meter=0.304797265 +no_defs no_defs <> # JAD69 / Jamaica National Grid <24200> +proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=250000 +y_0=150000 +ellps=clrk66 +units=m +no_defs no_defs <> # Kalianpur 1937 / UTM zone 45N <24305> +proj=utm +zone=45 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <> # Kalianpur 1937 / UTM zone 46N <24306> +proj=utm +zone=46 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <> # Kalianpur 1962 / UTM zone 41N <24311> +proj=utm +zone=41 +a=6377301.243 +b=6356100.230165385 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs no_defs <> # Kalianpur 1962 / UTM zone 42N <24312> +proj=utm +zone=42 +a=6377301.243 +b=6356100.230165385 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs no_defs <> # Kalianpur 1962 / UTM zone 43N <24313> +proj=utm +zone=43 +a=6377301.243 +b=6356100.230165385 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs no_defs <> # Kalianpur 1975 / UTM zone 42N <24342> +proj=utm +zone=42 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> # Kalianpur 1975 / UTM zone 43N <24343> +proj=utm +zone=43 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> # Kalianpur 1975 / UTM zone 44N <24344> +proj=utm +zone=44 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> # Kalianpur 1975 / UTM zone 45N <24345> +proj=utm +zone=45 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> # Kalianpur 1975 / UTM zone 46N <24346> +proj=utm +zone=46 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> # Kalianpur 1975 / UTM zone 47N <24347> +proj=utm +zone=47 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> # Kalianpur 1880 / India zone 0 <24370> +proj=lcc +lat_1=39.5 +lat_0=39.5 +lon_0=68 +k_0=0.99846154 +x_0=2153865.73916853 +y_0=2368292.194628102 +a=6377299.36559538 +b=6356098.357204817 +to_meter=0.9143985307444408 +no_defs no_defs <> # Kalianpur 1880 / India zone I <24371> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.357204817 +to_meter=0.9143985307444408 +no_defs no_defs <> # Kalianpur 1880 / India zone IIa <24372> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.357204817 +to_meter=0.9143985307444408 +no_defs no_defs <> # Kalianpur 1880 / India zone III <24373> +proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.357204817 +to_meter=0.9143985307444408 +no_defs no_defs <> # Kalianpur 1880 / India zone IV <24374> +proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.357204817 +to_meter=0.9143985307444408 +no_defs no_defs <> # Kalianpur 1937 / India zone IIb <24375> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743185.69 +y_0=914395.23 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <> # Kalianpur 1962 / India zone I <24376> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165385 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs no_defs <> # Kalianpur 1962 / India zone IIa <24377> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165385 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs no_defs <> # Kalianpur 1975 / India zone I <24378> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> # Kalianpur 1975 / India zone IIa <24379> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> # Kalianpur 1975 / India zone IIb <24380> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> # Kalianpur 1975 / India zone III <24381> +proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> # Kalianpur 1880 / India zone IIb <24382> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.357204817 +to_meter=0.9143985307444408 +no_defs no_defs <> # Kalianpur 1975 / India zone IV <24383> +proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> # Kertau / Singapore Grid <24500> +proj=cass +lat_0=1.287646666666667 +lon_0=103.8530022222222 +x_0=30000 +y_0=30000 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs no_defs <> # Kertau / UTM zone 47N <24547> +proj=utm +zone=47 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs no_defs <> # Kertau / UTM zone 48N <24548> +proj=utm +zone=48 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs no_defs <> # Kertau / R.S.O. Malaya (ch) <24571> +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804671.2997750348 +y_0=0 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +to_meter=20.11678249437587 +no_defs no_defs <> # KOC Lambert <24600> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +units=m +no_defs no_defs <> # La Canoa / UTM zone 18N <24718> +proj=utm +zone=18 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs no_defs <> # La Canoa / UTM zone 19N <24719> +proj=utm +zone=19 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs no_defs <> # La Canoa / UTM zone 20N <24720> +proj=utm +zone=20 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs no_defs <> # PSAD56 / UTM zone 18N <24818> +proj=utm +zone=18 +ellps=intl +units=m +no_defs no_defs <> # PSAD56 / UTM zone 19N <24819> +proj=utm +zone=19 +ellps=intl +units=m +no_defs no_defs <> # PSAD56 / UTM zone 20N <24820> +proj=utm +zone=20 +ellps=intl +units=m +no_defs no_defs <> # PSAD56 / UTM zone 21N <24821> +proj=utm +zone=21 +ellps=intl +units=m +no_defs no_defs <> # PSAD56 / UTM zone 17S <24877> +proj=utm +zone=17 +south +ellps=intl +units=m +no_defs no_defs <> # PSAD56 / UTM zone 18S <24878> +proj=utm +zone=18 +south +ellps=intl +units=m +no_defs no_defs <> # PSAD56 / UTM zone 19S <24879> +proj=utm +zone=19 +south +ellps=intl +units=m +no_defs no_defs <> # PSAD56 / UTM zone 20S <24880> +proj=utm +zone=20 +south +ellps=intl +units=m +no_defs no_defs <> # PSAD56 / UTM zone 22S <24882> +proj=utm +zone=22 +south +ellps=intl +units=m +no_defs no_defs <> # PSAD56 / Peru west zone <24891> +proj=tmerc +lat_0=-6 +lon_0=-80.5 +k=0.999830 +x_0=222000 +y_0=1426834.743 +ellps=intl +units=m +no_defs no_defs <> # PSAD56 / Peru central zone <24892> +proj=tmerc +lat_0=-9.5 +lon_0=-76 +k=0.999330 +x_0=720000 +y_0=1039979.159 +ellps=intl +units=m +no_defs no_defs <> # PSAD56 / Peru east zone <24893> +proj=tmerc +lat_0=-9.5 +lon_0=-70.5 +k=0.999530 +x_0=1324000 +y_0=1040084.558 +ellps=intl +units=m +no_defs no_defs <> # Leigon / Ghana Metre Grid <25000> +proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.999750 +x_0=274319.51 +y_0=0 +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +units=m +no_defs no_defs <> # Lome / UTM zone 31N <25231> +proj=utm +zone=31 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # Luzon 1911 / Philippines zone I <25391> +proj=tmerc +lat_0=0 +lon_0=117 +k=0.999950 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # Luzon 1911 / Philippines zone II <25392> +proj=tmerc +lat_0=0 +lon_0=119 +k=0.999950 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # Luzon 1911 / Philippines zone III <25393> +proj=tmerc +lat_0=0 +lon_0=121 +k=0.999950 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # Luzon 1911 / Philippines zone IV <25394> +proj=tmerc +lat_0=0 +lon_0=123 +k=0.999950 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # Luzon 1911 / Philippines zone V <25395> +proj=tmerc +lat_0=0 +lon_0=125 +k=0.999950 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # Makassar (Jakarta) / NEIEZ <25700> +proj=merc +lat_ts=0 +lon_0=216.8077194444444 +k=0.997000 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +units=m +no_defs no_defs <> # ETRS89 / UTM zone 28N <25828> +proj=utm +zone=28 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / UTM zone 29N <25829> +proj=utm +zone=29 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / UTM zone 30N <25830> +proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / UTM zone 31N <25831> +proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / UTM zone 32N <25832> +proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / UTM zone 33N <25833> +proj=utm +zone=33 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / UTM zone 34N <25834> +proj=utm +zone=34 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / UTM zone 35N <25835> +proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / UTM zone 36N <25836> +proj=utm +zone=36 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / UTM zone 37N <25837> +proj=utm +zone=37 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / UTM zone 38N <25838> +proj=utm +zone=38 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / TM Baltic93 <25884> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999600 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> # Malongo 1987 / UTM zone 32S <25932> +proj=utm +zone=32 +south +ellps=intl +units=m +no_defs no_defs <> # Merchich / Nord Maroc <26191> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=-5.4 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs no_defs <> # Merchich / Sud Maroc <26192> +proj=lcc +lat_1=29.7 +lat_0=29.7 +lon_0=-5.4 +k_0=0.9996155960000001 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs no_defs <> # Merchich / Sahara <26193> +proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.9996 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs no_defs <> # Massawa / UTM zone 37N <26237> +proj=utm +zone=37 +ellps=bessel +towgs84=639,405,60,0,0,0,0 +units=m +no_defs no_defs <> # Minna / UTM zone 31N <26331> +proj=utm +zone=31 +ellps=clrk80 +units=m +no_defs no_defs <> # Minna / UTM zone 32N <26332> +proj=utm +zone=32 +ellps=clrk80 +units=m +no_defs no_defs <> # Minna / Nigeria West Belt <26391> +proj=tmerc +lat_0=4 +lon_0=4.5 +k=0.999750 +x_0=230738.26 +y_0=0 +ellps=clrk80 +units=m +no_defs no_defs <> # Minna / Nigeria Mid Belt <26392> +proj=tmerc +lat_0=4 +lon_0=8.5 +k=0.999750 +x_0=670553.98 +y_0=0 +ellps=clrk80 +units=m +no_defs no_defs <> # Minna / Nigeria East Belt <26393> +proj=tmerc +lat_0=4 +lon_0=12.5 +k=0.999750 +x_0=1110369.7 +y_0=0 +ellps=clrk80 +units=m +no_defs no_defs <> # Mhast / UTM zone 32S <26432> +proj=utm +zone=32 +south +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +units=m +no_defs no_defs <> # Monte Mario (Rome) / Italy zone 1 <26591> +proj=tmerc +lat_0=0 +lon_0=21.45233333333333 +k=0.999600 +x_0=1500000 +y_0=0 +ellps=intl +pm=rome +units=m +no_defs no_defs <> # Monte Mario (Rome) / Italy zone 2 <26592> +proj=tmerc +lat_0=0 +lon_0=27.45233333333333 +k=0.999600 +x_0=2520000 +y_0=0 +ellps=intl +pm=rome +units=m +no_defs no_defs <> # M'poraloko / UTM zone 32N <26632> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # M'poraloko / UTM zone 32S <26692> +proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # NAD27 / UTM zone 3N <26703> +proj=utm +zone=3 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 4N <26704> +proj=utm +zone=4 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 5N <26705> +proj=utm +zone=5 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 6N <26706> +proj=utm +zone=6 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 7N <26707> +proj=utm +zone=7 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 8N <26708> +proj=utm +zone=8 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 9N <26709> +proj=utm +zone=9 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 10N <26710> +proj=utm +zone=10 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 11N <26711> +proj=utm +zone=11 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 12N <26712> +proj=utm +zone=12 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 13N <26713> +proj=utm +zone=13 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 14N <26714> +proj=utm +zone=14 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 15N <26715> +proj=utm +zone=15 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 16N <26716> +proj=utm +zone=16 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 17N <26717> +proj=utm +zone=17 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 18N <26718> +proj=utm +zone=18 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 19N <26719> +proj=utm +zone=19 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 20N <26720> +proj=utm +zone=20 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 21N <26721> +proj=utm +zone=21 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 22N <26722> +proj=utm +zone=22 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / Alabama East <26729> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Alabama West <26730> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Alaska zone 1 <26731> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000.001016002 +y_0=-5000000.001016002 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Alaska zone 2 <26732> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Alaska zone 3 <26733> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Alaska zone 4 <26734> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Alaska zone 5 <26735> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Alaska zone 6 <26736> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Alaska zone 7 <26737> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.999900 +x_0=213360.4267208534 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Alaska zone 8 <26738> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Alaska zone 9 <26739> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.999900 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Alaska zone 10 <26740> +proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=914401.8288036576 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / California zone I <26741> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / California zone II <26742> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / California zone III <26743> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / California zone IV <26744> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / California zone V <26745> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / California zone VI <26746> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / California zone VII <26747> +proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=127079.524511049 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Arizona East <26748> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Arizona Central <26749> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Arizona West <26750> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Arkansas North <26751> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Arkansas South <26752> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Colorado North <26753> +proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Colorado Central <26754> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Colorado South <26755> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Connecticut <26756> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Delaware <26757> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Florida East <26758> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Florida West <26759> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Florida North <26760> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Georgia East <26766> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Georgia West <26767> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Idaho East <26768> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Idaho Central <26769> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Idaho West <26770> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Illinois East <26771> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Illinois West <26772> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Indiana East <26773> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Indiana West <26774> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Iowa North <26775> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Iowa South <26776> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Kansas North <26777> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Kansas South <26778> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Kentucky North <26779> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Kentucky South <26780> +proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Louisiana North <26781> +proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.66666666666667 +lon_0=-92.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Louisiana South <26782> +proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Maine East <26783> +proj=tmerc +lat_0=43.83333333333334 +lon_0=-68.5 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Maine West <26784> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Maryland <26785> +proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.83333333333334 +lon_0=-77 +x_0=243840.4876809754 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Massachusetts Mainland <26786> +proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Massachusetts Island <26787> +proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=60960.12192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Minnesota North <26791> +proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Minnesota Central <26792> +proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Minnesota South <26793> +proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Mississippi East <26794> +proj=tmerc +lat_0=29.66666666666667 +lon_0=-88.83333333333333 +k=0.999960 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Mississippi West <26795> +proj=tmerc +lat_0=30.5 +lon_0=-90.33333333333333 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Missouri East <26796> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Missouri Central <26797> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Missouri West <26798> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD Michigan / Michigan East <26801> +proj=tmerc +lat_0=41.5 +lon_0=-83.66666666666667 +k=0.999943 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD Michigan / Michigan Old Central <26802> +proj=tmerc +lat_0=41.5 +lon_0=-85.75 +k=0.999909 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD Michigan / Michigan West <26803> +proj=tmerc +lat_0=41.5 +lon_0=-88.75 +k=0.999909 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD Michigan / Michigan North <26811> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD Michigan / Michigan Central <26812> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD Michigan / Michigan South <26813> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / UTM zone 3N <26903> +proj=utm +zone=3 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 4N <26904> +proj=utm +zone=4 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 5N <26905> +proj=utm +zone=5 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 6N <26906> +proj=utm +zone=6 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 7N <26907> +proj=utm +zone=7 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 8N <26908> +proj=utm +zone=8 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 9N <26909> +proj=utm +zone=9 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 10N <26910> +proj=utm +zone=10 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 11N <26911> +proj=utm +zone=11 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 12N <26912> +proj=utm +zone=12 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 13N <26913> +proj=utm +zone=13 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 14N <26914> +proj=utm +zone=14 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 15N <26915> +proj=utm +zone=15 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 16N <26916> +proj=utm +zone=16 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 17N <26917> +proj=utm +zone=17 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 18N <26918> +proj=utm +zone=18 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 19N <26919> +proj=utm +zone=19 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 20N <26920> +proj=utm +zone=20 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 21N <26921> +proj=utm +zone=21 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 22N <26922> +proj=utm +zone=22 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 23N <26923> +proj=utm +zone=23 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Alabama East <26929> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Alabama West <26930> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Alaska zone 1 <26931> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Alaska zone 2 <26932> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Alaska zone 3 <26933> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Alaska zone 4 <26934> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Alaska zone 5 <26935> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Alaska zone 6 <26936> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Alaska zone 7 <26937> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Alaska zone 8 <26938> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Alaska zone 9 <26939> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Alaska zone 10 <26940> +proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / California zone 1 <26941> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / California zone 2 <26942> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / California zone 3 <26943> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / California zone 4 <26944> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / California zone 5 <26945> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / California zone 6 <26946> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Arizona East <26948> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Arizona Central <26949> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Arizona West <26950> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Arkansas North <26951> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Arkansas South <26952> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Colorado North <26953> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Colorado Central <26954> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Colorado South <26955> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Connecticut <26956> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Delaware <26957> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Florida East <26958> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Florida West <26959> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Florida North <26960> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Hawaii zone 1 <26961> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Hawaii zone 2 <26962> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Hawaii zone 3 <26963> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Hawaii zone 4 <26964> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Hawaii zone 5 <26965> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Georgia East <26966> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Georgia West <26967> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Idaho East <26968> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Idaho Central <26969> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Idaho West <26970> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=800000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Illinois East <26971> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Illinois West <26972> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Indiana East <26973> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=100000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Indiana West <26974> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Iowa North <26975> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Iowa South <26976> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Kansas North <26977> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Kansas South <26978> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Kentucky North <26979> +proj=lcc +lat_1=37.96666666666667 +lat_2=37.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Kentucky South <26980> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Louisiana North <26981> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Louisiana South <26982> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Maine East <26983> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.999900 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Maine West <26984> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=900000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Maryland <26985> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Massachusetts Mainland <26986> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Massachusetts Island <26987> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Michigan North <26988> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Michigan Central <26989> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Michigan South <26990> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Minnesota North <26991> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Minnesota Central <26992> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Minnesota South <26993> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Mississippi East <26994> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Mississippi West <26995> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Missouri East <26996> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Missouri Central <26997> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Missouri West <26998> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=850000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # Nahrwan 1967 / UTM zone 38N <27038> +proj=utm +zone=38 +ellps=clrk80 +units=m +no_defs no_defs <> # Nahrwan 1967 / UTM zone 39N <27039> +proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs no_defs <> # Nahrwan 1967 / UTM zone 40N <27040> +proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs no_defs <> # Naparima 1972 / UTM zone 20N <27120> +proj=utm +zone=20 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / New Zealand Map Grid <27200> +proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Mount Eden Circuit <27205> +proj=tmerc +lat_0=-36.87986527777778 +lon_0=174.7643393611111 +k=0.999900 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Bay of Plenty Circuit <27206> +proj=tmerc +lat_0=-37.76124980555556 +lon_0=176.46619725 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Poverty Bay Circuit <27207> +proj=tmerc +lat_0=-38.62470277777778 +lon_0=177.8856362777778 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Hawkes Bay Circuit <27208> +proj=tmerc +lat_0=-39.65092930555556 +lon_0=176.6736805277778 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Taranaki Circuit <27209> +proj=tmerc +lat_0=-39.13575830555556 +lon_0=174.22801175 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Tuhirangi Circuit <27210> +proj=tmerc +lat_0=-39.51247038888889 +lon_0=175.6400368055556 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Wanganui Circuit <27211> +proj=tmerc +lat_0=-40.24194713888889 +lon_0=175.4880996111111 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Wairarapa Circuit <27212> +proj=tmerc +lat_0=-40.92553263888889 +lon_0=175.6473496666667 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Wellington Circuit <27213> +proj=tmerc +lat_0=-41.30131963888888 +lon_0=174.7766231111111 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Collingwood Circuit <27214> +proj=tmerc +lat_0=-40.71475905555556 +lon_0=172.6720465 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Nelson Circuit <27215> +proj=tmerc +lat_0=-41.27454472222222 +lon_0=173.2993168055555 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Karamea Circuit <27216> +proj=tmerc +lat_0=-41.28991152777778 +lon_0=172.1090281944444 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Buller Circuit <27217> +proj=tmerc +lat_0=-41.81080286111111 +lon_0=171.5812600555556 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Grey Circuit <27218> +proj=tmerc +lat_0=-42.33369427777778 +lon_0=171.5497713055556 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Amuri Circuit <27219> +proj=tmerc +lat_0=-42.68911658333333 +lon_0=173.0101333888889 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Marlborough Circuit <27220> +proj=tmerc +lat_0=-41.54448666666666 +lon_0=173.8020741111111 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Hokitika Circuit <27221> +proj=tmerc +lat_0=-42.88632236111111 +lon_0=170.9799935 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Okarito Circuit <27222> +proj=tmerc +lat_0=-43.11012813888889 +lon_0=170.2609258333333 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Jacksons Bay Circuit <27223> +proj=tmerc +lat_0=-43.97780288888889 +lon_0=168.606267 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Mount Pleasant Circuit <27224> +proj=tmerc +lat_0=-43.59063758333333 +lon_0=172.7271935833333 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Gawler Circuit <27225> +proj=tmerc +lat_0=-43.74871155555556 +lon_0=171.3607484722222 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Timaru Circuit <27226> +proj=tmerc +lat_0=-44.40222036111111 +lon_0=171.0572508333333 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Lindis Peak Circuit <27227> +proj=tmerc +lat_0=-44.73526797222222 +lon_0=169.4677550833333 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Mount Nicholas Circuit <27228> +proj=tmerc +lat_0=-45.13290258333333 +lon_0=168.3986411944444 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Mount York Circuit <27229> +proj=tmerc +lat_0=-45.56372616666666 +lon_0=167.7388617777778 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Observation Point Circuit <27230> +proj=tmerc +lat_0=-45.81619661111111 +lon_0=170.6285951666667 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / North Taieri Circuit <27231> +proj=tmerc +lat_0=-45.86151336111111 +lon_0=170.2825891111111 +k=0.999960 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Bluff Circuit <27232> +proj=tmerc +lat_0=-46.60000961111111 +lon_0=168.342872 +k=1.000000 +x_0=300002.66 +y_0=699999.58 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / UTM zone 58S <27258> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / UTM zone 59S <27259> +proj=utm +zone=59 +south +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / UTM zone 60S <27260> +proj=utm +zone=60 +south +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / North Island Grid <27291> +proj=tmerc +lat_0=-39 +lon_0=175.5 +k=1.000000 +x_0=274319.5243848086 +y_0=365759.3658464114 +ellps=intl +to_meter=0.9143984146160287 +no_defs no_defs <> # NZGD49 / South Island Grid <27292> +proj=tmerc +lat_0=-44 +lon_0=171.5 +k=1.000000 +x_0=457199.2073080143 +y_0=457199.2073080143 +ellps=intl +to_meter=0.9143984146160287 +no_defs no_defs <> # NGO 1948 (Oslo) / NGO zone I <27391> +proj=tmerc +lat_0=58 +lon_0=6.056250000000003 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <> # NGO 1948 (Oslo) / NGO zone II <27392> +proj=tmerc +lat_0=58 +lon_0=8.389583333333336 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <> # NGO 1948 (Oslo) / NGO zone III <27393> +proj=tmerc +lat_0=58 +lon_0=10.72291666666667 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <> # NGO 1948 (Oslo) / NGO zone IV <27394> +proj=tmerc +lat_0=58 +lon_0=13.22291666666667 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <> # NGO 1948 (Oslo) / NGO zone V <27395> +proj=tmerc +lat_0=58 +lon_0=16.88958333333334 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <> # NGO 1948 (Oslo) / NGO zone VI <27396> +proj=tmerc +lat_0=58 +lon_0=20.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <> # NGO 1948 (Oslo) / NGO zone VII <27397> +proj=tmerc +lat_0=58 +lon_0=24.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <> # NGO 1948 (Oslo) / NGO zone VIII <27398> +proj=tmerc +lat_0=58 +lon_0=29.05625 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <> # Datum 73 / UTM zone 29N <27429> +proj=utm +zone=29 +ellps=intl +units=m +no_defs no_defs <> # Datum 73 / Modified Portuguese Grid <27492> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +units=m +no_defs no_defs <> # ATF (Paris) / Nord de Guerre <27500> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=7.737229170000001 +k_0=0.99950908 +x_0=500000 +y_0=300000 +a=6376523 +b=6355862.933255573 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / Lambert Nord France <27561> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=2.33722917 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / Lambert Centre France <27562> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.33722917 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / Lambert Sud France <27563> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=2.33722917 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / Lambert Corse <27564> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=2.33722917 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / Lambert zone I <27571> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=2.33722917 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / Lambert zone II <27572> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.33722917 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / Lambert zone III <27573> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=2.33722917 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / Lambert zone IV <27574> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=2.33722917 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / France I <27581> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=2.33722917 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / France II <27582> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.33722917 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / France III <27583> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=2.33722917 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / France IV <27584> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=2.33722917 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / Nord France <27591> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=2.33722917 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / Centre France <27592> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.33722917 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / Sud France <27593> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=2.33722917 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / Corse <27594> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=2.33722917 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # OSGB 1936 / British National Grid <27700> +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.999601 +x_0=400000 +y_0=-100000 +ellps=airy +units=m +no_defs no_defs <> # Palestine 1923 / Palestine Grid <28191> +proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=126867.909 +a=6378300.789 +b=6356566.435 +units=m +no_defs no_defs <> # Palestine 1923 / Palestine Belt <28192> +proj=tmerc +lat_0=31.73409694444445 +lon_0=35.21208055555556 +k=1.000000 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +units=m +no_defs no_defs <> # Palestine 1923 / Israeli CS Grid <28193> +proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +units=m +no_defs no_defs <> # Pointe Noire / UTM zone 32S <28232> +proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # GDA94 / MGA zone 48 <28348> +proj=utm +zone=48 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # GDA94 / MGA zone 49 <28349> +proj=utm +zone=49 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # GDA94 / MGA zone 50 <28350> +proj=utm +zone=50 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # GDA94 / MGA zone 51 <28351> +proj=utm +zone=51 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # GDA94 / MGA zone 52 <28352> +proj=utm +zone=52 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # GDA94 / MGA zone 53 <28353> +proj=utm +zone=53 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # GDA94 / MGA zone 54 <28354> +proj=utm +zone=54 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # GDA94 / MGA zone 55 <28355> +proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # GDA94 / MGA zone 56 <28356> +proj=utm +zone=56 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # GDA94 / MGA zone 57 <28357> +proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # GDA94 / MGA zone 58 <28358> +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 2 <28402> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 3 <28403> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 4 <28404> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 5 <28405> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 6 <28406> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 7 <28407> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 8 <28408> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 9 <28409> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 10 <28410> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 11 <28411> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 12 <28412> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 13 <28413> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 14 <28414> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 15 <28415> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 16 <28416> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 17 <28417> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 18 <28418> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 19 <28419> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 20 <28420> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 21 <28421> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 22 <28422> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 23 <28423> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 24 <28424> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 25 <28425> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 26 <28426> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 27 <28427> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 28 <28428> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 29 <28429> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 30 <28430> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 31 <28431> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 32 <28432> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 2N <28462> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 3N <28463> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 4N <28464> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 5N <28465> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 6N <28466> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 7N <28467> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 8N <28468> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 9N <28469> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 10N <28470> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 11N <28471> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 12N <28472> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 13N <28473> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 14N <28474> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 15N <28475> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 16N <28476> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 17N <28477> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 18N <28478> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 19N <28479> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 20N <28480> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 21N <28481> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 22N <28482> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 23N <28483> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 24N <28484> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 25N <28485> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 26N <28486> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 27N <28487> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 28N <28488> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 29N <28489> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 30N <28490> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 31N <28491> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 32N <28492> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Qatar 1974 / Qatar National Grid <28600> +proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.999990 +x_0=200000 +y_0=300000 +ellps=intl +units=m +no_defs no_defs <> # Amersfoort / RD Old <28991> +proj=stere +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.999908 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Amersfoort / RD New <28992> +proj=stere +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.999908 +x_0=155000 +y_0=463000 +ellps=bessel +units=m +no_defs no_defs <> # SAD69 / Brazil Polyconic <29100> +proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=GRS67 +units=m +no_defs no_defs <> # SAD69 / UTM zone 18N <29118> +proj=utm +zone=18 +ellps=GRS67 +units=m +no_defs no_defs <> # SAD69 / UTM zone 19N <29119> +proj=utm +zone=19 +ellps=GRS67 +units=m +no_defs no_defs <> # SAD69 / UTM zone 20N <29120> +proj=utm +zone=20 +ellps=GRS67 +units=m +no_defs no_defs <> # SAD69 / UTM zone 21N <29121> +proj=utm +zone=21 +ellps=GRS67 +units=m +no_defs no_defs <> # SAD69 / UTM zone 22N <29122> +proj=utm +zone=22 +ellps=GRS67 +units=m +no_defs no_defs <> # SAD69 / UTM zone 17S <29177> +proj=utm +zone=17 +south +ellps=GRS67 +units=m +no_defs no_defs <> # SAD69 / UTM zone 18S <29178> +proj=utm +zone=18 +south +ellps=GRS67 +units=m +no_defs no_defs <> # SAD69 / UTM zone 19S <29179> +proj=utm +zone=19 +south +ellps=GRS67 +units=m +no_defs no_defs <> # SAD69 / UTM zone 20S <29180> +proj=utm +zone=20 +south +ellps=GRS67 +units=m +no_defs no_defs <> # SAD69 / UTM zone 21S <29181> +proj=utm +zone=21 +south +ellps=GRS67 +units=m +no_defs no_defs <> # SAD69 / UTM zone 22S <29182> +proj=utm +zone=22 +south +ellps=GRS67 +units=m +no_defs no_defs <> # SAD69 / UTM zone 23S <29183> +proj=utm +zone=23 +south +ellps=GRS67 +units=m +no_defs no_defs <> # SAD69 / UTM zone 24S <29184> +proj=utm +zone=24 +south +ellps=GRS67 +units=m +no_defs no_defs <> # SAD69 / UTM zone 25S <29185> +proj=utm +zone=25 +south +ellps=GRS67 +units=m +no_defs no_defs <> # Sapper Hill 1943 / UTM zone 20S <29220> +proj=utm +zone=20 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs no_defs <> # Sapper Hill 1943 / UTM zone 21S <29221> +proj=utm +zone=21 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs no_defs <> # Schwarzeck / UTM zone 33S <29333> +proj=utm +zone=33 +south +ellps=bess_nam +units=m +no_defs no_defs <> # South West African Coord. System zone 11 # South West African Coord. System zone 13 # South West African Coord. System zone 15 # South West African Coord. System zone 17 # South West African Coord. System zone 19 # South West African Coord. System zone 21 # South West African Coord. System zone 23 # South West African Coord. System zone 25 # Sudan / UTM zone 35N <29635> +proj=utm +zone=35 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # Sudan / UTM zone 36N <29636> +proj=utm +zone=36 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # Tananarive (Paris) / Laborde Grid <29700> +proj=omerc +lat_0=-18.9 +lonc=46.43722917000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # Tananarive / UTM zone 38S <29738> +proj=utm +zone=38 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs no_defs <> # Tananarive / UTM zone 39S <29739> +proj=utm +zone=39 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs no_defs <> # Timbalai 1948 / UTM zone 49N <29849> +proj=utm +zone=49 +ellps=evrstSS +units=m +no_defs no_defs <> # Timbalai 1948 / UTM zone 50N <29850> +proj=utm +zone=50 +ellps=evrstSS +units=m +no_defs no_defs <> # Timbalai 1948 / R.S.O. Borneo (ch) <29871> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8714630401 +y_0=442857.653094361 +ellps=evrstSS +to_meter=20.11676512155263 +no_defs no_defs <> # Timbalai 1948 / R.S.O. Borneo (ft) <29872> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8727431979 +y_0=442857.6545573985 +ellps=evrstSS +to_meter=0.3047994715386762 +no_defs no_defs <> # Timbalai 1948 / R.S.O. Borneo (m) <29873> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.87 +y_0=442857.65 +ellps=evrstSS +units=m +no_defs no_defs <> # TM65 / Irish National Grid <29900> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +a=6377340.189 +b=6356034.447938534 +units=m +no_defs no_defs <> # OSNI 1952 / Irish National Grid <29901> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000000 +x_0=200000 +y_0=250000 +ellps=airy +units=m +no_defs no_defs <> # TM65 / Irish Grid <29902> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +a=6377340.189 +b=6356034.447938534 +units=m +no_defs no_defs <> # TM75 / Irish Grid <29903> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +a=6377340.189 +b=6356034.447938534 +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS I <30161> +proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS II <30162> +proj=tmerc +lat_0=33 +lon_0=131 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS III <30163> +proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS IV <30164> +proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS V <30165> +proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS VI <30166> +proj=tmerc +lat_0=36 +lon_0=136 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS VII <30167> +proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS VIII <30168> +proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS IX <30169> +proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS X <30170> +proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS XI <30171> +proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS XII <30172> +proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS XIII <30173> +proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS XIV <30174> +proj=tmerc +lat_0=26 +lon_0=142 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS XV <30175> +proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS XVI <30176> +proj=tmerc +lat_0=26 +lon_0=124 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS XVII <30177> +proj=tmerc +lat_0=26 +lon_0=131 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS XVIII <30178> +proj=tmerc +lat_0=20 +lon_0=136 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS XIX <30179> +proj=tmerc +lat_0=26 +lon_0=154 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Trinidad 1903 / Trinidad Grid <30200> +proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46380700001 +y_0=65379.0133425 +a=6378293.63683822 +b=6356617.979337744 +towgs84=-61.702,284.488,472.052,0,0,0,0 +to_meter=0.2011661949 +no_defs no_defs <> # TC(1948) / UTM zone 39N <30339> +proj=utm +zone=39 +ellps=helmert +units=m +no_defs no_defs <> # TC(1948) / UTM zone 40N <30340> +proj=utm +zone=40 +ellps=helmert +units=m +no_defs no_defs <> # Voirol 1875 / Nord Algerie (ancienne) <30491> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs no_defs <> # Voirol 1875 / Sud Algerie (ancienne) <30492> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs no_defs <> # Nord Sahara 1959 / UTM zone 29N <30729> +proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs no_defs <> # Nord Sahara 1959 / UTM zone 30N <30730> +proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs no_defs <> # Nord Sahara 1959 / UTM zone 31N <30731> +proj=utm +zone=31 +ellps=clrk80 +units=m +no_defs no_defs <> # Nord Sahara 1959 / UTM zone 32N <30732> +proj=utm +zone=32 +ellps=clrk80 +units=m +no_defs no_defs <> # Nord Sahara 1959 / Voirol Unifie Nord <30791> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m +no_defs no_defs <> # Nord Sahara 1959 / Voirol Unifie Sud <30792> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m +no_defs no_defs <> # RT38 2.5 gon W <30800> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Yoff / UTM zone 28N <31028> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # Zanderij / UTM zone 21N <31121> +proj=utm +zone=21 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs no_defs <> # Zanderij / TM 54 NW <31154> +proj=tmerc +lat_0=0 +lon_0=-54 +k=0.999600 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs no_defs <> # Zanderij / Suriname Old TM <31170> +proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.999600 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs no_defs <> # Zanderij / Suriname TM <31171> +proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.999900 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs no_defs <> # MGI / 3-degree Gauss zone 5 <31265> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # MGI / 3-degree Gauss zone 6 <31266> +proj=tmerc +lat_0=0 +lon_0=18 +k=1.000000 +x_0=6500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # MGI / 3-degree Gauss zone 7 <31267> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # MGI / 3-degree Gauss zone 8 <31268> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # MGI / Balkans zone 5 <31275> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999900 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # MGI / Balkans zone 6 <31276> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.999900 +x_0=6500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # MGI / Balkans zone 7 <31277> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.999900 +x_0=7500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # MGI / Balkans zone 8 <31278> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.999900 +x_0=7500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # MGI / Balkans zone 8 <31279> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999900 +x_0=8500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # MGI (Ferro) / Austria West Zone <31281> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1.000000 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <> # MGI (Ferro) / Austria Central Zone <31282> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1.000000 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <> # MGI (Ferro) / Austria East Zone <31283> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1.000000 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <> # MGI / M28 <31284> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1.000000 +x_0=150000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # MGI / M31 <31285> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1.000000 +x_0=450000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # MGI / M34 <31286> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1.000000 +x_0=750000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # MGI / Austria Lambert <31287> +proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +units=m +no_defs no_defs <> # MGI (Ferro) / Austria West Zone <31291> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1.000000 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <> # MGI (Ferro) / Austria Central Zone <31292> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1.000000 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <> # MGI (Ferro) / Austria East Zone <31293> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1.000000 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <> # MGI / M28 <31294> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1.000000 +x_0=150000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # MGI / M31 <31295> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1.000000 +x_0=450000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # MGI / M34 <31296> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1.000000 +x_0=750000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # MGI / Austria Lambert <31297> +proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +units=m +no_defs no_defs <> # Belge 1972 / Belge Lambert 72 <31300> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=4.356939722222222 +x_0=150000.01256 +y_0=5400088.4378 +ellps=intl +units=m +no_defs no_defs <> # Belge 1972 / Belgian Lambert 72 <31370> +proj=lcc +lat_1=51.16666723333333 +lat_2=49.8333339 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.013 +y_0=5400088.438 +ellps=intl +units=m +no_defs no_defs <> # DHDN / 3-degree Gauss zone 1 <31461> +proj=tmerc +lat_0=0 +lon_0=3 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # DHDN / 3-degree Gauss zone 2 <31462> +proj=tmerc +lat_0=0 +lon_0=6 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # DHDN / 3-degree Gauss zone 3 <31463> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # DHDN / 3-degree Gauss zone 4 <31464> +proj=tmerc +lat_0=0 +lon_0=12 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # DHDN / 3-degree Gauss zone 5 <31465> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # DHDN / Gauss-Kruger zone 2 <31466> +proj=tmerc +lat_0=0 +lon_0=6 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # DHDN / Gauss-Kruger zone 3 <31467> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # DHDN / Gauss-Kruger zone 4 <31468> +proj=tmerc +lat_0=0 +lon_0=12 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # DHDN / Gauss-Kruger zone 5 <31469> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Conakry 1905 / UTM zone 28N <31528> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs no_defs <> # Conakry 1905 / UTM zone 29N <31529> +proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs no_defs <> # Dealul Piscului 1933/ Stereo 33 <31600> +proj=stere +lat_0=45.9 +lon_0=25.39246588888889 +k=0.999667 +x_0=500000 +y_0=500000 +ellps=intl +towgs84=103.25,-100.4,-307.19,0,0,0,0 +units=m +no_defs no_defs <> # Dealul Piscului 1970/ Stereo 70 <31700> +proj=stere +lat_0=46 +lon_0=25 +k=0.999750 +x_0=500000 +y_0=500000 +ellps=krass +units=m +no_defs no_defs <> # NGN / UTM zone 38N <31838> +proj=utm +zone=38 +ellps=WGS84 +units=m +no_defs no_defs <> # NGN / UTM zone 39N <31839> +proj=utm +zone=39 +ellps=WGS84 +units=m +no_defs no_defs <> # KUDAMS / KTM <31900> +proj=tmerc +lat_0=0 +lon_0=48 +k=0.999600 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> # SIRGAS / UTM zone 17N <31986> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # SIRGAS / UTM zone 18N <31987> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # SIRGAS / UTM zone 19N <31988> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # SIRGAS / UTM zone 20N <31989> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # SIRGAS / UTM zone 21N <31990> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # SIRGAS / UTM zone 22N <31991> +proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # SIRGAS / UTM zone 17S <31992> +proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # SIRGAS / UTM zone 18S <31993> +proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # SIRGAS / UTM zone 19S <31994> +proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # SIRGAS / UTM zone 20S <31995> +proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # SIRGAS / UTM zone 21S <31996> +proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # SIRGAS / UTM zone 22S <31997> +proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # SIRGAS / UTM zone 23S <31998> +proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # SIRGAS / UTM zone 24S <31999> +proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # SIRGAS / UTM zone 25S <32000> +proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD27 / Montana North <32001> +proj=lcc +lat_1=48.71666666666667 +lat_2=47.85 +lat_0=47 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Montana Central <32002> +proj=lcc +lat_1=47.88333333333333 +lat_2=46.45 +lat_0=45.83333333333334 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Montana South <32003> +proj=lcc +lat_1=46.4 +lat_2=44.86666666666667 +lat_0=44 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Nebraska North <32005> +proj=lcc +lat_1=41.85 +lat_2=42.81666666666667 +lat_0=41.33333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Nebraska South <32006> +proj=lcc +lat_1=40.28333333333333 +lat_2=41.71666666666667 +lat_0=39.66666666666666 +lon_0=-99.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Nevada East <32007> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Nevada Central <32008> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Nevada West <32009> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / New Hampshire <32010> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / New Jersey <32011> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.66666666666667 +k=0.999975 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / New Mexico East <32012> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / New Mexico Central <32013> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / New Mexico West <32014> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / New York East <32015> +proj=tmerc +lat_0=40 +lon_0=-74.33333333333333 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / New York Central <32016> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / New York West <32017> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / New York Long Island <32018> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.5 +lon_0=-74 +x_0=304800.6096012192 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / North Carolina <32019> +proj=lcc +lat_1=34.33333333333334 +lat_2=36.16666666666666 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / North Dakota North <32020> +proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / North Dakota South <32021> +proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Ohio North <32022> +proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Ohio South <32023> +proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Oklahoma North <32024> +proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Oklahoma South <32025> +proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Oregon North <32026> +proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Oregon South <32027> +proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Pennsylvania North <32028> +proj=lcc +lat_1=40.88333333333333 +lat_2=41.95 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Pennsylvania South <32029> +proj=lcc +lat_1=39.93333333333333 +lat_2=40.8 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Rhode Island <32030> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / South Carolina North <32031> +proj=lcc +lat_1=33.76666666666667 +lat_2=34.96666666666667 +lat_0=33 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / South Carolina South <32033> +proj=lcc +lat_1=32.33333333333334 +lat_2=33.66666666666666 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / South Dakota North <32034> +proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / South Dakota South <32035> +proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Tennessee <32036> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=30480.06096012192 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Texas North <32037> +proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Texas North Central <32038> +proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-97.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Texas Central <32039> +proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Texas South Central <32040> +proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Texas South <32041> +proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Utah North <32042> +proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Utah Central <32043> +proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Utah South <32044> +proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Vermont <32045> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Virginia North <32046> +proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Virginia South <32047> +proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Washington North <32048> +proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Washington South <32049> +proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / West Virginia North <32050> +proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / West Virginia South <32051> +proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Wisconsin North <32052> +proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Wisconsin Central <32053> +proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Wisconsin South <32054> +proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Wyoming East <32055> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-105.1666666666667 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Wyoming East Central <32056> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-107.3333333333333 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Wyoming West Central <32057> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-108.75 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Wyoming West <32058> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-110.0833333333333 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Guatemala Norte <32061> +proj=lcc +lat_1=16.81666666666667 +lat_0=16.81666666666667 +lon_0=-90.33333333333333 +k_0=0.99992226 +x_0=500000 +y_0=292209.579 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / Guatemala Sur <32062> +proj=lcc +lat_1=14.9 +lat_0=14.9 +lon_0=-90.33333333333333 +k_0=0.99989906 +x_0=500000 +y_0=325992.681 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / BLM 14N (ftUS) <32064> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / BLM 15N (ftUS) <32065> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / BLM 16N (ftUS) <32066> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / BLM 17N (ftUS) <32067> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / BLM 14N (feet) <32074> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / BLM 15N (feet) <32075> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / BLM 16N (feet) <32076> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / BLM 17N (feet) <32077> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / MTM zone 1 <32081> +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / MTM zone 2 <32082> +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / MTM zone 3 <32083> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / MTM zone 4 <32084> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / MTM zone 5 <32085> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / MTM zone 6 <32086> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / Quebec Lambert <32098> +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD83 / Montana <32100> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Nebraska <32104> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Nevada East <32107> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=200000 +y_0=8000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Nevada Central <32108> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=500000 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Nevada West <32109> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=800000 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / New Hampshire <32110> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / New Jersey <32111> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / New Mexico East <32112> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / New Mexico Central <32113> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / New Mexico West <32114> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=830000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / New York East <32115> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / New York Central <32116> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / New York West <32117> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / New York Long Island <32118> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / North Carolina <32119> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / North Dakota North <32120> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / North Dakota South <32121> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Ohio North <32122> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Ohio South <32123> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Oklahoma North <32124> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Oklahoma South <32125> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Oregon North <32126> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Oregon South <32127> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Pennsylvania North <32128> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Pennsylvania South <32129> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Rhode Island <32130> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=100000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / South Carolina <32133> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / South Dakota North <32134> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / South Dakota South <32135> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Tennessee <32136> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Texas North <32137> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Texas North Central <32138> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Texas Central <32139> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Texas South Central <32140> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Texas South <32141> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Utah North <32142> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Utah Central <32143> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Utah South <32144> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Vermont <32145> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Virginia North <32146> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Virginia South <32147> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Washington North <32148> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Washington South <32149> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / West Virginia North <32150> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / West Virginia South <32151> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Wisconsin North <32152> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Wisconsin Central <32153> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Wisconsin South <32154> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Wyoming East <32155> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.999938 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Wyoming East Central <32156> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.999938 +x_0=400000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Wyoming West Central <32157> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.999938 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Wyoming West <32158> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.999938 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Puerto Rico & Virgin Is. <32161> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / SCoPQ zone 2 <32180> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 1 <32181> +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 2 <32182> +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 3 <32183> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 4 <32184> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 5 <32185> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 6 <32186> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 7 <32187> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 8 <32188> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 9 <32189> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 10 <32190> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 11 <32191> +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 12 <32192> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 13 <32193> +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 14 <32194> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 15 <32195> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 16 <32196> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 17 <32197> +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Quebec Lambert <32198> +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 1N <32201> +proj=utm +zone=1 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 2N <32202> +proj=utm +zone=2 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 3N <32203> +proj=utm +zone=3 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 4N <32204> +proj=utm +zone=4 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 5N <32205> +proj=utm +zone=5 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 6N <32206> +proj=utm +zone=6 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 7N <32207> +proj=utm +zone=7 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 8N <32208> +proj=utm +zone=8 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 9N <32209> +proj=utm +zone=9 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 10N <32210> +proj=utm +zone=10 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 11N <32211> +proj=utm +zone=11 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 12N <32212> +proj=utm +zone=12 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 13N <32213> +proj=utm +zone=13 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 14N <32214> +proj=utm +zone=14 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 15N <32215> +proj=utm +zone=15 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 16N <32216> +proj=utm +zone=16 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 17N <32217> +proj=utm +zone=17 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 18N <32218> +proj=utm +zone=18 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 19N <32219> +proj=utm +zone=19 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 20N <32220> +proj=utm +zone=20 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 21N <32221> +proj=utm +zone=21 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 22N <32222> +proj=utm +zone=22 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 23N <32223> +proj=utm +zone=23 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 24N <32224> +proj=utm +zone=24 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 25N <32225> +proj=utm +zone=25 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 26N <32226> +proj=utm +zone=26 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 27N <32227> +proj=utm +zone=27 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 28N <32228> +proj=utm +zone=28 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 29N <32229> +proj=utm +zone=29 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 30N <32230> +proj=utm +zone=30 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 31N <32231> +proj=utm +zone=31 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 32N <32232> +proj=utm +zone=32 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 33N <32233> +proj=utm +zone=33 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 34N <32234> +proj=utm +zone=34 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 35N <32235> +proj=utm +zone=35 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 36N <32236> +proj=utm +zone=36 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 37N <32237> +proj=utm +zone=37 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 38N <32238> +proj=utm +zone=38 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 39N <32239> +proj=utm +zone=39 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 40N <32240> +proj=utm +zone=40 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 41N <32241> +proj=utm +zone=41 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 42N <32242> +proj=utm +zone=42 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 43N <32243> +proj=utm +zone=43 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 44N <32244> +proj=utm +zone=44 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 45N <32245> +proj=utm +zone=45 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 46N <32246> +proj=utm +zone=46 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 47N <32247> +proj=utm +zone=47 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 48N <32248> +proj=utm +zone=48 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 49N <32249> +proj=utm +zone=49 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 50N <32250> +proj=utm +zone=50 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 51N <32251> +proj=utm +zone=51 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 52N <32252> +proj=utm +zone=52 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 53N <32253> +proj=utm +zone=53 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 54N <32254> +proj=utm +zone=54 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 55N <32255> +proj=utm +zone=55 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 56N <32256> +proj=utm +zone=56 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 57N <32257> +proj=utm +zone=57 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 58N <32258> +proj=utm +zone=58 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 59N <32259> +proj=utm +zone=59 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 60N <32260> +proj=utm +zone=60 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 1S <32301> +proj=utm +zone=1 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 2S <32302> +proj=utm +zone=2 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 3S <32303> +proj=utm +zone=3 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 4S <32304> +proj=utm +zone=4 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 5S <32305> +proj=utm +zone=5 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 6S <32306> +proj=utm +zone=6 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 7S <32307> +proj=utm +zone=7 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 8S <32308> +proj=utm +zone=8 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 9S <32309> +proj=utm +zone=9 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 10S <32310> +proj=utm +zone=10 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 11S <32311> +proj=utm +zone=11 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 12S <32312> +proj=utm +zone=12 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 13S <32313> +proj=utm +zone=13 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 14S <32314> +proj=utm +zone=14 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 15S <32315> +proj=utm +zone=15 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 16S <32316> +proj=utm +zone=16 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 17S <32317> +proj=utm +zone=17 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 18S <32318> +proj=utm +zone=18 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 19S <32319> +proj=utm +zone=19 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 20S <32320> +proj=utm +zone=20 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 21S <32321> +proj=utm +zone=21 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 22S <32322> +proj=utm +zone=22 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 23S <32323> +proj=utm +zone=23 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 24S <32324> +proj=utm +zone=24 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 25S <32325> +proj=utm +zone=25 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 26S <32326> +proj=utm +zone=26 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 27S <32327> +proj=utm +zone=27 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 28S <32328> +proj=utm +zone=28 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 29S <32329> +proj=utm +zone=29 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 30S <32330> +proj=utm +zone=30 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 31S <32331> +proj=utm +zone=31 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 32S <32332> +proj=utm +zone=32 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 33S <32333> +proj=utm +zone=33 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 34S <32334> +proj=utm +zone=34 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 35S <32335> +proj=utm +zone=35 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 36S <32336> +proj=utm +zone=36 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 37S <32337> +proj=utm +zone=37 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 38S <32338> +proj=utm +zone=38 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 39S <32339> +proj=utm +zone=39 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 40S <32340> +proj=utm +zone=40 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 41S <32341> +proj=utm +zone=41 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 42S <32342> +proj=utm +zone=42 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 43S <32343> +proj=utm +zone=43 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 44S <32344> +proj=utm +zone=44 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 45S <32345> +proj=utm +zone=45 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 46S <32346> +proj=utm +zone=46 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 47S <32347> +proj=utm +zone=47 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 48S <32348> +proj=utm +zone=48 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 49S <32349> +proj=utm +zone=49 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 50S <32350> +proj=utm +zone=50 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 51S <32351> +proj=utm +zone=51 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 52S <32352> +proj=utm +zone=52 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 53S <32353> +proj=utm +zone=53 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 54S <32354> +proj=utm +zone=54 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 55S <32355> +proj=utm +zone=55 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 56S <32356> +proj=utm +zone=56 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 57S <32357> +proj=utm +zone=57 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 58S <32358> +proj=utm +zone=58 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 59S <32359> +proj=utm +zone=59 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 60S <32360> +proj=utm +zone=60 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 1N <32401> +proj=utm +zone=1 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 2N <32402> +proj=utm +zone=2 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 3N <32403> +proj=utm +zone=3 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 4N <32404> +proj=utm +zone=4 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 5N <32405> +proj=utm +zone=5 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 6N <32406> +proj=utm +zone=6 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 7N <32407> +proj=utm +zone=7 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 8N <32408> +proj=utm +zone=8 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 9N <32409> +proj=utm +zone=9 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 10N <32410> +proj=utm +zone=10 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 11N <32411> +proj=utm +zone=11 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 12N <32412> +proj=utm +zone=12 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 13N <32413> +proj=utm +zone=13 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 14N <32414> +proj=utm +zone=14 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 15N <32415> +proj=utm +zone=15 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 16N <32416> +proj=utm +zone=16 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 17N <32417> +proj=utm +zone=17 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 18N <32418> +proj=utm +zone=18 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 19N <32419> +proj=utm +zone=19 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 20N <32420> +proj=utm +zone=20 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 21N <32421> +proj=utm +zone=21 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 22N <32422> +proj=utm +zone=22 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 23N <32423> +proj=utm +zone=23 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 24N <32424> +proj=utm +zone=24 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 25N <32425> +proj=utm +zone=25 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 26N <32426> +proj=utm +zone=26 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 27N <32427> +proj=utm +zone=27 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 28N <32428> +proj=utm +zone=28 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 29N <32429> +proj=utm +zone=29 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 30N <32430> +proj=utm +zone=30 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 31N <32431> +proj=utm +zone=31 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 32N <32432> +proj=utm +zone=32 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 33N <32433> +proj=utm +zone=33 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 34N <32434> +proj=utm +zone=34 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 35N <32435> +proj=utm +zone=35 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 36N <32436> +proj=utm +zone=36 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 37N <32437> +proj=utm +zone=37 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 38N <32438> +proj=utm +zone=38 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 39N <32439> +proj=utm +zone=39 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 40N <32440> +proj=utm +zone=40 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 41N <32441> +proj=utm +zone=41 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 42N <32442> +proj=utm +zone=42 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 43N <32443> +proj=utm +zone=43 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 44N <32444> +proj=utm +zone=44 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 45N <32445> +proj=utm +zone=45 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 46N <32446> +proj=utm +zone=46 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 47N <32447> +proj=utm +zone=47 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 48N <32448> +proj=utm +zone=48 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 49N <32449> +proj=utm +zone=49 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 50N <32450> +proj=utm +zone=50 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 51N <32451> +proj=utm +zone=51 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 52N <32452> +proj=utm +zone=52 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 53N <32453> +proj=utm +zone=53 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 54N <32454> +proj=utm +zone=54 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 55N <32455> +proj=utm +zone=55 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 56N <32456> +proj=utm +zone=56 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 57N <32457> +proj=utm +zone=57 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 58N <32458> +proj=utm +zone=58 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 59N <32459> +proj=utm +zone=59 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 60N <32460> +proj=utm +zone=60 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 1S <32501> +proj=utm +zone=1 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 2S <32502> +proj=utm +zone=2 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 3S <32503> +proj=utm +zone=3 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 4S <32504> +proj=utm +zone=4 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 5S <32505> +proj=utm +zone=5 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 6S <32506> +proj=utm +zone=6 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 7S <32507> +proj=utm +zone=7 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 8S <32508> +proj=utm +zone=8 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 9S <32509> +proj=utm +zone=9 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 10S <32510> +proj=utm +zone=10 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 11S <32511> +proj=utm +zone=11 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 12S <32512> +proj=utm +zone=12 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 13S <32513> +proj=utm +zone=13 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 14S <32514> +proj=utm +zone=14 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 15S <32515> +proj=utm +zone=15 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 16S <32516> +proj=utm +zone=16 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 17S <32517> +proj=utm +zone=17 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 18S <32518> +proj=utm +zone=18 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 19S <32519> +proj=utm +zone=19 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 20S <32520> +proj=utm +zone=20 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 21S <32521> +proj=utm +zone=21 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 22S <32522> +proj=utm +zone=22 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 23S <32523> +proj=utm +zone=23 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 24S <32524> +proj=utm +zone=24 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 25S <32525> +proj=utm +zone=25 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 26S <32526> +proj=utm +zone=26 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 27S <32527> +proj=utm +zone=27 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 28S <32528> +proj=utm +zone=28 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 29S <32529> +proj=utm +zone=29 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 30S <32530> +proj=utm +zone=30 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 31S <32531> +proj=utm +zone=31 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 32S <32532> +proj=utm +zone=32 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 33S <32533> +proj=utm +zone=33 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 34S <32534> +proj=utm +zone=34 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 35S <32535> +proj=utm +zone=35 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 36S <32536> +proj=utm +zone=36 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 37S <32537> +proj=utm +zone=37 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 38S <32538> +proj=utm +zone=38 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 39S <32539> +proj=utm +zone=39 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 40S <32540> +proj=utm +zone=40 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 41S <32541> +proj=utm +zone=41 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 42S <32542> +proj=utm +zone=42 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 43S <32543> +proj=utm +zone=43 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 44S <32544> +proj=utm +zone=44 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 45S <32545> +proj=utm +zone=45 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 46S <32546> +proj=utm +zone=46 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 47S <32547> +proj=utm +zone=47 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 48S <32548> +proj=utm +zone=48 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 49S <32549> +proj=utm +zone=49 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 50S <32550> +proj=utm +zone=50 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 51S <32551> +proj=utm +zone=51 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 52S <32552> +proj=utm +zone=52 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 53S <32553> +proj=utm +zone=53 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 54S <32554> +proj=utm +zone=54 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 55S <32555> +proj=utm +zone=55 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 56S <32556> +proj=utm +zone=56 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 57S <32557> +proj=utm +zone=57 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 58S <32558> +proj=utm +zone=58 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 59S <32559> +proj=utm +zone=59 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 60S <32560> +proj=utm +zone=60 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 1N <32601> +proj=utm +zone=1 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 2N <32602> +proj=utm +zone=2 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 3N <32603> +proj=utm +zone=3 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 4N <32604> +proj=utm +zone=4 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 5N <32605> +proj=utm +zone=5 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 6N <32606> +proj=utm +zone=6 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 7N <32607> +proj=utm +zone=7 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 8N <32608> +proj=utm +zone=8 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 9N <32609> +proj=utm +zone=9 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 10N <32610> +proj=utm +zone=10 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 11N <32611> +proj=utm +zone=11 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 12N <32612> +proj=utm +zone=12 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 13N <32613> +proj=utm +zone=13 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 14N <32614> +proj=utm +zone=14 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 15N <32615> +proj=utm +zone=15 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 16N <32616> +proj=utm +zone=16 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 17N <32617> +proj=utm +zone=17 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 18N <32618> +proj=utm +zone=18 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 19N <32619> +proj=utm +zone=19 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 20N <32620> +proj=utm +zone=20 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 21N <32621> +proj=utm +zone=21 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 22N <32622> +proj=utm +zone=22 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 23N <32623> +proj=utm +zone=23 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 24N <32624> +proj=utm +zone=24 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 25N <32625> +proj=utm +zone=25 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 26N <32626> +proj=utm +zone=26 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 27N <32627> +proj=utm +zone=27 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 28N <32628> +proj=utm +zone=28 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 29N <32629> +proj=utm +zone=29 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 30N <32630> +proj=utm +zone=30 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 31N <32631> +proj=utm +zone=31 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 32N <32632> +proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 33N <32633> +proj=utm +zone=33 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 34N <32634> +proj=utm +zone=34 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 35N <32635> +proj=utm +zone=35 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 36N <32636> +proj=utm +zone=36 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 37N <32637> +proj=utm +zone=37 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 38N <32638> +proj=utm +zone=38 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 39N <32639> +proj=utm +zone=39 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 40N <32640> +proj=utm +zone=40 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 41N <32641> +proj=utm +zone=41 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 42N <32642> +proj=utm +zone=42 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 43N <32643> +proj=utm +zone=43 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 44N <32644> +proj=utm +zone=44 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 45N <32645> +proj=utm +zone=45 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 46N <32646> +proj=utm +zone=46 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 47N <32647> +proj=utm +zone=47 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 48N <32648> +proj=utm +zone=48 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 49N <32649> +proj=utm +zone=49 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 50N <32650> +proj=utm +zone=50 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 51N <32651> +proj=utm +zone=51 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 52N <32652> +proj=utm +zone=52 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 53N <32653> +proj=utm +zone=53 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 54N <32654> +proj=utm +zone=54 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 55N <32655> +proj=utm +zone=55 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 56N <32656> +proj=utm +zone=56 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 57N <32657> +proj=utm +zone=57 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 58N <32658> +proj=utm +zone=58 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 59N <32659> +proj=utm +zone=59 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 60N <32660> +proj=utm +zone=60 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UPS North <32661> +proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 1S <32701> +proj=utm +zone=1 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 2S <32702> +proj=utm +zone=2 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 3S <32703> +proj=utm +zone=3 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 4S <32704> +proj=utm +zone=4 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 5S <32705> +proj=utm +zone=5 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 6S <32706> +proj=utm +zone=6 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 7S <32707> +proj=utm +zone=7 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 8S <32708> +proj=utm +zone=8 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 9S <32709> +proj=utm +zone=9 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 10S <32710> +proj=utm +zone=10 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 11S <32711> +proj=utm +zone=11 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 12S <32712> +proj=utm +zone=12 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 13S <32713> +proj=utm +zone=13 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 14S <32714> +proj=utm +zone=14 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 15S <32715> +proj=utm +zone=15 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 16S <32716> +proj=utm +zone=16 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 17S <32717> +proj=utm +zone=17 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 18S <32718> +proj=utm +zone=18 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 19S <32719> +proj=utm +zone=19 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 20S <32720> +proj=utm +zone=20 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 21S <32721> +proj=utm +zone=21 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 22S <32722> +proj=utm +zone=22 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 23S <32723> +proj=utm +zone=23 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 24S <32724> +proj=utm +zone=24 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 25S <32725> +proj=utm +zone=25 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 26S <32726> +proj=utm +zone=26 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 27S <32727> +proj=utm +zone=27 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 28S <32728> +proj=utm +zone=28 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 29S <32729> +proj=utm +zone=29 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 30S <32730> +proj=utm +zone=30 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 31S <32731> +proj=utm +zone=31 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 32S <32732> +proj=utm +zone=32 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 33S <32733> +proj=utm +zone=33 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 34S <32734> +proj=utm +zone=34 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 35S <32735> +proj=utm +zone=35 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 36S <32736> +proj=utm +zone=36 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 37S <32737> +proj=utm +zone=37 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 38S <32738> +proj=utm +zone=38 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 39S <32739> +proj=utm +zone=39 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 40S <32740> +proj=utm +zone=40 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 41S <32741> +proj=utm +zone=41 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 42S <32742> +proj=utm +zone=42 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 43S <32743> +proj=utm +zone=43 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 44S <32744> +proj=utm +zone=44 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 45S <32745> +proj=utm +zone=45 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 46S <32746> +proj=utm +zone=46 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 47S <32747> +proj=utm +zone=47 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 48S <32748> +proj=utm +zone=48 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 49S <32749> +proj=utm +zone=49 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 50S <32750> +proj=utm +zone=50 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 51S <32751> +proj=utm +zone=51 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 52S <32752> +proj=utm +zone=52 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 53S <32753> +proj=utm +zone=53 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 54S <32754> +proj=utm +zone=54 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 55S <32755> +proj=utm +zone=55 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 56S <32756> +proj=utm +zone=56 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 57S <32757> +proj=utm +zone=57 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 58S <32758> +proj=utm +zone=58 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 59S <32759> +proj=utm +zone=59 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 60S <32760> +proj=utm +zone=60 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UPS South <32761> +proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / TM 36 SE <32766> +proj=tmerc +lat_0=0 +lon_0=36 +k=0.999600 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # Pulkovo 1995 GK Zone 2 <20002> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=krass +units=m no_defs <> # Pulkovo 1995 GK Zone 3 <20003> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=krass +units=m no_defs <> # Pulkovo 1995 GK Zone 2N <20062> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m no_defs <> # Pulkovo 1995 GK Zone 3N <20063> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m no_defs <> # La Canoa UTM Zone 21N <24721> +proj=utm +zone=21 +ellps=intl +units=m no_defs <> # NAD 1927 StatePlane Hawaii 1 FIPS 5101 <26761> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> # NAD 1927 StatePlane Hawaii 2 FIPS 5102 <26762> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> # NAD 1927 StatePlane Hawaii 3 FIPS 5103 <26763> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> # NAD 1927 StatePlane Hawaii 4 FIPS 5104 <26764> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> # NAD 1927 StatePlane Hawaii 5 FIPS 5105 <26765> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> # NAD 1927 StatePlane Michigan North FIPS 2111 <26788> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=609601.2192024385 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> # NAD 1927 StatePlane Michigan Central FIPS 2112 <26789> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.33333333333333 +x_0=609601.2192024385 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> # NAD 1927 StatePlane Michigan South FIPS 2113 <26790> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.33333333333333 +x_0=609601.2192024385 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> # Nord Algerie <30591> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m no_defs <> # Sud Algerie <30592> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m no_defs <> # Germany Zone 1 <31491> +proj=tmerc +lat_0=0 +lon_0=3 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=bessel +units=m no_defs <> # Germany Zone 2 <31492> +proj=tmerc +lat_0=0 +lon_0=6 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=bessel +units=m no_defs <> # Germany Zone 3 <31493> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=bessel +units=m no_defs <> # Germany Zone 4 <31494> +proj=tmerc +lat_0=0 +lon_0=12 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=bessel +units=m no_defs <> # Germany Zone 5 <31495> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=bessel +units=m no_defs <> # NAD 1927 StatePlane Puerto Rico FIPS 5201 <32059> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> # NAD 1927 StatePlane Virgin Islands St Croix FIPS 5202 <32060> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=30480.06096012193 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> # Sphere Plate Carree <53001> +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Equidistant Cylindrical <53002> +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Miller Cylindrical <53003> +proj=mill +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +R_A +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Mercator <53004> +proj=merc +lat_ts=0 +lon_0=0 +k=1.000000 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Sinusoidal <53008> +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Mollweide <53009> +proj=moll +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Eckert VI <53010> +proj=eck6 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Eckert V <53011> +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Eckert IV <53012> +proj=eck4 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Eckert III <53013> +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Eckert II <53014> +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Eckert I <53015> +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Gall Stereographic <53016> +proj=gall +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Behrmann <53017> +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Winkel I <53018> +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Winkel II <53019> +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Polyconic <53021> +proj=poly +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Quartic Authalic <53022> +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Loximuthal <53023> +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Bonne <53024> +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Hotine <53025> +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Stereographic <53026> +proj=stere +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Equidistant Conic <53027> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=60 +lat_2=60 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Cassini <53028> +proj=cass +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Van der Grinten I <53029> +proj=vandg +lon_0=0 +x_0=0 +y_0=0 +R_A +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Robinson <53030> +proj=robin +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Two Point Equidistant <53031> +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Azimuthal Equidistant <53032> +proj=aeqd +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> # World Plate Carree <54001> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Equidistant Cylindrical <54002> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Miller Cylindrical <54003> +proj=mill +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +R_A +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Mercator <54004> +proj=merc +lat_ts=0 +lon_0=0 +k=1.000000 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Sinusoidal <54008> +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Mollweide <54009> +proj=moll +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Eckert VI <54010> +proj=eck6 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Eckert V <54011> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Eckert IV <54012> +proj=eck4 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Eckert III <54013> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Eckert II <54014> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Eckert I <54015> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Gall Stereographic <54016> +proj=gall +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Behrmann <54017> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Winkel I <54018> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Winkel II <54019> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Polyconic <54021> +proj=poly +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Quartic Authalic <54022> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Loximuthal <54023> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Bonne <54024> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Hotine <54025> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Stereographic <54026> +proj=stere +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Equidistant Conic <54027> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=60 +lat_2=60 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Cassini <54028> +proj=cass +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Van der Grinten I <54029> +proj=vandg +lon_0=0 +x_0=0 +y_0=0 +R_A +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Robinson <54030> +proj=robin +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Two Point Equidistant <54031> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Azimuthal Equidistant <54032> +proj=aeqd +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # NAD 1927 StatePlane Guam FIPS 5400 <65061> +proj=poly +lat_0=13.47246635277778 +lon_0=-144.7487507055556 +x_0=50000.00000000001 +y_0=50000.00000000001 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Guam FIPS 5400 <65161> +proj=poly +lat_0=13.47246635277778 +lon_0=-144.7487507055556 +x_0=50000 +y_0=50000 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> # Canada Albers Equal Area Conic <102001> +proj=aea +lat_1=50 +lat_2=70 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> # Canada Lambert Conformal Conic <102002> +proj=lcc +lat_1=50 +lat_2=70 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> # USA Contiguous Albers Equal Area Conic <102003> +proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=37.5 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> # USA Contiguous Lambert Conformal Conic <102004> +proj=lcc +lat_1=33 +lat_2=45 +lat_0=39 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> # USA Contiguous Equidistant Conic <102005> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=33 +lat_2=45 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> # Alaska Albers Equal Area Conic <102006> +proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> # Hawaii Albers Equal Area Conic <102007> +proj=aea +lat_1=8 +lat_2=18 +lat_0=13 +lon_0=-157 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> # North America Albers Equal Area Conic <102008> +proj=aea +lat_1=20 +lat_2=60 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> # North America Lambert Conformal Conic <102009> +proj=lcc +lat_1=20 +lat_2=60 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> # North America Equidistant Conic <102010> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=20 +lat_2=60 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> # Africa Sinusoidal <102011> +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # Asia Lambert Conformal Conic <102012> +proj=lcc +lat_1=30 +lat_2=62 +lat_0=0 +lon_0=105 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # Europe Albers Equal Area Conic <102013> +proj=aea +lat_1=43 +lat_2=62 +lat_0=30 +lon_0=10 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <> # Europe Lambert Conformal Conic <102014> +proj=lcc +lat_1=43 +lat_2=62 +lat_0=30 +lon_0=10 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <> # South America Lambert Conformal Conic <102015> +proj=lcc +lat_1=-5 +lat_2=-42 +lat_0=-32 +lon_0=-60 +x_0=0 +y_0=0 +ellps=aust_SA +units=m no_defs <> # North Pole Azimuthal Equidistant <102016> +proj=aeqd +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # North Pole Lambert Azimuthal Equal Area <102017> +proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # North Pole Stereographic <102018> +proj=stere +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # South Pole Azimuthal Equidistant <102019> +proj=aeqd +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # South Pole Lambert Azimuthal Equal Area <102020> +proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # South Pole Stereographic <102021> +proj=stere +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # Africa Albers Equal Area Conic <102022> +proj=aea +lat_1=20 +lat_2=-23 +lat_0=0 +lon_0=25 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # Africa Equidistant Conic <102023> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=20 +lat_2=-23 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # Africa Lambert Conformal Conic <102024> +proj=lcc +lat_1=20 +lat_2=-23 +lat_0=0 +lon_0=25 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # Asia North Albers Equal Area Conic <102025> +proj=aea +lat_1=15 +lat_2=65 +lat_0=30 +lon_0=95 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # Asia North Equidistant Conic <102026> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=15 +lat_2=65 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # Asia North Lambert Conformal Conic <102027> +proj=lcc +lat_1=15 +lat_2=65 +lat_0=30 +lon_0=95 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # Asia South Albers Equal Area Conic <102028> +proj=aea +lat_1=7 +lat_2=-32 +lat_0=-15 +lon_0=125 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # Asia South Equidistant Conic <102029> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=7 +lat_2=-32 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # Asia South Lambert Conformal Conic <102030> +proj=lcc +lat_1=7 +lat_2=-32 +lat_0=-15 +lon_0=125 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # Europe Equidistant Conic <102031> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=43 +lat_2=62 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <> # South America Equidistant Conic <102032> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=-5 +lat_2=-42 +x_0=0 +y_0=0 +ellps=aust_SA +units=m no_defs <> # South America Albers Equal Area Conic <102033> +proj=aea +lat_1=-5 +lat_2=-42 +lat_0=-32 +lon_0=-60 +x_0=0 +y_0=0 +ellps=aust_SA +units=m no_defs <> # S-JTSK Krovak <102065> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m no_defs <> # S-JTSK Ferro Krovak East North <102066> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=-17.66666666666667 +units=m no_defs <> # S-JTSK Krovak East North <102067> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m no_defs <> # Monte Mario Italy 1 <102091> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.999600 +x_0=1500000 +y_0=0 +ellps=intl +units=m no_defs <> # Monte Mario Italy 2 <102092> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999600 +x_0=2520000 +y_0=0 +ellps=intl +units=m no_defs <> # NGO 1948 Norway Zone 1 <102101> +proj=tmerc +lat_0=58 +lon_0=6.05625 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> # NGO 1948 Norway Zone 2 <102102> +proj=tmerc +lat_0=58 +lon_0=8.389583333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> # NGO 1948 Norway Zone 3 <102103> +proj=tmerc +lat_0=58 +lon_0=10.72291666666667 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> # NGO 1948 Norway Zone 4 <102104> +proj=tmerc +lat_0=58 +lon_0=13.22291666666667 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> # NGO 1948 Norway Zone 5 <102105> +proj=tmerc +lat_0=58 +lon_0=16.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> # NGO 1948 Norway Zone 6 <102106> +proj=tmerc +lat_0=58 +lon_0=20.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> # NGO 1948 Norway Zone 7 <102107> +proj=tmerc +lat_0=58 +lon_0=24.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> # NGO 1948 Norway Zone 8 <102108> +proj=tmerc +lat_0=58 +lon_0=29.05625 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> # RGF 1993 Lambert 93 <102110> +proj=lcc +lat_1=44 +lat_2=49 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +units=m no_defs <> # Old Hawaiian UTM Zone 4N <102114> +proj=utm +zone=4 +ellps=clrk66 +units=m no_defs <> # Old Hawaiian UTM Zone 5N <102115> +proj=utm +zone=5 +ellps=clrk66 +units=m no_defs <> # NAD 1927 Michigan GeoRef Feet US <102120> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.495961392 +y_0=-4354009.816002033 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 Michigan GeoRef Feet US <102121> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.495961392 +y_0=-4354009.816002033 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1927 Michigan GeoRef Meters <102122> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=clrk66 +datum=NAD27 +units=m no_defs <> # NAD 1983 Michigan GeoRef Meters <102123> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> # NGO 1948 UTM Zone 32N <102132> +proj=utm +zone=32 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> # NGO 1948 UTM Zone 33N <102133> +proj=utm +zone=33 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> # NGO 1948 UTM Zone 34N <102134> +proj=utm +zone=34 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> # NGO 1948 UTM Zone 35N <102135> +proj=utm +zone=35 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> # Hong Kong 1980 Grid <102140> +proj=tmerc +lat_0=22.31213333333334 +lon_0=114.1785555555556 +k=1.000000 +x_0=836694.05 +y_0=819069.8 +ellps=intl +units=m no_defs <> # Hong Kong 1980 UTM Zone 49N <102141> +proj=utm +zone=49 +ellps=intl +units=m no_defs <> # Hong Kong 1980 UTM Zone 50N <102142> +proj=utm +zone=50 +ellps=intl +units=m no_defs <> # Tokyo UTM Zone 51N <102151> +proj=utm +zone=51 +ellps=bessel +units=m no_defs <> # Tokyo UTM Zone 52N <102152> +proj=utm +zone=52 +ellps=bessel +units=m no_defs <> # Tokyo UTM Zone 53N <102153> +proj=utm +zone=53 +ellps=bessel +units=m no_defs <> # Tokyo UTM Zone 54N <102154> +proj=utm +zone=54 +ellps=bessel +units=m no_defs <> # Tokyo UTM Zone 55N <102155> +proj=utm +zone=55 +ellps=bessel +units=m no_defs <> # Tokyo UTM Zone 56N <102156> +proj=utm +zone=56 +ellps=bessel +units=m no_defs <> # Datum 73 Hayford Gauss IGeoE <102160> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=200180.598 +y_0=299913.01 +ellps=intl +units=m no_defs <> # Datum 73 Hayford Gauss IPCC <102161> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +units=m no_defs <> # Graciosa Base SW 1948 UTM Zone 26N <102162> +proj=utm +zone=26 +ellps=intl +units=m no_defs <> # Lisboa Bessel Bonne <102163> +ellps=bessel +units=m no_defs <> # Lisboa Hayford Gauss IGeoE <102164> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=200000 +y_0=300000 +ellps=intl +units=m no_defs <> # Lisboa Hayford Gauss IPCC <102165> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <> # Observ Meteorologico 1939 UTM Zone 25N <102166> +proj=utm +zone=25 +ellps=intl +units=m no_defs <> # Porto Santo 1936 UTM Zone 28N <102167> +proj=utm +zone=28 +ellps=intl +units=m no_defs <> # Sao Braz UTM Zone 26N <102168> +proj=utm +zone=26 +ellps=intl +units=m no_defs <> # Selvagem Grande 1938 UTM Zone 28N <102169> +proj=utm +zone=28 +ellps=intl +units=m no_defs <> # Nord Maroc Degree <102191> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=-5.4 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> # Sud Maroc Degree <102192> +proj=lcc +lat_1=29.7 +lat_0=29.7 +lon_0=-5.4 +k_0=0.9996155960000001 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> # Sahara Degree <102193> +proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.9996 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> # NAD 1983 HARN StatePlane Alabama East FIPS 0101 <102229> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Alabama West FIPS 0102 <102230> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane California I FIPS 0401 <102241> +proj=lcc +lat_1=40 +lat_2=41.66666666666666 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane California II FIPS 0402 <102242> +proj=lcc +lat_1=38.33333333333334 +lat_2=39.83333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane California III FIPS 0403 <102243> +proj=lcc +lat_1=37.06666666666667 +lat_2=38.43333333333333 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane California IV FIPS 0404 <102244> +proj=lcc +lat_1=36 +lat_2=37.25 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane California V FIPS 0405 <102245> +proj=lcc +lat_1=34.03333333333333 +lat_2=35.46666666666667 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane California VI FIPS 0406 <102246> +proj=lcc +lat_1=32.78333333333333 +lat_2=33.88333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Arizona East FIPS 0201 <102248> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Arizona Central FIPS 0202 <102249> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Arizona West FIPS 0203 <102250> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Arkansas North FIPS 0301 <102251> +proj=lcc +lat_1=34.93333333333333 +lat_2=36.23333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Arkansas South FIPS 0302 <102252> +proj=lcc +lat_1=33.3 +lat_2=34.76666666666667 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Colorado North FIPS 0501 <102253> +proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Colorado Central FIPS 0502 <102254> +proj=lcc +lat_1=38.45 +lat_2=39.75 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Colorado South FIPS 0503 <102255> +proj=lcc +lat_1=37.23333333333333 +lat_2=38.43333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Connecticut FIPS 0600 <102256> +proj=lcc +lat_1=41.2 +lat_2=41.86666666666667 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Delaware FIPS 0700 <102257> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Florida East FIPS 0901 <102258> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Florida West FIPS 0902 <102259> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Florida North FIPS 0903 <102260> +proj=lcc +lat_1=29.58333333333333 +lat_2=30.75 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Hawaii 1 FIPS 5101 <102261> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Hawaii 2 FIPS 5102 <102262> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Hawaii 3 FIPS 5103 <102263> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Hawaii 4 FIPS 5104 <102264> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Hawaii 5 FIPS 5105 <102265> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Georgia East FIPS 1001 <102266> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Georgia West FIPS 1002 <102267> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Idaho East FIPS 1101 <102268> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Idaho Central FIPS 1102 <102269> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Idaho West FIPS 1103 <102270> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=800000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Illinois East FIPS 1201 <102271> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Illinois West FIPS 1202 <102272> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Indiana East FIPS 1301 <102273> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=100000 +y_0=250000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Indiana West FIPS 1302 <102274> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000 +y_0=250000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Kansas North FIPS 1501 <102277> +proj=lcc +lat_1=38.71666666666667 +lat_2=39.78333333333333 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Kansas South FIPS 1502 <102278> +proj=lcc +lat_1=37.26666666666667 +lat_2=38.56666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Kentucky North FIPS 1601 <102279> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Kentucky South FIPS 1602 <102280> +proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Louisiana North FIPS 1701 <102281> +proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Louisiana South FIPS 1702 <102282> +proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Maine East FIPS 1801 <102283> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.999900 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Maine West FIPS 1802 <102284> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Maryland FIPS 1900 <102285> +proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Massachusetts Mainland FIPS 2001 <102286> +proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Massachusetts Island FIPS 2002 <102287> +proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Michigan North FIPS 2111 <102288> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Michigan Central FIPS 2112 <102289> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Michigan South FIPS 2113 <102290> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Minnesota North FIPS 2201 <102291> +proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Minnesota Central FIPS 2202 <102292> +proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Minnesota South FIPS 2203 <102293> +proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Mississippi East FIPS 2301 <102294> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Mississippi West FIPS 2302 <102295> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Missouri East FIPS 2401 <102296> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Missouri Central FIPS 2402 <102297> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Missouri West FIPS 2403 <102298> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=850000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Montana FIPS 2500 <102300> +proj=lcc +lat_1=45 +lat_2=49 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Nebraska FIPS 2600 <102304> +proj=lcc +lat_1=40 +lat_2=43 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Nevada East FIPS 2701 <102307> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=200000 +y_0=8000000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Nevada Central FIPS 2702 <102308> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=500000 +y_0=6000000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Nevada West FIPS 2703 <102309> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=800000 +y_0=4000000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane New Hampshire FIPS 2800 <102310> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane New Jersey FIPS 2900 <102311> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane New Mexico East FIPS 3001 <102312> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane New Mexico Central FIPS 3002 <102313> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane New Mexico West FIPS 3003 <102314> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=830000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane New York East FIPS 3101 <102315> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane New York Central FIPS 3102 <102316> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane New York West FIPS 3103 <102317> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane New York Long Island FIPS 3104 <102318> +proj=lcc +lat_1=40.66666666666666 +lat_2=41.03333333333333 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane North Dakota North FIPS 3301 <102320> +proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane North Dakota South FIPS 3302 <102321> +proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Ohio North FIPS 3401 <102322> +proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Ohio South FIPS 3402 <102323> +proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Oklahoma North FIPS 3501 <102324> +proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Oklahoma South FIPS 3502 <102325> +proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Oregon North FIPS 3601 <102326> +proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Oregon South FIPS 3602 <102327> +proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Rhode Island FIPS 3800 <102330> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=100000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane South Dakota North FIPS 4001 <102334> +proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane South Dakota South FIPS 4002 <102335> +proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Tennessee FIPS 4100 <102336> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Texas North FIPS 4201 <102337> +proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Texas North Central FIPS 4202 <102338> +proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Texas Central FIPS 4203 <102339> +proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Texas South Central FIPS 4204 <102340> +proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333334 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Texas South FIPS 4205 <102341> +proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Utah North FIPS 4301 <102342> +proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Utah Central FIPS 4302 <102343> +proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Utah South FIPS 4303 <102344> +proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Vermont FIPS 4400 <102345> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Virginia North FIPS 4501 <102346> +proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Virginia South FIPS 4502 <102347> +proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Washington North FIPS 4601 <102348> +proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Washington South FIPS 4602 <102349> +proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane West Virginia North FIPS 4701 <102350> +proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane West Virginia South FIPS 4702 <102351> +proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Wisconsin North FIPS 4801 <102352> +proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Wisconsin Central FIPS 4802 <102353> +proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Wisconsin South FIPS 4803 <102354> +proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Wyoming East FIPS 4901 <102355> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.999938 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Wyoming East Central FIPS 4902 <102356> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.999938 +x_0=400000 +y_0=100000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Wyoming West Central FIPS 4903 <102357> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.999938 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Wyoming West FIPS 4904 <102358> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.999938 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Puerto Rico Virgin Islands FIPS 5200 <102361> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +units=m no_defs <> # Nord Algerie Ancienne Degree <102491> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> # Sud Algerie Ancienne Degree <102492> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> # NTF France I degrees <102581> +proj=lcc +lat_1=49.5 +lat_0=49.5 +lon_0=2.337229166666667 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> # NTF France II degrees <102582> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.337229166666667 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> # NTF France III degrees <102583> +proj=lcc +lat_1=44.1 +lat_0=44.1 +lon_0=2.337229166666667 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> # NTF France IV degrees <102584> +proj=lcc +lat_1=42.165 +lat_0=42.165 +lon_0=2.337229166666667 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> # Nord Algerie Degree <102591> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m no_defs <> # Sud Algerie Degree <102592> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m no_defs <> # NAD 1983 StatePlane Alabama East FIPS 0101 Feet <102629> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Alabama West FIPS 0102 Feet <102630> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Alaska 1 FIPS 5001 Feet <102631> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=-36.86989764583333 +k=0.9999 +x_0=4999999.999999999 +y_0=-4999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Alaska 2 FIPS 5002 Feet <102632> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Alaska 3 FIPS 5003 Feet <102633> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Alaska 4 FIPS 5004 Feet <102634> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Alaska 5 FIPS 5005 Feet <102635> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Alaska 6 FIPS 5006 Feet <102636> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Alaska 7 FIPS 5007 Feet <102637> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Alaska 8 FIPS 5008 Feet <102638> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Alaska 9 FIPS 5009 Feet <102639> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Alaska 10 FIPS 5010 Feet <102640> +proj=lcc +lat_1=51.83333333333334 +lat_2=53.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane California I FIPS 0401 Feet <102641> +proj=lcc +lat_1=40 +lat_2=41.66666666666666 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane California II FIPS 0402 Feet <102642> +proj=lcc +lat_1=38.33333333333334 +lat_2=39.83333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane California III FIPS 0403 Feet <102643> +proj=lcc +lat_1=37.06666666666667 +lat_2=38.43333333333333 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane California IV FIPS 0404 Feet <102644> +proj=lcc +lat_1=36 +lat_2=37.25 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane California V FIPS 0405 Feet <102645> +proj=lcc +lat_1=34.03333333333333 +lat_2=35.46666666666667 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane California VI FIPS 0406 Feet <102646> +proj=lcc +lat_1=32.78333333333333 +lat_2=33.88333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Arizona East FIPS 0201 Feet <102648> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Arizona Central FIPS 0202 Feet <102649> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Arizona West FIPS 0203 Feet <102650> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Arkansas North FIPS 0301 Feet <102651> +proj=lcc +lat_1=34.93333333333333 +lat_2=36.23333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Arkansas South FIPS 0302 Feet <102652> +proj=lcc +lat_1=33.3 +lat_2=34.76666666666667 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.9999999999 +y_0=399999.9999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Colorado North FIPS 0501 Feet <102653> +proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Colorado Central FIPS 0502 Feet <102654> +proj=lcc +lat_1=38.45 +lat_2=39.75 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Colorado South FIPS 0503 Feet <102655> +proj=lcc +lat_1=37.23333333333333 +lat_2=38.43333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Connecticut FIPS 0600 Feet <102656> +proj=lcc +lat_1=41.2 +lat_2=41.86666666666667 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Delaware FIPS 0700 Feet <102657> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Florida East FIPS 0901 Feet <102658> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Florida West FIPS 0902 Feet <102659> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Florida North FIPS 0903 Feet <102660> +proj=lcc +lat_1=29.58333333333333 +lat_2=30.75 +lat_0=29 +lon_0=-84.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Hawaii 1 FIPS 5101 Feet <102661> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Hawaii 2 FIPS 5102 Feet <102662> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Hawaii 3 FIPS 5103 Feet <102663> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Hawaii 4 FIPS 5104 Feet <102664> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Hawaii 5 FIPS 5105 Feet <102665> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Georgia East FIPS 1001 Feet <102666> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Georgia West FIPS 1002 Feet <102667> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Idaho East FIPS 1101 Feet <102668> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Idaho Central FIPS 1102 Feet <102669> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Idaho West FIPS 1103 Feet <102670> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=799999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Illinois East FIPS 1201 Feet <102671> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Illinois West FIPS 1202 Feet <102672> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Indiana East FIPS 1301 Feet <102673> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=100000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Indiana West FIPS 1302 Feet <102674> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000.0000000001 +y_0=250000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Iowa North FIPS 1401 Feet <102675> +proj=lcc +lat_1=42.06666666666667 +lat_2=43.26666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Iowa South FIPS 1402 Feet <102676> +proj=lcc +lat_1=40.61666666666667 +lat_2=41.78333333333333 +lat_0=40 +lon_0=-93.5 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Kansas North FIPS 1501 Feet <102677> +proj=lcc +lat_1=38.71666666666667 +lat_2=39.78333333333333 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Kansas South FIPS 1502 Feet <102678> +proj=lcc +lat_1=37.26666666666667 +lat_2=38.56666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.9999999999 +y_0=399999.9999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Kentucky North FIPS 1601 Feet <102679> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Kentucky South FIPS 1602 Feet <102680> +proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0000000002 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Louisiana North FIPS 1701 Feet <102681> +proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Louisiana South FIPS 1702 Feet <102682> +proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Maine East FIPS 1801 Feet <102683> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.999900 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Maine West FIPS 1802 Feet <102684> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=900000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Maryland FIPS 1900 Feet <102685> +proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Massachusetts Mainland FIPS 2001 Feet <102686> +proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000.0000000001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Massachusetts Island FIPS 2002 Feet <102687> +proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Michigan North FIPS 2111 Feet <102688> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Michigan Central FIPS 2112 Feet <102689> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000.000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Michigan South FIPS 2113 Feet <102690> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Minnesota North FIPS 2201 Feet <102691> +proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Minnesota Central FIPS 2202 Feet <102692> +proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Minnesota South FIPS 2203 Feet <102693> +proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Mississippi East FIPS 2301 Feet <102694> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Mississippi West FIPS 2302 Feet <102695> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Missouri East FIPS 2401 Feet <102696> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Missouri Central FIPS 2402 Feet <102697> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Missouri West FIPS 2403 Feet <102698> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=850000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Montana FIPS 2500 Feet <102700> +proj=lcc +lat_1=45 +lat_2=49 +lat_0=44.25 +lon_0=-109.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Nebraska FIPS 2600 Feet <102704> +proj=lcc +lat_1=40 +lat_2=43 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Nevada East FIPS 2701 Feet <102707> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=200000 +y_0=7999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Nevada Central FIPS 2702 Feet <102708> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=500000.0000000002 +y_0=6000000.000000001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Nevada West FIPS 2703 Feet <102709> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=799999.9999999999 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane New Hampshire FIPS 2800 Feet <102710> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane New Jersey FIPS 2900 Feet <102711> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane New Mexico East FIPS 3001 Feet <102712> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane New Mexico Central FIPS 3002 Feet <102713> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane New Mexico West FIPS 3003 Feet <102714> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=829999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane New York East FIPS 3101 Feet <102715> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane New York Central FIPS 3102 Feet <102716> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane New York West FIPS 3103 Feet <102717> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane New York Long Island FIPS 3104 Feet <102718> +proj=lcc +lat_1=40.66666666666666 +lat_2=41.03333333333333 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane North Carolina FIPS 3200 Feet <102719> +proj=lcc +lat_1=34.33333333333334 +lat_2=36.16666666666666 +lat_0=33.75 +lon_0=-79 +x_0=609601.2199999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane North Dakota North FIPS 3301 Feet <102720> +proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane North Dakota South FIPS 3302 Feet <102721> +proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Ohio North FIPS 3401 Feet <102722> +proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Ohio South FIPS 3402 Feet <102723> +proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Oklahoma North FIPS 3501 Feet <102724> +proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Oklahoma South FIPS 3502 Feet <102725> +proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Oregon North FIPS 3601 Feet <102726> +proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Oregon South FIPS 3602 Feet <102727> +proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Pennsylvania North FIPS 3701 Feet <102728> +proj=lcc +lat_1=40.88333333333333 +lat_2=41.95 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Pennsylvania South FIPS 3702 Feet <102729> +proj=lcc +lat_1=39.93333333333333 +lat_2=40.96666666666667 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Rhode Island FIPS 3800 Feet <102730> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=100000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane South Carolina FIPS 3900 Feet <102733> +proj=lcc +lat_1=32.5 +lat_2=34.83333333333334 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane South Dakota North FIPS 4001 Feet <102734> +proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane South Dakota South FIPS 4002 Feet <102735> +proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Tennessee FIPS 4100 Feet <102736> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Texas North FIPS 4201 Feet <102737> +proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Texas North Central FIPS 4202 Feet <102738> +proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000.0000000001 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Texas Central FIPS 4203 Feet <102739> +proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Texas South Central FIPS 4204 Feet <102740> +proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333334 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000.0000000001 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Texas South FIPS 4205 Feet <102741> +proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=4999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Utah North FIPS 4301 Feet <102742> +proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0000000002 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Utah Central FIPS 4302 Feet <102743> +proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0000000002 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Utah South FIPS 4303 Feet <102744> +proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0000000002 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Vermont FIPS 4400 Feet <102745> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Virginia North FIPS 4501 Feet <102746> +proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3499999.999999999 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Virginia South FIPS 4502 Feet <102747> +proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3499999.999999999 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Washington North FIPS 4601 Feet <102748> +proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Washington South FIPS 4602 Feet <102749> +proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane West Virginia North FIPS 4701 Feet <102750> +proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane West Virginia South FIPS 4702 Feet <102751> +proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Wisconsin North FIPS 4801 Feet <102752> +proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Wisconsin Central FIPS 4802 Feet <102753> +proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Wisconsin South FIPS 4803 Feet <102754> +proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Wyoming East FIPS 4901 Feet <102755> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.999938 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Wyoming East Central FIPS 4902 Feet <102756> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.999938 +x_0=399999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Wyoming West Central FIPS 4903 Feet <102757> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.999938 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Wyoming West FIPS 4904 Feet <102758> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.999938 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Puerto Rico Virgin Islands FIPS 5200 Feet <102761> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Guam FIPS 5400 Feet <102766> +proj=poly +lat_0=13.47246635277778 +lon_0=-144.7487507055556 +x_0=49999.99999999999 +y_0=49999.99999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # Belge Lambert 1972 <103300> +proj=lcc +lat_1=49.8333339 +lat_2=51.16666733333333 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.01256 +y_0=5400088.4378 +ellps=intl +units=m no_defs <> # GCS International 1967 <4023> +proj=longlat +ellps=aust_SA no_defs <> # GCS Bern 1898 <4217> +proj=longlat +ellps=bessel no_defs <> # GCS Voirol Unifie 1960 <4305> +proj=longlat +ellps=clrk80 no_defs <> # GCS Montserrat 1958 <4404> +proj=longlat +ellps=clrk80 no_defs <> # GCS Voirol Unifie 1960 Paris <4812> +proj=longlat +ellps=clrk80 +pm=2.337229166666667 no_defs <> # GCS WGS 1966 <37001> +proj=longlat +ellps=WGS66 no_defs <> # GCS Fischer 1960 <37002> +proj=longlat +a=6378166 +b=6356784.283607107 no_defs <> # GCS Fischer 1968 <37003> +proj=longlat +a=6378150 +b=6356768.337244385 no_defs <> # GCS Fischer Modified <37004> +proj=longlat +ellps=fschr60m no_defs <> # GCS Hough 1960 <37005> +proj=longlat +a=6378270 +b=6356794.343434343 no_defs <> # GCS Everest Modified 1969 <37006> +proj=longlat +a=6377295.664 +b=6356094.667915204 no_defs <> # GCS Walbeck <37007> +proj=longlat +a=6376896 +b=6355834.846687363 no_defs <> # GCS Sphere ARC INFO <37008> +proj=longlat +a=6370997 +b=6370997 no_defs <> # GCS European 1979 <37201> +proj=longlat +ellps=intl no_defs <> # GCS Everest Bangladesh <37202> +proj=longlat +a=6377276.345 +b=6356075.413140239 no_defs <> # GCS Everest India Nepal <37203> +proj=longlat +a=6377301.243 +b=6356100.230165385 no_defs <> # GCS Hjorsey 1955 <37204> +proj=longlat +ellps=intl no_defs <> # GCS Hong Kong 1963 <37205> +proj=longlat +ellps=intl no_defs <> # GCS Oman <37206> +proj=longlat +ellps=clrk80 no_defs <> # GCS South Asia Singapore <37207> +proj=longlat +ellps=fschr60m no_defs <> # GCS Ayabelle <37208> +proj=longlat +ellps=clrk80 no_defs <> # GCS Point 58 <37211> +proj=longlat +ellps=clrk80 no_defs <> # GCS Beacon E 1945 <37212> +proj=longlat +ellps=intl no_defs <> # GCS Tern Island 1961 <37213> +proj=longlat +ellps=intl no_defs <> # GCS Astro 1952 <37214> +proj=longlat +ellps=intl no_defs <> # GCS Bellevue IGN <37215> +proj=longlat +ellps=intl no_defs <> # GCS Canton 1966 <37216> +proj=longlat +ellps=intl no_defs <> # GCS Chatham Island 1971 <37217> +proj=longlat +ellps=intl no_defs <> # GCS DOS 1968 <37218> +proj=longlat +ellps=intl no_defs <> # GCS Easter Island 1967 <37219> +proj=longlat +ellps=intl no_defs <> # GCS Guam 1963 <37220> +proj=longlat +ellps=clrk66 no_defs <> # GCS GUX 1 <37221> +proj=longlat +ellps=intl no_defs <> # GCS Johnston Island 1961 <37222> +proj=longlat +ellps=intl no_defs <> # GCS Carthage Degree <37223> +proj=longlat +a=6378249.2 +b=6356514.999904194 no_defs <> # GCS Midway 1961 <37224> +proj=longlat +ellps=intl no_defs <> # GCS Pitcairn 1967 <37226> +proj=longlat +ellps=intl no_defs <> # GCS Santo DOS 1965 <37227> +proj=longlat +ellps=intl no_defs <> # GCS Viti Levu 1916 <37228> +proj=longlat +ellps=clrk80 no_defs <> # GCS Wake Eniwetok 1960 <37229> +proj=longlat +a=6378270 +b=6356794.343434343 no_defs <> # GCS Wake Island 1952 <37230> +proj=longlat +ellps=intl no_defs <> # GCS Anna 1 1965 <37231> +proj=longlat +ellps=aust_SA no_defs <> # GCS Gan 1970 <37232> +proj=longlat +ellps=intl no_defs <> # GCS ISTS 073 1969 <37233> +proj=longlat +ellps=intl no_defs <> # GCS Kerguelen Island 1949 <37234> +proj=longlat +ellps=intl no_defs <> # GCS Reunion <37235> +proj=longlat +ellps=intl no_defs <> # GCS Ascension Island 1958 <37237> +proj=longlat +ellps=intl no_defs <> # GCS DOS 71 4 <37238> +proj=longlat +ellps=intl no_defs <> # GCS Cape Canaveral <37239> +proj=longlat +ellps=clrk66 no_defs <> # GCS Fort Thomas 1955 <37240> +proj=longlat +ellps=clrk80 no_defs <> # GCS Graciosa Base SW 1948 <37241> +proj=longlat +ellps=intl no_defs <> # GCS ISTS 061 1968 <37242> +proj=longlat +ellps=intl no_defs <> # GCS LC5 1961 <37243> +proj=longlat +ellps=clrk66 no_defs <> # GCS Observ Meteorologico 1939 <37245> +proj=longlat +ellps=intl no_defs <> # GCS Pico de Las Nieves <37246> +proj=longlat +ellps=intl no_defs <> # GCS Porto Santo 1936 <37247> +proj=longlat +ellps=intl no_defs <> # GCS Sao Braz <37249> +proj=longlat +ellps=intl no_defs <> # GCS Selvagem Grande 1938 <37250> +proj=longlat +ellps=intl no_defs <> # GCS Tristan 1968 <37251> +proj=longlat +ellps=intl no_defs <> # GCS Samoa 1962 <37252> +proj=longlat +ellps=clrk66 no_defs <> # GCS Camp Area <37253> +proj=longlat +ellps=intl no_defs <> # GCS Deception Island <37254> +proj=longlat +ellps=clrk80 no_defs <> # GCS Gunung Segara <37255> +proj=longlat +ellps=bessel no_defs <> # GCS S42 Hungary <37257> +proj=longlat +ellps=krass no_defs <> # GCS Kusaie 1951 <37259> +proj=longlat +ellps=intl no_defs <> # GCS Alaskan Islands <37260> +proj=longlat +ellps=clrk66 no_defs <> # GCS Assumed Geographic 1 <104000> +proj=longlat +ellps=clrk66 +datum=NAD27 no_defs <> # GCS Estonia 1937 <104101> +proj=longlat +ellps=bessel no_defs <> # GCS Hermannskogel <104102> +proj=longlat +ellps=bessel no_defs <> # GCS Sierra Leone 1960 <104103> +proj=longlat +ellps=clrk80 no_defs <> # GCS Hong Kong 1980 <104104> +proj=longlat +ellps=intl no_defs <> # GCS Datum Lisboa Bessel <104105> +proj=longlat +ellps=bessel no_defs <> # GCS Datum Lisboa Hayford <104106> +proj=longlat +ellps=intl no_defs <> # GCS RGF 1993 <104107> +proj=longlat +ellps=GRS80 no_defs <> # GCS NZGD 2000 <104108> +proj=longlat +ellps=GRS80 no_defs <> # GCS Merchich Degree <104261> +proj=longlat +a=6378249.2 +b=6356514.999904194 no_defs <> # GCS Voirol 1875 Degree <104304> +proj=longlat +a=6378249.2 +b=6356514.999904194 no_defs <> # GCS Voirol Unifie 1960 Degree <104305> +proj=longlat +ellps=clrk80 no_defs <> therion/extern/proj4/nad_cvt.c0000644000076400010400000000430111137333470017412 0ustar userAdministrators#define PJ_LIB__ #include #define MAX_TRY 9 #define TOL 1e-12 LP nad_cvt(LP in, int inverse, struct CTABLE *ct) { LP t, tb; if (in.lam == HUGE_VAL) return in; /* normalize input to ll origin */ tb = in; tb.lam -= ct->ll.lam; tb.phi -= ct->ll.phi; tb.lam = adjlon(tb.lam - PI) + PI; t = nad_intr(tb, ct); if (inverse) { LP del, dif; int i = MAX_TRY; if (t.lam == HUGE_VAL) return t; t.lam = tb.lam + t.lam; t.phi = tb.phi - t.phi; do { del = nad_intr(t, ct); /* This case used to return failure, but I have changed it to return the first order approximation of the inverse shift. This avoids cases where the grid shift *into* this grid came from another grid. While we aren't returning optimally correct results I feel a close result in this case is better than no result. NFW To demonstrate use -112.5839956 49.4914451 against the NTv2 grid shift file from Canada. */ if (del.lam == HUGE_VAL) { if( getenv( "PROJ_DEBUG" ) != NULL ) fprintf( stderr, "Inverse grid shift iteration failed, presumably at grid edge.\n" "Using first approximation.\n" ); /* return del */; break; } t.lam -= dif.lam = t.lam - del.lam - tb.lam; t.phi -= dif.phi = t.phi + del.phi - tb.phi; } while (i-- && fabs(dif.lam) > TOL && fabs(dif.phi) > TOL); if (i < 0) { if( getenv( "PROJ_DEBUG" ) != NULL ) fprintf( stderr, "Inverse grid shift iterator failed to converge.\n" ); t.lam = t.phi = HUGE_VAL; return t; } in.lam = adjlon(t.lam + ct->ll.lam); in.phi = t.phi + ct->ll.phi; } else { if (t.lam == HUGE_VAL) in = t; else { in.lam -= t.lam; in.phi += t.phi; } } return in; } therion/extern/proj4/nad_init.c0000644000076400010400000001324311130502664017562 0ustar userAdministrators/****************************************************************************** * $Id: nad_init.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Load datum shift files into memory. * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 2000, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #define PJ_LIB__ #include #include #include #include #ifdef _WIN32_WCE /* assert.h includes all Windows API headers and causes 'LP' name clash. * Here assert we disable assert() for Windows CE. * TODO - mloskot: re-implement porting friendly assert */ # define assert(exp) ((void)0) #else # include #endif /* _WIN32_WCE */ /************************************************************************/ /* nad_ctable_load() */ /* */ /* Load the data portion of a ctable formatted grid. */ /************************************************************************/ int nad_ctable_load( struct CTABLE *ct, FILE *fid ) { int a_size; fseek( fid, sizeof(struct CTABLE), SEEK_SET ); /* read all the actual shift values */ a_size = ct->lim.lam * ct->lim.phi; ct->cvs = (FLP *) pj_malloc(sizeof(FLP) * a_size); if( ct->cvs == NULL || fread(ct->cvs, sizeof(FLP), a_size, fid) != a_size ) { pj_dalloc( ct->cvs ); ct->cvs = NULL; if( getenv("PROJ_DEBUG") != NULL ) { fprintf( stderr, "ctable loading failed on fread() - binary incompatible?\n" ); } pj_errno = -38; return 0; } return 1; } /************************************************************************/ /* nad_ctable_init() */ /* */ /* Read the header portion of a "ctable" format grid. */ /************************************************************************/ struct CTABLE *nad_ctable_init( FILE * fid ) { struct CTABLE *ct; int id_end; /* read the table header */ ct = (struct CTABLE *) pj_malloc(sizeof(struct CTABLE)); if( ct == NULL || fread( ct, sizeof(struct CTABLE), 1, fid ) != 1 ) { pj_errno = -38; return NULL; } /* do some minimal validation to ensure the structure isn't corrupt */ if( ct->lim.lam < 1 || ct->lim.lam > 100000 || ct->lim.phi < 1 || ct->lim.phi > 100000 ) { pj_errno = -38; return NULL; } /* trim white space and newlines off id */ for( id_end = strlen(ct->id)-1; id_end > 0; id_end-- ) { if( ct->id[id_end] == '\n' || ct->id[id_end] == ' ' ) ct->id[id_end] = '\0'; else break; } ct->cvs = NULL; return ct; } /************************************************************************/ /* nad_init() */ /* */ /* Read a datum shift file in any of the supported binary formats. */ /************************************************************************/ struct CTABLE *nad_init(char *name) { char fname[MAX_PATH_FILENAME+1]; struct CTABLE *ct; FILE *fid; char header[512]; errno = pj_errno = 0; /* -------------------------------------------------------------------- */ /* Open the file using the usual search rules. */ /* -------------------------------------------------------------------- */ strcpy(fname, name); if (!(fid = pj_open_lib(fname, "rb"))) { pj_errno = errno; return 0; } ct = nad_ctable_init( fid ); if( ct != NULL ) { if( !nad_ctable_load( ct, fid ) ) { nad_free( ct ); ct = NULL; } } fclose(fid); return ct; } /************************************************************************/ /* nad_free() */ /* */ /* Free a CTABLE grid shift structure produced by nad_init(). */ /************************************************************************/ void nad_free(struct CTABLE *ct) { if (ct) { if( ct->cvs != NULL ) pj_dalloc(ct->cvs); pj_dalloc(ct); } } therion/extern/proj4/nad_intr.c0000644000076400010400000000270111137333472017576 0ustar userAdministrators/* Determine nad table correction value */ #define PJ_LIB__ #include LP nad_intr(LP t, struct CTABLE *ct) { LP val, frct; ILP indx; double m00, m10, m01, m11; FLP *f00, *f10, *f01, *f11; long index; int in; indx.lam = floor(t.lam /= ct->del.lam); indx.phi = floor(t.phi /= ct->del.phi); frct.lam = t.lam - indx.lam; frct.phi = t.phi - indx.phi; val.lam = val.phi = HUGE_VAL; if (indx.lam < 0) { if (indx.lam == -1 && frct.lam > 0.99999999999) { ++indx.lam; frct.lam = 0.; } else return val; } else if ((in = indx.lam + 1) >= ct->lim.lam) { if (in == ct->lim.lam && frct.lam < 1e-11) { --indx.lam; frct.lam = 1.; } else return val; } if (indx.phi < 0) { if (indx.phi == -1 && frct.phi > 0.99999999999) { ++indx.phi; frct.phi = 0.; } else return val; } else if ((in = indx.phi + 1) >= ct->lim.phi) { if (in == ct->lim.phi && frct.phi < 1e-11) { --indx.phi; frct.phi = 1.; } else return val; } index = indx.phi * ct->lim.lam + indx.lam; f00 = ct->cvs + index++; f10 = ct->cvs + index; index += ct->lim.lam; f11 = ct->cvs + index--; f01 = ct->cvs + index; m11 = m10 = frct.lam; m00 = m01 = 1. - frct.lam; m11 *= frct.phi; m01 *= frct.phi; frct.phi = 1. - frct.phi; m00 *= frct.phi; m10 *= frct.phi; val.lam = m00 * f00->lam + m10 * f10->lam + m01 * f01->lam + m11 * f11->lam; val.phi = m00 * f00->phi + m10 * f10->phi + m01 * f01->phi + m11 * f11->phi; return val; } therion/extern/proj4/nad_list.h0000644000076400010400000000037711076404756017617 0ustar userAdministrators/* projection list for program nad2nad */ PROJ_HEAD(lcc, "Lambert Conformal Conic") PROJ_HEAD(omerc, "Oblique Mercator") PROJ_HEAD(poly, "Polyconic (American)") PROJ_HEAD(tmerc, "Transverse Mercator") PROJ_HEAD(utm, "Universal Transverse Mercator (UTM)") therion/extern/proj4/org_proj4_Projections.h0000644000076400010400000000175111076404756022303 0ustar userAdministrators/* DO NOT EDIT THIS FILE - it is machine generated */ #include /* Header for class org_proj4_Projections */ #ifndef _Included_org_proj4_Projections #define _Included_org_proj4_Projections #ifdef __cplusplus extern "C" { #endif /* * Class: org_proj4_Projections * Method: getProjInfo * Signature: (Ljava/lang/String;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_org_proj4_Projections_getProjInfo (JNIEnv *, jobject, jstring); /* * Class: org_proj4_Projections * Method: getEllipsInfo * Signature: (Ljava/lang/String;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_org_proj4_Projections_getEllipsInfo (JNIEnv *, jobject, jstring); /* * Class: org_proj4_Projections * Method: transform * Signature: ([D[D[DLjava/lang/String;Ljava/lang/String;JI)V */ JNIEXPORT void JNICALL Java_org_proj4_Projections_transform (JNIEnv *, jobject, jdoubleArray, jdoubleArray, jdoubleArray, jstring, jstring, jlong, jint); #ifdef __cplusplus } #endif #endif therion/extern/proj4/PJ_aea.c0000644000076400010400000001167111130502664017117 0ustar userAdministrators/****************************************************************************** * $Id: PJ_aea.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Implementation of the aea (Albers Equal Area) projection. * Author: Gerald Evenden * ****************************************************************************** * Copyright (c) 1995, Gerald Evenden * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #define PROJ_PARMS__ \ double ec; \ double n; \ double c; \ double dd; \ double n2; \ double rho0; \ double rho; \ double phi1; \ double phi2; \ double *en; \ int ellips; #define PJ_LIB__ #include PJ_CVSID("$Id: PJ_aea.c 1504 2009-01-06 02:11:57Z warmerdam $"); # define EPS10 1.e-10 # define TOL7 1.e-7 PROJ_HEAD(aea, "Albers Equal Area") "\n\tConic Sph&Ell\n\tlat_1= lat_2="; PROJ_HEAD(leac, "Lambert Equal Area Conic") "\n\tConic, Sph&Ell\n\tlat_1= south"; /* determine latitude angle phi-1 */ # define N_ITER 15 # define EPSILON 1.0e-7 # define TOL 1.0e-10 static double phi1_(double qs, double Te, double Tone_es) { int i; double Phi, sinpi, cospi, con, com, dphi; Phi = asin (.5 * qs); if (Te < EPSILON) return( Phi ); i = N_ITER; do { sinpi = sin (Phi); cospi = cos (Phi); con = Te * sinpi; com = 1. - con * con; dphi = .5 * com * com / cospi * (qs / Tone_es - sinpi / com + .5 / Te * log ((1. - con) / (1. + con))); Phi += dphi; } while (fabs(dphi) > TOL && --i); return( i ? Phi : HUGE_VAL ); } FORWARD(e_forward); /* ellipsoid & spheroid */ if ((P->rho = P->c - (P->ellips ? P->n * pj_qsfn(sin(lp.phi), P->e, P->one_es) : P->n2 * sin(lp.phi))) < 0.) F_ERROR P->rho = P->dd * sqrt(P->rho); xy.x = P->rho * sin( lp.lam *= P->n ); xy.y = P->rho0 - P->rho * cos(lp.lam); return (xy); } INVERSE(e_inverse) /* ellipsoid & spheroid */; if( (P->rho = hypot(xy.x, xy.y = P->rho0 - xy.y)) != 0.0 ) { if (P->n < 0.) { P->rho = -P->rho; xy.x = -xy.x; xy.y = -xy.y; } lp.phi = P->rho / P->dd; if (P->ellips) { lp.phi = (P->c - lp.phi * lp.phi) / P->n; if (fabs(P->ec - fabs(lp.phi)) > TOL7) { if ((lp.phi = phi1_(lp.phi, P->e, P->one_es)) == HUGE_VAL) I_ERROR } else lp.phi = lp.phi < 0. ? -HALFPI : HALFPI; } else if (fabs(lp.phi = (P->c - lp.phi * lp.phi) / P->n2) <= 1.) lp.phi = asin(lp.phi); else lp.phi = lp.phi < 0. ? -HALFPI : HALFPI; lp.lam = atan2(xy.x, xy.y) / P->n; } else { lp.lam = 0.; lp.phi = P->n > 0. ? HALFPI : - HALFPI; } return (lp); } FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } } static PJ * setup(PJ *P) { double cosphi, sinphi; int secant; if (fabs(P->phi1 + P->phi2) < EPS10) E_ERROR(-21); P->n = sinphi = sin(P->phi1); cosphi = cos(P->phi1); secant = fabs(P->phi1 - P->phi2) >= EPS10; if( (P->ellips = (P->es > 0.))) { double ml1, m1; if (!(P->en = pj_enfn(P->es))) E_ERROR_0; m1 = pj_msfn(sinphi, cosphi, P->es); ml1 = pj_qsfn(sinphi, P->e, P->one_es); if (secant) { /* secant cone */ double ml2, m2; sinphi = sin(P->phi2); cosphi = cos(P->phi2); m2 = pj_msfn(sinphi, cosphi, P->es); ml2 = pj_qsfn(sinphi, P->e, P->one_es); P->n = (m1 * m1 - m2 * m2) / (ml2 - ml1); } P->ec = 1. - .5 * P->one_es * log((1. - P->e) / (1. + P->e)) / P->e; P->c = m1 * m1 + P->n * ml1; P->dd = 1. / P->n; P->rho0 = P->dd * sqrt(P->c - P->n * pj_qsfn(sin(P->phi0), P->e, P->one_es)); } else { if (secant) P->n = .5 * (P->n + sin(P->phi2)); P->n2 = P->n + P->n; P->c = cosphi * cosphi + P->n2 * sinphi; P->dd = 1. / P->n; P->rho0 = P->dd * sqrt(P->c - P->n2 * sin(P->phi0)); } P->inv = e_inverse; P->fwd = e_forward; return P; } ENTRY1(aea,en) P->phi1 = pj_param(P->params, "rlat_1").f; P->phi2 = pj_param(P->params, "rlat_2").f; ENDENTRY(setup(P)) ENTRY1(leac,en) P->phi2 = pj_param(P->params, "rlat_1").f; P->phi1 = pj_param(P->params, "bsouth").i ? - HALFPI: HALFPI; ENDENTRY(setup(P)) therion/extern/proj4/PJ_aeqd.c0000644000076400010400000001655111130502664017305 0ustar userAdministrators/****************************************************************************** * $Id: PJ_aeqd.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Implementation of the aeqd (Azimuthal Equidistant) projection. * Author: Gerald Evenden * ****************************************************************************** * Copyright (c) 1995, Gerald Evenden * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #define PROJ_PARMS__ \ double sinph0; \ double cosph0; \ double *en; \ double M1; \ double N1; \ double Mp; \ double He; \ double G; \ int mode; #define PJ_LIB__ #include PJ_CVSID("$Id: PJ_aeqd.c 1504 2009-01-06 02:11:57Z warmerdam $"); PROJ_HEAD(aeqd, "Azimuthal Equidistant") "\n\tAzi, Sph&Ell\n\tlat_0 guam"; #define EPS10 1.e-10 #define TOL 1.e-14 #define N_POLE 0 #define S_POLE 1 #define EQUIT 2 #define OBLIQ 3 FORWARD(e_guam_fwd); /* Guam elliptical */ double cosphi, sinphi, t; cosphi = cos(lp.phi); sinphi = sin(lp.phi); t = 1. / sqrt(1. - P->es * sinphi * sinphi); xy.x = lp.lam * cosphi * t; xy.y = pj_mlfn(lp.phi, sinphi, cosphi, P->en) - P->M1 + .5 * lp.lam * lp.lam * cosphi * sinphi * t; return (xy); } FORWARD(e_forward); /* elliptical */ double coslam, cosphi, sinphi, rho, s, H, H2, c, Az, t, ct, st, cA, sA; coslam = cos(lp.lam); cosphi = cos(lp.phi); sinphi = sin(lp.phi); switch (P->mode) { case N_POLE: coslam = - coslam; case S_POLE: xy.x = (rho = fabs(P->Mp - pj_mlfn(lp.phi, sinphi, cosphi, P->en))) * sin(lp.lam); xy.y = rho * coslam; break; case EQUIT: case OBLIQ: if (fabs(lp.lam) < EPS10 && fabs(lp.phi - P->phi0) < EPS10) { xy.x = xy.y = 0.; break; } t = atan2(P->one_es * sinphi + P->es * P->N1 * P->sinph0 * sqrt(1. - P->es * sinphi * sinphi), cosphi); ct = cos(t); st = sin(t); Az = atan2(sin(lp.lam) * ct, P->cosph0 * st - P->sinph0 * coslam * ct); cA = cos(Az); sA = sin(Az); s = aasin( fabs(sA) < TOL ? (P->cosph0 * st - P->sinph0 * coslam * ct) / cA : sin(lp.lam) * ct / sA ); H = P->He * cA; H2 = H * H; c = P->N1 * s * (1. + s * s * (- H2 * (1. - H2)/6. + s * ( P->G * H * (1. - 2. * H2 * H2) / 8. + s * ((H2 * (4. - 7. * H2) - 3. * P->G * P->G * (1. - 7. * H2)) / 120. - s * P->G * H / 48.)))); xy.x = c * sA; xy.y = c * cA; break; } return (xy); } FORWARD(s_forward); /* spherical */ double coslam, cosphi, sinphi; sinphi = sin(lp.phi); cosphi = cos(lp.phi); coslam = cos(lp.lam); switch (P->mode) { case EQUIT: xy.y = cosphi * coslam; goto oblcon; case OBLIQ: xy.y = P->sinph0 * sinphi + P->cosph0 * cosphi * coslam; oblcon: if (fabs(fabs(xy.y) - 1.) < TOL) if (xy.y < 0.) F_ERROR else xy.x = xy.y = 0.; else { xy.y = acos(xy.y); xy.y /= sin(xy.y); xy.x = xy.y * cosphi * sin(lp.lam); xy.y *= (P->mode == EQUIT) ? sinphi : P->cosph0 * sinphi - P->sinph0 * cosphi * coslam; } break; case N_POLE: lp.phi = -lp.phi; coslam = -coslam; case S_POLE: if (fabs(lp.phi - HALFPI) < EPS10) F_ERROR; xy.x = (xy.y = (HALFPI + lp.phi)) * sin(lp.lam); xy.y *= coslam; break; } return (xy); } INVERSE(e_guam_inv); /* Guam elliptical */ double x2, t; int i; x2 = 0.5 * xy.x * xy.x; lp.phi = P->phi0; for (i = 0; i < 3; ++i) { t = P->e * sin(lp.phi); lp.phi = pj_inv_mlfn(P->M1 + xy.y - x2 * tan(lp.phi) * (t = sqrt(1. - t * t)), P->es, P->en); } lp.lam = xy.x * t / cos(lp.phi); return (lp); } INVERSE(e_inverse); /* elliptical */ double c, Az, cosAz, A, B, D, E, F, psi, t; if ((c = hypot(xy.x, xy.y)) < EPS10) { lp.phi = P->phi0; lp.lam = 0.; return (lp); } if (P->mode == OBLIQ || P->mode == EQUIT) { cosAz = cos(Az = atan2(xy.x, xy.y)); t = P->cosph0 * cosAz; B = P->es * t / P->one_es; A = - B * t; B *= 3. * (1. - A) * P->sinph0; D = c / P->N1; E = D * (1. - D * D * (A * (1. + A) / 6. + B * (1. + 3.*A) * D / 24.)); F = 1. - E * E * (A / 2. + B * E / 6.); psi = aasin(P->sinph0 * cos(E) + t * sin(E)); lp.lam = aasin(sin(Az) * sin(E) / cos(psi)); if ((t = fabs(psi)) < EPS10) lp.phi = 0.; else if (fabs(t - HALFPI) < 0.) lp.phi = HALFPI; else lp.phi = atan((1. - P->es * F * P->sinph0 / sin(psi)) * tan(psi) / P->one_es); } else { /* Polar */ lp.phi = pj_inv_mlfn(P->mode == N_POLE ? P->Mp - c : P->Mp + c, P->es, P->en); lp.lam = atan2(xy.x, P->mode == N_POLE ? -xy.y : xy.y); } return (lp); } INVERSE(s_inverse); /* spherical */ double cosc, c_rh, sinc; if ((c_rh = hypot(xy.x, xy.y)) > PI) { if (c_rh - EPS10 > PI) I_ERROR; c_rh = PI; } else if (c_rh < EPS10) { lp.phi = P->phi0; lp.lam = 0.; return (lp); } if (P->mode == OBLIQ || P->mode == EQUIT) { sinc = sin(c_rh); cosc = cos(c_rh); if (P->mode == EQUIT) { lp.phi = aasin(xy.y * sinc / c_rh); xy.x *= sinc; xy.y = cosc * c_rh; } else { lp.phi = aasin(cosc * P->sinph0 + xy.y * sinc * P->cosph0 / c_rh); xy.y = (cosc - P->sinph0 * sin(lp.phi)) * c_rh; xy.x *= sinc * P->cosph0; } lp.lam = xy.y == 0. ? 0. : atan2(xy.x, xy.y); } else if (P->mode == N_POLE) { lp.phi = HALFPI - c_rh; lp.lam = atan2(xy.x, -xy.y); } else { lp.phi = c_rh - HALFPI; lp.lam = atan2(xy.x, xy.y); } return (lp); } FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } } ENTRY1(aeqd, en) P->phi0 = pj_param(P->params, "rlat_0").f; if (fabs(fabs(P->phi0) - HALFPI) < EPS10) { P->mode = P->phi0 < 0. ? S_POLE : N_POLE; P->sinph0 = P->phi0 < 0. ? -1. : 1.; P->cosph0 = 0.; } else if (fabs(P->phi0) < EPS10) { P->mode = EQUIT; P->sinph0 = 0.; P->cosph0 = 1.; } else { P->mode = OBLIQ; P->sinph0 = sin(P->phi0); P->cosph0 = cos(P->phi0); } if (! P->es) { P->inv = s_inverse; P->fwd = s_forward; } else { if (!(P->en = pj_enfn(P->es))) E_ERROR_0; if (pj_param(P->params, "bguam").i) { P->M1 = pj_mlfn(P->phi0, P->sinph0, P->cosph0, P->en); P->inv = e_guam_inv; P->fwd = e_guam_fwd; } else { switch (P->mode) { case N_POLE: P->Mp = pj_mlfn(HALFPI, 1., 0., P->en); break; case S_POLE: P->Mp = pj_mlfn(-HALFPI, -1., 0., P->en); break; case EQUIT: case OBLIQ: P->inv = e_inverse; P->fwd = e_forward; P->N1 = 1. / sqrt(1. - P->es * P->sinph0 * P->sinph0); P->G = P->sinph0 * (P->He = P->e / sqrt(P->one_es)); P->He *= P->cosph0; break; } P->inv = e_inverse; P->fwd = e_forward; } } ENDENTRY(P) therion/extern/proj4/PJ_airy.c0000644000076400010400000000705511130502664017336 0ustar userAdministrators/****************************************************************************** * $Id: PJ_airy.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Implementation of the airy (Airy) projection. * Author: Gerald Evenden * ****************************************************************************** * Copyright (c) 1995, Gerald Evenden * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #define PROJ_PARMS__ \ double p_halfpi; \ double sinph0; \ double cosph0; \ double Cb; \ int mode; \ int no_cut; /* do not cut at hemisphere limit */ #define PJ_LIB__ #include PJ_CVSID("$Id: PJ_airy.c 1504 2009-01-06 02:11:57Z warmerdam $"); PROJ_HEAD(airy, "Airy") "\n\tMisc Sph, no inv.\n\tno_cut lat_b="; # define EPS 1.e-10 # define N_POLE 0 # define S_POLE 1 # define EQUIT 2 # define OBLIQ 3 FORWARD(s_forward); /* spheroid */ double sinlam, coslam, cosphi, sinphi, t, s, Krho, cosz; sinlam = sin(lp.lam); coslam = cos(lp.lam); switch (P->mode) { case EQUIT: case OBLIQ: sinphi = sin(lp.phi); cosphi = cos(lp.phi); cosz = cosphi * coslam; if (P->mode == OBLIQ) cosz = P->sinph0 * sinphi + P->cosph0 * cosz; if (!P->no_cut && cosz < -EPS) F_ERROR; if (fabs(s = 1. - cosz) > EPS) { t = 0.5 * (1. + cosz); Krho = -log(t)/s - P->Cb / t; } else Krho = 0.5 - P->Cb; xy.x = Krho * cosphi * sinlam; if (P->mode == OBLIQ) xy.y = Krho * (P->cosph0 * sinphi - P->sinph0 * cosphi * coslam); else xy.y = Krho * sinphi; break; case S_POLE: case N_POLE: lp.phi = fabs(P->p_halfpi - lp.phi); if (!P->no_cut && (lp.phi - EPS) > HALFPI) F_ERROR; if ((lp.phi *= 0.5) > EPS) { t = tan(lp.phi); Krho = -2.*(log(cos(lp.phi)) / t + t * P->Cb); xy.x = Krho * sinlam; xy.y = Krho * coslam; if (P->mode == N_POLE) xy.y = -xy.y; } else xy.x = xy.y = 0.; } return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(airy) double beta; P->no_cut = pj_param(P->params, "bno_cut").i; beta = 0.5 * (HALFPI - pj_param(P->params, "rlat_b").f); if (fabs(beta) < EPS) P->Cb = -0.5; else { P->Cb = 1./tan(beta); P->Cb *= P->Cb * log(cos(beta)); } if (fabs(fabs(P->phi0) - HALFPI) < EPS) if (P->phi0 < 0.) { P->p_halfpi = -HALFPI; P->mode = S_POLE; } else { P->p_halfpi = HALFPI; P->mode = N_POLE; } else { if (fabs(P->phi0) < EPS) P->mode = EQUIT; else { P->mode = OBLIQ; P->sinph0 = sin(P->phi0); P->cosph0 = cos(P->phi0); } } P->fwd = s_forward; P->es = 0.; ENDENTRY(P) therion/extern/proj4/PJ_aitoff.c0000644000076400010400000000511311130502664017633 0ustar userAdministrators/****************************************************************************** * $Id: PJ_aitoff.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Implementation of the aitoff (Aitoff) and wintri (Winkel Tripel) * projections. * Author: Gerald Evenden * ****************************************************************************** * Copyright (c) 1995, Gerald Evenden * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #define PROJ_PARMS__ \ double cosphi1; \ int mode; #define PJ_LIB__ #include PJ_CVSID("$Id: PJ_aitoff.c 1504 2009-01-06 02:11:57Z warmerdam $"); PROJ_HEAD(aitoff, "Aitoff") "\n\tMisc Sph"; PROJ_HEAD(wintri, "Winkel Tripel") "\n\tMisc Sph\n\tlat_1"; FORWARD(s_forward); /* spheroid */ double c, d; if((d = acos(cos(lp.phi) * cos(c = 0.5 * lp.lam)))) {/* basic Aitoff */ xy.x = 2. * d * cos(lp.phi) * sin(c) * (xy.y = 1. / sin(d)); xy.y *= d * sin(lp.phi); } else xy.x = xy.y = 0.; if (P->mode) { /* Winkel Tripel */ xy.x = (xy.x + lp.lam * P->cosphi1) * 0.5; xy.y = (xy.y + lp.phi) * 0.5; } return (xy); } FREEUP; if (P) pj_dalloc(P); } static PJ * setup(PJ *P) { P->inv = 0; P->fwd = s_forward; P->es = 0.; return P; } ENTRY0(aitoff) P->mode = 0; ENDENTRY(setup(P)) ENTRY0(wintri) P->mode = 1; if (pj_param(P->params, "tlat_1").i) { if ((P->cosphi1 = cos(pj_param(P->params, "rlat_1").f)) == 0.) E_ERROR(-22) } else /* 50d28' or acos(2/pi) */ P->cosphi1 = 0.636619772367581343; ENDENTRY(setup(P)) therion/extern/proj4/pj_apply_gridshift.c0000644000076400010400000001256311130502664021662 0ustar userAdministrators/****************************************************************************** * $Id: pj_apply_gridshift.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Apply datum shifts based on grid shift files (normally NAD27 to * NAD83 or the reverse). This module is responsible for keeping * a list of loaded grids, and calling with each one that is * allowed for a given datum (expressed as the nadgrids= parameter). * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 2000, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #define PJ_LIB__ #include #include #include /************************************************************************/ /* pj_apply_gridshift() */ /************************************************************************/ int pj_apply_gridshift( const char *nadgrids, int inverse, long point_count, int point_offset, double *x, double *y, double *z ) { int grid_count = 0; PJ_GRIDINFO **tables; int i; int debug_flag = getenv( "PROJ_DEBUG" ) != NULL; static int debug_count = 0; pj_errno = 0; tables = pj_gridlist_from_nadgrids( nadgrids, &grid_count); if( tables == NULL || grid_count == 0 ) return pj_errno; for( i = 0; i < point_count; i++ ) { long io = i * point_offset; LP input, output; int itable; input.phi = y[io]; input.lam = x[io]; output.phi = HUGE_VAL; output.lam = HUGE_VAL; /* keep trying till we find a table that works */ for( itable = 0; itable < grid_count; itable++ ) { PJ_GRIDINFO *gi = tables[itable]; struct CTABLE *ct = gi->ct; /* skip tables that don't match our point at all. */ if( ct->ll.phi > input.phi || ct->ll.lam > input.lam || ct->ll.phi + (ct->lim.phi-1) * ct->del.phi < input.phi || ct->ll.lam + (ct->lim.lam-1) * ct->del.lam < input.lam ) continue; /* If we have child nodes, check to see if any of them apply. */ if( gi->child != NULL ) { PJ_GRIDINFO *child; for( child = gi->child; child != NULL; child = child->next ) { struct CTABLE *ct1 = child->ct; if( ct1->ll.phi > input.phi || ct1->ll.lam > input.lam || ct1->ll.phi+(ct1->lim.phi-1)*ct1->del.phi < input.phi || ct1->ll.lam+(ct1->lim.lam-1)*ct1->del.lam < input.lam) continue; break; } /* we found a more refined child node to use */ if( child != NULL ) { gi = child; ct = child->ct; } } /* load the grid shift info if we don't have it. */ if( ct->cvs == NULL && !pj_gridinfo_load( gi ) ) { pj_errno = -38; return pj_errno; } output = nad_cvt( input, inverse, ct ); if( output.lam != HUGE_VAL ) { if( debug_flag && debug_count++ < 20 ) fprintf( stderr, "pj_apply_gridshift(): used %s\n", ct->id ); break; } } if( output.lam == HUGE_VAL ) { if( debug_flag ) { fprintf( stderr, "pj_apply_gridshift(): failed to find a grid shift table for\n" " location (%.7fdW,%.7fdN)\n", x[io] * RAD_TO_DEG, y[io] * RAD_TO_DEG ); fprintf( stderr, " tried: %s\n", nadgrids ); } pj_errno = -38; return pj_errno; } else { y[io] = output.phi; x[io] = output.lam; } } return 0; } therion/extern/proj4/PJ_august.c0000644000076400010400000000105011137333476017701 0ustar userAdministrators#define PJ_LIB__ #include PROJ_HEAD(august, "August Epicycloidal") "\n\tMisc Sph, no inv."; #define M 1.333333333333333 FORWARD(s_forward); /* spheroid */ double t, c1, c, x1, x12, y1, y12; t = tan(.5 * lp.phi); c1 = sqrt(1. - t * t); c = 1. + c1 * cos(lp.lam *= .5); x1 = sin(lp.lam) * c1 / c; y1 = t / c; xy.x = M * x1 * (3. + (x12 = x1 * x1) - 3. * (y12 = y1 * y1)); xy.y = M * y1 * (3. + 3. * x12 - y12); return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(august) P->inv = 0; P->fwd = s_forward; P->es = 0.; ENDENTRY(P) therion/extern/proj4/pj_auth.c0000644000076400010400000000132711137333500017425 0ustar userAdministrators/* determine latitude from authalic latitude */ #include # define P00 .33333333333333333333 # define P01 .17222222222222222222 # define P02 .10257936507936507936 # define P10 .06388888888888888888 # define P11 .06640211640211640211 # define P20 .01641501294219154443 #define APA_SIZE 3 double * pj_authset(double es) { double t, *APA; if (APA = (double *)pj_malloc(APA_SIZE * sizeof(double))) { APA[0] = es * P00; t = es * es; APA[0] += t * P01; APA[1] = t * P10; t *= es; APA[0] += t * P02; APA[1] += t * P11; APA[2] = t * P20; } return APA; } double pj_authlat(double beta, double *APA) { double t = beta+beta; return(beta + APA[0] * sin(t) + APA[1] * sin(t+t) + APA[2] * sin(t+t+t)); } therion/extern/proj4/PJ_bacon.c0000644000076400010400000000175411137333502017454 0ustar userAdministrators# define HLFPI2 2.46740110027233965467 # define EPS 1e-10 #define PROJ_PARMS__ \ int bacn; \ int ortl; #define PJ_LIB__ #include PROJ_HEAD(apian, "Apian Globular I") "\n\tMisc Sph, no inv."; PROJ_HEAD(ortel, "Ortelius Oval") "\n\tMisc Sph, no inv."; PROJ_HEAD(bacon, "Bacon Globular") "\n\tMisc Sph, no inv."; FORWARD(s_forward); /* spheroid */ double ax, f; xy.y = P->bacn ? HALFPI * sin(lp.phi) : lp.phi; if ((ax = fabs(lp.lam)) >= EPS) { if (P->ortl && ax >= HALFPI) xy.x = sqrt(HLFPI2 - lp.phi * lp.phi + EPS) + ax - HALFPI; else { f = 0.5 * (HLFPI2 / ax + ax); xy.x = ax - f + sqrt(f * f - xy.y * xy.y); } if (lp.lam < 0.) xy.x = - xy.x; } else xy.x = 0.; return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(bacon) P->bacn = 1; P->ortl = 0; P->es = 0.; P->fwd = s_forward; ENDENTRY(P) ENTRY0(apian) P->bacn = P->ortl = 0; P->es = 0.; P->fwd = s_forward; ENDENTRY(P) ENTRY0(ortel) P->bacn = 0; P->ortl = 1; P->es = 0.; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/PJ_bipc.c0000644000076400010400000000620311137333504017303 0ustar userAdministrators#define PROJ_PARMS__ \ int noskew; #define PJ_LIB__ # include PROJ_HEAD(bipc, "Bipolar conic of western hemisphere") "\n\tConic Sph."; # define EPS 1e-10 # define EPS10 1e-10 # define ONEEPS 1.000000001 # define NITER 10 # define lamB -.34894976726250681539 # define n .63055844881274687180 # define F 1.89724742567461030582 # define Azab .81650043674686363166 # define Azba 1.82261843856185925133 # define T 1.27246578267089012270 # define rhoc 1.20709121521568721927 # define cAzc .69691523038678375519 # define sAzc .71715351331143607555 # define C45 .70710678118654752469 # define S45 .70710678118654752410 # define C20 .93969262078590838411 # define S20 -.34202014332566873287 # define R110 1.91986217719376253360 # define R104 1.81514242207410275904 FORWARD(s_forward); /* spheroid */ double cphi, sphi, tphi, t, al, Az, z, Av, cdlam, sdlam, r; int tag; cphi = cos(lp.phi); sphi = sin(lp.phi); cdlam = cos(sdlam = lamB - lp.lam); sdlam = sin(sdlam); if (fabs(fabs(lp.phi) - HALFPI) < EPS10) { Az = lp.phi < 0. ? PI : 0.; tphi = HUGE_VAL; } else { tphi = sphi / cphi; Az = atan2(sdlam , C45 * (tphi - cdlam)); } if( (tag = (Az > Azba)) ) { cdlam = cos(sdlam = lp.lam + R110); sdlam = sin(sdlam); z = S20 * sphi + C20 * cphi * cdlam; if (fabs(z) > 1.) { if (fabs(z) > ONEEPS) F_ERROR else z = z < 0. ? -1. : 1.; } else z = acos(z); if (tphi != HUGE_VAL) Az = atan2(sdlam, (C20 * tphi - S20 * cdlam)); Av = Azab; xy.y = rhoc; } else { z = S45 * (sphi + cphi * cdlam); if (fabs(z) > 1.) { if (fabs(z) > ONEEPS) F_ERROR else z = z < 0. ? -1. : 1.; } else z = acos(z); Av = Azba; xy.y = -rhoc; } if (z < 0.) F_ERROR; r = F * (t = pow(tan(.5 * z), n)); if ((al = .5 * (R104 - z)) < 0.) F_ERROR; al = (t + pow(al, n)) / T; if (fabs(al) > 1.) { if (fabs(al) > ONEEPS) F_ERROR else al = al < 0. ? -1. : 1.; } else al = acos(al); if (fabs(t = n * (Av - Az)) < al) r /= cos(al + (tag ? t : -t)); xy.x = r * sin(t); xy.y += (tag ? -r : r) * cos(t); if (P->noskew) { t = xy.x; xy.x = -xy.x * cAzc - xy.y * sAzc; xy.y = -xy.y * cAzc + t * sAzc; } return (xy); } INVERSE(s_inverse); /* spheroid */ double t, r, rp, rl, al, z, fAz, Az, s, c, Av; int neg, i; if (P->noskew) { t = xy.x; xy.x = -xy.x * cAzc + xy.y * sAzc; xy.y = -xy.y * cAzc - t * sAzc; } if( (neg = (xy.x < 0.)) ) { xy.y = rhoc - xy.y; s = S20; c = C20; Av = Azab; } else { xy.y += rhoc; s = S45; c = C45; Av = Azba; } rl = rp = r = hypot(xy.x, xy.y); fAz = fabs(Az = atan2(xy.x, xy.y)); for (i = NITER; i ; --i) { z = 2. * atan(pow(r / F,1 / n)); al = acos((pow(tan(.5 * z), n) + pow(tan(.5 * (R104 - z)), n)) / T); if (fAz < al) r = rp * cos(al + (neg ? Az : -Az)); if (fabs(rl - r) < EPS) break; rl = r; } if (! i) I_ERROR; Az = Av - Az / n; lp.phi = asin(s * cos(z) + c * sin(z) * cos(Az)); lp.lam = atan2(sin(Az), c / tan(z) - s * cos(Az)); if (neg) lp.lam -= R110; else lp.lam = lamB - lp.lam; return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(bipc) P->noskew = pj_param(P->params, "bns").i; P->inv = s_inverse; P->fwd = s_forward; P->es = 0.; ENDENTRY(P) therion/extern/proj4/PJ_boggs.c0000644000076400010400000000143511137333506017473 0ustar userAdministrators#define PJ_LIB__ # include PROJ_HEAD(boggs, "Boggs Eumorphic") "\n\tPCyl., no inv., Sph."; # define NITER 20 # define EPS 1e-7 # define ONETOL 1.000001 # define FXC 2.00276 # define FXC2 1.11072 # define FYC 0.49931 # define FYC2 1.41421356237309504880 FORWARD(s_forward); /* spheroid */ double theta, th1, c; int i; theta = lp.phi; if (fabs(fabs(lp.phi) - HALFPI) < EPS) xy.x = 0.; else { c = sin(theta) * PI; for (i = NITER; i; --i) { theta -= th1 = (theta + sin(theta) - c) / (1. + cos(theta)); if (fabs(th1) < EPS) break; } theta *= 0.5; xy.x = FXC * lp.lam / (1. / cos(lp.phi) + FXC2 / cos(theta)); } xy.y = FYC * (lp.phi + FYC2 * sin(theta)); return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(boggs) P->es = 0.; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/PJ_bonne.c0000644000076400010400000000366111137333512017473 0ustar userAdministrators#define PROJ_PARMS__ \ double phi1; \ double cphi1; \ double am1; \ double m1; \ double *en; #define PJ_LIB__ #include PROJ_HEAD(bonne, "Bonne (Werner lat_1=90)") "\n\tConic Sph&Ell\n\tlat_1="; #define EPS10 1e-10 FORWARD(e_forward); /* ellipsoid */ double rh, E, c; rh = P->am1 + P->m1 - pj_mlfn(lp.phi, E = sin(lp.phi), c = cos(lp.phi), P->en); E = c * lp.lam / (rh * sqrt(1. - P->es * E * E)); xy.x = rh * sin(E); xy.y = P->am1 - rh * cos(E); return (xy); } FORWARD(s_forward); /* spheroid */ double E, rh; rh = P->cphi1 + P->phi1 - lp.phi; if (fabs(rh) > EPS10) { xy.x = rh * sin(E = lp.lam * cos(lp.phi) / rh); xy.y = P->cphi1 - rh * cos(E); } else xy.x = xy.y = 0.; return (xy); } INVERSE(s_inverse); /* spheroid */ double rh; rh = hypot(xy.x, xy.y = P->cphi1 - xy.y); lp.phi = P->cphi1 + P->phi1 - rh; if (fabs(lp.phi) > HALFPI) I_ERROR; if (fabs(fabs(lp.phi) - HALFPI) <= EPS10) lp.lam = 0.; else lp.lam = rh * atan2(xy.x, xy.y) / cos(lp.phi); return (lp); } INVERSE(e_inverse); /* ellipsoid */ double s, rh; rh = hypot(xy.x, xy.y = P->am1 - xy.y); lp.phi = pj_inv_mlfn(P->am1 + P->m1 - rh, P->es, P->en); if ((s = fabs(lp.phi)) < HALFPI) { s = sin(lp.phi); lp.lam = rh * atan2(xy.x, xy.y) * sqrt(1. - P->es * s * s) / cos(lp.phi); } else if (fabs(s - HALFPI) <= EPS10) lp.lam = 0.; else I_ERROR; return (lp); } FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } } ENTRY1(bonne, en) double c; P->phi1 = pj_param(P->params, "rlat_1").f; if (fabs(P->phi1) < EPS10) E_ERROR(-23); if (P->es) { P->en = pj_enfn(P->es); P->m1 = pj_mlfn(P->phi1, P->am1 = sin(P->phi1), c = cos(P->phi1), P->en); P->am1 = c / (sqrt(1. - P->es * P->am1 * P->am1) * P->am1); P->inv = e_inverse; P->fwd = e_forward; } else { if (fabs(P->phi1) + EPS10 >= HALFPI) P->cphi1 = 0.; else P->cphi1 = 1. / tan(P->phi1); P->inv = s_inverse; P->fwd = s_forward; } ENDENTRY(P) therion/extern/proj4/PJ_cass.c0000644000076400010400000000375711137333514017333 0ustar userAdministrators#define PROJ_PARMS__ \ double m0; \ double n; \ double t; \ double a1; \ double c; \ double r; \ double dd; \ double d2; \ double a2; \ double tn; \ double *en; #define PJ_LIB__ # include PROJ_HEAD(cass, "Cassini") "\n\tCyl, Sph&Ell"; # define EPS10 1e-10 # define C1 .16666666666666666666 # define C2 .00833333333333333333 # define C3 .04166666666666666666 # define C4 .33333333333333333333 # define C5 .06666666666666666666 FORWARD(e_forward); /* ellipsoid */ xy.y = pj_mlfn(lp.phi, P->n = sin(lp.phi), P->c = cos(lp.phi), P->en); P->n = 1./sqrt(1. - P->es * P->n * P->n); P->tn = tan(lp.phi); P->t = P->tn * P->tn; P->a1 = lp.lam * P->c; P->c *= P->es * P->c / (1 - P->es); P->a2 = P->a1 * P->a1; xy.x = P->n * P->a1 * (1. - P->a2 * P->t * (C1 - (8. - P->t + 8. * P->c) * P->a2 * C2)); xy.y -= P->m0 - P->n * P->tn * P->a2 * (.5 + (5. - P->t + 6. * P->c) * P->a2 * C3); return (xy); } FORWARD(s_forward); /* spheroid */ xy.x = asin(cos(lp.phi) * sin(lp.lam)); xy.y = atan2(tan(lp.phi) , cos(lp.lam)) - P->phi0; return (xy); } INVERSE(e_inverse); /* ellipsoid */ double ph1; ph1 = pj_inv_mlfn(P->m0 + xy.y, P->es, P->en); P->tn = tan(ph1); P->t = P->tn * P->tn; P->n = sin(ph1); P->r = 1. / (1. - P->es * P->n * P->n); P->n = sqrt(P->r); P->r *= (1. - P->es) * P->n; P->dd = xy.x / P->n; P->d2 = P->dd * P->dd; lp.phi = ph1 - (P->n * P->tn / P->r) * P->d2 * (.5 - (1. + 3. * P->t) * P->d2 * C3); lp.lam = P->dd * (1. + P->t * P->d2 * (-C4 + (1. + 3. * P->t) * P->d2 * C5)) / cos(ph1); return (lp); } INVERSE(s_inverse); /* spheroid */ lp.phi = asin(sin(P->dd = xy.y + P->phi0) * cos(xy.x)); lp.lam = atan2(tan(xy.x), cos(P->dd)); return (lp); } FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } } ENTRY1(cass, en) if (P->es) { if (!(P->en = pj_enfn(P->es))) E_ERROR_0; P->m0 = pj_mlfn(P->phi0, sin(P->phi0), cos(P->phi0), P->en); P->inv = e_inverse; P->fwd = e_forward; } else { P->inv = s_inverse; P->fwd = s_forward; } ENDENTRY(P) therion/extern/proj4/PJ_cc.c0000644000076400010400000000074311137333516016761 0ustar userAdministrators#define PROJ_PARMS__ \ double ap; #define PJ_LIB__ #include PROJ_HEAD(cc, "Central Cylindrical") "\n\tCyl, Sph"; #define EPS10 1.e-10 FORWARD(s_forward); /* spheroid */ if (fabs(fabs(lp.phi) - HALFPI) <= EPS10) F_ERROR; xy.x = lp.lam; xy.y = tan(lp.phi); return (xy); } INVERSE(s_inverse); /* spheroid */ lp.phi = atan(xy.y); lp.lam = xy.x; return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(cc) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/PJ_cea.c0000644000076400010400000000245111137333520017115 0ustar userAdministrators#define PROJ_PARMS__ \ double qp; \ double *apa; #define PJ_LIB__ # include PROJ_HEAD(cea, "Equal Area Cylindrical") "\n\tCyl, Sph&Ell\n\tlat_ts="; # define EPS 1e-10 FORWARD(e_forward); /* spheroid */ xy.x = P->k0 * lp.lam; xy.y = .5 * pj_qsfn(sin(lp.phi), P->e, P->one_es) / P->k0; return (xy); } FORWARD(s_forward); /* spheroid */ xy.x = P->k0 * lp.lam; xy.y = sin(lp.phi) / P->k0; return (xy); } INVERSE(e_inverse); /* spheroid */ lp.phi = pj_authlat(asin( 2. * xy.y * P->k0 / P->qp), P->apa); lp.lam = xy.x / P->k0; return (lp); } INVERSE(s_inverse); /* spheroid */ double t; if ((t = fabs(xy.y *= P->k0)) - EPS <= 1.) { if (t >= 1.) lp.phi = xy.y < 0. ? -HALFPI : HALFPI; else lp.phi = asin(xy.y); lp.lam = xy.x / P->k0; } else I_ERROR; return (lp); } FREEUP; if (P) { if (P->apa) pj_dalloc(P->apa); pj_dalloc(P); } } ENTRY1(cea, apa) double t; if (pj_param(P->params, "tlat_ts").i && (P->k0 = cos(t = pj_param(P->params, "rlat_ts").f)) < 0.) E_ERROR(-24) else t = 0.; if (P->es) { t = sin(t); P->k0 /= sqrt(1. - P->es * t * t); P->e = sqrt(P->es); if (!(P->apa = pj_authset(P->es))) E_ERROR_0; P->qp = pj_qsfn(1., P->e, P->one_es); P->inv = e_inverse; P->fwd = e_forward; } else { P->inv = s_inverse; P->fwd = s_forward; } ENDENTRY(P) therion/extern/proj4/PJ_chamb.c0000644000076400010400000000633411137333524017447 0ustar userAdministratorstypedef struct { double r, Az; } VECT; #define PROJ_PARMS__ \ struct { /* control point data */ \ double phi, lam; \ double cosphi, sinphi; \ VECT v; \ XY p; \ double Az; \ } c[3]; \ XY p; \ double beta_0, beta_1, beta_2; #define PJ_LIB__ #include PROJ_HEAD(chamb, "Chamberlin Trimetric") "\n\tMisc Sph, no inv." "\n\tlat_1= lon_1= lat_2= lon_2= lat_3= lon_3="; #include #define THIRD 0.333333333333333333 #define TOL 1e-9 static VECT /* distance and azimuth from point 1 to point 2 */ vect(double dphi, double c1, double s1, double c2, double s2, double dlam) { VECT v; double cdl, dp, dl; cdl = cos(dlam); if (fabs(dphi) > 1. || fabs(dlam) > 1.) v.r = aacos(s1 * s2 + c1 * c2 * cdl); else { /* more accurate for smaller distances */ dp = sin(.5 * dphi); dl = sin(.5 * dlam); v.r = 2. * aasin(sqrt(dp * dp + c1 * c2 * dl * dl)); } if (fabs(v.r) > TOL) v.Az = atan2(c2 * sin(dlam), c1 * s2 - s1 * c2 * cdl); else v.r = v.Az = 0.; return v; } static double /* law of cosines */ lc(double b,double c,double a) { return aacos(.5 * (b * b + c * c - a * a) / (b * c)); } FORWARD(s_forward); /* spheroid */ double sinphi, cosphi, a; VECT v[3]; int i, j; sinphi = sin(lp.phi); cosphi = cos(lp.phi); for (i = 0; i < 3; ++i) { /* dist/azimiths from control */ v[i] = vect(lp.phi - P->c[i].phi, P->c[i].cosphi, P->c[i].sinphi, cosphi, sinphi, lp.lam - P->c[i].lam); if ( ! v[i].r) break; v[i].Az = adjlon(v[i].Az - P->c[i].v.Az); } if (i < 3) /* current point at control point */ xy = P->c[i].p; else { /* point mean of intersepts */ xy = P->p; for (i = 0; i < 3; ++i) { j = i == 2 ? 0 : i + 1; a = lc(P->c[i].v.r, v[i].r, v[j].r); if (v[i].Az < 0.) a = -a; if (! i) { /* coord comp unique to each arc */ xy.x += v[i].r * cos(a); xy.y -= v[i].r * sin(a); } else if (i == 1) { a = P->beta_1 - a; xy.x -= v[i].r * cos(a); xy.y -= v[i].r * sin(a); } else { a = P->beta_2 - a; xy.x += v[i].r * cos(a); xy.y += v[i].r * sin(a); } } xy.x *= THIRD; /* mean of arc intercepts */ xy.y *= THIRD; } return xy; } FREEUP; if (P) pj_dalloc(P); } ENTRY0(chamb) int i, j; char line[10]; for (i = 0; i < 3; ++i) { /* get control point locations */ (void)sprintf(line, "rlat_%d", i+1); P->c[i].phi = pj_param(P->params, line).f; (void)sprintf(line, "rlon_%d", i+1); P->c[i].lam = pj_param(P->params, line).f; P->c[i].lam = adjlon(P->c[i].lam - P->lam0); P->c[i].cosphi = cos(P->c[i].phi); P->c[i].sinphi = sin(P->c[i].phi); } for (i = 0; i < 3; ++i) { /* inter ctl pt. distances and azimuths */ j = i == 2 ? 0 : i + 1; P->c[i].v = vect(P->c[j].phi - P->c[i].phi, P->c[i].cosphi, P->c[i].sinphi, P->c[j].cosphi, P->c[j].sinphi, P->c[j].lam - P->c[i].lam); if (! P->c[i].v.r) E_ERROR(-25); /* co-linearity problem ignored for now */ } P->beta_0 = lc(P->c[0].v.r, P->c[2].v.r, P->c[1].v.r); P->beta_1 = lc(P->c[0].v.r, P->c[1].v.r, P->c[2].v.r); P->beta_2 = PI - P->beta_0; P->p.y = 2. * (P->c[0].p.y = P->c[1].p.y = P->c[2].v.r * sin(P->beta_0)); P->c[2].p.y = 0.; P->c[0].p.x = - (P->c[1].p.x = 0.5 * P->c[0].v.r); P->p.x = P->c[2].p.x = P->c[0].p.x + P->c[2].v.r * cos(P->beta_0); P->es = 0.; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/PJ_collg.c0000644000076400010400000000146011137333526017472 0ustar userAdministrators#define PJ_LIB__ # include PROJ_HEAD(collg, "Collignon") "\n\tPCyl, Sph."; #define FXC 1.12837916709551257390 #define FYC 1.77245385090551602729 #define ONEEPS 1.0000001 FORWARD(s_forward); /* spheroid */ if ((xy.y = 1. - sin(lp.phi)) <= 0.) xy.y = 0.; else xy.y = sqrt(xy.y); xy.x = FXC * lp.lam * xy.y; xy.y = FYC * (1. - xy.y); return (xy); } INVERSE(s_inverse); /* spheroid */ lp.phi = xy.y / FYC - 1.; if (fabs(lp.phi = 1. - lp.phi * lp.phi) < 1.) lp.phi = asin(lp.phi); else if (fabs(lp.phi) > ONEEPS) I_ERROR else lp.phi = lp.phi < 0. ? -HALFPI : HALFPI; if ((lp.lam = 1. - sin(lp.phi)) <= 0.) lp.lam = 0.; else lp.lam = xy.x / (FXC * sqrt(lp.lam)); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(collg) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/PJ_crast.c0000644000076400010400000000126511137333530017504 0ustar userAdministrators#define PJ_LIB__ # include PROJ_HEAD(crast, "Craster Parabolic (Putnins P4)") "\n\tPCyl., Sph."; #define XM 0.97720502380583984317 #define RXM 1.02332670794648848847 #define YM 3.06998012383946546542 #define RYM 0.32573500793527994772 #define THIRD 0.333333333333333333 FORWARD(s_forward); /* spheroid */ lp.phi *= THIRD; xy.x = XM * lp.lam * (2. * cos(lp.phi + lp.phi) - 1.); xy.y = YM * sin(lp.phi); return (xy); } INVERSE(s_inverse); /* spheroid */ lp.phi = 3. * asin(xy.y * RYM); lp.lam = xy.x * RXM / (2. * cos((lp.phi + lp.phi) * THIRD) - 1); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(crast) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/pj_datums.c0000644000076400010400000000734011165201474017767 0ustar userAdministrators/****************************************************************************** * $Id: pj_datums.c 1558 2009-04-02 18:25:58Z warmerdam $ * * Project: PROJ.4 * Purpose: Built in datum list. * Author: Frank Warmerdam, warmerda@home.com * ****************************************************************************** * Copyright (c) 2000, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #define PJ_DATUMS__ #include /* * The ellipse code must match one from pj_ellps.c. The datum id should * be kept to 12 characters or less if possible. Use the official OGC * datum name for the comments if available. */ C_NAMESPACE_VAR struct PJ_DATUMS pj_datums[] = { /* id definition ellipse comments */ /* -- ---------- ------- -------- */ "WGS84", "towgs84=0,0,0", "WGS84", "", "GGRS87", "towgs84=-199.87,74.79,246.62", "GRS80", "Greek_Geodetic_Reference_System_1987", "NAD83", "towgs84=0,0,0", "GRS80", "North_American_Datum_1983", "NAD27", "nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat", "clrk66", "North_American_Datum_1927", "potsdam", "towgs84=606.0,23.0,413.0", "bessel", "Potsdam Rauenberg 1950 DHDN", "carthage", "towgs84=-263.0,6.0,431.0", "clark80", "Carthage 1934 Tunisia", "hermannskogel", "towgs84=653.0,-212.0,449.0", "bessel", "Hermannskogel", "ire65", "towgs84=482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15", "mod_airy", "Ireland 1965", "nzgd49", "towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993", "intl", "New Zealand Geodetic Datum 1949", "OSGB36", "towgs84=446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894", "airy", "Airy 1830", NULL, NULL, NULL, NULL }; struct PJ_DATUMS *pj_get_datums_ref() { return pj_datums; } C_NAMESPACE_VAR struct PJ_PRIME_MERIDIANS pj_prime_meridians[] = { /* id definition */ /* -- ---------- */ "greenwich", "0dE", "lisbon", "9d07'54.862\"W", "paris", "2d20'14.025\"E", "bogota", "74d04'51.3\"W", "madrid", "3d41'16.58\"W", "rome", "12d27'8.4\"E", "bern", "7d26'22.5\"E", "jakarta", "106d48'27.79\"E", "ferro", "17d40'W", "brussels", "4d22'4.71\"E", "stockholm", "18d3'29.8\"E", "athens", "23d42'58.815\"E", "oslo", "10d43'22.5\"E", NULL, NULL }; struct PJ_PRIME_MERIDIANS *pj_get_prime_meridians_ref() { return pj_prime_meridians; } therion/extern/proj4/pj_datum_set.c0000644000076400010400000001314211130502664020451 0ustar userAdministrators/****************************************************************************** * $Id: pj_datum_set.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Apply datum definition to PJ structure from initialization string. * Author: Frank Warmerdam, warmerda@home.com * ****************************************************************************** * Copyright (c) 2000, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #include #include /* SEC_TO_RAD = Pi/180/3600 */ #define SEC_TO_RAD 4.84813681109535993589914102357e-6 /************************************************************************/ /* pj_datum_set() */ /************************************************************************/ int pj_datum_set(paralist *pl, PJ *projdef) { const char *name, *towgs84, *nadgrids; projdef->datum_type = PJD_UNKNOWN; /* -------------------------------------------------------------------- */ /* Is there a datum definition in the parameters list? If so, */ /* add the defining values to the parameter list. Note that */ /* this will append the ellipse definition as well as the */ /* towgs84= and related parameters. It should also be pointed */ /* out that the addition is permanent rather than temporary */ /* like most other keyword expansion so that the ellipse */ /* definition will last into the pj_ell_set() function called */ /* after this one. */ /* -------------------------------------------------------------------- */ if( (name = pj_param(pl,"sdatum").s) != NULL ) { paralist *curr; const char *s; int i; /* find the end of the list, so we can add to it */ for (curr = pl; curr && curr->next ; curr = curr->next) {} /* find the datum definition */ for (i = 0; (s = pj_datums[i].id) && strcmp(name, s) ; ++i) {} if (!s) { pj_errno = -9; return 1; } if( pj_datums[i].ellipse_id && strlen(pj_datums[i].ellipse_id) > 0 ) { char entry[100]; strcpy( entry, "ellps=" ); strncat( entry, pj_datums[i].ellipse_id, 80 ); curr = curr->next = pj_mkparam(entry); } if( pj_datums[i].defn && strlen(pj_datums[i].defn) > 0 ) curr = curr->next = pj_mkparam(pj_datums[i].defn); } /* -------------------------------------------------------------------- */ /* Check for nadgrids parameter. */ /* -------------------------------------------------------------------- */ if( (nadgrids = pj_param(pl,"snadgrids").s) != NULL ) { /* We don't actually save the value separately. It will continue to exist int he param list for use in pj_apply_gridshift.c */ projdef->datum_type = PJD_GRIDSHIFT; } /* -------------------------------------------------------------------- */ /* Check for towgs84 parameter. */ /* -------------------------------------------------------------------- */ else if( (towgs84 = pj_param(pl,"stowgs84").s) != NULL ) { int parm_count = 0; const char *s; memset( projdef->datum_params, 0, sizeof(double) * 7); /* parse out the parameters */ s = towgs84; for( s = towgs84; *s != '\0' && parm_count < 7; ) { projdef->datum_params[parm_count++] = atof(s); while( *s != '\0' && *s != ',' ) s++; if( *s == ',' ) s++; } if( projdef->datum_params[3] != 0.0 || projdef->datum_params[4] != 0.0 || projdef->datum_params[5] != 0.0 || projdef->datum_params[6] != 0.0 ) { projdef->datum_type = PJD_7PARAM; /* transform from arc seconds to radians */ projdef->datum_params[3] *= SEC_TO_RAD; projdef->datum_params[4] *= SEC_TO_RAD; projdef->datum_params[5] *= SEC_TO_RAD; /* transform from parts per million to scaling factor */ projdef->datum_params[6] = (projdef->datum_params[6]/1000000.0) + 1; } else projdef->datum_type = PJD_3PARAM; /* Note that pj_init() will later switch datum_type to PJD_WGS84 if shifts are all zero, and ellipsoid is WGS84 or GRS80 */ } return 0; } therion/extern/proj4/PJ_denoy.c0000644000076400010400000000103511137333532017503 0ustar userAdministrators#define PJ_LIB__ #include PROJ_HEAD(denoy, "Denoyer Semi-Elliptical") "\n\tPCyl., no inv., Sph."; #define C0 0.95 #define C1 -.08333333333333333333 #define C3 .00166666666666666666 #define D1 0.9 #define D5 0.03 FORWARD(s_forward); /* spheroid */ xy.y = lp.phi; xy.x = lp.lam; lp.lam = fabs(lp.lam); xy.x *= cos((C0 + lp.lam * (C1 + lp.lam * lp.lam * C3)) * (lp.phi * (D1 + D5 * lp.phi * lp.phi * lp.phi * lp.phi))); return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(denoy) P->es = 0.; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/pj_deriv.c0000644000076400010400000000156011137333534017603 0ustar userAdministrators/* dervative of (*P->fwd) projection */ #define PJ_LIB__ #include "projects.h" int pj_deriv(LP lp, double h, PJ *P, struct DERIVS *der) { XY t; lp.lam += h; lp.phi += h; if (fabs(lp.phi) > HALFPI) return 1; h += h; t = (*P->fwd)(lp, P); if (t.x == HUGE_VAL) return 1; der->x_l = t.x; der->y_p = t.y; der->x_p = -t.x; der->y_l = -t.y; lp.phi -= h; if (fabs(lp.phi) > HALFPI) return 1; t = (*P->fwd)(lp, P); if (t.x == HUGE_VAL) return 1; der->x_l += t.x; der->y_p -= t.y; der->x_p += t.x; der->y_l -= t.y; lp.lam -= h; t = (*P->fwd)(lp, P); if (t.x == HUGE_VAL) return 1; der->x_l -= t.x; der->y_p -= t.y; der->x_p += t.x; der->y_l += t.y; lp.phi += h; t = (*P->fwd)(lp, P); if (t.x == HUGE_VAL) return 1; der->x_l -= t.x; der->y_p += t.y; der->x_p -= t.x; der->y_l += t.y; der->x_l /= (h += h); der->y_p /= h; der->x_p /= h; der->y_l /= h; return 0; } therion/extern/proj4/PJ_eck1.c0000644000076400010400000000076711137333536017227 0ustar userAdministrators#define PJ_LIB__ #include PROJ_HEAD(eck1, "Eckert I") "\n\tPCyl., Sph."; #define FC .92131773192356127802 #define RP .31830988618379067154 FORWARD(s_forward); /* spheroid */ xy.x = FC * lp.lam * (1. - RP * fabs(lp.phi)); xy.y = FC * lp.phi; return (xy); } INVERSE(s_inverse); /* spheroid */ lp.phi = xy.y / FC; lp.lam = xy.x / (FC * (1. - RP * fabs(lp.phi))); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(eck1) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/PJ_eck2.c0000644000076400010400000000150711137333542017216 0ustar userAdministrators#define PJ_LIB__ # include PROJ_HEAD(eck2, "Eckert II") "\n\tPCyl. Sph."; #define FXC 0.46065886596178063902 #define FYC 1.44720250911653531871 #define C13 0.33333333333333333333 #define ONEEPS 1.0000001 FORWARD(s_forward); /* spheroid */ xy.x = FXC * lp.lam * (xy.y = sqrt(4. - 3. * sin(fabs(lp.phi)))); xy.y = FYC * (2. - xy.y); if ( lp.phi < 0.) xy.y = -xy.y; return (xy); } INVERSE(s_inverse); /* spheroid */ lp.lam = xy.x / (FXC * ( lp.phi = 2. - fabs(xy.y) / FYC) ); lp.phi = (4. - lp.phi * lp.phi) * C13; if (fabs(lp.phi) >= 1.) { if (fabs(lp.phi) > ONEEPS) I_ERROR else lp.phi = lp.phi < 0. ? -HALFPI : HALFPI; } else lp.phi = asin(lp.phi); if (xy.y < 0) lp.phi = -lp.phi; return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(eck2); P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/PJ_eck3.c0000644000076400010400000000231011137333544017212 0ustar userAdministrators#define PROJ_PARMS__ \ double C_x, C_y, A, B; #define PJ_LIB__ #include PROJ_HEAD(eck3, "Eckert III") "\n\tPCyl, Sph."; PROJ_HEAD(putp1, "Putnins P1") "\n\tPCyl, Sph."; PROJ_HEAD(wag6, "Wagner VI") "\n\tPCyl, Sph."; PROJ_HEAD(kav7, "Kavraisky VII") "\n\tPCyl, Sph."; FORWARD(s_forward); /* spheroid */ xy.y = P->C_y * lp.phi; xy.x = P->C_x * lp.lam * (P->A + asqrt(1. - P->B * lp.phi * lp.phi)); return (xy); } INVERSE(s_inverse); /* spheroid */ lp.phi = xy.y / P->C_y; lp.lam = xy.x / (P->C_x * (P->A + asqrt(1. - P->B * lp.phi * lp.phi))); return (lp); } FREEUP; if (P) pj_dalloc(P); } static PJ * setup(PJ *P) { P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; return P; } ENTRY0(eck3) P->C_x = .42223820031577120149; P->C_y = .84447640063154240298; P->A = 1.; P->B = 0.4052847345693510857755; ENDENTRY(setup(P)) ENTRY0(kav7) P->C_x = 0.2632401569273184856851; P->C_x = 0.8660254037844; P->C_y = 1.; P->A = 0.; P->B = 0.30396355092701331433; ENDENTRY(setup(P)) ENTRY0(wag6); P->C_x = P->C_y = 0.94745; P->A = 0.; P->B = 0.30396355092701331433; ENDENTRY(setup(P)) ENTRY0(putp1); P->C_x = 1.89490; P->C_y = 0.94745; P->A = -0.5; P->B = 0.30396355092701331433; ENDENTRY(setup(P)) therion/extern/proj4/PJ_eck4.c0000644000076400010400000000213711137333550017217 0ustar userAdministrators#define PJ_LIB__ #include PROJ_HEAD(eck4, "Eckert IV") "\n\tPCyl, Sph."; #define C_x .42223820031577120149 #define C_y 1.32650042817700232218 #define RC_y .75386330736002178205 #define C_p 3.57079632679489661922 #define RC_p .28004957675577868795 #define EPS 1e-7 #define NITER 6 FORWARD(s_forward); /* spheroid */ double p, V, s, c; int i; p = C_p * sin(lp.phi); V = lp.phi * lp.phi; lp.phi *= 0.895168 + V * ( 0.0218849 + V * 0.00826809 ); for (i = NITER; i ; --i) { c = cos(lp.phi); s = sin(lp.phi); lp.phi -= V = (lp.phi + s * (c + 2.) - p) / (1. + c * (c + 2.) - s * s); if (fabs(V) < EPS) break; } if (!i) { xy.x = C_x * lp.lam; xy.y = lp.phi < 0. ? -C_y : C_y; } else { xy.x = C_x * lp.lam * (1. + cos(lp.phi)); xy.y = C_y * sin(lp.phi); } return (xy); } INVERSE(s_inverse); /* spheroid */ double c; lp.phi = aasin(xy.y / C_y); lp.lam = xy.x / (C_x * (1. + (c = cos(lp.phi)))); lp.phi = aasin((lp.phi + sin(lp.phi) * (c + 2.)) / C_p); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(eck4); P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/PJ_eck5.c0000644000076400010400000000105311137333552017216 0ustar userAdministrators#define PJ_LIB__ # include PROJ_HEAD(eck5, "Eckert V") "\n\tPCyl, Sph."; #define XF 0.44101277172455148219 #define RXF 2.26750802723822639137 #define YF 0.88202554344910296438 #define RYF 1.13375401361911319568 FORWARD(s_forward); /* spheroid */ xy.x = XF * (1. + cos(lp.phi)) * lp.lam; xy.y = YF * lp.phi; return (xy); } INVERSE(s_inverse); /* spheroid */ lp.lam = RXF * xy.x / (1. + cos( lp.phi = RYF * xy.y)); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(eck5); P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/pj_ellps.c0000644000076400010400000000530111165201032017572 0ustar userAdministrators/* definition of standard geoids */ #define PJ_ELLPS__ #include "projects.h" C_NAMESPACE_VAR struct PJ_ELLPS pj_ellps[] = { "MERIT", "a=6378137.0", "rf=298.257", "MERIT 1983", "SGS85", "a=6378136.0", "rf=298.257", "Soviet Geodetic System 85", "GRS80", "a=6378137.0", "rf=298.257222101", "GRS 1980(IUGG, 1980)", "IAU76", "a=6378140.0", "rf=298.257", "IAU 1976", "airy", "a=6377563.396", "b=6356256.910", "Airy 1830", "APL4.9", "a=6378137.0.", "rf=298.25", "Appl. Physics. 1965", "NWL9D", "a=6378145.0.", "rf=298.25", "Naval Weapons Lab., 1965", "mod_airy", "a=6377340.189", "b=6356034.446", "Modified Airy", "andrae", "a=6377104.43", "rf=300.0", "Andrae 1876 (Den., Iclnd.)", "aust_SA", "a=6378160.0", "rf=298.25", "Australian Natl & S. Amer. 1969", "GRS67", "a=6378160.0", "rf=298.2471674270", "GRS 67(IUGG 1967)", "bessel", "a=6377397.155", "rf=299.1528128", "Bessel 1841", "bess_nam", "a=6377483.865", "rf=299.1528128", "Bessel 1841 (Namibia)", "clrk66", "a=6378206.4", "b=6356583.8", "Clarke 1866", "clrk80", "a=6378249.145", "rf=293.4663", "Clarke 1880 mod.", "CPM", "a=6375738.7", "rf=334.29", "Comm. des Poids et Mesures 1799", "delmbr", "a=6376428.", "rf=311.5", "Delambre 1810 (Belgium)", "engelis", "a=6378136.05", "rf=298.2566", "Engelis 1985", "evrst30", "a=6377276.345", "rf=300.8017", "Everest 1830", "evrst48", "a=6377304.063", "rf=300.8017", "Everest 1948", "evrst56", "a=6377301.243", "rf=300.8017", "Everest 1956", "evrst69", "a=6377295.664", "rf=300.8017", "Everest 1969", "evrstSS", "a=6377298.556", "rf=300.8017", "Everest (Sabah & Sarawak)", "fschr60", "a=6378166.", "rf=298.3", "Fischer (Mercury Datum) 1960", "fschr60m", "a=6378155.", "rf=298.3", "Modified Fischer 1960", "fschr68", "a=6378150.", "rf=298.3", "Fischer 1968", "helmert", "a=6378200.", "rf=298.3", "Helmert 1906", "hough", "a=6378270.0", "rf=297.", "Hough", "intl", "a=6378388.0", "rf=297.", "International 1909 (Hayford)", "krass", "a=6378245.0", "rf=298.3", "Krassovsky, 1942", "kaula", "a=6378163.", "rf=298.24", "Kaula 1961", "lerch", "a=6378139.", "rf=298.257", "Lerch 1979", "mprts", "a=6397300.", "rf=191.", "Maupertius 1738", "new_intl", "a=6378157.5", "b=6356772.2", "New International 1967", "plessis", "a=6376523.", "b=6355863.", "Plessis 1817 (France)", "SEasia", "a=6378155.0", "b=6356773.3205", "Southeast Asia", "walbeck", "a=6376896.0", "b=6355834.8467", "Walbeck", "WGS60", "a=6378165.0", "rf=298.3", "WGS 60", "WGS66", "a=6378145.0", "rf=298.25", "WGS 66", "WGS72", "a=6378135.0", "rf=298.26", "WGS 72", "WGS84", "a=6378137.0", "rf=298.257223563", "WGS 84", "sphere", "a=6370997.0", "b=6370997.0", "Normal Sphere (r=6370997)", 0,0,0,0 }; struct PJ_ELLPS *pj_get_ellps_ref() { return pj_ellps; } therion/extern/proj4/pj_ell_set.c0000644000076400010400000000621111137333556020123 0ustar userAdministrators/* set ellipsoid parameters a and es */ #include #include #define SIXTH .1666666666666666667 /* 1/6 */ #define RA4 .04722222222222222222 /* 17/360 */ #define RA6 .02215608465608465608 /* 67/3024 */ #define RV4 .06944444444444444444 /* 5/72 */ #define RV6 .04243827160493827160 /* 55/1296 */ int /* initialize geographic shape parameters */ pj_ell_set(paralist *pl, double *a, double *es) { int i; double b=0.0, e; char *name; paralist *start = 0, *curr; /* check for varying forms of ellipsoid input */ *a = *es = 0.; /* R takes precedence */ if (pj_param(pl, "tR").i) *a = pj_param(pl, "dR").f; else { /* probable elliptical figure */ /* check if ellps present and temporarily append its values to pl */ if (name = pj_param(pl, "sellps").s) { char *s; for (start = pl; start && start->next ; start = start->next) ; curr = start; for (i = 0; (s = pj_ellps[i].id) && strcmp(name, s) ; ++i) ; if (!s) { pj_errno = -9; return 1; } curr = curr->next = pj_mkparam(pj_ellps[i].major); curr = curr->next = pj_mkparam(pj_ellps[i].ell); } *a = pj_param(pl, "da").f; if (pj_param(pl, "tes").i) /* eccentricity squared */ *es = pj_param(pl, "des").f; else if (pj_param(pl, "te").i) { /* eccentricity */ e = pj_param(pl, "de").f; *es = e * e; } else if (pj_param(pl, "trf").i) { /* recip flattening */ *es = pj_param(pl, "drf").f; if (!*es) { pj_errno = -10; goto bomb; } *es = 1./ *es; *es = *es * (2. - *es); } else if (pj_param(pl, "tf").i) { /* flattening */ *es = pj_param(pl, "df").f; *es = *es * (2. - *es); } else if (pj_param(pl, "tb").i) { /* minor axis */ b = pj_param(pl, "db").f; *es = 1. - (b * b) / (*a * *a); } /* else *es == 0. and sphere of radius *a */ if (!b) b = *a * sqrt(1. - *es); /* following options turn ellipsoid into equivalent sphere */ if (pj_param(pl, "bR_A").i) { /* sphere--area of ellipsoid */ *a *= 1. - *es * (SIXTH + *es * (RA4 + *es * RA6)); *es = 0.; } else if (pj_param(pl, "bR_V").i) { /* sphere--vol. of ellipsoid */ *a *= 1. - *es * (SIXTH + *es * (RV4 + *es * RV6)); *es = 0.; } else if (pj_param(pl, "bR_a").i) { /* sphere--arithmetic mean */ *a = .5 * (*a + b); *es = 0.; } else if (pj_param(pl, "bR_g").i) { /* sphere--geometric mean */ *a = sqrt(*a * b); *es = 0.; } else if (pj_param(pl, "bR_h").i) { /* sphere--harmonic mean */ *a = 2. * *a * b / (*a + b); *es = 0.; } else if ((i = pj_param(pl, "tR_lat_a").i) || /* sphere--arith. */ pj_param(pl, "tR_lat_g").i) { /* or geom. mean at latitude */ double tmp; tmp = sin(pj_param(pl, i ? "rR_lat_a" : "rR_lat_g").f); if (fabs(tmp) > HALFPI) { pj_errno = -11; goto bomb; } tmp = 1. - *es * tmp * tmp; *a *= i ? .5 * (1. - *es + tmp) / ( tmp * sqrt(tmp)) : sqrt(1. - *es) / tmp; *es = 0.; } bomb: if (start) { /* clean up temporary extension of list */ pj_dalloc(start->next->next); pj_dalloc(start->next); start->next = 0; } if (pj_errno) return 1; } /* some remaining checks */ if (*es < 0.) { pj_errno = -12; return 1; } if (*a <= 0.) { pj_errno = -13; return 1; } return 0; } therion/extern/proj4/PJ_eqc.c0000644000076400010400000000105411137333562017141 0ustar userAdministrators#define PROJ_PARMS__ \ double rc; #define PJ_LIB__ # include PROJ_HEAD(eqc, "Equidistant Cylindrical (Plate Caree)") "\n\tCyl, Sph\n\tlat_ts=[, lat_0=0]"; FORWARD(s_forward); /* spheroid */ xy.x = P->rc * lp.lam; xy.y = lp.phi - P->phi0; return (xy); } INVERSE(s_inverse); /* spheroid */ lp.lam = xy.x / P->rc; lp.phi = xy.y + P->phi0; return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(eqc) if ((P->rc = cos(pj_param(P->params, "rlat_ts").f)) <= 0.) E_ERROR(-24); P->inv = s_inverse; P->fwd = s_forward; P->es = 0.; ENDENTRY(P) therion/extern/proj4/PJ_eqdc.c0000644000076400010400000000425711137333564017317 0ustar userAdministrators#define PROJ_PARMS__ \ double phi1; \ double phi2; \ double n; \ double rho; \ double rho0; \ double c; \ double *en; \ int ellips; #define PJ_LIB__ #include PROJ_HEAD(eqdc, "Equidistant Conic") "\n\tConic, Sph&Ell\n\tlat_1= lat_2="; # define EPS10 1.e-10 FORWARD(e_forward); /* sphere & ellipsoid */ P->rho = P->c - (P->ellips ? pj_mlfn(lp.phi, sin(lp.phi), cos(lp.phi), P->en) : lp.phi); xy.x = P->rho * sin( lp.lam *= P->n ); xy.y = P->rho0 - P->rho * cos(lp.lam); return (xy); } INVERSE(e_inverse); /* sphere & ellipsoid */ if ((P->rho = hypot(xy.x, xy.y = P->rho0 - xy.y)) != 0.0 ) { if (P->n < 0.) { P->rho = -P->rho; xy.x = -xy.x; xy.y = -xy.y; } lp.phi = P->c - P->rho; if (P->ellips) lp.phi = pj_inv_mlfn(lp.phi, P->es, P->en); lp.lam = atan2(xy.x, xy.y) / P->n; } else { lp.lam = 0.; lp.phi = P->n > 0. ? HALFPI : - HALFPI; } return (lp); } SPECIAL(fac) { double sinphi, cosphi; sinphi = sin(lp.phi); cosphi = cos(lp.phi); fac->code |= IS_ANAL_HK; fac->h = 1.; fac->k = P->n * (P->c - (P->ellips ? pj_mlfn(lp.phi, sinphi, cosphi, P->en) : lp.phi)) / pj_msfn(sinphi, cosphi, P->es); } FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } } ENTRY1(eqdc, en) double cosphi, sinphi; int secant; P->phi1 = pj_param(P->params, "rlat_1").f; P->phi2 = pj_param(P->params, "rlat_2").f; if (fabs(P->phi1 + P->phi2) < EPS10) E_ERROR(-21); if (!(P->en = pj_enfn(P->es))) E_ERROR_0; P->n = sinphi = sin(P->phi1); cosphi = cos(P->phi1); secant = fabs(P->phi1 - P->phi2) >= EPS10; if( (P->ellips = (P->es > 0.)) ) { double ml1, m1; m1 = pj_msfn(sinphi, cosphi, P->es); ml1 = pj_mlfn(P->phi1, sinphi, cosphi, P->en); if (secant) { /* secant cone */ sinphi = sin(P->phi2); cosphi = cos(P->phi2); P->n = (m1 - pj_msfn(sinphi, cosphi, P->es)) / (pj_mlfn(P->phi2, sinphi, cosphi, P->en) - ml1); } P->c = ml1 + m1 / P->n; P->rho0 = P->c - pj_mlfn(P->phi0, sin(P->phi0), cos(P->phi0), P->en); } else { if (secant) P->n = (cosphi - cos(P->phi2)) / (P->phi2 - P->phi1); P->c = P->phi1 + cos(P->phi1) / P->n; P->rho0 = P->c - P->phi0; } P->inv = e_inverse; P->fwd = e_forward; P->spc = fac; ENDENTRY(P) therion/extern/proj4/pj_errno.c0000644000076400010400000000061511165201046017610 0ustar userAdministrators/* For full ANSI compliance of global variable */ #include C_NAMESPACE_VAR int pj_errno = 0; /************************************************************************/ /* pj_get_errno_ref() */ /************************************************************************/ int *pj_get_errno_ref() { return &pj_errno; } /* end */ therion/extern/proj4/pj_factors.c0000644000076400010400000000462511137333570020140 0ustar userAdministrators/* projection scale factors */ #define PJ_LIB__ #include #include #ifndef DEFAULT_H #define DEFAULT_H 1e-5 /* radian default for numeric h */ #endif #define EPS 1.0e-12 int pj_factors(LP lp, PJ *P, double h, struct FACTORS *fac) { struct DERIVS der; double cosphi, t, n, r; /* check for forward and latitude or longitude overange */ if ((t = fabs(lp.phi)-HALFPI) > EPS || fabs(lp.lam) > 10.) { pj_errno = -14; return 1; } else { /* proceed */ errno = pj_errno = 0; if (h < EPS) h = DEFAULT_H; if (fabs(lp.phi) > (HALFPI - h)) /* adjust to value around pi/2 where derived still exists*/ lp.phi = lp.phi < 0. ? (-HALFPI+h) : (HALFPI-h); else if (P->geoc) lp.phi = atan(P->rone_es * tan(lp.phi)); lp.lam -= P->lam0; /* compute del lp.lam */ if (!P->over) lp.lam = adjlon(lp.lam); /* adjust del longitude */ if (P->spc) /* get what projection analytic values */ P->spc(lp, P, fac); if (((fac->code & (IS_ANAL_XL_YL+IS_ANAL_XP_YP)) != (IS_ANAL_XL_YL+IS_ANAL_XP_YP)) && pj_deriv(lp, h, P, &der)) return 1; if (!(fac->code & IS_ANAL_XL_YL)) { fac->der.x_l = der.x_l; fac->der.y_l = der.y_l; } if (!(fac->code & IS_ANAL_XP_YP)) { fac->der.x_p = der.x_p; fac->der.y_p = der.y_p; } cosphi = cos(lp.phi); if (!(fac->code & IS_ANAL_HK)) { fac->h = hypot(fac->der.x_p, fac->der.y_p); fac->k = hypot(fac->der.x_l, fac->der.y_l) / cosphi; if (P->es) { t = sin(lp.phi); t = 1. - P->es * t * t; n = sqrt(t); fac->h *= t * n / P->one_es; fac->k *= n; r = t * t / P->one_es; } else r = 1.; } else if (P->es) { r = sin(lp.phi); r = 1. - P->es * r * r; r = r * r / P->one_es; } else r = 1.; /* convergence */ if (!(fac->code & IS_ANAL_CONV)) { fac->conv = - atan2(fac->der.y_l, fac->der.x_l); if (fac->code & IS_ANAL_XL_YL) fac->code |= IS_ANAL_CONV; } /* areal scale factor */ fac->s = (fac->der.y_p * fac->der.x_l - fac->der.x_p * fac->der.y_l) * r / cosphi; /* meridian-parallel angle theta prime */ fac->thetap = aasin(fac->s / (fac->h * fac->k)); /* Tissot ellips axis */ t = fac->k * fac->k + fac->h * fac->h; fac->a = sqrt(t + 2. * fac->s); t = (t = t - 2. * fac->s) <= 0. ? 0. : sqrt(t); fac->b = 0.5 * (fac->a - t); fac->a = 0.5 * (fac->a + t); /* omega */ fac->omega = 2. * aasin((fac->a - fac->b)/(fac->a + fac->b)); } return 0; } therion/extern/proj4/PJ_fahey.c0000644000076400010400000000103311137333572017463 0ustar userAdministrators#define PJ_LIB__ # include PROJ_HEAD(fahey, "Fahey") "\n\tPcyl, Sph."; #define TOL 1e-6 FORWARD(s_forward); /* spheroid */ xy.y = 1.819152 * ( xy.x = tan(0.5 * lp.phi) ); xy.x = 0.819152 * lp.lam * asqrt(1 - xy.x * xy.x); return (xy); } INVERSE(s_inverse); /* spheroid */ lp.phi = 2. * atan(xy.y /= 1.819152); lp.lam = fabs(xy.y = 1. - xy.y * xy.y) < TOL ? 0. : xy.x / (0.819152 * sqrt(xy.y)); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(fahey) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/PJ_fouc_s.c0000644000076400010400000000172511137333574017657 0ustar userAdministrators#define PROJ_PARMS__ \ double n, n1; #define PJ_LIB__ #include PROJ_HEAD(fouc_s, "Foucaut Sinusoidal") "\n\tPCyl., Sph."; #define MAX_ITER 10 #define LOOP_TOL 1e-7 FORWARD(s_forward); /* spheroid */ double t; t = cos(lp.phi); xy.x = lp.lam * t / (P->n + P->n1 * t); xy.y = P->n * lp.phi + P->n1 * sin(lp.phi); return (xy); } INVERSE(s_inverse); /* spheroid */ double V; int i; if (P->n) { lp.phi = xy.y; for (i = MAX_ITER; i ; --i) { lp.phi -= V = (P->n * lp.phi + P->n1 * sin(lp.phi) - xy.y ) / (P->n + P->n1 * cos(lp.phi)); if (fabs(V) < LOOP_TOL) break; } if (!i) lp.phi = xy.y < 0. ? -HALFPI : HALFPI; } else lp.phi = aasin(xy.y); V = cos(lp.phi); lp.lam = xy.x * (P->n + P->n1 * V) / V; return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(fouc_s) P->n = pj_param(P->params, "dn").f; if (P->n < 0. || P->n > 1.) E_ERROR(-99) P->n1 = 1. - P->n; P->es = 0; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/pj_fwd.c0000644000076400010400000000166311137333600017250 0ustar userAdministrators/* general forward projection */ #define PJ_LIB__ #include #include # define EPS 1.0e-12 XY /* forward projection entry */ pj_fwd(LP lp, PJ *P) { XY xy; double t; /* check for forward and latitude or longitude overange */ if ((t = fabs(lp.phi)-HALFPI) > EPS || fabs(lp.lam) > 10.) { xy.x = xy.y = HUGE_VAL; pj_errno = -14; } else { /* proceed with projection */ errno = pj_errno = 0; if (fabs(t) <= EPS) lp.phi = lp.phi < 0. ? -HALFPI : HALFPI; else if (P->geoc) lp.phi = atan(P->rone_es * tan(lp.phi)); lp.lam -= P->lam0; /* compute del lp.lam */ if (!P->over) lp.lam = adjlon(lp.lam); /* adjust del longitude */ xy = (*P->fwd)(lp, P); /* project */ if (pj_errno || (pj_errno = errno)) xy.x = xy.y = HUGE_VAL; /* adjust for major axis and easting/northings */ else { xy.x = P->fr_meter * (P->a * xy.x + P->x0); xy.y = P->fr_meter * (P->a * xy.y + P->y0); } } return xy; } therion/extern/proj4/PJ_gall.c0000644000076400010400000000105311137333602017302 0ustar userAdministrators#define PJ_LIB__ #include PROJ_HEAD(gall, "Gall (Gall Stereographic)") "\n\tCyl, Sph"; #define YF 1.70710678118654752440 #define XF 0.70710678118654752440 #define RYF 0.58578643762690495119 #define RXF 1.41421356237309504880 FORWARD(s_forward); /* spheroid */ xy.x = XF * lp.lam; xy.y = YF * tan(.5 * lp.phi); return (xy); } INVERSE(s_inverse); /* spheroid */ lp.lam = RXF * xy.x; lp.phi = 2. * atan(xy.y * RYF); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(gall) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/pj_gauss.c0000644000076400010400000000530111130502664017604 0ustar userAdministrators/* ** libproj -- library of cartographic projections ** ** Copyright (c) 2003 Gerald I. Evenden */ static const char LIBPROJ_ID[] = "$Id: pj_gauss.c 1504 2009-01-06 02:11:57Z warmerdam $"; /* ** Permission is hereby granted, free of charge, to any person obtaining ** a copy of this software and associated documentation files (the ** "Software"), to deal in the Software without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Software, and to ** permit persons to whom the Software is furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be ** included in all copies or substantial portions of the Software. ** ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #define PJ_LIB__ #include #define MAX_ITER 20 struct GAUSS { double C; double K; double e; double ratexp; }; #define EN ((struct GAUSS *)en) #define DEL_TOL 1e-14 static double srat(double esinp, double exp) { return(pow((1.-esinp)/(1.+esinp), exp)); } void * pj_gauss_ini(double e, double phi0, double *chi, double *rc) { double sphi, cphi, es; struct GAUSS *en; if ((en = (struct GAUSS *)malloc(sizeof(struct GAUSS))) == NULL) return (NULL); es = e * e; EN->e = e; sphi = sin(phi0); cphi = cos(phi0); cphi *= cphi; *rc = sqrt(1. - es) / (1. - es * sphi * sphi); EN->C = sqrt(1. + es * cphi * cphi / (1. - es)); *chi = asin(sphi / EN->C); EN->ratexp = 0.5 * EN->C * e; EN->K = tan(.5 * *chi + FORTPI) / ( pow(tan(.5 * phi0 + FORTPI), EN->C) * srat(EN->e * sphi, EN->ratexp) ); return ((void *)en); } LP pj_gauss(LP elp, const void *en) { LP slp; slp.phi = 2. * atan( EN->K * pow(tan(.5 * elp.phi + FORTPI), EN->C) * srat(EN->e * sin(elp.phi), EN->ratexp) ) - HALFPI; slp.lam = EN->C * (elp.lam); return(slp); } LP pj_inv_gauss(LP slp, const void *en) { LP elp; double num; int i; elp.lam = slp.lam / EN->C; num = pow(tan(.5 * slp.phi + FORTPI)/EN->K, 1./EN->C); for (i = MAX_ITER; i; --i) { elp.phi = 2. * atan(num * srat(EN->e * sin(slp.phi), -.5 * EN->e)) - HALFPI; if (fabs(elp.phi - slp.phi) < DEL_TOL) break; slp.phi = elp.phi; } /* convergence failed */ if (!i) pj_errno = -17; return (elp); } therion/extern/proj4/pj_geocent.c0000644000076400010400000000416411130502664020114 0ustar userAdministrators/****************************************************************************** * $Id: pj_geocent.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Stub projection for geocentric. The transformation isn't * really done here since this code is 2D. The real transformation * is handled by pj_transform.c. * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 2002, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #define PJ_LIB__ #include PJ_CVSID("$Id: pj_geocent.c 1504 2009-01-06 02:11:57Z warmerdam $"); PROJ_HEAD(geocent, "Geocentric") "\n\t"; FORWARD(forward); xy.x = lp.lam; xy.y = lp.phi; return xy; } INVERSE(inverse); lp.phi = xy.y; lp.lam = xy.x; return lp; } FREEUP; if (P) pj_dalloc(P); } ENTRY0(geocent) P->is_geocent = 1; P->x0 = 0.0; P->y0 = 0.0; P->inv = inverse; P->fwd = forward; ENDENTRY(P) therion/extern/proj4/PJ_geos.c0000644000076400010400000001150111130502664017316 0ustar userAdministrators/* ** libproj -- library of cartographic projections ** ** Copyright (c) 2004 Gerald I. Evenden */ static const char LIBPROJ_ID[] = "$Id: PJ_geos.c 1504 2009-01-06 02:11:57Z warmerdam $"; /* ** See also (section 4.4.3.2): ** http://www.eumetsat.int/en/area4/msg/news/us_doc/cgms_03_26.pdf ** ** Permission is hereby granted, free of charge, to any person obtaining ** a copy of this software and associated documentation files (the ** "Software"), to deal in the Software without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Software, and to ** permit persons to whom the Software is furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be ** included in all copies or substantial portions of the Software. ** ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #define PROJ_PARMS__ \ double h; \ double radius_p; \ double radius_p2; \ double radius_p_inv2; \ double radius_g; \ double radius_g_1; \ double C; #define PJ_LIB__ #include PROJ_HEAD(geos, "Geostationary Satellite View") "\n\tAzi, Sph&Ell\n\th="; FORWARD(s_forward); /* spheroid */ double Vx, Vy, Vz, tmp; /* Calculation of the three components of the vector from satellite to ** position on earth surface (lon,lat).*/ tmp = cos(lp.phi); Vx = cos (lp.lam) * tmp; Vy = sin (lp.lam) * tmp; Vz = sin (lp.phi); /* Check visibility.*/ if (((P->radius_g - Vx) * Vx - Vy * Vy - Vz * Vz) < 0.) F_ERROR; /* Calculation based on view angles from satellite.*/ tmp = P->radius_g - Vx; xy.x = P->radius_g_1 * atan(Vy / tmp); xy.y = P->radius_g_1 * atan(Vz / hypot(Vy, tmp)); return (xy); } FORWARD(e_forward); /* ellipsoid */ double r, Vx, Vy, Vz, tmp; /* Calculation of geocentric latitude. */ lp.phi = atan (P->radius_p2 * tan (lp.phi)); /* Calculation of the three components of the vector from satellite to ** position on earth surface (lon,lat).*/ r = (P->radius_p) / hypot(P->radius_p * cos (lp.phi), sin (lp.phi)); Vx = r * cos (lp.lam) * cos (lp.phi); Vy = r * sin (lp.lam) * cos (lp.phi); Vz = r * sin (lp.phi); /* Check visibility. */ if (((P->radius_g - Vx) * Vx - Vy * Vy - Vz * Vz * P->radius_p_inv2) < 0.) F_ERROR; /* Calculation based on view angles from satellite. */ tmp = P->radius_g - Vx; xy.x = P->radius_g_1 * atan (Vy / tmp); xy.y = P->radius_g_1 * atan (Vz / hypot (Vy, tmp)); return (xy); } INVERSE(s_inverse); /* spheroid */ double Vx, Vy, Vz, a, b, c, det, k; /* Setting three components of vector from satellite to position.*/ Vx = -1.0; Vy = tan (xy.x / (P->radius_g - 1.0)); Vz = tan (xy.y / (P->radius_g - 1.0)) * sqrt (1.0 + Vy * Vy); /* Calculation of terms in cubic equation and determinant.*/ a = Vy * Vy + Vz * Vz + Vx * Vx; b = 2 * P->radius_g * Vx; if ((det = (b * b) - 4 * a * P->C) < 0.) I_ERROR; /* Calculation of three components of vector from satellite to position.*/ k = (-b - sqrt(det)) / (2 * a); Vx = P->radius_g + k * Vx; Vy *= k; Vz *= k; /* Calculation of longitude and latitude.*/ lp.lam = atan2 (Vy, Vx); lp.phi = atan (Vz * cos (lp.lam) / Vx); return (lp); } INVERSE(e_inverse); /* ellipsoid */ double Vx, Vy, Vz, a, b, c, det, k; /* Setting three components of vector from satellite to position.*/ Vx = -1.0; Vy = tan (xy.x / P->radius_g_1); Vz = tan (xy.y / P->radius_g_1) * hypot(1.0, Vy); /* Calculation of terms in cubic equation and determinant.*/ a = Vz / P->radius_p; a = Vy * Vy + a * a + Vx * Vx; b = 2 * P->radius_g * Vx; if ((det = (b * b) - 4 * a * P->C) < 0.) I_ERROR; /* Calculation of three components of vector from satellite to position.*/ k = (-b - sqrt(det)) / (2. * a); Vx = P->radius_g + k * Vx; Vy *= k; Vz *= k; /* Calculation of longitude and latitude.*/ lp.lam = atan2 (Vy, Vx); lp.phi = atan (Vz * cos (lp.lam) / Vx); lp.phi = atan (P->radius_p_inv2 * tan (lp.phi)); return (lp); } FREEUP; if (P) free(P); } ENTRY0(geos) if ((P->h = pj_param(P->params, "dh").f) <= 0.) E_ERROR(-30); if (P->phi0) E_ERROR(-46); P->radius_g = 1. + (P->radius_g_1 = P->h / P->a); P->C = P->radius_g * P->radius_g - 1.0; if (P->es) { P->radius_p = sqrt (P->one_es); P->radius_p2 = P->one_es; P->radius_p_inv2 = P->rone_es; P->inv = e_inverse; P->fwd = e_forward; } else { P->radius_p = P->radius_p2 = P->radius_p_inv2 = 1.0; P->inv = s_inverse; P->fwd = s_forward; } ENDENTRY(P) therion/extern/proj4/PJ_gins8.c0000644000076400010400000000074711137333604017426 0ustar userAdministrators#define PJ_LIB__ # include PROJ_HEAD(gins8, "Ginsburg VIII (TsNIIGAiK)") "\n\tPCyl, Sph., no inv."; #define Cl 0.000952426 #define Cp 0.162388 #define C12 0.08333333333333333 FORWARD(s_forward); /* spheroid */ double t = lp.phi * lp.phi; xy.y = lp.phi * (1. + t * C12); xy.x = lp.lam * (1. - Cp * t); t = lp.lam * lp.lam; xy.x *= (0.87 - Cl * t * t); return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(gins8) P->es = 0.; P->inv = 0; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/PJ_gnom.c0000644000076400010400000000415711137333606017337 0ustar userAdministrators#define PROJ_PARMS__ \ double sinph0; \ double cosph0; \ int mode; #define PJ_LIB__ #include PROJ_HEAD(gnom, "Gnomonic") "\n\tAzi, Sph."; #define EPS10 1.e-10 #define N_POLE 0 #define S_POLE 1 #define EQUIT 2 #define OBLIQ 3 FORWARD(s_forward); /* spheroid */ double coslam, cosphi, sinphi; sinphi = sin(lp.phi); cosphi = cos(lp.phi); coslam = cos(lp.lam); switch (P->mode) { case EQUIT: xy.y = cosphi * coslam; break; case OBLIQ: xy.y = P->sinph0 * sinphi + P->cosph0 * cosphi * coslam; break; case S_POLE: xy.y = - sinphi; break; case N_POLE: xy.y = sinphi; break; } if (xy.y <= EPS10) F_ERROR; xy.x = (xy.y = 1. / xy.y) * cosphi * sin(lp.lam); switch (P->mode) { case EQUIT: xy.y *= sinphi; break; case OBLIQ: xy.y *= P->cosph0 * sinphi - P->sinph0 * cosphi * coslam; break; case N_POLE: coslam = - coslam; case S_POLE: xy.y *= cosphi * coslam; break; } return (xy); } INVERSE(s_inverse); /* spheroid */ double rh, cosz, sinz; rh = hypot(xy.x, xy.y); sinz = sin(lp.phi = atan(rh)); cosz = sqrt(1. - sinz * sinz); if (fabs(rh) <= EPS10) { lp.phi = P->phi0; lp.lam = 0.; } else { switch (P->mode) { case OBLIQ: lp.phi = cosz * P->sinph0 + xy.y * sinz * P->cosph0 / rh; if (fabs(lp.phi) >= 1.) lp.phi = lp.phi > 0. ? HALFPI : - HALFPI; else lp.phi = asin(lp.phi); xy.y = (cosz - P->sinph0 * sin(lp.phi)) * rh; xy.x *= sinz * P->cosph0; break; case EQUIT: lp.phi = xy.y * sinz / rh; if (fabs(lp.phi) >= 1.) lp.phi = lp.phi > 0. ? HALFPI : - HALFPI; else lp.phi = asin(lp.phi); xy.y = cosz * rh; xy.x *= sinz; break; case S_POLE: lp.phi -= HALFPI; break; case N_POLE: lp.phi = HALFPI - lp.phi; xy.y = -xy.y; break; } lp.lam = atan2(xy.x, xy.y); } return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(gnom) if (fabs(fabs(P->phi0) - HALFPI) < EPS10) P->mode = P->phi0 < 0. ? S_POLE : N_POLE; else if (fabs(P->phi0) < EPS10) P->mode = EQUIT; else { P->mode = OBLIQ; P->sinph0 = sin(P->phi0); P->cosph0 = cos(P->phi0); } P->inv = s_inverse; P->fwd = s_forward; P->es = 0.; ENDENTRY(P) therion/extern/proj4/PJ_gn_sinu.c0000644000076400010400000000457411137333612020041 0ustar userAdministrators#define PROJ_PARMS__ \ double *en; \ double m, n, C_x, C_y; #define PJ_LIB__ #include PROJ_HEAD(gn_sinu, "General Sinusoidal Series") "\n\tPCyl, Sph.\n\tm= n="; PROJ_HEAD(sinu, "Sinusoidal (Sanson-Flamsteed)") "\n\tPCyl, Sph&Ell"; PROJ_HEAD(eck6, "Eckert VI") "\n\tPCyl, Sph."; PROJ_HEAD(mbtfps, "McBryde-Thomas Flat-Polar Sinusoidal") "\n\tPCyl, Sph."; #define EPS10 1e-10 #define MAX_ITER 8 #define LOOP_TOL 1e-7 /* Ellipsoidal Sinusoidal only */ FORWARD(e_forward); /* ellipsoid */ double s, c; xy.y = pj_mlfn(lp.phi, s = sin(lp.phi), c = cos(lp.phi), P->en); xy.x = lp.lam * c / sqrt(1. - P->es * s * s); return (xy); } INVERSE(e_inverse); /* ellipsoid */ double s; if ((s = fabs(lp.phi = pj_inv_mlfn(xy.y, P->es, P->en))) < HALFPI) { s = sin(lp.phi); lp.lam = xy.x * sqrt(1. - P->es * s * s) / cos(lp.phi); } else if ((s - EPS10) < HALFPI) lp.lam = 0.; else I_ERROR; return (lp); } /* General spherical sinusoidals */ FORWARD(s_forward); /* sphere */ if (!P->m) lp.phi = P->n != 1. ? aasin(P->n * sin(lp.phi)): lp.phi; else { double k, V; int i; k = P->n * sin(lp.phi); for (i = MAX_ITER; i ; --i) { lp.phi -= V = (P->m * lp.phi + sin(lp.phi) - k) / (P->m + cos(lp.phi)); if (fabs(V) < LOOP_TOL) break; } if (!i) F_ERROR } xy.x = P->C_x * lp.lam * (P->m + cos(lp.phi)); xy.y = P->C_y * lp.phi; return (xy); } INVERSE(s_inverse); /* sphere */ double s; xy.y /= P->C_y; lp.phi = P->m ? aasin((P->m * xy.y + sin(xy.y)) / P->n) : ( P->n != 1. ? aasin(sin(xy.y) / P->n) : xy.y ); lp.lam = xy.x / (P->C_x * (P->m + cos(xy.y))); return (lp); } FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } } static void /* for spheres, only */ setup(PJ *P) { P->es = 0; P->C_x = (P->C_y = sqrt((P->m + 1.) / P->n))/(P->m + 1.); P->inv = s_inverse; P->fwd = s_forward; } ENTRY1(sinu, en) if (!(P->en = pj_enfn(P->es))) E_ERROR_0; if (P->es) { P->inv = e_inverse; P->fwd = e_forward; } else { P->n = 1.; P->m = 0.; setup(P); } ENDENTRY(P) ENTRY1(eck6, en) P->m = 1.; P->n = 2.570796326794896619231321691; setup(P); ENDENTRY(P) ENTRY1(mbtfps, en) P->m = 0.5; P->n = 1.785398163397448309615660845; setup(P); ENDENTRY(P) ENTRY1(gn_sinu, en) if (pj_param(P->params, "tn").i && pj_param(P->params, "tm").i) { P->n = pj_param(P->params, "dn").f; P->m = pj_param(P->params, "dm").f; } else E_ERROR(-99) setup(P); ENDENTRY(P) therion/extern/proj4/PJ_goode.c0000644000076400010400000000204011137333614017460 0ustar userAdministrators#define PROJ_PARMS__ \ struct PJconsts *sinu; \ struct PJconsts *moll; #define PJ_LIB__ #include PROJ_HEAD(goode, "Goode Homolosine") "\n\tPCyl, Sph."; C_NAMESPACE PJ *pj_sinu(PJ *), *pj_moll(PJ *); #define Y_COR 0.05280 #define PHI_LIM .71093078197902358062 FORWARD(s_forward); /* spheroid */ if (fabs(lp.phi) <= PHI_LIM) xy = P->sinu->fwd(lp, P->sinu); else { xy = P->moll->fwd(lp, P->moll); xy.y -= lp.phi >= 0.0 ? Y_COR : -Y_COR; } return (xy); } INVERSE(s_inverse); /* spheroid */ if (fabs(xy.y) <= PHI_LIM) lp = P->sinu->inv(xy, P->sinu); else { xy.y += xy.y >= 0.0 ? Y_COR : -Y_COR; lp = P->moll->inv(xy, P->moll); } return (lp); } FREEUP; if (P) { if (P->sinu) (*(P->sinu->pfree))(P->sinu); if (P->moll) (*(P->moll->pfree))(P->moll); pj_dalloc(P); } } ENTRY2(goode, sinu, moll) P->es = 0.; if (!(P->sinu = pj_sinu(0)) || !(P->moll = pj_moll(0))) E_ERROR_0; if (!(P->sinu = pj_sinu(P->sinu)) || !(P->moll = pj_moll(P->moll))) E_ERROR_0; P->fwd = s_forward; P->inv = s_inverse; ENDENTRY(P) therion/extern/proj4/pj_gridinfo.c0000644000076400010400000005626411130502664020301 0ustar userAdministrators/****************************************************************************** * $Id: pj_gridinfo.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Functions for handling individual PJ_GRIDINFO's. Includes * loaders for all formats but CTABLE (in nad_init.c). * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 2000, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #define PJ_LIB__ #include #include #include #include #ifdef _WIN32_WCE /* assert.h includes all Windows API headers and causes 'LP' name clash. * Here assert we disable assert() for Windows CE. * TODO - mloskot: re-implement porting friendly assert */ # define assert(exp) ((void)0) #else # include #endif /* _WIN32_WCE */ /************************************************************************/ /* swap_words() */ /* */ /* Convert the byte order of the given word(s) in place. */ /************************************************************************/ static int byte_order_test = 1; #define IS_LSB (((unsigned char *) (&byte_order_test))[0] == 1) static void swap_words( unsigned char *data, int word_size, int word_count ) { int word; for( word = 0; word < word_count; word++ ) { int i; for( i = 0; i < word_size/2; i++ ) { int t; t = data[i]; data[i] = data[word_size-i-1]; data[word_size-i-1] = t; } data += word_size; } } /************************************************************************/ /* pj_gridinfo_free() */ /************************************************************************/ void pj_gridinfo_free( PJ_GRIDINFO *gi ) { if( gi == NULL ) return; if( gi->child != NULL ) { PJ_GRIDINFO *child, *next; for( child = gi->child; child != NULL; child=next) { next=child->next; pj_gridinfo_free( child ); } } if( gi->ct != NULL ) nad_free( gi->ct ); free( gi->gridname ); if( gi->filename != NULL ) free( gi->filename ); pj_dalloc( gi ); } /************************************************************************/ /* pj_gridinfo_load() */ /* */ /* This function is intended to implement delayed loading of */ /* the data contents of a grid file. The header and related */ /* stuff are loaded by pj_gridinfo_init(). */ /************************************************************************/ int pj_gridinfo_load( PJ_GRIDINFO *gi ) { if( gi == NULL || gi->ct == NULL ) return 0; /* -------------------------------------------------------------------- */ /* ctable is currently loaded on initialization though there is */ /* no real reason not to support delayed loading for it as well. */ /* -------------------------------------------------------------------- */ if( strcmp(gi->format,"ctable") == 0 ) { FILE *fid; int result; fid = pj_open_lib( gi->filename, "rb" ); if( fid == NULL ) { pj_errno = -38; return 0; } result = nad_ctable_load( gi->ct, fid ); fclose( fid ); return result; } /* -------------------------------------------------------------------- */ /* NTv1 format. */ /* We process one line at a time. Note that the array storage */ /* direction (e-w) is different in the NTv1 file and what */ /* the CTABLE is supposed to have. The phi/lam are also */ /* reversed, and we have to be aware of byte swapping. */ /* -------------------------------------------------------------------- */ else if( strcmp(gi->format,"ntv1") == 0 ) { double *row_buf; int row; FILE *fid; fid = pj_open_lib( gi->filename, "rb" ); if( fid == NULL ) { pj_errno = -38; return 0; } fseek( fid, gi->grid_offset, SEEK_SET ); row_buf = (double *) pj_malloc(gi->ct->lim.lam * sizeof(double) * 2); gi->ct->cvs = (FLP *) pj_malloc(gi->ct->lim.lam*gi->ct->lim.phi*sizeof(FLP)); if( row_buf == NULL || gi->ct->cvs == NULL ) { pj_errno = -38; return 0; } for( row = 0; row < gi->ct->lim.phi; row++ ) { int i; FLP *cvs; double *diff_seconds; if( fread( row_buf, sizeof(double), gi->ct->lim.lam * 2, fid ) != 2 * gi->ct->lim.lam ) { pj_dalloc( row_buf ); pj_dalloc( gi->ct->cvs ); pj_errno = -38; return 0; } if( IS_LSB ) swap_words( (unsigned char *) row_buf, 8, gi->ct->lim.lam*2 ); /* convert seconds to radians */ diff_seconds = row_buf; for( i = 0; i < gi->ct->lim.lam; i++ ) { cvs = gi->ct->cvs + (row) * gi->ct->lim.lam + (gi->ct->lim.lam - i - 1); cvs->phi = *(diff_seconds++) * ((PI/180.0) / 3600.0); cvs->lam = *(diff_seconds++) * ((PI/180.0) / 3600.0); } } pj_dalloc( row_buf ); fclose( fid ); return 1; } /* -------------------------------------------------------------------- */ /* NTv2 format. */ /* We process one line at a time. Note that the array storage */ /* direction (e-w) is different in the NTv2 file and what */ /* the CTABLE is supposed to have. The phi/lam are also */ /* reversed, and we have to be aware of byte swapping. */ /* -------------------------------------------------------------------- */ else if( strcmp(gi->format,"ntv2") == 0 ) { float *row_buf; int row; FILE *fid; if( getenv("PROJ_DEBUG") != NULL ) { fprintf( stderr, "NTv2 - loading grid %s\n", gi->ct->id ); } fid = pj_open_lib( gi->filename, "rb" ); if( fid == NULL ) { pj_errno = -38; return 0; } fseek( fid, gi->grid_offset, SEEK_SET ); row_buf = (float *) pj_malloc(gi->ct->lim.lam * sizeof(float) * 4); gi->ct->cvs = (FLP *) pj_malloc(gi->ct->lim.lam*gi->ct->lim.phi*sizeof(FLP)); if( row_buf == NULL || gi->ct->cvs == NULL ) { pj_errno = -38; return 0; } for( row = 0; row < gi->ct->lim.phi; row++ ) { int i; FLP *cvs; float *diff_seconds; if( fread( row_buf, sizeof(float), gi->ct->lim.lam*4, fid ) != 4 * gi->ct->lim.lam ) { pj_dalloc( row_buf ); pj_dalloc( gi->ct->cvs ); gi->ct->cvs = NULL; pj_errno = -38; return 0; } if( !IS_LSB ) swap_words( (unsigned char *) row_buf, 4, gi->ct->lim.lam*4 ); /* convert seconds to radians */ diff_seconds = row_buf; for( i = 0; i < gi->ct->lim.lam; i++ ) { cvs = gi->ct->cvs + (row) * gi->ct->lim.lam + (gi->ct->lim.lam - i - 1); cvs->phi = *(diff_seconds++) * ((PI/180.0) / 3600.0); cvs->lam = *(diff_seconds++) * ((PI/180.0) / 3600.0); diff_seconds += 2; /* skip accuracy values */ } } pj_dalloc( row_buf ); fclose( fid ); return 1; } else { return 0; } } /************************************************************************/ /* pj_gridinfo_init_ntv2() */ /* */ /* Load a ntv2 (.gsb) file. */ /************************************************************************/ static int pj_gridinfo_init_ntv2( FILE *fid, PJ_GRIDINFO *gilist ) { unsigned char header[11*16]; int num_subfiles, subfile; assert( sizeof(int) == 4 ); assert( sizeof(double) == 8 ); if( sizeof(int) != 4 || sizeof(double) != 8 ) { fprintf( stderr, "basic types of inappropraiate size in pj_gridinfo_init_ntv2()\n" ); pj_errno = -38; return 0; } /* -------------------------------------------------------------------- */ /* Read the overview header. */ /* -------------------------------------------------------------------- */ if( fread( header, sizeof(header), 1, fid ) != 1 ) { pj_errno = -38; return 0; } /* -------------------------------------------------------------------- */ /* Byte swap interesting fields if needed. */ /* -------------------------------------------------------------------- */ if( !IS_LSB ) { swap_words( header+8, 4, 1 ); swap_words( header+8+16, 4, 1 ); swap_words( header+8+32, 4, 1 ); swap_words( header+8+7*16, 8, 1 ); swap_words( header+8+8*16, 8, 1 ); swap_words( header+8+9*16, 8, 1 ); swap_words( header+8+10*16, 8, 1 ); } /* -------------------------------------------------------------------- */ /* Get the subfile count out ... all we really use for now. */ /* -------------------------------------------------------------------- */ memcpy( &num_subfiles, header+8+32, 4 ); /* ==================================================================== */ /* Step through the subfiles, creating a PJ_GRIDINFO for each. */ /* ==================================================================== */ for( subfile = 0; subfile < num_subfiles; subfile++ ) { struct CTABLE *ct; LP ur; int gs_count; PJ_GRIDINFO *gi; /* -------------------------------------------------------------------- */ /* Read header. */ /* -------------------------------------------------------------------- */ if( fread( header, sizeof(header), 1, fid ) != 1 ) { pj_errno = -38; return 0; } if( strncmp((const char *) header,"SUB_NAME",8) != 0 ) { pj_errno = -38; return 0; } /* -------------------------------------------------------------------- */ /* Byte swap interesting fields if needed. */ /* -------------------------------------------------------------------- */ if( !IS_LSB ) { swap_words( header+8+16*4, 8, 1 ); swap_words( header+8+16*5, 8, 1 ); swap_words( header+8+16*6, 8, 1 ); swap_words( header+8+16*7, 8, 1 ); swap_words( header+8+16*8, 8, 1 ); swap_words( header+8+16*9, 8, 1 ); swap_words( header+8+16*10, 4, 1 ); } /* -------------------------------------------------------------------- */ /* Initialize a corresponding "ct" structure. */ /* -------------------------------------------------------------------- */ ct = (struct CTABLE *) pj_malloc(sizeof(struct CTABLE)); strncpy( ct->id, (const char *) header + 8, 8 ); ct->id[8] = '\0'; ct->ll.lam = - *((double *) (header+7*16+8)); /* W_LONG */ ct->ll.phi = *((double *) (header+4*16+8)); /* S_LAT */ ur.lam = - *((double *) (header+6*16+8)); /* E_LONG */ ur.phi = *((double *) (header+5*16+8)); /* N_LAT */ ct->del.lam = *((double *) (header+9*16+8)); ct->del.phi = *((double *) (header+8*16+8)); ct->lim.lam = (int) (fabs(ur.lam-ct->ll.lam)/ct->del.lam + 0.5) + 1; ct->lim.phi = (int) (fabs(ur.phi-ct->ll.phi)/ct->del.phi + 0.5) + 1; if( getenv("PROJ_DEBUG") != NULL ) fprintf( stderr, "NTv2 %s %dx%d: LL=(%.9g,%.9g) UR=(%.9g,%.9g)\n", ct->id, ct->lim.lam, ct->lim.phi, ct->ll.lam/3600.0, ct->ll.phi/3600.0, ur.lam/3600.0, ur.phi/3600.0 ); ct->ll.lam *= DEG_TO_RAD/3600.0; ct->ll.phi *= DEG_TO_RAD/3600.0; ct->del.lam *= DEG_TO_RAD/3600.0; ct->del.phi *= DEG_TO_RAD/3600.0; memcpy( &gs_count, header + 8 + 16*10, 4 ); if( gs_count != ct->lim.lam * ct->lim.phi ) { fprintf( stderr, "GS_COUNT(%d) does not match expected cells (%dx%d=%d)\n", gs_count, ct->lim.lam, ct->lim.phi, ct->lim.lam * ct->lim.phi ); pj_errno = -38; return 0; } ct->cvs = NULL; /* -------------------------------------------------------------------- */ /* Create a new gridinfo for this if we aren't processing the */ /* 1st subfile, and initialize our grid info. */ /* -------------------------------------------------------------------- */ if( subfile == 0 ) gi = gilist; else { gi = (PJ_GRIDINFO *) pj_malloc(sizeof(PJ_GRIDINFO)); memset( gi, 0, sizeof(PJ_GRIDINFO) ); gi->gridname = strdup( gilist->gridname ); gi->filename = strdup( gilist->filename ); gi->next = NULL; } gi->ct = ct; gi->format = "ntv2"; gi->grid_offset = ftell( fid ); /* -------------------------------------------------------------------- */ /* Attach to the correct list or sublist. */ /* -------------------------------------------------------------------- */ if( strncmp((const char *)header+24,"NONE",4) == 0 ) { if( gi != gilist ) { PJ_GRIDINFO *lnk; for( lnk = gilist; lnk->next != NULL; lnk = lnk->next ) {} lnk->next = gi; } } else { PJ_GRIDINFO *lnk; PJ_GRIDINFO *gp = gilist; while( gp != NULL && strncmp(gp->ct->id,(const char*)header+24,8) != 0 ) gp = gp->next; if( gp == NULL ) { if( getenv("PROJ_DEBUG") != NULL ) fprintf( stderr, "pj_gridinfo_init_ntv2(): " "failed to find parent %8.8s for %s.\n", (const char *) header+24, gi->ct->id ); for( lnk = gp; lnk->next != NULL; lnk = lnk->next ) {} lnk->next = gi; } else if( gp->child == NULL ) { gp->child = gi; } else { for( lnk = gp->child; lnk->next != NULL; lnk = lnk->next ) {} lnk->next = gi; } } /* -------------------------------------------------------------------- */ /* Seek past the data. */ /* -------------------------------------------------------------------- */ fseek( fid, gs_count * 16, SEEK_CUR ); } return 1; } /************************************************************************/ /* pj_gridinfo_init_ntv1() */ /* */ /* Load an NTv1 style Canadian grid shift file. */ /************************************************************************/ static int pj_gridinfo_init_ntv1( FILE * fid, PJ_GRIDINFO *gi ) { unsigned char header[176]; struct CTABLE *ct; LP ur; assert( sizeof(int) == 4 ); assert( sizeof(double) == 8 ); if( sizeof(int) != 4 || sizeof(double) != 8 ) { fprintf( stderr, "basic types of inappropraiate size in nad_load_ntv1()\n" ); pj_errno = -38; return 0; } /* -------------------------------------------------------------------- */ /* Read the header. */ /* -------------------------------------------------------------------- */ if( fread( header, sizeof(header), 1, fid ) != 1 ) { pj_errno = -38; return 0; } /* -------------------------------------------------------------------- */ /* Regularize fields of interest. */ /* -------------------------------------------------------------------- */ if( IS_LSB ) { swap_words( header+8, 4, 1 ); swap_words( header+24, 8, 1 ); swap_words( header+40, 8, 1 ); swap_words( header+56, 8, 1 ); swap_words( header+72, 8, 1 ); swap_words( header+88, 8, 1 ); swap_words( header+104, 8, 1 ); } if( *((int *) (header+8)) != 12 ) { pj_errno = -38; printf("NTv1 grid shift file has wrong record count, corrupt?\n"); return 0; } /* -------------------------------------------------------------------- */ /* Fill in CTABLE structure. */ /* -------------------------------------------------------------------- */ ct = (struct CTABLE *) pj_malloc(sizeof(struct CTABLE)); strcpy( ct->id, "NTv1 Grid Shift File" ); ct->ll.lam = - *((double *) (header+72)); ct->ll.phi = *((double *) (header+24)); ur.lam = - *((double *) (header+56)); ur.phi = *((double *) (header+40)); ct->del.lam = *((double *) (header+104)); ct->del.phi = *((double *) (header+88)); ct->lim.lam = (int) (fabs(ur.lam-ct->ll.lam)/ct->del.lam + 0.5) + 1; ct->lim.phi = (int) (fabs(ur.phi-ct->ll.phi)/ct->del.phi + 0.5) + 1; if( getenv("PROJ_DEBUG") != NULL ) fprintf( stderr, "NTv1 %dx%d: LL=(%.9g,%.9g) UR=(%.9g,%.9g)\n", ct->lim.lam, ct->lim.phi, ct->ll.lam, ct->ll.phi, ur.lam, ur.phi ); ct->ll.lam *= DEG_TO_RAD; ct->ll.phi *= DEG_TO_RAD; ct->del.lam *= DEG_TO_RAD; ct->del.phi *= DEG_TO_RAD; ct->cvs = NULL; gi->ct = ct; gi->grid_offset = ftell( fid ); gi->format = "ntv1"; return 1; } /************************************************************************/ /* pj_gridinfo_init() */ /* */ /* Open and parse header details from a datum gridshift file */ /* returning a list of PJ_GRIDINFOs for the grids in that */ /* file. This superceeds use of nad_init() for modern */ /* applications. */ /************************************************************************/ PJ_GRIDINFO *pj_gridinfo_init( const char *gridname ) { char fname[MAX_PATH_FILENAME+1]; PJ_GRIDINFO *gilist; FILE *fp; char header[160]; errno = pj_errno = 0; /* -------------------------------------------------------------------- */ /* Initialize a GRIDINFO with stub info we would use if it */ /* cannot be loaded. */ /* -------------------------------------------------------------------- */ gilist = (PJ_GRIDINFO *) pj_malloc(sizeof(PJ_GRIDINFO)); memset( gilist, 0, sizeof(PJ_GRIDINFO) ); gilist->gridname = strdup( gridname ); gilist->filename = NULL; gilist->format = "missing"; gilist->grid_offset = 0; gilist->ct = NULL; gilist->next = NULL; /* -------------------------------------------------------------------- */ /* Open the file using the usual search rules. */ /* -------------------------------------------------------------------- */ strcpy(fname, gridname); if (!(fp = pj_open_lib(fname, "rb"))) { pj_errno = errno; return gilist; } gilist->filename = strdup(fname); /* -------------------------------------------------------------------- */ /* Load a header, to determine the file type. */ /* -------------------------------------------------------------------- */ if( fread( header, sizeof(header), 1, fp ) != 1 ) { fclose( fp ); pj_errno = -38; return gilist; } fseek( fp, SEEK_SET, 0 ); /* -------------------------------------------------------------------- */ /* Determine file type. */ /* -------------------------------------------------------------------- */ if( strncmp(header + 0, "HEADER", 6) == 0 && strncmp(header + 96, "W GRID", 6) == 0 && strncmp(header + 144, "TO NAD83 ", 16) == 0 ) { pj_gridinfo_init_ntv1( fp, gilist ); } else if( strncmp(header + 0, "NUM_OREC", 8) == 0 && strncmp(header + 48, "GS_TYPE", 7) == 0 ) { pj_gridinfo_init_ntv2( fp, gilist ); } else { struct CTABLE *ct = nad_ctable_init( fp ); gilist->format = "ctable"; gilist->ct = ct; if( getenv("PROJ_DEBUG") != NULL ) fprintf( stderr, "Ctable %s %dx%d: LL=(%.9g,%.9g) UR=(%.9g,%.9g)\n", ct->id, ct->lim.lam, ct->lim.phi, ct->ll.lam * RAD_TO_DEG, ct->ll.phi * RAD_TO_DEG, (ct->ll.lam + (ct->lim.lam-1)*ct->del.lam) * RAD_TO_DEG, (ct->ll.phi + (ct->lim.phi-1)*ct->del.phi) * RAD_TO_DEG ); } fclose(fp); return gilist; } therion/extern/proj4/pj_gridlist.c0000644000076400010400000002147011256556044020322 0ustar userAdministrators/****************************************************************************** * $Id: pj_gridlist.c 1634 2009-09-24 02:40:46Z warmerdam $ * * Project: PROJ.4 * Purpose: Code to manage the list of currently loaded (cached) PJ_GRIDINFOs * See pj_gridinfo.c for details of loading individual grids. * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 2000, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #define PJ_LIB__ #include #include #include #ifdef _WIN32_WCE /* assert.h includes all Windows API headers and causes 'LP' name clash. * Here assert we disable assert() for Windows CE. * TODO - mloskot: re-implement porting friendly assert */ # define assert(exp) ((void)0) #else # include #endif /* _WIN32_WCE */ static PJ_GRIDINFO *grid_list = NULL; /* used only by pj_load_nadgrids() and pj_deallocate_grids() */ static int last_nadgrids_max = 0; static int last_nadgrids_count = 0; static PJ_GRIDINFO **last_nadgrids_list = NULL; static char *last_nadgrids = NULL; /************************************************************************/ /* pj_deallocate_grids() */ /* */ /* Deallocate all loaded grids. */ /************************************************************************/ void pj_deallocate_grids() { while( grid_list != NULL ) { PJ_GRIDINFO *item = grid_list; grid_list = grid_list->next; item->next = NULL; pj_gridinfo_free( item ); } if( last_nadgrids != NULL ) { pj_dalloc( last_nadgrids ); last_nadgrids = NULL; pj_dalloc( last_nadgrids_list ); last_nadgrids_list = NULL; last_nadgrids_count = 0; last_nadgrids_max = 0; } } /************************************************************************/ /* pj_gridlist_merge_grid() */ /* */ /* Find/load the named gridfile and merge it into the */ /* last_nadgrids_list. */ /************************************************************************/ static int pj_gridlist_merge_gridfile( const char *gridname ) { int i, got_match=0; PJ_GRIDINFO *this_grid, *tail = NULL; /* -------------------------------------------------------------------- */ /* Try to find in the existing list of loaded grids. Add all */ /* matching grids as with NTv2 we can get many grids from one */ /* file (one shared gridname). */ /* -------------------------------------------------------------------- */ for( this_grid = grid_list; this_grid != NULL; this_grid = this_grid->next) { if( strcmp(this_grid->gridname,gridname) == 0 ) { got_match = 1; /* dont add to the list if it is invalid. */ if( this_grid->ct == NULL ) return 0; /* do we need to grow the list? */ if( last_nadgrids_count >= last_nadgrids_max - 2 ) { PJ_GRIDINFO **new_list; int new_max = last_nadgrids_max + 20; new_list = (PJ_GRIDINFO **) pj_malloc(sizeof(void*) * new_max); if( last_nadgrids_list != NULL ) { memcpy( new_list, last_nadgrids_list, sizeof(void*) * last_nadgrids_max ); pj_dalloc( last_nadgrids_list ); } last_nadgrids_list = new_list; last_nadgrids_max = new_max; } /* add to the list */ last_nadgrids_list[last_nadgrids_count++] = this_grid; last_nadgrids_list[last_nadgrids_count] = NULL; } tail = this_grid; } if( got_match ) return 1; /* -------------------------------------------------------------------- */ /* Try to load the named grid. */ /* -------------------------------------------------------------------- */ this_grid = pj_gridinfo_init( gridname ); if( this_grid == NULL ) { /* we should get at least a stub grid with a missing "ct" member */ assert( FALSE ); return 0; } if( tail != NULL ) tail->next = this_grid; else grid_list = this_grid; /* -------------------------------------------------------------------- */ /* Recurse to add the grid now that it is loaded. */ /* -------------------------------------------------------------------- */ return pj_gridlist_merge_gridfile( gridname ); } /************************************************************************/ /* pj_gridlist_from_nadgrids() */ /* */ /* This functions loads the list of grids corresponding to a */ /* particular nadgrids string into a list, and returns it. The */ /* list is kept around till a request is made with a different */ /* string in order to cut down on the string parsing cost, and */ /* the cost of building the list of tables each time. */ /************************************************************************/ PJ_GRIDINFO **pj_gridlist_from_nadgrids( const char *nadgrids, int *grid_count) { const char *s; pj_errno = 0; *grid_count = 0; pj_acquire_lock(); if( last_nadgrids != NULL && strcmp(nadgrids,last_nadgrids) == 0 ) { PJ_GRIDINFO **ret = last_nadgrids_list; *grid_count = last_nadgrids_count; if( *grid_count == 0 ) pj_errno = -38; pj_release_lock(); return ret; } /* -------------------------------------------------------------------- */ /* Free old one, if any, and make space for new list. */ /* -------------------------------------------------------------------- */ if( last_nadgrids != NULL ) { pj_dalloc(last_nadgrids); } last_nadgrids = (char *) pj_malloc(strlen(nadgrids)+1); strcpy( last_nadgrids, nadgrids ); last_nadgrids_count = 0; /* -------------------------------------------------------------------- */ /* Loop processing names out of nadgrids one at a time. */ /* -------------------------------------------------------------------- */ for( s = nadgrids; *s != '\0'; ) { int end_char; int required = 1; char name[128]; if( *s == '@' ) { required = 0; s++; } for( end_char = 0; s[end_char] != '\0' && s[end_char] != ','; end_char++ ) {} if( end_char > sizeof(name) ) { pj_errno = -38; pj_release_lock(); return NULL; } strncpy( name, s, end_char ); name[end_char] = '\0'; s += end_char; if( *s == ',' ) s++; if( !pj_gridlist_merge_gridfile( name ) && required ) { pj_errno = -38; pj_release_lock(); return NULL; } else pj_errno = 0; } if( last_nadgrids_count > 0 ) { PJ_GRIDINFO **ret = last_nadgrids_list; *grid_count = last_nadgrids_count; pj_release_lock(); return ret; } else { pj_release_lock(); return NULL; } } therion/extern/proj4/PJ_gstmerc.c0000644000076400010400000000434311156465424020045 0ustar userAdministrators#define PROJ_PARMS__ \ double lamc;\ double phic;\ double c;\ double n1;\ double n2;\ double XS;\ double YS; #define PJ_LIB__ # include PROJ_HEAD(gstmerc, "Gauss-Schreiber Transverse Mercator (aka Gauss-Laborde Reunion)") "\n\tCyl, Sph&Ell\n\tlat_0= lon_0= k_0="; FORWARD(s_forward); /* spheroid */ double L, Ls, sinLs1, Ls1; L= P->n1*lp.lam; Ls= P->c+P->n1*log(pj_tsfn(-1.0*lp.phi,-1.0*sin(lp.phi),P->e)); sinLs1= sin(L)/cosh(Ls); Ls1= log(pj_tsfn(-1.0*asin(sinLs1),0.0,0.0)); xy.x= (P->XS + P->n2*Ls1)*P->ra; xy.y= (P->YS + P->n2*atan(sinh(Ls)/cos(L)))*P->ra; /*fprintf(stderr,"fwd:\nL =%16.13f\nLs =%16.13f\nLs1 =%16.13f\nLP(%16.13f,%16.13f)=XY(%16.4f,%16.4f)\n",L,Ls,Ls1,lp.lam+P->lam0,lp.phi,(xy.x*P->a + P->x0)*P->to_meter,(xy.y*P->a + P->y0)*P->to_meter);*/ return (xy); } INVERSE(s_inverse); /* spheroid */ double L, LC, sinC; L= atan(sinh((xy.x*P->a - P->XS)/P->n2)/cos((xy.y*P->a - P->YS)/P->n2)); sinC= sin((xy.y*P->a - P->YS)/P->n2)/cosh((xy.x*P->a - P->XS)/P->n2); LC= log(pj_tsfn(-1.0*asin(sinC),0.0,0.0)); lp.lam= L/P->n1; lp.phi= -1.0*pj_phi2(exp((LC-P->c)/P->n1),P->e); /*fprintf(stderr,"inv:\nL =%16.13f\nsinC =%16.13f\nLC =%16.13f\nXY(%16.4f,%16.4f)=LP(%16.13f,%16.13f)\n",L,sinC,LC,((xy.x/P->ra)+P->x0)/P->to_meter,((xy.y/P->ra)+P->y0)/P->to_meter,lp.lam+P->lam0,lp.phi);*/ return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(gstmerc) P->lamc= P->lam0; P->n1= sqrt(1.0+P->es*pow(cos(P->phi0),4.0)/(1.0-P->es)); P->phic= asin(sin(P->phi0)/P->n1); P->c= log(pj_tsfn(-1.0*P->phic,0.0,0.0)) -P->n1*log(pj_tsfn(-1.0*P->phi0,-1.0*sin(P->phi0),P->e)); P->n2= P->k0*P->a*sqrt(1.0-P->es)/(1.0-P->es*sin(P->phi0)*sin(P->phi0)); P->XS= 0;/* -P->x0 */ P->YS= -1.0*P->n2*P->phic;/* -P->y0 */ P->inv= s_inverse; P->fwd= s_forward; /*fprintf(stderr,"a (m) =%16.4f\ne =%16.13f\nl0(rad)=%16.13f\np0(rad)=%16.13f\nk0 =%16.4f\nX0 (m)=%16.4f\nY0 (m)=%16.4f\n\nlC(rad)=%16.13f\npC(rad)=%16.13f\nc =%16.13f\nn1 =%16.13f\nn2 (m) =%16.4f\nXS (m) =%16.4f\nYS (m) =%16.4f\n", P->a, P->e, P->lam0, P->phi0, P->k0, P->x0, P->y0, P->lamc, P->phic, P->c, P->n1, P->n2, P->XS +P->x0, P->YS + P->y0);*/ ENDENTRY(P) therion/extern/proj4/PJ_hammer.c0000644000076400010400000000140011137333620017630 0ustar userAdministrators#define PROJ_PARMS__ \ double w; \ double m, rm; #define PJ_LIB__ # include PROJ_HEAD(hammer, "Hammer & Eckert-Greifendorff") "\n\tMisc Sph, no inv.\n\tW= M="; FORWARD(s_forward); /* spheroid */ double cosphi, d; d = sqrt(2./(1. + (cosphi = cos(lp.phi)) * cos(lp.lam *= P->w))); xy.x = P->m * d * cosphi * sin(lp.lam); xy.y = P->rm * d * sin(lp.phi); return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(hammer) if (pj_param(P->params, "tW").i) { if ((P->w = fabs(pj_param(P->params, "dW").f)) <= 0.) E_ERROR(-27); } else P->w = .5; if (pj_param(P->params, "tM").i) { if ((P->m = fabs(pj_param(P->params, "dM").f)) <= 0.) E_ERROR(-27); } else P->m = 1.; P->rm = 1. / P->m; P->m /= P->w; P->es = 0.; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/PJ_hatano.c0000644000076400010400000000251111137333624017641 0ustar userAdministrators#define PJ_LIB__ #include PROJ_HEAD(hatano, "Hatano Asymmetrical Equal Area") "\n\tPCyl, Sph."; #define NITER 20 #define EPS 1e-7 #define ONETOL 1.000001 #define CN 2.67595 #define CS 2.43763 #define RCN 0.37369906014686373063 #define RCS 0.41023453108141924738 #define FYCN 1.75859 #define FYCS 1.93052 #define RYCN 0.56863737426006061674 #define RYCS 0.51799515156538134803 #define FXC 0.85 #define RXC 1.17647058823529411764 FORWARD(s_forward); /* spheroid */ double th1, c; int i; c = sin(lp.phi) * (lp.phi < 0. ? CS : CN); for (i = NITER; i; --i) { lp.phi -= th1 = (lp.phi + sin(lp.phi) - c) / (1. + cos(lp.phi)); if (fabs(th1) < EPS) break; } xy.x = FXC * lp.lam * cos(lp.phi *= .5); xy.y = sin(lp.phi) * (lp.phi < 0. ? FYCS : FYCN); return (xy); } INVERSE(s_inverse); /* spheroid */ double th; th = xy.y * ( xy.y < 0. ? RYCS : RYCN); if (fabs(th) > 1.) if (fabs(th) > ONETOL) I_ERROR else th = th > 0. ? HALFPI : - HALFPI; else th = asin(th); lp.lam = RXC * xy.x / cos(th); th += th; lp.phi = (th + sin(th)) * (xy.y < 0. ? RCS : RCN); if (fabs(lp.phi) > 1.) if (fabs(lp.phi) > ONETOL) I_ERROR else lp.phi = lp.phi > 0. ? HALFPI : - HALFPI; else lp.phi = asin(lp.phi); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(hatano) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/PJ_imw_p.c0000644000076400010400000000721311202546452017504 0ustar userAdministrators#define PROJ_PARMS__ \ double P, Pp, Q, Qp, R_1, R_2, sphi_1, sphi_2, C2; \ double phi_1, phi_2, lam_1; \ double *en; \ int mode; /* = 0, phi_1 and phi_2 != 0, = 1, phi_1 = 0, = -1 phi_2 = 0 */ #define PJ_LIB__ #include PROJ_HEAD(imw_p, "International Map of the World Polyconic") "\n\tMod. Polyconic, Ell\n\tlat_1= and lat_2= [lon_1=]"; #define TOL 1e-10 #define EPS 1e-10 static int phi12(PJ *P, double *del, double *sig) { int err = 0; if (!pj_param(P->params, "tlat_1").i || !pj_param(P->params, "tlat_2").i) { err = -41; } else { P->phi_1 = pj_param(P->params, "rlat_1").f; P->phi_2 = pj_param(P->params, "rlat_2").f; *del = 0.5 * (P->phi_2 - P->phi_1); *sig = 0.5 * (P->phi_2 + P->phi_1); err = (fabs(*del) < EPS || fabs(*sig) < EPS) ? -42 : 0; } return err; } static XY loc_for(LP lp, PJ *P, double *yc) { XY xy; if (! lp.phi) { xy.x = lp.lam; xy.y = 0.; } else { double xa, ya, xb, yb, xc, D, B, m, sp, t, R, C; sp = sin(lp.phi); m = pj_mlfn(lp.phi, sp, cos(lp.phi), P->en); xa = P->Pp + P->Qp * m; ya = P->P + P->Q * m; R = 1. / (tan(lp.phi) * sqrt(1. - P->es * sp * sp)); C = sqrt(R * R - xa * xa); if (lp.phi < 0.) C = - C; C += ya - R; if (P->mode < 0) { xb = lp.lam; yb = P->C2; } else { t = lp.lam * P->sphi_2; xb = P->R_2 * sin(t); yb = P->C2 + P->R_2 * (1. - cos(t)); } if (P->mode > 0) { xc = lp.lam; *yc = 0.; } else { t = lp.lam * P->sphi_1; xc = P->R_1 * sin(t); *yc = P->R_1 * (1. - cos(t)); } D = (xb - xc)/(yb - *yc); B = xc + D * (C + R - *yc); xy.x = D * sqrt(R * R * (1 + D * D) - B * B); if (lp.phi > 0) xy.x = - xy.x; xy.x = (B + xy.x) / (1. + D * D); xy.y = sqrt(R * R - xy.x * xy.x); if (lp.phi > 0) xy.y = - xy.y; xy.y += C + R; } return (xy); } FORWARD(e_forward); /* ellipsoid */ double yc; xy = loc_for(lp, P, &yc); return (xy); } INVERSE(e_inverse); /* ellipsoid */ XY t; double yc; lp.phi = P->phi_2; lp.lam = xy.x / cos(lp.phi); do { t = loc_for(lp, P, &yc); lp.phi = ((lp.phi - P->phi_1) * (xy.y - yc) / (t.y - yc)) + P->phi_1; lp.lam = lp.lam * xy.x / t.x; } while (fabs(t.x - xy.x) > TOL || fabs(t.y - xy.y) > TOL); return (lp); } static void xy(PJ *P, double phi, double *x, double *y, double *sp, double *R) { double F; *sp = sin(phi); *R = 1./(tan(phi) * sqrt(1. - P->es * *sp * *sp )); F = P->lam_1 * *sp; *y = *R * (1 - cos(F)); *x = *R * sin(F); } FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } } ENTRY1(imw_p, en) double del, sig, s, t, x1, x2, T2, y1, m1, m2, y2; int i; if (!(P->en = pj_enfn(P->es))) E_ERROR_0; if( (i = phi12(P, &del, &sig)) != 0) E_ERROR(i); if (P->phi_2 < P->phi_1) { /* make sure P->phi_1 most southerly */ del = P->phi_1; P->phi_1 = P->phi_2; P->phi_2 = del; } if (pj_param(P->params, "tlon_1").i) P->lam_1 = pj_param(P->params, "rlon_1").f; else { /* use predefined based upon latitude */ sig = fabs(sig * RAD_TO_DEG); if (sig <= 60) sig = 2.; else if (sig <= 76) sig = 4.; else sig = 8.; P->lam_1 = sig * DEG_TO_RAD; } P->mode = 0; if (P->phi_1) xy(P, P->phi_1, &x1, &y1, &P->sphi_1, &P->R_1); else { P->mode = 1; y1 = 0.; x1 = P->lam_1; } if (P->phi_2) xy(P, P->phi_2, &x2, &T2, &P->sphi_2, &P->R_2); else { P->mode = -1; T2 = 0.; x2 = P->lam_1; } m1 = pj_mlfn(P->phi_1, P->sphi_1, cos(P->phi_1), P->en); m2 = pj_mlfn(P->phi_2, P->sphi_2, cos(P->phi_2), P->en); t = m2 - m1; s = x2 - x1; y2 = sqrt(t * t - s * s) + y1; P->C2 = y2 - T2; t = 1. / t; P->P = (m2 * y1 - m1 * y2) * t; P->Q = (y2 - y1) * t; P->Pp = (m2 * x1 - m1 * x2) * t; P->Qp = (x2 - x1) * t; P->fwd = e_forward; P->inv = e_inverse; ENDENTRY(P) therion/extern/proj4/pj_init.c0000644000076400010400000003136511256552744017453 0ustar userAdministrators/****************************************************************************** * $Id: pj_init.c 1630 2009-09-24 02:14:06Z warmerdam $ * * Project: PROJ.4 * Purpose: Initialize projection object from string definition. Includes * pj_init(), pj_init_plus() and pj_free() function. * Author: Gerald Evenden, Frank Warmerdam * ****************************************************************************** * Copyright (c) 1995, Gerald Evenden * Copyright (c) 2002, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #define PJ_LIB__ #include #include #include #include #include PJ_CVSID("$Id: pj_init.c 1630 2009-09-24 02:14:06Z warmerdam $"); extern FILE *pj_open_lib(char *, char *); /************************************************************************/ /* get_opt() */ /************************************************************************/ static paralist * get_opt(paralist **start, FILE *fid, char *name, paralist *next) { char sword[302], *word = sword+1; int first = 1, len, c; len = strlen(name); *sword = 't'; while (fscanf(fid, "%300s", word) == 1) { if (*word == '#') /* skip comments */ while((c = fgetc(fid)) != EOF && c != '\n') ; else if (*word == '<') { /* control name */ if (first && !strncmp(name, word + 1, len) && word[len + 1] == '>') first = 0; else if (!first && *word == '<') { while((c = fgetc(fid)) != EOF && c != '\n') ; break; } } else if (!first && !pj_param(*start, sword).i) { /* don't default ellipse if datum, ellps or any earth model information is set. */ if( strncmp(word,"ellps=",6) != 0 || (!pj_param(*start, "tdatum").i && !pj_param(*start, "tellps").i && !pj_param(*start, "ta").i && !pj_param(*start, "tb").i && !pj_param(*start, "trf").i && !pj_param(*start, "tf").i) ) { next = next->next = pj_mkparam(word); } } } if (errno == 25) errno = 0; return next; } /************************************************************************/ /* get_defaults() */ /************************************************************************/ static paralist * get_defaults(paralist **start, paralist *next, char *name) { FILE *fid; if (fid = pj_open_lib("proj_def.dat", "rt")) { next = get_opt(start, fid, "general", next); rewind(fid); next = get_opt(start, fid, name, next); (void)fclose(fid); } if (errno) errno = 0; /* don't care if can't open file */ return next; } /************************************************************************/ /* get_init() */ /************************************************************************/ static paralist * get_init(paralist **start, paralist *next, char *name) { char fname[MAX_PATH_FILENAME+ID_TAG_MAX+3], *opt; FILE *fid; paralist *init_items = NULL; const paralist *orig_next = next; (void)strncpy(fname, name, MAX_PATH_FILENAME + ID_TAG_MAX + 1); /* ** Search for file/key pair in cache */ init_items = pj_search_initcache( name ); if( init_items != NULL ) { next->next = init_items; while( next->next != NULL ) next = next->next; return next; } /* ** Otherwise we try to open the file and search for it. */ if (opt = strrchr(fname, ':')) *opt++ = '\0'; else { pj_errno = -3; return(0); } if (fid = pj_open_lib(fname, "rt")) next = get_opt(start, fid, opt, next); else return(0); (void)fclose(fid); if (errno == 25) errno = 0; /* unknown problem with some sys errno<-25 */ /* ** If we seem to have gotten a result, insert it into the ** init file cache. */ if( next != NULL && next != orig_next ) pj_insert_initcache( name, orig_next->next ); return next; } /************************************************************************/ /* pj_init_plus() */ /* */ /* Same as pj_init() except it takes one argument string with */ /* individual arguments preceeded by '+', such as "+proj=utm */ /* +zone=11 +ellps=WGS84". */ /************************************************************************/ PJ * pj_init_plus( const char *definition ) { #define MAX_ARG 200 char *argv[MAX_ARG]; char *defn_copy; int argc = 0, i; PJ *result; /* make a copy that we can manipulate */ defn_copy = (char *) pj_malloc( strlen(definition)+1 ); strcpy( defn_copy, definition ); /* split into arguments based on '+' and trim white space */ for( i = 0; defn_copy[i] != '\0'; i++ ) { switch( defn_copy[i] ) { case '+': if( i == 0 || defn_copy[i-1] == '\0' ) { if( argc+1 == MAX_ARG ) { pj_errno = -44; return NULL; } argv[argc++] = defn_copy + i + 1; } break; case ' ': case '\t': case '\n': defn_copy[i] = '\0'; break; default: /* do nothing */; } } /* perform actual initialization */ result = pj_init( argc, argv ); pj_dalloc( defn_copy ); return result; } /************************************************************************/ /* pj_init() */ /* */ /* Main entry point for initialing a PJ projections */ /* definition. Note that the projection specific function is */ /* called to do the initial allocation so it can be created */ /* large enough to hold projection specific parameters. */ /************************************************************************/ PJ * pj_init(int argc, char **argv) { char *s, *name; paralist *start = NULL; PJ *(*proj)(PJ *); paralist *curr; int i; PJ *PIN = 0; const char *old_locale; errno = pj_errno = 0; start = NULL; old_locale = setlocale(LC_NUMERIC, NULL); setlocale(LC_NUMERIC,"C"); /* put arguments into internal linked list */ if (argc <= 0) { pj_errno = -1; goto bum_call; } for (i = 0; i < argc; ++i) if (i) curr = curr->next = pj_mkparam(argv[i]); else start = curr = pj_mkparam(argv[i]); if (pj_errno) goto bum_call; /* check if +init present */ if (pj_param(start, "tinit").i) { paralist *last = curr; if (!(curr = get_init(&start, curr, pj_param(start, "sinit").s))) goto bum_call; if (curr == last) { pj_errno = -2; goto bum_call; } } /* find projection selection */ if (!(name = pj_param(start, "sproj").s)) { pj_errno = -4; goto bum_call; } for (i = 0; (s = pj_list[i].id) && strcmp(name, s) ; ++i) ; if (!s) { pj_errno = -5; goto bum_call; } /* set defaults, unless inhibited */ if (!pj_param(start, "bno_defs").i) curr = get_defaults(&start, curr, name); proj = (PJ *(*)(PJ *)) pj_list[i].proj; /* allocate projection structure */ if (!(PIN = (*proj)(0))) goto bum_call; PIN->params = start; PIN->is_latlong = 0; PIN->is_geocent = 0; PIN->long_wrap_center = 0.0; /* set datum parameters */ if (pj_datum_set(start, PIN)) goto bum_call; /* set ellipsoid/sphere parameters */ if (pj_ell_set(start, &PIN->a, &PIN->es)) goto bum_call; PIN->a_orig = PIN->a; PIN->es_orig = PIN->es; PIN->e = sqrt(PIN->es); PIN->ra = 1. / PIN->a; PIN->one_es = 1. - PIN->es; if (PIN->one_es == 0.) { pj_errno = -6; goto bum_call; } PIN->rone_es = 1./PIN->one_es; /* Now that we have ellipse information check for WGS84 datum */ if( PIN->datum_type == PJD_3PARAM && PIN->datum_params[0] == 0.0 && PIN->datum_params[1] == 0.0 && PIN->datum_params[2] == 0.0 && PIN->a == 6378137.0 && ABS(PIN->es - 0.006694379990) < 0.000000000050 )/*WGS84/GRS80*/ { PIN->datum_type = PJD_WGS84; } /* set PIN->geoc coordinate system */ PIN->geoc = (PIN->es && pj_param(start, "bgeoc").i); /* over-ranging flag */ PIN->over = pj_param(start, "bover").i; /* longitude center for wrapping */ PIN->long_wrap_center = pj_param(start, "rlon_wrap").f; /* central meridian */ PIN->lam0=pj_param(start, "rlon_0").f; /* central latitude */ PIN->phi0 = pj_param(start, "rlat_0").f; /* false easting and northing */ PIN->x0 = pj_param(start, "dx_0").f; PIN->y0 = pj_param(start, "dy_0").f; /* general scaling factor */ if (pj_param(start, "tk_0").i) PIN->k0 = pj_param(start, "dk_0").f; else if (pj_param(start, "tk").i) PIN->k0 = pj_param(start, "dk").f; else PIN->k0 = 1.; if (PIN->k0 <= 0.) { pj_errno = -31; goto bum_call; } /* set units */ s = 0; if (name = pj_param(start, "sunits").s) { for (i = 0; (s = pj_units[i].id) && strcmp(name, s) ; ++i) ; if (!s) { pj_errno = -7; goto bum_call; } s = pj_units[i].to_meter; } if (s || (s = pj_param(start, "sto_meter").s)) { PIN->to_meter = strtod(s, &s); if (*s == '/') /* ratio number */ PIN->to_meter /= strtod(++s, 0); PIN->fr_meter = 1. / PIN->to_meter; } else PIN->to_meter = PIN->fr_meter = 1.; /* prime meridian */ s = 0; if (name = pj_param(start, "spm").s) { const char *value = NULL; char *next_str = NULL; for (i = 0; pj_prime_meridians[i].id != NULL; ++i ) { if( strcmp(name,pj_prime_meridians[i].id) == 0 ) { value = pj_prime_meridians[i].defn; break; } } if( value == NULL && (dmstor(name,&next_str) != 0.0 || *name == '0') && *next_str == '\0' ) value = name; if (!value) { pj_errno = -46; goto bum_call; } PIN->from_greenwich = dmstor(value,NULL); } else PIN->from_greenwich = 0.0; /* projection specific initialization */ if (!(PIN = (*proj)(PIN)) || errno || pj_errno) { bum_call: /* cleanup error return */ if (!pj_errno) pj_errno = errno; if (PIN) pj_free(PIN); else for ( ; start; start = curr) { curr = start->next; pj_dalloc(start); } PIN = 0; } setlocale(LC_NUMERIC,old_locale); return PIN; } /************************************************************************/ /* pj_free() */ /* */ /* This is the application callable entry point for destroying */ /* a projection definition. It does work generic to all */ /* projection types, and then calls the projection specific */ /* free function (P->pfree()) to do local work. This maps to */ /* the FREEUP code in the individual projection source files. */ /************************************************************************/ void pj_free(PJ *P) { if (P) { paralist *t = P->params, *n; /* free parameter list elements */ for (t = P->params; t; t = n) { n = t->next; pj_dalloc(t); } /* free projection parameters */ P->pfree(P); } } therion/extern/proj4/pj_initcache.c0000644000076400010400000001301611156465424020425 0ustar userAdministrators/****************************************************************************** * $Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: init file definition cache. * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 2009, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #include #include PJ_CVSID("$Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $"); static int cache_count = 0; static int cache_alloc = 0; static char **cache_key = NULL; static paralist **cache_paralist = NULL; /************************************************************************/ /* pj_clone_paralist() */ /* */ /* Allocate a copy of a parameter list. */ /************************************************************************/ paralist *pj_clone_paralist( const paralist *list) { paralist *list_copy = NULL, *next_copy = NULL; for( ; list != NULL; list = list->next ) { paralist *newitem = (paralist *) pj_malloc(sizeof(paralist) + strlen(list->param)); newitem->used = 0; newitem->next = 0; strcpy( newitem->param, list->param ); if( list_copy == NULL ) list_copy = newitem; else next_copy->next = newitem; next_copy = newitem; } return list_copy; } /************************************************************************/ /* pj_clear_initcache() */ /* */ /* Clear out all memory held in the init file cache. */ /************************************************************************/ void pj_clear_initcache() { if( cache_alloc > 0 ) { int i; pj_acquire_lock(); for( i = 0; i < cache_count; i++ ) { paralist *n, *t = cache_paralist[i]; pj_dalloc( cache_key[i] ); /* free parameter list elements */ for (; t != NULL; t = n) { n = t->next; pj_dalloc(t); } } pj_dalloc( cache_key ); pj_dalloc( cache_paralist ); cache_count = 0; cache_alloc= 0; cache_key = NULL; cache_paralist = NULL; pj_release_lock(); } } /************************************************************************/ /* pj_search_initcache() */ /* */ /* Search for a matching definition in the init cache. */ /************************************************************************/ paralist *pj_search_initcache( const char *filekey ) { int i; paralist *result = NULL; pj_acquire_lock(); for( i = 0; result == NULL && i < cache_count; i++) { if( strcmp(filekey,cache_key[i]) == 0 ) { result = pj_clone_paralist( cache_paralist[i] ); } } pj_release_lock(); return result; } /************************************************************************/ /* pj_insert_initcache() */ /* */ /* Insert a paralist definition in the init file cache. */ /************************************************************************/ void pj_insert_initcache( const char *filekey, const paralist *list ) { pj_acquire_lock(); /* ** Grow list if required. */ if( cache_count == cache_alloc ) { char **cache_key_new; paralist **cache_paralist_new; cache_alloc = cache_alloc * 2 + 15; cache_key_new = (char **) pj_malloc(sizeof(char*) * cache_alloc); memcpy( cache_key, cache_key_new, sizeof(char*) * cache_count); pj_dalloc( cache_key ); cache_key = cache_key_new; cache_paralist_new = (paralist **) pj_malloc(sizeof(paralist*) * cache_alloc); memcpy( cache_paralist_new, cache_paralist, sizeof(paralist*) * cache_count ); pj_dalloc( cache_paralist ); cache_paralist = cache_paralist_new; } /* ** Duplicate the filekey and paralist, and insert in cache. */ cache_key[cache_count] = (char *) pj_malloc(strlen(filekey)+1); strcpy( cache_key[cache_count], filekey ); cache_paralist[cache_count] = pj_clone_paralist( list ); cache_count++; pj_release_lock(); } therion/extern/proj4/pj_inv.c0000644000076400010400000000150111137333630017256 0ustar userAdministrators/* general inverse projection */ #define PJ_LIB__ #include #include # define EPS 1.0e-12 LP /* inverse projection entry */ pj_inv(XY xy, PJ *P) { LP lp; /* can't do as much preliminary checking as with forward */ if (xy.x == HUGE_VAL || xy.y == HUGE_VAL) { lp.lam = lp.phi = HUGE_VAL; pj_errno = -15; } errno = pj_errno = 0; xy.x = (xy.x * P->to_meter - P->x0) * P->ra; /* descale and de-offset */ xy.y = (xy.y * P->to_meter - P->y0) * P->ra; lp = (*P->inv)(xy, P); /* inverse project */ if (pj_errno || (pj_errno = errno)) lp.lam = lp.phi = HUGE_VAL; else { lp.lam += P->lam0; /* reduce from del lp.lam */ if (!P->over) lp.lam = adjlon(lp.lam); /* adjust longitude to CM */ if (P->geoc && fabs(fabs(lp.phi)-HALFPI) > EPS) lp.phi = atan(P->one_es * tan(lp.phi)); } return lp; } therion/extern/proj4/PJ_krovak.c0000644000076400010400000001666411130502664017675 0ustar userAdministrators/****************************************************************************** * $Id: PJ_krovak.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Implementation of the krovak (Krovak) projection. * Definition: http://www.ihsenergy.com/epsg/guid7.html#1.4.3 * Author: Thomas Flemming, tf@ttqv.com * ****************************************************************************** * Copyright (c) 2001, Thomas Flemming, tf@ttqv.com * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. *****************************************************************************/ #define PROJ_PARMS__ \ double C_x; #define PJ_LIB__ #include #include #include PJ_CVSID("$Id: PJ_krovak.c 1504 2009-01-06 02:11:57Z warmerdam $"); PROJ_HEAD(krovak, "Krovak") "\n\tPCyl., Ellps."; /** NOTES: According to EPSG the full Krovak projection method should have the following parameters. Within PROJ.4 the azimuth, and pseudo standard parallel are hardcoded in the algorithm and can't be altered from outside. The others all have defaults to match the common usage with Krovak projection. lat_0 = latitude of centre of the projection lon_0 = longitude of centre of the projection ** = azimuth (true) of the centre line passing through the centre of the projection ** = latitude of pseudo standard parallel k = scale factor on the pseudo standard parallel x_0 = False Easting of the centre of the projection at the apex of the cone y_0 = False Northing of the centre of the projection at the apex of the cone **/ FORWARD(e_forward); /* ellipsoid */ /* calculate xy from lat/lon */ char errmess[255]; char tmp[16]; /* Constants, identical to inverse transform function */ double s45, s90, e2, e, alfa, uq, u0, g, k, k1, n0, ro0, ad, a, s0, n; double gfi, u, fi0, lon17, lamdd, deltav, s, d, eps, ro; s45 = 0.785398163397448; /* 45° */ s90 = 2 * s45; fi0 = P->phi0; /* Latitude of projection centre 49° 30' */ /* Ellipsoid is used as Parameter in for.c and inv.c, therefore a must be set to 1 here. Ellipsoid Bessel 1841 a = 6377397.155m 1/f = 299.1528128, e2=0.006674372230614; */ a = 1; /* 6377397.155; */ /* e2 = P->es;*/ /* 0.006674372230614; */ e2 = 0.006674372230614; e = sqrt(e2); alfa = sqrt(1. + (e2 * pow(cos(fi0), 4)) / (1. - e2)); uq = 1.04216856380474; /* DU(2, 59, 42, 42.69689) */ u0 = asin(sin(fi0) / alfa); g = pow( (1. + e * sin(fi0)) / (1. - e * sin(fi0)) , alfa * e / 2. ); k = tan( u0 / 2. + s45) / pow (tan(fi0 / 2. + s45) , alfa) * g; k1 = P->k0; n0 = a * sqrt(1. - e2) / (1. - e2 * pow(sin(fi0), 2)); s0 = 1.37008346281555; /* Latitude of pseudo standard parallel 78° 30'00" N */ n = sin(s0); ro0 = k1 * n0 / tan(s0); ad = s90 - uq; /* Transformation */ gfi =pow ( ((1. + e * sin(lp.phi)) / (1. - e * sin(lp.phi))) , (alfa * e / 2.)); u= 2. * (atan(k * pow( tan(lp.phi / 2. + s45), alfa) / gfi)-s45); deltav = - lp.lam * alfa; s = asin(cos(ad) * sin(u) + sin(ad) * cos(u) * cos(deltav)); d = asin(cos(u) * sin(deltav) / cos(s)); eps = n * d; ro = ro0 * pow(tan(s0 / 2. + s45) , n) / pow(tan(s / 2. + s45) , n) ; /* x and y are reverted! */ xy.y = ro * cos(eps) / a; xy.x = ro * sin(eps) / a; if( !pj_param(P -> params, "tczech").i ) { xy.y *= -1.0; xy.x *= -1.0; } return (xy); } INVERSE(e_inverse); /* ellipsoid */ /* calculate lat/lon from xy */ /* Constants, identisch wie in der Umkehrfunktion */ double s45, s90, fi0, e2, e, alfa, uq, u0, g, k, k1, n0, ro0, ad, a, s0, n; double u, l24, lamdd, deltav, s, d, eps, ro, fi1, xy0, lon17; int ok; s45 = 0.785398163397448; /* 45° */ s90 = 2 * s45; fi0 = P->phi0; /* Latitude of projection centre 49° 30' */ /* Ellipsoid is used as Parameter in for.c and inv.c, therefore a must be set to 1 here. Ellipsoid Bessel 1841 a = 6377397.155m 1/f = 299.1528128, e2=0.006674372230614; */ a = 1; /* 6377397.155; */ /* e2 = P->es; */ /* 0.006674372230614; */ e2 = 0.006674372230614; e = sqrt(e2); alfa = sqrt(1. + (e2 * pow(cos(fi0), 4)) / (1. - e2)); uq = 1.04216856380474; /* DU(2, 59, 42, 42.69689) */ u0 = asin(sin(fi0) / alfa); g = pow( (1. + e * sin(fi0)) / (1. - e * sin(fi0)) , alfa * e / 2. ); k = tan( u0 / 2. + s45) / pow (tan(fi0 / 2. + s45) , alfa) * g; k1 = P->k0; n0 = a * sqrt(1. - e2) / (1. - e2 * pow(sin(fi0), 2)); s0 = 1.37008346281555; /* Latitude of pseudo standard parallel 78° 30'00" N */ n = sin(s0); ro0 = k1 * n0 / tan(s0); ad = s90 - uq; /* Transformation */ /* revert y, x*/ xy0=xy.x; xy.x=xy.y; xy.y=xy0; if( !pj_param(P -> params, "tczech").i ) { xy.x *= -1.0; xy.y *= -1.0; } ro = sqrt(xy.x * xy.x + xy.y * xy.y); eps = atan2(xy.y, xy.x); d = eps / sin(s0); s = 2. * (atan( pow(ro0 / ro, 1. / n) * tan(s0 / 2. + s45)) - s45); u = asin(cos(ad) * sin(s) - sin(ad) * cos(s) * cos(d)); deltav = asin(cos(s) * sin(d) / cos(u)); lp.lam = P->lam0 - deltav / alfa; /* ITERATION FOR lp.phi */ fi1 = u; ok = 0; do { lp.phi = 2. * ( atan( pow( k, -1. / alfa) * pow( tan(u / 2. + s45) , 1. / alfa) * pow( (1. + e * sin(fi1)) / (1. - e * sin(fi1)) , e / 2.) ) - s45); if (fabs(fi1 - lp.phi) < 0.000000000000001) ok=1; fi1 = lp.phi; } while (ok==0); lp.lam -= P->lam0; return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(krovak) double ts; /* read some Parameters, * here Latitude Truescale */ ts = pj_param(P->params, "rlat_ts").f; P->C_x = ts; /* we want Bessel as fixed ellipsoid */ P->a = 6377397.155; P->e = sqrt(P->es = 0.006674372230614); /* if latitude of projection center is not set, use 49d30'N */ if (!pj_param(P->params, "tlat_0").i) P->phi0 = 0.863937979737193; /* if center long is not set use 42d30'E of Ferro - 17d40' for Ferro */ /* that will correspond to using longitudes relative to greenwich */ /* as input and output, instead of lat/long relative to Ferro */ if (!pj_param(P->params, "tlon_0").i) P->lam0 = 0.7417649320975901 - 0.308341501185665; /* if scale not set default to 0.9999 */ if (!pj_param(P->params, "tk").i) P->k0 = 0.9999; /* always the same */ P->inv = e_inverse; P->fwd = e_forward; ENDENTRY(P) therion/extern/proj4/PJ_labrd.c0000644000076400010400000000615011137333632017455 0ustar userAdministrators#define PROJ_PARMS__ \ double Az, kRg, p0s, A, C, Ca, Cb, Cc, Cd; \ int rot; #define PJ_LIB__ #include PROJ_HEAD(labrd, "Laborde") "\n\tCyl, Sph\n\tSpecial for Madagascar"; #define EPS 1.e-10 FORWARD(e_forward); double V1, V2, ps, sinps, cosps, sinps2, cosps2, I1, I2, I3, I4, I5, I6, x2, y2, t; V1 = P->A * log( tan(FORTPI + .5 * lp.phi) ); t = P->e * sin(lp.phi); V2 = .5 * P->e * P->A * log ((1. + t)/(1. - t)); ps = 2. * (atan(exp(V1 - V2 + P->C)) - FORTPI); I1 = ps - P->p0s; cosps = cos(ps); cosps2 = cosps * cosps; sinps = sin(ps); sinps2 = sinps * sinps; I4 = P->A * cosps; I2 = .5 * P->A * I4 * sinps; I3 = I2 * P->A * P->A * (5. * cosps2 - sinps2) / 12.; I6 = I4 * P->A * P->A; I5 = I6 * (cosps2 - sinps2) / 6.; I6 *= P->A * P->A * (5. * cosps2 * cosps2 + sinps2 * (sinps2 - 18. * cosps2)) / 120.; t = lp.lam * lp.lam; xy.x = P->kRg * lp.lam * (I4 + t * (I5 + t * I6)); xy.y = P->kRg * (I1 + t * (I2 + t * I3)); x2 = xy.x * xy.x; y2 = xy.y * xy.y; V1 = 3. * xy.x * y2 - xy.x * x2; V2 = xy.y * y2 - 3. * x2 * xy.y; xy.x += P->Ca * V1 + P->Cb * V2; xy.y += P->Ca * V2 - P->Cb * V1; return (xy); } INVERSE(e_inverse); /* ellipsoid & spheroid */ double x2, y2, V1, V2, V3, V4, t, t2, ps, pe, tpe, s, I7, I8, I9, I10, I11, d, Re; int i; x2 = xy.x * xy.x; y2 = xy.y * xy.y; V1 = 3. * xy.x * y2 - xy.x * x2; V2 = xy.y * y2 - 3. * x2 * xy.y; V3 = xy.x * (5. * y2 * y2 + x2 * (-10. * y2 + x2 )); V4 = xy.y * (5. * x2 * x2 + y2 * (-10. * x2 + y2 )); xy.x += - P->Ca * V1 - P->Cb * V2 + P->Cc * V3 + P->Cd * V4; xy.y += P->Cb * V1 - P->Ca * V2 - P->Cd * V3 + P->Cc * V4; ps = P->p0s + xy.y / P->kRg; pe = ps + P->phi0 - P->p0s; for ( i = 20; i; --i) { V1 = P->A * log(tan(FORTPI + .5 * pe)); tpe = P->e * sin(pe); V2 = .5 * P->e * P->A * log((1. + tpe)/(1. - tpe)); t = ps - 2. * (atan(exp(V1 - V2 + P->C)) - FORTPI); pe += t; if (fabs(t) < EPS) break; } /* if (!i) { } else { } */ t = P->e * sin(pe); t = 1. - t * t; Re = P->one_es / ( t * sqrt(t) ); t = tan(ps); t2 = t * t; s = P->kRg * P->kRg; d = Re * P->k0 * P->kRg; I7 = t / (2. * d); I8 = t * (5. + 3. * t2) / (24. * d * s); d = cos(ps) * P->kRg * P->A; I9 = 1. / d; d *= s; I10 = (1. + 2. * t2) / (6. * d); I11 = (5. + t2 * (28. + 24. * t2)) / (120. * d * s); x2 = xy.x * xy.x; lp.phi = pe + x2 * (-I7 + I8 * x2); lp.lam = xy.x * (I9 + x2 * (-I10 + x2 * I11)); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(labrd) double Az, sinp, R, N, t; P->rot = pj_param(P->params, "bno_rot").i == 0; Az = pj_param(P->params, "razi").f; sinp = sin(P->phi0); t = 1. - P->es * sinp * sinp; N = 1. / sqrt(t); R = P->one_es * N / t; P->kRg = P->k0 * sqrt( N * R ); P->p0s = atan( sqrt(R / N) * tan(P->phi0) ); P->A = sinp / sin(P->p0s); t = P->e * sinp; P->C = .5 * P->e * P->A * log((1. + t)/(1. - t)) + - P->A * log( tan(FORTPI + .5 * P->phi0)) + log( tan(FORTPI + .5 * P->p0s)); t = Az + Az; P->Ca = (1. - cos(t)) * ( P->Cb = 1. / (12. * P->kRg * P->kRg) ); P->Cb *= sin(t); P->Cc = 3. * (P->Ca * P->Ca - P->Cb * P->Cb); P->Cd = 6. * P->Ca * P->Cb; P->inv = e_inverse; P->fwd = e_forward; ENDENTRY(P) therion/extern/proj4/PJ_laea.c0000644000076400010400000001173611137333636017305 0ustar userAdministrators#define PROJ_PARMS__ \ double sinb1; \ double cosb1; \ double xmf; \ double ymf; \ double mmf; \ double qp; \ double dd; \ double rq; \ double *apa; \ int mode; #define PJ_LIB__ #include PROJ_HEAD(laea, "Lambert Azimuthal Equal Area") "\n\tAzi, Sph&Ell"; #define sinph0 P->sinb1 #define cosph0 P->cosb1 #define EPS10 1.e-10 #define NITER 20 #define CONV 1.e-10 #define N_POLE 0 #define S_POLE 1 #define EQUIT 2 #define OBLIQ 3 FORWARD(e_forward); /* ellipsoid */ double coslam, sinlam, sinphi, q, sinb=0.0, cosb=0.0, b=0.0; coslam = cos(lp.lam); sinlam = sin(lp.lam); sinphi = sin(lp.phi); q = pj_qsfn(sinphi, P->e, P->one_es); if (P->mode == OBLIQ || P->mode == EQUIT) { sinb = q / P->qp; cosb = sqrt(1. - sinb * sinb); } switch (P->mode) { case OBLIQ: b = 1. + P->sinb1 * sinb + P->cosb1 * cosb * coslam; break; case EQUIT: b = 1. + cosb * coslam; break; case N_POLE: b = HALFPI + lp.phi; q = P->qp - q; break; case S_POLE: b = lp.phi - HALFPI; q = P->qp + q; break; } if (fabs(b) < EPS10) F_ERROR; switch (P->mode) { case OBLIQ: xy.y = P->ymf * ( b = sqrt(2. / b) ) * (P->cosb1 * sinb - P->sinb1 * cosb * coslam); goto eqcon; break; case EQUIT: xy.y = (b = sqrt(2. / (1. + cosb * coslam))) * sinb * P->ymf; eqcon: xy.x = P->xmf * b * cosb * sinlam; break; case N_POLE: case S_POLE: if (q >= 0.) { xy.x = (b = sqrt(q)) * sinlam; xy.y = coslam * (P->mode == S_POLE ? b : -b); } else xy.x = xy.y = 0.; break; } return (xy); } FORWARD(s_forward); /* spheroid */ double coslam, cosphi, sinphi; sinphi = sin(lp.phi); cosphi = cos(lp.phi); coslam = cos(lp.lam); switch (P->mode) { case EQUIT: xy.y = 1. + cosphi * coslam; goto oblcon; case OBLIQ: xy.y = 1. + sinph0 * sinphi + cosph0 * cosphi * coslam; oblcon: if (xy.y <= EPS10) F_ERROR; xy.x = (xy.y = sqrt(2. / xy.y)) * cosphi * sin(lp.lam); xy.y *= P->mode == EQUIT ? sinphi : cosph0 * sinphi - sinph0 * cosphi * coslam; break; case N_POLE: coslam = -coslam; case S_POLE: if (fabs(lp.phi + P->phi0) < EPS10) F_ERROR; xy.y = FORTPI - lp.phi * .5; xy.y = 2. * (P->mode == S_POLE ? cos(xy.y) : sin(xy.y)); xy.x = xy.y * sin(lp.lam); xy.y *= coslam; break; } return (xy); } INVERSE(e_inverse); /* ellipsoid */ double cCe, sCe, q, rho, ab=0.0; switch (P->mode) { case EQUIT: case OBLIQ: if ((rho = hypot(xy.x /= P->dd, xy.y *= P->dd)) < EPS10) { lp.lam = 0.; lp.phi = P->phi0; return (lp); } cCe = cos(sCe = 2. * asin(.5 * rho / P->rq)); xy.x *= (sCe = sin(sCe)); if (P->mode == OBLIQ) { q = P->qp * (ab = cCe * P->sinb1 + xy.y * sCe * P->cosb1 / rho); xy.y = rho * P->cosb1 * cCe - xy.y * P->sinb1 * sCe; } else { q = P->qp * (ab = xy.y * sCe / rho); xy.y = rho * cCe; } break; case N_POLE: xy.y = -xy.y; case S_POLE: if (!(q = (xy.x * xy.x + xy.y * xy.y)) ) { lp.lam = 0.; lp.phi = P->phi0; return (lp); } /* q = P->qp - q; */ ab = 1. - q / P->qp; if (P->mode == S_POLE) ab = - ab; break; } lp.lam = atan2(xy.x, xy.y); lp.phi = pj_authlat(asin(ab), P->apa); return (lp); } INVERSE(s_inverse); /* spheroid */ double cosz=0.0, rh, sinz=0.0; rh = hypot(xy.x, xy.y); if ((lp.phi = rh * .5 ) > 1.) I_ERROR; lp.phi = 2. * asin(lp.phi); if (P->mode == OBLIQ || P->mode == EQUIT) { sinz = sin(lp.phi); cosz = cos(lp.phi); } switch (P->mode) { case EQUIT: lp.phi = fabs(rh) <= EPS10 ? 0. : asin(xy.y * sinz / rh); xy.x *= sinz; xy.y = cosz * rh; break; case OBLIQ: lp.phi = fabs(rh) <= EPS10 ? P->phi0 : asin(cosz * sinph0 + xy.y * sinz * cosph0 / rh); xy.x *= sinz * cosph0; xy.y = (cosz - sin(lp.phi) * sinph0) * rh; break; case N_POLE: xy.y = -xy.y; lp.phi = HALFPI - lp.phi; break; case S_POLE: lp.phi -= HALFPI; break; } lp.lam = (xy.y == 0. && (P->mode == EQUIT || P->mode == OBLIQ)) ? 0. : atan2(xy.x, xy.y); return (lp); } FREEUP; if (P) { if (P->apa) pj_dalloc(P->apa); pj_dalloc(P); } } ENTRY1(laea,apa) double t; if (fabs((t = fabs(P->phi0)) - HALFPI) < EPS10) P->mode = P->phi0 < 0. ? S_POLE : N_POLE; else if (fabs(t) < EPS10) P->mode = EQUIT; else P->mode = OBLIQ; if (P->es) { double sinphi; P->e = sqrt(P->es); P->qp = pj_qsfn(1., P->e, P->one_es); P->mmf = .5 / (1. - P->es); P->apa = pj_authset(P->es); switch (P->mode) { case N_POLE: case S_POLE: P->dd = 1.; break; case EQUIT: P->dd = 1. / (P->rq = sqrt(.5 * P->qp)); P->xmf = 1.; P->ymf = .5 * P->qp; break; case OBLIQ: P->rq = sqrt(.5 * P->qp); sinphi = sin(P->phi0); P->sinb1 = pj_qsfn(sinphi, P->e, P->one_es) / P->qp; P->cosb1 = sqrt(1. - P->sinb1 * P->sinb1); P->dd = cos(P->phi0) / (sqrt(1. - P->es * sinphi * sinphi) * P->rq * P->cosb1); P->ymf = (P->xmf = P->rq) / P->dd; P->xmf *= P->dd; break; } P->inv = e_inverse; P->fwd = e_forward; } else { if (P->mode == OBLIQ) { sinph0 = sin(P->phi0); cosph0 = cos(P->phi0); } P->inv = s_inverse; P->fwd = s_forward; } ENDENTRY(P) therion/extern/proj4/PJ_lagrng.c0000644000076400010400000000161511137333640017643 0ustar userAdministrators#define PROJ_PARMS__ \ double hrw; \ double rw; \ double a1; #define TOL 1e-10 #define PJ_LIB__ #include PROJ_HEAD(lagrng, "Lagrange") "\n\tMisc Sph, no inv.\n\tW="; FORWARD(s_forward); /* spheroid */ double v, c; if (fabs(fabs(lp.phi) - HALFPI) < TOL) { xy.x = 0; xy.y = lp.phi < 0 ? -2. : 2.; } else { lp.phi = sin(lp.phi); v = P->a1 * pow((1. + lp.phi)/(1. - lp.phi), P->hrw); if ((c = 0.5 * (v + 1./v) + cos(lp.lam *= P->rw)) < TOL) F_ERROR; xy.x = 2. * sin(lp.lam) / c; xy.y = (v - 1./v) / c; } return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(lagrng) double phi1; if ((P->rw = pj_param(P->params, "dW").f) <= 0) E_ERROR(-27); P->hrw = 0.5 * (P->rw = 1. / P->rw); phi1 = pj_param(P->params, "rlat_1").f; if (fabs(fabs(phi1 = sin(phi1)) - 1.) < TOL) E_ERROR(-22); P->a1 = pow((1. - phi1)/(1. + phi1), P->hrw); P->es = 0.; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/PJ_larr.c0000644000076400010400000000062411137333642017332 0ustar userAdministrators#define PROJ_PARMS__ #define PJ_LIB__ #include PROJ_HEAD(larr, "Larrivee") "\n\tMisc Sph, no inv."; #define SIXTH .16666666666666666 FORWARD(s_forward); /* sphere */ xy.x = 0.5 * lp.lam * (1. + sqrt(cos(lp.phi))); xy.y = lp.phi / (cos(0.5 * lp.phi) * cos(SIXTH * lp.lam)); return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(larr) P->fwd = s_forward; P->inv = 0; P->es = 0.; ENDENTRY(P) therion/extern/proj4/PJ_lask.c0000644000076400010400000000127211137333644017326 0ustar userAdministrators#define PROJ_PARMS__ #define PJ_LIB__ #include PROJ_HEAD(lask, "Laskowski") "\n\tMisc Sph, no inv."; #define a10 0.975534 #define a12 -0.119161 #define a32 -0.0143059 #define a14 -0.0547009 #define b01 1.00384 #define b21 0.0802894 #define b03 0.0998909 #define b41 0.000199025 #define b23 -0.0285500 #define b05 -0.0491032 FORWARD(s_forward); /* sphere */ double l2, p2; l2 = lp.lam * lp.lam; p2 = lp.phi * lp.phi; xy.x = lp.lam * (a10 + p2 * (a12 + l2 * a32 + p2 * a14)); xy.y = lp.phi * (b01 + l2 * (b21 + p2 * b23 + l2 * b41) + p2 * (b03 + p2 * b05)); return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(lask) P->fwd = s_forward; P->inv = 0; P->es = 0.; ENDENTRY(P) therion/extern/proj4/pj_latlong.c0000644000076400010400000000533011130502664020124 0ustar userAdministrators/****************************************************************************** * $Id: pj_latlong.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Stub projection implementation for lat/long coordinates. We * don't actually change the coordinates, but we want proj=latlong * to act sort of like a projection. * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 2000, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ /* very loosely based upon DMA code by Bradford W. Drew */ #define PJ_LIB__ #include PROJ_HEAD(lonlat, "Lat/long (Geodetic)") "\n\t"; PROJ_HEAD(latlon, "Lat/long (Geodetic alias)") "\n\t"; PROJ_HEAD(latlong, "Lat/long (Geodetic alias)") "\n\t"; PROJ_HEAD(longlat, "Lat/long (Geodetic alias)") "\n\t"; FORWARD(forward); xy.x = lp.lam / P->a; xy.y = lp.phi / P->a; return xy; } INVERSE(inverse); lp.phi = xy.y * P->a; lp.lam = xy.x * P->a; return lp; } FREEUP; if (P) pj_dalloc(P); } ENTRY0(latlong) P->is_latlong = 1; P->x0 = 0.0; P->y0 = 0.0; P->inv = inverse; P->fwd = forward; ENDENTRY(P) ENTRY0(longlat) P->is_latlong = 1; P->x0 = 0.0; P->y0 = 0.0; P->inv = inverse; P->fwd = forward; ENDENTRY(P) ENTRY0(latlon) P->is_latlong = 1; P->x0 = 0.0; P->y0 = 0.0; P->inv = inverse; P->fwd = forward; ENDENTRY(P) ENTRY0(lonlat) P->is_latlong = 1; P->x0 = 0.0; P->y0 = 0.0; P->inv = inverse; P->fwd = forward; ENDENTRY(P) therion/extern/proj4/PJ_lcc.c0000644000076400010400000000556211256547730017150 0ustar userAdministrators#define PROJ_PARMS__ \ double phi1; \ double phi2; \ double n; \ double rho0; \ double c; \ int ellips; #define PJ_LIB__ #include PROJ_HEAD(lcc, "Lambert Conformal Conic") "\n\tConic, Sph&Ell\n\tlat_1= and lat_2= or lat_0"; # define EPS10 1.e-10 FORWARD(e_forward); /* ellipsoid & spheroid */ double rho; if (fabs(fabs(lp.phi) - HALFPI) < EPS10) { if ((lp.phi * P->n) <= 0.) F_ERROR; rho = 0.; } else rho = P->c * (P->ellips ? pow(pj_tsfn(lp.phi, sin(lp.phi), P->e), P->n) : pow(tan(FORTPI + .5 * lp.phi), -P->n)); xy.x = P->k0 * (rho * sin( lp.lam *= P->n ) ); xy.y = P->k0 * (P->rho0 - rho * cos(lp.lam) ); return (xy); } INVERSE(e_inverse); /* ellipsoid & spheroid */ double rho; xy.x /= P->k0; xy.y /= P->k0; if( (rho = hypot(xy.x, xy.y = P->rho0 - xy.y)) != 0.0) { if (P->n < 0.) { rho = -rho; xy.x = -xy.x; xy.y = -xy.y; } if (P->ellips) { if ((lp.phi = pj_phi2(pow(rho / P->c, 1./P->n), P->e)) == HUGE_VAL) I_ERROR; } else lp.phi = 2. * atan(pow(P->c / rho, 1./P->n)) - HALFPI; lp.lam = atan2(xy.x, xy.y) / P->n; } else { lp.lam = 0.; lp.phi = P->n > 0. ? HALFPI : - HALFPI; } return (lp); } SPECIAL(fac) { double rho; if (fabs(fabs(lp.phi) - HALFPI) < EPS10) { if ((lp.phi * P->n) <= 0.) return; rho = 0.; } else rho = P->c * (P->ellips ? pow(pj_tsfn(lp.phi, sin(lp.phi), P->e), P->n) : pow(tan(FORTPI + .5 * lp.phi), -P->n)); fac->code |= IS_ANAL_HK + IS_ANAL_CONV; fac->k = fac->h = P->k0 * P->n * rho / pj_msfn(sin(lp.phi), cos(lp.phi), P->es); fac->conv = - P->n * lp.lam; } FREEUP; if (P) pj_dalloc(P); } ENTRY0(lcc) double cosphi, sinphi; int secant; P->phi1 = pj_param(P->params, "rlat_1").f; if (pj_param(P->params, "tlat_2").i) P->phi2 = pj_param(P->params, "rlat_2").f; else { P->phi2 = P->phi1; if (!pj_param(P->params, "tlat_0").i) P->phi0 = P->phi1; } if (fabs(P->phi1 + P->phi2) < EPS10) E_ERROR(-21); P->n = sinphi = sin(P->phi1); cosphi = cos(P->phi1); secant = fabs(P->phi1 - P->phi2) >= EPS10; if( (P->ellips = (P->es != 0.)) ) { double ml1, m1; P->e = sqrt(P->es); m1 = pj_msfn(sinphi, cosphi, P->es); ml1 = pj_tsfn(P->phi1, sinphi, P->e); if (secant) { /* secant cone */ P->n = log(m1 / pj_msfn(sinphi = sin(P->phi2), cos(P->phi2), P->es)); P->n /= log(ml1 / pj_tsfn(P->phi2, sinphi, P->e)); } P->c = (P->rho0 = m1 * pow(ml1, -P->n) / P->n); P->rho0 *= (fabs(fabs(P->phi0) - HALFPI) < EPS10) ? 0. : pow(pj_tsfn(P->phi0, sin(P->phi0), P->e), P->n); } else { if (secant) P->n = log(cosphi / cos(P->phi2)) / log(tan(FORTPI + .5 * P->phi2) / tan(FORTPI + .5 * P->phi1)); P->c = cosphi * pow(tan(FORTPI + .5 * P->phi1), P->n) / P->n; P->rho0 = (fabs(fabs(P->phi0) - HALFPI) < EPS10) ? 0. : P->c * pow(tan(FORTPI + .5 * P->phi0), -P->n); } P->inv = e_inverse; P->fwd = e_forward; P->spc = fac; ENDENTRY(P) therion/extern/proj4/PJ_lcca.c0000644000076400010400000000341511130502664017270 0ustar userAdministratorsstatic const char RCS_ID[] = "$Id: PJ_lcca.c 1504 2009-01-06 02:11:57Z warmerdam $"; /* PROJ.4 Cartographic Projection System */ #define MAX_ITER 10 #define DEL_TOL 1e-12 #define PROJ_PARMS__ \ double *en; \ double r0, l, M0; \ double C; #define PJ_LIB__ #include PROJ_HEAD(lcca, "Lambert Conformal Conic Alternative") "\n\tConic, Sph&Ell\n\tlat_0="; static double /* func to compute dr */ fS(double S, double C) { return(S * ( 1. + S * S * C)); } static double /* deriv of fs */ fSp(double S, double C) { return(1. + 3.* S * S * C); } FORWARD(e_forward); /* ellipsoid */ double S, S3, r, dr; S = pj_mlfn(lp.phi, sin(lp.phi), cos(lp.phi), P->en) - P->M0; dr = fS(S, P->C); r = P->r0 - dr; xy.x = P->k0 * (r * sin( lp.lam *= P->l ) ); xy.y = P->k0 * (P->r0 - r * cos(lp.lam) ); return (xy); } INVERSE(e_inverse); /* ellipsoid & spheroid */ double theta, dr, S, dif; int i; xy.x /= P->k0; xy.y /= P->k0; theta = atan2(xy.x , P->r0 - xy.y); dr = xy.y - xy.x * tan(0.5 * theta); lp.lam = theta / P->l; S = dr; for (i = MAX_ITER; i ; --i) { S -= (dif = (fS(S, P->C) - dr) / fSp(S, P->C)); if (fabs(dif) < DEL_TOL) break; } if (!i) I_ERROR lp.phi = pj_inv_mlfn(S + P->M0, P->es, P->en); return (lp); } FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } } ENTRY0(lcca) double s2p0, N0, R0, tan0, tan20; if (!(P->en = pj_enfn(P->es))) E_ERROR_0; if (!pj_param(P->params, "tlat_0").i) E_ERROR(50); if (P->phi0 == 0.) E_ERROR(51); P->l = sin(P->phi0); P->M0 = pj_mlfn(P->phi0, P->l, cos(P->phi0), P->en); s2p0 = P->l * P->l; R0 = 1. / (1. - P->es * s2p0); N0 = sqrt(R0); R0 *= P->one_es * N0; tan0 = tan(P->phi0); tan20 = tan0 * tan0; P->r0 = N0 / tan0; P->C = 1. / (6. * R0 * N0); P->inv = e_inverse; P->fwd = e_forward; ENDENTRY(P) therion/extern/proj4/pj_list.c0000644000076400010400000000032711137333652017446 0ustar userAdministrators/* Projection System: default list of projections ** Use local definition of PJ_LIST_H for subset. */ #define PJ_LIST_H "pj_list.h" #include "projects.h" struct PJ_LIST *pj_get_list_ref() { return pj_list; } therion/extern/proj4/pj_list.h0000644000076400010400000001224111076404756017457 0ustar userAdministrators#ifdef DO_PJ_LIST_ID static const char PJ_LIST_H_ID[] = "@(#)pj_list.h 4.5 95/08/09 GIE REL"; #endif /* Full list of current projections for Tue Jan 11 12:27:04 EST 1994 ** ** Copy this file and retain only appropriate lines for subset list */ PROJ_HEAD(aea, "Albers Equal Area") PROJ_HEAD(aeqd, "Azimuthal Equidistant") PROJ_HEAD(airy, "Airy") PROJ_HEAD(aitoff, "Aitoff") PROJ_HEAD(alsk, "Mod. Stererographics of Alaska") PROJ_HEAD(apian, "Apian Globular I") PROJ_HEAD(august, "August Epicycloidal") PROJ_HEAD(bacon, "Bacon Globular") PROJ_HEAD(bipc, "Bipolar conic of western hemisphere") PROJ_HEAD(boggs, "Boggs Eumorphic") PROJ_HEAD(bonne, "Bonne (Werner lat_1=90)") PROJ_HEAD(cass, "Cassini") PROJ_HEAD(cc, "Central Cylindrical") PROJ_HEAD(cea, "Equal Area Cylindrical") PROJ_HEAD(chamb, "Chamberlin Trimetric") PROJ_HEAD(collg, "Collignon") PROJ_HEAD(crast, "Craster Parabolic (Putnins P4)") PROJ_HEAD(denoy, "Denoyer Semi-Elliptical") PROJ_HEAD(eck1, "Eckert I") PROJ_HEAD(eck2, "Eckert II") PROJ_HEAD(eck3, "Eckert III") PROJ_HEAD(eck4, "Eckert IV") PROJ_HEAD(eck5, "Eckert V") PROJ_HEAD(eck6, "Eckert VI") PROJ_HEAD(eqc, "Equidistant Cylindrical (Plate Caree)") PROJ_HEAD(eqdc, "Equidistant Conic") PROJ_HEAD(euler, "Euler") PROJ_HEAD(fahey, "Fahey") PROJ_HEAD(fouc, "Foucaut") PROJ_HEAD(fouc_s, "Foucaut Sinusoidal") PROJ_HEAD(gall, "Gall (Gall Stereographic)") PROJ_HEAD(geocent, "Geocentric") PROJ_HEAD(geos, "Geostationary Satellite View") PROJ_HEAD(gins8, "Ginsburg VIII (TsNIIGAiK)") PROJ_HEAD(gn_sinu, "General Sinusoidal Series") PROJ_HEAD(gnom, "Gnomonic") PROJ_HEAD(goode, "Goode Homolosine") PROJ_HEAD(gs48, "Mod. Stererographics of 48 U.S.") PROJ_HEAD(gs50, "Mod. Stererographics of 50 U.S.") PROJ_HEAD(hammer, "Hammer & Eckert-Greifendorff") PROJ_HEAD(hatano, "Hatano Asymmetrical Equal Area") PROJ_HEAD(imw_p, "Internation Map of the World Polyconic") PROJ_HEAD(kav5, "Kavraisky V") PROJ_HEAD(kav7, "Kavraisky VII") PROJ_HEAD(krovak, "Krovak") PROJ_HEAD(labrd, "Laborde") PROJ_HEAD(laea, "Lambert Azimuthal Equal Area") PROJ_HEAD(lagrng, "Lagrange") PROJ_HEAD(larr, "Larrivee") PROJ_HEAD(lask, "Laskowski") PROJ_HEAD(lonlat, "Lat/long (Geodetic)") PROJ_HEAD(latlon, "Lat/long (Geodetic alias)") PROJ_HEAD(latlong, "Lat/long (Geodetic alias)") PROJ_HEAD(longlat, "Lat/long (Geodetic alias)") PROJ_HEAD(lcc, "Lambert Conformal Conic") PROJ_HEAD(lcca, "Lambert Conformal Conic Alternative") PROJ_HEAD(leac, "Lambert Equal Area Conic") PROJ_HEAD(lee_os, "Lee Oblated Stereographic") PROJ_HEAD(loxim, "Loximuthal") PROJ_HEAD(lsat, "Space oblique for LANDSAT") PROJ_HEAD(mbt_s, "McBryde-Thomas Flat-Polar Sine") PROJ_HEAD(mbt_fps, "McBryde-Thomas Flat-Pole Sine (No. 2)") PROJ_HEAD(mbtfpp, "McBride-Thomas Flat-Polar Parabolic") PROJ_HEAD(mbtfpq, "McBryde-Thomas Flat-Polar Quartic") PROJ_HEAD(mbtfps, "McBryde-Thomas Flat-Polar Sinusoidal") PROJ_HEAD(merc, "Mercator") PROJ_HEAD(mil_os, "Miller Oblated Stereographic") PROJ_HEAD(mill, "Miller Cylindrical") PROJ_HEAD(moll, "Mollweide") PROJ_HEAD(murd1, "Murdoch I") PROJ_HEAD(murd2, "Murdoch II") PROJ_HEAD(murd3, "Murdoch III") PROJ_HEAD(nell, "Nell") PROJ_HEAD(nell_h, "Nell-Hammer") PROJ_HEAD(nicol, "Nicolosi Globular") PROJ_HEAD(nsper, "Near-sided perspective") PROJ_HEAD(nzmg, "New Zealand Map Grid") PROJ_HEAD(ob_tran, "General Oblique Transformation") PROJ_HEAD(ocea, "Oblique Cylindrical Equal Area") PROJ_HEAD(oea, "Oblated Equal Area") PROJ_HEAD(omerc, "Oblique Mercator") PROJ_HEAD(ortel, "Ortelius Oval") PROJ_HEAD(ortho, "Orthographic") PROJ_HEAD(pconic, "Perspective Conic") PROJ_HEAD(poly, "Polyconic (American)") PROJ_HEAD(putp1, "Putnins P1") PROJ_HEAD(putp2, "Putnins P2") PROJ_HEAD(putp3, "Putnins P3") PROJ_HEAD(putp3p, "Putnins P3'") PROJ_HEAD(putp4p, "Putnins P4'") PROJ_HEAD(putp5, "Putnins P5") PROJ_HEAD(putp5p, "Putnins P5'") PROJ_HEAD(putp6, "Putnins P6") PROJ_HEAD(putp6p, "Putnins P6'") PROJ_HEAD(qua_aut, "Quartic Authalic") PROJ_HEAD(robin, "Robinson") PROJ_HEAD(rouss, "Roussilhe Stereographic") PROJ_HEAD(rpoly, "Rectangular Polyconic") PROJ_HEAD(sinu, "Sinusoidal (Sanson-Flamsteed)") PROJ_HEAD(somerc, "Swiss. Obl. Mercator") PROJ_HEAD(stere, "Stereographic") PROJ_HEAD(sterea, "Oblique Stereographic Alternative") PROJ_HEAD(gstmerc, "Gauss-Schreiber Transverse Mercator (aka Gauss-Laborde Reunion)") PROJ_HEAD(tcc, "Transverse Central Cylindrical") PROJ_HEAD(tcea, "Transverse Cylindrical Equal Area") PROJ_HEAD(tissot, "Tissot Conic") PROJ_HEAD(tmerc, "Transverse Mercator") PROJ_HEAD(tpeqd, "Two Point Equidistant") PROJ_HEAD(tpers, "Tilted perspective") PROJ_HEAD(ups, "Universal Polar Stereographic") PROJ_HEAD(urm5, "Urmaev V") PROJ_HEAD(urmfps, "Urmaev Flat-Polar Sinusoidal") PROJ_HEAD(utm, "Universal Transverse Mercator (UTM)") PROJ_HEAD(vandg, "van der Grinten (I)") PROJ_HEAD(vandg2, "van der Grinten II") PROJ_HEAD(vandg3, "van der Grinten III") PROJ_HEAD(vandg4, "van der Grinten IV") PROJ_HEAD(vitk1, "Vitkovsky I") PROJ_HEAD(wag1, "Wagner I (Kavraisky VI)") PROJ_HEAD(wag2, "Wagner II") PROJ_HEAD(wag3, "Wagner III") PROJ_HEAD(wag4, "Wagner IV") PROJ_HEAD(wag5, "Wagner V") PROJ_HEAD(wag6, "Wagner VI") PROJ_HEAD(wag7, "Wagner VII") PROJ_HEAD(weren, "Werenskiold I") PROJ_HEAD(wink1, "Winkel I") PROJ_HEAD(wink2, "Winkel II") PROJ_HEAD(wintri, "Winkel Tripel") therion/extern/proj4/PJ_loxim.c0000644000076400010400000000203411137333654017522 0ustar userAdministrators#define PROJ_PARMS__ \ double phi1; \ double cosphi1; \ double tanphi1; #define PJ_LIB__ #include PROJ_HEAD(loxim, "Loximuthal") "\n\tPCyl Sph"; #define EPS 1e-8 FORWARD(s_forward); /* spheroid */ xy.y = lp.phi - P->phi1; if (fabs(xy.y) < EPS) xy.x = lp.lam * P->cosphi1; else { xy.x = FORTPI + 0.5 * lp.phi; if (fabs(xy.x) < EPS || fabs(fabs(xy.x) - HALFPI) < EPS) xy.x = 0.; else xy.x = lp.lam * xy.y / log( tan(xy.x) / P->tanphi1 ); } return (xy); } INVERSE(s_inverse); /* spheroid */ lp.phi = xy.y + P->phi1; if (fabs(xy.y) < EPS) lp.lam = xy.x / P->cosphi1; else if (fabs( lp.lam = FORTPI + 0.5 * lp.phi ) < EPS || fabs(fabs(lp.lam) - HALFPI) < EPS) lp.lam = 0.; else lp.lam = xy.x * log( tan(lp.lam) / P->tanphi1 ) / xy.y ; return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(loxim); P->phi1 = pj_param(P->params, "rlat_1").f; if ((P->cosphi1 = cos(P->phi1)) < EPS) E_ERROR(-22); P->tanphi1 = tan(FORTPI + 0.5 * P->phi1); P->inv = s_inverse; P->fwd = s_forward; P->es = 0.; ENDENTRY(P) therion/extern/proj4/PJ_lsat.c0000644000076400010400000001216411137333656017344 0ustar userAdministrators/* based upon Snyder and Linck, USGS-NMD */ #define PROJ_PARMS__ \ double a2, a4, b, c1, c3; \ double q, t, u, w, p22, sa, ca, xj, rlm, rlm2; #define PJ_LIB__ #include PROJ_HEAD(lsat, "Space oblique for LANDSAT") "\n\tCyl, Sph&Ell\n\tlsat= path="; #define TOL 1e-7 #define PI_HALFPI 4.71238898038468985766 #define TWOPI_HALFPI 7.85398163397448309610 static void seraz0(double lam, double mult, PJ *P) { double sdsq, h, s, fc, sd, sq, d__1; lam *= DEG_TO_RAD; sd = sin(lam); sdsq = sd * sd; s = P->p22 * P->sa * cos(lam) * sqrt((1. + P->t * sdsq) / (( 1. + P->w * sdsq) * (1. + P->q * sdsq))); d__1 = 1. + P->q * sdsq; h = sqrt((1. + P->q * sdsq) / (1. + P->w * sdsq)) * ((1. + P->w * sdsq) / (d__1 * d__1) - P->p22 * P->ca); sq = sqrt(P->xj * P->xj + s * s); P->b += fc = mult * (h * P->xj - s * s) / sq; P->a2 += fc * cos(lam + lam); P->a4 += fc * cos(lam * 4.); fc = mult * s * (h + P->xj) / sq; P->c1 += fc * cos(lam); P->c3 += fc * cos(lam * 3.); } FORWARD(e_forward); /* ellipsoid */ int l, nn; double lamt, xlam, sdsq, c, d, s, lamdp, phidp, lampp, tanph, lamtp, cl, sd, sp, fac, sav, tanphi; if (lp.phi > HALFPI) lp.phi = HALFPI; else if (lp.phi < -HALFPI) lp.phi = -HALFPI; lampp = lp.phi >= 0. ? HALFPI : PI_HALFPI; tanphi = tan(lp.phi); for (nn = 0;;) { sav = lampp; lamtp = lp.lam + P->p22 * lampp; cl = cos(lamtp); if (fabs(cl) < TOL) lamtp -= TOL; fac = lampp - sin(lampp) * (cl < 0. ? -HALFPI : HALFPI); for (l = 50; l; --l) { lamt = lp.lam + P->p22 * sav; if (fabs(c = cos(lamt)) < TOL) lamt -= TOL; xlam = (P->one_es * tanphi * P->sa + sin(lamt) * P->ca) / c; lamdp = atan(xlam) + fac; if (fabs(fabs(sav) - fabs(lamdp)) < TOL) break; sav = lamdp; } if (!l || ++nn >= 3 || (lamdp > P->rlm && lamdp < P->rlm2)) break; if (lamdp <= P->rlm) lampp = TWOPI_HALFPI; else if (lamdp >= P->rlm2) lampp = HALFPI; } if (l) { sp = sin(lp.phi); phidp = aasin((P->one_es * P->ca * sp - P->sa * cos(lp.phi) * sin(lamt)) / sqrt(1. - P->es * sp * sp)); tanph = log(tan(FORTPI + .5 * phidp)); sd = sin(lamdp); sdsq = sd * sd; s = P->p22 * P->sa * cos(lamdp) * sqrt((1. + P->t * sdsq) / ((1. + P->w * sdsq) * (1. + P->q * sdsq))); d = sqrt(P->xj * P->xj + s * s); xy.x = P->b * lamdp + P->a2 * sin(2. * lamdp) + P->a4 * sin(lamdp * 4.) - tanph * s / d; xy.y = P->c1 * sd + P->c3 * sin(lamdp * 3.) + tanph * P->xj / d; } else xy.x = xy.y = HUGE_VAL; return xy; } INVERSE(e_inverse); /* ellipsoid */ int nn; double lamt, sdsq, s, lamdp, phidp, sppsq, dd, sd, sl, fac, scl, sav, spp; lamdp = xy.x / P->b; nn = 50; do { sav = lamdp; sd = sin(lamdp); sdsq = sd * sd; s = P->p22 * P->sa * cos(lamdp) * sqrt((1. + P->t * sdsq) / ((1. + P->w * sdsq) * (1. + P->q * sdsq))); lamdp = xy.x + xy.y * s / P->xj - P->a2 * sin( 2. * lamdp) - P->a4 * sin(lamdp * 4.) - s / P->xj * ( P->c1 * sin(lamdp) + P->c3 * sin(lamdp * 3.)); lamdp /= P->b; } while (fabs(lamdp - sav) >= TOL && --nn); sl = sin(lamdp); fac = exp(sqrt(1. + s * s / P->xj / P->xj) * (xy.y - P->c1 * sl - P->c3 * sin(lamdp * 3.))); phidp = 2. * (atan(fac) - FORTPI); dd = sl * sl; if (fabs(cos(lamdp)) < TOL) lamdp -= TOL; spp = sin(phidp); sppsq = spp * spp; lamt = atan(((1. - sppsq * P->rone_es) * tan(lamdp) * P->ca - spp * P->sa * sqrt((1. + P->q * dd) * ( 1. - sppsq) - sppsq * P->u) / cos(lamdp)) / (1. - sppsq * (1. + P->u))); sl = lamt >= 0. ? 1. : -1.; scl = cos(lamdp) >= 0. ? 1. : -1; lamt -= HALFPI * (1. - scl) * sl; lp.lam = lamt - P->p22 * lamdp; if (fabs(P->sa) < TOL) lp.phi = aasin(spp / sqrt(P->one_es * P->one_es + P->es * sppsq)); else lp.phi = atan((tan(lamdp) * cos(lamt) - P->ca * sin(lamt)) / (P->one_es * P->sa)); return lp; } FREEUP; if (P) pj_dalloc(P); } ENTRY0(lsat) int land, path; double lam, alf, esc, ess; land = pj_param(P->params, "ilsat").i; if (land <= 0 || land > 5) E_ERROR(-28); path = pj_param(P->params, "ipath").i; if (path <= 0 || path > (land <= 3 ? 251 : 233)) E_ERROR(-29); if (land <= 3) { P->lam0 = DEG_TO_RAD * 128.87 - TWOPI / 251. * path; P->p22 = 103.2669323; alf = DEG_TO_RAD * 99.092; } else { P->lam0 = DEG_TO_RAD * 129.3 - TWOPI / 233. * path; P->p22 = 98.8841202; alf = DEG_TO_RAD * 98.2; } P->p22 /= 1440.; P->sa = sin(alf); P->ca = cos(alf); if (fabs(P->ca) < 1e-9) P->ca = 1e-9; esc = P->es * P->ca * P->ca; ess = P->es * P->sa * P->sa; P->w = (1. - esc) * P->rone_es; P->w = P->w * P->w - 1.; P->q = ess * P->rone_es; P->t = ess * (2. - P->es) * P->rone_es * P->rone_es; P->u = esc * P->rone_es; P->xj = P->one_es * P->one_es * P->one_es; P->rlm = PI * (1. / 248. + .5161290322580645); P->rlm2 = P->rlm + TWOPI; P->a2 = P->a4 = P->b = P->c1 = P->c3 = 0.; seraz0(0., 1., P); for (lam = 9.; lam <= 81.0001; lam += 18.) seraz0(lam, 4., P); for (lam = 18; lam <= 72.0001; lam += 18.) seraz0(lam, 2., P); seraz0(90., 1., P); P->a2 /= 30.; P->a4 /= 60.; P->b /= 30.; P->c1 /= 15.; P->c3 /= 45.; P->inv = e_inverse; P->fwd = e_forward; ENDENTRY(P) therion/extern/proj4/pj_malloc.c0000644000076400010400000000150411137333660017737 0ustar userAdministrators/* allocate and deallocate memory */ /* These routines are used so that applications can readily replace ** projection system memory allocation/deallocation call with custom ** application procedures. */ #include #include void * pj_malloc(size_t size) { // Currently, pj_malloc is a hack to solve an errno problem. // The problem is described in more details at // https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=86420. // It seems, that pj_init and similar functions incorrectly // (under debian/glibs-2.3.2) assume that pj_malloc resets // errno after success. pj_malloc tries to mimic this. int old_errno = errno; void *res = malloc(size); if ( res && !old_errno ) errno = 0; return res; } void pj_dalloc(void *ptr) { free(ptr); } therion/extern/proj4/PJ_mbtfpp.c0000644000076400010400000000202311137333664017661 0ustar userAdministrators#define PJ_LIB__ #include PROJ_HEAD(mbtfpp, "McBride-Thomas Flat-Polar Parabolic") "\n\tCyl., Sph."; #define CS .95257934441568037152 #define FXC .92582009977255146156 #define FYC 3.40168025708304504493 #define C23 .66666666666666666666 #define C13 .33333333333333333333 #define ONEEPS 1.0000001 FORWARD(s_forward); /* spheroid */ lp.phi = asin(CS * sin(lp.phi)); xy.x = FXC * lp.lam * (2. * cos(C23 * lp.phi) - 1.); xy.y = FYC * sin(C13 * lp.phi); return (xy); } INVERSE(s_inverse); /* spheroid */ lp.phi = xy.y / FYC; if (fabs(lp.phi) >= 1.) { if (fabs(lp.phi) > ONEEPS) I_ERROR else lp.phi = (lp.phi < 0.) ? -HALFPI : HALFPI; } else lp.phi = asin(lp.phi); lp.lam = xy.x / ( FXC * (2. * cos(C23 * (lp.phi *= 3.)) - 1.) ); if (fabs(lp.phi = sin(lp.phi) / CS) >= 1.) { if (fabs(lp.phi) > ONEEPS) I_ERROR else lp.phi = (lp.phi < 0.) ? -HALFPI : HALFPI; } else lp.phi = asin(lp.phi); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(mbtfpp) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/PJ_mbtfpq.c0000644000076400010400000000251211137333666017667 0ustar userAdministrators#define PJ_LIB__ #include PROJ_HEAD(mbtfpq, "McBryde-Thomas Flat-Polar Quartic") "\n\tCyl., Sph."; #define NITER 20 #define EPS 1e-7 #define ONETOL 1.000001 #define C 1.70710678118654752440 #define RC 0.58578643762690495119 #define FYC 1.87475828462269495505 #define RYC 0.53340209679417701685 #define FXC 0.31245971410378249250 #define RXC 3.20041258076506210122 FORWARD(s_forward); /* spheroid */ double th1, c; int i; c = C * sin(lp.phi); for (i = NITER; i; --i) { lp.phi -= th1 = (sin(.5*lp.phi) + sin(lp.phi) - c) / (.5*cos(.5*lp.phi) + cos(lp.phi)); if (fabs(th1) < EPS) break; } xy.x = FXC * lp.lam * (1.0 + 2. * cos(lp.phi)/cos(0.5 * lp.phi)); xy.y = FYC * sin(0.5 * lp.phi); return (xy); } INVERSE(s_inverse); /* spheroid */ double t; lp.phi = RYC * xy.y; if (fabs(lp.phi) > 1.) { if (fabs(lp.phi) > ONETOL) I_ERROR else if (lp.phi < 0.) { t = -1.; lp.phi = -PI; } else { t = 1.; lp.phi = PI; } } else lp.phi = 2. * asin(t = lp.phi); lp.lam = RXC * xy.x / (1. + 2. * cos(lp.phi)/cos(0.5 * lp.phi)); lp.phi = RC * (t + sin(lp.phi)); if (fabs(lp.phi) > 1.) if (fabs(lp.phi) > ONETOL) I_ERROR else lp.phi = lp.phi < 0. ? -HALFPI : HALFPI; else lp.phi = asin(lp.phi); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(mbtfpq) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/PJ_mbt_fps.c0000644000076400010400000000173711137333670020033 0ustar userAdministrators#define PJ_LIB__ #include PROJ_HEAD(mbt_fps, "McBryde-Thomas Flat-Pole Sine (No. 2)") "\n\tCyl., Sph."; #define MAX_ITER 10 #define LOOP_TOL 1e-7 #define C1 0.45503 #define C2 1.36509 #define C3 1.41546 #define C_x 0.22248 #define C_y 1.44492 #define C1_2 0.33333333333333333333333333 FORWARD(s_forward); /* spheroid */ double k, V, t; int i; k = C3 * sin(lp.phi); for (i = MAX_ITER; i ; --i) { t = lp.phi / C2; lp.phi -= V = (C1 * sin(t) + sin(lp.phi) - k) / (C1_2 * cos(t) + cos(lp.phi)); if (fabs(V) < LOOP_TOL) break; } t = lp.phi / C2; xy.x = C_x * lp.lam * (1. + 3. * cos(lp.phi)/cos(t) ); xy.y = C_y * sin(t); return (xy); } INVERSE(s_inverse); /* spheroid */ double t, s; lp.phi = C2 * (t = aasin(xy.y / C_y)); lp.lam = xy.x / (C_x * (1. + 3. * cos(lp.phi)/cos(t))); lp.phi = aasin((C1 * sin(t) + sin(lp.phi)) / C3); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(mbt_fps) P->es = 0; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/PJ_merc.c0000644000076400010400000000233111137333674017322 0ustar userAdministrators#define PJ_LIB__ #include PROJ_HEAD(merc, "Mercator") "\n\tCyl, Sph&Ell\n\tlat_ts="; #define EPS10 1.e-10 FORWARD(e_forward); /* ellipsoid */ if (fabs(fabs(lp.phi) - HALFPI) <= EPS10) F_ERROR; xy.x = P->k0 * lp.lam; xy.y = - P->k0 * log(pj_tsfn(lp.phi, sin(lp.phi), P->e)); return (xy); } FORWARD(s_forward); /* spheroid */ if (fabs(fabs(lp.phi) - HALFPI) <= EPS10) F_ERROR; xy.x = P->k0 * lp.lam; xy.y = P->k0 * log(tan(FORTPI + .5 * lp.phi)); return (xy); } INVERSE(e_inverse); /* ellipsoid */ if ((lp.phi = pj_phi2(exp(- xy.y / P->k0), P->e)) == HUGE_VAL) I_ERROR; lp.lam = xy.x / P->k0; return (lp); } INVERSE(s_inverse); /* spheroid */ lp.phi = HALFPI - 2. * atan(exp(-xy.y / P->k0)); lp.lam = xy.x / P->k0; return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(merc) double phits=0.0; int is_phits; if( (is_phits = pj_param(P->params, "tlat_ts").i) ) { phits = fabs(pj_param(P->params, "rlat_ts").f); if (phits >= HALFPI) E_ERROR(-24); } if (P->es) { /* ellipsoid */ if (is_phits) P->k0 = pj_msfn(sin(phits), cos(phits), P->es); P->inv = e_inverse; P->fwd = e_forward; } else { /* sphere */ if (is_phits) P->k0 = cos(phits); P->inv = s_inverse; P->fwd = s_forward; } ENDENTRY(P) therion/extern/proj4/PJ_mill.c0000644000076400010400000000066011137333676017336 0ustar userAdministrators#define PJ_LIB__ # include PROJ_HEAD(mill, "Miller Cylindrical") "\n\tCyl, Sph"; FORWARD(s_forward); /* spheroid */ xy.x = lp.lam; xy.y = log(tan(FORTPI + lp.phi * .4)) * 1.25; return (xy); } INVERSE(s_inverse); /* spheroid */ lp.lam = xy.x; lp.phi = 2.5 * (atan(exp(.8 * xy.y)) - FORTPI); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(mill) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/pj_mlfn.c0000644000076400010400000000303411137333700017417 0ustar userAdministrators#include /* meridinal distance for ellipsoid and inverse ** 8th degree - accurate to < 1e-5 meters when used in conjuction ** with typical major axis values. ** Inverse determines phi to EPS (1e-11) radians, about 1e-6 seconds. */ #define C00 1. #define C02 .25 #define C04 .046875 #define C06 .01953125 #define C08 .01068115234375 #define C22 .75 #define C44 .46875 #define C46 .01302083333333333333 #define C48 .00712076822916666666 #define C66 .36458333333333333333 #define C68 .00569661458333333333 #define C88 .3076171875 #define EPS 1e-11 #define MAX_ITER 10 #define EN_SIZE 5 double * pj_enfn(double es) { double t, *en; if (en = (double *)pj_malloc(EN_SIZE * sizeof(double))) { en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08))); en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08))); en[2] = (t = es * es) * (C44 - es * (C46 + es * C48)); en[3] = (t *= es) * (C66 - es * C68); en[4] = t * es * C88; } /* else return NULL if unable to allocate memory */ return en; } double pj_mlfn(double phi, double sphi, double cphi, double *en) { cphi *= sphi; sphi *= sphi; return(en[0] * phi - cphi * (en[1] + sphi*(en[2] + sphi*(en[3] + sphi*en[4])))); } double pj_inv_mlfn(double arg, double es, double *en) { double s, t, phi, k = 1./(1.-es); int i; phi = arg; for (i = MAX_ITER; i ; --i) { /* rarely goes over 2 iterations */ s = sin(phi); t = 1. - es * s * s; phi -= t = (pj_mlfn(phi, s, cos(phi), en) - arg) * (t * sqrt(t)) * k; if (fabs(t) < EPS) return phi; } pj_errno = -17; return phi; } therion/extern/proj4/PJ_mod_ster.c0000644000076400010400000001133511137333702020204 0ustar userAdministrators/* based upon Snyder and Linck, USGS-NMD */ #define PROJ_PARMS__ \ COMPLEX *zcoeff; \ double cchio, schio; \ int n; #define PJ_LIB__ #include PROJ_HEAD(mil_os, "Miller Oblated Stereographic") "\n\tAzi(mod)"; PROJ_HEAD(lee_os, "Lee Oblated Stereographic") "\n\tAzi(mod)"; PROJ_HEAD(gs48, "Mod. Stererographics of 48 U.S.") "\n\tAzi(mod)"; PROJ_HEAD(alsk, "Mod. Stererographics of Alaska") "\n\tAzi(mod)"; PROJ_HEAD(gs50, "Mod. Stererographics of 50 U.S.") "\n\tAzi(mod)"; #define EPSLN 1e-10 FORWARD(e_forward); /* ellipsoid */ double sinlon, coslon, esphi, chi, schi, cchi, s; COMPLEX p; sinlon = sin(lp.lam); coslon = cos(lp.lam); esphi = P->e * sin(lp.phi); chi = 2. * atan(tan((HALFPI + lp.phi) * .5) * pow((1. - esphi) / (1. + esphi), P->e * .5)) - HALFPI; schi = sin(chi); cchi = cos(chi); s = 2. / (1. + P->schio * schi + P->cchio * cchi * coslon); p.r = s * cchi * sinlon; p.i = s * (P->cchio * schi - P->schio * cchi * coslon); p = pj_zpoly1(p, P->zcoeff, P->n); xy.x = p.r; xy.y = p.i; return xy; } INVERSE(e_inverse); /* ellipsoid */ int nn; COMPLEX p, fxy, fpxy, dp; double den, rh, z, sinz, cosz, chi, phi, dphi, esphi; p.r = xy.x; p.i = xy.y; for (nn = 20; nn ;--nn) { fxy = pj_zpolyd1(p, P->zcoeff, P->n, &fpxy); fxy.r -= xy.x; fxy.i -= xy.y; den = fpxy.r * fpxy.r + fpxy.i * fpxy.i; dp.r = -(fxy.r * fpxy.r + fxy.i * fpxy.i) / den; dp.i = -(fxy.i * fpxy.r - fxy.r * fpxy.i) / den; p.r += dp.r; p.i += dp.i; if ((fabs(dp.r) + fabs(dp.i)) <= EPSLN) break; } if (nn) { rh = hypot(p.r, p.i); z = 2. * atan(.5 * rh); sinz = sin(z); cosz = cos(z); lp.lam = P->lam0; if (fabs(rh) <= EPSLN) { lp.phi = P->phi0; return lp; } chi = aasin(cosz * P->schio + p.i * sinz * P->cchio / rh); phi = chi; for (nn = 20; nn ;--nn) { esphi = P->e * sin(phi); dphi = 2. * atan(tan((HALFPI + chi) * .5) * pow((1. + esphi) / (1. - esphi), P->e * .5)) - HALFPI - phi; phi += dphi; if (fabs(dphi) <= EPSLN) break; } } if (nn) { lp.phi = phi; lp.lam = atan2(p.r * sinz, rh * P->cchio * cosz - p.i * P->schio * sinz); } else lp.lam = lp.phi = HUGE_VAL; return lp; } FREEUP; if (P) pj_dalloc(P); } static PJ * setup(PJ *P) { /* general initialization */ double esphi, chio; if (P->es) { esphi = P->e * sin(P->phi0); chio = 2. * atan(tan((HALFPI + P->phi0) * .5) * pow((1. - esphi) / (1. + esphi), P->e * .5)) - HALFPI; } else chio = P->phi0; P->schio = sin(chio); P->cchio = cos(chio); P->inv = e_inverse; P->fwd = e_forward; return P; } ENTRY0(mil_os) static COMPLEX /* Miller Oblated Stereographic */ AB[] = { {0.924500, 0.}, {0., 0.}, {0.019430, 0.} }; P->n = 2; P->lam0 = DEG_TO_RAD * 20.; P->phi0 = DEG_TO_RAD * 18.; P->zcoeff = AB; P->es = 0.; ENDENTRY(setup(P)) ENTRY0(lee_os) static COMPLEX /* Lee Oblated Stereographic */ AB[] = { {0.721316, 0.}, {0., 0.}, {-0.0088162, -0.00617325} }; P->n = 2; P->lam0 = DEG_TO_RAD * -165.; P->phi0 = DEG_TO_RAD * -10.; P->zcoeff = AB; P->es = 0.; ENDENTRY(setup(P)) ENTRY0(gs48) static COMPLEX /* 48 United States */ AB[] = { {0.98879, 0.}, {0., 0.}, {-0.050909, 0.}, {0., 0.}, {0.075528, 0.} }; P->n = 4; P->lam0 = DEG_TO_RAD * -96.; P->phi0 = DEG_TO_RAD * -39.; P->zcoeff = AB; P->es = 0.; P->a = 6370997.; ENDENTRY(setup(P)) ENTRY0(alsk) static COMPLEX ABe[] = { /* Alaska ellipsoid */ {.9945303, 0.}, {.0052083, -.0027404}, {.0072721, .0048181}, {-.0151089, -.1932526}, {.0642675, -.1381226}, {.3582802, -.2884586}}, ABs[] = { /* Alaska sphere */ {.9972523, 0.}, {.0052513, -.0041175}, {.0074606, .0048125}, {-.0153783, -.1968253}, {.0636871, -.1408027}, {.3660976, -.2937382} }; P->n = 5; P->lam0 = DEG_TO_RAD * -152.; P->phi0 = DEG_TO_RAD * 64.; if (P->es) { /* fixed ellipsoid/sphere */ P->zcoeff = ABe; P->a = 6378206.4; P->e = sqrt(P->es = 0.00676866); } else { P->zcoeff = ABs; P->a = 6370997.; } ENDENTRY(setup(P)) ENTRY0(gs50) static COMPLEX ABe[] = { /* GS50 ellipsoid */ {.9827497, 0.}, {.0210669, .0053804}, {-.1031415, -.0571664}, {-.0323337, -.0322847}, {.0502303, .1211983}, {.0251805, .0895678}, {-.0012315, -.1416121}, {.0072202, -.1317091}, {-.0194029, .0759677}, {-.0210072, .0834037} }, ABs[] = { /* GS50 sphere */ {.9842990, 0.}, {.0211642, .0037608}, {-.1036018, -.0575102}, {-.0329095, -.0320119}, {.0499471, .1223335}, {.0260460, .0899805}, {.0007388, -.1435792}, {.0075848, -.1334108}, {-.0216473, .0776645}, {-.0225161, .0853673} }; P->n = 9; P->lam0 = DEG_TO_RAD * -120.; P->phi0 = DEG_TO_RAD * 45.; if (P->es) { /* fixed ellipsoid/sphere */ P->zcoeff = ABe; P->a = 6378206.4; P->e = sqrt(P->es = 0.00676866); } else { P->zcoeff = ABs; P->a = 6370997.; } ENDENTRY(setup(P)) therion/extern/proj4/PJ_moll.c0000644000076400010400000000252211137333706017335 0ustar userAdministrators#define PROJ_PARMS__ \ double C_x, C_y, C_p; #define PJ_LIB__ #include PROJ_HEAD(moll, "Mollweide") "\n\tPCyl., Sph."; PROJ_HEAD(wag4, "Wagner IV") "\n\tPCyl., Sph."; PROJ_HEAD(wag5, "Wagner V") "\n\tPCyl., Sph."; #define MAX_ITER 10 #define LOOP_TOL 1e-7 FORWARD(s_forward); /* spheroid */ double k, V; int i; k = P->C_p * sin(lp.phi); for (i = MAX_ITER; i ; --i) { lp.phi -= V = (lp.phi + sin(lp.phi) - k) / (1. + cos(lp.phi)); if (fabs(V) < LOOP_TOL) break; } if (!i) lp.phi = (lp.phi < 0.) ? -HALFPI : HALFPI; else lp.phi *= 0.5; xy.x = P->C_x * lp.lam * cos(lp.phi); xy.y = P->C_y * sin(lp.phi); return (xy); } INVERSE(s_inverse); /* spheroid */ double th, s; lp.phi = aasin(xy.y / P->C_y); lp.lam = xy.x / (P->C_x * cos(lp.phi)); lp.phi += lp.phi; lp.phi = aasin((lp.phi + sin(lp.phi)) / P->C_p); return (lp); } FREEUP; if (P) pj_dalloc(P); } static PJ * setup(PJ *P, double p) { double r, sp, p2 = p + p; P->es = 0; sp = sin(p); r = sqrt(TWOPI * sp / (p2 + sin(p2))); P->C_x = 2. * r / PI; P->C_y = r / sp; P->C_p = p2 + sin(p2); P->inv = s_inverse; P->fwd = s_forward; return P; } ENTRY0(moll) ENDENTRY(setup(P, HALFPI)) ENTRY0(wag4) ENDENTRY(setup(P, PI/3.)) ENTRY0(wag5) P->es = 0; P->C_x = 0.90977; P->C_y = 1.65014; P->C_p = 3.00896; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/pj_msfn.c0000644000076400010400000000027311137333710017431 0ustar userAdministrators/* determine constant small m */ #include #include double pj_msfn(double sinphi, double cosphi, double es) { return (cosphi / sqrt (1. - es * sinphi * sinphi)); } therion/extern/proj4/pj_mutex.c0000644000076400010400000001707311256470376017652 0ustar userAdministrators/****************************************************************************** * $Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Mutex (thread lock) functions. * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 2009, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ /* projects.h and windows.h conflict - avoid this! */ #ifndef _WIN32 #include PJ_CVSID("$Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $"); #else #include #endif #ifdef _WIN32 # define MUTEX_win32 #endif #if !defined(MUTEX_stub) && !defined(MUTEX_pthread) && !defined(MUTEX_win32) # define MUTEX_stub #endif static void pj_init_lock(); /************************************************************************/ /* ==================================================================== */ /* stub mutex implementation */ /* ==================================================================== */ /************************************************************************/ #ifdef MUTEX_stub /************************************************************************/ /* pj_acquire_lock() */ /* */ /* Acquire the PROJ.4 lock. */ /************************************************************************/ void pj_acquire_lock() { } /************************************************************************/ /* pj_release_lock() */ /* */ /* Release the PROJ.4 lock. */ /************************************************************************/ void pj_release_lock() { } /************************************************************************/ /* pj_cleanup_lock() */ /************************************************************************/ void pj_cleanup_lock() { } /************************************************************************/ /* pj_init_lock() */ /************************************************************************/ static void pj_init_lock() { } #endif // def MUTEX_stub /************************************************************************/ /* ==================================================================== */ /* pthread mutex implementation */ /* ==================================================================== */ /************************************************************************/ #ifdef MUTEX_pthread #include "pthread.h" static pthread_mutex_t core_lock = PTHREAD_MUTEX_INITIALIZER; /************************************************************************/ /* pj_acquire_lock() */ /* */ /* Acquire the PROJ.4 lock. */ /************************************************************************/ void pj_acquire_lock() { pthread_mutex_lock( &core_lock); } /************************************************************************/ /* pj_release_lock() */ /* */ /* Release the PROJ.4 lock. */ /************************************************************************/ void pj_release_lock() { pthread_mutex_unlock( &core_lock ); } /************************************************************************/ /* pj_cleanup_lock() */ /************************************************************************/ void pj_cleanup_lock() { } /************************************************************************/ /* pj_init_lock() */ /************************************************************************/ static void pj_init_lock() { } #endif // def MUTEX_pthread /************************************************************************/ /* ==================================================================== */ /* win32 mutex implementation */ /* ==================================================================== */ /************************************************************************/ #ifdef MUTEX_win32 #include static HANDLE mutex_lock = NULL; /************************************************************************/ /* pj_acquire_lock() */ /* */ /* Acquire the PROJ.4 lock. */ /************************************************************************/ void pj_acquire_lock() { if( mutex_lock == NULL ) pj_init_lock(); WaitForSingleObject( mutex_lock, INFINITE ); } /************************************************************************/ /* pj_release_lock() */ /* */ /* Release the PROJ.4 lock. */ /************************************************************************/ void pj_release_lock() { if( mutex_lock == NULL ) pj_init_lock(); ReleaseMutex( mutex_lock ); } /************************************************************************/ /* pj_cleanup_lock() */ /************************************************************************/ void pj_cleanup_lock() { if( mutex_lock != NULL ) { CloseHandle( mutex_lock ); mutex_lock = NULL; } } /************************************************************************/ /* pj_init_lock() */ /************************************************************************/ static void pj_init_lock() { if( mutex_lock == NULL ) mutex_lock = CreateMutex( NULL, TRUE, NULL ); } #endif // def MUTEX_win32 therion/extern/proj4/PJ_nell.c0000644000076400010400000000136011137333712017320 0ustar userAdministrators#define PJ_LIB__ #include PROJ_HEAD(nell, "Nell") "\n\tPCyl., Sph."; #define MAX_ITER 10 #define LOOP_TOL 1e-7 FORWARD(s_forward); /* spheroid */ double k, V; int i; k = 2. * sin(lp.phi); V = lp.phi * lp.phi; lp.phi *= 1.00371 + V * (-0.0935382 + V * -0.011412); for (i = MAX_ITER; i ; --i) { lp.phi -= V = (lp.phi + sin(lp.phi) - k) / (1. + cos(lp.phi)); if (fabs(V) < LOOP_TOL) break; } xy.x = 0.5 * lp.lam * (1. + cos(lp.phi)); xy.y = lp.phi; return (xy); } INVERSE(s_inverse); /* spheroid */ double th, s; lp.lam = 2. * xy.x / (1. + cos(xy.y)); lp.phi = aasin(0.5 * (xy.y + sin(xy.y))); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(nell) P->es = 0; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/PJ_nell_h.c0000644000076400010400000000134211137333716017633 0ustar userAdministrators#define PJ_LIB__ # include PROJ_HEAD(nell_h, "Nell-Hammer") "\n\tPCyl., Sph."; #define NITER 9 #define EPS 1e-7 FORWARD(s_forward); /* spheroid */ xy.x = 0.5 * lp.lam * (1. + cos(lp.phi)); xy.y = 2.0 * (lp.phi - tan(0.5 *lp.phi)); return (xy); } INVERSE(s_inverse); /* spheroid */ double V, c, p; int i; p = 0.5 * xy.y; for (i = NITER; i ; --i) { c = cos(0.5 * lp.phi); lp.phi -= V = (lp.phi - tan(lp.phi/2) - p)/(1. - 0.5/(c*c)); if (fabs(V) < EPS) break; } if (!i) { lp.phi = p < 0. ? -HALFPI : HALFPI; lp.lam = 2. * xy.x; } else lp.lam = 2. * xy.x / (1. + cos(lp.phi)); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(nell_h) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/PJ_nocol.c0000644000076400010400000000207611137333720017504 0ustar userAdministrators#define PJ_LIB__ #include PROJ_HEAD(nicol, "Nicolosi Globular") "\n\tMisc Sph, no inv."; #define EPS 1e-10 FORWARD(s_forward); /* spheroid */ if (fabs(lp.lam) < EPS) { xy.x = 0; xy.y = lp.phi; } else if (fabs(lp.phi) < EPS) { xy.x = lp.lam; xy.y = 0.; } else if (fabs(fabs(lp.lam) - HALFPI) < EPS) { xy.x = lp.lam * cos(lp.phi); xy.y = HALFPI * sin(lp.phi); } else if (fabs(fabs(lp.phi) - HALFPI) < EPS) { xy.x = 0; xy.y = lp.phi; } else { double tb, c, d, m, n, r2, sp; tb = HALFPI / lp.lam - lp.lam / HALFPI; c = lp.phi / HALFPI; d = (1 - c * c)/((sp = sin(lp.phi)) - c); r2 = tb / d; r2 *= r2; m = (tb * sp / d - 0.5 * tb)/(1. + r2); n = (sp / r2 + 0.5 * d)/(1. + 1./r2); xy.x = cos(lp.phi); xy.x = sqrt(m * m + xy.x * xy.x / (1. + r2)); xy.x = HALFPI * ( m + (lp.lam < 0. ? -xy.x : xy.x)); xy.y = sqrt(n * n - (sp * sp / r2 + d * sp - 1.) / (1. + 1./r2)); xy.y = HALFPI * ( n + (lp.phi < 0. ? xy.y : -xy.y )); } return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(nicol) P->es = 0.; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/PJ_nsper.c0000644000076400010400000000625511137333722017526 0ustar userAdministrators#define PROJ_PARMS__ \ double height; \ double sinph0; \ double cosph0; \ double p; \ double rp; \ double pn1; \ double pfact; \ double h; \ double cg; \ double sg; \ double sw; \ double cw; \ int mode; \ int tilt; #define PJ_LIB__ #include PROJ_HEAD(nsper, "Near-sided perspective") "\n\tAzi, Sph\n\th="; PROJ_HEAD(tpers, "Tilted perspective") "\n\tAzi, Sph\n\ttilt= azi= h="; # define EPS10 1.e-10 # define N_POLE 0 # define S_POLE 1 # define EQUIT 2 # define OBLIQ 3 FORWARD(s_forward); /* spheroid */ double coslam, cosphi, sinphi; sinphi = sin(lp.phi); cosphi = cos(lp.phi); coslam = cos(lp.lam); switch (P->mode) { case OBLIQ: xy.y = P->sinph0 * sinphi + P->cosph0 * cosphi * coslam; break; case EQUIT: xy.y = cosphi * coslam; break; case S_POLE: xy.y = - sinphi; break; case N_POLE: xy.y = sinphi; break; } if (xy.y < P->rp) F_ERROR; xy.y = P->pn1 / (P->p - xy.y); xy.x = xy.y * cosphi * sin(lp.lam); switch (P->mode) { case OBLIQ: xy.y *= (P->cosph0 * sinphi - P->sinph0 * cosphi * coslam); break; case EQUIT: xy.y *= sinphi; break; case N_POLE: coslam = - coslam; case S_POLE: xy.y *= cosphi * coslam; break; } if (P->tilt) { double yt, ba; yt = xy.y * P->cg + xy.x * P->sg; ba = 1. / (yt * P->sw * P->h + P->cw); xy.x = (xy.x * P->cg - xy.y * P->sg) * P->cw * ba; xy.y = yt * ba; } return (xy); } INVERSE(s_inverse); /* spheroid */ double rh, cosz, sinz; if (P->tilt) { double bm, bq, yt; yt = 1./(P->pn1 - xy.y * P->sw); bm = P->pn1 * xy.x * yt; bq = P->pn1 * xy.y * P->cw * yt; xy.x = bm * P->cg + bq * P->sg; xy.y = bq * P->cg - bm * P->sg; } rh = hypot(xy.x, xy.y); if ((sinz = 1. - rh * rh * P->pfact) < 0.) I_ERROR; sinz = (P->p - sqrt(sinz)) / (P->pn1 / rh + rh / P->pn1); cosz = sqrt(1. - sinz * sinz); if (fabs(rh) <= EPS10) { lp.lam = 0.; lp.phi = P->phi0; } else { switch (P->mode) { case OBLIQ: lp.phi = asin(cosz * P->sinph0 + xy.y * sinz * P->cosph0 / rh); xy.y = (cosz - P->sinph0 * sin(lp.phi)) * rh; xy.x *= sinz * P->cosph0; break; case EQUIT: lp.phi = asin(xy.y * sinz / rh); xy.y = cosz * rh; xy.x *= sinz; break; case N_POLE: lp.phi = asin(cosz); xy.y = -xy.y; break; case S_POLE: lp.phi = - asin(cosz); break; } lp.lam = atan2(xy.x, xy.y); } return (lp); } FREEUP; if (P) pj_dalloc(P); } static PJ * setup(PJ *P) { if ((P->height = pj_param(P->params, "dh").f) <= 0.) E_ERROR(-30); if (fabs(fabs(P->phi0) - HALFPI) < EPS10) P->mode = P->phi0 < 0. ? S_POLE : N_POLE; else if (fabs(P->phi0) < EPS10) P->mode = EQUIT; else { P->mode = OBLIQ; P->sinph0 = sin(P->phi0); P->cosph0 = cos(P->phi0); } P->pn1 = P->height / P->a; /* normalize by radius */ P->p = 1. + P->pn1; P->rp = 1. / P->p; P->h = 1. / P->pn1; P->pfact = (P->p + 1.) * P->h; P->inv = s_inverse; P->fwd = s_forward; P->es = 0.; return P; } ENTRY0(nsper) P->tilt = 0; ENDENTRY(setup(P)) ENTRY0(tpers) double omega, gamma; omega = pj_param(P->params, "dtilt").f * DEG_TO_RAD; gamma = pj_param(P->params, "dazi").f * DEG_TO_RAD; P->tilt = 1; P->cg = cos(gamma); P->sg = sin(gamma); P->cw = cos(omega); P->sw = sin(omega); ENDENTRY(setup(P)) therion/extern/proj4/PJ_nzmg.c0000644000076400010400000000672011130502664017343 0ustar userAdministrators/****************************************************************************** * $Id: PJ_nzmg.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Implementation of the nzmg (New Zealand Map Grid) projection. * Very loosely based upon DMA code by Bradford W. Drew * Author: Gerald Evenden * ****************************************************************************** * Copyright (c) 1995, Gerald Evenden * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #define PJ_LIB__ #include PJ_CVSID("$Id: PJ_nzmg.c 1504 2009-01-06 02:11:57Z warmerdam $"); PROJ_HEAD(nzmg, "New Zealand Map Grid") "\n\tfixed Earth"; #define EPSLN 1e-10 #define SEC5_TO_RAD 0.4848136811095359935899141023 #define RAD_TO_SEC5 2.062648062470963551564733573 static COMPLEX bf[] = { {.7557853228, 0.0}, {.249204646, .003371507}, {-.001541739, .041058560}, {-.10162907, .01727609}, {-.26623489, -.36249218}, {-.6870983, -1.1651967} }; static double tphi[] = { 1.5627014243, .5185406398, -.03333098, -.1052906, -.0368594, .007317, .01220, .00394, -.0013 }, tpsi[] = { .6399175073, -.1358797613, .063294409, -.02526853, .0117879, -.0055161, .0026906, -.001333, .00067, -.00034 }; #define Nbf 5 #define Ntpsi 9 #define Ntphi 8 FORWARD(e_forward); /* ellipsoid */ COMPLEX p; double *C; int i; lp.phi = (lp.phi - P->phi0) * RAD_TO_SEC5; for (p.r = *(C = tpsi + (i = Ntpsi)); i ; --i) p.r = *--C + lp.phi * p.r; p.r *= lp.phi; p.i = lp.lam; p = pj_zpoly1(p, bf, Nbf); xy.x = p.i; xy.y = p.r; return xy; } INVERSE(e_inverse); /* ellipsoid */ int nn, i; COMPLEX p, f, fp, dp; double den, *C; p.r = xy.y; p.i = xy.x; for (nn = 20; nn ;--nn) { f = pj_zpolyd1(p, bf, Nbf, &fp); f.r -= xy.y; f.i -= xy.x; den = fp.r * fp.r + fp.i * fp.i; p.r += dp.r = -(f.r * fp.r + f.i * fp.i) / den; p.i += dp.i = -(f.i * fp.r - f.r * fp.i) / den; if ((fabs(dp.r) + fabs(dp.i)) <= EPSLN) break; } if (nn) { lp.lam = p.i; for (lp.phi = *(C = tphi + (i = Ntphi)); i ; --i) lp.phi = *--C + p.r * lp.phi; lp.phi = P->phi0 + p.r * lp.phi * SEC5_TO_RAD; } else lp.lam = lp.phi = HUGE_VAL; return lp; } FREEUP; if (P) pj_dalloc(P); } ENTRY0(nzmg) /* force to International major axis */ P->ra = 1. / (P->a = 6378388.0); P->lam0 = DEG_TO_RAD * 173.; P->phi0 = DEG_TO_RAD * -41.; P->x0 = 2510000.; P->y0 = 6023150.; P->inv = e_inverse; P->fwd = e_forward; ENDENTRY(P) therion/extern/proj4/PJ_ob_tran.c0000644000076400010400000001002511137333724020013 0ustar userAdministrators#define PROJ_PARMS__ \ struct PJconsts *link; \ double lamp; \ double cphip, sphip; #define PJ_LIB__ #include #include PROJ_HEAD(ob_tran, "General Oblique Transformation") "\n\tMisc Sph" "\n\to_proj= plus parameters for projection" "\n\to_lat_p= o_lon_p= (new pole) or" "\n\to_alpha= o_lon_c= o_lat_c= or" "\n\to_lon_1= o_lat_1= o_lon_2= o_lat_2="; #define TOL 1e-10 FORWARD(o_forward); /* spheroid */ double coslam, sinphi, cosphi; (void) xy; coslam = cos(lp.lam); sinphi = sin(lp.phi); cosphi = cos(lp.phi); lp.lam = adjlon(aatan2(cosphi * sin(lp.lam), P->sphip * cosphi * coslam + P->cphip * sinphi) + P->lamp); lp.phi = aasin(P->sphip * sinphi - P->cphip * cosphi * coslam); return (P->link->fwd(lp, P->link)); } FORWARD(t_forward); /* spheroid */ double cosphi, coslam; (void) xy; cosphi = cos(lp.phi); coslam = cos(lp.lam); lp.lam = adjlon(aatan2(cosphi * sin(lp.lam), sin(lp.phi)) + P->lamp); lp.phi = aasin(- cosphi * coslam); return (P->link->fwd(lp, P->link)); } INVERSE(o_inverse); /* spheroid */ double coslam, sinphi, cosphi; lp = P->link->inv(xy, P->link); if (lp.lam != HUGE_VAL) { coslam = cos(lp.lam -= P->lamp); sinphi = sin(lp.phi); cosphi = cos(lp.phi); lp.phi = aasin(P->sphip * sinphi + P->cphip * cosphi * coslam); lp.lam = aatan2(cosphi * sin(lp.lam), P->sphip * cosphi * coslam - P->cphip * sinphi); } return (lp); } INVERSE(t_inverse); /* spheroid */ double cosphi, t; lp = P->link->inv(xy, P->link); if (lp.lam != HUGE_VAL) { cosphi = cos(lp.phi); t = lp.lam - P->lamp; lp.lam = aatan2(cosphi * sin(t), - sin(lp.phi)); lp.phi = aasin(cosphi * cos(t)); } return (lp); } FREEUP; if (P) { if (P->link) (*(P->link->pfree))(P->link); pj_dalloc(P); } } ENTRY1(ob_tran, link) int i; double phip; char *name, *s; /* get name of projection to be translated */ if (!(name = pj_param(P->params, "so_proj").s)) E_ERROR(-26); for (i = 0; (s = pj_list[i].id) && strcmp(name, s) ; ++i) ; if (!s || !(P->link = (*pj_list[i].proj)(0))) E_ERROR(-37); /* copy existing header into new */ P->es = 0.; /* force to spherical */ P->link->params = P->params; P->link->over = P->over; P->link->geoc = P->geoc; P->link->a = P->a; P->link->es = P->es; P->link->ra = P->ra; P->link->lam0 = P->lam0; P->link->phi0 = P->phi0; P->link->x0 = P->x0; P->link->y0 = P->y0; P->link->k0 = P->k0; /* force spherical earth */ P->link->one_es = P->link->rone_es = 1.; P->link->es = P->link->e = 0.; if (!(P->link = pj_list[i].proj(P->link))) { freeup(P); return 0; } if (pj_param(P->params, "to_alpha").i) { double lamc, phic, alpha; lamc = pj_param(P->params, "ro_lon_c").f; phic = pj_param(P->params, "ro_lat_c").f; alpha = pj_param(P->params, "ro_alpha").f; /* if (fabs(phic) <= TOL || fabs(fabs(phic) - HALFPI) <= TOL || fabs(fabs(alpha) - HALFPI) <= TOL) */ if (fabs(fabs(phic) - HALFPI) <= TOL) E_ERROR(-32); P->lamp = lamc + aatan2(-cos(alpha), -sin(alpha) * sin(phic)); phip = aasin(cos(phic) * sin(alpha)); } else if (pj_param(P->params, "to_lat_p").i) { /* specified new pole */ P->lamp = pj_param(P->params, "ro_lon_p").f; phip = pj_param(P->params, "ro_lat_p").f; } else { /* specified new "equator" points */ double lam1, lam2, phi1, phi2, con; lam1 = pj_param(P->params, "ro_lon_1").f; phi1 = pj_param(P->params, "ro_lat_1").f; lam2 = pj_param(P->params, "ro_lon_2").f; phi2 = pj_param(P->params, "ro_lat_2").f; if (fabs(phi1 - phi2) <= TOL || (con = fabs(phi1)) <= TOL || fabs(con - HALFPI) <= TOL || fabs(fabs(phi2) - HALFPI) <= TOL) E_ERROR(-33); P->lamp = atan2(cos(phi1) * sin(phi2) * cos(lam1) - sin(phi1) * cos(phi2) * cos(lam2), sin(phi1) * cos(phi2) * sin(lam2) - cos(phi1) * sin(phi2) * sin(lam1)); phip = atan(-cos(P->lamp - lam1) / tan(phi1)); } if (fabs(phip) > TOL) { /* oblique */ P->cphip = cos(phip); P->sphip = sin(phip); P->fwd = o_forward; P->inv = P->link->inv ? o_inverse : 0; } else { /* transverse */ P->fwd = t_forward; P->inv = P->link->inv ? t_inverse : 0; } ENDENTRY(P) therion/extern/proj4/PJ_ocea.c0000644000076400010400000000363311137333726017307 0ustar userAdministrators#define PROJ_PARMS__ \ double rok; \ double rtk; \ double sinphi; \ double cosphi; \ double singam; \ double cosgam; #define PJ_LIB__ #include PROJ_HEAD(ocea, "Oblique Cylindrical Equal Area") "\n\tCyl, Sph" "lonc= alpha= or\n\tlat_1= lat_2= lon_1= lon_2="; FORWARD(s_forward); /* spheroid */ double t; xy.y = sin(lp.lam); /* xy.x = atan2((tan(lp.phi) * P->cosphi + P->sinphi * xy.y) , cos(lp.lam)); */ t = cos(lp.lam); xy.x = atan((tan(lp.phi) * P->cosphi + P->sinphi * xy.y) / t); if (t < 0.) xy.x += PI; xy.x *= P->rtk; xy.y = P->rok * (P->sinphi * sin(lp.phi) - P->cosphi * cos(lp.phi) * xy.y); return (xy); } INVERSE(s_inverse); /* spheroid */ double t, s; xy.y /= P->rok; xy.x /= P->rtk; t = sqrt(1. - xy.y * xy.y); lp.phi = asin(xy.y * P->sinphi + t * P->cosphi * (s = sin(xy.x))); lp.lam = atan2(t * P->sinphi * s - xy.y * P->cosphi, t * cos(xy.x)); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(ocea) double phi_0=0.0, phi_1, phi_2, lam_1, lam_2, lonz, alpha; P->rok = P->a / P->k0; P->rtk = P->a * P->k0; if ( pj_param(P->params, "talpha").i) { alpha = pj_param(P->params, "ralpha").f; lonz = pj_param(P->params, "rlonc").f; P->singam = atan(-cos(alpha)/(-sin(phi_0) * sin(alpha))) + lonz; P->sinphi = asin(cos(phi_0) * sin(alpha)); } else { phi_1 = pj_param(P->params, "rlat_1").f; phi_2 = pj_param(P->params, "rlat_2").f; lam_1 = pj_param(P->params, "rlon_1").f; lam_2 = pj_param(P->params, "rlon_2").f; P->singam = atan2(cos(phi_1) * sin(phi_2) * cos(lam_1) - sin(phi_1) * cos(phi_2) * cos(lam_2), sin(phi_1) * cos(phi_2) * sin(lam_2) - cos(phi_1) * sin(phi_2) * sin(lam_1) ); P->sinphi = atan(-cos(P->singam - lam_1) / tan(phi_1)); } P->lam0 = P->singam + HALFPI; P->cosphi = cos(P->sinphi); P->sinphi = sin(P->sinphi); P->cosgam = cos(P->singam); P->singam = sin(P->singam); P->inv = s_inverse; P->fwd = s_forward; P->es = 0.; ENDENTRY(P) therion/extern/proj4/PJ_oea.c0000644000076400010400000000316111137333732017135 0ustar userAdministrators#define PROJ_PARMS__ \ double theta; \ double m, n; \ double two_r_m, two_r_n, rm, rn, hm, hn; \ double cp0, sp0; #define PJ_LIB__ #include PROJ_HEAD(oea, "Oblated Equal Area") "\n\tMisc Sph\n\tn= m= theta="; FORWARD(s_forward); /* sphere */ double Az, M, N, cp, sp, cl, shz; cp = cos(lp.phi); sp = sin(lp.phi); cl = cos(lp.lam); Az = aatan2(cp * sin(lp.lam), P->cp0 * sp - P->sp0 * cp * cl) + P->theta; shz = sin(0.5 * aacos(P->sp0 * sp + P->cp0 * cp * cl)); M = aasin(shz * sin(Az)); N = aasin(shz * cos(Az) * cos(M) / cos(M * P->two_r_m)); xy.y = P->n * sin(N * P->two_r_n); xy.x = P->m * sin(M * P->two_r_m) * cos(N) / cos(N * P->two_r_n); return (xy); } INVERSE(s_inverse); /* sphere */ double N, M, xp, yp, z, Az, cz, sz, cAz; N = P->hn * aasin(xy.y * P->rn); M = P->hm * aasin(xy.x * P->rm * cos(N * P->two_r_n) / cos(N)); xp = 2. * sin(M); yp = 2. * sin(N) * cos(M * P->two_r_m) / cos(M); cAz = cos(Az = aatan2(xp, yp) - P->theta); z = 2. * aasin(0.5 * hypot(xp, yp)); sz = sin(z); cz = cos(z); lp.phi = aasin(P->sp0 * cz + P->cp0 * sz * cAz); lp.lam = aatan2(sz * sin(Az), P->cp0 * cz - P->sp0 * sz * cAz); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(oea) if (((P->n = pj_param(P->params, "dn").f) <= 0.) || ((P->m = pj_param(P->params, "dm").f) <= 0.)) E_ERROR(-39) else { P->theta = pj_param(P->params, "rtheta").f; P->sp0 = sin(P->phi0); P->cp0 = cos(P->phi0); P->rn = 1./ P->n; P->rm = 1./ P->m; P->two_r_n = 2. * P->rn; P->two_r_m = 2. * P->rm; P->hm = 0.5 * P->m; P->hn = 0.5 * P->n; P->fwd = s_forward; P->inv = s_inverse; P->es = 0.; } ENDENTRY(P) therion/extern/proj4/PJ_omerc.c0000644000076400010400000001127211137333734017502 0ustar userAdministrators#define PROJ_PARMS__ \ double alpha, lamc, lam1, phi1, lam2, phi2, Gamma, al, bl, el, \ singam, cosgam, sinrot, cosrot, u_0; \ int ellips, rot; #define PJ_LIB__ #include PROJ_HEAD(omerc, "Oblique Mercator") "\n\tCyl, Sph&Ell\n\t no_rot rot_conv no_uoff and\n\t" "alpha= lonc= or\n\t lon_1= lat_1= lon_2= lat_2="; #define TOL 1.e-7 #define EPS 1.e-10 #define TSFN0(x) tan(.5 * (HALFPI - (x))) FORWARD(e_forward); /* ellipsoid & spheroid */ double con, q, s, ul, us, vl, vs; vl = sin(P->bl * lp.lam); if (fabs(fabs(lp.phi) - HALFPI) <= EPS) { ul = lp.phi < 0. ? -P->singam : P->singam; us = P->al * lp.phi / P->bl; } else { q = P->el / (P->ellips ? pow(pj_tsfn(lp.phi, sin(lp.phi), P->e), P->bl) : TSFN0(lp.phi)); s = .5 * (q - 1. / q); ul = 2. * (s * P->singam - vl * P->cosgam) / (q + 1. / q); con = cos(P->bl * lp.lam); if (fabs(con) >= TOL) { us = P->al * atan((s * P->cosgam + vl * P->singam) / con) / P->bl; if (con < 0.) us += PI * P->al / P->bl; } else us = P->al * P->bl * lp.lam; } if (fabs(fabs(ul) - 1.) <= EPS) F_ERROR; vs = .5 * P->al * log((1. - ul) / (1. + ul)) / P->bl; us -= P->u_0; if (! P->rot) { xy.x = us; xy.y = vs; } else { xy.x = vs * P->cosrot + us * P->sinrot; xy.y = us * P->cosrot - vs * P->sinrot; } return (xy); } INVERSE(e_inverse); /* ellipsoid & spheroid */ double q, s, ul, us, vl, vs; if (! P->rot) { us = xy.x; vs = xy.y; } else { vs = xy.x * P->cosrot - xy.y * P->sinrot; us = xy.y * P->cosrot + xy.x * P->sinrot; } us += P->u_0; q = exp(- P->bl * vs / P->al); s = .5 * (q - 1. / q); vl = sin(P->bl * us / P->al); ul = 2. * (vl * P->cosgam + s * P->singam) / (q + 1. / q); if (fabs(fabs(ul) - 1.) < EPS) { lp.lam = 0.; lp.phi = ul < 0. ? -HALFPI : HALFPI; } else { lp.phi = P->el / sqrt((1. + ul) / (1. - ul)); if (P->ellips) { if ((lp.phi = pj_phi2(pow(lp.phi, 1. / P->bl), P->e)) == HUGE_VAL) I_ERROR; } else lp.phi = HALFPI - 2. * atan(lp.phi); lp.lam = - atan2((s * P->cosgam - vl * P->singam), cos(P->bl * us / P->al)) / P->bl; } return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(omerc) double con, com, cosph0, d, f, h, l, sinph0, p, j; int azi; P->rot = pj_param(P->params, "bno_rot").i == 0; if( (azi = pj_param(P->params, "talpha").i) != 0.0) { P->lamc = pj_param(P->params, "rlonc").f; P->alpha = pj_param(P->params, "ralpha").f; if ( fabs(P->alpha) <= TOL || fabs(fabs(P->phi0) - HALFPI) <= TOL || fabs(fabs(P->alpha) - HALFPI) <= TOL) E_ERROR(-32); } else { P->lam1 = pj_param(P->params, "rlon_1").f; P->phi1 = pj_param(P->params, "rlat_1").f; P->lam2 = pj_param(P->params, "rlon_2").f; P->phi2 = pj_param(P->params, "rlat_2").f; if (fabs(P->phi1 - P->phi2) <= TOL || (con = fabs(P->phi1)) <= TOL || fabs(con - HALFPI) <= TOL || fabs(fabs(P->phi0) - HALFPI) <= TOL || fabs(fabs(P->phi2) - HALFPI) <= TOL) E_ERROR(-33); } com = (P->ellips = P->es > 0.) ? sqrt(P->one_es) : 1.; if (fabs(P->phi0) > EPS) { sinph0 = sin(P->phi0); cosph0 = cos(P->phi0); if (P->ellips) { con = 1. - P->es * sinph0 * sinph0; P->bl = cosph0 * cosph0; P->bl = sqrt(1. + P->es * P->bl * P->bl / P->one_es); P->al = P->bl * P->k0 * com / con; d = P->bl * com / (cosph0 * sqrt(con)); } else { P->bl = 1.; P->al = P->k0; d = 1. / cosph0; } if ((f = d * d - 1.) <= 0.) f = 0.; else { f = sqrt(f); if (P->phi0 < 0.) f = -f; } P->el = f += d; if (P->ellips) P->el *= pow(pj_tsfn(P->phi0, sinph0, P->e), P->bl); else P->el *= TSFN0(P->phi0); } else { P->bl = 1. / com; P->al = P->k0; P->el = d = f = 1.; } if (azi) { P->Gamma = asin(sin(P->alpha) / d); P->lam0 = P->lamc - asin((.5 * (f - 1. / f)) * tan(P->Gamma)) / P->bl; } else { if (P->ellips) { h = pow(pj_tsfn(P->phi1, sin(P->phi1), P->e), P->bl); l = pow(pj_tsfn(P->phi2, sin(P->phi2), P->e), P->bl); } else { h = TSFN0(P->phi1); l = TSFN0(P->phi2); } f = P->el / h; p = (l - h) / (l + h); j = P->el * P->el; j = (j - l * h) / (j + l * h); if ((con = P->lam1 - P->lam2) < -PI) P->lam2 -= TWOPI; else if (con > PI) P->lam2 += TWOPI; P->lam0 = adjlon(.5 * (P->lam1 + P->lam2) - atan( j * tan(.5 * P->bl * (P->lam1 - P->lam2)) / p) / P->bl); P->Gamma = atan(2. * sin(P->bl * adjlon(P->lam1 - P->lam0)) / (f - 1. / f)); P->alpha = asin(d * sin(P->Gamma)); } P->singam = sin(P->Gamma); P->cosgam = cos(P->Gamma); f = pj_param(P->params, "brot_conv").i ? P->Gamma : P->alpha; P->sinrot = sin(f); P->cosrot = cos(f); P->u_0 = pj_param(P->params, "bno_uoff").i ? 0. : fabs(P->al * atan(sqrt(d * d - 1.) / P->cosrot) / P->bl); if (P->phi0 < 0.) P->u_0 = - P->u_0; P->inv = e_inverse; P->fwd = e_forward; ENDENTRY(P) therion/extern/proj4/pj_open_lib.c0000644000076400010400000001344211130502664020256 0ustar userAdministrators/****************************************************************************** * $Id: pj_open_lib.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Implementation of pj_open_lib(), and pj_set_finder(). These * provide a standard interface for opening projections support * data files. * Author: Gerald Evenden, Frank Warmerdam * ****************************************************************************** * Copyright (c) 1995, Gerald Evenden * Copyright (c) 2002, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #define PJ_LIB__ #include #include #include #include PJ_CVSID("$Id: pj_open_lib.c 1504 2009-01-06 02:11:57Z warmerdam $"); static const char *(*pj_finder)(const char *) = NULL; static int path_count = 0; static char **search_path = NULL; static char * proj_lib_name = #ifdef PROJ_LIB PROJ_LIB; #else 0; #endif /************************************************************************/ /* pj_set_finder() */ /************************************************************************/ void pj_set_finder( const char *(*new_finder)(const char *) ) { pj_finder = new_finder; } /************************************************************************/ /* pj_set_searchpath() */ /* */ /* Path control for callers that can't practically provide */ /* pj_set_finder() style callbacks. Call with (0,NULL) as args */ /* to clear the searchpath set. */ /************************************************************************/ void pj_set_searchpath ( int count, const char **path ) { int i; if (path_count > 0 && search_path != NULL) { for (i = 0; i < path_count; i++) { pj_dalloc(search_path[i]); } pj_dalloc(search_path); path_count = 0; search_path = NULL; } if( count > 0 ) { search_path = pj_malloc(sizeof *search_path * count); for (i = 0; i < count; i++) { search_path[i] = pj_malloc(strlen(path[i]) + 1); strcpy(search_path[i], path[i]); } } path_count = count; } /************************************************************************/ /* pj_open_lib() */ /************************************************************************/ FILE * pj_open_lib(char *name, char *mode) { char fname[MAX_PATH_FILENAME+1]; const char *sysname; FILE *fid; int n = 0; int i; #ifdef WIN32 static const char dir_chars[] = "/\\"; #else static const char dir_chars[] = "/"; #endif #ifndef _WIN32_WCE /* check if ~/name */ if (*name == '~' && strchr(dir_chars,name[1]) ) if (sysname = getenv("HOME")) { (void)strcpy(fname, sysname); fname[n = strlen(fname)] = DIR_CHAR; fname[++n] = '\0'; (void)strcpy(fname+n, name + 1); sysname = fname; } else return NULL; /* or fixed path: /name, ./name or ../name */ else if (strchr(dir_chars,*name) || (*name == '.' && strchr(dir_chars,name[1])) || (!strncmp(name, "..", 2) && strchr(dir_chars,name[2])) || (name[1] == ':' && strchr(dir_chars,name[2])) ) sysname = name; /* or try to use application provided file finder */ else if( pj_finder != NULL && pj_finder( name ) != NULL ) sysname = pj_finder( name ); /* or is environment PROJ_LIB defined */ else if ((sysname = getenv("PROJ_LIB")) || (sysname = proj_lib_name)) { (void)strcpy(fname, sysname); fname[n = strlen(fname)] = DIR_CHAR; fname[++n] = '\0'; (void)strcpy(fname+n, name); sysname = fname; } else /* just try it bare bones */ sysname = name; if (fid = fopen(sysname, mode)) errno = 0; /* If none of those work and we have a search path, try it */ if (!fid && path_count > 0) { for (i = 0; fid == NULL && i < path_count; i++) { sprintf(fname, "%s%c%s", search_path[i], DIR_CHAR, name); sysname = fname; fid = fopen (sysname, mode); } if (fid) errno = 0; } if( getenv( "PROJ_DEBUG" ) != NULL ) fprintf( stderr, "pj_open_lib(%s): call fopen(%s) - %s\n", name, sysname, fid == NULL ? "failed" : "succeeded" ); return(fid); #else return NULL; #endif /* _WIN32_WCE */ } therion/extern/proj4/PJ_ortho.c0000644000076400010400000000457211137333736017537 0ustar userAdministrators#define PROJ_PARMS__ \ double sinph0; \ double cosph0; \ int mode; #define PJ_LIB__ #include PROJ_HEAD(ortho, "Orthographic") "\n\tAzi, Sph."; #define EPS10 1.e-10 #define N_POLE 0 #define S_POLE 1 #define EQUIT 2 #define OBLIQ 3 FORWARD(s_forward); /* spheroid */ double coslam, cosphi, sinphi; cosphi = cos(lp.phi); coslam = cos(lp.lam); switch (P->mode) { case EQUIT: if (cosphi * coslam < - EPS10) F_ERROR; xy.y = sin(lp.phi); break; case OBLIQ: if (P->sinph0 * (sinphi = sin(lp.phi)) + P->cosph0 * cosphi * coslam < - EPS10) F_ERROR; xy.y = P->cosph0 * sinphi - P->sinph0 * cosphi * coslam; break; case N_POLE: coslam = - coslam; case S_POLE: if (fabs(lp.phi - P->phi0) - EPS10 > HALFPI) F_ERROR; xy.y = cosphi * coslam; break; } xy.x = cosphi * sin(lp.lam); return (xy); } INVERSE(s_inverse); /* spheroid */ double rh, cosc, sinc; if ((sinc = (rh = hypot(xy.x, xy.y))) > 1.) { if ((sinc - 1.) > EPS10) I_ERROR; sinc = 1.; } cosc = sqrt(1. - sinc * sinc); /* in this range OK */ if (fabs(rh) <= EPS10) { lp.phi = P->phi0; lp.lam = 0.0; } else { switch (P->mode) { case N_POLE: xy.y = -xy.y; lp.phi = acos(sinc); break; case S_POLE: lp.phi = - acos(sinc); break; case EQUIT: lp.phi = xy.y * sinc / rh; xy.x *= sinc; xy.y = cosc * rh; goto sinchk; case OBLIQ: lp.phi = cosc * P->sinph0 + xy.y * sinc * P->cosph0 /rh; xy.y = (cosc - P->sinph0 * lp.phi) * rh; xy.x *= sinc * P->cosph0; sinchk: if (fabs(lp.phi) >= 1.) lp.phi = lp.phi < 0. ? -HALFPI : HALFPI; else lp.phi = asin(lp.phi); break; } lp.lam = (xy.y == 0. && (P->mode == OBLIQ || P->mode == EQUIT)) ? (xy.x == 0. ? 0. : xy.x < 0. ? -HALFPI : HALFPI) : atan2(xy.x, xy.y); } return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(ortho) if (fabs(fabs(P->phi0) - HALFPI) <= EPS10) P->mode = P->phi0 < 0. ? S_POLE : N_POLE; else if (fabs(P->phi0) > EPS10) { P->mode = OBLIQ; P->sinph0 = sin(P->phi0); P->cosph0 = cos(P->phi0); } else P->mode = EQUIT; P->inv = s_inverse; P->fwd = s_forward; P->es = 0.; ENDENTRY(P) therion/extern/proj4/pj_param.c0000644000076400010400000000556511137333740017602 0ustar userAdministrators/* put parameters in linked list and retrieve */ #include #include #include paralist * /* create parameter list entry */ pj_mkparam(char *str) { paralist *newitem; if (newitem = (paralist *)pj_malloc(sizeof(paralist) + strlen(str))) { newitem->used = 0; newitem->next = 0; if (*str == '+') ++str; (void)strcpy(newitem->param, str); } return newitem; } /************************************************************************/ /* pj_param() */ /* */ /* Test for presence or get parameter value. The first */ /* character in `opt' is a parameter type which can take the */ /* values: */ /* */ /* `t' - test for presence, return TRUE/FALSE in PVALUE.i */ /* `i' - integer value returned in PVALUE.i */ /* `d' - simple valued real input returned in PVALUE.f */ /* `r' - degrees (DMS translation applied), returned as */ /* radians in PVALUE.f */ /* `s' - string returned in PVALUE.s */ /* `b' - test for t/T/f/F, return in PVALUE.i */ /* */ /************************************************************************/ PVALUE /* test for presence or get parameter value */ pj_param(paralist *pl, char *opt) { int type; unsigned l; PVALUE value; type = *opt++; /* simple linear lookup */ l = strlen(opt); while (pl && !(!strncmp(pl->param, opt, l) && (!pl->param[l] || pl->param[l] == '='))) pl = pl->next; if (type == 't') value.i = pl != 0; else if (pl) { pl->used |= 1; opt = pl->param + l; if (*opt == '=') ++opt; switch (type) { case 'i': /* integer input */ value.i = atoi(opt); break; case 'd': /* simple real input */ value.f = atof(opt); break; case 'r': /* degrees input */ value.f = dmstor(opt, 0); break; case 's': /* char string */ value.s = opt; break; case 'b': /* boolean */ switch (*opt) { case 'F': case 'f': value.i = 0; break; case '\0': case 'T': case 't': value.i = 1; break; default: pj_errno = -8; value.i = 0; break; } break; default: bum_type: /* note: this is an error in parameter, not a user error */ fprintf(stderr, "invalid request to pj_param, fatal\n"); exit(1); } } else /* not given */ switch (type) { case 'b': case 'i': value.i = 0; break; case 'd': case 'r': value.f = 0.; break; case 's': value.s = 0; break; default: goto bum_type; } return value; } therion/extern/proj4/pj_phi2.c0000644000076400010400000000075011137333742017335 0ustar userAdministrators/* determine latitude angle phi-2 */ #include #define HALFPI 1.5707963267948966 #define TOL 1.0e-10 #define N_ITER 15 double pj_phi2(double ts, double e) { double eccnth, Phi, con, dphi; int i; eccnth = .5 * e; Phi = HALFPI - 2. * atan (ts); i = N_ITER; do { con = e * sin (Phi); dphi = HALFPI - 2. * atan (ts * pow((1. - con) / (1. + con), eccnth)) - Phi; Phi += dphi; } while ( fabs(dphi) > TOL && --i); if (i <= 0) pj_errno = -18; return Phi; } therion/extern/proj4/PJ_poly.c0000644000076400010400000000500311137333746017356 0ustar userAdministrators#define PROJ_PARMS__ \ double ml0; \ double *en; #define PJ_LIB__ #include PROJ_HEAD(poly, "Polyconic (American)") "\n\tConic, Sph&Ell"; #define TOL 1e-10 #define CONV 1e-10 #define N_ITER 10 #define I_ITER 20 #define ITOL 1.e-12 FORWARD(e_forward); /* ellipsoid */ double ms, sp, cp; if (fabs(lp.phi) <= TOL) { xy.x = lp.lam; xy.y = -P->ml0; } else { sp = sin(lp.phi); ms = fabs(cp = cos(lp.phi)) > TOL ? pj_msfn(sp, cp, P->es) / sp : 0.; xy.x = ms * sin(lp.lam *= sp); xy.y = (pj_mlfn(lp.phi, sp, cp, P->en) - P->ml0) + ms * (1. - cos(lp.lam)); } return (xy); } FORWARD(s_forward); /* spheroid */ double cot, E; if (fabs(lp.phi) <= TOL) { xy.x = lp.lam; xy.y = P->ml0; } else { cot = 1. / tan(lp.phi); xy.x = sin(E = lp.lam * sin(lp.phi)) * cot; xy.y = lp.phi - P->phi0 + cot * (1. - cos(E)); } return (xy); } INVERSE(e_inverse); /* ellipsoid */ xy.y += P->ml0; if (fabs(xy.y) <= TOL) { lp.lam = xy.x; lp.phi = 0.; } else { double r, c, sp, cp, s2ph, ml, mlb, mlp, dPhi; int i; r = xy.y * xy.y + xy.x * xy.x; for (lp.phi = xy.y, i = I_ITER; i ; --i) { sp = sin(lp.phi); s2ph = sp * ( cp = cos(lp.phi)); if (fabs(cp) < ITOL) I_ERROR; c = sp * (mlp = sqrt(1. - P->es * sp * sp)) / cp; ml = pj_mlfn(lp.phi, sp, cp, P->en); mlb = ml * ml + r; mlp = P->one_es / (mlp * mlp * mlp); lp.phi += ( dPhi = ( ml + ml + c * mlb - 2. * xy.y * (c * ml + 1.) ) / ( P->es * s2ph * (mlb - 2. * xy.y * ml) / c + 2.* (xy.y - ml) * (c * mlp - 1. / s2ph) - mlp - mlp )); if (fabs(dPhi) <= ITOL) break; } if (!i) I_ERROR; c = sin(lp.phi); lp.lam = asin(xy.x * tan(lp.phi) * sqrt(1. - P->es * c * c)) / sin(lp.phi); } return (lp); } INVERSE(s_inverse); /* spheroid */ double B, dphi, tp; int i; if (fabs(xy.y = P->phi0 + xy.y) <= TOL) { lp.lam = xy.x; lp.phi = 0.; } else { lp.phi = xy.y; B = xy.x * xy.x + xy.y * xy.y; i = N_ITER; do { tp = tan(lp.phi); lp.phi -= (dphi = (xy.y * (lp.phi * tp + 1.) - lp.phi - .5 * ( lp.phi * lp.phi + B) * tp) / ((lp.phi - xy.y) / tp - 1.)); } while (fabs(dphi) > CONV && --i); if (! i) I_ERROR; lp.lam = asin(xy.x * tan(lp.phi)) / sin(lp.phi); } return (lp); } FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } } ENTRY1(poly, en) if (P->es) { if (!(P->en = pj_enfn(P->es))) E_ERROR_0; P->ml0 = pj_mlfn(P->phi0, sin(P->phi0), cos(P->phi0), P->en); P->inv = e_inverse; P->fwd = e_forward; } else { P->ml0 = -P->phi0; P->inv = s_inverse; P->fwd = s_forward; } ENDENTRY(P) therion/extern/proj4/pj_pr_list.c0000644000076400010400000000450511137333750020150 0ustar userAdministrators/* print projection's list of parameters */ #include #include #include #define LINE_LEN 72 static int pr_list(PJ *P, int not_used) { paralist *t; int l, n = 1, flag = 0; (void)putchar('#'); for (t = P->params; t; t = t->next) if ((!not_used && t->used) || (not_used && !t->used)) { l = strlen(t->param) + 1; if (n + l > LINE_LEN) { (void)fputs("\n#", stdout); n = 2; } (void)putchar(' '); if (*(t->param) != '+') (void)putchar('+'); (void)fputs(t->param, stdout); n += l; } else flag = 1; if (n > 1) (void)putchar('\n'); return flag; } void /* print link list of projection parameters */ pj_pr_list(PJ *P) { char const *s; (void)putchar('#'); for (s = P->descr; *s ; ++s) { (void)putchar(*s); if (*s == '\n') (void)putchar('#'); } (void)putchar('\n'); if (pr_list(P, 0)) { (void)fputs("#--- following specified but NOT used\n", stdout); (void)pr_list(P, 1); } } /************************************************************************/ /* pj_get_def() */ /* */ /* Returns the PROJ.4 command string that would produce this */ /* definition expanded as much as possible. For instance, */ /* +init= calls and +datum= defintions would be expanded. */ /************************************************************************/ char *pj_get_def( PJ *P, int options ) { paralist *t; int l; char *definition; int def_max = 10; definition = (char *) pj_malloc(def_max); definition[0] = '\0'; for (t = P->params; t; t = t->next) { /* skip unused parameters ... mostly appended defaults and stuff */ if (!t->used) continue; /* grow the resulting string if needed */ l = strlen(t->param) + 1; if( strlen(definition) + l + 5 > def_max ) { char *def2; def_max = def_max * 2 + l + 5; def2 = (char *) pj_malloc(def_max); strcpy( def2, definition ); pj_dalloc( definition ); definition = def2; } /* append this parameter */ strcat( definition, " +" ); strcat( definition, t->param ); } return definition; } therion/extern/proj4/PJ_putp2.c0000644000076400010400000000200711137333752017443 0ustar userAdministrators#define PJ_LIB__ #include PROJ_HEAD(putp2, "Putnins P2") "\n\tPCyl., Sph."; #define C_x 1.89490 #define C_y 1.71848 #define C_p 0.6141848493043784 #define EPS 1e-10 #define NITER 10 #define PI_DIV_3 1.0471975511965977 FORWARD(s_forward); /* spheroid */ double p, c, s, V; int i; p = C_p * sin(lp.phi); s = lp.phi * lp.phi; lp.phi *= 0.615709 + s * ( 0.00909953 + s * 0.0046292 ); for (i = NITER; i ; --i) { c = cos(lp.phi); s = sin(lp.phi); lp.phi -= V = (lp.phi + s * (c - 1.) - p) / (1. + c * (c - 1.) - s * s); if (fabs(V) < EPS) break; } if (!i) lp.phi = lp.phi < 0 ? - PI_DIV_3 : PI_DIV_3; xy.x = C_x * lp.lam * (cos(lp.phi) - 0.5); xy.y = C_y * sin(lp.phi); return (xy); } INVERSE(s_inverse); /* spheroid */ double c; lp.phi = aasin(xy.y / C_y); lp.lam = xy.x / (C_x * ((c = cos(lp.phi)) - 0.5)); lp.phi = aasin((lp.phi + sin(lp.phi) * (c - 1.)) / C_p); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(putp2) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/PJ_putp3.c0000644000076400010400000000131011137333756017444 0ustar userAdministrators#define PROJ_PARMS__ \ double A; #define PJ_LIB__ # include PROJ_HEAD(putp3, "Putnins P3") "\n\tPCyl., Sph."; PROJ_HEAD(putp3p, "Putnins P3'") "\n\tPCyl., no inv., Sph."; #define C 0.79788456 #define RPISQ 0.1013211836 FORWARD(s_forward); /* spheroid */ xy.x = C * lp.lam * (1. - P->A * lp.phi * lp.phi); xy.y = C * lp.phi; return (xy); } INVERSE(s_inverse); /* spheroid */ lp.phi = xy.y / C; lp.lam = xy.x / (C * (1. - P->A * lp.phi * lp.phi)); return (lp); } FREEUP; if (P) pj_dalloc(P); } static PJ * setup(PJ *P) { P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; return P; } ENTRY0(putp3) P->A = 4. * RPISQ; ENDENTRY(setup(P)) ENTRY0(putp3p) P->A = 2. * RPISQ; ENDENTRY(setup(P)) therion/extern/proj4/PJ_putp4p.c0000644000076400010400000000154411137333760017631 0ustar userAdministrators#define PROJ_PARMS__ \ double C_x, C_y; #define PJ_LIB__ # include PROJ_HEAD(putp4p, "Putnins P4'") "\n\tPCyl., Sph."; PROJ_HEAD(weren, "Werenskiold I") "\n\tPCyl., Sph."; FORWARD(s_forward); /* spheroid */ lp.phi = aasin(0.883883476 * sin(lp.phi)); xy.x = P->C_x * lp.lam * cos(lp.phi); xy.x /= cos(lp.phi *= 0.333333333333333); xy.y = P->C_y * sin(lp.phi); return (xy); } INVERSE(s_inverse); /* spheroid */ lp.phi = aasin(xy.y / P->C_y); lp.lam = xy.x * cos(lp.phi) / P->C_x; lp.phi *= 3.; lp.lam /= cos(lp.phi); lp.phi = aasin(1.13137085 * sin(lp.phi)); return (lp); } FREEUP; if (P) pj_dalloc(P); } static PJ * setup(PJ *P) { P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; return P; } ENTRY0(putp4p) P->C_x = 0.874038744; P->C_y = 3.883251825; ENDENTRY(setup(P)) ENTRY0(weren) P->C_x = 1.; P->C_y = 4.442882938; ENDENTRY(setup(P)) therion/extern/proj4/PJ_putp5.c0000644000076400010400000000134111137333762017447 0ustar userAdministrators#define PROJ_PARMS__ \ double A, B; #define PJ_LIB__ # include PROJ_HEAD(putp5, "Putnins P5") "\n\tPCyl., Sph."; PROJ_HEAD(putp5p, "Putnins P5'") "\n\tPCyl., Sph."; #define C 1.01346 #define D 1.2158542 FORWARD(s_forward); /* spheroid */ xy.x = C * lp.lam * (P->A - P->B * sqrt(1. + D * lp.phi * lp.phi)); xy.y = C * lp.phi; return (xy); } INVERSE(s_inverse); /* spheroid */ lp.phi = xy.y / C; lp.lam = xy.x / (C * (P->A - P->B * sqrt(1. + D * lp.phi * lp.phi))); return (lp); } FREEUP; if (P) pj_dalloc(P); } static PJ * setup(PJ *P) { P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; return P; } ENTRY0(putp5) P->A = 2.; P->B = 1.; ENDENTRY(setup(P)) ENTRY0(putp5p) P->A = 1.5; P->B = 0.5; ENDENTRY(setup(P)) therion/extern/proj4/PJ_putp6.c0000644000076400010400000000244111137333764017454 0ustar userAdministrators#define PROJ_PARMS__ \ double C_x, C_y, A, B, D; #define PJ_LIB__ #include PROJ_HEAD(putp6, "Putnins P6") "\n\tPCyl., Sph."; PROJ_HEAD(putp6p, "Putnins P6'") "\n\tPCyl., Sph."; #define EPS 1e-10 #define NITER 10 #define CON_POLE 1.732050807568877 FORWARD(s_forward); /* spheroid */ double p, r, V; int i; p = P->B * sin(lp.phi); lp.phi *= 1.10265779; for (i = NITER; i ; --i) { r = sqrt(1. + lp.phi * lp.phi); lp.phi -= V = ( (P->A - r) * lp.phi - log(lp.phi + r) - p ) / (P->A - 2. * r); if (fabs(V) < EPS) break; } if (!i) lp.phi = p < 0. ? -CON_POLE : CON_POLE; xy.x = P->C_x * lp.lam * (P->D - sqrt(1. + lp.phi * lp.phi)); xy.y = P->C_y * lp.phi; return (xy); } INVERSE(s_inverse); /* spheroid */ double r; lp.phi = xy.y / P->C_y; r = sqrt(1. + lp.phi * lp.phi); lp.lam = xy.x / (P->C_x * (P->D - r)); lp.phi = aasin( ( (P->A - r) * lp.phi - log(lp.phi + r) ) / P->B); return (lp); } FREEUP; if (P) pj_dalloc(P); } static PJ * setup(PJ *P) { P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; return P; } ENTRY0(putp6) P->C_x = 1.01346; P->C_y = 0.91910; P->A = 4.; P->B = 2.1471437182129378784; P->D = 2.; ENDENTRY(setup(P)) ENTRY0(putp6p) P->C_x = 0.44329; P->C_y = 0.80404; P->A = 6.; P->B = 5.61125; P->D = 3.; ENDENTRY(setup(P)) therion/extern/proj4/pj_qsfn.c0000644000076400010400000000052111137333770017437 0ustar userAdministrators/* determine small q */ #include #include # define EPSILON 1.0e-7 double pj_qsfn(double sinphi, double e, double one_es) { double con; if (e >= EPSILON) { con = e * sinphi; return (one_es * (sinphi / (1. - con * con) - (.5 / e) * log ((1. - con) / (1. + con)))); } else return (sinphi + sinphi); } therion/extern/proj4/pj_release.c0000644000076400010400000000026411256553360020115 0ustar userAdministrators/* <<< Release Notice for library >>> */ #include char const pj_release[]="Rel. 4.7.1, 23 September 2009"; const char *pj_get_release() { return pj_release; } therion/extern/proj4/PJ_robin.c0000644000076400010400000000657511137333772017522 0ustar userAdministrators#define PJ_LIB__ #include PROJ_HEAD(robin, "Robinson") "\n\tPCyl., Sph."; #define V(C,z) (C.c0 + z * (C.c1 + z * (C.c2 + z * C.c3))) #define DV(C,z) (C.c1 + z * (C.c2 + C.c2 + z * 3. * C.c3)) /* note: following terms based upon 5 deg. intervals in degrees. */ static struct COEFS { float c0, c1, c2, c3; } X[] = { 1, -5.67239e-12, -7.15511e-05, 3.11028e-06, 0.9986, -0.000482241, -2.4897e-05, -1.33094e-06, 0.9954, -0.000831031, -4.4861e-05, -9.86588e-07, 0.99, -0.00135363, -5.96598e-05, 3.67749e-06, 0.9822, -0.00167442, -4.4975e-06, -5.72394e-06, 0.973, -0.00214869, -9.03565e-05, 1.88767e-08, 0.96, -0.00305084, -9.00732e-05, 1.64869e-06, 0.9427, -0.00382792, -6.53428e-05, -2.61493e-06, 0.9216, -0.00467747, -0.000104566, 4.8122e-06, 0.8962, -0.00536222, -3.23834e-05, -5.43445e-06, 0.8679, -0.00609364, -0.0001139, 3.32521e-06, 0.835, -0.00698325, -6.40219e-05, 9.34582e-07, 0.7986, -0.00755337, -5.00038e-05, 9.35532e-07, 0.7597, -0.00798325, -3.59716e-05, -2.27604e-06, 0.7186, -0.00851366, -7.0112e-05, -8.63072e-06, 0.6732, -0.00986209, -0.000199572, 1.91978e-05, 0.6213, -0.010418, 8.83948e-05, 6.24031e-06, 0.5722, -0.00906601, 0.000181999, 6.24033e-06, 0.5322, 0.,0.,0. }, Y[] = { 0, 0.0124, 3.72529e-10, 1.15484e-09, 0.062, 0.0124001, 1.76951e-08, -5.92321e-09, 0.124, 0.0123998, -7.09668e-08, 2.25753e-08, 0.186, 0.0124008, 2.66917e-07, -8.44523e-08, 0.248, 0.0123971, -9.99682e-07, 3.15569e-07, 0.31, 0.0124108, 3.73349e-06, -1.1779e-06, 0.372, 0.0123598, -1.3935e-05, 4.39588e-06, 0.434, 0.0125501, 5.20034e-05, -1.00051e-05, 0.4968, 0.0123198, -9.80735e-05, 9.22397e-06, 0.5571, 0.0120308, 4.02857e-05, -5.2901e-06, 0.6176, 0.0120369, -3.90662e-05, 7.36117e-07, 0.6769, 0.0117015, -2.80246e-05, -8.54283e-07, 0.7346, 0.0113572, -4.08389e-05, -5.18524e-07, 0.7903, 0.0109099, -4.86169e-05, -1.0718e-06, 0.8435, 0.0103433, -6.46934e-05, 5.36384e-09, 0.8936, 0.00969679, -6.46129e-05, -8.54894e-06, 0.9394, 0.00840949, -0.000192847, -4.21023e-06, 0.9761, 0.00616525, -0.000256001, -4.21021e-06, 1., 0.,0.,0 }; #define FXC 0.8487 #define FYC 1.3523 #define C1 11.45915590261646417544 #define RC1 0.08726646259971647884 #define NODES 18 #define ONEEPS 1.000001 #define EPS 1e-8 FORWARD(s_forward); /* spheroid */ int i; double dphi; i = floor((dphi = fabs(lp.phi)) * C1); if (i >= NODES) i = NODES - 1; dphi = RAD_TO_DEG * (dphi - RC1 * i); xy.x = V(X[i], dphi) * FXC * lp.lam; xy.y = V(Y[i], dphi) * FYC; if (lp.phi < 0.) xy.y = -xy.y; return (xy); } INVERSE(s_inverse); /* spheroid */ int i; double t, t1; struct COEFS T; lp.lam = xy.x / FXC; lp.phi = fabs(xy.y / FYC); if (lp.phi >= 1.) { /* simple pathologic cases */ if (lp.phi > ONEEPS) I_ERROR else { lp.phi = xy.y < 0. ? -HALFPI : HALFPI; lp.lam /= X[NODES].c0; } } else { /* general problem */ /* in Y space, reduce to table interval */ for (i = floor(lp.phi * NODES);;) { if (Y[i].c0 > lp.phi) --i; else if (Y[i+1].c0 <= lp.phi) ++i; else break; } T = Y[i]; /* first guess, linear interp */ t = 5. * (lp.phi - T.c0)/(Y[i+1].c0 - T.c0); /* make into root */ T.c0 -= lp.phi; for (;;) { /* Newton-Raphson reduction */ t -= t1 = V(T,t) / DV(T,t); if (fabs(t1) < EPS) break; } lp.phi = (5 * i + t) * DEG_TO_RAD; if (xy.y < 0.) lp.phi = -lp.phi; lp.lam /= V(X[i], t); } return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(robin) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/PJ_rpoly.c0000644000076400010400000000143711137333774017550 0ustar userAdministrators#define PROJ_PARMS__ \ double phi1; \ double fxa; \ double fxb; \ int mode; #define EPS 1e-9 #define PJ_LIB__ #include PROJ_HEAD(rpoly, "Rectangular Polyconic") "\n\tConic, Sph., no inv.\n\tlat_ts="; FORWARD(s_forward); /* spheroid */ double fa; if (P->mode) fa = tan(lp.lam * P->fxb) * P->fxa; else fa = 0.5 * lp.lam; if (fabs(lp.phi) < EPS) { xy.x = fa + fa; xy.y = - P->phi0; } else { xy.y = 1. / tan(lp.phi); xy.x = sin(fa = 2. * atan(fa * sin(lp.phi))) * xy.y; xy.y = lp.phi - P->phi0 + (1. - cos(fa)) * xy.y; } return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(rpoly) if ((P->mode = (P->phi1 = fabs(pj_param(P->params, "rlat_ts").f)) > EPS)) { P->fxb = 0.5 * sin(P->phi1); P->fxa = 0.5 / P->fxb; } P->es = 0.; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/PJ_sconics.c0000644000076400010400000000667211137334000020031 0ustar userAdministrators#define PROJ_PARMS__ \ double n; \ double rho_c; \ double rho_0; \ double sig; \ double c1, c2; \ int type; #define PJ_LIB__ #include #define EULER 0 #define MURD1 1 #define MURD2 2 #define MURD3 3 #define PCONIC 4 #define TISSOT 5 #define VITK1 6 #define EPS10 1.e-10 #define EPS 1e-10 #define LINE2 "\n\tConic, Sph\n\tlat_1= and lat_2=" PROJ_HEAD(tissot, "Tissot") LINE2; PROJ_HEAD(murd1, "Murdoch I") LINE2; PROJ_HEAD(murd2, "Murdoch II") LINE2; PROJ_HEAD(murd3, "Murdoch III") LINE2; PROJ_HEAD(euler, "Euler") LINE2; PROJ_HEAD(pconic, "Perspective Conic") LINE2; PROJ_HEAD(vitk1, "Vitkovsky I") LINE2; /* get common factors for simple conics */ static int phi12(PJ *P, double *del) { double p1, p2; int err = 0; if (!pj_param(P->params, "tlat_1").i || !pj_param(P->params, "tlat_2").i) { err = -41; } else { p1 = pj_param(P->params, "rlat_1").f; p2 = pj_param(P->params, "rlat_2").f; *del = 0.5 * (p2 - p1); P->sig = 0.5 * (p2 + p1); err = (fabs(*del) < EPS || fabs(P->sig) < EPS) ? -42 : 0; *del = *del; } return err; } FORWARD(s_forward); /* spheroid */ double rho; switch (P->type) { case MURD2: rho = P->rho_c + tan(P->sig - lp.phi); break; case PCONIC: rho = P->c2 * (P->c1 - tan(lp.phi)); break; default: rho = P->rho_c - lp.phi; break; } xy.x = rho * sin( lp.lam *= P->n ); xy.y = P->rho_0 - rho * cos(lp.lam); return (xy); } INVERSE(s_inverse); /* ellipsoid & spheroid */ double rho; rho = hypot(xy.x, xy.y = P->rho_0 - xy.y); if (P->n < 0.) { rho = - rho; xy.x = - xy.x; xy.y = - xy.y; } lp.lam = atan2(xy.x, xy.y) / P->n; switch (P->type) { case PCONIC: lp.phi = atan(P->c1 - rho / P->c2) + P->sig; break; case MURD2: lp.phi = P->sig - atan(rho - P->rho_c); break; default: lp.phi = P->rho_c - rho; } return (lp); } FREEUP; if (P) pj_dalloc(P); } static PJ * setup(PJ *P) { double del, cs; int i; if( (i = phi12(P, &del)) ) E_ERROR(i); switch (P->type) { case TISSOT: P->n = sin(P->sig); cs = cos(del); P->rho_c = P->n / cs + cs / P->n; P->rho_0 = sqrt((P->rho_c - 2 * sin(P->phi0))/P->n); break; case MURD1: P->rho_c = sin(del)/(del * tan(P->sig)) + P->sig; P->rho_0 = P->rho_c - P->phi0; P->n = sin(P->sig); break; case MURD2: P->rho_c = (cs = sqrt(cos(del))) / tan(P->sig); P->rho_0 = P->rho_c + tan(P->sig - P->phi0); P->n = sin(P->sig) * cs; break; case MURD3: P->rho_c = del / (tan(P->sig) * tan(del)) + P->sig; P->rho_0 = P->rho_c - P->phi0; P->n = sin(P->sig) * sin(del) * tan(del) / (del * del); break; case EULER: P->n = sin(P->sig) * sin(del) / del; del *= 0.5; P->rho_c = del / (tan(del) * tan(P->sig)) + P->sig; P->rho_0 = P->rho_c - P->phi0; break; case PCONIC: P->n = sin(P->sig); P->c2 = cos(del); P->c1 = 1./tan(P->sig); if (fabs(del = P->phi0 - P->sig) - EPS10 >= HALFPI) E_ERROR(-43); P->rho_0 = P->c2 * (P->c1 - tan(del)); break; case VITK1: P->n = (cs = tan(del)) * sin(P->sig) / del; P->rho_c = del / (cs * tan(P->sig)) + P->sig; P->rho_0 = P->rho_c - P->phi0; break; } P->inv = s_inverse; P->fwd = s_forward; P->es = 0; return (P); } ENTRY0(euler) P->type = EULER; ENDENTRY(setup(P)) ENTRY0(tissot) P->type = TISSOT; ENDENTRY(setup(P)) ENTRY0(murd1) P->type = MURD1; ENDENTRY(setup(P)) ENTRY0(murd2) P->type = MURD2; ENDENTRY(setup(P)) ENTRY0(murd3) P->type = MURD3; ENDENTRY(setup(P)) ENTRY0(pconic) P->type = PCONIC; ENDENTRY(setup(P)) ENTRY0(vitk1) P->type = VITK1; ENDENTRY(setup(P)) therion/extern/proj4/PJ_somerc.c0000644000076400010400000000347411137334002017657 0ustar userAdministrators#define PROJ_PARMS__ \ double K, c, hlf_e, kR, cosp0, sinp0; #define PJ_LIB__ #include PROJ_HEAD(somerc, "Swiss. Obl. Mercator") "\n\tCyl, Ell\n\tFor CH1903"; #define EPS 1.e-10 #define NITER 6 FORWARD(e_forward); double phip, lamp, phipp, lampp, sp, cp; sp = P->e * sin(lp.phi); phip = 2.* atan( exp( P->c * ( log(tan(FORTPI + 0.5 * lp.phi)) - P->hlf_e * log((1. + sp)/(1. - sp))) + P->K)) - HALFPI; lamp = P->c * lp.lam; cp = cos(phip); phipp = aasin(P->cosp0 * sin(phip) - P->sinp0 * cp * cos(lamp)); lampp = aasin(cp * sin(lamp) / cos(phipp)); xy.x = P->kR * lampp; xy.y = P->kR * log(tan(FORTPI + 0.5 * phipp)); return (xy); } INVERSE(e_inverse); /* ellipsoid & spheroid */ double phip, lamp, phipp, lampp, cp, esp, con, delp; int i; phipp = 2. * (atan(exp(xy.y / P->kR)) - FORTPI); lampp = xy.x / P->kR; cp = cos(phipp); phip = aasin(P->cosp0 * sin(phipp) + P->sinp0 * cp * cos(lampp)); lamp = aasin(cp * sin(lampp) / cos(phip)); con = (P->K - log(tan(FORTPI + 0.5 * phip)))/P->c; for (i = NITER; i ; --i) { esp = P->e * sin(phip); delp = (con + log(tan(FORTPI + 0.5 * phip)) - P->hlf_e * log((1. + esp)/(1. - esp)) ) * (1. - esp * esp) * cos(phip) * P->rone_es; phip -= delp; if (fabs(delp) < EPS) break; } if (i) { lp.phi = phip; lp.lam = lamp / P->c; } else I_ERROR return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(somerc) double cp, phip0, sp; P->hlf_e = 0.5 * P->e; cp = cos(P->phi0); cp *= cp; P->c = sqrt(1 + P->es * cp * cp * P->rone_es); sp = sin(P->phi0); P->cosp0 = cos( phip0 = aasin(P->sinp0 = sp / P->c) ); sp *= P->e; P->K = log(tan(FORTPI + 0.5 * phip0)) - P->c * ( log(tan(FORTPI + 0.5 * P->phi0)) - P->hlf_e * log((1. + sp) / (1. - sp))); P->kR = P->k0 * sqrt(P->one_es) / (1. - sp * sp); P->inv = e_inverse; P->fwd = e_forward; ENDENTRY(P) therion/extern/proj4/PJ_stere.c0000644000076400010400000001324111137334004017504 0ustar userAdministrators#define PROJ_PARMS__ \ double phits; \ double sinX1; \ double cosX1; \ double akm1; \ int mode; #define PJ_LIB__ #include PROJ_HEAD(stere, "Stereographic") "\n\tAzi, Sph&Ell\n\tlat_ts="; PROJ_HEAD(ups, "Universal Polar Stereographic") "\n\tAzi, Sph&Ell\n\tsouth"; #define sinph0 P->sinX1 #define cosph0 P->cosX1 #define EPS10 1.e-10 #define TOL 1.e-8 #define NITER 8 #define CONV 1.e-10 #define S_POLE 0 #define N_POLE 1 #define OBLIQ 2 #define EQUIT 3 static double ssfn_(double phit, double sinphi, double eccen) { sinphi *= eccen; return (tan (.5 * (HALFPI + phit)) * pow((1. - sinphi) / (1. + sinphi), .5 * eccen)); } FORWARD(e_forward); /* ellipsoid */ double coslam, sinlam, sinX=0.0, cosX=0.0, X, A, sinphi; coslam = cos(lp.lam); sinlam = sin(lp.lam); sinphi = sin(lp.phi); if (P->mode == OBLIQ || P->mode == EQUIT) { sinX = sin(X = 2. * atan(ssfn_(lp.phi, sinphi, P->e)) - HALFPI); cosX = cos(X); } switch (P->mode) { case OBLIQ: A = P->akm1 / (P->cosX1 * (1. + P->sinX1 * sinX + P->cosX1 * cosX * coslam)); xy.y = A * (P->cosX1 * sinX - P->sinX1 * cosX * coslam); goto xmul; case EQUIT: A = 2. * P->akm1 / (1. + cosX * coslam); xy.y = A * sinX; xmul: xy.x = A * cosX; break; case S_POLE: lp.phi = -lp.phi; coslam = - coslam; sinphi = -sinphi; case N_POLE: xy.x = P->akm1 * pj_tsfn(lp.phi, sinphi, P->e); xy.y = - xy.x * coslam; break; } xy.x = xy.x * sinlam; return (xy); } FORWARD(s_forward); /* spheroid */ double sinphi, cosphi, coslam, sinlam; sinphi = sin(lp.phi); cosphi = cos(lp.phi); coslam = cos(lp.lam); sinlam = sin(lp.lam); switch (P->mode) { case EQUIT: xy.y = 1. + cosphi * coslam; goto oblcon; case OBLIQ: xy.y = 1. + sinph0 * sinphi + cosph0 * cosphi * coslam; oblcon: if (xy.y <= EPS10) F_ERROR; xy.x = (xy.y = P->akm1 / xy.y) * cosphi * sinlam; xy.y *= (P->mode == EQUIT) ? sinphi : cosph0 * sinphi - sinph0 * cosphi * coslam; break; case N_POLE: coslam = - coslam; lp.phi = - lp.phi; case S_POLE: if (fabs(lp.phi - HALFPI) < TOL) F_ERROR; xy.x = sinlam * ( xy.y = P->akm1 * tan(FORTPI + .5 * lp.phi) ); xy.y *= coslam; break; } return (xy); } INVERSE(e_inverse); /* ellipsoid */ double cosphi, sinphi, tp=0.0, phi_l=0.0, rho, halfe=0.0, halfpi=0.0; int i; rho = hypot(xy.x, xy.y); switch (P->mode) { case OBLIQ: case EQUIT: cosphi = cos( tp = 2. * atan2(rho * P->cosX1 , P->akm1) ); sinphi = sin(tp); if( rho == 0.0 ) phi_l = asin(cosphi * P->sinX1); else phi_l = asin(cosphi * P->sinX1 + (xy.y * sinphi * P->cosX1 / rho)); tp = tan(.5 * (HALFPI + phi_l)); xy.x *= sinphi; xy.y = rho * P->cosX1 * cosphi - xy.y * P->sinX1* sinphi; halfpi = HALFPI; halfe = .5 * P->e; break; case N_POLE: xy.y = -xy.y; case S_POLE: phi_l = HALFPI - 2. * atan(tp = - rho / P->akm1); halfpi = -HALFPI; halfe = -.5 * P->e; break; } for (i = NITER; i--; phi_l = lp.phi) { sinphi = P->e * sin(phi_l); lp.phi = 2. * atan(tp * pow((1.+sinphi)/(1.-sinphi), halfe)) - halfpi; if (fabs(phi_l - lp.phi) < CONV) { if (P->mode == S_POLE) lp.phi = -lp.phi; lp.lam = (xy.x == 0. && xy.y == 0.) ? 0. : atan2(xy.x, xy.y); return (lp); } } I_ERROR; } INVERSE(s_inverse); /* spheroid */ double c, rh, sinc, cosc; sinc = sin(c = 2. * atan((rh = hypot(xy.x, xy.y)) / P->akm1)); cosc = cos(c); lp.lam = 0.; switch (P->mode) { case EQUIT: if (fabs(rh) <= EPS10) lp.phi = 0.; else lp.phi = asin(xy.y * sinc / rh); if (cosc != 0. || xy.x != 0.) lp.lam = atan2(xy.x * sinc, cosc * rh); break; case OBLIQ: if (fabs(rh) <= EPS10) lp.phi = P->phi0; else lp.phi = asin(cosc * sinph0 + xy.y * sinc * cosph0 / rh); if ((c = cosc - sinph0 * sin(lp.phi)) != 0. || xy.x != 0.) lp.lam = atan2(xy.x * sinc * cosph0, c * rh); break; case N_POLE: xy.y = -xy.y; case S_POLE: if (fabs(rh) <= EPS10) lp.phi = P->phi0; else lp.phi = asin(P->mode == S_POLE ? - cosc : cosc); lp.lam = (xy.x == 0. && xy.y == 0.) ? 0. : atan2(xy.x, xy.y); break; } return (lp); } FREEUP; if (P) pj_dalloc(P); } static PJ * setup(PJ *P) { /* general initialization */ double t; if (fabs((t = fabs(P->phi0)) - HALFPI) < EPS10) P->mode = P->phi0 < 0. ? S_POLE : N_POLE; else P->mode = t > EPS10 ? OBLIQ : EQUIT; P->phits = fabs(P->phits); if (P->es) { double X; switch (P->mode) { case N_POLE: case S_POLE: if (fabs(P->phits - HALFPI) < EPS10) P->akm1 = 2. * P->k0 / sqrt(pow(1+P->e,1+P->e)*pow(1-P->e,1-P->e)); else { P->akm1 = cos(P->phits) / pj_tsfn(P->phits, t = sin(P->phits), P->e); t *= P->e; P->akm1 /= sqrt(1. - t * t); } break; case EQUIT: P->akm1 = 2. * P->k0; break; case OBLIQ: t = sin(P->phi0); X = 2. * atan(ssfn_(P->phi0, t, P->e)) - HALFPI; t *= P->e; P->akm1 = 2. * P->k0 * cos(P->phi0) / sqrt(1. - t * t); P->sinX1 = sin(X); P->cosX1 = cos(X); break; } P->inv = e_inverse; P->fwd = e_forward; } else { switch (P->mode) { case OBLIQ: sinph0 = sin(P->phi0); cosph0 = cos(P->phi0); case EQUIT: P->akm1 = 2. * P->k0; break; case S_POLE: case N_POLE: P->akm1 = fabs(P->phits - HALFPI) >= EPS10 ? cos(P->phits) / tan(FORTPI - .5 * P->phits) : 2. * P->k0 ; break; } P->inv = s_inverse; P->fwd = s_forward; } return P; } ENTRY0(stere) P->phits = pj_param(P->params, "tlat_ts").i ? P->phits = pj_param(P->params, "rlat_ts").f : HALFPI; ENDENTRY(setup(P)) ENTRY0(ups) /* International Ellipsoid */ P->phi0 = pj_param(P->params, "bsouth").i ? - HALFPI: HALFPI; if (!P->es) E_ERROR(-34); P->k0 = .994; P->x0 = 2000000.; P->y0 = 2000000.; P->phits = HALFPI; P->lam0 = 0.; ENDENTRY(setup(P)) therion/extern/proj4/PJ_sterea.c0000644000076400010400000000500611130502664017647 0ustar userAdministrators/* ** libproj -- library of cartographic projections ** ** Copyright (c) 2003 Gerald I. Evenden */ static const char LIBPROJ_ID[] = "$Id: PJ_sterea.c 1504 2009-01-06 02:11:57Z warmerdam $"; /* ** Permission is hereby granted, free of charge, to any person obtaining ** a copy of this software and associated documentation files (the ** "Software"), to deal in the Software without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Software, and to ** permit persons to whom the Software is furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be ** included in all copies or substantial portions of the Software. ** ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #define PROJ_PARMS__ \ double phic0; \ double cosc0, sinc0; \ double R2; \ void *en; #define PJ_LIB__ #include PROJ_HEAD(sterea, "Oblique Stereographic Alternative") "\n\tAzimuthal, Sph&Ell"; # define DEL_TOL 1.e-14 # define MAX_ITER 10 FORWARD(e_forward); /* ellipsoid */ double cosc, sinc, cosl, k; lp = pj_gauss(lp, P->en); sinc = sin(lp.phi); cosc = cos(lp.phi); cosl = cos(lp.lam); k = P->k0 * P->R2 / (1. + P->sinc0 * sinc + P->cosc0 * cosc * cosl); xy.x = k * cosc * sin(lp.lam); xy.y = k * (P->cosc0 * sinc - P->sinc0 * cosc * cosl); return (xy); } INVERSE(e_inverse); /* ellipsoid */ double rho, c, sinc, cosc; xy.x /= P->k0; xy.y /= P->k0; if((rho = hypot(xy.x, xy.y))) { c = 2. * atan2(rho, P->R2); sinc = sin(c); cosc = cos(c); lp.phi = asin(cosc * P->sinc0 + xy.y * sinc * P->cosc0 / rho); lp.lam = atan2(xy.x * sinc, rho * P->cosc0 * cosc - xy.y * P->sinc0 * sinc); } else { lp.phi = P->phic0; lp.lam = 0.; } return(pj_inv_gauss(lp, P->en)); } FREEUP; if (P) { if (P->en) free(P->en); free(P); } } ENTRY0(sterea) double R; if (!(P->en = pj_gauss_ini(P->e, P->phi0, &(P->phic0), &R))) E_ERROR_0; P->sinc0 = sin(P->phic0); P->cosc0 = cos(P->phic0); P->R2 = 2. * R; P->inv = e_inverse; P->fwd = e_forward; ENDENTRY(P) therion/extern/proj4/pj_strerrno.c0000644000076400010400000000532411137334010020340 0ustar userAdministrators/* list of projection system pj_errno values */ #include "projects.h" #include #include #include static char * pj_err_list[] = { "no arguments in initialization list", /* -1 */ "no options found in 'init' file", /* -2 */ "no colon in init= string", /* -3 */ "projection not named", /* -4 */ "unknown projection id", /* -5 */ "effective eccentricity = 1.", /* -6 */ "unknown unit conversion id", /* -7 */ "invalid boolean param argument", /* -8 */ "unknown elliptical parameter name", /* -9 */ "reciprocal flattening (1/f) = 0", /* -10 */ "|radius reference latitude| > 90", /* -11 */ "squared eccentricity < 0", /* -12 */ "major axis or radius = 0 or not given", /* -13 */ "latitude or longitude exceeded limits", /* -14 */ "invalid x or y", /* -15 */ "improperly formed DMS value", /* -16 */ "non-convergent inverse meridinal dist", /* -17 */ "non-convergent inverse phi2", /* -18 */ "acos/asin: |arg| >1.+1e-14", /* -19 */ "tolerance condition error", /* -20 */ "conic lat_1 = -lat_2", /* -21 */ "lat_1 >= 90", /* -22 */ "lat_1 = 0", /* -23 */ "lat_ts >= 90", /* -24 */ "no distance between control points", /* -25 */ "projection not selected to be rotated", /* -26 */ "W <= 0 or M <= 0", /* -27 */ "lsat not in 1-5 range", /* -28 */ "path not in range", /* -29 */ "h <= 0", /* -30 */ "k <= 0", /* -31 */ "lat_0 = 0 or 90 or alpha = 90", /* -32 */ "lat_1=lat_2 or lat_1=0 or lat_2=90", /* -33 */ "elliptical usage required", /* -34 */ "invalid UTM zone number", /* -35 */ "arg(s) out of range for Tcheby eval", /* -36 */ "failed to find projection to be rotated", /* -37 */ "failed to load NAD27-83 correction file", /* -38 */ "both n & m must be spec'd and > 0", /* -39 */ "n <= 0, n > 1 or not specified", /* -40 */ "lat_1 or lat_2 not specified", /* -41 */ "|lat_1| == |lat_2|", /* -42 */ "lat_0 is pi/2 from mean lat", /* -43 */ "unparseable coordinate system definition", /* -44 */ "geocentric transformation missing z or ellps", /* -45 */ "unknown prime meridian conversion id", /* -46 */ }; char * pj_strerrno(int err) { static char note[50]; if (err > 0) #ifdef HAVE_STRERROR return strerror(err); #else { sprintf(note,"no system list, errno: %d\n", err); return note; } #endif else if (err < 0) { int adjusted_err = - err - 1; if (adjusted_err < (sizeof(pj_err_list) / sizeof(char *))) return(pj_err_list[adjusted_err]); else { sprintf( note, "invalid projection system error (%d)", err ); return note; } } else return NULL; } therion/extern/proj4/PJ_sts.c0000644000076400010400000000237511204370140017175 0ustar userAdministrators#define PROJ_PARMS__ \ double C_x, C_y, C_p; \ int tan_mode; #define PJ_LIB__ # include PROJ_HEAD(kav5, "Kavraisky V") "\n\tPCyl., Sph."; PROJ_HEAD(qua_aut, "Quartic Authalic") "\n\tPCyl., Sph."; PROJ_HEAD(mbt_s, "McBryde-Thomas Flat-Polar Sine (No. 1)") "\n\tPCyl., Sph."; PROJ_HEAD(fouc, "Foucaut") "\n\tPCyl., Sph."; FORWARD(s_forward); /* spheroid */ double c; xy.x = P->C_x * lp.lam * cos(lp.phi); xy.y = P->C_y; lp.phi *= P->C_p; c = cos(lp.phi); if (P->tan_mode) { xy.x *= c * c; xy.y *= tan(lp.phi); } else { xy.x /= c; xy.y *= sin(lp.phi); } return (xy); } INVERSE(s_inverse); /* spheroid */ double c; xy.y /= P->C_y; c = cos(lp.phi = P->tan_mode ? atan(xy.y) : aasin(xy.y)); lp.phi /= P->C_p; lp.lam = xy.x / (P->C_x * cos(lp.phi)); if (P->tan_mode) lp.lam /= c * c; else lp.lam *= c; return (lp); } FREEUP; if (P) pj_dalloc(P); } static PJ * setup(PJ *P, double p, double q, int mode) { P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; P->C_x = q / p; P->C_y = p; P->C_p = 1/ q; P->tan_mode = mode; return P; } ENTRY0(kav5) ENDENTRY(setup(P, 1.50488, 1.35439, 0)) ENTRY0(qua_aut) ENDENTRY(setup(P, 2., 2., 0)) ENTRY0(mbt_s) ENDENTRY(setup(P, 1.48875, 1.36509, 0)) ENTRY0(fouc) ENDENTRY(setup(P, 2., 2., 1)) therion/extern/proj4/PJ_tcc.c0000644000076400010400000000071411137334014017135 0ustar userAdministrators#define PROJ_PARMS__ \ double ap; #define EPS10 1.e-10 #define PJ_LIB__ #include PROJ_HEAD(tcc, "Transverse Central Cylindrical") "\n\tCyl, Sph, no inv."; FORWARD(s_forward); /* spheroid */ double b, bt; b = cos(lp.phi) * sin(lp.lam); if ((bt = 1. - b * b) < EPS10) F_ERROR; xy.x = b / sqrt(bt); xy.y = atan2(tan(lp.phi) , cos(lp.lam)); return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(tcc) P->es = 0.; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/PJ_tcea.c0000644000076400010400000000120211137334016017273 0ustar userAdministrators#define PROJ_PARMS__ \ double rk0; #define PJ_LIB__ #include PROJ_HEAD(tcea, "Transverse Cylindrical Equal Area") "\n\tCyl, Sph"; FORWARD(s_forward); /* spheroid */ xy.x = P->rk0 * cos(lp.phi) * sin(lp.lam); xy.y = P->k0 * (atan2(tan(lp.phi), cos(lp.lam)) - P->phi0); return (xy); } INVERSE(s_inverse); /* spheroid */ double t; xy.y = xy.y * P->rk0 + P->phi0; xy.x *= P->k0; t = sqrt(1. - xy.x * xy.x); lp.phi = asin(t * sin(xy.y)); lp.lam = atan2(xy.x, t * cos(xy.y)); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(tcea) P->rk0 = 1 / P->k0; P->inv = s_inverse; P->fwd = s_forward; P->es = 0.; ENDENTRY(P) therion/extern/proj4/PJ_tmerc.c0000644000076400010400000001130011137334022017466 0ustar userAdministrators#define PROJ_PARMS__ \ double esp; \ double ml0; \ double *en; #define PJ_LIB__ #include PROJ_HEAD(tmerc, "Transverse Mercator") "\n\tCyl, Sph&Ell"; PROJ_HEAD(utm, "Universal Transverse Mercator (UTM)") "\n\tCyl, Sph\n\tzone= south"; #define EPS10 1.e-10 #define aks0 P->esp #define aks5 P->ml0 #define FC1 1. #define FC2 .5 #define FC3 .16666666666666666666 #define FC4 .08333333333333333333 #define FC5 .05 #define FC6 .03333333333333333333 #define FC7 .02380952380952380952 #define FC8 .01785714285714285714 FORWARD(e_forward); /* ellipse */ double al, als, n, cosphi, sinphi, t; /* * Fail if our longitude is more than 90 degrees from the * central meridian since the results are essentially garbage. * Is error -20 really an appropriate return value? * * http://trac.osgeo.org/proj/ticket/5 */ if( lp.lam < -HALFPI || lp.lam > HALFPI ) { xy.x = HUGE_VAL; xy.y = HUGE_VAL; pj_errno = -14; return xy; } sinphi = sin(lp.phi); cosphi = cos(lp.phi); t = fabs(cosphi) > 1e-10 ? sinphi/cosphi : 0.; t *= t; al = cosphi * lp.lam; als = al * al; al /= sqrt(1. - P->es * sinphi * sinphi); n = P->esp * cosphi * cosphi; xy.x = P->k0 * al * (FC1 + FC3 * als * (1. - t + n + FC5 * als * (5. + t * (t - 18.) + n * (14. - 58. * t) + FC7 * als * (61. + t * ( t * (179. - t) - 479. ) ) ))); xy.y = P->k0 * (pj_mlfn(lp.phi, sinphi, cosphi, P->en) - P->ml0 + sinphi * al * lp.lam * FC2 * ( 1. + FC4 * als * (5. - t + n * (9. + 4. * n) + FC6 * als * (61. + t * (t - 58.) + n * (270. - 330 * t) + FC8 * als * (1385. + t * ( t * (543. - t) - 3111.) ) )))); return (xy); } FORWARD(s_forward); /* sphere */ double b, cosphi; /* * Fail if our longitude is more than 90 degrees from the * central meridian since the results are essentially garbage. * Is error -20 really an appropriate return value? * * http://trac.osgeo.org/proj/ticket/5 */ if( lp.lam < -HALFPI || lp.lam > HALFPI ) { xy.x = HUGE_VAL; xy.y = HUGE_VAL; pj_errno = -14; return xy; } b = (cosphi = cos(lp.phi)) * sin(lp.lam); if (fabs(fabs(b) - 1.) <= EPS10) F_ERROR; xy.x = aks5 * log((1. + b) / (1. - b)); if ((b = fabs( xy.y = cosphi * cos(lp.lam) / sqrt(1. - b * b) )) >= 1.) { if ((b - 1.) > EPS10) F_ERROR else xy.y = 0.; } else xy.y = acos(xy.y); if (lp.phi < 0.) xy.y = -xy.y; xy.y = aks0 * (xy.y - P->phi0); return (xy); } INVERSE(e_inverse); /* ellipsoid */ double n, con, cosphi, d, ds, sinphi, t; lp.phi = pj_inv_mlfn(P->ml0 + xy.y / P->k0, P->es, P->en); if (fabs(lp.phi) >= HALFPI) { lp.phi = xy.y < 0. ? -HALFPI : HALFPI; lp.lam = 0.; } else { sinphi = sin(lp.phi); cosphi = cos(lp.phi); t = fabs(cosphi) > 1e-10 ? sinphi/cosphi : 0.; n = P->esp * cosphi * cosphi; d = xy.x * sqrt(con = 1. - P->es * sinphi * sinphi) / P->k0; con *= t; t *= t; ds = d * d; lp.phi -= (con * ds / (1.-P->es)) * FC2 * (1. - ds * FC4 * (5. + t * (3. - 9. * n) + n * (1. - 4 * n) - ds * FC6 * (61. + t * (90. - 252. * n + 45. * t) + 46. * n - ds * FC8 * (1385. + t * (3633. + t * (4095. + 1574. * t)) ) ))); lp.lam = d*(FC1 - ds*FC3*( 1. + 2.*t + n - ds*FC5*(5. + t*(28. + 24.*t + 8.*n) + 6.*n - ds * FC7 * (61. + t * (662. + t * (1320. + 720. * t)) ) ))) / cosphi; } return (lp); } INVERSE(s_inverse); /* sphere */ double h, g; h = exp(xy.x / aks0); g = .5 * (h - 1. / h); h = cos(P->phi0 + xy.y / aks0); lp.phi = asin(sqrt((1. - h * h) / (1. + g * g))); if (xy.y < 0.) lp.phi = -lp.phi; lp.lam = (g || h) ? atan2(g, h) : 0.; return (lp); } FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } } static PJ * setup(PJ *P) { /* general initialization */ if (P->es) { if (!(P->en = pj_enfn(P->es))) E_ERROR_0; P->ml0 = pj_mlfn(P->phi0, sin(P->phi0), cos(P->phi0), P->en); P->esp = P->es / (1. - P->es); P->inv = e_inverse; P->fwd = e_forward; } else { aks0 = P->k0; aks5 = .5 * aks0; P->inv = s_inverse; P->fwd = s_forward; } return P; } ENTRY1(tmerc, en) ENDENTRY(setup(P)) ENTRY1(utm, en) int zone; if (!P->es) E_ERROR(-34); P->y0 = pj_param(P->params, "bsouth").i ? 10000000. : 0.; P->x0 = 500000.; if (pj_param(P->params, "tzone").i) /* zone input ? */ if ((zone = pj_param(P->params, "izone").i) > 0 && zone <= 60) --zone; else E_ERROR(-35) else /* nearest central meridian input */ if ((zone = floor((adjlon(P->lam0) + PI) * 30. / PI)) < 0) zone = 0; else if (zone >= 60) zone = 59; P->lam0 = (zone + .5) * PI / 30. - PI; P->k0 = 0.9996; P->phi0 = 0.; ENDENTRY(setup(P)) therion/extern/proj4/PJ_tpeqd.c0000644000076400010400000000463211137334026017507 0ustar userAdministrators#define PROJ_PARMS__ \ double cp1, sp1, cp2, sp2, ccs, cs, sc, r2z0, z02, dlam2; \ double hz0, thz0, rhshz0, ca, sa, lp, lamc; #define PJ_LIB__ #include PROJ_HEAD(tpeqd, "Two Point Equidistant") "\n\tMisc Sph\n\tlat_1= lon_1= lat_2= lon_2="; FORWARD(s_forward); /* sphere */ double t, z1, z2, dl1, dl2, sp, cp; sp = sin(lp.phi); cp = cos(lp.phi); z1 = aacos(P->sp1 * sp + P->cp1 * cp * cos(dl1 = lp.lam + P->dlam2)); z2 = aacos(P->sp2 * sp + P->cp2 * cp * cos(dl2 = lp.lam - P->dlam2)); z1 *= z1; z2 *= z2; xy.x = P->r2z0 * (t = z1 - z2); t = P->z02 - t; xy.y = P->r2z0 * asqrt(4. * P->z02 * z2 - t * t); if ((P->ccs * sp - cp * (P->cs * sin(dl1) - P->sc * sin(dl2))) < 0.) xy.y = -xy.y; return xy; } INVERSE(s_inverse); /* sphere */ double cz1, cz2, s, d, cp, sp; cz1 = cos(hypot(xy.y, xy.x + P->hz0)); cz2 = cos(hypot(xy.y, xy.x - P->hz0)); s = cz1 + cz2; d = cz1 - cz2; lp.lam = - atan2(d, (s * P->thz0)); lp.phi = aacos(hypot(P->thz0 * s, d) * P->rhshz0); if ( xy.y < 0. ) lp.phi = - lp.phi; /* lam--phi now in system relative to P1--P2 base equator */ sp = sin(lp.phi); cp = cos(lp.phi); lp.phi = aasin(P->sa * sp + P->ca * cp * (s = cos(lp.lam -= P->lp))); lp.lam = atan2(cp * sin(lp.lam), P->sa * cp * s - P->ca * sp) + P->lamc; return lp; } FREEUP; if (P) pj_dalloc(P); } ENTRY0(tpeqd) double lam_1, lam_2, phi_1, phi_2, A12, pp; /* get control point locations */ phi_1 = pj_param(P->params, "rlat_1").f; lam_1 = pj_param(P->params, "rlon_1").f; phi_2 = pj_param(P->params, "rlat_2").f; lam_2 = pj_param(P->params, "rlon_2").f; if (phi_1 == phi_2 && lam_1 == lam_2) E_ERROR(-25); P->lam0 = adjlon(0.5 * (lam_1 + lam_2)); P->dlam2 = adjlon(lam_2 - lam_1); P->cp1 = cos(phi_1); P->cp2 = cos(phi_2); P->sp1 = sin(phi_1); P->sp2 = sin(phi_2); P->cs = P->cp1 * P->sp2; P->sc = P->sp1 * P->cp2; P->ccs = P->cp1 * P->cp2 * sin(P->dlam2); P->z02 = aacos(P->sp1 * P->sp2 + P->cp1 * P->cp2 * cos(P->dlam2)); P->hz0 = .5 * P->z02; A12 = atan2(P->cp2 * sin(P->dlam2), P->cp1 * P->sp2 - P->sp1 * P->cp2 * cos(P->dlam2)); P->ca = cos(pp = aasin(P->cp1 * sin(A12))); P->sa = sin(pp); P->lp = adjlon(atan2(P->cp1 * cos(A12), P->sp1) - P->hz0); P->dlam2 *= .5; P->lamc = HALFPI - atan2(sin(A12) * P->sp1, cos(A12)) - P->dlam2; P->thz0 = tan(P->hz0); P->rhshz0 = .5 / sin(P->hz0); P->r2z0 = 0.5 / P->z02; P->z02 *= P->z02; P->inv = s_inverse; P->fwd = s_forward; P->es = 0.; ENDENTRY(P) therion/extern/proj4/pj_transform.c0000644000076400010400000005510711130502664020506 0ustar userAdministrators/****************************************************************************** * $Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Perform overall coordinate system to coordinate system * transformations (pj_transform() function) including reprojection * and datum shifting. * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 2000, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #include #include #include #include "geocent.h" PJ_CVSID("$Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $"); #ifndef SRS_WGS84_SEMIMAJOR #define SRS_WGS84_SEMIMAJOR 6378137.0 #endif #ifndef SRS_WGS84_ESQUARED #define SRS_WGS84_ESQUARED 0.0066943799901413165 #endif #define Dx_BF (defn->datum_params[0]) #define Dy_BF (defn->datum_params[1]) #define Dz_BF (defn->datum_params[2]) #define Rx_BF (defn->datum_params[3]) #define Ry_BF (defn->datum_params[4]) #define Rz_BF (defn->datum_params[5]) #define M_BF (defn->datum_params[6]) /* ** This table is intended to indicate for any given error code in ** the range 0 to -44, whether that error will occur for all locations (ie. ** it is a problem with the coordinate system as a whole) in which case the ** value would be 0, or if the problem is with the point being transformed ** in which case the value is 1. ** ** At some point we might want to move this array in with the error message ** list or something, but while experimenting with it this should be fine. */ static const int transient_error[45] = { /* 0 1 2 3 4 5 6 7 8 9 */ /* 0 to 9 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 10 to 19 */ 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, /* 20 to 29 */ 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, /* 30 to 39 */ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, /* 40 to 44 */ 0, 0, 0, 0, 0 }; /************************************************************************/ /* pj_transform() */ /* */ /* Currently this function doesn't recognise if two projections */ /* are identical (to short circuit reprojection) because it is */ /* difficult to compare PJ structures (since there are some */ /* projection specific components). */ /************************************************************************/ int pj_transform( PJ *srcdefn, PJ *dstdefn, long point_count, int point_offset, double *x, double *y, double *z ) { long i; int need_datum_shift; pj_errno = 0; if( point_offset == 0 ) point_offset = 1; /* -------------------------------------------------------------------- */ /* Transform geocentric source coordinates to lat/long. */ /* -------------------------------------------------------------------- */ if( srcdefn->is_geocent ) { if( z == NULL ) { pj_errno = PJD_ERR_GEOCENTRIC; return PJD_ERR_GEOCENTRIC; } if( srcdefn->to_meter != 1.0 ) { for( i = 0; i < point_count; i++ ) { if( x[point_offset*i] != HUGE_VAL ) { x[point_offset*i] *= srcdefn->to_meter; y[point_offset*i] *= srcdefn->to_meter; } } } if( pj_geocentric_to_geodetic( srcdefn->a_orig, srcdefn->es_orig, point_count, point_offset, x, y, z ) != 0) return pj_errno; } /* -------------------------------------------------------------------- */ /* Transform source points to lat/long, if they aren't */ /* already. */ /* -------------------------------------------------------------------- */ else if( !srcdefn->is_latlong ) { if( srcdefn->inv == NULL ) { pj_errno = -17; /* this isn't correct, we need a no inverse err */ if( getenv( "PROJ_DEBUG" ) != NULL ) { fprintf( stderr, "pj_transform(): source projection not invertable\n" ); } return pj_errno; } for( i = 0; i < point_count; i++ ) { XY projected_loc; LP geodetic_loc; projected_loc.u = x[point_offset*i]; projected_loc.v = y[point_offset*i]; if( projected_loc.u == HUGE_VAL ) continue; geodetic_loc = pj_inv( projected_loc, srcdefn ); if( pj_errno != 0 ) { if( (pj_errno != 33 /*EDOM*/ && pj_errno != 34 /*ERANGE*/ ) && (pj_errno > 0 || pj_errno < -44 || point_count == 1 || transient_error[-pj_errno] == 0 ) ) return pj_errno; else { geodetic_loc.u = HUGE_VAL; geodetic_loc.v = HUGE_VAL; } } x[point_offset*i] = geodetic_loc.u; y[point_offset*i] = geodetic_loc.v; } } /* -------------------------------------------------------------------- */ /* But if they are already lat long, adjust for the prime */ /* meridian if there is one in effect. */ /* -------------------------------------------------------------------- */ if( srcdefn->from_greenwich != 0.0 ) { for( i = 0; i < point_count; i++ ) { if( x[point_offset*i] != HUGE_VAL ) x[point_offset*i] += srcdefn->from_greenwich; } } /* -------------------------------------------------------------------- */ /* Convert datums if needed, and possible. */ /* -------------------------------------------------------------------- */ if( pj_datum_transform( srcdefn, dstdefn, point_count, point_offset, x, y, z ) != 0 ) return pj_errno; /* -------------------------------------------------------------------- */ /* But if they are staying lat long, adjust for the prime */ /* meridian if there is one in effect. */ /* -------------------------------------------------------------------- */ if( dstdefn->from_greenwich != 0.0 ) { for( i = 0; i < point_count; i++ ) { if( x[point_offset*i] != HUGE_VAL ) x[point_offset*i] -= dstdefn->from_greenwich; } } /* -------------------------------------------------------------------- */ /* Transform destination latlong to geocentric if required. */ /* -------------------------------------------------------------------- */ if( dstdefn->is_geocent ) { if( z == NULL ) { pj_errno = PJD_ERR_GEOCENTRIC; return PJD_ERR_GEOCENTRIC; } pj_geodetic_to_geocentric( dstdefn->a_orig, dstdefn->es_orig, point_count, point_offset, x, y, z ); if( dstdefn->fr_meter != 1.0 ) { for( i = 0; i < point_count; i++ ) { if( x[point_offset*i] != HUGE_VAL ) { x[point_offset*i] *= dstdefn->fr_meter; y[point_offset*i] *= dstdefn->fr_meter; } } } } /* -------------------------------------------------------------------- */ /* Transform destination points to projection coordinates, if */ /* desired. */ /* -------------------------------------------------------------------- */ else if( !dstdefn->is_latlong ) { for( i = 0; i < point_count; i++ ) { XY projected_loc; LP geodetic_loc; geodetic_loc.u = x[point_offset*i]; geodetic_loc.v = y[point_offset*i]; if( geodetic_loc.u == HUGE_VAL ) continue; projected_loc = pj_fwd( geodetic_loc, dstdefn ); if( pj_errno != 0 ) { if( (pj_errno != 33 /*EDOM*/ && pj_errno != 34 /*ERANGE*/ ) && (pj_errno > 0 || pj_errno < -44 || point_count == 1 || transient_error[-pj_errno] == 0 ) ) return pj_errno; else { projected_loc.u = HUGE_VAL; projected_loc.v = HUGE_VAL; } } x[point_offset*i] = projected_loc.u; y[point_offset*i] = projected_loc.v; } } /* -------------------------------------------------------------------- */ /* If a wrapping center other than 0 is provided, rewrap around */ /* the suggested center (for latlong coordinate systems only). */ /* -------------------------------------------------------------------- */ else if( dstdefn->is_latlong && dstdefn->long_wrap_center != 0 ) { for( i = 0; i < point_count; i++ ) { if( x[point_offset*i] == HUGE_VAL ) continue; while( x[point_offset*i] < dstdefn->long_wrap_center - HALFPI ) x[point_offset*i] += PI; while( x[point_offset*i] > dstdefn->long_wrap_center + HALFPI ) x[point_offset*i] -= PI; } } return 0; } /************************************************************************/ /* pj_geodetic_to_geocentric() */ /************************************************************************/ int pj_geodetic_to_geocentric( double a, double es, long point_count, int point_offset, double *x, double *y, double *z ) { double b; int i; GeocentricInfo gi; pj_errno = 0; if( es == 0.0 ) b = a; else b = a * sqrt(1-es); if( pj_Set_Geocentric_Parameters( &gi, a, b ) != 0 ) { pj_errno = PJD_ERR_GEOCENTRIC; return pj_errno; } for( i = 0; i < point_count; i++ ) { long io = i * point_offset; if( x[io] == HUGE_VAL ) continue; if( pj_Convert_Geodetic_To_Geocentric( &gi, y[io], x[io], z[io], x+io, y+io, z+io ) != 0 ) { pj_errno = -14; x[io] = y[io] = HUGE_VAL; /* but keep processing points! */ } } return pj_errno; } /************************************************************************/ /* pj_geodetic_to_geocentric() */ /************************************************************************/ int pj_geocentric_to_geodetic( double a, double es, long point_count, int point_offset, double *x, double *y, double *z ) { double b; int i; GeocentricInfo gi; if( es == 0.0 ) b = a; else b = a * sqrt(1-es); if( pj_Set_Geocentric_Parameters( &gi, a, b ) != 0 ) { pj_errno = PJD_ERR_GEOCENTRIC; return pj_errno; } for( i = 0; i < point_count; i++ ) { long io = i * point_offset; if( x[io] == HUGE_VAL ) continue; pj_Convert_Geocentric_To_Geodetic( &gi, x[io], y[io], z[io], y+io, x+io, z+io ); } return 0; } /************************************************************************/ /* pj_compare_datums() */ /* */ /* Returns TRUE if the two datums are identical, otherwise */ /* FALSE. */ /************************************************************************/ int pj_compare_datums( PJ *srcdefn, PJ *dstdefn ) { if( srcdefn->datum_type != dstdefn->datum_type ) { return 0; } else if( srcdefn->a_orig != dstdefn->a_orig || ABS(srcdefn->es_orig - dstdefn->es_orig) > 0.000000000050 ) { /* the tolerence for es is to ensure that GRS80 and WGS84 are considered identical */ return 0; } else if( srcdefn->datum_type == PJD_3PARAM ) { return (srcdefn->datum_params[0] == dstdefn->datum_params[0] && srcdefn->datum_params[1] == dstdefn->datum_params[1] && srcdefn->datum_params[2] == dstdefn->datum_params[2]); } else if( srcdefn->datum_type == PJD_7PARAM ) { return (srcdefn->datum_params[0] == dstdefn->datum_params[0] && srcdefn->datum_params[1] == dstdefn->datum_params[1] && srcdefn->datum_params[2] == dstdefn->datum_params[2] && srcdefn->datum_params[3] == dstdefn->datum_params[3] && srcdefn->datum_params[4] == dstdefn->datum_params[4] && srcdefn->datum_params[5] == dstdefn->datum_params[5] && srcdefn->datum_params[6] == dstdefn->datum_params[6]); } else if( srcdefn->datum_type == PJD_GRIDSHIFT ) { return strcmp( pj_param(srcdefn->params,"snadgrids").s, pj_param(dstdefn->params,"snadgrids").s ) == 0; } else return 1; } /************************************************************************/ /* pj_geocentic_to_wgs84() */ /************************************************************************/ int pj_geocentric_to_wgs84( PJ *defn, long point_count, int point_offset, double *x, double *y, double *z ) { int i; pj_errno = 0; if( defn->datum_type == PJD_3PARAM ) { for( i = 0; i < point_count; i++ ) { long io = i * point_offset; if( x[io] == HUGE_VAL ) continue; x[io] = x[io] + Dx_BF; y[io] = y[io] + Dy_BF; z[io] = z[io] + Dz_BF; } } else if( defn->datum_type == PJD_7PARAM ) { for( i = 0; i < point_count; i++ ) { long io = i * point_offset; double x_out, y_out, z_out; if( x[io] == HUGE_VAL ) continue; x_out = M_BF*( x[io] - Rz_BF*y[io] + Ry_BF*z[io]) + Dx_BF; y_out = M_BF*( Rz_BF*x[io] + y[io] - Rx_BF*z[io]) + Dy_BF; z_out = M_BF*(-Ry_BF*x[io] + Rx_BF*y[io] + z[io]) + Dz_BF; x[io] = x_out; y[io] = y_out; z[io] = z_out; } } return 0; } /************************************************************************/ /* pj_geocentic_from_wgs84() */ /************************************************************************/ int pj_geocentric_from_wgs84( PJ *defn, long point_count, int point_offset, double *x, double *y, double *z ) { int i; pj_errno = 0; if( defn->datum_type == PJD_3PARAM ) { for( i = 0; i < point_count; i++ ) { long io = i * point_offset; if( x[io] == HUGE_VAL ) continue; x[io] = x[io] - Dx_BF; y[io] = y[io] - Dy_BF; z[io] = z[io] - Dz_BF; } } else if( defn->datum_type == PJD_7PARAM ) { for( i = 0; i < point_count; i++ ) { long io = i * point_offset; double x_tmp, y_tmp, z_tmp; if( x[io] == HUGE_VAL ) continue; x_tmp = (x[io] - Dx_BF) / M_BF; y_tmp = (y[io] - Dy_BF) / M_BF; z_tmp = (z[io] - Dz_BF) / M_BF; x[io] = x_tmp + Rz_BF*y_tmp - Ry_BF*z_tmp; y[io] = -Rz_BF*x_tmp + y_tmp + Rx_BF*z_tmp; z[io] = Ry_BF*x_tmp - Rx_BF*y_tmp + z_tmp; } } return 0; } /************************************************************************/ /* pj_datum_transform() */ /* */ /* The input should be long/lat/z coordinates in radians in the */ /* source datum, and the output should be long/lat/z */ /* coordinates in radians in the destination datum. */ /************************************************************************/ int pj_datum_transform( PJ *srcdefn, PJ *dstdefn, long point_count, int point_offset, double *x, double *y, double *z ) { double src_a, src_es, dst_a, dst_es; int z_is_temp = FALSE; pj_errno = 0; /* -------------------------------------------------------------------- */ /* We cannot do any meaningful datum transformation if either */ /* the source or destination are of an unknown datum type */ /* (ie. only a +ellps declaration, no +datum). This is new */ /* behavior for PROJ 4.6.0. */ /* -------------------------------------------------------------------- */ if( srcdefn->datum_type == PJD_UNKNOWN || dstdefn->datum_type == PJD_UNKNOWN ) return 0; /* -------------------------------------------------------------------- */ /* Short cut if the datums are identical. */ /* -------------------------------------------------------------------- */ if( pj_compare_datums( srcdefn, dstdefn ) ) return 0; src_a = srcdefn->a_orig; src_es = srcdefn->es_orig; dst_a = dstdefn->a_orig; dst_es = dstdefn->es_orig; /* -------------------------------------------------------------------- */ /* Create a temporary Z array if one is not provided. */ /* -------------------------------------------------------------------- */ if( z == NULL ) { int bytes = sizeof(double) * point_count * point_offset; z = (double *) pj_malloc(bytes); memset( z, 0, bytes ); z_is_temp = TRUE; } #define CHECK_RETURN {if( pj_errno != 0 && (pj_errno > 0 || transient_error[-pj_errno] == 0) ) { if( z_is_temp ) pj_dalloc(z); return pj_errno; }} /* -------------------------------------------------------------------- */ /* If this datum requires grid shifts, then apply it to geodetic */ /* coordinates. */ /* -------------------------------------------------------------------- */ if( srcdefn->datum_type == PJD_GRIDSHIFT ) { pj_apply_gridshift( pj_param(srcdefn->params,"snadgrids").s, 0, point_count, point_offset, x, y, z ); CHECK_RETURN; src_a = SRS_WGS84_SEMIMAJOR; src_es = SRS_WGS84_ESQUARED; } if( dstdefn->datum_type == PJD_GRIDSHIFT ) { dst_a = SRS_WGS84_SEMIMAJOR; dst_es = SRS_WGS84_ESQUARED; } /* ==================================================================== */ /* Do we need to go through geocentric coordinates? */ /* ==================================================================== */ if( src_es != dst_es || src_a != dst_a || srcdefn->datum_type == PJD_3PARAM || srcdefn->datum_type == PJD_7PARAM || dstdefn->datum_type == PJD_3PARAM || dstdefn->datum_type == PJD_7PARAM) { /* -------------------------------------------------------------------- */ /* Convert to geocentric coordinates. */ /* -------------------------------------------------------------------- */ pj_geodetic_to_geocentric( src_a, src_es, point_count, point_offset, x, y, z ); CHECK_RETURN; /* -------------------------------------------------------------------- */ /* Convert between datums. */ /* -------------------------------------------------------------------- */ if( srcdefn->datum_type == PJD_3PARAM || srcdefn->datum_type == PJD_7PARAM ) { pj_geocentric_to_wgs84( srcdefn, point_count, point_offset,x,y,z); CHECK_RETURN; } if( dstdefn->datum_type == PJD_3PARAM || dstdefn->datum_type == PJD_7PARAM ) { pj_geocentric_from_wgs84( dstdefn, point_count,point_offset,x,y,z); CHECK_RETURN; } /* -------------------------------------------------------------------- */ /* Convert back to geodetic coordinates. */ /* -------------------------------------------------------------------- */ pj_geocentric_to_geodetic( dst_a, dst_es, point_count, point_offset, x, y, z ); CHECK_RETURN; } /* -------------------------------------------------------------------- */ /* Apply grid shift to destination if required. */ /* -------------------------------------------------------------------- */ if( dstdefn->datum_type == PJD_GRIDSHIFT ) { pj_apply_gridshift( pj_param(dstdefn->params,"snadgrids").s, 1, point_count, point_offset, x, y, z ); CHECK_RETURN; } if( z_is_temp ) pj_dalloc( z ); return 0; } therion/extern/proj4/pj_tsfn.c0000644000076400010400000000040011137334032017426 0ustar userAdministrators/* determine small t */ #include #include #define HALFPI 1.5707963267948966 double pj_tsfn(double phi, double sinphi, double e) { sinphi *= e; return (tan (.5 * (HALFPI - phi)) / pow((1. - sinphi) / (1. + sinphi), .5 * e)); } therion/extern/proj4/pj_units.c0000644000076400010400000000242511165201056017627 0ustar userAdministrators/* definition of standard cartesian units */ #define PJ_UNITS__ #include /* Field 2 that contains the multiplier to convert named units to meters ** may be expressed by either a simple floating point constant or a ** numerator/denomenator values (e.g. 1/1000) */ C_NAMESPACE_VAR struct PJ_UNITS pj_units[] = { "km", "1000.", "Kilometer", "m", "1.", "Meter", "dm", "1/10", "Decimeter", "cm", "1/100", "Centimeter", "mm", "1/1000", "Millimeter", "kmi", "1852.0", "International Nautical Mile", "in", "0.0254", "International Inch", "ft", "0.3048", "International Foot", "yd", "0.9144", "International Yard", "mi", "1609.344", "International Statute Mile", "fath", "1.8288", "International Fathom", "ch", "20.1168", "International Chain", "link", "0.201168", "International Link", "us-in", "1./39.37", "U.S. Surveyor's Inch", "us-ft", "0.304800609601219", "U.S. Surveyor's Foot", "us-yd", "0.914401828803658", "U.S. Surveyor's Yard", "us-ch", "20.11684023368047", "U.S. Surveyor's Chain", "us-mi", "1609.347218694437", "U.S. Surveyor's Statute Mile", "ind-yd", "0.91439523", "Indian Yard", "ind-ft", "0.30479841", "Indian Foot", "ind-ch", "20.11669506", "Indian Chain", (char *)0, (char *)0, (char *)0 }; struct PJ_UNITS *pj_get_units_ref() { return pj_units; } therion/extern/proj4/PJ_urm5.c0000644000076400010400000000124611137334036017261 0ustar userAdministrators#define PROJ_PARMS__ \ double m, rmn, q3, n; #define PJ_LIB__ # include PROJ_HEAD(urm5, "Urmaev V") "\n\tPCyl., Sph.\n\tn= q= alphi="; FORWARD(s_forward); /* spheroid */ double t; t = lp.phi = aasin(P->n * sin(lp.phi)); xy.x = P->m * lp.lam * cos(lp.phi); t *= t; xy.y = lp.phi * (1. + t * P->q3) * P->rmn; return xy; } FREEUP; if (P) pj_dalloc(P); } ENTRY0(urm5) double alpha, t; P->n = pj_param(P->params, "dn").f; P->q3 = pj_param(P->params, "dq").f / 3.; alpha = pj_param(P->params, "ralpha").f; t = P->n * sin(alpha); P->m = cos(alpha) / sqrt(1. - t * t); P->rmn = 1. / (P->m * P->n); P->es = 0.; P->inv = 0; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/PJ_urmfps.c0000644000076400010400000000166211137334042017704 0ustar userAdministrators#define PROJ_PARMS__ \ double n, C_y; #define PJ_LIB__ #include PROJ_HEAD(urmfps, "Urmaev Flat-Polar Sinusoidal") "\n\tPCyl, Sph.\n\tn="; PROJ_HEAD(wag1, "Wagner I (Kavraisky VI)") "\n\tPCyl, Sph."; #define C_x 0.8773826753 #define Cy 1.139753528477 FORWARD(s_forward); /* sphere */ lp.phi = aasin(P->n * sin(lp.phi)); xy.x = C_x * lp.lam * cos(lp.phi); xy.y = P->C_y * lp.phi; return (xy); } INVERSE(s_inverse); /* sphere */ xy.y /= P->C_y; lp.phi = aasin(sin(xy.y) / P->n); lp.lam = xy.x / (C_x * cos(xy.y)); return (lp); } FREEUP; if (P) pj_dalloc(P); } static PJ * setup(PJ *P) { P->C_y = Cy / P->n; P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; return P; } ENTRY0(urmfps) if (pj_param(P->params, "tn").i) { P->n = pj_param(P->params, "dn").f; if (P->n <= 0. || P->n > 1.) E_ERROR(-40) } else E_ERROR(-40) ENDENTRY(setup(P)) ENTRY0(wag1) P->n = 0.8660254037844386467637231707; ENDENTRY(setup(P)) therion/extern/proj4/pj_utils.c0000644000076400010400000001350711130502664017631 0ustar userAdministrators/****************************************************************************** * $Id: pj_utils.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Some utility functions we don't want to bother putting in * their own source files. * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 2001, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #define PJ_LIB__ #include #include #include /************************************************************************/ /* pj_is_latlong() */ /* */ /* Returns TRUE if this coordinate system object is */ /* geographic. */ /************************************************************************/ int pj_is_latlong( PJ *pj ) { return pj == NULL || pj->is_latlong; } /************************************************************************/ /* pj_is_geocent() */ /* */ /* Returns TRUE if this coordinate system object is geocentric. */ /************************************************************************/ int pj_is_geocent( PJ *pj ) { return pj != NULL && pj->is_geocent; } /************************************************************************/ /* pj_latlong_from_proj() */ /* */ /* Return a PJ* definition defining the lat/long coordinate */ /* system on which a projection is based. If the coordinate */ /* system passed in is latlong, a clone of the same will be */ /* returned. */ /************************************************************************/ PJ *pj_latlong_from_proj( PJ *pj_in ) { char defn[512]; int got_datum = FALSE; pj_errno = 0; strcpy( defn, "+proj=latlong" ); if( pj_param(pj_in->params, "tdatum").i ) { got_datum = TRUE; sprintf( defn+strlen(defn), " +datum=%s", pj_param(pj_in->params,"sdatum").s ); } else if( pj_param(pj_in->params, "tellps").i ) { sprintf( defn+strlen(defn), " +ellps=%s", pj_param(pj_in->params,"sellps").s ); } else if( pj_param(pj_in->params, "ta").i ) { sprintf( defn+strlen(defn), " +a=%s", pj_param(pj_in->params,"sa").s ); if( pj_param(pj_in->params, "tb").i ) sprintf( defn+strlen(defn), " +b=%s", pj_param(pj_in->params,"sb").s ); else if( pj_param(pj_in->params, "tes").i ) sprintf( defn+strlen(defn), " +es=%s", pj_param(pj_in->params,"ses").s ); else if( pj_param(pj_in->params, "tf").i ) sprintf( defn+strlen(defn), " +f=%s", pj_param(pj_in->params,"sf").s ); else sprintf( defn+strlen(defn), " +es=%.16g", pj_in->es ); } else { pj_errno = -13; return NULL; } if( !got_datum ) { if( pj_param(pj_in->params, "ttowgs84").i ) sprintf( defn+strlen(defn), " +towgs84=%s", pj_param(pj_in->params,"stowgs84").s ); if( pj_param(pj_in->params, "tnadgrids").i ) sprintf( defn+strlen(defn), " +nadgrids=%s", pj_param(pj_in->params,"snadgrids").s ); } /* copy over some other information related to ellipsoid */ if( pj_param(pj_in->params, "tR").i ) sprintf( defn+strlen(defn), " +R=%s", pj_param(pj_in->params,"sR").s ); if( pj_param(pj_in->params, "tR_A").i ) sprintf( defn+strlen(defn), " +R_A" ); if( pj_param(pj_in->params, "tR_V").i ) sprintf( defn+strlen(defn), " +R_V" ); if( pj_param(pj_in->params, "tR_a").i ) sprintf( defn+strlen(defn), " +R_a" ); if( pj_param(pj_in->params, "tR_lat_a").i ) sprintf( defn+strlen(defn), " +R_lat_a=%s", pj_param(pj_in->params,"sR_lat_a").s ); if( pj_param(pj_in->params, "tR_lat_g").i ) sprintf( defn+strlen(defn), " +R_lat_g=%s", pj_param(pj_in->params,"sR_lat_g").s ); /* copy over prime meridian */ if( pj_param(pj_in->params, "tpm").i ) sprintf( defn+strlen(defn), " +pm=%s", pj_param(pj_in->params,"spm").s ); return pj_init_plus( defn ); } therion/extern/proj4/PJ_vandg.c0000644000076400010400000000442611137334050017467 0ustar userAdministrators#define PJ_LIB__ # include PROJ_HEAD(vandg, "van der Grinten (I)") "\n\tMisc Sph"; # define TOL 1.e-10 # define THIRD .33333333333333333333 # define TWO_THRD .66666666666666666666 # define C2_27 .07407407407407407407 # define PI4_3 4.18879020478639098458 # define PISQ 9.86960440108935861869 # define TPISQ 19.73920880217871723738 # define HPISQ 4.93480220054467930934 FORWARD(s_forward); /* spheroid */ double al, al2, g, g2, p2; p2 = fabs(lp.phi / HALFPI); if ((p2 - TOL) > 1.) F_ERROR; if (p2 > 1.) p2 = 1.; if (fabs(lp.phi) <= TOL) { xy.x = lp.lam; xy.y = 0.; } else if (fabs(lp.lam) <= TOL || fabs(p2 - 1.) < TOL) { xy.x = 0.; xy.y = PI * tan(.5 * asin(p2)); if (lp.phi < 0.) xy.y = -xy.y; } else { al = .5 * fabs(PI / lp.lam - lp.lam / PI); al2 = al * al; g = sqrt(1. - p2 * p2); g = g / (p2 + g - 1.); g2 = g * g; p2 = g * (2. / p2 - 1.); p2 = p2 * p2; xy.x = g - p2; g = p2 + al2; xy.x = PI * (al * xy.x + sqrt(al2 * xy.x * xy.x - g * (g2 - p2))) / g; if (lp.lam < 0.) xy.x = -xy.x; xy.y = fabs(xy.x / PI); xy.y = 1. - xy.y * (xy.y + 2. * al); if (xy.y < -TOL) F_ERROR; if (xy.y < 0.) xy.y = 0.; else xy.y = sqrt(xy.y) * (lp.phi < 0. ? -PI : PI); } return (xy); } INVERSE(s_inverse); /* spheroid */ double t, c0, c1, c2, c3, al, r2, r, m, d, ay, x2, y2; x2 = xy.x * xy.x; if ((ay = fabs(xy.y)) < TOL) { lp.phi = 0.; t = x2 * x2 + TPISQ * (x2 + HPISQ); lp.lam = fabs(xy.x) <= TOL ? 0. : .5 * (x2 - PISQ + sqrt(t)) / xy.x; return (lp); } y2 = xy.y * xy.y; r = x2 + y2; r2 = r * r; c1 = - PI * ay * (r + PISQ); c3 = r2 + TWOPI * (ay * r + PI * (y2 + PI * (ay + HALFPI))); c2 = c1 + PISQ * (r - 3. * y2); c0 = PI * ay; c2 /= c3; al = c1 / c3 - THIRD * c2 * c2; m = 2. * sqrt(-THIRD * al); d = C2_27 * c2 * c2 * c2 + (c0 * c0 - THIRD * c2 * c1) / c3; if (((t = fabs(d = 3. * d / (al * m))) - TOL) <= 1.) { d = t > 1. ? (d > 0. ? 0. : PI) : acos(d); lp.phi = PI * (m * cos(d * THIRD + PI4_3) - THIRD * c2); if (xy.y < 0.) lp.phi = -lp.phi; t = r2 + TPISQ * (x2 - y2 + HPISQ); lp.lam = fabs(xy.x) <= TOL ? 0. : .5 * (r - PISQ + (t <= 0. ? 0. : sqrt(t))) / xy.x; } else I_ERROR; return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(vandg) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/PJ_vandg2.c0000644000076400010400000000212611137334044017547 0ustar userAdministrators# define TOL 1e-10 # define TWORPI 0.63661977236758134308 #define PROJ_PARMS__ \ int vdg3; #define PJ_LIB__ #include PROJ_HEAD(vandg2, "van der Grinten II") "\n\tMisc Sph, no inv."; PROJ_HEAD(vandg3, "van der Grinten III") "\n\tMisc Sph, no inv."; FORWARD(s_forward); /* spheroid */ double x1, at, bt, ct; bt = fabs(TWORPI * lp.phi); if ((ct = 1. - bt * bt) < 0.) ct = 0.; else ct = sqrt(ct); if (fabs(lp.lam) < TOL) { xy.x = 0.; xy.y = PI * (lp.phi < 0. ? -bt : bt) / (1. + ct); } else { at = 0.5 * fabs(PI / lp.lam - lp.lam / PI); if (P->vdg3) { x1 = bt / (1. + ct); xy.x = PI * (sqrt(at * at + 1. - x1 * x1) - at); xy.y = PI * x1; } else { x1 = (ct * sqrt(1. + at * at) - at * ct * ct) / (1. + at * at * bt * bt); xy.x = PI * x1; xy.y = PI * sqrt(1. - x1 * (x1 + 2. * at) + TOL); } if ( lp.lam < 0.) xy.x = -xy.x; if ( lp.phi < 0.) xy.y = -xy.y; } return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(vandg2) P->vdg3 = 0; P->inv = 0; P->fwd = s_forward; ENDENTRY(P) ENTRY0(vandg3) P->vdg3 = 1; P->es = 0.; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/PJ_vandg4.c0000644000076400010400000000220611137334046017552 0ustar userAdministrators#define PJ_LIB__ #include PROJ_HEAD(vandg4, "van der Grinten IV") "\n\tMisc Sph, no inv."; #define TOL 1e-10 #define TWORPI 0.63661977236758134308 FORWARD(s_forward); /* spheroid */ double x1, t, bt, ct, ft, bt2, ct2, dt, dt2; if (fabs(lp.phi) < TOL) { xy.x = lp.lam; xy.y = 0.; } else if (fabs(lp.lam) < TOL || fabs(fabs(lp.phi) - HALFPI) < TOL) { xy.x = 0.; xy.y = lp.phi; } else { bt = fabs(TWORPI * lp.phi); bt2 = bt * bt; ct = 0.5 * (bt * (8. - bt * (2. + bt2)) - 5.) / (bt2 * (bt - 1.)); ct2 = ct * ct; dt = TWORPI * lp.lam; dt = dt + 1. / dt; dt = sqrt(dt * dt - 4.); if ((fabs(lp.lam) - HALFPI) < 0.) dt = -dt; dt2 = dt * dt; x1 = bt + ct; x1 *= x1; t = bt + 3.*ct; ft = x1 * (bt2 + ct2 * dt2 - 1.) + (1.-bt2) * ( bt2 * (t * t + 4. * ct2) + ct2 * (12. * bt * ct + 4. * ct2) ); x1 = (dt*(x1 + ct2 - 1.) + 2.*sqrt(ft)) / (4.* x1 + dt2); xy.x = HALFPI * x1; xy.y = HALFPI * sqrt(1. + dt * fabs(x1) - x1 * x1); if (lp.lam < 0.) xy.x = -xy.x; if (lp.phi < 0.) xy.y = -xy.y; } return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(vandg4) P->es = 0.; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/PJ_wag2.c0000644000076400010400000000111211137334054017221 0ustar userAdministrators#define PJ_LIB__ # include PROJ_HEAD(wag2, "Wagner II") "\n\tPCyl., Sph."; #define C_x 0.92483 #define C_y 1.38725 #define C_p1 0.88022 #define C_p2 0.88550 FORWARD(s_forward); /* spheroid */ lp.phi = aasin(C_p1 * sin(C_p2 * lp.phi)); xy.x = C_x * lp.lam * cos(lp.phi); xy.y = C_y * lp.phi; return (xy); } INVERSE(s_inverse); /* spheroid */ lp.phi = xy.y / C_y; lp.lam = xy.x / (C_x * cos(lp.phi)); lp.phi = aasin(sin(lp.phi) / C_p1) / C_p2; return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(wag2) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/PJ_wag3.c0000644000076400010400000000114311137334056017230 0ustar userAdministrators#define PROJ_PARMS__ \ double C_x; #define PJ_LIB__ # include PROJ_HEAD(wag3, "Wagner III") "\n\tPCyl., Sph.\n\tlat_ts="; #define TWOTHIRD 0.6666666666666666666667 FORWARD(s_forward); /* spheroid */ xy.x = P->C_x * lp.lam * cos(TWOTHIRD * lp.phi); xy.y = lp.phi; return (xy); } INVERSE(s_inverse); /* spheroid */ lp.phi = xy.y; lp.lam = xy.x / (P->C_x * cos(TWOTHIRD * lp.phi)); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(wag3) double ts; ts = pj_param(P->params, "rlat_ts").f; P->C_x = cos(ts) / cos(2.*ts/3.); P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/PJ_wag7.c0000644000076400010400000000071111137334060017227 0ustar userAdministrators#define PJ_LIB__ #include PROJ_HEAD(wag7, "Wagner VII") "\n\tMisc Sph, no inv."; FORWARD(s_forward); /* sphere */ double theta, ct, D; theta = asin(xy.y = 0.90630778703664996 * sin(lp.phi)); xy.x = 2.66723 * (ct = cos(theta)) * sin(lp.lam /= 3.); xy.y *= 1.24104 * (D = 1/(sqrt(0.5 * (1 + ct * cos(lp.lam))))); xy.x *= D; return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(wag7) P->fwd = s_forward; P->inv = 0; P->es = 0.; ENDENTRY(P) therion/extern/proj4/PJ_wink1.c0000644000076400010400000000103011137334064017412 0ustar userAdministrators#define PROJ_PARMS__ \ double cosphi1; #define PJ_LIB__ # include PROJ_HEAD(wink1, "Winkel I") "\n\tPCyl., Sph.\n\tlat_ts="; FORWARD(s_forward); /* spheroid */ xy.x = .5 * lp.lam * (P->cosphi1 + cos(lp.phi)); xy.y = lp.phi; return (xy); } INVERSE(s_inverse); /* spheroid */ lp.phi = xy.y; lp.lam = 2. * xy.x / (P->cosphi1 + cos(lp.phi)); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(wink1) P->cosphi1 = cos(pj_param(P->params, "rlat_ts").f); P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/PJ_wink2.c0000644000076400010400000000150111137334066017420 0ustar userAdministrators#define PROJ_PARMS__ \ double cosphi1; #define PJ_LIB__ # include PROJ_HEAD(wink2, "Winkel II") "\n\tPCyl., Sph., no inv.\n\tlat_1="; #define MAX_ITER 10 #define LOOP_TOL 1e-7 #define TWO_D_PI 0.636619772367581343 FORWARD(s_forward); /* spheroid */ double k, V; int i; xy.y = lp.phi * TWO_D_PI; k = PI * sin(lp.phi); lp.phi *= 1.8; for (i = MAX_ITER; i ; --i) { lp.phi -= V = (lp.phi + sin(lp.phi) - k) / (1. + cos(lp.phi)); if (fabs(V) < LOOP_TOL) break; } if (!i) lp.phi = (lp.phi < 0.) ? -HALFPI : HALFPI; else lp.phi *= 0.5; xy.x = 0.5 * lp.lam * (cos(lp.phi) + P->cosphi1); xy.y = FORTPI * (sin(lp.phi) + xy.y); return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(wink2) P->cosphi1 = cos(pj_param(P->params, "rlat_1").f); P->es = 0.; P->inv = 0; P->fwd = s_forward; ENDENTRY(P) therion/extern/proj4/pj_zpoly1.c0000644000076400010400000000201411137334070017717 0ustar userAdministrators/* evaluate complex polynomial */ #include /* note: coefficients are always from C_1 to C_n ** i.e. C_0 == (0., 0) ** n should always be >= 1 though no checks are made */ COMPLEX pj_zpoly1(COMPLEX z, COMPLEX *C, int n) { COMPLEX a; double t; a = *(C += n); while (n-- > 0) { a.r = (--C)->r + z.r * (t = a.r) - z.i * a.i; a.i = C->i + z.r * a.i + z.i * t; } a.r = z.r * (t = a.r) - z.i * a.i; a.i = z.r * a.i + z.i * t; return a; } /* evaluate complex polynomial and derivative */ COMPLEX pj_zpolyd1(COMPLEX z, COMPLEX *C, int n, COMPLEX *der) { COMPLEX a, b; double t; int first = 1; a = *(C += n); while (n-- > 0) { if (first) { first = 0; b = a; } else { b.r = a.r + z.r * (t = b.r) - z.i * b.i; b.i = a.i + z.r * b.i + z.i * t; } a.r = (--C)->r + z.r * (t = a.r) - z.i * a.i; a.i = C->i + z.r * a.i + z.i * t; } b.r = a.r + z.r * (t = b.r) - z.i * b.i; b.i = a.i + z.r * b.i + z.i * t; a.r = z.r * (t = a.r) - z.i * a.i; a.i = z.r * a.i + z.i * t; *der = b; return a; } therion/extern/proj4/projects.h0000644000076400010400000003155411256470164017650 0ustar userAdministrators/****************************************************************************** * $Id: projects.h 1625 2009-09-23 18:58:15Z warmerdam $ * * Project: PROJ.4 * Purpose: Primary (private) include file for PROJ.4 library. * Author: Gerald Evenden * ****************************************************************************** * Copyright (c) 2000, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ /* General projections header file */ #ifndef PROJECTS_H #define PROJECTS_H #ifdef _MSC_VER # ifndef _CRT_SECURE_NO_DEPRECATE # define _CRT_SECURE_NO_DEPRECATE # endif # ifndef _CRT_NONSTDC_NO_DEPRECATE # define _CRT_NONSTDC_NO_DEPRECATE # endif #endif /* standard inclusions */ #include #include #include #ifdef __cplusplus #define C_NAMESPACE extern "C" #define C_NAMESPACE_VAR extern "C" extern "C" { #else #define C_NAMESPACE extern #define C_NAMESPACE_VAR #endif #ifndef NULL # define NULL 0 #endif #ifndef FALSE # define FALSE 0 #endif #ifndef TRUE # define TRUE 1 #endif #ifndef MAX # define MIN(a,b) ((ab) ? a : b) #endif #ifndef ABS # define ABS(x) ((x<0) ? (-1*(x)) : x) #endif /* maximum path/filename */ #ifndef MAX_PATH_FILENAME #define MAX_PATH_FILENAME 1024 #endif /* prototype hypot for systems where absent */ #ifndef _WIN32 extern double hypot(double, double); #endif #ifdef _WIN32_WCE # include # include # define rewind wceex_rewind # define getenv wceex_getenv # define strdup _strdup # define hypot _hypot #endif /* some useful constants */ #define HALFPI 1.5707963267948966 #define FORTPI 0.78539816339744833 #define PI 3.14159265358979323846 #define TWOPI 6.2831853071795864769 /* environment parameter name */ #ifndef PROJ_LIB #define PROJ_LIB "PROJ_LIB" #endif /* maximum tag id length for +init and default files */ #ifndef ID_TAG_MAX #define ID_TAG_MAX 50 #endif /* Use WIN32 as a standard windows 32 bit declaration */ #if defined(_WIN32) && !defined(WIN32) && !defined(_WIN32_WCE) # define WIN32 #endif #if defined(_WINDOWS) && !defined(WIN32) && !defined(_WIN32_WCE) # define WIN32 #endif /* directory delimiter for DOS support */ #ifdef WIN32 #define DIR_CHAR '\\' #else #define DIR_CHAR '/' #endif /* datum_type values */ #define PJD_UNKNOWN 0 #define PJD_3PARAM 1 #define PJD_7PARAM 2 #define PJD_GRIDSHIFT 3 #define PJD_WGS84 4 /* WGS84 (or anything considered equivelent) */ /* datum system errors */ #define PJD_ERR_GEOCENTRIC -45 #define USE_PROJUV typedef struct { double u, v; } projUV; typedef struct { double r, i; } COMPLEX; #ifndef PJ_LIB__ #define XY projUV #define LP projUV #else typedef struct { double x, y; } XY; typedef struct { double lam, phi; } LP; #endif typedef union { double f; int i; char *s; } PVALUE; struct PJconsts; struct PJ_LIST { char *id; /* projection keyword */ struct PJconsts *(*proj)(struct PJconsts*);/* projection entry point */ char * const *descr; /* description text */ }; struct PJ_ELLPS { char *id; /* ellipse keyword name */ char *major; /* a= value */ char *ell; /* elliptical parameter */ char *name; /* comments */ }; struct PJ_UNITS { char *id; /* units keyword */ char *to_meter; /* multiply by value to get meters */ char *name; /* comments */ }; struct PJ_DATUMS { char *id; /* datum keyword */ char *defn; /* ie. "to_wgs84=..." */ char *ellipse_id; /* ie from ellipse table */ char *comments; /* EPSG code, etc */ }; struct PJ_PRIME_MERIDIANS { char *id; /* prime meridian keyword */ char *defn; /* offset from greenwich in DMS format. */ }; struct DERIVS { double x_l, x_p; /* derivatives of x for lambda-phi */ double y_l, y_p; /* derivatives of y for lambda-phi */ }; struct FACTORS { struct DERIVS der; double h, k; /* meridinal, parallel scales */ double omega, thetap; /* angular distortion, theta prime */ double conv; /* convergence */ double s; /* areal scale factor */ double a, b; /* max-min scale error */ int code; /* info as to analytics, see following */ }; #define IS_ANAL_XL_YL 01 /* derivatives of lon analytic */ #define IS_ANAL_XP_YP 02 /* derivatives of lat analytic */ #define IS_ANAL_HK 04 /* h and k analytic */ #define IS_ANAL_CONV 010 /* convergence analytic */ /* parameter list struct */ typedef struct ARG_list { struct ARG_list *next; char used; char param[1]; } paralist; /* base projection data structure */ typedef struct PJconsts { XY (*fwd)(LP, struct PJconsts *); LP (*inv)(XY, struct PJconsts *); void (*spc)(LP, struct PJconsts *, struct FACTORS *); void (*pfree)(struct PJconsts *); const char *descr; paralist *params; /* parameter list */ int over; /* over-range flag */ int geoc; /* geocentric latitude flag */ int is_latlong; /* proj=latlong ... not really a projection at all */ int is_geocent; /* proj=geocent ... not really a projection at all */ double a, /* major axis or radius if es==0 */ a_orig, /* major axis before any +proj related adjustment */ es, /* e ^ 2 */ es_orig, /* es before any +proj related adjustment */ e, /* eccentricity */ ra, /* 1/A */ one_es, /* 1 - e^2 */ rone_es, /* 1/one_es */ lam0, phi0, /* central longitude, latitude */ x0, y0, /* easting and northing */ k0, /* general scaling factor */ to_meter, fr_meter; /* cartesian scaling */ int datum_type; /* PJD_UNKNOWN/3PARAM/7PARAM/GRIDSHIFT/WGS84 */ double datum_params[7]; double from_greenwich; /* prime meridian offset (in radians) */ double long_wrap_center; /* 0.0 for -180 to 180, actually in radians*/ #ifdef PROJ_PARMS__ PROJ_PARMS__ #endif /* end of optional extensions */ } PJ; /* public API */ #include "proj_api.h" /* Generate pj_list external or make list from include file */ #ifndef PJ_LIST_H extern struct PJ_LIST pj_list[]; #else #define PROJ_HEAD(id, name) \ struct PJconsts *pj_##id(struct PJconsts*); extern char * const pj_s_##id; #ifndef lint #define DO_PJ_LIST_ID #endif #include PJ_LIST_H #ifndef lint #undef DO_PJ_LIST_ID #endif #undef PROJ_HEAD #define PROJ_HEAD(id, name) {#id, pj_##id, &pj_s_##id}, struct PJ_LIST pj_list[] = { #include PJ_LIST_H {0, 0, 0}, }; #undef PROJ_HEAD #endif #ifndef PJ_ELLPS__ extern struct PJ_ELLPS pj_ellps[]; #endif #ifndef PJ_UNITS__ extern struct PJ_UNITS pj_units[]; #endif #ifndef PJ_DATUMS__ extern struct PJ_DATUMS pj_datums[]; extern struct PJ_PRIME_MERIDIANS pj_prime_meridians[]; #endif #ifdef PJ_LIB__ /* repeatative projection code */ #define PROJ_HEAD(id, name) static const char des_##id [] = name #define ENTRYA(name) \ C_NAMESPACE_VAR const char * const pj_s_##name = des_##name; \ C_NAMESPACE PJ *pj_##name(PJ *P) { if (!P) { \ if( (P = (PJ*) pj_malloc(sizeof(PJ))) != NULL) { \ P->pfree = freeup; P->fwd = 0; P->inv = 0; \ P->spc = 0; P->descr = des_##name; #define ENTRYX } return P; } else { #define ENTRY0(name) ENTRYA(name) ENTRYX #define ENTRY1(name, a) ENTRYA(name) P->a = 0; ENTRYX #define ENTRY2(name, a, b) ENTRYA(name) P->a = 0; P->b = 0; ENTRYX #define ENDENTRY(p) } return (p); } #define E_ERROR(err) { pj_errno = err; freeup(P); return(0); } #define E_ERROR_0 { freeup(P); return(0); } #define F_ERROR { pj_errno = -20; return(xy); } #define I_ERROR { pj_errno = -20; return(lp); } #define FORWARD(name) static XY name(LP lp, PJ *P) { XY xy = {0.0,0.0} #define INVERSE(name) static LP name(XY xy, PJ *P) { LP lp = {0.0,0.0} #define FREEUP static void freeup(PJ *P) { #define SPECIAL(name) static void name(LP lp, PJ *P, struct FACTORS *fac) #endif #define MAX_TAB_ID 80 typedef struct { float lam, phi; } FLP; typedef struct { int lam, phi; } ILP; struct CTABLE { char id[MAX_TAB_ID]; /* ascii info */ LP ll; /* lower left corner coordinates */ LP del; /* size of cells */ ILP lim; /* limits of conversion matrix */ FLP *cvs; /* conversion matrix */ }; typedef struct _pj_gi { char *gridname; /* identifying name of grid, eg "conus" or ntv2_0.gsb */ char *filename; /* full path to filename */ const char *format; /* format of this grid, ie "ctable", "ntv1", "ntv2" or "missing". */ int grid_offset; /* offset in file, for delayed loading */ struct CTABLE *ct; struct _pj_gi *next; struct _pj_gi *child; } PJ_GRIDINFO; /* procedure prototypes */ double dmstor(const char *, char **); void set_rtodms(int, int); char *rtodms(char *, double, int, int); double adjlon(double); double aacos(double), aasin(double), asqrt(double), aatan2(double, double); PVALUE pj_param(paralist *, char *); paralist *pj_mkparam(char *); int pj_ell_set(paralist *, double *, double *); int pj_datum_set(paralist *, PJ *); int pj_prime_meridian_set(paralist *, PJ *); int pj_angular_units_set(paralist *, PJ *); paralist *pj_clone_paralist( const paralist* ); void pj_clear_initcache(void); paralist*pj_search_initcache( const char *filekey ); void pj_insert_initcache( const char *filekey, const paralist *list); double *pj_enfn(double); double pj_mlfn(double, double, double, double *); double pj_inv_mlfn(double, double, double *); double pj_qsfn(double, double, double); double pj_tsfn(double, double, double); double pj_msfn(double, double, double); double pj_phi2(double, double); double pj_qsfn_(double, PJ *); double *pj_authset(double); double pj_authlat(double, double *); COMPLEX pj_zpoly1(COMPLEX, COMPLEX *, int); COMPLEX pj_zpolyd1(COMPLEX, COMPLEX *, int, COMPLEX *); FILE *pj_open_lib(char *, char *); int pj_deriv(LP, double, PJ *, struct DERIVS *); int pj_factors(LP, PJ *, double, struct FACTORS *); struct PW_COEF {/* row coefficient structure */ int m; /* number of c coefficients (=0 for none) */ double *c; /* power coefficients */ }; /* Approximation structures and procedures */ typedef struct { /* Chebyshev or Power series structure */ projUV a, b; /* power series range for evaluation */ /* or Chebyshev argument shift/scaling */ struct PW_COEF *cu, *cv; int mu, mv; /* maximum cu and cv index (+1 for count) */ int power; /* != 0 if power series, else Chebyshev */ } Tseries; Tseries *mk_cheby(projUV, projUV, double, projUV *, projUV (*)(projUV), int, int, int); projUV bpseval(projUV, Tseries *); projUV bcheval(projUV, Tseries *); projUV biveval(projUV, Tseries *); void *vector1(int, int); void **vector2(int, int, int); void freev2(void **v, int nrows); int bchgen(projUV, projUV, int, int, projUV **, projUV(*)(projUV)); int bch2bps(projUV, projUV, projUV **, int, int); /* nadcon related protos */ LP nad_intr(LP, struct CTABLE *); LP nad_cvt(LP, int, struct CTABLE *); struct CTABLE *nad_init(char *); struct CTABLE *nad_ctable_init( FILE * fid ); int nad_ctable_load( struct CTABLE *, FILE * fid ); void nad_free(struct CTABLE *); /* higher level handling of datum grid shift files */ PJ_GRIDINFO **pj_gridlist_from_nadgrids( const char *, int * ); void pj_deallocate_grids(); PJ_GRIDINFO *pj_gridinfo_init( const char * ); int pj_gridinfo_load( PJ_GRIDINFO * ); void pj_gridinfo_free( PJ_GRIDINFO * ); void *proj_mdist_ini(double); double proj_mdist(double, double, double, const void *); double proj_inv_mdist(double, const void *); void *pj_gauss_ini(double, double, double *,double *); LP pj_gauss(LP, const void *); LP pj_inv_gauss(LP, const void *); extern char const pj_release[]; struct PJ_ELLPS *pj_get_ellps_ref( void ); struct PJ_DATUMS *pj_get_datums_ref( void ); struct PJ_UNITS *pj_get_units_ref( void ); struct PJ_LIST *pj_get_list_ref( void ); struct PJ_PRIME_MERIDIANS *pj_get_prime_meridians_ref( void ); #ifndef DISABLE_CVSID # define PJ_CVSID(string) static char pj_cvsid[] = string; \ static char *cvsid_aw() { return( cvsid_aw() ? ((char *) NULL) : pj_cvsid ); } #else # define PJ_CVSID(string) #endif #ifdef __cplusplus } #endif #endif /* end of basic projections header */ therion/extern/proj4/proj_api.h0000644000076400010400000000744611256554266017633 0ustar userAdministrators/****************************************************************************** * $Id: proj_api.h 1631 2009-09-24 02:26:05Z warmerdam $ * * Project: PROJ.4 * Purpose: Public (application) include file for PROJ.4 API, and constants. * Author: Frank Warmerdam, * ****************************************************************************** * Copyright (c) 2001, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ /* General projections header file */ #ifndef PROJ_API_H #define PROJ_API_H /* standard inclusions */ #include #include #ifdef __cplusplus extern "C" { #endif /* Try to update this every version! */ #define PJ_VERSION 470 extern char const pj_release[]; /* global release id string */ #define RAD_TO_DEG 57.29577951308232 #define DEG_TO_RAD .0174532925199432958 extern int pj_errno; /* global error return code */ #if !defined(PROJECTS_H) typedef struct { double u, v; } projUV; typedef void *projPJ; #define projXY projUV #define projLP projUV #else typedef PJ *projPJ; # define projXY XY # define projLP LP #endif /* procedure prototypes */ projXY pj_fwd(projLP, projPJ); projLP pj_inv(projXY, projPJ); int pj_transform( projPJ src, projPJ dst, long point_count, int point_offset, double *x, double *y, double *z ); int pj_datum_transform( projPJ src, projPJ dst, long point_count, int point_offset, double *x, double *y, double *z ); int pj_geocentric_to_geodetic( double a, double es, long point_count, int point_offset, double *x, double *y, double *z ); int pj_geodetic_to_geocentric( double a, double es, long point_count, int point_offset, double *x, double *y, double *z ); int pj_compare_datums( projPJ srcdefn, projPJ dstdefn ); int pj_apply_gridshift( const char *, int, long point_count, int point_offset, double *x, double *y, double *z ); void pj_deallocate_grids(void); int pj_is_latlong(projPJ); int pj_is_geocent(projPJ); void pj_pr_list(projPJ); void pj_free(projPJ); void pj_set_finder( const char *(*)(const char *) ); void pj_set_searchpath ( int count, const char **path ); projPJ pj_init(int, char **); projPJ pj_init_plus(const char *); char *pj_get_def(projPJ, int); projPJ pj_latlong_from_proj( projPJ ); void *pj_malloc(size_t); void pj_dalloc(void *); char *pj_strerrno(int); int *pj_get_errno_ref(void); const char *pj_get_release(void); void pj_acquire_lock(void); void pj_release_lock(void); void pj_cleanup_lock(void); #ifdef __cplusplus } #endif #endif /* ndef PROJ_API_H */ therion/extern/proj4/proj_config.h0000644000076400010400000000341411336504536020310 0ustar userAdministrators/* src/proj_config.h. Generated from proj_config.h.in by configure. */ /* src/proj_config.h.in. Generated from configure.in by autoheader. */ /* Define to 1 if you have the header file. */ /* #undef HAVE_DLFCN_H */ /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define to 1 if you have the `m' library (-lm). */ #define HAVE_LIBM 1 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the header file. */ #define HAVE_UNISTD_H 1 /* Enabled for Java/JNI Support */ #define JNI_ENABLED 1 /* Name of package */ #define PACKAGE "proj" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "warmerdam@pobox.com" /* Define to the full name of this package. */ #define PACKAGE_NAME "PROJ.4 Projections" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "PROJ.4 Projections 4.7.0" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "proj" /* Define to the version of this package. */ #define PACKAGE_VERSION "4.7.0" /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Version number of package */ #define VERSION "4.7.0" therion/extern/proj4/proj_mdist.c0000644000076400010400000000633411130502664020152 0ustar userAdministrators/* ** libproj -- library of cartographic projections ** ** Copyright (c) 2003, 2006 Gerald I. Evenden */ static const char LIBPROJ_ID[] = "$Id: proj_mdist.c 1504 2009-01-06 02:11:57Z warmerdam $"; /* ** Permission is hereby granted, free of charge, to any person obtaining ** a copy of this software and associated documentation files (the ** "Software"), to deal in the Software without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Software, and to ** permit persons to whom the Software is furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be ** included in all copies or substantial portions of the Software. ** ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* Computes distance from equator along the meridian to latitude phi ** and inverse on unit ellipsoid. ** Precision commensurate with double precision. */ #define PROJ_LIB__ #include #define MAX_ITER 20 #define TOL 1e-14 struct MDIST { int nb; double es; double E; double b[1]; }; #define B ((struct MDIST *)b) void * proj_mdist_ini(double es) { double numf, numfi, twon1, denf, denfi, ens, T, twon; double den, El, Es; double E[MAX_ITER]; struct MDIST *b; int i, j; /* generate E(e^2) and its terms E[] */ ens = es; numf = twon1 = denfi = 1.; denf = 1.; twon = 4.; Es = El = E[0] = 1.; for (i = 1; i < MAX_ITER ; ++i) { numf *= (twon1 * twon1); den = twon * denf * denf * twon1; T = numf/den; Es -= (E[i] = T * ens); ens *= es; twon *= 4.; denf *= ++denfi; twon1 += 2.; if (Es == El) /* jump out if no change */ break; El = Es; } if ((b = (struct MDIST *)malloc(sizeof(struct MDIST)+ (i*sizeof(double)))) == NULL) return(NULL); b->nb = i - 1; b->es = es; b->E = Es; /* generate b_n coefficients--note: collapse with prefix ratios */ b->b[0] = Es = 1. - Es; numf = denf = 1.; numfi = 2.; denfi = 3.; for (j = 1; j < i; ++j) { Es -= E[j]; numf *= numfi; denf *= denfi; b->b[j] = Es * numf / denf; numfi += 2.; denfi += 2.; } return (b); } double proj_mdist(double phi, double sphi, double cphi, const void *b) { double sc, sum, sphi2, D; int i; sc = sphi * cphi; sphi2 = sphi * sphi; D = phi * B->E - B->es * sc / sqrt(1. - B->es * sphi2); sum = B->b[i = B->nb]; while (i) sum = B->b[--i] + sphi2 * sum; return(D + sc * sum); } double proj_inv_mdist(double dist, const void *b) { double s, t, phi, k; int i; k = 1./(1.- B->es); i = MAX_ITER; phi = dist; while ( i-- ) { s = sin(phi); t = 1. - B->es * s * s; phi -= t = (proj_mdist(phi, s, cos(phi), b) - dist) * (t * sqrt(t)) * k; if (fabs(t) < TOL) /* that is no change */ return phi; } /* convergence failed */ pj_errno = -17; return phi; } therion/extern/proj4/proj_rouss.c0000644000076400010400000001037011130502664020200 0ustar userAdministrators/* ** libproj -- library of cartographic projections ** ** Copyright (c) 2003, 2006 Gerald I. Evenden */ static const char LIBPROJ_ID[] = "$Id: proj_rouss.c 1504 2009-01-06 02:11:57Z warmerdam $"; /* ** Permission is hereby granted, free of charge, to any person obtaining ** a copy of this software and associated documentation files (the ** "Software"), to deal in the Software without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Software, and to ** permit persons to whom the Software is furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be ** included in all copies or substantial portions of the Software. ** ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #define PROJ_PARMS__ \ double s0; \ double A1, A2, A3, A4, A5, A6; \ double B1, B2, B3, B4, B5, B6, B7, B8; \ double C1, C2, C3, C4, C5, C6, C7, C8; \ double D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11; \ void *en; #define PJ_LIB__ # include PROJ_HEAD(rouss, "Roussilhe Stereographic") "\n\tAzi., Ellps."; FORWARD(e_forward); /* ellipsoid */ double s, al, cp, sp, al2, s2; cp = cos(lp.phi); sp = sin(lp.phi); s = proj_mdist(lp.phi, sp, cp, P->en) - P->s0; s2 = s * s; al = lp.lam * cp / sqrt(1. - P->es * sp * sp); al2 = al * al; xy.x = P->k0 * al*(1.+s2*(P->A1+s2*P->A4)-al2*(P->A2+s*P->A3+s2*P->A5 +al2*P->A6)); xy.y = P->k0 * (al2*(P->B1+al2*P->B4)+ s*(1.+al2*(P->B3-al2*P->B6)+s2*(P->B2+s2*P->B8)+ s*al2*(P->B5+s*P->B7))); return (xy); } INVERSE(e_inverse); /* ellipsoid */ double s, al, x = xy.x / P->k0, y = xy.y / P->k0, x2, y2;; x2 = x * x; y2 = y * y; al = x*(1.-P->C1*y2+x2*(P->C2+P->C3*y-P->C4*x2+P->C5*y2-P->C7*x2*y) +y2*(P->C6*y2-P->C8*x2*y)); s = P->s0 + y*(1.+y2*(-P->D2+P->D8*y2))+ x2*(-P->D1+y*(-P->D3+y*(-P->D5+y*(-P->D7+y*P->D11)))+ x2*(P->D4+y*(P->D6+y*P->D10)-x2*P->D9)); lp.phi=proj_inv_mdist(s, P->en); s = sin(lp.phi); lp.lam=al * sqrt(1. - P->es * s * s)/cos(lp.phi); return (lp); } FREEUP; if (P) { if (P->en) free(P->en); free(P); } } ENTRY1(rouss, en) double N0, es2, t, t2, R_R0_2, R_R0_4; if (!((P->en = proj_mdist_ini(P->es)))) E_ERROR_0; es2 = sin(P->phi0); P->s0 = proj_mdist(P->phi0, es2, cos(P->phi0), P->en); t = 1. - (es2 = P->es * es2 * es2); N0 = 1./sqrt(t); R_R0_2 = t * t / P->one_es; R_R0_4 = R_R0_2 * R_R0_2; t = tan(P->phi0); t2 = t * t; P->C1 = P->A1 = R_R0_2 / 4.; P->C2 = P->A2 = R_R0_2 * (2 * t2 - 1. - 2. * es2) / 12.; P->A3 = R_R0_2 * t * (1. + 4. * t2)/ ( 12. * N0); P->A4 = R_R0_4 / 24.; P->A5 = R_R0_4 * ( -1. + t2 * (11. + 12. * t2))/24.; P->A6 = R_R0_4 * ( -2. + t2 * (11. - 2. * t2))/240.; P->B1 = t / (2. * N0); P->B2 = R_R0_2 / 12.; P->B3 = R_R0_2 * (1. + 2. * t2 - 2. * es2)/4.; P->B4 = R_R0_2 * t * (2. - t2)/(24. * N0); P->B5 = R_R0_2 * t * (5. + 4.* t2)/(8. * N0); P->B6 = R_R0_4 * (-2. + t2 * (-5. + 6. * t2))/48.; P->B7 = R_R0_4 * (5. + t2 * (19. + 12. * t2))/24.; P->B8 = R_R0_4 / 120.; P->C3 = R_R0_2 * t * (1. + t2)/(3. * N0); P->C4 = R_R0_4 * (-3. + t2 * (34. + 22. * t2))/240.; P->C5 = R_R0_4 * (4. + t2 * (13. + 12. * t2))/24.; P->C6 = R_R0_4 / 16.; P->C7 = R_R0_4 * t * (11. + t2 * (33. + t2 * 16.))/(48. * N0); P->C8 = R_R0_4 * t * (1. + t2 * 4.)/(36. * N0); P->D1 = t / (2. * N0); P->D2 = R_R0_2 / 12.; P->D3 = R_R0_2 * (2 * t2 + 1. - 2. * es2) / 4.; P->D4 = R_R0_2 * t * (1. + t2)/(8. * N0); P->D5 = R_R0_2 * t * (1. + t2 * 2.)/(4. * N0); P->D6 = R_R0_4 * (1. + t2 * (6. + t2 * 6.))/16.; P->D7 = R_R0_4 * t2 * (3. + t2 * 4.)/8.; P->D8 = R_R0_4 / 80.; P->D9 = R_R0_4 * t * (-21. + t2 * (178. - t2 * 26.))/720.; P->D10 = R_R0_4 * t * (29. + t2 * (86. + t2 * 48.))/(96. * N0); P->D11 = R_R0_4 * t * (37. + t2 * 44.)/(96. * N0); P->fwd = e_forward; P->inv = e_inverse; ENDENTRY(P) therion/extern/proj4/rtodms.c0000644000076400010400000000302711137334100017277 0ustar userAdministrators/* Convert radian argument to DMS ascii format */ #include #include #include /* ** RES is fractional second figures ** RES60 = 60 * RES ** CONV = 180 * 3600 * RES / PI (radians to RES seconds) */ static double RES = 1000., RES60 = 60000., CONV = 206264806.24709635515796003417; static char format[50] = "%dd%d'%.3f\"%c"; static int dolong = 0; void set_rtodms(int fract, int con_w) { int i; if (fract >= 0 && fract < 9 ) { RES = 1.; /* following not very elegant, but used infrequently */ for (i = 0; i < fract; ++i) RES *= 10.; RES60 = RES * 60.; CONV = 180. * 3600. * RES / PI; if (! con_w) (void)sprintf(format,"%%dd%%d'%%.%df\"%%c", fract); else (void)sprintf(format,"%%dd%%02d'%%0%d.%df\"%%c", fract+2+(fract?1:0), fract); dolong = con_w; } } char * rtodms(char *s, double r, int pos, int neg) { int deg, min, sign; char *ss = s; double sec; if (r < 0) { r = -r; if (!pos) { *ss++ = '-'; sign = 0; } else sign = neg; } else sign = pos; r = floor(r * CONV + .5); sec = fmod(r / RES, 60.); r = floor(r / RES60); min = fmod(r, 60.); r = floor(r / 60.); deg = r; if (dolong) (void)sprintf(ss,format,deg,min,sec,sign); else if (sec) { char *p, *q; (void)sprintf(ss,format,deg,min,sec,sign); for (q = p = ss + strlen(ss) - (sign ? 3 : 2); *p == '0'; --p) ; if (*p != '.') ++p; if (++q != p) (void)strcpy(p, q); } else if (min) (void)sprintf(ss,"%dd%d'%c",deg,min,sign); else (void)sprintf(ss,"%dd%c",deg, sign); return s; } therion/extern/proj4/vector1.c0000644000076400010400000000123311137334102017351 0ustar userAdministrators/* make storage for one and two dimensional matricies */ #include #include void * /* one dimension array */ vector1(int nvals, int size) { return((void *)pj_malloc(size * nvals)); } void /* free 2D array */ freev2(void **v, int nrows) { if (v) { for (v += nrows; nrows > 0; --nrows) pj_dalloc(*--v); pj_dalloc(v); } } void ** /* two dimension array */ vector2(int nrows, int ncols, int size) { void **s; if (s = (void **)pj_malloc(sizeof(void *) * nrows)) { int rsize, i; rsize = size * ncols; for (i = 0; i < nrows; ++i) if (!(s[i] = pj_malloc(rsize))) { freev2(s, i); return (void **)0; } } return s; } therion/extern/shapefil.h0000644000076400010400000004003207644336552016553 0ustar userAdministrators#ifndef _SHAPEFILE_H_INCLUDED #define _SHAPEFILE_H_INCLUDED /****************************************************************************** * $Id: shapefil.h,v 1.26 2002/09/29 00:00:08 warmerda Exp $ * * Project: Shapelib * Purpose: Primary include file for Shapelib. * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 1999, Frank Warmerdam * * This software is available under the following "MIT Style" license, * or at the option of the licensee under the LGPL (see LICENSE.LGPL). This * option is discussed in more detail in shapelib.html. * * -- * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. ****************************************************************************** * * $Log: shapefil.h,v $ * Revision 1.26 2002/09/29 00:00:08 warmerda * added FTLogical and logical attribute read/write calls * * Revision 1.25 2002/05/07 13:46:30 warmerda * added DBFWriteAttributeDirectly(). * * Revision 1.24 2002/04/10 16:59:54 warmerda * added SHPRewindObject * * Revision 1.23 2002/01/15 14:36:07 warmerda * updated email address * * Revision 1.22 2002/01/15 14:32:00 warmerda * try to improve SHPAPI_CALL docs * * Revision 1.21 2001/11/01 16:29:55 warmerda * move pabyRec into SHPInfo for thread safety * * Revision 1.20 2001/07/20 13:06:02 warmerda * fixed SHPAPI attribute for SHPTreeFindLikelyShapes * * Revision 1.19 2001/05/31 19:20:13 warmerda * added DBFGetFieldIndex() * * Revision 1.18 2001/05/31 18:15:40 warmerda * Added support for NULL fields in DBF files * * Revision 1.17 2001/05/23 13:36:52 warmerda * added use of SHPAPI_CALL * * Revision 1.16 2000/09/25 14:15:59 warmerda * added DBFGetNativeFieldType() * * Revision 1.15 2000/02/16 16:03:51 warmerda * added null shape support * * Revision 1.14 1999/11/05 14:12:05 warmerda * updated license terms * * Revision 1.13 1999/06/02 18:24:21 warmerda * added trimming code * * Revision 1.12 1999/06/02 17:56:12 warmerda * added quad'' subnode support for trees * * Revision 1.11 1999/05/18 19:11:11 warmerda * Added example searching capability * * Revision 1.10 1999/05/18 17:49:38 warmerda * added initial quadtree support * * Revision 1.9 1999/05/11 03:19:28 warmerda * added new Tuple api, and improved extension handling - add from candrsn * * Revision 1.8 1999/03/23 17:22:27 warmerda * Added extern "C" protection for C++ users of shapefil.h. * * Revision 1.7 1998/12/31 15:31:07 warmerda * Added the TRIM_DBF_WHITESPACE and DISABLE_MULTIPATCH_MEASURE options. * * Revision 1.6 1998/12/03 15:48:15 warmerda * Added SHPCalculateExtents(). * * Revision 1.5 1998/11/09 20:57:16 warmerda * Altered SHPGetInfo() call. * * Revision 1.4 1998/11/09 20:19:33 warmerda * Added 3D support, and use of SHPObject. * * Revision 1.3 1995/08/23 02:24:05 warmerda * Added support for reading bounds. * * Revision 1.2 1995/08/04 03:17:39 warmerda * Added header. * */ #include #ifdef USE_DBMALLOC #include #endif #ifdef __cplusplus extern "C" { #endif /************************************************************************/ /* Configuration options. */ /************************************************************************/ /* -------------------------------------------------------------------- */ /* Should the DBFReadStringAttribute() strip leading and */ /* trailing white space? */ /* -------------------------------------------------------------------- */ #define TRIM_DBF_WHITESPACE /* -------------------------------------------------------------------- */ /* Should we write measure values to the Multipatch object? */ /* Reportedly ArcView crashes if we do write it, so for now it */ /* is disabled. */ /* -------------------------------------------------------------------- */ #define DISABLE_MULTIPATCH_MEASURE /* -------------------------------------------------------------------- */ /* SHPAPI_CALL */ /* */ /* The following two macros are present to allow forcing */ /* various calling conventions on the Shapelib API. */ /* */ /* To force __stdcall conventions (needed to call Shapelib */ /* from Visual Basic and/or Dephi I believe) the makefile could */ /* be modified to define: */ /* */ /* /DSHPAPI_CALL=__stdcall */ /* */ /* If it is desired to force export of the Shapelib API without */ /* using the shapelib.def file, use the following definition. */ /* */ /* /DSHAPELIB_DLLEXPORT */ /* */ /* To get both at once it will be necessary to hack this */ /* include file to define: */ /* */ /* #define SHPAPI_CALL __declspec(dllexport) __stdcall */ /* #define SHPAPI_CALL1 __declspec(dllexport) * __stdcall */ /* */ /* The complexity of the situtation is partly caused by the */ /* peculiar requirement of Visual C++ that __stdcall appear */ /* after any "*"'s in the return value of a function while the */ /* __declspec(dllexport) must appear before them. */ /* -------------------------------------------------------------------- */ #ifdef SHAPELIB_DLLEXPORT # define SHPAPI_CALL __declspec(dllexport) # define SHPAPI_CALL1(x) __declspec(dllexport) x #endif #ifndef SHPAPI_CALL # define SHPAPI_CALL #endif #ifndef SHPAPI_CALL1 # define SHPAPI_CALL1(x) x SHPAPI_CALL #endif /************************************************************************/ /* SHP Support. */ /************************************************************************/ typedef struct { FILE *fpSHP; FILE *fpSHX; int nShapeType; /* SHPT_* */ int nFileSize; /* SHP file */ int nRecords; int nMaxRecords; int *panRecOffset; int *panRecSize; double adBoundsMin[4]; double adBoundsMax[4]; int bUpdated; unsigned char *pabyRec; int nBufSize; } SHPInfo; typedef SHPInfo * SHPHandle; /* -------------------------------------------------------------------- */ /* Shape types (nSHPType) */ /* -------------------------------------------------------------------- */ #define SHPT_NULL 0 #define SHPT_POINT 1 #define SHPT_ARC 3 #define SHPT_POLYGON 5 #define SHPT_MULTIPOINT 8 #define SHPT_POINTZ 11 #define SHPT_ARCZ 13 #define SHPT_POLYGONZ 15 #define SHPT_MULTIPOINTZ 18 #define SHPT_POINTM 21 #define SHPT_ARCM 23 #define SHPT_POLYGONM 25 #define SHPT_MULTIPOINTM 28 #define SHPT_MULTIPATCH 31 /* -------------------------------------------------------------------- */ /* Part types - everything but SHPT_MULTIPATCH just uses */ /* SHPP_RING. */ /* -------------------------------------------------------------------- */ #define SHPP_TRISTRIP 0 #define SHPP_TRIFAN 1 #define SHPP_OUTERRING 2 #define SHPP_INNERRING 3 #define SHPP_FIRSTRING 4 #define SHPP_RING 5 /* -------------------------------------------------------------------- */ /* SHPObject - represents on shape (without attributes) read */ /* from the .shp file. */ /* -------------------------------------------------------------------- */ typedef struct { int nSHPType; int nShapeId; /* -1 is unknown/unassigned */ int nParts; int *panPartStart; int *panPartType; int nVertices; double *padfX; double *padfY; double *padfZ; double *padfM; double dfXMin; double dfYMin; double dfZMin; double dfMMin; double dfXMax; double dfYMax; double dfZMax; double dfMMax; } SHPObject; /* -------------------------------------------------------------------- */ /* SHP API Prototypes */ /* -------------------------------------------------------------------- */ SHPHandle SHPAPI_CALL SHPOpen( const char * pszShapeFile, const char * pszAccess ); SHPHandle SHPAPI_CALL SHPCreate( const char * pszShapeFile, int nShapeType ); void SHPAPI_CALL SHPGetInfo( SHPHandle hSHP, int * pnEntities, int * pnShapeType, double * padfMinBound, double * padfMaxBound ); SHPObject SHPAPI_CALL1(*) SHPReadObject( SHPHandle hSHP, int iShape ); int SHPAPI_CALL SHPWriteObject( SHPHandle hSHP, int iShape, SHPObject * psObject ); void SHPAPI_CALL SHPDestroyObject( SHPObject * psObject ); void SHPAPI_CALL SHPComputeExtents( SHPObject * psObject ); SHPObject SHPAPI_CALL1(*) SHPCreateObject( int nSHPType, int nShapeId, int nParts, int * panPartStart, int * panPartType, int nVertices, double * padfX, double * padfY, double * padfZ, double * padfM ); SHPObject SHPAPI_CALL1(*) SHPCreateSimpleObject( int nSHPType, int nVertices, double * padfX, double * padfY, double * padfZ ); int SHPAPI_CALL SHPRewindObject( SHPHandle hSHP, SHPObject * psObject ); void SHPAPI_CALL SHPClose( SHPHandle hSHP ); const char SHPAPI_CALL1(*) SHPTypeName( int nSHPType ); const char SHPAPI_CALL1(*) SHPPartTypeName( int nPartType ); /* -------------------------------------------------------------------- */ /* Shape quadtree indexing API. */ /* -------------------------------------------------------------------- */ /* this can be two or four for binary or quad tree */ #define MAX_SUBNODE 4 typedef struct shape_tree_node { /* region covered by this node */ double adfBoundsMin[4]; double adfBoundsMax[4]; /* list of shapes stored at this node. The papsShapeObj pointers or the whole list can be NULL */ int nShapeCount; int *panShapeIds; SHPObject **papsShapeObj; int nSubNodes; struct shape_tree_node *apsSubNode[MAX_SUBNODE]; } SHPTreeNode; typedef struct { SHPHandle hSHP; int nMaxDepth; int nDimension; SHPTreeNode *psRoot; } SHPTree; SHPTree SHPAPI_CALL1(*) SHPCreateTree( SHPHandle hSHP, int nDimension, int nMaxDepth, double *padfBoundsMin, double *padfBoundsMax ); void SHPAPI_CALL SHPDestroyTree( SHPTree * hTree ); int SHPAPI_CALL SHPWriteTree( SHPTree *hTree, const char * pszFilename ); SHPTree SHPAPI_CALL SHPReadTree( const char * pszFilename ); int SHPAPI_CALL SHPTreeAddObject( SHPTree * hTree, SHPObject * psObject ); int SHPAPI_CALL SHPTreeAddShapeId( SHPTree * hTree, SHPObject * psObject ); int SHPAPI_CALL SHPTreeRemoveShapeId( SHPTree * hTree, int nShapeId ); void SHPAPI_CALL SHPTreeTrimExtraNodes( SHPTree * hTree ); int SHPAPI_CALL1(*) SHPTreeFindLikelyShapes( SHPTree * hTree, double * padfBoundsMin, double * padfBoundsMax, int * ); int SHPAPI_CALL SHPCheckBoundsOverlap( double *, double *, double *, double *, int ); /************************************************************************/ /* DBF Support. */ /************************************************************************/ typedef struct { FILE *fp; int nRecords; int nRecordLength; int nHeaderLength; int nFields; int *panFieldOffset; int *panFieldSize; int *panFieldDecimals; char *pachFieldType; char *pszHeader; int nCurrentRecord; int bCurrentRecordModified; char *pszCurrentRecord; int bNoHeader; int bUpdated; } DBFInfo; typedef DBFInfo * DBFHandle; typedef enum { FTString, FTInteger, FTDouble, FTLogical, FTInvalid } DBFFieldType; #define XBASE_FLDHDR_SZ 32 DBFHandle SHPAPI_CALL DBFOpen( const char * pszDBFFile, const char * pszAccess ); DBFHandle SHPAPI_CALL DBFCreate( const char * pszDBFFile ); int SHPAPI_CALL DBFGetFieldCount( DBFHandle psDBF ); int SHPAPI_CALL DBFGetRecordCount( DBFHandle psDBF ); int SHPAPI_CALL DBFAddField( DBFHandle hDBF, const char * pszFieldName, DBFFieldType eType, int nWidth, int nDecimals ); DBFFieldType SHPAPI_CALL DBFGetFieldInfo( DBFHandle psDBF, int iField, char * pszFieldName, int * pnWidth, int * pnDecimals ); int SHPAPI_CALL DBFGetFieldIndex(DBFHandle psDBF, const char *pszFieldName); int SHPAPI_CALL DBFReadIntegerAttribute( DBFHandle hDBF, int iShape, int iField ); double SHPAPI_CALL DBFReadDoubleAttribute( DBFHandle hDBF, int iShape, int iField ); const char SHPAPI_CALL1(*) DBFReadStringAttribute( DBFHandle hDBF, int iShape, int iField ); const char SHPAPI_CALL1(*) DBFReadLogicalAttribute( DBFHandle hDBF, int iShape, int iField ); int SHPAPI_CALL DBFIsAttributeNULL( DBFHandle hDBF, int iShape, int iField ); int SHPAPI_CALL DBFWriteIntegerAttribute( DBFHandle hDBF, int iShape, int iField, int nFieldValue ); int SHPAPI_CALL DBFWriteDoubleAttribute( DBFHandle hDBF, int iShape, int iField, double dFieldValue ); int SHPAPI_CALL DBFWriteStringAttribute( DBFHandle hDBF, int iShape, int iField, const char * pszFieldValue ); int SHPAPI_CALL DBFWriteNULLAttribute( DBFHandle hDBF, int iShape, int iField ); int SHPAPI_CALL DBFWriteLogicalAttribute( DBFHandle hDBF, int iShape, int iField, const char lFieldValue); int SHPAPI_CALL DBFWriteAttributeDirectly(DBFHandle psDBF, int hEntity, int iField, void * pValue ); const char SHPAPI_CALL1(*) DBFReadTuple(DBFHandle psDBF, int hEntity ); int SHPAPI_CALL DBFWriteTuple(DBFHandle psDBF, int hEntity, void * pRawTuple ); DBFHandle SHPAPI_CALL DBFCloneEmpty(DBFHandle psDBF, const char * pszFilename ); void SHPAPI_CALL DBFClose( DBFHandle hDBF ); char SHPAPI_CALL DBFGetNativeFieldType( DBFHandle hDBF, int iField ); #ifdef __cplusplus } #endif #endif /* ndef _SHAPEFILE_H_INCLUDED */ therion/extern/shpopen.c0000644000076400010400000020670110557554414016432 0ustar userAdministrators/****************************************************************************** * $Id: shpopen.c,v 1.39 2002/08/26 06:46:56 warmerda Exp $ * * Project: Shapelib * Purpose: Implementation of core Shapefile read/write functions. * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 1999, 2001, Frank Warmerdam * * This software is available under the following "MIT Style" license, * or at the option of the licensee under the LGPL (see LICENSE.LGPL). This * option is discussed in more detail in shapelib.html. * * -- * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. ****************************************************************************** * * $Log: shpopen.c,v $ * Revision 1.39 2002/08/26 06:46:56 warmerda * avoid c++ comments * * Revision 1.38 2002/05/07 16:43:39 warmerda * Removed debugging printf. * * Revision 1.37 2002/04/10 17:35:22 warmerda * fixed bug in ring reversal code * * Revision 1.36 2002/04/10 16:59:54 warmerda * added SHPRewindObject * * Revision 1.35 2001/12/07 15:10:44 warmerda * fix if .shx fails to open * * Revision 1.34 2001/11/01 16:29:55 warmerda * move pabyRec into SHPInfo for thread safety * * Revision 1.33 2001/07/03 12:18:15 warmerda * Improved cleanup if SHX not found, provied by Riccardo Cohen. * * Revision 1.32 2001/06/22 01:58:07 warmerda * be more careful about establishing initial bounds in face of NULL shapes * * Revision 1.31 2001/05/31 19:35:29 warmerda * added support for writing null shapes * * Revision 1.30 2001/05/28 12:46:29 warmerda * Add some checking on reasonableness of record count when opening. * * Revision 1.29 2001/05/23 13:36:52 warmerda * added use of SHPAPI_CALL * * Revision 1.28 2001/02/06 22:25:06 warmerda * fixed memory leaks when SHPOpen() fails * * Revision 1.27 2000/07/18 15:21:33 warmerda * added better enforcement of -1 for append in SHPWriteObject * * Revision 1.26 2000/02/16 16:03:51 warmerda * added null shape support * * Revision 1.25 1999/12/15 13:47:07 warmerda * Fixed record size settings in .shp file (was 4 words too long) * Added stdlib.h. * * Revision 1.24 1999/11/05 14:12:04 warmerda * updated license terms * * Revision 1.23 1999/07/27 00:53:46 warmerda * added support for rewriting shapes * * Revision 1.22 1999/06/11 19:19:11 warmerda * Cleanup pabyRec static buffer on SHPClose(). * * Revision 1.21 1999/06/02 14:57:56 kshih * Remove unused variables * * Revision 1.20 1999/04/19 21:04:17 warmerda * Fixed syntax error. * * Revision 1.19 1999/04/19 21:01:57 warmerda * Force access string to binary in SHPOpen(). * * Revision 1.18 1999/04/01 18:48:07 warmerda * Try upper case extensions if lower case doesn't work. * * Revision 1.17 1998/12/31 15:29:39 warmerda * Disable writing measure values to multipatch objects if * DISABLE_MULTIPATCH_MEASURE is defined. * * Revision 1.16 1998/12/16 05:14:33 warmerda * Added support to write MULTIPATCH. Fixed reading Z coordinate of * MULTIPATCH. Fixed record size written for all feature types. * * Revision 1.15 1998/12/03 16:35:29 warmerda * r+b is proper binary access string, not rb+. * * Revision 1.14 1998/12/03 15:47:56 warmerda * Fixed setting of nVertices in SHPCreateObject(). * * Revision 1.13 1998/12/03 15:33:54 warmerda * Made SHPCalculateExtents() separately callable. * * Revision 1.12 1998/11/11 20:01:50 warmerda * Fixed bug writing ArcM/Z, and PolygonM/Z for big endian machines. * * Revision 1.11 1998/11/09 20:56:44 warmerda * Fixed up handling of file wide bounds. * * Revision 1.10 1998/11/09 20:18:51 warmerda * Converted to support 3D shapefiles, and use of SHPObject. * * Revision 1.9 1998/02/24 15:09:05 warmerda * Fixed memory leak. * * Revision 1.8 1997/12/04 15:40:29 warmerda * Fixed byte swapping of record number, and record length fields in the * .shp file. * * Revision 1.7 1995/10/21 03:15:58 warmerda * Added support for binary file access, the magic cookie 9997 * and tried to improve the int32 selection logic for 16bit systems. * * Revision 1.6 1995/09/04 04:19:41 warmerda * Added fix for file bounds. * * Revision 1.5 1995/08/25 15:16:44 warmerda * Fixed a couple of problems with big endian systems ... one with bounds * and the other with multipart polygons. * * Revision 1.4 1995/08/24 18:10:17 warmerda * Switch to use SfRealloc() to avoid problems with pre-ANSI realloc() * functions (such as on the Sun). * * Revision 1.3 1995/08/23 02:23:15 warmerda * Added support for reading bounds, and fixed up problems in setting the * file wide bounds. * * Revision 1.2 1995/08/04 03:16:57 warmerda * Added header. * */ /* * static char rcsid[] = * "$Id: shpopen.c,v 1.39 2002/08/26 06:46:56 warmerda Exp $"; */ #include "shapefil.h" #include #include #include #include #include typedef unsigned char uchar; #if UINT_MAX == 65535 typedef long int32; #else typedef int int32; #endif #ifndef FALSE # define FALSE 0 # define TRUE 1 #endif #define ByteCopy( a, b, c ) memcpy( b, a, c ) #ifndef MAX # define MIN(a,b) ((ab) ? a : b) #endif static int bBigEndian; /************************************************************************/ /* SwapWord() */ /* */ /* Swap a 2, 4 or 8 byte word. */ /************************************************************************/ static void SwapWord( int length, void * wordP ) { int i; uchar temp; for( i=0; i < length/2; i++ ) { temp = ((uchar *) wordP)[i]; ((uchar *)wordP)[i] = ((uchar *) wordP)[length-i-1]; ((uchar *) wordP)[length-i-1] = temp; } } /************************************************************************/ /* SfRealloc() */ /* */ /* A realloc cover function that will access a NULL pointer as */ /* a valid input. */ /************************************************************************/ static void * SfRealloc( void * pMem, int nNewSize ) { if( pMem == NULL ) return( (void *) malloc(nNewSize) ); else return( (void *) realloc(pMem,nNewSize) ); } /************************************************************************/ /* SHPWriteHeader() */ /* */ /* Write out a header for the .shp and .shx files as well as the */ /* contents of the index (.shx) file. */ /************************************************************************/ static void SHPWriteHeader( SHPHandle psSHP ) { uchar abyHeader[100]; int i; int32 i32; double dValue; int32 *panSHX; /* -------------------------------------------------------------------- */ /* Prepare header block for .shp file. */ /* -------------------------------------------------------------------- */ for( i = 0; i < 100; i++ ) abyHeader[i] = 0; abyHeader[2] = 0x27; /* magic cookie */ abyHeader[3] = 0x0a; i32 = psSHP->nFileSize/2; /* file size */ ByteCopy( &i32, abyHeader+24, 4 ); if( !bBigEndian ) SwapWord( 4, abyHeader+24 ); i32 = 1000; /* version */ ByteCopy( &i32, abyHeader+28, 4 ); if( bBigEndian ) SwapWord( 4, abyHeader+28 ); i32 = psSHP->nShapeType; /* shape type */ ByteCopy( &i32, abyHeader+32, 4 ); if( bBigEndian ) SwapWord( 4, abyHeader+32 ); dValue = psSHP->adBoundsMin[0]; /* set bounds */ ByteCopy( &dValue, abyHeader+36, 8 ); if( bBigEndian ) SwapWord( 8, abyHeader+36 ); dValue = psSHP->adBoundsMin[1]; ByteCopy( &dValue, abyHeader+44, 8 ); if( bBigEndian ) SwapWord( 8, abyHeader+44 ); dValue = psSHP->adBoundsMax[0]; ByteCopy( &dValue, abyHeader+52, 8 ); if( bBigEndian ) SwapWord( 8, abyHeader+52 ); dValue = psSHP->adBoundsMax[1]; ByteCopy( &dValue, abyHeader+60, 8 ); if( bBigEndian ) SwapWord( 8, abyHeader+60 ); dValue = psSHP->adBoundsMin[2]; /* z */ ByteCopy( &dValue, abyHeader+68, 8 ); if( bBigEndian ) SwapWord( 8, abyHeader+68 ); dValue = psSHP->adBoundsMax[2]; ByteCopy( &dValue, abyHeader+76, 8 ); if( bBigEndian ) SwapWord( 8, abyHeader+76 ); dValue = psSHP->adBoundsMin[3]; /* m */ ByteCopy( &dValue, abyHeader+84, 8 ); if( bBigEndian ) SwapWord( 8, abyHeader+84 ); dValue = psSHP->adBoundsMax[3]; ByteCopy( &dValue, abyHeader+92, 8 ); if( bBigEndian ) SwapWord( 8, abyHeader+92 ); /* -------------------------------------------------------------------- */ /* Write .shp file header. */ /* -------------------------------------------------------------------- */ fseek( psSHP->fpSHP, 0, 0 ); fwrite( abyHeader, 100, 1, psSHP->fpSHP ); /* -------------------------------------------------------------------- */ /* Prepare, and write .shx file header. */ /* -------------------------------------------------------------------- */ i32 = (psSHP->nRecords * 2 * sizeof(int32) + 100)/2; /* file size */ ByteCopy( &i32, abyHeader+24, 4 ); if( !bBigEndian ) SwapWord( 4, abyHeader+24 ); fseek( psSHP->fpSHX, 0, 0 ); fwrite( abyHeader, 100, 1, psSHP->fpSHX ); /* -------------------------------------------------------------------- */ /* Write out the .shx contents. */ /* -------------------------------------------------------------------- */ panSHX = (int32 *) malloc(sizeof(int32) * 2 * psSHP->nRecords); for( i = 0; i < psSHP->nRecords; i++ ) { panSHX[i*2 ] = psSHP->panRecOffset[i]/2; panSHX[i*2+1] = psSHP->panRecSize[i]/2; if( !bBigEndian ) SwapWord( 4, panSHX+i*2 ); if( !bBigEndian ) SwapWord( 4, panSHX+i*2+1 ); } fwrite( panSHX, sizeof(int32) * 2, psSHP->nRecords, psSHP->fpSHX ); free( panSHX ); } /************************************************************************/ /* SHPOpen() */ /* */ /* Open the .shp and .shx files based on the basename of the */ /* files or either file name. */ /************************************************************************/ SHPHandle SHPAPI_CALL SHPOpen( const char * pszLayer, const char * pszAccess ) { char *pszFullname, *pszBasename; SHPHandle psSHP; uchar *pabyBuf; int i; double dValue; /* -------------------------------------------------------------------- */ /* Ensure the access string is one of the legal ones. We */ /* ensure the result string indicates binary to avoid common */ /* problems on Windows. */ /* -------------------------------------------------------------------- */ if( strcmp(pszAccess,"rb+") == 0 || strcmp(pszAccess,"r+b") == 0 || strcmp(pszAccess,"r+") == 0 ) pszAccess = "r+b"; else pszAccess = "rb"; /* -------------------------------------------------------------------- */ /* Establish the byte order on this machine. */ /* -------------------------------------------------------------------- */ i = 1; if( *((uchar *) &i) == 1 ) bBigEndian = FALSE; else bBigEndian = TRUE; /* -------------------------------------------------------------------- */ /* Initialize the info structure. */ /* -------------------------------------------------------------------- */ psSHP = (SHPHandle) calloc(sizeof(SHPInfo),1); psSHP->bUpdated = FALSE; /* -------------------------------------------------------------------- */ /* Compute the base (layer) name. If there is any extension */ /* on the passed in filename we will strip it off. */ /* -------------------------------------------------------------------- */ pszBasename = (char *) malloc(strlen(pszLayer)+5); strcpy( pszBasename, pszLayer ); for( i = strlen(pszBasename)-1; i > 0 && pszBasename[i] != '.' && pszBasename[i] != '/' && pszBasename[i] != '\\'; i-- ) {} if( pszBasename[i] == '.' ) pszBasename[i] = '\0'; /* -------------------------------------------------------------------- */ /* Open the .shp and .shx files. Note that files pulled from */ /* a PC to Unix with upper case filenames won't work! */ /* -------------------------------------------------------------------- */ pszFullname = (char *) malloc(strlen(pszBasename) + 5); sprintf( pszFullname, "%s.shp", pszBasename ); psSHP->fpSHP = fopen(pszFullname, pszAccess ); if( psSHP->fpSHP == NULL ) { sprintf( pszFullname, "%s.SHP", pszBasename ); psSHP->fpSHP = fopen(pszFullname, pszAccess ); } if( psSHP->fpSHP == NULL ) { free( psSHP ); free( pszBasename ); free( pszFullname ); return( NULL ); } sprintf( pszFullname, "%s.shx", pszBasename ); psSHP->fpSHX = fopen(pszFullname, pszAccess ); if( psSHP->fpSHX == NULL ) { sprintf( pszFullname, "%s.SHX", pszBasename ); psSHP->fpSHX = fopen(pszFullname, pszAccess ); } if( psSHP->fpSHX == NULL ) { fclose( psSHP->fpSHP ); free( psSHP ); free( pszBasename ); free( pszFullname ); return( NULL ); } free( pszFullname ); free( pszBasename ); /* -------------------------------------------------------------------- */ /* Read the file size from the SHP file. */ /* -------------------------------------------------------------------- */ pabyBuf = (uchar *) malloc(100); fread( pabyBuf, 100, 1, psSHP->fpSHP ); psSHP->nFileSize = (pabyBuf[24] * 256 * 256 * 256 + pabyBuf[25] * 256 * 256 + pabyBuf[26] * 256 + pabyBuf[27]) * 2; /* -------------------------------------------------------------------- */ /* Read SHX file Header info */ /* -------------------------------------------------------------------- */ fread( pabyBuf, 100, 1, psSHP->fpSHX ); if( pabyBuf[0] != 0 || pabyBuf[1] != 0 || pabyBuf[2] != 0x27 || (pabyBuf[3] != 0x0a && pabyBuf[3] != 0x0d) ) { fclose( psSHP->fpSHP ); fclose( psSHP->fpSHX ); free( psSHP ); return( NULL ); } psSHP->nRecords = pabyBuf[27] + pabyBuf[26] * 256 + pabyBuf[25] * 256 * 256 + pabyBuf[24] * 256 * 256 * 256; psSHP->nRecords = (psSHP->nRecords*2 - 100) / 8; psSHP->nShapeType = pabyBuf[32]; if( psSHP->nRecords < 0 || psSHP->nRecords > 256000000 ) { /* this header appears to be corrupt. Give up. */ fclose( psSHP->fpSHP ); fclose( psSHP->fpSHX ); free( psSHP ); return( NULL ); } /* -------------------------------------------------------------------- */ /* Read the bounds. */ /* -------------------------------------------------------------------- */ if( bBigEndian ) SwapWord( 8, pabyBuf+36 ); memcpy( &dValue, pabyBuf+36, 8 ); psSHP->adBoundsMin[0] = dValue; if( bBigEndian ) SwapWord( 8, pabyBuf+44 ); memcpy( &dValue, pabyBuf+44, 8 ); psSHP->adBoundsMin[1] = dValue; if( bBigEndian ) SwapWord( 8, pabyBuf+52 ); memcpy( &dValue, pabyBuf+52, 8 ); psSHP->adBoundsMax[0] = dValue; if( bBigEndian ) SwapWord( 8, pabyBuf+60 ); memcpy( &dValue, pabyBuf+60, 8 ); psSHP->adBoundsMax[1] = dValue; if( bBigEndian ) SwapWord( 8, pabyBuf+68 ); /* z */ memcpy( &dValue, pabyBuf+68, 8 ); psSHP->adBoundsMin[2] = dValue; if( bBigEndian ) SwapWord( 8, pabyBuf+76 ); memcpy( &dValue, pabyBuf+76, 8 ); psSHP->adBoundsMax[2] = dValue; if( bBigEndian ) SwapWord( 8, pabyBuf+84 ); /* z */ memcpy( &dValue, pabyBuf+84, 8 ); psSHP->adBoundsMin[3] = dValue; if( bBigEndian ) SwapWord( 8, pabyBuf+92 ); memcpy( &dValue, pabyBuf+92, 8 ); psSHP->adBoundsMax[3] = dValue; free( pabyBuf ); /* -------------------------------------------------------------------- */ /* Read the .shx file to get the offsets to each record in */ /* the .shp file. */ /* -------------------------------------------------------------------- */ psSHP->nMaxRecords = psSHP->nRecords; psSHP->panRecOffset = (int *) malloc(sizeof(int) * MAX(1,psSHP->nMaxRecords) ); psSHP->panRecSize = (int *) malloc(sizeof(int) * MAX(1,psSHP->nMaxRecords) ); pabyBuf = (uchar *) malloc(8 * MAX(1,psSHP->nRecords) ); fread( pabyBuf, 8, psSHP->nRecords, psSHP->fpSHX ); for( i = 0; i < psSHP->nRecords; i++ ) { int32 nOffset, nLength; memcpy( &nOffset, pabyBuf + i * 8, 4 ); if( !bBigEndian ) SwapWord( 4, &nOffset ); memcpy( &nLength, pabyBuf + i * 8 + 4, 4 ); if( !bBigEndian ) SwapWord( 4, &nLength ); psSHP->panRecOffset[i] = nOffset*2; psSHP->panRecSize[i] = nLength*2; } free( pabyBuf ); return( psSHP ); } /************************************************************************/ /* SHPClose() */ /* */ /* Close the .shp and .shx files. */ /************************************************************************/ void SHPAPI_CALL SHPClose(SHPHandle psSHP ) { /* -------------------------------------------------------------------- */ /* Update the header if we have modified anything. */ /* -------------------------------------------------------------------- */ if( psSHP->bUpdated ) { SHPWriteHeader( psSHP ); } /* -------------------------------------------------------------------- */ /* Free all resources, and close files. */ /* -------------------------------------------------------------------- */ free( psSHP->panRecOffset ); free( psSHP->panRecSize ); fclose( psSHP->fpSHX ); fclose( psSHP->fpSHP ); if( psSHP->pabyRec != NULL ) { free( psSHP->pabyRec ); } free( psSHP ); } /************************************************************************/ /* SHPGetInfo() */ /* */ /* Fetch general information about the shape file. */ /************************************************************************/ void SHPAPI_CALL SHPGetInfo(SHPHandle psSHP, int * pnEntities, int * pnShapeType, double * padfMinBound, double * padfMaxBound ) { int i; if( pnEntities != NULL ) *pnEntities = psSHP->nRecords; if( pnShapeType != NULL ) *pnShapeType = psSHP->nShapeType; for( i = 0; i < 4; i++ ) { if( padfMinBound != NULL ) padfMinBound[i] = psSHP->adBoundsMin[i]; if( padfMaxBound != NULL ) padfMaxBound[i] = psSHP->adBoundsMax[i]; } } /************************************************************************/ /* SHPCreate() */ /* */ /* Create a new shape file and return a handle to the open */ /* shape file with read/write access. */ /************************************************************************/ SHPHandle SHPAPI_CALL SHPCreate( const char * pszLayer, int nShapeType ) { char *pszBasename, *pszFullname; int i; FILE *fpSHP, *fpSHX; uchar abyHeader[100]; int32 i32; double dValue; /* -------------------------------------------------------------------- */ /* Establish the byte order on this system. */ /* -------------------------------------------------------------------- */ i = 1; if( *((uchar *) &i) == 1 ) bBigEndian = FALSE; else bBigEndian = TRUE; /* -------------------------------------------------------------------- */ /* Compute the base (layer) name. If there is any extension */ /* on the passed in filename we will strip it off. */ /* -------------------------------------------------------------------- */ pszBasename = (char *) malloc(strlen(pszLayer)+5); strcpy( pszBasename, pszLayer ); for( i = strlen(pszBasename)-1; i > 0 && pszBasename[i] != '.' && pszBasename[i] != '/' && pszBasename[i] != '\\'; i-- ) {} if( pszBasename[i] == '.' ) pszBasename[i] = '\0'; /* -------------------------------------------------------------------- */ /* Open the two files so we can write their headers. */ /* -------------------------------------------------------------------- */ pszFullname = (char *) malloc(strlen(pszBasename) + 5); sprintf( pszFullname, "%s.shp", pszBasename ); fpSHP = fopen(pszFullname, "wb" ); if( fpSHP == NULL ) return( NULL ); sprintf( pszFullname, "%s.shx", pszBasename ); fpSHX = fopen(pszFullname, "wb" ); if( fpSHX == NULL ) return( NULL ); free( pszFullname ); free( pszBasename ); /* -------------------------------------------------------------------- */ /* Prepare header block for .shp file. */ /* -------------------------------------------------------------------- */ for( i = 0; i < 100; i++ ) abyHeader[i] = 0; abyHeader[2] = 0x27; /* magic cookie */ abyHeader[3] = 0x0a; i32 = 50; /* file size */ ByteCopy( &i32, abyHeader+24, 4 ); if( !bBigEndian ) SwapWord( 4, abyHeader+24 ); i32 = 1000; /* version */ ByteCopy( &i32, abyHeader+28, 4 ); if( bBigEndian ) SwapWord( 4, abyHeader+28 ); i32 = nShapeType; /* shape type */ ByteCopy( &i32, abyHeader+32, 4 ); if( bBigEndian ) SwapWord( 4, abyHeader+32 ); dValue = 0.0; /* set bounds */ ByteCopy( &dValue, abyHeader+36, 8 ); ByteCopy( &dValue, abyHeader+44, 8 ); ByteCopy( &dValue, abyHeader+52, 8 ); ByteCopy( &dValue, abyHeader+60, 8 ); /* -------------------------------------------------------------------- */ /* Write .shp file header. */ /* -------------------------------------------------------------------- */ fwrite( abyHeader, 100, 1, fpSHP ); /* -------------------------------------------------------------------- */ /* Prepare, and write .shx file header. */ /* -------------------------------------------------------------------- */ i32 = 50; /* file size */ ByteCopy( &i32, abyHeader+24, 4 ); if( !bBigEndian ) SwapWord( 4, abyHeader+24 ); fwrite( abyHeader, 100, 1, fpSHX ); /* -------------------------------------------------------------------- */ /* Close the files, and then open them as regular existing files. */ /* -------------------------------------------------------------------- */ fclose( fpSHP ); fclose( fpSHX ); return( SHPOpen( pszLayer, "r+b" ) ); } /************************************************************************/ /* _SHPSetBounds() */ /* */ /* Compute a bounds rectangle for a shape, and set it into the */ /* indicated location in the record. */ /************************************************************************/ static void _SHPSetBounds( uchar * pabyRec, SHPObject * psShape ) { ByteCopy( &(psShape->dfXMin), pabyRec + 0, 8 ); ByteCopy( &(psShape->dfYMin), pabyRec + 8, 8 ); ByteCopy( &(psShape->dfXMax), pabyRec + 16, 8 ); ByteCopy( &(psShape->dfYMax), pabyRec + 24, 8 ); if( bBigEndian ) { SwapWord( 8, pabyRec + 0 ); SwapWord( 8, pabyRec + 8 ); SwapWord( 8, pabyRec + 16 ); SwapWord( 8, pabyRec + 24 ); } } /************************************************************************/ /* SHPComputeExtents() */ /* */ /* Recompute the extents of a shape. Automatically done by */ /* SHPCreateObject(). */ /************************************************************************/ void SHPAPI_CALL SHPComputeExtents( SHPObject * psObject ) { int i; /* -------------------------------------------------------------------- */ /* Build extents for this object. */ /* -------------------------------------------------------------------- */ if( psObject->nVertices > 0 ) { psObject->dfXMin = psObject->dfXMax = psObject->padfX[0]; psObject->dfYMin = psObject->dfYMax = psObject->padfY[0]; psObject->dfZMin = psObject->dfZMax = psObject->padfZ[0]; psObject->dfMMin = psObject->dfMMax = psObject->padfM[0]; } for( i = 0; i < psObject->nVertices; i++ ) { psObject->dfXMin = MIN(psObject->dfXMin, psObject->padfX[i]); psObject->dfYMin = MIN(psObject->dfYMin, psObject->padfY[i]); psObject->dfZMin = MIN(psObject->dfZMin, psObject->padfZ[i]); psObject->dfMMin = MIN(psObject->dfMMin, psObject->padfM[i]); psObject->dfXMax = MAX(psObject->dfXMax, psObject->padfX[i]); psObject->dfYMax = MAX(psObject->dfYMax, psObject->padfY[i]); psObject->dfZMax = MAX(psObject->dfZMax, psObject->padfZ[i]); psObject->dfMMax = MAX(psObject->dfMMax, psObject->padfM[i]); } } /************************************************************************/ /* SHPCreateObject() */ /* */ /* Create a shape object. It should be freed with */ /* SHPDestroyObject(). */ /************************************************************************/ SHPObject SHPAPI_CALL1(*) SHPCreateObject( int nSHPType, int nShapeId, int nParts, int * panPartStart, int * panPartType, int nVertices, double * padfX, double * padfY, double * padfZ, double * padfM ) { SHPObject *psObject; int i, bHasM, bHasZ; psObject = (SHPObject *) calloc(1,sizeof(SHPObject)); psObject->nSHPType = nSHPType; psObject->nShapeId = nShapeId; /* -------------------------------------------------------------------- */ /* Establish whether this shape type has M, and Z values. */ /* -------------------------------------------------------------------- */ if( nSHPType == SHPT_ARCM || nSHPType == SHPT_POINTM || nSHPType == SHPT_POLYGONM || nSHPType == SHPT_MULTIPOINTM ) { bHasM = TRUE; bHasZ = FALSE; } else if( nSHPType == SHPT_ARCZ || nSHPType == SHPT_POINTZ || nSHPType == SHPT_POLYGONZ || nSHPType == SHPT_MULTIPOINTZ || nSHPType == SHPT_MULTIPATCH ) { bHasM = TRUE; bHasZ = TRUE; } else { bHasM = FALSE; bHasZ = FALSE; } /* -------------------------------------------------------------------- */ /* Capture parts. Note that part type is optional, and */ /* defaults to ring. */ /* -------------------------------------------------------------------- */ if( nSHPType == SHPT_ARC || nSHPType == SHPT_POLYGON || nSHPType == SHPT_ARCM || nSHPType == SHPT_POLYGONM || nSHPType == SHPT_ARCZ || nSHPType == SHPT_POLYGONZ || nSHPType == SHPT_MULTIPATCH ) { psObject->nParts = MAX(1,nParts); psObject->panPartStart = (int *) malloc(sizeof(int) * psObject->nParts); psObject->panPartType = (int *) malloc(sizeof(int) * psObject->nParts); psObject->panPartStart[0] = 0; psObject->panPartType[0] = SHPP_RING; for( i = 0; i < nParts; i++ ) { psObject->panPartStart[i] = panPartStart[i]; if( panPartType != NULL ) psObject->panPartType[i] = panPartType[i]; else psObject->panPartType[i] = SHPP_RING; } } /* -------------------------------------------------------------------- */ /* Capture vertices. Note that Z and M are optional, but X and */ /* Y are not. */ /* -------------------------------------------------------------------- */ if( nVertices > 0 ) { psObject->padfX = (double *) calloc(sizeof(double),nVertices); psObject->padfY = (double *) calloc(sizeof(double),nVertices); psObject->padfZ = (double *) calloc(sizeof(double),nVertices); psObject->padfM = (double *) calloc(sizeof(double),nVertices); assert( padfX != NULL ); assert( padfY != NULL ); for( i = 0; i < nVertices; i++ ) { psObject->padfX[i] = padfX[i]; psObject->padfY[i] = padfY[i]; if( padfZ != NULL && bHasZ ) psObject->padfZ[i] = padfZ[i]; if( padfM != NULL && bHasM ) psObject->padfM[i] = padfM[i]; } } /* -------------------------------------------------------------------- */ /* Compute the extents. */ /* -------------------------------------------------------------------- */ psObject->nVertices = nVertices; SHPComputeExtents( psObject ); return( psObject ); } /************************************************************************/ /* SHPCreateSimpleObject() */ /* */ /* Create a simple (common) shape object. Destroy with */ /* SHPDestroyObject(). */ /************************************************************************/ SHPObject SHPAPI_CALL1(*) SHPCreateSimpleObject( int nSHPType, int nVertices, double * padfX, double * padfY, double * padfZ ) { return( SHPCreateObject( nSHPType, -1, 0, NULL, NULL, nVertices, padfX, padfY, padfZ, NULL ) ); } /************************************************************************/ /* SHPWriteObject() */ /* */ /* Write out the vertices of a new structure. Note that it is */ /* only possible to write vertices at the end of the file. */ /************************************************************************/ int SHPAPI_CALL SHPWriteObject(SHPHandle psSHP, int nShapeId, SHPObject * psObject ) { int nRecordOffset, i, nRecordSize; uchar *pabyRec; int32 i32; psSHP->bUpdated = TRUE; /* -------------------------------------------------------------------- */ /* Ensure that shape object matches the type of the file it is */ /* being written to. */ /* -------------------------------------------------------------------- */ assert( psObject->nSHPType == psSHP->nShapeType || psObject->nSHPType == SHPT_NULL ); /* -------------------------------------------------------------------- */ /* Ensure that -1 is used for appends. Either blow an */ /* assertion, or if they are disabled, set the shapeid to -1 */ /* for appends. */ /* -------------------------------------------------------------------- */ assert( nShapeId == -1 || (nShapeId >= 0 && nShapeId < psSHP->nRecords) ); if( nShapeId != -1 && nShapeId >= psSHP->nRecords ) nShapeId = -1; /* -------------------------------------------------------------------- */ /* Add the new entity to the in memory index. */ /* -------------------------------------------------------------------- */ if( nShapeId == -1 && psSHP->nRecords+1 > psSHP->nMaxRecords ) { psSHP->nMaxRecords =(int) ( psSHP->nMaxRecords * 1.3 + 100); psSHP->panRecOffset = (int *) SfRealloc(psSHP->panRecOffset,sizeof(int) * psSHP->nMaxRecords ); psSHP->panRecSize = (int *) SfRealloc(psSHP->panRecSize,sizeof(int) * psSHP->nMaxRecords ); } /* -------------------------------------------------------------------- */ /* Initialize record. */ /* -------------------------------------------------------------------- */ pabyRec = (uchar *) malloc(psObject->nVertices * 4 * sizeof(double) + psObject->nParts * 8 + 128); /* -------------------------------------------------------------------- */ /* Extract vertices for a Polygon or Arc. */ /* -------------------------------------------------------------------- */ if( psObject->nSHPType == SHPT_POLYGON || psObject->nSHPType == SHPT_POLYGONZ || psObject->nSHPType == SHPT_POLYGONM || psObject->nSHPType == SHPT_ARC || psObject->nSHPType == SHPT_ARCZ || psObject->nSHPType == SHPT_ARCM || psObject->nSHPType == SHPT_MULTIPATCH ) { int32 nPoints, nParts; int i; nPoints = psObject->nVertices; nParts = psObject->nParts; _SHPSetBounds( pabyRec + 12, psObject ); if( bBigEndian ) SwapWord( 4, &nPoints ); if( bBigEndian ) SwapWord( 4, &nParts ); ByteCopy( &nPoints, pabyRec + 40 + 8, 4 ); ByteCopy( &nParts, pabyRec + 36 + 8, 4 ); nRecordSize = 52; /* * Write part start positions. */ ByteCopy( psObject->panPartStart, pabyRec + 44 + 8, 4 * psObject->nParts ); for( i = 0; i < psObject->nParts; i++ ) { if( bBigEndian ) SwapWord( 4, pabyRec + 44 + 8 + 4*i ); nRecordSize += 4; } /* * Write multipatch part types if needed. */ if( psObject->nSHPType == SHPT_MULTIPATCH ) { memcpy( pabyRec + nRecordSize, psObject->panPartType, 4*psObject->nParts ); for( i = 0; i < psObject->nParts; i++ ) { if( bBigEndian ) SwapWord( 4, pabyRec + nRecordSize ); nRecordSize += 4; } } /* * Write the (x,y) vertex values. */ for( i = 0; i < psObject->nVertices; i++ ) { ByteCopy( psObject->padfX + i, pabyRec + nRecordSize, 8 ); ByteCopy( psObject->padfY + i, pabyRec + nRecordSize + 8, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize + 8 ); nRecordSize += 2 * 8; } /* * Write the Z coordinates (if any). */ if( psObject->nSHPType == SHPT_POLYGONZ || psObject->nSHPType == SHPT_ARCZ || psObject->nSHPType == SHPT_MULTIPATCH ) { ByteCopy( &(psObject->dfZMin), pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; ByteCopy( &(psObject->dfZMax), pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; for( i = 0; i < psObject->nVertices; i++ ) { ByteCopy( psObject->padfZ + i, pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; } } /* * Write the M values, if any. */ if( psObject->nSHPType == SHPT_POLYGONM || psObject->nSHPType == SHPT_ARCM #ifndef DISABLE_MULTIPATCH_MEASURE || psObject->nSHPType == SHPT_MULTIPATCH #endif || psObject->nSHPType == SHPT_POLYGONZ || psObject->nSHPType == SHPT_ARCZ ) { ByteCopy( &(psObject->dfMMin), pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; ByteCopy( &(psObject->dfMMax), pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; for( i = 0; i < psObject->nVertices; i++ ) { ByteCopy( psObject->padfM + i, pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; } } } /* -------------------------------------------------------------------- */ /* Extract vertices for a MultiPoint. */ /* -------------------------------------------------------------------- */ else if( psObject->nSHPType == SHPT_MULTIPOINT || psObject->nSHPType == SHPT_MULTIPOINTZ || psObject->nSHPType == SHPT_MULTIPOINTM ) { int32 nPoints; int i; nPoints = psObject->nVertices; _SHPSetBounds( pabyRec + 12, psObject ); if( bBigEndian ) SwapWord( 4, &nPoints ); ByteCopy( &nPoints, pabyRec + 44, 4 ); for( i = 0; i < psObject->nVertices; i++ ) { ByteCopy( psObject->padfX + i, pabyRec + 48 + i*16, 8 ); ByteCopy( psObject->padfY + i, pabyRec + 48 + i*16 + 8, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + 48 + i*16 ); if( bBigEndian ) SwapWord( 8, pabyRec + 48 + i*16 + 8 ); } nRecordSize = 48 + 16 * psObject->nVertices; if( psObject->nSHPType == SHPT_MULTIPOINTZ ) { ByteCopy( &(psObject->dfZMin), pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; ByteCopy( &(psObject->dfZMax), pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; for( i = 0; i < psObject->nVertices; i++ ) { ByteCopy( psObject->padfZ + i, pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; } } if( psObject->nSHPType == SHPT_MULTIPOINTZ || psObject->nSHPType == SHPT_MULTIPOINTM ) { ByteCopy( &(psObject->dfMMin), pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; ByteCopy( &(psObject->dfMMax), pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; for( i = 0; i < psObject->nVertices; i++ ) { ByteCopy( psObject->padfM + i, pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; } } } /* -------------------------------------------------------------------- */ /* Write point. */ /* -------------------------------------------------------------------- */ else if( psObject->nSHPType == SHPT_POINT || psObject->nSHPType == SHPT_POINTZ || psObject->nSHPType == SHPT_POINTM ) { ByteCopy( psObject->padfX, pabyRec + 12, 8 ); ByteCopy( psObject->padfY, pabyRec + 20, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + 12 ); if( bBigEndian ) SwapWord( 8, pabyRec + 20 ); nRecordSize = 28; if( psObject->nSHPType == SHPT_POINTZ ) { ByteCopy( psObject->padfZ, pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; } if( psObject->nSHPType == SHPT_POINTZ || psObject->nSHPType == SHPT_POINTM ) { ByteCopy( psObject->padfM, pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; } } /* -------------------------------------------------------------------- */ /* Not much to do for null geometries. */ /* -------------------------------------------------------------------- */ else if( psObject->nSHPType == SHPT_NULL ) { nRecordSize = 12; } else { /* unknown type */ assert( FALSE ); } /* -------------------------------------------------------------------- */ /* Establish where we are going to put this record. If we are */ /* rewriting and existing record, and it will fit, then put it */ /* back where the original came from. Otherwise write at the end. */ /* -------------------------------------------------------------------- */ if( nShapeId == -1 || psSHP->panRecSize[nShapeId] < nRecordSize-8 ) { if( nShapeId == -1 ) nShapeId = psSHP->nRecords++; psSHP->panRecOffset[nShapeId] = nRecordOffset = psSHP->nFileSize; psSHP->panRecSize[nShapeId] = nRecordSize-8; psSHP->nFileSize += nRecordSize; } else { nRecordOffset = psSHP->panRecOffset[nShapeId]; } /* -------------------------------------------------------------------- */ /* Set the shape type, record number, and record size. */ /* -------------------------------------------------------------------- */ i32 = nShapeId+1; /* record # */ if( !bBigEndian ) SwapWord( 4, &i32 ); ByteCopy( &i32, pabyRec, 4 ); i32 = (nRecordSize-8)/2; /* record size */ if( !bBigEndian ) SwapWord( 4, &i32 ); ByteCopy( &i32, pabyRec + 4, 4 ); i32 = psObject->nSHPType; /* shape type */ if( bBigEndian ) SwapWord( 4, &i32 ); ByteCopy( &i32, pabyRec + 8, 4 ); /* -------------------------------------------------------------------- */ /* Write out record. */ /* -------------------------------------------------------------------- */ if( fseek( psSHP->fpSHP, nRecordOffset, 0 ) != 0 || fwrite( pabyRec, nRecordSize, 1, psSHP->fpSHP ) < 1 ) { printf( "Error in fseek() or fwrite().\n" ); free( pabyRec ); return -1; } free( pabyRec ); /* -------------------------------------------------------------------- */ /* Expand file wide bounds based on this shape. */ /* -------------------------------------------------------------------- */ if( psSHP->adBoundsMin[0] == 0.0 && psSHP->adBoundsMax[0] == 0.0 && psSHP->adBoundsMin[1] == 0.0 && psSHP->adBoundsMax[1] == 0.0 && psObject->nSHPType != SHPT_NULL ) { psSHP->adBoundsMin[0] = psSHP->adBoundsMax[0] = psObject->padfX[0]; psSHP->adBoundsMin[1] = psSHP->adBoundsMax[1] = psObject->padfY[0]; psSHP->adBoundsMin[2] = psSHP->adBoundsMax[2] = psObject->padfZ[0]; psSHP->adBoundsMin[3] = psSHP->adBoundsMax[3] = psObject->padfM[0]; } for( i = 0; i < psObject->nVertices; i++ ) { psSHP->adBoundsMin[0] = MIN(psSHP->adBoundsMin[0],psObject->padfX[i]); psSHP->adBoundsMin[1] = MIN(psSHP->adBoundsMin[1],psObject->padfY[i]); psSHP->adBoundsMin[2] = MIN(psSHP->adBoundsMin[2],psObject->padfZ[i]); psSHP->adBoundsMin[3] = MIN(psSHP->adBoundsMin[3],psObject->padfM[i]); psSHP->adBoundsMax[0] = MAX(psSHP->adBoundsMax[0],psObject->padfX[i]); psSHP->adBoundsMax[1] = MAX(psSHP->adBoundsMax[1],psObject->padfY[i]); psSHP->adBoundsMax[2] = MAX(psSHP->adBoundsMax[2],psObject->padfZ[i]); psSHP->adBoundsMax[3] = MAX(psSHP->adBoundsMax[3],psObject->padfM[i]); } return( nShapeId ); } /************************************************************************/ /* SHPReadObject() */ /* */ /* Read the vertices, parts, and other non-attribute information */ /* for one shape. */ /************************************************************************/ SHPObject SHPAPI_CALL1(*) SHPReadObject( SHPHandle psSHP, int hEntity ) { SHPObject *psShape; /* -------------------------------------------------------------------- */ /* Validate the record/entity number. */ /* -------------------------------------------------------------------- */ if( hEntity < 0 || hEntity >= psSHP->nRecords ) return( NULL ); /* -------------------------------------------------------------------- */ /* Ensure our record buffer is large enough. */ /* -------------------------------------------------------------------- */ if( psSHP->panRecSize[hEntity]+8 > psSHP->nBufSize ) { psSHP->nBufSize = psSHP->panRecSize[hEntity]+8; psSHP->pabyRec = (uchar *) SfRealloc(psSHP->pabyRec,psSHP->nBufSize); } /* -------------------------------------------------------------------- */ /* Read the record. */ /* -------------------------------------------------------------------- */ fseek( psSHP->fpSHP, psSHP->panRecOffset[hEntity], 0 ); fread( psSHP->pabyRec, psSHP->panRecSize[hEntity]+8, 1, psSHP->fpSHP ); /* -------------------------------------------------------------------- */ /* Allocate and minimally initialize the object. */ /* -------------------------------------------------------------------- */ psShape = (SHPObject *) calloc(1,sizeof(SHPObject)); psShape->nShapeId = hEntity; memcpy( &psShape->nSHPType, psSHP->pabyRec + 8, 4 ); if( bBigEndian ) SwapWord( 4, &(psShape->nSHPType) ); /* ==================================================================== */ /* Extract vertices for a Polygon or Arc. */ /* ==================================================================== */ if( psShape->nSHPType == SHPT_POLYGON || psShape->nSHPType == SHPT_ARC || psShape->nSHPType == SHPT_POLYGONZ || psShape->nSHPType == SHPT_POLYGONM || psShape->nSHPType == SHPT_ARCZ || psShape->nSHPType == SHPT_ARCM || psShape->nSHPType == SHPT_MULTIPATCH ) { int32 nPoints, nParts; int i, nOffset; /* -------------------------------------------------------------------- */ /* Get the X/Y bounds. */ /* -------------------------------------------------------------------- */ memcpy( &(psShape->dfXMin), psSHP->pabyRec + 8 + 4, 8 ); memcpy( &(psShape->dfYMin), psSHP->pabyRec + 8 + 12, 8 ); memcpy( &(psShape->dfXMax), psSHP->pabyRec + 8 + 20, 8 ); memcpy( &(psShape->dfYMax), psSHP->pabyRec + 8 + 28, 8 ); if( bBigEndian ) SwapWord( 8, &(psShape->dfXMin) ); if( bBigEndian ) SwapWord( 8, &(psShape->dfYMin) ); if( bBigEndian ) SwapWord( 8, &(psShape->dfXMax) ); if( bBigEndian ) SwapWord( 8, &(psShape->dfYMax) ); /* -------------------------------------------------------------------- */ /* Extract part/point count, and build vertex and part arrays */ /* to proper size. */ /* -------------------------------------------------------------------- */ memcpy( &nPoints, psSHP->pabyRec + 40 + 8, 4 ); memcpy( &nParts, psSHP->pabyRec + 36 + 8, 4 ); if( bBigEndian ) SwapWord( 4, &nPoints ); if( bBigEndian ) SwapWord( 4, &nParts ); psShape->nVertices = nPoints; psShape->padfX = (double *) calloc(nPoints,sizeof(double)); psShape->padfY = (double *) calloc(nPoints,sizeof(double)); psShape->padfZ = (double *) calloc(nPoints,sizeof(double)); psShape->padfM = (double *) calloc(nPoints,sizeof(double)); psShape->nParts = nParts; psShape->panPartStart = (int *) calloc(nParts,sizeof(int)); psShape->panPartType = (int *) calloc(nParts,sizeof(int)); for( i = 0; i < nParts; i++ ) psShape->panPartType[i] = SHPP_RING; /* -------------------------------------------------------------------- */ /* Copy out the part array from the record. */ /* -------------------------------------------------------------------- */ memcpy( psShape->panPartStart, psSHP->pabyRec + 44 + 8, 4 * nParts ); for( i = 0; i < nParts; i++ ) { if( bBigEndian ) SwapWord( 4, psShape->panPartStart+i ); } nOffset = 44 + 8 + 4*nParts; /* -------------------------------------------------------------------- */ /* If this is a multipatch, we will also have parts types. */ /* -------------------------------------------------------------------- */ if( psShape->nSHPType == SHPT_MULTIPATCH ) { memcpy( psShape->panPartType, psSHP->pabyRec + nOffset, 4*nParts ); for( i = 0; i < nParts; i++ ) { if( bBigEndian ) SwapWord( 4, psShape->panPartType+i ); } nOffset += 4*nParts; } /* -------------------------------------------------------------------- */ /* Copy out the vertices from the record. */ /* -------------------------------------------------------------------- */ for( i = 0; i < nPoints; i++ ) { memcpy(psShape->padfX + i, psSHP->pabyRec + nOffset + i * 16, 8 ); memcpy(psShape->padfY + i, psSHP->pabyRec + nOffset + i * 16 + 8, 8 ); if( bBigEndian ) SwapWord( 8, psShape->padfX + i ); if( bBigEndian ) SwapWord( 8, psShape->padfY + i ); } nOffset += 16*nPoints; /* -------------------------------------------------------------------- */ /* If we have a Z coordinate, collect that now. */ /* -------------------------------------------------------------------- */ if( psShape->nSHPType == SHPT_POLYGONZ || psShape->nSHPType == SHPT_ARCZ || psShape->nSHPType == SHPT_MULTIPATCH ) { memcpy( &(psShape->dfZMin), psSHP->pabyRec + nOffset, 8 ); memcpy( &(psShape->dfZMax), psSHP->pabyRec + nOffset + 8, 8 ); if( bBigEndian ) SwapWord( 8, &(psShape->dfZMin) ); if( bBigEndian ) SwapWord( 8, &(psShape->dfZMax) ); for( i = 0; i < nPoints; i++ ) { memcpy( psShape->padfZ + i, psSHP->pabyRec + nOffset + 16 + i*8, 8 ); if( bBigEndian ) SwapWord( 8, psShape->padfZ + i ); } nOffset += 16 + 8*nPoints; } /* -------------------------------------------------------------------- */ /* If we have a M measure value, then read it now. We assume */ /* that the measure can be present for any shape if the size is */ /* big enough, but really it will only occur for the Z shapes */ /* (options), and the M shapes. */ /* -------------------------------------------------------------------- */ if( psSHP->panRecSize[hEntity]+8 >= nOffset + 16 + 8*nPoints ) { memcpy( &(psShape->dfMMin), psSHP->pabyRec + nOffset, 8 ); memcpy( &(psShape->dfMMax), psSHP->pabyRec + nOffset + 8, 8 ); if( bBigEndian ) SwapWord( 8, &(psShape->dfMMin) ); if( bBigEndian ) SwapWord( 8, &(psShape->dfMMax) ); for( i = 0; i < nPoints; i++ ) { memcpy( psShape->padfM + i, psSHP->pabyRec + nOffset + 16 + i*8, 8 ); if( bBigEndian ) SwapWord( 8, psShape->padfM + i ); } } } /* ==================================================================== */ /* Extract vertices for a MultiPoint. */ /* ==================================================================== */ else if( psShape->nSHPType == SHPT_MULTIPOINT || psShape->nSHPType == SHPT_MULTIPOINTM || psShape->nSHPType == SHPT_MULTIPOINTZ ) { int32 nPoints; int i, nOffset; memcpy( &nPoints, psSHP->pabyRec + 44, 4 ); if( bBigEndian ) SwapWord( 4, &nPoints ); psShape->nVertices = nPoints; psShape->padfX = (double *) calloc(nPoints,sizeof(double)); psShape->padfY = (double *) calloc(nPoints,sizeof(double)); psShape->padfZ = (double *) calloc(nPoints,sizeof(double)); psShape->padfM = (double *) calloc(nPoints,sizeof(double)); for( i = 0; i < nPoints; i++ ) { memcpy(psShape->padfX+i, psSHP->pabyRec + 48 + 16 * i, 8 ); memcpy(psShape->padfY+i, psSHP->pabyRec + 48 + 16 * i + 8, 8 ); if( bBigEndian ) SwapWord( 8, psShape->padfX + i ); if( bBigEndian ) SwapWord( 8, psShape->padfY + i ); } nOffset = 48 + 16*nPoints; /* -------------------------------------------------------------------- */ /* Get the X/Y bounds. */ /* -------------------------------------------------------------------- */ memcpy( &(psShape->dfXMin), psSHP->pabyRec + 8 + 4, 8 ); memcpy( &(psShape->dfYMin), psSHP->pabyRec + 8 + 12, 8 ); memcpy( &(psShape->dfXMax), psSHP->pabyRec + 8 + 20, 8 ); memcpy( &(psShape->dfYMax), psSHP->pabyRec + 8 + 28, 8 ); if( bBigEndian ) SwapWord( 8, &(psShape->dfXMin) ); if( bBigEndian ) SwapWord( 8, &(psShape->dfYMin) ); if( bBigEndian ) SwapWord( 8, &(psShape->dfXMax) ); if( bBigEndian ) SwapWord( 8, &(psShape->dfYMax) ); /* -------------------------------------------------------------------- */ /* If we have a Z coordinate, collect that now. */ /* -------------------------------------------------------------------- */ if( psShape->nSHPType == SHPT_MULTIPOINTZ ) { memcpy( &(psShape->dfZMin), psSHP->pabyRec + nOffset, 8 ); memcpy( &(psShape->dfZMax), psSHP->pabyRec + nOffset + 8, 8 ); if( bBigEndian ) SwapWord( 8, &(psShape->dfZMin) ); if( bBigEndian ) SwapWord( 8, &(psShape->dfZMax) ); for( i = 0; i < nPoints; i++ ) { memcpy( psShape->padfZ + i, psSHP->pabyRec + nOffset + 16 + i*8, 8 ); if( bBigEndian ) SwapWord( 8, psShape->padfZ + i ); } nOffset += 16 + 8*nPoints; } /* -------------------------------------------------------------------- */ /* If we have a M measure value, then read it now. We assume */ /* that the measure can be present for any shape if the size is */ /* big enough, but really it will only occur for the Z shapes */ /* (options), and the M shapes. */ /* -------------------------------------------------------------------- */ if( psSHP->panRecSize[hEntity]+8 >= nOffset + 16 + 8*nPoints ) { memcpy( &(psShape->dfMMin), psSHP->pabyRec + nOffset, 8 ); memcpy( &(psShape->dfMMax), psSHP->pabyRec + nOffset + 8, 8 ); if( bBigEndian ) SwapWord( 8, &(psShape->dfMMin) ); if( bBigEndian ) SwapWord( 8, &(psShape->dfMMax) ); for( i = 0; i < nPoints; i++ ) { memcpy( psShape->padfM + i, psSHP->pabyRec + nOffset + 16 + i*8, 8 ); if( bBigEndian ) SwapWord( 8, psShape->padfM + i ); } } } /* ==================================================================== */ /* Extract vertices for a point. */ /* ==================================================================== */ else if( psShape->nSHPType == SHPT_POINT || psShape->nSHPType == SHPT_POINTM || psShape->nSHPType == SHPT_POINTZ ) { int nOffset; psShape->nVertices = 1; psShape->padfX = (double *) calloc(1,sizeof(double)); psShape->padfY = (double *) calloc(1,sizeof(double)); psShape->padfZ = (double *) calloc(1,sizeof(double)); psShape->padfM = (double *) calloc(1,sizeof(double)); memcpy( psShape->padfX, psSHP->pabyRec + 12, 8 ); memcpy( psShape->padfY, psSHP->pabyRec + 20, 8 ); if( bBigEndian ) SwapWord( 8, psShape->padfX ); if( bBigEndian ) SwapWord( 8, psShape->padfY ); nOffset = 20 + 8; /* -------------------------------------------------------------------- */ /* If we have a Z coordinate, collect that now. */ /* -------------------------------------------------------------------- */ if( psShape->nSHPType == SHPT_POINTZ ) { memcpy( psShape->padfZ, psSHP->pabyRec + nOffset, 8 ); if( bBigEndian ) SwapWord( 8, psShape->padfZ ); nOffset += 8; } /* -------------------------------------------------------------------- */ /* If we have a M measure value, then read it now. We assume */ /* that the measure can be present for any shape if the size is */ /* big enough, but really it will only occur for the Z shapes */ /* (options), and the M shapes. */ /* -------------------------------------------------------------------- */ if( psSHP->panRecSize[hEntity]+8 >= nOffset + 8 ) { memcpy( psShape->padfM, psSHP->pabyRec + nOffset, 8 ); if( bBigEndian ) SwapWord( 8, psShape->padfM ); } /* -------------------------------------------------------------------- */ /* Since no extents are supplied in the record, we will apply */ /* them from the single vertex. */ /* -------------------------------------------------------------------- */ psShape->dfXMin = psShape->dfXMax = psShape->padfX[0]; psShape->dfYMin = psShape->dfYMax = psShape->padfY[0]; psShape->dfZMin = psShape->dfZMax = psShape->padfZ[0]; psShape->dfMMin = psShape->dfMMax = psShape->padfM[0]; } return( psShape ); } /************************************************************************/ /* SHPTypeName() */ /************************************************************************/ const char SHPAPI_CALL1(*) SHPTypeName( int nSHPType ) { switch( nSHPType ) { case SHPT_NULL: return "NullShape"; case SHPT_POINT: return "Point"; case SHPT_ARC: return "Arc"; case SHPT_POLYGON: return "Polygon"; case SHPT_MULTIPOINT: return "MultiPoint"; case SHPT_POINTZ: return "PointZ"; case SHPT_ARCZ: return "ArcZ"; case SHPT_POLYGONZ: return "PolygonZ"; case SHPT_MULTIPOINTZ: return "MultiPointZ"; case SHPT_POINTM: return "PointM"; case SHPT_ARCM: return "ArcM"; case SHPT_POLYGONM: return "PolygonM"; case SHPT_MULTIPOINTM: return "MultiPointM"; case SHPT_MULTIPATCH: return "MultiPatch"; default: return "UnknownShapeType"; } } /************************************************************************/ /* SHPPartTypeName() */ /************************************************************************/ const char SHPAPI_CALL1(*) SHPPartTypeName( int nPartType ) { switch( nPartType ) { case SHPP_TRISTRIP: return "TriangleStrip"; case SHPP_TRIFAN: return "TriangleFan"; case SHPP_OUTERRING: return "OuterRing"; case SHPP_INNERRING: return "InnerRing"; case SHPP_FIRSTRING: return "FirstRing"; case SHPP_RING: return "Ring"; default: return "UnknownPartType"; } } /************************************************************************/ /* SHPDestroyObject() */ /************************************************************************/ void SHPAPI_CALL SHPDestroyObject( SHPObject * psShape ) { if( psShape == NULL ) return; if( psShape->padfX != NULL ) free( psShape->padfX ); if( psShape->padfY != NULL ) free( psShape->padfY ); if( psShape->padfZ != NULL ) free( psShape->padfZ ); if( psShape->padfM != NULL ) free( psShape->padfM ); if( psShape->panPartStart != NULL ) free( psShape->panPartStart ); if( psShape->panPartType != NULL ) free( psShape->panPartType ); free( psShape ); } /************************************************************************/ /* SHPRewindObject() */ /* */ /* Reset the winding of polygon objects to adhere to the */ /* specification. */ /************************************************************************/ int SHPAPI_CALL SHPRewindObject( SHPHandle hSHP, SHPObject * psObject ) { int iOpRing, bAltered = 0; /* -------------------------------------------------------------------- */ /* Do nothing if this is not a polygon object. */ /* -------------------------------------------------------------------- */ if( psObject->nSHPType != SHPT_POLYGON && psObject->nSHPType != SHPT_POLYGONZ && psObject->nSHPType != SHPT_POLYGONM ) return 0; /* -------------------------------------------------------------------- */ /* Process each of the rings. */ /* -------------------------------------------------------------------- */ for( iOpRing = 0; iOpRing < psObject->nParts; iOpRing++ ) { int bInner, iVert, nVertCount, nVertStart, iCheckRing; double dfSum, dfTestX, dfTestY; /* -------------------------------------------------------------------- */ /* Determine if this ring is an inner ring or an outer ring */ /* relative to all the other rings. For now we assume the */ /* first ring is outer and all others are inner, but eventually */ /* we need to fix this to handle multiple island polygons and */ /* unordered sets of rings. */ /* -------------------------------------------------------------------- */ dfTestX = psObject->padfX[psObject->panPartStart[iOpRing]]; dfTestY = psObject->padfY[psObject->panPartStart[iOpRing]]; bInner = FALSE; for( iCheckRing = 0; iCheckRing < psObject->nParts; iCheckRing++ ) { int iEdge; if( iCheckRing == iOpRing ) continue; nVertStart = psObject->panPartStart[iCheckRing]; if( iCheckRing == psObject->nParts-1 ) nVertCount = psObject->nVertices - psObject->panPartStart[iCheckRing]; else nVertCount = psObject->panPartStart[iCheckRing+1] - psObject->panPartStart[iCheckRing]; for( iEdge = 0; iEdge < nVertCount; iEdge++ ) { int iNext; if( iEdge < nVertCount-1 ) iNext = iEdge+1; else iNext = 0; if( (psObject->padfY[iEdge+nVertStart] < dfTestY && psObject->padfY[iNext+nVertStart] >= dfTestY) || (psObject->padfY[iNext+nVertStart] < dfTestY && psObject->padfY[iEdge+nVertStart] >= dfTestY) ) { if( psObject->padfX[iEdge+nVertStart] + (dfTestY - psObject->padfY[iEdge+nVertStart]) / (psObject->padfY[iNext+nVertStart] - psObject->padfY[iEdge+nVertStart]) * (psObject->padfX[iNext+nVertStart] - psObject->padfX[iEdge+nVertStart]) < dfTestX ) bInner = !bInner; } } } /* -------------------------------------------------------------------- */ /* Determine the current order of this ring so we will know if */ /* it has to be reversed. */ /* -------------------------------------------------------------------- */ nVertStart = psObject->panPartStart[iOpRing]; if( iOpRing == psObject->nParts-1 ) nVertCount = psObject->nVertices - psObject->panPartStart[iOpRing]; else nVertCount = psObject->panPartStart[iOpRing+1] - psObject->panPartStart[iOpRing]; dfSum = 0.0; for( iVert = nVertStart; iVert < nVertStart+nVertCount-1; iVert++ ) { dfSum += psObject->padfX[iVert] * psObject->padfY[iVert+1] - psObject->padfY[iVert] * psObject->padfX[iVert+1]; } dfSum += psObject->padfX[iVert] * psObject->padfY[nVertStart] - psObject->padfY[iVert] * psObject->padfX[nVertStart]; /* -------------------------------------------------------------------- */ /* Reverse if necessary. */ /* -------------------------------------------------------------------- */ if( (dfSum < 0.0 && bInner) || (dfSum > 0.0 && !bInner) ) { int i; bAltered++; for( i = 0; i < nVertCount/2; i++ ) { double dfSaved; /* Swap X */ dfSaved = psObject->padfX[nVertStart+i]; psObject->padfX[nVertStart+i] = psObject->padfX[nVertStart+nVertCount-i-1]; psObject->padfX[nVertStart+nVertCount-i-1] = dfSaved; /* Swap Y */ dfSaved = psObject->padfY[nVertStart+i]; psObject->padfY[nVertStart+i] = psObject->padfY[nVertStart+nVertCount-i-1]; psObject->padfY[nVertStart+nVertCount-i-1] = dfSaved; /* Swap Z */ if( psObject->padfZ ) { dfSaved = psObject->padfZ[nVertStart+i]; psObject->padfZ[nVertStart+i] = psObject->padfZ[nVertStart+nVertCount-i-1]; psObject->padfZ[nVertStart+nVertCount-i-1] = dfSaved; } /* Swap M */ if( psObject->padfM ) { dfSaved = psObject->padfM[nVertStart+i]; psObject->padfM[nVertStart+i] = psObject->padfM[nVertStart+nVertCount-i-1]; psObject->padfM[nVertStart+nVertCount-i-1] = dfSaved; } } } } return bAltered; } therion/geomag/0000755000076400010400000000000012050456016014523 5ustar userAdministratorstherion/geomag/cof11_2c.pl0000755000076400010400000000603211331206264016360 0ustar userAdministrators#!/usr/bin/perl -w # Copyright 2006 Martin Budaj # assumptions: start 1900, interval 5 years, only last model extrapolated $degmax = 0; $yearmin = 10000; $yearmax = 0; sub y2y { my $y = shift; return int(($y-1900) / 5 + 0.5); # 1900 hardcoded } open (IN, "IGRF11.COF"); while () { chomp; if (/^ {3,5}(\S+)\s+(\d{4}\.\d{2})\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d{4}\.\d{2})\s+(\d{4}\.\d{2})/) { #$model = $1; $year = $2; $deg = $3; $deg2 = $4; if ($yearmin > $6) {$yearmin = $6;} if ($yearmax < $7) {$yearmax = $7;} # print $model . "\n"; if ($deg2 > 0.1) {$DATA{y2y($year)}{"extr"} = 1;} else {$DATA{y2y($year)}{"extr"} = 0;} if ($deg > $degmax) {$degmax = $deg;} } elsif (/^[ \d]\d [ \d]\d/) { $j = substr($_, 0, 2) + 0.0; $i = substr($_, 3, 2) + 0.0; $a = substr($_, 6, 9) + 0.0; $b = substr($_,16, 9) + 0.0; $c = substr($_,26, 9) + 0.0; $d = substr($_,36, 9) + 0.0; $DATAa{y2y($year)}{$i}{$j} = $a; $DATAb{y2y($year)}{$i}{$j} = $b; $DATAc{y2y($year)}{$i}{$j} = $c; $DATAd{y2y($year)}{$i}{$j} = $d; } } close IN; #print "$yearmin $yearmax $year\n"; open (OUT, ">../thgeomagdata.h"); print OUT "// generated by geomag/cof2c.pl\n\n#ifndef thgeomagdata_h\n#define thgeomagdata_h\n\n"; print OUT "static const double thgeomag_GNM[" , y2y($year) + 1, "][", $degmax+1, "][", $degmax+1, "] = {\n"; foreach $y (sort {$a <=> $b} keys %DATA) { print OUT "{\n"; for $j (0 .. $degmax) { print OUT " {"; for $i (0 .. $degmax) { print OUT $DATAa{$y}{$i}{$j} ? $DATAa{$y}{$i}{$j} : 0, ", "; } print OUT "},\n"; } print OUT "},\n"; } print OUT "};\n"; print OUT "static const double thgeomag_HNM[" , y2y($year) + 1, "][", $degmax+1, "][", $degmax+1, "] = {\n"; foreach $y (sort {$a <=> $b} keys %DATA) { print OUT "{\n"; for $j (0 .. $degmax) { print OUT " {"; for $i (0 .. $degmax) { print OUT $DATAb{$y}{$i}{$j} ? $DATAb{$y}{$i}{$j} : 0, ", "; } print OUT "},\n"; } print OUT "},\n"; } print OUT "};\n"; foreach $y (keys %DATA) { die "extrapolated data missing\n" if (($DATA{$y}{"extr"} == 0) && ($y == y2y($year))); die "extrapolated data too early\n" if (($DATA{$y}{"extr"} == 1) && ($y != y2y($year))); } print OUT "static const double thgeomag_GNMD[", $degmax+1, "][", $degmax+1, "] = {\n"; for $j (0 .. $degmax) { print OUT " {"; for $i (0 .. $degmax) { print OUT $DATAc{y2y($year)}{$i}{$j} ? $DATAc{y2y($year)}{$i}{$j} : 0, ", "; } print OUT "},\n"; } print OUT "};\n"; print OUT "static const double thgeomag_HNMD[", $degmax+1, "][", $degmax+1, "] = {\n"; for $j (0 .. $degmax) { print OUT " {"; for $i (0 .. $degmax) { print OUT $DATAd{y2y($year)}{$i}{$j} ? $DATAd{y2y($year)}{$i}{$j} : 0, ", "; } print OUT "},\n"; } print OUT "};\n"; print OUT "#define thgeomag_maxmindex ", y2y($year), "\n"; print OUT "#define thgeomag_step 5\n"; print OUT "#define thgeomag_minyear ", $yearmin+0.0, "\n"; print OUT "#define thgeomag_maxdeg ", $degmax+0.0, "\n"; print OUT "\n#endif\n\n"; close OUT; therion/geomag/IGRF11.COF0000644000076400010400000040252311327634202015754 0ustar userAdministrators IGRF00 1900.00 10 0 0 1900.00 1905.00 -1.0 600.0 IGRF00 0 1 0 -31543.00 0.00 0.00 0.00 IGRF00 1 1 1 -2298.00 5922.00 0.00 0.00 IGRF00 2 2 0 -677.00 0.00 0.00 0.00 IGRF00 3 2 1 2905.00 -1061.00 0.00 0.00 IGRF00 4 2 2 924.00 1121.00 0.00 0.00 IGRF00 5 3 0 1022.00 0.00 0.00 0.00 IGRF00 6 3 1 -1469.00 -330.00 0.00 0.00 IGRF00 7 3 2 1256.00 3.00 0.00 0.00 IGRF00 8 3 3 572.00 523.00 0.00 0.00 IGRF00 9 4 0 876.00 0.00 0.00 0.00 IGRF00 10 4 1 628.00 195.00 0.00 0.00 IGRF00 11 4 2 660.00 -69.00 0.00 0.00 IGRF00 12 4 3 -361.00 -210.00 0.00 0.00 IGRF00 13 4 4 134.00 -75.00 0.00 0.00 IGRF00 14 5 0 -184.00 0.00 0.00 0.00 IGRF00 15 5 1 328.00 -210.00 0.00 0.00 IGRF00 16 5 2 264.00 53.00 0.00 0.00 IGRF00 17 5 3 5.00 -33.00 0.00 0.00 IGRF00 18 5 4 -86.00 -124.00 0.00 0.00 IGRF00 19 5 5 -16.00 3.00 0.00 0.00 IGRF00 20 6 0 63.00 0.00 0.00 0.00 IGRF00 21 6 1 61.00 -9.00 0.00 0.00 IGRF00 22 6 2 -11.00 83.00 0.00 0.00 IGRF00 23 6 3 -217.00 2.00 0.00 0.00 IGRF00 24 6 4 -58.00 -35.00 0.00 0.00 IGRF00 25 6 5 59.00 36.00 0.00 0.00 IGRF00 26 6 6 -90.00 -69.00 0.00 0.00 IGRF00 27 7 0 70.00 0.00 0.00 0.00 IGRF00 28 7 1 -55.00 -45.00 0.00 0.00 IGRF00 29 7 2 0.00 -13.00 0.00 0.00 IGRF00 30 7 3 34.00 -10.00 0.00 0.00 IGRF00 31 7 4 -41.00 -1.00 0.00 0.00 IGRF00 32 7 5 -21.00 28.00 0.00 0.00 IGRF00 33 7 6 18.00 -12.00 0.00 0.00 IGRF00 34 7 7 6.00 -22.00 0.00 0.00 IGRF00 35 8 0 11.00 0.00 0.00 0.00 IGRF00 36 8 1 8.00 8.00 0.00 0.00 IGRF00 37 8 2 -4.00 -14.00 0.00 0.00 IGRF00 38 8 3 -9.00 7.00 0.00 0.00 IGRF00 39 8 4 1.00 -13.00 0.00 0.00 IGRF00 40 8 5 2.00 5.00 0.00 0.00 IGRF00 41 8 6 -9.00 16.00 0.00 0.00 IGRF00 42 8 7 5.00 -5.00 0.00 0.00 IGRF00 43 8 8 8.00 -18.00 0.00 0.00 IGRF00 44 9 0 8.00 0.00 0.00 0.00 IGRF00 45 9 1 10.00 -20.00 0.00 0.00 IGRF00 46 9 2 1.00 14.00 0.00 0.00 IGRF00 47 9 3 -11.00 5.00 0.00 0.00 IGRF00 48 9 4 12.00 -3.00 0.00 0.00 IGRF00 49 9 5 1.00 -2.00 0.00 0.00 IGRF00 50 9 6 -2.00 8.00 0.00 0.00 IGRF00 51 9 7 2.00 10.00 0.00 0.00 IGRF00 52 9 8 -1.00 -2.00 0.00 0.00 IGRF00 53 9 9 -1.00 2.00 0.00 0.00 IGRF00 54 10 0 -3.00 0.00 0.00 0.00 IGRF00 55 10 1 -4.00 2.00 0.00 0.00 IGRF00 56 10 2 2.00 1.00 0.00 0.00 IGRF00 57 10 3 -5.00 2.00 0.00 0.00 IGRF00 58 10 4 -2.00 6.00 0.00 0.00 IGRF00 59 10 5 6.00 -4.00 0.00 0.00 IGRF00 60 10 6 4.00 0.00 0.00 0.00 IGRF00 61 10 7 0.00 -2.00 0.00 0.00 IGRF00 62 10 8 2.00 4.00 0.00 0.00 IGRF00 63 10 9 2.00 0.00 0.00 0.00 IGRF00 64 10 10 0.00 -6.00 0.00 0.00 IGRF00 65 IGRF05 1905.00 10 0 0 1905.00 1910.00 -1.0 600.0 IGRF05 0 1 0 -31464.00 0.00 0.00 0.00 IGRF05 1 1 1 -2298.00 5909.00 0.00 0.00 IGRF05 2 2 0 -728.00 0.00 0.00 0.00 IGRF05 3 2 1 2928.00 -1086.00 0.00 0.00 IGRF05 4 2 2 1041.00 1065.00 0.00 0.00 IGRF05 5 3 0 1037.00 0.00 0.00 0.00 IGRF05 6 3 1 -1494.00 -357.00 0.00 0.00 IGRF05 7 3 2 1239.00 34.00 0.00 0.00 IGRF05 8 3 3 635.00 480.00 0.00 0.00 IGRF05 9 4 0 880.00 0.00 0.00 0.00 IGRF05 10 4 1 643.00 203.00 0.00 0.00 IGRF05 11 4 2 653.00 -77.00 0.00 0.00 IGRF05 12 4 3 -380.00 -201.00 0.00 0.00 IGRF05 13 4 4 146.00 -65.00 0.00 0.00 IGRF05 14 5 0 -192.00 0.00 0.00 0.00 IGRF05 15 5 1 328.00 -193.00 0.00 0.00 IGRF05 16 5 2 259.00 56.00 0.00 0.00 IGRF05 17 5 3 -1.00 -32.00 0.00 0.00 IGRF05 18 5 4 -93.00 -125.00 0.00 0.00 IGRF05 19 5 5 -26.00 11.00 0.00 0.00 IGRF05 20 6 0 62.00 0.00 0.00 0.00 IGRF05 21 6 1 60.00 -7.00 0.00 0.00 IGRF05 22 6 2 -11.00 86.00 0.00 0.00 IGRF05 23 6 3 -221.00 4.00 0.00 0.00 IGRF05 24 6 4 -57.00 -32.00 0.00 0.00 IGRF05 25 6 5 57.00 32.00 0.00 0.00 IGRF05 26 6 6 -92.00 -67.00 0.00 0.00 IGRF05 27 7 0 70.00 0.00 0.00 0.00 IGRF05 28 7 1 -54.00 -46.00 0.00 0.00 IGRF05 29 7 2 0.00 -14.00 0.00 0.00 IGRF05 30 7 3 33.00 -11.00 0.00 0.00 IGRF05 31 7 4 -41.00 0.00 0.00 0.00 IGRF05 32 7 5 -20.00 28.00 0.00 0.00 IGRF05 33 7 6 18.00 -12.00 0.00 0.00 IGRF05 34 7 7 6.00 -22.00 0.00 0.00 IGRF05 35 8 0 11.00 0.00 0.00 0.00 IGRF05 36 8 1 8.00 8.00 0.00 0.00 IGRF05 37 8 2 -4.00 -15.00 0.00 0.00 IGRF05 38 8 3 -9.00 7.00 0.00 0.00 IGRF05 39 8 4 1.00 -13.00 0.00 0.00 IGRF05 40 8 5 2.00 5.00 0.00 0.00 IGRF05 41 8 6 -8.00 16.00 0.00 0.00 IGRF05 42 8 7 5.00 -5.00 0.00 0.00 IGRF05 43 8 8 8.00 -18.00 0.00 0.00 IGRF05 44 9 0 8.00 0.00 0.00 0.00 IGRF05 45 9 1 10.00 -20.00 0.00 0.00 IGRF05 46 9 2 1.00 14.00 0.00 0.00 IGRF05 47 9 3 -11.00 5.00 0.00 0.00 IGRF05 48 9 4 12.00 -3.00 0.00 0.00 IGRF05 49 9 5 1.00 -2.00 0.00 0.00 IGRF05 50 9 6 -2.00 8.00 0.00 0.00 IGRF05 51 9 7 2.00 10.00 0.00 0.00 IGRF05 52 9 8 0.00 -2.00 0.00 0.00 IGRF05 53 9 9 -1.00 2.00 0.00 0.00 IGRF05 54 10 0 -3.00 0.00 0.00 0.00 IGRF05 55 10 1 -4.00 2.00 0.00 0.00 IGRF05 56 10 2 2.00 1.00 0.00 0.00 IGRF05 57 10 3 -5.00 2.00 0.00 0.00 IGRF05 58 10 4 -2.00 6.00 0.00 0.00 IGRF05 59 10 5 6.00 -4.00 0.00 0.00 IGRF05 60 10 6 4.00 0.00 0.00 0.00 IGRF05 61 10 7 0.00 -2.00 0.00 0.00 IGRF05 62 10 8 2.00 4.00 0.00 0.00 IGRF05 63 10 9 2.00 0.00 0.00 0.00 IGRF05 64 10 10 0.00 -6.00 0.00 0.00 IGRF05 65 IGRF10 1910.00 10 0 0 1910.00 1915.00 -1.0 600.0 IGRF10 0 1 0 -31354.00 0.00 0.00 0.00 IGRF10 1 1 1 -2297.00 5898.00 0.00 0.00 IGRF10 2 2 0 -769.00 0.00 0.00 0.00 IGRF10 3 2 1 2948.00 -1128.00 0.00 0.00 IGRF10 4 2 2 1176.00 1000.00 0.00 0.00 IGRF10 5 3 0 1058.00 0.00 0.00 0.00 IGRF10 6 3 1 -1524.00 -389.00 0.00 0.00 IGRF10 7 3 2 1223.00 62.00 0.00 0.00 IGRF10 8 3 3 705.00 425.00 0.00 0.00 IGRF10 9 4 0 884.00 0.00 0.00 0.00 IGRF10 10 4 1 660.00 211.00 0.00 0.00 IGRF10 11 4 2 644.00 -90.00 0.00 0.00 IGRF10 12 4 3 -400.00 -189.00 0.00 0.00 IGRF10 13 4 4 160.00 -55.00 0.00 0.00 IGRF10 14 5 0 -201.00 0.00 0.00 0.00 IGRF10 15 5 1 327.00 -172.00 0.00 0.00 IGRF10 16 5 2 253.00 57.00 0.00 0.00 IGRF10 17 5 3 -9.00 -33.00 0.00 0.00 IGRF10 18 5 4 -102.00 -126.00 0.00 0.00 IGRF10 19 5 5 -38.00 21.00 0.00 0.00 IGRF10 20 6 0 62.00 0.00 0.00 0.00 IGRF10 21 6 1 58.00 -5.00 0.00 0.00 IGRF10 22 6 2 -11.00 89.00 0.00 0.00 IGRF10 23 6 3 -224.00 5.00 0.00 0.00 IGRF10 24 6 4 -54.00 -29.00 0.00 0.00 IGRF10 25 6 5 54.00 28.00 0.00 0.00 IGRF10 26 6 6 -95.00 -65.00 0.00 0.00 IGRF10 27 7 0 71.00 0.00 0.00 0.00 IGRF10 28 7 1 -54.00 -47.00 0.00 0.00 IGRF10 29 7 2 1.00 -14.00 0.00 0.00 IGRF10 30 7 3 32.00 -12.00 0.00 0.00 IGRF10 31 7 4 -40.00 1.00 0.00 0.00 IGRF10 32 7 5 -19.00 28.00 0.00 0.00 IGRF10 33 7 6 18.00 -13.00 0.00 0.00 IGRF10 34 7 7 6.00 -22.00 0.00 0.00 IGRF10 35 8 0 11.00 0.00 0.00 0.00 IGRF10 36 8 1 8.00 8.00 0.00 0.00 IGRF10 37 8 2 -4.00 -15.00 0.00 0.00 IGRF10 38 8 3 -9.00 6.00 0.00 0.00 IGRF10 39 8 4 1.00 -13.00 0.00 0.00 IGRF10 40 8 5 2.00 5.00 0.00 0.00 IGRF10 41 8 6 -8.00 16.00 0.00 0.00 IGRF10 42 8 7 5.00 -5.00 0.00 0.00 IGRF10 43 8 8 8.00 -18.00 0.00 0.00 IGRF10 44 9 0 8.00 0.00 0.00 0.00 IGRF10 45 9 1 10.00 -20.00 0.00 0.00 IGRF10 46 9 2 1.00 14.00 0.00 0.00 IGRF10 47 9 3 -11.00 5.00 0.00 0.00 IGRF10 48 9 4 12.00 -3.00 0.00 0.00 IGRF10 49 9 5 1.00 -2.00 0.00 0.00 IGRF10 50 9 6 -2.00 8.00 0.00 0.00 IGRF10 51 9 7 2.00 10.00 0.00 0.00 IGRF10 52 9 8 0.00 -2.00 0.00 0.00 IGRF10 53 9 9 -1.00 2.00 0.00 0.00 IGRF10 54 10 0 -3.00 0.00 0.00 0.00 IGRF10 55 10 1 -4.00 2.00 0.00 0.00 IGRF10 56 10 2 2.00 1.00 0.00 0.00 IGRF10 57 10 3 -5.00 2.00 0.00 0.00 IGRF10 58 10 4 -2.00 6.00 0.00 0.00 IGRF10 59 10 5 6.00 -4.00 0.00 0.00 IGRF10 60 10 6 4.00 0.00 0.00 0.00 IGRF10 61 10 7 0.00 -2.00 0.00 0.00 IGRF10 62 10 8 2.00 4.00 0.00 0.00 IGRF10 63 10 9 2.00 0.00 0.00 0.00 IGRF10 64 10 10 0.00 -6.00 0.00 0.00 IGRF10 65 IGRF15 1915.00 10 0 0 1915.00 1920.00 -1.0 600.0 IGRF15 0 1 0 -31212.00 0.00 0.00 0.00 IGRF15 1 1 1 -2306.00 5875.00 0.00 0.00 IGRF15 2 2 0 -802.00 0.00 0.00 0.00 IGRF15 3 2 1 2956.00 -1191.00 0.00 0.00 IGRF15 4 2 2 1309.00 917.00 0.00 0.00 IGRF15 5 3 0 1084.00 0.00 0.00 0.00 IGRF15 6 3 1 -1559.00 -421.00 0.00 0.00 IGRF15 7 3 2 1212.00 84.00 0.00 0.00 IGRF15 8 3 3 778.00 360.00 0.00 0.00 IGRF15 9 4 0 887.00 0.00 0.00 0.00 IGRF15 10 4 1 678.00 218.00 0.00 0.00 IGRF15 11 4 2 631.00 -109.00 0.00 0.00 IGRF15 12 4 3 -416.00 -173.00 0.00 0.00 IGRF15 13 4 4 178.00 -51.00 0.00 0.00 IGRF15 14 5 0 -211.00 0.00 0.00 0.00 IGRF15 15 5 1 327.00 -148.00 0.00 0.00 IGRF15 16 5 2 245.00 58.00 0.00 0.00 IGRF15 17 5 3 -16.00 -34.00 0.00 0.00 IGRF15 18 5 4 -111.00 -126.00 0.00 0.00 IGRF15 19 5 5 -51.00 32.00 0.00 0.00 IGRF15 20 6 0 61.00 0.00 0.00 0.00 IGRF15 21 6 1 57.00 -2.00 0.00 0.00 IGRF15 22 6 2 -10.00 93.00 0.00 0.00 IGRF15 23 6 3 -228.00 8.00 0.00 0.00 IGRF15 24 6 4 -51.00 -26.00 0.00 0.00 IGRF15 25 6 5 49.00 23.00 0.00 0.00 IGRF15 26 6 6 -98.00 -62.00 0.00 0.00 IGRF15 27 7 0 72.00 0.00 0.00 0.00 IGRF15 28 7 1 -54.00 -48.00 0.00 0.00 IGRF15 29 7 2 2.00 -14.00 0.00 0.00 IGRF15 30 7 3 31.00 -12.00 0.00 0.00 IGRF15 31 7 4 -38.00 2.00 0.00 0.00 IGRF15 32 7 5 -18.00 28.00 0.00 0.00 IGRF15 33 7 6 19.00 -15.00 0.00 0.00 IGRF15 34 7 7 6.00 -22.00 0.00 0.00 IGRF15 35 8 0 11.00 0.00 0.00 0.00 IGRF15 36 8 1 8.00 8.00 0.00 0.00 IGRF15 37 8 2 -4.00 -15.00 0.00 0.00 IGRF15 38 8 3 -9.00 6.00 0.00 0.00 IGRF15 39 8 4 2.00 -13.00 0.00 0.00 IGRF15 40 8 5 3.00 5.00 0.00 0.00 IGRF15 41 8 6 -8.00 16.00 0.00 0.00 IGRF15 42 8 7 6.00 -5.00 0.00 0.00 IGRF15 43 8 8 8.00 -18.00 0.00 0.00 IGRF15 44 9 0 8.00 0.00 0.00 0.00 IGRF15 45 9 1 10.00 -20.00 0.00 0.00 IGRF15 46 9 2 1.00 14.00 0.00 0.00 IGRF15 47 9 3 -11.00 5.00 0.00 0.00 IGRF15 48 9 4 12.00 -3.00 0.00 0.00 IGRF15 49 9 5 1.00 -2.00 0.00 0.00 IGRF15 50 9 6 -2.00 8.00 0.00 0.00 IGRF15 51 9 7 2.00 10.00 0.00 0.00 IGRF15 52 9 8 0.00 -2.00 0.00 0.00 IGRF15 53 9 9 -1.00 2.00 0.00 0.00 IGRF15 54 10 0 -3.00 0.00 0.00 0.00 IGRF15 55 10 1 -4.00 2.00 0.00 0.00 IGRF15 56 10 2 2.00 1.00 0.00 0.00 IGRF15 57 10 3 -5.00 2.00 0.00 0.00 IGRF15 58 10 4 -2.00 6.00 0.00 0.00 IGRF15 59 10 5 6.00 -4.00 0.00 0.00 IGRF15 60 10 6 4.00 0.00 0.00 0.00 IGRF15 61 10 7 0.00 -2.00 0.00 0.00 IGRF15 62 10 8 1.00 4.00 0.00 0.00 IGRF15 63 10 9 2.00 0.00 0.00 0.00 IGRF15 64 10 10 0.00 -6.00 0.00 0.00 IGRF15 65 IGRF20 1920.00 10 0 0 1920.00 1925.00 -1.0 600.0 IGRF20 0 1 0 -31060.00 0.00 0.00 0.00 IGRF20 1 1 1 -2317.00 5845.00 0.00 0.00 IGRF20 2 2 0 -839.00 0.00 0.00 0.00 IGRF20 3 2 1 2959.00 -1259.00 0.00 0.00 IGRF20 4 2 2 1407.00 823.00 0.00 0.00 IGRF20 5 3 0 1111.00 0.00 0.00 0.00 IGRF20 6 3 1 -1600.00 -445.00 0.00 0.00 IGRF20 7 3 2 1205.00 103.00 0.00 0.00 IGRF20 8 3 3 839.00 293.00 0.00 0.00 IGRF20 9 4 0 889.00 0.00 0.00 0.00 IGRF20 10 4 1 695.00 220.00 0.00 0.00 IGRF20 11 4 2 616.00 -134.00 0.00 0.00 IGRF20 12 4 3 -424.00 -153.00 0.00 0.00 IGRF20 13 4 4 199.00 -57.00 0.00 0.00 IGRF20 14 5 0 -221.00 0.00 0.00 0.00 IGRF20 15 5 1 326.00 -122.00 0.00 0.00 IGRF20 16 5 2 236.00 58.00 0.00 0.00 IGRF20 17 5 3 -23.00 -38.00 0.00 0.00 IGRF20 18 5 4 -119.00 -125.00 0.00 0.00 IGRF20 19 5 5 -62.00 43.00 0.00 0.00 IGRF20 20 6 0 61.00 0.00 0.00 0.00 IGRF20 21 6 1 55.00 0.00 0.00 0.00 IGRF20 22 6 2 -10.00 96.00 0.00 0.00 IGRF20 23 6 3 -233.00 11.00 0.00 0.00 IGRF20 24 6 4 -46.00 -22.00 0.00 0.00 IGRF20 25 6 5 44.00 18.00 0.00 0.00 IGRF20 26 6 6 -101.00 -57.00 0.00 0.00 IGRF20 27 7 0 73.00 0.00 0.00 0.00 IGRF20 28 7 1 -54.00 -49.00 0.00 0.00 IGRF20 29 7 2 2.00 -14.00 0.00 0.00 IGRF20 30 7 3 29.00 -13.00 0.00 0.00 IGRF20 31 7 4 -37.00 4.00 0.00 0.00 IGRF20 32 7 5 -16.00 28.00 0.00 0.00 IGRF20 33 7 6 19.00 -16.00 0.00 0.00 IGRF20 34 7 7 6.00 -22.00 0.00 0.00 IGRF20 35 8 0 11.00 0.00 0.00 0.00 IGRF20 36 8 1 7.00 8.00 0.00 0.00 IGRF20 37 8 2 -3.00 -15.00 0.00 0.00 IGRF20 38 8 3 -9.00 6.00 0.00 0.00 IGRF20 39 8 4 2.00 -14.00 0.00 0.00 IGRF20 40 8 5 4.00 5.00 0.00 0.00 IGRF20 41 8 6 -7.00 17.00 0.00 0.00 IGRF20 42 8 7 6.00 -5.00 0.00 0.00 IGRF20 43 8 8 8.00 -19.00 0.00 0.00 IGRF20 44 9 0 8.00 0.00 0.00 0.00 IGRF20 45 9 1 10.00 -20.00 0.00 0.00 IGRF20 46 9 2 1.00 14.00 0.00 0.00 IGRF20 47 9 3 -11.00 5.00 0.00 0.00 IGRF20 48 9 4 12.00 -3.00 0.00 0.00 IGRF20 49 9 5 1.00 -2.00 0.00 0.00 IGRF20 50 9 6 -2.00 9.00 0.00 0.00 IGRF20 51 9 7 2.00 10.00 0.00 0.00 IGRF20 52 9 8 0.00 -2.00 0.00 0.00 IGRF20 53 9 9 -1.00 2.00 0.00 0.00 IGRF20 54 10 0 -3.00 0.00 0.00 0.00 IGRF20 55 10 1 -4.00 2.00 0.00 0.00 IGRF20 56 10 2 2.00 1.00 0.00 0.00 IGRF20 57 10 3 -5.00 2.00 0.00 0.00 IGRF20 58 10 4 -2.00 6.00 0.00 0.00 IGRF20 59 10 5 6.00 -4.00 0.00 0.00 IGRF20 60 10 6 4.00 0.00 0.00 0.00 IGRF20 61 10 7 0.00 -2.00 0.00 0.00 IGRF20 62 10 8 1.00 4.00 0.00 0.00 IGRF20 63 10 9 3.00 0.00 0.00 0.00 IGRF20 64 10 10 0.00 -6.00 0.00 0.00 IGRF20 65 IGRF25 1925.00 10 0 0 1925.00 1930.00 -1.0 600.0 IGRF25 0 1 0 -30926.00 0.00 0.00 0.00 IGRF25 1 1 1 -2318.00 5817.00 0.00 0.00 IGRF25 2 2 0 -893.00 0.00 0.00 0.00 IGRF25 3 2 1 2969.00 -1334.00 0.00 0.00 IGRF25 4 2 2 1471.00 728.00 0.00 0.00 IGRF25 5 3 0 1140.00 0.00 0.00 0.00 IGRF25 6 3 1 -1645.00 -462.00 0.00 0.00 IGRF25 7 3 2 1202.00 119.00 0.00 0.00 IGRF25 8 3 3 881.00 229.00 0.00 0.00 IGRF25 9 4 0 891.00 0.00 0.00 0.00 IGRF25 10 4 1 711.00 216.00 0.00 0.00 IGRF25 11 4 2 601.00 -163.00 0.00 0.00 IGRF25 12 4 3 -426.00 -130.00 0.00 0.00 IGRF25 13 4 4 217.00 -70.00 0.00 0.00 IGRF25 14 5 0 -230.00 0.00 0.00 0.00 IGRF25 15 5 1 326.00 -96.00 0.00 0.00 IGRF25 16 5 2 226.00 58.00 0.00 0.00 IGRF25 17 5 3 -28.00 -44.00 0.00 0.00 IGRF25 18 5 4 -125.00 -122.00 0.00 0.00 IGRF25 19 5 5 -69.00 51.00 0.00 0.00 IGRF25 20 6 0 61.00 0.00 0.00 0.00 IGRF25 21 6 1 54.00 3.00 0.00 0.00 IGRF25 22 6 2 -9.00 99.00 0.00 0.00 IGRF25 23 6 3 -238.00 14.00 0.00 0.00 IGRF25 24 6 4 -40.00 -18.00 0.00 0.00 IGRF25 25 6 5 39.00 13.00 0.00 0.00 IGRF25 26 6 6 -103.00 -52.00 0.00 0.00 IGRF25 27 7 0 73.00 0.00 0.00 0.00 IGRF25 28 7 1 -54.00 -50.00 0.00 0.00 IGRF25 29 7 2 3.00 -14.00 0.00 0.00 IGRF25 30 7 3 27.00 -14.00 0.00 0.00 IGRF25 31 7 4 -35.00 5.00 0.00 0.00 IGRF25 32 7 5 -14.00 29.00 0.00 0.00 IGRF25 33 7 6 19.00 -17.00 0.00 0.00 IGRF25 34 7 7 6.00 -21.00 0.00 0.00 IGRF25 35 8 0 11.00 0.00 0.00 0.00 IGRF25 36 8 1 7.00 8.00 0.00 0.00 IGRF25 37 8 2 -3.00 -15.00 0.00 0.00 IGRF25 38 8 3 -9.00 6.00 0.00 0.00 IGRF25 39 8 4 2.00 -14.00 0.00 0.00 IGRF25 40 8 5 4.00 5.00 0.00 0.00 IGRF25 41 8 6 -7.00 17.00 0.00 0.00 IGRF25 42 8 7 7.00 -5.00 0.00 0.00 IGRF25 43 8 8 8.00 -19.00 0.00 0.00 IGRF25 44 9 0 8.00 0.00 0.00 0.00 IGRF25 45 9 1 10.00 -20.00 0.00 0.00 IGRF25 46 9 2 1.00 14.00 0.00 0.00 IGRF25 47 9 3 -11.00 5.00 0.00 0.00 IGRF25 48 9 4 12.00 -3.00 0.00 0.00 IGRF25 49 9 5 1.00 -2.00 0.00 0.00 IGRF25 50 9 6 -2.00 9.00 0.00 0.00 IGRF25 51 9 7 2.00 10.00 0.00 0.00 IGRF25 52 9 8 0.00 -2.00 0.00 0.00 IGRF25 53 9 9 -1.00 2.00 0.00 0.00 IGRF25 54 10 0 -3.00 0.00 0.00 0.00 IGRF25 55 10 1 -4.00 2.00 0.00 0.00 IGRF25 56 10 2 2.00 1.00 0.00 0.00 IGRF25 57 10 3 -5.00 2.00 0.00 0.00 IGRF25 58 10 4 -2.00 6.00 0.00 0.00 IGRF25 59 10 5 6.00 -4.00 0.00 0.00 IGRF25 60 10 6 4.00 0.00 0.00 0.00 IGRF25 61 10 7 0.00 -2.00 0.00 0.00 IGRF25 62 10 8 1.00 4.00 0.00 0.00 IGRF25 63 10 9 3.00 0.00 0.00 0.00 IGRF25 64 10 10 0.00 -6.00 0.00 0.00 IGRF25 65 IGRF30 1930.00 10 0 0 1930.00 1935.00 -1.0 600.0 IGRF30 0 1 0 -30805.00 0.00 0.00 0.00 IGRF30 1 1 1 -2316.00 5808.00 0.00 0.00 IGRF30 2 2 0 -951.00 0.00 0.00 0.00 IGRF30 3 2 1 2980.00 -1424.00 0.00 0.00 IGRF30 4 2 2 1517.00 644.00 0.00 0.00 IGRF30 5 3 0 1172.00 0.00 0.00 0.00 IGRF30 6 3 1 -1692.00 -480.00 0.00 0.00 IGRF30 7 3 2 1205.00 133.00 0.00 0.00 IGRF30 8 3 3 907.00 166.00 0.00 0.00 IGRF30 9 4 0 896.00 0.00 0.00 0.00 IGRF30 10 4 1 727.00 205.00 0.00 0.00 IGRF30 11 4 2 584.00 -195.00 0.00 0.00 IGRF30 12 4 3 -422.00 -109.00 0.00 0.00 IGRF30 13 4 4 234.00 -90.00 0.00 0.00 IGRF30 14 5 0 -237.00 0.00 0.00 0.00 IGRF30 15 5 1 327.00 -72.00 0.00 0.00 IGRF30 16 5 2 218.00 60.00 0.00 0.00 IGRF30 17 5 3 -32.00 -53.00 0.00 0.00 IGRF30 18 5 4 -131.00 -118.00 0.00 0.00 IGRF30 19 5 5 -74.00 58.00 0.00 0.00 IGRF30 20 6 0 60.00 0.00 0.00 0.00 IGRF30 21 6 1 53.00 4.00 0.00 0.00 IGRF30 22 6 2 -9.00 102.00 0.00 0.00 IGRF30 23 6 3 -242.00 19.00 0.00 0.00 IGRF30 24 6 4 -32.00 -16.00 0.00 0.00 IGRF30 25 6 5 32.00 8.00 0.00 0.00 IGRF30 26 6 6 -104.00 -46.00 0.00 0.00 IGRF30 27 7 0 74.00 0.00 0.00 0.00 IGRF30 28 7 1 -54.00 -51.00 0.00 0.00 IGRF30 29 7 2 4.00 -15.00 0.00 0.00 IGRF30 30 7 3 25.00 -14.00 0.00 0.00 IGRF30 31 7 4 -34.00 6.00 0.00 0.00 IGRF30 32 7 5 -12.00 29.00 0.00 0.00 IGRF30 33 7 6 18.00 -18.00 0.00 0.00 IGRF30 34 7 7 6.00 -20.00 0.00 0.00 IGRF30 35 8 0 11.00 0.00 0.00 0.00 IGRF30 36 8 1 7.00 8.00 0.00 0.00 IGRF30 37 8 2 -3.00 -15.00 0.00 0.00 IGRF30 38 8 3 -9.00 5.00 0.00 0.00 IGRF30 39 8 4 2.00 -14.00 0.00 0.00 IGRF30 40 8 5 5.00 5.00 0.00 0.00 IGRF30 41 8 6 -6.00 18.00 0.00 0.00 IGRF30 42 8 7 8.00 -5.00 0.00 0.00 IGRF30 43 8 8 8.00 -19.00 0.00 0.00 IGRF30 44 9 0 8.00 0.00 0.00 0.00 IGRF30 45 9 1 10.00 -20.00 0.00 0.00 IGRF30 46 9 2 1.00 14.00 0.00 0.00 IGRF30 47 9 3 -12.00 5.00 0.00 0.00 IGRF30 48 9 4 12.00 -3.00 0.00 0.00 IGRF30 49 9 5 1.00 -2.00 0.00 0.00 IGRF30 50 9 6 -2.00 9.00 0.00 0.00 IGRF30 51 9 7 3.00 10.00 0.00 0.00 IGRF30 52 9 8 0.00 -2.00 0.00 0.00 IGRF30 53 9 9 -2.00 2.00 0.00 0.00 IGRF30 54 10 0 -3.00 0.00 0.00 0.00 IGRF30 55 10 1 -4.00 2.00 0.00 0.00 IGRF30 56 10 2 2.00 1.00 0.00 0.00 IGRF30 57 10 3 -5.00 2.00 0.00 0.00 IGRF30 58 10 4 -2.00 6.00 0.00 0.00 IGRF30 59 10 5 6.00 -4.00 0.00 0.00 IGRF30 60 10 6 4.00 0.00 0.00 0.00 IGRF30 61 10 7 0.00 -2.00 0.00 0.00 IGRF30 62 10 8 1.00 4.00 0.00 0.00 IGRF30 63 10 9 3.00 0.00 0.00 0.00 IGRF30 64 10 10 0.00 -6.00 0.00 0.00 IGRF30 65 IGRF35 1935.00 10 0 0 1935.00 1940.00 -1.0 600.0 IGRF35 0 1 0 -30715.00 0.00 0.00 0.00 IGRF35 1 1 1 -2306.00 5812.00 0.00 0.00 IGRF35 2 2 0 -1018.00 0.00 0.00 0.00 IGRF35 3 2 1 2984.00 -1520.00 0.00 0.00 IGRF35 4 2 2 1550.00 586.00 0.00 0.00 IGRF35 5 3 0 1206.00 0.00 0.00 0.00 IGRF35 6 3 1 -1740.00 -494.00 0.00 0.00 IGRF35 7 3 2 1215.00 146.00 0.00 0.00 IGRF35 8 3 3 918.00 101.00 0.00 0.00 IGRF35 9 4 0 903.00 0.00 0.00 0.00 IGRF35 10 4 1 744.00 188.00 0.00 0.00 IGRF35 11 4 2 565.00 -226.00 0.00 0.00 IGRF35 12 4 3 -415.00 -90.00 0.00 0.00 IGRF35 13 4 4 249.00 -114.00 0.00 0.00 IGRF35 14 5 0 -241.00 0.00 0.00 0.00 IGRF35 15 5 1 329.00 -51.00 0.00 0.00 IGRF35 16 5 2 211.00 64.00 0.00 0.00 IGRF35 17 5 3 -33.00 -64.00 0.00 0.00 IGRF35 18 5 4 -136.00 -115.00 0.00 0.00 IGRF35 19 5 5 -76.00 64.00 0.00 0.00 IGRF35 20 6 0 59.00 0.00 0.00 0.00 IGRF35 21 6 1 53.00 4.00 0.00 0.00 IGRF35 22 6 2 -8.00 104.00 0.00 0.00 IGRF35 23 6 3 -246.00 25.00 0.00 0.00 IGRF35 24 6 4 -25.00 -15.00 0.00 0.00 IGRF35 25 6 5 25.00 4.00 0.00 0.00 IGRF35 26 6 6 -106.00 -40.00 0.00 0.00 IGRF35 27 7 0 74.00 0.00 0.00 0.00 IGRF35 28 7 1 -53.00 -52.00 0.00 0.00 IGRF35 29 7 2 4.00 -17.00 0.00 0.00 IGRF35 30 7 3 23.00 -14.00 0.00 0.00 IGRF35 31 7 4 -33.00 7.00 0.00 0.00 IGRF35 32 7 5 -11.00 29.00 0.00 0.00 IGRF35 33 7 6 18.00 -19.00 0.00 0.00 IGRF35 34 7 7 6.00 -19.00 0.00 0.00 IGRF35 35 8 0 11.00 0.00 0.00 0.00 IGRF35 36 8 1 7.00 8.00 0.00 0.00 IGRF35 37 8 2 -3.00 -15.00 0.00 0.00 IGRF35 38 8 3 -9.00 5.00 0.00 0.00 IGRF35 39 8 4 1.00 -15.00 0.00 0.00 IGRF35 40 8 5 6.00 5.00 0.00 0.00 IGRF35 41 8 6 -6.00 18.00 0.00 0.00 IGRF35 42 8 7 8.00 -5.00 0.00 0.00 IGRF35 43 8 8 7.00 -19.00 0.00 0.00 IGRF35 44 9 0 8.00 0.00 0.00 0.00 IGRF35 45 9 1 10.00 -20.00 0.00 0.00 IGRF35 46 9 2 1.00 15.00 0.00 0.00 IGRF35 47 9 3 -12.00 5.00 0.00 0.00 IGRF35 48 9 4 11.00 -3.00 0.00 0.00 IGRF35 49 9 5 1.00 -3.00 0.00 0.00 IGRF35 50 9 6 -2.00 9.00 0.00 0.00 IGRF35 51 9 7 3.00 11.00 0.00 0.00 IGRF35 52 9 8 0.00 -2.00 0.00 0.00 IGRF35 53 9 9 -2.00 2.00 0.00 0.00 IGRF35 54 10 0 -3.00 0.00 0.00 0.00 IGRF35 55 10 1 -4.00 2.00 0.00 0.00 IGRF35 56 10 2 2.00 1.00 0.00 0.00 IGRF35 57 10 3 -5.00 2.00 0.00 0.00 IGRF35 58 10 4 -2.00 6.00 0.00 0.00 IGRF35 59 10 5 6.00 -4.00 0.00 0.00 IGRF35 60 10 6 4.00 0.00 0.00 0.00 IGRF35 61 10 7 0.00 -1.00 0.00 0.00 IGRF35 62 10 8 2.00 4.00 0.00 0.00 IGRF35 63 10 9 3.00 0.00 0.00 0.00 IGRF35 64 10 10 0.00 -6.00 0.00 0.00 IGRF35 65 IGRF40 1940.00 10 0 0 1940.00 1945.00 -1.0 600.0 IGRF40 0 1 0 -30654.00 0.00 0.00 0.00 IGRF40 1 1 1 -2292.00 5821.00 0.00 0.00 IGRF40 2 2 0 -1106.00 0.00 0.00 0.00 IGRF40 3 2 1 2981.00 -1614.00 0.00 0.00 IGRF40 4 2 2 1566.00 528.00 0.00 0.00 IGRF40 5 3 0 1240.00 0.00 0.00 0.00 IGRF40 6 3 1 -1790.00 -499.00 0.00 0.00 IGRF40 7 3 2 1232.00 163.00 0.00 0.00 IGRF40 8 3 3 916.00 43.00 0.00 0.00 IGRF40 9 4 0 914.00 0.00 0.00 0.00 IGRF40 10 4 1 762.00 169.00 0.00 0.00 IGRF40 11 4 2 550.00 -252.00 0.00 0.00 IGRF40 12 4 3 -405.00 -72.00 0.00 0.00 IGRF40 13 4 4 265.00 -141.00 0.00 0.00 IGRF40 14 5 0 -241.00 0.00 0.00 0.00 IGRF40 15 5 1 334.00 -33.00 0.00 0.00 IGRF40 16 5 2 208.00 71.00 0.00 0.00 IGRF40 17 5 3 -33.00 -75.00 0.00 0.00 IGRF40 18 5 4 -141.00 -113.00 0.00 0.00 IGRF40 19 5 5 -76.00 69.00 0.00 0.00 IGRF40 20 6 0 57.00 0.00 0.00 0.00 IGRF40 21 6 1 54.00 4.00 0.00 0.00 IGRF40 22 6 2 -7.00 105.00 0.00 0.00 IGRF40 23 6 3 -249.00 33.00 0.00 0.00 IGRF40 24 6 4 -18.00 -15.00 0.00 0.00 IGRF40 25 6 5 18.00 0.00 0.00 0.00 IGRF40 26 6 6 -107.00 -33.00 0.00 0.00 IGRF40 27 7 0 74.00 0.00 0.00 0.00 IGRF40 28 7 1 -53.00 -52.00 0.00 0.00 IGRF40 29 7 2 4.00 -18.00 0.00 0.00 IGRF40 30 7 3 20.00 -14.00 0.00 0.00 IGRF40 31 7 4 -31.00 7.00 0.00 0.00 IGRF40 32 7 5 -9.00 29.00 0.00 0.00 IGRF40 33 7 6 17.00 -20.00 0.00 0.00 IGRF40 34 7 7 5.00 -19.00 0.00 0.00 IGRF40 35 8 0 11.00 0.00 0.00 0.00 IGRF40 36 8 1 7.00 8.00 0.00 0.00 IGRF40 37 8 2 -3.00 -14.00 0.00 0.00 IGRF40 38 8 3 -10.00 5.00 0.00 0.00 IGRF40 39 8 4 1.00 -15.00 0.00 0.00 IGRF40 40 8 5 6.00 5.00 0.00 0.00 IGRF40 41 8 6 -5.00 19.00 0.00 0.00 IGRF40 42 8 7 9.00 -5.00 0.00 0.00 IGRF40 43 8 8 7.00 -19.00 0.00 0.00 IGRF40 44 9 0 8.00 0.00 0.00 0.00 IGRF40 45 9 1 10.00 -21.00 0.00 0.00 IGRF40 46 9 2 1.00 15.00 0.00 0.00 IGRF40 47 9 3 -12.00 5.00 0.00 0.00 IGRF40 48 9 4 11.00 -3.00 0.00 0.00 IGRF40 49 9 5 1.00 -3.00 0.00 0.00 IGRF40 50 9 6 -2.00 9.00 0.00 0.00 IGRF40 51 9 7 3.00 11.00 0.00 0.00 IGRF40 52 9 8 1.00 -2.00 0.00 0.00 IGRF40 53 9 9 -2.00 2.00 0.00 0.00 IGRF40 54 10 0 -3.00 0.00 0.00 0.00 IGRF40 55 10 1 -4.00 2.00 0.00 0.00 IGRF40 56 10 2 2.00 1.00 0.00 0.00 IGRF40 57 10 3 -5.00 2.00 0.00 0.00 IGRF40 58 10 4 -2.00 6.00 0.00 0.00 IGRF40 59 10 5 6.00 -4.00 0.00 0.00 IGRF40 60 10 6 4.00 0.00 0.00 0.00 IGRF40 61 10 7 0.00 -1.00 0.00 0.00 IGRF40 62 10 8 2.00 4.00 0.00 0.00 IGRF40 63 10 9 3.00 0.00 0.00 0.00 IGRF40 64 10 10 0.00 -6.00 0.00 0.00 IGRF40 65 DGRF45 1945.00 10 0 0 1945.00 1950.00 -1.0 600.0 DGRF45 0 1 0 -30594.00 0.00 0.00 0.00 DGRF45 1 1 1 -2285.00 5810.00 0.00 0.00 DGRF45 2 2 0 -1244.00 0.00 0.00 0.00 DGRF45 3 2 1 2990.00 -1702.00 0.00 0.00 DGRF45 4 2 2 1578.00 477.00 0.00 0.00 DGRF45 5 3 0 1282.00 0.00 0.00 0.00 DGRF45 6 3 1 -1834.00 -499.00 0.00 0.00 DGRF45 7 3 2 1255.00 186.00 0.00 0.00 DGRF45 8 3 3 913.00 -11.00 0.00 0.00 DGRF45 9 4 0 944.00 0.00 0.00 0.00 DGRF45 10 4 1 776.00 144.00 0.00 0.00 DGRF45 11 4 2 544.00 -276.00 0.00 0.00 DGRF45 12 4 3 -421.00 -55.00 0.00 0.00 DGRF45 13 4 4 304.00 -178.00 0.00 0.00 DGRF45 14 5 0 -253.00 0.00 0.00 0.00 DGRF45 15 5 1 346.00 -12.00 0.00 0.00 DGRF45 16 5 2 194.00 95.00 0.00 0.00 DGRF45 17 5 3 -20.00 -67.00 0.00 0.00 DGRF45 18 5 4 -142.00 -119.00 0.00 0.00 DGRF45 19 5 5 -82.00 82.00 0.00 0.00 DGRF45 20 6 0 59.00 0.00 0.00 0.00 DGRF45 21 6 1 57.00 6.00 0.00 0.00 DGRF45 22 6 2 6.00 100.00 0.00 0.00 DGRF45 23 6 3 -246.00 16.00 0.00 0.00 DGRF45 24 6 4 -25.00 -9.00 0.00 0.00 DGRF45 25 6 5 21.00 -16.00 0.00 0.00 DGRF45 26 6 6 -104.00 -39.00 0.00 0.00 DGRF45 27 7 0 70.00 0.00 0.00 0.00 DGRF45 28 7 1 -40.00 -45.00 0.00 0.00 DGRF45 29 7 2 0.00 -18.00 0.00 0.00 DGRF45 30 7 3 0.00 2.00 0.00 0.00 DGRF45 31 7 4 -29.00 6.00 0.00 0.00 DGRF45 32 7 5 -10.00 28.00 0.00 0.00 DGRF45 33 7 6 15.00 -17.00 0.00 0.00 DGRF45 34 7 7 29.00 -22.00 0.00 0.00 DGRF45 35 8 0 13.00 0.00 0.00 0.00 DGRF45 36 8 1 7.00 12.00 0.00 0.00 DGRF45 37 8 2 -8.00 -21.00 0.00 0.00 DGRF45 38 8 3 -5.00 -12.00 0.00 0.00 DGRF45 39 8 4 9.00 -7.00 0.00 0.00 DGRF45 40 8 5 7.00 2.00 0.00 0.00 DGRF45 41 8 6 -10.00 18.00 0.00 0.00 DGRF45 42 8 7 7.00 3.00 0.00 0.00 DGRF45 43 8 8 2.00 -11.00 0.00 0.00 DGRF45 44 9 0 5.00 0.00 0.00 0.00 DGRF45 45 9 1 -21.00 -27.00 0.00 0.00 DGRF45 46 9 2 1.00 17.00 0.00 0.00 DGRF45 47 9 3 -11.00 29.00 0.00 0.00 DGRF45 48 9 4 3.00 -9.00 0.00 0.00 DGRF45 49 9 5 16.00 4.00 0.00 0.00 DGRF45 50 9 6 -3.00 9.00 0.00 0.00 DGRF45 51 9 7 -4.00 6.00 0.00 0.00 DGRF45 52 9 8 -3.00 1.00 0.00 0.00 DGRF45 53 9 9 -4.00 8.00 0.00 0.00 DGRF45 54 10 0 -3.00 0.00 0.00 0.00 DGRF45 55 10 1 11.00 5.00 0.00 0.00 DGRF45 56 10 2 1.00 1.00 0.00 0.00 DGRF45 57 10 3 2.00 -20.00 0.00 0.00 DGRF45 58 10 4 -5.00 -1.00 0.00 0.00 DGRF45 59 10 5 -1.00 -6.00 0.00 0.00 DGRF45 60 10 6 8.00 6.00 0.00 0.00 DGRF45 61 10 7 -1.00 -4.00 0.00 0.00 DGRF45 62 10 8 -3.00 -2.00 0.00 0.00 DGRF45 63 10 9 5.00 0.00 0.00 0.00 DGRF45 64 10 10 -2.00 -2.00 0.00 0.00 DGRF45 65 DGRF50 1950.00 10 0 0 1950.00 1955.00 -1.0 600.0 DGRF50 0 1 0 -30554.00 0.00 0.00 0.00 DGRF50 1 1 1 -2250.00 5815.00 0.00 0.00 DGRF50 2 2 0 -1341.00 0.00 0.00 0.00 DGRF50 3 2 1 2998.00 -1810.00 0.00 0.00 DGRF50 4 2 2 1576.00 381.00 0.00 0.00 DGRF50 5 3 0 1297.00 0.00 0.00 0.00 DGRF50 6 3 1 -1889.00 -476.00 0.00 0.00 DGRF50 7 3 2 1274.00 206.00 0.00 0.00 DGRF50 8 3 3 896.00 -46.00 0.00 0.00 DGRF50 9 4 0 954.00 0.00 0.00 0.00 DGRF50 10 4 1 792.00 136.00 0.00 0.00 DGRF50 11 4 2 528.00 -278.00 0.00 0.00 DGRF50 12 4 3 -408.00 -37.00 0.00 0.00 DGRF50 13 4 4 303.00 -210.00 0.00 0.00 DGRF50 14 5 0 -240.00 0.00 0.00 0.00 DGRF50 15 5 1 349.00 3.00 0.00 0.00 DGRF50 16 5 2 211.00 103.00 0.00 0.00 DGRF50 17 5 3 -20.00 -87.00 0.00 0.00 DGRF50 18 5 4 -147.00 -122.00 0.00 0.00 DGRF50 19 5 5 -76.00 80.00 0.00 0.00 DGRF50 20 6 0 54.00 0.00 0.00 0.00 DGRF50 21 6 1 57.00 -1.00 0.00 0.00 DGRF50 22 6 2 4.00 99.00 0.00 0.00 DGRF50 23 6 3 -247.00 33.00 0.00 0.00 DGRF50 24 6 4 -16.00 -12.00 0.00 0.00 DGRF50 25 6 5 12.00 -12.00 0.00 0.00 DGRF50 26 6 6 -105.00 -30.00 0.00 0.00 DGRF50 27 7 0 65.00 0.00 0.00 0.00 DGRF50 28 7 1 -55.00 -35.00 0.00 0.00 DGRF50 29 7 2 2.00 -17.00 0.00 0.00 DGRF50 30 7 3 1.00 0.00 0.00 0.00 DGRF50 31 7 4 -40.00 10.00 0.00 0.00 DGRF50 32 7 5 -7.00 36.00 0.00 0.00 DGRF50 33 7 6 5.00 -18.00 0.00 0.00 DGRF50 34 7 7 19.00 -16.00 0.00 0.00 DGRF50 35 8 0 22.00 0.00 0.00 0.00 DGRF50 36 8 1 15.00 5.00 0.00 0.00 DGRF50 37 8 2 -4.00 -22.00 0.00 0.00 DGRF50 38 8 3 -1.00 0.00 0.00 0.00 DGRF50 39 8 4 11.00 -21.00 0.00 0.00 DGRF50 40 8 5 15.00 -8.00 0.00 0.00 DGRF50 41 8 6 -13.00 17.00 0.00 0.00 DGRF50 42 8 7 5.00 -4.00 0.00 0.00 DGRF50 43 8 8 -1.00 -17.00 0.00 0.00 DGRF50 44 9 0 3.00 0.00 0.00 0.00 DGRF50 45 9 1 -7.00 -24.00 0.00 0.00 DGRF50 46 9 2 -1.00 19.00 0.00 0.00 DGRF50 47 9 3 -25.00 12.00 0.00 0.00 DGRF50 48 9 4 10.00 2.00 0.00 0.00 DGRF50 49 9 5 5.00 2.00 0.00 0.00 DGRF50 50 9 6 -5.00 8.00 0.00 0.00 DGRF50 51 9 7 -2.00 8.00 0.00 0.00 DGRF50 52 9 8 3.00 -11.00 0.00 0.00 DGRF50 53 9 9 8.00 -7.00 0.00 0.00 DGRF50 54 10 0 -8.00 0.00 0.00 0.00 DGRF50 55 10 1 4.00 13.00 0.00 0.00 DGRF50 56 10 2 -1.00 -2.00 0.00 0.00 DGRF50 57 10 3 13.00 -10.00 0.00 0.00 DGRF50 58 10 4 -4.00 2.00 0.00 0.00 DGRF50 59 10 5 4.00 -3.00 0.00 0.00 DGRF50 60 10 6 12.00 6.00 0.00 0.00 DGRF50 61 10 7 3.00 -3.00 0.00 0.00 DGRF50 62 10 8 2.00 6.00 0.00 0.00 DGRF50 63 10 9 10.00 11.00 0.00 0.00 DGRF50 64 10 10 3.00 8.00 0.00 0.00 DGRF50 65 DGRF55 1955.00 10 0 0 1955.00 1960.00 -1.0 600.0 DGRF55 0 1 0 -30500.00 0.00 0.00 0.00 DGRF55 1 1 1 -2215.00 5820.00 0.00 0.00 DGRF55 2 2 0 -1440.00 0.00 0.00 0.00 DGRF55 3 2 1 3003.00 -1898.00 0.00 0.00 DGRF55 4 2 2 1581.00 291.00 0.00 0.00 DGRF55 5 3 0 1302.00 0.00 0.00 0.00 DGRF55 6 3 1 -1944.00 -462.00 0.00 0.00 DGRF55 7 3 2 1288.00 216.00 0.00 0.00 DGRF55 8 3 3 882.00 -83.00 0.00 0.00 DGRF55 9 4 0 958.00 0.00 0.00 0.00 DGRF55 10 4 1 796.00 133.00 0.00 0.00 DGRF55 11 4 2 510.00 -274.00 0.00 0.00 DGRF55 12 4 3 -397.00 -23.00 0.00 0.00 DGRF55 13 4 4 290.00 -230.00 0.00 0.00 DGRF55 14 5 0 -229.00 0.00 0.00 0.00 DGRF55 15 5 1 360.00 15.00 0.00 0.00 DGRF55 16 5 2 230.00 110.00 0.00 0.00 DGRF55 17 5 3 -23.00 -98.00 0.00 0.00 DGRF55 18 5 4 -152.00 -121.00 0.00 0.00 DGRF55 19 5 5 -69.00 78.00 0.00 0.00 DGRF55 20 6 0 47.00 0.00 0.00 0.00 DGRF55 21 6 1 57.00 -9.00 0.00 0.00 DGRF55 22 6 2 3.00 96.00 0.00 0.00 DGRF55 23 6 3 -247.00 48.00 0.00 0.00 DGRF55 24 6 4 -8.00 -16.00 0.00 0.00 DGRF55 25 6 5 7.00 -12.00 0.00 0.00 DGRF55 26 6 6 -107.00 -24.00 0.00 0.00 DGRF55 27 7 0 65.00 0.00 0.00 0.00 DGRF55 28 7 1 -56.00 -50.00 0.00 0.00 DGRF55 29 7 2 2.00 -24.00 0.00 0.00 DGRF55 30 7 3 10.00 -4.00 0.00 0.00 DGRF55 31 7 4 -32.00 8.00 0.00 0.00 DGRF55 32 7 5 -11.00 28.00 0.00 0.00 DGRF55 33 7 6 9.00 -20.00 0.00 0.00 DGRF55 34 7 7 18.00 -18.00 0.00 0.00 DGRF55 35 8 0 11.00 0.00 0.00 0.00 DGRF55 36 8 1 9.00 10.00 0.00 0.00 DGRF55 37 8 2 -6.00 -15.00 0.00 0.00 DGRF55 38 8 3 -14.00 5.00 0.00 0.00 DGRF55 39 8 4 6.00 -23.00 0.00 0.00 DGRF55 40 8 5 10.00 3.00 0.00 0.00 DGRF55 41 8 6 -7.00 23.00 0.00 0.00 DGRF55 42 8 7 6.00 -4.00 0.00 0.00 DGRF55 43 8 8 9.00 -13.00 0.00 0.00 DGRF55 44 9 0 4.00 0.00 0.00 0.00 DGRF55 45 9 1 9.00 -11.00 0.00 0.00 DGRF55 46 9 2 -4.00 12.00 0.00 0.00 DGRF55 47 9 3 -5.00 7.00 0.00 0.00 DGRF55 48 9 4 2.00 6.00 0.00 0.00 DGRF55 49 9 5 4.00 -2.00 0.00 0.00 DGRF55 50 9 6 1.00 10.00 0.00 0.00 DGRF55 51 9 7 2.00 7.00 0.00 0.00 DGRF55 52 9 8 2.00 -6.00 0.00 0.00 DGRF55 53 9 9 5.00 5.00 0.00 0.00 DGRF55 54 10 0 -3.00 0.00 0.00 0.00 DGRF55 55 10 1 -5.00 -4.00 0.00 0.00 DGRF55 56 10 2 -1.00 0.00 0.00 0.00 DGRF55 57 10 3 2.00 -8.00 0.00 0.00 DGRF55 58 10 4 -3.00 -2.00 0.00 0.00 DGRF55 59 10 5 7.00 -4.00 0.00 0.00 DGRF55 60 10 6 4.00 1.00 0.00 0.00 DGRF55 61 10 7 -2.00 -3.00 0.00 0.00 DGRF55 62 10 8 6.00 7.00 0.00 0.00 DGRF55 63 10 9 -2.00 -1.00 0.00 0.00 DGRF55 64 10 10 0.00 -3.00 0.00 0.00 DGRF55 65 DGRF60 1960.00 10 0 0 1960.00 1965.00 -1.0 600.0 DGRF60 0 1 0 -30421.00 0.00 0.00 0.00 DGRF60 1 1 1 -2169.00 5791.00 0.00 0.00 DGRF60 2 2 0 -1555.00 0.00 0.00 0.00 DGRF60 3 2 1 3002.00 -1967.00 0.00 0.00 DGRF60 4 2 2 1590.00 206.00 0.00 0.00 DGRF60 5 3 0 1302.00 0.00 0.00 0.00 DGRF60 6 3 1 -1992.00 -414.00 0.00 0.00 DGRF60 7 3 2 1289.00 224.00 0.00 0.00 DGRF60 8 3 3 878.00 -130.00 0.00 0.00 DGRF60 9 4 0 957.00 0.00 0.00 0.00 DGRF60 10 4 1 800.00 135.00 0.00 0.00 DGRF60 11 4 2 504.00 -278.00 0.00 0.00 DGRF60 12 4 3 -394.00 3.00 0.00 0.00 DGRF60 13 4 4 269.00 -255.00 0.00 0.00 DGRF60 14 5 0 -222.00 0.00 0.00 0.00 DGRF60 15 5 1 362.00 16.00 0.00 0.00 DGRF60 16 5 2 242.00 125.00 0.00 0.00 DGRF60 17 5 3 -26.00 -117.00 0.00 0.00 DGRF60 18 5 4 -156.00 -114.00 0.00 0.00 DGRF60 19 5 5 -63.00 81.00 0.00 0.00 DGRF60 20 6 0 46.00 0.00 0.00 0.00 DGRF60 21 6 1 58.00 -10.00 0.00 0.00 DGRF60 22 6 2 1.00 99.00 0.00 0.00 DGRF60 23 6 3 -237.00 60.00 0.00 0.00 DGRF60 24 6 4 -1.00 -20.00 0.00 0.00 DGRF60 25 6 5 -2.00 -11.00 0.00 0.00 DGRF60 26 6 6 -113.00 -17.00 0.00 0.00 DGRF60 27 7 0 67.00 0.00 0.00 0.00 DGRF60 28 7 1 -56.00 -55.00 0.00 0.00 DGRF60 29 7 2 5.00 -28.00 0.00 0.00 DGRF60 30 7 3 15.00 -6.00 0.00 0.00 DGRF60 31 7 4 -32.00 7.00 0.00 0.00 DGRF60 32 7 5 -7.00 23.00 0.00 0.00 DGRF60 33 7 6 17.00 -18.00 0.00 0.00 DGRF60 34 7 7 8.00 -17.00 0.00 0.00 DGRF60 35 8 0 15.00 0.00 0.00 0.00 DGRF60 36 8 1 6.00 11.00 0.00 0.00 DGRF60 37 8 2 -4.00 -14.00 0.00 0.00 DGRF60 38 8 3 -11.00 7.00 0.00 0.00 DGRF60 39 8 4 2.00 -18.00 0.00 0.00 DGRF60 40 8 5 10.00 4.00 0.00 0.00 DGRF60 41 8 6 -5.00 23.00 0.00 0.00 DGRF60 42 8 7 10.00 1.00 0.00 0.00 DGRF60 43 8 8 8.00 -20.00 0.00 0.00 DGRF60 44 9 0 4.00 0.00 0.00 0.00 DGRF60 45 9 1 6.00 -18.00 0.00 0.00 DGRF60 46 9 2 0.00 12.00 0.00 0.00 DGRF60 47 9 3 -9.00 2.00 0.00 0.00 DGRF60 48 9 4 1.00 0.00 0.00 0.00 DGRF60 49 9 5 4.00 -3.00 0.00 0.00 DGRF60 50 9 6 -1.00 9.00 0.00 0.00 DGRF60 51 9 7 -2.00 8.00 0.00 0.00 DGRF60 52 9 8 3.00 0.00 0.00 0.00 DGRF60 53 9 9 -1.00 5.00 0.00 0.00 DGRF60 54 10 0 1.00 0.00 0.00 0.00 DGRF60 55 10 1 -3.00 4.00 0.00 0.00 DGRF60 56 10 2 4.00 1.00 0.00 0.00 DGRF60 57 10 3 0.00 0.00 0.00 0.00 DGRF60 58 10 4 -1.00 2.00 0.00 0.00 DGRF60 59 10 5 4.00 -5.00 0.00 0.00 DGRF60 60 10 6 6.00 1.00 0.00 0.00 DGRF60 61 10 7 1.00 -1.00 0.00 0.00 DGRF60 62 10 8 -1.00 6.00 0.00 0.00 DGRF60 63 10 9 2.00 0.00 0.00 0.00 DGRF60 64 10 10 0.00 -7.00 0.00 0.00 DGRF60 65 DGRF65 1965.00 10 0 0 1965.00 1970.00 -1.0 600.0 DGRF65 0 1 0 -30334.00 0.00 0.00 0.00 DGRF65 1 1 1 -2119.00 5776.00 0.00 0.00 DGRF65 2 2 0 -1662.00 0.00 0.00 0.00 DGRF65 3 2 1 2997.00 -2016.00 0.00 0.00 DGRF65 4 2 2 1594.00 114.00 0.00 0.00 DGRF65 5 3 0 1297.00 0.00 0.00 0.00 DGRF65 6 3 1 -2038.00 -404.00 0.00 0.00 DGRF65 7 3 2 1292.00 240.00 0.00 0.00 DGRF65 8 3 3 856.00 -165.00 0.00 0.00 DGRF65 9 4 0 957.00 0.00 0.00 0.00 DGRF65 10 4 1 804.00 148.00 0.00 0.00 DGRF65 11 4 2 479.00 -269.00 0.00 0.00 DGRF65 12 4 3 -390.00 13.00 0.00 0.00 DGRF65 13 4 4 252.00 -269.00 0.00 0.00 DGRF65 14 5 0 -219.00 0.00 0.00 0.00 DGRF65 15 5 1 358.00 19.00 0.00 0.00 DGRF65 16 5 2 254.00 128.00 0.00 0.00 DGRF65 17 5 3 -31.00 -126.00 0.00 0.00 DGRF65 18 5 4 -157.00 -97.00 0.00 0.00 DGRF65 19 5 5 -62.00 81.00 0.00 0.00 DGRF65 20 6 0 45.00 0.00 0.00 0.00 DGRF65 21 6 1 61.00 -11.00 0.00 0.00 DGRF65 22 6 2 8.00 100.00 0.00 0.00 DGRF65 23 6 3 -228.00 68.00 0.00 0.00 DGRF65 24 6 4 4.00 -32.00 0.00 0.00 DGRF65 25 6 5 1.00 -8.00 0.00 0.00 DGRF65 26 6 6 -111.00 -7.00 0.00 0.00 DGRF65 27 7 0 75.00 0.00 0.00 0.00 DGRF65 28 7 1 -57.00 -61.00 0.00 0.00 DGRF65 29 7 2 4.00 -27.00 0.00 0.00 DGRF65 30 7 3 13.00 -2.00 0.00 0.00 DGRF65 31 7 4 -26.00 6.00 0.00 0.00 DGRF65 32 7 5 -6.00 26.00 0.00 0.00 DGRF65 33 7 6 13.00 -23.00 0.00 0.00 DGRF65 34 7 7 1.00 -12.00 0.00 0.00 DGRF65 35 8 0 13.00 0.00 0.00 0.00 DGRF65 36 8 1 5.00 7.00 0.00 0.00 DGRF65 37 8 2 -4.00 -12.00 0.00 0.00 DGRF65 38 8 3 -14.00 9.00 0.00 0.00 DGRF65 39 8 4 0.00 -16.00 0.00 0.00 DGRF65 40 8 5 8.00 4.00 0.00 0.00 DGRF65 41 8 6 -1.00 24.00 0.00 0.00 DGRF65 42 8 7 11.00 -3.00 0.00 0.00 DGRF65 43 8 8 4.00 -17.00 0.00 0.00 DGRF65 44 9 0 8.00 0.00 0.00 0.00 DGRF65 45 9 1 10.00 -22.00 0.00 0.00 DGRF65 46 9 2 2.00 15.00 0.00 0.00 DGRF65 47 9 3 -13.00 7.00 0.00 0.00 DGRF65 48 9 4 10.00 -4.00 0.00 0.00 DGRF65 49 9 5 -1.00 -5.00 0.00 0.00 DGRF65 50 9 6 -1.00 10.00 0.00 0.00 DGRF65 51 9 7 5.00 10.00 0.00 0.00 DGRF65 52 9 8 1.00 -4.00 0.00 0.00 DGRF65 53 9 9 -2.00 1.00 0.00 0.00 DGRF65 54 10 0 -2.00 0.00 0.00 0.00 DGRF65 55 10 1 -3.00 2.00 0.00 0.00 DGRF65 56 10 2 2.00 1.00 0.00 0.00 DGRF65 57 10 3 -5.00 2.00 0.00 0.00 DGRF65 58 10 4 -2.00 6.00 0.00 0.00 DGRF65 59 10 5 4.00 -4.00 0.00 0.00 DGRF65 60 10 6 4.00 0.00 0.00 0.00 DGRF65 61 10 7 0.00 -2.00 0.00 0.00 DGRF65 62 10 8 2.00 3.00 0.00 0.00 DGRF65 63 10 9 2.00 0.00 0.00 0.00 DGRF65 64 10 10 0.00 -6.00 0.00 0.00 DGRF65 65 DGRF70 1970.00 10 0 0 1970.00 1975.00 -1.0 600.0 DGRF70 0 1 0 -30220.00 0.00 0.00 0.00 DGRF70 1 1 1 -2068.00 5737.00 0.00 0.00 DGRF70 2 2 0 -1781.00 0.00 0.00 0.00 DGRF70 3 2 1 3000.00 -2047.00 0.00 0.00 DGRF70 4 2 2 1611.00 25.00 0.00 0.00 DGRF70 5 3 0 1287.00 0.00 0.00 0.00 DGRF70 6 3 1 -2091.00 -366.00 0.00 0.00 DGRF70 7 3 2 1278.00 251.00 0.00 0.00 DGRF70 8 3 3 838.00 -196.00 0.00 0.00 DGRF70 9 4 0 952.00 0.00 0.00 0.00 DGRF70 10 4 1 800.00 167.00 0.00 0.00 DGRF70 11 4 2 461.00 -266.00 0.00 0.00 DGRF70 12 4 3 -395.00 26.00 0.00 0.00 DGRF70 13 4 4 234.00 -279.00 0.00 0.00 DGRF70 14 5 0 -216.00 0.00 0.00 0.00 DGRF70 15 5 1 359.00 26.00 0.00 0.00 DGRF70 16 5 2 262.00 139.00 0.00 0.00 DGRF70 17 5 3 -42.00 -139.00 0.00 0.00 DGRF70 18 5 4 -160.00 -91.00 0.00 0.00 DGRF70 19 5 5 -56.00 83.00 0.00 0.00 DGRF70 20 6 0 43.00 0.00 0.00 0.00 DGRF70 21 6 1 64.00 -12.00 0.00 0.00 DGRF70 22 6 2 15.00 100.00 0.00 0.00 DGRF70 23 6 3 -212.00 72.00 0.00 0.00 DGRF70 24 6 4 2.00 -37.00 0.00 0.00 DGRF70 25 6 5 3.00 -6.00 0.00 0.00 DGRF70 26 6 6 -112.00 1.00 0.00 0.00 DGRF70 27 7 0 72.00 0.00 0.00 0.00 DGRF70 28 7 1 -57.00 -70.00 0.00 0.00 DGRF70 29 7 2 1.00 -27.00 0.00 0.00 DGRF70 30 7 3 14.00 -4.00 0.00 0.00 DGRF70 31 7 4 -22.00 8.00 0.00 0.00 DGRF70 32 7 5 -2.00 23.00 0.00 0.00 DGRF70 33 7 6 13.00 -23.00 0.00 0.00 DGRF70 34 7 7 -2.00 -11.00 0.00 0.00 DGRF70 35 8 0 14.00 0.00 0.00 0.00 DGRF70 36 8 1 6.00 7.00 0.00 0.00 DGRF70 37 8 2 -2.00 -15.00 0.00 0.00 DGRF70 38 8 3 -13.00 6.00 0.00 0.00 DGRF70 39 8 4 -3.00 -17.00 0.00 0.00 DGRF70 40 8 5 5.00 6.00 0.00 0.00 DGRF70 41 8 6 0.00 21.00 0.00 0.00 DGRF70 42 8 7 11.00 -6.00 0.00 0.00 DGRF70 43 8 8 3.00 -16.00 0.00 0.00 DGRF70 44 9 0 8.00 0.00 0.00 0.00 DGRF70 45 9 1 10.00 -21.00 0.00 0.00 DGRF70 46 9 2 2.00 16.00 0.00 0.00 DGRF70 47 9 3 -12.00 6.00 0.00 0.00 DGRF70 48 9 4 10.00 -4.00 0.00 0.00 DGRF70 49 9 5 -1.00 -5.00 0.00 0.00 DGRF70 50 9 6 0.00 10.00 0.00 0.00 DGRF70 51 9 7 3.00 11.00 0.00 0.00 DGRF70 52 9 8 1.00 -2.00 0.00 0.00 DGRF70 53 9 9 -1.00 1.00 0.00 0.00 DGRF70 54 10 0 -3.00 0.00 0.00 0.00 DGRF70 55 10 1 -3.00 1.00 0.00 0.00 DGRF70 56 10 2 2.00 1.00 0.00 0.00 DGRF70 57 10 3 -5.00 3.00 0.00 0.00 DGRF70 58 10 4 -1.00 4.00 0.00 0.00 DGRF70 59 10 5 6.00 -4.00 0.00 0.00 DGRF70 60 10 6 4.00 0.00 0.00 0.00 DGRF70 61 10 7 1.00 -1.00 0.00 0.00 DGRF70 62 10 8 0.00 3.00 0.00 0.00 DGRF70 63 10 9 3.00 1.00 0.00 0.00 DGRF70 64 10 10 -1.00 -4.00 0.00 0.00 DGRF70 65 DGRF75 1975.00 10 0 0 1975.00 1980.00 -1.0 600.0 DGRF75 0 1 0 -30100.00 0.00 0.00 0.00 DGRF75 1 1 1 -2013.00 5675.00 0.00 0.00 DGRF75 2 2 0 -1902.00 0.00 0.00 0.00 DGRF75 3 2 1 3010.00 -2067.00 0.00 0.00 DGRF75 4 2 2 1632.00 -68.00 0.00 0.00 DGRF75 5 3 0 1276.00 0.00 0.00 0.00 DGRF75 6 3 1 -2144.00 -333.00 0.00 0.00 DGRF75 7 3 2 1260.00 262.00 0.00 0.00 DGRF75 8 3 3 830.00 -223.00 0.00 0.00 DGRF75 9 4 0 946.00 0.00 0.00 0.00 DGRF75 10 4 1 791.00 191.00 0.00 0.00 DGRF75 11 4 2 438.00 -265.00 0.00 0.00 DGRF75 12 4 3 -405.00 39.00 0.00 0.00 DGRF75 13 4 4 216.00 -288.00 0.00 0.00 DGRF75 14 5 0 -218.00 0.00 0.00 0.00 DGRF75 15 5 1 356.00 31.00 0.00 0.00 DGRF75 16 5 2 264.00 148.00 0.00 0.00 DGRF75 17 5 3 -59.00 -152.00 0.00 0.00 DGRF75 18 5 4 -159.00 -83.00 0.00 0.00 DGRF75 19 5 5 -49.00 88.00 0.00 0.00 DGRF75 20 6 0 45.00 0.00 0.00 0.00 DGRF75 21 6 1 66.00 -13.00 0.00 0.00 DGRF75 22 6 2 28.00 99.00 0.00 0.00 DGRF75 23 6 3 -198.00 75.00 0.00 0.00 DGRF75 24 6 4 1.00 -41.00 0.00 0.00 DGRF75 25 6 5 6.00 -4.00 0.00 0.00 DGRF75 26 6 6 -111.00 11.00 0.00 0.00 DGRF75 27 7 0 71.00 0.00 0.00 0.00 DGRF75 28 7 1 -56.00 -77.00 0.00 0.00 DGRF75 29 7 2 1.00 -26.00 0.00 0.00 DGRF75 30 7 3 16.00 -5.00 0.00 0.00 DGRF75 31 7 4 -14.00 10.00 0.00 0.00 DGRF75 32 7 5 0.00 22.00 0.00 0.00 DGRF75 33 7 6 12.00 -23.00 0.00 0.00 DGRF75 34 7 7 -5.00 -12.00 0.00 0.00 DGRF75 35 8 0 14.00 0.00 0.00 0.00 DGRF75 36 8 1 6.00 6.00 0.00 0.00 DGRF75 37 8 2 -1.00 -16.00 0.00 0.00 DGRF75 38 8 3 -12.00 4.00 0.00 0.00 DGRF75 39 8 4 -8.00 -19.00 0.00 0.00 DGRF75 40 8 5 4.00 6.00 0.00 0.00 DGRF75 41 8 6 0.00 18.00 0.00 0.00 DGRF75 42 8 7 10.00 -10.00 0.00 0.00 DGRF75 43 8 8 1.00 -17.00 0.00 0.00 DGRF75 44 9 0 7.00 0.00 0.00 0.00 DGRF75 45 9 1 10.00 -21.00 0.00 0.00 DGRF75 46 9 2 2.00 16.00 0.00 0.00 DGRF75 47 9 3 -12.00 7.00 0.00 0.00 DGRF75 48 9 4 10.00 -4.00 0.00 0.00 DGRF75 49 9 5 -1.00 -5.00 0.00 0.00 DGRF75 50 9 6 -1.00 10.00 0.00 0.00 DGRF75 51 9 7 4.00 11.00 0.00 0.00 DGRF75 52 9 8 1.00 -3.00 0.00 0.00 DGRF75 53 9 9 -2.00 1.00 0.00 0.00 DGRF75 54 10 0 -3.00 0.00 0.00 0.00 DGRF75 55 10 1 -3.00 1.00 0.00 0.00 DGRF75 56 10 2 2.00 1.00 0.00 0.00 DGRF75 57 10 3 -5.00 3.00 0.00 0.00 DGRF75 58 10 4 -2.00 4.00 0.00 0.00 DGRF75 59 10 5 5.00 -4.00 0.00 0.00 DGRF75 60 10 6 4.00 -1.00 0.00 0.00 DGRF75 61 10 7 1.00 -1.00 0.00 0.00 DGRF75 62 10 8 0.00 3.00 0.00 0.00 DGRF75 63 10 9 3.00 1.00 0.00 0.00 DGRF75 64 10 10 -1.00 -5.00 0.00 0.00 DGRF75 65 DGRF80 1980.00 10 0 0 1980.00 1985.00 -1.0 600.0 DGRF80 0 1 0 -29992.00 0.00 0.00 0.00 DGRF80 1 1 1 -1956.00 5604.00 0.00 0.00 DGRF80 2 2 0 -1997.00 0.00 0.00 0.00 DGRF80 3 2 1 3027.00 -2129.00 0.00 0.00 DGRF80 4 2 2 1663.00 -200.00 0.00 0.00 DGRF80 5 3 0 1281.00 0.00 0.00 0.00 DGRF80 6 3 1 -2180.00 -336.00 0.00 0.00 DGRF80 7 3 2 1251.00 271.00 0.00 0.00 DGRF80 8 3 3 833.00 -252.00 0.00 0.00 DGRF80 9 4 0 938.00 0.00 0.00 0.00 DGRF80 10 4 1 782.00 212.00 0.00 0.00 DGRF80 11 4 2 398.00 -257.00 0.00 0.00 DGRF80 12 4 3 -419.00 53.00 0.00 0.00 DGRF80 13 4 4 199.00 -297.00 0.00 0.00 DGRF80 14 5 0 -218.00 0.00 0.00 0.00 DGRF80 15 5 1 357.00 46.00 0.00 0.00 DGRF80 16 5 2 261.00 150.00 0.00 0.00 DGRF80 17 5 3 -74.00 -151.00 0.00 0.00 DGRF80 18 5 4 -162.00 -78.00 0.00 0.00 DGRF80 19 5 5 -48.00 92.00 0.00 0.00 DGRF80 20 6 0 48.00 0.00 0.00 0.00 DGRF80 21 6 1 66.00 -15.00 0.00 0.00 DGRF80 22 6 2 42.00 93.00 0.00 0.00 DGRF80 23 6 3 -192.00 71.00 0.00 0.00 DGRF80 24 6 4 4.00 -43.00 0.00 0.00 DGRF80 25 6 5 14.00 -2.00 0.00 0.00 DGRF80 26 6 6 -108.00 17.00 0.00 0.00 DGRF80 27 7 0 72.00 0.00 0.00 0.00 DGRF80 28 7 1 -59.00 -82.00 0.00 0.00 DGRF80 29 7 2 2.00 -27.00 0.00 0.00 DGRF80 30 7 3 21.00 -5.00 0.00 0.00 DGRF80 31 7 4 -12.00 16.00 0.00 0.00 DGRF80 32 7 5 1.00 18.00 0.00 0.00 DGRF80 33 7 6 11.00 -23.00 0.00 0.00 DGRF80 34 7 7 -2.00 -10.00 0.00 0.00 DGRF80 35 8 0 18.00 0.00 0.00 0.00 DGRF80 36 8 1 6.00 7.00 0.00 0.00 DGRF80 37 8 2 0.00 -18.00 0.00 0.00 DGRF80 38 8 3 -11.00 4.00 0.00 0.00 DGRF80 39 8 4 -7.00 -22.00 0.00 0.00 DGRF80 40 8 5 4.00 9.00 0.00 0.00 DGRF80 41 8 6 3.00 16.00 0.00 0.00 DGRF80 42 8 7 6.00 -13.00 0.00 0.00 DGRF80 43 8 8 -1.00 -15.00 0.00 0.00 DGRF80 44 9 0 5.00 0.00 0.00 0.00 DGRF80 45 9 1 10.00 -21.00 0.00 0.00 DGRF80 46 9 2 1.00 16.00 0.00 0.00 DGRF80 47 9 3 -12.00 9.00 0.00 0.00 DGRF80 48 9 4 9.00 -5.00 0.00 0.00 DGRF80 49 9 5 -3.00 -6.00 0.00 0.00 DGRF80 50 9 6 -1.00 9.00 0.00 0.00 DGRF80 51 9 7 7.00 10.00 0.00 0.00 DGRF80 52 9 8 2.00 -6.00 0.00 0.00 DGRF80 53 9 9 -5.00 2.00 0.00 0.00 DGRF80 54 10 0 -4.00 0.00 0.00 0.00 DGRF80 55 10 1 -4.00 1.00 0.00 0.00 DGRF80 56 10 2 2.00 0.00 0.00 0.00 DGRF80 57 10 3 -5.00 3.00 0.00 0.00 DGRF80 58 10 4 -2.00 6.00 0.00 0.00 DGRF80 59 10 5 5.00 -4.00 0.00 0.00 DGRF80 60 10 6 3.00 0.00 0.00 0.00 DGRF80 61 10 7 1.00 -1.00 0.00 0.00 DGRF80 62 10 8 2.00 4.00 0.00 0.00 DGRF80 63 10 9 3.00 0.00 0.00 0.00 DGRF80 64 10 10 0.00 -6.00 0.00 0.00 DGRF80 65 DGRF85 1985.00 10 0 0 1985.00 1990.00 -1.0 600.0 DGRF85 0 1 0 -29873.00 0.00 0.00 0.00 DGRF85 1 1 1 -1905.00 5500.00 0.00 0.00 DGRF85 2 2 0 -2072.00 0.00 0.00 0.00 DGRF85 3 2 1 3044.00 -2197.00 0.00 0.00 DGRF85 4 2 2 1687.00 -306.00 0.00 0.00 DGRF85 5 3 0 1296.00 0.00 0.00 0.00 DGRF85 6 3 1 -2208.00 -310.00 0.00 0.00 DGRF85 7 3 2 1247.00 284.00 0.00 0.00 DGRF85 8 3 3 829.00 -297.00 0.00 0.00 DGRF85 9 4 0 936.00 0.00 0.00 0.00 DGRF85 10 4 1 780.00 232.00 0.00 0.00 DGRF85 11 4 2 361.00 -249.00 0.00 0.00 DGRF85 12 4 3 -424.00 69.00 0.00 0.00 DGRF85 13 4 4 170.00 -297.00 0.00 0.00 DGRF85 14 5 0 -214.00 0.00 0.00 0.00 DGRF85 15 5 1 355.00 47.00 0.00 0.00 DGRF85 16 5 2 253.00 150.00 0.00 0.00 DGRF85 17 5 3 -93.00 -154.00 0.00 0.00 DGRF85 18 5 4 -164.00 -75.00 0.00 0.00 DGRF85 19 5 5 -46.00 95.00 0.00 0.00 DGRF85 20 6 0 53.00 0.00 0.00 0.00 DGRF85 21 6 1 65.00 -16.00 0.00 0.00 DGRF85 22 6 2 51.00 88.00 0.00 0.00 DGRF85 23 6 3 -185.00 69.00 0.00 0.00 DGRF85 24 6 4 4.00 -48.00 0.00 0.00 DGRF85 25 6 5 16.00 -1.00 0.00 0.00 DGRF85 26 6 6 -102.00 21.00 0.00 0.00 DGRF85 27 7 0 74.00 0.00 0.00 0.00 DGRF85 28 7 1 -62.00 -83.00 0.00 0.00 DGRF85 29 7 2 3.00 -27.00 0.00 0.00 DGRF85 30 7 3 24.00 -2.00 0.00 0.00 DGRF85 31 7 4 -6.00 20.00 0.00 0.00 DGRF85 32 7 5 4.00 17.00 0.00 0.00 DGRF85 33 7 6 10.00 -23.00 0.00 0.00 DGRF85 34 7 7 0.00 -7.00 0.00 0.00 DGRF85 35 8 0 21.00 0.00 0.00 0.00 DGRF85 36 8 1 6.00 8.00 0.00 0.00 DGRF85 37 8 2 0.00 -19.00 0.00 0.00 DGRF85 38 8 3 -11.00 5.00 0.00 0.00 DGRF85 39 8 4 -9.00 -23.00 0.00 0.00 DGRF85 40 8 5 4.00 11.00 0.00 0.00 DGRF85 41 8 6 4.00 14.00 0.00 0.00 DGRF85 42 8 7 4.00 -15.00 0.00 0.00 DGRF85 43 8 8 -4.00 -11.00 0.00 0.00 DGRF85 44 9 0 5.00 0.00 0.00 0.00 DGRF85 45 9 1 10.00 -21.00 0.00 0.00 DGRF85 46 9 2 1.00 15.00 0.00 0.00 DGRF85 47 9 3 -12.00 9.00 0.00 0.00 DGRF85 48 9 4 9.00 -6.00 0.00 0.00 DGRF85 49 9 5 -3.00 -6.00 0.00 0.00 DGRF85 50 9 6 -1.00 9.00 0.00 0.00 DGRF85 51 9 7 7.00 9.00 0.00 0.00 DGRF85 52 9 8 1.00 -7.00 0.00 0.00 DGRF85 53 9 9 -5.00 2.00 0.00 0.00 DGRF85 54 10 0 -4.00 0.00 0.00 0.00 DGRF85 55 10 1 -4.00 1.00 0.00 0.00 DGRF85 56 10 2 3.00 0.00 0.00 0.00 DGRF85 57 10 3 -5.00 3.00 0.00 0.00 DGRF85 58 10 4 -2.00 6.00 0.00 0.00 DGRF85 59 10 5 5.00 -4.00 0.00 0.00 DGRF85 60 10 6 3.00 0.00 0.00 0.00 DGRF85 61 10 7 1.00 -1.00 0.00 0.00 DGRF85 62 10 8 2.00 4.00 0.00 0.00 DGRF85 63 10 9 3.00 0.00 0.00 0.00 DGRF85 64 10 10 0.00 -6.00 0.00 0.00 DGRF85 65 DGRF90 1990.00 10 0 0 1990.00 1995.00 -1.0 600.0 DGRF90 0 1 0 -29775.00 0.00 0.00 0.00 DGRF90 1 1 1 -1848.00 5406.00 0.00 0.00 DGRF90 2 2 0 -2131.00 0.00 0.00 0.00 DGRF90 3 2 1 3059.00 -2279.00 0.00 0.00 DGRF90 4 2 2 1686.00 -373.00 0.00 0.00 DGRF90 5 3 0 1314.00 0.00 0.00 0.00 DGRF90 6 3 1 -2239.00 -284.00 0.00 0.00 DGRF90 7 3 2 1248.00 293.00 0.00 0.00 DGRF90 8 3 3 802.00 -352.00 0.00 0.00 DGRF90 9 4 0 939.00 0.00 0.00 0.00 DGRF90 10 4 1 780.00 247.00 0.00 0.00 DGRF90 11 4 2 325.00 -240.00 0.00 0.00 DGRF90 12 4 3 -423.00 84.00 0.00 0.00 DGRF90 13 4 4 141.00 -299.00 0.00 0.00 DGRF90 14 5 0 -214.00 0.00 0.00 0.00 DGRF90 15 5 1 353.00 46.00 0.00 0.00 DGRF90 16 5 2 245.00 154.00 0.00 0.00 DGRF90 17 5 3 -109.00 -153.00 0.00 0.00 DGRF90 18 5 4 -165.00 -69.00 0.00 0.00 DGRF90 19 5 5 -36.00 97.00 0.00 0.00 DGRF90 20 6 0 61.00 0.00 0.00 0.00 DGRF90 21 6 1 65.00 -16.00 0.00 0.00 DGRF90 22 6 2 59.00 82.00 0.00 0.00 DGRF90 23 6 3 -178.00 69.00 0.00 0.00 DGRF90 24 6 4 3.00 -52.00 0.00 0.00 DGRF90 25 6 5 18.00 1.00 0.00 0.00 DGRF90 26 6 6 -96.00 24.00 0.00 0.00 DGRF90 27 7 0 77.00 0.00 0.00 0.00 DGRF90 28 7 1 -64.00 -80.00 0.00 0.00 DGRF90 29 7 2 2.00 -26.00 0.00 0.00 DGRF90 30 7 3 26.00 0.00 0.00 0.00 DGRF90 31 7 4 -1.00 21.00 0.00 0.00 DGRF90 32 7 5 5.00 17.00 0.00 0.00 DGRF90 33 7 6 9.00 -23.00 0.00 0.00 DGRF90 34 7 7 0.00 -4.00 0.00 0.00 DGRF90 35 8 0 23.00 0.00 0.00 0.00 DGRF90 36 8 1 5.00 10.00 0.00 0.00 DGRF90 37 8 2 -1.00 -19.00 0.00 0.00 DGRF90 38 8 3 -10.00 6.00 0.00 0.00 DGRF90 39 8 4 -12.00 -22.00 0.00 0.00 DGRF90 40 8 5 3.00 12.00 0.00 0.00 DGRF90 41 8 6 4.00 12.00 0.00 0.00 DGRF90 42 8 7 2.00 -16.00 0.00 0.00 DGRF90 43 8 8 -6.00 -10.00 0.00 0.00 DGRF90 44 9 0 4.00 0.00 0.00 0.00 DGRF90 45 9 1 9.00 -20.00 0.00 0.00 DGRF90 46 9 2 1.00 15.00 0.00 0.00 DGRF90 47 9 3 -12.00 11.00 0.00 0.00 DGRF90 48 9 4 9.00 -7.00 0.00 0.00 DGRF90 49 9 5 -4.00 -7.00 0.00 0.00 DGRF90 50 9 6 -2.00 9.00 0.00 0.00 DGRF90 51 9 7 7.00 8.00 0.00 0.00 DGRF90 52 9 8 1.00 -7.00 0.00 0.00 DGRF90 53 9 9 -6.00 2.00 0.00 0.00 DGRF90 54 10 0 -3.00 0.00 0.00 0.00 DGRF90 55 10 1 -4.00 2.00 0.00 0.00 DGRF90 56 10 2 2.00 1.00 0.00 0.00 DGRF90 57 10 3 -5.00 3.00 0.00 0.00 DGRF90 58 10 4 -2.00 6.00 0.00 0.00 DGRF90 59 10 5 4.00 -4.00 0.00 0.00 DGRF90 60 10 6 3.00 0.00 0.00 0.00 DGRF90 61 10 7 1.00 -2.00 0.00 0.00 DGRF90 62 10 8 3.00 3.00 0.00 0.00 DGRF90 63 10 9 3.00 -1.00 0.00 0.00 DGRF90 64 10 10 0.00 -6.00 0.00 0.00 DGRF90 65 DGRF95 1995.00 10 0 0 1995.00 2000.00 -1.0 600.0 DGRF95 0 1 0 -29692.00 0.00 0.00 0.00 DGRF95 1 1 1 -1784.00 5306.00 0.00 0.00 DGRF95 2 2 0 -2200.00 0.00 0.00 0.00 DGRF95 3 2 1 3070.00 -2366.00 0.00 0.00 DGRF95 4 2 2 1681.00 -413.00 0.00 0.00 DGRF95 5 3 0 1335.00 0.00 0.00 0.00 DGRF95 6 3 1 -2267.00 -262.00 0.00 0.00 DGRF95 7 3 2 1249.00 302.00 0.00 0.00 DGRF95 8 3 3 759.00 -427.00 0.00 0.00 DGRF95 9 4 0 940.00 0.00 0.00 0.00 DGRF95 10 4 1 780.00 262.00 0.00 0.00 DGRF95 11 4 2 290.00 -236.00 0.00 0.00 DGRF95 12 4 3 -418.00 97.00 0.00 0.00 DGRF95 13 4 4 122.00 -306.00 0.00 0.00 DGRF95 14 5 0 -214.00 0.00 0.00 0.00 DGRF95 15 5 1 352.00 46.00 0.00 0.00 DGRF95 16 5 2 235.00 165.00 0.00 0.00 DGRF95 17 5 3 -118.00 -143.00 0.00 0.00 DGRF95 18 5 4 -166.00 -55.00 0.00 0.00 DGRF95 19 5 5 -17.00 107.00 0.00 0.00 DGRF95 20 6 0 68.00 0.00 0.00 0.00 DGRF95 21 6 1 67.00 -17.00 0.00 0.00 DGRF95 22 6 2 68.00 72.00 0.00 0.00 DGRF95 23 6 3 -170.00 67.00 0.00 0.00 DGRF95 24 6 4 -1.00 -58.00 0.00 0.00 DGRF95 25 6 5 19.00 1.00 0.00 0.00 DGRF95 26 6 6 -93.00 36.00 0.00 0.00 DGRF95 27 7 0 77.00 0.00 0.00 0.00 DGRF95 28 7 1 -72.00 -69.00 0.00 0.00 DGRF95 29 7 2 1.00 -25.00 0.00 0.00 DGRF95 30 7 3 28.00 4.00 0.00 0.00 DGRF95 31 7 4 5.00 24.00 0.00 0.00 DGRF95 32 7 5 4.00 17.00 0.00 0.00 DGRF95 33 7 6 8.00 -24.00 0.00 0.00 DGRF95 34 7 7 -2.00 -6.00 0.00 0.00 DGRF95 35 8 0 25.00 0.00 0.00 0.00 DGRF95 36 8 1 6.00 11.00 0.00 0.00 DGRF95 37 8 2 -6.00 -21.00 0.00 0.00 DGRF95 38 8 3 -9.00 8.00 0.00 0.00 DGRF95 39 8 4 -14.00 -23.00 0.00 0.00 DGRF95 40 8 5 9.00 15.00 0.00 0.00 DGRF95 41 8 6 6.00 11.00 0.00 0.00 DGRF95 42 8 7 -5.00 -16.00 0.00 0.00 DGRF95 43 8 8 -7.00 -4.00 0.00 0.00 DGRF95 44 9 0 4.00 0.00 0.00 0.00 DGRF95 45 9 1 9.00 -20.00 0.00 0.00 DGRF95 46 9 2 3.00 15.00 0.00 0.00 DGRF95 47 9 3 -10.00 12.00 0.00 0.00 DGRF95 48 9 4 8.00 -6.00 0.00 0.00 DGRF95 49 9 5 -8.00 -8.00 0.00 0.00 DGRF95 50 9 6 -1.00 8.00 0.00 0.00 DGRF95 51 9 7 10.00 5.00 0.00 0.00 DGRF95 52 9 8 -2.00 -8.00 0.00 0.00 DGRF95 53 9 9 -8.00 3.00 0.00 0.00 DGRF95 54 10 0 -3.00 0.00 0.00 0.00 DGRF95 55 10 1 -6.00 1.00 0.00 0.00 DGRF95 56 10 2 2.00 0.00 0.00 0.00 DGRF95 57 10 3 -4.00 4.00 0.00 0.00 DGRF95 58 10 4 -1.00 5.00 0.00 0.00 DGRF95 59 10 5 4.00 -5.00 0.00 0.00 DGRF95 60 10 6 2.00 -1.00 0.00 0.00 DGRF95 61 10 7 2.00 -2.00 0.00 0.00 DGRF95 62 10 8 5.00 1.00 0.00 0.00 DGRF95 63 10 9 1.00 -2.00 0.00 0.00 DGRF95 64 10 10 0.00 -7.00 0.00 0.00 DGRF95 65 DGRF2000 2000.00 13 0 0 2000.00 2005.00 -1.0 600.0 DGRF2000 0 1 0 -29619.40 0.00 0.00 0.00 DGRF2000 1 1 1 -1728.20 5186.10 0.00 0.00 DGRF2000 2 2 0 -2267.70 0.00 0.00 0.00 DGRF2000 3 2 1 3068.40 -2481.60 0.00 0.00 DGRF2000 4 2 2 1670.90 -458.00 0.00 0.00 DGRF2000 5 3 0 1339.60 0.00 0.00 0.00 DGRF2000 6 3 1 -2288.00 -227.60 0.00 0.00 DGRF2000 7 3 2 1252.10 293.40 0.00 0.00 DGRF2000 8 3 3 714.50 -491.10 0.00 0.00 DGRF2000 9 4 0 932.30 0.00 0.00 0.00 DGRF2000 10 4 1 786.80 272.60 0.00 0.00 DGRF2000 11 4 2 250.00 -231.90 0.00 0.00 DGRF2000 12 4 3 -403.00 119.80 0.00 0.00 DGRF2000 13 4 4 111.30 -303.80 0.00 0.00 DGRF2000 14 5 0 -218.80 0.00 0.00 0.00 DGRF2000 15 5 1 351.40 43.80 0.00 0.00 DGRF2000 16 5 2 222.30 171.90 0.00 0.00 DGRF2000 17 5 3 -130.40 -133.10 0.00 0.00 DGRF2000 18 5 4 -168.60 -39.30 0.00 0.00 DGRF2000 19 5 5 -12.90 106.30 0.00 0.00 DGRF2000 20 6 0 72.30 0.00 0.00 0.00 DGRF2000 21 6 1 68.20 -17.40 0.00 0.00 DGRF2000 22 6 2 74.20 63.70 0.00 0.00 DGRF2000 23 6 3 -160.90 65.10 0.00 0.00 DGRF2000 24 6 4 -5.90 -61.20 0.00 0.00 DGRF2000 25 6 5 16.90 0.70 0.00 0.00 DGRF2000 26 6 6 -90.40 43.80 0.00 0.00 DGRF2000 27 7 0 79.00 0.00 0.00 0.00 DGRF2000 28 7 1 -74.00 -64.60 0.00 0.00 DGRF2000 29 7 2 0.00 -24.20 0.00 0.00 DGRF2000 30 7 3 33.30 6.20 0.00 0.00 DGRF2000 31 7 4 9.10 24.00 0.00 0.00 DGRF2000 32 7 5 6.90 14.80 0.00 0.00 DGRF2000 33 7 6 7.30 -25.40 0.00 0.00 DGRF2000 34 7 7 -1.20 -5.80 0.00 0.00 DGRF2000 35 8 0 24.40 0.00 0.00 0.00 DGRF2000 36 8 1 6.60 11.90 0.00 0.00 DGRF2000 37 8 2 -9.20 -21.50 0.00 0.00 DGRF2000 38 8 3 -7.90 8.50 0.00 0.00 DGRF2000 39 8 4 -16.60 -21.50 0.00 0.00 DGRF2000 40 8 5 9.10 15.50 0.00 0.00 DGRF2000 41 8 6 7.00 8.90 0.00 0.00 DGRF2000 42 8 7 -7.90 -14.90 0.00 0.00 DGRF2000 43 8 8 -7.00 -2.10 0.00 0.00 DGRF2000 44 9 0 5.00 0.00 0.00 0.00 DGRF2000 45 9 1 9.40 -19.70 0.00 0.00 DGRF2000 46 9 2 3.00 13.40 0.00 0.00 DGRF2000 47 9 3 -8.40 12.50 0.00 0.00 DGRF2000 48 9 4 6.30 -6.20 0.00 0.00 DGRF2000 49 9 5 -8.90 -8.40 0.00 0.00 DGRF2000 50 9 6 -1.50 8.40 0.00 0.00 DGRF2000 51 9 7 9.30 3.80 0.00 0.00 DGRF2000 52 9 8 -4.30 -8.20 0.00 0.00 DGRF2000 53 9 9 -8.20 4.80 0.00 0.00 DGRF2000 54 10 0 -2.60 0.00 0.00 0.00 DGRF2000 55 10 1 -6.00 1.70 0.00 0.00 DGRF2000 56 10 2 1.70 0.00 0.00 0.00 DGRF2000 57 10 3 -3.10 4.00 0.00 0.00 DGRF2000 58 10 4 -0.50 4.90 0.00 0.00 DGRF2000 59 10 5 3.70 -5.90 0.00 0.00 DGRF2000 60 10 6 1.00 -1.20 0.00 0.00 DGRF2000 61 10 7 2.00 -2.90 0.00 0.00 DGRF2000 62 10 8 4.20 0.20 0.00 0.00 DGRF2000 63 10 9 0.30 -2.20 0.00 0.00 DGRF2000 64 10 10 -1.10 -7.40 0.00 0.00 DGRF2000 65 11 0 2.70 0.00 0.00 0.00 DGRF2000 66 11 1 -1.70 0.10 0.00 0.00 DGRF2000 67 11 2 -1.90 1.30 0.00 0.00 DGRF2000 68 11 3 1.50 -0.90 0.00 0.00 DGRF2000 69 11 4 -0.10 -2.60 0.00 0.00 DGRF2000 70 11 5 0.10 0.90 0.00 0.00 DGRF2000 71 11 6 -0.70 -0.70 0.00 0.00 DGRF2000 72 11 7 0.70 -2.80 0.00 0.00 DGRF2000 73 11 8 1.70 -0.90 0.00 0.00 DGRF2000 74 11 9 0.10 -1.20 0.00 0.00 DGRF2000 75 11 10 1.20 -1.90 0.00 0.00 DGRF2000 76 11 11 4.00 -0.90 0.00 0.00 DGRF2000 77 12 0 -2.20 0.00 0.00 0.00 DGRF2000 78 12 1 -0.30 -0.40 0.00 0.00 DGRF2000 79 12 2 0.20 0.30 0.00 0.00 DGRF2000 80 12 3 0.90 2.50 0.00 0.00 DGRF2000 81 12 4 -0.20 -2.60 0.00 0.00 DGRF2000 82 12 5 0.90 0.70 0.00 0.00 DGRF2000 83 12 6 -0.50 0.30 0.00 0.00 DGRF2000 84 12 7 0.30 0.00 0.00 0.00 DGRF2000 85 12 8 -0.30 0.00 0.00 0.00 DGRF2000 86 12 9 -0.40 0.30 0.00 0.00 DGRF2000 87 12 10 -0.10 -0.90 0.00 0.00 DGRF2000 88 12 11 -0.20 -0.40 0.00 0.00 DGRF2000 89 12 12 -0.40 0.80 0.00 0.00 DGRF2000 90 13 0 -0.20 0.00 0.00 0.00 DGRF2000 91 13 1 -0.90 -0.90 0.00 0.00 DGRF2000 92 13 2 0.30 0.20 0.00 0.00 DGRF2000 93 13 3 0.10 1.80 0.00 0.00 DGRF2000 94 13 4 -0.40 -0.40 0.00 0.00 DGRF2000 95 13 5 1.30 -1.00 0.00 0.00 DGRF2000 96 13 6 -0.40 -0.10 0.00 0.00 DGRF2000 97 13 7 0.70 0.70 0.00 0.00 DGRF2000 98 13 8 -0.40 0.30 0.00 0.00 DGRF2000 99 13 9 0.30 0.60 0.00 0.00 DGRF2000 100 13 10 -0.10 0.30 0.00 0.00 DGRF2000 101 13 11 0.40 -0.20 0.00 0.00 DGRF2000 102 13 12 0.00 -0.50 0.00 0.00 DGRF2000 103 13 13 0.10 -0.90 0.00 0.00 DGRF2000 104 DGRF2005 2005.00 13 0 0 2005.00 2010.00 -1.0 600.0 DGRF2005 0 1 0 -29554.63 0.00 0.00 0.00 IGRF2005 1 1 1 -1669.05 5077.99 0.00 0.00 IGRF2005 2 2 0 -2337.24 0.00 0.00 0.00 IGRF2005 3 2 1 3047.69 -2594.50 0.00 0.00 IGRF2005 4 2 2 1657.76 -515.43 0.00 0.00 IGRF2005 5 3 0 1336.30 0.00 0.00 0.00 IGRF2005 6 3 1 -2305.83 -198.86 0.00 0.00 IGRF2005 7 3 2 1246.39 269.72 0.00 0.00 IGRF2005 8 3 3 672.51 -524.72 0.00 0.00 IGRF2005 9 4 0 920.55 0.00 0.00 0.00 IGRF2005 10 4 1 797.96 282.07 0.00 0.00 IGRF2005 11 4 2 210.65 -225.23 0.00 0.00 IGRF2005 12 4 3 -379.86 145.15 0.00 0.00 IGRF2005 13 4 4 100.00 -305.36 0.00 0.00 IGRF2005 14 5 0 -227.00 0.00 0.00 0.00 IGRF2005 15 5 1 354.41 42.72 0.00 0.00 IGRF2005 16 5 2 208.95 180.25 0.00 0.00 IGRF2005 17 5 3 -136.54 -123.45 0.00 0.00 IGRF2005 18 5 4 -168.05 -19.57 0.00 0.00 IGRF2005 19 5 5 -13.55 103.85 0.00 0.00 IGRF2005 20 6 0 73.60 0.00 0.00 0.00 IGRF2005 21 6 1 69.56 -20.33 0.00 0.00 IGRF2005 22 6 2 76.74 54.75 0.00 0.00 IGRF2005 23 6 3 -151.34 63.63 0.00 0.00 IGRF2005 24 6 4 -14.58 -63.53 0.00 0.00 IGRF2005 25 6 5 14.58 0.24 0.00 0.00 IGRF2005 26 6 6 -86.36 50.94 0.00 0.00 IGRF2005 27 7 0 79.88 0.00 0.00 0.00 IGRF2005 28 7 1 -74.46 -61.14 0.00 0.00 IGRF2005 29 7 2 -1.65 -22.57 0.00 0.00 IGRF2005 30 7 3 38.73 6.82 0.00 0.00 IGRF2005 31 7 4 12.30 25.35 0.00 0.00 IGRF2005 32 7 5 9.37 10.93 0.00 0.00 IGRF2005 33 7 6 5.42 -26.32 0.00 0.00 IGRF2005 34 7 7 1.94 -4.64 0.00 0.00 IGRF2005 35 8 0 24.80 0.00 0.00 0.00 IGRF2005 36 8 1 7.62 11.20 0.00 0.00 IGRF2005 37 8 2 -11.73 -20.88 0.00 0.00 IGRF2005 38 8 3 -6.88 9.83 0.00 0.00 IGRF2005 39 8 4 -18.11 -19.71 0.00 0.00 IGRF2005 40 8 5 10.17 16.22 0.00 0.00 IGRF2005 41 8 6 9.36 7.61 0.00 0.00 IGRF2005 42 8 7 -11.25 -12.76 0.00 0.00 IGRF2005 43 8 8 -4.87 -0.06 0.00 0.00 IGRF2005 44 9 0 5.58 0.00 0.00 0.00 IGRF2005 45 9 1 9.76 -20.11 0.00 0.00 IGRF2005 46 9 2 3.58 12.69 0.00 0.00 IGRF2005 47 9 3 -6.94 12.67 0.00 0.00 IGRF2005 48 9 4 5.01 -6.72 0.00 0.00 IGRF2005 49 9 5 -10.76 -8.16 0.00 0.00 IGRF2005 50 9 6 -1.25 8.10 0.00 0.00 IGRF2005 51 9 7 8.76 2.92 0.00 0.00 IGRF2005 52 9 8 -6.66 -7.73 0.00 0.00 IGRF2005 53 9 9 -9.22 6.01 0.00 0.00 IGRF2005 54 10 0 -2.17 0.00 0.00 0.00 IGRF2005 55 10 1 -6.12 2.19 0.00 0.00 IGRF2005 56 10 2 1.42 0.10 0.00 0.00 IGRF2005 57 10 3 -2.35 4.46 0.00 0.00 IGRF2005 58 10 4 -0.15 4.76 0.00 0.00 IGRF2005 59 10 5 3.06 -6.58 0.00 0.00 IGRF2005 60 10 6 0.29 -1.01 0.00 0.00 IGRF2005 61 10 7 2.06 -3.47 0.00 0.00 IGRF2005 62 10 8 3.77 -0.86 0.00 0.00 IGRF2005 63 10 9 -0.21 -2.31 0.00 0.00 IGRF2005 64 10 10 -2.09 -7.93 0.00 0.00 IGRF2005 65 11 0 2.95 0.00 0.00 0.00 IGRF2005 66 11 1 -1.60 0.26 0.00 0.00 IGRF2005 67 11 2 -1.88 1.44 0.00 0.00 IGRF2005 68 11 3 1.44 -0.77 0.00 0.00 IGRF2005 69 11 4 -0.31 -2.27 0.00 0.00 IGRF2005 70 11 5 0.29 0.90 0.00 0.00 IGRF2005 71 11 6 -0.79 -0.58 0.00 0.00 IGRF2005 72 11 7 0.53 -2.69 0.00 0.00 IGRF2005 73 11 8 1.80 -1.08 0.00 0.00 IGRF2005 74 11 9 0.16 -1.58 0.00 0.00 IGRF2005 75 11 10 0.96 -1.90 0.00 0.00 IGRF2005 76 11 11 3.99 -1.39 0.00 0.00 IGRF2005 77 12 0 -2.15 0.00 0.00 0.00 IGRF2005 78 12 1 -0.29 -0.55 0.00 0.00 IGRF2005 79 12 2 0.21 0.23 0.00 0.00 IGRF2005 80 12 3 0.89 2.38 0.00 0.00 IGRF2005 81 12 4 -0.38 -2.63 0.00 0.00 IGRF2005 82 12 5 0.96 0.61 0.00 0.00 IGRF2005 83 12 6 -0.30 0.40 0.00 0.00 IGRF2005 84 12 7 0.46 0.01 0.00 0.00 IGRF2005 85 12 8 -0.35 0.02 0.00 0.00 IGRF2005 86 12 9 -0.36 0.28 0.00 0.00 IGRF2005 87 12 10 0.08 -0.87 0.00 0.00 IGRF2005 88 12 11 -0.49 -0.34 0.00 0.00 IGRF2005 89 12 12 -0.08 0.88 0.00 0.00 IGRF2005 90 13 0 -0.16 0.00 0.00 0.00 IGRF2005 91 13 1 -0.88 -0.76 0.00 0.00 IGRF2005 92 13 2 0.30 0.33 0.00 0.00 IGRF2005 93 13 3 0.28 1.72 0.00 0.00 IGRF2005 94 13 4 -0.43 -0.54 0.00 0.00 IGRF2005 95 13 5 1.18 -1.07 0.00 0.00 IGRF2005 96 13 6 -0.37 -0.04 0.00 0.00 IGRF2005 97 13 7 0.75 0.63 0.00 0.00 IGRF2005 98 13 8 -0.26 0.21 0.00 0.00 IGRF2005 99 13 9 0.35 0.53 0.00 0.00 IGRF2005 100 13 10 -0.05 0.38 0.00 0.00 IGRF2005 101 13 11 0.41 -0.22 0.00 0.00 IGRF2005 102 13 12 -0.10 -0.57 0.00 0.00 IGRF2005 103 13 13 -0.18 -0.82 0.00 0.00 IGRF2005 104 IGRF2010 2010.00 13 8 0 2010.00 2015.00 -1.0 600.0 IGRF2010 0 1 0 -29496.50 0.00 11.40 0.00 IGRF2010 1 1 1 -1585.90 4945.10 16.70 -28.80 IGRF2010 2 2 0 -2396.60 0.00 -11.30 0.00 IGRF2010 3 2 1 3026.00 -2707.70 -3.90 -23.00 IGRF2010 4 2 2 1668.60 -575.40 2.70 -12.90 IGRF2010 5 3 0 1339.70 0.00 1.30 0.00 IGRF2010 6 3 1 -2326.30 -160.50 -3.90 8.60 IGRF2010 7 3 2 1231.70 251.70 -2.90 -2.90 IGRF2010 8 3 3 634.20 -536.80 -8.10 -2.10 IGRF2010 9 4 0 912.60 0.00 -1.40 0.00 IGRF2010 10 4 1 809.00 286.40 2.00 0.40 IGRF2010 11 4 2 166.60 -211.20 -8.90 3.20 IGRF2010 12 4 3 -357.10 164.40 4.40 3.60 IGRF2010 13 4 4 89.70 -309.20 -2.30 -0.80 IGRF2010 14 5 0 -231.10 0.00 -0.50 0.00 IGRF2010 15 5 1 357.20 44.70 0.50 0.50 IGRF2010 16 5 2 200.30 188.90 -1.50 1.50 IGRF2010 17 5 3 -141.20 -118.10 -0.70 0.90 IGRF2010 18 5 4 -163.10 0.10 1.30 3.70 IGRF2010 19 5 5 -7.70 100.90 1.40 -0.60 IGRF2010 20 6 0 72.80 0.00 -0.30 0.00 IGRF2010 21 6 1 68.60 -20.80 -0.30 -0.10 IGRF2010 22 6 2 76.00 44.20 -0.30 -2.10 IGRF2010 23 6 3 -141.40 61.50 1.90 -0.40 IGRF2010 24 6 4 -22.90 -66.30 -1.60 -0.50 IGRF2010 25 6 5 13.10 3.10 -0.20 0.80 IGRF2010 26 6 6 -77.90 54.90 1.80 0.50 IGRF2010 27 7 0 80.40 0.00 0.20 0.00 IGRF2010 28 7 1 -75.00 -57.80 -0.10 0.60 IGRF2010 29 7 2 -4.70 -21.20 -0.60 0.30 IGRF2010 30 7 3 45.30 6.60 1.40 -0.20 IGRF2010 31 7 4 14.00 24.90 0.30 -0.10 IGRF2010 32 7 5 10.40 7.00 0.10 -0.80 IGRF2010 33 7 6 1.60 -27.70 -0.80 -0.30 IGRF2010 34 7 7 4.90 -3.40 0.40 0.20 IGRF2010 35 8 0 24.30 0.00 -0.10 0.00 IGRF2010 36 8 1 8.20 10.90 0.10 0.00 IGRF2010 37 8 2 -14.50 -20.00 -0.50 0.20 IGRF2010 38 8 3 -5.70 11.90 0.30 0.50 IGRF2010 39 8 4 -19.30 -17.40 -0.30 0.40 IGRF2010 40 8 5 11.60 16.70 0.30 0.10 IGRF2010 41 8 6 10.90 7.10 0.20 -0.10 IGRF2010 42 8 7 -14.10 -10.80 -0.50 0.40 IGRF2010 43 8 8 -3.70 1.70 0.20 0.40 IGRF2010 44 9 0 5.40 0.00 0.00 0.00 IGRF2010 45 9 1 9.40 -20.50 0.00 0.00 IGRF2010 46 9 2 3.40 11.60 0.00 0.00 IGRF2010 47 9 3 -5.30 12.80 0.00 0.00 IGRF2010 48 9 4 3.10 -7.20 0.00 0.00 IGRF2010 49 9 5 -12.40 -7.40 0.00 0.00 IGRF2010 50 9 6 -0.80 8.00 0.00 0.00 IGRF2010 51 9 7 8.40 2.20 0.00 0.00 IGRF2010 52 9 8 -8.40 -6.10 0.00 0.00 IGRF2010 53 9 9 -10.10 7.00 0.00 0.00 IGRF2010 54 10 0 -2.00 0.00 0.00 0.00 IGRF2010 55 10 1 -6.30 2.80 0.00 0.00 IGRF2010 56 10 2 0.90 -0.10 0.00 0.00 IGRF2010 57 10 3 -1.10 4.70 0.00 0.00 IGRF2010 58 10 4 -0.20 4.40 0.00 0.00 IGRF2010 59 10 5 2.50 -7.20 0.00 0.00 IGRF2010 60 10 6 -0.30 -1.00 0.00 0.00 IGRF2010 61 10 7 2.20 -4.00 0.00 0.00 IGRF2010 62 10 8 3.10 -2.00 0.00 0.00 IGRF2010 63 10 9 -1.00 -2.00 0.00 0.00 IGRF2010 64 10 10 -2.80 -8.30 0.00 0.00 IGRF2010 65 11 0 3.00 0.00 0.00 0.00 IGRF2010 66 11 1 -1.50 0.10 0.00 0.00 IGRF2010 67 11 2 -2.10 1.70 0.00 0.00 IGRF2010 68 11 3 1.60 -0.60 0.00 0.00 IGRF2010 69 11 4 -0.50 -1.80 0.00 0.00 IGRF2010 70 11 5 0.50 0.90 0.00 0.00 IGRF2010 71 11 6 -0.80 -0.40 0.00 0.00 IGRF2010 72 11 7 0.40 -2.50 0.00 0.00 IGRF2010 73 11 8 1.80 -1.30 0.00 0.00 IGRF2010 74 11 9 0.20 -2.10 0.00 0.00 IGRF2010 75 11 10 0.80 -1.90 0.00 0.00 IGRF2010 76 11 11 3.80 -1.80 0.00 0.00 IGRF2010 77 12 0 -2.10 0.00 0.00 0.00 IGRF2010 78 12 1 -0.20 -0.80 0.00 0.00 IGRF2010 79 12 2 0.30 0.30 0.00 0.00 IGRF2010 80 12 3 1.00 2.20 0.00 0.00 IGRF2010 81 12 4 -0.70 -2.50 0.00 0.00 IGRF2010 82 12 5 0.90 0.50 0.00 0.00 IGRF2010 83 12 6 -0.10 0.60 0.00 0.00 IGRF2010 84 12 7 0.50 0.00 0.00 0.00 IGRF2010 85 12 8 -0.40 0.10 0.00 0.00 IGRF2010 86 12 9 -0.40 0.30 0.00 0.00 IGRF2010 87 12 10 0.20 -0.90 0.00 0.00 IGRF2010 88 12 11 -0.80 -0.20 0.00 0.00 IGRF2010 89 12 12 0.00 0.80 0.00 0.00 IGRF2010 90 13 0 -0.20 0.00 0.00 0.00 IGRF2010 91 13 1 -0.90 -0.80 0.00 0.00 IGRF2010 92 13 2 0.30 0.30 0.00 0.00 IGRF2010 93 13 3 0.40 1.70 0.00 0.00 IGRF2010 94 13 4 -0.40 -0.60 0.00 0.00 IGRF2010 95 13 5 1.10 -1.20 0.00 0.00 IGRF2010 96 13 6 -0.30 -0.10 0.00 0.00 IGRF2010 97 13 7 0.80 0.50 0.00 0.00 IGRF2010 98 13 8 -0.20 0.10 0.00 0.00 IGRF2010 99 13 9 0.40 0.50 0.00 0.00 IGRF2010 100 13 10 0.00 0.40 0.00 0.00 IGRF2010 101 13 11 0.40 -0.20 0.00 0.00 IGRF2010 102 13 12 -0.30 -0.50 0.00 0.00 IGRF2010 103 13 13 -0.30 -0.80 0.00 0.00 IGRF2010 104 therion/geomag/test/0000755000076400010400000000000012050456016015502 5ustar userAdministratorstherion/geomag/test/build.sh0000755000076400010400000000021711331611334017135 0ustar userAdministrators#!/bin/sh swig -python -c++ geomag.i g++ -shared ../../thgeomag.cxx geomag_wrap.cxx -I /usr/include/python2.5 -o _geomag.so rm *wrap* ./test.pytherion/geomag/test/geomag.i0000644000076400010400000000011711331610200017076 0ustar userAdministrators%module geomag %{ #include "../../thgeomag.h" %} %include "../../thgeomag.h" therion/geomag/test/sample_out_IGRF11.txt0000644000076400010400000000530711327634202021372 0ustar userAdministratorsDate Coord-System Altitude Latitude Longitude D_deg D_min I_deg I_min H_nT X_nT Y_nT Z_nT F_nT dD_min dI_min dH_nT dX_nT dY_nT dZ_nT dF_nT 2014.5 D K100 70.3 30.8 13d 51m 78d 55m 9987.9 9697.4 2391.4 51022.3 51990.7 10.9 1.0 -10.4 -17.7 28.1 29.0 26.5 2013,10,7 D K100 70.3 30.8 13d 43m 78d 55m 9995.6 9710.4 2370.8 51001.0 51971.3 10.8 1.0 -10.5 -17.7 28.1 29.0 26.5 2012.5 C K6470 70.3 30.8 13d 35m 79d 4m 9814.3 9539.5 2306.2 50782.2 51721.9 11.0 1.1 -10.6 -17.7 28.0 28.7 26.2 2011.5 D M1042 70.3 30.8 14d 11m 78d 53m 10430.7 10112.6 2556.5 53095.2 54110.0 10.6 1.1 -11.1 -18.7 28.6 31.2 28.5 2010.5 D F30000 70.3 30.8 13d 56m 78d 52m 10407.4 10101.0 2506.6 52883.3 53897.6 10.6 1.1 -11.1 -18.6 28.5 31.0 28.3 2013.7 D F30000 -70.3 -30.8 0d -37m -60d 28m 19004.1 19003.0 -201.8 -33538.8 38548.7 -1.8 0.5 -34.1 -34.2 -9.8 70.7 -78.3 2013.7 D F30000 -70,18,0 -30,48,0 0d -37m -60d 28m 19004.1 19003.0 -201.8 -33538.8 38548.7 -1.8 0.5 -34.1 -34.2 -9.8 70.7 -78.3 2013.7 D F30000 43,22,1 -30,8, -11d 17m 59d 30m 23372.8 22921.2 -4572.1 39688.4 46059.3 10.5 -3.7 33.8 47.1 63.8 -40.1 -17.4 2013,4,7 D F30000 43,22,1 -54,36,9 -17d 52m 64d 15m 21481.2 20444.5 -6592.7 44546.1 49455.0 9.6 -5.8 42.2 58.6 44.6 -102.9 -74.3 2013,2,2 D K1.3 48.123 16.123 3d 33m 64d 25m 20929.8 20889.5 1297.7 43706.9 48459.7 7.4 0.3 9.0 6.2 45.3 27.2 28.4 2014,11,19 D K1.3 48.123 16.123 3d 46m 64d 25m 20946.0 20900.6 1378.9 43755.7 48510.8 7.3 0.2 9.2 6.2 45.3 27.2 28.5 2014.8849 D K1.3 48.123 16.123 3d 46m 64d 25m 20946.0 20900.6 1378.9 43755.7 48510.8 7.3 0.2 9.2 6.2 45.3 27.2 28.5 2013,4,7 D F0 43,22,1 -54,36,9 -17d 54m 64d 15m 21580.7 20536.2 -6632.4 44740.5 49673.3 9.7 -5.8 42.4 59.0 44.9 -103.3 -74.6 2010,1,1 D F30000 43,22,1 -54,36,9 -18d 24m 64d 34m 21344.7 20253.2 -6738.2 44881.7 49698.8 9.8 -5.7 41.6 58.6 44.6 -102.9 -74.9 2010,1,1 D F0 0.0 0.0 -6d 6m -29d 10m 27693.0 27535.9 -2945.7 -15457.8 31715.1 8.0 -8.1 -1.1 5.6 64.2 -85.4 40.7 2015,1,1 D F0 0.0 0.0 -5d 26m -29d 51m 27688.8 27564.1 -2624.8 -15884.7 31921.7 8.0 -8.0 -0.4 5.6 64.2 -85.4 42.2 therion/geomag/test/test.py0000755000076400010400000000163711331607274017052 0ustar userAdministrators#!/usr/bin/python import re,datetime,math,geomag units = {'K':1000, 'M':1, 'F':.3048} def deg2rad(s): m = re.match(r'(-?)(\d+)\,(\d+)\,(\d*)',s) if m: tmp = float(m.group(2))+float(m.group(3))/60+float('0'+m.group(4))/3600 if m.group(1) == '-': tmp = -tmp else: tmp = float(s) return tmp/180*math.pi for i,l in enumerate(open('sample_out_IGRF11.txt')): if i==0: continue (dat, cs, alt, lat, lon, dd, dm) = l.split()[:7] m = re.match(r'(\d{4}),(\d{1,2}),(\d{1,2})',dat) if m: dat = datetime.datetime(*(int(d) for d in m.groups())) dat = dat.year + (float(dat.timetuple().tm_yday-1) / datetime.datetime(dat.year,12,31).timetuple().tm_yday) else: dat = float(dat) alt = units[alt[0]] * float(alt[1:]) lat = deg2rad(lat) lon = deg2rad(lon) decl = geomag.thgeomag(lat,lon,alt,dat) print "%s %d %.0f %s %s" % (cs, int(decl), (decl-int(decl)) * 60, dd, dm) therion/lib/0000755000076400010400000000000012050456020014025 5ustar userAdministratorstherion/lib/grades.th0000644000076400010400000000126311102261006015624 0ustar userAdministratorsgrade BCRA3 -title "BCRA grade 3" # 95.44% of readings are within 0.5m (2 S.D.) length 0.25 metres # 95.44% of readings are within 2.5 degrees (2 S.D.) bearing 1.25 degrees # 95.44% of readings are within 2.5 degrees (2 S.D.) gradient 1.25 degrees # 95.44% of positions are within 0.5m (2 S.D.) position 0.25 metres endgrade grade BCRA5 -title "BCRA grade 5" # 95.44% of readings are within 0.1m (2 S.D.) length 0.05 metres # 95.44% of readings are within 1 degree (2 S.D.) bearing 0.5 degrees # 95.44% of readings are within 1 degree (2 S.D.) gradient 0.5 degrees # 95.44% of positions are within 0.1m (2 S.D.) position 0.05 metres endgrade therion/lib/layouts.thcfg0000644000076400010400000000101411400274562016545 0ustar userAdministratorslayout SCR200 -title "Computer screen layout" scale 1 200 grid-size 10 10 10 m page-setup 27 20.25 26 19.25 0.5 0.5 cm overlap 1 cm size 24 13.99 cm origin-label 100 100 nav-size 2 2 nav-factor 25 symbol-set SKBB endlayout layout AUT -title "Austrian symbol set" symbol-set AUT symbol-color group water [18 19 57] symbol-color group speleothems [87 39 23] symbol-color group sediments [50 42 39] symbol-color group centerline [95 0 0] symbol-color group ice [0 68 94] endlayout therion/lib/therion.th0000644000076400010400000000004607662022752016050 0ustar userAdministrators# input survey grades input grades.th therion/loch/0000755000076400010400000000000012270034367014216 5ustar userAdministratorstherion/loch/getline.c0000644000076400010400000000720410507531566016020 0ustar userAdministrators/* getline.c -- Replacement for GNU C library function getline Copyright (C) 1993, 1996, 1997 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Written by Jan Brittenson, bson@gnu.ai.mit.edu. */ #if HAVE_CONFIG_H # include #endif /* The `getdelim' function is only declared if the following symbol is defined. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #include #include #if defined __GNU_LIBRARY__ && HAVE_GETDELIM int getline (lineptr, n, stream) char **lineptr; size_t *n; FILE *stream; { return getdelim (lineptr, n, '\n', stream); } #else /* ! have getdelim */ # define NDEBUG # include # if STDC_HEADERS # include # else char *malloc (), *realloc (); # endif /* Always add at least this many bytes when extending the buffer. */ # define MIN_CHUNK 64 /* Read up to (and including) a TERMINATOR from STREAM into *LINEPTR + OFFSET (and null-terminate it). *LINEPTR is a pointer returned from malloc (or NULL), pointing to *N characters of space. It is realloc'd as necessary. Return the number of characters read (not including the null terminator), or -1 on error or EOF. */ int getstr (lineptr, n, stream, terminator, offset) char **lineptr; size_t *n; FILE *stream; char terminator; size_t offset; { int nchars_avail; /* Allocated but unused chars in *LINEPTR. */ char *read_pos; /* Where we're reading into *LINEPTR. */ int ret; if (!lineptr || !n || !stream) return -1; if (!*lineptr) { *n = MIN_CHUNK; *lineptr = malloc (*n); if (!*lineptr) return -1; } nchars_avail = *n - offset; read_pos = *lineptr + offset; for (;;) { register int c = getc (stream); /* We always want at least one char left in the buffer, since we always (unless we get an error while reading the first char) NUL-terminate the line buffer. */ assert(*n - nchars_avail == read_pos - *lineptr); if (nchars_avail < 2) { if (*n > MIN_CHUNK) *n *= 2; else *n += MIN_CHUNK; nchars_avail = *n + *lineptr - read_pos; *lineptr = realloc (*lineptr, *n); if (!*lineptr) return -1; read_pos = *n - nchars_avail + *lineptr; assert(*n - nchars_avail == read_pos - *lineptr); } if (c == EOF || ferror (stream)) { /* Return partial line, if any. */ if (read_pos == *lineptr) return -1; else break; } *read_pos++ = c; nchars_avail--; if (c == terminator) /* Return the line. */ break; } /* Done - NUL terminate and return the number of chars read. */ *read_pos = '\0'; ret = read_pos - (*lineptr + offset); return ret; } int getline (lineptr, n, stream) char **lineptr; size_t *n; FILE *stream; { return getstr (lineptr, n, stream, '\n', 0); } int getdelim (lineptr, n, delimiter, stream) char **lineptr; size_t *n; int delimiter; FILE *stream; { return getstr (lineptr, n, stream, delimiter, 0); } #endif therion/loch/getline.h0000644000076400010400000000177710537464734016043 0ustar userAdministrators/* Copyright (C) 1995, 1997 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef GETLINE_H_ # define GETLINE_H_ 1 #ifdef __cplusplus extern "C" { #endif # include int getline (char **_lineptr, size_t *_n, FILE *_stream); int getdelim (char **_lineptr, size_t *_n, int _delimiter, FILE *_stream); #ifdef __cplusplus } #endif #endif /* not GETLINE_H_ */ therion/loch/getvtkver.tcl0000644000076400010400000000113211567200360016734 0ustar userAdministratorsset ver 5.4 set incpath "/usr/local/include/vtk-$ver" set libpath "/usr/local/lib/vtk-$ver" set vv1 0 set vv2 0 foreach d {/usr /usr/local} { set ll [glob -nocomplain -directory "$d/include" -types d vtk*] foreach l $ll { if {[regexp {vtk-(\d+)\.(\d+)$} $l dum v1 v2]} { if {($v1 >= $vv1) && ($v2 >= $vv2)} { set vv1 $v1 set vv2 $v2 set ver $vv1.$vv2 set incpath "$d/include/vtk-$vv1.$vv2" set libpath "$d/lib/vtk-$vv1.$vv2" } } } } switch [lindex $argv 0] { incpath { puts $incpath } libpath { puts $libpath } default { puts $ver } } exit therion/loch/help/0000755000076400010400000000000012050456020015134 5ustar userAdministratorstherion/loch/help/en/0000755000076400010400000000000012050456020015536 5ustar userAdministratorstherion/loch/help/en/loch.chm0000644000076400010400000003301610645413630017167 0ustar userAdministratorsITSF`.T‡+ý|ª{О  É"æìý|ª{О  É"æì`xTÌþ6ITSPT ÿÿÿÿÿÿÿÿ j’].!Ðù É"æìTÿÿÿÿÿÿÿÿÿÿÿÿPMGLÖ ÿÿÿÿÿÿÿÿ//#IDXHDRþ /#ITBITS /#STRINGSŸe"/#SYSTEM¡(/#TOPICSž@/#URLSTRŸ \/#URLTBLžY0 /$FIftiMainÒa«8 /$OBJINST½"•?/$WWAssociativeLinks//$WWAssociativeLinks/Property½/$WWKeywordLinks//$WWKeywordLinks/BTree«tL/$WWKeywordLinks/Data¼@4/$WWKeywordLinks/Map¼t /$WWKeywordLinks/Property¼~ /loch.hhc†% /loch.hhk†%…M /loch.htm‹r ::DataSpace/NameList<(::DataSpace/Storage/MSCompressed/Content¢.§d,::DataSpace/Storage/MSCompressed/ControlDataj)::DataSpace/Storage/MSCompressed/SpanInfob/::DataSpace/Storage/MSCompressed/Transform/List<&_::DataSpace/Storage/MSCompressed/Transform/{7FC28940-9D31-11D0-9B27-00A0C91E9C7C}/InstanceData/i::DataSpace/Storage/MSCompressed/Transform/{7FC28940-9D31-11D0-9B27-00A0C91E9C7C}/InstanceData/ResetTableÊ0Eo †< Uncompressed MSCompressed{7FC28940-9D31-11D0PLZXC GÑ•F HHA Version 4.74.8702$ p_*RÄÇ loch.htm Loch Helploch loch.hhc loch.hhkYáY  T#SM®ê= ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿtp5oýÿï½émR¿c4⪵­Výæ¶¶[Ê6[®Ð½¸½·ò¶ÞöïõÛ{ÇY•vR*’T§P!tîÂC‡\†ŽîúBøú’T ú\ü08#B€VÞ€|Ûý}Ü÷¾#¡õ–Õ¿ZŠY’[–P&ö-:à(ØsÊù*7Q¶Þûð)cÂΑVpÏ=X=BBzm=²¬éuâìØ’¥iþñOÂ#P5Dó^[û–eÈ[­`,*¡ƒpA‰¡:ˆÛq:ÔñE²ázmC/hp>jkÛ.fBŸjKÏÍ®×íç C0ƒ;?Æ ŠëŰºÞ ­é¬2¢Ü]îË»²B­C“+scƒér#wèÎܳéÇY$žEs ©è6‡Åø$ÓÙõåÈãè(O]sAæ… 5Фy»ëË»XM¦Ó¥Næ¿Ãc3=6k3 m.kè‰þ¹ðDI†¾ËPŸÍ4#ІàÁX(ó¡©çO?Cnådð8êÒHéx_¨À]û±jB©ñìVâe6¶¸ýZ‚A²0÷Ì’k¨¥”óÃ*ELW;Q ~±PT GÜæ—A>õE¹(X‡ËÝù"‹„[ê721D†|þðÀ.Ê`UÉÔA¼^2×>>ážYÀ/å¿ …µ°g^.gÐ’Eº´¤Þ¥Yî'M m nXëä{`â·ý:2ò×riá l¸ei´žÄ)ƒgŽh*¿w ¸a°Rizaf37'.–Mç<–ìð¡l†¦"»¿Ç;w•…Û9šT!-c†T(85»,œù·­¿fL5ÇB€äéÛd…¡î@ÜÍóœõ×n=Œù²’¡û×·n¯½§ÛM‚•£­Ú|„cÅb', ©zž2Y™UŸ®LÖ æó¢\ÖlÝfmØh2þÓîf‡{•”áÇé}Geñã±)£´rw0ù è"ažFk<Zߘn¡Oú" kD‡Šbã!ÅÎ3µÇ.‹Ø7eD¸¨¹mÔÍɹ•‹¶X®Ò.îÓÅú”ú±¬¨×@¿£‹¾>$k3m ÊRÿS'ånsÝqe°c]äÅY|i.v:QLDÔ3H7àOBtf͘ŽCŒöu*Cüϸ’2°~njÆj#ჯg¾*Úx|¹x·{Å©x$ÊR¨¹ÕEáÀfÜùÎ&5™Ý«×üèˆó2j¹"fo›úônj(î±OgQD~N?{•Ï/ Ú½Á|E¯Ä”ÅŸ§ÕœSÿ&M[oÉ&k §Å€¹bÆ&Íç>ÒÅ®ÑqÀ«;us䌕lÅ  ŸÕMñ¾Ñ5T&ʾÉ6wÁ\ZÅ´²c*fÎÿ›°,Éš‘; ¯6n™˜í‘8ÍA yÒKõˆf±G¯{gf(ÓÈP`ЖQ÷—2–Êó¨²]r•‘…‘öåîÍÍ™~EAE–ßíL­ÔfŽúŒ“ã~Ï&;bÍf”öN]‰ùp9¶=º@Yº¹°¸R%öFâë>¨œ]UC$ÎR?Žæª¹TäðeIµ;{¿ŒW•¿‚ïvwxÂÉ¿ÿŘ“ª% ~­8qå °»HíÒî„«…–·ñ#ýERg¼¼YÃ>ÙúF‚ Hg…~­‹žox„p'‘ênð_Öø]@hØAûkZûFj*ï Æpˆv9/‘÷!r P(B¡(ôß3ùøÜá–0Ò÷h$âB\Jö±Û·!µ¾·ÅYk§ìã5Ú]kñ ~³õ¨~Ÿhk‡¡B…-Ë¢;0›)®"\vaa\É]ċŌ˜7B1Jµw Ü `IJ€U2š«”â°Y2]b–ü–Œs]R\ÁË[/[EÌF £Kxô’ér _áýrMÚqÍ¥K¸ô’®ôÈé’  ™2ä_Ðé%#ÀÓú@„}؈yˆZÌÃ]‚yà¥<>Ú‚Σù`L-Ùh¡Lƒji% NZŠZ©›²ÕBü†‚ÖÆÕ! D2f…].B27¼Çâ_BÔœ¹k±`DtÃæôÍIÆNž0pbõÀzíÃçä#º €=›ðÃçycwpx T21!–ª’Š ”]d-»„L0zdS*þ‚‡Q©4È·‹L(Ëå.›¤0‹ê¹‰@O°<¦¡p”§Ð6æÅ@ÚI;MGh ÑÏ:;€C¹ð“³Ø°µXG) Ü}Ö¡ ”ÁkvüGqzµ<”ØÂúÛ‡<@­¼\#ëP¥7Éy-Tà*[À‰ìQ€Ð:¯èÊÙë¼ÀV´¯“}€«è ÕØìÊ@tF…ª†óXKŠ ZB_Ø„<Ôµ¸þ朂Ýòã a£va#2ˆQŒ’ä@” bd £9%È(ÄÉ@ Fr1JQ2ˆ’@Œ äb” £d9w ¾°ïƒl¿²…?ŒÑ~¤/ï0=þ½.Œ*+Uû²´J­Ù‘6pøt©¾~†‚âS¦Î9ûq ŽM›8âî‡KM=[ºv0?:g¿³ZÓ§Óãk¡ µP²Z… FЖ5ªc}˜Æ–©¤|qýX[PÓN‡âV§N–ܶભïT?ªë“ªyÕAN!*À[µä‘R&µ×ÜñErÁ’êÕüx9f{¹Ùiîi Ö+2k…EöÀ·ÝãéRÖÁ1k—ÁÛCí¶wßâó@­0­[<ó›È?ƃN7Ü÷Å)÷\}yåÌQ]¥¸dÜr^¸ù? B¦l]¨?VBëÀîÕ—_Ž»©|ƒ߇¡nº.˜l»î)¬r%¿ú_U¿ÔùÚ=;âj°àjxÐo¼Kó#pÈc±±²ï¼I3õ£=(zëNpö½÷Ýî~n‡¨°`h) zZ>âØú×}øƒVذ*{jàOVµä÷àˆÛ°ûö{¦ü÷Aþ ØÇZ´¬Ø!]¬\wbýïßÁÝÀpìgX¿SÃWà dñ4ÊBwÁ'ÀÁArœðã#eæùðñÄþ6ž„çó±è¼jŸeˆ{{í©ÒôXýÃZÅefMVf›ÈÌ~8Ÿñ·ºt_Û}¬]&NlÙ,í½oGºâƒâ´úN„¢3³è«722³6L™ŽºéènúãNCNé¥äD®xN(›JôMåräÃ4ùïè)w{*3zå§ž9ºŸn§ê—:9gŸó·î7'fsÍeI6²ÞœºëHãéYþôÑÒ§Ni T¨ç5*-F['ÐR;c©ZaÊãù[§íiµÙBmõs˜:¨RC'ªUщ{mXZ'¬WI‰«íÒd›ë±hVÓ+õtÈšF¶ÛÔ‰ÛíŸp[͉­VÕO«aÎ}u%_ ÉánA8ö>¸áÖ ûmxãn‰¸Wׂ+ø}¢}û^îÞ”Ãåá~v“Ÿ»B›¤†ÞxûÞä_»k7WfÍæÈ"l1|°Ðu®W¢þ¯  ö5¾ŠXw]uŸe0ÛH†Oª˜ì¨xÛ»âú½¿Ì‚Õn/gç7 \K¼Xï«´ÜÅ p/æÜ©˜=NžÆ¨Åô «ëúR`yd_¬k2®Zm¶ŒJ¦  »/#´ÄתÎ|“½›ØÎŸX )lË ”uéaf‚Ì£Bm>sO™˜Ô&PfߦmÚ&Û«R pJ`[0£oŸ¶´š=n|¥Xë½ tx,j6¼ F 닊¸´¦&óƒÁ›9BP¨Ò¯¶4 K#+•U·‘–dKQ>©_Û¼gúisétÿ“¦˜/WMY½ oÍ;­8˜=¸êñ|€­eN­_ÖÌPÔ%Éê'”L9+§pŒuÃ÷±c‰sòÅõú¬Ý½[K3;×´S‰z*âä5ÅìŸÙ²8ëÆSG¦mfŸÍ‚W£1*˜2Ã[žf§³%¶ÕÉuž1]˜§b\˜§PX<ß(V?.Y2×1Zœ¦W™)_[Zçv /¶ÍTe eµv¶EÛ¶lX…Ô¿¿|6(gb[-1¯a+±O- _Ά¸è¹ð+£9%¤bÛµó«ËJÝ#³µsÓ­¶ ƒ'µ 1[!sX”¼ï t¤¦žâ›[jìÏׇ0ÊgÒAÁötººîäå|i¨%ó¸i+vUcÖQ¸‚ºª5Ë“)ÕY.(Ýyd|"0CE•ÈÔ”ÐÀ MKÀùzX€Ü Ôþ´9U'~ (ë}àa P¢”&9<:ˆýLÆÖÖß’ ÀÏaªÀ¥ ü5È¢zL3õ§±óÕ÷Ø£a¼tJÝ  „D§:ÏœŠü6œÞ«é,ôßÕ©ÉTæ@à¿°âÁþჅO¯ÞoJà‡5ÉòyŽÎŽd®Y€ü%2\Íf-¡%ø,íßø+|Nµ.R@AQ ô‰è li~çI¸ä˜ Äн·>døHÜ1Æð ]¿¸Á-ƒò_N'±;QÑS¨®Ù¸‘$Èä¶»x{f˜ry„ŽK2`$é¡ZŸ9¶z¾€ÝUöâ«ÀÉ`¤VÚÊ@xlN 9¯]XKõŒŠRäB¿üùƒ ú5³W»TÔ7¯«t†^ K7„ñ`";ßÅ>ä¡Np߆9ªyUû@OÕÿæŒêLHÞ Ê*ÐUùQi"gî´ÆJà·îpë`F™iâ/7`FÐm0È{Ž@¾9¸î3 èݼÙ“â °LrÇÄOŸGüwCÀI&ÉAqs_ž"2Ý3Ô<…ʘ*?ðo>?@Ü?²B­{þ½Œú|…¿¢o!µà<ŠþƒKQ°dÊÊuxÀl9 , Ô=æã.s?YÐ賤 Ç%Z_¡ÒŽÕïKèvÏÜW«‰½ Ñ3º‰õ7]§®oM».÷Ö-<÷­{K¯4Çéõ¯uþÊ\`"¾ #ÈpæY ïHRþPÅ`¿¾ø4ÀHf…Dð.rx¾£ ‘±Ñ¦cŠ¡…ô Ò9eô6¶„“«äƒ½K-¡" Lƒ”)ÏÚ~Â|Æž€î§ëÌA>(ÂPB#àDÔ}%G‹³÷óù|øŠª™GK,4äÖôþf´°¡±¹Î9!zÉ00ÿ¬|ïStnôò”Å‚{W¥ @O¾Ê'è¿·å'ZsM—YŸ~Ì”eÞèÞ d(Üį1"V¼•wí¬ò°y×ü×JãèWž(Wífrѳ%6äƒ #= ´Ù52&¥9™ZäDhÐ꯳›èóGw­²Ýr¡t¢ÙÈÓ=#uA½÷"qrÐCPâÏ›Ã}¯+é1eýãB½ ¨úÕ&rm*­Ã@8¡©‰J®³” ¸ý/¥Û$Jþ7ÆdªÊߤ¿© žì±ç’ÔáŸùHØ[k›Dï…"\™)JiÐ;ž>nDcö^ "J7ОdCö¾xŒWÉû×OA1}Gw°' È£lßÑ?l²g[âï¹Â (§P ÷{‹õ^kЃ%˜€‡Ã¿wm®òB …(¡P…B _(EÙ팤 „["ZoIý)BÚÁE$ ’ÓBj+lŠVðÈÜK}£­g1¦¤ïj’:é-ÛˆcHX‘Ò±›ôÿÜéå#]µ÷nùTºäöÿ¦*,?%!,ò¯_A.…B P(B¡ …(¡P…B P(B¡ …(¡P…B P(B¡ …(à_€(Pä€therion/loch/help/en/loch.hhc0000644000076400010400000000144510507014144017155 0ustar userAdministrators
therion/loch/help/en/loch.hhk0000644000076400010400000000131510507017352017165 0ustar userAdministrators
therion/loch/help/en/loch.hhp0000644000076400010400000000042710507017326017176 0ustar userAdministrators[OPTIONS] Auto Index=Yes Compatibility=1.1 or later Compiled file=loch.chm Contents file=loch.hhc Default topic=loch.htm Display compile progress=Yes Full-text search=Yes Index file=loch.hhk Language=0x409 English (United States) Title=Loch Help [FILES] loch.htm [INFOTYPES] therion/loch/help/en/loch.htb0000644000076400010400000000543410645413630017200 0ustar userAdministratorsPK­<5ëé )Í3loch.hhpSD,qñM=cd`ia``P`@FF…ÎUT †ØEàR•Fh‘“FU±jÃ0†÷{ŠÛ¡!,<”&&âÁtP•‹%r–„tçí«8¥´Ë ßñÿ÷]×ÚªÙ?ám•;ÓTœ(Á»‚ûeÙÊ­X-Vè#²ŠóÊ2ñ’gÁ^›…6CÆNÈIúƒÑ°¡‹YP|°úË›«êG†èûH)ÍÇË‘ùEhL¤¢63œÝþ•_¡V®UOÅrZ/_qëz¶ÉàÓ‡³’’…Ó3´VrªÎ)ÜèÊªÞæ¯} «öeÓžw ßPK¼}<5Iô3Ø,%3loch.hhcSD,qñM=cd`ia``P`@FF…ÎUT ÒEàR•Fh‘“F­R]o‚0}Þ~Å“½ag²·¡‰@,(ÆÕ,>6¬2 M©Ëöïw ã–%<øÒÛsÏ9m7 “€¶VlÃvïÇQŽKHDÙ’…í !tãÌo=;·….B,•0j^‰™óD7t·`ÉÎTÖFÔf欋TËF¾›;-²ÇNa%J¯R4¹Tð0™ZÖ‘ëÂKaDÅL'÷ຸIZÏO®ÿ™ Ì·B1#¾ i°”–JhSˆyn<Å5¯NŽ¢Šg‚!ÞO^qg)Ë7¡­ éèp¶m_Íá ôd©/¹78ö´Awßæ/,–)/{\)Ó|’›ªÃõ® ®e9T||¿–‰¨ñe‹:lãWǵŒøÇlð?ŒÏàsˆ „GÚÔaÛ¸ÿPK·<5ä@£X Í3loch.hhkSD,qñM=cd`ia``P`@FF…ÎUT šØEàR•Fh‘“F­’ÁOƒ0ÆÏøW¼u‰7¨K¼Ù-P†Á‚]ÌŽ V %¥3úß[¨™Q/¸´}í÷ÞïKú‘E˜ìt °cûG?Ž@.Æe÷‡,_0¦ Ú\‘áõ€ÃëiW¬ýú¥oB¢¬¡ú—(Tbk]ò„ªòEÂ?®X'áwà ì]4ÎY™q<Äë4ç æ8š»rJUÚíï£ÍöƒC¥Šïyòº¯°³Er¶á´T„§)hî?k6¯v è+]zÚ ›¤Ó'p¯Í]ÿFˆ®_[ÕHÉ48¼¶`•Ü êƒîˆxYj¹Þ2Z)ci¥UÌHb¨ÀŒåIŸ ýæv¨”†"J:O?‘ùõ_ÁáÕt¦JÌš>–¤"«5kƒê÷aºˆÝFÃÉUÔùI ·5Ü>`Ž$‚I•õɪYX"©’RmA¤œAƹùÓG.ÌÏ¢¥ø‡;Ô&fÒ…&aÉ2wŽöåÐj<šOX –.âʵ©¾š\Y‡ÌX<ÇûUʧ&VÕŽl…”t͉äc„ ©€„l…Í‘ ˜£‰§¡é{mØ?ˆâ²`÷ ¶"±ùA£æ~†¡F~7„A@žŠ™Ø¸o›Ÿh7ç¾ ì~QðpIÃíÍE g˜x-ï1½„òÿdß²“в1ŒŒàOíŽ uœ§DUÈSóxÓÚGxªdí/j\Zt"­S1yæÔx·XoÜ$1Èt¥½[„iŽ5,©€£zZ^QÓALNŽ¢žóJ]p©Rº[·ÃyýC9 ýo°93Ùé´tÜGÔ'ªè`¹eéà(Í&Ó¬M5Øì<|å¹ÎÌ í?¼Ó¿%¨ãʇ^Ñ/•¥[¥ïžÆ¤ÈܨtQÀPåð€ýˆåÐY }¢ïu´ÐÚR…>ºý‹¼yˆrÿ’ÿPK ­<5ëé )Í ¶loch.hhpSD,UT†ØEPK ¼}<5Iô3Ø,% ¶&loch.hhcSD,UTÒEPK ·<5ä@£X Í ¶«loch.hhkSD,UTšØEPK WGì6þæJ™€ ¶loch.htmSD,UT&Ñ•FPKê therion/loch/help/en/loch.htm0000644000076400010400000000761110645413566017222 0ustar userAdministrators Loch Help

Loch Help

Table of contents


Basic control

Function Mouse action Key

Zoom & Rotate Left click + drag
Zoom only Left click + drag up/down,
then hold left and click right
Ctrl + Up/Down
Rotate only Left click + drag left/right,
then hold left and click right
Left/Right
Pan Right click + drag Shift + Arrows
Tilt Middle (wheel) click + drag
or wheel rotate
Up/Down

Full screen Left double click F11
Context menu Right click

If continuous rotation is turned on, then rotation mouse movements change the speed or direction of rotation. If rotation is locked, then rotation mouse movements have no effect.


Off screen rendering

Loch is able to render large bitmaps that can be afterwards post processed and printed. Bitmaps can be exported in PDF, PNG or BMP formats. Configuration of export is dove via Rendering setup dialog. You can set following features:

Size and scaling

Screen shotScreen copy will be saved into file with no other changes.
Image widthContents of the screen will have given with.
Image heightContents of the screen will have given height.
ScaleContents of the screen will be exported in given scale.

Image options

Rendering resolutionResolution of the image file used when image size or scale are specified.
Image sizeImage size in pixels and uncompressed bytes calculated from previous settings.
White backgroundForce white background in exported image.

 

Known bugs

  • Sometimes empty rectangles appear in off screen rendered file. Changing window size usually helps.

Windows specific

  • Texture gets strange color pattern. Reloading model seems to help.
  • Passage coloring gets random. Restarting the program/computer helps.

Linux specific

  • Stereo mode does not work correctly on some graphic adapters.
  • This help does not work.

therion/loch/help/en/Makefile0000644000076400010400000000026610507614400017205 0ustar userAdministratorsall: loch.htb loch.chm loch.chm: loch.hhp loch.hhc loch.hhk loch.htm hhc loch.hhp loch.htb: loch.hhp loch.hhc loch.hhk loch.htm zip loch.htb loch.hhp loch.hhc loch.hhk loch.htm therion/loch/help/Makefile0000644000076400010400000000004710507252532016604 0ustar userAdministratorsall: make -i -C ./en make -i -C ./sk therion/loch/help/sk/0000755000076400010400000000000012050456020015551 5ustar userAdministratorstherion/loch/help/sk/loch.chm0000644000076400010400000003406610645414732017214 0ustar userAdministratorsITSF`.ôÙ‚ý|ª{О  É"æìý|ª{О  É"æì`xTÌþ68ITSPT ÿÿÿÿÿÿÿÿ j’].!Ðù É"æìTÿÿÿÿÿÿÿÿÿÿÿÿPMGLÕ ÿÿÿÿÿÿÿÿ//#IDXHDRŠ /#ITBITS /#STRINGS«_>/#SYSTEM¡(/#TOPICSª@/#URLSTR«\/#URLTBLªS0 /$FIftiMainÝz¬ /$OBJINSTÈ;•?/$WWAssociativeLinks//$WWAssociativeLinks/PropertyÈ7/$WWKeywordLinks//$WWKeywordLinks/BTree· L/$WWKeywordLinks/DataÇY4/$WWKeywordLinks/MapÈ /$WWKeywordLinks/PropertyÈ /loch.hhc‡$ /loch.hhk‡$† /loch.htm(©e::DataSpace/NameList<(::DataSpace/Storage/MSCompressed/Content¢.¬ ,::DataSpace/Storage/MSCompressed/ControlDataj)::DataSpace/Storage/MSCompressed/SpanInfob/::DataSpace/Storage/MSCompressed/Transform/List<&_::DataSpace/Storage/MSCompressed/Transform/{7FC28940-9D31-11D0-9B27-00A0C91E9C7C}/InstanceData/i::DataSpace/Storage/MSCompressed/Transform/{7FC28940-9D31-11D0-9B27-00A0C91E9C7C}/InstanceData/ResetTableÎ:0Fp ‡= Uncompressed MSCompressed{7FC28940-9D31-11D0VLZXC ‡Ó•F HHA Version 4.74.8702$ %‚SÄÇ loch.htm Loch Helploch loch.hhc loch.hhkYáY  T#SM×µF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ"c`$_ëÿ™»s”cŒó)¸p€¯eZT/njª|e¡Î§®º»»ã¿âÎcœDèDPEPDô ÀÈμ \>( 0 ("èr`˜ «ïC¼m÷}Ußû®Ò$]´6Š:I½%a'ö¥Å+ääÒCí–bɾ úò5·+´¶m_MVømB±T¬k–Þ/ɲd£$¸9²éù;§„ãHHÀÀŠÖoÛîVmÑT”bå‰"&€#ôH>óÞ¿W~cbžiѵ™šO ÙšŠÙP5™Ø¹¶Eé©•Ó¤dkek ¿lm†Œ? ú+Áâÿ[&÷F£7†(–µtÚùvV%¨ dµ°Ð´JVBR„:óÅ™ÒÌ„O&€3äæ×Ó¼ŒÏ<mSù¤_ʹÙÜgp‹„BÑòÁ”›pÂ=i™Ì­ŒñÒB9üš!QAkÃбÀôQn!\Zò-±-¡S‚“…lî5·)A|Ç4U^¥‰ŒŽ¥™~Š§ÈˆbµaІUy(pEú &a)y*Ô?ç³µ»›§ŒyhyËEB^6À|gáhßlU“_FŒ)8<÷ãÀ&ñ‹gˆ[ZPñpìâRÁ`HÇ7ÅâÜAñ8‚ðØÙhçbenFàmc¹‰ªdÄÇvl”Q}È –ýÇŸ.üHÊã ¢h³ÑGfD0Ìd:™ßm³^‡f[ÜM9ÎfÄ£ô&ý=³¡Ç}X1ë'ÐnS~-hÐaÁü¿uÁF@ H™)k² çS(>ûQõ÷y5kKÚÚ™ÙÙP¢GQ~}êwP옿ZZe^ža<²Wç§‘•°Eó훤™aÿ~|ÕÝ<Žáúô£ÞO ±ï÷ÀJ˜¨OŒ,“¸çÙ­c3f|ì–\ÿƒÑ˜VOEÎèqH–œÇ ’^ă/w½+ê°³€Êe8„çõWƒ€ÌÝýB« X%þWÍû†¶xù¹p92JÖò•mß9¥‰…?æyTt³Å#1©§8ÝÜïg¤&/çüzùƒŽÀŸÊ˜a#e6ì¼Ø‰–G½q²/:¢;iHKDæË;X¦I*!äÁ´FTas2š@G hnÈK›ö§@h!Î>Ÿ‹ñÄ#W‹l…#%&Ž^…ÖDèM•lÙÊå+È‘C4ò,r|A™<ðRow‘ŠóÛÚKc¥ˆw1çG˜š\UÏÄq5³ÝˆÊb?vee-óá^ ±Q45fŸØŽÐëÈ6ˆíb~2.„z¼ùçW^ÞÞXdQ õê— ¾bh *޲vû‚!Ü÷.Dåmó{DèÉ«1‹9Q«çü…¥À rËQº²YÂNãqBeðTe,B÷Á|±sÓ¾fÿÒ#lüÿðæåXb†Ù³Ð:ŠòSl±ÕeÏÍÒ¨þ¦'34)¥Ç¶¥Ây%h,q ’×ÌÎWÙdKÑxm–Ë6éÁœYÔ9Ï/-á´ýÿ±¹Þ…qçPE)( mâ\³È…ºµ®±?÷[$~¦ÔLXŠÔƒ»i›ŽCZvHÐʯԒ9¢j\Ò„ Ë‚æÃ—`éþâ0·0£åÿ'6y Ä’‡G’`NËï1#¢m<ͩޭCñVøW:‡¤Xu_RÀóÃ\þŠBä®lXÐò™Âš¤-Ô4J¡æ¯4—HÄ›J³¨6b #@)¨ÒKÅÅpJO(RÏUߤ¶ó2ë…I½ÔÂ2´ý_FJõqZóc¨|k; ž9LO0t„£2ŠL³lí;j£èÎÄQԺע1¡¯Ðì:eܽÕÿ ÛXd?ž†ºEÑ–šíHª©ãQ(¸èPðª¤xã/Rn1©Y%× ÚIAfd#ŽŸ©ƒ|CŒ; ’©ÿ®w‘_?ȆÉß+1¤w`ÆI<ÿµË„;~ábˆìÈ2k§€ILç<±õ3§Šl+j'Ü»*õeiw@N¦€Ïƒ³±­â`¿Ïñ'ôG¢,ââlê@ê"D(ldžÅ20Ò탼ÆÀ&ÄôÖr°š(Ç#9MQy†ì¨¹QdéÇü†˜#ääå“´–ÂxͪMÆfÐ+Ë+(B™Ž,Ñôu½ð£üÝM³{æ=âÐd=-!} qæ8ŒuUDÝóú猤ݣR蟆>:¨^F»{ˆ'Ì!VÐ- ôò(íÈ,ž¹Ë޶à6Цk¹¬úù<1æ¤We[ú¡Ò9“:Êæˆï¤„ÛöQv‡-IÖ2¤qúmqË2LqR™“hÚÅY‰A .Æpâ*/µ€&ÊA¥¤*‘êÚ?žIŽœã·™ÉB=*±«ž WA™˜Ë—ÁðÙäÊO Ø^œ5UØäkˆ®¬:Ê-À‚9!,ÜOÎÒ|x/µåãÐÕ}ë€x«ÕAÀûêªx#59yLñ&ÉDÊTó £ö@(•Röéæi%¾u.GÎ ]0=Àr#M ”-8ll! Ù?º'ì±àÈŠ<{9³mÃìÄg]ê3'®b„sÜÿ0´ãÛÈÓ8½}4-KÉÅLÛ.â'‚ÆY¯× °ëK:{rèÈIv¦ÑÀð‚A‹©èÅmÙ“G·ST˜v3 ©ëðßTïê:¤o–ÔÔÍxeËÅNú/ í)ÜF5 (έþ#¨AšFsþszþMa¼ÒîsáWo°“3£'Êž,šD+}á‘‘oãDT{ ç¼P Wê­Yëš  öô_ž…4Ïgöö:DγèÈ™ÞÂë{@úÊÞ#”µà§ÉñÆŠÝŒò¼†}@@`1€æ?‚ú€€\à8ïB0c¢0¯@1ÄÐ. Êq¯— H\ØÀ6€x9\còÄo¤ÃøðDÄâŸ>ØØ©9PŽ9öØ&\acàž¬8P•ì^ HJOWãô{ƒW¢Oâ@"ryÕMæaö³ ›‡¼ÚBUË-ç_D±Ý“§ö§-žµJXJ…‡¯ð›0Pu·¢„o ä‡ÄeÑgÈq‹¾Uú-$'ü|…T ÷ÊòÃHiŒƒú°i*ƒPŸþb%צ‡/Òä%Áöš7¼À¥q¢¯ø¦"º6*ú„oã <øžÃwmòA|øÆ¢—¦8÷ÒSÑl7>öšŠ `|ãÑWlS"ö7‹¾è棠`lBl³²Ë(XÓ8øxC;e bEL”ŒÂÆ*3?p &³¨)Ž£/ h¹ BL€MÅâ·ýP4”\|±d  H¹‚TQ3ão‰£°#!7ÌmàŒ©QgÄ"#T ´7tFÜ(A£ØÈV ®x5èŠ\¾<2‡äL¦ßä ,t¤°ÔÇSŠw…û N²ÁÜÌ_"”Îk‹ƒdv3iÑ$XŒ]¶AFn¹IA”I™í7 BIØ|ÂÇ IÄÚ–ÆI ~bÕ¨F ÆÌ6Î ŽÄˆ367ëHƒ@I\Ò× Gb„šXpOÛdú™ƒ‰N¡ 4šü±Û¢‰ˆ¡ò1èh ‚'Mí¸ ¢&XEån›<¬AéD‚MF©òVMŽj:Èt$©Îýü¢ñpþŒÈ<„Œz?BFTŽÂâ0¦‡q0Œ£©8…Åa(Lãa*GSq8 ŠÃQ˜ÆÂT0ަâq‡£08Œ…©arÓ|Æ¡@ä…ÜèòÅ ØQ̬x;£è€êéXaÝ@K7Í”N—¾¥κë,ÙV)Δ¦›æzÝÀn·•Wçz5ÔuMuÜ»ïíÛOïSÑ©†é¸o¼ h†y£ó®OŸ[·ež‰q*0Çf7õA½h‡FߣP—½7óíê©R‘=»©S¼óBê€W•*{NHžˆLZ57¯¤ÍJ”ßAÎ7œs H°}÷øá„t>j5ªµ‘Ô\Zýs¿Ò\Šo^ è¯Yøß3Î!òa l³ftÑxIgz™ƒðÀ‹/ð€\j΃û:èŠê‚™ü€jÕaÃdz„4üt ÍÜð¶5ÛÁQÈ#Fˆ0âÛ¼â˜xM"IâŠÞ¸é5Àø-€c«¨ýèóƒe>Ìš¸õƒ+Û<w´´ºõÇéñ5À4Cݺ©^Öàjë¤~Í}çï|U7k€Ë•Ï… ù“ 7$7üÉ'¨L­’=€áf7¹(ÃI _έ3 2¬kHGËÄŸÓŽy”!_…3!FÏe-ˆCáÅÄ0¼ 䲓FÑ Ø'+i&F¾ŸC,Ý|Þð`ˆ†âw5ë’Aî³Ú ßÞdå;OlÊúÄábêûàWÏ(jðÞŸ/×î3ùÜ ~…FjÒ@MQ¸¡Ç·þÅgCÖ¼—"ÈpM¬!Û:Ó¦“g™¹} ’±Q•UôBn~0ëÆ!èÖþñ²¨áã®,œ¿œ§<|Ò¨¬ ÿ¼X~jËÓMH!8¦(6GB–yO·Ž• ‚ §¯á¼9*¸µµÉå>îY«‚lѪø'V¥ÛŽPï›8þŒ’+U/î…H² ¼p½mOÃX[„b¶¬ä*‚<úBm^üvшòè-„<1©Tâöºz¶Ž¼ÅoÐ8`)&ªQ3Hº³{„ÉÌU^ÉÎ…J™]`ëÃeI!ÇŸKFѸÜ3›£qÆe¥*l„çöd›K‰i‡Jhf„p …éuX[âPàSGç޺İODàå©É¯úX•@ßÛÉ»Ø;ì©x¿ ,>'q~æÿiM‰ËY<À{_¾'…Å–ƒKðÈæiµÕŸp?Ù‡ü2â¡<-OR‘Ø2㈠‡5>PòËA%;_J\¥VÕÞઅ=ìç©Ì˜=¯TÊ"=c)Ž6¬ìѹñ?E,d³G.+;.t —+ñÍQ󸼱g¢GÙJvúÌÎd©¬×[9Ñ`PZ‡IW'Q)'áñhúäxh÷ŸNˆ7ÊQÏ÷úsAê=uTÁ=2ó=UX^·ÆD_fºPîÆ72]Zƒ¢™v |>n›êÙ wž§¿Ï­¾×ò:}k7àùï{Û®‘6`¬/adZ^'éá!‚µÂ9_ªú„kÿÿ_ýÑG‚ ;é:ÈdÖÁø½„øúSäýì “Ç^gBùçY&"HK‘xo`u÷_°W00000000000000é?í5Iîפ¿¥Jå ÿÙT $½)¹“T›D]"]½â€ìMdxh·_¢kéÛü‹‘$“­­¢«Êe$ÅHÜÆûiïËï[{Ú?óñ_M@û @2ù= ¡¿D÷ÀüÜ;À0°00000000000000000000000000000000000000?0ð(V €therion/loch/help/sk/loch.hhc0000644000076400010400000000160710645414600017174 0ustar userAdministrators
therion/loch/help/sk/loch.hhk0000644000076400010400000000135310645414614017207 0ustar userAdministrators
therion/loch/help/sk/loch.hhp0000644000076400010400000000042710507017326017211 0ustar userAdministrators[OPTIONS] Auto Index=Yes Compatibility=1.1 or later Compiled file=loch.chm Contents file=loch.hhc Default topic=loch.htm Display compile progress=Yes Full-text search=Yes Index file=loch.hhk Language=0x409 English (United States) Title=Loch Help [FILES] loch.htm [INFOTYPES] therion/loch/help/sk/loch.htb0000644000076400010400000000613110645414730017210 0ustar userAdministratorsPK­<5ëé )Í3loch.hhpSD,qñM=cd`ia``P`@FF…ÎUT †ØEàR•Fi‘“FU±jÃ0†÷{ŠÛ¡!,<”&&âÁtP•‹%r–„tçí«8¥´Ë ßñÿ÷]×ÚªÙ?ám•;ÓTœ(Á»‚ûeÙÊ­X-Vè#²ŠóÊ2ñ’gÁ^›…6CÆNÈIúƒÑ°¡‹YP|°úË›«êG†èûH)ÍÇË‘ùEhL¤¢63œÝþ•_¡V®UOÅrZ/_qëz¶ÉàÓ‡³’’…Ó3´VrªÎ)ÜèÊªÞæ¯} «öeÓžw ßPKîHì6tîw¤3loch.hhcSD,qñM=cd`ia``P`@FF…ÎUT 0Ó•FàR•Fi‘“F­“ÍNÂ@€ÏšøCM¼••ă …hL¡K Þ–v  ÛnÝn‰<.G^Á“Ý-AšÈeÿ:óÍ×íÔªÙ^ÏŸOø#&³®;ìa2tü>!¶oë'„8c£}ui©žŽ­æ%…”&Ø2œ±3íøÞÔ€€§SÙ2Fq xΗòFàªY Ëà™‹uñ îê ãФÌL|-âMËèU Óßfø…(ñM’H&¬ ADE޲UÈ¥y¯!5Ó„§XbB3hÔoÁ4Õ)ѲV׳çjëuž²äpy™™à c®PVFM¯6Lè +‘ eEyÒç,D¡‹’ ¨–3W§ºÃ6üQ¦4Óøïüq9ÑÞ"§Ñ/A.(;F1DõòŸÿ-ÿ²[3¦{à¶ iãÉ.×ê› ÎÎî4Å4|£d ä¿/¸(N×Ré(âtuþËJw‰nÛ'ÛÓºÅ*ÿ!cÝ?ÑZ¶mõ¯}PKôHì6l9‚=73loch.hhkSD,qñM=cd`ia``P`@FF…ÎUT <Ó•FàR•Fi‘“F­’¿nÂ0Æg*õŽTê\¤n5H$q U ˆUts7‰ðŸÈ1¨<.#¯Ð©q‚º´‹Ow¾»ï§Ó‡ûAäÇ›%i<a¹ö™Ž‹ÐŒÄÏqÐþ DÎøöÛ¤dØ(˜¡ ©`#ç…,ÈjG+R% “fäÌËT«Z}š{Íò§NdÊxïJoëBUð8¶‹û® o¥a‚V0<€ëÚ*ju°›®­v‡³1àÈ{%~ æP5Ú†}Twãv]¯‡+ª©8£-š×=å»&‰’šÿ4…*¥ü·‹«´FœQ'wùã–ÓLž@íù1£²d³ÜùÍ]µâWgZ1™iµ·0)¨¿¥w—cÙq¦K™_ÿXò(TZ%ü$—y»¼þƒQëŒZ;5Þê¼üPKIì6½‘áŽHå3loch.htmSD,qñM=cd`ia``P`@FF…ÎUT „Ó•FàR•Fi‘“FÅXÍnÛF>§@ßaªA‹Ú"œ\І YRmD¶Gq‘Ü–âÚ¢¹ä²Ë%kê rñ;T‡rð)=¹°{ ô<}…Îr)Š’ÿèØAuÑ.¹;óÍÌ7³Ãý÷ïÌïÚû[ƒwýγíÁnúo[½­gµuÃØé º†Ñ´³7†ÑÙ«5¾ýÆTü0·;Ív6±G%‘”Á:ý=râÍÚ÷%õåú h †z¶Y“ôT#é±W0R¹É£õŸksAƒA¯ÓèñáÈ4ô8ÓeÊÌÖ~ûÝ|uwoÝæVg³¶MYL¥3$sQ áF. ‹‡/ûVHÔÓ‹§o{Åg½Ò çMØ>èt7kß+³gµÆûtâ2bûé'à1K'6ñjÍJR¨oSáøÇµ† «Ý`sÓ ‹‹¨ª Vt"?xÁ-–~òµÛ4J›L£džÙo˜­ƒÒ»þbÜ„½ænGG/3³½u‹Ñe?–€›ƒf«×!eìM@†hîfíE-›÷‰mçó²ŠÁÁ²ƒ6ÄMæûHÔw£ùîÐ!¦ÑBí{×ï—pVÜòwÄ4¼INî,m¤: ‚â^¢°í•÷†´ mÛ{Î=xN¼àp™N¦gÚ¬ûLš^’#&™ž¥çÒåð<Œü Þx˜ù«Ûw,cýŒ0â‚6gt­ÌZý ¸DØbvEf‘ÿ™ .s\?½ÀGÓ«±÷#Ù’‚¡òm¥¶ÍYô.x’`A¬ŒáF¬Ìä÷:#·¼ìŒÜ?qÆ¡Öy˜é|¤'úÕ(×_EY­oFΑÄå³?ÓóÀM‰÷Ëx¥RЬ"–ÿàræÐÐå?௅‹0jñ5 ßCîW9çæ*þßê´E±n·ó¸Š혟(vj®^z%V¨ÝGx—ú«Ù]…«š8Q§bù4^¬lºpBaL?B^‰0£ ö4.N„¢ ž|k ‰‹¤%xÉlÂ#𨟞ƒH/‡#ÆCÌtͭУb!;ßOëJË\˜Vç¹™¾$ûfðzˆ X×oìîh)°9(ÚŠJ}Ïr?ÑÏ:8ðÒ¿fWD¾ mD¢¥“±›@Ì!NBޤA³Æ,=ŸM”?ÖÀ•\`äÐDÏ®TŠbŸ2ÌVZ _ˆµm¨E”ÅÙ™}¬Ãþ\A¦;+Á%ô4àB*Ü(.†~»»ý½_s·vûpÄ:KÒzIÇkî9Ç‘Ð>×2" ¶0rظ…ºŠœe¬Š¸CXúù˜#ñFX#\ ƒÙÙmì‘P’˜*—‰Â}˜høª¬m7󕤈oö¥ùÙ6´IÐ|#ø_–‚4zÙ8¤Ó+W³<‡ •Áø¸X"‰ÅèCš9)®UŸå,AدÓÏCžûV¼šWŽ$3h¥ݰ¿]°¬È¦1Œ2F~‚þ¤¡úw3éEIJê×*ÜÆJˆÕÙ‚¾) +ŠDgŸ 8¶§˜7›tè9nƬ œ+-ÑS>L/g“¯8δ< àÝœ|_ް”¤—˜ØýÓÍiz'@œ(’/¥E‘sÎûêyqP2Õ3VòDyK«¹ëé•Ê”•˜©ÂˆÅK&I^ÀòÌ)+ÒµàI˜8¯0_ÄÅÃ$àÙ LTjÇEµ*LÁâ¶:+žWxÂñ4ð™EN¤zp»²"4ÙŽðqLNÒ‹¡ƒ‹ü<æéy} Òã]Ðr(£Úü€‰]9ºÙFÈ÷ © Šc/\°Ž+¢ÙUzuº tßâ<Œöý††xãÕ€¾rX¹¸vqÛ•@ÄÊ[™³dõá-f…*÷°KñcRezvdâ+ÛOÔxbŠhĆ˭Ã{l†ÈœÒч§º{âËA×HQn‚‚O|ôi":›(W•`™F ±¹ýë¿N"ìÉ>)îÀoŽoó?B4¹Tî¸MÐS™^`ÆyŠo€ÙêR;éYd«BzDµ²Š:æx¬aDóÞGv0öy¬3 بܦ¨K„•ÀpÄ‘1VV0J8Ãԯõ`ûK’9<û>äÇ‚xóRgÛô¬~Ç]ÒMé9~tZÙû:²>=Šü㛵PRA9v]Ÿí»4cËYÐÓ4ÔE`61ü~è›ÊÿPK ­<5ëé )Í ¶loch.hhpSD,UT†ØEPK îHì6tîw¤ ¶&loch.hhcSD,UT0Ó•FPK ôHì6l9‚=7 ¶öloch.hhkSD,UT<Ó•FPK Iì6½‘áŽHå ¶†loch.htmSD,UT„Ó•FPK' therion/loch/help/sk/loch.htm0000644000076400010400000001212010645414724017221 0ustar userAdministrators Loch

Loch

Obsah


Základné ovládanie

Funkcia Ovládanie Klávesa

Zoom & otáÄanie Ľavé tlaÄítko + posun
Iba zoom Ľavé tlaÄítko + posun hore/dole,
potom držaÅ¥ pravé a kliknúť ľavé tlaÄítko
Ctrl + Hore/Dolu
Iba otáÄanie Ľavé tlaÄítko + posun vľavo/vpravo,
potom držaÅ¥ ľavé a kliknúť pravé tlaÄítko
Vľavo/Vpravo
Posun Pravé tlaÄítko + posun Shift + Šípky
Sklon Stredné tlaÄítko (koliesko) + posun
alebo otáÄanie kolieska
Hore/Dole

Celá obrazovka Dvojklik ľavým tlaÄítkom F11
Menu Pravé tlaÄítko

Ak je zapnutá automatická rotácia, tak pohyb myšou mení rýchlosť alebo smer rotácie. Ak rotácia je zamknutá, tak pohyb myšou na ňu nemá vplyv.


Rendrovanie do súboru

Loch môže rendrovaÅ¥ obrázky vo vysokom rozlíšení, ktoré je možné následne spracovaÅ¥ a vytlaÄiÅ¥. Obrázky môžu byÅ¥ exportované v PDF, PNG alebo BMP formáte. Konfigurácia exportu sa robí prostredníctvom dialógového okna Nastavenie rendrovania. Môžete v ňom nastaviÅ¥ nasledovné:

Veľkosť a mierka

Kópia obrazovky Do súboru bude uložená presná kópia obrazovky.
Šírka obrázku Obsah obrazovky bude maÅ¥ Å¡pecifikovanú šírku.
Výška obrázku Obsah obrazovky bude maÅ¥ Å¡pecifikovanú výšku.
Mierka Obsah obrazovky bude exportovaný v danej mierke.

Nastavenia obrázku

Rozlíšenie Rozlíšenie obrázku pokiaľ sú špecifikované jeho rozmery alebo presná mierka.
VeľkosÅ¥ obrázku VypoÄítaná veľkosÅ¥ obrázku v bodoch a nekomprimovaných bajtoch podľa predchádzajúcich nastavení.
Biele pozadie Biele pozadie v exportovanom obrázku - používa sa pri tlaÄi.

 

Známe problémy

  • V exportovanom obrázku sa obÄas zobrazí prázdny Å¡tvoruholník. Zmena veľkosti okna tento problém obyÄajne vyrieÅ¡i.

Špecifické pre Windows

  • Textúry majú niekedy Äudnú farebnú vzorku, pomôže súbor znovu naÄítaÅ¥.
  • Farby chodieb sú náhodné. Treba reÅ¡tartovaÅ¥ program alebo poÄítaÄ.

Špecifické pre Linux

  • ObÄas nefunguje stereo mód.

therion/loch/help/sk/Makefile0000644000076400010400000000026610507614400017220 0ustar userAdministratorsall: loch.htb loch.chm loch.chm: loch.hhp loch.hhc loch.hhk loch.htm hhc loch.hhp loch.htb: loch.hhp loch.hhc loch.hhk loch.htm zip loch.htb loch.hhp loch.hhc loch.hhk loch.htm therion/loch/icons/0000755000076400010400000000000012050456020015317 5ustar userAdministratorstherion/loch/icons/about.xpm0000644000076400010400000031571510763711616017211 0ustar userAdministrators/* XPM */ static const char * about_xpm[] = { "224 224 257 2", " c None", ". c #000000", "+ c #010101", "@ c #020202", "# c #030303", "$ c #040404", "% c #050505", "& c #060606", "* c #070707", "= c #090909", "- c #0A0A0A", "; c #080808", "> c #151515", ", c #131313", "' c #0C0C0C", ") c #141414", "! c #181818", "~ c #0D0D0D", "{ c #0B0B0B", "] c #0E0E0E", "^ c #0F0F0F", "/ c #111111", "( c #101010", "_ c #121212", ": c #161616", "< c #171717", "[ c #191919", "} c #1A1A1A", "| c #222222", "1 c #1F1F1F", "2 c #232323", "3 c #1D1D1D", "4 c #2A2A2A", "5 c #262626", "6 c #212121", "7 c #1E1E1E", "8 c #2B2B2B", "9 c #2C2C2C", "0 c #313131", "a c #1C1C1C", "b c #1B1B1B", "c c #292929", "d c #2F2F2F", "e c #242424", "f c #404040", "g c #202020", "h c #424242", "i c #2E2E2E", "j c #3A3A3A", "k c #272727", "l c #3C3C3C", "m c #3E3E3E", "n c #4A4A4A", "o c #323232", "p c #363636", "q c #434343", "r c #383838", "s c #303030", "t c #2D2D2D", "u c #373737", "v c #393939", "w c #282828", "x c #3D3D3D", "y c #444444", "z c #343434", "A c #252525", "B c #353535", "C c #333333", "D c #515151", "E c #474747", "F c #464646", "G c #3F3F3F", "H c #4D4D4D", "I c #414141", "J c #575757", "K c #4F4F4F", "L c #5C5C5C", "M c #5D5D5D", "N c #454545", "O c #565656", "P c #5B5B5B", "Q c #494949", "R c #696969", "S c #3B3B3B", "T c #585858", "U c #535353", "V c #484848", "W c #555555", "X c #4C4C4C", "Y c #505050", "Z c #4B4B4B", "` c #4E4E4E", " . c #5A5A5A", ".. c #606060", "+. c #5E5E5E", "@. c #595959", "#. c #6B6B6B", "$. c #717171", "%. c #616161", "&. c #666666", "*. c #676767", "=. c #747474", "-. c #828282", ";. c #808080", ">. c #707070", ",. c #545454", "'. c #6D6D6D", "). c #656565", "!. c #636363", "~. c #6F6F6F", "{. c #7F7F7F", "]. c #8A8A8A", "^. c #525252", "/. c #8D8D8D", "(. c #818181", "_. c #9D9D9D", ":. c #626262", "<. c #5F5F5F", "[. c #898989", "}. c #A0A0A0", "|. c #959595", "1. c #8E8E8E", "2. c #848484", "3. c #767676", "4. c #8F8F8F", "5. c #A4A4A4", "6. c #AFAFAF", "7. c #979797", "8. c #838383", "9. c #787878", "0. c #8C8C8C", "a. c #868686", "b. c #9B9B9B", "c. c #ABABAB", "d. c #858585", "e. c #777777", "f. c #646464", "g. c #999999", "h. c #727272", "i. c #7E7E7E", "j. c #929292", "k. c #7B7B7B", "l. c #6A6A6A", "m. c #A8A8A8", "n. c #737373", "o. c #919191", "p. c #9F9F9F", "q. c #A7A7A7", "r. c #C4C4C4", "s. c #7C7C7C", "t. c #AAAAAA", "u. c #7A7A7A", "v. c #939393", "w. c #BFBFBF", "x. c #9E9E9E", "y. c #797979", "z. c #9C9C9C", "A. c #A9A9A9", "B. c #7D7D7D", "C. c #B5B5B5", "D. c #B0B0B0", "E. c #B8B8B8", "F. c #686868", "G. c #878787", "H. c #A1A1A1", "I. c #949494", "J. c #B2B2B2", "K. c #BABABA", "L. c #909090", "M. c #969696", "N. c #757575", "O. c #6C6C6C", "P. c #6E6E6E", "Q. c #CFCFCF", "R. c #A6A6A6", "S. c #AEAEAE", "T. c #B6B6B6", "U. c #ADADAD", "V. c #B7B7B7", "W. c #B3B3B3", "X. c #C5C5C5", "Y. c #ACACAC", "Z. c #B1B1B1", "`. c #B9B9B9", " + c #B4B4B4", ".+ c #BCBCBC", "++ c #C3C3C3", "@+ c #C2C2C2", "#+ c #C0C0C0", "$+ c #C7C7C7", "%+ c #CDCDCD", "&+ c #CBCBCB", "*+ c #BEBEBE", "=+ c #C1C1C1", "-+ c #989898", ";+ c #D6D6D6", ">+ c #E0E0E0", ",+ c #D0D0D0", "'+ c #DDDDDD", ")+ c #DFDFDF", "!+ c #D1D1D1", "~+ c #BBBBBB", "{+ c #888888", "]+ c #C9C9C9", "^+ c #DADADA", "/+ c #F2F2F2", "(+ c #F0F0F0", "_+ c #A3A3A3", ":+ c #F9F9F9", "<+ c #E6E6E6", "[+ c #DCDCDC", "}+ c #CECECE", "|+ c #EFEFEF", "1+ c #EDEDED", "2+ c #F4F4F4", "3+ c #F3F3F3", "4+ c #F7F7F7", "5+ c #E3E3E3", "6+ c #D9D9D9", "7+ c #BDBDBD", "8+ c #A2A2A2", "9+ c #E4E4E4", "0+ c #FBFBFB", "a+ c #ECECEC", "b+ c #D4D4D4", "c+ c #E7E7E7", "d+ c #C8C8C8", "e+ c #D8D8D8", "f+ c #CCCCCC", "g+ c #E5E5E5", "h+ c #D2D2D2", "i+ c #A5A5A5", "j+ c #DEDEDE", "k+ c #CACACA", "l+ c #D5D5D5", "m+ c #D3D3D3", "n+ c #9A9A9A", "o+ c #EBEBEB", "p+ c #D7D7D7", "q+ c #E1E1E1", "r+ c #C6C6C6", "s+ c #8B8B8B", "t+ c #DBDBDB", "u+ c #E9E9E9", "v+ c #EEEEEE", "w+ c #FEFEFE", "x+ c #FAFAFA", "y+ c #F8F8F8", "z+ c #F1F1F1", "A+ c #F6F6F6", "B+ c #F5F5F5", "C+ c #E8E8E8", "D+ c #FFFFFF", "E+ c #FCFCFC", "F+ c #FDFDFD", "G+ c #E2E2E2", "H+ c #EAEAEA", ". . + + + @ + + + + @ # # # @ $ % $ # % $ # @ @ + + + + + . . . . . + @ + + + + . + . . + + . . . . + + + + . + + + + + + . + + + + + + . . . . . . . . . . . . . . + + . . . @ $ $ # # $ $ @ $ % % @ + + + + . + + + + + . + + . . + + + + . . + + . . @ + @ + + . . . . + @ @ + @ % & $ * = - - * $ $ % ; * $ $ & & % $ $ & % $ # # $ $ % & ; = & @ + @ $ % % # $ % # @ + . . + + . + + . . . + + . . . . + . . . . + . . . . + + @ + + + + $ $ # + + + + + . ", ". . + + + + @ @ + + @ # @ @ @ # % $ $ # $ $ # @ @ @ + + . . . . . . + + + + + . . . . + . + + + + + + + . + @ @ + + @ + + + + . + + + + . + + . . . . . . . . . . . . + + . + # % $ + @ $ @ # % % % $ @ @ @ + @ # @ $ # + + + + + + + + + + . + + + + + # # @ + + . . . . # # + + @ % $ $ $ * - = - % # % $ $ % & ; ; % # $ % $ @ @ # % $ * > , ' % + + @ # $ $ # % % # + + + + + + . . + . + + + . . . . + . . . . + @ . . + + + + + + + + # # @ @ + + + + + . ", ". . + + + @ @ @ + + @ @ @ + @ $ # # # # # $ $ # # @ . . . . . . . + + + + . + . . . + + . + + + + + + + + + @ @ @ @ @ @ @ + + + @ @ @ + . . + . . . . . . . . . . . + + . . + $ % # @ @ @ + @ # % % $ # + @ @ # $ $ $ @ + + @ + . + + + + + + + + . + + # @ @ @ . . . + + # $ @ + @ $ $ $ % * ; = - * # # # @ * ; = * # + # # @ # # % ; ; ' ) ! ~ # + @ # # # $ # $ & # + + + + + + + @ # + . . . . . + + + + . . . + @ + . . + + + + + + @ + + + + + + + + + . ", ". . + + @ @ @ @ + @ @ @ @ + # $ # # $ # $ $ % % & # . . . . . . + + + + + + + . . . . + + + + + . + @ @ @ @ @ + + + @ @ @ + @ # @ @ # + . . . . . . . . . . . . . . @ . . . . # $ # @ + + . + @ # $ # # # # @ # @ @ . + + + # + + + + + + + + + . . + @ # + + @ + . . + @ @ # @ # % % $ $ % % & = - & # @ + # $ = ~ = @ + + # @ $ $ { - ~ ] ' ' ; @ + @ @ # $ # # # @ + . . + + + @ @ + + @ . . . . . . . + + . . . + + @ + + + + + + + + @ @ + + + + + + + + . ", ". . . + @ @ @ + + + @ @ @ @ # $ $ % % # $ % % # $ @ + + . . . . + + + + . . . . . + + + + + + + + + @ + + @ @ + + @ @ @ @ + + @ + + @ + . . . . . . . . . . . . + # $ + . . . @ # $ + @ @ + . + # % $ $ $ $ @ + . . . . . # @ + @ + + + + + @ + . + @ # @ + + + + . . + @ # % # # * - ; % % # % - = % # + @ % $ ; ^ ; $ # @ # # & ; = { ' / ] = # + . $ & $ & % # # @ . + . + + + + @ + + + + . . . . + . . . . . . + @ # + + + + + + @ + + @ + + + + + + + + . ", ". . . . + + + + + + + @ @ @ @ @ # # # @ @ $ $ @ + . + + . . . + + . + . . . . . . + + + + + + + + @ @ + + @ @ + + + @ @ . + + + + + @ + . . . . . . . . . . . + $ $ # @ . + . . . @ + # & % % # & & # $ # # $ @ . . . + + + + + # + + + + + # @ + + . + + . + + + . . + # @ # # $ * ; & = * # $ * * # @ @ % ; ; - ' ; & & & $ % = - = ] ( ( ~ $ . + + % = = - ' % + + + + . + + @ + + @ @ + + . . . . + . . . . . + + # @ + @ @ + + @ @ @ + @ @ + @ + + + + + . ", ". . . . + @ @ + + + + @ @ @ # @ # $ # # @ # # # + + . + + + + + + . . . . . . . . . + + + + + + + @ @ + + @ @ + + + + + + + + + + + + + + + . + . . + . + + + + @ # @ @ . . . . . + + # & = - = % $ # # @ + @ . . + + + + + + + @ + + . + @ @ + + + + . . + + . . . . + # $ @ # % & ; * { * $ # % & & # # { ( _ , ] - - { - { ~ , ( , ) / ^ - $ . + @ % - { _ ] # . . + + . + + + + # @ @ . . . . . . + + . . . . + @ @ @ + + + + @ + + @ @ + + @ @ @ + . + + . ", ". . . . + @ + + + + @ @ @ @ # @ # $ $ $ $ $ # @ + + . + + @ @ + + + + . . . . . . + + + . + + + + @ @ + @ @ + + . + + + + @ @ # @ + + + . . . . . . + + + + + + + . + + . . . + @ + + + @ $ % & $ @ # @ + + . . . + + + + + + + + + . + @ @ + . + @ + + + . . . . . . @ # $ # @ % & * * { & # $ & % % + # % ] ^ ] _ - * { - ~ ^ , ^ ^ / ( / ; @ + @ @ % - ' ] * + . . + . . + + @ + @ + + + . . . . . . . . . . + + + + + . + + + @ + + + + + + + + + + . + + . ", ". . . . + + + + + @ # # # @ @ @ # $ % $ % % $ @ + + + @ @ @ + + + . . + . . . + + + + . . . . + @ @ + + @ + + + @ + + + @ @ # # @ + + + . . . . . . + @ # @ + . . + + + + @ + @ % $ + + . . + @ @ @ # + + @ . . + + @ @ + + + + + . + + + + + . + + + + + + + @ + . + # # # # @ $ % $ % ; % % & % # # @ # @ * { = * % & ; ; = - ' - { ^ _ ^ & + + @ % ; ( ( * # + + + + + . + + + @ @ . . . . . . . . + . . + + + + @ + + + + + + + @ @ + + + + + + + + + + + . ", ". + . . + + + + @ @ @ # # # # @ @ @ # $ $ $ @ + + + @ # @ + + + + + . + + + + + @ + + + + . + + @ @ + + + + + + @ @ + + @ # + + + + . . . . . . . . + @ @ + + + + + @ # $ $ @ # & & @ @ + + @ + + + + . + # @ + @ @ # # + . . + . . + @ + + + + + + @ # @ @ + + + + + @ $ $ # # # # $ & % $ * - = & $ @ # @ @ * * & & & & * * $ ; ~ ~ , _ - # + @ $ = ^ ) ] # + + + + + + . + + + @ + + . . . . . . + + + . + + . + @ + + + @ + @ @ @ @ + + + + + + + + + + + . ", ". . . . + + @ # @ @ @ # $ @ # # # # # # # @ + . . + + + + . + + + . + + + + . + @ + + + . + + + @ @ @ + + + @ + @ @ + + + + + + + . + . + + + . . . . + + + + # @ @ $ $ % $ # # # $ @ @ @ $ $ + + . + + @ - = # # % ; $ + . . . . + + + + . . . + + $ & $ + + @ @ + @ # % $ $ $ # # # % & $ ; - * & % # # @ @ @ # $ $ ; { ; * ; = { ~ : < - + + # = ^ / > ( % + + + + . . + + + + + . . . . . . . . + + + + . . . + @ + + @ @ # # @ @ + + + @ + + + + + + + + . ", ". . . . + + @ @ @ @ @ # $ @ @ # $ % # @ + + + . . . . + + + + + + . + + + + + @ $ $ $ + . . . + + @ # @ + @ @ + + + + + + + + + . + + @ + + . . . . + + + $ $ # @ @ $ @ # @ + + + + + @ $ ; & + . . + + # - = $ $ % # @ @ + . . + + + . + + + + @ # % * # . + + @ . + # $ $ $ % $ @ # ; ; & ; ; - ; * $ @ @ # % & # # - ] - ; = - ~ > : [ ' + $ = ( } } > ~ @ . + + . . . + + + + . . . . . . . . . . + + + + + + @ # @ @ @ @ @ @ @ + + + @ @ + + + + + + . + . ", ". . . + + + @ @ # @ @ @ # # @ # % % # + . + + + + . . + + . . + . + . + + + + % ; % # + . . . + @ @ @ + + @ + + + + + + + + + + + @ @ @ . + . + + + @ # @ % # @ + + + . . . . + + + + $ & & # + . . + + @ $ $ $ @ @ @ @ @ + + + + . . . + + @ $ # @ @ # + . + @ + + + @ $ $ # # $ # # & = = ; ; { ; & # @ @ # # $ $ $ * ; ; = ] = { ~ ( _ ; @ ; ' _ [ | , # + + + . . . . + @ @ + + + + . . . . . . . . + . @ + @ # # @ @ # # + @ @ + + + + + + + @ + + + + @ . ", ". . . + + @ @ @ # # @ @ # @ # # $ $ $ @ . . + + + . . . + . . + . + . . . + + $ * $ @ + + @ @ @ @ @ + + + @ + @ + + + + + @ @ @ # # @ + . + + . . + @ & % % @ + . . . + . . . . + @ # $ % # + . . + @ + + + @ @ + + # # @ + + + + + . + @ + @ # @ + . . . + + @ + + @ # $ $ $ $ # % # $ = - ; ; * % % # $ $ $ # # $ $ * = * - ' - { ' / ' $ % ~ , : 1 ! ; # + + + @ . + + . . . . . . . . . . + + + + + . + + + @ # # # $ # # @ + + @ @ + + # @ @ + + + @ @ @ . ", ". + . + + + @ @ @ @ @ @ @ # # # # @ + . . . + + . . + . . . + + + + . . . . . + # @ @ + + @ @ @ @ + + + + @ . . + @ @ @ @ # @ @ # @ + . . . . . . + # % & $ + . . . . @ # # @ . + @ # @ @ + . . + @ + @ + @ # % @ @ @ + + + + + + + . . @ + + + . . . . . @ @ + + . @ # $ & $ # # % $ $ = { ; & % % & % $ % $ # # @ $ & ; * * ; - { ( / { % { } 1 2 } ; # @ + + + + + + + . . + + . . . . . . + + + + + . + . + # # # # $ @ @ + + @ # @ @ @ @ @ @ + + @ # + @ . ", ". + + + + @ @ @ @ @ @ # @ # # # # + + . . . . . . . + . . . . @ # + . . . . . + + + + + + @ @ @ @ + + + + + + + + $ $ @ + $ # + @ + + + . . . . . @ $ % * $ @ . . + @ $ % * & @ + @ + + . . . + + @ + @ @ # ~ - # + . + . + + + + + + . + + + + . . . . @ # $ + + @ + + # $ # # $ $ # $ & & % % & & # $ % % & $ # # % $ & * * - ' { ( ( * $ ] 3 4 5 ' @ @ @ + + @ @ + + + + + . + + . . . . + + + + + . . + + @ # # @ + @ @ @ + + + + # @ + @ @ + + + @ @ + + . ", ". + + + + @ @ + @ @ + @ @ @ # @ + . + . . . . . . . . . + + + + + . . . . . . + @ + + + + + + @ + + @ @ @ + + + @ # @ @ @ # @ + @ . . + . . . . . # % & $ # + . + $ % & * ; ; # + + + + + + + @ @ + + % % * / { @ + . . . . + . + @ + + . . + @ + . + @ @ # # + + @ @ # # @ # $ $ # # @ @ @ @ $ % % $ # # $ & = % $ # # % & * = - ~ ] { $ $ / : 6 7 & @ + # + @ # @ @ + + + + . + + . . . . + . + + + . + + . % $ @ @ + + @ + @ @ + @ @ @ + + + @ + + + @ @ . . ", "+ + + + + + @ @ @ + + + + + + + . . . . . . . . . . . . + . + + + . . . + + + # @ + + . . . . + @ + # + + + + + @ # @ # @ @ + + + + . . . . . . . @ @ @ @ @ + . @ = = & * * % . + + + $ # @ # @ @ @ + & ; = { % + + + . . . . . + + . . . . + @ @ . + @ @ + + + + + + @ # # # # # @ @ @ @ + + @ $ * % # @ @ $ & $ $ $ $ # $ $ * - ~ ' % $ & , : 1 ) # @ + @ @ @ # # @ + + + + + . . . . . . . + + + + . + + + # # @ . + + @ @ @ @ + + @ + @ + + + + + + + + + . ", ". + + + + + + . . + . . + + . . . . . . . . . . . . + + + + + + . . . + @ @ # $ # @ @ + . . + + + @ # @ . + + + + @ @ @ @ + + @ + . . . . + + + + @ + . + + . . + ; - % * % @ + + + + @ @ # @ @ + @ + $ % $ # + + + + + . . . . + + + + + @ @ + . . + @ @ . . + @ @ + + @ @ # # # @ @ + @ + + @ % & # # # @ $ % $ % % $ % % $ ; { ~ - & $ ; } } / * @ + + + @ @ # @ @ + @ @ + . . . . . . . @ @ + + + + + + + + + + + @ @ @ @ @ @ + # + + + + + + @ + @ + @ + . ", ". . . . . . . . . . + + + . . . . . . . . . . . . + + + . + + + + . . + @ @ @ # @ # @ @ + + + + @ @ @ + + + @ @ + + # @ + + + + . . . . . + + + + @ @ + . . + . + & ; ; ; * # # # @ + + + + + + + + + + + . . . . + @ + . + + + @ % & @ @ @ @ . . + + + + . . + @ + + + + + @ @ # @ @ # + @ $ # @ @ @ + + # $ # @ $ & % % $ & = = ] ; $ $ - } } ' + + + . + @ + @ @ @ @ @ + + . . . . . . . + @ + + + + @ + + + + . + # @ + @ # @ # @ @ + + @ + @ # @ + + @ + . ", ". . . . . . . . . + + + + . . . . . . . . . + . . . + + . . + + + + + @ @ + + @ @ @ @ + . + @ @ & $ + . + + @ @ @ @ + @ @ + + + . . . . . + . . + + @ + . . . . . $ ; = ' & # @ $ # # @ # $ % # @ + + + . . . . . . + . + + + @ # % @ + + + + + + + + + + + + + + + + + + + @ + + + @ @ + # $ # # + + + + @ $ # + # % % % % % & = ] * # $ ( [ > & @ + + + + + + @ @ + @ + . + . . . . . . . + + + + + @ + @ @ @ @ + @ $ @ @ + @ @ # # @ @ @ @ @ @ @ + @ + @ + . ", ". . . . . . . . + + . . . . . . . . . . . . . . + + + + + + + + . + + # # + + @ @ @ @ + + + @ * % # + + @ + @ # $ @ @ + + + + . . . . . . + . . + + . + + + + + . $ - = ' ; $ # # $ $ @ # % = = # + + + . . . . + + + . . + @ # $ & + + + + # @ + + + + + @ @ + + + + + + + + . . . + + . + @ $ @ + + + + + @ @ @ # % $ % $ $ & - ~ ; # % ~ / ~ @ @ + + + + + @ @ + + + + . . . . . . . + + + + + + . @ + # # $ # + @ $ @ @ @ # # # # @ @ @ @ @ @ + + + @ @ + . ", ". . . . . . . . + . . . . . . . . . . + . . . . . . + + + @ + . . + @ % # + + @ + @ + + @ + # % & $ + + + @ @ @ + + @ + . . + . . . . . . + + + + + + $ $ + + + + & { { = * % & % $ $ & % % & $ @ @ + . . . . . . + + . . . + @ $ @ + @ + + + + + + + . + + + + + . + + + + + + . + @ + . # @ @ + + + + + + + @ # % & & & @ % ; ~ ( = $ & { ] * + + + . + + + + @ + + + . . . . . . . + + + + + + . + + @ @ + # @ + @ @ @ + + @ # # # @ @ @ @ @ @ + @ + # + + . ", ". . . . . . . . . . . . . . . . . . . + + . . + + . + + @ # + + + % & * @ @ + @ @ @ @ + @ @ # & * # # @ + @ + + + + + + + + + . . . . . + + + @ + + # ; % + @ @ @ * { - { * & & * $ $ & * $ @ @ @ + . . . . + + + + + + + + + @ # + + + + + @ @ @ + . . . + + + . + + . + + + + + . . . # $ + + + + + . + + + @ # * = = ; $ % ' ] ] = $ ; ] * + + + + + + + + + + + + + . . . . . . . + + @ + + + . + @ @ + @ @ + + @ @ + + @ $ & # # # @ # # + + + + + @ @ @ . ", ". . . . . . . . . . . . . . . . . . . + . . . + + . + + # @ + + @ $ $ # + + + . + + @ @ @ # % & # + @ @ + + + + + + + + . + @ + . . . + + . + + . + @ $ @ + @ + + % - { ' ; % $ $ + @ @ # + + + + . . . + + # @ + + @ + + . + # # @ @ @ + @ # $ @ + + . + . + . . . + . . . . + + . + + # # + + @ @ + . @ @ # @ $ % * & * * % ; - % $ % ' / & + + + @ + @ + + + + + @ + . . . . . . . + @ + @ @ + + + @ @ @ $ # @ @ # # @ @ @ # $ $ # @ # @ # + + @ + + + + + . ", ". . . . . . . . . . . + + . . . . . . . . + + + + + + @ # + @ @ + + + @ + . . . + + + # @ @ # # + + + + + @ + + + + + + @ + . + . . . . . + + @ @ . + . + . + @ @ $ ; ' { = $ + . + . + @ @ + + + + + + + @ + + + @ # . . . + @ + @ @ @ + + @ # # @ + . . + + + + + + + + + + + + . . + + + @ @ @ # @ . + # # % & % & * & ; = * * % $ & ( ~ + + + + + + + + @ + @ + . . . . . . + . . + + + # # @ + @ @ # # # $ # # # @ @ # # $ # @ @ $ @ @ @ @ + + @ + + @ + . ", ". . . . . . . . . . . . . . . . . . . . . . . @ + + . + + + + @ + . . @ @ + . + + @ @ @ @ + + + . . + # @ @ + @ @ + + # $ @ . + + + + . . + @ @ + + . . . . + + + # * - ^ { % + + + + + + + + + + + + @ @ + + + + @ + . . . + + . . + + + + # # @ @ + . . + + + + @ + + @ + + @ + + . . + + @ % # # @ . + # $ $ & % * & & * = = = * $ ; ; # + + + + + + + + + @ + + + . . . . . + . . + + # $ # @ + + # $ # @ @ @ @ @ @ @ % & % # @ # @ $ $ @ @ @ + @ @ + @ @ . ", ". . . . . . . . . . . . . . . . . . + . . . + + + . . + + + + . + + + @ @ + + @ # # # $ # + + + + + @ $ @ + + @ # @ @ @ # @ @ + + + + . . @ $ # + . + + + + + + @ # ; ~ ] ~ ; @ + + + + + + + + + + # @ @ @ @ + + + @ + + + + + + + + + + @ @ # $ # + . + + + . + @ + @ @ + + + + + . . + @ # $ # @ + + @ $ % $ % % & & & * = { { * & ; % @ + . + + + + + . + @ + + . . . . . . . . + + + # @ # # # + # % # # # # # @ @ $ & & $ # $ # $ # # @ @ @ @ @ @ + @ # . ", ". . . . . . . . . . . . . . . . . + + . . + @ + + + + + # + + + + @ @ + + + @ @ $ % $ # @ @ @ @ @ @ $ # @ . + . + @ @ + . + @ + . . . . @ $ # @ + + @ + + + + + @ $ % ] > ( & @ + . . . . . . . + @ # + + # # + + # + . + @ + + @ @ + + @ @ + @ # # + @ @ + + + + + + + + + @ # + + + + + % % # $ @ + + # $ % % & & & * * & = ; = * * $ @ . . . + + + . + + + + + + . . . . . . . + + . + # $ # # $ # # @ # $ # # # # $ $ & & $ # @ @ @ @ + @ @ + + + + + @ $ . ", ". . . . . . . . . . . . . + . . . + + + . + + + + + + @ @ + + + @ @ @ @ + @ @ @ @ # # # + + # @ @ @ + + + + . . + @ + + . + + . . + + # $ % $ @ + @ @ @ # # + + + + . * ' { * @ + . . . . . . . . + + . . @ # @ + @ + . . + + + + @ @ + + + + # # @ + + + + + + @ @ + + + + @ + + + @ @ @ @ # # # @ @ @ $ $ $ $ $ & % & & * ; % $ & & + + + + + + . + + + + + + + + . . . . . . . + . + @ % = $ @ @ @ # @ @ # $ # # % % & * % % $ + @ @ + @ + @ + + + + @ $ $ . ", ". . . . . . + . . . . . + @ + . + + @ @ + @ + + + + @ # # + . . + @ @ @ + @ @ @ @ @ + + . + @ + . + + + + + . + # @ + @ + @ + + + @ @ @ @ $ $ @ + $ & * { * + . . . . + # % # + + . . . . . . . . . . . + + + + + + . + @ @ . + + + + + + + + @ # + . + + + + @ # + @ # . . . . . + + @ # @ + # + @ + + $ $ # # $ % & & % ; & # @ @ # + . + + + + + + + @ + + + + . . . . . . . + + . + # $ % @ @ @ $ $ @ @ @ @ @ # % & * & $ $ @ + @ + + # @ + + @ @ # @ @ # . ", ". . . . . . + . . . . . + # + + + + + + + @ + . + @ # # @ @ + @ + @ + @ + @ # # @ + @ + . @ # + + + + + + + + @ $ # @ @ # $ # + + @ # @ @ @ @ + @ * - { ] % . . . . . . + + + + + . + . . . . . . + @ + + + @ @ @ + + + @ @ . + . + + . + + + @ # + + + + @ + + @ @ $ # . . . . . + . + # + + + + + + + @ @ % % & * * & % ; * @ + + + + + + + + . . + . + + + + + . + . + + + + + . . + @ # # @ @ # * % $ & # + @ $ $ $ $ # @ @ @ + + + + @ @ @ @ # @ @ @ @ # . ", ". . . . . . + + . . . + + @ + . . + + + + + + . + # # # + + @ @ @ @ + @ @ # @ @ + + # + . @ # + @ + + + . + + @ # % # + # @ @ + + + # @ @ + . . + & % % = % . . . . . . + + + . + . + . + . . = ~ & & # + + @ # + @ @ + + + @ @ . + + . . + + + + + + + + + @ + @ # # @ . . . . . + + @ + + + + . . + + @ # % * $ % ; * $ $ # + . + # . . + + + + + + + + + . + . . + @ @ + + + + + . . + + # # @ % * $ $ * $ @ $ % $ # % $ @ @ @ + + + + + + + @ @ + @ @ @ # . ", ". . . . . . + + . . . + + + + . . . . + + + # @ @ $ $ @ @ + @ @ @ @ + + @ # @ + @ + $ $ @ # @ @ # @ @ + + + @ $ % & % $ # @ @ # @ @ @ # # . . . . + + + @ # + . . . . . . . + + . . . . . ; , 8 9 { $ # @ @ @ + + + + @ @ @ # @ + + + + $ $ + . . + + + + + + @ @ # $ + . . + + + + + + + + + + + . . + @ # & % # % ; ; % # + . + . @ + + . + . . + + + + + . . . . % # + @ + + + + + + @ # $ # & = - & - * $ # & % # $ % @ @ @ @ # @ + + + + + @ + @ @ + # # . ", ". . . . . . + + . . + + + + . . . . . + # # # + @ @ + + @ $ @ @ @ + . + # # # @ + @ % % @ @ @ @ @ + + . @ # # # # # # # % $ @ @ $ $ @ # # . . . . . . . . + . . . + + + + + + # @ + . + = ! 4 0 } * # @ # $ # @ + + + @ @ @ @ # @ @ + = { @ . . . + . + + @ @ @ + @ @ + . . + + @ + + . . . . + + . . . + @ $ $ # % * & % @ + + + . . + . . + + . + + . . + + . . + = $ + + + . . . + + @ % % $ * ~ { * ~ * $ & % # % % $ # # + + # # + + @ + @ $ + + @ + # @ . ", ". . . . . . . + + . . + . . . + + @ + + # # + + + + + + @ # @ @ @ + . + + + + + + @ @ + + + @ + + + + + # # $ # + + + + @ @ + + @ @ @ @ + + + . . . . . . . . . . + + @ @ @ % ; $ @ + # { ! 4 1 # + + + # @ + + + + + + + + + + @ $ * ( { @ + + @ @ @ # @ @ @ # + + + + . + . + + + . . + + + + + . . . + # $ # $ % & $ @ + . . . + . . . + . . + + + . + + + . . ' ' # + + . . . . . @ # % $ $ * / ] = = & % & $ # % % $ % # + + # # @ + + + # + + + @ @ @ @ . ", "+ + . . . . . . . . . . . . . + + + + + + + + + + + + + @ @ @ + + + . @ @ . . + @ # + + + + + + + + + @ & $ # # + + + + + . + . + + + + + @ + . . . . . . . . . . + + @ @ @ $ % $ @ + + # ; ~ * . . . . + . . . . + + + . . . + # * = = & $ @ @ $ $ # @ + + + + + + + @ + . + + + + + + + + + . . . . + + @ # @ $ $ $ @ . . . . . . + . . . + . + + . . . . . . $ ] { # + . . . . . + $ * ; & $ { ! > { = % $ % % # # # $ @ @ @ @ @ @ # # @ @ @ + + @ @ @ @ + . ", "+ + . . . . . . . + . . + + + + . + + + + + + + + + + + + + + + . . . . @ @ + @ # $ @ @ @ + + + + + # % % @ + + + @ @ + + + @ @ # # @ + . . + . . . . . . . . . . . . . + # @ @ + . + @ $ # + + . . . . . . + + . . + + + + + # # $ % # # % # @ # $ @ + . + . + + + + + + + + + + + + + . . . + . . . . + + # # # @ + . . . . + . . + + + . + + . . + + + . . + - ( ; @ + . . . + + + % - * # % _ 3 > ^ { # @ $ $ # # $ # # @ # # # # $ @ # @ + + @ @ @ @ @ + . ", "+ + . . . + . . . . + + @ + . . + . + + + + + + + + + + + + @ @ . + + + @ @ @ @ $ $ # # # . + + + + % * $ + + @ # $ $ # + + # $ % % # . . @ + . . . . . . + + . . . + . . $ # @ + + @ % * * @ . . . . . . . + + + @ # % $ % $ $ # $ & & # @ . @ @ @ + . . + . + + + @ @ + @ + + . + + + + . . + . + + + . + % % $ @ . . . + + + + + . . . . . . + + + + . . . . { ( % + + . . + + + # & & @ + % : a _ ] { # @ $ # & * # @ # # $ $ $ % # @ @ @ @ # # @ @ @ + + . ", ". . . . . . . . . + + + @ + . . . # # + + # $ + + + + @ + + + + + @ # # + + @ # $ * % $ # @ @ @ . . # $ # + . + + @ # $ + @ # # # @ + + + + + . . . . . + # $ # $ $ % * # # $ # $ % % + & { ; + + . . . + . + @ $ % * ; { ] & # $ * & * $ + . + + + + @ + + + + + @ $ # + + + . + + + . + @ + + + + + + + @ % % $ @ . + @ & # + + + . . + . + . . + . . . . . + = ' @ + + . + + + @ % ; $ + + # ; ; = { = % % % & % $ @ # @ % ; % % $ $ # @ # $ # $ # @ + + @ . ", "+ . . . . . . . + + + + + + + + @ * # + + $ % + + @ # $ $ @ $ @ + @ # # + @ # # @ % $ $ # @ # # . . # # @ + . + + + @ @ # @ $ & # . + + . . + . . . . . @ * * ; ' = ' ] & @ # # $ * $ @ % = = @ # + . + + + @ # % ; { - { = & % & & @ + @ + + + + . + # @ + . + + @ # @ @ + . + + + + + + + + + + + + . + @ # $ # @ + @ $ & # + + + + + . . . . + + . . . . . + # # + + . + . + + $ & % # # @ @ # $ * = ; & * * $ $ # # # # * ; * ; $ # @ $ $ $ $ # $ @ + + + . ", "+ + + . . . . . + + + + + + @ # % % @ + + $ ; $ # # $ & # $ & @ + + + + @ $ $ + + + + @ + + @ + + + $ # + + . + + + @ # % $ $ & # @ @ @ + . . . . + . . @ - ] ~ ( ~ ! ) = # + + + @ + + + $ # + + . + + + . + # * { { ; ; ; ; - * @ . . . . + + + + + + @ @ + . . + @ + # @ + + + + @ + + + . + + + + . . + + + @ @ # $ % $ + + . . . . . . . . + . . . . . + + + + @ . + + . + @ $ $ @ @ $ $ $ % * * & * & % % $ $ $ @ @ # & & ; - * # @ # # @ # @ # @ + + + . ", ". + + . . . . + + + + . + + + + + + + + @ * - % @ @ @ @ + @ # + . . + @ % % @ + + + # # + + + + + # * & % + . + @ @ @ @ $ % # # $ % $ + . . . . . . . + @ ] ) ^ / ( ^ ' & @ + . . . . . + # . . . . . + . . + # & & & & * = * * # + . . . . . + + # @ # # @ + + + + + + + + + + + + @ + . . . . . . . . + + @ + . + @ % & # + + . . . . . . . . + . . . . . . + + + . . + + . + @ $ # + @ % { - ' = = * ; & & $ $ $ $ # # $ % % = * $ # $ # @ @ @ @ @ @ @ @ + . ", ". . . . . . + + . . . + + + + + . + + . @ & * % @ @ . . . @ # + . @ @ # % % @ + # # @ # + . . + . # $ % % + + @ @ # # # $ & % # # # # . . + . . . . . . + ' / ] ~ ' - $ . . + . + . . . . . . . . + + + . @ $ & $ # $ & ; % % % # + . . . . . . + @ @ # + + + + + + + + + + @ + @ + @ @ + . . . . . . . + + + . . . + # $ $ + + . . . . + . . + + . . . . . + @ @ + . . @ @ + $ $ @ @ + $ ; = - ~ = { - { = & % # @ # @ # $ % % = & @ $ $ @ @ @ @ @ + @ @ @ @ . ", ". . . . . + + + + . . + + + . . + @ @ + + + @ @ @ + + . . # $ + @ $ # + $ $ @ @ # + . + . . . . . . + @ + + @ # $ % & * $ $ & # @ @ @ . . . . . . . . . . % ; - ; % @ . . . . . + . . . . @ + @ + + + . @ % - { # + + @ # + @ @ + + + . . . + . @ + + + @ @ . + . . + + @ + + + @ + + + + + + . . . + + + + + . . . + @ # $ + . . . . + + . . + + + + . . . @ % % @ + . + + # * * # + @ $ % * - ( ^ { - = ; % $ # # # # % % % ; = & $ # # @ # @ + @ + @ @ @ @ . ", ". . . . + @ + + + + . . + . . + + + + + . + @ @ @ @ + . + # % @ @ # # @ $ % # # # @ # $ + + @ + @ @ @ + @ # * ; & * * & $ # % $ $ % @ + + + . + . . . . . @ @ @ @ + . . . . @ $ % $ + . + $ & % + + + @ - ~ / ~ + . . . + + + + + + + . + % @ @ @ + . + @ @ @ + + + @ + + . . + # + + + + @ + . . + + + + + + . . . . @ # @ + . + + . + . . + + + + + . . . # = & + . . @ # % & $ + + + % # & / : , ^ - { = % # $ $ @ $ $ $ % - ~ = % $ # @ @ @ @ @ @ @ @ @ @ . ", ". + . + $ & + . + + + . . . . . + + . . . + @ @ @ @ + . + # $ @ + @ $ $ * & % # + @ & # @ @ @ @ # # @ + + $ - = % @ # % % # % % $ $ $ + + . . . . . . . . . . . . . . . + # * - ^ ' # . @ * { $ + + & ; , ) ^ & @ + . + $ & # # @ . . . + @ + # @ . + # # # $ @ # # + + + + + + + . . + + + + . + @ + + + + + + + . . + @ + . . + + . . . . . + + . . . . + & / * + . . @ $ ; & $ + + @ # % ; _ _ ~ ~ ; ; % @ @ # % % & % $ - { ' ; % $ # @ @ @ + @ @ # + + @ . ", "+ + + @ $ % @ + + @ + . . . . . + . . . + # ; # @ + . . + @ # # # # $ $ = & # @ . @ # @ + + + @ @ # + + @ # & & @ + @ % & & # @ + @ # + + + . + + . . + . . . . . . . . @ & = { ] { # @ # $ # . + # - { _ ) ' # @ @ @ @ % * $ $ @ . . . + + . + @ $ * = % % % # + + + . + + + + . . . . + + . + @ + + + @ + . . + + . . + + . . . + + + + + + + + + . . . . { [ & . . @ @ $ ; ; $ @ # & * % ' ^ ( - = ; = ; @ @ $ % % * ; * { { = % # # # @ + @ @ @ @ + @ @ @ . ", "+ + + + + @ @ + + + + . . . + . + + . . + % - % @ + + + + @ @ # $ # $ $ % @ + + + @ @ + + . . @ @ @ @ + @ @ $ $ @ # $ & = * @ + + + @ + + @ + + . . . + + . . . . . . . + @ # # $ + + + + + . . . @ ; - = ; % $ % % * # @ @ + + + + . . + . . . + & ' - & % $ @ + @ + + + + + @ + + + + + . . + @ + + + # @ . . + + + . . . . + + . + + + + + . . . . . . + _ 6 - . . + # % ] = % % % * ' { ] , _ / { - ; # @ $ # # & ; * & ; - - % @ $ % @ + @ @ @ @ + + @ # . ", "@ + + + + + + + + + + . . . . + + @ # # $ & * & @ + @ # + . . @ @ # % $ + + + @ + + @ + . + + @ # @ @ @ @ $ * % @ % = ; * & @ + $ $ % @ + + + + . . . + + . . . . . + + + . @ + . . . + . . . . . + # % # + @ & * & & @ + . . . . . . . + + + + @ * ' = & # $ @ + + + # # + + @ @ + + . . . . + . . + + @ @ + + + + + + + . . + + . . . . + + . . . . . . # ( , & . . + @ & ] & $ * * - ' ' ] > , ( ~ { & @ $ * & # $ ; = & ; { = * % # $ $ # $ # @ @ + + @ @ . ", "@ + . + + + @ @ + + + + + + + + + @ $ % * * & $ @ . @ # @ . . @ # $ * % + + @ # + # # + . + @ @ @ + @ @ + # * ; % & % % & # @ # # $ $ + + # @ + . . . . . . . . . . + + @ @ @ + . + @ $ @ . . . . . # # + + & { & # @ + . . + + . . . + + + + # & { - & # * * # @ + $ % @ . . + + . . . . . . . + + + @ + + + + + + + + + . . . . + + + . . . . . . . . . * ( ] $ + + + + * { @ + $ ' ' ~ ~ > [ / / ( ] % # & * ; % % = - - ~ ^ ~ * % $ $ $ $ % $ @ + @ @ . + . ", "@ . . + @ @ @ @ + + . . + + + # @ + @ % ; & $ # @ . + @ @ + + @ # & ; # + + & & @ $ % + . + @ @ + + + @ @ % { ~ & & + @ @ @ @ + . + + . @ # $ # . . . . . . . @ $ & # @ @ $ # # $ # % ^ * . + + # % $ # @ & - ; # @ + + + + @ @ + . . + + . . @ ; ' & # @ * { - & % % $ @ . . . . . . . . . . . @ @ + + @ + + + . + + + . . . . . . . . . . . . . . . . + ~ b ) @ . + @ @ & $ @ @ % ' ( ^ > : [ > ( ^ ] = % * = ; % & * - { ' ' ; % & % $ $ # @ $ @ + @ @ + @ . ", "+ + + + @ @ # + + . . + + + + @ @ @ @ & & & @ @ @ . + + @ @ + @ # % # + + @ { - # ; & + + + + @ # @ + + $ - { ; $ $ @ @ @ # + . . + + + # * ^ { . + + . . . @ & ~ < ^ $ # # @ # % - - ; @ + + $ ; = % + + # $ + + @ + + + @ # # + + + + + + + + * & + + $ & ' ' & # # @ + . . + . + + . . @ # + @ @ @ + + . + + + @ + . . . . . . . . . . . + . . . . . # < 4 > . + # # $ * $ @ $ ; , ^ ) ) [ 5 a ) ~ ; * % * { ' = % { ^ ' * % % # % $ $ # # # @ @ @ + + + @ . ", "+ @ + + + + + + . + + @ + + + @ # $ % & # @ @ @ + . . . @ $ # @ $ # + + . + * ; & ' % + + + + # $ @ @ $ ; - ] & # @ @ # @ @ @ + + # + @ % ~ , ; . + + + . + % = , 3 3 ^ - % $ * ; = % . . . $ % % $ % @ + + @ @ + + + + + @ $ # @ + + + @ @ @ @ & * @ # & * * * # + @ @ + + @ + # # @ + + # $ @ @ @ + + . . + + @ + . + . . . . . . + + @ + + . . . . . { 2 8 ~ . . @ # $ % # # & ^ / ' , > b c [ , ) ] * $ $ = ' - * = ~ ( = % $ # $ % % $ # # # @ @ + + + + . ", "+ @ @ + + . + + + + + + + + . + @ # # # @ + . . . . . + @ $ # @ # # + . . @ & & $ # + + + + @ # # # # & ' ^ ( & + @ @ @ @ @ # @ # # @ $ ' ' $ + . . . . . + & = = ( b : , - % % # + . . + @ % @ # # $ % # @ # $ # % # + @ $ $ # @ + + @ @ @ + + & & $ # # % & # + + @ + + @ # @ $ @ + + @ + @ + + + + + + + . . + + . . . . . + @ . + + + . . . . . . . ( d e * . + + @ # $ % % = - ' _ : > a [ ^ ( ) = & * % - { * = - = ; ; * * $ % % # $ @ # # @ @ # + + @ . ", "+ + + + + . + # @ + @ + + + . . . @ @ @ + . . + . . + $ % ; % @ % # + + @ ; = & + . + . . . @ # # # $ ; - = $ @ + + $ $ # @ @ # # # @ * ) ' + . + . . + . @ & = = ] : ) : ] ; & + + @ # $ % $ # # # # $ # + + $ $ = $ + @ # @ @ + . + + @ + + @ % @ @ @ @ @ @ + . + @ + @ # # $ @ + @ # @ + + + + . + # @ + + + + + + . . . . + + . . . . . . . . . . + ) f 4 $ + @ @ + # % $ $ - - _ ! > ! 3 [ ^ ) > ; = - = = * $ $ ; - - ] = & % % $ # $ + @ $ @ + @ + + @ . ", "+ + + + + + + @ # # + . . + + + + @ @ + . . . + + $ & & & % % # # @ @ @ # = { * + . + + + # @ @ % - & * ; ; & + . + % % @ + + # @ @ @ & ^ - . . + . + + + # & - ' ^ / , / - = # @ + # ; ' ; % @ # + + @ @ + @ @ @ # # @ @ + . . . + @ + + . + % = $ . . @ + . . + + @ + @ # & ; @ + @ # + + . + + . + + + @ # + + + + . . . . . . . . . . . . . . . . # g h 2 ; @ @ $ @ # $ % = ~ ~ > ! 7 i j k : [ , ' { { - ; & $ % & - ~ _ = $ % % % # @ @ + @ + @ @ + + + . ", "+ + + + @ @ + @ + + + + + + # @ @ @ + + + . . @ % = { & # # @ @ @ + @ @ $ & * % + + @ + # # # % ; = - = & * & @ + # % % + + @ # # # @ @ + + . . . . . + + @ % * * - = ~ ~ # # @ @ $ * - ] = * @ . . . . . + $ @ + + + . . . . . . + @ @ + + @ & ; $ @ @ + + . . + + + + + + % $ @ @ + # @ + + + . . + + @ @ + . . . . . . . + . . . . . . . . . . . . & | l 2 ' $ & $ # % $ & { = ] ! 7 c m n o b / ] = { ~ { * % $ & ; ~ / ' { % # # $ # $ # $ + . @ @ + @ @ . ", "+ + @ + # # % $ + + @ + + + $ @ + . + @ + . . # ; ] ~ * # # @ @ @ + + + @ # @ # $ @ + @ @ @ # % $ & = * * $ $ @ + % # + + # % % % & @ + + + . . . + . . . @ & & % # + ; ; + $ # @ $ & * % = = + . . . . . + + . . + . . . . . + + + $ # + + + * & + + @ @ + + + + @ + + . + + + @ @ @ + + . . . + + @ + + + . . . . + . . . . . . . . . . . . . . . + ; g e > * % = & % ; % & { ] < < 1 p q l r g & % * ( / / ^ = ; ; = , , - ; & % % # $ % $ # @ + @ @ + @ + . ", ". + # + + # % # + + @ @ . . @ + . . + $ # . + % * ' { - $ # % @ + + @ $ $ # @ % ' % . @ # # % % # & ; * % @ @ # # % $ @ @ & * & ; - % + + + + . + . . . . + @ @ @ + . @ # @ @ # + . + @ $ ] ^ + . . . . + + . . + . . + + + + + @ # # # @ + & = # + . + + . + # @ @ + + . + . + + + + . + . + + + + @ @ + + . . . . + + . . . . . . . + . . . . + + # - ! ( * & = - * & % ; = ' ( a ) 7 s p t 2 ' # # & ^ , ! , = ; - ] } > ' & * * % % & $ $ @ @ + + + + + + . ", "+ + # # + + # + + + + + . . . . . + + ; = @ + % & % * * % # # + + @ & ; * @ + @ $ @ + + # & * * # $ % % # + @ # % % % % % % % # & % # @ + @ + + + . . . + @ @ + + + + @ @ + + + + + . @ * ~ = . . + $ # # + . . . . + + + + + @ # # $ = < 7 / ; @ @ # + . + @ # # @ @ @ + + @ @ @ + @ + + + + + . + + + @ + . . . . . . . . + . . . . + . . . + + . # = ' = % & ^ ~ = = & * { ( ^ , [ 8 o 0 4 > & @ # & ^ ) ! _ ; = { ~ ( ~ ; % % & & & % $ $ # # @ + @ # + @ . ", "# $ @ # + + + + . . . . . . . . + @ @ & ; @ # # @ $ # # @ @ + + # $ - - % @ + @ + . . @ & = * & $ @ # & & @ # $ $ $ # % & $ # @ # @ @ @ # @ + + + . . . + * & + + + + @ @ @ + # % # + % = * + . . @ % - * + @ @ @ + + @ @ @ + + @ # $ < q q g = % % * # + @ # @ @ # $ % $ # % @ + + # @ . + + + . . . + @ + + . . . . . . . . . . . . . . . . . @ # - ; * { & ^ < / ] ] ' { ' / ^ ^ 6 u v 0 | { $ + # = ) : [ ( = & ~ ^ ^ ~ { ; & & % % # # @ @ @ @ @ + # @ @ . ", "& & @ + . . . . . . . . . . . + @ # # $ $ # + + + # % $ @ + + + @ % & & % @ + @ @ + @ % ~ - * * * $ & - - % # $ * $ # # @ @ # @ @ # $ $ $ @ + + + . . . + * ] { % $ @ $ % + + # = & + $ % @ @ + + # & ; $ $ = ~ = @ @ @ + + . . + # & , i c < * $ % & # @ @ # # # # @ $ $ # @ # @ + + + + + + + . . + @ + . . . @ + . . + + . . . . . . . . + + . - ) * & % * , 3 _ , < ( ] / ) } } w o x j g ; @ + @ _ 6 a < ] - = ^ ~ ^ ^ ~ { - = & % % # @ + @ # @ # $ # + . ", "= & + + . . . . . . . . . + + @ # $ - # @ @ @ . + @ & & @ + # @ @ $ # + @ @ @ # # + % ' - & = = * & * = = & % $ # # @ @ @ @ $ @ @ * & % $ # + + + + . . + % ] / - % @ & = @ . @ $ + . + @ $ & % @ # % # # % = ' % @ # + . . . . + # @ $ - ~ & $ $ # @ @ $ $ $ # @ @ + # # + + @ # # @ # + @ # @ + + + + + + @ # # # @ + + + + . . . . . . . + @ @ ~ ~ = ~ & = ^ ( ~ / < ) : } } } 2 s y q p > @ + . % ) 7 [ < _ ( : > _ , ~ ~ ' ^ - ; % $ # # @ + # @ @ @ @ + . ", "$ $ + + . . . . . . . + . + @ @ # & = @ . @ @ . + # - - + + # @ + # # + + + @ # + + & ~ ' = ; * % # # # @ @ % $ @ # @ + + @ $ @ @ & * $ $ @ @ @ @ + + + + & - - ; * ; * $ + . . . . . + & ' ^ ; # + + @ % - & $ . . + . . . + + . . . + % ; # @ # @ + @ $ $ $ % $ # @ @ + + + + @ # $ $ + + @ # + + + + + @ # $ $ # + . . . . + + + + . . . @ + # & $ ; ~ - { ] ' ^ _ < a e 2 3 e w s y z 4 / + . + & ] < < ) , , b b : : ( ' / / - & $ # # @ @ @ # # # @ @ + . ", "+ @ + + . . . . . + . + + @ @ # # $ $ + . @ @ . % - ^ ; @ $ * # + % * @ + + # $ + % = ~ ] { & # + . . . . + # # @ $ @ @ @ @ @ @ + # % = % @ @ + @ + + + @ % % $ # * { $ + . . . . . . @ { : , $ @ + . $ = ; % + . . + + + + + + + . . + @ # + . + + + @ # # # # # @ @ @ + + . + + + + + + + + + + . . # @ $ $ # % @ # @ . . . + . . . . . @ # + + # $ - ( : 3 / ^ ( _ ! 2 5 g 7 2 5 A t 4 a { . . + = / } } > b [ w A > } ! ~ ' - - ; % # @ @ @ @ # # # # # # . ", "# + + + + + + . . + + + + @ # # # # % @ . @ @ + % ~ ~ & % ; * $ $ % $ @ . @ * & % - { * * % % # . . . + + @ % @ @ $ @ @ # # $ # + @ # & * % + . + + @ # $ % # @ # $ $ + . . . . + + . @ = , ~ + + . + * ; $ # @ @ $ & & * % # $ # $ # $ * # + . + + + + # @ + + + + @ + + + + + + + . + # @ + + + + + % * & # + # # # @ + . . . . . . . . + + + @ # $ / [ 9 w ' ] ' / < 6 5 k 2 6 9 7 g 8 1 & . . + - < < [ 3 6 5 9 1 < b : / ] { ; ; & % # # # @ @ # @ @ $ # . ", "# # . . . + . . + + + + + @ # % - % $ $ + @ @ + % ] = % % * # & - $ @ @ @ $ % & & * $ # # # & $ . . . @ $ & * # @ # $ & $ @ # @ @ # @ # ; * + . + + @ $ % # + + @ + . . . + + . . @ % * = ~ ; @ @ + # * % # # # ~ 6 7 / ] ' ) : > _ { & % # + . @ + + @ # @ + + + + . + + + . . . . + @ + + + . + + + $ & # @ + + + + + . . . . . . . . + + + + # $ * / 1 0 e ( ~ = ' ( g k w a | 4 5 9 v 5 $ + @ @ - ! ) > b 4 i 9 7 ! 6 g 3 ) ' { - * % $ # # # @ @ + + @ # . ", "@ + + . . . . . . . + @ + @ $ % ; % $ # + # % # $ - ~ % # $ # % % @ + $ = * $ @ @ + + @ @ @ # + + + @ # $ $ @ + # & ] ] & + + . @ # + @ * ' + + + . @ * $ @ . . . . + . . . . + + % ; ' - { ; % & @ * * $ % $ * 7 B 4 , { ~ , a 2 } ] % + $ @ @ * $ @ # # + + + + + + + + + + + + + # @ + @ + @ @ + + . @ % $ + + . . . . . . . + . . . @ @ + + # % = _ b c 6 _ { = ; / g 5 3 > 7 2 C d t , . @ & * _ } > 6 [ 3 A 2 1 6 4 w 1 , - = ; * % # $ # $ # @ @ @ + @ . ", "+ + + + + . . . . . . + + + $ % $ $ # + @ & ' ; # # * # $ $ @ @ . . @ # @ @ + . . . + @ @ $ # + . @ $ $ # @ # @ # % / : & + @ @ # # # # & ; # + $ % # $ @ + . + . + + . + . $ # @ $ $ $ % % # % & $ ; & $ ; = { : ! , { & & * / _ ( ~ - = ; @ $ > : * # @ + + + + + + + + + + + + # % @ + @ @ @ + + @ + + # % @ + . . . . . . + . . . + # + + @ # % { } 4 h 5 ~ { = = > k B b b 5 c p 8 2 = . $ ' ( g 2 e e 1 6 1 7 6 2 g [ ! ( - * % % # # # & % # % $ @ # @ . ", "+ + + + . . . . . + + + . + % * # + + + @ % ' ] % + @ + + # @ + . . $ * + . . . + @ % % @ % ; $ + @ & & % & % % + @ ' { @ @ # + @ # # $ % & $ + % ; $ # @ + . . + @ @ + . $ : ^ * @ + + . . . + @ $ * $ # - * % * - * @ + @ % - / ] ] ] ' ' % $ < b ~ + + + + @ + # ; - ; # . . + % & # + + @ @ + @ @ @ @ @ @ + + + + + + . . . . . . + # + + @ # * / A h D k { ~ - / 3 C 0 g | 8 i d 2 g - . % ~ : w A A c 2 1 , ] b 2 < : , > ' * % $ # # $ & # # % $ @ # @ . ", "+ + + . . . . + + $ # # # & ^ ~ $ . . . + # * ' $ + . . . @ # + . @ $ * # + + + + # - { # * ; @ . @ & & % # # @ + @ ; * + & - $ + # $ % $ # @ + # % # + @ . . . @ # + . . ' 4 A ~ @ . . . + # @ $ & & @ + @ # $ + @ # + . + $ = / { - ; = * $ # ( / ' @ # # + @ # % * = ~ & + . + # $ # # % * # @ @ @ @ + . @ . + + @ $ @ . . . . . . + @ + + @ @ { [ 5 E F t : { ~ [ e c e 6 | 9 w g a } = # { : g d c 1 c k > _ ] 1 7 > ) ) ! ] = * & & $ % % # # # # @ # @ . ", "+ @ @ . . . . + + # # # & ^ } / * @ + + + @ # $ @ + + . @ # $ @ + $ * & $ @ # # + % - = # $ # + . @ % @ + . + @ @ @ & = $ * ] { + # % ; % # + @ @ + @ + . + . . . + . . # - e w ~ . . + - ~ ( , / { & + . . @ % @ . . . . . . @ % # @ = { % @ # $ $ % @ $ $ @ @ @ @ . + @ + + + + @ @ # & ; = & @ + + + + + + + + @ # $ + . . + . . . @ @ # @ # = [ k 8 G H I 2 , , g 8 2 c } 6 6 e [ ! _ ~ ] : e d u z k C 0 , / | r k [ > < > , = = { ; $ # % $ @ @ # # + + . ", "@ @ @ + + . . + + . + @ $ * ' - $ + + + @ @ + + # + + + @ $ # # # $ % $ $ + @ # $ & & * # + . . @ $ % @ . . . + @ # # % & @ & = $ @ @ * * $ @ + + + + + . . . . . . . . $ ' 2 4 { . + = > : } 1 1 < ] ; + + @ # # + . . + . + @ @ + + { ) { = & @ @ # # # @ @ + + + . . + @ @ . + + + @ & & $ @ + + + . + + + + + # # @ + . . . . . . @ @ @ + # _ e 8 t G J K k ( / 5 5 c C 3 [ 2 t 5 [ ~ , | e t p f G G L m [ [ 8 B 6 b b _ : , ] _ ^ * & $ $ # @ @ $ # @ + . ", "@ + . . . . . . . . . + @ # $ % & % + + + @ + # & # + . @ $ # # $ $ # # $ + @ # % % % & $ @ + @ % ; % . . . $ @ @ @ # % @ @ % & & # @ @ $ # @ + . . + + . . . . . . . + # - > > # . & > } [ a g e 3 / { # # @ % % @ + + + + & ' & . @ ; ~ ' ] ; # $ { ' $ + $ / - @ + + # * # + + + # $ $ + @ @ + @ + + + . . + # # @ @ + . . . . . . . + + @ % : 5 i d u M F 3 / ) 5 g 1 7 _ 3 c 8 e } ^ ] k 4 w G G N O P l 3 e p 8 2 2 | 3 [ ] ( > ' ; - % $ $ $ # $ $ + + . ", "@ @ . . . . . . . + @ $ & $ * - ' ; @ + @ # % & & & # + @ # # @ @ # $ % & # + $ % $ % & = * # $ $ % % @ . # ' ' { % # @ + # ; ~ ~ # @ @ @ + # + . # % @ . . . . . . + @ @ & ; # + @ { [ < > , ^ ] ] - & $ @ @ # $ @ @ + . + $ * # $ _ ) ( ' & # @ % [ a $ @ & ' { # . + $ $ + . + * = & % $ # + @ @ @ @ + . + # $ # # @ . . . . . . . . + + & ' [ 8 d C x Q C < ) 7 5 g 6 : , d o C 5 > ~ a C u 9 N l N R O o w t S B e k 2 b ! / ^ { * = { & @ @ # # # # @ # . ", "@ + + + . . . + . @ # * = % ; { - = @ + $ $ $ ; = - & # $ % $ @ @ % & % & % @ # # @ # & ; * # & * # # @ . @ ' : ) ~ & # # $ * ; * # @ % { ~ & # # ' ~ @ . . . . + @ @ @ % & @ . . . & ' ^ - ; % % ; # @ + + @ + + . @ @ . . # $ # / t 4 ( & @ + . $ ~ ] @ + + @ @ . . . + + . + ^ 7 ! { * % @ + @ + + @ @ + $ & % @ + @ + . . . . . . . . @ ' : 2 d w 9 m w 3 1 | k 4 | A < _ 4 o s e , , w G F l G m n T Q 4 8 j x p c i | 3 < _ ( - & = - & # # % $ # @ @ @ . ", "@ @ + . . . . . . # & % % & ; { ] & + # * % $ = - { ' & % & ; $ # = * # # # @ + # $ # ; % + $ & % % % $ @ . : 6 b ! / ( = $ % $ $ # # * ] / - $ - ^ * + + . . . . @ # @ $ % @ + + + @ # $ @ % % $ # + + + @ # @ + . @ @ . . # # @ { ! ! & + + + + $ @ . . . @ @ @ @ + + @ + + { 6 c ( * # @ % # + + + + @ # % % $ @ + + . . . . . + @ + + # ' 3 c t | 2 2 [ 7 e A 5 7 2 2 ! a 4 9 i 2 1 | j q Q U H Q H D I 2 t m S l z j c a ! ! ) ( ; ; ; * % % & $ @ @ @ + . ", "@ @ + + . . . . . % { ' = = ' { { $ + % { % - - = & ; # @ $ = & % = % $ @ $ # + * = * # + + & ; # ~ ] - # @ ^ | 7 3 [ < { & # % $ + + # { ' { & * = @ . . . . . @ @ # @ # * $ + @ # @ @ $ % * * % @ + + @ @ @ + + + @ @ @ + + + @ + + @ @ . . . + @ + + . + * $ @ @ + + + + % ~ > } & $ # # & * $ @ @ @ @ % = * * # + . . . . . . @ # + @ & ' ) 1 2 5 2 1 | t g e 5 } 7 7 } 5 c 9 9 6 5 5 j V K T W U X x j s 8 u y D j r 4 b a } / ^ ' * & & % % & $ @ # # @ . ", "+ # # + . . . . . % - ' ~ - ~ ^ ^ & @ ; ] - { * @ + . + + @ % $ $ % @ @ + @ # % ~ ) ~ @ . @ - = % ) : % @ $ ) k 1 _ / ( > : ^ * # . . # * ; ; $ @ + . . . . . . + # @ + % ^ ; @ # # # # * = - { ; % # & * $ @ + @ @ @ $ % + . + + + + . + . . . . @ # @ + @ # + @ @ + @ + . @ + + . + # $ # # ; * % @ @ # $ = - ; % # . . . . . . & $ . + $ - { : 6 6 2 | 7 2 1 3 g [ 2 a 1 0 A d o 3 | t j N Y M P P X v v m o d y Z u p 9 9 5 a _ ( { * % & & & % # $ # @ # . ", "+ # $ + + + + + @ # ; ^ ^ / ] / - # @ ' / ( ; @ + . . $ = & $ # # @ . + # % ; { ~ _ ~ # . & ' & & { * + @ @ > 2 ) = ~ ^ 7 2 [ * + + @ & $ @ # $ + . . . . + + . + @ @ @ = / - + . + @ = ~ - ~ ; - / b b ' & @ @ + + + # # @ # @ . + . . . . # $ + @ $ # % # @ @ + @ @ # + . . . . . + + @ + + + @ @ + @ @ @ @ $ $ & @ + . . . . @ ( % + # { ] ~ 7 6 e k A 5 | 3 ) < w d | A 9 4 d 8 9 c z N ` X H .E B v B y r h ..n o 9 t i 2 ) ) / ' ; & $ % % $ # # $ @ + . ", "@ @ # + . . . # & $ $ ~ ] , / = % + @ = ] - @ . . . + = _ ' & % $ . . + * = ~ ) ^ - - $ @ = ~ & & $ . . + + % ~ = @ # = > g , $ + @ % ; & # # $ @ . . + $ * & $ + # % # ; ' * + . + # ; ' ~ ; % ~ < k A { # @ * $ + @ + + $ ( ^ % + . . + . + % $ + # $ = ; @ + + # @ @ @ @ + . . + + . + + . . . . . @ @ @ $ # + # @ . . . . . $ - $ + % ~ ^ > a g | e k p t 6 _ ( A d d t 9 S f d 4 2 d ` D F T +.V I z e 5 i V P f 9 5 c g < > _ _ ' * % % % $ % $ $ # @ @ . ", "@ + + + . + @ - ~ ; $ # & { ] % + + + . # $ . . . . # ( < ~ ; * $ + + @ % = ] ( , ^ * + @ * = # # # @ . + # ; ' % + + ; ~ - & + + % / ^ % # $ & % @ # ~ : , ; $ + # # $ & & $ + + # * - & * % % % ; { ~ & @ # % % + + + @ { / ( = # . . @ @ @ # @ + @ $ & % @ # # ; = @ @ $ @ + @ @ @ + @ + . . . . + . + @ # # + @ + . . . . . # % + + $ = ( < b 1 k c t j p A > ! e 0 d 0 l V H i A A N @.V X #... .Z s g A 9 n n q p 8 e g < > : , / ; & * * $ $ % $ $ # @ . ", "+ + + + . # # % ; % $ @ $ - = # . . . . + + + . . . $ { ( ( { * $ @ $ $ $ * * - , : * . @ { - $ $ # # . + & ^ ] # + + & ~ = % # % ; ] - # @ $ & % $ ; ) [ ) $ + + + + @ # # @ + @ $ - = & & & ; $ @ # * & # # @ @ @ + + + ; = & # + . # * % $ @ + . + @ + + # % ' / - $ $ # @ + @ $ # + + + . . + + . . + + + + @ @ + . . . . . # $ + # % { ) ! } e 9 9 4 C j r < ! d j 8 w p Z v 3 2 A q @.` Y $.%.F I 2 w l n &.*.n j i 7 a a } < , ^ - { = * * & $ $ % # # . ", "+ + + . . @ % # @ # # @ $ $ # + + . + # @ . . + + + % - { ~ ~ = $ % % $ # # @ - , ! ' + # ; - = ; ; * # $ ( < ] # + @ % = = & ~ / ; ; # # & * * ; = * * - * . . . + . + @ . + @ @ # % % % ; ; * % # $ & $ $ $ @ + + + + + @ @ # + . . # & % % # # @ @ + . + # $ ~ a > ; ; % # @ @ @ + + + + . & ' # . . @ # # + % % + . . . . . + @ @ $ ' _ ) ! } 2 4 d z l S G 2 _ o F B C z C 0 k 5 d l L =.M .J N I 0 q P -.;.>.n S i e 7 b [ [ : ) ) _ { - - * $ $ $ $ $ . ", "+ + + + . + # # # # + + @ + . @ # + + @ + + . + # * { _ / _ _ % @ # # @ # # $ ' , > ' @ # & - - { ~ ] - - , { & # @ # & ; = * ^ , * @ @ ; , - - ] - @ + # + . . . + + + @ . @ % $ # % * = & % # % % ; $ @ $ $ @ . . + $ ' $ + # # @ @ % * ; * % * * % @ + * & @ $ ^ / & % # @ + + . . + + @ + ( ! % + # % @ @ + % $ + . . + . . + + @ % { _ > : a 6 6 8 f V p I z } 0 ,.h x d w C s t s I D $.'.).!.K ,.K ~.-.{.].W p p o 4 6 } > _ > < ) _ - - - % $ $ % $ @ . ", "+ + . . + + + + # @ + . . # @ & ; # . . . . . + & ' ) [ ! < ~ + @ + @ $ & % % ] _ ( = @ @ & - ; = ~ ] ] / & @ @ @ $ $ * ~ = * ( , % @ $ * ' & : 3 / # + # @ + + + . + + . . @ % $ $ % ; { ; $ # & & ~ = # % % % $ @ = ! ! $ @ # # @ # ^ / * ; & * = * # $ - % + . + @ @ . . + + + + @ # ; ' * { - $ & ; ; % # # $ # @ . . . . . + + # $ { ! 7 b 7 7 | i q n C p p 6 t D ,.H B B x u h S x @.^.,.J J .O )./.(._./.D q v u | k g ) , ) - - = & ; * $ # & % + + . ", "@ . . . . + # $ $ $ # + + # % * = $ + . . . @ ; ~ ] ( ! [ - # @ # + + = = # # $ { ^ = @ # % - ; = ~ , , { @ + @ # $ $ % - - & { ] ~ - & = { * ^ : ^ % # $ # @ @ @ . + @ + + @ # * ; * - ' - * * ] - ' - % * * * & $ ! A ^ @ # # # % $ * * % - = * $ % @ + @ + . + @ . + + + @ # % # @ $ ' / * $ @ @ & & & = { = % # # . . . + + @ @ # $ - 7 | } [ b | s v I p z i g c F :.).N l m X ^.h q E L P U <.#.~.[.}.|.1.2.,.y j 0 c 4 } ( ^ ( { = % $ * & & & * * # @ . ", "@ + . + + # * ; & % * % $ * * ; ; # + . . + % - ~ = ; ^ ( # . + % # @ > ) @ . . & ' * # @ $ * & $ = ) _ % + + $ & $ $ & ' ~ % # = , ' $ $ ; * * = * # # # @ + # # + @ @ @ @ # % { ~ ~ - - - - ' ~ = ; * = = = * $ $ e k - $ = % # % $ + + # ; ^ ( & # @ + + . @ $ # + # # @ @ % $ # $ $ ~ - @ + + @ % & $ - ~ ^ * $ $ + + . . + @ # $ & = ! 6 } | t i B j S p r i 3 5 V X ` f l q T V f Q I J .P 3.{.4.5.6.7.8.9.K x y s s A } ^ ' ' ~ & $ * * * $ & % % & $ . ", "# + + + + # - ' % @ & * & = - { * % $ + + # $ $ & $ $ ~ ^ # . + & % $ ) / + . . % ] - $ + @ # # + + & = @ . + # % % ; ~ / ] * $ - ; & # % % $ * & # # # + + @ * $ + @ @ # @ # = ~ ( ( - - { ' ' - - ; * ] ' ; - & * b k % & - $ @ # @ @ $ = ^ - = ; # + @ * ~ * $ @ + # @ @ @ $ # . + + + + + + $ & * = - = ; { % @ + . . . + @ # $ % = ] b 6 g 2 0 l s p f V h d } 8 Q U h N u y T Y v 8 n P !.T ~.0.a.b.c.d.{.e.f.f r f p 2 b ) ] - - * & ; & $ * & # # $ # . ", "# # + + + @ % ; @ . # $ % % $ & * ; - # + % $ + # $ ' : ) = . + $ % % * & . . @ % = { # . + + # + . + = = . . + # % ^ ! 3 , = ; % @ + $ ; % % $ @ + @ # @ $ # - & . + @ @ @ # = ( ' ] { = - ~ ] - - - ; = - - - & % - { # & & @ . . + @ ; ~ ] = % $ # + + * { $ + . + . . . @ # + + . . . . . @ ; - * # % ; * & @ + + . . . + @ # % ~ ] , g 7 3 e 0 G o B I l j 0 | w q X l Q h I Q ^.U G ` f.=.).9.g.h.i.b.j.d.k.f.y f m p t | ! , ^ - - = { ; & & $ # @ $ $ . ", "$ @ + + @ + + + . . + # $ # # # # & ; $ @ # # + + ; b 2 > = . + % ; ; # . + @ % ; = = + + # * { $ . @ < ! $ . . @ ; ( > < ^ * $ % * % # @ @ @ @ . + # % % % % { ] # + @ @ # @ & ( ( - { - = ' - ' ~ - ; * - * # @ @ # # @ + @ . . . + $ % & # # @ @ @ @ + + @ . . . . . . + @ + + + . . . . . # / [ * . . @ & % + + + + . . + + # - / ~ b 4 w } 4 0 o j m p z o z 0 I h q q V u f I h h q +.#.l.e.b.m.n.>.o._.p.2.T P V l l u e : ! > ' ; ; ' = & % & & $ $ # . ", "* @ @ @ @ + . + . + # # # # # @ @ % $ $ @ @ @ + + = a 1 / # . # - ] ^ ' = # $ $ % & & @ % - ~ ] $ . $ } a - . . @ ; , ! > { * @ & * & # + + . . . @ / b ^ * $ ; ' ' & @ @ # @ # * ; ; { { - ^ ^ _ _ ] ] = * @ . . . + @ # . . . . . + # @ + . . . + + # $ + . . . . . . . . # + + + . . @ @ # % ' , # . + + @ + + @ # + . . + + % ~ ' ( 4 r i 9 u v p v r p r w 4 t q f m V h s 9 l X V ` M '.n.q.r.q.i.s.j.t.q.o.u.!.V j V y w 3 ) _ ; & & ; ; & $ % & & $ # . ", "& # @ @ # + + + @ + # & ; ; % @ + # & & % $ + + @ & = { % . + ; _ < ~ ' { @ + @ # & * # * ' - = + + # / _ ; + . @ ~ 3 [ ) & + + # % % @ + + @ % # % ( 6 | = $ * = ] _ = # + + + + @ $ % & & ~ / _ / _ ' * @ + @ @ + @ @ @ % $ . . . @ $ % . . . . . . + + + . . . . . . . . . . . . . . # $ # $ @ + . + # + + + % ; $ + . . . . * { = / s x s 4 h V j s i u B | | e r m s S r t 4 l V Y D T ).=.v.w.x.y.|.z.A.m.A.[.*. .G V G 9 a _ ~ * & ; = * % # $ $ # % & . ", "% # # + + + + # % @ # & { = % @ + @ % & ; % + + # # @ $ @ + @ * { ; $ @ # + . + @ * ' = ; ' ' * @ # % ' ; + . . $ / b a ) # . + + * ; # + . # ; * % $ ^ | / & ; ; ' , ' $ @ # @ @ + + @ @ + $ - ^ ^ ) ' . # = ~ ^ : , * & / % . + + + $ $ . . . . . . . . . . . . . . . . . . . . . + . . . . + + . . + $ ; { * * * $ + . . . + = - & a d s d | r j r B i 4 9 2 1 ! : w 8 o 0 A 5 o h n ` #.B.i.4.C.v.<.j.D.E._.m.s.O .l I m w } / - * & * * & * & % $ # $ $ . ", "@ # $ @ . + + ; ; @ # % & # @ # % $ @ & = ; @ + @ + + @ # $ # @ @ @ + # % # + + . % , ] = , ) { $ * & $ @ @ & ' ' ] > ! ' + + . # ~ ; + . . . @ $ % $ $ ' ' * % * = ; % $ # $ $ $ # + + + + + $ * - ( = @ ; ~ ( < w 3 - ~ { @ . @ * ; $ + . . . . . . . . . . . . . + + + + + + + + . . . @ & ; @ + + # : 9 v 3 % @ . . . . + # = { ] 7 8 c 5 4 9 z 4 1 8 d 8 7 1 1 [ w 0 z w k C 0 f I Z F.8.G.g.H.(.;.I.m.J.K.|.n.J h j F G 5 } ) ^ ; $ % $ % = ; $ $ & = $ . ", "@ + @ + + + @ % $ + @ $ $ + + # ; % + # % * $ + + @ @ % & & $ @ + + @ & % + + + + + , : - ( ~ & $ # @ @ # ; , : ' ~ ) < * . @ @ + & $ . . . @ % - { & @ @ & # $ % % $ $ $ $ @ # % % # + . @ @ @ + # % $ * , [ [ 4 5 _ = ( ] @ + # a d : . . . . . . . . . . . . . . @ @ @ $ % # + . . + # ; ] { & & # = 8 N T l ; + . . . . + % ] { ] a w e | A i C d t s o e 7 6 3 8 v 4 0 t A C p j j n B./.5.}.o.L.o.%.:.3.0.h.=.!.F u i k k 5 } / ' = - ; * % $ % % % = $ . ", "+ + + + # @ + + . . + @ @ + + $ { * @ + # $ $ @ + $ $ % & & $ @ + + + # @ . @ @ @ + $ ; $ & % + + . @ & = ~ ( ] $ % ] ~ $ . @ # + @ * * # $ ; ~ ' ] - $ ; { & $ # @ @ % $ # @ $ & & * # + @ % $ $ @ # @ * 6 8 s x 3 & & ] / ; @ & 3 9 , . . . . . . . . . . . . . + @ # @ % % # + + # = ^ ] ( / - * & , t i Y Q , @ + + . . + % { * { b k k | 2 C i i x o p 2 b ! } s x v B p d d j r G H R ~.x.M.9._.I.w ) F ).%.N.O.,.x 5 w k | ! ! _ ( ' ' * & $ $ $ % & % . ", "+ + @ @ # @ + + . . @ + @ + + = ' $ + + # = * $ @ & ' - % & $ @ . . + @ % & $ @ % @ . + # $ # . . + # % & * - % @ + @ # + . + # + @ * { = & & * ; = ; ; ) _ ; # # + # & % % * ; * & * $ @ & { * % % # + + : i i } ; + @ - ^ & @ & - $ . . . . . . . . + + + @ . + @ @ + + @ % @ + ; _ : : , < > ; $ & > c g i v b $ @ @ . . + & ' - ( a | 2 6 5 9 A 4 o j q A 3 1 a k I S o r k c j m F K <.y.d.P N b.1.< & 8 O M M M ..X w a 3 b } 1 ) ^ ( ~ * * * & # $ & $ . ", "@ + + @ $ @ @ + . + % # @ # & = % . . . @ = - - $ % ~ ' % % * & . . . $ / , { & # + . # ( > ' + $ # + @ # # & & @ + $ % @ + + # & & * { ' $ @ @ . + % { ! - * % $ @ $ ; & ; { = * ; * & @ ; ^ - - ' { # . ; [ ^ + @ + + * % + + + . . . . . . . . . % $ @ @ @ @ # # @ . . + + + . = < b > > ( ; $ # & ~ ( ; ^ 1 / $ % + . . @ ~ _ { _ a A i 5 c 9 d f u h v 5 a 3 a t h z v u A c r x q ` h.=.<., / y W w > 5 n ..+.D X j 6 7 a ! ! _ ^ / ^ ' * & * * % & * % . ", "+ . . + # @ + . . + # # @ # % $ + . . . # * - ' ; $ & % # # & $ . + + & ] , } [ % . # ( ! | } * ; # . # & = ; % # $ - ; $ @ % ; - ; $ # ; % + # $ - , } ! * $ $ # # $ % * = & $ * ~ = $ $ * = * ) 5 a # . + % % . . + @ & $ @ + + @ . . . . . . . % - $ % - ; * * $ + . @ * & @ + # ' , : b > & # # $ % $ # $ * % # $ + . . $ , , ] 3 6 6 e k i s 9 s p G u } b | k i z s B B d z y x p Q {.#.r ' . # w S } g S +.!.O h z k c g : < ] ~ ! , ( = & ; = % * * & . ", ". + @ $ $ # + + + @ # @ + + + + . . . . $ ; & % % # $ % @ # @ + . + @ % { ] < b & . & ( ] ( ) ' $ . + $ * ~ { ' = ' - * * ; & * ; $ + # ; & $ * ~ } p A < * $ % $ $ % % = & $ # % & $ % % $ $ $ ' < ] + . . . . . . + . + & % + + @ . . . . . . @ = * # * ) _ - ; % $ $ * | s ; # $ { ] ' ( ( * $ # $ @ + # & @ + @ @ + . + & } > > e 5 2 e 2 9 5 5 | 0 r t 7 | 4 s i 9 s o k c f Q f l W (.P g # . . 2 n } b V +.+.&.` v p m 4 ! > , ] ^ , ( ' ; * & $ & % & . ", "+ + # & * @ . . @ $ $ @ + @ @ . . . . + $ % $ # @ # & & # + @ + . % ~ - ; * ] _ * $ # # * { ^ - @ . $ = = - ' : , ! > * = ] ~ % @ # $ * ; % * { ' : a > ' * % * $ # $ % % & $ # % % $ % % % $ # $ & # . . & * . . + # @ # ' ; + . . . . . . . + # $ # # - ) : { & * - } g 0 &.8 % * = = $ # # & @ + + + # { ^ $ + @ % # + + = ! > : 6 9 d A 6 6 2 5 c i d k 5 2 5 C 9 w v f d 9 j I l q R ;.F : @ . # c 8 < d @.O...L @.x u u c 3 : ) ( _ : ( ( - % & - & % & . ", "@ # % * & + . + @ $ $ # # & # + + . . + # # $ $ # % = % @ + @ $ @ - a 7 ( - - { { ; @ # & = - ; @ + & ' = & ' / ( ) ( ; - ' { # @ $ % % % # @ $ - ] ] { & * & ; $ # # # @ $ # # % # # $ % & # # $ + . . . 6 t + . . # $ ~ _ # . . . . . . . . @ @ $ = ' ) > / = % & , m x e 8 9 * + @ # $ # @ @ @ . . . @ ^ < > = ~ ] $ + @ = , < ( 2 8 c 5 e | 6 k i 8 8 e k A 0 t A 4 C I m i 5 C v f h.#.I , . . ; 4 8 b H P.=.$.'.F.F z d 1 ! a ! _ ) ) ( ~ - & & ~ - % % . ", "# & & & & + + + + # $ # * ~ * % # . + # % # % $ $ $ @ + + @ @ # @ ; _ ] = = ; * * * $ $ * = { ; @ + $ & % % ] / ) , ~ { & # # $ % & % @ @ + + # & - ^ ] % @ . # ; % & # # $ # $ & # % ; % ; % @ @ . . . + = ~ @ . + # & , > + . . . # # + . + @ # * ' ! 6 [ ^ - / 1 l x 3 ~ ; ; # + @ # @ # $ # # # @ . . @ ; ] ' ~ - @ @ % ' > ) ] a A e k 7 g w k o v t 1 e | e g e i 5 o x t w i m K 9.N.K w > , } | 7 ] } Z 3.s.B.9.Y 0 i w 6 b > ) < ( = - * ; ; { - & $ . ", "$ & % % # @ . . . + + # - { & # @ . @ $ % $ $ # # @ . + @ + + $ # @ # @ # & $ @ # $ & $ & ; ; $ + + + + + # ~ _ ) } : ; $ + @ # & = % @ + . + # & % ' { $ + # * ] - & # @ + + @ # # % * & $ # @ + . . . . . . + + + # % ; % + . . * g < . . + + % - ~ < 7 } ) > B H J w * % @ + # % * & & % # $ % $ $ # + . . + + @ # + @ * ( ^ ~ ' [ 6 g A a 2 8 k s v i 2 c 2 < 7 | v r p l C i t h J 9.B.M J N.n S v S 1 ] s W O.!.T n C e 7 a ) ( _ / - ; ; * = { ^ ; $ & . ", "& $ $ @ + + . . . + . + & % @ + + . + & ; $ # @ $ @ + @ % @ . = ^ ; @ % ; ; & + + # ; & # $ # + . + + . . + $ ^ < b _ ; # # # # @ @ + . . + # $ & * - * + + % , 1 ( # + + . . + # $ % $ @ . + + . . . . . . # { % $ % $ $ @ . . $ p n 1 . . . @ { ~ ; / : < g k W &.U 6 & # # @ $ = { { - = & % & % $ & # + + + . . + + + & ' = - ( b 7 g 1 [ 1 6 1 4 4 k 4 c 6 a e e p x S r p 4 0 U $.N.n.M V 9.%.n W h.'.f B z C q h h s g 1 3 : - & = - { = ; ; ; ] & # $ . ", "; & # . . . + + . + @ + % * + + . . + % $ # @ + + + + # $ @ + - > , : [ b b ( @ @ # * & + + . . . . . . . . % , , , % # $ $ $ $ + . . . + @ # % @ # % # + + # ( ! - # . . . @ # * * $ + . . . . . . . . . @ * ( ; & & $ + @ . . , O j ; . . + % / _ { / ! 3 8 z I E t = # $ $ % ; ' ] / ~ ~ ^ , ^ - ' = ; # # # $ + + + + * ^ ' ' < a b a < [ 1 2 e 0 8 3 A 4 | a e 5 z G r z d w u ,.:.P.#.#.&.&...o v +. .u r 9 _ u y u t 6 A A < - ; ( , ] ; - = ' { $ $ # . ", "- - $ + + + # % + + + . + # $ $ . . + + + . + + + + @ ; = * = { ^ 3 w 4 9 0 ! # + @ @ % $ . . . . . . . . & ! A ) = # % , = # $ % @ . + @ # # @ + + . + # # # # $ $ $ + + . + # ; * @ + . . . @ $ # . + * ' = * - % @ @ # + . % 6 v / . . + @ * ^ ^ > c r 0 B p o ( + + + % & = ~ ( / ) < [ < } : , ( = $ $ & ; ; % # @ * ^ ^ ] ^ < } 7 a , [ 5 9 t j 4 6 5 d 9 g 1 c B h B 4 8 i o ` +.F.$.{.v.I.4.I } 1 e 4 C r 4 0 I j u o c [ ( ^ < [ , / ] { ' ( - % # $ . ", "- ] $ . . . # # . . . . . . & { % . . + + . . + + @ % = ' ( { ; - 7 c A A 5 : # + + + # ; @ . . . . . . { 7 t 8 b % + . * & # # & # . + & & @ @ $ @ . @ * & # + . . # % . . # * & # + . + # $ ; & @ . + $ ; * # % % & ; $ + . ; c k + . . # & ~ ( , | S S u v g ; . . @ @ # % = ~ ( _ _ : [ } : , ( { * $ % - - = ; * & { _ ^ ^ ' , } 1 a / ( | k i d 6 5 0 s 6 2 c B B s A b A c 0 I W K L G.c.Q.R.n.p + ~ 9 p S y u v v l m 4 a : , ! ) ^ ( _ { ' - { % # # . ", "# & $ . . . . . . . . . . . ; ^ ~ $ . + @ # @ @ @ $ % * - / { & % { ! b } [ ~ # @ + + $ & @ . . . . . ~ s y N q c ~ + . @ # @ $ % $ # $ & $ @ $ - # . + # % @ . . . $ * # . # % @ + + + @ # $ $ @ . . . + $ $ # = ^ ] ; @ . $ ' _ _ # + + % - ] ( : j :.Y 0 i ) . + % $ $ @ @ = ' ^ ( ! b } ( ' { * % % % ; { ; * = ; & { ( ( = ~ ! 3 > ( , ! a A s A 7 w d t 2 6 5 4 c u w c 0 t B K @.q k ` S.w.A.T.~.! ] 9 S p J q s S j I B 6 < [ } ] ~ ^ ~ = - - - $ # @ . ", ". $ = # . . . . . . . . . @ = < | 1 & $ ; - & @ # % ; - - ' { $ $ ; ( : ^ ' = = # . + & % . . . . . % B @.n f E z _ @ + @ # @ $ $ * - ; @ + @ & - # . + $ $ + . . . ; = % + @ . . + + + + . . + # + . . + & * $ { ] ~ @ + ; / [ - * # + # * - - ^ b O |.l.8 , ; @ # = - = { ] ' ^ ( / g 1 1 < ^ ~ ' * % % ; - & % % # % = ( - * ^ [ [ / ~ / [ 1 A o 3 7 i u c c A 8 w 4 5 | p m 8 B Q Y :.y ,.U.V.W.X.Y.&.a 3 k e v S C v x j 9 < > ! / ( ~ ~ = * ' - ; # @ # . ", "+ % { $ # + . . . . + . . = ) s f 0 1 , ; - - $ $ % = ] ' - & @ @ % { ] ' { ] * @ + @ $ + . . . . # : h ,.y f E C ) # + @ # # # & & & # . @ % ^ ] + . + % = & + . @ $ & $ % { $ + % & # + @ @ $ / ; . . + # ; ; = ; # . % < > ( % @ + . @ & ; - ] c J %.s - . + @ * ~ / : a ! > < a 6 5 c A | } : ( { * * & & & $ # @ $ = ' ; - ] ) : ^ ~ / : a | 5 e | o q 8 t z 8 t i a > e z t r X ..R %.@.Z.w.`.E.R.#.i 2 p 0 g z z z l z k g 1 } , / ( ~ = - { - ; $ # @ . ", "+ % ; ~ - @ . . . . . . + ( 8 S S C C 3 = - { % % % = ^ ; $ # # + + ; ] ^ ~ { @ . + # # . . . . # ] 9 ,.P.*.Z G o ! % # ; % % & % @ + . + # ( 2 ) . . @ & { ' & + + @ % # ; , _ * * % @ % = ; { ) * + + $ * { { * & + . ; b / ; # . . . . + & / , i D s $ . . + ; = ( < b } } > } 9 t g A 1 1 2 6 / ' ; * ; & $ % @ @ % = - * - ] , > ( ] , < 3 2 9 8 w 0 s c 8 i 8 0 0 3 _ : 5 i y U Z :.%.N. +`..+++@+$.6 | n E 2 S G v z t 2 w e 1 ! _ ( / > > ^ = - & # # . ", ". $ = , = @ . . + + . . # : C G v B f t ] % * $ % ; ~ ) ; + @ % + . & _ ! ! % . . + % % + . . . * [ r .F.*.p 0 s ( $ # ; ; % & $ + . + % { e 9 > . . # = ' { { $ @ % ' = & ( / ~ % @ % ( ^ - = - # . + @ * ' ( ~ % . . ' > ' ; $ . . . . . ] A g i u _ . + @ - ~ ' ( > ) _ > ^ 1 c w A 1 k 9 | A e < - % & & % % & % ; ' ~ & { / ! < ( ] : b 1 | A e 8 p c 2 8 c w d B 9 3 ) e z Y M Q %.).{.#+.+++$+%+{./ ] k g ] t y x z i b 6 w c b < [ < ) _ ^ - = * # @ . ", "+ @ ; _ ; + . . . . + + # > z l B z f u < # @ + # - _ : = @ + @ + . + { _ ] # + @ - = & & + . + ( A j V z a = _ , # @ + $ ] * + . + . . = ) A i ] . . + % ' ( ^ $ @ * , - @ $ & # @ $ * ) < { * - ; # @ % ^ ! } a [ * @ < 3 * % # . . . . - c q N j > @ + + % { ' { ] / ] ^ ~ _ : 7 A g 1 0 C 2 6 d d : { % % = - ; * ; - - * _ ! [ , / ( [ < < b g 1 e 9 4 5 e A i 0 t k | > 7 o N W F X $.1.r.&+*+=+q.u.2 [ t 5 | 0 j p o A a a 6 1 } [ a > _ ( ( ' = * $ # . ", "$ % * & # + + + . . . . ; 3 8 r p S m m > + + + @ = , < ^ @ + . + @ # * ; & # # & ] { * * $ . . ' 5 w : & . . - 1 = % # # = $ + + @ * ~ ^ } 7 } ; @ + + @ * ] ' @ + @ % # + . + @ # _ 5 a ~ @ & _ _ ' ^ / ) } 1 i z ^ % e e & . . . . + < p @.T P X 3 . . $ = ~ ' ^ ) ) / ] ^ ) ! / _ ) > 3 5 ) > b 6 b ! ^ ~ = ' { # @ % = ^ ! < < > ^ ] 1 < 6 | 1 e 2 e i 2 e g w 4 6 k 1 a k v D M W R (.-+;+>+,+E.S.0.G w C n x s d y l u 0 w 2 5 5 1 < 3 b > / { - ; % $ . ", "{ ^ ; . + + + . . . . . ~ 1 g k i z z p ( # + + $ { _ b _ # + @ # - ] ' = % + @ * ; * & ; ; & + # ~ = . . . + / d 5 3 / & $ + + + & a 1 : ! ] * & $ # + + @ % @ . . + # # # + $ * / t 0 b & . # ] - $ ; % % ' ! o z - = A > % . . . @ g Y U L U y l 7 $ $ & = ' ' : a a : ~ / : : / < : _ / _ ~ ^ [ ) ( , > ) - & # + $ * & = _ ! } _ ~ _ < : | A k | k 5 8 A | | t A g 1 b 8 y i m W P &.n.v.'+)+!+S.t.v.I ; _ c k v B l l l i A A i k 6 a a [ < ) ^ - * % # . ", "- ^ % + + + + . . . . + ; > : [ | 7 5 a - $ @ + ; / < < ^ % $ * - ] / ( - # . + = ' # # { ' ; @ + + . . . . # 2 f o 9 > { ; # @ . ~ e a _ ~ # # * # @ + + . . . . . + & $ % & $ * b r v A b * * ; $ . . @ $ @ * ' ' $ & ; & - # . . ~ s J @.y F 5 ^ / > ) = & & ; ] ! } : ) > } : , [ 1 7 3 | A 2 6 [ ( ] / , * $ . + @ # @ $ ' < > _ ] ~ , [ 1 | g 3 g e 4 2 b b 1 6 e } ! c x 9 d I H P =.M.~+w.m.M._.{+B = & ; 7 Z q v v o 2 8 t o 7 e c 3 } < < , % % % $ . ", "$ $ @ + + + + + + + + + % ~ _ , b a 5 3 * % & = ^ > [ > * @ & ; - ] = ~ ~ # @ @ ] [ & # - { $ + . . . . . . ~ Y X 2 1 _ * % # @ + ] > ~ & $ # # @ + + # @ . . . . + # * % # & % ; } t j h f g ( = @ . + ; > / ( ~ - ' ~ $ $ - # . + } ` @.I k ' + @ { / ' ; @ @ & - / : [ a ) > 3 2 8 A d j t v B c a : / { ~ ; @ @ # $ $ @ $ { ^ ] / ] ' [ b 3 g e 2 g c 0 w > [ 3 7 g b b d u i p I W 3.j.z.A.H.n.#.$.` 9 [ , ^ 6 u S y V o e d d d i k 1 [ 2 a / ' * % & % . ", "$ # . + + . + @ # $ @ @ @ @ = > ! ] ) , ~ = - ^ _ ~ / ^ @ . @ = ; = & & = & $ # ; ! ' + $ % + . . . . . + . 6 =.P.k & $ # $ % & $ - ; # @ - & @ + @ @ # + . . . + % * ^ - # $ & * ' [ t q j e / = + . . ~ 6 A 6 z | 6 1 * % $ + + # } l g - $ . . . . + @ ; % @ $ ; ) [ 7 k A 2 9 0 x 0 o F 4 < ~ _ > : / ; - # @ % & ] _ ' < < % % - { ' : [ | A 6 g 6 A w b < < 7 [ ! : 3 8 k w p h D ~.2.c.]+&+$+5.u.f.m ! : 5 s B f X ,.G 0 p z 0 m 2 1 A 6 3 , ~ = & % $ . ", "& # . + . . + # % $ @ # $ # $ ~ ' % & ' ( ' = - { - & & @ . @ * ; $ @ # # # @ + % ~ * . . . . . . . . . # ' i ~.0.x . . + ] , { * # $ + . / i ] . # * @ . + @ @ & ' ~ : } { @ * - ; ] 4 0 < ' { % . . + ] [ b 2 o w [ ' @ @ + . . $ & % @ . . . . ; 7 b ) , ( { = { : k o j l u 4 } ) ~ ] ~ & + + ; & * { & % # % * = ^ ' * & & . . . @ = , ! e 8 6 3 6 A 7 < < } b [ _ , t i 5 t p E Y #.u.|.^+/+(+Q.A._+B.V _ 3 t u G V n h t s m r 9 w e 6 6 [ _ ^ ] { $ @ . ", "* @ . . . + + + $ @ @ $ & & & # # @ # ; - & % * ; $ @ % $ + # $ = ; ; # . + $ & & # . . . . . . . . . + = 7 s F !.0 . + - a ( ; $ @ @ + . - .V * & } } ^ * = / / _ < < > ] * ; ; * ; ' ' # $ * + . . $ ) 7 7 | 3 ) = . . . + . . + . . . . @ $ ( A 0 2 a [ [ > , [ 6 B V d k 1 ; . . . # # & ] [ A ( { ^ { % % $ @ + + . . . . . . . . & ' b 4 t g ! < 1 ! > < 1 A 3 : 3 S I o C G q K F.i.4.*+:+<+)+[+}+T._+n 6 c S l F E I C v v o 5 6 6 | k b / _ ( ' # + . ", "$ @ + + . + + . . @ # % = ^ & # @ @ $ # # # @ # $ # # # @ $ & # & * * @ $ * ' - # + + . + . + . . . + { [ k 5 g 7 [ * % 1 5 = . @ @ + @ @ % 5 l ~ ; c o j b ( < ) < [ > ~ - , 6 / % ; = & @ % ~ ; @ + # ( 5 c k 9 _ & + . . . . @ # + . + % { _ d o e 3 > > g 7 3 9 u s o | ~ $ . . + = ^ ^ < k t w e 9 C 5 ] % + + + + . . . . . . + + @ & } i e 1 b ! [ [ < : b 3 3 6 s l n p A S q X @.9.j.C.|+1+(+2+[+ +*+M.G z m V f Z F u F x u 9 | | k c | _ , { & @ # . ", "+ + @ # % + . . + @ # $ & ; # # # @ @ # @ @ + + $ & # + . % & $ * = # + ; ^ ; & . . + + + . . . . . & e I C : { { ] & $ ( ' @ . . @ % { - # @ ; # $ e 0 8 a ) ! b 3 < : _ a v S [ & ( g = * ^ : ( ; @ + ) c i o 2 , % . . . . + # # + @ & 1 1 A f r 5 e [ b w 2 8 x W 9 & + . . . @ { a 2 e C p u v o G W X ! + . . + + + . $ { , ^ = @ + @ - [ | 1 e a < > ! 7 3 1 g o r B B 4 c z x J =.d.a.`.|+3+4+:+5+`.E._.G b C ` W ,.V j f m r 9 c c 4 | } _ / ; # + @ . ", ". . + # % @ . . + @ % & $ $ $ # # # # # + + @ @ $ $ # @ . + = { ] { # @ & ; # @ . + @ + . . . . . + ^ t Q l ' % = % . + # % + . + @ & > ( . . @ % + [ 0 4 b > } 2 < ] / _ i I g ( $ * ' $ - > > : { $ + ' b 1 3 ' % + . . . . @ + . + % / 7 5 9 B 8 e 8 A C Q B m E ` 3 . . . . $ { 7 j U U %.f f S u ^.O z ' . . . + $ ~ , 3 r l 6 _ ^ ~ * % < 2 c 2 [ ) ( ) 1 6 b 3 z S z u r l r h +.{+8.O [.>+/+:+4+6+7+8+k.I ! k x V Q y p j j x u 0 A g [ : > ~ = @ @ # . ", ". + + + + @ @ + . @ % * * = * * % % # # @ $ # # # @ + + # * ' , ~ $ @ + & % + + . . + + + . . . . % 2 p I t ; & ~ % . @ $ + + . @ % { ! ' + + * - . ] 8 s 7 ) 7 w ) { ; ~ 5 > * & # . . @ - > ! > * @ . + * * & @ . . . . . . + + . + * : 2 c 5 t 9 9 o i d x y N m 6 . . . . + ( 2 n #.8.].s.Z x h X :.y ! + . . . . $ < 0 E l j t c j F x 9 e A 1 6 } > / _ a 7 g 2 0 u p I m S l l %.o.l.8 +.9+0+4+a+,+C.I.@.H d | p E n X f X Z v C d k 7 < a [ { % @ # $ . ", "$ % @ . . # % # + + # & - ^ ( ( _ ( = * & ; * # @ . . # * ; $ $ # # + + @ @ # @ + + + + + + . + . ] s l 8 ) * & ; $ @ @ @ . . + % ; / : ; = - ] _ ; = 2 A b 7 c k ] * & & & @ . + $ # @ # * _ / * . . . . . . . . . . . . . . @ # @ @ { 1 8 8 2 A k 5 2 3 ] = a < - + . . . + ; g E a.R.Y.R.$.,.D f.F.L f < & . . . @ * ! y W f 0 w I :.R +.n.V c g b ) : : _ b 1 2 g k i d m V G f F $.8.r A O.b+/+c+b+!+C.e.z y B 1 s F K V E D ^.f o B s 5 3 ! ^ & # @ # # . ", "~ ' % + . # $ % # @ + % ' ] - ^ / ^ ' & & * ; $ @ + . @ # + . . . $ ; & + @ * * + @ + + . . . + # a s c a _ _ & + @ $ % @ + @ % ' : a : - ) ! _ g g ] _ : < b 4 ! * ; $ % ; @ + @ & * = = = / ; + . . . . . . . . . . . + # { ' * $ $ ~ g w g 3 | 8 i _ $ @ # ; # . . . . . ; 8 f.{+E.++q.A.R Q P #.#.D G z _ . . . & w ,.J ^.r < 5 %.<.!.+.F.h | : / ( > ) : a 1 } g | 5 9 H P h x x :.P 8 p ~.K.3+0+'+++A...> g 5 a l Y E h E N I x 4 l o g : ~ & # @ # $ @ . ", "& = & + . + @ % $ # $ ; ( = @ & $ % * * $ % ; # + @ # + + . . @ + # = - % @ ; ; + + @ . . + + % , i o 2 ) ] _ { # # * { = @ % , 5 5 A [ ' < g ! 7 g > ] ~ { ' ~ = ; = & & = # + @ * ; / 1 b , & . . . . . . . . . . @ & % & ' ~ ; % * ) 5 4 c w 0 u c = @ ] ^ & @ . . + = e <.Y.w.J.E.%+x.R !.+.!.k.P Q ` X 1 . . + , G L U ` t , e G v X n 2 b 7 [ ) : ! ! b 7 3 7 a 6 5 z P P H r j f C G n !.p.}+1+}+7+H.f.d g : 3 r m V J D N Q 0 C j i 2 b ~ & # # # # # . ", "+ # % # . + + # @ $ { ] ~ ; # $ % $ # $ + # * $ + + $ = % @ $ # @ + $ ~ ] $ % $ + + + . . + + % 9 I C ! - ] / - # + ; 5 1 = ; ! A e 5 | ^ ! A a / a b 6 > , ] * ; ' = % $ # . . $ = & } 9 k 5 : $ . . . . . + + * % ' ^ * & ; ^ ^ ^ [ 9 r z C j N ,.4 - ; _ { + . / B J N.(.c..+d+++q.w.-+ .*.'.(.{+P V O o ' + @ > d f ^.x s | 5 C t [ t 6 b 1 3 ! / [ a > [ a 3 6 3 4 i v H ,.E x G u G L <.e.A.Q.e+b+f+K.[.U h A 6 S T H Y J K h j C S i 2 < ~ & $ % @ # $ . ", "@ + % & @ . @ # @ % ' ~ = % & ~ { $ # @ + + $ @ @ + # - * @ % @ + + $ * / ] = ; # + + + . + . ; 5 j z / $ = & # # + + [ 3 ~ & & : g g 3 / ^ : > ; ~ ! 6 ! ( ~ ^ { - & + + . . # ' - # ~ | i o 6 * . . . . . . ; 7 < ( ~ / ( ] } 2 b e 4 0 C x ` .W 3 & % @ + . ' Y -+C.Z.v.|.Y.`.}.G.1.I.N.G.g.1.'.K x c ( & + % | S j y d 2 8 G s g b ! : w d 3 _ ~ , ! ! a 2 | : 3 t w C Z F p o N F W :.$.d.E.>+g+>+&+h+-.G X B 0 +.k.).+.^.V f G m G w w b = # @ # # # # . ", "$ + @ & * $ @ @ + @ % & & $ ; ( { & ' * @ % ; & @ . . + + @ $ @ + @ @ % ~ ) : , $ . + + + + + = / < : ~ @ $ @ + % # . * [ ' + $ , 2 7 ^ ' { = { % + + ' _ ; - ( ] % @ + . . + $ ^ 3 ] $ [ A A 6 ~ . . . . . . $ ] ! < 7 w A 9 k a e t t w B ,.*.%.t % + . . & S h.L.z.A.g.L.|.H.t.R.;.-.p.H.b.b.&.f 2 ] ; & ; ~ ^ > c C o 8 k s C } g w g 1 C v 7 , ( / ) ! a e 6 , a 5 8 v K n C 4 m Z +.O.F.G.~+<+3+>+&+X.9.u Q y s W $.&.!.M X q u s | g g / $ # # @ # # @ . ", "$ @ + * ] * @ . . + @ # % & = ' ~ ^ > = # * = * # + + + + + @ # + + + % { > } > # . @ + . + @ & * ' { = ' [ 6 ^ @ @ . $ / = & < d 9 b ( - ~ ~ ; $ . . ( l i , { * $ # # + . @ ; ! 3 ) & & < e c g ( @ . . . . * ' / < 2 p u S 8 w 8 5 C x W f.:.s & . + . ( Y 7.J.T.p.q.W.c.H.v.i+H.a._.~+U.*.E k b ' ] 7 } , [ [ < b b / ' ] g B 0 w 8 t 0 0 t | ) ^ ^ > [ } 7 a / } 4 m ` M Y r o v X ,.U :.8.E.j+g+j+k+7+H.P :.*.q n O.).:.l.J V S 8 9 | > ; # # # # @ # # . ", "% @ + $ = * @ + + + @ & & - ' = % * - ; $ $ % $ # @ + + + + + @ # $ @ # - / > , & . + . . . + @ @ ; { ; _ 2 z 7 $ $ # # - * - ! e c 4 A : : < ; % # + ^ K @.C e ] % # @ + + # _ a > _ ( % ' 7 | w e - . + . . ~ > / : | z n S G U n f H &.4.z.^.* . . . { Q H.X.E.Z. +E.%+*+D.U.z._.5.X.J.o.p e 2 ) ' _ g C d e a b ! / @ . & 1 p G v l B o 0 s 2 , ^ , ! : < a / _ b s q F U y p j m n P .:.>._.l+g+m+m+r.E.s.&.L Q D L Y X ^.Q f C t i 8 ~ @ @ @ # @ + # $ . ", "& $ @ + # & $ @ $ # % ; = = ' ; + + & - ; $ $ # # + . + @ + @ + @ # $ $ % - ] ^ ; + . . . . . . . - , ' ' , g ^ = = & @ # & % - ~ 7 s t 3 / ; * = * ; ; ! g e n I / % + + @ ; & * _ [ a { & - < | < * # @ + + @ ; ~ b t r W e.L.M.x.L.[.n+ +I.A . . . . 3 %.b.d+f+r.Q.r.Z.5.H.6.}.-+j.-.q b / | S s a > 2 V y k g : > } - . = 2 r Q W f d C B l o b / / < , b ! ( ) a d C r S i i C S +.(.{.:.*.1.}+o+m+p+&+7+z.P T D ..<.O ^.` K Q C c d e ; @ @ @ @ @ + $ $ . ", "* & @ + @ % % $ $ # & { ^ ^ / * @ % % & & @ @ # @ . . @ @ # @ . . . # - { & # + + . . + + . . . # ( < { - { ( ( [ ^ @ + @ & = ; - b t A : ; # & ^ { ' ' ; # % ! c ^ @ . + @ $ # # , 2 2 , = * - ~ { * # + . . . # ~ 1 s x T x.6.5.q.8+M.i.Z } @ . . . { B O.-+Y.A.6.W.~+Q.H.[._.U.j.).k @ @ - < 6 7 > ( z ^.l | 6 / ( 8 r % % k n J ^.x G X H n m 4 / ] ^ _ [ : , > g e 4 f y 9 t d N !.>.n.;.8.m.p+<+q+j+]+7+p.:.L R l...P W U Q G l B A { $ @ @ @ @ # @ @ @ . ", "; % @ + @ % & $ # $ & ] ~ ' { & $ # + . + + # & @ + @ $ # @ + + . . @ ~ / ; @ + . . . # ' _ _ @ & ~ * # % - ( ) ' ; . . + $ = ' ] 3 2 ) { $ @ $ * = = & @ + . . & > ' . . + . . + , A A [ ( ' # @ - $ + . . . . & / } 4 j N -.L.X l u C 3 $ . . . . . < V N.i+{.#.n.G.[._.{.f.*.i.` t ) { = ' ( _ ) ^ _ s f 4 , ( / / G ,.$ @ 4 :. .N q ,.).>.&.,.d ! ( : ) ) ] ~ > | 4 z Q N o p u F J %.!.s./.}.$+e+b+e+d+r.b.f.*.%.$.+.X H D G h I l [ $ @ @ @ @ @ # # # @ . ", "% # # @ # * ; $ # & = ~ ] * + + + + . . . @ * - $ @ $ # @ + . . . . + % = % @ @ . . + $ > 1 b $ # # + # ' > g 3 & . + ] 6 b ] ] = - ^ @ + . + + $ ; = & + + + * _ 7 8 ] . . . . . $ b 8 e 2 / $ $ $ @ . . . . + # { e B p k o s ; . . # & % $ # + . $ 4 +.2.g.=.P.i.i.Y u z Z V o g b 7 : / ( ( ] < A | a g | ) ' _ < l Z ^ @ c @.M D L ).).<.u.!.l a / ^ _ / ' [ e 4 0 r p t s o s V T ).f.i.;.=.U.m+h+r+d+`.n+M I h &.:.F q Q n Q q i ~ $ $ @ @ + + @ @ # # . ", "% $ $ $ = ' = % # & ] ^ ] & . . . . . . . # ' ( - $ $ # . . . . . . + # ; * $ # . + + @ ^ 3 / @ + + + % , b A 1 ; . ~ C Q 9 , : ^ = & + . . . + * ' ~ ^ + . @ ^ 3 4 S } + . . . . . , 4 9 m 2 & $ # @ . . + + @ $ = 2 B v 1 ; # . + % ' 5 B 1 ( - @ % w f.N.B.B.{.=.V A i ` J Z 0 g 6 5 1 3 6 1 6 9 C 0 i t k < % # < q f ; $ m L l.T ^.F.M T 9.l.q [ ] ( / ] ) g | e r f z s k c f M T +.l.h.4.v.V.&+)+h+d+_.9.+.r s N ^.x x H T H f g & $ % @ @ + @ + @ # @ . ", "% $ % * { ^ - * - ] > ( - @ . . . . . . . + $ ' ~ ; ; ; * * $ . + + % ; { ] - ; # + @ - b t t b * + . - 8 5 g k 2 k o h S 1 - } > ; $ + + + + % ' ^ ) ! ^ # + ~ 6 x E a + . . . . . - 9 V M ` p 1 { + . . + + + @ = ! 7 6 } * @ @ ; ) g H F u c ) $ = B '.#.f.P. .t { [ T h.l.O .P F V f x N r u r r q Q l 2 - = , E M d $ % 9 ` ..L T J :. .W +.y a ( ) , ' a 6 7 A 0 o z z i C W h.$.l.$.2.m.S.#+}+<+6+@+{+d.~.G u y ^.` I ` W Z S ! $ # $ $ @ + @ + + + @ . ", "$ % ' ~ ] ^ { { [ 3 : ~ % . . . . . . . . . # { { ; ~ _ > _ { # . # ' _ ^ , ~ ~ & + @ { g l 8 i ! + . * 5 w a 1 p E v p 4 _ % ^ { = % + + * * = ' { ! 3 | ' . - 2 f Z g . . . . . . ) q Z +...H f < . . . . + . + ; : ! > / # . + { ! 5 W ^.Q n s ; = m F.M L +.B & ' F 4.N.9.h.l.R O ,.&.R ).j 5 2 A B u i a ( < m N 8 < # @ ( C n G V W M P @.f.n | = ~ ' { a | e 9 t 4 9 0 C z ,.9.P. .~.].S.R.q.X.Q.j+d+&.$.f.j I D ,.D n E V m w { # # @ @ + + @ @ # # @ . ", "% & ( , ( ' = ' [ } ^ ; @ . . . . . . . . . = ( = * ' _ } ! > ~ $ # = ( ' ~ ' - ; # @ % ~ a ) k d = . # g A a , 8 G 9 7 > = & & $ ] ] + . - ] $ # @ = _ > = . @ ) 6 ! ; # + . . . . 3 V n O W Z F : . . . . . . . * 1 < * + + . + ] k d q Z T O i - > D ).M T T 0 + ) F.a.=.+.K F ` ^.U T :.&.E o i o d 6 7 1 8 2 c 7 < ( # . , t B m F n q q K D f a - - ' _ } 7 | B d B p w S ` +.k.$.@.%.n+v.[._+X.r+)+%+9.=.n.z n <.O Q h N H l / # $ # + @ + + @ # # @ + . ", "* - , ) / ] { { _ ) ' @ . . . . . . . . . + & ' ; * ] , < [ b ) = $ ' ^ * - ] & & $ + + + . . g u _ . + b w b / } 2 _ ' ~ - { ; # { ] # . # # + + % * { : _ 6 / & & @ + + # % @ . . 3 K O <.T ,.X d { @ . . . . . & b a * . . @ * < 2 t v O <.L t ) d J T ,.T P t . & Q %.^.m l V +.<.@. .T T m 7 e o a A Q F r | w 0 l s > < p l v S S p 0 r I Q ` i , ~ ~ 7 A 2 c G x I z e f f.L #.L M $.L.4.k._+~+Q.}+q.N.s+~.y n O O W Q X ` o * # $ $ @ @ + + @ # @ + + . ", "= _ ) / > ! _ ] ( ' # + . . . . . . . . . . = - & - ' { ] ) , ( ; = < ) & = ] { ; * # + . . @ - < - + . ~ 6 > ' 6 A - @ $ { = { @ + $ # + + . $ * ] { = 6 v Q o % . + + + ; ] % . . [ q Z E Y D I v e * . . . . . ' 1 c / . . $ ] 3 1 8 S 9.i+'.l k Z M ).Q K N _ . . k H O H D .).W @.F.!.F d , 3 N h I ` O U 0 0 S f v 8 u v x n I v m t 2 } e s 8 a ' , 3 e s B p I q p B q ..M F.n.P.a.8+/.G.}.7+@+w.j.P.[.J I q !.P D X T H 7 # # $ # # @ @ @ # @ @ @ @ . ", "{ ~ { { : [ ) _ ~ $ . . . . . . . . . . . . # * ; , ( , b [ < / ~ ~ a b ] ~ > _ ~ ) ] + + + - ; & $ + + ; ] ' ^ w 2 = + % { > d _ . . + = ( @ $ ; ' ] ' 5 D %.G - . + @ + ; : ; . + [ t c 7 t h E j o ! @ . . . @ ) k 4 > @ . * ) 3 c s K 8+f+o.^.Z ..T O z 1 , # . . ^ v q X T ).:.Q l F ` i [ = ( G q E G H F.d k j Y S s G N y h l 0 O B ^ % { ! g ! ] a 2 A k o h F.h.O y F ` .R R '.=.s+s+].i+E.i+A.{+M R ).f t F X K Q Q 4 { # # $ # @ @ # @ @ @ + + @ . ", "- % @ # & $ * ; $ @ . . . . . . . . . . . . . @ ' [ ^ < k 2 g [ / - ^ [ 3 1 _ ( < ! ( = % @ # ; * + + @ # # % ^ e _ $ $ - _ 0 0 ^ + + & 3 6 - # % ' ' ' d P.9.i $ @ { * ; / 2 ) . % 3 | : 6 d r v q z 3 % + . . % 3 c c < # . ~ 7 6 s K R U.=+_++.B G q A ) ~ * # @ + @ : k x N j s 8 C y m t $ . ' S n p k C C } e B E j 9 h J ` Q E V W o = # ( ! g 7 [ 6 2 d s 8 M ^+(+t+V g j ..$.3.h.>.~.3.L.Y..+S. +I.<.+.f.Q v x X X X q } # $ # $ $ $ @ @ @ @ @ @ + + . ", "; # + + . . $ # + + . . + . . . . . . . . . . + * ] = ; ) : _ ^ ' { & : k 7 / > } ~ * < ~ @ @ ; * + + @ @ . $ ' < ' . % - b 5 ] @ + ; b o s 6 = * * { b m '.Q = . % ~ { ~ 1 o > . # } b < } 7 c B C > $ # % + . = b 2 | , @ & < 1 i B f.i.5.t+T.l.b # % # + @ + . . + . . @ ; ; % & { 3 4 3 , # @ , n (.).S s e < c o m m p h X W P L Y H u b < 7 1 w 5 a b 6 9 p v ).,+1+#+d . ^ F B.e.#.h.9.8.1.S.w.Z.d+U.l.....f d q F l ` f > % % % $ $ @ # @ # # @ + . + . ", "$ + . + . . @ @ + . . + # $ @ @ @ . . . . . . + # = ; $ # * & & ~ ' * ( ^ ; & * = + $ ~ * + * - & @ + # @ + # = ~ * @ @ { > ; # . # b w z v i _ * % = k r d ( . . = / ] , 2 C _ . * ! > * - _ ! C A , = * ) & @ / 7 5 [ * + % ^ 3 m ,.U &.2.w.D.<.( . . . . . . . . . . . . . . . . . . . . + ; 9 F .a.N.^.l d e d l u i 0 q V ).F.@.` T %.C g k 4 u c 3 7 d p r v K @.m ( + . + 8 u.u.N.8./.U.H.m.*+.+D.7.<.L ~.v d V ^.q x 5 { ; $ & * $ @ $ % # $ # + + + . ", "+ + + + . + + % $ . @ $ % $ & % % + . . . . . . @ = = @ + + + % / > - = + . . . # % & $ + + * * @ @ + $ # + # ; @ # ' ' ; $ # @ + @ ) 3 w B c ] + # = 1 4 ^ + . . ; ' ' ! 4 w = # [ , % % ( a e 4 z s / ( 1 ' & < 7 > $ . . + , z T .K +.>.@.0 ) + . . . . . . . . . . . . . . + ; + . { > 3 C s+Y.I.u.<.S i i 7 3 w 7 3 i q L y.O.&.@.U R X 8 k r X 4 < 6 C r 0 B F p ^ . + . * u k.s.n.v.H.R.}.8+8+q.Y.s+f.#.B.H x Z Q X ` ! & & & & $ # # @ # @ @ # @ @ + . ", ". + + + . . . ; ^ { & - ~ & * = & + + + . . + @ = { ' # . + # = ) : = @ @ + + + . & ( ' + + # @ + . @ % ; = * - { ] k e ] % @ # + @ ~ : _ { { - * { ^ 3 ! $ . . . % ' _ 2 z 7 @ * } ] + & | z B x m s / [ k b = - & @ + . . { C H M T Z O Z ; . . . . . . . . . . ; ! # + + % $ 7 P.f.l M u.d.5.,+&+7+}.k.%.<.V q r c b ) v *.~.R B.;.9.+.P Q k c I I d } 2 o l o 0 j z 3 % . . > <.d.8.8.g.H.i+b.U.8+H.R.1.>.$.l.Q Q Z I j u _ * & % % # @ # @ @ + @ + # @ + . ", ". . . + + . @ = ( _ - - ~ - ' = # + @ + . + @ $ ' ^ ^ & . # { ^ , ^ * + . + & { # $ ] - @ + @ + @ # ; ; - = * { < 3 u 8 { * $ # + @ * * @ . { o Q q C a { & + . + & - ) 2 4 ~ . @ % % . . ; [ k l r , ; b w 7 ; . . + & $ - A @. .` h 6 _ * . . . . . . . . . . . 2 ~.d = & a t :.`.)+W._./.1.~+X.J.G.>...4.p.e.e.:.p : ^ u !.J ).G.i.N.K x d i x G o 0 k o B G I y h f C ] + . 7 9.k.o.g.v.z.q.v.-+s+0.j.e...'.X X L n x 0 [ & ; & $ $ $ # # # # + + @ + + + . ", ". . + + # @ & { ~ ] ; # % & # + + + @ @ + + @ # ' / ^ & @ * ) , , ] $ + . + % ' % + & * % + + + . % = & $ @ + + = < 2 } % $ @ @ @ @ + . . . | e.H.H.i. .g $ . # % % ; > a _ % + @ . . . . + % _ 1 : # $ _ | ] @ . . # A u j r N j 5 / . . . . . . . . . . + + ~ / G F.X A ( g f v.`.6+b+V.6. +Q.m.P.W V ,.s.d.z./.'.m ) / m l. .@.Y E D W S i p x h I o 4 i x N Z X U <.,.b $ . , H n.M._+o.g.I.(.L.8.3.N.X K &.E h X n p 2 ^ = ; $ % & % # @ @ @ . + @ + . . . ", ". . + + # % ~ ~ = * % + + @ + + + . + + + + + # = ' & $ % ~ < ! ) ^ % + @ + + @ @ + + @ $ + # # # # % # . . . + & _ 7 ( % + + + # * # . . ; 4 P.R.V.g.>.v { $ % $ @ [ Z z * @ % # + . . @ ] 5 u p } # $ ^ w / + . . - S ,.y | ( & . . . . . . . . . . % 7 5 I M M C ,.J 5 / e y l.4..+}+$+m+c+6+n+N.~.J N.-+d.i.8.!.Y J f.` J M B 2 s ^.W F C u B i t t k 2 o I ,.K q q s ^ @ + + * 2 !.s+j.I.5.g.s+R s.d.J I J N y I ^.n a ; * # # $ $ $ # @ @ . . + . . + . . ", ". . . + $ ; ( ) = @ + # * & + + + . + + + + @ - ] / * + $ ( < < : ~ % * % + . . + + + + + @ % % # @ @ + . . + * g l S 0 ~ @ + + + $ + . + ( g G '.k.1.K a ( ^ % . . G ).h , ~ % + + + + * L b.A._+Z ) * { ( - + . @ b h 0 > $ . . . . . . . . . . * | G *.>.N.N.V W /.h ~ | p Y '.(.|.J.f+)+u+1+e+I.<.'.M.W.Y.R.].-.1.T.0.=.8.O.O E W ^.K l d f Y x 0 s 9 c t h J M n | - + + + + . . = Q I.s+}.n+4.B._+T.[.R #.n E ,...Z ) # # @ # @ + @ @ . + . . . . . + . . ", ". . + @ ; ] ~ ~ * # * ^ > ( @ . . + . + + # ; _ _ , = + $ ; ) } < { $ ; $ . . . @ # @ + + @ $ & $ # @ . . . # ^ i h 0 e ] @ . . . . . . + & ' : 9 C w { * - ' - # { n U 8 , ] # . + + . A Y.6+t+}+k+P # % # + . + ) A > @ . . . . . + + . . . . $ 9 J f.L R M W q {+N.~ * 4 I K O >.9./.|.Y.m+v+[+L.3.6.*+X.~+A.S.E.E.4.H !.j.d.;.i.W X Q h p I U M v z n x o V M W 9 $ . . + + . + + . } '.a.z.Y.}.}.6.J.N.l.R F q W O w % @ + @ @ + + + + . + . . . . . @ # . ", ". . . # = ^ * % { ~ ] ] ~ = @ . . . . + + # * ] ' ' ; % * ' _ 6 a % % ; + + . . + @ @ # @ @ % ; $ @ + . . + * a v h : # + + . + $ % % @ + % ] , / & . . . # < S f F K S ! ; ; @ + + . = e.j+'+5+p+^+%.. . . . + ] [ * . . . . . + + + . . . . ; c U %.f...:.<.1.p.'.a . & c ` .@.O._.Y.J.!+5+,+5.8+d+@+=+%+E.K.}+w. +n 2 h O.;.a.d.M G B 0 z q Q Z l i j d z Z M F = . + . + + + + . . . T h+m+}.n+U.6.Y.l.W U ` N U v { @ @ @ # @ @ + + + . . . . . . + @ $ . ", "@ + . # * $ + # - _ ] * # # @ + . . . . # & $ * $ # * ~ ) } : : { $ * = @ . . + + @ @ $ @ $ - ' & @ @ @ + + # ' } [ ; @ $ = - ; ~ ~ ) - + % ^ < - ; / { & - ) B y.8.0 > % + $ & @ . . } _+g+X.A.j.f { . . . * 3 A ' + + + + + + + + + . . . . > U 3.i.a.B.;.-+p.(.1 . % _ C ..;.a.k.c.&+!+,+5+,+J.l+/+t+<+=+-+Z.*+$+E.:.K H D .l.y.~.E t k m K O h z m j o d E .o + . . . . + . . . . . B.w+/+w.R.V.Y.8.Z H #.'.J ,.c # @ + @ # @ + . . . . . . . + @ @ @ # . ", "$ # + + $ @ + @ $ { & @ @ + $ % . . . . # = $ + . . * ) } b ^ ^ * # & ; + . . + + + + @ @ $ _ b { & ; * . . . . # & - * = ] = * = ( , _ # - ' % . ! P T Q 5 * - A v > # + + # & & = ~ 3 X F.F A ] + . . . & 0 V } @ . + + . + + + . . . . . $ q 8.|.J.r.A.5.M.E % $ - ' 4 O n.2.'.J b.r+^+m+'+l+*+>+e+t+c+~+|.E.6+e+=+1.'.@.j y l.9.$.J x m F Q E B C r m p t m v ) + . . . . . . . . . + e.x+4+t+%+,+W.L o D ~.&.V 8 { @ + + + . . . . . . . + + + @ $ # @ # . ", "& * $ # @ + # & % @ + + % * & # + + . . + @ @ % + . @ , > , - = & @ + # @ . . + + @ @ # + # , ! * * # + + . . . @ @ $ # # @ @ % * % ; * * ( ( @ + { f N.n.K g % + ; * = { $ # & _ | i I H } . . - - . . . ^ I t % . + + . . + + + . . . . . k s+q.~+r+X.x.e.:.a + = ^ b r P y.B.k.4.@+)+g+j+e+;+l+c+1+9+[+&+++m+;+r+X.-+F.n.$.O.!.:.h.f.$.P.T S k m X S E S 0 o ! . . . . + + + . . + . . =.0+x+(+u+9+i+c 4 U J W I [ # . + + + . + . . . + + + @ + # $ $ # # . ", "# % % $ % @ # = ' # . + $ & # . + + + + . + - [ ~ . # ' ' * ; { ' + . $ $ + . + + . @ $ # # ' _ * % + . + . . . @ @ @ + . + # % & % @ $ ; : , % + % g Y s.B.Q ; @ $ * ( , % # ) 5 s j X Q ( . @ / ( + + . { 4 b # . + + + + + + + . . . . % V -+5.7+.+8+J ) ' ; # + } F.B.h.{.k.d+v+9+v+3+c+^+'+u+a+:+v+t+!+m+j+m+E.#+q.~.u.9.2.%.Z L <.;.P.T n p n +.^.Y U m 0 ( . + . . + . . . . . . . #.|+3+y+>+t.<.} D ..y p } & @ + + + + . . . . + @ @ @ $ # $ # @ # # . ", "# # # % = & + & ] & + @ @ # # + + @ @ + + $ / 3 < * ; / } ; + * & + @ & & + . . . . . + @ + # % & @ . . . @ + + + @ * * - * % $ $ $ + + % { - # . % ^ | @...q & % { > ^ & + - 3 o 9 5 t 2 # . $ { < $ . . - ) ; @ + + + + + + . . . . + . : N.].s+_.}.h.u _ % # . & z u.{.B.g.++1+z+z+3+|+[+)+1+z+1+|+u+<+[+l+!+m+,+*+M.#.P.$.v.B.%.L <.0.s+N.y.h.O.y.#.Z Y W ^.3 + . . . . . . . . @ b F ++0+2+0+q+n+).F.h.P 0 ) + + + + + . . . . . @ # # @ @ $ $ # # $ # @ . ", "% $ % % & * # $ ' & + @ @ @ @ $ $ # ; $ @ * ) ! ' = ' ) ) - @ @ # @ @ $ & + . . . . + @ + . . + + . . . . $ # + . * ! : 5 5 A _ + + . . @ # # # @ * / ! g 7 ) @ = 8 a @ . @ ] [ c t i 0 / . @ { - ] # . # 7 , @ + @ + + + + . . . . + + . a l.N.2.$.d.v ~ - # # $ A @.[.b.Z.b+A+2+A+a+g+c+u+a+B+2+3+z+1+C+<+;+&+%+f+!+o.!.n.l.y.4.n+{.y.4.m.t.H.g.(.<.J .l.0.K.3.{ # @ . . . . . . C }+z+D+:+x+4+>+m+$+&+5.R I - . + @ . . . . + + + @ # + + @ # $ # $ # @ @ . ", "# $ & % & * % # @ + + @ @ + @ $ % % = - = ~ _ ~ ' ; $ ; ~ ~ % $ @ + + # # + + + @ . + % # . . . + # # # @ + + . + % $ = s n o > . . + # # # # $ - ~ / ! a ] # . * k , . . * ] ' ^ 9 j m _ . + & $ + @ + * 6 ] . . + + . . . . . . + + + , V !.~.~.&.M 7 % * ' & 7 M ;.}.b+(+y+:+z+|+c+5+q+9+o+|+3+/+u+o+z+z+q+l+]+X.[+C.d.[.P.R -./.(.h.a.H.g.g.{+F.K ~.8.|.K.m+5.d b - . . . . . . ` x+D+E+E+E+:+B+2+m+M.8.:.k # + @ @ . . . + + + # # @ + @ @ @ # # # # # # . ", "$ % % & & & % & @ . . + @ # % % % & ; ; - _ / ( ( % . # / ^ & # @ + # $ # # + + @ * < ~ $ . . + + # # # & & @ . + $ * + - a / + + . # & ; $ @ @ - , ! ) } , # . % , ! ! ~ $ @ @ < u d | , @ # ~ % + @ @ * - @ + . + + . + . . . + . # 6 D ~.%.Q t ) ; % ' d l p J *.i._+q+4+a+a+2+2+(+(+a+g+o+g+|+a+c+z+4+F+F+o+Q.,+c+z+C+G+h+D.-+B.'.=.G.s+(.9.^.z n.t.}.6.++m+i+>.T = . + + + . . d q+D+E+E+x+4+B+v+Z.O.F.k + + + @ + . + . @ @ + @ # @ # $ @ # $ $ $ @ @ @ . ", "% % % # $ % % $ @ . . . # * = ; * * { & * ' ' = # + + # = & # @ . + # # @ ; * @ & > b ~ # . . + $ % & * & * - ~ # @ - $ . . . . + % & & % @ + $ = / : } [ ) - @ @ ( 1 2 < $ . # b 5 ) ~ / % = < ; . . + $ @ @ + . . . . + . . . $ - 9 <.f.l 9 e * . . @ 7 F ~.(.P.%.$._+c+g+b+p+2+0+A+A+|+(+C+<+q+t+a+y+4+^+w.m+u+w.f+y+F+w+w+D+4+r.0.g.W.@+w.q.z.i+l+5+k+_+b.5.z.V.2.- . + + + + . $ o.D+x+A+2+2+(+^+W.3.V - + + + @ + + + + @ + # @ # + @ # + @ # # # @ @ @ . ", "# $ $ @ @ $ * & @ . . . $ ' ^ ~ ' ] ^ { % # @ + + . . + @ + @ $ # + + . + & { = = % @ $ + . . @ ; ; * & # . ; C C & @ + . . . . + - { & # + # ' | e } e 2 ^ $ # . ' < ! _ # . # - * % / } / ~ { # . . . + + @ + . . + . . . . + ( r O.Q 0 [ > ] # + @ / z .j.g.;.f.v ].4+E+B+A+x+E+E+:+2+v+l+[+9+c+G+*+R.M ^.e+y+q.k+0+E+E+E+E+F+D+x+z+:+w+D+D+D+D+D+x+'+$+r.6+u+w+D.{ . . + + + @ . e r+w+4+2+A+v+l+++u./ . + @ + + + + @ # @ # # @ + + @ @ # @ # @ # $ $ # . ", "@ @ # # # $ % & # + + . # ' { ( ( ( / ( - @ . . + . . + . . @ { - + . . @ ~ ^ = % + + . . . + $ ; & # @ + . & s n b $ + . . . . @ % % $ $ * > 6 f x S y S ) + . + & _ : < - # @ @ % ( k 9 } = @ + . . . . # @ + + + + . . + # ~ | Z <.A ) ~ % { { % ; a q :.>.P.%.U A -.1+4+z+g+o+B+x+E+x+|+C+|+x+!+).8 H f %.g+F+B+w+0+x+0+0+E+0+E+E+F+E+E+x+0+0+E+:+x+x+:+0+F+F+w+r+! . + + . . + + . J 2+0+x+4+2+(+m+D @ + + @ @ @ # @ + # @ # @ @ + + + @ @ @ # @ $ $ # # . ", "@ # # & % % * & @ . . . + % % ~ > : < ) _ = $ + . . . . . . $ ~ ^ ; + # { a b $ + + + . . . + $ * $ # . . . * [ : ) ' # + . . + $ $ @ $ ] < 8 j x G E T m ( + . @ { < } 1 i | # . # [ o 3 $ + + . . . . . + + + + + . + . + - 1 4 S j } ^ % & > < ~ ] t Z J O '.2.^.f.r+1+(+o+'+^+l+6+u+H+u+4+D+;+S . # W C.`.;+B+F+E+x+B+H+0+E+0+0+0+E+0+0+E+0+E+x+|+:+0+E+:+0+x+D+^+k . . ~ :. .~ @ . b }+D+x+y+y+a+u.' . @ @ + @ # # @ @ $ $ # @ + @ @ # # @ # # + # % # # . ", "@ $ $ % $ & % # @ . . . . @ # % ] < [ _ / / ( * . . . . . . $ / , ~ ; ^ 1 5 7 { + + + . . . @ # + @ @ + + + % # * ( > & + + + + % & $ ' 1 d ` H o 9 S ^.r * $ ' ] , [ | N %.F & . # | A # . . . . . . . . + + + + . + + + . - 2 A B e & @ & _ k 1 > [ e f ..u.U.n+w 0.E+x+4+z+9+'+b+r.$+6+<+:+D+v.% . . #./+Q.W.v+w+0+0+;+5+w+0+0+E+E+E+E+E+E+0+E+0+:+0+:+:+:+x+x+D+[+6 . . i 2+D+a.@ . . (.B+H+3+0+W.^ . @ # @ # @ $ # @ # @ # # @ + @ # @ % $ % $ @ # # $ $ . ", "$ & * % @ % * @ . . . . . + @ + & , [ / > _ , ' . . . . . . & , ( ; ' b 4 2 } ~ ; & @ @ @ + @ # $ % @ + @ % * % - / , ' @ + + + $ ; } C r C G B 4 i f G 3 = ^ : < < [ 8 +.N.F * . % , = + + . . . + . . . + + + + + + + + . ^ s c w - . ; b g w 6 | b b D L.#+w.H ) 7+D+:+x+E+0+/+q+m+q+5+3+E+D+++< . . 9.D+t+7.9+D+E+:+>+2+E+0+0+E+E+E+0+0+E+E+0+x+x+x+x+0+0+0+0+D+B+x . . u /+D+v+S . . s D.>+B+r.l + + + @ @ + @ @ # $ # @ @ @ @ @ @ + @ # # # @ + @ @ # $ . ", "$ $ & % @ # # . . . . . . . + @ * / : < 3 : ^ % . . . + + + # % % & - ! b ( ~ = - * & $ $ # $ @ # - & @ % & * % & ^ , ! & + + + . ; G .V z i w 6 e z w ; & ] , ! a w m T +.t $ + # % + . . . . + + + . . . + + + + + @ + @ ( e : & . @ ( b b 5 s 4 c V 4.h+l+e.a *.(+y+y+:+0+0+:+/+(+<+5+v+0+D+V.] . . l (+:+Z.e+D+D+0+F+E+0+0+0+E+E+E+E+E+x+/+A+y+4+y+:+0+0+0+0+w+0+n . . x 2+w+D+c.; . { i+D+>+^.. + # # # + @ + # $ $ # @ @ @ @ @ @ @ $ # # # @ @ + @ # $ . ", "$ % & $ # @ . . + + + . . . + # * { < a a < { @ . . . @ & % # % * - ^ > ^ ; * & & ; ; & ; & & % ' ' = % % & & @ $ ( } 6 ) + + + . ; s ^.J l p 4 7 , ( & + % ' ! ! 2 I P J Q | . . $ ; # . . . + + + + . . . + @ @ + + @ + + = ] = + . # ) _ 6 t F n J {+D.v.H.E p ++4+/+0+y+:+x+0+v+B+B+|+9+(+D+D.= . . = H.o+t.&+f+T.A+w+E+0+0+E+x+x+E+0+F+(+u+B+0+E+E+0+0+0+E+0+F+F+L . . l A+w+F+(+v . # u.H+i+} . @ # $ # + # # $ & @ @ @ @ @ @ + + @ @ $ $ % & @ + + @ # . ", "@ # % % # @ . + + . + . . . . @ $ ; ) ! a / % + + + + % ] * @ * / ( : ) ' ; & % % = * & & $ & ' _ , / = * ; & + @ ~ 7 7 > @ + + $ ' ! z z } ~ ~ { ~ ' # . % 8 O q I T @.O z ~ + . ; ~ # + + . . + + + . . . . + @ + . @ + . @ $ # + . ' , * | J ).~.-.q.n+5 M j *.B+E+/+0+:+x+0+0+y+:+0+x+B+A+0+)+3.c 0 V q.A+f+]+8.< /.x+F+0+E+E+x+x+x+E+E+A+x+E+0+x+E+E+E+E+E+0+0+D+/.. . A t+F+E+D+-.. . 0 -+H * @ + @ @ @ + @ $ & % + @ $ # @ # @ + + @ $ % & $ @ @ # # $ . ", "+ @ % $ @ + . + + + + . + @ . . @ * ~ / > ] $ . + + @ # ) ] # = , : } ) ~ * % % $ * & # # % ' / ) [ / ; % & $ . + { < [ / $ . + * ) < b , $ . @ * , ( # . $ l 3.%. .@.J F e ~ $ . % * @ + + . + + . + . . . . . . . + + + . . + + . $ [ 3 _ v ~.v.a.o.4.u.S 1 z q.o+2+3+x+x+0+0+y+E+0+E+0+E+y+y+x+y+<+1+4+:+:+a+1+q+m.K d.F+F+E+E+0+E+0+E+y+0+F+x+0+E+E+0+0+E+0+E+E+D+~+{ . 2 X.0+E+D+p+8 . = w _ @ @ @ @ @ @ @ # # & $ @ # $ $ @ # @ + + $ % % % & % # # # $ . ", "@ % % @ + . . + + @ . + # % + . + $ - ( : : % . . @ # # : 7 & - _ ) ( ~ - % $ % $ & $ @ @ * ] _ ^ ] ~ * @ @ @ . . % ( ) ( % + . ; k d k _ + + @ ~ / ' # . $ n G.=.J W V T j 2 * . @ @ @ + + + @ . . . . . . . . . . + . . + . @ + + ' 1 x E 8.z.p.-+[.s+a.G ~ s 8.p.T.z+0+:+B+B+3+E+0+E+0+E+0+0+x+E+w+w+w+F+:+3+a+z+D+'+R Y.w+E+E+0+0+F+9+!+A+y+B+1+:+0+E+E+0+E+E+0+D+u+5 . Y :+E+F+D+B+K . + @ + @ @ @ + + @ # @ @ @ # # # # # @ # # @ + @ # # # # # @ @ @ # . ", "# * * + . . . . + + @ @ @ # # + + @ % = ] b ^ . + % % $ , 2 ' = ' ' - = $ @ $ $ $ $ # $ % ] / ^ - = / ( ; . . . + + @ * % + . + ' 0 Z 9 = . + { > / = % . & y d.v.9.L J R y.T 5 # . . + + + . . . . . . . . . . . . . . . . ( ) # + ) Z B.s+-+A.5.{+/._.P ( + & , s.'+E+0+A+H+1+4+E+0+x+0+:+0+0+:+E+E+0+E+E+F+0+H+|+D+c+Y E a+D+E+0+E+w+i+j.q+:+A+g+A+F+0+0+0+0+E+0+D+[+7 . Y D+x+E+D+[+I . + @ # @ @ @ @ + @ @ @ @ @ # # @ # # @ # $ @ + + $ $ # # $ @ + + @ . ", "# * % . . . + @ # @ $ & @ + # # # + $ - ^ } ( + + % * ; = ) / - ; - - { $ + + # # $ $ # = _ ' - = ; { ^ ' % # + . . . . @ + . + ) G q _ . . $ ) } > ^ ; & % a L i.N.P U U k.v.2.v # . . + . . . . . . . . . . . . . . . . . { { @ % e s+m+E.s+z.S.;.O.y , . + . 5 &+D+E+x+0+C+(+E+:+3+B+4+A+x+0+0+0+0+E+B+:+0+F+B+l+6+c.e * a.|+0+x+0+D+i+!._+1+y+y+:+E+F+0+0+0+E+F+D+U.@ . 1 f+B+6.a.W ) + + @ # + @ @ @ @ @ # # # @ + + @ # # # @ @ @ + @ # $ $ @ # # @ . + . ", "@ $ + . . . @ ; ' - ] ~ ; # + @ $ # # * ; # @ @ & { ' - ; { _ ! ( - ( / { % . + @ $ % ; = ] { ; - * # # ^ ^ - - . . . . + . . . ^ l t $ . . ; 3 | 6 | ! ~ * . - z Z L n P (.S.E.*.# . . + . . . . . + $ - $ . . . . . . + + + . . + ] s.d+|.&.n+1.&.i % . + + . K u+D+0+x+:+3+4+0+x+B+z+3+y+:+0+0+E+:+/+9+v+:+F+c+R C M.-+e g ]+E+y+x+E+E+@+i.t+B+4+0+G+g+w+0+E+E+|+H+n+@ . % 7.D+^+8+-+m @ + @ @ @ @ @ @ @ @ # $ @ # @ + @ # @ % # # @ @ @ # # # @ # @ @ + + . ", "+ . + . . @ % ' ~ ^ , ^ ^ ~ % . @ + + @ # # # $ ( , / ^ - ~ _ [ > ^ ^ , _ { @ + + # & * { / ^ { - - + + : > & % + . . . . . . + ; _ = + . @ / e 5 w k | : < { + . ; 4 n P k._.S.X . . . . + . . . . . - 7 | ' . . . . . + + + . . . a {..+s+9.z.[.T ' . + + . ^ b.3+E+E+0+B+o+x+x+E+E+2+A+E+E+E+0+0+0+(+@+W.q+4+3+~+<.v.D+G.z l+:+B+0+0+E+4+5+A+F+x+q+}.>+D+E+E+D+]+1.-.~ . @ 1.C+z.8.O / + + @ @ @ @ + @ # # @ @ @ @ + + + @ @ $ $ @ # @ + @ @ # # % @ # @ @ . ", ". . . . . @ & { ' ^ _ ~ ^ [ ~ + . . . . $ = * - ^ ) ! _ = - _ : _ ] { ~ ] - $ # # @ $ & ^ ^ = & $ * ' ( ~ * @ + + . . . @ + + # $ @ + . + - b A A 1 g A 1 } ) # . . . ] 7 O a.l./ . . . . . . . . . . / p j ] . . . + + + + . + + + 6 >.8+L.{+7.q./.t @ + . . w E.(+4+/+4+0+/+2+y+E+0+:+y+3+x+x+x+0+F+F+2+b+ +$+:+D+:+f+j.Y P.'+x+0+E+E+0+F+D+w+4+5+2+4+0+0+E+E+0+D+>+-.[ . @ O {+d > * @ + + @ @ @ + + @ @ # @ @ @ + + + + @ @ # $ # # + + + # # # $ # @ @ # . ", ". . . . . + & = - ~ ^ ^ / ] - # . . . . @ ; = - ] , / ^ ] { , ) ' * / < ) ] % $ & @ # { ] ] & @ . & ~ / * & & & $ . . + - - $ @ @ + . . $ < 1 5 e 3 e d k : ] & % ; @ . . ( f } . + + . . . . . . . . ] D N - . . + + + + + + @ @ = , p ~.9.4.5.*+h+L.] . . ; e.)+3+(+5+|+A+B+B+x+0+E+E+x+B+u+e+9+v+z+x+0+4+'+>+B+E+F+E+h+T.,+B+x+0+E+E+0+E+D+g+`.B+0+E+0+E+w+E+y+k+{.f > + . ~ < { # @ . + + @ # % @ @ # @ @ # # @ + + + @ @ @ # # @ @ @ @ @ @ @ # # $ # # @ . ", ". . . . . + # * ; = ; { = & % # . . . . . % - _ ( ~ - ' ( ~ { = % @ ] ! ) ^ & % % $ % { { ; * @ . % - % @ % = ~ - @ + + ^ > # + + + . # / 3 7 | 2 } e 5 | / & - ^ a = @ @ . + + . + + . . . . . . @ % [ K p # . . . + + + . + . $ B q 0 Z &._.-+@+^+|.[ . . _ S.y+B+3+z+2+y+4+a+:+D+E+E+0+E+z+[+[+e+]+3+y+v+y+4+0+F+E+0+w+D+F+F+F+F+w+0+E+E+D+j+c.u+x+w+E+x+/+m+;.p ] - & @ . + . . . . + + # $ @ @ @ @ @ + @ @ @ # + + @ $ # # # # + @ @ + @ # # @ $ & $ # @ . ", ". . . . . . + & - ; & & % # $ @ + . . . . + { ) ^ - * ' ~ ' = ; * @ ; ) / ' * % % & * % % % ; % + @ % + @ % ' / ] % + $ ^ ' + # % + . @ / a b 1 w w 5 e 3 ~ % # % ; % $ + + . + + + . . . . . . . . # _ 9 ) @ @ * @ + + . . . & 2 L =.%.~.1.U.5.r+%+8+B . . [ T.(+G+[+q+p+}+p+}+%+}+(+0+F+:+C+h+9+w.'+0+0+:+3+o+H+x+w+D+D+E+y+A+o+G+4+F+x+0+E+/+p+X.b+a+F+b+L y S 9 _ % @ + . + + + + + . + @ % # @ # + @ @ @ @ @ + + @ @ % # @ @ @ @ @ @ + @ $ % $ % $ $ @ @ . ", ". . . . . . . $ = = - % % @ @ @ + + + . . . @ ; ' - ; - = & ; ' ^ * = ' ~ ' { * & ; = * & % ; ; % + + + # * ^ ) ~ $ @ $ { * + # / ~ . . $ ~ : 7 | 2 | [ , & + + . . . . + . . . . . + . . . . . . * ; % ; # @ - e ' . . . . . 1 D 9.2.e.|.j.L.R.D.D.7+l.= . d ]+]+H.n+Z.c.0.j.4.v.I.]+;+o+>+++=+J.E.(+w+E+x+o+p+)+y+[+@+~+^+Q.6.R.-+V.1+y+F+D+F+q+X. +@+#+8.7 & [ , & @ + + + + + + + + @ @ @ # # + + @ @ + + + @ @ + # $ $ # @ + + + @ @ @ @ # # # # # @ @ $ . ", ". . . . + @ # $ ; ; ; % $ # @ + . + . + + + + $ ; % & % @ @ = > A b ] ' = ; ; * ; = * & % % ; = ; $ + + + = , ~ = & % $ % # + @ [ 8 ^ . . @ = ) } < ) < ( $ . + . . . . . . . . . . . . . . . + $ { { @ . + @ ' / # . . . + ~ m O l.s.{+{+/._._+R.&+G+Y.~.w a s.#+D.v.-+E._+s+-.0._._+B.%.k+3+'+{.Y.1+F+0+a+[+q+2+y+B.< 4 l.|.e.<.~.L.#+u+H+U.k.8.%+]+e+R r 9 < , % + + . . . + + + + + + @ # # @ + + @ + + + @ @ @ # # $ & # + @ + @ # # # # # # @ @ @ @ @ # . ", ". . . . + & & & - ; % % + + + . + . . + & { = ; & # $ % + ; > 1 t a - * $ * & & ; = * $ % # % ^ [ 3 ~ @ + $ * $ @ * , ~ + + . + , 3 [ & . . + $ ~ ~ ^ ~ $ . . . . . . . . . . + + . . . . . + . # & # . . + @ $ # + . . . @ v ).~.[.-+G.s+R.S._.,+c+G+m+)+I., ^ G O d.E.k+=+f+C.4._.'.b Q [+D+(+j.A.6+v+w+/+m+|+D+D+x.g a B P R n y 9.U.7+-+w : U 7+++s+o : [ / % + + + . . + + + @ @ + + + @ @ # @ + + @ # @ + + + # # # @ @ @ @ + + @ # # # # @ @ # # @ @ @ . ", ". . . + # ; - * ; & # @ + + + @ @ + + @ ^ > _ ^ * & @ . # ] < e a * $ * $ $ $ & { ' = % # + @ ) 5 d , $ # @ + + . $ 7 3 # + # & % ] ] & # + . . + * ~ & @ + + . . . . + . . . . + + . + . . . . . + + . . . + + + . . + + & g v !.|.Y.g.a.o.4.o.w.^+e+<+H+3+|.s ; 5 0.C+v+z+F+3+=+1.l | t.0+x+0+G+f+c+t+b+o+p+Q.F+|+_+` o v C !.<.8 W o.(.r Z I.W h h 3 ( = $ # @ + + + + + @ + @ @ @ @ + + @ + @ # @ @ @ # # @ + + @ @ @ + + @ + + + + $ # # $ $ $ % % $ $ % . ", ". . . + % & * * & % @ + . . . $ - $ + * ] ( , ^ = % . . & _ ! g ~ . . & * $ % % { ' = * * $ # = ) _ ' = ; % + + + # / ] % . & ^ _ : - $ % # + . + ' ^ = ) } ] ; + . + + + + . + . . + . . . . + . . . . + + @ + + . . + . / A k S F.I.i+1.z.-.[.S.h+g+G+t+r+6+X._+$+A+0+F+E+2+W.N A ; < $.e+x+w+(+]+l+]+a.&+^+;.O.F C J H f n {.7.S ^ j J +.=+B.$ . # - # # + + + + @ @ + + + + @ @ @ @ @ + + @ @ @ @ # # @ # $ + + @ @ + + @ @ @ + + # # @ # $ $ & * $ # # # . ", ". . . + % * & % % $ # + . . @ - ~ * . & ~ - = = = @ + $ ' : > ~ * @ . @ & & % * { * & { % # % & { ( ' ~ ( * + + @ $ & * # . + & ) g { & # + . @ @ * ] > 8 o c k _ . . . + + + . . . . . . . + + . . . . . + + + + + . + $ k v o k o <.9.].z.d.(.R.g+c+b+#+r.*+h+E+E+F+w+E+y+v+_.< . . . ) 5.1+v+A+<+C+v+<+u+o+c+E.r ' z I I N y.q.<.3 a h H.a.^ . + # * & # + + + + + + + + + @ + @ @ + + @ @ + + @ @ + @ @ @ # @ + + + @ @ @ @ @ @ + # @ @ $ # $ % & % # # # . ", "+ + . . % % @ @ # % $ + + + # - ' - % % % % $ # # + # ^ , > ] % # $ % % * ; % - { & & ( ; % % % ~ < { ] _ ; + @ & ; * * ~ * + + = / * + . . . + . @ / A 0 p o c 1 $ . @ + + + . . . . . . . . . . . . . . . . @ @ + . $ a 9 i t i o G f L ].c.Z.r+^+l+`.b.p. .r E.D+F+H+w.w.g+e+h . b f c P m.Q.a+D+E+:+w+w+x+F+D+b+V c l Z Z h *.%.w A H U ) . + + + + @ + + @ + + + @ @ + + @ @ @ @ + @ @ @ @ @ @ @ # + + @ @ + + + + + @ @ @ @ @ @ @ @ # $ % # % # # @ $ # . ", "@ . . . @ @ + . + $ @ @ + @ $ - ' = / ' @ + + + . @ = _ > ^ & # % ; ; * ; { = = { * * { = - & - ( ] ; ~ ( $ @ % & ; = & > > $ @ $ # # + . . . . $ ] 1 l l H V n o & . # . . . . . . . . . . . . . . . . . . + + + + . & C C 4 d t 5 v l V '.q.`.m+7+}.|.h.).F ! G 0.z.*.g M g+D+g.g e..+p . ) ~.b+4+/+c+|+<+^+c+y+D+p+F e 0 c { ( k 3 4 B ^ . * & @ + @ @ @ @ + @ @ + + @ @ + + + + + @ # @ + @ # @ @ @ + + @ # @ @ # $ @ @ # @ # @ @ @ @ # # # # @ @ # $ $ # . ", "+ . . # # @ . . + + + + @ $ & { { - ] ] $ . . . . * , ( ; $ $ % * - = = ; * * ; & # + $ ; > ) ( ^ ; & { ; @ # ' ^ - = ; % % % % % . + @ . . . * [ w r I I O H r k ] + . . . . . . . . . . + + . . . . . . . + + + + & ~ 2 w c s z c 0 Z q ,.u.$.+.].R.J.].x Y -.L.L ' . . '.A+D+R.P p.O.( . & A u.W.e+++T.!+h+;+u+:+E+[.' g f t 4 ] ~ | g - $ & % # # $ @ @ @ @ % # # + @ @ + + + + + @ # # @ @ @ @ # # + + @ $ # @ % & # @ @ @ @ # # # @ # + @ # # # # % $ # . ", ". + # = - * % # + . . @ $ - - { ' { ' = $ . . . @ ^ ) ; + @ % & * { ] = $ $ * % + + + @ ( 6 2 } ^ % @ & ; $ $ { ~ ; { * + . . & ' - # . . . . _ t r G B 5 5 | ! ! 3 6 % . . + + . . . . + + + + . . . . . . + + . $ [ k 6 e e 9 5 e V D h !.L 6 = T q.&+M.o n g.1+D+]._ J u+B+7.d 7 2 = . @ ; > ^.(.g.9.>.9.|.5.W.h+;+^+D u B.T.b.A * & # $ $ # @ # @ $ # @ $ # % $ @ + + # + @ + + @ # @ # + @ # $ @ @ @ $ & % # @ $ # # # # # % % $ # @ # # @ # % # # $ # # . ", ". . # * = - { = $ @ @ $ = = = - { = - % + . . @ * _ ( # . . # $ % ' - % $ % # + . + # % > A w 3 ] & % # % % # $ $ # % # + + . & ] _ / _ ] $ . } p m 9 , ^ > b 7 b 0 I ^ . . . . . . . . + + + . . . . . . . + + @ ; 6 s A z B 5 ] 2 Y H e 8 b q o.D.r+j+m.K y e.(+D+x+]+q+A+i.; . = = . @ ; ; ( n &.Y K :.O.=.4.].j.c.`.s+H ).d.&.A & $ @ # $ # $ $ # # # # $ # # # @ @ + + + @ + # @ + + # # # # $ $ # # % $ $ # @ + $ # # $ $ # $ & % $ # $ $ $ $ $ # @ @ # . ", ". . + @ % & = ' ; @ $ & ; * & = ; * = # . + + @ - ( { # . . . . + * * $ % * # . . + $ $ ~ } b , * ; = $ + + + . . . . . + + @ $ ' ) > b w k ~ / g [ _ ~ - ~ } d w 4 } % @ . . + + . + . . . . . . + + . . . . . * ) [ t t t p A a w | } # . m r.x+z+o+c+#+x _ t +F+E+D+D+[+j . + @ @ + - [ , 7 W W K O l.-.{.].g.d.` %.O z 9 5 | , @ + # * ; % $ $ # # # # # # $ # @ @ + + @ @ + @ # + + # # @ # # @ # # $ % $ @ + + + @ @ # # # % % % * % # & * $ @ @ # # @ . ", ". . . . + # & * ; @ # % & ; = = % * * @ + + @ $ * ; { ~ = % @ # $ & ; # # $ @ . + # # ; ~ < b ) ; ; & + + . . . . . . . + $ % # % { ^ ) 7 8 ! % % ; / < _ _ 3 d 4 | ~ + + . . . . + + . . . . . + + + + + + + @ { > ) A j S G l u 6 ; + + G +3+2+1+v+y+6+p . . O 9+F+:+y+H+Z . @ + @ + ; , l .. .P W W O =.8.*.~.K } w A ! : ' # $ @ + % = * $ $ $ # # @ @ # # # # # @ + @ @ @ @ @ @ @ @ # + @ # # @ @ # % % @ + + + + @ $ $ # $ % $ $ & $ & & $ $ @ # @ @ @ . ", ". . . . . + @ @ @ @ # # % { : / & % $ + . + + # % * { _ ) = % % & & ; @ + + + + + # % ] ) ! > > ^ ' $ . . . . . . . . . + % & $ @ # = / ( & $ % * ~ < < b e 4 z t c g * . . . . . + . . # ; + + + + + + + + + % ^ ' ) 8 m q >.P e & . . w /.f+<+;+]+_+L f ( . ~ B.;+|+1+|+/+2.@ @ + + + # ~ s q U ~.<.h c p q m 6 / 1 [ { # ] = + @ # # & = * $ # % # # @ @ @ @ $ @ # @ @ + + + + + @ + @ @ @ @ + @ @ @ @ $ # @ + + @ + @ % % @ # $ % % $ $ % # # # # $ # @ # . ", ". + + + + + . . . . @ @ * / ! > ^ = @ + . . . @ $ % % / > * & & & ; = % + . . + # $ ; ] ( / _ ' ^ / % + . . + . . . . + @ $ $ % $ @ % ; & @ # { ^ > 7 3 6 8 i C C 9 8 , . + % $ . . . . / j / . + + + + + + + ; ' > 2 z I S n 8 * . . - m [.V.!+1.i ; . . . $ ).Q.t+q+g+|+F+q.; . + + @ & { a c S V I i < / _ , ; @ ; ' * . + # + @ $ # % # $ $ @ # # # @ # @ @ + + @ + + + + + + + + @ + @ @ # @ + + # # # $ @ @ @ @ @ @ @ @ + @ % % & # # @ # % # # $ % $ % . ", "+ + + + + . . . . . . + - / / > _ ] $ + . . . + @ @ + ; - $ # ; ^ ~ - & + . . @ # % ; / , ~ ' = ' { $ + + . . . . . . . & * + @ % ; { * ; ; * ( [ < g 7 7 4 4 9 e 7 ) * + - B 5 + . . * > 4 / . . + + + + + @ = ; > 4 w 2 5 , # . @ ^ 4 @.8.R.Q.>.# . . . + n #+'+t+j+[+z+4+d.# . @ @ + # % ^ 7 c 4 3 ( = * * $ @ @ $ = ; @ + @ @ @ $ & & # # @ @ @ # # # # + # @ @ + + @ @ @ @ + + # @ @ @ @ @ @ @ # # $ # @ + + @ @ @ + + + + @ # # $ # $ # @ # # # # # # # . ", "+ . . + . . . . . . + @ ; _ ( < _ ) ( $ + + # + . + + $ & + + # - ^ ' $ @ + + + $ & $ ; ! k ] { ' & # + + . . . . . . . % $ + . # = , / ] - ; ' } g k | a | 8 5 , ] $ @ - 7 B b + + . * < / % . + + @ + . + + $ % ; : : = # . . . } Z D @.B.J.b+k.% . . . < g.;+^+c+^+9+(+;+I . + + + + + @ # % { , { # + . . . + @ # # # % @ # # @ @ $ $ $ # @ @ @ # # + # @ + @ + @ @ # @ + @ # @ # + + @ @ @ + + $ # @ + + # @ # # + + + . + @ + + # $ $ @ @ $ $ @ # @ @ # . ", "+ . + + . . . . . @ # + $ ' ( : : ! < ' * ' = @ + # @ @ # + @ % = ' ; # * - $ % ; & # * { ~ - = ^ - $ % # + . . . . . . + @ + + $ = ' ) ~ = * - _ 6 k g 7 | 4 3 ; + + ; ^ a ) + + @ @ + ; { @ + + + + + + + . @ $ * ] $ . . . ; e <.u.+.F n.;.n.c . . . : d F.V.;+l+]+f+e+T.8 . + + . @ @ @ # + @ @ + + . $ - $ + + # @ + @ @ + @ @ @ # # $ $ @ # @ @ + + + @ @ + @ @ + @ # @ @ + @ + + . + + + + + @ @ # + + # $ + @ @ @ + + @ @ + @ + + + + + $ # @ @ + + @ . ", "+ + . . . . . . . + # + + ; ~ ] ! ) ) / ~ _ - + @ # + @ @ + @ % - ' $ @ - , - ; = * * & ; & $ @ % ; * * $ + @ + . . . . + + . @ = { / , ^ ^ { ] _ ! 7 3 } 9 0 _ . . + ; ~ ( * . + @ @ . @ # + + @ + + + + @ + + $ # $ - ) 6 z H ,...!.,.W ^.w & . . @ 1 &.,.l |.k+V.=+K.$+E.u . + + + + + + + @ @ + + . * a 3 & + + @ @ + + @ @ + + + # # # @ + + @ + @ # + + @ + + + + + + + @ + + + + + + + + + + + # + @ + + + + + # @ @ # + + + + @ + . + @ @ + + + + @ @ . ", "+ . . + . . . + + + + + + % = / , ( / ] ~ ' & @ + @ + + @ # @ $ = { % + # ( ) - % # % & * % + + @ ; * % @ + # @ + @ . . . . . @ = ~ > : > ! _ / _ , a e 1 4 e & . . + % = { & + . . . . + + + + + + + + + @ . . . @ { c x :.3...E U T P.F.7 + . . + ) M -.F.f ,./.Y.V.E.*+_.a . + + + + . . + @ + $ / 7 u 4 = @ + + + + + @ @ + + + @ # # $ @ + + + + @ @ + + + + + + + + @ @ # @ + + @ + + + @ + + @ @ @ @ @ + + @ . + + # # + @ @ @ @ + @ @ @ + . + @ + $ # . ", ". . . . . + @ @ # # @ # $ & % * ' - ~ ; ; * % + + @ @ # # # + $ ; % # @ . $ / ] * $ $ % & ; * * % % $ # + . + . + + + + . . . . % ' , ) < > / ~ ] , < 2 b } ^ # + . + & ~ ; $ . . . + + + + + @ + + + + . . . . . ^ w X !. .N G V W W O 9 @ . . @ ) 8 n M @.u C E h.|.i+w.k.{ . + + . . . . @ # + % 3 t k ^ # # + + + + + + + . . + # # @ + + + + @ @ @ @ + @ @ @ + + + @ + @ @ @ @ + + + + + # @ @ @ + @ @ @ @ @ @ @ + + @ @ # # # # # # @ + @ @ @ @ @ @ @ @ . ", ". . . . . @ $ $ $ $ % ; { ; = ~ & % = % % * * $ # # $ % $ $ @ $ & # @ + + + # % & * * * & ; ; ; # + @ + . . . . . + + + . . . . $ - / , ! > ~ - ^ ] ( : > : ( % . . . ; [ { @ . . . . + + . + + . . + + . . . . & 7 v K !.y r z z G G w # . . @ > S O S i r u t u E u.7.c.u.> . . . . . . + @ + + = ) ^ # + # @ + + @ + + + . . + + + @ @ + + + # @ @ @ @ + + @ @ + + + @ # + @ + + + + + + + + @ @ @ + + + + @ @ + + + @ @ @ # # @ + @ $ $ @ # @ @ @ @ # + @ . ", ". . . . . + = = * { ' ~ ^ { / / ~ = ] ^ & # % - % # * * $ # @ # # @ @ # @ @ @ @ # # + & * $ . . . . . + . . . . . + . . . . . . # - ^ , ] { ^ ( ^ - = ^ > [ / - $ $ = { } a & . . . + + . . + + + + + . . . . @ ( 2 h U Q r m j C t _ # . . . b y ..R E w t 8 e s f ,.W n H s ' # + . . . . . . + - ' % . + % # @ + + . . . + + . . . @ + + + + @ @ @ @ @ + + @ + + @ # @ @ + + + + @ + + . @ + + + + + # # @ # @ @ @ @ @ @ @ # $ @ + + @ $ @ $ # @ + @ # + + . ", ". . . . . + ; - = ~ ' ] ^ ~ , [ ) : : _ { # # % $ @ % & # + + + & { $ $ $ # @ + + . . + @ + . . + + @ @ + . . . . + . . . . . . . + = ~ = = ~ > > ~ * = ] : _ _ _ 5 S t A g ; . . . . + + + . . + + + . . . . { < w q U h z z 4 | ] . . . . * t m ,.J I 9 4 5 i y N t : # & [ 1 _ % @ + . . . . + & & # + @ $ @ + + . . . . + @ + + @ + + + + + + @ @ @ + @ @ @ % @ @ @ + + @ + @ + + + + + + + + + @ @ # # $ # # # @ + @ % @ @ @ @ @ + + + + # # @ @ @ + + + . ", ". . . . . + & * * & * ' { - ^ ) , , : ] & $ $ # # * % $ # + # * { ] % % * % & % # $ $ $ # + . . @ * = { - # + . . . . . . . . . . . # ' { % ( } / ; @ @ % > < < i O &.&.H [ + . + . . + . + + . . . + . . . $ > 6 j y G 0 p C [ * . . . + ' | q m B p 9 t 8 d d I N 6 ; # % = = - * { } ~ % # # # + @ @ @ @ + + + + + . + + + @ $ # @ # + + + + @ + + @ @ # @ @ # @ + + @ + @ + + + @ + + + @ + @ $ @ # # % $ @ @ @ @ @ @ $ # @ @ @ @ @ @ @ @ @ @ # @ + + + + . ", "+ . . . + + + $ % % % & & ; { ^ ) { ' * & & = ; % % @ @ @ . % ) ^ $ $ % $ $ * * & ; ' ) ' @ . . @ $ * = = = & + . . . . + + + + . . . # ; % { / { # . + $ ] / 9 D J &...X [ . + + + . . + + . . + + + . . . ' 6 i Y V C i 7 ( & @ + + + ] i o z d d c t i 5 i w 3 [ ' % $ ; * @ $ $ ; > ^ ~ / ^ ; # + @ + + + + + . + + @ + @ @ % % # # @ # # @ + + @ + @ # + + @ + + + @ # @ + + @ @ + + + + + # # # # + @ @ + @ @ @ @ @ @ @ @ + @ $ $ $ % & # # @ + . + + + . ", "+ . + + + . . @ $ % % $ @ @ ^ : - $ * * = ' - - & $ @ @ + . ; [ { + @ + . @ $ $ % ~ ! 3 : $ . . + @ % & & * * # + . . + + + + + . . . + $ & % $ # . . . @ % ! 0 ` ` W .Q / . + + + + . + + + + + @ + + . . ~ 2 o N h C e { + + + + # # ) 8 4 k e | } 8 t e A ! * # $ & ; & # % - & % & ' , : { % @ @ @ @ + + + + + + @ @ @ @ + @ @ # + + # # + + + + @ @ + + + . . + @ @ @ @ + + @ $ @ + + @ # # @ # # @ @ + @ # @ # @ @ @ @ # + + # $ @ $ % @ # # + + + + + . ", "# @ + + . . . . @ # $ # @ + = ' @ @ * { { ~ { ; % # # # # # ; - $ . . . . + @ # * ' : ! | { . . . @ & % $ $ & & # . . . + + @ . . . . + $ & @ + . . . . . @ , C n f v h i = + @ . . . . + + @ + + + . . . @ / 7 p N p 7 ~ $ + . . + @ % * , 7 g e 2 1 2 9 4 | ~ $ # * - ; @ $ ; ] / ' - > ^ % @ + + + + + + + + + + @ # # $ @ + + + + + @ # # + + + + + + + + . . . + + + + @ + + @ @ + + # @ # % # # # # @ # # @ + @ @ # @ + + @ @ # # @ # # + @ # # # @ + @ . ", "% * @ + . . . . @ # $ # @ + . + + @ & = = { ] ; # # $ % & ~ { . . . . + . . + $ % ' ! 1 w _ @ + . + * * % * * & @ + . . + . + + . . . . @ $ + . . . . . . . ( 4 C ! / { @ # - = # + . . . . . . . . . . + # _ 6 N V 7 & $ + . . . + + @ # { < A w e 7 b 6 w < # + # % $ # $ - ~ ( / * ; ~ $ . + + + + + + + @ @ + @ @ $ # # @ @ @ + + + + + @ @ + + + + + . . . + . . . + + + + + + + + + $ # @ # @ # # $ # # @ # # @ # # @ + @ # # $ # @ @ @ @ @ # * % @ @ + . ", "$ % # + . . . . + % & # @ + . . + @ $ * - ; - { * # # * = = % + . . . . . . + @ $ = ) w 4 } * # @ $ % # # * * % # + + . . . . . . . . + + . . . + + $ ; & . * > < ' * @ @ * ; - * @ . . . . . . . . . . + & > | 5 g = @ + . . . . . + + + @ ' } 2 e } : 3 a ( $ + # # $ * ; ^ > ^ ' @ $ $ + + + + + + + + + # @ + + # $ $ # @ @ # + + + + + + + + + # + + + + + @ + . . . . + + + + + @ + @ @ @ @ # # # # @ @ + # # @ # # + @ # # @ # # $ # @ # $ # # # # @ @ . ", "# $ # + . + + . + % & * % + . . . + $ & ; * % ; ' ; # & % @ # $ & & $ + + + + . # * ' } ) ~ = & & ' ; . + @ # $ $ # $ # + + # @ $ $ # & # . + + # & ] : b > , < } b } _ & = # @ # + + + + + + . . . . + . - 7 k , # @ . . . . . . . + + @ + + % * - { ( < , ) ] @ + $ ; * * ( > ~ * & @ @ + + + + @ + @ + + + + + + # $ # # # @ @ + @ + + + + @ @ @ @ + + + @ @ @ + + + + + + + + @ + + @ @ @ @ @ # $ # @ + + + @ # @ @ # @ # # # $ $ $ % % $ @ # $ # @ @ @ @ . ", "# % % @ . . . . + + * ] & + . . . @ % & * * * - ] - * # + + # & { ~ / ' ; % $ # + @ $ # # $ % * ~ _ ~ + . . + + @ * ; $ @ # ; ; - { $ ; @ + @ @ + @ { > 1 g } 2 w 6 1 ( & # + . . + + + + + + + . . . + + _ d [ * @ . . . . . + + + + + @ + + . * ~ # * { { < ; . + ; ' @ $ ' ] = ; & # + + + @ # # @ + . + + # # @ @ $ $ @ @ @ @ + @ # @ @ @ @ # @ + + + + @ + @ # + + + + @ + + + @ + + @ # @ @ # # # # # @ @ @ @ @ @ @ @ @ @ # % % $ # $ $ $ # @ # @ @ @ @ . ", "@ @ $ # + . . . . % ) [ ( . . . . @ & % & ; ; = - * $ @ . . $ - ] ( / ( ' { ~ { = # + . + + @ % ] , ' @ + + + + @ % ; { > _ ; % % ; ' % + + + + . . # = / _ < a 7 3 : $ . . . . . + + + . . + @ . . + + * 1 k = . . . . + @ # @ @ + + + + + . # ^ ( % @ @ % - $ + # ; { + + # % $ # @ . + + + + # @ + + + + @ @ @ # # $ # @ @ + + @ # @ @ # + @ @ @ + @ @ @ @ @ @ + + + + + + + + + + + + @ @ @ # # @ @ # @ @ # # + @ # $ @ # # $ $ # # # # $ % # @ @ # # # @ . ", "@ @ # # + + + . # ~ [ 7 ( # . . . # $ % & ; * & @ + + + + # * - ] ( = = ~ ' ' ~ ] = # + + . @ % ' ] * + + @ $ $ # $ ] } g 1 * . @ % * @ . . . @ . . + + ; _ / b 7 ] $ . . . . . . + @ + + . . + . . + # ( ) * + . . . + % = = % * & # @ + . @ ~ _ ^ % @ # % = = % $ = = # + + @ @ @ + + + + @ @ # @ + + + $ % # @ @ # # @ @ @ + + @ $ # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + @ @ + @ + + + + @ + $ $ # # # @ # # # $ # # $ @ # $ $ % % $ % % # # # @ @ @ @ @ @ . ", "@ + + @ % # # # & ] [ [ { @ . . . + $ % $ ; $ . . . . . @ % ; ~ , ^ ^ ~ ' - - - ' ] & . + @ $ % ; * # @ + @ $ & * ' b c g 3 - . . + + . + + + . . . . . + * / c 3 @ . . . . . . . . + + . . . . + . @ ( > ; . . . . . # = ' ' { ] ~ ~ ' & @ ; ] ] ^ = ; _ ) ; # # # { ] % @ + . + + + + + + @ $ $ # + $ ; ' - ; $ # $ # @ @ @ + + + + @ + @ $ + + + @ @ @ @ + + + @ + + + + + + . @ + @ @ @ @ @ # @ @ $ $ # $ # @ % $ $ % @ @ # $ @ $ $ $ $ $ # @ @ + @ + + @ . ", "@ + + + # $ # % - , b ) @ . . . . + $ % $ + + . . + . . + % - ^ > ] / ] { ; - ; ' ] = * @ # & * $ + + $ & % % % = ) g e k : $ + + + + + + + . . + + . . . % ) b - . . . . . . . + . . . . . + . . + * ] * + . . . . @ = { * ; ~ ' ' ^ ^ * * { ~ ' & { ] 7 ) + . + # { ' % + + + + + + + @ # # # # @ + ; ~ ] { ] ~ ' ; $ # $ # @ + + @ @ @ @ @ + . + @ @ @ + + + + # @ + . + @ + + + + @ @ # @ + @ # @ # @ # $ % % % # # # # @ # # # @ # $ & $ # + @ $ $ + + + . ", "+ . + + @ $ # $ * ' ] & . . . . . . @ # + + . . + + . + % = ] , / _ / ~ ~ ' ; { ] - { ' $ $ = ] = + # & = * % & , ! w w | = + . . + + + @ . . . + + . + % _ > ^ & + . + . . . . . + . . . . . . . @ * ; + . . . . + * ] - = - - ; * & & & - = % $ # * ~ ] * + . + # * & $ + + + + + + + + # # + @ + . & / ' ] , ^ { = & $ # @ @ @ + @ @ @ + + + + + + + @ + + + + + + @ @ @ @ @ @ @ @ + # $ # @ $ $ @ # # @ # $ $ $ $ @ # # @ @ @ @ # # # # # @ @ # # @ + @ + . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ @ # # # $ # # $ $ @ # $ # # $ $ $ % # @ @ @ # @ @ # @ @ @ . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ # # $ $ $ # $ $ @ $ # % $ + # # $ % @ @ @ # $ @ @ @ # @ @ . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "}; therion/loch/icons/camera.xpm0000644000076400010400000000076610763711622017321 0ustar userAdministrators/* XPM */ static const char * camera_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 6 1", " c black", ". c #002E70", "X c #CDCDCD", "o c #C4E9F5", "O c gray100", "+ c None", /* pixels */ "++++++++++++++++", "+++ + ++++++", "++ ooo ooo +++++", "++ ooo ooo +++++", "++ ooo ooo +++++", "+++ + ++ ++", "++++ + ++", "++++ .... ++", "++++ .... ++", "++++ .... ++", "+++++ ++ ++", "++++ .++. ++ ++", "++++ .++. ++++++", "+++ .++++. +++++", "+++ .++++. +++++" }; therion/loch/icons/fit.xpm0000644000076400010400000000072710763711626016654 0ustar userAdministrators/* XPM */ static const char * fit_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 4 1", " c #0000BB", ". c #009BFF", "X c gray100", "o c None", /* pixels */ "oooooooooooooooo", "oo ooooo o", "oo ...ooooo... o", "oo .ooooooooo. o", "oo .ooooooooo. o", "oooooooooooooooo", "oooooooooooooooo", "oooooooooooooooo", "oooooooooooooooo", "oooooooooooooooo", "oo .ooooooooo. o", "oo .ooooooooo. o", "oo ...ooooo... o", "oo ooooo o", "oooooooooooooooo" }; therion/loch/icons/fly.xpm0000644000076400010400000000074410763711630016656 0ustar userAdministrators/* XPM */ static const char * fly_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 5 1", " c black", ". c #ACA899", "X c #ECE9D8", "o c gray100", "O c None", /* pixels */ "OOOOOOO OOOOOOO", "OOOOOO o. OOOOOO", "OOOOOO oX OOOOOO", "OOOOOO oX OOOOOO", " oX ", " XooooXoo.XoooX ", "O XXXXoo.XXX O", "OOO oX OOO", "OOOOOO oX OOOOOO", "OOOOOO oX OOOOOO", "OOOO o OOOO", "OOOO o.o XX OOOO", "OOOOO o OOOOO", "OOOOOOO OOOOOOO", "OOOOOOOOOOOOOOOO" }; therion/loch/icons/fullscreen.xpm0000644000076400010400000000075210763711634020231 0ustar userAdministrators/* XPM */ static const char *fullscreen_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 5 1", " c gray30", ". c #4DFFFF", "X c gray65", "o c gray100", "O c None", /* pixels */ "OOOOOOOOOOOOOOOO", "OO O", "O OOOOOOOOOOOOO ", "O O O ", "O O .o.o.o.o. O ", "O O oXXXo.o.o O ", "O O .o.o.o.o. O ", "O O oXXXXXXXo O ", "O O .o.o.o.o. O ", "O O oXXXXXXXo O ", "O O .o.o.o.o. O ", "O O O ", "O OOOOOOOOOOOOO ", "OO O", "OOOOOOOOOOOOOOOO" }; therion/loch/icons/home.xpm0000644000076400010400000000077710763711640017023 0ustar userAdministrators/* XPM */ static const char * home_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 7 1", " c black", ". c #6AFFFF", "X c #BE0000", "o c #9B601A", "O c red", "+ c gray100", "@ c None", /* pixels */ "@@@@@@@@@@@@@@@@", "@@@@@@@XXX@@@@@@", "@@@@@@XOOOX@ @@", "@@@@@XOOOOOX @@", "@@@@XOOOOOOOX @@", "@@@XOOOOOOOOOX@@", "@@XOOOOOOOOOOOX@", "@XXXXXXXXXXXXXXX", "@@@ +++++++++ @@", "@@@ + + + @@", "@@@ + . + o + @@", "@@@ + + o + @@", "@@@ +++++ o + @@", "@@@ +++++ o + @@", "@@@ @@" }; therion/loch/icons/lockrot.xpm0000644000076400010400000000075310763711644017546 0ustar userAdministrators/* XPM */ static const char * lockrot_xpm [] = { /* columns rows colors chars-per-pixel */ "16 15 5 1", " c #0060A2", ". c #00A5E4", "X c #DE0000", "o c gray100", "O c None", /* pixels */ "OOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOO", "OOOOO......OOOOO", "OOOO.......OOOOO", "OOO .......OOOOO", "OOO ..OOOOOOOOOO", "OXX OOXXOOOOOOO", "OXXX OXXXO OOOO", "OOXXXXXXOO OOO", "OOOXXXX OO", "OOOXXXX O", "OOXXXXXX OO", "OXXXOOXXXO OOO", "OXXOOOOXXO OOOO", "OOOOOOOOOOOOOOOO" }; therion/loch/icons/open.xpm0000644000076400010400000000074310763711652017030 0ustar userAdministrators/* XPM */ static const char *open_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 5 1", " c None", ". c Black", "X c Yellow", "o c Gray100", "O c #bfbf00", /* pixels */ " ", " ... ", " . . .", " ..", " ... ...", " .XoX....... ", " .oXoXoXoXo. ", " .XoXoXoXoX. ", " .oXoX..........", " .XoX.OOOOOOOOO.", " .oo.OOOOOOOOO. ", " .X.OOOOOOOOO. ", " ..OOOOOOOOO. ", " ........... ", " " }; therion/loch/icons/orto.xpm0000644000076400010400000000070610763711656017055 0ustar userAdministrators/* XPM */ static const char *orto_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 3 1", " c black", ". c gray100", "X c None", /* pixels */ "XXXXXXXXXXXXXXXX", "XXX XXXXXXXXXXXX", "XXX XXXXXXXXXXXX", "XXX XXXXXXXXXXXX", "XXX XXXXXXXXXXXX", "XX XXXXXXXXX", "XXX ... XXXXXXX", "XXX ..... XXXXXX", "XXX ...... XXXXX", "XXX .. .. XXXXX", "XXX .. ... XXXX", "XXX ....... XXXX", "XXX ....... XXXX", "XXX ", "XXXXXXXXXXX XXXX" }; therion/loch/icons/persp.xpm0000644000076400010400000000073110763711660017214 0ustar userAdministrators/* XPM */ static const char * persp_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 4 1", " c #0060A2", ". c #00A5E4", "X c gray100", "o c None", /* pixels */ "oooooooooooooooo", "oooooooo ooo oo", "oooooooo o oooo", "oooooooo oooooo", "oooooo . oooooo", "oooo .... ooooo", "oo ...... ooooo", "o ........ ooooo", "oo ...... ooooo", "oooo .... ooooo", "oooooo . oooooo", "oooooooo oooooo", "oooooooo o oooo", "oooooooo ooo oo", "oooooooooooooooo" }; therion/loch/icons/plan.xpm0000644000076400010400000000072510763711664017024 0ustar userAdministrators/* XPM */ static const char *plan_xpm[] = { /* columns rows colors chars-per-pixel */ "15 16 4 1", " c black", ". c red", "X c #FFCC00", "o c None", /* pixels */ "ooooo.....ooooo", "ooooo.XXX.ooooo", "ooooo.XXX.ooooo", "ooooo.XXX.ooooo", "ooooo.XXX.ooooo", "ooooo.XXX.ooooo", "ooooo.XXX.ooooo", "ooooo.XXX.ooooo", "ooooo.XXX.ooooo", "oo...XXXXX...oo", "ooo.XXXXXXX.ooo", "oooo.XXXXX.oooo", "ooooo.XXX.ooooo", "oooooo.X.oooooo", "ooooooo.ooooooo", "ooooooooooooooo" }; therion/loch/icons/profile.xpm0000644000076400010400000000072710763711670017531 0ustar userAdministrators/* XPM */ static const char * profile_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 4 1", " c red", ". c #FFCC00", "X c gray100", "o c None", /* pixels */ "oooooooooooooooo", "oooooooooooooooo", "ooooooooo oooooo", "ooooooooo ooooo", "ooooooooo . oooo", "o ... ooo", "o ........... oo", "o ............ o", "o ........... oo", "o ... ooo", "ooooooooo . oooo", "ooooooooo ooooo", "ooooooooo oooooo", "oooooooooooooooo", "oooooooooooooooo" }; therion/loch/icons/reload.xpm0000644000076400010400000000073010763711674017335 0ustar userAdministrators/* XPM */ static const char * reload_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 4 1", " c #008D00", ". c green", "X c gray100", "o c None", /* pixels */ "oooooooooooooooo", "ooooooooooo oooo", "ooooo ooo", "oooo oo", "ooo ooo", "ooo ooooo oooo", "ooo oooooooooo", "oooooooooooooooo", "oooooooooo ooo", "oooo ooooo ooo", "ooo ooo", "oo oooo", "ooo ooooo", "oooo ooooooooooo", "oooooooooooooooo" }; therion/loch/icons/render.xpm0000644000076400010400000000074510763711700017342 0ustar userAdministrators/* XPM */ static const char *render_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 5 1", " c None", ". c Black", "X c Gray100", "o c #808000", "O c Yellow", /* pixels */ " ", " ......... ", " .XXXXXXXX. ", " .X.....X. ", " .XXXXXXXX. ", " .X.....X.... ", " .XXXXXXXX. . .", " .......... . ..", ". . . .", "............. .", ". ooo . . ", ". OOO ... ", "............. . ", " . . . ", " ........... " }; therion/loch/icons/rendersetup.xpm0000644000076400010400000000073410763711702020423 0ustar userAdministrators/* XPM */ static const char *rendersetup_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 4 1", " c black", ". c #505050", "X c gray100", "o c None", /* pixels */ "oooooooooooooooo", "o ....o", "o XXXXXXXX Xo oo", "o X......X o o", "o XXXXXXXX oo oo", "o X......X oo oo", "o XXXXXXXX oo oo", "o X......X o o", "o XXXXXXXX oo oo", "o ....o", "o.oooooooo.ooooo", "o.o oooo o.ooooo", "o. .ooooo", "o.o oooo o.ooooo", "oooooooooooooooo" }; therion/loch/icons/rotation.xpm0000644000076400010400000000073410763711706017726 0ustar userAdministrators/* XPM */ static const char * rotation_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 4 1", " c #0060A2", ". c #00A5E4", "X c gray100", "o c None", /* pixels */ "oooooooooooooooo", "oooooooooooooooo", "ooooo......ooooo", "oooo.......ooooo", "ooo .......ooooo", "ooo ..oooooooooo", "ooo ooooooooooo", "ooo ooooo oooo", "ooo oooo ooo", "ooo oo", "oooo o", "ooooo oo", "oooooooooo ooo", "oooooooooo oooo", "oooooooooooooooo" }; therion/loch/icons/scene.xpm0000644000076400010400000000076410763711712017164 0ustar userAdministrators/* XPM */ static const char *scene_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 6 1", " c black", ". c #3A3A3A", "X c #0101C6", "o c #BBCEFD", "O c gray100", "+ c None", /* pixels */ "++++++++++++++++", "++ ++", "++ OOOOOOOO o ++", "++ O.....OO ++", "++ OOOOOOOO O ++", "++ OXO....O o ++", "++ OOOOOOOO o ++", "++ OXO....O o ++", "++ OOOOOOOO O ++", "++ OXO....O O ++", "++ OOOOOOOO O ++", "++ OOOOOOOO ++", "++ OOOOOOOO o ++", "++ ++", "++++++++++++++++" }; therion/loch/icons/stereo.xpm0000644000076400010400000000074110763711716017367 0ustar userAdministrators/* XPM */ static const char * stereo_xpm [] = { /* columns rows colors chars-per-pixel */ "16 15 5 1", " c black", ". c cyan", "X c red", "o c gray100", "O c None", /* pixels */ "OOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOO", " ", " oooooooooooooo ", " o.....ooXXXXXo ", " o.....ooXXXXXo ", " o.....ooXXXXXo ", " o....ooooXXXXo ", " oooooo oooooo ", " OO ", "OOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOO" }; therion/loch/icons/visbbox.xpm0000644000076400010400000000071310763711720017534 0ustar userAdministrators/* XPM */ static const char *visbbox_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 3 1", " c #E81B1B", ". c gray100", "X c None", /* pixels */ "XXXXXXXXXXXXXXXX", "XXX X", "XX XXXXXXXXXX X", "X XXXXXXXXXX X X", " XX X", " XXXXXXXXXX XX X", " XXXXXXXXXX XX X", " XXXXXXXXXX XX X", " XXXXXXXXXX XX X", " XXXXXXXXXX XX X", " XXXXXXXXXX XX X", " XXXXXXXXXX XX X", " XXXXXXXXXX X XX", " XXXXXXXXXX XXX", " XXXX" }; therion/loch/icons/viscline.xpm0000644000076400010400000000073110763711724017700 0ustar userAdministrators/* XPM */ static const char *viscline_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 4 1", " c black", ". c #FFD800", "X c gray100", "o c None", /* pixels */ "oooooooooooooooo", "ooooooooooo...oo", "ooooooooooo...oo", "oooooooooo ...oo", "ooooooooo oooo", "oooooooo ooooo", "ooooooo oooooo", "oooooo ooooooo", "ooooo oooooooo", "oooo ooooooooo", "ooo oooooooooo", "o... ooooooooooo", "o...oooooooooooo", "o...oooooooooooo", "oooooooooooooooo" }; therion/loch/icons/visentrance.xpm0000644000076400010400000000061112267532034020376 0ustar userAdministrators/* XPM */ static const char * visentrance_xpm[] = { "16 15 2 1", " c None", ". c #1A4C1A", " ", " ...... ", " .. .. ", " .. .. ", " .. .. ", " .. .. ", " .. .. ", " .. .. ", " .. .. ", " .. .. ", " .. .. ", " .. .. ", " ... ... ", " ", " "}; therion/loch/icons/visfix.xpm0000644000076400010400000000060412267531774017401 0ustar userAdministrators/* XPM */ static const char * visfix_xpm[] = { "16 15 2 1", " c None", ". c #500000", " ", " ", " . ", " . ", " ... ", " . . ", " . . ", " ... . ... ", " . . ", " . . ", " ... ", " . ", " . ", " ", " "}; therion/loch/icons/visinds.xpm0000644000076400010400000000112310763711730017534 0ustar userAdministrators/* XPM */ static const char *visinds_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 12 1", " c #0009C4", ". c #1D00FF", "X c #00FF02", "o c #00CCFF", "O c #00F5FE", "+ c #FF3100", "@ c #FD00FD", "# c #FFBA00", "$ c #F3FF00", "% c #FFEA3A", "& c gray100", "* c None", /* pixels */ "****************", "**+ *ooo********", "**# ************", "**$ *ooo********", "**X ************", "**O *ooo********", "**. ************", "**@ *ooo********", "****************", "** * *******", "** % * % **o****", "** * * ***", "***o***o********", "**ooooooooooo***", "****************" }; therion/loch/icons/vislabel.xpm0000644000076400010400000000062512267532012017657 0ustar userAdministrators/* XPM */ static const char * vislabel_xpm[] = { "16 15 3 1", " c None", ". c #000000", "+ c #9E7B00", " ", " . .. . ", " . . . . . . ", " ... .. . ", " . . . . . . ", " . . .. . ", " ", " ", " + ", " + ", " +++++ ", " + ", " + ", " ", " "}; therion/loch/icons/visstation.xpm0000644000076400010400000000061012267532016020257 0ustar userAdministrators/* XPM */ static const char * visstation_xpm[] = { "16 15 2 1", " c None", ". c #9E7B00", " ", " ", " ", " .. ", " .. ", " .. ", " ........ ", " ........ ", " .. ", " .. ", " .. ", " ", " ", " ", " "}; therion/loch/icons/vissurface.xpm0000644000076400010400000000073510763711734020243 0ustar userAdministrators/* XPM */ static const char *vissurface_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 4 1", " c #41B800", ". c #98F963", "X c gray100", "o c None", /* pixels */ "oooooooooooooooo", "oooooooooooooooo", "oooooooooooooooo", "oooooooooooooooo", "oooo ooooo.ooooo", "ooo ooo...oooo", "oo o.....ooo", "o ......oo", " .....oo", " ....oo", " ...oo", " ..oo", " .oo", " oo", "oooooooooooooooo" }; therion/loch/icons/viswalls.xpm0000644000076400010400000000173110763711736017734 0ustar userAdministrators/* XPM */ static const char *viswalls_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 39 1", " c black", ". c gray43", "X c #717171", "o c #777777", "O c gray48", "+ c #7E7E7E", "@ c #838383", "# c #848484", "$ c gray53", "% c gray55", "& c gray56", "* c #909090", "= c gray57", "- c #939393", "; c #959595", ": c gray59", "> c #989898", ", c #9A9A9A", "< c #9B9B9B", "1 c gray61", "2 c #9D9D9D", "3 c gray62", "4 c #A0A0A0", "5 c gray63", "6 c #A2A2A2", "7 c gray64", "8 c #A4A4A4", "9 c #A5A5A5", "0 c #A7A7A7", "q c gray66", "w c #A9A9A9", "e c #AAAAAA", "r c gray67", "t c #B7B7B7", "y c #B9B9B9", "u c gray73", "i c #BBBBBB", "p c gray100", "a c None", /* pixels */ "aaaaaaaaaaaaaaaa", "aaaaaaaaaaaa aa", "aaaaaaaaaa 6r a", "aaaaaaaa #endif #include #include #include #include #include #include #include #include #include "img.h" #define TIMENA "?" #ifdef IMG_HOSTED # define INT32_T int32_t # include "debug.h" # include "filelist.h" # include "filename.h" # include "message.h" # include "useful.h" # define TIMEFMT msg(/*%a,%Y.%m.%d %H:%M:%S %Z*/107) #else # ifdef HAVE_STDINT_H # include # define INT32_T int32_t # else # include # if INT_MAX >= 2147483647 # define INT32_T int # else # define INT32_T long # endif # endif # define TIMEFMT "%a,%Y.%m.%d %H:%M:%S %Z" # define EXT_SVX_3D "3d" # define EXT_SVX_POS "pos" # define FNM_SEP_EXT '.' # define METRES_PER_FOOT 0.3048 /* exact value */ # define xosmalloc(L) malloc((L)) # define xosrealloc(L,S) realloc((L),(S)) # define osfree(P) free((P)) # define osnew(T) (T*)malloc(sizeof(T)) /* in IMG_HOSTED mode, this tests if a filename refers to a directory */ # define fDirectory(X) 0 /* open file FNM with mode MODE, maybe using path PTH and/or extension EXT */ /* path isn't used in img.c, but EXT is */ # define fopenWithPthAndExt(PTH,FNM,EXT,MODE,X) \ ((*(X) = NULL), fopen(FNM,MODE)) # ifndef PUTC # define PUTC(C, FH) putc(C, FH) # endif # ifndef GETC # define GETC(FH) getc(FH) # endif # define fputsnl(S, FH) (fputs((S), (FH)) == EOF ? EOF : putc('\n', (FH))) # define SVX_ASSERT(X) #ifdef __cplusplus # include using std::max; using std::min; #else /* Return max/min of two numbers. */ /* May be defined already (e.g. by Borland C in stdlib.h) */ /* NB Bad news if X or Y has side-effects... */ # ifndef max # define max(X, Y) ((X) > (Y) ? (X) : (Y)) # endif # ifndef min # define min(X, Y) ((X) < (Y) ? (X) : (Y)) # endif #endif static INT32_T get32(FILE *fh) { INT32_T w = GETC(fh); w |= (INT32_T)GETC(fh) << 8l; w |= (INT32_T)GETC(fh) << 16l; w |= (INT32_T)GETC(fh) << 24l; return w; } static void put32(long w, FILE *fh) { PUTC((char)(w), fh); PUTC((char)(w >> 8l), fh); PUTC((char)(w >> 16l), fh); PUTC((char)(w >> 24l), fh); } static short get16(FILE *fh) { short w = GETC(fh); w |= (short)GETC(fh) << 8l; return w; } static void put16(short w, FILE *fh) { PUTC((char)(w), fh); PUTC((char)(w >> 8l), fh); } static char * baseleaf_from_fnm(const char *fnm) { const char *p; const char *q; char * res; size_t len; p = fnm; q = strrchr(p, '/'); if (q) p = q + 1; q = strrchr(p, '\\'); if (q) p = q + 1; q = strrchr(p, FNM_SEP_EXT); if (q) len = (const char *)q - p; else len = strlen(p); res = (char *)xosmalloc(len + 1); if (!res) return NULL; memcpy(res, p, len); res[len] = '\0'; return res; } #endif static char * my_strdup(const char *str); static time_t mktime_with_tz(struct tm * tm, const char * tz) { time_t r; char * old_tz = getenv("TZ"); #ifdef _MSC_VER if (old_tz) { old_tz = my_strdup(old_tz); if (!old_tz) return (time_t)-1; } if (_putenv_s("TZ", tz) != 0) { osfree(old_tz); return (time_t)-1; } #elif defined HAVE_SETENV if (old_tz) { old_tz = my_strdup(old_tz); if (!old_tz) return (time_t)-1; } if (setenv("TZ", tz, 1) < 0) { osfree(old_tz); return (time_t)-1; } #else char * p; if (old_tz) { size_t len = strlen(old_tz) + 1; p = (char *)xosmalloc(len + 3); if (!p) return (time_t)-1; memcpy(p, "TZ=", 3); memcpy(p + 3, tz, len); old_tz = p; } p = (char *)xosmalloc(strlen(tz) + 4); if (!p) { osfree(old_tz); return (time_t)-1; } memcpy(p, "TZ=", 3); strcpy(p + 3, tz); if (putenv(p) != 0) { osfree(p); osfree(old_tz); return (time_t)-1; } #define CLEANUP() osfree(p) #endif tzset(); r = mktime(tm); if (old_tz) { #ifdef _MSC_VER _putenv_s("TZ", old_tz); #elif !defined HAVE_SETENV putenv(old_tz); #else setenv("TZ", old_tz, 1); #endif osfree(old_tz); } else { #ifdef _MSC_VER _putenv_s("TZ", ""); #elif !defined HAVE_UNSETENV putenv((char*)"TZ"); #else unsetenv("TZ"); #endif } #ifdef CLEANUP CLEANUP(); #undef CLEANUP #endif return r; } static unsigned short getu16(FILE *fh) { return (unsigned short)get16(fh); } #include #if !defined HAVE_LROUND && !defined HAVE_DECL_LROUND /* The autoconf tests are not in use, but C99 and C++11 both added lround(), * so set HAVE_LROUND and HAVE_DECL_LROUND conservatively based on the language * standard version the compiler claims to support. */ # if (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L) || \ (defined __cplusplus && __cplusplus >= 201103L) # define HAVE_LROUND 1 # define HAVE_DECL_LROUND 1 # endif #endif #ifdef HAVE_LROUND # if defined HAVE_DECL_LROUND && !HAVE_DECL_LROUND /* On older systems, the prototype may be missing. */ extern long lround(double); # endif # define my_lround lround #else static long my_lround(double x) { return (x >= 0.0) ? (long)(x + 0.5) : -(long)(0.5 - x); } #endif /* portable case insensitive string compare */ #if defined(strcasecmp) || defined(HAVE_STRCASECMP) # define my_strcasecmp strcasecmp #else static int my_strcasecmp(const char *s1, const char *s2) { unsigned char c1, c2; do { c1 = *s1++; c2 = *s2++; } while (c1 && toupper(c1) == toupper(c2)); /* now calculate real difference */ return c1 - c2; } #endif unsigned int img_output_version = IMG_VERSION_MAX; static img_errcode img_errno = IMG_NONE; #define FILEID "Survex 3D Image File" #define EXT_PLT "plt" #define EXT_PLF "plf" /* Attempt to string paste to ensure we are passed a literal string */ #define LITLEN(S) (sizeof(S"") - 1) /* Fake "version numbers" for non-3d formats we can read. */ #define VERSION_CMAP_SHOT -4 #define VERSION_CMAP_STATION -3 #define VERSION_COMPASS_PLT -2 #define VERSION_SURVEX_POS -1 static char * my_strdup(const char *str) { char *p; size_t len = strlen(str) + 1; p = (char *)xosmalloc(len); if (p) memcpy(p, str, len); return p; } static char * getline_alloc(FILE *fh) { int ch; size_t i = 0; size_t len = 16; char *buf = (char *)xosmalloc(len); if (!buf) return NULL; ch = GETC(fh); while (ch != '\n' && ch != '\r' && ch != EOF) { buf[i++] = ch; if (i == len - 1) { char *p; len += len; p = (char *)xosrealloc(buf, len); if (!p) { osfree(buf); return NULL; } buf = p; } ch = GETC(fh); } if (ch == '\n' || ch == '\r') { int otherone = ch ^ ('\n' ^ '\r'); ch = GETC(fh); /* if it's not the other eol character, put it back */ if (ch != otherone) ungetc(ch, fh); } buf[i++] = '\0'; return buf; } img_errcode img_error(void) { return img_errno; } static int check_label_space(img *pimg, size_t len) { if (len > pimg->buf_len) { char *b = (char *)xosrealloc(pimg->label_buf, len); if (!b) return 0; pimg->label = (pimg->label - pimg->label_buf) + b; pimg->label_buf = b; pimg->buf_len = len; } return 1; } #define has_ext(F,L,E) ((L) > LITLEN(E) + 1 &&\ (F)[(L) - LITLEN(E) - 1] == FNM_SEP_EXT &&\ my_strcasecmp((F) + (L) - LITLEN(E), E) == 0) img * img_open_survey(const char *fnm, const char *survey) { img *pimg; size_t len; char buf[LITLEN(FILEID) + 9]; int ch; if (fDirectory(fnm)) { img_errno = IMG_DIRECTORY; return NULL; } pimg = osnew(img); if (pimg == NULL) { img_errno = IMG_OUTOFMEMORY; return NULL; } pimg->buf_len = 257; pimg->label_buf = (char *)xosmalloc(pimg->buf_len); if (!pimg->label_buf) { osfree(pimg); img_errno = IMG_OUTOFMEMORY; return NULL; } pimg->fh = fopenWithPthAndExt("", fnm, EXT_SVX_3D, "rb", &(pimg->filename_opened)); if (pimg->fh == NULL) { osfree(pimg->label_buf); osfree(pimg); img_errno = IMG_FILENOTFOUND; return NULL; } pimg->fRead = 1; /* reading from this file */ img_errno = IMG_NONE; pimg->flags = 0; /* for version >= 3 we use label_buf to store the prefix for reuse */ /* for VERSION_COMPASS_PLT, 0 value indicates we haven't * entered a survey yet */ /* for VERSION_CMAP_SHOT, we store the last station here * to detect whether we MOVE or LINE */ pimg->label_len = 0; pimg->label_buf[0] = '\0'; pimg->survey = NULL; pimg->survey_len = 0; pimg->separator = '.'; #if IMG_API_VERSION == 0 pimg->date1 = pimg->date2 = 0; #else /* IMG_API_VERSION == 1 */ pimg->days1 = pimg->days2 = -1; #endif pimg->is_extended_elevation = 0; pimg->style = pimg->oldstyle = img_STYLE_UNKNOWN; pimg->l = pimg->r = pimg->u = pimg->d = -1.0; pimg->title = pimg->datestamp = NULL; pimg->datestamp_numeric = (time_t)-1; if (survey) { len = strlen(survey); if (len) { if (survey[len - 1] == '.') len--; if (len) { char *p; pimg->survey = (char *)xosmalloc(len + 2); if (!pimg->survey) { img_errno = IMG_OUTOFMEMORY; goto error; } memcpy(pimg->survey, survey, len); /* Set title to leaf survey name */ pimg->survey[len] = '\0'; p = strchr(pimg->survey, '.'); if (p) p++; else p = pimg->survey; pimg->title = my_strdup(p); if (!pimg->title) { img_errno = IMG_OUTOFMEMORY; goto error; } pimg->survey[len] = '.'; pimg->survey[len + 1] = '\0'; } } pimg->survey_len = len; } /* [VERSION_COMPASS_PLT, VERSION_CMAP_STATION, VERSION_CMAP_SHOT] pending * IMG_LINE or IMG_MOVE - both have 4 added. * [VERSION_SURVEX_POS] already skipped heading line, or there wasn't one * [version 0] not in the middle of a 'LINE' command * [version >= 3] not in the middle of turning a LINE into a MOVE */ pimg->pending = 0; len = strlen(fnm); if (has_ext(fnm, len, EXT_SVX_POS)) { pos_file: pimg->version = VERSION_SURVEX_POS; if (!pimg->survey) pimg->title = baseleaf_from_fnm(fnm); pimg->datestamp = my_strdup(TIMENA); if (!pimg->datestamp) { img_errno = IMG_OUTOFMEMORY; goto error; } pimg->start = 0; return pimg; } if (has_ext(fnm, len, EXT_PLT) || has_ext(fnm, len, EXT_PLF)) { long fpos; plt_file: pimg->version = VERSION_COMPASS_PLT; /* Spaces aren't legal in Compass station names, but dots are, so * use space as the level separator */ pimg->separator = ' '; pimg->start = 0; if (!pimg->survey) pimg->title = baseleaf_from_fnm(fnm); pimg->datestamp = my_strdup(TIMENA); if (!pimg->datestamp) { img_errno = IMG_OUTOFMEMORY; goto error; } while (1) { ch = GETC(pimg->fh); switch (ch) { case '\x1a': fseek(pimg->fh, -1, SEEK_CUR); /* FALL THRU */ case EOF: pimg->start = ftell(pimg->fh); return pimg; case 'N': { char *line, *q; fpos = ftell(pimg->fh) - 1; if (!pimg->survey) { /* FIXME : if there's only one survey in the file, it'd be nice * to use its description as the title here... */ ungetc('N', pimg->fh); pimg->start = fpos; return pimg; } line = getline_alloc(pimg->fh); if (!line) { img_errno = IMG_OUTOFMEMORY; goto error; } len = 0; while (line[len] > 32) ++len; if (pimg->survey_len != len || memcmp(line, pimg->survey, len) != 0) { osfree(line); continue; } q = strchr(line + len, 'C'); if (q && q[1]) { osfree(pimg->title); pimg->title = my_strdup(q + 1); } else if (!pimg->title) { pimg->title = my_strdup(pimg->label); } osfree(line); if (!pimg->title) { img_errno = IMG_OUTOFMEMORY; goto error; } if (!pimg->start) pimg->start = fpos; fseek(pimg->fh, pimg->start, SEEK_SET); return pimg; } case 'M': case 'D': pimg->start = ftell(pimg->fh) - 1; break; } while (ch != '\n' && ch != '\r') { ch = GETC(pimg->fh); } } } /* Although these are often referred to as "CMAP .XYZ files", it seems * that actually, the extension .XYZ isn't used, rather .SHT (shot * variant, produced by CMAP v16 and later), .UNA (unadjusted) and * .ADJ (adjusted) extensions are. Since img has long checked for * .XYZ, we continue to do so in case anyone is relying on it. */ if (has_ext(fnm, len, "sht") || has_ext(fnm, len, "adj") || has_ext(fnm, len, "una") || has_ext(fnm, len, "xyz")) { char *line; xyz_file: /* Spaces aren't legal in CMAP station names, but dots are, so * use space as the level separator. */ pimg->separator = ' '; line = getline_alloc(pimg->fh); if (!line) { img_errno = IMG_OUTOFMEMORY; goto error; } /* There doesn't seem to be a spec for what happens after 1999 with cmap * files, so this code allows for: * * 21xx -> xx (up to 2150) * * 21xx -> 1xx (up to 2199) * * full year being specified instead of 2 digits */ len = strlen(line); if (len > 59) { /* Don't just truncate at column 59, allow for a > 2 digit year. */ char * p = strstr(line + len, "Page"); if (p) { while (p > line && p[-1] == ' ') --p; *p = '\0'; len = p - line; } else { line[59] = '\0'; } } if (len > 45) { /* YY/MM/DD HH:MM */ struct tm tm; unsigned long v; char * p; pimg->datestamp = my_strdup(line + 45); p = pimg->datestamp; v = strtoul(p, &p, 10); if (v <= 50) { /* In the absence of a spec for cmap files, assume <= 50 means 21st * century. */ v += 2000; } else if (v < 200) { /* Map 100-199 to 21st century. */ v += 1900; } if (v == ULONG_MAX || *p++ != '/') goto bad_cmap_date; tm.tm_year = v - 1900; v = strtoul(p, &p, 10); if (v < 1 || v > 12 || *p++ != '/') goto bad_cmap_date; tm.tm_mon = v - 1; v = strtoul(p, &p, 10); if (v < 1 || v > 31 || *p++ != ' ') goto bad_cmap_date; tm.tm_mday = v; v = strtoul(p, &p, 10); if (v >= 24 || *p++ != ':') goto bad_cmap_date; tm.tm_hour = v; v = strtoul(p, &p, 10); if (v >= 60) goto bad_cmap_date; tm.tm_min = v; if (*p == ':') { v = strtoul(p + 1, &p, 10); if (v > 60) goto bad_cmap_date; tm.tm_sec = v; } else { tm.tm_sec = 0; } tm.tm_isdst = 0; /* We have no indication of what timezone this timestamp is in. It's * probably local time for whoever processed the data, so just assume * UTC, which is at least fairly central in the possibilities. */ pimg->datestamp_numeric = mktime_with_tz(&tm, ""); } else { pimg->datestamp = my_strdup(TIMENA); } bad_cmap_date: if (strncmp(line, " Cave Survey Data Processed by CMAP ", LITLEN(" Cave Survey Data Processed by CMAP ")) == 0) { len = 0; } else { if (len > 45) { line[45] = '\0'; len = 45; } while (len > 2 && line[len - 1] == ' ') --len; if (len > 2) { line[len] = '\0'; pimg->title = my_strdup(line + 2); } } if (len <= 2) pimg->title = baseleaf_from_fnm(fnm); osfree(line); if (!pimg->datestamp || !pimg->title) { img_errno = IMG_OUTOFMEMORY; goto error; } line = getline_alloc(pimg->fh); if (!line) { img_errno = IMG_OUTOFMEMORY; goto error; } if (line[0] != ' ' || (line[1] != 'S' && line[1] != 'O')) { img_errno = IMG_BADFORMAT; goto error; } if (line[1] == 'S') { pimg->version = VERSION_CMAP_STATION; } else { pimg->version = VERSION_CMAP_SHOT; } osfree(line); line = getline_alloc(pimg->fh); if (!line) { img_errno = IMG_OUTOFMEMORY; goto error; } if (line[0] != ' ' || line[1] != '-') { img_errno = IMG_BADFORMAT; goto error; } osfree(line); pimg->start = ftell(pimg->fh); return pimg; } if (fread(buf, LITLEN(FILEID) + 1, 1, pimg->fh) != 1 || memcmp(buf, FILEID"\n", LITLEN(FILEID) + 1) != 0) { if (fread(buf + LITLEN(FILEID) + 1, 8, 1, pimg->fh) == 1 && memcmp(buf, FILEID"\r\nv0.01\r\n", LITLEN(FILEID) + 9) == 0) { /* v0 3d file with DOS EOLs */ pimg->version = 0; goto v03d; } rewind(pimg->fh); if (buf[1] == ' ') { if (buf[0] == ' ') { /* Looks like a CMAP .xyz file ... */ goto xyz_file; } else if (strchr("ZSNF", buf[0])) { /* Looks like a Compass .plt file ... */ /* Almost certainly it'll start "Z " */ goto plt_file; } } if (buf[0] == '(') { /* Looks like a Survex .pos file ... */ goto pos_file; } img_errno = IMG_BADFORMAT; goto error; } /* check file format version */ ch = GETC(pimg->fh); pimg->version = 0; if (tolower(ch) == 'b') { /* binary file iff B/b prefix */ pimg->version = 1; ch = GETC(pimg->fh); } if (ch != 'v') { img_errno = IMG_BADFORMAT; goto error; } ch = GETC(pimg->fh); if (ch == '0') { if (fread(buf, 4, 1, pimg->fh) != 1 || memcmp(buf, ".01\n", 4) != 0) { img_errno = IMG_BADFORMAT; goto error; } /* nothing special to do */ } else if (pimg->version == 0) { if (ch < '2' || ch > '0' + IMG_VERSION_MAX || GETC(pimg->fh) != '\n') { img_errno = IMG_TOONEW; goto error; } pimg->version = ch - '0'; } else { img_errno = IMG_BADFORMAT; goto error; } v03d: if (!pimg->title) pimg->title = getline_alloc(pimg->fh); else osfree(getline_alloc(pimg->fh)); pimg->datestamp = getline_alloc(pimg->fh); if (!pimg->title || !pimg->datestamp) { img_errno = IMG_OUTOFMEMORY; error: osfree(pimg->title); osfree(pimg->datestamp); osfree(pimg->filename_opened); fclose(pimg->fh); osfree(pimg); return NULL; } if (pimg->version >= 8) { int flags = GETC(pimg->fh); if (flags & img_FFLAG_EXTENDED) pimg->is_extended_elevation = 1; } else { len = strlen(pimg->title); if (len > 11 && strcmp(pimg->title + len - 11, " (extended)") == 0) { pimg->title[len - 11] = '\0'; pimg->is_extended_elevation = 1; } } if (pimg->datestamp[0] == '@') { unsigned long v; char * p; errno = 0; v = strtoul(pimg->datestamp + 1, &p, 10); if (errno == 0 && *p == '\0') pimg->datestamp_numeric = v; /* FIXME: We're assuming here that the C time_t epoch is 1970, which is * true for Unix-like systems, Mac OS X and Windows, but isn't guaranteed * by ISO C. */ } else { /* %a,%Y.%m.%d %H:%M:%S %Z */ struct tm tm; unsigned long v; char * p = pimg->datestamp; while (isalpha((unsigned char)*p)) ++p; if (*p == ',') ++p; while (isspace((unsigned char)*p)) ++p; v = strtoul(p, &p, 10); if (v == ULONG_MAX || *p++ != '.') goto bad_3d_date; tm.tm_year = v - 1900; v = strtoul(p, &p, 10); if (v < 1 || v > 12 || *p++ != '.') goto bad_3d_date; tm.tm_mon = v - 1; v = strtoul(p, &p, 10); if (v < 1 || v > 31 || *p++ != ' ') goto bad_3d_date; tm.tm_mday = v; v = strtoul(p, &p, 10); if (v >= 24 || *p++ != ':') goto bad_3d_date; tm.tm_hour = v; v = strtoul(p, &p, 10); if (v >= 60 || *p++ != ':') goto bad_3d_date; tm.tm_min = v; v = strtoul(p, &p, 10); if (v > 60) goto bad_3d_date; tm.tm_sec = v; tm.tm_isdst = 0; while (isspace((unsigned char)*p)) ++p; /* p now points to the timezone string. * * However, it's likely to be a string like "BST", and such strings can * be ambiguous (BST could be UTC+1 or UTC+6), so it is impossible to * reliably convert in all cases. Just pass what we have to tzset() - if * it doesn't handle it, UTC will be used. */ pimg->datestamp_numeric = mktime_with_tz(&tm, p); } bad_3d_date: pimg->start = ftell(pimg->fh); return pimg; } int img_rewind(img *pimg) { if (!pimg->fRead) { img_errno = IMG_WRITEERROR; return 0; } if (fseek(pimg->fh, pimg->start, SEEK_SET) != 0) { img_errno = IMG_READERROR; return 0; } clearerr(pimg->fh); /* [VERSION_SURVEX_POS] already skipped heading line, or there wasn't one * [version 0] not in the middle of a 'LINE' command * [version >= 3] not in the middle of turning a LINE into a MOVE */ pimg->pending = 0; img_errno = IMG_NONE; /* for version >= 3 we use label_buf to store the prefix for reuse */ /* for VERSION_COMPASS_PLT, 0 value indicates we haven't entered a survey * yet */ /* for VERSION_CMAP_SHOT, we store the last station here to detect whether * we MOVE or LINE */ pimg->label_len = 0; pimg->style = img_STYLE_UNKNOWN; return 1; } img * img_open_write(const char *fnm, char *title, int flags) { time_t tm; img *pimg; if (fDirectory(fnm)) { img_errno = IMG_DIRECTORY; return NULL; } pimg = osnew(img); if (pimg == NULL) { img_errno = IMG_OUTOFMEMORY; return NULL; } pimg->buf_len = 257; pimg->label_buf = (char *)xosmalloc(pimg->buf_len); if (!pimg->label_buf) { osfree(pimg); img_errno = IMG_OUTOFMEMORY; return NULL; } pimg->fh = fopen(fnm, "wb"); if (!pimg->fh) { osfree(pimg->label_buf); osfree(pimg); img_errno = IMG_CANTOPENOUT; return NULL; } pimg->filename_opened = NULL; /* Output image file header */ fputs("Survex 3D Image File\n", pimg->fh); /* file identifier string */ if (img_output_version < 2) { pimg->version = 1; fputs("Bv0.01\n", pimg->fh); /* binary file format version number */ } else { pimg->version = (img_output_version > IMG_VERSION_MAX) ? IMG_VERSION_MAX : img_output_version; fprintf(pimg->fh, "v%d\n", pimg->version); /* file format version no. */ } fputs(title, pimg->fh); if (pimg->version < 8 && (flags & img_FFLAG_EXTENDED)) { /* Older format versions append " (extended)" to the title to mark * extended elevations. */ size_t len = strlen(title); if (len < 11 || strcmp(title + len - 11, " (extended)") != 0) fputs(" (extended)", pimg->fh); } PUTC('\n', pimg->fh); tm = time(NULL); if (tm == (time_t)-1) { fputsnl(TIMENA, pimg->fh); } else if (pimg->version <= 7) { char date[256]; /* output current date and time in format specified */ strftime(date, 256, TIMEFMT, localtime(&tm)); fputsnl(date, pimg->fh); } else { fprintf(pimg->fh, "@%ld\n", (long)tm); } if (pimg->version >= 8) { /* Clear bit one in case anyone has been passing true for fBinary. */ flags &=~ 1; PUTC(flags, pimg->fh); } #if 0 if (img_output_version >= 5) { static const unsigned char codelengths[32] = { 4, 8, 8, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; fwrite(codelengths, 32, 1, pimg->fh); } #endif pimg->fRead = 0; /* writing to this file */ img_errno = IMG_NONE; /* for version >= 3 we use label_buf to store the prefix for reuse */ pimg->label_buf[0] = '\0'; pimg->label_len = 0; #if IMG_API_VERSION == 0 pimg->date1 = pimg->date2 = 0; pimg->olddate1 = pimg->olddate2 = 0; #else /* IMG_API_VERSION == 1 */ pimg->days1 = pimg->days2 = -1; pimg->olddays1 = pimg->olddays2 = -1; #endif pimg->style = pimg->oldstyle = img_STYLE_UNKNOWN; pimg->l = pimg->r = pimg->u = pimg->d = -1.0; pimg->n_legs = 0; pimg->length = 0.0; pimg->E = pimg->H = pimg->V = 0.0; /* Don't check for write errors now - let img_close() report them... */ return pimg; } static void read_xyz_station_coords(img_point *pt, const char *line) { char num[12]; memcpy(num, line + 6, 9); num[9] = '\0'; pt->x = atof(num) / METRES_PER_FOOT; memcpy(num, line + 15, 9); pt->y = atof(num) / METRES_PER_FOOT; memcpy(num, line + 24, 8); num[8] = '\0'; pt->z = atof(num) / METRES_PER_FOOT; } static void read_xyz_shot_coords(img_point *pt, const char *line) { char num[12]; memcpy(num, line + 40, 10); num[10] = '\0'; pt->x = atof(num) / METRES_PER_FOOT; memcpy(num, line + 50, 10); pt->y = atof(num) / METRES_PER_FOOT; memcpy(num, line + 60, 9); num[9] = '\0'; pt->z = atof(num) / METRES_PER_FOOT; } static void subtract_xyz_shot_deltas(img_point *pt, const char *line) { char num[12]; memcpy(num, line + 15, 9); num[9] = '\0'; pt->x -= atof(num) / METRES_PER_FOOT; memcpy(num, line + 24, 8); num[8] = '\0'; pt->y -= atof(num) / METRES_PER_FOOT; memcpy(num, line + 32, 8); pt->z -= atof(num) / METRES_PER_FOOT; } static int read_coord(FILE *fh, img_point *pt) { SVX_ASSERT(fh); SVX_ASSERT(pt); pt->x = get32(fh) / 100.0; pt->y = get32(fh) / 100.0; pt->z = get32(fh) / 100.0; if (ferror(fh) || feof(fh)) { img_errno = feof(fh) ? IMG_BADFORMAT : IMG_READERROR; return 0; } return 1; } static int skip_coord(FILE *fh) { return (fseek(fh, 12, SEEK_CUR) == 0); } static int read_v3label(img *pimg) { char *q; long len = GETC(pimg->fh); if (len == EOF) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } if (len == 0xfe) { len += get16(pimg->fh); if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } } else if (len == 0xff) { len = get32(pimg->fh); if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } if (feof(pimg->fh) || len < 0xfe + 0xffff) { img_errno = IMG_BADFORMAT; return img_BAD; } } if (!check_label_space(pimg, pimg->label_len + len + 1)) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } q = pimg->label_buf + pimg->label_len; pimg->label_len += len; if (len && fread(q, len, 1, pimg->fh) != 1) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } q[len] = '\0'; return 0; } static int read_v8label(img *pimg, int common_flag, size_t common_val) { char *q; size_t del, add; if (common_flag) { if (common_val == 0) return 0; add = del = common_val; } else { int ch = GETC(pimg->fh); if (ch == EOF) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } if (ch != 0x00) { del = ch >> 4; add = ch & 0x0f; } else { ch = GETC(pimg->fh); if (ch == EOF) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } if (ch != 0xff) { del = ch; } else { del = get32(pimg->fh); if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } } ch = GETC(pimg->fh); if (ch == EOF) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } if (ch != 0xff) { add = ch; } else { add = get32(pimg->fh); if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } } } if (add > del && !check_label_space(pimg, pimg->label_len + add - del + 1)) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } } if (del > pimg->label_len) { img_errno = IMG_BADFORMAT; return img_BAD; } pimg->label_len -= del; q = pimg->label_buf + pimg->label_len; pimg->label_len += add; if (add && fread(q, add, 1, pimg->fh) != 1) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } q[add] = '\0'; return 0; } static int img_read_item_new(img *pimg, img_point *p); static int img_read_item_v3to7(img *pimg, img_point *p); static int img_read_item_ancient(img *pimg, img_point *p); static int img_read_item_ascii_wrapper(img *pimg, img_point *p); static int img_read_item_ascii(img *pimg, img_point *p); int img_read_item(img *pimg, img_point *p) { pimg->flags = 0; if (pimg->version >= 8) { return img_read_item_new(pimg, p); } else if (pimg->version >= 3) { return img_read_item_v3to7(pimg, p); } else if (pimg->version >= 1) { return img_read_item_ancient(pimg, p); } else { return img_read_item_ascii_wrapper(pimg, p); } } static int img_read_item_new(img *pimg, img_point *p) { int result; int opt; pimg->l = pimg->r = pimg->u = pimg->d = -1.0; if (pimg->pending >= 0x40) { if (pimg->pending == 256) { pimg->pending = 0; return img_XSECT_END; } *p = pimg->mv; pimg->flags = (int)(pimg->pending) & 0x3f; pimg->pending = 0; return img_LINE; } again3: /* label to goto if we get a prefix, date, or lrud */ pimg->label = pimg->label_buf; opt = GETC(pimg->fh); if (opt == EOF) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } if (opt >> 6 == 0) { if (opt <= 4) { if (opt == 0 && pimg->style == 0) return img_STOP; /* end of data marker */ /* STYLE */ pimg->style = opt; goto again3; } if (opt >= 0x10) { switch (opt) { case 0x10: { /* No date info */ #if IMG_API_VERSION == 0 pimg->date1 = pimg->date2 = 0; #else /* IMG_API_VERSION == 1 */ pimg->days1 = pimg->days2 = -1; #endif break; } case 0x11: { /* Single date */ int days1 = (int)getu16(pimg->fh); #if IMG_API_VERSION == 0 pimg->date2 = pimg->date1 = (days1 - 25567) * 86400; #else /* IMG_API_VERSION == 1 */ pimg->days2 = pimg->days1 = days1; #endif break; } case 0x12: { /* Date range (short) */ int days1 = (int)getu16(pimg->fh); int days2 = days1 + GETC(pimg->fh) + 1; #if IMG_API_VERSION == 0 pimg->date1 = (days1 - 25567) * 86400; pimg->date2 = (days2 - 25567) * 86400; #else /* IMG_API_VERSION == 1 */ pimg->days1 = days1; pimg->days2 = days2; #endif break; } case 0x13: { /* Date range (long) */ int days1 = (int)getu16(pimg->fh); int days2 = (int)getu16(pimg->fh); #if IMG_API_VERSION == 0 pimg->date1 = (days1 - 25567) * 86400; pimg->date2 = (days2 - 25567) * 86400; #else /* IMG_API_VERSION == 1 */ pimg->days1 = days1; pimg->days2 = days2; #endif break; } case 0x1f: /* Error info */ pimg->n_legs = get32(pimg->fh); pimg->length = get32(pimg->fh) / 100.0; pimg->E = get32(pimg->fh) / 100.0; pimg->H = get32(pimg->fh) / 100.0; pimg->V = get32(pimg->fh) / 100.0; return img_ERROR_INFO; case 0x30: case 0x31: /* LRUD */ case 0x32: case 0x33: /* Big LRUD! */ if (read_v8label(pimg, 0, 0) == img_BAD) return img_BAD; pimg->flags = (int)opt & 0x01; if (opt < 0x32) { pimg->l = get16(pimg->fh) / 100.0; pimg->r = get16(pimg->fh) / 100.0; pimg->u = get16(pimg->fh) / 100.0; pimg->d = get16(pimg->fh) / 100.0; } else { pimg->l = get32(pimg->fh) / 100.0; pimg->r = get32(pimg->fh) / 100.0; pimg->u = get32(pimg->fh) / 100.0; pimg->d = get32(pimg->fh) / 100.0; } if (pimg->survey_len) { size_t l = pimg->survey_len; const char *s = pimg->label_buf; if (strncmp(pimg->survey, s, l + 1) != 0) { return img_XSECT_END; } pimg->label += l; /* skip the dot if there */ if (*pimg->label) pimg->label++; } /* If this is the last cross-section in this passage, set * pending so we return img_XSECT_END next time. */ if (pimg->flags & 0x01) { pimg->pending = 256; pimg->flags &= ~0x01; } return img_XSECT; default: /* 0x25 - 0x2f and 0x34 - 0x3f are currently unallocated. */ img_errno = IMG_BADFORMAT; return img_BAD; } goto again3; } if (opt != 15) { /* 1-14 and 16-31 reserved */ img_errno = IMG_BADFORMAT; return img_BAD; } result = img_MOVE; } else if (opt >= 0x80) { if (read_v8label(pimg, 0, 0) == img_BAD) return img_BAD; result = img_LABEL; if (pimg->survey_len) { size_t l = pimg->survey_len; const char *s = pimg->label_buf; if (strncmp(pimg->survey, s, l + 1) != 0) { if (!skip_coord(pimg->fh)) return img_BAD; pimg->pending = 0; goto again3; } pimg->label += l; /* skip the dot if there */ if (*pimg->label) pimg->label++; } pimg->flags = (int)opt & 0x7f; } else if ((opt >> 6) == 1) { if (read_v8label(pimg, opt & 0x20, 0) == img_BAD) return img_BAD; result = img_LINE; if (pimg->survey_len) { size_t l = pimg->survey_len; const char *s = pimg->label_buf; if (strncmp(pimg->survey, s, l) != 0 || !(s[l] == '.' || s[l] == '\0')) { if (!read_coord(pimg->fh, &(pimg->mv))) return img_BAD; pimg->pending = 15; goto again3; } pimg->label += l; /* skip the dot if there */ if (*pimg->label) pimg->label++; } if (pimg->pending) { *p = pimg->mv; if (!read_coord(pimg->fh, &(pimg->mv))) return img_BAD; pimg->pending = opt; return img_MOVE; } pimg->flags = (int)opt & 0x1f; } else { img_errno = IMG_BADFORMAT; return img_BAD; } if (!read_coord(pimg->fh, p)) return img_BAD; pimg->pending = 0; return result; } static int img_read_item_v3to7(img *pimg, img_point *p) { int result; int opt; pimg->l = pimg->r = pimg->u = pimg->d = -1.0; if (pimg->pending == 256) { pimg->pending = 0; return img_XSECT_END; } if (pimg->pending >= 0x80) { *p = pimg->mv; pimg->flags = (int)(pimg->pending) & 0x3f; pimg->pending = 0; return img_LINE; } again3: /* label to goto if we get a prefix, date, or lrud */ pimg->label = pimg->label_buf; opt = GETC(pimg->fh); if (opt == EOF) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } switch (opt >> 6) { case 0: if (opt == 0) { if (!pimg->label_len) return img_STOP; /* end of data marker */ pimg->label_len = 0; goto again3; } if (opt < 15) { /* 1-14 mean trim that many levels from current prefix */ int c; if (pimg->label_len <= 17) { /* zero prefix using "0" */ img_errno = IMG_BADFORMAT; return img_BAD; } /* extra - 1 because label_len points to one past the end */ c = pimg->label_len - 17 - 1; while (pimg->label_buf[c] != '.' || --opt > 0) { if (--c < 0) { /* zero prefix using "0" */ img_errno = IMG_BADFORMAT; return img_BAD; } } c++; pimg->label_len = c; goto again3; } if (opt == 15) { result = img_MOVE; break; } if (opt >= 0x20) { switch (opt) { case 0x20: /* Single date */ if (pimg->version < 7) { int date1 = get32(pimg->fh); #if IMG_API_VERSION == 0 pimg->date2 = pimg->date1 = date1; #else /* IMG_API_VERSION == 1 */ if (date1 != 0) { pimg->days2 = pimg->days1 = (date1 / 86400) + 25567; } else { pimg->days2 = pimg->days1 = -1; } #endif } else { int days1 = (int)getu16(pimg->fh); #if IMG_API_VERSION == 0 pimg->date2 = pimg->date1 = (days1 - 25567) * 86400; #else /* IMG_API_VERSION == 1 */ pimg->days2 = pimg->days1 = days1; #endif } break; case 0x21: /* Date range (short for v7+) */ if (pimg->version < 7) { INT32_T date1 = get32(pimg->fh); INT32_T date2 = get32(pimg->fh); #if IMG_API_VERSION == 0 pimg->date1 = date1; pimg->date2 = date2; #else /* IMG_API_VERSION == 1 */ pimg->days1 = (date1 / 86400) + 25567; pimg->days2 = (date2 / 86400) + 25567; #endif } else { int days1 = (int)getu16(pimg->fh); int days2 = days1 + GETC(pimg->fh) + 1; #if IMG_API_VERSION == 0 pimg->date1 = (days1 - 25567) * 86400; pimg->date2 = (days2 - 25567) * 86400; #else /* IMG_API_VERSION == 1 */ pimg->days1 = days1; pimg->days2 = days2; #endif } break; case 0x22: /* Error info */ pimg->n_legs = get32(pimg->fh); pimg->length = get32(pimg->fh) / 100.0; pimg->E = get32(pimg->fh) / 100.0; pimg->H = get32(pimg->fh) / 100.0; pimg->V = get32(pimg->fh) / 100.0; if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } return img_ERROR_INFO; case 0x23: { /* v7+: Date range (long) */ if (pimg->version < 7) { img_errno = IMG_BADFORMAT; return img_BAD; } int days1 = (int)getu16(pimg->fh); int days2 = (int)getu16(pimg->fh); if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } #if IMG_API_VERSION == 0 pimg->date1 = (days1 - 25567) * 86400; pimg->date2 = (days2 - 25567) * 86400; #else /* IMG_API_VERSION == 1 */ pimg->days1 = days1; pimg->days2 = days2; #endif break; } case 0x24: { /* v7+: No date info */ #if IMG_API_VERSION == 0 pimg->date1 = pimg->date2 = 0; #else /* IMG_API_VERSION == 1 */ pimg->days1 = pimg->days2 = -1; #endif break; } case 0x30: case 0x31: /* LRUD */ case 0x32: case 0x33: /* Big LRUD! */ if (read_v3label(pimg) == img_BAD) return img_BAD; pimg->flags = (int)opt & 0x01; if (opt < 0x32) { pimg->l = get16(pimg->fh) / 100.0; pimg->r = get16(pimg->fh) / 100.0; pimg->u = get16(pimg->fh) / 100.0; pimg->d = get16(pimg->fh) / 100.0; } else { pimg->l = get32(pimg->fh) / 100.0; pimg->r = get32(pimg->fh) / 100.0; pimg->u = get32(pimg->fh) / 100.0; pimg->d = get32(pimg->fh) / 100.0; } if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } if (pimg->survey_len) { size_t l = pimg->survey_len; const char *s = pimg->label_buf; if (strncmp(pimg->survey, s, l + 1) != 0) { return img_XSECT_END; } pimg->label += l; /* skip the dot if there */ if (*pimg->label) pimg->label++; } /* If this is the last cross-section in this passage, set * pending so we return img_XSECT_END next time. */ if (pimg->flags & 0x01) { pimg->pending = 256; pimg->flags &= ~0x01; } return img_XSECT; default: /* 0x25 - 0x2f and 0x34 - 0x3f are currently unallocated. */ img_errno = IMG_BADFORMAT; return img_BAD; } if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } goto again3; } /* 16-31 mean remove (n - 15) characters from the prefix */ /* zero prefix using 0 */ if (pimg->label_len <= (size_t)(opt - 15)) { img_errno = IMG_BADFORMAT; return img_BAD; } pimg->label_len -= (opt - 15); goto again3; case 1: if (read_v3label(pimg) == img_BAD) return img_BAD; result = img_LABEL; if (pimg->survey_len) { size_t l = pimg->survey_len; const char *s = pimg->label_buf; if (strncmp(pimg->survey, s, l + 1) != 0) { if (!skip_coord(pimg->fh)) return img_BAD; pimg->pending = 0; goto again3; } pimg->label += l; /* skip the dot if there */ if (*pimg->label) pimg->label++; } pimg->flags = (int)opt & 0x3f; break; case 2: if (read_v3label(pimg) == img_BAD) return img_BAD; result = img_LINE; if (pimg->survey_len) { size_t l = pimg->survey_len; const char *s = pimg->label_buf; if (strncmp(pimg->survey, s, l) != 0 || !(s[l] == '.' || s[l] == '\0')) { if (!read_coord(pimg->fh, &(pimg->mv))) return img_BAD; pimg->pending = 15; goto again3; } pimg->label += l; /* skip the dot if there */ if (*pimg->label) pimg->label++; } if (pimg->pending) { *p = pimg->mv; if (!read_coord(pimg->fh, &(pimg->mv))) return img_BAD; pimg->pending = opt; return img_MOVE; } pimg->flags = (int)opt & 0x3f; break; default: img_errno = IMG_BADFORMAT; return img_BAD; } if (!read_coord(pimg->fh, p)) return img_BAD; pimg->pending = 0; return result; } static int img_read_item_ancient(img *pimg, img_point *p) { int result; static long opt_lookahead = 0; static img_point pt = { 0.0, 0.0, 0.0 }; long opt; again: /* label to goto if we get a cross */ pimg->label = pimg->label_buf; pimg->label[0] = '\0'; if (pimg->version == 1) { if (opt_lookahead) { opt = opt_lookahead; opt_lookahead = 0; } else { opt = get32(pimg->fh); } } else { opt = GETC(pimg->fh); } if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } switch (opt) { case -1: case 0: return img_STOP; /* end of data marker */ case 1: /* skip coordinates */ if (!skip_coord(pimg->fh)) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } goto again; case 2: case 3: { size_t len; result = img_LABEL; if (!fgets(pimg->label_buf, pimg->buf_len, pimg->fh)) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } if (pimg->label[0] == '\\') pimg->label++; len = strlen(pimg->label); if (len == 0 || pimg->label[len - 1] != '\n') { img_errno = IMG_BADFORMAT; return img_BAD; } /* Ignore empty labels in some .3d files (caused by a bug) */ if (len == 1) goto again; pimg->label[len - 1] = '\0'; pimg->flags = img_SFLAG_UNDERGROUND; /* no flags given... */ if (opt == 2) goto done; break; } case 6: case 7: { long len; result = img_LABEL; if (opt == 7) pimg->flags = GETC(pimg->fh); else pimg->flags = img_SFLAG_UNDERGROUND; /* no flags given... */ len = get32(pimg->fh); if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } /* Ignore empty labels in some .3d files (caused by a bug) */ if (len == 0) goto again; if (!check_label_space(pimg, len + 1)) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } if (fread(pimg->label_buf, len, 1, pimg->fh) != 1) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } pimg->label_buf[len] = '\0'; break; } case 4: result = img_MOVE; break; case 5: result = img_LINE; break; default: switch ((int)opt & 0xc0) { case 0x80: pimg->flags = (int)opt & 0x3f; result = img_LINE; break; case 0x40: { char *q; pimg->flags = (int)opt & 0x3f; result = img_LABEL; if (!fgets(pimg->label_buf, pimg->buf_len, pimg->fh)) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } q = pimg->label_buf + strlen(pimg->label_buf) - 1; /* Ignore empty-labels in some .3d files (caused by a bug) */ if (q == pimg->label_buf) goto again; if (*q != '\n') { img_errno = IMG_BADFORMAT; return img_BAD; } *q = '\0'; break; } default: img_errno = IMG_BADFORMAT; return img_BAD; } break; } if (!read_coord(pimg->fh, &pt)) return img_BAD; if (result == img_LABEL && pimg->survey_len) { if (strncmp(pimg->label, pimg->survey, pimg->survey_len + 1) != 0) goto again; pimg->label += pimg->survey_len + 1; } done: *p = pt; if (result == img_MOVE && pimg->version == 1) { /* peek at next code and see if it's an old-style label */ opt_lookahead = get32(pimg->fh); if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } if (opt_lookahead == 2) return img_read_item_ancient(pimg, p); } return result; } static int img_read_item_ascii_wrapper(img *pimg, img_point *p) { /* We need to set the default locale for fscanf() to work on * numbers with "." as decimal point. */ int result; char * current_locale = my_strdup(setlocale(LC_NUMERIC, NULL)); setlocale(LC_NUMERIC, "C"); result = img_read_item_ascii(pimg, p); setlocale(LC_NUMERIC, current_locale); free(current_locale); return result; } /* Handle all ASCII formats. */ static int img_read_item_ascii(img *pimg, img_point *p) { int result; pimg->label = pimg->label_buf; if (pimg->version == 0) { ascii_again: pimg->label[0] = '\0'; if (feof(pimg->fh)) return img_STOP; if (pimg->pending) { pimg->pending = 0; result = img_LINE; } else { char cmd[7]; /* Stop if nothing found */ if (fscanf(pimg->fh, "%6s", cmd) < 1) return img_STOP; if (strcmp(cmd, "move") == 0) result = img_MOVE; else if (strcmp(cmd, "draw") == 0) result = img_LINE; else if (strcmp(cmd, "line") == 0) { /* set flag to indicate to process second triplet as LINE */ pimg->pending = 1; result = img_MOVE; } else if (strcmp(cmd, "cross") == 0) { if (fscanf(pimg->fh, "%lf%lf%lf", &p->x, &p->y, &p->z) < 3) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } goto ascii_again; } else if (strcmp(cmd, "name") == 0) { size_t off = 0; int ch = GETC(pimg->fh); if (ch == ' ') ch = GETC(pimg->fh); while (ch != ' ') { if (ch == '\n' || ch == EOF) { img_errno = ferror(pimg->fh) ? IMG_READERROR : IMG_BADFORMAT; return img_BAD; } if (off == pimg->buf_len) { if (!check_label_space(pimg, pimg->buf_len * 2)) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } } pimg->label_buf[off++] = ch; ch = GETC(pimg->fh); } pimg->label_buf[off] = '\0'; pimg->label = pimg->label_buf; if (pimg->label[0] == '\\') pimg->label++; pimg->flags = img_SFLAG_UNDERGROUND; /* default flags */ result = img_LABEL; } else { img_errno = IMG_BADFORMAT; return img_BAD; /* unknown keyword */ } } if (fscanf(pimg->fh, "%lf%lf%lf", &p->x, &p->y, &p->z) < 3) { img_errno = ferror(pimg->fh) ? IMG_READERROR : IMG_BADFORMAT; return img_BAD; } if (result == img_LABEL && pimg->survey_len) { if (strncmp(pimg->label, pimg->survey, pimg->survey_len + 1) != 0) goto ascii_again; pimg->label += pimg->survey_len + 1; } return result; } else if (pimg->version == VERSION_SURVEX_POS) { /* Survex .pos file */ int ch; size_t off; pimg->flags = img_SFLAG_UNDERGROUND; /* default flags */ againpos: off = 0; while (fscanf(pimg->fh, "(%lf,%lf,%lf )", &p->x, &p->y, &p->z) != 3) { if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } if (feof(pimg->fh)) return img_STOP; if (pimg->pending) { img_errno = IMG_BADFORMAT; return img_BAD; } pimg->pending = 1; /* ignore rest of line */ do { ch = GETC(pimg->fh); } while (ch != '\n' && ch != '\r' && ch != EOF); } pimg->label_buf[0] = '\0'; do { ch = GETC(pimg->fh); } while (ch == ' ' || ch == '\t'); if (ch == '\n' || ch == EOF) { /* If there's no label, set img_SFLAG_ANON. */ pimg->flags |= img_SFLAG_ANON; return img_LABEL; } pimg->label_buf[0] = ch; off = 1; while (!feof(pimg->fh)) { if (!fgets(pimg->label_buf + off, pimg->buf_len - off, pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } off += strlen(pimg->label_buf + off); if (off && pimg->label_buf[off - 1] == '\n') { pimg->label_buf[off - 1] = '\0'; break; } if (!check_label_space(pimg, pimg->buf_len * 2)) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } } pimg->label = pimg->label_buf; if (pimg->label[0] == '\\') pimg->label++; if (pimg->survey_len) { size_t l = pimg->survey_len + 1; if (strncmp(pimg->survey, pimg->label, l) != 0) goto againpos; pimg->label += l; } return img_LABEL; } else if (pimg->version == VERSION_COMPASS_PLT) { /* Compass .plt file */ if (pimg->pending > 0) { /* -1 signals we've entered the first survey we want to * read, and need to fudge lots if the first action is 'D'... */ /* pending MOVE or LINE */ int r = pimg->pending - 4; pimg->pending = 0; pimg->flags = 0; pimg->label[pimg->label_len] = '\0'; return r; } while (1) { char *line; char *q; size_t len = 0; int ch = GETC(pimg->fh); switch (ch) { case '\x1a': case EOF: /* Don't insist on ^Z at end of file */ return img_STOP; case 'X': case 'F': case 'S': /* bounding boX (marks end of survey), Feature survey, or * new Section - skip to next survey */ if (pimg->survey) return img_STOP; skip_to_N: while (1) { do { ch = GETC(pimg->fh); } while (ch != '\n' && ch != '\r' && ch != EOF); while (ch == '\n' || ch == '\r') ch = GETC(pimg->fh); if (ch == 'N') break; if (ch == '\x1a' || ch == EOF) return img_STOP; } /* FALLTHRU */ case 'N': line = getline_alloc(pimg->fh); if (!line) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } while (line[len] > 32) ++len; if (pimg->label_len == 0) pimg->pending = -1; if (!check_label_space(pimg, len + 1)) { osfree(line); img_errno = IMG_OUTOFMEMORY; return img_BAD; } pimg->label_len = len; pimg->label = pimg->label_buf; memcpy(pimg->label, line, len); pimg->label[len] = '\0'; osfree(line); break; case 'M': case 'D': { /* Move or Draw */ long fpos = -1; if (pimg->survey && pimg->label_len == 0) { /* We're only holding onto this line in case the first line * of the 'N' is a 'D', so skip it for now... */ goto skip_to_N; } if (ch == 'D' && pimg->pending == -1) { if (pimg->survey) { fpos = ftell(pimg->fh) - 1; fseek(pimg->fh, pimg->start, SEEK_SET); ch = GETC(pimg->fh); pimg->pending = 0; } else { /* If a file actually has a 'D' before any 'M', then * pretend the 'D' is an 'M' - one of the examples * in the docs was like this! */ ch = 'M'; } } line = getline_alloc(pimg->fh); if (!line) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } /* Compass stores coordinates as North, East, Up = (y,x,z)! */ if (sscanf(line, "%lf%lf%lf", &p->y, &p->x, &p->z) != 3) { osfree(line); if (ferror(pimg->fh)) { img_errno = IMG_READERROR; } else { img_errno = IMG_BADFORMAT; } return img_BAD; } p->x *= METRES_PER_FOOT; p->y *= METRES_PER_FOOT; p->z *= METRES_PER_FOOT; q = strchr(line, 'S'); if (!q) { osfree(line); img_errno = IMG_BADFORMAT; return img_BAD; } ++q; len = 0; while (q[len] > ' ') ++len; q[len] = '\0'; len += 2; /* ' ' and '\0' */ if (!check_label_space(pimg, pimg->label_len + len)) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } pimg->label = pimg->label_buf; if (pimg->label_len) { pimg->label[pimg->label_len] = ' '; memcpy(pimg->label + pimg->label_len + 1, q, len - 1); } else { memcpy(pimg->label, q, len - 1); } q += len - 1; /* Now read LRUD. Technically, this is optional but virtually * all PLT files have it (with dummy negative values if no LRUD * was measured) and some versions of Compass can't read PLT * files without it! */ while (*q && *q <= ' ') q++; if (*q == 'P') { if (sscanf(q + 1, "%lf%lf%lf%lf", &pimg->l, &pimg->r, &pimg->u, &pimg->d) != 4) { osfree(line); if (ferror(pimg->fh)) { img_errno = IMG_READERROR; } else { img_errno = IMG_BADFORMAT; } return img_BAD; } pimg->l *= METRES_PER_FOOT; pimg->r *= METRES_PER_FOOT; pimg->u *= METRES_PER_FOOT; pimg->d *= METRES_PER_FOOT; } else { pimg->l = pimg->r = pimg->u = pimg->d = -1; } osfree(line); pimg->flags = img_SFLAG_UNDERGROUND; /* default flags */ if (fpos != -1) { fseek(pimg->fh, fpos, SEEK_SET); } else { pimg->pending = (ch == 'M' ? img_MOVE : img_LINE) + 4; } return img_LABEL; } default: img_errno = IMG_BADFORMAT; return img_BAD; } } } else { /* CMAP .xyz file */ char *line = NULL; char *q; size_t len; if (pimg->pending) { /* pending MOVE or LINE or LABEL or STOP */ int r = pimg->pending - 4; /* Set label to empty - don't use "" as we adjust label relative * to label_buf when label_buf is reallocated. */ pimg->label = pimg->label_buf + strlen(pimg->label_buf); pimg->flags = 0; if (r == img_LABEL) { /* nasty magic */ read_xyz_shot_coords(p, pimg->label_buf + 16); subtract_xyz_shot_deltas(p, pimg->label_buf + 16); pimg->pending = img_STOP + 4; return img_MOVE; } pimg->pending = 0; if (r == img_STOP) { /* nasty magic */ read_xyz_shot_coords(p, pimg->label_buf + 16); return img_LINE; } return r; } pimg->label = pimg->label_buf; do { osfree(line); if (feof(pimg->fh)) return img_STOP; line = getline_alloc(pimg->fh); if (!line) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } } while (line[0] == ' ' || line[0] == '\0'); if (line[0] == '\x1a') return img_STOP; len = strlen(line); if (pimg->version == VERSION_CMAP_STATION) { /* station variant */ if (len < 37) { osfree(line); img_errno = IMG_BADFORMAT; return img_BAD; } memcpy(pimg->label, line, 6); q = (char *)memchr(pimg->label, ' ', 6); if (!q) q = pimg->label + 6; *q = '\0'; read_xyz_station_coords(p, line); /* FIXME: look at prev for lines (line + 32, 5) */ /* FIXME: duplicate stations... */ return img_LABEL; } else { /* Shot variant (VERSION_CMAP_SHOT) */ char old[8], new_[8]; if (len < 61) { osfree(line); img_errno = IMG_BADFORMAT; return img_BAD; } memcpy(old, line, 7); q = (char *)memchr(old, ' ', 7); if (!q) q = old + 7; *q = '\0'; memcpy(new_, line + 7, 7); q = (char *)memchr(new_, ' ', 7); if (!q) q = new_ + 7; *q = '\0'; pimg->flags = img_SFLAG_UNDERGROUND; if (strcmp(old, new_) == 0) { pimg->pending = img_MOVE + 4; read_xyz_shot_coords(p, line); strcpy(pimg->label, new_); osfree(line); return img_LABEL; } if (strcmp(old, pimg->label) == 0) { pimg->pending = img_LINE + 4; read_xyz_shot_coords(p, line); strcpy(pimg->label, new_); osfree(line); return img_LABEL; } pimg->pending = img_LABEL + 4; read_xyz_shot_coords(p, line); strcpy(pimg->label, new_); memcpy(pimg->label + 16, line, 70); osfree(line); return img_LABEL; } } } static void write_coord(FILE *fh, double x, double y, double z) { SVX_ASSERT(fh); /* Output in cm */ static INT32_T X_, Y_, Z_; INT32_T X = my_lround(x * 100.0); INT32_T Y = my_lround(y * 100.0); INT32_T Z = my_lround(z * 100.0); X_ -= X; Y_ -= Y; Z_ -= Z; put32(X, fh); put32(Y, fh); put32(Z, fh); X_ = X; Y_ = Y; Z_ = Z; } static int write_v3label(img *pimg, int opt, const char *s) { size_t len, n, dot; /* find length of common prefix */ dot = 0; for (len = 0; s[len] == pimg->label_buf[len] && s[len] != '\0'; len++) { if (s[len] == '.') dot = len + 1; } SVX_ASSERT(len <= pimg->label_len); n = pimg->label_len - len; if (len == 0) { if (pimg->label_len) PUTC(0, pimg->fh); } else if (n <= 16) { if (n) PUTC(n + 15, pimg->fh); } else if (dot == 0) { if (pimg->label_len) PUTC(0, pimg->fh); len = 0; } else { const char *p = pimg->label_buf + dot; n = 1; for (len = pimg->label_len - dot - 17; len; len--) { if (*p++ == '.') n++; } if (n <= 14) { PUTC(n, pimg->fh); len = dot; } else { if (pimg->label_len) PUTC(0, pimg->fh); len = 0; } } n = strlen(s + len); PUTC(opt, pimg->fh); if (n < 0xfe) { PUTC(n, pimg->fh); } else if (n < 0xffff + 0xfe) { PUTC(0xfe, pimg->fh); put16((short)(n - 0xfe), pimg->fh); } else { PUTC(0xff, pimg->fh); put32(n, pimg->fh); } fwrite(s + len, n, 1, pimg->fh); n += len; pimg->label_len = n; if (!check_label_space(pimg, n + 1)) return 0; /* FIXME: distinguish out of memory... */ memcpy(pimg->label_buf + len, s + len, n - len + 1); return !ferror(pimg->fh); } static int write_v8label(img *pimg, int opt, int common_flag, size_t common_val, const char *s) { size_t len, del, add; /* find length of common prefix */ for (len = 0; s[len] == pimg->label_buf[len] && s[len] != '\0'; len++) { } SVX_ASSERT(len <= pimg->label_len); del = pimg->label_len - len; add = strlen(s + len); if (add == common_val && del == common_val) { PUTC(opt | common_flag, pimg->fh); } else { PUTC(opt, pimg->fh); if (del <= 15 && add <= 15 && (del || add)) { PUTC((del << 4) | add, pimg->fh); } else { PUTC(0x00, pimg->fh); if (del < 0xff) { PUTC(del, pimg->fh); } else { PUTC(0xff, pimg->fh); put32(del, pimg->fh); } if (add < 0xff) { PUTC(add, pimg->fh); } else { PUTC(0xff, pimg->fh); put32(add, pimg->fh); } } } if (add) fwrite(s + len, add, 1, pimg->fh); pimg->label_len = len + add; if (add > del && !check_label_space(pimg, pimg->label_len + 1)) return 0; /* FIXME: distinguish out of memory... */ memcpy(pimg->label_buf + len, s + len, add + 1); return !ferror(pimg->fh); } static void img_write_item_date_new(img *pimg) { int same, unset; /* Only write dates when they've changed. */ #if IMG_API_VERSION == 0 if (pimg->date1 == pimg->olddate1 && pimg->date2 == pimg->olddate2) return; same = (pimg->date1 == pimg->date2); unset = (pimg->date1 == 0); #else /* IMG_API_VERSION == 1 */ if (pimg->days1 == pimg->olddays1 && pimg->days2 == pimg->olddays2) return; same = (pimg->days1 == pimg->days2); unset = (pimg->days1 == -1); #endif if (same) { if (unset) { PUTC(0x10, pimg->fh); } else { PUTC(0x11, pimg->fh); #if IMG_API_VERSION == 0 put16(pimg->date1 / 86400 + 25567, pimg->fh); #else /* IMG_API_VERSION == 1 */ put16(pimg->days1, pimg->fh); #endif } } else { #if IMG_API_VERSION == 0 int diff = (pimg->date2 - pimg->date1) / 86400; if (diff > 0 && diff <= 256) { PUTC(0x12, pimg->fh); put16(pimg->date1 / 86400 + 25567, pimg->fh); PUTC(diff - 1, pimg->fh); } else { PUTC(0x13, pimg->fh); put16(pimg->date1 / 86400 + 25567, pimg->fh); put16(pimg->date2 / 86400 + 25567, pimg->fh); } #else /* IMG_API_VERSION == 1 */ int diff = pimg->days2 - pimg->days1; if (diff > 0 && diff <= 256) { PUTC(0x12, pimg->fh); put16(pimg->days1, pimg->fh); PUTC(diff - 1, pimg->fh); } else { PUTC(0x13, pimg->fh); put16(pimg->days1, pimg->fh); put16(pimg->days2, pimg->fh); } #endif } #if IMG_API_VERSION == 0 pimg->olddate1 = pimg->date1; pimg->olddate2 = pimg->date2; #else /* IMG_API_VERSION == 1 */ pimg->olddays1 = pimg->days1; pimg->olddays2 = pimg->days2; #endif } static void img_write_item_date(img *pimg) { int same, unset; /* Only write dates when they've changed. */ #if IMG_API_VERSION == 0 if (pimg->date1 == pimg->olddate1 && pimg->date2 == pimg->olddate2) return; same = (pimg->date1 == pimg->date2); unset = (pimg->date1 == 0); #else /* IMG_API_VERSION == 1 */ if (pimg->days1 == pimg->olddays1 && pimg->days2 == pimg->olddays2) return; same = (pimg->days1 == pimg->days2); unset = (pimg->days1 == -1); #endif if (same) { if (img_output_version < 7) { PUTC(0x20, pimg->fh); #if IMG_API_VERSION == 0 put32(pimg->date1, pimg->fh); #else /* IMG_API_VERSION == 1 */ put32((pimg->days1 - 25567) * 86400, pimg->fh); #endif } else { if (unset) { PUTC(0x24, pimg->fh); } else { PUTC(0x20, pimg->fh); #if IMG_API_VERSION == 0 put16(pimg->date1 / 86400 + 25567, pimg->fh); #else /* IMG_API_VERSION == 1 */ put16(pimg->days1, pimg->fh); #endif } } } else { if (img_output_version < 7) { PUTC(0x21, pimg->fh); #if IMG_API_VERSION == 0 put32(pimg->date1, pimg->fh); put32(pimg->date2, pimg->fh); #else /* IMG_API_VERSION == 1 */ put32((pimg->days1 - 25567) * 86400, pimg->fh); put32((pimg->days2 - 25567) * 86400, pimg->fh); #endif } else { #if IMG_API_VERSION == 0 int diff = (pimg->date2 - pimg->date1) / 86400; if (diff > 0 && diff <= 256) { PUTC(0x21, pimg->fh); put16(pimg->date1 / 86400 + 25567, pimg->fh); PUTC(diff - 1, pimg->fh); } else { PUTC(0x23, pimg->fh); put16(pimg->date1 / 86400 + 25567, pimg->fh); put16(pimg->date2 / 86400 + 25567, pimg->fh); } #else /* IMG_API_VERSION == 1 */ int diff = pimg->days2 - pimg->days1; if (diff > 0 && diff <= 256) { PUTC(0x21, pimg->fh); put16(pimg->days1, pimg->fh); PUTC(diff - 1, pimg->fh); } else { PUTC(0x23, pimg->fh); put16(pimg->days1, pimg->fh); put16(pimg->days2, pimg->fh); } #endif } } #if IMG_API_VERSION == 0 pimg->olddate1 = pimg->date1; pimg->olddate2 = pimg->date2; #else /* IMG_API_VERSION == 1 */ pimg->olddays1 = pimg->days1; pimg->olddays2 = pimg->days2; #endif } static void img_write_item_new(img *pimg, int code, int flags, const char *s, double x, double y, double z); static void img_write_item_v3to7(img *pimg, int code, int flags, const char *s, double x, double y, double z); static void img_write_item_ancient(img *pimg, int code, int flags, const char *s, double x, double y, double z); void img_write_item(img *pimg, int code, int flags, const char *s, double x, double y, double z) { if (!pimg) return; if (pimg->version >= 8) { img_write_item_new(pimg, code, flags, s, x, y, z); } else if (pimg->version >= 3) { img_write_item_v3to7(pimg, code, flags, s, x, y, z); } else { img_write_item_ancient(pimg, code, flags, s, x, y, z); } } static void img_write_item_new(img *pimg, int code, int flags, const char *s, double x, double y, double z) { switch (code) { case img_LABEL: write_v8label(pimg, 0x80 | flags, 0, -1, s); break; case img_XSECT: { INT32_T l, r, u, d, max_dim; img_write_item_date_new(pimg); l = (INT32_T)my_lround(pimg->l * 100.0); r = (INT32_T)my_lround(pimg->r * 100.0); u = (INT32_T)my_lround(pimg->u * 100.0); d = (INT32_T)my_lround(pimg->d * 100.0); if (l < 0) l = -1; if (r < 0) r = -1; if (u < 0) u = -1; if (d < 0) d = -1; max_dim = max(max(l, r), max(u, d)); flags = (flags & img_XFLAG_END) ? 1 : 0; if (max_dim >= 32768) flags |= 2; write_v8label(pimg, 0x30 | flags, 0, -1, s); if (flags & 2) { /* Big passage! Need to use 4 bytes. */ put32(l, pimg->fh); put32(r, pimg->fh); put32(u, pimg->fh); put32(d, pimg->fh); } else { put16(l, pimg->fh); put16(r, pimg->fh); put16(u, pimg->fh); put16(d, pimg->fh); } return; } case img_MOVE: PUTC(15, pimg->fh); break; case img_LINE: img_write_item_date_new(pimg); if (pimg->style != pimg->oldstyle) { switch (pimg->style) { case img_STYLE_NORMAL: case img_STYLE_DIVING: case img_STYLE_CARTESIAN: case img_STYLE_CYLPOLAR: case img_STYLE_NOSURVEY: PUTC(pimg->style, pimg->fh); break; } pimg->oldstyle = pimg->style; } write_v8label(pimg, 0x40 | flags, 0x20, 0x00, s ? s : ""); break; default: /* ignore for now */ return; } write_coord(pimg->fh, x, y, z); } static void img_write_item_v3to7(img *pimg, int code, int flags, const char *s, double x, double y, double z) { switch (code) { case img_LABEL: write_v3label(pimg, 0x40 | flags, s); break; case img_XSECT: { INT32_T l, r, u, d, max_dim; /* Need at least version 5 for img_XSECT. */ if (pimg->version < 5) return; img_write_item_date(pimg); l = (INT32_T)my_lround(pimg->l * 100.0); r = (INT32_T)my_lround(pimg->r * 100.0); u = (INT32_T)my_lround(pimg->u * 100.0); d = (INT32_T)my_lround(pimg->d * 100.0); if (l < 0) l = -1; if (r < 0) r = -1; if (u < 0) u = -1; if (d < 0) d = -1; max_dim = max(max(l, r), max(u, d)); flags = (flags & img_XFLAG_END) ? 1 : 0; if (max_dim >= 32768) flags |= 2; write_v3label(pimg, 0x30 | flags, s); if (flags & 2) { /* Big passage! Need to use 4 bytes. */ put32(l, pimg->fh); put32(r, pimg->fh); put32(u, pimg->fh); put32(d, pimg->fh); } else { put16(l, pimg->fh); put16(r, pimg->fh); put16(u, pimg->fh); put16(d, pimg->fh); } return; } case img_MOVE: PUTC(15, pimg->fh); break; case img_LINE: if (pimg->version >= 4) { img_write_item_date(pimg); } write_v3label(pimg, 0x80 | flags, s ? s : ""); break; default: /* ignore for now */ return; } write_coord(pimg->fh, x, y, z); } static void img_write_item_ancient(img *pimg, int code, int flags, const char *s, double x, double y, double z) { size_t len; INT32_T opt = 0; SVX_ASSERT(pimg->version > 0); switch (code) { case img_LABEL: if (pimg->version == 1) { /* put a move before each label */ img_write_item_ancient(pimg, img_MOVE, 0, NULL, x, y, z); put32(2, pimg->fh); fputsnl(s, pimg->fh); return; } len = strlen(s); if (len > 255 || strchr(s, '\n')) { /* long label - not in early incarnations of v2 format, but few * 3d files will need these, so better not to force incompatibility * with a new version I think... */ PUTC(7, pimg->fh); PUTC(flags, pimg->fh); put32(len, pimg->fh); fputs(s, pimg->fh); } else { PUTC(0x40 | (flags & 0x3f), pimg->fh); fputsnl(s, pimg->fh); } opt = 0; break; case img_MOVE: opt = 4; break; case img_LINE: if (pimg->version > 1) { opt = 0x80 | (flags & 0x3f); break; } opt = 5; break; default: /* ignore for now */ return; } if (pimg->version == 1) { put32(opt, pimg->fh); } else { if (opt) PUTC(opt, pimg->fh); } write_coord(pimg->fh, x, y, z); } /* Write error information for the current traverse * n_legs is the number of legs in the traverse * length is the traverse length (in m) * E is the ratio of the observed misclosure to the theoretical one * H is the ratio of the observed horizontal misclosure to the theoretical one * V is the ratio of the observed vertical misclosure to the theoretical one */ void img_write_errors(img *pimg, int n_legs, double length, double E, double H, double V) { PUTC((pimg->version >= 8 ? 0x1f : 0x22), pimg->fh); put32(n_legs, pimg->fh); put32((INT32_T)my_lround(length * 100.0), pimg->fh); put32((INT32_T)my_lround(E * 100.0), pimg->fh); put32((INT32_T)my_lround(H * 100.0), pimg->fh); put32((INT32_T)my_lround(V * 100.0), pimg->fh); } int img_close(img *pimg) { int result = 1; if (pimg) { if (pimg->fh) { if (pimg->fRead) { osfree(pimg->survey); osfree(pimg->title); osfree(pimg->datestamp); } else { /* write end of data marker */ switch (pimg->version) { case 1: put32((INT32_T)-1, pimg->fh); break; default: if (pimg->version <= 7 ? (pimg->label_len != 0) : (pimg->style != img_STYLE_NORMAL)) { PUTC(0, pimg->fh); } /* FALL THROUGH */ case 2: PUTC(0, pimg->fh); break; } } if (ferror(pimg->fh)) result = 0; if (fclose(pimg->fh)) result = 0; if (!result) img_errno = pimg->fRead ? IMG_READERROR : IMG_WRITEERROR; } osfree(pimg->label_buf); osfree(pimg->filename_opened); osfree(pimg); } return result; } therion/loch/img.h0000644000076400010400000002121012265325004015132 0ustar userAdministrators/* img.h * Header file for routines to read and write Survex ".3d" image files * Copyright (C) Olly Betts 1993,1994,1997,2001,2002,2003,2004,2005,2006,2010,2011,2012,2013,2014 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef IMG_H # define IMG_H /* Define IMG_API_VERSION if you want more recent versions of the img API. * * 0 (default) The old API. date1 and date2 give the survey date as time_t. * Set to 0 for "unknown". * 1 days1 and days2 give survey dates as days since 1st Jan 1900. * Set to -1 for "unknown". */ #ifndef IMG_API_VERSION # define IMG_API_VERSION 0 #elif IMG_API_VERSION > 1 # error IMG_API_VERSION > 1 too new #endif #ifdef __cplusplus extern "C" { #endif #include #include /* for time_t */ # define img_BAD -2 # define img_STOP -1 # define img_MOVE 0 # define img_LINE 1 /* NB: img_CROSS is never output and ignored on input. * Put crosses where labels are. */ /* # define img_CROSS 2 */ # define img_LABEL 3 # define img_XSECT 4 # define img_XSECT_END 5 # define img_ERROR_INFO 6 /* Leg flags */ # define img_FLAG_SURFACE 0x01 # define img_FLAG_DUPLICATE 0x02 # define img_FLAG_SPLAY 0x04 /* Station flags */ # define img_SFLAG_SURFACE 0x01 # define img_SFLAG_UNDERGROUND 0x02 # define img_SFLAG_ENTRANCE 0x04 # define img_SFLAG_EXPORTED 0x08 # define img_SFLAG_FIXED 0x10 # define img_SFLAG_ANON 0x20 # define img_SFLAG_WALL 0x40 /* File-wide flags */ # define img_FFLAG_EXTENDED 0x80 /* When writing img_XSECT, img_XFLAG_END in pimg->flags means this is the last * img_XSECT in this tube: */ # define img_XFLAG_END 0x01 # define img_STYLE_UNKNOWN -1 # define img_STYLE_NORMAL 0 # define img_STYLE_DIVING 1 # define img_STYLE_CARTESIAN 2 # define img_STYLE_CYLPOLAR 3 # define img_STYLE_NOSURVEY 4 /* 3D coordinates (in metres) */ typedef struct { double x, y, z; } img_point; typedef struct { /* members you can access when reading (don't touch when writing) */ char *label; int flags; char *title; /* Older .3d format versions stored a human readable datestamp string. * Format versions >= 8 versions store a string consisting of "@" followed * by the number of seconds since midnight UTC on 1/1/1970. Some foreign * formats contain a human readable string, others no date information * (which results in "?" being returned). */ char *datestamp; /* The datestamp as a time_t (or (time_t)-1 if not available). * * For 3d format versions >= 8, this is a reliable value and in UTC. Older * 3d format versions store a human readable time, which img will attempt * to decode, but it may fail, particularly with handling timezones. Even * if it does work, beware that times in local time where DST applies are * inherently ambiguous around when the clocks go back. * * CMAP XYZ files contain a timestamp. It's probably in localtime (but * without any timezone information) and the example files are all pre-2000 * and have two digit years. We do our best to turn these into a useful * time_t value. */ time_t datestamp_numeric; char separator; /* character used to separate survey levels ('.' usually) */ #if IMG_API_VERSION == 0 time_t date1, date2; #else /* IMG_API_VERSION == 1 */ int days1, days2; #endif double l, r, u, d; /* Error information - valid when IMG_ERROR is returned: */ int n_legs; double length; double E, H, V; /* The filename actually opened (e.g. may have ".3d" added). */ char * filename_opened; int is_extended_elevation; /* The style of the data - one of the img_STYLE_* constants above */ int style; /* all other members are for internal use only */ FILE *fh; /* file handle of image file */ char *label_buf; size_t buf_len; size_t label_len; int fRead; /* 1 for reading, 0 for writing */ long start; /* version of file format: * -4 => CMAP .xyz file, shot format * -3 => CMAP .xyz file, station format * -2 => Compass .plt file * -1 => .pos file * 0 => 0.01 ascii * 1 => 0.01 binary, * 2 => byte actions and flags * 3 => prefixes for legs; compressed prefixes * 4 => survey date * 5 => LRUD info * 6 => error info * 7 => more compact dates with wider range * 8 => lots of changes */ int version; char *survey; size_t survey_len; int pending; /* for old style text format files and survey filtering */ img_point mv; #if IMG_API_VERSION == 0 time_t olddate1, olddate2; #else /* IMG_API_VERSION == 1 */ int olddays1, olddays2; #endif int oldstyle; } img; /* Which version of the file format to output (defaults to newest) */ extern unsigned int img_output_version; /* Minimum supported value for img_output_version: */ #define IMG_VERSION_MIN 1 /* Maximum supported value for img_output_version: */ #define IMG_VERSION_MAX 8 /* Open a .3d file for reading * fnm is the filename * Returns pointer to an img struct or NULL */ #define img_open(F) img_open_survey((F), NULL) /* Open a .3d file for reading * fnm is the filename * Returns pointer to an img struct or NULL * survey points to a survey name to restrict reading to (or NULL for all * survey data in the file) */ img *img_open_survey(const char *fnm, const char *survey); /* Open a .3d file for output * fnm is the filename * title is the title * flags contains a bitwise-or of any file-wide flags - currently only one * is available: img_FFLAG_EXTENDED. (The third parameter used to be * 'fBinary', but has been ignored for many years, so the parameter has * been repurposed for flags - for this reason, img.c deliberately ignores bit * 1 being set, but callers should be written/updated not to set it). * * Returns pointer to an img struct or NULL for error (check img_error() * for details) */ img *img_open_write(const char *fnm, char *title, int flags); /* Read an item from a .3d file * pimg is a pointer to an img struct returned by img_open() * coordinates are returned in p * flags and label name are returned in fields in pimg * Returns img_XXXX as #define-d above */ int img_read_item(img *pimg, img_point *p); /* Write a item to a .3d file * pimg is a pointer to an img struct returned by img_open_write() * code is one of the img_XXXX #define-d above * flags is the leg, station, or xsect flags * (meaningful for img_LINE, img_LABEL, and img_XSECT respectively) * s is the label (only meaningful for img_LABEL) * x, y, z are the coordinates */ void img_write_item(img *pimg, int code, int flags, const char *s, double x, double y, double z); /* Write error information for the current traverse * n_legs is the number of legs in the traverse * length is the traverse length (in m) * E is the ratio of the observed misclosure to the theoretical one * H is the ratio of the observed horizontal misclosure to the theoretical one * V is the ratio of the observed vertical misclosure to the theoretical one */ void img_write_errors(img *pimg, int n_legs, double length, double E, double H, double V); /* rewind a .3d file opened for reading so the data can be read in * several passes * pimg is a pointer to an img struct returned by img_open() * Returns: non-zero for success, zero for error (check img_error() for * details) */ int img_rewind(img *pimg); /* Close a .3d file * pimg is a pointer to an img struct returned by img_open() or * img_open_write() * Returns: non-zero for success, zero for error (check img_error() for * details) */ int img_close(img *pimg); /* Codes returned by img_error */ typedef enum { IMG_NONE = 0, IMG_FILENOTFOUND, IMG_OUTOFMEMORY, IMG_CANTOPENOUT, IMG_BADFORMAT, IMG_DIRECTORY, IMG_READERROR, IMG_WRITEERROR, IMG_TOONEW } img_errcode; /* Read the error code * If img_open(), img_open_survey() or img_open_write() returns NULL, or * img_rewind() or img_close() returns 0, or img_read_item() returns img_BAD * then you can call this function to discover why. */ img_errcode img_error(void); #ifdef __cplusplus } #endif #endif therion/loch/locale/0000755000076400010400000000000012004774752015461 5ustar userAdministratorstherion/loch/locale/bg/0000755000076400010400000000000012050456020016033 5ustar userAdministratorstherion/loch/locale/bg/loch.mo0000644000076400010400000002505611560730726017342 0ustar userAdministratorsÞ•Ÿß ˆ ‰ ‘ ˜   ¦ ­ ± » Á É Ù â è î ô û , CNU\cjpv{‘ ±¼ŒÃP Y f q ~!ˆª ±¾Å Ì×íó  2H _l … ’ž®ÁÇ)à0 ; JW` f q}  ª ¸ Ä Ð Ûéý#9O b o| „Ž –¢ ¨³Gà # (2; C P^ eqx‡ ›¼Óîþ(:LUet†Œ ’ ž ª¶ÈØ è õ $, 4 ?L lx  —¢¨¼ÍÝ ðü   ' 2> E P [g ƒˆ‘  '2:@GK i w…¡ ± ½ Ç Óß÷ (3\p ‚Ž” ¬ ºÆËÝCá %/Ä@#)H _j:| ·(Ä í ø &9H"b…)š0Ä0õ&.?n”#° Ô?ác!^…*ä+- Ydt†%œ"Â2å- F e 0z 5« #á -!/3!/c!-“!Á!á!ô! ÷!""-"B"Y"'p"P˜"é"# # # $# 1#>#Y#l#ˆ# ™#.º#)é#$42$*g$0’$Ã$!Ô$+ö$+"%N% _%"€%,£% Ð% Ý%è%&&.&M&i&!‡&%©&Ï&$ë& '%'C'X'i'‡'/ž'Î'#á' (( $(*/( Z(h(‡(+¦(/Ò())6)P) n)|)˜)²)EÐ)*WzN0<`  G;KXD_žCŽj=“‡&tawFY‘oZi+M]~c.V™'‚*|:$PH”s8 (?Bn’5@^ƒŸ˜Qœ9‰7,†‹L uElJhpTR x-![)ˆ3›m4/r61O–kAf>bvš%gd…\y"{ŒqU 2e#—ŠSI}•€„ Camera Scene%+03d°%.14e%03d°%ld&About...&Bugs&Camera&Contents... F1&Control&East&File&Help&North&Open... Ctrl+O&Options...&Plan&Reload Ctrl+R&Render to file Ctrl+P&Rendering&Reset&Scene&South&Tools&View&West(mm)00 x 00 (00.0 MB)1 :3D visualization tool for cavesAbout LochActionAll supported files (*.lox;*.plt;*.3d)|*.lox;*.plt;*.3d|Loch files (*.lox)|*.lox|Compass PLT files (*.plt)|*.plt|Survex 3D files (*.3d)|*.3dAltitudeAltitude (m)Applies toBounding boxBrowse...Building 3D model, please wait...CameraCamera setupCancelCenterCenterlineCenterline visibilityCloseColor channelsColor modeDefaultDefault data files directoryDefault stereo colorsDisable color texturesDistance (m)Do not extrapolate wallsE&xit Ctrl+QEasting (m)Enable rotationEnable stereo modeErrorError reading input fileExtrapolate all missing walls informationExtrapolate only files without walls informationEye separationFacing (deg)Fit zoomFocusFocus (mm)Full screenFull screen F11General optionsImage heightImage optionsImage size:Image widthIndicatorsLock rotationLock rotation speedLower viewpoint UpMove down Shift+UpMove left Shift+RightMove right Shift+LeftMove up Shift+DownNo file openNorthing (m)OKOpenOpen fileOptionsOrientationOrthoOrthogonalOrthogonal viewPDF files (*.pdf)|*.pdf|PNG files (*.png)|*.png|BMP files (*.bmp)|*.bmpPPM files (*.ppm)|*.ppmPlanPlan viewPro&fileProfileProfile viewProject titleReloadReload fileRenderRender to fileRendering &setup...Rendering (%d x %d, %.1f MB) ...Rendering at %.1f fps.Rendering resolution (dpi)Rendering setupRendering to bitmapResetReset viewpointRotate left RightRotate right LeftRotationRotation centerRotation speedSave rendering asScaleSceneScene itemsScene setupScreen shotShow bounding boxShow centerlineShow indicatorsShow surfaceShow wallsSize and scalingStereoStereo modeSurfaceTextureTilt (deg)TransparencyUnable to open file for output.UndergroundUpper viewpoint DownVersion: VisibilityWallsWalls extrapolationWhite backgroundZoom in Ctrl+UpZoom out Ctrl+DownZoom to fitZoom to fit Spaceblue & redblue & yellowcyan & redgreen & rednonamered & bluered & cyanred & greenremember last used channelsyellow & blueProject-Id-Version: Loch POT-Creation-Date: PO-Revision-Date: 2011-05-06 10:31+0100 Last-Translator: Language-Team: bulgarian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Poedit-Language: Slovak X-Poedit-Country: SLOVAKIA X-Poedit-SourceCharset: iso-8859-1 X-Poedit-Basepath: ../.. Plural-Forms: и X-Poedit-SearchPath-0: . КамераСцена%+03d°%.14e%03d°%ldЗа &програмата...&Бъгове&Камера&Съдържание... F1&Контрол&Изток&ФайлПо&мощ&Север&Отвори... Ctrl+O&ÐаÑтройки...&План&Презареди Ctrl+R&Рендирай във файл Ctrl+P&Рендиране&Ðулиране&Сцена&Юг&ИнÑтрументи&Изглед&Запад(mm)00 x 00 (00.0 MB)1 :Програма за 3D Ð²Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð° пещериЗа LochДейÑтвиеВÑички поддържани файлове (*.lox;*.plt;*.3d)|*.lox;*.plt;*.3d|Loch файлове (*.lox)|*.lox|Compass PLT файлове (*.plt)|*.plt|Survex 3D файлове (*.3d)|*.3dÐадморÑка виÑочинаÐадм. виÑочина (m)ОтнаÑÑ Ñе заРамкаПреглед...Създавам 3D model, молÑ, изчакайте...КамераÐаÑтройки на камератаОтказЦентърÐнтенаВидимоÑÑ‚ на антенатаЗатвориЦветни каналиРежим на цветоветеСтандартниСтандартна директориÑСтандартни Ñтерео цветовеИзключи цветните текÑтуриРазÑтоÑние (m)Ðе екÑтраполирай Ñтените&Изход Ctrl+QX - изток (m)Включи ротациÑСтерео изображениеГрешкаГрешка при четене на входниÑÑ‚ файлЕкÑтраполирай вÑичката липÑтваща Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° ÑтениЕкÑтраполирай Ñамо файлове без Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° ÑтениРаздалеченоÑÑ‚ на очитеÐзимут (градуÑи)Оптимално приближаванеФокуÑÐ¤Ð¾ÐºÑƒÑ (mm)ЦÑл екранЦÑл екран F11Генерални наÑтройкиВиÑочина на ÑнимкаÐаÑтройки на изображениетоРазмер на изображението:Ширина на ÑнимкаИндикаториЗаключване на завъртанетоЗаключи ÑкороÑтта на ротациÑПоглед от долу ГореДвижение на долу Shift+ГореДвижение на лÑво Shift+ДÑÑноДвижение на дÑÑно Shift+ЛÑвоДвижение на горе Shift+ДолуÐе е отворен файлY - Ñевер (m)OKОтвориОтвори файлÐаÑтройкиОриентациÑОртогоналнаОртогоналнаОртогонална проекциÑPDF файл (*.pdf)|*.pdf|PNG файл (*.png)|*.png|BMP файл (*.bmp)|*.bmpPPM файл (*.ppm)|*.ppmПланПланПро&филПрофилПрофилИме на проектаПрезаредиПрезареди файлРендирайРендирай във файлÐа&Ñтройки на рендиране...Рендиране (%d x %d, %.1f MB) ...Рендиране (%.1f fps).Ð ÐµÐ·Ð¾Ð»ÑŽÑ†Ð¸Ñ Ð½Ð° рендирането (dpi)ÐаÑтройки на рендиранеРендиране към изображениеÐулиранеСтандартен изгледЗавъртане на лÑво ДÑÑноЗавъртане на дÑÑно ЛÑвоавъртанеЦентър на ротациÑСкороÑÑ‚ на ротациÑЗапиши рендираното катоРазмерСценаОбекти в ÑценатаÐаÑтройки на ÑценатаСнимка на екранаПокажи рамкатаПокажи антенатаПокажи индикаториПокажи повърхноÑттаПокажи ÑтенитеРазмер и мащабиранеСтереоСтерео изобразÑванеПОвърхноÑтТекÑтураÐаклон (градуÑи)ПрозрачноÑÑ‚ÐеуÑпех при Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° файл.ПодземÑтаПоглед от горе ДолуВерÑиÑ:ВидимоÑтСтениЕкÑÐ¿Ñ€Ð°Ð¿Ð¾Ð»Ð°Ñ†Ð¸Ñ Ð½Ð° ÑтениБÑл фонПриближи Ctrl+ГореОтдалечи Ctrl+ДолуОптимално приближаванеОптимално приближение SpaceÑиньо & червеноÑиньо & жълтоциÑн & червенозелено & червенобез имечервено & Ñиньочервено & циÑнчервено & зеленозапомни поÑледно използваните каналижълто & Ñиньоtherion/loch/locale/bg/loch.po0000644000076400010400000005215211560730726017342 0ustar userAdministrators# # Alexander Yanev , 2011. # msgid "" msgstr "" "Project-Id-Version: Loch\n" "POT-Creation-Date: \n" "PO-Revision-Date: 2011-05-06 10:31+0100\n" "Last-Translator: \n" "Language-Team: bulgarian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Slovak\n" "X-Poedit-Country: SLOVAKIA\n" "X-Poedit-SourceCharset: iso-8859-1\n" "X-Poedit-Basepath: ../..\n" "Plural-Forms: и\n" "X-Poedit-SearchPath-0: .\n" # C:/Projects/MSVCProjects/loch/lxAboutDlg.cxx:53 #: lxAboutDlg.cxx:54 msgid "About Loch" msgstr "За Loch" # C:/Projects/MSVCProjects/loch/lxAboutDlg.cxx:76 #: lxAboutDlg.cxx:77 msgid "3D visualization tool for caves" msgstr "Програма за 3D Ð²Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð° пещери" # C:/Projects/MSVCProjects/loch/lxAboutDlg.cxx:78 #: lxAboutDlg.cxx:79 msgid "Version: " msgstr "ВерÑиÑ:" #: lxData.cxx:84 msgid "No file open" msgstr "Ðе е отворен файл" # c:/cave/loch/loch/lxGLCs.cxx:381 #: lxGLCs.cxx:412 #, c-format msgid "Rendering at %.1f fps." msgstr "Рендиране (%.1f fps)." # c:/cave/loch/loch/lxGLCx.cxx:542 #: lxGLCx.cxx:605 #, c-format msgid "%03d°" msgstr "%03d°" # c:/cave/loch/loch/lxGLCx.cxx:633 #: lxGLCx.cxx:696 #, c-format msgid "%+03d°" msgstr "%+03d°" # c:/cave/loch/loch/lxSScene.cxx:222 # c:/cave/loch/loch/lxSScene.cxx:324 #: lxGLCx.cxx:736 #: lxSScene.cxx:273 msgid "Altitude" msgstr "ÐадморÑка виÑочина" # c:/cave/loch/loch/lxGUI.cxx:94 #: lxGUI.cxx:155 msgid "noname" msgstr "без име" # c:/cave/loch/loch/lxGUI.cxx:98 # c:/cave/loch/loch/lxGUI.cxx:354 #: lxGUI.cxx:206 #: lxGUI.cxx:575 msgid "Open" msgstr "Отвори" # c:/cave/loch/loch/lxGUI.cxx:98 #: lxGUI.cxx:206 msgid "Open file" msgstr "Отвори файл" # c:/cave/loch/loch/lxGUI.cxx:99 #: lxGUI.cxx:207 msgid "Reload" msgstr "Презареди" # c:/cave/loch/loch/lxGUI.cxx:99 #: lxGUI.cxx:207 msgid "Reload file" msgstr "Презареди файл" # c:/cave/loch/loch/lxGUI.cxx:100 #: lxGUI.cxx:209 msgid "Render" msgstr "Рендирай" # c:/cave/loch/loch/lxGUI.cxx:100 #: lxGUI.cxx:209 msgid "Render to file" msgstr "Рендирай във файл" # c:/cave/loch/loch/lxPrint.cxx:291 # c:/cave/loch/loch/lxRender.cxx:237 #: lxGUI.cxx:210 #: lxRender.cxx:236 msgid "Rendering setup" msgstr "ÐаÑтройки на рендиране" # c:/cave/loch/loch/lxGUI.cxx:102 # c:/cave/loch/loch/lxGUI.cxx:152 # c:/cave/loch/loch/lxSView.cxx:257 #: lxGUI.cxx:212 #: lxGUI.cxx:275 #: lxGUI.cxx:283 #: lxSView.cxx:262 msgid "Rotation" msgstr "авъртане" # c:/cave/loch/loch/lxGUI.cxx:103 # c:/cave/loch/loch/lxGUI.cxx:153 # c:/cave/loch/loch/lxSView.cxx:400 # c:/cave/loch/loch/lxSView.cxx:526 #: lxGUI.cxx:213 #: lxGUI.cxx:276 #: lxGUI.cxx:284 #: lxSView.cxx:405 #: lxSView.cxx:532 msgid "Lock rotation" msgstr "Заключване на завъртането" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:217 #: lxGUI.cxx:214 msgid "Ortho" msgstr "Ортогонална" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:217 # C:/Projects/MSVCProjects/loch/lxSView.cxx:380 #: lxGUI.cxx:214 #: lxSView.cxx:380 msgid "Orthogonal view" msgstr "Ортогонална проекциÑ" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:218 #: lxGUI.cxx:215 msgid "Stereo" msgstr "Стерео" # c:/cave/loch/loch/lxGUI.cxx:107 # c:/cave/loch/loch/lxSView.cxx:258 #: lxGUI.cxx:215 #: lxSView.cxx:263 msgid "Stereo mode" msgstr "Стерео изобразÑване" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:220 #: lxGUI.cxx:217 msgid "Plan" msgstr "План" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:220 #: lxGUI.cxx:217 msgid "Plan view" msgstr "План" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:221 #: lxGUI.cxx:218 msgid "Profile" msgstr "Профил" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:221 #: lxGUI.cxx:218 msgid "Profile view" msgstr "Профил" # c:/cave/loch/loch/lxGUI.cxx:104 #: lxGUI.cxx:219 msgid "Fit zoom" msgstr "Оптимално приближаване" # c:/cave/loch/loch/lxGUI.cxx:104 #: lxGUI.cxx:219 msgid "Zoom to fit" msgstr "Оптимално приближаване" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:223 #: lxGUI.cxx:220 msgid "Reset" msgstr "Ðулиране" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:223 #: lxGUI.cxx:220 msgid "Reset viewpoint" msgstr "Стандартен изглед" # c:/cave/loch/loch/lxSScene.cxx:169 # c:/cave/loch/loch/lxSScene.cxx:200 # c:/cave/loch/loch/lxSScene.cxx:231 # c:/cave/loch/loch/lxSScene.cxx:362 #: lxGUI.cxx:222 #: lxSScene.cxx:218 #: lxSScene.cxx:249 #: lxSScene.cxx:286 msgid "Centerline" msgstr "Ðнтена" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:225 #: lxGUI.cxx:222 msgid "Show centerline" msgstr "Покажи антената" # c:/cave/loch/loch/lxSScene.cxx:170 # c:/cave/loch/loch/lxSScene.cxx:201 # c:/cave/loch/loch/lxSScene.cxx:232 # c:/cave/loch/loch/lxSScene.cxx:363 #: lxGUI.cxx:223 #: lxSScene.cxx:219 #: lxSScene.cxx:250 #: lxSScene.cxx:287 msgid "Walls" msgstr "Стени" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:226 #: lxGUI.cxx:223 msgid "Show walls" msgstr "Покажи Ñтените" # c:/cave/loch/loch/lxSScene.cxx:171 # c:/cave/loch/loch/lxSScene.cxx:202 # c:/cave/loch/loch/lxSScene.cxx:233 # c:/cave/loch/loch/lxSScene.cxx:245 # c:/cave/loch/loch/lxSScene.cxx:364 #: lxGUI.cxx:224 #: lxSScene.cxx:220 #: lxSScene.cxx:251 #: lxSScene.cxx:300 msgid "Surface" msgstr "ПОвърхноÑÑ‚" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:227 #: lxGUI.cxx:224 msgid "Show surface" msgstr "Покажи повърхноÑтта" # c:/cave/loch/loch/lxSScene.cxx:204 # c:/cave/loch/loch/lxSScene.cxx:365 #: lxGUI.cxx:225 #: lxSScene.cxx:253 msgid "Bounding box" msgstr "Рамка" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:228 #: lxGUI.cxx:225 msgid "Show bounding box" msgstr "Покажи рамката" # c:/cave/loch/loch/lxSScene.cxx:174 #: lxGUI.cxx:226 #: lxSScene.cxx:223 #: lxSScene.cxx:255 msgid "Indicators" msgstr "Индикатори" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:229 #: lxGUI.cxx:226 msgid "Show indicators" msgstr "Покажи индикатори" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:231 #: lxGUI.cxx:228 msgid "Camera setup" msgstr "ÐаÑтройки на камерата" # c:/cave/loch/loch/lxGUI.cxx:110 #: lxGUI.cxx:229 msgid "Scene setup" msgstr "ÐаÑтройки на Ñцената" # c:/cave/loch/loch/lxGUI.cxx:112 #: lxGUI.cxx:231 msgid "Full screen" msgstr "ЦÑл екран" # c:/cave/loch/loch/lxGUI.cxx:117 #: lxGUI.cxx:236 msgid "&Open...\tCtrl+O" msgstr "&Отвори...\tCtrl+O" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:240 #: lxGUI.cxx:237 msgid "&Reload\tCtrl+R" msgstr "&Презареди\tCtrl+R" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:242 #: lxGUI.cxx:239 msgid "&Render to file\tCtrl+P" msgstr "&Рендирай във файл\tCtrl+P" # c:/cave/loch/loch/lxGUI.cxx:121 #: lxGUI.cxx:240 msgid "Rendering &setup..." msgstr "Ðа&Ñтройки на рендиране..." # C:/Projects/MSVCProjects/loch/lxGUI.cxx:245 #: lxGUI.cxx:242 msgid "E&xit\tCtrl+Q" msgstr "&Изход\tCtrl+Q" # c:/cave/loch/loch/lxGUI.cxx:126 #: lxGUI.cxx:247 msgid "Rotate left\tRight" msgstr "Завъртане на лÑво\tДÑÑно" # c:/cave/loch/loch/lxGUI.cxx:127 #: lxGUI.cxx:248 msgid "Rotate right\tLeft" msgstr "Завъртане на дÑÑно\tЛÑво" # c:/cave/loch/loch/lxGUI.cxx:129 #: lxGUI.cxx:250 msgid "Upper viewpoint\tDown" msgstr "Поглед от горе\tДолу" # c:/cave/loch/loch/lxGUI.cxx:130 #: lxGUI.cxx:251 msgid "Lower viewpoint\tUp" msgstr "Поглед от долу\tГоре" # c:/cave/loch/loch/lxGUI.cxx:132 #: lxGUI.cxx:253 msgid "Move up\tShift+Down" msgstr "Движение на горе\tShift+Долу" # c:/cave/loch/loch/lxGUI.cxx:133 #: lxGUI.cxx:254 msgid "Move down\tShift+Up" msgstr "Движение на долу\tShift+Горе" # c:/cave/loch/loch/lxGUI.cxx:134 #: lxGUI.cxx:255 msgid "Move left\tShift+Right" msgstr "Движение на лÑво\tShift+ДÑÑно" # c:/cave/loch/loch/lxGUI.cxx:135 #: lxGUI.cxx:256 msgid "Move right\tShift+Left" msgstr "Движение на дÑÑно\tShift+ЛÑво" # c:/cave/loch/loch/lxGUI.cxx:137 #: lxGUI.cxx:258 msgid "Zoom in\tCtrl+Up" msgstr "Приближи\tCtrl+Горе" # c:/cave/loch/loch/lxGUI.cxx:138 #: lxGUI.cxx:259 msgid "Zoom out\tCtrl+Down" msgstr "Отдалечи\tCtrl+Долу" # c:/cave/loch/loch/lxGUI.cxx:139 #: lxGUI.cxx:260 msgid "Zoom to fit\tSpace" msgstr "Оптимално приближение\tSpace" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:266 #: lxGUI.cxx:263 msgid "&Plan" msgstr "&План" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:267 #: lxGUI.cxx:264 msgid "Pro&file" msgstr "Про&фил" # c:/cave/loch/loch/lxGUI.cxx:144 #: lxGUI.cxx:266 msgid "&North" msgstr "&Север" # c:/cave/loch/loch/lxGUI.cxx:145 #: lxGUI.cxx:267 msgid "&West" msgstr "&Запад" # c:/cave/loch/loch/lxGUI.cxx:146 #: lxGUI.cxx:268 msgid "&East" msgstr "&Изток" # c:/cave/loch/loch/lxGUI.cxx:147 #: lxGUI.cxx:269 msgid "&South" msgstr "&Юг" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:274 #: lxGUI.cxx:271 msgid "&Reset" msgstr "&Ðулиране" # c:/cave/loch/loch/lxSView.cxx:256 #: lxGUI.cxx:278 msgid "Camera" msgstr "Камера" # c:/cave/loch/loch/lxGUI.cxx:161 #: lxGUI.cxx:279 msgid "Scene" msgstr "Сцена" # c:/cave/loch/loch/lxGUI.cxx:151 #: lxGUI.cxx:282 msgid "Action" msgstr "ДейÑтвие" # c:/cave/loch/loch/lxSView.cxx:254 #: lxGUI.cxx:285 #: lxSView.cxx:259 msgid "Orientation" msgstr "ОриентациÑ" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:289 #: lxGUI.cxx:286 msgid "Orthogonal" msgstr "Ортогонална" # c:/cave/loch/loch/lxGUI.cxx:157 #: lxGUI.cxx:288 msgid "Full screen\tF11" msgstr "ЦÑл екран\tF11" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:294 #: lxGUI.cxx:291 msgid "&Camera" msgstr "&Камера" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:295 #: lxGUI.cxx:292 msgid "&Scene" msgstr "&Сцена" # c:/cave/loch/loch/lxGUI.cxx:117 #: lxGUI.cxx:294 msgid "&Options..." msgstr "&ÐаÑтройки..." # C:/Projects/MSVCProjects/loch/lxGUI.cxx:300 #: lxGUI.cxx:297 msgid "&Contents...\tF1" msgstr "&Съдържание...\tF1" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:301 #: lxGUI.cxx:298 msgid "&Control" msgstr "&Контрол" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:302 #: lxGUI.cxx:299 msgid "&Rendering" msgstr "&Рендиране" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:303 #: lxGUI.cxx:300 msgid "&Bugs" msgstr "&Бъгове" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:305 #: lxGUI.cxx:302 msgid "&About..." msgstr "За &програмата..." # c:/cave/loch/loch/lxGUI.cxx:165 #: lxGUI.cxx:305 msgid "&File" msgstr "&Файл" # c:/cave/loch/loch/lxGUI.cxx:166 #: lxGUI.cxx:306 msgid "&View" msgstr "&Изглед" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:310 #: lxGUI.cxx:307 msgid "&Tools" msgstr "&ИнÑтрументи" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:311 #: lxGUI.cxx:308 msgid "&Help" msgstr "По&мощ" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:581 #: lxGUI.cxx:578 msgid "All supported files (*.lox;*.plt;*.3d)|*.lox;*.plt;*.3d|Loch files (*.lox)|*.lox|Compass PLT files (*.plt)|*.plt|Survex 3D files (*.3d)|*.3d" msgstr "Ð’Ñички поддържани файлове (*.lox;*.plt;*.3d)|*.lox;*.plt;*.3d|Loch файлове (*.lox)|*.lox|Compass PLT файлове (*.plt)|*.plt|Survex 3D файлове (*.3d)|*.3d" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:870 #: lxGUI.cxx:867 msgid "Building 3D model, please wait..." msgstr "Създавам 3D model, молÑ, изчакайте..." # C:/Projects/MSVCProjects/loch/lxGUI.cxx:899 #: lxGUI.cxx:896 msgid "Error reading input file" msgstr "Грешка при четене на входниÑÑ‚ файл" # c:/cave/loch/loch/lxData.cxx:360 # c:/cave/loch/loch/lxPrint.cxx:466 # c:/cave/loch/loch/lxPrint.cxx:995 # c:/cave/loch/loch/lxRender.cxx:655 #: lxGUI.cxx:896 #: lxRender.cxx:664 msgid "Error" msgstr "Грешка" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:43 #: lxOptDlg.cxx:43 msgid "Options" msgstr "ÐаÑтройки" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:50 #: lxOptDlg.cxx:50 msgid "General options" msgstr "Генерални наÑтройки" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:54 #: lxOptDlg.cxx:54 msgid "Default data files directory" msgstr "Стандартна директориÑ" # c:/cave/loch/loch/lxPrint.cxx:349 #: lxOptDlg.cxx:60 msgid "Browse..." msgstr "Преглед..." # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:65 #: lxOptDlg.cxx:64 msgid "Default stereo colors" msgstr "Стандартни Ñтерео цветове" # c:/cave/loch/loch/lxSView.cxx:430 #: lxOptDlg.cxx:68 #: lxSView.cxx:435 msgid "red & cyan" msgstr "червено & циÑн" # c:/cave/loch/loch/lxSView.cxx:431 #: lxOptDlg.cxx:69 #: lxSView.cxx:436 msgid "red & green" msgstr "червено & зелено" # c:/cave/loch/loch/lxSView.cxx:432 #: lxOptDlg.cxx:70 #: lxSView.cxx:437 msgid "red & blue" msgstr "червено & Ñиньо" # c:/cave/loch/loch/lxSView.cxx:433 #: lxOptDlg.cxx:71 #: lxSView.cxx:438 msgid "yellow & blue" msgstr "жълто & Ñиньо" # c:/cave/loch/loch/lxSView.cxx:434 #: lxOptDlg.cxx:72 #: lxSView.cxx:439 msgid "cyan & red" msgstr "циÑн & червено" # c:/cave/loch/loch/lxSView.cxx:435 #: lxOptDlg.cxx:73 #: lxSView.cxx:440 msgid "green & red" msgstr "зелено & червено" # c:/cave/loch/loch/lxSView.cxx:436 #: lxOptDlg.cxx:74 #: lxSView.cxx:441 msgid "blue & red" msgstr "Ñиньо & червено" # c:/cave/loch/loch/lxSView.cxx:437 #: lxOptDlg.cxx:75 #: lxSView.cxx:442 msgid "blue & yellow" msgstr "Ñиньо & жълто" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:77 #: lxOptDlg.cxx:76 msgid "remember last used channels" msgstr "запомни поÑледно използваните канали" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:85 #: lxOptDlg.cxx:84 msgid "Walls extrapolation" msgstr "ЕкÑÐ¿Ñ€Ð°Ð¿Ð¾Ð»Ð°Ñ†Ð¸Ñ Ð½Ð° Ñтени" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:89 #: lxOptDlg.cxx:88 msgid "Do not extrapolate walls" msgstr "Ðе екÑтраполирай Ñтените" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:92 #: lxOptDlg.cxx:91 msgid "Extrapolate only files without walls information" msgstr "ЕкÑтраполирай Ñамо файлове без Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° Ñтени" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:95 #: lxOptDlg.cxx:94 msgid "Extrapolate all missing walls information" msgstr "ЕкÑтраполирай вÑичката липÑтваща Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° Ñтени" # c:/cave/loch/loch/lxPrint.cxx:387 # c:/cave/loch/loch/lxRender.cxx:322 #: lxOptDlg.cxx:102 #: lxRender.cxx:321 msgid "OK" msgstr "OK" # c:/cave/loch/loch/lxPrint.cxx:388 # c:/cave/loch/loch/lxPrint.cxx:775 # c:/cave/loch/loch/lxRender.cxx:323 #: lxOptDlg.cxx:103 #: lxRender.cxx:322 msgid "Cancel" msgstr "Отказ" # c:/cave/loch/loch/lxRender.cxx:247 #: lxRender.cxx:246 msgid "Size and scaling" msgstr "Размер и мащабиране" # c:/cave/loch/loch/lxRender.cxx:251 #: lxRender.cxx:250 msgid "Screen shot" msgstr "Снимка на екрана" # c:/cave/loch/loch/lxRender.cxx:257 #: lxRender.cxx:256 msgid "Image width" msgstr "Ширина на Ñнимка" # c:/cave/loch/loch/lxRender.cxx:260 # c:/cave/loch/loch/lxRender.cxx:271 #: lxRender.cxx:259 #: lxRender.cxx:270 msgid "(mm)" msgstr "(mm)" # c:/cave/loch/loch/lxRender.cxx:268 #: lxRender.cxx:267 msgid "Image height" msgstr "ВиÑочина на Ñнимка" # c:/cave/loch/loch/lxRender.cxx:279 #: lxRender.cxx:278 msgid "Scale" msgstr "Размер" # c:/cave/loch/loch/lxRender.cxx:282 #: lxRender.cxx:281 msgid "1 :" msgstr "1 :" # c:/cave/loch/loch/lxRender.cxx:293 #: lxRender.cxx:292 msgid "Image options" msgstr "ÐаÑтройки на изображението" # c:/cave/loch/loch/lxPrint.cxx:302 # c:/cave/loch/loch/lxRender.cxx:297 #: lxRender.cxx:296 msgid "Rendering resolution (dpi)" msgstr "Ð ÐµÐ·Ð¾Ð»ÑŽÑ†Ð¸Ñ Ð½Ð° рендирането (dpi)" # c:/cave/loch/loch/lxRender.cxx:307 #: lxRender.cxx:306 msgid "Image size:" msgstr "Размер на изображението:" # c:/cave/loch/loch/lxRender.cxx:310 #: lxRender.cxx:309 msgid "00 x 00 (00.0 MB)" msgstr "00 x 00 (00.0 MB)" # c:/cave/loch/loch/lxPrint.cxx:295 # c:/cave/loch/loch/lxRender.cxx:315 #: lxRender.cxx:314 msgid "White background" msgstr "БÑл фон" # c:/cave/loch/loch/lxRender.cxx:437 #: lxRender.cxx:436 msgid "Save rendering as" msgstr "Запиши рендираното като" # c:/cave/loch/loch/lxPrint.cxx:183 # c:/cave/loch/loch/lxRender.cxx:439 #: lxRender.cxx:438 msgid "PPM files (*.ppm)|*.ppm" msgstr "PPM файл (*.ppm)|*.ppm" # c:/cave/loch/loch/lxRender.cxx:441 #: lxRender.cxx:440 msgid "PDF files (*.pdf)|*.pdf|PNG files (*.png)|*.png|BMP files (*.bmp)|*.bmp" msgstr "PDF файл (*.pdf)|*.pdf|PNG файл (*.png)|*.png|BMP файл (*.bmp)|*.bmp" # c:/cave/loch/loch/lxPrint.cxx:627 # c:/cave/loch/loch/lxPrint.cxx:647 # c:/cave/loch/loch/lxPrint.cxx:872 # c:/cave/loch/loch/lxPrint.cxx:892 # c:/cave/loch/loch/lxRender.cxx:455 #: lxRender.cxx:454 msgid "Unable to open file for output." msgstr "ÐеуÑпех при Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° файл." # c:/cave/loch/loch/lxPrint.cxx:921 # c:/cave/loch/loch/lxRender.cxx:493 #: lxRender.cxx:492 #, c-format msgid "Rendering (%d x %d, %.1f MB) ..." msgstr "Рендиране (%d x %d, %.1f MB) ..." # c:/cave/loch/loch/lxRender.cxx:494 #: lxRender.cxx:493 msgid "Rendering to bitmap" msgstr "Рендиране към изображение" # c:/cave/loch/loch/lxSScene.cxx:147 #: lxSScene.cxx:196 msgid " Scene" msgstr "Сцена" # c:/cave/loch/loch/lxSScene.cxx:167 # c:/cave/loch/loch/lxSScene.cxx:335 #: lxSScene.cxx:216 msgid "Visibility" msgstr "ВидимоÑÑ‚" # c:/cave/loch/loch/lxSScene.cxx:168 #: lxSScene.cxx:217 #: lxSScene.cxx:271 msgid "Color mode" msgstr "Режим на цветовете" # c:/cave/loch/loch/lxSScene.cxx:199 #: lxSScene.cxx:248 msgid "Scene items" msgstr "Обекти в Ñцената" # c:/cave/loch/loch/lxSScene.cxx:224 #: lxSScene.cxx:279 msgid "Default" msgstr "Стандартни" # c:/cave/loch/loch/lxSScene.cxx:230 #: lxSScene.cxx:285 msgid "Applies to" msgstr "ОтнаÑÑ Ñе за" # c:/cave/loch/loch/lxSScene.cxx:243 #: lxSScene.cxx:298 msgid "Centerline visibility" msgstr "ВидимоÑÑ‚ на антената" # c:/cave/loch/loch/lxSScene.cxx:244 #: lxSScene.cxx:299 msgid "Underground" msgstr "ПодземÑта" # c:/cave/loch/loch/lxSScene.cxx:265 # c:/cave/loch/loch/lxSScene.cxx:278 #: lxSScene.cxx:317 #: lxSScene.cxx:330 msgid "Transparency" msgstr "ПрозрачноÑÑ‚" # c:/cave/loch/loch/lxSScene.cxx:282 #: lxSScene.cxx:334 msgid "Texture" msgstr "ТекÑтура" # C:/Projects/MSVCProjects/loch/lxSScene.cxx:398 #: lxSScene.cxx:392 msgid "Project title" msgstr "Име на проекта" # c:/cave/loch/loch/lxSScene.cxx:389 # c:/cave/loch/loch/lxSView.cxx:464 #: lxSScene.cxx:424 #: lxSView.cxx:470 msgid "Close" msgstr "Затвори" # C:/Projects/MSVCProjects/loch/lxSView.cxx:228 #: lxSView.cxx:228 msgid " Camera" msgstr "Камера" # c:/cave/loch/loch/lxSView.cxx:255 #: lxSView.cxx:260 msgid "Center" msgstr "Център" # C:/Projects/MSVCProjects/loch/lxSView.cxx:261 #: lxSView.cxx:261 msgid "Focus" msgstr "ФокуÑ" # c:/cave/loch/loch/lxSView.cxx:287 #: lxSView.cxx:292 msgid "Facing (deg)" msgstr "Ðзимут (градуÑи)" # c:/cave/loch/loch/lxSView.cxx:298 #: lxSView.cxx:303 msgid "Tilt (deg)" msgstr "Ðаклон (градуÑи)" # c:/cave/loch/loch/lxSView.cxx:323 #: lxSView.cxx:328 msgid "Rotation center" msgstr "Център на ротациÑ" # c:/cave/loch/loch/lxSView.cxx:327 #: lxSView.cxx:332 msgid "Easting (m)" msgstr "X - изток (m)" # c:/cave/loch/loch/lxSView.cxx:335 #: lxSView.cxx:340 msgid "Northing (m)" msgstr "Y - Ñевер (m)" # c:/cave/loch/loch/lxSView.cxx:343 #: lxSView.cxx:348 msgid "Altitude (m)" msgstr "Ðадм. виÑочина (m)" # c:/cave/loch/loch/lxSView.cxx:364 #: lxSView.cxx:369 msgid "Distance (m)" msgstr "РазÑтоÑние (m)" # c:/cave/loch/loch/lxSView.cxx:379 #: lxSView.cxx:384 msgid "Focus (mm)" msgstr "Ð¤Ð¾ÐºÑƒÑ (mm)" # c:/cave/loch/loch/lxSView.cxx:399 #: lxSView.cxx:404 msgid "Enable rotation" msgstr "Включи ротациÑ" # c:/cave/loch/loch/lxSView.cxx:401 #: lxSView.cxx:406 msgid "Rotation speed" msgstr "СкороÑÑ‚ на ротациÑ" # c:/cave/loch/loch/lxSView.cxx:422 #: lxSView.cxx:427 msgid "Enable stereo mode" msgstr "Стерео изображение" # c:/cave/loch/loch/lxSView.cxx:423 #: lxSView.cxx:428 msgid "Eye separation" msgstr "РаздалеченоÑÑ‚ на очите" # C:/Projects/MSVCProjects/loch/lxSView.cxx:445 #: lxSView.cxx:445 msgid "Disable color textures" msgstr "Изключи цветните текÑтури" # c:/cave/loch/loch/lxSView.cxx:441 #: lxSView.cxx:447 msgid "Color channels" msgstr "Цветни канали" # c:/cave/loch/loch/lxSView.cxx:524 #: lxSView.cxx:530 msgid "Lock rotation speed" msgstr "Заключи ÑкороÑтта на ротациÑ" # c:/cave/loch/loch/lxWX.cxx:200 #: lxWX.cxx:200 #, c-format msgid "%ld" msgstr "%ld" # c:/cave/loch/loch/lxWX.cxx:206 #: lxWX.cxx:206 #, c-format msgid "%.14e" msgstr "%.14e" therion/loch/locale/sk/0000755000076400010400000000000012050456020016060 5ustar userAdministratorstherion/loch/locale/sk/loch.mo0000644000076400010400000002131610645416266017365 0ustar userAdministratorsÞ•Ÿß ˆ ‰ ‘ ˜   ¦ ­ ± » Á É Ù â è î ô û , CNU\cjpv{‘ ±¼ŒÃP Y f q ~!ˆª ±¾Å Ì×íó  2H _l … ’ž®ÁÇ)à0 ; JW` f q}  ª ¸ Ä Ð Ûéý#9O b o| „Ž –¢ ¨³Gà # (2; C P^ eqx‡ ›¼Óîþ(:LUet†Œ ’ ž ª¶ÈØ è õ $, 4 ?L lx  —¢¨¼ÍÝ ðü   ' 2> E P [g ƒh‘ú #29 A NZckry œ¦¿ Ýêñù þ 1$5Zb›h) 2 ?(Iry‹”š£ »Å Ö ä!ñ-CTdsƒ›­³'Ï*÷" 5AQ YfvŠ¡²ÆÚ ë÷ -BXrŒ¢ ºÈËÔ ä ï û M-{•ž§°¸ÀÐá ø 4Um€—®´Éá ù  + A H O _ q ‚ – ¦ ¹ Ç Ô ç î !! !! *!K!T!k! s!!‡! ›!©!Â!Ù!é!""$"="Q"Z"m"†"#š"¾"WzN0<`  G;KXD_žCŽj=“‡&tawFY‘oZi+M]~c.V™'‚*|:$PH”s8 (?Bn’5@^ƒŸ˜Qœ9‰7,†‹L uElJhpTR x-![)ˆ3›m4/r61O–kAf>bvš%gd…\y"{ŒqU 2e#—ŠSI}•€„ Camera Scene%+03d°%.14e%03d°%ld&About...&Bugs&Camera&Contents... F1&Control&East&File&Help&North&Open... Ctrl+O&Options...&Plan&Reload Ctrl+R&Render to file Ctrl+P&Rendering&Reset&Scene&South&Tools&View&West(mm)00 x 00 (00.0 MB)1 :3D visualization tool for cavesAbout LochActionAll supported files (*.lox;*.plt;*.3d)|*.lox;*.plt;*.3d|Loch files (*.lox)|*.lox|Compass PLT files (*.plt)|*.plt|Survex 3D files (*.3d)|*.3dAltitudeAltitude (m)Applies toBounding boxBrowse...Building 3D model, please wait...CameraCamera setupCancelCenterCenterlineCenterline visibilityCloseColor channelsColor modeDefaultDefault data files directoryDefault stereo colorsDisable color texturesDistance (m)Do not extrapolate wallsE&xit Ctrl+QEasting (m)Enable rotationEnable stereo modeErrorError reading input fileExtrapolate all missing walls informationExtrapolate only files without walls informationEye separationFacing (deg)Fit zoomFocusFocus (mm)Full screenFull screen F11General optionsImage heightImage optionsImage size:Image widthIndicatorsLock rotationLock rotation speedLower viewpoint UpMove down Shift+UpMove left Shift+RightMove right Shift+LeftMove up Shift+DownNo file openNorthing (m)OKOpenOpen fileOptionsOrientationOrthoOrthogonalOrthogonal viewPDF files (*.pdf)|*.pdf|PNG files (*.png)|*.png|BMP files (*.bmp)|*.bmpPPM files (*.ppm)|*.ppmPlanPlan viewPro&fileProfileProfile viewProject titleReloadReload fileRenderRender to fileRendering &setup...Rendering (%d x %d, %.1f MB) ...Rendering at %.1f fps.Rendering resolution (dpi)Rendering setupRendering to bitmapResetReset viewpointRotate left RightRotate right LeftRotationRotation centerRotation speedSave rendering asScaleSceneScene itemsScene setupScreen shotShow bounding boxShow centerlineShow indicatorsShow surfaceShow wallsSize and scalingStereoStereo modeSurfaceTextureTilt (deg)TransparencyUnable to open file for output.UndergroundUpper viewpoint DownVersion: VisibilityWallsWalls extrapolationWhite backgroundZoom in Ctrl+UpZoom out Ctrl+DownZoom to fitZoom to fit Spaceblue & redblue & yellowcyan & redgreen & rednonamered & bluered & cyanred & greenremember last used channelsyellow & blueProject-Id-Version: Loch POT-Creation-Date: PO-Revision-Date: 2007-07-12 09:21+0100 Last-Translator: aa Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Poedit-Language: Slovak X-Poedit-Country: SLOVAKIA X-Poedit-SourceCharset: iso-8859-1 X-Poedit-Basepath: ../.. X-Poedit-SearchPath-0: . Kamera Scéna%+03d°%.14e%03d°%ldO &programe...&Chyby&Kamera&Obsah... F1O&vládanie&Východ&SúborPo&moc&Sever&OtvoriÅ¥... Ctrl+O&Nastavenia...&Pôdorys&Znovu naÄítaÅ¥ Ctrl+R&RendrovaÅ¥ do súboru Ctrl+P&Rendrovanie&Reset&Scéna&Juh&Nástroje&Pohľad&Západ(mm)00 x 00 (00.0 MB)1 :Program na 3D vizualizáciu jaskýňO LochuAkciaVÅ¡etky podporované súbory (*.lox;*.plt;*.3d)|*.lox;*.plt;*.3d|Loch súbory (*.lox)|*.lox|Compass PLT súbory (*.plt)|*.plt|Survex 3D súbory (*.3d)|*.3dNadmorská výškaNadm. výška (m)Týka saOhraniÄenieNájdi...Spracúvam 3D model, prosím Äakajte...KameraNastavenie kameryZruÅ¡iÅ¥StredPolygónViditeľnosÅ¥ polygónuZatvoriÅ¥Farebné kanályFarebný módÅ tandardnéŠtandardný adresár so súbormiÅ tandardné stereo farbyÄŒiernobiele textúryVzdialenosÅ¥ (m)NeextrapolovaÅ¥&Koniec Ctrl+QX - východ (m)Automatické otáÄanieStereo zobrazenieChybaChyba pri Äítaní súboruExtrapolovaÅ¥ vÅ¡etky chýbajúce stenyExtrapolovaÅ¥ len súbory úplne bez stienVzdialenosÅ¥ oÄíAzimut (st)Optimálny zoomOhniskoOhnisko (mm)Celá obrazovkaCelá obrazovka F11VÅ¡eobecné nastaveniaVýška obrázkuNastavenia obrázkuVeľkosÅ¥ obrázku:Šírka obrázkuIndikátoryZamknúť otáÄanieUzamknúť rýchlosÅ¥ otáÄaniaZmenÅ¡iÅ¥ sklon HorePosun dolu Shift+HorePosun vľavo Shift+VpravoPosun vpravo Shift+VľavoPosun hore Shift+DoleNie je otvorený súborY - sever (m)OKOtvoriÅ¥OtvoriÅ¥ súborNastaveniaOrientáciaOrtogonálneOrtogonálneOrtogonálne zobrazeniePDF súbory (*.pdf)|*.pdf|PNG súbory (*.png)|*.png|BMP súbory (*.bmp)|*.bmpPPM súbory (*.ppm)|*.ppmPôdorysPôdorysBoko&rysBokorysBokorysNázov projektuZnovu naÄítaÅ¥Znovu naÄíaÅ¥ súborRendrovaÅ¥RendrovaÅ¥ do súboruNa&stavenie rendrovania...Rendrujem (%d x %d, %.1f MB) ...Rendrovanie (%.1f fps).Rozlíšenie (dpi)Nastavenie rendrovaniaRendrovanie do súboruResetÅ tandardný pohľadOtoÄiÅ¥ doľava VpravoOtoÄiÅ¥ doprava VľavoOtáÄanieStred otáÄaniaRýchlosÅ¥ otáÄaniaUložiÅ¥ obrázok akoMierkaScénaPoložky scényNastavenie scényKópia obrazovkyZobraz ohraniÄenieZobraz polygónZobraz indikátoryZobraz povrchZobraz stenyVeľkosÅ¥ a mierkaStereoStereo zobrazeniePovrchTextúrySklon (st)PriehľadnosÅ¥Nemôžem zapisovaÅ¥ do súboru.PodzemieZväÄÅ¡iÅ¥ sklon DoleVerzia:ViditeľnosÅ¥StenyExtrapolácia stienBiele pozadieZväÄÅ¡i zoom Ctrl+HoreZmenÅ¡i zoom Ctrl+DoleOptimálny zoomOptimálny zoom Medzeramodrá & Äervenámodrá & žltázelenomodrá & Äervenázelená & Äervenábez menaÄervená & modráÄervená & zelenomodráÄervená & zelenápamätaÅ¥ naposledy použité farbyžltá & modrátherion/loch/locale/sk/loch.po0000644000076400010400000004632610645416266017400 0ustar userAdministratorsmsgid "" msgstr "" "Project-Id-Version: Loch\n" "POT-Creation-Date: \n" "PO-Revision-Date: 2007-07-12 09:21+0100\n" "Last-Translator: aa \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Slovak\n" "X-Poedit-Country: SLOVAKIA\n" "X-Poedit-SourceCharset: iso-8859-1\n" "X-Poedit-Basepath: ../..\n" "X-Poedit-SearchPath-0: .\n" # C:/Projects/MSVCProjects/loch/lxAboutDlg.cxx:53 #: lxAboutDlg.cxx:54 msgid "About Loch" msgstr "O Lochu" # C:/Projects/MSVCProjects/loch/lxAboutDlg.cxx:76 #: lxAboutDlg.cxx:77 msgid "3D visualization tool for caves" msgstr "Program na 3D vizualizáciu jaskýň" # C:/Projects/MSVCProjects/loch/lxAboutDlg.cxx:78 #: lxAboutDlg.cxx:79 msgid "Version: " msgstr "Verzia:" #: lxData.cxx:84 msgid "No file open" msgstr "Nie je otvorený súbor" # c:/cave/loch/loch/lxGLCs.cxx:381 #: lxGLCs.cxx:412 #, c-format msgid "Rendering at %.1f fps." msgstr "Rendrovanie (%.1f fps)." # c:/cave/loch/loch/lxGLCx.cxx:542 #: lxGLCx.cxx:605 #, c-format msgid "%03d°" msgstr "%03d°" # c:/cave/loch/loch/lxGLCx.cxx:633 #: lxGLCx.cxx:696 #, c-format msgid "%+03d°" msgstr "%+03d°" # c:/cave/loch/loch/lxSScene.cxx:222 # c:/cave/loch/loch/lxSScene.cxx:324 #: lxGLCx.cxx:736 #: lxSScene.cxx:273 msgid "Altitude" msgstr "Nadmorská výška" # c:/cave/loch/loch/lxGUI.cxx:94 #: lxGUI.cxx:155 msgid "noname" msgstr "bez mena" # c:/cave/loch/loch/lxGUI.cxx:98 # c:/cave/loch/loch/lxGUI.cxx:354 #: lxGUI.cxx:206 #: lxGUI.cxx:575 msgid "Open" msgstr "OtvoriÅ¥" # c:/cave/loch/loch/lxGUI.cxx:98 #: lxGUI.cxx:206 msgid "Open file" msgstr "OtvoriÅ¥ súbor" # c:/cave/loch/loch/lxGUI.cxx:99 #: lxGUI.cxx:207 msgid "Reload" msgstr "Znovu naÄítaÅ¥" # c:/cave/loch/loch/lxGUI.cxx:99 #: lxGUI.cxx:207 msgid "Reload file" msgstr "Znovu naÄíaÅ¥ súbor" # c:/cave/loch/loch/lxGUI.cxx:100 #: lxGUI.cxx:209 msgid "Render" msgstr "RendrovaÅ¥" # c:/cave/loch/loch/lxGUI.cxx:100 #: lxGUI.cxx:209 msgid "Render to file" msgstr "RendrovaÅ¥ do súboru" # c:/cave/loch/loch/lxPrint.cxx:291 # c:/cave/loch/loch/lxRender.cxx:237 #: lxGUI.cxx:210 #: lxRender.cxx:236 msgid "Rendering setup" msgstr "Nastavenie rendrovania" # c:/cave/loch/loch/lxGUI.cxx:102 # c:/cave/loch/loch/lxGUI.cxx:152 # c:/cave/loch/loch/lxSView.cxx:257 #: lxGUI.cxx:212 #: lxGUI.cxx:275 #: lxGUI.cxx:283 #: lxSView.cxx:262 msgid "Rotation" msgstr "OtáÄanie" # c:/cave/loch/loch/lxGUI.cxx:103 # c:/cave/loch/loch/lxGUI.cxx:153 # c:/cave/loch/loch/lxSView.cxx:400 # c:/cave/loch/loch/lxSView.cxx:526 #: lxGUI.cxx:213 #: lxGUI.cxx:276 #: lxGUI.cxx:284 #: lxSView.cxx:405 #: lxSView.cxx:532 msgid "Lock rotation" msgstr "Zamknúť otáÄanie" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:217 #: lxGUI.cxx:214 msgid "Ortho" msgstr "Ortogonálne" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:217 # C:/Projects/MSVCProjects/loch/lxSView.cxx:380 #: lxGUI.cxx:214 #: lxSView.cxx:380 msgid "Orthogonal view" msgstr "Ortogonálne zobrazenie" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:218 #: lxGUI.cxx:215 msgid "Stereo" msgstr "Stereo" # c:/cave/loch/loch/lxGUI.cxx:107 # c:/cave/loch/loch/lxSView.cxx:258 #: lxGUI.cxx:215 #: lxSView.cxx:263 msgid "Stereo mode" msgstr "Stereo zobrazenie" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:220 #: lxGUI.cxx:217 msgid "Plan" msgstr "Pôdorys" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:220 #: lxGUI.cxx:217 msgid "Plan view" msgstr "Pôdorys" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:221 #: lxGUI.cxx:218 msgid "Profile" msgstr "Bokorys" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:221 #: lxGUI.cxx:218 msgid "Profile view" msgstr "Bokorys" # c:/cave/loch/loch/lxGUI.cxx:104 #: lxGUI.cxx:219 msgid "Fit zoom" msgstr "Optimálny zoom" # c:/cave/loch/loch/lxGUI.cxx:104 #: lxGUI.cxx:219 msgid "Zoom to fit" msgstr "Optimálny zoom" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:223 #: lxGUI.cxx:220 msgid "Reset" msgstr "Reset" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:223 #: lxGUI.cxx:220 msgid "Reset viewpoint" msgstr "Å tandardný pohľad" # c:/cave/loch/loch/lxSScene.cxx:169 # c:/cave/loch/loch/lxSScene.cxx:200 # c:/cave/loch/loch/lxSScene.cxx:231 # c:/cave/loch/loch/lxSScene.cxx:362 #: lxGUI.cxx:222 #: lxSScene.cxx:218 #: lxSScene.cxx:249 #: lxSScene.cxx:286 msgid "Centerline" msgstr "Polygón" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:225 #: lxGUI.cxx:222 msgid "Show centerline" msgstr "Zobraz polygón" # c:/cave/loch/loch/lxSScene.cxx:170 # c:/cave/loch/loch/lxSScene.cxx:201 # c:/cave/loch/loch/lxSScene.cxx:232 # c:/cave/loch/loch/lxSScene.cxx:363 #: lxGUI.cxx:223 #: lxSScene.cxx:219 #: lxSScene.cxx:250 #: lxSScene.cxx:287 msgid "Walls" msgstr "Steny" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:226 #: lxGUI.cxx:223 msgid "Show walls" msgstr "Zobraz steny" # c:/cave/loch/loch/lxSScene.cxx:171 # c:/cave/loch/loch/lxSScene.cxx:202 # c:/cave/loch/loch/lxSScene.cxx:233 # c:/cave/loch/loch/lxSScene.cxx:245 # c:/cave/loch/loch/lxSScene.cxx:364 #: lxGUI.cxx:224 #: lxSScene.cxx:220 #: lxSScene.cxx:251 #: lxSScene.cxx:300 msgid "Surface" msgstr "Povrch" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:227 #: lxGUI.cxx:224 msgid "Show surface" msgstr "Zobraz povrch" # c:/cave/loch/loch/lxSScene.cxx:204 # c:/cave/loch/loch/lxSScene.cxx:365 #: lxGUI.cxx:225 #: lxSScene.cxx:253 msgid "Bounding box" msgstr "OhraniÄenie" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:228 #: lxGUI.cxx:225 msgid "Show bounding box" msgstr "Zobraz ohraniÄenie" # c:/cave/loch/loch/lxSScene.cxx:174 #: lxGUI.cxx:226 #: lxSScene.cxx:223 #: lxSScene.cxx:255 msgid "Indicators" msgstr "Indikátory" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:229 #: lxGUI.cxx:226 msgid "Show indicators" msgstr "Zobraz indikátory" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:231 #: lxGUI.cxx:228 msgid "Camera setup" msgstr "Nastavenie kamery" # c:/cave/loch/loch/lxGUI.cxx:110 #: lxGUI.cxx:229 msgid "Scene setup" msgstr "Nastavenie scény" # c:/cave/loch/loch/lxGUI.cxx:112 #: lxGUI.cxx:231 msgid "Full screen" msgstr "Celá obrazovka" # c:/cave/loch/loch/lxGUI.cxx:117 #: lxGUI.cxx:236 msgid "&Open...\tCtrl+O" msgstr "&OtvoriÅ¥...\tCtrl+O" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:240 #: lxGUI.cxx:237 msgid "&Reload\tCtrl+R" msgstr "&Znovu naÄítaÅ¥\tCtrl+R" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:242 #: lxGUI.cxx:239 msgid "&Render to file\tCtrl+P" msgstr "&RendrovaÅ¥ do súboru\tCtrl+P" # c:/cave/loch/loch/lxGUI.cxx:121 #: lxGUI.cxx:240 msgid "Rendering &setup..." msgstr "Na&stavenie rendrovania..." # C:/Projects/MSVCProjects/loch/lxGUI.cxx:245 #: lxGUI.cxx:242 msgid "E&xit\tCtrl+Q" msgstr "&Koniec\tCtrl+Q" # c:/cave/loch/loch/lxGUI.cxx:126 #: lxGUI.cxx:247 msgid "Rotate left\tRight" msgstr "OtoÄiÅ¥ doľava\tVpravo" # c:/cave/loch/loch/lxGUI.cxx:127 #: lxGUI.cxx:248 msgid "Rotate right\tLeft" msgstr "OtoÄiÅ¥ doprava\tVľavo" # c:/cave/loch/loch/lxGUI.cxx:129 #: lxGUI.cxx:250 msgid "Upper viewpoint\tDown" msgstr "ZväÄÅ¡iÅ¥ sklon\tDole" # c:/cave/loch/loch/lxGUI.cxx:130 #: lxGUI.cxx:251 msgid "Lower viewpoint\tUp" msgstr "ZmenÅ¡iÅ¥ sklon\tHore" # c:/cave/loch/loch/lxGUI.cxx:132 #: lxGUI.cxx:253 msgid "Move up\tShift+Down" msgstr "Posun hore\tShift+Dole" # c:/cave/loch/loch/lxGUI.cxx:133 #: lxGUI.cxx:254 msgid "Move down\tShift+Up" msgstr "Posun dolu\tShift+Hore" # c:/cave/loch/loch/lxGUI.cxx:134 #: lxGUI.cxx:255 msgid "Move left\tShift+Right" msgstr "Posun vľavo\tShift+Vpravo" # c:/cave/loch/loch/lxGUI.cxx:135 #: lxGUI.cxx:256 msgid "Move right\tShift+Left" msgstr "Posun vpravo\tShift+Vľavo" # c:/cave/loch/loch/lxGUI.cxx:137 #: lxGUI.cxx:258 msgid "Zoom in\tCtrl+Up" msgstr "ZväÄÅ¡i zoom\tCtrl+Hore" # c:/cave/loch/loch/lxGUI.cxx:138 #: lxGUI.cxx:259 msgid "Zoom out\tCtrl+Down" msgstr "ZmenÅ¡i zoom\tCtrl+Dole" # c:/cave/loch/loch/lxGUI.cxx:139 #: lxGUI.cxx:260 msgid "Zoom to fit\tSpace" msgstr "Optimálny zoom\tMedzera" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:266 #: lxGUI.cxx:263 msgid "&Plan" msgstr "&Pôdorys" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:267 #: lxGUI.cxx:264 msgid "Pro&file" msgstr "Boko&rys" # c:/cave/loch/loch/lxGUI.cxx:144 #: lxGUI.cxx:266 msgid "&North" msgstr "&Sever" # c:/cave/loch/loch/lxGUI.cxx:145 #: lxGUI.cxx:267 msgid "&West" msgstr "&Západ" # c:/cave/loch/loch/lxGUI.cxx:146 #: lxGUI.cxx:268 msgid "&East" msgstr "&Východ" # c:/cave/loch/loch/lxGUI.cxx:147 #: lxGUI.cxx:269 msgid "&South" msgstr "&Juh" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:274 #: lxGUI.cxx:271 msgid "&Reset" msgstr "&Reset" # c:/cave/loch/loch/lxSView.cxx:256 #: lxGUI.cxx:278 msgid "Camera" msgstr "Kamera" # c:/cave/loch/loch/lxGUI.cxx:161 #: lxGUI.cxx:279 msgid "Scene" msgstr "Scéna" # c:/cave/loch/loch/lxGUI.cxx:151 #: lxGUI.cxx:282 msgid "Action" msgstr "Akcia" # c:/cave/loch/loch/lxSView.cxx:254 #: lxGUI.cxx:285 #: lxSView.cxx:259 msgid "Orientation" msgstr "Orientácia" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:289 #: lxGUI.cxx:286 msgid "Orthogonal" msgstr "Ortogonálne" # c:/cave/loch/loch/lxGUI.cxx:157 #: lxGUI.cxx:288 msgid "Full screen\tF11" msgstr "Celá obrazovka\tF11" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:294 #: lxGUI.cxx:291 msgid "&Camera" msgstr "&Kamera" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:295 #: lxGUI.cxx:292 msgid "&Scene" msgstr "&Scéna" # c:/cave/loch/loch/lxGUI.cxx:117 #: lxGUI.cxx:294 msgid "&Options..." msgstr "&Nastavenia..." # C:/Projects/MSVCProjects/loch/lxGUI.cxx:300 #: lxGUI.cxx:297 msgid "&Contents...\tF1" msgstr "&Obsah...\tF1" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:301 #: lxGUI.cxx:298 msgid "&Control" msgstr "O&vládanie" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:302 #: lxGUI.cxx:299 msgid "&Rendering" msgstr "&Rendrovanie" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:303 #: lxGUI.cxx:300 msgid "&Bugs" msgstr "&Chyby" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:305 #: lxGUI.cxx:302 msgid "&About..." msgstr "O &programe..." # c:/cave/loch/loch/lxGUI.cxx:165 #: lxGUI.cxx:305 msgid "&File" msgstr "&Súbor" # c:/cave/loch/loch/lxGUI.cxx:166 #: lxGUI.cxx:306 msgid "&View" msgstr "&Pohľad" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:310 #: lxGUI.cxx:307 msgid "&Tools" msgstr "&Nástroje" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:311 #: lxGUI.cxx:308 msgid "&Help" msgstr "Po&moc" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:581 #: lxGUI.cxx:578 msgid "All supported files (*.lox;*.plt;*.3d)|*.lox;*.plt;*.3d|Loch files (*.lox)|*.lox|Compass PLT files (*.plt)|*.plt|Survex 3D files (*.3d)|*.3d" msgstr "VÅ¡etky podporované súbory (*.lox;*.plt;*.3d)|*.lox;*.plt;*.3d|Loch súbory (*.lox)|*.lox|Compass PLT súbory (*.plt)|*.plt|Survex 3D súbory (*.3d)|*.3d" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:870 #: lxGUI.cxx:867 msgid "Building 3D model, please wait..." msgstr "Spracúvam 3D model, prosím Äakajte..." # C:/Projects/MSVCProjects/loch/lxGUI.cxx:899 #: lxGUI.cxx:896 msgid "Error reading input file" msgstr "Chyba pri Äítaní súboru" # c:/cave/loch/loch/lxData.cxx:360 # c:/cave/loch/loch/lxPrint.cxx:466 # c:/cave/loch/loch/lxPrint.cxx:995 # c:/cave/loch/loch/lxRender.cxx:655 #: lxGUI.cxx:896 #: lxRender.cxx:664 msgid "Error" msgstr "Chyba" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:43 #: lxOptDlg.cxx:43 msgid "Options" msgstr "Nastavenia" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:50 #: lxOptDlg.cxx:50 msgid "General options" msgstr "VÅ¡eobecné nastavenia" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:54 #: lxOptDlg.cxx:54 msgid "Default data files directory" msgstr "Å tandardný adresár so súbormi" # c:/cave/loch/loch/lxPrint.cxx:349 #: lxOptDlg.cxx:60 msgid "Browse..." msgstr "Nájdi..." # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:65 #: lxOptDlg.cxx:64 msgid "Default stereo colors" msgstr "Å tandardné stereo farby" # c:/cave/loch/loch/lxSView.cxx:430 #: lxOptDlg.cxx:68 #: lxSView.cxx:435 msgid "red & cyan" msgstr "Äervená & zelenomodrá" # c:/cave/loch/loch/lxSView.cxx:431 #: lxOptDlg.cxx:69 #: lxSView.cxx:436 msgid "red & green" msgstr "Äervená & zelená" # c:/cave/loch/loch/lxSView.cxx:432 #: lxOptDlg.cxx:70 #: lxSView.cxx:437 msgid "red & blue" msgstr "Äervená & modrá" # c:/cave/loch/loch/lxSView.cxx:433 #: lxOptDlg.cxx:71 #: lxSView.cxx:438 msgid "yellow & blue" msgstr "žltá & modrá" # c:/cave/loch/loch/lxSView.cxx:434 #: lxOptDlg.cxx:72 #: lxSView.cxx:439 msgid "cyan & red" msgstr "zelenomodrá & Äervená" # c:/cave/loch/loch/lxSView.cxx:435 #: lxOptDlg.cxx:73 #: lxSView.cxx:440 msgid "green & red" msgstr "zelená & Äervená" # c:/cave/loch/loch/lxSView.cxx:436 #: lxOptDlg.cxx:74 #: lxSView.cxx:441 msgid "blue & red" msgstr "modrá & Äervená" # c:/cave/loch/loch/lxSView.cxx:437 #: lxOptDlg.cxx:75 #: lxSView.cxx:442 msgid "blue & yellow" msgstr "modrá & žltá" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:77 #: lxOptDlg.cxx:76 msgid "remember last used channels" msgstr "pamätaÅ¥ naposledy použité farby" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:85 #: lxOptDlg.cxx:84 msgid "Walls extrapolation" msgstr "Extrapolácia stien" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:89 #: lxOptDlg.cxx:88 msgid "Do not extrapolate walls" msgstr "NeextrapolovaÅ¥" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:92 #: lxOptDlg.cxx:91 msgid "Extrapolate only files without walls information" msgstr "ExtrapolovaÅ¥ len súbory úplne bez stien" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:95 #: lxOptDlg.cxx:94 msgid "Extrapolate all missing walls information" msgstr "ExtrapolovaÅ¥ vÅ¡etky chýbajúce steny" # c:/cave/loch/loch/lxPrint.cxx:387 # c:/cave/loch/loch/lxRender.cxx:322 #: lxOptDlg.cxx:102 #: lxRender.cxx:321 msgid "OK" msgstr "OK" # c:/cave/loch/loch/lxPrint.cxx:388 # c:/cave/loch/loch/lxPrint.cxx:775 # c:/cave/loch/loch/lxRender.cxx:323 #: lxOptDlg.cxx:103 #: lxRender.cxx:322 msgid "Cancel" msgstr "ZruÅ¡iÅ¥" # c:/cave/loch/loch/lxRender.cxx:247 #: lxRender.cxx:246 msgid "Size and scaling" msgstr "VeľkosÅ¥ a mierka" # c:/cave/loch/loch/lxRender.cxx:251 #: lxRender.cxx:250 msgid "Screen shot" msgstr "Kópia obrazovky" # c:/cave/loch/loch/lxRender.cxx:257 #: lxRender.cxx:256 msgid "Image width" msgstr "Šírka obrázku" # c:/cave/loch/loch/lxRender.cxx:260 # c:/cave/loch/loch/lxRender.cxx:271 #: lxRender.cxx:259 #: lxRender.cxx:270 msgid "(mm)" msgstr "(mm)" # c:/cave/loch/loch/lxRender.cxx:268 #: lxRender.cxx:267 msgid "Image height" msgstr "Výška obrázku" # c:/cave/loch/loch/lxRender.cxx:279 #: lxRender.cxx:278 msgid "Scale" msgstr "Mierka" # c:/cave/loch/loch/lxRender.cxx:282 #: lxRender.cxx:281 msgid "1 :" msgstr "1 :" # c:/cave/loch/loch/lxRender.cxx:293 #: lxRender.cxx:292 msgid "Image options" msgstr "Nastavenia obrázku" # c:/cave/loch/loch/lxPrint.cxx:302 # c:/cave/loch/loch/lxRender.cxx:297 #: lxRender.cxx:296 msgid "Rendering resolution (dpi)" msgstr "Rozlíšenie (dpi)" # c:/cave/loch/loch/lxRender.cxx:307 #: lxRender.cxx:306 msgid "Image size:" msgstr "VeľkosÅ¥ obrázku:" # c:/cave/loch/loch/lxRender.cxx:310 #: lxRender.cxx:309 msgid "00 x 00 (00.0 MB)" msgstr "00 x 00 (00.0 MB)" # c:/cave/loch/loch/lxPrint.cxx:295 # c:/cave/loch/loch/lxRender.cxx:315 #: lxRender.cxx:314 msgid "White background" msgstr "Biele pozadie" # c:/cave/loch/loch/lxRender.cxx:437 #: lxRender.cxx:436 msgid "Save rendering as" msgstr "UložiÅ¥ obrázok ako" # c:/cave/loch/loch/lxPrint.cxx:183 # c:/cave/loch/loch/lxRender.cxx:439 #: lxRender.cxx:438 msgid "PPM files (*.ppm)|*.ppm" msgstr "PPM súbory (*.ppm)|*.ppm" # c:/cave/loch/loch/lxRender.cxx:441 #: lxRender.cxx:440 msgid "PDF files (*.pdf)|*.pdf|PNG files (*.png)|*.png|BMP files (*.bmp)|*.bmp" msgstr "PDF súbory (*.pdf)|*.pdf|PNG súbory (*.png)|*.png|BMP súbory (*.bmp)|*.bmp" # c:/cave/loch/loch/lxPrint.cxx:627 # c:/cave/loch/loch/lxPrint.cxx:647 # c:/cave/loch/loch/lxPrint.cxx:872 # c:/cave/loch/loch/lxPrint.cxx:892 # c:/cave/loch/loch/lxRender.cxx:455 #: lxRender.cxx:454 msgid "Unable to open file for output." msgstr "Nemôžem zapisovaÅ¥ do súboru." # c:/cave/loch/loch/lxPrint.cxx:921 # c:/cave/loch/loch/lxRender.cxx:493 #: lxRender.cxx:492 #, c-format msgid "Rendering (%d x %d, %.1f MB) ..." msgstr "Rendrujem (%d x %d, %.1f MB) ..." # c:/cave/loch/loch/lxRender.cxx:494 #: lxRender.cxx:493 msgid "Rendering to bitmap" msgstr "Rendrovanie do súboru" # c:/cave/loch/loch/lxSScene.cxx:147 #: lxSScene.cxx:196 msgid " Scene" msgstr " Scéna" # c:/cave/loch/loch/lxSScene.cxx:167 # c:/cave/loch/loch/lxSScene.cxx:335 #: lxSScene.cxx:216 msgid "Visibility" msgstr "ViditeľnosÅ¥" # c:/cave/loch/loch/lxSScene.cxx:168 #: lxSScene.cxx:217 #: lxSScene.cxx:271 msgid "Color mode" msgstr "Farebný mód" # c:/cave/loch/loch/lxSScene.cxx:199 #: lxSScene.cxx:248 msgid "Scene items" msgstr "Položky scény" # c:/cave/loch/loch/lxSScene.cxx:224 #: lxSScene.cxx:279 msgid "Default" msgstr "Å tandardné" # c:/cave/loch/loch/lxSScene.cxx:230 #: lxSScene.cxx:285 msgid "Applies to" msgstr "Týka sa" # c:/cave/loch/loch/lxSScene.cxx:243 #: lxSScene.cxx:298 msgid "Centerline visibility" msgstr "ViditeľnosÅ¥ polygónu" # c:/cave/loch/loch/lxSScene.cxx:244 #: lxSScene.cxx:299 msgid "Underground" msgstr "Podzemie" # c:/cave/loch/loch/lxSScene.cxx:265 # c:/cave/loch/loch/lxSScene.cxx:278 #: lxSScene.cxx:317 #: lxSScene.cxx:330 msgid "Transparency" msgstr "PriehľadnosÅ¥" # c:/cave/loch/loch/lxSScene.cxx:282 #: lxSScene.cxx:334 msgid "Texture" msgstr "Textúry" # C:/Projects/MSVCProjects/loch/lxSScene.cxx:398 #: lxSScene.cxx:392 msgid "Project title" msgstr "Názov projektu" # c:/cave/loch/loch/lxSScene.cxx:389 # c:/cave/loch/loch/lxSView.cxx:464 #: lxSScene.cxx:424 #: lxSView.cxx:470 msgid "Close" msgstr "ZatvoriÅ¥" # C:/Projects/MSVCProjects/loch/lxSView.cxx:228 #: lxSView.cxx:228 msgid " Camera" msgstr " Kamera" # c:/cave/loch/loch/lxSView.cxx:255 #: lxSView.cxx:260 msgid "Center" msgstr "Stred" # C:/Projects/MSVCProjects/loch/lxSView.cxx:261 #: lxSView.cxx:261 msgid "Focus" msgstr "Ohnisko" # c:/cave/loch/loch/lxSView.cxx:287 #: lxSView.cxx:292 msgid "Facing (deg)" msgstr "Azimut (st)" # c:/cave/loch/loch/lxSView.cxx:298 #: lxSView.cxx:303 msgid "Tilt (deg)" msgstr "Sklon (st)" # c:/cave/loch/loch/lxSView.cxx:323 #: lxSView.cxx:328 msgid "Rotation center" msgstr "Stred otáÄania" # c:/cave/loch/loch/lxSView.cxx:327 #: lxSView.cxx:332 msgid "Easting (m)" msgstr "X - východ (m)" # c:/cave/loch/loch/lxSView.cxx:335 #: lxSView.cxx:340 msgid "Northing (m)" msgstr "Y - sever (m)" # c:/cave/loch/loch/lxSView.cxx:343 #: lxSView.cxx:348 msgid "Altitude (m)" msgstr "Nadm. výška (m)" # c:/cave/loch/loch/lxSView.cxx:364 #: lxSView.cxx:369 msgid "Distance (m)" msgstr "VzdialenosÅ¥ (m)" # c:/cave/loch/loch/lxSView.cxx:379 #: lxSView.cxx:384 msgid "Focus (mm)" msgstr "Ohnisko (mm)" # c:/cave/loch/loch/lxSView.cxx:399 #: lxSView.cxx:404 msgid "Enable rotation" msgstr "Automatické otáÄanie" # c:/cave/loch/loch/lxSView.cxx:401 #: lxSView.cxx:406 msgid "Rotation speed" msgstr "RýchlosÅ¥ otáÄania" # c:/cave/loch/loch/lxSView.cxx:422 #: lxSView.cxx:427 msgid "Enable stereo mode" msgstr "Stereo zobrazenie" # c:/cave/loch/loch/lxSView.cxx:423 #: lxSView.cxx:428 msgid "Eye separation" msgstr "VzdialenosÅ¥ oÄí" # C:/Projects/MSVCProjects/loch/lxSView.cxx:445 #: lxSView.cxx:445 msgid "Disable color textures" msgstr "ÄŒiernobiele textúry" # c:/cave/loch/loch/lxSView.cxx:441 #: lxSView.cxx:447 msgid "Color channels" msgstr "Farebné kanály" # c:/cave/loch/loch/lxSView.cxx:524 #: lxSView.cxx:530 msgid "Lock rotation speed" msgstr "Uzamknúť rýchlosÅ¥ otáÄania" # c:/cave/loch/loch/lxWX.cxx:200 #: lxWX.cxx:200 #, c-format msgid "%ld" msgstr "%ld" # c:/cave/loch/loch/lxWX.cxx:206 #: lxWX.cxx:206 #, c-format msgid "%.14e" msgstr "%.14e" therion/loch/loch.app/0000755000076400010400000000000012004774752015726 5ustar userAdministratorstherion/loch/loch.app/Contents/0000755000076400010400000000000012050456020017505 5ustar userAdministratorstherion/loch/loch.app/Contents/Info.plist0000644000076400010400000000301012053734174021463 0ustar userAdministrators CFBundleInfoDictionaryVersion 6.0 CFBundleIdentifier org.wxwindows.. CFBundleDevelopmentRegion English CFBundleExecutable loch CFBundleDocumentTypes CFBundleTypeName Therion loch files. CFBundleTypeIconFile loch.icns CFBundleTypeExtensions lox CFBundleTypeRole Viewer CFBundleIconFile loch.icns CFBundleName loch CFBundlePackageType APPL CFBundleSignature ???? CFBundleVersion 1.0 CFBundleShortVersionString 1.0 CFBundleGetInfoString loch, (c) 2001-2012 Stacho Mudrak CFBundleLongVersionString loch, (c) 2001-2012 Stacho Mudrak NSHumanReadableCopyright Copyright 2001-2012 Stacho Mudrak LSRequiresCarbon CSResourcesFileMapped therion/loch/loch.app/Contents/MacOS/0000755000076400010400000000000011763362344020466 5ustar userAdministratorstherion/loch/loch.app/Contents/PkgInfo0000644000076400010400000000001010572556040020766 0ustar userAdministratorsAPPL????therion/loch/loch.app/Contents/Resources/0000755000076400010400000000000012053734316021471 5ustar userAdministratorstherion/loch/loch.app/Contents/Resources/loch.icns0000644000076400010400000025015112053734164023301 0ustar userAdministratorsicnsPiTOC His32`s8mkil32ül8mkit32 Òt8mk@ic08.áic09Ææis32`‚ÿƒÿ‚ÿ€ÿÿÿ€ÿÿÿ„ÿÿÿÿÿÿÿ€€ÿÿÿ€ ÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿ€ÿÿÿÿÿ€ÿÿÿ€ÿ‚ÿ€ÿÿƒÿÿƒÿÿ‚€ÿƒŽÿ‚ÿƒÿ‚ÿ€ÿÿÿ€ÿÿÿ„ÿÿÿÿÿÿÿ€€ÿÿÿ€ ÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿ€ÿÿÿÿÿ€ÿÿÿ€ÿ‚ÿ€ÿÿƒÿÿƒÿÿ‚€ÿƒŽÿ‚ÿƒÿ‚ÿ€ÿÿÿ€ÿÿÿ„ÿÿÿÿÿÿÿ€€ÿÿÿ€ ÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿ€ÿÿÿÿÿ€ÿÿÿ€ÿ‚ÿ€ÿÿƒÿÿƒÿÿ‚€ÿƒŽÿs8mkÿÿÿÿÿÿ ÆË²ÿÿíÿþÿÿýÿÿÿÿÿß‘ÿÿ¢ÿüÿÿÿýÿÿÿÆÿÿÿúÿrÿÿ¥ÿÿÿÿÑÿÿ©ÿÿÿÿ¦ÿÿÌÿÿÿÿ¹ÿÿòÿÿÿÿæÿÿiÿÈÿÿ×ÿdÿÿÞÿÿÿÿÈÿÿÊÿ¬ÿÿÿÿùÿÿÿ¡ÿù“ÿÿÿÿÿÿÿûÿ ÿÿâÿýÿüÿÿÿããȰŒÿÿU°¦¡½¿ÿÿÿÿÿÿÿÿÿÿÿÿÿil32üŒÿ€„‘‘ÿ€‘†ÿ‘Žÿ€€ÿš“´Í‚ÿ¿œÿ€Šÿ‘ÿ·ûê‚D‚dàÖƒˆÿš‘ÿµÿuˆ4ÿÿ‡ÿš€ÿ~Œÿÿ€…ÿšÿ¤ûƒUÕùÿÿûï³£ÿšƒÿšÿŸÁ‚ °ÿăÿÿš‰ÿ€&àÿ‘ƒÿÿÿ)û¦ÿÿ€€‘ÿÿ€ÿÿ‘‚ÿ€ÿÿIÝ€ÿ‘‘ÿ ƒÿÝ)÷ƒÿ€ÿšÿ£³€HËÿƒš„ÿ ‘ÿÇRÝœÿ€ÿ ‘ÿÝ))ÝÿŠ…ÿ ‘ÿÇRâ’ÿ€ÿ€ÿÿ€ìšÿ†ÿ‘ÿÄUâ’ÿÿÿÿ—â€ÿÿ‘‡ÿ‘ÿÊKÝœÿÿÿÿœÝRÇÿ‘‡ÿ‘ÿÿ€÷ƒÿÿÿÿœÝUÄÿ‘‡ÿ€ÿÿ€ÿÿ‘€ÿ ÿ—âKÊÿ‘†ÿ ÿ’â&àÿ‘ÿ€ÿÿ€ÿÿ‘†ÿ €ÿµ}}µÿ€ÿ‘ÿÿ€ÿÿ†ÿ€ÿÿ€ô”ÿÿ ‘ÿÇR®¤ÿš„ÿ šÿ£³+Ûÿ€‚ÿÿšÚ€ÿÿ€„ÿ”ÿÿ€ì“ÿƒÿ€ÿÿ€Öÿ‚ÿ ‘ÿËH.Úÿ‘„ÿ šÿ£³.Úÿ‘ÿ‘ÿÍH€ì“ÿ‚ÿš€‘ÿÿ€ ì“ÿÿÿšÿ§§€}µÿš€ƒšÿÿÿÿšÿÃY.Úÿ‘ÿšÿŸÈ€2×—ƒÿ€ÿ£Íÿûÿ]ð‘ÿ€ÿÿ‚ 6ÿÕÜùÿ¤ÿÿ´²D…UÄÿƒÿœÝˆ÷ƒÿÿ‡}´ÿ€ÿÿˆÝ—ÿü‚)U{êü€ÿ€ÿµ®K€UR`&+€ÿ ŸùÜÜìÿÿÝÅ·š€€ÿ ÿ¦ÊÅÄÄÇ¿àÿÿÛ‘€ÿƒ——“ƒÿ‘‚ÿ‡ÿšÿš€ÿÿ‘€„ÿš‡‘ÿŒÿ€„‘‘ÿ€‘†ÿ‘Žÿ€€ÿš“´Í‚ÿ¿œÿ€Šÿ‘ÿ·ûê‚D‚dàÖƒˆÿš‘ÿµÿuˆ4ÿÿ‡ÿš€ÿ~Œÿÿ€…ÿšÿ¤ûƒUÕùÿÿûï³£ÿšƒÿšÿŸÁ‚ °ÿăÿÿš‰ÿ€&àÿ‘ƒÿÿÿ)û¦ÿÿ€€‘ÿÿ€ÿÿ‘‚ÿ€ÿÿIÝ€ÿ‘‘ÿ ƒÿÝ)÷ƒÿ€ÿšÿ£³€HËÿƒš„ÿ ‘ÿÇRÝœÿ€ÿ ‘ÿÝ))ÝÿŠ…ÿ ‘ÿÇRâ’ÿ€ÿ€ÿÿ€ìšÿ†ÿ‘ÿÄUâ’ÿÿÿÿ—â€ÿÿ‘‡ÿ‘ÿÊKÝœÿÿÿÿœÝRÇÿ‘‡ÿ‘ÿÿ€÷ƒÿÿÿÿœÝUÄÿ‘‡ÿ€ÿÿ€ÿÿ‘€ÿ ÿ—âKÊÿ‘†ÿ ÿ’â&àÿ‘ÿ€ÿÿ€ÿÿ‘†ÿ €ÿµ}}µÿ€ÿ‘ÿÿ€ÿÿ†ÿ€ÿÿ€ô”ÿÿ ‘ÿÇR®¤ÿš„ÿ šÿ£³+Ûÿ€‚ÿÿšÚ€ÿÿ€„ÿ”ÿÿ€ì“ÿƒÿ€ÿÿ€Öÿ‚ÿ ‘ÿËH.Úÿ‘„ÿ šÿ£³.Úÿ‘ÿ‘ÿÍH€ì“ÿ‚ÿš€‘ÿÿ€ ì“ÿÿÿšÿ§§€}µÿš€ƒšÿÿÿÿšÿÃY.Úÿ‘ÿšÿŸÈ€2×—ƒÿ€ÿ£Íÿûÿ]ð‘ÿ€ÿÿ‚ 6ÿÕÜùÿ¤ÿÿ´²D…UÄÿƒÿœÝˆ÷ƒÿÿ‡}´ÿ€ÿÿˆÝ—ÿü‚)U{êü€ÿ€ÿµ®K€UR`&+€ÿ ŸùÜÜìÿÿÝÅ·š€€ÿ ÿ¦ÊÅÄÄÇ¿àÿÿÛ‘€ÿƒ——“ƒÿ‘‚ÿ‡ÿšÿš€ÿÿ‘€„ÿš‡‘ÿŒÿ€„‘‘ÿ€‘†ÿ‘Žÿ€€ÿš“´Í‚ÿ¿œÿ€Šÿ‘ÿ·ûê‚D‚dàÖƒˆÿš‘ÿµÿuˆ4ÿÿ‡ÿš€ÿ~Œÿÿ€…ÿšÿ¤ûƒUÕùÿÿûï³£ÿšƒÿšÿŸÁ‚ °ÿăÿÿš‰ÿ€&àÿ‘ƒÿÿÿ)û¦ÿÿ€€‘ÿÿ€ÿÿ‘‚ÿ€ÿÿIÝ€ÿ‘‘ÿ ƒÿÝ)÷ƒÿ€ÿšÿ£³€HËÿƒš„ÿ ‘ÿÇRÝœÿ€ÿ ‘ÿÝ))ÝÿŠ…ÿ ‘ÿÇRâ’ÿ€ÿ€ÿÿ€ìšÿ†ÿ‘ÿÄUâ’ÿÿÿÿ—â€ÿÿ‘‡ÿ‘ÿÊKÝœÿÿÿÿœÝRÇÿ‘‡ÿ‘ÿÿ€÷ƒÿÿÿÿœÝUÄÿ‘‡ÿ€ÿÿ€ÿÿ‘€ÿ ÿ—âKÊÿ‘†ÿ ÿ’â&àÿ‘ÿ€ÿÿ€ÿÿ‘†ÿ €ÿµ}}µÿ€ÿ‘ÿÿ€ÿÿ†ÿ€ÿÿ€ô”ÿÿ ‘ÿÇR®¤ÿš„ÿ šÿ£³+Ûÿ€‚ÿÿšÚ€ÿÿ€„ÿ”ÿÿ€ì“ÿƒÿ€ÿÿ€Öÿ‚ÿ ‘ÿËH.Úÿ‘„ÿ šÿ£³.Úÿ‘ÿ‘ÿÍH€ì“ÿ‚ÿš€‘ÿÿ€ ì“ÿÿÿšÿ§§€}µÿš€ƒšÿÿÿÿšÿÃY.Úÿ‘ÿšÿŸÈ€2×—ƒÿ€ÿ£Íÿûÿ]ð‘ÿ€ÿÿ‚ 6ÿÕÜùÿ¤ÿÿ´²D…UÄÿƒÿœÝˆ÷ƒÿÿ‡}´ÿ€ÿÿˆÝ—ÿü‚)U{êü€ÿ€ÿµ®K€UR`&+€ÿ ŸùÜÜìÿÿÝÅ·š€€ÿ ÿ¦ÊÅÄÄÇ¿àÿÿÛ‘€ÿƒ——“ƒÿ‘‚ÿ‡ÿšÿš€ÿÿ‘€„ÿš‡‘ÿl8mk   Éÿÿÿÿÿ«+ ›þþýÿÿÿÿÿþÿû×  ’ÿÿÿÿüúùøøøúûüÿÿÿþÿüúúûÿÿÿÿÿÿüýøÿÿWþÿûüüýÿþýýÿÿþþÿþþÿü]Søÿúþûÿûÿº5 ÿÿýûÿã ÿÿùþûÿþ` ÿÿùÿÿ ÿÿúÿþýá  áÿùÿþ ]üÿþþÿÆ  ¼ÿúÿý+ áÿûüÿá ¼ÿúÿý'ÿÿúÿü ºÿúÿý'&ýÿúÿÿ Ãÿúÿý++ýÿúÿ¼ ÿÿùÿþ +ýÿúÿº ÿÿøÿÿ &ýÿúÿà 'ýÿúÿã ÿÿøÿÿ ’ÿþýÿ’ ÿÿøÿÿÿÿúÿý ¼ÿûÿþa]üÿûÿß0ýÿûÿÿÿÿúÿüÿÿúÿü5 ÆÿþûÿÜ ]üÿûÿÜ Åÿþüÿü ÿÿúÿüiüÿýÿÿ’ ¶ÿþûÿÜ IùÿüþÿÙ5, ]Éÿþÿöûÿýÿýÿÿûÿÿüìÿýþýÿa“þÿþÿÿÿÿÿÿúÿº +ýÿþÿÿÿÿÿÿÿýÿþ ÿÿöúùùúûûüþÿ“ÿÿøûûûúúúú÷þý,ýÿûÿÿÿÿÿÿüþý—þÿþÿÿÿÿÿÿýÿÿIýþþüÿÿá¹–`ùºº¼°ãÿÿß ,,   it32 Òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯ÿ‰êÿ“åÿœÛÿ¢Óÿ©Ïÿ¬Íÿ¯Éÿ²Çÿ´ÅÿµÄÿ·Áÿ™ˆÿ“Àÿ“•ÿ½ÿ’šÿ‹¼ÿ’œÿ‹¹ÿ¢ÿ‹·ÿŽ¥ÿеÿ¦ÿгÿ¨ÿ‰±ÿ‘ªÿ‰¯ÿ‘¬ÿˆ®ÿ‘­ÿ‰¬ÿ‘¯ÿˆ«ÿ‘°ÿ‰©ÿ³ÿˆ©ÿ޵ÿˆ¨ÿŽ·ÿ‡¨ÿŒ¹ÿ‡§ÿŒºÿˆ¦ÿ‹»ÿˆ¥ÿ‹¼ÿˆ¥ÿнÿˆ¤ÿ‹½ÿˆ¤ÿ‹½ÿˆ¤ÿоÿˆ¤ÿ‰¿ÿˆ¤ÿˆÀÿˆ£ÿ‰Àÿˆ£ÿ‰Àÿˆ£ÿ‰Àÿˆ£ÿˆÁÿˆ£ÿˆÁÿˆ£ÿˆÁÿˆ¢ÿ‰Áÿˆ¢ÿ‰Áÿˆ¢ÿ‰Áÿˆ¢ÿ‰Áÿˆ¢ÿˆÁÿˆ£ÿˆÁÿˆ£ÿˆÁÿ‡¤ÿˆÁÿ‡¤ÿˆÀÿˆ¤ÿˆÀÿˆ¥ÿ‡¿ÿ‰¥ÿ‡¿ÿˆ¦ÿˆ¾ÿˆ¦ÿ‰½ÿ‡§ÿ‰¼ÿˆ¨ÿˆ¼ÿˆ¨ÿˆ»ÿ‰¨ÿ‡¼ÿ‰¨ÿˆºÿ‰©ÿˆºÿ‰©ÿ‰¹ÿˆ«ÿˆ¸ÿ‰«ÿ‰¶ÿ‰­ÿˆ¶ÿ‰­ÿ‰µÿˆ®ÿ‰´ÿ‰¯ÿˆ³ÿ‰°ÿ‰²ÿ‰±ÿˆ±ÿ‰²ÿˆ°ÿгÿˆ®ÿŠ´ÿˆ­ÿ‹´ÿ‰¬ÿжÿˆ«ÿŠ·ÿˆ«ÿŠ·ÿ‰©ÿЏÿ‰¨ÿйÿ‰¨ÿ‰»ÿ‰¦ÿ‰¼ÿ‰¥ÿнÿ‰£ÿŠ¿ÿˆ£ÿŠ¿ÿ‰ ÿ‹ÀÿŠŸÿŠÂÿ‰žÿŠÃÿ‰ÿ‹Äÿ‰œÿŠÅÿ‰›ÿŠÅÿ‹™ÿ‘½ÿ–ÿ–¹ÿ”ÿ¨’ÿ§“ÿªŽÿ©’ÿ«Žÿ©’ÿ¬Œÿª’ÿ¬Œÿª’ÿ¬Œÿª“ÿ«Œÿ©”ÿªŽÿ§–ÿ©Žÿ§˜ÿ¥’ÿ£ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯ÿ‰êÿ“åÿœÛÿ¢Óÿ©Ïÿ¬Íÿ¯Éÿ²Çÿ´ÅÿµÄÿ·Áÿ™ˆÿ“Àÿ“•ÿ½ÿ’šÿ‹¼ÿ’œÿ‹¹ÿ¢ÿ‹·ÿŽ¥ÿеÿ¦ÿгÿ¨ÿ‰±ÿ‘ªÿ‰¯ÿ‘¬ÿˆ®ÿ‘­ÿ‰¬ÿ‘¯ÿˆ«ÿ‘°ÿ‰©ÿ³ÿˆ©ÿ޵ÿˆ¨ÿŽ·ÿ‡¨ÿŒ¹ÿ‡§ÿŒºÿˆ¦ÿ‹»ÿˆ¥ÿ‹¼ÿˆ¥ÿнÿˆ¤ÿ‹½ÿˆ¤ÿ‹½ÿˆ¤ÿоÿˆ¤ÿ‰¿ÿˆ¤ÿˆÀÿˆ£ÿ‰Àÿˆ£ÿ‰Àÿˆ£ÿ‰Àÿˆ£ÿˆÁÿˆ£ÿˆÁÿˆ£ÿˆÁÿˆ¢ÿ‰Áÿˆ¢ÿ‰Áÿˆ¢ÿ‰Áÿˆ¢ÿ‰Áÿˆ¢ÿˆÁÿˆ£ÿˆÁÿˆ£ÿˆÁÿ‡¤ÿˆÁÿ‡¤ÿˆÀÿˆ¤ÿˆÀÿˆ¥ÿ‡¿ÿ‰¥ÿ‡¿ÿˆ¦ÿˆ¾ÿˆ¦ÿ‰½ÿ‡§ÿ‰¼ÿˆ¨ÿˆ¼ÿˆ¨ÿˆ»ÿ‰¨ÿ‡¼ÿ‰¨ÿˆºÿ‰©ÿˆºÿ‰©ÿ‰¹ÿˆ«ÿˆ¸ÿ‰«ÿ‰¶ÿ‰­ÿˆ¶ÿ‰­ÿ‰µÿˆ®ÿ‰´ÿ‰¯ÿˆ³ÿ‰°ÿ‰²ÿ‰±ÿˆ±ÿ‰²ÿˆ°ÿгÿˆ®ÿŠ´ÿˆ­ÿ‹´ÿ‰¬ÿжÿˆ«ÿŠ·ÿˆ«ÿŠ·ÿ‰©ÿЏÿ‰¨ÿйÿ‰¨ÿ‰»ÿ‰¦ÿ‰¼ÿ‰¥ÿнÿ‰£ÿŠ¿ÿˆ£ÿŠ¿ÿ‰ ÿ‹ÀÿŠŸÿŠÂÿ‰žÿŠÃÿ‰ÿ‹Äÿ‰œÿŠÅÿ‰›ÿŠÅÿ‹™ÿ‘½ÿ–ÿ–¹ÿ”ÿ¨’ÿ§“ÿªŽÿ©’ÿ«Žÿ©’ÿ¬Œÿª’ÿ¬Œÿª’ÿ¬Œÿª“ÿ«Œÿ©”ÿªŽÿ§–ÿ©Žÿ§˜ÿ¥’ÿ£ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯ÿ‰êÿ“åÿœÛÿ¢Óÿ©Ïÿ¬Íÿ¯Éÿ²Çÿ´ÅÿµÄÿ·Áÿ™ˆÿ“Àÿ“•ÿ½ÿ’šÿ‹¼ÿ’œÿ‹¹ÿ¢ÿ‹·ÿŽ¥ÿеÿ¦ÿгÿ¨ÿ‰±ÿ‘ªÿ‰¯ÿ‘¬ÿˆ®ÿ‘­ÿ‰¬ÿ‘¯ÿˆ«ÿ‘°ÿ‰©ÿ³ÿˆ©ÿ޵ÿˆ¨ÿŽ·ÿ‡¨ÿŒ¹ÿ‡§ÿŒºÿˆ¦ÿ‹»ÿˆ¥ÿ‹¼ÿˆ¥ÿнÿˆ¤ÿ‹½ÿˆ¤ÿ‹½ÿˆ¤ÿоÿˆ¤ÿ‰¿ÿˆ¤ÿˆÀÿˆ£ÿ‰Àÿˆ£ÿ‰Àÿˆ£ÿ‰Àÿˆ£ÿˆÁÿˆ£ÿˆÁÿˆ£ÿˆÁÿˆ¢ÿ‰Áÿˆ¢ÿ‰Áÿˆ¢ÿ‰Áÿˆ¢ÿ‰Áÿˆ¢ÿˆÁÿˆ£ÿˆÁÿˆ£ÿˆÁÿ‡¤ÿˆÁÿ‡¤ÿˆÀÿˆ¤ÿˆÀÿˆ¥ÿ‡¿ÿ‰¥ÿ‡¿ÿˆ¦ÿˆ¾ÿˆ¦ÿ‰½ÿ‡§ÿ‰¼ÿˆ¨ÿˆ¼ÿˆ¨ÿˆ»ÿ‰¨ÿ‡¼ÿ‰¨ÿˆºÿ‰©ÿˆºÿ‰©ÿ‰¹ÿˆ«ÿˆ¸ÿ‰«ÿ‰¶ÿ‰­ÿˆ¶ÿ‰­ÿ‰µÿˆ®ÿ‰´ÿ‰¯ÿˆ³ÿ‰°ÿ‰²ÿ‰±ÿˆ±ÿ‰²ÿˆ°ÿгÿˆ®ÿŠ´ÿˆ­ÿ‹´ÿ‰¬ÿжÿˆ«ÿŠ·ÿˆ«ÿŠ·ÿ‰©ÿЏÿ‰¨ÿйÿ‰¨ÿ‰»ÿ‰¦ÿ‰¼ÿ‰¥ÿнÿ‰£ÿŠ¿ÿˆ£ÿŠ¿ÿ‰ ÿ‹ÀÿŠŸÿŠÂÿ‰žÿŠÃÿ‰ÿ‹Äÿ‰œÿŠÅÿ‰›ÿŠÅÿ‹™ÿ‘½ÿ–ÿ–¹ÿ”ÿ¨’ÿ§“ÿªŽÿ©’ÿ«Žÿ©’ÿ¬Œÿª’ÿ¬Œÿª’ÿ¬Œÿª“ÿ«Œÿ©”ÿªŽÿ§–ÿ©Žÿ§˜ÿ¥’ÿ£ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³ÿt8mk@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýúôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿic08.á‰PNG  IHDR\r¨f$iCCPICC Profile8…UßoÛT>‰oR¤? XG‡ŠÅ¯US[¹­ÆI“¥íJ¥éØ*$ä:7‰©Û鶪O{7ü@ÙH§kk?ì<Ê»øÎí¾kktüqóÝ‹mÇ6°nÆ¶ÂøØ¯±-ümR;`zŠ–¡Êðv x#=\Ó% ëoàYÐÚRÚ±£¥êùÐ#&Á?È>ÌÒ¹áЪþ¢þ©n¨_¨Ôß;j„;¦$}*}+ý(}'}/ýLŠtYº"ý$]•¾‘.9»ï½Ÿ%Ø{¯_aÝŠ]hÕkŸ5'SNÊ{äå”ü¼ü²<°¹_“§ä½ðì öÍ ý½t ³jMµ{-ñ4%ׯTÅ„«tYÛŸ“¦R6ÈÆØô#§v\œå–Šx:žŠ'H‰ï‹OÄÇâ3·ž¼ø^ø&°¦õþ“0::àm,L%È3â:qVEô t›ÐÍ]~ߢI«vÖ6ÊWÙ¯ª¯) |ʸ2]ÕG‡Í4Ïå(6w¸½Â‹£$¾ƒ"ŽèAÞû¾EvÝ mî[D‡ÿÂ;ëVh[¨}íõ¿Ú†ðN|æ3¢‹õº½âç£Hä‘S:°ßûéKâÝt·Ñx€÷UÏ'D;7ÿ®7;_"ÿÑeó?Yqxl+*pIDATxí]ݯÇ•¯ ̇`ÙxùòÎÊKÈ®c ´kK,¶Ì œÈ7a"'í>XZ¤(yɰ/‘_"‹k%Xoä+ {meeot£Ø‰—qÀ,¬Í—ÃÝókøÁLßêžê™ªîªžs¤s{¦§ouÕ¯ªÏ9uêœê‰™™£¤(ã‰Àœñl¶¶ZP€€ ŠÀ# `Œ;_›®¨Ð1 Œ1*ƸóµéŠ€ ŠÀ# `Œ;_›®¨Ð1 Œ1*ƸóµéŠ€ ŠÀ# `Œ;_›®¨Ð1 Œ1*ƸóµéŠ€ ŠÀ# `Œ;_›®Ü¡Œ%ÒêùÂs+¶þäú ãØý§Üô_…qì¥kò劰nnÑ‹ŠÃg µð<øk„—UlÛßËõ /ªø¾.ǽQ‡«¹?–ïþ2w^¿@`Bw€P;^!ÍzVø››ñuá¦p<èxà{éWòå9áS½'õó`šêÈÁ5Ó+|"€~ƃK·0AJ„v|ÃRa´í’0A{ËA-€*Ã%Ýkó¿iMîÉ"Ë`Ð}ÆÞrP `ÐIë÷¼¦gíƒhü«W¯šééisêTË{ÅŠfýúõfÞ¼ylGѱÈ2(ºžç‹,‡±± Tp(´ã;K8?·ÇyšÿÞZúᇚ}ûö™wÞyÇ[™½=òÈ#fÙ²e¦Óéôžöù™x=‘+tl,¹žôk‘fÏWw(M?¬&ã7Ì̧Ÿ~𝇗ï|ðY¸p¡Ù´iS_y,ƒ¾ÿ³|)²ò–Ak-–Qá)jª¼fÏWu(M?¬&?sæŒùì³ÏòuðöeW°ò–-‚—¥ÜVŨ°”æÏå5þPš½¨yZ“ÕcØóE–Á òF°Ø åÏ ‡ñzj@€ßUu„"©ùŸ’2F^§ÏkzÖ+VÏú :Yƒþ¯Èrp° hÜ#÷è7HÞ7 `Ш©÷wj|‰òšž…¥¦ñYïQE–CË€ýÃUƒä}*FU£ý?5>v§¹~‘fÏW%uMŸoϨߋ,‡¼ePbÐ`U’÷ ¨`W6s¤F¡wß) kT¤Ùóÿ0®š>àïyË`‹ Y߀ €A£#ÌïÔüNsý¼ÆWÍî·Sò–-‚]»v ŠD¤E@ß@r«*üŽ%×Ò¨ùæúy¯šÝæá®£EpéÒ%×HDögr–€ €áÆÈ°ÿ5”æß¿Ј»aÓÖÿ£E€(ÇÞHDß-)Á¦+|6vŒTÔÛCÔ•4ÿ¡C‡‚FÜÕ A:w£%€)ÈÁ7Àþ]*—ÿ›° §”m 1üÂõ}ëÇ5Rh äà€BÅ~HO>(=©POQ3”j~ë×ÓÃÞ…ƒoà¼Ü=©ÓEÀ>¨t}Ÿš_çú7ÀŠõ/-ú¶oßnÖ®]kî»ï¾|•ˉÍÂܨÇ(I@˜n¡ÆwZß§æ×¹~˜Îð]*-³gÏš={öØ@GîùŒ0|Ï G›; @zÇ#Qó—Îõy?ÕüD"­#-¹sçš;wÚ*|¿0r^Ž2‹P€ôŒG¢æ/ëó~ªù‰DšÇE‹™»ï¾»¬òÑÆ¨(ë>÷ßTó»cÕš+á |å•W²= ö.ĸÀª@´ñ*ü GJzÕü³ñt}[ÏÄìûÌG}”hÁ0`ïBŽL ¢ŠP0ÚsÒüŸ|ò‰ùãÿxkï¼¶Åòc×ÞU«V™{î¢óGy>yò¤Áœ;FúüóÏ ƒ%¹´¢‹P0ÚÈ¢d/ÕüxøŸþyóî»ïfwk[,ÿW¾ò3999kóΛЭÙ!(_xá…[‚s´® ÷ß\H1>@@µqATº¾ãcÎ;gÞ|óMsìØ1žŠúXU£#DvïÞ½Þ·ï^·nÁCUuÛñº-® ¤  Ú£H﴾Ϣá)†Ç8 Ñg5I2+W®œu~Ô(s÷îÝfëÖ­•ŠjÊr %R|€ ·¡EÍ_i}ŸoÌyûí·3Mæv«ú®*Òô¡4zÕ–¡~>úhÕ3yË¡.‹€–@…ø€)i\WølåFzún@Ró—ÎõY×÷iºÂQqlT¤éCiôºÚŸ·ê¶*Ä4¾* À>*©ññàƒœæúÐxW^ì1ýÔü0­CÌÝ/ÆÀc×Ü*¼‘C1Ò¸Ì[´j]ǪB…ø8H_žn„Fº‘×sSjüJs}jþÈcúgnjþ ,[…˜»KáÁß/Œ]s«ð~VØëkËi`©®ŽU… ñ¥­×ªäûZ7Iãs®ßôú>5û õø!æøU5:ü}ÂU“`/°Y ^ùèD¥–-ë@;‡¶òñ%Yƒç¤u9¨¸1¾FÒøœë7½¾_4§Ï=BCÌñ«jt\®J¼Ìâ*äd9Ôm 8¬ TickÇU ¥ñÙ±ÌõóÍÎ&ñX¤é‡Õè,×õˆû¿çzqÏuyËÁjä-ÇgÎYhìÄU™™³eËÛ- ýa4Fã*†Òøì¥Xæúy?„fg“x¤ÎÏ݇Õè,7ô‘õ¦åPjÐXºtiËJ°ÑwÞy§ÁÒ …0ÿ¿h9_Û©qÔüNëùìjüØæú½øÔüÈ[fîN¨š:æ-ZèçY« ´Ð¯Èæ M‹/6óçÏ·Ýf¹œü–0~ì Ÿ®•ÆMPóc`à³QãÇ6×÷èŧ…ÀçÔ‰íÁfÏ [W ù/^lTw¤nÏC4’%8. ’æMãËàȈsþ šŸš}ÐC]ןM }¤EpFn„U…mÂaÞÜ¢»îºËlܸÑ\»v-h|ÀwÜa0]³êF<@#»‹¨¤ùcÓø8œóWÐüÔ„ù9=‹ä× ¼6¥#ÛÓš¶O`COìé_@Èø€9sæ˜%K–”áÖØ.ÂmNš?VÏSAóç5~Û4;!q=ÒÀ8˜Ìÿvóc/ƒñŸ~ú©y饗ÌåË—í" K +\›/ íÀIóǪñ9`+h~j릚ŸH„92>@í¾€’}®J}jÙ)(uP:÷å„õ£ Š`dÔC¶Æ2æ?ôº?B‹ï¿ÿ~³yóf³wï^ÓétlÕÁ9j~ë!¤ç£@ P]WÌ?þ;v˜ÉÉIƒdKˆš_çú% éOÍ#Џ*PÍÊŽb¾]1ÿ÷Þ{¯ùÞ÷¾g¿_@ªù €ÑÓq"а¢Ç|ÿšbþg&Ñ`ÖÊÜ8©š¿ý)>’'NœÈb³»Ýn-È" V‡…°~ÜžÖõ}A) ’sçÎ5XC­‰&¾øâ‹ìUÒ–ûuå"È à PR’@ `‰ž?¾Ájhâºÿc=fV¯^m»Ýi9ùªðïl?ê9E VRÁ³¢Ê:ˆëþÛ·oÏ^éd¹Qc‹,çõ”"5± €Þ@ÄÔJÔüY~÷HÅÀJŠ@RÄ.:‚fa`h¤©ù²ü ýk‹Ýn-|ˆ]”FâÅ®*¾iˆˆ?8ÿàPR’BÀÿÓã·ù¥€K–,1ØUÅ7 ñ‡å¿®ïzhyŠ@hb#C¼íG#þB;-?bVœBGÞŒø³ÞûæIø+CGK$@è@ìûVð*1øKfhkE]HRÔØ‹cW¾hÄ_/"ú9i’¡#/\¸`®\Á¶p³H#þfA¢'RFÀ¿ =e4nÖ½$æ_#þZпڄÛÄnXsnWßï'®ÿoذ¡(æûÄa¿8%E Ä.jÍàúÿ¶mÛŠbþ[ÑéÚE€Ä*ÉpXÿ¯u·Xv’PÄ*:ÒàÚsÖÿ5æ?ÔHÔrA VÐH€ÃúÿkÒKóßÈPÕ›†@ VÐH@ À]ù ëÿø¬¤´X@#9%=ªëÿ%àèOé"«°":ÀzÓ'uý¿ý)]’¡sJºQ×ÿKÀiáOµÆŸ4‰_R‘€ æ4ÙGzïú¨5þ¤þæÝ¾cR@è€Û°è§1E ‘ø“&±NJ4 ”Þ{,èH+k?iY=è—dö\¥[Œ@#ñ'MŽ»¤|¡^I`è[kùq ÐHüI“ãN-xY€q O­Ehj?‰aÜ©!¥Y€¡Ÿ«´ËøS cS³Ó~@=ÖÞºþ*þdáÂ…æÉ'Ÿ4Ø¢€‚gŸª@×,À‚á7~§­ëÿ¡âO.^¼h>ÿüó2”ƒgŸª ðk`Ù‹ßJ×ÿ}ÇŸôÎýïºËºÁwŸž}ª ||wågÍ,Ǩ ¿v¤µ­ÿ;Ìý»RŸZÆ Aº„4 °œý´XÚ²Yx­M¾ßAéàsº õ8,ü[}|žS@9ššXŽO[~=/ [É÷;(|NK¤"àà¤@9ÄšXŽOê¿öÎýaôÑ'Ÿ|b°855e|¾ƒÒÑç+ 8©±Þ b:R·Â¹¨õÿ<ºò[-sÖ!)€·õ nºF²F†Õx½UXJcÿÏ;gÞ|óMsìØ±°µ¸]zí>§¤|×®]3ˆ›®‘JcÃk¬‡Þ* ¥ý‹åºE‹°_ÕîsJJ¬^½Ú<þøãfÍš5Yü~ ÝB ñ ¹WRÖR Ø´áV shþW^yÅ\ºtÉ{;K²ÿj÷9%%Ö®]köìÙcvìØ‘Åï{ï™Ùvä戻„— +œû8pÀ|ôÑGÞ[Üdö_¾1±j5«$¼ï¾û xÁ‚æÈ‘#æèÑ£ùö õýŽ;î0Xëµ¼Äàû…¡ ¦„»ÂˆÔRJZcÿ{#aÍÆ@± €Ò¹Ðùóç³ø}_Ι3Ç`­·„ ýa@ÀK«@@hÕûïX;¤± zC¯"aËâ÷oñÖx_zé%333cÖ¯_oæÍƒÒGÀ ~€ aÄgO +¥‹ÆSGø aøyúÈwì? !ûuá1VЕ BÓB`Þ'ä»WÂ<ó½³gÏšeË–™N§ST¾Uc]¬ç£E #5ø‚ÀçZ(†ì¿|Cc0±Á°ÐIë…ƒR2ÁÒÛ·oÏ^CެsÆÜ5ú5~jýïû7ý—ïšXë<š7ÂS‹ƒf‚« Ð{¹~NZcÿæþ]oí]XwD xõêUsüøñ̰eË–t‡·Ö¼Þ¹m±ÿ1eÿå‰]äë›}xçwì£Ô::Ң¹?×ÿßzë-¯ëÿ1eÿå{4©@ V>tDàâÅ‹ <ÁJ­C€sø”f9–ûø’[uUf@öV”û_k’ ¤h "xé1mJçþ ÄþwNÌýÁø\;Å>˜'ˆÌÚ4-TD Ñ/‰Õæ%zL 繈Øÿ¨ïò»’k‚þ»¨5"HÇ«Í:éq$:òßµÏýj\:¾þäKb”µD.]ºÔ<ðÀfÓ¦MæÁ´{UN"@)-˜Õù­Úœû‡Êû/±(­®­Ž¡ÎÅ.ºÒpÌj‰\±bE–møÝï~·( 4K3þÁ~`}ôQÞŸÇŽ|À\‚–‰ !²æp„Z÷'€¼´±c*Àè5ä€1gûö·¿m+Þd0²Ú.ÐsQ!€ñýuá­Â³²þB½óĘýǺñ˜Š`}k9b8˜o%Tºž\òúS½,“Ûa‡mÂá> õÎ?Þ$Æì?ÖǤ@¨œÌ±ö@Б%)ˆe°ºÂ:àˆŠãÈu<ø»…Wت…~-Ø Êv¹ó¹Þ¹lÙùF$-Båp€Ó§Og«Ð ÕMñ|gÿÀô‡`%ßoüáMæþ]¹>¤Ú³ÿXG“Ì `ò†¯ømî `çÎĪ÷¨¾€^4âûÌÕëº?²>§§§³ÔoŸoü! sÄý#þ?ø»ÿX§¢cÒ€9Ë—/Ïvôñ%–úˆDrÇÒuÿ?üÐìÛ·Ï>|ØkÖQr˜ûcÊÒM(YVèc*À1Åœ€‰‰‰lÎî,õøF´¶òJ×ý_|ñÅLaøÖþçþdÿå{ P3 Í©ë›ÔàÑÚÊÃ`€ÐG\÷ýõ׳ݟú~ôð%¥¹?››Š8-~UØšOëÆ ,<´¾¦|ˆ ÔÝ‚9ªš;b<ǼîÍÜŸ]”Ê~]©0¼¦`|î#úB½1ÈÁ`Õ8}•Ô/u °Ln‚u¬Ðt„û(‚uÿhæþ& €93RñIVžGú|¿1ˆå;ø¬sNþ¿ƒ#ÒºsöH*€õ-• ¾ßÄ›:øJ½Î,GÁèHÉÐúºî_âÔçP°:Âü·Ù]ØÚÛ7Ñ€õã‚Ý‚¹î¬Y‚¾Áw+‘™ß°]®ëþ6TnœKMt¥ÚðÀ)‰ß'BEÊ}2*Ù-¸#hdà ˜šø[š›¡ëþÅ]’š /ÀúÆ P‘„qã–°`ü AÖÕ QaüÂë¿YV@1ß_×ýû`éû’š`å­ûp5 Td Ã[„u5€=TÏ‘^k¶Ÿ®ûî„TÀ=Ò4pq5 Td ß"|ùòå¢,A] èë‘`_¨ùŸ’;fûq¯?¼í)¥ó_ÔþTâòõo42»A»XHW, 8EÍ5|¶BsÊRŠù/ U  ÑÈ@] (NÁÏ;i~zý±§Cè½þòý£Z÷Ï÷Pª + )\ í ÐÕ€ü0ªí;5?LÿBÍÚëŸbÌQ¥*¸PÊà°0!€ëžE£®úy¬°t„Kwø¡æß¿l?V» s¶%UÀú—F†ÊtX (]—fåõèŒ@G®éGÍèС a¬mæþlKê 420T– Ãj#Ó` t…a±( ñ,ô ­ùSÌ÷ùÜŸþô§ƒ®‰ù÷ËR¹Âи#$÷ÁTë¾æÍ›gþô§?™3g°J7:áuÏ(‚åƒst§|ÇIlgŽúýYXix°äû³€F‘ØÞûg?ûY¶) ‚®_¿ŽÓÞ ýŒŒÓ§Ÿ~:[ÆkäsôùßÔw…¿ŽšR·œ|¾³™à°g FŽ6ü9÷BŠ™õ´…ŽôËW½Ms¶-uÀv”úBe ê>„?ر#%cî€Ï}:Ò¯ïfò¥Ms¶­- Ô*KP÷ à0 väÜí¡#ýxOL!W­Z•í:•úº?ÛÄc[@WT*KP÷ à0 v,]M éÇVaÙwrrÒlß¾=›ûó|ϱ+Ÿ1þ^Æçd¨-€¾€Z³é ÐÈ@ïããr`–ßÔÔTH?¶†^ÿÍ›7›½{÷šN§ÃŸòGZ ïóŸ¯Ø ïmlg#Y‚Hø½ñWšåÇÂx»k® FüAû¯\¹2÷kß×RTß•‘}i›(Íô½À¾tˆ ÔÕ‚U~¤×¿4âsÿcÇŽ•—6â¯ôú[^Ï’¿”Xú;,uÌ?+œ?¶M”f †Z pˆ ¼(ÀÏÚ§>ßú=óôŒø«kîïàõÿXúl¿ð”pW89j›8-=ðª°õýØ/A<¾É!2P÷ p^ÿÒˆ¿PY~¬b¯?ü}§ø¿©Û&ºÒ…«¡:GW¼![êõg¬¨wú±¼þ‡ä`$Km¥«¡zIWFFãp ×?ÔÞ~¬=5ÿÖ­[]½þïñS=¶M°Éøj%] n'¯¨wú±ÖÔü»víj­×Ÿmå±­I8óØH¯\¹b.\ç¬uX @v îÀ1†šÿ)9µ[xÅíŸn¢×?ÔÞ~4ò^ÿÛ¨ÞøÔVogö=TD oæ°P:Çe9ct¤æ‡Àg+…öúWÐüÉ{ýó§žœo¿ÿ•|Ø$Œã-Â*ÀÙ³g3+«ØÝ×'aÝBñølIý_¹„ÒDqóèÓE¥Ž!Šço…w ÿ³ðƒÂ³6¨E„å¯ýkó‹_üÂüö·¿õ–Î-÷Ê‚)¾ßùÎwÌücóÐC¼@ÔBÐü¿Æ’ßÏ… ·¢ïÆJà¡D‡Ãäó¹?€ †ŒtŸ"1ðørLþÂ)<ëá—s}yþXiñ-°™ßÿýïß|ík_+zøQ•? c¹ïß…?³á€\7µu €ù?ü}ú½\ pØ'`B*6޾§9Ý{û9Dú½,ý•ôz߃Ðó¥­ 4"*¢¼B‘Ã>ãê pšós½?‚½ý8ç‡ÀçÖQ[@iD ÷ „SðäÉ“Ç'9ìÀˆ7z•ý‡'úlÐèe9Åø×µÃ³ü6lØ`ä÷OIÓ[©ùÙ¥mõÀÁvBšöáå·ˆ¾˜êØUÆ·5PÁ°@*çÒ¹[•k燿‘f!ÆR¸pÎ?==mðÖ%hþHööƒæoÕœ_ÚÓGmµ8#­Å ë#ú°Ë ´5CK15ðA|÷Ëý. CÓt…Qï6-kŒ?z½Ÿ÷xòÉ' ,€b~ÿ{¿·æ´ÕûÚšÖSš§ïÝ»wg;½"÷Û79ø8'†vìø¾Då9ùÌDðѲeËʶ”º(ukã~´p¶Iû:Â}Ä]}ß}÷Ýì<¦NÀ,1â¯{û ‹YÛ}U …9ᕾE¡v ¦/óN<ø rÔ¶ýœ¼þœó‡ÞÙ‡š¿B–ßorýÓÚ¯mì8¬á"Œóí>:G!ÈÌÂ÷ìÙc,ÚV@[¨# Î[…aX©®9?5ÿ8eùY·œ€uvxt±*€—L¬¾E«W¯6?þ¸á&“¾VxÄ “ ËŽ[¶láéÞ#–)¿%<_¸+ A•2•zýézg®÷;ìê ñaÌýÿ/eà«Ö}\qY$fe{¬]»Ö@3/_¾<{­´oÀ›Ñ~¥^Fúqù•øø>VØÕ÷}¹÷Ï…!R¾•`7`Ý'€qX €V Ec°_ÆV[J½þ¡wöaÿq½¿$ÖŸ—òKqcCã&J;šßwT`ï Ç`¿'¯è}ˆ¹Ãz?/}P>ü“ðJa„þbJ04n!·W‹z–9°°å{*à°{0çÎx¿ˆsÓØs¨ùŸ’:ï¶.·Òëjg¢×¿d½ÿÆ…·ÿBpÿZmù•°Ré[Ý­çÚš `m¬œ„÷ÿ…ר.`ŽPÃû<"õÛ$üUáß Çž+à”ßÿñÇ›_þò—A×ú+sÏ=÷˜§Ÿ~Ú<óÌ3Ù»ü,³à2a©mù;aàŸçTúCªîFvã@h'æ¦X–êK êm<}paEÀwd , °Ã~¬êŒ9éËÂðRÇf ×RÍ_—×éÒ¥Ù†/ˆóÿÉO~bŠ]‘ÐDfû£ÈB(ú?ßç½Y"ã"J禾{gPy9,‚õ†fzNøˆäÈúAೕêòú¯X±"[Íæâá·Ö=w’íÅRr“äe<Œ*¨ ;¿I”zîýMù\87åu75Õ ‚vNŸ>ÓˆÑ÷N9¼'5|1Y˜Ju„· âJÍ¿ÿþly•1ÿò?Aéý÷ß7ï¼óŽ-¯q  ëÂ3"0&$GcŽLù\û™ý‘ÒàŸ¼%2´E0ª DÄ3¡ž…”hª™}ûöÍÈúôÌ͘tdKºçöWÈ`™Ä9K #éGÍzg‚têÔ©l?dûæ^‡‡>S©ë<òÈ„ähÌët:³bC²«âýÃñ@Kdh‹ ªÀõ>|˜œ4k¬8ÞÌF›¡fzã7f0xø=T½é `ŽÀ¦Mð5‰ë\LØYƒ´¦äò®pSA+\­°Î—›ÒüÀìJ|ðA–£AüóÿWÒùKëþž·Dhp\`c §ä²ª€’‡ßÁI’d£ÍÈ4×™væÌ™ Äí Aóƒ¼kÿÅÞøË<Ù ÑHƒ²‰?Lpf9öY×g§H¿º4¿c£Ñ—ìWŒûÁB¦{sˆ¾‡þÈÿKSßóãâ÷RoæÑÝÂáÒ9Ÿüžq]:—†ôÁ'HДXçº85’VX¨ßkÂÓ,«¦#çþ0= óûëŠô¢Íì×ÌäÏãŸ/ýQd!ä¯õÝÁ¡E€©ÍAáË®uq±pMGxàœÏõ¦±\'É"â-¦V`µ8Hø½¶#-8 #Ý? #``@às1¿¿®H¿¾›øÂþ(²ÜÒZdK¤Ô2³î" MJç|,˜s?8cR ›;Ð4öÀç1¢F‚bÀþ¥ùr=~_.e}Kø![™´¨hÑØ®Iéû£éöä-‘{ï½7 p²¤•ó9Åþv‡\°v(ÇI²Ðë‹%˜θ;Ð ‹5Zû [ô¨ÿWºoA]ùý£6"µÿçx %òðÃ‹Ž´ –½ €­R¼½.}”ßÓ ¬Ã‹ÞW‰~¡æ)Ù? ©V_•Ï Kæ8˜šš²­½7U×ÖÜ—ã–ÂÎ;míƒìL.À¤4x;ùR9çëñ¢TNÉ%ûø¹§R8¸¡Š§bµ˜*D’”pû´‹€`%Îùr^tëµz²:Hb™?›ÅM'NœÈvUîv»qW´%µc$),Dlfcñ\tmjÞîúÙu:ç«Wk/Æ+µa­(Õƒ#Iñ%X_£‹i²¨÷&:çëEC?ÃJ©r«€ˆ#Iá(ØcÒù.`Va:盉žPjGÀ‡h( s¾Úû:ê^¹rÅ\¸0/Ò‰ª|øˆ†òèœ/ªqÐxeB¿W¡ñ¶¸C óÕ3" U¡]c'¾WaÍš5Ža¥zð1>†õ4OïòÅ_hר‰ïUرc‡ ñ–åØÛßTý|Œ¡|:ç ÛåÜÕö±Ç3ЮÑ<© Þ­ÐGÜK1ô{ún:Æ_`eAÐnذaäñ1”Ð9_ØÑÇwÙñe¢aïV©t¤Ñö- ÷þ7–§B¾W¡÷^ãü™o<Ú¶m[4 C Îùú‰ŽWJv‡wÙYßp4z –pZ®xUމŽp_Ü9ß«qòäIƒuj%ÿðG° ¨PHç¯Ê s¾<Œ~¾S²ïÞ½Û¬\¹²¬PtpûØu徨‰ŒÏ}Äq199i`Å(…A ÂVÀŘ%MtÎ7ס. d/y—v|Áûê m\7aÃ=06ØœÌßœãbÕªUYV ÓÂe«5µò`UøNŸ^xB:0¬- ¡oºÂ[~³žrÖÄIóB3Ô’»_xJ¸+Ü-‘ƒ­ëVÌÖ­[³ß‘&þ /ßlÕZ™œ¤Oˆ[“qCKÓºrÖÙ{–߬§\´ Ó­s>š{*é­žB²ãÁÇË+›Þr a‡…1~°#mß8B»z­˜uëÖõYr½R°%ØÞ½{l_>è¿Ø/¿t!Ÿ@Já‚dž ϯvIAÜF[%}/:ƒ?C’ÿð‡?4yÉnIïœ–Ò Ù!ŒcxEAGx›ð³ÂÖ—ÊùŒà œžž6©lÇzÇrtØ”UŃÿ/ÂoòÄ cŸä.¸ƒî#áÂ9ÿO%=‘p;!ÙM;· }}xYÉS³,–ž·x^Þ oV¬€—]Jw(§tÎÇåç~<¯G;ì¼ýüG'üyqGú$ðÚ²–@õ·[±è‚@p"i¹®WIï­—‹ò’ÝK¡ Aý`•œ†%ðMa|F…ã$»BÿŒ‚Ç|Я„‡ò ¹øò/QIŸa^Ë8ûž¦d‡é#Q1àÁAè8É ò‡ã>‚`(ß‹€l”üœO%=`÷OÞ$»ÿª•–HK€a0öZ<¯G? ­ñó·w±zÿG%}/þ?{“ìþ«V©Äü8©ôÏzñ@†Öøù’],€Þÿ5pTønžœ'Çw…¿zó»FCXþ·ðÝ,xƒS£ü8I­þ±××Û¸¨jÄŒÖOP* 0T2P…òõRE@ˆwŽVM€ €ÐkùŠ@Ĩˆ¸s´jŠ@hT„FXËW"F@@Ä£USB#  4ÂZ¾"1*"î­š"¡ÖòˆPqçhÕШ°–¯DŒ€ €ˆ;G«¦„F@@h„µ|E bTDÜ9Z5E 4*B#¬å+#  âÎѪ)¡Pa-_ˆwŽVM€ €ÐkùŠ@Äü?_cQôIEND®B`‚ic09Ææ‰PNG  IHDRôxÔú$iCCPICC Profile8…UßoÛT>‰oR¤? XG‡ŠÅ¯US[¹­ÆI“¥íJ¥éØ*$ä:7‰©Û鶪O{7ü@ÙH§kk?ì<Ê»øÎí¾kktüqóÝ‹mÇ6°nÆ¶ÂøØ¯±-ümR;`zŠ–¡Êðv x#=\Ó% ëoàYÐÚRÚ±£¥êùÐ#&Á?È>ÌÒ¹áЪþ¢þ©n¨_¨Ôß;j„;¦$}*}+ý(}'}/ýLŠtYº"ý$]•¾‘.9»ï½Ÿ%Ø{¯_aÝŠ]hÕkŸ5'SNÊ{äå”ü¼ü²<°¹_“§ä½ðì öÍ ý½t ³jMµ{-ñ4%ׯTÅ„«tYÛŸ“¦R6ÈÆØô#§v\œå–Šx:žŠ'H‰ï‹OÄÇâ3·ž¼ø^ø&°¦õþ“0::àm,L%È3â:qVEô t›ÐÍ]~ߢI«vÖ6ÊWÙ¯ª¯) |ʸ2]ÕG‡Í4Ïå(6w¸½Â‹£$¾ƒ"ŽèAÞû¾EvÝ mî[D‡ÿÂ;ëVh[¨}íõ¿Ú†ðN|æ3¢‹õº½âç£Hä‘S:°ßûéKâÝt·Ñx€÷UÏ'D;7ÿ®7;_"ÿÑeó?Yqxl+@IDATxìÝ‹“å‘.üò±×WîèŽ$4 ˆ«dûÄñ®Ïî Nø¯ÞøÖ6ÙÇ!dc„‘$$w{×ë]ù+)åf4Ý]ÝÓ=SÝ‘S5ÕÕÕUOÕûæ“—÷­oüíokJ B ( B`µø«u¹uµ…@!P…@!"õ…@!P+ˆ@€¼éuÉ…@!P…@€z B ( D À ÞôºäB ( B @=…@!P…À "P`oz]r!P…@!P žB ( B`(°‚7½.¹( B (PÏ@!P…@!°‚XÁ›^—\…@!P¨g ( B XAЬàM¯K. B (ŠÔ3P…@!P¬ EVð¦×%…@!PEê( B (V"+xÓë’ B ( "õ …@!P+ˆ@€¼éuÉ…@!P…@€z B ( D À ÞôºäB ( B @=…@!P…À "P`oz]r!P…@!P žB ( B`(°‚7½.¹( B (PÏ@!P…@!°‚XÁ›^—\…@!P¨g ( B XAЬàM¯K. B (ŠÔ3P…@!P¬ EVð¦×%…@!Pß* B`e@ø¿ªÝσüÿ5Žû_¡÷†î ý§ÐçBÿñÖÿwÇò¿Cí·Œ’¸~÷aè+¡gB_¾õÿg±Lücõk’¸ÀÏzI!0wŠÌâúB W0üÚ=CôŸ™ã9þwBï EÖBŸ ýn誢ó@è•Ы¡°ø4ôBán9(‹Òð[–Û‚@€m¹~¤èÚû÷Bï ýv(cD YÈÆA°ûBÀûCEüÖª‰kví0€Å¿‡&ñJ f ý<Ô½°^RÌ"s‡¸~ è ?ˆ39úh(ãôýPáæYyBûŽÇãÝz4tOhºX]qÍ®Bÿ…~š˜Xm ˜ÿÿjŸ?†®‡Jæ@€ùc\¿Pô¡é‡BŸ Ý*ÀøÏ*'ÏøSQ¿u(T4`U €k‡ƒ®.àÏ¡ >%ú_QžÿõPQDà“Ð’B`î˜;Äõ…À¶!ÀЦ‡™FWH™‘aŸýŸ¡ÿŠˆ0ØHÀ,ıˆßæö›¢ «*€T¬3=‹$p²þU( vÂþÿŠ0 fîcÞËXÝ’äq<4#6ÖKV"+xÓë’—í™Áex3ÏÌ¸ÛÆ=sKÅÒ>öOc«[–4$i´?Ý–¾€pýÒ! qNCœ81Äjxþ¢–b?Da’÷Â3 ÒÖKVhI!P,ŒÍÁУ¡rü¼I;O_>úÇ¡*òUç—ÌžñgÀÝ'$í¹Pë"×B¥|wVý´c!YsðN¬¯‡"%+ˆÀ¬¬„®.¹èrú…>Êà3ü£‚øÌ>%ýD ïŸ(€Z†z–ý=€X ~Çz€a¥À*ÞõºæEA€Éh§.vîjϰ²Ï…ôyÿ34sü¼ÊÌï÷.'ÿ·¿ý­ù¯ÿú¯æ?ÿó?ë”|ã.µ2x~Îñþášo~ó›³<_œÃ¡Òˆ[Þ» ÝǦ-IF6Ö(>ܬæ oD>gU3°%øû÷å"ý»'uF…@" }2â™Óד,¶c ¬óô7ËñÛ?É‚ÎÜñfeLâP[†ÿ‹/¾h>ýôÓæ/ùKKñüÞœâ×.ð¿ÿû&ìŒþ·¿ýíæ¾ûîkî¾ûîvýk;Nÿû3ªf`ú#ßüf’È®5y#ªf`«È÷ôûEzzcê´ @`cN`…Ò3Ô‘[:ò_¨ÿgŸ}Ö¼ûî»Íï~÷»–|õÕW­ñg`û(¢HÀ~ðƒÖø?~¼yä‘GšÝ»q¯™íâç @ךçHEHITÍ@€°LR`™îf]˲!9áÌéûŸÁgø‰u„1X¸ÿ'Ÿ|Ò\¼x±9sæLsíÚµæóÏ?oCêßúV?»¥¿þõ¯m”âž{îiöìÙÓ|ÿûßoî¿ÿþY€¸Û*ù| «9p#€ªØÖÛ²}?ÖÏ–¶}×_¿TÌI»Êp«ãgÞú(É\«ïo–ÓêŒÜŒIß줷œãŸwN^Þœ ý û¿úê«Í¯~õ«æ•W^iÿÿ÷ÿ÷öó>G`ôÝï~·üÇüGC¿÷½ïµÿ« ðyÖ ä2¯{5£ž¥.Ÿ«9ÈÀ°šÔsN<»ˆ©g²ëó»–ì$EvýúíeC@{•³w½éÑËé;~’ÇÊŽ6ɆÏ3oëó‰dÞ9yž½ü¾¼ÿ•+Wš×_½9wî\³¾¾Þ0þBìi,':ñmÚ9û—_~ÙPçÎøïÚµ«Ù¿[ E R@¶¡f`«WîyUsÏ• Úlž©LW(Z¬y„E@I!PÌq9ûq¿¢£Ev$§?ïœ<@ý·~ؼöÚkÍ… š7nŒÃ¥wŸÿéOjÞ~ûí6š! °wïÞæÞ{ïm€m¨Ø*. <žF|Øñ†Õ ˆ ˆ<™ê¸j†¡×ãíEz|sêÔÌ©ËÙ» ŒìHNÞ9y¡}ÆS@ÞÿÏ–~^Lqî®AãåË—Ûš^?ÃOV f€áGk¡YKPó ‹ Eá.Õ9öÓ`Žßy Ãó ºäìí?JfšÓßøCBØŒSŽ»÷¹;Cµ9y¿E2L.ìoøß¢ Ïÿúõë-™Éô†kÉÜ?¬­w­Ø*ù»™F™CÍÁÆš§ìÙ— ¸jCê] Í/iªX-éEúvGê|úŒ€ö2˜ãw®Ü=ÛŒ{æ–‹%B`ÿÁœ}ü;R²³ÌÜ«ïOÓßøKsü>g¸ä³·#'Ÿ€¡¢IF6žç¢ü 3pM£ëÜÓçuv­ØêuoCÍçq°fÀ){Vµ¬`ü? ½z5 Hb«%}BÀ -) nèü† 5ìNnTñ“¢½ÞÃߘãgÀx‰Æß/zN>ðßaüé8éR30îã>G¨€š§ >jIÞ }- (é!EzxSê”z‹¯þ¡Ð§C|†_ïô~þÆ?ÃÃ/CN>îA¯e\ÍÀVO¾5j`…zá”ÚiõE„>J€>Þ•:§>! Äéu®:·¡?ýçP!ÞÎÍŠ¯›‚P¬ÎWÃènö‹jϰ4u³¿@N»Ëx,zN~¾hoýèãj¶ú “Ödª"Ÿ“Ô ˆ!Œÿá[×£= Ɇj+7 An¦ÆŒz‘ÈÔW¬–l'E¶íú­EC@þñߺ?ôÙPyþÌñ+€ÊÎKǦ=Í,gÇ) û¨¹ô³0mظ{áâ$ ƒdbäÖ‡S#0®f`êßúb’À®5s¨ðì/T[S  &À¨Ñ€š7 @è“èÓݨsé<™ÜæÑPžÿ¡{Cw\6æô7Î¥Ðew¿ã`ÏèºÖ lõçºÔÌ©fF¨ˆYŽ ¸ëÒ5o@€Ð)З;QçÑGsš€ð¦m½9ýsé/Û¸û^€¾@'1®æ`j²f&ç¨yzöüèÙ ©ÓÙVx+–ÚÁ`n2ÇõóüúB¨H€T€”ÀT2fÏp­e~ÜA3W;,§¿q.ý<®PoåøÇ¡»|Ÿ«9W3 zä9%ž¥)jDÐÔ"˜C%jÞ€£/R /w¢Îc'ðü+Râ©M…J¶)ò“ï—÷?Êógü“(Äêd2.g?îhãrú:ô$ Ž• ɆÏCÉj 0®æ Ÿ‹a5wÝuWK¡õío»}áÑÝwßÝ®wDPûB´›ÁZm¬æ vZŠìô¨ßßItNãÆõ}f’ó—³DåôÇ!TŸoD kÍÁf5æðýï|ç;­ñ?~üxóÈ#Lòúcd™ÇO7 ’-ÂfIrÞ€b݈’m@ À6€\?Ñ[2Gùtœá°qýö™‰ŒËÙû‘ÊéC¨>ß kxý"°gÏžö]<ðÀ$`Üé ÖØˆÀ] U(X`r3ú¼ÀŒ€¬Ã, ¼!IÏLÇõ ©f˜}0w*ÿ¾Ù8ü9ûqfH¿rúãªÏ§A`cÍ€cxÖ2àsϬw ßÿþ÷o§™¦ù½øŽœÂÚÁyl“§2yP½K @˜§˜'ºuì¾! àñŸË¸~ÞÒà¸|/l?«¹ö“dî6Ɇß))¶ŠÀÆšÇó¬™,Ê3|îܹ– xõñáÇ›C‡µ$@djJÙlÞÆÿ£Ðz—À” Nòµ"“ Uû.:&'9:—qýsü:ÔškÑ™Õ:ÿa5jÞzë­Û¯o>vìXóÿø- Ø‚ˆÈå¼?ŒuR57q˜ëß"s…·Þ3ÌׯèïÉУ¡3×/ÌñâÅæÌ™3í{âk®ý@¸diP#à¥Qˆ¢°o߾ƨ€-€A|ÛgÕ "3§õ"s¶Ûsþ< :“qý®Pˆ”wtãÆæ•W^i^}õÕv‰ ˆÔ\ûP*Yäÿ?þøãæìÙ³Í(ÖoÚÔ@œÁ¼"tklËš N˜«%[A ÀVЫïöÍrþ3×/Ïø_¾|¹¹téRsúôé6Oº¾¾ÞK) ÌÛWξïKß(³R‚ ¼ùæ›mMÀ®]»šýû÷73˜7`cMÀÇñSŒþP5jêDrnX-™"Ó VßY6æüÿ%NüñЙëgøyþo¿ývóòË/7ï½÷^ X€ê< I@zéþð‡öUÒ"] g0o€S¬ Èyƒ ¡o…z±P4¡PÉ(°ð꫽G`0§x4ÎVþß¶™ˆqýï¾ûnëõÿñló£ò¤%…À* ° ó Î` oTðY¨†V @ØŠØ zõÝ>"0³œ¿ü~†í­!ý×Ïã?uêTó‹_ü¢ÍÊûÿå/"–%…Àò#Àó¿~ýz;ôUþŸÌxÞ€ÍjD.…jç%[D À¬¯÷ ÃÆqþSçü»Œë—}ÿý÷Ûœ¨°hI!°* ¾v2Xë2ÃyL0`ˆ y;¾ê…\ï„–ñf!Efb£/C¬“Èqþ[Êù׸þ¾ÜÖ:¾"0é¼GŽiß+0Áõ0öÂÿÿŠÜ[ ÿW¨-@تØ*‚õý>!0˜3<'¶¥œëïÓ­­sY46Î`¤€yî»ï¾i.Å´À_ÞRë%3@ À @¬Cl¼a~Ïm†%ç… ½´‡çÿ£ÐBE„y ¥Æõw†ªv,F"°Ù¼¦Ê6o€Éƒ¼c@ê@Ê SCÈÛçõgƒÈHÀÍâœ!_¬Í£(0Ÿú´_x^…{ÕÀD%°m»CŸ :ç_ãú½’B`Flœ7ÀBŒÿîÝ»Û)„Í$èDÀ”ÙcHŸ)¾Ã±®&àj¨‘5 @˜FŠLƒZ}g§Ðë 5œO'`RÕÂ^çûãÐã¡{C'ÞÉŘʷÆõO ]}¡Š@ÎïP8øè£6Ï<óLK8ÐÜsÏ=틳†„ñÿN(Ã/HÞ =j‚ ÏCK¦@ À ÕWv žÿC¡O‡2ø9M("€øÌ>S‰iN/\¸Pãú§B¯¾TŒF`°&)ðZaÃf¥Ì"8B}@›ùãõ‹ú}úUh€a)0 jõíDû—ÇWàw"”—ÿÏ¡Bþ: ÿéÛ:Ë`Îÿ—¿üeóë_ÿºÆõwF¯v,º#`Ø ’mèl¾K@ÚíèÑ£ípÂGB <ªÝ?ºj»ö. ˆ(¬š€¡«èŠTí·hàŒ¿b>E}òûòüÇB{ÅÙàϳït’Írþ5®¿tµS!01ƒC­_¹r¥D('ÙqÀlÛÚ»H€ˆŸÁP‚‡J¨ @–t@ @j—C`ã\þ<ÿ'B§Êño¼Š9sû{³_I!PÌá"Fx‡€tÀA(  'CõÄA¯…~úEhIŠt©vÙ1äõý=z4ôPè=¡3‘9ÿk×®55—ÿL ­ƒ#PõÏð+þûþ÷'ÊÚ w°¼ª& À J#Ö‹Œ§>Ú°|îCÿÃ[úB,§×ßûšTÎÿkpÔ?…À¶#`؟ἄû£>j׎ ¸ñ\yÿœÆß’…Áj¤¤Scµd"ƒhÔúN#°YÎÿÙ8)Þ?B€d0V'“ÊùO†Wí]Ì Dü«¯¾jߣñÎ;ï´é€C‡5ßûÞ÷F Üx:ú ©Îï€Ñ¿ª&À(‚ô¯¡Y/«%(PÏAŸЈUúÊí1úÿúxèLrþæö—ãÏqþ•ódK @À$AF˜€¬­­5?ùÉOÚ ‚ œ@8ƒ5ò ˆÁ…зB? ÍÔ@ŽŠM%(PÏAŸÌé!òÿ¶ÍD>ù䓿Ýwß½=οrþ3u§2k¯nêÓN±(¿ŸoÔ)…{÷îmß0!¼lQB)5Cˆ€ù¤> 5•p€aPŠ ¢Që;ÀLrþBŠBü:KÿË'RC޼Øçå—_nN:Uãüwâ.wüMÅaßüæ7oß;_s/û ™Ÿv>ù¼y¶J&CfòÿÀçŸÞêåË—Û¶ûå—_¶õH€âÀļã/lV p)´ˆÝ& ؔڴmhœòúƒãü'ÎùëŒu*9å¨Ü"ÏBçñ­o}«klÌñ믿ÞNBòþûï7^Tbÿ’þ Åa†„¹oŒé@2=_ž!çh8[ÉdÀÌ=ÖFvXšƒCqàž={ÚT€š$!ì(v”П˜+@m€áeü„ͤÀf¨Ô¶íBÀdé–rþ:žÃ{ï½×\½zµáM㯓֡XÿðÛ×^{­ê·Æùo×íìw€]»vµ¿×Æêü3¢3Ù‘æ³7CÄà#Žž)õ$*Ø‹L‡·öI’¼{W@’òcÇŽ5ÿøÿØ9rdÒ×3öÂÿŠ 8–ÂÿŠK6 P` õï¶"0˜³;¿ £Z׫=zO(Æ:¼} Z¹€”õøã7?üᇎ»OÕ£½gMá@†k3d›ÏâíkœreðxŽé9÷¼ÏêøSžÖͯm¬9°UôùÊ”Žg_ÛÐn–Aòº¤7DûÔûXW¨íO ù®)‡Cõ[j‘>ý"tåÄ^RtEÀó‚~Ëçg©=Öl›bùþgC†bÛâtµÐØÿ¶ð@ub¦öÞ4ÉϹsçšõõõ;&^É,£UÆÿ6„_[a,²ØîÁlž~úé‘ãî3ת“¥¼0d`…ágÕtÖò¶é±u®#‰ïŒ’›U‰7 žsÏv>룾;÷Ïà?Xsàݰœ—@T@:LñAŠ—!%æYÝðwÞy§M.*Š5A ÆÃËóW£¤6àbè¥P„`VÏPjq¤ÀâÜ«>œ©ÿÜÇõç…Êù3ü<ÿ·ß~»}›Ÿùþk.ÿDh²%¯_ÙT»ÆU¿øâ‹ÍsÏ=×ûq÷Wij×õÐwB…m‘÷¬X B0ú†©"²ž÷^ŒMdì»Í žú§º=<îüc[+ƒ ˆ,º 1FdTjmm­7âðáÃí°À ®C‚Xš!PT`eíàÊ^xÜô’ÉàÕ?útèžÐ¹ëc·žLÎí¯CSé/X2Ön½¥xçú7žxâ‰vHß#<²Pãî㪠Ýz?ôÍÐk·þgügÕ‰0 žsÏ7Ca½ Îc¤ wî©™0E „Ê¥dT™A¤DãYn‹#Í 0… @ÝóÛmdŠã,ôWfÕp„:ùÛ`Å<*ÏE†î5¬pès¡ÿ3TuÿÜÆõkärü/¿ürsêÔ©æ¿øEÒ´-‡ÿÅ﯄dØ=Ãð.:CóãÈ´ˆ°=ïŸá?yòdó³Ÿýìk¯[wœ >÷¬Ì2Gï¤:iaÿ3¡¿ýyèõЯBç@l=ß „±âRYžíÂ5ÎÊ`äqò:ßõdÛ‹Õî"= ²#̓i3©´E® Ò“óG8RiAĹq½¾+@úÈó$4²’ÅqÝ­H$j σð§Î.óžsüÏÄgÇníƒ vbÙÅæñ¢ao×/¼™EM¯¿þz; ˆ¼ß"w`ã‘Ø|,~b¼á¢$] ÀfãøMµkÎ}¦b@Äb†ÂP ËÏ*GïùrÑ =ƒö–¾K¿á÷ÒxÆê–%»çØð0ž¿(€%B€ 8Y{«[Ç"®S{Óî´¿l{±Ú]=…q?üp님icËPC~=¯IhL¤Lñ®€$©È]F²ëøìY` nâ /¡KŽÿÉø½¹ëçñæ°¦×^{­¹páÂÊæüun[™{_$Eg98×¾ÀçÚŸuŽ^ÿÄ8 ý ùÿ&ÔØíCç) "#â`]$@J@:€ñg4f!ŽÅ1ú3©9` —£?ýéOÛ{ïD—¡&ÀóL)€ï xöÙg[2ðÐCµDh³Z‰ö7–¼ð_Iã‹"·žˆZ´tÉñÛg&"¤q`\?ÃäÄ&Æõ¯rÎÜ8ýq7ñ0é7ƒœkßrŽ2ë}FãÏBåÿýÆvI^(ÍP3³Š°hŽ¥M!~ǺˆÃ–ÅHµµµ6â³L5 Œ¾!ß`]{A2º•û Yfä(—Cv[îÍE–ûþn¼:»ªûn`¿:ZáÇ™æøãxwˆð5ö¾Ù¸þœéË—4daÿeÏùæø]7|„ú…ý·:÷~VLoa¿g#Ã¥ÖÓSÊg';O†LHžÇüëП‡ Ùo5G3çqÓHfÞØ.Ѹ* ,¯˜ÌB2 µ°YÍßÄ\»…Iâ«ÃÅÈ€5¢jBçI{ÞÒ³~¤~~¢¿0ÜÑkƒ¥ ]—þB ¤Ñ|¶Ý‡Ä¹Ÿ;§³*0'`{zX÷›³-9þh £Æõ3X™“Ö1Ù_'µ¬²1Çï:a`û,æÞ‡!)M²Ñnìö‡agp‡åôÓCŸWŽ> ¡ÎgVÆ75Vü^Š%Ùñ¥Y‹¼.íÉàù‹X"ÚjF&®ØX ¢Æ@^k„€úmÌ~Œé¢‰¾!ûK$€ñw-I~‡\SâîþfÀv>WCNkû7Ø~Ìwò·5Ç¿ñBk\ÿ×Ù˜ãWͬ#²ß³gO;ÎYÑÞsö_?¡;ÿ—Ó× Û£¿óLç³…¡`€ÓÏçWn!DKe°æ@d6QÄÑЃ¡B'¬ ÈyD˜¤ÞÔ Ú%ƒ™Æ´Ó{´§Ù5:@qÇëpOðŒ'ÁíÑUmϩ؜ûò+<ÿ‡BGãŸYŽãE«F®qýGecŽŸá×yeàÈ‘#;=N_Ç(ïþfèµP†žÁÏ~##Œ×g¡Û£Ÿ\*ÙXsÀð#ˆÀžÐ¬EèLâ;·%ç 77„§lδ£Ñ¼}¬¾­(øC -3Š8æ‘;¡Å Œ¹¸®gCîºí·x]Ç̰Ÿýqè?‡Ž 1ÆÇ“Ë`Ø~0ü,ÇXãúÿŽç°¹ø áÊ|¬ÎL@w›EÇÈ3bŒN‡þ&tXN§sôqjK%¼ÑÁšÇS• Ð^ÓX™ÆV{žhªm£A6Öx±B°È‚0«™A '˜˜íƒ«ªØB¥`D_2=`¹ôR`¹o±Z'aîëý¡Ï†>:“qüqœ¯ /¢Æõ ’¯ý“^ þÙ\ü>$NSäì¿ö{Sü#Êø_ ½úFèÙзCExLƒ¹pë$;MŸ¯d.µEaëà‡¸ƒØŠ´dã¿+T{Ö®µï$b±:\<_H¦”£iyõ;zÌüß8u ÚKFÆ\¼DWþƒ¡‡ÂñF¨ˆKÖ,= (w{‰Eèð@èÉУ¡<ÿ'Bg2Ž?Žó5‘KâÿÝï~×züBŒeë¿ /¥çsñ3> ÿk¡ï„þ<ô­ÐÅvãDœa5Ò,î‹%Ñžµkí»s˜ˆaU’óç-[* \Ä"À¸îV\“ºÆßrŒñ÷€÷¿Ê"X롈.¢åyÿ*tÞµñ;+.¾dy¸7. Ã}2T‡q(ôžÐ¹ˆÿÅ‹aEÇ5®ÿë0gοÇsñg|9Ôd;€uÛJúÀàýᩪ @ò;€¼ yEsÚè¢çÿóšDÏRsÛ% ’?6–úÊ¿†zæ? ýsh€¡d±:ÎbèxK_ˆå`È0þ\4®š7ªÎÿ«¯¾ÚüêW¿jßÞ'çÏ«Àȉ}Va\ÿf¨fÎÿÉ'ŸlTõÏp.~£»ŽËz†,3|›FŠý¨ï ñó0ÿ_迆Š\ Ž.é"4 ƒuéÖ)ñT ÔÞ…µóž}´C†Ÿ÷/àùÔž‘‚E–ŒHŒ‰è”ô‘úDé”Cyý7;«¦y/Ö‡âŸ-T`ine{!ù`Ë fÎÿÙXçýë <ôS?Ø]rüçÎkÖ××[c¯ƒÉ†8HâVB„$³˜/sþ3ž‹ŸáÖk3ÞŒBz,ّŦ‘òÍøÔ¾ŒÈõг¡o„¾ÊÛdü“TÄjÉ#€ìñL‘3÷ŒáÊ\v3d€êÛ‡¶uíR*`ÿþýí[õòÛÚø¢E\ ÕÞšµ3pç_ŸCý¦¡ÒCq‹Ï–JŠ,ÕílÃ9ÿ‰Ë{¯Ÿ!óì0XÖmË4O¬ŽÞÿÆw¼öÚk·k¤õ}K 8/y~ÑŠ|»¡Tb@Ô7äú+ÑÔÝ¡†òúm'ï…vƱýÆ‚ü)° 7êÖiz yª-çü³pFèLƒ9}útSãøo!Ýa1‡œ¿K~5ôJ衃9~!ÈìˆJåì„’–8Jyn.…Šé'x¶Icu¸ "ŠéxмiÑÆUŸa¿¾Mì|´GdA±ô¦CçœÍï¼mSl!œô¯+3/@€OE?šiÎ_ãòçñ¿ýöÛÍË/¿Ü¼÷Þ{m%m¯½w§4‡œ¿ÿ¡ÆwËûÿ<ô­PÞHI!0 dPÅ:ß„ðáX?ÊQ-ì$jÔdM€Ð9ïZ?¡. =l5#Û'ÉÈ„ór9©kÑVÇbäzeæ(0æ©èÙÇ3Íù«ô½páBëõkÜ^ úç?+*.é‚Àrþòúë¡ ûùÇÊñ%#`ô…¡¬2¯_ºhW(§¡3ˆ}o‹‚V“餹T^µ”aߌÿ퓾µ¢€á7ºÁ¹O!"q"*ÔúRJ€þßV¬}yÎÿ—¿üeóë_ÿºùÅ/~Ñû‘÷ò+Àsþ¿_¦ÿz%T*`i;Ÿ¸¶’Ù €`î¢GjEn„^µPئÿФ—«£…ñÜXàE_AŸÅøÃÿD.84ÒÖv‘ë–#D'OøÁliç(w·Ç2÷œÿ›o¾Ù¼ÿþû 7ñÇNܳmÊùËûóþyþŒ¿ðnI!0 ψz5"" ÏõPùlEmRûB4ýÊXñ¼K˜ºšQ}ë­·šwÞygœñ{ÜíØAÞß >øàƒöœfØ»woÍ °ü"éÙ¿sÍù‹(þËôìÚ{w:Ûóÿ·¸è?„öÛÅêÝ© €$‹¼WúZ¨ºr4ôdèлC; OYA œ?ÚR”°oE€/F=À•+‚háÆÇ9Ïp^ÑíSdeáç(w±Ç2ל¿*ßÊùw¿ûÛó_³QPRÌÁšµ{B9 @ž„¼¿@^ußóÿY hX " ’1£y`Èff):W @(™ ’R©ÂvrvûB_ áÅ¿Ýdpœåü»a¶q¯ÊùoD¤þ_xÿ I.#ˆmY ŸÉ>ÇrS>gø ” Ðô+ˆ€eVßoúåØè¼äùE6?ÿüóÖøoq^€]q¼~ÃDÝ$] /.¦dçÐøÜ “zàügCŸ =ŠLTijÙ8ÿÊùŠ¥rþªÝúŠ@Š…3üj}µúýLö9úŸ¡$ Sûöíks錫)‚ÿ˜À¨ }ïÅP„ †ê(b¿^K€~ÜÓ÷B…èî}"t-ôßZßˉeã8ÿÊùOaåü'ëöî%êkä®ý‹~F“©î’ôkk¾–/¼k…ÆëcŒʰû_ÞÁ ™@`¶0/€¾92À˜Â¥±›Ks!qSY,SC<úTèá‡ByþSÉÆqþ•óŸ ÆÊùO†WíÝ{>3äÁþ>ÐçH¨5bä†døÀm=Ãzï½÷¶Þ¿B»E¨ ˜Á¼ÿøP£-²Ø2V[Šôãþa—ãáÐçCyþ†ìPÛ;Kåü;C5tÇÊù…¦>Xl6«  Ðï 5j9Eð‘#GZ`8Ýúúz ‡Éú,3˜I’óÿ2t)Šÿò~H$v~‰xe•Üœ)O—¡§X/•óѨ=*ç? úl Pµ.Àb›+àJèÑСÆ?>kÃçòÖñùR9ÿ; ™hƒœ¿ðæO<Ñ;v¬}7ºw¤oAÇa¿ÇYµ­¤Øi8æÐÏXŸHÌ `ˆÝ"äÿ³@qã¼¢ µq‘"J»T2”ò,ÕUöóbˆZŸHi^€¼°Œþåÿc–)¡K!E¶ï6fXßR¨?Çý %ÉÇu÷/ÿÿÑGµBYò×¼_Ñ€UdHTäñÇo~øÃÎ:Ç¿RÂVãü7"Sÿ/*ߎWô§îȳ½ÔóÄõµ‚L@ØJ³é·¥k? Õgg$Årá¤ÀöÜ2FÖÚÔãþUþ¿ªÚßË8 ”ûŸà!Þž«Ý¦_‘¿Ëâ=³y=ýôÓÍŒsü¯¤rþ©ÿ—L4r%æ˜ð¦!Fún†ßh­‡CEIn„Jd]À‘€"q÷¶A<@¶J[1èc¡¤‰Æý3ú<ÿsçεÃþÞxã¶0+Ùãx+%¼~!}!ÿG}´yñÅ›çž{n–9þxê ¯„Ö8ÿÈÔÿ‹ŒÃ%|8óyŒµÿì³ÏÚ‰vú6B)#(ý7ï-”Í4?ÂzèÛ¡H€y>ÔQ¨X()°=·Ë$ì¿¥qÿ<þ .ÜžíïòåËíH kg²’óœ»ß”ž3Îño|:„ýu’•ó߈Lý¿Èˆl!3@¿d”RŸßÐÁø»¯ƒý7›Éë¿÷ÖÒÿR&R'E„’;ȼÿ¡øhêqÿŒÿoûÛv¾³ý™ ÷ofÀ¾±ë;!˜nËÆJ] 6'"™ÑÜýƒ'ÆÒ"•á<÷NÃVùËóÿ¡ÿ* \ªá—‹Œ€g^Ò¡[žÀôÀ&)SŸ$Ji¶Ré˾I´3òߺë–òúE€õPýÉ“/Ù¶ûB‡Ê'‰ Øž«› ÃgÜ¿yÿÕ$«¶}YS]Æõoqîþ`3üByƒÃ|4rÛtŒgCß}'T4@¯–D!VK …DÀ3ìÙGt=ÓrÚ"®´×ÈgœñL¢® WdÎòüùó(¥Z¤½/â|©óÒÇä¹8?ý3[©/@ôÛ–CEÕôçãdºJ€®Hmm? ÃÆ´=8*Iå”:ɪŽûï2®ßÛûf8®_g‡Í3ð†ø¹oŠ6÷ýMèïB±ÿ’B`™`äÓÐ#¼ 2`©~‰‘* *Ošää:ùB­Ü>ôË;ðAFÍüiPÅÄcdÐIƒ‡ÿ³_X;º°'>æfõñc‰¡ÖE:KŽû7}媌ûï2®_ã¡ðêß}3”ÁgøD!ðÙB†úâ¼K Ià¨è£¨õ‰ÄPeaÑÉŽyö‰Ž¿Õ3À¹ÒÏL!"$Tä$‰Ó‡ÙÙ¯˜þÉ-…ŒX* )ómŒÊPÚ©Ñ(ì³÷¹.û¸ÿ9Žë×Pá?ØhÝŸÌñŸ‰õ_‡þ(«›2y‘Zªk×®5»wïnÓˆ>Ör„(Ô¤3§ÿXH)0ŸÛæé­†Äƒ|0ÔÀ}¡õȧ‹ÑWÔ·jãþ·a\?ÃÏ€k¼9•'o[æøÏÆúÛ¡öѰó^!¾@”ËŽ€ç»z)”·«ÓŸé×ôoÙ6bõï’EÉ&&Ë@Ÿ¢‰óúä“OÚáÔj³ˆr®DDYG€t"8qéL,d ÀߟÛY®eތѿ?ôXèÁÐ÷ “mׯC[}'tXŽÿ÷ñÙ‡¡%…Àª"À˜1ø ܃§ÿÒ)^Ö¯©aÊèX¬þ]û$–}燜(PDœãáÇ›§žzª%lßÊ!"ðqaœË…4þqÞ-‹³,™-€pÙžÐC¡O…j@„">³Ï¦‚¡òþWmÜæü ïóêÞ9ŒëçÕËãÊñ«()VPÃȱ„3ïÿ¯¡™ÎÜ”Äç­Œð s—YF޾Ɋ,E^Í** ÙA6€tø^ovJqzs†‹y" Fžñ?úÓP¬y0„6’Èû¯Ê¸ÿÌù?ùä“a}?ûÙÏZF®º¿cC h‡ v®è’a?ª’ÿç¡•ãJ M@þúA¨vòQ¨þ‹·‹pfî*ŒêÐvèF^ž_ @ãÿÞ{ﵑŽG‡âb}|ê]ÉÖ¶ÀÖ1v‡|¿¼ÿáP¡³NE4±_[ü·ìãþ7ËùÏx\¿ŽŒñ—ǼúFèÙÐÊñ%…Àf†žÁ×~D,„rjä¾µ­…)ý2Àè+\4y‘T€ÏúX¸8°‹ÌÕ› ƒÖHTþ ™uŠ)Å~mŠá~Xª‡Q ]6Ù˜ó饗šgŸ}vÖãúþœ»ŸçÿVhåø—íaªë™5H@æ¶õeÖÐ! / ?AÔxoAN°¶ð×ñŠtjŠÝ0fEgÔºh@gú¾çž{še÷¿1ç¿¶¶Öæß:ƒ4~Ga…L¿}çÖºm%…@!0¢—”ÍÝ\*Éh¤e_kæx€Ù¡šù K % eD0ha3Ãg6 TØÉrÙÇýÏ0çÏ+/*ŸÞ ü….üÕÜýBI!°EÿÉùsbD4GÿÅç %fälqJ€U‘Õ¹ÒùÞQF– ¼Æ¢Øooè¾PÆçC…цZöqÿɲب´}úé§Û¢?ÃorÚÐ Ù7Ã/$ÉØ×/ïÏûçù‹Ä$QˆÕ’B 耀‚åìß,õg#û´ÇìÍ.úœ|1PF&ì‡zs-“žH€IÛ| 3fô5^ö`hûRæóï2®ÿwñû•óÏ›PËB`r{^?çÆriŒ\KòWoe`‡7úÊÒH€ÙÜJ@ØO¨*Ù÷ l”9äüyþ×oŸ’B Ø:K=‰]5)0›;ލò_ åõÿ44£X³Ô€}6¹ÿe÷Ÿá4Ìš÷o‚oïÛâ8­T(_H¿ÆõoúDÕÆB`æhw©3?xˆ¬ (0›'qgä…ÿ…þ5ãŸmÂe©±º¹xð–iÜ¿Âá4ê•›»víjsþÀrþ þÿ׿ùcT[ B èŒ@€ÎPÝ–¢ªÿ5$+P—eÜ?ŸÆÈø=z´9räHó /4Ï=÷ÜVÆù{=ï¡5®¿Ó“U;…@!0"ñ™ô᱿†š5‹v&±o;åí²ŒûGd„ÿUûïß¿¿1ůé5g0·¿ùÈ×CúN¨1þR%…@!P"P`BÀFìžÓfªLWx& ÿ¿©ù/ë¸Ch¤L«ÉãñÅoØ¢ 'Ä*sþ¿uú¯¡WB¥|VR…@!0!E&lÈîY#¯ÞTÿe÷Ÿ€ûï¿¿%=öX³{÷î6Ê1áøÚÍrþo¨¼ž?ãû’B ( (0!`#vgˆDƾ#Ú+(Íí¿¾¾Þ\»v­9wî\séÒ¥æ7Þh®\¹Ò¾œbÄï,ÄGŠÿîºë®vŸ={öLûV¿9ÿ‹‹ÿChë_ˆ§ N²(úŒ@€Ùßÿ#%‡ýyû”Wþž={¶}ÕåË—Û‘¢öYP¹í‘#:ñ2£oâ8åk}7æü×ÛJ B (¶ˆ@€-¸áë9Üo$ `¿üòËæüùóÍéÓ§›S§Nµï¦¶Íª|Ž,ªHq¸Ã½sûÓO?mçÙ6Úa„dÅREˆ¿æòX}T…ÀV(°ô¦ü.ïÞk~?þøãÖóÿðÃÛ”£ŸÆsÊC÷âk®ÏµHsx½f‡÷k3úê'°úQ¨"?ùþ3¡•óJ B ˜%Ef‡f'ï?ŽdóÔÂäË" ¾¹6êQ’Å~×bŸOB ó»ú‹Ð·B+ç ”…@!0KŠÌÍ ^’¡>ߎg¹DÒ¦?¤œ1†?/0wÂõPcû½Àçâ­u©€’B ( #°T–gÆØLr8!ìN#ò Œ¾1ñ#)å—@IDATÞA-7þ—¿ü¥õ”óóE^*ø£÷Þ{o; Y !€×ú¾úzè/Cñçù#%…@!P3F ÀleÀç@è¦ÂûÏã¸,¯ Ì)€þx y衇Úa€&ê@þÝ]}/T* Æù%…@!PÌ"³AUášÙÿÌÈhLxÇç-`øÓ;žp‚‡è0ô&ÿ1õïÃ?ÜüøÇ?nÖÖÖÚù\ëA–(ø1üˆK B (æ„@€Ù+TM²¡ÞÿÆŸSõ¿,"¥±wïÞöµ¿>úh“3Ú>&` Þ øÐ"‰J- B ˜E¦u°êŸÑº?Ô›½ ®Œÿ2ù~u O<ñDóÃþ°ù¿ÿ÷ÿ¶SïÛ·¯ùö·¿Ý¾`L _§|÷- - ‹() B ˜ Õ~wÑÉøÃŽá÷ŸB÷†¼µnûȪ·ø|á%G1xë߃>Ø<óÌ3͉'š§Ÿ~º­ÚàýIq$@žèJà·ð@]@!P,4E¦»} –ií}ÆÿX(ãÿ|è¡PFl$Hï‘#¼~9ÿãÇ7Bþ/½ôRóì³Ï6‡`"að½ÿ"ÁW;…@!09E&ÇÌ7wyê=¡¬ÝS¡ÀZ(B೑ >_øð¿Ü¾ýý;v¬-ø ˜R`Æð¬œòØõµB ( ØHÇw^>ƒÿ\èOC3 %0ÒƒÏcrãq¨þˆ¿s7r!sþ'Ožl~ö³Ÿµ9žÿ/ýQ©àOõ?5௡ËSSR…@ß(0ÝAyÞ>ÏÿáPE€¶ Æ¿wJ9ò4ªcräwd›·8WçMï¾ûîf×®]m®xê©§Úœ?ã?áu.iä„ Lü³j â?s+”…@!PÌ "Ó ;Q•ÿˆÀÈWÝÅç·Ee¼Â9†”'ÝqˆÜíïo÷JNðsÏ=÷´ç|ôèÑæÈ‘#Í /¼Ð<÷ÜsÓäü󾊕+¡§C/†zûŸ©€Í X @() B`^˜Y!j¡êÿß™øIùsÆ?#¶õU牴ìß¿¿èç‘Gi¨"À-Èçñ]ÿ÷¡n©4L‹%…@!PÌ "Ó#+|-w-gm@ÑùÿMEµ¿×äZz;Þõë×›7n´¯ÌíøÂœM»…õ¥>Üzü/¾øbsðàÁV™ q‚ãÏãÿMèÿ*à5ÀùJà"FI!PóB ÀtÈ2b¯ j°}oÆóŠ\/ý¹víZóþûï7—.]j>ù䓯›óƒ¾JFxûH@Îð7EÎßE2þòý þ™Ð7Bχ"°Ll-K B (æ„@€ée Dx¬–C ÿOúS³¾¾ÞÿsçεÆÿÌ™3Í•+WÚˆ@ßçPüçÍ…^òcèßÕþQ#çÿA(ÏÿÐ ýC¨"À’B ( mD ÀÖÁVõ?Rx÷þóŸ[¯ÿÂ… ÍÙ³gÛu„àóÏ?ï}ÀÅ!("¢®eJðYj=Tΰn[I!P…À6#P`k€òçð"_~ùesþüùæôéÓÍ©S§ÚпmŒªÏ¥ú,H ãÿÅ_4Ÿ~úi;Àh†2ÊÚÏœÿÿ‹õ • () B ØfŠlàŒ§Â¿?þ¸õü?üðÃ6%Àè§g½ §1õO8ÇØølÌ+Œ3=âù2[eE›vîvÖ/…@!pEÓž¬7z Ü¶hÀÒŸÞ{ュ׿¶¶Ö0þ'Ožl¬#ÈÁA}Ϙ'N—ÄwJ B (æ„@€é5œŠ,•÷?øö¿ýû÷7ÇoßxìØ±öE@†3މ@5£"¹´­¤( B 'è~#2¬m)¬}è}¡ß]*åý…ù:Ô<ûì³Í‹/¾ØF¼ÐDFæ1€¯.¢åý%…@!Pô ¥2\s–ƒïîн¡o­Û¾49îÁÀáÇ›Ç{¬Ù½{wK ŸƘ¡ÿÌÿïH@€PR…@_(ÐíN0h*Ú}ÆÿX(ãÿ|è¡PQ€‘ G,Ê0@¾Êÿx  ûOøú_$Iå¿p[0û”…@!Pl##Ö6žGß NƳï ] }ê–Z·Ígc±\ã×rûí&šòÅE9þÉ,ï¨%…@!PôŠt»Œ;/ŸÁ.ô§¡ àíŽL—ó¨UÖÉÇ¡ú!æügü¿øâ‹æÓO?mî¾ûî6ÿ?âì²ØÏÒðHSÿšÐø…’%…@!P=B @·›0òÂÿBÿ‡*´w›«wJ…u9¹Î˜úÙÆ-™®0ëŸi€½ÊØ»F£ÏÈ3ü†Hšú׋Öo­Ûnî„’B ( ž P û€•(€ÊD@n»“¨œ¿ï¾ûZ/Z}‡!tŽ;ïò@–cÒŒ»ù}ÆÿíPÆÿõÐË¡¢E„’B (ú‚@€îw"½Üÿß™ø cçÿŒtÿÙݳc¤‚q‡ËµPÿ\(p!!ðY€¡¤( ¾ P ûçåšýÏ,€¢C'Åç1Ë£[ £_¿~½¹qãFó§?ýi\8=ÛaüSÇœãÎËgðÏ„þ24£R•J B èEºÝ ÞF3ùî¡-£/o®ˆÎô®]»Ö¼ÿþûÍ¥K—šO>ù¤}£r°DâbàÂÛçù¿ªжÄβ¤( B 'è~#0Q­åPƒ&gÎÓ___oÿ¹sçZãæÌ™æÊ•+mD`LN=¿p‚‰¨üGDKJ B`9ÈBgË’%A Àä7rlàÝ;Ïë¿páBsöìÙv!øüóÏ—1E¸xžrü¨”˃Àؾoy.u5®¤Àd÷YHúM€/¿ü²9þ|súôéæÔ©Smèß6C벺~èó³ý)Œ4ûŸYEDKJ B`±èý\ìË\½³/0‡{. ðïã?n=ÿ?ü°M ¨ úG–L’yžÌ`9vfÄ%à.§XVÔøä<–ÁÐ貂°Œ×U`Nw•±ÿꫯڿå”ÓéÎéìærX$@ÀÈKÿ—…Àâ# ’gä“PR{#g‹ÏKòÒæt£ Ÿ3æß$@–+$å¬ÐÍ®K]rþ“Œ¬Ì…/ó…˜ÓÝeôMþóƒü È4À+ ,°7».q©ÁcDó¾jöS³ šÿd¥<š¸Þ¥•º‘s¸µ9y/²­¤( @@gÅ6¨ç‘Òcü½üìà­uÛËy ]ŠÌé2øù sÿ/"H"3'ˆê°…@!ÐOw#zò§Çbñ>ôP¨(ÀH Ø95ö]YÅþ®ÀœÍEžðgIËœog¾Xw9Ë=¡ þS¡ÀZ¨h€ÏF€ø|Ü ÄìÒ+YÅþ®ÀÁEcÀ …ó6”1_¼È$&¯©–…@!ÐÆ—Ïà?úÓÐŒH ŒL0¤ý´ì»¬rW ïO真‘“™³ÀÿEvàFÔO;ƒÀÈóöyþ‡Þj›ú€ÔX½SÒø+|VÕ÷Ðú*÷wEî|~W~‹IŒ¼È(ç/X‰‹Vþ…ÀØQ•ÿˆ@çןú|ß}÷5wß}w;J TŸe•û»~ß™>?5K~nŒ¾7f`É/·.¯(¾Ž€¡¼ Íñÿ_ÿt̆@÷»ß½³û޼ªý]EvüÑëÏ d¸ÎÐÅïÿûÍ=÷ÜÓÎcàÿ’B X)ÌögÖ?³ÿ™P4`hG Œ®nÈ’G}ýúõæÆíèÒ‰}”êïjB‡>>—;rNòurwÅ]wÝÕÜÿýÍC=Ô<øàƒÏúÆÛÐêG åD 'ôøK¨¥÷l*Œ¾‚aiCQÃk×®µï@¹téRû4Þ5rÐ'©þîæÝ¨@ŸžÊ:>½÷Þ{[¯mm­5þ'Ožl¬#ªy³Ó°,) ÅF@;ΗqᇶkþŸþô§ÆëÎÿsçÎ5Œÿ™3gš+W®´$¡/’ý]Ö)¬rW /OåžïžçÏëß¿süøñæðáÃͱcÇš={ö´SwŒô§•ï žõÓ…À •þ¹zI¼{/;{ÿý÷› .4gÏžmׂÏ?ÿ¼­#êS@_†TW)€¡õ*}`˜ŽØ¡C‡šgŸ}¶yñÅÛ㯢W1Ϙ€N¢Þ¸JM]ë2#€Èóú3ô?’Ø‹|ùå—Íùóç›Ó§O7§NjCÿ¶ ÿçâ>Æááì<ÿüóÍ /¼ÐÔûÏså9 «KZö] ‹Æ)d)ú»"SÜùeü 6ÌøñÅͧŸ~Ú2ä1שS*ä` 7B? Õšúó‹“*) ¡HÛ±¢wß 5ûŸY…ÇZtFŸ7-¬®fHMQßÄ9*þݤÎQ¿'b¡ï#KÙß½±c@©—ÞF„ǰã1“wh Œ¼¡p!ãÿaèú­uÛû5ð7N¨¤(6E€ñg Ôðo3þ^þsðÖºíCEÞFXéDÿ÷I6Žû—êÜ·o_úïp®KÛßèÓSºÃç’Õº–ÁaÜQfFŸñ;”ñ=ôr¨(@€¡¤Xw^?£ï¥?ÇBÿçC…Š %ñYk𳘸CѰ¯l›ä¸ÿóœœ8q¢çDäÂ9}™(§þî“Ð¥éïŠÄÝ,ù;ذ59Âk¡ þ¹PàB(Bà³"BI!°°~bö{Bü§B€µPÑŸ´Eã8Äa¶_’˜l÷ÿøã·€RÀRöwE¶ÿyìí/2þ©cN’qçå3øgBšÑ)J%…À‚ ^ÏÈ3þ'B*ð`¨”ÀØ€°¿ûC‡Ú~ѧmqžáP€³s:4û»c}¡û»"qK&F`äyûë¡ï… Ù¦±¤ÆjI!P,H€a¼ûB‡¦ço{j¬Þ)Œ¿0;#‹tt"î<М¶ F¦œçÄ™éÓ ‹¼z)4#Ù×Y.œX¸[Ö›þkœ‰(€ÊalmìSRýCq—ãFìÍã‘Õÿ±:^ ýËyõ;„ÓÇp{lqž5Ò ú9}ž¾oáed^gᯮ.`žð H¡CZR‹‹ÃÆÃÍÉ&º…tŒF&úò6윣œ¶0Ï b$B’“mÃYÏÿ'ŠÌãeýã…³Q˜P®°¤(^ÿ¯«òçõkÏ¢¢¢C…A5ZÈ4¿ÆÑ{ à7Ú)€Ç !zÌy~°ÅyN2Ò‰$ÁL4@T`á¥R  wä2'èùÑ,‹LîÈ­¨-&F £wÚ.â®ØOÑß¾P®Ï‡ ão®Þ´)uoô àO>ù¤woÿs¾˜ržÅ~Šœ¯†Š,d¾?Îû)p$³Ûзb˜Ù]Y{$ßó£)ÐBR …@@Ûåí3úŠýŽ…ö÷\¨‘RzCIß›þ¼î÷£>jÎ;×ÿ3gÎ4W®\i_ ÄàöMœwNr6æüDAxû9²éíX_5âÉH#úwqR“J€I›p$ ¤( !€0ò{BÇý?ÿ›ÈgöÙT2œþÁ4.\hΞ=ÛF/’°O¥cìä7÷ÿnl7ÚÉgý¼À8±I¤À$hM°/†™ŒScÃ8'8rovÕŒ0Ör)D\GI!°ì0îòþk¡¼þŸ†f4`ì¸ý™†1þ¿ýío›S§NµùQÆ?û½8f¯$#²H€¾LÞÿBèRÏsR`(cO5†Ž!§9œÅ\)üE~ÅBE„’B`A@äÿ…ÿ†>Êó·MÈ25V7ý›‡]½zµùðÃÛB@}]ö{›ka¶"úµ¥Ÿç¤ÀœžIÆKÎ7M)>Y2ù¯¸ž:äÝá"%…@!°èû³úPÐI ÷óÖ?ìè×¼NwÊWêvú½Y픀ŽÇãÔdõÿÒÎs24ÏÓ¤ÚmÉ„UÉ"K(Àl–ŽÝ,áýªK*ØRûõ:Ý{î¹§%f\éú¼ Q$I=]J)0§ÛªQ`ÉÙH4ÛL”±$âB~jü0ÂØX¦¤(úÀD<Ü>gFè_õ¿§(€™MÜWqîê&LÇ®Ä<'Kcúôðiă>Ø<ôÐCípãc³HÆ´” žØ,‡¨0lF4@çRRýD€÷Ÿ€±5< (ã™ãþåüUü Åéó>K’×€ÀøÌ9g û¨.Âr)å"“=¹ÙpF>ñ ü]wÝÕ<öØc­Çïe¨š5Læ³Ï>»ÍH'ûùùî cLãpƒüá#¡âØòÅÐÓ¡WB?-) þ" Ë‘<ûÐ>ç/ÇÏè›ô'Çý¿ñÆí¸ÿ¾§89[È ²"jÑñ|‘ýZöoKÝ,wxBÚPò8"æÆæý ûcž÷Þ{o»¼råÊíŠÙÜ¿OËÆßé"<þÝ¡ž!Å€R…~Z @()zŒ@z¹¹zª9ì/˜÷ùòå6 ³OŸ…ÑÏz¬Ž}\^ÎØþ>w\Äe€îw­3#Ì7Oyõä¾}ûZÕxlÇš¯_¿Þ2Òî?½={:?„ÅrLÁ  jxè®PCˆÖB32`D ¼¨¥ÆjI!Pì0Ú#¯?‡ïŽ4r"Ò—çÏŸoNŸ>ÝŽûLiöuܾ˜HŸ6eÑbö[#ñÙá{¹¥Ÿ/Ð ¾dÉð›b<ÓzðD,5 ¬Ùƒ)JÐÉá1ÎKíBžûˆóƒ,„ÈD`bñ|G¶¥T€ˆ2“-mCŠk,) ýgþ? ݦçÏ»FÿøãÛT¦)ž?oºcH}ÓcÏk£~Œ#£O“޽ÿþûÛˆ¬º,Ÿõ©ÿ]Ž[  J7÷™¨*”Qõ’d¢<ð@KrûÍÃöã¯a|ïÝwßݾÛ[eïIRd7áz2Tmvs!ô÷¡¦Î¼jLm%…À#€›»#_ý;¶]2örèj˜2—¾Ã×0ôç90ô¾ûîkû³µµµÖøŸ(Y$£Ád OQ„Äy)ìñNoµ "F?ã×XxþûBEI.†^ Õáô§è!N¦¤X!ôKú'íP¥ßòòŸƒ·ÖG¶ON@F²>hBÇ ~f{Åù!+hŽ=zÛó·÷?æüõU‰Wöë›öíÛ{U³ÿ5W2 ß% ”­ñ ÍÆ„I3€wcŸ$À²oâüÆ_®Ï9>òÈ#ÍO~ò“6t¦vaÑPK†¨@=gBI!°C0hÚ$£Ïó×o鿞±ËºXÝ\Òpr:ÐͲM[õe"Ì®]»ÚZ€ ~Iº;Ta³ÑN›öë±}á¥:æn·3S̆x@äµ-ýÏÐ}PưÎ8ÄÎHF¤)!2!3E€¼ˆ‰rŒù¥Z…ÀÌ@Däö„2øO…"k¡Ø½ÏFFè8 ©±oïe°hшó°L(0¡˜ð닱{€n÷ ò¿jhŦ¹ó€Æ„1Æ?uèN;ôÆ‚Õg‚¹¾ WD ŒÿUøƒ>“žÀ23q•ñ]zýl!° ˆÆ1fŒÿ‰ÐŸ†ê¿ åÄŒMÈ™§÷û÷RœŸ~IšÂ°ký•>Lm“Ú+ŽÍQð—jx¤ÑKŸ†Šüêã—RŠt»­ ƒðn-„jT$aaEØ,(€óæ›o¶HA`Nj”/þÐÈFXÀ«Ó8ã…­N¼X!mõ9‡CÓó·=5VïÆ_{gP³Ñöï<À6lqnIR óã°˜„M³Ã¹fÿ®¿â¼˜ÇäÃÐõ[ë ß¿Çul*E6…eÓÉ}øçPÿOÄ=ˆFÇßÉ =D„ÍÞzë­6€E?úè£Í³Ï>ÛŽ0űF¦3"°A–4&Kÿ—…ÀÎ À€é³sn°”¥¼'AúsL=/ºãºNÇžÅNÈ æ÷öÕµµ›ãþOœ8Ñ®«sÎp£Ïó;”ñ=ôr¨(€}–N†öàKw¥³¿ ©rD}&!R`Ö¯$’€] ±užEI!Pì<"–&þÉÉD:‹¶Ïøg ó·aGÆÝym÷ÿøã·€H ãž5^ þ¹PàBhÎnZ À(¹‰ÀÄU¢ƒ#xÔþï»H ˜þ3_þ!5 ºöá‡n=‚1çŸaÅ"c€ª 9 0Øþ8+¼~Þz»¢rÿ›Šþ)û)ý€÷—˜#DdP?Ð'áTI:t¨R¾øâ‹íÌ&ý½@ÆŒû×#ŒÿéÐ_†Š|*ŠY)€¡äïL4N4«gyÏ9Ìn€s¥ÄÒ ‚Ρ¤(z‰ã/ºËÀsVû)ú“ÿçù$åú&í]Âob0mß0as…èÇúÔþ#j•¼†]ÝR€ø¼Cä ¹z)4=ÛScu¹¤RÓÝO ÈØPËrdƒŠÏÛF#¤ž©Œè¢Ö¯S0¸QI åüë< C€ƒ²Ù¸ÿçb»¢e¡}_;___o>úè£æÜ¹s­ñ?sæLsåÊ•Öè›Ã×–”žäùwLQ ­ Jð‚›TIÖvÅêrK€­Ý_̰“h0˜3Fm¹h"Ç&œÖÇà¢aYç[̆Œ‘ß8îÿ‘Øf" ŸÙgSáÝóþ?øàƒæÂ… ·S€' o‘ý«óæhMHBzDt„Z Xz)0ý-ΰP' JÕÔ”ªT-…¤xÒùàNóÿ¦Pš<šóV „”…@oàÝ3ò¼ý‰Çý#Œ(ãÿÛßþ¶9uêT›ÿ`üEúLÒbó™þÇa!ƒý·p,¯Ÿ÷‰ø²ÜÿRKõäÛp{å Qï¢6„“–KË%|Õ甲⑘ŒtÈ©m²õ…@!0$€7+ï8´ó¸ÿØ·uLÓ«W¯¶#¤.ûê°p¢Ò‘Ò:Ï1…ŠŒÎS¢ÈI±Ÿ¢?ùž'§.ö[x)°µ[8È"‡‰ñ4n^q êE5¶ÚgŸ}ÖÕôUç!0ƒÀÿ%…@!Ð[x®SûÏhŸvΠª¢}—ŒLX"#D3oŸÑWì÷vèzè™P#DF >_ )°õÛ8öAÑ„Îyÿ¼h†Þ¤–Šj’]oýTê…@!P´0p¼Yj]4 ³È¡gºRŸµ(Ò12‰0òÞíÂàç¸ÿwcÝD@>³ÏÒK€éo±[§‘¼g *§Ó5E¥€ío¼ñF;ÆVñJ_E~-Ùu €úŠ[W!°èRåÿ§÷/ÿ¯úß’ó"—.…Ùç4%œÿTÿÆ]HãB(¯ÿ—¡ Xêqÿq_“"_ƒ£ó?ÙÐà§XÄrh\ÜC‰E' @Ο?ß¾tGZ Ïauá´A9·ÎhÕŽ…@!0OôGÙmyÜ¿Ù?Õ) :9&œ>Ïëš×±iáÿõÐ÷Byþ¶‰è¦Æêr‹‡¦d:xÿ9tÄ›GÆÉ€d!]N©›ÛÛ{øóç (Z” œ`c%Ë’B ˜œ}‘É~û =º¥qÿ¢“R”´÷øÉ“ŽÞž "@QÕÿˆ@C°qró’"Ó#›¬[¸N$ ª°¿Æµ [½"ç+-ÐQÊøwªv+¦DÐÍtÜ¿W‚  íOÐÞ§¼„­ ˜@6ößE&¯v½9ŒdAš`C:Àƒ•º)N&2VUãBúظ2J!5!}!e!b¡0(Ó›^Üß7 £™4\NÍÒÿ%…@!0{oçZ åõÿ44£"“ú¥¡)Jý‡d‘ÆýÇõÜ”k@T:ŒÈïmŒàêËoÎ{ž{¬À²"ÓÝäÍrH¤ð[68Ø"wHæÓ=ê>EÊÐS#ÿ#GŽ4{÷îm'ö3‡–cm-;‡ î¬6…À(wF^ÿs0ôáÐÎIìÛF!eÜ¿ó}gö©¡ÓŸ¦ƒ¦†›åP‚4ø[˶^`º;ʘaŒB7®†w,T#ľ1ò›IÿX”ÁÖƒÛ7aÜUýz¡}â‰'šƒ¶oÚ²Dƒ1âÂ"þ]9v×\Rl š¾ü¡ ¿>HM@'YÔqÿyq)‘T‹"k`¦Ö‘Yúå¤Àt·Èq¤€‡è³[KÿçœM @|ÞÊ/:wÛöe†ý“ýøÇ?nßxôèÑvB#é€ç. 8Ñ’B ˜/Hw¶·ÎÀ)iÓ‹8î?ádôó=+c¼ÿüJ.õS++E¦»õïöJèG·”ׯ2zC * hêÐvèƒ$Þª…üèG?jÃÿµè0rÁ³% ‚ ñHVr˜M\wI!0oôG†°‰´qD,s>ûX½SIysK^ó"ŽûÏ:%ÑÈ) ãŸz'H+°¥Àt79½Û scÝÁ‘ÐC¡£F¹ª²YN’Gb¸MN´(­4û^Õ‡£®{æ$–¤#ûF_Áœ°9¯yÇýKQrBÓ¬ßÿýíL«Þ·â³>Ï«2ó»¿…˜¼Aæøç8Œÿ)Õ·…•¬¨½víZ;Y‘Fuýúõæ‘Giß²uß}÷µ…€#¢@V%{ƤBÖCß 0ëÖW¡TI!Pl ôþõ?¼ÿ‘@Ï|&ûÑÆÏ;×\ºt©•tÆýgq²~È[ÿÖÖÖZãòäÉv!Ñ7%ÒÙ¯´R ‡­/s>˜.tAIFŸhLf3"@¬Ûô #ã’áÁë¿71ºª£BšŠ%…À …døÇ¶)í[Ø?_HvöìÙv}QÆýgŠ’×¿ÿþæøñãí4ëÇŽk¤-Í´Ú1°ÒÆß3W [E€rþ^¸!Ô=²ø/>ﵪ¬¼qãF»4 Ð:–í]cF pغ+ôÁP^¿íä½Ð…&IíUÔŸB`çÐŽ´5ÕÿT4Ò @æME~úôéæÔ©S_{=¹Ï¥ú,œÆÿùçŸo^xá…Ö11D™cbTÃçÄeÁL½Ò#Q [† –9¦Ô¶°.‡Ñèä©!6ÜÚÚZ—™ ];<42\Dö…ê ›8÷’B /h_Ú•dmKñ±‚[í-Év¬~]Dü?þ¸õü})FùÏöÿõoõë?Ô?øÁš4F'¥ço;ïßr„,U=â:Ç~T`,Dvð´MÌ(û: Àv: F¾\Å-–=F`’­P=€B%_²þ®,) é0î_”íDè‘Г¡Šµ·‘€±øì³ÏnŸï,„è8%ú$áþ]»vµµœüREl'¸î;vúܱgmè‚ÀÄ9¥1LµËonË> o0n6Àb”Äàûɧ8D}¥(¸'Öü'C‡®…«+*0¶o&2N_4A`D%?ÿüóÛŽÉ„×#êâÓQ™ð‹¿ûâÝùþb>QU©P[æÚ0Yÿ÷U «Éa7Ø·1ÃÂlØwÇoŸ×ŸQsXW¸4n±I!°Š0R©BüŒ?ÿÇ¡ÿ'4ëmx·t(`øµgÿ¨¢ÍãQkÛ}DE“ãþ]ƒ¾0¤qLTr°ŸÑ´£¶¶rÏŠl½)¿ËØg® “EúL\¦óÓÐŒxçwÚ7Xt£Qމfè¼äÿå*‡b߇ּBI!0mG_Æ]a-ƒÿì-},–b$ÁrSAÞO=Ñùä“ö\uЇ,¿"¬|„èÀ/¯y„’B Ù~ä÷‘hùþ#·Öyþ £™^õÄ_Þæ/ˆN Çý?þøãm߃Ќ‰`0îò×Büs¡À…PÑŸJ¶ ´\¾€C‹‘Mb°M§Ñégœ—fE7Œ¿™Ãâ}¹>ä€:°ï…Õ‰Õ¼BI!ÐíGåí#¡Ï‡þ4T*çXwý‹Ñ<&ù2 ÐH)Ⱦ gc ãþ¥yÆÿtè/CESE’m@€1žM±ûÐCµSrò®5FÑE:}K 8pŽ–W¯^m¼C\§2F¤¾j¨¤PfÍ  ”@´cüõ8T*@[Ò¶:‰v+íh `ŠÄgTo ïtüyîÄAÚ¸§¦“2 éjè¥ÐôümOÕÕrÉìÈÉr¨0ðBæêX ž†kGá©QZÞ´æ±²Qò¡N"àÁö0¿õÖ[í :Æχۑÿu,bÍ °#ð×®I W£ —m›Š¶ÉcÎÐ9‡Bèß‹Þ|óÍÖÙ0qŽ}웩½M¶Cõ‰úG$`ãþû)úãYñüÇFicŸ•"³»ÍYà&ÄäÍ€"C…‘÷€cq1[iËE˜•+ÓÎß9Ïp^€œ¤CG×ÿòd”óE`£÷?’ðèUú«+RíÿÆo4üã›W^y¥yï½÷ÚhÀ|OwkGçñÓ9Œû?gv94#[;Ñ%øv€ÙÝÄŒ–3ÑЧ ÁÊo-BþŸÁç=d1–>£yT=z&3\WÀÃQRÜ4Z ÿØ6¡}JÍ©'ºpáBëõ3üÞúg{ßE ˜Ã¸ÿwãÚM„  ôŸYž_€Ù¡ir^+ãÅ‹U­+éËME8Žá×p…¾ä»2Œ×Ç㯑Îp^S› Ñ ‰x&×Cå9K UG@¿¡hMBEµ‘¡ý‰€!ÅøÃš×^{­9uêTÛV‘tmw„SQãþç§ŠÌãÌÑ1üŒ×{¡ N ב Ⱥ€¡VJ@* ‹×š@ÄD'w1Tˆ^Ck(â³’B`@ˆµ þ˜øÇú”‘íƒ#!ÿo¢iž¿#]ÑÖ¸ÿùß­"³Áк.„ŠÓi¬ÇB±v Ø»»5è;$+è×ÖÖÚÏüŸóäÌ{v¿ãË;¸!‹‡x¬NǹO1/€ª\äVpéáÄç%…À*  -ì=z$ôdè¡Póh %ÈÙW¨òçõ‹..Bè?®©•,^tê¢L5Î9š@$} ŒjÜÿàŠŒg‚y%sM#¼þÏBá«ÁÞêJŒ8pà@;¼Ža5Εa]¡yàGÇæ8cŸ’B`¸'.Rÿñd(ï€"É¢C @|ÖŠ"c¹táôE}âRãþç{çïɘ/ÓÀ4¯„~jØ ¯ßvòpèС'ª¡.GŽiI€4€€í*xUòª諨[˜Á¼rþH“åÈ*ç¾âPçUloÄwSy°Œ?ÿÇ¡ÿ'T$@­ ç‚%ú mÒ{F(çbF!*"‰HKû;¼ R`6 3îúg©0Þl§q§ùÐk¸|a/ËóçÏ7—/_n¼ÐzŸE±"Æ>弈̤Qh€¡de`øõÅiÜzÿÙ[úX,Ä I‚妢¯@¤âô# jßûç«ÿCjÜÿ¦·u.‹ÌV$ ½|FŒÅF,…ÿ5Þ¡‚h$™°—iĹ}è—{ðÁ°yöìÙÓbOü’ÿ¡k¡ÿûÖºhbgáñCoÜyö'°Í;"(´Æýo3ðñsE懹ªvCv¨õ‰DÑŽ°¿!=}—,:Ú8/€F-—‡ÈðD:ˆ‹9¡%…Àª €Èë#ЇŸ }8TþŸç?±ˆ"¦W=ñ—·ù ¢úŠ÷¿ÍÀÇϘæ›U¡f#Âcø½æË:„Øû*Œ¼F<8/€‰G‘Gy¤e÷#Î&žEUÏ< CLØ!‘•þ'YRlÏ?p8ôùPžÿ¾[j{gÑOî§nÈ0@C‰Á‰¥¨qÿoóÌv,03(ï8ƒeÞiu—Byµ†Êó!°×ðﵡ0rê3k[ŸÅùjÄΕÑWt¤ÑÁ>sþÈL~Ðá¢&7BÍ\‚¨±( ”,%úÑB¹D@[:Ü´ˆíwˆv'rèÅbÔüÿ•Óþî8Övo­qÿÛzEæ…8CÅà_¾õ¬7Ãv,TÖÓßtX ÆÎh# "àÿ¾‹ˆ <cy  µPÄ.ë¡o‡"†ª«è>$N²¤˜÷Ï¡ú Ä×°áN9³Øï¶è/ý_ýêWík½üÇ0b}GŸ#ˆÎÀ¤Ô¸ÿÛ·s[V*0˜5dûZhÎooˆÔÀ5ôM @loÐ0Ò°æöEXŠر€1Ó#r žI˜yáwb÷i¬+¨, ”,%žoCj]4`"áí¿ûî»Í¹sçš‹/¶Q€L!ö=ÀI¨qÿÝî™ì\`&0Þq£ÿ ôzèG¡¼~  :µUÅcB ¡1!²ô¬ûN©DVlr‡b$!þ4Šòú$Ïèz¨%…À²! Ä/ÔŸNAö¢Òb› žQ·äA«¿yùå—›W_}µ]~ôÑGmôAõ}“ P‘°~Â5!¢žú"ÊšÊÙJ'A_OØÁ°dEF€³…<˜ =ƒÍ{@-„ õ`jè›  1¨ž衇Z&Ý÷ù݃’F£F^\‹m#D'èYdðµz…O–C/‡jÌ#Ÿ—‹†€çݳ¾ï–"À<ía¨0ú z†Î¯^½Ú†þ…üß|óͶ¿`@ûì0¤S€Ô¸ÿ¡·zî˜ÄÉNý‚h€ÿU¶ŠøS6×({ì±¶°Îÿùn!=£0å>²z$Z¡a‹ÛKǰùök¾j%ƒ·nD€‘žÓü,VK ¥@À³ÍèŸ}8ôd¨è R0ôyçÑsLº¥ÚÿìÙ³ÍÿøÇæ•W^iŒ¾ è³ðøiûßù»T`ûîFM±þ‘Â[V Ãû×Pz©¡ÿ+W®´!²¾ÿÁ C\~×2…ˆšÐÊûO^}e!0Æ_DðÉе[Šôê'†F¼>§€ÁGÿyëß"¼ô'#„5î?îòK€í¹BØrþ Û,G†´NásCèòõÀ†õd]ȯïÂK‘Ë3ùÚµkÍîÝ»ÛT€è€ë°!R$gš2qœú¨è|é-ÆŸÇ?ñ\ÿC¯àïµ×^kóþ¼~‘ÁEp âšÛaû‡ÄÎJ€íÁ›gô í¡# ãÈóO" _Æ“~ë­·Ú÷Œ1žqø”h…ºž‰w˜ÏÀ´ÀF¸×7â:{$ÀÐ?:²f">/)ýã/ç/ôÿ\賡Íõû·ÅÒ"‚<ÿœ3Äg‹ Ú~ûßù;U`{îA€Q€¡¿® D.QJ·ìû›½²2Ù‹ŒÑÑŒ§žzª%õn€¡·½>Xnäü„òü†þKèã¡FušñISˆ\ÓE‘,^Ì>m×®]m7Áùs äõ«Š«Xâdû"E¶÷NdÕ¯ßD¢›èÓï{˜o0ÀøóöM ”õ õn€‰n}í¼<H*ò“óG¬Û6±Hb‹hW‹&ú0}™>MߦÆiBI1b‚Z7BÉ„˜°)wWñ¯ò߀OB•é*öÁdåScõNQð£±0¬Ò²ìÛ¼7ïD @˜’ñ¯wÜy_kËJ 0˜óÿa\1}!T @*€ñê,Ú»Æù«ÐΤÕô <ë>KûïßÝ)°=÷$sÚ ÿzè{¡BW¦ûn€Ø§Í—KdQ ¢Ÿ>Ï  3Òà‘¥Þ à.–¬sþòý”÷O(ã tíˆÑ—Z£Fp ‚¾Kûïç*°=÷£º*`h›ðß±P‘9@ùÁM‡bùòÿkkk±K$¾âÿE˜ #H€NjFïAù0T4¥†%½E`&9ÿ¼ºÁ¹þ/\¸Ð˜øÇˆ lg¹_ß–R´Æý÷íÎÜœ`¥gµ|g„ˆÏy7Àëÿ,3Ø4 ŠZ†…?hÃ}ü¢Í 0ƒwÀîr¨¢“+Jz‹€Ä6¢¿åœ¿+6×?‚-=ØWá° 5î¿w¨"ÛsO´N!ÿ+¡Þ ðq(¯?[íñ>4Žg4€™9Ò’€½{÷¶Ó}jX¤ïóä0Æ-¼àÁ¸L^ÿÍ ¾™Bé:…QI!0g<©j{„øUûÿ(tK9Er‹8×\÷máÔ¸ÿÛpôf¥ÀöÜ Æ÷ÊcEŒk¸ªzu¨ñÏÚü?½¨ó¤°…wèPœP45v®ôا¤ØNþÿ¿½ûñ¶¢ºòþ̬5IfÒ1QQP"Ѝ†t›n»³Ðv寞Õ=*Ñ8jÔ   !" Ø¦{Ò“™•fö§x›¾<îïWïÞª{÷^k¿ª[÷Ç«úÖ9û|÷sŠ-Ù£f¥ÈO¾ÿDè‘ЙsþfÐüåû­§aÑŸ¾¬õ×{‡Ô¼ÿ;àèÌ‹"‹»ùèÕðf‘[áƒÜHéóºÎ°ƒgX`]£´û°ãu øW®\iBl]üãº2bíó˜Ÿ `ÀÒDLs#™‘c!áí›cØex°@€R²„§Eô,PelƒŽ÷ï’Áœÿ'Ÿ|Òùk˜Ðaz»#½‡øLS]Ëã'|Îcv=47ovèO®YÎø9_QqÎ*‚]Ez[ö³¸J½„õÖµã±F7Þ/)ÚB û¨A_<ª†Ç¢?êTÔ‘íQ̃¼¾øâ‹&ZgÐò?{ölóÔ̾Íók½C’ظNΉŸ5@f¶OO›(Åן È.tÙ-°ì;ðŸÿŸGË{ ög¹B•Â:]D‘_ñŸèÅ¢†‚öã‚ç¸ÀúJg00äÕ¤ðÍûG‡"Þó™¡"ô¯¯JÛyL6 põêÕÞÎóß~¡H~®UbëÙ%3Êv{¨¾¢¤eŠ´ èœ?7Œñ¦‘IÏw¤GÁ˜˜#L…ÔyÚS„Õç<ÕÍ!âý#.žmnŸ· 2`ßvŒÈ¯Êù+œ´õZ]EI!°4Nƒ¼Áÿdèß…ŠHä4Þ±@»ÿôÓO›å}ßxãf­ý×ÀÙwAèkÞ?îb€îÜ'逹ÖàQ»Y`ÛfD²À®;—wç™ (ÎWôÂ… Gä!Gˆt€Á`°7è Ò"BÉB@Dëäý„š÷Ÿ¡ïe°Ú?²~åÊ•ÆóϾßë­ Nÿ»ï¾ûš"@¡ÿ1ý8¯•íS¥c@Š¢ù~Ê&fª4vKÚD @›hÎÿ[ø¨uÞ…8ù­¤ì а?` FEDÀë.‹(ãG•l?~|ãÁlÖ0-PmÃI°= 0âãu¸hÕ¿‡J? U›0u Á•þéÒO‘vÚwÙ3õïØ±cM>}úôÆÁƒ›Èžk#ú3< úß„ž ½ú^¨"_ƬH@€Ð¶Œ´°mÿ£ú½±èùöurÎ{N1Jò—óê³Ø.wmkÀ¥0-йè-^ăp\1ã”u 0ܺÍvºvê|Ú@@Á®9ÿ¹ñØcm˜Þ»gÏž&¢7HûgÀÿ0ø4!ðYÒ2EZtΟKüE|ߺ_…òú pBc ŒF–Ñê\Œ¯Y± ïBØÍ`*ÔØ5B༜³jç\¹P1ã\>ܬ"×:¶Lžó#<²qùò寻6ÕÈ€ªóu͸8pŽ"ª¢¥¼7¡†A<‘±5ð#GC…b- œžp-)ÚB@Nžï–î‹-Ïb¾_;—šÓÎUûë£ê_äþ‘‚¾ {îPy~Sýž~úé“'O6[5>ÃaŸ¦¬¬Ò—ÙAà¤ö ¦ÎŸo€îÜ¢ÁF.æ5¯V˜qì`¦òþ…Ü ª^L=J4=ì »ÇouF22‘‘ i¤Åë)€œëf¨6Ì0_=ZÏJv'ƒ¾Êÿƒ¡§BÐ,þ‹Ý»EdK»6è›ñâñ¾¦ýYµSLöƒ»¿ÙÍ#<~*Úhðî?tèÐÆ™3g6Nœ8±ñè£|–™$gAéÇŸš÷?|ó¸ÀüØíö7ªSŒ [þ÷¯c@uN[†—a¿Ë‚¸"/SHN‘4[vq÷nm½f@•’B -~?dt;Š|R)(ýtd•2Ëûçñ#å¹ÚŸ‡c)Ú‚ðÆÏwGØvFÁŸ0ÿSO=µ±¹¹Ù¤î›SDð,û¢%»Œ@€]xΟLjåü j¶^40MEEÂç:dן ×r‡Ê!ò&FexñŽÝùŒoì-•3Ä´éË¡f”ó"pO|1Uÿ3øóøO‡þ<4Ûž >:²"òýÿ·ß~{Ãzÿê_2E'BÐu‚×w‡ ì?üpãñ¿ôÒK×ÏóçˆÌ(""žIÚáèG`.õY²‹ØEpwðÓ: ÌMÇù5Œ<‰€NˆtùÙqM·%= 笀plŒ0ÌÚ®àÙ^ ý}èX¼âý’B`Ù¾rpG2 øÏnéã±E´³$ ¶#EžŸ·oÝ5•s¼o)Éæè«¢ŽGŽi¦ïJCN‘ëÄH„îÏ¡_n镨òü‘‚’ P` Ïñ/’lŒü)/ÃçØ¹× q ªy|ä——ü†suÎ"ž!NE&H^ã1x-þ(Œ¨]5Èñ~I!0 ôB¥˜´©'C7C_ÜÚ7CgjÉyÿú¡×¾Ïûw ŠE68s¬õŸØ©o2è«üÿ,ôÐË¡HA‘€a·e¬›µÛÿ¼~"<\Þ-I„åy}©2f Ë9ˆ°a4håý¡Q²ØE}0ð=*ÿÏóŸYq—×,Z×w‘²ÅPd¼ƒEŒþ8ˆØ}jîÿÅPk¡èÇ5í/@Øm©Àn#<ßïc¿*ÿ1d3n„òD¦ 9bçù\$`BE}üìòE”Aùúë¯7®]»Ö, 2Ã4"¹Âí«–Yþmíëˆ!BŸ åùçÔ¿™È8ò-ׯú)—Úʹñ<é> 2CõO¶E¿eg&DíØ´TýÕàÏã+ôŸB¯„ZÿDA/­þ ì¶Øm„çû}_'1ð ‰ ©j¿/”û€¸w Õ]’EE LFº`Dœ§•MR»À«°,0cɰðšÆä/ë©RØ•¹«eÔзT¤ï =ªïeª)v'‹6mÐWíOMÍ5Xv¹/Ž»*}JÑ͹Öîzþû[z>¶~›$Á¶d—(°ËÏùó/ÙÅP‘amó†2DrŠ¥î&I€m×Åù"+Œ$£éœëÙ]¿k+}~"•éú¡b”…êo3‰ð8BûË_þ²™ðî»ï6E€Úx…ǿõþ…÷E4?eÛ^ÝÚ¿Û’% P`  Oñ/ñA†µàõ»µõšAb˜†€8ÞÈ9?Ò‰í`ÀàÏ˨gtâÖ¬óIˆ¸©H§öEf-üµðÏ¥K—š…€ú8ï?/ZmN ký‹hÊ÷‹jÊÿóüK–„@€%?áß"ŒNæÅ„ÌxýÜy`¨#ÅàŸ:òCyCA‘Ü(ƒÉ@üëÙ¹9ëwBÿBýI²õEÑQ©·¡"Š…Èf4Ë<ÿ×_}ã7Þh¶j´m—öiÞ¿|¿4\ kýàý:”çÿå–ö³"N~¤@7ï¢ü—Þ€è$¶‡B ]¹·€©€ £i= îrÉ¢QûnèÞ-•ÿçù##Å ¯ÝjÃÚ­¹þBÿBþ¿ùÍoÏ_‘œÏøl_Rú£9Ïyæ™gÚXëŸSƒ¨oB¬*× ,KŠ, ùÉÿWÇÈΑå_â˜Úä`¢ô%’†1 eKÏs”c4£¢û Fm—€5$ ú'C†ž mC F’½JKý^¿~½Yê÷“O>Ù8{ölÉ è£ðúåü-õk½ÿ—_~yãÙgŸÝÉZÿ¦WrdÒŽõ–•:ç"ý¹ŒuÏF£í—Ó—:€íçÞÇ”‹ ÎÛ†jã{C%yF‰* ”ŒDà‡ñŽÛ±ÐÍ-5ýV¿ÓƆŠÐ?_•¿Ô•µþE¬øg@_EÎßL¡ÿ£G6ëý‹Ì)j–DS¨}µ%KF À’oÀ”ÿ^ œv¡Ê±"Ô˜¹ÆÌMŽýB‡ÞTmÌûØÁ³X)^íÏbjÒÔ!(êTví€dðçñŸýy¨HÀ¡úͶ»wŠþe Wð÷Î;ï4y^¿µ8D³ú&™ó?vìXòÿÅ/~ÑÌʱֿ÷fQL, çýÃQ…z ©Ì’%"P`‰àÏð¯u÷jpþÿÈÍàŸ¹Fðº/Ò³àÄk“˘Ãí .už­# _üµþ‰ÐgCE´#ý,5v‡‹þ¥ÈïÊ•+·×úßÁ yÃÿÉ.ͨ[æüŸ~úé†?~üö²â3FEÜþúå–^‰-Ï¿?Æ(Nv•¥@?î.Äëç‰ØŽüã½FäÓy%¹J—¥¾#ÃíàÙÜ”œÃ=XÅÝê<ƒ€œÿá<ÿ#¡ÿúDèC¡S‹h•%~Wý¬¯ký·˜óOìÔÝôß ý,ôÐË¡ŒQ‘€aÙR`Ùw`¶ÿ?u§É€ªä,®›í_-ÿÓ;|6€p#oƒÚ/)¶# ND‘Ÿœ?`ß±™EhÜ£¬û¼ÖË9šã¯ç£Ð‹[úMlļdÉXò ˜áßüS'~Íb:ŒQ%^uV×÷H[ìðÙòŽøÑÖ~zSã8èú@ß=Ëœÿó±OÏ„î • ðÞÔ‚h÷u­Q6v­àý+ö;uêÔF 9„ÛàÏ㯵þ§nM‹ÿ`€Åc¾ëÿQ(R!Š]Ïë¾|ùr³ÈCeðÏÇ’îú‰ÌùU9Ï<Àfèåÿõ¡j¾U•¥øÈ D d}Øžó—ï§¼ÿ†ü'¦×â3h£}]ëŸ}`¨T›GúÊù#;Èù#Ü9¡ÿ÷Bß­µþ„.J€.Þ•Ñ甞ëØK§þÁ~°ñøã7¹t¯MQºxñbS¨¤:Ù ÛÕ e^•\ê°g0Tû÷ïo"<˜ˆðMé" ÿåÐs¡BfÔºšI+9ÿĬ¯kýóøé½÷ÞÛ þæø:thãÌ™3'Nœ˜gžB¢O}Êó¿úÏ¡¿ ÕßJ:ˆÀH ÚÁs­Sº…ÀØÁßGDäóxÿ:º^g籨RZïêàïü#R®Á¢@|5 H‚3F øÀƒ¡ 'yûr»¶r’µ.@€°†¢ ìÝqÎv}]ë?gÙXägïÞ½ÍB?›››‡nþqmsŠç• Úrþ€}ÇJ:Š@€ŽÞ˜!§Å«j&_Q’'êéàà!  ãK•vYç:øl « Dd#÷G\‡ ý~¨ ï=¡µ.@€°¦¢ßí ñ·’óWåß÷µþ‘é‡~¸ñø_z饯ë7ÏŸã0£pH2çÿvìÓÿ*ÀÐx¯¤£èèÙvZŒu¿r-€[£ù¶z™…=Ira?þxãüùóÍûC¾Ö©CRŒ2 ra‹¸˜k-E0A+„‰ñ¯u&¶¢oë#î¿:E~òýôH(Bà=me*2øKM!¤ýéëZÿl„"aQÂ#GŽ4+þ‰ª9>ƒlÏùË÷SÞ¿"@ƒÿÄΟ)YE–üÿ63±o« m Š|xÌØ=#&ŒÞ‡u üÄàïzœ³ÈÃ¥jy‚°diÍ×°8‰ KVVsþÈç¥K—š5þÏ;·ñÚk¯5D okýëGl@Ú)56b©œÿ ué+#½È.dKƒ€Á a“Û¦3 ÏEÑ’­µo¢ §5α©ËåX€Ñª°d€°2˜ó—÷—ÿwl.ùú믛BÚ?üpC4íÚµk½]ëŸ P „Ô° sÊ`Î_Þÿrhåüçs_«À2PŸïr‡õTl7B:ÕR¥T¢³cüÒPaôtüø×‹ç챤¼Ó®<[ݾˆ†È€ý ¡KÞþ°u«åânånþ§ŒøØêBü§Bz&t¦yþú‡þ’3R2çÿæ›on¼úê«È€Ù4<龈”š~‚L³úU®·ÁFLˆªé'©.ZˆÿÐÿZ9ÿ¡R wM®M§3ðcÙŸ…òbï • ȺÆo¨èøÂ|ûöíkŠ3lÉèCD€!Fbù¤Éý{Üo’ç©pÉDŽ©‡üð7cÊŸâ¿“'O6û"ilÄaDË®…~úq([ôêÖþÕØ–ô"ý¸i: OUDx9߆º†Zê–IxÉ:=™÷"ÈÙgìº,|$Å´@D€³Ãu`©0'£& @€Ðc1z©‹Aãã¡Cõ žÿL¢½é<}þ|ÐD®^½ÚËœ¿Á0ï_ð©§žjôO<Ñh¶a öçr€ùa(ýûÐê;B_¥@?î ¼Æ[5h}Ê«qœ0v7›½!xýÂ~l Àƒ>ØÌ¥ÏȇÁ3È fõýŸZÊ!çå\…Œÿ® p_\ÑÀk2dÒ,pLÝ’ pOœ#p ô¹PžÿÞ-u|&AÔš|úé§ÍT¿7Þx£i{rþ}ˆ– »X¤ÙàÿÜsÏ5+þYMs0…–‘Áaßcúðyè¯CyþÒg™B‹Ý’>"P wMÌÐ?"` Ò!u@î»÷GJþèäÂ}¿‡ oÊsPÖ©F|Îñ.‰óaÄ`ÅvÎu òÿêÔT¸PÛ$W™ç„÷X\ãý’î €¸§ûB$OTÌñ™Ö®\¹²ÁóWÒ§œÿö fÌ¢±øOÎûŸ¡ˆÖÏé l~‚è3ÒÕG„¾J€þÜ9-;›zÞ+2 ìÏÐÔF ,ß@Êüíßþmà]_ºt©)®côxÙvùƒKx##׃¸¦9Ö€=*Ë‹¡…ÊqJµÀø/¡%ÝG!6‰ˆ}/TJÌ}KdmJ¿ÐÆ ü}ü]ƒÙ ȽAŽyÿl‹þ’6ç_b_ÿ(é9Eú{:â?û3‹œ Â@à Àãaìºê”Ód¤5͹.¼ä‡å‰…2p•>¡¾Â~€¡'â~ñP©}}cnѦDÉlµµ¾‹þ¬_çZ ž 2£l·7p.é9Eúy‡1rìÜ 6uÈ“ó$0ó…yÓï½÷^3Ç誌Z`Ž¥L‘'žCESXû/Bÿ5´¤ûhïÚ=¯ß %  *à¾!~±H—­×DdÉ`)%¦@ŸP8«Íñ¤û(H u ®W:Cÿé#Iuá¼~Fa0âã’#P ¿7OçÌÉéŒ{Cå¸uÒ‰"`Ð4¥NÀs×9.üÙea°2•ÚÖ`œóa&ÎJIc–¸]Šï}jàè6q‚%M;×ÞÝ?*ÿÏóK‚µôˆyÅÚQ¦—´³bDÅ2–ä ~·W"rAMÿ3ï_àŒóþÙ51ŠŽ¯†~ÊæÜbK±SÒo¦¶”ý¾Ì•;{+7XñxÈÁГ¡Œ ÐöT’ÅA¶÷ßC²V`ªXÒ‡ló´y4d3æ6¿ð ™aìfô mÍ!7€èc‘x¿dùˆàhïÚ½ö¯¦Ã4@¤`äýãñäMñSHêá>j_&R`Ê©å~‘€$ñ›½¿4ß±cÇš~qúôéf&²?àgÅ ¯&æ\èåÐ÷BÊö ú.EúyuPP±†Îà)Êy ”QœšÄgîäE3Ž]—,PÌu:FÛ´&ÎŒ /ž<žîg\ÛÁŽÍ€ƒ"qúÃÈŽö“õ.¦úYÛß?mÈ耵þsê_ÍøÝÞˆ^ŸxòÉ'›TŸÇhïÙ³§ ýOAÒ¾ðÍûG> E¼w‹yÇNI(ÐÏ{— ]®úzèЋ¡Ž#òØŒ£P6O(5vïÆ¡3 ò„x<]{2Ð ˜óUÔDyqŒ4ÏNÎ @ D6|ÖvŒøåüå9m½. tH² Ûj×Ú7ÿtèÏC÷…"ÀÚ>KÞK—.5Ëû¾õÖ[ÍTX8FmIå¼¶–¿Ù ‘ï—ß7ð?ÿüó¯¼òJØ»wïíz† Q>Þ½AÞàÿnèk¡¢RŽêÂ*H€~ÞE4×ÐQuH¹9±oÞívƒè^;Æ/ç:3x]÷xœ¯|­]Ô‰ñlvƒ>/G]àÁãÙ!{"O´ \€Ð!ÑnµßÜ ôÚ÷³[úxl§&¼ñÙ†àf®_@Û׿³ ÀÔ1ý¡¢? ¿rþÒyÏ<óL³ÜïÓO?=+!n Š?lм¿TãP¶†íIÝ’>#P ¿wo°ªz¦ï„À h›¡ÇB…D 5/ZÑÛ]b5 ò¤E ¦^w]27Ë@ ßÊÙòìm³ž}öÙ† XY±ã˜âÀ$¼ÿoC3 ÐuÖåüxóßÕŽµç'Cµï·öŠíÔ’óüyÁÚ¹¶Cû.®KÎßR¿ÚÿË/¿Üôű3ŠKÚ † æýÏ`_>^ /wjºóüc|LØî£P„À<‘“~í%q¼D@Ø3Ö<Þ—­Á_õv9P×" ,:…Èÿ3xÝg?S\Ì }ÙBù=jdãùÏ,ÚƒzkIˆ­‚hï–ùú?zôhS+0§ \ƒëŒˆ”¬EVë†z°  „ýY¨Müòáп *òžŒ /Ù!Œ¢P(ÏZ´/„€7ç9íÞbz`Ï@#bV@ÉÔBQìÇŒ´Ø–,÷8ú\è‹¡9õÏñ©E{úÏyþÚ~_çùg LßÍœÿ©S§6~ñ‹_4)0žÿ”Ä~¢`T;ÿ?¡Bþì á<ˆ è%+„@€º™q)|žÿ—¡¼ØC¡Œ¦Ž«sFP \~ùòå¦ÀŽ¡4øg¨tè—;taÉ|­-`ðG &Ô4ð08?“wÉè1‚Yô$’R$ @X’ <Ò}¡Ú´{ÅKu|*Ñ–E‰ŒRíCî)è›è¯ú%ɰ¼¯\?à1ÙõÊš† ×Ç6hç~jvÑÕP΄”XÿŠ“.™Œ@€Éõí:+`+w‡Å¼F #Âû7MˆWá5ãxñâŦ&À >CÉç2êr”ó»§ r›¡ú„TÉåÐs¡"Œ!¬’Å#€ÀjÓ*ÄL8gªœN|q±ÐÕ/ù˦m¿ûî»Í:}‰på…ðø©hÁ_¾ÿСCÍSþNœ8Ñ,ˆ•Ÿr Wí[±ß•ÐCÿúQ¨¶ŸØÇnÉ*!P`•îæ×"4JÝã±^’€ü!ïŸaá=3. ã•+W/)=ë;ÿEw_!2®™™BsÌðâ ©›@œxAˆ#X @X’ðLå¡©}Ñ€™Ä´Ñœ÷éÒ¥&Ò5%Aœéÿìö‡3e§àÏLE›››Ís=›C˜ô‘Þ··öµ}íÞ{>S²bX±ºu9ªšäüIÓØQÐ )W˜Sç," ÀÐÓ¤ú$£r¢žu@3\:æ\(œ„—U9Åó¹À­zб$*>[²;Àýû¡¼~÷È@dP¶*"@¢>¶R@7nÜØxýõ×7Þxãf;øøkµ"}$¸íËã饗¯?—Â Èøƒ0•2Ôæ? }?ô‹PÄ—¸•h X­?EVë~æÕ¸Ü[ÒV9€É¦·Œ䪚Þó¦Ì#ƿ膤‡äZ4ºž$3#Î6pB” 2p=ÙŠDÄ.Þ+Ù=ܼî‚6ñ~ô è~³ZX¡!kE ·¦ºúŒÏö-n}RÛµó /ÕÿÒx;쫃í|Ðã¯Áè+(EVð¦Æ%% pÓ“yµ G†ËåyOÒ¶Œ(cÚq-R®Cõ?˜ Œ_@ùep»Ç9á'êí–0+à2ô`è©PEšHAޫؽSxô X=+âúõëͬO>ùdãìÙ³Íúÿ¢}–$6ÙGjë;ö¦… µº¨é•çCE*õ ¬¢XÅ»ÚÂ5)¤S4¥JºoáѼ|„ÆÀÈÌ!òž £2ç<ÇOÔWvˆ€AèÑÐc¡›[*Ém°Ij Œ<|…¬øcZ¨€5"ÌXÑ'õM}T_U³³%²ûp¨}é©050C¿-YAЬàMKâ½ê¼ŠÙlÃyñr¼0ž¹4ªð¹Pz†Uû2åºëx¨‹å]‹è€tÀ„P)h¤àù0ŒòÏ °LÏ3_ÃÖ~I;ÀæÿéП‡Š”DµèX` Wð÷Î;ï4y^>Ø'¾ÛkÑ3U‡ìhçúìQ®Q× KÑ–C¡HÀ#¡_†šj© "ÂÙþ³Ä¡;$ëÕ?›/Štó¾ìô¬’ÈtÚìSÿ®RXQ•±¢@´/ë0Šòºª¾y~êxIò¤}a(Õ)g­•ÿî’Úr¼0 "•…ÙÓ¡Ú¹]ß0žxQÈþa¿úG€ÐE)ÐÅ»²³s2` £þ8TîšW5Ó}VWi­ÿÌû û=z´ ù+úË­´aש¬iÃÿñù¦-ú< 2qˆØ´ß¿ úô;úÂ,5Óÿr?>™€Q5‰Ëó„,Z#°làÿsÇ ^Œ(ÀHåPoá0é¯+¡Ô=¡Ïléã±e`ÚAÃ/§—­œêMSåþͧ·´*¶$îô?¸ÄO²}æ‚[îÂ… M: ž"Å1§ UŠ ^îÁW¡Ûª ¶D[²>NS˜=*L|$T{)ço†rª6Eèߢ?«²Ö`Ñ ÌÈ€ë´ÐÁ:§áê›[ãù¨|xÂÿf¾6ÇüBlJ¡ˆ˜}ÿΟ–Å=G¦­!hùß/ýç`J ìY34X!"’c»!rèØÂ<¬¹-_œd¢q2ÂÈ€ÍÀV2 VŒçƒ¡¼ÿ§B ݱ æTÃû¿™ÏO—Kߪ¢ß £±ãóö &“Õÿ›››/¼ðB³>€Ç ú|¨6M.„¾úE躧’(i£ á“¡›¡/níÏÕ^E¥.]ºÔ¬ñîܹ×^{­!}_ë_E²­bií 5 ¿ûÝkV Rmyˆo $ÍëøÎ_|G*ÌàþN¤î‰HÃ\ÑÁø“Dß0Àå 7éó«ú>†elCvígM„ÈB¼´uE–M \„>Ê8xm@3°•LFV“Æ…@ÁR4¥ ¹ÉÆrª7?üðC†è&ï™Ñ5˜†!ѹÛNKT9bç.%Às4§Z`‡`ðÚÝ„VN[Ǿª“¸eôôqø=úh¨>?—ä©}JOYòYx¼ï’íU´MáV·b ·ï“ŒüA0H¼þhû7ã{7­ ¾ÀoÆ ƒïèE?v=—ï4ÒoC üìÁVäñob!²ÛÀà€]ú?9Phl¡ #úiè߇î F­@€0¥ÀŠÀSC‚)20Q„ÓˆØz͘PÞ‡uÓÏž=;îùé½1®‡!E2„*lÌК3Žðˆ¤ê ®fÌ‘j¿5÷âÀÖMpLHOM€·ÔØ] Ñ÷y=0y.ôÅPù~êøÔâþ oÈ)ÿW¿úÕÆ«¯¾ÚxËÚ¬…žú.®Ñ@oÚªëÐ~‰÷²¿Ž¹NíkP؉ÿˆïýG|ÿ¦0Ú»ÿA£¶à;^kï~Ÿ“<žvbŽþ1ìg×é˜è > –a~¶ûO¡×CõúçÐíö"ÝEêÛ‘ì6ðû$£Hx­ŽðŸÙÒ£±õŸ_7ã—<·dOe`)ü&†ótdƒ"CzSX‘g¬cyùW®\¹ùë_ÿzƒwµ ÏOgè\›kd@åT]chª•uÕEà@†äH›ãþÀ~°&àëxmDºz%ô«PŸúGyÿbwåEûdåþAyX9>•¸oÚlæü¥¤äüE¦ÜOï­‚dÔOµ[ýs˜ä€<ì½aÇ|ž"½TûWX˜í_=RœÿûoxŒ¨!Øþñz}7ì³>5>¡ý³F@á0»±Ý^Ÿ½¸ub§ qB»).VÈïH¨ð¨üãÇ+<*\:W0¾W2 )J½^ÆM5Cû>ûª¨Š÷1"§:µážãwå+iØ’üÈ«òYé¹QïeD r¤Í4,ÕØ3\ lôT(²‹\ ý(TxïZ¨ÑJÇ_A‚„7/ÆÏ •p™I´ËK—V/ç? m5Ûë°÷'ÓÉå SÐG–¢nâ;ÑÞ¿“íß#…Çý_v ¨!˜§L8õ•~Û}áñÓí¢?œ ´ÇkÎB€°½"¼úGBŸ5àg8@¼7w0¾[2:qxL7ÃË¿ã>•[ä%ÃØÞ³-§:lÀvlŽ3ZÎW\¯küíoÛx•ÈÀÀeŽT}ÀŒ`ðb´íGC‘\„@'Fºåÿ²CÇîZˆëõ î¬}ÎÁL²ª9ÿ™@˜üáü·÷M$Ààûx´ÿïDû¿'Úÿ=œ5lƒ~˜ ÞÛVC°“þ1ì߬ó1cbÚ D@*€½Ðg8Î$··^íðo[€lT¶ÔÏøa4¼ü¿åF¹¨l]3å¬ã{%-! “ü›j*ûßzë­¦²˜'¹F]Xu §š÷8Ïbûë<Þ›­ëUhųD|l2à}H Yˆ5Ã"¼:´þp04k5¾ˆýU/ L[`+¯Éëçýëÿ¢¢p*BÕî…­û õúë¯o¼ùæ›+—ó ÀÎnï›^ß1øûùÀõžÁöŸ}æÃÄàï½!5MMÁ¤‚a¿Ùçc‰S‹5i/kˆÜ»´ÃoÌ@lƒ`–NÒÖ‰ÓœçûLìÓ£¡¢ `^„ïøÿƒá©xY²4^i¡~ÅFòŒ ®ÆL¼¯Ã‡G|ëÀ€ç°ˆó[Äÿ0°¸f^ÿàu3„™#E¤X¹œÿÝ´rd;ÆÛ_7`°ýöagྤÝÈþ1K Á°ßìó1Ø‘k"í…¾£^æB¨1q¾U ;mIÀISì^GWÜódèfè‹¡O„êü%AƒæŽîž0²7åW¥€jVˆ 4t»Àãã?¾=­ÌŠl?ûÙÏ6:Ôx;Û??æ5ËØÎõtÆ1¿ÝÕ·ö@¿g8jN„Šˆ Cð*ˆ§ƺ  à^¸'%Ý@À½¬¡™TCгnï,v¹&BŒ×H´AÒ˜éÔBåýyþÂ}úŒÝÙe Ý„ž¼&ªšý×ûp£ÂªÖÃ|p·â7¡n!×’ÿDÀ ¤ðÌÄ%êà¥&fð„á„6)Ä ç¯NÇþKè*‹Á³Êëÿ»ÐŒ`›Â›c €Á%¡jf¢¼ñÆׯPuX´&~«d °³Ô,áwõ_ÎRÁ>H°¶ìEΚa'Œ«"ë¢ì^#­I€GÃK4:ËóË[ 3ÏóïÜ!:;ƒ› |œ±dvà–óüySW®\ú¿'‰Õ쿸Úßœ… ³ÔìÝ»÷6yEÓ©…ñôÛV_Iâ»+':¨Až Øz0”çï[‘»ÃE›Ô÷µQmUʺ¦©†#´ü£À,5Ë?ãvÏ@¥ÒU£j"ØŸaw¥ DIè{áDõE¢h›¡ß†þ)ô\hkÒ0*'3aèäþæšç»ýª¬yÍ 0M `’Amÿl½žŒæ™ÀªxBÛ ¬FZ2ÍšFï±ÇkžÓŽ <òÈ#Í"B9“`È/ìõ‘ÛUüãòa[DØD€]˜JjTš¨Tâ?Õ—ëC E`Þ‚…žäþ™6êyð@ŒÔDHж² ös<ØL¥c/ þ<䙽@ž þ×B;GâœÙž³˜yžoþPn R—.]Úxï½÷š\“e\sËÏÔvz'Ê›Õ`åï2¬jP+€°tÖØW<åÁñßnÞÕ±×EÌ2k¦&â%™ožÞ’c%…@—`k"D ÙvBÝ2 €XutŒˆ !{BÙ Z_ú<´Ui# L!?é;iŒE¥Žp§ßPDVQf.E•bQ&¹?OÂ:{ölóÚÀå}$ d~`oÀ× “ÁÛ–ŒG³ÏšjÚ- 1ú) uäÔñÿh5Þe8êÔ?ˆ ­6ãaÔ&µM†t«F¥éëU£¡’®#°½&ÂùjÓj…Ì`+8`O<ñDs|Ìõ f=jJ=a;¤ÒZ•6€“Ô¹UûËW Nv¤èäœ í ícJ÷ Q Mo_‹žÁM’0òÇë±Àþ©h þc!»ýf’%ì#ÿÌ…Þþ`íðþ3u#CLi|FR”Åó'^² Þ/)ºŽ@Ú¶%Ú®A?£‡j¦hϾœ)4‘3¯ië¡ ðqb~$à@¨¼…HÀ-bg»ÈaŠE>æ\‹~ûÏÖëB`! ®:±””v\j(쌕(Àĺö¦}!T©1íïý÷߯•¡ÐÖÁ®"0è$ ž#B€ ˆ^+Tç2AŒŸB݃án³Z•6À³qF~¿eù_! @c¨ð:±}^¾"?^ÈKà¨f +)º†€v*4m›l¿kçØ‘óéäù±ú¹ˆŠ‡O™ma?FÕgJ ¾" êßÀ¯P]Ëœ‚P·*m€ãŒxýž0ø£7c €¯ÀÏòžS®E?YR,9½¬TWàƒ” EÀàŸ:ôfDðüùó=°Þ¿`Ñ©AïW”e$|õFÇ`/8 ™ PßbŸíà<ØŸÒ‰PSÓª´a¹Ô(D¨ŸŽeþB¨:¸|ß„µèã§J î  ³ åaõ˜²wç":t&¼{áQ–<6AJÀ ÏN %…@ŸÐŽÕ³¨k¹páB71àLL±.€Ë—NkUÚ òcûígœÞ#ªãg1àöÏÕëB ‹$k×iµáüw~— ö ¤º ÛJýíÓú…î €ÄJy„×BbÇo;¾ÿþIëˆä…t2à¤f&ò ò!ò" iI!Ð7°ú’v@¢ë*ÚùÕú•B`ùð\i-D@;·ÈqÏñûï¿'u;ºÀ™î!ÿM^b쪾ÃX»Ïy¾ò5Ïwªu¨óhËEÚ¹MŒ¢œhVH+,)úŽ€AÞ8wãÆ&Âeð7Nm BpøðáiÖÃL‘öipkƒLÌK0’@¨y¾ÓÜ’úL!°^ðþ3Pi•õº÷ërµÈ,’k4è#¸ê]¤¼Ç9^†´A&æ%jžï2nmýÏB ?ðÈ$^—«„€Ÿ œâ¬wñzYÒ˜xîØMÍóS} ( B` @v»°ŽH`b^¢æù®A‹®K,v€'‡Äb/–ÝÁ%ÔW ©èÒ:"m€‰­3ËsÔ<߉PÕ µC ‹) @W®]3X› VïÒ•uDBÜY̾æù®M_‹ Íâµµ¸Ø]¾Hƒ¿4!¡X¸fì2àõóKC@}Ë Xf½ËÂ*m²Ê7óKC¿þq!ÐÚtI;ðø‘ÕѶ%…@!°û,,Pó|wÿfÖX +i­ÌWW¸z縫þ·ÀøÃf‹\Á7‰ÁÎÿCýB!Ð Øu.Ú7²»Ìz—…D2T:8ͧ¼§n4Æ:‹Ù0( v`¯‹ÌŽc~CTa”Ñyä‘ k¤ÿèG?jÊEÂò³µ-úŽ@—ìÇÂ":ù XfÞ£ï ¨Î¹ÈOËSçšõ²y?òac×L–ýÁ~°ñøã76Âë|4°Ç‚{TxF\Fþ§z£è ]² #=¹7uš…ÀT æ«Ëû ÙØÁß79–æýçúè÷Þ{oõDK¸´¤Xºb?F0xyÓeæ=V¥Õu,²¢òÕ|Ä÷ûxØj> ý—С?•Èô€íPÉ¢¢.ò¥d ¤è#l‰Áÿ¹çžÛ8sæÌÆþýûg‚ý`[&ؼä‰aÆüà´Û… HGÎy¾ |¾ùæ›û·k¢.¾–þœö–Õç@æì´Ma»x`ãé§ŸÞ8yòd³Uà3B×Ú·í‘ÿÖ×2žƒà˜¯ôú-7ÿ¿¡þË¡Ÿ…þŸÐûB¥qˆ—w <áÎhŠºÜ¸á§n-)^»ñª#ÝF@{æ?üðÃG޹íùOi?òâÆ¦ÑòC³lÛ ÚŒhÍóå¶Ôg—‰@æìû„„û:Ô0÷'Nl<ú裳žžŽ+../Þ:“ßì’ Üõ‹¡" Ýz4T$à¡Ðÿ:„Jºåðá÷=£Ï?ÿ|ã£>j‡"\Ioàܪcɺλ2‡°­J`â e‡®y¾¡ªtí5sv¦¥ÉÙ)Ü1 ÉãÍ)™ ×çÆ† æüý.} øsèµPú6ÔµcO? ý~èH ,Ê^‘J Hˆ0¦"‡%…@Ÿ@Z­gaa+©,ÎÅ2´¿Ìñ;·¿Ò˜xR"5Ï÷6æµÓäì„ëxü/½ôRãõóüy¦3Š™ð÷7¡òáÿ;Ô ¸Ê‚¸æ+¡_…~Êëwœ 9̈¡™R ¥¬ˆ˜½ýöÛMÚ)àQeêE@.ÏÜü‡úS,Žƒö;Ø.µ[㟔¡6šO¼DrLjþ¡¿ÐL²!­J`b^ Láâkžo«÷²~¬E´Y9;^hæì¤±²cOù¯„¾yÂWC¿ ½*™-?žƒa쮜0^úG\/`À}9øÇ{ Æi/.¶Â¢K×®]k¢ß~ûm³<°hãJÌ0B ¼®z¢’ú³` ðYÔÇ YÈÊãWË2¥ Éþ£ïè7 øC³×âŸ6ÀX“çÊpbFDþ#ó!¶5Ï7Qªmh1gÇÛç¿z)ôÐ߇ʯ2ˆËkùè]¯‘šAc„QŽ”A{Á˜"c?ûÙÏ2ÀÐ"<)DýZU'ðÕW_‰j½±›h—òûV´4Æ!ˆ)k €ãÇoŠZ"¯“¸Ž8¶áßC¿Aûc(Býyh«Ò˜˜vÆò :m­ó= :¶lZÊÙé¸üB/n©0V¿ê .ñá((‚Tü7•ÓpÇ·ã#Ê€²„¨!lÈÕ«Wo? é{I!°X ìÒUj†xûHrŠÀÚ—BTS$¢5`#®‡~jàG¢ÕÔ´*mù=•QØ>Åô©ÅPÉy¾ò!X“´€^åô†ÂUw 5gh_;Ô93U5cÎ.û€·QˆÇÿVè?…f>ÜSmè:Þ>¯Ÿ]P aß±‘v"Þ»C„Q¥cxY +a\zh[â~"olŒ{ç¾æ½½ãÇêE!°CØ *²mP·°ÏO~ò“—_~¹©]1è‹øLF±ØšÑð§ÀŽ —Cß eCÑ"­J@^B'vÒ仡¾ßÙ¹uJùL +’׫œ^ V²0 -çìrp¶3à¿¿¥çc‹µ’$d‰Ck!®Wþ.Ÿ‡Âbo({1UÑàŽ¤ÃßkwF)þ·ÜxÖ ìÌcëgJ ™@0 îÿ ñ[èç™gži^k¯I²r.´Ç)H©þ"…È뿊4«)jUÚ ¯Æõ[? } ôáP¡¾¡Â%‡j¼~FXHOçÅ”*§È•ì:»³ÓY…ø?Õiõ ûŠ×Y3?#cÿdè¾Pvc¢0šìÝ.¼­¿ù›¿i¢î«©ÆvØç·¿^³"€x" T…þ_xá…f¡°9Ö Ùþ¯3bfüÔoDÙ‘Öåîž4û¿àå|úßBýþPὑk2ÅG§FÔ4÷+§è•ì*»³C.‡~úYèïCyþë.}† >¢$¼~áLÎGa*Ÿ+ÖhàTd€Ú€ô¸Æ~±Þ,æ@Àà/m­@5ëSv°NÈö3E×7¨ýÎ€Ž“3øßz:Ô ¿Š ¬\øss³IÈëü“á#•Ó ]ÜŽÓþv)gÇÃýuè«¡H15ð­» YÕ|=öo„^ u0• `èî K¶×0Ð ()ÚFÀàOØŽ+ µC1nê+Bþêe4^$@ž[M´P`ÐÿQèÁP':rð÷š^~ ÏÚg€*⩜¤JÚD`9»Á·ANGÛÚ¼¾ÿ r]„HþV÷… wŠî U€Ì5bo¯`S›RR´À`ûÒÆ´?d`’놤ó ^æ_C5`?¬AwŽdh"OÞ‰ ÿëØ#`£rs¼³Êé„®Þ˜äì \X;öÞzÅݕ¯1^·Fä[Ä9z'4íÇ‘Ø?ŠˆÌ,iSFÙ•™°¾P,}Á oÝÏBõ߇f±u&ÛF ίÌ}0g±uxþMåôæÇ®¾y7 ÈÙ™çNõnÉxLmR3ñQ¨ðæžP6d.ß+)úŒ€þ`À×.néØr*8Ø­zÿñ{Må¾íN„Ç/‡§ãz@ögšçŸ¿C*§wõb‡,0g—0¡î’Ñðx<ƒÿç[ËšÉT¶%£¼ »Òº'¿YRì6Ú²Âé°Ávm`êçù¿úO¡"¦ëÔ÷ò;±ÛŽ´ð:ªNé"œ¸Î<ó<ßøÎR9½;à¨;D`A9;žëu‡—ÞÕ¯3jRl2ð@èwC* ¸8½NRà˜ý’B oø\ã¤A;»úÁ–ž­ÙCÆP¶$íInãP;ÒH6.OaàÏ“<û3ÍóÝ~I•ÓÛŽH½î-ƒ×`Îîr¼Ö²ÄnÉà„P8ÂŽ>*ªÈPª'º7ôHèþP¡¤èœöáB¨p¿™eGL‘åýÿ6ôjèB¤  ]žÂE`9X£—,íö$ ìbþ{ý—B`>Ô$²»MÀ%Dç¢s 9ö‹Å½þÛÎ褽¸'WGÛÙµÕ· B ( B OðvJ B ( B`Í(°f7¼.·( B €@ä%?ŠQIDAT€j…@!P…À"P` oz]r!P…@!P Ú@!P…@!°†XÛ^—\…@!P¨6P…@!P¬!EÖð¦×%…@!PEª …@!Pkˆ@€5¼éuÉ…@!P…@€j…@!P…À"P` oz]r!P…@!P Ú@!P…@!°†XÛ^—\…@!P¨6P…@!P¬!EÖð¦×%…@!PEª …@!Pkˆ@€5¼éuÉ…@!P…@€j…@!P…À"P` oz]r!P…@!P Ú@!P…@!°†XÛ^—\…@!P¨6P…@!P¬!EÖð¦×%…@!PEª …@!Pkˆ@€5¼éuÉ…@!P…@€j…@!P…À"P` oz]r!P…@!P Ú@!P…@!°†XÛ^—\…@!P¨6P…@!P¬!EÖð¦×%…@!PEª …@!Pkˆ@€5¼éuÉ…@!P…@€j…@!P…À"P` oz]r!P…@!P Ú@!P…@!°†XÛ^—\…@!P¨6P…@!P¬!ÿy|&±ã©IEND®B`‚icnV ¿€therion/loch/loch.ico0000644000076400010400000002603610251676250015646 0ustar userAdministrators(V è~00hf@@h Î ``è6( €€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€Àùçóóãóãñáñàñðøþÿÿÿÿ( @€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿ€à€ÀÀÀøÀÿàÿþðþø?ü?üü?þü?þøÿøÿøÿ‡øÿ‡øÿ‡ø?ÿ‡ü?ÿ‡üÿ‡þÿ‡þÿÿ~ÿÀÿàÿø?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(0`€€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÀüÀøÀðÀðàðþðÿðøÿÿà?üÿÿà?þÿÿàþÿÿÀÿÿÿÀÿ€ÿ€ÿÿÀÿ€ÿÿà?ÿÿÿà?ÿÿÿð?ÿÿÿðÿÿÿøÿÿÿøÿÿÿøÿÿÿøÿÿÿüÿÿÿüÿÿÿüÿÿÿüÿÿÿüÿ€ÿÿüÿ€ÿÿüÿÀÿüÿÀ?ÿüÿàÿüÿðÿøÿøÿðÿüàÿþ?ÿÿ€?ÿÿÀÿÿðÿÿÿüÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(@€€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿàÿþÀÿüÀøÀ?ðÀ?ðÀ?ðà?ððøÿ€ø?ÿþÿüÿÿÿüÿþÿÿüÿÿ?ÿÿøÿÿ€ÿÿøÿÿÀÿÿðÿÿÀÿÿðÿÿàÿÿðÿÿðÿÿàÿÿøÿÿàÿÿøÿÿÀÿÿüÿÿÀÿÿüÿÿÀÿÿþÿÿÀÿÿþÿÿ€?ÿÿþÿÿ€?ÿÿÿÿ€?ÿÿÿÿ€?ÿÿÿÿ€?ÿÿÿÿ€?ÿÿÿ€?ÿ€?ÿÿÿ€?ÿ€?ÿÿÿ€?ÿ€ÿÿÿ€?ÿ€ÿÿÿ€?ÿÀÿÿÿ€?ÿÀÿÿÿ€?ÿÀÿÿÿ€?ÿàÿÿÿ€?ÿàÿÿÿ€?ÿðÿÿÿ€?ÿð?ÿÿ?ÿøÿÿÿüÿþÿþÿüÿÿðÿÿ€ÿÿÿÀÿÿÿðÿÿÿøÿÿÿþÿÿÿÿ€ÿÿÿÿàÿÿÿÿüÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(`À€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿøÿÿÿà?øÿÿ€ðÿÿðÿÿðÿþðÿþðÿüøÿüøÿüüÿüÿÿþÿðÿþ?ÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿ€ÿÿÿÿþÿÿÀ?ÿÿÿÿüÿÿàÿÿÿÿüÿÿðÿÿÿÿüÿÿðÿÿÿÿøÿÿøÿÿÿÿø?ÿÿüÿÿÿÿð?ÿÿþÿÿÿÿðÿÿÿÿÿÿÿàÿÿÿ€ÿÿÿÿàÿÿÿÀÿÿÿÿÀÿÿÿÿàÿÿÿÿÀÿÿÿÿàÿÿÿÀÿÿÿÿðÿÿÿ€ÿÿÿÿð?ÿÿÿ€ÿÿÿÿø?ÿÿÿ€ÿÿÿÿøÿÿÿÿÿÿÿüÿÿÿÿÿÿÿüÿÿÿÿÿÿÿþÿÿÿÿÿÿÿþÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿþÿÿÿÿÿÿÿþÿÿÿÿÿÿÿþÿÿÿÿÿ€ÿÿþÿÿÿÿÿ€ÿÿþÿÿÿÿÿ€ÿÿþÿÿÿÿÿ€ÿÿþÿÿÿÿÿ€ÿÿþÿÿÿÿÿ€ÿÿþÿÿÿÿÿÀÿÿþÿÿÿÿÿÀÿÿþÿÿÿÿÿÀÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÀÿÿÿ€ÿÿÿÿÿÀÿÿÿ€ÿÿÿÿÿÀÿÿÿ€ÿÿÿÿÀÿÿÿÀ?ÿÿÿÿÀÿÿÿÀÿÿÿÿÀÿÿÿàÿÿÿÿÀÿÿÿàÿÿÿÿÀÿÿÿðÿÿÿÿ€ÿÿÿøÿÿÿÿ€ÿÿÿü?ÿÿÿ€ÿÿÿüÿÿÿÿÿÿþÿÿþÿÿÿÿÿÿüÿÿÿÿ€ÿøÿÿÿÿÀÿÀÿÿÿÿàÿÿÿÿøÿÿÿÿüÿÿÿÿþÿÿÿÿÿ€?ÿÿÿÿÿÀÿÿÿÿÿðÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿø?ÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿtherion/loch/loch.rc0000644000076400010400000000006110344433534015465 0ustar userAdministratorsLOCHICON ICON "loch.ico" #include "wx/msw/wx.rc" therion/loch/loch.res0000644000076400010400000006162210344434474015670 0ustar userAdministratorsL|c.rsrca<La8@À¸›’CH€€h€X€ ˆ€X€ˆ€¸›’CÈ€à€ø€€(€@€X€p€ ˆ€  € ¸€ Ѐ 耀¸›’C H ¸›’C X ¸›’C h ¸›’C x ¸›’C ˆ ¸›’C ˜ ¸›’C ¨ ¸›’C ¸ ¸›’C È ¸›’C Ø ¸›’C è ¸›’C ø ¸›’C  ¸›’C  ¸›’C¸€8€È€P€¸›’C ( ¸›’C 8 ¸›’Cð€€ €8€P€h€€€˜€ °€ È€ à€ ø€ €(€@€¸›’C H ¸›’C X ¸›’C h ¸›’C x ¸›’C ˆ ¸›’C ˜ ¸›’C ¨ ¸›’C ¸ ¸›’C È ¸›’C Ø ¸›’C è ¸›’C ø ¸›’C  ¸›’C  ¸›’C ( ¸›’Cò€p€¸›’C 8 ¸›’C €€*€ €N€8€l€P€ˆ€h€®€€€Ò€˜€ò€°€ €È€0 €à€P €ø€p €€š €(€º €@€¸›’C H ¸›’C X ¸›’C h ¸›’C x ¸›’C ˆ ¸›’C ˜ ¸›’C ¨ ¸›’C ¸ ¸›’C È ¸›’C Ø ¸›’C è ¸›’C ø ¸›’C ¸›’C ¸›’C Ø €°€ê €È€ €à€F €ø€r €€˜ €(€¼ €@€ä €X€ €p€¸›’C (¸›’C 8¸›’C H¸›’C X¸›’C h¸›’C x¸›’C ˆ¸›’C ˜¸›’C ¨¸›’C €¸›’C ¸CSQUERYWXBITMAP_STD_COLOURS WXWINDOWMENUWXCURSOR_BLANKWXCURSOR_BULLSEYEWXCURSOR_CROSS WXCURSOR_HANDWXCURSOR_MAGNIFIERWXCURSOR_NO_ENTRYWXCURSOR_PBRUSHWXCURSOR_PENCILWXCURSOR_PLEFTWXCURSOR_PRIGHTWXCURSOR_QARROWWXCURSOR_RIGHT_ARROWWXCURSOR_ROLLERWXCURSOR_WATCHLOCHICONWXICON_SMALL_CDROMWXICON_SMALL_CLOSED_FOLDERWXICON_SMALL_COMPUTERWXICON_SMALL_DRIVEWXICON_SMALL_FILEWXICON_SMALL_FLOPPYWXICON_SMALL_OPEN_FOLDERWXICON_SMALL_REMOVEABLEÈ4ü404d4˜4Ì4444h4œ4Ð4484l4 À` lÌ (ô!èÜ$hD+h ¬5è”Lè|O(¤P(ÌQè´T(ÜU(W(,X(TY(|Z(¤[´X\l\€\”\¨\¼\Ð\ä\ø\ ] ]4]H]\]p]L¼]Ð]"ô]^^"@^T^h^|^’ ( @ÿÿÿððøø?ø?üü_üßüßüŸìlh`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿàÿÿàÿÿÀÿÿÀÿÿ€ÿÿ€ÿÿÿÿÿþÿüÿüÿü@ÿÿÀÿÿÀÿÿÀÿÿÀÿÿÿÃÿÿÿÃÿÿÿÃÿÿÿÃÿÿÿçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ( @ÿÿÿÀ ` cŒFÄDDFÄcŒ  `ÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÀÿÿãÿÿ?ùÿþüÿüø>ùóŸ?ùïï?óß÷ŸóŸóŸó¿ûŸó¿ûŸó¿ûŸóŸóŸóß÷Ÿùïï?ùóŸ?üø>þüÿÿ?ùÿÿãÿÿÀÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ( @ÿÿÿ€4:€@ Ðèt:ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÀÿÿà?ÿÿðÿÿøÿÿüÿÿþÿÿÿÿÿÿ€ÿÿÿÀÿÿàÿÿðÿÿÿùÿÿ ( @ÿÿÿ0Hˆ ô@€€€€€ ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÿÿÿ‡ÿÿÿÿÿþÿÿüÿÿ?ÿüÿøðÿÿóüÿÿóœÿÿçžÿæÿæÿçžÿóœÿÿóüÿÿøñÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ( @ÿÿÿà C⌠€ D€ Œ@A@B"@DB@H‚@1@"€€Œ1C àÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿàÿÿÀÿÿ€ÿÿàÿþÀþ€ü?ü> ?ü<?ü8ý¿|=ûß¼=ûß¼{ü?Þ{ÿÿÞ{ÿÿÞ{ÿÿÞkÿÖ{ÿÞ{ÿÞ{ÿÞ=ÿ¼=ÿ¼6ÿl~ø¿}øÏsððà¿}Àÿ€þñ€ð€ü?ü?ü?ü?øðàÀÀ€€€€€€ÀÀàðøü?ü?ü?ü? ( @ÿÿÿU@U@U@àààà€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿàÿÿðÿÿÿðÿÿÿðÿÿÿðÿÿÿðÿÿÿðÿÿÿðÿÿÿùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ( @ÿÿÿž_€?Àx¿À~ÀÀøÀÿ¿À?ÿÀÿ€÷þ?øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿð`ÿàÿàÿÀÿ€ÿÿÿþ€€`øøÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ( @ÿÿÿpy€ú8üÀýþ~þàþýÿÿüÿñþïàüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿ€ÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ( @ÿÿÿÀ    ÀçÀÈ È ˆ ˆ  Gf~ð‚AAAA~A|ƒx@p `@àÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø?ÿÿðÿÿðÿÿðÿÿðÿÿø?ÿþÿÿþ?ÿþÿüÿüÿ80ÿ0ÿxÿ|ÿÿÿ€ÿ€ÿ€ÿ€ÿ€ÿÿ€ÿÀÿàÿðÿøÿ( @ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ( @ÿÿÿ ˜¸øøøøøøx8ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿáÿÿÿáÿÿÿðÿÿÿðûÿÿøsÿÿøcÿÿüÿÿüÿÿÀÿÿàÿÿðÿÿøÿÿüÿÿþÿÿÿÿÿÿƒÿÿÿÃÿÿÿãÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ( @ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿðÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ( X  €€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿwwwwwwwwpwwwwpwwwwwwwwwwpwwwwpwwwwwwwwppwwppwwwwwwwwwww(€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿ( €€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€Àùçóóãóãñáñàñðøþÿÿÿÿ( @€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿ€à€ÀÀÀøÀÿàÿþðþø?ü?üü?þü?þøÿøÿøÿ‡øÿ‡øÿ‡ø?ÿ‡ü?ÿ‡üÿ‡þÿ‡þÿÿ~ÿÀÿàÿø?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(0`€€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÀüÀøÀðÀðàðþðÿðøÿÿà?üÿÿà?þÿÿàþÿÿÀÿÿÿÀÿ€ÿ€ÿÿÀÿ€ÿÿà?ÿÿÿà?ÿÿÿð?ÿÿÿðÿÿÿøÿÿÿøÿÿÿøÿÿÿøÿÿÿüÿÿÿüÿÿÿüÿÿÿüÿÿÿüÿ€ÿÿüÿ€ÿÿüÿÀÿüÿÀ?ÿüÿàÿüÿðÿøÿøÿðÿüàÿþ?ÿÿ€?ÿÿÀÿÿðÿÿÿüÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(@€€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿàÿþÀÿüÀøÀ?ðÀ?ðÀ?ðà?ððøÿ€ø?ÿþÿüÿÿÿüÿþÿÿüÿÿ?ÿÿøÿÿ€ÿÿøÿÿÀÿÿðÿÿÀÿÿðÿÿàÿÿðÿÿðÿÿàÿÿøÿÿàÿÿøÿÿÀÿÿüÿÿÀÿÿüÿÿÀÿÿþÿÿÀÿÿþÿÿ€?ÿÿþÿÿ€?ÿÿÿÿ€?ÿÿÿÿ€?ÿÿÿÿ€?ÿÿÿÿ€?ÿÿÿ€?ÿ€?ÿÿÿ€?ÿ€?ÿÿÿ€?ÿ€ÿÿÿ€?ÿ€ÿÿÿ€?ÿÀÿÿÿ€?ÿÀÿÿÿ€?ÿÀÿÿÿ€?ÿàÿÿÿ€?ÿàÿÿÿ€?ÿðÿÿÿ€?ÿð?ÿÿ?ÿøÿÿÿüÿþÿþÿüÿÿðÿÿ€ÿÿÿÀÿÿÿðÿÿÿøÿÿÿþÿÿÿÿ€ÿÿÿÿàÿÿÿÿüÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(`À€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿøÿÿÿà?øÿÿ€ðÿÿðÿÿðÿþðÿþðÿüøÿüøÿüüÿüÿÿþÿðÿþ?ÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿ€ÿÿÿÿþÿÿÀ?ÿÿÿÿüÿÿàÿÿÿÿüÿÿðÿÿÿÿüÿÿðÿÿÿÿøÿÿøÿÿÿÿø?ÿÿüÿÿÿÿð?ÿÿþÿÿÿÿðÿÿÿÿÿÿÿàÿÿÿ€ÿÿÿÿàÿÿÿÀÿÿÿÿÀÿÿÿÿàÿÿÿÿÀÿÿÿÿàÿÿÿÀÿÿÿÿðÿÿÿ€ÿÿÿÿð?ÿÿÿ€ÿÿÿÿø?ÿÿÿ€ÿÿÿÿøÿÿÿÿÿÿÿüÿÿÿÿÿÿÿüÿÿÿÿÿÿÿþÿÿÿÿÿÿÿþÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿþÿÿÿÿÿÿÿþÿÿÿÿÿÿÿþÿÿÿÿÿ€ÿÿþÿÿÿÿÿ€ÿÿþÿÿÿÿÿ€ÿÿþÿÿÿÿÿ€ÿÿþÿÿÿÿÿ€ÿÿþÿÿÿÿÿ€ÿÿþÿÿÿÿÿÀÿÿþÿÿÿÿÿÀÿÿþÿÿÿÿÿÀÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÀÿÿÿ€ÿÿÿÿÿÀÿÿÿ€ÿÿÿÿÿÀÿÿÿ€ÿÿÿÿÀÿÿÿÀ?ÿÿÿÿÀÿÿÿÀÿÿÿÿÀÿÿÿàÿÿÿÿÀÿÿÿàÿÿÿÿÀÿÿÿðÿÿÿÿ€ÿÿÿøÿÿÿÿ€ÿÿÿü?ÿÿÿ€ÿÿÿüÿÿÿÿÿÿþÿÿþÿÿÿÿÿÿüÿÿÿÿ€ÿøÿÿÿÿÀÿÀÿÿÿÿàÿÿÿÿøÿÿÿÿüÿÿÿÿþÿÿÿÿÿ€?ÿÿÿÿÿÀÿÿÿÿÿðÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿø?ÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ( @€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ( €€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿˆˆˆˆˆˆ€û{{{{{€÷·····€û{{{{{€÷·····€û{{{{{€÷·····€û{{{{{€ÿÿÿÿÿÿ€···¸ˆˆ€‹{{€ˆˆÿÿÿÿÀ€€€€€€€€€€Ààÿÿÿ( À€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿˆˆˆˆˆˆ÷···»€{{{{{·····û{{{{°ˆÿÿÿÿÿˆxˆˆˆˆˆˆ¸·····¸{{ÿÿø··¿ˆˆˆÿÿøˆˆ€ÿÿÿÿðààÀÀ€€€ÀÀÀà?ðÿÿ( @€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ( €€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðððÿÿðÿÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀ?ÿÿ( À€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿˆˆˆˆˆˆ‡÷wwww€€€€€€ˆ€wwwww€ˆˆˆˆˆpˆˆˆˆ€€÷wwwxðfffx€ðhˆ†x€ðgw†x€ðhˆÆx€ðx€ÿÿÿÿø€wwwww€ˆˆˆˆˆ€€Ààààààààààààð( À€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿˆˆˆˆˆˆˆ‡ÿÿÿÿÿx€‡ˆˆˆˆˆx€‡wwwwwx€‡wwww¢x€ÿÿÿÿÿø€wwwwww€ˆˆˆˆˆˆ€ÿÿÿÿÿÿ€€Àÿÿÿÿÿÿÿÿ( À€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿˆˆˆˆˆˆ€¢ÿw€ˆ{pwx‡{|Àÿˆ‡{Œ÷ˆˆxˆGw€‡ÿpwxwpˆ‡€ˆwpŒˆxwwˆŒ‹wwÈ{wpˆ{x€ˆ€ÿÿ€€àààððøüÿ( À€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿˆˆˆˆˆˆ€‡wÿÿwwˆ‡ˆˆ‡ˆ‡wˆˆwwˆ‡wwww—ˆÿÿÿðwww‡€pˆˆˆ‡ˆˆp‡wwpŽîîàŽîîàŽîî‡wwpˆˆÿÿ€€Àÿÿÿÿÿÿ€( À€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿˆˆˆˆˆˆwwwwwx€wÿÿ÷x€wðx€‘€x€wwwwwx€ÿÿÿÿÿø€wwwwww€ˆˆˆˆˆˆ€ÿÿÿÿÿÿ€€Àÿÿÿÿÿÿ&Window¢&Cascade¡Tile &Horizontally¥Tile &Verticallyÿÿ£&Arrange Icons€¤&Next @4  @4 @4 @4 @4 @4 @4 @4 @4  @4  @4  @4  @4 @4( è00h@@h ``è(  è(( (  è ( ((( wxWindows application H X h x ˆ ˜ ¨ ¸ È Ø è ø   ( 8 H X h x ˆ ˜ ¨ ¸ È Ø è ø   ( 8 H X h x ˆ ˜ ¨ ¸ È Ø è ø (8HXhxˆ˜¨¸.rsrctherion/loch/loch.xpm0000644000076400010400000000232610763711560015676 0ustar userAdministrators/* XPM */ static const char * loch_xpm[] = { "32 32 2 1", " c None", "+ c #000000", " ", " ", " ", " ++++++++ ", " +++++++++++++ ", " ++++++++++++++++ ", " ++++++++++++++++++ ", " +++++++++ +++++ ", " +++++++ +++++ ", " +++++ ++++ ", " +++++ ++++ ", " ++++ ++++ ", " +++++ ++++ ", " ++++ ++++ ", " ++++ ++++ ", " ++++ ++++ ", " ++++ ++++ ", " ++++ ++++ ", " ++++ +++++ ", " ++++ ++++ ", " ++++ +++++ ", " ++++ +++++ ", " ++++ +++++ ", " ++++ +++++ ", " +++++++ ++++++++++++ ", " +++++++++++ +++++++++++++ ", " ++++++++++++ +++++++++++++ ", " +++++++++++ ++++++++++++ ", " ++++++ ", " ", " ", " "}; therion/loch/lochfile.ico0000644000076400010400000000427610344431444016505 0ustar userAdministrators ¨( @«´©²³† €†3JL””ë™™™68ËÌÌVV¶‹‹‹ª®®ouê*”› 46)>?O•¥¦¦-rv™™ñôôúeeerrÆTTÓ'ÉÒååõ[[[’’Ì€¼ß³³Ý××ûVV…=Œ‘MMMy~Hbc$ÃÌ7df ‘‘ãFgh #endif //LXDEPCHECK - standart libraries class lxAboutDlg : public wxDialog { public: lxAboutDlg(wxWindow * parent); ~lxAboutDlg(); void OnKeyPress(wxKeyEvent&); void OnMouseDown(wxMouseEvent&); DECLARE_EVENT_TABLE(); }; enum { lxABDG_TEXT1 = 6000, lxABDG_TEXT2, lxABDG_TEXT3, lxABDG_BMP, }; BEGIN_EVENT_TABLE(lxAboutDlg, wxDialog) EVT_KEY_DOWN(lxAboutDlg::OnKeyPress) EVT_LEFT_DOWN(lxAboutDlg::OnMouseDown) END_EVENT_TABLE() void lxAboutDlg::OnKeyPress(wxKeyEvent& WXUNUSED(event)) { this->Destroy(); } void lxAboutDlg::OnMouseDown(wxMouseEvent&WXUNUSED(event)) { this->Destroy(); } lxAboutDlg::lxAboutDlg(wxWindow * parent) : wxDialog(parent, wxID_ANY, wxString(_("About Loch"))) //, wxDefaultPosition, wxDefaultSize, //#if defined(__WXX11__) // wxTHICK_FRAME //#else // wxSIMPLE_BORDER //#endif // | wxFRAME_TOOL_WINDOW) { wxBitmap bmp(about_xpm); wxStaticBitmap * pbmp; wxFont tmpFont; this->SetBackgroundColour(wxColour(_T("black"))); this->SetForegroundColour(_T("white")); pbmp = new wxStaticBitmap(this, lxABDG_BMP, bmp); wxBoxSizer * sizerBmp = new wxBoxSizer(wxHORIZONTAL); sizerBmp->AddSpacer(100); sizerBmp->Add(pbmp, 0, wxALL | wxALIGN_CENTER | wxALIGN_CENTER_VERTICAL, 0); wxBoxSizer * sizerAll = new wxBoxSizer(wxVERTICAL); sizerAll->Add(new wxStaticText(this, lxABDG_TEXT1,_T("Loch")), 0, wxALL, lxBORDER); sizerAll->Add(new wxStaticText(this, lxABDG_TEXT2,_("3D visualization tool for caves")), 0, lxNOTTOP, lxBORDER); wxString lxVer; lxVer = _T("Version: "); lxVer += _T(THVERSION); sizerAll->Add(new wxStaticText(this, lxABDG_TEXT3, lxVer), 0, lxNOTTOP, lxBORDER); wxBoxSizer * sizerAllAbove = new wxBoxSizer(wxHORIZONTAL); sizerAllAbove->Add(sizerAll, 0, wxALL, 2 * lxBORDER); SetSizer(sizerAllAbove); sizerBmp->SetSizeHints(this); sizerBmp->Fit(this); tmpFont = lxFStaticText(lxABDG_TEXT1)->GetFont(); tmpFont.SetWeight(wxFONTWEIGHT_BOLD); lxFStaticText(lxABDG_TEXT1)->SetFont(tmpFont); wxSize tmpsize = this->GetClientSize(); pbmp->SetSize(tmpsize.x - bmp.GetWidth(), tmpsize.y - bmp.GetHeight(), -1, -1); this->CentreOnParent(); FindWindow(lxABDG_TEXT1)->SetEventHandler(this->GetEventHandler()); FindWindow(lxABDG_TEXT2)->SetEventHandler(this->GetEventHandler()); FindWindow(lxABDG_TEXT3)->SetEventHandler(this->GetEventHandler()); FindWindow(lxABDG_BMP)->SetEventHandler(this->GetEventHandler()); delete sizerBmp; } lxAboutDlg::~lxAboutDlg() { //delete this->m_bmp; } void lxShowAboutDialog(wxWindow * parent) { lxAboutDlg ad(parent); ad.ShowModal(); } therion/loch/lxAboutDlg.h0000644000076400010400000000052710537464734016451 0ustar userAdministrators/** * @file lxAbout.h * Loch about dialog. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ */ #ifndef lxAboutDlg_h #define lxAboutDlg_h // Standard libraries #ifndef LXDEPCHECK #include #endif //LXDEPCHECK - standart libraries void lxShowAboutDialog(wxWindow * parent); #endif therion/loch/lxData.cxx0000644000076400010400000004614212047417572016173 0ustar userAdministrators/** * @file lxData.cxx * Loch model data. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ // Standard libraries #ifndef LXDEPCHECK #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef LXMACOSX #include #else #include #endif #include #endif //LXDEPCHECK - standart libraries #include "lxData.h" #include "lxLRUD.h" lxData::lxData() { this->m_centerline = NULL; this->scrapWalls = NULL; this->scrapWallsNormals = vtkPolyDataNormals::New(); this->lrudWalls = NULL; this->allWalls = vtkAppendPolyData::New(); this->allWallsTriangle = vtkTriangleFilter::New(); this->allWallsSorted = vtkDepthSortPolyData::New(); this->allWallsSorted->SetDirectionToSpecifiedVector(); this->allWallsSorted->SetVector(0.0, 0.0, -1.0); this->allWallsSorted->SetDepthSortModeToBoundsCenter(); this->allWallsStripped = vtkStripper::New(); this->surface = NULL; this->surfaceNormals = vtkPolyDataNormals::New(); this->surfaceTriangle = vtkTriangleFilter::New(); this->surfaceSorted = vtkDepthSortPolyData::New(); this->surfaceSorted->SetDirectionToSpecifiedVector(); this->surfaceSorted->SetDepthSortModeToBoundsCenter(); this->surfaceSorted->SetVector(0.0, 0.0, -1.0); this->luTable = vtkLookupTable::New(); this->luTable->SetHueRange(0.93,0.0); this->luTable->SetValueRange(1.0,1.0); this->luTable->SetSaturationRange(1.0,1.0); this->luTable->Build(); this->title = _("No file open"); } void lxData::Clear() { this->shots.clear(); this->stations.clear(); this->surveys.clear(); if (this->scrapWalls != NULL) { this->scrapWalls->Delete(); this->scrapWalls = NULL; } if (this->lrudWalls != NULL) { this->lrudWalls->Delete(); this->lrudWalls = NULL; } if (this->surface != NULL) { this->surface->Delete(); this->surface = NULL; } if (this->m_centerline != NULL) { this->m_centerline->Delete(); this->m_centerline = NULL; } this->m_textureSurface.Clear(); } void lxDataTexture::Clear() { lxImageRGBFree(this->image); this->ClearTexImages(); } lxDataTexture::~lxDataTexture() { this->Clear(); } lxData::~lxData() { this->Clear(); this->scrapWallsNormals->Delete(); this->allWallsStripped->Delete(); this->allWallsSorted->Delete(); this->allWallsTriangle->Delete(); this->allWalls->Delete(); this->surfaceTriangle->Delete(); this->surfaceSorted->Delete(); this->surfaceNormals->Delete(); this->luTable->Delete(); } bool lxDataTexture::InitCalibInverse(double idx, double idy, double ixx, double ixy, double iyx, double iyy) { #define invmen (iyy*ixx - ixy*iyx) if (invmen == 0.0) return false; this->xx = iyy / invmen; this->xy = -ixy / invmen; this->yx = -iyx / invmen; this->yy = ixx / invmen; this->dx = -1.0 * (this->xx * idx + this->xy * idy); this->dy = -1.0 * (this->yx * idx + this->yy * idy); return true; } bool lxDataTexture::InitCalibNormal(double idx, double idy, double ixx, double ixy, double iyx, double iyy) { this->dx = idx; this->dy = idy; this->xx = ixx; this->xy = ixy; this->yx = iyx; this->yy = iyy; return true; } void lxDataTexture::ClearTexImages() { #define lxDataTextureClear(i) \ if (this->i != NULL) { \ delete [] this->i; \ this->i = NULL; \ } lxDataTextureClear(texS); lxDataTextureClear(texSbw); lxDataTextureClear(texO); lxDataTextureClear(texObw); } bool lxDataTexture::SetImage(lxImageRGB img) { this->Clear(); this->image = img; if (this->image.data == NULL) return false; else return true; } void lxDataTexture::CreateTexImages(int sizeS, int sizeO) { this->ClearTexImages(); if (this->image.data == NULL) return; unsigned char * psrc, * pdst; long pidx, pidn; this->iw = double(this->image.width); this->ih = double(this->image.height); // resize the image int newSize = this->image.width; if (this->image.height > this->image.width) newSize = this->image.height; while (sizeS >= (2 * newSize)) sizeS /= 2; this->texS = new unsigned char [3 * sizeS * sizeS]; this->texSbw = new unsigned char [3 * sizeS * sizeS]; gluScaleImage(GL_RGB, this->image.width, this->image.height, GL_UNSIGNED_BYTE, this->image.data, sizeS, sizeS, GL_UNSIGNED_BYTE, this->texS); pidn = 3 * sizeS * sizeS; for(pidx = 0, psrc = this->texS, pdst = this->texSbw; pidx < pidn; pidx += 3, psrc += 3, pdst += 3) { pdst[2] = pdst[1] = pdst[0] = (unsigned char) (0.2989*double(psrc[0]) + 0.5870*double(psrc[1]) + 0.1140*double(psrc[2])); } this->texSizeS = sizeS; while (sizeO >= (2 * newSize)) sizeO /= 2; this->texO = new unsigned char [3 * sizeO * sizeO]; this->texObw = new unsigned char [3 * sizeO * sizeO]; gluScaleImage(GL_RGB, this->image.width, this->image.height, GL_UNSIGNED_BYTE, this->image.data, sizeO, sizeO, GL_UNSIGNED_BYTE, this->texO); pidn = 3 * sizeO * sizeO; for(pidx = 0, psrc = this->texO, pdst = this->texObw; pidx < pidn; pidx += 3, psrc += 3, pdst += 3) { pdst[2] = pdst[1] = pdst[0] = (unsigned char) (0.2989*double(psrc[0]) + 0.5870*double(psrc[1]) + 0.1140*double(psrc[2])); } this->texSizeO = sizeO; } struct lxDataRebuildStationStruct { lxFileStation * m_pst; size_t m_pos; }; void lxData::Rebuild() { wxString inpln, flags, filename; wxUint32 id1, id2, nid, lnNum, scrapWallsNpt, currentXpt = 0, surfaceNpt; wxInt32 xMode; double fpos[3], norm[3]; lxLRUD lrud; lxDataStation st; lxDataShot sh; lxDataSurvey sv; bool err; this->Clear(); this->title = _T(""); this->scrapWalls = vtkPolyData::New(); this->lrudWalls = vtkPolyData::New(); this->surface = vtkPolyData::New(); this->m_centerline = vtkPolyData::New(); //vtkVoidArray * cldata_array = vtkVoidArray::New(); vtkIntArray * cldata_array = vtkIntArray::New(); cldata_array->SetName("Temp"); err = false; lnNum = 0; xMode = -1; surfaceNpt = 0; lxVec tmpVec; vtkPoints * sWpoints = vtkPoints::New(), * lWpoints = vtkPoints::New(), * spoints = vtkPoints::New(), * cl_points = vtkPoints::New(); vtkCellArray * sWpolys = vtkCellArray::New(), * lWpolys = vtkCellArray::New(), * sWstrips = vtkCellArray::New(), * spolys = vtkCellArray::New(), * cl_cells = vtkCellArray::New(); vtkFloatArray * lWnorms = vtkFloatArray::New(); lWnorms->SetName("Normals"); // * tmpCA; std::map stationMap; std::map surveyMap; size_t st_num; lxDataRebuildStationStruct stR; lxFileSurvey_list::iterator sv_it; lxFileStation_list::iterator st_it; lxFileShot_list::iterator sh_it; lxFileSurvey_list::iterator su_it = this->m_input.m_surveys.begin(); if (su_it != this->m_input.m_surveys.end()) { this->title = wxConvUTF8.cMB2WX(this->m_input.m_surveysData.GetString(su_it->m_titlePtr)); if (this->title.Length() == 0) this->title = wxConvUTF8.cMB2WX(this->m_input.m_surveysData.GetString(su_it->m_namePtr)); } for(sv_it = this->m_input.m_surveys.begin(), st_num = 0; sv_it != this->m_input.m_surveys.end(); sv_it++, st_num++) { sv.m_id = sv_it->m_id; sv.m_name = this->m_input.m_surveysData.GetString(sv_it->m_namePtr); sv.m_title = this->m_input.m_surveysData.GetString(sv_it->m_titlePtr); sv.m_parent = sv_it->m_parent; sv.m_level = 0; sv.m_full_name = sv.m_name; this->surveys.push_back(sv); surveyMap[sv_it->m_id] = st_num; } lxDataSurvey * csv, * psv; for(st_num = 0; st_num < this->surveys.size(); st_num++) { csv = &(this->surveys[st_num]); if (surveyMap.find(csv->m_parent) == surveyMap.end()) csv->m_level = 0; else if (csv->m_parent == csv->m_id) csv->m_level = 0; else { psv = &(this->surveys[surveyMap[csv->m_parent]]); if (psv->m_full_name.size() > 0) csv->m_full_name += "."; csv->m_full_name += psv->m_full_name; csv->m_level = psv->m_level + 1; } } for(st_it = this->m_input.m_stations.begin(), st_num = 0; st_it != this->m_input.m_stations.end(); st_it++, st_num++) { st.pos.x = st_it->m_c[0]; st.pos.y = st_it->m_c[1]; st.pos.z = st_it->m_c[2]; st.m_name = this->m_input.m_stationsData.GetString(st_it->m_namePtr); st.m_comment = this->m_input.m_stationsData.GetString(st_it->m_commentPtr); st.m_temporary = (strcmp(st.m_name,".") == 0) || (strcmp(st.m_name,"-") == 0); st.m_fix = st_it->GetFlag(LXFILE_STATION_FLAG_FIXED); st.m_entrance = st_it->GetFlag(LXFILE_STATION_FLAG_ENTRANCE); st.m_surface = st_it->GetFlag(LXFILE_STATION_FLAG_SURFACE); st.m_survey_idx = surveyMap[st_it->m_surveyId]; stR.m_pos = st_num; stR.m_pst = &(*st_it); stationMap[st_it->m_id] = stR; this->stations.push_back(st); cl_points->InsertNextPoint(st_it->m_c[0], st_it->m_c[1], st_it->m_c[2]); } lxFileDbl * tmpDbl; double fc[3], tc[3], fd[4], td[4]; for(sh_it = this->m_input.m_shots.begin(); sh_it != this->m_input.m_shots.end(); sh_it++) { sh.from = stationMap[sh_it->m_from].m_pos; sh.to = stationMap[sh_it->m_to].m_pos; sh.surface = sh_it->GetFlag(LXFILE_SHOT_FLAG_SURFACE); sh.invisible = sh_it->GetFlag(LXFILE_SHOT_FLAG_NOT_VISIBLE); sh.splay = sh_it->GetFlag(LXFILE_SHOT_FLAG_SPLAY); sh.duplicate = sh_it->GetFlag(LXFILE_SHOT_FLAG_DUPLICATE); this->shots.push_back(sh); cldata_array->InsertNextValue(sh.from); //cldata_array->InsertNextVoidPointer(&(*sh_it)); cl_cells->InsertNextCell(2); cl_cells->InsertCellPoint(sh.from); cl_cells->InsertCellPoint(sh.to); if (sh_it->m_sectionType != LXFILE_SHOT_SECTION_NONE) { tmpDbl = stationMap[sh_it->m_from].m_pst->m_c; fc[0] = tmpDbl[0]; fc[1] = tmpDbl[1]; fc[2] = tmpDbl[2]; tmpDbl = stationMap[sh_it->m_to].m_pst->m_c; tc[0] = tmpDbl[0]; tc[1] = tmpDbl[1]; tc[2] = tmpDbl[2]; tmpDbl = sh_it->m_fLRUD; fd[0] = tmpDbl[0]; fd[1] = tmpDbl[1]; fd[2] = tmpDbl[2]; fd[3] = tmpDbl[3]; tmpDbl = sh_it->m_tLRUD; td[0] = tmpDbl[0]; td[1] = tmpDbl[1]; td[2] = tmpDbl[2]; td[3] = tmpDbl[3]; lrud.SetVThreshold(sh_it->m_threshold); lrud.InsertShot(fc, tc, fd, td, NULL); } } this->m_centerline->SetPoints(cl_points); this->m_centerline->SetLines(cl_cells); vtkCellData * cdt; cdt = this->m_centerline->GetCellData(); cdt->SetScalars(cldata_array); cldata_array->Delete(); cl_points->Delete(); cl_cells->Delete(); // walls scrapWallsNpt = 0; lxFileScrap_list::iterator sw_it; lxFile3Point * sw_pts; lxFile3Angle * sw_tri; for(sw_it = this->m_input.m_scraps.begin(); sw_it != this->m_input.m_scraps.end(); sw_it++) { sw_pts = (lxFile3Point *) this->m_input.m_scrapsData.GetData(sw_it->m_pointsPtr); currentXpt = scrapWallsNpt; for(id1 = 0; id1 < sw_it->m_numPoints; id1++) { sWpoints->InsertPoint(scrapWallsNpt, sw_pts[id1].m_c[0], sw_pts[id1].m_c[1], sw_pts[id1].m_c[2]); scrapWallsNpt++; } sw_tri = (lxFile3Angle *) this->m_input.m_scrapsData.GetData(sw_it->m_3AnglesPtr); for(id1 = 0; id1 < sw_it->m_num3Angles; id1++) { sWpolys->InsertNextCell(3); sWpolys->InsertCellPoint(currentXpt + sw_tri[id1].m_v[0]); sWpolys->InsertCellPoint(currentXpt + sw_tri[id1].m_v[2]); sWpolys->InsertCellPoint(currentXpt + sw_tri[id1].m_v[1]); } } this->scrapWalls->SetPoints(sWpoints); this->scrapWalls->SetPolys(sWpolys); // single surface surfaceNpt = 0; lxFileSurface_list::iterator sf_it = this->m_input.m_surfaces.begin(); lxFileDbl * sf_a; if (sf_it != this->m_input.m_surfaces.end()) { sf_a = (lxFileDbl *) this->m_input.m_surfacesData.GetData(sf_it->m_dataPtr); currentXpt = surfaceNpt; nid = 0; for(id1 = 0; id1 < sf_it->m_height; id1++) { for(id2 = 0; id2 < sf_it->m_width; id2++) { spoints->InsertPoint(surfaceNpt, sf_it->m_calib[0] + sf_it->m_calib[2] * double(id2) + sf_it->m_calib[3] * double(id1), sf_it->m_calib[1] + sf_it->m_calib[4] * double(id2) + sf_it->m_calib[5] * double(id1), sf_a[nid]); surfaceNpt++; nid++; } } wxUint32 r1, r2; for(id1 = 1; id1 < sf_it->m_height; id1++) { for(id2 = 1; id2 < sf_it->m_width; id2++) { r2 = (id1 * sf_it->m_width) + id2; r1 = r2 - sf_it->m_width; spolys->InsertNextCell(4); spolys->InsertCellPoint(currentXpt + r1 - 1); spolys->InsertCellPoint(currentXpt + r1); spolys->InsertCellPoint(currentXpt + r2); spolys->InsertCellPoint(currentXpt + r2 - 1); } } } this->surface->SetPoints(spoints); this->surface->SetPolys(spolys); // texture for first surface object lxFileSurfaceBitmap_list::iterator sfb_it = this->m_input.m_surfaceBitmaps.begin(); if ((sfb_it != this->m_input.m_surfaceBitmaps.end()) && (sfb_it->m_surfaceId == 0) && (sfb_it->m_type == LXFILE_BITMAP_JPEG)) { this->m_textureSurface.SetImage(lxRead_JPEG_file("", this->m_input.m_surfaceBitmapsData.GetTmpFile(sfb_it->m_dataPtr))); this->m_textureSurface.InitCalibInverse(sfb_it->m_calib[0], sfb_it->m_calib[1], sfb_it->m_calib[2], sfb_it->m_calib[3], sfb_it->m_calib[4], sfb_it->m_calib[5]); } // insert LRUD into walls lrud.Calculate(); long i, ni; ni = lrud.GetPointsN(); lWnorms->SetNumberOfComponents(3); for (i = 0; i < ni; i++) { lrud.GetPoint(i, fpos, norm); lWpoints->InsertPoint(i, fpos[0], fpos[1], fpos[2]); lWnorms->InsertTuple(i, norm); } ni = lrud.GetTrianglesN(); long triv[3]; for (i = 0; i < ni; i++) { lrud.GetTriangle(i, triv); lWpolys->InsertNextCell(3); lWpolys->InsertCellPoint(triv[0]); lWpolys->InsertCellPoint(triv[1]); lWpolys->InsertCellPoint(triv[2]); } this->lrudWalls->SetPoints(lWpoints); this->lrudWalls->SetPolys(lWpolys); this->lrudWalls->GetPointData()->SetNormals(lWnorms); // rescale image if too large double * bnds, x1, y1, x2, y2, x3, x4, y3, y4, tmp1, tmp2; int ix1, iy1, ix2, iy2, nsx, nsy; if ((this->surface != NULL) && (this->surface->GetNumberOfPoints() > 0) && (this->m_textureSurface.image.data != NULL)) { bnds = this->surface->GetBounds(); x1 = this->m_textureSurface.xx * bnds[0] + this->m_textureSurface.xy * bnds[2] + this->m_textureSurface.dx; x2 = this->m_textureSurface.xx * bnds[1] + this->m_textureSurface.xy * bnds[2] + this->m_textureSurface.dx; x3 = this->m_textureSurface.xx * bnds[0] + this->m_textureSurface.xy * bnds[3] + this->m_textureSurface.dx; x4 = this->m_textureSurface.xx * bnds[1] + this->m_textureSurface.xy * bnds[3] + this->m_textureSurface.dx; y1 = this->m_textureSurface.yx * bnds[0] + this->m_textureSurface.yy * bnds[2] + this->m_textureSurface.dy; y2 = this->m_textureSurface.yx * bnds[1] + this->m_textureSurface.yy * bnds[2] + this->m_textureSurface.dy; y3 = this->m_textureSurface.yx * bnds[0] + this->m_textureSurface.yy * bnds[3] + this->m_textureSurface.dy; y4 = this->m_textureSurface.yx * bnds[1] + this->m_textureSurface.yy * bnds[3] + this->m_textureSurface.dy; tmp1 = x1; tmp2 = x1; if (x2 < tmp1) tmp1 = x2; if (x2 > tmp2) tmp2 = x2; if (x3 < tmp1) tmp1 = x3; if (x3 > tmp2) tmp2 = x3; if (x4 < tmp1) tmp1 = x4; if (x4 > tmp2) tmp2 = x4; x1 = tmp1; x2 = tmp2; tmp1 = y1; tmp2 = y1; if (y2 < tmp1) tmp1 = y2; if (y2 > tmp2) tmp2 = y2; if (y3 < tmp1) tmp1 = y3; if (y3 > tmp2) tmp2 = y3; if (y4 < tmp1) tmp1 = y4; if (y4 > tmp2) tmp2 = y4; y1 = tmp1; y2 = tmp2; ix1 = int(floor(x1)) - 1; if (ix1 < 0) ix1 = 0; iy1 = int(floor(y1)) - 1; if (iy1 < 0) iy1 = 0; ix2 = int(ceil(x2)) + 1; if (ix2 > this->m_textureSurface.image.width) ix2 = this->m_textureSurface.image.width; iy2 = int(ceil(y2)) + 1; if (iy2 > this->m_textureSurface.image.height) iy2 = this->m_textureSurface.image.height; nsx = ix2 - ix1; nsy = iy2 - iy1; if ((((ix2 - ix1) < this->m_textureSurface.image.width) || ((iy2 - iy1) < this->m_textureSurface.image.height)) && (nsx > 0) && (nsy > 0)) { // skopirujeme data unsigned char * nd = (unsigned char *)malloc(3 * nsx * nsy); int rr, rs, ors, dcs; rs = 3 * nsx; dcs = 3 * ix1; ors = 3 * this->m_textureSurface.image.width; for(rr = 0; rr < nsy; rr++) { memcpy( nd + ((nsy-rr-1) * rs), this->m_textureSurface.image.data + ((this->m_textureSurface.image.height - 1 - iy1 - rr) * ors + dcs), rs); } lxImageRGBFree(this->m_textureSurface.image); this->m_textureSurface.image.data = nd; this->m_textureSurface.image.width = nsx; this->m_textureSurface.image.height = nsy; this->m_textureSurface.iw = (double) nsx; this->m_textureSurface.ih = (double) nsy; this->m_textureSurface.dx -= (double) ix1; this->m_textureSurface.dy -= (double) iy1; } } else { this->m_textureSurface.Clear(); } this->scrapWallsNormals->SetInput(this->scrapWalls); this->scrapWallsNormals->SetFeatureAngle(360.0); this->scrapWallsNormals->SetAutoOrientNormals(false); this->scrapWallsNormals->Update(); // COUNTER needed this->allWalls->RemoveAllInputs(); this->allWalls->AddInput(this->scrapWallsNormals->GetOutput()); this->allWalls->AddInput(this->lrudWalls); this->allWalls->Update(); this->allWallsTriangle->SetInput(this->allWalls->GetOutput()); this->allWallsSorted->SetInput(this->allWallsTriangle->GetOutput()); this->allWallsSorted->Update(); this->allWallsStripped->SetInput(this->allWallsTriangle->GetOutput()); this->allWallsStripped->Update(); this->surfaceNormals->SetInput(this->surface); this->surfaceNormals->SetFeatureAngle(360); this->surfaceNormals->Update(); this->surfaceTriangle->SetInput(this->surfaceNormals->GetOutput()); this->surfaceSorted->SetInput(this->surfaceTriangle->GetOutput()); this->surfaceSorted->Update(); sWpoints->Delete(); sWpolys->Delete(); sWstrips->Delete(); lWpoints->Delete(); lWpolys->Delete(); lWnorms->Delete(); spoints->Delete(); spolys->Delete(); } void lxData::ExportVTK(wxString fileName) { vtkPolyDataWriter * w = vtkPolyDataWriter::New(); w->SetFileName(fileName.mbc_str()); w->SetFileTypeToBinary(); w->SetInput(this->allWallsStripped->GetOutput()); w->Write(); w->Delete(); } therion/loch/lxData.h0000644000076400010400000000656211140457360015612 0ustar userAdministrators/** * @file lxData.h * Loch model data. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef lxData_h #define lxData_h // Standard libraries #ifndef LXDEPCHECK #include #include #include #include #include #include #include #include #include #endif //LXDEPCHECK - standart libraries #include "lxMath.h" #include "lxImgIO.h" #include "lxImgIO.h" #include "lxFile.h" struct lxDataSurvey { size_t m_id, m_parent, m_level; const char * m_name, * m_title; std::string m_full_name; }; struct lxDataStation { lxVec pos; size_t m_survey_idx; const char * m_name, * m_comment; bool m_temporary, m_entrance, m_fix; double m_screen_x, m_screen_y, m_screen_z, m_surface; lxDataStation() : m_name(NULL), m_temporary(false), m_entrance(false), m_fix(false), m_surface(false) {} }; struct lxDataTexture { double dx, dy, xx, xy, yx, yy, iw, ih; unsigned texSizeS, texSizeO; lxImageRGB image; unsigned char * texS, * texSbw, * texO, * texObw; lxDataTexture() : dx(0.0), dy(0.0), xx(1.0), xy(0.0), yx(0.0), yy(1.0), iw(1.0), ih(1.0), image(), texS(NULL), texSbw(NULL), texO(NULL), texObw(NULL) {} ~lxDataTexture(); bool SetImage(lxImageRGB img); void Clear(); void ClearTexImages(); void CreateTexImages(int sizeS, int sizeO); bool InitCalibInverse(double idx, double idy, double ixx, double ixy, double iyx, double iyy); bool InitCalibNormal(double idx, double idy, double ixx, double ixy, double iyx, double iyy); }; struct lxDataShot { unsigned long from, to; bool surface, invisible, splay, duplicate; }; typedef std::vector lxDataStationVec; typedef std::vector lxDataShotVec; typedef std::vector lxDataSurveyVec; struct lxData { lxFile m_input; lxDataStationVec stations; lxDataShotVec shots; lxDataSurveyVec surveys; wxString title; vtkPolyData * scrapWalls, * lrudWalls, * surface, * m_centerline; vtkTriangleFilter * allWallsTriangle, * surfaceTriangle; vtkDepthSortPolyData * allWallsSorted, * surfaceSorted; vtkAppendPolyData * allWalls; vtkStripper * allWallsStripped; vtkPolyDataNormals * scrapWallsNormals, * surfaceNormals; vtkLookupTable * luTable; lxDataTexture m_textureSurface; lxData(); ~lxData(); void Clear(); void Rebuild(); void InitTextures(); void ExportVTK(wxString fileName); }; #endif therion/loch/lxFile.cxx0000644000076400010400000010331312047407154016166 0ustar userAdministrators#include "lxFile.h" // Standard libraries #ifndef LXDEPCHECK #include #include #include #include #include #include #if defined LXWIN32 || defined THWIN32 #include "getline.h" #endif #endif //LXDEPCHECK - standart libraries #include "lxMath.h" #include "img.h" #if defined LXWIN32 || defined THWIN32 #define strcasecmp stricmp #endif lxFileSizeT lxFileSize::Save(lxFileBuff & ptr) { lxFileSizeT s(sizeof(uint32_t)); *((uint32_t *)(ptr)) = (uint32_t) this->m_size; lxFile::switchEndian(ptr, s); ptr += s; return s; } lxFileSizeT lxFileSize::Load(lxFileBuff & ptr) { lxFileSizeT s(sizeof(lxFileSizeT)); this->m_size = (lxFileSizeT) *((uint32_t *)(ptr)); lxFile::switchEndian((char *)(&this->m_size), s); ptr += s; return s; } lxFileSizeT lxFileDbl::Save(lxFileBuff & ptr) { lxFileSizeT s(sizeof(this->m_num)); *((double *)(ptr)) = this->m_num; lxFile::switchEndian(ptr, s); ptr += s; return s; } lxFileSizeT lxFileDbl::Load(lxFileBuff & ptr) { lxFileSizeT s(sizeof(this->m_num)); this->m_num = *((double *)(ptr)); lxFile::switchEndian((char *)(&this->m_num), s); ptr += s; return s; } lxFileDataPtr::lxFileDataPtr() { this->Clear(); } void lxFileDataPtr::Clear() { this->m_position = 0; this->m_size = 0; } lxFileSizeT lxFileDataPtr::Save(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_position.Save(ptr); s += this->m_size.Save(ptr); return s; } lxFileSizeT lxFileDataPtr::Load(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_position.Load(ptr); s += this->m_size.Load(ptr); return s; } lxFileData::lxFileData() { this->m_data = NULL; this->m_size = 0; this->m_buffSize = 0; } void lxFileData::Clear() { if (this->m_data != NULL) free(this->m_data); this->m_data = NULL; this->m_size = 0; this->m_buffSize = 0; } void lxFileData::Copy(lxFileSizeT size, const void * src) { this->Clear(); this->m_data = malloc(size); this->m_size = size; this->m_buffSize = size; memcpy(this->m_data, src, size); } const void * lxFileData::GetData(lxFileDataPtr ptr) { if (ptr.m_size <= 1) return NULL; else return (void *)(&(((char *)this->m_data)[ptr.m_position])); } FILE * lxFileData::GetTmpFile(lxFileDataPtr ptr) { FILE * rf; if (ptr.m_size <= 1) return NULL; rf = tmpfile(); //rf = fopen("TMPFILE.JPG","wb"); if (rf != NULL) { fwrite(&(((char *)this->m_data)[ptr.m_position]), 1, ptr.m_size, rf); fseek(rf, 0, SEEK_SET); //fclose(rf); //rf = fopen("TMPFILE.JPG","rb"); } return rf; } const char * lxFileData::GetString(lxFileDataPtr ptr) { if (ptr.m_size <= 1) return ""; else return &(((char *)this->m_data)[ptr.m_position]); } void lxFileData::BuffResize(lxFileSizeT size) { lxFileSizeT nsize; void * ndata; if (this->m_buffSize > 0) nsize = this->m_buffSize; else nsize = 1024; while (size >= nsize) nsize *= 2; this->m_buffSize = nsize; ndata = malloc(nsize); if (this->m_size > 0) memcpy(ndata, this->m_data, this->m_size); free(this->m_data); this->m_data = ndata; } lxFileDataPtr lxFileData::AppendStr(const char * str) { lxFileDataPtr res; lxFileSizeT strln; if (str == NULL) return res; strln = strlen(str); if (strln == 0) return res; return this->AppendData(str, strln + 1); } lxFileDataPtr lxFileData::AppendFile(const char * fnm) { lxFileDataPtr res; FILE * xf; xf = fopen(fnm, "rb"); if (xf != NULL) { fseek(xf, 0, SEEK_END); lxFileSizeT fsz = ftell(xf); fseek(xf, 0, SEEK_SET); if (fsz > 0) { char * cdata = new char [fsz]; fread((void *) cdata, 1, fsz, xf); res = this->AppendData(cdata, fsz); delete [] cdata; } fclose(xf); } return res; } lxFileDataPtr lxFileData::AppendData(const void * data, lxFileSizeT size) { lxFileDataPtr res; if ((data == NULL) || (size == 0)) return res; if (this->m_buffSize < this->m_size + size) this->BuffResize(this->m_size + size); res.m_position = this->m_size; res.m_size = size; memcpy(&(((char *)this->m_data)[this->m_size]), data, size); this->m_size += size; return res; } lxFileStation::lxFileStation() { this->m_flags = 0; } bool lxFileIsBigEndian() { unsigned long i = 1; const unsigned char * p = (const unsigned char *) &i; return (p[0] != 1); } bool lxFile::m_bigEndian(lxFileIsBigEndian()); void lxFile::switchEndian(char * data, lxFileSizeT size) { if (m_bigEndian) { char temp; lxFileSizeT index, rindex, total; total = size / 2; for (index = 0; index < total; index++) { rindex = size - index - 1; temp = data[index]; data[index] = data[rindex]; data[rindex] = temp; } } } lxFileShot::lxFileShot() { this->m_flags = 0; this->m_threshold = 60.0; this->m_sectionType = LXFILE_SHOT_SECTION_NONE; } lxFile::lxFile() { this->Clear(); } lxFile::~lxFile() { this->Clear(); } void lxFile::Clear() { this->m_surveys.clear(); this->m_surveysData.Clear(); this->m_nSurveys = 0; this->m_stations.clear(); this->m_stationsData.Clear(); this->m_nStations = 0; this->m_shots.clear(); this->m_shotsData.Clear(); this->m_scraps.clear(); this->m_scrapsData.Clear(); this->m_surfaces.clear(); this->m_surfacesData.Clear(); this->m_surfaceBitmaps.clear(); this->m_surfaceBitmapsData.Clear(); } enum { LXFILE_CHUNK_SURVEY = 1, LXFILE_CHUNK_STATION = 2, LXFILE_CHUNK_SHOT = 3, LXFILE_CHUNK_SCRAP = 4, LXFILE_CHUNK_SURFACE = 5, LXFILE_CHUNK_SURFACEBMP = 6, }; struct lxFileChunkHdr { lxFileSize m_type, m_recSize, m_recCount, m_dataSize; lxFileSizeT Save(lxFileBuff & ptr); lxFileSizeT Load(lxFileBuff & ptr); }; lxFileSizeT lxFileChunkHdr::Save(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_type.Save(ptr); s += this->m_recSize.Save(ptr); s += this->m_recCount.Save(ptr); s += this->m_dataSize.Save(ptr); return s; } lxFileSizeT lxFileChunkHdr::Load(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_type.Load(ptr); s += this->m_recSize.Load(ptr); s += this->m_recCount.Load(ptr); s += this->m_dataSize.Load(ptr); return s; } lxFileSizeT lxFile3Point::Save(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_c[0].Save(ptr); s += this->m_c[1].Save(ptr); s += this->m_c[2].Save(ptr); return s; } lxFileSizeT lxFile3Angle::Load(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_v[0].Load(ptr); s += this->m_v[1].Load(ptr); s += this->m_v[2].Load(ptr); return s; } void lxFile::ExportLOX(const char * fn) { this->m_error.clear(); this->m_file = fopen(fn,"wb"); if (this->m_file == NULL) { this->m_error = "unable to open file for output"; return; } // write data lxFileChunkHdr chunkHdr; char * tmpPtr, * chunkHdrPtr, chunkHdrBuffer [sizeof(chunkHdr)]; lxFileSizeT chunkHdrSize, tmpSize; bool writeErr; writeErr = false; lxFileSizeT x, size; #define lxFileExportItem(expID, expClass, expRecs, expData) \ size = this->expRecs.size(); \ if ((!writeErr) && (size > 0)) { \ char * tmpData = new char [size * sizeof(expClass)]; \ tmpPtr = tmpData; tmpSize = 0; \ expClass##_list::iterator tmpIter = this->expRecs.begin(); \ for (x = 0; x < size; x++) { \ tmpSize += tmpIter->Save(tmpPtr); \ tmpIter++; \ } \ chunkHdr.m_type = expID; \ chunkHdr.m_recSize = tmpSize; \ chunkHdr.m_recCount = size; \ chunkHdr.m_dataSize = this->expData.m_size; \ chunkHdrPtr = chunkHdrBuffer; \ chunkHdrSize = chunkHdr.Save(chunkHdrPtr); \ if (fwrite(&chunkHdrBuffer, chunkHdrSize, 1, this->m_file) != 1) \ writeErr = true; \ if (fwrite(tmpData, tmpSize, 1, this->m_file) != 1) \ writeErr = true; \ if (chunkHdr.m_dataSize > 0) \ if (fwrite(this->expData.m_data, chunkHdr.m_dataSize, 1, this->m_file) != 1) \ writeErr = true; \ delete [] tmpData; \ } lxFileExportItem(LXFILE_CHUNK_SURVEY, lxFileSurvey, m_surveys, m_surveysData); lxFileExportItem(LXFILE_CHUNK_STATION, lxFileStation, m_stations, m_stationsData); lxFileExportItem(LXFILE_CHUNK_SHOT, lxFileShot, m_shots, m_shotsData); lxFileExportItem(LXFILE_CHUNK_SCRAP, lxFileScrap, m_scraps, m_scrapsData); lxFileExportItem(LXFILE_CHUNK_SURFACE, lxFileSurface, m_surfaces, m_surfacesData); lxFileExportItem(LXFILE_CHUNK_SURFACEBMP, lxFileSurfaceBitmap, m_surfaceBitmaps, m_surfaceBitmapsData); /* size = this->m_surveys.size(); if ((!writeErr) && (size > 0)) { lxFileSurvey * tmpData = new lxFileSurvey [size]; lxFileSurvey_list::iterator tmpIter = this->m_surveys.begin(); for (x = 0; x < size; x++) { tmpData[x] = *tmpIter; tmpIter++; } chunkHdr.m_type = LXFILE_CHUNK_SURVEY; chunkHdr.m_recSize = sizeof(lxFileSurvey); chunkHdr.m_recCount = size; chunkHdr.m_dataSize = this->m_surveysData.m_size; if (fwrite(&chunkHdr, sizeof(chunkHdr), 1, this->m_file) != 1) writeErr = true; if (fwrite(tmpData, chunkHdr.m_recSize, size, this->m_file) != size) writeErr = true; if (chunkHdr.m_dataSize > 0) if (fwrite(this->m_surveysData.m_data, chunkHdr.m_dataSize, 1, this->m_file) != 1) writeErr = true; delete [] tmpData; } */ fclose(this->m_file); if (writeErr) this->m_error = "error writing to file."; } void lxFile::ImportLOX(const char * fn) { this->m_error.clear(); this->m_file = fopen(fn,"rb"); if (this->m_file == NULL) { this->m_error = "unable to open file for input"; return; } lxFileChunkHdr chunkHdr; lxFileSizeT i, orig_size, orig_survey_id, orig_station_id; char * tmpPtr, * chunkHdrPtr, * tmpRecsData, chunkHdrBuffer [sizeof(chunkHdr)]; lxFileSizeT chunkHdrSize; chunkHdrPtr = chunkHdrBuffer; chunkHdrSize = chunkHdr.Save(chunkHdrPtr); orig_survey_id = 0; for(lxFileSurvey_list::iterator itsurv = this->m_surveys.begin(); itsurv != this->m_surveys.end(); itsurv++) { if (orig_survey_id < itsurv->m_id) orig_survey_id = itsurv->m_id; } orig_station_id = 0; for(lxFileStation_list::iterator itstat = this->m_stations.begin(); itstat != this->m_stations.end(); itstat++) { if (orig_station_id < itstat->m_id) orig_station_id = itstat->m_id; } bool readErr = false; while ((!readErr) && (!feof(this->m_file)) && (fread(chunkHdrBuffer, chunkHdrSize, 1, this->m_file) == 1)) { chunkHdrPtr = chunkHdrBuffer; chunkHdr.Load(chunkHdrPtr); switch (chunkHdr.m_type) { /* case LXFILE_CHUNK_SURVEY: if (chunkHdr.m_recCount > 0) { orig_size = this->m_surveysData.m_size; lxFileSurvey * tmpRecs = new lxFileSurvey [chunkHdr.m_recCount]; if (fread(tmpRecs, sizeof(lxFileSurvey), chunkHdr.m_recCount, this->m_file) != chunkHdr.m_recCount) readErr = true; if ((!readErr) && (chunkHdr.m_dataSize > 0)) { void * tmpData = malloc(chunkHdr.m_dataSize); if (fread(tmpData, chunkHdr.m_dataSize, 1, this->m_file) != 1) readErr = true; else this->m_surveysData.AppendData(tmpData, chunkHdr.m_dataSize); free(tmpData); } if (!readErr) { for(i = 0; i < chunkHdr.m_recCount; i++) { tmpRecs[i].m_namePtr.m_position += orig_size; tmpRecs[i].m_titlePtr.m_position += orig_size; this->m_surveys.push_back(tmpRecs[i]); } } delete [] tmpRecs; } break; */ #define lxFileStartImportItem(impID, impClass, impData) \ case impID: \ if (chunkHdr.m_recCount > 0) { \ orig_size = this->impData.m_size; \ tmpRecsData = new char [chunkHdr.m_recSize]; \ impClass tmpRec; \ if (fread(tmpRecsData, chunkHdr.m_recSize, 1, this->m_file) != 1) \ readErr = true; \ if ((!readErr) && (chunkHdr.m_dataSize > 0)) { \ void * tmpData = malloc(chunkHdr.m_dataSize); \ if (fread(tmpData, chunkHdr.m_dataSize, 1, this->m_file) != 1) \ readErr = true; \ else \ this->impData.AppendData(tmpData, chunkHdr.m_dataSize); \ free(tmpData); \ } \ if (!readErr) { \ tmpPtr = tmpRecsData; \ for(i = 0; i < chunkHdr.m_recCount; i++) { \ tmpRec.Load(tmpPtr); #define lxFileEndImportItem() \ } \ } \ delete [] tmpRecsData; \ } \ break; lxFileStartImportItem(LXFILE_CHUNK_SURVEY, lxFileSurvey, m_surveysData) tmpRec.m_id += orig_survey_id; tmpRec.m_namePtr.m_position += orig_size; tmpRec.m_titlePtr.m_position += orig_size; this->m_surveys.push_back(tmpRec); this->m_nSurveys++; lxFileEndImportItem() lxFileStartImportItem(LXFILE_CHUNK_STATION, lxFileStation, m_stationsData) tmpRec.m_id += orig_station_id; tmpRec.m_surveyId += orig_survey_id; tmpRec.m_namePtr.m_position += orig_size; tmpRec.m_commentPtr.m_position += orig_size; this->m_stations.push_back(tmpRec); this->m_nStations++; lxFileEndImportItem() lxFileStartImportItem(LXFILE_CHUNK_SHOT, lxFileShot, m_shotsData) tmpRec.m_from += orig_station_id; tmpRec.m_to += orig_station_id; tmpRec.m_surveyId += orig_survey_id; this->m_shots.push_back(tmpRec); lxFileEndImportItem() lxFileStartImportItem(LXFILE_CHUNK_SCRAP, lxFileScrap, m_scrapsData) tmpRec.m_pointsPtr.m_position += orig_size; tmpRec.m_3AnglesPtr.m_position += orig_size; tmpRec.m_surveyId += orig_survey_id; this->m_scraps.push_back(tmpRec); lxFileEndImportItem() lxFileStartImportItem(LXFILE_CHUNK_SURFACE, lxFileSurface, m_surfacesData) tmpRec.m_dataPtr.m_position += orig_size; this->m_surfaces.push_back(tmpRec); lxFileEndImportItem() lxFileStartImportItem(LXFILE_CHUNK_SURFACEBMP, lxFileSurfaceBitmap, m_surfaceBitmapsData) tmpRec.m_dataPtr.m_position += orig_size; this->m_surfaceBitmaps.push_back(tmpRec); lxFileEndImportItem() default: readErr = true; } } fclose(this->m_file); } lxFileSizeT lxFile__SplitTokens(unsigned char * str, unsigned char ** tokens, lxFileSizeT max_tokens) { lxFileSizeT nt = 0, sl, sp; unsigned char * cc; bool inside = false; if ((str == NULL) || (max_tokens == 0)) return 0; sl = strlen((char *)str); max_tokens--; for (sp = 0, cc = str; (sp < sl) && (nt < max_tokens); sp++, cc++) { if (inside && (*cc < 33)) { *cc = 0; inside = false; nt++; } else if ((!inside) && (*cc > 32)) { inside = true; tokens[nt] = cc; } } return nt; } bool lxFile__CheckLRUD(double & du, double & dd, double & dl, double & dr, double mv, double mh) { if ((du <= 0.0) && (dd <= 0.0) && (dl <= 0.0) && (dr <= 0.0)) { return false; } else { if (mv > 0.0) { if (du < 0.0) du = mv; if (dd < 0.0) dd = mv; if (dl < 0.0) dl = mv; if (dr < 0.0) dr = mv; return true; } else { // LR if ((du < 0.0) && (dd >= 0.0)) du = dd; if ((dd < 0.0) && (du >= 0.0)) dd = du; // UD if ((dl < 0.0) && (dr >= 0.0)) dl = dr; if ((dr < 0.0) && (dl >= 0.0)) { dr = dl; if (dr > mh) dr = mh; } if (du < 0.0) { du = dd = (dl + dr) / 2.0; } if (dl < 0.0) { dl = dr = (du + dd) / 2.0; if (dr > mh) dr = mh; } return true; } } } lxFileSizeT lxFileSurvey::Save(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_id.Save(ptr); s += this->m_namePtr.Save(ptr); s += this->m_parent.Save(ptr); s += this->m_titlePtr.Save(ptr); return s; } lxFileSizeT lxFileSurvey::Load(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_id.Load(ptr); s += this->m_namePtr.Load(ptr); s += this->m_parent.Load(ptr); s += this->m_titlePtr.Load(ptr); return s; } lxFileSurvey * lxFile::NewSurvey() { lxFileSurvey tmp; tmp.m_id = this->m_nSurveys++; this->m_surveys.push_back(tmp); return &(this->m_surveys.back()); } lxFileStation * lxFile::NewStation() { lxFileStation tmp; tmp.m_id = this->m_nStations++; this->m_stations.push_back(tmp); return &(this->m_stations.back()); } lxFileShot * lxFile::NewShot() { this->m_shots.push_back(lxFileShot()); return &(this->m_shots.back()); } #define PltLrudNaN(x) {if ((x < 0.0) || (long(x*100) == 99900)) x = -999.0;} void lxFile::ImportPLT(const char * fn) { this->m_error.clear(); char * prevlocale = setlocale(LC_NUMERIC,NULL); setlocale(LC_NUMERIC,"C"); size_t lns; char * lnp; char ln[1024]; lns = 1024; lnp = &(ln[0]); bool lrudOK, lrudOKPrev = false; unsigned char * tok[16]; lxFileDbl lrud[4], lrudPrev[4]; lrudPrev[0] = lrudPrev[1] = lrudPrev[2] = lrudPrev[3] = -1.0; lxFileSizeT nt; this->m_file = fopen(fn,"r"); if (this->m_file == NULL) { this->m_error = "unable to open file for input"; return; } #define tok2num(v, n) v = atof((const char *)tok[n]); lxFileSurvey * tmpSurvey; lxFileShot * shPtr; lxFileStation * stPtr, * stPtrPrev; stPtrPrev = 0; bool hasPT = false; char * sname = new char [strlen(fn)+1]; int x, xx; xx = 0; for (x = (strlen(fn) - 1); x >= 0; x--) { if ((fn[x] == '\\') || (fn[x] == '/')) { xx = x + 1; break; } } for (x = xx; (x < int(strlen(fn))) && (strcasecmp(&(fn[x]),".PLT") != 0); x++) { sname[x - xx] = fn[x]; sname[x - xx + 1] = 0; } tmpSurvey = this->NewSurvey(); tmpSurvey->m_namePtr = this->m_surveysData.AppendStr(sname); delete [] sname; while (!feof(this->m_file)) { getline(&lnp, &lns, this->m_file); nt = lxFile__SplitTokens((unsigned char *) lnp, &(tok[0]), 16); switch (*(tok[0])) { case 'M': case 'D': if (!hasPT && (*(tok[0]) == 'D')) { *(tok[0]) = 'M'; } tok2num(lrud[0],6);PltLrudNaN(lrud[0]); tok2num(lrud[1],9);PltLrudNaN(lrud[1]); tok2num(lrud[2],7);PltLrudNaN(lrud[2]); tok2num(lrud[3],8);PltLrudNaN(lrud[3]); lrudOK = lxFile__CheckLRUD(lrud[0], lrud[1], lrud[2], lrud[3], 2.0, 5.0); if (lrudOK) { lrud[0] *= 0.3048; lrud[1] *= 0.3048; lrud[2] *= 0.3048; lrud[3] *= 0.3048; } stPtr = this->NewStation(); tok2num(stPtr->m_c[0],2); tok2num(stPtr->m_c[1],1); tok2num(stPtr->m_c[2],3); stPtr->m_c[0] *= 0.3048; stPtr->m_c[1] *= 0.3048; stPtr->m_c[2] *= 0.3048; stPtr->m_surveyId = tmpSurvey->m_id; hasPT = true; if (*(tok[0]) == 'D') { shPtr = this->NewShot(); shPtr->m_from = stPtrPrev->m_id; shPtr->m_to = stPtr->m_id; shPtr->m_fLRUD[0] = lrudPrev[0]; shPtr->m_fLRUD[1] = lrudPrev[1]; shPtr->m_fLRUD[2] = lrudPrev[2]; shPtr->m_fLRUD[3] = lrudPrev[3]; shPtr->m_tLRUD[0] = lrud[0]; shPtr->m_tLRUD[1] = lrud[1]; shPtr->m_tLRUD[2] = lrud[2]; shPtr->m_tLRUD[3] = lrud[3]; shPtr->m_surveyId = tmpSurvey->m_id; if (lrudOK && lrudOKPrev) { shPtr->m_sectionType = LXFILE_SHOT_SECTION_OVAL; } else { shPtr->m_sectionType = LXFILE_SHOT_SECTION_NONE; } } lrudPrev[0] = lrud[0]; lrudPrev[1] = lrud[1]; lrudPrev[2] = lrud[2]; lrudPrev[3] = lrud[3]; lrudOKPrev = lrudOK; stPtrPrev = stPtr; break; } } fclose(this->m_file); setlocale(LC_NUMERIC,prevlocale); } struct imp3Dpos { double x, y, z; imp3Dpos(double xx, double yy, double zz) : x(xx), y(yy), z(zz) {} }; bool operator < (const imp3Dpos & p1, const imp3Dpos & p2) { if (p1.x < p2.x) return true; if (p1.x > p2.x) return false; if (p1.y < p2.y) return true; if (p1.y > p2.y) return false; if (p1.z < p2.z) return true; return false; } void lxFile::Import3D(const char * fn) { this->m_error.clear(); img_point imgpt; img * pimg; int result; bool lrudOK, lrudOKPrev = false; lxFileDbl lrud[4], lrudPrev[4]; lrudPrev[0] = lrudPrev[1] = lrudPrev[2] = lrudPrev[3] = -1.0; pimg = img_open(fn); if (pimg == NULL) { this->m_error = "unable to open file for input"; return; } lxFileSurvey * tmpSurvey; lxFileShot * shPtr; lxFileStation * stPtr, * stPtrPrev, * stPtrLRUD, * stPtrLRUDPrev; stPtr = NULL; stPtrPrev = NULL; stPtrLRUDPrev = NULL; bool hasPT = false; char * sname = new char [strlen(fn)+1]; int x, xx; xx = 0; for (x = (strlen(fn) - 1); x >= 0; x--) { if ((fn[x] == '\\') || (fn[x] == '/')) { xx = x + 1; break; } } for (x = xx; (x < int(strlen(fn))) && (strcasecmp(&(fn[x]),".PLT") != 0); x++) { sname[x - xx] = fn[x]; sname[x - xx + 1] = 0; } tmpSurvey = this->NewSurvey(); tmpSurvey->m_namePtr = this->m_surveysData.AppendStr(sname); delete [] sname; int last_result; std::map label_map; std::map::iterator lmi; std::map pos_map; std::map::iterator pmi; // Create all stations with names // Set HAS_WALLS flag if applicable do { result = img_read_item(pimg, &imgpt); switch (result) { case img_LABEL: if (pimg->label != NULL) { stPtr = this->NewStation(); stPtr->m_c[0] = imgpt.x; stPtr->m_c[1] = imgpt.y; stPtr->m_c[2] = imgpt.z; stPtr->m_surveyId = tmpSurvey->m_id; label_map[std::string(pimg->label)] = stPtr; pos_map[imp3Dpos(imgpt.x, imgpt.y, imgpt.z)] = stPtr; } break; case img_XSECT: lmi = label_map.find(pimg->label); if (lmi != label_map.end()) { stPtr = lmi->second; stPtr->SetFlag(LXFILE_STATION_FLAG_HAS_WALLS, true); } break; case img_BAD: this->m_error = "invalid file format"; return; } } while (result != img_STOP); img_rewind(pimg); stPtr = NULL; do { result = img_read_item(pimg, &imgpt); switch (result) { case img_MOVE: case img_LINE: if ((!hasPT) && (result == img_LINE)) { result = img_MOVE; } pmi = pos_map.find(imp3Dpos(imgpt.x, imgpt.y, imgpt.z)); if (pmi != pos_map.end()) { stPtr = pmi->second; } else { stPtr = this->NewStation(); stPtr->m_c[0] = imgpt.x; stPtr->m_c[1] = imgpt.y; stPtr->m_c[2] = imgpt.z; stPtr->m_surveyId = tmpSurvey->m_id; } hasPT = true; if (result == img_LINE) { shPtr = this->NewShot(); shPtr->m_from = stPtrPrev->m_id; shPtr->m_to = stPtr->m_id; shPtr->m_surveyId = tmpSurvey->m_id; shPtr->m_sectionType = LXFILE_SHOT_SECTION_NONE; if ((pimg->flags & img_FLAG_SURFACE) != 0) { shPtr->SetFlag(LXFILE_SHOT_FLAG_SURFACE, true); } if ((pimg->flags & img_FLAG_DUPLICATE) != 0) { shPtr->SetFlag(LXFILE_SHOT_FLAG_DUPLICATE, true); } if (stPtr->GetFlag(LXFILE_STATION_FLAG_HAS_WALLS) || stPtrPrev->GetFlag(LXFILE_STATION_FLAG_HAS_WALLS)) { shPtr->SetFlag(LXFILE_SHOT_FLAG_NOT_LRUD, true); } } stPtrPrev = stPtr; last_result = result; break; case img_XSECT: lmi = label_map.find(pimg->label); if (lmi != label_map.end()) { stPtrLRUD = lmi->second; lrud[0] = pimg->l; lrud[1] = pimg->r; lrud[2] = pimg->u; lrud[3] = pimg->d; lrudOK = lxFile__CheckLRUD(lrud[0], lrud[1], lrud[2], lrud[3], 2.0, 5.0); if (lrudOK) { stPtr->SetFlag(LXFILE_STATION_FLAG_HAS_WALLS, true); } if ((stPtrLRUDPrev != NULL) && lrudOK && lrudOKPrev) { shPtr = this->NewShot(); shPtr->m_from = stPtrLRUDPrev->m_id; shPtr->m_to = stPtrLRUD->m_id; shPtr->m_fLRUD[0] = lrudPrev[0]; shPtr->m_fLRUD[1] = lrudPrev[1]; shPtr->m_fLRUD[2] = lrudPrev[2]; shPtr->m_fLRUD[3] = lrudPrev[3]; shPtr->m_tLRUD[0] = lrud[0]; shPtr->m_tLRUD[1] = lrud[1]; shPtr->m_tLRUD[2] = lrud[2]; shPtr->m_tLRUD[3] = lrud[3]; shPtr->m_surveyId = tmpSurvey->m_id; shPtr->m_sectionType = LXFILE_SHOT_SECTION_OVAL; shPtr->SetFlag(LXFILE_SHOT_FLAG_NOT_VISIBLE, true); shPtr->SetFlag(LXFILE_SHOT_FLAG_NOT_LRUD, true); } } else { stPtrLRUD = NULL; lrud[0] = lrud[1] = lrud[2] = lrud[3] = -999.0; lrudOK = false; lrud[0] = -999.0; } lrudPrev[0] = lrud[0]; lrudPrev[1] = lrud[1]; lrudPrev[2] = lrud[2]; lrudPrev[3] = lrud[3]; stPtrLRUDPrev = stPtrLRUD; lrudOKPrev = lrudOK; break; case img_XSECT_END: stPtrLRUDPrev = NULL; break; case img_BAD: this->m_error = "invalid file format"; return; } } while (result != img_STOP); img_close(pimg); } struct missingShot { lxFileSizeT f, t; double length; }; struct missingStation { lxVec position; double average, sum, count; }; void lxFile::InterpolateMissingLRUD() { if (this->m_shots.size() == 0) return; if (this->m_stations.size() == 0) return; std::map stmap; std::vector osts; std::vector stations; std::list shots; lxFileSizeT ns, i; // 0. vytvorit vector originalnych stations lxFileStation_list::iterator osti; osts.resize(this->m_stations.size()); for (osti = this->m_stations.begin(); osti != this->m_stations.end(); osti++) { osts[osti->m_id] = &(*osti); } // 1. vytvorit zoznam identickych bodov a zamer medzi nimi ns = 0; std::list::iterator shi; std::map::iterator stmi; lxFileStation * st; missingStation tst; missingShot ts; lxVec fp, tp; for (shi = this->m_shots.begin(); shi != this->m_shots.end(); shi++) { if (!(shi->GetFlag(LXFILE_SHOT_FLAG_SURFACE) || shi->GetFlag(LXFILE_SHOT_FLAG_DUPLICATE) || shi->GetFlag(LXFILE_SHOT_FLAG_NOT_VISIBLE) || shi->GetFlag(LXFILE_SHOT_FLAG_NOT_LRUD))) { // from st = osts[shi->m_from]; fp = lxVec(st->m_c[0],st->m_c[1],st->m_c[2]); stmi = stmap.find(fp); if (stmi == stmap.end()) { ts.f = ns; stmap[fp] = ts.f; tst.position = fp; stations.push_back(tst); ns++; } else { ts.f = stmi->second; } // to st = osts[shi->m_to]; tp = lxVec(st->m_c[0],st->m_c[1],st->m_c[2]); stmi = stmap.find(tp); if (stmi == stmap.end()) { ts.t = ns; stmap[tp] = ts.t; ns++; tst.position = tp; stations.push_back(tst); } else { ts.t = stmi->second; } ts.length = (tp - fp).Length(); shots.push_back(ts); } } // 2. zratat priemerne dlzky if (ns == 0) return; std::list::iterator shli; for(i = 0; i < ns; i++) { stations[i].sum = 0.0; stations[i].count = 0.0; } for(shli = shots.begin(); shli != shots.end(); shli++) { stations[shli->f].sum += shli->length; stations[shli->f].count += 1.0; stations[shli->t].sum += shli->length; stations[shli->t].count += 1.0; } for(i = 0; i < ns; i++) { stations[i].average = stations[i].sum / stations[i].count; stations[i].sum = stations[i].average; stations[i].count = 1.0; } // 3. urobit klzavy priemer for(shli = shots.begin(); shli != shots.end(); shli++) { stations[shli->f].sum += stations[shli->t].average; stations[shli->t].sum += stations[shli->f].average; stations[shli->f].count += 1.0; stations[shli->t].count += 1.0; } double avg; for(i = 0; i < ns; i++) { avg = 0.25 * stations[i].sum / stations[i].count; if (avg < 0.5) avg = 0.3048; stations[i].average = avg; } // 4. interpolovat LRUD vsade kde ho nemame a neni surface for (shi = this->m_shots.begin(); shi != this->m_shots.end(); shi++) { if (!(shi->GetFlag(LXFILE_SHOT_FLAG_SURFACE) || shi->GetFlag(LXFILE_SHOT_FLAG_DUPLICATE) || shi->GetFlag(LXFILE_SHOT_FLAG_NOT_VISIBLE) || shi->GetFlag(LXFILE_SHOT_FLAG_NOT_LRUD))) { if (shi->m_sectionType == LXFILE_SHOT_SECTION_NONE) { shi->m_sectionType = LXFILE_SHOT_SECTION_OVAL; st = osts[shi->m_from]; fp = lxVec(st->m_c[0],st->m_c[1],st->m_c[2]); i = stmap[fp]; avg = stations[i].average; shi->m_fLRUD[0] = avg; shi->m_fLRUD[1] = avg; shi->m_fLRUD[2] = avg; shi->m_fLRUD[3] = lxMin(avg, 1.5); st = osts[shi->m_to]; tp = lxVec(st->m_c[0],st->m_c[1],st->m_c[2]); i = stmap[tp]; avg = stations[i].average; shi->m_tLRUD[0] = avg; shi->m_tLRUD[1] = avg; shi->m_tLRUD[2] = avg; shi->m_tLRUD[3] = lxMin(avg, 1.5); } } } } lxFileSizeT lxFileStation::Save(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_id.Save(ptr); s += this->m_surveyId.Save(ptr); s += this->m_namePtr.Save(ptr); s += this->m_commentPtr.Save(ptr); s += this->m_flags.Save(ptr); s += this->m_c[0].Save(ptr); s += this->m_c[1].Save(ptr); s += this->m_c[2].Save(ptr); return s; } lxFileSizeT lxFileStation::Load(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_id.Load(ptr); s += this->m_surveyId.Load(ptr); s += this->m_namePtr.Load(ptr); s += this->m_commentPtr.Load(ptr); s += this->m_flags.Load(ptr); s += this->m_c[0].Load(ptr); s += this->m_c[1].Load(ptr); s += this->m_c[2].Load(ptr); return s; } void lxFileStation::SetFlag(int flag, bool value) { if (value) this->m_flags |= flag; else this->m_flags &= ~flag; } bool lxFileStation::GetFlag(int flag) { return ((this->m_flags & flag) != 0); } lxFileSizeT lxFileShot::Save(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_from.Save(ptr); s += this->m_to.Save(ptr); s += this->m_fLRUD[0].Save(ptr); s += this->m_fLRUD[1].Save(ptr); s += this->m_fLRUD[2].Save(ptr); s += this->m_fLRUD[3].Save(ptr); s += this->m_tLRUD[0].Save(ptr); s += this->m_tLRUD[1].Save(ptr); s += this->m_tLRUD[2].Save(ptr); s += this->m_tLRUD[3].Save(ptr); s += this->m_flags.Save(ptr); s += this->m_sectionType.Save(ptr); s += this->m_surveyId.Save(ptr); s += this->m_threshold.Save(ptr); return s; } lxFileSizeT lxFileShot::Load(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_from.Load(ptr); s += this->m_to.Load(ptr); s += this->m_fLRUD[0].Load(ptr); s += this->m_fLRUD[1].Load(ptr); s += this->m_fLRUD[2].Load(ptr); s += this->m_fLRUD[3].Load(ptr); s += this->m_tLRUD[0].Load(ptr); s += this->m_tLRUD[1].Load(ptr); s += this->m_tLRUD[2].Load(ptr); s += this->m_tLRUD[3].Load(ptr); s += this->m_flags.Load(ptr); s += this->m_sectionType.Load(ptr); s += this->m_surveyId.Load(ptr); s += this->m_threshold.Load(ptr); return s; } void lxFileShot::SetFlag(int flag, bool value) { if (value) this->m_flags |= flag; else this->m_flags &= ~flag; } bool lxFileShot::GetFlag(int flag) { return ((this->m_flags & flag) != 0); } lxFileSizeT lxFileScrap::Save(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_id.Save(ptr); s += this->m_surveyId.Save(ptr); s += this->m_numPoints.Save(ptr); s += this->m_pointsPtr.Save(ptr); s += this->m_num3Angles.Save(ptr); s += this->m_3AnglesPtr.Save(ptr); return s; } lxFileSizeT lxFileScrap::Load(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_id.Load(ptr); s += this->m_surveyId.Load(ptr); s += this->m_numPoints.Load(ptr); s += this->m_pointsPtr.Load(ptr); s += this->m_num3Angles.Load(ptr); s += this->m_3AnglesPtr.Load(ptr); return s; } lxFileSizeT lxFileSurface::Save(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_id.Save(ptr); s += this->m_width.Save(ptr); s += this->m_height.Save(ptr); s += this->m_dataPtr.Save(ptr); s += this->m_calib[0].Save(ptr); s += this->m_calib[1].Save(ptr); s += this->m_calib[2].Save(ptr); s += this->m_calib[3].Save(ptr); s += this->m_calib[4].Save(ptr); s += this->m_calib[5].Save(ptr); return s; } lxFileSizeT lxFileSurface::Load(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_id.Load(ptr); s += this->m_width.Load(ptr); s += this->m_height.Load(ptr); s += this->m_dataPtr.Load(ptr); s += this->m_calib[0].Load(ptr); s += this->m_calib[1].Load(ptr); s += this->m_calib[2].Load(ptr); s += this->m_calib[3].Load(ptr); s += this->m_calib[4].Load(ptr); s += this->m_calib[5].Load(ptr); return s; } lxFileSizeT lxFileSurfaceBitmap::Save(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_surfaceId.Save(ptr); s += this->m_type.Save(ptr); s += this->m_dataPtr.Save(ptr); s += this->m_calib[0].Save(ptr); s += this->m_calib[1].Save(ptr); s += this->m_calib[2].Save(ptr); s += this->m_calib[3].Save(ptr); s += this->m_calib[4].Save(ptr); s += this->m_calib[5].Save(ptr); return s; } lxFileSizeT lxFileSurfaceBitmap::Load(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_surfaceId.Load(ptr); s += this->m_type.Load(ptr); s += this->m_dataPtr.Load(ptr); s += this->m_calib[0].Load(ptr); s += this->m_calib[1].Load(ptr); s += this->m_calib[2].Load(ptr); s += this->m_calib[3].Load(ptr); s += this->m_calib[4].Load(ptr); s += this->m_calib[5].Load(ptr); return s; } bool lxFile::HasAnyWalls() { if (this->m_scraps.size() > 0) return true; std::list::iterator shi; for (shi = this->m_shots.begin(); shi != this->m_shots.end(); shi++) { if (!(shi->GetFlag(LXFILE_SHOT_FLAG_SURFACE) || shi->GetFlag(LXFILE_SHOT_FLAG_DUPLICATE) || shi->GetFlag(LXFILE_SHOT_FLAG_NOT_LRUD))) { if (shi->m_sectionType != LXFILE_SHOT_SECTION_NONE) { return true; } } } return false; } therion/loch/lxFile.h0000644000076400010400000001274611140004102015577 0ustar userAdministrators#ifndef lxFile_h #define lxFile_h // Standard libraries #ifndef LXDEPCHECK #include #include #include #endif //LXDEPCHECK - standart libraries typedef char * lxFileBuff; #ifdef THMSVC #ifndef UINT32_MAX # define UINT32_MAX (0xffffffffUL) #endif #ifndef uint32_t #if (ULONG_MAX == UINT32_MAX) || defined (S_SPLINT_S) typedef unsigned long uint32_t; # define UINT32_C(v) v ## UL # ifndef PRINTF_INT32_MODIFIER # define PRINTF_INT32_MODIFIER "l" # endif #elif (UINT_MAX == UINT32_MAX) typedef unsigned int uint32_t; # ifndef PRINTF_INT32_MODIFIER # define PRINTF_INT32_MODIFIER "" # endif # define UINT32_C(v) v ## U #elif (USHRT_MAX == UINT32_MAX) typedef unsigned short uint32_t; # define UINT32_C(v) ((unsigned short) (v)) # ifndef PRINTF_INT32_MODIFIER # define PRINTF_INT32_MODIFIER "" # endif #else #error "Platform not supported" #endif #endif #else #include #endif #define lxFileSizeT uint32_t struct lxFileSize { lxFileSizeT m_size; operator lxFileSizeT & () {return this->m_size;} lxFileSizeT & operator = (const lxFileSizeT & right) {return this->m_size = right;} lxFileSizeT Save(lxFileBuff & ptr); lxFileSizeT Load(lxFileBuff & ptr); }; struct lxFileDbl { double m_num; operator double & () {return this->m_num;} double & operator = (const double & right) {return this->m_num = right;} lxFileSizeT Save(lxFileBuff & ptr); lxFileSizeT Load(lxFileBuff & ptr); }; struct lxFileDataPtr { lxFileSize m_position, m_size; lxFileDataPtr(); void Clear(); lxFileSizeT Save(lxFileBuff & ptr); lxFileSizeT Load(lxFileBuff & ptr); }; struct lxFileData { void * m_data; lxFileSizeT m_size, m_buffSize; lxFileData(); void Clear(); void Copy(lxFileSizeT size, const void * src); void BuffResize(lxFileSizeT size); const void * GetData(lxFileDataPtr ptr); const char * GetString(lxFileDataPtr ptr); FILE * GetTmpFile(lxFileDataPtr ptr); lxFileDataPtr AppendStr(const char * str); lxFileDataPtr AppendData(const void * data, lxFileSizeT size); lxFileDataPtr AppendFile(const char * fnm); }; struct lxFile3Point { lxFileDbl m_c[3]; lxFileSizeT Save(lxFileBuff & ptr); lxFileSizeT Load(lxFileBuff & ptr); }; struct lxFile3Angle { lxFileSize m_v[3]; lxFileSizeT Save(lxFileBuff & ptr); lxFileSizeT Load(lxFileBuff & ptr); }; struct lxFileSurvey { lxFileSize m_id, m_parent; lxFileDataPtr m_namePtr, m_titlePtr; lxFileSizeT Save(lxFileBuff & ptr); lxFileSizeT Load(lxFileBuff & ptr); }; typedef std::list lxFileSurvey_list; enum { LXFILE_STATION_FLAG_SURFACE = 1, LXFILE_STATION_FLAG_ENTRANCE = 2, LXFILE_STATION_FLAG_FIXED = 4, LXFILE_STATION_FLAG_CONTINUATION = 8, LXFILE_STATION_FLAG_HAS_WALLS = 16, }; struct lxFileStation { lxFileSize m_id, m_surveyId; lxFileDataPtr m_namePtr, m_commentPtr; lxFileSize m_flags; lxFileDbl m_c[3]; lxFileSizeT Save(lxFileBuff & ptr); lxFileSizeT Load(lxFileBuff & ptr); void SetFlag(int flag, bool value); bool GetFlag(int flag); lxFileStation(); }; typedef std::list lxFileStation_list; enum { LXFILE_SHOT_FLAG_SURFACE = 1, LXFILE_SHOT_FLAG_DUPLICATE = 2, LXFILE_SHOT_FLAG_NOT_VISIBLE = 4, LXFILE_SHOT_FLAG_NOT_LRUD = 8, LXFILE_SHOT_FLAG_SPLAY = 8, }; enum { LXFILE_SHOT_SECTION_NONE, LXFILE_SHOT_SECTION_OVAL, LXFILE_SHOT_SECTION_SQUARE, LXFILE_SHOT_SECTION_DIAMOND, LXFILE_SHOT_SECTION_TUNNEL, }; struct lxFileShot { lxFileSize m_from, m_to, m_surveyId; lxFileDbl m_fLRUD[4], m_tLRUD[4]; lxFileDbl m_threshold; lxFileSize m_flags, m_sectionType; lxFileSizeT Save(lxFileBuff & ptr); lxFileSizeT Load(lxFileBuff & ptr); void SetFlag(int flag, bool value); bool GetFlag(int flag); lxFileShot(); }; typedef std::list lxFileShot_list; struct lxFileScrap { lxFileSize m_id, m_surveyId; lxFileDataPtr m_pointsPtr, m_3AnglesPtr; lxFileSize m_numPoints, m_num3Angles; lxFileSizeT Save(lxFileBuff & ptr); lxFileSizeT Load(lxFileBuff & ptr); }; typedef std::list lxFileScrap_list; struct lxFileSurface { lxFileSize m_id; lxFileSize m_width, m_height; lxFileDbl m_calib[6]; lxFileDataPtr m_dataPtr; lxFileSizeT Save(lxFileBuff & ptr); lxFileSizeT Load(lxFileBuff & ptr); }; typedef std::list lxFileSurface_list; enum { LXFILE_BITMAP_JPEG, LXFILE_BITMAP_PNG, }; struct lxFileSurfaceBitmap { lxFileSize m_surfaceId; lxFileSize m_type; lxFileDbl m_calib[6]; lxFileDataPtr m_dataPtr; lxFileSizeT Save(lxFileBuff & ptr); lxFileSizeT Load(lxFileBuff & ptr); }; typedef std::list lxFileSurfaceBitmap_list; struct lxFile { static bool m_bigEndian; lxFileSurvey_list m_surveys; lxFileData m_surveysData; lxFileSizeT m_nSurveys; lxFileStation_list m_stations; lxFileData m_stationsData; lxFileSizeT m_nStations; lxFileShot_list m_shots; lxFileData m_shotsData; lxFileScrap_list m_scraps; lxFileData m_scrapsData; lxFileSurface_list m_surfaces; lxFileData m_surfacesData; lxFileSurfaceBitmap_list m_surfaceBitmaps; lxFileData m_surfaceBitmapsData; std::string m_error; FILE * m_file; static void switchEndian(char * data, lxFileSizeT size); void ImportLOX(const char * fn); void ExportLOX(const char * fn); void Import3D(const char * fn); void ImportPLT(const char * fn); lxFile(); ~lxFile(); void Clear(); bool HasAnyWalls(); void InterpolateMissingLRUD(); lxFileSurvey * NewSurvey(); lxFileStation * NewStation(); lxFileShot * NewShot(); }; #endif therion/loch/lxFNT10x20_bdf.h0000644000076400010400001302031110537464734016702 0ustar userAdministratorsFT_Byte lxFNT10x20_bdf[] = { 83,84,65,82,84,70,79,78,84,32,50,46,49,10,67,79, 77,77,69,78,84,32,34,36,73,100,58,32,49,48,120,50, 48,46,98,100,102,44,118,32,49,46,56,55,32,50,48,48, 51,45,48,50,45,49,52,32,49,56,58,49,49,58,48,52, 43,48,48,32,109,103,107,50,53,32,69,120,112,32,109,103, 107,50,53,32,36,34,10,67,79,77,77,69,78,84,32,34, 83,101,110,100,32,98,117,103,32,114,101,112,111,114,116,115, 32,116,111,32,77,97,114,107,117,115,32,75,117,104,110,32, 60,104,116,116,112,58,47,47,119,119,119,46,99,108,46,99, 97,109,46,97,99,46,117,107,47,126,109,103,107,50,53,47, 62,34,10,70,79,78,84,32,45,77,105,115,99,45,70,105, 120,101,100,45,77,101,100,105,117,109,45,82,45,78,111,114, 109,97,108,45,45,50,48,45,50,48,48,45,55,53,45,55, 53,45,67,45,49,48,48,45,73,83,79,49,48,54,52,54, 45,49,10,83,73,90,69,32,50,48,32,55,53,32,55,53, 10,70,79,78,84,66,79,85,78,68,73,78,71,66,79,88, 32,49,48,32,50,48,32,48,32,45,52,10,83,84,65,82, 84,80,82,79,80,69,82,84,73,69,83,32,50,50,10,70, 79,78,84,78,65,77,69,95,82,69,71,73,83,84,82,89, 32,34,34,10,70,79,85,78,68,82,89,32,34,77,105,115, 99,34,10,70,65,77,73,76,89,95,78,65,77,69,32,34, 70,105,120,101,100,34,10,87,69,73,71,72,84,95,78,65, 77,69,32,34,77,101,100,105,117,109,34,10,83,76,65,78, 84,32,34,82,34,10,83,69,84,87,73,68,84,72,95,78, 65,77,69,32,34,78,111,114,109,97,108,34,10,65,68,68, 95,83,84,89,76,69,95,78,65,77,69,32,34,34,10,80, 73,88,69,76,95,83,73,90,69,32,50,48,10,80,79,73, 78,84,95,83,73,90,69,32,50,48,48,10,82,69,83,79, 76,85,84,73,79,78,95,88,32,55,53,10,82,69,83,79, 76,85,84,73,79,78,95,89,32,55,53,10,83,80,65,67, 73,78,71,32,34,67,34,10,65,86,69,82,65,71,69,95, 87,73,68,84,72,32,49,48,48,10,67,72,65,82,83,69, 84,95,82,69,71,73,83,84,82,89,32,34,73,83,79,49, 48,54,52,54,34,10,67,72,65,82,83,69,84,95,69,78, 67,79,68,73,78,71,32,34,49,34,10,68,69,70,65,85, 76,84,95,67,72,65,82,32,48,10,70,79,78,84,95,68, 69,83,67,69,78,84,32,52,10,70,79,78,84,95,65,83, 67,69,78,84,32,49,54,10,88,95,72,69,73,71,72,84, 32,56,10,67,65,80,95,72,69,73,71,72,84,32,49,51, 10,67,79,80,89,82,73,71,72,84,32,34,80,117,98,108, 105,99,32,100,111,109,97,105,110,32,102,111,110,116,46,32, 32,83,104,97,114,101,32,97,110,100,32,101,110,106,111,121, 46,34,10,95,88,77,66,68,70,69,68,95,73,78,70,79, 32,34,69,100,105,116,101,100,32,119,105,116,104,32,120,109, 98,100,102,101,100,32,52,46,53,46,34,10,69,78,68,80, 82,79,80,69,82,84,73,69,83,10,67,72,65,82,83,32, 53,48,49,51,10,83,84,65,82,84,67,72,65,82,32,99, 104,97,114,48,10,69,78,67,79,68,73,78,71,32,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,51, 56,48,10,52,48,56,48,10,52,48,56,48,10,48,48,48, 48,10,48,48,48,48,10,52,48,56,48,10,52,48,56,48, 10,52,48,56,48,10,48,48,48,48,10,48,48,48,48,10, 52,48,56,48,10,52,48,56,48,10,55,51,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,115,112,97,99,101,10,69,78,67,79,68, 73,78,71,32,51,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,101,120,99,108, 97,109,10,69,78,67,79,68,73,78,71,32,51,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,113,117,111,116,101,100,98,108,10,69,78,67, 79,68,73,78,71,32,51,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,51,48,48,10,51,51,48,48, 10,51,51,48,48,10,49,50,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,110,117, 109,98,101,114,115,105,103,110,10,69,78,67,79,68,73,78, 71,32,51,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,68,56,48,10,48,68,56, 48,10,48,68,56,48,10,51,70,67,48,10,49,66,48,48, 10,49,66,48,48,10,49,66,48,48,10,55,70,56,48,10, 51,54,48,48,10,51,54,48,48,10,51,54,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,100,111,108,108,97,114, 10,69,78,67,79,68,73,78,71,32,51,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 51,70,48,48,10,54,68,56,48,10,54,67,48,48,10,54, 67,48,48,10,54,67,48,48,10,51,70,48,48,10,48,68, 56,48,10,48,68,56,48,10,48,68,56,48,10,54,68,56, 48,10,51,70,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,112,101,114,99,101,110,116,10,69,78,67,79,68,73, 78,71,32,51,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,57,56,48,10,54,68, 56,48,10,54,70,48,48,10,51,66,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,67,48,48,10,48,67,48,48, 10,49,66,56,48,10,49,69,67,48,10,51,54,67,48,10, 51,51,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,109,112,101,114, 115,97,110,100,10,69,78,67,79,68,73,78,71,32,51,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 67,48,48,10,51,54,48,48,10,51,54,48,48,10,51,54, 48,48,10,51,67,48,48,10,49,56,48,48,10,51,56,48, 48,10,54,67,48,48,10,54,54,67,48,10,54,51,56,48, 10,54,51,48,48,10,55,55,56,48,10,51,67,67,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,113,117,111,116,101,115,105,110,103,108, 101,10,69,78,67,79,68,73,78,71,32,51,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,56,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,112,97,114,101,110,108,101,102,116,10,69,78,67, 79,68,73,78,71,32,52,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,51,48,48,10,48,54,48,48, 10,48,67,48,48,10,48,67,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,48,67,48,48,10,48,67,48,48,10,48,54, 48,48,10,48,51,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,112,97, 114,101,110,114,105,103,104,116,10,69,78,67,79,68,73,78, 71,32,52,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,48,48,48,10,49,56,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,67,48,48,10,48,67,48,48,10,49,56,48,48,10,51, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,115,116,101,114,105, 115,107,10,69,78,67,79,68,73,78,71,32,52,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,51,48,48, 10,51,51,48,48,10,49,69,48,48,10,55,70,56,48,10, 49,69,48,48,10,51,51,48,48,10,51,51,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,112,108,117,115,10,69,78,67,79,68,73,78, 71,32,52,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,55,70,56,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,99,111,109,109,97,10, 69,78,67,79,68,73,78,71,32,52,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,69,48,48,10,48,69,48,48,10,49,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,104,121,112,104,101,110,10,69,78,67,79,68,73,78,71, 32,52,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,112,101,114,105,111,100,10, 69,78,67,79,68,73,78,71,32,52,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,69,48,48, 10,48,69,48,48,10,48,69,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,115,108,97,115,104,10,69,78,67,79,68,73,78,71,32, 52,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,49,56,48,10,48,49,56,48,10, 48,51,48,48,10,48,51,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,67,48,48,10,48,67,48,48,10,49,56, 48,48,10,49,56,48,48,10,51,48,48,48,10,51,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,122,101,114,111,10,69,78,67, 79,68,73,78,71,32,52,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,51,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,51,51,48,48,10,49,69, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,111,110, 101,10,69,78,67,79,68,73,78,71,32,52,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,49,67,48,48,10,51,67,48,48,10,54,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,55,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,116,119,111,10,69,78,67,79,68,73,78,71,32, 53,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 51,48,48,10,48,69,48,48,10,49,56,48,48,10,51,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,116,104,114,101,101,10,69,78, 67,79,68,73,78,71,32,53,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,48,49,56,48, 10,48,51,48,48,10,48,69,48,48,10,48,51,48,48,10, 48,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,102, 111,117,114,10,69,78,67,79,68,73,78,71,32,53,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,49, 48,48,10,48,51,48,48,10,48,55,48,48,10,48,70,48, 48,10,49,66,48,48,10,51,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,55,70,56,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,102,105,118,101,10,69,78,67,79,68,73, 78,71,32,53,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,70,56,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,69,48, 48,10,55,51,48,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,115,105,120,10,69, 78,67,79,68,73,78,71,32,53,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,69,48,48,10,55,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,51,48,48,10,49,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 115,101,118,101,110,10,69,78,67,79,68,73,78,71,32,53, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 51,48,48,10,48,51,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,67,48,48,10,48,67,48,48,10,49,56,48, 48,10,49,56,48,48,10,51,48,48,48,10,51,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,101,105,103,104,116,10,69,78,67, 79,68,73,78,71,32,53,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,69,48,48,10,51,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,51,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,110,105, 110,101,10,69,78,67,79,68,73,78,71,32,53,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,69,48, 48,10,51,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,56,48,10, 49,68,56,48,10,48,49,56,48,10,48,49,56,48,10,50, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,99,111,108,111,110,10,69,78,67,79,68,73, 78,71,32,53,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,69,48, 48,10,48,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,69,48,48,10, 48,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,115,101,109,105,99, 111,108,111,110,10,69,78,67,79,68,73,78,71,32,53,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,69,48,48,10,48,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,69,48,48,10,48,69,48,48,10, 49,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,108,101,115,115,10,69,78,67,79,68, 73,78,71,32,54,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,49,48,48,10,48,51,48,48,10,48, 54,48,48,10,48,67,48,48,10,49,56,48,48,10,51,48, 48,48,10,54,48,48,48,10,51,48,48,48,10,49,56,48, 48,10,48,67,48,48,10,48,54,48,48,10,48,51,48,48, 10,48,49,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,101,113,117,97, 108,10,69,78,67,79,68,73,78,71,32,54,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,103,114,101,97,116,101,114,10,69,78,67,79,68, 73,78,71,32,54,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,50,48,48,48,10,51,48,48,48,10,49, 56,48,48,10,48,67,48,48,10,48,54,48,48,10,48,51, 48,48,10,48,49,56,48,10,48,51,48,48,10,48,54,48, 48,10,48,67,48,48,10,49,56,48,48,10,51,48,48,48, 10,50,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,113,117,101,115, 116,105,111,110,10,69,78,67,79,68,73,78,71,32,54,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,48,51,48,48,10,48,54,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,116,10,69,78,67,79,68,73,78, 71,32,54,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,69,48,48,10,51,51,48,48,10,54,49,56, 48,10,54,55,56,48,10,54,70,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,70,48,48,10, 54,54,48,48,10,54,48,48,48,10,51,49,56,48,10,49, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,65,10,69,78,67,79, 68,73,78,71,32,54,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,49,69,48,48,10, 51,51,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,55,70,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,66,10,69, 78,67,79,68,73,78,71,32,54,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,67,48,48,10,54,54, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,54,48,48,10,55,69,48,48,10,54,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,51,48,48,10,55,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 67,10,69,78,67,79,68,73,78,71,32,54,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,68,10,69,78,67,79,68,73,78,71,32,54,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 69,48,48,10,54,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,51,48,48,10,55,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,69,10,69,78,67,79,68,73,78,71, 32,54,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 55,69,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,70,10,69,78,67,79,68, 73,78,71,32,55,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,55,69,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,71,10,69,78, 67,79,68,73,78,71,32,55,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,55,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,56,48,10,49,69,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,72, 10,69,78,67,79,68,73,78,71,32,55,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,55,70,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,73,10,69,78,67,79,68,73,78,71,32,55,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 56,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,74,10,69,78,67,79,68,73,78,71,32, 55,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,70,67,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,51,54,48,48,10,49,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,75,10,69,78,67,79,68,73, 78,71,32,55,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,51, 48,48,10,54,51,48,48,10,54,54,48,48,10,54,54,48, 48,10,55,67,48,48,10,54,54,48,48,10,54,54,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,76,10,69,78,67, 79,68,73,78,71,32,55,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,77,10, 69,78,67,79,68,73,78,71,32,55,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,49,56,48,10,54, 49,56,48,10,55,51,56,48,10,55,51,56,48,10,55,70, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,78,10,69,78,67,79,68,73,78,71,32,55,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,49,56, 48,10,55,49,56,48,10,55,49,56,48,10,55,57,56,48, 10,55,57,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,55,56,48,10,54,55,56,48,10,54,51,56,48,10,54, 51,56,48,10,54,49,56,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,79,10,69,78,67,79,68,73,78,71,32,55, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,69,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,48,48,10,49,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,80,10,69,78,67,79,68,73,78, 71,32,56,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,69,48,48,10,54,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,51,48,48,10,55,69,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,81,10,69,78,67,79, 68,73,78,71,32,56,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,68,56,48,10,54,55,56,48,10,51,51,48, 48,10,49,70,48,48,10,48,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,82,10,69, 78,67,79,68,73,78,71,32,56,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,69,48,48,10,54,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,51,48,48,10,55,69,48,48, 10,54,54,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 83,10,69,78,67,79,68,73,78,71,32,56,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,48,48,48,10, 54,48,48,48,10,51,48,48,48,10,49,69,48,48,10,48, 51,48,48,10,48,49,56,48,10,48,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,84,10,69,78,67,79,68,73,78,71,32,56,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,85,10,69,78,67,79,68,73,78,71, 32,56,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,86,10,69,78,67,79,68, 73,78,71,32,56,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,51,51, 48,48,10,51,51,48,48,10,49,69,48,48,10,49,69,48, 48,10,49,69,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,87,10,69,78, 67,79,68,73,78,71,32,56,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,55,51,56,48,10,55,51,56,48,10,54, 49,56,48,10,54,49,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,88, 10,69,78,67,79,68,73,78,71,32,56,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,51,51,48,48,10,49, 69,48,48,10,49,69,48,48,10,48,67,48,48,10,49,69, 48,48,10,49,69,48,48,10,51,51,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,89,10,69,78,67,79,68,73,78,71,32,56,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,51,51,48, 48,10,49,69,48,48,10,49,69,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,90,10,69,78,67,79,68,73,78,71,32, 57,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,51,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 67,48,48,10,49,56,48,48,10,49,56,48,48,10,51,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,98,114,97,99,107,101,116,108, 101,102,116,10,69,78,67,79,68,73,78,71,32,57,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,70, 48,48,10,51,48,48,48,10,51,48,48,48,10,51,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,98,97,99,107,115,108,97,115,104,10,69, 78,67,79,68,73,78,71,32,57,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,49,56,48,48,10,49,56,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,49,56,48,10,48,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 98,114,97,99,107,101,116,114,105,103,104,116,10,69,78,67, 79,68,73,78,71,32,57,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,70,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,51,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,115, 99,105,105,99,105,114,99,117,109,10,69,78,67,79,68,73, 78,71,32,57,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,100,101,114, 115,99,111,114,101,10,69,78,67,79,68,73,78,71,32,57, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,67,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,103,114,97,118,101,10,69,78,67, 79,68,73,78,71,32,57,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,56,48,48,10,48,67,48,48, 10,48,54,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,10, 69,78,67,79,68,73,78,71,32,57,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,70,48,48,10,51,49,56,48,10,48,49,56, 48,10,51,70,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,69,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,98,10,69,78,67,79,68,73,78,71,32,57,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,69,48,48,10,55,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,55,51,48,48,10,54,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,99,10,69,78,67,79,68,73,78,71,32,57, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,70,48,48,10,51,49, 56,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,51,49,56,48,10,49,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,100,10,69,78,67,79,68,73,78, 71,32,49,48,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,49,68,56, 48,10,51,51,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,56,48,10, 49,68,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,101,10,69,78,67, 79,68,73,78,71,32,49,48,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 55,70,56,48,10,54,48,48,48,10,54,48,48,48,10,51, 49,56,48,10,49,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,102, 10,69,78,67,79,68,73,78,71,32,49,48,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,70,48,48, 10,49,57,56,48,10,49,57,56,48,10,49,56,48,48,10, 49,56,48,48,10,55,69,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,103,10,69,78,67,79,68,73,78,71,32,49,48, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,69,56,48,10,54,51, 56,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,51,69,48,48,10,54,48,48,48,10,51,70,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,70,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,104,10,69,78,67,79,68,73,78, 71,32,49,48,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,69,48, 48,10,55,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,105,10,69,78,67, 79,68,73,78,71,32,49,48,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,51,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,106, 10,69,78,67,79,68,73,78,71,32,49,48,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,49,56,48,10,48,49,56,48,10, 48,48,48,48,10,48,55,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,51,49,56, 48,10,51,49,56,48,10,51,49,56,48,10,49,70,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,107,10,69,78,67,79,68,73,78,71,32,49,48, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,51,48,48,10,54,54, 48,48,10,54,67,48,48,10,55,56,48,48,10,55,67,48, 48,10,54,54,48,48,10,54,51,48,48,10,54,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,108,10,69,78,67,79,68,73,78, 71,32,49,48,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,109,10,69,78,67, 79,68,73,78,71,32,49,48,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,53,66,48,48,10,55,70,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,110, 10,69,78,67,79,68,73,78,71,32,49,49,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,69,48,48,10,55,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,111,10,69,78,67,79,68,73,78,71,32,49,49, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,48,48,10,49,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,112,10,69,78,67,79,68,73,78, 71,32,49,49,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,69,48, 48,10,55,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,55,51,48,48,10, 54,69,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,113,10,69,78,67, 79,68,73,78,71,32,49,49,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,68,56,48,10,51,51,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,56,48,10,49,68,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,114, 10,69,78,67,79,68,73,78,71,32,49,49,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,70,48,48,10,51,57,56,48,10,51, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,51,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,115,10,69,78,67,79,68,73,78,71,32,49,49, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,70,48,48,10,54,49, 56,48,10,54,48,48,48,10,51,70,48,48,10,48,49,56, 48,10,48,49,56,48,10,54,49,56,48,10,51,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,116,10,69,78,67,79,68,73,78, 71,32,49,49,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,55,69,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,57,56,48,10, 48,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,10,69,78,67, 79,68,73,78,71,32,49,49,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,56,48,10,49,68,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,118, 10,69,78,67,79,68,73,78,71,32,49,49,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,51,51,48,48,10,49,69,48,48,10,49,69, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,119,10,69,78,67,79,68,73,78,71,32,49,49, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,55,70,56,48,10,51,51,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,120,10,69,78,67,79,68,73,78, 71,32,49,50,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,67,48,48, 10,48,67,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,121,10,69,78,67, 79,68,73,78,71,32,49,50,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,56,48,10,49,68,56,48,10,48,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,122, 10,69,78,67,79,68,73,78,71,32,49,50,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,70,56,48,10,48,49,56,48,10,48, 51,48,48,10,48,54,48,48,10,48,67,48,48,10,49,56, 48,48,10,51,48,48,48,10,51,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,98,114,97,99,101,108,101,102,116,10,69,78,67, 79,68,73,78,71,32,49,50,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,55,56,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,55,56,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,55,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,98, 97,114,10,69,78,67,79,68,73,78,71,32,49,50,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,98,114,97,99,101,114,105,103,104,116,10, 69,78,67,79,68,73,78,71,32,49,50,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,56,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,55,56,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,55,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,115,99,105,105,116,105,108,100,101,10,69,78,67, 79,68,73,78,71,32,49,50,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,57,56,48,10,54,68,56, 48,10,54,55,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,115, 112,97,99,101,10,69,78,67,79,68,73,78,71,32,49,54, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,101,120,99,108,97,109,100,111,119, 110,10,69,78,67,79,68,73,78,71,32,49,54,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,99,101,110,116,10,69,78,67,79,68,73,78, 71,32,49,54,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,49,69,48,48,10,51,51,48,48,10,54,49,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,49,48,48, 10,51,51,48,48,10,49,69,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,115,116,101,114,108, 105,110,103,10,69,78,67,79,68,73,78,71,32,49,54,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,70,48,48,10,49,57,56,48,10,49,57, 56,48,10,49,56,48,48,10,49,56,48,48,10,55,69,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,55,67,48,48,10,53,54,67,48,10,55,51,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,99,117,114,114,101,110,99,121,10,69, 78,67,79,68,73,78,71,32,49,54,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,56,48,56,48,10,68,68, 56,48,10,55,70,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,55,70,48,48,10,68,68,56,48, 10,56,48,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,121,101,110,10,69,78,67,79,68,73,78,71,32,49,54, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,52,48,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,51,70, 48,48,10,48,67,48,48,10,51,70,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,98,114,111,107,101,110,98,97,114, 10,69,78,67,79,68,73,78,71,32,49,54,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,115,101,99,116,105,111,110,10,69,78,67,79,68, 73,78,71,32,49,54,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,51,48,48,10,51,48,48,48,10,51,67,48,48,10,54, 54,48,48,10,51,51,48,48,10,49,57,56,48,10,48,70, 48,48,10,48,51,48,48,10,51,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,100,105,101, 114,101,115,105,115,10,69,78,67,79,68,73,78,71,32,49, 54,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,51,48,48,10,51,51,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,99,111,112,121,114,105,103,104, 116,10,69,78,67,79,68,73,78,71,32,49,54,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,69,48,48,10,51,51,48,48, 10,54,49,56,48,10,53,69,56,48,10,53,50,56,48,10, 53,48,56,48,10,53,50,56,48,10,53,69,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,111,114,100,102,101,109,105,110,105,110,101,10, 69,78,67,79,68,73,78,71,32,49,55,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,70,48,48,10, 50,49,56,48,10,48,49,56,48,10,51,70,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,69,56,48,10,48,48, 48,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,103,117,105,108,108,101,109,111,116,108,101,102,116,10, 69,78,67,79,68,73,78,71,32,49,55,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,52,56,48,10,48,68,56,48,10,49, 66,48,48,10,51,54,48,48,10,54,67,48,48,10,68,56, 48,48,10,54,67,48,48,10,51,54,48,48,10,49,66,48, 48,10,48,68,56,48,10,48,52,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,108,111,103,105,99,97,108,110,111,116,10,69,78,67, 79,68,73,78,71,32,49,55,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,104, 121,112,104,101,110,10,69,78,67,79,68,73,78,71,32,49, 55,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,114,101,103,105,115,116,101,114, 101,100,10,69,78,67,79,68,73,78,71,32,49,55,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,53,69,56,48,10,53,50,56,48, 10,53,69,56,48,10,53,52,56,48,10,53,54,56,48,10, 54,49,56,48,10,51,51,48,48,10,49,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,109,97,99,114,111,110,10,69,78,67,79, 68,73,78,71,32,49,55,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,100,101, 103,114,101,101,10,69,78,67,79,68,73,78,71,32,49,55, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,49,69,48,48,10,51,51,48,48,10,51, 51,48,48,10,49,69,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,112,108,117,115,109,105,110,117,115, 10,69,78,67,79,68,73,78,71,32,49,55,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,55,70,56,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,116,119,111,115,117,112,101,114,105,111,114,10,69, 78,67,79,68,73,78,71,32,49,55,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,67,48,48,10,51, 54,48,48,10,48,54,48,48,10,48,67,48,48,10,49,56, 48,48,10,51,48,48,48,10,51,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,116,104,114,101,101,115,117,112,101,114,105,111,114,10,69, 78,67,79,68,73,78,71,32,49,55,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,67,48,48,10,51, 54,48,48,10,48,54,48,48,10,48,67,48,48,10,48,54, 48,48,10,51,54,48,48,10,49,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,99,117,116,101,10,69,78,67,79,68,73,78,71,32, 49,56,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,54,48,48,10,48,67,48,48,10,49,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,109,117,10,69,78,67,79, 68,73,78,71,32,49,56,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,55,55, 48,48,10,55,68,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,112,97, 114,97,103,114,97,112,104,10,69,78,67,79,68,73,78,71, 32,49,56,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,70,56,48,10,55,70,56,48,10,55,68,56, 48,10,55,68,56,48,10,55,68,56,48,10,51,68,56,48, 10,48,68,56,48,10,48,68,56,48,10,48,68,56,48,10, 48,68,56,48,10,48,68,56,48,10,48,68,56,48,10,48, 68,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,112,101,114,105,111,100, 99,101,110,116,101,114,101,100,10,69,78,67,79,68,73,78, 71,32,49,56,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,69,48, 48,10,48,69,48,48,10,48,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,99,101,100,105,108, 108,97,10,69,78,67,79,68,73,78,71,32,49,56,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,54,48,48,10,51,54,48,48,10,49,67, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,111,110,101,115,117,112,101,114,105,111,114, 10,69,78,67,79,68,73,78,71,32,49,56,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,56,48,48, 10,51,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,51,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,111,114,100,109,97,115,99,117,108,105,110,101,10, 69,78,67,79,68,73,78,71,32,49,56,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,67,48,48,10, 51,54,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,51,54,48,48,10,49,67,48,48,10,48,48, 48,48,10,55,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,103,117,105,108,108,101,109,111,116,114,105,103,104,116, 10,69,78,67,79,68,73,78,71,32,49,56,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,52,56,48,48,10,54,67,48,48,10, 51,54,48,48,10,49,66,48,48,10,48,68,56,48,10,48, 54,67,48,10,48,68,56,48,10,49,66,48,48,10,51,54, 48,48,10,54,67,48,48,10,52,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,111,110,101,113,117,97,114,116,101,114,10,69,78, 67,79,68,73,78,71,32,49,56,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,50,48,48,48,10,54,48, 48,48,10,50,48,56,48,10,50,49,48,48,10,55,50,48, 48,10,48,52,48,48,10,48,57,48,48,10,49,51,48,48, 10,50,53,48,48,10,52,70,48,48,10,48,49,48,48,10, 48,49,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 111,110,101,104,97,108,102,10,69,78,67,79,68,73,78,71, 32,49,56,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,50,48,48,48,10,54,48,48,48,10,50,48,56, 48,10,50,49,48,48,10,55,50,48,48,10,48,52,48,48, 10,48,66,48,48,10,49,52,56,48,10,50,48,56,48,10, 52,49,48,48,10,48,50,48,48,10,48,55,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,116,104,114,101,101,113, 117,97,114,116,101,114,115,10,69,78,67,79,68,73,78,71, 32,49,57,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,48,48,48,10,48,56,48,48,10,51,48,56, 48,10,48,57,48,48,10,55,50,48,48,10,48,52,48,48, 10,48,57,48,48,10,49,51,48,48,10,50,53,48,48,10, 52,70,56,48,10,48,49,48,48,10,48,49,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,113,117,101,115,116,105, 111,110,100,111,119,110,10,69,78,67,79,68,73,78,71,32, 49,57,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 49,56,48,48,10,51,48,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,65,103,114,97,118,101,10, 69,78,67,79,68,73,78,71,32,49,57,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,51,48,48,48,10,49,56,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,69,48,48,10,51, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,55,70,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,65,97,99,117,116,101,10,69,78,67,79,68,73,78, 71,32,49,57,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,51,48,48,10,48, 54,48,48,10,48,67,48,48,10,48,48,48,48,10,48,67, 48,48,10,49,69,48,48,10,51,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,55,70,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,65,99,105,114,99, 117,109,102,108,101,120,10,69,78,67,79,68,73,78,71,32, 49,57,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,67,48,48,10,49,69,48, 48,10,51,51,48,48,10,48,48,48,48,10,48,67,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,55,70,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,65,116,105,108,100,101,10, 69,78,67,79,68,73,78,71,32,49,57,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,49,57,48,48,10,51,70,48,48,10,50,54,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,69,48,48,10,51, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,55,70,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,65,100,105,101,114,101,115,105,115,10,69,78,67,79, 68,73,78,71,32,49,57,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,51,51,48, 48,10,51,51,48,48,10,48,48,48,48,10,48,67,48,48, 10,49,69,48,48,10,51,51,48,48,10,51,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,55, 70,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,65,114, 105,110,103,10,69,78,67,79,68,73,78,71,32,49,57,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 49,69,48,48,10,51,51,48,48,10,51,51,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,67,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,55,70,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,65,69,10,69,78,67,79,68,73,78, 71,32,49,57,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,70,56,48,10,49,69,48,48,10,51,54, 48,48,10,51,54,48,48,10,54,54,48,48,10,54,54,48, 48,10,55,70,56,48,10,54,54,48,48,10,54,54,48,48, 10,54,54,48,48,10,54,54,48,48,10,54,54,48,48,10, 54,55,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,67,99,101,100,105, 108,108,97,10,69,78,67,79,68,73,78,71,32,49,57,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,67,48,48,10,48,54,48,48,10,51,54,48,48,10,49, 67,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,69,103,114,97,118,101,10,69,78,67, 79,68,73,78,71,32,50,48,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,51,48, 48,48,10,49,56,48,48,10,48,67,48,48,10,48,48,48, 48,10,55,70,56,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,69,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,69, 97,99,117,116,101,10,69,78,67,79,68,73,78,71,32,50, 48,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,54,48,48,10,48,67,48,48, 10,49,56,48,48,10,48,48,48,48,10,55,70,56,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,55,69,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,69,99,105,114,99,117,109,102, 108,101,120,10,69,78,67,79,68,73,78,71,32,50,48,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,67,48,48,10,49,69,48,48,10,51, 51,48,48,10,48,48,48,48,10,55,70,56,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,55,69,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,69,100,105,101,114,101,115,105,115,10, 69,78,67,79,68,73,78,71,32,50,48,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,51,51,48,48,10,51,51,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,55,69, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,73,103,114,97,118,101,10,69,78,67,79,68,73,78, 71,32,50,48,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,49,56,48,48,10,48, 67,48,48,10,48,54,48,48,10,48,48,48,48,10,51,70, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 51,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,73,97,99,117,116, 101,10,69,78,67,79,68,73,78,71,32,50,48,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,54,48,48,10,48,67,48,48,10,49,56,48, 48,10,48,48,48,48,10,51,70,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,51,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,73,99,105,114,99,117,109,102,108,101,120,10, 69,78,67,79,68,73,78,71,32,50,48,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,67,48,48,10,49,69,48,48,10,51,51,48,48,10, 48,48,48,48,10,51,70,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,51,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,73,100,105,101,114,101,115,105,115,10,69,78,67,79, 68,73,78,71,32,50,48,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,51,51,48, 48,10,51,51,48,48,10,48,48,48,48,10,51,70,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,51,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,69,116, 104,10,69,78,67,79,68,73,78,71,32,50,48,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,69,48, 48,10,54,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,70,57,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,51,48,48,10,55,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,78,116,105,108,100,101,10,69,78,67,79,68, 73,78,71,32,50,48,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,49,57,48,48, 10,51,70,48,48,10,50,54,48,48,10,48,48,48,48,10, 54,49,56,48,10,55,49,56,48,10,55,57,56,48,10,55, 57,56,48,10,54,68,56,48,10,54,68,56,48,10,54,55, 56,48,10,54,55,56,48,10,54,51,56,48,10,54,49,56, 48,10,54,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,79,103,114, 97,118,101,10,69,78,67,79,68,73,78,71,32,50,49,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,49,56,48,48,10,48,67,48,48,10,48, 54,48,48,10,48,48,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,79,97,99,117,116,101,10,69,78,67, 79,68,73,78,71,32,50,49,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,54, 48,48,10,48,67,48,48,10,49,56,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,79, 99,105,114,99,117,109,102,108,101,120,10,69,78,67,79,68, 73,78,71,32,50,49,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,67,48,48, 10,49,69,48,48,10,51,51,48,48,10,48,48,48,48,10, 49,69,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,79,116,105, 108,100,101,10,69,78,67,79,68,73,78,71,32,50,49,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,49,57,48,48,10,51,70,48,48,10,50, 54,48,48,10,48,48,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,79,100,105,101,114,101,115,105,115,10, 69,78,67,79,68,73,78,71,32,50,49,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,51,51,48,48,10,51,51,48,48,10,48,48,48,48,10, 49,69,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,109,117,108,116,105,112,108,121,10,69,78,67,79,68, 73,78,71,32,50,49,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,52, 49,48,48,10,54,51,48,48,10,51,54,48,48,10,49,67, 48,48,10,49,67,48,48,10,51,54,48,48,10,54,51,48, 48,10,52,49,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,79,115,108, 97,115,104,10,69,78,67,79,68,73,78,71,32,50,49,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,56,48,10,49, 70,48,48,10,51,51,48,48,10,54,51,56,48,10,54,51, 56,48,10,54,53,56,48,10,54,53,56,48,10,54,53,56, 48,10,54,57,56,48,10,54,57,56,48,10,54,57,56,48, 10,55,49,56,48,10,51,51,48,48,10,51,69,48,48,10, 52,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,85,103,114,97,118,101,10,69,78,67, 79,68,73,78,71,32,50,49,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,49,56, 48,48,10,48,67,48,48,10,48,54,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,85, 97,99,117,116,101,10,69,78,67,79,68,73,78,71,32,50, 49,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,54,48,48,10,48,67,48,48, 10,49,56,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,85,99,105,114,99,117,109,102, 108,101,120,10,69,78,67,79,68,73,78,71,32,50,49,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,67,48,48,10,49,69,48,48,10,51, 51,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,85,100,105,101,114,101,115,105,115,10, 69,78,67,79,68,73,78,71,32,50,50,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,51,51,48,48,10,51,51,48,48,10,48,48,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,89,97,99,117,116,101,10,69,78,67,79,68,73,78, 71,32,50,50,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,54,48,48,10,48, 67,48,48,10,49,56,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,51,51,48, 48,10,49,69,48,48,10,49,69,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,84,104,111,114,110, 10,69,78,67,79,68,73,78,71,32,50,50,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,51,70,48,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,51, 49,56,48,10,51,49,56,48,10,51,70,48,48,10,51,48, 48,48,10,51,48,48,48,10,51,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,103,101,114,109,97,110,100,98,108,115,10,69,78, 67,79,68,73,78,71,32,50,50,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,69,48,48,10,49,66, 48,48,10,51,49,56,48,10,51,49,56,48,10,51,51,48, 48,10,55,54,48,48,10,51,54,48,48,10,51,51,48,48, 10,51,49,56,48,10,51,49,56,48,10,51,49,56,48,10, 51,51,48,48,10,51,54,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,103,114,97,118,101,10,69,78,67,79,68,73,78,71,32, 50,50,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,56,48,48,10,48,67,48,48, 10,48,54,48,48,10,48,48,48,48,10,51,70,48,48,10, 54,49,56,48,10,48,49,56,48,10,51,70,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,69, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,97,99,117,116,101,10, 69,78,67,79,68,73,78,71,32,50,50,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,54,48,48,10,48,67,48,48,10,49,56,48,48,10,48, 48,48,48,10,51,70,48,48,10,54,49,56,48,10,48,49, 56,48,10,51,70,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,69,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,99,105,114,99,117,109,102,108,101,120,10,69,78, 67,79,68,73,78,71,32,50,50,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,49,69,48,48,10,51,51,48,48,10,48,48,48, 48,10,51,70,48,48,10,54,49,56,48,10,48,49,56,48, 10,51,70,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,51,69,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,116,105,108,100,101,10,69,78,67,79,68,73,78,71,32, 50,50,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,57,48,48,10,51,70,48,48, 10,50,54,48,48,10,48,48,48,48,10,51,70,48,48,10, 54,49,56,48,10,48,49,56,48,10,51,70,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,69, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,100,105,101,114,101,115, 105,115,10,69,78,67,79,68,73,78,71,32,50,50,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,51,48,48,10,51,51,48, 48,10,48,48,48,48,10,51,70,48,48,10,54,49,56,48, 10,48,49,56,48,10,51,70,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,69,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,114,105,110,103,10,69,78,67,79,68, 73,78,71,32,50,50,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 51,51,48,48,10,49,69,48,48,10,48,48,48,48,10,51, 70,48,48,10,54,49,56,48,10,48,49,56,48,10,51,70, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,69,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,101,10, 69,78,67,79,68,73,78,71,32,50,51,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,66,48,48,10,52,68,56,48,10,48,68, 56,48,10,48,70,48,48,10,51,67,48,48,10,54,67,48, 48,10,54,67,56,48,10,51,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,99,99,101,100,105,108,108,97,10,69,78,67,79,68, 73,78,71,32,50,51,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 70,48,48,10,51,49,56,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,51,49,56, 48,10,49,70,48,48,10,48,67,48,48,10,48,54,48,48, 10,51,54,48,48,10,49,67,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,101,103,114, 97,118,101,10,69,78,67,79,68,73,78,71,32,50,51,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,48,48,48,10,49,56,48,48,10,48,67, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,55,70,56,48,10,54,48,48,48, 10,54,48,48,48,10,51,49,56,48,10,49,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,101,97,99,117,116,101,10,69,78,67, 79,68,73,78,71,32,50,51,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,51,48, 48,10,48,54,48,48,10,48,67,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 55,70,56,48,10,54,48,48,48,10,54,48,48,48,10,51, 49,56,48,10,49,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,101, 99,105,114,99,117,109,102,108,101,120,10,69,78,67,79,68, 73,78,71,32,50,51,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 49,69,48,48,10,51,51,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,55,70, 56,48,10,54,48,48,48,10,54,48,48,48,10,51,49,56, 48,10,49,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,101,100,105, 101,114,101,115,105,115,10,69,78,67,79,68,73,78,71,32, 50,51,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,51,48,48, 10,51,51,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,55,70,56,48,10,54, 48,48,48,10,54,48,48,48,10,51,49,56,48,10,49,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,105,103,114,97,118,101,10, 69,78,67,79,68,73,78,71,32,50,51,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,48,48,48,10,49,56,48,48,10,48,67,48,48,10,48, 48,48,48,10,51,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,105,97,99,117,116,101,10,69,78,67,79,68,73,78, 71,32,50,51,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,54,48,48,10,48,67, 48,48,10,49,56,48,48,10,48,48,48,48,10,51,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,105,99,105,114,99, 117,109,102,108,101,120,10,69,78,67,79,68,73,78,71,32, 50,51,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,51,48,48,10,48,48,48,48,10,51,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,105,100,105,101,114,101,115, 105,115,10,69,78,67,79,68,73,78,71,32,50,51,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,51,48,48,10,51,51,48, 48,10,48,48,48,48,10,51,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,101,116,104,10,69,78,67,79,68,73,78, 71,32,50,52,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,52,52,48,48,10,54,67,48,48,10,51,56, 48,48,10,51,56,48,48,10,54,67,48,48,10,52,54,48, 48,10,49,70,48,48,10,51,51,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,110,116,105,108,100, 101,10,69,78,67,79,68,73,78,71,32,50,52,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,57,48,48,10,51,70,48,48,10,50,54,48,48, 10,48,48,48,48,10,54,69,48,48,10,55,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,111,103,114,97,118,101,10,69,78,67,79,68, 73,78,71,32,50,52,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,48,48,48,10, 49,56,48,48,10,48,67,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,111,97,99, 117,116,101,10,69,78,67,79,68,73,78,71,32,50,52,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,51,48,48,10,48,54,48,48,10,48,67, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,111,99,105,114,99,117,109,102,108,101, 120,10,69,78,67,79,68,73,78,71,32,50,52,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,49,69,48,48,10,51,51,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,111,116,105,108,100,101,10,69,78,67,79,68, 73,78,71,32,50,52,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,57,48,48,10, 51,70,48,48,10,50,54,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,111,100,105, 101,114,101,115,105,115,10,69,78,67,79,68,73,78,71,32, 50,52,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,51,48,48, 10,51,51,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,100,105,118,105,100,101,10, 69,78,67,79,68,73,78,71,32,50,52,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,111,115,108,97,115,104,10,69,78,67,79,68,73,78, 71,32,50,52,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,56,48,10,49,70,48, 48,10,51,51,48,48,10,54,53,56,48,10,54,53,56,48, 10,54,57,56,48,10,54,57,56,48,10,51,51,48,48,10, 51,69,48,48,10,52,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,103,114,97,118, 101,10,69,78,67,79,68,73,78,71,32,50,52,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,56,48,48,10,48,67,48,48,10,48,54,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,56,48,10,49,68,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,97,99,117,116,101,10,69,78,67,79,68, 73,78,71,32,50,53,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,51,48,48,10, 48,54,48,48,10,48,67,48,48,10,48,48,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,56, 48,10,49,68,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,99,105, 114,99,117,109,102,108,101,120,10,69,78,67,79,68,73,78, 71,32,50,53,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,49,69, 48,48,10,51,51,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,56,48,10, 49,68,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,100,105,101,114, 101,115,105,115,10,69,78,67,79,68,73,78,71,32,50,53, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,51,48,48,10,51, 51,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,56,48,10,49,68,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,121,97,99,117,116,101,10,69,78, 67,79,68,73,78,71,32,50,53,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,54, 48,48,10,48,67,48,48,10,49,56,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,51,56,48,10,49,68,56,48,10,48,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 116,104,111,114,110,10,69,78,67,79,68,73,78,71,32,50, 53,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,48,48,48,10,51, 69,48,48,10,51,51,48,48,10,51,49,56,48,10,51,49, 56,48,10,51,49,56,48,10,51,51,48,48,10,51,69,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,121,100,105,101,114,101,115,105, 115,10,69,78,67,79,68,73,78,71,32,50,53,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,51,48,48,10,51,51,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,56,48,10,49,68,56,48,10,48,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,65,109,97,99,114,111,110,10,69,78,67,79, 68,73,78,71,32,50,53,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,51,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,55,70,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,109, 97,99,114,111,110,10,69,78,67,79,68,73,78,71,32,50, 53,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,49,70,48,48,10,51, 49,56,48,10,48,49,56,48,10,51,70,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,69,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,65,98,114,101,118,101,10,69, 78,67,79,68,73,78,71,32,50,53,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 50,49,48,48,10,51,51,48,48,10,49,69,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,51,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,55,70,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,98,114,101,118,101,10,69,78,67,79,68,73,78,71, 32,50,53,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,50,49,48,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,49,70,48,48, 10,51,49,56,48,10,48,49,56,48,10,51,70,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 69,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,65,111,103,111,110,101, 107,10,69,78,67,79,68,73,78,71,32,50,54,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,49,69,48,48,10,51,51,48,48,10,51,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 55,70,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,51, 56,48,10,48,51,48,48,10,48,49,67,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,111,103,111,110,101,107,10,69,78,67,79, 68,73,78,71,32,50,54,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,70,48,48,10,51,49,56,48,10,48,49,56,48,10,51, 70,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,69,56,48,10,48,48,67,48,10,48,49,67, 48,10,48,49,56,48,10,48,48,67,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,67,97, 99,117,116,101,10,69,78,67,79,68,73,78,71,32,50,54, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,51,48,48,10,48,54,48,48,10, 48,67,48,48,10,48,48,48,48,10,49,69,48,48,10,51, 51,48,48,10,54,49,56,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,49,56,48,10,51,51,48,48,10,49,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,99,97,99,117,116,101,10,69,78, 67,79,68,73,78,71,32,50,54,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,51, 48,48,10,48,54,48,48,10,48,67,48,48,10,48,48,48, 48,10,49,70,48,48,10,51,49,56,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 51,49,56,48,10,49,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 67,99,105,114,99,117,109,102,108,101,120,10,69,78,67,79, 68,73,78,71,32,50,54,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,67,48, 48,10,49,69,48,48,10,51,51,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,99,99, 105,114,99,117,109,102,108,101,120,10,69,78,67,79,68,73, 78,71,32,50,54,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,49, 69,48,48,10,51,51,48,48,10,48,48,48,48,10,49,70, 48,48,10,51,49,56,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,51,49,56,48, 10,49,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,67,100,111,116, 97,99,99,101,110,116,10,69,78,67,79,68,73,78,71,32, 50,54,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,49,69,48,48,10,51,51,48,48, 10,54,49,56,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,99,100,111,116,97,99,99, 101,110,116,10,69,78,67,79,68,73,78,71,32,50,54,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,49,70,48,48,10,51,49,56, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,51,49,56,48,10,49,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,67,99,97,114,111,110,10,69,78,67, 79,68,73,78,71,32,50,54,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,51,51, 48,48,10,49,69,48,48,10,48,67,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,54,49,56,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,99, 99,97,114,111,110,10,69,78,67,79,68,73,78,71,32,50, 54,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,51,48,48,10,49,69,48,48,10, 48,67,48,48,10,48,48,48,48,10,49,70,48,48,10,51, 49,56,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,51,49,56,48,10,49,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,68,99,97,114,111,110,10,69, 78,67,79,68,73,78,71,32,50,55,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 51,51,48,48,10,49,69,48,48,10,48,67,48,48,10,48, 48,48,48,10,55,69,48,48,10,54,51,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,51,48,48,10,55,69,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,100,99,97,114,111,110,10,69,78,67,79,68,73,78,71, 32,50,55,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,54,54,48,48,10,51,67, 48,48,10,49,57,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,49,68,56,48, 10,51,51,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,56,48,10,49, 68,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,68,99,114,111,97,116, 10,69,78,67,79,68,73,78,71,32,50,55,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,69,48,48, 10,54,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,70,57,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,51,48,48,10,55,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,100,99,114,111,97,116,10,69,78,67,79,68,73, 78,71,32,50,55,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,55,67,48,10,48,49,56,48,10,49,68, 56,48,10,51,51,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,56,48, 10,49,68,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,69,109,97,99, 114,111,110,10,69,78,67,79,68,73,78,71,32,50,55,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,70,56,48,10,48,48,48,48,10,55, 70,56,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,69,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,101,109,97,99,114,111,110,10,69,78, 67,79,68,73,78,71,32,50,55,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,70,56,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,54,49,56,48, 10,55,70,56,48,10,54,48,48,48,10,54,48,48,48,10, 51,49,56,48,10,49,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 69,98,114,101,118,101,10,69,78,67,79,68,73,78,71,32, 50,55,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,50,49,48,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,55,70,56,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,55,69,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,101,98,114,101,118,101,10, 69,78,67,79,68,73,78,71,32,50,55,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 50,49,48,48,10,51,51,48,48,10,49,69,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,54,49, 56,48,10,55,70,56,48,10,54,48,48,48,10,54,48,48, 48,10,51,49,56,48,10,49,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,69,100,111,116,97,99,99,101,110,116,10,69,78,67, 79,68,73,78,71,32,50,55,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,55,70,56, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,55,69,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,101, 100,111,116,97,99,99,101,110,116,10,69,78,67,79,68,73, 78,71,32,50,55,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,55,70,56, 48,10,54,48,48,48,10,54,48,48,48,10,51,49,56,48, 10,49,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,69,111,103,111, 110,101,107,10,69,78,67,79,68,73,78,71,32,50,56,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,69,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,70,56,48,10, 48,51,48,48,10,48,55,48,48,10,48,54,48,48,10,48, 51,56,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,101,111,103,111,110,101,107,10,69,78, 67,79,68,73,78,71,32,50,56,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,54,49,56,48, 10,55,70,56,48,10,54,48,48,48,10,54,48,48,48,10, 51,49,56,48,10,49,70,48,48,10,48,54,48,48,10,48, 69,48,48,10,48,67,48,48,10,48,55,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 69,99,97,114,111,110,10,69,78,67,79,68,73,78,71,32, 50,56,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,51,51,48,48,10,49,69,48, 48,10,48,67,48,48,10,48,48,48,48,10,55,70,56,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,55,69,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,101,99,97,114,111,110,10, 69,78,67,79,68,73,78,71,32,50,56,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,51,48,48,10,49,69,48,48,10,48,67,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,54,49, 56,48,10,55,70,56,48,10,54,48,48,48,10,54,48,48, 48,10,51,49,56,48,10,49,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,71,99,105,114,99,117,109,102,108,101,120,10,69,78, 67,79,68,73,78,71,32,50,56,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 67,48,48,10,49,69,48,48,10,51,51,48,48,10,48,48, 48,48,10,49,69,48,48,10,51,51,48,48,10,54,49,56, 48,10,54,48,48,48,10,54,48,48,48,10,54,55,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,51,56,48,10,49,69,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 103,99,105,114,99,117,109,102,108,101,120,10,69,78,67,79, 68,73,78,71,32,50,56,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,49,69,48,48,10,51,51,48,48,10,48,48,48,48,10, 51,69,56,48,10,54,51,56,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,51,69,48,48,10,54,48, 48,48,10,51,70,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,70,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,71,98, 114,101,118,101,10,69,78,67,79,68,73,78,71,32,50,56, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,50,49,48,48,10,51,51,48,48,10, 49,69,48,48,10,48,48,48,48,10,49,69,48,48,10,51, 51,48,48,10,54,49,56,48,10,54,48,48,48,10,54,48, 48,48,10,54,55,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,56,48,10,49,69,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,103,98,114,101,118,101,10,69,78, 67,79,68,73,78,71,32,50,56,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,50,49, 48,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,51,69,56,48,10,54,51,56,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,51,69,48,48,10, 54,48,48,48,10,51,70,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,70,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 71,100,111,116,97,99,99,101,110,116,10,69,78,67,79,68, 73,78,71,32,50,56,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,48,48,48,10,54, 48,48,48,10,54,55,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,56, 48,10,49,69,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,103,100,111, 116,97,99,99,101,110,116,10,69,78,67,79,68,73,78,71, 32,50,56,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,51,69,56,48, 10,54,51,56,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,51,69,48,48,10,54,48,48,48,10,51, 70,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,70,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,71,99,111,109,109,97, 97,99,99,101,110,116,10,69,78,67,79,68,73,78,71,32, 50,57,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,54,49,56,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,55,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,56,48,10,49,69, 56,48,10,48,67,48,48,10,48,54,48,48,10,49,67,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,103,99,111,109,109,97,97, 99,99,101,110,116,10,69,78,67,79,68,73,78,71,32,50, 57,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,56,48,48,10,49,48,48,48,10,49,56,48,48,10, 49,56,48,48,10,48,48,48,48,10,51,69,56,48,10,54, 51,56,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,51,69,48,48,10,54,48,48,48,10,51,70,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,51,70,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,72,99,105,114,99,117,109,102, 108,101,120,10,69,78,67,79,68,73,78,71,32,50,57,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,67,48,48,10,49,69,48,48,10,51, 51,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,55,70,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,104,99,105,114,99,117,109,102,108,101, 120,10,69,78,67,79,68,73,78,71,32,50,57,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,67, 48,48,10,49,69,48,48,10,51,51,48,48,10,48,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,69,48,48,10,55,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,72,98,97,114,10,69,78,67,79,68,73,78, 71,32,50,57,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,70,70, 67,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,55,70,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,104,98,97,114,10, 69,78,67,79,68,73,78,71,32,50,57,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,70,56,48,48,10,54, 48,48,48,10,54,69,48,48,10,55,51,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,73,116,105,108,100,101,10,69,78,67,79,68,73,78, 71,32,50,57,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,49,57,48,48,10,51, 70,48,48,10,50,54,48,48,10,48,48,48,48,10,55,70, 56,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,105,116,105,108,100, 101,10,69,78,67,79,68,73,78,71,32,50,57,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,57,48,48,10,51,70,48,48,10,50,54,48,48, 10,48,48,48,48,10,51,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,73,109,97,99,114,111,110,10,69,78,67,79, 68,73,78,71,32,50,57,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,55,70,56,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,105,109, 97,99,114,111,110,10,69,78,67,79,68,73,78,71,32,50, 57,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,48,48,10,48,48,48,48,10,51,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,73,98,114,101,118,101,10,69, 78,67,79,68,73,78,71,32,51,48,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 50,49,48,48,10,51,51,48,48,10,49,69,48,48,10,48, 48,48,48,10,55,70,56,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,105,98,114,101,118,101,10,69,78,67,79,68,73,78,71, 32,51,48,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,50,49,48,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,51,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,73,111,103,111,110,101, 107,10,69,78,67,79,68,73,78,71,32,51,48,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,55,70,56,48,10,48,51, 48,48,10,48,55,48,48,10,48,54,48,48,10,48,51,56, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,105,111,103,111,110,101,107,10,69,78,67,79, 68,73,78,71,32,51,48,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,48,48,48,10, 51,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,55,70,56,48,10,48,49,56,48,10,48,51,56, 48,10,48,51,48,48,10,48,49,56,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,73,100, 111,116,97,99,99,101,110,116,10,69,78,67,79,68,73,78, 71,32,51,48,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,55,70,56,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,100,111,116,108,101, 115,115,105,10,69,78,67,79,68,73,78,71,32,51,48,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,73,74,10,69,78,67,79,68,73,78, 71,32,51,48,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,70,70,56,48,10,51,49,56,48,10,51,49, 56,48,10,51,49,56,48,10,51,49,56,48,10,51,49,56, 48,10,51,49,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,51,49,56,48,10, 70,68,56,48,10,48,49,56,48,10,51,49,56,48,10,49, 70,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,105,106,10,69,78, 67,79,68,73,78,71,32,51,48,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,49,56,48,10,51,49,56,48,10,48,48,48, 48,10,70,55,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,70,68,56,48,10,48,49,56,48,10,51, 49,56,48,10,51,49,56,48,10,49,70,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 74,99,105,114,99,117,109,102,108,101,120,10,69,78,67,79, 68,73,78,71,32,51,48,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,54,48, 48,10,48,70,48,48,10,49,57,56,48,10,48,48,48,48, 10,49,70,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,67,51,48,48,10,67,51,48,48,10,54,54, 48,48,10,51,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,106,99, 105,114,99,117,109,102,108,101,120,10,69,78,67,79,68,73, 78,71,32,51,48,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,54,48,48,10,48, 70,48,48,10,49,57,56,48,10,48,48,48,48,10,48,70, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,51,69,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,75,99,111,109, 109,97,97,99,99,101,110,116,10,69,78,67,79,68,73,78, 71,32,51,49,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,51, 48,48,10,54,51,48,48,10,54,54,48,48,10,54,54,48, 48,10,55,67,48,48,10,54,54,48,48,10,54,54,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,55,48,48,48,10,49,56,48,48,10,49, 56,48,48,10,55,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,107,99,111,109,109, 97,97,99,99,101,110,116,10,69,78,67,79,68,73,78,71, 32,51,49,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,51,48,48, 10,54,54,48,48,10,54,67,48,48,10,55,56,48,48,10, 55,67,48,48,10,54,54,48,48,10,54,51,48,48,10,54, 49,56,48,10,55,48,48,48,10,49,56,48,48,10,49,56, 48,48,10,55,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,107,103,114,101,101,110, 108,97,110,100,105,99,10,69,78,67,79,68,73,78,71,32, 51,49,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,54,48,48,10, 54,67,48,48,10,55,56,48,48,10,55,48,48,48,10,55, 56,48,48,10,54,67,48,48,10,54,54,48,48,10,54,51, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,76,97,99,117,116,101,10, 69,78,67,79,68,73,78,71,32,51,49,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,49,56,48,48,10,51,48,48,48,10,54,48,48,48,10, 48,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,108,97,99,117,116,101,10,69,78,67,79,68,73,78, 71,32,51,49,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,54,48,48,10,48, 67,48,48,10,49,56,48,48,10,48,48,48,48,10,51,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,76,99,111,109,109, 97,97,99,99,101,110,116,10,69,78,67,79,68,73,78,71, 32,51,49,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,55, 70,56,48,10,51,48,48,48,10,49,56,48,48,10,49,56, 48,48,10,55,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,108,99,111,109,109,97, 97,99,99,101,110,116,10,69,78,67,79,68,73,78,71,32, 51,49,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,55,70, 56,48,10,48,67,48,48,10,48,54,48,48,10,48,54,48, 48,10,49,67,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,76,99,97,114,111,110,10, 69,78,67,79,68,73,78,71,32,51,49,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,67,67,48,48,10,55,56,48,48,10,51,48,48,48,10, 48,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,108,99,97,114,111,110,10,69,78,67,79,68,73,78, 71,32,51,49,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,51,51,48,48,10,49, 69,48,48,10,48,67,48,48,10,48,48,48,48,10,51,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,76,100,111,116,10, 69,78,67,79,68,73,78,71,32,51,49,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,54,48,48,10,54,54,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,108,100,111,116,10,69,78,67,79,68,73,78,71,32, 51,50,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,57,56,48,10,49,57,56,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,70,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,76,115,108,97,115,104,10, 69,78,67,79,68,73,78,71,32,51,50,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,67,48,48,10,55,48,48,48,10,69,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,108,115,108,97,115,104,10,69,78,67,79,68,73,78, 71,32,51,50,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,70,48,48,10,51,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,78,97,99,117,116, 101,10,69,78,67,79,68,73,78,71,32,51,50,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,51,48,48,10,48,54,48,48,10,48,67,48, 48,10,54,49,56,48,10,55,49,56,48,10,55,49,56,48, 10,55,57,56,48,10,55,57,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,55,56,48,10,54,55,56,48,10,54, 51,56,48,10,54,51,56,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,110,97,99,117,116,101,10,69,78,67,79,68, 73,78,71,32,51,50,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,51,48,48,10, 48,54,48,48,10,48,67,48,48,10,48,48,48,48,10,54, 69,48,48,10,55,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,78,99,111, 109,109,97,97,99,99,101,110,116,10,69,78,67,79,68,73, 78,71,32,51,50,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,55,49,56,48,10,55, 49,56,48,10,55,57,56,48,10,55,57,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,55,56,48,10,54,55,56, 48,10,54,51,56,48,10,54,51,56,48,10,54,49,56,48, 10,54,49,56,48,10,55,48,48,48,10,49,56,48,48,10, 49,56,48,48,10,55,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,110,99,111,109, 109,97,97,99,99,101,110,116,10,69,78,67,79,68,73,78, 71,32,51,50,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,69,48, 48,10,55,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,55,48,48,48,10,49,56,48,48,10,49, 56,48,48,10,55,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,78,99,97,114,111, 110,10,69,78,67,79,68,73,78,71,32,51,50,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,51,51,48,48,10,49,69,48,48,10,48,67,48, 48,10,54,49,56,48,10,55,49,56,48,10,55,49,56,48, 10,55,57,56,48,10,55,57,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,55,56,48,10,54,55,56,48,10,54, 51,56,48,10,54,51,56,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,110,99,97,114,111,110,10,69,78,67,79,68, 73,78,71,32,51,50,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,51,48,48,10, 49,69,48,48,10,48,67,48,48,10,48,48,48,48,10,54, 69,48,48,10,55,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,110,97,112, 111,115,116,114,111,112,104,101,10,69,78,67,79,68,73,78, 71,32,51,50,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,67,48,48,48,10,67,48,48,48,10,52,48, 48,48,10,56,48,48,48,10,48,48,48,48,10,54,69,48, 48,10,55,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,69,110,103,10,69, 78,67,79,68,73,78,71,32,51,51,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,49,56,48,10,55, 49,56,48,10,55,49,56,48,10,55,57,56,48,10,55,57, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,55,56, 48,10,54,55,56,48,10,54,51,56,48,10,54,51,56,48, 10,54,49,56,48,10,54,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,51,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,101,110,103,10,69,78,67,79,68,73,78,71,32,51,51, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,69,48,48,10,55,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,51,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,79,109,97,99,114,111,110,10,69, 78,67,79,68,73,78,71,32,51,51,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,49,69,48,48,10,51, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,51,51,48,48,10,49,69,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,111,109,97,99,114,111,110,10,69,78,67,79,68,73,78, 71,32,51,51,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,48,48,48,48,10,49,69,48, 48,10,51,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,79,98,114,101,118, 101,10,69,78,67,79,68,73,78,71,32,51,51,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,50,49,48,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,49,69,48,48,10,51,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,111,98,114,101,118,101,10,69,78,67,79,68, 73,78,71,32,51,51,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,50,49,48,48,10, 51,51,48,48,10,49,69,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,79,104,117, 110,103,97,114,117,109,108,97,117,116,10,69,78,67,79,68, 73,78,71,32,51,51,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,49,57,56,48, 10,51,51,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,111,104,117, 110,103,97,114,117,109,108,97,117,116,10,69,78,67,79,68, 73,78,71,32,51,51,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,57,56,48,10,51,51,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,79,69,10, 69,78,67,79,68,73,78,71,32,51,51,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,70,56,48,10, 51,54,48,48,10,54,54,48,48,10,54,54,48,48,10,54, 54,48,48,10,54,54,48,48,10,54,55,56,48,10,54,54, 48,48,10,54,54,48,48,10,54,54,48,48,10,54,54,48, 48,10,51,54,48,48,10,49,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,111,101,10,69,78,67,79,68,73,78,71,32,51,51, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,70,48,48,10,54,68, 56,48,10,54,68,56,48,10,54,70,56,48,10,54,67,48, 48,10,54,67,48,48,10,54,68,56,48,10,51,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,82,97,99,117,116,101,10,69,78, 67,79,68,73,78,71,32,51,52,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 54,48,48,10,48,67,48,48,10,49,56,48,48,10,48,48, 48,48,10,55,69,48,48,10,54,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,51,48,48,10,55,69,48,48, 10,54,54,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 114,97,99,117,116,101,10,69,78,67,79,68,73,78,71,32, 51,52,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,51,48,48,10,48,54,48,48, 10,48,67,48,48,10,48,48,48,48,10,54,70,48,48,10, 51,57,56,48,10,51,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,51,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,82,99,111,109,109,97,97, 99,99,101,110,116,10,69,78,67,79,68,73,78,71,32,51, 52,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,69,48,48,10,54,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 51,48,48,10,55,69,48,48,10,54,54,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,55,48,48,48,10,49,56,48,48,10,49,56,48,48, 10,55,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,114,99,111,109,109,97,97,99, 99,101,110,116,10,69,78,67,79,68,73,78,71,32,51,52, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,70,48,48,10,51,57, 56,48,10,51,48,48,48,10,51,48,48,48,10,51,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,48,48,48, 10,51,56,48,48,10,48,67,48,48,10,48,67,48,48,10, 51,56,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,82,99,97,114,111,110,10,69,78, 67,79,68,73,78,71,32,51,52,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,51, 51,48,48,10,49,69,48,48,10,48,67,48,48,10,48,48, 48,48,10,55,69,48,48,10,54,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,51,48,48,10,55,69,48,48, 10,54,54,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 114,99,97,114,111,110,10,69,78,67,79,68,73,78,71,32, 51,52,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,51,48,48,10,49,69,48,48, 10,48,67,48,48,10,48,48,48,48,10,54,70,48,48,10, 51,57,56,48,10,51,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,51,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,83,97,99,117,116,101,10, 69,78,67,79,68,73,78,71,32,51,52,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,51,48,48,10,48,54,48,48,10,48,67,48,48,10, 48,48,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,48,48,48,10,51,48,48,48,10,49,69, 48,48,10,48,51,48,48,10,48,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,115,97,99,117,116,101,10,69,78,67,79,68,73,78, 71,32,51,52,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,51,48,48,10,48,54, 48,48,10,48,67,48,48,10,48,48,48,48,10,51,70,48, 48,10,54,49,56,48,10,54,48,48,48,10,51,70,48,48, 10,48,49,56,48,10,48,49,56,48,10,54,49,56,48,10, 51,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,83,99,105,114,99, 117,109,102,108,101,120,10,69,78,67,79,68,73,78,71,32, 51,52,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,67,48,48,10,49,69,48, 48,10,51,51,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,48,48,48,10, 51,48,48,48,10,49,69,48,48,10,48,51,48,48,10,48, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,115,99,105,114,99,117,109, 102,108,101,120,10,69,78,67,79,68,73,78,71,32,51,52, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,69,48,48,10,51, 51,48,48,10,48,48,48,48,10,51,70,48,48,10,54,49, 56,48,10,54,48,48,48,10,51,70,48,48,10,48,49,56, 48,10,48,49,56,48,10,54,49,56,48,10,51,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,83,99,101,100,105,108,108,97,10, 69,78,67,79,68,73,78,71,32,51,53,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,48,48,48,10,54, 48,48,48,10,51,48,48,48,10,49,69,48,48,10,48,51, 48,48,10,48,49,56,48,10,48,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,67,48,48, 10,48,54,48,48,10,48,54,48,48,10,49,67,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,115,99,101,100,105,108,108,97,10,69,78,67,79,68, 73,78,71,32,51,53,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 70,48,48,10,54,49,56,48,10,54,48,48,48,10,51,70, 48,48,10,48,49,56,48,10,48,49,56,48,10,54,49,56, 48,10,51,70,48,48,10,48,67,48,48,10,48,54,48,48, 10,48,54,48,48,10,49,67,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,83,99,97, 114,111,110,10,69,78,67,79,68,73,78,71,32,51,53,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,51,51,48,48,10,49,69,48,48,10,48, 67,48,48,10,48,48,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,56,48,10,54,48,48,48,10,51,48,48, 48,10,49,69,48,48,10,48,51,48,48,10,48,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,115,99,97,114,111,110,10,69,78,67, 79,68,73,78,71,32,51,53,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,51,48, 48,10,49,69,48,48,10,48,67,48,48,10,48,48,48,48, 10,51,70,48,48,10,54,49,56,48,10,54,48,48,48,10, 51,70,48,48,10,48,49,56,48,10,48,49,56,48,10,54, 49,56,48,10,51,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,84, 99,111,109,109,97,97,99,99,101,110,116,10,69,78,67,79, 68,73,78,71,32,51,53,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,54,48, 48,10,48,54,48,48,10,49,67,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,116,99, 111,109,109,97,97,99,99,101,110,116,10,69,78,67,79,68, 73,78,71,32,51,53,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,55, 69,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,57,56, 48,10,48,70,48,48,10,48,54,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,69,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,84,99,97, 114,111,110,10,69,78,67,79,68,73,78,71,32,51,53,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,51,51,48,48,10,49,69,48,48,10,48, 67,48,48,10,48,48,48,48,10,55,70,56,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,116,99,97,114,111,110,10,69,78,67, 79,68,73,78,71,32,51,53,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,54,54, 48,48,10,51,67,48,48,10,49,56,48,48,10,48,48,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,55,69,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 57,56,48,10,48,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,84, 98,97,114,10,69,78,67,79,68,73,78,71,32,51,53,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,51,70,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,116,98,97,114,10,69,78,67,79,68, 73,78,71,32,51,53,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,55, 69,48,48,10,49,56,48,48,10,51,67,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,57,56, 48,10,48,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,85,116,105, 108,100,101,10,69,78,67,79,68,73,78,71,32,51,54,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,49,57,48,48,10,51,70,48,48,10,50, 54,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,116,105,108,100,101,10,69,78,67, 79,68,73,78,71,32,51,54,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,57,48, 48,10,51,70,48,48,10,50,54,48,48,10,48,48,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,56,48,10,49,68,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,85, 109,97,99,114,111,110,10,69,78,67,79,68,73,78,71,32, 51,54,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,55,70,56,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,109,97,99,114,111,110, 10,69,78,67,79,68,73,78,71,32,51,54,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,56,48,10,49,68,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,85,98,114,101,118,101,10,69,78,67,79,68,73, 78,71,32,51,54,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,50,49,48,48,10, 51,51,48,48,10,49,69,48,48,10,48,48,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,98,114,101, 118,101,10,69,78,67,79,68,73,78,71,32,51,54,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,50,49,48,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,56,48,10,49,68,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,85,114,105,110,103,10,69,78,67,79,68, 73,78,71,32,51,54,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,67,48,48,10,49,50,48,48, 10,49,50,48,48,10,48,67,48,48,10,48,48,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,114,105, 110,103,10,69,78,67,79,68,73,78,71,32,51,54,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,49,50,48,48,10,49,50,48,48,10,48,67,48, 48,10,48,48,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,56,48,10,49,68,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,85,104,117,110,103,97,114,117,109,108,97, 117,116,10,69,78,67,79,68,73,78,71,32,51,54,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,49,57,56,48,10,51,51,48,48,10,48,48, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,49,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,104,117,110,103,97,114,117,109,108,97, 117,116,10,69,78,67,79,68,73,78,71,32,51,54,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,57,56,48,10,51,51,48, 48,10,48,48,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,56,48,10,49,68,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,85,111,103,111,110,101,107,10,69,78,67, 79,68,73,78,71,32,51,55,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,54,48,48,10,48,69, 48,48,10,48,67,48,48,10,48,55,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 111,103,111,110,101,107,10,69,78,67,79,68,73,78,71,32, 51,55,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,56,48,10,49,68, 56,48,10,48,51,56,48,10,48,54,48,48,10,48,54,48, 48,10,48,51,56,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,87,99,105,114,99,117,109, 102,108,101,120,10,69,78,67,79,68,73,78,71,32,51,55, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,67,48,48,10,49,69,48,48,10,51,51,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,55,51,56, 48,10,55,51,56,48,10,54,49,56,48,10,54,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,119,99,105,114,99,117,109,102,108, 101,120,10,69,78,67,79,68,73,78,71,32,51,55,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,49,69,48,48,10,51,51,48, 48,10,48,48,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,55,70,56,48,10,51,51,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,89,99,105,114,99,117,109,102,108,101,120, 10,69,78,67,79,68,73,78,71,32,51,55,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,67,48, 48,10,49,69,48,48,10,51,51,48,48,10,48,48,48,48, 10,54,49,56,48,10,51,51,48,48,10,51,51,48,48,10, 49,69,48,48,10,49,69,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,121,99,105,114,99,117,109,102,108,101,120,10,69, 78,67,79,68,73,78,71,32,51,55,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,49,69,48,48,10,51,51,48,48,10,48,48, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,51,51,56,48,10,49,68,56,48,10,48,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,49,69,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,89,100,105,101,114,101,115,105,115,10,69,78,67,79,68, 73,78,71,32,51,55,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,51,51,48,48, 10,51,51,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,51,51,48,48,10,49, 69,48,48,10,49,69,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,90,97,99, 117,116,101,10,69,78,67,79,68,73,78,71,32,51,55,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,51,48,48,10,48,54,48,48,10,48,67,48,48,10,48, 48,48,48,10,55,70,56,48,10,48,49,56,48,10,48,51, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,67,48, 48,10,49,56,48,48,10,49,56,48,48,10,51,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,122,97,99,117,116,101,10,69,78,67, 79,68,73,78,71,32,51,55,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,51,48, 48,10,48,54,48,48,10,48,67,48,48,10,48,48,48,48, 10,51,70,56,48,10,48,49,56,48,10,48,51,48,48,10, 48,54,48,48,10,48,67,48,48,10,49,56,48,48,10,51, 48,48,48,10,51,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,90, 100,111,116,97,99,99,101,110,116,10,69,78,67,79,68,73, 78,71,32,51,55,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,55,70,56,48,10,48, 49,56,48,10,48,51,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,67,48,48,10,49,56,48,48,10,49,56,48, 48,10,51,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,122,100,111,116, 97,99,99,101,110,116,10,69,78,67,79,68,73,78,71,32, 51,56,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,48,48,48,10,51,70,56,48,10, 48,49,56,48,10,48,51,48,48,10,48,54,48,48,10,48, 67,48,48,10,49,56,48,48,10,51,48,48,48,10,51,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,90,99,97,114,111,110,10, 69,78,67,79,68,73,78,71,32,51,56,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,51,51,48,48,10,49,69,48,48,10,48,67,48,48,10, 48,48,48,48,10,55,70,56,48,10,48,49,56,48,10,48, 51,48,48,10,48,54,48,48,10,48,54,48,48,10,48,67, 48,48,10,49,56,48,48,10,49,56,48,48,10,51,48,48, 48,10,54,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,122,99,97,114,111,110,10,69,78,67,79,68,73,78, 71,32,51,56,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,51,48,48,10,49,69, 48,48,10,48,67,48,48,10,48,48,48,48,10,51,70,56, 48,10,48,49,56,48,10,48,51,48,48,10,48,54,48,48, 10,48,67,48,48,10,49,56,48,48,10,51,48,48,48,10, 51,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,108,111,110,103,115, 10,69,78,67,79,68,73,78,71,32,51,56,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,70,48,48, 10,49,57,56,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,55,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,49,56,48,10,69,78,67,79,68, 73,78,71,32,51,56,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 70,56,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 69,48,48,10,55,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,55,51,48, 48,10,54,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,49,56,49,10,69,78,67,79,68,73,78,71,32,51,56, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,67,48,48,10,66,54,48,48,10,66,51,48,48,10,51, 51,48,48,10,51,51,48,48,10,51,54,48,48,10,51,69, 48,48,10,51,51,48,48,10,51,49,56,48,10,51,49,56, 48,10,51,49,56,48,10,51,51,48,48,10,51,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,49,56,50,10,69, 78,67,79,68,73,78,71,32,51,56,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,55,69,48,48,10,54,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,51,48,48,10,55,69,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,49,56,51,10,69,78,67,79,68,73,78, 71,32,51,56,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,69,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,67,48, 48,10,55,54,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,55,54,48,48,10, 54,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,49, 56,52,10,69,78,67,79,68,73,78,71,32,51,56,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,48, 48,48,10,69,48,48,48,10,69,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,69,48,48,10,54,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,51,48,48,10,55,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,49,56,53,10,69,78,67, 79,68,73,78,71,32,51,56,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,51,48,48,48, 10,51,54,48,48,10,51,66,48,48,10,51,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,51, 66,48,48,10,51,54,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,49,56,54,10,69,78,67,79,68,73,78,71,32, 51,57,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,54,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,49,56,55, 10,69,78,67,79,68,73,78,71,32,51,57,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,67,48,10,48,49,56,48,10,49,70,48,48, 10,51,51,48,48,10,54,49,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,49,56,56,10,69,78,67,79,68, 73,78,71,32,51,57,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,67,48,10,48,49,56,48,10,48,49,48,48,10,49, 70,48,48,10,51,49,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,51,49,56, 48,10,49,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,49,56,57,10,69,78,67,79,68,73,78,71,32,51,57, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,69,48,48,10,54,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,70,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,51,48,48,10,55,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,49,56,65,10,69, 78,67,79,68,73,78,71,32,51,57,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,69,48,48,10,66, 51,48,48,10,66,49,56,48,10,51,49,56,48,10,51,49, 56,48,10,51,49,56,48,10,51,49,56,48,10,51,49,56, 48,10,51,49,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,51,48,48,10,51,69,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,49,56,66,10,69,78,67,79,68,73,78, 71,32,51,57,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,70,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,49,70,56, 48,10,51,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,49,56,48,10, 49,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,49, 56,67,10,69,78,67,79,68,73,78,71,32,51,57,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,70, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,49,66,48,48,10,51,55,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,51,55,48,48,10,49,66,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,49,56,68,10,69,78,67, 79,68,73,78,71,32,51,57,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,54,48,48,10,48,51, 48,48,10,51,49,56,48,10,49,70,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,49,56,69,10,69,78,67,79,68,73,78,71,32, 51,57,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 49,70,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,49,56,70, 10,69,78,67,79,68,73,78,71,32,51,57,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,55,70,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,49,57,48,10,69,78,67,79,68, 73,78,71,32,52,48,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,70,48,48,10,51,49,56,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,51, 48,48,48,10,49,70,48,48,10,51,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,51,49,56, 48,10,49,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,49,57,49,10,69,78,67,79,68,73,78,71,32,52,48, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,55,69, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,67,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,102,108,111,114,105,110,10,69,78, 67,79,68,73,78,71,32,52,48,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,70,48,48,10,49,57, 56,48,10,49,57,56,48,10,49,56,48,48,10,49,56,48, 48,10,55,69,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,68, 56,48,48,10,55,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,57,51,10,69,78,67,79,68,73,78,71, 32,52,48,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,67,48,10,48,49, 56,48,10,49,70,48,48,10,51,51,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,55,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,56,48,10,49, 69,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,57, 52,10,69,78,67,79,68,73,78,71,32,52,48,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,51,51,48,48,10,51,51,48,48,10,49,69,48,48,10, 49,69,48,48,10,48,67,48,48,10,49,69,48,48,10,51, 51,48,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,57,53,10,69,78,67,79, 68,73,78,71,32,52,48,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 55,57,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,57,54,10,69,78,67,79,68,73,78,71,32,52, 48,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,68,56,48,10,48,55,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,57,55,10, 69,78,67,79,68,73,78,71,32,52,48,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,51,70,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,57,56,10,69,78,67,79,68,73, 78,71,32,52,48,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,51,56,48,10,54,54,67,48,10,54, 54,48,48,10,54,67,48,48,10,54,67,48,48,10,54,67, 48,48,10,55,56,48,48,10,54,67,48,48,10,54,67,48, 48,10,54,54,48,48,10,54,54,48,48,10,54,51,48,48, 10,54,51,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,57,57,10,69,78,67,79,68,73,78,71,32,52,48,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 56,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,51,48,48,10,54,54,48, 48,10,54,67,48,48,10,55,56,48,48,10,55,67,48,48, 10,54,54,48,48,10,54,51,48,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,57,65,10,69,78, 67,79,68,73,78,71,32,52,49,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,51,70,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,57,66,10,69,78,67,79,68,73,78,71, 32,52,49,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,48,48,48,10,54,54,48,48,10,51,67,48, 48,10,51,56,48,48,10,55,56,48,48,10,67,67,48,48, 10,48,67,48,48,10,49,69,48,48,10,49,69,48,48,10, 51,51,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,57, 67,10,69,78,67,79,68,73,78,71,32,52,49,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,55,70,56,48,10,51,54,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,57,68,10,69,78,67,79, 68,73,78,71,32,52,49,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,49,56,48,10,55,49,56,48, 10,55,49,56,48,10,55,57,56,48,10,55,57,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,55,56,48,10,54, 55,56,48,10,54,51,56,48,10,54,51,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,67,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,57,69,10,69,78,67,79,68,73,78,71,32,52, 49,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,69,48,48,10,55, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,57,70,10, 69,78,67,79,68,73,78,71,32,52,49,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,55,70,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,79,104,111,114,110,10,69,78,67,79,68,73,78,71, 32,52,49,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,67,67,48,10,51,54,67,48,10,54,51,56, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,51,54,48,48,10,49, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,111,104,111,114,110,10, 69,78,67,79,68,73,78,71,32,52,49,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,67,67,48,10,51,54,67,48,10,54,51, 56,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,51,54,48,48,10,49,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,65,50,10,69,78,67,79,68,73, 78,71,32,52,49,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,55,48,48,10,55,68,56,48,10,67, 68,56,48,10,67,68,56,48,10,67,68,56,48,10,67,68, 56,48,10,67,68,56,48,10,67,68,56,48,10,67,68,56, 48,10,67,68,56,48,10,67,68,56,48,10,55,57,56,48, 10,51,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,65,51,10,69,78,67,79,68,73,78,71,32,52,49,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,55,48,48,10,55,68,56, 48,10,67,68,56,48,10,67,68,56,48,10,67,68,56,48, 10,67,68,56,48,10,55,57,56,48,10,51,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,65,52,10,69,78, 67,79,68,73,78,71,32,52,50,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,69,48,48,10,66,51, 48,48,10,66,49,56,48,10,51,49,56,48,10,51,49,56, 48,10,51,49,56,48,10,51,51,48,48,10,51,69,48,48, 10,51,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,65,53,10,69,78,67,79,68,73,78,71, 32,52,50,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,56,48,48,10,54,67,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,69,48,48, 10,55,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,55,51,48,48,10,54, 69,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,65, 54,10,69,78,67,79,68,73,78,71,32,52,50,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,69,48, 48,10,54,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,51,48,48,10, 55,69,48,48,10,54,54,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,48,48, 67,48,10,48,48,67,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,65,55,10,69,78,67,79, 68,73,78,71,32,52,50,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,69,48,48,10,51,51,48,48, 10,54,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,51,48,48,10,49,69,48,48,10,51,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,65,56,10,69,78,67,79,68,73,78,71,32,52, 50,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,70,48,48,10,54, 49,56,48,10,48,49,56,48,10,51,70,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,49,56,48,10,51,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,65,57,10, 69,78,67,79,68,73,78,71,32,52,50,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 54,48,48,48,10,51,48,48,48,10,49,56,48,48,10,48, 67,48,48,10,48,54,48,48,10,48,54,48,48,10,48,67, 48,48,10,49,56,48,48,10,49,56,48,48,10,51,48,48, 48,10,54,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,65,65,10,69,78,67,79,68,73, 78,71,32,52,50,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,56,48,48,10,54,67,48,48,10,52, 52,48,48,10,54,67,48,48,10,51,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,54,48,48,10,48,51,56,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,65,66,10,69,78,67,79,68,73,78,71,32,52,50,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,55,69,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,48,70,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,51,48,48,10,49, 69,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,65,67,10,69,78, 67,79,68,73,78,71,32,52,50,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,67,67, 48,48,10,67,67,48,48,10,67,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,65,68,10,69,78,67,79,68,73,78,71, 32,52,50,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,70,48,48,10,49,57,56, 48,10,49,56,48,48,10,49,56,48,48,10,55,69,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,57,56,48,10,48, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,65, 69,10,69,78,67,79,68,73,78,71,32,52,51,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,55,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,85,104,111,114,110,10,69,78,67,79,68,73, 78,71,32,52,51,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,54,67,48,10,54,54,67,48,10,54, 55,56,48,10,54,54,48,48,10,54,54,48,48,10,54,54, 48,48,10,54,54,48,48,10,54,54,48,48,10,54,54,48, 48,10,54,54,48,48,10,54,54,48,48,10,51,67,48,48, 10,49,56,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,104,111,114, 110,10,69,78,67,79,68,73,78,71,32,52,51,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,54,67,48,10,54,54,67,48,10, 54,55,56,48,10,54,54,48,48,10,54,54,48,48,10,54, 54,48,48,10,51,69,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,66,49,10,69,78,67,79, 68,73,78,71,32,52,51,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,51,56,48,10,49,50,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,66,50,10,69,78,67,79,68,73,78,71,32,52, 51,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,54,48,48,10,54,54,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,66,51,10, 69,78,67,79,68,73,78,71,32,52,51,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,57,56,48,10, 68,57,56,48,10,68,57,56,48,10,49,57,56,48,10,48, 70,48,48,10,48,70,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,66,52,10,69,78,67,79,68,73, 78,71,32,52,51,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 49,67,48,10,48,51,48,48,10,48,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,51,55,48,48, 10,49,66,48,48,10,48,51,48,48,10,54,51,48,48,10, 51,54,48,48,10,49,67,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,66,53,10,69,78,67,79,68,73,78,71,32,52,51,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,48,49,56,48,10,48,49,56,48,10,48,51, 48,48,10,48,51,48,48,10,48,54,48,48,10,51,70,48, 48,10,49,56,48,48,10,51,48,48,48,10,51,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,66,54,10,69,78, 67,79,68,73,78,71,32,52,51,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,70,56,48,10,48,49,56,48,10,48,51,48,48, 10,49,70,56,48,10,48,67,48,48,10,49,56,48,48,10, 51,48,48,48,10,51,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,66,55,10,69,78,67,79,68,73,78,71, 32,52,51,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,48,49,56,48,10,48,51,48, 48,10,48,54,48,48,10,48,67,48,48,10,49,69,48,48, 10,48,51,48,48,10,48,49,56,48,10,48,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,66, 56,10,69,78,67,79,68,73,78,71,32,52,52,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,54,48,48,48,10,51,48,48,48,10,49,56,48,48, 10,48,67,48,48,10,49,69,48,48,10,51,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,66,57,10,69,78,67,79, 68,73,78,71,32,52,52,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,48,48,10,54,48,48,48,10,51,48,48,48,10,49, 56,48,48,10,48,67,48,48,10,49,69,48,48,10,51,48, 48,48,10,54,48,48,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,66,65,10,69,78,67,79,68,73,78,71,32,52, 52,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,70,56,48,10,48, 49,56,48,10,48,51,48,48,10,48,54,48,48,10,49,70, 48,48,10,48,49,56,48,10,48,49,56,48,10,48,55,48, 48,10,48,67,48,48,10,49,56,48,48,10,49,66,48,48, 10,48,69,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,66,66,10, 69,78,67,79,68,73,78,71,32,52,52,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,51,48,48,10,55,70, 56,48,10,49,56,48,48,10,51,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,66,67,10,69,78,67,79,68,73, 78,71,32,52,52,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,54,48,56,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,69, 48,48,10,55,51,48,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,66,68,10,69,78,67,79,68,73,78,71,32,52,52,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 70,48,48,10,51,49,48,48,10,51,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,51,69,48,48,10,51,66,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,51,51,48,48,10,49,69,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,66,69,10,69,78, 67,79,68,73,78,71,32,52,52,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,55,69,48,48,10,49,56,48,48,10,49,56,48,48, 10,48,67,48,48,10,48,54,48,48,10,48,51,48,48,10, 51,51,48,48,10,49,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,66,70,10,69,78,67,79,68,73,78,71, 32,52,52,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,69,48,48, 10,55,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,51,48,48,10,54, 69,48,48,10,55,56,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,67, 48,10,69,78,67,79,68,73,78,71,32,52,52,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,67,49,10,69,78,67,79, 68,73,78,71,32,52,52,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,51,48,48,10,51,51,48,48, 10,51,51,48,48,10,51,51,48,48,10,51,51,48,48,10, 51,51,48,48,10,51,51,48,48,10,51,51,48,48,10,51, 51,48,48,10,51,51,48,48,10,51,51,48,48,10,51,51, 48,48,10,51,51,48,48,10,51,51,48,48,10,51,51,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,67,50,10,69,78,67,79,68,73,78,71,32,52, 53,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,55, 70,56,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,55,70,56,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,67,51,10, 69,78,67,79,68,73,78,71,32,52,53,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,67,52,10,69,78,67,79,68,73, 78,71,32,52,53,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,54,67,48,10, 48,51,56,48,10,48,48,48,48,10,70,51,67,48,10,68, 56,67,48,10,68,56,67,48,10,68,56,67,48,10,68,57, 56,48,10,68,57,56,48,10,68,57,56,48,10,68,57,56, 48,10,68,66,48,48,10,68,66,48,48,10,68,66,48,48, 10,70,51,67,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,67,53,10,69,78,67,79,68,73,78,71,32,52,53,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 48,48,48,10,68,56,48,48,10,68,69,67,48,10,68,66, 56,48,10,68,56,48,48,10,68,66,67,48,10,68,56,67, 48,10,68,56,67,48,10,68,57,56,48,10,68,57,56,48, 10,68,66,48,48,10,68,66,48,48,10,70,51,67,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,67,54,10,69,78, 67,79,68,73,78,71,32,52,53,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,69,67,48,10,49,66,56,48,10,49,56,48, 48,10,55,66,67,48,10,68,56,67,48,10,68,56,67,48, 10,68,57,56,48,10,68,57,56,48,10,68,66,48,48,10, 68,66,48,48,10,55,66,67,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,67,55,10,69,78,67,79,68,73,78,71, 32,52,53,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,67,55,56,48,10,67,49,56,48,10,67,49,56, 48,10,67,49,56,48,10,67,49,56,48,10,67,49,56,48, 10,67,49,56,48,10,67,49,56,48,10,67,49,56,48,10, 67,49,56,48,10,67,49,56,48,10,67,68,56,48,10,70, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,67, 56,10,69,78,67,79,68,73,78,71,32,52,53,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,67,48,48, 48,10,67,48,48,48,10,67,49,56,48,10,67,49,56,48, 10,67,48,48,48,10,67,55,56,48,10,67,49,56,48,10, 67,49,56,48,10,67,49,56,48,10,67,49,56,48,10,67, 49,56,48,10,67,49,56,48,10,70,57,56,48,10,48,49, 56,48,10,51,49,56,48,10,51,49,56,48,10,49,70,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,67,57,10,69,78,67,79, 68,73,78,71,32,52,53,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,48,48,48,10,51,48,48,48, 10,51,49,56,48,10,51,49,56,48,10,51,48,48,48,10, 51,55,56,48,10,51,49,56,48,10,51,49,56,48,10,51, 49,56,48,10,51,49,56,48,10,51,49,56,48,10,51,49, 56,48,10,70,68,56,48,10,48,49,56,48,10,51,49,56, 48,10,51,49,56,48,10,49,70,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,67,65,10,69,78,67,79,68,73,78,71,32,52, 53,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,67,68,56,48,10,67,68,56,48,10,67,68,56,48,10, 69,68,56,48,10,69,68,56,48,10,69,68,56,48,10,70, 68,56,48,10,68,68,56,48,10,68,68,56,48,10,68,68, 56,48,10,67,68,56,48,10,67,68,56,48,10,67,68,56, 48,10,48,49,56,48,10,51,51,48,48,10,49,69,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,67,66,10, 69,78,67,79,68,73,78,71,32,52,53,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,67,67,48,48,10, 67,67,48,48,10,67,68,56,48,10,69,68,56,48,10,69, 67,48,48,10,69,68,56,48,10,70,68,56,48,10,68,68, 56,48,10,68,68,56,48,10,68,68,56,48,10,67,68,56, 48,10,67,68,56,48,10,67,68,56,48,10,48,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,49,70,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,67,67,10,69,78,67,79,68,73, 78,71,32,52,54,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 49,56,48,10,48,49,56,48,10,48,48,48,48,10,68,57, 56,48,10,69,68,56,48,10,67,68,56,48,10,67,68,56, 48,10,67,68,56,48,10,67,68,56,48,10,67,68,56,48, 10,67,68,56,48,10,48,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,49,70,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,67,68,10,69,78,67,79,68,73,78,71,32,52,54,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,51,51,48,48,10,49,69,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,67,48,48,10,49,69, 48,48,10,51,51,48,48,10,51,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,55,70,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,67,69,10,69,78, 67,79,68,73,78,71,32,52,54,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,51, 48,48,10,49,69,48,48,10,48,67,48,48,10,48,48,48, 48,10,49,70,48,48,10,51,49,56,48,10,48,49,56,48, 10,51,70,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,51,69,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,67,70,10,69,78,67,79,68,73,78,71, 32,52,54,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,51,51,48,48,10,49,69, 48,48,10,48,67,48,48,10,48,48,48,48,10,55,70,56, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,68, 48,10,69,78,67,79,68,73,78,71,32,52,54,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,51,48,48,10,49,69,48,48,10,48,67,48,48, 10,48,48,48,48,10,51,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,68,49,10,69,78,67,79, 68,73,78,71,32,52,54,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,51,51,48, 48,10,49,69,48,48,10,48,67,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,68,50,10,69,78,67,79,68,73,78,71,32,52, 54,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,51,48,48,10,49,69,48,48,10, 48,67,48,48,10,48,48,48,48,10,49,69,48,48,10,51, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,68,51,10, 69,78,67,79,68,73,78,71,32,52,54,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,51,51,48,48,10,49,69,48,48,10,48,67,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,68,52,10,69,78,67,79,68,73, 78,71,32,52,54,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,51,48,48,10,49, 69,48,48,10,48,67,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,56,48, 10,49,68,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,68,53,10,69,78,67,79,68,73,78,71,32,52,54,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,70,56,48,10,48,48,48,48,10,51, 51,48,48,10,51,51,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,68,54,10,69,78, 67,79,68,73,78,71,32,52,55,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,48,48, 48,48,10,51,51,48,48,10,51,51,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,51,56,48,10,49,68,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,68,55,10,69,78,67,79,68,73,78,71, 32,52,55,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,54,48,48,10,48,67,48,48,10,48,48, 48,48,10,51,51,48,48,10,51,51,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,68, 56,10,69,78,67,79,68,73,78,71,32,52,55,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,54,48,48,10,48,67,48, 48,10,48,48,48,48,10,51,51,48,48,10,51,51,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,56,48,10,49,68,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,68,57,10,69,78,67,79, 68,73,78,71,32,52,55,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,49,66,48,48,10,48,69,48, 48,10,48,48,48,48,10,51,51,48,48,10,51,51,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,68,65,10,69,78,67,79,68,73,78,71,32,52, 55,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,49,66,48,48, 10,48,69,48,48,10,48,48,48,48,10,51,51,48,48,10, 51,51,48,48,10,48,48,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,56,48,10,49,68,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,68,66,10, 69,78,67,79,68,73,78,71,32,52,55,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,49,56,48,48, 10,48,67,48,48,10,48,48,48,48,10,51,51,48,48,10, 51,51,48,48,10,48,48,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,68,67,10,69,78,67,79,68,73, 78,71,32,52,55,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 49,56,48,48,10,48,67,48,48,10,48,48,48,48,10,51, 51,48,48,10,51,51,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,56,48, 10,49,68,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,68,68,10,69,78,67,79,68,73,78,71,32,52,55,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,69,48,48,10,54,51,48, 48,10,48,49,56,48,10,48,49,56,48,10,55,70,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,68,69,10,69,78, 67,79,68,73,78,71,32,52,55,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,55,70,56,48,10,48, 48,48,48,10,51,51,48,48,10,51,51,48,48,10,48,48, 48,48,10,48,67,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,55,70,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,68,70,10,69,78,67,79,68,73,78,71, 32,52,55,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,48,48,48,48,10,51,51,48, 48,10,51,51,48,48,10,48,48,48,48,10,49,70,48,48, 10,51,49,56,48,10,48,49,56,48,10,51,70,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 69,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,69, 48,10,69,78,67,79,68,73,78,71,32,52,56,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,55,70, 56,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,55,70,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,69,49,10,69,78,67,79, 68,73,78,71,32,52,56,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,48,48,48,10, 49,70,48,48,10,51,49,56,48,10,48,49,56,48,10,51, 70,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,69,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,69,50,10,69,78,67,79,68,73,78,71,32,52, 56,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,70,56,48,10,49,69,48,48,10,51,54,48,48,10, 51,54,48,48,10,54,54,48,48,10,54,54,48,48,10,55, 70,56,48,10,54,54,48,48,10,54,54,48,48,10,54,54, 48,48,10,54,54,48,48,10,54,54,48,48,10,54,55,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,69,51,10, 69,78,67,79,68,73,78,71,32,52,56,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,48, 48,48,48,10,51,66,48,48,10,52,68,56,48,10,48,68, 56,48,10,48,70,48,48,10,51,67,48,48,10,54,67,48, 48,10,54,67,56,48,10,51,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,69,52,10,69,78,67,79,68,73, 78,71,32,52,56,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,55,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,55,67,48,10,54,49,56,48,10,51,51,56,48, 10,49,69,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,69,53,10,69,78,67,79,68,73,78,71,32,52,56,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,69,56,48,10,54,51,56, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,51,69,48,48,10,54,48,48,48,10,51,70,48,48,10, 54,49,56,48,10,54,55,67,48,10,54,49,56,48,10,51, 70,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,71,99,97,114,111,110,10,69,78,67, 79,68,73,78,71,32,52,56,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,51,51, 48,48,10,49,69,48,48,10,48,67,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,55,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,56,48,10,49,69,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,103, 99,97,114,111,110,10,69,78,67,79,68,73,78,71,32,52, 56,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,51,48,48,10,49,69,48,48,10, 48,67,48,48,10,48,48,48,48,10,51,69,56,48,10,54, 51,56,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,51,69,48,48,10,54,48,48,48,10,51,70,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,51,70,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,69,56,10, 69,78,67,79,68,73,78,71,32,52,56,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,51,51,48,48,10,49,69,48,48,10,48,67,48,48,10, 54,49,56,48,10,54,51,48,48,10,54,51,48,48,10,54, 54,48,48,10,54,54,48,48,10,55,67,48,48,10,54,54, 48,48,10,54,54,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,69,57,10,69,78,67,79,68,73, 78,71,32,52,56,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,51,51,48,48,10, 49,69,48,48,10,48,67,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,51, 48,48,10,54,54,48,48,10,54,67,48,48,10,55,56,48, 48,10,55,67,48,48,10,54,54,48,48,10,54,51,48,48, 10,54,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,69,65,10,69,78,67,79,68,73,78,71,32,52,57,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,67,48,48,10,49,56,48,48,10,49,56,48,48,10,48, 69,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,69,66,10,69,78, 67,79,68,73,78,71,32,52,57,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,51,48,48,10,49,69,48,48,10,48,67,48,48,10,49, 56,48,48,10,49,56,48,48,10,48,69,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,69,67,10,69,78,67,79,68,73,78,71, 32,52,57,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,70,56,48,10,48,48, 48,48,10,49,69,48,48,10,51,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,48,67,48,48,10,49,56,48,48,10,49,56, 48,48,10,48,69,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,69, 68,10,69,78,67,79,68,73,78,71,32,52,57,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,70,56,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,67, 48,48,10,49,56,48,48,10,49,56,48,48,10,48,69,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,69,69,10,69,78,67,79, 68,73,78,71,32,52,57,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,51,51,48, 48,10,49,69,48,48,10,48,67,48,48,10,48,48,48,48, 10,55,70,56,48,10,48,49,56,48,10,48,51,48,48,10, 48,54,48,48,10,49,69,48,48,10,48,51,48,48,10,48, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,69,70,10,69,78,67,79,68,73,78,71,32,52, 57,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,51,48,48,10,49,69,48,48,10, 48,67,48,48,10,48,48,48,48,10,51,70,56,48,10,48, 49,56,48,10,48,51,48,48,10,48,54,48,48,10,48,67, 48,48,10,49,69,48,48,10,48,51,48,48,10,48,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,70,48,10, 69,78,67,79,68,73,78,71,32,52,57,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,67,48,10,48,55,56,48,10,48,51,48,48,10,48, 48,48,48,10,48,55,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,49,70,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,70,49,10,69,78,67,79,68,73, 78,71,32,52,57,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,70,51,67,48,10,68,56,67,48,10,68, 56,67,48,10,68,56,67,48,10,68,57,56,48,10,68,57, 56,48,10,68,57,56,48,10,68,57,56,48,10,68,57,56, 48,10,68,66,48,48,10,68,66,48,48,10,68,66,48,48, 10,70,51,67,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,70,50,10,69,78,67,79,68,73,78,71,32,52,57,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 48,48,48,10,68,56,48,48,10,68,56,48,48,10,68,56, 48,48,10,68,56,48,48,10,68,66,67,48,10,68,56,67, 48,10,68,56,67,48,10,68,57,56,48,10,68,57,56,48, 10,68,66,48,48,10,68,66,48,48,10,70,51,67,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,70,51,10,69,78, 67,79,68,73,78,71,32,52,57,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,55,66,67,48,10,68,56,67,48,10,68,56,67,48, 10,68,57,56,48,10,68,57,56,48,10,68,66,48,48,10, 68,66,48,48,10,55,66,67,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,70,52,10,69,78,67,79,68,73,78,71, 32,53,48,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,51,48,48,10,48,54,48,48,10,48,67, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,48,48,48,10,54,48,48,48, 10,54,55,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,56,48,10,49, 69,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,70, 53,10,69,78,67,79,68,73,78,71,32,53,48,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,54,48,48,10,48,67,48,48,10,49,56,48,48, 10,48,48,48,48,10,51,69,56,48,10,54,51,56,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,51, 69,48,48,10,54,48,48,48,10,51,70,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,70,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,70,54,10,69,78,67,79, 68,73,78,71,32,53,48,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,67,48,48,10,54,67,48,48, 10,54,67,48,48,10,54,67,48,48,10,54,67,48,48,10, 54,68,56,48,10,55,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,70,55,10,69,78,67,79,68,73,78,71,32,53, 48,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,69,48,48,10,55,66,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 51,48,48,10,54,54,48,48,10,54,67,48,48,10,55,56, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,52,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,70,56,10, 69,78,67,79,68,73,78,71,32,53,48,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,49,56,48,48,10,48,67,48,48,10,48,54,48,48,10, 48,48,48,48,10,54,49,56,48,10,55,49,56,48,10,55, 57,56,48,10,55,57,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,55,56,48,10,54,55,56,48,10,54,51,56, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,70,57,10,69,78,67,79,68,73, 78,71,32,53,48,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,56,48,48,10,48, 67,48,48,10,48,54,48,48,10,48,48,48,48,10,54,69, 48,48,10,55,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,65,114,105,110, 103,97,99,117,116,101,10,69,78,67,79,68,73,78,71,32, 53,48,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,54,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,67,48,48,10,49,50,48,48,10,49,50,48,48, 10,48,67,48,48,10,48,67,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,55, 70,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,114,105,110,103,97,99, 117,116,101,10,69,78,67,79,68,73,78,71,32,53,48,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,54,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 67,48,48,10,49,50,48,48,10,49,50,48,48,10,48,67, 48,48,10,48,48,48,48,10,51,70,48,48,10,54,49,56, 48,10,48,49,56,48,10,51,70,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,69,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,65,69,97,99,117,116,101,10,69,78, 67,79,68,73,78,71,32,53,48,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,51,48,48,10,48, 54,48,48,10,48,67,48,48,10,48,48,48,48,10,48,70, 56,48,10,49,69,48,48,10,51,54,48,48,10,51,54,48, 48,10,54,54,48,48,10,55,70,56,48,10,54,54,48,48, 10,54,54,48,48,10,54,54,48,48,10,54,54,48,48,10, 54,54,48,48,10,54,55,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,101,97,99,117,116,101,10,69,78,67,79,68,73,78,71, 32,53,48,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,51,48,48,10,48,54,48, 48,10,48,67,48,48,10,48,48,48,48,10,51,66,48,48, 10,52,68,56,48,10,48,68,56,48,10,48,70,48,48,10, 51,67,48,48,10,54,67,48,48,10,54,67,56,48,10,51, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,79,115,108,97,115,104, 97,99,117,116,101,10,69,78,67,79,68,73,78,71,32,53, 49,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,54,48,48,10,48,67,48,48,10,49,56,48,48, 10,48,49,48,48,10,49,70,48,48,10,51,51,48,48,10, 54,51,56,48,10,54,53,56,48,10,54,53,56,48,10,54, 53,56,48,10,54,57,56,48,10,54,57,56,48,10,54,57, 56,48,10,55,49,56,48,10,51,51,48,48,10,51,69,48, 48,10,52,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,111,115,108,97,115,104,97,99, 117,116,101,10,69,78,67,79,68,73,78,71,32,53,49,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,51,48,48,10,48,54,48,48,10,48,67, 48,48,10,48,48,56,48,10,49,70,48,48,10,51,51,48, 48,10,54,53,56,48,10,54,53,56,48,10,54,57,56,48, 10,54,57,56,48,10,51,51,48,48,10,51,69,48,48,10, 52,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,48,48,10,69,78, 67,79,68,73,78,71,32,53,49,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,54, 54,48,48,10,51,51,48,48,10,48,48,48,48,10,48,67, 48,48,10,49,69,48,48,10,51,51,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,55,70,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,48,49,10,69,78,67,79,68,73,78,71, 32,53,49,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,54,48, 48,10,51,51,48,48,10,48,48,48,48,10,49,70,48,48, 10,51,49,56,48,10,48,49,56,48,10,51,70,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 69,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,48, 50,10,69,78,67,79,68,73,78,71,32,53,49,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,49,69,48,48,10,51,51,48,48,10,50,49,48, 48,10,48,48,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,55,70,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,48,51,10,69,78,67,79, 68,73,78,71,32,53,49,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,50,49,48,48,10,48,48,48,48,10, 49,70,48,48,10,51,49,56,48,10,48,49,56,48,10,51, 70,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,69,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,48,52,10,69,78,67,79,68,73,78,71,32,53, 49,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,54,54,48,48,10,51,51,48,48, 10,48,48,48,48,10,55,70,56,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,55, 69,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,48,53,10, 69,78,67,79,68,73,78,71,32,53,49,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,54,48,48,10,51,51,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,54,49, 56,48,10,55,70,56,48,10,54,48,48,48,10,54,48,48, 48,10,51,49,56,48,10,49,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,48,54,10,69,78,67,79,68,73, 78,71,32,53,49,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,50,49,48,48,10,48,48,48,48,10,55, 70,56,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,55,69,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,48,55,10,69,78,67,79,68,73,78,71,32,53,49,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,50,49, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,55,70,56,48,10,54,48,48,48, 10,54,48,48,48,10,51,49,56,48,10,49,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,48,56,10,69,78, 67,79,68,73,78,71,32,53,50,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,54, 54,48,48,10,51,51,48,48,10,48,48,48,48,10,55,70, 56,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,48,57,10,69,78,67,79,68,73,78,71, 32,53,50,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,54,48, 48,10,51,51,48,48,10,48,48,48,48,10,51,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,48, 65,10,69,78,67,79,68,73,78,71,32,53,50,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,49,69,48,48,10,51,51,48,48,10,50,49,48, 48,10,48,48,48,48,10,55,70,56,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,48,66,10,69,78,67,79, 68,73,78,71,32,53,50,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,50,49,48,48,10,48,48,48,48,10, 51,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,48,67,10,69,78,67,79,68,73,78,71,32,53, 50,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,54,54,48,48,10,51,51,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,48,68,10, 69,78,67,79,68,73,78,71,32,53,50,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,54,48,48,10,51,51,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,48,69,10,69,78,67,79,68,73, 78,71,32,53,50,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,50,49,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,48,70,10,69,78,67,79,68,73,78,71,32,53,50,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,50,49, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,49,48,10,69,78, 67,79,68,73,78,71,32,53,50,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,54, 54,48,48,10,51,51,48,48,10,48,48,48,48,10,55,69, 48,48,10,54,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,51,48,48,10,55,69,48,48, 10,54,54,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,49,49,10,69,78,67,79,68,73,78,71, 32,53,50,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,54,48, 48,10,51,51,48,48,10,48,48,48,48,10,54,70,48,48, 10,51,57,56,48,10,51,48,48,48,10,51,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,49, 50,10,69,78,67,79,68,73,78,71,32,53,51,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,49,69,48,48,10,51,51,48,48,10,50,49,48, 48,10,48,48,48,48,10,55,69,48,48,10,54,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,51,48,48,10, 55,69,48,48,10,54,54,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,49,51,10,69,78,67,79, 68,73,78,71,32,53,51,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,50,49,48,48,10,48,48,48,48,10, 54,70,48,48,10,51,57,56,48,10,51,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,49,52,10,69,78,67,79,68,73,78,71,32,53, 51,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,54,54,48,48,10,51,51,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,49,53,10, 69,78,67,79,68,73,78,71,32,53,51,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,54,48,48,10,51,51,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,56,48,10,49,68,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,49,54,10,69,78,67,79,68,73, 78,71,32,53,51,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,50,49,48,48,10,48,48,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,49,55,10,69,78,67,79,68,73,78,71,32,53,51,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,50,49, 48,48,10,48,48,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,56,48,10,49,68,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,83,99,111,109,109,97,97,99,99,101, 110,116,10,69,78,67,79,68,73,78,71,32,53,51,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,54,48,48, 48,10,54,48,48,48,10,51,48,48,48,10,49,69,48,48, 10,48,51,48,48,10,48,49,56,48,10,48,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,49,69,48,48,10,48, 48,48,48,10,48,69,48,48,10,48,69,48,48,10,49,67, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,115,99,111,109,109,97,97,99,99,101,110, 116,10,69,78,67,79,68,73,78,71,32,53,51,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,70,48,48,10,54,49,56,48,10, 54,48,48,48,10,51,70,48,48,10,48,49,56,48,10,48, 49,56,48,10,54,49,56,48,10,51,70,48,48,10,48,48, 48,48,10,48,69,48,48,10,48,69,48,48,10,49,67,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,84,99,111,109,109,97,97,99,99,101,110,116, 10,69,78,67,79,68,73,78,71,32,53,51,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,70,56,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,69,48,48,10,48,69,48,48,10,49,67,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,116,99,111,109,109,97,97,99,99,101,110,116,10, 69,78,67,79,68,73,78,71,32,53,51,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,55,69,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,57,56,48,10,48,70,48,48,10,48,48,48,48, 10,48,69,48,48,10,48,69,48,48,10,49,67,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,49,67,10,69,78,67,79,68,73, 78,71,32,53,52,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,69,48,48,10,51,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,54,48,48,10,48,69, 48,48,10,49,66,48,48,10,51,49,56,48,10,48,49,56, 48,10,48,51,48,48,10,48,54,48,48,10,49,67,48,48, 10,55,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,49,68,10,69,78,67,79,68,73,78,71,32,53,52,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,54,48,48, 10,48,69,48,48,10,49,66,48,48,10,51,49,56,48,10, 48,49,56,48,10,48,51,48,48,10,48,54,48,48,10,51, 67,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,49,69,10,69,78, 67,79,68,73,78,71,32,53,52,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,51, 51,48,48,10,49,69,48,48,10,48,67,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,55,70,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,49,70,10,69,78,67,79,68,73,78,71, 32,53,52,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,51,51,48,48,10,49,69, 48,48,10,48,67,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,69,48,48, 10,55,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,50, 48,10,69,78,67,79,68,73,78,71,32,53,52,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,69,48, 48,10,55,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,50,49,10,69,78,67,79, 68,73,78,71,32,53,52,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 49,54,48,48,10,51,69,48,48,10,54,54,48,48,10,54, 54,48,48,10,54,54,48,48,10,54,55,56,48,10,51,69, 56,48,10,49,69,56,48,10,48,51,48,48,10,48,52,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,50,50,10,69,78,67,79,68,73,78,71,32,53, 52,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,54,48,48,10,48,51,48,48,10,51,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,50,51,10, 69,78,67,79,68,73,78,71,32,53,52,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,50,52,10,69,78,67,79,68,73, 78,71,32,53,52,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,51,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,67,48,48,10,49,56,48,48,10,49,56,48, 48,10,51,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,55,70,56,48,10,48,48,67,48,10,48,49,56,48,10, 48,49,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,50,53,10,69,78,67,79,68,73,78,71,32,53,52,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,70,56,48,10,48,49,56, 48,10,48,51,48,48,10,48,54,48,48,10,48,67,48,48, 10,49,56,48,48,10,51,48,48,48,10,51,70,56,48,10, 48,48,67,48,10,48,49,56,48,10,48,49,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,50,54,10,69,78, 67,79,68,73,78,71,32,53,53,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,67, 48,48,10,49,69,48,48,10,51,51,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,55,70,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,50,55,10,69,78,67,79,68,73,78,71, 32,53,53,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,49,70,48,48, 10,51,49,56,48,10,48,49,56,48,10,51,70,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 69,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,50, 56,10,69,78,67,79,68,73,78,71,32,53,53,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,69,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,55,70,56,48,10,48,67, 48,48,10,48,54,48,48,10,51,54,48,48,10,49,67,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,50,57,10,69,78,67,79, 68,73,78,71,32,53,53,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,69,48,48,10,51,51,48,48,10,54,49,56,48,10,55, 70,56,48,10,54,48,48,48,10,54,48,48,48,10,51,49, 56,48,10,49,70,48,48,10,48,67,48,48,10,48,54,48, 48,10,51,54,48,48,10,49,67,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,50,65,10,69,78,67,79,68,73,78,71,32,53, 53,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,55,70,56,48,10,48,48,48,48,10,51,51,48,48, 10,51,51,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,50,66,10, 69,78,67,79,68,73,78,71,32,53,53,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,51,51,48,48,10,51,51,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,50,67,10,69,78,67,79,68,73, 78,71,32,53,53,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,55,70,56,48,10,48,48,48,48,10, 49,57,48,48,10,51,70,48,48,10,50,54,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,50,68,10,69,78,67,79,68,73,78,71,32,53,53,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,48, 48,48,48,10,49,57,48,48,10,51,70,48,48,10,50,54, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,50,69,10,69,78, 67,79,68,73,78,71,32,53,53,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,51,48,48,10,49,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,50,70,10,69,78,67,79,68,73,78,71, 32,53,53,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,51, 48,10,69,78,67,79,68,73,78,71,32,53,54,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,55,70, 56,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,49,69,48,48,10,51,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,51,49,10,69,78,67,79, 68,73,78,71,32,53,54,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,48,48,48,10, 49,69,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,51,50,10,69,78,67,79,68,73,78,71,32,53, 54,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 51,51,48,48,10,49,69,48,48,10,49,69,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,51,51,10, 69,78,67,79,68,73,78,71,32,53,54,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,56,48,10,49,68,56,48,10,48,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,51,52,10,69,78,67,79,68,73, 78,71,32,53,54,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,57,48,48,10,49,65,56,48, 10,48,67,56,48,10,48,55,48,48,10,48,56,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,51,53,10,69,78,67,79,68,73,78,71,32,53,54,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,67,48,48,10,55,54,48, 48,10,54,54,48,48,10,54,54,48,48,10,54,54,48,48, 10,54,54,48,48,10,54,55,56,48,10,54,54,56,48,10, 48,54,56,48,10,48,51,48,48,10,48,52,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,51,54,10,69,78, 67,79,68,73,78,71,32,53,54,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,55,69,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,57,48,48,10, 49,69,56,48,10,48,67,56,48,10,48,55,48,48,10,48, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,53,48,10,69,78,67,79,68,73,78,71, 32,53,57,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,53,70,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 55,70,48,48,10,54,48,48,48,10,54,51,48,48,10,51, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,53, 49,10,69,78,67,79,68,73,78,71,32,53,57,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,70,48,48,10,51,55,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,51,55,48,48,10,49,68,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,53,50,10,69,78,67,79, 68,73,78,71,32,53,57,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,69,48,48,10,51,66,48,48,10,51,49,56,48,10,51, 49,56,48,10,51,49,56,48,10,51,49,56,48,10,51,66, 48,48,10,51,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,53,51,10,69,78,67,79,68,73,78,71,32,53, 57,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,69,48,48,10,55, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,55,51,48,48,10,54,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,53,52,10, 69,78,67,79,68,73,78,71,32,53,57,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,69,48,48,10,54,51,48,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,54,51,48,48,10,51,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,53,53,10,69,78,67,79,68,73, 78,71,32,53,57,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,70, 48,48,10,51,49,56,48,10,54,48,48,48,10,54,48,48, 48,10,54,51,48,48,10,54,53,56,48,10,51,53,56,48, 10,49,70,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,53,54,10,69,78,67,79,68,73,78,71,32,53,57,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,49,68,56,48,10,51,51,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,56,48,10,49,68,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,48,67,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,53,55,10,69,78, 67,79,68,73,78,71,32,53,57,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,49,67,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,49,66,48,48,10,51,55,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 51,55,48,48,10,49,66,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,53,56,10,69,78,67,79,68,73,78,71, 32,54,48,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,55,70,56,48,10, 48,49,56,48,10,48,49,56,48,10,54,51,48,48,10,51, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,53, 57,10,69,78,67,79,68,73,78,71,32,54,48,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,69,48,48,10,54,51,48,48,10, 48,49,56,48,10,48,49,56,48,10,55,70,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,53,65,10,69,78,67,79, 68,73,78,71,32,54,48,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,67,48,48,10,54,54,67,48,10,48,51,52,48,10,48, 70,48,48,10,55,51,48,48,10,54,51,48,48,10,51,54, 48,48,10,49,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,53,66,10,69,78,67,79,68,73,78,71,32,54, 48,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,70,48,48,10,54, 49,56,48,10,54,48,48,48,10,51,67,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,49,56,48,10,51,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,53,67,10, 69,78,67,79,68,73,78,71,32,54,48,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,70,48,48,10,54,49,56,48,10,48,49, 56,48,10,48,70,48,48,10,48,49,56,48,10,48,49,56, 48,10,54,49,56,48,10,51,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,53,68,10,69,78,67,79,68,73, 78,71,32,54,48,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,67, 48,48,10,54,55,52,48,10,48,54,56,48,10,49,67,48, 48,10,48,54,48,48,10,48,54,48,48,10,54,54,48,48, 10,51,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,53,69,10,69,78,67,79,68,73,78,71,32,54,48,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,70,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,55,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,53,70,10,69,78, 67,79,68,73,78,71,32,54,48,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 49,70,56,48,10,48,54,48,48,10,48,54,48,48,10,54, 54,48,48,10,54,54,48,48,10,51,67,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,54,48,10,69,78,67,79,68,73,78,71, 32,54,48,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,67, 48,10,48,49,56,48,10,48,49,56,48,10,49,68,56,48, 10,51,51,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,56,48,10,49, 68,56,48,10,48,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,54, 49,10,69,78,67,79,68,73,78,71,32,54,48,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,68,56,48,10,51,51,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,56,48,10,49,68,56,48,10,48,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,54,50,10,69,78,67,79, 68,73,78,71,32,54,49,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,69,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 48,48,48,10,54,55,56,48,10,54,49,56,48,10,51,51, 56,48,10,49,69,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,54,51,10,69,78,67,79,68,73,78,71,32,54, 49,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,51,51,48,48,10,49,69, 48,48,10,49,69,48,48,10,48,67,48,48,10,49,69,48, 48,10,51,51,48,48,10,51,51,48,48,10,49,69,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,54,52,10, 69,78,67,79,68,73,78,71,32,54,49,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,51,48,48,10,51,54,48,48,10,49,67, 48,48,10,49,67,48,48,10,49,67,48,48,10,51,54,48, 48,10,51,54,48,48,10,49,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,54,53,10,69,78,67,79,68,73, 78,71,32,54,49,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,56,48, 10,49,68,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,54,54,10,69,78,67,79,68,73,78,71,32,54,49,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,69,48,48,10,55,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,54,55,10,69,78, 67,79,68,73,78,71,32,54,49,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,69,48,48,10,55,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,51,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,54,56,10,69,78,67,79,68,73,78,71, 32,54,49,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,51,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,51,70,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,54, 57,10,69,78,67,79,68,73,78,71,32,54,49,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,55,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,54,65,10,69,78,67,79, 68,73,78,71,32,54,49,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,54,66,10,69,78,67,79,68,73,78,71,32,54, 49,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,51,67,56,48,10,55, 70,56,48,10,52,70,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,54,67,10, 69,78,67,79,68,73,78,71,32,54,50,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,51,67,48,48,10,54,67,48,48,10,51,70, 56,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,54,68,10,69,78,67,79,68,73, 78,71,32,54,50,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,54,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,54,69,10,69,78,67,79,68,73,78,71,32,54,50,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,51,70,67,48,10,51,48,67, 48,10,51,48,67,48,10,51,49,56,48,10,51,51,48,48, 10,51,49,56,48,10,51,48,67,48,10,55,56,67,48,10, 48,48,67,48,10,51,48,67,48,10,49,57,56,48,10,48, 70,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,54,70,10,69,78, 67,79,68,73,78,71,32,54,50,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 55,70,56,48,10,51,54,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,55,48,10,69,78,67,79,68,73,78,71, 32,54,50,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,55,70,56,48,10,51, 55,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,55, 49,10,69,78,67,79,68,73,78,71,32,54,50,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,53,66,48,48,10,55,70,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,51,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,55,50,10,69,78,67,79, 68,73,78,71,32,54,50,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,69,48,48,10,55,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,67,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,55,51,10,69,78,67,79,68,73,78,71,32,54, 50,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,69,48,48,10,55, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,48,67,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,55,52,10, 69,78,67,79,68,73,78,71,32,54,50,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,55,49,56,48,10,55,57, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,55,56, 48,10,54,51,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,55,53,10,69,78,67,79,68,73, 78,71,32,54,50,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,55,70,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,55,54,10,69,78,67,79,68,73,78,71,32,54,51,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,70,56,48,10,54,67,48, 48,10,54,67,48,48,10,54,70,48,48,10,54,67,48,48, 10,54,67,48,48,10,54,67,48,48,10,51,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,55,55,10,69,78, 67,79,68,73,78,71,32,54,51,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,51,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,55,56,10,69,78,67,79,68,73,78,71, 32,54,51,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,51,70,48,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,51, 70,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,55, 57,10,69,78,67,79,68,73,78,71,32,54,51,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,54,55,48,48,10,51,68,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,55,65,10,69,78,67,79, 68,73,78,71,32,54,51,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,54,55, 48,48,10,51,68,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,55,66,10,69,78,67,79,68,73,78,71,32,54, 51,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,54,69,48,48,10,51,69,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,56,48, 10,48,51,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,55,67,10, 69,78,67,79,68,73,78,71,32,54,51,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,70,48,48,10,51,57,56,48,10,51,48, 48,48,10,51,48,48,48,10,51,48,48,48,10,51,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,55,68,10,69,78,67,79,68,73, 78,71,32,54,51,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,70, 48,48,10,51,57,56,48,10,51,48,48,48,10,51,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,50,48,48,10,49,67,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,55,69,10,69,78,67,79,68,73,78,71,32,54,51,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,70,48,48,10,49,57,56, 48,10,51,48,48,48,10,51,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,55,70,10,69,78, 67,79,68,73,78,71,32,54,51,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,56,48,10,69,78,67,79,68,73,78,71, 32,54,52,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,70,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,51,48,48,10, 55,69,48,48,10,54,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,56, 49,10,69,78,67,79,68,73,78,71,32,54,52,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,51,48,48,10,55,69,48,48,10,54,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,55,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,56,50,10,69,78,67,79, 68,73,78,71,32,54,52,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,70,48,48,10,54,49,56,48,10,54,48,48,48,10,51, 70,48,48,10,48,49,56,48,10,48,49,56,48,10,54,49, 56,48,10,55,70,48,48,10,54,48,48,48,10,54,48,48, 48,10,51,48,48,48,10,49,67,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,56,51,10,69,78,67,79,68,73,78,71,32,54, 52,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,51,56,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,56,52,10, 69,78,67,79,68,73,78,71,32,54,52,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,51,56,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,49,70,56,48,10,48,54,48,48,10,48,54,48,48, 10,54,54,48,48,10,54,54,48,48,10,51,67,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,56,53,10,69,78,67,79,68,73, 78,71,32,54,52,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,56, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,55,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,56,54,10,69,78,67,79,68,73,78,71,32,54,52,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 55,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 51,70,48,48,10,54,68,56,48,10,54,68,56,48,10,51, 56,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,56,55,10,69,78, 67,79,68,73,78,71,32,54,52,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,67,48,48,10,54,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,49,70,56,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,56,56,10,69,78,67,79,68,73,78,71, 32,54,52,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,55,69,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,48,69,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,56, 57,10,69,78,67,79,68,73,78,71,32,54,52,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,70,70,67,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,56,48,10,49,68,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,56,65,10,69,78,67,79, 68,73,78,71,32,54,53,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,51,56,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,56,66,10,69,78,67,79,68,73,78,71,32,54, 53,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,54,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,51,56,48,10,55,70,48,48,10,51,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,56,67,10, 69,78,67,79,68,73,78,71,32,54,53,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,49,69, 48,48,10,49,69,48,48,10,51,51,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,56,68,10,69,78,67,79,68,73, 78,71,32,54,53,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,51, 48,48,10,55,70,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,56,69,10,69,78,67,79,68,73,78,71,32,54,53,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,55,48,48,10,48,68,56,48,10,48,68, 56,48,10,49,56,48,48,10,49,56,48,48,10,49,67,48, 48,10,51,69,48,48,10,51,54,48,48,10,51,51,48,48, 10,54,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,56,70,10,69,78, 67,79,68,73,78,71,32,54,53,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,57,48,10,69,78,67,79,68,73,78,71, 32,54,53,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,70,56,48, 10,48,49,56,48,10,48,51,48,48,10,48,54,48,48,10, 48,67,48,48,10,49,56,48,48,10,51,48,48,48,10,51, 70,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,48,67,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,57, 49,10,69,78,67,79,68,73,78,71,32,54,53,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,70,56,48,10,48,49,56,48,10, 48,51,48,48,10,48,54,48,48,10,48,67,48,48,10,49, 66,48,48,10,51,52,56,48,10,51,70,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,57,50,10,69,78,67,79, 68,73,78,71,32,54,53,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,70,56,48,10,48,49,56,48,10,48,51,48,48,10,48, 54,48,48,10,48,67,48,48,10,49,70,48,48,10,48,49, 56,48,10,48,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,57,51,10,69,78,67,79,68,73,78,71,32,54, 53,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,70,56,48,10,48, 49,56,48,10,48,51,48,48,10,48,54,48,48,10,48,67, 48,48,10,49,70,48,48,10,48,49,56,48,10,51,57,56, 48,10,54,68,56,48,10,54,55,48,48,10,51,51,48,48, 10,49,68,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,57,52,10, 69,78,67,79,68,73,78,71,32,54,54,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,48, 49,56,48,10,48,51,48,48,10,48,69,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,57,53,10,69,78,67,79,68,73, 78,71,32,54,54,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,48,48,48,10,51,48, 48,48,10,49,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,57,54,10,69,78,67,79,68,73,78,71,32,54,54,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,69,48, 48,10,48,51,48,48,10,48,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,57,55,10,69,78, 67,79,68,73,78,71,32,54,54,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,70,48,48,10,51,49,56, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,51,49,56,48,10,49, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,57,56,10,69,78,67,79,68,73,78,71, 32,54,54,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,57, 57,10,69,78,67,79,68,73,78,71,32,54,54,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,70,48,48,10,54,49,56,48,10, 54,49,56,48,10,55,70,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,55,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,57,65,10,69,78,67,79, 68,73,78,71,32,54,54,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,70,48,48,10,54,49,56,48,10,54,49,56,48,10,51, 57,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,57,66,10,69,78,67,79,68,73,78,71,32,54, 54,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,67,48,10, 48,49,56,48,10,48,49,56,48,10,49,70,56,48,10,51, 49,56,48,10,54,48,48,48,10,54,48,48,48,10,54,55, 56,48,10,54,49,56,48,10,51,51,56,48,10,49,69,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,57,67,10, 69,78,67,79,68,73,78,71,32,54,54,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,55,70,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,57,68,10,69,78,67,79,68,73, 78,71,32,54,54,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,48,48,48,10,48,70, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,51,66,48,48,10,54,70,48,48,10,54,55,48,48,10, 54,51,56,48,10,51,69,67,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,57,69,10,69,78,67,79,68,73,78,71,32,54,55,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,49,56,48,10,51,49,56, 48,10,49,57,56,48,10,48,70,56,48,10,48,55,56,48, 10,48,68,56,48,10,49,57,56,48,10,51,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,57,70,10,69,78, 67,79,68,73,78,71,32,54,55,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,48,48,48,10,51,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,65,48,10,69,78,67,79,68,73,78,71, 32,54,55,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,67,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,49,68,56,48, 10,51,51,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,56,48,10,49, 68,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,65, 49,10,69,78,67,79,68,73,78,71,32,54,55,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,69,48, 48,10,51,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,48,49,56,48,10,48,51,48,48,10,48,69,48,48,10, 48,67,48,48,10,48,67,48,48,10,51,70,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,65,50,10,69,78,67,79, 68,73,78,71,32,54,55,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,69,48,48,10,51,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,48,48,48,10, 51,48,48,48,10,49,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,51,70,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,65,51,10,69,78,67,79,68,73,78,71,32,54, 55,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,54,70,67,48,10,68, 67,67,48,10,67,67,67,48,10,67,68,56,48,10,67,68, 56,48,10,67,70,48,48,10,68,70,48,48,10,54,70,67, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,65,52,10, 69,78,67,79,68,73,78,71,32,54,55,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,54,70,67,48,10,68,67,67,48,10,67,67, 67,48,10,67,68,56,48,10,67,70,48,48,10,67,68,56, 48,10,68,67,67,48,10,54,67,67,48,10,48,48,67,48, 10,48,48,67,48,10,49,57,56,48,10,48,70,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,65,53,10,69,78,67,79,68,73, 78,71,32,54,55,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,55,70, 67,48,10,68,56,67,48,10,68,57,56,48,10,68,66,48, 48,10,68,69,56,48,10,68,68,52,48,10,68,57,52,48, 10,55,70,56,48,10,48,50,48,48,10,48,50,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,65,54,10,69,78,67,79,68,73,78,71,32,54,55,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,70,70,48,48,10,54,68,56, 48,10,54,67,48,48,10,54,54,48,48,10,54,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,51,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,65,55,10,69,78, 67,79,68,73,78,71,32,54,55,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,49,67,48,10,48,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,70,70,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,51,66,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,69,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,65,56,10,69,78,67,79,68,73,78,71, 32,54,56,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,70,70,56,48, 10,54,54,67,48,10,54,67,48,48,10,54,67,48,48,10, 54,67,56,48,10,54,68,52,48,10,54,53,52,48,10,51, 70,56,48,10,48,50,48,48,10,48,50,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,65, 57,10,69,78,67,79,68,73,78,71,32,54,56,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,67,48, 48,10,54,54,48,48,10,54,54,48,48,10,54,48,48,48, 10,54,48,48,48,10,70,70,48,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,51,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,65,65,10,69,78,67,79, 68,73,78,71,32,54,56,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,55,48,48,10,51,68,56,48,10,51,67,48,48,10,51, 55,48,48,10,51,49,56,48,10,51,49,56,48,10,51,49, 56,48,10,55,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,65,66,10,69,78,67,79,68,73,78,71,32,54, 56,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,70,56,48,10,51, 49,56,48,10,51,51,48,48,10,51,51,48,48,10,51,54, 48,48,10,51,54,48,48,10,51,67,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,65,67,10, 69,78,67,79,68,73,78,71,32,54,56,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,68,56,48,10,54,68,56,48,10,55, 70,56,48,10,51,51,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,68,56,48,10,54,68,56, 48,10,55,70,56,48,10,51,51,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,65,68,10,69,78,67,79,68,73, 78,71,32,54,56,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,70,56,48,10,54,49,56,48,10,54,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,65,69,10,69,78,67,79,68,73,78,71,32,54,56,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,49,56,48,10,53,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,48,66,56,48,10,48,53,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,65,70,10,69,78, 67,79,68,73,78,71,32,54,56,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,50,50,48,48,10,53,50,48,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,54,48,48,10,48,65,48,48,10,48,50,48,48,10,48, 50,48,48,10,48,50,56,48,10,48,49,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,66,48,10,69,78,67,79,68,73,78,71, 32,54,56,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,67,48,48,10,55,54,48, 48,10,54,54,48,48,10,54,54,48,48,10,54,54,48,48, 10,54,54,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,66, 49,10,69,78,67,79,68,73,78,71,32,54,56,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,51,56,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,67,48,48,10,55,54,48,48,10,54,54,48,48, 10,54,54,48,48,10,54,54,48,48,10,54,54,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,66,50,10,69,78,67,79, 68,73,78,71,32,54,57,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,48,48,48,10,49,69,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 54,54,48,48,10,54,54,48,48,10,51,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,66,51,10,69,78,67,79,68,73,78,71,32,54, 57,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,67,48,48,10,55,54,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,66,52,10, 69,78,67,79,68,73,78,71,32,54,57,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,54,69,48,48,10,51,54,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,66,53,10,69,78,67,79,68,73, 78,71,32,54,57,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,54,69, 48,48,10,51,54,48,48,10,48,54,48,48,10,48,51,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,66,54,10,69,78,67,79,68,73,78,71,32,54,57,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,51,48,48,10,54,51,48,48,10,55,69, 48,48,10,54,51,48,48,10,54,51,48,48,10,55,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,66,55,10,69,78, 67,79,68,73,78,71,32,54,57,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,51,70,48,48,10,51,51,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,66,56,10,69,78,67,79,68,73,78,71, 32,54,57,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,51,70,48,48,10,48,51,48,48,10,51,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,66, 57,10,69,78,67,79,68,73,78,71,32,54,57,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,54,48, 48,10,48,67,48,48,10,49,56,48,48,10,51,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,66,65,10,69,78,67,79, 68,73,78,71,32,54,57,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,67,48,10,49,57,56,48, 10,51,51,48,48,10,54,54,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,66,66,10,69,78,67,79,68,73,78,71,32,54, 57,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,49,56,48,48,10,49,67,48,48,10, 49,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,57,50, 57,10,69,78,67,79,68,73,78,71,32,55,48,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,69,48, 48,10,48,69,48,48,10,48,54,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,54,52,57,51,55,10,69,78, 67,79,68,73,78,71,32,55,48,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,69,48,48,10,48,69, 48,48,10,48,67,48,48,10,48,54,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,66,69,10,69,78,67,79,68,73,78,71, 32,55,48,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,66, 70,10,69,78,67,79,68,73,78,71,32,55,48,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,54,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,54,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,67,48,10,69,78,67,79, 68,73,78,71,32,55,48,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,67,48,48,10,51,54,48,48, 10,48,54,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,67,49,10,69,78,67,79,68,73,78,71,32,55, 48,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,67,48,48,10,51,54,48,48,10,51,48,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,67,50,10, 69,78,67,79,68,73,78,71,32,55,48,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,51,48,48,10, 48,69,48,48,10,51,56,48,48,10,48,69,48,48,10,48, 51,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,67,51,10,69,78,67,79,68,73, 78,71,32,55,48,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,48,48,48,10,49,67,48,48,10,48, 55,48,48,10,49,67,48,48,10,51,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,67,52,10,69,78,67,79,68,73,78,71,32,55,48,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 56,48,48,10,48,56,48,48,10,49,67,48,48,10,49,52, 48,48,10,51,54,48,48,10,50,50,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,67,53,10,69,78, 67,79,68,73,78,71,32,55,48,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,50,50,48,48,10,51,54, 48,48,10,49,52,48,48,10,49,67,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 99,105,114,99,117,109,102,108,101,120,10,69,78,67,79,68, 73,78,71,32,55,49,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,49,69,48,48,10, 51,51,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,99,97,114, 111,110,10,69,78,67,79,68,73,78,71,32,55,49,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,51, 48,48,10,49,69,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,67,56,10,69,78,67, 79,68,73,78,71,32,55,49,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,109, 97,99,114,111,110,10,69,78,67,79,68,73,78,71,32,55, 49,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,67,65,10, 69,78,67,79,68,73,78,71,32,55,49,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,54,48,48,10, 48,67,48,48,10,49,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,67,66,10,69,78,67,79,68,73, 78,71,32,55,49,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,56,48,48,10,48,67,48,48,10,48, 54,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,67,67,10,69,78,67,79,68,73,78,71,32,55,49,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,67,68,10,69,78, 67,79,68,73,78,71,32,55,49,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,70,56,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,67,69,10,69,78,67,79,68,73,78,71, 32,55,49,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,56,48,48,10,48,67, 48,48,10,48,54,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,67, 70,10,69,78,67,79,68,73,78,71,32,55,49,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,54,48,48,10,48,67,48,48,10,49,56,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,68,48,10,69,78,67,79, 68,73,78,71,32,55,50,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,69,48,48,10,49,67,48,48,10,48,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,56,48,48,10,49,67, 48,48,10,51,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,68,49,10,69,78,67,79,68,73,78,71,32,55, 50,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,69,48,48,10,49, 67,48,48,10,48,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,68,50,10, 69,78,67,79,68,73,78,71,32,55,50,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,69, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,69,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,68,51,10,69,78,67,79,68,73, 78,71,32,55,50,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,54,48,48,10,48,69,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,69,48,48,10,48,54,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,68,52,10,69,78,67,79,68,73,78,71,32,55,50,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,51,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,68,53,10,69,78, 67,79,68,73,78,71,32,55,50,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,69,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,68,54,10,69,78,67,79,68,73,78,71, 32,55,50,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 51,69,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,68, 55,10,69,78,67,79,68,73,78,71,32,55,50,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,50,50,48,48,10,51,69,48,48,10,50, 50,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,98,114,101,118,101,10,69,78,67,79,68,73, 78,71,32,55,50,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,51,51,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,100,111,116,97, 99,99,101,110,116,10,69,78,67,79,68,73,78,71,32,55, 50,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,114,105,110,103,10,69,78,67, 79,68,73,78,71,32,55,51,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,67, 48,48,10,49,50,48,48,10,49,50,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,111, 103,111,110,101,107,10,69,78,67,79,68,73,78,71,32,55, 51,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,49,56,48,48,10,49,56,48,48, 10,48,69,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,116,105,108,100,101,10,69,78, 67,79,68,73,78,71,32,55,51,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,57,48,48,10,51,70, 48,48,10,50,54,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 104,117,110,103,97,114,117,109,108,97,117,116,10,69,78,67, 79,68,73,78,71,32,55,51,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,49,57, 56,48,10,51,51,48,48,10,54,54,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,68,69,10,69,78,67,79,68,73,78,71,32, 55,51,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,56,48,48,10, 51,56,48,48,10,54,67,56,48,10,52,70,56,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,68,70, 10,69,78,67,79,68,73,78,71,32,55,51,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,54,51,48,48,10,51,54,48,48,10,49,67,48,48, 10,51,54,48,48,10,54,51,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,69,48,10,69,78,67,79,68, 73,78,71,32,55,51,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,51,48,48,10, 51,54,48,48,10,49,67,48,48,10,49,67,48,48,10,51, 54,48,48,10,51,54,48,48,10,49,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,69,49,10,69,78,67,79,68,73,78,71,32,55,51, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,55,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,55,56, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,50,69,50,10,69, 78,67,79,68,73,78,71,32,55,51,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 67,48,48,10,54,48,48,48,10,51,48,48,48,10,49,56, 48,48,10,48,67,48,48,10,55,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,50,69,51,10,69,78,67,79,68,73,78, 71,32,55,51,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,67,48,48,10,54,67, 48,48,10,51,56,48,48,10,51,56,48,48,10,54,67,48, 48,10,54,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 69,52,10,69,78,67,79,68,73,78,71,32,55,52,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,51,67,48,48,10,54,54, 48,48,10,54,48,48,48,10,51,48,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,69,53,10,69,78,67, 79,68,73,78,71,32,55,52,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,70,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,69,54,10,69,78,67,79,68,73,78,71,32, 55,52,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,51,70,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,69,55, 10,69,78,67,79,68,73,78,71,32,55,52,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,51,70,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,69,56,10,69,78,67,79,68, 73,78,71,32,55,52,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,51,70,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,69,57,10,69,78,67,79,68,73,78,71,32,55,52, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,51,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,50,69,65,10,69, 78,67,79,68,73,78,71,32,55,52,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,69,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,50,69,66,10,69,78,67,79,68,73,78, 71,32,55,52,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,69,48,48,10,49,56,48,48,10,49,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 69,67,10,69,78,67,79,68,73,78,71,32,55,52,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 51,48,48,10,49,69,48,48,10,48,67,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,69,68,10,69,78,67, 79,68,73,78,71,32,55,52,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,69,69,10,69,78,67,79,68,73,78,71,32, 55,53,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,51,56,48,10,55,51,56,48,10,51,49,56,48, 10,54,51,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,69,70, 10,69,78,67,79,68,73,78,71,32,55,53,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,50,50,48,48,10,51,54,48,48,10,49,52,48, 48,10,49,67,48,48,10,48,56,48,48,10,48,56,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,70,48,10,69,78,67,79,68, 73,78,71,32,55,53,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,56,48, 48,10,48,56,48,48,10,49,67,48,48,10,49,52,48,48, 10,51,54,48,48,10,50,50,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,70,49,10,69,78,67,79,68,73,78,71,32,55,53, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,51,48,48, 10,48,69,48,48,10,51,56,48,48,10,48,69,48,48,10, 48,51,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,50,70,50,10,69, 78,67,79,68,73,78,71,32,55,53,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,48,48,48,10,49,67,48,48,10, 48,55,48,48,10,49,67,48,48,10,51,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,50,70,51,10,69,78,67,79,68,73,78, 71,32,55,53,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,50,48,48,10,49, 50,48,48,10,48,67,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 70,52,10,69,78,67,79,68,73,78,71,32,55,53,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,56,48,48,10,48,67,48,48, 10,48,54,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,70,53,10,69,78,67, 79,68,73,78,71,32,55,53,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,54,48,48,10,51,51,48,48,10,49,57,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,70,54,10,69,78,67,79,68,73,78,71,32, 55,53,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,57,56,48,10, 51,51,48,48,10,54,54,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,70,55, 10,69,78,67,79,68,73,78,71,32,55,53,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,57,56, 48,10,54,68,56,48,10,54,55,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,70,56,10,69,78,67,79,68, 73,78,71,32,55,54,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,69,48,48,10, 48,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,69,48,48,10,48,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,70,57,10,69,78,67,79,68,73,78,71,32,55,54, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,69,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,50,70,65,10,69, 78,67,79,68,73,78,71,32,55,54,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 67,48,48,10,48,52,48,48,10,48,52,48,48,10,48,52, 48,48,10,48,52,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,50,70,66,10,69,78,67,79,68,73,78, 71,32,55,54,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 70,67,10,69,78,67,79,68,73,78,71,32,55,54,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,52,48,48,10,48,52,48,48,10, 48,52,48,48,10,48,52,48,48,10,49,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,70,68,10,69,78,67, 79,68,73,78,71,32,55,54,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,52,48,56,48,10,52,48, 56,48,10,55,70,56,48,10,55,70,56,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,70,69,10,69,78,67,79,68,73,78,71,32, 55,54,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,52,48,48,48,10,52,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,70,70, 10,69,78,67,79,68,73,78,71,32,55,54,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,48,48,48,10,51,48,48,48,10,55,70,56, 48,10,51,48,48,48,10,49,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,103,114,97,118,101,99,111,109,98,10,69,78,67, 79,68,73,78,71,32,55,54,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,49,56,48,48,10,48,67, 48,48,10,48,54,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 99,117,116,101,99,111,109,98,10,69,78,67,79,68,73,78, 71,32,55,54,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,54,48,48,10,48,67,48,48,10,49, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,51, 48,50,10,69,78,67,79,68,73,78,71,32,55,55,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 67,48,48,10,49,69,48,48,10,51,51,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,116,105,108,100,101,99,111,109,98,10,69, 78,67,79,68,73,78,71,32,55,55,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,49,57,48,48,10, 51,70,48,48,10,50,54,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,51,48,52,10,69,78,67,79,68,73,78, 71,32,55,55,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,51,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,51, 48,53,10,69,78,67,79,68,73,78,71,32,55,55,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,70,70,67,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,51,48,54,10,69,78,67, 79,68,73,78,71,32,55,55,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,54,51,48,48,10,51,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,51,48,55,10,69,78,67,79,68,73,78,71,32, 55,55,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,51,48,56, 10,69,78,67,79,68,73,78,71,32,55,55,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,51,51,48, 48,10,51,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,104,111,111,107,97,98,111,118,101,99,111,109,98, 10,69,78,67,79,68,73,78,71,32,55,55,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,49,69,48, 48,10,51,51,48,48,10,48,54,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,51,48,65,10,69,78,67,79,68, 73,78,71,32,55,55,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,49,67,48,48,10,51,54,48,48, 10,49,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,51,48,66,10,69,78,67,79,68,73,78,71,32,55,55, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,49,57,56,48,10,51,51,48,48,10,54,54,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,51,48,67,10,69, 78,67,79,68,73,78,71,32,55,56,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,51,51,48,48,10, 49,69,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,51,48,68,10,69,78,67,79,68,73,78, 71,32,55,56,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,51, 48,69,10,69,78,67,79,68,73,78,71,32,55,56,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,51, 51,48,48,10,51,51,48,48,10,51,51,48,48,10,51,51, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,51,48,70,10,69,78,67, 79,68,73,78,71,32,55,56,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,54,54,48,48,10,51,51, 48,48,10,49,57,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,51,49,48,10,69,78,67,79,68,73,78,71,32, 55,56,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,67,48,48,10,54,49,56,48,10,51,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,51,49,49, 10,69,78,67,79,68,73,78,71,32,55,56,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,51,69,48, 48,10,54,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,51,49,50,10,69,78,67,79,68, 73,78,71,32,55,56,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,67,48,48,10,49,56,48,48, 10,49,67,48,48,10,48,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,51,49,51,10,69,78,67,79,68,73,78,71,32,55,56, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,56,48,48,10,49,67,48,48,10,48,67,48,48,10, 49,56,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,51,49,52,10,69, 78,67,79,68,73,78,71,32,55,56,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,56,48,48,10, 49,67,48,48,10,49,56,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,51,49,53,10,69,78,67,79,68,73,78, 71,32,55,56,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,56,48,10,48,49,67,48,10,48, 48,67,48,10,48,49,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,51, 49,54,10,69,78,67,79,68,73,78,71,32,55,57,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,56,48,48,10,48,67,48,48,10,48,54, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,51,49,55,10,69,78,67, 79,68,73,78,71,32,55,57,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,54, 48,48,10,48,67,48,48,10,49,56,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,51,49,56,10,69,78,67,79,68,73,78,71,32, 55,57,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,54,48,48,10,51,69,48, 48,10,48,54,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,51,49,57, 10,69,78,67,79,68,73,78,71,32,55,57,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,48,48,48,10,51,69,48,48,10,51,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,51,49,65,10,69,78,67,79,68, 73,78,71,32,55,57,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,55,67,48,10,48,48,67,48, 10,48,48,67,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,51,49,66,10,69,78,67,79,68,73,78,71,32,55,57, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,67,48,10,48,48,67,48,10,48,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,51,49,67,10,69, 78,67,79,68,73,78,71,32,55,57,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,69,48,48,10, 49,56,48,48,10,49,56,48,48,10,48,69,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,51,49,68,10,69,78,67,79,68,73,78, 71,32,55,57,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,51,70,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,51, 49,69,10,69,78,67,79,68,73,78,71,32,55,57,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,70,48,48,10,48,67,48,48,10,48,67, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,51,49,70,10,69,78,67, 79,68,73,78,71,32,55,57,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,51,70,48,48,10,48,67,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,51,50,48,10,69,78,67,79,68,73,78,71,32, 56,48,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,70,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,51,50,49, 10,69,78,67,79,68,73,78,71,32,56,48,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,55,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,51,50,50,10,69,78,67,79,68, 73,78,71,32,56,48,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,48,67,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,100,111,116, 98,101,108,111,119,99,111,109,98,10,69,78,67,79,68,73, 78,71,32,56,48,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,50,52,10,69,78,67,79,68,73,78,71,32,56,48,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,51,48,48,10,51,51,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,50,53,10,69,78, 67,79,68,73,78,71,32,56,48,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 67,48,48,10,51,54,48,48,10,49,67,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,50,54,10,69,78,67,79,68,73,78,71, 32,56,48,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,69,48,48,10,48,69, 48,48,10,49,67,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,50, 55,10,69,78,67,79,68,73,78,71,32,56,48,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,54,48,48,10,51,54,48,48,10,49,67,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,50,56,10,69,78,67,79, 68,73,78,71,32,56,48,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,49,56,48, 48,10,51,51,48,48,10,49,69,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,50,57,10,69,78,67,79,68,73,78,71,32,56, 48,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,50,65,10, 69,78,67,79,68,73,78,71,32,56,49,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,54,49,56,48,10,54,49,56,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,50,66,10,69,78,67,79,68,73, 78,71,32,56,49,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,68,56,48,10, 54,68,56,48,10,51,70,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,50,67,10,69,78,67,79,68,73,78,71,32,56,49,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,51,48,48,10,49,69,48,48,10,48, 67,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,50,68,10,69,78, 67,79,68,73,78,71,32,56,49,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,49,69,48,48,10,51,51,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,50,69,10,69,78,67,79,68,73,78,71, 32,56,49,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,51,48,48,10,51,69, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,50, 70,10,69,78,67,79,68,73,78,71,32,56,49,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,69,48,48,10,54,51,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,51,48,10,69,78,67,79, 68,73,78,71,32,56,49,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,57,48, 48,10,51,70,48,48,10,50,54,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,51,49,10,69,78,67,79,68,73,78,71,32,56, 49,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,51,50,10, 69,78,67,79,68,73,78,71,32,56,49,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,70,67,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,51,51,10,69,78,67,79,68,73, 78,71,32,56,49,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,70,67,48,10, 48,48,48,48,10,70,70,67,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,51,52,10,69,78,67,79,68,73,78,71,32,56,50,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,57,48, 48,10,51,70,48,48,10,50,54,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,51,53,10,69,78, 67,79,68,73,78,71,32,56,50,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,51,54,10,69,78,67,79,68,73,78,71, 32,56,50,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,70,70,67,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,51, 55,10,69,78,67,79,68,73,78,71,32,56,50,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,49,56,48,10,48,51,48,48,10,48,54,48,48,10, 48,67,48,48,10,49,56,48,48,10,51,48,48,48,10,54, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,51,56,10,69,78,67,79, 68,73,78,71,32,56,50,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,49,56,48,10,48,49,56,48,10,48,51,48,48, 10,48,51,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,49, 56,48,48,10,49,56,48,48,10,51,48,48,48,10,51,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,51,57,10,69,78,67,79,68,73,78,71,32,56, 50,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,67,48,48,10,48,54,48,48,10,48,54,48,48, 10,49,67,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,51,65,10, 69,78,67,79,68,73,78,71,32,56,50,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,49,56,48,10,54,49,56,48,10,55,70,56,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,51,66,10,69,78,67,79,68,73, 78,71,32,56,50,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,70,48,48,10, 51,51,48,48,10,51,70,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,51,67,10,69,78,67,79,68,73,78,71,32,56,50,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,68,68,56,48,10,48, 56,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,51,68,10,69,78, 67,79,68,73,78,71,32,56,50,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,54,49,56,48,10,49, 69,48,48,10,54,49,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,51,69,10,69,78,67,79,68,73,78,71, 32,56,51,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,67,48,48,10,49,56,48,48,10,48,67, 48,48,10,49,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,51, 70,10,69,78,67,79,68,73,78,71,32,56,51,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,70,70, 67,48,10,48,48,48,48,10,70,70,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,52,48,10,69,78,67,79, 68,73,78,71,32,56,51,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,49,56,48,48,10,48,67,48, 48,10,48,54,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,52,49,10,69,78,67,79,68,73,78,71,32,56, 51,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,54,48,48,10,48,67,48,48,10,49,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,52,50,10, 69,78,67,79,68,73,78,71,32,56,51,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,49,57,48,48, 10,51,70,48,48,10,50,54,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,52,51,10,69,78,67,79,68,73, 78,71,32,56,51,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,56,48,48,10,49,67,48,48,10, 48,67,48,48,10,49,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,52,52,10,69,78,67,79,68,73,78,71,32,56,51,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,54,48,48,10,54,68,56,48,10,55,57,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,52,53,10,69,78, 67,79,68,73,78,71,32,56,51,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,49,56,48,48,10,48,67,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,52,54,10,69,78,67,79,68,73,78,71, 32,56,51,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,51,70,48,48,10,51,51,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,52, 55,10,69,78,67,79,68,73,78,71,32,56,51,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,48,48,48,48,10,55,70,56, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,52,56,10,69,78,67,79, 68,73,78,71,32,56,52,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,51,48, 48,10,51,51,48,48,10,51,51,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,52,57,10,69,78,67,79,68,73,78,71,32,56, 52,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,69,48,48,10,48,54,48,48, 10,48,54,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,52,65,10, 69,78,67,79,68,73,78,71,32,56,52,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,54,48,48, 10,48,54,48,48,10,51,67,56,48,10,55,70,56,48,10, 52,70,48,48,10,49,56,48,48,10,49,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,52,66,10,69,78,67,79,68,73, 78,71,32,56,52,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,54,48,48,10,48,48,48,48,10, 49,66,48,48,10,51,54,48,48,10,48,48,48,48,10,49, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,52,67,10,69,78,67,79,68,73,78,71,32,56,52,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 49,66,48,48,10,51,54,48,48,10,48,48,48,48,10,49, 66,48,48,10,51,54,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,52,68,10,69,78, 67,79,68,73,78,71,32,56,52,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,50, 49,48,48,10,55,70,56,48,10,50,49,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,52,69,10,69,78,67,79,68,73,78,71, 32,56,52,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,56,48,48,10,49,67,48,48,10,50,65, 48,48,10,48,56,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,52, 70,10,69,78,67,79,68,73,78,71,32,56,52,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,53,48,10,69,78,67,79, 68,73,78,71,32,56,52,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,49,67,48,48,10,48,55,48, 48,10,49,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,53,49,10,69,78,67,79,68,73,78,71,32,56, 52,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,54,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,54,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,53,50,10, 69,78,67,79,68,73,78,71,32,56,53,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,51,70,48,48, 10,54,49,56,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,53,51,10,69,78,67,79,68,73, 78,71,32,56,53,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,50,48,48,10,48,67,48,48,10, 48,67,48,48,10,49,50,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,53,52,10,69,78,67,79,68,73,78,71,32,56,53,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,69,48,48,10,51,56,48,48,10,48, 69,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,53,53,10,69,78, 67,79,68,73,78,71,32,56,53,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 56,48,48,10,48,69,48,48,10,51,56,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,53,54,10,69,78,67,79,68,73,78,71, 32,56,53,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,50,48,48,10,54,50,48,48,10,49,68, 48,48,10,54,53,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,53, 55,10,69,78,67,79,68,73,78,71,32,56,53,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,67, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,53,68,10,69,78,67,79, 68,73,78,71,32,56,54,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,50,48,52,48,10,49,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,53,69,10,69,78,67,79,68,73,78,71,32,56, 54,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,70,67,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,53,70,10, 69,78,67,79,68,73,78,71,32,56,54,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,70,67,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,54,48,10,69,78,67,79,68,73, 78,71,32,56,54,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,49,67,52,48,10,50,51,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,54,49,10,69,78,67,79,68,73,78,71,32,56,54,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 49,70,56,48,10,50,48,52,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,54,50,10,69,78, 67,79,68,73,78,71,32,56,54,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,56,48,10,48,70,67,48,10,48,48,56,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,54,51,10,69,78,67,79,68,73,78,71, 32,56,54,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,67,48,48,10,48,50, 48,48,10,48,69,48,48,10,49,50,48,48,10,48,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,54, 52,10,69,78,67,79,68,73,78,71,32,56,54,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,67,48,48,10,49,50,48,48,10,49,69,48, 48,10,49,48,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,54,53,10,69,78,67,79, 68,73,78,71,32,56,54,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,56,48,48,10,48,48,48, 48,10,49,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,49,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,54,54,10,69,78,67,79,68,73,78,71,32,56, 55,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,67,48,48,10,49,50,48,48, 10,49,50,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,54,55,10, 69,78,67,79,68,73,78,71,32,56,55,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 48,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,54,56,10,69,78,67,79,68,73, 78,71,32,56,55,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,67,48,48,10, 49,48,48,48,10,49,48,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,54,57,10,69,78,67,79,68,73,78,71,32,56,55,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,50,48,48,10,48,50,48,48,10,48,69,48,48,10,49, 50,48,48,10,49,50,48,48,10,48,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,54,65,10,69,78, 67,79,68,73,78,71,32,56,55,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,49,48,48,48,10,49, 48,48,48,10,49,67,48,48,10,49,50,48,48,10,49,50, 48,48,10,49,50,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,54,66,10,69,78,67,79,68,73,78,71, 32,56,55,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,49,65,48,48,10,49,53, 48,48,10,49,53,48,48,10,49,53,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,54, 67,10,69,78,67,79,68,73,78,71,32,56,55,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,49,52,48,48,10,49,65,48,48,10,49,48,48, 48,10,49,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,54,68,10,69,78,67,79, 68,73,78,71,32,56,55,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,56,48,48,10,48,56,48, 48,10,49,67,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,54,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,54,69,10,69,78,67,79,68,73,78,71,32,56, 55,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,49,50,48,48,10,49,50,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,54,70,10, 69,78,67,79,68,73,78,71,32,56,55,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,49,50,48,48,10,48,67,48,48,10,48,67,48,48,10, 49,50,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,55,52,10,69,78,67,79,68,73, 78,71,32,56,56,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,54,48,48,10,48,67,48,48,10,49, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,55,53,10,69,78,67,79,68,73,78,71,32,56,56,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,54,48,48,10,48,67,48,48,10,49,56,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,55,65,10,69,78, 67,79,68,73,78,71,32,56,57,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,49,56,48,48,10,48,67,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,55,69,10,69,78,67,79,68,73,78,71, 32,56,57,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,69,48,48, 10,48,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,69,48,48,10,48, 69,48,48,10,49,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,116,111,110,111,115,10, 69,78,67,79,68,73,78,71,32,57,48,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,54,48,48,10, 48,67,48,48,10,49,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,100,105,101,114,101,115,105,115,116,111,110,111,115,10, 69,78,67,79,68,73,78,71,32,57,48,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,54,48,48,10, 54,68,56,48,10,55,57,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,65,108,112,104,97,116,111,110,111,115,10,69,78,67, 79,68,73,78,71,32,57,48,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,54,48,48,10,54,70,48, 48,10,53,57,56,48,10,49,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,70,56,48,10, 49,57,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 110,111,116,101,108,101,105,97,10,69,78,67,79,68,73,78, 71,32,57,48,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,69,48, 48,10,48,69,48,48,10,48,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,69,112,115,105,108, 111,110,116,111,110,111,115,10,69,78,67,79,68,73,78,71, 32,57,48,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,68,56,48,48,10,57,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,70,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,69,116,97,116,111,110, 111,115,10,69,78,67,79,68,73,78,71,32,57,48,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,57, 56,48,10,68,57,56,48,10,57,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,49,70,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,49,57,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,73,111,116,97,116,111,110,111,115,10,69, 78,67,79,68,73,78,71,32,57,48,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,67, 54,48,48,10,56,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,49,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,79,109,105,99,114,111,110,116,111,110,111,115,10,69,78, 67,79,68,73,78,71,32,57,48,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,54,48,48,10,67,70, 48,48,10,57,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 48,70,48,48,10,48,54,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 85,112,115,105,108,111,110,116,111,110,111,115,10,69,78,67, 79,68,73,78,71,32,57,49,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,57,56,48,10,68,57,56, 48,10,57,57,56,48,10,49,57,56,48,10,49,57,56,48, 10,48,70,48,48,10,48,70,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,79, 109,101,103,97,116,111,110,111,115,10,69,78,67,79,68,73, 78,71,32,57,49,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,54,48,48,10,54,70,48,48,10,53, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,49,57, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,48,70,48,48,10,48,54,48,48, 10,49,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,105,111,116,97, 100,105,101,114,101,115,105,115,116,111,110,111,115,10,69,78, 67,79,68,73,78,71,32,57,49,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,54,48,48,10,54,68, 56,48,10,55,57,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,68,56,48,10,48,55,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 65,108,112,104,97,10,69,78,67,79,68,73,78,71,32,57, 49,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,49,69,48,48,10,51,51,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,55,70,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,66,101,116,97,10,69,78,67, 79,68,73,78,71,32,57,49,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,67,48,48,10,54,54,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,54,48,48,10,55,69,48,48,10,54,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 51,48,48,10,55,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,71, 97,109,109,97,10,69,78,67,79,68,73,78,71,32,57,49, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,68,101,108,116,97,10,69,78,67, 79,68,73,78,71,32,57,49,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,49,69,48,48,10,49,69,48,48, 10,49,69,48,48,10,51,51,48,48,10,51,51,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,69, 112,115,105,108,111,110,10,69,78,67,79,68,73,78,71,32, 57,49,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 55,69,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,90,101,116,97,10,69,78, 67,79,68,73,78,71,32,57,49,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,51,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,67,48,48,10,49,56,48,48, 10,49,56,48,48,10,51,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 69,116,97,10,69,78,67,79,68,73,78,71,32,57,49,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,55,70,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,84,104,101,116,97,10,69,78,67,79, 68,73,78,71,32,57,50,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,69,48,48,10,51,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,55,70,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,73,111, 116,97,10,69,78,67,79,68,73,78,71,32,57,50,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 56,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,75,97,112,112,97,10,69,78,67,79,68, 73,78,71,32,57,50,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,51,48,48,10,54,51,48,48,10,54,54,48,48,10,54, 54,48,48,10,55,67,48,48,10,54,54,48,48,10,54,54, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,76,97,109, 98,100,97,10,69,78,67,79,68,73,78,71,32,57,50,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,49,69, 48,48,10,49,69,48,48,10,49,69,48,48,10,51,51,48, 48,10,51,51,48,48,10,51,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,77,117,10,69,78,67,79,68,73,78, 71,32,57,50,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,55,51, 56,48,10,55,51,56,48,10,55,70,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,78,117,10,69,78, 67,79,68,73,78,71,32,57,50,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,55,49, 56,48,10,55,49,56,48,10,55,57,56,48,10,55,57,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,55,56,48, 10,54,55,56,48,10,54,51,56,48,10,54,51,56,48,10, 54,49,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 88,105,10,69,78,67,79,68,73,78,71,32,57,50,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,79,109,105,99,114,111,110,10,69,78,67, 79,68,73,78,71,32,57,50,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,80, 105,10,69,78,67,79,68,73,78,71,32,57,50,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,51,51,48,48,10,51,51,48,48,10,51,51,48,48, 10,51,51,48,48,10,51,51,48,48,10,51,51,48,48,10, 51,51,48,48,10,51,51,48,48,10,51,51,48,48,10,51, 51,48,48,10,51,51,48,48,10,51,51,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,82,104,111,10,69,78,67,79,68,73,78,71, 32,57,50,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,69,48,48,10,54,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,51,48,48,10,55,69,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,83,105,103,109,97,10, 69,78,67,79,68,73,78,71,32,57,51,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 54,48,48,48,10,51,48,48,48,10,49,56,48,48,10,48, 67,48,48,10,48,54,48,48,10,48,54,48,48,10,48,67, 48,48,10,49,56,48,48,10,51,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,84,97,117,10,69,78,67,79,68,73,78,71,32,57, 51,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,85,112,115,105,108,111,110,10, 69,78,67,79,68,73,78,71,32,57,51,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,51,51,48,48,10,49, 69,48,48,10,49,69,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,80,104,105,10,69,78,67,79,68,73,78,71,32,57, 51,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,51,70,48,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,51,70,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,67,104,105,10,69,78,67,79, 68,73,78,71,32,57,51,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,49,56,48,10,54,49,56,48, 10,51,51,48,48,10,51,51,48,48,10,49,69,48,48,10, 49,69,48,48,10,48,67,48,48,10,49,69,48,48,10,49, 69,48,48,10,51,51,48,48,10,51,51,48,48,10,54,49, 56,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,80,115, 105,10,69,78,67,79,68,73,78,71,32,57,51,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,51,70,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,79,109,101,103,97,10,69,78,67,79,68,73, 78,71,32,57,51,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,48,48,10,49,50,48,48, 10,55,51,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,73,111,116,97, 100,105,101,114,101,115,105,115,10,69,78,67,79,68,73,78, 71,32,57,51,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,54,49,56,48,10,54, 49,56,48,10,48,48,48,48,10,55,70,56,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,85,112,115,105,108, 111,110,100,105,101,114,101,115,105,115,10,69,78,67,79,68, 73,78,71,32,57,51,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,54,49,56,48, 10,54,49,56,48,10,48,48,48,48,10,54,49,56,48,10, 51,51,48,48,10,51,51,48,48,10,49,69,48,48,10,49, 69,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,108,112, 104,97,116,111,110,111,115,10,69,78,67,79,68,73,78,71, 32,57,52,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,51,48,48,10,48,54,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,68,56,48, 10,54,51,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,51,56,48,10,54,53,56,48,10,51, 57,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,101,112,115,105,108,111, 110,116,111,110,111,115,10,69,78,67,79,68,73,78,71,32, 57,52,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,51,48,48,10,48,54,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,70,48,48,10, 54,49,56,48,10,54,48,48,48,10,51,69,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,49,56,48,10,51,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,101,116,97,116,111,110,111, 115,10,69,78,67,79,68,73,78,71,32,57,52,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,51,48, 48,10,48,54,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,69,48,48,10,55,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,105,111,116,97,116,111,110,111,115,10,69,78, 67,79,68,73,78,71,32,57,52,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,54,48,48,10,48,67, 48,48,10,49,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,66,48,48,10,48,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,112,115,105,108,111,110,100,105,101,114,101,115,105,115,116, 111,110,111,115,10,69,78,67,79,68,73,78,71,32,57,52, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,54,48,48,10,54,68,56,48,10,55,57,56,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,48,48,10,49,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,108,112,104,97,10,69,78,67, 79,68,73,78,71,32,57,52,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,68,56,48,10,54,51,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,51,56,48,10,54, 53,56,48,10,51,57,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,98, 101,116,97,10,69,78,67,79,68,73,78,71,32,57,52,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 67,48,48,10,51,54,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,54,48,48,10,55,69,48,48,10,54,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,55,66,48,48,10,54,69,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,103,97,109,109,97,10,69,78,67,79, 68,73,78,71,32,57,52,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,51,51,48,48,10,49,69,48,48,10,49,69, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,100,101, 108,116,97,10,69,78,67,79,68,73,78,71,32,57,52,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 69,48,48,10,54,51,48,48,10,51,48,48,48,10,49,56, 48,48,10,48,67,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,101,112,115,105,108,111,110,10,69,78, 67,79,68,73,78,71,32,57,52,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,70,48,48,10,54,49,56,48,10,54,48,48,48, 10,51,69,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,49,56,48,10,51,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 122,101,116,97,10,69,78,67,79,68,73,78,71,32,57,53, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,67,48,48,10,49,56,48,48,10,51, 48,48,48,10,51,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,51,48,48,48,10,49,70,48,48, 10,48,49,56,48,10,48,49,56,48,10,48,70,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,101,116,97,10,69,78,67,79,68, 73,78,71,32,57,53,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 69,48,48,10,55,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,116,104,101, 116,97,10,69,78,67,79,68,73,78,71,32,57,53,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,67, 48,48,10,51,54,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,55,70,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,51,54,48,48,10,49,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,105,111,116,97,10,69,78,67,79,68,73, 78,71,32,57,53,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,66,48,48, 10,48,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,107,97,112,112, 97,10,69,78,67,79,68,73,78,71,32,57,53,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,51,48,48,10, 54,54,48,48,10,55,67,48,48,10,55,67,48,48,10,54, 54,48,48,10,54,51,48,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,108,97,109,98,100,97,10,69,78,67,79,68, 73,78,71,32,57,53,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,48,49,56,48,10,48,49,56,48,10,49, 68,56,48,10,51,51,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,109,117,10, 69,78,67,79,68,73,78,71,32,57,53,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,55,51,56,48,10,55,68,56,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,110,117,10,69,78,67,79,68,73,78,71,32,57,53, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,51,51,48,48,10,49,69,48, 48,10,49,69,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,120,105,10,69,78,67,79,68,73, 78,71,32,57,53,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,48,67,48,48,10,49, 56,48,48,10,51,48,48,48,10,51,48,48,48,10,49,56, 48,48,10,48,70,48,48,10,49,56,48,48,10,51,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,51,70,48,48,10,48,49,56,48,10,48,49,56,48,10, 48,70,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,111,109,105,99, 114,111,110,10,69,78,67,79,68,73,78,71,32,57,53,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,112,105,10,69,78,67,79,68,73,78, 71,32,57,54,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,51,51,48,48,10,51,51,48,48,10,51,51,48,48, 10,51,51,48,48,10,51,51,48,48,10,51,51,48,48,10, 51,51,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,114,104,111,10,69, 78,67,79,68,73,78,71,32,57,54,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,69,48,48,10,51,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,55,51,48,48,10,55,69,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,115,105,103,109,97,49,10,69,78,67,79,68,73,78,71, 32,57,54,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,70,48,48, 10,51,49,56,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,51,48,48,48,10,49, 70,48,48,10,48,49,56,48,10,48,49,56,48,10,48,70, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,115,105,103,109,97,10, 69,78,67,79,68,73,78,71,32,57,54,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,70,56,48,10,51,54,48,48,10,54,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,116,97,117,10,69,78,67,79,68,73,78,71,32,57, 54,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,68,56,48,10,48,55,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,112,115,105,108,111,110,10, 69,78,67,79,68,73,78,71,32,57,54,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,112,104,105,10,69,78,67,79,68,73,78,71,32,57, 54,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,55,48,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,51,70,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,99,104,105,10,69,78,67,79, 68,73,78,71,32,57,54,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,48,48,10,51, 51,48,48,10,49,69,48,48,10,48,67,48,48,10,48,67, 48,48,10,49,69,48,48,10,51,51,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,112,115, 105,10,69,78,67,79,68,73,78,71,32,57,54,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,51,70,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,111,109,101,103,97,10,69,78,67,79,68,73, 78,71,32,57,54,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,55,70,56,48, 10,51,51,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,105,111,116,97, 100,105,101,114,101,115,105,115,10,69,78,67,79,68,73,78, 71,32,57,55,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,68,56,48,10, 48,55,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,112,115,105,108, 111,110,100,105,101,114,101,115,105,115,10,69,78,67,79,68, 73,78,71,32,57,55,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,111,109,105, 99,114,111,110,116,111,110,111,115,10,69,78,67,79,68,73, 78,71,32,57,55,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,51,48,48,10,48,54,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,112,115,105, 108,111,110,116,111,110,111,115,10,69,78,67,79,68,73,78, 71,32,57,55,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,51,48,48,10,48,54,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,111,109,101,103,97, 116,111,110,111,115,10,69,78,67,79,68,73,78,71,32,57, 55,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,51,48,48,10,48,54,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,49,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,55,70,56,48,10,51,51,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,68,48,10, 69,78,67,79,68,73,78,71,32,57,55,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,67,48,48,10, 51,54,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 54,48,48,10,54,69,48,48,10,55,51,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,116,104,101,116,97,49,10,69,78,67,79,68,73,78, 71,32,57,55,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,67,48,48,10,54,54,48,48,10,54,51, 48,48,10,54,51,48,48,10,51,51,48,48,10,49,70,56, 48,10,67,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,51,54,48,48,10, 49,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,85,112,115,105,108, 111,110,49,10,69,78,67,79,68,73,78,71,32,57,55,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 49,56,48,10,66,51,52,48,10,49,50,48,48,10,49,69, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,68,51,10,69,78, 67,79,68,73,78,71,32,57,55,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,66,51, 52,48,10,49,50,48,48,10,53,69,48,48,10,67,67,48, 48,10,56,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,68,52,10,69,78,67,79,68,73,78,71, 32,57,56,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,48,48,48,48,10,54,49,56, 48,10,66,51,52,48,10,49,50,48,48,10,49,69,48,48, 10,49,69,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,112,104,105,49,10,69, 78,67,79,68,73,78,71,32,57,56,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,51,70,48,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,51,70,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,111,109,101,103,97,49,10,69,78,67,79,68,73,78,71, 32,57,56,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,70,70,67,48, 10,54,49,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,55,70,56,48,10,51, 51,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,68, 55,10,69,78,67,79,68,73,78,71,32,57,56,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,48,48, 48,10,49,56,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,48,56,48,10,51,49,56,48,10, 49,66,48,48,10,49,69,48,48,10,49,67,48,48,10,51, 54,48,48,10,54,51,56,48,10,52,49,56,48,10,48,49, 56,48,10,48,51,48,48,10,48,54,48,48,10,49,67,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,68,56,10,69,78,67,79, 68,73,78,71,32,57,56,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,69,48,48,10,51,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,68,57,10,69,78,67,79,68,73,78,71,32,57, 56,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,69,48,48,10,51, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,68,65,10, 69,78,67,79,68,73,78,71,32,57,56,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,70,48,48,10, 49,57,56,48,10,51,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,51,48,48, 48,10,49,70,48,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,55,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,68,66,10,69,78,67,79,68,73, 78,71,32,57,56,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,49,56,48,10,49,70, 48,48,10,51,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,51,48,48,48, 10,49,70,48,48,10,48,49,56,48,10,48,49,56,48,10, 48,55,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,68,67,10,69,78,67,79,68,73,78,71,32,57,56,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,69,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,68,68,10,69,78, 67,79,68,73,78,71,32,57,56,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,70,56,48,10,51,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,51,70,48,48,10,51,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,68,69,10,69,78,67,79,68,73,78,71, 32,57,57,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,67,48,48,48,10,69,48,48,48,10,54,48,48, 48,10,54,49,56,48,10,54,51,56,48,10,54,55,56,48, 10,54,68,56,48,10,55,57,56,48,10,55,49,56,48,10, 54,49,56,48,10,48,49,56,48,10,48,49,67,48,10,48, 48,67,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,68, 70,10,69,78,67,79,68,73,78,71,32,57,57,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,49,56,48,48,10,49,56,48,48, 10,51,48,48,48,10,51,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,55,70,56,48,10,48,49,56,48,10,48, 51,48,48,10,48,51,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,69,48,10,69,78,67,79, 68,73,78,71,32,57,57,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,49,69,48,48,10,49,69,48,48,10, 49,69,48,48,10,51,51,48,48,10,51,51,48,48,10,51, 51,48,48,10,54,55,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,69,49,10,69,78,67,79,68,73,78,71,32,57, 57,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,67,48,48,48,10,54,48,48,48,10,51,48,48,48,10, 49,56,48,48,10,48,67,48,48,10,48,69,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,55,48,48,10,48,70, 48,48,10,49,57,56,48,10,49,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,69,50,10, 69,78,67,79,68,73,78,71,32,57,57,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,68,66,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,51,70,56, 48,10,48,49,56,48,10,51,70,48,48,10,54,48,48,48, 10,54,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,69,51,10,69,78,67,79,68,73, 78,71,32,57,57,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,51,70,56,48,10,48,49,56,48, 10,51,70,48,48,10,54,48,48,48,10,54,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,69,52,10,69,78,67,79,68,73,78,71,32,57,57,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 57,56,48,10,51,68,56,48,10,54,68,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,51,56,48,10,51,55,56, 48,10,49,68,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,69,53,10,69,78, 67,79,68,73,78,71,32,57,57,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,57,56,48,10,51,68,56,48,10,54,68,56,48, 10,54,49,56,48,10,51,51,56,48,10,49,70,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,69,54,10,69,78,67,79,68,73,78,71, 32,57,57,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,56,48,48,10,51,48,48,48,10,51,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,54,48,48, 10,51,66,48,48,10,51,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,55, 57,56,48,10,48,51,48,48,10,51,69,48,48,10,54,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,69, 55,10,69,78,67,79,68,73,78,71,32,57,57,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,51,70,48,48,10,54,68,56,48,10, 51,57,56,48,10,48,49,56,48,10,48,49,56,48,10,51, 57,56,48,10,54,68,56,48,10,54,55,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,69,56,10,69,78,67,79, 68,73,78,71,32,49,48,48,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,51,49,56,48, 10,48,51,48,48,10,49,69,48,48,10,51,48,48,48,10, 54,51,48,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,51,69,57,10,69,78,67,79,68,73,78,71,32, 49,48,48,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,70,48,48, 10,54,49,56,48,10,54,49,56,48,10,51,49,56,48,10, 48,51,48,48,10,48,54,48,48,10,49,67,48,48,10,55, 48,48,48,10,49,67,48,48,10,48,55,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,69, 65,10,69,78,67,79,68,73,78,71,32,49,48,48,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,49, 67,48,10,66,51,52,48,10,51,51,48,48,10,51,51,48, 48,10,49,69,48,48,10,49,69,48,48,10,48,67,48,48, 10,49,69,48,48,10,49,69,48,48,10,51,51,48,48,10, 51,51,48,48,10,54,49,56,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,51,69,66,10,69,78,67, 79,68,73,78,71,32,49,48,48,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,49,67,48,10,66,51,52,48,10,49,69,48,48, 10,48,67,48,48,10,48,67,48,48,10,49,69,48,48,10, 51,51,48,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,69,67,10,69,78,67,79,68,73,78,71, 32,49,48,48,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 49,56,48,10,49,70,48,48,10,51,48,48,48,10,54,48, 48,48,10,54,55,48,48,10,54,68,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,51, 69,68,10,69,78,67,79,68,73,78,71,32,49,48,48,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,49,56,48,10,51,70,48,48,10,54,48,48, 48,10,54,55,48,48,10,54,68,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,69,69,10,69,78, 67,79,68,73,78,71,32,49,48,48,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,69,48,48,10,48, 67,48,48,10,48,67,48,48,10,51,70,48,48,10,54,68, 56,48,10,52,67,56,48,10,50,68,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,49,69,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,51,69,70,10,69,78,67,79,68,73,78, 71,32,49,48,48,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,69, 48,48,10,48,67,56,48,10,51,70,48,48,10,52,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,49,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,70,48,10,69,78,67,79,68,73,78,71,32,49,48,48, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,48,56,48,10,51,49, 56,48,10,49,66,48,48,10,49,69,48,48,10,49,67,48, 48,10,51,54,48,48,10,54,51,48,48,10,52,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,51,70,49,10,69, 78,67,79,68,73,78,71,32,49,48,48,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,55,51,48,48,10,55,69,48,48,10,54,48,48,48, 10,54,48,48,48,10,51,48,48,48,10,49,70,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,70,50,10,69,78,67,79,68,73, 78,71,32,49,48,49,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 70,48,48,10,51,48,56,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,51,48,56, 48,10,49,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,51,70,51,10,69,78,67,79,68,73,78,71,32,49,48, 49,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,48,48,48,10,48,70,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,51,69,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,70,52,10, 69,78,67,79,68,73,78,71,32,49,48,49,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,55,70,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,51,70,53,10,69,78,67,79,68, 73,78,71,32,49,48,49,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,70,48,48,10,51,48,48,48,10,54,48,48,48,10,55, 69,48,48,10,54,48,48,48,10,54,48,48,48,10,51,48, 48,48,10,49,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,70,54,10,69,78,67,79,68,73,78,71,32,49, 48,49,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,67,48,48,10, 48,54,48,48,10,48,51,48,48,10,48,51,48,48,10,51, 70,48,48,10,48,51,48,48,10,48,54,48,48,10,55,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,51,70,55, 10,69,78,67,79,68,73,78,71,32,49,48,49,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,67,48,48,10,54,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,51,48,48,10,55, 67,48,48,10,54,48,48,48,10,54,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,70,56,10,69,78,67,79, 68,73,78,71,32,49,48,49,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,55,69,48,48,10,55,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,55, 51,48,48,10,55,69,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,51,70,57,10,69,78,67,79,68,73,78,71,32, 49,48,49,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,69,48,48,10,51,49,48,48,10,54,48,56, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,56,48,10,51,49,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,70, 65,10,69,78,67,79,68,73,78,71,32,49,48,49,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,49, 56,48,10,55,51,56,48,10,55,70,56,48,10,55,70,56, 48,10,54,68,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,51,70,66,10,69,78,67, 79,68,73,78,71,32,49,48,49,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,49,56,48,10,55,51,56,48,10,55,51,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,48,48,10,69,78,67,79,68,73,78,71, 32,49,48,50,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,51,56,48,48,10,48,67,48,48,10,48, 48,48,48,10,55,70,56,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,55,69,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,49, 48,48,50,51,10,69,78,67,79,68,73,78,71,32,49,48, 50,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,51,51,48,48,10,51,51,48,48,10,48,48,48,48, 10,55,70,56,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,55, 69,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,48,53, 49,10,69,78,67,79,68,73,78,71,32,49,48,50,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,70,70, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,70,48,48,10,49,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,49,57,56,48,10,48, 49,56,48,10,48,51,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,102,105,105,49,48,48,53,50,10,69, 78,67,79,68,73,78,71,32,49,48,50,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,69,48,48, 10,49,56,48,48,10,48,48,48,48,10,55,70,56,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,48,53,51,10,69,78,67,79, 68,73,78,71,32,49,48,50,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,55,70,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,49,48,48,53,52,10,69,78,67,79,68,73,78, 71,32,49,48,50,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,48,48,48,10,54,48,48,48,10,51,48, 48,48,10,49,69,48,48,10,48,51,48,48,10,48,49,56, 48,10,48,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,48,53,53,10,69,78,67,79,68,73,78,71,32,49, 48,51,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,49,48,48, 53,54,10,69,78,67,79,68,73,78,71,32,49,48,51,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 51,51,48,48,10,51,51,48,48,10,48,48,48,48,10,55, 70,56,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,53,55,10, 69,78,67,79,68,73,78,71,32,49,48,51,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,70,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,102,105,105,49,48,48,53,56,10,69,78,67, 79,68,73,78,71,32,49,48,51,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,67,48,48,10,54,67, 48,48,10,54,67,48,48,10,54,67,48,48,10,54,67,48, 48,10,54,70,48,48,10,54,68,48,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,48,48,10,67,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,48,53,57,10,69,78,67,79,68,73, 78,71,32,49,48,51,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,67,48,48,10,54,67,48,48,10, 54,67,48,48,10,54,67,48,48,10,54,67,48,48,10,54, 67,48,48,10,55,70,48,48,10,54,68,48,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,48, 48,10,54,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,49,48,48,54,48,10,69,78,67,79,68,73,78,71,32, 49,48,51,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,70,70,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,66,48,48,10,49,68,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 48,54,49,10,69,78,67,79,68,73,78,71,32,49,48,51, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,51,48,48,10,48,54,48,48,10,48,67,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,51,48,48,10,54, 51,48,48,10,54,54,48,48,10,54,54,48,48,10,55,67, 48,48,10,54,54,48,48,10,54,54,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,52,48,68,10,69, 78,67,79,68,73,78,71,32,49,48,51,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,49,56,48,48, 10,48,67,48,48,10,48,54,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 51,56,48,10,54,55,56,48,10,54,70,56,48,10,55,68, 56,48,10,55,57,56,48,10,55,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,48,54,50,10,69,78,67,79, 68,73,78,71,32,49,48,51,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,70,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,54, 49,56,48,10,51,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,49,48,49,52,53,10,69,78,67,79,68,73,78, 71,32,49,48,51,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,55,70,56,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,48,49,55,10,69,78,67,79,68,73,78,71,32,49, 48,52,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,49,69,48,48,10,51,51,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,55,70,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,49,48,48, 49,56,10,69,78,67,79,68,73,78,71,32,49,48,52,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,69,48, 48,10,54,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,51,48,48,10,55,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,49,57,10, 69,78,67,79,68,73,78,71,32,49,48,52,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,67,48,48, 10,54,54,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,54,48,48,10,55,69,48,48,10,54, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,51,48,48,10,55,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,102,105,105,49,48,48,50,48,10,69,78,67, 79,68,73,78,71,32,49,48,52,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,48,50,49,10,69,78,67,79,68,73, 78,71,32,49,48,52,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,70,48,48,10,49,66,48,48,10, 51,51,48,48,10,51,51,48,48,10,51,51,48,48,10,51, 51,48,48,10,51,51,48,48,10,51,51,48,48,10,51,51, 48,48,10,51,51,48,48,10,51,51,48,48,10,51,51,48, 48,10,55,70,56,48,10,54,49,56,48,10,54,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,49,48,48,50,50,10,69,78,67,79,68,73,78,71,32, 49,48,52,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,55,69,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 48,50,52,10,69,78,67,79,68,73,78,71,32,49,48,52, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,51,70,48,48,10,49,69, 48,48,10,51,70,48,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,102,105,105,49,48,48,50,53, 10,69,78,67,79,68,73,78,71,32,49,48,52,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,69,48, 48,10,51,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,48,49,56,48,10,48,51,48,48,10,48,69,48,48,10, 48,51,48,48,10,48,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,50,54,10,69,78, 67,79,68,73,78,71,32,49,48,52,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,51, 56,48,10,54,55,56,48,10,54,70,56,48,10,55,68,56, 48,10,55,57,56,48,10,55,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,102,105,105,49,48,48,50,55,10,69,78,67,79,68, 73,78,71,32,49,48,52,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,51,56,48,10, 54,55,56,48,10,54,70,56,48,10,55,68,56,48,10,55, 57,56,48,10,55,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,48,50,56,10,69,78,67,79,68,73,78,71, 32,49,48,53,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,51, 48,48,10,54,51,48,48,10,54,54,48,48,10,54,54,48, 48,10,55,67,48,48,10,54,54,48,48,10,54,54,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,49, 48,48,50,57,10,69,78,67,79,68,73,78,71,32,49,48, 53,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,70,56,48,10,49,57,56,48,10,51,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,51, 49,56,48,10,51,49,56,48,10,51,49,56,48,10,51,49, 56,48,10,51,49,56,48,10,55,49,56,48,10,54,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,48,51, 48,10,69,78,67,79,68,73,78,71,32,49,48,53,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,55,51,56,48,10,55,51,56, 48,10,55,70,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,102,105,105,49,48,48,51,49,10,69, 78,67,79,68,73,78,71,32,49,48,53,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,55,70,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,48,51,50,10,69,78,67,79, 68,73,78,71,32,49,48,53,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,49,48,48,51,51,10,69,78,67,79,68,73,78, 71,32,49,48,53,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,48,51,52,10,69,78,67,79,68,73,78,71,32,49, 48,53,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,69,48,48,10,54,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,51,48,48,10,55,69,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,49,48,48, 51,53,10,69,78,67,79,68,73,78,71,32,49,48,53,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,51,54,10, 69,78,67,79,68,73,78,71,32,49,48,53,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,70,56,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,102,105,105,49,48,48,51,55,10,69,78,67, 79,68,73,78,71,32,49,48,53,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,70,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 54,49,56,48,10,51,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,48,51,56,10,69,78,67,79,68,73, 78,71,32,49,48,54,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,51,70,48,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,51,70,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,49,48,48,51,57,10,69,78,67,79,68,73,78,71,32, 49,48,54,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,51,51,48,48,10,49,69,48,48,10,49,69,48,48, 10,48,67,48,48,10,49,69,48,48,10,49,69,48,48,10, 51,51,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 48,52,48,10,69,78,67,79,68,73,78,71,32,49,48,54, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,55,70,67,48, 10,48,48,67,48,10,48,48,67,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,102,105,105,49,48,48,52,49, 10,69,78,67,79,68,73,78,71,32,49,48,54,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,70,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,52,50,10,69,78, 67,79,68,73,78,71,32,49,48,54,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,102,105,105,49,48,48,52,51,10,69,78,67,79,68, 73,78,71,32,49,48,54,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,55,70,67,48,10,48,48,67,48,10,48,48,67, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,48,52,52,10,69,78,67,79,68,73,78,71, 32,49,48,54,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,56,48,48,10,53,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,70,48, 48,10,49,57,56,48,10,49,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,49, 48,48,52,53,10,69,78,67,79,68,73,78,71,32,49,48, 54,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,55,57,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,55,57,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,48,52, 54,10,69,78,67,79,68,73,78,71,32,49,48,54,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,69,48,48,10,54,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,51,48,48,10,55,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,102,105,105,49,48,48,52,55,10,69, 78,67,79,68,73,78,71,32,49,48,54,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,51,70,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,48,52,56,10,69,78,67,79, 68,73,78,71,32,49,48,55,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,55,48,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,55,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,55,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,49,48,48,52,57,10,69,78,67,79,68,73,78, 71,32,49,48,55,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,70,56,48,10,51,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,49,56,48,10,49,70,56,48,10,49,57,56, 48,10,51,49,56,48,10,51,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,48,54,53,10,69,78,67,79,68,73,78,71,32,49, 48,55,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,70,48,48,10, 51,49,56,48,10,48,49,56,48,10,51,70,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,69, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,49,48,48, 54,54,10,69,78,67,79,68,73,78,71,32,49,48,55,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,49,48,48,10,51,69,48,48,10,54,48, 48,48,10,54,48,48,48,10,51,69,48,48,10,55,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,54,55,10, 69,78,67,79,68,73,78,71,32,49,48,55,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,69,48,48,10,54,51,48,48,10,54, 51,48,48,10,55,70,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,55,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,102,105,105,49,48,48,54,56,10,69,78,67, 79,68,73,78,71,32,49,48,55,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,48,54,57,10,69,78,67,79,68,73, 78,71,32,49,48,55,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 70,48,48,10,49,66,48,48,10,51,51,48,48,10,51,51, 48,48,10,51,51,48,48,10,51,51,48,48,10,51,51,48, 48,10,55,70,56,48,10,54,49,56,48,10,54,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,49,48,48,55,48,10,69,78,67,79,68,73,78,71,32, 49,48,55,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,55,70,56,48,10, 54,48,48,48,10,54,48,48,48,10,51,49,56,48,10,49, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 48,55,50,10,69,78,67,79,68,73,78,71,32,49,48,55, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,51,70,48,48,10,51,70,48, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,102,105,105,49,48,48,55,51, 10,69,78,67,79,68,73,78,71,32,49,48,55,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,70,48,48,10,54,49,56,48,10, 48,49,56,48,10,49,70,48,48,10,48,51,48,48,10,48, 49,56,48,10,54,49,56,48,10,51,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,55,52,10,69,78, 67,79,68,73,78,71,32,49,48,56,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,51,56, 48,10,54,55,56,48,10,54,68,56,48,10,55,57,56,48, 10,55,49,56,48,10,54,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,102,105,105,49,48,48,55,53,10,69,78,67,79,68, 73,78,71,32,49,48,56,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,51,48,48,10,49,69,48,48,10,48,48,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,51,56,48,10,54, 55,56,48,10,54,68,56,48,10,55,57,56,48,10,55,49, 56,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,48,55,54,10,69,78,67,79,68,73,78,71, 32,49,48,56,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,51,48,48,10,54,54,48,48,10,55,67,48,48, 10,55,67,48,48,10,54,54,48,48,10,54,51,48,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,49, 48,48,55,55,10,69,78,67,79,68,73,78,71,32,49,48, 56,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,70,56,48,10,49, 57,56,48,10,51,49,56,48,10,51,49,56,48,10,51,49, 56,48,10,51,49,56,48,10,51,49,56,48,10,54,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,48,55, 56,10,69,78,67,79,68,73,78,71,32,49,48,56,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,49,56,48,10,55,51,56,48, 10,55,70,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,49,56,48,10,54,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,102,105,105,49,48,48,55,57,10,69, 78,67,79,68,73,78,71,32,49,48,56,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,55,70,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,48,56,48,10,69,78,67,79, 68,73,78,71,32,49,48,56,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,49,48,48,56,49,10,69,78,67,79,68,73,78, 71,32,49,48,56,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,48,56,50,10,69,78,67,79,68,73,78,71,32,49, 48,56,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,69,48,48,10, 55,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,55,51,48,48,10,54,69, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,49,48,48, 56,51,10,69,78,67,79,68,73,78,71,32,49,48,56,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,70,48,48,10,51,49,56, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,51,49,56,48,10,49,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,56,52,10, 69,78,67,79,68,73,78,71,32,49,48,57,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,102,105,105,49,48,48,56,53,10,69,78,67, 79,68,73,78,71,32,49,48,57,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,51,56,48,10,49,68,56,48,10,48,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,48,56,54,10,69,78,67,79,68,73, 78,71,32,49,48,57,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,51, 70,48,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,51,70,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,49,48,48,56,55,10,69,78,67,79,68,73,78,71,32, 49,48,57,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,49,56,48, 10,51,51,48,48,10,49,69,48,48,10,48,67,48,48,10, 48,67,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 48,56,56,10,69,78,67,79,68,73,78,71,32,49,48,57, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,55,70,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,102,105,105,49,48,48,56,57, 10,69,78,67,79,68,73,78,71,32,49,48,57,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,70,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,57,48,10,69,78, 67,79,68,73,78,71,32,49,48,57,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,102,105,105,49,48,48,57,49,10,69,78,67,79,68, 73,78,71,32,49,48,57,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,55,70,67,48,10,48,48,67,48,10,48,48,67, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,48,57,50,10,69,78,67,79,68,73,78,71, 32,49,48,57,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,70,48,48,10,51,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,51,49,56,48,10, 51,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,49, 48,48,57,51,10,69,78,67,79,68,73,78,71,32,49,48, 57,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,49,56,48,10,54, 49,56,48,10,55,57,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,55,57,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,48,57, 52,10,69,78,67,79,68,73,78,71,32,49,49,48,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,55,70,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,55,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,102,105,105,49,48,48,57,53,10,69, 78,67,79,68,73,78,71,32,49,49,48,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,70,48,48,10,54,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,70,56,48,10,48,49,56, 48,10,54,49,56,48,10,51,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,48,57,54,10,69,78,67,79, 68,73,78,71,32,49,49,48,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,55,48,48,10,54,68,56,48,10,54,68,56,48,10, 55,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,55,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,49,48,48,57,55,10,69,78,67,79,68,73,78, 71,32,49,49,48,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,70, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,70,56,48,10,49,57,56,48,10,51,49,56,48, 10,54,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,53,48,10,69,78,67,79,68,73,78,71,32,49,49,48, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,56,48,48,10,48,67,48,48,10,48, 54,48,48,10,48,48,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,56,48,10,55,70,56,48,10,54,48,48, 48,10,54,48,48,48,10,51,49,56,48,10,49,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,102,105,105,49,48,48,55,49, 10,69,78,67,79,68,73,78,71,32,49,49,48,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,51,48,48,10,51,51,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,55,70,56,48,10,54,48,48,48,10,54, 48,48,48,10,51,49,56,48,10,49,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,57,57,10,69,78, 67,79,68,73,78,71,32,49,49,48,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,55,69,48,48,10,51,48,48,48,10,51,48, 48,48,10,51,54,48,48,10,51,66,48,48,10,51,49,56, 48,10,51,49,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,51,48,48,10,48,54,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,102,105,105,49,48,49,48,48,10,69,78,67,79,68, 73,78,71,32,49,49,48,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,54,48,48, 10,48,67,48,48,10,49,56,48,48,10,48,48,48,48,10, 55,70,56,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,49,48,49,10,69,78,67,79,68,73,78,71, 32,49,49,48,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,70,48, 48,10,54,49,56,48,10,54,48,48,48,10,55,67,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,49,56,48,10, 51,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,49, 48,49,48,50,10,69,78,67,79,68,73,78,71,32,49,49, 48,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,70,48,48,10,54, 49,56,48,10,54,48,48,48,10,51,70,48,48,10,48,49, 56,48,10,48,49,56,48,10,54,49,56,48,10,51,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,49,48, 51,10,69,78,67,79,68,73,78,71,32,49,49,49,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,51,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,102,105,105,49,48,49,48,52,10,69, 78,67,79,68,73,78,71,32,49,49,49,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,51,48,48,10,51,51,48,48,10,48,48,48,48,10,51, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,49,48,53,10,69,78,67,79, 68,73,78,71,32,49,49,49,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,49,56,48,10,48,49,56,48,10,48,48,48,48, 10,48,55,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,51,49,56,48,10,51,49, 56,48,10,51,49,56,48,10,49,70,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,49,48,49,48,54,10,69,78,67,79,68,73,78, 71,32,49,49,49,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,67, 48,48,10,54,67,48,48,10,54,67,48,48,10,54,70,48, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,67,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,49,48,55,10,69,78,67,79,68,73,78,71,32,49, 49,49,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,67,48,48,10, 54,67,48,48,10,54,67,48,48,10,55,70,48,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,49,48,49, 48,56,10,69,78,67,79,68,73,78,71,32,49,49,49,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,70,56, 48,48,10,54,48,48,48,10,54,69,48,48,10,55,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,49,48,57,10, 69,78,67,79,68,73,78,71,32,49,49,49,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,54,48,48,10,48,67,48,48,10,49,56,48,48,10, 48,48,48,48,10,54,51,56,48,10,54,54,48,48,10,54, 54,48,48,10,55,67,48,48,10,55,67,48,48,10,54,54, 48,48,10,54,51,48,48,10,54,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,52,53,68,10,69,78,67,79,68, 73,78,71,32,49,49,49,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,56,48,48, 10,48,67,48,48,10,48,54,48,48,10,48,48,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,51,56,48,10,54, 55,56,48,10,54,68,56,48,10,55,57,56,48,10,55,49, 56,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,49,49,48,10,69,78,67,79,68,73,78,71, 32,49,49,49,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,56,48,10, 49,68,56,48,10,48,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,49, 48,49,57,51,10,69,78,67,79,68,73,78,71,32,49,49, 49,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,55,70,56, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,54,48,10, 69,78,67,79,68,73,78,71,32,49,49,50,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,51,51,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,52,54,49,10,69,78,67,79,68, 73,78,71,32,49,49,50,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,55,70, 56,48,10,51,51,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,49,52,54,10,69,78,67,79,68,73,78,71, 32,49,49,50,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,55,67,48,48,10,55,52, 48,48,10,51,48,48,48,10,51,48,48,48,10,51,69,48, 48,10,51,51,48,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,51,51,48,48,10, 51,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,49, 48,49,57,52,10,69,78,67,79,68,73,78,71,32,49,49, 50,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,50,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,55,69,48,48,10,51, 48,48,48,10,51,70,48,48,10,51,49,56,48,10,51,49, 56,48,10,51,49,56,48,10,51,49,56,48,10,51,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,54,52,10, 69,78,67,79,68,73,78,71,32,49,49,50,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,55,48,48, 10,54,68,56,48,10,54,68,56,48,10,54,67,48,48,10, 54,67,48,48,10,54,67,48,48,10,55,70,48,48,10,54, 67,48,48,10,54,67,48,48,10,54,67,48,48,10,54,68, 56,48,10,54,68,56,48,10,54,55,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,52,54,53,10,69,78,67,79,68, 73,78,71,32,49,49,50,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,55,48,48,10,54,68,56,48,10,54,67,48,48,10,55, 70,48,48,10,54,67,48,48,10,54,67,48,48,10,54,68, 56,48,10,54,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,54,54,10,69,78,67,79,68,73,78,71,32,49, 49,50,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,49,69,48,48,10,51,51,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 55,51,56,48,10,55,70,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,52,54,55, 10,69,78,67,79,68,73,78,71,32,49,49,50,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,49,69,48,48,10, 51,51,48,48,10,55,51,56,48,10,55,70,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,54,56,10,69,78,67,79, 68,73,78,71,32,49,49,50,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,52,52,48,48,10,52,69,48, 48,10,52,65,48,48,10,53,66,48,48,10,53,49,48,48, 10,53,49,48,48,10,55,70,48,48,10,53,53,48,48,10, 53,53,48,48,10,53,53,48,48,10,53,53,48,48,10,53, 53,48,48,10,53,53,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,52,54,57,10,69,78,67,79,68,73,78,71,32, 49,49,50,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,52,52,48,48, 10,52,69,48,48,10,52,65,48,48,10,55,70,48,48,10, 53,53,48,48,10,53,53,48,48,10,53,53,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,54, 65,10,69,78,67,79,68,73,78,71,32,49,49,51,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,70,48,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,52,54,66,10,69,78,67, 79,68,73,78,71,32,49,49,51,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,51,51,48,48,10,49,69,48,48, 10,48,67,48,48,10,49,69,48,48,10,51,70,48,48,10, 54,68,56,48,10,54,68,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,54,67,10,69,78,67,79,68,73,78,71, 32,49,49,51,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,53,70,48,48,10,53,49,48,48,10,53,49, 48,48,10,53,66,48,48,10,52,69,48,48,10,55,67,48, 48,10,52,69,48,48,10,53,70,48,48,10,53,53,48,48, 10,53,53,48,48,10,53,53,48,48,10,53,53,48,48,10, 53,53,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,52, 54,68,10,69,78,67,79,68,73,78,71,32,49,49,51,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,53,70,48,48,10,53,49,48, 48,10,52,65,48,48,10,55,67,48,48,10,52,69,48,48, 10,53,53,48,48,10,53,53,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,54,69,10,69,78, 67,79,68,73,78,71,32,49,49,51,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,51,51,48,48,10, 49,69,48,48,10,48,67,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,48,51,48,48,10,48,69,48,48,10,48,51,48, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,51,48,48,10,51,69,48,48,10,54,48,48,48,10, 54,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,52,54,70,10,69,78,67,79,68,73,78, 71,32,49,49,51,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,51,48,48,10,49, 69,48,48,10,48,67,48,48,10,48,48,48,48,10,51,70, 48,48,10,54,49,56,48,10,54,49,56,48,10,48,51,48, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,51,70,48,48,10,54,48,48,48,10,54,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,55,48,10,69,78,67,79,68,73,78,71,32,49,49,51, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,51,70, 48,48,10,49,69,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,52,55,49,10,69, 78,67,79,68,73,78,71,32,49,49,51,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,51,70,48,48,10,49,69,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,49,52,55,10,69,78,67,79, 68,73,78,71,32,49,49,51,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,55,70,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,49,48,49,57,53,10,69,78,67,79,68,73,78, 71,32,49,49,51,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,55,70,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,49,52,56,10,69,78,67,79,68,73,78,71,32,49, 49,52,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,51,48,48,10,54,51,48,48, 10,54,54,48,48,10,54,54,48,48,10,54,54,48,48,10, 54,54,48,48,10,51,67,48,48,10,51,67,48,48,10,51, 67,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,49,48,49, 57,54,10,69,78,67,79,68,73,78,71,32,49,49,52,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,49,56,48,10,54,51,48, 48,10,54,54,48,48,10,54,54,48,48,10,51,67,48,48, 10,51,67,48,48,10,49,56,48,48,10,49,56,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,55,54,10,69,78, 67,79,68,73,78,71,32,49,49,52,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 54,54,48,48,10,51,51,48,48,10,48,48,48,48,10,54, 49,56,48,10,54,51,48,48,10,54,51,48,48,10,54,54, 48,48,10,54,54,48,48,10,54,54,48,48,10,54,54,48, 48,10,51,67,48,48,10,51,67,48,48,10,51,67,48,48, 10,49,56,48,48,10,49,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,52,55,55,10,69,78,67,79,68,73,78, 71,32,49,49,52,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 54,48,48,10,51,51,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,51,48,48,10,54,54,48,48,10,54,54,48, 48,10,51,67,48,48,10,51,67,48,48,10,49,56,48,48, 10,49,56,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,55,56,10,69,78,67,79,68,73,78,71,32,49,49,52, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,48,48,48,10,68,56,48,48,10,68,56,48,48,10,68, 56,48,48,10,68,56,48,48,10,68,69,67,48,10,68,69, 67,48,10,68,69,67,48,10,68,65,67,48,10,68,66,67, 48,10,68,57,67,48,10,68,57,56,48,10,55,49,56,48, 10,48,51,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,52,55,57,10,69, 78,67,79,68,73,78,71,32,49,49,52,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,54,67,48,10,68,69,67,48,10,68,69, 67,48,10,68,65,67,48,10,68,66,67,48,10,68,57,67, 48,10,68,57,56,48,10,55,49,56,48,10,48,51,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,55,65,10,69,78,67,79,68,73, 78,71,32,49,49,52,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,49,69,48,48,10,51,70,48,48,10, 54,68,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,68,56,48,10,51,70,48, 48,10,49,69,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,52,55,66,10,69,78,67,79,68,73,78,71,32,49,49, 52,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,69,48,48,10,51, 70,48,48,10,54,68,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,68,56,48,10,51,70,48,48,10,49,69,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,55,67,10, 69,78,67,79,68,73,78,71,32,49,49,52,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,51,70,48,48,10,54,49,56,48,10,48,48,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,51,51,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,52,55,68,10,69,78,67,79,68, 73,78,71,32,49,49,52,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,70,48,48,10,54,49,56,48,10,48,48,48,48,10, 54,49,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,55,70, 56,48,10,51,51,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,55,69,10,69,78,67,79,68,73,78,71,32,49, 49,53,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,55,70,56,48,10,52,67,56, 48,10,48,48,48,48,10,51,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,51,51, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,52,55,70, 10,69,78,67,79,68,73,78,71,32,49,49,53,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,52,67,56,48, 10,48,48,48,48,10,54,49,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,55,70,56,48,10,51,51,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,56,48,10,69,78,67,79, 68,73,78,71,32,49,49,53,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,51, 48,48,48,10,49,69,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,52,56,49,10,69,78,67,79,68,73,78,71,32, 49,49,53,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,70,48,48, 10,51,49,56,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,51,48,48,48,10,49, 67,48,48,10,48,54,48,48,10,48,54,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,56, 50,10,69,78,67,79,68,73,78,71,32,49,49,53,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,49,56,48,10,48,51,48,48,10,49,66,48, 48,10,48,69,48,48,10,48,55,48,48,10,48,68,56,48, 10,54,67,48,48,10,51,56,48,48,10,49,67,48,48,10, 51,54,48,48,10,51,48,48,48,10,54,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,52,56,51,10,69,78,67, 79,68,73,78,71,32,49,49,53,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,54,48,48,10,55, 69,48,48,10,54,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,56,52,10,69,78,67,79,68,73,78,71, 32,49,49,53,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,51,67,48,48,10,54,54,48,48,10,67, 54,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,52, 56,53,10,69,78,67,79,68,73,78,71,32,49,49,53,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 54,48,48,48,10,55,67,48,48,10,54,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,56,54,10,69,78, 67,79,68,73,78,71,32,49,49,53,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,67,48,48,10, 55,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,52,56,56,10,69,78,67,79,68,73,78, 71,32,49,49,54,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,52,48,48,10,52,65,48,48,10, 65,48,56,48,10,48,49,52,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,52,48,48,48,10,65,48,56,48,10, 48,57,52,48,10,49,52,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,56,57,10,69,78,67,79,68,73,78,71,32,49,49,54, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,52,48,48,10,52,56,52,48,10,56,67,56,48,10, 67,48,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,67,48,67,48,10,52,67,52,48,10,56,52,56,48,10, 48,56,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,52,56,65,10,69, 78,67,79,68,73,78,71,32,49,49,54,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 51,56,48,10,54,55,56,48,10,54,70,56,48,10,55,68, 56,48,10,55,57,56,48,10,55,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,67,48,10,48,48,67,48, 10,48,49,56,48,10,48,51,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,56,66,10,69,78,67,79,68,73, 78,71,32,49,49,54,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,51,48,48,10,49,69,48,48,10,48,48,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,51,56,48,10,54,55, 56,48,10,54,68,56,48,10,55,57,56,48,10,55,49,56, 48,10,54,49,67,48,10,48,48,67,48,10,48,49,56,48, 10,48,51,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,52,56,67,10,69,78,67,79,68,73,78,71,32,49,49, 54,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,70,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,55,69,48,48,10,54, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,51,48,48,10,55,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,56,68,10, 69,78,67,79,68,73,78,71,32,49,49,54,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,48,48,48,10,70,48,48,48,10,54, 48,48,48,10,55,70,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,55,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,52,56,69,10,69,78,67,79,68, 73,78,71,32,49,49,54,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,69,48,48,10,54,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,68,56,48,10,54,55,48,48,10,55,70,48,48,10,54, 49,56,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,56,70,10,69,78,67,79,68,73,78,71,32,49, 49,54,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,69,48,48,10, 55,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,68,56,48,10,55,55,48,48,10,54,70, 48,48,10,54,49,56,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,49,48,48, 53,48,10,69,78,67,79,68,73,78,71,32,49,49,54,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,49,56,48,10,48, 49,56,48,10,55,70,56,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,57,56,10, 69,78,67,79,68,73,78,71,32,49,49,54,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,49,56,48,10, 48,49,56,48,10,55,70,56,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,52,57,50,10,69,78,67,79,68, 73,78,71,32,49,49,55,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,70,56,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,55,69,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,57,51,10,69,78,67,79,68,73,78,71,32,49, 49,55,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,70,56,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,55, 70,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,52,57,52, 10,69,78,67,79,68,73,78,71,32,49,49,55,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,69,48,48,10, 54,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,49, 56,48,10,48,51,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,57,53,10,69,78,67,79, 68,73,78,71,32,49,49,55,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,55,69,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,48,51,48,48,10,48,54, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,52,57,54,10,69,78,67,79,68,73,78,71,32, 49,49,55,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,51,70,48,48, 10,49,69,48,48,10,51,70,48,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,67,48,10,48,48,67,48,10,48,48,67,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,57, 55,10,69,78,67,79,68,73,78,71,32,49,49,55,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,51,70,48,48,10,51,70,48,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,67,48,10,48, 48,67,48,10,48,48,67,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,52,57,56,10,69,78,67, 79,68,73,78,71,32,49,49,55,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,48,49,56, 48,10,48,51,48,48,10,48,69,48,48,10,48,51,48,48, 10,48,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,51,48,48,10,49,69,48,48,10,48,67,48,48,10,48, 67,48,48,10,49,56,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,57,57,10,69,78,67,79,68,73,78,71, 32,49,49,55,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,70,48, 48,10,54,49,56,48,10,48,49,56,48,10,49,70,48,48, 10,48,49,56,48,10,48,49,56,48,10,54,49,56,48,10, 51,70,48,48,10,48,67,48,48,10,48,67,48,48,10,49, 56,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,52, 57,65,10,69,78,67,79,68,73,78,71,32,49,49,55,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 48,56,48,10,54,49,56,48,10,54,51,48,48,10,54,51, 48,48,10,54,54,48,48,10,54,54,48,48,10,55,67,48, 48,10,54,54,48,48,10,54,54,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,49,67,48,10,54,49,67,48,10, 48,48,67,48,10,48,48,67,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,57,66,10,69,78, 67,79,68,73,78,71,32,49,49,55,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,49,48,48,10,54,51,48,48,10,54,54,48, 48,10,55,67,48,48,10,55,67,48,48,10,54,54,48,48, 10,54,51,48,48,10,54,49,67,48,10,48,48,67,48,10, 48,48,67,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,52,57,67,10,69,78,67,79,68,73,78, 71,32,49,49,56,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,51,48,48,10,54, 51,48,48,10,54,66,48,48,10,54,66,48,48,10,54,66, 48,48,10,55,69,48,48,10,54,66,48,48,10,54,66,48, 48,10,54,66,48,48,10,54,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,57,68,10,69,78,67,79,68,73,78,71,32,49,49,56, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,54,57, 56,48,10,54,66,48,48,10,55,70,48,48,10,55,70,48, 48,10,54,66,48,48,10,54,57,56,48,10,54,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,52,57,69,10,69, 78,67,79,68,73,78,71,32,49,49,56,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,48,56,48,10, 54,49,56,48,10,70,66,48,48,10,54,51,48,48,10,54, 54,48,48,10,54,54,48,48,10,55,67,48,48,10,54,54, 48,48,10,54,54,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,57,70,10,69,78,67,79,68,73, 78,71,32,49,49,56,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,70,56,48,48,10,54,48,48,48,10,54, 51,48,48,10,54,54,48,48,10,54,67,48,48,10,55,56, 48,48,10,55,67,48,48,10,54,54,48,48,10,54,51,48, 48,10,54,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,52,65,48,10,69,78,67,79,68,73,78,71,32,49,49, 56,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,48,56,48,10,54,49,56,48,10,54,51,48,48,10, 54,51,48,48,10,54,54,48,48,10,54,54,48,48,10,55, 67,48,48,10,54,54,48,48,10,54,54,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,65,49,10, 69,78,67,79,68,73,78,71,32,49,49,56,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,49,56,48,10,54,51,48,48,10,54, 54,48,48,10,55,67,48,48,10,55,67,48,48,10,54,54, 48,48,10,54,51,48,48,10,54,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,52,65,50,10,69,78,67,79,68, 73,78,71,32,49,49,56,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,55,70,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,67,48,10,48,48,67,48,10,48,48,67, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,65,51,10,69,78,67,79,68,73,78,71,32,49, 49,56,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,55,70,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 67,48,10,48,48,67,48,10,48,48,67,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,52,65,52, 10,69,78,67,79,68,73,78,71,32,49,49,56,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,67,70,67, 48,10,67,67,48,48,10,67,67,48,48,10,67,67,48,48, 10,67,67,48,48,10,67,67,48,48,10,70,67,48,48,10, 67,67,48,48,10,67,67,48,48,10,67,67,48,48,10,67, 67,48,48,10,67,67,48,48,10,67,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,65,53,10,69,78,67,79, 68,73,78,71,32,49,49,56,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,70,56,48,10,54,67,48,48,10,54,67,48,48,10, 55,67,48,48,10,54,67,48,48,10,54,67,48,48,10,54, 67,48,48,10,54,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,52,65,54,10,69,78,67,79,68,73,78,71,32, 49,49,57,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,70,67,48,48,10,67,67,48,48,10,67,67,48, 48,10,67,67,48,48,10,67,67,48,48,10,67,67,48,48, 10,67,70,48,48,10,67,68,56,48,10,67,68,56,48,10, 67,68,56,48,10,67,68,56,48,10,67,68,56,48,10,67, 68,56,48,10,48,49,56,48,10,48,51,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,65, 55,10,69,78,67,79,68,73,78,71,32,49,49,57,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,67,48,48,10,54,67,48,48, 10,54,67,48,48,10,54,70,48,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,48, 49,56,48,10,48,51,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,52,65,56,10,69,78,67, 79,68,73,78,71,32,49,49,57,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,67,48,48,10,54,48, 48,48,10,67,48,48,48,10,67,48,48,48,10,67,48,48, 48,10,67,48,48,48,10,67,54,48,48,10,67,70,48,48, 10,68,57,56,48,10,68,57,56,48,10,67,70,48,48,10, 54,54,48,48,10,51,70,48,48,10,48,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,65,57,10,69,78,67,79,68,73,78,71, 32,49,49,57,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,69,48, 48,10,51,48,48,48,10,54,48,48,48,10,54,55,48,48, 10,54,68,56,48,10,54,68,56,48,10,51,68,56,48,10, 49,70,48,48,10,48,54,48,48,10,48,51,56,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,52, 65,65,10,69,78,67,79,68,73,78,71,32,49,49,57,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,54,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,65,66,10,69,78, 67,79,68,73,78,71,32,49,49,57,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,70,48,48,10,51,49,56,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,51,49,56,48,10,49,70,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,54,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,52,65,67,10,69,78,67,79,68,73,78, 71,32,49,49,57,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,69,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,65,68,10,69,78,67,79,68,73,78,71,32,49,49,57, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,69,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,52,65,69,10,69, 78,67,79,68,73,78,71,32,49,49,57,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,51,51,48,48,10,49, 69,48,48,10,49,69,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,65,70,10,69,78,67,79,68,73, 78,71,32,49,49,57,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,52,66,48,10,69,78,67,79,68,73,78,71,32,49,50, 48,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 51,51,48,48,10,49,69,48,48,10,49,69,48,48,10,48, 67,48,48,10,51,70,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,66,49,10, 69,78,67,79,68,73,78,71,32,49,50,48,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,51,70,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,52,66,50,10,69,78,67,79,68, 73,78,71,32,49,50,48,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,49,56,48,10,54,49,56,48, 10,51,51,48,48,10,51,51,48,48,10,49,69,48,48,10, 49,69,48,48,10,48,67,48,48,10,49,69,48,48,10,49, 69,48,48,10,51,51,48,48,10,51,51,48,48,10,54,49, 67,48,10,54,49,67,48,10,48,48,67,48,10,48,48,67, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,66,51,10,69,78,67,79,68,73,78,71,32,49, 50,48,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 51,51,48,48,10,49,69,48,48,10,48,67,48,48,10,48, 67,48,48,10,49,69,48,48,10,51,51,48,48,10,54,49, 67,48,10,48,48,67,48,10,48,48,67,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,52,66,52, 10,69,78,67,79,68,73,78,71,32,49,50,48,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,70,68,56, 48,10,51,49,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,51, 49,56,48,10,51,49,56,48,10,51,70,67,48,10,48,48, 67,48,10,48,48,67,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,66,53,10,69,78,67,79, 68,73,78,71,32,49,50,48,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,68,56,48,10,51,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,51, 49,56,48,10,51,70,67,48,10,48,48,67,48,10,48,48, 67,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,52,66,54,10,69,78,67,79,68,73,78,71,32, 49,50,48,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,70,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,67,48,10,48, 49,67,48,10,48,48,67,48,10,48,48,67,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,66, 55,10,69,78,67,79,68,73,78,71,32,49,50,48,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,70,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,67,48,10,48, 48,67,48,10,48,48,67,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,52,66,56,10,69,78,67, 79,68,73,78,71,32,49,50,48,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,57,56,48,10,54,57,56,48,10,51,70,56,48, 10,48,57,56,48,10,48,57,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,66,57,10,69,78,67,79,68,73,78,71, 32,49,50,48,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,57,56,48,10,54,57,56,48, 10,51,70,56,48,10,48,57,56,48,10,48,57,56,48,10, 48,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,52, 66,65,10,69,78,67,79,68,73,78,71,32,49,50,49,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,55,70,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,66,66,10,69,78, 67,79,68,73,78,71,32,49,50,49,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,67,48,48,10,55,54,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,52,66,67,10,69,78,67,79,68,73,78, 71,32,49,50,49,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,69,48,48,10,49,66,48,48,10,51, 49,56,48,10,66,49,56,48,10,66,49,56,48,10,55,70, 56,48,10,51,48,48,48,10,51,48,48,48,10,51,48,48, 48,10,51,48,48,48,10,51,49,56,48,10,49,66,48,48, 10,48,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,66,68,10,69,78,67,79,68,73,78,71,32,49,50,49, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,70,48,48,10,57,57, 56,48,10,66,49,56,48,10,55,70,56,48,10,51,48,48, 48,10,51,48,48,48,10,49,57,56,48,10,48,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,52,66,69,10,69, 78,67,79,68,73,78,71,32,49,50,49,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,69,48,48,10, 49,66,48,48,10,51,49,56,48,10,66,49,56,48,10,66, 49,56,48,10,55,70,56,48,10,51,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,51,48,48,48,10,51,49,56, 48,10,49,66,48,48,10,48,69,48,48,10,48,54,48,48, 10,48,54,56,48,10,48,51,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,66,70,10,69,78,67,79,68,73, 78,71,32,49,50,49,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 70,48,48,10,57,57,56,48,10,66,49,56,48,10,55,70, 56,48,10,51,48,48,48,10,51,48,48,48,10,49,57,56, 48,10,48,70,48,48,10,48,54,48,48,10,48,54,56,48, 10,48,51,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,52,67,48,10,69,78,67,79,68,73,78,71,32,49,50, 49,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,67,49,10, 69,78,67,79,68,73,78,71,32,49,50,49,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,51,70,48,48,10,49,69,48,48,10,51, 70,48,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,52,67,50,10,69,78,67,79,68, 73,78,71,32,49,50,49,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,51,48,48,10,49,69,48,48,10,48,48,48,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,51, 70,48,48,10,51,70,48,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,67,51,10,69,78,67,79,68,73,78,71,32,49, 50,49,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,48,56,48,10,54,49,56,48,10,54,51,48,48, 10,54,51,48,48,10,54,54,48,48,10,54,54,48,48,10, 55,69,48,48,10,54,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,48,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,52,67,52, 10,69,78,67,79,68,73,78,71,32,49,50,50,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,51,48,48,10, 54,54,48,48,10,55,67,48,48,10,55,70,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,49, 56,48,10,49,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,67,53,10,69,78,67,79, 68,73,78,71,32,49,50,50,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,70,56,48,10,49,57,56, 48,10,51,49,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,55, 49,56,48,10,54,49,67,48,10,48,48,67,48,10,48,49, 56,48,10,48,51,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,52,67,54,10,69,78,67,79,68,73,78,71,32, 49,50,50,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,70,56,48, 10,49,57,56,48,10,51,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,54, 49,67,48,10,48,48,67,48,10,48,49,56,48,10,48,51, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,67, 55,10,69,78,67,79,68,73,78,71,32,49,50,50,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,55,70,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,48, 49,56,48,10,49,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,52,67,56,10,69,78,67, 79,68,73,78,71,32,49,50,50,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,55,70,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,48,49,56,48,10,49, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,67,57,10,69,78,67,79,68,73,78,71, 32,49,50,50,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,55,70,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,67,48,10,48,48,67,48,10,48,49,56,48,10,48, 51,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,52, 67,65,10,69,78,67,79,68,73,78,71,32,49,50,50,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,55,70,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,67,48,10, 48,48,67,48,10,48,49,56,48,10,48,51,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,67,66,10,69,78, 67,79,68,73,78,71,32,49,50,50,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,70,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,51,56,48,10,48,51,48,48,10, 48,51,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,52,67,67,10,69,78,67,79,68,73,78, 71,32,49,50,50,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,70,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,51,56,48,10,48,51,48,48,10,48,51,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,67,68,10,69,78,67,79,68,73,78,71,32,49,50,50, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,49,56,48,10,54,49,56,48,10,55,51,56,48,10,55, 51,56,48,10,55,70,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,67,48, 10,48,48,67,48,10,48,49,56,48,10,48,51,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,52,67,69,10,69, 78,67,79,68,73,78,71,32,49,50,51,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,55,51,56,48,10,55,70, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,49,56,48,10,54,49,67,48,10,48,48,67,48, 10,48,49,56,48,10,48,51,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,68,48,10,69,78,67,79,68,73, 78,71,32,49,50,51,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,67,48,48,10, 49,69,48,48,10,51,51,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,55,70,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,52,68,49,10,69,78,67,79,68,73,78,71,32,49,50, 51,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,51,48,48,10, 49,69,48,48,10,48,48,48,48,10,49,70,48,48,10,51, 49,56,48,10,48,49,56,48,10,51,70,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,69,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,68,50,10, 69,78,67,79,68,73,78,71,32,49,50,51,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,51,51,48,48,10,51,51,48,48,10,48,48,48,48, 10,48,67,48,48,10,49,69,48,48,10,51,51,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,55, 70,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,52,68,51,10,69,78,67,79,68, 73,78,71,32,49,50,51,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,51,48,48,10,51,51,48,48,10,48,48,48,48,10, 51,70,48,48,10,54,49,56,48,10,48,49,56,48,10,51, 70,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,69,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,68,52,10,69,78,67,79,68,73,78,71,32,49, 50,51,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,70,56,48,10,49,69,48,48,10,51,54,48,48, 10,51,54,48,48,10,54,54,48,48,10,54,54,48,48,10, 55,70,56,48,10,54,54,48,48,10,54,54,48,48,10,54, 54,48,48,10,54,54,48,48,10,54,54,48,48,10,54,55, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,52,68,53, 10,69,78,67,79,68,73,78,71,32,49,50,51,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,66,48,48,10,52,68,56,48,10, 48,68,56,48,10,48,70,48,48,10,51,67,48,48,10,54, 67,48,48,10,54,67,56,48,10,51,55,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,68,54,10,69,78,67,79, 68,73,78,71,32,49,50,51,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,55,70,56, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,55,69,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,52,68,55,10,69,78,67,79,68,73,78,71,32, 49,50,51,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,55,70,56,48,10, 54,48,48,48,10,54,48,48,48,10,51,49,56,48,10,49, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,68, 56,10,69,78,67,79,68,73,78,71,32,49,50,52,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,55,70,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,51,48,48,10,51,51,48,48,10,49,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,102,105,105,49,48,56,52,54,10,69, 78,67,79,68,73,78,71,32,49,50,52,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,69,48,48,10,54,51,48,48,10,48,49, 56,48,10,48,49,56,48,10,55,70,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,68,65,10,69,78,67,79,68,73, 78,71,32,49,50,52,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,51,51,48,48, 10,51,51,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,55,70,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,52,68,66,10,69,78,67,79,68,73,78,71,32,49,50, 52,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,51,48,48,10, 51,51,48,48,10,48,48,48,48,10,51,69,48,48,10,54, 51,48,48,10,48,49,56,48,10,48,49,56,48,10,55,70, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,68,67,10, 69,78,67,79,68,73,78,71,32,49,50,52,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,51,51,48,48,10,51,51,48,48,10,48,48,48,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,51,70,48,48,10,49,69,48,48,10,51, 70,48,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,52,68,68,10,69,78,67,79,68, 73,78,71,32,49,50,52,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,51,48,48,10,51,51,48,48,10,48,48,48,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,51, 70,48,48,10,51,70,48,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,68,69,10,69,78,67,79,68,73,78,71,32,49, 50,52,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,51,51,48,48,10,51,51,48, 48,10,48,48,48,48,10,49,69,48,48,10,51,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,48,51,48,48,10, 48,69,48,48,10,48,51,48,48,10,48,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,52,68,70, 10,69,78,67,79,68,73,78,71,32,49,50,52,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,51,48,48,10,51,51,48,48, 10,48,48,48,48,10,51,70,48,48,10,54,49,56,48,10, 48,49,56,48,10,48,70,48,48,10,48,55,48,48,10,48, 49,56,48,10,54,49,56,48,10,51,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,69,48,10,69,78,67,79, 68,73,78,71,32,49,50,52,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,70,56,48,10,48,49,56, 48,10,48,51,48,48,10,48,51,48,48,10,48,54,48,48, 10,49,69,48,48,10,48,51,48,48,10,48,49,56,48,10, 48,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,52,69,49,10,69,78,67,79,68,73,78,71,32, 49,50,52,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,48,49,56,48, 10,48,51,48,48,10,48,51,48,48,10,48,54,48,48,10, 49,69,48,48,10,48,51,48,48,10,48,49,56,48,10,48, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,69, 50,10,69,78,67,79,68,73,78,71,32,49,50,53,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,55,70,56,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,51,56,48,10,54,55,56,48,10,54,70,56,48, 10,55,68,56,48,10,55,57,56,48,10,55,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,52,69,51,10,69,78,67, 79,68,73,78,71,32,49,50,53,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,70,56,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,51,56,48, 10,54,55,56,48,10,54,68,56,48,10,55,57,56,48,10, 55,49,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,69,52,10,69,78,67,79,68,73,78,71, 32,49,50,53,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,51,51,48,48,10,51, 51,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,51,56,48,10,54,55,56, 48,10,54,70,56,48,10,55,68,56,48,10,55,57,56,48, 10,55,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,52, 69,53,10,69,78,67,79,68,73,78,71,32,49,50,53,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,51,48,48,10,51,51, 48,48,10,48,48,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,51,56,48,10,54,55,56,48,10,54,68,56,48, 10,55,57,56,48,10,55,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,69,54,10,69,78, 67,79,68,73,78,71,32,49,50,53,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 51,51,48,48,10,51,51,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,51,51,48,48,10,49,69,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,52,69,55,10,69,78,67,79,68,73,78, 71,32,49,50,53,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 51,48,48,10,51,51,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,69,56,10,69,78,67,79,68,73,78,71,32,49,50,53, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,69,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,55,70, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,48,48,10,49,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,52,69,57,10,69, 78,67,79,68,73,78,71,32,49,50,53,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,54,49, 56,48,10,55,70,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,69,65,10,69,78,67,79,68,73, 78,71,32,49,50,53,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,51,51,48,48, 10,51,51,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,55,70,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,52,69,66,10,69,78,67,79,68,73,78,71,32,49,50, 53,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,51,48,48,10, 51,51,48,48,10,48,48,48,48,10,49,69,48,48,10,51, 51,48,48,10,54,49,56,48,10,55,70,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,69,67,10, 69,78,67,79,68,73,78,71,32,49,50,54,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,51,51,48,48,10,51,51,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,51,70,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,52,69,68,10,69,78,67,79,68, 73,78,71,32,49,50,54,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,51,48,48,10,51,51,48,48,10,48,48,48,48,10, 51,70,48,48,10,54,49,56,48,10,48,49,56,48,10,49, 70,56,48,10,48,49,56,48,10,48,49,56,48,10,54,49, 56,48,10,51,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,69,69,10,69,78,67,79,68,73,78,71,32,49, 50,54,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,55,70,56,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,70,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,54,49,56,48,10,51,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,52,69,70, 10,69,78,67,79,68,73,78,71,32,49,50,54,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,70,56,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,56,48,10,49,68,56,48,10,48,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,70,48,10,69,78,67,79, 68,73,78,71,32,49,50,54,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,51,51, 48,48,10,51,51,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,70,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,54,49,56,48,10,51,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,52,70,49,10,69,78,67,79,68,73,78,71,32, 49,50,54,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,51,48, 48,10,51,51,48,48,10,48,48,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,56,48,10,49, 68,56,48,10,48,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,70, 50,10,69,78,67,79,68,73,78,71,32,49,50,54,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,49, 57,56,48,10,51,51,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,70,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,54,49,56,48,10,51,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,52,70,51,10,69,78,67, 79,68,73,78,71,32,49,50,54,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,57,56,48,10,51,51,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,51,56,48,10,49,68,56,48,10,48,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,70,52,10,69,78,67,79,68,73,78,71, 32,49,50,54,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,51,51,48,48,10,51, 51,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,70,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,52, 70,53,10,69,78,67,79,68,73,78,71,32,49,50,54,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,51,48,48,10,51,51, 48,48,10,48,48,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,70,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,70,56,10,69,78, 67,79,68,73,78,71,32,49,50,55,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 51,51,48,48,10,51,51,48,48,10,48,48,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,55,57,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,55,57,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,52,70,57,10,69,78,67,79,68,73,78, 71,32,49,50,55,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 51,48,48,10,51,51,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,55,57,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,55,57,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,48,48,10,69,78,67,79,68,73,78,71,32,49,50,56, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,49,70,56,48,10,51,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,49,56,48,10,49,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,53,48,49,10,69, 78,67,79,68,73,78,71,32,49,50,56,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,49,68,56,48,10,51,51,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,56,48,10,49,68,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,53,48,50,10,69,78,67,79,68,73, 78,71,32,49,50,56,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,51,67,48,48,10,54, 67,48,48,10,67,68,56,48,10,67,68,56,48,10,67,68, 56,48,10,67,68,56,48,10,67,68,56,48,10,54,68,56, 48,10,51,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,53,48,51,10,69,78,67,79,68,73,78,71,32,49,50, 56,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,50,67,48,48,10,55, 67,48,48,10,67,68,56,48,10,67,68,56,48,10,67,68, 56,48,10,67,68,56,48,10,55,68,56,48,10,51,55,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,48,52,10, 69,78,67,79,68,73,78,71,32,49,50,56,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,48,48,48, 10,68,56,48,48,10,67,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,49,56,48,48,10,55,49,56,48,10,49, 57,56,48,10,48,68,56,48,10,48,68,56,48,10,48,68, 56,48,10,48,68,56,48,10,48,55,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,53,48,53,10,69,78,67,79,68, 73,78,71,32,49,50,56,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,56,48,48,10,67,67,48,48,10,48,67,48,48,10,51, 56,48,48,10,48,68,56,48,10,48,68,56,48,10,48,68, 56,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,53,48,54,10,69,78,67,79,68,73,78,71,32,49, 50,56,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,67,48,48,10,54,54,48,48,10,67,51,48,48, 10,67,51,48,48,10,48,51,48,48,10,48,54,48,48,10, 49,67,48,48,10,48,54,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 56,48,10,48,49,56,48,10,48,51,48,48,10,48,54,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,53,48,55, 10,69,78,67,79,68,73,78,71,32,49,50,56,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,69,48,48,10,67,51,48,48,10, 48,51,48,48,10,51,69,48,48,10,48,54,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,56,48,10,48,49, 56,48,10,48,51,48,48,10,48,54,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,48,56,10,69,78,67,79, 68,73,78,71,32,49,50,56,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,67,48,48,10,54,67,48, 48,10,54,67,48,48,10,54,67,48,48,10,54,67,48,48, 10,54,67,48,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,69, 70,56,48,10,67,55,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,53,48,57,10,69,78,67,79,68,73,78,71,32, 49,50,56,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,67,48,48, 10,54,67,48,48,10,54,67,48,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,67, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,53,48, 65,10,69,78,67,79,68,73,78,71,32,49,50,57,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,67, 48,48,10,54,67,48,48,10,54,67,48,48,10,54,67,48, 48,10,54,67,48,48,10,54,67,48,48,10,55,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,55,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,53,48,66,10,69,78,67, 79,68,73,78,71,32,49,50,57,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,67,48,48,10,54,67,48,48,10,54,67,48,48, 10,55,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,55,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,48,67,10,69,78,67,79,68,73,78,71, 32,49,50,57,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,54,49, 56,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,55,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,53, 48,68,10,69,78,67,79,68,73,78,71,32,49,50,57,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,48,48,48,10,54,55,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,53,48,69,10,69,78, 67,79,68,73,78,71,32,49,50,57,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,68,56,48,10,48,68,56, 48,10,48,68,56,48,10,48,68,56,48,10,48,68,56,48, 10,48,68,56,48,10,48,55,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,53,48,70,10,69,78,67,79,68,73,78, 71,32,49,50,57,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 56,48,10,48,67,48,48,10,48,67,48,48,10,48,68,56, 48,10,48,68,56,48,10,48,68,56,48,10,48,68,56,48, 10,48,55,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,51,49,10,69,78,67,79,68,73,78,71,32,49,51,50, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,54,48,48,10,54,54,48,48,10,54,54,48,48,10,54, 54,48,48,10,54,54,48,48,10,54,54,48,48,10,54,54, 48,48,10,54,54,48,48,10,54,54,48,48,10,54,55,48, 48,10,54,55,56,48,10,54,54,56,48,10,51,67,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,53,51,50,10,69, 78,67,79,68,73,78,71,32,49,51,51,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,70,48,48,10, 55,51,56,48,10,54,49,56,48,10,54,48,48,48,10,54, 48,48,48,10,55,69,48,48,10,54,51,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,53,51,51,10,69,78,67,79,68,73, 78,71,32,49,51,51,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,67,48,48,10,51,54,48,48,10, 54,54,48,48,10,54,54,48,48,10,54,54,48,48,10,51, 54,48,48,10,49,70,48,48,10,48,55,56,48,10,48,54, 56,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,53,51,52,10,69,78,67,79,68,73,78,71,32,49,51, 51,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,67,48,48,10,54,54,48,48,10,54,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,55,48,48,10,48, 55,56,48,10,48,54,56,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,51,53,10, 69,78,67,79,68,73,78,71,32,49,51,51,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,69,48,48,10, 54,51,48,48,10,54,49,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 56,48,10,51,49,56,48,10,49,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,53,51,54,10,69,78,67,79,68, 73,78,71,32,49,51,51,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,69,48,48,10,51,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,55,56,48,10,49,68,56,48,10,48,49,48,48,10,48, 51,48,48,10,51,69,48,48,10,54,55,48,48,10,54,68, 56,48,10,51,56,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,53,51,55,10,69,78,67,79,68,73,78,71,32,49, 51,51,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,69,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,51,70, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,55,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,53,51,56, 10,69,78,67,79,68,73,78,71,32,49,51,51,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,69,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,51,70,48,48,10,48,49, 56,48,10,48,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,51,57,10,69,78,67,79, 68,73,78,71,32,49,51,51,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,67,48,48,10,67,54,48, 48,10,67,54,48,48,10,67,54,48,48,10,67,70,56,48, 10,68,54,48,48,10,68,54,48,48,10,67,67,48,48,10, 67,48,48,48,10,67,48,48,48,10,67,48,48,48,10,67, 48,48,48,10,67,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,53,51,65,10,69,78,67,79,68,73,78,71,32, 49,51,51,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,51,70,56,48, 10,55,70,56,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,55,70,48,48,10,51, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,53,51, 66,10,69,78,67,79,68,73,78,71,32,49,51,51,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,70,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,53,51,67,10,69,78,67, 79,68,73,78,71,32,49,51,52,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,51,70,48,48,10,48,49,56,48,10,48, 51,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,51,68,10,69,78,67,79,68,73,78,71, 32,49,51,52,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,55,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,53, 51,69,10,69,78,67,79,68,73,78,71,32,49,51,52,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,48,67,48,48,10,48,67,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,53,51,70,10,69,78, 67,79,68,73,78,71,32,49,51,52,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,70,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,53,52,48,10,69,78,67,79,68,73,78, 71,32,49,51,52,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,56,48,48,10,49, 56,48,48,10,48,67,48,48,10,48,54,48,48,10,48,67, 48,48,10,49,56,48,48,10,51,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,51,56,48,48,10,48,69,48,48, 10,48,51,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,52,49,10,69,78,67,79,68,73,78,71,32,49,51,52, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,69,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,55,48,48,10,51,66, 48,48,10,48,51,48,48,10,48,51,48,48,10,51,69,48, 48,10,54,54,48,48,10,54,55,48,48,10,51,68,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,53,52,50,10,69, 78,67,79,68,73,78,71,32,49,51,52,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,67,48,48,10, 54,54,48,48,10,54,54,48,48,10,54,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,51,48,48, 10,48,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,53,52,51,10,69,78,67,79,68,73, 78,71,32,49,51,52,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,54,48,48,10,48,51,48,48,10, 48,49,56,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,51,51,48,48,10,51,51,48,48,10,51,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,53,52,52,10,69,78,67,79,68,73,78,71,32,49,51, 52,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,55,56,48,10,54,54,56,48,10,54,54,56,48,10, 54,54,48,48,10,54,54,48,48,10,54,54,48,48,10,54, 54,48,48,10,54,54,48,48,10,54,54,48,48,10,54,54, 48,48,10,54,54,48,48,10,54,54,48,48,10,51,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,52,53,10, 69,78,67,79,68,73,78,71,32,49,51,52,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,69,48,48, 10,54,51,48,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,49,57,48,48,10,49,69,48,48,10,49, 57,48,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,54,51,48,48,10,51,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,53,52,54,10,69,78,67,79,68, 73,78,71,32,49,51,53,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,56,48,48,10,55,56,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,57,56,48,10,49,57, 56,48,10,48,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,53,52,55,10,69,78,67,79,68,73,78,71,32,49, 51,53,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,49,56,48,10,55,70,48,48,10,49,56,48,48, 10,51,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,53,52,56, 10,69,78,67,79,68,73,78,71,32,49,51,53,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,69,48, 48,10,51,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,52,57,10,69,78,67,79, 68,73,78,71,32,49,51,53,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,70,48,48,10,51,49,56, 48,10,51,49,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,49,70,48,48,10, 48,54,48,48,10,48,52,48,48,10,48,67,48,48,10,49, 56,48,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,53,52,65,10,69,78,67,79,68,73,78,71,32, 49,51,53,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,70,48,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,48,68,56,48, 10,48,68,56,48,10,48,68,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,53,52, 66,10,69,78,67,79,68,73,78,71,32,49,51,53,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,69, 48,48,10,54,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,51,49,56,48,10,49,57,56,48,10,48,68,56,48, 10,48,55,48,48,10,48,51,48,48,10,51,69,48,48,10, 54,55,48,48,10,54,68,56,48,10,51,56,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,53,52,67,10,69,78,67, 79,68,73,78,71,32,49,51,53,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,56,48,48,10,54,67, 48,48,10,54,67,48,48,10,54,67,48,48,10,54,67,48, 48,10,54,70,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,67,48,48,10,54,67,48,48,10,54,67,48,48,10, 54,67,48,48,10,54,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,52,68,10,69,78,67,79,68,73,78,71, 32,49,51,53,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,53, 52,69,10,69,78,67,79,68,73,78,71,32,49,51,53,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 54,48,48,10,54,54,48,48,10,54,54,48,48,10,54,54, 48,48,10,54,54,48,48,10,54,54,48,48,10,54,54,48, 48,10,54,54,48,48,10,54,54,48,48,10,51,69,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,55,56,48,10, 48,48,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,53,52,70,10,69,78, 67,79,68,73,78,71,32,49,51,53,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,70,48,48,10,51, 49,56,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,51,48,48,48,10,49,69,48,48,10,48,51,48, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,54,51,48,48,10,51,69,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,53,53,48,10,69,78,67,79,68,73,78, 71,32,49,51,54,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,70,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,53,49,10,69,78,67,79,68,73,78,71,32,49,51,54, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,69,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,54,49,56,48,10,51,51,48,48,10,49,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,53,53,50,10,69, 78,67,79,68,73,78,71,32,49,51,54,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 69,48,48,10,55,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,49,67,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,53,53,51,10,69,78,67,79,68,73, 78,71,32,49,51,54,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 51,70,48,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,51,70,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,53,53,52,10,69,78,67,79,68,73,78,71,32,49,51, 54,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,70,48,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,49,70,48,48,10,49,56,48,48,10,49, 56,48,48,10,68,56,48,48,10,51,67,48,48,10,49,66, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,53,53,10, 69,78,67,79,68,73,78,71,32,49,51,54,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,53,53,54,10,69,78,67,79,68, 73,78,71,32,49,51,54,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,56,48,48,10,54,67,48,48, 10,54,67,48,48,10,54,67,48,48,10,54,67,48,48,10, 51,70,48,48,10,48,68,56,48,10,48,68,56,48,10,48, 68,56,48,10,48,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,51,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,53,53,57,10,69,78,67,79,68,73,78,71,32,49, 51,54,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,51,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,53,53,65, 10,69,78,67,79,68,73,78,71,32,49,51,55,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,54,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,53,66,10,69,78,67,79, 68,73,78,71,32,49,51,55,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,56,48,48,10,49,56,48, 48,10,49,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,53,53,67,10,69,78,67,79,68,73,78,71,32, 49,51,55,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,50,48,48,10,51,69,48,48,10,55,67,48, 48,10,52,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,53,53, 68,10,69,78,67,79,68,73,78,71,32,49,51,55,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,48, 48,48,10,49,56,48,48,10,48,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,53,53,69,10,69,78,67, 79,68,73,78,71,32,49,51,55,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,69,48,48,10,51,51,48,48,10,54,49,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,50,55,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,53,70,10,69,78,67,79,68,73,78,71, 32,49,51,55,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,54,48, 48,48,10,54,51,48,48,10,54,51,48,48,10,51,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,53, 54,49,10,69,78,67,79,68,73,78,71,32,49,51,55,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,51,70,56,48,10,49,51,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,53,54,50,10,69,78, 67,79,68,73,78,71,32,49,51,55,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,70,48,48,10,55,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,55,70,56,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,53,54,51,10,69,78,67,79,68,73,78, 71,32,49,51,55,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,66, 48,48,10,54,55,48,48,10,67,51,48,48,10,67,51,48, 48,10,67,51,48,48,10,67,51,48,48,10,54,51,48,48, 10,51,70,67,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,54,52,10,69,78,67,79,68,73,78,71,32,49,51,56, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,68,67,48,48,10,69,54, 48,48,10,67,51,48,48,10,67,51,48,48,10,67,51,48, 48,10,67,51,48,48,10,67,51,48,48,10,67,51,67,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,53,54,53,10,69, 78,67,79,68,73,78,71,32,49,51,56,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,55,70,56,48,10,54,48,48,48,10,54,48, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,53,49,56,48,10,67,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,53,54,54,10,69,78,67,79,68,73, 78,71,32,49,51,56,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 66,48,48,10,54,55,48,48,10,67,51,48,48,10,67,51, 48,48,10,67,51,48,48,10,67,51,48,48,10,54,55,48, 48,10,51,66,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,67,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,53,54,55,10,69,78,67,79,68,73,78,71,32,49,51, 56,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,55,70,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,51,69,48, 48,10,48,51,48,48,10,48,49,56,48,10,48,49,56,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,54,56,10, 69,78,67,79,68,73,78,71,32,49,51,56,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,69,48,48,10,55,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,55,70,56,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,53,54,57,10,69,78,67,79,68, 73,78,71,32,49,51,56,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,69,48,48,10,55,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,55,67,48,10,54,57,56,48,10,54,57, 48,48,10,54,54,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,53,54,65,10,69,78,67,79,68,73,78,71,32,49, 51,56,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,51,70,67,48,10, 54,51,48,48,10,67,51,48,48,10,67,51,48,48,10,67, 51,48,48,10,67,51,48,48,10,54,54,48,48,10,51,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,53,54,66, 10,69,78,67,79,68,73,78,71,32,49,51,56,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,69,48,48,10,55,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,54,67,10,69,78,67,79, 68,73,78,71,32,49,51,56,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,54,48,48,10,48,51,56,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,53,54,68,10,69,78,67,79,68,73,78,71,32, 49,51,56,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,67,48,48,48,10,67,48,48,48,10,67,48,48, 48,10,67,48,48,48,10,67,48,48,48,10,68,57,56,48, 10,69,68,56,48,10,67,68,56,48,10,67,68,56,48,10, 67,68,56,48,10,67,68,56,48,10,67,68,56,48,10,67, 55,48,48,10,67,48,48,48,10,67,48,48,48,10,67,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,53,54, 69,10,69,78,67,79,68,73,78,71,32,49,51,57,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,48,48,48,10,49,56,48,48,10,48,67,48, 48,10,48,54,48,48,10,49,70,56,48,10,51,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,51,54,48,48,10,49,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,53,54,70,10,69,78,67, 79,68,73,78,71,32,49,51,57,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,49,56,48,10,49,70,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,55,48,10,69,78,67,79,68,73,78,71, 32,49,51,57,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,70,48, 48,10,55,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,53, 55,49,10,69,78,67,79,68,73,78,71,32,49,51,57,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,54,48,48,10,48,67,48,48,10,48,54, 48,48,10,48,48,48,48,10,49,70,56,48,10,51,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,49,56,48,10,49,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,53,55,50,10,69,78, 67,79,68,73,78,71,32,49,51,57,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,68,67,48,48,10,69,54,48,48,10,67,51,48, 48,10,67,51,48,48,10,67,51,48,48,10,67,51,48,48, 10,67,51,48,48,10,67,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,67,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,53,55,51,10,69,78,67,79,68,73,78, 71,32,49,51,57,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,70,48,48,10,49,57,56,48,10,51, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,55,70, 56,48,10,51,49,56,48,10,51,49,56,48,10,51,49,56, 48,10,51,49,56,48,10,51,49,56,48,10,49,66,56,48, 10,48,68,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,55,52,10,69,78,67,79,68,73,78,71,32,49,51,57, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,49,56,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,55,48,48,10,51,66,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,53,55,53,10,69, 78,67,79,68,73,78,71,32,49,51,57,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,70,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,54,51,48,48,10,51,69,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,53,55,54,10,69,78,67,79,68,73, 78,71,32,49,51,57,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,56, 48,10,49,69,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,53,55,55,10,69,78,67,79,68,73,78,71,32,49,51, 57,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,69,48,48,10,54, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,48,49, 56,48,10,48,51,48,48,10,48,54,48,48,10,48,67,48, 48,10,49,56,48,48,10,51,48,48,48,10,54,48,48,48, 10,55,70,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,55,56,10, 69,78,67,79,68,73,78,71,32,49,52,48,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,69,48,48,10,55,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,53,55,57,10,69,78,67,79,68, 73,78,71,32,49,52,48,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,49,56,48,48,10,49,56,48,48,10,48, 67,48,48,10,48,54,48,48,10,48,67,48,48,10,49,56, 48,48,10,51,48,48,48,10,51,48,48,48,10,49,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,53,55,65,10,69,78,67,79,68,73,78,71,32,49, 52,48,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,51,70,56,48,10,49,51, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,53,55,66, 10,69,78,67,79,68,73,78,71,32,49,52,48,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 49,56,48,10,49,66,48,48,10,48,54,48,48,10,48,67, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,70,56, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,55,67,10,69,78,67,79, 68,73,78,71,32,49,52,48,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,68,67,48,48,10,69,54,48,48,10,67,51,48,48,10, 67,51,48,48,10,67,51,48,48,10,67,51,48,48,10,67, 51,48,48,10,67,49,67,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,53,55,68,10,69,78,67,79,68,73,78,71,32, 49,52,48,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,56,48,10,49, 68,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,53,55, 69,10,69,78,67,79,68,73,78,71,32,49,52,48,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,55,48,48,10,51,66,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 67,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,53,55,70,10,69,78,67, 79,68,73,78,71,32,49,52,48,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,67,68,56,48,10,67,69,67,48,10,67,67,67,48, 10,67,67,67,48,10,67,67,67,48,10,67,67,67,48,10, 68,67,67,48,10,54,67,67,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,56,48,10,69,78,67,79,68,73,78,71, 32,49,52,48,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,69,48, 48,10,55,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,53, 56,49,10,69,78,67,79,68,73,78,71,32,49,52,48,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,70,48,48,10,51,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,49,56,48,10,49,70,56,48,10, 48,49,56,48,10,48,49,56,48,10,54,49,56,48,10,51, 70,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,53,56,50,10,69,78, 67,79,68,73,78,71,32,49,52,49,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,48,67,48,48,10,48,55,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,53,56,51,10,69,78,67,79,68,73,78, 71,32,49,52,49,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,68,56,48,10,67,69,67,48,10,67,67,67, 48,10,67,67,67,48,10,67,67,67,48,10,68,67,67,48, 10,54,67,67,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,56,52,10,69,78,67,79,68,73,78,71,32,49,52,49, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,55,56,48,10,48,67,56,48,10,48,67,56,48,10,48, 67,48,48,10,48,67,48,48,10,55,70,56,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,53,56,53,10,69, 78,67,79,68,73,78,71,32,49,52,49,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,53,56,54,10,69,78,67,79,68,73, 78,71,32,49,52,49,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,67,48,48,10,54,67,48,48,10, 54,67,48,48,10,54,67,48,48,10,54,67,48,48,10,51, 70,56,48,10,48,68,56,48,10,48,68,56,48,10,48,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,51,70,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,53,56,55,10,69,78,67,79,68,73,78,71,32,49,52, 49,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,51,51,48,48,10,49,67,67, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,56,57,10, 69,78,67,79,68,73,78,71,32,49,52,49,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,56,48,48,10, 49,67,48,48,10,48,56,48,48,10,48,48,48,48,10,48, 56,48,48,10,49,67,48,48,10,48,56,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,53,56,65,10,69,78,67,79,68, 73,78,71,32,49,52,49,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,48,48,48,10,48,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,53,55,55,57,57,10,69,78,67,79,68,73,78,71, 32,49,52,53,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,67,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,53, 55,56,48,49,10,69,78,67,79,68,73,78,71,32,49,52, 53,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,68,56,48,10,48,48,48,48, 10,51,49,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,56,48, 48,10,69,78,67,79,68,73,78,71,32,49,52,53,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,49,56,48,10,55,67,48,48,10,48,49, 56,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,102,105,105,53,55,56,48,50,10,69, 78,67,79,68,73,78,71,32,49,52,53,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,68,56,48,10,51,48,48,48,10,51,49,56,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,53,55,55,57,51,10,69,78,67,79, 68,73,78,71,32,49,52,54,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,56, 48,48,10,49,56,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,53,55,55,57,52,10,69,78,67,79,68,73,78, 71,32,49,52,54,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,54,48,48,10, 51,54,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 53,55,55,57,53,10,69,78,67,79,68,73,78,71,32,49, 52,54,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,54,48,48,10,48,48,48, 48,10,49,56,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,53,55,55, 57,56,10,69,78,67,79,68,73,78,71,32,49,52,54,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,53,55,55,57,55,10, 69,78,67,79,68,73,78,71,32,49,52,54,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,69,48,48,10,49,56,48,48,10,49,56,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,102,105,105,53,55,56,48,54,10,69,78,67, 79,68,73,78,71,32,49,52,54,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,53,55,55,57,54,10,69,78,67,79,68,73, 78,71,32,49,52,54,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,67,48,48,48,10,68,56,48,48, 10,49,66,48,48,10,48,51,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,53,55,56,48,55,10,69,78,67,79,68,73,78,71,32, 49,52,54,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,53,55, 56,51,57,10,69,78,67,79,68,73,78,71,32,49,52,54, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,102,105,105,53,55,54,52,53, 10,69,78,67,79,68,73,78,71,32,49,52,55,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,70,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,53,55,56,52,49,10,69,78, 67,79,68,73,78,71,32,49,52,55,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,102,105,105,53,55,56,52,50,10,69,78,67,79,68, 73,78,71,32,49,52,55,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,53,55,56,48,52,10,69,78,67,79,68,73,78,71, 32,49,52,55,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,49,56,48,10,48,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,53, 55,56,48,51,10,69,78,67,79,68,73,78,71,32,49,52, 55,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,67,48,48,48,10,67,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,54,53, 56,10,69,78,67,79,68,73,78,71,32,49,52,55,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,48,48,48, 10,51,56,48,48,10,49,48,48,48,10,48,48,48,48,10, 49,48,48,48,10,51,56,48,48,10,49,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,53,67,52,10,69,78,67, 79,68,73,78,71,32,49,52,55,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,53,55,54,54,52,10,69,78,67,79,68,73, 78,71,32,49,52,56,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,67,51,56,48,10,67,51,56,48,10,54, 51,56,48,10,51,54,48,48,10,55,67,48,48,10,69,67, 48,48,10,67,54,48,48,10,67,51,48,48,10,54,49,56, 48,10,69,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,53,55,54,54,53,10,69,78,67,79,68,73,78,71,32, 49,52,56,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,70,69,48,48,10,70,70,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,70,70,56,48,10,70, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,53,55, 54,54,54,10,69,78,67,79,68,73,78,71,32,49,52,57, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 56,48,48,10,55,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,55,69,48,48,10,54,54,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,102,105,105,53,55,54,54,55, 10,69,78,67,79,68,73,78,71,32,49,52,57,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,70,70,56,48, 10,70,70,56,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,53,55,54,54,56,10,69,78, 67,79,68,73,78,71,32,49,52,57,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,70,70,48,48,10,70,70, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,102,105,105,53,55,54,54,57,10,69,78,67,79,68, 73,78,71,32,49,52,57,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,56,48,48,10,51,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,53,55,54,55,48,10,69,78,67,79,68,73,78,71, 32,49,52,57,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,56,48,48,10,51,69,48,48,10,48,70,48, 48,10,48,70,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,53, 55,54,55,49,10,69,78,67,79,68,73,78,71,32,49,52, 57,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 70,70,48,48,10,70,70,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,54,55, 50,10,69,78,67,79,68,73,78,71,32,49,52,57,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,67,51,48, 48,10,69,51,56,48,10,55,49,56,48,10,55,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,51,56,48,10,55,70,48,48,10,55,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,102,105,105,53,55,54,55,51,10,69, 78,67,79,68,73,78,71,32,49,52,57,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,56,48,48,10,51, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,53,55,54,55,52,10,69,78,67,79, 68,73,78,71,32,49,52,57,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,70,70,48,48,10,70,70,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,53,55,54,55,53,10,69,78,67,79,68,73,78, 71,32,49,52,57,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,70,70,48,48,10,70,70,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,70,70,56,48, 10,70,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 53,55,54,55,54,10,69,78,67,79,68,73,78,71,32,49, 53,48,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,67,48,48, 48,10,67,48,48,48,10,67,48,48,48,10,67,48,48,48, 10,70,70,48,48,10,70,70,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,48,48,10,48,51,48,48,10,48,54,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,53,55,54, 55,55,10,69,78,67,79,68,73,78,71,32,49,53,48,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,70,70, 48,48,10,70,70,56,48,10,52,49,56,48,10,67,49,56, 48,10,67,49,56,48,10,67,49,56,48,10,67,49,56,48, 10,67,49,56,48,10,70,70,56,48,10,70,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,53,55,54,55,56,10, 69,78,67,79,68,73,78,71,32,49,53,48,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,68,70,48,48,10, 68,70,56,48,10,55,70,56,48,10,54,49,56,48,10,67, 49,56,48,10,67,49,56,48,10,67,49,56,48,10,67,49, 56,48,10,67,70,56,48,10,68,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,102,105,105,53,55,54,55,57,10,69,78,67, 79,68,73,78,71,32,49,53,48,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,56,48,48,10,51,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,53,55,54,56,48,10,69,78,67,79,68,73, 78,71,32,49,53,48,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,56,48,48,10,51,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,51,67,48, 48,10,51,56,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,53,55,54,56,49,10,69,78,67,79,68,73,78,71,32, 49,53,48,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,70,70,48,48,10,70,70,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,55,70,48,48,10,51, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,53,55, 54,56,50,10,69,78,67,79,68,73,78,71,32,49,53,48, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 55,48,48,10,69,55,56,48,10,67,49,56,48,10,67,49, 56,48,10,54,49,56,48,10,51,49,56,48,10,49,57,56, 48,10,48,68,56,48,10,55,70,56,48,10,55,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,102,105,105,53,55,54,56,51, 10,69,78,67,79,68,73,78,71,32,49,53,48,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,70,70,48,48, 10,70,70,48,48,10,67,51,48,48,10,67,51,48,48,10, 69,51,48,48,10,69,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,53,55,54,56,52,10,69,78, 67,79,68,73,78,71,32,49,53,48,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,70,70,48,48,10,70,70, 56,48,10,54,49,56,48,10,54,49,56,48,10,55,49,56, 48,10,55,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,70,70,56,48,10,70,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,102,105,105,53,55,54,56,53,10,69,78,67,79,68, 73,78,71,32,49,53,48,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,51,56,48,10,69,51,56,48,10, 54,51,48,48,10,54,54,48,48,10,54,67,48,48,10,55, 56,48,48,10,55,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,53,55,54,56,54,10,69,78,67,79,68,73,78,71, 32,49,53,49,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,51,56,48,10,69,51,56,48,10,55,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,67,48,48, 10,48,54,48,48,10,48,51,48,48,10,70,70,56,48,10, 70,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,53, 55,54,56,55,10,69,78,67,79,68,73,78,71,32,49,53, 49,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 70,70,48,48,10,70,70,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,51, 48,48,10,54,54,48,48,10,54,67,48,48,10,54,56,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,54,56, 56,10,69,78,67,79,68,73,78,71,32,49,53,49,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,70,70,48, 48,10,70,70,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,102,105,105,53,55,54,56,57,10,69, 78,67,79,68,73,78,71,32,49,53,49,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,67,68,56,48,10,67, 68,56,48,10,67,68,56,48,10,67,68,56,48,10,67,68, 56,48,10,68,68,56,48,10,70,57,56,48,10,69,49,56, 48,10,70,70,48,48,10,70,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,53,55,54,57,48,10,69,78,67,79, 68,73,78,71,32,49,53,49,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,70,70,48,48,10,70,70,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,69, 49,56,48,10,69,49,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,53,55,55,49,54,10,69,78,67,79,68,73,78, 71,32,49,53,50,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,55,48,48,10,70,55,56,48,10,51,49, 56,48,10,51,49,56,48,10,51,49,56,48,10,51,49,56, 48,10,51,49,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 53,55,55,49,55,10,69,78,67,79,68,73,78,71,32,49, 53,50,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,55,48,48,10,70,55,56,48,10,51,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,53,55,55, 49,56,10,69,78,67,79,68,73,78,71,32,49,53,50,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,55, 48,48,10,70,55,56,48,10,51,49,56,48,10,51,49,56, 48,10,51,49,56,48,10,51,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,53,70,51,10,69,78, 67,79,68,73,78,71,32,49,53,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 54,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,53,70,52,10,69,78,67,79,68,73,78, 71,32,49,53,50,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,57,56,48,10,51, 51,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 54,48,48,10,69,78,67,79,68,73,78,71,32,49,53,51, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,52,48,10,48,48,56,48,10,48,48,56,48, 10,70,70,67,48,10,70,70,67,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,54,48,49,10,69, 78,67,79,68,73,78,71,32,49,53,51,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,52,56,52,48,10,65,56,56,48, 10,57,55,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,54,48,50,10,69,78,67,79,68,73, 78,71,32,49,53,51,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,69,48,48,48,10,70,70,67,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,54,48,51,10,69,78,67,79,68,73,78,71,32,49,53, 51,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,49,67, 48,10,56,54,52,48,10,55,66,56,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,51,56, 56,10,69,78,67,79,68,73,78,71,32,49,53,52,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,52,48,48,10,48,67,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,67,48,48,10,49,67,48,48,10, 48,56,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,54,48,68,10,69,78,67, 79,68,73,78,71,32,49,53,52,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,51,48,48,10,48,55,48,48,10,48,70,48,48,10, 49,56,48,48,10,49,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,54,48,69,10,69,78,67,79,68,73,78,71, 32,49,53,53,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,48,48,48,10,57,48,52,48,10, 68,48,67,48,10,55,70,56,48,10,51,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,54, 48,70,10,69,78,67,79,68,73,78,71,32,49,53,53,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,69,48,48,10,49,69,48,48,10,49,56,48, 48,10,49,66,48,48,10,48,69,48,48,10,49,67,48,48, 10,51,56,48,48,10,51,55,56,48,10,51,69,67,48,10, 51,56,67,48,10,55,70,56,48,10,54,70,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,54,49,48,10,69,78, 67,79,68,73,78,71,32,49,53,53,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,67,48,48,10, 53,50,48,48,10,55,69,48,48,10,52,48,48,48,10,56, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,54,49,49,10,69,78,67,79,68,73,78, 71,32,49,53,53,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,67,48,48,10,53,48,48,48,10, 55,48,48,48,10,53,67,48,48,10,56,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 54,49,50,10,69,78,67,79,68,73,78,71,32,49,53,53, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,70,56,48,48,10,50,50,48,48,10,52,50,48,48,10, 52,50,48,48,10,49,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,54,49,51,10,69, 78,67,79,68,73,78,71,32,49,53,53,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,49,48,48,48, 10,49,56,48,48,10,65,53,48,48,10,70,68,48,48,10, 56,49,48,48,10,48,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,54,49,52,10,69,78,67,79,68,73, 78,71,32,49,53,53,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,56,48, 10,48,52,56,48,10,70,66,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,54,49,53,10,69,78,67,79,68,73,78,71,32,49,53, 53,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,52,48,48,48,10,52,48,48,48,10,53,56,48,48, 10,54,56,48,48,10,70,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,52,48, 51,10,69,78,67,79,68,73,78,71,32,49,53,54,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,50,48,48,10,48,54,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,69,48,48,10,48,69,48,48, 10,48,52,48,48,10,48,48,48,48,10,48,52,48,48,10, 48,69,48,48,10,48,52,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,102,105,105,53,55,52,48,55,10,69, 78,67,79,68,73,78,71,32,49,53,54,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,48,48,10,54,48,48,48,10,54, 48,48,48,10,51,48,48,48,10,49,56,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,53,55,52,48,57,10,69,78,67,79, 68,73,78,71,32,49,53,54,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,69,48,48,10,49,69,48,48,10,49,56,48,48,10, 49,70,48,48,10,51,70,48,48,10,51,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,53,55,52,49,48,10,69,78,67,79,68,73,78, 71,32,49,53,55,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,51,49,56,48,10, 55,70,56,48,10,54,70,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 53,55,52,49,49,10,69,78,67,79,68,73,78,71,32,49, 53,55,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,69,48, 48,10,49,56,48,48,10,48,69,48,48,10,49,56,48,48, 10,48,52,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,53,55,52, 49,50,10,69,78,67,79,68,73,78,71,32,49,53,55,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,69,48,48,10,49,56,48,48,10,48,69, 48,48,10,49,56,48,48,10,48,48,48,48,10,48,69,48, 48,10,49,70,48,48,10,49,57,56,48,10,49,70,56,48, 10,48,70,56,48,10,48,49,56,48,10,48,51,56,48,10, 48,55,48,48,10,49,69,48,48,10,55,67,48,48,10,55, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,53,55,52,49,51,10, 69,78,67,79,68,73,78,71,32,49,53,55,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,69,48,48,10,49,56,48, 48,10,48,69,48,48,10,49,56,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,102,105,105,53,55,52,49,52,10,69,78,67, 79,68,73,78,71,32,49,53,55,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,56,48,48,10,54,48,48,48,10,51,56,48, 48,10,54,49,67,48,10,48,51,67,48,10,48,54,48,48, 10,67,55,56,48,10,67,51,67,48,10,67,48,67,48,10, 69,48,67,48,10,55,70,56,48,10,51,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,53,55,52,49,53,10,69,78,67,79,68,73, 78,71,32,49,53,55,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,53,55,52,49,54,10,69,78,67,79,68,73,78,71,32, 49,53,55,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,67,49,56,48,10,67,49,56,48,10, 70,70,56,48,10,55,70,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,53,55, 52,49,55,10,69,78,67,79,68,73,78,71,32,49,53,55, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,54,48,48,10,51,54,48,48,10,48, 48,48,48,10,49,67,48,48,10,51,69,48,48,10,51,55, 48,48,10,51,51,48,48,10,51,51,48,48,10,51,70,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,102,105,105,53,55,52,49,56, 10,69,78,67,79,68,73,78,71,32,49,53,55,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,54,48,48,10,51,54,48,48,10,48,48,48,48,10, 67,49,56,48,10,67,49,56,48,10,70,70,56,48,10,55, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,53,55,52,49,57,10,69,78, 67,79,68,73,78,71,32,49,53,55,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,49,56,48,48,10,48,48,48,48,10,51,54, 48,48,10,51,54,48,48,10,48,48,48,48,10,67,49,56, 48,10,67,49,56,48,10,70,70,56,48,10,55,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,102,105,105,53,55,52,50,48,10,69,78,67,79,68, 73,78,71,32,49,53,56,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,56,48,48,10,55,70,56,48,10,52,70,56,48,10,49, 56,48,48,10,51,48,48,48,10,54,48,48,48,10,67,54, 48,48,10,67,54,48,48,10,67,48,48,48,10,69,48,48, 48,10,55,70,56,48,10,51,70,56,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,53,55,52,50,49,10,69,78,67,79,68,73,78,71, 32,49,53,56,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,56,48, 48,10,55,70,56,48,10,52,70,56,48,10,49,56,48,48, 10,51,48,48,48,10,54,48,48,48,10,67,48,48,48,10, 67,48,48,48,10,67,48,48,48,10,69,48,48,48,10,55, 70,56,48,10,51,70,56,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,53, 55,52,50,50,10,69,78,67,79,68,73,78,71,32,49,53, 56,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,51,56,48,48,10,55, 70,56,48,10,52,70,56,48,10,49,56,48,48,10,51,48, 48,48,10,54,48,48,48,10,67,48,48,48,10,67,48,48, 48,10,67,48,48,48,10,69,48,48,48,10,55,70,56,48, 10,51,70,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,52,50, 51,10,69,78,67,79,68,73,78,71,32,49,53,56,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,69,48,48,10,48,55,48,48, 10,48,51,48,48,10,48,51,48,48,10,51,70,48,48,10, 51,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,102,105,105,53,55,52,50,52,10,69, 78,67,79,68,73,78,71,32,49,53,56,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,69,48,48,10,48,55,48,48,10,48,51, 48,48,10,48,51,48,48,10,51,70,48,48,10,51,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,53,55,52,50,53,10,69,78,67,79, 68,73,78,71,32,49,53,56,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,54,48,48,10, 48,55,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 55,48,48,10,48,69,48,48,10,51,67,48,48,10,70,56, 48,48,10,69,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,53,55,52,50,54,10,69,78,67,79,68,73,78, 71,32,49,53,56,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,48,48,48,10,48,54,48,48,10,48,55,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,55,48,48, 10,48,69,48,48,10,51,67,48,48,10,70,56,48,48,10, 69,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 53,55,52,50,55,10,69,78,67,79,68,73,78,71,32,49, 53,56,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,57,52,48,10,48,68,52,48,10,56, 70,67,48,10,56,55,56,48,10,56,52,48,48,10,67,67, 48,48,10,70,67,48,48,10,55,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,53,55,52, 50,56,10,69,78,67,79,68,73,78,71,32,49,53,56,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,51,48,48,10,48,51,48,48,10,48,48, 48,48,10,48,54,67,48,10,48,54,67,48,10,48,48,48, 48,10,48,57,52,48,10,48,68,52,48,10,56,70,67,48, 10,56,55,56,48,10,56,54,48,48,10,67,67,48,48,10, 70,67,48,48,10,55,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,53,55,52,50,57,10, 69,78,67,79,68,73,78,71,32,49,53,56,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,49,56,48,10,48, 66,67,48,10,48,69,52,48,10,56,70,67,48,10,56,55, 56,48,10,56,52,48,48,10,67,67,48,48,10,70,67,48, 48,10,55,56,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,102,105,105,53,55,52,51,48,10,69,78,67, 79,68,73,78,71,32,49,53,57,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,49,56,48,10,48,49,56, 48,10,48,48,48,48,10,48,49,56,48,10,48,66,67,48, 10,48,69,52,48,10,56,70,67,48,10,56,55,56,48,10, 56,52,48,48,10,67,67,48,48,10,70,67,48,48,10,55, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,53,55,52,51,49,10,69,78,67,79,68,73, 78,71,32,49,53,57,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,48,48,48,10,51, 51,56,48,10,51,55,67,48,10,51,67,67,48,10,51,56, 67,48,10,70,70,67,48,10,55,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,53,55,52,51,50,10,69,78,67,79,68,73,78,71,32, 49,53,57,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,48,48,48,10,51,48,48,48,10,51,51,48, 48,10,51,51,48,48,10,51,48,48,48,10,51,51,56,48, 10,51,55,67,48,10,51,67,67,48,10,51,56,67,48,10, 70,70,67,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,53,55, 52,51,51,10,69,78,67,79,68,73,78,71,32,49,53,57, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,67,48,48,10,51,67, 48,48,10,51,48,48,48,10,51,54,48,48,10,49,67,48, 48,10,51,56,48,48,10,55,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,55,48,48,48,10,51,70,56,48,10, 49,70,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,102,105,105,53,55,52,51,52, 10,69,78,67,79,68,73,78,71,32,49,53,57,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,56,48,48,10,49,56,48,48, 10,48,48,48,48,10,49,67,48,48,10,51,67,48,48,10, 51,48,48,48,10,51,54,48,48,10,49,67,48,48,10,51, 56,48,48,10,55,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,55,48,48,48,10,51,70,56,48,10,49,70,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,53,55,52,52,48,10,69,78, 67,79,68,73,78,71,32,49,54,48,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,70,70,67,48,10,70,70,67,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,102,105,105,53,55,52,52,49,10,69,78,67,79,68, 73,78,71,32,49,54,48,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,48,48,48,10,48,55,48,48,10, 48,68,56,48,10,52,68,56,48,10,67,55,56,48,10,67, 49,56,48,10,70,70,56,48,10,55,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,53,55,52,52,50,10,69,78,67,79,68,73,78,71, 32,49,54,48,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,66, 48,48,10,49,66,48,48,10,48,48,48,48,10,48,54,48, 48,10,48,70,48,48,10,48,57,56,48,10,67,57,56,48, 10,67,70,56,48,10,67,55,56,48,10,67,49,56,48,10, 69,51,48,48,10,55,69,48,48,10,51,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,53, 55,52,52,51,10,69,78,67,79,68,73,78,71,32,49,54, 48,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,49,56,48,10,48,57,56,48,10, 49,57,56,48,10,51,49,56,48,10,49,57,56,48,10,51, 49,56,48,10,48,49,56,48,10,54,49,56,48,10,55,70, 56,48,10,51,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,52,52, 52,10,69,78,67,79,68,73,78,71,32,49,54,48,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,55,51,56,48,10,51,70,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,102,105,105,53,55,52,52,53,10,69, 78,67,79,68,73,78,71,32,49,54,48,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,69,48,48,10,49,70, 48,48,10,49,49,48,48,10,51,70,48,48,10,55,70,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,53,55,52,52,54,10,69,78,67,79, 68,73,78,71,32,49,54,48,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,49,57,56,48,10, 67,49,56,48,10,67,49,56,48,10,67,49,56,48,10,67, 49,56,48,10,69,51,56,48,10,55,70,48,48,10,51,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,53,55,52,55,48,10,69,78,67,79,68,73,78, 71,32,49,54,48,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,67, 48,48,10,51,69,48,48,10,51,55,48,48,10,51,51,48, 48,10,51,51,48,48,10,51,70,48,48,10,49,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 53,55,52,52,56,10,69,78,67,79,68,73,78,71,32,49, 54,48,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,67,48,48,10,51,69,48,48,10,51,51,48,48,10,51, 70,48,48,10,49,70,48,48,10,48,51,48,48,10,48,55, 48,48,10,48,69,48,48,10,51,67,48,48,10,70,56,48, 48,10,69,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,53,55,52, 52,57,10,69,78,67,79,68,73,78,71,32,49,54,48,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,49,67,48,10,48,51,67, 48,10,48,54,48,48,10,67,55,56,48,10,67,51,67,48, 10,67,48,67,48,10,69,48,67,48,10,55,70,56,48,10, 51,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,53,55,52,53,48,10, 69,78,67,79,68,73,78,71,32,49,54,49,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,49,67,48,10,48,51,67,48,10,48, 54,48,48,10,67,55,56,48,10,67,51,67,48,10,67,48, 67,48,10,69,48,67,48,10,55,70,56,48,10,51,70,48, 48,10,48,48,48,48,10,49,66,48,48,10,49,66,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,102,105,105,53,55,52,53,49,10,69,78,67, 79,68,73,78,71,32,49,54,49,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,51,48,48,48,10,54, 48,48,48,10,68,56,48,48,10,51,48,48,48,10,54,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,53,55,52,53,50,10,69,78,67,79,68,73, 78,71,32,49,54,49,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,53,52,48,48,10,68,67,48,48,10, 53,67,48,48,10,55,48,48,48,10,54,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,53,55,52,53,51,10,69,78,67,79,68,73,78,71,32, 49,54,49,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 48,48,48,10,67,48,48,48,10,66,48,48,48,10,54,48, 48,48,10,67,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,53,55, 52,53,52,10,69,78,67,79,68,73,78,71,32,49,54,49, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,51,48,48,48,10,54,48,48,48,10,67,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,102,105,105,53,55,52,53,53, 10,69,78,67,79,68,73,78,71,32,49,54,49,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,55,48, 48,48,10,53,48,48,48,10,55,48,48,48,10,50,48,48, 48,10,67,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,53,55,52,53,54,10,69,78, 67,79,68,73,78,71,32,49,54,49,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,48,48,48,10,67,48,48,48,10,56,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,102,105,105,53,55,52,53,55,10,69,78,67,79,68, 73,78,71,32,49,54,49,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,65,56,48,48,10,65,56,48,48, 10,55,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,53,55,52,53,56,10,69,78,67,79,68,73,78,71, 32,49,54,49,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,54, 48,48,48,10,57,48,48,48,10,54,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,54, 53,51,10,69,78,67,79,68,73,78,71,32,49,54,49,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,51,49,56,48,10,55,70,56,48,10,54, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,54,53,52,10,69,78, 67,79,68,73,78,71,32,49,54,50,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,69,48,48,10,49,56,48,48,10,48, 69,48,48,10,49,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,54,53,53,10,69,78,67,79,68,73,78, 71,32,49,54,50,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,69,48,48,10,49,56,48,48,10,48,69,48,48,10, 49,56,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 54,53,54,10,69,78,67,79,68,73,78,71,32,49,54,50, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,54,53,55,10,69, 78,67,79,68,73,78,71,32,49,54,50,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,54,48,48,10,48,56,48,48,10, 49,67,48,48,10,49,52,48,48,10,49,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,54,53,56,10,69,78,67,79,68,73, 78,71,32,49,54,50,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,50,52,48,48,10,50, 52,48,48,10,49,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,53,55,51,57,50,10,69,78,67,79,68,73,78,71,32, 49,54,51,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,56,48,48,10,51,67,48,48,10,51,67,48,48,10, 49,56,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,53,55, 51,57,51,10,69,78,67,79,68,73,78,71,32,49,54,51, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,55,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,102,105,105,53,55,51,57,52, 10,69,78,67,79,68,73,78,71,32,49,54,51,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,49,56,48,10,55,49,56,48,10,51,70,56,48, 10,51,70,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,53,55,51,57,53,10,69,78, 67,79,68,73,78,71,32,49,54,51,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,54,67,48,10,54, 54,67,48,10,55,54,67,48,10,51,70,67,48,10,51,70, 56,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,102,105,105,53,55,51,57,54,10,69,78,67,79,68, 73,78,71,32,49,54,51,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,69,48,48,10,49,69,48,48, 10,51,56,48,48,10,51,48,48,48,10,49,69,48,48,10, 48,69,48,48,10,49,67,48,48,10,51,56,48,48,10,51, 48,48,48,10,51,48,48,48,10,51,70,48,48,10,49,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,53,55,51,57,55,10,69,78,67,79,68,73,78,71, 32,49,54,51,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,56,48,48,10,49,67, 48,48,10,48,69,48,48,10,49,70,48,48,10,51,51,48, 48,10,51,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,55,70,56,48,10,51,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,53, 55,51,57,56,10,69,78,67,79,68,73,78,71,32,49,54, 51,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,51,48,48,10,55,70,48,48,10,51,70,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 56,48,10,48,51,56,48,10,48,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,51,57, 57,10,69,78,67,79,68,73,78,71,32,49,54,51,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,55,51,56,48,10,51,51,48, 48,10,51,51,48,48,10,51,51,48,48,10,49,69,48,48, 10,49,69,48,48,10,49,69,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,102,105,105,53,55,52,48,48,10,69, 78,67,79,68,73,78,71,32,49,54,52,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,49,69,48,48,10,49, 69,48,48,10,49,69,48,48,10,51,51,48,48,10,51,51, 48,48,10,51,51,48,48,10,55,51,56,48,10,54,49,56, 48,10,54,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,53,55,52,48,49,10,69,78,67,79, 68,73,78,71,32,49,54,52,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,51,51,48,48,10,51,51,48,48,10,51,70,48,48, 10,49,70,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,56,48,10,48,51,56,48,10,48, 49,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,53,55,51,56,49,10,69,78,67,79,68,73,78, 71,32,49,54,52,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 48,52,48,10,55,56,67,48,10,55,57,56,48,10,51,51, 48,48,10,48,54,48,48,10,48,67,48,48,10,49,57,56, 48,10,51,51,67,48,10,54,51,67,48,10,52,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 54,54,66,10,69,78,67,79,68,73,78,71,32,49,54,52, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,67,48, 48,10,48,67,48,48,10,49,56,48,48,10,49,56,48,48, 10,51,48,48,48,10,51,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,54,54,67,10,69, 78,67,79,68,73,78,71,32,49,54,52,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,52,48,48,10,48,67,48,48,10,48, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,54,51,49,54,55,10,69,78,67,79, 68,73,78,71,32,49,54,52,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,55,70,48,48,10,51,69,48,48, 10,49,67,48,48,10,51,54,48,48,10,50,50,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,54,54,69,10,69,78,67,79,68,73,78,71,32, 49,54,52,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,67,49,56,48,10,67,49,56,48,10, 70,70,56,48,10,55,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,54,54, 70,10,69,78,67,79,68,73,78,71,32,49,54,52,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,54,48,48,10,48,70,48,48, 10,48,57,56,48,10,67,57,56,48,10,67,70,56,48,10, 67,55,56,48,10,67,49,56,48,10,69,51,48,48,10,55, 69,48,48,10,51,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,54,55,48,10,69,78,67, 79,68,73,78,71,32,49,54,52,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,54,55,49,10,69,78,67,79,68,73,78,71, 32,49,54,52,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 55,48,48,10,49,68,48,48,10,50,70,48,48,10,48,48, 48,48,10,48,52,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,54, 55,50,10,69,78,67,79,68,73,78,71,32,49,54,53,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,67,48,48,10,48,56,48,48,10,50, 69,48,48,10,51,56,48,48,10,50,48,48,48,10,48,52, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,54,55,51,10,69,78, 67,79,68,73,78,71,32,49,54,53,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,56,48,48,10, 50,69,48,48,10,51,56,48,48,10,50,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,54,55,52,10,69,78,67,79,68,73,78, 71,32,49,54,53,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,69,48,48,10,49,56,48,48,10,48,69,48,48,10,49, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 54,55,53,10,69,78,67,79,68,73,78,71,32,49,54,53, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,57,67,48,10,49,66,48,48,10,49,57,67,48,10,49, 66,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,54,55,54,10,69, 78,67,79,68,73,78,71,32,49,54,53,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,51,56,48,10,48,54,48,48,10,48,51,56,48,10,48, 54,48,48,10,48,48,48,48,10,49,67,48,48,10,51,69, 48,48,10,51,51,48,48,10,51,70,48,48,10,49,70,48, 48,10,48,51,48,48,10,48,55,48,48,10,48,69,48,48, 10,51,67,48,48,10,70,56,48,48,10,69,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,54,55,55,10,69,78,67,79,68,73, 78,71,32,49,54,53,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,48,48,48,10,53,51,56,48,10, 55,54,48,48,10,50,51,56,48,10,67,54,48,48,10,48, 48,48,48,10,49,67,48,48,10,51,69,48,48,10,51,51, 48,48,10,51,70,48,48,10,49,70,48,48,10,48,51,48, 48,10,48,55,48,48,10,48,69,48,48,10,51,67,48,48, 10,70,56,48,48,10,69,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,54,55,56,10,69,78,67,79,68,73,78,71,32,49,54, 53,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,49,67,48,10,48,51,48,48,10,48,49,67,48,10, 48,51,48,48,10,48,48,48,48,10,48,51,56,48,10,48, 55,56,48,10,48,67,48,48,10,67,70,48,48,10,67,55, 56,48,10,67,49,56,48,10,67,49,56,48,10,70,70,48, 48,10,55,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,53,49, 49,10,69,78,67,79,68,73,78,71,32,49,54,53,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,50,48,48,48,10,50,48,48,48,10,50,67,48, 48,10,51,52,48,48,10,55,56,48,48,10,48,48,48,48, 10,67,49,56,48,10,67,49,56,48,10,70,70,56,48,10, 55,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,54,55,65,10,69,78,67, 79,68,73,78,71,32,49,54,53,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,56,48,48,10,49,56,48,48,10,48,48,48, 48,10,49,56,48,48,10,49,56,48,48,10,67,49,56,48, 10,67,49,56,48,10,70,70,56,48,10,55,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,54,55,66,10,69,78,67,79,68,73,78,71, 32,49,54,53,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,67,49,56,48,10,67,49,56,48, 10,70,70,56,48,10,55,70,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,54, 55,67,10,69,78,67,79,68,73,78,71,32,49,54,54,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,54,48,48,10,51,54,48,48,10,48,48,48, 48,10,67,49,56,48,10,67,49,56,48,10,70,70,56,48, 10,55,70,48,48,10,48,56,48,48,10,49,52,48,48,10, 48,56,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,54,55,68,10,69,78, 67,79,68,73,78,71,32,49,54,54,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,54,48,48,10,51,54, 48,48,10,48,48,48,48,10,49,56,48,48,10,68,57,56, 48,10,67,49,56,48,10,70,70,56,48,10,55,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,102,105,105,53,55,53,48,54,10,69,78,67,79,68, 73,78,71,32,49,54,54,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,67,49,56,48,10,67, 49,56,48,10,70,70,56,48,10,55,70,48,48,10,48,48, 48,48,10,51,54,48,48,10,51,54,48,48,10,48,48,48, 48,10,49,56,48,48,10,49,56,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,54,55,70,10,69,78,67,79,68,73,78,71,32,49, 54,54,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,54,48,48, 10,51,54,48,48,10,48,48,48,48,10,51,54,48,48,10, 51,54,48,48,10,67,49,56,48,10,67,49,56,48,10,70, 70,56,48,10,55,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,54,56,48, 10,69,78,67,79,68,73,78,71,32,49,54,54,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 67,49,56,48,10,67,49,56,48,10,70,70,56,48,10,55, 70,48,48,10,48,48,48,48,10,51,54,48,48,10,51,54, 48,48,10,48,48,48,48,10,51,54,48,48,10,51,54,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,54,56,49,10,69,78,67,79, 68,73,78,71,32,49,54,54,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,67,48,48,10,51,48,48, 48,10,49,67,48,48,10,51,48,48,48,10,48,48,48,48, 10,51,56,48,48,10,55,70,56,48,10,52,70,56,48,10, 49,56,48,48,10,51,48,48,48,10,54,48,48,48,10,67, 48,48,48,10,67,48,48,48,10,67,48,48,48,10,69,48, 48,48,10,55,70,56,48,10,51,70,56,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,54,56,50,10,69,78,67,79,68,73,78,71,32, 49,54,54,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,51,56,48,48, 10,55,70,56,48,10,52,70,56,48,10,49,56,48,48,10, 51,48,48,48,10,54,48,48,48,10,67,48,48,48,10,67, 48,48,48,10,67,48,48,48,10,69,48,48,48,10,55,70, 56,48,10,51,70,56,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,54,56, 51,10,69,78,67,79,68,73,78,71,32,49,54,54,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,56,48,48,10,55,70,56,48, 10,52,70,56,48,10,49,56,48,48,10,51,48,48,48,10, 54,48,48,48,10,68,66,48,48,10,68,66,48,48,10,67, 48,48,48,10,69,48,48,48,10,55,70,56,48,10,51,70, 56,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,54,56,52,10,69,78,67, 79,68,73,78,71,32,49,54,54,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,56,48,48,10,55,70,56,48,10,52,70,56,48, 10,49,56,48,48,10,51,54,48,48,10,54,54,48,48,10, 67,48,48,48,10,67,54,48,48,10,67,54,48,48,10,69, 48,48,48,10,55,70,56,48,10,51,70,56,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,54,56,53,10,69,78,67,79,68,73,78,71, 32,49,54,54,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,49,56,48,48,10,48,48,48,48,10,51,54, 48,48,10,51,54,48,48,10,48,48,48,48,10,51,56,48, 48,10,55,70,56,48,10,52,70,56,48,10,49,56,48,48, 10,51,48,48,48,10,54,48,48,48,10,67,48,48,48,10, 67,48,48,48,10,67,48,48,48,10,69,48,48,48,10,55, 70,56,48,10,51,70,56,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,53, 55,53,48,55,10,69,78,67,79,68,73,78,71,32,49,54, 55,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,56,48,48,10,55, 70,56,48,10,52,70,56,48,10,49,56,48,48,10,51,48, 48,48,10,55,66,48,48,10,68,66,48,48,10,67,48,48, 48,10,67,67,48,48,10,69,67,48,48,10,55,70,56,48, 10,51,70,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,54,56,55,10, 69,78,67,79,68,73,78,71,32,49,54,55,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,56,48,48,10,55,70,56,48,10,52, 70,56,48,10,49,56,48,48,10,51,68,56,48,10,54,68, 56,48,10,67,48,48,48,10,67,68,56,48,10,67,68,56, 48,10,69,48,48,48,10,55,70,56,48,10,51,70,56,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,102,105,105,53,55,53,49,50,10,69,78,67, 79,68,73,78,71,32,49,54,55,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,49, 48,48,48,10,49,48,48,48,10,49,54,48,48,10,49,65, 48,48,10,51,67,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,69,48,48,10,48,55,48,48,10,48,51,48,48, 10,48,51,48,48,10,51,70,48,48,10,51,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,54,56,57,10,69,78,67,79,68,73,78,71, 32,49,54,55,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,69,48, 48,10,48,55,48,48,10,48,51,48,48,10,48,51,48,48, 10,51,70,48,48,10,51,69,48,48,10,48,52,48,48,10, 48,65,48,48,10,48,52,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,54, 56,65,10,69,78,67,79,68,73,78,71,32,49,54,55,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,69,48,48,10,48,55,48, 48,10,48,51,48,48,10,48,51,48,48,10,51,70,48,48, 10,51,69,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,54,56,66,10,69,78, 67,79,68,73,78,71,32,49,54,55,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 49,48,48,48,10,49,48,48,48,10,49,54,48,48,10,49, 65,48,48,10,51,67,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,69,48,48,10,48,55,48,48,10,48,51,48, 48,10,48,51,48,48,10,51,70,48,48,10,51,69,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,54,56,67,10,69,78,67,79,68,73,78, 71,32,49,54,55,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,66,48,48,10,49, 66,48,48,10,48,48,48,48,10,48,67,48,48,10,48,69, 48,48,10,48,55,48,48,10,48,51,48,48,10,48,51,48, 48,10,51,70,48,48,10,51,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 54,56,68,10,69,78,67,79,68,73,78,71,32,49,54,55, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,69,48,48,10,48,55, 48,48,10,48,51,48,48,10,48,51,48,48,10,51,70,48, 48,10,51,69,48,48,10,48,48,48,48,10,49,66,48,48, 10,49,66,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,54,56,69,10,69, 78,67,79,68,73,78,71,32,49,54,55,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,49,56,48,48,10,49,56,48,48,10,48,48,48,48,10, 51,54,48,48,10,51,54,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,69,48,48,10,48,55,48,48,10,48,51, 48,48,10,48,51,48,48,10,51,70,48,48,10,51,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,54,56,70,10,69,78,67,79,68,73, 78,71,32,49,54,55,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,49,66,48,48, 10,49,66,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 69,48,48,10,48,55,48,48,10,48,51,48,48,10,48,51, 48,48,10,51,70,48,48,10,51,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,54,57,48,10,69,78,67,79,68,73,78,71,32,49,54, 56,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,49,66,48,48,10,49,66,48,48, 10,48,48,48,48,10,49,66,48,48,10,49,66,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,69,48,48,10,48, 55,48,48,10,48,51,48,48,10,48,51,48,48,10,51,70, 48,48,10,51,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,53,49, 51,10,69,78,67,79,68,73,78,71,32,49,54,56,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,48,48,48,10,49,48,48,48,10,49,54,48, 48,10,49,65,48,48,10,51,67,48,48,10,48,48,48,48, 10,48,54,48,48,10,48,55,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,55,48,48,10,48,69,48,48,10,51, 67,48,48,10,70,56,48,48,10,69,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,54,57,50,10,69,78,67, 79,68,73,78,71,32,49,54,56,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,65,48,48,10,48,65,48,48,10,48,52,48, 48,10,48,52,48,48,10,48,48,48,48,10,48,54,48,48, 10,48,55,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,55,48,48,10,48,69,48,48,10,51,67,48,48,10,70, 56,48,48,10,69,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,54,57,51,10,69,78,67,79,68,73,78,71, 32,49,54,56,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,54,48,48,10,48,55,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,55,48,48,10, 48,69,48,48,10,51,67,48,48,10,70,67,48,48,10,69, 65,48,48,10,48,52,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,54, 57,52,10,69,78,67,79,68,73,78,71,32,49,54,56,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,54,48,48,10,48,55,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,55,48,48,10,48,69,48,48,10, 51,67,48,48,10,70,57,56,48,10,69,49,56,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,54,57,53,10,69,78, 67,79,68,73,78,71,32,49,54,56,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,54,48, 48,10,48,55,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,55,48,48,10,48,69,48,48,10,51,69,56,48,10, 70,65,56,48,10,69,49,48,48,10,48,49,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,54,57,54,10,69,78,67,79,68,73,78, 71,32,49,54,56,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,54,48,48,10,48,55,48, 48,10,48,51,48,48,10,51,51,48,48,10,51,55,48,48, 10,48,69,48,48,10,51,67,48,48,10,70,66,48,48,10, 69,51,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 54,57,55,10,69,78,67,79,68,73,78,71,32,49,54,56, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,66,48,48,10,49,66,48,48,10,48,48, 48,48,10,48,54,48,48,10,48,55,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,55,48,48,10,48,69,48,48, 10,51,67,48,48,10,70,56,48,48,10,69,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,102,105,105,53,55,53,48,56, 10,69,78,67,79,68,73,78,71,32,49,54,56,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,49,66,48,48,10,49,66,48,48,10,48,48,48,48,10, 48,54,48,48,10,48,55,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,55,48,48,10,48,69,48,48,10,51,67, 48,48,10,70,56,48,48,10,69,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,54,57,57,10,69,78,67,79, 68,73,78,71,32,49,54,56,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,66,48, 48,10,49,66,48,48,10,48,48,48,48,10,49,66,48,48, 10,49,66,48,48,10,48,48,48,48,10,48,54,48,48,10, 48,55,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 55,48,48,10,48,69,48,48,10,51,67,48,48,10,70,56, 48,48,10,69,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,54,57,65,10,69,78,67,79,68,73,78,71,32, 49,54,57,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,48,48,48,10,48,57,52,48,10,48,68,52,48,10, 56,70,67,48,10,56,55,56,48,10,56,52,48,48,10,67, 68,56,48,10,70,68,56,48,10,55,56,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,54,57, 66,10,69,78,67,79,68,73,78,71,32,49,54,57,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,57,52,48,10,48,68,52,48,10,56,70,67,48,10, 56,70,56,48,10,56,56,48,48,10,67,69,67,48,10,70, 69,67,48,10,55,48,48,48,10,48,51,48,48,10,48,51, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,54,57,67,10,69,78,67, 79,68,73,78,71,32,49,54,57,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,48,48,48,10,48,68,56, 48,10,48,68,56,48,10,48,48,48,48,10,48,57,52,48, 10,48,68,52,48,10,56,70,67,48,10,56,70,56,48,10, 56,56,48,48,10,67,69,67,48,10,70,69,67,48,10,55, 48,48,48,10,48,51,48,48,10,48,51,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,54,57,68,10,69,78,67,79,68,73,78,71, 32,49,54,57,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,49,56,48,10,48,66,67,48,10,48,69,52,48, 10,56,70,67,48,10,56,70,56,48,10,56,56,48,48,10, 67,69,67,48,10,70,69,67,48,10,55,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,54, 57,69,10,69,78,67,79,68,73,78,71,32,49,54,57,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,48,48,48,10,48,68, 56,48,10,48,68,56,48,10,48,48,48,48,10,48,49,56, 48,10,48,66,67,48,10,48,69,52,48,10,56,70,67,48, 10,56,55,56,48,10,56,52,48,48,10,67,67,48,48,10, 70,67,48,48,10,55,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,54,57,70,10,69,78, 67,79,68,73,78,71,32,49,54,57,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,51,48,48,10,51,51,48,48,10,51, 48,48,48,10,51,54,67,48,10,51,54,67,48,10,51,48, 48,48,10,51,51,56,48,10,51,55,67,48,10,51,67,67, 48,10,51,56,67,48,10,70,70,67,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,54,65,48,10,69,78,67,79,68,73,78, 71,32,49,54,57,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,48,48,48,48,10,54, 67,48,48,10,54,67,48,48,10,48,48,48,48,10,51,56, 48,48,10,55,56,48,48,10,54,48,48,48,10,54,67,48, 48,10,51,56,48,48,10,55,48,48,48,10,69,48,48,48, 10,67,48,48,48,10,67,48,48,48,10,69,54,48,48,10, 55,69,48,48,10,51,67,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 54,65,49,10,69,78,67,79,68,73,78,71,32,49,54,57, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,55,48,48,10,48,68,56,48,10,52,68, 56,48,10,67,55,56,48,10,67,49,56,48,10,70,70,56, 48,10,55,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,54,65,50,10,69, 78,67,79,68,73,78,71,32,49,54,57,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 55,48,48,10,48,68,56,48,10,52,68,56,48,10,67,55, 56,48,10,67,49,56,48,10,70,70,56,48,10,55,70,48, 48,10,48,48,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,54,65,51,10,69,78,67,79,68,73, 78,71,32,49,54,57,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,48,48,48,10,48,55,48,48,10,48, 68,56,48,10,52,68,56,48,10,67,55,56,48,10,67,49, 56,48,10,70,70,56,48,10,55,70,48,48,10,48,48,48, 48,10,49,56,48,48,10,49,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,53,55,53,48,53,10,69,78,67,79,68,73,78,71,32, 49,55,48,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,48,48,48,10,48,68,56,48,10,48,68,56, 48,10,48,48,48,48,10,48,55,48,48,10,48,68,56,48, 10,52,68,56,48,10,67,55,56,48,10,67,49,56,48,10, 70,70,56,48,10,55,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,54,65, 53,10,69,78,67,79,68,73,78,71,32,49,55,48,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,55,48,48,10,48,68,56,48,10,52,68,56,48, 10,67,55,56,48,10,67,49,56,48,10,70,70,56,48,10, 55,70,48,48,10,48,48,48,48,10,48,54,67,48,10,48, 54,67,48,10,48,48,48,48,10,48,51,48,48,10,48,51, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,54,65,54,10,69,78,67, 79,68,73,78,71,32,49,55,48,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 68,56,48,10,48,68,56,48,10,48,48,48,48,10,48,68, 56,48,10,48,68,56,48,10,48,48,48,48,10,48,55,48, 48,10,48,68,56,48,10,52,68,56,48,10,67,55,56,48, 10,67,49,56,48,10,70,70,56,48,10,55,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,54,65,55,10,69,78,67,79,68,73,78,71, 32,49,55,48,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,48,48,48,10,48,54,48, 48,10,48,70,48,48,10,48,57,56,48,10,67,57,56,48, 10,67,70,56,48,10,67,55,56,48,10,67,49,56,48,10, 69,51,48,48,10,55,69,48,48,10,51,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,54, 65,56,10,69,78,67,79,68,73,78,71,32,49,55,48,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,49,66,48,48,10,49,66, 48,48,10,48,48,48,48,10,48,54,48,48,10,48,70,48, 48,10,48,57,56,48,10,67,57,56,48,10,67,70,56,48, 10,67,55,56,48,10,67,49,56,48,10,69,51,48,48,10, 55,69,48,48,10,51,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,54,65,57,10,69,78, 67,79,68,73,78,71,32,49,55,48,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,67,48,10,48,49,67,48,10,48,51, 56,48,10,48,55,48,48,10,48,51,48,48,10,48,49,56, 48,10,67,49,56,48,10,70,70,56,48,10,55,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,54,65,65,10,69,78,67,79,68,73,78, 71,32,49,55,48,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,69,48,48,10,51,56,48,48,10,54,48, 48,48,10,55,70,56,48,10,51,70,67,48,10,56,48,52, 48,10,70,70,67,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 54,65,66,10,69,78,67,79,68,73,78,71,32,49,55,48, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,67,48,10,48,49,56,48,10,48, 51,56,48,10,48,55,52,48,10,48,69,56,48,10,48,54, 48,48,10,48,51,48,48,10,67,51,48,48,10,70,70,48, 48,10,55,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,54,65,67,10,69, 78,67,79,68,73,78,71,32,49,55,48,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,48,48,48,10, 48,49,56,48,10,48,57,56,48,10,49,57,56,48,10,51, 49,56,48,10,49,57,56,48,10,51,49,56,48,10,48,49, 56,48,10,54,49,56,48,10,55,70,56,48,10,51,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,54,65,68,10,69,78,67,79,68,73, 78,71,32,49,55,48,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,51,48,48,48,10,51,48,48,48, 10,48,48,48,48,10,54,67,48,48,10,54,68,56,48,10, 48,57,56,48,10,49,57,56,48,10,51,49,56,48,10,49, 57,56,48,10,51,49,56,48,10,48,49,56,48,10,54,49, 56,48,10,55,70,56,48,10,51,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,54,65,69,10,69,78,67,79,68,73,78,71,32,49,55, 49,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,49,56,48,10,48,57,56,48,10, 49,57,56,48,10,51,49,56,48,10,49,57,56,48,10,51, 49,56,48,10,48,49,56,48,10,54,49,56,48,10,55,70, 56,48,10,51,70,48,48,10,48,48,48,48,10,49,66,48, 48,10,49,66,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,53,48, 57,10,69,78,67,79,68,73,78,71,32,49,55,49,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 56,48,10,48,49,48,48,10,48,50,67,48,10,48,53,67, 48,10,48,66,56,48,10,48,55,48,48,10,48,51,48,48, 10,48,49,56,48,10,67,49,56,48,10,70,70,56,48,10, 55,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,54,66,48,10,69,78,67, 79,68,73,78,71,32,49,55,49,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,49,48,48,10,48,50, 67,48,10,48,53,56,48,10,48,66,56,48,10,49,55,52, 48,10,48,69,56,48,10,48,54,48,48,10,48,51,48,48, 10,67,51,48,48,10,70,70,48,48,10,55,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,54,66,49,10,69,78,67,79,68,73,78,71, 32,49,55,49,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,68,56,48,10,48,68,56,48,10,48, 48,48,48,10,48,48,56,48,10,48,49,48,48,10,48,50, 67,48,10,48,53,67,48,10,48,66,56,48,10,48,55,48, 48,10,48,51,48,48,10,48,49,56,48,10,67,49,56,48, 10,70,70,56,48,10,55,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,54, 66,50,10,69,78,67,79,68,73,78,71,32,49,55,49,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,56,48,10,48,49,48,48,10,48,50,67,48,10,48,53, 67,48,10,48,66,56,48,10,48,55,48,48,10,48,51,48, 48,10,48,49,56,48,10,67,49,56,48,10,70,70,56,48, 10,55,70,48,48,10,48,48,48,48,10,51,54,48,48,10, 51,54,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,54,66,51,10,69,78, 67,79,68,73,78,71,32,49,55,49,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,56,48,10,48, 49,48,48,10,48,50,67,48,10,48,53,67,48,10,48,66, 56,48,10,48,55,48,48,10,48,51,48,48,10,48,49,56, 48,10,67,49,56,48,10,70,70,56,48,10,55,70,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,54,66,52,10,69,78,67,79,68,73,78, 71,32,49,55,49,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,51,48,48,48,10,51,48,48,48,10, 48,48,48,48,10,54,67,56,48,10,54,68,48,48,10,48, 50,67,48,10,48,53,67,48,10,48,66,56,48,10,48,55, 48,48,10,48,51,48,48,10,48,49,56,48,10,67,49,56, 48,10,70,70,56,48,10,55,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 54,66,53,10,69,78,67,79,68,73,78,71,32,49,55,49, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,50,56,48,10,48,50,56,48,10,48,49,48,48,10, 48,49,48,48,10,48,48,48,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,55,51,56,48,10,51,70,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,54,66,54,10,69, 78,67,79,68,73,78,71,32,49,55,49,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,48,48,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,55,51,56,48,10,51,70,48,48,10,49,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,54,66,55,10,69,78,67,79,68,73, 78,71,32,49,55,49,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,49,66,48,48,10,49,66,48,48,10, 48,48,48,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,55,51,56, 48,10,51,70,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,54,66,56,10,69,78,67,79,68,73,78,71,32,49,55, 50,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,55,51,56,48,10,51,70,48,48,10,49,69,48, 48,10,49,66,48,48,10,49,66,48,48,10,48,67,48,48, 10,48,67,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,54,66,57,10, 69,78,67,79,68,73,78,71,32,49,55,50,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,56,48,48,10,49,57,56,48,10,67, 49,56,48,10,67,49,56,48,10,67,49,56,48,10,67,49, 56,48,10,69,51,56,48,10,55,70,48,48,10,51,69,48, 48,10,48,48,48,48,10,48,54,48,48,10,48,54,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,102,105,105,53,55,53,49,52,10,69,78,67, 79,68,73,78,71,32,49,55,50,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,49,56,48, 10,67,49,56,48,10,67,49,56,48,10,67,49,56,48,10, 67,49,56,48,10,69,51,56,48,10,55,70,48,48,10,51, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,54,66,66,10,69,78,67,79,68,73,78,71, 32,49,55,50,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,50,48,48,48,10,50,48, 48,48,10,50,67,48,48,10,51,52,48,48,10,55,56,48, 48,10,48,48,48,48,10,48,49,56,48,10,67,49,56,48, 10,67,49,56,48,10,67,49,56,48,10,67,49,56,48,10, 69,51,56,48,10,55,70,48,48,10,51,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,54, 66,67,10,69,78,67,79,68,73,78,71,32,49,55,50,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,56,48, 48,10,49,57,56,48,10,67,49,56,48,10,67,49,56,48, 10,67,49,56,48,10,67,49,56,48,10,69,51,56,48,10, 55,70,48,48,10,51,69,48,48,10,48,65,48,48,10,48, 52,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,54,66,68,10,69,78, 67,79,68,73,78,71,32,49,55,50,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,56,48,48,10,49,56,48,48,10,48,48, 48,48,10,51,54,48,48,10,51,54,48,48,10,48,49,56, 48,10,67,49,56,48,10,67,49,56,48,10,67,49,56,48, 10,67,49,56,48,10,69,51,56,48,10,55,70,48,48,10, 51,69,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,54,66,69,10,69,78,67,79,68,73,78, 71,32,49,55,50,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,49,69, 48,48,10,51,51,48,48,10,51,55,56,48,10,51,67,56, 48,10,70,70,56,48,10,54,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 54,66,70,10,69,78,67,79,68,73,78,71,32,49,55,50, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,51,56,48,48,10,55,70, 56,48,10,52,70,56,48,10,49,56,48,48,10,51,48,48, 48,10,55,66,48,48,10,68,66,48,48,10,67,48,48,48, 10,67,67,48,48,10,69,67,48,48,10,55,70,56,48,10, 51,70,56,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,54,67,48,10,69, 78,67,79,68,73,78,71,32,49,55,50,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,67,48,48,10, 51,48,48,48,10,49,67,48,48,10,51,48,48,48,10,48, 48,48,48,10,49,67,48,48,10,51,69,48,48,10,51,55, 48,48,10,51,51,48,48,10,51,51,48,48,10,51,70,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,54,67,49,10,69,78,67,79,68,73, 78,71,32,49,55,50,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,49,69, 48,48,10,49,51,67,48,10,49,49,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,54,67,50,10,69,78,67,79,68,73,78,71,32,49,55, 51,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,69,48,48,10, 49,56,48,48,10,48,69,48,48,10,49,56,48,48,10,48, 48,48,48,10,48,67,48,48,10,49,69,48,48,10,49,51, 67,48,10,49,49,67,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,54,67,51,10, 69,78,67,79,68,73,78,71,32,49,55,51,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,66,48,48,10, 49,66,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,49,69,48,48,10,49,51,67,48,10,49,49, 67,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,54,67,52,10,69,78,67,79,68, 73,78,71,32,49,55,51,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,67,48,48,10,51,69,48,48,10,51, 51,48,48,10,49,70,48,48,10,48,70,48,48,10,50,51, 48,48,10,53,55,48,48,10,50,69,48,48,10,51,67,48, 48,10,70,56,48,48,10,69,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,54,67,53,10,69,78,67,79,68,73,78,71,32,49, 55,51,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,67,48,48,10,51,69,48,48,10,51,51,48,48,10,51, 70,48,48,10,49,70,48,48,10,48,51,48,48,10,51,70, 48,48,10,48,69,48,48,10,51,67,48,48,10,70,56,48, 48,10,69,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,54,67,54, 10,69,78,67,79,68,73,78,71,32,49,55,51,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,52,48,48,10,49,52,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,48,48,48,10,49,67,48,48,10, 51,69,48,48,10,51,51,48,48,10,51,70,48,48,10,49, 70,48,48,10,48,51,48,48,10,48,55,48,48,10,48,69, 48,48,10,51,67,48,48,10,70,56,48,48,10,69,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,54,67,55,10,69,78,67,79, 68,73,78,71,32,49,55,51,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,67,48,48,10,49,52,48, 48,10,49,67,48,48,10,48,56,48,48,10,51,48,48,48, 10,48,48,48,48,10,49,67,48,48,10,51,69,48,48,10, 51,51,48,48,10,51,70,48,48,10,49,70,48,48,10,48, 51,48,48,10,48,55,48,48,10,48,69,48,48,10,51,67, 48,48,10,70,56,48,48,10,69,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,54,67,56,10,69,78,67,79,68,73,78,71,32, 49,55,51,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,48,48,48,48, 10,49,67,48,48,10,51,69,48,48,10,51,51,48,48,10, 51,70,48,48,10,49,70,48,48,10,48,51,48,48,10,48, 55,48,48,10,48,69,48,48,10,51,67,48,48,10,70,56, 48,48,10,69,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,54,67, 57,10,69,78,67,79,68,73,78,71,32,49,55,51,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,56,48,48,10,49,67,48,48,10,51,54,48, 48,10,50,50,48,48,10,48,48,48,48,10,49,67,48,48, 10,51,69,48,48,10,51,51,48,48,10,51,70,48,48,10, 49,70,48,48,10,48,51,48,48,10,48,55,48,48,10,48, 69,48,48,10,51,67,48,48,10,70,56,48,48,10,69,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,54,67,65,10,69,78,67, 79,68,73,78,71,32,49,55,51,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,54,48,48,10,51,54,48, 48,10,48,48,48,48,10,49,67,48,48,10,51,69,48,48, 10,51,51,48,48,10,51,70,48,48,10,49,70,48,48,10, 48,51,48,48,10,48,55,48,48,10,48,69,48,48,10,51, 67,48,48,10,70,56,48,48,10,69,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,54,67,66,10,69,78,67,79,68,73,78,71, 32,49,55,51,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,56,48,48,10,49,56,48,48,10,48,48, 48,48,10,51,54,48,48,10,51,54,48,48,10,48,48,48, 48,10,49,67,48,48,10,51,69,48,48,10,51,51,48,48, 10,51,70,48,48,10,49,70,48,48,10,48,51,48,48,10, 48,55,48,48,10,48,69,48,48,10,51,67,48,48,10,70, 56,48,48,10,69,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,54, 67,67,10,69,78,67,79,68,73,78,71,32,49,55,52,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,49,67,48,10,48,51,67, 48,10,48,54,48,48,10,67,55,56,48,10,67,51,67,48, 10,67,48,67,48,10,69,48,67,48,10,55,70,56,48,10, 51,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,54,67,68,10,69,78, 67,79,68,73,78,71,32,49,55,52,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,49,67,48,10,48,51,67,48,10,51,54,48, 48,10,70,55,56,48,10,65,51,67,48,10,50,48,67,48, 10,51,48,67,48,10,51,70,56,48,10,49,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,54,67,69,10,69,78,67,79,68,73,78, 71,32,49,55,52,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,50, 56,48,48,10,51,56,48,48,10,49,48,48,48,10,49,49, 67,48,10,48,51,67,48,10,48,54,48,48,10,67,55,56, 48,10,67,51,67,48,10,67,48,67,48,10,69,48,67,48, 10,55,70,56,48,10,51,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 54,67,70,10,69,78,67,79,68,73,78,71,32,49,55,52, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,49,56,48,48,10,48,48,48,48,10,49,67, 48,48,10,51,69,48,48,10,51,51,48,48,10,51,70,48, 48,10,49,70,48,48,10,48,51,48,48,10,48,55,48,48, 10,48,69,48,48,10,51,67,48,48,10,70,56,48,48,10, 69,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,54,68,48,10,69, 78,67,79,68,73,78,71,32,49,55,52,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,49,67,48,10,48, 51,67,48,10,48,54,48,48,10,67,55,56,48,10,67,51, 67,48,10,67,48,67,48,10,69,48,67,48,10,55,70,56, 48,10,51,70,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,54,68,49,10,69,78,67,79,68,73, 78,71,32,49,55,52,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,49,67,48,10,48,51,67,48,10,48, 54,48,48,10,67,55,56,48,10,67,51,67,48,10,67,48, 67,48,10,69,48,67,48,10,55,70,56,48,10,51,70,48, 48,10,51,54,48,48,10,51,54,48,48,10,48,48,48,48, 10,49,56,48,48,10,49,56,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,53,55,53,49,57,10,69,78,67,79,68,73,78,71,32, 49,55,52,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,49,56,48,48,10, 54,56,48,48,10,67,48,48,48,10,70,70,67,48,10,70, 70,67,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,54,68, 51,10,69,78,67,79,68,73,78,71,32,49,55,52,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,67,48,48,48,10,55,48,48,48,10,67,48,48,48, 10,49,56,48,48,10,49,56,48,48,10,54,56,48,48,10, 67,48,48,48,10,70,70,67,48,10,70,70,67,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,54,68,52,10,69,78,67, 79,68,73,78,71,32,49,55,52,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,70,48,48, 10,51,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,53,55,53,51,52,10,69,78,67,79,68,73, 78,71,32,49,55,52,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,67,48,48,10,51, 69,48,48,10,51,55,48,48,10,51,51,48,48,10,51,51, 48,48,10,51,70,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,54,68,54,10,69,78,67,79,68,73,78,71,32,49,55, 53,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,50,48,48,48,10,50,54,48,48,10,51,65,48,48, 10,55,69,48,48,10,56,48,48,48,10,70,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,54,68,55,10, 69,78,67,79,68,73,78,71,32,49,55,53,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,50,65,48, 48,10,50,52,48,48,10,50,65,48,48,10,55,69,48,48, 10,56,48,48,48,10,70,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,54,68,56,10,69,78,67,79,68, 73,78,71,32,49,55,53,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,49,56,48,48,10,51,67,48, 48,10,50,52,48,48,10,55,67,48,48,10,67,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,54,68,57,10,69,78,67,79,68,73,78,71,32,49, 55,53,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,57,48,48,48,10,53,48,48,48,10,53,48,48, 48,10,51,48,48,48,10,69,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,54,68,65, 10,69,78,67,79,68,73,78,71,32,49,55,53,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,54,48, 48,48,10,57,48,48,48,10,54,48,48,48,10,56,48,48, 48,10,65,48,48,48,10,56,56,48,48,10,55,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,54,68,66,10,69,78,67,79, 68,73,78,71,32,49,55,53,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,50,48, 48,48,10,48,48,48,48,10,53,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,54,68,67,10,69,78,67,79,68,73,78,71,32, 49,55,53,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,50,65,48,48,10,66,67,48,48,10,65,48, 48,48,10,69,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,54,68, 68,10,69,78,67,79,68,73,78,71,32,49,55,53,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,54,49,56, 48,10,66,70,52,48,10,52,48,56,48,10,56,48,52,48, 10,56,48,52,48,10,56,48,52,48,10,56,48,52,48,10, 56,48,52,48,10,52,48,56,48,10,66,70,52,48,10,54, 49,56,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,54,68,69,10,69,78,67, 79,68,73,78,71,32,49,55,53,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,56,48, 48,10,55,55,48,48,10,54,51,48,48,10,52,57,48,48, 10,57,52,56,48,10,52,57,48,48,10,54,51,48,48,10, 55,55,48,48,10,48,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,54,68,70,10,69,78,67,79,68,73,78,71, 32,49,55,53,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,56,48,48,10,49, 67,48,48,10,48,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,54, 69,48,10,69,78,67,79,68,73,78,71,32,49,55,54,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,49,67,48,48,10,49,67,48,48,10,49, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,54,69,49,10,69,78, 67,79,68,73,78,71,32,49,55,54,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,51,48,48,48,10, 52,56,48,48,10,49,67,48,48,10,69,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,54,69,50,10,69,78,67,79,68,73,78, 71,32,49,55,54,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,50,48,48,48,10,53,48,48,48,10, 55,48,48,48,10,56,48,48,48,10,56,48,48,48,10,56, 48,48,48,10,56,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 54,69,51,10,69,78,67,79,68,73,78,71,32,49,55,54, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,53,48,48,10,53,69,48,48,10,53,48,48,48,10, 55,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,54,69,52,10,69, 78,67,79,68,73,78,71,32,49,55,54,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,56,52,48,48,10,70,56,48,48,10,56,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,54,69,53,10,69,78,67,79,68,73, 78,71,32,49,55,54,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,52,48,48,10,48, 65,48,48,10,48,69,48,48,10,48,50,48,48,10,48,54, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,54,69,54,10,69,78,67,79,68,73,78,71,32,49,55, 54,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 48,48,48,10,54,56,48,48,10,56,48,48,48,10,55,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,54,69,55,10, 69,78,67,79,68,73,78,71,32,49,55,54,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,56,48,48,10,51,52,48,48,10,52,48,48,48, 10,51,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,54,69,56,10,69,78,67,79,68, 73,78,71,32,49,55,54,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,50,48,48,48,10,48,56,48, 48,10,52,56,48,48,10,52,56,48,48,10,51,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,54,69,57,10,69,78,67,79,68,73,78,71,32,49, 55,54,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,56,48,48,10,49,52,48, 48,10,50,65,48,48,10,53,53,48,48,10,65,50,56,48, 10,53,53,48,48,10,50,65,48,48,10,50,65,48,48,10, 50,65,48,48,10,50,65,48,48,10,50,65,48,48,10,50, 65,48,48,10,50,65,48,48,10,52,49,48,48,10,70,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,54,69,65, 10,69,78,67,79,68,73,78,71,32,49,55,55,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,56,48,48,10,49,52,48,48,10,50,50, 48,48,10,49,52,48,48,10,48,56,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,54,69,66,10,69,78,67,79, 68,73,78,71,32,49,55,55,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,56,48,48,10,49,52, 48,48,10,50,50,48,48,10,49,52,48,48,10,48,56,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,54,69,67,10,69,78,67,79,68,73,78,71,32, 49,55,55,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,52,48,48,10,48,69,48,48,10,48,69,48, 48,10,48,69,48,48,10,48,52,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,54,69, 68,10,69,78,67,79,68,73,78,71,32,49,55,55,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,48,48,48,10,50,56,48,48,10,51,56,48,48,10,52, 48,48,48,10,52,48,48,48,10,52,48,48,48,10,52,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,54,69,69,10,69,78,67, 79,68,73,78,71,32,49,55,55,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,56,48,48,10,49,67,48,48,10,51,54, 48,48,10,50,50,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,69,48,48,10,48,55,48,48,10,48,51,48,48, 10,48,51,48,48,10,51,70,48,48,10,51,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,54,69,70,10,69,78,67,79,68,73,78,71, 32,49,55,55,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,52, 48,48,10,48,69,48,48,10,49,66,48,48,10,49,49,48, 48,10,48,48,48,48,10,48,54,48,48,10,48,55,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,55,48,48,10, 48,69,48,48,10,51,67,48,48,10,70,56,48,48,10,69, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,54, 70,48,10,69,78,67,79,68,73,78,71,32,49,55,55,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,56,48, 48,10,51,67,48,48,10,51,67,48,48,10,49,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,54,70,49,10,69,78, 67,79,68,73,78,71,32,49,55,55,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,55,48,48,48,10,51,48,48,48,10,51,48, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,54,70,50,10,69,78,67,79,68,73,78, 71,32,49,55,55,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,55, 49,56,48,10,51,70,56,48,10,51,70,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 54,70,51,10,69,78,67,79,68,73,78,71,32,49,55,55, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,54,67,48,10,54,54,67,48,10,55,54,67,48,10,51, 70,67,48,10,51,70,56,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,54,70,52,10,69, 78,67,79,68,73,78,71,32,49,55,56,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,51,56,48,10,48,55,56,48,10, 54,54,48,48,10,55,54,48,48,10,51,70,56,48,10,49, 70,56,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,54,70,53,10,69,78,67,79,68,73, 78,71,32,49,55,56,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,48,67,48,48,10, 49,69,48,48,10,51,54,48,48,10,51,51,48,48,10,54, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,68, 56,48,10,54,68,56,48,10,55,70,56,48,10,51,66,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,54,70,54,10,69,78,67,79,68,73,78,71,32,49,55, 56,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,69,48,48,10,49,70,48,48,10,51,56,48,48,10, 51,48,48,48,10,51,49,56,48,10,49,70,56,48,10,48, 70,48,48,10,48,69,48,48,10,49,67,48,48,10,51,56, 48,48,10,55,48,48,48,10,54,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,54,70,55,10, 69,78,67,79,68,73,78,71,32,49,55,56,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,49,56,48, 10,54,49,56,48,10,55,51,56,48,10,51,51,48,48,10, 51,51,48,48,10,51,51,48,48,10,49,69,48,48,10,49, 69,48,48,10,49,69,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,54,70,56,10,69,78,67,79,68, 73,78,71,32,49,55,56,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,49,69,48,48,10,49,69,48,48,10, 49,69,48,48,10,51,51,48,48,10,51,51,48,48,10,51, 51,48,48,10,55,51,56,48,10,54,49,56,48,10,54,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,54,70,57,10,69,78,67,79,68,73,78,71,32,49, 55,56,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,51,51,48,48, 10,51,51,48,48,10,51,70,48,48,10,49,70,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,56,48,10,48,51,56,48,10,48,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,54,70,65, 10,69,78,67,79,68,73,78,71,32,49,55,56,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,48,48,48, 10,48,54,67,48,10,48,54,67,48,10,48,48,48,48,10, 48,57,52,48,10,48,68,52,48,10,56,70,67,48,10,56, 55,56,48,10,56,54,48,48,10,67,67,67,48,10,70,67, 67,48,10,55,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,54,70,66,10,69,78,67,79, 68,73,78,71,32,49,55,56,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,49,56,48,10,48,49,56,48, 10,48,48,48,48,10,48,49,56,48,10,48,66,67,48,10, 48,69,52,48,10,56,70,67,48,10,56,55,56,48,10,56, 52,48,48,10,67,68,56,48,10,70,68,56,48,10,55,56, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,54,70,67,10,69,78,67,79,68,73,78,71,32, 49,55,56,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,56,48, 48,10,49,56,48,48,10,48,48,48,48,10,49,67,48,48, 10,51,67,48,48,10,51,48,48,48,10,51,54,48,48,10, 49,67,48,48,10,51,56,48,48,10,55,54,48,48,10,54, 54,48,48,10,54,48,48,48,10,55,48,48,48,10,51,70, 56,48,10,49,70,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,54,70, 68,10,69,78,67,79,68,73,78,71,32,49,55,56,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,69,48,48,10,49,69,48,48, 10,49,56,48,48,10,49,70,48,48,10,51,70,48,48,10, 51,56,48,48,10,48,48,48,48,10,48,65,48,48,10,48, 65,48,48,10,48,65,48,48,10,48,65,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,54,70,69,10,69,78,67, 79,68,73,78,71,32,49,55,57,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,69,48,48,10,49,70,48,48, 10,49,49,48,48,10,51,70,48,48,10,55,70,48,48,10, 54,48,48,48,10,54,65,48,48,10,54,65,48,48,10,54, 65,48,48,10,54,65,48,48,10,54,65,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,54,70,70,10,69,78,67,79,68,73,78,71, 32,49,55,57,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 52,48,48,10,48,69,48,48,10,49,66,48,48,10,49,49, 48,48,10,48,48,48,48,10,48,67,48,48,10,49,69,48, 48,10,51,51,48,48,10,51,55,56,48,10,51,67,56,48, 10,70,70,56,48,10,54,55,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,69, 48,49,10,69,78,67,79,68,73,78,71,32,51,53,56,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,69,48,48,10,50,49,48,48,10,52,48,56, 48,10,54,48,56,48,10,50,48,56,48,10,50,48,56,48, 10,50,48,56,48,10,50,48,56,48,10,50,48,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,48,50,10,69,78, 67,79,68,73,78,71,32,51,53,56,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,48, 56,48,10,56,56,56,48,10,67,56,56,48,10,65,56,56, 48,10,52,56,56,48,10,48,56,56,48,10,48,56,56,48, 10,48,56,56,48,10,48,55,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,69,48,51,10,69,78,67,79,68,73,78, 71,32,51,53,56,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,53,48,56,48,10,65,56, 56,48,10,67,56,56,48,10,65,56,56,48,10,52,56,56, 48,10,48,56,56,48,10,48,56,56,48,10,48,56,56,48, 10,48,55,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 69,48,52,10,69,78,67,79,68,73,78,71,32,51,53,56, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,69,48,48,10,50,49,48,48,10,52,48, 56,48,10,52,56,56,48,10,53,52,56,48,10,53,52,56, 48,10,50,56,56,48,10,52,48,56,48,10,52,48,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,69,48,53,10,69, 78,67,79,68,73,78,71,32,51,53,56,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 50,48,48,10,50,68,48,48,10,52,48,56,48,10,52,56, 56,48,10,53,52,56,48,10,53,52,56,48,10,50,56,56, 48,10,52,48,56,48,10,52,48,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,48,54,10,69,78,67,79,68,73, 78,71,32,51,53,57,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,65,48,56,48,10,68, 48,56,48,10,57,48,56,48,10,53,48,56,48,10,49,48, 56,48,10,51,48,56,48,10,53,56,56,48,10,53,52,56, 48,10,50,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,69,48,55,10,69,78,67,79,68,73,78,71,32,51,53, 57,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,50,48,48,10,48,53,48,48,10,48, 53,48,48,10,48,51,48,48,10,52,49,48,48,10,50,49, 48,48,10,49,49,48,48,10,48,57,48,48,10,48,54,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,69,48,56,10, 69,78,67,79,68,73,78,71,32,51,53,57,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,69,48,48,10,50,49,48,48,10,52,56,56,48,10,49, 52,56,48,10,49,52,56,48,10,48,67,56,48,10,48,52, 56,48,10,48,52,56,48,10,48,51,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,69,48,57,10,69,78,67,79,68, 73,78,71,32,51,53,57,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,56,48,48,10, 56,52,48,48,10,48,50,48,48,10,52,50,48,48,10,65, 50,48,48,10,65,51,48,48,10,54,54,56,48,10,50,65, 56,48,10,49,49,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,48,65,10,69,78,67,79,68,73,78,71,32,51, 53,57,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,56,48,10,55,48,56,48,10,56,66,48,48,10, 67,56,56,48,10,65,56,56,48,10,52,56,56,48,10,48, 56,56,48,10,48,56,56,48,10,48,56,56,48,10,48,55, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,69,48,66, 10,69,78,67,79,68,73,78,71,32,51,53,57,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,56,48, 10,53,48,56,48,10,65,66,48,48,10,67,56,56,48,10, 65,56,56,48,10,52,56,56,48,10,48,56,56,48,10,48, 56,56,48,10,48,56,56,48,10,48,55,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,69,48,67,10,69,78,67,79, 68,73,78,71,32,51,53,57,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,67,56,48, 10,56,50,56,48,10,52,50,56,48,10,56,50,56,48,10, 56,50,56,48,10,67,54,56,48,10,65,66,56,48,10,65, 65,56,48,10,52,52,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,69,48,68,10,69,78,67,79,68,73,78,71,32, 51,53,57,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,56,56,48,10,56,52,56,48, 10,52,52,56,48,10,56,52,56,48,10,56,52,56,48,10, 67,52,56,48,10,65,52,56,48,10,65,52,56,48,10,52, 55,56,48,10,48,48,48,48,10,48,67,56,48,10,48,55, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,48, 69,10,69,78,67,79,68,73,78,71,32,51,53,57,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,70,48,48,10,52,48,56,48,10,54,48,56,48, 10,50,48,56,48,10,50,48,56,48,10,54,48,56,48,10, 65,48,56,48,10,65,52,56,48,10,53,69,56,48,10,50, 53,56,48,10,49,56,56,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,69,48,70,10,69,78,67, 79,68,73,78,71,32,51,53,57,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,70,48, 48,10,52,48,56,48,10,54,48,56,48,10,50,48,56,48, 10,50,48,56,48,10,54,48,56,48,10,65,48,56,48,10, 65,56,56,48,10,53,65,56,48,10,50,68,56,48,10,49, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,69,49,48,10,69,78,67,79,68,73,78,71, 32,51,54,48,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,69,56,48,10,52,49,48, 48,10,55,70,48,48,10,48,56,56,48,10,49,52,56,48, 10,49,52,56,48,10,48,67,56,48,10,48,52,56,48,10, 48,66,48,48,10,49,57,56,48,10,50,65,56,48,10,49, 53,56,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,69, 49,49,10,69,78,67,79,68,73,78,71,32,51,54,48,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,65,51,48,48,10,68,52,56,48,10,57,52,56, 48,10,53,56,56,48,10,49,56,56,48,10,49,48,56,48, 10,49,48,56,48,10,49,48,56,48,10,49,48,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,49,50,10,69,78, 67,79,68,73,78,71,32,51,54,48,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,67, 56,48,10,57,50,56,48,10,57,50,56,48,10,65,65,56, 48,10,65,65,56,48,10,57,54,56,48,10,65,66,56,48, 10,67,65,56,48,10,56,52,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,69,49,51,10,69,78,67,79,68,73,78, 71,32,51,54,48,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,50,48,48,10,56,65, 48,48,10,52,65,48,48,10,56,65,48,48,10,56,65,48, 48,10,67,66,48,48,10,65,69,56,48,10,65,65,56,48, 10,52,66,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 69,49,52,10,69,78,67,79,68,73,78,71,32,51,54,48, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,69,48,48,10,50,49,48,48,10,52,48, 56,48,10,52,56,56,48,10,53,52,56,48,10,53,52,56, 48,10,52,56,56,48,10,53,48,56,48,10,50,48,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,69,49,53,10,69, 78,67,79,68,73,78,71,32,51,54,48,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 50,48,48,10,50,68,48,48,10,52,48,56,48,10,52,56, 56,48,10,53,52,56,48,10,53,52,56,48,10,52,56,56, 48,10,53,48,56,48,10,50,48,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,49,54,10,69,78,67,79,68,73, 78,71,32,51,54,48,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,69,48,48,10,50, 49,48,48,10,52,48,56,48,10,54,48,56,48,10,50,48, 56,48,10,51,48,56,48,10,50,56,56,48,10,50,56,56, 48,10,49,48,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,69,49,55,10,69,78,67,79,68,73,78,71,32,51,54, 48,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,52,51,48,48,10,65,52,56,48,10,65, 52,56,48,10,54,56,56,48,10,50,56,56,48,10,51,48, 56,48,10,51,48,56,48,10,50,48,56,48,10,50,48,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,69,49,56,10, 69,78,67,79,68,73,78,71,32,51,54,48,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,69,56,48,10,52,49,48,48,10,52,48,48,48,10,55, 70,48,48,10,48,48,56,48,10,50,48,56,48,10,50,48, 56,48,10,50,48,56,48,10,49,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,69,49,57,10,69,78,67,79,68, 73,78,71,32,51,54,48,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,52,50,48,48,10, 65,50,48,48,10,65,50,48,48,10,54,50,48,48,10,50, 50,48,48,10,50,55,48,48,10,50,65,56,48,10,51,50, 56,48,10,50,49,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,49,65,10,69,78,67,79,68,73,78,71,32,51, 54,49,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,52,48,56,48,10,65,48,56,48,10, 65,48,56,48,10,54,48,56,48,10,50,48,56,48,10,50, 48,56,48,10,50,48,56,48,10,50,48,56,48,10,49,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,69,49,66, 10,69,78,67,79,68,73,78,71,32,51,54,49,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,56,48,10,48,48,56,48, 10,52,48,56,48,10,65,48,56,48,10,65,48,56,48,10, 54,48,56,48,10,50,48,56,48,10,50,48,56,48,10,50, 48,56,48,10,50,48,56,48,10,49,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,69,49,67,10,69,78,67,79, 68,73,78,71,32,51,54,49,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,52,48,56,48, 10,65,48,56,48,10,65,48,56,48,10,67,48,56,48,10, 56,48,56,48,10,56,56,56,48,10,57,52,56,48,10,65, 50,56,48,10,52,49,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,69,49,68,10,69,78,67,79,68,73,78,71,32, 51,54,49,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,56, 48,10,48,48,56,48,10,52,48,56,48,10,65,48,56,48, 10,65,48,56,48,10,67,48,56,48,10,56,48,56,48,10, 56,56,56,48,10,57,52,56,48,10,65,50,56,48,10,52, 49,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,49, 69,10,69,78,67,79,68,73,78,71,32,51,54,49,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,52,48,56,48,10,65,48,56,48,10,65,52,56,48, 10,54,52,56,48,10,50,65,56,48,10,50,65,56,48,10, 51,49,56,48,10,51,49,56,48,10,50,48,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,69,49,70,10,69,78,67, 79,68,73,78,71,32,51,54,49,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,56,48,10,48,48,56,48,10,52,48,56, 48,10,65,48,56,48,10,65,52,56,48,10,54,52,56,48, 10,50,65,56,48,10,50,65,56,48,10,51,49,56,48,10, 51,49,56,48,10,50,48,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,69,50,48,10,69,78,67,79,68,73,78,71, 32,51,54,49,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,50,49,48, 48,10,52,48,56,48,10,54,48,56,48,10,50,48,56,48, 10,54,48,56,48,10,65,48,56,48,10,65,48,56,48,10, 52,48,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,69, 50,49,10,69,78,67,79,68,73,78,71,32,51,54,49,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,50,48,56,48,10,53,48,56,48,10,53,48,56, 48,10,51,48,56,48,10,49,48,56,48,10,51,48,56,48, 10,53,56,56,48,10,53,52,56,48,10,50,51,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,50,50,10,69,78, 67,79,68,73,78,71,32,51,54,49,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,50,48, 56,48,10,53,48,56,48,10,53,48,56,48,10,54,48,56, 48,10,51,56,56,48,10,52,48,56,48,10,52,48,56,48, 10,52,48,56,48,10,51,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,69,50,51,10,69,78,67,79,68,73,78, 71,32,51,54,49,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,69,56,48,10,52,49, 48,48,10,52,48,48,48,10,55,70,48,48,10,48,48,56, 48,10,48,49,56,48,10,48,50,56,48,10,48,50,56,48, 10,48,49,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 69,50,52,10,69,78,67,79,68,73,78,71,32,51,54,50, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,69,48,48,10,50,49,48,48,10,52,48, 56,48,10,54,48,56,48,10,50,48,56,48,10,51,48,56, 48,10,50,56,56,48,10,50,56,56,48,10,49,48,56,48, 10,48,48,56,48,10,48,48,56,48,10,48,48,56,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,69,50,53,10,69, 78,67,79,68,73,78,71,32,51,54,50,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 69,48,48,10,52,49,48,48,10,48,48,56,48,10,51,67, 56,48,10,52,50,56,48,10,54,49,56,48,10,53,48,56, 48,10,53,48,56,48,10,50,48,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,50,54,10,69,78,67,79,68,73, 78,71,32,51,54,50,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,69,48,48,10,50, 49,48,48,10,52,48,56,48,10,54,48,56,48,10,50,48, 56,48,10,54,48,56,48,10,65,48,56,48,10,65,48,56, 48,10,52,48,56,48,10,48,48,56,48,10,48,48,56,48, 10,48,48,56,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,69,50,55,10,69,78,67,79,68,73,78,71,32,51,54, 50,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,69,48,48,10,50,49,48,48,10,52, 48,56,48,10,48,48,56,48,10,48,48,56,48,10,48,49, 56,48,10,48,50,56,48,10,48,50,56,48,10,48,49,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,69,50,56,10, 69,78,67,79,68,73,78,71,32,51,54,50,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,56,48,10,48,48,56,48,10, 49,70,48,48,10,50,49,48,48,10,52,48,56,48,10,52, 56,56,48,10,53,52,56,48,10,53,52,56,48,10,50,56, 56,48,10,52,48,56,48,10,52,48,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,69,50,57,10,69,78,67,79,68, 73,78,71,32,51,54,50,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,52,48,56,48,10, 65,48,56,48,10,65,52,56,48,10,54,65,56,48,10,50, 65,67,48,10,50,55,56,48,10,50,48,56,48,10,50,48, 56,48,10,49,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,50,65,10,69,78,67,79,68,73,78,71,32,51, 54,50,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,56,48, 10,48,48,56,48,10,51,70,48,48,10,52,49,48,48,10, 48,48,56,48,10,51,67,56,48,10,52,50,56,48,10,54, 49,56,48,10,53,48,56,48,10,53,48,56,48,10,50,48, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,69,50,66, 10,69,78,67,79,68,73,78,71,32,51,54,50,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,52,49,48,48,10,65,50,56,48,10,65,50,56,48,10, 54,49,48,48,10,50,50,56,48,10,50,52,56,48,10,50, 56,56,48,10,51,48,56,48,10,50,48,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,69,50,67,10,69,78,67,79, 68,73,78,71,32,51,54,50,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,56, 48,10,48,54,56,48,10,48,57,48,48,10,52,54,56,48, 10,65,48,56,48,10,65,52,56,48,10,54,52,56,48,10, 50,65,56,48,10,50,65,56,48,10,51,49,56,48,10,51, 49,56,48,10,50,48,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,69,50,68,10,69,78,67,79,68,73,78,71,32, 51,54,50,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,69,48,48,10,52,49,48,48, 10,48,48,56,48,10,50,48,56,48,10,53,48,56,48,10, 53,48,56,48,10,54,48,56,48,10,52,48,56,48,10,51, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,50, 69,10,69,78,67,79,68,73,78,71,32,51,54,51,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,56, 48,10,51,69,56,48,10,52,49,48,48,10,51,69,56,48, 10,50,48,56,48,10,53,48,56,48,10,53,48,56,48,10, 54,48,56,48,10,52,48,56,48,10,51,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,69,50,70,10,69,78,67, 79,68,73,78,71,32,51,54,51,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,50,49,56, 48,10,53,50,56,48,10,53,52,56,48,10,51,56,56,48, 10,48,48,56,48,10,48,48,56,48,10,48,48,56,48,10, 48,48,56,48,10,48,48,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,69,51,48,10,69,78,67,79,68,73,78,71, 32,51,54,51,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,50,48,48,48,10,53,48,56, 48,10,53,49,48,48,10,51,69,48,48,10,48,48,48,48, 10,50,48,48,48,10,53,48,56,48,10,53,49,48,48,10, 51,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,69, 51,49,10,69,78,67,79,68,73,78,71,32,51,54,51,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,50, 48,56,48,10,53,49,48,48,10,51,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,51,50,10,69,78, 67,79,68,73,78,71,32,51,54,51,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,69, 48,48,10,50,49,48,48,10,48,48,56,48,10,48,48,56, 48,10,48,48,56,48,10,48,48,56,48,10,48,48,56,48, 10,48,48,56,48,10,48,48,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,69,51,51,10,69,78,67,79,68,73,78, 71,32,51,54,51,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,52,48,48,48,10,65,48,48,48,10,65, 48,48,48,10,52,48,48,48,10,48,69,48,48,10,49,49, 48,48,10,48,48,56,48,10,48,48,56,48,10,48,48,56, 48,10,48,48,56,48,10,48,48,56,48,10,48,48,56,48, 10,48,48,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 69,51,52,10,69,78,67,79,68,73,78,71,32,51,54,51, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,69,48,48,10,52,49,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,69,51,53,10,69, 78,67,79,68,73,78,71,32,51,54,51,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,69,56,48,10, 52,49,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,51,54,10,69,78,67,79,68,73, 78,71,32,51,54,51,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,57,48,48,10,52,54,56,48,10, 55,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,69,51,55,10,69,78,67,79,68,73,78,71,32,51,54, 51,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,65,56,48,10,52,54,56,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,69,51,56,10, 69,78,67,79,68,73,78,71,32,51,54,52,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,49,56,48,10,48,49,56,48,10,48,48,56,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,69,51,57,10,69,78,67,79,68, 73,78,71,32,51,54,52,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,54,56, 48,10,48,54,56,48,10,48,51,56,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,51,65,10,69,78,67,79,68,73,78,71,32,51, 54,52,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,49,56,48,10,48,49,56, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,69,51,70, 10,69,78,67,79,68,73,78,71,32,51,54,52,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,52,48,48, 10,55,70,48,48,10,50,52,56,48,10,50,52,56,48,10, 50,52,56,48,10,51,70,48,48,10,50,52,56,48,10,50, 52,56,48,10,50,52,56,48,10,55,70,48,48,10,48,52, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,69,52,48,10,69,78,67,79, 68,73,78,71,32,51,54,52,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,48,48,48, 10,49,48,48,48,10,49,48,48,48,10,49,48,48,48,10, 49,48,48,48,10,49,56,48,48,10,49,52,48,48,10,49, 52,48,48,10,48,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,69,52,49,10,69,78,67,79,68,73,78,71,32, 51,54,52,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,52,52,48,48,10,52,52,48,48, 10,52,52,48,48,10,52,52,48,48,10,52,52,48,48,10, 54,54,48,48,10,53,53,48,48,10,53,53,48,48,10,50, 50,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,52, 50,10,69,78,67,79,68,73,78,71,32,51,54,53,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,55,69,56,48,10,56,49, 48,48,10,56,48,48,48,10,70,67,48,48,10,48,50,48, 48,10,48,50,48,48,10,48,50,48,48,10,48,50,48,48, 10,48,50,48,48,10,48,50,48,48,10,48,51,48,48,10, 48,50,56,48,10,48,50,56,48,10,48,49,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,69,52,51,10,69,78,67, 79,68,73,78,71,32,51,54,53,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,49,56,48,48,10,50,52,48,48,10,54,50, 48,48,10,53,50,48,48,10,53,50,48,48,10,50,50,48, 48,10,48,50,48,48,10,48,50,48,48,10,48,50,48,48, 10,48,50,48,48,10,48,51,48,48,10,48,50,56,48,10, 48,50,56,48,10,48,49,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,69,52,52,10,69,78,67,79,68,73,78,71, 32,51,54,53,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,52, 52,48,48,10,50,65,48,48,10,49,50,48,48,10,48,50, 48,48,10,48,50,48,48,10,48,50,48,48,10,48,50,48, 48,10,48,50,48,48,10,48,50,48,48,10,48,50,48,48, 10,48,51,48,48,10,48,50,56,48,10,48,50,56,48,10, 48,49,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,69, 52,53,10,69,78,67,79,68,73,78,71,32,51,54,53,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,67,48,48,10,52,50,48,48,10,48,49,48, 48,10,48,49,48,48,10,48,49,48,48,10,48,49,48,48, 10,48,49,48,48,10,48,49,48,48,10,48,49,48,48,10, 48,49,48,48,10,48,49,48,48,10,48,49,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,52,54,10,69,78, 67,79,68,73,78,71,32,51,54,53,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,66, 48,48,10,52,52,56,48,10,54,48,56,48,10,53,48,56, 48,10,53,48,56,48,10,50,48,56,48,10,48,48,56,48, 10,48,48,56,48,10,48,48,56,48,10,48,48,56,48,10, 48,48,56,48,10,48,49,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,69,52,55,10,69,78,67,79,68,73,78, 71,32,51,54,53,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,49,48,48,10,51,69,48,48,10,52,57,48,48,10,51, 54,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 69,52,56,10,69,78,67,79,68,73,78,71,32,51,54,53, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,56,48,10,48,48,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,69,52,57,10,69, 78,67,79,68,73,78,71,32,51,54,53,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,51,49,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,52,65,10,69,78,67,79,68,73, 78,71,32,51,54,53,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,54,67,56,48,10,53,55,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,69,52,66,10,69,78,67,79,68,73,78,71,32,51,54, 53,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,49,48,48,10,48,51,56,48,10,48,49,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,69,52,67,10, 69,78,67,79,68,73,78,71,32,51,54,54,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,51,56,56, 48,10,51,55,48,48,10,51,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,69,52,68,10,69,78,67,79,68, 73,78,71,32,51,54,54,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,52,48,48,10,48,65,48,48, 10,48,52,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,52,69,10,69,78,67,79,68,73,78,71,32,51, 54,54,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,51,48,48,10,48,52,48, 48,10,48,69,48,48,10,49,48,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,69,52,70, 10,69,78,67,79,68,73,78,71,32,51,54,54,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,50,49,48,48,10, 52,67,56,48,10,53,50,56,48,10,53,50,56,48,10,52, 67,56,48,10,50,49,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,69,53,48,10,69,78,67,79, 68,73,78,71,32,51,54,54,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,50,49,48,48,10,52,48,56,48,10, 52,48,56,48,10,52,48,56,48,10,52,48,56,48,10,50, 49,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,69,53,49,10,69,78,67,79,68,73,78,71,32, 51,54,54,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,50,49,48,48,10,53,48,56,48,10,54,56,56,48,10, 54,56,56,48,10,51,48,56,48,10,48,49,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,53, 50,10,69,78,67,79,68,73,78,71,32,51,54,54,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,56,48,48,48,10,52,48,48, 48,10,52,48,48,48,10,52,57,48,48,10,53,54,56,48, 10,53,56,56,48,10,53,52,56,48,10,53,52,56,48,10, 52,56,56,48,10,52,48,56,48,10,51,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,69,53,51,10,69,78,67, 79,68,73,78,71,32,51,54,54,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,66,48,48,10,52,52,56,48,10,52,52,56,48, 10,52,52,56,48,10,54,52,56,48,10,53,48,56,48,10, 53,48,56,48,10,50,48,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,69,53,52,10,69,78,67,79,68,73,78,71, 32,51,54,54,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 56,48,10,48,48,56,48,10,48,49,48,48,10,49,69,48, 48,10,50,48,48,48,10,52,50,48,48,10,52,53,48,48, 10,52,53,48,48,10,52,54,48,48,10,50,51,48,48,10, 49,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,69, 53,53,10,69,78,67,79,68,73,78,71,32,51,54,54,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,56,48,10,48,56, 56,48,10,49,53,48,48,10,49,69,48,48,10,50,48,48, 48,10,52,50,48,48,10,52,53,48,48,10,52,53,48,48, 10,52,54,48,48,10,50,51,48,48,10,49,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,53,54,10,69,78, 67,79,68,73,78,71,32,51,54,55,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,52,48,48,48,10,52,48, 48,48,10,50,69,48,48,10,51,49,48,48,10,48,48,56, 48,10,48,48,56,48,10,49,48,56,48,10,50,56,56,48, 10,50,57,48,48,10,49,69,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,69,53,55,10,69,78,67,79,68,73,78, 71,32,51,54,55,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,52,48,10,48, 48,56,48,10,48,48,56,48,10,48,48,56,48,10,54,67, 56,48,10,57,50,56,48,10,57,50,56,48,10,57,50,56, 48,10,67,50,56,48,10,65,50,56,48,10,65,50,56,48, 10,52,51,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 69,53,56,10,69,78,67,79,68,73,78,71,32,51,54,55, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,56,48,10,48,48,56,48,10,51,70,48,48,10,52,48, 48,48,10,56,49,48,48,10,56,50,56,48,10,56,50,56, 48,10,66,49,56,48,10,54,67,56,48,10,50,51,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,69,53,57,10,69, 78,67,79,68,73,78,71,32,51,54,55,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,52,48,10,48,49,52,48,10,51,65,56,48,10,52,54, 48,48,10,52,52,48,48,10,53,50,48,48,10,54,65,48, 48,10,50,57,48,48,10,49,49,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,53,65,10,69,78,67,79,68,73, 78,71,32,51,54,55,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,52,53,48,48,10,65, 65,56,48,10,65,65,56,48,10,55,50,56,48,10,48,50, 56,48,10,48,50,56,48,10,48,50,56,48,10,48,50,56, 48,10,48,53,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,69,53,66,10,69,78,67,79,68,73,78,71,32,51,54, 55,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,50,48,48,48,10,53,48,48,48,10,57, 52,48,48,10,66,53,48,48,10,68,53,67,48,10,65,53, 48,48,10,56,65,48,48,10,52,56,48,48,10,51,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,48,65,48,10, 69,78,67,79,68,73,78,71,32,52,50,53,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,70,56,48, 10,49,56,48,48,10,51,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,48,65,49,10,69,78,67,79,68, 73,78,71,32,52,50,53,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,51,55,48,48,10,49,66,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,67,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,65,50,10,69,78,67,79,68,73,78,71,32,52, 50,53,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 67,48,10,48,48,52,48,10,48,48,52,48,10,48,48,52, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,48,65,51, 10,69,78,67,79,68,73,78,71,32,52,50,53,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,48,67,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,48,65,52,10,69,78,67,79, 68,73,78,71,32,52,50,54,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,70,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,48,65,53,10,69,78,67,79,68,73,78,71,32, 52,50,54,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,48,51,67,48, 10,48,51,52,48,10,48,51,52,48,10,48,51,52,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,48,65, 54,10,69,78,67,79,68,73,78,71,32,52,50,54,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,66,48,48,10,49,70,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,48,70,48,48,10,48,54,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,48,65,55,10,69,78,67, 79,68,73,78,71,32,52,50,54,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,70,48,48,10,51,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,67,48,10,54,51,52,48,10,54,51,52,48, 10,54,51,52,48,10,54,51,48,48,10,54,51,48,48,10, 51,51,48,48,10,49,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,48,65,56,10,69,78,67,79,68,73,78,71, 32,52,50,54,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,70,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,48, 65,57,10,69,78,67,79,68,73,78,71,32,52,50,54,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,69, 48,48,10,55,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,56,48, 10,49,68,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,48,65,65,10,69,78, 67,79,68,73,78,71,32,52,50,54,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,70,48,48,48,10,66, 48,48,48,10,66,48,48,48,10,66,48,48,48,10,51,48, 48,48,10,51,69,48,48,10,51,66,48,48,10,51,49,56, 48,10,51,49,56,48,10,51,49,56,48,10,51,49,56,48, 10,49,66,48,48,10,48,69,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,48,65,66,10,69,78,67,79,68,73,78, 71,32,52,50,54,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,49,70, 67,48,10,51,51,48,48,10,54,51,48,48,10,52,51,48, 48,10,52,51,48,48,10,54,51,48,48,10,51,54,48,48, 10,49,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 48,65,67,10,69,78,67,79,68,73,78,71,32,52,50,54, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,55,70,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,48,65,68,10,69, 78,67,79,68,73,78,71,32,52,50,54,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,67,48,48,10, 51,54,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,51,54,52,48,10,49,70,67,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,65,69,10,69,78,67,79,68,73, 78,71,32,52,50,55,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,70,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,51, 49,56,48,10,51,49,56,48,10,51,49,56,48,10,51,49, 56,48,10,51,49,56,48,10,51,49,56,48,10,49,66,48, 48,10,48,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,48,65,70,10,69,78,67,79,68,73,78,71,32,52,50, 55,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,49,56,48,10,51,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,49, 66,56,48,10,48,68,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,48,66,48,10, 69,78,67,79,68,73,78,71,32,52,50,55,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,67,48,10,48,51,52,48,10,48,51,52,48,10,54, 51,52,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,51,54,48,48,10,49,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,48,66,49,10,69,78,67,79,68, 73,78,71,32,52,50,55,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,66,50,10,69,78,67,79,68,73,78,71,32,52, 50,55,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,69,48,48,10,54,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,51,48,48,10,55,69,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,48,66,51, 10,69,78,67,79,68,73,78,71,32,52,50,55,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,67,48, 48,10,51,54,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,56,48,10,51,55,52,48,10,49,67,52,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,48,66,52,10,69,78,67,79, 68,73,78,71,32,52,50,55,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,50,68,48, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,50,68,48,48,10,49,69,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,48,66,53,10,69,78,67,79,68,73,78,71,32, 52,50,55,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,54,67,48,48,10,54,67,48,48,10,54,67,48,48, 10,55,70,56,48,10,48,68,56,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,48,66, 54,10,69,78,67,79,68,73,78,71,32,52,50,55,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,48,66,55,10,69,78,67, 79,68,73,78,71,32,52,50,55,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,56,48,10,49,68,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,48,66,56,10,69,78,67,79,68,73,78,71, 32,52,50,56,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,56,48,10,49,68,56,48,10,48,49,56,48, 10,52,49,56,48,10,52,49,56,48,10,54,51,48,48,10, 51,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,48, 66,57,10,69,78,67,79,68,73,78,71,32,52,50,56,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,55,70,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,48,66,65,10,69,78, 67,79,68,73,78,71,32,52,50,56,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,70,48,48,10,51, 49,56,48,10,54,48,56,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,56,48, 10,51,49,56,48,10,49,70,48,48,10,48,49,48,48,10, 48,49,48,48,10,48,50,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,48,66,66,10,69,78,67,79,68,73,78, 71,32,52,50,56,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,49,70, 67,48,10,51,51,52,48,10,54,51,52,48,10,54,51,52, 48,10,54,51,48,48,10,54,51,48,48,10,51,54,48,48, 10,49,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 48,66,67,10,69,78,67,79,68,73,78,71,32,52,50,56, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,69,48,48,10,54,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,51,48,48,10,55,69,48,48,10,54,48, 48,48,10,55,67,48,48,10,54,52,48,48,10,54,52,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,48,66,68,10,69, 78,67,79,68,73,78,71,32,52,50,56,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,48,48,48,10,54, 48,48,48,10,51,48,48,48,10,49,69,48,48,10,48,51, 48,48,10,48,49,56,48,10,48,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,66,69,10,69,78,67,79,68,73, 78,71,32,52,50,56,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,55,70,56,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,48,66,70,10,69,78,67,79,68,73,78,71,32,52,50, 56,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,54,49,56,48,10,51,49,56,48,10, 49,57,56,48,10,48,70,48,48,10,48,54,48,48,10,48, 70,48,48,10,49,57,56,48,10,51,48,67,48,10,54,48, 52,48,10,67,48,48,48,10,56,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,48,67,48,10, 69,78,67,79,68,73,78,71,32,52,50,56,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,70,48,48,48, 10,66,48,48,48,10,66,48,48,48,10,66,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,51,49,56,48,10,51,49, 56,48,10,49,66,56,48,10,48,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,48,67,49,10,69,78,67,79,68, 73,78,71,32,52,50,56,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 55,67,48,48,10,54,55,56,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,67,50,10,69,78,67,79,68,73,78,71,32,52, 50,57,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,52,48,48,48,10,54,48,48,48,10,51,69,48,48, 10,48,51,48,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,48,67,51, 10,69,78,67,79,68,73,78,71,32,52,50,57,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,49,56, 48,10,48,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,56,48,10, 49,68,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,48,67,52,10,69,78,67,79, 68,73,78,71,32,52,50,57,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,70,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,48,67,53,10,69,78,67,79,68,73,78,71,32, 52,50,57,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,70,48,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,49,70,48,48, 10,49,56,48,48,10,55,69,48,48,10,68,66,48,48,10, 68,57,56,48,10,68,56,48,48,10,68,56,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,48,68, 48,10,69,78,67,79,68,73,78,71,32,52,51,48,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,54,48,48,10,48,51,48,48,10,54,49,56,48,10, 54,48,56,48,10,51,49,56,48,10,49,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,48,68,49,10,69,78,67, 79,68,73,78,71,32,52,51,48,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,51,56,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,49,69,48,48,10,51,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,51,48,48,10,49,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,48,68,50,10,69,78,67,79,68,73,78,71, 32,52,51,48,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,56,48,48,10,54,67,48, 48,10,54,52,48,48,10,48,52,48,48,10,48,52,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,48, 68,51,10,69,78,67,79,68,73,78,71,32,52,51,48,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,70,48,48,10,50,57,56, 48,10,54,57,56,48,10,54,57,56,48,10,54,57,56,48, 10,54,55,48,48,10,54,48,48,48,10,54,48,48,48,10, 51,69,48,48,10,48,51,48,48,10,48,49,56,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,48,68,52,10,69,78, 67,79,68,73,78,71,32,52,51,48,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,69,48,48,10,54,51,48,48,10,52,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,51,49,56,48,10,54,49,56,48,10,52,49,56,48,10, 52,49,56,48,10,54,51,48,48,10,51,69,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,48,68,53,10,69,78,67,79,68,73,78, 71,32,52,51,48,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,69, 48,48,10,54,51,48,48,10,52,49,56,48,10,48,49,56, 48,10,48,55,48,48,10,48,55,48,48,10,50,49,56,48, 10,54,49,56,48,10,52,49,56,48,10,52,49,56,48,10, 54,51,48,48,10,51,69,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 48,68,54,10,69,78,67,79,68,73,78,71,32,52,51,49, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,48,48,48,10,68,56,48,48,10,68,56,48,48,10,68, 57,56,48,10,68,57,48,48,10,55,65,48,48,10,49,67, 48,48,10,49,70,48,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,48,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,48,68,55,10,69, 78,67,79,68,73,78,71,32,52,51,49,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,70,48,48,10,68,66,56,48,10,68,57, 56,48,10,68,57,56,48,10,68,57,56,48,10,68,57,56, 48,10,68,57,56,48,10,55,51,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,68,56,10,69,78,67,79,68,73, 78,71,32,52,51,49,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,48,68,57,10,69,78,67,79,68,73,78,71,32,52,51, 49,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,54,48,48,10,48, 51,48,48,10,48,49,56,48,10,48,49,56,48,10,48,55, 48,48,10,48,55,48,48,10,50,49,56,48,10,54,49,56, 48,10,52,49,56,48,10,52,49,56,48,10,54,51,48,48, 10,51,69,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,48,68,65,10, 69,78,67,79,68,73,78,71,32,52,51,49,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,66,48,48,10,68,53,56,48,10,68, 53,56,48,10,68,53,56,48,10,68,53,56,48,10,67,49, 56,48,10,67,51,48,48,10,67,48,48,48,10,67,48,48, 48,10,55,67,48,48,10,48,54,48,48,10,48,51,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,48,68,66,10,69,78,67,79,68, 73,78,71,32,52,51,49,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,69,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,49,70,48,48,10,51,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,68,67,10,69,78,67,79,68,73,78,71,32,52, 51,49,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,69,48,48,10,54,51,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 55,67,48,48,10,54,54,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,54,48,48,10,51,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,48,68,68, 10,69,78,67,79,68,73,78,71,32,52,51,49,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,53,66,48,48,10,55,70,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,48,68,69,10,69,78,67,79, 68,73,78,71,32,52,51,49,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,52,48,48,48,10,54,48,48,48, 10,51,69,48,48,10,48,51,48,48,10,48,49,56,48,10, 48,49,56,48,10,48,55,48,48,10,48,55,48,48,10,50, 49,56,48,10,54,49,56,48,10,52,49,56,48,10,52,49, 56,48,10,54,51,48,48,10,51,69,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,48,68,70,10,69,78,67,79,68,73,78,71,32, 52,51,49,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,49,56,48, 10,48,51,56,48,10,67,57,56,48,10,67,68,56,48,10, 67,68,56,48,10,67,68,56,48,10,55,57,56,48,10,48, 49,56,48,10,51,49,56,48,10,51,49,56,48,10,51,49, 56,48,10,49,70,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,48,69, 48,10,69,78,67,79,68,73,78,71,32,52,51,50,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,49, 56,48,10,48,51,48,48,10,51,69,48,48,10,54,48,48, 48,10,52,48,48,48,10,52,48,48,48,10,53,66,48,48, 10,55,70,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,48,69,49,10,69,78,67, 79,68,73,78,71,32,52,51,50,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,51,48,48,10,54,54,48,48,10,54,52,48,48, 10,54,54,48,48,10,54,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,51,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,48,69,50,10,69,78,67,79,68,73,78,71, 32,52,51,50,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,67,48,48,10,51,54,48,48,10,50,50, 48,48,10,51,54,48,48,10,49,67,48,48,10,51,54,48, 48,10,65,50,56,48,10,66,54,56,48,10,57,67,56,48, 10,67,49,56,48,10,67,49,56,48,10,67,49,56,48,10, 67,49,56,48,10,67,49,56,48,10,67,49,56,48,10,55, 70,48,48,10,51,69,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,48, 69,51,10,69,78,67,79,68,73,78,71,32,52,51,50,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,65,69,48,48,10,68,66,48, 48,10,49,49,56,48,10,49,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,51,49,56,48,10,54,49,56,48,10, 52,49,56,48,10,52,49,56,48,10,54,51,48,48,10,51, 69,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,48,69,52,10,69,78, 67,79,68,73,78,71,32,52,51,50,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,54,48,48,10,57,66,48,48,10,57,49,56, 48,10,57,49,56,48,10,54,55,48,48,10,48,55,48,48, 10,50,49,56,48,10,54,49,56,48,10,52,49,56,48,10, 52,49,56,48,10,54,51,48,48,10,51,69,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,48,69,53,10,69,78,67,79,68,73,78, 71,32,52,51,50,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,70,56,48,10,49,49,56,48,10,49,57,56, 48,10,49,57,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,51,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,49,70,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 48,69,54,10,69,78,67,79,68,73,78,71,32,52,51,50, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,53,66,48,48,10,55,70, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,51,70,48,48,10, 48,49,56,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,48,69,55,10,69, 78,67,79,68,73,78,71,32,52,51,50,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,56,48,10,49,70,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,69,56,10,69,78,67,79,68,73, 78,71,32,52,51,50,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,69,48,48,10,70,70,48,48,10, 68,66,48,48,10,68,66,48,48,10,68,66,48,48,10,67, 51,48,48,10,48,51,48,48,10,49,70,67,48,10,51,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,51,54,48, 48,10,49,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,48,69,57,10,69,78,67,79,68,73,78,71,32,52,51, 50,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,67,48,48,10,54,54,48,48,10,54,54,48,48,10, 54,54,48,48,10,55,67,48,48,10,54,48,48,48,10,54, 69,48,48,10,55,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,48,69,65,10, 69,78,67,79,68,73,78,71,32,52,51,51,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,54,48,48,10,54,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,51,48,48,10,54,54,48,48,10,54,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,48,48,10,49,69,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,48,69,66,10,69,78,67,79,68, 73,78,71,32,52,51,51,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,69,48,48,10,48,51,48,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,49,70,56,48,10,51,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,69,67,10,69,78,67,79,68,73,78,71,32,52, 51,51,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,53,66,48,48,10,55,70,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,55, 70,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,51,51,48,48,10,49,69,48,48,10,48,67,48, 48,10,48,67,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,48,69,68, 10,69,78,67,79,68,73,78,71,32,52,51,51,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,56,48, 48,10,48,70,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,51,66,52,48,10, 52,55,56,48,10,52,55,56,48,10,51,66,52,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,51,69,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,48,69,69,10,69,78,67,79, 68,73,78,71,32,52,51,51,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,51,48,48,10,54,54,48,48,10,54,56,48,48, 10,55,69,48,48,10,54,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,48,69,70,10,69,78,67,79,68,73,78,71,32, 52,51,51,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,49,56,48, 10,57,56,56,48,10,67,57,48,48,10,48,69,48,48,10, 48,67,48,48,10,49,67,67,48,10,69,54,52,48,10,67, 51,56,48,10,50,48,48,48,10,50,48,48,48,10,67,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,48,70, 48,10,69,78,67,79,68,73,78,71,32,52,51,51,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,56, 48,48,10,49,56,48,48,10,48,69,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,69,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,69,48,48,10,48,51,48,48,10, 48,51,48,48,10,54,51,48,48,10,51,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,48,70,49,10,69,78,67, 79,68,73,78,71,32,52,51,51,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,67,48,48,10,54,67, 48,48,10,54,55,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,55,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,55,48,48,10,54,49,56,48,10,54,49,56,48,10, 51,49,56,48,10,49,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,48,70,50,10,69,78,67,79,68,73,78,71, 32,52,51,51,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,69,48, 48,10,51,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,48, 70,51,10,69,78,67,79,68,73,78,71,32,52,51,51,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,70,56,48,10,48,49,56, 48,10,48,51,48,48,10,48,54,48,48,10,49,69,48,48, 10,48,51,48,48,10,48,49,56,48,10,48,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,48,70,52,10,69,78, 67,79,68,73,78,71,32,52,51,52,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,49,56,48,48,10,51,48, 48,48,10,49,69,48,48,10,48,51,48,48,10,48,49,56, 48,10,48,49,56,48,10,48,55,48,48,10,48,55,48,48, 10,50,49,56,48,10,54,49,56,48,10,52,49,56,48,10, 52,49,56,48,10,54,51,48,48,10,51,69,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,48,70,53,10,69,78,67,79,68,73,78, 71,32,52,51,52,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,67,48,48,10,51,54,48,48,10,54, 51,48,48,10,54,51,48,48,10,51,51,48,48,10,49,70, 67,48,10,48,51,48,48,10,49,70,67,48,10,51,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,51,54,48,48, 10,49,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 48,70,54,10,69,78,67,79,68,73,78,71,32,52,51,52, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,48,48,48,10,49,56,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,49,69,48,48,10,50,68, 48,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,50,68,48,48,10,49,69,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,54,48,48,10, 48,51,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,48,70,55,10,69, 78,67,79,68,73,78,71,32,52,51,52,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,69,48,48,10,51,51,48,48,10,48,49,56,48,10,48, 49,56,48,10,48,51,48,48,10,48,67,48,48,10,51,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,70,56,10,69,78,67,79,68,73, 78,71,32,52,51,52,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,55, 51,48,48,10,55,69,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,48,70,66,10,69,78,67,79,68,73,78,71,32,52,51, 52,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,48,48,48,10,51,56,48,48,10,49, 49,48,48,10,48,51,56,48,10,49,49,48,48,10,51,56, 48,48,10,49,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,50,48,48,10, 69,78,67,79,68,73,78,71,32,52,54,48,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,55,48,48,10,54,54, 48,48,10,55,69,48,48,10,51,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,50,48,49,10,69,78,67,79,68, 73,78,71,32,52,54,48,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,67,54,48,48,10,67,54,48,48, 10,67,54,48,48,10,67,54,48,48,10,67,54,48,48,10, 67,55,67,48,10,67,54,67,48,10,67,54,67,48,10,67, 54,48,48,10,67,69,48,48,10,67,67,48,48,10,70,67, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,50,48,50,10,69,78,67,79,68,73,78,71,32,52, 54,49,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,51,48,48,10,51,70,48,48,10, 48,51,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,67,48,48,10,48,67,56,48,10,48,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,50,48,51, 10,69,78,67,79,68,73,78,71,32,52,54,49,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,67,51,48, 48,10,67,51,48,48,10,67,51,48,48,10,67,51,48,48, 10,67,54,48,48,10,55,69,48,48,10,48,54,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,50,48,52,10,69,78,67,79, 68,73,78,71,32,52,54,49,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,67,51,48,48,10,67,51,48, 48,10,67,51,48,48,10,67,51,48,48,10,67,54,48,48, 10,55,69,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,67,48,48,10,48,70,48,48,10,49,57,56,48,10,49, 57,56,48,10,48,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,50,48,53,10,69,78,67,79,68,73,78,71,32, 52,54,49,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,49,56,48,10,67,49,56,48,10,67,49,56, 48,10,67,49,56,48,10,54,49,56,48,10,51,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,50,48, 54,10,69,78,67,79,68,73,78,71,32,52,54,49,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,67,55, 56,48,10,67,54,52,48,10,67,54,52,48,10,67,55,56, 48,10,67,54,48,48,10,67,54,48,48,10,67,54,48,48, 10,67,54,48,48,10,67,54,48,48,10,67,54,48,48,10, 67,54,48,48,10,67,54,48,48,10,55,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,50,48,56,10,69,78,67, 79,68,73,78,71,32,52,54,49,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,54,48,48,10,48,67, 48,48,10,49,56,48,48,10,51,56,48,48,10,51,67,48, 48,10,54,54,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,50,48,57,10,69,78,67,79,68,73,78,71, 32,52,54,49,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,49,56,48,48,10,51,48, 48,48,10,55,48,48,48,10,55,56,48,48,10,67,67,48, 48,10,67,54,48,48,10,67,55,67,48,10,67,54,67,48, 10,67,54,67,48,10,67,54,48,48,10,67,54,48,48,10, 67,54,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,50, 48,65,10,69,78,67,79,68,73,78,71,32,52,54,49,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,49,56,48,48,10,51,48,48,48,10,55,48, 48,48,10,55,56,48,48,10,67,67,48,48,10,67,54,48, 48,10,67,54,48,48,10,67,54,48,48,10,67,54,48,48, 10,67,54,67,48,10,67,54,67,48,10,67,55,67,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,50,48,66,10,69,78, 67,79,68,73,78,71,32,52,54,49,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,54,48,48,10,48, 67,48,48,10,49,56,48,48,10,51,56,48,48,10,51,67, 48,48,10,54,54,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,50,48,67,10,69,78,67,79,68,73,78, 71,32,52,54,50,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,56,48,48,10,51, 48,48,48,10,55,48,48,48,10,55,56,48,48,10,67,67, 48,48,10,67,54,48,48,10,67,54,48,48,10,67,54,48, 48,10,67,55,56,48,10,67,54,52,48,10,67,54,52,48, 10,67,55,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 50,48,68,10,69,78,67,79,68,73,78,71,32,52,54,50, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,51,48,48,10,48,54,48,48,10,48,67,48,48,10,49, 67,48,48,10,49,69,48,48,10,51,51,48,48,10,51,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,55,57,56, 48,10,54,53,56,48,10,54,53,56,48,10,55,57,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,50,48,69,10,69, 78,67,79,68,73,78,71,32,52,54,50,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 49,56,48,48,10,51,48,48,48,10,55,48,48,48,10,55, 56,48,48,10,67,67,48,48,10,67,55,56,48,10,67,54, 52,48,10,67,54,52,48,10,67,55,56,48,10,67,54,48, 48,10,67,54,48,48,10,67,54,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,50,48,70,10,69,78,67,79,68,73, 78,71,32,52,54,50,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,49,56,48,48,10, 51,48,48,48,10,55,48,48,48,10,55,56,48,48,10,67, 67,48,48,10,67,54,48,48,10,67,54,48,48,10,67,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,49,70,56,48,10,49,48,56,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,50,49,48,10,69,78,67,79,68,73,78,71,32,52,54, 50,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,49,69,48,48,10,51, 70,48,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,50,49,49,10, 69,78,67,79,68,73,78,71,32,52,54,50,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,51,67,48,48,10,55,69,48,48,10,68, 66,67,48,10,68,66,67,48,10,68,66,52,48,10,68,66, 48,48,10,68,66,48,48,10,68,66,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,50,49,50,10,69,78,67,79,68, 73,78,71,32,52,54,50,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 51,67,48,48,10,55,69,48,48,10,68,66,48,48,10,68, 66,48,48,10,68,66,48,48,10,68,66,52,48,10,68,66, 67,48,10,68,66,67,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,50,49,51,10,69,78,67,79,68,73,78,71,32,52, 54,50,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,49,69,48,48,10, 51,70,48,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,50,49,52, 10,69,78,67,79,68,73,78,71,32,52,54,50,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,51,67,48,48,10,55,69,48,48,10, 68,66,48,48,10,68,66,48,48,10,68,66,56,48,10,68, 56,67,48,10,68,56,67,48,10,68,66,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,50,49,53,10,69,78,67,79, 68,73,78,71,32,52,54,50,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,51,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,49,69,48,48,10,51,70,48,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,50,49,54,10,69,78,67,79,68,73,78,71,32, 52,54,51,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,70,48,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,50,49, 55,10,69,78,67,79,68,73,78,71,32,52,54,51,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,51,67,48,48,10,55,69,48,48, 10,68,66,48,48,10,68,66,48,48,10,68,66,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 70,67,48,10,48,56,52,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,50,49,56,10,69,78,67, 79,68,73,78,71,32,52,54,51,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,69, 48,48,10,54,51,48,48,10,57,52,56,48,10,57,52,56, 48,10,57,52,56,48,10,57,52,56,48,10,57,52,56,48, 10,57,52,56,48,10,57,52,56,48,10,54,51,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,50,49,57,10,69,78,67,79,68,73,78,71, 32,52,54,51,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,56,48,48,10,52,52, 48,48,10,65,65,48,48,10,65,65,48,48,10,65,66,56, 48,10,65,65,56,48,10,65,65,48,48,10,65,65,48,48, 10,65,65,48,48,10,52,52,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,50, 49,65,10,69,78,67,79,68,73,78,71,32,52,54,51,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 69,48,48,10,54,51,48,48,10,57,52,56,48,10,57,52, 56,48,10,57,52,56,48,10,57,52,56,48,10,57,52,56, 48,10,54,51,56,48,10,48,48,56,48,10,48,49,48,48, 10,48,50,48,48,10,48,52,48,48,10,48,57,56,48,10, 48,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,50,49,66,10,69,78, 67,79,68,73,78,71,32,52,54,51,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,69,48,48,10,54, 51,48,48,10,57,52,56,48,10,57,52,56,48,10,57,52, 56,48,10,57,52,56,48,10,57,52,56,48,10,54,51,56, 48,10,48,48,56,48,10,48,49,48,48,10,48,49,48,48, 10,48,49,48,48,10,48,49,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,50,49,67,10,69,78,67,79,68,73,78, 71,32,52,54,51,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,69,48,48,10,54,51,48,48,10,57, 52,56,48,10,57,52,56,48,10,57,52,56,48,10,57,52, 56,48,10,57,52,56,48,10,54,51,56,48,10,48,49,48, 48,10,48,50,48,48,10,48,55,48,48,10,48,52,56,48, 10,48,52,56,48,10,48,55,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 50,49,68,10,69,78,67,79,68,73,78,71,32,52,54,51, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,69,48,48,10,54,51,48,48,10,57,52,56,48,10,57, 52,56,48,10,57,52,56,48,10,57,52,56,48,10,57,52, 56,48,10,55,51,48,48,10,49,48,48,48,10,50,48,48, 48,10,50,48,48,48,10,52,48,48,48,10,52,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,50,49,69,10,69, 78,67,79,68,73,78,71,32,52,54,51,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,69,48,48,10, 54,51,48,48,10,57,52,56,48,10,57,52,56,48,10,57, 52,56,48,10,57,52,56,48,10,57,52,56,48,10,55,51, 48,48,10,49,48,48,48,10,49,48,48,48,10,49,48,48, 48,10,49,48,48,48,10,49,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,50,49,70,10,69,78,67,79,68,73, 78,71,32,52,54,51,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,69,48,48,10,54,51,48,48,10, 57,52,56,48,10,57,52,56,48,10,57,52,56,48,10,57, 52,56,48,10,57,52,56,48,10,54,51,56,48,10,48,49, 48,48,10,48,49,48,48,10,48,50,48,48,10,48,50,48, 48,10,48,50,48,48,10,48,70,56,48,10,48,56,56,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,50,50,48,10,69,78,67,79,68,73,78,71,32,52,54, 52,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,70,48,48,10,54,67,48,48,10,54,67, 48,48,10,51,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,50,50,49,10, 69,78,67,79,68,73,78,71,32,52,54,52,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,68,66,48,48,10,68,66,48,48,10,68,66,48,48,10, 68,66,48,48,10,68,66,56,48,10,68,66,56,48,10,68, 69,56,48,10,68,56,56,48,10,68,56,48,48,10,55,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,50,50,50,10,69,78,67,79,68, 73,78,71,32,52,54,52,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,70,48,48,10,51,66,48,48,10,48, 51,48,48,10,48,54,48,48,10,48,54,48,48,10,48,67, 48,48,10,48,68,56,48,10,48,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,50,50,51,10,69,78,67,79,68,73,78,71,32,52, 54,52,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,70,56,48,10,51,57,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,50,50,52, 10,69,78,67,79,68,73,78,71,32,52,54,52,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,68,66,48, 48,10,68,66,48,48,10,68,66,48,48,10,68,66,48,48, 10,68,66,48,48,10,68,66,48,48,10,68,69,48,48,10, 55,54,48,48,10,48,54,48,48,10,48,67,48,48,10,48, 70,48,48,10,49,57,56,48,10,49,57,56,48,10,48,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,50,50,53,10,69,78,67,79, 68,73,78,71,32,52,54,52,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,70,48,48,10,55,56,48,48,10,69,48,48,48,10, 67,48,48,48,10,67,48,48,48,10,67,48,48,48,10,67, 48,48,48,10,67,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,50,50,54,10,69,78,67,79,68,73,78,71,32, 52,54,52,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,70,48,48, 10,51,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,50,50, 55,10,69,78,67,79,68,73,78,71,32,52,54,52,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,68,66, 48,48,10,68,66,48,48,10,68,66,48,48,10,68,66,48, 48,10,68,66,48,48,10,68,66,48,48,10,68,70,48,48, 10,55,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 70,67,48,10,48,56,52,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,50,50,56,10,69,78,67, 79,68,73,78,71,32,52,54,52,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,51,48,48,48,10,54,48,48,48, 10,67,48,48,48,10,67,48,48,48,10,69,49,56,48,10, 55,70,56,48,10,51,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,50,50,57,10,69,78,67,79,68,73,78,71, 32,52,54,52,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,51,48,48,48,10,54,48,48, 48,10,67,48,48,48,10,67,48,48,48,10,70,70,48,48, 10,55,70,56,48,10,48,67,56,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,50, 50,65,10,69,78,67,79,68,73,78,71,32,52,54,53,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,51,48,48, 48,10,54,48,48,48,10,67,51,48,48,10,67,49,56,48, 10,69,49,56,48,10,55,70,56,48,10,51,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,50,50,66,10,69,78, 67,79,68,73,78,71,32,52,54,53,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,51,48,48,48,10,54,48,48, 48,10,67,48,48,48,10,67,51,56,48,10,69,55,56,48, 10,55,69,48,48,10,51,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,50,50,67,10,69,78,67,79,68,73,78, 71,32,52,54,53,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,51,48,48,48,10,54,48,48,48,10,67,51,48, 48,10,67,52,56,48,10,69,52,56,48,10,55,70,56,48, 10,51,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 50,50,68,10,69,78,67,79,68,73,78,71,32,52,54,53, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,67,48,48,10,54,54,48,48,10,67,54,48,48,10,67, 48,48,48,10,67,48,48,48,10,67,48,48,48,10,67,48, 48,48,10,67,48,48,48,10,67,48,48,48,10,67,48,48, 48,10,67,51,48,48,10,54,54,48,48,10,51,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,50,50,69,10,69, 78,67,79,68,73,78,71,32,52,54,53,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,67,48,48,10, 54,54,48,48,10,67,51,48,48,10,67,52,56,48,10,67, 52,56,48,10,67,51,48,48,10,67,48,48,48,10,67,48, 48,48,10,67,48,48,48,10,67,48,48,48,10,67,51,48, 48,10,54,54,48,48,10,51,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,50,50,70,10,69,78,67,79,68,73, 78,71,32,52,54,53,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,52,50,48,48,10,55,69,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,51,48,48,48,10,54,48,48,48,10,67,48, 48,48,10,67,51,56,48,10,69,55,56,48,10,55,69,48, 48,10,51,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,50,51,48,10,69,78,67,79,68,73,78,71,32,52,54, 53,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 49,69,48,48,10,51,70,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,50,51,49,10, 69,78,67,79,68,73,78,71,32,52,54,53,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,51,67,48,48,10, 55,69,48,48,10,67,51,48,48,10,67,51,67,48,10,67, 51,67,48,10,67,51,52,48,10,67,51,48,48,10,67,51, 48,48,10,67,51,48,48,10,67,51,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,50,51,50,10,69,78,67,79,68, 73,78,71,32,52,54,53,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,51,67,48,48,10,55,69,48,48,10, 67,51,48,48,10,67,51,48,48,10,67,51,48,48,10,67, 51,48,48,10,67,51,48,48,10,67,51,52,48,10,67,51, 67,48,10,67,51,67,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,50,51,51,10,69,78,67,79,68,73,78,71,32,52, 54,53,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,49,69,48,48,10,51,70,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,50,51,52, 10,69,78,67,79,68,73,78,71,32,52,54,54,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,51,67,48,48, 10,55,69,48,48,10,67,51,48,48,10,67,51,48,48,10, 67,51,48,48,10,67,51,48,48,10,67,51,56,48,10,67, 50,52,48,10,67,50,52,48,10,67,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,50,51,53,10,69,78,67,79, 68,73,78,71,32,52,54,54,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,48,48,48,10,49,56,48, 48,10,48,67,48,48,10,49,69,48,48,10,51,70,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,50,51,54,10,69,78,67,79,68,73,78,71,32, 52,54,54,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,49,69,48,48,10,51,70,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,50,51, 55,10,69,78,67,79,68,73,78,71,32,52,54,54,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,51,67,48, 48,10,55,69,48,48,10,67,51,48,48,10,67,51,48,48, 10,67,51,48,48,10,67,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 70,67,48,10,48,56,52,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,50,51,56,10,69,78,67, 79,68,73,78,71,32,52,54,54,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,48,67, 48,48,10,48,67,48,48,10,49,69,48,48,10,51,70,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,50,51,57,10,69,78,67,79,68,73,78,71, 32,52,54,54,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,70,70,48,48,10,49,56,48,48,10,49,56, 48,48,10,51,67,48,48,10,55,69,48,48,10,67,51,48, 48,10,67,51,67,48,10,67,51,67,48,10,67,51,52,48, 10,67,51,48,48,10,67,51,48,48,10,67,51,48,48,10, 67,51,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,50, 51,65,10,69,78,67,79,68,73,78,71,32,52,54,54,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 70,48,48,10,49,56,48,48,10,49,56,48,48,10,51,67, 48,48,10,55,69,48,48,10,67,51,48,48,10,67,51,48, 48,10,67,51,48,48,10,67,51,48,48,10,67,51,48,48, 10,67,51,52,48,10,67,51,67,48,10,67,51,67,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,50,51,66,10,69,78, 67,79,68,73,78,71,32,52,54,54,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,48, 67,48,48,10,48,67,48,48,10,49,69,48,48,10,51,70, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,50,51,67,10,69,78,67,79,68,73,78, 71,32,52,54,54,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,70,70,48,48,10,49,56,48,48,10,49, 56,48,48,10,51,67,48,48,10,55,69,48,48,10,67,51, 48,48,10,67,51,48,48,10,67,51,48,48,10,67,51,48, 48,10,67,51,56,48,10,67,50,52,48,10,67,50,52,48, 10,67,51,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 50,51,68,10,69,78,67,79,68,73,78,71,32,52,54,54, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 70,70,48,48,10,49,56,48,48,10,48,56,48,48,10,48, 67,48,48,10,49,69,48,48,10,51,70,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,50,51,69,10,69, 78,67,79,68,73,78,71,32,52,54,55,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 48,67,48,48,10,48,67,48,48,10,49,69,48,48,10,51, 70,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,50,51,70,10,69,78,67,79,68,73, 78,71,32,52,54,55,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,70,70,48,48,10,49,56,48,48,10, 49,56,48,48,10,51,67,48,48,10,55,69,48,48,10,67, 51,48,48,10,67,51,48,48,10,67,51,48,48,10,67,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,70,67,48,10,48,56,52,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,50,52,48,10,69,78,67,79,68,73,78,71,32,52,54, 55,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,51,70,48,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,51,70,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,50,52,49,10, 69,78,67,79,68,73,78,71,32,52,54,55,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 51,70,48,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,51,70,48,48,10,48,67,48,48,10,48,70, 56,48,10,48,68,56,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,50,52,50,10,69,78,67,79,68, 73,78,71,32,52,54,55,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,51,70,48,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,51, 70,48,48,10,48,67,48,48,10,48,67,48,48,10,48,68, 56,48,10,48,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,50,52,51,10,69,78,67,79,68,73,78,71,32,52, 54,55,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,51,70,48,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,51,70,48,48,10,48,67,48,48,10,48, 67,48,48,10,49,56,48,48,10,51,48,48,48,10,54,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,50,52,52, 10,69,78,67,79,68,73,78,71,32,52,54,55,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,51,70,48,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 51,70,48,48,10,48,67,48,48,10,48,70,48,48,10,48, 67,56,48,10,48,67,56,48,10,48,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,50,52,53,10,69,78,67,79, 68,73,78,71,32,52,54,55,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,51,67,48,48,10,48,67,48,48,10,51,70,48,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 51,70,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,50,52,54,10,69,78,67,79,68,73,78,71,32, 52,54,55,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,69,48,48,10,51,51,48,48,10,51,51,48, 48,10,49,69,48,48,10,48,67,48,48,10,51,70,48,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 51,70,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,50,52, 56,10,69,78,67,79,68,73,78,71,32,52,54,56,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,51,70,48, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,51,70,48,48,10,48,68,56,48,10,48,69,52,48,10, 48,69,52,48,10,48,68,56,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,50,52,65,10,69,78,67, 79,68,73,78,71,32,52,54,56,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,56,48,10,49,56,56,48,10,55,69,56, 48,10,68,66,56,48,10,68,66,56,48,10,68,66,48,48, 10,55,69,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,50,52,66,10,69,78,67,79,68,73,78,71, 32,52,54,56,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,51,70,48,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,51,70,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,51,70,48,48,10,50,49,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,50, 52,67,10,69,78,67,79,68,73,78,71,32,52,54,56,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,51,70, 48,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,51,70,48,48,10,48,67,48,48,10,48,70,48,48, 10,48,67,56,48,10,48,67,56,48,10,51,70,48,48,10, 50,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,50,52,68,10,69,78, 67,79,68,73,78,71,32,52,54,56,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,55,69, 48,48,10,68,66,48,48,10,68,66,56,48,10,68,66,56, 48,10,55,69,56,48,10,49,56,56,48,10,49,56,56,48, 10,49,56,48,48,10,49,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,50,53,48,10,69,78,67,79,68,73,78, 71,32,52,54,56,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 52,48,56,48,10,55,70,56,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,51,70,48,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,51,70,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 50,53,49,10,69,78,67,79,68,73,78,71,32,52,54,56, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,52,48,56,48,10, 55,70,56,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,51,70,48,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,51,70,48,48,10,48,67,48, 48,10,48,70,56,48,10,48,68,56,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,50,53,50,10,69, 78,67,79,68,73,78,71,32,52,54,57,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,52,48,56,48,10,55,70,56,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,51, 70,48,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,51,70,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,68,56,48,10,48,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,50,53,51,10,69,78,67,79,68,73, 78,71,32,52,54,57,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,52,48,56,48,10,55,70,56,48,10,48,67,48,48,10, 48,67,48,48,10,51,70,48,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,51,70,48,48,10,48,67, 48,48,10,48,67,48,48,10,49,56,48,48,10,51,48,48, 48,10,54,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,50,53,52,10,69,78,67,79,68,73,78,71,32,52,54, 57,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,52,48,56,48, 10,55,70,56,48,10,48,67,48,48,10,48,67,48,48,10, 51,70,48,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,51,70,48,48,10,48,67,48,48,10,48,70, 48,48,10,48,67,56,48,10,48,67,56,48,10,48,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,50,53,53,10, 69,78,67,79,68,73,78,71,32,52,54,57,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,56,49,48,48,10,70,70,48,48, 10,49,56,48,48,10,48,56,48,48,10,48,67,48,48,10, 51,70,48,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,51,70,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,50,53,54,10,69,78,67,79,68, 73,78,71,32,52,54,57,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,52,48,56,48,10,55,70,56,48,10,49,50,48,48, 10,49,50,48,48,10,48,67,48,48,10,48,67,48,48,10, 51,70,48,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,51,70,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,50,53,56,10,69,78,67,79,68,73,78,71,32,52, 54,57,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,52,48,56, 48,10,55,70,56,48,10,48,67,48,48,10,48,67,48,48, 10,51,70,48,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,51,70,48,48,10,48,68,56,48,10,48, 69,52,48,10,48,69,52,48,10,48,68,56,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,50,53,65, 10,69,78,67,79,68,73,78,71,32,52,54,57,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,56,49,48,48,10,70,70,48, 48,10,49,56,48,48,10,49,56,56,48,10,49,56,56,48, 10,55,69,56,48,10,68,66,56,48,10,68,66,56,48,10, 68,66,48,48,10,55,69,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,50,53,66,10,69,78,67,79, 68,73,78,71,32,52,54,57,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,52,48,56,48,10,55,70,56,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,51,70,48,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 51,70,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,51,70,48,48,10,50,49, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,50,53,67,10,69,78,67,79,68,73,78,71,32, 52,55,48,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,52,48, 56,48,10,55,70,56,48,10,48,67,48,48,10,48,67,48, 48,10,51,70,48,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,51,70,48,48,10,48,67,48,48,10, 48,70,48,48,10,48,67,56,48,10,48,67,56,48,10,51, 70,48,48,10,50,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,50,53, 68,10,69,78,67,79,68,73,78,71,32,52,55,48,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,56,49,48,48,10,70,70, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,55,69,48,48,10,68,66,48,48,10,68,66,56,48, 10,68,66,56,48,10,55,69,56,48,10,49,56,56,48,10, 49,56,56,48,10,49,56,48,48,10,49,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,50,54,48,10,69,78,67, 79,68,73,78,71,32,52,55,48,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,69,48,48,10,49,70, 48,48,10,51,51,48,48,10,51,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,50,54,49,10,69,78,67,79,68,73,78,71, 32,52,55,48,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,67,48,48,10,51,69,48,48,10,54,54, 48,48,10,54,54,48,48,10,67,54,48,48,10,67,55,67, 48,10,67,54,67,48,10,67,54,67,48,10,67,54,48,48, 10,67,54,48,48,10,67,54,48,48,10,67,54,48,48,10, 67,54,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,50, 54,50,10,69,78,67,79,68,73,78,71,32,52,55,48,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 67,48,48,10,51,69,48,48,10,54,54,48,48,10,54,54, 48,48,10,67,54,48,48,10,67,54,48,48,10,67,54,48, 48,10,67,54,48,48,10,67,54,48,48,10,67,54,48,48, 10,67,54,67,48,10,67,54,67,48,10,67,55,67,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,50,54,51,10,69,78, 67,79,68,73,78,71,32,52,55,48,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,69,48,48,10,49, 70,48,48,10,51,51,48,48,10,51,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,50,54,52,10,69,78,67,79,68,73,78, 71,32,52,55,48,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,67,48,48,10,51,69,48,48,10,54, 54,48,48,10,54,54,48,48,10,67,54,48,48,10,67,54, 48,48,10,67,54,48,48,10,67,54,48,48,10,67,54,48, 48,10,67,55,56,48,10,67,54,52,48,10,67,54,52,48, 10,67,55,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 50,54,53,10,69,78,67,79,68,73,78,71,32,52,55,48, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,55,48,48,10,48,70,56,48,10,49,57,56,48,10,49, 57,56,48,10,51,49,56,48,10,70,49,56,48,10,70,49, 56,48,10,66,49,56,48,10,51,49,56,48,10,51,49,56, 48,10,51,49,56,48,10,51,49,56,48,10,51,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,50,54,54,10,69, 78,67,79,68,73,78,71,32,52,55,49,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,69,48,48,10, 49,70,48,48,10,51,51,48,48,10,51,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,50,54,55,10,69,78,67,79,68,73, 78,71,32,52,55,49,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,67,48,48,10,51,69,48,48,10, 54,54,48,48,10,54,54,48,48,10,67,54,48,48,10,67, 54,48,48,10,67,54,48,48,10,67,54,48,48,10,67,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,49,70,56,48,10,49,48,56,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,50,54,56,10,69,78,67,79,68,73,78,71,32,52,55, 49,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,52,49,48,48, 10,55,70,48,48,10,48,48,48,48,10,48,69,48,48,10, 49,70,48,48,10,51,51,48,48,10,51,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,50,54,57,10, 69,78,67,79,68,73,78,71,32,52,55,49,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,56,50,48,48,10,70,69,48,48, 10,48,48,48,48,10,49,67,48,48,10,51,69,48,48,10, 54,54,48,48,10,54,54,48,48,10,67,54,48,48,10,67, 55,67,48,10,67,54,67,48,10,67,54,67,48,10,67,54, 48,48,10,67,54,48,48,10,67,54,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,50,54,65,10,69,78,67,79,68, 73,78,71,32,52,55,49,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,56,50,48,48,10,70,69,48,48,10,48,48,48,48, 10,49,67,48,48,10,51,69,48,48,10,54,54,48,48,10, 54,54,48,48,10,67,54,48,48,10,67,54,48,48,10,67, 54,48,48,10,67,54,48,48,10,67,54,67,48,10,67,54, 67,48,10,67,55,67,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,50,54,66,10,69,78,67,79,68,73,78,71,32,52, 55,49,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,52,49,48, 48,10,55,70,48,48,10,48,48,48,48,10,48,69,48,48, 10,49,70,48,48,10,51,51,48,48,10,51,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,50,54,67, 10,69,78,67,79,68,73,78,71,32,52,55,49,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,56,50,48,48,10,70,69,48, 48,10,48,48,48,48,10,49,67,48,48,10,51,69,48,48, 10,54,54,48,48,10,54,54,48,48,10,67,54,48,48,10, 67,54,48,48,10,67,54,48,48,10,67,55,56,48,10,67, 54,52,48,10,67,54,52,48,10,67,55,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,50,54,68,10,69,78,67,79, 68,73,78,71,32,52,55,49,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,50,48,56,48,10,51,70,56,48,10,48,48,48, 48,10,48,55,48,48,10,48,70,56,48,10,49,57,56,48, 10,49,57,56,48,10,55,49,56,48,10,70,49,56,48,10, 66,49,56,48,10,51,49,56,48,10,51,49,56,48,10,51, 49,56,48,10,51,49,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,50,54,69,10,69,78,67,79,68,73,78,71,32, 52,55,49,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,52,49, 48,48,10,55,70,48,48,10,48,48,48,48,10,48,69,48, 48,10,49,70,48,48,10,51,51,48,48,10,51,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,50,54, 70,10,69,78,67,79,68,73,78,71,32,52,55,49,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,56,50,48,48,10,70,69, 48,48,10,48,48,48,48,10,49,67,48,48,10,51,69,48, 48,10,54,54,48,48,10,54,54,48,48,10,67,54,48,48, 10,67,54,48,48,10,67,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,49, 70,56,48,10,49,48,56,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,50,55,48,10,69,78,67, 79,68,73,78,71,32,52,55,50,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,55,70,56,48,10,52,67,56,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,50,55,49,10,69,78,67,79,68,73,78,71, 32,52,55,50,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,55,70,56, 48,10,52,67,56,48,10,48,67,48,48,10,48,70,48,48, 10,48,68,56,48,10,48,68,56,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,50, 55,50,10,69,78,67,79,68,73,78,71,32,52,55,50,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,55,70,56,48,10,52,67,56, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,68,56,48,10,48,68,56,48,10,48,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,50,55,51,10,69,78, 67,79,68,73,78,71,32,52,55,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,55,70, 56,48,10,52,67,56,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,49,56,48,48, 10,51,48,48,48,10,54,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,50,55,52,10,69,78,67,79,68,73,78, 71,32,52,55,50,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,55,70, 56,48,10,52,67,56,48,10,48,67,48,48,10,48,67,48, 48,10,48,70,48,48,10,48,67,56,48,10,48,67,56,48, 10,48,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 50,55,53,10,69,78,67,79,68,73,78,71,32,52,55,50, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,51,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,55,70, 56,48,10,52,67,56,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,50,55,54,10,69, 78,67,79,68,73,78,71,32,52,55,50,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,51,51,48,48,10,49,69,48,48,10,48, 67,48,48,10,48,67,48,48,10,55,70,56,48,10,52,67, 56,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,50,55,55,10,69,78,67,79,68,73, 78,71,32,52,55,50,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,55, 70,56,48,10,52,67,56,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,51,70,48,48,10,50,49,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,50,55,56,10,69,78,67,79,68,73,78,71,32,52,55, 50,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,52,67,56,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,55,70,56,48,10,52, 67,56,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,50,55,57,10, 69,78,67,79,68,73,78,71,32,52,55,50,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,70,56,48, 10,52,67,56,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,55,70,56,48,10,52,67,56,48,10,48, 67,48,48,10,48,70,48,48,10,48,68,56,48,10,48,68, 56,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,50,55,65,10,69,78,67,79,68, 73,78,71,32,52,55,51,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,52,67,56,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 55,70,56,48,10,52,67,56,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,68,56,48,10,48,68, 56,48,10,48,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,50,55,66,10,69,78,67,79,68,73,78,71,32,52, 55,51,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,52,67,56,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,55,70,56,48,10, 52,67,56,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,49,56,48,48,10,51,48,48,48,10,54,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,50,55,67, 10,69,78,67,79,68,73,78,71,32,52,55,51,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,52,67,56,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,55,70,56,48,10,52,67,56,48,10, 48,67,48,48,10,48,67,48,48,10,48,70,48,48,10,48, 67,56,48,10,48,67,56,48,10,48,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,50,55,68,10,69,78,67,79, 68,73,78,71,32,52,55,51,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,70,70,48,48,10,57,57,48, 48,10,48,56,48,48,10,48,67,48,48,10,48,67,48,48, 10,55,70,56,48,10,52,67,56,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,50,55,69,10,69,78,67,79,68,73,78,71,32, 52,55,51,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,53,50,56,48,10,49,50,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,55,70,56,48,10,52,67,56,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,50,55, 70,10,69,78,67,79,68,73,78,71,32,52,55,51,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 56,48,10,52,67,56,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,55,70,56,48,10,52,67,56,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,51, 70,48,48,10,50,49,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,50,56,48,10,69,78,67, 79,68,73,78,71,32,52,55,51,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,56,48,48,10,70,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,48,70,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,50,56,49,10,69,78,67,79,68,73,78,71, 32,52,55,51,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,56,48,48,10,70,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,48,70,48,48,10,48,51,48, 48,10,48,51,56,48,10,48,51,67,48,10,48,51,52,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,50, 56,50,10,69,78,67,79,68,73,78,71,32,52,55,51,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,70,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,48,70,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,52,48,10,48,51,67,48,10,48,51,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,50,56,51,10,69,78, 67,79,68,73,78,71,32,52,55,51,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,55, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,55, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,51,48,48, 10,48,54,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,50,56,52,10,69,78,67,79,68,73,78, 71,32,52,55,52,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,56,48,48,10,70,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,48,70,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,55,56,48,10,48,67,67,48,10,48,67,67,48, 10,48,55,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 50,56,53,10,69,78,67,79,68,73,78,71,32,52,55,52, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,55,67,48,48,10,67,67,48,48,10,67, 67,48,48,10,48,55,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,50,56,54,10,69, 78,67,79,68,73,78,71,32,52,55,52,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,49,56,48,10,48,69,52,48,10, 55,69,52,48,10,67,68,56,48,10,67,67,48,48,10,48, 55,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,50,56,56,10,69,78,67,79,68,73, 78,71,32,52,55,52,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,70,57,56,48,10, 49,65,52,48,10,49,65,52,48,10,48,70,56,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,50,56,65,10,69,78,67,79,68,73,78,71,32,52,55, 52,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,56,48,48,10,70,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,48,70,48,48,10,48,51,52,48,10,48, 51,52,48,10,48,51,67,48,10,48,51,52,48,10,48,51, 52,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,50,56,66,10, 69,78,67,79,68,73,78,71,32,52,55,52,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,56,48,48, 10,70,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 48,70,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,70,67, 48,10,48,56,52,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,50,56,67,10,69,78,67,79,68, 73,78,71,32,52,55,52,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,56,48,48,10,70,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,48,69,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,55,56,48,10,48,54,52,48,10,48,54, 52,48,10,51,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,50,56,68,10,69,78,67,79,68,73,78,71,32,52, 55,52,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,56,48,48,10,70,56,48,48,10,49,56,48,48, 10,49,56,56,48,10,48,69,56,48,10,48,55,56,48,10, 48,54,56,48,10,48,54,56,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,50,57,48, 10,69,78,67,79,68,73,78,71,32,52,55,53,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,55,69,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,50,57,49,10,69,78,67,79, 68,73,78,71,32,52,55,53,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,67,48,48,48,10,67,48,48, 48,10,67,48,48,48,10,67,48,48,48,10,70,67,48,48, 10,48,67,48,48,10,48,70,48,48,10,48,68,56,48,10, 48,68,56,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,50,57,50,10,69,78,67,79,68,73,78,71,32, 52,55,53,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,67,48,48,48,10,67,48,48,48,10,67,48,48, 48,10,67,48,48,48,10,70,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,68,56,48,10,48,68,56,48,10,48, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,50,57, 51,10,69,78,67,79,68,73,78,71,32,52,55,53,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,51,70,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,48,48, 48,10,51,69,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,50,57,52,10,69,78,67, 79,68,73,78,71,32,52,55,53,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,67,48,48,48,10,67,48, 48,48,10,67,48,48,48,10,67,48,48,48,10,70,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,70,48,48,10,48,67,56,48,10, 48,67,56,48,10,48,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,50,57,53,10,69,78,67,79,68,73,78,71, 32,52,55,53,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,70,67,48,48,10,67,67,48,48,10,67,67, 48,48,10,48,67,48,48,10,48,70,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,50, 57,54,10,69,78,67,79,68,73,78,71,32,52,55,53,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,55,70,48,48,10,67, 57,56,48,10,67,57,56,48,10,67,55,48,48,10,67,48, 48,48,10,55,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,50,57,55,10,69,78, 67,79,68,73,78,71,32,52,55,53,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,51,70,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,48,48,48,10,51,69, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,49,70,56,48,10, 49,48,56,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,50,57,56,10,69,78,67,79,68,73,78, 71,32,52,55,54,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 56,49,48,48,10,70,70,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,70, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 50,57,57,10,69,78,67,79,68,73,78,71,32,52,55,54, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,56,52,48,48,10, 70,67,48,48,10,51,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,51,69,48,48,10,48,54, 48,48,10,48,55,56,48,10,48,54,67,48,10,48,54,67, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,50,57,65,10,69, 78,67,79,68,73,78,71,32,52,55,54,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,56,52,48,48,10,70,67,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,48,48,48,10,51, 69,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,67, 48,10,48,54,67,48,10,48,55,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,50,57,66,10,69,78,67,79,68,73, 78,71,32,52,55,54,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,52,48,56,48,10,55,70,56,48,10,48,67,48,48,10, 51,70,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,48,48,48,10,51,69,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,50,57,67,10,69,78,67,79,68,73,78,71,32,52,55, 54,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,56,52,48,48, 10,70,67,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,69,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,55, 56,48,10,48,54,52,48,10,48,54,52,48,10,48,55,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,50,57,68,10, 69,78,67,79,68,73,78,71,32,52,55,54,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,56,49,48,48,10,70,70,48,48, 10,49,56,48,48,10,70,67,48,48,10,67,67,48,48,10, 67,67,48,48,10,48,67,48,48,10,48,70,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,50,57,69,10,69,78,67,79,68, 73,78,71,32,52,55,54,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,56,49,48,48,10,70,70,48,48,10,49,56,48,48, 10,55,70,48,48,10,67,57,56,48,10,67,57,56,48,10, 67,55,48,48,10,67,48,48,48,10,55,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,50,57,70,10,69,78,67,79,68,73,78,71,32,52, 55,54,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,52,48,56, 48,10,55,70,56,48,10,48,67,48,48,10,51,70,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,48,48,48,10,51,69,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,49,70,56,48,10,49,48,56,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,50,65,48, 10,69,78,67,79,68,73,78,71,32,52,55,54,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,51,56,48,48,10,49,56,48,48, 10,51,67,48,48,10,54,54,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,50,65,49,10,69,78,67,79, 68,73,78,71,32,52,55,54,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,67,48,48,48,10,67,48,48, 48,10,55,48,48,48,10,51,48,48,48,10,55,56,48,48, 10,67,67,48,48,10,67,55,56,48,10,67,54,67,48,10, 67,54,67,48,10,67,54,48,48,10,67,54,48,48,10,67, 54,48,48,10,67,54,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,50,65,50,10,69,78,67,79,68,73,78,71,32, 52,55,55,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,67,48,48,48,10,67,48,48,48,10,55,48,48, 48,10,51,48,48,48,10,55,56,48,48,10,67,67,48,48, 10,67,54,48,48,10,67,54,48,48,10,67,54,48,48,10, 67,54,48,48,10,67,54,67,48,10,67,54,67,48,10,67, 55,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,50,65, 51,10,69,78,67,79,68,73,78,71,32,52,55,55,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,51,56,48,48,10,49,56,48, 48,10,51,67,48,48,10,54,54,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,50,65,52,10,69,78,67, 79,68,73,78,71,32,52,55,55,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,67,48,48,48,10,67,48, 48,48,10,55,48,48,48,10,51,48,48,48,10,55,56,48, 48,10,67,67,48,48,10,67,54,48,48,10,67,54,48,48, 10,67,54,48,48,10,67,55,56,48,10,67,54,52,48,10, 67,54,52,48,10,67,55,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,50,65,53,10,69,78,67,79,68,73,78,71, 32,52,55,55,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,48,48,48,10,51,56,48,48,10,49,67, 48,48,10,49,56,48,48,10,51,67,48,48,10,54,54,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,50, 65,54,10,69,78,67,79,68,73,78,71,32,52,55,55,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,51,56,48,48,10,49,56, 48,48,10,51,67,48,48,10,54,54,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,50,65,55,10,69,78, 67,79,68,73,78,71,32,52,55,55,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,56,52,48,48,10,70,67,48,48,10,51, 48,48,48,10,51,48,48,48,10,49,67,48,48,10,48,67, 48,48,10,49,69,48,48,10,51,51,48,48,10,51,49,56, 48,10,51,49,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,50,65,56,10,69,78,67,79,68,73,78, 71,32,52,55,55,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,52,48,48,48,10,52,48,48,48,10,53, 70,48,48,10,51,49,56,48,10,51,49,56,48,10,51,49, 56,48,10,51,49,56,48,10,51,49,56,48,10,51,49,56, 48,10,51,49,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 50,65,57,10,69,78,67,79,68,73,78,71,32,52,55,55, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,56,48,48,48,10, 56,48,48,48,10,66,69,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,56,48,10,54,51, 67,48,10,54,51,52,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,50,65,65,10,69, 78,67,79,68,73,78,71,32,52,55,55,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,56,48,48,48,10,56,48,48,48,10, 66,69,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,52, 48,10,54,51,67,48,10,54,51,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,50,65,66,10,69,78,67,79,68,73, 78,71,32,52,55,55,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,52,48,48,48,10,52,48,48,48,10,53,70,48,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,51, 49,56,48,10,51,49,56,48,10,51,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,50,65,67,10,69,78,67,79,68,73,78,71,32,52,55, 56,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,56,48,48,48, 10,56,48,48,48,10,66,69,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 56,48,10,54,50,52,48,10,54,50,52,48,10,54,51,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,50,65,68,10, 69,78,67,79,68,73,78,71,32,52,55,56,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,56,48,48,48,10,56,48,48,48, 10,66,69,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,51, 51,48,48,10,51,51,48,48,10,51,51,48,48,10,51,51, 48,48,10,51,51,48,48,10,51,51,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,50,65,69,10,69,78,67,79,68, 73,78,71,32,52,55,56,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,56,48,48,48,10,56,48,48,48,10,66,69,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,50,66,48,10,69,78,67,79,68,73,78,71,32,52, 55,56,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,56,51,56, 48,10,56,52,67,48,10,66,67,67,48,10,54,51,56,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,50,66,50, 10,69,78,67,79,68,73,78,71,32,52,55,56,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,56,48,48,48,10,56,48,48, 48,10,66,69,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,52,48,10,54,51,52,48,10, 54,51,67,48,10,54,51,52,48,10,54,51,52,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,50,66,51,10,69,78,67,79, 68,73,78,71,32,52,55,56,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,56,48,48,48,10,56,48,48,48,10,66,69,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,70,67,48,10,48,56, 52,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,50,66,52,10,69,78,67,79,68,73,78,71,32, 52,55,56,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,56,48, 48,48,10,56,48,48,48,10,66,69,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,48,51,48,48,10, 48,51,56,48,10,48,50,52,48,10,48,50,52,48,10,48, 70,56,48,10,48,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,50,66, 53,10,69,78,67,79,68,73,78,71,32,52,55,56,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,56,48,48,48,10,56,48, 48,48,10,66,69,52,48,10,54,51,52,48,10,54,51,67, 48,10,54,51,52,48,10,54,51,52,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,50,66,56,10,69,78,67, 79,68,73,78,71,32,52,55,57,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,49, 56,48,48,10,51,48,48,48,10,69,48,48,48,10,56,48, 48,48,10,66,69,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,50,66,57,10,69,78,67,79,68,73,78,71, 32,52,55,57,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,49,56,48,48,10,51, 48,48,48,10,69,48,48,48,10,56,48,48,48,10,66,69, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,56, 48,10,54,51,67,48,10,54,51,52,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,50, 66,65,10,69,78,67,79,68,73,78,71,32,52,55,57,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,49,56,48,48,10,51,48,48,48,10,69, 48,48,48,10,56,48,48,48,10,66,69,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,52,48,10,54,51,67,48,10,54,51,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,50,66,66,10,69,78, 67,79,68,73,78,71,32,52,55,57,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,67,48,48,10,49,56,48,48,10,55,48,48,48,10,52, 48,48,48,10,53,70,48,48,10,51,49,56,48,10,51,49, 56,48,10,51,49,56,48,10,51,49,56,48,10,51,49,56, 48,10,51,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,50,66,67,10,69,78,67,79,68,73,78, 71,32,52,55,57,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,49,56,48,48,10, 51,48,48,48,10,69,48,48,48,10,56,48,48,48,10,66, 69,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,56,48,10,54,50,52,48,10,54,50,52,48, 10,54,51,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 50,66,68,10,69,78,67,79,68,73,78,71,32,52,55,57, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,49,56,48,48,10,51,48,48,48,10, 69,48,48,48,10,56,48,48,48,10,66,69,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,51,51,48,48,10,51,51,48,48,10,51,51,48, 48,10,51,51,48,48,10,51,51,48,48,10,51,51,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,50,66,69,10,69, 78,67,79,68,73,78,71,32,52,55,57,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,49,56,48,48,10,51,48,48,48,10,69,48,48,48,10, 56,48,48,48,10,66,69,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,50,67,48,10,69,78,67,79,68,73, 78,71,32,52,56,48,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,49,56,48,48, 10,51,48,48,48,10,69,51,56,48,10,56,54,52,48,10, 66,69,52,48,10,54,51,56,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,50,67,50,10,69,78,67,79,68,73,78,71,32,52,56, 48,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,49,56,48,48,10,51,48,48,48, 10,69,48,48,48,10,56,48,48,48,10,66,69,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,52,48,10,54, 51,52,48,10,54,51,67,48,10,54,51,52,48,10,54,51, 52,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,50,67,51,10, 69,78,67,79,68,73,78,71,32,52,56,48,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,49,56,48,48,10,51,48,48,48,10,69,48,48,48, 10,56,48,48,48,10,66,69,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,70,67, 48,10,48,56,52,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,50,67,52,10,69,78,67,79,68, 73,78,71,32,52,56,48,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,49,56,48, 48,10,51,48,48,48,10,69,48,48,48,10,56,48,48,48, 10,66,69,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,48,51,56,48,10,48,51,52,48,10,48,50, 52,48,10,48,70,56,48,10,48,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,50,67,53,10,69,78,67,79,68,73,78,71,32,52, 56,48,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,49,56,48,48,10,51,48,48, 48,10,69,48,48,48,10,56,48,52,48,10,66,69,52,48, 10,54,51,67,48,10,54,51,52,48,10,54,51,52,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,50,67,56, 10,69,78,67,79,68,73,78,71,32,52,56,48,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,69,48, 48,10,54,66,48,48,10,67,57,56,48,10,67,57,56,48, 10,67,57,56,48,10,67,57,56,48,10,67,57,56,48,10, 67,57,56,48,10,67,57,56,48,10,54,66,48,48,10,51, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,50,67,57,10,69,78,67,79, 68,73,78,71,32,52,56,48,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,69,48,48,10,54,66,48, 48,10,67,57,56,48,10,67,57,56,48,10,67,57,56,48, 10,67,57,56,48,10,67,57,56,48,10,67,57,56,48,10, 67,57,67,48,10,54,66,67,48,10,51,70,67,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,50,67,65,10,69,78,67,79,68,73,78,71,32, 52,56,49,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,70,48,48,10,54,68,56,48,10,67,67,67, 48,10,67,67,67,48,10,67,67,67,48,10,54,68,56,48, 10,51,70,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,68,56,48,10,48,68,56,48,10,48, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,50,67, 66,10,69,78,67,79,68,73,78,71,32,52,56,49,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,70, 48,48,10,54,68,56,48,10,67,67,67,48,10,67,67,67, 48,10,67,67,67,48,10,54,68,56,48,10,51,70,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,50,67,67,10,69,78,67, 79,68,73,78,71,32,52,56,49,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,70,48,48,10,54,68, 56,48,10,67,67,67,48,10,67,67,67,48,10,67,67,67, 48,10,54,68,56,48,10,51,70,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,70,48,48,10,48,67,56,48,10, 48,67,56,48,10,48,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,50,67,68,10,69,78,67,79,68,73,78,71, 32,52,56,49,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,69,48,48,10,54,66, 48,48,10,67,57,56,48,10,67,57,56,48,10,67,57,67, 48,10,67,57,67,48,10,67,57,67,48,10,67,57,56,48, 10,67,57,56,48,10,54,66,48,48,10,51,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,50, 67,69,10,69,78,67,79,68,73,78,71,32,52,56,49,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 70,48,48,10,54,68,56,48,10,67,67,67,48,10,67,67, 67,48,10,67,67,67,48,10,54,68,56,48,10,51,70,48, 48,10,48,67,48,48,10,49,56,48,48,10,51,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,50,68,48,10,69,78, 67,79,68,73,78,71,32,52,56,49,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,54,48,48,10,49, 66,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,70,48,48,10,51,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,50,68,49,10,69,78,67,79,68,73,78, 71,32,52,56,49,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,54,48,48,10,49,66,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 56,48,10,54,51,67,48,10,54,51,52,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,70,48,48, 10,51,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 50,68,50,10,69,78,67,79,68,73,78,71,32,52,56,49, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,69,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,51,70,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,54,48,48,10,48,67,48, 48,10,49,56,48,48,10,49,56,56,48,10,49,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,50,68,51,10,69, 78,67,79,68,73,78,71,32,52,56,49,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,69,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,51,70,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,54,48,48,10,48,67,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,50,68,52,10,69,78,67,79,68,73, 78,71,32,52,56,50,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,69,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,51, 70,48,48,10,48,51,48,48,10,48,51,48,48,10,48,54, 48,48,10,48,69,48,48,10,49,57,48,48,10,49,57,48, 48,10,48,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,50,68,53,10,69,78,67,79,68,73,78,71,32,52,56, 50,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,69,48,48,10,49,66,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,70,48,48,10,51,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,50,68,54,10, 69,78,67,79,68,73,78,71,32,52,56,50,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,69,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,51,69,48,48,10,49,56,48,48,10,49, 56,48,48,10,51,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,50,68,56,10,69,78,67,79,68, 73,78,71,32,52,56,50,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,55,70,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,50,68,57,10,69,78,67,79,68,73,78,71,32,52, 56,50,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,67,54,48,48,10,67,54,48,48,10,67,54,48,48, 10,67,54,48,48,10,70,69,48,48,10,67,54,48,48,10, 67,55,56,48,10,67,54,67,48,10,67,54,67,48,10,67, 54,48,48,10,67,54,48,48,10,67,54,48,48,10,67,54, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,50,68,65, 10,69,78,67,79,68,73,78,71,32,52,56,50,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,67,54,48, 48,10,67,54,48,48,10,67,54,48,48,10,67,54,48,48, 10,70,69,48,48,10,67,54,48,48,10,67,54,48,48,10, 67,54,48,48,10,67,54,48,48,10,67,54,48,48,10,67, 54,67,48,10,67,54,67,48,10,67,55,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,50,68,66,10,69,78,67,79, 68,73,78,71,32,52,56,50,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,55,70,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,50,68,67,10,69,78,67,79,68,73,78,71,32, 52,56,50,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,67,54,48,48,10,67,54,48,48,10,67,54,48, 48,10,67,54,48,48,10,70,69,48,48,10,67,54,48,48, 10,67,54,48,48,10,67,54,48,48,10,67,54,48,48,10, 67,55,56,48,10,67,54,52,48,10,67,54,52,48,10,67, 55,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,50,68, 68,10,69,78,67,79,68,73,78,71,32,52,56,50,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,49, 56,48,10,70,49,56,48,10,66,49,56,48,10,51,49,56, 48,10,51,70,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,50,68,69,10,69,78,67, 79,68,73,78,71,32,52,56,51,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,55,70,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,50,68,70,10,69,78,67,79,68,73,78,71, 32,52,56,51,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,67,54,48,48,10,67,54,48,48,10,67,54, 48,48,10,67,54,48,48,10,70,69,48,48,10,67,54,48, 48,10,67,54,48,48,10,67,54,48,48,10,67,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,49,70,56,48,10,49,48,56,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,50, 69,48,10,69,78,67,79,68,73,78,71,32,52,56,51,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 51,56,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,55,70,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,50,69,49,10,69,78, 67,79,68,73,78,71,32,52,56,51,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,51,56,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,55,70, 48,48,10,54,51,48,48,10,54,51,56,48,10,54,51,67, 48,10,54,51,52,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,50,69,50,10,69,78,67,79,68,73,78, 71,32,52,56,51,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,51,56,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,55,70,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,52,48,10,54,51,67,48, 10,54,51,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 50,69,51,10,69,78,67,79,68,73,78,71,32,52,56,51, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,51,56,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,55,70,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,50,69,52,10,69, 78,67,79,68,73,78,71,32,52,56,51,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,51,56,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,55, 70,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,56,48,10,54,51,52, 48,10,54,50,52,48,10,54,51,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,50,69,53,10,69,78,67,79,68,73, 78,71,32,52,56,51,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,56,56,48,48, 10,70,56,48,48,10,50,51,56,48,10,50,51,48,48,10, 69,51,48,48,10,54,51,48,48,10,55,70,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,50,69,54,10,69,78,67,79,68,73,78,71,32,52,56, 51,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,51,56,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,55,70,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,50,69,55,10, 69,78,67,79,68,73,78,71,32,52,56,51,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,67,54,48,48, 10,67,54,48,48,10,67,54,48,48,10,67,54,48,48,10, 70,69,48,48,10,67,54,48,48,10,67,54,48,48,10,67, 54,48,48,10,67,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,49,70,56, 48,10,49,48,56,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,50,69,56,10,69,78,67,79,68, 73,78,71,32,52,56,52,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,67,48,48,10,51,54,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 51,51,48,48,10,49,69,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,50,69,57,10,69,78,67,79,68,73,78,71,32,52, 56,52,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,67,48,48,10,51,54,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,51,51,48,48,10, 49,69,48,48,10,48,67,48,48,10,48,70,48,48,10,48, 68,56,48,10,48,68,56,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,50,69,65, 10,69,78,67,79,68,73,78,71,32,52,56,52,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,56,48, 48,10,54,67,48,48,10,67,54,48,48,10,67,54,48,48, 10,67,54,48,48,10,54,54,48,48,10,51,67,48,48,10, 49,56,48,48,10,49,66,48,48,10,49,70,48,48,10,49, 57,56,48,10,49,57,56,48,10,49,56,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,50,69,66,10,69,78,67,79, 68,73,78,71,32,52,56,52,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,67,48,48,10,51,54,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,51,51,48,48,10,49,69,48,48,10,48,67,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,67,48,48,10,49, 56,48,48,10,51,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,50,69,67,10,69,78,67,79,68,73,78,71,32, 52,56,52,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,56,48,48,10,54,67,48,48,10,67,54,48, 48,10,67,54,48,48,10,67,54,48,48,10,54,54,48,48, 10,51,67,48,48,10,49,56,48,48,10,49,70,48,48,10, 49,67,56,48,10,49,68,56,48,10,49,66,48,48,10,49, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,50,69, 68,10,69,78,67,79,68,73,78,71,32,52,56,52,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,67, 48,48,10,51,54,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,51,51,48,48,10,49,69,48,48, 10,48,67,48,48,10,48,67,67,48,10,48,67,67,48,10, 55,70,56,48,10,67,48,48,48,10,67,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,50,69,69,10,69,78,67, 79,68,73,78,71,32,52,56,52,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,67,48,48,10,51,54, 48,48,10,54,51,48,48,10,54,51,56,48,10,54,51,67, 48,10,51,51,52,48,10,49,69,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,50,70,48,10,69,78,67,79,68,73,78,71, 32,52,56,52,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,69,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,54,48,48,10,51,67,48, 48,10,51,48,48,48,10,49,56,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,50, 70,49,10,69,78,67,79,68,73,78,71,32,52,56,52,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 67,48,48,10,67,54,48,48,10,67,54,48,48,10,67,54, 48,48,10,67,67,48,48,10,55,56,48,48,10,54,48,48, 48,10,51,48,48,48,10,51,67,56,48,10,54,54,67,48, 10,67,51,52,48,10,67,51,48,48,10,67,51,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,50,70,50,10,69,78, 67,79,68,73,78,71,32,52,56,53,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,67,48,48,10,67, 54,48,48,10,67,54,48,48,10,67,54,48,48,10,67,67, 48,48,10,55,56,48,48,10,54,48,48,48,10,51,48,48, 48,10,51,67,48,48,10,54,54,48,48,10,67,51,52,48, 10,67,51,67,48,10,67,51,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,50,70,51,10,69,78,67,79,68,73,78, 71,32,52,56,53,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,69,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,54,48,48,10,51,67, 48,48,10,51,48,48,48,10,49,56,48,48,10,49,69,48, 48,10,51,51,48,48,10,55,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 50,70,52,10,69,78,67,79,68,73,78,71,32,52,56,53, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,67,48,48,10,67,54,48,48,10,67,54,48,48,10,67, 54,48,48,10,67,67,48,48,10,55,56,48,48,10,54,48, 48,48,10,51,48,48,48,10,51,67,48,48,10,54,55,56, 48,10,67,50,52,48,10,67,51,52,48,10,67,51,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,50,70,53,10,69, 78,67,79,68,73,78,71,32,52,56,53,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,67,48,48,10, 67,54,48,48,10,67,55,56,48,10,67,54,67,48,10,67, 67,67,48,10,55,56,48,48,10,54,48,48,48,10,51,48, 48,48,10,51,67,48,48,10,54,54,48,48,10,67,51,48, 48,10,67,51,48,48,10,67,51,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,50,70,54,10,69,78,67,79,68,73, 78,71,32,52,56,53,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,69,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,54,48,48,10,51, 67,48,48,10,51,48,48,48,10,49,56,48,48,10,49,69, 48,48,10,51,51,56,48,10,54,49,56,48,10,54,48,48, 48,10,54,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,50,70,55,10,69,78,67,79,68,73,78,71,32,52,56, 53,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,67,48,48,10,67,54,48,48,10,67,54,48,48,10, 67,54,48,48,10,67,67,48,48,10,55,56,48,48,10,54, 48,48,48,10,51,48,48,48,10,51,67,48,48,10,69,54, 48,48,10,67,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,70,67,48,10,48,56,52,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,50,70,56,10, 69,78,67,79,68,73,78,71,32,52,56,53,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,69,48,48, 10,54,51,48,48,10,55,70,48,48,10,54,51,48,48,10, 54,54,48,48,10,51,67,48,48,10,51,48,48,48,10,49, 56,48,48,10,49,69,48,48,10,51,51,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,50,70,57,10,69,78,67,79,68, 73,78,71,32,52,56,53,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,67,48,48,10,67,54,48,48, 10,70,69,48,48,10,67,54,48,48,10,67,67,48,48,10, 55,56,48,48,10,54,48,48,48,10,51,48,48,48,10,51, 67,56,48,10,54,54,67,48,10,67,51,52,48,10,67,51, 48,48,10,67,51,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,50,70,65,10,69,78,67,79,68,73,78,71,32,52, 56,53,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,67,48,48,10,67,54,48,48,10,67,54,48,48, 10,67,54,48,48,10,67,67,48,48,10,55,56,48,48,10, 54,48,48,48,10,51,48,48,48,10,51,67,48,48,10,54, 54,48,48,10,67,51,52,48,10,67,51,67,48,10,67,51, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,50,70,66, 10,69,78,67,79,68,73,78,71,32,52,56,53,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,69,48, 48,10,54,51,48,48,10,55,70,48,48,10,54,51,48,48, 10,54,54,48,48,10,51,67,48,48,10,51,48,48,48,10, 49,56,48,48,10,49,69,48,48,10,51,51,48,48,10,55, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,50,70,67,10,69,78,67,79, 68,73,78,71,32,52,56,54,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,67,48,48,10,67,54,48, 48,10,70,69,48,48,10,67,54,48,48,10,67,67,48,48, 10,55,56,48,48,10,54,48,48,48,10,51,48,48,48,10, 51,67,48,48,10,54,55,56,48,10,67,50,52,48,10,67, 51,52,48,10,67,51,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,50,70,68,10,69,78,67,79,68,73,78,71,32, 52,56,54,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,67,48,48,10,67,54,48,48,10,70,70,56, 48,10,67,54,67,48,10,67,67,67,48,10,55,56,48,48, 10,54,48,48,48,10,51,48,48,48,10,51,67,48,48,10, 54,54,48,48,10,67,51,48,48,10,67,51,48,48,10,67, 51,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,50,70, 69,10,69,78,67,79,68,73,78,71,32,52,56,54,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,69, 48,48,10,54,51,48,48,10,55,70,48,48,10,54,51,48, 48,10,54,54,48,48,10,51,67,48,48,10,51,48,48,48, 10,49,56,48,48,10,49,69,48,48,10,51,51,56,48,10, 54,49,56,48,10,54,48,48,48,10,54,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,50,70,70,10,69,78,67, 79,68,73,78,71,32,52,56,54,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,67,48,48,10,67,54, 48,48,10,70,69,48,48,10,67,54,48,48,10,67,67,48, 48,10,55,56,48,48,10,54,48,48,48,10,51,48,48,48, 10,51,67,48,48,10,69,54,48,48,10,67,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,70,67,48,10,48, 56,52,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,51,48,48,10,69,78,67,79,68,73,78,71, 32,52,56,54,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,52, 48,56,48,10,55,70,56,48,10,48,67,48,48,10,51,69, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,54,48, 48,10,51,67,48,48,10,51,48,48,48,10,49,56,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,51, 48,49,10,69,78,67,79,68,73,78,71,32,52,56,54,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,56,49,48,48,10,70, 70,48,48,10,49,56,48,48,10,55,67,48,48,10,67,54, 48,48,10,67,54,48,48,10,67,67,48,48,10,55,56,48, 48,10,54,48,48,48,10,51,48,48,48,10,51,67,56,48, 10,54,54,67,48,10,67,51,52,48,10,67,51,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,51,48,50,10,69,78, 67,79,68,73,78,71,32,52,56,54,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,56,49,48,48,10,70,70,48,48,10,49, 56,48,48,10,55,67,48,48,10,67,54,48,48,10,67,54, 48,48,10,67,67,48,48,10,55,56,48,48,10,54,48,48, 48,10,51,48,48,48,10,51,67,48,48,10,54,54,52,48, 10,67,51,52,48,10,67,51,67,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,51,48,51,10,69,78,67,79,68,73,78, 71,32,52,56,54,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 52,48,56,48,10,55,70,56,48,10,48,67,48,48,10,51, 69,48,48,10,54,51,48,48,10,54,51,48,48,10,54,54, 48,48,10,51,67,48,48,10,51,48,48,48,10,49,56,48, 48,10,49,69,48,48,10,55,51,48,48,10,54,49,56,48, 10,48,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 51,48,52,10,69,78,67,79,68,73,78,71,32,52,56,54, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,56,49,48,48,10, 70,70,48,48,10,49,56,48,48,10,55,67,48,48,10,67, 54,48,48,10,67,54,48,48,10,67,67,48,48,10,55,56, 48,48,10,54,48,48,48,10,51,48,48,48,10,51,68,56, 48,10,54,54,52,48,10,67,51,52,48,10,67,51,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,51,48,53,10,69, 78,67,79,68,73,78,71,32,52,56,54,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,56,49,48,48,10,70,70,48,48,10, 49,56,48,48,10,55,67,48,48,10,67,55,56,48,10,67, 54,67,48,10,67,67,67,48,10,55,56,48,48,10,54,48, 48,48,10,51,48,48,48,10,51,67,48,48,10,54,54,48, 48,10,67,51,48,48,10,67,51,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,51,48,54,10,69,78,67,79,68,73, 78,71,32,52,56,55,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,52,48,56,48,10,55,70,56,48,10,48,67,48,48,10, 51,69,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 54,48,48,10,51,67,48,48,10,51,48,48,48,10,49,56, 48,48,10,49,69,48,48,10,51,51,48,48,10,54,49,56, 48,10,54,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,51,48,55,10,69,78,67,79,68,73,78,71,32,52,56, 55,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,56,49,48,48, 10,70,70,48,48,10,49,56,48,48,10,55,67,48,48,10, 67,54,48,48,10,67,54,48,48,10,67,67,48,48,10,55, 56,48,48,10,54,48,48,48,10,51,48,48,48,10,51,67, 48,48,10,69,54,48,48,10,67,51,48,48,10,48,51,48, 48,10,48,70,67,48,10,48,56,52,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,51,48,56,10, 69,78,67,79,68,73,78,71,32,52,56,55,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,69,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,51,48,57,10,69,78,67,79,68, 73,78,71,32,52,56,55,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,70,67,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,55,56,48,10,48,54,67,48,10,48,54,67,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,51,48,65,10,69,78,67,79,68,73,78,71,32,52, 56,55,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,70,67,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,67,48,10,48,54,67,48,10,48,55, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,51,48,66, 10,69,78,67,79,68,73,78,71,32,52,56,55,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,69,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,54,48,48,10,48, 67,48,48,10,49,56,48,48,10,51,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,51,48,67,10,69,78,67,79, 68,73,78,71,32,52,56,55,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,70,67,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,55,56,48,10,48,54,52,48,10,48, 54,52,48,10,48,55,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,51,48,68,10,69,78,67,79,68,73,78,71,32, 52,56,55,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,48,48,10,67,57,56,48,10,67,57,56, 48,10,55,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,51,48, 69,10,69,78,67,79,68,73,78,71,32,52,56,55,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,49,56,48,48,10,49,56, 48,48,10,55,69,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,51,49,48,10,69,78,67, 79,68,73,78,71,32,52,56,56,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,70,67,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,55,56,48,10,48,54,52,48,10,48,54,52,48, 10,48,55,56,48,10,48,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,51,49,50,10,69,78,67,79,68,73,78,71, 32,52,56,56,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,70,67,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,56, 48,10,48,54,56,48,10,48,55,56,48,10,48,54,56,48, 10,48,54,56,48,10,48,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,51, 49,51,10,69,78,67,79,68,73,78,71,32,52,56,56,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,55,56,48,48,10,54, 67,48,48,10,48,67,48,48,10,51,70,48,48,10,51,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,51,49,52,10,69,78, 67,79,68,73,78,71,32,52,56,56,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,70,67,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,55,56,48,10,48,54,52,48,10,48,54,52, 48,10,48,55,56,48,10,48,67,48,48,10,49,56,48,48, 10,51,48,48,48,10,54,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,51,49,53,10,69,78,67,79,68,73,78, 71,32,52,56,56,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,70,67,48,48,10,48,54,56,48,10,48, 54,56,48,10,48,55,56,48,10,48,54,56,48,10,48,54, 56,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 51,49,56,10,69,78,67,79,68,73,78,71,32,52,56,56, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,52,49,48,48,10, 55,70,48,48,10,49,56,48,48,10,55,69,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,51,49,57,10,69, 78,67,79,68,73,78,71,32,52,56,56,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,56,50,48,48,10,70,69,48,48,10, 51,48,48,48,10,70,67,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,55,56,48,10,48,54,67,48,10,48,54, 67,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,51,49,65,10,69,78,67,79,68,73, 78,71,32,52,56,57,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,56,50,48,48,10,70,69,48,48,10,51,48,48,48,10, 70,67,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,67,48,10,48,54,67, 48,10,48,55,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,51,49,66,10,69,78,67,79,68,73,78,71,32,52,56, 57,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,52,49,48,48, 10,55,70,48,48,10,49,56,48,48,10,55,69,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,54, 48,48,10,48,67,48,48,10,49,56,48,48,10,51,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,51,49,67,10, 69,78,67,79,68,73,78,71,32,52,56,57,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,56,50,48,48,10,70,69,48,48, 10,51,48,48,48,10,70,67,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,55,56,48,10,48,54, 52,48,10,48,54,52,48,10,48,55,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,51,49,68,10,69,78,67,79,68, 73,78,71,32,52,56,57,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,50,48,56,48,10,51,70,56,48,10,48,54,48,48, 10,55,70,48,48,10,67,57,56,48,10,67,57,56,48,10, 55,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,51,49,69,10,69,78,67,79,68,73,78,71,32,52, 56,57,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,52,49,48, 48,10,55,70,48,48,10,49,50,48,48,10,49,50,48,48, 10,55,69,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,51,50,48, 10,69,78,67,79,68,73,78,71,32,52,56,57,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,69,48, 48,10,52,57,48,48,10,52,57,48,48,10,52,57,48,48, 10,52,57,48,48,10,52,57,48,48,10,52,57,48,48,10, 52,57,48,48,10,52,57,48,48,10,52,57,48,48,10,52, 57,48,48,10,52,57,48,48,10,52,57,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,51,50,49,10,69,78,67,79, 68,73,78,71,32,52,56,57,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,67,48,48,10,57,50,48, 48,10,57,50,48,48,10,57,50,48,48,10,57,50,48,48, 10,57,51,56,48,10,57,50,56,48,10,57,50,56,48,10, 57,50,48,48,10,57,50,48,48,10,57,50,48,48,10,57, 50,48,48,10,57,50,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,51,50,50,10,69,78,67,79,68,73,78,71,32, 52,56,57,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,67,48,48,10,57,50,48,48,10,57,50,48, 48,10,57,50,48,48,10,57,50,48,48,10,57,50,48,48, 10,57,50,48,48,10,57,50,48,48,10,57,50,48,48,10, 57,50,48,48,10,57,50,48,48,10,57,50,56,48,10,57, 51,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,51,50, 51,10,69,78,67,79,68,73,78,71,32,52,56,57,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,69, 48,48,10,52,57,48,48,10,52,57,48,48,10,52,57,48, 48,10,52,57,48,48,10,52,57,48,48,10,52,57,48,48, 10,52,57,48,48,10,48,49,48,48,10,48,49,48,48,10, 48,49,48,48,10,48,49,48,48,10,48,49,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,51,50,52,10,69,78,67, 79,68,73,78,71,32,52,57,48,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,67,48,48,10,57,50, 48,48,10,57,50,48,48,10,57,50,48,48,10,57,50,48, 48,10,57,50,48,48,10,57,50,48,48,10,57,50,48,48, 10,57,50,48,48,10,57,51,56,48,10,57,50,52,48,10, 57,50,52,48,10,57,51,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,51,50,53,10,69,78,67,79,68,73,78,71, 32,52,57,48,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,69,48,48,10,52,57,48,48,10,52,57, 48,48,10,52,57,48,48,10,52,57,48,48,10,52,57,48, 48,10,52,57,48,48,10,48,56,48,48,10,48,52,48,48, 10,48,52,48,48,10,48,52,48,48,10,48,52,48,48,10, 48,52,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,51, 50,54,10,69,78,67,79,68,73,78,71,32,52,57,48,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 69,48,48,10,52,57,48,48,10,52,57,48,48,10,52,57, 48,48,10,52,57,48,48,10,52,57,48,48,10,52,57,48, 48,10,52,57,48,48,10,52,48,48,48,10,52,48,48,48, 10,52,48,48,48,10,52,48,48,48,10,52,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,51,50,55,10,69,78, 67,79,68,73,78,71,32,52,57,48,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,67,48,48,10,57, 50,48,48,10,57,50,48,48,10,57,50,48,48,10,57,50, 48,48,10,57,50,48,48,10,57,50,48,48,10,57,50,48, 48,10,48,50,48,48,10,48,50,48,48,10,48,50,48,48, 10,48,50,48,48,10,48,50,48,48,10,48,70,56,48,10, 48,56,56,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,51,50,56,10,69,78,67,79,68,73,78, 71,32,52,57,48,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,67,48,48,10,68,54,48,48,10,57, 50,48,48,10,57,50,48,48,10,57,50,48,48,10,57,50, 48,48,10,57,50,48,48,10,57,50,48,48,10,57,50,48, 48,10,68,66,48,48,10,66,54,56,48,10,66,54,56,48, 10,68,66,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 51,50,57,10,69,78,67,79,68,73,78,71,32,52,57,48, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,67,48,48,10,68,54,48,48,10,57,50,48,48,10,57, 50,48,48,10,57,50,48,48,10,57,50,48,48,10,57,50, 48,48,10,57,50,48,48,10,57,50,52,48,10,68,66,52, 48,10,66,54,67,48,10,66,54,56,48,10,68,66,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,51,50,65,10,69, 78,67,79,68,73,78,71,32,52,57,48,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,67,48,48,10, 68,54,48,48,10,57,50,48,48,10,57,50,48,48,10,57, 51,56,48,10,57,50,56,48,10,57,50,56,48,10,57,50, 48,48,10,57,50,48,48,10,68,66,48,48,10,66,54,56, 48,10,66,54,56,48,10,68,66,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,51,50,66,10,69,78,67,79,68,73, 78,71,32,52,57,48,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,67,48,48,10,68,54,48,48,10, 57,50,48,48,10,57,50,48,48,10,57,50,48,48,10,68, 65,48,48,10,66,54,48,48,10,66,54,48,48,10,68,65, 48,48,10,48,51,48,48,10,48,50,56,48,10,48,50,56, 48,10,48,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,51,50,67,10,69,78,67,79,68,73,78,71,32,52,57, 48,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,69,48,48,10,68,51,48,48,10,57,49,48,48,10, 57,49,48,48,10,57,49,48,48,10,57,49,48,48,10,57, 49,48,48,10,57,49,48,48,10,57,49,48,48,10,68,57, 56,48,10,66,54,52,48,10,66,54,52,48,10,68,57,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,51,50,68,10, 69,78,67,79,68,73,78,71,32,52,57,48,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,67,48,48, 10,68,54,48,48,10,57,50,48,48,10,57,50,48,48,10, 57,50,48,48,10,68,51,48,48,10,66,50,56,48,10,66, 50,56,48,10,68,51,48,48,10,49,56,48,48,10,49,52, 48,48,10,49,52,48,48,10,49,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,51,50,69,10,69,78,67,79,68, 73,78,71,32,52,57,49,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,67,48,48,10,68,54,48,48, 10,57,50,48,48,10,57,50,48,48,10,57,50,48,48,10, 57,66,48,48,10,57,54,56,48,10,57,54,56,48,10,57, 66,48,48,10,67,48,48,48,10,65,48,48,48,10,65,48, 48,48,10,67,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,51,50,70,10,69,78,67,79,68,73,78,71,32,52, 57,49,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,67,48,48,10,68,54,48,48,10,57,50,48,48, 10,57,50,48,48,10,57,50,48,48,10,68,65,48,48,10, 66,54,48,48,10,66,54,48,48,10,68,65,48,48,10,48, 50,48,48,10,48,50,48,48,10,48,50,48,48,10,48,50, 48,48,10,48,70,56,48,10,48,56,56,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,51,51,48, 10,69,78,67,79,68,73,78,71,32,52,57,49,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,49,56,48,48,10,49,56,48, 48,10,51,69,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,54,48,48,10,51,67,48,48,10,51,48,48,48,10, 49,56,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,51,51,49,10,69,78,67,79, 68,73,78,71,32,52,57,49,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,51,48,48,48,10,51,48,48,48,10,55,67,48, 48,10,67,54,48,48,10,67,54,48,48,10,67,67,48,48, 10,55,56,48,48,10,54,48,48,48,10,51,48,48,48,10, 51,67,56,48,10,54,54,67,48,10,67,51,52,48,10,67, 51,48,48,10,67,51,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,51,51,50,10,69,78,67,79,68,73,78,71,32, 52,57,49,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,55,67,48,48,10,67,54,48, 48,10,67,54,48,48,10,67,67,48,48,10,55,56,48,48, 10,54,48,48,48,10,51,48,48,48,10,51,67,48,48,10, 54,54,48,48,10,67,51,52,48,10,67,51,67,48,10,67, 51,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,51,51, 51,10,69,78,67,79,68,73,78,71,32,52,57,49,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,49,56,48,48,10,49,56, 48,48,10,51,69,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,54,48,48,10,51,67,48,48,10,51,48,48,48, 10,49,56,48,48,10,49,69,48,48,10,51,51,48,48,10, 55,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,51,51,52,10,69,78,67, 79,68,73,78,71,32,52,57,49,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,55,67, 48,48,10,67,54,48,48,10,67,54,48,48,10,67,67,48, 48,10,55,56,48,48,10,54,48,48,48,10,51,48,48,48, 10,51,67,48,48,10,54,55,56,48,10,67,50,52,48,10, 67,51,52,48,10,67,51,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,51,51,53,10,69,78,67,79,68,73,78,71, 32,52,57,49,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,55,67,48,48,10,67,55, 56,48,10,67,54,67,48,10,67,67,67,48,10,55,56,48, 48,10,54,48,48,48,10,51,48,48,48,10,51,67,48,48, 10,54,54,48,48,10,67,51,48,48,10,67,51,48,48,10, 67,51,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,51, 51,54,10,69,78,67,79,68,73,78,71,32,52,57,49,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,49,56,48,48,10,49, 56,48,48,10,51,69,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,54,48,48,10,51,67,48,48,10,51,48,48, 48,10,49,56,48,48,10,49,69,48,48,10,51,51,56,48, 10,54,49,56,48,10,54,48,48,48,10,54,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,51,51,55,10,69,78, 67,79,68,73,78,71,32,52,57,49,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,51,48,48,48,10,51,48,48,48,10,55, 67,48,48,10,67,54,48,48,10,67,54,48,48,10,67,67, 48,48,10,55,56,48,48,10,54,48,48,48,10,51,48,48, 48,10,51,67,48,48,10,69,54,48,48,10,67,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,70,67,48,10, 48,56,52,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,51,51,56,10,69,78,67,79,68,73,78, 71,32,52,57,50,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,67,48,48,10,51,54,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,51,54,48,48,10,49,67,48,48,10,51,54,48, 48,10,54,51,48,48,10,67,49,56,48,10,67,49,56,48, 10,67,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 51,51,57,10,69,78,67,79,68,73,78,71,32,52,57,50, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,67,48,48,10,51,54,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,51,54, 48,48,10,49,67,48,48,10,51,54,67,48,10,54,51,52, 48,10,67,49,56,48,10,67,49,56,48,10,67,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,51,51,65,10,69, 78,67,79,68,73,78,71,32,52,57,50,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,67,48,48,10, 51,54,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,51,54,48,48,10,49,67, 48,48,10,51,54,48,48,10,54,51,48,48,10,67,49,56, 48,10,67,49,67,48,10,67,49,67,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,51,51,66,10,69,78,67,79,68,73, 78,71,32,52,57,50,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,67,48,48,10,51,54,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,51,54,48,48,10,49,67,48,48,10,55,54, 48,48,10,54,51,48,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,51,51,67,10,69,78,67,79,68,73,78,71,32,52,57, 50,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,67,48,48,10,51,54,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,51, 54,48,48,10,49,67,48,48,10,51,54,48,48,10,54,51, 56,48,10,67,51,52,48,10,67,50,52,48,10,67,51,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,51,51,68,10, 69,78,67,79,68,73,78,71,32,52,57,50,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,67,48,48, 10,51,54,48,48,10,54,51,48,48,10,54,51,56,48,10, 54,51,67,48,10,54,51,52,48,10,51,54,48,48,10,49, 67,48,48,10,51,54,48,48,10,54,51,48,48,10,67,49, 56,48,10,67,49,56,48,10,67,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,51,51,69,10,69,78,67,79,68, 73,78,71,32,52,57,50,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,67,48,48,10,51,54,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,51,54,48,48,10,49,67,48,48,10,51, 55,48,48,10,54,51,48,48,10,67,48,48,48,10,67,48, 48,48,10,67,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,51,51,70,10,69,78,67,79,68,73,78,71,32,52, 57,50,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,56,48,48,10,54,67,48,48,10,67,54,48,48, 10,67,54,48,48,10,67,54,48,48,10,67,54,48,48,10, 54,67,48,48,10,51,56,48,48,10,69,67,48,48,10,67, 54,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,70,67,48,10,48,56,52,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,51,52,48, 10,69,78,67,79,68,73,78,71,32,52,57,50,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,54,48, 48,10,49,66,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,55,70,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,70,48,48,10,51,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,51,52,49,10,69,78,67,79, 68,73,78,71,32,52,57,50,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,54,48,48,10,49,66,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,55,70,56,48,10,54,51,67,48,10,54,51,52,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 70,48,48,10,51,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,51,52,50,10,69,78,67,79,68,73,78,71,32, 52,57,51,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,69,48,48,10,54,51,48,48,10,55,70,48, 48,10,54,51,48,48,10,54,51,48,48,10,51,70,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,54,48,48,10, 48,67,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,51,52, 51,10,69,78,67,79,68,73,78,71,32,52,57,51,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,69, 48,48,10,54,51,48,48,10,55,70,48,48,10,54,51,48, 48,10,54,51,48,48,10,51,70,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,54,48,48,10,48,67,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,51,52,52,10,69,78,67, 79,68,73,78,71,32,52,57,51,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,69,48,48,10,54,51, 48,48,10,55,70,48,48,10,54,51,48,48,10,54,51,48, 48,10,51,70,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,54,48,48,10,48,69,48,48,10,49,57,48,48,10, 49,57,48,48,10,48,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,51,52,53,10,69,78,67,79,68,73,78,71, 32,52,57,51,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,69,48,48,10,49,66, 48,48,10,54,51,48,48,10,54,51,48,48,10,55,70,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,70,48,48,10, 51,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,51, 52,54,10,69,78,67,79,68,73,78,71,32,52,57,51,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 69,48,48,10,54,51,48,48,10,55,70,48,48,10,54,51, 48,48,10,54,51,48,48,10,51,69,48,48,10,49,56,48, 48,10,49,56,48,48,10,51,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,51,52,56,10,69,78, 67,79,68,73,78,71,32,52,57,51,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,51,48,48,48,10,54,48,48, 48,10,70,56,48,48,10,67,67,48,48,10,67,68,56,48, 10,55,70,56,48,10,51,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,51,52,57,10,69,78,67,79,68,73,78, 71,32,52,57,51,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,51,48,48,48,10,54,48,48,48,10,70,56, 48,48,10,67,67,48,48,10,67,68,56,48,10,55,70,56, 48,10,51,70,48,48,10,48,67,48,48,10,49,56,48,48, 10,51,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 51,52,65,10,69,78,67,79,68,73,78,71,32,52,57,51, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,51,48, 48,48,10,54,51,48,48,10,70,57,56,48,10,67,68,56, 48,10,67,68,56,48,10,55,70,48,48,10,51,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,51,52,66,10,69, 78,67,79,68,73,78,71,32,52,57,51,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,51,48,48,48,10,54, 48,48,48,10,70,56,48,48,10,67,67,48,48,10,67,68, 56,48,10,55,70,56,48,10,51,70,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,51,52,67,10,69,78,67,79,68,73, 78,71,32,52,57,52,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,51,48,48,48,10,54,48,48,48,10,70, 56,48,48,10,67,67,48,48,10,67,68,56,48,10,55,70, 56,48,10,51,70,48,48,10,48,67,56,48,10,48,67,56, 48,10,48,55,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,51,52,68,10,69,78,67,79,68,73,78,71,32,52,57, 52,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,51,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,55, 67,48,48,10,54,54,48,48,10,54,55,56,48,10,51,55, 48,48,10,49,69,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,51,52,69,10, 69,78,67,79,68,73,78,71,32,52,57,52,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,67,48,48, 10,54,55,48,48,10,67,52,56,48,10,67,52,56,48,10, 67,51,48,48,10,67,48,48,48,10,70,56,48,48,10,67, 67,48,48,10,67,70,48,48,10,54,69,48,48,10,51,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,51,52,70,10,69,78,67,79,68, 73,78,71,32,52,57,52,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,51,48,48,48,10,54,48,48,48,10, 70,56,48,48,10,67,67,48,48,10,67,68,56,48,10,55, 70,56,48,10,51,70,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,51,70,48,48,10,50,49,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,51,53,48,10,69,78,67,79,68,73,78,71,32,52, 57,52,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,52,67,56,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,51,53,49, 10,69,78,67,79,68,73,78,71,32,52,57,52,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,70,70,48, 48,10,57,57,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,70,56,48,10, 49,57,56,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,51,53,50,10,69,78,67,79, 68,73,78,71,32,52,57,52,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,70,70,48,48,10,57,57,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 57,56,48,10,49,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,51,53,51,10,69,78,67,79,68,73,78,71,32, 52,57,52,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,52,67,56,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,55, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,51,53, 52,10,69,78,67,79,68,73,78,71,32,52,57,52,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 56,48,10,52,67,56,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,70,48,48,10, 48,67,56,48,10,48,67,56,48,10,48,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,51,53,53,10,69,78,67, 79,68,73,78,71,32,52,57,52,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,52,67, 56,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,69,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,51,53,54,10,69,78,67,79,68,73,78,71, 32,52,57,53,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,70,56,48,10,52,67,56,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,49,56,48,48, 10,49,56,48,48,10,51,48,48,48,10,51,48,48,48,10, 54,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,51, 53,55,10,69,78,67,79,68,73,78,71,32,52,57,53,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,52,67,56,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 51,70,48,48,10,50,49,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,51,53,56,10,69,78, 67,79,68,73,78,71,32,52,57,53,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,52,49,48,48,10,55,70,48,48,10,48, 56,48,48,10,51,69,48,48,10,54,51,48,48,10,57,52, 56,48,10,57,52,56,48,10,57,52,56,48,10,57,52,56, 48,10,54,51,56,48,10,48,48,56,48,10,48,48,56,48, 10,48,48,56,48,10,48,48,67,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,51,53,57,10,69,78,67,79,68,73,78, 71,32,52,57,53,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 52,50,48,48,10,55,69,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,51,48,48,48,10,54,48,48,48,10,67,51,48, 48,10,67,49,56,48,10,69,49,56,48,10,55,70,56,48, 10,51,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 51,53,65,10,69,78,67,79,68,73,78,71,32,52,57,53, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,52,50,48,48,10, 55,69,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,51,48, 48,48,10,54,51,48,48,10,70,57,56,48,10,67,68,56, 48,10,67,68,56,48,10,55,70,48,48,10,51,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,51,54,49,10,69, 78,67,79,68,73,78,71,32,52,57,54,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,51,54,50,10,69,78,67,79,68,73, 78,71,32,52,57,54,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,54,48,48,10,51, 54,48,48,10,48,48,48,48,10,48,48,48,48,10,51,54, 48,48,10,51,54,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,51,54,51,10,69,78,67,79,68,73,78,71,32,52,57, 54,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,49,56,48,10,55,70,56,48,10, 54,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,51,54,52,10, 69,78,67,79,68,73,78,71,32,52,57,54,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,49,56,48,10,55,70,56,48,10,54,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,49, 56,48,10,55,70,56,48,10,54,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,51,54,53,10,69,78,67,79,68, 73,78,71,32,52,57,54,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,49,56,48,10,55,70,56,48,10,54,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,51,54,54,10,69,78,67,79,68,73,78,71,32,52, 57,54,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,55,56,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,51,54,55, 10,69,78,67,79,68,73,78,71,32,52,57,54,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,51,54,56,10,69,78,67,79, 68,73,78,71,32,52,57,54,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,54,49,56,48,10,54,49,56,48, 10,48,67,48,48,10,48,67,48,48,10,54,49,56,48,10, 54,49,56,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,51,54,57,10,69,78,67,79,68,73,78,71,32, 52,57,54,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,52,49,48,48,10,55,70,48,48,10,48,48,48, 48,10,51,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,55,69,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,51,69,48,48,10,48, 48,48,48,10,55,70,48,48,10,52,49,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,51,54, 65,10,69,78,67,79,68,73,78,71,32,52,57,55,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,52,49, 48,48,10,55,70,48,48,10,48,48,48,48,10,51,69,48, 48,10,54,51,48,48,10,54,51,48,48,10,55,69,48,48, 10,54,48,48,48,10,55,69,48,48,10,54,51,48,48,10, 54,51,48,48,10,51,69,48,48,10,48,48,48,48,10,55, 70,48,48,10,52,49,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,51,54,66,10,69,78,67, 79,68,73,78,71,32,52,57,55,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,52,49,48,48,10,55,70, 48,48,10,48,48,48,48,10,55,70,48,48,10,54,51,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,48,48,48,48,10,55,70,48,48,10,52, 49,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,51,54,67,10,69,78,67,79,68,73,78,71, 32,52,57,55,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,52,49,48,48,10,55,70,48,48,10,48,48, 48,48,10,51,69,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,51,69,48,48,10, 48,48,48,48,10,55,70,48,48,10,52,49,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,51, 54,68,10,69,78,67,79,68,73,78,71,32,52,57,55,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,52, 49,48,48,10,55,70,48,48,10,48,48,48,48,10,49,56, 48,48,10,49,56,48,48,10,51,70,48,48,10,55,51,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,55,48,48,10,51,69,48,48,10,48,48,48,48,10, 55,70,48,48,10,52,49,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,51,54,69,10,69,78, 67,79,68,73,78,71,32,52,57,55,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,52,49,48,48,10,55, 70,48,48,10,48,48,48,48,10,51,67,48,48,10,54,54, 48,48,10,48,54,48,48,10,48,67,48,48,10,48,67,48, 48,10,49,56,48,48,10,49,69,48,48,10,51,51,48,48, 10,51,69,48,48,10,48,48,48,48,10,55,70,48,48,10, 52,49,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,51,54,70,10,69,78,67,79,68,73,78, 71,32,52,57,55,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,52,49,48,48,10,55,70,48,48,10,48, 48,48,48,10,51,67,48,48,10,54,54,48,48,10,48,54, 48,48,10,48,67,48,48,10,48,67,48,48,10,49,56,48, 48,10,49,56,48,48,10,51,51,48,48,10,51,70,48,48, 10,48,48,48,48,10,55,70,48,48,10,52,49,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 51,55,48,10,69,78,67,79,68,73,78,71,32,52,57,55, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 52,48,56,48,10,55,70,56,48,10,48,48,48,48,10,55, 70,56,48,10,52,67,56,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,55,70,56,48,10,52,48,56,48,10,48,48,48,48, 10,55,70,56,48,10,52,48,56,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,51,55,49,10,69, 78,67,79,68,73,78,71,32,52,57,55,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,52,49,48,48,10, 55,70,48,48,10,48,48,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,55,70,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,50,48, 48,10,51,67,48,48,10,48,48,48,48,10,55,70,48,48, 10,52,49,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,51,55,50,10,69,78,67,79,68,73, 78,71,32,52,57,55,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,52,48,56,48,10,55,70,56,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,55,70,56,48,10,52,48,56,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,51,55,51,10,69,78,67,79,68,73,78,71,32,52,57, 55,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,52,48,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,70,56,48,10,52,67,56,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,56,48,10,52,48,56,48,10,48,48,48, 48,10,55,70,56,48,10,52,48,56,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,51,55,52,10, 69,78,67,79,68,73,78,71,32,52,57,56,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,52,48,56,48, 10,55,70,56,48,10,48,48,48,48,10,54,55,48,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,51,57,56,48,10,48,48,48,48,10,55,70,56, 48,10,52,48,56,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,51,55,53,10,69,78,67,79,68, 73,78,71,32,52,57,56,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,52,48,56,48,10,55,70,56,48, 10,48,48,48,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,51,70,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,48,48,48,10,55,70,56,48,10,52,48,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,51,55,54,10,69,78,67,79,68,73,78,71,32,52, 57,56,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,52,48,56,48,10,55,70,56,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,51,51,48,48,10, 51,51,48,48,10,49,70,48,48,10,48,51,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,48, 48,48,10,55,70,56,48,10,52,48,56,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,51,55,55, 10,69,78,67,79,68,73,78,71,32,52,57,56,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,52,48,56, 48,10,55,70,56,48,10,48,48,48,48,10,55,70,56,48, 10,52,67,56,48,10,48,67,48,48,10,48,67,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,55, 70,56,48,10,52,48,56,48,10,48,48,48,48,10,55,70, 56,48,10,52,48,56,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,51,55,56,10,69,78,67,79, 68,73,78,71,32,52,57,56,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,52,48,56,48,10,55,70,56, 48,10,48,48,48,48,10,49,70,48,48,10,51,67,56,48, 10,54,51,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,49,56,48,10,55,70,56,48,10,51, 70,48,48,10,48,48,48,48,10,55,70,56,48,10,52,48, 56,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,51,55,57,10,69,78,67,79,68,73,78,71,32, 52,57,56,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,52,48,56,48,10,55,70,56,48,10,48,48,48, 48,10,55,70,56,48,10,53,50,56,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,48, 48,48,48,10,55,70,56,48,10,52,48,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,51,55, 65,10,69,78,67,79,68,73,78,71,32,52,57,56,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,52,49, 48,48,10,55,70,48,48,10,48,48,48,48,10,55,67,48, 48,10,54,54,48,48,10,48,54,48,48,10,48,70,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,48,48,48,10,55, 70,48,48,10,52,49,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,51,55,66,10,69,78,67, 79,68,73,78,71,32,52,57,56,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,52,48,56,48,10,55,70, 56,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,51,51,48,48,10,51,51,48,48,10,51,69,48,48, 10,51,48,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,48,48,48,48,10,55,70,56,48,10,52, 48,56,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,51,55,67,10,69,78,67,79,68,73,78,71, 32,52,57,56,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,56,48,56,48,10,70,70,56,48,10,48,48, 48,48,10,54,51,48,48,10,57,52,56,48,10,57,52,56, 48,10,57,52,56,48,10,70,70,48,48,10,56,52,48,48, 10,56,52,48,48,10,56,52,48,48,10,52,50,48,48,10, 48,48,48,48,10,70,70,56,48,10,56,48,56,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,54, 56,48,10,69,78,67,79,68,73,78,71,32,53,55,54,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,70,70,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,56,49,10,69,78, 67,79,68,73,78,71,32,53,55,54,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,70,70,67,48,10,48,48,56,48,10,48,48,56, 48,10,48,48,56,48,10,48,48,56,48,10,48,48,56,48, 10,48,48,56,48,10,48,48,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,54,56,50,10,69,78,67,79,68,73,78, 71,32,53,55,54,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,70,70, 67,48,10,48,50,56,48,10,48,50,56,48,10,48,50,56, 48,10,48,50,56,48,10,48,50,56,48,10,48,50,56,48, 10,48,50,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 54,56,51,10,69,78,67,79,68,73,78,71,32,53,55,54, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,70,70,67,48,10,48,65, 56,48,10,48,65,56,48,10,48,65,56,48,10,48,65,56, 48,10,48,65,56,48,10,48,65,56,48,10,48,65,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,54,56,52,10,69, 78,67,79,68,73,78,71,32,53,55,54,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,70,70,67,48,10,50,65,56,48,10,50,65, 56,48,10,50,65,56,48,10,50,65,56,48,10,50,65,56, 48,10,50,65,56,48,10,50,65,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,56,53,10,69,78,67,79,68,73, 78,71,32,53,55,54,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 70,67,48,10,65,65,56,48,10,65,65,56,48,10,65,65, 56,48,10,65,65,56,48,10,65,65,56,48,10,65,65,56, 48,10,65,65,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,54,56,54,10,69,78,67,79,68,73,78,71,32,53,55, 54,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,56,48,10,48,48,56,48, 10,48,48,56,48,10,48,48,56,48,10,48,48,56,48,10, 48,48,56,48,10,48,48,56,48,10,70,70,67,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,54,56,55,10, 69,78,67,79,68,73,78,71,32,53,55,54,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,50,56,48,10,48,50,56,48,10,48,50,56,48, 10,48,50,56,48,10,48,50,56,48,10,48,50,56,48,10, 48,50,56,48,10,70,70,67,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,54,56,56,10,69,78,67,79,68, 73,78,71,32,53,55,54,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,65,56, 48,10,48,65,56,48,10,48,65,56,48,10,48,65,56,48, 10,48,65,56,48,10,48,65,56,48,10,48,65,56,48,10, 70,70,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,56,57,10,69,78,67,79,68,73,78,71,32,53, 55,54,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,50,65,56,48,10,50,65,56, 48,10,50,65,56,48,10,50,65,56,48,10,50,65,56,48, 10,50,65,56,48,10,50,65,56,48,10,70,70,67,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,54,56,65, 10,69,78,67,79,68,73,78,71,32,53,55,55,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,65,65,56,48,10,65,65,56,48,10,65,65,56, 48,10,65,65,56,48,10,65,65,56,48,10,65,65,56,48, 10,65,65,56,48,10,70,70,67,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,54,56,66,10,69,78,67,79, 68,73,78,71,32,53,55,55,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 52,48,10,48,48,52,48,10,48,48,52,48,10,48,48,52, 48,10,48,48,52,48,10,48,48,52,48,10,48,48,52,48, 10,70,70,67,48,10,48,48,56,48,10,48,48,56,48,10, 48,48,56,48,10,48,48,56,48,10,48,48,56,48,10,48, 48,56,48,10,48,48,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,54,56,67,10,69,78,67,79,68,73,78,71,32, 53,55,55,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,49,52,48,10,48,49, 52,48,10,48,49,52,48,10,48,49,52,48,10,48,49,52, 48,10,48,49,52,48,10,48,49,52,48,10,70,70,67,48, 10,48,50,56,48,10,48,50,56,48,10,48,50,56,48,10, 48,50,56,48,10,48,50,56,48,10,48,50,56,48,10,48, 50,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,56, 68,10,69,78,67,79,68,73,78,71,32,53,55,55,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,53,52,48,10,48,53,52,48,10,48,53, 52,48,10,48,53,52,48,10,48,53,52,48,10,48,53,52, 48,10,48,53,52,48,10,70,70,67,48,10,48,65,56,48, 10,48,65,56,48,10,48,65,56,48,10,48,65,56,48,10, 48,65,56,48,10,48,65,56,48,10,48,65,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,54,56,69,10,69,78,67, 79,68,73,78,71,32,53,55,55,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,49, 53,52,48,10,49,53,52,48,10,49,53,52,48,10,49,53, 52,48,10,49,53,52,48,10,49,53,52,48,10,49,53,52, 48,10,70,70,67,48,10,50,65,56,48,10,50,65,56,48, 10,50,65,56,48,10,50,65,56,48,10,50,65,56,48,10, 50,65,56,48,10,50,65,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,54,56,70,10,69,78,67,79,68,73,78,71, 32,53,55,55,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,53,53,52,48,10,53, 53,52,48,10,53,53,52,48,10,53,53,52,48,10,53,53, 52,48,10,53,53,52,48,10,53,53,52,48,10,70,70,67, 48,10,65,65,56,48,10,65,65,56,48,10,65,65,56,48, 10,65,65,56,48,10,65,65,56,48,10,65,65,56,48,10, 65,65,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,54, 57,48,10,69,78,67,79,68,73,78,71,32,53,55,55,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,56,48,10,70,70,67,48,10,48,48,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,57,49,10,69,78, 67,79,68,73,78,71,32,53,55,55,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,50, 56,48,10,70,70,67,48,10,48,50,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,54,57,50,10,69,78,67,79,68,73,78, 71,32,53,55,55,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,65,56,48,10,70,70, 67,48,10,48,65,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 54,57,51,10,69,78,67,79,68,73,78,71,32,53,55,55, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,50,65,56,48,10,70,70,67,48,10,50,65, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,54,57,52,10,69, 78,67,79,68,73,78,71,32,53,55,56,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,65, 65,56,48,10,70,70,67,48,10,65,65,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,57,53,10,69,78,67,79,68,73, 78,71,32,53,55,56,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,50,48,56,48,10,50,48,56,48,10,49,49,48,48,10, 49,49,48,48,10,48,65,48,48,10,48,65,48,48,10,70, 70,67,48,10,48,65,48,48,10,48,65,48,48,10,49,49, 48,48,10,49,49,48,48,10,50,48,56,48,10,50,48,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,54,57,54,10,69,78,67,79,68,73,78,71,32,53,55, 56,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,52,48,48, 10,48,65,48,48,10,49,49,48,48,10,50,48,56,48,10, 52,48,52,48,10,52,48,52,48,10,70,70,67,48,10,52, 48,52,48,10,52,48,52,48,10,50,48,56,48,10,49,49, 48,48,10,48,65,48,48,10,48,52,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,54,57,55,10, 69,78,67,79,68,73,78,71,32,53,55,56,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,70,70,67,48,10,50,48,48,48,10,50, 48,48,48,10,50,70,48,48,10,50,49,48,48,10,50,49, 48,48,10,51,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,54,57,56,10,69,78,67,79,68, 73,78,71,32,53,55,56,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 70,70,67,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,48,67,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,57,57,10,69,78,67,79,68,73,78,71,32,53, 55,56,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,49,53,48,48,10,51,70,56, 48,10,49,53,48,48,10,51,70,56,48,10,49,53,48,48, 10,51,70,56,48,10,49,53,48,48,10,70,70,67,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,54,57,65, 10,69,78,67,79,68,73,78,71,32,53,55,56,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,70,70,67,48,10,48,48,48,48,10, 51,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,54,57,66,10,69,78,67,79, 68,73,78,71,32,53,55,56,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,52,48,48, 48,10,50,48,48,48,10,49,48,48,48,10,48,56,48,48, 10,48,55,67,48,10,48,56,48,48,10,49,48,48,48,10, 50,48,48,48,10,52,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,54,57,67,10,69,78,67,79,68,73,78,71,32, 53,55,56,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,56,48,10,48,49,48, 48,10,48,50,48,48,10,48,52,48,48,10,70,56,48,48, 10,48,52,48,48,10,48,50,48,48,10,48,49,48,48,10, 48,48,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,65, 48,10,69,78,67,79,68,73,78,71,32,53,55,57,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,51, 48,48,10,54,54,48,48,10,54,67,48,48,10,55,57,48, 48,10,55,51,48,48,10,54,54,48,48,10,54,67,48,48, 10,55,56,48,48,10,55,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,54,65,49,10,69,78,67, 79,68,73,78,71,32,53,55,57,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 56,48,48,10,49,67,48,48,10,54,66,48,48,10,54,54, 48,48,10,54,67,48,48,10,55,57,48,48,10,55,51,48, 48,10,54,54,48,48,10,54,67,48,48,10,55,56,48,48, 10,55,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,54,65,50,10,69,78,67,79,68,73,78,71, 32,53,55,57,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,48,48,48,10,51,56,48,48,10,51,67, 48,48,10,51,54,48,48,10,51,51,48,48,10,51,49,56, 48,10,51,49,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,54, 65,51,10,69,78,67,79,68,73,78,71,32,53,55,57,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 48,48,48,10,55,48,48,48,10,55,56,48,48,10,54,67, 48,48,10,54,54,48,48,10,54,51,48,48,10,54,57,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,65,52,10,69,78, 67,79,68,73,78,71,32,53,55,57,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,48,48,48,10,55, 48,48,48,10,55,56,48,48,10,54,67,48,48,10,54,54, 48,48,10,54,51,48,48,10,54,49,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,54,65,53,10,69,78,67,79,68,73,78, 71,32,53,55,57,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,48,48,48,10,55,48,48,48,10,55, 56,48,48,10,54,67,48,48,10,54,54,48,48,10,55,51, 48,48,10,55,57,56,48,10,55,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 54,65,54,10,69,78,67,79,68,73,78,71,32,53,55,57, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,55, 69,48,48,10,55,70,48,48,10,54,51,56,48,10,54,49, 56,48,10,54,51,56,48,10,55,70,48,48,10,55,69,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,54,65,55,10,69, 78,67,79,68,73,78,71,32,53,55,57,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,55,69,48,48,10,55,70,48,48,10,54, 51,56,48,10,54,57,56,48,10,54,68,56,48,10,54,57, 56,48,10,54,51,56,48,10,55,70,48,48,10,55,69,48, 48,10,54,48,48,48,10,54,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,65,56,10,69,78,67,79,68,73, 78,71,32,53,56,48,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,48,48,48,10,55,56,48,48,10, 54,67,48,48,10,54,54,48,48,10,55,50,48,48,10,55, 56,48,48,10,54,67,48,48,10,54,54,48,48,10,54,50, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,54,65,57,10,69,78,67,79,68,73,78,71,32,53,56, 48,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,49,56,48,10,55,51,48,48,10,55,69,48,48,10, 54,67,48,48,10,54,49,56,48,10,55,51,48,48,10,55, 69,48,48,10,54,67,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,54,65,65,10, 69,78,67,79,68,73,78,71,32,53,56,48,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,49,56,48, 10,55,51,48,48,10,55,69,48,48,10,54,67,48,48,10, 54,48,48,48,10,55,56,48,48,10,55,69,48,48,10,54, 54,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,54,65,66,10,69,78,67,79,68, 73,78,71,32,53,56,48,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,50,48,48,48,10,51,48,48,48, 10,51,56,48,48,10,51,67,48,48,10,51,54,48,48,10, 51,51,48,48,10,51,57,48,48,10,51,67,48,48,10,51, 54,48,48,10,51,51,48,48,10,51,49,48,48,10,51,48, 48,48,10,51,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,65,67,10,69,78,67,79,68,73,78,71,32,53, 56,48,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,50,67,48,48,10,51,67,48,48, 10,49,67,48,48,10,48,69,48,48,10,50,70,48,48,10, 51,68,48,48,10,49,67,48,48,10,48,69,48,48,10,48, 70,48,48,10,48,68,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,54,65,68, 10,69,78,67,79,68,73,78,71,32,53,56,48,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,67,48,48, 10,49,69,48,48,10,49,66,48,48,10,49,57,48,48,10, 49,67,48,48,10,49,69,48,48,10,49,66,48,48,10,49, 57,48,48,10,49,56,48,48,10,49,56,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,54,65,69,10,69,78,67,79, 68,73,78,71,32,53,56,48,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,49,67,48,48,10,51,67,48,48, 10,54,67,48,48,10,52,67,48,48,10,49,67,48,48,10, 51,67,48,48,10,54,67,48,48,10,52,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,54,65,70,10,69,78,67,79,68,73,78,71,32, 53,56,48,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,68,48,48,10,48,70,48, 48,10,48,69,48,48,10,49,67,48,48,10,51,68,48,48, 10,50,70,48,48,10,48,69,48,48,10,49,67,48,48,10, 51,67,48,48,10,50,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,66, 48,10,69,78,67,79,68,73,78,71,32,53,56,48,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,68,48,48,10,48,70,48,48,10,48,69,48, 48,10,49,67,48,48,10,51,67,48,48,10,50,67,48,48, 10,48,67,48,48,10,49,67,48,48,10,51,67,48,48,10, 50,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,54,66,49,10,69,78,67, 79,68,73,78,71,32,53,56,48,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,56,48,48,10,51,67, 48,48,10,51,54,48,48,10,51,51,48,48,10,51,49,56, 48,10,51,51,48,48,10,51,54,48,48,10,51,67,48,48, 10,51,54,48,48,10,51,51,48,48,10,51,49,56,48,10, 51,48,56,48,10,51,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,54,66,50,10,69,78,67,79,68,73,78,71, 32,53,56,49,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,49, 48,48,10,48,51,48,48,10,48,54,48,48,10,48,67,48, 48,10,49,56,48,48,10,51,48,48,48,10,49,56,48,48, 10,48,67,48,48,10,48,54,48,48,10,48,51,48,48,10, 48,49,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,54, 66,51,10,69,78,67,79,68,73,78,71,32,53,56,49,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,55,48,48,48,10,55,56,48,48,10,54,67,48,48, 10,54,54,48,48,10,54,51,48,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,66,52,10,69,78, 67,79,68,73,78,71,32,53,56,49,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,51,48,48,10,54, 54,48,48,10,54,67,48,48,10,55,56,48,48,10,55,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,54,66,53,10,69,78,67,79,68,73,78, 71,32,53,56,49,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,56,48,48,10, 49,67,48,48,10,54,66,48,48,10,54,54,48,48,10,54, 67,48,48,10,55,56,48,48,10,55,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 54,66,54,10,69,78,67,79,68,73,78,71,32,53,56,49, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,51,48,48,10,54,54,48,48,10,54,67,48,48,10,70, 56,48,48,10,70,48,48,48,10,70,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,54,66,55,10,69, 78,67,79,68,73,78,71,32,53,56,49,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,51,48,48,10, 54,51,48,48,10,51,54,48,48,10,51,54,48,48,10,51, 54,48,48,10,49,67,48,48,10,49,67,48,48,10,51,54, 48,48,10,51,54,48,48,10,51,54,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,66,56,10,69,78,67,79,68,73, 78,71,32,53,56,49,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,51,48,48,10,54,51,48,48,10, 51,54,48,48,10,55,55,48,48,10,70,55,56,48,10,68, 68,56,48,10,68,68,56,48,10,70,55,56,48,10,55,55, 48,48,10,51,54,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,54,66,57,10,69,78,67,79,68,73,78,71,32,53,56, 49,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,56,48,48,10,55,69,48,48,10,54,55,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,55,48,48,10,55, 69,48,48,10,55,56,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,54,66,65,10, 69,78,67,79,68,73,78,71,32,53,56,49,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,51,49,56,48,10, 51,57,56,48,10,51,68,56,48,10,51,55,56,48,10,51, 51,56,48,10,51,49,56,48,10,51,49,56,48,10,51,49, 56,48,10,51,49,56,48,10,51,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,54,66,66,10,69,78,67,79,68, 73,78,71,32,53,56,49,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,51,57,56,48,10,51,68,56,48,10, 51,55,56,48,10,51,66,56,48,10,51,68,56,48,10,51, 55,56,48,10,51,51,56,48,10,51,49,56,48,10,51,49, 56,48,10,51,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,66,67,10,69,78,67,79,68,73,78,71,32,53, 56,50,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,52,67,56,48,10,54,68,56,48, 10,51,70,48,48,10,49,69,48,48,10,48,67,48,48,10, 49,69,48,48,10,51,70,48,48,10,54,68,56,48,10,52, 67,56,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,54,66,68, 10,69,78,67,79,68,73,78,71,32,53,56,50,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,49,69,48,48,10,49,69,48,48,10,49,69,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,54,66,69,10,69,78,67,79, 68,73,78,71,32,53,56,50,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,52,67,48, 48,10,54,67,48,48,10,51,67,48,48,10,49,67,48,48, 10,48,67,48,48,10,48,69,48,48,10,48,70,48,48,10, 48,68,56,48,10,48,67,56,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,54,66,70,10,69,78,67,79,68,73,78,71,32, 53,56,50,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,69,48,48,10,48,70,48,48, 10,48,68,56,48,10,48,67,56,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,67, 48,10,69,78,67,79,68,73,78,71,32,53,56,50,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,52,67,48,48,10,54,67,48,48,10,51,67,48, 48,10,49,69,48,48,10,49,69,48,48,10,49,69,48,48, 10,48,70,48,48,10,48,68,56,48,10,48,67,56,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,54,67,49,10,69,78,67, 79,68,73,78,71,32,53,56,50,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,54,67,50,10,69,78,67,79,68,73,78,71, 32,53,56,50,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,49,69,48, 48,10,49,69,48,48,10,49,69,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,54, 67,51,10,69,78,67,79,68,73,78,71,32,53,56,50,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,56,48,48,10,49,56, 48,48,10,51,48,48,48,10,54,52,48,48,10,51,54,48, 48,10,49,66,48,48,10,48,57,56,48,10,48,51,48,48, 10,48,54,48,48,10,48,52,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,67,52,10,69,78, 67,79,68,73,78,71,32,53,56,50,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,49,69,48,48,10,51,70, 48,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,51,70,48,48,10,49,69,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,54,67,53,10,69,78,67,79,68,73,78, 71,32,53,56,50,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,56,48,10,48, 68,56,48,10,48,70,48,48,10,48,69,48,48,10,48,67, 48,48,10,49,67,48,48,10,51,67,48,48,10,54,67,48, 48,10,52,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 54,67,54,10,69,78,67,79,68,73,78,71,32,53,56,51, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,49,67,48,48,10,51,67,48,48,10,54,67, 48,48,10,52,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,54,67,55,10,69, 78,67,79,68,73,78,71,32,53,56,51,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,56,48,48,10, 48,67,48,48,10,48,69,48,48,10,48,70,48,48,10,48, 68,56,48,10,48,67,56,48,10,48,67,48,48,10,52,67, 48,48,10,54,67,48,48,10,51,67,48,48,10,49,67,48, 48,10,48,67,48,48,10,48,52,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,67,56,10,69,78,67,79,68,73, 78,71,32,53,56,51,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,52,48,56,48,10,54,49,56,48,10, 55,51,48,48,10,55,69,48,48,10,54,67,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,67, 48,48,10,55,69,48,48,10,55,51,48,48,10,54,49,56, 48,10,52,48,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,54,67,57,10,69,78,67,79,68,73,78,71,32,53,56, 51,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,68,56,48,10,54,68,56,48,10,51,70,48,48,10, 49,69,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,54,67,65,10, 69,78,67,79,68,73,78,71,32,53,56,51,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,54,48,48, 10,48,67,48,48,10,49,56,48,48,10,51,48,48,48,10, 49,56,48,48,10,48,67,48,48,10,48,54,48,48,10,48, 67,48,48,10,49,56,48,48,10,51,48,48,48,10,49,56, 48,48,10,48,67,48,48,10,48,54,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,54,67,66,10,69,78,67,79,68, 73,78,71,32,53,56,51,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,56,48,10,54,49,56,48,10,54,51,56,48,10, 54,55,56,48,10,54,68,56,48,10,55,57,56,48,10,55, 49,56,48,10,54,49,56,48,10,52,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,67,67,10,69,78,67,79,68,73,78,71,32,53, 56,51,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,54,67,68, 10,69,78,67,79,68,73,78,71,32,53,56,51,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,49,69,48,48,10,49,69,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,54,67,69,10,69,78,67,79, 68,73,78,71,32,53,56,51,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,52,67,56,48,10,54,68,56,48, 10,51,70,48,48,10,49,69,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,54,67,70,10,69,78,67,79,68,73,78,71,32, 53,56,51,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,49,69,48,48,10,51,70,48, 48,10,54,68,56,48,10,52,67,56,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,68, 48,10,69,78,67,79,68,73,78,71,32,53,56,52,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,49,67,48,48,10,51,67,48,48,10,54,67,48, 48,10,52,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,54,68,49,10,69,78,67, 79,68,73,78,71,32,53,56,52,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,49,67, 48,48,10,51,67,48,48,10,54,67,48,48,10,52,67,48, 48,10,48,67,48,48,10,49,69,48,48,10,49,69,48,48, 10,49,69,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,54,68,50,10,69,78,67,79,68,73,78,71, 32,53,56,52,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,56,48,48,10,55,69,48,48,10,54,55, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,55,48, 48,10,55,67,48,48,10,54,55,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,55,48,48,10,55,69,48,48,10, 55,56,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,54, 68,51,10,69,78,67,79,68,73,78,71,32,53,56,52,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,57,48,48,10,49,66, 48,48,10,49,69,48,48,10,49,67,48,48,10,49,57,48, 48,10,49,66,48,48,10,49,69,48,48,10,49,67,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,68,52,10,69,78, 67,79,68,73,78,71,32,53,56,52,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,56,48,48,10,55, 69,48,48,10,54,55,48,48,10,54,57,56,48,10,54,57, 56,48,10,54,55,48,48,10,55,67,48,48,10,54,55,48, 48,10,54,57,56,48,10,54,57,56,48,10,54,55,48,48, 10,55,69,48,48,10,55,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,54,68,53,10,69,78,67,79,68,73,78, 71,32,53,56,52,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,48,56,48,10,54,49,56,48,10,54, 51,48,48,10,54,54,48,48,10,54,67,48,48,10,55,56, 48,48,10,55,48,48,48,10,55,56,48,48,10,54,67,48, 48,10,54,54,48,48,10,54,51,48,48,10,54,49,56,48, 10,54,48,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 54,68,54,10,69,78,67,79,68,73,78,71,32,53,56,52, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 52,48,56,48,10,54,49,56,48,10,55,51,56,48,10,55, 70,56,48,10,54,68,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,54,68,55,10,69, 78,67,79,68,73,78,71,32,53,56,52,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,52,48,56,48,10, 54,49,56,48,10,55,51,56,48,10,55,70,56,48,10,54, 68,56,48,10,55,70,56,48,10,55,51,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,68,56,10,69,78,67,79,68,73, 78,71,32,53,56,52,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,55,70,56,48,10,51,70,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,54,68,57,10,69,78,67,79,68,73,78,71,32,53,56, 52,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,49,69,48,48,10,49,69,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,54,68,65,10, 69,78,67,79,68,73,78,71,32,53,56,53,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,56,48,48, 10,48,67,48,48,10,48,69,48,48,10,48,70,48,48,10, 48,68,56,48,10,48,67,56,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,54,68,66,10,69,78,67,79,68, 73,78,71,32,53,56,53,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,56,48,48,10,48,67,48,48, 10,48,69,48,48,10,48,70,48,48,10,48,68,56,48,10, 48,67,56,48,10,49,69,48,48,10,49,69,48,48,10,49, 69,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,68,67,10,69,78,67,79,68,73,78,71,32,53, 56,53,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,51,51,48,48,10,49,69,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,54,68,68, 10,69,78,67,79,68,73,78,71,32,53,56,53,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,52,48,56, 48,10,54,49,56,48,10,51,51,48,48,10,49,69,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 51,51,48,48,10,49,69,48,48,10,49,69,48,48,10,51, 51,48,48,10,54,49,56,48,10,52,48,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,54,68,69,10,69,78,67,79, 68,73,78,71,32,53,56,53,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,55,51,56,48, 10,55,70,56,48,10,54,68,56,48,10,55,70,56,48,10, 55,51,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,54,68,70,10,69,78,67,79,68,73,78,71,32, 53,56,53,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,69, 48,10,69,78,67,79,68,73,78,71,32,53,56,53,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,56,67, 52,48,10,68,69,67,48,10,55,70,56,48,10,50,68,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,54,69,49,10,69,78,67, 79,68,73,78,71,32,53,56,53,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,54,68,56,48,10,51,70,48, 48,10,49,69,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,70,48,48,10,54,68,56,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,54,69,50,10,69,78,67,79,68,73,78,71, 32,53,56,53,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,52,48,10,48,69,67,48,10,48,70, 56,48,10,48,68,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,50,67,48,48,10,55,67,48,48,10,68,67,48,48,10, 56,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,54, 69,51,10,69,78,67,79,68,73,78,71,32,53,56,53,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,70,48,48,10,54,68,56,48,10,54,68,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,69,52,10,69,78, 67,79,68,73,78,71,32,53,56,54,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,51,70, 48,48,10,55,70,56,48,10,54,68,56,48,10,55,70,56, 48,10,51,70,48,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,54,69,53,10,69,78,67,79,68,73,78, 71,32,53,56,54,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,52,48,56,48,10,54,49,56,48,10,55, 51,56,48,10,55,70,56,48,10,54,68,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,68,56, 48,10,55,70,56,48,10,55,51,56,48,10,54,49,56,48, 10,52,48,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 54,69,54,10,69,78,67,79,68,73,78,71,32,53,56,54, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,51,70,48,48,10,55,70,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,54,69,55,10,69, 78,67,79,68,73,78,71,32,53,56,54,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,69,56,10,69,78,67,79,68,73, 78,71,32,53,56,54,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,49,69,48,48,10, 51,70,48,48,10,54,68,56,48,10,52,67,56,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,52,67, 56,48,10,54,68,56,48,10,51,70,48,48,10,49,69,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,54,69,57,10,69,78,67,79,68,73,78,71,32,53,56, 54,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,55,56,48,10,49,70,56,48,10,51,57,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,57,56,48,10,49, 70,56,48,10,48,55,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,54,69,65,10, 69,78,67,79,68,73,78,71,32,53,56,54,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,48,48,48, 10,70,56,48,48,10,70,56,56,48,10,54,49,56,48,10, 54,51,56,48,10,54,55,56,48,10,54,68,56,48,10,55, 57,56,48,10,55,49,56,48,10,54,49,56,48,10,52,55, 67,48,10,48,55,67,48,10,48,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,54,69,66,10,69,78,67,79,68, 73,78,71,32,53,56,54,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,56,48,48,10, 49,67,48,48,10,48,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,69,67,10,69,78,67,79,68,73,78,71,32,53, 56,54,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,56,48,48, 10,49,67,48,48,10,48,56,48,48,10,48,48,48,48,10, 48,56,48,48,10,49,67,48,48,10,48,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,54,69,68, 10,69,78,67,79,68,73,78,71,32,53,56,54,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,67,48,48, 10,49,67,48,48,10,54,66,48,48,10,55,70,48,48,10, 54,66,48,48,10,49,67,48,48,10,49,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,54,69,69,10,69,78,67,79, 68,73,78,71,32,53,56,55,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,56,48,48,10,48,67,48, 48,10,48,69,48,48,10,48,70,48,48,10,48,68,56,48, 10,48,67,56,48,10,49,67,48,48,10,51,67,48,48,10, 54,67,48,48,10,52,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,54,69,70,10,69,78,67,79,68,73,78,71,32, 53,56,55,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,55,70,56,48,10,51,70,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,51,70,48,48,10, 55,70,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,70, 48,10,69,78,67,79,68,73,78,71,32,53,56,55,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,51,70,48,48,10,55,70,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,55,70,56,48,10, 51,70,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,68,48,48,10,69,78,67, 79,68,73,78,71,32,55,52,50,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,55,70,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,68,48,49,10,69,78,67,79,68,73,78,71, 32,55,52,50,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,70,56, 48,10,49,69,48,48,10,51,54,48,48,10,51,70,56,48, 10,54,54,48,48,10,54,54,48,48,10,54,54,48,48,10, 54,55,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,68, 48,50,10,69,78,67,79,68,73,78,71,32,55,52,50,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,66,48,48,10,52,68,56, 48,10,48,68,56,48,10,48,70,48,48,10,55,67,48,48, 10,54,67,48,48,10,54,67,56,48,10,51,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,68,48,51,10,69,78, 67,79,68,73,78,71,32,55,52,50,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,69,48,48,10,54,51,48,48,10,54,51,48, 48,10,70,70,67,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,55,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,68,48,52,10,69,78,67,79,68,73,78, 71,32,55,52,50,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,54,48,48, 48,10,54,48,48,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 68,48,53,10,69,78,67,79,68,73,78,71,32,55,52,50, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,69,48,48,10,54,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,51,48,48,10,55,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,68,48,54,10,69, 78,67,79,68,73,78,71,32,55,52,51,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,69,48,48,10,54,51,48,48,10,54,49, 56,48,10,70,57,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,51,48,48,10,55,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,68,48,55,10,69,78,67,79,68,73, 78,71,32,55,52,51,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,54,48,48,48,10,54,48,48,48,10,55,69, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,68,48,56,10,69,78,67,79,68,73,78,71,32,55,52, 51,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,70,48,48,10,54, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,70, 48,48,10,48,49,56,48,10,54,49,56,48,10,51,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,68,48,57,10, 69,78,67,79,68,73,78,71,32,55,52,51,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,70,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,68,48,65,10,69,78,67,79,68, 73,78,71,32,55,52,51,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,70,56,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,51,54,48,48,10,49,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,68,48,66,10,69,78,67,79,68,73,78,71,32,55, 52,51,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,51,48,48,10, 54,54,48,48,10,54,67,48,48,10,55,56,48,48,10,55, 67,48,48,10,54,54,48,48,10,54,51,48,48,10,54,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,68,48,67, 10,69,78,67,79,68,73,78,71,32,55,52,51,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,48,48,48,10,51,54,48,48,10,51,56,48,48,10,55, 48,48,48,10,51,48,48,48,10,51,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,68,48,68,10,69,78,67,79, 68,73,78,71,32,55,52,51,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,49,56,48,10,55,51,56,48,10,55,51,56,48,10, 55,70,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 49,56,48,10,54,49,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,68,48,69,10,69,78,67,79,68,73,78,71,32, 55,52,51,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,49,56,48, 10,54,51,56,48,10,54,55,56,48,10,54,68,56,48,10, 54,68,56,48,10,55,57,56,48,10,55,49,56,48,10,54, 49,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,68,48, 70,10,69,78,67,79,68,73,78,71,32,55,52,51,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,70,48,48,10,51,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,49,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,68,49,48,10,69,78,67, 79,68,73,78,71,32,55,52,52,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,54,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,54,49,56,48,10, 51,51,48,48,10,49,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,68,49,49,10,69,78,67,79,68,73,78,71, 32,55,52,52,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,69,48, 48,10,51,70,48,48,10,54,49,56,48,10,52,48,56,48, 10,52,48,56,48,10,54,49,56,48,10,51,70,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,68, 49,50,10,69,78,67,79,68,73,78,71,32,55,52,52,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,70,48, 48,10,54,49,56,48,10,52,48,56,48,10,52,48,56,48, 10,52,48,56,48,10,54,49,56,48,10,50,49,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,68,49,51,10,69,78, 67,79,68,73,78,71,32,55,52,52,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,53,69,48,48,10,51,70,48,48,10,55,49,56, 48,10,52,56,56,48,10,52,52,56,48,10,54,51,56,48, 10,51,70,48,48,10,49,69,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,68,49,52,10,69,78,67,79,68,73,78, 71,32,55,52,52,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,70, 48,48,10,54,68,56,48,10,48,68,56,48,10,48,68,56, 48,10,55,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,51,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 68,49,53,10,69,78,67,79,68,73,78,71,32,55,52,52, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 54,48,48,10,48,51,48,48,10,51,49,48,48,10,50,49, 48,48,10,51,51,48,48,10,49,69,48,48,10,51,51,48, 48,10,50,49,48,48,10,51,51,48,48,10,49,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,68,49,54,10,69, 78,67,79,68,73,78,71,32,55,52,52,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,54,49, 56,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,68,49,55,10,69,78,67,79,68,73, 78,71,32,55,52,52,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,68,49,56,10,69,78,67,79,68,73,78,71,32,55,52, 52,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,48,48,10,54, 49,56,48,10,54,48,56,48,10,54,49,56,48,10,55,70, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,68,49,57,10, 69,78,67,79,68,73,78,71,32,55,52,52,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,70,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,49,56,48,10,49,70,56,48,10,51,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,68,49,65,10,69,78,67,79,68, 73,78,71,32,55,52,53,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,49,56,48,10,54,49,56,48,10,51,49,56,48,10,49, 70,56,48,10,51,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,68,49,66,10,69,78,67,79,68,73,78,71,32,55, 52,53,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,68,49,67, 10,69,78,67,79,68,73,78,71,32,55,52,53,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,68,49,68,10,69,78,67,79, 68,73,78,71,32,55,52,53,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,49,48,48,10, 48,48,56,48,10,48,48,56,48,10,48,49,56,48,10,55, 70,48,48,10,55,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,68,49,69,10,69,78,67,79,68,73,78,71,32, 55,52,53,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,70,56,48,10,53,70,56,48, 10,52,49,48,48,10,48,48,56,48,10,48,48,56,48,10, 52,49,56,48,10,53,70,48,48,10,49,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,68,49, 70,10,69,78,67,79,68,73,78,71,32,55,52,53,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,55,70,48,48, 10,48,49,56,48,10,55,70,56,48,10,55,70,48,48,10, 48,49,56,48,10,55,70,56,48,10,55,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,68,50,48,10,69,78,67, 79,68,73,78,71,32,55,52,53,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,51,48,48,10,51,51,48,48,10,51,51,48,48, 10,51,51,48,48,10,49,69,48,48,10,49,69,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,68,50,49,10,69,78,67,79,68,73,78,71, 32,55,52,53,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,68,56,48, 10,54,68,56,48,10,55,70,56,48,10,55,51,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,68, 50,50,10,69,78,67,79,68,73,78,71,32,55,52,53,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,70,56,48,10,48,51,56, 48,10,48,55,48,48,10,48,69,48,48,10,49,67,48,48, 10,51,56,48,48,10,55,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,68,50,51,10,69,78, 67,79,68,73,78,71,32,55,52,53,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,70,56,48,10,48,49,56,48,10,48,51,48, 48,10,48,54,48,48,10,48,70,48,48,10,48,49,56,48, 10,50,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,68,50,52,10,69,78,67,79,68,73,78, 71,32,55,52,54,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,51,48,48,10,48,51, 48,48,10,48,54,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,49,56,48,48,10,51,48,48,48, 10,51,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 68,50,53,10,69,78,67,79,68,73,78,71,32,55,52,54, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,70,48,48,10,51,70,48,48,10,49,69,48, 48,10,52,67,56,48,10,54,68,56,48,10,51,51,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,68,50,54,10,69, 78,67,79,68,73,78,71,32,55,52,54,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,70,56,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,68,50,55,10,69,78,67,79,68,73, 78,71,32,55,52,54,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,49,69,48,48,10,49,69, 48,48,10,51,51,48,48,10,51,51,48,48,10,51,51,48, 48,10,51,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,68,50,56,10,69,78,67,79,68,73,78,71,32,55,52, 54,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,68,50,57,10, 69,78,67,79,68,73,78,71,32,55,52,54,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,48,48,10,54,49,56,48,10,54, 48,56,48,10,54,49,56,48,10,55,70,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,68,50,65,10,69,78,67,79,68, 73,78,71,32,55,52,54,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,51,70,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,68,50,66,10,69,78,67,79,68,73,78,71,32,55, 52,54,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,70,56,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,51, 49,56,48,10,51,49,56,48,10,51,49,56,48,10,54,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,68,50,67, 10,69,78,67,79,68,73,78,71,32,55,52,54,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,49,67,48,48,10,51,54,48, 48,10,54,51,48,48,10,54,51,48,48,10,55,70,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,68,50,68,10,69,78,67,79, 68,73,78,71,32,55,52,54,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,70,56,48,10,49,69,48,48,10,51,54,48, 48,10,51,70,56,48,10,54,54,48,48,10,54,54,48,48, 10,54,54,48,48,10,54,55,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,68,50,69,10,69,78,67,79,68,73,78,71,32, 55,52,55,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,55,69, 48,48,10,54,51,48,48,10,54,51,48,48,10,55,69,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,55,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,68,50, 70,10,69,78,67,79,68,73,78,71,32,55,52,55,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,55,67,48,48,10,54,54, 48,48,10,54,54,48,48,10,70,70,56,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,55,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,68,51,48,10,69,78,67, 79,68,73,78,71,32,55,52,55,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,55,67,48,48,10,54,54,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,54,48,48,10,55,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,68,51,49,10,69,78,67,79,68,73,78,71, 32,55,52,55,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,55, 70,48,48,10,54,48,48,48,10,54,48,48,48,10,55,67, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,55,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,68, 51,50,10,69,78,67,79,68,73,78,71,32,55,52,55,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,55,70,48,48,10,48, 51,48,48,10,48,51,48,48,10,49,70,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,55,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,68,51,51,10,69,78, 67,79,68,73,78,71,32,55,52,55,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,49,67,48,48,10,51,54,48,48,10,54, 51,48,48,10,54,48,48,48,10,54,70,48,48,10,54,51, 48,48,10,51,55,48,48,10,49,68,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,68,51,52,10,69,78,67,79,68,73,78, 71,32,55,52,55,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,55, 70,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 68,51,53,10,69,78,67,79,68,73,78,71,32,55,52,55, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,55,69,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,55,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,68,51,54,10,69, 78,67,79,68,73,78,71,32,55,52,55,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,49,70,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,52,54,48,48,10,54,67,48,48,10,51,56, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,68,51,55,10,69,78,67,79,68,73, 78,71,32,55,52,55,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,54,54,48,48,10,54,67,48,48,10,55,56,48,48,10, 55,48,48,48,10,55,56,48,48,10,54,67,48,48,10,54, 54,48,48,10,54,51,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,68,51,56,10,69,78,67,79,68,73,78,71,32,55,52, 56,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,55, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,68,51,57,10, 69,78,67,79,68,73,78,71,32,55,52,56,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,54,51,48,48,10,55,55,48,48, 10,55,55,48,48,10,55,70,48,48,10,54,66,48,48,10, 54,66,48,48,10,54,51,48,48,10,54,51,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,68,51,65,10,69,78,67,79,68, 73,78,71,32,55,52,56,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,54,51,48,48,10,55,51,48,48,10,55,51,48,48, 10,54,66,48,48,10,54,66,48,48,10,54,55,48,48,10, 54,55,48,48,10,54,51,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,68,51,66,10,69,78,67,79,68,73,78,71,32,55, 52,56,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,54,51,48, 48,10,54,55,48,48,10,54,55,48,48,10,54,66,48,48, 10,54,66,48,48,10,55,51,48,48,10,55,51,48,48,10, 54,51,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,68,51,67, 10,69,78,67,79,68,73,78,71,32,55,52,56,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,51,69,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,51,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,68,51,68,10,69,78,67,79, 68,73,78,71,32,55,52,56,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,67, 48,48,10,48,54,48,48,10,54,50,48,48,10,52,50,48, 48,10,54,54,48,48,10,51,67,48,48,10,54,54,48,48, 10,52,50,48,48,10,54,54,48,48,10,51,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,68,51,69,10,69,78,67,79,68,73,78,71,32, 55,52,56,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,55,69, 48,48,10,54,51,48,48,10,54,49,48,48,10,54,51,48, 48,10,55,69,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,68,51, 70,10,69,78,67,79,68,73,78,71,32,55,52,56,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,55,69,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,54,48,48,10,55,67,48, 48,10,54,54,48,48,10,54,51,48,48,10,54,51,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,68,52,48,10,69,78,67, 79,68,73,78,71,32,55,52,56,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,55,69,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,68,52,49,10,69,78,67,79,68,73,78,71, 32,55,52,56,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,51,54,48, 48,10,49,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,68, 52,50,10,69,78,67,79,68,73,78,71,32,55,52,57,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,66,48,48,10,54,66, 48,48,10,55,70,48,48,10,55,55,48,48,10,54,51,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,68,52,51,10,69,78, 67,79,68,73,78,71,32,55,52,57,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 67,48,48,10,48,54,48,48,10,51,69,48,48,10,54,54, 48,48,10,54,54,48,48,10,51,65,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,68,52,52,10,69,78,67,79,68,73,78, 71,32,55,52,57,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,53,67,48,48,10,54, 54,48,48,10,54,54,48,48,10,55,67,48,48,10,54,48, 48,48,10,51,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 68,52,53,10,69,78,67,79,68,73,78,71,32,55,52,57, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,67,48,48,10,54,67,48,48,10,54, 67,48,48,10,54,67,48,48,10,54,67,48,48,10,51,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,68,52,54,10,69, 78,67,79,68,73,78,71,32,55,52,57,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,66,48,48,10,52,68,56,48,10,48,70,48,48,10,55, 67,48,48,10,54,67,56,48,10,51,55,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,68,52,55,10,69,78,67,79,68,73, 78,71,32,55,52,57,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,67,48,48,10, 55,54,48,48,10,54,54,48,48,10,54,54,48,48,10,55, 54,48,48,10,54,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,68,52,56,10,69,78,67,79,68,73,78,71,32,55,52, 57,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,54,48,48, 10,48,54,48,48,10,51,54,48,48,10,54,69,48,48,10, 54,54,48,48,10,54,54,48,48,10,54,69,48,48,10,51, 54,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,68,52,57,10, 69,78,67,79,68,73,78,71,32,55,52,57,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,67,48,48,10,54,54,48,48,10,55,69,48,48,10, 54,48,48,48,10,54,54,48,48,10,51,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,68,52,65,10,69,78,67,79,68, 73,78,71,32,55,52,57,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,67,48,48, 10,54,54,48,48,10,48,54,48,48,10,55,69,48,48,10, 54,54,48,48,10,51,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,68,52,66,10,69,78,67,79,68,73,78,71,32,55, 52,57,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,67,48,48,10,54,50,48,48, 10,51,56,48,48,10,54,48,48,48,10,54,54,48,48,10, 51,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,68,52,67, 10,69,78,67,79,68,73,78,71,32,55,53,48,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,67,48,48,10,54,54,48,48,10,48,54,48,48, 10,49,67,48,48,10,52,54,48,48,10,51,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,68,52,68,10,69,78,67,79, 68,73,78,71,32,55,53,48,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,69,48, 48,10,54,67,48,48,10,54,67,48,48,10,51,56,48,48, 10,54,48,48,48,10,51,67,48,48,10,54,54,48,48,10, 51,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,68,52,69,10,69,78,67,79,68,73,78,71,32, 55,53,48,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,56,48,48,10,51,48,48,48,10,51,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,56,48,48, 10,48,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,68,52, 70,10,69,78,67,79,68,73,78,71,32,55,53,48,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,67,48,48,10,55,56,48,48,10,55,48,48, 48,10,55,56,48,48,10,54,67,48,48,10,54,54,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,68,53,48,10,69,78,67, 79,68,73,78,71,32,55,53,48,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,53,66, 48,48,10,55,70,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,68,53,49,10,69,78,67,79,68,73,78,71, 32,55,53,48,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,53,67,48,48,10,55,54, 48,48,10,54,54,48,48,10,54,54,48,48,10,54,54,48, 48,10,54,54,48,48,10,48,54,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,68, 53,50,10,69,78,67,79,68,73,78,71,32,55,53,48,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,67,48,48,10,54,54,48,48,10,54,54, 48,48,10,54,54,48,48,10,54,54,48,48,10,51,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,68,53,51,10,69,78, 67,79,68,73,78,71,32,55,53,48,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 56,48,48,10,54,67,48,48,10,48,54,48,48,10,48,54, 48,48,10,54,67,48,48,10,51,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,68,53,52,10,69,78,67,79,68,73,78, 71,32,55,53,48,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,67,48,48,10,54, 54,48,48,10,54,54,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 68,53,53,10,69,78,67,79,68,73,78,71,32,55,53,48, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,54,48,48,10,54,54,48,48,10,51,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,68,53,54,10,69, 78,67,79,68,73,78,71,32,55,53,49,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,67,48,48,10,55,54,48,48,10,54,54,48,48,10,54, 54,48,48,10,55,54,48,48,10,54,67,48,48,10,54,48, 48,48,10,54,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,68,53,55,10,69,78,67,79,68,73, 78,71,32,55,53,49,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,48,48,48,10,55,56,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,48,48,48,10,51, 50,48,48,10,49,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,68,53,56,10,69,78,67,79,68,73,78,71,32,55,53, 49,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,54,48,48,10,54,54,48,48,10, 54,54,48,48,10,54,54,48,48,10,51,69,48,48,10,49, 65,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,68,53,57,10, 69,78,67,79,68,73,78,71,32,55,53,49,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,69,48,48,10,55,67,48,48,10,48,54,48,48,10, 48,54,48,48,10,55,67,48,48,10,55,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,68,53,65,10,69,78,67,79,68, 73,78,71,32,55,53,49,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 55,70,56,48,10,51,54,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,68,53,66,10,69,78,67,79,68,73,78,71,32,55, 53,49,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,54,48,48,10,54,54,48,48, 10,51,67,48,48,10,51,67,48,48,10,49,56,48,48,10, 49,56,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,68,53,67, 10,69,78,67,79,68,73,78,71,32,55,53,49,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,67,48,48,10,55,69,48,48,10,51,67,48,48, 10,53,65,48,48,10,55,69,48,48,10,50,52,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,68,53,68,10,69,78,67,79, 68,73,78,71,32,55,53,49,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,51,48,48,48,10,55,56,48,48,10,55,56,48, 48,10,55,56,48,48,10,54,67,48,48,10,54,67,48,48, 10,55,56,48,48,10,54,48,48,48,10,54,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,68,53,69,10,69,78,67,79,68,73,78,71,32, 55,53,49,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,54,48,48,10,54,54,48, 48,10,50,52,48,48,10,51,67,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,68,53, 70,10,69,78,67,79,68,73,78,71,32,55,53,49,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,51,67,48,48,10,54,48,48,48,10,49,48, 48,48,10,51,67,48,48,10,54,54,48,48,10,54,54,48, 48,10,54,54,48,48,10,54,54,48,48,10,51,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,68,54,48,10,69,78,67, 79,68,73,78,71,32,55,53,50,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,50,67,48,48,10,55,69, 48,48,10,53,65,48,48,10,53,65,48,48,10,55,69,48, 48,10,51,67,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,68,54,49,10,69,78,67,79,68,73,78,71, 32,55,53,50,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,52,52,48,48,10,52,52, 48,48,10,54,67,48,48,10,51,56,48,48,10,51,56,48, 48,10,54,67,48,48,10,52,52,48,48,10,52,52,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,68, 54,50,10,69,78,67,79,68,73,78,71,32,55,53,50,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,56,48, 48,10,49,56,48,48,10,48,48,48,48,10,51,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,51,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,68,54,51,10,69,78, 67,79,68,73,78,71,32,55,53,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,67,48,48,10,55,54,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,68,54,52,10,69,78,67,79,68,73,78, 71,32,55,53,50,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,54,48,48,10,54,54,48,48,10,54,54,48,48, 10,54,54,48,48,10,51,69,48,48,10,49,65,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 68,54,53,10,69,78,67,79,68,73,78,71,32,55,53,50, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,54,48, 48,10,54,54,48,48,10,51,67,48,48,10,51,67,48,48, 10,49,56,48,48,10,49,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,68,54,54,10,69, 78,67,79,68,73,78,71,32,55,53,50,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,48,48,48,10,55,56,48,48,10,55,56,48, 48,10,55,56,48,48,10,54,67,48,48,10,54,67,48,48, 10,55,56,48,48,10,54,48,48,48,10,54,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,68,54,55,10,69,78,67,79,68,73, 78,71,32,55,53,50,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,54,48,48,10,54,54,48,48,10,50,52,48, 48,10,51,67,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,68,54,56,10,69,78,67,79,68,73,78,71,32,55,53, 50,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,67, 48,48,10,54,54,48,48,10,54,54,48,48,10,54,54,48, 48,10,54,54,48,48,10,55,67,48,48,10,52,48,48,48, 10,51,67,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,68,54,57,10, 69,78,67,79,68,73,78,71,32,55,53,50,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,50,67,48,48,10,55,69,48,48,10,53,65, 48,48,10,53,65,48,48,10,55,69,48,48,10,51,67,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,68,54,65,10,69,78,67,79,68, 73,78,71,32,55,53,51,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,52,52,48,48,10,52,52,48,48,10,54,67, 48,48,10,51,56,48,48,10,51,56,48,48,10,54,67,48, 48,10,52,52,48,48,10,52,52,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,68,54,66,10,69,78,67,79,68,73,78,71,32,55, 53,51,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,70,48,48,10, 54,68,56,48,10,54,68,56,48,10,54,70,56,48,10,54, 67,48,48,10,54,67,48,48,10,54,68,56,48,10,51,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,69,48,48, 10,69,78,67,79,68,73,78,71,32,55,54,56,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,49,69,48,48,10,51,51,48,48,10,51,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 55,70,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,67, 48,48,10,49,50,48,48,10,49,50,48,48,10,48,67,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,69,48,49,10,69,78,67,79, 68,73,78,71,32,55,54,56,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,70,48,48,10,51,49,56,48,10,48,49,56,48,10, 51,70,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,69,56,48,10,48,67,48,48,10,49,50, 48,48,10,49,50,48,48,10,48,67,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,69,48,50,10,69,78,67,79,68,73,78,71,32, 55,54,56,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,55,67,48,48,10,54,54,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,54,48,48, 10,55,69,48,48,10,54,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,51,48,48,10,55, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,48, 51,10,69,78,67,79,68,73,78,71,32,55,54,56,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,54,48,48,10,48,54,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,69,48,48,10,55,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,55,51,48,48,10,54,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,69,48,52,10,69,78,67, 79,68,73,78,71,32,55,54,56,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,67,48,48,10,54,54, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,54,48,48,10,55,69,48,48,10,54,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,51,48,48,10,55,69,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,69,48,53,10,69,78,67,79,68,73,78,71, 32,55,54,56,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,69,48, 48,10,55,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,55,51,48,48,10, 54,69,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,69, 48,54,10,69,78,67,79,68,73,78,71,32,55,54,56,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 67,48,48,10,54,54,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,54,48,48,10,55,69,48, 48,10,54,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,51,48,48,10,55,69,48,48,10, 48,48,48,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,48,55,10,69,78, 67,79,68,73,78,71,32,55,54,56,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,69,48,48,10,55,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,55,51,48,48,10,54,69,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,69,48,56,10,69,78,67,79,68,73,78, 71,32,55,54,56,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,51,48,48,10, 48,54,48,48,10,48,67,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,67,48,48,10,48,52,48,48,10, 49,50,48,48,10,48,67,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,48,57,10,69,78,67,79,68,73,78,71,32,55,54,56, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,51,48,48,10,48,54,48,48,10,48, 67,48,48,10,48,48,48,48,10,49,70,48,48,10,51,49, 56,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,51,49,56,48,10,49,70,48,48, 10,48,67,48,48,10,48,52,48,48,10,49,50,48,48,10, 48,67,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,48,65,10,69, 78,67,79,68,73,78,71,32,55,54,57,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,49,56,48,48,10,49,56,48,48,10,48,48,48,48,10, 55,69,48,48,10,54,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,51,48,48,10,55,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,48,66,10,69,78,67,79,68,73, 78,71,32,55,54,57,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,49,56,48,48, 10,49,56,48,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,49, 68,56,48,10,51,51,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,56, 48,10,49,68,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,48,67,10,69,78,67,79,68,73,78,71,32,55,54, 57,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,69,48,48,10,54,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,51,48,48,10,55,69,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,48,68,10, 69,78,67,79,68,73,78,71,32,55,54,57,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,49,68,56,48,10,51,51,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,56,48,10,49,68,56,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,69,48,69,10,69,78,67,79,68, 73,78,71,32,55,54,57,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,69,48,48,10,54,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,51, 48,48,10,55,69,48,48,10,48,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,48,70,10,69,78,67,79,68,73,78,71,32,55, 54,57,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,49,68,56,48,10, 51,51,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,56,48,10,49,68, 56,48,10,48,48,48,48,10,55,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,69,49,48, 10,69,78,67,79,68,73,78,71,32,55,54,57,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,69,48, 48,10,54,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,51,48,48,10,55,69,48,48,10,49,56, 48,48,10,48,56,48,48,10,50,52,48,48,10,49,56,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,69,49,49,10,69,78,67,79, 68,73,78,71,32,55,54,57,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,49,68,56,48,10,51,51,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,56,48,10,49,68,56,48,10,48,67,48,48,10,48,52, 48,48,10,49,50,48,48,10,48,67,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,69,49,50,10,69,78,67,79,68,73,78,71,32, 55,54,57,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,69,48,48,10,54,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,51,48,48,10,55, 69,48,48,10,48,48,48,48,10,48,67,48,48,10,49,69, 48,48,10,51,51,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,49, 51,10,69,78,67,79,68,73,78,71,32,55,54,57,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,49,68,56,48,10,51,51,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,56,48,10,49,68,56,48,10,48, 48,48,48,10,48,67,48,48,10,49,69,48,48,10,51,51, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,69,49,52,10,69,78,67, 79,68,73,78,71,32,55,55,48,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,49, 56,48,48,10,48,67,48,48,10,48,48,48,48,10,55,70, 56,48,10,48,48,48,48,10,55,70,56,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,55,69,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,69,49,53,10,69,78,67,79,68,73,78,71, 32,55,55,48,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,56,48,48,10,48,67,48,48,10,48,48, 48,48,10,55,70,56,48,10,48,48,48,48,10,49,69,48, 48,10,51,51,48,48,10,54,49,56,48,10,55,70,56,48, 10,54,48,48,48,10,54,48,48,48,10,51,49,56,48,10, 49,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,69, 49,54,10,69,78,67,79,68,73,78,71,32,55,55,48,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,54,48,48,10,48,67,48,48,10,48, 48,48,48,10,55,70,56,48,10,48,48,48,48,10,55,70, 56,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,55,69,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,49,55,10,69,78, 67,79,68,73,78,71,32,55,55,48,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,54,48,48,10,48, 67,48,48,10,48,48,48,48,10,55,70,56,48,10,48,48, 48,48,10,49,69,48,48,10,51,51,48,48,10,54,49,56, 48,10,55,70,56,48,10,54,48,48,48,10,54,48,48,48, 10,51,49,56,48,10,49,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,69,49,56,10,69,78,67,79,68,73,78, 71,32,55,55,48,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,55,69,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,55,70,56,48,10,48,48,48,48,10,48,67,48,48,10, 49,69,48,48,10,51,51,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,49,57,10,69,78,67,79,68,73,78,71,32,55,55,48, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,56,48,10,55,70,56,48,10,54,48,48, 48,10,54,48,48,48,10,51,49,56,48,10,49,70,48,48, 10,48,48,48,48,10,48,67,48,48,10,49,69,48,48,10, 51,51,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,49,65,10,69, 78,67,79,68,73,78,71,32,55,55,48,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,55,69,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,49,57,48,48,10,51,70,48,48,10,50,54,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,49,66,10,69,78,67,79,68,73, 78,71,32,55,55,48,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,55,70, 56,48,10,54,48,48,48,10,54,48,48,48,10,51,49,56, 48,10,49,70,48,48,10,48,48,48,48,10,49,57,48,48, 10,51,70,48,48,10,50,54,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,49,67,10,69,78,67,79,68,73,78,71,32,55,55, 48,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,50,49,48,48,10,51,51,48,48,10,49,69,48,48, 10,48,48,48,48,10,55,70,56,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,55, 69,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,70,56, 48,10,48,67,48,48,10,48,52,48,48,10,49,50,48,48, 10,48,67,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,49,68,10, 69,78,67,79,68,73,78,71,32,55,55,48,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,50,49,48,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,55,70,56,48,10,54,48,48,48,10,54,48, 48,48,10,51,49,56,48,10,49,70,48,48,10,48,67,48, 48,10,48,52,48,48,10,49,50,48,48,10,48,67,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,69,49,69,10,69,78,67,79,68, 73,78,71,32,55,55,49,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,55,70,56,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,55,69,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,49,70,10,69,78,67,79,68,73,78,71,32,55, 55,49,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,70,48,48,10,49,57,56,48, 10,49,57,56,48,10,49,56,48,48,10,55,69,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,69,50,48, 10,69,78,67,79,68,73,78,71,32,55,55,49,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,55,70,56,48,10,48,48,48,48,10,49,69,48, 48,10,51,51,48,48,10,54,49,56,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,55,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,56,48,10,49,69,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,69,50,49,10,69,78,67,79, 68,73,78,71,32,55,55,49,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,51,69,56,48,10,54,51,56,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,51,69,48,48,10,54, 48,48,48,10,51,70,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,70,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,69,50,50,10,69,78,67,79,68,73,78,71,32, 55,55,49,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,55,70,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,50, 51,10,69,78,67,79,68,73,78,71,32,55,55,49,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,54,48,48,10,48,54,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,69,48,48,10,55,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,69,50,52,10,69,78,67, 79,68,73,78,71,32,55,55,49,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,55,70,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,69,50,53,10,69,78,67,79,68,73,78,71, 32,55,55,49,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,69,48, 48,10,55,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,69, 50,54,10,69,78,67,79,68,73,78,71,32,55,55,49,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,51,51,48,48,10,51,51,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,55,70,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,50,55,10,69,78, 67,79,68,73,78,71,32,55,55,49,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 51,51,48,48,10,51,51,48,48,10,48,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,69,48,48,10,55,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,69,50,56,10,69,78,67,79,68,73,78, 71,32,55,55,50,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,55,70,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,48,48,48,10,50,48,48,48,10, 57,48,48,48,10,54,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,50,57,10,69,78,67,79,68,73,78,71,32,55,55,50, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,69,48,48,10,55,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,48,48,48,10,50,48,48,48,10,57,48,48,48,10, 54,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,50,65,10,69, 78,67,79,68,73,78,71,32,55,55,50,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,55,70,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,51,51,48,48,10,49,69,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,50,66,10,69,78,67,79,68,73, 78,71,32,55,55,50,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 69,48,48,10,55,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,48,48,48,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,50,67,10,69,78,67,79,68,73,78,71,32,55,55, 50,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,55,70,56, 48,10,48,48,48,48,10,49,57,48,48,10,51,70,48,48, 10,50,54,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,50,68,10, 69,78,67,79,68,73,78,71,32,55,55,50,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,51,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,55,70,56,48,10,48,48,48, 48,10,49,57,48,48,10,51,70,48,48,10,50,54,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,69,50,69,10,69,78,67,79,68, 73,78,71,32,55,55,50,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,54,48, 48,10,48,67,48,48,10,54,49,56,48,10,54,49,56,48, 10,48,48,48,48,10,55,70,56,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,50,70,10,69,78,67,79,68,73,78,71,32,55, 55,50,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,54,48, 48,10,48,67,48,48,10,48,48,48,48,10,51,51,48,48, 10,51,51,48,48,10,48,48,48,48,10,51,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,69,51,48, 10,69,78,67,79,68,73,78,71,32,55,55,50,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,51, 48,48,10,48,54,48,48,10,48,67,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,51,48,48,10,54,51,48,48, 10,54,54,48,48,10,54,54,48,48,10,55,67,48,48,10, 54,54,48,48,10,54,54,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,69,51,49,10,69,78,67,79, 68,73,78,71,32,55,55,50,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,67,48,48,10,49,56, 48,48,10,51,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,51,48,48,10,54,54,48,48,10,54,67,48,48,10, 55,56,48,48,10,55,67,48,48,10,54,54,48,48,10,54, 51,48,48,10,54,49,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,69,51,50,10,69,78,67,79,68,73,78,71,32, 55,55,51,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,51,48, 48,10,54,51,48,48,10,54,54,48,48,10,54,54,48,48, 10,55,67,48,48,10,54,54,48,48,10,54,54,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,51, 51,10,69,78,67,79,68,73,78,71,32,55,55,51,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,51,48,48,10,54,54,48,48, 10,54,67,48,48,10,55,56,48,48,10,55,67,48,48,10, 54,54,48,48,10,54,51,48,48,10,54,49,56,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,69,51,52,10,69,78,67, 79,68,73,78,71,32,55,55,51,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,51,48,48,10,54,51,48,48,10,54,54,48, 48,10,54,54,48,48,10,55,67,48,48,10,54,54,48,48, 10,54,54,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,48,48,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,69,51,53,10,69,78,67,79,68,73,78,71, 32,55,55,51,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,51,48, 48,10,54,54,48,48,10,54,67,48,48,10,55,56,48,48, 10,55,67,48,48,10,54,54,48,48,10,54,51,48,48,10, 54,49,56,48,10,48,48,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,69, 51,54,10,69,78,67,79,68,73,78,71,32,55,55,51,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,51,55,10,69,78, 67,79,68,73,78,71,32,55,55,51,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,55,70,56,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,69,51,56,10,69,78,67,79,68,73,78, 71,32,55,55,51,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,55,70,48,48,10, 48,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,55,70,56,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,51,57,10,69,78,67,79,68,73,78,71,32,55,55,51, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,55,70,48,48,10,48,48,48,48,10, 51,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,55,70,56,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,51,65,10,69, 78,67,79,68,73,78,71,32,55,55,51,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,51,66,10,69,78,67,79,68,73, 78,71,32,55,55,51,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,55,70,56,48,10,48,48,48,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,51,67,10,69,78,67,79,68,73,78,71,32,55,55, 52,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,51,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,51,68,10, 69,78,67,79,68,73,78,71,32,55,55,52,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,55,70,56,48,10,48,48,48, 48,10,48,67,48,48,10,49,69,48,48,10,51,51,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,69,51,69,10,69,78,67,79,68, 73,78,71,32,55,55,52,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,51,48,48,10,48,54,48, 48,10,48,67,48,48,10,54,49,56,48,10,54,49,56,48, 10,55,51,56,48,10,55,51,56,48,10,55,70,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,51,70,10,69,78,67,79,68,73,78,71,32,55, 55,52,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,51,48,48,10,48,54,48,48, 10,48,67,48,48,10,48,48,48,48,10,53,66,48,48,10, 55,70,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,69,52,48, 10,69,78,67,79,68,73,78,71,32,55,55,52,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,55,51,56,48, 10,55,51,56,48,10,55,70,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,69,52,49,10,69,78,67,79, 68,73,78,71,32,55,55,52,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,53,66,48,48,10,55,70,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,69,52,50,10,69,78,67,79,68,73,78,71,32, 55,55,52,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,49,56,48,10,54,49,56,48,10,55,51,56, 48,10,55,51,56,48,10,55,70,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,52, 51,10,69,78,67,79,68,73,78,71,32,55,55,52,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,53,66,48,48,10,55,70,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,69,52,52,10,69,78,67, 79,68,73,78,71,32,55,55,52,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,54,49, 56,48,10,55,49,56,48,10,55,49,56,48,10,55,57,56, 48,10,55,57,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,55,56,48,10,54,55,56,48,10,54,51,56,48,10, 54,51,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,69,52,53,10,69,78,67,79,68,73,78,71, 32,55,55,52,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,54,69,48, 48,10,55,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,69, 52,54,10,69,78,67,79,68,73,78,71,32,55,55,53,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 49,56,48,10,55,49,56,48,10,55,49,56,48,10,55,57, 56,48,10,55,57,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,55,56,48,10,54,55,56,48,10,54,51,56,48, 10,54,51,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,52,55,10,69,78, 67,79,68,73,78,71,32,55,55,53,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,69,48,48,10,55,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,69,52,56,10,69,78,67,79,68,73,78, 71,32,55,55,53,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,55,49,56,48,10,55, 49,56,48,10,55,57,56,48,10,55,57,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,55,56,48,10,54,55,56, 48,10,54,51,56,48,10,54,51,56,48,10,54,49,56,48, 10,54,49,56,48,10,48,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,52,57,10,69,78,67,79,68,73,78,71,32,55,55,53, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,69,48,48,10,55,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,48,48,48,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,52,65,10,69, 78,67,79,68,73,78,71,32,55,55,53,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 55,49,56,48,10,55,49,56,48,10,55,57,56,48,10,55, 57,56,48,10,54,68,56,48,10,54,68,56,48,10,54,55, 56,48,10,54,55,56,48,10,54,51,56,48,10,54,51,56, 48,10,54,49,56,48,10,54,49,56,48,10,48,67,48,48, 10,49,69,48,48,10,51,51,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,52,66,10,69,78,67,79,68,73, 78,71,32,55,55,53,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 69,48,48,10,55,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,48,67,48,48,10,49,69,48,48, 10,51,51,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,52,67,10,69,78,67,79,68,73,78,71,32,55,55, 53,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,54,48,48,10,48,67,48,48,10,48,48,48,48, 10,49,57,48,48,10,50,54,48,48,10,48,48,48,48,10, 49,69,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,52,68,10, 69,78,67,79,68,73,78,71,32,55,55,53,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,54,48,48,10,48,67,48,48,10,48,48,48,48, 10,49,57,48,48,10,51,70,48,48,10,50,54,48,48,10, 48,48,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,69,52,69,10,69,78,67,79,68, 73,78,71,32,55,55,53,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,51,51,48, 48,10,48,48,48,48,10,49,57,48,48,10,50,54,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,52,70,10,69,78,67,79,68,73,78,71,32,55, 55,53,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,51,51,48,48,10,51,51,48, 48,10,48,48,48,48,10,49,57,48,48,10,51,70,48,48, 10,50,54,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,69,53,48, 10,69,78,67,79,68,73,78,71,32,55,55,54,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,49,56,48,48,10,48,67,48,48,10,48,48,48, 48,10,55,70,56,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,69,53,49,10,69,78,67,79, 68,73,78,71,32,55,55,54,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,56,48,48,10,48,67,48, 48,10,48,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,69,53,50,10,69,78,67,79,68,73,78,71,32, 55,55,54,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,54,48,48,10,48,67, 48,48,10,48,48,48,48,10,55,70,56,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,53, 51,10,69,78,67,79,68,73,78,71,32,55,55,54,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,54, 48,48,10,48,67,48,48,10,48,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,49,69,48,48,10,51,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,49,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,69,53,52,10,69,78,67, 79,68,73,78,71,32,55,55,54,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,51,48,48,10,48, 54,48,48,10,48,67,48,48,10,48,48,48,48,10,55,69, 48,48,10,54,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,51,48,48,10,55,69,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,69,53,53,10,69,78,67,79,68,73,78,71, 32,55,55,54,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,51,48,48,10,48,54, 48,48,10,48,67,48,48,10,48,48,48,48,10,54,69,48, 48,10,55,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,55,51,48,48,10, 54,69,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,69, 53,54,10,69,78,67,79,68,73,78,71,32,55,55,54,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,55,69,48,48,10,54,51,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,51,48, 48,10,55,69,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,53,55,10,69,78, 67,79,68,73,78,71,32,55,55,54,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,54,69,48,48,10,55,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,55,51,48,48,10,54,69,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,69,53,56,10,69,78,67,79,68,73,78, 71,32,55,55,54,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,55,69,48,48,10,54, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,51,48,48,10,55,69,48,48,10,54,54,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,53,57,10,69,78,67,79,68,73,78,71,32,55,55,54, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,54,70,48,48,10,51,57, 56,48,10,51,48,48,48,10,51,48,48,48,10,51,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,53,65,10,69, 78,67,79,68,73,78,71,32,55,55,55,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,69,48,48,10, 54,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,51,48,48,10,55,69, 48,48,10,54,54,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,53,66,10,69,78,67,79,68,73, 78,71,32,55,55,55,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 70,48,48,10,51,57,56,48,10,51,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,51,48,48,48,10,51,48,48, 48,10,51,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,53,67,10,69,78,67,79,68,73,78,71,32,55,55, 55,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,55,69,48,48,10,54,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 51,48,48,10,55,69,48,48,10,54,54,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,53,68,10, 69,78,67,79,68,73,78,71,32,55,55,55,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,54,70,48,48,10,51,57,56,48,10,51, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,51,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,69,53,69,10,69,78,67,79,68, 73,78,71,32,55,55,55,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,69,48,48,10,54,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,51,48,48,10,55,69,48,48,10,54, 54,48,48,10,54,51,48,48,10,54,51,48,48,10,54,49, 56,48,10,54,49,56,48,10,48,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,53,70,10,69,78,67,79,68,73,78,71,32,55, 55,55,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,70,48,48,10, 51,57,56,48,10,51,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,51,48, 48,48,10,48,48,48,48,10,55,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,69,54,48, 10,69,78,67,79,68,73,78,71,32,55,55,55,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,54,49,56,48, 10,54,48,48,48,10,51,48,48,48,10,49,69,48,48,10, 48,51,48,48,10,48,49,56,48,10,48,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,69,54,49,10,69,78,67,79, 68,73,78,71,32,55,55,55,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,51,70,48,48,10,54,49,56,48,10,54,48,48,48,10, 51,70,48,48,10,48,49,56,48,10,48,49,56,48,10,54, 49,56,48,10,51,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,69,54,50,10,69,78,67,79,68,73,78,71,32, 55,55,55,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,69,48,48,10,51,51,48,48,10,54,49,56, 48,10,54,48,48,48,10,54,48,48,48,10,51,48,48,48, 10,49,69,48,48,10,48,51,48,48,10,48,49,56,48,10, 48,49,56,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,54, 51,10,69,78,67,79,68,73,78,71,32,55,55,55,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,70,48,48,10,54,49,56,48, 10,54,48,48,48,10,51,70,48,48,10,48,49,56,48,10, 48,49,56,48,10,54,49,56,48,10,51,70,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,69,54,52,10,69,78,67, 79,68,73,78,71,32,55,55,56,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,49, 56,48,48,10,49,57,56,48,10,48,51,48,48,10,48,48, 48,48,10,49,69,48,48,10,51,51,48,48,10,54,49,56, 48,10,54,48,48,48,10,51,48,48,48,10,49,69,48,48, 10,48,51,48,48,10,48,49,56,48,10,54,49,56,48,10, 51,51,48,48,10,49,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,69,54,53,10,69,78,67,79,68,73,78,71, 32,55,55,56,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,51,48,48,10,48,54, 48,48,10,48,67,48,48,10,48,48,48,48,10,51,70,48, 48,10,54,49,56,48,10,54,48,48,48,10,51,70,48,48, 10,48,49,56,48,10,48,49,56,48,10,54,49,56,48,10, 51,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,69, 54,54,10,69,78,67,79,68,73,78,71,32,55,55,56,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,67,48,48,10,48,48,48,48,10,51,51,48,48,10,49, 69,48,48,10,48,67,48,48,10,48,48,48,48,10,49,70, 48,48,10,51,49,56,48,10,54,48,48,48,10,51,48,48, 48,10,49,69,48,48,10,48,51,48,48,10,48,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,54,55,10,69,78, 67,79,68,73,78,71,32,55,55,56,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,51, 51,48,48,10,49,69,48,48,10,48,67,48,48,10,48,48, 48,48,10,51,70,48,48,10,54,49,56,48,10,54,48,48, 48,10,51,70,48,48,10,48,49,56,48,10,48,49,56,48, 10,54,49,56,48,10,51,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,69,54,56,10,69,78,67,79,68,73,78, 71,32,55,55,56,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,49,69,48,48,10,51, 51,48,48,10,54,49,56,48,10,54,48,48,48,10,51,48, 48,48,10,49,69,48,48,10,48,51,48,48,10,48,49,56, 48,10,48,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,54,57,10,69,78,67,79,68,73,78,71,32,55,55,56, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,51,70,48,48,10,54,49, 56,48,10,54,48,48,48,10,51,70,48,48,10,48,49,56, 48,10,48,49,56,48,10,54,49,56,48,10,51,70,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,54,65,10,69, 78,67,79,68,73,78,71,32,55,55,56,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,54,66,10,69,78,67,79,68,73, 78,71,32,55,55,56,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,49,56,48,48,10,49,56,48,48,10,48,48,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,55, 69,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,57,56, 48,10,48,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,54,67,10,69,78,67,79,68,73,78,71,32,55,55, 56,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,54,68,10, 69,78,67,79,68,73,78,71,32,55,55,56,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,55,69,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,57,56,48,10,48,70,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,69,54,69,10,69,78,67,79,68, 73,78,71,32,55,55,57,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,54,70,10,69,78,67,79,68,73,78,71,32,55, 55,57,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,55,69,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,57,56,48,10,48,70, 48,48,10,48,48,48,48,10,55,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,69,55,48, 10,69,78,67,79,68,73,78,71,32,55,55,57,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,67,48,48,10,49,69,48,48,10,51,51,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,69,55,49,10,69,78,67,79, 68,73,78,71,32,55,55,57,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,55,69,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 57,56,48,10,48,70,48,48,10,48,48,48,48,10,48,67, 48,48,10,49,69,48,48,10,51,51,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,69,55,50,10,69,78,67,79,68,73,78,71,32, 55,55,57,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,48,48,48,48,10,51,51,48,48,10,51,51, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,55, 51,10,69,78,67,79,68,73,78,71,32,55,55,57,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,56,48,10,49,68,56,48,10,48, 48,48,48,10,51,51,48,48,10,51,51,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,69,55,52,10,69,78,67, 79,68,73,78,71,32,55,55,57,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,51,48,48,10,49,69,48,48,10,48,48,48,48,10,49, 57,48,48,10,51,70,48,48,10,50,54,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,69,55,53,10,69,78,67,79,68,73,78,71, 32,55,55,57,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,56,48,10, 49,68,56,48,10,48,48,48,48,10,49,57,48,48,10,51, 70,48,48,10,50,54,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,69, 55,54,10,69,78,67,79,68,73,78,71,32,55,55,57,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,69,48,48,10,51, 51,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,55,55,10,69,78, 67,79,68,73,78,71,32,55,55,57,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,51,51,56,48,10,49,68,56,48,10,48,48,48,48,10, 48,67,48,48,10,49,69,48,48,10,51,51,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,69,55,56,10,69,78,67,79,68,73,78, 71,32,55,56,48,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,54,48,48,10,48,67,48,48,10, 48,48,48,48,10,49,57,48,48,10,50,54,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,55,57,10,69,78,67,79,68,73,78,71,32,55,56,48, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,54,48,48,10,48,67,48,48,10, 48,48,48,48,10,49,57,48,48,10,51,70,48,48,10,50, 54,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,56,48,10,49,68,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,55,65,10,69, 78,67,79,68,73,78,71,32,55,56,48,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,51,51,48,48,10,51,51,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,55,66,10,69,78,67,79,68,73, 78,71,32,55,56,48,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,51,48,48,10,51,51,48,48,10, 48,48,48,48,10,55,70,56,48,10,48,48,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,56, 48,10,49,68,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,55,67,10,69,78,67,79,68,73,78,71,32,55,56, 48,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,49,57,48,48,10,51,70,48,48, 10,50,54,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,51,51,48,48,10,51, 51,48,48,10,49,69,48,48,10,49,69,48,48,10,49,69, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,55,68,10, 69,78,67,79,68,73,78,71,32,55,56,48,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,57,48,48,10,51,70,48,48,10,50,54,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,51,51,48,48,10,49,69,48,48,10,49,69, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,69,55,69,10,69,78,67,79,68, 73,78,71,32,55,56,48,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 51,51,48,48,10,51,51,48,48,10,49,69,48,48,10,49, 69,48,48,10,49,69,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,55,70,10,69,78,67,79,68,73,78,71,32,55, 56,48,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,51,51,48,48,10,49, 69,48,48,10,49,69,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,87,103,114,97,118,101,10, 69,78,67,79,68,73,78,71,32,55,56,48,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,49,56,48,48,10,48,67,48,48,10,48,52,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,55,51,56,48,10,55,51, 56,48,10,54,49,56,48,10,54,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,119,103,114,97,118,101,10,69,78,67,79,68,73, 78,71,32,55,56,48,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,56,48,48,10, 48,67,48,48,10,48,54,48,48,10,48,48,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,55,70,56, 48,10,51,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,87,97,99, 117,116,101,10,69,78,67,79,68,73,78,71,32,55,56,49, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,54,48,48,10,48,67,48,48,10, 48,56,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,55,51,56, 48,10,55,51,56,48,10,54,49,56,48,10,54,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,119,97,99,117,116,101,10,69,78, 67,79,68,73,78,71,32,55,56,49,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 54,48,48,10,48,67,48,48,10,49,56,48,48,10,48,48, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,55,70,56,48,10,51,51,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,87,100,105,101,114,101,115,105,115,10,69,78,67,79,68, 73,78,71,32,55,56,49,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,51,51,48, 48,10,51,51,48,48,10,48,48,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,55,51,56,48,10,55,51,56,48,10,54,49, 56,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,119,100, 105,101,114,101,115,105,115,10,69,78,67,79,68,73,78,71, 32,55,56,49,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,51, 48,48,10,51,51,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,55,70,56,48,10, 51,51,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,69, 56,54,10,69,78,67,79,68,73,78,71,32,55,56,49,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,55,51,56,48, 10,55,51,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,56,55,10,69,78, 67,79,68,73,78,71,32,55,56,49,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,55,70,56,48,10,51,51,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,69,56,56,10,69,78,67,79,68,73,78, 71,32,55,56,49,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,55,51,56,48,10,55,51,56,48,10,54,49,56,48, 10,54,49,56,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,56,57,10,69,78,67,79,68,73,78,71,32,55,56,49, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,55,70,56,48,10,51,51,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,56,65,10,69, 78,67,79,68,73,78,71,32,55,56,49,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,51,51,48,48,10,49, 69,48,48,10,49,69,48,48,10,48,67,48,48,10,49,69, 48,48,10,49,69,48,48,10,51,51,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,56,66,10,69,78,67,79,68,73, 78,71,32,55,56,49,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,67, 48,48,10,48,67,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,56,67,10,69,78,67,79,68,73,78,71,32,55,56, 50,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,51,51,48,48,10,51,51,48,48, 10,48,48,48,48,10,54,49,56,48,10,51,51,48,48,10, 51,51,48,48,10,49,69,48,48,10,49,69,48,48,10,48, 67,48,48,10,49,69,48,48,10,49,69,48,48,10,51,51, 48,48,10,51,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,56,68,10, 69,78,67,79,68,73,78,71,32,55,56,50,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,51,48,48,10,51,51,48,48,10, 48,48,48,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,48,67,48,48,10,48,67,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,69,56,69,10,69,78,67,79,68, 73,78,71,32,55,56,50,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,51,51,48,48,10, 49,69,48,48,10,49,69,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,56,70,10,69,78,67,79,68,73,78,71,32,55, 56,50,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,56,48,10,49,68, 56,48,10,48,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,69,57,48, 10,69,78,67,79,68,73,78,71,32,55,56,50,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,67,48,48,10,49,69,48,48,10,51,51,48, 48,10,48,48,48,48,10,55,70,56,48,10,48,49,56,48, 10,48,51,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,67,48,48,10,49,56,48,48,10,49,56,48,48,10,51, 48,48,48,10,54,48,48,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,69,57,49,10,69,78,67,79, 68,73,78,71,32,55,56,50,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,54,48, 48,10,48,70,48,48,10,49,57,56,48,10,48,48,48,48, 10,51,70,56,48,10,48,49,56,48,10,48,51,48,48,10, 48,54,48,48,10,48,67,48,48,10,49,56,48,48,10,51, 48,48,48,10,51,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,69,57,50,10,69,78,67,79,68,73,78,71,32, 55,56,50,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,51,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,67,48,48,10,49,56,48,48,10,49,56,48,48,10, 51,48,48,48,10,54,48,48,48,10,54,48,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,57, 51,10,69,78,67,79,68,73,78,71,32,55,56,50,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,70,56,48,10,48,49,56,48, 10,48,51,48,48,10,48,54,48,48,10,48,67,48,48,10, 49,56,48,48,10,51,48,48,48,10,51,70,56,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,69,57,52,10,69,78,67, 79,68,73,78,71,32,55,56,50,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,51,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,67,48,48,10,49,56,48,48, 10,49,56,48,48,10,51,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,55,70,56,48,10,48,48,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,69,57,53,10,69,78,67,79,68,73,78,71, 32,55,56,50,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,70,56, 48,10,48,49,56,48,10,48,51,48,48,10,48,54,48,48, 10,48,67,48,48,10,49,56,48,48,10,51,48,48,48,10, 51,70,56,48,10,48,48,48,48,10,51,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,69, 57,54,10,69,78,67,79,68,73,78,71,32,55,56,51,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,69,48,48,10,55,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,57,55,10,69,78, 67,79,68,73,78,71,32,55,56,51,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,54,54,48,48,10,54,54,48,48,10,48, 48,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,55,69,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,57,56,48,10,48,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,69,57,56,10,69,78,67,79,68,73,78, 71,32,55,56,51,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,50,48,48,10,49, 50,48,48,10,48,67,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,55,70,56,48, 10,51,51,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,57,57,10,69,78,67,79,68,73,78,71,32,55,56,51, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,49,50,48,48,10,49,50,48,48,10,48, 67,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,56,48,10,49,68,56,48, 10,48,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 49,69,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,57,65,10,69, 78,67,79,68,73,78,71,32,55,56,51,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,54,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,54,48,48,10,48, 48,48,48,10,51,70,48,48,10,54,49,56,48,10,48,49, 56,48,10,51,70,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,69,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,57,66,10,69,78,67,79,68,73, 78,71,32,55,56,51,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,54,48,48,10,48,54,48,48, 10,48,48,48,48,10,48,70,48,48,10,49,57,56,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,55, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,65,48,10,69,78,67,79,68,73,78,71,32,55,56, 52,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,49,69,48,48,10,51,51,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,55,70,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,65,49,10, 69,78,67,79,68,73,78,71,32,55,56,52,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,70,48,48,10,51,49,56,48,10,48, 49,56,48,10,51,70,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,69,56,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,69,65,50,10,69,78,67,79,68, 73,78,71,32,55,56,52,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,69,48, 48,10,48,51,48,48,10,48,54,48,48,10,48,67,48,48, 10,49,69,48,48,10,51,51,48,48,10,51,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,55,70,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,65,51,10,69,78,67,79,68,73,78,71,32,55, 56,52,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,69,48,48, 10,48,51,48,48,10,48,54,48,48,10,49,70,48,48,10, 51,49,56,48,10,48,49,56,48,10,51,70,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,69, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,69,65,52, 10,69,78,67,79,68,73,78,71,32,55,56,52,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,51, 48,48,10,48,54,48,48,10,48,48,48,48,10,49,67,48, 48,10,51,54,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,55,70,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,69,65,53,10,69,78,67,79, 68,73,78,71,32,55,56,52,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,54, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,67,48, 48,10,49,69,48,48,10,51,51,48,48,10,48,48,48,48, 10,49,70,48,48,10,51,49,56,48,10,48,49,56,48,10, 51,70,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,69,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,69,65,54,10,69,78,67,79,68,73,78,71,32, 55,56,52,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,51,48,48,48,10,49,56,48,48,10,48,48, 48,48,10,49,67,48,48,10,51,54,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,55,70,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,65, 55,10,69,78,67,79,68,73,78,71,32,55,56,52,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,49,56,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,67,48,48,10,49,69,48,48,10,51,51,48, 48,10,48,48,48,48,10,49,70,48,48,10,51,49,56,48, 10,48,49,56,48,10,51,70,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,69,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,69,65,56,10,69,78,67, 79,68,73,78,71,32,55,56,52,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,49, 67,48,48,10,48,54,48,48,10,49,67,48,48,10,51,54, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,55,70,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,69,65,57,10,69,78,67,79,68,73,78,71, 32,55,56,52,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,49,67,48,48,10,48, 54,48,48,10,48,67,48,48,10,48,67,48,48,10,49,69, 48,48,10,51,51,48,48,10,48,48,48,48,10,49,70,48, 48,10,51,49,56,48,10,48,49,56,48,10,51,70,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,69,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,69, 65,65,10,69,78,67,79,68,73,78,71,32,55,56,53,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,49,57,48,48,10,50,54,48,48,10,49, 67,48,48,10,51,54,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,55,70,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,65,66,10,69,78, 67,79,68,73,78,71,32,55,56,53,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 49,57,48,48,10,51,70,48,48,10,50,54,48,48,10,48, 67,48,48,10,49,69,48,48,10,51,51,48,48,10,48,48, 48,48,10,49,70,48,48,10,51,49,56,48,10,48,49,56, 48,10,51,70,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,69,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,69,65,67,10,69,78,67,79,68,73,78, 71,32,55,56,53,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,67,48,48,10, 49,69,48,48,10,51,51,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,51,51,48,48,10,54,49, 56,48,10,54,49,56,48,10,55,70,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,65,68,10,69,78,67,79,68,73,78,71,32,55,56,53, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,69,48,48,10,51, 51,48,48,10,48,48,48,48,10,49,70,48,48,10,51,49, 56,48,10,48,49,56,48,10,51,70,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,69,56,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,65,69,10,69, 78,67,79,68,73,78,71,32,55,56,53,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,54,48,48,10,48,67,48,48,10,50,49,48,48,10, 49,69,48,48,10,48,48,48,48,10,49,69,48,48,10,51, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,55,70,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,65,70,10,69,78,67,79,68,73, 78,71,32,55,56,53,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,54,48,48,10,48,67,48,48,10,48,48,48,48,10, 51,51,48,48,10,49,69,48,48,10,48,48,48,48,10,49, 70,48,48,10,51,49,56,48,10,48,49,56,48,10,51,70, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,69,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,66,48,10,69,78,67,79,68,73,78,71,32,55,56, 53,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,49,56,48,48,10,48,67,48,48, 10,50,49,48,48,10,49,69,48,48,10,48,48,48,48,10, 49,69,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,55,70,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,66,49,10, 69,78,67,79,68,73,78,71,32,55,56,53,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,49,56,48,48,10,48,67,48,48, 10,48,48,48,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,49,70,48,48,10,51,49,56,48,10,48, 49,56,48,10,51,70,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,69,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,69,66,50,10,69,78,67,79,68, 73,78,71,32,55,56,53,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,56,48, 48,10,48,52,48,48,10,50,53,48,48,10,49,69,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,55, 70,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,66,51,10,69,78,67,79,68,73,78,71,32,55, 56,53,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,48,54,48,48,10,48,48,48,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,49,70,48,48,10, 51,49,56,48,10,48,49,56,48,10,51,70,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,69, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,69,66,52, 10,69,78,67,79,68,73,78,71,32,55,56,54,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,49,57,48,48,10,50,54,48,48,10,48,48,48, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,55,70,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,69,66,53,10,69,78,67,79, 68,73,78,71,32,55,56,54,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,49,57, 48,48,10,51,70,48,48,10,50,54,48,48,10,48,48,48, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,49,70,48,48,10,51,49,56,48,10,48,49,56,48,10, 51,70,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,69,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,69,66,54,10,69,78,67,79,68,73,78,71,32, 55,56,54,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,50,49,48,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,67,48,48,10,49,69,48, 48,10,51,51,48,48,10,51,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,55,70,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,66, 55,10,69,78,67,79,68,73,78,71,32,55,56,54,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,50,49,48,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,49,70,48,48,10,51,49,56,48, 10,48,49,56,48,10,51,70,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,69,56,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,69,66,56,10,69,78,67, 79,68,73,78,71,32,55,56,54,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,69,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,55,70,56,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,69,66,57,10,69,78,67,79,68,73,78,71, 32,55,56,54,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,69,48, 48,10,51,51,48,48,10,54,49,56,48,10,55,70,56,48, 10,54,48,48,48,10,54,48,48,48,10,51,49,56,48,10, 49,70,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,69, 66,65,10,69,78,67,79,68,73,78,71,32,55,56,54,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,49,67,48,48,10,50,54,48,48,10,48, 67,48,48,10,55,70,56,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,69,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,66,66,10,69,78, 67,79,68,73,78,71,32,55,56,54,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 67,48,48,10,51,54,48,48,10,48,54,48,48,10,48,67, 48,48,10,49,69,48,48,10,51,51,48,48,10,54,49,56, 48,10,55,70,56,48,10,54,48,48,48,10,54,48,48,48, 10,51,49,56,48,10,49,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,69,66,67,10,69,78,67,79,68,73,78, 71,32,55,56,54,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,49,57,48,48,10, 51,70,48,48,10,50,54,48,48,10,48,48,48,48,10,55, 70,56,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,55,69,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,66,68,10,69,78,67,79,68,73,78,71,32,55,56,54, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,57,48,48,10,51,70,48,48,10,50, 54,48,48,10,48,48,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,56,48,10,55,70,56,48,10,54,48,48, 48,10,54,48,48,48,10,51,49,56,48,10,49,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,66,69,10,69, 78,67,79,68,73,78,71,32,55,56,55,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,51,48,48,10,48,54,48,48,10,49,67,48,48,10, 51,54,48,48,10,48,48,48,48,10,55,70,56,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,55,69, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,66,70,10,69,78,67,79,68,73, 78,71,32,55,56,55,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,54,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,67,48,48,10, 49,69,48,48,10,51,51,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,55,70, 56,48,10,54,48,48,48,10,54,48,48,48,10,51,49,56, 48,10,49,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,67,48,10,69,78,67,79,68,73,78,71,32,55,56, 55,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,51,48,48,48,10,49,56,48,48,10,48,48,48,48, 10,49,67,48,48,10,51,54,48,48,10,48,48,48,48,10, 55,70,56,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,55,69,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,67,49,10, 69,78,67,79,68,73,78,71,32,55,56,55,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,49,56,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,67,48,48,10,49,69,48,48,10,51,51,48,48,10, 48,48,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,55,70,56,48,10,54,48,48,48,10,54,48, 48,48,10,51,49,56,48,10,49,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,69,67,50,10,69,78,67,79,68, 73,78,71,32,55,56,55,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,51,56,48, 48,10,52,67,48,48,10,49,67,48,48,10,51,54,48,48, 10,48,48,48,48,10,55,70,56,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,55,69,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,67,51,10,69,78,67,79,68,73,78,71,32,55, 56,55,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,49,67,48,48,10,50,54,48, 48,10,48,67,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,51,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,55,70,56,48,10,54, 48,48,48,10,54,48,48,48,10,51,49,56,48,10,49,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,69,67,52, 10,69,78,67,79,68,73,78,71,32,55,56,55,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,49,57,48,48,10,50,54,48,48,10,49,67,48, 48,10,51,54,48,48,10,48,48,48,48,10,55,70,56,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 55,69,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,69,67,53,10,69,78,67,79, 68,73,78,71,32,55,56,55,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,49,57, 48,48,10,51,70,48,48,10,50,54,48,48,10,48,67,48, 48,10,49,69,48,48,10,51,51,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 55,70,56,48,10,54,48,48,48,10,54,48,48,48,10,51, 49,56,48,10,49,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,69,67,54,10,69,78,67,79,68,73,78,71,32, 55,56,55,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,67,48,48,10,49,69, 48,48,10,51,51,48,48,10,48,48,48,48,10,55,70,56, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,55,69,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,67, 55,10,69,78,67,79,68,73,78,71,32,55,56,55,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,49,69,48,48,10,51,51,48, 48,10,48,48,48,48,10,49,69,48,48,10,51,51,48,48, 10,54,49,56,48,10,55,70,56,48,10,54,48,48,48,10, 54,48,48,48,10,51,49,56,48,10,49,70,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,69,67,56,10,69,78,67, 79,68,73,78,71,32,55,56,56,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,49,67,48,48,10,50, 54,48,48,10,48,67,48,48,10,48,48,48,48,10,55,70, 56,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,69,67,57,10,69,78,67,79,68,73,78,71, 32,55,56,56,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,67,48,48,10,51,54,48,48,10,48,54, 48,48,10,48,67,48,48,10,48,48,48,48,10,51,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,69, 67,65,10,69,78,67,79,68,73,78,71,32,55,56,56,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,67,66,10,69,78, 67,79,68,73,78,71,32,55,56,56,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,51,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,55,70,56,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,69,67,67,10,69,78,67,79,68,73,78, 71,32,55,56,56,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,67,68,10,69,78,67,79,68,73,78,71,32,55,56,56, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,48,48,10,49,69,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,67,69,10,69, 78,67,79,68,73,78,71,32,55,56,56,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,49,67,48,48,10,50,54,48,48,10,48,67,48,48,10, 49,69,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,67,70,10,69,78,67,79,68,73, 78,71,32,55,56,56,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,67,48,48,10, 51,54,48,48,10,48,54,48,48,10,48,67,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,68,48,10,69,78,67,79,68,73,78,71,32,55,56, 56,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,51,48,48,10,48,54,48,48, 10,49,67,48,48,10,51,54,48,48,10,48,48,48,48,10, 49,69,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,68,49,10, 69,78,67,79,68,73,78,71,32,55,56,56,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,54,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,67,48,48,10,49,69,48,48,10,51,51,48,48,10, 48,48,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,69,68,50,10,69,78,67,79,68, 73,78,71,32,55,56,57,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,51,48,48,48,10,49,56,48, 48,10,48,48,48,48,10,49,67,48,48,10,51,54,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,68,51,10,69,78,67,79,68,73,78,71,32,55, 56,57,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,49,56,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,51,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,69,68,52, 10,69,78,67,79,68,73,78,71,32,55,56,57,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,49,67,48,48,10,48,54,48,48,10,49,67,48, 48,10,51,54,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,69,68,53,10,69,78,67,79, 68,73,78,71,32,55,56,57,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,49,67, 48,48,10,48,54,48,48,10,48,67,48,48,10,48,67,48, 48,10,49,69,48,48,10,51,51,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,69,68,54,10,69,78,67,79,68,73,78,71,32, 55,56,57,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,49,57,48,48,10,50,54, 48,48,10,49,67,48,48,10,51,54,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,68, 55,10,69,78,67,79,68,73,78,71,32,55,56,57,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,49,57,48,48,10,51,70,48,48,10,50,54, 48,48,10,48,67,48,48,10,49,69,48,48,10,51,51,48, 48,10,48,48,48,48,10,49,69,48,48,10,51,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,49,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,69,68,56,10,69,78,67, 79,68,73,78,71,32,55,56,57,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 67,48,48,10,49,69,48,48,10,51,51,48,48,10,48,48, 48,48,10,49,69,48,48,10,51,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,51,48,48,10,49,69,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,69,68,57,10,69,78,67,79,68,73,78,71, 32,55,56,57,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,49,69,48,48,10,51,51, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,69,48, 48,10,51,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,69, 68,65,10,69,78,67,79,68,73,78,71,32,55,56,57,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,68,56,48,10,49, 56,67,48,10,48,48,67,48,10,49,70,56,48,10,51,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,68,66,10,69,78, 67,79,68,73,78,71,32,55,56,57,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,51,51,48,48,10,48,49,56,48,10,48,49, 56,48,10,49,70,48,48,10,51,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,51,51,48,48,10,49,69,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,69,68,67,10,69,78,67,79,68,73,78, 71,32,55,57,48,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,49,57,56,48,10, 48,67,67,48,10,48,48,67,48,10,49,70,56,48,10,51, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,68,68,10,69,78,67,79,68,73,78,71,32,55,57,48, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,51,48,48,10,49, 57,56,48,10,48,49,56,48,10,49,70,48,48,10,51,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,48,48,10,49,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,68,69,10,69, 78,67,79,68,73,78,71,32,55,57,48,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,51,57,56,48,10,52,67,67,48,10,49,56,67,48,10, 49,70,56,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,68,70,10,69,78,67,79,68,73, 78,71,32,55,57,48,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,48,48,48,10,53,56,48,48,10, 49,66,48,48,10,51,49,56,48,10,48,49,56,48,10,49, 70,48,48,10,51,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,69,48,10,69,78,67,79,68,73,78,71,32,55,57, 48,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,51,50,48,48,10,55,70,56,48, 10,52,67,67,48,10,48,48,67,48,10,49,70,56,48,10, 51,51,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,69,49,10, 69,78,67,79,68,73,78,71,32,55,57,48,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,49,57,48,48,10,51,70,48,48,10,50,54,48,48, 10,48,48,48,48,10,48,51,48,48,10,48,49,56,48,10, 48,49,56,48,10,49,70,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,69,69,50,10,69,78,67,79,68, 73,78,71,32,55,57,48,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,49,56, 48,10,48,48,67,48,10,48,48,67,48,10,49,70,56,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,69,51,10,69,78,67,79,68,73,78,71,32,55, 57,48,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,51,48,48, 10,48,49,56,48,10,48,49,56,48,10,49,70,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,69,69,52, 10,69,78,67,79,68,73,78,71,32,55,57,48,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,69,69,53,10,69,78,67,79, 68,73,78,71,32,55,57,48,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,56,48,10,49,68,56,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,69,69,54,10,69,78,67,79,68,73,78,71,32, 55,57,49,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,49,67,48,48,10,51,54, 48,48,10,48,54,48,48,10,48,67,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,69, 55,10,69,78,67,79,68,73,78,71,32,55,57,49,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,67,48,48,10,51,54,48,48,10,48,54,48, 48,10,48,67,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,56,48,10,49,68,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,69,69,56,10,69,78,67, 79,68,73,78,71,32,55,57,49,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 52,48,48,10,48,67,48,48,10,49,57,56,48,10,49,48, 67,48,10,48,48,67,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,49,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,69,69,57,10,69,78,67,79,68,73,78,71, 32,55,57,49,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 52,48,48,10,48,67,48,48,10,49,56,48,48,10,49,49, 56,48,10,48,48,67,48,10,48,48,67,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,56,48,10, 49,68,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,69, 69,65,10,69,78,67,79,68,73,78,71,32,55,57,49,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,51,48,48,48,10,49,57,56,48,10,48, 67,67,48,10,48,48,67,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,69,66,10,69,78, 67,79,68,73,78,71,32,55,57,49,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 48,48,48,10,49,57,56,48,10,48,67,67,48,10,48,48, 67,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,51,51,56,48,10,49,68,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,69,69,67,10,69,78,67,79,68,73,78, 71,32,55,57,49,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,49,67,56,48,10, 50,54,52,48,10,48,67,67,48,10,48,57,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,69,68,10,69,78,67,79,68,73,78,71,32,55,57,49, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,67,48,48,10,50,54,56,48,10,48, 67,52,48,10,48,56,67,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,56,48,10,49,68,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,69,69,10,69, 78,67,79,68,73,78,71,32,55,57,49,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,51,50,56,48,10,55,69,52,48,10,52,67,67,48,10, 48,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,69,70,10,69,78,67,79,68,73, 78,71,32,55,57,49,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,50,48,48,10,55,69,48,48,10, 52,67,56,48,10,48,48,52,48,10,48,48,67,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,56, 48,10,49,68,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,70,48,10,69,78,67,79,68,73,78,71,32,55,57, 50,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,49,56,48,10,48,48,67,48, 10,48,48,67,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,70,49,10, 69,78,67,79,68,73,78,71,32,55,57,50,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,49,56,48,10,48,48,67,48,10, 48,48,67,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,56,48,10,49,68,56,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,89,103,114,97,118,101,10,69,78,67,79,68,73, 78,71,32,55,57,50,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,51,48,48,48,10,49,56,48,48, 10,48,67,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,51,51,48,48,10,49, 69,48,48,10,49,69,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,121,103,114, 97,118,101,10,69,78,67,79,68,73,78,71,32,55,57,50, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,48,48,48,10,49,56,48,48,10,48, 67,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,56,48,10,49,68,56,48, 10,48,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 49,69,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,70,52,10,69, 78,67,79,68,73,78,71,32,55,57,50,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,51,51,48,48,10,49, 69,48,48,10,49,69,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,70,53,10,69,78,67,79,68,73, 78,71,32,55,57,50,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,56, 48,10,49,68,56,48,10,48,49,56,48,10,51,70,48,48, 10,48,48,48,48,10,48,67,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,70,54,10,69,78,67,79,68,73,78,71,32,55,57, 50,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,49,67,48,48,10,51,54,48,48, 10,48,54,48,48,10,48,67,48,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,51,51,48,48,10,49, 69,48,48,10,49,69,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,70,55,10, 69,78,67,79,68,73,78,71,32,55,57,50,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,67,48,48,10,51,54,48,48,10,48,54,48,48,10, 48,67,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,56,48,10,49,68,56,48,10,48,49,56, 48,10,54,49,56,48,10,51,51,48,48,10,49,69,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,69,70,56,10,69,78,67,79,68, 73,78,71,32,55,57,50,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,49,57,48, 48,10,51,70,48,48,10,50,54,48,48,10,48,48,48,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 51,51,48,48,10,49,69,48,48,10,49,69,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,70,57,10,69,78,67,79,68,73,78,71,32,55, 57,50,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,57,48,48,10,51,70,48,48, 10,50,54,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,56,48,10,49,68, 56,48,10,48,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,70,48,48, 10,69,78,67,79,68,73,78,71,32,55,57,51,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,69,48, 48,10,48,50,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,68,56,48,10,54,51,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 51,56,48,10,54,53,56,48,10,51,57,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,48,49,10,69,78,67,79, 68,73,78,71,32,55,57,51,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,69,48,48,10,48,56,48, 48,10,48,54,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,68,56,48,10,54,51,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,51,56,48,10,54, 53,56,48,10,51,57,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,70,48,50,10,69,78,67,79,68,73,78,71,32, 55,57,51,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,54,48,48,10,49,51,48,48,10,54,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,51,68,56,48, 10,54,51,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,51,56,48,10,54,53,56,48,10,51, 57,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,70,48, 51,10,69,78,67,79,68,73,78,71,32,55,57,51,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,54, 48,48,10,52,51,48,48,10,51,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,51,68,56,48,10,54,51,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,51,56,48,10,54,53,56,48,10,51,57,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,70,48,52,10,69,78,67, 79,68,73,78,71,32,55,57,52,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,57,56,48,10,48,66, 48,48,10,51,54,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,68,56,48,10,54,51,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,51,56,48,10, 54,53,56,48,10,51,57,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,48,53,10,69,78,67,79,68,73,78,71, 32,55,57,52,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,49,56,48,10,52,51,48,48,10,51,54, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,68,56, 48,10,54,51,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,51,56,48,10,54,53,56,48,10, 51,57,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,70, 48,54,10,69,78,67,79,68,73,78,71,32,55,57,52,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,49,57,48,48,10,51, 70,48,48,10,50,69,48,48,10,48,50,48,48,10,48,67, 48,48,10,48,48,48,48,10,51,68,56,48,10,54,51,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,51,56,48,10,54,53,56,48,10,51,57,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,70,48,55,10,69,78, 67,79,68,73,78,71,32,55,57,52,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,49,57,48,48,10,51,70,48,48,10,50, 69,48,48,10,48,56,48,48,10,48,54,48,48,10,48,48, 48,48,10,51,68,56,48,10,54,51,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,51,56,48, 10,54,53,56,48,10,51,57,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,70,48,56,10,69,78,67,79,68,73,78, 71,32,55,57,52,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,67,54,48,48,10,52,70,48,48,10,57, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,49,57, 56,48,10,49,57,56,48,10,49,70,56,48,10,49,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,48,57,10,69,78,67,79,68,73,78,71,32,55,57,52, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 67,54,48,48,10,56,70,48,48,10,53,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,49,57, 56,48,10,49,70,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,49,57,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,70,48,65,10,69, 78,67,79,68,73,78,71,32,55,57,52,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,51,48,48,10, 53,55,56,48,10,56,67,67,48,10,48,67,67,48,10,48, 67,67,48,10,48,67,67,48,10,48,67,67,48,10,48,70, 67,48,10,48,67,67,48,10,48,67,67,48,10,48,67,67, 48,10,48,67,67,48,10,48,67,67,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,70,48,66,10,69,78,67,79,68,73, 78,71,32,55,57,52,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,51,48,48,10,57,55,56,48,10, 52,67,67,48,10,48,67,67,48,10,48,67,67,48,10,48, 67,67,48,10,48,67,67,48,10,48,70,67,48,10,48,67, 67,48,10,48,67,67,48,10,48,67,67,48,10,48,67,67, 48,10,48,67,67,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,70,48,67,10,69,78,67,79,68,73,78,71,32,55,57, 52,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,68,54,48,48,10,54,70,48,48,10,57,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,70,56,48,10,49,57,56,48,10,49,57, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,48,68,10, 69,78,67,79,68,73,78,71,32,55,57,52,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,68,54,48,48, 10,65,70,48,48,10,53,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 70,56,48,10,49,57,56,48,10,49,57,56,48,10,49,57, 56,48,10,49,57,56,48,10,49,57,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,70,48,69,10,69,78,67,79,68, 73,78,71,32,55,57,53,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,54,48,48,10,48,70,48,48, 10,68,57,56,48,10,53,57,56,48,10,57,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,49,70,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,49,57, 56,48,10,49,57,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,70,48,70,10,69,78,67,79,68,73,78,71,32,55, 57,53,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,54,48,48,10,48,70,48,48,10,68,57,56,48, 10,57,57,56,48,10,53,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,49,70,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,49,57, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,70,49,48, 10,69,78,67,79,68,73,78,71,32,55,57,53,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,69,48, 48,10,48,50,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,70,48,48,10,54,49,56,48,10, 54,48,48,48,10,51,69,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,49,56,48,10,51,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,49,49,10,69,78,67,79, 68,73,78,71,32,55,57,53,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,69,48,48,10,48,56,48, 48,10,48,54,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,70,48,48,10,54,49,56,48,10,54,48,48,48,10, 51,69,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 49,56,48,10,51,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,70,49,50,10,69,78,67,79,68,73,78,71,32, 55,57,53,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,54,48,48,10,49,51,48,48,10,54,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,51,70,48,48, 10,54,49,56,48,10,54,48,48,48,10,51,69,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,49,56,48,10,51, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,70,49, 51,10,69,78,67,79,68,73,78,71,32,55,57,53,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,54, 48,48,10,52,51,48,48,10,51,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,51,70,48,48,10,54,49,56,48, 10,54,48,48,48,10,51,69,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,49,56,48,10,51,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,70,49,52,10,69,78,67, 79,68,73,78,71,32,55,57,53,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,57,56,48,10,48,66, 48,48,10,51,54,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,70,48,48,10,54,49,56,48,10,54,48,48,48, 10,51,69,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,49,56,48,10,51,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,49,53,10,69,78,67,79,68,73,78,71, 32,55,57,53,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,49,56,48,10,52,51,48,48,10,51,54, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,70,48, 48,10,54,49,56,48,10,54,48,48,48,10,51,69,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,49,56,48,10, 51,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,70, 49,56,10,69,78,67,79,68,73,78,71,32,55,57,54,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,68, 70,56,48,10,53,56,48,48,10,57,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,70,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,70,49,57,10,69,78, 67,79,68,73,78,71,32,55,57,54,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,68,70,56,48,10,57, 56,48,48,10,53,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,70,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,70,49,65,10,69,78,67,79,68,73,78, 71,32,55,57,54,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,70,67,48,10,53,67,48,48,10,56, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,70,56,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,70,67,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,49,66,10,69,78,67,79,68,73,78,71,32,55,57,54, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,70,67,48,10,57,67,48,48,10,52,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,70, 56,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,70,67,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,70,49,67,10,69, 78,67,79,68,73,78,71,32,55,57,54,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,68,70,67,48,10, 54,67,48,48,10,56,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,70,56,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,70,67,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,70,49,68,10,69,78,67,79,68,73, 78,71,32,55,57,54,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,68,70,67,48,10,65,67,48,48,10, 52,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,70,56,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,70,67,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,70,50,48,10,69,78,67,79,68,73,78,71,32,55,57, 54,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,69,48,48,10,48,50,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,69,48,48,10,55, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,50,49,10, 69,78,67,79,68,73,78,71,32,55,57,54,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,69,48,48, 10,48,56,48,48,10,48,54,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,69,48,48,10,55,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,70,50,50,10,69,78,67,79,68, 73,78,71,32,55,57,55,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,54,48,48,10,49,51,48,48, 10,54,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 54,69,48,48,10,55,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,70,50,51,10,69,78,67,79,68,73,78,71,32,55, 57,55,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,54,48,48,10,52,51,48,48,10,51,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,54,69,48,48,10, 55,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,70,50,52, 10,69,78,67,79,68,73,78,71,32,55,57,55,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,57,56, 48,10,48,66,48,48,10,51,54,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,69,48,48,10,55,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,50,53,10,69,78,67,79, 68,73,78,71,32,55,57,55,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,49,56,48,10,52,51,48, 48,10,51,54,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,69,48,48,10,55,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,70,50,54,10,69,78,67,79,68,73,78,71,32, 55,57,55,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,49,57, 48,48,10,51,70,48,48,10,50,69,48,48,10,48,50,48, 48,10,48,67,48,48,10,48,48,48,48,10,54,69,48,48, 10,55,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,70,50, 55,10,69,78,67,79,68,73,78,71,32,55,57,55,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,49,57,48,48,10,51,70, 48,48,10,50,69,48,48,10,48,56,48,48,10,48,54,48, 48,10,48,48,48,48,10,54,69,48,48,10,55,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,70,50,56,10,69,78,67, 79,68,73,78,71,32,55,57,55,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,68,57,56,48,10,53,57, 56,48,10,57,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,49,70,56,48,10,49,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,50,57,10,69,78,67,79,68,73,78,71, 32,55,57,55,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,68,57,56,48,10,57,57,56,48,10,53,57, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,70,56,48,10,49,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,70, 50,65,10,69,78,67,79,68,73,78,71,32,55,57,55,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 67,67,48,10,53,67,67,48,10,56,67,67,48,10,48,67, 67,48,10,48,67,67,48,10,48,67,67,48,10,48,70,67, 48,10,48,67,67,48,10,48,67,67,48,10,48,67,67,48, 10,48,67,67,48,10,48,67,67,48,10,48,67,67,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,70,50,66,10,69,78, 67,79,68,73,78,71,32,55,57,55,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,67,67,48,10,57, 67,67,48,10,52,67,67,48,10,48,67,67,48,10,48,67, 67,48,10,48,67,67,48,10,48,70,67,48,10,48,67,67, 48,10,48,67,67,48,10,48,67,67,48,10,48,67,67,48, 10,48,67,67,48,10,48,67,67,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,70,50,67,10,69,78,67,79,68,73,78, 71,32,55,57,56,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,68,67,67,48,10,54,67,67,48,10,56, 67,67,48,10,48,67,67,48,10,48,67,67,48,10,48,67, 67,48,10,48,70,67,48,10,48,67,67,48,10,48,67,67, 48,10,48,67,67,48,10,48,67,67,48,10,48,67,67,48, 10,48,67,67,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,50,68,10,69,78,67,79,68,73,78,71,32,55,57,56, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 68,67,67,48,10,65,67,67,48,10,52,67,67,48,10,48, 67,67,48,10,48,67,67,48,10,48,67,67,48,10,48,70, 67,48,10,48,67,67,48,10,48,67,67,48,10,48,67,67, 48,10,48,67,67,48,10,48,67,67,48,10,48,67,67,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,70,50,69,10,69, 78,67,79,68,73,78,71,32,55,57,56,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,57,56,48,10, 49,57,56,48,10,68,57,56,48,10,53,57,56,48,10,57, 57,56,48,10,49,57,56,48,10,49,70,56,48,10,49,57, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,70,50,70,10,69,78,67,79,68,73, 78,71,32,55,57,56,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,70,57,56,48,10,49,57,56,48,10, 68,57,56,48,10,57,57,56,48,10,53,57,56,48,10,49, 57,56,48,10,49,70,56,48,10,49,57,56,48,10,49,57, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,70,51,48,10,69,78,67,79,68,73,78,71,32,55,57, 56,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,67,48,48,10,48,52,48,48,10,49,56,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,66,48,48,10,48,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,51,49,10, 69,78,67,79,68,73,78,71,32,55,57,56,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,67,48,48, 10,49,48,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,66,48,48,10,48,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,70,51,50,10,69,78,67,79,68, 73,78,71,32,55,57,56,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,54,48,48,10,49,51,48,48, 10,54,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,66, 48,48,10,48,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,70,51,51,10,69,78,67,79,68,73,78,71,32,55, 57,56,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,54,48,48,10,52,51,48,48,10,51,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,66,48,48,10,48,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,70,51,52, 10,69,78,67,79,68,73,78,71,32,55,57,56,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,51,48, 48,10,49,54,48,48,10,54,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,66,48,48,10,48,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,51,53,10,69,78,67,79, 68,73,78,71,32,55,57,56,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,49,56,48,10,52,51,48, 48,10,51,54,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 66,48,48,10,48,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,70,51,54,10,69,78,67,79,68,73,78,71,32, 55,57,57,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,51,50, 48,48,10,55,69,48,48,10,53,67,48,48,10,48,52,48, 48,10,49,56,48,48,10,48,48,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,66,48,48,10,48, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,70,51, 55,10,69,78,67,79,68,73,78,71,32,55,57,57,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,51,50,48,48,10,55,69, 48,48,10,53,67,48,48,10,49,48,48,48,10,48,67,48, 48,10,48,48,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,66,48,48,10,48,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,70,51,56,10,69,78,67, 79,68,73,78,71,32,55,57,57,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,68,69,48,48,10,52,67, 48,48,10,56,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,49,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,51,57,10,69,78,67,79,68,73,78,71, 32,55,57,57,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,68,69,48,48,10,56,67,48,48,10,52,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,70, 51,65,10,69,78,67,79,68,73,78,71,32,55,57,57,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 55,56,48,10,53,51,48,48,10,56,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,55,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,70,51,66,10,69,78, 67,79,68,73,78,71,32,55,57,57,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,55,56,48,10,57, 51,48,48,10,52,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,55,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,70,51,67,10,69,78,67,79,68,73,78, 71,32,55,57,57,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,68,55,56,48,10,54,51,48,48,10,56, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,55,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,51,68,10,69,78,67,79,68,73,78,71,32,55,57,57, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 68,55,56,48,10,65,51,48,48,10,52,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,55,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,70,51,69,10,69, 78,67,79,68,73,78,71,32,55,57,57,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,70,48,48,10, 48,54,48,48,10,67,54,48,48,10,52,54,48,48,10,56, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,70,51,70,10,69,78,67,79,68,73, 78,71,32,55,57,57,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,68,69,48,48,10,48,67,48,48,10, 67,67,48,48,10,56,67,48,48,10,52,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,70,52,48,10,69,78,67,79,68,73,78,71,32,56,48, 48,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,69,48,48,10,48,50,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,69,48,48,10,51, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,52,49,10, 69,78,67,79,68,73,78,71,32,56,48,48,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,69,48,48, 10,48,56,48,48,10,48,54,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,70,52,50,10,69,78,67,79,68, 73,78,71,32,56,48,48,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,54,48,48,10,49,51,48,48, 10,54,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 49,69,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,70,52,51,10,69,78,67,79,68,73,78,71,32,56, 48,48,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,54,48,48,10,52,51,48,48,10,51,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,70,52,52, 10,69,78,67,79,68,73,78,71,32,56,48,48,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,57,56, 48,10,48,66,48,48,10,51,54,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,52,53,10,69,78,67,79, 68,73,78,71,32,56,48,48,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,49,56,48,10,52,51,48, 48,10,51,54,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,70,52,56,10,69,78,67,79,68,73,78,71,32, 56,48,48,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,67,54,48,48,10,52,70,48,48,10,57,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,48,70,48,48,10,48, 54,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,70,52, 57,10,69,78,67,79,68,73,78,71,32,56,48,48,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,67,54, 48,48,10,56,70,48,48,10,53,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,48,70,48,48,10,48,54,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,70,52,65,10,69,78,67, 79,68,73,78,71,32,56,48,49,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,51,48,48,10,53,55, 56,48,10,56,52,67,48,10,48,67,67,48,10,48,67,67, 48,10,48,67,67,48,10,48,67,67,48,10,48,67,67,48, 10,48,67,67,48,10,48,67,67,48,10,48,67,67,48,10, 48,55,56,48,10,48,51,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,52,66,10,69,78,67,79,68,73,78,71, 32,56,48,49,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,51,48,48,10,57,55,56,48,10,52,67, 67,48,10,48,67,67,48,10,48,67,67,48,10,48,67,67, 48,10,48,67,67,48,10,48,67,67,48,10,48,67,67,48, 10,48,67,67,48,10,48,67,67,48,10,48,55,56,48,10, 48,51,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,70, 52,67,10,69,78,67,79,68,73,78,71,32,56,48,49,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,68, 51,48,48,10,54,55,56,48,10,56,67,67,48,10,48,67, 67,48,10,48,67,67,48,10,48,67,67,48,10,48,67,67, 48,10,48,67,67,48,10,48,67,67,48,10,48,67,67,48, 10,48,67,67,48,10,48,55,56,48,10,48,51,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,70,52,68,10,69,78, 67,79,68,73,78,71,32,56,48,49,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,68,51,48,48,10,65, 55,56,48,10,52,67,67,48,10,48,67,67,48,10,48,67, 67,48,10,48,67,67,48,10,48,67,67,48,10,48,67,67, 48,10,48,67,67,48,10,48,67,67,48,10,48,67,67,48, 10,48,55,56,48,10,48,51,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,70,53,48,10,69,78,67,79,68,73,78, 71,32,56,48,49,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,69,48,48,10,48,50,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,53,49,10,69,78,67,79,68,73,78,71,32,56,48,49, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,69,48,48,10,48,56,48,48,10,48,54,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,48,48,10,49,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,70,53,50,10,69, 78,67,79,68,73,78,71,32,56,48,49,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,54,48,48,10, 49,51,48,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,70,53,51,10,69,78,67,79,68,73, 78,71,32,56,48,49,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,54,48,48,10,52,51,48,48,10, 51,49,56,48,10,48,48,48,48,10,48,48,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,70,53,52,10,69,78,67,79,68,73,78,71,32,56,48, 50,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,57,56,48,10,48,66,48,48,10,51,54,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,53,53,10, 69,78,67,79,68,73,78,71,32,56,48,50,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,49,56,48, 10,52,51,48,48,10,51,54,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,70,53,54,10,69,78,67,79,68, 73,78,71,32,56,48,50,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,49,57,48,48,10,51,70,48,48,10,50,69,48,48, 10,48,50,48,48,10,48,67,48,48,10,48,48,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,70,53,55,10,69,78,67,79,68,73,78,71,32,56, 48,50,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,49,57,48, 48,10,51,70,48,48,10,50,69,48,48,10,48,56,48,48, 10,48,54,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,70,53,57, 10,69,78,67,79,68,73,78,71,32,56,48,50,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,68,57,56, 48,10,57,57,56,48,10,53,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,48,70,48,48,10,48,70,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,53,66,10,69,78,67,79, 68,73,78,71,32,56,48,50,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,67,67,48,10,57,67,67, 48,10,52,67,67,48,10,48,67,67,48,10,48,67,67,48, 10,48,55,56,48,10,48,55,56,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,70,53,68,10,69,78,67,79,68,73,78,71,32, 56,48,50,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,68,67,67,48,10,65,67,67,48,10,52,67,67, 48,10,48,67,67,48,10,48,67,67,48,10,48,55,56,48, 10,48,55,56,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,70,53, 70,10,69,78,67,79,68,73,78,71,32,56,48,51,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,67, 67,48,10,48,67,67,48,10,67,67,67,48,10,56,67,67, 48,10,52,67,67,48,10,48,55,56,48,10,48,55,56,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,70,54,48,10,69,78,67, 79,68,73,78,71,32,56,48,51,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,69,48,48,10,48,50, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 55,70,56,48,10,51,51,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,54,49,10,69,78,67,79,68,73,78,71, 32,56,48,51,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,69,48,48,10,48,56,48,48,10,48,54, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,55,70,56,48,10, 51,51,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,70, 54,50,10,69,78,67,79,68,73,78,71,32,56,48,51,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 54,48,48,10,49,51,48,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,54,49,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,55,70,56,48,10,51,51,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,70,54,51,10,69,78, 67,79,68,73,78,71,32,56,48,51,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,54,48,48,10,52, 51,48,48,10,51,49,56,48,10,48,48,48,48,10,48,48, 48,48,10,54,49,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,55,70,56,48,10,51,51,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,70,54,52,10,69,78,67,79,68,73,78, 71,32,56,48,51,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,57,56,48,10,48,66,48,48,10,51, 54,48,48,10,48,48,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,55,70,56,48, 10,51,51,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,54,53,10,69,78,67,79,68,73,78,71,32,56,48,51, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,49,56,48,10,52,51,48,48,10,51,54,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,55,70,56,48,10,51,51,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,70,54,54,10,69, 78,67,79,68,73,78,71,32,56,48,51,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,49,57,48,48,10,51,70,48,48,10, 50,69,48,48,10,48,50,48,48,10,48,67,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,55,70,56,48,10,51,51,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,70,54,55,10,69,78,67,79,68,73, 78,71,32,56,48,51,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,49,57,48,48,10,51,70,48,48,10,50,69,48,48,10, 48,56,48,48,10,48,54,48,48,10,48,48,48,48,10,54, 49,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,55,70,56, 48,10,51,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,70,54,56,10,69,78,67,79,68,73,78,71,32,56,48, 52,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,67,54,48,48,10,52,70,48,48,10,57,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,49,57, 56,48,10,48,70,48,48,10,48,54,48,48,10,49,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,54,57,10, 69,78,67,79,68,73,78,71,32,56,48,52,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,67,54,48,48, 10,56,70,48,48,10,53,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,48,70, 48,48,10,48,54,48,48,10,49,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,70,54,65,10,69,78,67,79,68, 73,78,71,32,56,48,52,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,51,48,48,10,53,55,56,48, 10,56,67,67,48,10,48,67,67,48,10,48,67,67,48,10, 48,67,67,48,10,48,67,67,48,10,48,67,67,48,10,48, 67,67,48,10,48,67,67,48,10,48,55,56,48,10,48,51, 48,48,10,48,70,67,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,70,54,66,10,69,78,67,79,68,73,78,71,32,56, 48,52,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,51,48,48,10,57,55,56,48,10,52,67,67,48, 10,48,67,67,48,10,48,67,67,48,10,48,67,67,48,10, 48,67,67,48,10,48,67,67,48,10,48,67,67,48,10,48, 67,67,48,10,48,55,56,48,10,48,51,48,48,10,48,70, 67,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,70,54,67, 10,69,78,67,79,68,73,78,71,32,56,48,52,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,68,51,48, 48,10,54,55,56,48,10,56,67,67,48,10,48,67,67,48, 10,48,67,67,48,10,48,67,67,48,10,48,67,67,48,10, 48,67,67,48,10,48,67,67,48,10,48,67,67,48,10,48, 55,56,48,10,48,51,48,48,10,48,70,67,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,54,68,10,69,78,67,79, 68,73,78,71,32,56,48,52,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,68,51,48,48,10,65,55,56, 48,10,52,67,67,48,10,48,67,67,48,10,48,67,67,48, 10,48,67,67,48,10,48,67,67,48,10,48,67,67,48,10, 48,67,67,48,10,48,67,67,48,10,48,55,56,48,10,48, 51,48,48,10,48,70,67,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,70,54,69,10,69,78,67,79,68,73,78,71,32, 56,48,52,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,54,48,48,10,48,70,48,48,10,68,57,56, 48,10,53,57,56,48,10,57,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,48,70,48,48,10,48,54,48,48,10,49, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,70,54, 70,10,69,78,67,79,68,73,78,71,32,56,48,52,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,54, 48,48,10,48,70,48,48,10,68,57,56,48,10,57,57,56, 48,10,53,57,56,48,10,49,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 48,70,48,48,10,48,54,48,48,10,49,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,70,55,48,10,69,78,67, 79,68,73,78,71,32,56,48,52,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,48,48,48,10,49,56, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,68,56,48,10,54,51,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,51,56,48,10, 54,53,56,48,10,51,57,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,55,49,10,69,78,67,79,68,73,78,71, 32,56,48,52,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,51,48,48,10,48,54,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,68,56, 48,10,54,51,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,51,56,48,10,54,53,56,48,10, 51,57,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,70, 55,50,10,69,78,67,79,68,73,78,71,32,56,48,53,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 48,48,48,10,49,56,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,70,48,48,10,54,49,56, 48,10,54,48,48,48,10,51,69,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,49,56,48,10,51,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,70,55,51,10,69,78, 67,79,68,73,78,71,32,56,48,53,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,51,48,48,10,48, 54,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,70,48,48,10,54,49,56,48,10,54,48,48, 48,10,51,69,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,49,56,48,10,51,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,70,55,52,10,69,78,67,79,68,73,78, 71,32,56,48,53,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,48,48,48,10,49,56,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,54,69, 48,48,10,55,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,55,53,10,69,78,67,79,68,73,78,71,32,56,48,53, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,51,48,48,10,48,54,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,69,48,48,10,55,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,70,55,54,10,69, 78,67,79,68,73,78,71,32,56,48,53,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,48,48,48,10, 51,48,48,48,10,49,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,66,48,48,10,48,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,70,55,55,10,69,78,67,79,68,73, 78,71,32,56,48,53,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,54,48,48,10,48,67,48,48,10, 49,56,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,66,48, 48,10,48,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,70,55,56,10,69,78,67,79,68,73,78,71,32,56,48, 53,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,48,48,48,10,49,56,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,69,48,48,10,51, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,55,57,10, 69,78,67,79,68,73,78,71,32,56,48,53,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,51,48,48, 10,48,54,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,70,55,65,10,69,78,67,79,68, 73,78,71,32,56,48,53,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,48,48,48,10,49,56,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,70,55,66,10,69,78,67,79,68,73,78,71,32,56, 48,53,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,51,48,48,10,48,54,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,70,55,67, 10,69,78,67,79,68,73,78,71,32,56,48,54,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,48,48, 48,10,49,56,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,55,70,56,48,10,51,51,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,55,68,10,69,78,67,79, 68,73,78,71,32,56,48,54,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,51,48,48,10,48,54,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,49,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,55, 70,56,48,10,51,51,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,70,56,48,10,69,78,67,79,68,73,78,71,32, 56,48,54,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,69,48,48,10,48,50,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,68,56,48, 10,54,51,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,51,56,48,10,54,53,56,48,10,51, 57,56,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,54,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,70,56, 49,10,69,78,67,79,68,73,78,71,32,56,48,54,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,69, 48,48,10,48,56,48,48,10,48,54,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,68,56,48,10,54,51,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,51,56,48,10,54,53,56,48,10,51,57,56,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,54, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,70,56,50,10,69,78,67, 79,68,73,78,71,32,56,48,54,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,54,48,48,10,49,51, 48,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,51,68,56,48,10,54,51,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,51,56,48,10, 54,53,56,48,10,51,57,56,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,54,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,56,51,10,69,78,67,79,68,73,78,71, 32,56,48,54,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,54,48,48,10,52,51,48,48,10,51,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,51,68,56, 48,10,54,51,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,51,56,48,10,54,53,56,48,10, 51,57,56,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,54,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,70, 56,52,10,69,78,67,79,68,73,78,71,32,56,48,54,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 57,56,48,10,48,66,48,48,10,51,54,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,68,56,48,10,54,51,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,51,56,48,10,54,53,56,48,10,51,57,56,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 54,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,70,56,53,10,69,78, 67,79,68,73,78,71,32,56,48,54,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,49,56,48,10,52, 51,48,48,10,51,54,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,68,56,48,10,54,51,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,51,56,48, 10,54,53,56,48,10,51,57,56,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,54,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,70,56,54,10,69,78,67,79,68,73,78, 71,32,56,48,55,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 49,57,48,48,10,51,70,48,48,10,50,69,48,48,10,48, 50,48,48,10,48,67,48,48,10,48,48,48,48,10,51,68, 56,48,10,54,51,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,51,56,48,10,54,53,56,48, 10,51,57,56,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,54,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,56,55,10,69,78,67,79,68,73,78,71,32,56,48,55, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,49,57,48,48,10, 51,70,48,48,10,50,69,48,48,10,48,56,48,48,10,48, 54,48,48,10,48,48,48,48,10,51,68,56,48,10,54,51, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,51,56,48,10,54,53,56,48,10,51,57,56,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,54,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,70,56,56,10,69, 78,67,79,68,73,78,71,32,56,48,55,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,67,54,48,48,10, 52,70,48,48,10,57,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,49,70, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,48,48,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,51,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,70,56,57,10,69,78,67,79,68,73, 78,71,32,56,48,55,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,67,54,48,48,10,56,70,48,48,10, 53,57,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,70,56,48,10,49,57, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,48,48,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,51,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,70,56,65,10,69,78,67,79,68,73,78,71,32,56,48, 55,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,51,48,48,10,53,55,56,48,10,56,67,67,48,10, 48,67,67,48,10,48,67,67,48,10,48,67,67,48,10,48, 67,67,48,10,48,70,67,48,10,48,67,67,48,10,48,67, 67,48,10,48,67,67,48,10,48,67,67,48,10,48,67,67, 48,10,48,48,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,49,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,56,66,10, 69,78,67,79,68,73,78,71,32,56,48,55,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,51,48,48, 10,57,55,56,48,10,52,67,67,48,10,48,67,67,48,10, 48,67,67,48,10,48,67,67,48,10,48,67,67,48,10,48, 70,67,48,10,48,67,67,48,10,48,67,67,48,10,48,67, 67,48,10,48,67,67,48,10,48,67,67,48,10,48,48,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,49,56,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,70,56,67,10,69,78,67,79,68, 73,78,71,32,56,48,55,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,68,54,48,48,10,54,70,48,48, 10,57,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,49,70,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,49,57, 56,48,10,49,57,56,48,10,48,48,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,51,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,70,56,68,10,69,78,67,79,68,73,78,71,32,56, 48,55,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,68,54,48,48,10,65,70,48,48,10,53,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,49,70,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,49,57, 56,48,10,48,48,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,51,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,70,56,69, 10,69,78,67,79,68,73,78,71,32,56,48,55,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,54,48, 48,10,48,70,48,48,10,68,57,56,48,10,53,57,56,48, 10,57,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,70,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,48,48, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,51,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,56,70,10,69,78,67,79, 68,73,78,71,32,56,48,55,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,54,48,48,10,48,70,48, 48,10,68,57,56,48,10,57,57,56,48,10,53,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,70,56,48,10, 49,57,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,48,48,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,51,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,70,57,48,10,69,78,67,79,68,73,78,71,32, 56,48,56,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,69,48,48,10,48,50,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,69,48,48, 10,55,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,48,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,49,56,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,70,57, 49,10,69,78,67,79,68,73,78,71,32,56,48,56,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,69, 48,48,10,48,56,48,48,10,48,54,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,69,48,48,10,55,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,48, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,49, 56,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,70,57,50,10,69,78,67, 79,68,73,78,71,32,56,48,56,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,54,48,48,10,49,51, 48,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,54,69,48,48,10,55,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,48,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,49,56,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,57,51,10,69,78,67,79,68,73,78,71, 32,56,48,56,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,54,48,48,10,52,51,48,48,10,51,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,54,69,48, 48,10,55,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,48,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,49,56,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,70, 57,52,10,69,78,67,79,68,73,78,71,32,56,48,56,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 57,56,48,10,48,66,48,48,10,51,54,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,69,48,48,10,55,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 49,56,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,70,57,53,10,69,78, 67,79,68,73,78,71,32,56,48,56,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,49,56,48,10,52, 51,48,48,10,51,54,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,69,48,48,10,55,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,48,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,49,56,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,70,57,54,10,69,78,67,79,68,73,78, 71,32,56,48,56,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 49,57,48,48,10,51,70,48,48,10,50,69,48,48,10,48, 50,48,48,10,48,67,48,48,10,48,48,48,48,10,54,69, 48,48,10,55,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,48,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,51,49,56,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,57,55,10,69,78,67,79,68,73,78,71,32,56,48,56, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,49,57,48,48,10, 51,70,48,48,10,50,69,48,48,10,48,56,48,48,10,48, 54,48,48,10,48,48,48,48,10,54,69,48,48,10,55,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,48,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,49,56,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,70,57,56,10,69, 78,67,79,68,73,78,71,32,56,48,56,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,68,57,56,48,10, 53,57,56,48,10,57,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,70,56,48,10,49,57, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,48,48,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,51,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,70,57,57,10,69,78,67,79,68,73, 78,71,32,56,48,56,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,68,57,56,48,10,57,57,56,48,10, 53,57,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,70,56,48,10,49,57,56,48,10,49,57, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,48,48,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,51,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,70,57,65,10,69,78,67,79,68,73,78,71,32,56,48, 57,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,67,67,48,10,53,67,67,48,10,56,67,67,48,10, 48,67,67,48,10,48,67,67,48,10,48,67,67,48,10,48, 70,67,48,10,48,67,67,48,10,48,67,67,48,10,48,67, 67,48,10,48,67,67,48,10,48,67,67,48,10,48,67,67, 48,10,48,48,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,49,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,57,66,10, 69,78,67,79,68,73,78,71,32,56,48,57,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,67,67,48, 10,57,67,67,48,10,52,67,67,48,10,48,67,67,48,10, 48,67,67,48,10,48,67,67,48,10,48,70,67,48,10,48, 67,67,48,10,48,67,67,48,10,48,67,67,48,10,48,67, 67,48,10,48,67,67,48,10,48,67,67,48,10,48,48,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,49,56,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,70,57,67,10,69,78,67,79,68, 73,78,71,32,56,48,57,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,68,67,67,48,10,54,67,67,48, 10,56,67,67,48,10,48,67,67,48,10,48,67,67,48,10, 48,67,67,48,10,48,70,67,48,10,48,67,67,48,10,48, 67,67,48,10,48,67,67,48,10,48,67,67,48,10,48,67, 67,48,10,48,67,67,48,10,48,48,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,49,56,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,70,57,68,10,69,78,67,79,68,73,78,71,32,56, 48,57,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,68,67,67,48,10,65,67,67,48,10,52,67,67,48, 10,48,67,67,48,10,48,67,67,48,10,48,67,67,48,10, 48,70,67,48,10,48,67,67,48,10,48,67,67,48,10,48, 67,67,48,10,48,67,67,48,10,48,67,67,48,10,48,67, 67,48,10,48,48,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,49,56,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,70,57,69, 10,69,78,67,79,68,73,78,71,32,56,48,57,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,70,57,56, 48,10,49,57,56,48,10,68,57,56,48,10,53,57,56,48, 10,57,57,56,48,10,49,57,56,48,10,49,70,56,48,10, 49,57,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,48,48, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,51,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,57,70,10,69,78,67,79, 68,73,78,71,32,56,48,57,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,70,57,56,48,10,49,57,56, 48,10,68,57,56,48,10,57,57,56,48,10,53,57,56,48, 10,49,57,56,48,10,49,70,56,48,10,49,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,48,48,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,51,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,70,65,48,10,69,78,67,79,68,73,78,71,32, 56,48,57,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,69,48,48,10,48,50,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,49,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,55,70,56,48,10,51, 51,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,54,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,70,65, 49,10,69,78,67,79,68,73,78,71,32,56,48,57,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,69, 48,48,10,48,56,48,48,10,48,54,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,49,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,55,70,56,48,10,51,51,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,54, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,70,65,50,10,69,78,67, 79,68,73,78,71,32,56,48,57,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,54,48,48,10,49,51, 48,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 55,70,56,48,10,51,51,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,54,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,65,51,10,69,78,67,79,68,73,78,71, 32,56,48,57,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,54,48,48,10,52,51,48,48,10,51,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,55,70,56,48,10, 51,51,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,54,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,70, 65,52,10,69,78,67,79,68,73,78,71,32,56,49,48,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 57,56,48,10,48,66,48,48,10,51,54,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,49,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,55,70,56,48,10,51,51,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 54,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,70,65,53,10,69,78, 67,79,68,73,78,71,32,56,49,48,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,49,56,48,10,52, 51,48,48,10,51,54,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,49,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,55,70,56,48,10,51,51,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,54,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,70,65,54,10,69,78,67,79,68,73,78, 71,32,56,49,48,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 49,57,48,48,10,51,70,48,48,10,50,69,48,48,10,48, 50,48,48,10,48,67,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,55,70,56,48, 10,51,51,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,54,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,65,55,10,69,78,67,79,68,73,78,71,32,56,49,48, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,49,57,48,48,10, 51,70,48,48,10,50,69,48,48,10,48,56,48,48,10,48, 54,48,48,10,48,48,48,48,10,54,49,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,55,70,56,48,10,51,51,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,54,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,70,65,56,10,69, 78,67,79,68,73,78,71,32,56,49,48,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,67,54,48,48,10, 52,70,48,48,10,57,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,49,57, 56,48,10,49,57,56,48,10,49,57,56,48,10,48,70,48, 48,10,48,54,48,48,10,49,70,56,48,10,48,48,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,51,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,70,65,57,10,69,78,67,79,68,73, 78,71,32,56,49,48,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,67,54,48,48,10,56,70,48,48,10, 53,57,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,49,57, 56,48,10,49,57,56,48,10,48,70,48,48,10,48,54,48, 48,10,49,70,56,48,10,48,48,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,51,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,70,65,65,10,69,78,67,79,68,73,78,71,32,56,49, 48,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,51,48,48,10,53,55,56,48,10,56,67,67,48,10, 48,67,67,48,10,48,67,67,48,10,48,67,67,48,10,48, 67,67,48,10,48,67,67,48,10,48,67,67,48,10,48,67, 67,48,10,48,55,56,48,10,48,51,48,48,10,48,70,67, 48,10,48,48,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,49,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,65,66,10, 69,78,67,79,68,73,78,71,32,56,49,48,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,51,48,48, 10,57,55,56,48,10,52,67,67,48,10,48,67,67,48,10, 48,67,67,48,10,48,67,67,48,10,48,67,67,48,10,48, 67,67,48,10,48,67,67,48,10,48,67,67,48,10,48,55, 56,48,10,48,51,48,48,10,48,70,67,48,10,48,48,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,49,56,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,70,65,67,10,69,78,67,79,68, 73,78,71,32,56,49,48,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,68,51,48,48,10,54,55,56,48, 10,56,67,67,48,10,48,67,67,48,10,48,67,67,48,10, 48,67,67,48,10,48,67,67,48,10,48,67,67,48,10,48, 67,67,48,10,48,67,67,48,10,48,55,56,48,10,48,51, 48,48,10,48,70,67,48,10,48,48,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,49,56,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,70,65,68,10,69,78,67,79,68,73,78,71,32,56, 49,48,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,68,51,48,48,10,65,55,56,48,10,52,67,67,48, 10,48,67,67,48,10,48,67,67,48,10,48,67,67,48,10, 48,67,67,48,10,48,67,67,48,10,48,67,67,48,10,48, 67,67,48,10,48,55,56,48,10,48,51,48,48,10,48,70, 67,48,10,48,48,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,49,56,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,70,65,69, 10,69,78,67,79,68,73,78,71,32,56,49,49,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,54,48, 48,10,48,70,48,48,10,68,57,56,48,10,53,57,56,48, 10,57,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,49,57,56,48,10,48, 70,48,48,10,48,54,48,48,10,49,70,56,48,10,48,48, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,51,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,65,70,10,69,78,67,79, 68,73,78,71,32,56,49,49,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,54,48,48,10,48,70,48, 48,10,68,57,56,48,10,57,57,56,48,10,53,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,48,70,48,48,10,48, 54,48,48,10,49,70,56,48,10,48,48,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,51,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,70,66,48,10,69,78,67,79,68,73,78,71,32, 56,49,49,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,50,49,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,68,56,48, 10,54,51,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,51,56,48,10,54,53,56,48,10,51, 57,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,70,66, 49,10,69,78,67,79,68,73,78,71,32,56,49,49,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,68,56,48,10,54,51,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,51,56,48,10,54,53,56,48,10,51,57,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,70,66,50,10,69,78,67, 79,68,73,78,71,32,56,49,49,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,48,48,48,10,49,56, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,68,56,48,10,54,51,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,51,56,48,10, 54,53,56,48,10,51,57,56,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,54,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,66,51,10,69,78,67,79,68,73,78,71, 32,56,49,49,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,68,56, 48,10,54,51,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,51,56,48,10,54,53,56,48,10, 51,57,56,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,54,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,70, 66,52,10,69,78,67,79,68,73,78,71,32,56,49,49,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 51,48,48,10,48,54,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,68,56,48,10,54,51,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,51,56,48,10,54,53,56,48,10,51,57,56,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 54,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,70,66,54,10,69,78, 67,79,68,73,78,71,32,56,49,49,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,57,48,48,10,51, 70,48,48,10,50,54,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,68,56,48,10,54,51,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,51,56,48, 10,54,53,56,48,10,51,57,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,70,66,55,10,69,78,67,79,68,73,78, 71,32,56,49,49,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,57,48,48,10,51,70,48,48,10,50, 54,48,48,10,48,48,48,48,10,48,48,48,48,10,51,68, 56,48,10,54,51,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,51,56,48,10,54,53,56,48, 10,51,57,56,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,54,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,66,56,10,69,78,67,79,68,73,78,71,32,56,49,50, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,50,49,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,69,48,48,10,51, 51,48,48,10,51,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,55,70,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,70,66,57,10,69, 78,67,79,68,73,78,71,32,56,49,50,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,51,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,49,69,48,48,10,51,51,48,48,10,51, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,55,70,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,70,66,65,10,69,78,67,79,68,73, 78,71,32,56,49,50,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,56,54,48,48,10,67,70,48,48,10, 55,57,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,70,56,48,10,49,57, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,70,66,66,10,69,78,67,79,68,73,78,71,32,56,49, 50,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,54,48,48,10,54,70,48,48,10,53,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,70,56,48,10,49,57,56,48,10,49,57, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,66,67,10, 69,78,67,79,68,73,78,71,32,56,49,50,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,49,69,48,48,10,51,51,48,48,10,51,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,55, 70,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,54,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,70,66,68,10,69,78,67,79,68, 73,78,71,32,56,49,50,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,67,48,48,10,48,52,48,48, 10,49,56,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,70,66,69,10,69,78,67,79,68,73,78,71,32,56, 49,50,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,65,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,70,66,70, 10,69,78,67,79,68,73,78,71,32,56,49,50,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,67,48, 48,10,48,52,48,48,10,49,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,67,48,10,69,78,67,79, 68,73,78,71,32,56,49,50,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,57,48,48,10,51,70,48, 48,10,50,54,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,70,67,49,10,69,78,67,79,68,73,78,71,32, 56,49,50,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,57,48,48,10,51,70,48,48,10,50,54,48, 48,10,51,51,48,48,10,51,51,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,70,67, 50,10,69,78,67,79,68,73,78,71,32,56,49,51,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,48, 48,48,10,49,56,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,69,48,48,10,55,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,48, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,49, 56,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,70,67,51,10,69,78,67, 79,68,73,78,71,32,56,49,51,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,69,48,48,10,55,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,48,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,49,56,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,67,52,10,69,78,67,79,68,73,78,71, 32,56,49,51,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,51,48,48,10,48,54,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,69,48, 48,10,55,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,48,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,49,56,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,70, 67,54,10,69,78,67,79,68,73,78,71,32,56,49,51,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 57,48,48,10,51,70,48,48,10,50,54,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,69,48,48,10,55,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,70,67,55,10,69,78, 67,79,68,73,78,71,32,56,49,51,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,57,48,48,10,51, 70,48,48,10,50,54,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,69,48,48,10,55,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,48,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,49,56,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,70,67,56,10,69,78,67,79,68,73,78, 71,32,56,49,51,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,68,70,56,48,10,55,56,48,48,10,51, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,70,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,67,57,10,69,78,67,79,68,73,78,71,32,56,49,51, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,68,56,48,48,10,57,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,70, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,70,67,65,10,69, 78,67,79,68,73,78,71,32,56,49,51,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,68,57,56,48,10, 55,57,56,48,10,51,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,70,56,48,10,49,57, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,70,67,66,10,69,78,67,79,68,73, 78,71,32,56,49,51,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,57,56,48,10,68,57,56,48,10, 57,57,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,70,56,48,10,49,57,56,48,10,49,57, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,70,67,67,10,69,78,67,79,68,73,78,71,32,56,49, 52,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,55, 70,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,54,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,67,68,10, 69,78,67,79,68,73,78,71,32,56,49,52,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,54,48,48, 10,49,51,48,48,10,54,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,70,67,69,10,69,78,67,79,68, 73,78,71,32,56,49,52,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,57,56,48,10,48,66,48,48, 10,51,54,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,70,67,70,10,69,78,67,79,68,73,78,71,32,56, 49,52,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,57,48,48,10,51,70,48,48,10,50,69,48,48, 10,48,50,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,70,68,48, 10,69,78,67,79,68,73,78,71,32,56,49,52,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,52,50,48, 48,10,51,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,66,48,48,10,48,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,68,49,10,69,78,67,79, 68,73,78,71,32,56,49,52,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 66,48,48,10,48,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,70,68,50,10,69,78,67,79,68,73,78,71,32, 56,49,52,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,56,48,48,10,54,68,56,48,10,54,55,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,68,56,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,70,68, 51,10,69,78,67,79,68,73,78,71,32,56,49,52,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,54, 48,48,10,54,68,56,48,10,55,57,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,68,56,48,10,48,55,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,70,68,54,10,69,78,67, 79,68,73,78,71,32,56,49,53,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,50,48,48,10,55,69, 48,48,10,52,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,66,48,48,10,48,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,68,55,10,69,78,67,79,68,73,78,71, 32,56,49,53,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,51, 50,48,48,10,55,69,48,48,10,52,67,48,48,10,54,54, 48,48,10,54,54,48,48,10,48,48,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,66,48,48,10, 48,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,70, 68,56,10,69,78,67,79,68,73,78,71,32,56,49,53,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,50,49,48,48,10,49,69,48,48,10,48, 48,48,48,10,55,70,56,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,70,68,57,10,69,78, 67,79,68,73,78,71,32,56,49,53,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 51,70,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,70,68,65,10,69,78,67,79,68,73,78, 71,32,56,49,53,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,68,70,56,48,10,54,54,48,48,10,50, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,49,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,68,66,10,69,78,67,79,68,73,78,71,32,56,49,53, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,67,54,48,48,10,56,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,49,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,70,68,68,10,69, 78,67,79,68,73,78,71,32,56,49,53,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,54,48,48,10, 52,51,48,48,10,51,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,70,68,69,10,69,78,67,79,68,73, 78,71,32,56,49,53,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,49,56,48,10,52,51,48,48,10, 51,54,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,70,68,70,10,69,78,67,79,68,73,78,71,32,56,49, 53,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,57,48,48,10,51,70,48,48,10,50,69,48,48,10, 48,56,48,48,10,48,54,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,69,48,10, 69,78,67,79,68,73,78,71,32,56,49,54,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,50,49,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,70,69,49,10,69,78,67,79,68, 73,78,71,32,56,49,54,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,70,69,50,10,69,78,67,79,68,73,78,71,32,56, 49,54,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,56,48,48,10,54,68,56,48,10,54,55,56,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,70,69,51, 10,69,78,67,79,68,73,78,71,32,56,49,54,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,54,48, 48,10,54,68,56,48,10,55,57,56,48,10,48,48,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,69,52,10,69,78,67,79, 68,73,78,71,32,56,49,54,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,69,48,48,10,48,50,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,55, 51,48,48,10,55,69,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,70,69,53,10,69,78,67,79,68,73,78,71,32, 56,49,54,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,69,48,48,10,48,56,48,48,10,48,54,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,55,51,48,48,10,55, 69,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,70,69, 54,10,69,78,67,79,68,73,78,71,32,56,49,54,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,57, 48,48,10,51,70,48,48,10,50,54,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,49,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,70,69,55,10,69,78,67, 79,68,73,78,71,32,56,49,54,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,49,57,48,48,10,51,70,48,48,10,50,54, 48,48,10,54,49,56,48,10,54,49,56,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,51,48,48,10,49,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,69,56,10,69,78,67,79,68,73,78,71, 32,56,49,54,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,50,49,48,48,10,49, 69,48,48,10,48,48,48,48,10,54,49,56,48,10,51,51, 48,48,10,51,51,48,48,10,49,69,48,48,10,49,69,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,70, 69,57,10,69,78,67,79,68,73,78,71,32,56,49,54,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,51,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,51,51,48,48,10,51,51, 48,48,10,49,69,48,48,10,49,69,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,70,69,65,10,69,78, 67,79,68,73,78,71,32,56,49,55,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,68,57,56,48,10,55, 57,56,48,10,51,57,56,48,10,49,57,56,48,10,49,57, 56,48,10,48,70,48,48,10,48,70,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,70,69,66,10,69,78,67,79,68,73,78, 71,32,56,49,55,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,57,56,48,10,68,57,56,48,10,57, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,48,70, 48,48,10,48,70,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,69,67,10,69,78,67,79,68,73,78,71,32,56,49,55, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 68,69,48,48,10,57,66,48,48,10,53,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,49,66, 48,48,10,49,69,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,70,69,68,10,69, 78,67,79,68,73,78,71,32,56,49,55,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,56,48,48,10, 54,68,56,48,10,54,55,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,70,69,69,10,69,78,67,79,68,73, 78,71,32,56,49,55,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,54,48,48,10,54,68,56,48,10, 55,57,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,70,69,70,10,69,78,67,79,68,73,78,71,32,56,49, 55,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,56,48,48,10,48,67,48,48,10,48,54,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,70,50,10, 69,78,67,79,68,73,78,71,32,56,49,55,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,48,48,48, 10,49,56,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,55,70,56,48,10,51,51,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,54,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,70,70,51,10,69,78,67,79,68, 73,78,71,32,56,49,55,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,49,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,55,70, 56,48,10,51,51,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,54,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,70,70,52,10,69,78,67,79,68,73,78,71,32,56, 49,56,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,51,48,48,10,48,54,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,55,70,56,48,10,51,51, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,54,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,70,70,54, 10,69,78,67,79,68,73,78,71,32,56,49,56,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,57,48, 48,10,51,70,48,48,10,50,54,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,55,70,56,48,10,51,51,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,70,55,10,69,78,67,79, 68,73,78,71,32,56,49,56,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,57,48,48,10,51,70,48, 48,10,50,54,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,49,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,55, 70,56,48,10,51,51,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,54,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,70,70,56,10,69,78,67,79,68,73,78,71,32, 56,49,56,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,67,54,48,48,10,54,70,48,48,10,51,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,48,70,48,48,10,48, 54,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,70,70, 57,10,69,78,67,79,68,73,78,71,32,56,49,56,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,54, 48,48,10,54,70,48,48,10,53,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,48,70,48,48,10,48,54,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,70,70,65,10,69,78,67, 79,68,73,78,71,32,56,49,56,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,67,54,48,48,10,54,70, 48,48,10,51,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,48,70,48,48,10, 48,54,48,48,10,49,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,70,66,10,69,78,67,79,68,73,78,71, 32,56,49,56,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,54,48,48,10,54,70,48,48,10,53,57, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,48,70,48,48,10,48,54,48,48,10, 49,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,70, 70,67,10,69,78,67,79,68,73,78,71,32,56,49,56,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,51,51,48,48,10,49,50,48,48,10,55,51,56,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 54,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,70,70,68,10,69,78, 67,79,68,73,78,71,32,56,49,56,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,54,48,48,10,48, 67,48,48,10,49,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,70,70,69,10,69,78,67,79,68,73,78, 71,32,56,49,57,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,67,48,48,10,49,48,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,48,48,10,69,78,67,79,68,73,78,71,32,56,49,57, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,48,48,49,10,69, 78,67,79,68,73,78,71,32,56,49,57,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,48,50,10,69,78,67,79,68,73, 78,71,32,56,49,57,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,48,48,51,10,69,78,67,79,68,73,78,71,32,56,49, 57,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,48,52,10, 69,78,67,79,68,73,78,71,32,56,49,57,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,48,48,53,10,69,78,67,79,68, 73,78,71,32,56,49,57,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,48,48,54,10,69,78,67,79,68,73,78,71,32,56, 49,57,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,48,48,55, 10,69,78,67,79,68,73,78,71,32,56,49,57,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,48,56,10,69,78,67,79, 68,73,78,71,32,56,50,48,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,48,48,57,10,69,78,67,79,68,73,78,71,32, 56,50,48,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,48,48, 65,10,69,78,67,79,68,73,78,71,32,56,50,48,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,48,49,48,10,69,78,67, 79,68,73,78,71,32,56,50,48,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,49,49,10,69,78,67,79,68,73,78,71, 32,56,50,48,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,102,105,103,117,114, 101,100,97,115,104,10,69,78,67,79,68,73,78,71,32,56, 50,49,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,101,110,100,97,115,104,10, 69,78,67,79,68,73,78,71,32,56,50,49,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,101,109,100,97,115,104,10,69,78,67,79,68,73, 78,71,32,56,50,49,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,70,70,67,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,48,48,50,48,56,10,69,78,67,79,68,73,78,71,32, 56,50,49,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,70,67,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,48,49, 54,10,69,78,67,79,68,73,78,71,32,56,50,49,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,50, 48,48,10,49,50,48,48,10,49,50,48,48,10,49,50,48, 48,10,49,50,48,48,10,49,50,48,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,100,101,114,115,99,111,114,101,100, 98,108,10,69,78,67,79,68,73,78,71,32,56,50,49,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,55,70,56,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,113,117,111,116,101,108,101,102,116,10, 69,78,67,79,68,73,78,71,32,56,50,49,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,49,56,48,48,10,49,67,48,48,10,49,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,113,117,111,116,101,114,105,103,104,116,10,69,78, 67,79,68,73,78,71,32,56,50,49,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,69,48,48,10,48, 69,48,48,10,48,54,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,113,117,111,116,101,115,105,110,103,108,98,97,115,101,10, 69,78,67,79,68,73,78,71,32,56,50,49,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,69,48,48,10,48,69,48,48,10,48,54,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,113,117,111,116,101,114,101,118,101,114,115,101,100, 10,69,78,67,79,68,73,78,71,32,56,50,49,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,69,48, 48,10,48,69,48,48,10,48,67,48,48,10,48,54,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,113,117,111,116,101,100,98,108,108,101,102,116, 10,69,78,67,79,68,73,78,71,32,56,50,50,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,57,56, 48,10,51,51,48,48,10,51,66,56,48,10,51,66,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,113,117,111,116,101,100,98,108,114,105,103,104, 116,10,69,78,67,79,68,73,78,71,32,56,50,50,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,55, 48,48,10,55,55,48,48,10,51,51,48,48,10,54,54,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,113,117,111,116,101,100,98,108,98,97,115, 101,10,69,78,67,79,68,73,78,71,32,56,50,50,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,51, 51,48,48,10,54,54,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,48,49,70,10,69,78,67, 79,68,73,78,71,32,56,50,50,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,66,56,48,10,51,66, 56,48,10,51,51,48,48,10,49,57,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 100,97,103,103,101,114,10,69,78,67,79,68,73,78,71,32, 56,50,50,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,56,48,48,10,49,67,48,48,10,48,56,48, 48,10,52,57,48,48,10,70,70,56,48,10,52,57,48,48, 10,48,56,48,48,10,49,67,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,100,97,103,103,101,114, 100,98,108,10,69,78,67,79,68,73,78,71,32,56,50,50, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,56,48,48,10,49,67,48,48,10,48,56,48,48,10,52, 57,48,48,10,70,70,56,48,10,52,57,48,48,10,48,56, 48,48,10,52,57,48,48,10,70,70,56,48,10,52,57,48, 48,10,48,56,48,48,10,49,67,48,48,10,48,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,98,117,108,108,101,116,10,69,78, 67,79,68,73,78,71,32,56,50,50,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,67, 48,48,10,51,69,48,48,10,51,69,48,48,10,51,69,48, 48,10,49,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,48,50,51,10,69,78,67,79,68,73,78, 71,32,56,50,50,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,48,48,48,10,51,67, 48,48,10,51,70,48,48,10,51,67,48,48,10,51,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,111,110,101,100, 111,116,101,110,108,101,97,100,101,114,10,69,78,67,79,68, 73,78,71,32,56,50,50,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,116,119, 111,100,111,116,101,110,108,101,97,100,101,114,10,69,78,67, 79,68,73,78,71,32,56,50,50,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,51,48,48,10,54,51,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 101,108,108,105,112,115,105,115,10,69,78,67,79,68,73,78, 71,32,56,50,51,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,68,56,48, 10,54,68,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,50,55,10,69,78,67,79,68,73,78,71,32,56,50,51, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,48,50,70,10,69, 78,67,79,68,73,78,71,32,56,50,51,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,112,101,114,116,104,111,117,115,97,110,100,10,69,78, 67,79,68,73,78,71,32,56,50,52,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 49,56,48,10,50,57,48,48,10,50,66,48,48,10,49,50, 48,48,10,48,54,48,48,10,48,52,48,48,10,48,67,48, 48,10,48,56,48,48,10,49,65,56,48,10,49,53,52,48, 10,51,53,52,48,10,50,50,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,48,51,49,10,69,78,67,79,68,73,78, 71,32,56,50,52,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,48,48,48,10,50, 56,48,48,10,50,56,48,48,10,49,48,67,48,10,48,51, 56,48,10,48,69,48,48,10,51,56,48,48,10,54,48,48, 48,10,48,65,56,48,10,49,53,52,48,10,49,53,52,48, 10,48,65,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,109,105,110,117, 116,101,10,69,78,67,79,68,73,78,71,32,56,50,52,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 54,48,48,10,48,67,48,48,10,49,56,48,48,10,51,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,115,101,99,111,110,100,10,69,78,67, 79,68,73,78,71,32,56,50,52,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,67,48,10,49,57, 56,48,10,51,51,48,48,10,54,54,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,51,52,10,69,78,67,79,68,73,78,71, 32,56,50,52,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,66,52,48,10,51,54,67,48,10,54,68, 56,48,10,68,66,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,48, 51,53,10,69,78,67,79,68,73,78,71,32,56,50,52,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,51,48,48,48,10,49, 56,48,48,10,48,67,48,48,10,48,54,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,48,51,54,10,69,78, 67,79,68,73,78,71,32,56,50,52,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,67,67,48,48,10,54,54,48,48,10,51, 51,48,48,10,49,57,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,48,51,55,10,69,78,67,79,68,73,78, 71,32,56,50,52,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 66,54,48,48,10,68,66,48,48,10,54,68,56,48,10,51, 54,67,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,51,56,10,69,78,67,79,68,73,78,71,32,56,50,52, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,56,48,48, 10,49,52,48,48,10,50,50,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,103,117,105,108,115,105,110,103,108, 108,101,102,116,10,69,78,67,79,68,73,78,71,32,56,50, 52,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,49,48,48,10, 48,51,48,48,10,48,54,48,48,10,48,67,48,48,10,49, 56,48,48,10,51,48,48,48,10,49,56,48,48,10,48,67, 48,48,10,48,54,48,48,10,48,51,48,48,10,48,49,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,103,117,105,108,115,105,110,103, 108,114,105,103,104,116,10,69,78,67,79,68,73,78,71,32, 56,50,53,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,50,48,48, 48,10,51,48,48,48,10,49,56,48,48,10,48,67,48,48, 10,48,54,48,48,10,48,51,48,48,10,48,54,48,48,10, 48,67,48,48,10,49,56,48,48,10,51,48,48,48,10,50, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,48,51, 66,10,69,78,67,79,68,73,78,71,32,56,50,53,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,52,67,56,48,10,50,49,48,48,10,49,50,48,48, 10,67,67,67,48,10,67,67,67,48,10,49,50,48,48,10, 50,49,48,48,10,52,67,56,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,101,120,99,108,97,109,100,98,108,10,69, 78,67,79,68,73,78,71,32,56,50,53,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,51,48,48,10, 51,51,48,48,10,51,51,48,48,10,51,51,48,48,10,51, 51,48,48,10,51,51,48,48,10,51,51,48,48,10,51,51, 48,48,10,51,51,48,48,10,51,51,48,48,10,48,48,48, 48,10,51,51,48,48,10,51,51,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,51,68,10,69,78,67,79,68,73, 78,71,32,56,50,53,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,54,68,56,48,10,54,68,56,48,10,48, 70,48,48,10,48,69,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,48,51,69,10,69,78,67,79,68,73,78,71,32,56,50, 53,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,70,70,67,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,51,70,10, 69,78,67,79,68,73,78,71,32,56,50,53,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,52,48,56,48,10,54,49,56,48,10,51,70,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,48,52,48,10,69,78,67,79,68, 73,78,71,32,56,50,53,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,49,69,48, 48,10,50,49,48,48,10,52,48,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,48,52,49,10,69,78,67,79,68,73,78,71,32,56, 50,53,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,50,48,48,10,48, 50,48,48,10,48,52,48,48,10,48,52,48,48,10,48,56, 48,48,10,49,52,48,48,10,49,52,48,48,10,50,50,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,48,52,50, 10,69,78,67,79,68,73,78,71,32,56,50,53,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,50,50,48,48,10,49,67,48,48, 10,51,69,48,48,10,49,67,48,48,10,50,50,48,48,10, 48,48,48,48,10,57,52,56,48,10,54,51,48,48,10,70, 55,56,48,10,54,51,48,48,10,57,52,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,52,51,10,69,78,67,79, 68,73,78,71,32,56,50,53,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,70,48,48,10,51,70,48,48,10,51,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,102, 114,97,99,116,105,111,110,10,69,78,67,79,68,73,78,71, 32,56,50,54,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,67,48,10,48,48,67,48,10,48,49,56,48,10,48,49, 56,48,10,48,51,48,48,10,48,51,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,67,48,48,10,48,67,48,48, 10,49,56,48,48,10,49,56,48,48,10,51,48,48,48,10, 51,48,48,48,10,54,48,48,48,10,54,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,48, 52,53,10,69,78,67,79,68,73,78,71,32,56,50,54,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 70,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,70,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,48,52,54,10,69,78, 67,79,68,73,78,71,32,56,50,54,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,69,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,51,69,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,51,69,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,48,52,55,10,69,78,67,79,68,73,78, 71,32,56,50,54,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,66,56,48,10,70,70,67,48,10,67, 67,67,48,10,67,67,67,48,10,67,67,67,48,10,49,57, 56,48,10,49,57,56,48,10,51,51,48,48,10,51,51,48, 48,10,51,51,48,48,10,48,48,48,48,10,51,51,48,48, 10,51,51,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,52,56,10,69,78,67,79,68,73,78,71,32,56,50,54, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,68,56,48,10,55,70,56,48,10,54,55,56,48,10,54, 55,56,48,10,54,55,56,48,10,48,68,56,48,10,48,68, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,48,48,48,48,10,49,57,56,48,10,49,57,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,48,52,57,10,69, 78,67,79,68,73,78,71,32,56,50,54,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,70,48,48,10, 55,70,56,48,10,55,57,56,48,10,55,57,56,48,10,55, 57,56,48,10,54,51,48,48,10,54,51,48,48,10,54,54, 48,48,10,54,54,48,48,10,54,54,48,48,10,48,48,48, 48,10,54,54,48,48,10,54,54,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,52,65,10,69,78,67,79,68,73, 78,71,32,56,50,54,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 70,48,48,10,51,70,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,48,52,66,10,69,78,67,79,68,73,78,71,32,56,50, 54,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,48,48,10,55,70,56,48,10,54,70,56,48,10, 54,70,56,48,10,54,70,56,48,10,54,70,48,48,10,54, 67,48,48,10,54,67,48,48,10,54,67,48,48,10,54,67, 48,48,10,54,67,48,48,10,54,67,48,48,10,54,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,52,67,10, 69,78,67,79,68,73,78,71,32,56,50,54,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,70,56,48,10,51,67,56,48,10,55,67,56,48,10,55, 67,56,48,10,55,67,56,48,10,51,67,56,48,10,49,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,48,52,68,10,69,78,67,79,68, 73,78,71,32,56,50,54,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,69,48,48,10, 52,70,48,48,10,52,70,56,48,10,52,70,56,48,10,52, 70,56,48,10,52,70,48,48,10,55,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,48,52,69,10,69,78,67,79,68,73,78,71,32,56, 50,55,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,51,48,48,10, 51,51,48,48,10,49,69,48,48,10,55,70,56,48,10,49, 69,48,48,10,51,51,48,48,10,51,51,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,48,52,70, 10,69,78,67,79,68,73,78,71,32,56,50,55,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,67,48,48,10,49,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,67,48,48,10,49,67,48,48,10,48,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,53,48,10,69,78,67,79, 68,73,78,71,32,56,50,55,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,70,48, 48,10,54,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,49,56,48,10,51, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,48,53,49,10,69,78,67,79,68,73,78,71,32, 56,50,55,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,51,51,48,48,10,51,51, 48,48,10,49,69,48,48,10,55,70,56,48,10,49,69,48, 48,10,51,51,48,48,10,51,51,48,48,10,48,48,48,48, 10,51,51,48,48,10,51,51,48,48,10,49,69,48,48,10, 55,70,56,48,10,49,69,48,48,10,51,51,48,48,10,51, 51,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,48,53, 50,10,69,78,67,79,68,73,78,71,32,56,50,55,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,49,56,48,10,51,49,56,48,10,51,51,48, 48,10,48,51,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,67,48,48,10,48,67,48,48,10,49,56,48,48,10, 49,57,56,48,10,51,49,56,48,10,51,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,48,53,51,10,69,78,67, 79,68,73,78,71,32,56,50,55,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,56,67,48,10,67,67,67,48,10,67,55,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,53,52,10,69,78,67,79,68,73,78,71, 32,56,50,55,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,70,48,48,10,54, 49,56,48,10,52,48,56,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,48, 53,55,10,69,78,67,79,68,73,78,71,32,56,50,55,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 53,52,48,10,50,65,56,48,10,50,65,56,48,10,53,53, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,48,53,70,10,69,78, 67,79,68,73,78,71,32,56,50,56,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,48,54,48,10,69,78,67,79,68,73,78, 71,32,56,50,56,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,54,49,10,69,78,67,79,68,73,78,71,32,56,50,56, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,48,54,50,10,69, 78,67,79,68,73,78,71,32,56,50,57,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,54,51,10,69,78,67,79,68,73, 78,71,32,56,50,57,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,122,101,114, 111,115,117,112,101,114,105,111,114,10,69,78,67,79,68,73, 78,71,32,56,51,48,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,67,48,48,10,51,54,48,48,10, 51,54,48,48,10,51,54,48,48,10,51,54,48,48,10,51, 54,48,48,10,49,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,48,55,49,10,69,78,67,79,68,73,78,71,32,56,51, 48,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,48,48,48,48,10,55,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,48,48,48,10,55, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,102,111,117,114,115,117,112,101, 114,105,111,114,10,69,78,67,79,68,73,78,71,32,56,51, 48,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,49,67,48,48,10,51,67,48,48,10, 54,67,48,48,10,55,69,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,102,105,118,101,115,117,112,101, 114,105,111,114,10,69,78,67,79,68,73,78,71,32,56,51, 48,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,69,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,67,48,48,10,48,54,48,48,10,51,54,48,48,10,49, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,115,105,120,115,117,112,101,114, 105,111,114,10,69,78,67,79,68,73,78,71,32,56,51,49, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,67,48,48,10,51,54,48,48,10,51,48,48,48,10,51, 67,48,48,10,51,54,48,48,10,51,54,48,48,10,49,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,115,101,118,101,110,115,117,112,101, 114,105,111,114,10,69,78,67,79,68,73,78,71,32,56,51, 49,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,69,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,67,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,101,105,103,104,116,115,117,112, 101,114,105,111,114,10,69,78,67,79,68,73,78,71,32,56, 51,49,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,67,48,48,10,51,54,48,48,10,51,54,48,48, 10,49,67,48,48,10,51,54,48,48,10,51,54,48,48,10, 49,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,110,105,110,101,115,117,112, 101,114,105,111,114,10,69,78,67,79,68,73,78,71,32,56, 51,49,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,67,48,48,10,51,54,48,48,10,51,54,48,48, 10,49,69,48,48,10,48,54,48,48,10,51,54,48,48,10, 49,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,48,55,65, 10,69,78,67,79,68,73,78,71,32,56,51,49,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,56,48,48,10,48,56,48,48,10,51,69,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,55,66,10,69,78,67,79, 68,73,78,71,32,56,51,49,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,48,55,67,10,69,78,67,79,68,73,78,71,32, 56,51,49,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,69,48, 48,10,48,48,48,48,10,51,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,112,97,114,101,110,108, 101,102,116,115,117,112,101,114,105,111,114,10,69,78,67,79, 68,73,78,71,32,56,51,49,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,112, 97,114,101,110,114,105,103,104,116,115,117,112,101,114,105,111, 114,10,69,78,67,79,68,73,78,71,32,56,51,49,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,56, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,49,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,110,115,117,112,101,114,105,111,114,10,69, 78,67,79,68,73,78,71,32,56,51,49,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,67,48,48,10,51,54,48,48,10,51, 54,48,48,10,51,54,48,48,10,51,54,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,122,101,114,111,105,110,102,101,114,105,111,114,10,69, 78,67,79,68,73,78,71,32,56,51,50,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,67,48,48,10,51,54,48,48,10,51,54,48, 48,10,51,54,48,48,10,51,54,48,48,10,51,54,48,48, 10,49,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,111,110,101,105,110,102,101,114,105,111,114,10,69,78, 67,79,68,73,78,71,32,56,51,50,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,56,48,48,10,51,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 51,67,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,116,119,111,105,110,102,101,114,105,111,114,10,69,78,67, 79,68,73,78,71,32,56,51,50,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,67,48,48,10,51,54,48,48,10,48,54,48,48,10, 48,67,48,48,10,49,56,48,48,10,51,48,48,48,10,51, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 116,104,114,101,101,105,110,102,101,114,105,111,114,10,69,78, 67,79,68,73,78,71,32,56,51,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,67,48,48,10,51,54,48,48,10,48,54,48,48, 10,48,67,48,48,10,48,54,48,48,10,51,54,48,48,10, 49,67,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,102,111,117,114,105,110,102,101,114,105,111,114,10,69,78, 67,79,68,73,78,71,32,56,51,50,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,49,67,48,48,10,51,67,48,48, 10,54,67,48,48,10,55,69,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,102,105,118,101,105,110,102,101,114,105,111,114,10,69,78, 67,79,68,73,78,71,32,56,51,50,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,69,48,48,10,51,48,48,48,10,51,48,48,48, 10,51,67,48,48,10,48,54,48,48,10,51,54,48,48,10, 49,67,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,115,105,120,105,110,102,101,114,105,111,114,10,69,78,67, 79,68,73,78,71,32,56,51,50,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,67,48,48,10,51,54,48,48,10,51,48,48,48,10, 51,67,48,48,10,51,54,48,48,10,51,54,48,48,10,49, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 115,101,118,101,110,105,110,102,101,114,105,111,114,10,69,78, 67,79,68,73,78,71,32,56,51,50,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,69,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,67,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,101,105,103,104,116,105,110,102,101,114,105,111,114,10,69, 78,67,79,68,73,78,71,32,56,51,50,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,67,48,48,10,51,54,48,48,10,51,54,48, 48,10,49,67,48,48,10,51,54,48,48,10,51,54,48,48, 10,49,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,110,105,110,101,105,110,102,101,114,105,111,114,10,69, 78,67,79,68,73,78,71,32,56,51,50,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,67,48,48,10,51,54,48,48,10,51,54,48, 48,10,49,69,48,48,10,48,54,48,48,10,51,54,48,48, 10,49,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,56,65,10,69,78,67,79,68,73, 78,71,32,56,51,51,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,56,48,48,10,48,56,48,48,10,51,69,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,48,56,66,10,69,78,67,79,68,73,78,71,32,56,51, 51,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,56,67,10, 69,78,67,79,68,73,78,71,32,56,51,51,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,69, 48,48,10,48,48,48,48,10,51,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,112,97,114,101,110,108,101,102,116,105,110,102,101, 114,105,111,114,10,69,78,67,79,68,73,78,71,32,56,51, 51,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,112,97,114,101,110,114,105,103, 104,116,105,110,102,101,114,105,111,114,10,69,78,67,79,68, 73,78,71,32,56,51,51,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,49,56,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,48,65,48,10,69,78,67,79,68,73,78,71,32,56, 51,53,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,48,48,48,10, 54,70,56,48,10,54,67,48,48,10,51,67,48,48,10,49, 70,48,48,10,48,67,48,48,10,48,67,48,48,10,48,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,99,111,108,111,110,109,111, 110,101,116,97,114,121,10,69,78,67,79,68,73,78,71,32, 56,51,53,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,51, 52,48,10,49,70,52,48,10,51,55,67,48,10,54,55,67, 48,10,54,68,56,48,10,54,68,56,48,10,55,66,48,48, 10,55,66,48,48,10,55,54,48,48,10,55,54,48,48,10, 54,67,48,48,10,54,68,56,48,10,70,66,48,48,10,68, 69,48,48,10,66,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,48,65, 50,10,69,78,67,79,68,73,78,71,32,56,51,53,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,54,48,48, 48,10,54,48,48,48,10,54,66,56,48,10,54,54,67,48, 10,54,54,67,48,10,54,54,48,48,10,54,54,48,48,10, 54,55,56,48,10,51,55,48,48,10,49,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,102,114,97,110,99,10,69,78,67,79,68, 73,78,71,32,56,51,53,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,55,69,48,48,10,54,48,48,48,10,54, 70,48,48,10,54,68,56,48,10,54,70,48,48,10,54,68, 56,48,10,54,68,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,108,105, 114,97,10,69,78,67,79,68,73,78,71,32,56,51,53,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,70,48,48,10,49,57,56,48,10,49,57, 56,48,10,49,56,48,48,10,55,69,48,48,10,49,56,48, 48,10,55,69,48,48,10,49,56,48,48,10,49,56,48,48, 10,55,67,48,48,10,53,54,67,48,10,55,51,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,48,65,53,10,69,78, 67,79,68,73,78,71,32,56,51,53,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,67,48,10,48,48,67,48,10,48,49, 56,48,10,53,66,56,48,10,55,70,56,48,10,54,70,56, 48,10,54,68,56,48,10,54,68,56,48,10,55,68,56,48, 10,55,68,56,48,10,55,68,56,48,10,51,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,48,65,54,10,69,78,67,79,68,73,78, 71,32,56,51,53,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,55,49,56,48,10,55, 49,56,48,10,55,57,56,48,10,70,70,67,48,10,54,68, 56,48,10,54,68,56,48,10,70,70,67,48,10,54,55,56, 48,10,54,51,56,48,10,54,51,56,48,10,54,49,56,48, 10,54,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,112,101,115,101, 116,97,10,69,78,67,79,68,73,78,71,32,56,51,53,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 69,48,48,10,54,51,48,48,10,54,49,56,48,10,70,70, 67,48,10,54,49,56,48,10,54,49,56,48,10,54,51,48, 48,10,55,69,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,48,65,56,10,69,78, 67,79,68,73,78,71,32,56,51,54,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,70,48,48,48,10,68, 56,48,48,10,67,67,48,48,10,67,67,48,48,10,67,67, 48,48,10,67,67,48,48,10,68,57,67,48,10,70,51,48, 48,10,68,66,48,48,10,68,57,56,48,10,67,67,67,48, 10,67,67,67,48,10,67,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,48,65,57,10,69,78,67,79,68,73,78, 71,32,56,51,54,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,68,56,48,10,70,70, 67,48,10,54,68,56,48,10,70,70,67,48,10,54,68,56, 48,10,55,51,56,48,10,55,51,56,48,10,54,49,56,48, 10,54,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 53,55,54,51,54,10,69,78,67,79,68,73,78,71,32,56, 51,54,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,56,48,48,10, 52,52,48,48,10,53,53,48,48,10,53,53,48,48,10,53, 53,48,48,10,53,53,48,48,10,49,49,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,100,111,110,103,10,69,78, 67,79,68,73,78,71,32,56,51,54,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,49,56,48,10,48, 49,56,48,10,55,70,56,48,10,48,49,56,48,10,48,49, 56,48,10,49,68,56,48,10,51,51,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,51,51,56,48,10,49,68,56,48,10,48,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,69,117,114,111,10,69,78,67,79,68,73,78,71,32,56, 51,54,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,70,48,48, 10,49,57,56,48,10,51,48,48,48,10,51,48,48,48,10, 55,70,48,48,10,51,48,48,48,10,55,69,48,48,10,51, 48,48,48,10,51,48,48,48,10,49,57,56,48,10,48,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,48,65,68, 10,69,78,67,79,68,73,78,71,32,56,51,54,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,57,56, 48,10,49,57,56,48,10,49,66,48,48,10,49,66,48,48, 10,49,69,48,48,10,49,69,48,48,10,55,70,56,48,10, 49,69,48,48,10,49,69,48,48,10,49,66,48,48,10,49, 66,48,48,10,49,57,56,48,10,49,57,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,65,69,10,69,78,67,79, 68,73,78,71,32,56,51,54,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,70,56,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,70,48,48,10,51,67,48,48,10,48,70,48,48,10, 51,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,48,65,70,10,69,78,67,79,68,73,78,71,32, 56,51,54,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,48,48,48,10,51,69,48,48,10,55,51,48, 48,10,51,49,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,55,57,56,48,10,53,68,56,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,48,66, 48,10,69,78,67,79,68,73,78,71,32,56,51,54,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,51,48,48,10,51,51,48,48,10,51,51,48, 48,10,49,70,48,48,10,48,69,48,48,10,48,54,48,48, 10,48,55,48,48,10,48,68,56,48,10,50,68,56,48,10, 50,68,56,48,10,51,57,56,48,10,53,49,56,48,10,52, 51,48,48,10,48,54,48,48,10,48,67,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,48,66,49,10,69,78,67, 79,68,73,78,71,32,56,51,54,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,69,48,48,10,54,51, 48,48,10,54,49,56,48,10,70,70,67,48,10,54,49,56, 48,10,70,70,67,48,10,54,51,48,48,10,55,69,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,68,48,10,69,78,67,79,68,73,78,71, 32,56,52,48,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,49,56,48,48,10,51,48,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,48, 68,49,10,69,78,67,79,68,73,78,71,32,56,52,48,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,54,48,48,10,48,51,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,48,68,50,10,69,78, 67,79,68,73,78,71,32,56,52,48,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,48,68,51,10,69,78,67,79,68,73,78, 71,32,56,52,48,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,68,52,10,69,78,67,79,68,73,78,71,32,56,52,48, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,53,69,48,48,10,54,49,48,48,10,55,48,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,48,68,53,10,69, 78,67,79,68,73,78,71,32,56,52,48,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,49,69,56,48, 10,50,49,56,48,10,52,51,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,68,54,10,69,78,67,79,68,73, 78,71,32,56,52,48,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,49,48,48,48,10,51,48,48,48, 10,55,70,56,48,10,51,48,48,48,10,49,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,48,68,55,10,69,78,67,79,68,73,78,71,32,56,52, 48,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,50,48,48,10,48,51,48,48,10,55,70,56,48, 10,48,51,48,48,10,48,50,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,68,56,10, 69,78,67,79,68,73,78,71,32,56,52,48,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,50,48,48,10,50, 49,48,48,10,50,49,48,48,10,49,50,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,48,68,57,10,69,78,67,79,68, 73,78,71,32,56,52,48,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,49,50,48,48,10,50,70,56,48,10,50, 55,48,48,10,49,50,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,48,68,65,10,69,78,67,79,68,73,78,71,32,56, 52,49,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 49,50,48,48,10,50,55,48,48,10,50,70,56,48,10,49, 50,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,48,68,66, 10,69,78,67,79,68,73,78,71,32,56,52,49,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,54,68, 56,48,10,54,68,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,68,67,10,69,78,67,79, 68,73,78,71,32,56,52,49,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,53,53,48,48,10,53,53, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,48,68,68,10,69,78,67,79,68,73,78,71,32, 56,52,49,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,49,69,48,48,10,50,49,48,48,10,52,48, 56,48,10,52,48,56,48,10,56,48,52,48,10,56,48,52, 48,10,56,48,52,48,10,56,48,52,48,10,56,48,52,48, 10,56,48,52,48,10,56,48,52,48,10,56,48,52,48,10, 56,48,52,48,10,56,48,52,48,10,56,48,52,48,10,56, 48,52,48,10,52,48,56,48,10,52,48,56,48,10,50,49, 48,48,10,49,69,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,48,68, 69,10,69,78,67,79,68,73,78,71,32,56,52,49,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,70,70,67,48,10,56,48,52,48,10,56,48, 52,48,10,56,48,52,48,10,56,48,52,48,10,56,48,52, 48,10,56,48,52,48,10,56,48,52,48,10,56,48,52,48, 10,56,48,52,48,10,56,48,52,48,10,56,48,52,48,10, 56,48,52,48,10,56,48,52,48,10,56,48,52,48,10,56, 48,52,48,10,56,48,52,48,10,70,70,67,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,48,68,70,10,69,78,67, 79,68,73,78,71,32,56,52,49,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,67,48,48,10,49, 50,48,48,10,50,49,48,48,10,52,48,56,48,10,56,48, 52,48,10,56,48,52,48,10,56,48,52,48,10,56,48,52, 48,10,56,48,52,48,10,56,48,52,48,10,56,48,52,48, 10,56,48,52,48,10,56,48,52,48,10,56,48,52,48,10, 56,48,52,48,10,56,48,52,48,10,52,48,56,48,10,50, 49,48,48,10,49,50,48,48,10,48,67,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,69,48,10,69,78,67,79,68,73,78,71, 32,56,52,49,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,49,69,48,48,10,50,49,48,48,10,54, 48,56,48,10,54,48,56,48,10,57,48,52,48,10,57,48, 52,48,10,57,48,52,48,10,56,56,52,48,10,56,56,52, 48,10,56,56,52,48,10,56,52,52,48,10,56,52,52,48, 10,56,52,52,48,10,56,50,52,48,10,56,50,52,48,10, 56,50,52,48,10,52,49,56,48,10,52,49,56,48,10,50, 49,48,48,10,49,69,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,48, 69,49,10,69,78,67,79,68,73,78,71,32,56,52,49,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 49,50,48,48,10,51,51,48,48,10,55,70,56,48,10,51, 51,48,48,10,49,50,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,48,69,50,10,69,78, 67,79,68,73,78,71,32,56,52,49,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,56,48,52,48,10,56, 48,52,48,10,56,48,52,48,10,56,48,52,48,10,56,48, 52,48,10,56,48,52,48,10,56,48,52,48,10,56,48,52, 48,10,56,48,52,48,10,56,48,52,48,10,56,48,52,48, 10,56,48,52,48,10,56,48,52,48,10,56,48,52,48,10, 56,48,52,48,10,55,70,56,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,48,69,51,10,69,78,67,79,68,73,78, 71,32,56,52,49,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,70,70,67,48,10,56,48,52,48,10, 70,70,67,48,10,56,48,52,48,10,56,48,52,48,10,56, 48,52,48,10,56,48,52,48,10,56,48,52,48,10,56,48, 52,48,10,56,48,52,48,10,56,48,52,48,10,56,48,52, 48,10,56,48,52,48,10,56,48,52,48,10,56,48,52,48, 10,56,48,52,48,10,70,70,67,48,10,56,48,52,48,10, 70,70,67,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,69,52,10,69,78,67,79,68,73,78,71,32,56,52,50, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,49, 50,48,48,10,50,49,48,48,10,50,49,48,48,10,50,49, 48,48,10,50,49,48,48,10,52,48,56,48,10,52,48,56, 48,10,52,48,56,48,10,52,48,56,48,10,56,48,52,48, 10,56,48,52,48,10,56,48,52,48,10,70,70,67,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,48,69,53,10,69, 78,67,79,68,73,78,71,32,56,52,50,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 50,48,48,48,10,50,48,48,48,10,49,48,48,48,10,49, 48,48,48,10,48,56,48,48,10,48,56,48,48,10,48,52, 48,48,10,48,52,48,48,10,48,50,48,48,10,48,50,48, 48,10,48,49,48,48,10,48,49,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,69,54,10,69,78,67,79,68,73, 78,71,32,56,52,50,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,49,52,48,48, 10,49,52,48,48,10,49,52,48,48,10,49,52,48,48,10, 49,52,48,48,10,49,52,48,48,10,49,52,48,48,10,49, 52,48,48,10,49,52,48,48,10,49,52,48,48,10,49,52, 48,48,10,49,52,48,48,10,49,52,48,48,10,49,52,48, 48,10,49,52,48,48,10,49,52,48,48,10,49,52,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,48,69,55,10,69,78,67,79,68,73,78,71,32,56,52, 50,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,70,70,67,48,10,48,48,52,48, 10,48,48,52,48,10,48,48,52,48,10,48,48,52,48,10, 48,48,52,48,10,48,48,52,48,10,48,48,52,48,10,48, 48,52,48,10,48,48,52,48,10,48,48,52,48,10,48,48, 52,48,10,48,48,52,48,10,48,48,52,48,10,48,48,52, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,69,56,10, 69,78,67,79,68,73,78,71,32,56,52,50,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,68,56,48,10,54,68,56,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,48,69,57,10,69,78,67,79,68, 73,78,71,32,56,52,50,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,70,70,67,48,10,67,48,67, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,48,69,65,10,69,78,67,79,68,73,78,71,32,56, 52,50,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,50,48,48,48,10, 52,48,48,48,10,70,70,56,48,10,52,48,48,48,10,50, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,48,48, 10,69,78,67,79,68,73,78,71,32,56,52,52,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,49,48,48,10,48,57,48,48,10,51,65,48,48, 10,52,65,48,48,10,51,67,48,48,10,48,52,48,48,10, 48,56,48,48,10,48,66,48,48,10,49,52,56,48,10,49, 52,48,48,10,50,52,56,48,10,50,51,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,48,49,10,69,78,67,79, 68,73,78,71,32,56,52,52,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,49,48, 48,10,48,57,48,48,10,51,65,48,48,10,52,65,48,48, 10,51,67,48,48,10,48,52,48,48,10,48,56,48,48,10, 48,66,56,48,10,49,52,48,48,10,49,51,48,48,10,50, 48,56,48,10,50,55,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,48,50,10,69,78,67,79,68,73,78,71,32, 56,52,53,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,69,48,48,10,51,66,48,48,10,55,57,56, 48,10,68,56,48,48,10,68,56,48,48,10,68,56,48,48, 10,68,56,48,48,10,68,56,48,48,10,68,56,48,48,10, 68,56,48,48,10,55,57,56,48,10,51,66,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,48, 51,10,69,78,67,79,68,73,78,71,32,56,52,53,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,54,48,48,48,10,57,48,48,48,10,57,55, 48,48,10,54,68,56,48,10,49,56,67,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,67,48,10,48,68,56,48,10,48,55,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,48,52,10,69,78,67, 79,68,73,78,71,32,56,52,53,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,49,69,48,48,10,51,70,48,48,10,54,68,56, 48,10,54,67,48,48,10,54,67,48,48,10,54,67,48,48, 10,54,68,56,48,10,51,70,48,48,10,49,69,48,48,10, 48,67,48,48,10,48,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,54,49,50,52,56,10,69,78,67,79,68,73, 78,71,32,56,52,53,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,49,48,48,10, 52,57,48,48,10,52,50,48,48,10,52,65,48,48,10,51, 52,48,48,10,48,52,48,48,10,48,56,48,48,10,48,66, 48,48,10,49,52,56,48,10,49,52,56,48,10,50,52,56, 48,10,50,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,48,54,10,69,78,67,79,68,73,78,71,32,56,52, 53,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,49,48,48,10,52,57,48,48,10, 52,50,48,48,10,52,65,48,48,10,51,52,48,48,10,48, 52,48,48,10,48,56,48,48,10,48,67,56,48,10,49,52, 56,48,10,49,52,56,48,10,50,52,56,48,10,50,51,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,48,55,10, 69,78,67,79,68,73,78,71,32,56,52,53,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,70,56,48, 10,51,49,56,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,51,48,48,48,10,49,70,48,48,10,51, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,51,49,56,48,10,49,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,48,56,10,69,78,67,79,68, 73,78,71,32,56,52,53,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,53,67,48,48,10,55,54,48,48, 10,54,51,48,48,10,48,49,56,48,10,48,49,56,48,10, 49,49,56,48,10,49,70,56,48,10,49,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,54,51,48,48,10,51,54, 48,48,10,49,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,49,48,57,10,69,78,67,79,68,73,78,71,32,56, 52,53,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,54,48,48,48,10,57,48,48, 48,10,57,70,67,48,10,54,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,70,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,48,65, 10,69,78,67,79,68,73,78,71,32,56,52,53,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,70,67,48,10,49,56,67,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,49, 70,48,48,10,48,55,67,48,10,49,69,48,48,10,51,54, 48,48,10,54,67,48,48,10,55,56,48,48,10,51,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,48,66,10,69,78,67,79, 68,73,78,71,32,56,52,53,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,57,56,48,10,56,65,56, 48,10,48,65,56,48,10,48,65,56,48,10,48,65,56,48, 10,48,65,56,48,10,49,70,48,48,10,50,65,48,48,10, 52,65,48,48,10,53,50,48,48,10,53,52,48,48,10,53, 52,56,48,10,50,51,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,48,67,10,69,78,67,79,68,73,78,71,32, 56,52,54,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,70,51,67,48,10,55,51,56,48,10,55,51,56, 48,10,55,51,56,48,10,55,51,56,48,10,55,51,56,48, 10,55,70,56,48,10,55,51,56,48,10,55,51,56,48,10, 55,51,56,48,10,55,51,56,48,10,70,51,56,48,10,55, 51,67,48,10,50,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,48, 68,10,69,78,67,79,68,73,78,71,32,56,52,54,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,68,57, 56,48,10,68,57,56,48,10,68,57,56,48,10,68,57,56, 48,10,68,57,56,48,10,68,57,56,48,10,68,70,56,48, 10,68,57,56,48,10,68,57,56,48,10,68,57,56,48,10, 68,57,56,48,10,68,57,56,48,10,68,57,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,48,69,10,69,78,67, 79,68,73,78,71,32,56,52,54,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,51,48,48, 48,10,51,69,48,48,10,51,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,67,54,48,48,10, 67,54,48,48,10,67,54,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,48,70,10,69,78,67,79,68,73,78,71, 32,56,52,54,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,54,48,48,10,48,67,48,48,10,48,70, 48,48,10,55,67,48,48,10,49,56,48,48,10,49,70,48, 48,10,49,57,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 49,48,10,69,78,67,79,68,73,78,71,32,56,52,54,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 70,48,48,10,50,49,48,48,10,50,49,48,48,10,48,49, 48,48,10,48,50,48,48,10,48,50,48,48,10,48,50,48, 48,10,48,50,48,48,10,48,52,48,48,10,48,52,48,48, 10,48,52,48,48,10,50,52,48,48,10,49,56,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,73,102,114,97,107,116,117,114,10,69, 78,67,79,68,73,78,71,32,56,52,54,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,70,56,48,10, 55,70,48,48,10,54,54,48,48,10,54,54,48,48,10,55, 54,48,48,10,50,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,55,48,48,10,50,51,56,48,10,55,49,56, 48,10,51,70,56,48,10,49,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,49,50,10,69,78,67,79,68,73, 78,71,32,56,52,54,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,51,48,48,10,48,52,56,48,10, 48,52,56,48,10,52,52,56,48,10,51,70,48,48,10,48, 52,48,48,10,48,52,48,48,10,48,56,48,48,10,48,56, 48,48,10,51,56,48,48,10,52,56,56,48,10,52,67,56, 48,10,51,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,54,49,50,56,57,10,69,78,67,79,68,73,78,71,32, 56,52,54,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,51,48,48,10,48,54,56,48,10,48,54,56, 48,10,48,54,56,48,10,48,67,56,48,10,48,68,48,48, 10,48,68,48,48,10,48,68,48,48,10,49,65,48,48,10, 49,67,48,48,10,51,56,56,48,10,53,66,48,48,10,48, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,49, 52,10,69,78,67,79,68,73,78,71,32,56,52,54,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,67, 48,48,10,54,67,48,48,10,70,70,56,48,10,54,67,48, 48,10,54,67,48,48,10,54,70,48,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,49,53,10,69,78,67, 79,68,73,78,71,32,56,52,54,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,49,56,48,10,70,49, 56,48,10,70,49,56,48,10,70,57,56,48,10,68,57,56, 48,10,68,68,56,48,10,68,68,56,48,10,68,70,56,48, 10,68,70,56,48,10,68,66,56,48,10,68,66,56,48,10, 68,57,56,48,10,68,57,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,54,49,51,53,50,10,69,78,67,79,68,73, 78,71,32,56,52,55,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,67,67,48,48,10,67,67,48,48,10, 67,67,48,48,10,69,67,48,48,10,69,67,48,48,10,70, 70,56,48,10,70,69,67,48,10,68,69,67,48,10,68,69, 67,48,10,67,69,67,48,10,67,70,56,48,10,67,67,48, 48,10,67,70,67,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,49,55,10,69,78,67,79,68,73,78,71,32,56,52, 55,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,53,67,56,48,10,53, 50,56,48,10,53,67,56,48,10,53,48,56,48,10,53,48, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,119,101,105,101,114,115,116,114, 97,115,115,10,69,78,67,79,68,73,78,71,32,56,52,55, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,52, 48,48,48,10,52,48,48,48,10,56,69,48,48,10,57,49, 48,48,10,65,48,56,48,10,52,48,56,48,10,52,48,56, 48,10,54,56,56,48,10,65,57,48,48,10,65,54,48,48, 10,65,48,48,48,10,65,48,48,48,10,52,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,49,57,10,69, 78,67,79,68,73,78,71,32,56,52,55,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,69,48,48,10, 68,66,48,48,10,68,57,56,48,10,68,57,56,48,10,68, 57,56,48,10,68,57,56,48,10,68,66,48,48,10,68,69, 48,48,10,68,56,48,48,10,68,56,48,48,10,68,56,48, 48,10,68,56,48,48,10,68,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,49,65,10,69,78,67,79,68,73, 78,71,32,56,52,55,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,66,48,48,10, 55,57,56,48,10,68,57,56,48,10,68,57,56,48,10,68, 57,56,48,10,68,57,56,48,10,68,57,56,48,10,68,57, 56,48,10,68,57,56,48,10,55,70,56,48,10,51,66,48, 48,10,49,70,48,48,10,48,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,49,66,10,69,78,67,79,68,73,78,71,32,56,52, 55,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,70,48,48,10,52,56,56,48,10,52,56,56,48,10, 48,56,56,48,10,49,48,56,48,10,49,49,48,48,10,49, 69,48,48,10,49,52,48,48,10,50,50,48,48,10,50,50, 48,48,10,50,50,48,48,10,65,50,56,48,10,52,49,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,82,102,114,97,107,116,117,114, 10,69,78,67,79,68,73,78,71,32,56,52,55,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,70,48, 48,10,55,70,56,48,10,54,68,56,48,10,54,68,56,48, 10,50,68,56,48,10,48,70,48,48,10,48,70,48,48,10, 48,68,56,48,10,48,68,56,48,10,50,68,56,48,10,55, 68,56,48,10,51,68,67,48,10,49,57,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,49,68,10,69,78,67,79, 68,73,78,71,32,56,52,55,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,70,69,48,48,10,68,66,48, 48,10,68,57,56,48,10,68,57,56,48,10,68,57,56,48, 10,68,57,56,48,10,68,66,48,48,10,68,69,48,48,10, 68,69,48,48,10,68,66,48,48,10,68,66,48,48,10,68, 57,56,48,10,68,57,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,112, 114,101,115,99,114,105,112,116,105,111,110,10,69,78,67,79, 68,73,78,71,32,56,52,55,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,69,48,48,10,54,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,51,48,48,10,55,69,48,48,10, 54,54,56,48,10,54,51,48,48,10,54,51,48,48,10,54, 53,56,48,10,54,57,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,49,70,10,69,78,67,79,68,73,78,71,32, 56,52,55,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,49,67,48,48,10,48,55, 48,48,10,48,49,56,48,10,48,49,56,48,10,55,70,56, 48,10,54,55,56,48,10,54,55,56,48,10,54,55,56,48, 10,54,70,48,48,10,55,69,48,48,10,54,69,48,48,10, 55,66,48,48,10,55,66,48,48,10,55,57,56,48,10,55, 49,56,48,10,51,48,48,48,10,51,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,50, 48,10,69,78,67,79,68,73,78,71,32,56,52,56,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,51,52,52,48,10,52,54, 67,48,10,50,53,52,48,10,49,52,52,48,10,54,52,52, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,50,49,10,69,78,67, 79,68,73,78,71,32,56,52,56,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,69,68,48,48,10,52,57,48,48,10,52,68, 48,48,10,52,57,48,48,10,52,68,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 116,114,97,100,101,109,97,114,107,10,69,78,67,79,68,73, 78,71,32,56,52,56,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,55,52,52,48,10,50,54,67,48,10,50,53,52,48,10, 50,52,52,48,10,50,52,52,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,50,51,10,69,78,67,79,68,73,78,71,32,56,52, 56,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,55,48,48,48,10,49,70,48,48, 10,48,51,48,48,10,48,54,48,48,10,54,55,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,51, 66,48,48,10,51,66,48,48,10,49,69,48,48,10,51,69, 48,48,10,51,69,48,48,10,51,67,48,48,10,54,67,48, 48,10,54,48,48,48,10,54,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,50,52,10, 69,78,67,79,68,73,78,71,32,56,52,56,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,70,70,56,48, 10,48,68,56,48,10,48,68,56,48,10,49,66,48,48,10, 49,66,48,48,10,49,66,48,48,10,51,54,48,48,10,51, 54,48,48,10,54,67,48,48,10,54,67,48,48,10,54,67, 48,48,10,68,56,48,48,10,70,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,50,53,10,69,78,67,79,68, 73,78,71,32,56,52,56,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,49,70,56, 48,10,48,49,56,48,10,48,51,48,48,10,48,51,48,48, 10,48,54,48,48,10,48,54,48,48,10,49,70,56,48,10, 48,49,56,48,10,48,51,48,48,10,48,51,48,48,10,48, 54,48,48,10,49,69,48,48,10,48,51,48,48,10,48,49, 56,48,10,48,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,79,109, 101,103,97,10,69,78,67,79,68,73,78,71,32,56,52,56, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,69,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,50,48,48,10,53,50,56,48,10,55,51,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,50,55,10,69, 78,67,79,68,73,78,71,32,56,52,56,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,51,56,48,10, 53,50,56,48,10,49,50,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,50,56,10,69,78,67,79,68,73, 78,71,32,56,52,56,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,69,48,48,10,55,70,48,48,10, 50,51,56,48,10,48,49,56,48,10,49,51,56,48,10,51, 70,48,48,10,55,69,48,48,10,50,51,48,48,10,48,49, 56,48,10,48,49,56,48,10,51,70,56,48,10,55,70,48, 48,10,50,50,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,50,57,10,69,78,67,79,68,73,78,71,32,56,52, 56,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,69,48,48,10,49, 66,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,50,65,10, 69,78,67,79,68,73,78,71,32,56,52,57,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,51,48,48,10,54,51,48,48,10, 54,54,48,48,10,54,54,48,48,10,55,67,48,48,10,54, 54,48,48,10,54,54,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,50,66,10,69,78,67,79,68, 73,78,71,32,56,52,57,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,67,48, 48,10,49,50,48,48,10,49,50,48,48,10,48,67,48,48, 10,48,67,48,48,10,49,69,48,48,10,49,69,48,48,10, 51,51,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,55,70,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,49,50,67,10,69,78,67,79,68,73,78,71,32,56, 52,57,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,70,48,48,10,52,56,56,48,10,52,56,56,48, 10,48,56,56,48,10,49,48,56,48,10,49,49,48,48,10, 49,69,48,48,10,49,49,48,48,10,50,49,48,48,10,50, 49,48,48,10,50,49,48,48,10,65,50,48,48,10,53,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,50,68, 10,69,78,67,79,68,73,78,71,32,56,52,57,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,70,48, 48,10,51,66,56,48,10,55,54,48,48,10,54,54,48,48, 10,54,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,55,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,101,115,116,105,109,97,116,101,100,10,69,78, 67,79,68,73,78,71,32,56,52,57,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,69,48,48,10,54,51,48,48,10,69,51,56, 48,10,70,70,56,48,10,69,48,48,48,10,69,51,56,48, 10,54,51,48,48,10,51,69,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,50,70,10,69,78,67,79,68,73,78, 71,32,56,52,57,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,70, 48,48,10,49,57,56,48,10,51,49,56,48,10,51,55,48, 48,10,55,67,48,48,10,54,48,48,48,10,54,51,48,48, 10,51,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,51,48,10,69,78,67,79,68,73,78,71,32,56,52,57, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,70,48,48,10,49,57,56,48,10,51,49,56,48,10,51, 51,48,48,10,49,56,48,48,10,48,69,48,48,10,49,56, 48,48,10,51,48,48,48,10,54,55,48,48,10,54,68,56, 48,10,54,49,56,48,10,54,51,48,48,10,51,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,51,49,10,69, 78,67,79,68,73,78,71,32,56,52,57,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,67,48,10,67,54,48,48,10,54,67,48,48,10,48, 67,56,48,10,55,70,56,48,10,68,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,51,48,48,48,10,66,48,48, 48,10,66,48,48,48,10,54,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,51,50,10,69,78,67,79,68,73, 78,71,32,56,52,57,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,49,70,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,51,51,10,69,78,67,79,68,73,78,71,32,56,52, 57,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,48,67,48,10,51,49,67,48,10,51,49,67,48,10, 51,66,67,48,10,51,66,67,48,10,51,70,67,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,67,48,67, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,51,52,10, 69,78,67,79,68,73,78,71,32,56,53,48,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,69,48,48,10,51,66,52,48,10,51, 55,56,48,10,54,51,48,48,10,54,51,48,48,10,54,54, 48,48,10,54,54,48,48,10,51,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,108,101,112,104,10,69,78,67,79,68,73,78, 71,32,56,53,48,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,56,51,48,48,10,67,51,56,48,10,54,49, 56,48,10,51,50,48,48,10,55,67,48,48,10,56,67,48, 48,10,56,54,48,48,10,52,51,48,48,10,54,49,56,48, 10,69,48,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,51,54,10,69,78,67,79,68,73,78,71,32,56,53,48, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,56, 48,48,48,10,70,69,48,48,10,55,70,48,48,10,48,49, 48,48,10,48,49,48,48,10,48,49,48,48,10,48,49,48, 48,10,48,49,48,48,10,55,70,56,48,10,70,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,51,55,10,69, 78,67,79,68,73,78,71,32,56,53,48,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,50,48,48,48,10,51, 56,48,48,10,49,67,48,48,10,48,52,48,48,10,48,52, 48,48,10,48,52,48,48,10,48,52,48,48,10,48,67,48, 48,10,51,69,48,48,10,55,51,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,51,56,10,69,78,67,79,68,73, 78,71,32,56,53,48,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,56,48,48,48,10,70,70,56,48,10,55, 70,56,48,10,48,49,48,48,10,48,49,48,48,10,48,49, 48,48,10,48,49,48,48,10,48,49,48,48,10,48,49,48, 48,10,48,49,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,51,57,10,69,78,67,79,68,73,78,71,32,56,53, 48,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,49,69,48,48,10,49,69,48,48,10, 48,67,48,48,10,48,48,48,48,10,55,69,48,48,10,49, 69,48,48,10,49,69,48,48,10,49,69,48,48,10,49,69, 48,48,10,49,69,48,48,10,49,69,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,51,65,10, 69,78,67,79,68,73,78,71,32,56,53,48,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,69,52,48,10,55,70,67,48,10,67, 51,56,48,10,56,54,56,48,10,56,52,56,48,10,67,49, 56,48,10,55,70,48,48,10,51,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,51,66,10,69,78,67,79,68, 73,78,71,32,56,53,48,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,57,52,48,10,57,53,52,48, 10,57,53,52,48,10,57,53,52,48,10,57,52,56,48,10, 57,52,56,48,10,68,52,56,48,10,57,67,56,48,10,57, 52,56,48,10,57,53,52,48,10,57,53,52,48,10,57,53, 52,48,10,57,53,52,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,49,51,68,10,69,78,67,79,68,73,78,71,32,56, 53,48,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,65,48,56,48,10, 65,48,56,48,10,65,48,56,48,10,53,49,48,48,10,53, 49,48,48,10,50,65,48,48,10,50,65,48,48,10,49,52, 48,48,10,49,52,48,48,10,50,56,48,48,10,50,56,48, 48,10,53,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,51,69, 10,69,78,67,79,68,73,78,71,32,56,53,49,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,53,50,56,48,10,53,50,56,48,10,53,48,48,48, 10,53,48,48,48,10,53,48,48,48,10,53,48,48,48,10, 53,48,48,48,10,53,48,48,48,10,53,48,48,48,10,53, 48,48,48,10,53,48,48,48,10,53,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,51,70,10,69,78,67,79, 68,73,78,71,32,56,53,49,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,70,70,67,48,10,53,50,56, 48,10,53,50,56,48,10,53,50,56,48,10,53,50,56,48, 10,53,50,56,48,10,53,50,56,48,10,53,50,56,48,10, 53,50,56,48,10,53,50,56,48,10,53,50,56,48,10,53, 50,56,48,10,53,50,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,52,48,10,69,78,67,79,68,73,78,71,32, 56,53,49,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,70,70,56,48,10,65,50,56,48,10,65,48,48, 48,10,53,48,48,48,10,53,48,48,48,10,50,56,48,48, 10,50,56,48,48,10,50,56,48,48,10,53,48,48,48,10, 53,48,48,48,10,65,48,48,48,10,65,50,56,48,10,70, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,52, 49,10,69,78,67,79,68,73,78,71,32,56,53,49,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,55,57,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,49,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,52,50,10,69,78,67, 79,68,73,78,71,32,56,53,49,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,52,51,10,69,78,67,79,68,73,78,71, 32,56,53,49,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 52,52,10,69,78,67,79,68,73,78,71,32,56,53,49,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,49,69,48,48,10,49,69,48,48,10,51,51,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,49,52,53,10,69,78, 67,79,68,73,78,71,32,56,53,49,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,69,48,48,10,53, 51,48,48,10,53,50,56,48,10,53,50,56,48,10,53,50, 56,48,10,53,50,56,48,10,53,50,56,48,10,65,53,48, 48,10,65,53,48,48,10,65,53,48,48,10,65,53,48,48, 10,65,54,48,48,10,70,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,52,54,10,69,78,67,79,68,73,78, 71,32,56,53,49,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,51,56,48,10,48,50,56,48,10,48, 50,56,48,10,48,50,56,48,10,48,50,56,48,10,51,69, 56,48,10,53,50,56,48,10,65,53,48,48,10,65,53,48, 48,10,65,53,48,48,10,65,53,48,48,10,65,53,48,48, 10,55,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,52,55,10,69,78,67,79,68,73,78,71,32,56,53,49, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,70,48,48,10,53,50, 56,48,10,53,50,56,48,10,65,53,48,48,10,66,70,48, 48,10,65,48,48,48,10,65,50,48,48,10,55,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,52,56,10,69, 78,67,79,68,73,78,71,32,56,53,50,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,69,48,48,10,48,65,48,48,10,48,65, 48,48,10,48,65,48,48,10,49,52,48,48,10,49,52,48, 48,10,49,52,48,48,10,55,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,52,57,10,69,78,67,79,68,73, 78,71,32,56,53,50,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 69,48,48,10,48,65,48,48,10,48,65,48,48,10,48,65, 48,48,10,49,52,48,48,10,49,52,48,48,10,49,52,48, 48,10,49,52,48,48,10,50,56,48,48,10,50,56,48,48, 10,50,56,48,48,10,70,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,52,65,10,69,78,67,79,68,73,78,71,32,56,53, 50,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 70,70,48,48,10,68,57,56,48,10,68,57,56,48,10,68, 57,56,48,10,68,70,48,48,10,68,56,48,48,10,68,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,52,66,10, 69,78,67,79,68,73,78,71,32,56,53,50,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,55,56,48, 10,51,68,67,48,10,49,56,67,48,10,51,56,67,48,10, 54,67,67,48,10,48,54,67,48,10,48,51,56,48,10,48, 51,48,48,10,48,55,56,48,10,48,68,56,48,10,48,68, 56,48,10,48,68,56,48,10,48,55,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,111,110,101,116,104,105,114,100,10,69,78,67,79, 68,73,78,71,32,56,53,51,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,50,48,48,48,10,54,48,48, 48,10,50,48,56,48,10,50,49,48,48,10,55,50,48,48, 10,48,52,48,48,10,48,66,48,48,10,49,48,56,48,10, 50,51,48,48,10,52,48,56,48,10,48,48,56,48,10,48, 51,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,116, 119,111,116,104,105,114,100,115,10,69,78,67,79,68,73,78, 71,32,56,53,51,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,50,48,48,48,10,53,48,48,48,10,49, 48,56,48,10,50,49,48,48,10,52,50,48,48,10,55,52, 48,48,10,48,66,48,48,10,49,48,56,48,10,50,51,48, 48,10,52,48,56,48,10,48,48,56,48,10,48,51,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,53,53,10,69,78,67,79,68,73,78,71,32,56,53,51, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 50,48,48,48,10,54,48,48,48,10,50,48,56,48,10,50, 49,48,48,10,55,50,48,48,10,48,52,48,48,10,48,66, 56,48,10,49,50,48,48,10,50,51,48,48,10,52,48,56, 48,10,48,48,56,48,10,48,51,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,53,54,10,69, 78,67,79,68,73,78,71,32,56,53,51,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,50,48,48,48,10, 53,48,48,48,10,49,48,56,48,10,50,49,48,48,10,52, 50,48,48,10,55,52,48,48,10,48,66,56,48,10,49,50, 48,48,10,50,51,48,48,10,52,48,56,48,10,48,48,56, 48,10,48,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,53,55,10,69,78,67,79,68,73, 78,71,32,56,53,51,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,48,48,48,10,52,56,48,48,10, 49,48,56,48,10,48,57,48,48,10,52,65,48,48,10,51, 52,48,48,10,48,66,56,48,10,49,50,48,48,10,50,51, 48,48,10,52,48,56,48,10,48,48,56,48,10,48,51,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,53,56,10,69,78,67,79,68,73,78,71,32,56,53, 51,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,48,48,48,10,51,48,48,48,10,53,48,56,48,10, 55,57,48,48,10,49,50,48,48,10,49,52,48,48,10,48, 66,56,48,10,49,50,48,48,10,50,51,48,48,10,52,48, 56,48,10,48,48,56,48,10,48,51,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,53,57,10, 69,78,67,79,68,73,78,71,32,56,53,51,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,50,48,48,48, 10,54,48,48,48,10,50,48,56,48,10,50,49,48,48,10, 55,50,48,48,10,48,52,48,48,10,48,66,48,48,10,49, 52,48,48,10,50,55,48,48,10,52,52,56,48,10,48,52, 56,48,10,48,51,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,53,65,10,69,78,67,79,68, 73,78,71,32,56,53,51,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,56,48,48,10,52,48,48,48, 10,55,48,56,48,10,48,57,48,48,10,52,65,48,48,10, 51,52,48,48,10,48,66,48,48,10,49,52,48,48,10,50, 55,48,48,10,52,52,56,48,10,48,52,56,48,10,48,51, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,111,110, 101,101,105,103,104,116,104,10,69,78,67,79,68,73,78,71, 32,56,53,51,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,50,48,48,48,10,54,48,48,48,10,50,48, 56,48,10,50,49,48,48,10,55,50,48,48,10,48,52,48, 48,10,48,66,48,48,10,49,52,56,48,10,50,51,48,48, 10,52,52,56,48,10,48,52,56,48,10,48,51,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,116,104,114,101,101, 101,105,103,104,116,104,115,10,69,78,67,79,68,73,78,71, 32,56,53,52,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,48,48,48,10,52,56,48,48,10,49,48, 56,48,10,48,57,48,48,10,52,65,48,48,10,51,52,48, 48,10,48,66,48,48,10,49,52,56,48,10,50,51,48,48, 10,52,52,56,48,10,48,52,56,48,10,48,51,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,102,105,118,101,101, 105,103,104,116,104,115,10,69,78,67,79,68,73,78,71,32, 56,53,52,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,56,48,48,10,52,48,48,48,10,55,48,56, 48,10,48,57,48,48,10,52,65,48,48,10,51,52,48,48, 10,48,66,48,48,10,49,52,56,48,10,50,51,48,48,10, 52,52,56,48,10,48,52,56,48,10,48,51,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,115,101,118,101,110,101, 105,103,104,116,104,115,10,69,78,67,79,68,73,78,71,32, 56,53,52,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,56,48,48,10,48,56,48,48,10,49,48,56, 48,10,50,49,48,48,10,50,50,48,48,10,50,52,48,48, 10,48,66,48,48,10,49,52,56,48,10,50,51,48,48,10, 52,52,56,48,10,48,52,56,48,10,48,51,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,53, 70,10,69,78,67,79,68,73,78,71,32,56,53,52,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,50,48, 48,48,10,54,48,48,48,10,50,48,56,48,10,50,49,48, 48,10,55,50,48,48,10,48,52,48,48,10,48,56,48,48, 10,49,48,48,48,10,50,48,48,48,10,52,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,54,48,10,69,78,67, 79,68,73,78,71,32,56,53,52,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,54,49,10,69,78,67,79,68,73,78,71, 32,56,53,52,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,70,56,48,10,51,51,48,48,10,51,51, 48,48,10,51,51,48,48,10,51,51,48,48,10,51,51,48, 48,10,51,51,48,48,10,51,51,48,48,10,51,51,48,48, 10,51,51,48,48,10,51,51,48,48,10,51,51,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 54,50,10,69,78,67,79,68,73,78,71,32,56,53,52,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 70,67,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,70,70,67,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,49,54,51,10,69,78, 67,79,68,73,78,71,32,56,53,52,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,70,67,67,48,10,54, 67,67,48,10,54,67,67,48,10,54,67,67,48,10,54,67, 67,48,10,54,55,56,48,10,54,55,56,48,10,54,55,56, 48,10,54,55,56,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,70,51,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,54,52,10,69,78,67,79,68,73,78, 71,32,56,53,52,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,51,51, 48,48,10,51,51,48,48,10,49,69,48,48,10,49,69,48, 48,10,49,69,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,54,53,10,69,78,67,79,68,73,78,71,32,56,53,52, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 67,70,67,48,10,67,68,56,48,10,67,68,56,48,10,67, 68,56,48,10,67,68,56,48,10,55,57,56,48,10,55,57, 56,48,10,55,57,56,48,10,55,57,56,48,10,51,49,56, 48,10,51,49,56,48,10,51,49,56,48,10,51,51,67,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,54,54,10,69, 78,67,79,68,73,78,71,32,56,53,53,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,68,70,67,48,10, 68,69,67,48,10,68,69,67,48,10,68,69,67,48,10,68, 69,67,48,10,68,69,67,48,10,55,54,67,48,10,55,54, 67,48,10,55,54,67,48,10,55,54,67,48,10,55,54,67, 48,10,50,54,67,48,10,50,70,67,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,54,55,10,69,78,67,79,68,73, 78,71,32,56,53,53,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,56,70,67,48,10,56,68,52,48,10, 56,68,52,48,10,56,68,52,48,10,53,53,52,48,10,53, 53,52,48,10,53,53,52,48,10,53,53,52,48,10,53,53, 52,48,10,50,53,52,48,10,50,53,52,48,10,50,53,52, 48,10,50,70,67,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,54,56,10,69,78,67,79,68,73,78,71,32,56,53, 53,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,55,48,48,10,54,55,48,48,10,54, 55,48,48,10,54,55,48,48,10,54,55,48,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,70,68,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,54,57,10, 69,78,67,79,68,73,78,71,32,56,53,53,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,51,51,48,48,10, 49,69,48,48,10,49,69,48,48,10,48,67,48,48,10,49, 69,48,48,10,49,69,48,48,10,51,51,48,48,10,51,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,54,65,10,69,78,67,79,68, 73,78,71,32,56,53,53,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,68,70,56,48,10,68,66,48,48, 10,68,66,48,48,10,68,66,48,48,10,55,51,48,48,10, 55,51,48,48,10,55,51,48,48,10,55,51,48,48,10,55, 51,48,48,10,68,66,48,48,10,68,66,48,48,10,68,66, 48,48,10,68,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,49,54,66,10,69,78,67,79,68,73,78,71,32,56, 53,53,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,68,70,67,48,10,68,69,67,48,10,68,69,67,48, 10,68,69,67,48,10,55,54,67,48,10,55,54,67,48,10, 55,54,67,48,10,55,54,67,48,10,55,54,67,48,10,68, 69,67,48,10,68,69,67,48,10,68,69,67,48,10,68,70, 67,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,54,67, 10,69,78,67,79,68,73,78,71,32,56,53,53,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,54,68,10,69,78,67,79, 68,73,78,71,32,56,53,53,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,54,69,10,69,78,67,79,68,73,78,71,32, 56,53,53,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,69,48,48,10,54,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,51,48,48,10,55, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,54, 70,10,69,78,67,79,68,73,78,71,32,56,53,53,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,55,51,56,48,10,55,51,56, 48,10,55,70,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,55,48,10,69,78,67, 79,68,73,78,71,32,56,53,54,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,51,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,55,49,10,69,78,67,79,68,73,78,71, 32,56,53,54,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,51, 48,48,10,51,51,48,48,10,48,48,48,48,10,55,55,48, 48,10,51,51,48,48,10,51,51,48,48,10,51,51,48,48, 10,51,51,48,48,10,51,51,48,48,10,51,51,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 55,50,10,69,78,67,79,68,73,78,71,32,56,53,54,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,68,56,48,10,54,68, 56,48,10,48,48,48,48,10,70,70,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,70,70,67,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,49,55,51,10,69,78, 67,79,68,73,78,71,32,56,53,54,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,48,48, 48,48,10,69,67,67,48,10,54,67,67,48,10,54,67,67, 48,10,54,55,56,48,10,54,55,56,48,10,54,51,48,48, 10,54,51,48,48,10,70,51,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,55,52,10,69,78,67,79,68,73,78, 71,32,56,53,54,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,51,51,48, 48,10,49,69,48,48,10,49,69,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,55,53,10,69,78,67,79,68,73,78,71,32,56,53,54, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,49,56,48,10,48, 49,56,48,10,48,48,48,48,10,67,70,56,48,10,67,68, 56,48,10,67,68,56,48,10,55,57,56,48,10,55,57,56, 48,10,51,49,56,48,10,51,49,56,48,10,51,51,67,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,55,54,10,69, 78,67,79,68,73,78,71,32,56,53,54,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,54,67,48,10,48,54,67,48,10,48, 48,48,48,10,68,70,67,48,10,68,69,67,48,10,68,69, 67,48,10,55,54,67,48,10,55,54,67,48,10,55,54,67, 48,10,50,54,67,48,10,50,70,67,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,55,55,10,69,78,67,79,68,73, 78,71,32,56,53,54,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,65,56,48,10,48,48,48,48,10,66, 70,56,48,10,65,65,56,48,10,65,65,56,48,10,65,65, 56,48,10,52,65,56,48,10,52,65,56,48,10,52,65,56, 48,10,53,70,67,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,55,56,10,69,78,67,79,68,73,78,71,32,56,53, 54,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,48,48,48,48,10,70,57,56,48,10,55, 57,56,48,10,54,70,48,48,10,54,54,48,48,10,54,54, 48,48,10,54,70,48,48,10,55,57,56,48,10,70,57,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,55,57,10, 69,78,67,79,68,73,78,71,32,56,53,54,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,48,67,48,48,10,48,67,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,55,65,10,69,78,67,79,68, 73,78,71,32,56,53,55,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,48,48,48,10, 67,70,48,48,10,67,70,48,48,10,55,66,48,48,10,51, 51,48,48,10,51,51,48,48,10,55,66,48,48,10,67,70, 48,48,10,67,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,49,55,66,10,69,78,67,79,68,73,78,71,32,56, 53,55,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,54,67,48, 10,48,54,67,48,10,48,48,48,48,10,68,70,67,48,10, 68,69,67,48,10,68,69,67,48,10,55,54,67,48,10,55, 54,67,48,10,68,69,67,48,10,68,69,67,48,10,68,70, 67,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,55,67, 10,69,78,67,79,68,73,78,71,32,56,53,55,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,55,68,10,69,78,67,79, 68,73,78,71,32,56,53,55,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,70,48,48,10,51,49,56,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,51, 49,56,48,10,49,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,55,69,10,69,78,67,79,68,73,78,71,32, 56,53,55,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,49,68,56,48, 10,51,51,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,56,48,10,49, 68,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,55, 70,10,69,78,67,79,68,73,78,71,32,56,53,55,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,53,66,48,48,10,55,70,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,56,48,10,69,78,67, 79,68,73,78,71,32,56,53,55,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,67,67, 67,48,10,67,67,67,48,10,67,67,67,48,10,67,67,67, 48,10,67,67,67,48,10,67,67,67,48,10,67,67,67,48, 10,67,67,67,48,10,67,67,67,48,10,67,67,67,48,10, 67,67,67,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,56,49,10,69,78,67,79,68,73,78,71, 32,56,53,55,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,70,69,48,48,10,54,51,48,48,10,54,49, 56,48,10,55,57,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,55,57,56,48,10,54,49,56,48,10,54,51,48,48,10, 70,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 56,50,10,69,78,67,79,68,73,78,71,32,56,53,55,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 69,48,48,10,54,66,48,48,10,67,57,56,48,10,67,57, 56,48,10,68,68,56,48,10,68,53,56,48,10,68,53,56, 48,10,68,53,56,48,10,68,68,56,48,10,67,57,56,48, 10,67,57,56,48,10,54,66,48,48,10,51,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,49,56,51,10,69,78, 67,79,68,73,78,71,32,56,53,55,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,69,48,48,10,51, 51,48,48,10,54,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,54,49,56,48, 10,51,51,48,48,10,49,69,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,114,114,111,119,108,101,102,116,10,69,78,67,79,68, 73,78,71,32,56,53,57,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,51,48,48,48,10, 54,48,48,48,10,70,70,56,48,10,70,70,56,48,10,54, 48,48,48,10,51,48,48,48,10,49,56,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,114, 114,111,119,117,112,10,69,78,67,79,68,73,78,71,32,56, 53,57,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,49,69,48,48,10,51,70,48,48, 10,54,68,56,48,10,52,67,56,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,114,114,111,119,114,105, 103,104,116,10,69,78,67,79,68,73,78,71,32,56,53,57, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,54,48,48,10,48,51,48,48,10,70,70, 56,48,10,70,70,56,48,10,48,51,48,48,10,48,54,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,114,114,111,119,100,111,119,110, 10,69,78,67,79,68,73,78,71,32,56,53,57,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,52,67,56,48,10,54,68,56,48,10,51, 70,48,48,10,49,69,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,114,114,111,119,98,111,116,104,10,69,78, 67,79,68,73,78,71,32,56,53,57,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,50,48,48,10,51,51, 48,48,10,54,49,56,48,10,70,70,67,48,10,70,70,67, 48,10,54,49,56,48,10,51,51,48,48,10,49,50,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,114,114,111,119,117,112,100,110,10,69,78,67,79,68, 73,78,71,32,56,53,57,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,70,48,48,10,54,68,56,48,10,52,67,56,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,52, 67,56,48,10,54,68,56,48,10,51,70,48,48,10,49,69, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,49,57,54,10,69,78,67,79,68,73,78,71,32,56, 53,57,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,70,67,48,48, 10,70,69,48,48,10,70,48,48,48,10,70,56,48,48,10, 68,67,48,48,10,67,69,48,48,10,52,55,48,48,10,48, 51,56,48,10,48,49,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,57,55, 10,69,78,67,79,68,73,78,71,32,56,53,57,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,70,56,48,10,51,70,56,48, 10,48,55,56,48,10,48,70,56,48,10,49,68,56,48,10, 51,57,56,48,10,55,49,48,48,10,69,48,48,48,10,67, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,57,56,10,69,78,67,79, 68,73,78,71,32,56,54,48,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,67,48,48,48,10,69,48,48,48,10,55,49,48,48, 10,51,57,56,48,10,49,68,56,48,10,48,70,56,48,10, 48,55,56,48,10,51,70,56,48,10,49,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,57,57,10,69,78,67,79,68,73,78,71,32, 56,54,48,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,49,56, 48,10,48,51,56,48,10,52,55,48,48,10,67,69,48,48, 10,68,67,48,48,10,70,56,48,48,10,70,48,48,48,10, 70,69,48,48,10,70,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,57, 65,10,69,78,67,79,68,73,78,71,32,56,54,48,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,51,48,48,10,49,66,48, 48,10,51,51,48,48,10,54,51,48,48,10,70,70,67,48, 10,70,70,67,48,10,54,51,48,48,10,51,51,48,48,10, 49,66,48,48,10,48,51,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,57,66,10,69,78,67, 79,68,73,78,71,32,56,54,48,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,48,48,48,10,51,54,48,48,10,51,51,48, 48,10,51,49,56,48,10,70,70,67,48,10,70,70,67,48, 10,51,49,56,48,10,51,51,48,48,10,51,54,48,48,10, 51,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,57,67,10,69,78,67,79,68,73,78,71, 32,56,54,48,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,56,48,48,10,51,48,48,48,10,54,54,48, 48,10,70,70,56,48,10,70,57,56,48,10,54,48,48,48, 10,51,48,48,48,10,49,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 57,68,10,69,78,67,79,68,73,78,71,32,56,54,48,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,54,48,48,10,51,51,48,48,10,70,70,56, 48,10,67,70,56,48,10,48,51,48,48,10,48,54,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,49,57,69,10,69,78, 67,79,68,73,78,71,32,56,54,48,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,54, 48,48,10,54,67,48,48,10,70,70,56,48,10,70,70,56, 48,10,54,67,48,48,10,51,54,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,57,70,10,69,78,67,79,68,73,78, 71,32,56,54,48,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,69,48,48,10,51, 70,48,48,10,54,68,56,48,10,52,67,56,48,10,49,69, 48,48,10,51,70,48,48,10,54,68,56,48,10,52,67,56, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,65,48,10,69,78,67,79,68,73,78,71,32,56,54,48, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,54,48,48,10,49,66,48,48,10,70,70, 56,48,10,70,70,56,48,10,49,66,48,48,10,51,54,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,65,49,10,69, 78,67,79,68,73,78,71,32,56,54,48,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,52, 67,56,48,10,54,68,56,48,10,51,70,48,48,10,49,69, 48,48,10,52,67,56,48,10,54,68,56,48,10,51,70,48, 48,10,49,69,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,65,50,10,69,78,67,79,68,73, 78,71,32,56,54,49,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,57,56,48,10,51,51,48,48,10,54, 54,48,48,10,70,67,48,48,10,70,67,48,48,10,54,54, 48,48,10,51,51,48,48,10,49,57,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,65,51,10,69,78,67,79,68,73,78,71,32,56,54, 49,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 67,67,48,48,10,54,54,48,48,10,51,51,48,48,10,49, 70,56,48,10,49,70,56,48,10,51,51,48,48,10,54,54, 48,48,10,67,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,65,52,10, 69,78,67,79,68,73,78,71,32,56,54,49,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,57,56,48,10, 51,49,56,48,10,54,49,56,48,10,70,70,56,48,10,70, 70,56,48,10,54,49,56,48,10,51,49,56,48,10,49,57, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,65,53,10,69,78,67,79,68, 73,78,71,32,56,54,49,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,70,48,48,10,54,68,56,48,10,52,67,56,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,55,70, 56,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,49,65,54,10,69,78,67,79,68,73,78,71,32,56, 54,49,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,67,67,48,48,10,67,54,48,48,10,67,51,48,48,10, 70,70,56,48,10,70,70,56,48,10,67,51,48,48,10,67, 54,48,48,10,67,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,65,55, 10,69,78,67,79,68,73,78,71,32,56,54,49,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,52,67,56,48,10,54,68,56,48,10,51, 70,48,48,10,49,69,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,114,114,111,119,117,112,100,110,98,115,101, 10,69,78,67,79,68,73,78,71,32,56,54,49,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,49,69,48,48,10,51,70,48,48,10,54,68,56,48, 10,52,67,56,48,10,48,67,48,48,10,52,67,56,48,10, 54,68,56,48,10,51,70,48,48,10,49,69,48,48,10,48, 67,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,65,57,10,69,78,67,79, 68,73,78,71,32,56,54,49,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,66,48,48,10,51,51,56,48, 10,54,49,56,48,10,70,70,56,48,10,70,70,48,48,10, 54,48,48,48,10,51,48,48,48,10,49,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,65,65,10,69,78,67,79,68,73,78,71,32, 56,54,49,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,67,48,48,10,69,54,48,48,10,67,51,48,48, 10,70,70,56,48,10,55,70,56,48,10,48,51,48,48,10, 48,54,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,65, 66,10,69,78,67,79,68,73,78,71,32,56,54,49,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,57,48, 48,10,51,51,56,48,10,54,50,56,48,10,70,70,56,48, 10,70,70,48,48,10,54,50,48,48,10,51,50,48,48,10, 49,56,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,65,67,10,69,78,67, 79,68,73,78,71,32,56,54,50,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,52,67,48,48,10,69,54,48, 48,10,65,51,48,48,10,70,70,56,48,10,55,70,56,48, 10,50,51,48,48,10,50,54,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,65,68,10,69,78,67,79,68,73,78,71, 32,56,54,50,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,50,48,48,10,51,51,48,48,10,54,68,56, 48,10,70,70,67,48,10,70,51,67,48,10,54,49,56,48, 10,51,51,48,48,10,49,50,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 65,69,10,69,78,67,79,68,73,78,71,32,56,54,50,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,50, 48,48,10,51,55,48,48,10,54,53,56,48,10,70,70,67, 48,10,70,70,67,48,10,54,57,56,48,10,51,66,48,48, 10,49,50,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,49,65,70,10,69,78, 67,79,68,73,78,71,32,56,54,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,49,67,48,10,48,51,56,48,10,48,55,48,48,10,48, 69,48,48,10,49,67,48,48,10,51,70,67,48,10,55,70, 67,48,10,48,51,56,48,10,48,55,48,48,10,67,69,48, 48,10,68,67,48,48,10,70,56,48,48,10,70,48,48,48, 10,70,67,48,48,10,70,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,66,48,10,69,78,67,79,68,73,78, 71,32,56,54,50,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,56,48,48,10,51,48,48,48,10,55, 70,56,48,10,55,70,56,48,10,51,49,56,48,10,49,57, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,66,49,10,69,78,67,79,68,73,78,71,32,56,54,50, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,54,48,48,10,48,51,48,48,10,55,70,56,48,10,55, 70,56,48,10,54,51,48,48,10,54,54,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,66,50,10,69, 78,67,79,68,73,78,71,32,56,54,50,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,49,57, 56,48,10,51,49,56,48,10,55,70,56,48,10,55,70,56, 48,10,51,48,48,48,10,49,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,66,51,10,69,78,67,79,68,73, 78,71,32,56,54,50,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,54,48,48,10,54,51, 48,48,10,55,70,56,48,10,55,70,56,48,10,48,51,48, 48,10,48,54,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,66,52,10,69,78,67,79,68,73,78,71,32,56,54, 50,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,69,48,48,10,55,69,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,49,54, 56,48,10,49,70,56,48,10,48,70,48,48,10,48,54,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,99,97,114,114,105,97,103,101, 114,101,116,117,114,110,10,69,78,67,79,68,73,78,71,32, 56,54,50,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,49,57,56,48,10,51,49,56,48,10, 55,70,56,48,10,55,70,56,48,10,51,48,48,48,10,49, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,66, 54,10,69,78,67,79,68,73,78,71,32,56,54,51,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,69,48,48,10,49,70,48,48, 10,51,66,56,48,10,51,49,56,48,10,66,53,56,48,10, 70,68,56,48,10,55,57,56,48,10,51,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,66,55,10,69,78,67, 79,68,73,78,71,32,56,54,51,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,56,48,48,10,55,67,48,48,10,69,69,48,48, 10,67,54,48,48,10,68,54,56,48,10,68,70,56,48,10, 67,70,48,48,10,67,54,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,66,56,10,69,78,67,79,68,73,78,71, 32,56,54,51,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,70,70,56,48,10,70,70,56,48,10,50,48, 48,48,10,55,67,48,48,10,55,70,48,48,10,55,65,48, 48,10,68,56,48,48,10,67,67,48,48,10,56,67,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 66,57,10,69,78,67,79,68,73,78,71,32,56,54,51,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,67, 67,48,48,10,68,56,48,48,10,70,70,56,48,10,70,70, 56,48,10,68,56,48,48,10,67,67,48,48,10,48,48,48, 48,10,49,57,56,48,10,48,68,56,48,10,70,70,56,48, 10,70,70,56,48,10,48,68,56,48,10,49,57,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,49,66,65,10,69,78, 67,79,68,73,78,71,32,56,54,51,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 70,48,48,10,49,70,48,48,10,49,69,48,48,10,49,70, 48,48,10,68,66,56,48,10,67,49,56,48,10,67,49,56, 48,10,69,51,56,48,10,55,70,48,48,10,51,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,66,66,10,69,78,67,79,68,73,78, 71,32,56,54,51,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,67,48,48,10,55, 67,48,48,10,51,67,48,48,10,55,67,48,48,10,69,68, 56,48,10,67,49,56,48,10,67,49,56,48,10,69,51,56, 48,10,55,70,48,48,10,51,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,66,67,10,69,78,67,79,68,73,78,71,32,56,54,51, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,51,48,48,48,10,54,48,48,48,10,70,70, 56,48,10,70,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,66,68,10,69, 78,67,79,68,73,78,71,32,56,54,51,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,70,70,56,48,10,70,70, 56,48,10,54,48,48,48,10,51,48,48,48,10,49,56,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,66,69,10,69,78,67,79,68,73, 78,71,32,56,54,51,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,69,48,48,10, 48,70,48,48,10,48,68,56,48,10,48,67,56,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,66,70,10,69,78,67,79,68,73,78,71,32,56,54, 51,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,49,67,48,48,10,51,67,48,48,10, 54,67,48,48,10,52,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,67,48,10, 69,78,67,79,68,73,78,71,32,56,54,52,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,54,48,48,10,48,51,48,48,10,70,70,56,48,10,70, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,67,49,10,69,78,67,79,68, 73,78,71,32,56,54,52,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,70,70,56,48,10,70,70,56,48,10,48, 51,48,48,10,48,54,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,49,67,50,10,69,78,67,79,68,73,78,71,32,56, 54,52,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,56,48,10,48, 68,56,48,10,48,70,48,48,10,48,69,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,67,51, 10,69,78,67,79,68,73,78,71,32,56,54,52,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,52,67,48,48,10,54,67,48,48,10,51, 67,48,48,10,49,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,67,52,10,69,78,67,79, 68,73,78,71,32,56,54,52,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,54,48, 48,10,48,51,48,48,10,70,70,56,48,10,70,70,56,48, 10,48,51,48,48,10,51,54,48,48,10,54,48,48,48,10, 70,70,56,48,10,70,70,56,48,10,54,48,48,48,10,51, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,67,53,10,69,78,67,79,68,73,78,71,32, 56,54,52,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,51,48,48,10,55,66,48,48,10,70,70,48, 48,10,66,55,48,48,10,51,51,48,48,10,51,51,48,48, 10,51,51,48,48,10,51,51,48,48,10,51,51,48,48,10, 51,66,52,48,10,51,70,67,48,10,51,55,56,48,10,51, 51,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,67, 54,10,69,78,67,79,68,73,78,71,32,56,54,52,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,48,48,48,10,54,48,48,48,10,70,70,56, 48,10,70,70,56,48,10,54,48,48,48,10,51,54,48,48, 10,48,51,48,48,10,70,70,56,48,10,70,70,56,48,10, 48,51,48,48,10,48,54,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,67,55,10,69,78,67, 79,68,73,78,71,32,56,54,52,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,48, 48,48,10,54,48,48,48,10,70,70,56,48,10,70,70,56, 48,10,54,48,48,48,10,51,48,48,48,10,54,48,48,48, 10,70,70,56,48,10,70,70,56,48,10,54,48,48,48,10, 51,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,67,56,10,69,78,67,79,68,73,78,71, 32,56,54,52,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,50,50,48,48,10,55,55,48,48,10,65,65, 56,48,10,50,50,48,48,10,50,50,48,48,10,50,50,48, 48,10,50,50,48,48,10,50,50,48,48,10,50,50,48,48, 10,50,50,48,48,10,50,50,48,48,10,50,50,48,48,10, 50,50,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 67,57,10,69,78,67,79,68,73,78,71,32,56,54,52,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,54,48,48,10,48,51,48,48,10,70,70, 56,48,10,70,70,56,48,10,48,51,48,48,10,48,54,48, 48,10,48,51,48,48,10,70,70,56,48,10,70,70,56,48, 10,48,51,48,48,10,48,54,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,49,67,65,10,69,78, 67,79,68,73,78,71,32,56,54,53,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,50,50,48,48,10,50, 50,48,48,10,50,50,48,48,10,50,50,48,48,10,50,50, 48,48,10,50,50,48,48,10,50,50,48,48,10,50,50,48, 48,10,50,50,48,48,10,50,50,48,48,10,65,65,56,48, 10,55,55,48,48,10,50,50,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,67,66,10,69,78,67,79,68,73,78, 71,32,56,54,53,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,51,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,51,48,48,10,48,54,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,67,67,10,69,78,67,79,68,73,78,71,32,56,54,53, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,54,48,48,10,48, 51,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,55,70,56,48,10,55,70,56,48,10,51,48,48, 48,10,49,56,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,67,68,10,69, 78,67,79,68,73,78,71,32,56,54,53,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 49,48,48,10,49,49,48,48,10,51,70,56,48,10,52,50, 48,48,10,51,70,56,48,10,49,52,48,48,10,48,52,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,67,69,10,69,78,67,79,68,73, 78,71,32,56,54,53,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,52,48,48,10,50, 53,48,48,10,55,70,56,48,10,56,67,52,48,10,55,70, 56,48,10,50,57,48,48,10,48,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,67,70,10,69,78,67,79,68,73,78,71,32,56,54, 53,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,56,48,48,10,48,65,48,48,10,55, 70,48,48,10,49,48,56,48,10,55,70,48,48,10,50,50, 48,48,10,50,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,114,114,111,119,100,98,108, 108,101,102,116,10,69,78,67,79,68,73,78,71,32,56,54, 53,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 49,56,48,48,10,51,70,56,48,10,55,70,56,48,10,67, 48,48,48,10,55,70,56,48,10,51,70,56,48,10,49,56, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,114,114,111,119,100,98,108, 117,112,10,69,78,67,79,68,73,78,71,32,56,54,53,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 56,48,48,10,49,67,48,48,10,51,54,48,48,10,55,55, 48,48,10,70,55,56,48,10,66,54,56,48,10,51,54,48, 48,10,51,54,48,48,10,51,54,48,48,10,51,54,48,48, 10,51,54,48,48,10,51,54,48,48,10,51,54,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,114,114,111,119,100,98,108,114,105, 103,104,116,10,69,78,67,79,68,73,78,71,32,56,54,53, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,56,48,48,10,48, 67,48,48,10,70,69,48,48,10,70,70,48,48,10,48,49, 56,48,10,70,70,48,48,10,70,69,48,48,10,48,67,48, 48,10,49,56,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,114,114,111,119,100,98,108,100, 111,119,110,10,69,78,67,79,68,73,78,71,32,56,54,53, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,54,48,48,10,51,54,48,48,10,51,54,48,48,10,51, 54,48,48,10,51,54,48,48,10,51,54,48,48,10,51,54, 48,48,10,66,54,56,48,10,70,55,56,48,10,55,55,48, 48,10,51,54,48,48,10,49,67,48,48,10,48,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,114,114,111,119,100,98,108,98, 111,116,104,10,69,78,67,79,68,73,78,71,32,56,54,54, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,50,48,48,10,51, 51,48,48,10,55,70,56,48,10,70,70,67,48,10,56,48, 67,48,10,70,70,67,48,10,55,70,56,48,10,51,51,48, 48,10,49,50,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,68,53,10,69, 78,67,79,68,73,78,71,32,56,54,54,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,56,48,48,10, 49,67,48,48,10,51,54,48,48,10,55,55,48,48,10,70, 55,56,48,10,66,54,56,48,10,51,54,48,48,10,66,54, 56,48,10,70,55,56,48,10,55,55,48,48,10,51,54,48, 48,10,49,67,48,48,10,48,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,68,54,10,69,78,67,79,68,73, 78,71,32,56,54,54,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 70,69,48,48,10,70,69,48,48,10,67,67,48,48,10,67, 54,48,48,10,69,51,48,48,10,70,49,56,48,10,68,56, 56,48,10,48,67,48,48,10,48,54,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,68,55,10,69,78,67,79,68,73,78,71,32,56,54, 54,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,70,56,48,10, 51,70,56,48,10,49,57,56,48,10,51,49,56,48,10,54, 51,56,48,10,67,55,56,48,10,56,68,56,48,10,49,56, 48,48,10,51,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,68,56,10, 69,78,67,79,68,73,78,71,32,56,54,54,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,48,48,48,10,49,56,48,48,10, 56,68,56,48,10,67,55,56,48,10,54,51,56,48,10,51, 49,56,48,10,49,57,56,48,10,51,70,56,48,10,51,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,68,57,10,69,78,67,79,68, 73,78,71,32,56,54,54,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,54,48,48,10,48,67,48,48,10,68,56,56,48,10, 70,49,56,48,10,69,51,48,48,10,67,54,48,48,10,67, 67,48,48,10,70,69,48,48,10,70,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,49,68,65,10,69,78,67,79,68,73,78,71,32,56, 54,54,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,52,48,48,10,48,56,48,48, 10,49,48,48,48,10,51,70,56,48,10,52,48,48,48,10, 70,70,56,48,10,52,48,48,48,10,51,70,56,48,10,49, 48,48,48,10,48,56,48,48,10,48,52,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,68,66, 10,69,78,67,79,68,73,78,71,32,56,54,54,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,48,48,48,10,48,56,48,48,10,48,52,48,48, 10,70,69,48,48,10,48,49,48,48,10,70,70,56,48,10, 48,49,48,48,10,70,69,48,48,10,48,52,48,48,10,48, 56,48,48,10,49,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,68,67,10,69,78,67,79, 68,73,78,71,32,56,54,54,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,50,48,48,48,10,52,50,48,48,10,70,53,56,48,10, 52,56,48,48,10,50,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,68,68,10,69,78,67,79,68,73,78,71,32, 56,54,54,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,50,48,48, 10,50,49,48,48,10,68,55,56,48,10,48,57,48,48,10, 48,50,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,68, 69,10,69,78,67,79,68,73,78,71,32,56,54,55,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,49,69,48,48,10,51,70,48,48,10,54,68,56, 48,10,52,67,56,48,10,48,67,48,48,10,51,70,48,48, 10,51,70,48,48,10,48,67,48,48,10,51,70,48,48,10, 51,70,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,68,70,10,69,78,67, 79,68,73,78,71,32,56,54,55,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,51,70,48,48,10,51,70,48,48,10,48,67,48, 48,10,51,70,48,48,10,51,70,48,48,10,48,67,48,48, 10,52,67,56,48,10,54,68,56,48,10,51,70,48,48,10, 49,69,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,69,48,10,69,78,67,79,68,73,78,71, 32,56,54,55,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,56,48,48,10,51,48,48,48,10,54,48,48, 48,10,69,68,56,48,10,69,68,56,48,10,54,48,48,48, 10,51,48,48,48,10,49,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 69,49,10,69,78,67,79,68,73,78,71,32,56,54,55,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,49,69,48,48,10,51,70,48,48,10,54,68, 56,48,10,52,48,56,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,49,69,50,10,69,78, 67,79,68,73,78,71,32,56,54,55,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,54, 48,48,10,48,51,48,48,10,68,66,56,48,10,68,66,56, 48,10,48,51,48,48,10,48,54,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,69,51,10,69,78,67,79,68,73,78, 71,32,56,54,55,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,52,48,56, 48,10,54,68,56,48,10,51,70,48,48,10,49,69,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,69,52,10,69,78,67,79,68,73,78,71,32,56,54,55, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,67, 54,48,48,10,67,67,48,48,10,68,56,48,48,10,70,70, 56,48,10,70,70,56,48,10,68,56,48,48,10,67,67,48, 48,10,67,54,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,69,53,10,69, 78,67,79,68,73,78,71,32,56,54,55,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,49,56,48,10,49, 57,56,48,10,48,68,56,48,10,70,70,56,48,10,70,70, 56,48,10,48,68,56,48,10,49,57,56,48,10,51,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,69,54,10,69,78,67,79,68,73, 78,71,32,56,54,55,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,56,48,48,10,50,56,48,48,10,52, 70,56,48,10,56,48,56,48,10,56,48,56,48,10,52,70, 56,48,10,50,56,48,48,10,49,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,69,55,10,69,78,67,79,68,73,78,71,32,56,54, 55,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,49,50,48,48,10,50,49,48,48,10, 52,48,56,48,10,55,51,56,48,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,49,50, 48,48,10,49,50,48,48,10,49,50,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,69,56,10, 69,78,67,79,68,73,78,71,32,56,54,56,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,65,48,48,10,70,57,48,48,10,56,48,56,48,10,56, 48,56,48,10,70,57,48,48,10,48,65,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,69,57,10,69,78,67,79,68, 73,78,71,32,56,54,56,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,69,48,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,55, 51,56,48,10,52,48,56,48,10,50,49,48,48,10,49,50, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,49,69,65,10,69,78,67,79,68,73,78,71,32,56, 54,56,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,49,50,48,48,10,50,49,48,48, 10,52,48,56,48,10,55,51,56,48,10,49,50,48,48,10, 49,50,48,48,10,49,69,48,48,10,48,48,48,48,10,49, 69,48,48,10,49,50,48,48,10,49,50,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,69,66, 10,69,78,67,79,68,73,78,71,32,56,54,56,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,49,50,48,48,10,50,49,48,48,10,52,48,56,48, 10,55,51,56,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,55, 51,56,48,10,52,48,56,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,69,67,10,69,78,67,79, 68,73,78,71,32,56,54,56,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,49,50,48, 48,10,51,70,48,48,10,52,48,56,48,10,55,51,56,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,55,51,56,48,10,52, 48,56,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,69,68,10,69,78,67,79,68,73,78,71,32, 56,54,56,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,56, 48,48,10,49,67,48,48,10,50,65,48,48,10,52,57,48, 48,10,56,56,56,48,10,69,66,56,48,10,50,65,48,48, 10,50,65,48,48,10,50,65,48,48,10,50,65,48,48,10, 50,65,48,48,10,69,66,56,48,10,56,56,56,48,10,70, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,69, 69,10,69,78,67,79,68,73,78,71,32,56,54,56,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,49,50,48,48,10,50,68,48,48,10,55,51,56, 48,10,50,49,48,48,10,55,51,56,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,69,70,10,69,78,67, 79,68,73,78,71,32,56,54,56,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,49,50, 48,48,10,50,68,48,48,10,55,51,56,48,10,50,49,48, 48,10,55,51,56,48,10,49,50,48,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,55,51,56,48,10, 52,48,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,70,48,10,69,78,67,79,68,73,78,71, 32,56,54,56,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,67,48,48,10,65,65,48,48,10,66,57,48, 48,10,56,48,56,48,10,56,48,56,48,10,66,57,48,48, 10,65,65,48,48,10,69,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 70,49,10,69,78,67,79,68,73,78,71,32,56,54,56,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 56,48,10,52,48,48,48,10,53,69,48,48,10,53,52,48, 48,10,53,67,48,48,10,53,50,48,48,10,52,49,48,48, 10,52,48,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,49,70,50,10,69,78, 67,79,68,73,78,71,32,56,54,57,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,52,48,56,48,10,50,48, 56,48,10,49,50,56,48,10,48,69,56,48,10,48,65,56, 48,10,49,69,56,48,10,48,48,56,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,70,51,10,69,78,67,79,68,73,78, 71,32,56,54,57,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,50,48,48,10,50, 49,48,48,10,55,51,56,48,10,49,50,48,48,10,49,50, 48,48,10,49,50,48,48,10,49,50,48,48,10,49,50,48, 48,10,55,51,56,48,10,50,49,48,48,10,49,50,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,70,52,10,69,78,67,79,68,73,78,71,32,56,54,57, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,50,54,48,48,10,53,51,48,48,10,70,70, 56,48,10,70,70,56,48,10,53,51,48,48,10,50,54,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,70,53,10,69, 78,67,79,68,73,78,71,32,56,54,57,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,51,48,48,10, 51,55,56,48,10,51,70,67,48,10,51,66,52,48,10,51, 51,48,48,10,51,51,48,48,10,51,51,48,48,10,51,51, 48,48,10,51,51,48,48,10,66,55,48,48,10,70,70,48, 48,10,55,66,48,48,10,51,51,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,70,54,10,69,78,67,79,68,73, 78,71,32,56,54,57,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,54,48,48,10,48,51,48,48,10,70,70,56,48,10, 70,70,56,48,10,48,51,48,48,10,48,54,48,48,10,48, 51,48,48,10,70,70,56,48,10,70,70,56,48,10,48,51, 48,48,10,48,54,48,48,10,48,51,48,48,10,70,70,56, 48,10,70,70,56,48,10,48,51,48,48,10,48,54,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,70,55,10,69,78,67,79,68,73,78,71,32,56,54, 57,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,54,48,48,10,51,54,48,48,10,54,54,48,48,10,70, 70,56,48,10,70,70,56,48,10,54,54,48,48,10,51,54, 48,48,10,49,54,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,70,56,10, 69,78,67,79,68,73,78,71,32,56,54,57,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,52,48,48,10, 51,54,48,48,10,51,51,48,48,10,70,70,56,48,10,70, 70,56,48,10,51,51,48,48,10,51,54,48,48,10,51,52, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,70,57,10,69,78,67,79,68, 73,78,71,32,56,54,57,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,50,68,48,48,10, 54,68,56,48,10,70,70,67,48,10,70,70,67,48,10,54, 68,56,48,10,50,68,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,49,70,65,10,69,78,67,79,68,73,78,71,32,56, 54,57,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,50,65,48,48,10,54,65,48,48,10, 70,70,56,48,10,70,70,56,48,10,54,65,48,48,10,50, 65,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,70,66, 10,69,78,67,79,68,73,78,71,32,56,54,57,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,50,65,48,48,10,50,66,48,48,10,70,70,56,48,10, 70,70,56,48,10,50,66,48,48,10,50,65,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,70,67,10,69,78,67,79, 68,73,78,71,32,56,55,48,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,53,53,48,48, 10,68,53,56,48,10,70,70,56,48,10,70,70,56,48,10, 68,53,56,48,10,53,53,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,70,68,10,69,78,67,79,68,73,78,71,32, 56,55,48,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,48,48,48,10,51,48,48,48,10,55,48,48,48, 10,68,70,56,48,10,68,70,56,48,10,55,48,48,48,10, 51,48,48,48,10,49,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,70, 69,10,69,78,67,79,68,73,78,71,32,56,55,48,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,52,48, 48,10,48,54,48,48,10,48,55,48,48,10,70,68,56,48, 10,70,68,56,48,10,48,55,48,48,10,48,54,48,48,10, 48,52,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,70,70,10,69,78,67, 79,68,73,78,71,32,56,55,48,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,50,48,48,10,51,51,48, 48,10,55,51,56,48,10,68,69,67,48,10,68,69,67,48, 10,55,51,56,48,10,51,51,48,48,10,49,50,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,118,101,114,115,97,108,10,69,78,67,79,68,73, 78,71,32,56,55,48,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,55, 70,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,51,51,48,48,10,49,69,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,48,49,10,69,78,67,79,68,73,78,71,32,56,55, 48,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,51,51,48,48,10,51,51,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,51,51,48,48,10,51,51,48, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,112,97,114,116,105,97,108,100, 105,102,102,10,69,78,67,79,68,73,78,71,32,56,55,48, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,69,48,48,10,51,51,48,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,70,56,48,10,49,57, 56,48,10,51,49,56,48,10,54,49,56,48,10,54,51,48, 48,10,54,51,48,48,10,54,54,48,48,10,51,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,101,120,105,115,116,101,110,116,105, 97,108,10,69,78,67,79,68,73,78,71,32,56,55,48,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,55,70,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,48,52,10,69,78, 67,79,68,73,78,71,32,56,55,48,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,55,70,56,48,10,48, 68,56,48,10,48,68,56,48,10,48,68,56,48,10,49,57, 56,48,10,49,57,56,48,10,55,70,56,48,10,49,57,56, 48,10,49,57,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,55,70,56,48,10,51,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,101,109,112,116,121,115,101,116,10,69,78,67,79,68,73, 78,71,32,56,55,48,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,49,56,48,10,48,68,56,48,10,49,70,48,48,10, 51,51,48,48,10,51,55,48,48,10,54,55,56,48,10,54, 68,56,48,10,54,68,56,48,10,55,57,56,48,10,55,57, 56,48,10,51,51,48,48,10,51,51,48,48,10,51,69,48, 48,10,54,67,48,48,10,54,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,68,101,108, 116,97,10,69,78,67,79,68,73,78,71,32,56,55,49,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,49,69, 48,48,10,49,69,48,48,10,49,69,48,48,10,51,51,48, 48,10,51,51,48,48,10,51,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,103,114,97,100,105,101,110,116,10,69, 78,67,79,68,73,78,71,32,56,55,49,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,51,51,48,48,10,51,51,48,48,10,49,69, 48,48,10,49,69,48,48,10,49,69,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,101,108,101,109,101,110,116,10,69,78,67,79,68,73, 78,71,32,56,55,49,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,70,56,48,10,51, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,55,70, 56,48,10,54,48,48,48,10,54,48,48,48,10,51,48,48, 48,10,49,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,110,111,116, 101,108,101,109,101,110,116,10,69,78,67,79,68,73,78,71, 32,56,55,49,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,51,48,48,10,49,70,56,48,10,51,54,48, 48,10,54,54,48,48,10,54,54,48,48,10,55,70,56,48, 10,54,67,48,48,10,54,67,48,48,10,51,56,48,48,10, 49,70,56,48,10,49,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,50, 48,65,10,69,78,67,79,68,73,78,71,32,56,55,49,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,70,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,70,48,48, 10,51,48,48,48,10,51,48,48,48,10,49,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,115,117,99,104,116,104,97,116,10,69, 78,67,79,68,73,78,71,32,56,55,49,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 69,48,48,10,48,51,48,48,10,48,49,56,48,10,48,49, 56,48,10,55,70,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,51,48,48,10,55,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,48,67,10,69,78,67,79,68,73, 78,71,32,56,55,49,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,54,48,48,10,55,69,48,48,10,48, 55,48,48,10,48,68,56,48,10,48,68,56,48,10,55,70, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,66,48, 48,10,55,69,48,48,10,51,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,48,68,10,69,78,67,79,68,73,78,71,32,56,55, 49,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 69,48,48,10,48,51,48,48,10,48,51,48,48,10,51,70, 48,48,10,48,51,48,48,10,48,51,48,48,10,51,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,48,69,10, 69,78,67,79,68,73,78,71,32,56,55,49,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,70,48,48,10,51,70,48,48,10,51,70,48,48,10, 51,70,48,48,10,51,70,48,48,10,51,70,48,48,10,51, 70,48,48,10,51,70,48,48,10,51,70,48,48,10,51,70, 48,48,10,51,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,112,114,111,100,117,99,116,10,69,78,67,79,68, 73,78,71,32,56,55,49,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,70,70,56,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,70,51,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,49,48,10,69,78,67,79,68,73,78,71,32,56, 55,50,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,70,51,56, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,70,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,115,117,109,109,97,116,105, 111,110,10,69,78,67,79,68,73,78,71,32,56,55,50,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,51, 48,56,48,10,51,48,56,48,10,49,56,48,48,10,49,56, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,67,48,48,10,48,67,48,48, 10,49,56,48,48,10,49,56,48,48,10,51,48,56,48,10, 51,48,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,109,105,110,117,115,10,69,78,67,79, 68,73,78,71,32,56,55,50,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,50,49,51,10,69,78,67,79,68,73,78,71,32, 56,55,50,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,55,70,56,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,49, 52,10,69,78,67,79,68,73,78,71,32,56,55,50,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,55,70,56,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,102,114,97,99,116,105,111,110,10,69,78, 67,79,68,73,78,71,32,56,55,50,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 49,56,48,10,48,49,56,48,10,48,51,48,48,10,48,51, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,67,48, 48,10,48,67,48,48,10,49,56,48,48,10,49,56,48,48, 10,51,48,48,48,10,51,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,49,54,10,69,78,67,79,68,73,78, 71,32,56,55,50,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,49,56,48,48,10,49,56,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,49,56,48, 10,48,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,115,116,101, 114,105,115,107,109,97,116,104,10,69,78,67,79,68,73,78, 71,32,56,55,50,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,67, 67,67,48,10,69,68,67,48,10,55,70,56,48,10,49,69, 48,48,10,49,69,48,48,10,55,70,56,48,10,69,68,67, 48,10,67,67,67,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,49,56,10,69,78,67,79,68,73,78,71,32,56,55,50, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,49,50,48,48,10,49,50, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,112,101,114,105,111,100,99,101,110, 116,101,114,101,100,10,69,78,67,79,68,73,78,71,32,56, 55,50,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,49,69,48,48,10, 49,69,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,114,97,100,105,99,97,108, 10,69,78,67,79,68,73,78,71,32,56,55,51,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,55,67,48,10,48,54,48, 48,10,48,54,48,48,10,48,67,48,48,10,48,67,48,48, 10,67,67,48,48,10,68,56,48,48,10,68,56,48,48,10, 68,56,48,48,10,70,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,49,66,10,69,78,67,79, 68,73,78,71,32,56,55,51,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,67,48, 48,48,10,50,55,67,48,10,67,54,48,48,10,50,54,48, 48,10,67,67,48,48,10,48,67,48,48,10,67,67,48,48, 10,68,56,48,48,10,68,56,48,48,10,68,56,48,48,10, 70,48,48,48,10,55,48,48,48,10,55,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,50,49,67,10,69,78,67,79,68,73,78,71,32, 56,55,51,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,65,48,48,48,10,65,55, 67,48,10,69,54,48,48,10,50,54,48,48,10,50,67,48, 48,10,48,67,48,48,10,67,67,48,48,10,68,56,48,48, 10,68,56,48,48,10,68,56,48,48,10,70,48,48,48,10, 55,48,48,48,10,55,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,112,114,111,112,111,114, 116,105,111,110,97,108,10,69,78,67,79,68,73,78,71,32, 56,55,51,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,49,56,48,10,52,65,48,48, 10,52,52,48,48,10,52,65,48,48,10,51,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,105,110,102,105,110,105, 116,121,10,69,78,67,79,68,73,78,71,32,56,55,51,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,51,48,48,10,57,52,56,48,10,56,56,56, 48,10,57,52,56,48,10,54,51,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,111,114,116,104,111,103,111,110,97,108, 10,69,78,67,79,68,73,78,71,32,56,55,51,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,110,103,108,101,10,69,78,67,79,68,73, 78,71,32,56,55,51,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,56,48,10,48, 49,56,48,10,48,51,48,48,10,48,54,48,48,10,48,67, 48,48,10,49,56,48,48,10,51,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,50,49,10,69,78,67,79,68,73,78,71,32,56,55, 51,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,56,48,10,48,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,67,48,48,10,49,69, 48,48,10,51,54,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,51,48,48,10,48,51,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,50,50,10, 69,78,67,79,68,73,78,71,32,56,55,51,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,49,56,48, 10,51,51,48,48,10,48,69,48,48,10,48,67,48,48,10, 49,65,48,48,10,51,50,48,48,10,54,50,48,48,10,51, 50,48,48,10,49,65,48,48,10,48,67,48,48,10,48,69, 48,48,10,51,51,48,48,10,48,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,50,50,51,10,69,78,67,79,68, 73,78,71,32,56,55,51,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,50,52,10,69,78,67,79,68,73,78,71,32,56, 55,52,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,68,56,48,10,48,70,48,48,10,48,69,48,48,10, 48,67,48,48,10,49,67,48,48,10,51,67,48,48,10,54, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,50,50,53, 10,69,78,67,79,68,73,78,71,32,56,55,52,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,51,48, 48,10,51,51,48,48,10,51,51,48,48,10,51,51,48,48, 10,51,51,48,48,10,51,51,48,48,10,51,51,48,48,10, 51,51,48,48,10,51,51,48,48,10,51,51,48,48,10,51, 51,48,48,10,51,51,48,48,10,51,51,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,50,54,10,69,78,67,79, 68,73,78,71,32,56,55,52,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,51,48,48,10,51,51,48, 48,10,51,51,67,48,10,51,51,56,48,10,51,51,48,48, 10,51,55,48,48,10,51,70,48,48,10,51,66,48,48,10, 51,51,48,48,10,55,51,48,48,10,70,51,48,48,10,51, 51,48,48,10,51,51,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,108, 111,103,105,99,97,108,97,110,100,10,69,78,67,79,68,73, 78,71,32,56,55,52,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,49,69,48,48,10,49,69, 48,48,10,51,51,48,48,10,51,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,108,111,103, 105,99,97,108,111,114,10,69,78,67,79,68,73,78,71,32, 56,55,52,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,51,51,48,48,10, 49,69,48,48,10,49,69,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,105,110,116,101,114,115, 101,99,116,105,111,110,10,69,78,67,79,68,73,78,71,32, 56,55,52,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,111,110,10, 69,78,67,79,68,73,78,71,32,56,55,52,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,105,110,116,101,103,114,97,108,10,69,78,67,79, 68,73,78,71,32,56,55,52,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,55, 48,48,10,48,68,56,48,10,48,68,56,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,54,67,48,48,10,54,67, 48,48,10,51,56,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,50,50,67,10,69,78,67,79,68,73,78,71,32, 56,55,52,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,49,57,56,48,10,51,55, 52,48,10,51,51,48,48,10,51,51,48,48,10,51,51,48, 48,10,51,51,48,48,10,51,51,48,48,10,51,51,48,48, 10,51,51,48,48,10,51,51,48,48,10,51,51,48,48,10, 51,51,48,48,10,51,51,48,48,10,51,51,48,48,10,51, 51,48,48,10,51,51,48,48,10,66,66,48,48,10,54,54, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,50, 68,10,69,78,67,79,68,73,78,71,32,56,55,52,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,51,54,67,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,68,66,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,50,50,69,10,69,78,67, 79,68,73,78,71,32,56,55,53,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 55,48,48,10,48,68,56,48,10,48,68,56,48,10,48,67, 48,48,10,48,67,48,48,10,49,69,48,48,10,51,70,48, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,51,70,48,48,10,49,69,48,48,10, 48,67,48,48,10,48,67,48,48,10,54,67,48,48,10,54, 67,48,48,10,51,56,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,50,70,10,69,78,67,79,68,73,78,71, 32,56,55,53,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,49,57,56,48,10,51, 55,52,48,10,51,51,48,48,10,51,51,48,48,10,51,51, 48,48,10,51,70,48,48,10,55,51,56,48,10,66,51,52, 48,10,66,51,52,48,10,66,51,52,48,10,66,51,52,48, 10,55,51,56,48,10,51,70,48,48,10,51,51,48,48,10, 51,51,48,48,10,51,51,48,48,10,66,66,48,48,10,54, 54,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,50, 51,48,10,69,78,67,79,68,73,78,71,32,56,55,53,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,51,54,67,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,55,70, 56,48,10,54,68,56,48,10,69,68,67,48,10,69,68,67, 48,10,69,68,67,48,10,69,68,67,48,10,54,68,56,48, 10,55,70,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,68,66,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,51,49,10,69,78, 67,79,68,73,78,71,32,56,55,53,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,69,48,48,10,49,66,48,48,10,49,66,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,51,67, 48,48,10,53,65,48,48,10,57,57,48,48,10,57,70,67, 48,10,49,66,56,48,10,49,57,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,68,56,48,48,10, 68,56,48,48,10,55,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,51,50,10,69,78,67,79,68,73,78, 71,32,56,55,53,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,69,48,48,10, 49,66,48,48,10,49,66,48,48,10,49,56,48,48,10,49, 56,48,48,10,51,67,48,48,10,53,65,48,48,10,57,57, 48,48,10,57,70,67,48,10,57,66,56,48,10,57,57,48, 48,10,53,65,48,48,10,51,67,48,48,10,49,56,48,48, 10,49,56,48,48,10,68,56,48,48,10,68,56,48,48,10, 55,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,51,51,10,69,78,67,79,68,73,78,71,32,56,55,53, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,69,48,48,10,49,66,48,48,10, 49,66,48,48,10,49,56,48,48,10,49,56,48,48,10,51, 67,48,48,10,53,65,48,48,10,57,57,48,48,10,57,66, 56,48,10,57,70,67,48,10,57,57,48,48,10,53,65,48, 48,10,51,67,48,48,10,49,56,48,48,10,49,56,48,48, 10,68,56,48,48,10,68,56,48,48,10,55,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,116,104,101,114,101,102,111,114,101, 10,69,78,67,79,68,73,78,71,32,56,55,53,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 49,56,48,10,54,49,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,51,53,10,69,78,67,79, 68,73,78,71,32,56,55,53,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,49,56,48,10,54,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,50,51,54,10,69,78,67,79,68,73,78,71,32, 56,55,53,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,51, 55,10,69,78,67,79,68,73,78,71,32,56,55,53,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,51,48,48,10,54,51,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,51,48,48,10,54,51,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,50,51,56,10,69,78,67, 79,68,73,78,71,32,56,55,54,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,51,57,10,69,78,67,79,68,73,78,71, 32,56,55,54,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,49,56,48,10,48,49,56, 48,10,48,48,48,48,10,55,56,48,48,10,48,48,48,48, 10,48,49,56,48,10,48,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,50, 51,65,10,69,78,67,79,68,73,78,71,32,56,55,54,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,48,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,54,49,56,48,10,54,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,51,66,10,69,78, 67,79,68,73,78,71,32,56,55,54,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,48,48,48,10,51,57,56,48,10,54,68,56, 48,10,54,55,48,48,10,48,48,48,48,10,49,56,48,48, 10,49,56,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,115,105,109,105,108,97,114,10,69,78,67,79,68,73,78, 71,32,56,55,54,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,57,56,48,10,54,68,56,48,10,54,55,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,51,68,10,69,78,67,79,68,73,78,71,32,56,55,54, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,55, 48,48,10,54,68,56,48,10,51,57,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,50,51,69,10,69, 78,67,79,68,73,78,71,32,56,55,54,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,51,48,48,10,55,57,56,48,10,54,68, 56,48,10,54,55,56,48,10,51,51,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,51,70,10,69,78,67,79,68,73, 78,71,32,56,55,54,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 50,48,48,48,10,53,48,48,48,10,53,48,48,48,10,56, 56,48,48,10,56,56,48,48,10,56,56,48,48,10,48,52, 52,48,10,48,52,52,48,10,48,52,52,48,10,48,50,56, 48,10,48,50,56,48,10,48,49,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,52,48,10,69,78,67,79,68,73,78,71,32,56,55, 54,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,67,48,48,10,48,54,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,54,48,48,10,48, 67,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,48,67,48,48,10,48,55,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,52,49,10, 69,78,67,79,68,73,78,71,32,56,55,54,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,52,48,48,10,48,52,48,48,10,51,68,56,48,10,54, 68,56,48,10,54,70,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,50,52,50,10,69,78,67,79,68, 73,78,71,32,56,55,55,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,51,57,56,48,10,54, 68,56,48,10,54,55,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,52,51,10,69,78,67,79,68,73,78,71,32,56, 55,55,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,57,56,48,10, 54,68,56,48,10,54,55,48,48,10,48,48,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,50,52,52, 10,69,78,67,79,68,73,78,71,32,56,55,55,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,52,48,48, 10,48,52,48,48,10,51,68,56,48,10,54,68,56,48,10, 54,70,48,48,10,48,56,48,48,10,55,70,56,48,10,48, 56,48,48,10,48,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,99,111,110,103,114,117,101,110,116,10,69,78, 67,79,68,73,78,71,32,56,55,55,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,57, 56,48,10,54,68,56,48,10,54,55,48,48,10,48,48,48, 48,10,55,70,56,48,10,48,48,48,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,52,54,10,69,78,67,79,68,73,78, 71,32,56,55,55,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,57,56,48,10,54,68, 56,48,10,54,55,48,48,10,48,52,48,48,10,55,70,56, 48,10,48,67,48,48,10,55,70,56,48,10,48,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,52,55,10,69,78,67,79,68,73,78,71,32,56,55,55, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 50,48,48,10,51,66,56,48,10,54,68,56,48,10,54,55, 48,48,10,48,67,48,48,10,55,70,56,48,10,48,56,48, 48,10,55,70,56,48,10,49,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,112,112,114,111,120,101,113,117, 97,108,10,69,78,67,79,68,73,78,71,32,56,55,55,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,57,56,48,10,54,68,56,48,10,54,55,48, 48,10,48,48,48,48,10,51,57,56,48,10,54,68,56,48, 10,54,55,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,52,57,10,69,78, 67,79,68,73,78,71,32,56,55,55,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,52,48,48,10,51,68, 56,48,10,54,68,56,48,10,54,55,48,48,10,48,67,48, 48,10,51,57,56,48,10,54,68,56,48,10,54,70,48,48, 10,48,56,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,52,65,10,69,78,67,79,68,73,78, 71,32,56,55,55,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,57,56,48,10,54,68,56,48,10,54,55, 48,48,10,48,48,48,48,10,51,57,56,48,10,54,68,56, 48,10,54,55,48,48,10,48,48,48,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,52,66,10,69,78,67,79,68,73,78,71,32,56,55,55, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,57,56,48,10,54, 68,56,48,10,54,55,48,48,10,48,48,48,48,10,51,57, 56,48,10,54,68,56,48,10,54,55,48,48,10,48,48,48, 48,10,51,57,56,48,10,54,68,56,48,10,54,55,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,50,52,67,10,69, 78,67,79,68,73,78,71,32,56,55,56,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 55,48,48,10,54,68,56,48,10,51,57,56,48,10,48,48, 48,48,10,55,70,56,48,10,48,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,52,68,10,69,78,67,79,68,73, 78,71,32,56,55,56,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,49,56,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,49,69, 48,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,52,69,10,69,78,67,79,68,73,78,71,32,56,55, 56,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,49, 50,48,48,10,55,51,56,48,10,48,48,48,48,10,48,48, 48,48,10,55,51,56,48,10,49,50,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,52,70,10, 69,78,67,79,68,73,78,71,32,56,55,56,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,50,48,48,10,55, 51,56,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,50,53,48,10,69,78,67,79,68, 73,78,71,32,56,55,56,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,53,49,10,69,78,67,79,68,73,78,71,32,56, 55,56,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,50,53,50, 10,69,78,67,79,68,73,78,71,32,56,55,56,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,49,56,48,10,48,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,53,51,10,69,78,67,79, 68,73,78,71,32,56,55,56,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,49,56,48,10,48,49,56,48, 10,48,48,48,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,48,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,50,53,52,10,69,78,67,79,68,73,78,71,32, 56,55,56,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,48,48,48, 10,54,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 54,70,56,48,10,54,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,53, 53,10,69,78,67,79,68,73,78,71,32,56,55,56,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,49,56,48,10,55,68,56,48, 10,48,48,48,48,10,48,48,48,48,10,55,68,56,48,10, 48,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,50,53,54,10,69,78,67, 79,68,73,78,71,32,56,55,57,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,48,48,10,49,52,48,48, 10,50,50,48,48,10,49,52,48,48,10,55,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,53,55,10,69,78,67,79,68,73,78,71, 32,56,55,57,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,49,50, 48,48,10,49,50,48,48,10,48,67,48,48,10,48,48,48, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,50, 53,56,10,69,78,67,79,68,73,78,71,32,56,55,57,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,51,48,48,10,48,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,53,57,10,69,78, 67,79,68,73,78,71,32,56,55,57,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,49,69,48,48,10,51,51, 48,48,10,48,48,48,48,10,55,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,53,65,10,69,78,67,79,68,73,78, 71,32,56,55,57,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,67,48,48,10,48,48, 48,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,53,66,10,69,78,67,79,68,73,78,71,32,56,55,57, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 55,70,56,48,10,51,70,48,48,10,49,69,48,48,10,51, 70,48,48,10,51,51,48,48,10,48,48,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,50,53,67,10,69, 78,67,79,68,73,78,71,32,56,55,57,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,67,48,48,10,49,69,48,48,10,49,69,48,48,10, 51,51,48,48,10,51,51,48,48,10,54,49,56,48,10,55, 70,56,48,10,48,48,48,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,55,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,53,68,10,69,78,67,79,68,73, 78,71,32,56,55,57,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,50,48,52,48, 10,50,48,56,48,10,54,52,56,48,10,65,65,67,48,10, 65,69,56,48,10,65,56,56,48,10,54,54,56,48,10,48, 48,48,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,53,69,10,69,78,67,79,68,73,78,71,32,56,55, 57,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,68,66,48,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,48,48,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,53,70,10, 69,78,67,79,68,73,78,71,32,56,55,57,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,49,67,48,48,10,50,50,48,48, 10,48,52,48,48,10,48,56,48,48,10,48,48,48,48,10, 48,56,48,48,10,48,48,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,110,111,116,101,113,117,97,108,10,69,78,67,79, 68,73,78,71,32,56,56,48,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,54,48,48,10,55,70,56,48,10,48,67,48,48,10, 48,67,48,48,10,55,70,56,48,10,49,56,48,48,10,51, 48,48,48,10,51,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,101, 113,117,105,118,97,108,101,110,99,101,10,69,78,67,79,68, 73,78,71,32,56,56,48,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,54,50,10,69,78,67,79,68,73,78,71,32,56, 56,48,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,51,48,48,10,48,51,48,48, 10,55,70,56,48,10,48,54,48,48,10,48,54,48,48,10, 55,70,56,48,10,49,56,48,48,10,49,56,48,48,10,55, 70,56,48,10,51,48,48,48,10,51,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,50,54,51, 10,69,78,67,79,68,73,78,71,32,56,56,48,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,70,56,48, 10,48,48,48,48,10,55,70,56,48,10,48,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,108,101,115,115,101,113,117,97,108,10,69,78, 67,79,68,73,78,71,32,56,56,48,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,51,56,48,10,48,69, 48,48,10,51,56,48,48,10,69,48,48,48,10,51,56,48, 48,10,48,69,48,48,10,48,51,56,48,10,48,48,48,48, 10,48,48,48,48,10,70,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,103,114,101,97,116,101,114,101,113,117,97,108,10,69,78, 67,79,68,73,78,71,32,56,56,48,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,48,48,48,10,51,56, 48,48,10,48,69,48,48,10,48,51,56,48,10,48,69,48, 48,10,51,56,48,48,10,69,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,70,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,54,54,10,69,78,67,79,68,73,78, 71,32,56,56,48,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,51,56,48,10,48,69,48,48,10,51, 56,48,48,10,54,48,48,48,10,51,56,48,48,10,48,69, 48,48,10,48,51,56,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,54,55,10,69,78,67,79,68,73,78,71,32,56,56,48, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,48,48,48,10,51,56,48,48,10,48,69,48,48,10,48, 51,56,48,10,48,69,48,48,10,51,56,48,48,10,54,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,50,54,56,10,69, 78,67,79,68,73,78,71,32,56,56,48,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,51,56,48,10, 48,69,48,48,10,51,56,48,48,10,54,48,48,48,10,51, 56,48,48,10,48,69,48,48,10,48,51,56,48,10,48,52, 48,48,10,48,52,48,48,10,55,70,56,48,10,48,56,48, 48,10,48,56,48,48,10,55,70,56,48,10,49,48,48,48, 10,49,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,54,57,10,69,78,67,79,68,73, 78,71,32,56,56,48,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,48,48,48,10,51,56,48,48,10, 48,69,48,48,10,48,51,56,48,10,48,69,48,48,10,51, 56,48,48,10,54,48,48,48,10,48,50,48,48,10,48,50, 48,48,10,55,70,56,48,10,48,52,48,48,10,48,52,48, 48,10,55,70,56,48,10,48,56,48,48,10,48,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,54,65,10,69,78,67,79,68,73,78,71,32,56,56, 49,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,52,52,48,10,48,67,67,48,10, 49,57,56,48,10,51,51,48,48,10,54,54,48,48,10,67, 67,48,48,10,54,54,48,48,10,51,51,48,48,10,49,57, 56,48,10,48,67,67,48,10,48,54,52,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,54,66,10, 69,78,67,79,68,73,78,71,32,56,56,49,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,56,56,48,48,10,67,67,48,48,10,54,54,48,48,10, 51,51,48,48,10,49,57,56,48,10,48,67,67,48,10,49, 57,56,48,10,51,51,48,48,10,54,54,48,48,10,67,67, 48,48,10,57,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,50,54,67,10,69,78,67,79,68, 73,78,71,32,56,56,49,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,51,48,48,10,51,69,48,48, 10,49,67,48,48,10,51,54,48,48,10,51,54,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,51, 54,48,48,10,51,54,48,48,10,49,67,48,48,10,51,69, 48,48,10,54,51,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,54,68,10,69,78,67,79,68,73,78,71,32,56, 56,49,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,50,48,48, 10,48,50,48,48,10,54,53,56,48,10,49,69,48,48,10, 48,52,48,48,10,48,56,48,48,10,49,69,48,48,10,54, 57,56,48,10,49,48,48,48,10,49,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,50,54,69, 10,69,78,67,79,68,73,78,71,32,56,56,49,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,52,48,48,10,48,55,56,48, 10,48,69,48,48,10,51,56,48,48,10,69,56,48,48,10, 51,56,48,48,10,49,69,48,48,10,49,51,56,48,10,49, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,54,70,10,69,78,67,79, 68,73,78,71,32,56,56,49,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,52,48,48,10,69,52,48,48,10,51,67,48,48, 10,48,69,48,48,10,48,66,56,48,10,48,69,48,48,10, 51,56,48,48,10,70,48,48,48,10,49,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,50,55,48,10,69,78,67,79,68,73,78,71,32, 56,56,49,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,52,48,48,10,48,55,56,48,10,48,69,48, 48,10,51,67,48,48,10,69,56,48,48,10,51,56,48,48, 10,48,69,48,48,10,48,66,56,48,10,69,56,48,48,10, 51,56,48,48,10,49,69,48,48,10,49,51,56,48,10,49, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,55, 49,10,69,78,67,79,68,73,78,71,32,56,56,49,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,52, 48,48,10,69,52,48,48,10,51,67,48,48,10,48,69,48, 48,10,48,66,56,48,10,48,69,48,48,10,51,56,48,48, 10,69,56,48,48,10,48,66,56,48,10,49,69,48,48,10, 51,56,48,48,10,70,48,48,48,10,49,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,50,55,50,10,69,78,67, 79,68,73,78,71,32,56,56,49,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,51,56,48,10,48,69,48,48,10,51,56, 48,48,10,69,48,48,48,10,51,56,48,48,10,48,69,48, 48,10,48,51,56,48,10,48,48,48,48,10,55,49,56,48, 10,68,68,56,48,10,67,55,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,55,51,10,69,78,67,79,68,73,78,71, 32,56,56,49,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,69, 48,48,48,10,51,56,48,48,10,48,69,48,48,10,48,51, 56,48,10,48,69,48,48,10,51,56,48,48,10,69,48,48, 48,10,48,48,48,48,10,55,49,56,48,10,68,68,56,48, 10,67,55,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,50, 55,52,10,69,78,67,79,68,73,78,71,32,56,56,50,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,52,48,48,10,48,55,56,48,10,48, 69,48,48,10,51,67,48,48,10,69,67,48,48,10,51,56, 48,48,10,48,69,48,48,10,48,66,56,48,10,49,56,48, 48,10,55,49,56,48,10,68,68,56,48,10,68,55,48,48, 10,49,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,55,53,10,69,78, 67,79,68,73,78,71,32,56,56,50,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,52,48,48,10,69,52,48,48,10,51,67,48,48,10,48, 69,48,48,10,48,70,56,48,10,48,69,48,48,10,51,56, 48,48,10,69,56,48,48,10,49,56,48,48,10,55,49,56, 48,10,68,68,56,48,10,68,55,48,48,10,49,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,55,54,10,69,78,67,79,68,73,78, 71,32,56,56,50,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,51,56,48,10,48,69,48,48,10,51,56,48,48,10,69, 48,48,48,10,51,56,48,48,10,48,69,48,48,10,69,51, 56,48,10,51,56,48,48,10,48,69,48,48,10,48,51,56, 48,10,48,69,48,48,10,51,56,48,48,10,69,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,55,55,10,69,78,67,79,68,73,78,71,32,56,56,50, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,69,48,48,48,10, 51,56,48,48,10,48,69,48,48,10,48,51,56,48,10,48, 69,48,48,10,51,56,48,48,10,69,51,56,48,10,48,69, 48,48,10,51,56,48,48,10,69,48,48,48,10,51,56,48, 48,10,48,69,48,48,10,48,51,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,50,55,56,10,69, 78,67,79,68,73,78,71,32,56,56,50,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,56,48,48,10,48,66,56,48,10,48,69,48,48,10, 51,56,48,48,10,69,56,48,48,10,51,56,48,48,10,48, 69,48,48,10,69,66,56,48,10,51,56,48,48,10,48,69, 48,48,10,48,66,56,48,10,48,69,48,48,10,51,56,48, 48,10,69,56,48,48,10,48,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,55,57,10,69,78,67,79,68,73, 78,71,32,56,56,50,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,56,48,48, 10,69,56,48,48,10,51,56,48,48,10,48,69,48,48,10, 48,66,56,48,10,48,69,48,48,10,51,56,48,48,10,69, 66,56,48,10,48,69,48,48,10,51,56,48,48,10,69,56, 48,48,10,51,56,48,48,10,48,69,48,48,10,48,66,56, 48,10,48,56,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,55,65,10,69,78,67,79,68,73,78,71,32,56,56, 50,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,56,48,10,48,49,56,48,10,48,55,48,48,10,49, 67,48,48,10,55,48,48,48,10,49,67,48,48,10,48,55, 48,48,10,48,49,56,48,10,48,48,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,55,66,10, 69,78,67,79,68,73,78,71,32,56,56,50,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,52,48,48,48,10, 54,48,48,48,10,51,56,48,48,10,48,69,48,48,10,48, 51,56,48,10,48,69,48,48,10,51,56,48,48,10,54,48, 48,48,10,52,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,50,55,67,10,69,78,67,79,68, 73,78,71,32,56,56,50,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,56,48, 10,48,49,56,48,10,48,55,48,48,10,49,67,48,48,10, 55,48,48,48,10,49,67,48,48,10,48,55,48,48,10,55, 49,56,48,10,49,67,56,48,10,48,54,48,48,10,48,51, 48,48,10,48,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,55,68,10,69,78,67,79,68,73,78,71,32,56, 56,50,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,52,48,48,48,10,54,48,48,48, 10,51,56,48,48,10,48,69,48,48,10,48,51,56,48,10, 48,69,48,48,10,51,56,48,48,10,54,51,56,48,10,52, 69,48,48,10,49,56,48,48,10,51,48,48,48,10,54,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,50,55,69, 10,69,78,67,79,68,73,78,71,32,56,56,51,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,49,56,48,10,48,51,48,48,10,48,69,48, 48,10,51,56,48,48,10,69,48,48,48,10,51,56,48,48, 10,48,69,48,48,10,48,51,48,48,10,48,49,56,48,10, 48,48,48,48,10,55,49,56,48,10,68,68,56,48,10,67, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,55,70,10,69,78,67,79, 68,73,78,71,32,56,56,51,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,67,48, 48,48,10,54,48,48,48,10,51,56,48,48,10,48,69,48, 48,10,48,51,56,48,10,48,69,48,48,10,51,56,48,48, 10,54,48,48,48,10,67,48,48,48,10,48,48,48,48,10, 55,49,56,48,10,68,68,56,48,10,67,55,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,50,56,48,10,69,78,67,79,68,73,78,71,32, 56,56,51,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,68,56,48,10,48,70,48,48,10,48,69,48,48, 10,51,67,48,48,10,69,67,48,48,10,51,67,48,48,10, 48,69,48,48,10,48,70,48,48,10,48,68,56,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,56, 49,10,69,78,67,79,68,73,78,71,32,56,56,51,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,56,48,48,10,68,56,48, 48,10,55,56,48,48,10,51,56,48,48,10,49,69,48,48, 10,49,66,56,48,10,49,69,48,48,10,51,56,48,48,10, 55,56,48,48,10,68,56,48,48,10,49,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,112,114,111,112,101,114,115,117,98,115,101, 116,10,69,78,67,79,68,73,78,71,32,56,56,51,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,70,56,48,10,51,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,51,48,48,48,10,49,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,112,114,111,112,101,114,115,117,112,101,114, 115,101,116,10,69,78,67,79,68,73,78,71,32,56,56,51, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,69,48,48,10,48,51,48,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,51,48,48,10,55,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,110,111,116,115,117,98,115,101,116, 10,69,78,67,79,68,73,78,71,32,56,56,51,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,51,48,48, 10,49,70,56,48,10,51,54,48,48,10,54,54,48,48,10, 54,54,48,48,10,54,67,48,48,10,54,67,48,48,10,54, 67,48,48,10,51,56,48,48,10,49,70,56,48,10,49,56, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,56,53,10,69,78,67,79, 68,73,78,71,32,56,56,51,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,54,48,48,10,55,69,48,48, 10,48,55,48,48,10,48,68,56,48,10,48,68,56,48,10, 48,68,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 66,48,48,10,55,69,48,48,10,51,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,114, 101,102,108,101,120,115,117,98,115,101,116,10,69,78,67,79, 68,73,78,71,32,56,56,51,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,70,56,48,10,51,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,51,48,48,48,10,49,70,56,48,10,48, 48,48,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,114, 101,102,108,101,120,115,117,112,101,114,115,101,116,10,69,78, 67,79,68,73,78,71,32,56,56,51,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,69,48,48,10,48,51,48,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,51,48,48,10,55,69,48,48, 10,48,48,48,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,56,56,10,69,78,67,79,68,73,78, 71,32,56,56,52,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,51,48,48,10,49, 70,56,48,10,51,54,48,48,10,54,54,48,48,10,54,54, 48,48,10,54,67,48,48,10,54,67,48,48,10,54,67,48, 48,10,51,56,48,48,10,49,70,56,48,10,49,56,48,48, 10,55,70,56,48,10,51,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,56,57,10,69,78,67,79,68,73,78,71,32,56,56,52, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,54,48,48,10,55,69,48,48,10,48, 55,48,48,10,48,68,56,48,10,48,68,56,48,10,48,68, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,66,48, 48,10,55,69,48,48,10,51,48,48,48,10,55,70,56,48, 10,54,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,50,56,65,10,69, 78,67,79,68,73,78,71,32,56,56,52,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,70,56,48,10,51,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,51,48,48,48,10,49,70,56, 48,10,48,54,48,48,10,55,70,56,48,10,49,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,56,66,10,69,78,67,79,68,73, 78,71,32,56,56,52,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,69,48,48,10,48,51,48,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,51,48,48,10,55,69,48,48,10,48,54,48, 48,10,55,70,56,48,10,49,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,56,67,10,69,78,67,79,68,73,78,71,32,56,56, 52,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,67,49,56,48,10,67,49,56,48,10,67,49,56,48,10, 67,57,56,48,10,68,57,56,48,10,70,70,56,48,10,68, 57,56,48,10,67,57,56,48,10,67,49,56,48,10,67,49, 56,48,10,67,49,56,48,10,54,51,48,48,10,51,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,56,68,10, 69,78,67,79,68,73,78,71,32,56,56,52,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,67,49,56,48, 10,67,49,56,48,10,67,49,56,48,10,67,49,56,48,10, 67,49,56,48,10,67,57,56,48,10,68,68,56,48,10,67, 57,56,48,10,67,49,56,48,10,67,49,56,48,10,67,49, 56,48,10,54,51,48,48,10,51,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,50,56,69,10,69,78,67,79,68, 73,78,71,32,56,56,52,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,67,49,56,48,10,67,49,56,48, 10,67,49,56,48,10,67,49,56,48,10,67,57,56,48,10, 67,57,56,48,10,70,70,56,48,10,67,57,56,48,10,67, 57,56,48,10,67,49,56,48,10,67,49,56,48,10,54,51, 48,48,10,51,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,56,70,10,69,78,67,79,68,73,78,71,32,56, 56,52,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,70,56,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,50,57,48, 10,69,78,67,79,68,73,78,71,32,56,56,52,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,57,49,10,69,78,67,79, 68,73,78,71,32,56,56,52,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,55,70,56,48,10,48, 48,48,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,50,57,50,10,69,78,67,79,68,73,78,71,32, 56,56,53,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,55,70,56,48,10,48,48,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,57, 51,10,69,78,67,79,68,73,78,71,32,56,56,53,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,50,57,52,10,69,78,67, 79,68,73,78,71,32,56,56,53,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 99,105,114,99,108,101,112,108,117,115,10,69,78,67,79,68, 73,78,71,32,56,56,53,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,70,48,48,10,54,68,56,48,10,67,67,67,48,10, 67,67,67,48,10,70,70,67,48,10,67,67,67,48,10,67, 67,67,48,10,54,68,56,48,10,51,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,57,54,10,69,78,67,79,68,73,78,71,32,56, 56,53,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,70,48,48, 10,54,49,56,48,10,67,48,67,48,10,67,48,67,48,10, 70,70,67,48,10,67,48,67,48,10,67,48,67,48,10,54, 49,56,48,10,51,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,99,105,114,99,108,101,109, 117,108,116,105,112,108,121,10,69,78,67,79,68,73,78,71, 32,56,56,53,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,70, 48,48,10,54,49,56,48,10,70,51,67,48,10,68,69,67, 48,10,67,67,67,48,10,68,69,67,48,10,70,51,67,48, 10,54,49,56,48,10,51,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,50, 57,56,10,69,78,67,79,68,73,78,71,32,56,56,53,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,70,48,48,10,54,49, 56,48,10,67,51,67,48,10,67,54,67,48,10,67,67,67, 48,10,68,56,67,48,10,70,48,67,48,10,54,49,56,48, 10,51,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,57,57,10,69,78, 67,79,68,73,78,71,32,56,56,53,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,70,48,48,10,54,49,56,48,10,67,48, 67,48,10,67,48,67,48,10,67,67,67,48,10,67,48,67, 48,10,67,48,67,48,10,54,49,56,48,10,51,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,57,65,10,69,78,67,79,68,73,78, 71,32,56,56,53,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,70,48,48,10,54,49,56,48,10,67,67, 67,48,10,68,50,67,48,10,68,50,67,48,10,67,67,67, 48,10,54,49,56,48,10,51,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,57,66,10,69,78,67,79,68,73,78,71,32,56,56,53, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,70,48,48,10,54, 49,56,48,10,68,50,67,48,10,67,67,67,48,10,70,70, 67,48,10,67,67,67,48,10,68,50,67,48,10,54,49,56, 48,10,51,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,50,57,67,10,69, 78,67,79,68,73,78,71,32,56,56,54,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,70,48,48,10,54,49,56,48,10,67, 48,67,48,10,70,70,67,48,10,67,48,67,48,10,70,70, 67,48,10,67,48,67,48,10,54,49,56,48,10,51,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,57,68,10,69,78,67,79,68,73, 78,71,32,56,56,54,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,70,48,48,10,54,49,56,48,10,67,48,67,48,10,67, 48,67,48,10,68,69,67,48,10,67,48,67,48,10,67,48, 67,48,10,54,49,56,48,10,51,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,57,69,10,69,78,67,79,68,73,78,71,32,56,56, 54,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,55, 70,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,57,70,10, 69,78,67,79,68,73,78,71,32,56,56,54,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,70,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,55,70,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,50,65,48,10,69,78,67,79,68, 73,78,71,32,56,56,54,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,70,70,56,48,10,69,51,56,48,10, 70,55,56,48,10,68,68,56,48,10,68,68,56,48,10,70, 55,56,48,10,69,51,56,48,10,70,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,65,49,10,69,78,67,79,68,73,78,71,32,56, 56,54,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,49,56,48,10,54, 49,56,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,50,65,50, 10,69,78,67,79,68,73,78,71,32,56,56,54,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,70,67,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,65,51,10,69,78,67,79, 68,73,78,71,32,56,56,54,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,70,70,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,50,65,52,10,69,78,67,79,68,73,78,71,32, 56,56,54,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,112,101,114,112,101,110, 100,105,99,117,108,97,114,10,69,78,67,79,68,73,78,71, 32,56,56,54,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,50, 65,54,10,69,78,67,79,68,73,78,71,32,56,56,55,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,51,48,48,48,10,51,70,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,65,55,10,69,78, 67,79,68,73,78,71,32,56,56,55,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,51,48, 48,48,10,51,70,48,48,10,51,48,48,48,10,51,70,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,65,56,10,69,78,67,79,68,73,78, 71,32,56,56,55,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,55,70, 67,48,10,54,48,48,48,10,55,70,67,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,65,57,10,69,78,67,79,68,73,78,71,32,56,56,55, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,67,48,48,10,54,67,48,48,10,54, 67,48,48,10,54,67,48,48,10,54,67,48,48,10,54,70, 67,48,10,54,67,48,48,10,54,67,48,48,10,54,67,48, 48,10,54,67,48,48,10,54,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,50,65,65,10,69, 78,67,79,68,73,78,71,32,56,56,55,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 68,66,48,48,10,68,66,48,48,10,68,66,48,48,10,68, 66,48,48,10,68,66,48,48,10,68,66,67,48,10,68,66, 48,48,10,68,66,48,48,10,68,66,48,48,10,68,66,48, 48,10,68,66,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,65,66,10,69,78,67,79,68,73, 78,71,32,56,56,55,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,67,48,48,10, 54,67,48,48,10,54,67,48,48,10,54,67,48,48,10,54, 70,67,48,10,54,67,48,48,10,54,70,67,48,10,54,67, 48,48,10,54,67,48,48,10,54,67,48,48,10,54,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,65,67,10,69,78,67,79,68,73,78,71,32,56,56, 55,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,49,56,48,10,54,49,56,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,54,48,48,10,55, 70,56,48,10,54,54,48,48,10,54,67,48,48,10,54,67, 48,48,10,54,67,48,48,10,55,56,48,48,10,49,56,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,65,68,10, 69,78,67,79,68,73,78,71,32,56,56,55,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,49,56,48, 10,48,49,56,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,55,70,67,48,10,54,54,48,48,10,55, 70,67,48,10,54,67,48,48,10,54,67,48,48,10,54,67, 48,48,10,49,56,48,48,10,49,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,50,65,69,10,69,78,67,79,68, 73,78,71,32,56,56,55,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,67,48,48, 10,54,68,48,48,10,54,70,48,48,10,54,69,48,48,10, 54,67,48,48,10,55,70,67,48,10,55,67,48,48,10,69, 67,48,48,10,69,67,48,48,10,54,67,48,48,10,54,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,65,70,10,69,78,67,79,68,73,78,71,32,56, 56,55,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,67,48,48,10,54,68,48,48, 10,54,70,48,48,10,54,69,48,48,10,54,70,67,48,10, 55,67,48,48,10,55,70,67,48,10,69,67,48,48,10,69, 67,48,48,10,54,67,48,48,10,54,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,50,66,48, 10,69,78,67,79,68,73,78,71,32,56,56,56,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,55,48,48,10,48,49,56,48,10,48,51,48,48, 10,48,69,48,48,10,51,56,48,48,10,69,48,48,48,10, 51,56,48,48,10,48,69,48,48,10,48,51,48,48,10,48, 49,56,48,10,48,55,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,66,49,10,69,78,67,79, 68,73,78,71,32,56,56,56,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,67,48,48,48,10,54,48,48,48,10,51,56,48,48, 10,48,69,48,48,10,48,51,56,48,10,48,69,48,48,10, 51,56,48,48,10,54,48,48,48,10,67,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,50,66,50,10,69,78,67,79,68,73,78,71,32, 56,56,56,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,51,56,48,10,48,70,56,48,10,51,57,56,48, 10,69,49,56,48,10,51,57,56,48,10,48,70,56,48,10, 48,51,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,66, 51,10,69,78,67,79,68,73,78,71,32,56,56,56,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,48,48, 48,10,70,56,48,48,10,67,69,48,48,10,67,51,56,48, 10,67,69,48,48,10,70,56,48,48,10,69,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,50,66,52,10,69,78,67, 79,68,73,78,71,32,56,56,56,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,51,56,48,10,48,70,56,48,10,51,57,56, 48,10,69,49,56,48,10,51,57,56,48,10,48,70,56,48, 10,48,51,56,48,10,48,48,48,48,10,70,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,66,53,10,69,78,67,79,68,73,78,71, 32,56,56,56,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,48, 48,48,10,70,56,48,48,10,67,69,48,48,10,67,51,56, 48,10,67,69,48,48,10,70,56,48,48,10,69,48,48,48, 10,48,48,48,48,10,70,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,50, 66,54,10,69,78,67,79,68,73,78,71,32,56,56,56,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,49,56,48,10,57,51,67,48,10,57,70,67, 48,10,57,51,67,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,66,55,10,69,78, 67,79,68,73,78,71,32,56,56,56,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,49, 56,48,10,70,50,52,48,10,70,69,52,48,10,70,50,52, 48,10,54,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,66,56,10,69,78,67,79,68,73,78, 71,32,56,56,56,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,49,56,48,10,48,50, 52,48,10,55,69,52,48,10,48,50,52,48,10,48,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,66,57,10,69,78,67,79,68,73,78,71,32,56,56,56, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,48,48,48,10,69,51, 56,48,10,48,48,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,50,66,65,10,69, 78,67,79,68,73,78,71,32,56,56,57,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,66,66,10,69,78,67,79,68,73, 78,71,32,56,56,57,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,51,51,48,48,10,49,69,48,48,10,49,69, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,66,67,10,69,78,67,79,68,73,78,71,32,56,56, 57,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,49,69,48,48,10,49,69,48,48,10,51,51, 48,48,10,51,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,66,68,10, 69,78,67,79,68,73,78,71,32,56,56,57,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,51,51,48,48,10,49,69,48,48,10,49,69, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,50,66,69,10,69,78,67,79,68, 73,78,71,32,56,56,57,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,55,56,48,48,10,54, 52,48,48,10,54,50,48,48,10,54,50,48,48,10,55,70, 56,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,66,70,10,69,78,67,79,68,73,78,71,32,56, 56,57,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,49,56,48,10,48,51,56,48,10, 48,55,56,48,10,48,68,56,48,10,49,57,56,48,10,51, 49,56,48,10,54,49,56,48,10,70,70,56,48,10,70,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,50,67,48, 10,69,78,67,79,68,73,78,71,32,56,56,57,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,49,69,48,48,10,49,69,48,48,10,49,69,48,48, 10,51,51,48,48,10,51,51,48,48,10,51,51,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,67,48,67,48,10,67,48, 67,48,10,67,48,67,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,67,49,10,69,78,67,79, 68,73,78,71,32,56,56,57,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,67,48,67,48,10,67,48,67,48,10,67,48,67, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,51,51,48,48,10, 51,51,48,48,10,51,51,48,48,10,49,69,48,48,10,49, 69,48,48,10,49,69,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,50,67,50,10,69,78,67,79,68,73,78,71,32, 56,56,57,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,51,69, 48,48,10,54,51,48,48,10,67,49,56,48,10,67,49,56, 48,10,67,49,56,48,10,67,49,56,48,10,67,49,56,48, 10,67,49,56,48,10,67,49,56,48,10,67,49,56,48,10, 67,49,56,48,10,67,49,56,48,10,67,49,56,48,10,67, 49,56,48,10,67,49,56,48,10,67,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,67, 51,10,69,78,67,79,68,73,78,71,32,56,56,57,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,67,49,56,48,10,67,49, 56,48,10,67,49,56,48,10,67,49,56,48,10,67,49,56, 48,10,67,49,56,48,10,67,49,56,48,10,67,49,56,48, 10,67,49,56,48,10,67,49,56,48,10,67,49,56,48,10, 67,49,56,48,10,67,49,56,48,10,67,49,56,48,10,54, 51,48,48,10,51,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,50,67,52,10,69,78,67, 79,68,73,78,71,32,56,57,48,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,49,69,48, 48,10,51,51,48,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 100,111,116,109,97,116,104,10,69,78,67,79,68,73,78,71, 32,56,57,48,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,67,48, 48,10,49,67,48,48,10,49,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,50, 67,54,10,69,78,67,79,68,73,78,71,32,56,57,48,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,55,70,56,48,10,51,70,48, 48,10,49,69,48,48,10,51,70,48,48,10,51,51,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,67,55,10,69,78, 67,79,68,73,78,71,32,56,57,48,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,56,67,52,48,10,67,67,67,48,10,54,49, 56,48,10,51,51,48,48,10,70,70,67,48,10,51,51,48, 48,10,54,49,56,48,10,67,67,67,48,10,56,67,52,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,67,56,10,69,78,67,79,68,73,78, 71,32,56,57,48,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,67,49,56,48,10,69,51,56,48,10,66,54, 56,48,10,57,67,56,48,10,66,54,56,48,10,69,51,56, 48,10,67,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,67,57,10,69,78,67,79,68,73,78,71,32,56,57,48, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,67, 49,56,48,10,69,51,48,48,10,66,54,48,48,10,57,67, 48,48,10,66,54,48,48,10,69,51,48,48,10,67,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,50,67,65,10,69, 78,67,79,68,73,78,71,32,56,57,48,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,67,49,56,48,10,54, 51,56,48,10,51,54,56,48,10,49,67,56,48,10,51,54, 56,48,10,54,51,56,48,10,67,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,67,66,10,69,78,67,79,68,73, 78,71,32,56,57,48,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,48,48,48,10,51,48,48,48,10,49, 56,48,48,10,48,67,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,67,67,10,69,78,67,79,68,73,78,71,32,56,57, 48,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,49,56,48,10,48,51,48,48,10,48,54,48,48,10,48, 67,48,48,10,49,69,48,48,10,51,51,48,48,10,54,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,67,68,10, 69,78,67,79,68,73,78,71,32,56,57,48,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,55,48,48,10,54,68,56,48,10,51, 57,56,48,10,48,48,48,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,50,67,69,10,69,78,67,79,68, 73,78,71,32,56,57,49,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 67,49,56,48,10,54,51,48,48,10,50,50,48,48,10,51, 54,48,48,10,49,52,48,48,10,49,67,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,67,70,10,69,78,67,79,68,73,78,71,32,56, 57,49,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,56,48,48,10, 48,56,48,48,10,49,67,48,48,10,49,52,48,48,10,51, 54,48,48,10,50,50,48,48,10,54,51,48,48,10,67,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,50,68,48, 10,69,78,67,79,68,73,78,71,32,56,57,49,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,70,56,48,10,51,48,48,48,10,54,55,56,48,10, 54,67,48,48,10,54,67,48,48,10,54,67,48,48,10,54, 55,56,48,10,51,48,48,48,10,49,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,68,49,10,69,78,67,79, 68,73,78,71,32,56,57,49,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,69,48,48, 10,48,51,48,48,10,55,57,56,48,10,48,68,56,48,10, 48,68,56,48,10,48,68,56,48,10,55,57,56,48,10,48, 51,48,48,10,55,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,50,68,50,10,69,78,67,79,68,73,78,71,32, 56,57,49,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,69,48,48, 10,55,70,48,48,10,67,49,56,48,10,57,67,56,48,10, 66,69,56,48,10,65,50,56,48,10,65,50,56,48,10,65, 50,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,68, 51,10,69,78,67,79,68,73,78,71,32,56,57,49,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,65,50,56,48,10,65,50,56,48, 10,65,50,56,48,10,66,69,56,48,10,57,67,56,48,10, 67,49,56,48,10,55,70,48,48,10,51,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,50,68,52,10,69,78,67, 79,68,73,78,71,32,56,57,49,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,51,69,48,48,10,55,70,48,48,10,67,57,56,48, 10,56,56,56,48,10,56,56,56,48,10,56,56,56,48,10, 56,56,56,48,10,56,56,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,68,53,10,69,78,67,79,68,73,78,71, 32,56,57,49,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,51,48,48,10,51,51,48,48,10,51,51, 48,48,10,51,51,48,48,10,55,70,56,48,10,51,51,48, 48,10,51,51,48,48,10,51,51,48,48,10,51,51,48,48, 10,55,70,56,48,10,51,51,48,48,10,51,51,48,48,10, 51,51,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,50, 68,54,10,69,78,67,79,68,73,78,71,32,56,57,49,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 49,48,48,10,48,51,48,48,10,48,54,48,48,10,48,67, 48,48,10,49,56,48,48,10,51,49,48,48,10,54,51,56, 48,10,51,49,48,48,10,49,56,48,48,10,48,67,48,48, 10,48,54,48,48,10,48,51,48,48,10,48,49,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,68,55,10,69,78, 67,79,68,73,78,71,32,56,57,49,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,50,48,48,48,10,51, 48,48,48,10,49,56,48,48,10,48,67,48,48,10,48,54, 48,48,10,50,51,48,48,10,55,49,56,48,10,50,51,48, 48,10,48,54,48,48,10,48,67,48,48,10,49,56,48,48, 10,51,48,48,48,10,50,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,68,56,10,69,78,67,79,68,73,78, 71,32,56,57,50,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,50, 52,56,48,10,50,52,56,48,10,54,68,56,48,10,52,57, 48,48,10,68,66,48,48,10,52,57,48,48,10,54,68,56, 48,10,50,52,56,48,10,50,52,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,68,57,10,69,78,67,79,68,73,78,71,32,56,57,50, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,57,50,48,48,10,57, 50,48,48,10,68,66,48,48,10,52,57,48,48,10,54,68, 56,48,10,52,57,48,48,10,68,66,48,48,10,57,50,48, 48,10,57,50,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,50,68,65,10,69, 78,67,79,68,73,78,71,32,56,57,50,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,51,56,48,10,48,69,48,48,10,51,56,48,48,10, 69,48,48,48,10,51,56,48,48,10,48,69,48,48,10,48, 51,56,48,10,48,48,48,48,10,70,70,56,48,10,48,48, 48,48,10,69,48,48,48,10,51,56,48,48,10,48,69,48, 48,10,48,51,56,48,10,48,69,48,48,10,51,56,48,48, 10,69,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,68,66,10,69,78,67,79,68,73, 78,71,32,56,57,50,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,69,48,48,48, 10,51,56,48,48,10,48,69,48,48,10,48,51,56,48,10, 48,69,48,48,10,51,56,48,48,10,69,48,48,48,10,48, 48,48,48,10,70,70,56,48,10,48,48,48,48,10,48,51, 56,48,10,48,69,48,48,10,51,56,48,48,10,69,48,48, 48,10,51,56,48,48,10,48,69,48,48,10,48,51,56,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,68,67,10,69,78,67,79,68,73,78,71,32,56,57, 50,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,51,56,48,10, 48,69,48,48,10,51,56,48,48,10,69,51,56,48,10,48, 69,48,48,10,51,56,48,48,10,69,48,48,48,10,51,56, 48,48,10,48,69,48,48,10,48,51,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,68,68,10, 69,78,67,79,68,73,78,71,32,56,57,50,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,48,48,48,10,51,56,48,48,10, 48,69,48,48,10,69,51,56,48,10,51,56,48,48,10,48, 69,48,48,10,48,51,56,48,10,48,69,48,48,10,51,56, 48,48,10,69,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,50,68,69,10,69,78,67,79,68, 73,78,71,32,56,57,50,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,49,56,48,10,48,55,48,48,10,48,67,48,48, 10,51,57,56,48,10,69,51,48,48,10,48,69,48,48,10, 51,56,48,48,10,69,48,48,48,10,51,56,48,48,10,48, 69,48,48,10,48,51,48,48,10,48,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,68,70,10,69,78,67,79,68,73,78,71,32,56, 57,50,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,67,48,48, 48,10,55,48,48,48,10,49,56,48,48,10,67,69,48,48, 10,54,51,56,48,10,51,56,48,48,10,48,69,48,48,10, 48,51,56,48,10,48,69,48,48,10,51,56,48,48,10,54, 48,48,48,10,67,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,50,69,48, 10,69,78,67,79,68,73,78,71,32,56,57,50,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,56,48,48,10,48,57,56,48,10,48,66,48, 48,10,48,69,48,48,10,51,56,48,48,10,69,56,48,48, 10,51,56,48,48,10,48,69,48,48,10,69,66,48,48,10, 51,57,56,48,10,48,67,48,48,10,48,70,48,48,10,48, 57,56,48,10,48,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,69,49,10,69,78,67,79, 68,73,78,71,32,56,57,50,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,56, 48,48,10,67,56,48,48,10,54,56,48,48,10,51,56,48, 48,10,48,69,48,48,10,48,66,56,48,10,48,69,48,48, 10,51,56,48,48,10,54,66,56,48,10,67,69,48,48,10, 49,56,48,48,10,55,56,48,48,10,67,56,48,48,10,48, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,50,69,50,10,69,78,67,79,68,73,78,71,32, 56,57,51,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,50, 48,48,10,48,50,48,48,10,48,50,48,48,10,55,70,56, 48,10,54,52,48,48,10,54,52,48,48,10,54,52,48,48, 10,54,67,48,48,10,54,56,48,48,10,54,56,48,48,10, 54,56,48,48,10,55,70,56,48,10,49,48,48,48,10,55, 70,56,48,10,49,48,48,48,10,49,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,69, 51,10,69,78,67,79,68,73,78,71,32,56,57,51,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,50,48,48,10,48,50, 48,48,10,48,50,48,48,10,55,70,56,48,10,48,53,56, 48,10,48,53,56,48,10,48,53,56,48,10,48,68,56,48, 10,48,57,56,48,10,48,57,56,48,10,48,57,56,48,10, 55,70,56,48,10,49,48,48,48,10,55,70,56,48,10,49, 48,48,48,10,49,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,50,69,52,10,69,78,67, 79,68,73,78,71,32,56,57,51,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,70,56,48,10, 48,52,48,48,10,55,70,56,48,10,48,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,69,53,10,69,78,67,79,68,73,78,71, 32,56,57,51,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,55,70,56,48,10,48,52,48,48,10, 55,70,56,48,10,48,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,50, 69,54,10,69,78,67,79,68,73,78,71,32,56,57,51,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,51,56,48,10,48,69,48,48,10,51,56, 48,48,10,69,48,48,48,10,51,56,48,48,10,48,69,48, 48,10,48,51,56,48,10,48,52,48,48,10,55,53,56,48, 10,68,68,56,48,10,68,55,48,48,10,49,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,69,55,10,69,78, 67,79,68,73,78,71,32,56,57,51,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 48,48,48,10,51,56,48,48,10,48,69,48,48,10,48,51, 56,48,10,48,69,48,48,10,51,56,48,48,10,69,48,48, 48,10,48,52,48,48,10,55,53,56,48,10,68,68,56,48, 10,68,55,48,48,10,49,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,69,56,10,69,78,67,79,68,73,78, 71,32,56,57,51,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,49,56,48,10,48,51,48,48,10,48,69,48,48,10,51, 56,48,48,10,69,48,48,48,10,51,56,48,48,10,48,69, 48,48,10,48,51,48,48,10,48,49,56,48,10,48,52,48, 48,10,55,53,56,48,10,68,68,56,48,10,68,55,48,48, 10,49,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,69,57,10,69,78,67,79,68,73,78,71,32,56,57,51, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,67,48,48,48,10, 54,48,48,48,10,51,56,48,48,10,48,69,48,48,10,48, 51,56,48,10,48,69,48,48,10,51,56,48,48,10,54,48, 48,48,10,67,48,48,48,10,48,52,48,48,10,55,53,56, 48,10,68,68,56,48,10,68,55,48,48,10,49,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,50,69,65,10,69, 78,67,79,68,73,78,71,32,56,57,51,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,52,48,48,10,48,52,48,48,10,48,55,56,48,10,48, 70,56,48,10,51,57,56,48,10,69,57,56,48,10,51,57, 56,48,10,49,70,56,48,10,49,51,56,48,10,49,48,48, 48,10,49,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,69,66,10,69,78,67,79,68,73, 78,71,32,56,57,51,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,52,48,48,10, 48,52,48,48,10,69,52,48,48,10,70,67,48,48,10,67, 69,48,48,10,67,66,56,48,10,67,69,48,48,10,70,56, 48,48,10,70,48,48,48,10,49,48,48,48,10,49,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,69,67,10,69,78,67,79,68,73,78,71,32,56,57, 52,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,52,48,48,10,48,52,48,48,10,48,55,56,48,10, 48,70,56,48,10,51,57,56,48,10,69,57,56,48,10,51, 57,56,48,10,49,70,56,48,10,49,51,56,48,10,49,48, 48,48,10,70,70,56,48,10,50,48,48,48,10,50,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,69,68,10, 69,78,67,79,68,73,78,71,32,56,57,52,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,52,48,48, 10,48,52,48,48,10,69,52,48,48,10,70,67,48,48,10, 67,69,48,48,10,67,66,56,48,10,67,69,48,48,10,70, 56,48,48,10,70,48,48,48,10,49,48,48,48,10,70,70, 56,48,10,50,48,48,48,10,50,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,50,69,69,10,69,78,67,79,68, 73,78,71,32,56,57,52,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,69,70,10,69,78,67,79,68,73,78,71,32,56, 57,52,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,68,56,48,10,54,68,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,50,70,48, 10,69,78,67,79,68,73,78,71,32,56,57,52,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,49,56, 48,10,48,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,70,49,10,69,78,67,79, 68,73,78,71,32,56,57,52,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,49,56,48,10,48,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,50,70,50,10,69,78,67,79,68,73,78,71,32, 56,57,52,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,70,56,48,10,49,56,48,48, 10,51,48,48,48,10,51,48,48,48,10,70,70,56,48,10, 51,48,48,48,10,51,48,48,48,10,49,56,48,48,10,48, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,70, 51,10,69,78,67,79,68,73,78,71,32,56,57,52,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,70,56,48,10,51,48,48,48,10,54,48,56,48, 10,54,48,56,48,10,55,70,56,48,10,54,48,56,48,10, 54,48,56,48,10,51,48,48,48,10,49,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,50,70,52,10,69,78,67, 79,68,73,78,71,32,56,57,52,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,70,48,48,10,51,48,48,48, 10,51,49,48,48,10,51,70,48,48,10,51,49,48,48,10, 51,48,48,48,10,49,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,70,53,10,69,78,67,79,68,73,78,71, 32,56,57,52,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,49,70,56,48,10,51,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,55,70,56,48, 10,54,48,48,48,10,54,48,48,48,10,51,48,48,48,10, 49,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,50, 70,54,10,69,78,67,79,68,73,78,71,32,56,57,53,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,48,48, 48,48,10,49,70,56,48,10,51,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,70,56,48,10,54,48,48,48, 10,54,48,48,48,10,51,48,48,48,10,49,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,70,55,10,69,78, 67,79,68,73,78,71,32,56,57,53,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,70, 48,48,10,48,48,48,48,10,49,70,48,48,10,51,48,48, 48,10,51,48,48,48,10,51,70,48,48,10,51,48,48,48, 10,51,48,48,48,10,49,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,70,56,10,69,78,67,79,68,73,78, 71,32,56,57,53,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,70,56,48,10,51,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,70,56, 48,10,54,48,48,48,10,54,48,48,48,10,51,48,48,48, 10,49,70,56,48,10,48,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,70,57,10,69,78,67,79,68,73,78,71,32,56,57,53, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,70,56,48,10,51,48,48,48,10,54,48, 48,48,10,55,70,56,48,10,54,48,48,48,10,55,70,56, 48,10,54,48,48,48,10,51,48,48,48,10,49,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,50,70,65,10,69, 78,67,79,68,73,78,71,32,56,57,53,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 56,48,48,10,48,67,48,48,10,48,54,48,48,10,48,54, 48,48,10,70,70,56,48,10,48,54,48,48,10,48,54,48, 48,10,48,67,48,48,10,70,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,70,66,10,69,78,67,79,68,73, 78,71,32,56,57,53,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,69,48,48,10,48, 51,48,48,10,52,49,56,48,10,52,49,56,48,10,55,70, 56,48,10,52,49,56,48,10,52,49,56,48,10,48,51,48, 48,10,55,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,70,67,10,69,78,67,79,68,73,78,71,32,56,57, 53,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 69,48,48,10,48,51,48,48,10,50,51,48,48,10,51,70, 48,48,10,50,51,48,48,10,48,51,48,48,10,51,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,70,68,10, 69,78,67,79,68,73,78,71,32,56,57,53,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,70,56,48,10,48,48,48,48,10, 55,69,48,48,10,48,51,48,48,10,48,49,56,48,10,48, 49,56,48,10,55,70,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,51,48,48,10,55,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,50,70,69,10,69,78,67,79,68, 73,78,71,32,56,57,53,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,70,48,48,10, 48,48,48,48,10,51,69,48,48,10,48,51,48,48,10,48, 51,48,48,10,51,70,48,48,10,48,51,48,48,10,48,51, 48,48,10,51,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,70,70,10,69,78,67,79,68,73,78,71,32,56, 57,53,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,70,56,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,55,70,56,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,51,48,48, 10,69,78,67,79,68,73,78,71,32,56,57,54,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,56,48,10,51,70,56,48,10,54,51,48,48,10, 67,55,56,48,10,67,68,56,48,10,68,57,56,48,10,70, 49,56,48,10,54,51,48,48,10,70,69,48,48,10,56,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,48,49,10,69,78,67,79, 68,73,78,71,32,56,57,54,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,56,56,48,48, 10,67,67,48,48,10,54,69,48,48,10,51,66,48,48,10, 49,57,56,48,10,48,56,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,104, 111,117,115,101,10,69,78,67,79,68,73,78,71,32,56,57, 54,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,48,51,10, 69,78,67,79,68,73,78,71,32,56,57,54,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,49,69,48,48,10,49,50,48,48,10, 51,51,48,48,10,50,49,48,48,10,54,49,56,48,10,52, 48,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,48,52,10,69,78,67,79,68, 73,78,71,32,56,57,54,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 52,48,56,48,10,54,49,56,48,10,50,49,48,48,10,51, 51,48,48,10,49,50,48,48,10,49,69,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,48,53,10,69,78,67,79,68,73,78,71,32,56, 57,54,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,49,69,48,48,10,49,50,48,48,10,51, 51,48,48,10,50,49,48,48,10,54,49,56,48,10,52,48, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,51,48,54, 10,69,78,67,79,68,73,78,71,32,56,57,54,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,48,48,48,48,10,55,70,56,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 49,69,48,48,10,49,50,48,48,10,51,51,48,48,10,50, 49,48,48,10,54,49,56,48,10,52,48,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,48,55,10,69,78,67,79, 68,73,78,71,32,56,57,54,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,67,48,48,10,49,56,48,48, 10,49,56,48,48,10,48,67,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,67,48,48,10,49,56,48,48,10,49, 56,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,48,56,10,69,78,67,79,68,73,78,71,32, 56,57,54,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,70,48,48,10,51,48,48,48,10,51,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,48, 57,10,69,78,67,79,68,73,78,71,32,56,57,54,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,70, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,51,48,65,10,69,78,67, 79,68,73,78,71,32,56,57,55,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,51,48,48,48,10,51,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,48,48,48,10,51,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,48,66,10,69,78,67,79,68,73,78,71, 32,56,57,55,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 51,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 48,67,10,69,78,67,79,68,73,78,71,32,56,57,55,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,51,56, 48,10,48,48,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,48,68,10,69,78, 67,79,68,73,78,71,32,56,57,55,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,48,48,48,10,48,48,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,51,48,69,10,69,78,67,79,68,73,78, 71,32,56,57,55,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,48, 48,48,10,48,51,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,48,70,10,69,78,67,79,68,73,78,71,32,56,57,55, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,48,48,48,10,69,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,114,101,118,108,111,103,105,99,97, 108,110,111,116,10,69,78,67,79,68,73,78,71,32,56,57, 55,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,55, 70,56,48,10,54,48,48,48,10,54,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,49,49,10, 69,78,67,79,68,73,78,71,32,56,57,55,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,52,48,56,48,10, 51,70,48,48,10,50,49,48,48,10,50,49,48,48,10,50, 49,48,48,10,50,49,48,48,10,51,70,48,48,10,52,48, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,49,50,10,69,78,67,79,68, 73,78,71,32,56,57,55,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,70,48,48,10,54, 49,56,48,10,67,48,67,48,10,67,48,67,48,10,67,48, 67,48,10,67,48,67,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,49,51,10,69,78,67,79,68,73,78,71,32,56, 57,55,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,70,48,48,10,54,49,56,48,10,67, 48,67,48,10,67,48,67,48,10,67,48,67,48,10,70,70, 67,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,51,49,52, 10,69,78,67,79,68,73,78,71,32,56,57,56,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,69,48,48,10, 54,49,56,48,10,56,48,52,48,10,52,48,56,48,10,50, 49,48,48,10,49,50,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,49,53,10,69,78,67,79, 68,73,78,71,32,56,57,56,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,55,57,56,48,10,51, 51,48,48,10,55,69,48,48,10,52,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,49,54,10,69,78,67,79,68,73,78,71,32, 56,57,56,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,56,48, 48,10,48,56,48,48,10,49,67,48,48,10,50,65,48,48, 10,52,57,48,48,10,70,70,56,48,10,52,57,48,48,10, 50,65,48,48,10,49,67,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,49, 55,10,69,78,67,79,68,73,78,71,32,56,57,56,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,50,48, 48,10,49,50,48,48,10,49,50,48,48,10,55,70,56,48, 10,49,50,48,48,10,49,50,48,48,10,55,70,56,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,51,49,56,10,69,78,67, 79,68,73,78,71,32,56,57,56,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,50,49,48,48,10,53,50,56, 48,10,53,50,56,48,10,51,70,48,48,10,49,50,48,48, 10,49,50,48,48,10,51,70,48,48,10,53,50,56,48,10, 53,50,56,48,10,50,49,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,49,57,10,69,78,67,79,68,73,78,71, 32,56,57,56,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,70,56,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 49,65,10,69,78,67,79,68,73,78,71,32,56,57,56,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,50, 50,48,48,10,50,50,48,48,10,50,50,48,48,10,51,69, 48,48,10,50,65,48,48,10,52,57,48,48,10,52,68,56, 48,10,52,49,48,48,10,50,50,48,48,10,51,69,48,48, 10,50,50,48,48,10,50,50,48,48,10,50,50,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,49,66,10,69,78, 67,79,68,73,78,71,32,56,57,56,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,54, 49,56,48,10,54,49,56,48,10,55,53,56,48,10,51,66, 48,48,10,49,69,48,48,10,48,67,48,48,10,49,69,48, 48,10,51,66,48,48,10,54,53,56,48,10,54,66,56,48, 10,55,53,56,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,51,49,67,10,69,78,67,79,68,73,78, 71,32,56,57,56,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,56,48,48,10,52,48,48,48,10,52, 48,48,48,10,52,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,49,68,10,69,78,67,79,68,73,78,71,32,56,57,56, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,55,56,48,10,48,48,56,48,10,48,48,56,48,10,48, 48,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,49,69,10,69, 78,67,79,68,73,78,71,32,56,57,57,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,52,48,48,48,10,52,48,48, 48,10,52,48,48,48,10,55,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,49,70,10,69,78,67,79,68,73, 78,71,32,56,57,57,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,56,48,10,48,48,56,48,10,48,48,56, 48,10,48,55,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,105,110,116, 101,103,114,97,108,116,112,10,69,78,67,79,68,73,78,71, 32,56,57,57,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,55,48,48,10,48, 68,56,48,10,48,68,56,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,105,110,116,101,103, 114,97,108,98,116,10,69,78,67,79,68,73,78,71,32,56, 57,57,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,54,67,48,48,10,54,67,48,48,10,51,56,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,51,50,50, 10,69,78,67,79,68,73,78,71,32,56,57,57,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,50,51,10,69,78,67,79, 68,73,78,71,32,56,57,57,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,50,52,10,69,78,67,79,68,73,78,71,32, 56,57,57,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,51,56,48,10,48,67,48,48,10,48,67,48, 48,10,49,69,48,48,10,49,69,48,48,10,51,51,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,50, 53,10,69,78,67,79,68,73,78,71,32,56,57,57,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,51,56,48,10,49,56,48,48, 10,48,67,48,48,10,48,55,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,51,50,54,10,69,78,67, 79,68,73,78,71,32,56,57,57,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,69,48,48,10,54,51,48,48,10,53,52,56,48, 10,52,56,52,48,10,53,52,56,48,10,54,51,48,48,10, 55,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,50,55,10,69,78,67,79,68,73,78,71, 32,56,57,57,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,70,70,56, 48,10,65,50,56,48,10,57,52,56,48,10,56,56,56,48, 10,57,52,56,48,10,65,50,56,48,10,70,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 50,56,10,69,78,67,79,68,73,78,71,32,57,48,48,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,70,70,67,48,10,56,48,52,48,10,69,65,67, 48,10,56,48,52,48,10,68,53,67,48,10,56,48,52,48, 10,68,69,67,48,10,56,48,52,48,10,70,70,67,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,110,103,108,101,108,101,102,116,10, 69,78,67,79,68,73,78,71,32,57,48,48,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,49,48,48, 10,48,51,48,48,10,48,50,48,48,10,48,54,48,48,10, 48,52,48,48,10,48,67,48,48,10,48,56,48,48,10,48, 67,48,48,10,48,52,48,48,10,48,54,48,48,10,48,50, 48,48,10,48,51,48,48,10,48,49,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,110,103,108,101,114,105,103,104,116,10,69,78, 67,79,68,73,78,71,32,57,48,48,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,56,48,48,10,48, 67,48,48,10,48,52,48,48,10,48,54,48,48,10,48,50, 48,48,10,48,51,48,48,10,48,49,48,48,10,48,51,48, 48,10,48,50,48,48,10,48,54,48,48,10,48,52,48,48, 10,48,67,48,48,10,48,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,51,50,66,10,69,78,67,79,68,73,78, 71,32,57,48,48,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,70, 56,48,10,51,49,56,48,10,52,65,56,48,10,56,52,56, 48,10,52,65,56,48,10,51,49,56,48,10,49,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,50,67,10,69,78,67,79,68,73,78,71,32,57,48,48, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,51,51,48,48,10,52,48,56,48,10,56, 54,52,48,10,65,49,52,48,10,65,48,52,48,10,65,48, 52,48,10,65,48,52,48,10,65,49,52,48,10,56,54,52, 48,10,52,48,56,48,10,51,51,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,50,68,10,69, 78,67,79,68,73,78,71,32,57,48,48,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,51,48,48,10,48,54,48,48,10, 48,67,48,48,10,49,69,48,48,10,51,49,48,48,10,54, 48,56,48,10,67,48,56,48,10,52,48,56,48,10,52,48, 56,48,10,52,48,67,48,10,50,49,56,48,10,49,70,48, 48,10,48,54,48,48,10,48,67,48,48,10,49,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,50,69,10,69,78,67,79,68,73, 78,71,32,57,48,48,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,69,48,48,10,50,49,48,48,10,52,48,56,48,10,52, 48,56,48,10,52,55,67,48,10,52,56,56,48,10,53,48, 56,48,10,65,49,48,48,10,68,69,48,48,10,69,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,51,50,70,10,69,78,67,79,68,73,78,71,32,57,48, 48,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,51,48,10, 69,78,67,79,68,73,78,71,32,57,48,48,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,56,56,48,10,49,57,56,48,10, 51,66,56,48,10,49,57,56,48,10,51,51,48,48,10,50, 50,48,48,10,54,54,48,48,10,52,52,48,48,10,67,67, 48,48,10,56,56,48,48,10,70,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,51,49,10,69,78,67,79,68, 73,78,71,32,57,48,48,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,48,48,48, 10,49,48,48,48,10,51,56,48,48,10,53,67,48,48,10, 57,50,56,48,10,57,70,67,48,10,57,50,48,48,10,53, 52,48,48,10,51,56,48,48,10,49,48,48,48,10,49,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,51,50,10,69,78,67,79,68,73,78,71,32,57, 48,49,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,52,48,48,48, 10,55,48,48,48,10,52,67,48,48,10,52,51,48,48,10, 55,70,56,48,10,52,51,48,48,10,52,67,48,48,10,55, 48,48,48,10,52,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,51,51,51, 10,69,78,67,79,68,73,78,71,32,57,48,49,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,52,48,48,48,10,55,48,48,48, 10,52,67,48,48,10,52,51,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,51,52,10,69,78,67,79, 68,73,78,71,32,57,48,49,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,51,53,10,69,78,67,79,68,73,78,71,32, 57,48,49,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 51,51,48,48,10,49,69,48,48,10,49,69,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,51, 54,10,69,78,67,79,68,73,78,71,32,57,48,49,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 56,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,51,51,55,10,69,78,67, 79,68,73,78,71,32,57,48,49,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,70,48,48,10,51,51, 48,48,10,51,51,48,48,10,51,51,48,48,10,51,51,48, 48,10,51,51,48,48,10,51,51,48,48,10,51,51,48,48, 10,51,51,48,48,10,51,51,48,48,10,51,51,48,48,10, 51,51,48,48,10,51,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,51,56,10,69,78,67,79,68,73,78,71, 32,57,48,49,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,70,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,55,70,56,48,10,54,49,56,48,10,54,49,56,48, 10,55,70,56,48,10,54,49,56,48,10,54,49,56,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 51,57,10,69,78,67,79,68,73,78,71,32,57,48,49,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,54,49,56,48,10,54,49,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,49,56,48,10,55,70,56, 48,10,54,49,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,49,56,48,10,54,49,56,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,51,65,10,69,78, 67,79,68,73,78,71,32,57,48,49,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,70,70,56,48,10,67, 49,56,48,10,67,49,56,48,10,67,49,56,48,10,67,57, 56,48,10,68,53,56,48,10,69,51,56,48,10,68,53,56, 48,10,67,57,56,48,10,67,49,56,48,10,67,49,56,48, 10,67,49,56,48,10,70,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,51,51,66,10,69,78,67,79,68,73,78, 71,32,57,48,49,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,70,70,56,48,10,67,49,56,48,10,67, 49,56,48,10,67,49,56,48,10,68,68,56,48,10,69,51, 56,48,10,69,51,56,48,10,69,51,56,48,10,68,68,56, 48,10,67,49,56,48,10,67,49,56,48,10,67,49,56,48, 10,70,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,51,67,10,69,78,67,79,68,73,78,71,32,57,48,50, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 70,70,56,48,10,67,49,56,48,10,67,49,56,48,10,68, 68,56,48,10,69,51,56,48,10,67,49,56,48,10,67,49, 56,48,10,67,49,56,48,10,69,51,56,48,10,68,68,56, 48,10,67,49,56,48,10,67,49,56,48,10,70,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,51,68,10,69, 78,67,79,68,73,78,71,32,57,48,50,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,51,70,48,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,51,70,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,51,69,10,69,78,67,79,68,73, 78,71,32,57,48,50,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,69,48,48,10,50,49,48,48,10,52, 67,56,48,10,53,50,56,48,10,53,50,56,48,10,52,67, 56,48,10,50,49,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,51,51,70,10,69,78,67,79,68,73,78,71,32,57,48, 50,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,49,56,48,10,48,49,56,48,10,48,51,48,48,10, 48,51,48,48,10,48,54,48,48,10,48,54,48,48,10,55, 70,56,48,10,49,56,48,48,10,49,56,48,48,10,51,48, 48,48,10,51,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,52,48,10, 69,78,67,79,68,73,78,71,32,57,48,50,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 49,56,48,48,10,49,56,48,48,10,55,70,56,48,10,48, 54,48,48,10,48,54,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,49,56,48,10,48,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,52,49,10,69,78,67,79,68, 73,78,71,32,57,48,50,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,54,49,56,48, 10,54,51,56,48,10,54,51,56,48,10,54,53,56,48,10, 54,53,56,48,10,54,57,56,48,10,54,57,56,48,10,55, 49,56,48,10,55,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,52,50,10,69,78,67,79,68,73,78,71,32,57, 48,50,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,54,49,56,48,10,55,49,56,48, 10,55,49,56,48,10,54,57,56,48,10,54,57,56,48,10, 54,53,56,48,10,54,53,56,48,10,54,51,56,48,10,54, 51,56,48,10,54,49,56,48,10,54,49,56,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,51,52,51, 10,69,78,67,79,68,73,78,71,32,57,48,50,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,51,56,48, 10,54,53,56,48,10,54,57,56,48,10,55,49,56,48,10, 54,57,56,48,10,54,53,56,48,10,54,51,56,48,10,54, 49,56,48,10,54,49,56,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,52,52,10,69,78,67,79, 68,73,78,71,32,57,48,50,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,70,56,48,10,54,49,56, 48,10,54,49,56,48,10,55,49,56,48,10,54,57,56,48, 10,54,53,56,48,10,54,51,56,48,10,54,53,56,48,10, 54,57,56,48,10,55,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,52,53,10,69,78,67,79,68,73,78,71,32, 57,48,50,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,50,67,48,48,10,54,67,48,48, 10,70,70,56,48,10,54,67,48,48,10,50,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,52, 54,10,69,78,67,79,68,73,78,71,32,57,48,51,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,65,48,48,10,49,66,48,48,10,70,70,56,48, 10,49,66,48,48,10,49,65,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,51,52,55,10,69,78,67, 79,68,73,78,71,32,57,48,51,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,57,56,48,10,55,70,56,48,10,54,57,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,52,56,10,69,78,67,79,68,73,78,71, 32,57,48,51,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,70,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,53,56, 48,10,55,70,56,48,10,54,53,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 52,57,10,69,78,67,79,68,73,78,71,32,57,48,51,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,50,48,48,48,10,50,48,48,48,10,49,69, 48,48,10,51,49,48,48,10,52,56,56,48,10,52,56,56, 48,10,52,52,56,48,10,52,52,56,48,10,50,51,48,48, 10,49,69,48,48,10,48,49,48,48,10,48,49,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,52,65,10,69,78, 67,79,68,73,78,71,32,57,48,51,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,55,70,56,48, 10,48,48,48,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,51,52,66,10,69,78,67,79,68,73,78, 71,32,57,48,51,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,49,69,48,48,10,49,69,48,48,10,50,68, 48,48,10,50,68,48,48,10,50,68,48,48,10,52,67,56, 48,10,52,67,56,48,10,55,70,56,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,52,67,10,69,78,67,79,68,73,78,71,32,57,48,51, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 70,70,56,48,10,67,49,56,48,10,67,49,56,48,10,67, 49,56,48,10,67,49,56,48,10,67,49,56,48,10,67,49, 56,48,10,69,51,56,48,10,68,53,56,48,10,67,57,56, 48,10,67,49,56,48,10,67,49,56,48,10,70,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,52,68,10,69, 78,67,79,68,73,78,71,32,57,48,51,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,70,56,48,10, 67,49,56,48,10,67,49,56,48,10,67,57,56,48,10,67, 57,56,48,10,68,53,56,48,10,68,53,56,48,10,68,53, 56,48,10,69,51,56,48,10,67,49,56,48,10,70,70,56, 48,10,67,49,56,48,10,70,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,52,69,10,69,78,67,79,68,73, 78,71,32,57,48,51,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,49,69,48,48,10,50, 68,48,48,10,50,68,48,48,10,50,68,48,48,10,50,68, 48,48,10,49,69,48,48,10,48,67,48,48,10,48,67,48, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,51,52,70,10,69,78,67,79,68,73,78,71,32,57,48, 51,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,49,69,48,48,10,51,70,48,48,10, 48,67,48,48,10,48,67,48,48,10,55,70,56,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,53,48,10, 69,78,67,79,68,73,78,71,32,57,48,52,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,70,70,56,48, 10,67,57,56,48,10,67,57,56,48,10,68,68,56,48,10, 70,70,56,48,10,67,57,56,48,10,67,57,56,48,10,67, 57,56,48,10,67,57,56,48,10,67,57,56,48,10,67,57, 56,48,10,67,57,56,48,10,70,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,53,49,10,69,78,67,79,68, 73,78,71,32,57,48,52,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,55,70,56,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,53,50,10,69,78,67,79,68,73,78,71,32,57, 48,52,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,55,70,56,48, 10,52,67,56,48,10,52,67,56,48,10,50,68,48,48,10, 50,68,48,48,10,50,68,48,48,10,49,69,48,48,10,49, 69,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,51,53,51, 10,69,78,67,79,68,73,78,71,32,57,48,52,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,70,70,56, 48,10,67,49,56,48,10,67,49,56,48,10,67,57,56,48, 10,68,53,56,48,10,69,51,56,48,10,67,49,56,48,10, 67,49,56,48,10,67,49,56,48,10,67,49,56,48,10,67, 49,56,48,10,67,49,56,48,10,70,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,53,52,10,69,78,67,79, 68,73,78,71,32,57,48,52,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,70,70,56,48,10,67,49,56, 48,10,70,70,56,48,10,67,49,56,48,10,69,51,56,48, 10,68,53,56,48,10,68,53,56,48,10,68,53,56,48,10, 67,57,56,48,10,67,57,56,48,10,67,49,56,48,10,67, 49,56,48,10,70,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,53,53,10,69,78,67,79,68,73,78,71,32, 57,48,52,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,48,67,48,48,10,48,67,48, 48,10,49,69,48,48,10,50,68,48,48,10,50,68,48,48, 10,50,68,48,48,10,50,68,48,48,10,49,69,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,53, 54,10,69,78,67,79,68,73,78,71,32,57,48,52,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,55,70,56,48,10,48,67,48,48,10,48,67,48,48,10, 51,70,48,48,10,49,69,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,51,53,55,10,69,78,67, 79,68,73,78,71,32,57,48,52,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,70,70,56,48,10,67,57, 56,48,10,67,57,56,48,10,67,57,56,48,10,67,57,56, 48,10,67,57,56,48,10,67,57,56,48,10,67,57,56,48, 10,70,70,56,48,10,68,68,56,48,10,67,57,56,48,10, 67,57,56,48,10,70,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,53,56,10,69,78,67,79,68,73,78,71, 32,57,48,52,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 53,57,10,69,78,67,79,68,73,78,71,32,57,48,52,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,49,50, 48,48,10,49,50,48,48,10,49,50,48,48,10,50,49,48, 48,10,50,49,48,48,10,50,49,48,48,10,52,48,56,48, 10,55,70,56,48,10,48,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,53,65,10,69,78, 67,79,68,73,78,71,32,57,48,53,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,49,50, 48,48,10,50,49,48,48,10,52,48,56,48,10,52,48,56, 48,10,50,49,48,48,10,49,50,48,48,10,48,67,48,48, 10,48,48,48,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,51,53,66,10,69,78,67,79,68,73,78, 71,32,57,48,53,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,49,50,48,48,10,49,50,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,53,67,10,69,78,67,79,68,73,78,71,32,57,48,53, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 69,48,48,10,50,49,48,48,10,52,48,56,48,10,52,48, 56,48,10,52,48,56,48,10,52,48,56,48,10,50,49,48, 48,10,49,69,48,48,10,48,48,48,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,53,68,10,69, 78,67,79,68,73,78,71,32,57,48,53,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,69,48,48,10, 50,49,48,48,10,52,48,56,48,10,52,48,56,48,10,52, 48,56,48,10,52,67,56,48,10,53,50,56,48,10,53,50, 56,48,10,52,67,56,48,10,52,48,56,48,10,52,48,56, 48,10,52,48,56,48,10,52,48,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,53,69,10,69,78,67,79,68,73, 78,71,32,57,48,53,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,70,56,48,10,54,49,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 57,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,51,53,70,10,69,78,67,79,68,73,78,71,32,57,48, 53,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,69,48,48,10,50, 49,48,48,10,52,67,56,48,10,53,69,56,48,10,52,67, 56,48,10,53,50,56,48,10,50,49,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,54,48,10, 69,78,67,79,68,73,78,71,32,57,48,53,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,70,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,68,56,48,10,54,68,56,48,10,54,49, 56,48,10,54,49,56,48,10,55,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,54,49,10,69,78,67,79,68, 73,78,71,32,57,48,53,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,51,48,48,10,51,51,48,48, 10,48,48,48,48,10,55,70,56,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,54,50,10,69,78,67,79,68,73,78,71,32,57, 48,53,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,51,48,48,10,51,51,48,48,10,48,48,48,48, 10,55,70,56,48,10,52,48,56,48,10,52,48,56,48,10, 50,49,48,48,10,50,49,48,48,10,50,49,48,48,10,49, 50,48,48,10,49,50,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,51,54,51, 10,69,78,67,79,68,73,78,71,32,57,48,53,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,51,48, 48,10,51,51,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,55,70,56,48,10,51,70,48,48,10, 49,69,48,48,10,49,69,48,48,10,51,70,48,48,10,51, 51,48,48,10,50,49,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,54,52,10,69,78,67,79, 68,73,78,71,32,57,48,54,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,51,48,48,10,51,51,48,48,10,48,48,48,48, 10,48,67,48,48,10,49,50,48,48,10,49,50,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,54,53,10,69,78,67,79,68,73,78,71,32, 57,48,54,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,51,48,48,10,51,51,48,48,10,48,48,48, 48,10,49,69,48,48,10,50,49,48,48,10,52,48,56,48, 10,52,48,56,48,10,52,48,56,48,10,52,48,56,48,10, 50,49,48,48,10,49,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,54, 54,10,69,78,67,79,68,73,78,71,32,57,48,54,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,51,70,48,48,10, 49,69,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,51,54,55,10,69,78,67, 79,68,73,78,71,32,57,48,54,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,51,70,56, 48,10,52,67,48,48,10,52,67,48,48,10,52,67,48,48, 10,51,70,56,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,54,56,10,69,78,67,79,68,73,78,71, 32,57,48,54,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,51,48,48,10,51,51,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,57,56,48,10,54,68,56,48,10,54,55,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 54,57,10,69,78,67,79,68,73,78,71,32,57,48,54,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 51,48,48,10,51,51,48,48,10,48,48,48,48,10,54,48, 48,48,10,49,56,48,48,10,48,54,48,48,10,48,49,56, 48,10,48,54,48,48,10,49,56,48,48,10,54,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,54,65,10,69,78, 67,79,68,73,78,71,32,57,48,54,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,52,48,48,10, 48,56,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,51,54,66,10,69,78,67,79,68,73,78, 71,32,57,48,54,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,48,48,10,52,49,48,48,10,52, 49,48,48,10,52,49,48,48,10,50,50,48,48,10,50,50, 56,48,10,51,66,48,48,10,53,69,48,48,10,57,52,48, 48,10,49,52,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,54,67,10,69,78,67,79,68,73,78,71,32,57,48,54, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,49,69,48,48,10,51,51,48,48,10,51, 51,48,48,10,54,49,56,48,10,55,57,67,48,10,54,68, 56,48,10,69,55,56,48,10,54,49,56,48,10,51,51,48, 48,10,51,51,48,48,10,49,69,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,54,68,10,69, 78,67,79,68,73,78,71,32,57,48,54,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,51,68,56,48,10,55,70,56,48,10,54,70, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,54,69,10,69,78,67,79,68,73, 78,71,32,57,48,55,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,52,48, 48,10,55,70,56,48,10,48,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,51,54,70,10,69,78,67,79,68,73,78,71,32,57,48, 55,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,51,56,48,10,55,70,56,48,10,54, 53,56,48,10,54,57,56,48,10,55,70,56,48,10,55,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,55,48,10, 69,78,67,79,68,73,78,71,32,57,48,55,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,70,56,48, 10,54,49,56,48,10,54,68,56,48,10,55,70,56,48,10, 55,55,56,48,10,54,53,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,49,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,49,56,48,10,55,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,55,49,10,69,78,67,79,68, 73,78,71,32,57,48,55,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,52,48,56,48,10,52,48,56,48, 10,52,48,56,48,10,52,48,56,48,10,50,49,48,48,10, 51,57,56,48,10,55,70,56,48,10,55,55,48,48,10,49, 50,48,48,10,49,50,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,55,50,10,69,78,67,79,68,73,78,71,32,57, 48,55,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,49,50,48,48,10,49,50,48,48,10,51,66,56,48,10, 55,70,56,48,10,54,55,48,48,10,50,49,48,48,10,52, 48,56,48,10,52,48,56,48,10,52,48,56,48,10,52,48, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,51,55,51, 10,69,78,67,79,68,73,78,71,32,57,48,55,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,66,48,48,10,48,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,55,52,10,69,78,67,79, 68,73,78,71,32,57,48,55,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,55, 51,48,48,10,55,69,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,55,53,10,69,78,67,79,68,73,78,71,32, 57,48,55,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,51,48,48, 10,55,51,56,48,10,54,49,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,55,70,56,48,10,51, 51,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,55, 54,10,69,78,67,79,68,73,78,71,32,57,48,55,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,68,56, 48,10,54,51,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,51,56,48,10,54,53,56,48,10, 51,57,56,48,10,48,48,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,51,55,55,10,69,78,67, 79,68,73,78,71,32,57,48,55,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,70,48,48,10,54,49,56, 48,10,54,48,48,48,10,51,69,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,49,56,48,10,51,70,48,48,10, 48,48,48,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,55,56,10,69,78,67,79,68,73,78,71, 32,57,48,56,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,66,48,48,10,48,69,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 55,57,10,69,78,67,79,68,73,78,71,32,57,48,56,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,51, 48,48,10,55,51,56,48,10,54,49,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,55,70,56,48, 10,51,51,48,48,10,48,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,55,65,10,69,78, 67,79,68,73,78,71,32,57,48,56,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,68,56,48,10,54,51,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,51,56,48, 10,54,53,56,48,10,51,57,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,51,55,66,10,69,78,67,79,68,73,78, 71,32,57,48,56,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,70,67,48,10,48,51, 48,48,10,54,51,48,48,10,54,54,48,48,10,51,54,48, 48,10,51,54,48,48,10,49,67,48,48,10,49,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,55,67,10,69,78,67,79,68,73,78,71,32,57,48,56, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,50,56,48,48,10,51,48,48,48,10,50, 48,48,48,10,54,48,48,48,10,65,48,48,48,10,54,48, 48,48,10,51,48,48,48,10,50,56,48,48,10,50,52,48, 48,10,65,56,48,48,10,66,48,48,48,10,66,70,56,48, 10,67,48,48,48,10,70,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,55,68,10,69, 78,67,79,68,73,78,71,32,57,48,56,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,51, 56,48,10,51,51,48,48,10,51,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,55,69,10,69,78,67,79,68,73, 78,71,32,57,48,56,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,69,48,48,10,54, 51,48,48,10,67,49,56,48,10,67,49,56,48,10,70,70, 56,48,10,51,54,48,48,10,51,54,48,48,10,70,55,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,51,55,70,10,69,78,67,79,68,73,78,71,32,57,48, 56,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,49,69,48,48,10,51,70,48,48,10,51, 70,48,48,10,51,70,48,48,10,49,69,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,56,48,10, 69,78,67,79,68,73,78,71,32,57,48,56,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 48,51,48,48,10,49,70,48,48,10,51,51,48,48,10,51, 51,48,48,10,51,51,48,48,10,49,68,48,48,10,67,48, 67,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,56,49,10,69,78,67,79,68, 73,78,71,32,57,48,56,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,56,48,48,10,67,67,48,48,10,48,67,48,48,10,55, 67,48,48,10,67,67,48,48,10,67,67,48,48,10,67,68, 52,48,10,55,53,52,48,10,48,48,48,48,10,70,70,67, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,56,50,10,69,78,67,79,68,73,78,71,32,57, 48,57,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,51,48,48,10, 57,52,56,48,10,49,48,56,48,10,55,51,56,48,10,57, 52,56,48,10,57,52,56,48,10,66,53,56,48,10,53,50, 56,48,10,48,48,48,48,10,70,55,56,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,51,56,51, 10,69,78,67,79,68,73,78,71,32,57,48,57,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,57,50,52,48,10, 52,50,56,48,10,48,69,48,48,10,68,50,67,48,10,49, 50,48,48,10,53,54,56,48,10,56,65,52,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,56,52,10,69,78,67,79, 68,73,78,71,32,57,48,57,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,70,69,48,48,10,57,53,48,48,10,57,53,48,48, 10,65,52,56,48,10,65,52,56,48,10,65,52,56,48,10, 65,52,56,48,10,65,52,56,48,10,57,53,48,48,10,57, 53,48,48,10,70,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,56,53,10,69,78,67,79,68,73,78,71,32, 57,48,57,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,56, 48,48,10,48,56,48,48,10,70,70,56,48,10,56,56,56, 48,10,56,56,56,48,10,56,56,56,48,10,56,56,56,48, 10,56,56,56,48,10,56,56,56,48,10,56,56,56,48,10, 56,56,56,48,10,56,56,56,48,10,70,70,56,48,10,48, 56,48,48,10,48,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,56, 54,10,69,78,67,79,68,73,78,71,32,57,48,57,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,56,48,48,10,49,52,48, 48,10,50,50,48,48,10,48,57,48,48,10,70,67,56,48, 10,56,50,52,48,10,70,67,56,48,10,48,57,48,48,10, 50,50,48,48,10,49,52,48,48,10,48,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,51,56,55,10,69,78,67, 79,68,73,78,71,32,57,48,57,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,50,48, 48,10,48,51,48,48,10,48,69,56,48,10,49,51,48,48, 10,49,50,48,48,10,49,48,48,48,10,54,55,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,56,56,10,69,78,67,79,68,73,78,71, 32,57,48,57,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,56,48,48,10,48,56, 48,48,10,57,67,56,48,10,54,66,48,48,10,50,65,48, 48,10,53,68,48,48,10,52,57,48,48,10,53,68,48,48, 10,50,65,48,48,10,54,66,48,48,10,57,67,56,48,10, 48,56,48,48,10,48,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 56,57,10,69,78,67,79,68,73,78,71,32,57,48,57,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,67,48,48,10,50,50, 48,48,10,52,49,48,48,10,56,48,56,48,10,56,48,56, 48,10,69,51,56,48,10,65,50,56,48,10,57,52,56,48, 10,53,53,48,48,10,50,65,48,48,10,49,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,56,65,10,69,78, 67,79,68,73,78,71,32,57,48,57,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,67,48,48,10,50,50,48,48,10,52,49, 48,48,10,70,70,56,48,10,65,50,56,48,10,65,50,56, 48,10,57,52,56,48,10,57,52,56,48,10,52,57,48,48, 10,50,65,48,48,10,49,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,51,56,66,10,69,78,67,79,68,73,78, 71,32,57,48,57,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,65,48,48,10,53,49,48,48,10,55,48, 56,48,10,53,48,56,48,10,48,56,56,48,10,56,56,56, 48,10,56,52,56,48,10,52,49,48,48,10,50,50,48,48, 10,49,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,56,67,10,69,78,67,79,68,73,78,71,32,57,49,48, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,50,67,48,48,10,51,50,48,48,10,51,57, 48,48,10,54,51,48,48,10,57,52,56,48,10,57,52,56, 48,10,54,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,56,68,10,69, 78,67,79,68,73,78,71,32,57,49,48,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 70,48,48,10,51,51,48,48,10,51,51,48,48,10,51,51, 48,48,10,51,51,48,48,10,51,51,48,48,10,51,51,48, 48,10,55,51,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,56,69,10,69,78,67,79,68,73, 78,71,32,57,49,48,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,70,56,48,10,51, 51,48,48,10,51,51,48,48,10,51,51,48,48,10,51,51, 48,48,10,51,51,48,48,10,51,51,48,48,10,55,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,51,56,70,10,69,78,67,79,68,73,78,71,32,57,49, 48,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,70,56,48,10, 48,56,48,48,10,49,67,48,48,10,51,54,48,48,10,54, 51,48,48,10,67,49,56,48,10,54,51,48,48,10,51,54, 48,48,10,49,67,48,48,10,48,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,57,48,10, 69,78,67,79,68,73,78,71,32,57,49,48,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,56,48,48,10,49,67,48,48,10, 51,54,48,48,10,54,51,48,48,10,67,49,56,48,10,54, 51,48,48,10,51,54,48,48,10,49,67,48,48,10,48,56, 48,48,10,70,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,57,49,10,69,78,67,79,68, 73,78,71,32,57,49,48,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,70,56,48,10,48,56,48,48,10,49,67,48,48,10, 51,54,48,48,10,54,51,48,48,10,70,70,56,48,10,54, 51,48,48,10,51,54,48,48,10,49,67,48,48,10,48,56, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,57,50,10,69,78,67,79,68,73,78,71,32,57, 49,48,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,56,48,48, 10,49,67,48,48,10,51,54,48,48,10,54,51,48,48,10, 70,70,56,48,10,54,51,48,48,10,51,54,48,48,10,49, 67,48,48,10,48,56,48,48,10,70,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,51,57,51, 10,69,78,67,79,68,73,78,71,32,57,49,48,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,54,68,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,57,52,10,69,78,67,79, 68,73,78,71,32,57,49,48,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,50,49,48,48,10,50,49,48,48,10,52,48,56,48,10, 52,48,56,48,10,50,49,48,48,10,50,49,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,57,53,10,69,78,67,79,68,73,78,71,32, 57,49,48,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,55, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,57, 54,10,69,78,67,79,68,73,78,71,32,57,49,49,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,69,48,48,10,51,69,48, 48,10,51,67,48,48,10,51,67,48,48,10,51,56,48,48, 10,51,56,48,48,10,51,48,48,48,10,51,48,48,48,10, 50,48,48,48,10,50,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,51,57,55,10,69,78,67, 79,68,73,78,71,32,57,49,49,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,65,65,48,48,10,48,48, 48,48,10,66,70,56,48,10,50,48,56,48,10,65,48,56, 48,10,50,56,56,48,10,57,48,56,48,10,51,69,56,48, 10,57,48,56,48,10,50,56,56,48,10,65,48,56,48,10, 50,48,56,48,10,51,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,57,56,10,69,78,67,79,68,73,78,71, 32,57,49,49,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,70,69,48,48,10,56,50,48,48,10,65,65, 56,48,10,56,48,48,48,10,65,48,56,48,10,56,56,48, 48,10,56,52,56,48,10,66,69,48,48,10,56,52,56,48, 10,56,56,48,48,10,69,48,56,48,10,48,48,48,48,10, 50,65,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 57,57,10,69,78,67,79,68,73,78,71,32,57,49,49,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 70,48,48,10,49,57,48,48,10,51,57,48,48,10,54,49, 56,48,10,65,49,52,48,10,65,49,52,48,10,65,49,52, 48,10,65,49,52,48,10,66,70,52,48,10,56,48,52,48, 10,56,48,52,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,57,65,10,69,78, 67,79,68,73,78,71,32,57,49,49,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,56,48, 52,48,10,57,49,52,48,10,65,50,52,48,10,56,67,52, 48,10,57,49,52,48,10,65,50,52,48,10,56,48,52,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,51,57,66,10,69,78,67,79,68,73,78, 71,32,57,49,49,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,49,48,48,10, 48,50,48,48,10,48,54,48,48,10,48,52,48,48,10,48, 67,48,48,10,48,67,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,57,67,10,69,78,67,79,68,73,78,71,32,57,49,49, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,57,68,10,69, 78,67,79,68,73,78,71,32,57,49,49,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,52,48,48,10,48,54,48,48, 10,48,50,48,48,10,48,49,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,57,69,10,69,78,67,79,68,73, 78,71,32,57,49,49,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,50,48,48,48, 10,49,48,48,48,10,49,56,48,48,10,48,56,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,51,57,70,10,69,78,67,79,68,73,78,71,32,57,49, 49,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,65,48,10, 69,78,67,79,68,73,78,71,32,57,49,50,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,56,48,48,10,49,56,48, 48,10,49,48,48,48,10,50,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,65,49,10,69,78,67,79,68, 73,78,71,32,57,49,50,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,49,70,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,65,50,10,69,78,67,79,68,73,78,71,32,57, 49,50,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,51,65,51, 10,69,78,67,79,68,73,78,71,32,57,49,50,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,70,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,65,52,10,69,78,67,79, 68,73,78,71,32,57,49,50,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,51,69, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,65,53,10,69,78,67,79,68,73,78,71,32, 57,49,50,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,65, 54,10,69,78,67,79,68,73,78,71,32,57,49,50,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,51,69,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,51,65,55,10,69,78,67, 79,68,73,78,71,32,57,49,50,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 51,48,48,10,48,54,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,65,56,10,69,78,67,79,68,73,78,71, 32,57,49,50,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,49,56,48,48,10,51,48,48,48,10,49,56,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 65,57,10,69,78,67,79,68,73,78,71,32,57,49,50,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,54,48,48,10,48,51,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,65,65,10,69,78, 67,79,68,73,78,71,32,57,49,51,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,51,65,66,10,69,78,67,79,68,73,78, 71,32,57,49,51,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,51,48,48,48,10, 49,56,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,65,67,10,69,78,67,79,68,73,78,71,32,57,49,51, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,54, 48,48,10,48,51,48,48,10,48,54,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,65,68,10,69, 78,67,79,68,73,78,71,32,57,49,51,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,49,56,48,48,10,51,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,65,69,10,69,78,67,79,68,73, 78,71,32,57,49,51,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,51,65,70,10,69,78,67,79,68,73,78,71,32,57,49, 51,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 70,67,48,10,70,70,67,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,66,48,10, 69,78,67,79,68,73,78,71,32,57,49,51,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,51,48, 48,10,48,54,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,49,56,48,48,10,51,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,66,49,10,69,78,67,79,68, 73,78,71,32,57,49,51,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,51,48,48,48,10,49,56,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,54,48,48,10,48,51,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,66,50,10,69,78,67,79,68,73,78,71,32,57, 49,51,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,70,70,56,48,10,67,49,56,48, 10,67,49,56,48,10,67,48,48,48,10,67,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,51,48,48,48,10,49,56,48, 48,10,49,56,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,51,66,51, 10,69,78,67,79,68,73,78,71,32,57,49,51,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,49,56, 48,48,10,49,56,48,48,10,51,48,48,48,10,51,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,67,48,48,48,10,67,48,48,48,10,67, 49,56,48,10,67,49,56,48,10,70,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,66,52,10,69,78,67,79, 68,73,78,71,32,57,49,52,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,66,53,10,69,78,67,79,68,73,78,71,32, 57,49,52,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,49,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,66, 54,10,69,78,67,79,68,73,78,71,32,57,49,52,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,49,56,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,51,66,55,10,69,78,67, 79,68,73,78,71,32,57,49,52,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,56,56,48,48,10,56,56,48,48, 10,52,56,48,48,10,52,56,48,48,10,50,56,48,48,10, 50,56,48,48,10,49,56,48,48,10,49,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,66,56,10,69,78,67,79,68,73,78,71, 32,57,49,52,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,56,48,48,48,10,56,48,48,48,10,56, 48,48,48,10,56,48,48,48,10,56,48,48,48,10,56,48, 48,48,10,56,48,48,48,10,56,48,48,48,10,56,48,48, 48,10,56,48,48,48,10,56,48,48,48,10,56,48,48,48, 10,56,48,48,48,10,56,48,48,48,10,56,48,48,48,10, 56,48,48,48,10,56,48,48,48,10,56,48,48,48,10,56, 48,48,48,10,56,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 66,57,10,69,78,67,79,68,73,78,71,32,57,49,52,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,52,48,10,48,48,52,48,10,48,48,52,48,10,48, 48,52,48,10,48,48,52,48,10,48,48,52,48,10,48,48, 52,48,10,48,48,52,48,10,48,48,52,48,10,48,48,52, 48,10,48,48,52,48,10,48,48,52,48,10,48,48,52,48, 10,48,48,52,48,10,48,48,52,48,10,48,48,52,48,10, 48,48,52,48,10,48,48,52,48,10,48,48,52,48,10,48, 48,52,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,66,65,10,69,78, 67,79,68,73,78,71,32,57,49,52,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,70,70,67,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,51,66,66,10,69,78,67,79,68,73,78, 71,32,57,49,52,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 70,67,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,66,67,10,69,78,67,79,68,73,78,71,32,57,49,52, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,70,70,67,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,66,68,10,69, 78,67,79,68,73,78,71,32,57,49,52,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,70,67,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,66,69,10,69,78,67,79,68,73, 78,71,32,57,49,53,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,70,56,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,51,66,70,10,69,78,67,79,68,73,78,71,32,57,49, 53,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,67,48,10, 69,78,67,79,68,73,78,71,32,57,49,53,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,49,69,48,48,10,50,68,48,48,10, 52,67,56,48,10,52,67,56,48,10,52,67,56,48,10,52, 67,56,48,10,52,67,56,48,10,50,68,48,48,10,49,69, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,67,49,10,69,78,67,79,68, 73,78,71,32,57,49,53,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,48,67,48,48, 10,49,69,48,48,10,50,68,48,48,10,52,67,56,48,10, 52,67,56,48,10,52,67,56,48,10,52,67,56,48,10,52, 67,56,48,10,50,68,48,48,10,49,69,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,67,50,10,69,78,67,79,68,73,78,71,32,57, 49,53,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,49,69,48,48, 10,50,68,48,48,10,52,67,56,48,10,52,67,56,48,10, 52,67,56,48,10,52,67,56,48,10,52,67,56,48,10,50, 68,48,48,10,49,69,48,48,10,48,67,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,51,67,51, 10,69,78,67,79,68,73,78,71,32,57,49,53,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,49,69,48,48, 10,49,69,48,48,10,51,70,48,48,10,51,70,48,48,10, 54,68,56,48,10,54,68,56,48,10,55,70,56,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,67,52,10,69,78,67,79, 68,73,78,71,32,57,49,53,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,70,56,48,10,48,67,48, 48,10,48,67,48,48,10,49,69,48,48,10,49,69,48,48, 10,51,70,48,48,10,51,70,48,48,10,54,68,56,48,10, 54,68,56,48,10,55,70,56,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,67,53,10,69,78,67,79,68,73,78,71,32, 57,49,53,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,49,69,48,48,10,49,69,48,48,10,51,70,48,48, 10,51,70,48,48,10,54,68,56,48,10,54,68,56,48,10, 55,70,56,48,10,48,67,48,48,10,48,67,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,67, 54,10,69,78,67,79,68,73,78,71,32,57,49,53,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,51,67,48,48,10,54,68,56,48, 10,48,70,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,51,67,55,10,69,78,67, 79,68,73,78,71,32,57,49,53,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,51,67,48,48,10,54,68,56,48,10,48,70,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,67,56,10,69,78,67,79,68,73,78,71, 32,57,49,54,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,51,67,48, 48,10,54,68,56,48,10,48,70,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 67,57,10,69,78,67,79,68,73,78,71,32,57,49,54,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,67,65,10,69,78, 67,79,68,73,78,71,32,57,49,54,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,51,67,66,10,69,78,67,79,68,73,78, 71,32,57,49,54,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,67,67,10,69,78,67,79,68,73,78,71,32,57,49,54, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,67,68,10,69, 78,67,79,68,73,78,71,32,57,49,54,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 54,68,56,48,10,52,67,56,48,10,52,67,56,48,10,52, 56,56,48,10,52,48,56,48,10,52,48,56,48,10,52,48, 56,48,10,52,48,56,48,10,52,48,56,48,10,52,48,56, 48,10,52,48,56,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,67,69,10,69,78,67,79,68,73, 78,71,32,57,49,54,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,51,56,48,10, 48,50,56,48,10,48,50,56,48,10,48,50,56,48,10,49, 65,56,48,10,51,50,56,48,10,55,67,56,48,10,67,49, 48,48,10,55,69,48,48,10,51,48,48,48,10,49,56,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,51,67,70,10,69,78,67,79,68,73,78,71,32,57,49, 54,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,69,48,48,10,51, 70,48,48,10,55,70,56,48,10,48,48,48,48,10,55,70, 56,48,10,55,70,56,48,10,55,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,68,48,10, 69,78,67,79,68,73,78,71,32,57,49,54,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,48,48,10,69,78,67,79,68, 73,78,71,32,57,50,49,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,52,56,48,48,10,54,56,48,48,10,53,56,48,48, 10,52,56,48,48,10,52,56,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,48, 67,48,48,10,48,50,48,48,10,48,50,48,48,10,48,50, 48,48,10,48,51,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,52,48,49,10,69,78,67,79,68,73,78,71,32,57, 50,49,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,51,48,48, 48,10,52,48,48,48,10,50,48,48,48,10,49,48,48,48, 10,54,67,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,48,67,48,48,10,48,50,56,48,10,48, 50,56,48,10,48,51,56,48,10,48,50,56,48,10,48,50, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,52,48,50, 10,69,78,67,79,68,73,78,71,32,57,50,49,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,51,48,48,48,10,52,48,48, 48,10,50,48,48,48,10,49,48,48,48,10,54,48,48,48, 10,49,67,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,65,56,48,10,48,50,56,48,10,48, 49,48,48,10,48,50,56,48,10,48,50,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,52,48,51,10,69,78,67,79, 68,73,78,71,32,57,50,49,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,55,48,48,48,10,52,48,48,48,10,55,48,48, 48,10,52,48,48,48,10,55,48,48,48,10,49,67,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,65,56,48,10,48,50,56,48,10,48,49,48,48,10,48, 50,56,48,10,48,50,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,48,52,10,69,78,67,79,68,73,78,71,32, 57,50,50,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,55,48, 48,48,10,52,48,48,48,10,54,48,48,48,10,52,48,48, 48,10,55,48,48,48,10,48,67,48,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,48,67,48,48,10, 48,51,56,48,10,48,49,48,48,10,48,49,48,48,10,48, 49,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,52,48, 53,10,69,78,67,79,68,73,78,71,32,57,50,50,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,52,48, 48,48,10,54,48,48,48,10,52,48,48,48,10,55,48,48, 48,10,49,50,48,48,10,49,65,48,48,10,49,54,48,48, 10,49,50,48,48,10,48,51,48,48,10,48,52,56,48,10, 48,52,56,48,10,48,53,56,48,10,48,51,56,48,10,48, 48,52,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,52,48,54,10,69,78,67, 79,68,73,78,71,32,57,50,50,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,51,48,48,48,10,52,56,48,48,10,55,56, 48,48,10,52,56,48,48,10,52,56,48,48,10,48,67,48, 48,10,49,48,48,48,10,49,48,48,48,10,49,48,48,48, 10,48,69,56,48,10,48,50,56,48,10,48,51,48,48,10, 48,50,56,48,10,48,50,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,52,48,55,10,69,78,67,79,68,73,78,71, 32,57,50,50,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,54, 48,48,48,10,53,48,48,48,10,54,48,48,48,10,53,48, 48,48,10,54,48,48,48,10,49,67,48,48,10,49,48,48, 48,10,49,56,48,48,10,49,48,48,48,10,49,69,48,48, 10,48,50,48,48,10,48,50,48,48,10,48,50,48,48,10, 48,51,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 48,56,10,69,78,67,79,68,73,78,71,32,57,50,50,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,55,56,48,48,10,54, 67,48,48,10,54,67,48,48,10,55,56,48,48,10,54,67, 48,48,10,54,67,48,48,10,55,56,48,48,10,48,55,56, 48,10,48,67,48,48,10,48,67,48,48,10,48,55,48,48, 10,48,49,56,48,10,48,49,56,48,10,48,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,52,48,57,10,69,78, 67,79,68,73,78,71,32,57,50,50,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,54,54,48,48,10,54,54,48,48,10,54, 54,48,48,10,55,69,48,48,10,54,54,48,48,10,54,54, 48,48,10,54,54,48,48,10,48,48,48,48,10,49,70,56, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,52,48,65,10,69,78,67,79,68,73,78, 71,32,57,50,50,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,51,69,48,48,10,48,48, 48,48,10,48,70,56,48,10,48,67,48,48,10,48,67,48, 48,10,48,70,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 52,48,66,10,69,78,67,79,68,73,78,71,32,57,50,50, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,54,54,48,48,10, 54,54,48,48,10,54,54,48,48,10,51,67,48,48,10,51, 67,48,48,10,49,56,48,48,10,49,56,48,48,10,48,48, 48,48,10,49,70,56,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,48,67,10,69, 78,67,79,68,73,78,71,32,57,50,50,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,55,67,48,48,10,54,48,48,48,10, 54,48,48,48,10,55,56,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,48,70,56,48,10,48,67, 48,48,10,48,67,48,48,10,48,70,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,52,48,68,10,69,78,67,79,68,73, 78,71,32,57,50,50,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,51,67,48,48,10,54,54,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,54,48,48,10,51,67,48,48,10,48, 48,48,48,10,49,70,48,48,10,49,57,56,48,10,49,57, 56,48,10,49,70,48,48,10,49,69,48,48,10,49,66,48, 48,10,49,57,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,52,48,69,10,69,78,67,79,68,73,78,71,32,57,50, 51,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,51,67,48,48, 10,54,48,48,48,10,54,48,48,48,10,51,56,48,48,10, 48,67,48,48,10,48,67,48,48,10,55,56,48,48,10,48, 55,48,48,10,48,68,56,48,10,48,68,56,48,10,48,68, 56,48,10,48,68,56,48,10,48,68,56,48,10,48,55,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,52,48,70,10, 69,78,67,79,68,73,78,71,32,57,50,51,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,51,67,48,48,10,54,48,48,48, 10,54,48,48,48,10,51,56,48,48,10,48,67,48,48,10, 48,67,48,48,10,55,56,48,48,10,48,55,56,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,55,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,49,48,10,69,78,67,79,68, 73,78,71,32,57,50,51,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,55,48,48,48,10,52,56,48,48,10,52,56,48,48, 10,52,56,48,48,10,55,48,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,69,48,48,10,48, 51,56,48,10,48,50,48,48,10,48,51,48,48,10,48,50, 48,48,10,48,51,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,52,49,49,10,69,78,67,79,68,73,78,71,32,57, 50,51,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,53,48,48,48,10,53,48,48,48,10,53,48,48,48, 10,54,54,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,54,48,48,10,48,48,56,48,10,48, 49,56,48,10,48,48,56,48,10,48,48,56,48,10,48,48, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,52,49,50, 10,69,78,67,79,68,73,78,71,32,57,50,51,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,54,48,48,48,10,53,48,48, 48,10,53,48,48,48,10,53,48,48,48,10,54,54,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,54,48,48,10,48,49,48,48,10,48,50,56,48,10,48, 48,56,48,10,48,49,48,48,10,48,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,52,49,51,10,69,78,67,79, 68,73,78,71,32,57,50,51,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,54,48,48,48,10,53,48,48,48,10,53,48,48, 48,10,53,48,48,48,10,54,54,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,54,48,48,10, 48,49,48,48,10,48,50,56,48,10,48,49,48,48,10,48, 48,56,48,10,48,51,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,49,52,10,69,78,67,79,68,73,78,71,32, 57,50,51,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,54,48, 48,48,10,53,48,48,48,10,53,48,48,48,10,53,48,48, 48,10,54,54,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,54,48,48,10,48,48,56,48,10, 48,49,56,48,10,48,50,56,48,10,48,51,67,48,10,48, 48,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,52,49, 53,10,69,78,67,79,68,73,78,71,32,57,50,51,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,52,56,48,48,10,54,56, 48,48,10,53,56,48,48,10,52,56,48,48,10,52,56,48, 48,10,48,67,48,48,10,49,50,48,48,10,49,69,48,48, 10,49,50,48,48,10,48,50,56,48,10,48,50,56,48,10, 48,51,48,48,10,48,50,56,48,10,48,50,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,52,49,54,10,69,78,67, 79,68,73,78,71,32,57,50,51,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,51,48,48,48,10,52,48,48,48,10,50,48, 48,48,10,49,48,48,48,10,54,48,48,48,10,49,52,48, 48,10,49,52,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,52,56,48,10,48,54,56,48,10, 48,53,56,48,10,48,52,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,52,49,55,10,69,78,67,79,68,73,78,71, 32,57,50,51,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,55, 48,48,48,10,52,48,48,48,10,54,48,48,48,10,52,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,51,69,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,66,48,48, 10,48,50,56,48,10,48,51,48,48,10,48,50,56,48,10, 48,51,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 49,56,10,69,78,67,79,68,73,78,71,32,57,50,52,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,51,48,48,48,10,52, 48,48,48,10,52,48,48,48,10,52,48,48,48,10,51,48, 48,48,10,48,67,48,48,10,49,50,48,48,10,49,69,48, 48,10,49,50,48,48,10,49,50,48,48,10,48,52,56,48, 10,48,54,56,48,10,48,53,56,48,10,48,52,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,52,49,57,10,69,78, 67,79,68,73,78,71,32,57,50,52,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,55,67,48,48,10,54,48,48,48,10,54, 48,48,48,10,55,56,48,48,10,54,48,48,48,10,54,48, 48,48,10,55,67,48,48,10,48,48,48,48,10,51,49,56, 48,10,51,66,56,48,10,51,70,56,48,10,51,53,56,48, 10,51,49,56,48,10,51,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,52,49,65,10,69,78,67,79,68,73,78, 71,32,57,50,52,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 51,48,48,48,10,52,48,48,48,10,50,48,48,48,10,49, 48,48,48,10,54,48,48,48,10,49,52,48,48,10,49,52, 48,48,10,49,52,48,48,10,49,52,48,48,10,48,66,48, 48,10,48,50,56,48,10,48,51,48,48,10,48,50,56,48, 10,48,51,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 52,49,66,10,69,78,67,79,68,73,78,71,32,57,50,52, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,55,48,48,48,10, 52,48,48,48,10,54,48,48,48,10,52,48,48,48,10,55, 48,48,48,10,48,69,48,48,10,49,48,48,48,10,48,67, 48,48,10,48,50,48,48,10,49,68,56,48,10,48,50,48, 48,10,48,50,48,48,10,48,50,48,48,10,48,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,49,67,10,69, 78,67,79,68,73,78,71,32,57,50,52,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,55,67,48,48,10,54,48,48,48,10, 54,48,48,48,10,55,56,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,48,55,56,48,10,48,67, 48,48,10,48,67,48,48,10,48,55,48,48,10,48,49,56, 48,10,48,49,56,48,10,48,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,52,49,68,10,69,78,67,79,68,73, 78,71,32,57,50,52,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,51,56,48,48,10,54,67,48,48,10,54,48,48,48,10, 54,67,48,48,10,54,52,48,48,10,54,67,48,48,10,51, 56,48,48,10,48,55,56,48,10,48,67,48,48,10,48,67, 48,48,10,48,55,48,48,10,48,49,56,48,10,48,49,56, 48,10,48,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,52,49,69,10,69,78,67,79,68,73,78,71,32,57,50, 52,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,55,56,48,48, 10,54,67,48,48,10,54,67,48,48,10,55,56,48,48,10, 55,56,48,48,10,54,67,48,48,10,54,67,48,48,10,48, 55,56,48,10,48,67,48,48,10,48,67,48,48,10,48,55, 48,48,10,48,49,56,48,10,48,49,56,48,10,48,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,52,49,70,10, 69,78,67,79,68,73,78,71,32,57,50,52,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,54,54,48,48,10,54,54,48,48, 10,54,54,48,48,10,54,54,48,48,10,54,54,48,48,10, 51,67,48,48,10,48,48,48,48,10,48,55,56,48,10,48, 67,48,48,10,48,67,48,48,10,48,55,48,48,10,48,49, 56,48,10,48,49,56,48,10,48,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,50,48,10,69,78,67,79,68, 73,78,71,32,57,50,52,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,51,67,48,48,10,54,48,48,48,10,54,48,48,48, 10,51,56,48,48,10,48,67,48,48,10,48,67,48,48,10, 55,56,48,48,10,48,70,48,48,10,48,68,56,48,10,48, 68,56,48,10,48,70,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,52,50,49,10,69,78,67,79,68,73,78,71,32,57, 50,52,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,53,48,48,48,10,53,48,48,48,10,53,48,48,48, 10,54,48,48,48,10,49,67,48,48,10,49,48,48,48,10, 49,56,48,48,10,49,48,48,48,10,49,69,48,48,10,48, 50,48,48,10,48,50,48,48,10,48,50,48,48,10,48,51, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,52,50,50, 10,69,78,67,79,68,73,78,71,32,57,50,53,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,52,48, 48,10,51,67,48,48,10,51,56,48,48,10,51,48,48,48, 10,55,48,48,48,10,70,54,48,48,10,66,66,48,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,51, 49,56,48,10,51,66,48,48,10,51,54,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,52,50,51,10,69,78,67,79, 68,73,78,71,32,57,50,53,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 49,56,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,50,52,10,69,78,67,79,68,73,78,71,32, 57,50,53,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,54,54, 48,48,10,55,54,48,48,10,55,69,48,48,10,55,69,48, 48,10,54,69,48,48,10,54,54,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,52,50, 53,10,69,78,67,79,68,73,78,71,32,57,50,53,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,57, 56,48,10,49,57,56,48,10,51,51,48,48,10,51,51,48, 48,10,54,54,48,48,10,54,54,48,48,10,48,67,48,48, 10,49,57,56,48,10,49,57,56,48,10,51,51,48,48,10, 51,51,48,48,10,54,54,48,48,10,54,54,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,52,50,54,10,69,78,67, 79,68,73,78,71,32,57,50,53,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,48,48,48,10,49,56,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,52,52,48,10,69,78,67,79,68,73,78,71, 32,57,50,56,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,70,56,48,10,48,68,56,48,10,48,68, 56,48,10,48,68,56,48,10,48,68,56,48,10,48,68,56, 48,10,48,67,48,48,10,54,67,48,48,10,54,67,48,48, 10,54,67,48,48,10,54,67,48,48,10,54,67,48,48,10, 55,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 52,49,10,69,78,67,79,68,73,78,71,32,57,50,56,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,55,70,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,52,52,50,10,69,78, 67,79,68,73,78,71,32,57,50,56,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,55,70,56,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,52,52,51,10,69,78,67,79,68,73,78, 71,32,57,50,56,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,55,70,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 52,52,52,10,69,78,67,79,68,73,78,71,32,57,50,56, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,52,53,10,69, 78,67,79,68,73,78,71,32,57,50,56,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 55,51,56,48,10,55,70,56,48,10,54,68,56,48,10,55, 70,56,48,10,55,51,56,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,52,52,54,10,69,78,67,79,68,73, 78,71,32,57,50,56,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,55,56,48,10, 48,55,56,48,10,54,55,56,48,10,54,55,56,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,55,56,48,10,54,55,56,48,10,48,55,56, 48,10,48,55,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,52,52,55,10,69,78,67,79,68,73,78,71,32,57,50, 56,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,51,56,48,10,48,51,56,48,10,48,51,56,48,10, 48,66,56,48,10,48,66,56,48,10,48,66,56,48,10,48, 56,48,48,10,69,56,48,48,10,69,56,48,48,10,69,56, 48,48,10,69,48,48,48,10,69,48,48,48,10,69,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,52,52,56,10, 69,78,67,79,68,73,78,71,32,57,50,56,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,55,56,48,10, 48,55,56,48,10,48,55,56,48,10,53,55,56,48,10,53, 55,56,48,10,53,55,56,48,10,53,55,56,48,10,53,48, 48,48,10,53,48,48,48,10,53,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,52,57,10,69,78,67,79,68, 73,78,71,32,57,50,56,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,69,56,48,10, 69,69,56,48,10,69,69,56,48,10,69,69,56,48,10,69, 69,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,52,52,65,10,69,78,67,79,68,73,78,71,32,57, 50,57,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,67,67,48,48,10,67,67,48,48, 10,67,67,48,48,10,54,54,48,48,10,54,54,48,48,10, 54,54,48,48,10,51,51,48,48,10,51,51,48,48,10,51, 51,48,48,10,49,57,56,48,10,49,57,56,48,10,49,57, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,52,54,48, 10,69,78,67,79,68,73,78,71,32,57,51,49,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,69,48, 48,10,52,49,48,48,10,56,48,56,48,10,56,56,56,48, 10,57,56,56,48,10,56,56,56,48,10,56,56,56,48,10, 56,56,56,48,10,56,56,56,48,10,57,67,56,48,10,56, 48,56,48,10,52,49,48,48,10,51,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,52,54,49,10,69,78,67,79, 68,73,78,71,32,57,51,49,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,69,48,48,10,52,49,48, 48,10,56,48,56,48,10,57,67,56,48,10,65,50,56,48, 10,56,50,56,48,10,56,52,56,48,10,56,56,56,48,10, 57,48,56,48,10,66,69,56,48,10,56,48,56,48,10,52, 49,48,48,10,51,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,54,50,10,69,78,67,79,68,73,78,71,32, 57,51,49,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,69,48,48,10,52,49,48,48,10,56,48,56, 48,10,57,67,56,48,10,65,50,56,48,10,56,50,56,48, 10,56,67,56,48,10,56,50,56,48,10,65,50,56,48,10, 57,67,56,48,10,56,48,56,48,10,52,49,48,48,10,51, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,52,54, 51,10,69,78,67,79,68,73,78,71,32,57,51,49,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,69, 48,48,10,52,49,48,48,10,56,48,56,48,10,56,56,56, 48,10,57,56,56,48,10,65,56,56,48,10,66,67,56,48, 10,56,56,56,48,10,56,56,56,48,10,56,56,56,48,10, 56,48,56,48,10,52,49,48,48,10,51,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,52,54,52,10,69,78,67, 79,68,73,78,71,32,57,51,49,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,69,48,48,10,52,49, 48,48,10,56,48,56,48,10,66,69,56,48,10,65,48,56, 48,10,65,48,56,48,10,66,67,56,48,10,56,50,56,48, 10,56,50,56,48,10,66,67,56,48,10,56,48,56,48,10, 52,49,48,48,10,51,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,52,54,53,10,69,78,67,79,68,73,78,71, 32,57,51,49,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,69,48,48,10,52,49,48,48,10,56,48, 56,48,10,57,67,56,48,10,65,48,56,48,10,65,48,56, 48,10,66,67,56,48,10,65,50,56,48,10,65,50,56,48, 10,57,67,56,48,10,56,48,56,48,10,52,49,48,48,10, 51,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 54,54,10,69,78,67,79,68,73,78,71,32,57,51,49,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 69,48,48,10,52,49,48,48,10,56,48,56,48,10,66,69, 56,48,10,56,50,56,48,10,56,52,56,48,10,56,52,56, 48,10,56,56,56,48,10,56,56,56,48,10,56,56,56,48, 10,56,48,56,48,10,52,49,48,48,10,51,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,52,54,55,10,69,78, 67,79,68,73,78,71,32,57,51,49,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,69,48,48,10,52, 49,48,48,10,56,48,56,48,10,57,67,56,48,10,65,50, 56,48,10,65,50,56,48,10,57,67,56,48,10,65,50,56, 48,10,65,50,56,48,10,57,67,56,48,10,56,48,56,48, 10,52,49,48,48,10,51,69,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,52,54,56,10,69,78,67,79,68,73,78, 71,32,57,51,50,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,69,48,48,10,52,49,48,48,10,56, 48,56,48,10,57,67,56,48,10,65,50,56,48,10,65,50, 56,48,10,57,69,56,48,10,56,50,56,48,10,56,50,56, 48,10,57,67,56,48,10,56,48,56,48,10,52,49,48,48, 10,51,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 52,54,57,10,69,78,67,79,68,73,78,71,32,57,51,50, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,70,48,48,10,52,48,56,48,10,56,48,52,48,10,57, 50,52,48,10,66,53,52,48,10,57,53,52,48,10,57,53, 52,48,10,57,53,52,48,10,57,53,52,48,10,66,65,52, 48,10,56,48,52,48,10,52,48,56,48,10,51,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,54,65,10,69, 78,67,79,68,73,78,71,32,57,51,50,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,70,48,48,10, 52,48,56,48,10,56,48,52,48,10,57,50,52,48,10,66, 54,52,48,10,57,50,52,48,10,57,50,52,48,10,57,50, 52,48,10,57,50,52,48,10,66,70,52,48,10,56,48,52, 48,10,52,48,56,48,10,51,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,52,54,66,10,69,78,67,79,68,73, 78,71,32,57,51,50,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,70,48,48,10,52,48,56,48,10, 56,48,52,48,10,57,54,52,48,10,66,49,52,48,10,57, 49,52,48,10,57,50,52,48,10,57,52,52,48,10,57,52, 52,48,10,66,70,52,48,10,56,48,52,48,10,52,48,56, 48,10,51,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,52,54,67,10,69,78,67,79,68,73,78,71,32,57,51, 50,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,70,48,48,10,52,48,56,48,10,56,48,52,48,10, 57,54,52,48,10,66,49,52,48,10,57,49,52,48,10,57, 50,52,48,10,57,49,52,48,10,57,49,52,48,10,66,69, 52,48,10,56,48,52,48,10,52,48,56,48,10,51,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,52,54,68,10, 69,78,67,79,68,73,78,71,32,57,51,50,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,70,48,48, 10,52,48,56,48,10,56,48,52,48,10,57,52,52,48,10, 66,52,52,48,10,57,53,52,48,10,57,55,52,48,10,57, 49,52,48,10,57,49,52,48,10,66,57,52,48,10,56,48, 52,48,10,52,48,56,48,10,51,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,54,69,10,69,78,67,79,68, 73,78,71,32,57,51,50,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,70,48,48,10,52,48,56,48, 10,56,48,52,48,10,57,55,52,48,10,66,52,52,48,10, 57,52,52,48,10,57,54,52,48,10,57,49,52,48,10,57, 49,52,48,10,66,69,52,48,10,56,48,52,48,10,52,48, 56,48,10,51,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,52,54,70,10,69,78,67,79,68,73,78,71,32,57, 51,50,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,70,48,48,10,52,48,56,48,10,56,48,52,48, 10,57,51,52,48,10,66,52,52,48,10,57,52,52,48,10, 57,54,52,48,10,57,53,52,48,10,57,53,52,48,10,66, 65,52,48,10,56,48,52,48,10,52,48,56,48,10,51,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,52,55,48, 10,69,78,67,79,68,73,78,71,32,57,51,50,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,70,48, 48,10,52,48,56,48,10,56,48,52,48,10,57,55,52,48, 10,66,49,52,48,10,57,49,52,48,10,57,50,52,48,10, 57,50,52,48,10,57,50,52,48,10,66,65,52,48,10,56, 48,52,48,10,52,48,56,48,10,51,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,52,55,49,10,69,78,67,79, 68,73,78,71,32,57,51,50,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,70,48,48,10,52,48,56, 48,10,56,48,52,48,10,57,50,52,48,10,66,53,52,48, 10,57,53,52,48,10,57,50,52,48,10,57,53,52,48,10, 57,53,52,48,10,66,65,52,48,10,56,48,52,48,10,52, 48,56,48,10,51,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,55,50,10,69,78,67,79,68,73,78,71,32, 57,51,51,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,70,48,48,10,52,48,56,48,10,56,48,52, 48,10,57,50,52,48,10,66,53,52,48,10,57,53,52,48, 10,57,51,52,48,10,57,49,52,48,10,57,49,52,48,10, 66,69,52,48,10,56,48,52,48,10,52,48,56,48,10,51, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,52,55, 51,10,69,78,67,79,68,73,78,71,32,57,51,51,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,70, 48,48,10,52,48,56,48,10,56,48,52,48,10,66,50,52, 48,10,56,68,52,48,10,56,68,52,48,10,57,53,52,48, 10,65,53,52,48,10,65,53,52,48,10,66,65,52,48,10, 56,48,52,48,10,52,48,56,48,10,51,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,52,55,52,10,69,78,67, 79,68,73,78,71,32,57,51,51,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,52,49,48,48,10,56,48, 56,48,10,56,56,56,48,10,57,56,56,48,10,56,56,56, 48,10,56,56,56,48,10,56,56,56,48,10,56,56,56,48, 10,56,56,56,48,10,56,56,56,48,10,57,67,56,48,10, 56,48,56,48,10,52,49,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,52,55,53,10,69,78,67,79,68,73,78,71, 32,57,51,51,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,52,49,48,48,10,56,48,56,48,10,57,67, 56,48,10,65,50,56,48,10,65,50,56,48,10,56,50,56, 48,10,56,52,56,48,10,56,56,56,48,10,57,48,56,48, 10,65,48,56,48,10,66,69,56,48,10,56,48,56,48,10, 52,49,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 55,54,10,69,78,67,79,68,73,78,71,32,57,51,51,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,52, 49,48,48,10,56,48,56,48,10,57,67,56,48,10,65,50, 56,48,10,56,50,56,48,10,56,50,56,48,10,56,67,56, 48,10,56,50,56,48,10,56,50,56,48,10,65,50,56,48, 10,57,67,56,48,10,56,48,56,48,10,52,49,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,52,55,55,10,69,78, 67,79,68,73,78,71,32,57,51,51,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,52,49,48,48,10,56, 48,56,48,10,56,52,56,48,10,56,67,56,48,10,57,52, 56,48,10,65,52,56,48,10,66,69,56,48,10,56,52,56, 48,10,56,52,56,48,10,56,52,56,48,10,56,52,56,48, 10,56,48,56,48,10,52,49,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,52,55,56,10,69,78,67,79,68,73,78, 71,32,57,51,51,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,52,49,48,48,10,56,48,56,48,10,66, 69,56,48,10,65,48,56,48,10,65,48,56,48,10,65,48, 56,48,10,66,67,56,48,10,56,50,56,48,10,56,50,56, 48,10,56,50,56,48,10,66,67,56,48,10,56,48,56,48, 10,52,49,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 52,55,57,10,69,78,67,79,68,73,78,71,32,57,51,51, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 52,49,48,48,10,56,48,56,48,10,57,67,56,48,10,65, 48,56,48,10,65,48,56,48,10,65,48,56,48,10,66,67, 56,48,10,65,50,56,48,10,65,50,56,48,10,65,50,56, 48,10,57,67,56,48,10,56,48,56,48,10,52,49,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,55,65,10,69, 78,67,79,68,73,78,71,32,57,51,51,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,52,49,48,48,10, 56,48,56,48,10,66,69,56,48,10,56,50,56,48,10,56, 50,56,48,10,56,52,56,48,10,56,52,56,48,10,56,56, 56,48,10,56,56,56,48,10,56,56,56,48,10,56,56,56, 48,10,56,48,56,48,10,52,49,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,52,55,66,10,69,78,67,79,68,73, 78,71,32,57,51,51,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,52,49,48,48,10,56,48,56,48,10, 57,67,56,48,10,65,50,56,48,10,65,50,56,48,10,65, 50,56,48,10,57,67,56,48,10,65,50,56,48,10,65,50, 56,48,10,65,50,56,48,10,57,67,56,48,10,56,48,56, 48,10,52,49,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,52,55,67,10,69,78,67,79,68,73,78,71,32,57,51, 52,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,52,49,48,48,10,56,48,56,48,10,57,67,56,48,10, 65,50,56,48,10,65,50,56,48,10,65,50,56,48,10,57, 69,56,48,10,56,50,56,48,10,56,50,56,48,10,56,50, 56,48,10,57,67,56,48,10,56,48,56,48,10,52,49,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,52,55,68,10, 69,78,67,79,68,73,78,71,32,57,51,52,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,52,48,56,48, 10,56,48,52,48,10,57,50,52,48,10,66,53,52,48,10, 57,53,52,48,10,57,53,52,48,10,57,53,52,48,10,57, 53,52,48,10,57,53,52,48,10,57,53,52,48,10,66,65, 52,48,10,56,48,52,48,10,52,48,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,55,69,10,69,78,67,79,68, 73,78,71,32,57,51,52,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,52,48,56,48,10,56,48,52,48, 10,57,50,52,48,10,66,54,52,48,10,57,50,52,48,10, 57,50,52,48,10,57,50,52,48,10,57,50,52,48,10,57, 50,52,48,10,57,50,52,48,10,66,70,52,48,10,56,48, 52,48,10,52,48,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,52,55,70,10,69,78,67,79,68,73,78,71,32,57, 51,52,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,52,48,56,48,10,56,48,52,48,10,57,54,52,48, 10,66,49,52,48,10,57,49,52,48,10,57,49,52,48,10, 57,50,52,48,10,57,52,52,48,10,57,52,52,48,10,57, 52,52,48,10,66,70,52,48,10,56,48,52,48,10,52,48, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,52,56,48, 10,69,78,67,79,68,73,78,71,32,57,51,52,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,52,48,56, 48,10,56,48,52,48,10,57,54,52,48,10,66,49,52,48, 10,57,49,52,48,10,57,49,52,48,10,57,50,52,48,10, 57,49,52,48,10,57,49,52,48,10,57,49,52,48,10,66, 69,52,48,10,56,48,52,48,10,52,48,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,52,56,49,10,69,78,67,79, 68,73,78,71,32,57,51,52,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,52,48,56,48,10,56,48,52, 48,10,57,52,52,48,10,66,52,52,48,10,57,53,52,48, 10,57,53,52,48,10,57,55,52,48,10,57,49,52,48,10, 57,49,52,48,10,57,49,52,48,10,66,57,52,48,10,56, 48,52,48,10,52,48,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,56,50,10,69,78,67,79,68,73,78,71,32, 57,51,52,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,52,48,56,48,10,56,48,52,48,10,57,55,52, 48,10,66,52,52,48,10,57,52,52,48,10,57,52,52,48, 10,57,54,52,48,10,57,49,52,48,10,57,49,52,48,10, 57,49,52,48,10,66,69,52,48,10,56,48,52,48,10,52, 48,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,52,56, 51,10,69,78,67,79,68,73,78,71,32,57,51,52,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,52,48, 56,48,10,56,48,52,48,10,57,51,52,48,10,66,52,52, 48,10,57,52,52,48,10,57,52,52,48,10,57,54,52,48, 10,57,53,52,48,10,57,53,52,48,10,57,53,52,48,10, 66,65,52,48,10,56,48,52,48,10,52,48,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,52,56,52,10,69,78,67, 79,68,73,78,71,32,57,51,52,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,52,48,56,48,10,56,48, 52,48,10,57,55,52,48,10,66,49,52,48,10,57,49,52, 48,10,57,49,52,48,10,57,50,52,48,10,57,50,52,48, 10,57,50,52,48,10,57,50,52,48,10,66,65,52,48,10, 56,48,52,48,10,52,48,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,52,56,53,10,69,78,67,79,68,73,78,71, 32,57,51,52,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,52,48,56,48,10,56,48,52,48,10,57,50, 52,48,10,66,53,52,48,10,57,53,52,48,10,57,53,52, 48,10,57,50,52,48,10,57,53,52,48,10,57,53,52,48, 10,57,53,52,48,10,66,65,52,48,10,56,48,52,48,10, 52,48,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 56,54,10,69,78,67,79,68,73,78,71,32,57,51,53,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,52, 48,56,48,10,56,48,52,48,10,57,50,52,48,10,66,53, 52,48,10,57,53,52,48,10,57,53,52,48,10,57,51,52, 48,10,57,49,52,48,10,57,49,52,48,10,57,49,52,48, 10,66,69,52,48,10,56,48,52,48,10,52,48,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,52,56,55,10,69,78, 67,79,68,73,78,71,32,57,51,53,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,52,48,56,48,10,56, 48,52,48,10,66,50,52,48,10,56,68,52,48,10,56,68, 52,48,10,56,68,52,48,10,57,53,52,48,10,65,53,52, 48,10,65,53,52,48,10,65,53,52,48,10,66,65,52,48, 10,56,48,52,48,10,52,48,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,52,69,65,10,69,78,67,79,68,73,78, 71,32,57,52,53,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,69,48,48,10,52,49,48,48,10,56, 48,56,48,10,57,67,56,48,10,65,50,56,48,10,65,50, 56,48,10,65,50,56,48,10,65,50,56,48,10,65,50,56, 48,10,57,67,56,48,10,56,48,56,48,10,52,49,48,48, 10,51,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 52,69,66,10,69,78,67,79,68,73,78,71,32,57,52,53, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,70,48,48,10,55,70,56,48,10,70,70,67,48,10,69, 68,67,48,10,67,57,67,48,10,69,68,67,48,10,69,68, 67,48,10,69,68,67,48,10,69,68,67,48,10,67,48,67, 48,10,70,70,67,48,10,55,70,56,48,10,51,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,69,67,10,69, 78,67,79,68,73,78,71,32,57,52,53,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,70,48,48,10, 55,70,56,48,10,70,70,67,48,10,69,57,67,48,10,67, 69,67,48,10,69,69,67,48,10,69,68,67,48,10,69,66, 67,48,10,69,66,67,48,10,67,48,67,48,10,70,70,67, 48,10,55,70,56,48,10,51,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,52,69,68,10,69,78,67,79,68,73, 78,71,32,57,52,53,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,70,48,48,10,55,70,56,48,10, 70,70,67,48,10,69,57,67,48,10,67,69,67,48,10,69, 69,67,48,10,69,68,67,48,10,69,69,67,48,10,69,69, 67,48,10,67,49,67,48,10,70,70,67,48,10,55,70,56, 48,10,51,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,52,69,69,10,69,78,67,79,68,73,78,71,32,57,52, 53,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,70,48,48,10,55,70,56,48,10,70,70,67,48,10, 69,66,67,48,10,67,66,67,48,10,69,65,67,48,10,69, 56,67,48,10,69,69,67,48,10,69,69,67,48,10,67,54, 67,48,10,70,70,67,48,10,55,70,56,48,10,51,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,52,69,70,10, 69,78,67,79,68,73,78,71,32,57,52,53,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,70,48,48, 10,55,70,56,48,10,70,70,67,48,10,69,56,67,48,10, 67,66,67,48,10,69,66,67,48,10,69,57,67,48,10,69, 69,67,48,10,69,69,67,48,10,67,49,67,48,10,70,70, 67,48,10,55,70,56,48,10,51,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,70,48,10,69,78,67,79,68, 73,78,71,32,57,52,53,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,70,48,48,10,55,70,56,48, 10,70,70,67,48,10,69,67,67,48,10,67,66,67,48,10, 69,66,67,48,10,69,57,67,48,10,69,65,67,48,10,69, 65,67,48,10,67,53,67,48,10,70,70,67,48,10,55,70, 56,48,10,51,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,52,70,49,10,69,78,67,79,68,73,78,71,32,57, 52,53,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,70,48,48,10,55,70,56,48,10,70,70,67,48, 10,69,56,67,48,10,67,69,67,48,10,69,69,67,48,10, 69,68,67,48,10,69,68,67,48,10,69,68,67,48,10,67, 53,67,48,10,70,70,67,48,10,55,70,56,48,10,51,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,52,70,50, 10,69,78,67,79,68,73,78,71,32,57,52,53,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,70,48, 48,10,55,70,56,48,10,70,70,67,48,10,69,68,67,48, 10,67,65,67,48,10,69,65,67,48,10,69,68,67,48,10, 69,65,67,48,10,69,65,67,48,10,67,53,67,48,10,70, 70,67,48,10,55,70,56,48,10,51,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,52,70,51,10,69,78,67,79, 68,73,78,71,32,57,52,53,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,70,48,48,10,55,70,56, 48,10,70,70,67,48,10,69,68,67,48,10,67,65,67,48, 10,69,65,67,48,10,69,67,67,48,10,69,69,67,48,10, 69,69,67,48,10,67,49,67,48,10,70,70,67,48,10,55, 70,56,48,10,51,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,70,52,10,69,78,67,79,68,73,78,71,32, 57,52,54,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,70,48,48,10,55,70,56,48,10,70,70,67, 48,10,67,68,67,48,10,70,50,67,48,10,70,50,67,48, 10,69,65,67,48,10,68,65,67,48,10,68,65,67,48,10, 67,53,67,48,10,70,70,67,48,10,55,70,56,48,10,51, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,52,70, 70,10,69,78,67,79,68,73,78,71,32,57,52,55,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,69, 48,48,10,55,70,48,48,10,70,70,56,48,10,69,51,56, 48,10,68,68,56,48,10,68,68,56,48,10,68,68,56,48, 10,68,68,56,48,10,68,68,56,48,10,69,51,56,48,10, 70,70,56,48,10,55,70,48,48,10,51,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,83,70,49,48,48,48,48,48,10,69,78, 67,79,68,73,78,71,32,57,52,55,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,70,70,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,48,49,10,69,78,67,79,68,73,78, 71,32,57,52,55,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,70,70,67,48,10,70,70,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,83,70,49,49, 48,48,48,48,10,69,78,67,79,68,73,78,71,32,57,52, 55,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,48,51,10, 69,78,67,79,68,73,78,71,32,57,52,55,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,48,52,10,69,78,67,79,68, 73,78,71,32,57,52,55,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,68,68,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,48,53,10,69,78,67,79,68,73,78,71,32,57, 52,55,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 68,68,56,48,10,68,68,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,48,54, 10,69,78,67,79,68,73,78,71,32,57,52,55,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,48,55,10,69,78,67,79, 68,73,78,71,32,57,52,55,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,48,56,10,69,78,67,79,68,73,78,71,32, 57,52,56,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,66,53,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,48, 57,10,69,78,67,79,68,73,78,71,32,57,52,56,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,66,53,56,48, 10,66,53,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,48,65,10,69,78,67, 79,68,73,78,71,32,57,52,56,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,48, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,48,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,48,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,53,48,66,10,69,78,67,79,68,73,78,71, 32,57,52,56,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,83,70,48,49,48, 48,48,48,10,69,78,67,79,68,73,78,71,32,57,52,56, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,70, 67,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,48,68,10,69, 78,67,79,68,73,78,71,32,57,52,56,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,70,67,48,10,48,70, 67,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,48,69,10,69,78,67,79,68,73, 78,71,32,57,52,56,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,70,67,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,48,70,10,69,78,67,79,68,73,78,71,32,57,52, 56,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 70,67,48,10,48,70,67,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,83,70,48,51,48,48,48,48, 10,69,78,67,79,68,73,78,71,32,57,52,56,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,49,49,10,69,78,67,79, 68,73,78,71,32,57,52,56,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,70,56,48,48,10,70,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,49,50,10,69,78,67,79,68,73,78,71,32, 57,52,57,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,49, 51,10,69,78,67,79,68,73,78,71,32,57,52,57,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,70,67,48,48, 10,70,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,83,70,48,50,48,48,48,48,10,69,78, 67,79,68,73,78,71,32,57,52,57,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,70,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,49,53,10,69,78,67,79,68,73,78, 71,32,57,52,57,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,70,67,48,10,48,70,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,49,54,10,69,78,67,79,68,73,78,71,32,57,52,57, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,70, 67,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,49,55,10,69, 78,67,79,68,73,78,71,32,57,52,57,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,70,67,48,10,48,70, 67,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,83,70,48,52,48,48,48,48,10,69,78,67,79,68, 73,78,71,32,57,52,57,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,70,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,49,57,10,69,78,67,79,68,73,78,71,32,57, 52,57,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 70,56,48,48,10,70,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,49,65, 10,69,78,67,79,68,73,78,71,32,57,52,57,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,70,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,49,66,10,69,78,67,79, 68,73,78,71,32,57,52,57,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,70,67,48,48,10,70,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,83, 70,48,56,48,48,48,48,10,69,78,67,79,68,73,78,71, 32,57,53,48,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,70,67,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 49,68,10,69,78,67,79,68,73,78,71,32,57,53,48,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,70,67, 48,10,48,70,67,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,49,69,10,69,78, 67,79,68,73,78,71,32,57,53,48,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,70,67,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,49,70,10,69,78,67,79,68,73,78, 71,32,57,53,48,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,70,67,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,50,48,10,69,78,67,79,68,73,78,71,32,57,53,48, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,70, 67,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,50,49,10,69, 78,67,79,68,73,78,71,32,57,53,48,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,70,67,48,10,48,70, 67,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,50,50,10,69,78,67,79,68,73, 78,71,32,57,53,48,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,70,67,48,10,48,70,67,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,50,51,10,69,78,67,79,68,73,78,71,32,57,53, 48,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 70,67,48,10,48,70,67,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,83,70,48,57,48,48,48,48, 10,69,78,67,79,68,73,78,71,32,57,53,48,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,70,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,50,53,10,69,78,67,79, 68,73,78,71,32,57,53,48,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,70,56,48,48,10,70,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,50,54,10,69,78,67,79,68,73,78,71,32, 57,53,49,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,70,67,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,50, 55,10,69,78,67,79,68,73,78,71,32,57,53,49,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,70,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,50,56,10,69,78,67, 79,68,73,78,71,32,57,53,49,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,53,50,57,10,69,78,67,79,68,73,78,71, 32,57,53,49,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,70,67,48,48,10,70,67,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 50,65,10,69,78,67,79,68,73,78,71,32,57,53,49,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,70,67,48, 48,10,70,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,50,66,10,69,78, 67,79,68,73,78,71,32,57,53,49,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,70,67,48,48,10,70,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,83,70,48,54,48,48,48,48,10,69,78,67,79,68,73, 78,71,32,57,53,49,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,70,70,67,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,50,68,10,69,78,67,79,68,73,78,71,32,57,53, 49,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 70,67,48,10,70,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,50,69,10, 69,78,67,79,68,73,78,71,32,57,53,49,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,70,70,67,48,10,48, 70,67,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,50,70,10,69,78,67,79,68, 73,78,71,32,57,53,49,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,70,70,67,48,10,70,70,67,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,51,48,10,69,78,67,79,68,73,78,71,32,57, 53,50,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 70,70,67,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,51,49, 10,69,78,67,79,68,73,78,71,32,57,53,50,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,70,67,48,10, 70,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,51,50,10,69,78,67,79, 68,73,78,71,32,57,53,50,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,70,70,67,48,10,48,70,67,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,51,51,10,69,78,67,79,68,73,78,71,32, 57,53,50,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,70,67,48,10,70,70,67,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,83,70,48,55,48,48, 48,48,10,69,78,67,79,68,73,78,71,32,57,53,50,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,70,70,67, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,51,53,10,69,78, 67,79,68,73,78,71,32,57,53,50,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,70,70,67,48,10,70,56,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,51,54,10,69,78,67,79,68,73,78, 71,32,57,53,50,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,70,70,67,48,10,48,70,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,51,55,10,69,78,67,79,68,73,78,71,32,57,53,50, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,70,70, 67,48,10,70,70,67,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,51,56,10,69, 78,67,79,68,73,78,71,32,57,53,50,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,70,70,67,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,51,57,10,69,78,67,79,68,73, 78,71,32,57,53,50,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,70,70,67,48,10,70,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,51,65,10,69,78,67,79,68,73,78,71,32,57,53, 51,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,70, 70,67,48,10,48,70,67,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,51,66,10, 69,78,67,79,68,73,78,71,32,57,53,51,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,70,70,67,48,10,70, 70,67,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,83,70,48,53,48,48,48,48,10,69,78,67,79, 68,73,78,71,32,57,53,51,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,70,70,67,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,51,68,10,69,78,67,79,68,73,78,71,32, 57,53,51,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,70,70,67,48,10,70,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,51, 69,10,69,78,67,79,68,73,78,71,32,57,53,51,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,70,70,67,48, 10,48,70,67,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,51,70,10,69,78,67, 79,68,73,78,71,32,57,53,51,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,70,70,67,48,10,70,70,67,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,53,52,48,10,69,78,67,79,68,73,78,71, 32,57,53,51,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,70,70,67,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 52,49,10,69,78,67,79,68,73,78,71,32,57,53,51,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,70,70,67, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,52,50,10,69,78, 67,79,68,73,78,71,32,57,53,51,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,70,70,67,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,52,51,10,69,78,67,79,68,73,78, 71,32,57,53,51,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,70,70,67,48,10,70,67,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,52,52,10,69,78,67,79,68,73,78,71,32,57,53,52, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,70,70, 67,48,10,48,70,67,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,52,53,10,69, 78,67,79,68,73,78,71,32,57,53,52,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,70,70,67,48,10,70,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,52,54,10,69,78,67,79,68,73, 78,71,32,57,53,52,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,70,70,67,48,10,48,70,67,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,52,55,10,69,78,67,79,68,73,78,71,32,57,53, 52,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,70, 70,67,48,10,70,70,67,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,52,56,10, 69,78,67,79,68,73,78,71,32,57,53,52,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,70,70,67,48,10,70, 70,67,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,52,57,10,69,78,67,79,68, 73,78,71,32,57,53,52,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,70,70,67,48,10,70,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,52,65,10,69,78,67,79,68,73,78,71,32,57, 53,52,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 70,70,67,48,10,48,70,67,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,52,66, 10,69,78,67,79,68,73,78,71,32,57,53,52,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,70,70,67,48,10, 70,70,67,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,52,67,10,69,78,67,79, 68,73,78,71,32,57,53,52,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,70,55,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,52,68,10,69,78,67,79,68,73,78,71,32, 57,53,52,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,55,56,48,10,70,55,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,52, 69,10,69,78,67,79,68,73,78,71,32,57,53,53,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,52,70,10,69,78,67, 79,68,73,78,71,32,57,53,53,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 83,70,52,51,48,48,48,48,10,69,78,67,79,68,73,78, 71,32,57,53,53,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,70,70, 67,48,10,48,48,48,48,10,70,70,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,83,70,50,52, 48,48,48,48,10,69,78,67,79,68,73,78,71,32,57,53, 53,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,49,50,48,48,10,49,50,48,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,49,50, 48,48,10,49,50,48,48,10,49,50,48,48,10,49,50,48, 48,10,49,50,48,48,10,49,50,48,48,10,49,50,48,48, 10,49,50,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,83,70,53,49,48,48,48,48, 10,69,78,67,79,68,73,78,71,32,57,53,53,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,70,67,48,10,48,56,48,48,10, 48,70,67,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,83,70,53,50,48,48,48,48,10,69,78,67, 79,68,73,78,71,32,57,53,53,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,70,67,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 83,70,51,57,48,48,48,48,10,69,78,67,79,68,73,78, 71,32,57,53,53,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,70, 67,48,10,49,48,48,48,10,49,51,67,48,10,49,50,48, 48,10,49,50,48,48,10,49,50,48,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,83,70,50,50, 48,48,48,48,10,69,78,67,79,68,73,78,71,32,57,53, 53,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,70,56,48,48,10,48, 56,48,48,10,70,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,83,70,50,49,48,48,48,48, 10,69,78,67,79,68,73,78,71,32,57,53,53,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,69,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,49,50, 48,48,10,49,50,48,48,10,49,50,48,48,10,49,50,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,83,70,50,53,48,48,48,48,10,69,78,67, 79,68,73,78,71,32,57,53,53,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,70,69,48,48,10,48,50,48,48,10,70,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 83,70,53,48,48,48,48,48,10,69,78,67,79,68,73,78, 71,32,57,53,54,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,70, 67,48,10,48,56,48,48,10,48,70,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,83,70,52,57, 48,48,48,48,10,69,78,67,79,68,73,78,71,32,57,53, 54,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,49,50,48,48,10,49,50,48,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,49, 70,67,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,83,70,51,56,48,48,48,48, 10,69,78,67,79,68,73,78,71,32,57,53,54,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,49,50, 48,48,10,49,50,48,48,10,49,50,48,48,10,49,50,48, 48,10,49,50,48,48,10,49,50,48,48,10,49,50,48,48, 10,49,50,48,48,10,49,51,67,48,10,49,48,48,48,10, 49,70,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,83,70,50,56,48,48,48,48,10,69,78,67, 79,68,73,78,71,32,57,53,54,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,70,56,48,48,10,48,56,48,48,10,70,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 83,70,50,55,48,48,48,48,10,69,78,67,79,68,73,78, 71,32,57,53,54,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,49,50, 48,48,10,70,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,83,70,50,54, 48,48,48,48,10,69,78,67,79,68,73,78,71,32,57,53, 54,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,49,50,48,48,10,49,50,48,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,70,50,48,48,10,48, 50,48,48,10,70,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,83,70,51,54,48,48,48,48, 10,69,78,67,79,68,73,78,71,32,57,53,54,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,70,67,48,10,48,56,48,48,10, 48,70,67,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,83,70,51,55,48,48,48,48,10,69,78,67, 79,68,73,78,71,32,57,53,54,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,49,50, 48,48,10,49,50,48,48,10,49,50,48,48,10,49,50,48, 48,10,49,50,48,48,10,49,51,67,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 83,70,52,50,48,48,48,48,10,69,78,67,79,68,73,78, 71,32,57,53,54,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,49,51, 67,48,10,49,48,48,48,10,49,51,67,48,10,49,50,48, 48,10,49,50,48,48,10,49,50,48,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,83,70,49,57, 48,48,48,48,10,69,78,67,79,68,73,78,71,32,57,53, 54,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,70,56,48,48,10,48, 56,48,48,10,70,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,83,70,50,48,48,48,48,48, 10,69,78,67,79,68,73,78,71,32,57,53,55,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,49,50, 48,48,10,49,50,48,48,10,49,50,48,48,10,49,50,48, 48,10,49,50,48,48,10,49,50,48,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,70,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,49,50, 48,48,10,49,50,48,48,10,49,50,48,48,10,49,50,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,83,70,50,51,48,48,48,48,10,69,78,67, 79,68,73,78,71,32,57,53,55,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,49,50, 48,48,10,49,50,48,48,10,49,50,48,48,10,49,50,48, 48,10,70,50,48,48,10,48,50,48,48,10,70,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 83,70,52,55,48,48,48,48,10,69,78,67,79,68,73,78, 71,32,57,53,55,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,70,70, 67,48,10,48,48,48,48,10,70,70,67,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,83,70,52,56, 48,48,48,48,10,69,78,67,79,68,73,78,71,32,57,53, 55,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 70,67,48,10,49,50,48,48,10,49,50,48,48,10,49,50, 48,48,10,49,50,48,48,10,49,50,48,48,10,49,50,48, 48,10,49,50,48,48,10,49,50,48,48,10,49,50,48,48, 10,49,50,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,83,70,52,49,48,48,48,48, 10,69,78,67,79,68,73,78,71,32,57,53,55,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,70,70,67,48,10,48,48,48,48,10, 70,51,67,48,10,49,50,48,48,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,49,50, 48,48,10,49,50,48,48,10,49,50,48,48,10,49,50,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,83,70,52,53,48,48,48,48,10,69,78,67, 79,68,73,78,71,32,57,53,55,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,70,70,67,48,10,48,48,48,48,10,70,70,67,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 83,70,52,54,48,48,48,48,10,69,78,67,79,68,73,78, 71,32,57,53,55,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,49,50, 48,48,10,70,70,67,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,83,70,52,48, 48,48,48,48,10,69,78,67,79,68,73,78,71,32,57,53, 55,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,49,50,48,48,10,49,50,48,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,70,51,67,48,10,48, 48,48,48,10,70,70,67,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,83,70,53,52,48,48,48,48, 10,69,78,67,79,68,73,78,71,32,57,53,55,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,70,70,67,48,10,48,56,48,48,10, 70,70,67,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,83,70,53,51,48,48,48,48,10,69,78,67, 79,68,73,78,71,32,57,53,55,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,49,50, 48,48,10,49,50,48,48,10,49,50,48,48,10,49,50,48, 48,10,49,50,48,48,10,70,70,67,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 83,70,52,52,48,48,48,48,10,69,78,67,79,68,73,78, 71,32,57,53,56,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,70,51, 67,48,10,48,48,48,48,10,70,51,67,48,10,49,50,48, 48,10,49,50,48,48,10,49,50,48,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,54,68,10,69,78,67,79,68,73,78,71,32,57,53,56, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 67,48,10,48,51,48,48,10,48,52,48,48,10,48,52,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,54,69,10,69, 78,67,79,68,73,78,71,32,57,53,56,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,56,48,48,48,10,54,48, 48,48,10,49,48,48,48,10,49,48,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,54,70,10,69,78,67,79,68,73, 78,71,32,57,53,56,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,49,48,48,48,10,49,48,48,48,10,54, 48,48,48,10,56,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,55,48,10,69,78,67,79,68,73,78,71,32,57,53, 56,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,52,48,48,10,48,52,48,48,10,48,51,48,48,10,48, 48,67,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,55,49,10, 69,78,67,79,68,73,78,71,32,57,53,56,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,52, 48,10,48,48,52,48,10,48,48,56,48,10,48,48,56,48, 10,48,49,48,48,10,48,49,48,48,10,48,50,48,48,10, 48,50,48,48,10,48,52,48,48,10,48,52,48,48,10,48, 56,48,48,10,48,56,48,48,10,49,48,48,48,10,49,48, 48,48,10,50,48,48,48,10,50,48,48,48,10,52,48,48, 48,10,52,48,48,48,10,56,48,48,48,10,56,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,55,50,10,69,78,67,79,68, 73,78,71,32,57,53,56,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,56,48,48,48,10,56,48,48, 48,10,52,48,48,48,10,52,48,48,48,10,50,48,48,48, 10,50,48,48,48,10,49,48,48,48,10,49,48,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,52,48,48,10,48, 52,48,48,10,48,50,48,48,10,48,50,48,48,10,48,49, 48,48,10,48,49,48,48,10,48,48,56,48,10,48,48,56, 48,10,48,48,52,48,10,48,48,52,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,55,51,10,69,78,67,79,68,73,78,71,32,57, 53,56,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,56,48,52,48,10,56,48,52,48,10,52,48,56, 48,10,52,48,56,48,10,50,49,48,48,10,50,49,48,48, 10,49,50,48,48,10,49,50,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,49, 50,48,48,10,49,50,48,48,10,50,49,48,48,10,50,49, 48,48,10,52,48,56,48,10,52,48,56,48,10,56,48,52, 48,10,56,48,52,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,55,52, 10,69,78,67,79,68,73,78,71,32,57,53,56,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,56,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,55,53,10,69,78,67,79, 68,73,78,71,32,57,53,56,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,55,54,10,69,78,67,79,68,73,78,71,32, 57,53,57,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,55,67,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,55, 55,10,69,78,67,79,68,73,78,71,32,57,53,57,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,55,56,10,69,78,67, 79,68,73,78,71,32,57,53,57,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,70,67,48,48,10,70,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,53,55,57,10,69,78,67,79,68,73,78,71, 32,57,53,57,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 55,65,10,69,78,67,79,68,73,78,71,32,57,53,57,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,70,67, 48,10,48,70,67,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,55,66,10,69,78, 67,79,68,73,78,71,32,57,53,57,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,55,67,10,69,78,67,79,68,73,78, 71,32,57,53,57,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,70,70,67,48,10,48,70,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,55,68,10,69,78,67,79,68,73,78,71,32,57,53,57, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,55,69,10,69, 78,67,79,68,73,78,71,32,57,53,57,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,70,70,67,48,10,70,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,55,70,10,69,78,67,79,68,73, 78,71,32,57,53,57,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,112,98, 108,111,99,107,10,69,78,67,79,68,73,78,71,32,57,54, 48,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,70,70,67,48,10,70,70,67,48,10,70,70,67,48, 10,70,70,67,48,10,70,70,67,48,10,70,70,67,48,10, 70,70,67,48,10,70,70,67,48,10,70,70,67,48,10,70, 70,67,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,56,49,10, 69,78,67,79,68,73,78,71,32,57,54,48,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,70,70,67,48,10,70,70,67,48,10,70,70,67,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,56,50,10,69,78,67,79,68, 73,78,71,32,57,54,48,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,70,70,67,48,10,70,70,67,48,10,70,70,67, 48,10,70,70,67,48,10,70,70,67,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,56,51,10,69,78,67,79,68,73,78,71,32,57, 54,48,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 70,67,48,10,70,70,67,48,10,70,70,67,48,10,70,70, 67,48,10,70,70,67,48,10,70,70,67,48,10,70,70,67, 48,10,70,70,67,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,100,110,98,108,111,99,107, 10,69,78,67,79,68,73,78,71,32,57,54,48,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 70,70,67,48,10,70,70,67,48,10,70,70,67,48,10,70, 70,67,48,10,70,70,67,48,10,70,70,67,48,10,70,70, 67,48,10,70,70,67,48,10,70,70,67,48,10,70,70,67, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,56,53,10,69,78,67,79, 68,73,78,71,32,57,54,48,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,70,67,48,10,70,70,67,48,10,70,70,67,48,10, 70,70,67,48,10,70,70,67,48,10,70,70,67,48,10,70, 70,67,48,10,70,70,67,48,10,70,70,67,48,10,70,70, 67,48,10,70,70,67,48,10,70,70,67,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,56,54,10,69,78,67,79,68,73,78,71,32, 57,54,48,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,70,70,67, 48,10,70,70,67,48,10,70,70,67,48,10,70,70,67,48, 10,70,70,67,48,10,70,70,67,48,10,70,70,67,48,10, 70,70,67,48,10,70,70,67,48,10,70,70,67,48,10,70, 70,67,48,10,70,70,67,48,10,70,70,67,48,10,70,70, 67,48,10,70,70,67,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,56, 55,10,69,78,67,79,68,73,78,71,32,57,54,48,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,70,70, 67,48,10,70,70,67,48,10,70,70,67,48,10,70,70,67, 48,10,70,70,67,48,10,70,70,67,48,10,70,70,67,48, 10,70,70,67,48,10,70,70,67,48,10,70,70,67,48,10, 70,70,67,48,10,70,70,67,48,10,70,70,67,48,10,70, 70,67,48,10,70,70,67,48,10,70,70,67,48,10,70,70, 67,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,98,108,111,99,107,10,69,78,67,79,68, 73,78,71,32,57,54,48,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,70,70,67,48,10,70,70,67, 48,10,70,70,67,48,10,70,70,67,48,10,70,70,67,48, 10,70,70,67,48,10,70,70,67,48,10,70,70,67,48,10, 70,70,67,48,10,70,70,67,48,10,70,70,67,48,10,70, 70,67,48,10,70,70,67,48,10,70,70,67,48,10,70,70, 67,48,10,70,70,67,48,10,70,70,67,48,10,70,70,67, 48,10,70,70,67,48,10,70,70,67,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,56,57,10,69,78,67,79,68,73,78,71,32,57, 54,48,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,70,70,56,48,10,70,70,56,48,10,70,70,56, 48,10,70,70,56,48,10,70,70,56,48,10,70,70,56,48, 10,70,70,56,48,10,70,70,56,48,10,70,70,56,48,10, 70,70,56,48,10,70,70,56,48,10,70,70,56,48,10,70, 70,56,48,10,70,70,56,48,10,70,70,56,48,10,70,70, 56,48,10,70,70,56,48,10,70,70,56,48,10,70,70,56, 48,10,70,70,56,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,56,65, 10,69,78,67,79,68,73,78,71,32,57,54,49,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,70,69, 48,48,10,70,69,48,48,10,70,69,48,48,10,70,69,48, 48,10,70,69,48,48,10,70,69,48,48,10,70,69,48,48, 10,70,69,48,48,10,70,69,48,48,10,70,69,48,48,10, 70,69,48,48,10,70,69,48,48,10,70,69,48,48,10,70, 69,48,48,10,70,69,48,48,10,70,69,48,48,10,70,69, 48,48,10,70,69,48,48,10,70,69,48,48,10,70,69,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,56,66,10,69,78,67,79, 68,73,78,71,32,57,54,49,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,70,67,48,48,10,70,67, 48,48,10,70,67,48,48,10,70,67,48,48,10,70,67,48, 48,10,70,67,48,48,10,70,67,48,48,10,70,67,48,48, 10,70,67,48,48,10,70,67,48,48,10,70,67,48,48,10, 70,67,48,48,10,70,67,48,48,10,70,67,48,48,10,70, 67,48,48,10,70,67,48,48,10,70,67,48,48,10,70,67, 48,48,10,70,67,48,48,10,70,67,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,108, 102,98,108,111,99,107,10,69,78,67,79,68,73,78,71,32, 57,54,49,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,70,56,48,48,10,70,56,48,48,10,70,56, 48,48,10,70,56,48,48,10,70,56,48,48,10,70,56,48, 48,10,70,56,48,48,10,70,56,48,48,10,70,56,48,48, 10,70,56,48,48,10,70,56,48,48,10,70,56,48,48,10, 70,56,48,48,10,70,56,48,48,10,70,56,48,48,10,70, 56,48,48,10,70,56,48,48,10,70,56,48,48,10,70,56, 48,48,10,70,56,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,56, 68,10,69,78,67,79,68,73,78,71,32,57,54,49,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,70, 48,48,48,10,70,48,48,48,10,70,48,48,48,10,70,48, 48,48,10,70,48,48,48,10,70,48,48,48,10,70,48,48, 48,10,70,48,48,48,10,70,48,48,48,10,70,48,48,48, 10,70,48,48,48,10,70,48,48,48,10,70,48,48,48,10, 70,48,48,48,10,70,48,48,48,10,70,48,48,48,10,70, 48,48,48,10,70,48,48,48,10,70,48,48,48,10,70,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,56,69,10,69,78,67, 79,68,73,78,71,32,57,54,49,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,69,48,48,48,10,69, 48,48,48,10,69,48,48,48,10,69,48,48,48,10,69,48, 48,48,10,69,48,48,48,10,69,48,48,48,10,69,48,48, 48,10,69,48,48,48,10,69,48,48,48,10,69,48,48,48, 10,69,48,48,48,10,69,48,48,48,10,69,48,48,48,10, 69,48,48,48,10,69,48,48,48,10,69,48,48,48,10,69, 48,48,48,10,69,48,48,48,10,69,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,53,56,70,10,69,78,67,79,68,73,78,71, 32,57,54,49,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,56,48,48,48,10,56,48,48,48,10,56, 48,48,48,10,56,48,48,48,10,56,48,48,48,10,56,48, 48,48,10,56,48,48,48,10,56,48,48,48,10,56,48,48, 48,10,56,48,48,48,10,56,48,48,48,10,56,48,48,48, 10,56,48,48,48,10,56,48,48,48,10,56,48,48,48,10, 56,48,48,48,10,56,48,48,48,10,56,48,48,48,10,56, 48,48,48,10,56,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,114,116,98,108,111, 99,107,10,69,78,67,79,68,73,78,71,32,57,54,49,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,55,67,48,10,48,55,67,48,10,48,55,67,48,10,48, 55,67,48,10,48,55,67,48,10,48,55,67,48,10,48,55, 67,48,10,48,55,67,48,10,48,55,67,48,10,48,55,67, 48,10,48,55,67,48,10,48,55,67,48,10,48,55,67,48, 10,48,55,67,48,10,48,55,67,48,10,48,55,67,48,10, 48,55,67,48,10,48,55,67,48,10,48,55,67,48,10,48, 55,67,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,108,116,115,104,97,100,101,10,69,78, 67,79,68,73,78,71,32,57,54,49,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,53,53,52,48,10, 48,48,48,48,10,65,65,56,48,10,48,48,48,48,10,53, 53,52,48,10,48,48,48,48,10,65,65,56,48,10,48,48, 48,48,10,53,53,52,48,10,48,48,48,48,10,65,65,56, 48,10,48,48,48,48,10,53,53,52,48,10,48,48,48,48, 10,65,65,56,48,10,48,48,48,48,10,53,53,52,48,10, 48,48,48,48,10,65,65,56,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,115,104,97,100,101,10,69,78,67,79,68,73,78,71,32, 57,54,49,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,53,53,52,48,10,65,65,56,48,10,53,53, 52,48,10,65,65,56,48,10,53,53,52,48,10,65,65,56, 48,10,53,53,52,48,10,65,65,56,48,10,53,53,52,48, 10,65,65,56,48,10,53,53,52,48,10,65,65,56,48,10, 53,53,52,48,10,65,65,56,48,10,53,53,52,48,10,65, 65,56,48,10,53,53,52,48,10,65,65,56,48,10,53,53, 52,48,10,65,65,56,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,100,107,115,104,97,100, 101,10,69,78,67,79,68,73,78,71,32,57,54,49,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,53, 53,52,48,10,70,70,67,48,10,65,65,56,48,10,70,70, 67,48,10,53,53,52,48,10,70,70,67,48,10,65,65,56, 48,10,70,70,67,48,10,53,53,52,48,10,70,70,67,48, 10,65,65,56,48,10,70,70,67,48,10,53,53,52,48,10, 70,70,67,48,10,65,65,56,48,10,70,70,67,48,10,53, 53,52,48,10,70,70,67,48,10,65,65,56,48,10,70,70, 67,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,57,52,10,69,78,67, 79,68,73,78,71,32,57,54,50,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,70,70,67,48,10,70, 70,67,48,10,70,70,67,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,53,57,53,10,69,78,67,79,68,73,78,71, 32,57,54,50,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,52,48,10,48,48,52,48,10,48, 48,52,48,10,48,48,52,48,10,48,48,52,48,10,48,48, 52,48,10,48,48,52,48,10,48,48,52,48,10,48,48,52, 48,10,48,48,52,48,10,48,48,52,48,10,48,48,52,48, 10,48,48,52,48,10,48,48,52,48,10,48,48,52,48,10, 48,48,52,48,10,48,48,52,48,10,48,48,52,48,10,48, 48,52,48,10,48,48,52,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 57,54,10,69,78,67,79,68,73,78,71,32,57,54,50,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,70,56,48,48,10,70,56,48,48,10,70,56,48,48, 10,70,56,48,48,10,70,56,48,48,10,70,56,48,48,10, 70,56,48,48,10,70,56,48,48,10,70,56,48,48,10,70, 56,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,57,55,10,69,78, 67,79,68,73,78,71,32,57,54,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,55,67, 48,10,48,55,67,48,10,48,55,67,48,10,48,55,67,48, 10,48,55,67,48,10,48,55,67,48,10,48,55,67,48,10, 48,55,67,48,10,48,55,67,48,10,48,55,67,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,57,56,10,69,78,67,79,68,73,78, 71,32,57,54,50,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,70,56,48,48,10,70,56,48,48,10, 70,56,48,48,10,70,56,48,48,10,70,56,48,48,10,70, 56,48,48,10,70,56,48,48,10,70,56,48,48,10,70,56, 48,48,10,70,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,57,57,10,69,78,67,79,68,73,78,71,32,57,54,50, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,70,56,48,48,10,70,56,48,48,10,70,56,48,48,10, 70,56,48,48,10,70,56,48,48,10,70,56,48,48,10,70, 56,48,48,10,70,56,48,48,10,70,56,48,48,10,70,56, 48,48,10,70,70,67,48,10,70,70,67,48,10,70,70,67, 48,10,70,70,67,48,10,70,70,67,48,10,70,70,67,48, 10,70,70,67,48,10,70,70,67,48,10,70,70,67,48,10, 70,70,67,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,57,65,10,69, 78,67,79,68,73,78,71,32,57,54,50,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,70,56,48,48, 10,70,56,48,48,10,70,56,48,48,10,70,56,48,48,10, 70,56,48,48,10,70,56,48,48,10,70,56,48,48,10,70, 56,48,48,10,70,56,48,48,10,70,56,48,48,10,48,55, 67,48,10,48,55,67,48,10,48,55,67,48,10,48,55,67, 48,10,48,55,67,48,10,48,55,67,48,10,48,55,67,48, 10,48,55,67,48,10,48,55,67,48,10,48,55,67,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,57,66,10,69,78,67,79,68,73, 78,71,32,57,54,50,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,70,70,67,48,10,70,70,67,48, 10,70,70,67,48,10,70,70,67,48,10,70,70,67,48,10, 70,70,67,48,10,70,70,67,48,10,70,70,67,48,10,70, 70,67,48,10,70,70,67,48,10,70,56,48,48,10,70,56, 48,48,10,70,56,48,48,10,70,56,48,48,10,70,56,48, 48,10,70,56,48,48,10,70,56,48,48,10,70,56,48,48, 10,70,56,48,48,10,70,56,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,57,67,10,69,78,67,79,68,73,78,71,32,57,54, 50,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,70,70,67,48,10,70,70,67,48,10,70,70,67,48, 10,70,70,67,48,10,70,70,67,48,10,70,70,67,48,10, 70,70,67,48,10,70,70,67,48,10,70,70,67,48,10,70, 70,67,48,10,48,55,67,48,10,48,55,67,48,10,48,55, 67,48,10,48,55,67,48,10,48,55,67,48,10,48,55,67, 48,10,48,55,67,48,10,48,55,67,48,10,48,55,67,48, 10,48,55,67,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,57,68,10, 69,78,67,79,68,73,78,71,32,57,54,50,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,55,67, 48,10,48,55,67,48,10,48,55,67,48,10,48,55,67,48, 10,48,55,67,48,10,48,55,67,48,10,48,55,67,48,10, 48,55,67,48,10,48,55,67,48,10,48,55,67,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,57,69,10,69,78,67,79,68, 73,78,71,32,57,54,51,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,55,67,48,10,48,55,67, 48,10,48,55,67,48,10,48,55,67,48,10,48,55,67,48, 10,48,55,67,48,10,48,55,67,48,10,48,55,67,48,10, 48,55,67,48,10,48,55,67,48,10,70,56,48,48,10,70, 56,48,48,10,70,56,48,48,10,70,56,48,48,10,70,56, 48,48,10,70,56,48,48,10,70,56,48,48,10,70,56,48, 48,10,70,56,48,48,10,70,56,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,57,70,10,69,78,67,79,68,73,78,71,32,57, 54,51,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,55,67,48,10,48,55,67,48,10,48,55,67, 48,10,48,55,67,48,10,48,55,67,48,10,48,55,67,48, 10,48,55,67,48,10,48,55,67,48,10,48,55,67,48,10, 48,55,67,48,10,70,70,67,48,10,70,70,67,48,10,70, 70,67,48,10,70,70,67,48,10,70,70,67,48,10,70,70, 67,48,10,70,70,67,48,10,70,70,67,48,10,70,70,67, 48,10,70,70,67,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,102,105,108,108,101,100,98, 111,120,10,69,78,67,79,68,73,78,71,32,57,54,51,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,55,70,56,48,10,55,70,56, 48,10,55,70,56,48,10,55,70,56,48,10,55,70,56,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,72,50,50,48,55,51,10,69,78,67, 79,68,73,78,71,32,57,54,51,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,52,48,56,48,10,52,48,56,48,10,52,48,56,48, 10,52,48,56,48,10,52,48,56,48,10,52,48,56,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,53,65,50,10,69,78,67,79,68,73,78,71, 32,57,54,51,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,70,48,48,10,52,48,56, 48,10,52,48,56,48,10,52,48,56,48,10,52,48,56,48, 10,52,48,56,48,10,52,48,56,48,10,51,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 65,51,10,69,78,67,79,68,73,78,71,32,57,54,51,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,52,48,56,48,10,53,69,56, 48,10,53,69,56,48,10,53,69,56,48,10,53,69,56,48, 10,52,48,56,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,65,52,10,69,78, 67,79,68,73,78,71,32,57,54,51,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,70,70, 56,48,10,56,48,56,48,10,70,70,56,48,10,56,48,56, 48,10,70,70,56,48,10,56,48,56,48,10,70,70,56,48, 10,56,48,56,48,10,70,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,65,53,10,69,78,67,79,68,73,78, 71,32,57,54,51,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,70,70,56,48,10,65,65, 56,48,10,65,65,56,48,10,65,65,56,48,10,65,65,56, 48,10,65,65,56,48,10,65,65,56,48,10,65,65,56,48, 10,70,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,65,54,10,69,78,67,79,68,73,78,71,32,57,54,51, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,70,70,56,48,10,65,65,56,48,10,70,70, 56,48,10,65,65,56,48,10,70,70,56,48,10,65,65,56, 48,10,70,70,56,48,10,65,65,56,48,10,70,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,65,55,10,69, 78,67,79,68,73,78,71,32,57,54,51,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,54,52,56,48,10,53,50,56,48,10,52,57, 56,48,10,54,52,56,48,10,53,50,56,48,10,52,57,56, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,65,56,10,69,78,67,79,68,73, 78,71,32,57,54,52,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,52, 57,56,48,10,53,50,56,48,10,54,52,56,48,10,52,57, 56,48,10,53,50,56,48,10,54,52,56,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,65,57,10,69,78,67,79,68,73,78,71,32,57,54, 52,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,53,53,56,48,10,54, 50,56,48,10,53,53,56,48,10,52,56,56,48,10,53,53, 56,48,10,54,50,56,48,10,55,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,72,49,56,53,52,51,10,69, 78,67,79,68,73,78,71,32,57,54,52,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,69,48,48,10,49,69, 48,48,10,49,69,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,72,49,56,53,53,49,10,69,78,67,79,68,73,78, 71,32,57,54,52,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,69,48,48,10,49,50,48,48,10,49,50,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,102,105,108,108, 101,100,114,101,99,116,10,69,78,67,79,68,73,78,71,32, 57,54,52,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,55,70,56,48, 10,55,70,56,48,10,55,70,56,48,10,55,70,56,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,65, 68,10,69,78,67,79,68,73,78,71,32,57,54,52,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,52,48,56,48,10,52,48,56,48, 10,52,48,56,48,10,52,48,56,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,65,69,10,69,78,67, 79,68,73,78,71,32,57,54,52,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,70,48,48,10,51,70, 48,48,10,51,70,48,48,10,51,70,48,48,10,51,70,48, 48,10,51,70,48,48,10,51,70,48,48,10,51,70,48,48, 10,51,70,48,48,10,51,70,48,48,10,51,70,48,48,10, 51,70,48,48,10,51,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,53,65,70,10,69,78,67,79,68,73,78,71, 32,57,54,52,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,70,48,48,10,50,49,48,48,10,50,49, 48,48,10,50,49,48,48,10,50,49,48,48,10,50,49,48, 48,10,50,49,48,48,10,50,49,48,48,10,50,49,48,48, 10,50,49,48,48,10,50,49,48,48,10,50,49,48,48,10, 51,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 66,48,10,69,78,67,79,68,73,78,71,32,57,54,52,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,70,56, 48,10,49,70,48,48,10,51,69,48,48,10,55,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,66,49,10,69,78, 67,79,68,73,78,71,32,57,54,52,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,70,56,48,10,49,49,48, 48,10,50,50,48,48,10,55,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,116,114,105,97,103,117,112,10,69,78,67,79,68,73,78, 71,32,57,54,53,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,49,69, 48,48,10,49,69,48,48,10,51,70,48,48,10,51,70,48, 48,10,55,70,56,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,66,51,10,69,78,67,79,68,73,78,71,32,57,54,53, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,49,50,48,48,10,49,50, 48,48,10,50,49,48,48,10,50,49,48,48,10,52,48,56, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,66,52,10,69, 78,67,79,68,73,78,71,32,57,54,53,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,52,48,48,10,48,69,48,48,10,48,69, 48,48,10,49,70,48,48,10,49,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,66,53,10,69,78,67,79,68,73, 78,71,32,57,54,53,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 52,48,48,10,48,65,48,48,10,48,65,48,48,10,49,49, 48,48,10,49,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,66,54,10,69,78,67,79,68,73,78,71,32,57,54, 53,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,48,48,48,10,55,56,48,48,10,55,69,48,48,10,55, 70,56,48,10,55,70,56,48,10,55,69,48,48,10,55,56, 48,48,10,54,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,66,55,10, 69,78,67,79,68,73,78,71,32,57,54,53,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,48,48,48,10, 53,56,48,48,10,52,54,48,48,10,52,49,56,48,10,52, 49,56,48,10,52,54,48,48,10,53,56,48,48,10,54,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,66,56,10,69,78,67,79,68, 73,78,71,32,57,54,53,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,56,48,48,10,49,69,48,48,10,49,70,48,48,10,49, 69,48,48,10,49,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,66,57,10,69,78,67,79,68,73,78,71,32,57, 54,53,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,56,48,48,10, 49,54,48,48,10,49,49,48,48,10,49,54,48,48,10,49, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,116,114,105,97,103,114,116, 10,69,78,67,79,68,73,78,71,32,57,54,53,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,69,48,48,10,55,70,56,48,10, 55,69,48,48,10,55,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,66,66,10,69,78,67,79, 68,73,78,71,32,57,54,53,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,48,48,48, 10,52,69,48,48,10,52,49,56,48,10,52,69,48,48,10, 55,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,116, 114,105,97,103,100,110,10,69,78,67,79,68,73,78,71,32, 57,54,54,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,55,70,56,48,10,51,70,48,48, 10,51,70,48,48,10,49,69,48,48,10,49,69,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,66, 68,10,69,78,67,79,68,73,78,71,32,57,54,54,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,52,48,56,48,10,50,49,48,48,10,50,49,48,48, 10,49,50,48,48,10,49,50,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,66,69,10,69,78,67, 79,68,73,78,71,32,57,54,54,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,70,48,48,10,49,70,48,48,10,48,69,48,48, 10,48,69,48,48,10,48,52,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,53,66,70,10,69,78,67,79,68,73,78,71, 32,57,54,54,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,70,48, 48,10,49,49,48,48,10,48,65,48,48,10,48,65,48,48, 10,48,52,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 67,48,10,69,78,67,79,68,73,78,71,32,57,54,54,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,49, 56,48,10,48,55,56,48,10,49,70,56,48,10,55,70,56, 48,10,55,70,56,48,10,49,70,56,48,10,48,55,56,48, 10,48,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,67,49,10,69,78, 67,79,68,73,78,71,32,57,54,54,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,49,56,48,10,48,54, 56,48,10,49,56,56,48,10,54,48,56,48,10,54,48,56, 48,10,49,56,56,48,10,48,54,56,48,10,48,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,67,50,10,69,78,67,79,68,73,78, 71,32,57,54,54,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,51, 48,48,10,48,70,48,48,10,49,70,48,48,10,48,70,48, 48,10,48,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,67,51,10,69,78,67,79,68,73,78,71,32,57,54,54, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,51,48,48,10,48,68, 48,48,10,49,49,48,48,10,48,68,48,48,10,48,51,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,116,114,105,97,103,108,102,10,69, 78,67,79,68,73,78,71,32,57,54,54,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 51,56,48,10,49,70,56,48,10,55,70,56,48,10,49,70, 56,48,10,48,51,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,67,53,10,69,78,67,79,68,73, 78,71,32,57,54,54,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,51,56,48,10,49, 67,56,48,10,54,48,56,48,10,49,67,56,48,10,48,51, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,67,54,10,69,78,67,79,68,73,78,71,32,57,54, 55,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,49,69,48,48,10,51,70,48,48,10,55, 70,56,48,10,55,70,56,48,10,51,70,48,48,10,49,69, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,67,55,10, 69,78,67,79,68,73,78,71,32,57,54,55,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 49,50,48,48,10,50,49,48,48,10,52,48,56,48,10,52, 48,56,48,10,50,49,48,48,10,49,50,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,67,56,10,69,78,67,79,68, 73,78,71,32,57,54,55,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,49,50,48,48,10, 50,68,48,48,10,53,69,56,48,10,53,69,56,48,10,50, 68,48,48,10,49,50,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,67,57,10,69,78,67,79,68,73,78,71,32,57, 54,55,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,50,49,48,48,10, 52,67,56,48,10,53,69,56,48,10,53,69,56,48,10,52, 67,56,48,10,50,49,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,108,111,122,101,110,103,101, 10,69,78,67,79,68,73,78,71,32,57,54,55,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,52,48,48,10,48,65,48, 48,10,48,65,48,48,10,49,49,48,48,10,49,49,48,48, 10,50,48,56,48,10,50,48,56,48,10,52,48,52,48,10, 50,48,56,48,10,50,48,56,48,10,49,49,48,48,10,49, 49,48,48,10,48,65,48,48,10,48,65,48,48,10,48,52, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,99,105,114,99,108,101,10,69,78,67,79,68, 73,78,71,32,57,54,55,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,69,48,48,10, 50,49,48,48,10,52,48,56,48,10,52,48,56,48,10,52, 48,56,48,10,52,48,56,48,10,50,49,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,67,67,10,69,78,67,79,68,73,78,71,32,57, 54,55,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,52,48,48,10,48,48,48,48,10, 52,49,48,48,10,48,48,48,48,10,52,49,48,48,10,48, 48,48,48,10,49,52,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,67,68, 10,69,78,67,79,68,73,78,71,32,57,54,55,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,67,48,48,10,51,54,48,48,10,53,53,48,48,10, 53,53,48,48,10,53,53,48,48,10,51,54,48,48,10,49, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,67,69,10,69,78,67,79, 68,73,78,71,32,57,54,55,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,50,49,48,48,10,52,67,56,48,10,53,50,56,48,10, 53,50,56,48,10,52,67,56,48,10,50,49,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,72, 49,56,53,51,51,10,69,78,67,79,68,73,78,71,32,57, 54,55,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,70,48,48,10, 55,70,56,48,10,55,70,56,48,10,55,70,56,48,10,55, 70,56,48,10,51,70,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,68,48, 10,69,78,67,79,68,73,78,71,32,57,54,56,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,57,48,48,10,55,56,56,48,10, 55,56,56,48,10,55,56,56,48,10,55,56,56,48,10,51, 57,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,68,49,10,69,78,67,79, 68,73,78,71,32,57,54,56,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,50,55,48,48,10,52,55,56,48,10,52,55,56,48,10, 52,55,56,48,10,52,55,56,48,10,50,55,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,68,50,10,69,78,67,79,68,73,78,71,32, 57,54,56,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,69,48,48,10,50,49,48,48, 10,52,48,56,48,10,52,48,56,48,10,55,70,56,48,10, 55,70,56,48,10,51,70,48,48,10,49,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,68, 51,10,69,78,67,79,68,73,78,71,32,57,54,56,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,70,48,48,10,55,70,56,48, 10,55,70,56,48,10,52,48,56,48,10,52,48,56,48,10, 50,49,48,48,10,49,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,68,52,10,69,78,67, 79,68,73,78,71,32,57,54,56,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,69,48, 48,10,50,55,48,48,10,52,55,56,48,10,52,55,56,48, 10,52,48,56,48,10,52,48,56,48,10,50,49,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,53,68,53,10,69,78,67,79,68,73,78,71, 32,57,54,56,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,50,55,48, 48,10,52,55,56,48,10,52,55,56,48,10,55,70,56,48, 10,55,70,56,48,10,51,70,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 68,54,10,69,78,67,79,68,73,78,71,32,57,54,56,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,56,48,48,10,51,56,48,48,10,55,56,48, 48,10,55,56,48,48,10,55,56,48,48,10,55,56,48,48, 10,51,56,48,48,10,49,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,68,55,10,69,78, 67,79,68,73,78,71,32,57,54,56,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,54, 48,48,10,48,55,48,48,10,48,55,56,48,10,48,55,56, 48,10,48,55,56,48,10,48,55,56,48,10,48,55,48,48, 10,48,54,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,105,110,118,98,117,108,108,101,116,10,69,78,67,79,68, 73,78,71,32,57,54,56,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,70,70,67,48,10,70,70,67, 48,10,70,70,67,48,10,70,70,67,48,10,70,70,67,48, 10,70,70,67,48,10,69,49,67,48,10,67,48,67,48,10, 56,48,52,48,10,56,48,52,48,10,56,48,52,48,10,56, 48,52,48,10,67,48,67,48,10,69,49,67,48,10,70,70, 67,48,10,70,70,67,48,10,70,70,67,48,10,70,70,67, 48,10,70,70,67,48,10,70,70,67,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,105,110, 118,99,105,114,99,108,101,10,69,78,67,79,68,73,78,71, 32,57,54,56,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,70,70,67,48,10,70,70,67,48,10,70, 70,67,48,10,70,70,67,48,10,70,70,67,48,10,70,70, 67,48,10,69,49,67,48,10,68,69,67,48,10,66,70,52, 48,10,66,70,52,48,10,66,70,52,48,10,66,70,52,48, 10,68,69,67,48,10,69,49,67,48,10,70,70,67,48,10, 70,70,67,48,10,70,70,67,48,10,70,70,67,48,10,70, 70,67,48,10,70,70,67,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 68,65,10,69,78,67,79,68,73,78,71,32,57,54,57,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 70,70,67,48,10,70,70,67,48,10,70,70,67,48,10,70, 70,67,48,10,70,70,67,48,10,70,70,67,48,10,69,49, 67,48,10,68,69,67,48,10,66,70,52,48,10,66,70,52, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,68,66,10,69,78, 67,79,68,73,78,71,32,57,54,57,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,66,70,52, 48,10,66,70,52,48,10,68,69,67,48,10,69,49,67,48, 10,70,70,67,48,10,70,70,67,48,10,70,70,67,48,10, 70,70,67,48,10,70,70,67,48,10,70,70,67,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,68,67,10,69,78,67,79,68,73,78, 71,32,57,54,57,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,56,48,48,10,50,48, 48,48,10,52,48,48,48,10,52,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,68,68,10,69,78,67,79,68,73,78,71,32,57,54,57, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,54,48,48,10,48,49,48,48,10,48,48, 56,48,10,48,48,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,68,69,10,69, 78,67,79,68,73,78,71,32,57,54,57,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,56,48,10,48,48,56,48,10,48,49,48, 48,10,48,54,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,68,70,10,69,78,67,79,68,73, 78,71,32,57,54,57,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,52,48, 48,48,10,52,48,48,48,10,50,48,48,48,10,49,56,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,69,48,10,69,78,67,79,68,73,78,71,32,57,54, 57,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,69,48,48,10,50,49,48,48,10,52, 48,56,48,10,52,48,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,69,49,10, 69,78,67,79,68,73,78,71,32,57,54,57,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,52,48,56,48,10,52,48,56,48,10,50,49, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,69,50,10,69,78,67,79,68, 73,78,71,32,57,54,57,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,52, 48,10,48,48,52,48,10,48,48,67,48,10,48,48,67,48, 10,48,49,67,48,10,48,49,67,48,10,48,51,67,48,10, 48,51,67,48,10,48,55,67,48,10,48,55,67,48,10,48, 70,67,48,10,48,70,67,48,10,49,70,67,48,10,49,70, 67,48,10,51,70,67,48,10,51,70,67,48,10,55,70,67, 48,10,55,70,67,48,10,70,70,67,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,69,51,10,69,78,67,79,68,73,78,71,32,57, 54,57,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,56,48,48,48,10,56,48,48, 48,10,67,48,48,48,10,67,48,48,48,10,69,48,48,48, 10,69,48,48,48,10,70,48,48,48,10,70,48,48,48,10, 70,56,48,48,10,70,56,48,48,10,70,67,48,48,10,70, 67,48,48,10,70,69,48,48,10,70,69,48,48,10,70,70, 48,48,10,70,70,48,48,10,70,70,56,48,10,70,70,56, 48,10,70,70,67,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,69,52, 10,69,78,67,79,68,73,78,71,32,57,55,48,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,70,70, 67,48,10,70,70,56,48,10,70,70,56,48,10,70,70,48, 48,10,70,70,48,48,10,70,69,48,48,10,70,69,48,48, 10,70,67,48,48,10,70,67,48,48,10,70,56,48,48,10, 70,56,48,48,10,70,48,48,48,10,70,48,48,48,10,69, 48,48,48,10,69,48,48,48,10,67,48,48,48,10,67,48, 48,48,10,56,48,48,48,10,56,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,69,53,10,69,78,67,79, 68,73,78,71,32,57,55,48,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,70,70,67,48,10,55,70, 67,48,10,55,70,67,48,10,51,70,67,48,10,51,70,67, 48,10,49,70,67,48,10,49,70,67,48,10,48,70,67,48, 10,48,70,67,48,10,48,55,67,48,10,48,55,67,48,10, 48,51,67,48,10,48,51,67,48,10,48,49,67,48,10,48, 49,67,48,10,48,48,67,48,10,48,48,67,48,10,48,48, 52,48,10,48,48,52,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,111, 112,101,110,98,117,108,108,101,116,10,69,78,67,79,68,73, 78,71,32,57,55,48,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,69,48,48,10,49, 49,48,48,10,49,49,48,48,10,49,49,48,48,10,48,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,69,55,10,69,78,67,79,68,73,78,71,32,57,55, 48,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,55,56,56,48,10,55, 56,56,48,10,55,56,56,48,10,55,56,56,48,10,55,56, 56,48,10,55,56,56,48,10,55,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,69,56,10, 69,78,67,79,68,73,78,71,32,57,55,48,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,52,55,56,48,10,52,55,56,48,10,52, 55,56,48,10,52,55,56,48,10,52,55,56,48,10,52,55, 56,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,69,57,10,69,78,67,79,68, 73,78,71,32,57,55,48,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 55,69,56,48,10,55,67,56,48,10,55,56,56,48,10,55, 48,56,48,10,54,48,56,48,10,52,48,56,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,69,65,10,69,78,67,79,68,73,78,71,32,57, 55,48,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,70,56,48,10,52,48,56,48,10, 52,49,56,48,10,52,51,56,48,10,52,55,56,48,10,52, 70,56,48,10,53,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,69,66, 10,69,78,67,79,68,73,78,71,32,57,55,48,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,70,56,48,10,56,56,56,48,10,56,56,56,48,10, 56,56,56,48,10,56,56,56,48,10,56,56,56,48,10,56, 56,56,48,10,56,56,56,48,10,70,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,69,67,10,69,78,67,79, 68,73,78,71,32,57,55,48,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,49,50,48,48,10,49,50,48,48,10,50,68,48,48,10, 50,68,48,48,10,52,48,56,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,69,68,10,69,78,67,79,68,73,78,71,32, 57,55,48,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,49,65,48,48, 10,49,65,48,48,10,51,57,48,48,10,51,57,48,48,10, 55,56,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,69, 69,10,69,78,67,79,68,73,78,71,32,57,55,49,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,49,54,48,48,10,49,54,48,48, 10,50,55,48,48,10,50,55,48,48,10,52,55,56,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,69,70,10,69,78,67, 79,68,73,78,71,32,57,55,49,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,50,49,48, 48,10,52,48,56,48,10,56,48,52,48,10,56,48,52,48, 10,56,48,52,48,10,56,48,52,48,10,52,48,56,48,10, 50,49,48,48,10,49,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,53,70,48,10,69,78,67,79,68,73,78,71, 32,57,55,49,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,70,70,56,48,10,56,56,56, 48,10,56,56,56,48,10,56,56,56,48,10,70,56,56,48, 10,56,48,56,48,10,56,48,56,48,10,56,48,56,48,10, 70,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 70,49,10,69,78,67,79,68,73,78,71,32,57,55,49,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,70,70,56,48,10,56,48,56,48,10,56,48,56, 48,10,56,48,56,48,10,70,56,56,48,10,56,56,56,48, 10,56,56,56,48,10,56,56,56,48,10,70,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,70,50,10,69,78, 67,79,68,73,78,71,32,57,55,49,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,70,70, 56,48,10,56,48,56,48,10,56,48,56,48,10,56,48,56, 48,10,56,70,56,48,10,56,56,56,48,10,56,56,56,48, 10,56,56,56,48,10,70,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,70,51,10,69,78,67,79,68,73,78, 71,32,57,55,49,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,70,70,56,48,10,56,56, 56,48,10,56,56,56,48,10,56,56,56,48,10,56,70,56, 48,10,56,48,56,48,10,56,48,56,48,10,56,48,56,48, 10,70,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,70,52,10,69,78,67,79,68,73,78,71,32,57,55,49, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,69,48,48,10,52,57,48,48,10,56,56, 56,48,10,56,56,56,48,10,70,56,56,48,10,56,48,56, 48,10,56,48,56,48,10,52,49,48,48,10,51,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,70,53,10,69, 78,67,79,68,73,78,71,32,57,55,49,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 69,48,48,10,52,49,48,48,10,56,48,56,48,10,56,48, 56,48,10,70,56,56,48,10,56,56,56,48,10,56,56,56, 48,10,52,57,48,48,10,51,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,70,54,10,69,78,67,79,68,73, 78,71,32,57,55,49,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,69,48,48,10,52, 49,48,48,10,56,48,56,48,10,56,48,56,48,10,56,70, 56,48,10,56,56,56,48,10,56,56,56,48,10,52,57,48, 48,10,51,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,70,55,10,69,78,67,79,68,73,78,71,32,57,55, 49,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,69,48,48,10,52,57,48,48,10,56, 56,56,48,10,56,56,56,48,10,56,70,56,48,10,56,48, 56,48,10,56,48,56,48,10,52,49,48,48,10,51,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,70,56,10, 69,78,67,79,68,73,78,71,32,57,55,50,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,70,48,48,10,50,50,48,48,10,50, 52,48,48,10,50,56,48,48,10,51,48,48,48,10,50,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,70,57,10,69,78,67,79,68, 73,78,71,32,57,55,50,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,70,48,48,10,49,49,48,48,10,48,57,48,48,10,48, 53,48,48,10,48,51,48,48,10,48,49,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,70,65,10,69,78,67,79,68,73,78,71,32,57, 55,50,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,50,48,48,48,10, 51,48,48,48,10,50,56,48,48,10,50,52,48,48,10,50, 50,48,48,10,51,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,70,66, 10,69,78,67,79,68,73,78,71,32,57,55,50,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,70,48,48,10,50,49,48,48,10, 50,49,48,48,10,50,49,48,48,10,50,49,48,48,10,51, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,70,67,10,69,78,67,79, 68,73,78,71,32,57,55,50,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,70,48,48,10,51,70,48,48,10,51,70,48,48,10, 51,70,48,48,10,51,70,48,48,10,51,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,70,68,10,69,78,67,79,68,73,78,71,32, 57,55,50,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,70, 69,10,69,78,67,79,68,73,78,71,32,57,55,50,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,49,69,48,48,10,49,69,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,70,70,10,69,78,67, 79,68,73,78,71,32,57,55,50,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,49,48,48,10,48,51,48,48,10,48,53,48,48, 10,48,57,48,48,10,49,49,48,48,10,51,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,54,48,48,10,69,78,67,79,68,73,78,71, 32,57,55,50,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,56,48,48,10,52,49,48,48,10,49,67,48, 48,10,51,69,48,48,10,66,69,56,48,10,51,69,48,48, 10,49,67,48,48,10,52,49,48,48,10,48,56,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,54, 48,49,10,69,78,67,79,68,73,78,71,32,57,55,50,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,48,48,48,10,55,57,56,48,10,70,70,67, 48,10,70,70,67,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,48,50,10,69,78, 67,79,68,73,78,71,32,57,55,51,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 56,48,48,10,51,69,48,48,10,55,70,48,48,10,70,70, 56,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,65,48,48, 10,48,65,48,48,10,48,52,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,48,51,10,69,78,67,79,68,73,78, 71,32,57,55,51,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,52,48,48,48,10,49,67,56,48,10, 49,67,48,48,10,55,70,48,48,10,51,69,48,48,10,52, 49,52,48,10,53,53,48,48,10,52,49,48,48,10,50,65, 48,48,10,66,69,52,48,10,52,49,48,48,10,52,57,48, 48,10,52,49,48,48,10,52,57,48,48,10,52,49,48,48, 10,51,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 54,48,52,10,69,78,67,79,68,73,78,71,32,57,55,51, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,50,48,48,10,48, 52,48,48,10,48,52,56,48,10,48,57,48,48,10,48,65, 48,48,10,49,65,48,48,10,50,52,56,48,10,52,51,48, 48,10,52,50,48,48,10,50,52,48,48,10,49,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,54,48,53,10,69, 78,67,79,68,73,78,71,32,57,55,51,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 56,48,48,10,48,56,48,48,10,49,67,48,48,10,70,70, 56,48,10,55,70,48,48,10,51,69,48,48,10,51,54,48, 48,10,54,51,48,48,10,52,49,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,48,54,10,69,78,67,79,68,73, 78,71,32,57,55,51,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,56,48,48,10,48, 56,48,48,10,49,52,48,48,10,70,55,56,48,10,52,49, 48,48,10,50,50,48,48,10,52,57,48,48,10,53,53,48, 48,10,54,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,48,55,10,69,78,67,79,68,73,78,71,32,57,55, 51,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,49,48,48,10,48,50,48,48,10,48, 52,48,48,10,48,56,48,48,10,49,48,48,48,10,48,56, 48,48,10,48,53,48,48,10,48,51,48,48,10,48,55,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,54,48,56,10, 69,78,67,79,68,73,78,71,32,57,55,51,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,48,48,10,52,50,48,48,10,52,52,48,48,10,52, 56,48,48,10,53,48,48,48,10,52,56,48,48,10,52,53, 48,48,10,52,51,48,48,10,52,55,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,54,48,57,10,69,78,67,79,68, 73,78,71,32,57,55,51,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,67,48,48,10,50,50,48,48,10,52, 49,48,48,10,52,57,48,48,10,52,49,48,48,10,50,50, 48,48,10,49,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,48,65,10,69,78,67,79,68,73,78,71,32,57, 55,51,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,50,49,48,48,10, 52,48,56,48,10,52,48,56,48,10,52,48,56,48,10,50, 49,48,48,10,50,49,48,48,10,53,50,56,48,10,50,49, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,48,66, 10,69,78,67,79,68,73,78,71,32,57,55,51,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,50,49,48,48,10,53,50,56,48,10,50,49,48,48,10, 50,49,48,48,10,52,48,56,48,10,52,48,56,48,10,52, 48,56,48,10,50,49,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,54,48,67,10,69,78,67,79, 68,73,78,71,32,57,55,52,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,52,48,48,10,48,52,48,48,10,48,56,48,48,10, 51,56,48,48,10,52,52,48,48,10,52,52,48,48,10,52, 52,48,48,10,51,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,54,48,68,10,69,78,67,79,68,73,78,71,32, 57,55,52,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,55,48,48,10,48,56,56, 48,10,48,56,56,48,10,48,56,56,48,10,48,55,48,48, 10,48,52,48,48,10,48,56,48,48,10,51,56,48,48,10, 52,52,48,48,10,52,52,48,48,10,52,52,48,48,10,51, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,48, 69,10,69,78,67,79,68,73,78,71,32,57,55,52,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,69,48,48,10,55,70,48,48,10,67,49,56,48, 10,68,68,56,48,10,51,54,48,48,10,54,51,48,48,10, 54,51,48,48,10,70,55,56,48,10,70,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,48,70,10,69,78,67, 79,68,73,78,71,32,57,55,52,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,69,48,48,10,52,49,48,48,10,57,67,56,48, 10,65,65,56,48,10,53,53,48,48,10,52,57,48,48,10, 56,48,56,48,10,70,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,54,49,48,10,69,78,67,79,68,73,78,71, 32,57,55,52,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,70,70,56,48,10,56,48, 56,48,10,56,48,56,48,10,56,48,56,48,10,56,48,56, 48,10,56,48,56,48,10,56,48,56,48,10,56,48,56,48, 10,56,48,56,48,10,56,48,56,48,10,56,48,56,48,10, 70,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,54, 49,49,10,69,78,67,79,68,73,78,71,32,57,55,52,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,70,70,56,48,10,56,49,56,48,10,56,49, 56,48,10,56,51,56,48,10,56,51,56,48,10,69,51,56, 48,10,69,54,56,48,10,66,54,56,48,10,66,54,56,48, 10,57,67,56,48,10,57,67,56,48,10,70,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,49,50,10,69,78, 67,79,68,73,78,71,32,57,55,52,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 70,56,48,10,69,51,56,48,10,70,54,56,48,10,66,67, 56,48,10,57,67,56,48,10,57,67,56,48,10,66,69,56, 48,10,66,54,56,48,10,69,51,56,48,10,69,51,56,48, 10,69,49,56,48,10,70,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,49,51,10,69,78,67,79,68,73,78, 71,32,57,55,52,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,67,49,56,48,10,69, 51,56,48,10,55,54,48,48,10,51,67,48,48,10,49,67, 48,48,10,49,67,48,48,10,51,69,48,48,10,51,54,48, 48,10,54,51,48,48,10,69,51,56,48,10,67,49,56,48, 10,67,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 54,49,52,10,69,78,67,79,68,73,78,71,32,57,55,52, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,56,56,56,48,10, 50,50,48,48,10,56,56,56,48,10,51,69,48,48,10,55, 70,48,48,10,70,70,56,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,65,48,48,10,48,65,48,48,10,48,52,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,54,49,53,10,69, 78,67,79,68,73,78,71,32,57,55,52,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,50,65,48,48,10,53,52,48,48,10,50, 65,48,48,10,53,52,48,48,10,48,48,48,48,10,70,69, 48,48,10,70,70,56,48,10,56,50,56,48,10,56,50,56, 48,10,56,51,48,48,10,55,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,49,54,10,69,78,67,79,68,73, 78,71,32,57,55,53,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,56,48,48,10,51,54,48,48,10,52,49,48,48,10,52, 49,48,48,10,52,49,48,48,10,52,49,48,48,10,56,48, 56,48,10,56,48,56,48,10,56,48,56,48,10,56,48,56, 48,10,70,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,49,55,10,69,78,67,79,68,73,78,71,32,57,55, 53,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,56,48,48,10, 51,69,48,48,10,55,70,48,48,10,55,70,48,48,10,55, 70,48,48,10,55,70,48,48,10,70,70,56,48,10,70,70, 56,48,10,70,70,56,48,10,70,70,56,48,10,70,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,54,49,57,10, 69,78,67,79,68,73,78,71,32,57,55,53,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,56,48,10,48,68,48,48,10,57,70,48,48,10,66, 68,56,48,10,70,69,67,48,10,55,69,52,48,10,49,67, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,54,49,65,10,69,78,67,79,68, 73,78,71,32,57,55,53,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 70,70,67,48,10,70,70,52,48,10,49,70,52,48,10,49, 70,52,48,10,48,70,52,48,10,48,70,67,48,10,48,54, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,49,66,10,69,78,67,79,68,73,78,71,32,57, 55,53,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,70,67,48,10, 66,70,67,48,10,66,69,48,48,10,66,69,48,48,10,66, 67,48,48,10,70,67,48,48,10,49,56,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,49,67, 10,69,78,67,79,68,73,78,71,32,57,55,53,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,69,48,48,10,56,49,48,48,10,55,56,67,48,10, 49,48,56,48,10,49,48,56,48,10,48,56,56,48,10,48, 56,56,48,10,48,55,56,48,10,48,48,52,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,54,49,68,10,69,78,67,79, 68,73,78,71,32,57,55,53,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,49,48,48,10,48,50,56,48, 10,48,50,56,48,10,48,69,56,48,10,51,50,56,48,10, 52,48,56,48,10,52,48,56,48,10,52,48,56,48,10,55, 70,56,48,10,56,48,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,54,49,69,10,69,78,67,79,68,73,78,71,32, 57,55,53,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,70,56,48,10,50,48,52,48, 10,67,55,56,48,10,52,50,48,48,10,52,50,48,48,10, 52,52,48,48,10,52,52,48,48,10,55,56,48,48,10,56, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,49, 70,10,69,78,67,79,68,73,78,71,32,57,55,53,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,56,48,56, 48,10,55,70,56,48,10,52,48,56,48,10,52,48,56,48, 10,52,48,56,48,10,51,50,56,48,10,48,69,56,48,10, 48,50,56,48,10,48,50,56,48,10,48,49,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,50,48,10,69,78,67, 79,68,73,78,71,32,57,55,54,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,69,48,48,10,52,49, 48,48,10,53,53,48,48,10,52,49,48,48,10,50,50,48, 48,10,51,69,48,48,10,50,50,48,48,10,49,67,48,48, 10,52,49,48,48,10,65,50,56,48,10,53,53,48,48,10, 48,56,48,48,10,53,53,48,48,10,65,50,56,48,10,52, 49,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,54,50,49,10,69,78,67,79,68,73,78,71, 32,57,55,54,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,69,48,48,10,55,70,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,54,48, 48,10,48,67,48,48,10,49,56,48,48,10,51,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,70,48,48,10, 51,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,54, 50,50,10,69,78,67,79,68,73,78,71,32,57,55,54,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,69,48,48,10,54,51,48,48,10,70,55,56, 48,10,70,55,56,48,10,70,70,56,48,10,56,56,56,48, 10,57,67,56,48,10,53,68,48,48,10,51,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,50,51,10,69,78, 67,79,68,73,78,71,32,57,55,54,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,50,50, 48,48,10,52,49,48,48,10,65,65,56,48,10,49,52,48, 48,10,50,65,48,48,10,50,65,48,48,10,49,67,48,48, 10,48,56,48,48,10,49,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,50,52,10,69,78,67,79,68,73,78, 71,32,57,55,54,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,51,70,48,48,10,69, 68,67,48,10,51,70,48,48,10,48,67,48,48,10,51,70, 48,48,10,54,68,56,48,10,53,69,56,48,10,54,68,56, 48,10,53,69,56,48,10,50,68,48,48,10,49,69,48,48, 10,50,68,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 54,50,53,10,69,78,67,79,68,73,78,71,32,57,55,54, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,67,48,48,10,50,50,48,48,10,50,50,48,48,10,50, 50,48,48,10,49,52,48,48,10,49,52,48,48,10,48,56, 48,48,10,55,70,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,54,50,54,10,69, 78,67,79,68,73,78,71,32,57,55,54,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,51,70,48,48,10,48,67,48,48,10,48, 67,48,48,10,55,70,56,48,10,48,67,48,48,10,48,67, 48,48,10,51,67,48,48,10,48,70,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,50,55,10,69,78,67,79,68,73, 78,71,32,57,55,54,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,70,48,48,10,48,56,56,48,10, 48,56,56,48,10,48,56,56,48,10,48,70,48,48,10,48, 56,48,48,10,52,57,48,48,10,50,65,48,48,10,49,67, 48,48,10,48,56,48,48,10,49,67,48,48,10,50,65,48, 48,10,52,57,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,50,56,10,69,78,67,79,68,73,78,71,32,57,55, 54,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,51,70,48,48,10, 48,67,48,48,10,48,67,48,48,10,55,70,56,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,54,50,57,10, 69,78,67,79,68,73,78,71,32,57,55,54,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,67,48,48,10,48,56,48,48,10, 48,56,48,48,10,56,56,56,48,10,70,70,56,48,10,56, 56,56,48,10,48,56,48,48,10,48,56,48,48,10,49,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,54,50,65,10,69,78,67,79,68, 73,78,71,32,57,55,55,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,69,48,48,10, 55,49,48,48,10,54,52,48,48,10,54,69,48,48,10,54, 52,48,48,10,54,65,48,48,10,54,48,48,48,10,55,49, 48,48,10,51,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,50,66,10,69,78,67,79,68,73,78,71,32,57, 55,55,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,50,65,48,48, 10,49,52,48,48,10,52,57,48,48,10,65,65,56,48,10, 65,65,56,48,10,65,65,56,48,10,65,65,56,48,10,65, 65,56,48,10,53,68,48,48,10,50,65,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,50,67, 10,69,78,67,79,68,73,78,71,32,57,55,55,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,67,48, 48,10,53,68,48,48,10,57,67,56,48,10,65,65,56,48, 10,65,65,56,48,10,65,65,56,48,10,65,65,56,48,10, 65,65,56,48,10,57,67,56,48,10,69,66,56,48,10,70, 70,56,48,10,57,67,56,48,10,50,65,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,54,50,68,10,69,78,67,79, 68,73,78,71,32,57,55,55,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,67,48,48, 10,52,50,48,48,10,48,57,48,48,10,49,57,48,48,10, 51,49,48,48,10,50,57,48,48,10,48,53,48,48,10,50, 50,48,48,10,53,68,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,54,50,69,10,69,78,67,79,68,73,78,71,32, 57,55,55,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,69,48,48,10,52,57,48,48, 10,56,56,56,48,10,56,56,56,48,10,57,67,56,48,10, 65,65,56,48,10,67,57,56,48,10,52,57,48,48,10,51, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,50, 70,10,69,78,67,79,68,73,78,71,32,57,55,55,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,69,48,48,10,52,49,48,48,10,56,48,56,48, 10,70,50,56,48,10,70,56,56,48,10,68,68,56,48,10, 70,70,56,48,10,55,70,48,48,10,51,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,51,48,10,69,78,67, 79,68,73,78,71,32,57,55,55,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,55,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,54,51,49,10,69,78,67,79,68,73,78,71, 32,57,55,55,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,51, 56,48,10,55,51,56,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,55,70,56,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,54, 51,50,10,69,78,67,79,68,73,78,71,32,57,55,55,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,51,51,10,69,78, 67,79,68,73,78,71,32,57,55,55,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,51,52,10,69,78,67,79,68,73,78, 71,32,57,55,56,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,55,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,55,51,56,48,10,55,51,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 54,51,53,10,69,78,67,79,68,73,78,71,32,57,55,56, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,51,56,48,10,55, 51,56,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 56,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,55,51,56,48,10,55,51,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,54,51,54,10,69, 78,67,79,68,73,78,71,32,57,55,56,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,51,55,10,69,78,67,79,68,73, 78,71,32,57,55,56,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,51,56,10,69,78,67,79,68,73,78,71,32,57,55, 56,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,56,48,48,10,53,68,48,48,10,50, 65,48,48,10,53,68,48,48,10,70,70,56,48,10,53,68, 48,48,10,50,65,48,48,10,53,68,48,48,10,48,56,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,54,51,57,10, 69,78,67,79,68,73,78,71,32,57,55,56,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,69,48,48,10, 50,49,48,48,10,52,48,56,48,10,53,50,56,48,10,52, 48,56,48,10,52,67,56,48,10,53,50,56,48,10,50,49, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,115,109,105,108,101,102,97,99,101,10,69,78,67, 79,68,73,78,71,32,57,55,56,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,50,49,48, 48,10,52,48,56,48,10,53,50,56,48,10,52,48,56,48, 10,53,50,56,48,10,52,67,56,48,10,50,49,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 105,110,118,115,109,105,108,101,102,97,99,101,10,69,78,67, 79,68,73,78,71,32,57,55,56,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,70,48, 48,10,55,70,56,48,10,54,68,56,48,10,55,70,56,48, 10,54,68,56,48,10,55,51,56,48,10,51,70,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 115,117,110,10,69,78,67,79,68,73,78,71,32,57,55,56, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,56,48,48,10,48, 56,48,48,10,56,56,56,48,10,52,49,48,48,10,49,67, 48,48,10,50,50,48,48,10,65,50,56,48,10,50,50,48, 48,10,49,67,48,48,10,52,49,48,48,10,56,56,56,48, 10,48,56,48,48,10,48,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,54,51,68,10,69, 78,67,79,68,73,78,71,32,57,55,56,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 67,48,48,10,48,65,48,48,10,48,57,48,48,10,48,52, 56,48,10,48,52,56,48,10,48,52,56,48,10,48,57,48, 48,10,48,65,48,48,10,49,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,51,69,10,69,78,67,79,68,73, 78,71,32,57,55,57,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,69,48,48,10,49, 52,48,48,10,50,52,48,48,10,52,56,48,48,10,52,56, 48,48,10,52,56,48,48,10,50,52,48,48,10,49,52,48, 48,10,48,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,51,70,10,69,78,67,79,68,73,78,71,32,57,55, 57,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,52,49,48,48,10, 50,50,48,48,10,49,67,48,48,10,50,50,48,48,10,52, 49,48,48,10,52,49,48,48,10,52,49,48,48,10,50,50, 48,48,10,49,67,48,48,10,48,56,48,48,10,48,56,48, 48,10,51,69,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,102,101,109,97,108,101,10,69, 78,67,79,68,73,78,71,32,57,55,57,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,67,48,48,10,50,50,48,48,10,52,49, 48,48,10,52,49,48,48,10,52,49,48,48,10,50,50,48, 48,10,49,67,48,48,10,48,56,48,48,10,48,56,48,48, 10,51,69,48,48,10,48,56,48,48,10,48,56,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,52,49,10,69,78,67,79,68,73, 78,71,32,57,55,57,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,56,48,48,10, 48,56,48,48,10,51,69,48,48,10,48,56,48,48,10,48, 56,48,48,10,49,67,48,48,10,50,50,48,48,10,52,49, 48,48,10,52,49,48,48,10,52,49,48,48,10,50,50,48, 48,10,49,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,109,97,108, 101,10,69,78,67,79,68,73,78,71,32,57,55,57,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,55,56, 48,10,48,49,56,48,10,48,50,56,48,10,49,67,56,48, 10,50,50,48,48,10,52,49,48,48,10,52,49,48,48,10, 52,49,48,48,10,50,50,48,48,10,49,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,52,51,10,69,78,67, 79,68,73,78,71,32,57,55,57,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,49, 48,48,10,48,49,48,48,10,48,49,48,48,10,48,49,48, 48,10,48,49,48,48,10,55,57,48,48,10,56,53,48,48, 10,56,53,48,48,10,56,53,48,48,10,48,57,48,48,10, 49,49,48,48,10,70,70,48,48,10,48,49,48,48,10,48, 49,48,48,10,48,49,48,48,10,48,49,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,54,52,52,10,69,78,67,79,68,73,78,71, 32,57,55,57,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,50,48,48,48,10,50,48, 48,48,10,70,56,48,48,10,50,48,48,48,10,50,48,48, 48,10,50,70,48,48,10,51,48,56,48,10,50,48,56,48, 10,50,49,48,48,10,50,50,48,48,10,50,50,48,48,10, 50,50,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,54, 52,53,10,69,78,67,79,68,73,78,71,32,57,55,57,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,56,56,56,48,10,56,56,56,48,10,56,56, 56,48,10,56,56,56,48,10,70,70,56,48,10,56,56,56, 48,10,56,56,56,48,10,56,56,56,48,10,57,67,56,48, 10,50,50,48,48,10,50,50,48,48,10,49,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,52,54,10,69,78, 67,79,68,73,78,71,32,57,55,57,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 56,48,48,10,49,67,48,48,10,53,68,48,48,10,69,66, 56,48,10,69,66,56,48,10,52,57,48,48,10,52,57,48, 48,10,52,57,48,48,10,51,69,48,48,10,48,56,48,48, 10,48,56,48,48,10,51,69,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,52,55,10,69,78,67,79,68,73,78, 71,32,57,55,57,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,67,48,48,10,52, 50,48,48,10,52,49,48,48,10,52,49,48,48,10,52,49, 48,48,10,52,50,48,48,10,55,67,48,48,10,52,48,48, 48,10,52,48,48,48,10,52,48,48,48,10,52,48,48,48, 10,55,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 54,52,56,10,69,78,67,79,68,73,78,71,32,57,56,48, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,52,49,48,48,10,65,50,56,48,10,65, 50,56,48,10,49,52,48,48,10,49,52,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,54,52,57,10,69, 78,67,79,68,73,78,71,32,57,56,48,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 56,48,56,48,10,56,48,56,48,10,56,48,56,48,10,54, 51,48,48,10,49,67,48,48,10,50,50,48,48,10,52,49, 48,48,10,52,49,48,48,10,52,49,48,48,10,52,49,48, 48,10,50,50,48,48,10,49,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,52,65,10,69,78,67,79,68,73, 78,71,32,57,56,48,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 67,49,56,48,10,51,69,48,48,10,50,50,48,48,10,50, 50,48,48,10,50,50,48,48,10,50,50,48,48,10,50,50, 48,48,10,50,50,48,48,10,50,50,48,48,10,51,69,48, 48,10,67,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,52,66,10,69,78,67,79,68,73,78,71,32,57,56, 48,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,70,48,48,10,52,56,56,48,10,52, 56,48,48,10,51,48,48,48,10,48,48,48,48,10,48,51, 48,48,10,48,52,56,48,10,52,52,56,48,10,51,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,54,52,67,10, 69,78,67,79,68,73,78,71,32,57,56,48,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,70,48,48,10,49,48,56,48,10,49, 48,56,48,10,49,48,56,48,10,51,49,48,48,10,52,57, 48,48,10,52,65,48,48,10,51,50,48,48,10,48,50,48, 48,10,48,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,54,52,68,10,69,78,67,79,68, 73,78,71,32,57,56,48,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,65,56,48,48,10, 53,52,48,48,10,53,53,48,48,10,53,54,56,48,10,53, 52,56,48,10,53,52,56,48,10,53,53,48,48,10,52,54, 48,48,10,48,67,48,48,10,51,52,48,48,10,48,50,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,52,69,10,69,78,67,79,68,73,78,71,32,57, 56,48,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,67,48,48,10,50,50,48,48,10, 52,49,48,48,10,52,49,48,48,10,50,50,48,48,10,49, 52,48,48,10,55,55,48,48,10,48,48,48,48,10,55,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,52,70, 10,69,78,67,79,68,73,78,71,32,57,56,48,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,65,56,48,48,10,53,52,48,48,10,53,52,48,48,10, 53,52,48,48,10,53,52,48,48,10,53,52,48,48,10,53, 52,48,48,10,53,53,48,48,10,48,51,56,48,10,48,49, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,54,53,48,10,69,78,67,79, 68,73,78,71,32,57,56,48,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,69,48,48, 10,48,49,56,48,10,48,49,56,48,10,48,50,52,48,10, 52,52,52,48,10,50,56,52,48,10,49,48,48,48,10,50, 56,48,48,10,52,52,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,54,53,49,10,69,78,67,79,68,73,78,71,32, 57,56,48,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,57,48,48,48, 10,65,56,48,48,10,67,56,48,48,10,56,66,48,48,10, 56,67,56,48,10,56,56,56,48,10,56,67,56,48,10,56, 66,48,48,10,48,56,48,48,10,48,56,48,48,10,49,48, 48,48,10,54,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,53, 50,10,69,78,67,79,68,73,78,71,32,57,56,49,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,54,52,48,10,57,57,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,54,52,48,10,57,57,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,53,51,10,69,78,67, 79,68,73,78,71,32,57,56,49,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,52,49,48, 48,10,50,50,48,48,10,49,52,48,48,10,49,52,48,48, 10,51,69,48,48,10,49,52,48,48,10,49,52,48,48,10, 50,50,48,48,10,52,49,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,54,53,52,10,69,78,67,79,68,73,78,71, 32,57,56,49,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,56, 48,48,10,49,67,48,48,10,52,57,48,48,10,55,55,48, 48,10,52,49,48,48,10,52,49,48,48,10,50,50,48,48, 10,50,50,48,48,10,50,50,48,48,10,52,49,48,48,10, 55,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,54, 53,53,10,69,78,67,79,68,73,78,71,32,57,56,49,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,56,48,48,10,49,52, 48,48,10,54,51,48,48,10,53,53,48,48,10,52,49,48, 48,10,52,49,48,48,10,50,50,48,48,10,50,50,48,48, 10,50,50,48,48,10,52,49,48,48,10,55,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,53,54,10,69,78, 67,79,68,73,78,71,32,57,56,49,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,53,68,48,48,10,55,55, 48,48,10,52,49,48,48,10,52,49,48,48,10,50,50,48, 48,10,50,50,48,48,10,50,50,48,48,10,50,50,48,48, 10,52,49,48,48,10,55,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,53,55,10,69,78,67,79,68,73,78, 71,32,57,56,49,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,56,48,48,10,49,52,48,48,10,50,50, 48,48,10,50,50,48,48,10,50,50,48,48,10,50,50,48, 48,10,49,67,48,48,10,50,50,48,48,10,52,49,48,48, 10,55,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 54,53,56,10,69,78,67,79,68,73,78,71,32,57,56,49, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 50,48,48,10,51,68,48,48,10,52,49,48,48,10,52,49, 48,48,10,51,49,48,48,10,48,57,48,48,10,49,49,48, 48,10,50,49,48,48,10,52,49,48,48,10,55,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,54,53,57,10,69, 78,67,79,68,73,78,71,32,57,56,49,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,56,48,48,10,50,52,48,48,10,50,52, 48,48,10,49,56,48,48,10,50,52,48,48,10,50,52,48, 48,10,52,50,48,48,10,55,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,53,65,10,69,78,67,79,68,73, 78,71,32,57,56,49,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,56,48,48,10,49,67,48,48,10,52,57,48,48,10,55, 70,48,48,10,55,70,48,48,10,55,70,48,48,10,51,69, 48,48,10,51,69,48,48,10,51,69,48,48,10,55,70,48, 48,10,55,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,53,66,10,69,78,67,79,68,73,78,71,32,57,56, 49,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,56,48,48,10, 49,67,48,48,10,55,70,48,48,10,53,53,48,48,10,55, 70,48,48,10,55,70,48,48,10,51,69,48,48,10,51,69, 48,48,10,51,69,48,48,10,55,70,48,48,10,55,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,54,53,67,10, 69,78,67,79,68,73,78,71,32,57,56,50,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,53,68,48,48,10, 55,70,48,48,10,55,70,48,48,10,55,70,48,48,10,51, 69,48,48,10,51,69,48,48,10,51,69,48,48,10,51,69, 48,48,10,55,70,48,48,10,55,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,54,53,68,10,69,78,67,79,68, 73,78,71,32,57,56,50,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,56,48,48,10,49,67,48,48,10, 51,65,48,48,10,51,65,48,48,10,51,69,48,48,10,51, 69,48,48,10,49,67,48,48,10,51,69,48,48,10,55,70, 48,48,10,55,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,53,69,10,69,78,67,79,68,73,78,71,32,57, 56,50,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,50,48,48,10,51,70,48,48,10,55,66,48,48,10, 55,70,48,48,10,51,70,48,48,10,48,70,48,48,10,49, 70,48,48,10,51,70,48,48,10,55,70,48,48,10,55,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,53,70, 10,69,78,67,79,68,73,78,71,32,57,56,50,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,51,67,48,48,10, 51,67,48,48,10,49,56,48,48,10,51,67,48,48,10,51, 67,48,48,10,55,69,48,48,10,55,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,115,112,97,100,101,10,69,78,67,79,68,73, 78,71,32,57,56,50,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,52,48,48,10,48,52,48,48,10,48,69,48,48,10,49, 70,48,48,10,51,70,56,48,10,55,70,67,48,10,55,70, 67,48,10,55,70,67,48,10,51,53,56,48,10,48,52,48, 48,10,49,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,54,49,10,69,78,67,79,68,73,78,71,32,57,56, 50,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,49,56,48,10,52,65,52,48,10,52, 52,52,48,10,52,48,52,48,10,50,48,56,48,10,49,49, 48,48,10,48,65,48,48,10,48,52,48,48,10,48,52,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,54,54,50,10, 69,78,67,79,68,73,78,71,32,57,56,50,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,52,48,48,10,48,65,48,48,10, 48,65,48,48,10,49,49,48,48,10,49,49,48,48,10,50, 48,56,48,10,49,49,48,48,10,49,49,48,48,10,48,65, 48,48,10,48,65,48,48,10,48,52,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,99,108,117,98,10,69,78,67,79,68,73,78,71, 32,57,56,50,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,69,48,48,10,48,69,48,48,10,48,69,48, 48,10,48,52,48,48,10,55,53,67,48,10,55,70,67,48, 10,55,53,67,48,10,48,52,48,48,10,48,52,48,48,10, 49,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,54, 54,52,10,69,78,67,79,68,73,78,71,32,57,56,50,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,52,48,48,10,48,52, 48,48,10,48,65,48,48,10,49,49,48,48,10,50,48,56, 48,10,52,48,52,48,10,52,48,52,48,10,52,69,52,48, 10,51,53,56,48,10,48,52,48,48,10,49,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,104,101,97,114,116,10,69,78,67,79, 68,73,78,71,32,57,56,50,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,49,56,48, 10,55,66,67,48,10,55,70,67,48,10,55,70,67,48,10, 51,70,56,48,10,49,70,48,48,10,48,69,48,48,10,48, 52,48,48,10,48,52,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,100, 105,97,109,111,110,100,10,69,78,67,79,68,73,78,71,32, 57,56,51,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,52,48, 48,10,48,69,48,48,10,48,69,48,48,10,49,70,48,48, 10,49,70,48,48,10,51,70,56,48,10,49,70,48,48,10, 49,70,48,48,10,48,69,48,48,10,48,69,48,48,10,48, 52,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,54, 55,10,69,78,67,79,68,73,78,71,32,57,56,51,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,69,48, 48,10,48,65,48,48,10,48,65,48,48,10,48,52,48,48, 10,55,53,67,48,10,52,69,52,48,10,55,53,67,48,10, 48,52,48,48,10,48,52,48,48,10,49,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,54,56,10,69,78,67, 79,68,73,78,71,32,57,56,51,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,50,65,48,48,10,50,65,48,48,10,50,57,48, 48,10,50,53,48,48,10,49,53,48,48,10,50,53,48,48, 10,50,57,48,48,10,65,65,56,48,10,56,48,56,48,10, 56,48,56,48,10,55,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,54,54,57,10,69,78,67,79,68,73,78,71, 32,57,56,51,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,50,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,70,48,48,10,49,70,48,48,10,51,70,48,48,10, 51,70,48,48,10,51,69,48,48,10,49,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,109,117,115,105,99, 97,108,110,111,116,101,10,69,78,67,79,68,73,78,71,32, 57,56,51,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,52,48,48,10,48,55, 48,48,10,48,55,67,48,10,48,54,67,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 49,69,48,48,10,51,69,48,48,10,55,69,48,48,10,55, 69,48,48,10,55,67,48,48,10,51,56,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,109,117,115,105,99,97, 108,110,111,116,101,100,98,108,10,69,78,67,79,68,73,78, 71,32,57,56,51,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,49,56,48,48,10, 49,69,48,48,10,49,70,56,48,10,49,66,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,49,57, 56,48,10,55,57,56,48,10,70,57,56,48,10,70,49,56, 48,10,54,49,56,48,10,48,55,56,48,10,48,70,56,48, 10,48,70,48,48,10,48,54,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 54,54,67,10,69,78,67,79,68,73,78,71,32,57,56,51, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,49,56,48,48,10,49,69,48,48,10, 49,70,56,48,10,49,66,56,48,10,49,68,56,48,10,49, 70,56,48,10,49,66,56,48,10,49,57,56,48,10,55,57, 56,48,10,70,57,56,48,10,70,49,56,48,10,54,49,56, 48,10,48,55,56,48,10,48,70,56,48,10,48,70,48,48, 10,48,54,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,54,54,68,10,69, 78,67,79,68,73,78,71,32,57,56,51,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,70,48,48,10,55,57, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,51,48, 48,10,54,69,48,48,10,55,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,54,69,10,69,78,67,79,68,73, 78,71,32,57,56,51,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,48,48,48,10,51,48,48,48,10, 51,48,48,48,10,51,51,48,48,10,51,70,48,48,10,51, 51,48,48,10,51,51,48,48,10,51,51,48,48,10,51,70, 48,48,10,51,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,50,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,54,70,10,69,78,67,79,68,73,78,71,32,57,56, 51,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,49,48,48,10,49,51,48,48,10,51,51,48,48,10, 51,51,56,48,10,51,70,48,48,10,55,51,48,48,10,51, 51,48,48,10,51,51,56,48,10,51,70,48,48,10,55,51, 48,48,10,51,51,48,48,10,51,50,48,48,10,50,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,54,55,48,10, 69,78,67,79,68,73,78,71,32,57,56,52,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,50,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 52,67,56,48,10,51,70,48,48,10,52,67,56,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,49,50,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,54,55,49,10,69,78,67,79,68, 73,78,71,32,57,56,52,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,56,48,48,10,49,52,48,48,10,49,67,48,48, 10,49,67,48,48,10,49,52,48,48,10,55,55,48,48,10, 65,50,56,48,10,55,55,48,48,10,49,52,48,48,10,49, 52,48,48,10,49,52,48,48,10,49,67,48,48,10,49,67, 48,48,10,49,52,48,48,10,48,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,55,50,10,69,78,67,79,68,73,78,71,32,57, 56,52,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,67,48,48,10,50,65,56,48,10,51,53,56,48, 10,48,50,56,48,10,70,55,56,48,10,53,48,48,48,10, 66,48,67,48,10,68,50,67,48,10,67,54,67,48,10,65, 57,67,48,10,54,57,56,48,10,48,54,48,48,10,48,50, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,55,51, 10,69,78,67,79,68,73,78,71,32,57,56,52,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,49,50,48, 48,10,48,49,48,48,10,54,49,52,48,10,69,48,67,48, 10,54,53,67,48,10,52,67,48,48,10,52,52,48,48,10, 56,52,52,48,10,56,52,52,48,10,56,69,52,48,10,56, 48,52,48,10,52,54,56,48,10,50,70,48,48,10,48,54, 48,48,10,48,50,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,54,55,52,10,69,78,67,79, 68,73,78,71,32,57,56,52,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,49,50,48,48,10,48,49,48, 48,10,54,49,52,48,10,69,48,67,48,10,54,68,67,48, 10,53,50,48,48,10,52,52,48,48,10,56,56,52,48,10, 57,48,52,48,10,57,69,52,48,10,56,48,52,48,10,52, 54,56,48,10,50,70,48,48,10,48,54,48,48,10,48,50, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,54,55,53,10,69,78,67,79,68,73,78,71,32, 57,56,52,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,49,50,48,48,10,48,49,48,48,10,54,49,52, 48,10,69,67,67,48,10,55,51,67,48,10,52,50,48,48, 10,52,67,48,48,10,56,50,52,48,10,57,50,52,48,10, 56,67,52,48,10,56,48,52,48,10,52,54,56,48,10,50, 70,48,48,10,48,54,48,48,10,48,50,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,55, 54,10,69,78,67,79,68,73,78,71,32,57,56,52,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,49,50, 48,48,10,48,49,48,48,10,54,49,52,48,10,69,52,67, 48,10,54,68,67,48,10,53,52,48,48,10,53,52,48,48, 10,57,69,52,48,10,56,52,52,48,10,56,52,52,48,10, 56,48,52,48,10,52,54,56,48,10,50,70,48,48,10,48, 54,48,48,10,48,50,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,55,55,10,69,78,67, 79,68,73,78,71,32,57,56,52,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,49,50,48,48,10,48,49, 48,48,10,54,49,52,48,10,69,48,67,48,10,55,70,67, 48,10,53,48,48,48,10,53,67,48,48,10,56,50,52,48, 10,56,50,52,48,10,57,67,52,48,10,56,48,52,48,10, 52,54,56,48,10,50,70,48,48,10,48,54,48,48,10,48, 50,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,54,55,56,10,69,78,67,79,68,73,78,71, 32,57,56,52,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,49,50,48,48,10,48,49,48,48,10,54,49, 52,48,10,69,67,67,48,10,55,51,67,48,10,53,48,48, 48,10,53,67,48,48,10,57,50,52,48,10,57,50,52,48, 10,56,67,52,48,10,56,48,52,48,10,52,54,56,48,10, 50,70,48,48,10,48,54,48,48,10,48,50,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,54, 55,57,10,69,78,67,79,68,73,78,71,32,57,56,52,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,49, 50,48,48,10,48,49,48,48,10,54,49,52,48,10,69,48, 67,48,10,55,70,67,48,10,53,50,48,48,10,52,52,48, 48,10,56,52,52,48,10,56,52,52,48,10,56,52,52,48, 10,56,48,52,48,10,52,54,56,48,10,50,70,48,48,10, 48,54,48,48,10,48,50,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,55,65,10,69,78, 67,79,68,73,78,71,32,57,56,53,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,50,48,48,10,48, 49,48,48,10,54,49,52,48,10,69,48,67,48,10,54,49, 67,48,10,52,48,48,48,10,52,48,48,48,10,56,48,52, 48,10,56,48,52,48,10,56,48,52,48,10,56,48,52,48, 10,52,54,56,48,10,50,70,48,48,10,48,54,48,48,10, 48,50,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,55,66,10,69,78,67,79,68,73,78, 71,32,57,56,53,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,67,48,48,10,51,69,56,48,10,51, 55,56,48,10,48,51,56,48,10,70,55,56,48,10,55,48, 48,48,10,55,48,67,48,10,68,50,67,48,10,67,54,67, 48,10,69,70,67,48,10,54,70,56,48,10,48,54,48,48, 10,48,50,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 54,55,67,10,69,78,67,79,68,73,78,71,32,57,56,53, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,67,48,48,10,51,69,48,48,10,54,55,48,48,10,53, 57,48,48,10,70,57,56,48,10,57,70,56,48,10,57,68, 56,48,10,66,69,56,48,10,66,69,56,48,10,66,69,56, 48,10,66,65,56,48,10,68,49,48,48,10,55,66,48,48, 10,55,69,48,48,10,51,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,54,55,68,10,69, 78,67,79,68,73,78,71,32,57,56,53,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,70,48,48,10, 52,48,56,48,10,56,67,52,48,10,57,51,52,48,10,56, 51,52,48,10,66,48,52,48,10,66,49,52,48,10,65,48, 67,48,10,65,48,67,48,10,65,48,67,48,10,65,50,67, 48,10,57,55,52,48,10,56,50,52,48,10,52,48,56,48, 10,51,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,56,48,10,69,78,67,79,68,73, 78,71,32,57,56,53,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,70,70,67,48,10,56, 48,52,48,10,56,48,52,48,10,56,48,52,48,10,56,67, 52,48,10,56,48,52,48,10,56,48,52,48,10,56,48,52, 48,10,70,70,67,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,56,49,10,69,78,67,79,68,73,78,71,32,57,56, 53,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,70,70,67,48,10,56,48,52,48,10,66, 48,52,48,10,56,48,52,48,10,56,48,52,48,10,56,48, 52,48,10,56,51,52,48,10,56,48,52,48,10,70,70,67, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,54,56,50,10, 69,78,67,79,68,73,78,71,32,57,56,53,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 70,70,67,48,10,56,48,52,48,10,66,48,52,48,10,56, 48,52,48,10,56,67,52,48,10,56,48,52,48,10,56,51, 52,48,10,56,48,52,48,10,70,70,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,54,56,51,10,69,78,67,79,68, 73,78,71,32,57,56,53,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,70,67,48,10, 56,48,52,48,10,66,51,52,48,10,56,48,52,48,10,56, 48,52,48,10,56,48,52,48,10,66,51,52,48,10,56,48, 52,48,10,70,70,67,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,56,52,10,69,78,67,79,68,73,78,71,32,57, 56,54,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,70,70,67,48,10,56,48,52,48,10, 66,51,52,48,10,56,48,52,48,10,56,67,52,48,10,56, 48,52,48,10,66,51,52,48,10,56,48,52,48,10,70,70, 67,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,56,53, 10,69,78,67,79,68,73,78,71,32,57,56,54,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,70,67,48,10,56,48,52,48,10,66,51,52,48,10, 56,48,52,48,10,66,51,52,48,10,56,48,52,48,10,66, 51,52,48,10,56,48,52,48,10,70,70,67,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,54,56,54,10,69,78,67,79, 68,73,78,71,32,57,56,54,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,67,48,48, 10,50,50,48,48,10,52,49,48,48,10,56,48,56,48,10, 56,54,56,48,10,56,48,56,48,10,52,49,48,48,10,50, 50,48,48,10,49,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,54,56,55,10,69,78,67,79,68,73,78,71,32, 57,56,54,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,67,48,48,10,50,50,48,48, 10,52,49,48,48,10,56,48,56,48,10,66,54,56,48,10, 56,48,56,48,10,52,49,48,48,10,50,50,48,48,10,49, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,56, 56,10,69,78,67,79,68,73,78,71,32,57,56,54,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,67,48,48,10,51,69,48,48,10,55,70,48,48, 10,70,70,56,48,10,70,57,56,48,10,70,70,56,48,10, 55,70,48,48,10,51,69,48,48,10,49,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,56,57,10,69,78,67, 79,68,73,78,71,32,57,56,54,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,67,48, 48,10,51,69,48,48,10,55,70,48,48,10,70,70,56,48, 10,67,57,56,48,10,70,70,56,48,10,55,70,48,48,10, 51,69,48,48,10,49,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,54,56,65,10,69,78,67,79,68,73,78,71, 32,57,56,54,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,54, 56,66,10,69,78,67,79,68,73,78,71,32,57,56,54,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,56,67,10,69,78, 67,79,68,73,78,71,32,57,56,54,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 56,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,56,68,10,69,78,67,79,68,73,78, 71,32,57,56,54,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 54,56,69,10,69,78,67,79,68,73,78,71,32,57,56,55, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,54,56,70,10,69, 78,67,79,68,73,78,71,32,57,56,55,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 51,56,48,10,55,51,56,48,10,48,48,48,48,10,48,48, 48,48,10,55,51,56,48,10,55,51,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,57,48,10,69,78,67,79,68,73, 78,71,32,57,56,55,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 70,56,48,48,10,56,55,56,48,10,56,48,56,48,10,56, 48,56,48,10,56,48,56,48,10,56,48,56,48,10,70,56, 56,48,10,56,55,56,48,10,56,48,48,48,10,56,48,48, 48,10,56,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,57,49,10,69,78,67,79,68,73,78,71,32,57,56, 55,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,56,48,48,10, 70,70,56,48,10,70,70,56,48,10,70,70,56,48,10,70, 70,56,48,10,70,70,56,48,10,70,70,56,48,10,56,55, 56,48,10,56,48,48,48,10,56,48,48,48,10,56,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,54,65,48,10, 69,78,67,79,68,73,78,71,32,57,56,56,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,56,48,48,10,48,56,48,48,10,49,52,48,48, 10,49,52,48,48,10,49,52,48,48,10,50,50,48,48,10, 50,65,48,48,10,50,65,48,48,10,50,65,48,48,10,52, 57,48,48,10,52,57,48,48,10,52,49,48,48,10,52,57, 48,48,10,56,56,56,48,10,56,48,56,48,10,70,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,54,65,49,10,69,78,67,79,68, 73,78,71,32,57,56,56,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,51,48,48,10,48,52,48,48,10, 49,56,48,48,10,50,48,48,48,10,51,56,48,48,10,48, 69,48,48,10,48,54,48,48,10,48,56,48,48,10,51,48, 48,48,10,52,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,48,49,10,69,78,67,79,68,73,78,71,32,57, 57,56,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,56,48,48,10,50,52,48,48, 10,50,52,48,48,10,49,56,48,48,10,54,67,48,48,10, 57,70,67,48,10,57,54,48,48,10,54,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,55,48,50, 10,69,78,67,79,68,73,78,71,32,57,57,56,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,48,48,48,10,57,48,48,48,10,57,48,67,48, 10,55,49,56,48,10,49,66,48,48,10,48,69,48,48,10, 48,69,48,48,10,49,66,48,48,10,55,49,56,48,10,57, 48,67,48,10,57,48,48,48,10,54,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,55,48,51,10,69,78,67,79, 68,73,78,71,32,57,57,56,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,48,48,48, 10,57,54,48,48,10,57,70,67,48,10,54,67,48,48,10, 49,56,48,48,10,50,52,48,48,10,50,52,48,48,10,49, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,55,48,52,10,69,78,67,79,68,73,78,71,32, 57,57,56,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,48,48,48,10,57,48,48, 48,10,57,49,67,48,10,55,50,56,48,10,50,68,48,48, 10,49,50,48,48,10,49,50,48,48,10,50,68,48,48,10, 55,50,56,48,10,57,49,67,48,10,57,48,48,48,10,54, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,48, 54,10,69,78,67,79,68,73,78,71,32,57,57,57,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,69,48,48,10,52,49,48, 48,10,57,67,56,48,10,66,67,56,48,10,66,48,56,48, 10,66,48,56,48,10,66,48,56,48,10,66,67,56,48,10, 66,67,56,48,10,65,49,48,48,10,50,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,55,48,56,10,69,78,67, 79,68,73,78,71,32,57,57,57,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,48,48, 48,10,49,56,48,48,10,48,67,48,48,10,56,54,48,48, 10,70,70,67,48,10,56,54,48,48,10,48,67,48,48,10, 49,56,48,48,10,51,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,55,48,57,10,69,78,67,79,68,73,78,71, 32,57,57,57,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,70,70,56,48,10,67,49,56,48,10,65,50,56,48, 10,57,67,56,48,10,65,50,56,48,10,67,49,56,48,10, 70,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,55, 48,70,10,69,78,67,79,68,73,78,71,32,57,57,57,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,69,48, 48,10,56,53,48,48,10,70,68,48,48,10,56,53,56,48, 10,70,68,48,48,10,56,53,48,48,10,55,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,49,49,10,69,78, 67,79,68,73,78,71,32,49,48,48,48,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,54,48,48,10,54,57, 48,48,10,57,56,56,48,10,56,51,56,48,10,57,56,56, 48,10,54,57,48,48,10,48,54,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,49,50,10,69,78,67,79,68,73, 78,71,32,49,48,48,48,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,54,48,48,10,54,70,48,48,10,70, 70,56,48,10,70,67,48,48,10,70,70,56,48,10,54,70, 48,48,10,48,54,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,49,51,10,69,78,67,79,68,73,78,71,32,49, 48,48,48,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,51,48,48,10,48,51,48,48, 10,54,51,48,48,10,54,54,48,48,10,51,54,48,48,10, 51,54,48,48,10,49,67,48,48,10,49,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,49, 55,10,69,78,67,79,68,73,78,71,32,49,48,48,48,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,54,51, 48,48,10,51,54,48,48,10,51,67,48,48,10,49,67,48, 48,10,49,67,48,48,10,51,69,48,48,10,51,54,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,49,57,10,69,78, 67,79,68,73,78,71,32,49,48,48,48,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 69,48,48,10,50,50,48,48,10,69,66,56,48,10,56,56, 56,48,10,66,69,56,48,10,56,56,56,48,10,69,66,56, 48,10,50,50,48,48,10,51,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,49,65,10,69,78,67,79,68,73, 78,71,32,49,48,48,49,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,67,48,48,10, 49,67,48,48,10,49,67,48,48,10,70,70,56,48,10,70, 70,56,48,10,70,70,56,48,10,49,67,48,48,10,49,67, 48,48,10,49,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,49,66,10,69,78,67,79,68,73,78,71,32,49, 48,48,49,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,55,51,56,48,10,55,51,56,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,49, 67,10,69,78,67,79,68,73,78,71,32,49,48,48,49,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,67,48,48,10,49,67,48,48,10,49,67,48, 48,10,69,51,56,48,10,69,51,56,48,10,69,51,56,48, 10,49,67,48,48,10,49,67,48,48,10,49,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,49,68,10,69,78, 67,79,68,73,78,71,32,49,48,48,49,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,55,69,48,48,10,55,69, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,49,69,10,69,78,67,79,68,73, 78,71,32,49,48,48,49,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,67,48,48,10,49,54,48,48,10,55,55,48,48,10, 52,49,48,48,10,55,55,48,48,10,51,55,48,48,10,49, 54,48,48,10,49,54,48,48,10,49,54,48,48,10,49,69, 48,48,10,48,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,49,70,10,69,78,67,79,68,73,78,71,32,49, 48,48,49,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,69,48,48,10,50,50,48, 48,10,69,66,56,48,10,56,56,56,48,10,66,69,56,48, 10,56,56,56,48,10,69,66,56,48,10,50,65,48,48,10, 50,65,48,48,10,50,65,48,48,10,50,50,48,48,10,51, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,50, 48,10,69,78,67,79,68,73,78,71,32,49,48,48,49,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,54,48,48,10,49,67,48,48,10,56,56,56, 48,10,67,57,56,48,10,55,55,48,48,10,67,57,56,48, 10,56,56,56,48,10,49,67,48,48,10,51,54,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,50,49,10,69,78, 67,79,68,73,78,71,32,49,48,48,49,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 56,48,48,10,49,52,48,48,10,70,70,56,48,10,65,50, 56,48,10,52,49,48,48,10,65,50,56,48,10,70,70,56, 48,10,49,52,48,48,10,48,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,50,50,10,69,78,67,79,68,73, 78,71,32,49,48,48,49,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,56,48,48,10, 49,67,48,48,10,48,56,48,48,10,52,57,48,48,10,70, 70,56,48,10,52,57,48,48,10,48,56,48,48,10,49,67, 48,48,10,48,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,50,51,10,69,78,67,79,68,73,78,71,32,49, 48,48,49,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,56,48,48,10,49,67,48,48, 10,49,67,48,48,10,54,66,48,48,10,70,70,56,48,10, 54,66,48,48,10,49,67,48,48,10,49,67,48,48,10,48, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,50, 52,10,69,78,67,79,68,73,78,71,32,49,48,48,50,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,56,48,48,10,49,67,48,48,10,49,67,48, 48,10,54,66,48,48,10,70,70,56,48,10,54,66,48,48, 10,49,67,48,48,10,49,67,48,48,10,48,56,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,50,53,10,69,78, 67,79,68,73,78,71,32,49,48,48,50,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 56,48,48,10,49,67,48,48,10,49,67,48,48,10,54,66, 48,48,10,70,70,56,48,10,54,66,48,48,10,49,67,48, 48,10,49,67,48,48,10,48,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,50,54,10,69,78,67,79,68,73, 78,71,32,49,48,48,50,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,56,48,48,10, 49,67,48,48,10,49,67,48,48,10,55,70,48,48,10,70, 70,56,48,10,55,70,48,48,10,49,67,48,48,10,49,67, 48,48,10,48,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,50,55,10,69,78,67,79,68,73,78,71,32,49, 48,48,50,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,56,48,48,10,49,52,48,48, 10,49,52,48,48,10,54,51,48,48,10,56,48,56,48,10, 54,51,48,48,10,49,52,48,48,10,49,52,48,48,10,48, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,50, 57,10,69,78,67,79,68,73,78,71,32,49,48,48,50,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,56,48,48,10,48,56,48,48,10,49,52,48, 48,10,70,55,56,48,10,52,49,48,48,10,50,50,48,48, 10,52,57,48,48,10,53,53,48,48,10,54,51,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,50,65,10,69,78, 67,79,68,73,78,71,32,49,48,48,50,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,48,48,10,70, 55,56,48,10,70,55,56,48,10,69,51,56,48,10,48,48, 48,48,10,56,48,56,48,10,67,49,56,48,10,67,57,56, 48,10,57,67,56,48,10,55,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,50,66,10,69,78,67,79,68,73, 78,71,32,49,48,48,50,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,56,48,48,10, 48,56,48,48,10,49,67,48,48,10,69,51,56,48,10,54, 51,48,48,10,50,50,48,48,10,55,70,48,48,10,55,55, 48,48,10,54,51,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,51,49,10,69,78,67,79,68,73,78,71,32,49, 48,48,51,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,56,48,48,10,68,66,48,48, 10,70,70,48,48,10,55,69,48,48,10,49,56,48,48,10, 55,69,48,48,10,70,70,48,48,10,68,66,48,48,10,49, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,51, 50,10,69,78,67,79,68,73,78,71,32,49,48,48,51,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,56,48,48,10,68,66,48,48,10,70,70,48, 48,10,54,54,48,48,10,50,52,48,48,10,54,54,48,48, 10,70,70,48,48,10,68,66,48,48,10,49,56,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,51,51,10,69,78, 67,79,68,73,78,71,32,49,48,48,51,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 56,48,48,10,52,57,48,48,10,50,65,48,48,10,49,67, 48,48,10,70,70,56,48,10,49,67,48,48,10,50,65,48, 48,10,52,57,48,48,10,48,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,51,52,10,69,78,67,79,68,73, 78,71,32,49,48,48,51,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,56,48,48,10, 52,57,48,48,10,51,69,48,48,10,51,69,48,48,10,70, 70,56,48,10,51,69,48,48,10,51,69,48,48,10,52,57, 48,48,10,48,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,51,53,10,69,78,67,79,68,73,78,71,32,49, 48,48,51,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,56,48,48,10,52,57,48,48,10,51,69,48,48,10, 49,67,48,48,10,51,69,48,48,10,52,57,48,48,10,48, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,51, 54,10,69,78,67,79,68,73,78,71,32,49,48,48,51,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,50,50,48,48,10,49,52,48,48,10,57,52,56, 48,10,55,70,48,48,10,49,67,48,48,10,55,70,48,48, 10,57,52,56,48,10,49,52,48,48,10,50,50,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,51,66,10,69,78, 67,79,68,73,78,71,32,49,48,48,52,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,67,48,48,10,49,67,48,48,10,67, 57,56,48,10,67,57,56,48,10,51,69,48,48,10,49,67, 48,48,10,51,69,48,48,10,67,57,56,48,10,67,57,56, 48,10,49,67,48,48,10,49,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,51,67,10,69,78,67,79,68,73, 78,71,32,49,48,48,52,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,67,48,48,10,49,67,48,48,10,67,57,56,48,10, 67,57,56,48,10,51,69,48,48,10,49,67,48,48,10,51, 69,48,48,10,67,57,56,48,10,67,57,56,48,10,49,67, 48,48,10,49,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,52,68,10,69,78,67,79,68,73,78,71,32,49, 48,48,54,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,69,48,48,10,52,51,48,48, 10,56,49,56,48,10,56,49,56,48,10,56,49,56,48,10, 56,49,56,48,10,52,51,48,48,10,51,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,52, 70,10,69,78,67,79,68,73,78,71,32,49,48,48,54,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,70,69,48,48,10,56,50,48,48,10,56,51,56, 48,10,56,51,56,48,10,56,51,56,48,10,56,51,56,48, 10,70,70,56,48,10,51,70,56,48,10,51,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,53,48,10,69,78, 67,79,68,73,78,71,32,49,48,48,54,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 70,56,48,10,51,70,56,48,10,70,70,56,48,10,56,51, 56,48,10,56,51,56,48,10,56,51,56,48,10,56,51,56, 48,10,56,50,48,48,10,70,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,53,49,10,69,78,67,79,68,73, 78,71,32,49,48,48,54,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 70,69,48,48,10,56,51,48,48,10,56,51,48,48,10,56, 51,48,48,10,56,51,48,48,10,56,51,48,48,10,70,70, 48,48,10,55,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,53,50,10,69,78,67,79,68,73,78,71,32,49, 48,48,54,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,70,48,48, 10,70,70,48,48,10,56,51,48,48,10,56,51,48,48,10, 56,51,48,48,10,56,51,48,48,10,56,51,48,48,10,70, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,53, 54,10,69,78,67,79,68,73,78,71,32,49,48,48,55,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,56,48,48,10,49,67,48,48,10,49,67,48, 48,10,54,66,48,48,10,70,55,56,48,10,54,66,48,48, 10,49,67,48,48,10,49,67,48,48,10,48,56,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,53,56,10,69,78, 67,79,68,73,78,71,32,49,48,48,55,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,53,57,10,69,78,67,79,68,73, 78,71,32,49,48,48,55,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,53,65,10,69,78,67,79,68,73,78,71,32,49, 48,48,55,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,67,48,48,10,49,67,48,48,10,49,67,48,48, 10,49,67,48,48,10,49,67,48,48,10,49,67,48,48,10, 49,67,48,48,10,49,67,48,48,10,49,67,48,48,10,49, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,53, 66,10,69,78,67,79,68,73,78,71,32,49,48,48,55,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,69,48,48,10,49,48, 48,48,10,49,67,48,48,10,49,69,48,48,10,49,69,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,53,67,10,69,78, 67,79,68,73,78,71,32,49,48,48,55,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,69,48,48,10,49, 69,48,48,10,48,69,48,48,10,48,50,48,48,10,49,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,53,68,10,69,78,67,79,68,73, 78,71,32,49,48,48,55,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,51,56,48,10,56,52,48,48,10,69,55,48,48,10, 70,55,56,48,10,70,55,56,48,10,54,51,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,53,69,10,69,78,67,79,68,73,78,71,32,49, 48,48,55,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,51,48, 48,10,70,55,56,48,10,70,55,56,48,10,55,51,56,48, 10,49,48,56,48,10,69,55,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,55, 54,10,69,78,67,79,68,73,78,71,32,49,48,49,48,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,48,48,10,70,55,56,48,10,69,55,56, 48,10,70,55,56,48,10,70,55,56,48,10,70,55,56,48, 10,70,55,56,48,10,69,51,56,48,10,55,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,55,55,10,69,78, 67,79,68,73,78,71,32,49,48,49,48,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,48,48,10,69,51,56,48,10,68,68,56,48,10,70,68, 56,48,10,70,66,56,48,10,70,55,56,48,10,69,68,56, 48,10,67,49,56,48,10,55,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,55,56,10,69,78,67,79,68,73, 78,71,32,49,48,49,48,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,48,48,10, 69,51,56,48,10,68,68,56,48,10,70,68,56,48,10,70, 51,56,48,10,70,68,56,48,10,68,68,56,48,10,69,51, 56,48,10,55,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,55,57,10,69,78,67,79,68,73,78,71,32,49, 48,49,48,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,48,48,10,70,51,56,48, 10,69,66,56,48,10,68,66,56,48,10,67,49,56,48,10, 70,66,56,48,10,70,66,56,48,10,70,49,56,48,10,55, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,55, 65,10,69,78,67,79,68,73,78,71,32,49,48,49,48,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,48,48,10,67,49,56,48,10,68,70,56, 48,10,68,70,56,48,10,67,51,56,48,10,70,68,56,48, 10,70,68,56,48,10,67,51,56,48,10,55,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,55,66,10,69,78, 67,79,68,73,78,71,32,49,48,49,48,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,48,48,10,69,49,56,48,10,68,70,56,48,10,68,70, 56,48,10,67,51,56,48,10,68,68,56,48,10,68,68,56, 48,10,69,51,56,48,10,55,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,55,67,10,69,78,67,79,68,73, 78,71,32,49,48,49,48,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,48,48,10, 67,49,56,48,10,70,68,56,48,10,70,66,56,48,10,70, 66,56,48,10,70,55,56,48,10,70,55,56,48,10,70,55, 56,48,10,55,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,55,68,10,69,78,67,79,68,73,78,71,32,49, 48,49,48,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,48,48,10,69,51,56,48, 10,68,68,56,48,10,68,68,56,48,10,69,51,56,48,10, 68,68,56,48,10,68,68,56,48,10,69,51,56,48,10,55, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,55, 69,10,69,78,67,79,68,73,78,71,32,49,48,49,49,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,48,48,10,69,49,56,48,10,68,68,56, 48,10,68,68,56,48,10,69,49,56,48,10,70,68,56,48, 10,70,68,56,48,10,69,51,56,48,10,55,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,55,70,10,69,78, 67,79,68,73,78,71,32,49,48,49,49,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,48,48,10,68,66,56,48,10,68,53,56,48,10,68,53, 56,48,10,68,53,56,48,10,68,53,56,48,10,68,53,56, 48,10,68,66,56,48,10,55,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,56,48,10,69,78,67,79,68,73, 78,71,32,49,48,49,49,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,48,48,10, 56,48,56,48,10,56,56,56,48,10,57,56,56,48,10,56, 56,56,48,10,56,56,56,48,10,57,67,56,48,10,56,48, 56,48,10,55,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,56,49,10,69,78,67,79,68,73,78,71,32,49, 48,49,49,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,48,48,10,56,48,56,48, 10,57,56,56,48,10,56,52,56,48,10,56,52,56,48,10, 56,56,56,48,10,57,67,56,48,10,56,48,56,48,10,55, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,56, 50,10,69,78,67,79,68,73,78,71,32,49,48,49,49,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,48,48,10,56,48,56,48,10,57,56,56, 48,10,56,52,56,48,10,56,56,56,48,10,56,52,56,48, 10,57,56,56,48,10,56,48,56,48,10,55,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,56,51,10,69,78, 67,79,68,73,78,71,32,49,48,49,49,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,48,48,10,56,48,56,48,10,56,56,56,48,10,57,56, 56,48,10,65,56,56,48,10,66,67,56,48,10,56,56,56, 48,10,56,48,56,48,10,55,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,56,52,10,69,78,67,79,68,73, 78,71,32,49,48,49,49,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,48,48,10, 56,48,56,48,10,57,67,56,48,10,57,48,56,48,10,57, 56,56,48,10,56,52,56,48,10,57,56,56,48,10,56,48, 56,48,10,55,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,56,53,10,69,78,67,79,68,73,78,71,32,49, 48,49,49,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,48,48,10,56,48,56,48, 10,56,67,56,48,10,57,48,56,48,10,57,56,56,48,10, 57,52,56,48,10,56,56,56,48,10,56,48,56,48,10,55, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,56, 54,10,69,78,67,79,68,73,78,71,32,49,48,49,49,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,48,48,10,56,48,56,48,10,57,67,56, 48,10,56,52,56,48,10,56,56,56,48,10,56,56,56,48, 10,56,56,56,48,10,56,48,56,48,10,55,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,56,55,10,69,78, 67,79,68,73,78,71,32,49,48,49,49,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,48,48,10,56,48,56,48,10,56,56,56,48,10,57,52, 56,48,10,56,56,56,48,10,57,52,56,48,10,56,56,56, 48,10,56,48,56,48,10,55,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,56,56,10,69,78,67,79,68,73, 78,71,32,49,48,49,50,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,48,48,10, 56,48,56,48,10,56,56,56,48,10,57,52,56,48,10,56, 67,56,48,10,56,52,56,48,10,56,56,56,48,10,56,48, 56,48,10,55,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,56,57,10,69,78,67,79,68,73,78,71,32,49, 48,49,50,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,48,48,10,56,48,56,48, 10,65,52,56,48,10,65,65,56,48,10,65,65,56,48,10, 65,65,56,48,10,65,52,56,48,10,56,48,56,48,10,55, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,56, 65,10,69,78,67,79,68,73,78,71,32,49,48,49,50,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,48,48,10,70,55,56,48,10,69,55,56, 48,10,70,55,56,48,10,70,55,56,48,10,70,55,56,48, 10,70,55,56,48,10,70,55,56,48,10,55,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,56,66,10,69,78, 67,79,68,73,78,71,32,49,48,49,50,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,48,48,10,69,51,56,48,10,68,68,56,48,10,70,68, 56,48,10,70,66,56,48,10,70,55,56,48,10,69,70,56, 48,10,67,49,56,48,10,55,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,56,67,10,69,78,67,79,68,73, 78,71,32,49,48,49,50,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,48,48,10, 69,51,56,48,10,68,68,56,48,10,70,68,56,48,10,70, 51,56,48,10,70,68,56,48,10,68,68,56,48,10,69,51, 56,48,10,55,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,56,68,10,69,78,67,79,68,73,78,71,32,49, 48,49,50,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,48,48,10,70,51,56,48, 10,69,66,56,48,10,68,66,56,48,10,67,49,56,48,10, 70,66,56,48,10,70,66,56,48,10,70,66,56,48,10,55, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,56, 69,10,69,78,67,79,68,73,78,71,32,49,48,49,50,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,48,48,10,67,49,56,48,10,68,70,56, 48,10,68,70,56,48,10,67,51,56,48,10,70,68,56,48, 10,70,68,56,48,10,67,51,56,48,10,55,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,56,70,10,69,78, 67,79,68,73,78,71,32,49,48,49,50,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,48,48,10,69,49,56,48,10,68,70,56,48,10,68,70, 56,48,10,67,51,56,48,10,68,68,56,48,10,68,68,56, 48,10,69,51,56,48,10,55,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,57,48,10,69,78,67,79,68,73, 78,71,32,49,48,49,50,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,48,48,10, 67,49,56,48,10,70,68,56,48,10,70,66,56,48,10,70, 66,56,48,10,70,55,56,48,10,70,55,56,48,10,70,55, 56,48,10,55,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,57,49,10,69,78,67,79,68,73,78,71,32,49, 48,49,50,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,48,48,10,69,51,56,48, 10,68,68,56,48,10,68,68,56,48,10,69,51,56,48,10, 68,68,56,48,10,68,68,56,48,10,69,51,56,48,10,55, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,57, 50,10,69,78,67,79,68,73,78,71,32,49,48,49,51,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,48,48,10,69,49,56,48,10,68,68,56, 48,10,68,68,56,48,10,69,49,56,48,10,70,68,56,48, 10,70,68,56,48,10,69,51,56,48,10,55,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,57,51,10,69,78, 67,79,68,73,78,71,32,49,48,49,51,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,48,48,10,68,66,56,48,10,68,53,56,48,10,68,53, 56,48,10,68,53,56,48,10,68,53,56,48,10,68,53,56, 48,10,68,66,56,48,10,55,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,57,52,10,69,78,67,79,68,73, 78,71,32,49,48,49,51,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,56,48,48,10, 48,67,48,48,10,48,54,48,48,10,55,70,48,48,10,55, 70,48,48,10,48,54,48,48,10,48,67,48,48,10,49,56, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,57,56,10,69,78,67,79,68,73,78,71,32,49, 48,49,51,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,48,48,48,10,55,68,48,48,10, 49,70,48,48,10,48,55,48,48,10,48,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,57, 57,10,69,78,67,79,68,73,78,71,32,49,48,49,51,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,52,48,48,10,48,54,48, 48,10,55,51,48,48,10,55,70,56,48,10,55,51,48,48, 10,48,54,48,48,10,48,52,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,57,65,10,69,78, 67,79,68,73,78,71,32,49,48,49,51,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,70, 48,48,10,48,55,48,48,10,49,70,48,48,10,55,68,48, 48,10,55,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,57,66,10,69,78,67,79,68,73, 78,71,32,49,48,49,51,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,48,48,48,10,49,67,48,48,10,49, 70,48,48,10,70,70,56,48,10,49,70,48,48,10,49,67, 48,48,10,51,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,57,67,10,69,78,67,79,68,73,78,71,32,49, 48,49,52,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,67,48,48,10,49,69,48,48, 10,48,70,48,48,10,70,70,56,48,10,70,70,56,48,10, 70,70,56,48,10,48,70,48,48,10,49,69,48,48,10,49, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,57, 68,10,69,78,67,79,68,73,78,71,32,49,48,49,52,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,50,48,48,10,48,51,48,48,10,70,70,56,48, 10,48,51,48,48,10,48,50,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,57,69,10,69,78, 67,79,68,73,78,71,32,49,48,49,52,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,52,48,48,10,48,54, 48,48,10,70,70,48,48,10,70,70,56,48,10,70,70,48, 48,10,48,54,48,48,10,48,52,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,57,70,10,69,78,67,79,68,73, 78,71,32,49,48,49,52,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,50,48,48,10,66, 55,48,48,10,66,55,56,48,10,66,55,48,48,10,48,50, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,65,48,10,69,78,67,79,68,73,78,71,32,49, 48,49,52,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,50,48,48,10,65,66,48,48,10, 65,66,56,48,10,65,66,48,48,10,48,50,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,65, 49,10,69,78,67,79,68,73,78,71,32,49,48,49,52,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,50,48,48,10,70,70,48,48,10,70,70,56,48, 10,70,70,48,48,10,48,50,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,65,50,10,69,78, 67,79,68,73,78,71,32,49,48,49,52,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,56, 48,48,48,10,55,48,48,48,10,52,69,48,48,10,50,49, 56,48,10,49,70,56,48,10,51,69,48,48,10,55,48,48, 48,10,56,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,65,51,10,69,78,67,79,68,73, 78,71,32,49,48,49,52,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,56,48,48,48,10, 55,48,48,48,10,51,69,48,48,10,49,70,56,48,10,50, 49,56,48,10,52,69,48,48,10,55,48,48,48,10,56,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,65,52,10,69,78,67,79,68,73,78,71,32,49, 48,49,52,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,56,48,48,48,10,55,48,48,48, 10,51,69,48,48,10,49,70,56,48,10,49,70,56,48,10, 51,69,48,48,10,55,48,48,48,10,56,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,65, 53,10,69,78,67,79,68,73,78,71,32,49,48,49,52,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,56,52,48, 48,10,56,54,48,48,10,70,70,48,48,10,70,70,56,48, 10,55,70,48,48,10,48,54,48,48,10,48,52,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,65,54,10,69,78, 67,79,68,73,78,71,32,49,48,49,53,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,52,48,48,10,48,54, 48,48,10,55,70,48,48,10,70,70,56,48,10,70,70,48, 48,10,56,54,48,48,10,56,52,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,65,55,10,69,78,67,79,68,73, 78,71,32,49,48,49,53,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,52,48,48,10, 48,52,48,48,10,51,69,48,48,10,51,69,48,48,10,51, 70,48,48,10,51,69,48,48,10,51,69,48,48,10,48,52, 48,48,10,48,52,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,65,56,10,69,78,67,79,68,73,78,71,32,49, 48,49,53,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,52,48,48,10,48,52,48,48,10,70,69,48,48, 10,70,69,48,48,10,70,70,48,48,10,70,69,48,48,10, 70,69,48,48,10,48,52,48,48,10,48,52,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,65, 57,10,69,78,67,79,68,73,78,71,32,49,48,49,53,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,56,48,48,10,49,67,48,48,10,49,54,48, 48,10,70,51,48,48,10,56,49,56,48,10,70,51,48,48, 10,49,54,48,48,10,49,67,48,48,10,49,56,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,65,65,10,69,78, 67,79,68,73,78,71,32,49,48,49,53,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,49,67,48,48,10,49,65,48,48,10,70,57, 48,48,10,67,48,56,48,10,70,57,48,48,10,49,65,48, 48,10,49,67,48,48,10,49,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,65,66,10,69,78,67,79,68,73, 78,71,32,49,48,49,53,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,56,48,10, 48,49,56,48,10,51,69,56,48,10,52,48,56,48,10,56, 49,56,48,10,70,51,48,48,10,69,69,48,48,10,51,67, 48,48,10,51,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,65,67,10,69,78,67,79,68,73,78,71,32,49, 48,49,53,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,56,48,48,10,51,67,48,48, 10,69,69,48,48,10,70,51,48,48,10,56,49,56,48,10, 52,48,56,48,10,51,69,56,48,10,48,49,56,48,10,48, 48,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,65, 68,10,69,78,67,79,68,73,78,71,32,49,48,49,53,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,48, 48,48,10,49,56,48,48,10,49,52,48,48,10,70,50,48, 48,10,56,49,48,48,10,70,51,48,48,10,55,54,48,48, 10,49,67,48,48,10,49,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,65,69,10,69,78, 67,79,68,73,78,71,32,49,48,49,53,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,56,48,48,10,49, 67,48,48,10,55,54,48,48,10,70,51,48,48,10,56,49, 48,48,10,70,50,48,48,10,49,52,48,48,10,49,56,48, 48,10,49,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,65,70,10,69,78,67,79,68,73, 78,71,32,49,48,49,53,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,52,48,48,10, 70,65,48,48,10,56,49,48,48,10,52,48,56,48,10,56, 49,56,48,10,70,66,48,48,10,48,54,48,48,10,48,52, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,66,49,10,69,78,67,79,68,73,78,71,32,49, 48,49,54,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,52,48,48,10,48,54,48,48,10,70,66,48,48, 10,56,49,56,48,10,52,48,56,48,10,56,49,48,48,10, 70,65,48,48,10,48,52,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,66, 50,10,69,78,67,79,68,73,78,71,32,49,48,49,54,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,67, 48,48,10,55,70,48,48,10,70,66,56,48,10,48,49,56, 48,10,48,48,56,48,10,48,49,56,48,10,70,66,56,48, 10,55,70,48,48,10,49,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,66,51,10,69,78, 67,79,68,73,78,71,32,49,48,49,54,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,68,50,48,48,10,50,66,48,48,10,55,70, 56,48,10,50,66,48,48,10,68,50,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,66,52,10,69,78,67,79,68,73, 78,71,32,49,48,49,54,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,48,48,48,10, 51,56,48,48,10,53,67,48,48,10,69,67,48,48,10,55, 52,48,48,10,51,67,48,48,10,48,50,56,48,10,48,49, 56,48,10,48,51,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,66,53,10,69,78,67,79,68,73,78,71,32,49, 48,49,54,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,50,48,48,10,55,66,48,48,10,48,55,56,48,10, 55,66,48,48,10,70,50,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,66, 54,10,69,78,67,79,68,73,78,71,32,49,48,49,54,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,51,56,48,10,48,49,56,48,10,48,50,56, 48,10,51,67,48,48,10,55,52,48,48,10,69,67,48,48, 10,53,67,48,48,10,51,56,48,48,10,49,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,66,55,10,69,78, 67,79,68,73,78,71,32,49,48,49,54,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 48,48,48,10,49,56,48,48,10,49,67,48,48,10,70,67, 48,48,10,55,67,48,48,10,51,67,48,48,10,48,50,56, 48,10,48,49,56,48,10,48,51,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,66,56,10,69,78,67,79,68,73, 78,71,32,49,48,49,54,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,70,50,48,48,10,55,66,48,48,10,55, 70,56,48,10,55,66,48,48,10,70,50,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,66,57,10,69,78,67,79,68,73,78,71,32,49, 48,49,54,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,51,56,48,10,48,49,56,48, 10,48,50,56,48,10,51,67,48,48,10,55,67,48,48,10, 70,67,48,48,10,49,67,48,48,10,49,56,48,48,10,49, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,66, 69,10,69,78,67,79,68,73,78,71,32,49,48,49,55,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,52,48,48,10,48,65,48, 48,10,70,68,48,48,10,48,48,56,48,10,70,68,48,48, 10,48,65,48,48,10,49,52,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,68,53,10,69,78, 67,79,68,73,78,71,32,49,48,49,57,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,48,56,48,10,51,49,56,48,10,51,49,56,48,10,50, 65,56,48,10,50,65,56,48,10,50,52,56,48,10,50,52, 56,48,10,50,65,56,48,10,50,65,56,48,10,51,49,56, 48,10,51,49,56,48,10,69,48,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,68,54,10,69,78,67,79,68,73, 78,71,32,49,48,49,57,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,56,51,56,48, 10,67,54,48,48,10,67,54,48,48,10,65,65,48,48,10, 65,65,48,48,10,57,50,48,48,10,57,50,48,48,10,65, 65,48,48,10,65,65,48,48,10,67,54,48,48,10,67,54, 48,48,10,56,51,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,68,55,10,69,78,67,79,68,73,78,71,32,49, 48,49,57,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,67,49,56,48,10,54,51,48, 48,10,54,51,48,48,10,53,53,48,48,10,53,53,48,48, 10,52,57,48,48,10,52,57,48,48,10,53,53,48,48,10, 53,53,48,48,10,54,51,48,48,10,54,51,48,48,10,67, 49,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,69, 54,10,69,78,67,79,68,73,78,71,32,49,48,50,49,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,54,67,48,48,10,54,67,48,48,10,54,67, 48,48,10,54,67,48,48,10,54,67,48,48,10,54,67,48, 48,10,54,67,48,48,10,54,67,48,48,10,54,67,48,48, 10,54,67,48,48,10,54,67,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,69,55,10,69,78, 67,79,68,73,78,71,32,49,48,50,49,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 48,68,56,48,10,48,68,56,48,10,48,68,56,48,10,48, 68,56,48,10,48,68,56,48,10,48,68,56,48,10,48,68, 56,48,10,48,68,56,48,10,48,68,56,48,10,48,68,56, 48,10,48,68,56,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,69,56,10,69,78,67,79,68,73, 78,71,32,49,48,50,49,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,49,48,48,10,48,51,48,48, 10,48,50,48,48,10,48,54,48,48,10,48,52,48,48,10, 48,67,48,48,10,48,56,48,48,10,48,67,48,48,10,48, 52,48,48,10,48,54,48,48,10,48,50,48,48,10,48,51, 48,48,10,48,49,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,69,57,10,69,78,67,79,68,73,78,71,32,49, 48,50,49,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,56,48,48,10,48,67,48,48,10,48,52,48, 48,10,48,54,48,48,10,48,50,48,48,10,48,51,48,48, 10,48,49,48,48,10,48,51,48,48,10,48,50,48,48,10, 48,54,48,48,10,48,52,48,48,10,48,67,48,48,10,48, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,69, 65,10,69,78,67,79,68,73,78,71,32,49,48,50,49,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 57,48,48,10,49,66,48,48,10,49,50,48,48,10,51,54, 48,48,10,50,52,48,48,10,54,67,48,48,10,52,56,48, 48,10,54,67,48,48,10,50,52,48,48,10,51,54,48,48, 10,49,50,48,48,10,49,66,48,48,10,48,57,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,69,66,10,69,78, 67,79,68,73,78,71,32,49,48,50,49,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,50,52,48,48,10, 51,54,48,48,10,49,50,48,48,10,49,66,48,48,10,48, 57,48,48,10,48,68,56,48,10,48,52,56,48,10,48,68, 56,48,10,48,57,48,48,10,49,66,48,48,10,49,50,48, 48,10,51,54,48,48,10,50,52,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,70,53,10,69,78,67,79,68,73, 78,71,32,49,48,50,50,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,51,48,48,48,10, 54,48,48,48,10,70,70,67,48,10,70,70,67,48,10,54, 48,48,48,10,51,48,48,48,10,49,56,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,70,54,10,69,78,67,79,68,73,78,71,32,49, 48,50,51,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,54,48,48,10,48,51,48,48,10,48,49,56,48, 10,70,70,67,48,10,70,70,67,48,10,48,49,56,48,10, 48,51,48,48,10,48,54,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,70, 55,10,69,78,67,79,68,73,78,71,32,49,48,50,51,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,50, 48,48,10,51,51,48,48,10,54,49,56,48,10,70,70,67, 48,10,70,70,67,48,10,54,49,56,48,10,51,51,48,48, 10,49,50,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,70,56,10,69,78, 67,79,68,73,78,71,32,49,48,50,51,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,56,48,48,10,51, 70,67,48,10,55,70,67,48,10,67,48,48,48,10,55,70, 67,48,10,51,70,67,48,10,49,56,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,70,57,10,69,78,67,79,68,73, 78,71,32,49,48,50,51,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,54,48,48,10,70,70,48,48,10, 70,70,56,48,10,48,48,67,48,10,70,70,56,48,10,70, 70,48,48,10,48,54,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,70,65,10,69,78,67,79,68,73,78,71,32,49, 48,50,51,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,50,48, 48,10,51,51,48,48,10,55,70,56,48,10,70,70,67,48, 10,56,48,67,48,10,70,70,67,48,10,55,70,56,48,10, 51,51,48,48,10,49,50,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,70, 66,10,69,78,67,79,68,73,78,71,32,49,48,50,51,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,56, 67,48,10,51,48,67,48,10,54,48,67,48,10,70,70,67, 48,10,70,70,67,48,10,54,48,67,48,10,51,48,67,48, 10,49,56,67,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,70,67,10,69,78, 67,79,68,73,78,71,32,49,48,50,51,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,67,54,48,48,10,67, 51,48,48,10,67,49,56,48,10,70,70,67,48,10,70,70, 67,48,10,67,49,56,48,10,67,51,48,48,10,67,54,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,70,68,10,69,78,67,79,68,73, 78,71,32,49,48,50,51,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,52,48,10,49,56,52,48,10,51,70,67,48,10, 55,70,67,48,10,67,48,52,48,10,55,70,67,48,10,51, 70,67,48,10,49,56,52,48,10,48,67,52,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,70,69,10,69,78,67,79,68,73,78,71,32,49, 48,50,51,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,56,67,48, 48,10,56,54,48,48,10,70,70,48,48,10,70,70,56,48, 10,56,48,67,48,10,70,70,56,48,10,70,70,48,48,10, 56,54,48,48,10,56,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,70, 70,10,69,78,67,79,68,73,78,71,32,49,48,50,51,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,54, 48,48,10,48,51,48,48,10,65,66,56,48,10,65,65,67, 48,10,53,53,67,48,10,53,53,56,48,10,48,51,48,48, 10,48,54,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,48,48,10,69,78, 67,79,68,73,78,71,32,49,48,50,52,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,48,49,10,69,78,67,79,68,73, 78,71,32,49,48,50,52,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,48,50,10,69,78,67,79,68,73,78,71,32,49, 48,50,52,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,48, 51,10,69,78,67,79,68,73,78,71,32,49,48,50,52,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,48,52,10,69,78, 67,79,68,73,78,71,32,49,48,50,52,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,48,53,10,69,78,67,79,68,73, 78,71,32,49,48,50,52,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,48,54,10,69,78,67,79,68,73,78,71,32,49, 48,50,52,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,48, 55,10,69,78,67,79,68,73,78,71,32,49,48,50,52,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,48,56,10,69,78, 67,79,68,73,78,71,32,49,48,50,52,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,48,57,10,69,78,67,79,68,73, 78,71,32,49,48,50,52,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,48,65,10,69,78,67,79,68,73,78,71,32,49, 48,50,53,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,48, 66,10,69,78,67,79,68,73,78,71,32,49,48,50,53,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,48,67,10,69,78, 67,79,68,73,78,71,32,49,48,50,53,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,48,68,10,69,78,67,79,68,73, 78,71,32,49,48,50,53,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,48,69,10,69,78,67,79,68,73,78,71,32,49, 48,50,53,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,48, 70,10,69,78,67,79,68,73,78,71,32,49,48,50,53,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,49,48,10,69,78, 67,79,68,73,78,71,32,49,48,50,53,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,49,49,10,69,78,67,79,68,73, 78,71,32,49,48,50,53,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,49,50,10,69,78,67,79,68,73,78,71,32,49, 48,50,53,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,49, 51,10,69,78,67,79,68,73,78,71,32,49,48,50,53,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,49,52,10,69,78, 67,79,68,73,78,71,32,49,48,50,54,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,49,53,10,69,78,67,79,68,73, 78,71,32,49,48,50,54,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,49,54,10,69,78,67,79,68,73,78,71,32,49, 48,50,54,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,49, 55,10,69,78,67,79,68,73,78,71,32,49,48,50,54,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,49,56,10,69,78, 67,79,68,73,78,71,32,49,48,50,54,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,49,57,10,69,78,67,79,68,73, 78,71,32,49,48,50,54,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,49,65,10,69,78,67,79,68,73,78,71,32,49, 48,50,54,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,49, 66,10,69,78,67,79,68,73,78,71,32,49,48,50,54,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,49,67,10,69,78, 67,79,68,73,78,71,32,49,48,50,54,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,49,68,10,69,78,67,79,68,73, 78,71,32,49,48,50,54,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,49,69,10,69,78,67,79,68,73,78,71,32,49, 48,50,55,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,49, 70,10,69,78,67,79,68,73,78,71,32,49,48,50,55,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,50,48,10,69,78, 67,79,68,73,78,71,32,49,48,50,55,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,50,49,10,69,78,67,79,68,73, 78,71,32,49,48,50,55,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,50,50,10,69,78,67,79,68,73,78,71,32,49, 48,50,55,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,50, 51,10,69,78,67,79,68,73,78,71,32,49,48,50,55,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,50,52,10,69,78, 67,79,68,73,78,71,32,49,48,50,55,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,50,53,10,69,78,67,79,68,73, 78,71,32,49,48,50,55,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,50,54,10,69,78,67,79,68,73,78,71,32,49, 48,50,55,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,50, 55,10,69,78,67,79,68,73,78,71,32,49,48,50,55,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,50,56,10,69,78, 67,79,68,73,78,71,32,49,48,50,56,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,50,57,10,69,78,67,79,68,73, 78,71,32,49,48,50,56,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,50,65,10,69,78,67,79,68,73,78,71,32,49, 48,50,56,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,50, 66,10,69,78,67,79,68,73,78,71,32,49,48,50,56,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,50,67,10,69,78, 67,79,68,73,78,71,32,49,48,50,56,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,50,68,10,69,78,67,79,68,73, 78,71,32,49,48,50,56,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,50,69,10,69,78,67,79,68,73,78,71,32,49, 48,50,56,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,50, 70,10,69,78,67,79,68,73,78,71,32,49,48,50,56,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,51,48,10,69,78, 67,79,68,73,78,71,32,49,48,50,56,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,51,49,10,69,78,67,79,68,73, 78,71,32,49,48,50,56,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,51,50,10,69,78,67,79,68,73,78,71,32,49, 48,50,57,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,51, 51,10,69,78,67,79,68,73,78,71,32,49,48,50,57,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,51,52,10,69,78, 67,79,68,73,78,71,32,49,48,50,57,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,51,53,10,69,78,67,79,68,73, 78,71,32,49,48,50,57,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,51,54,10,69,78,67,79,68,73,78,71,32,49, 48,50,57,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,51, 55,10,69,78,67,79,68,73,78,71,32,49,48,50,57,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,51,56,10,69,78, 67,79,68,73,78,71,32,49,48,50,57,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,51,57,10,69,78,67,79,68,73, 78,71,32,49,48,50,57,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,51,65,10,69,78,67,79,68,73,78,71,32,49, 48,50,57,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,51, 66,10,69,78,67,79,68,73,78,71,32,49,48,50,57,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,51,67,10,69,78, 67,79,68,73,78,71,32,49,48,51,48,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,51,68,10,69,78,67,79,68,73, 78,71,32,49,48,51,48,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,51,69,10,69,78,67,79,68,73,78,71,32,49, 48,51,48,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,51, 70,10,69,78,67,79,68,73,78,71,32,49,48,51,48,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,52,48,10,69,78, 67,79,68,73,78,71,32,49,48,51,48,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,52,49,10,69,78,67,79,68,73, 78,71,32,49,48,51,48,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,52,50,10,69,78,67,79,68,73,78,71,32,49, 48,51,48,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,52, 51,10,69,78,67,79,68,73,78,71,32,49,48,51,48,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,52,52,10,69,78, 67,79,68,73,78,71,32,49,48,51,48,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,52,53,10,69,78,67,79,68,73, 78,71,32,49,48,51,48,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,52,54,10,69,78,67,79,68,73,78,71,32,49, 48,51,49,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,52, 55,10,69,78,67,79,68,73,78,71,32,49,48,51,49,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,52,56,10,69,78, 67,79,68,73,78,71,32,49,48,51,49,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,52,57,10,69,78,67,79,68,73, 78,71,32,49,48,51,49,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,52,65,10,69,78,67,79,68,73,78,71,32,49, 48,51,49,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,52, 66,10,69,78,67,79,68,73,78,71,32,49,48,51,49,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,52,67,10,69,78, 67,79,68,73,78,71,32,49,48,51,49,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,52,68,10,69,78,67,79,68,73, 78,71,32,49,48,51,49,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,52,69,10,69,78,67,79,68,73,78,71,32,49, 48,51,49,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,52, 70,10,69,78,67,79,68,73,78,71,32,49,48,51,49,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,53,48,10,69,78, 67,79,68,73,78,71,32,49,48,51,50,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,53,49,10,69,78,67,79,68,73, 78,71,32,49,48,51,50,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,53,50,10,69,78,67,79,68,73,78,71,32,49, 48,51,50,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,53, 51,10,69,78,67,79,68,73,78,71,32,49,48,51,50,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,53,52,10,69,78, 67,79,68,73,78,71,32,49,48,51,50,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,53,53,10,69,78,67,79,68,73, 78,71,32,49,48,51,50,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,53,54,10,69,78,67,79,68,73,78,71,32,49, 48,51,50,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,53, 55,10,69,78,67,79,68,73,78,71,32,49,48,51,50,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,53,56,10,69,78, 67,79,68,73,78,71,32,49,48,51,50,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,53,57,10,69,78,67,79,68,73, 78,71,32,49,48,51,50,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,53,65,10,69,78,67,79,68,73,78,71,32,49, 48,51,51,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,53, 66,10,69,78,67,79,68,73,78,71,32,49,48,51,51,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,53,67,10,69,78, 67,79,68,73,78,71,32,49,48,51,51,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,53,68,10,69,78,67,79,68,73, 78,71,32,49,48,51,51,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,53,69,10,69,78,67,79,68,73,78,71,32,49, 48,51,51,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,53, 70,10,69,78,67,79,68,73,78,71,32,49,48,51,51,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,54,48,10,69,78, 67,79,68,73,78,71,32,49,48,51,51,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,54,49,10,69,78,67,79,68,73, 78,71,32,49,48,51,51,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,54,50,10,69,78,67,79,68,73,78,71,32,49, 48,51,51,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,54, 51,10,69,78,67,79,68,73,78,71,32,49,48,51,51,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,54,52,10,69,78, 67,79,68,73,78,71,32,49,48,51,52,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,54,53,10,69,78,67,79,68,73, 78,71,32,49,48,51,52,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,54,54,10,69,78,67,79,68,73,78,71,32,49, 48,51,52,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,54, 55,10,69,78,67,79,68,73,78,71,32,49,48,51,52,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,54,56,10,69,78, 67,79,68,73,78,71,32,49,48,51,52,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,54,57,10,69,78,67,79,68,73, 78,71,32,49,48,51,52,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,54,65,10,69,78,67,79,68,73,78,71,32,49, 48,51,52,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,54, 66,10,69,78,67,79,68,73,78,71,32,49,48,51,52,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,54,67,10,69,78, 67,79,68,73,78,71,32,49,48,51,52,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,54,68,10,69,78,67,79,68,73, 78,71,32,49,48,51,52,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,54,69,10,69,78,67,79,68,73,78,71,32,49, 48,51,53,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,54, 70,10,69,78,67,79,68,73,78,71,32,49,48,51,53,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,55,48,10,69,78, 67,79,68,73,78,71,32,49,48,51,53,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,55,49,10,69,78,67,79,68,73, 78,71,32,49,48,51,53,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,55,50,10,69,78,67,79,68,73,78,71,32,49, 48,51,53,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,55, 51,10,69,78,67,79,68,73,78,71,32,49,48,51,53,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,55,52,10,69,78, 67,79,68,73,78,71,32,49,48,51,53,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,55,53,10,69,78,67,79,68,73, 78,71,32,49,48,51,53,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,55,54,10,69,78,67,79,68,73,78,71,32,49, 48,51,53,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,55, 55,10,69,78,67,79,68,73,78,71,32,49,48,51,53,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,55,56,10,69,78, 67,79,68,73,78,71,32,49,48,51,54,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,55,57,10,69,78,67,79,68,73, 78,71,32,49,48,51,54,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,55,65,10,69,78,67,79,68,73,78,71,32,49, 48,51,54,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,55, 66,10,69,78,67,79,68,73,78,71,32,49,48,51,54,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,55,67,10,69,78, 67,79,68,73,78,71,32,49,48,51,54,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,55,68,10,69,78,67,79,68,73, 78,71,32,49,48,51,54,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,55,69,10,69,78,67,79,68,73,78,71,32,49, 48,51,54,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,55, 70,10,69,78,67,79,68,73,78,71,32,49,48,51,54,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,56,48,10,69,78, 67,79,68,73,78,71,32,49,48,51,54,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,56,49,10,69,78,67,79,68,73, 78,71,32,49,48,51,54,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,56,50,10,69,78,67,79,68,73,78,71,32,49, 48,51,55,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,56, 51,10,69,78,67,79,68,73,78,71,32,49,48,51,55,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,56,52,10,69,78, 67,79,68,73,78,71,32,49,48,51,55,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,56,53,10,69,78,67,79,68,73, 78,71,32,49,48,51,55,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,56,54,10,69,78,67,79,68,73,78,71,32,49, 48,51,55,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,56, 55,10,69,78,67,79,68,73,78,71,32,49,48,51,55,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,56,56,10,69,78, 67,79,68,73,78,71,32,49,48,51,55,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,56,57,10,69,78,67,79,68,73, 78,71,32,49,48,51,55,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,56,65,10,69,78,67,79,68,73,78,71,32,49, 48,51,55,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,56, 66,10,69,78,67,79,68,73,78,71,32,49,48,51,55,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,56,67,10,69,78, 67,79,68,73,78,71,32,49,48,51,56,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,56,68,10,69,78,67,79,68,73, 78,71,32,49,48,51,56,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,56,69,10,69,78,67,79,68,73,78,71,32,49, 48,51,56,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,56, 70,10,69,78,67,79,68,73,78,71,32,49,48,51,56,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,57,48,10,69,78, 67,79,68,73,78,71,32,49,48,51,56,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,57,49,10,69,78,67,79,68,73, 78,71,32,49,48,51,56,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,57,50,10,69,78,67,79,68,73,78,71,32,49, 48,51,56,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,57, 51,10,69,78,67,79,68,73,78,71,32,49,48,51,56,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,57,52,10,69,78, 67,79,68,73,78,71,32,49,48,51,56,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,57,53,10,69,78,67,79,68,73, 78,71,32,49,48,51,56,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,57,54,10,69,78,67,79,68,73,78,71,32,49, 48,51,57,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,57, 55,10,69,78,67,79,68,73,78,71,32,49,48,51,57,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,57,56,10,69,78, 67,79,68,73,78,71,32,49,48,51,57,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,57,57,10,69,78,67,79,68,73, 78,71,32,49,48,51,57,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,57,65,10,69,78,67,79,68,73,78,71,32,49, 48,51,57,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,57, 66,10,69,78,67,79,68,73,78,71,32,49,48,51,57,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,57,67,10,69,78, 67,79,68,73,78,71,32,49,48,51,57,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,57,68,10,69,78,67,79,68,73, 78,71,32,49,48,51,57,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,57,69,10,69,78,67,79,68,73,78,71,32,49, 48,51,57,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,57, 70,10,69,78,67,79,68,73,78,71,32,49,48,51,57,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,65,48,10,69,78, 67,79,68,73,78,71,32,49,48,52,48,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,65,49,10,69,78,67,79,68,73, 78,71,32,49,48,52,48,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,65,50,10,69,78,67,79,68,73,78,71,32,49, 48,52,48,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,65, 51,10,69,78,67,79,68,73,78,71,32,49,48,52,48,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,65,52,10,69,78, 67,79,68,73,78,71,32,49,48,52,48,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,65,53,10,69,78,67,79,68,73, 78,71,32,49,48,52,48,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,65,54,10,69,78,67,79,68,73,78,71,32,49, 48,52,48,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,65, 55,10,69,78,67,79,68,73,78,71,32,49,48,52,48,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,65,56,10,69,78, 67,79,68,73,78,71,32,49,48,52,48,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,65,57,10,69,78,67,79,68,73, 78,71,32,49,48,52,48,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,65,65,10,69,78,67,79,68,73,78,71,32,49, 48,52,49,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,65, 66,10,69,78,67,79,68,73,78,71,32,49,48,52,49,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,65,67,10,69,78, 67,79,68,73,78,71,32,49,48,52,49,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,65,68,10,69,78,67,79,68,73, 78,71,32,49,48,52,49,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,65,69,10,69,78,67,79,68,73,78,71,32,49, 48,52,49,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,65, 70,10,69,78,67,79,68,73,78,71,32,49,48,52,49,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,66,48,10,69,78, 67,79,68,73,78,71,32,49,48,52,49,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,66,49,10,69,78,67,79,68,73, 78,71,32,49,48,52,49,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,66,50,10,69,78,67,79,68,73,78,71,32,49, 48,52,49,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,66, 51,10,69,78,67,79,68,73,78,71,32,49,48,52,49,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,66,52,10,69,78, 67,79,68,73,78,71,32,49,48,52,50,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,66,53,10,69,78,67,79,68,73, 78,71,32,49,48,52,50,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,66,54,10,69,78,67,79,68,73,78,71,32,49, 48,52,50,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,66, 55,10,69,78,67,79,68,73,78,71,32,49,48,52,50,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,66,56,10,69,78, 67,79,68,73,78,71,32,49,48,52,50,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,66,57,10,69,78,67,79,68,73, 78,71,32,49,48,52,50,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,66,65,10,69,78,67,79,68,73,78,71,32,49, 48,52,50,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,66, 66,10,69,78,67,79,68,73,78,71,32,49,48,52,50,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,66,67,10,69,78, 67,79,68,73,78,71,32,49,48,52,50,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,66,68,10,69,78,67,79,68,73, 78,71,32,49,48,52,50,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,66,69,10,69,78,67,79,68,73,78,71,32,49, 48,52,51,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,66, 70,10,69,78,67,79,68,73,78,71,32,49,48,52,51,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,67,48,10,69,78, 67,79,68,73,78,71,32,49,48,52,51,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,67,49,10,69,78,67,79,68,73, 78,71,32,49,48,52,51,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,67,50,10,69,78,67,79,68,73,78,71,32,49, 48,52,51,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,67, 51,10,69,78,67,79,68,73,78,71,32,49,48,52,51,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,67,52,10,69,78, 67,79,68,73,78,71,32,49,48,52,51,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,67,53,10,69,78,67,79,68,73, 78,71,32,49,48,52,51,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,67,54,10,69,78,67,79,68,73,78,71,32,49, 48,52,51,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,67, 55,10,69,78,67,79,68,73,78,71,32,49,48,52,51,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,67,56,10,69,78, 67,79,68,73,78,71,32,49,48,52,52,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,67,57,10,69,78,67,79,68,73, 78,71,32,49,48,52,52,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,67,65,10,69,78,67,79,68,73,78,71,32,49, 48,52,52,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,67, 66,10,69,78,67,79,68,73,78,71,32,49,48,52,52,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,67,67,10,69,78, 67,79,68,73,78,71,32,49,48,52,52,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,67,68,10,69,78,67,79,68,73, 78,71,32,49,48,52,52,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,67,69,10,69,78,67,79,68,73,78,71,32,49, 48,52,52,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,67, 70,10,69,78,67,79,68,73,78,71,32,49,48,52,52,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,68,48,10,69,78, 67,79,68,73,78,71,32,49,48,52,52,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,68,49,10,69,78,67,79,68,73, 78,71,32,49,48,52,52,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,68,50,10,69,78,67,79,68,73,78,71,32,49, 48,52,53,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,68, 51,10,69,78,67,79,68,73,78,71,32,49,48,52,53,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,68,52,10,69,78, 67,79,68,73,78,71,32,49,48,52,53,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,68,53,10,69,78,67,79,68,73, 78,71,32,49,48,52,53,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,68,54,10,69,78,67,79,68,73,78,71,32,49, 48,52,53,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,68, 55,10,69,78,67,79,68,73,78,71,32,49,48,52,53,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,68,56,10,69,78, 67,79,68,73,78,71,32,49,48,52,53,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,68,57,10,69,78,67,79,68,73, 78,71,32,49,48,52,53,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,68,65,10,69,78,67,79,68,73,78,71,32,49, 48,52,53,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,68, 66,10,69,78,67,79,68,73,78,71,32,49,48,52,53,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,68,67,10,69,78, 67,79,68,73,78,71,32,49,48,52,54,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,68,68,10,69,78,67,79,68,73, 78,71,32,49,48,52,54,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,68,69,10,69,78,67,79,68,73,78,71,32,49, 48,52,54,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,68, 70,10,69,78,67,79,68,73,78,71,32,49,48,52,54,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,69,48,10,69,78, 67,79,68,73,78,71,32,49,48,52,54,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,69,49,10,69,78,67,79,68,73, 78,71,32,49,48,52,54,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,69,50,10,69,78,67,79,68,73,78,71,32,49, 48,52,54,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,69, 51,10,69,78,67,79,68,73,78,71,32,49,48,52,54,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,69,52,10,69,78, 67,79,68,73,78,71,32,49,48,52,54,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,69,53,10,69,78,67,79,68,73, 78,71,32,49,48,52,54,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,69,54,10,69,78,67,79,68,73,78,71,32,49, 48,52,55,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,69, 55,10,69,78,67,79,68,73,78,71,32,49,48,52,55,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,69,56,10,69,78, 67,79,68,73,78,71,32,49,48,52,55,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,69,57,10,69,78,67,79,68,73, 78,71,32,49,48,52,55,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,69,65,10,69,78,67,79,68,73,78,71,32,49, 48,52,55,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,69, 66,10,69,78,67,79,68,73,78,71,32,49,48,52,55,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,69,67,10,69,78, 67,79,68,73,78,71,32,49,48,52,55,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,69,68,10,69,78,67,79,68,73, 78,71,32,49,48,52,55,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,69,69,10,69,78,67,79,68,73,78,71,32,49, 48,52,55,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,69, 70,10,69,78,67,79,68,73,78,71,32,49,48,52,55,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,70,48,10,69,78, 67,79,68,73,78,71,32,49,48,52,56,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,70,49,10,69,78,67,79,68,73, 78,71,32,49,48,52,56,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,70,50,10,69,78,67,79,68,73,78,71,32,49, 48,52,56,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,70, 51,10,69,78,67,79,68,73,78,71,32,49,48,52,56,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,70,52,10,69,78, 67,79,68,73,78,71,32,49,48,52,56,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,70,53,10,69,78,67,79,68,73, 78,71,32,49,48,52,56,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,70,54,10,69,78,67,79,68,73,78,71,32,49, 48,52,56,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,70, 55,10,69,78,67,79,68,73,78,71,32,49,48,52,56,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,70,56,10,69,78, 67,79,68,73,78,71,32,49,48,52,56,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,70,57,10,69,78,67,79,68,73, 78,71,32,49,48,52,56,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,70,65,10,69,78,67,79,68,73,78,71,32,49, 48,52,57,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,70, 66,10,69,78,67,79,68,73,78,71,32,49,48,52,57,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,70,67,10,69,78, 67,79,68,73,78,71,32,49,48,52,57,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,70,68,10,69,78,67,79,68,73, 78,71,32,49,48,52,57,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,70,69,10,69,78,67,79,68,73,78,71,32,49, 48,52,57,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,70, 70,10,69,78,67,79,68,73,78,71,32,49,48,52,57,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,65,48,48,10,69,78, 67,79,68,73,78,71,32,49,48,55,53,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,51,69,48,48,10,54,51,48,48,10,67,49,56,48,10, 67,49,56,48,10,67,49,56,48,10,67,49,56,48,10,67, 49,56,48,10,67,57,56,48,10,68,68,56,48,10,67,57, 56,48,10,67,49,56,48,10,67,49,56,48,10,67,49,56, 48,10,67,49,56,48,10,67,49,56,48,10,54,51,48,48, 10,51,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,65,48,49,10,69,78,67,79,68,73, 78,71,32,49,48,55,53,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,51,69,48, 48,10,54,66,48,48,10,67,57,56,48,10,67,57,56,48, 10,67,57,56,48,10,67,57,56,48,10,67,57,56,48,10, 67,57,56,48,10,70,70,56,48,10,67,57,56,48,10,67, 57,56,48,10,67,57,56,48,10,67,57,56,48,10,67,57, 56,48,10,67,57,56,48,10,54,66,48,48,10,51,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,65,48,50,10,69,78,67,79,68,73,78,71,32,49, 48,55,53,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,51,69,48,48,10,54,51, 48,48,10,69,51,56,48,10,69,51,56,48,10,68,53,56, 48,10,68,53,56,48,10,67,57,56,48,10,67,57,56,48, 10,67,57,56,48,10,67,57,56,48,10,67,57,56,48,10, 68,53,56,48,10,68,53,56,48,10,69,51,56,48,10,69, 51,56,48,10,54,51,48,48,10,51,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,65,48, 51,10,69,78,67,79,68,73,78,71,32,49,48,55,53,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,67,49,56,48,10,67, 49,56,48,10,67,49,56,48,10,67,49,56,48,10,67,49, 56,48,10,67,49,56,48,10,67,57,56,48,10,68,68,56, 48,10,67,57,56,48,10,67,49,56,48,10,67,49,56,48, 10,67,49,56,48,10,67,49,56,48,10,67,49,56,48,10, 54,51,48,48,10,51,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,65,48,52,10,69,78, 67,79,68,73,78,71,32,49,48,55,53,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,67,49,56,48,10,67,49,56,48,10, 67,49,56,48,10,67,49,56,48,10,67,49,56,48,10,67, 57,56,48,10,67,57,56,48,10,70,70,56,48,10,67,57, 56,48,10,67,57,56,48,10,67,49,56,48,10,67,49,56, 48,10,67,49,56,48,10,67,49,56,48,10,54,51,48,48, 10,51,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,65,48,53,10,69,78,67,79,68,73, 78,71,32,49,48,55,53,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,70,70,56,48,10,67,49,56,48,10,67,49,56,48, 10,67,49,56,48,10,67,49,56,48,10,67,49,56,48,10, 67,49,56,48,10,67,49,56,48,10,67,49,56,48,10,67, 49,56,48,10,67,49,56,48,10,67,49,56,48,10,67,49, 56,48,10,67,49,56,48,10,67,49,56,48,10,67,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,65,48,54,10,69,78,67,79,68,73,78,71,32,49, 48,55,53,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,67,49, 56,48,10,67,49,56,48,10,67,49,56,48,10,67,49,56, 48,10,67,49,56,48,10,67,49,56,48,10,67,49,56,48, 10,67,49,56,48,10,67,49,56,48,10,67,49,56,48,10, 67,49,56,48,10,67,49,56,48,10,67,49,56,48,10,67, 49,56,48,10,67,49,56,48,10,70,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,65,48, 55,10,69,78,67,79,68,73,78,71,32,49,48,55,53,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,49,52,48,48,10,49,52,48,48,10,50, 65,48,48,10,50,65,48,48,10,50,65,48,48,10,50,65, 48,48,10,50,65,48,48,10,53,53,48,48,10,53,53,48, 48,10,53,53,48,48,10,53,53,48,48,10,53,53,48,48, 10,65,50,56,48,10,65,50,56,48,10,65,50,56,48,10, 65,50,56,48,10,65,50,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,65,48,56,10,69,78, 67,79,68,73,78,71,32,49,48,55,54,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,65,50,56,48,10,65,50,56,48,10,65,50,56,48,10, 65,50,56,48,10,65,50,56,48,10,53,53,48,48,10,53, 53,48,48,10,53,53,48,48,10,53,53,48,48,10,53,53, 48,48,10,50,65,48,48,10,50,65,48,48,10,50,65,48, 48,10,50,65,48,48,10,50,65,48,48,10,49,52,48,48, 10,49,52,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,65,48,57,10,69,78,67,79,68,73, 78,71,32,49,48,55,54,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,67,49,56,48,10,67,49,56,48,10,54,51,48,48, 10,54,51,48,48,10,51,54,48,48,10,51,54,48,48,10, 49,67,48,48,10,49,67,48,48,10,49,67,48,48,10,49, 67,48,48,10,51,54,48,48,10,51,54,48,48,10,54,51, 48,48,10,54,51,48,48,10,67,49,56,48,10,67,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,65,49,68,10,69,78,67,79,68,73,78,71,32,49, 48,55,56,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,52,49,48,48,10,54,51,48, 48,10,54,51,48,48,10,53,53,48,48,10,53,53,48,48, 10,52,57,48,48,10,52,57,48,48,10,53,53,48,48,10, 53,53,48,48,10,54,51,48,48,10,54,51,48,48,10,52, 49,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,65,51, 70,10,69,78,67,79,68,73,78,71,32,49,48,56,49,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,70,55, 56,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,70,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,66,48,48,10,69,78, 67,79,68,73,78,71,32,49,49,48,48,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 67,48,48,10,56,56,48,48,10,56,56,48,48,10,56,52, 48,48,10,69,50,48,48,10,57,49,48,48,10,48,56,56, 48,10,48,53,48,48,10,48,50,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,66,48,49,10,69,78,67,79,68,73, 78,71,32,49,49,48,48,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,70,56,48,10, 48,56,56,48,10,48,56,56,48,10,49,48,56,48,10,50, 51,56,48,10,52,52,56,48,10,56,56,48,48,10,53,48, 48,48,10,50,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,66,48,50,10,69,78,67,79,68,73,78,71,32,49, 49,48,49,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,50,48,48,48,10,53,48,48,48, 10,56,56,48,48,10,52,52,56,48,10,50,51,56,48,10, 49,48,56,48,10,48,56,56,48,10,48,56,56,48,10,49, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,66,48, 51,10,69,78,67,79,68,73,78,71,32,49,49,48,49,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,50,48,48,10,48,53,48,48,10,48,56,56, 48,10,57,49,48,48,10,69,50,48,48,10,56,52,48,48, 10,56,56,48,48,10,56,56,48,48,10,70,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,66,48,52,10,69,78, 67,79,68,73,78,71,32,49,49,48,49,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,52,48,48,10,51, 54,48,48,10,53,68,48,48,10,56,48,56,48,10,56,48, 56,48,10,53,68,48,48,10,51,54,48,48,10,49,52,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,66,48,53,10,69,78,67,79,68,73, 78,71,32,49,49,48,49,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,51,56,48,48,10, 55,70,56,48,10,70,70,56,48,10,70,70,56,48,10,55, 70,56,48,10,51,56,48,48,10,49,56,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,66,48,54,10,69,78,67,79,68,73,78,71,32,49, 49,48,49,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,49,69,48,48,10,51,70,48, 48,10,55,70,56,48,10,55,70,56,48,10,49,69,48,48, 10,49,69,48,48,10,49,69,48,48,10,49,69,48,48,10, 49,69,48,48,10,49,69,48,48,10,49,69,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,66,48, 55,10,69,78,67,79,68,73,78,71,32,49,49,48,49,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 69,48,48,10,49,69,48,48,10,49,69,48,48,10,49,69, 48,48,10,49,69,48,48,10,49,69,48,48,10,49,69,48, 48,10,49,69,48,48,10,55,70,56,48,10,55,70,56,48, 10,51,70,48,48,10,49,69,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,66,48,56,10,69,78, 67,79,68,73,78,71,32,49,49,48,49,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 67,48,48,10,70,56,48,48,10,70,56,48,48,10,70,67, 48,48,10,70,69,48,48,10,57,70,48,48,10,48,70,56, 48,10,48,55,48,48,10,48,50,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,66,48,57,10,69,78,67,79,68,73, 78,71,32,49,49,48,49,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,70,56,48,10, 48,70,56,48,10,48,70,56,48,10,49,70,56,48,10,51, 70,56,48,10,55,67,56,48,10,70,56,48,48,10,55,48, 48,48,10,50,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,66,48,65,10,69,78,67,79,68,73,78,71,32,49, 49,48,49,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,50,48,48,48,10,55,48,48,48, 10,70,56,48,48,10,55,67,56,48,10,51,70,56,48,10, 49,70,56,48,10,48,70,56,48,10,48,70,56,48,10,49, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,66,48, 66,10,69,78,67,79,68,73,78,71,32,49,49,48,49,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,50,48,48,10,48,55,48,48,10,48,70,56, 48,10,57,70,48,48,10,70,69,48,48,10,70,67,48,48, 10,70,56,48,48,10,70,56,48,48,10,70,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,66,48,67,10,69,78, 67,79,68,73,78,71,32,49,49,48,50,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,52,48,48,10,51, 54,48,48,10,55,70,48,48,10,70,70,56,48,10,70,70, 56,48,10,55,70,48,48,10,51,54,48,48,10,49,52,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,66,48,68,10,69,78,67,79,68,73, 78,71,32,49,49,48,50,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,70,48,48,10,55,70,56,48,10,49,69,48,48,10, 49,69,48,48,10,49,69,48,48,10,49,69,48,48,10,49, 69,48,48,10,55,70,56,48,10,51,70,48,48,10,49,69, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,48,48,65,10,69,78,67,79,68,73,78,71,32,49, 50,50,57,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,57,48,48,10,49,66,48,48,10,49,50,48, 48,10,51,54,48,48,10,50,52,48,48,10,54,67,48,48, 10,52,56,48,48,10,54,67,48,48,10,50,52,48,48,10, 51,54,48,48,10,49,50,48,48,10,49,66,48,48,10,48, 57,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,51,48,48, 66,10,69,78,67,79,68,73,78,71,32,49,50,50,57,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,50, 52,48,48,10,51,54,48,48,10,49,50,48,48,10,49,66, 48,48,10,48,57,48,48,10,48,68,56,48,10,48,52,56, 48,10,48,68,56,48,10,48,57,48,48,10,49,66,48,48, 10,49,50,48,48,10,51,54,48,48,10,50,52,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,51,48,49,65,10,69,78, 67,79,68,73,78,71,32,49,50,51,49,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 54,67,48,48,10,54,67,48,48,10,54,67,48,48,10,54, 67,48,48,10,54,67,48,48,10,54,67,48,48,10,54,67, 48,48,10,54,67,48,48,10,54,67,48,48,10,54,67,48, 48,10,54,67,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,51,48,49,66,10,69,78,67,79,68,73, 78,71,32,49,50,51,49,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,48,68,56,48, 10,48,68,56,48,10,48,68,56,48,10,48,68,56,48,10, 48,68,56,48,10,48,68,56,48,10,48,68,56,48,10,48, 68,56,48,10,48,68,56,48,10,48,68,56,48,10,48,68, 56,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,48,51,70,10,69,78,67,79,68,73,78,71,32,49, 50,51,53,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,54,49,56,48,10,53,50,56, 48,10,53,50,56,48,10,53,50,56,48,10,52,67,56,48, 10,52,67,56,48,10,52,67,56,48,10,53,50,56,48,10, 53,50,56,48,10,53,50,56,48,10,54,49,56,48,10,55, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,67, 48,10,69,78,67,79,68,73,78,71,32,49,57,57,48,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,55,70,56,48,10,55,70,56,48,10,48,48,48, 48,10,55,70,56,48,10,55,70,56,48,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,67,49,10,69,78, 67,79,68,73,78,71,32,49,57,57,48,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,51,56,48,10,55,51,56,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,55, 51,56,48,10,55,51,56,48,10,48,48,48,48,10,55,51, 56,48,10,55,51,56,48,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,67,50,10,69,78,67,79,68,73, 78,71,32,49,57,57,48,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,55,51,56,48,10, 55,51,56,48,10,48,48,48,48,10,55,51,56,48,10,55, 51,56,48,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,67,51,10,69,78,67,79,68,73,78,71,32,49, 57,57,48,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,55,51,56,48,10,55,51,56,48, 10,48,48,48,48,10,55,51,56,48,10,55,51,56,48,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,67, 52,10,69,78,67,79,68,73,78,71,32,49,57,57,48,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,51,56,48,10,55,51,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,55,51,56,48,10,55,51,56,48,10,48,48,48, 48,10,55,70,56,48,10,55,70,56,48,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,67,53,10,69,78, 67,79,68,73,78,71,32,49,57,57,48,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,55, 70,56,48,10,55,70,56,48,10,48,48,48,48,10,55,51, 56,48,10,55,51,56,48,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,67,54,10,69,78,67,79,68,73, 78,71,32,49,57,57,49,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,55,51,56,48,10, 55,51,56,48,10,48,48,48,48,10,55,51,56,48,10,55, 51,56,48,10,48,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,67,55,10,69,78,67,79,68,73,78,71,32,49, 57,57,49,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,48,48,48,10,55,51,56,48,10,55,51,56,48, 10,48,48,48,48,10,55,51,56,48,10,55,51,56,48,10, 48,48,48,48,10,55,51,56,48,10,55,51,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,67, 56,10,69,78,67,79,68,73,78,71,32,49,57,57,49,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,55,51,56,48,10,55,51,56,48,10,48,48,48, 48,10,55,70,56,48,10,55,70,56,48,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,67,57,10,69,78, 67,79,68,73,78,71,32,49,57,57,49,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,55, 70,56,48,10,55,70,56,48,10,48,48,48,48,10,55,51, 56,48,10,55,51,56,48,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,67,65,10,69,78,67,79,68,73, 78,71,32,49,57,57,49,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,55,51,56,48,10, 55,51,56,48,10,48,48,48,48,10,55,70,56,48,10,55, 70,56,48,10,48,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,67,66,10,69,78,67,79,68,73,78,71,32,49, 57,57,49,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,48,48,48,10,55,70,56,48,10,55,70,56,48, 10,48,48,48,48,10,55,51,56,48,10,55,51,56,48,10, 48,48,48,48,10,55,51,56,48,10,55,51,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,67, 67,10,69,78,67,79,68,73,78,71,32,49,57,57,49,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,55,70,56,48,10,55,70,56,48,10,48,48,48, 48,10,55,70,56,48,10,55,70,56,48,10,48,48,48,48, 10,55,51,56,48,10,55,51,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,67,68,10,69,78, 67,79,68,73,78,71,32,49,57,57,49,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,55, 70,56,48,10,55,70,56,48,10,48,48,48,48,10,55,70, 56,48,10,55,70,56,48,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,67,69,10,69,78,67,79,68,73, 78,71,32,49,57,57,49,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,55,51,56,48,10, 55,51,56,48,10,48,48,48,48,10,55,70,56,48,10,55, 70,56,48,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,67,70,10,69,78,67,79,68,73,78,71,32,49, 57,57,49,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,55,70,56,48,10,55,70,56,48, 10,48,48,48,48,10,55,51,56,48,10,55,51,56,48,10, 48,48,48,48,10,55,51,56,48,10,55,51,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,68, 48,10,69,78,67,79,68,73,78,71,32,49,57,57,50,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,51,56,48,10,55,51,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,55,70,56,48,10,55,70,56,48,10,48,48,48, 48,10,55,51,56,48,10,55,51,56,48,10,48,48,48,48, 10,55,51,56,48,10,55,51,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,68,49,10,69,78, 67,79,68,73,78,71,32,49,57,57,50,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,55, 51,56,48,10,55,51,56,48,10,48,48,48,48,10,55,70, 56,48,10,55,70,56,48,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,68,50,10,69,78,67,79,68,73, 78,71,32,49,57,57,50,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,55,51,56,48,10, 55,51,56,48,10,48,48,48,48,10,55,51,56,48,10,55, 51,56,48,10,48,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,68,51,10,69,78,67,79,68,73,78,71,32,49, 57,57,50,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,48,48,48,10,55,51,56,48,10,55,51,56,48, 10,48,48,48,48,10,55,51,56,48,10,55,51,56,48,10, 48,48,48,48,10,55,51,56,48,10,55,51,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,68, 52,10,69,78,67,79,68,73,78,71,32,49,57,57,50,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,55,70,56,48,10,55,70,56,48,10,48,48,48, 48,10,55,51,56,48,10,55,51,56,48,10,48,48,48,48, 10,55,51,56,48,10,55,51,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,68,53,10,69,78, 67,79,68,73,78,71,32,49,57,57,50,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,55, 51,56,48,10,55,51,56,48,10,48,48,48,48,10,55,70, 56,48,10,55,70,56,48,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,68,54,10,69,78,67,79,68,73, 78,71,32,49,57,57,50,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,55,51,56,48,10, 55,51,56,48,10,48,48,48,48,10,55,51,56,48,10,55, 51,56,48,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,68,55,10,69,78,67,79,68,73,78,71,32,49, 57,57,50,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,55,51,56,48,10,55,51,56,48, 10,48,48,48,48,10,55,51,56,48,10,55,51,56,48,10, 48,48,48,48,10,55,51,56,48,10,55,51,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,68, 56,10,69,78,67,79,68,73,78,71,32,49,57,57,50,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,55,70,56,48,10,55,70,56,48,10,48,48,48, 48,10,55,51,56,48,10,55,51,56,48,10,48,48,48,48, 10,55,51,56,48,10,55,51,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,68,57,10,69,78, 67,79,68,73,78,71,32,49,57,57,50,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,55, 51,56,48,10,55,51,56,48,10,48,48,48,48,10,55,70, 56,48,10,55,70,56,48,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,68,65,10,69,78,67,79,68,73, 78,71,32,49,57,57,51,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,55,51,56,48,10, 55,51,56,48,10,48,48,48,48,10,55,51,56,48,10,55, 51,56,48,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,68,66,10,69,78,67,79,68,73,78,71,32,49, 57,57,51,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,48,48,48,10,55,70,56,48,10,55,70,56,48, 10,48,48,48,48,10,55,70,56,48,10,55,70,56,48,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,68, 67,10,69,78,67,79,68,73,78,71,32,49,57,57,51,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,51,56,48,10,55,51,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,55,51,56,48,10,55,51,56,48,10,48,48,48, 48,10,55,51,56,48,10,55,51,56,48,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,68,68,10,69,78, 67,79,68,73,78,71,32,49,57,57,51,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,55, 70,56,48,10,55,70,56,48,10,48,48,48,48,10,55,70, 56,48,10,55,70,56,48,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,68,69,10,69,78,67,79,68,73, 78,71,32,49,57,57,51,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,55,70,56,48,10, 55,70,56,48,10,48,48,48,48,10,55,70,56,48,10,55, 70,56,48,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,68,70,10,69,78,67,79,68,73,78,71,32,49, 57,57,51,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,55,70,56,48,10,55,70,56,48, 10,48,48,48,48,10,55,70,56,48,10,55,70,56,48,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,69, 48,10,69,78,67,79,68,73,78,71,32,49,57,57,51,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,55,70,56,48,10,55,70,56,48,10,48,48,48, 48,10,55,70,56,48,10,55,70,56,48,10,48,48,48,48, 10,55,51,56,48,10,55,51,56,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,69,49,10,69,78, 67,79,68,73,78,71,32,49,57,57,51,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,51,56,48,10,55,51,56,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,55, 70,56,48,10,55,70,56,48,10,48,48,48,48,10,55,70, 56,48,10,55,70,56,48,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,69,50,10,69,78,67,79,68,73, 78,71,32,49,57,57,51,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,55,70,56,48,10, 55,70,56,48,10,48,48,48,48,10,55,51,56,48,10,55, 51,56,48,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,69,51,10,69,78,67,79,68,73,78,71,32,49, 57,57,51,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,55,51,56,48,10,55,51,56,48, 10,48,48,48,48,10,55,70,56,48,10,55,70,56,48,10, 48,48,48,48,10,55,51,56,48,10,55,51,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,69, 52,10,69,78,67,79,68,73,78,71,32,49,57,57,52,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,55,51,56,48,10,55,51,56,48,10,48,48,48, 48,10,55,70,56,48,10,55,70,56,48,10,48,48,48,48, 10,55,51,56,48,10,55,51,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,69,53,10,69,78, 67,79,68,73,78,71,32,49,57,57,52,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,55, 70,56,48,10,55,70,56,48,10,48,48,48,48,10,55,51, 56,48,10,55,51,56,48,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,69,54,10,69,78,67,79,68,73, 78,71,32,49,57,57,52,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,55,51,56,48,10, 55,51,56,48,10,48,48,48,48,10,55,70,56,48,10,55, 70,56,48,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,69,55,10,69,78,67,79,68,73,78,71,32,49, 57,57,52,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,55,70,56,48,10,55,70,56,48, 10,48,48,48,48,10,55,51,56,48,10,55,51,56,48,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,69, 56,10,69,78,67,79,68,73,78,71,32,49,57,57,52,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,55,51,56,48,10,55,51,56,48,10,48,48,48, 48,10,55,51,56,48,10,55,51,56,48,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,69,57,10,69,78, 67,79,68,73,78,71,32,49,57,57,52,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,55, 51,56,48,10,55,51,56,48,10,48,48,48,48,10,55,51, 56,48,10,55,51,56,48,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,69,65,10,69,78,67,79,68,73, 78,71,32,49,57,57,52,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,55,70,56,48,10, 55,70,56,48,10,48,48,48,48,10,55,70,56,48,10,55, 70,56,48,10,48,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,69,66,10,69,78,67,79,68,73,78,71,32,49, 57,57,52,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,48,48,48,10,55,70,56,48,10,55,70,56,48, 10,48,48,48,48,10,55,70,56,48,10,55,70,56,48,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,69, 67,10,69,78,67,79,68,73,78,71,32,49,57,57,52,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,51,56,48,10,55,51,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,55,70,56,48,10,55,70,56,48,10,48,48,48, 48,10,55,51,56,48,10,55,51,56,48,10,48,48,48,48, 10,55,51,56,48,10,55,51,56,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,69,68,10,69,78, 67,79,68,73,78,71,32,49,57,57,52,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,51,56,48,10,55,51,56,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,55, 51,56,48,10,55,51,56,48,10,48,48,48,48,10,55,70, 56,48,10,55,70,56,48,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,69,69,10,69,78,67,79,68,73, 78,71,32,49,57,57,53,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,55,70,56,48,10, 55,70,56,48,10,48,48,48,48,10,55,51,56,48,10,55, 51,56,48,10,48,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,69,70,10,69,78,67,79,68,73,78,71,32,49, 57,57,53,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,48,48,48,10,55,51,56,48,10,55,51,56,48, 10,48,48,48,48,10,55,70,56,48,10,55,70,56,48,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,70, 48,10,69,78,67,79,68,73,78,71,32,49,57,57,53,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,51,56,48,10,55,51,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,55,70,56,48,10,55,70,56,48,10,48,48,48, 48,10,55,70,56,48,10,55,70,56,48,10,48,48,48,48, 10,55,51,56,48,10,55,51,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,70,49,10,69,78, 67,79,68,73,78,71,32,49,57,57,53,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,55, 70,56,48,10,55,70,56,48,10,48,48,48,48,10,55,70, 56,48,10,55,70,56,48,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,70,50,10,69,78,67,79,68,73, 78,71,32,49,57,57,53,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,55,70,56,48,10, 55,70,56,48,10,48,48,48,48,10,55,51,56,48,10,55, 51,56,48,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,70,51,10,69,78,67,79,68,73,78,71,32,49, 57,57,53,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,55,51,56,48,10,55,51,56,48, 10,48,48,48,48,10,55,70,56,48,10,55,70,56,48,10, 48,48,48,48,10,55,51,56,48,10,55,51,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,70, 52,10,69,78,67,79,68,73,78,71,32,49,57,57,53,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,51,56,48,10,55,51,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,55,70,56,48,10,55,70,56,48,10,48,48,48, 48,10,55,51,56,48,10,55,51,56,48,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,70,53,10,69,78, 67,79,68,73,78,71,32,49,57,57,53,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,55, 51,56,48,10,55,51,56,48,10,48,48,48,48,10,55,70, 56,48,10,55,70,56,48,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,70,54,10,69,78,67,79,68,73, 78,71,32,49,57,57,53,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,55,70,56,48,10, 55,70,56,48,10,48,48,48,48,10,55,70,56,48,10,55, 70,56,48,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,70,55,10,69,78,67,79,68,73,78,71,32,49, 57,57,53,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,55,70,56,48,10,55,70,56,48, 10,48,48,48,48,10,55,70,56,48,10,55,70,56,48,10, 48,48,48,48,10,55,51,56,48,10,55,51,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,70, 56,10,69,78,67,79,68,73,78,71,32,49,57,57,54,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,55,51,56,48,10,55,51,56,48,10,48,48,48, 48,10,55,70,56,48,10,55,70,56,48,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,70,57,10,69,78, 67,79,68,73,78,71,32,49,57,57,54,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,51,56,48,10,55,51,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,55, 70,56,48,10,55,70,56,48,10,48,48,48,48,10,55,51, 56,48,10,55,51,56,48,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,70,65,10,69,78,67,79,68,73, 78,71,32,49,57,57,54,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,55,51,56,48,10, 55,51,56,48,10,48,48,48,48,10,55,51,56,48,10,55, 51,56,48,10,48,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,70,66,10,69,78,67,79,68,73,78,71,32,49, 57,57,54,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,48,48,48,10,55,51,56,48,10,55,51,56,48, 10,48,48,48,48,10,55,51,56,48,10,55,51,56,48,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,70, 67,10,69,78,67,79,68,73,78,71,32,49,57,57,54,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,55,51,56,48,10,55,51,56,48,10,48,48,48, 48,10,55,51,56,48,10,55,51,56,48,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,70,68,10,69,78, 67,79,68,73,78,71,32,49,57,57,54,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,51,56,48,10,55,51,56,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,55, 70,56,48,10,55,70,56,48,10,48,48,48,48,10,55,70, 56,48,10,55,70,56,48,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,70,69,10,69,78,67,79,68,73, 78,71,32,49,57,57,54,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,55,51,56,48,10, 55,51,56,48,10,48,48,48,48,10,55,70,56,48,10,55, 70,56,48,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,70,70,10,69,78,67,79,68,73,78,71,32,49, 57,57,54,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,55,70,56,48,10,55,70,56,48, 10,48,48,48,48,10,55,51,56,48,10,55,51,56,48,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,102,102,10,69,78,67, 79,68,73,78,71,32,54,52,50,53,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,66,56,48,10,54, 54,52,48,10,54,54,52,48,10,54,54,48,48,10,54,54, 48,48,10,70,70,56,48,10,54,54,48,48,10,54,54,48, 48,10,54,54,48,48,10,54,54,48,48,10,54,54,48,48, 10,54,54,48,48,10,54,54,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,102,105,10,69,78,67,79,68,73,78,71,32,54,52,50, 53,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,49,48,48,10,51,51,48,48,10, 51,51,48,48,10,51,48,48,48,10,55,70,48,48,10,51, 51,48,48,10,51,51,48,48,10,51,51,48,48,10,51,51, 48,48,10,51,51,48,48,10,51,51,48,48,10,51,55,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,102,108,10,69,78,67,79,68, 73,78,71,32,54,52,50,53,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,70,48,48,10,51,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,70,66,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,55,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,102, 102,105,10,69,78,67,79,68,73,78,71,32,54,52,50,53, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,55,56,48,10,68,67,67,48,10,67,67,67,48,10,67, 67,48,48,10,67,67,48,48,10,70,70,67,48,10,67,67, 67,48,10,67,67,67,48,10,67,67,67,48,10,67,67,67, 48,10,67,67,67,48,10,67,67,67,48,10,67,67,67,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,102,102,108,10,69,78,67,79,68, 73,78,71,32,54,52,50,54,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,55,67,48,10,67,67,67, 48,10,67,67,67,48,10,67,67,67,48,10,67,67,67,48, 10,70,69,67,48,10,67,67,67,48,10,67,67,67,48,10, 67,67,67,48,10,67,67,67,48,10,67,67,67,48,10,67, 67,67,48,10,67,67,67,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,66,48,53,10,69,78,67,79,68,73,78,71,32, 54,52,50,54,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,67,48,48,10,54,54,48,48,10,54,54, 48,48,10,54,54,48,48,10,54,54,48,48,10,70,70,56, 48,10,54,54,48,48,10,54,54,48,48,10,54,54,48,48, 10,54,54,48,48,10,54,54,52,48,10,54,54,67,48,10, 54,51,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,66, 48,54,10,69,78,67,79,68,73,78,71,32,54,52,50,54, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,70,48,48,10,49,66,48,48,10,49,66,48,48,10,49, 66,48,48,10,49,66,48,48,10,55,55,67,48,10,67,51, 48,48,10,67,51,48,48,10,55,66,48,48,10,48,70,48, 48,10,48,55,48,48,10,67,70,52,48,10,55,57,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,66,49,51,10,69, 78,67,79,68,73,78,71,32,54,52,50,55,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,49,50,48,48,10,53,48,48,48,10,53,48,48,48,10, 51,48,48,48,10,57,67,56,48,10,57,52,56,48,10,57, 52,56,48,10,57,52,56,48,10,57,52,56,48,10,57,52, 56,48,10,66,53,56,48,10,53,50,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,66,49,52,10,69,78,67,79,68, 73,78,71,32,54,52,50,55,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,49,52,48, 48,10,49,52,48,48,10,49,55,56,48,10,49,52,48,48, 10,57,52,56,48,10,57,52,56,48,10,57,52,56,48,10, 57,52,56,48,10,57,52,56,48,10,57,52,56,48,10,66, 54,56,48,10,53,53,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,66,49,53,10,69,78,67,79,68,73,78,71,32, 54,52,50,55,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,49,52,48,48,10,49,52, 48,48,10,49,52,48,48,10,49,52,48,48,10,57,55,48, 48,10,57,52,56,48,10,57,52,56,48,10,57,52,56,48, 10,57,52,56,48,10,57,52,56,48,10,66,52,56,48,10, 53,52,56,48,10,48,52,48,48,10,48,52,48,48,10,48, 52,48,48,10,48,52,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,66, 49,54,10,69,78,67,79,68,73,78,71,32,54,52,50,55, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,48,48,48,10,49,48,48,48,10,53,48,48,48,10,53, 48,48,48,10,51,67,48,48,10,57,52,56,48,10,57,52, 56,48,10,57,52,56,48,10,57,52,56,48,10,57,52,56, 48,10,57,52,56,48,10,66,53,56,48,10,53,50,56,48, 10,49,48,48,48,10,49,48,48,48,10,49,48,48,48,10, 49,67,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,66,49,55,10,69, 78,67,79,68,73,78,71,32,54,52,50,55,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,56,48,48, 10,50,56,48,48,10,50,56,48,48,10,50,56,48,48,10, 50,56,48,48,10,65,67,56,48,10,65,65,56,48,10,65, 65,56,48,10,65,65,56,48,10,65,65,56,48,10,65,65, 56,48,10,65,65,56,48,10,54,57,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,66,49,68,10,69,78,67,79,68, 73,78,71,32,54,52,50,56,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,56,48,48,10,51,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,66,49,69,10,69,78,67,79,68,73,78,71,32, 54,52,50,56,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,53, 55,55,48,53,10,69,78,67,79,68,73,78,71,32,54,52, 50,56,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,55,48,48,10,70,55,56,48,10,51,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,51,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,50,48, 10,69,78,67,79,68,73,78,71,32,54,52,50,56,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,55,48, 48,10,69,55,56,48,10,67,49,56,48,10,67,49,56,48, 10,54,49,56,48,10,51,49,56,48,10,49,57,56,48,10, 48,68,56,48,10,55,70,56,48,10,55,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,50,49,10,69,78,67, 79,68,73,78,71,32,54,52,50,56,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,67,51,56,48,10,67,51, 56,48,10,54,51,56,48,10,51,54,48,48,10,55,67,48, 48,10,69,67,48,48,10,67,54,48,48,10,67,51,48,48, 10,54,49,56,48,10,69,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,50,50,10,69,78,67,79,68,73,78, 71,32,54,52,50,57,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,70,70,56,48,10,70,70,56,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,50,51,10,69,78,67,79,68,73,78,71,32,54,52, 50,57,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,70,48,48,10,70,70,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,50,52, 10,69,78,67,79,68,73,78,71,32,54,52,50,57,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,70,70,48, 48,10,70,70,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,70,70,56,48,10,70,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,50,53,10,69,78,67, 79,68,73,78,71,32,54,52,50,57,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,67,48,48,48,10,67,48,48,48,10,67, 48,48,48,10,67,48,48,48,10,70,70,48,48,10,70,70, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,48,48,10,48,51,48,48, 10,48,54,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,50,54,10,69,78,67,79,68,73,78, 71,32,54,52,50,57,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,70,70,48,48,10,70,70,56,48,10,52, 49,56,48,10,67,49,56,48,10,67,49,56,48,10,67,49, 56,48,10,67,49,56,48,10,67,49,56,48,10,70,70,56, 48,10,70,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,50,55,10,69,78,67,79,68,73,78,71,32,54,52, 50,57,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,70,48,48,10,70,70,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,50,56, 10,69,78,67,79,68,73,78,71,32,54,52,50,57,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,70,70,48, 48,10,70,70,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,69,49,56,48,10,69,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,50,57,10,69,78,67, 79,68,73,78,71,32,54,52,50,57,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,102,105,105,53,55,54,57,52,10,69,78,67,79,68, 73,78,71,32,54,52,50,57,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,49,56,48,10,48,49,56, 48,10,48,48,48,48,10,67,68,56,48,10,67,68,56,48, 10,67,68,56,48,10,67,68,56,48,10,67,68,56,48,10, 68,68,56,48,10,70,57,56,48,10,69,49,56,48,10,70, 70,48,48,10,70,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,53,55,54,57,53,10,69,78,67,79,68,73,78, 71,32,54,52,50,57,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,67,48,48,48,10,67,48,48,48,10, 48,48,48,48,10,67,68,56,48,10,67,68,56,48,10,67, 68,56,48,10,67,68,56,48,10,67,68,56,48,10,68,68, 56,48,10,70,57,56,48,10,69,49,56,48,10,70,70,48, 48,10,70,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,50,67,10,69,78,67,79,68,73,78,71,32,54,52, 51,48,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,49,56,48,10,48,49,56,48,10,48,48,48,48, 10,67,68,56,48,10,67,68,56,48,10,70,68,56,48,10, 70,68,56,48,10,67,68,56,48,10,68,68,56,48,10,70, 57,56,48,10,69,49,56,48,10,70,70,48,48,10,70,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,50,68, 10,69,78,67,79,68,73,78,71,32,54,52,51,48,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,67,48, 48,48,10,67,48,48,48,10,48,48,48,48,10,67,68,56, 48,10,67,68,56,48,10,70,68,56,48,10,70,68,56,48, 10,67,68,56,48,10,68,68,56,48,10,70,57,56,48,10, 69,49,56,48,10,70,70,48,48,10,70,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,50,69,10,69,78,67, 79,68,73,78,71,32,54,52,51,48,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,67,51,56,48,10,67,51, 56,48,10,54,51,56,48,10,51,54,48,48,10,55,67,48, 48,10,69,67,48,48,10,67,54,48,48,10,67,51,48,48, 10,54,49,56,48,10,69,49,56,48,10,48,48,48,48,10, 51,70,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,50,70,10,69,78,67,79,68,73,78, 71,32,54,52,51,48,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,67,51,56,48,10,67,51,56,48,10,54, 51,56,48,10,51,54,48,48,10,55,67,48,48,10,69,67, 48,48,10,67,54,48,48,10,67,51,48,48,10,54,49,56, 48,10,69,49,56,48,10,48,48,48,48,10,51,70,48,48, 10,48,67,48,48,10,48,67,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,51,48,10,69,78,67,79,68,73,78,71,32,54,52, 51,48,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,68,66,56,48,10,68,66,56,48,10,54,51,56,48,10, 51,54,48,48,10,55,67,48,48,10,69,67,48,48,10,67, 54,48,48,10,67,51,48,48,10,54,49,56,48,10,69,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,51,49, 10,69,78,67,79,68,73,78,71,32,54,52,51,48,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,70,69,48, 48,10,70,70,48,48,10,48,51,48,48,10,48,51,48,48, 10,51,51,48,48,10,51,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,70,70,56,48,10,70,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,51,50,10,69,78,67, 79,68,73,78,71,32,54,52,51,48,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,56,48,48,10,55,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,54,67,48, 48,10,54,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,55,69,48,48,10,54,54,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,51,51,10,69,78,67,79,68,73,78, 71,32,54,52,51,48,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,70,70,56,48,10,70,70,56,48,10,48, 51,48,48,10,48,51,48,48,10,51,51,48,48,10,51,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,51,52,10,69,78,67,79,68,73,78,71,32,54,52, 51,48,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,70,48,48,10,70,70,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,68,56,48,10,54,68,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,53,55,55, 50,51,10,69,78,67,79,68,73,78,71,32,54,52,51,48, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 56,48,48,10,51,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,54,67,48,48,10,54,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,66,51,54,10,69, 78,67,79,68,73,78,71,32,54,52,51,49,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,56,48,48,10, 51,69,48,48,10,48,70,48,48,10,48,70,48,48,10,54, 67,48,48,10,54,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,66,51,56,10,69,78,67,79,68, 73,78,71,32,54,52,51,49,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,67,51,48,48,10,67,51,56,48, 10,67,49,56,48,10,67,49,56,48,10,68,57,56,48,10, 68,57,56,48,10,67,49,56,48,10,67,51,56,48,10,70, 70,48,48,10,55,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,66,51,57,10,69,78,67,79,68,73,78,71,32, 54,52,51,49,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,56,48,48,10,51,67,48,48,10,48,67,48, 48,10,54,67,48,48,10,54,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,66, 51,65,10,69,78,67,79,68,73,78,71,32,54,52,51,49, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 70,48,48,10,70,70,48,48,10,48,54,48,48,10,48,54, 48,48,10,54,54,48,48,10,54,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,66,51,66,10,69, 78,67,79,68,73,78,71,32,54,52,51,49,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,70,48,48,10, 70,70,56,48,10,48,49,56,48,10,48,49,56,48,10,49, 57,56,48,10,49,57,56,48,10,48,49,56,48,10,48,49, 56,48,10,70,70,56,48,10,70,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,66,51,67,10,69,78,67,79,68, 73,78,71,32,54,52,51,49,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,67,48,48,48,10,67,48,48,48,10,67,48,48, 48,10,67,48,48,48,10,70,70,48,48,10,70,70,56,48, 10,48,49,56,48,10,48,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,48,49,48,48,10,48,51,48,48,10,48, 54,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,66,51,69,10,69,78,67,79,68,73,78,71,32, 54,52,51,49,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,68,70,48,48,10,70,70,56,48,10,55,49,56, 48,10,54,49,56,48,10,67,68,56,48,10,67,68,56,48, 10,67,49,56,48,10,67,49,56,48,10,67,70,56,48,10, 68,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,66, 52,48,10,69,78,67,79,68,73,78,71,32,54,52,51,50, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 56,48,48,10,51,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,54,67,48,48,10,54,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,51,67,48,48,10,51,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,66,52,49,10,69, 78,67,79,68,73,78,71,32,54,52,51,50,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,70,48,48,10, 70,70,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,49,56,48,10,54,49, 56,48,10,55,70,48,48,10,51,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,66,52,51,10,69,78,67,79,68, 73,78,71,32,54,52,51,50,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,70,70,48,48,10,70,70,48,48, 10,67,51,48,48,10,67,51,48,48,10,68,66,48,48,10, 68,66,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,66,52,52,10,69,78,67,79,68,73,78,71,32, 54,52,51,50,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,70,70,48,48,10,70,70,56,48,10,67,49,56, 48,10,67,49,56,48,10,69,68,56,48,10,69,68,56,48, 10,48,49,56,48,10,48,49,56,48,10,70,70,56,48,10, 70,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,66, 52,54,10,69,78,67,79,68,73,78,71,32,54,52,51,50, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 51,56,48,10,69,51,56,48,10,55,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,54,67,48,48,10,54,54,48, 48,10,48,51,48,48,10,70,70,56,48,10,70,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,66,52,55,10,69, 78,67,79,68,73,78,71,32,54,52,51,50,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,70,48,48,10, 70,70,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,51,48,48,10,54,54, 48,48,10,54,67,48,48,10,54,56,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,66,52,56,10,69,78,67,79,68, 73,78,71,32,54,52,51,50,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,70,70,48,48,10,70,70,56,48, 10,48,49,56,48,10,48,49,56,48,10,49,57,56,48,10, 49,57,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,66,52,57,10,69,78,67,79,68,73,78,71,32, 54,52,51,50,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,67,68,56,48,10,67,68,56,48,10,70,68,56, 48,10,70,68,56,48,10,67,68,56,48,10,68,68,56,48, 10,70,57,56,48,10,69,49,56,48,10,70,70,48,48,10, 70,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,66, 52,65,10,69,78,67,79,68,73,78,71,32,54,52,51,51, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 70,48,48,10,70,70,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,49,56, 48,10,54,49,56,48,10,69,49,56,48,10,69,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,102,105,105,53,55,55,48,48, 10,69,78,67,79,68,73,78,71,32,54,52,51,51,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,48,48,48,48,10,51,56,48, 48,10,51,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,52,67,10,69,78,67, 79,68,73,78,71,32,54,52,51,51,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 69,48,48,10,48,48,48,48,10,70,69,48,48,10,70,70, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,70,70,56,48,10,70,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,52,68,10,69,78,67,79,68,73,78, 71,32,54,52,51,51,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,48,48,10, 48,48,48,48,10,70,70,48,48,10,70,70,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,70,70,56, 48,10,70,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,52,69,10,69,78,67,79,68,73,78,71,32,54,52, 51,51,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,48,48,10,48,48,48,48, 10,70,70,48,48,10,70,70,56,48,10,67,49,56,48,10, 67,49,56,48,10,69,49,56,48,10,69,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,70,70,56,48,10,70,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,52,70, 10,69,78,67,79,68,73,78,71,32,54,52,51,51,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,67,51,56, 48,10,67,51,56,48,10,54,51,56,48,10,51,54,48,48, 10,55,67,48,48,10,69,67,48,48,10,67,54,48,48,10, 67,51,48,48,10,54,49,56,48,10,69,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,53,48,10,69,78,67, 79,68,73,78,71,32,54,52,51,51,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,49,68,48,48,10,50, 70,48,48,10,48,48,48,48,10,48,52,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,53,49,10,69,78,67,79,68,73,78, 71,32,54,52,51,51,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,49,68,48,48,10,50,70,48,48,10, 48,48,48,48,10,48,52,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,70,67,48,10,48,55,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,53,50,10,69,78,67,79,68,73,78,71,32,54,52, 51,51,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,67,49,56,48,10,67,49,56,48,10,70, 70,56,48,10,55,70,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,53,51, 10,69,78,67,79,68,73,78,71,32,54,52,51,51,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,67,49,56,48,10,67,49,56,48,10,70,70,67,48,10, 55,70,52,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,53,52,10,69,78,67, 79,68,73,78,71,32,54,52,51,52,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,67,48,48,10,70,56,48,48, 10,48,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 48,48,48,48,10,51,48,48,48,10,51,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,53,53,10,69,78,67,79,68,73,78, 71,32,54,52,51,52,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,70,70,67,48,10,70,66,67,48,10,48,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,48,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,53,54,10,69,78,67,79,68,73,78,71,32,54,52, 51,52,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,67,49,56,48,10,67,49,56,48,10,70, 70,56,48,10,55,70,48,48,10,48,48,48,48,10,51,54, 48,48,10,51,54,48,48,10,48,48,48,48,10,49,56,48, 48,10,49,56,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,53,55, 10,69,78,67,79,68,73,78,71,32,54,52,51,52,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,67,49,56,48,10,67,49,56,48,10,70,70,67,48,10, 55,70,52,48,10,48,48,48,48,10,51,54,48,48,10,51, 54,48,48,10,48,48,48,48,10,49,56,48,48,10,49,56, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,53,56,10,69,78,67, 79,68,73,78,71,32,54,52,51,52,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,67,48,48,10,70,56,48,48, 10,48,48,48,48,10,54,67,48,48,10,54,67,48,48,10, 48,48,48,48,10,51,48,48,48,10,51,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,53,57,10,69,78,67,79,68,73,78, 71,32,54,52,51,52,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,70,70,67,48,10,70,66,67,48,10,48,48,48, 48,10,54,67,48,48,10,54,67,48,48,10,48,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,53,65,10,69,78,67,79,68,73,78,71,32,54,52, 51,52,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,67,49,56,48,10,67,49,56,48,10,70, 70,56,48,10,55,70,48,48,10,48,48,48,48,10,51,54, 48,48,10,51,54,48,48,10,48,48,48,48,10,51,54,48, 48,10,51,54,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,53,66, 10,69,78,67,79,68,73,78,71,32,54,52,51,52,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,67,49,56,48,10,67,49,56,48,10,70,70,67,48,10, 55,70,52,48,10,48,48,48,48,10,51,54,48,48,10,51, 54,48,48,10,48,48,48,48,10,51,54,48,48,10,51,54, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,53,67,10,69,78,67, 79,68,73,78,71,32,54,52,51,52,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,67,48,48,10,70,56,48,48, 10,48,48,48,48,10,54,67,48,48,10,54,67,48,48,10, 48,48,48,48,10,54,67,48,48,10,54,67,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,53,68,10,69,78,67,79,68,73,78, 71,32,54,52,51,52,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,70,70,67,48,10,70,66,67,48,10,48,48,48, 48,10,54,67,48,48,10,54,67,48,48,10,48,48,48,48, 10,54,67,48,48,10,54,67,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,53,69,10,69,78,67,79,68,73,78,71,32,54,52, 51,53,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,56,48,48, 10,49,56,48,48,10,48,48,48,48,10,49,56,48,48,10, 49,56,48,48,10,67,49,56,48,10,67,49,56,48,10,70, 70,56,48,10,55,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,53,70, 10,69,78,67,79,68,73,78,71,32,54,52,51,53,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,56,48,48,10,49,56,48, 48,10,48,48,48,48,10,49,56,48,48,10,49,56,48,48, 10,67,49,56,48,10,67,49,56,48,10,70,70,67,48,10, 55,70,52,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,54,48,10,69,78,67, 79,68,73,78,71,32,54,52,51,53,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,56,48,48,10,49, 56,48,48,10,48,48,48,48,10,49,56,48,48,10,49,56, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,67,48,48,10,70,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,54,49,10,69,78,67,79,68,73,78, 71,32,54,52,51,53,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,49,56,48,48,10, 48,48,48,48,10,49,56,48,48,10,49,56,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,70,70,67,48,10,70,66,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,54,50,10,69,78,67,79,68,73,78,71,32,54,52, 51,53,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,54,48,48,10,51,54,48,48, 10,48,48,48,48,10,51,54,48,48,10,51,54,48,48,10, 48,48,48,48,10,67,49,56,48,10,67,49,56,48,10,70, 70,56,48,10,55,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,54,51, 10,69,78,67,79,68,73,78,71,32,54,52,51,53,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,54,48,48,10,51,54,48,48,10,48,48,48, 48,10,51,54,48,48,10,51,54,48,48,10,48,48,48,48, 10,67,49,56,48,10,67,49,56,48,10,70,70,67,48,10, 55,70,52,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,54,52,10,69,78,67, 79,68,73,78,71,32,54,52,51,53,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,54,48,48,10,51, 54,48,48,10,48,48,48,48,10,51,54,48,48,10,51,54, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,67,48,48,10,70,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,54,53,10,69,78,67,79,68,73,78, 71,32,54,52,51,53,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,54,48,48,10,51,54,48,48,10, 48,48,48,48,10,51,54,48,48,10,51,54,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,70,70,67,48,10,70,66,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,54,54,10,69,78,67,79,68,73,78,71,32,54,52, 51,53,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,50,48,48,48,10,50,48,48,48, 10,50,67,48,48,10,51,52,48,48,10,55,56,48,48,10, 48,48,48,48,10,67,49,56,48,10,67,49,56,48,10,70, 70,56,48,10,55,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,54,55, 10,69,78,67,79,68,73,78,71,32,54,52,51,53,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,50,48,48,48,10,50,48,48,48,10,50,67,48, 48,10,51,52,48,48,10,55,56,48,48,10,48,48,48,48, 10,67,49,56,48,10,67,49,56,48,10,70,70,67,48,10, 55,70,52,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,54,56,10,69,78,67, 79,68,73,78,71,32,54,52,51,54,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,48,48,48,10,49, 48,48,48,10,49,54,48,48,10,49,65,48,48,10,51,67, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,67,48,48,10,70,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,54,57,10,69,78,67,79,68,73,78, 71,32,54,52,51,54,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,48,48,48,10,49,48,48,48,10, 49,54,48,48,10,49,65,48,48,10,51,67,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,70,70,67,48,10,70,66,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,54,65,10,69,78,67,79,68,73,78,71,32,54,52, 51,54,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,48,48,48,10,48,68,56,48,10,48,68,56,48, 10,48,48,48,48,10,48,55,48,48,10,48,68,56,48,10, 52,68,56,48,10,67,55,56,48,10,67,49,56,48,10,70, 70,56,48,10,55,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,54,66, 10,69,78,67,79,68,73,78,71,32,54,52,51,54,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,54,48,48,10,48,54,48,48,10,48,48, 48,48,10,48,68,56,48,10,48,68,56,48,10,48,48,48, 48,10,48,55,48,48,10,48,68,56,48,10,52,68,56,48, 10,67,55,56,48,10,67,49,56,48,10,70,70,67,48,10, 55,70,52,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,54,67,10,69,78,67, 79,68,73,78,71,32,54,52,51,54,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 49,56,48,48,10,49,56,48,48,10,48,48,48,48,10,51, 54,48,48,10,51,54,48,48,10,48,48,48,48,10,49,67, 48,48,10,51,54,48,48,10,51,54,48,48,10,49,69,48, 48,10,48,54,48,48,10,70,69,48,48,10,70,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,54,68,10,69,78,67,79,68,73,78, 71,32,54,52,51,54,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,49,56,48,48, 10,49,56,48,48,10,48,48,48,48,10,51,54,48,48,10, 51,54,48,48,10,48,48,48,48,10,49,69,48,48,10,51, 51,48,48,10,51,51,48,48,10,51,51,48,48,10,49,69, 48,48,10,70,70,67,48,10,70,51,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,54,69,10,69,78,67,79,68,73,78,71,32,54,52, 51,54,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,68,56,48,10,48,68,56, 48,10,48,48,48,48,10,48,68,56,48,10,48,68,56,48, 10,48,48,48,48,10,48,55,48,48,10,48,68,56,48,10, 52,68,56,48,10,67,55,56,48,10,67,49,56,48,10,70, 70,56,48,10,55,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,54,70, 10,69,78,67,79,68,73,78,71,32,54,52,51,54,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,68,56,48,10,48,68,56,48,10,48,48, 48,48,10,48,68,56,48,10,48,68,56,48,10,48,48,48, 48,10,48,55,48,48,10,48,68,56,48,10,52,68,56,48, 10,67,55,56,48,10,67,49,56,48,10,70,70,67,48,10, 55,70,52,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,55,48,10,69,78,67, 79,68,73,78,71,32,54,52,51,54,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 51,54,48,48,10,51,54,48,48,10,48,48,48,48,10,51, 54,48,48,10,51,54,48,48,10,48,48,48,48,10,49,67, 48,48,10,51,54,48,48,10,51,54,48,48,10,49,69,48, 48,10,48,54,48,48,10,70,69,48,48,10,70,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,55,49,10,69,78,67,79,68,73,78, 71,32,54,52,51,54,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,51,54,48,48, 10,51,54,48,48,10,48,48,48,48,10,51,54,48,48,10, 51,54,48,48,10,48,48,48,48,10,49,69,48,48,10,51, 51,48,48,10,51,51,48,48,10,51,51,48,48,10,49,69, 48,48,10,70,70,67,48,10,70,51,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,55,50,10,69,78,67,79,68,73,78,71,32,54,52, 51,55,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,56,48,48,10, 55,70,56,48,10,52,70,56,48,10,49,56,48,48,10,51, 54,48,48,10,54,54,48,48,10,67,48,48,48,10,67,54, 48,48,10,67,54,48,48,10,69,48,48,48,10,55,70,56, 48,10,51,70,56,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,55,51, 10,69,78,67,79,68,73,78,71,32,54,52,51,55,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,56,48,48,10,55,70,56,48, 10,52,70,56,48,10,49,67,48,48,10,51,55,67,48,10, 54,70,67,48,10,67,67,48,48,10,67,48,48,48,10,67, 67,48,48,10,69,67,48,48,10,55,70,56,48,10,51,70, 56,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,55,52,10,69,78,67, 79,68,73,78,71,32,54,52,51,55,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,56, 48,48,10,51,67,48,48,10,48,54,48,48,10,48,51,48, 48,10,48,49,56,48,10,70,70,56,48,10,70,70,56,48, 10,48,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 48,48,48,48,10,54,48,48,48,10,54,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,55,53,10,69,78,67,79,68,73,78, 71,32,54,52,51,55,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,69,48,48,10,55, 70,56,48,10,54,51,56,48,10,48,54,48,48,10,48,70, 48,48,10,70,68,67,48,10,70,48,67,48,10,48,48,48, 48,10,49,56,48,48,10,49,56,48,48,10,48,48,48,48, 10,49,56,48,48,10,49,56,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,55,54,10,69,78,67,79,68,73,78,71,32,54,52, 51,55,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,56,48,48,10, 55,70,56,48,10,52,70,56,48,10,49,56,48,48,10,51, 48,48,48,10,54,48,48,48,10,68,66,48,48,10,68,66, 48,48,10,67,48,48,48,10,69,48,48,48,10,55,70,56, 48,10,51,70,56,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,55,55, 10,69,78,67,79,68,73,78,71,32,54,52,51,55,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,56,48,48,10,55,70,56,48, 10,52,70,56,48,10,49,67,48,48,10,51,55,67,48,10, 54,51,67,48,10,67,48,48,48,10,68,66,48,48,10,68, 66,48,48,10,69,48,48,48,10,55,70,56,48,10,51,70, 56,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,55,56,10,69,78,67, 79,68,73,78,71,32,54,52,51,55,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,56, 48,48,10,51,67,48,48,10,48,54,48,48,10,48,51,48, 48,10,48,49,56,48,10,70,70,56,48,10,70,70,56,48, 10,48,48,48,48,10,54,67,48,48,10,54,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,55,57,10,69,78,67,79,68,73,78, 71,32,54,52,51,55,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,69,48,48,10,55, 70,56,48,10,54,51,56,48,10,48,54,48,48,10,48,70, 48,48,10,70,68,67,48,10,70,48,67,48,10,48,48,48, 48,10,51,54,48,48,10,51,54,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,55,65,10,69,78,67,79,68,73,78,71,32,54,52, 51,55,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,56,48,48,10, 55,70,56,48,10,52,70,56,48,10,49,56,48,48,10,51, 48,48,48,10,55,66,48,48,10,68,66,48,48,10,67,48, 48,48,10,67,67,48,48,10,69,67,48,48,10,55,70,56, 48,10,51,70,56,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,55,66, 10,69,78,67,79,68,73,78,71,32,54,52,51,55,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,56,48,48,10,55,70,56,48, 10,52,70,56,48,10,49,67,48,48,10,51,55,67,48,10, 55,66,67,48,10,68,66,48,48,10,67,51,48,48,10,67, 67,48,48,10,69,67,48,48,10,55,70,56,48,10,51,70, 56,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,55,67,10,69,78,67, 79,68,73,78,71,32,54,52,51,56,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,56, 48,48,10,51,67,48,48,10,48,54,48,48,10,48,51,48, 48,10,48,49,56,48,10,70,70,56,48,10,70,70,56,48, 10,48,48,48,48,10,54,67,48,48,10,54,67,48,48,10, 48,48,48,48,10,51,48,48,48,10,51,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,55,68,10,69,78,67,79,68,73,78, 71,32,54,52,51,56,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,69,48,48,10,55, 70,56,48,10,54,51,56,48,10,48,54,48,48,10,48,70, 48,48,10,70,68,67,48,10,70,48,67,48,10,48,48,48, 48,10,51,54,48,48,10,51,54,48,48,10,48,48,48,48, 10,49,56,48,48,10,49,56,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,55,69,10,69,78,67,79,68,73,78,71,32,54,52, 51,56,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,56,48,48,10, 55,70,56,48,10,52,70,56,48,10,49,56,48,48,10,51, 48,48,48,10,54,68,56,48,10,67,68,56,48,10,67,48, 48,48,10,67,68,56,48,10,69,68,56,48,10,55,70,56, 48,10,51,70,56,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,55,70, 10,69,78,67,79,68,73,78,71,32,54,52,51,56,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,56,48,48,10,55,70,56,48, 10,52,70,56,48,10,49,67,48,48,10,51,55,67,48,10, 55,66,67,48,10,68,66,48,48,10,67,48,48,48,10,68, 66,48,48,10,70,66,48,48,10,55,70,56,48,10,51,70, 56,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,56,48,10,69,78,67, 79,68,73,78,71,32,54,52,51,56,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,56, 48,48,10,51,67,48,48,10,48,54,48,48,10,48,51,48, 48,10,48,49,56,48,10,70,70,56,48,10,70,70,56,48, 10,48,48,48,48,10,54,67,48,48,10,54,67,48,48,10, 48,48,48,48,10,54,67,48,48,10,54,67,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,56,49,10,69,78,67,79,68,73,78, 71,32,54,52,51,56,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,69,48,48,10,55, 70,56,48,10,54,51,56,48,10,48,54,48,48,10,48,70, 48,48,10,70,68,67,48,10,70,48,67,48,10,48,48,48, 48,10,51,54,48,48,10,51,54,48,48,10,48,48,48,48, 10,51,54,48,48,10,51,54,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,56,50,10,69,78,67,79,68,73,78,71,32,54,52, 51,56,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,69,48,48,10, 48,55,48,48,10,48,51,48,48,10,48,51,48,48,10,51, 70,48,48,10,51,69,48,48,10,48,48,48,48,10,49,66, 48,48,10,49,66,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,56,51, 10,69,78,67,79,68,73,78,71,32,54,52,51,56,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,51,48,48,10,52,51,48,48,10,55,70,67,48,10, 51,67,67,48,10,48,48,48,48,10,49,66,48,48,10,49, 66,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,56,52,10,69,78,67, 79,68,73,78,71,32,54,52,51,56,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 54,48,48,10,51,54,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,69,48,48,10,48,55,48,48,10,48,51,48, 48,10,48,51,48,48,10,51,70,48,48,10,51,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,56,53,10,69,78,67,79,68,73,78, 71,32,54,52,51,56,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,54,48,48,10,51,54,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,51,48,48,10,52,51, 48,48,10,55,70,67,48,10,51,67,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,56,54,10,69,78,67,79,68,73,78,71,32,54,52, 51,57,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,49,56,48,48,10,49,56,48, 48,10,48,48,48,48,10,51,54,48,48,10,51,54,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,69,48,48,10, 48,55,48,48,10,48,51,48,48,10,48,51,48,48,10,51, 70,48,48,10,51,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,56,55, 10,69,78,67,79,68,73,78,71,32,54,52,51,57,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,49, 56,48,48,10,49,56,48,48,10,48,48,48,48,10,51,54, 48,48,10,51,54,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,51,48,48,10,52,51,48,48,10,55,70,67,48,10, 51,67,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,56,56,10,69,78,67, 79,68,73,78,71,32,54,52,51,57,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 49,48,48,48,10,49,48,48,48,10,49,54,48,48,10,49, 65,48,48,10,51,67,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,69,48,48,10,48,55,48,48,10,48,51,48, 48,10,48,51,48,48,10,51,70,48,48,10,51,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,56,57,10,69,78,67,79,68,73,78, 71,32,54,52,51,57,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,49,48,48,48,10,49,48,48,48, 10,49,54,48,48,10,49,65,48,48,10,51,67,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,51,48,48,10,52,51, 48,48,10,55,70,67,48,10,51,67,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,56,65,10,69,78,67,79,68,73,78,71,32,54,52, 51,57,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,49,66,48,48,10,49,66,48,48,10, 48,48,48,48,10,48,54,48,48,10,48,55,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,55,48,48,10,48,69, 48,48,10,51,67,48,48,10,70,56,48,48,10,69,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,56,66, 10,69,78,67,79,68,73,78,71,32,54,52,51,57,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,49,66,48,48,10,49,66,48,48,10,48,48,48,48, 10,48,54,48,48,10,48,55,48,48,10,48,51,67,48,10, 48,51,67,48,10,48,55,48,48,10,48,69,48,48,10,51, 67,48,48,10,70,56,48,48,10,69,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,56,67,10,69,78,67, 79,68,73,78,71,32,54,52,51,57,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,66,48,48,10,48,68, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,54,48, 48,10,48,55,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,55,48,48,10,48,69,48,48,10,51,67,48,48,10, 70,56,48,48,10,69,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,56,68,10,69,78,67,79,68,73,78, 71,32,54,52,51,57,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,66,48,48,10,48,68,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,54,48,48,10,48,55, 48,48,10,48,51,67,48,10,48,51,67,48,10,48,55,48, 48,10,48,69,48,48,10,51,67,48,48,10,70,56,48,48, 10,69,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,56,69,10,69,78,67,79,68,73,78,71,32,54,52, 51,57,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,67,48, 10,48,49,67,48,10,48,51,56,48,10,48,55,48,48,10, 48,51,48,48,10,48,49,56,48,10,67,49,56,48,10,70, 70,56,48,10,55,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,56,70, 10,69,78,67,79,68,73,78,71,32,54,52,51,57,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,67,48,10,48,49,67, 48,10,48,51,56,48,10,48,55,48,48,10,48,51,48,48, 10,48,49,56,48,10,67,49,56,48,10,70,70,67,48,10, 55,70,52,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,57,48,10,69,78,67, 79,68,73,78,71,32,54,52,52,48,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 49,56,48,10,48,55,56,48,10,49,70,48,48,10,49,67, 48,48,10,49,56,48,48,10,49,56,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,67,48,48,10,70,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,57,49,10,69,78,67,79,68,73,78, 71,32,54,52,52,48,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,49,56,48,10, 48,55,56,48,10,49,70,48,48,10,49,67,48,48,10,49, 56,48,48,10,49,56,48,48,10,48,67,48,48,10,48,67, 48,48,10,70,70,67,48,10,70,66,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,57,50,10,69,78,67,79,68,73,78,71,32,54,52, 52,48,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,56,48,10,48,49,48,48,10,48,50,67,48, 10,48,53,67,48,10,48,66,56,48,10,48,55,48,48,10, 48,51,48,48,10,48,49,56,48,10,67,49,56,48,10,70, 70,56,48,10,55,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,57,51, 10,69,78,67,79,68,73,78,71,32,54,52,52,48,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 56,48,10,48,49,48,48,10,48,50,67,48,10,48,53,67, 48,10,48,66,56,48,10,48,55,48,48,10,48,51,48,48, 10,48,49,56,48,10,67,49,56,48,10,70,70,67,48,10, 55,70,52,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,57,52,10,69,78,67, 79,68,73,78,71,32,54,52,52,48,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,49,48,48,10,48,54,48,48,10,49, 57,56,48,10,48,55,56,48,10,49,70,48,48,10,49,67, 48,48,10,49,56,48,48,10,49,56,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,67,48,48,10,70,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,57,53,10,69,78,67,79,68,73,78, 71,32,54,52,52,48,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,49,48,48,10,48,54,48,48,10,49,57,56,48,10, 50,55,56,48,10,49,70,48,48,10,49,67,48,48,10,49, 56,48,48,10,49,56,48,48,10,48,67,48,48,10,48,67, 48,48,10,70,70,67,48,10,70,66,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,57,54,10,69,78,67,79,68,73,78,71,32,54,52, 52,48,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,56,48,10,48,49,48,48,10,48,50,67,48, 10,48,53,67,48,10,48,66,56,48,10,48,55,48,48,10, 48,51,48,48,10,48,49,56,48,10,67,49,56,48,10,70, 70,56,48,10,55,70,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,57,55, 10,69,78,67,79,68,73,78,71,32,54,52,52,48,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 56,48,10,48,49,48,48,10,48,50,67,48,10,48,53,67, 48,10,48,66,56,48,10,48,55,48,48,10,48,51,48,48, 10,48,49,56,48,10,67,49,56,48,10,70,70,67,48,10, 55,70,52,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,57,56,10,69,78,67, 79,68,73,78,71,32,54,52,52,48,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,49,48,48,10,48,54,48,48,10,49, 57,56,48,10,48,55,56,48,10,49,70,48,48,10,49,67, 48,48,10,49,56,48,48,10,49,56,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,67,48,48,10,70,56,48,48, 10,48,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 48,48,48,48,10,51,48,48,48,10,51,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,57,57,10,69,78,67,79,68,73,78, 71,32,54,52,52,48,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,49,48,48,10,48,54,48,48,10,49,57,56,48,10, 50,55,56,48,10,49,70,48,48,10,49,67,48,48,10,49, 56,48,48,10,49,56,48,48,10,48,67,48,48,10,48,67, 48,48,10,70,70,67,48,10,70,66,67,48,10,48,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,48,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,57,65,10,69,78,67,79,68,73,78,71,32,54,52, 52,49,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,68,56,48,10,48,68,56,48,10,48,48,48, 48,10,48,48,56,48,10,48,49,48,48,10,48,50,67,48, 10,48,53,67,48,10,48,66,56,48,10,48,55,48,48,10, 48,51,48,48,10,48,49,56,48,10,67,49,56,48,10,70, 70,56,48,10,55,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,57,66, 10,69,78,67,79,68,73,78,71,32,54,52,52,49,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 68,56,48,10,48,68,56,48,10,48,48,48,48,10,48,48, 56,48,10,48,49,48,48,10,48,50,67,48,10,48,53,67, 48,10,48,66,56,48,10,48,55,48,48,10,48,51,48,48, 10,48,49,56,48,10,67,49,56,48,10,70,70,67,48,10, 55,70,52,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,57,67,10,69,78,67, 79,68,73,78,71,32,54,52,52,49,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,51,54,48,48,10, 51,54,48,48,10,48,49,48,48,10,48,54,48,48,10,49, 57,56,48,10,48,55,56,48,10,49,70,48,48,10,49,67, 48,48,10,49,56,48,48,10,49,56,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,67,48,48,10,70,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,57,68,10,69,78,67,79,68,73,78, 71,32,54,52,52,49,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,51,54,48,48,10,51,54,48,48, 10,48,49,48,48,10,48,54,48,48,10,49,57,56,48,10, 50,55,56,48,10,49,70,48,48,10,49,67,48,48,10,49, 56,48,48,10,49,56,48,48,10,48,67,48,48,10,48,67, 48,48,10,70,70,67,48,10,70,66,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,57,69,10,69,78,67,79,68,73,78,71,32,54,52, 52,49,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,49,56,48,10,67,49,56,48,10,67, 49,56,48,10,67,49,56,48,10,67,49,56,48,10,69,51, 56,48,10,55,70,48,48,10,51,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,57,70, 10,69,78,67,79,68,73,78,71,32,54,52,52,49,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,49,56,48,10,67,49,56,48,10,67,49,67,48,10, 67,49,67,48,10,67,49,56,48,10,69,51,56,48,10,55, 70,48,48,10,51,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,65,48,10,69,78,67, 79,68,73,78,71,32,54,52,52,49,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,50, 48,48,48,10,50,48,48,48,10,50,67,48,48,10,51,52, 48,48,10,55,56,48,48,10,48,48,48,48,10,48,49,56, 48,10,67,49,56,48,10,67,49,56,48,10,67,49,56,48, 10,67,49,56,48,10,69,51,56,48,10,55,70,48,48,10, 51,69,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,65,49,10,69,78,67,79,68,73,78, 71,32,54,52,52,49,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,50,48,48,48,10, 50,48,48,48,10,50,67,48,48,10,51,52,48,48,10,55, 56,48,48,10,48,48,48,48,10,48,49,56,48,10,67,49, 56,48,10,67,49,67,48,10,67,49,67,48,10,67,49,56, 48,10,69,51,56,48,10,55,70,48,48,10,51,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,65,50,10,69,78,67,79,68,73,78,71,32,54,52, 52,49,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,48,48,48,10,49,48,48,48,10,49,54,48,48, 10,49,65,48,48,10,51,67,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,70, 67,48,48,10,70,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,65,51, 10,69,78,67,79,68,73,78,71,32,54,52,52,49,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,48, 48,48,10,49,48,48,48,10,49,54,48,48,10,49,65,48, 48,10,51,67,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,70,70,67,48,10, 70,66,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,65,52,10,69,78,67, 79,68,73,78,71,32,54,52,52,50,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,67,48,48,10,51, 48,48,48,10,49,67,48,48,10,51,48,48,48,10,48,48, 48,48,10,49,67,48,48,10,51,69,48,48,10,51,55,48, 48,10,51,51,48,48,10,51,51,48,48,10,51,70,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,65,53,10,69,78,67,79,68,73,78, 71,32,54,52,52,50,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,49,67,48,48,10,51,48,48,48, 10,49,67,48,48,10,51,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,51,67,48,48,10,54, 54,48,48,10,54,54,48,48,10,54,54,48,48,10,51,70, 48,48,10,48,51,67,48,10,48,49,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,65,54,10,69,78,67,79,68,73,78,71,32,54,52, 52,50,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,67,48,48,10, 51,69,48,48,10,51,55,48,48,10,51,51,48,48,10,51, 51,48,48,10,51,70,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,65,55, 10,69,78,67,79,68,73,78,71,32,54,52,52,50,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,49,69,48,48,10,49,51,67,48,10, 49,49,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,65,56,10,69,78,67, 79,68,73,78,71,32,54,52,52,50,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,67,48,48,10,70,67,48,48, 10,48,56,48,48,10,49,48,48,48,10,49,48,48,48,10, 49,67,48,48,10,49,67,48,48,10,49,67,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,65,57,10,69,78,67,79,68,73,78, 71,32,54,52,52,50,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,54,48,48,10,48,67, 48,48,10,70,57,67,48,10,70,66,67,48,10,48,69,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,65,65,10,69,78,67,79,68,73,78,71,32,54,52, 52,50,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,49,69,48,48,10, 51,51,48,48,10,51,55,56,48,10,51,67,56,48,10,70, 70,56,48,10,54,55,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,65,66, 10,69,78,67,79,68,73,78,71,32,54,52,52,50,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,49,69,48,48,10,51,51,48,48, 10,51,55,56,48,10,51,67,56,48,10,70,70,67,48,10, 54,55,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,65,67,10,69,78,67, 79,68,73,78,71,32,54,52,52,50,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,49,69,48,48,10,51,51,48,48,10,51,55,56, 48,10,51,67,56,48,10,70,70,56,48,10,69,55,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,65,68,10,69,78,67,79,68,73,78, 71,32,54,52,52,50,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,49, 69,48,48,10,51,51,48,48,10,51,55,56,48,10,51,67, 56,48,10,70,70,67,48,10,69,55,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,65,69,10,69,78,67,79,68,73,78,71,32,54,52, 52,51,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,56,48,48,10,49,56,48,48,10,54, 56,48,48,10,67,48,48,48,10,70,70,67,48,10,70,70, 67,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,65,70, 10,69,78,67,79,68,73,78,71,32,54,52,52,51,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,70,67,48,10, 55,70,67,48,10,67,48,48,48,10,70,70,67,48,10,55, 70,67,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,66,48,10,69,78,67, 79,68,73,78,71,32,54,52,52,51,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,67,48, 48,48,10,55,48,48,48,10,67,48,48,48,10,49,56,48, 48,10,49,56,48,48,10,54,56,48,48,10,67,48,48,48, 10,70,70,67,48,10,70,70,67,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,66,49,10,69,78,67,79,68,73,78, 71,32,54,52,52,51,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,51,56,48,10,48, 54,48,48,10,48,51,56,48,10,48,54,48,48,10,48,48, 48,48,10,51,70,67,48,10,55,70,67,48,10,67,48,48, 48,10,70,70,67,48,10,55,70,67,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,68,51,10,69,78,67,79,68,73,78,71,32,54,52, 52,54,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,51,48,48,48,10,51,48,48,48,10,48,48,48, 48,10,54,67,48,48,10,54,68,56,48,10,48,57,56,48, 10,49,57,56,48,10,51,49,56,48,10,49,57,56,48,10, 51,49,56,48,10,48,49,56,48,10,54,49,56,48,10,55, 70,56,48,10,51,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,68,52, 10,69,78,67,79,68,73,78,71,32,54,52,52,54,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,51, 48,48,48,10,51,48,48,48,10,48,48,48,48,10,54,67, 48,48,10,54,68,56,48,10,48,57,56,48,10,49,57,56, 48,10,51,49,56,48,10,49,57,56,48,10,51,49,56,48, 10,48,49,56,48,10,54,49,56,48,10,55,70,67,48,10, 51,70,52,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,68,53,10,69,78,67, 79,68,73,78,71,32,54,52,52,54,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,51,48,48,48,10, 51,48,48,48,10,48,48,48,48,10,54,67,48,48,10,54, 68,56,48,10,48,55,56,48,10,49,70,48,48,10,49,67, 48,48,10,49,56,48,48,10,49,56,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,67,48,48,10,70,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,68,54,10,69,78,67,79,68,73,78, 71,32,54,52,52,55,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,51,48,48,48,10,51,48,48,48, 10,48,48,48,48,10,54,67,48,48,10,54,68,56,48,10, 48,55,56,48,10,49,70,48,48,10,49,67,48,48,10,49, 56,48,48,10,49,56,48,48,10,48,67,48,48,10,48,67, 48,48,10,70,70,67,48,10,70,66,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,68,55,10,69,78,67,79,68,73,78,71,32,54,52, 52,55,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,67,48,48,10,49,52,48,48,10,49,67,48,48, 10,48,56,48,48,10,51,48,48,48,10,48,48,48,48,10, 49,67,48,48,10,51,69,48,48,10,51,51,48,48,10,51, 70,48,48,10,49,70,48,48,10,48,51,48,48,10,48,55, 48,48,10,48,69,48,48,10,51,67,48,48,10,70,56,48, 48,10,69,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,68,56, 10,69,78,67,79,68,73,78,71,32,54,52,52,55,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,67, 48,48,10,49,52,48,48,10,49,67,48,48,10,48,56,48, 48,10,51,48,48,48,10,48,48,48,48,10,49,67,48,48, 10,51,69,48,48,10,51,51,48,48,10,51,70,67,48,10, 49,70,67,48,10,48,51,48,48,10,48,55,48,48,10,48, 69,48,48,10,51,67,48,48,10,70,56,48,48,10,69,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,68,57,10,69,78,67, 79,68,73,78,71,32,54,52,52,55,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 52,48,48,10,49,52,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,48,48,48,10,49,67,48,48,10,51,69,48, 48,10,51,51,48,48,10,51,70,48,48,10,49,70,48,48, 10,48,51,48,48,10,48,55,48,48,10,48,69,48,48,10, 51,67,48,48,10,70,56,48,48,10,69,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,68,65,10,69,78,67,79,68,73,78, 71,32,54,52,52,55,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,52,48,48,10, 49,52,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 48,48,48,10,49,67,48,48,10,51,69,48,48,10,51,51, 48,48,10,51,70,67,48,10,49,70,67,48,10,48,51,48, 48,10,48,55,48,48,10,48,69,48,48,10,51,67,48,48, 10,70,56,48,48,10,69,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,68,66,10,69,78,67,79,68,73,78,71,32,54,52, 52,55,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,48,48,48,48,10, 49,67,48,48,10,51,69,48,48,10,51,51,48,48,10,51, 70,48,48,10,49,70,48,48,10,48,51,48,48,10,48,55, 48,48,10,48,69,48,48,10,51,67,48,48,10,70,56,48, 48,10,69,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,68,67, 10,69,78,67,79,68,73,78,71,32,54,52,52,55,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,48,48,48,48,10,49,67,48,48, 10,51,69,48,48,10,51,51,48,48,10,51,70,67,48,10, 49,70,67,48,10,48,51,48,48,10,48,55,48,48,10,48, 69,48,48,10,51,67,48,48,10,70,56,48,48,10,69,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,68,68,10,69,78,67, 79,68,73,78,71,32,54,52,52,55,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,48,48,48,10,53, 51,56,48,10,55,54,48,48,10,50,51,56,48,10,67,54, 48,48,10,48,48,48,48,10,49,67,48,48,10,51,69,48, 48,10,51,51,48,48,10,51,70,48,48,10,49,70,48,48, 10,48,51,48,48,10,48,55,48,48,10,48,69,48,48,10, 51,67,48,48,10,70,56,48,48,10,69,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,68,69,10,69,78,67,79,68,73,78, 71,32,54,52,52,55,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,49,56,48,48,10, 48,48,48,48,10,51,54,48,48,10,51,54,48,48,10,48, 48,48,48,10,49,67,48,48,10,51,69,48,48,10,51,51, 48,48,10,51,70,48,48,10,49,70,48,48,10,48,51,48, 48,10,48,55,48,48,10,48,69,48,48,10,51,67,48,48, 10,70,56,48,48,10,69,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,68,70,10,69,78,67,79,68,73,78,71,32,54,52, 52,55,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,56,48,48,10,49,56,48,48,10,48,48,48,48, 10,51,54,48,48,10,51,54,48,48,10,48,48,48,48,10, 49,67,48,48,10,51,69,48,48,10,51,51,48,48,10,51, 70,67,48,10,49,70,67,48,10,48,51,48,48,10,48,55, 48,48,10,48,69,48,48,10,51,67,48,48,10,70,56,48, 48,10,69,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,69,48, 10,69,78,67,79,68,73,78,71,32,54,52,52,56,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,67,48,48, 10,51,69,48,48,10,51,51,48,48,10,51,70,48,48,10, 49,70,48,48,10,48,51,48,48,10,51,70,48,48,10,48, 69,48,48,10,51,67,48,48,10,70,56,48,48,10,69,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,69,49,10,69,78,67, 79,68,73,78,71,32,54,52,52,56,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,67,48,48,10,51,69,48, 48,10,51,51,48,48,10,51,70,67,48,10,49,70,67,48, 10,48,51,48,48,10,51,70,48,48,10,48,69,48,48,10, 51,67,48,48,10,70,56,48,48,10,69,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,69,50,10,69,78,67,79,68,73,78, 71,32,54,52,52,56,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,56,48,48,10, 49,67,48,48,10,51,54,48,48,10,50,50,48,48,10,48, 48,48,48,10,49,67,48,48,10,51,69,48,48,10,51,51, 48,48,10,51,70,48,48,10,49,70,48,48,10,48,51,48, 48,10,48,55,48,48,10,48,69,48,48,10,51,67,48,48, 10,70,56,48,48,10,69,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,69,51,10,69,78,67,79,68,73,78,71,32,54,52, 52,56,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,56,48,48,10,49,67,48,48, 10,51,54,48,48,10,50,50,48,48,10,48,48,48,48,10, 49,67,48,48,10,51,69,48,48,10,51,51,48,48,10,51, 70,67,48,10,49,70,67,48,10,48,51,48,48,10,48,55, 48,48,10,48,69,48,48,10,51,67,48,48,10,70,56,48, 48,10,69,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,69,52, 10,69,78,67,79,68,73,78,71,32,54,52,52,56,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,49,67, 48,10,48,51,67,48,10,48,54,48,48,10,67,55,56,48, 10,67,51,67,48,10,67,48,67,48,10,69,48,67,48,10, 55,70,56,48,10,51,70,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,69,53,10,69,78,67, 79,68,73,78,71,32,54,52,52,56,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,67,48,48, 48,10,67,48,48,48,10,67,55,67,48,10,70,70,67,48, 10,55,67,48,48,10,49,56,48,48,10,49,56,48,48,10, 48,48,48,48,10,49,56,48,48,10,49,56,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,69,54,10,69,78,67,79,68,73,78, 71,32,54,52,52,56,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,70,67,48,48,10,70,56,48,48,10,48,48,48, 48,10,49,56,48,48,10,49,56,48,48,10,48,48,48,48, 10,49,56,48,48,10,49,56,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,69,55,10,69,78,67,79,68,73,78,71,32,54,52, 52,56,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,70, 70,67,48,10,70,66,67,48,10,48,48,48,48,10,49,56, 48,48,10,49,56,48,48,10,48,48,48,48,10,49,56,48, 48,10,49,56,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,69,56, 10,69,78,67,79,68,73,78,71,32,54,52,52,56,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,70,67,48,48,10, 70,56,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,69,57,10,69,78,67, 79,68,73,78,71,32,54,52,52,56,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,70,67,48,10,70,66,67,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,70,67,10,69,78,67,79,68,73,78, 71,32,54,52,53,48,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 49,67,48,10,48,51,67,48,10,48,54,48,48,10,67,55, 56,48,10,67,51,67,48,10,67,48,67,48,10,69,48,67, 48,10,55,70,56,48,10,51,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,70,68,10,69,78,67,79,68,73,78,71,32,54,52, 53,48,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 55,67,48,10,54,55,67,48,10,54,51,56,48,10,54,48, 67,48,10,55,48,67,48,10,51,70,56,48,10,49,70,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,70,69, 10,69,78,67,79,68,73,78,71,32,54,52,53,49,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,54,48,48,10,48,54,48,48,10,70,69,48,48,10, 70,67,48,48,10,48,48,48,48,10,54,67,48,48,10,54, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,70,70,10,69,78,67, 79,68,73,78,71,32,54,52,53,49,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,70,67,48,10,70,66,67,48, 10,48,48,48,48,10,51,54,48,48,10,51,54,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,67,53,68,10,69,78,67,79,68,73,78, 71,32,54,52,54,48,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,51,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,51,54,48,48,10, 48,54,48,48,10,48,48,48,48,10,48,54,48,48,10,48, 55,48,48,10,48,51,56,48,10,48,49,56,48,10,48,49, 56,48,10,49,70,56,48,10,49,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,67,53,69,10,69,78,67,79,68,73,78,71,32,54,52, 54,48,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,54,48,48,10,48,55,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,55,48,48,10,48,69, 48,48,10,51,67,48,48,10,70,56,48,48,10,69,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,67,53,70, 10,69,78,67,79,68,73,78,71,32,54,52,54,48,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,48,48,48,10,51,48,48,48,10,51,48,48, 48,10,51,48,48,48,10,51,49,67,48,10,48,51,67,48, 10,48,54,48,48,10,67,55,56,48,10,67,51,67,48,10, 67,48,67,48,10,69,48,67,48,10,55,70,56,48,10,51, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,67,54,48,10,69,78,67, 79,68,73,78,71,32,54,52,54,48,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,67,48,48,10, 53,52,48,48,10,68,67,48,48,10,53,67,48,48,10,55, 48,48,48,10,48,48,48,48,10,53,52,48,48,10,53,52, 48,48,10,51,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,67,54,49,10,69,78,67,79,68,73,78, 71,32,54,52,54,48,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,65,56,48,48,10,65,56,48,48, 10,55,48,48,48,10,51,48,48,48,10,54,48,48,48,10, 68,56,48,48,10,51,48,48,48,10,54,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,67,54,50,10,69,78,67,79,68,73,78,71,32,54,52, 54,49,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,51,48,48,48,10,54,48,48,48,10,67,48,48, 48,10,48,48,48,48,10,65,56,48,48,10,65,56,48,48, 10,55,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,67,54,51, 10,69,78,67,79,68,73,78,71,32,54,52,54,49,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,55, 48,48,48,10,53,48,48,48,10,55,48,48,48,10,50,48, 48,48,10,67,48,48,48,10,48,48,48,48,10,65,56,48, 48,10,65,56,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,67,54,52,10,69,78,67, 79,68,73,78,71,32,54,52,54,49,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,65,56,48,48,10, 65,56,48,48,10,55,48,48,48,10,48,48,48,48,10,51, 48,48,48,10,54,48,48,48,10,67,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,67,54,53,10,69,78,67,79,68,73,78, 71,32,54,52,54,49,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,50,48,48,48,10,50,48,48,48, 10,50,48,48,48,10,48,48,48,48,10,65,56,48,48,10, 65,56,48,48,10,55,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,67,57,48,10,69,78,67,79,68,73,78,71,32,54,52, 54,53,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 55,67,48,10,54,55,67,48,10,54,51,56,48,10,54,48, 67,48,10,55,48,67,48,10,51,70,56,48,10,49,70,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,67,70,50, 10,69,78,67,79,68,73,78,71,32,54,52,55,53,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,51, 48,48,48,10,54,48,48,48,10,67,48,48,48,10,48,48, 48,48,10,65,56,48,48,10,65,56,48,48,10,55,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,70,67,48,10, 70,70,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,67,70,51,10,69,78,67, 79,68,73,78,71,32,54,52,55,53,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,55,48,48,48,10, 53,48,48,48,10,55,48,48,48,10,50,48,48,48,10,67, 48,48,48,10,48,48,48,48,10,65,56,48,48,10,65,56, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,70,70,67,48,10,70,70,67,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,67,70,52,10,69,78,67,79,68,73,78, 71,32,54,52,55,53,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,65,56,48,48,10,65,56,48,48, 10,55,48,48,48,10,48,48,48,48,10,51,48,48,48,10, 54,48,48,48,10,67,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,70,70,67,48,10,70,70,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,68,51,67,10,69,78,67,79,68,73,78,71,32,54,52, 56,50,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,67,48,48,10,49,56,48,48,10,51,54,48, 48,10,48,67,48,48,10,49,56,48,48,10,48,52,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,68,51,68, 10,69,78,67,79,68,73,78,71,32,54,52,56,50,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 67,48,48,10,49,56,48,48,10,51,54,48,48,10,48,67, 48,48,10,49,56,48,48,10,48,52,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,70,67,48,10, 48,55,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,68,51,69,10,69,78,67, 79,68,73,78,71,32,54,52,56,51,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,49,56,48,10,48,51,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,65,48,48,10,49,66,48,48,10,48,65, 48,48,10,51,53,56,48,10,50,65,56,48,10,51,53,56, 48,10,48,65,48,48,10,49,66,48,48,10,48,65,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,51,48,48,10, 48,49,56,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,68,51,70,10,69,78,67,79,68,73,78, 71,32,54,52,56,51,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,51,48,48,48, 10,49,56,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,65,48,48,10,49,66,48,48,10,48,65,48,48,10,51, 53,56,48,10,50,65,56,48,10,51,53,56,48,10,48,65, 48,48,10,49,66,48,48,10,48,65,48,48,10,48,67,48, 48,10,48,67,48,48,10,49,56,48,48,10,51,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,68,70,50,10,69,78,67,79,68,73,78,71,32,54,53, 48,49,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,48,48,48,10,50,65,48,48,10,49,67,48,48, 10,48,50,56,48,10,48,65,56,48,10,54,65,56,48,10, 69,65,56,48,10,65,65,56,48,10,69,65,56,48,10,51, 69,56,48,10,49,67,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,68,70,67, 10,69,78,67,79,68,73,78,71,32,54,53,48,50,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,52,48,48,10,49,52,48,48,10,49,52,48, 48,10,49,52,48,48,10,49,52,48,48,10,49,52,48,48, 10,49,52,48,48,10,57,53,52,48,10,57,50,52,48,10, 54,48,52,48,10,48,53,52,48,10,48,48,56,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,48,48,10,69,78,67, 79,68,73,78,71,32,54,53,48,50,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,48,49,10,69,78,67,79,68,73,78, 71,32,54,53,48,50,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,48,50,10,69,78,67,79,68,73,78,71,32,54,53, 48,50,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,48,51, 10,69,78,67,79,68,73,78,71,32,54,53,48,50,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,48,52,10,69,78,67, 79,68,73,78,71,32,54,53,48,50,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,48,53,10,69,78,67,79,68,73,78, 71,32,54,53,48,50,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,48,54,10,69,78,67,79,68,73,78,71,32,54,53, 48,51,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,48,55, 10,69,78,67,79,68,73,78,71,32,54,53,48,51,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,48,56,10,69,78,67, 79,68,73,78,71,32,54,53,48,51,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,48,57,10,69,78,67,79,68,73,78, 71,32,54,53,48,51,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,48,65,10,69,78,67,79,68,73,78,71,32,54,53, 48,51,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,48,66, 10,69,78,67,79,68,73,78,71,32,54,53,48,51,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,48,67,10,69,78,67, 79,68,73,78,71,32,54,53,48,51,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,48,68,10,69,78,67,79,68,73,78, 71,32,54,53,48,51,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,48,69,10,69,78,67,79,68,73,78,71,32,54,53, 48,51,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,48,70, 10,69,78,67,79,68,73,78,71,32,54,53,48,51,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,50,48,10,69,78,67, 79,68,73,78,71,32,54,53,48,53,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,51,67,48,10, 49,67,48,48,10,54,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,50,49,10,69,78,67,79,68,73,78, 71,32,54,53,48,53,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,70,48,48,48,10,48,69,48,48, 10,48,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,50,50,10,69,78,67,79,68,73,78,71,32,54,53, 48,53,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,49,70,56,48,10,51,48,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,50,51, 10,69,78,67,79,68,73,78,71,32,54,53,48,53,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,67,51,48,48,10,55,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,55,48,10,69,78,67, 79,68,73,78,71,32,54,53,49,51,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,51,48,48,48,10, 54,48,48,48,10,68,56,48,48,10,51,48,48,48,10,54, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,55,49,10,69,78,67,79,68,73,78, 71,32,54,53,49,51,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,51,48,48,48,10,54,48,48,48, 10,68,56,48,48,10,51,48,48,48,10,54,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,70,70,67,48,10,70,70,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,55,50,10,69,78,67,79,68,73,78,71,32,54,53, 49,51,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,53,52,48,48,10,68,67,48,48,10,53,67,48,48, 10,55,48,48,48,10,54,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,55,51, 10,69,78,67,79,68,73,78,71,32,54,53,49,51,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,70,67,48,10, 48,55,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,55,52,10,69,78,67, 79,68,73,78,71,32,54,53,49,52,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,48,48,48,10,67,48,48,48,10, 66,48,48,48,10,54,48,48,48,10,67,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,55,54,10,69,78,67,79,68,73,78, 71,32,54,53,49,52,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,51,48,48,48,10,54,48,48,48, 10,67,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,55,55,10,69,78,67,79,68,73,78,71,32,54,53, 49,52,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,51,48,48,48,10,54,48,48,48,10,67,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 70,67,48,10,70,70,67,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,55,56, 10,69,78,67,79,68,73,78,71,32,54,53,49,52,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,55, 48,48,48,10,53,48,48,48,10,55,48,48,48,10,50,48, 48,48,10,67,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,55,57,10,69,78,67, 79,68,73,78,71,32,54,53,49,52,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,55,48,48,48,10, 53,48,48,48,10,55,48,48,48,10,50,48,48,48,10,67, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,70,70,67,48,10,70,70,67,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,55,65,10,69,78,67,79,68,73,78, 71,32,54,53,49,52,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,48,48,48, 10,67,48,48,48,10,56,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,55,66,10,69,78,67,79,68,73,78,71,32,54,53, 49,52,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 70,67,48,10,70,70,67,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,48,48,48,10,67,48,48, 48,10,56,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,55,67, 10,69,78,67,79,68,73,78,71,32,54,53,49,52,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,65,56, 48,48,10,65,56,48,48,10,55,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,55,68,10,69,78,67, 79,68,73,78,71,32,54,53,49,52,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,65,56,48,48,10,65, 56,48,48,10,55,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,70,70,67,48,10,70,70,67,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,55,69,10,69,78,67,79,68,73,78, 71,32,54,53,49,53,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,54,48,48,48,10,57,48,48,48,10,54,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,55,70,10,69,78,67,79,68,73,78,71,32,54,53, 49,53,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,57,48,48,48,10,54,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 70,67,48,10,70,70,67,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,56,48, 10,69,78,67,79,68,73,78,71,32,54,53,49,53,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,69,48,48,10,49,69,48,48, 10,49,56,48,48,10,49,70,48,48,10,51,70,48,48,10, 51,56,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,56,49,10,69,78,67, 79,68,73,78,71,32,54,53,49,53,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 51,49,56,48,10,55,70,56,48,10,54,70,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,56,50,10,69,78,67,79,68,73,78, 71,32,54,53,49,53,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,51,49,56,48, 10,55,70,56,48,10,54,70,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,70,67,48,10,48,55,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,56,51,10,69,78,67,79,68,73,78,71,32,54,53, 49,53,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,69,48, 48,10,49,56,48,48,10,48,69,48,48,10,49,56,48,48, 10,48,52,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,56,52, 10,69,78,67,79,68,73,78,71,32,54,53,49,53,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,69,48,48,10,49,56, 48,48,10,48,69,48,48,10,49,56,48,48,10,48,52,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,70,67,48,10, 48,55,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,56,53,10,69,78,67, 79,68,73,78,71,32,54,53,49,53,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 67,48,48,10,51,48,48,48,10,49,67,48,48,10,51,48, 48,48,10,48,48,48,48,10,49,67,48,48,10,51,69,48, 48,10,51,51,48,48,10,51,70,48,48,10,49,70,48,48, 10,48,51,48,48,10,48,55,48,48,10,48,69,48,48,10, 51,67,48,48,10,70,56,48,48,10,69,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,56,54,10,69,78,67,79,68,73,78, 71,32,54,53,49,53,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,67,48,48,10, 51,48,48,48,10,49,67,48,48,10,51,48,48,48,10,48, 48,48,48,10,49,67,48,48,10,51,69,48,48,10,51,51, 48,48,10,51,70,67,48,10,49,70,67,48,10,48,51,48, 48,10,48,55,48,48,10,48,69,48,48,10,51,67,48,48, 10,70,56,48,48,10,69,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,56,55,10,69,78,67,79,68,73,78,71,32,54,53, 49,53,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,69, 48,48,10,49,56,48,48,10,48,69,48,48,10,49,56,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,56,56, 10,69,78,67,79,68,73,78,71,32,54,53,49,54,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,70,67,48,10, 48,55,67,48,10,48,48,48,48,10,48,69,48,48,10,49, 56,48,48,10,48,69,48,48,10,49,56,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,56,57,10,69,78,67, 79,68,73,78,71,32,54,53,49,54,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,56,48,48,10,54,48, 48,48,10,51,57,67,48,10,54,51,67,48,10,48,54,48, 48,10,67,55,56,48,10,67,51,67,48,10,67,48,67,48, 10,69,48,67,48,10,55,70,56,48,10,51,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,56,65,10,69,78,67,79,68,73,78, 71,32,54,53,49,54,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,69,48,48,10,49, 56,48,48,10,48,69,48,48,10,49,56,48,48,10,48,48, 48,48,10,54,55,67,48,10,54,55,67,48,10,54,51,56, 48,10,54,48,67,48,10,55,48,67,48,10,51,70,56,48, 10,49,70,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,56,66,10,69,78,67,79,68,73,78,71,32,54,53, 49,54,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,56,48,48,10,54,48,48,48, 10,51,56,48,48,10,54,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,70, 67,48,48,10,70,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,56,67, 10,69,78,67,79,68,73,78,71,32,54,53,49,54,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,56,48,48,10,54,48,48,48,10,51,56,48, 48,10,54,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,70,70,67,48,10, 70,66,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,56,68,10,69,78,67, 79,68,73,78,71,32,54,53,49,54,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,56,69,10,69,78,67,79,68,73,78, 71,32,54,53,49,54,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,70,67,48,10,48,55,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,56,70,10,69,78,67,79,68,73,78,71,32,54,53, 49,54,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,67,49,56,48,10,67,49,56,48,10,70, 70,56,48,10,55,70,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,57,48, 10,69,78,67,79,68,73,78,71,32,54,53,49,54,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,67,49,56,48,10,67,49,56,48,10,70,70,67,48,10, 55,70,52,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,57,49,10,69,78,67, 79,68,73,78,71,32,54,53,49,54,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,67,48,48,10,70,56,48,48, 10,48,48,48,48,10,49,56,48,48,10,49,56,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,57,50,10,69,78,67,79,68,73,78, 71,32,54,53,49,55,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,70,70,67,48,10,70,66,67,48,10,48,48,48, 48,10,49,56,48,48,10,49,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,57,51,10,69,78,67,79,68,73,78,71,32,54,53, 49,55,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,54,48,48, 10,51,54,48,48,10,48,48,48,48,10,49,67,48,48,10, 51,69,48,48,10,51,55,48,48,10,51,51,48,48,10,51, 51,48,48,10,51,70,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,57,52, 10,69,78,67,79,68,73,78,71,32,54,53,49,55,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,51,54,48,48,10,51,54, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,51,67,48,48,10,54,54,48,48,10,54,54,48,48, 10,54,54,48,48,10,51,70,48,48,10,48,51,67,48,10, 48,49,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,57,53,10,69,78,67, 79,68,73,78,71,32,54,53,49,55,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,54, 48,48,10,51,54,48,48,10,48,48,48,48,10,67,49,56, 48,10,67,49,56,48,10,70,70,56,48,10,55,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,57,54,10,69,78,67,79,68,73,78, 71,32,54,53,49,55,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,54,48,48,10,51, 54,48,48,10,48,48,48,48,10,67,49,56,48,10,67,49, 56,48,10,70,70,67,48,10,55,70,52,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,57,55,10,69,78,67,79,68,73,78,71,32,54,53, 49,55,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,54,48,48,10,51,54,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,70, 67,48,48,10,70,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,57,56, 10,69,78,67,79,68,73,78,71,32,54,53,49,55,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,54,48, 48,10,51,54,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,70,70,67,48,10, 70,66,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,57,57,10,69,78,67, 79,68,73,78,71,32,54,53,49,55,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,49,56,48,48,10,48,48,48,48,10,51,54, 48,48,10,51,54,48,48,10,48,48,48,48,10,67,49,56, 48,10,67,49,56,48,10,70,70,56,48,10,55,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,57,65,10,69,78,67,79,68,73,78, 71,32,54,53,49,55,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,56,48,48,10, 49,56,48,48,10,48,48,48,48,10,51,54,48,48,10,51, 54,48,48,10,48,48,48,48,10,67,49,56,48,10,67,49, 56,48,10,70,70,67,48,10,55,70,52,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,57,66,10,69,78,67,79,68,73,78,71,32,54,53, 49,55,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,56,48,48,10,49,56,48,48,10,48,48,48,48, 10,51,54,48,48,10,51,54,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,70, 67,48,48,10,70,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,57,67, 10,69,78,67,79,68,73,78,71,32,54,53,49,56,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,56, 48,48,10,49,56,48,48,10,48,48,48,48,10,51,54,48, 48,10,51,54,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,70,70,67,48,10, 70,66,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,57,68,10,69,78,67, 79,68,73,78,71,32,54,53,49,56,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,56,48,48,10,55,70,56,48,10,52,70,56, 48,10,49,56,48,48,10,51,48,48,48,10,54,48,48,48, 10,67,54,48,48,10,67,54,48,48,10,67,48,48,48,10, 69,48,48,48,10,55,70,56,48,10,51,70,56,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,57,69,10,69,78,67,79,68,73,78, 71,32,54,53,49,56,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 56,48,48,10,55,70,56,48,10,52,70,56,48,10,49,67, 48,48,10,51,55,67,48,10,54,51,67,48,10,67,48,48, 48,10,67,67,48,48,10,67,67,48,48,10,69,48,48,48, 10,55,70,56,48,10,51,70,56,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,57,70,10,69,78,67,79,68,73,78,71,32,54,53, 49,56,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,56,48,48,10,51,67,48,48,10, 48,54,48,48,10,48,51,48,48,10,48,49,56,48,10,70, 70,56,48,10,70,70,56,48,10,48,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,65,48, 10,69,78,67,79,68,73,78,71,32,54,53,49,56,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,69,48,48,10,55,70,56,48,10,54,51,56,48, 10,48,54,48,48,10,48,70,48,48,10,70,68,67,48,10, 70,48,67,48,10,48,48,48,48,10,49,56,48,48,10,49, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,65,49,10,69,78,67, 79,68,73,78,71,32,54,53,49,56,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,56,48,48,10,55,70,56,48,10,52,70,56, 48,10,49,56,48,48,10,51,48,48,48,10,54,48,48,48, 10,67,48,48,48,10,67,48,48,48,10,67,48,48,48,10, 69,48,48,48,10,55,70,56,48,10,51,70,56,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,65,50,10,69,78,67,79,68,73,78, 71,32,54,53,49,56,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 56,48,48,10,55,70,56,48,10,52,70,56,48,10,49,67, 48,48,10,51,55,67,48,10,54,51,67,48,10,67,48,48, 48,10,67,48,48,48,10,67,48,48,48,10,69,48,48,48, 10,55,70,56,48,10,51,70,56,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,65,51,10,69,78,67,79,68,73,78,71,32,54,53, 49,56,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,56,48,48,10,51,67,48,48,10, 48,54,48,48,10,48,51,48,48,10,48,49,56,48,10,70, 70,56,48,10,70,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,65,52, 10,69,78,67,79,68,73,78,71,32,54,53,49,56,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,69,48,48,10,55,70,56,48,10,54,51,56,48, 10,48,54,48,48,10,48,70,48,48,10,70,68,67,48,10, 70,48,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,65,53,10,69,78,67, 79,68,73,78,71,32,54,53,49,56,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,51,56,48,48,10,55,70,56,48,10,52,70,56, 48,10,49,56,48,48,10,51,48,48,48,10,54,48,48,48, 10,67,48,48,48,10,67,48,48,48,10,67,48,48,48,10, 69,48,48,48,10,55,70,56,48,10,51,70,56,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,65,54,10,69,78,67,79,68,73,78, 71,32,54,53,49,57,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,51, 56,48,48,10,55,70,56,48,10,52,70,56,48,10,49,67, 48,48,10,51,55,67,48,10,54,51,67,48,10,67,48,48, 48,10,67,48,48,48,10,67,48,48,48,10,69,48,48,48, 10,55,70,56,48,10,51,70,56,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,65,55,10,69,78,67,79,68,73,78,71,32,54,53, 49,57,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,56,48,48,10,51,67,48,48,10, 48,54,48,48,10,48,51,48,48,10,48,49,56,48,10,70, 70,56,48,10,70,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,65,56, 10,69,78,67,79,68,73,78,71,32,54,53,49,57,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,51,69,48,48,10,55,70,56,48,10,54,51,56,48, 10,48,54,48,48,10,48,70,48,48,10,70,68,67,48,10, 70,48,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,65,57,10,69,78,67, 79,68,73,78,71,32,54,53,49,57,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,69,48,48,10,48,55,48,48,10,48,51,48, 48,10,48,51,48,48,10,51,70,48,48,10,51,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,65,65,10,69,78,67,79,68,73,78, 71,32,54,53,49,57,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,51,48,48,10,52,51, 48,48,10,55,70,67,48,10,51,67,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,65,66,10,69,78,67,79,68,73,78,71,32,54,53, 49,57,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,69,48,48,10, 48,55,48,48,10,48,51,48,48,10,48,51,48,48,10,51, 70,48,48,10,51,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,65,67, 10,69,78,67,79,68,73,78,71,32,54,53,49,57,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,51,48,48,10,52,51,48,48,10,55,70,67,48,10, 51,67,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,65,68,10,69,78,67, 79,68,73,78,71,32,54,53,49,57,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,54,48, 48,10,48,55,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,55,48,48,10,48,69,48,48,10,51,67,48,48,10, 70,56,48,48,10,69,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,65,69,10,69,78,67,79,68,73,78, 71,32,54,53,49,57,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,54,48,48,10,48,55, 48,48,10,48,51,67,48,10,48,51,67,48,10,48,55,48, 48,10,48,69,48,48,10,51,67,48,48,10,70,56,48,48, 10,69,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,65,70,10,69,78,67,79,68,73,78,71,32,54,53, 49,57,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,48,48,48,10,48,54,48,48,10,48,55,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,55,48,48,10,48,69, 48,48,10,51,67,48,48,10,70,56,48,48,10,69,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,66,48, 10,69,78,67,79,68,73,78,71,32,54,53,50,48,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,48,48,48, 10,48,54,48,48,10,48,55,48,48,10,48,51,67,48,10, 48,51,67,48,10,48,55,48,48,10,48,69,48,48,10,51, 67,48,48,10,70,56,48,48,10,69,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,66,49,10,69,78,67, 79,68,73,78,71,32,54,53,50,48,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,57,52, 48,10,48,68,52,48,10,56,70,67,48,10,56,55,56,48, 10,56,52,48,48,10,67,67,48,48,10,70,67,48,48,10, 55,56,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,66,50,10,69,78,67,79,68,73,78, 71,32,54,53,50,48,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,57,52,48,10,48,68, 52,48,10,56,70,67,48,10,56,55,67,48,10,56,52,48, 48,10,67,67,48,48,10,70,67,48,48,10,55,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,66,51,10,69,78,67,79,68,73,78,71,32,54,53, 50,48,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,49,56,48,10,54,68,56,48,10,54,68,56,48,10,70, 70,56,48,10,70,55,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,66,52, 10,69,78,67,79,68,73,78,71,32,54,53,50,48,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,49,56,48, 10,54,68,56,48,10,54,68,56,48,10,70,70,67,48,10, 70,55,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,66,53,10,69,78,67, 79,68,73,78,71,32,54,53,50,48,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,48,48,48,10,48,54, 67,48,10,48,54,67,48,10,48,48,48,48,10,48,57,52, 48,10,48,68,52,48,10,56,70,67,48,10,56,55,56,48, 10,56,52,48,48,10,67,67,48,48,10,70,67,48,48,10, 55,56,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,66,54,10,69,78,67,79,68,73,78, 71,32,54,53,50,48,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,48,48,48,10,48,54,67,48,10,48, 54,67,48,10,48,48,48,48,10,48,57,52,48,10,48,68, 52,48,10,56,70,67,48,10,56,55,67,48,10,56,52,48, 48,10,67,67,48,48,10,70,67,48,48,10,55,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,66,55,10,69,78,67,79,68,73,78,71,32,54,53, 50,48,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,49,66,48,48,10,49,66,48,48,10,48,48,48,48,10, 48,49,56,48,10,54,68,56,48,10,54,68,56,48,10,70, 70,56,48,10,70,55,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,66,56, 10,69,78,67,79,68,73,78,71,32,54,53,50,48,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,49,66,48, 48,10,49,66,48,48,10,48,48,48,48,10,48,49,56,48, 10,54,68,56,48,10,54,68,56,48,10,70,70,67,48,10, 70,55,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,66,57,10,69,78,67, 79,68,73,78,71,32,54,53,50,48,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,49,56,48,10,48,66,67, 48,10,48,69,52,48,10,56,70,67,48,10,56,55,56,48, 10,56,52,48,48,10,67,67,48,48,10,70,67,48,48,10, 55,56,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,66,65,10,69,78,67,79,68,73,78, 71,32,54,53,50,49,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,49,56,48,10,48,66,67,48,10,48,69, 52,48,10,56,70,67,48,10,56,55,67,48,10,56,52,48, 48,10,67,67,48,48,10,70,67,48,48,10,55,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,66,66,10,69,78,67,79,68,73,78,71,32,54,53, 50,49,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,51,48,48,10, 48,55,56,48,10,54,68,56,48,10,55,57,56,48,10,70, 70,56,48,10,68,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,66,67, 10,69,78,67,79,68,73,78,71,32,54,53,50,49,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,51,48,48,10,48,55,56,48, 10,54,68,56,48,10,55,57,56,48,10,70,70,67,48,10, 68,70,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,66,68,10,69,78,67, 79,68,73,78,71,32,54,53,50,49,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,49,56,48,10,48,49, 56,48,10,48,48,48,48,10,48,49,56,48,10,48,66,67, 48,10,48,69,52,48,10,56,70,67,48,10,56,55,56,48, 10,56,52,48,48,10,67,67,48,48,10,70,67,48,48,10, 55,56,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,66,69,10,69,78,67,79,68,73,78, 71,32,54,53,50,49,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,49,56,48,10,48,49,56,48,10,48, 48,48,48,10,48,49,56,48,10,48,66,67,48,10,48,69, 52,48,10,56,70,67,48,10,56,55,67,48,10,56,52,48, 48,10,67,67,48,48,10,70,67,48,48,10,55,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,66,70,10,69,78,67,79,68,73,78,71,32,54,53, 50,49,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,48,48,48,10,48,51,48,48,10, 48,55,56,48,10,54,68,56,48,10,55,57,56,48,10,70, 70,56,48,10,68,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,67,48, 10,69,78,67,79,68,73,78,71,32,54,53,50,49,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,48,48,48,10,48,51,48,48,10,48,55,56,48, 10,54,68,56,48,10,55,57,56,48,10,70,70,67,48,10, 68,70,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,67,49,10,69,78,67, 79,68,73,78,71,32,54,53,50,49,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,51,48, 48,48,10,51,51,56,48,10,51,55,67,48,10,51,67,67, 48,10,51,56,67,48,10,70,70,67,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,67,50,10,69,78,67,79,68,73,78, 71,32,54,53,50,49,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,48,48,48,10,51, 51,56,48,10,51,55,67,48,10,51,67,67,48,10,51,56, 67,48,10,70,70,67,48,10,55,70,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,67,51,10,69,78,67,79,68,73,78,71,32,54,53, 50,49,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,51,51,56,48,10, 51,55,67,48,10,51,67,67,48,10,51,56,67,48,10,70, 70,67,48,10,70,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,67,52, 10,69,78,67,79,68,73,78,71,32,54,53,50,50,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,51,48,48,48,10,51,48,48, 48,10,51,48,48,48,10,51,51,56,48,10,51,55,67,48, 10,51,67,67,48,10,51,56,67,48,10,70,70,67,48,10, 70,70,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,67,53,10,69,78,67, 79,68,73,78,71,32,54,53,50,50,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,51,51,48,48,10,51,51,48,48,10,51,48, 48,48,10,51,51,56,48,10,51,55,67,48,10,51,67,67, 48,10,51,56,67,48,10,70,70,67,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,67,54,10,69,78,67,79,68,73,78, 71,32,54,53,50,50,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,51,48,48,10,51,51,48,48,10,51,48,48,48,10,51, 51,56,48,10,51,55,67,48,10,51,67,67,48,10,51,56, 67,48,10,70,70,67,48,10,55,70,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,67,55,10,69,78,67,79,68,73,78,71,32,54,53, 50,50,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,51,48,48, 10,51,51,48,48,10,51,48,48,48,10,51,51,56,48,10, 51,55,67,48,10,51,67,67,48,10,51,56,67,48,10,70, 70,67,48,10,70,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,67,56, 10,69,78,67,79,68,73,78,71,32,54,53,50,50,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,51,51,48,48,10,51,51,48, 48,10,51,48,48,48,10,51,51,56,48,10,51,55,67,48, 10,51,67,67,48,10,51,56,67,48,10,70,70,67,48,10, 70,70,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,67,57,10,69,78,67, 79,68,73,78,71,32,54,53,50,50,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,67,48,48,10,51,67,48,48,10,51,48,48, 48,10,51,54,48,48,10,49,67,48,48,10,51,56,48,48, 10,55,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 55,48,48,48,10,51,70,56,48,10,49,70,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,67,65,10,69,78,67,79,68,73,78, 71,32,54,53,50,50,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,69,48,48,10,51, 70,48,48,10,51,51,48,48,10,49,69,48,48,10,48,67, 48,48,10,49,70,67,48,10,51,66,67,48,10,55,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,55,48,48,48, 10,51,70,56,48,10,49,70,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,67,66,10,69,78,67,79,68,73,78,71,32,54,53, 50,50,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,69,48,48,10,49,70,48,48,10, 51,51,48,48,10,51,48,48,48,10,51,48,48,48,10,70, 70,56,48,10,70,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,67,67, 10,69,78,67,79,68,73,78,71,32,54,53,50,50,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,70,48,48,10,51,51,48,48, 10,49,69,48,48,10,48,67,48,48,10,70,70,67,48,10, 70,66,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,67,68,10,69,78,67, 79,68,73,78,71,32,54,53,50,50,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,56,48,48,10,49,56,48,48,10,48,48, 48,48,10,49,67,48,48,10,51,67,48,48,10,51,48,48, 48,10,51,54,48,48,10,49,67,48,48,10,51,56,48,48, 10,55,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 55,48,48,48,10,51,70,56,48,10,49,70,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,67,69,10,69,78,67,79,68,73,78, 71,32,54,53,50,51,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,49,69,48,48,10,51, 70,48,48,10,51,51,48,48,10,49,69,48,48,10,48,67, 48,48,10,49,70,67,48,10,51,66,67,48,10,55,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,55,48,48,48, 10,51,70,56,48,10,49,70,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,67,70,10,69,78,67,79,68,73,78,71,32,54,53, 50,51,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,69,48,48,10,49,70,48,48,10, 51,51,48,48,10,51,48,48,48,10,51,48,48,48,10,70, 70,56,48,10,70,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,68,48, 10,69,78,67,79,68,73,78,71,32,54,53,50,51,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,70,48,48,10,51,51,48,48, 10,49,69,48,48,10,48,67,48,48,10,70,70,67,48,10, 70,66,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,68,49,10,69,78,67, 79,68,73,78,71,32,54,53,50,51,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,48,48,48,10,48,55, 48,48,10,48,68,56,48,10,52,68,56,48,10,67,55,56, 48,10,67,49,56,48,10,70,70,56,48,10,55,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,68,50,10,69,78,67,79,68,73,78, 71,32,54,53,50,51,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,48,48,48,10,48,55,48,48,10,48, 68,56,48,10,52,68,56,48,10,67,55,56,48,10,67,49, 56,48,10,70,70,67,48,10,55,70,52,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,68,51,10,69,78,67,79,68,73,78,71,32,54,53, 50,51,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,56,48,48,10,49,56,48,48, 10,48,48,48,48,10,49,67,48,48,10,51,54,48,48,10, 51,54,48,48,10,49,69,48,48,10,48,54,48,48,10,70, 69,48,48,10,70,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,68,52, 10,69,78,67,79,68,73,78,71,32,54,53,50,51,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,51,51,48,48, 10,51,51,48,48,10,49,69,48,48,10,70,70,67,48,10, 70,51,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,68,53,10,69,78,67, 79,68,73,78,71,32,54,53,50,51,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,66,48,48,10,49,66,48,48,10,48,48, 48,48,10,48,54,48,48,10,48,70,48,48,10,48,57,56, 48,10,67,57,56,48,10,67,70,56,48,10,67,55,56,48, 10,67,49,56,48,10,69,51,48,48,10,55,69,48,48,10, 51,67,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,68,54,10,69,78,67,79,68,73,78, 71,32,54,53,50,51,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,66,48,48,10,49,66,48,48,10,48,48,48,48,10,48, 54,48,48,10,48,70,48,48,10,48,57,56,48,10,67,57, 56,48,10,67,70,67,48,10,67,55,67,48,10,67,49,56, 48,10,69,51,48,48,10,55,69,48,48,10,51,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,68,55,10,69,78,67,79,68,73,78,71,32,54,53, 50,51,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,54,48,48,10,51,54,48,48, 10,48,48,48,48,10,49,67,48,48,10,51,54,48,48,10, 51,54,48,48,10,49,69,48,48,10,48,54,48,48,10,70, 69,48,48,10,70,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,68,56, 10,69,78,67,79,68,73,78,71,32,54,53,50,52,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,54,48,48,10,51,54,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,51,51,48,48, 10,51,51,48,48,10,49,69,48,48,10,70,70,67,48,10, 70,51,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,68,57,10,69,78,67, 79,68,73,78,71,32,54,53,50,52,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 49,56,48,10,48,57,56,48,10,49,57,56,48,10,51,49, 56,48,10,49,57,56,48,10,51,49,56,48,10,48,49,56, 48,10,54,49,56,48,10,55,70,56,48,10,51,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,68,65,10,69,78,67,79,68,73,78, 71,32,54,53,50,52,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,49,56,48,10, 48,57,56,48,10,49,57,56,48,10,51,49,56,48,10,49, 57,56,48,10,51,49,56,48,10,48,49,56,48,10,54,49, 56,48,10,55,70,67,48,10,51,70,52,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,68,66,10,69,78,67,79,68,73,78,71,32,54,53, 50,52,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,49,56,48,10,48,55,56,48, 10,49,70,48,48,10,49,67,48,48,10,49,56,48,48,10, 49,56,48,48,10,48,67,48,48,10,48,67,48,48,10,70, 67,48,48,10,70,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,68,67, 10,69,78,67,79,68,73,78,71,32,54,53,50,52,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,49,56,48,10,48,55,56,48,10,49,70,48, 48,10,49,67,48,48,10,49,56,48,48,10,49,56,48,48, 10,48,67,48,48,10,48,67,48,48,10,70,70,67,48,10, 70,66,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,68,68,10,69,78,67, 79,68,73,78,71,32,54,53,50,52,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,55,51,56,48,10,51,70,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,68,69,10,69,78,67,79,68,73,78, 71,32,54,53,50,52,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,54,49, 56,48,10,54,49,67,48,10,54,49,67,48,10,55,51,56, 48,10,51,70,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,68,70,10,69,78,67,79,68,73,78,71,32,54,53, 50,52,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,70, 67,48,48,10,70,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,69,48, 10,69,78,67,79,68,73,78,71,32,54,53,50,52,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,70,70,67,48,10, 70,66,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,69,49,10,69,78,67, 79,68,73,78,71,32,54,53,50,52,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,69,48,48,10,49,70,48, 48,10,49,49,48,48,10,51,70,48,48,10,55,70,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,69,50,10,69,78,67,79,68,73,78, 71,32,54,53,50,53,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,69,48,48,10,49,70,48,48,10,49,49, 48,48,10,51,70,67,48,10,55,69,67,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,69,51,10,69,78,67,79,68,73,78,71,32,54,53, 50,53,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 49,69,48,48,10,49,51,48,48,10,51,51,48,48,10,70, 70,48,48,10,67,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,69,52, 10,69,78,67,79,68,73,78,71,32,54,53,50,53,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,49,69,48,48, 10,49,51,48,48,10,51,51,48,48,10,70,70,67,48,10, 67,69,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,69,53,10,69,78,67, 79,68,73,78,71,32,54,53,50,53,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,56,48,48,10,49,57,56, 48,10,67,49,56,48,10,67,49,56,48,10,67,49,56,48, 10,67,49,56,48,10,69,51,56,48,10,55,70,48,48,10, 51,69,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,69,54,10,69,78,67,79,68,73,78, 71,32,54,53,50,53,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,56,48,48,10,49,57,56,48,10,67,49, 56,48,10,67,49,67,48,10,67,49,67,48,10,67,49,56, 48,10,69,51,56,48,10,55,70,48,48,10,51,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,69,55,10,69,78,67,79,68,73,78,71,32,54,53, 50,53,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,56,48,48,10,49,56,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,70, 67,48,48,10,70,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,69,56, 10,69,78,67,79,68,73,78,71,32,54,53,50,53,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,56,48, 48,10,49,56,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,70,70,67,48,10, 70,66,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,69,57,10,69,78,67, 79,68,73,78,71,32,54,53,50,53,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,67,48,48,10,51,69,48,48,10,51,55,48, 48,10,51,51,48,48,10,51,51,48,48,10,51,70,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,69,65,10,69,78,67,79,68,73,78, 71,32,54,53,50,53,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,51,67,48,48,10,54, 54,48,48,10,54,54,48,48,10,54,54,48,48,10,51,70, 48,48,10,48,51,67,48,10,48,49,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,69,66,10,69,78,67,79,68,73,78,71,32,54,53, 50,53,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,56,48,48,10,49,67,48,48, 10,48,69,48,48,10,49,70,48,48,10,51,51,48,48,10, 51,51,56,48,10,51,54,56,48,10,51,67,56,48,10,70, 70,56,48,10,69,55,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,69,67, 10,69,78,67,79,68,73,78,71,32,54,53,50,54,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,70,49,67,48,10, 70,51,67,48,10,51,55,48,48,10,49,67,48,48,10,49, 67,48,48,10,48,69,48,48,10,48,54,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,69,68,10,69,78,67, 79,68,73,78,71,32,54,53,50,54,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,67,48,48,10,51,69,48, 48,10,51,51,48,48,10,51,70,48,48,10,49,70,48,48, 10,48,51,48,48,10,48,55,48,48,10,48,69,48,48,10, 51,67,48,48,10,70,56,48,48,10,69,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,69,69,10,69,78,67,79,68,73,78, 71,32,54,53,50,54,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,67,48,48,10,51,69,48,48,10,51,51, 48,48,10,51,70,67,48,10,49,70,67,48,10,48,51,48, 48,10,48,55,48,48,10,48,69,48,48,10,51,67,48,48, 10,70,56,48,48,10,69,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,69,70,10,69,78,67,79,68,73,78,71,32,54,53, 50,54,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,49,67,48,10, 48,51,67,48,10,48,54,48,48,10,67,55,56,48,10,67, 51,67,48,10,67,48,67,48,10,69,48,67,48,10,55,70, 56,48,10,51,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,70,48, 10,69,78,67,79,68,73,78,71,32,54,53,50,54,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,55,67,48,10, 54,55,67,48,10,54,51,56,48,10,54,48,67,48,10,55, 48,67,48,10,51,70,56,48,10,49,70,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,70,49,10,69,78,67, 79,68,73,78,71,32,54,53,50,54,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,49,67,48,10,48,51,67,48,10,48,54,48, 48,10,67,55,56,48,10,67,51,67,48,10,67,48,67,48, 10,69,48,67,48,10,55,70,56,48,10,51,70,48,48,10, 48,48,48,48,10,49,66,48,48,10,49,66,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,70,50,10,69,78,67,79,68,73,78, 71,32,54,53,50,54,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,55,67,48,10,54,55,67,48,10,54,51,56, 48,10,54,48,67,48,10,55,70,67,48,10,51,70,56,48, 10,49,66,48,48,10,49,66,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,70,51,10,69,78,67,79,68,73,78,71,32,54,53, 50,54,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,54,48,48,10,48,54,48,48,10,70, 69,48,48,10,70,67,48,48,10,48,48,48,48,10,54,67, 48,48,10,54,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,70,52, 10,69,78,67,79,68,73,78,71,32,54,53,50,54,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,70,70,67,48,10, 70,66,67,48,10,48,48,48,48,10,51,54,48,48,10,51, 54,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,70,53,10,69,78,67, 79,68,73,78,71,32,54,53,50,54,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 56,52,48,48,10,70,57,56,48,10,56,49,56,48,10,50, 49,56,48,10,51,49,56,48,10,51,49,56,48,10,49,57, 56,48,10,49,57,56,48,10,48,68,56,48,10,48,70,56, 48,10,48,55,56,48,10,55,70,48,48,10,55,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,70,54,10,69,78,67,79,68,73,78, 71,32,54,53,50,55,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,56,56,48,48, 10,70,49,56,48,10,56,49,56,48,10,50,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,49,57,56,48,10,49, 57,56,48,10,48,68,56,48,10,48,70,56,48,10,48,55, 56,48,10,55,70,67,48,10,55,67,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,70,55,10,69,78,67,79,68,73,78,71,32,54,53, 50,55,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,55,48,48,48,10,67,49,56, 48,10,55,49,56,48,10,67,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,49,57,56,48,10,49,57,56,48,10, 48,68,56,48,10,48,70,56,48,10,48,55,56,48,10,55, 70,48,48,10,55,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,70,56, 10,69,78,67,79,68,73,78,71,32,54,53,50,55,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,55,48,48,48,10,67,49,56,48,10,55,49, 56,48,10,67,49,56,48,10,51,49,56,48,10,51,49,56, 48,10,49,57,56,48,10,49,57,56,48,10,48,68,56,48, 10,48,70,56,48,10,48,55,56,48,10,55,70,67,48,10, 55,67,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,70,57,10,69,78,67, 79,68,73,78,71,32,54,53,50,55,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,49,56,48,10,51,49,56,48,10,49,57, 56,48,10,49,57,56,48,10,48,68,56,48,10,48,70,56, 48,10,48,55,56,48,10,55,70,48,48,10,55,67,48,48, 10,48,48,48,48,10,51,56,48,48,10,54,48,48,48,10, 51,56,48,48,10,54,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,70,65,10,69,78,67,79,68,73,78, 71,32,54,53,50,55,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,49,57,56,48,10,49, 57,56,48,10,48,68,56,48,10,48,70,56,48,10,48,55, 56,48,10,55,70,67,48,10,55,67,67,48,10,48,48,48, 48,10,51,56,48,48,10,54,48,48,48,10,51,56,48,48, 10,54,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,70,66,10,69,78,67,79,68,73,78,71,32,54,53, 50,55,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,49,57,56,48,10,49,57,56,48,10, 48,68,56,48,10,48,70,56,48,10,48,55,56,48,10,55, 70,48,48,10,55,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,70,67, 10,69,78,67,79,68,73,78,71,32,54,53,50,55,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,49,56,48,10,51,49,56, 48,10,49,57,56,48,10,49,57,56,48,10,48,68,56,48, 10,48,70,56,48,10,48,55,56,48,10,55,70,67,48,10, 55,67,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,54,49,10,69,78,67, 79,68,73,78,71,32,54,53,51,55,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,49,54,48,48, 10,49,50,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,54,50,10,69,78,67,79,68,73,78, 71,32,54,53,51,55,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,54,51,10,69,78,67,79,68,73,78,71,32,54,53, 51,55,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,51,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,54,52, 10,69,78,67,79,68,73,78,71,32,54,53,51,56,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,48,48,48,10, 49,56,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,54,53,10,69,78,67, 79,68,73,78,71,32,54,53,51,56,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,67,48,48,10,49,67,48,48,10,49,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,54,54,10,69,78,67,79,68,73,78, 71,32,54,53,51,56,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,70,48,48,10,48, 51,48,48,10,48,51,48,48,10,51,70,48,48,10,48,51, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,67,48, 48,10,49,56,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,54,55,10,69,78,67,79,68,73,78,71,32,54,53, 51,56,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,70,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,67,48,48,10,49,56, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,54,56, 10,69,78,67,79,68,73,78,71,32,54,53,51,56,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,51,48,48,10,48,54,48,48,10,48,67,48,48, 10,49,67,48,48,10,51,67,48,48,10,54,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,54,57,10,69,78,67, 79,68,73,78,71,32,54,53,51,56,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,55,70,48,48,10,54,51,48,48,10,54,51,48, 48,10,48,51,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,67,48,48,10,49,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,54,65,10,69,78,67,79,68,73,78, 71,32,54,53,51,56,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,70,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,54,66,10,69,78,67,79,68,73,78,71,32,54,53, 51,56,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,54,48,48,10,48,54,48,48,10,51,70,56,48,10, 48,69,48,48,10,48,69,48,48,10,49,54,48,48,10,51, 54,48,48,10,54,54,48,48,10,48,54,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,54,67, 10,69,78,67,79,68,73,78,71,32,54,53,51,56,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,56,48, 48,10,49,56,48,48,10,55,70,48,48,10,49,57,48,48, 10,49,65,48,48,10,49,65,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,54,68,10,69,78,67, 79,68,73,78,71,32,54,53,51,56,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,55,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,54,69,10,69,78,67,79,68,73,78, 71,32,54,53,51,57,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 70,48,48,10,48,51,48,48,10,48,51,48,48,10,51,70, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,51,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,54,70,10,69,78,67,79,68,73,78,71,32,54,53, 51,57,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,48,48,48,10,53,49,56,48,10,52,57,56,48,10, 50,49,56,48,10,48,49,56,48,10,48,51,48,48,10,48, 51,48,48,10,48,54,48,48,10,48,67,48,48,10,49,56, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,55,48, 10,69,78,67,79,68,73,78,71,32,54,53,51,57,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,70,48,48,10,51,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,55,49,10,69,78,67, 79,68,73,78,71,32,54,53,51,57,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,70,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,49,66, 48,48,10,49,67,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,51,48,48,48,10,54,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,55,50,10,69,78,67,79,68,73,78, 71,32,54,53,51,57,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,56,48,10,48,49,56,48,10, 48,51,48,48,10,48,54,48,48,10,48,69,48,48,10,49, 69,48,48,10,55,54,48,48,10,54,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,55,51,10,69,78,67,79,68,73,78,71,32,54,53, 51,57,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,55,70,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,48,49,56,48,10,48,51,48,48,10,48, 51,48,48,10,48,54,48,48,10,48,67,48,48,10,49,56, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,55,52, 10,69,78,67,79,68,73,78,71,32,54,53,51,57,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,70,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,55,53,10,69,78,67, 79,68,73,78,71,32,54,53,51,57,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,51,70,56,48,10,48,69, 48,48,10,48,69,48,48,10,49,69,48,48,10,49,54,48, 48,10,51,54,48,48,10,54,54,48,48,10,52,54,48,48, 10,48,54,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,55,54,10,69,78,67,79,68,73,78, 71,32,54,53,51,57,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,55,70,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,51,49,56,48,10,51,49, 56,48,10,51,49,56,48,10,51,49,56,48,10,54,49,56, 48,10,54,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,55,55,10,69,78,67,79,68,73,78,71,32,54,53, 51,57,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,70,48,48, 10,51,67,48,48,10,48,67,48,48,10,48,70,56,48,10, 55,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,54, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,55,56, 10,69,78,67,79,68,73,78,71,32,54,53,52,48,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,49,70,56, 48,10,49,57,56,48,10,49,57,56,48,10,51,49,56,48, 10,54,49,56,48,10,48,49,56,48,10,48,51,48,48,10, 48,54,48,48,10,48,67,48,48,10,49,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,55,57,10,69,78,67, 79,68,73,78,71,32,54,53,52,48,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,55,70,56,48,10,54,54, 48,48,10,54,54,48,48,10,67,54,48,48,10,67,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,67,48,48, 10,49,56,48,48,10,51,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,55,65,10,69,78,67,79,68,73,78, 71,32,54,53,52,48,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,48,48,10, 55,70,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,55,70,48, 48,10,55,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,55,66,10,69,78,67,79,68,73,78,71,32,54,53, 52,48,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,49,56,48,10,51,49,56,48,10,55,70,56,48, 10,51,49,56,48,10,51,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,48,51,48,48,10,48, 51,48,48,10,48,54,48,48,10,48,67,48,48,10,49,56, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,55,67, 10,69,78,67,79,68,73,78,71,32,54,53,52,48,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,52,48, 48,48,10,54,48,48,48,10,51,48,48,48,10,48,48,48, 48,10,52,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,48,51,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,67,48,48,10,49,56,48,48,10,51,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,55,68,10,69,78,67, 79,68,73,78,71,32,54,53,52,48,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,51, 48,48,10,48,51,48,48,10,48,54,48,48,10,48,55,48, 48,10,48,68,48,48,10,49,57,56,48,10,51,48,56,48, 10,54,48,56,48,10,52,48,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,55,69,10,69,78,67,79,68,73,78, 71,32,54,53,52,48,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,66,56,48,10,49,67,56,48,10,51,57,48,48,10,53, 57,48,48,10,49,65,48,48,10,49,65,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,48,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,55,70,10,69,78,67,79,68,73,78,71,32,54,53, 52,48,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,49,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,51,48,48,10,48, 51,48,48,10,48,54,48,48,10,48,67,48,48,10,49,56, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,56,48, 10,69,78,67,79,68,73,78,71,32,54,53,52,48,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,51,70,56,48,10,51,49,56, 48,10,51,49,56,48,10,55,49,56,48,10,68,66,48,48, 10,56,69,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,67,48,48,10,49,56,48,48,10,51,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,56,49,10,69,78,67, 79,68,73,78,71,32,54,53,52,48,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,49,56,48,10,48, 55,48,48,10,51,69,48,48,10,51,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,55,70,56,48,10,48,54,48, 48,10,48,54,48,48,10,48,67,48,48,10,48,67,48,48, 10,49,56,48,48,10,51,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,56,50,10,69,78,67,79,68,73,78, 71,32,54,53,52,49,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,52,57,56,48,10,54,68,56,48,10, 50,53,56,48,10,50,53,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,51, 48,48,10,48,51,48,48,10,48,54,48,48,10,48,67,48, 48,10,49,56,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,56,51,10,69,78,67,79,68,73,78,71,32,54,53, 52,49,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,49, 56,48,48,10,49,56,48,48,10,51,48,48,48,10,54,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,56,52, 10,69,78,67,79,68,73,78,71,32,54,53,52,49,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,55,48,48,48,10,55,56,48,48,10,54,70,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,56,53,10,69,78,67, 79,68,73,78,71,32,54,53,52,49,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,55,70, 56,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,49,56,48,48,10,49,56,48,48, 10,51,48,48,48,10,54,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,56,54,10,69,78,67,79,68,73,78, 71,32,54,53,52,49,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,70,48,48,10,51,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,56,55,10,69,78,67,79,68,73,78,71,32,54,53, 52,49,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,50,51,48,48,10, 51,54,48,48,10,49,69,48,48,10,48,67,48,48,10,48, 69,48,48,10,49,66,48,48,10,51,49,48,48,10,54,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,56,56, 10,69,78,67,79,68,73,78,71,32,54,53,52,49,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,49,56,48,48,10,48,67, 48,48,10,48,48,48,48,10,55,70,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,54,48,48,10,48,69,48,48, 10,49,68,48,48,10,51,52,56,48,10,54,52,56,48,10, 48,52,48,48,10,48,52,48,48,10,48,52,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,56,57,10,69,78,67, 79,68,73,78,71,32,54,53,52,49,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,67,48,48,10,48,67,48,48,10,49,56,48,48, 10,51,48,48,48,10,54,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,56,65,10,69,78,67,79,68,73,78, 71,32,54,53,52,49,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,54,48,48,10,51,54,48,48,10, 51,54,48,48,10,51,51,48,48,10,51,51,48,48,10,51, 51,48,48,10,51,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,67,49,56,48,10,67,49,56, 48,10,67,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,56,66,10,69,78,67,79,68,73,78,71,32,54,53, 52,49,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,49,48,48, 10,54,51,48,48,10,54,54,48,48,10,55,67,48,48,10, 55,56,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,49,56,48,10,51,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,56,67, 10,69,78,67,79,68,73,78,71,32,54,53,52,50,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,67,48,48,10,48,67,48,48,10, 49,56,48,48,10,51,48,48,48,10,54,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,56,68,10,69,78,67, 79,68,73,78,71,32,54,53,52,50,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,49,69,48,48,10,49,69,48,48,10,51,51,48, 48,10,51,51,48,48,10,54,51,48,48,10,54,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,56,69,10,69,78,67,79,68,73,78, 71,32,54,53,52,50,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,55,70,56,48,10,48,67,48,48,10,48, 67,48,48,10,50,68,48,48,10,50,68,48,48,10,50,68, 48,48,10,52,67,56,48,10,52,67,56,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,56,70,10,69,78,67,79,68,73,78,71,32,54,53, 52,50,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,50,51,48,48,10, 51,54,48,48,10,49,69,48,48,10,48,67,48,48,10,48, 54,48,48,10,48,51,48,48,10,48,49,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,57,48, 10,69,78,67,79,68,73,78,71,32,54,53,52,50,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,48,48,48,10,51,67,48,48,10,48,70,48, 48,10,48,51,48,48,10,51,48,48,48,10,51,67,48,48, 10,48,70,48,48,10,48,51,48,48,10,51,48,48,48,10, 51,67,48,48,10,48,70,48,48,10,48,51,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,57,49,10,69,78,67, 79,68,73,78,71,32,54,53,52,50,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,67,48,48,10,48,67,48,48,10,49,56, 48,48,10,49,56,48,48,10,51,54,48,48,10,51,51,48, 48,10,51,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,55,70,56,48,10,54,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,57,50,10,69,78,67,79,68,73,78, 71,32,54,53,52,50,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,51,48,48,10,48,51,48,48,10, 50,51,48,48,10,51,51,48,48,10,49,66,48,48,10,48, 69,48,48,10,48,54,48,48,10,48,55,48,48,10,48,68, 56,48,10,48,67,56,48,10,49,56,48,48,10,51,48,48, 48,10,54,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,57,51,10,69,78,67,79,68,73,78,71,32,54,53, 52,50,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,70,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,55,70,56,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,48,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,57,52, 10,69,78,67,79,68,73,78,71,32,54,53,52,50,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,66,56,48,10,49,67,56, 48,10,51,57,48,48,10,53,57,48,48,10,49,65,48,48, 10,49,65,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,57,53,10,69,78,67, 79,68,73,78,71,32,54,53,52,50,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,67,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,57,54,10,69,78,67,79,68,73,78, 71,32,54,53,52,51,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,70,48,48,10,55,70,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,55, 70,48,48,10,55,70,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,55,70,48,48,10,55,70,48, 48,10,48,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,57,55,10,69,78,67,79,68,73,78,71,32,54,53, 52,51,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,70,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,67,48,48,10,49,56,48,48,10,55,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,57,56, 10,69,78,67,79,68,73,78,71,32,54,53,52,51,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,49, 56,48,10,51,49,56,48,10,51,49,56,48,10,51,49,56, 48,10,51,49,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,48,51,48,48,10,48,51,48,48,10, 48,54,48,48,10,48,67,48,48,10,49,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,57,57,10,69,78,67, 79,68,73,78,71,32,54,53,52,51,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 67,48,48,10,54,67,48,48,10,54,67,48,48,10,54,67, 48,48,10,54,67,48,48,10,54,67,56,48,10,54,67,56, 48,10,54,68,48,48,10,54,68,48,48,10,54,69,48,48, 10,67,69,48,48,10,56,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,57,65,10,69,78,67,79,68,73,78, 71,32,54,53,52,51,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 49,48,48,10,54,51,48,48,10,54,51,48,48,10,54,54, 48,48,10,54,54,48,48,10,54,67,48,48,10,55,56,48, 48,10,55,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,57,66,10,69,78,67,79,68,73,78,71,32,54,53, 52,51,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,55,70,56,48,10,54,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,57,67, 10,69,78,67,79,68,73,78,71,32,54,53,52,51,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,67,48,48,10,48,67,48,48,10, 49,56,48,48,10,51,48,48,48,10,54,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,57,68,10,69,78,67, 79,68,73,78,71,32,54,53,52,51,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,52, 48,48,48,10,54,51,48,48,10,51,51,48,48,10,49,51, 48,48,10,48,51,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,67,48,48,10,48,67,48,48,10,49,56,48,48, 10,51,48,48,48,10,54,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,57,69,10,69,78,67,79,68,73,78, 71,32,54,53,52,51,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,56,48,48,10,48,69,48,48,10, 51,48,48,48,10,49,56,48,48,10,48,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,57,70,10,69,78,67,79,68,73,78,71,32,54,53, 52,51,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,49,50,48,48,10,49,50,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,70,67, 10,69,78,67,79,68,73,78,71,32,54,53,53,51,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,70,51, 56,48,10,66,48,56,48,10,67,56,56,48,10,52,56,48, 48,10,51,48,48,48,10,57,56,56,48,10,57,52,56,48, 10,57,56,56,48,10,49,54,48,48,10,49,65,48,48,10, 56,50,56,48,10,56,67,56,48,10,70,51,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,70,68,10,69,78,67, 79,68,73,78,71,32,54,53,53,51,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,70,48,48,10,54, 49,56,48,10,52,67,56,48,10,52,67,56,48,10,55,67, 56,48,10,55,57,56,48,10,55,51,56,48,10,55,51,56, 48,10,55,51,56,48,10,55,70,56,48,10,55,51,56,48, 10,55,51,56,48,10,51,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,69,78,68,70,79,78,84,10,}; size_t lxFNT10x20_bdf_size = 938831; therion/loch/lxFNT6x13_bdf.h0000644000076400010400000637363110537464734016653 0ustar userAdministratorsFT_Byte lxFNT6x13_bdf[] = { 83,84,65,82,84,70,79,78,84,32,50,46,49,10,67,79, 77,77,69,78,84,32,36,73,100,58,32,54,120,49,51,46, 98,100,102,44,118,32,49,46,49,49,50,32,50,48,48,50, 45,49,49,45,49,48,32,49,56,58,51,51,58,49,54,43, 48,48,32,109,103,107,50,53,32,82,101,108,32,109,103,107, 50,53,32,36,10,67,79,77,77,69,78,84,32,83,101,110, 100,32,98,117,103,32,114,101,112,111,114,116,115,32,116,111, 32,77,97,114,107,117,115,32,75,117,104,110,32,60,104,116, 116,112,58,47,47,119,119,119,46,99,108,46,99,97,109,46, 97,99,46,117,107,47,126,109,103,107,50,53,47,62,10,70, 79,78,84,32,45,77,105,115,99,45,70,105,120,101,100,45, 77,101,100,105,117,109,45,82,45,83,101,109,105,67,111,110, 100,101,110,115,101,100,45,45,49,51,45,49,50,48,45,55, 53,45,55,53,45,67,45,54,48,45,73,83,79,49,48,54, 52,54,45,49,10,83,73,90,69,32,49,50,32,55,53,32, 55,53,10,70,79,78,84,66,79,85,78,68,73,78,71,66, 79,88,32,54,32,49,51,32,48,32,45,50,10,83,84,65, 82,84,80,82,79,80,69,82,84,73,69,83,32,50,50,10, 70,79,78,84,78,65,77,69,95,82,69,71,73,83,84,82, 89,32,34,34,10,70,79,85,78,68,82,89,32,34,77,105, 115,99,34,10,70,65,77,73,76,89,95,78,65,77,69,32, 34,70,105,120,101,100,34,10,87,69,73,71,72,84,95,78, 65,77,69,32,34,77,101,100,105,117,109,34,10,83,76,65, 78,84,32,34,82,34,10,83,69,84,87,73,68,84,72,95, 78,65,77,69,32,34,83,101,109,105,67,111,110,100,101,110, 115,101,100,34,10,65,68,68,95,83,84,89,76,69,95,78, 65,77,69,32,34,34,10,80,73,88,69,76,95,83,73,90, 69,32,49,51,10,80,79,73,78,84,95,83,73,90,69,32, 49,50,48,10,82,69,83,79,76,85,84,73,79,78,95,88, 32,55,53,10,82,69,83,79,76,85,84,73,79,78,95,89, 32,55,53,10,83,80,65,67,73,78,71,32,34,67,34,10, 65,86,69,82,65,71,69,95,87,73,68,84,72,32,54,48, 10,67,72,65,82,83,69,84,95,82,69,71,73,83,84,82, 89,32,34,73,83,79,49,48,54,52,54,34,10,67,72,65, 82,83,69,84,95,69,78,67,79,68,73,78,71,32,34,49, 34,10,68,69,70,65,85,76,84,95,67,72,65,82,32,48, 10,70,79,78,84,95,68,69,83,67,69,78,84,32,50,10, 70,79,78,84,95,65,83,67,69,78,84,32,49,49,10,67, 79,80,89,82,73,71,72,84,32,34,80,117,98,108,105,99, 32,100,111,109,97,105,110,32,102,111,110,116,46,32,32,83, 104,97,114,101,32,97,110,100,32,101,110,106,111,121,46,34, 10,95,88,77,66,68,70,69,68,95,73,78,70,79,32,34, 69,100,105,116,101,100,32,119,105,116,104,32,120,109,98,100, 102,101,100,32,52,46,53,46,34,10,67,65,80,95,72,69, 73,71,72,84,32,57,10,88,95,72,69,73,71,72,84,32, 54,10,69,78,68,80,82,79,80,69,82,84,73,69,83,10, 67,72,65,82,83,32,52,52,51,48,10,83,84,65,82,84, 67,72,65,82,32,99,104,97,114,48,10,69,78,67,79,68, 73,78,71,32,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,65,56,10,48,48,10,56, 56,10,48,48,10,56,56,10,48,48,10,56,56,10,48,48, 10,65,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,115,112,97,99, 101,10,69,78,67,79,68,73,78,71,32,51,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,101,120,99,108,97,109,10,69,78,67,79,68, 73,78,71,32,51,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,48, 48,10,50,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,113,117,111, 116,101,100,98,108,10,69,78,67,79,68,73,78,71,32,51, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,53,48,10,53,48,10,53,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,110,117,109,98,101,114,115,105, 103,110,10,69,78,67,79,68,73,78,71,32,51,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,53,48,10,53,48,10,70,56,10,53,48, 10,70,56,10,53,48,10,53,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,100,111,108,108,97,114,10,69,78,67,79, 68,73,78,71,32,51,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,55,56, 10,65,48,10,65,48,10,55,48,10,50,56,10,50,56,10, 70,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,112,101, 114,99,101,110,116,10,69,78,67,79,68,73,78,71,32,51, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,52,56,10,65,56,10,53,48,10,49,48, 10,50,48,10,52,48,10,53,48,10,65,56,10,57,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,109,112,101,114,115,97,110, 100,10,69,78,67,79,68,73,78,71,32,51,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,52,48,10,65,48,10,65,48,10,52,48,10, 65,48,10,57,56,10,57,48,10,54,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,113,117,111,116,101,115,105,110,103,108,101,10, 69,78,67,79,68,73,78,71,32,51,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,50,48,10,50,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,112,97,114,101,110,108,101,102,116,10,69,78,67,79, 68,73,78,71,32,52,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,48,10,50,48,10,50,48, 10,52,48,10,52,48,10,52,48,10,52,48,10,52,48,10, 50,48,10,50,48,10,49,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,112,97, 114,101,110,114,105,103,104,116,10,69,78,67,79,68,73,78, 71,32,52,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,52,48,10,50,48,10,50,48,10,49,48, 10,49,48,10,49,48,10,49,48,10,49,48,10,50,48,10, 50,48,10,52,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,115,116,101,114, 105,115,107,10,69,78,67,79,68,73,78,71,32,52,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,65,56,10,55,48,10,65,56,10,50, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,112,108,117,115,10,69,78,67,79,68, 73,78,71,32,52,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 50,48,10,50,48,10,70,56,10,50,48,10,50,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,99,111,109, 109,97,10,69,78,67,79,68,73,78,71,32,52,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,51,48,10,50,48,10,52,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,104,121,112,104,101,110,10,69,78,67,79, 68,73,78,71,32,52,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,70,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,112,101, 114,105,111,100,10,69,78,67,79,68,73,78,71,32,52,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,50,48,10,55,48,10,50, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,115,108,97,115,104,10,69,78,67, 79,68,73,78,71,32,52,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,56,10,48, 56,10,49,48,10,49,48,10,50,48,10,52,48,10,52,48, 10,56,48,10,56,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,122, 101,114,111,10,69,78,67,79,68,73,78,71,32,52,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,53,48,10,56,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,53,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,111,110,101,10,69,78,67,79,68,73, 78,71,32,52,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,50,48,10,54,48,10,65, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,70,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,116,119,111,10, 69,78,67,79,68,73,78,71,32,53,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,55, 48,10,56,56,10,56,56,10,48,56,10,49,48,10,50,48, 10,52,48,10,56,48,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,116,104,114,101,101,10,69,78,67,79,68,73,78,71, 32,53,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,56,10,48,56,10,49,48,10, 50,48,10,55,48,10,48,56,10,48,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,102,111,117,114,10,69, 78,67,79,68,73,78,71,32,53,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,49,48, 10,49,48,10,51,48,10,53,48,10,53,48,10,57,48,10, 70,56,10,49,48,10,49,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,102,105,118,101,10,69,78,67,79,68,73,78,71,32,53, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,70,56,10,56,48,10,56,48,10,66,48, 10,67,56,10,48,56,10,48,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,115,105,120,10,69,78,67,79, 68,73,78,71,32,53,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,56,56, 10,56,48,10,56,48,10,70,48,10,56,56,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,115,101, 118,101,110,10,69,78,67,79,68,73,78,71,32,53,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,70,56,10,48,56,10,49,48,10,49,48,10,50, 48,10,50,48,10,52,48,10,52,48,10,52,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,101,105,103,104,116,10,69,78,67,79, 68,73,78,71,32,53,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,56,56, 10,56,56,10,56,56,10,55,48,10,56,56,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,110,105, 110,101,10,69,78,67,79,68,73,78,71,32,53,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,55,56, 10,48,56,10,48,56,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,99,111,108,111,110,10,69,78,67,79,68, 73,78,71,32,53,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 50,48,10,55,48,10,50,48,10,48,48,10,48,48,10,50, 48,10,55,48,10,50,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,115,101,109, 105,99,111,108,111,110,10,69,78,67,79,68,73,78,71,32, 53,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,50,48,10,55, 48,10,50,48,10,48,48,10,48,48,10,51,48,10,50,48, 10,52,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,108,101,115,115,10,69,78, 67,79,68,73,78,71,32,54,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,56,10, 49,48,10,50,48,10,52,48,10,56,48,10,52,48,10,50, 48,10,49,48,10,48,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 101,113,117,97,108,10,69,78,67,79,68,73,78,71,32,54, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,70,56, 10,48,48,10,48,48,10,70,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,103,114,101,97,116,101,114,10, 69,78,67,79,68,73,78,71,32,54,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 48,10,52,48,10,50,48,10,49,48,10,48,56,10,49,48, 10,50,48,10,52,48,10,56,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,113,117,101,115,116,105,111,110,10,69,78,67,79,68, 73,78,71,32,54,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,55,48,10,56,56,10, 56,56,10,48,56,10,49,48,10,50,48,10,50,48,10,48, 48,10,50,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,116,10, 69,78,67,79,68,73,78,71,32,54,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,55, 48,10,56,56,10,56,56,10,57,56,10,65,56,10,65,56, 10,66,48,10,56,48,10,55,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,65,10,69,78,67,79,68,73,78,71,32,54,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,53,48,10,56,56,10,56,56,10,56, 56,10,70,56,10,56,56,10,56,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,66,10,69,78,67,79,68,73,78,71, 32,54,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,48,10,52,56,10,52,56,10, 52,56,10,55,48,10,52,56,10,52,56,10,52,56,10,70, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,67,10,69,78,67,79, 68,73,78,71,32,54,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,56,56, 10,56,48,10,56,48,10,56,48,10,56,48,10,56,48,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,68,10, 69,78,67,79,68,73,78,71,32,54,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 48,10,52,56,10,52,56,10,52,56,10,52,56,10,52,56, 10,52,56,10,52,56,10,70,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,69,10,69,78,67,79,68,73,78,71,32,54,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,70,56,10,56,48,10,56,48,10,56,48,10,70, 48,10,56,48,10,56,48,10,56,48,10,70,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,70,10,69,78,67,79,68,73,78,71, 32,55,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,56,10,56,48,10,56,48,10, 56,48,10,70,48,10,56,48,10,56,48,10,56,48,10,56, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,71,10,69,78,67,79, 68,73,78,71,32,55,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,56,56, 10,56,48,10,56,48,10,56,48,10,57,56,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,72,10, 69,78,67,79,68,73,78,71,32,55,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,70,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,73,10,69,78,67,79,68,73,78,71,32,55,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,55,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,74,10,69,78,67,79,68,73,78,71, 32,55,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,51,56,10,49,48,10,49,48,10, 49,48,10,49,48,10,49,48,10,49,48,10,57,48,10,54, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,75,10,69,78,67,79, 68,73,78,71,32,55,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,56,56, 10,57,48,10,65,48,10,67,48,10,65,48,10,57,48,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,76,10, 69,78,67,79,68,73,78,71,32,55,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 48,10,56,48,10,56,48,10,56,48,10,56,48,10,56,48, 10,56,48,10,56,48,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,77,10,69,78,67,79,68,73,78,71,32,55,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,56,56,10,68,56,10,65,56,10,65, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,78,10,69,78,67,79,68,73,78,71, 32,55,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,67,56,10,67,56,10, 65,56,10,65,56,10,57,56,10,57,56,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,79,10,69,78,67,79, 68,73,78,71,32,55,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,80,10, 69,78,67,79,68,73,78,71,32,56,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 48,10,56,56,10,56,56,10,56,56,10,70,48,10,56,48, 10,56,48,10,56,48,10,56,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,81,10,69,78,67,79,68,73,78,71,32,56,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,55,48,10,56,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,65,56,10,55,48,10,48,56, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,82,10,69,78,67,79,68,73,78,71, 32,56,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,48,10,56,56,10,56,56,10, 56,56,10,70,48,10,65,48,10,57,48,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,83,10,69,78,67,79, 68,73,78,71,32,56,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,56,56, 10,56,48,10,56,48,10,55,48,10,48,56,10,48,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,84,10, 69,78,67,79,68,73,78,71,32,56,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 56,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,85,10,69,78,67,79,68,73,78,71,32,56,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,56,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,86,10,69,78,67,79,68,73,78,71, 32,56,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,53,48,10,53,48,10,53,48,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,87,10,69,78,67,79, 68,73,78,71,32,56,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,56,56, 10,56,56,10,56,56,10,65,56,10,65,56,10,65,56,10, 65,56,10,53,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,88,10, 69,78,67,79,68,73,78,71,32,56,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,56,56,10,53,48,10,53,48,10,50,48,10,53,48, 10,53,48,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,89,10,69,78,67,79,68,73,78,71,32,56,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,56,56,10,53,48,10,53,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,90,10,69,78,67,79,68,73,78,71, 32,57,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,56,10,48,56,10,49,48,10, 49,48,10,50,48,10,52,48,10,52,48,10,56,48,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,98,114,97,99,107,101, 116,108,101,102,116,10,69,78,67,79,68,73,78,71,32,57, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,55,48,10,52,48,10,52,48,10,52,48,10,52,48, 10,52,48,10,52,48,10,52,48,10,52,48,10,52,48,10, 55,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,98,97,99,107,115,108,97,115, 104,10,69,78,67,79,68,73,78,71,32,57,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,56,48,10,56,48,10,52,48,10,52,48,10,50,48,10, 49,48,10,49,48,10,48,56,10,48,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,98,114,97,99,107,101,116,114,105,103,104,116, 10,69,78,67,79,68,73,78,71,32,57,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,55,48,10, 49,48,10,49,48,10,49,48,10,49,48,10,49,48,10,49, 48,10,49,48,10,49,48,10,49,48,10,55,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,115,99,105,105,99,105,114,99,117,109,10,69, 78,67,79,68,73,78,71,32,57,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,50,48, 10,53,48,10,56,56,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,100,101,114,115,99,111,114,101,10,69,78,67,79, 68,73,78,71,32,57,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,70,56,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,103,114, 97,118,101,10,69,78,67,79,68,73,78,71,32,57,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 50,48,10,49,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,10,69,78,67,79,68,73,78,71, 32,57,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,48,10,48,56,10,55,56,10,56,56,10,57,56,10,54, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,98,10,69,78,67,79, 68,73,78,71,32,57,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,48,10,56,48, 10,56,48,10,70,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,70,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,99,10, 69,78,67,79,68,73,78,71,32,57,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,48,10,56,56,10,56,48, 10,56,48,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,100,10,69,78,67,79,68,73,78,71,32,49,48,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,56,10,48,56,10,48,56,10,55,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,55,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,101,10,69,78,67,79,68,73,78, 71,32,49,48,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,48,10,56,56,10,70,56,10,56,48,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,102,10,69,78, 67,79,68,73,78,71,32,49,48,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,51,48, 10,52,56,10,52,48,10,52,48,10,70,48,10,52,48,10, 52,48,10,52,48,10,52,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,103,10,69,78,67,79,68,73,78,71,32,49,48,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,55,56,10,48,56,10,56,56, 10,55,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,104,10,69,78,67,79,68,73,78,71, 32,49,48,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,56,48,10,56,48,10,56,48, 10,66,48,10,67,56,10,56,56,10,56,56,10,56,56,10, 56,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,105,10,69,78,67, 79,68,73,78,71,32,49,48,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 50,48,10,48,48,10,54,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 106,10,69,78,67,79,68,73,78,71,32,49,48,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,49,48,10,48,48,10,51,48,10,49,48, 10,49,48,10,49,48,10,49,48,10,57,48,10,57,48,10, 54,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,107,10,69,78,67,79,68,73,78,71,32, 49,48,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,48,10,56,48,10,56,48,10, 57,48,10,65,48,10,67,48,10,65,48,10,57,48,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,108,10,69,78,67,79, 68,73,78,71,32,49,48,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,54,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,109, 10,69,78,67,79,68,73,78,71,32,49,48,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,68,48,10,65,56,10, 65,56,10,65,56,10,65,56,10,56,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,110,10,69,78,67,79,68,73,78,71,32,49, 49,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,66, 48,10,67,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,111,10,69,78,67,79,68, 73,78,71,32,49,49,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,112,10, 69,78,67,79,68,73,78,71,32,49,49,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,70,48,10,56,56,10,56, 56,10,56,56,10,70,48,10,56,48,10,56,48,10,56,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,113,10,69,78,67,79,68,73,78,71,32,49,49, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,55,56, 10,56,56,10,56,56,10,56,56,10,55,56,10,48,56,10, 48,56,10,48,56,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,114,10,69,78,67,79,68,73, 78,71,32,49,49,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,66,48,10,67,56,10,56,48,10,56,48,10,56, 48,10,56,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,115,10,69, 78,67,79,68,73,78,71,32,49,49,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,48,10,56,56,10,54,48, 10,49,48,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,116,10,69,78,67,79,68,73,78,71,32,49,49,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,52,48,10,52,48,10,70,48,10, 52,48,10,52,48,10,52,48,10,52,56,10,51,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,10,69,78,67,79,68,73,78, 71,32,49,49,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,56,56,10,56,56,10,56,56,10,56,56,10,57,56, 10,54,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,118,10,69,78, 67,79,68,73,78,71,32,49,49,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,56,56,10,56,56,10,56,56,10, 53,48,10,53,48,10,50,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,119,10,69,78,67,79,68,73,78,71,32,49,49,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,56,10,56, 56,10,65,56,10,65,56,10,65,56,10,53,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,120,10,69,78,67,79,68,73,78,71, 32,49,50,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,56,56,10,53,48,10,50,48,10,50,48,10,53,48,10, 56,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,121,10,69,78,67, 79,68,73,78,71,32,49,50,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,56,56,10,56,56,10,56,56,10,57, 56,10,54,56,10,48,56,10,56,56,10,55,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 122,10,69,78,67,79,68,73,78,71,32,49,50,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,70,56,10,49,48, 10,50,48,10,52,48,10,56,48,10,70,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,98,114,97,99,101,108,101,102,116,10,69, 78,67,79,68,73,78,71,32,49,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,50, 48,10,50,48,10,50,48,10,50,48,10,67,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,49,56,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,98,97,114,10,69,78,67,79,68,73,78,71,32,49, 50,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,98,114,97,99,101,114,105, 103,104,116,10,69,78,67,79,68,73,78,71,32,49,50,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 49,56,10,50,48,10,50,48,10,50,48,10,50,48,10,67, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,115,99,105,105,116,105,108,100, 101,10,69,78,67,79,68,73,78,71,32,49,50,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,52,56,10,65,56,10,57,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,115,112,97,99,101,10,69,78,67,79,68, 73,78,71,32,49,54,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,101,120, 99,108,97,109,100,111,119,110,10,69,78,67,79,68,73,78, 71,32,49,54,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,50,48,10,48,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,99,101,110,116, 10,69,78,67,79,68,73,78,71,32,49,54,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,50,48,10,55,48,10,65,56,10,65,48,10,65,48,10, 65,56,10,55,48,10,50,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,115,116,101,114,108,105,110,103,10,69,78,67, 79,68,73,78,71,32,49,54,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,51,48,10, 52,56,10,52,48,10,52,48,10,69,48,10,52,48,10,52, 48,10,52,56,10,66,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 99,117,114,114,101,110,99,121,10,69,78,67,79,68,73,78, 71,32,49,54,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,56, 56,10,55,48,10,53,48,10,53,48,10,55,48,10,56,56, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,121,101,110,10, 69,78,67,79,68,73,78,71,32,49,54,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 56,56,10,56,56,10,53,48,10,53,48,10,70,56,10,50, 48,10,70,56,10,50,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,98,114,111,107,101,110,98,97,114,10,69,78,67, 79,68,73,78,71,32,49,54,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,48,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 115,101,99,116,105,111,110,10,69,78,67,79,68,73,78,71, 32,49,54,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,51,48,10,52,56,10,52,48,10,51,48, 10,52,56,10,52,56,10,51,48,10,48,56,10,52,56,10, 51,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,100,105,101,114,101, 115,105,115,10,69,78,67,79,68,73,78,71,32,49,54,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,53,48,10,53,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,99,111,112,121,114,105,103,104,116, 10,69,78,67,79,68,73,78,71,32,49,54,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,55,48, 10,56,56,10,65,56,10,68,56,10,67,56,10,68,56,10, 65,56,10,56,56,10,55,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,111,114,100,102,101,109,105,110,105,110,101,10, 69,78,67,79,68,73,78,71,32,49,55,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 55,48,10,48,56,10,55,56,10,56,56,10,55,56,10,48, 48,10,70,56,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,103,117,105,108,108,101,109,111,116,108,101,102,116, 10,69,78,67,79,68,73,78,71,32,49,55,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,50,56,10,53,48,10,65,48,10, 65,48,10,53,48,10,50,56,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,108,111,103,105,99,97,108,110,111,116,10,69, 78,67,79,68,73,78,71,32,49,55,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,70,56,10,48,56, 10,48,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,104,121,112,104,101,110,10,69,78,67,79,68,73,78, 71,32,49,55,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,55,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,114,101,103,105, 115,116,101,114,101,100,10,69,78,67,79,68,73,78,71,32, 49,55,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,55,48,10,56,56,10,69,56,10,68,56,10, 68,56,10,69,56,10,68,56,10,56,56,10,55,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,109,97,99,114,111,110, 10,69,78,67,79,68,73,78,71,32,49,55,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,100,101,103,114,101,101,10,69,78,67,79,68, 73,78,71,32,49,55,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,51,48,10,52,56, 10,52,56,10,51,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,112,108, 117,115,109,105,110,117,115,10,69,78,67,79,68,73,78,71, 32,49,55,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,50,48,10,50,48, 10,70,56,10,50,48,10,50,48,10,48,48,10,70,56,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,116,119,111,115,117, 112,101,114,105,111,114,10,69,78,67,79,68,73,78,71,32, 49,55,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,52,48,10,65,48,10,50,48,10,52,48,10, 69,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,116,104,114,101,101,115, 117,112,101,114,105,111,114,10,69,78,67,79,68,73,78,71, 32,49,55,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,52,48,10,65,48,10,52,48,10,50,48, 10,67,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,99,117,116,101, 10,69,78,67,79,68,73,78,71,32,49,56,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,49,48, 10,50,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,109,117,10,69,78,67,79,68,73,78,71,32, 49,56,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 56,56,10,56,56,10,56,56,10,56,56,10,57,56,10,69, 56,10,56,48,10,56,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,112,97,114,97,103,114, 97,112,104,10,69,78,67,79,68,73,78,71,32,49,56,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,55,56,10,69,56,10,69,56,10,69,56,10, 69,56,10,54,56,10,50,56,10,50,56,10,50,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,112,101,114,105,111,100,99,101,110, 116,101,114,101,100,10,69,78,67,79,68,73,78,71,32,49, 56,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,51,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,99,101,100,105,108,108,97, 10,69,78,67,79,68,73,78,71,32,49,56,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,49,48,10,50, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,111,110,101,115,117,112,101,114,105,111,114,10, 69,78,67,79,68,73,78,71,32,49,56,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,52,48,10, 67,48,10,52,48,10,52,48,10,69,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,111,114,100,109,97,115,99,117,108,105,110,101,10, 69,78,67,79,68,73,78,71,32,49,56,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 55,48,10,56,56,10,56,56,10,56,56,10,55,48,10,48, 48,10,70,56,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,103,117,105,108,108,101,109,111,116,114,105,103,104, 116,10,69,78,67,79,68,73,78,71,32,49,56,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,65,48,10,53,48,10,50,56, 10,50,56,10,53,48,10,65,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,111,110,101,113,117,97,114,116,101,114,10, 69,78,67,79,68,73,78,71,32,49,56,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,52,48,10, 67,48,10,52,48,10,52,48,10,69,48,10,48,56,10,49, 56,10,50,56,10,51,56,10,48,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,111,110,101,104,97,108,102,10,69,78,67,79,68, 73,78,71,32,49,56,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,52,48,10,67,48,10,52,48, 10,52,48,10,69,48,10,49,48,10,50,56,10,48,56,10, 49,48,10,51,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,116,104, 114,101,101,113,117,97,114,116,101,114,115,10,69,78,67,79, 68,73,78,71,32,49,57,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,52,48,10,65,48,10,52, 48,10,50,48,10,65,48,10,52,56,10,49,56,10,50,56, 10,51,56,10,48,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,113, 117,101,115,116,105,111,110,100,111,119,110,10,69,78,67,79, 68,73,78,71,32,49,57,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,48, 48,10,50,48,10,50,48,10,52,48,10,56,48,10,56,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,65, 103,114,97,118,101,10,69,78,67,79,68,73,78,71,32,49, 57,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,52,48,10,50,48,10,48,48,10,50,48,10,53, 48,10,56,56,10,56,56,10,70,56,10,56,56,10,56,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,65,97,99,117,116,101,10, 69,78,67,79,68,73,78,71,32,49,57,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,49,48,10, 50,48,10,48,48,10,50,48,10,53,48,10,56,56,10,56, 56,10,70,56,10,56,56,10,56,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,65,99,105,114,99,117,109,102,108,101,120,10,69, 78,67,79,68,73,78,71,32,49,57,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,51,48,10,52, 56,10,48,48,10,50,48,10,53,48,10,56,56,10,56,56, 10,70,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,65,116,105,108,100,101,10,69,78,67,79,68,73,78, 71,32,49,57,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,50,56,10,53,48,10,48,48,10,50, 48,10,53,48,10,56,56,10,56,56,10,70,56,10,56,56, 10,56,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,65,100,105,101, 114,101,115,105,115,10,69,78,67,79,68,73,78,71,32,49, 57,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,53,48,10,53,48,10,48,48,10,50,48,10,53, 48,10,56,56,10,56,56,10,70,56,10,56,56,10,56,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,65,114,105,110,103,10,69, 78,67,79,68,73,78,71,32,49,57,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,50,48,10,53, 48,10,50,48,10,50,48,10,53,48,10,56,56,10,56,56, 10,70,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,65,69,10,69,78,67,79,68,73,78,71,32,49,57, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,53,56,10,65,48,10,65,48,10,65,48, 10,66,48,10,69,48,10,65,48,10,65,48,10,66,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,67,99,101,100,105,108,108,97, 10,69,78,67,79,68,73,78,71,32,49,57,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,48,10,56,56,10,56,48,10,56,48,10,56,48,10, 56,48,10,56,48,10,56,56,10,55,48,10,50,48,10,52, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,69,103,114,97,118,101,10,69,78,67,79,68, 73,78,71,32,50,48,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,52,48,10,50,48,10,48,48, 10,70,56,10,56,48,10,56,48,10,70,48,10,56,48,10, 56,48,10,70,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,69,97, 99,117,116,101,10,69,78,67,79,68,73,78,71,32,50,48, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,48,10,50,48,10,48,48,10,70,56,10,56,48, 10,56,48,10,70,48,10,56,48,10,56,48,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,69,99,105,114,99,117,109,102, 108,101,120,10,69,78,67,79,68,73,78,71,32,50,48,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,51,48,10,52,56,10,48,48,10,70,56,10,56,48,10, 56,48,10,70,48,10,56,48,10,56,48,10,70,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,69,100,105,101,114,101,115,105,115, 10,69,78,67,79,68,73,78,71,32,50,48,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,53,48, 10,53,48,10,48,48,10,70,56,10,56,48,10,56,48,10, 70,48,10,56,48,10,56,48,10,70,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,73,103,114,97,118,101,10,69,78,67,79,68, 73,78,71,32,50,48,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,52,48,10,50,48,10,48,48, 10,55,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,73,97, 99,117,116,101,10,69,78,67,79,68,73,78,71,32,50,48, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,48,10,50,48,10,48,48,10,55,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,73,99,105,114,99,117,109,102, 108,101,120,10,69,78,67,79,68,73,78,71,32,50,48,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,51,48,10,52,56,10,48,48,10,55,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,73,100,105,101,114,101,115,105,115, 10,69,78,67,79,68,73,78,71,32,50,48,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,53,48, 10,53,48,10,48,48,10,55,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,69,116,104,10,69,78,67,79,68,73,78,71, 32,50,48,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,70,48,10,52,56,10,52,56, 10,52,56,10,69,56,10,52,56,10,52,56,10,52,56,10, 70,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,78,116,105,108,100, 101,10,69,78,67,79,68,73,78,71,32,50,48,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,50, 56,10,53,48,10,48,48,10,56,56,10,56,56,10,67,56, 10,65,56,10,57,56,10,56,56,10,56,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,79,103,114,97,118,101,10,69,78,67,79, 68,73,78,71,32,50,49,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,52,48,10,50,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,79, 97,99,117,116,101,10,69,78,67,79,68,73,78,71,32,50, 49,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,49,48,10,50,48,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,55,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,79,99,105,114,99,117,109, 102,108,101,120,10,69,78,67,79,68,73,78,71,32,50,49, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,51,48,10,52,56,10,48,48,10,55,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,79,116,105,108,100,101,10,69, 78,67,79,68,73,78,71,32,50,49,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,50,56,10,53, 48,10,48,48,10,55,48,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,79,100,105,101,114,101,115,105,115,10,69,78,67,79, 68,73,78,71,32,50,49,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,53,48,10,53,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,109, 117,108,116,105,112,108,121,10,69,78,67,79,68,73,78,71, 32,50,49,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,56,56,10,53,48,10,50,48,10,53,48,10,56,56,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,79,115,108,97,115, 104,10,69,78,67,79,68,73,78,71,32,50,49,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 56,10,55,48,10,57,56,10,57,56,10,65,56,10,65,56, 10,65,56,10,67,56,10,67,56,10,55,48,10,56,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,85,103,114,97,118,101,10,69,78,67,79, 68,73,78,71,32,50,49,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,52,48,10,50,48,10,48, 48,10,56,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,85, 97,99,117,116,101,10,69,78,67,79,68,73,78,71,32,50, 49,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,49,48,10,50,48,10,48,48,10,56,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,55,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,85,99,105,114,99,117,109, 102,108,101,120,10,69,78,67,79,68,73,78,71,32,50,49, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,51,48,10,52,56,10,48,48,10,56,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,85,100,105,101,114,101,115,105, 115,10,69,78,67,79,68,73,78,71,32,50,50,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,53, 48,10,53,48,10,48,48,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,89,97,99,117,116,101,10,69,78,67,79, 68,73,78,71,32,50,50,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,49,48,10,50,48,10,48, 48,10,56,56,10,56,56,10,53,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,84, 104,111,114,110,10,69,78,67,79,68,73,78,71,32,50,50, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,48,10,70,48,10,56,56,10,56,56, 10,56,56,10,70,48,10,56,48,10,56,48,10,56,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,103,101,114,109,97,110,100,98, 108,115,10,69,78,67,79,68,73,78,71,32,50,50,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,54,48,10,57,48,10,57,48,10,65,48,10,65, 48,10,57,48,10,56,56,10,56,56,10,66,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,103,114,97,118,101,10,69,78,67, 79,68,73,78,71,32,50,50,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,48,10, 50,48,10,48,48,10,55,48,10,48,56,10,55,56,10,56, 56,10,57,56,10,54,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,97,99,117,116,101,10,69,78,67,79,68,73,78,71,32, 50,50,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,49,48,10,50,48,10,48,48,10, 55,48,10,48,56,10,55,56,10,56,56,10,57,56,10,54, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,99,105,114,99,117, 109,102,108,101,120,10,69,78,67,79,68,73,78,71,32,50, 50,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,51,48,10,52,56,10,48,48,10,55, 48,10,48,56,10,55,56,10,56,56,10,57,56,10,54,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,116,105,108,100,101,10, 69,78,67,79,68,73,78,71,32,50,50,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,56,10,53,48,10,48,48,10,55,48,10,48,56,10,55, 56,10,56,56,10,57,56,10,54,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,100,105,101,114,101,115,105,115,10,69,78,67, 79,68,73,78,71,32,50,50,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,53,48,10, 53,48,10,48,48,10,55,48,10,48,56,10,55,56,10,56, 56,10,57,56,10,54,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,114,105,110,103,10,69,78,67,79,68,73,78,71,32,50, 50,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,51,48,10,52,56,10,51,48,10,48,48,10,55, 48,10,48,56,10,55,56,10,56,56,10,57,56,10,54,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,101,10,69,78,67,79, 68,73,78,71,32,50,51,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,55,48,10,50,56,10,55,48,10,65,48, 10,65,56,10,53,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,99, 99,101,100,105,108,108,97,10,69,78,67,79,68,73,78,71, 32,50,51,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,55,48,10,56,56,10,56,48,10,56,48,10,56,56,10, 55,48,10,50,48,10,52,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,101,103,114,97,118, 101,10,69,78,67,79,68,73,78,71,32,50,51,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,52,48,10,50,48,10,48,48,10,55,48,10,56,56, 10,70,56,10,56,48,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,101,97,99,117,116,101,10,69,78,67,79, 68,73,78,71,32,50,51,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,49,48,10,50, 48,10,48,48,10,55,48,10,56,56,10,70,56,10,56,48, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,101, 99,105,114,99,117,109,102,108,101,120,10,69,78,67,79,68, 73,78,71,32,50,51,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,51,48,10,52,56, 10,48,48,10,55,48,10,56,56,10,70,56,10,56,48,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,101,100, 105,101,114,101,115,105,115,10,69,78,67,79,68,73,78,71, 32,50,51,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,53,48,10,53,48,10,48,48, 10,55,48,10,56,56,10,70,56,10,56,48,10,56,56,10, 55,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,105,103,114,97,118, 101,10,69,78,67,79,68,73,78,71,32,50,51,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,52,48,10,50,48,10,48,48,10,54,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,105,97,99,117,116,101,10,69,78,67,79, 68,73,78,71,32,50,51,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,49,48,10,50, 48,10,48,48,10,54,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,105, 99,105,114,99,117,109,102,108,101,120,10,69,78,67,79,68, 73,78,71,32,50,51,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,51,48,10,52,56, 10,48,48,10,54,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,105,100, 105,101,114,101,115,105,115,10,69,78,67,79,68,73,78,71, 32,50,51,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,53,48,10,53,48,10,48,48, 10,54,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 55,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,101,116,104,10,69, 78,67,79,68,73,78,71,32,50,52,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,53,48,10,50, 48,10,54,48,10,49,48,10,55,48,10,56,56,10,56,56, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,110,116,105,108,100,101,10,69,78,67,79,68,73,78, 71,32,50,52,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,50,56,10,53,48,10,48, 48,10,66,48,10,67,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,111,103,114,97, 118,101,10,69,78,67,79,68,73,78,71,32,50,52,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,52,48,10,50,48,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,111,97,99,117,116,101,10,69,78,67, 79,68,73,78,71,32,50,52,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,49,48,10, 50,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 111,99,105,114,99,117,109,102,108,101,120,10,69,78,67,79, 68,73,78,71,32,50,52,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,51,48,10,52, 56,10,48,48,10,55,48,10,56,56,10,56,56,10,56,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,111, 116,105,108,100,101,10,69,78,67,79,68,73,78,71,32,50, 52,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,50,56,10,53,48,10,48,48,10,55, 48,10,56,56,10,56,56,10,56,56,10,56,56,10,55,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,111,100,105,101,114,101,115, 105,115,10,69,78,67,79,68,73,78,71,32,50,52,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,53,48,10,53,48,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,100,105,118,105,100,101,10,69,78,67, 79,68,73,78,71,32,50,52,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 50,48,10,50,48,10,48,48,10,70,56,10,48,48,10,50, 48,10,50,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 111,115,108,97,115,104,10,69,78,67,79,68,73,78,71,32, 50,52,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,56,10, 55,48,10,57,56,10,65,56,10,65,56,10,67,56,10,55, 48,10,56,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,103,114,97,118,101, 10,69,78,67,79,68,73,78,71,32,50,52,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,52,48,10,50,48,10,48,48,10,56,56,10,56,56,10, 56,56,10,56,56,10,57,56,10,54,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,97,99,117,116,101,10,69,78,67,79,68, 73,78,71,32,50,53,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,49,48,10,50,48, 10,48,48,10,56,56,10,56,56,10,56,56,10,56,56,10, 57,56,10,54,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,99, 105,114,99,117,109,102,108,101,120,10,69,78,67,79,68,73, 78,71,32,50,53,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,51,48,10,52,56,10, 48,48,10,56,56,10,56,56,10,56,56,10,56,56,10,57, 56,10,54,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,100,105, 101,114,101,115,105,115,10,69,78,67,79,68,73,78,71,32, 50,53,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,53,48,10,53,48,10,48,48,10, 56,56,10,56,56,10,56,56,10,56,56,10,57,56,10,54, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,121,97,99,117,116,101, 10,69,78,67,79,68,73,78,71,32,50,53,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,49,48,10,50,48,10,48,48,10,56,56,10,56,56,10, 56,56,10,57,56,10,54,56,10,48,56,10,56,56,10,55, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,116,104,111,114,110,10,69,78,67,79,68,73, 78,71,32,50,53,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,56,48,10, 56,48,10,66,48,10,67,56,10,56,56,10,56,56,10,67, 56,10,66,48,10,56,48,10,56,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,121,100,105, 101,114,101,115,105,115,10,69,78,67,79,68,73,78,71,32, 50,53,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,53,48,10,53,48,10,48,48,10, 56,56,10,56,56,10,56,56,10,57,56,10,54,56,10,48, 56,10,56,56,10,55,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,65,109,97,99,114,111, 110,10,69,78,67,79,68,73,78,71,32,50,53,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,70, 56,10,48,48,10,50,48,10,53,48,10,56,56,10,56,56, 10,70,56,10,56,56,10,56,56,10,56,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,109,97,99,114,111,110,10,69,78,67, 79,68,73,78,71,32,50,53,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 70,56,10,48,48,10,55,48,10,48,56,10,55,56,10,56, 56,10,57,56,10,54,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 65,98,114,101,118,101,10,69,78,67,79,68,73,78,71,32, 50,53,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,56,56,10,55,48,10,48,48,10,50,48,10, 53,48,10,56,56,10,56,56,10,70,56,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,98,114,101,118,101, 10,69,78,67,79,68,73,78,71,32,50,53,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,56,56,10,55,48,10,48,48,10,55,48,10,48,56,10, 55,56,10,56,56,10,57,56,10,54,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,65,111,103,111,110,101,107,10,69,78,67,79, 68,73,78,71,32,50,54,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,53, 48,10,56,56,10,56,56,10,56,56,10,70,56,10,56,56, 10,56,56,10,56,56,10,48,56,10,48,52,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 111,103,111,110,101,107,10,69,78,67,79,68,73,78,71,32, 50,54,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,48,10,48,56,10,55,56,10,56,56,10,57,56,10,54, 56,10,48,56,10,48,52,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,67,97,99,117,116,101, 10,69,78,67,79,68,73,78,71,32,50,54,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,49,48, 10,50,48,10,48,48,10,55,48,10,56,56,10,56,48,10, 56,48,10,56,48,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,99,97,99,117,116,101,10,69,78,67,79,68, 73,78,71,32,50,54,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,49,48,10,50,48, 10,48,48,10,55,48,10,56,56,10,56,48,10,56,48,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,67,99, 105,114,99,117,109,102,108,101,120,10,69,78,67,79,68,73, 78,71,32,50,54,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,51,48,10,52,56,10,48,48,10, 55,48,10,56,56,10,56,48,10,56,48,10,56,48,10,56, 56,10,55,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,99,99,105, 114,99,117,109,102,108,101,120,10,69,78,67,79,68,73,78, 71,32,50,54,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,51,48,10,52,56,10,48, 48,10,55,48,10,56,56,10,56,48,10,56,48,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,67,100,111,116, 97,99,99,101,110,116,10,69,78,67,79,68,73,78,71,32, 50,54,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,50,48,10,50,48,10,48,48,10,55,48,10, 56,56,10,56,48,10,56,48,10,56,48,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,99,100,111,116,97,99, 99,101,110,116,10,69,78,67,79,68,73,78,71,32,50,54, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,50,48,10,50,48,10,48,48,10,55,48, 10,56,56,10,56,48,10,56,48,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,67,99,97,114,111,110,10,69, 78,67,79,68,73,78,71,32,50,54,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,52,56,10,51, 48,10,48,48,10,55,48,10,56,56,10,56,48,10,56,48, 10,56,48,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,99,99,97,114,111,110,10,69,78,67,79,68,73,78, 71,32,50,54,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,52,56,10,51,48,10,48, 48,10,55,48,10,56,56,10,56,48,10,56,48,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,68,99,97,114, 111,110,10,69,78,67,79,68,73,78,71,32,50,55,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 52,56,10,51,48,10,48,48,10,70,48,10,52,56,10,52, 56,10,52,56,10,52,56,10,52,56,10,70,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,100,99,97,114,111,110,10,69,78,67, 79,68,73,78,71,32,50,55,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,52,56,10,51,48,10,48,48,10, 48,56,10,48,56,10,55,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,55,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 68,99,114,111,97,116,10,69,78,67,79,68,73,78,71,32, 50,55,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,48,10,52,56,10,52,56,10, 52,56,10,69,56,10,52,56,10,52,56,10,52,56,10,70, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,100,99,114,111,97,116, 10,69,78,67,79,68,73,78,71,32,50,55,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,56,10,49,67,10,48,56,10,55,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,55,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,69,109,97,99,114,111,110,10,69,78,67,79, 68,73,78,71,32,50,55,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,70,56,10,48,48,10,70, 56,10,56,48,10,56,48,10,70,48,10,56,48,10,56,48, 10,56,48,10,70,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,101, 109,97,99,114,111,110,10,69,78,67,79,68,73,78,71,32, 50,55,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,70,56,10,48,48,10, 55,48,10,56,56,10,70,56,10,56,48,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,69,98,114,101,118,101, 10,69,78,67,79,68,73,78,71,32,50,55,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,56,56, 10,55,48,10,48,48,10,70,56,10,56,48,10,56,48,10, 70,48,10,56,48,10,56,48,10,70,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,101,98,114,101,118,101,10,69,78,67,79,68, 73,78,71,32,50,55,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,55,48, 10,48,48,10,55,48,10,56,56,10,70,56,10,56,48,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,69,100, 111,116,97,99,99,101,110,116,10,69,78,67,79,68,73,78, 71,32,50,55,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,50,48,10,50,48,10,48,48,10,70, 56,10,56,48,10,56,48,10,70,48,10,56,48,10,56,48, 10,70,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,101,100,111,116, 97,99,99,101,110,116,10,69,78,67,79,68,73,78,71,32, 50,55,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,48,48,10, 55,48,10,56,56,10,70,56,10,56,48,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,69,111,103,111,110,101, 107,10,69,78,67,79,68,73,78,71,32,50,56,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,70,56,10,56,48,10,56,48,10,56,48,10,70,48, 10,56,48,10,56,48,10,56,48,10,70,56,10,50,48,10, 49,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,101,111,103,111,110,101,107,10,69,78,67, 79,68,73,78,71,32,50,56,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,55,48,10,56,56,10,70,56,10,56, 48,10,56,56,10,55,48,10,50,48,10,49,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 69,99,97,114,111,110,10,69,78,67,79,68,73,78,71,32, 50,56,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,52,56,10,51,48,10,48,48,10,70,56,10, 56,48,10,56,48,10,70,48,10,56,48,10,56,48,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,101,99,97,114,111,110, 10,69,78,67,79,68,73,78,71,32,50,56,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,52,56,10,51,48,10,48,48,10,55,48,10,56,56,10, 70,56,10,56,48,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,71,99,105,114,99,117,109,102,108,101,120,10, 69,78,67,79,68,73,78,71,32,50,56,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,51,48,10, 52,56,10,48,48,10,55,48,10,56,56,10,56,48,10,56, 48,10,57,56,10,56,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,103,99,105,114,99,117,109,102,108,101,120,10,69, 78,67,79,68,73,78,71,32,50,56,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,51, 48,10,52,56,10,48,48,10,55,48,10,56,56,10,56,56, 10,56,56,10,55,56,10,48,56,10,56,56,10,55,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,71,98,114,101,118,101,10,69,78,67,79,68,73,78, 71,32,50,56,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,56,56,10,55,48,10,48,48,10,55, 48,10,56,56,10,56,48,10,56,48,10,57,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,103,98,114,101, 118,101,10,69,78,67,79,68,73,78,71,32,50,56,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,55,48,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,55,56,10,48,56,10,56,56, 10,55,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,71,100,111,116,97,99,99,101,110,116, 10,69,78,67,79,68,73,78,71,32,50,56,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,50,48, 10,50,48,10,48,48,10,55,48,10,56,56,10,56,48,10, 56,48,10,57,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,103,100,111,116,97,99,99,101,110,116,10,69, 78,67,79,68,73,78,71,32,50,56,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,50,48,10,48,48,10,55,48,10,56,56,10,56,56, 10,56,56,10,55,56,10,48,56,10,56,56,10,55,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,71,99,111,109,109,97,97,99,99,101,110,116,10,69, 78,67,79,68,73,78,71,32,50,57,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,55, 48,10,56,56,10,56,48,10,56,48,10,56,48,10,57,56, 10,56,56,10,56,56,10,55,48,10,50,48,10,52,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,103,99,111,109,109,97,97,99,99,101,110,116,10,69, 78,67,79,68,73,78,71,32,50,57,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,48,10,50, 48,10,54,48,10,48,48,10,55,48,10,56,56,10,56,56, 10,56,56,10,55,56,10,48,56,10,56,56,10,55,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,72,99,105,114,99,117,109,102,108,101,120,10,69,78, 67,79,68,73,78,71,32,50,57,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,51,48,10,52,56, 10,48,48,10,56,56,10,56,56,10,56,56,10,70,56,10, 56,56,10,56,56,10,56,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,104,99,105,114,99,117,109,102,108,101,120,10,69,78,67, 79,68,73,78,71,32,50,57,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,51,48,10,52,56,10, 48,48,10,56,48,10,56,48,10,66,48,10,67,56,10,56, 56,10,56,56,10,56,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 72,98,97,114,10,69,78,67,79,68,73,78,71,32,50,57, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,56,10,56,56,10,70,56,10,56,56, 10,70,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,104,98,97,114,10,69,78,67, 79,68,73,78,71,32,50,57,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,56,48,10, 70,48,10,56,48,10,66,48,10,67,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 73,116,105,108,100,101,10,69,78,67,79,68,73,78,71,32, 50,57,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,50,56,10,53,48,10,48,48,10,55,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,105,116,105,108,100,101, 10,69,78,67,79,68,73,78,71,32,50,57,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,53,48,10,65,48,10,48,48,10,54,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,73,109,97,99,114,111,110,10,69,78,67,79, 68,73,78,71,32,50,57,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,70,56,10,48,48,10,55, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,105, 109,97,99,114,111,110,10,69,78,67,79,68,73,78,71,32, 50,57,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,70,56,10,48,48,10, 54,48,10,50,48,10,50,48,10,50,48,10,50,48,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,73,98,114,101,118,101, 10,69,78,67,79,68,73,78,71,32,51,48,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,56,56, 10,55,48,10,48,48,10,55,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,105,98,114,101,118,101,10,69,78,67,79,68, 73,78,71,32,51,48,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,55,48, 10,48,48,10,54,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,73,111, 103,111,110,101,107,10,69,78,67,79,68,73,78,71,32,51, 48,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,55,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,55,48, 10,50,48,10,49,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,105,111,103,111,110,101,107, 10,69,78,67,79,68,73,78,71,32,51,48,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,50,48,10,48,48,10,54,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,55,48,10,50,48,10,49, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,73,100,111,116,97,99,99,101,110,116,10,69, 78,67,79,68,73,78,71,32,51,48,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,50,48,10,50, 48,10,48,48,10,55,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,100,111,116,108,101,115,115,105,10,69,78,67,79,68, 73,78,71,32,51,48,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,54,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,73,74, 10,69,78,67,79,68,73,78,71,32,51,48,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,68,67,10,56,56,10,56,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,65,56,10,68,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,105,106,10,69,78,67,79,68,73,78,71,32, 51,48,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,52,56,10,48,48,10, 68,56,10,52,56,10,52,56,10,52,56,10,52,56,10,69, 56,10,52,56,10,51,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,74,99,105,114,99,117, 109,102,108,101,120,10,69,78,67,79,68,73,78,71,32,51, 48,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,51,48,10,52,56,10,48,48,10,51,56,10,49, 48,10,49,48,10,49,48,10,49,48,10,57,48,10,54,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,106,99,105,114,99,117,109, 102,108,101,120,10,69,78,67,79,68,73,78,71,32,51,48, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,51,48,10,52,56,10,48,48,10,51,48, 10,49,48,10,49,48,10,49,48,10,49,48,10,57,48,10, 57,48,10,54,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,75,99,111,109,109,97,97,99, 99,101,110,116,10,69,78,67,79,68,73,78,71,32,51,49, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,56,10,56,56,10,57,48,10,65,48, 10,67,48,10,65,48,10,57,48,10,56,56,10,56,56,10, 52,48,10,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,107,99,111,109,109,97,97,99, 99,101,110,116,10,69,78,67,79,68,73,78,71,32,51,49, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,48,10,56,48,10,56,48,10,57,48, 10,65,48,10,67,48,10,65,48,10,57,48,10,56,56,10, 52,48,10,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,107,103,114,101,101,110,108,97, 110,100,105,99,10,69,78,67,79,68,73,78,71,32,51,49, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,56,56, 10,57,48,10,65,48,10,69,48,10,57,48,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,76,97,99,117,116,101,10,69, 78,67,79,68,73,78,71,32,51,49,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,52,48,10,56, 48,10,48,48,10,56,48,10,56,48,10,56,48,10,56,48, 10,56,48,10,56,48,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,108,97,99,117,116,101,10,69,78,67,79,68,73,78, 71,32,51,49,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,49,48,10,50,48,10,48,48,10,54,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,76,99,111,109, 109,97,97,99,99,101,110,116,10,69,78,67,79,68,73,78, 71,32,51,49,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,56,48,10,56,48,10,56, 48,10,56,48,10,56,48,10,56,48,10,56,48,10,56,48, 10,70,56,10,50,48,10,52,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,108,99,111,109, 109,97,97,99,99,101,110,116,10,69,78,67,79,68,73,78, 71,32,51,49,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,54,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,55,48,10,50,48,10,52,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,76,99,97,114, 111,110,10,69,78,67,79,68,73,78,71,32,51,49,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 57,48,10,54,48,10,48,48,10,52,48,10,52,48,10,52, 48,10,52,48,10,52,48,10,52,48,10,55,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,108,99,97,114,111,110,10,69,78,67, 79,68,73,78,71,32,51,49,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,57,48,10,54,48,10,48,48,10, 54,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 76,100,111,116,10,69,78,67,79,68,73,78,71,32,51,49, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,48,10,56,48,10,56,48,10,57,48, 10,57,48,10,56,48,10,56,48,10,56,48,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,108,100,111,116,10,69,78,67, 79,68,73,78,71,32,51,50,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,54,48,10, 50,48,10,50,48,10,50,56,10,50,56,10,50,48,10,50, 48,10,50,48,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 76,115,108,97,115,104,10,69,78,67,79,68,73,78,71,32, 51,50,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,52,48,10,52,48,10,54,48,10, 52,48,10,67,48,10,52,48,10,52,48,10,52,48,10,55, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,108,115,108,97,115,104, 10,69,78,67,79,68,73,78,71,32,51,50,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,54,48,10,50,48,10,51,48,10,50,48,10,54,48,10, 50,48,10,50,48,10,50,48,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,78,97,99,117,116,101,10,69,78,67,79,68, 73,78,71,32,51,50,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,48,10,50,48,10,48,48, 10,56,56,10,67,56,10,67,56,10,65,56,10,57,56,10, 57,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,110,97, 99,117,116,101,10,69,78,67,79,68,73,78,71,32,51,50, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,49,48,10,50,48,10,48,48,10,66,48, 10,67,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,78,99,111,109,109,97,97,99, 99,101,110,116,10,69,78,67,79,68,73,78,71,32,51,50, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,56,10,67,56,10,67,56,10,65,56, 10,65,56,10,57,56,10,57,56,10,56,56,10,56,56,10, 52,48,10,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,110,99,111,109,109,97,97,99, 99,101,110,116,10,69,78,67,79,68,73,78,71,32,51,50, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,66,48, 10,67,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 52,48,10,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,78,99,97,114,111,110,10,69, 78,67,79,68,73,78,71,32,51,50,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,52,56,10,51, 48,10,48,48,10,56,56,10,67,56,10,67,56,10,65,56, 10,57,56,10,57,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,110,99,97,114,111,110,10,69,78,67,79,68,73,78, 71,32,51,50,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,52,56,10,51,48,10,48, 48,10,66,48,10,67,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,110,97,112,111, 115,116,114,111,112,104,101,10,69,78,67,79,68,73,78,71, 32,51,50,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,67,48,10,52,48,10,56,48,10,48,48, 10,66,48,10,67,56,10,56,56,10,56,56,10,56,56,10, 56,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,69,110,103,10,69, 78,67,79,68,73,78,71,32,51,51,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,67,56,10,67,56,10,65,56,10,65,56,10,57,56, 10,57,56,10,56,56,10,56,56,10,50,56,10,49,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,101,110,103,10,69,78,67,79,68,73,78,71,32,51, 51,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,66, 48,10,67,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,50,56,10,49,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,79,109,97,99,114,111,110, 10,69,78,67,79,68,73,78,71,32,51,51,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,70,56, 10,48,48,10,55,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,111,109,97,99,114,111,110,10,69,78,67,79, 68,73,78,71,32,51,51,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,70, 56,10,48,48,10,55,48,10,56,56,10,56,56,10,56,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,79, 98,114,101,118,101,10,69,78,67,79,68,73,78,71,32,51, 51,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,56,56,10,55,48,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,55,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,111,98,114,101,118,101,10, 69,78,67,79,68,73,78,71,32,51,51,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 56,56,10,55,48,10,48,48,10,55,48,10,56,56,10,56, 56,10,56,56,10,56,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,79,104,117,110,103,97,114,117,109,108,97,117,116, 10,69,78,67,79,68,73,78,71,32,51,51,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,52,56, 10,57,48,10,48,48,10,55,48,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,111,104,117,110,103,97,114,117,109,108,97,117, 116,10,69,78,67,79,68,73,78,71,32,51,51,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,52,56,10,57,48,10,48,48,10,55,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,79,69,10,69,78,67,79,68,73,78,71, 32,51,51,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,56,10,65,48,10,65,48, 10,65,48,10,66,48,10,65,48,10,65,48,10,65,48,10, 55,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,111,101,10,69,78, 67,79,68,73,78,71,32,51,51,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,53,48,10,65,56,10,66,56,10, 65,48,10,65,56,10,53,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,82,97,99,117,116,101,10,69,78,67,79,68,73,78,71, 32,51,52,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,49,48,10,50,48,10,48,48,10,70,48, 10,56,56,10,56,56,10,70,48,10,57,48,10,56,56,10, 56,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,114,97,99,117,116, 101,10,69,78,67,79,68,73,78,71,32,51,52,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,49,48,10,50,48,10,48,48,10,66,48,10,67,56, 10,56,48,10,56,48,10,56,48,10,56,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,82,99,111,109,109,97,97,99,99,101,110, 116,10,69,78,67,79,68,73,78,71,32,51,52,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,70,48,10,56,56,10,56,56,10,56,56,10,70,48, 10,65,48,10,57,48,10,56,56,10,56,56,10,52,48,10, 56,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,114,99,111,109,109,97,97,99,99,101,110, 116,10,69,78,67,79,68,73,78,71,32,51,52,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,66,48,10,67,56, 10,56,48,10,56,48,10,56,48,10,56,48,10,52,48,10, 56,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,82,99,97,114,111,110,10,69,78,67,79, 68,73,78,71,32,51,52,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,57,48,10,54,48,10,48, 48,10,70,48,10,56,56,10,56,56,10,70,48,10,57,48, 10,56,56,10,56,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,114, 99,97,114,111,110,10,69,78,67,79,68,73,78,71,32,51, 52,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,57,48,10,54,48,10,48,48,10,66, 48,10,67,56,10,56,48,10,56,48,10,56,48,10,56,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,83,97,99,117,116,101,10, 69,78,67,79,68,73,78,71,32,51,52,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,49,48,10, 50,48,10,48,48,10,55,48,10,56,56,10,56,48,10,55, 48,10,48,56,10,56,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,115,97,99,117,116,101,10,69,78,67,79,68,73, 78,71,32,51,52,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,49,48,10,50,48,10, 48,48,10,55,48,10,56,56,10,54,48,10,49,48,10,56, 56,10,55,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,83,99,105, 114,99,117,109,102,108,101,120,10,69,78,67,79,68,73,78, 71,32,51,52,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,51,48,10,52,56,10,48,48,10,55, 48,10,56,56,10,56,48,10,55,48,10,48,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,115,99,105,114, 99,117,109,102,108,101,120,10,69,78,67,79,68,73,78,71, 32,51,52,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,51,48,10,52,56,10,48,48, 10,55,48,10,56,56,10,54,48,10,49,48,10,56,56,10, 55,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,83,99,101,100,105, 108,108,97,10,69,78,67,79,68,73,78,71,32,51,53,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,55,48,10,56,56,10,56,48,10,56,48,10, 55,48,10,48,56,10,48,56,10,56,56,10,55,48,10,50, 48,10,52,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,115,99,101,100,105,108,108,97,10, 69,78,67,79,68,73,78,71,32,51,53,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,48,10,56,56,10,54, 48,10,49,48,10,56,56,10,55,48,10,50,48,10,52,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,83,99,97,114,111,110,10,69,78,67,79,68,73, 78,71,32,51,53,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,52,56,10,51,48,10,48,48,10, 55,48,10,56,56,10,56,48,10,55,48,10,48,56,10,56, 56,10,55,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,115,99,97, 114,111,110,10,69,78,67,79,68,73,78,71,32,51,53,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,57,48,10,54,48,10,48,48,10,55,48,10, 56,56,10,54,48,10,49,48,10,56,56,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,84,99,111,109,109,97,97,99,99, 101,110,116,10,69,78,67,79,68,73,78,71,32,51,53,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,70,56,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,49, 48,10,50,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,116,99,111,109,109,97,97,99,99, 101,110,116,10,69,78,67,79,68,73,78,71,32,51,53,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,52,48,10,52,48,10,70,48,10, 52,48,10,52,48,10,52,48,10,52,56,10,51,48,10,50, 48,10,52,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,84,99,97,114,111,110,10,69,78, 67,79,68,73,78,71,32,51,53,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,52,56,10,51,48, 10,48,48,10,70,56,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,116,99,97,114,111,110,10,69,78,67,79,68,73,78,71, 32,51,53,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,57,48,10,54,48,10,48,48,10,52,48, 10,70,48,10,52,48,10,52,48,10,52,48,10,52,56,10, 51,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,84,98,97,114,10, 69,78,67,79,68,73,78,71,32,51,53,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 70,56,10,50,48,10,50,48,10,55,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,116,98,97,114,10,69,78,67,79,68,73,78,71, 32,51,53,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,52,48,10,52,48, 10,70,48,10,52,48,10,69,48,10,52,48,10,52,56,10, 51,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,85,116,105,108,100, 101,10,69,78,67,79,68,73,78,71,32,51,54,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,50, 56,10,53,48,10,48,48,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,116,105,108,100,101,10,69,78,67,79, 68,73,78,71,32,51,54,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,56,10,53, 48,10,48,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,57,56,10,54,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,85, 109,97,99,114,111,110,10,69,78,67,79,68,73,78,71,32, 51,54,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,70,56,10,48,48,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,109,97,99,114,111, 110,10,69,78,67,79,68,73,78,71,32,51,54,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,70,56,10,48,48,10,56,56,10,56,56, 10,56,56,10,56,56,10,57,56,10,54,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,85,98,114,101,118,101,10,69,78,67,79, 68,73,78,71,32,51,54,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,56,56,10,55,48,10,48, 48,10,56,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 98,114,101,118,101,10,69,78,67,79,68,73,78,71,32,51, 54,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,56,56,10,55,48,10,48,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,57,56,10,54,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,85,114,105,110,103,10,69, 78,67,79,68,73,78,71,32,51,54,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,50,48,10,53,48,10,50, 48,10,48,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,114,105,110,103,10,69,78,67,79,68,73,78,71, 32,51,54,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,50,48,10,53,48,10,50,48,10,48,48, 10,56,56,10,56,56,10,56,56,10,56,56,10,57,56,10, 54,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,85,104,117,110,103, 97,114,117,109,108,97,117,116,10,69,78,67,79,68,73,78, 71,32,51,54,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,52,56,10,57,48,10,48,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,104,117,110, 103,97,114,117,109,108,97,117,116,10,69,78,67,79,68,73, 78,71,32,51,54,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,52,56,10,57,48,10, 48,48,10,56,56,10,56,56,10,56,56,10,56,56,10,57, 56,10,54,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,85,111,103, 111,110,101,107,10,69,78,67,79,68,73,78,71,32,51,55, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 50,48,10,49,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,111,103,111,110,101,107,10, 69,78,67,79,68,73,78,71,32,51,55,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,56,56,10,56,56,10,56, 56,10,56,56,10,57,56,10,54,56,10,50,48,10,49,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,87,99,105,114,99,117,109,102,108,101,120,10,69, 78,67,79,68,73,78,71,32,51,55,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,51,48,10,52, 56,10,48,48,10,56,56,10,56,56,10,56,56,10,65,56, 10,65,56,10,68,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,119,99,105,114,99,117,109,102,108,101,120,10,69,78, 67,79,68,73,78,71,32,51,55,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,51,48, 10,52,56,10,48,48,10,56,56,10,56,56,10,65,56,10, 65,56,10,65,56,10,53,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,89,99,105,114,99,117,109,102,108,101,120,10,69,78,67, 79,68,73,78,71,32,51,55,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,51,48,10,52,56,10, 48,48,10,56,56,10,53,48,10,53,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 121,99,105,114,99,117,109,102,108,101,120,10,69,78,67,79, 68,73,78,71,32,51,55,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,51,48,10,52, 56,10,48,48,10,56,56,10,56,56,10,56,56,10,57,56, 10,54,56,10,48,56,10,56,56,10,55,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,89, 100,105,101,114,101,115,105,115,10,69,78,67,79,68,73,78, 71,32,51,55,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,53,48,10,53,48,10,48,48,10,56, 56,10,53,48,10,53,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,90,97,99,117, 116,101,10,69,78,67,79,68,73,78,71,32,51,55,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 49,48,10,50,48,10,48,48,10,70,56,10,48,56,10,49, 48,10,50,48,10,52,48,10,56,48,10,70,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,122,97,99,117,116,101,10,69,78,67, 79,68,73,78,71,32,51,55,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,49,48,10, 50,48,10,48,48,10,70,56,10,49,48,10,50,48,10,52, 48,10,56,48,10,70,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 90,100,111,116,97,99,99,101,110,116,10,69,78,67,79,68, 73,78,71,32,51,55,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,50,48,10,50,48,10,48,48, 10,70,56,10,48,56,10,49,48,10,50,48,10,52,48,10, 56,48,10,70,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,122,100, 111,116,97,99,99,101,110,116,10,69,78,67,79,68,73,78, 71,32,51,56,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,50,48,10,50,48,10,48, 48,10,70,56,10,49,48,10,50,48,10,52,48,10,56,48, 10,70,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,90,99,97,114, 111,110,10,69,78,67,79,68,73,78,71,32,51,56,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 52,56,10,51,48,10,48,48,10,70,56,10,48,56,10,49, 48,10,50,48,10,52,48,10,56,48,10,70,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,122,99,97,114,111,110,10,69,78,67, 79,68,73,78,71,32,51,56,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,56,10, 51,48,10,48,48,10,70,56,10,49,48,10,50,48,10,52, 48,10,56,48,10,70,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 108,111,110,103,115,10,69,78,67,79,68,73,78,71,32,51, 56,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,51,48,10,52,56,10,52,48,10,52, 48,10,67,48,10,52,48,10,52,48,10,52,48,10,52,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,49,56,48, 10,69,78,67,79,68,73,78,71,32,51,56,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,52,48,10,69,48,10,52,48,10,55,48,10,52,56,10, 52,56,10,52,56,10,52,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,56,49,10,69,78,67,79, 68,73,78,71,32,51,56,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,55,48,10,65, 56,10,50,56,10,50,56,10,51,48,10,50,56,10,50,56, 10,50,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,49,56,50,10,69,78,67,79,68,73,78,71,32, 51,56,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,56,10,56,56,10,56,48,10, 56,48,10,70,48,10,56,56,10,56,56,10,56,56,10,70, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,56, 51,10,69,78,67,79,68,73,78,71,32,51,56,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,55,56,10,52,56,10,52,48,10,52,48,10,55,48, 10,52,56,10,52,56,10,52,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,49,56,52,10,69,78,67, 79,68,73,78,71,32,51,56,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,48,10, 67,48,10,52,48,10,52,48,10,55,48,10,52,56,10,52, 56,10,52,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,56,53,10,69,78,67,79,68,73,78,71, 32,51,56,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,52,48,10,67,48,10,52,48, 10,52,48,10,54,48,10,53,48,10,53,48,10,53,48,10, 54,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,49, 56,54,10,69,78,67,79,68,73,78,71,32,51,57,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,55,48,10,56,56,10,48,56,10,48,56,10,48, 56,10,48,56,10,48,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,56,55,10,69,78, 67,79,68,73,78,71,32,51,57,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,52,10,55,56, 10,56,56,10,56,48,10,56,48,10,56,48,10,56,48,10, 56,48,10,56,56,10,55,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,49,56,56,10,69,78,67,79,68,73,78, 71,32,51,57,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 52,10,55,56,10,56,56,10,56,48,10,56,48,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,56,57,10,69,78,67,79,68,73,78,71,32,51,57,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,70,48,10,52,56,10,52,56,10,52,56,10, 69,56,10,52,56,10,52,56,10,52,56,10,70,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,49,56,65,10,69, 78,67,79,68,73,78,71,32,51,57,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,55, 48,10,65,56,10,50,56,10,50,56,10,50,56,10,50,56, 10,50,56,10,50,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,56,66,10,69,78,67,79,68,73, 78,71,32,51,57,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,70,56,10,56,56,10, 48,56,10,48,56,10,55,56,10,56,56,10,56,56,10,56, 56,10,55,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,49,56,67,10,69,78,67,79,68,73,78,71,32,51,57, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,55,56,10,52,56,10,48,56,10,48,56, 10,51,56,10,52,56,10,52,56,10,52,56,10,51,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,56,68,10, 69,78,67,79,68,73,78,71,32,51,57,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 56,10,56,56,10,55,48,10,48,56,10,56,56,10,55,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,49,56,69,10,69,78,67,79,68, 73,78,71,32,51,57,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,70,56,10,48,56, 10,48,56,10,48,56,10,55,56,10,48,56,10,48,56,10, 48,56,10,70,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,56,70,10,69,78,67,79,68,73,78,71,32,51, 57,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,55,48,10,56,56,10,48,56,10,48, 56,10,70,56,10,56,56,10,56,56,10,56,56,10,55,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,49,57,48, 10,69,78,67,79,68,73,78,71,32,52,48,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,48,10,56,56,10,56,48,10,56,48,10,54,48,10, 56,48,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,57,49,10,69,78,67,79, 68,73,78,71,32,52,48,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,51,56,10,50, 48,10,50,48,10,50,48,10,51,56,10,50,48,10,50,48, 10,50,48,10,50,48,10,65,48,10,52,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,102, 108,111,114,105,110,10,69,78,67,79,68,73,78,71,32,52, 48,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,49,48,10,50,56,10,50,48,10,50, 48,10,55,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,65,48,10,52,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,49,57,51, 10,69,78,67,79,68,73,78,71,32,52,48,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,52, 10,55,56,10,56,56,10,56,48,10,56,48,10,56,48,10, 57,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,57,52,10,69,78,67,79, 68,73,78,71,32,52,48,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,56,56,10,56,56,10,53,48,10,50,48, 10,50,48,10,53,48,10,53,48,10,50,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,49,57,53,10,69,78,67,79,68,73,78,71,32, 52,48,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,48,10,56,48,10,56,48,10, 67,56,10,65,56,10,65,56,10,65,56,10,65,56,10,57, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,57, 54,10,69,78,67,79,68,73,78,71,32,52,48,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,54,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,56,10,49,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,49,57,55,10,69,78,67, 79,68,73,78,71,32,52,48,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,55,48,10, 50,48,10,50,48,10,50,48,10,55,48,10,50,48,10,50, 48,10,50,48,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,57,56,10,69,78,67,79,68,73,78,71, 32,52,48,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,56,56,10,57,52,10,57,48, 10,65,48,10,67,48,10,65,48,10,57,48,10,56,56,10, 56,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,49, 57,57,10,69,78,67,79,68,73,78,71,32,52,48,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,52,48,10,65,48,10,56,48,10,57,48,10,65, 48,10,67,48,10,65,48,10,57,48,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,57,65,10,69,78, 67,79,68,73,78,71,32,52,49,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,54,48, 10,50,48,10,50,48,10,50,48,10,55,48,10,50,48,10, 50,48,10,50,48,10,55,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,49,57,66,10,69,78,67,79,68,73,78, 71,32,52,49,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,57,48,10,54,48,10,52, 48,10,65,48,10,50,48,10,53,48,10,53,48,10,56,56, 10,56,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,57,67,10,69,78,67,79,68,73,78,71,32,52,49,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,65,56,10,65,56,10,65,56,10,65,56,10, 65,56,10,65,56,10,65,56,10,65,56,10,53,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,49,57,68,10,69, 78,67,79,68,73,78,71,32,52,49,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,52, 56,10,52,56,10,54,56,10,54,56,10,55,56,10,53,56, 10,53,56,10,52,56,10,52,56,10,67,48,10,52,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,57,69,10,69,78,67,79,68,73, 78,71,32,52,49,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,66,48,10,67,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,48,56,10,48,56,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,49,57,70,10,69,78,67,79,68,73,78,71,32,52,49, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,55,48,10,56,56,10,56,56,10,56,56, 10,70,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,79,104,111,114,110,10,69,78, 67,79,68,73,78,71,32,52,49,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,54,52, 10,57,52,10,57,56,10,57,48,10,57,48,10,57,48,10, 57,48,10,57,48,10,54,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,111,104,111,114,110,10,69,78,67,79,68,73,78,71,32, 52,49,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 54,52,10,57,52,10,57,56,10,57,48,10,57,48,10,54, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,65, 50,10,69,78,67,79,68,73,78,71,32,52,49,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,53,48,10,65,56,10,65,56,10,65,56,10,65,56, 10,65,56,10,65,56,10,65,56,10,52,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,49,65,51,10,69,78,67, 79,68,73,78,71,32,52,49,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,53,48,10,65,56,10,65,56,10,65, 56,10,65,56,10,52,56,10,48,56,10,48,56,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,65,52,10,69,78,67,79,68,73,78,71, 32,52,50,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,48,10,65,56,10,65,56, 10,50,56,10,51,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,49, 65,53,10,69,78,67,79,68,73,78,71,32,52,50,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,52,48,10,65,48,10,56,48,10,70,48,10,56, 56,10,56,56,10,56,56,10,70,48,10,56,48,10,56,48, 10,56,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,65,54,10,69,78, 67,79,68,73,78,71,32,52,50,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,56,48, 10,56,48,10,70,48,10,56,56,10,56,56,10,56,56,10, 70,48,10,65,48,10,57,48,10,48,56,10,48,56,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,49,65,55,10,69,78,67,79,68,73,78, 71,32,52,50,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,48,10,56,56,10,48, 56,10,48,56,10,55,48,10,56,48,10,56,48,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,65,56,10,69,78,67,79,68,73,78,71,32,52,50,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,55,48,10, 56,56,10,51,48,10,52,48,10,56,56,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,49,65,57,10,69, 78,67,79,68,73,78,71,32,52,50,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 56,10,56,48,10,52,48,10,50,48,10,49,48,10,50,48, 10,52,48,10,56,48,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,65,65,10,69,78,67,79,68,73, 78,71,32,52,50,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,52,48,10,65,48,10, 54,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,56,10,49,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,49,65,66,10,69,78,67,79,68,73,78,71,32,52,50, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,52,48,10,52,48,10,70,48, 10,52,48,10,52,48,10,52,48,10,52,56,10,51,48,10, 49,48,10,50,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,65,67,10, 69,78,67,79,68,73,78,71,32,52,50,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 55,56,10,65,48,10,65,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,49,65,68,10,69,78,67,79,68, 73,78,71,32,52,50,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,53,48, 10,52,48,10,70,48,10,52,48,10,52,48,10,52,48,10, 52,56,10,51,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,65,69,10,69,78,67,79,68,73,78,71,32,52, 51,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,70,56,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,56,10,49,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,85,104,111,114,110,10,69, 78,67,79,68,73,78,71,32,52,51,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,57, 52,10,57,52,10,57,56,10,57,48,10,57,48,10,57,48, 10,57,48,10,57,48,10,54,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,104,111,114,110,10,69,78,67,79,68,73,78,71, 32,52,51,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,57,52,10,57,52,10,57,56,10,57,48,10,66,48,10, 53,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,49, 66,49,10,69,78,67,79,68,73,78,71,32,52,51,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,68,56,10,53,48,10,53,48,10,56,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,66,50,10,69,78, 67,79,68,73,78,71,32,52,51,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,57,48, 10,56,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,55,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,49,66,51,10,69,78,67,79,68,73,78, 71,32,52,51,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,54,56,10,65,56,10,65, 56,10,50,56,10,49,48,10,49,48,10,49,48,10,49,48, 10,49,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,66,52,10,69,78,67,79,68,73,78,71,32,52,51,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,56,10,57,52,10, 57,48,10,57,48,10,57,48,10,55,48,10,49,48,10,57, 48,10,54,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,49,66,53,10,69, 78,67,79,68,73,78,71,32,52,51,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 56,10,48,56,10,49,48,10,49,48,10,70,56,10,52,48, 10,52,48,10,56,48,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,66,54,10,69,78,67,79,68,73, 78,71,32,52,51,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,70,56,10,49,48,10,70,56,10,52,48,10,56, 48,10,70,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,49,66,55,10,69,78,67,79,68,73,78,71,32,52,51, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,70,56,10,48,56,10,49,48,10,50,48, 10,55,48,10,48,56,10,48,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,66,56,10, 69,78,67,79,68,73,78,71,32,52,52,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 70,56,10,56,48,10,52,48,10,50,48,10,55,48,10,56, 48,10,56,48,10,56,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,49,66,57,10,69,78,67,79,68, 73,78,71,32,52,52,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,56,10,52,48,10,50,48,10,55,48,10, 56,48,10,56,48,10,56,56,10,55,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,66,65,10,69,78,67,79,68,73,78,71,32,52, 52,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,70, 56,10,49,48,10,50,48,10,55,48,10,49,48,10,54,48, 10,56,56,10,55,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,49,66,66, 10,69,78,67,79,68,73,78,71,32,52,52,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,48,10,56,56,10,56,56,10,48,56,10,49,48,10, 70,56,10,52,48,10,56,48,10,70,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,66,67,10,69,78,67,79, 68,73,78,71,32,52,52,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,70,56,10,56, 56,10,56,48,10,66,48,10,67,56,10,48,56,10,48,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,49,66,68,10,69,78,67,79,68,73,78,71,32, 52,52,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,55,56,10,52,56,10,52,48,10, 53,48,10,54,56,10,48,56,10,48,56,10,52,56,10,51, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,66, 69,10,69,78,67,79,68,73,78,71,32,52,52,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,50,48,10,50,48,10,55,48, 10,50,48,10,49,48,10,53,48,10,50,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,49,66,70,10,69,78,67, 79,68,73,78,71,32,52,52,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,53,48,10,54,56,10,52,56,10,52, 56,10,53,48,10,54,48,10,52,48,10,67,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,67,48,10,69,78,67,79,68,73,78,71, 32,52,52,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,49, 67,49,10,69,78,67,79,68,73,78,71,32,52,52,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,53,48,10,53,48,10,53,48,10,53,48,10,53, 48,10,53,48,10,53,48,10,53,48,10,53,48,10,53,48, 10,53,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,67,50,10,69,78, 67,79,68,73,78,71,32,52,53,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,50,48,10,50,48,10,70,56,10,50,48,10, 70,56,10,50,48,10,50,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,49,67,51,10,69,78,67,79,68,73,78, 71,32,52,53,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,48,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,67,52,10,69,78,67,79,68,73,78,71,32,52,53,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,50,56,10,49,48,10,48,48,10,68,56,10,65,56,10, 65,56,10,66,48,10,66,48,10,66,48,10,68,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,49,67,53,10,69, 78,67,79,68,73,78,71,32,52,53,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 56,10,49,48,10,67,48,10,65,48,10,66,56,10,65,56, 10,65,56,10,66,48,10,68,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,67,54,10,69,78,67,79,68,73, 78,71,32,52,53,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,50,56,10,49,48,10,48,48,10, 50,48,10,50,48,10,55,56,10,65,56,10,65,56,10,66, 48,10,55,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,49,67,55,10,69,78,67,79,68,73,78,71,32,52,53, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,65,56,10,70,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,67,56,10, 69,78,67,79,68,73,78,71,32,52,53,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 56,48,10,56,56,10,56,48,10,57,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,70,56,10,50,56,10,49,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,49,67,57,10,69,78,67,79,68, 73,78,71,32,52,53,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,67,48,10,52,56, 10,52,48,10,53,56,10,52,56,10,52,56,10,52,56,10, 52,56,10,69,56,10,50,56,10,49,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,67,65,10,69,78,67,79,68,73,78,71,32,52, 53,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,66,56,10,65,56,10,69,56,10,69, 56,10,69,56,10,69,56,10,69,56,10,66,56,10,66,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,49,67,66, 10,69,78,67,79,68,73,78,71,32,52,53,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,65,48,10,65,56,10,69,48,10,70,56,10,69,56,10, 69,56,10,69,56,10,65,56,10,65,56,10,50,56,10,49, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,67,67,10,69,78,67,79, 68,73,78,71,32,52,54,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 56,10,48,48,10,67,56,10,65,56,10,65,56,10,65,56, 10,65,56,10,65,56,10,50,56,10,49,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,49,67,68,10,69,78,67,79,68,73,78,71,32, 52,54,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,52,56,10,51,48,10,48,48,10,50,48,10, 53,48,10,56,56,10,56,56,10,70,56,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,67, 69,10,69,78,67,79,68,73,78,71,32,52,54,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,52,56,10,51,48,10,48,48,10,55,48,10,48,56, 10,55,56,10,56,56,10,57,56,10,54,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,49,67,70,10,69,78,67, 79,68,73,78,71,32,52,54,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,52,56,10,51,48,10, 48,48,10,55,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,68,48,10,69,78,67,79,68,73,78,71, 32,52,54,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,57,48,10,54,48,10,48,48, 10,54,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 55,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,49, 68,49,10,69,78,67,79,68,73,78,71,32,52,54,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 52,56,10,51,48,10,48,48,10,55,48,10,56,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,68,50,10,69,78, 67,79,68,73,78,71,32,52,54,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,52,56, 10,51,48,10,48,48,10,55,48,10,56,56,10,56,56,10, 56,56,10,56,56,10,55,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,49,68,51,10,69,78,67,79,68,73,78, 71,32,52,54,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,52,56,10,51,48,10,48,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,68,52,10,69,78,67,79,68,73,78,71,32,52,54,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,52,56,10,51,48,10,48,48,10,56,56,10, 56,56,10,56,56,10,56,56,10,57,56,10,54,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,49,68,53,10,69, 78,67,79,68,73,78,71,32,52,54,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,70,56,10,48, 48,10,53,48,10,48,48,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,68,54,10,69,78,67,79,68,73, 78,71,32,52,55,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,70,56,10,48,48,10,53,48,10, 53,48,10,48,48,10,56,56,10,56,56,10,56,56,10,57, 56,10,54,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,49,68,55,10,69,78,67,79,68,73,78,71,32,52,55, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,49, 48,10,50,48,10,48,48,10,53,48,10,48,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,68,56,10, 69,78,67,79,68,73,78,71,32,52,55,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,49,48,10,50,48,10, 48,48,10,53,48,10,53,48,10,48,48,10,56,56,10,56, 56,10,56,56,10,57,56,10,54,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,49,68,57,10,69,78,67,79,68, 73,78,71,32,52,55,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,52,56,10,51,48,10,48,48,10,53,48, 10,48,48,10,56,56,10,56,56,10,56,56,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,68,65,10,69,78,67,79,68,73,78,71,32,52, 55,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 52,56,10,51,48,10,48,48,10,53,48,10,53,48,10,48, 48,10,56,56,10,56,56,10,56,56,10,57,56,10,54,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,49,68,66, 10,69,78,67,79,68,73,78,71,32,52,55,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,52,48,10,50,48, 10,48,48,10,53,48,10,48,48,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,68,67,10,69,78,67,79, 68,73,78,71,32,52,55,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,52,48,10,50,48,10,48,48,10,53, 48,10,53,48,10,48,48,10,56,56,10,56,56,10,56,56, 10,57,56,10,54,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,49,68,68,10,69,78,67,79,68,73,78,71,32, 52,55,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,48,10,56,56,10,48,56,10,70,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,68, 69,10,69,78,67,79,68,73,78,71,32,52,55,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,70,56,10,48, 48,10,53,48,10,48,48,10,50,48,10,53,48,10,56,56, 10,56,56,10,70,56,10,56,56,10,56,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,49,68,70,10,69,78,67, 79,68,73,78,71,32,52,55,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,70,56,10,48,48,10,53,48,10, 53,48,10,48,48,10,55,48,10,48,56,10,55,56,10,56, 56,10,57,56,10,54,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,69,48,10,69,78,67,79,68,73,78,71, 32,52,56,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,70,56,10,48,48,10,50,48,10,48,48,10,50,48, 10,53,48,10,56,56,10,56,56,10,70,56,10,56,56,10, 56,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,49, 69,49,10,69,78,67,79,68,73,78,71,32,52,56,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,70,56,10, 48,48,10,50,48,10,50,48,10,48,48,10,55,48,10,48, 56,10,55,56,10,56,56,10,57,56,10,54,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,69,50,10,69,78, 67,79,68,73,78,71,32,52,56,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,70,56, 10,48,48,10,53,56,10,65,48,10,65,48,10,70,48,10, 65,48,10,65,48,10,66,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,49,69,51,10,69,78,67,79,68,73,78, 71,32,52,56,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,70,56,10,48, 48,10,55,48,10,50,56,10,55,48,10,65,48,10,65,56, 10,53,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,69,52,10,69,78,67,79,68,73,78,71,32,52,56,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,54,48,10,57,48,10,56,48,10,56,48,10, 56,48,10,66,48,10,66,56,10,57,48,10,54,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,49,69,53,10,69, 78,67,79,68,73,78,71,32,52,56,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,54,48,10,57,48,10,57,48, 10,57,48,10,55,48,10,49,48,10,70,56,10,54,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,71,99,97,114,111,110,10,69,78,67,79,68,73,78, 71,32,52,56,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,52,56,10,51,48,10,48,48,10,55, 48,10,56,56,10,56,48,10,57,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,103,99,97,114, 111,110,10,69,78,67,79,68,73,78,71,32,52,56,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 52,56,10,51,48,10,48,48,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,55,56,10,48,56,10,56,56, 10,55,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,69,56,10,69,78, 67,79,68,73,78,71,32,52,56,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,52,56,10,51,48, 10,48,48,10,56,56,10,57,48,10,65,48,10,67,48,10, 65,48,10,57,48,10,56,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,49,69,57,10,69,78,67,79,68,73,78, 71,32,52,56,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,52,56,10,51,48,10,48,48,10,56, 48,10,56,48,10,57,48,10,65,48,10,67,48,10,65,48, 10,57,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,69,65,10,69,78,67,79,68,73,78,71,32,52,57,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,55,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,55,48,10,50, 48,10,49,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,49,69,66,10,69, 78,67,79,68,73,78,71,32,52,57,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,48,10,56,56,10,56,56, 10,56,56,10,56,56,10,55,48,10,50,48,10,49,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,69,67,10,69,78,67,79,68,73, 78,71,32,52,57,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,70,56,10,48,48,10, 55,48,10,56,56,10,56,56,10,56,56,10,56,56,10,56, 56,10,55,48,10,50,48,10,49,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,49,69,68,10,69,78,67,79,68,73,78,71,32,52,57, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,70,56,10,48,48,10,55,48, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 50,48,10,49,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,69,69,10, 69,78,67,79,68,73,78,71,32,52,57,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,52,56,10, 51,48,10,48,48,10,70,56,10,49,48,10,50,48,10,55, 48,10,48,56,10,56,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,49,69,70,10,69,78,67,79,68, 73,78,71,32,52,57,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,52,56,10,51,48, 10,48,48,10,70,56,10,49,48,10,50,48,10,55,48,10, 48,56,10,48,56,10,56,56,10,55,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,70,48,10,69,78,67,79,68,73,78,71,32,52, 57,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,52,56,10,51,48,10,48,48,10,51, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,57,48, 10,57,48,10,54,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,49,70,49, 10,69,78,67,79,68,73,78,71,32,52,57,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,68,56,10,65,56,10,65,56,10,65,56,10,65,56,10, 66,48,10,66,48,10,66,48,10,68,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,70,50,10,69,78,67,79, 68,73,78,71,32,52,57,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,67,48,10,65, 48,10,65,48,10,66,56,10,65,56,10,65,56,10,66,48, 10,66,48,10,68,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,49,70,51,10,69,78,67,79,68,73,78,71,32, 52,57,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,50,48,10, 55,56,10,65,56,10,65,56,10,66,48,10,66,48,10,55, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,70, 52,10,69,78,67,79,68,73,78,71,32,53,48,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,49, 48,10,50,48,10,48,48,10,55,48,10,56,56,10,56,48, 10,57,56,10,56,56,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,49,70,53,10,69,78,67, 79,68,73,78,71,32,53,48,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,49,48,10, 50,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,55,56,10,48,56,10,56,56,10,55,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,70,54,10,69,78,67,79,68,73,78,71, 32,53,48,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,65,48,10,65,48,10,65,48, 10,65,56,10,69,56,10,65,56,10,65,56,10,65,56,10, 57,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,49, 70,55,10,69,78,67,79,68,73,78,71,32,53,48,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,66,48,10,67,56,10,56,56,10,56,56,10,57, 48,10,65,48,10,67,48,10,56,48,10,56,48,10,56,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,70,56,10,69,78, 67,79,68,73,78,71,32,53,48,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,52,48,10,50,48, 10,48,48,10,56,56,10,67,56,10,67,56,10,65,56,10, 57,56,10,57,56,10,56,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,49,70,57,10,69,78,67,79,68,73,78, 71,32,53,48,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,52,48,10,50,48,10,48, 48,10,66,48,10,67,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,65,114,105,110, 103,97,99,117,116,101,10,69,78,67,79,68,73,78,71,32, 53,48,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,49,48,10,50,48,10,48,48,10,50,48,10,53,48,10, 50,48,10,50,48,10,53,48,10,56,56,10,70,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,114,105,110,103,97, 99,117,116,101,10,69,78,67,79,68,73,78,71,32,53,48, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,49, 48,10,50,48,10,51,48,10,52,56,10,51,48,10,55,48, 10,48,56,10,55,56,10,56,56,10,57,56,10,54,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,65,69,97,99,117,116,101,10, 69,78,67,79,68,73,78,71,32,53,48,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,49,48,10, 50,48,10,48,48,10,53,56,10,65,48,10,65,48,10,70, 48,10,65,48,10,65,48,10,66,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,101,97,99,117,116,101,10,69,78,67,79,68, 73,78,71,32,53,48,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,49,48,10,50,48, 10,48,48,10,55,48,10,50,56,10,55,48,10,65,48,10, 65,56,10,53,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,79,115, 108,97,115,104,97,99,117,116,101,10,69,78,67,79,68,73, 78,71,32,53,49,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,49,48,10,50,48,10,48,56,10, 55,48,10,57,56,10,57,56,10,65,56,10,67,56,10,67, 56,10,55,48,10,56,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,111,115,108, 97,115,104,97,99,117,116,101,10,69,78,67,79,68,73,78, 71,32,53,49,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,49,48,10,50,48,10,48, 56,10,55,48,10,57,56,10,65,56,10,65,56,10,67,56, 10,55,48,10,56,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,48,48,10,69,78,67,79,68,73,78,71,32,53,49,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,57,48,10,52,56,10,48,48,10,50,48,10,53,48,10, 56,56,10,56,56,10,70,56,10,56,56,10,56,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,50,48,49,10,69, 78,67,79,68,73,78,71,32,53,49,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,57, 48,10,52,56,10,48,48,10,55,48,10,48,56,10,55,56, 10,56,56,10,57,56,10,54,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,48,50,10,69,78,67,79,68,73, 78,71,32,53,49,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,55,48,10,56,56,10,48,48,10, 50,48,10,53,48,10,56,56,10,56,56,10,70,56,10,56, 56,10,56,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,48,51,10,69,78,67,79,68,73,78,71,32,53,49, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,55,48,10,56,56,10,48,48,10,55,48, 10,48,56,10,55,56,10,56,56,10,57,56,10,54,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,48,52,10, 69,78,67,79,68,73,78,71,32,53,49,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,57,48,10, 52,56,10,48,48,10,70,56,10,56,48,10,56,48,10,70, 48,10,56,48,10,56,48,10,70,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,48,53,10,69,78,67,79,68, 73,78,71,32,53,49,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,57,48,10,52,56, 10,48,48,10,55,48,10,56,56,10,70,56,10,56,48,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,48,54,10,69,78,67,79,68,73,78,71,32,53, 49,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,55,48,10,56,56,10,48,48,10,70,56,10,56, 48,10,56,48,10,70,48,10,56,48,10,56,48,10,70,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,48,55, 10,69,78,67,79,68,73,78,71,32,53,49,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,48,10,56,56,10,48,48,10,55,48,10,56,56,10, 70,56,10,56,48,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,48,56,10,69,78,67,79, 68,73,78,71,32,53,50,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,57,48,10,52,56,10,48, 48,10,55,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,48,57,10,69,78,67,79,68,73,78,71,32, 53,50,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,57,48,10,52,56,10,48,48,10, 54,48,10,50,48,10,50,48,10,50,48,10,50,48,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,48, 65,10,69,78,67,79,68,73,78,71,32,53,50,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,55, 48,10,56,56,10,48,48,10,55,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,48,66,10,69,78,67, 79,68,73,78,71,32,53,50,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,55,48,10, 56,56,10,48,48,10,54,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,48,67,10,69,78,67,79,68,73,78,71, 32,53,50,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,57,48,10,52,56,10,48,48,10,55,48, 10,56,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 55,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 48,68,10,69,78,67,79,68,73,78,71,32,53,50,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,57,48,10,52,56,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,48,69,10,69,78, 67,79,68,73,78,71,32,53,50,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,55,48,10,56,56, 10,48,48,10,55,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,55,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,50,48,70,10,69,78,67,79,68,73,78, 71,32,53,50,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,48,10,56,56,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,49,48,10,69,78,67,79,68,73,78,71,32,53,50,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,57,48,10,52,56,10,48,48,10,70,48,10,56,56,10, 56,56,10,70,48,10,57,48,10,56,56,10,56,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,50,49,49,10,69, 78,67,79,68,73,78,71,32,53,50,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,57, 48,10,52,56,10,48,48,10,66,48,10,67,56,10,56,48, 10,56,48,10,56,48,10,56,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,49,50,10,69,78,67,79,68,73, 78,71,32,53,51,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,55,48,10,56,56,10,48,48,10, 70,48,10,56,56,10,56,56,10,70,48,10,57,48,10,56, 56,10,56,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,49,51,10,69,78,67,79,68,73,78,71,32,53,51, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,55,48,10,56,56,10,48,48,10,66,48, 10,67,56,10,56,48,10,56,48,10,56,48,10,56,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,49,52,10, 69,78,67,79,68,73,78,71,32,53,51,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,57,48,10, 52,56,10,48,48,10,56,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,49,53,10,69,78,67,79,68, 73,78,71,32,53,51,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,57,48,10,52,56, 10,48,48,10,56,56,10,56,56,10,56,56,10,56,56,10, 57,56,10,54,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,49,54,10,69,78,67,79,68,73,78,71,32,53, 51,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,55,48,10,56,56,10,48,48,10,56,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,55,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,49,55, 10,69,78,67,79,68,73,78,71,32,53,51,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,48,10,56,56,10,48,48,10,56,56,10,56,56,10, 56,56,10,56,56,10,57,56,10,54,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,83,99,111,109,109,97,97,99,99,101,110,116, 10,69,78,67,79,68,73,78,71,32,53,51,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,48,10,56,56,10,56,48,10,56,48,10,55,48,10, 48,56,10,48,56,10,56,56,10,55,48,10,50,48,10,52, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,115,99,111,109,109,97,97,99,99,101,110,116, 10,69,78,67,79,68,73,78,71,32,53,51,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,55,48,10,56,56,10, 54,48,10,49,48,10,56,56,10,55,48,10,50,48,10,52, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,84,99,111,109,109,97,97,99,99,101,110,116, 10,69,78,67,79,68,73,78,71,32,53,51,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,56,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,49,48,10,50, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,116,99,111,109,109,97,97,99,99,101,110,116, 10,69,78,67,79,68,73,78,71,32,53,51,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,52,48,10,52,48,10,70,48,10,52,48,10, 52,48,10,52,48,10,52,56,10,51,48,10,49,48,10,50, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,49,67,10,69,78,67,79, 68,73,78,71,32,53,52,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,70,48,10,56, 56,10,48,56,10,49,48,10,51,48,10,52,56,10,48,56, 10,49,48,10,69,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,49,68,10,69,78,67,79,68,73,78,71,32, 53,52,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,48,10,56,56,10,49,48,10,51,48,10,52,56,10,48, 56,10,49,48,10,69,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,49, 69,10,69,78,67,79,68,73,78,71,32,53,52,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,52, 56,10,51,48,10,48,48,10,56,56,10,56,56,10,56,56, 10,70,56,10,56,56,10,56,56,10,56,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,49,70,10,69,78,67, 79,68,73,78,71,32,53,52,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,52,56,10,51,48,10, 48,48,10,56,48,10,56,48,10,66,48,10,67,56,10,56, 56,10,56,56,10,56,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,50,48,10,69,78,67,79,68,73,78,71, 32,53,52,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,66,48,10,67,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 56,56,10,48,56,10,48,56,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 50,50,10,69,78,67,79,68,73,78,71,32,53,52,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,49,48,10,52,56,10,56,56,10,56,56,10,55, 48,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,50,51,10,69,78, 67,79,68,73,78,71,32,53,52,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,53,48,10,56,56,10,56,56,10,55,48,10, 56,56,10,56,56,10,55,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,50,50,52,10,69,78,67,79,68,73,78, 71,32,53,52,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,70,56,10,48,56,10,49, 48,10,49,48,10,50,48,10,52,48,10,52,48,10,56,48, 10,70,56,10,48,56,10,49,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,50,53,10,69,78,67,79,68,73,78,71,32,53,52,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 49,48,10,50,48,10,52,48,10,56,48,10,70,56,10,48, 56,10,49,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,50,50,54,10,69, 78,67,79,68,73,78,71,32,53,53,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,48,48,10,50,48,10,53,48,10,56,56,10,56,56, 10,70,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,50,55,10,69,78,67,79,68,73, 78,71,32,53,53,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,50,48,10, 48,48,10,55,48,10,48,56,10,55,56,10,56,56,10,57, 56,10,54,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,50,56,10,69,78,67,79,68,73,78,71,32,53,53, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,70,56,10,56,48,10,56,48,10,56,48, 10,70,48,10,56,48,10,56,48,10,56,48,10,70,56,10, 49,48,10,54,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,50,57,10, 69,78,67,79,68,73,78,71,32,53,53,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,48,10,56,56,10,70, 56,10,56,48,10,56,56,10,55,48,10,49,48,10,54,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,50,65,10,69,78,67,79,68, 73,78,71,32,53,53,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,55,48,10,48,48,10,53,48,10,48,48, 10,55,48,10,56,56,10,56,56,10,56,56,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,50,66,10,69,78,67,79,68,73,78,71,32,53, 53,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,55,48,10,48,48,10,53,48,10,48,48,10,55, 48,10,56,56,10,56,56,10,56,56,10,56,56,10,55,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,50,67, 10,69,78,67,79,68,73,78,71,32,53,53,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,55,56,10,48,48, 10,50,56,10,53,48,10,55,48,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,50,68,10,69,78,67,79, 68,73,78,71,32,53,53,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,55,56,10,48,48,10,50,56,10,53, 48,10,48,48,10,55,48,10,56,56,10,56,56,10,56,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,50,69,10,69,78,67,79,68,73,78,71,32, 53,53,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,48,48,10,55,48,10, 56,56,10,56,56,10,56,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,50, 70,10,69,78,67,79,68,73,78,71,32,53,53,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,50,48,10,48,48,10,55,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,51,48,10,69,78,67, 79,68,73,78,71,32,53,54,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,55,48,10,48,48,10,50,48,10, 48,48,10,55,48,10,56,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,51,49,10,69,78,67,79,68,73,78,71, 32,53,54,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,55,48,10,48,48,10,50,48,10,48,48, 10,55,48,10,56,56,10,56,56,10,56,56,10,56,56,10, 55,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 51,50,10,69,78,67,79,68,73,78,71,32,53,54,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 55,48,10,48,48,10,56,56,10,56,56,10,53,48,10,53, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,51,51,10,69,78, 67,79,68,73,78,71,32,53,54,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,55,48,10,48,48,10,56,56,10,56,56,10,56,56,10, 57,56,10,54,56,10,48,56,10,56,56,10,55,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,50,53,48,10,69,78,67,79,68,73,78, 71,32,53,57,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,66,48,10,67,56,10,56,56,10,70,48,10,56,48, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,53,49,10,69,78,67,79,68,73,78,71,32,53,57,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,54,56,10, 57,56,10,56,56,10,56,56,10,57,56,10,54,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,50,53,50,10,69, 78,67,79,68,73,78,71,32,53,57,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,66,48,10,67,56,10,56,56, 10,56,56,10,67,56,10,66,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,53,51,10,69,78,67,79,68,73, 78,71,32,53,57,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,54,48,10,57,48,10, 56,48,10,70,48,10,56,56,10,56,56,10,56,56,10,56, 56,10,70,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,53,52,10,69,78,67,79,68,73,78,71,32,53,57, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,55,48, 10,56,56,10,48,56,10,48,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,53,53,10, 69,78,67,79,68,73,78,71,32,53,57,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 48,10,66,48,10,67,56,10,55,48,10,56,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,53,54,10,69,78,67,79,68, 73,78,71,32,53,57,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,49,48,10,49,48, 10,49,48,10,55,48,10,57,48,10,57,48,10,57,48,10, 57,48,10,55,48,10,49,52,10,48,56,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,53,55,10,69,78,67,79,68,73,78,71,32,53, 57,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,56,10,49,52,10,49,48,10,49,48,10,55, 48,10,57,48,10,57,48,10,57,48,10,57,48,10,55,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,53,56, 10,69,78,67,79,68,73,78,71,32,54,48,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,55,48,10,56,56,10, 70,56,10,48,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,53,57,10,69,78,67,79, 68,73,78,71,32,54,48,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,55,48,10,56,56,10,48,56,10,70,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,53,65,10,69,78,67,79,68,73,78,71,32, 54,48,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 54,48,10,57,56,10,51,52,10,53,48,10,57,48,10,54, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,53, 66,10,69,78,67,79,68,73,78,71,32,54,48,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,55,48,10,56,56, 10,54,48,10,56,48,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,53,67,10,69,78,67, 79,68,73,78,71,32,54,48,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,55,48,10,56,56,10,51,48,10,48, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,53,68,10,69,78,67,79,68,73,78,71, 32,54,48,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,54,48,10,57,56,10,50,52,10,49,48,10,57,48,10, 54,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 53,69,10,69,78,67,79,68,73,78,71,32,54,48,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,48,10,56, 56,10,66,48,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,53,70,10,69,78, 67,79,68,73,78,71,32,54,48,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,49,48,10,49,48,10,49,48,10,49,48,10, 55,56,10,49,48,10,49,48,10,57,48,10,54,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,50,54,48,10,69,78,67,79,68,73,78, 71,32,54,48,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,56,10,49,52,10,49, 48,10,55,48,10,57,48,10,57,48,10,57,48,10,55,48, 10,49,48,10,57,48,10,54,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,54,49,10,69,78,67,79,68,73,78,71,32,54,48,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,55,56,10, 56,56,10,56,56,10,56,56,10,55,56,10,48,56,10,56, 56,10,55,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,50,54,50,10,69, 78,67,79,68,73,78,71,32,54,49,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,48,10,56,56,10,56,48, 10,57,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,54,51,10,69,78,67,79,68,73, 78,71,32,54,49,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,56,56,10,56,56,10,53,48,10,53,48,10,50, 48,10,50,48,10,53,48,10,50,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,54,52,10,69,78,67,79,68,73,78,71,32,54,49, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,53,48, 10,65,56,10,50,48,10,53,48,10,53,48,10,50,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,54,53,10, 69,78,67,79,68,73,78,71,32,54,49,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,56,56,10,56,56,10,56, 56,10,56,56,10,57,56,10,54,56,10,48,56,10,48,56, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,54,54,10,69,78,67,79,68, 73,78,71,32,54,49,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,54,48,10,57,48, 10,56,48,10,66,48,10,67,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,54,55,10,69,78,67,79,68,73,78,71,32,54, 49,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,54,48,10,57,48,10,56,48,10,66, 48,10,67,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,50,56,10,49,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,54,56, 10,69,78,67,79,68,73,78,71,32,54,49,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,50,48,10,48,48,10,54,48,10,50,48,10, 55,48,10,50,48,10,50,48,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,54,57,10,69,78,67,79, 68,73,78,71,32,54,49,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,54,48,10,50,48,10,50,48,10,50,48, 10,50,56,10,49,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,54,65,10,69,78,67,79,68,73,78,71,32, 54,49,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,48,10,50,48,10,50,48,10,50,48,10,50,48,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,54, 66,10,69,78,67,79,68,73,78,71,32,54,49,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,54,48,10,50,48,10,50,48,10,54,56,10,66,48, 10,50,48,10,50,48,10,50,48,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,54,67,10,69,78,67, 79,68,73,78,71,32,54,50,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,54,48,10, 50,48,10,50,48,10,54,48,10,65,48,10,55,56,10,50, 48,10,50,48,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,54,68,10,69,78,67,79,68,73,78,71, 32,54,50,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,54,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,56,10,49,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 54,69,10,69,78,67,79,68,73,78,71,32,54,50,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,67,48,10,52,48,10,52,48,10,55,56,10,52, 56,10,53,48,10,55,48,10,52,56,10,69,56,10,48,56, 10,51,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,54,70,10,69,78, 67,79,68,73,78,71,32,54,50,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,56,56,10,65,56,10,65,56,10, 65,56,10,65,56,10,53,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,50,55,48,10,69,78,67,79,68,73,78, 71,32,54,50,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,56,56,10,65,56,10,65,56,10,65,56,10,65,56, 10,53,56,10,48,56,10,48,56,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,55,49,10,69,78,67,79,68,73,78,71,32,54,50,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,68,48,10, 65,56,10,65,56,10,65,56,10,65,56,10,56,56,10,50, 56,10,49,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,50,55,50,10,69, 78,67,79,68,73,78,71,32,54,50,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,53,48,10,54,56,10,52,56, 10,52,56,10,52,56,10,52,56,10,52,48,10,56,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,55,51,10,69,78,67,79,68,73, 78,71,32,54,50,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,65,48,10,68,48,10,57,48,10,57,48,10,57, 48,10,57,48,10,49,52,10,48,56,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,55,52,10,69,78,67,79,68,73,78,71,32,54,50, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,56,56, 10,67,56,10,65,56,10,65,56,10,57,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,55,53,10, 69,78,67,79,68,73,78,71,32,54,50,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,48,10,56,56,10,70, 56,10,56,56,10,56,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,55,54,10,69,78,67,79,68, 73,78,71,32,54,51,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,56,10,65,48,10,66,48,10,65,48,10, 65,48,10,55,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,55,55,10,69,78,67,79,68,73,78,71,32,54, 51,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,55, 48,10,56,56,10,65,56,10,65,56,10,65,56,10,53,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,55,56, 10,69,78,67,79,68,73,78,71,32,54,51,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,50,48,10,50,48,10,55,48,10,65,56,10, 65,56,10,65,56,10,65,56,10,55,48,10,50,48,10,50, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,55,57,10,69,78,67,79, 68,73,78,71,32,54,51,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,56,10,48,56,10,48,56,10,48,56, 10,57,56,10,54,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,55,65,10,69,78,67,79,68,73,78,71,32, 54,51,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,56,10,48,56,10,48,56,10, 48,56,10,48,56,10,48,56,10,48,56,10,57,56,10,54, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,55, 66,10,69,78,67,79,68,73,78,71,32,54,51,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,49,48,10,49,48, 10,49,48,10,49,48,10,66,48,10,53,48,10,49,52,10, 48,56,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,55,67,10,69,78,67, 79,68,73,78,71,32,54,51,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,66,48,10,67,56,10,56,48,10,56, 48,10,56,48,10,56,48,10,56,48,10,56,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,55,68,10,69,78,67,79,68,73,78,71, 32,54,51,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,66,48,10,67,56,10,56,48,10,56,48,10,56,48,10, 56,48,10,65,48,10,52,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 55,69,10,69,78,67,79,68,73,78,71,32,54,51,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,51,48,10,52, 56,10,56,48,10,56,48,10,56,48,10,56,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,55,70,10,69,78, 67,79,68,73,78,71,32,54,51,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,54,48,10,57,48,10,48,56,10, 48,56,10,48,56,10,48,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,50,56,48,10,69,78,67,79,68,73,78, 71,32,54,52,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,70,48,10,56,56,10,70,48,10,65,48,10,57,48, 10,56,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,56,49,10,69,78,67,79,68,73,78,71,32,54,52,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,56,56,10, 57,48,10,65,48,10,70,48,10,56,56,10,70,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,50,56,50,10,69, 78,67,79,68,73,78,71,32,54,52,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,56,10,56,48,10,55,48, 10,48,56,10,48,56,10,70,48,10,56,48,10,52,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,56,51,10,69,78,67,79,68,73, 78,71,32,54,52,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,49,48,10,50,56,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,65,48,10,52,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,56,52,10,69,78,67,79,68,73,78,71,32,54,52, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,49,48,10,50,56,10,50,48,10,50,48, 10,50,48,10,50,48,10,55,48,10,50,48,10,50,48,10, 65,48,10,52,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,56,53,10, 69,78,67,79,68,73,78,71,32,54,52,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,52,48,10,65,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,56,10,49,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,56,54,10,69,78,67,79,68, 73,78,71,32,54,52,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,49,48,10,50,56, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 54,48,10,66,48,10,65,56,10,52,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,56,55,10,69,78,67,79,68,73,78,71,32,54, 52,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,54, 48,10,57,48,10,49,48,10,49,48,10,49,48,10,55,56, 10,49,48,10,49,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,56,56, 10,69,78,67,79,68,73,78,71,32,54,52,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,52,48,10,52,48,10,70,48,10,52,48,10, 52,48,10,52,48,10,52,48,10,52,48,10,52,56,10,51, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,56,57,10,69,78,67,79, 68,73,78,71,32,54,52,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,52,56,10,52,56,10,70,67,10,52,56, 10,53,56,10,50,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,56,65,10,69,78,67,79,68,73,78,71,32, 54,53,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 68,56,10,53,48,10,56,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,56, 66,10,69,78,67,79,68,73,78,71,32,54,53,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,57,48,10,56,56, 10,56,56,10,56,56,10,57,48,10,54,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,56,67,10,69,78,67, 79,68,73,78,71,32,54,53,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,50,48,10,53,48,10,53,48,10,56, 56,10,56,56,10,56,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,56,68,10,69,78,67,79,68,73,78,71, 32,54,53,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,53,48,10,65,56,10,65,56,10,65,56,10,56,56,10, 56,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 56,69,10,69,78,67,79,68,73,78,71,32,54,53,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,56,10,49,48,10,49,48,10,50,48,10,50, 48,10,53,48,10,53,48,10,56,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,56,70,10,69,78, 67,79,68,73,78,71,32,54,53,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,56,56,10,53,48,10,53,48,10, 50,48,10,50,48,10,50,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,50,57,48,10,69,78,67,79,68,73,78, 71,32,54,53,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,70,56,10,49,48,10,50,48,10,52,48,10,56,48, 10,70,56,10,49,48,10,48,56,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,57,49,10,69,78,67,79,68,73,78,71,32,54,53,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 49,48,10,50,48,10,53,48,10,65,56,10,70,48,10,52, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,50,57,50,10,69, 78,67,79,68,73,78,71,32,54,53,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,56,10,49,48,10,50,48, 10,55,48,10,48,56,10,48,56,10,56,56,10,55,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,57,51,10,69,78,67,79,68,73, 78,71,32,54,53,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,70,56,10,49,48,10,50,48,10,55,48,10,48, 56,10,54,56,10,57,56,10,55,56,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,57,52,10,69,78,67,79,68,73,78,71,32,54,54, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,51,48,10,52,56,10,48,56,10,48,56, 10,51,48,10,50,48,10,50,48,10,50,48,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,57,53,10, 69,78,67,79,68,73,78,71,32,54,54,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 51,48,10,52,56,10,52,48,10,52,48,10,51,48,10,49, 48,10,49,48,10,49,48,10,51,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,57,54,10,69,78,67,79,68, 73,78,71,32,54,54,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,50,48, 10,50,48,10,50,48,10,51,48,10,48,56,10,48,56,10, 52,56,10,51,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,57,55,10,69,78,67,79,68,73,78,71,32,54, 54,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 48,10,56,48,10,56,48,10,56,48,10,56,48,10,56,48, 10,56,56,10,55,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,57,56, 10,69,78,67,79,68,73,78,71,32,54,54,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,55,48,10, 56,56,10,65,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,57,57,10,69,78,67,79, 68,73,78,71,32,54,54,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,70,48,10,56,56,10,70,48,10,56,56, 10,56,56,10,70,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,57,65,10,69,78,67,79,68,73,78,71,32, 54,54,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,48,10,56,56,10,54,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,57, 66,10,69,78,67,79,68,73,78,71,32,54,54,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,52,10,55,56,10,56,56, 10,56,48,10,57,56,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,57,67,10,69,78,67, 79,68,73,78,71,32,54,54,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,56,56,10,56,56,10,70,56,10,56, 56,10,56,56,10,56,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,57,68,10,69,78,67,79,68,73,78,71, 32,54,54,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,49,48,10,48,48, 10,51,48,10,49,48,10,49,48,10,49,48,10,49,48,10, 55,48,10,57,56,10,54,56,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 57,69,10,69,78,67,79,68,73,78,71,32,54,55,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,56,10,52, 56,10,50,56,10,49,56,10,50,56,10,52,56,10,48,56, 10,48,56,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,57,70,10,69,78, 67,79,68,73,78,71,32,54,55,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,52,48,10,52,48,10,52,48,10, 52,48,10,52,48,10,55,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,50,65,48,10,69,78,67,79,68,73,78, 71,32,54,55,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,56,10,49, 52,10,55,48,10,57,48,10,57,48,10,57,48,10,55,48, 10,49,48,10,49,48,10,49,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,65,49,10,69,78,67,79,68,73,78,71,32,54,55,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,51,48,10,52,56,10,48,56,10,48,56,10, 51,48,10,50,48,10,55,48,10,50,48,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,50,65,50,10,69, 78,67,79,68,73,78,71,32,54,55,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,51, 48,10,52,56,10,52,48,10,52,48,10,51,48,10,49,48, 10,51,56,10,49,48,10,51,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,65,51,10,69,78,67,79,68,73, 78,71,32,54,55,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,50,48,10,50,48,10, 50,48,10,55,56,10,65,56,10,65,56,10,66,48,10,66, 48,10,55,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,65,52,10,69,78,67,79,68,73,78,71,32,54,55, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,50,48,10,50,48,10,50,48,10,55,56, 10,65,56,10,65,56,10,66,48,10,66,48,10,54,56,10, 48,56,10,51,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,65,53,10, 69,78,67,79,68,73,78,71,32,54,55,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,50,48,10,50,48,10,55,56,10,65,56,10,65, 56,10,66,67,10,66,52,10,55,56,10,49,48,10,50,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,65,54,10,69,78,67,79,68, 73,78,71,32,54,55,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,52,48, 10,52,48,10,69,48,10,53,56,10,54,48,10,53,48,10, 52,56,10,51,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,65,55,10,69,78,67,79,68,73,78,71,32,54, 55,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,56,10,53,48,10,53,48,10,70, 56,10,53,48,10,53,48,10,53,48,10,53,48,10,51,48, 10,53,48,10,50,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,65,56, 10,69,78,67,79,68,73,78,71,32,54,56,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,52,48,10,52,48,10,69,48,10,53,56,10, 54,48,10,54,56,10,55,52,10,51,56,10,50,48,10,52, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,65,57,10,69,78,67,79, 68,73,78,71,32,54,56,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,54,48,10,57, 48,10,56,48,10,56,48,10,70,48,10,65,56,10,65,56, 10,65,56,10,65,56,10,48,56,10,51,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,65,65,10,69,78,67,79,68,73,78,71,32, 54,56,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,48,10,56,48,10,56,48,10, 66,48,10,67,56,10,65,48,10,57,48,10,67,56,10,66, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,65, 66,10,69,78,67,79,68,73,78,71,32,54,56,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,56,48,10,56,48,10,56,48,10,70,56,10,56,56, 10,57,48,10,65,48,10,67,48,10,70,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,65,67,10,69,78,67, 79,68,73,78,71,32,54,56,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,65,56,10, 65,56,10,53,48,10,53,48,10,48,48,10,65,56,10,65, 56,10,53,48,10,53,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,65,68,10,69,78,67,79,68,73,78,71, 32,54,56,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,55,56, 10,52,56,10,48,48,10,55,56,10,52,56,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 66,48,10,69,78,67,79,68,73,78,71,32,54,56,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,52,48,10,53,48,10,54,56,10,52,56,10,52, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,66,49,10,69,78, 67,79,68,73,78,71,32,54,56,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,50,48,10,52,48, 10,53,48,10,54,56,10,52,56,10,52,56,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,50,66,50,10,69,78,67,79,68,73,78, 71,32,54,57,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,48,10,48,48,10,49,48,10,49, 48,10,53,48,10,50,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,66,51,10,69,78,67,79,68,73,78,71,32,54,57,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,53,48,10,54,48,10,52,48,10,52,48,10, 52,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,50,66,52,10,69, 78,67,79,68,73,78,71,32,54,57,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,49, 48,10,49,48,10,49,48,10,51,48,10,53,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,66,53,10,69,78,67,79,68,73, 78,71,32,54,57,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,49,48,10,49,48,10, 49,48,10,51,48,10,53,48,10,48,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,66,54,10,69,78,67,79,68,73,78,71,32,54,57, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,53,48,10,53,48,10,54,48,10,53,48, 10,54,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,66,55,10, 69,78,67,79,68,73,78,71,32,54,57,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 56,56,10,65,56,10,65,56,10,53,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,66,56,10,69,78,67,79,68, 73,78,71,32,54,57,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,53,48,10,53,48, 10,50,48,10,50,48,10,52,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,66,57,10,69,78,67,79,68,73,78,71,32,54, 57,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,50,48,10,50,48,10,52,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,66,65, 10,69,78,67,79,68,73,78,71,32,54,57,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,50,56,10,50,56,10,53,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,66,66,10,69,78,67,79, 68,73,78,71,32,54,57,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,49,48,10,50, 48,10,51,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,53,55,57,50,57,10,69,78,67,79,68,73,78, 71,32,55,48,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,51,48,10,49,48,10,50, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 54,52,57,51,55,10,69,78,67,79,68,73,78,71,32,55, 48,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,51,48,10,50,48,10,49,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,66,69, 10,69,78,67,79,68,73,78,71,32,55,48,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,50,48, 10,49,48,10,49,48,10,50,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,66,70,10,69,78,67,79, 68,73,78,71,32,55,48,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,49,48,10,50,48,10,50, 48,10,49,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,67,48,10,69,78,67,79,68,73,78,71,32, 55,48,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,50,48,10,53,48,10,49,48,10,50,48,10, 50,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,67, 49,10,69,78,67,79,68,73,78,71,32,55,48,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,50, 48,10,53,48,10,52,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,67,50,10,69,78,67, 79,68,73,78,71,32,55,48,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,49,48,10,50,48,10, 52,48,10,50,48,10,49,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,67,51,10,69,78,67,79,68,73,78,71, 32,55,48,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,52,48,10,50,48,10,49,48,10,50,48, 10,52,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 67,52,10,69,78,67,79,68,73,78,71,32,55,48,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 50,48,10,53,48,10,56,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,67,53,10,69,78, 67,79,68,73,78,71,32,55,48,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,56,56,10,53,48, 10,50,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,99,105,114,99,117,109,102,108,101,120,10,69,78,67,79, 68,73,78,71,32,55,49,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,51,48,10,52,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,99, 97,114,111,110,10,69,78,67,79,68,73,78,71,32,55,49, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,52,56,10,51,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,67,56,10, 69,78,67,79,68,73,78,71,32,55,49,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,50,48,10,50,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,109,97,99,114,111,110,10,69,78,67,79,68,73, 78,71,32,55,49,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,55,56,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,67,65,10,69,78,67,79,68,73,78,71,32,55,49, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,49,48,10,50,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,67,66,10, 69,78,67,79,68,73,78,71,32,55,49,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,49,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,67,67,10,69,78,67,79,68, 73,78,71,32,55,49,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,67,68,10,69,78,67,79,68,73,78,71,32,55, 49,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,67,69, 10,69,78,67,79,68,73,78,71,32,55,49,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,50,48,10,49, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,67,70,10,69,78,67,79, 68,73,78,71,32,55,49,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,50,48,10,52,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,68,48,10,69,78,67,79,68,73,78,71,32, 55,50,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,48,10,50,48,10,48,48,10,48,48,10,50,48,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,68, 49,10,69,78,67,79,68,73,78,71,32,55,50,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,55,48,10,50,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,68,50,10,69,78,67, 79,68,73,78,71,32,55,50,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,50,48,10,49,48,10,49,48,10,50, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,68,51,10,69,78,67,79,68,73,78,71, 32,55,50,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,48,10,52,48,10,52,48,10,50,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 68,52,10,69,78,67,79,68,73,78,71,32,55,50,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,50,48,10,50,48,10,70, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,68,53,10,69,78, 67,79,68,73,78,71,32,55,50,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,70,56,10,50,48,10, 50,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,50,68,54,10,69,78,67,79,68,73,78, 71,32,55,50,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,50, 48,10,50,48,10,70,56,10,50,48,10,50,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,68,55,10,69,78,67,79,68,73,78,71,32,55,50,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,56,56,10, 70,56,10,56,56,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,98,114,101,118,101,10,69,78,67, 79,68,73,78,71,32,55,50,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,56,56,10,55,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 100,111,116,97,99,99,101,110,116,10,69,78,67,79,68,73, 78,71,32,55,50,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,50,48,10,50,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,114,105,110, 103,10,69,78,67,79,68,73,78,71,32,55,51,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,50, 48,10,53,48,10,50,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,111,103,111,110,101,107,10,69,78,67,79, 68,73,78,71,32,55,51,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,50,48,10,49,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,116, 105,108,100,101,10,69,78,67,79,68,73,78,71,32,55,51, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,50,56,10,53,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,104,117,110,103,97,114,117,109, 108,97,117,116,10,69,78,67,79,68,73,78,71,32,55,51, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,52,56,10,57,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,68,69,10, 69,78,67,79,68,73,78,71,32,55,51,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,52,48,10,67,56,10,51, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,68,70,10,69,78,67,79,68, 73,78,71,32,55,51,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,53,48,10,50,48,10,53,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,69,48,10,69,78,67,79,68,73,78,71,32,55, 51,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,52,56,10,51,48,10,51,48,10,51, 48,10,51,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,69,49, 10,69,78,67,79,68,73,78,71,32,55,51,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,54,48, 10,50,48,10,50,48,10,50,48,10,55,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,69,50,10,69,78,67,79, 68,73,78,71,32,55,51,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,51,48,10,52, 48,10,50,48,10,49,48,10,54,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,69,51,10,69,78,67,79,68,73,78,71,32, 55,51,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,52,56,10,51,48,10,51,48,10, 52,56,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,69, 52,10,69,78,67,79,68,73,78,71,32,55,52,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,51,48,10,52,56,10,52,48,10,52,48,10,51,48, 10,49,48,10,51,56,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,69,53,10,69,78,67, 79,68,73,78,71,32,55,52,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,55,48,10, 49,48,10,49,48,10,49,48,10,49,48,10,49,48,10,49, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,69,54,10,69,78,67,79,68,73,78,71, 32,55,52,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,49,48,10,49,48,10,55,48, 10,49,48,10,49,48,10,49,48,10,49,48,10,49,48,10, 49,48,10,49,48,10,49,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 69,55,10,69,78,67,79,68,73,78,71,32,55,52,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,49,48,10,49,48,10,49,48,10,49,48,10,49, 48,10,55,48,10,49,48,10,49,48,10,49,48,10,49,48, 10,49,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,69,56,10,69,78, 67,79,68,73,78,71,32,55,52,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,49,48, 10,49,48,10,49,48,10,49,48,10,49,48,10,49,48,10, 49,48,10,49,48,10,55,48,10,49,48,10,49,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,50,69,57,10,69,78,67,79,68,73,78, 71,32,55,52,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,49,48,10,49,48,10,49, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,49,48, 10,49,48,10,49,48,10,55,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,69,65,10,69,78,67,79,68,73,78,71,32,55,52,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,52,48,10,52,48,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,50,69,66,10,69, 78,67,79,68,73,78,71,32,55,52,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,52,48,10,52,48, 10,55,48,10,52,48,10,52,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,69,67,10,69,78,67,79,68,73, 78,71,32,55,52,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,56,56,10,53,48,10,50,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,69,68,10,69,78,67,79,68,73,78,71,32,55,52, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,70,56,10,48,48,10,70,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,69,69,10, 69,78,67,79,68,73,78,71,32,55,53,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 68,56,10,52,56,10,57,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,103,114,97,118,101,99,111,109,98,10,69,78,67, 79,68,73,78,71,32,55,54,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,50,48,10,49,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,99,117,116,101,99,111,109,98,10,69,78,67,79,68,73, 78,71,32,55,54,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,49,48,10,50,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,51,48,50,10,69,78,67,79,68,73,78,71,32,55,55, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,51,48,10,52,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,116,105,108,100,101,99,111,109, 98,10,69,78,67,79,68,73,78,71,32,55,55,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,50, 56,10,53,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,51,48,52,10,69,78,67, 79,68,73,78,71,32,55,55,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,70,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,48,53,10,69,78,67,79,68,73,78,71, 32,55,55,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,70,67,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,51, 48,54,10,69,78,67,79,68,73,78,71,32,55,55,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 56,56,10,55,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,48,55,10,69,78, 67,79,68,73,78,71,32,55,55,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,50,48,10,50,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,51,48,56,10,69,78,67,79,68,73,78, 71,32,55,55,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,53,48,10,53,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,104,111,111,107, 97,98,111,118,101,99,111,109,98,10,69,78,67,79,68,73, 78,71,32,55,55,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,50,48,10,53,48,10,49,48,10,50,48,10, 50,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,51,48,65,10,69,78,67,79,68,73,78,71,32,55,55, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,50, 48,10,53,48,10,50,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,48,66,10, 69,78,67,79,68,73,78,71,32,55,55,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,52,56,10, 57,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,51,48,67,10,69,78,67,79,68, 73,78,71,32,55,56,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,52,56,10,51,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,48,68,10,69,78,67,79,68,73,78,71,32,55, 56,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,50,48,10,50,48,10,50,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,51,48,69, 10,69,78,67,79,68,73,78,71,32,55,56,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,53,48, 10,53,48,10,53,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,48,70,10,69,78,67,79, 68,73,78,71,32,55,56,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,57,48,10,52,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,51,49,48,10,69,78,67,79,68,73,78,71,32, 55,56,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,50,48,10,50,48,10,56,56,10,55,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,49, 49,10,69,78,67,79,68,73,78,71,32,55,56,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,55, 48,10,56,56,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,51,49,50,10,69,78,67, 79,68,73,78,71,32,55,56,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,49,48,10,50,48,10, 54,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,49,51,10,69,78,67,79,68,73,78,71, 32,55,56,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,51,48,10,50,48,10,52,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,51, 49,52,10,69,78,67,79,68,73,78,71,32,55,56,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 54,48,10,50,48,10,49,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,49,53,10,69,78, 67,79,68,73,78,71,32,55,56,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,67,10,48,56, 10,49,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,51,49,54,10,69,78,67,79,68,73,78, 71,32,55,57,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,50,48,10,49,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,49,55,10,69,78,67,79,68,73,78,71,32,55,57,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,49, 48,10,50,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,51,49,56,10,69, 78,67,79,68,73,78,71,32,55,57,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,49,48,10,51,48,10,49,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,49,57,10,69,78,67,79,68,73, 78,71,32,55,57,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,50,48,10,51,48,10,50,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,51,49,65,10,69,78,67,79,68,73,78,71,32,55,57, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,67,10,48,52,10,48,52,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,49,66,10, 69,78,67,79,68,73,78,71,32,55,57,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,52,10,48,52,10,48,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,51,49,67,10,69,78,67,79,68, 73,78,71,32,55,57,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,49,48,10,50,48,10,49,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,49,68,10,69,78,67,79,68,73,78,71,32,55, 57,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,48,10,55,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,51,49,69, 10,69,78,67,79,68,73,78,71,32,55,57,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,48,10,50, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,49,70,10,69,78,67,79, 68,73,78,71,32,55,57,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,50,48,10,55,48,10,50,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,51,50,48,10,69,78,67,79,68,73,78,71,32, 56,48,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,55,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,50, 49,10,69,78,67,79,68,73,78,71,32,56,48,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,56,10,50,56,10, 49,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,51,50,50,10,69,78,67, 79,68,73,78,71,32,56,48,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,56,10,48,56,10,48,52,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 100,111,116,98,101,108,111,119,99,111,109,98,10,69,78,67, 79,68,73,78,71,32,56,48,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,50,52,10,69,78,67,79,68,73,78,71, 32,56,48,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,53,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,51, 50,53,10,69,78,67,79,68,73,78,71,32,56,48,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,50,48,10,53,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,50,54,10,69,78, 67,79,68,73,78,71,32,56,48,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,49,48,10,50,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,51,50,55,10,69,78,67,79,68,73,78, 71,32,56,48,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,49,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,50,56,10,69,78,67,79,68,73,78,71,32,56,48,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,50, 48,10,49,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,51,50,57,10,69, 78,67,79,68,73,78,71,32,56,48,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,50,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,50,65,10,69,78,67,79,68,73, 78,71,32,56,49,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,55,56,10,52,56,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,51,50,66,10,69,78,67,79,68,73,78,71,32,56,49, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 65,56,10,53,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,50,67,10, 69,78,67,79,68,73,78,71,32,56,49,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,52,56,10,51,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,51,50,68,10,69,78,67,79,68, 73,78,71,32,56,49,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,51,48,10,52,56,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,50,69,10,69,78,67,79,68,73,78,71,32,56, 49,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,56,56,10,55,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,51,50,70, 10,69,78,67,79,68,73,78,71,32,56,49,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,48,10,56, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,51,48,10,69,78,67,79, 68,73,78,71,32,56,49,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,50,56,10,53,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,51,51,49,10,69,78,67,79,68,73,78,71,32, 56,49,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,70,56,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,51, 50,10,69,78,67,79,68,73,78,71,32,56,49,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,67,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,51,51,51,10,69,78,67, 79,68,73,78,71,32,56,49,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,70,67,10,48,48,10,70,67,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,51,52,10,69,78,67,79,68,73,78,71, 32,56,50,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,50,56,10,53,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,51, 51,53,10,69,78,67,79,68,73,78,71,32,56,50,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,51,54,10,69,78, 67,79,68,73,78,71,32,56,50,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,51,51,55,10,69,78,67,79,68,73,78, 71,32,56,50,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,49,48,10,50,48,10,52,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,51,56,10,69,78,67,79,68,73,78,71,32,56,50,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,56,10,48,56,10,49,48,10,49,48,10, 50,48,10,52,48,10,52,48,10,56,48,10,56,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,51,51,57,10,69, 78,67,79,68,73,78,71,32,56,50,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,50,48,10,49,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,51,65,10,69,78,67,79,68,73, 78,71,32,56,50,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,52,56,10,55,56,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,51,51,66,10,69,78,67,79,68,73,78,71,32,56,50, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,55,48,10, 53,48,10,55,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,51,67,10, 69,78,67,79,68,73,78,71,32,56,50,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,53,48,10,65,56, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,51,51,68,10,69,78,67,79,68, 73,78,71,32,56,50,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,53,48,10,50,48,10,53,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,51,69,10,69,78,67,79,68,73,78,71,32,56, 51,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 49,48,10,50,48,10,49,48,10,50,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,51,51,70, 10,69,78,67,79,68,73,78,71,32,56,51,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,70,67,10,48,48, 10,70,67,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,52,48,10,69,78,67,79, 68,73,78,71,32,56,51,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,56,48,10,52,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,51,52,49,10,69,78,67,79,68,73,78,71,32, 56,51,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,52,10,48,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,52, 50,10,69,78,67,79,68,73,78,71,32,56,51,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,54,56,10,66, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,51,52,51,10,69,78,67, 79,68,73,78,71,32,56,51,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,51,48,10,49,48,10, 50,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,52,52,10,69,78,67,79,68,73,78,71, 32,56,51,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,49,48,10,50,48,10,68,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,51, 52,53,10,69,78,67,79,68,73,78,71,32,56,51,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,52,54,10,69,78, 67,79,68,73,78,71,32,56,51,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,55,48,10,53,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,51,52,55,10,69,78,67,79,68,73,78, 71,32,56,51,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,55,48,10,48,48,10,55,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,52,56,10,69,78,67,79,68,73,78,71,32,56,52,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,53, 48,10,53,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,51,52,57,10,69, 78,67,79,68,73,78,71,32,56,52,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,51,48,10,49,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,52,65,10,69,78,67,79,68,73, 78,71,32,56,52,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,49,48,10,54,56,10,66,48,10,52,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,51,52,66,10,69,78,67,79,68,73,78,71,32,56,52, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,49, 48,10,48,48,10,54,56,10,66,48,10,48,48,10,52,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,52,67,10, 69,78,67,79,68,73,78,71,32,56,52,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,50,56,10,53,48,10, 50,56,10,53,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,51,52,68,10,69,78,67,79,68, 73,78,71,32,56,52,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,53,48,10,70,56,10,53,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,52,69,10,69,78,67,79,68,73,78,71,32,56, 52,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,48,10,55,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,51,52,70, 10,69,78,67,79,68,73,78,71,32,56,52,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,54,48,10,69,78,67,79, 68,73,78,71,32,56,54,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,51,48,10,52,67,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,51,54,49,10,69,78,67,79,68,73,78,71,32, 56,54,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,51,56,10,52,52,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,54, 50,10,69,78,67,79,68,73,78,71,32,56,54,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,56,10,70,67,10, 48,56,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,51,54,51,10,69,78,67, 79,68,73,78,71,32,56,54,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,50,48,10,49,48,10,51,48,10, 53,48,10,51,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,54,52,10,69,78,67,79,68,73,78,71, 32,56,54,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,50,48,10,53,48,10,55,48,10,52,48,10,51,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,51, 54,53,10,69,78,67,79,68,73,78,71,32,56,54,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,50,48,10, 48,48,10,50,48,10,50,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,54,54,10,69,78, 67,79,68,73,78,71,32,56,55,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,51,48,10,52,56,10,52,56, 10,51,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,51,54,55,10,69,78,67,79,68,73,78, 71,32,56,55,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,53,48,10,53,48,10,51,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,54,56,10,69,78,67,79,68,73,78,71,32,56,55,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,51,48, 10,52,48,10,51,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,51,54,57,10,69, 78,67,79,68,73,78,71,32,56,55,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,49,48,10,51,48,10,53, 48,10,51,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,54,65,10,69,78,67,79,68,73, 78,71,32,56,55,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,52,48,10,54,48,10,53,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,51,54,66,10,69,78,67,79,68,73,78,71,32,56,55, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,68, 48,10,65,56,10,65,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,54,67,10, 69,78,67,79,68,73,78,71,32,56,55,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,53,48,10,54,48,10, 52,48,10,52,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,51,54,68,10,69,78,67,79,68, 73,78,71,32,56,55,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,50,48,10,55,48,10,50,48,10,51,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,54,69,10,69,78,67,79,68,73,78,71,32,56, 55,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 53,48,10,53,48,10,50,48,10,50,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,51,54,70, 10,69,78,67,79,68,73,78,71,32,56,55,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,53,48,10,50,48, 10,53,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,55,52,10,69,78,67,79, 68,73,78,71,32,56,56,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,49,48,10,50, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,51,55,53,10,69,78,67,79,68,73,78,71,32, 56,56,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,49,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,55, 65,10,69,78,67,79,68,73,78,71,32,56,57,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 51,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,51,55,69,10,69,78,67, 79,68,73,78,71,32,56,57,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,50,48,10,55,48,10,50,48,10,48,48,10,48, 48,10,51,48,10,50,48,10,52,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 116,111,110,111,115,10,69,78,67,79,68,73,78,71,32,57, 48,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,49,48,10,50,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,100,105,101,114,101,115,105, 115,116,111,110,111,115,10,69,78,67,79,68,73,78,71,32, 57,48,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,49,48,10,50,48,10,68,56,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,65,108,112,104,97,116, 111,110,111,115,10,69,78,67,79,68,73,78,71,32,57,48, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,53,48,10,65,56,10,50,56,10,50,56, 10,50,56,10,51,56,10,50,56,10,50,56,10,50,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,110,111,116,101,108,101,105, 97,10,69,78,67,79,68,73,78,71,32,57,48,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,50,48,10,55,48, 10,50,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,69,112,115,105,108,111,110,116,111,110,111, 115,10,69,78,67,79,68,73,78,71,32,57,48,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,55,56,10,65,48,10,50,48,10,50,48,10,51,48, 10,50,48,10,50,48,10,50,48,10,51,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,69,116,97,116,111,110,111,115,10,69,78, 67,79,68,73,78,71,32,57,48,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,54,56, 10,65,56,10,50,56,10,50,56,10,51,56,10,50,56,10, 50,56,10,50,56,10,50,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,73,111,116,97,116,111,110,111,115,10,69,78,67,79,68, 73,78,71,32,57,48,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,56,10,57,48, 10,49,48,10,49,48,10,49,48,10,49,48,10,49,48,10, 49,48,10,51,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,79,109, 105,99,114,111,110,116,111,110,111,115,10,69,78,67,79,68, 73,78,71,32,57,48,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,53,48,10,65,56, 10,50,56,10,50,56,10,50,56,10,50,56,10,50,56,10, 50,56,10,49,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,85,112, 115,105,108,111,110,116,111,110,111,115,10,69,78,67,79,68, 73,78,71,32,57,49,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,54,56,10,65,56, 10,50,56,10,50,56,10,49,48,10,49,48,10,49,48,10, 49,48,10,49,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,79,109, 101,103,97,116,111,110,111,115,10,69,78,67,79,68,73,78, 71,32,57,49,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,53,48,10,65,56,10,50, 56,10,50,56,10,50,56,10,50,56,10,49,48,10,49,48, 10,50,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,105,111,116,97, 100,105,101,114,101,115,105,115,116,111,110,111,115,10,69,78, 67,79,68,73,78,71,32,57,49,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,49,48,10,50,48, 10,68,56,10,48,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,56,10,49,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,65,108,112,104,97,10,69,78,67,79,68,73,78,71,32, 57,49,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,53,48,10,56,56,10, 56,56,10,56,56,10,70,56,10,56,56,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,66,101,116,97,10,69, 78,67,79,68,73,78,71,32,57,49,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 48,10,56,56,10,56,56,10,56,56,10,70,48,10,56,56, 10,56,56,10,56,56,10,70,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,71,97,109,109,97,10,69,78,67,79,68,73,78,71, 32,57,49,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,70,56,10,56,48,10,56,48, 10,56,48,10,56,48,10,56,48,10,56,48,10,56,48,10, 56,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,68,101,108,116,97, 10,69,78,67,79,68,73,78,71,32,57,49,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,50,48,10,50,48,10,53,48,10,53,48,10,53,48,10, 56,56,10,56,56,10,56,56,10,70,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,69,112,115,105,108,111,110,10,69,78,67,79, 68,73,78,71,32,57,49,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,70,56,10,56, 48,10,56,48,10,56,48,10,70,48,10,56,48,10,56,48, 10,56,48,10,70,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,90, 101,116,97,10,69,78,67,79,68,73,78,71,32,57,49,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,70,56,10,48,56,10,49,48,10,49,48,10, 50,48,10,52,48,10,52,48,10,56,48,10,70,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,69,116,97,10,69,78,67,79,68, 73,78,71,32,57,49,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,56,56, 10,56,56,10,56,56,10,70,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,84,104, 101,116,97,10,69,78,67,79,68,73,78,71,32,57,50,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,55,48,10,56,56,10,56,56,10,56,56,10, 70,56,10,56,56,10,56,56,10,56,56,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,73,111,116,97,10,69,78,67,79, 68,73,78,71,32,57,50,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,55,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,75, 97,112,112,97,10,69,78,67,79,68,73,78,71,32,57,50, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,56,10,56,56,10,57,48,10,65,48, 10,67,48,10,65,48,10,57,48,10,56,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,76,97,109,98,100,97,10,69, 78,67,79,68,73,78,71,32,57,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,50,48,10,53,48,10,53,48,10,53,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,77,117,10,69,78,67,79,68,73,78,71,32,57,50, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,56,10,56,56,10,68,56,10,65,56, 10,65,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,78,117,10,69,78,67,79,68, 73,78,71,32,57,50,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,67,56, 10,67,56,10,65,56,10,65,56,10,57,56,10,57,56,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,88,105, 10,69,78,67,79,68,73,78,71,32,57,50,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,56,10,48,48,10,48,48,10,48,48,10,55,48,10, 48,48,10,48,48,10,48,48,10,70,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,79,109,105,99,114,111,110,10,69,78,67,79, 68,73,78,71,32,57,50,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,80, 105,10,69,78,67,79,68,73,78,71,32,57,50,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,70,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,82,104,111,10,69,78,67,79,68,73,78, 71,32,57,50,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,70,48,10,56,56,10,56, 56,10,56,56,10,70,48,10,56,48,10,56,48,10,56,48, 10,56,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,83,105,103,109, 97,10,69,78,67,79,68,73,78,71,32,57,51,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,70,56,10,56,48,10,52,48,10,50,48,10,49,48, 10,50,48,10,52,48,10,56,48,10,70,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,84,97,117,10,69,78,67,79,68,73,78, 71,32,57,51,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,70,56,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,85,112,115,105, 108,111,110,10,69,78,67,79,68,73,78,71,32,57,51,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,56,56,10,56,56,10,53,48,10,53,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,80,104,105,10,69,78,67,79,68, 73,78,71,32,57,51,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,55,48, 10,65,56,10,65,56,10,65,56,10,65,56,10,55,48,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,67,104, 105,10,69,78,67,79,68,73,78,71,32,57,51,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,56,56,10,56,56,10,53,48,10,53,48,10,50,48, 10,53,48,10,53,48,10,56,56,10,56,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,80,115,105,10,69,78,67,79,68,73,78, 71,32,57,51,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,65,56,10,65,56,10,65, 56,10,65,56,10,65,56,10,55,48,10,50,48,10,50,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,79,109,101,103, 97,10,69,78,67,79,68,73,78,71,32,57,51,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,53,48,10,53,48,10,68,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,73,111,116,97,100,105,101,114,101,115,105, 115,10,69,78,67,79,68,73,78,71,32,57,51,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,48,48,10,55,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,85,112,115,105,108,111,110,100,105,101,114, 101,115,105,115,10,69,78,67,79,68,73,78,71,32,57,51, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,68,56,10,48,48,10,56,56,10,53,48,10,53,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,108,112,104,97,116,111,110, 111,115,10,69,78,67,79,68,73,78,71,32,57,52,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,49,48,10,50,48,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,57,56,10,54,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,101,112,115,105,108,111,110,116,111,110, 111,115,10,69,78,67,79,68,73,78,71,32,57,52,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,49,48,10,50,48,10,48,48,10,55,48,10,56, 56,10,54,48,10,56,48,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,101,116,97,116,111,110,111,115,10,69, 78,67,79,68,73,78,71,32,57,52,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,49, 48,10,50,48,10,48,48,10,66,48,10,67,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,48,56,10,48,56,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,105,111,116,97,116,111,110,111,115,10,69,78,67,79, 68,73,78,71,32,57,52,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,52, 48,10,48,48,10,52,48,10,52,48,10,52,48,10,52,48, 10,53,48,10,50,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 112,115,105,108,111,110,100,105,101,114,101,115,105,115,116,111, 110,111,115,10,69,78,67,79,68,73,78,71,32,57,52,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,49,48,10,50,48,10,68,56,10,48,48,10,56,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,108,112,104,97,10,69,78,67, 79,68,73,78,71,32,57,52,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,57,56,10,54,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 98,101,116,97,10,69,78,67,79,68,73,78,71,32,57,52, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,54,48,10,57,48,10,57,48,10,70,48, 10,56,56,10,56,56,10,56,56,10,67,56,10,66,48,10, 56,48,10,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,103,97,109,109,97,10,69,78, 67,79,68,73,78,71,32,57,52,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,56,56,10,56,56,10,56,56,10, 53,48,10,53,48,10,50,48,10,50,48,10,50,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,100,101,108,116,97,10,69,78,67,79,68,73,78,71,32, 57,52,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,55,48,10,56,56,10,52,48,10, 55,48,10,56,56,10,56,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,101,112,115,105,108,111, 110,10,69,78,67,79,68,73,78,71,32,57,52,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,55,48,10,56,56, 10,54,48,10,56,48,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,122,101,116,97,10,69,78,67,79,68,73, 78,71,32,57,53,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,70,56,10,50,48,10, 52,48,10,52,48,10,56,48,10,56,48,10,56,48,10,56, 48,10,55,48,10,48,56,10,49,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,101,116,97, 10,69,78,67,79,68,73,78,71,32,57,53,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,66,48,10,67,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,48,56,10,48, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,116,104,101,116,97,10,69,78,67,79,68,73, 78,71,32,57,53,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,54,48,10,57,48,10, 57,48,10,57,48,10,70,48,10,57,48,10,57,48,10,57, 48,10,54,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,105,111,116, 97,10,69,78,67,79,68,73,78,71,32,57,53,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,52,48,10,52,48, 10,52,48,10,52,48,10,53,48,10,50,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,107,97,112,112,97,10,69,78,67,79,68, 73,78,71,32,57,53,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,56,56,10,57,48,10,65,48,10,69,48,10, 57,48,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,108,97, 109,98,100,97,10,69,78,67,79,68,73,78,71,32,57,53, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,55,48,10,56,56,10,48,56,10,54,56, 10,57,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,109,117,10,69,78,67,79,68, 73,78,71,32,57,53,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,56,56,10,56,56,10,56,56,10,56,56,10, 57,56,10,69,56,10,56,48,10,56,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,110,117, 10,69,78,67,79,68,73,78,71,32,57,53,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,56,56,10,56,56,10, 56,56,10,53,48,10,53,48,10,50,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,120,105,10,69,78,67,79,68,73,78,71,32, 57,53,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,56,10,50,48,10,52,48,10, 52,48,10,51,48,10,52,48,10,56,48,10,56,48,10,55, 48,10,48,56,10,49,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,111,109,105,99,114,111, 110,10,69,78,67,79,68,73,78,71,32,57,53,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,55,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,112,105,10,69,78,67,79,68,73,78,71, 32,57,54,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,70,56,10,53,48,10,53,48,10,53,48,10,53,48,10, 53,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,114,104,111,10,69, 78,67,79,68,73,78,71,32,57,54,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,48,10,56,56,10,56,56, 10,56,56,10,56,56,10,70,48,10,56,48,10,56,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,115,105,103,109,97,49,10,69,78,67,79,68,73,78, 71,32,57,54,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,48,10,56,56,10,56,48,10,56,48,10,56,48, 10,55,48,10,48,56,10,51,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,115,105,103,109, 97,10,69,78,67,79,68,73,78,71,32,57,54,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,55,56,10,57,48, 10,56,56,10,56,56,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,116,97,117,10,69,78,67,79,68,73,78, 71,32,57,54,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,70,56,10,50,48,10,50,48,10,50,48,10,50,48, 10,49,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,112,115,105, 108,111,110,10,69,78,67,79,68,73,78,71,32,57,54,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,56,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,112,104,105,10,69,78,67,79,68, 73,78,71,32,57,54,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,66,48,10,65,56,10,65,56,10,65,56,10, 65,56,10,55,48,10,50,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,99,104, 105,10,69,78,67,79,68,73,78,71,32,57,54,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,56,56,10,53,48, 10,53,48,10,50,48,10,50,48,10,53,48,10,53,48,10, 56,56,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,112,115,105,10,69,78,67,79,68,73,78, 71,32,57,54,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,65,56,10,65,56,10,65,56,10,65,56,10,65,56, 10,55,48,10,50,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,111,109,101,103, 97,10,69,78,67,79,68,73,78,71,32,57,54,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,56,56,10,65,56, 10,65,56,10,65,56,10,65,56,10,53,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,105,111,116,97,100,105,101,114,101,115,105, 115,10,69,78,67,79,68,73,78,71,32,57,55,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,68,56,10,48,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,56,10,49,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,112,115,105,108,111,110,100,105,101,114, 101,115,105,115,10,69,78,67,79,68,73,78,71,32,57,55, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,68,56,10,48,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,111,109,105,99,114,111,110,116, 111,110,111,115,10,69,78,67,79,68,73,78,71,32,57,55, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,49,48,10,50,48,10,48,48,10,55,48, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,112,115,105,108,111,110,116, 111,110,111,115,10,69,78,67,79,68,73,78,71,32,57,55, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,49,48,10,50,48,10,48,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,111,109,101,103,97,116,111,110, 111,115,10,69,78,67,79,68,73,78,71,32,57,55,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,49,48,10,50,48,10,48,48,10,56,56,10,65, 56,10,65,56,10,65,56,10,65,56,10,53,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,68,48,10,69,78, 67,79,68,73,78,71,32,57,55,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,54,48, 10,57,48,10,57,48,10,66,48,10,67,56,10,56,56,10, 56,56,10,56,56,10,55,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,116,104,101,116,97,49,10,69,78,67,79,68,73,78,71, 32,57,55,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,51,48,10,52,56,10,52,56, 10,51,67,10,48,56,10,67,56,10,52,56,10,52,56,10, 51,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,85,112,115,105,108, 111,110,49,10,69,78,67,79,68,73,78,71,32,57,55,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,56,56,10,53,52,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,51,68,51,10,69, 78,67,79,68,73,78,71,32,57,55,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,54, 56,10,49,52,10,53,48,10,57,48,10,49,48,10,49,48, 10,49,48,10,49,48,10,49,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,68,52,10,69,78,67,79,68,73, 78,71,32,57,56,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,68,56,10,48,48,10,56,56,10, 53,52,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,112,104,105, 49,10,69,78,67,79,68,73,78,71,32,57,56,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,50,48,10,50,48,10,55,48,10,65,56, 10,65,56,10,65,56,10,65,56,10,55,48,10,50,48,10, 50,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,111,109,101,103,97,49,10,69,78,67,79, 68,73,78,71,32,57,56,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,70,56,10,56,56,10,65,56,10,65,56, 10,65,56,10,53,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,51,68,55,10,69,78,67,79,68,73,78,71,32, 57,56,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,52,48,10,50,48,10,48,48,10, 56,56,10,52,56,10,53,48,10,55,48,10,53,48,10,56, 56,10,48,56,10,51,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,68, 56,10,69,78,67,79,68,73,78,71,32,57,56,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,55,48,10,50,48,10, 50,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,51,68,57,10,69,78,67, 79,68,73,78,71,32,57,56,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,56,56,10,55,48,10,50,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,68,65,10,69,78,67,79,68,73,78,71, 32,57,56,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,51,48,10,52,56,10,56,48, 10,56,48,10,56,48,10,56,48,10,56,48,10,55,48,10, 48,56,10,49,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,51, 68,66,10,69,78,67,79,68,73,78,71,32,57,56,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,56,10,55,48,10,56, 48,10,56,48,10,56,48,10,56,48,10,55,48,10,48,56, 10,51,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,68,67,10,69,78, 67,79,68,73,78,71,32,57,56,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,70,56, 10,56,48,10,56,48,10,56,48,10,69,48,10,56,48,10, 56,48,10,56,48,10,56,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,51,68,68,10,69,78,67,79,68,73,78, 71,32,57,56,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,70,48,10,56,48,10,56,48,10,69,48,10,56,48, 10,56,48,10,56,48,10,56,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,68,69,10,69,78,67,79,68,73,78,71,32,57,57,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,56,48,10,56,48,10,56,56,10,57,56,10, 65,56,10,67,56,10,56,56,10,48,56,10,48,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,51,68,70,10,69, 78,67,79,68,73,78,71,32,57,57,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,50,48,10,52,48,10,52,48,10,56,48,10,70,56, 10,48,56,10,49,48,10,49,48,10,50,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,69,48,10,69,78,67,79,68,73, 78,71,32,57,57,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,50,48,10,50,48,10, 53,48,10,53,48,10,53,48,10,57,56,10,65,56,10,65, 56,10,65,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,51,69,49,10,69,78,67,79,68,73,78,71,32,57,57, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,67,48,10,50,48,10,49,48,10,51,48, 10,52,56,10,57,56,10,50,56,10,52,56,10,48,56,10, 48,56,10,48,56,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,69,50,10, 69,78,67,79,68,73,78,71,32,57,57,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 65,56,10,65,56,10,65,56,10,65,56,10,65,56,10,65, 56,10,65,56,10,55,56,10,48,56,10,70,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,51,69,51,10,69,78,67,79,68, 73,78,71,32,57,57,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,65,56,10,65,56,10,65,56,10,65,56,10, 55,56,10,48,56,10,70,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,69,52,10,69,78,67,79,68,73,78,71,32,57, 57,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,52,56,10,65,56,10,56,56,10,56, 56,10,56,56,10,55,56,10,48,56,10,48,56,10,48,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,51,69,53, 10,69,78,67,79,68,73,78,71,32,57,57,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,52,56,10,65,56,10, 56,56,10,55,56,10,48,56,10,48,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,69,54,10,69,78,67,79, 68,73,78,71,32,57,57,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,56,48,10,56, 48,10,56,48,10,66,48,10,67,56,10,56,56,10,56,56, 10,56,56,10,48,56,10,70,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,51,69,55,10,69,78,67,79,68,73,78,71,32, 57,57,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,50,48,10, 55,48,10,65,56,10,65,56,10,52,56,10,48,56,10,70, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,69, 56,10,69,78,67,79,68,73,78,71,32,49,48,48,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,55,48,10,56,56,10,52,56,10,49,48,10,50, 48,10,52,48,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,69,57,10,69,78, 67,79,68,73,78,71,32,49,48,48,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,55,48,10,56,56,10,56,56,10,56,56, 10,55,48,10,56,48,10,55,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,69,65,10,69,78,67,79,68,73, 78,71,32,49,48,48,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,53,48,10,65,56, 10,50,48,10,53,48,10,53,48,10,53,48,10,56,56,10, 56,56,10,70,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,69,66,10,69,78,67,79,68,73,78,71,32,49, 48,48,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 53,48,10,65,56,10,50,48,10,53,48,10,56,56,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,69, 67,10,69,78,67,79,68,73,78,71,32,49,48,48,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,56,10,55,48,10,56,48,10,66,48,10,67, 56,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,69,68,10,69,78, 67,79,68,73,78,71,32,49,48,48,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,56,10,55,48,10,56,48,10,66,48, 10,67,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,69,69,10,69,78,67,79,68,73, 78,71,32,49,48,48,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,50,48, 10,70,56,10,65,56,10,50,48,10,50,48,10,50,48,10, 50,48,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,69,70,10,69,78,67,79,68,73,78,71,32,49, 48,48,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,51,48,10,50,48,10, 70,56,10,65,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,54,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,70, 48,10,69,78,67,79,68,73,78,71,32,49,48,48,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,56,10,52, 56,10,53,48,10,55,48,10,53,48,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,70,49,10,69,78, 67,79,68,73,78,71,32,49,48,48,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,48,10,56,56,10,56,56, 10,56,56,10,56,56,10,70,48,10,56,48,10,55,56,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,70,50,10,69,78,67,79,68,73, 78,71,32,49,48,49,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,48,10,56,56,10,56,48,10,56,48,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,70,51,10,69,78,67,79,68,73,78,71,32,49, 48,49,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,49,48,10,48,48,10, 51,48,10,49,48,10,49,48,10,49,48,10,49,48,10,57, 48,10,57,48,10,54,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,70, 52,10,69,78,67,79,68,73,78,71,32,49,48,49,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,55,48,10,56,56,10,56,56,10,56,56,10,70, 56,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,70,53,10,69,78, 67,79,68,73,78,71,32,49,48,49,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,51,56,10,52,48,10,55,48, 10,52,48,10,52,48,10,51,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,70,54,10,69,78,67,79,68,73, 78,71,32,49,48,49,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,48,10,48,56,10,51,56,10,48,56,10, 48,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,48,48,10,69,78,67,79,68,73,78,71,32,49, 48,50,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,52,48,10,50,48,10,48,48,10,70,56,10, 56,48,10,56,48,10,70,48,10,56,48,10,56,48,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 48,50,51,10,69,78,67,79,68,73,78,71,32,49,48,50, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,53,48,10,53,48,10,48,48,10,70,56,10,56,48, 10,56,48,10,70,48,10,56,48,10,56,48,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,48,53, 49,10,69,78,67,79,68,73,78,71,32,49,48,50,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,70,56,10,50,48,10,50,48,10,51,48,10,50, 56,10,50,56,10,50,56,10,50,56,10,50,56,10,48,56, 10,49,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,53,50,10, 69,78,67,79,68,73,78,71,32,49,48,50,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,50,48, 10,52,48,10,48,48,10,70,56,10,56,56,10,56,48,10, 56,48,10,56,48,10,56,48,10,56,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,53,51,10,69,78, 67,79,68,73,78,71,32,49,48,50,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,51, 56,10,52,48,10,56,48,10,56,48,10,70,48,10,56,48, 10,56,48,10,52,48,10,51,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,48,53,52,10,69,78,67,79, 68,73,78,71,32,49,48,50,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,55,48,10, 56,56,10,56,48,10,56,48,10,55,48,10,48,56,10,48, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,48,53,53,10,69,78,67,79,68,73, 78,71,32,49,48,51,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,48,53,54,10,69,78,67,79,68,73,78,71, 32,49,48,51,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,53,48,10,53,48,10,48,48,10,70, 56,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,70,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,48,53,55,10,69,78,67,79,68,73,78,71,32,49, 48,51,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,51,56,10,49,48,10,49,48,10, 49,48,10,49,48,10,49,48,10,49,48,10,57,48,10,54, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 48,53,56,10,69,78,67,79,68,73,78,71,32,49,48,51, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,54,48,10,65,48,10,65,48,10,65,48, 10,66,48,10,65,56,10,65,56,10,65,56,10,66,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,48,53, 57,10,69,78,67,79,68,73,78,71,32,49,48,51,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,65,48,10,65,48,10,65,48,10,65,48,10,70, 48,10,65,56,10,65,56,10,65,56,10,66,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,54,48,10, 69,78,67,79,68,73,78,71,32,49,48,51,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,56,10,50,48,10,50,48,10,51,48,10,50,56,10, 50,56,10,50,56,10,50,56,10,50,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,54,49,10,69,78, 67,79,68,73,78,71,32,49,48,51,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,49,48,10,50,48,10,56, 56,10,56,56,10,57,48,10,65,48,10,67,48,10,65,48, 10,57,48,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,48,68,10,69,78,67,79,68,73, 78,71,32,49,48,51,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,52,48,10,50,48,10,48,48, 10,56,56,10,57,56,10,57,56,10,65,56,10,67,56,10, 67,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,48,54,50,10,69,78,67,79,68,73,78,71, 32,49,48,51,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,56,56,10,55,48,10,48,48,10,56, 56,10,56,56,10,56,56,10,55,56,10,48,56,10,48,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,49,52,53,10,69,78,67,79,68,73,78,71,32,49, 48,51,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,56,56,10,70, 56,10,50,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 48,49,55,10,69,78,67,79,68,73,78,71,32,49,48,52, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,50,48,10,53,48,10,56,56,10,56,56, 10,56,56,10,70,56,10,56,56,10,56,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,48,49, 56,10,69,78,67,79,68,73,78,71,32,49,48,52,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,70,48,10,56,48,10,56,48,10,56,48,10,70, 48,10,56,56,10,56,56,10,56,56,10,70,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,49,57,10, 69,78,67,79,68,73,78,71,32,49,48,52,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,48,10,56,56,10,56,56,10,56,56,10,70,48,10, 56,56,10,56,56,10,56,56,10,70,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,50,48,10,69,78, 67,79,68,73,78,71,32,49,48,52,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 56,10,56,56,10,56,48,10,56,48,10,56,48,10,56,48, 10,56,48,10,56,48,10,56,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,48,50,49,10,69,78,67,79, 68,73,78,71,32,49,48,52,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,51,48,10, 53,48,10,53,48,10,53,48,10,53,48,10,53,48,10,53, 48,10,53,48,10,70,56,10,56,56,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,48,50,50,10,69,78,67,79,68,73, 78,71,32,49,48,52,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,70,56,10,56,48, 10,56,48,10,56,48,10,70,48,10,56,48,10,56,48,10, 56,48,10,70,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,48,50,52,10,69,78,67,79,68,73,78,71, 32,49,48,52,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,65,56,10,65,56,10,65, 56,10,55,48,10,50,48,10,55,48,10,65,56,10,65,56, 10,65,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,48,50,53,10,69,78,67,79,68,73,78,71,32,49, 48,52,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,55,48,10,56,56,10,48,56,10, 48,56,10,51,48,10,48,56,10,48,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 48,50,54,10,69,78,67,79,68,73,78,71,32,49,48,52, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,56,10,56,56,10,57,56,10,57,56, 10,65,56,10,65,56,10,67,56,10,67,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,48,50, 55,10,69,78,67,79,68,73,78,71,32,49,48,52,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 56,56,10,55,48,10,48,48,10,56,56,10,57,56,10,57, 56,10,65,56,10,67,56,10,67,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,50,56,10, 69,78,67,79,68,73,78,71,32,49,48,53,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,56,56,10,56,56,10,57,48,10,65,48,10,67,48,10, 65,48,10,57,48,10,56,56,10,56,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,50,57,10,69,78, 67,79,68,73,78,71,32,49,48,53,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,51, 56,10,52,56,10,52,56,10,52,56,10,52,56,10,52,56, 10,52,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,48,51,48,10,69,78,67,79, 68,73,78,71,32,49,48,53,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,56,56,10, 68,56,10,68,56,10,65,56,10,65,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,48,51,49,10,69,78,67,79,68,73, 78,71,32,49,48,53,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,56,56, 10,56,56,10,56,56,10,70,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,48,51,50,10,69,78,67,79,68,73,78,71, 32,49,48,53,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,48,51,51,10,69,78,67,79,68,73,78,71,32,49, 48,53,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 48,51,52,10,69,78,67,79,68,73,78,71,32,49,48,53, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,70,48,10,56,56,10,56,56,10,56,56, 10,56,56,10,70,48,10,56,48,10,56,48,10,56,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,48,51, 53,10,69,78,67,79,68,73,78,71,32,49,48,53,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,55,48,10,56,56,10,56,48,10,56,48,10,56, 48,10,56,48,10,56,48,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,51,54,10, 69,78,67,79,68,73,78,71,32,49,48,53,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,56,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,51,55,10,69,78, 67,79,68,73,78,71,32,49,48,53,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,55,56, 10,48,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,48,51,56,10,69,78,67,79, 68,73,78,71,32,49,48,54,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,50,48,10, 55,48,10,65,56,10,65,56,10,65,56,10,65,56,10,55, 48,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,48,51,57,10,69,78,67,79,68,73, 78,71,32,49,48,54,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,56,56, 10,53,48,10,53,48,10,50,48,10,53,48,10,53,48,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,48,52,48,10,69,78,67,79,68,73,78,71, 32,49,48,54,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,57,48,10,57,48,10,57, 48,10,57,48,10,57,48,10,57,48,10,57,48,10,57,48, 10,70,56,10,48,56,10,48,56,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,48,52,49,10,69,78,67,79,68,73,78,71,32,49, 48,54,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,55,56,10,48,56,10,48,56,10,48,56,10,48, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 48,52,50,10,69,78,67,79,68,73,78,71,32,49,48,54, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,65,56,10,65,56,10,65,56,10,65,56, 10,65,56,10,65,56,10,65,56,10,65,56,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,48,52, 51,10,69,78,67,79,68,73,78,71,32,49,48,54,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,65,56,10,65,56,10,65,56,10,65,56,10,65, 56,10,65,56,10,65,56,10,65,56,10,70,56,10,48,56, 10,48,56,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,52,52,10, 69,78,67,79,68,73,78,71,32,49,48,54,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,67,48,10,52,48,10,52,48,10,52,48,10,55,48,10, 52,56,10,52,56,10,52,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,52,53,10,69,78, 67,79,68,73,78,71,32,49,48,54,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,56,56,10,56,56,10,69,56,10,57,56,10,57,56, 10,57,56,10,57,56,10,69,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,48,52,54,10,69,78,67,79, 68,73,78,71,32,49,48,54,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,56,48,10, 56,48,10,56,48,10,56,48,10,70,48,10,56,56,10,56, 56,10,56,56,10,70,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,48,52,55,10,69,78,67,79,68,73, 78,71,32,49,48,54,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,69,48,10,49,48, 10,48,56,10,48,56,10,55,56,10,48,56,10,48,56,10, 49,48,10,69,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,48,52,56,10,69,78,67,79,68,73,78,71, 32,49,48,55,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,57,48,10,65,56,10,65, 56,10,65,56,10,69,56,10,65,56,10,65,56,10,65,56, 10,57,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,48,52,57,10,69,78,67,79,68,73,78,71,32,49, 48,55,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,55,56,10,56,56,10,56,56,10, 56,56,10,55,56,10,50,56,10,52,56,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 48,54,53,10,69,78,67,79,68,73,78,71,32,49,48,55, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,55,48, 10,48,56,10,55,56,10,56,56,10,57,56,10,54,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,48,54, 54,10,69,78,67,79,68,73,78,71,32,49,48,55,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,56,10,55,48,10,56,48,10,70,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,54,55,10, 69,78,67,79,68,73,78,71,32,49,48,55,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,70,48,10,56,56,10, 70,48,10,56,56,10,56,56,10,70,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,54,56,10,69,78, 67,79,68,73,78,71,32,49,48,55,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,56,10,56,56,10,56,48, 10,56,48,10,56,48,10,56,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,48,54,57,10,69,78,67,79, 68,73,78,71,32,49,48,55,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,51,48,10,53,48,10,53,48,10,53, 48,10,53,48,10,70,56,10,56,56,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,48,55,48,10,69,78,67,79,68,73, 78,71,32,49,48,55,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,48,10,56,56,10,70,56,10,56,48,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,48,55,50,10,69,78,67,79,68,73,78,71, 32,49,48,55,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,65,56,10,65,56,10,55,48,10,55,48,10,65,56, 10,65,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,48,55,51,10,69,78,67,79,68,73,78,71,32,49, 48,55,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,48,10,56,56,10,51,48,10,48,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 48,55,52,10,69,78,67,79,68,73,78,71,32,49,48,56, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,56,56, 10,56,56,10,57,56,10,65,56,10,67,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,48,55, 53,10,69,78,67,79,68,73,78,71,32,49,48,56,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,55,48,10,48,48,10,56,56,10,56, 56,10,57,56,10,65,56,10,67,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,55,54,10, 69,78,67,79,68,73,78,71,32,49,48,56,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,56,56,10,57,48,10, 69,48,10,57,48,10,56,56,10,56,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,55,55,10,69,78, 67,79,68,73,78,71,32,49,48,56,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,51,56,10,52,56,10,52,56, 10,52,56,10,52,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,48,55,56,10,69,78,67,79, 68,73,78,71,32,49,48,56,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,56,56,10,68,56,10,65,56,10,65, 56,10,56,56,10,56,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,48,55,57,10,69,78,67,79,68,73, 78,71,32,49,48,56,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,56,56,10,56,56,10,70,56,10,56,56,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,48,56,48,10,69,78,67,79,68,73,78,71, 32,49,48,56,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,48,56,49,10,69,78,67,79,68,73,78,71,32,49, 48,56,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,56,10,56,56,10,56,56,10,56,56,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 48,56,50,10,69,78,67,79,68,73,78,71,32,49,48,56, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,70,48, 10,56,56,10,56,56,10,56,56,10,70,48,10,56,48,10, 56,48,10,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,48,56, 51,10,69,78,67,79,68,73,78,71,32,49,48,56,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,48,10,56, 56,10,56,48,10,56,48,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,56,52,10, 69,78,67,79,68,73,78,71,32,49,48,57,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,70,56,10,65,56,10, 50,48,10,50,48,10,50,48,10,50,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,56,53,10,69,78, 67,79,68,73,78,71,32,49,48,57,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,56,56,10,56,56,10,56,56, 10,57,56,10,54,56,10,48,56,10,56,56,10,55,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,48,56,54,10,69,78,67,79, 68,73,78,71,32,49,48,57,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 50,48,10,50,48,10,55,48,10,65,56,10,65,56,10,65, 56,10,65,56,10,55,48,10,50,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,48,56,55,10,69,78,67,79,68,73, 78,71,32,49,48,57,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,56,56,10,53,48,10,50,48,10,53,48,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,48,56,56,10,69,78,67,79,68,73,78,71, 32,49,48,57,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,57,48,10,57,48,10,57,48,10,57,48,10,57,48, 10,70,56,10,48,56,10,48,56,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,48,56,57,10,69,78,67,79,68,73,78,71,32,49, 48,57,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 56,56,10,56,56,10,56,56,10,55,56,10,48,56,10,48, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 48,57,48,10,69,78,67,79,68,73,78,71,32,49,48,57, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,65,56, 10,65,56,10,65,56,10,65,56,10,65,56,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,48,57, 49,10,69,78,67,79,68,73,78,71,32,49,48,57,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,65,56,10,65, 56,10,65,56,10,65,56,10,65,56,10,70,56,10,48,56, 10,48,56,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,57,50,10, 69,78,67,79,68,73,78,71,32,49,48,57,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,67,48,10,52,48,10, 55,48,10,52,56,10,52,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,57,51,10,69,78, 67,79,68,73,78,71,32,49,48,57,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,56,56,10,56,56,10,69,56, 10,57,56,10,57,56,10,69,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,48,57,52,10,69,78,67,79, 68,73,78,71,32,49,49,48,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,56,48,10,56,48,10,70,48,10,56, 56,10,56,56,10,70,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,48,57,53,10,69,78,67,79,68,73, 78,71,32,49,49,48,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,48,10,48,56,10,51,56,10,48,56,10, 48,56,10,70,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,48,57,54,10,69,78,67,79,68,73,78,71, 32,49,49,48,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,57,48,10,65,56,10,65,56,10,69,56,10,65,56, 10,57,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,48,57,55,10,69,78,67,79,68,73,78,71,32,49, 49,48,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,56,10,56,56,10,56,56,10,55,56,10,52,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,53, 48,10,69,78,67,79,68,73,78,71,32,49,49,48,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,52,48,10,50,48,10,48,48,10,55,48,10,56, 56,10,70,56,10,56,48,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,55,49,10, 69,78,67,79,68,73,78,71,32,49,49,48,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,53,48,10,53,48,10,48,48,10,55,48,10,56,56,10, 70,56,10,56,48,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,57,57,10,69,78, 67,79,68,73,78,71,32,49,49,48,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,52, 48,10,69,48,10,52,48,10,53,48,10,54,56,10,52,56, 10,52,56,10,52,56,10,52,56,10,48,56,10,49,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,49,48,48,10,69,78,67,79, 68,73,78,71,32,49,49,48,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,50,48,10, 52,48,10,48,48,10,70,56,10,56,56,10,56,48,10,56, 48,10,56,48,10,56,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,49,48,49,10,69,78,67,79,68,73, 78,71,32,49,49,48,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,56,10,56,48,10,69,48,10,56,48,10, 56,48,10,55,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,49,48,50,10,69,78,67,79,68,73,78,71, 32,49,49,48,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,48,10,56,56,10,54,48,10,49,48,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,49,48,51,10,69,78,67,79,68,73,78,71,32,49, 49,49,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,50,48,10,48,48,10, 54,48,10,50,48,10,50,48,10,50,48,10,50,48,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 49,48,52,10,69,78,67,79,68,73,78,71,32,49,49,49, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,53,48,10,53,48,10,48,48,10,54,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,49,48, 53,10,69,78,67,79,68,73,78,71,32,49,49,49,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,49,48,10,48,48,10,51,48,10,49, 48,10,49,48,10,49,48,10,49,48,10,57,48,10,57,48, 10,54,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,49,48,54,10, 69,78,67,79,68,73,78,71,32,49,49,49,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,54,48,10,65,48,10, 66,48,10,65,56,10,65,56,10,66,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,49,48,55,10,69,78, 67,79,68,73,78,71,32,49,49,49,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,65,48,10,65,48,10,70,48, 10,65,56,10,65,56,10,66,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,49,48,56,10,69,78,67,79, 68,73,78,71,32,49,49,49,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,48,10, 69,48,10,52,48,10,53,48,10,54,56,10,52,56,10,52, 56,10,52,56,10,52,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,49,48,57,10,69,78,67,79,68,73, 78,71,32,49,49,49,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,52,48, 10,48,48,10,56,56,10,57,48,10,69,48,10,57,48,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,53,68,10,69,78,67,79,68,73,78,71,32,49, 49,49,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,52,48,10,50,48,10,48,48,10, 56,56,10,56,56,10,57,56,10,65,56,10,67,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 49,49,48,10,69,78,67,79,68,73,78,71,32,49,49,49, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,56,10,55,48,10,48,48,10,56,56, 10,56,56,10,56,56,10,57,56,10,54,56,10,48,56,10, 56,56,10,55,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,49,57, 51,10,69,78,67,79,68,73,78,71,32,49,49,49,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,70,56,10,50,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,54,48,10,69,78, 67,79,68,73,78,71,32,49,49,50,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,53, 48,10,56,56,10,56,56,10,56,56,10,65,56,10,65,56, 10,65,56,10,65,56,10,53,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,54,49,10,69,78,67,79,68,73, 78,71,32,49,49,50,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,53,48,10,56,56,10,65,56,10,65,56,10, 65,56,10,53,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,49,52,54,10,69,78,67,79,68,73,78,71, 32,49,49,50,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,52,48,10,70,48,10,52, 48,10,52,48,10,55,48,10,52,56,10,52,56,10,52,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,49,57,52,10,69,78,67,79,68,73,78,71,32,49, 49,50,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,52,48,10,52,48,10, 69,48,10,52,48,10,55,48,10,52,56,10,52,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,54, 52,10,69,78,67,79,68,73,78,71,32,49,49,50,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,57,56,10,65,48,10,65,48,10,65,48,10,70, 56,10,65,48,10,65,48,10,65,48,10,57,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,54,53,10,69,78, 67,79,68,73,78,71,32,49,49,50,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,57,56,10,65,48,10,70,56, 10,65,48,10,65,48,10,57,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,54,54,10,69,78,67,79,68,73, 78,71,32,49,49,50,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,53,48,10,53,48,10,53,48,10,56,56,10,65,56,10, 65,56,10,65,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,54,55,10,69,78,67,79,68,73,78,71,32,49, 49,50,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 50,48,10,53,48,10,53,48,10,56,56,10,65,56,10,65, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,54, 56,10,69,78,67,79,68,73,78,71,32,49,49,50,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,57,48,10,57,48,10,57,48,10,66,56,10,70, 56,10,66,56,10,66,56,10,66,56,10,66,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,54,57,10,69,78, 67,79,68,73,78,71,32,49,49,50,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,57,48,10,57,48,10,70,56, 10,66,56,10,66,56,10,66,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,54,65,10,69,78,67,79,68,73, 78,71,32,49,49,51,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,70,56,10,56,56, 10,53,48,10,53,48,10,55,48,10,65,56,10,65,56,10, 65,56,10,65,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,54,66,10,69,78,67,79,68,73,78,71,32,49, 49,51,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,56,10,53,48,10,53,48,10,55,48,10,65,56,10,65, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,54, 67,10,69,78,67,79,68,73,78,71,32,49,49,51,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,66,56,10,65,56,10,65,56,10,65,56,10,70, 48,10,66,56,10,68,52,10,68,52,10,68,52,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,54,68,10,69,78, 67,79,68,73,78,71,32,49,49,51,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,66,56,10,65,56,10,57,48, 10,70,56,10,66,56,10,66,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,54,69,10,69,78,67,79,68,73, 78,71,32,49,49,51,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,52,56,10,51,48,10,48,48, 10,55,48,10,56,56,10,48,56,10,51,48,10,48,56,10, 48,56,10,55,48,10,56,48,10,55,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,54,70,10,69,78,67,79,68,73,78,71,32,49, 49,51,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,52,56,10,51,48,10,48,48,10, 55,48,10,56,56,10,51,48,10,48,56,10,48,56,10,55, 48,10,56,48,10,55,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,55, 48,10,69,78,67,79,68,73,78,71,32,49,49,51,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,65,56,10,65,56,10,65,56,10,65,56,10,65, 56,10,55,48,10,50,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,55,49,10,69,78, 67,79,68,73,78,71,32,49,49,51,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,65,56,10,65,56,10,65,56, 10,65,56,10,65,56,10,55,48,10,50,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,49,52,55,10,69,78,67,79, 68,73,78,71,32,49,49,51,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,55,48,10, 56,56,10,56,56,10,56,56,10,70,56,10,56,56,10,56, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,49,57,53,10,69,78,67,79,68,73, 78,71,32,49,49,51,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,51,48,10,52,56,10,55,56,10,52,56,10, 52,56,10,51,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,49,52,56,10,69,78,67,79,68,73,78,71, 32,49,49,52,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,57,56,10,57,48,10,57, 48,10,57,48,10,53,48,10,53,48,10,53,48,10,50,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,49,57,54,10,69,78,67,79,68,73,78,71,32,49, 49,52,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 57,56,10,57,48,10,57,48,10,53,48,10,53,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,55, 54,10,69,78,67,79,68,73,78,71,32,49,49,52,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 57,48,10,52,56,10,48,48,10,57,67,10,57,48,10,57, 48,10,53,48,10,53,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,55,55,10,69,78, 67,79,68,73,78,71,32,49,49,52,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,57, 48,10,52,56,10,48,48,10,57,56,10,57,48,10,57,48, 10,53,48,10,53,48,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,55,56,10,69,78,67,79,68,73, 78,71,32,49,49,52,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,52,48,10,65,48, 10,65,48,10,66,56,10,66,56,10,66,56,10,66,56,10, 66,56,10,53,56,10,48,56,10,49,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,55,57,10,69,78,67,79,68,73,78,71,32,49, 49,52,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 53,56,10,66,56,10,66,56,10,66,56,10,66,56,10,53, 56,10,48,56,10,49,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,55, 65,10,69,78,67,79,68,73,78,71,32,49,49,52,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 50,48,10,55,48,10,65,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,65,56,10,55,48,10,50,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,55,66,10,69,78, 67,79,68,73,78,71,32,49,49,52,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,50,48,10,55,48,10,65,56,10,56,56, 10,56,56,10,65,56,10,55,48,10,50,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,55,67,10,69,78,67,79,68,73, 78,71,32,49,49,52,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,54,48,10,57,56,10,54,48,10,48,48, 10,53,48,10,56,56,10,65,56,10,65,56,10,65,56,10, 65,56,10,53,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,55,68,10,69,78,67,79,68,73,78,71,32,49, 49,52,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,54,48,10,57,56,10,54,48,10,48,48,10, 53,48,10,56,56,10,65,56,10,65,56,10,65,56,10,53, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,55, 69,10,69,78,67,79,68,73,78,71,32,49,49,53,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 70,56,10,65,56,10,48,48,10,53,48,10,56,56,10,65, 56,10,65,56,10,65,56,10,65,56,10,53,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,55,70,10,69,78, 67,79,68,73,78,71,32,49,49,53,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 56,10,65,56,10,48,48,10,53,48,10,56,56,10,65,56, 10,65,56,10,65,56,10,53,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,56,48,10,69,78,67,79,68,73, 78,71,32,49,49,53,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,56,56, 10,56,56,10,56,48,10,56,48,10,56,48,10,56,48,10, 56,48,10,55,48,10,49,48,10,49,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,56,49,10,69,78,67,79,68,73,78,71,32,49, 49,53,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,48,10,56,56,10,56,48,10,56,48,10,55,48,10,49, 48,10,49,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,56, 50,10,69,78,67,79,68,73,78,71,32,49,49,53,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,50,56,10,49,48,10,66,48,10,52, 56,10,52,48,10,65,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,56,51,10,69,78, 67,79,68,73,78,71,32,49,49,53,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,52,10,70,67,10,56, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,56,52,10,69,78,67,79,68,73, 78,71,32,49,49,53,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,55,48,10,56,67,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,56,53,10,69,78,67,79,68,73,78,71,32,49, 49,53,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,55,48,10,67,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,56, 54,10,69,78,67,79,68,73,78,71,32,49,49,53,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 55,48,10,57,56,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,56,56,10,69,78, 67,79,68,73,78,71,32,49,49,54,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,52,48,10,65,48,10,48, 56,10,49,52,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,52,48,10,65,48,10,48,56,10,49,52,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,56,57,10,69,78,67,79,68,73, 78,71,32,49,49,54,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,52,48,10,56,52,10,67,56,10,48,67, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 52,48,10,56,52,10,67,56,10,48,67,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,56,65,10,69,78,67,79,68,73,78,71,32,49, 49,54,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,56,56,10,55,48,10,48,48,10,56,56,10, 57,56,10,57,56,10,65,56,10,67,56,10,67,56,10,56, 56,10,49,48,10,49,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,56, 66,10,69,78,67,79,68,73,78,71,32,49,49,54,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,55,48,10,48,48,10,56,56,10,56, 56,10,57,56,10,65,56,10,67,56,10,56,56,10,49,48, 10,49,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,56,67,10,69,78, 67,79,68,73,78,71,32,49,49,54,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,52, 48,10,52,48,10,69,48,10,52,48,10,55,48,10,52,56, 10,52,56,10,52,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,56,68,10,69,78,67,79,68,73, 78,71,32,49,49,54,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,52,48,10,69,48,10,52,48,10,55,48,10,52,56,10, 52,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,56,69,10,69,78,67,79,68,73,78,71,32,49, 49,54,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,48,10,56,56,10,56,56,10, 56,56,10,65,56,10,70,48,10,56,56,10,56,48,10,56, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,56, 70,10,69,78,67,79,68,73,78,71,32,49,49,54,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,70,48,10,56, 56,10,56,56,10,65,56,10,70,48,10,56,56,10,56,48, 10,56,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,53,48,10, 69,78,67,79,68,73,78,71,32,49,49,54,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,56, 10,70,56,10,56,48,10,56,48,10,56,48,10,56,48,10, 56,48,10,56,48,10,56,48,10,56,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,57,56,10,69,78, 67,79,68,73,78,71,32,49,49,54,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,56,10,70,56,10,56,48,10,56,48, 10,56,48,10,56,48,10,56,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,57,50,10,69,78,67,79,68,73, 78,71,32,49,49,55,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,56,10,52,56, 10,52,48,10,52,48,10,69,48,10,52,48,10,52,48,10, 52,48,10,52,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,57,51,10,69,78,67,79,68,73,78,71,32,49, 49,55,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,56,10,52,56,10,69,48,10,52,48,10,52,48,10,52, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,57, 52,10,69,78,67,79,68,73,78,71,32,49,49,55,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,70,56,10,56,48,10,56,48,10,56,48,10,70, 48,10,56,56,10,56,56,10,56,56,10,56,56,10,49,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,57,53,10,69,78, 67,79,68,73,78,71,32,49,49,55,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,56,10,56,48,10,70,48, 10,56,56,10,56,56,10,56,56,10,49,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,57,54,10,69,78,67,79,68,73, 78,71,32,49,49,55,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,65,56,10,65,56, 10,65,56,10,55,48,10,50,48,10,55,48,10,65,56,10, 65,56,10,65,67,10,48,52,10,48,52,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,57,55,10,69,78,67,79,68,73,78,71,32,49, 49,55,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 65,56,10,65,56,10,55,48,10,55,48,10,65,56,10,65, 67,10,48,52,10,48,52,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,57, 56,10,69,78,67,79,68,73,78,71,32,49,49,55,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,55,48,10,56,56,10,48,56,10,48,56,10,51, 48,10,48,56,10,48,56,10,56,56,10,55,48,10,50,48, 10,52,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,57,57,10,69,78, 67,79,68,73,78,71,32,49,49,55,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,48,10,56,56,10,51,48, 10,48,56,10,56,56,10,55,48,10,50,48,10,52,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,57,65,10,69,78,67,79,68,73, 78,71,32,49,49,55,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,57,48,10,57,48, 10,65,48,10,65,48,10,67,48,10,65,48,10,57,48,10, 57,48,10,57,56,10,48,56,10,48,56,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,57,66,10,69,78,67,79,68,73,78,71,32,49, 49,55,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 57,48,10,65,48,10,67,48,10,65,48,10,57,48,10,57, 56,10,48,56,10,48,56,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,57, 67,10,69,78,67,79,68,73,78,71,32,49,49,56,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,65,56,10,66,48,10,65,48,10,69, 48,10,65,48,10,66,48,10,65,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,57,68,10,69,78, 67,79,68,73,78,71,32,49,49,56,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,65,56,10,66,48,10,69,48, 10,66,48,10,65,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,57,69,10,69,78,67,79,68,73, 78,71,32,49,49,56,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,52,56,10,69,56, 10,53,48,10,54,48,10,54,48,10,54,48,10,53,48,10, 52,56,10,52,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,57,70,10,69,78,67,79,68,73,78,71,32,49, 49,56,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,52,48,10,52,48,10,69,48,10, 52,56,10,53,48,10,54,48,10,53,48,10,52,56,10,52, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,65, 48,10,69,78,67,79,68,73,78,71,32,49,49,56,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,67,56,10,52,56,10,53,48,10,54,48,10,54, 48,10,54,48,10,53,48,10,52,56,10,52,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,65,49,10,69,78, 67,79,68,73,78,71,32,49,49,56,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,67,56,10,53,48,10,54,48, 10,53,48,10,52,56,10,52,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,65,50,10,69,78,67,79,68,73, 78,71,32,49,49,56,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,57,48,10,57,48, 10,57,48,10,57,48,10,70,48,10,57,48,10,57,48,10, 57,48,10,57,56,10,48,56,10,48,56,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,65,51,10,69,78,67,79,68,73,78,71,32,49, 49,56,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 57,48,10,57,48,10,70,48,10,57,48,10,57,48,10,57, 56,10,48,56,10,48,56,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,65, 52,10,69,78,67,79,68,73,78,71,32,49,49,56,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,66,56,10,65,48,10,65,48,10,65,48,10,69, 48,10,65,48,10,65,48,10,65,48,10,65,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,65,53,10,69,78, 67,79,68,73,78,71,32,49,49,56,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,66,56,10,65,48,10,69,48, 10,65,48,10,65,48,10,65,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,65,54,10,69,78,67,79,68,73, 78,71,32,49,49,57,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,69,48,10,65,48, 10,65,48,10,65,48,10,66,48,10,65,56,10,65,56,10, 65,56,10,65,56,10,48,56,10,49,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,65,55,10,69,78,67,79,68,73,78,71,32,49, 49,57,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,48,10,65,48,10,66,48,10,65,56,10,65,56,10,65, 56,10,48,56,10,49,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,65, 56,10,69,78,67,79,68,73,78,71,32,49,49,57,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,55,48,10,56,56,10,56,48,10,57,48,10,65, 56,10,65,56,10,65,56,10,55,48,10,50,48,10,49,56, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,65,57,10,69,78, 67,79,68,73,78,71,32,49,49,57,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,48,10,56,48,10,57,48, 10,65,56,10,55,48,10,50,48,10,49,56,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,65,65,10,69,78,67,79,68,73, 78,71,32,49,49,57,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,56,56, 10,56,48,10,56,48,10,56,48,10,56,48,10,56,48,10, 56,56,10,55,48,10,50,48,10,49,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,65,66,10,69,78,67,79,68,73,78,71,32,49, 49,57,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,48,10,56,56,10,56,48,10,56,48,10,56,56,10,55, 48,10,50,48,10,49,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,65, 67,10,69,78,67,79,68,73,78,71,32,49,49,57,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,70,56,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,51,48,10,49,48, 10,49,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,65,68,10,69,78, 67,79,68,73,78,71,32,49,49,57,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,56,10,65,56,10,50,48, 10,50,48,10,50,48,10,51,48,10,49,48,10,49,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,65,69,10,69,78,67,79,68,73, 78,71,32,49,49,57,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,56,56, 10,53,48,10,53,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,65,70,10,69,78,67,79,68,73,78,71,32,49, 49,57,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 56,56,10,56,56,10,53,48,10,53,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,66, 48,10,69,78,67,79,68,73,78,71,32,49,50,48,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,56,56,10,53,48,10,53,48,10,50, 48,10,70,56,10,50,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,66,49,10,69,78, 67,79,68,73,78,71,32,49,50,48,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,56,56,10,56,56,10,53,48, 10,53,48,10,50,48,10,70,56,10,50,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,66,50,10,69,78,67,79,68,73, 78,71,32,49,50,48,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,56,56, 10,53,48,10,53,48,10,50,48,10,53,48,10,53,48,10, 56,56,10,56,67,10,48,52,10,48,52,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,66,51,10,69,78,67,79,68,73,78,71,32,49, 50,48,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 56,56,10,53,48,10,50,48,10,53,48,10,56,56,10,56, 67,10,48,52,10,48,52,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,66, 52,10,69,78,67,79,68,73,78,71,32,49,50,48,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,69,56,10,52,56,10,52,56,10,52,56,10,52, 56,10,52,56,10,52,56,10,52,56,10,55,56,10,48,56, 10,48,56,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,66,53,10,69,78, 67,79,68,73,78,71,32,49,50,48,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,56,10,52,56,10,52,56, 10,52,56,10,52,56,10,55,56,10,48,56,10,48,56,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,66,54,10,69,78,67,79,68,73, 78,71,32,49,50,48,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,57,48,10,57,48, 10,57,48,10,57,48,10,57,48,10,55,48,10,49,48,10, 49,48,10,49,56,10,48,56,10,48,56,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,66,55,10,69,78,67,79,68,73,78,71,32,49, 50,48,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 57,48,10,57,48,10,57,48,10,55,48,10,49,48,10,49, 56,10,48,56,10,48,56,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,66, 56,10,69,78,67,79,68,73,78,71,32,49,50,48,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,56,56,10,56,56,10,65,56,10,65, 56,10,55,56,10,50,56,10,50,56,10,48,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,66,57,10,69,78, 67,79,68,73,78,71,32,49,50,48,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,56,56,10,56,56,10,65,56, 10,55,56,10,50,56,10,48,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,66,65,10,69,78,67,79,68,73, 78,71,32,49,50,49,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,48,10,56,48, 10,56,48,10,70,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,66,66,10,69,78,67,79,68,73,78,71,32,49, 50,49,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,48,10,56,48,10,56,48,10, 56,48,10,69,48,10,57,48,10,57,48,10,57,48,10,57, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,66, 67,10,69,78,67,79,68,73,78,71,32,49,50,49,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,51,48,10,52,56,10,52,56,10,52,56,10,70, 56,10,52,48,10,52,48,10,52,56,10,51,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,66,68,10,69,78, 67,79,68,73,78,71,32,49,50,49,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,51,48,10,52,56,10,70,56, 10,52,48,10,52,56,10,51,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,66,69,10,69,78,67,79,68,73, 78,71,32,49,50,49,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,51,48,10,52,56, 10,52,56,10,52,56,10,70,56,10,52,48,10,52,48,10, 52,56,10,51,48,10,50,48,10,49,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,66,70,10,69,78,67,79,68,73,78,71,32,49, 50,49,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 51,48,10,52,56,10,70,56,10,52,48,10,52,56,10,51, 48,10,50,48,10,49,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,67, 48,10,69,78,67,79,68,73,78,71,32,49,50,49,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,55,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,67,49,10,69,78, 67,79,68,73,78,71,32,49,50,49,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,56,56,10,55,48,10,48, 48,10,65,56,10,65,56,10,65,56,10,55,48,10,55,48, 10,65,56,10,65,56,10,65,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,67,50,10,69,78,67,79,68,73, 78,71,32,49,50,49,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,55,48, 10,48,48,10,65,56,10,65,56,10,55,48,10,55,48,10, 65,56,10,65,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,67,51,10,69,78,67,79,68,73,78,71,32,49, 50,49,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,56,56,10,57,48,10, 65,48,10,67,48,10,65,48,10,57,48,10,56,56,10,56, 56,10,48,56,10,51,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,67, 52,10,69,78,67,79,68,73,78,71,32,49,50,50,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,56,10,57, 48,10,69,48,10,57,48,10,56,56,10,56,56,10,48,56, 10,51,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,67,53,10,69,78, 67,79,68,73,78,71,32,49,50,50,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,51, 56,10,52,56,10,52,56,10,52,56,10,52,56,10,52,56, 10,52,56,10,56,56,10,56,56,10,49,48,10,49,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,67,54,10,69,78,67,79,68,73, 78,71,32,49,50,50,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,51,56,10,52,56,10,52,56,10,52,56,10, 52,56,10,56,56,10,49,48,10,49,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,67,55,10,69,78,67,79,68,73,78,71,32,49, 50,50,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,70,56,10,56,56,10,56,56,10,56,56,10,56, 56,10,48,56,10,51,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,67, 56,10,69,78,67,79,68,73,78,71,32,49,50,50,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,56,10,56, 56,10,70,56,10,56,56,10,56,56,10,56,56,10,48,56, 10,51,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,67,57,10,69,78, 67,79,68,73,78,71,32,49,50,50,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,70,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,49,48,10,49,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,67,65,10,69,78,67,79,68,73, 78,71,32,49,50,50,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,56,56,10,56,56,10,70,56,10,56,56,10, 56,56,10,56,56,10,49,48,10,49,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,67,66,10,69,78,67,79,68,73,78,71,32,49, 50,50,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,55,56,10,48,56,10,48,56,10,49, 56,10,49,48,10,49,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,67, 67,10,69,78,67,79,68,73,78,71,32,49,50,50,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,56,10,56, 56,10,56,56,10,55,56,10,48,56,10,49,56,10,49,48, 10,49,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,67,68,10,69,78, 67,79,68,73,78,71,32,49,50,50,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,68,56,10,68,56,10,65,56,10,65,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,49,48,10,49,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,67,69,10,69,78,67,79,68,73, 78,71,32,49,50,51,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,56,56,10,68,56,10,65,56,10,65,56,10, 56,56,10,56,56,10,49,48,10,49,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,68,48,10,69,78,67,79,68,73,78,71,32,49, 50,51,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,56,56,10,55,48,10,48,48,10,50,48,10, 53,48,10,56,56,10,56,56,10,70,56,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,68, 49,10,69,78,67,79,68,73,78,71,32,49,50,51,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,55,48,10,48,48,10,55,48,10,48, 56,10,55,56,10,56,56,10,57,56,10,54,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,68,50,10,69,78, 67,79,68,73,78,71,32,49,50,51,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,53,48,10,53, 48,10,48,48,10,50,48,10,53,48,10,56,56,10,56,56, 10,70,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,68,51,10,69,78,67,79,68,73, 78,71,32,49,50,51,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,53,48,10,53,48, 10,48,48,10,55,48,10,48,56,10,55,56,10,56,56,10, 57,56,10,54,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,68,52,10,69,78,67,79,68,73,78,71,32,49, 50,51,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,53,56,10,65,48,10,65,48,10, 65,48,10,66,48,10,69,48,10,65,48,10,65,48,10,66, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,68, 53,10,69,78,67,79,68,73,78,71,32,49,50,51,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,48,10,50, 56,10,55,48,10,65,48,10,65,56,10,53,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,68,54,10,69,78, 67,79,68,73,78,71,32,49,50,51,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,56,56,10,55, 48,10,48,48,10,70,56,10,56,48,10,56,48,10,70,48, 10,56,48,10,56,48,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,68,55,10,69,78,67,79,68,73, 78,71,32,49,50,51,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,55,48, 10,48,48,10,55,48,10,56,56,10,70,56,10,56,48,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,68,56,10,69,78,67,79,68,73,78,71,32,49, 50,52,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,55,48,10,56,56,10,48,56,10, 48,56,10,70,56,10,56,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 56,52,54,10,69,78,67,79,68,73,78,71,32,49,50,52, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,55,48, 10,56,56,10,48,56,10,70,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,68,65,10, 69,78,67,79,68,73,78,71,32,49,50,52,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,53,48, 10,53,48,10,48,48,10,55,48,10,56,56,10,48,56,10, 70,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,68,66,10,69,78,67,79, 68,73,78,71,32,49,50,52,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,53,48,10, 53,48,10,48,48,10,55,48,10,56,56,10,48,56,10,70, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,68,67,10,69,78,67,79,68,73,78,71, 32,49,50,52,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,53,48,10,53,48,10,48,48,10,65, 56,10,65,56,10,55,48,10,50,48,10,55,48,10,65,56, 10,65,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,68,68,10,69,78,67,79,68,73,78,71,32,49,50,52, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,53,48,10,53,48,10,48,48,10,65,56, 10,65,56,10,55,48,10,55,48,10,65,56,10,65,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,68,69,10, 69,78,67,79,68,73,78,71,32,49,50,52,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,53,48, 10,53,48,10,48,48,10,55,48,10,56,56,10,48,56,10, 51,48,10,48,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,68,70,10,69,78,67,79, 68,73,78,71,32,49,50,52,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,53,48,10, 53,48,10,48,48,10,55,48,10,56,56,10,51,48,10,48, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,69,48,10,69,78,67,79,68,73,78,71, 32,49,50,52,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,70,56,10,48,56,10,49, 48,10,50,48,10,55,48,10,48,56,10,48,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,69,49,10,69,78,67,79,68,73,78,71,32,49,50,52, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,70,56, 10,49,48,10,50,48,10,55,48,10,48,56,10,48,56,10, 56,56,10,55,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,69,50,10, 69,78,67,79,68,73,78,71,32,49,50,53,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,56,10,48,48,10,56,56,10,57,56,10,57,56,10, 65,56,10,67,56,10,67,56,10,56,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,69,51,10,69,78,67,79, 68,73,78,71,32,49,50,53,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 70,56,10,48,48,10,56,56,10,56,56,10,57,56,10,65, 56,10,67,56,10,56,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,69,52,10,69,78,67,79,68,73,78,71, 32,49,50,53,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,53,48,10,53,48,10,48,48,10,56, 56,10,57,56,10,57,56,10,65,56,10,67,56,10,67,56, 10,56,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,69,53,10,69,78,67,79,68,73,78,71,32,49,50,53, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,53,48,10,53,48,10,48,48,10,56,56, 10,56,56,10,57,56,10,65,56,10,67,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,69,54,10, 69,78,67,79,68,73,78,71,32,49,50,53,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,53,48, 10,53,48,10,48,48,10,55,48,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,69,55,10,69,78,67,79, 68,73,78,71,32,49,50,53,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,53,48,10, 53,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,69,56,10,69,78,67,79,68,73,78,71, 32,49,50,53,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 56,10,69,56,10,66,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,69,57,10,69,78,67,79,68,73,78,71,32,49,50,53, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,55,48, 10,56,56,10,69,56,10,66,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,69,65,10, 69,78,67,79,68,73,78,71,32,49,50,53,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,53,48, 10,53,48,10,48,48,10,55,48,10,56,56,10,69,56,10, 66,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,69,66,10,69,78,67,79, 68,73,78,71,32,49,50,53,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,53,48,10, 53,48,10,48,48,10,55,48,10,56,56,10,69,56,10,66, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,69,67,10,69,78,67,79,68,73,78,71, 32,49,50,54,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,53,48,10,53,48,10,48,48,10,69, 48,10,49,48,10,48,56,10,55,56,10,48,56,10,49,48, 10,69,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,69,68,10,69,78,67,79,68,73,78,71,32,49,50,54, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,53,48,10,53,48,10,48,48,10,70,48, 10,48,56,10,51,56,10,48,56,10,48,56,10,70,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,69,69,10, 69,78,67,79,68,73,78,71,32,49,50,54,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,56,10,48,48,10,56,56,10,56,56,10,57,56,10, 54,56,10,48,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,69,70,10,69,78,67,79, 68,73,78,71,32,49,50,54,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 70,56,10,48,48,10,56,56,10,56,56,10,56,56,10,57, 56,10,54,56,10,48,56,10,56,56,10,55,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,70,48,10,69,78,67,79,68,73,78,71, 32,49,50,54,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,53,48,10,53,48,10,48,48,10,56, 56,10,56,56,10,57,56,10,54,56,10,48,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,70,49,10,69,78,67,79,68,73,78,71,32,49,50,54, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,53,48,10,53,48,10,48,48,10,56,56, 10,56,56,10,56,56,10,57,56,10,54,56,10,48,56,10, 56,56,10,55,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,70,50,10, 69,78,67,79,68,73,78,71,32,49,50,54,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,52,56, 10,57,48,10,48,48,10,56,56,10,56,56,10,57,56,10, 54,56,10,48,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,70,51,10,69,78,67,79, 68,73,78,71,32,49,50,54,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,56,10, 57,48,10,48,48,10,56,56,10,56,56,10,56,56,10,57, 56,10,54,56,10,48,56,10,56,56,10,55,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,70,52,10,69,78,67,79,68,73,78,71, 32,49,50,54,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,53,48,10,53,48,10,48,48,10,56, 56,10,56,56,10,56,56,10,55,56,10,48,56,10,48,56, 10,48,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,70,53,10,69,78,67,79,68,73,78,71,32,49,50,54, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,53,48,10,53,48,10,48,48,10,56,56, 10,56,56,10,56,56,10,55,56,10,48,56,10,48,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,70,56,10, 69,78,67,79,68,73,78,71,32,49,50,55,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,53,48, 10,53,48,10,48,48,10,56,56,10,56,56,10,69,56,10, 57,56,10,57,56,10,57,56,10,69,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,70,57,10,69,78,67,79, 68,73,78,71,32,49,50,55,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,53,48,10, 53,48,10,48,48,10,56,56,10,56,56,10,69,56,10,57, 56,10,57,56,10,69,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,48,48,10,69,78,67,79,68,73,78,71, 32,49,50,56,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,56,10,48,56,10,48, 56,10,55,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,55,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,48,49,10,69,78,67,79,68,73,78,71,32,49,50,56, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,56,10,48,56,10,48,56,10,51,56, 10,52,56,10,52,56,10,52,56,10,52,56,10,51,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,48,50,10, 69,78,67,79,68,73,78,71,32,49,50,56,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,50,48,10,50,48,10,50,48,10,54,48,10,65,48,10, 65,56,10,65,56,10,65,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,48,51,10,69,78,67,79, 68,73,78,71,32,49,50,56,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,54,48,10,65,48,10,65, 56,10,65,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,48,52,10,69,78,67,79,68,73,78,71, 32,49,50,56,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,52,48,10,65,48,10,50, 48,10,50,48,10,50,48,10,52,56,10,50,56,10,50,56, 10,49,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,48,53,10,69,78,67,79,68,73,78,71,32,49,50,56, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,67,48, 10,50,48,10,50,48,10,52,56,10,50,56,10,49,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,48,54,10, 69,78,67,79,68,73,78,71,32,49,50,56,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,54,48,10,57,48,10,49,48,10,49,48,10,49,48,10, 54,48,10,49,48,10,49,48,10,49,48,10,48,56,10,48, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,48,55,10,69,78,67,79, 68,73,78,71,32,49,50,56,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,48,10,49,48,10,49,48,10,54, 48,10,49,48,10,49,48,10,48,56,10,48,56,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,48,56,10,69,78,67,79,68,73,78,71, 32,49,50,56,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,54,48,10,65,48,10,65, 48,10,65,48,10,65,48,10,65,56,10,65,56,10,65,56, 10,57,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,48,57,10,69,78,67,79,68,73,78,71,32,49,50,56, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,54,48, 10,65,48,10,65,48,10,65,56,10,65,56,10,57,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,48,65,10, 69,78,67,79,68,73,78,71,32,49,50,57,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,65,48,10,65,48,10,65,48,10,65,48,10,69,48,10, 65,56,10,65,56,10,65,56,10,57,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,48,66,10,69,78,67,79, 68,73,78,71,32,49,50,57,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,65,48,10,65,48,10,69,48,10,65, 56,10,65,56,10,57,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,48,67,10,69,78,67,79,68,73,78,71, 32,49,50,57,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 48,10,56,48,10,56,48,10,57,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,48,68,10,69,78,67,79,68,73,78,71,32,49,50,57, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,55,48, 10,56,56,10,56,48,10,57,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,48,69,10, 69,78,67,79,68,73,78,71,32,49,50,57,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,56,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,56,10,50,56,10,50,56,10,49,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,48,70,10,69,78,67,79, 68,73,78,71,32,49,50,57,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,70,56,10,50,48,10,50,48,10,50, 56,10,50,56,10,49,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,51,49,10,69,78,67,79,68,73,78,71, 32,49,51,50,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,65,48,10,65,48,10,65, 48,10,65,48,10,65,48,10,65,48,10,65,48,10,66,48, 10,52,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,51,50,10,69,78,67,79,68,73,78,71,32,49,51,51, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,55,48,10,56,56,10,56,56,10,56,48, 10,70,48,10,56,56,10,56,48,10,56,48,10,56,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,51,51,10, 69,78,67,79,68,73,78,71,32,49,51,51,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,52,48,10,65,48,10,65,48,10,65,48,10,55,48,10, 50,56,10,50,48,10,50,48,10,50,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,51,52,10,69,78,67,79, 68,73,78,71,32,49,51,51,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,48,10, 65,48,10,65,48,10,50,48,10,51,48,10,50,56,10,50, 48,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,51,53,10,69,78,67,79,68,73,78,71, 32,49,51,51,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,56,48,10,56,48,10,70, 48,10,56,56,10,56,48,10,56,48,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,51,54,10,69,78,67,79,68,73,78,71,32,49,51,51, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,54,48,10,57,48,10,57,48,10,57,48, 10,55,48,10,49,48,10,65,48,10,70,48,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,51,55,10, 69,78,67,79,68,73,78,71,32,49,51,51,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,56,48,10,56,48,10,56,48,10,70,48,10,56,56,10, 56,48,10,56,48,10,56,48,10,55,48,10,48,56,10,49, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,51,56,10,69,78,67,79, 68,73,78,71,32,49,51,51,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,54,48,10, 57,48,10,57,48,10,56,48,10,56,48,10,56,48,10,56, 48,10,56,48,10,70,48,10,48,56,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,51,57,10,69,78,67,79,68,73,78,71, 32,49,51,51,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,54,48,10,57,48,10,57, 48,10,66,56,10,68,48,10,68,48,10,65,48,10,56,48, 10,56,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,51,65,10,69,78,67,79,68,73,78,71,32,49,51,51, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,49,48,10,49,48,10,49,48,10,49,48, 10,55,56,10,57,48,10,57,48,10,57,48,10,54,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,51,66,10, 69,78,67,79,68,73,78,71,32,49,51,51,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,56,48,10,56,48,10,56,48,10,70,48,10,56,56,10, 56,56,10,56,48,10,56,48,10,56,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,51,67,10,69,78,67,79, 68,73,78,71,32,49,51,52,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,56,48,10, 56,48,10,56,48,10,56,48,10,56,48,10,56,48,10,56, 48,10,56,48,10,55,48,10,48,56,10,49,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,51,68,10,69,78,67,79,68,73,78,71, 32,49,51,52,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,56,48,10,56,48,10,69, 56,10,65,56,10,65,56,10,57,48,10,56,48,10,56,48, 10,56,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,51,69,10,69,78,67,79,68,73,78,71,32,49,51,52, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,70,56,10,55,48,10,56,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,51,70,10, 69,78,67,79,68,73,78,71,32,49,51,52,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,56,48,10,56,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,55,56,10,48,56,10,48,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,52,48,10,69,78,67,79, 68,73,78,71,32,49,51,52,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,49,48,10, 50,48,10,49,48,10,50,48,10,52,48,10,56,48,10,67, 48,10,51,48,10,48,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,52,49,10,69,78,67,79,68,73,78,71, 32,49,51,52,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,51,48,10,52,56,10,52, 56,10,52,56,10,51,56,10,48,56,10,55,48,10,57,48, 10,54,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,52,50,10,69,78,67,79,68,73,78,71,32,49,51,52, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,52,48,10,65,48,10,65,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,51,48,10, 48,56,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,52,51,10, 69,78,67,79,68,73,78,71,32,49,51,52,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,50,48,10,49,48,10,49,48,10,69,48,10,53,48,10, 53,48,10,56,56,10,56,56,10,70,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,52,52,10,69,78,67,79, 68,73,78,71,32,49,51,52,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,66,56,10, 65,56,10,65,48,10,65,48,10,65,48,10,65,48,10,65, 48,10,65,48,10,52,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,52,53,10,69,78,67,79,68,73,78,71, 32,49,51,52,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 56,10,50,56,10,51,48,10,50,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,52,54,10,69,78,67,79,68,73,78,71,32,49,51,53, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,52,48,10,56,48,10,67,48,10,52,48, 10,52,48,10,52,48,10,52,48,10,52,56,10,51,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,52,55,10, 69,78,67,79,68,73,78,71,32,49,51,53,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,56,10,70,48,10,52,48,10,56,48,10,56,56,10, 56,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,52,56,10,69,78,67,79, 68,73,78,71,32,49,51,53,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,55,48,10, 56,56,10,56,56,10,56,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,52,57,10,69,78,67,79,68,73,78,71, 32,49,51,53,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 56,10,56,56,10,55,56,10,49,48,10,49,48,10,50,48, 10,70,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,52,65,10,69,78,67,79,68,73,78,71,32,49,51,53, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,55,48,10,65,56,10,65,56,10,65,56, 10,50,56,10,50,56,10,48,56,10,48,56,10,48,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,52,66,10, 69,78,67,79,68,73,78,71,32,49,51,53,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,54,48,10,57,48,10,57,48,10,57,48,10,53,48,10, 51,48,10,65,48,10,70,48,10,56,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,52,67,10,69,78,67,79, 68,73,78,71,32,49,51,53,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,48,10, 65,48,10,65,48,10,66,48,10,65,56,10,65,56,10,65, 48,10,65,48,10,65,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,52,68,10,69,78,67,79,68,73,78,71, 32,49,51,53,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,56,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,52,69,10,69,78,67,79,68,73,78,71,32,49,51,53, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,50,48,10,50,48,10,65,48,10,65,48, 10,65,48,10,65,48,10,54,48,10,50,48,10,51,48,10, 48,56,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,52,70,10, 69,78,67,79,68,73,78,71,32,49,51,53,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,48,10,56,56,10,56,48,10,56,48,10,55,48,10, 48,56,10,48,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,53,48,10,69,78,67,79, 68,73,78,71,32,49,51,54,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,55,48,10, 56,56,10,56,56,10,56,48,10,56,48,10,56,48,10,56, 48,10,56,48,10,56,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,53,49,10,69,78,67,79,68,73,78,71, 32,49,51,54,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 56,10,55,48,10,56,56,10,48,56,10,48,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,53,50,10,69,78,67,79,68,73,78,71,32,49,51,54, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,48,10,56,48,10,56,48,10,69,48, 10,57,48,10,57,48,10,56,56,10,56,48,10,56,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,53,51,10, 69,78,67,79,68,73,78,71,32,49,51,54,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,50,48,10,55,48,10,65,56,10,65,56,10,65,56,10, 65,56,10,55,48,10,50,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,53,52,10,69,78,67,79, 68,73,78,71,32,49,51,54,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,49,48,10, 50,56,10,50,56,10,51,48,10,65,48,10,55,48,10,50, 56,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,53,53,10,69,78,67,79,68,73,78,71, 32,49,51,54,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,53,54,10,69,78,67,79,68,73,78,71,32,49,51,54, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,52,48,10,65,48,10,65,48,10,55,48, 10,50,56,10,50,56,10,65,56,10,65,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,53,57,10, 69,78,67,79,68,73,78,71,32,49,51,54,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,50,48, 10,52,48,10,52,48,10,50,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,53,65,10,69,78,67,79, 68,73,78,71,32,49,51,55,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,51,48,10, 49,48,10,50,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,53,66,10,69,78,67,79,68,73,78,71, 32,49,51,55,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,49,48,10,50,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,53,67,10,69,78,67,79,68,73,78,71,32,49,51,55, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,56,10,55,48,10,56,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,53,68,10, 69,78,67,79,68,73,78,71,32,49,51,55,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,50,48,10,49,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,53,69,10,69,78,67,79, 68,73,78,71,32,49,51,55,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,55,48,10, 56,56,10,65,56,10,65,56,10,57,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,53,70,10,69,78,67,79,68,73,78,71, 32,49,51,55,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,67,48,10,56,56,10,55, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,54,49,10,69,78,67,79,68,73,78,71,32,49,51,55, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,56,56, 10,65,56,10,65,56,10,65,56,10,65,56,10,53,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,54,50,10, 69,78,67,79,68,73,78,71,32,49,51,55,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,70,48,10,56,56,10, 56,56,10,56,56,10,56,48,10,70,56,10,56,48,10,56, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,54,51,10,69,78,67,79, 68,73,78,71,32,49,51,55,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,55,48,10,57,48,10,57,48,10,57, 48,10,57,48,10,55,56,10,49,48,10,49,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,54,52,10,69,78,67,79,68,73,78,71, 32,49,51,56,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,65,48,10,68,48,10,57,48,10,57,48,10,57,48, 10,57,56,10,49,48,10,49,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,54,53,10,69,78,67,79,68,73,78,71,32,49,51,56, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,48,10,56,48,10,56,48,10,70,56, 10,56,48,10,56,56,10,56,56,10,67,56,10,66,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,54,54,10, 69,78,67,79,68,73,78,71,32,49,51,56,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,55,48,10,57,48,10, 57,48,10,57,48,10,57,48,10,55,48,10,49,48,10,49, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,54,55,10,69,78,67,79, 68,73,78,71,32,49,51,56,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,56,48,10, 56,48,10,70,56,10,56,48,10,56,48,10,56,48,10,56, 48,10,56,48,10,55,48,10,48,56,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,54,56,10,69,78,67,79,68,73,78,71, 32,49,51,56,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,66,48,10,67,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,48,10,70,56,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,54,57,10,69,78,67,79,68,73,78,71,32,49,51,56, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,65,48, 10,68,48,10,57,48,10,66,56,10,68,48,10,65,48,10, 56,48,10,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,54,65,10, 69,78,67,79,68,73,78,71,32,49,51,56,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,49,48,10,49,48,10,49,48,10,55,56,10,57,48,10, 57,48,10,57,48,10,57,48,10,54,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,54,66,10,69,78,67,79, 68,73,78,71,32,49,51,56,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,56,48,10, 56,48,10,56,48,10,65,48,10,68,48,10,57,48,10,57, 48,10,57,48,10,57,48,10,56,48,10,56,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,54,67,10,69,78,67,79,68,73,78,71, 32,49,51,56,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,67,48,10,52,48,10,52,48,10,52,48,10,52,48, 10,52,48,10,52,48,10,51,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,54,68,10,69,78,67,79,68,73,78,71,32,49,51,56, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,48,10,56,48,10,56,48,10,69,56, 10,65,56,10,65,56,10,65,56,10,65,56,10,57,48,10, 56,48,10,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,54,69,10, 69,78,67,79,68,73,78,71,32,49,51,57,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,56,48,10,52,48,10,50,48,10,55,56,10, 57,48,10,57,48,10,57,48,10,54,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,54,70,10,69,78,67,79, 68,73,78,71,32,49,51,57,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,56,48,10, 56,48,10,56,48,10,56,48,10,56,56,10,56,56,10,56, 56,10,56,56,10,55,56,10,48,56,10,48,56,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,55,48,10,69,78,67,79,68,73,78,71, 32,49,51,57,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,56,48,10,56,48,10,56, 48,10,66,48,10,67,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,55,49,10,69,78,67,79,68,73,78,71,32,49,51,57, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,50,48,10,52,48,10,50,48,10,55,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,55,50,10, 69,78,67,79,68,73,78,71,32,49,51,57,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,65,48,10,68,48,10, 57,48,10,57,48,10,57,48,10,57,48,10,49,48,10,49, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,55,51,10,69,78,67,79, 68,73,78,71,32,49,51,57,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,51,48,10, 52,56,10,52,48,10,70,56,10,52,56,10,52,56,10,52, 56,10,53,56,10,50,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,55,52,10,69,78,67,79,68,73,78,71, 32,49,51,57,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,56,10,49,48,10,49, 48,10,57,48,10,57,48,10,57,48,10,57,48,10,66,48, 10,53,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,55,53,10,69,78,67,79,68,73,78,71,32,49,51,57, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,49,56, 10,48,56,10,48,56,10,48,56,10,48,56,10,56,56,10, 56,56,10,55,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,55,54,10, 69,78,67,79,68,73,78,71,32,49,51,57,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,48,10,56,56,10,56,48,10,57,56,10,56,56,10, 56,56,10,56,56,10,57,56,10,54,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,55,55,10,69,78,67,79, 68,73,78,71,32,49,51,57,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,51,48,10,52,56,10,48,56,10,48, 56,10,49,48,10,50,48,10,52,48,10,51,56,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,55,56,10,69,78,67,79,68,73,78,71, 32,49,52,48,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,66,48,10,67,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,55,57,10,69,78,67,79,68,73,78,71,32,49,52,48, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,50,48,10,52,48,10,50,48,10,50,48, 10,52,48,10,52,48,10,56,48,10,56,48,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,55,65,10, 69,78,67,79,68,73,78,71,32,49,52,48,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,56,56,10,65,56,10, 65,56,10,65,56,10,65,56,10,53,56,10,48,56,10,48, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,55,66,10,69,78,67,79, 68,73,78,71,32,49,52,48,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,53,48,10,50,48,10,52,48,10,51,56,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,55,67,10,69,78,67,79,68,73,78,71, 32,49,52,48,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,65,48,10,68,48,10,57,48,10,57,48,10,57,48, 10,57,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,55,68,10,69,78,67,79,68,73,78,71,32,49,52,48, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,57,56,10,54,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,55,69,10, 69,78,67,79,68,73,78,71,32,49,52,48,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,49,48,10,49,48,10,49,48,10,57,48,10,57,48,10, 57,48,10,57,48,10,57,48,10,55,48,10,49,48,10,49, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,55,70,10,69,78,67,79, 68,73,78,71,32,49,52,48,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,66,48,10,65,56,10,65,56,10,65, 56,10,65,56,10,54,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,56,48,10,69,78,67,79,68,73,78,71, 32,49,52,48,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,66, 48,10,67,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,48,10,56,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,56,49,10,69,78,67,79,68,73,78,71,32,49,52,48, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,55,48, 10,56,56,10,56,56,10,56,56,10,55,56,10,48,56,10, 56,56,10,55,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,56,50,10, 69,78,67,79,68,73,78,71,32,49,52,49,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,54,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,49,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,56,51,10,69,78,67,79, 68,73,78,71,32,49,52,49,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,50,48,10, 50,48,10,50,48,10,66,48,10,65,56,10,65,56,10,65, 56,10,65,56,10,54,56,10,50,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,56,52,10,69,78,67,79,68,73,78,71, 32,49,52,49,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,49,56,10,50,48,10,50, 48,10,70,56,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,56,53,10,69,78,67,79,68,73,78,71,32,49,52,49, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,55,48, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,56,54,10, 69,78,67,79,68,73,78,71,32,49,52,49,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,54,48,10,65,48,10,65,48,10,55,48,10,50,56,10, 65,56,10,65,56,10,65,56,10,55,48,10,50,48,10,50, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,56,55,10,69,78,67,79, 68,73,78,71,32,49,52,49,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,56,48,10, 56,48,10,56,48,10,57,48,10,57,48,10,57,48,10,57, 48,10,57,48,10,54,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,56,57,10,69,78,67,79,68,73,78,71, 32,49,52,49,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,51, 48,10,51,48,10,48,48,10,51,48,10,51,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,56,65,10,69,78,67,79,68,73,78,71,32,49,52,49, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,52,48, 10,51,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,57,49,10, 69,78,67,79,68,73,78,71,32,49,52,50,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,50,48,10,53, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,57,50,10,69,78,67,79, 68,73,78,71,32,49,52,50,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,50,48,10, 56,56,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,57,51,10,69,78,67,79,68,73,78,71, 32,49,52,50,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,49,48,10,50,48,10,49,48,10,50,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,57,52,10,69,78,67,79,68,73,78,71,32,49,52,50, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,50,48,10,48,48,10,50,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,57,53,10, 69,78,67,79,68,73,78,71,32,49,52,50,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,53,48, 10,52,48,10,53,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,57,54,10,69,78,67,79, 68,73,78,71,32,49,52,51,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,50,48,10,49,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,57,55,10,69,78,67,79,68,73,78,71, 32,49,52,51,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,50,48,10,55,48,10,50,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,57,56,10,69,78,67,79,68,73,78,71,32,49,52,51, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,52,56,10,65,56,10,57,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,57,57,10, 69,78,67,79,68,73,78,71,32,49,52,51,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,56,48, 10,52,48,10,52,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,57,65,10,69,78,67,79, 68,73,78,71,32,49,52,51,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,52,10,48,56,10,48,52,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,57,67,10,69,78,67,79,68,73,78,71, 32,49,52,51,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,50,48,10,50,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,57,68,10,69,78,67,79,68,73,78,71,32,49,52,51, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,52,10,48,56,10,48,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,57,69,10, 69,78,67,79,68,73,78,71,32,49,52,51,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,49,48,10,50,52, 10,50,56,10,50,56,10,48,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,57,70,10,69,78,67,79, 68,73,78,71,32,49,52,51,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,53,48,10,65,56,10, 53,48,10,53,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,65,48,10,69,78,67,79,68,73,78,71, 32,49,52,52,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,48,10,50,56,10,49,48,10,49, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,65,49,10,69,78,67,79,68,73,78,71,32,49,52,52, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,53,48,10,68,48,10,50,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,65,51,10, 69,78,67,79,68,73,78,71,32,49,52,52,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,49,48,10,55, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,65,52,10,69,78,67,79, 68,73,78,71,32,49,52,52,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,50,48,10,52,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,65,53,10,69,78,67,79,68,73,78,71, 32,49,52,52,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,49,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,65,54,10,69,78,67,79,68,73,78,71,32,49,52,52, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 52,56,10,57,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,65,56,10, 69,78,67,79,68,73,78,71,32,49,52,52,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,52,48, 10,50,48,10,50,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,65,57,10,69,78,67,79, 68,73,78,71,32,49,52,52,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,52,48,10,65,48,10, 52,48,10,52,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,65,65,10,69,78,67,79,68,73,78,71, 32,49,52,53,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,53,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,65,66,10,69,78,67,79,68,73,78,71,32,49,52,53, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,50,48,10,52,48,10,50,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,65,67,10, 69,78,67,79,68,73,78,71,32,49,52,53,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,49,48, 10,49,48,10,55,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,65,68,10,69,78,67,79, 68,73,78,71,32,49,52,53,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,56,10,48,52,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,65,70,10,69,78,67,79,68,73,78,71, 32,49,52,53,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,50,48,10,53,48,10,50,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 53,55,55,57,57,10,69,78,67,79,68,73,78,71,32,49, 52,53,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,50, 48,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,53,55, 56,48,49,10,69,78,67,79,68,73,78,71,32,49,52,53, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,65,56,10, 48,48,10,52,56,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,56,48, 48,10,69,78,67,79,68,73,78,71,32,49,52,53,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,56,10,69,48, 10,48,56,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,53,55,56,48,50,10, 69,78,67,79,68,73,78,71,32,49,52,53,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,56,10,69,48,10,52, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,53,55,55,57,51,10,69,78, 67,79,68,73,78,71,32,49,52,54,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,53,55,55,57,52,10,69,78,67,79, 68,73,78,71,32,49,52,54,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,53,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,53,55,55,57,53,10,69,78,67,79,68,73, 78,71,32,49,52,54,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,56,56,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,53,55,55,57,56,10,69,78,67,79,68,73,78,71, 32,49,52,54,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,55,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 53,55,55,57,55,10,69,78,67,79,68,73,78,71,32,49, 52,54,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,53,55, 56,48,54,10,69,78,67,79,68,73,78,71,32,49,52,54, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,52,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,55,57, 54,10,69,78,67,79,68,73,78,71,32,49,52,54,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,56,48,10,50,48, 10,48,56,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,53,55,56,48,55,10, 69,78,67,79,68,73,78,71,32,49,52,54,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 50,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,53,55,56,51,57,10,69,78, 67,79,68,73,78,71,32,49,52,54,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,50,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,53,55,54,52,53,10,69,78,67,79, 68,73,78,71,32,49,52,55,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,55,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,53,55,56,52,49,10,69,78,67,79,68,73, 78,71,32,49,52,55,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,55,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,53,55,56,52,50,10,69,78,67,79,68,73,78,71, 32,49,52,55,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 53,55,56,48,52,10,69,78,67,79,68,73,78,71,32,49, 52,55,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,56,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,53,55, 56,48,51,10,69,78,67,79,68,73,78,71,32,49,52,55, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,56,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,54,53, 56,10,69,78,67,79,68,73,78,71,32,49,52,55,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,50,48,10,50, 48,10,48,48,10,48,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,53,67,52,10,69,78, 67,79,68,73,78,71,32,49,52,55,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,50,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,53,55,54,54,52,10,69,78,67,79, 68,73,78,71,32,49,52,56,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,57,48,10,52,56,10,54,56,10,57, 48,10,56,56,10,67,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,53,55,54,54,53,10,69,78,67,79,68,73, 78,71,32,49,52,56,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,48,10,49,48,10,49,48,10,49,48,10, 49,48,10,70,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,53,55,54,54,54,10,69,78,67,79,68,73,78,71, 32,49,52,57,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,52,48,10,50,48,10,49,48,10,49,48,10,50,56, 10,52,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 53,55,54,54,55,10,69,78,67,79,68,73,78,71,32,49, 52,57,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,56,10,49,48,10,49,48,10,49,48,10,49,48,10,49, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,53,55, 54,54,56,10,69,78,67,79,68,73,78,71,32,49,52,57, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,70,56, 10,48,56,10,48,56,10,56,56,10,56,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,54,54, 57,10,69,78,67,79,68,73,78,71,32,49,52,57,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,51,48,10,49, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,53,55,54,55,48,10, 69,78,67,79,68,73,78,71,32,49,52,57,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,70,56,10,50,48,10, 50,48,10,49,48,10,49,48,10,49,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,53,55,54,55,49,10,69,78, 67,79,68,73,78,71,32,49,52,57,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,56,10,52,56,10,52,56, 10,52,56,10,52,56,10,52,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,53,55,54,55,50,10,69,78,67,79, 68,73,78,71,32,49,52,57,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,57,56,10,65,56,10,65,56,10,56, 56,10,56,56,10,70,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,53,55,54,55,51,10,69,78,67,79,68,73, 78,71,32,49,52,57,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,51,48,10,49,48,10,49,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,53,55,54,55,52,10,69,78,67,79,68,73,78,71, 32,49,52,57,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,70,56,10,48,56,10,48,56,10,48,56,10,48,56, 10,48,56,10,48,56,10,48,56,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 53,55,54,55,53,10,69,78,67,79,68,73,78,71,32,49, 52,57,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,56,10,48,56,10,48,56,10,48,56,10,48,56,10,70, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,53,55, 54,55,54,10,69,78,67,79,68,73,78,71,32,49,53,48, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,48,10,56,48,10,56,48,10,70,56, 10,48,56,10,48,56,10,48,56,10,49,48,10,54,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,54,55, 55,10,69,78,67,79,68,73,78,71,32,49,53,48,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,70,56,10,52, 56,10,52,56,10,52,56,10,52,56,10,55,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,53,55,54,55,56,10, 69,78,67,79,68,73,78,71,32,49,53,48,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,57,48,10,65,56,10, 52,56,10,56,56,10,56,56,10,66,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,53,55,54,55,57,10,69,78, 67,79,68,73,78,71,32,49,53,48,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,51,48,10,49,48,10,49,48, 10,49,48,10,49,48,10,49,48,10,49,48,10,49,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,53,55,54,56,48,10,69,78,67,79, 68,73,78,71,32,49,53,48,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,49,56,10,48,56,10,48,56,10,48, 56,10,48,56,10,55,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,53,55,54,56,49,10,69,78,67,79,68,73, 78,71,32,49,53,48,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,56,10,52,56,10,52,56,10,52,56,10, 53,48,10,54,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,53,55,54,56,50,10,69,78,67,79,68,73,78,71, 32,49,53,48,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,68,56,10,52,56,10,52,56,10,52,56,10,52,56, 10,70,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 53,55,54,56,51,10,69,78,67,79,68,73,78,71,32,49, 53,48,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,56,10,52,56,10,52,56,10,52,56,10,48,56,10,48, 56,10,48,56,10,48,56,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,53,55, 54,56,52,10,69,78,67,79,68,73,78,71,32,49,53,48, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,70,56, 10,52,56,10,52,56,10,48,56,10,48,56,10,70,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,54,56, 53,10,69,78,67,79,68,73,78,71,32,49,53,48,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,57,48,10,52, 56,10,52,56,10,53,48,10,54,48,10,52,48,10,52,48, 10,52,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,53,55,54,56,54,10, 69,78,67,79,68,73,78,71,32,49,53,49,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,57,48,10,52,56,10, 50,56,10,49,48,10,48,56,10,70,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,53,55,54,56,55,10,69,78, 67,79,68,73,78,71,32,49,53,49,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,56,10,48,56,10,56,56, 10,56,56,10,56,56,10,66,48,10,56,48,10,56,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,53,55,54,56,56,10,69,78,67,79, 68,73,78,71,32,49,53,49,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,70,48,10,48,56,10,48,56,10,48, 56,10,48,56,10,48,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,53,55,54,56,57,10,69,78,67,79,68,73, 78,71,32,49,53,49,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,65,56,10,65,56,10,65,56,10,69,56,10, 56,56,10,70,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,53,55,54,57,48,10,69,78,67,79,68,73,78,71, 32,49,53,49,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,70,56,10,52,56,10,52,56,10,52,56,10,52,56, 10,67,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 53,55,55,49,54,10,69,78,67,79,68,73,78,71,32,49, 53,50,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 68,56,10,52,56,10,52,56,10,52,56,10,52,56,10,52, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,53,55, 55,49,55,10,69,78,67,79,68,73,78,71,32,49,53,50, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,68,56, 10,52,56,10,52,56,10,48,56,10,48,56,10,48,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,55,49, 56,10,69,78,67,79,68,73,78,71,32,49,53,50,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,68,56,10,52, 56,10,52,56,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,53,70,51,10,69,78, 67,79,68,73,78,71,32,49,53,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,49,48,10,50,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,53,70,52,10,69,78,67,79,68,73, 78,71,32,49,53,50,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,52,56,10,57,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,48,49,10,69,78,67,79,68,73,78,71,32,51, 53,56,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,48,10,56,56,10,67,56,10,52,56,10,52,56,10,52, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,48, 50,10,69,78,67,79,68,73,78,71,32,51,53,56,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,54,56,10,54, 56,10,50,56,10,52,56,10,52,56,10,51,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,48,51,10,69,78, 67,79,68,73,78,71,32,51,53,56,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,65,56,10,69,56,10,50,56, 10,52,56,10,52,56,10,51,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,48,52,10,69,78,67,79,68,73, 78,71,32,51,53,56,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,48,10,56,56,10,69,56,10,69,56,10, 67,56,10,52,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,48,53,10,69,78,67,79,68,73,78,71,32,51, 53,56,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 53,48,10,65,56,10,69,56,10,69,56,10,67,56,10,52, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,48, 54,10,69,78,67,79,68,73,78,71,32,51,53,57,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,65,56,10,69, 56,10,50,56,10,52,56,10,69,56,10,68,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,48,55,10,69,78, 67,79,68,73,78,71,32,51,53,57,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,51,48,10,51,48,10,49,48, 10,57,48,10,53,48,10,51,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,48,56,10,69,78,67,79,68,73, 78,71,32,51,53,57,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,48,10,56,56,10,54,56,10,54,56,10, 50,56,10,51,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,48,57,10,69,78,67,79,68,73,78,71,32,51, 53,57,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,48,10,49,48,10,68,48,10,68,48,10,55,56,10,53, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,48, 65,10,69,78,67,79,68,73,78,71,32,51,53,57,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,49,48,10,68,48,10,69, 48,10,53,48,10,57,48,10,57,48,10,54,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,48,66,10,69,78, 67,79,68,73,78,71,32,51,53,57,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,56,10,65,56,10,70,48,10,50,56, 10,52,56,10,52,56,10,51,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,48,67,10,69,78,67,79,68,73, 78,71,32,51,53,57,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,54,56,10,65,56,10,54,56,10,65,56,10, 70,56,10,69,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,48,68,10,69,78,67,79,68,73,78,71,32,51, 53,57,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 54,56,10,65,56,10,54,56,10,66,56,10,69,48,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,48, 69,10,69,78,67,79,68,73,78,71,32,51,53,57,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,48,10,56, 56,10,52,56,10,52,56,10,67,56,10,68,56,10,51,56, 10,52,56,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,48,70,10,69,78, 67,79,68,73,78,71,32,51,53,57,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,48,10,56,56,10,52,56, 10,52,56,10,67,56,10,68,56,10,65,56,10,53,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,49,48,10,69,78,67,79,68,73, 78,71,32,51,54,48,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,56,10,56,48,10,55,48,10,54,56,10, 54,56,10,49,56,10,65,56,10,53,56,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,49,49,10,69,78,67,79,68,73,78,71,32,51, 54,48,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 65,56,10,70,56,10,50,56,10,52,56,10,52,56,10,52, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,49, 50,10,69,78,67,79,68,73,78,71,32,51,54,48,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,65,56,10,69, 56,10,65,56,10,65,56,10,70,56,10,69,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,49,51,10,69,78, 67,79,68,73,78,71,32,51,54,48,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,54,56,10,65,56,10,54,56, 10,66,48,10,66,56,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,49,52,10,69,78,67,79,68,73, 78,71,32,51,54,48,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,48,10,56,56,10,69,56,10,69,56,10, 65,56,10,52,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,49,53,10,69,78,67,79,68,73,78,71,32,51, 54,48,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 53,48,10,65,56,10,69,56,10,69,56,10,65,56,10,52, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,49, 54,10,69,78,67,79,68,73,78,71,32,51,54,48,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,48,10,56, 56,10,67,56,10,52,56,10,54,56,10,54,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,49,55,10,69,78, 67,79,68,73,78,71,32,51,54,48,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,68,48,10,69,56,10,52,56, 10,52,56,10,52,56,10,52,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,49,56,10,69,78,67,79,68,73, 78,71,32,51,54,48,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,56,10,56,48,10,70,48,10,52,56,10, 52,56,10,51,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,49,57,10,69,78,67,79,68,73,78,71,32,51, 54,48,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 68,48,10,68,48,10,53,48,10,57,48,10,66,56,10,53, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,49, 65,10,69,78,67,79,68,73,78,71,32,51,54,49,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,67,56,10,67, 56,10,52,56,10,52,56,10,52,56,10,51,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,49,66,10,69,78, 67,79,68,73,78,71,32,51,54,49,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,56,10,48,56,10,67,56,10,67,56,10,52,56, 10,52,56,10,52,56,10,51,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,49,67,10,69,78,67,79,68,73, 78,71,32,51,54,49,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,67,56,10,67,56,10,56,56,10,65,56,10, 65,56,10,53,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,49,68,10,69,78,67,79,68,73,78,71,32,51, 54,49,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,56,10,48,56,10, 67,56,10,67,56,10,56,56,10,65,56,10,65,56,10,53, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,49, 69,10,69,78,67,79,68,73,78,71,32,51,54,49,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,67,56,10,67, 56,10,52,56,10,65,56,10,65,56,10,53,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,49,70,10,69,78, 67,79,68,73,78,71,32,51,54,49,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,56,10,48,56,10,67,56,10,67,56,10,52,56, 10,65,56,10,65,56,10,53,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,50,48,10,69,78,67,79,68,73, 78,71,32,51,54,49,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,48,10,56,56,10,67,56,10,52,56,10, 67,56,10,67,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,50,49,10,69,78,67,79,68,73,78,71,32,51, 54,49,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 67,56,10,67,56,10,52,56,10,52,56,10,69,56,10,68, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,50, 50,10,69,78,67,79,68,73,78,71,32,51,54,49,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,67,56,10,67, 56,10,56,56,10,54,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,50,51,10,69,78, 67,79,68,73,78,71,32,51,54,49,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,48,10,56,56,10,69,48, 10,49,48,10,51,48,10,51,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,50,52,10,69,78,67,79,68,73, 78,71,32,51,54,50,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,48,10,56,56,10,67,56,10,52,56,10, 54,56,10,54,56,10,48,56,10,48,56,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,50,53,10,69,78,67,79,68,73,78,71,32,51, 54,50,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,48,10,56,56,10,54,56,10,57,56,10,67,56,10,67, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,50, 54,10,69,78,67,79,68,73,78,71,32,51,54,50,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,48,10,56, 56,10,67,56,10,52,56,10,67,56,10,67,56,10,48,56, 10,48,56,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,50,55,10,69,78, 67,79,68,73,78,71,32,51,54,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,48,10,56,56,10,48,56, 10,48,56,10,49,56,10,49,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,50,56,10,69,78,67,79,68,73, 78,71,32,51,54,50,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,56, 10,48,56,10,55,48,10,56,56,10,69,56,10,69,56,10, 67,56,10,52,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,50,57,10,69,78,67,79,68,73,78,71,32,51, 54,50,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 68,48,10,68,48,10,55,48,10,66,56,10,57,48,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,50, 65,10,69,78,67,79,68,73,78,71,32,51,54,50,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,56,10,48,56,10,55,48,10,56, 56,10,54,56,10,57,56,10,67,56,10,67,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,50,66,10,69,78, 67,79,68,73,78,71,32,51,54,50,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,68,56,10,68,56,10,53,48, 10,54,56,10,52,56,10,52,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,50,67,10,69,78,67,79,68,73, 78,71,32,51,54,50,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,56, 10,48,56,10,68,48,10,67,56,10,52,56,10,65,56,10, 65,56,10,53,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,50,68,10,69,78,67,79,68,73,78,71,32,51, 54,50,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,48,10,48,56,10,67,56,10,67,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,50, 69,10,69,78,67,79,68,73,78,71,32,51,54,51,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,56,10,48,56,10,70,48,10,48, 56,10,67,56,10,67,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,50,70,10,69,78, 67,79,68,73,78,71,32,51,54,51,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,68,56,10,69,56,10,48,56, 10,48,56,10,48,56,10,49,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,51,48,10,69,78,67,79,68,73, 78,71,32,51,54,51,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,54,56,10,55,48,10,48,48,10, 54,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,51,49,10,69,78,67,79,68,73,78,71,32,51, 54,51,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,52,48,10,55,56,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,51, 50,10,69,78,67,79,68,73,78,71,32,51,54,51,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,48,10,56, 56,10,48,56,10,48,56,10,48,56,10,48,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,51,51,10,69,78, 67,79,68,73,78,71,32,51,54,51,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,67,48,10,67,48,10,51,48,10,52,56,10,48,56, 10,48,56,10,48,56,10,48,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,51,52,10,69,78,67,79,68,73, 78,71,32,51,54,51,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,55,56, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,51,53,10,69,78,67,79,68,73,78,71,32,51, 54,51,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,56,10,55,56,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,51, 54,10,69,78,67,79,68,73,78,71,32,51,54,51,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,49,56,10,55,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,51,55,10,69,78, 67,79,68,73,78,71,32,51,54,51,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 56,10,55,56,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,51,56,10,69,78,67,79,68,73, 78,71,32,51,54,52,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,49,56,10,48,56,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,51,57,10,69,78,67,79,68,73,78,71,32,51, 54,52,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,51,56,10,49,56,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,51, 65,10,69,78,67,79,68,73,78,71,32,51,54,52,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,49,56, 10,49,56,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,51,70,10,69,78, 67,79,68,73,78,71,32,51,54,52,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,50,48,10,70,48,10,65,56,10,65,56,10,70,48, 10,65,56,10,65,56,10,70,48,10,50,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,52,48,10,69,78,67,79,68,73, 78,71,32,51,54,52,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,52,48,10,52,48,10,52,48,10,52,48,10, 54,48,10,54,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,52,49,10,69,78,67,79,68,73,78,71,32,51, 54,52,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 57,48,10,57,48,10,57,48,10,57,48,10,68,56,10,68, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,52, 50,10,69,78,67,79,68,73,78,71,32,51,54,53,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,55,56,10,56,48,10,70,48,10,49, 48,10,49,48,10,49,48,10,49,56,10,49,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,52,51,10,69,78, 67,79,68,73,78,71,32,51,54,53,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,55,48,10,57,48,10,66,48,10,55,48,10,49,48, 10,49,48,10,49,56,10,49,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,52,52,10,69,78,67,79,68,73, 78,71,32,51,54,53,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,66,48, 10,53,48,10,49,48,10,49,48,10,49,48,10,49,48,10, 49,56,10,49,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,52,53,10,69,78,67,79,68,73,78,71,32,51, 54,53,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,48,10,56,56,10,48,56,10,48,56,10,48,56,10,48, 56,10,48,56,10,48,56,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,52, 54,10,69,78,67,79,68,73,78,71,32,51,54,53,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,56,10,68, 56,10,48,56,10,48,56,10,48,56,10,48,56,10,49,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,52,55,10,69,78, 67,79,68,73,78,71,32,51,54,53,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,55,56,10,54, 48,10,53,56,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,52,56,10,69,78,67,79,68,73, 78,71,32,51,54,53,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,56,10,48,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,52,57,10,69,78,67,79,68,73,78,71,32,51, 54,53,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,54,56,10,51,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,52, 65,10,69,78,67,79,68,73,78,71,32,51,54,53,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,53,52,10, 55,56,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,52,66,10,69,78, 67,79,68,73,78,71,32,51,54,53,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,49,48,10,51,56,10,49, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,52,67,10,69,78,67,79,68,73, 78,71,32,51,54,54,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,49,56,10,49,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,52,68,10,69,78,67,79,68,73,78,71,32,51, 54,54,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,49,56,10,49,56,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,52, 69,10,69,78,67,79,68,73,78,71,32,51,54,54,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 49,56,10,51,56,10,51,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,52,70,10,69,78, 67,79,68,73,78,71,32,51,54,54,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,55,48,10,56,56, 10,65,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,53,48,10,69,78,67,79,68,73, 78,71,32,51,54,54,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,55,48,10,56,56,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,53,49,10,69,78,67,79,68,73,78,71,32,51, 54,54,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,55,48,10,65,56,10,69,56,10,48,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,53, 50,10,69,78,67,79,68,73,78,71,32,51,54,54,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,56,48,10,56,48,10,65, 56,10,66,56,10,66,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,53,51,10,69,78, 67,79,68,73,78,71,32,51,54,54,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,53,48,10,65,56, 10,56,56,10,67,56,10,67,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,53,52,10,69,78,67,79,68,73, 78,71,32,51,54,54,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,56,10,48,56,10,55,48,10,56,48,10,66,48,10, 66,48,10,55,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,53,53,10,69,78,67,79,68,73,78,71,32,51, 54,54,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,56,10, 54,56,10,55,48,10,56,48,10,66,48,10,66,48,10,55, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,53, 54,10,69,78,67,79,68,73,78,71,32,51,54,55,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,48,10,53, 48,10,50,56,10,48,56,10,54,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,53,55,10,69,78, 67,79,68,73,78,71,32,51,54,55,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,56,10,48,56,10,65,56,10,69,56, 10,65,56,10,65,56,10,68,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,53,56,10,69,78,67,79,68,73, 78,71,32,51,54,55,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,56,10,55,48,10,56,48,10,57,56,10, 65,56,10,68,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,53,57,10,69,78,67,79,68,73,78,71,32,51, 54,55,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,56,10, 48,56,10,51,48,10,54,48,10,65,48,10,68,48,10,67, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,53, 65,10,69,78,67,79,68,73,78,71,32,51,54,55,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,53,52,10,55, 52,10,49,52,10,49,52,10,49,52,10,50,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,53,66,10,69,78, 67,79,68,73,78,71,32,51,54,55,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,67,48,10,67,48,10,65,56, 10,66,48,10,65,48,10,52,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,68,48,10,69,78,67,79,68,73, 78,71,32,52,51,48,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,52,48,10,51,48,10,48,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,68,49,10,69,78,67,79,68,73,78,71,32,52, 51,48,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,52,48,10,54,48,10,50,48,10, 50,48,10,55,48,10,56,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,48,68, 50,10,69,78,67,79,68,73,78,71,32,52,51,48,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,52,48,10,65,48,10,65, 48,10,50,48,10,55,48,10,56,56,10,56,56,10,56,56, 10,55,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,48,68,51,10,69,78, 67,79,68,73,78,71,32,52,51,48,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,55,48,10,65,56, 10,65,56,10,57,48,10,56,48,10,54,48,10,49,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,68,52,10,69,78,67,79,68,73, 78,71,32,52,51,48,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,55,48,10,56,56,10,56,56,10,48,56,10,48,56,10, 48,56,10,56,56,10,56,56,10,55,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,68,53,10,69,78,67,79,68,73,78,71,32,52, 51,48,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,55,48,10, 56,56,10,56,56,10,51,48,10,48,56,10,48,56,10,56, 56,10,56,56,10,55,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,48,68, 54,10,69,78,67,79,68,73,78,71,32,52,51,49,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,52,48,10,65,48,10,65,56,10,55,48,10,51, 48,10,50,56,10,50,56,10,50,56,10,49,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,48,68,55,10,69,78, 67,79,68,73,78,71,32,52,51,49,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,53,48,10,65,56, 10,65,56,10,65,56,10,52,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,68,56,10,69,78,67,79,68,73, 78,71,32,52,51,49,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,55,48,10,56,56,10,56,56,10, 56,56,10,53,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,68,57,10,69,78,67,79,68,73,78,71,32,52, 51,49,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,49,48,10, 48,56,10,48,56,10,51,48,10,48,56,10,48,56,10,56, 56,10,56,56,10,55,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,48,68, 65,10,69,78,67,79,68,73,78,71,32,52,51,49,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,53, 56,10,66,56,10,66,56,10,65,56,10,56,48,10,55,48, 10,48,56,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,48,68,66,10,69,78, 67,79,68,73,78,71,32,52,51,49,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,55, 48,10,56,56,10,56,56,10,48,56,10,55,56,10,56,56, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,68,67,10,69,78,67,79,68,73, 78,71,32,52,51,49,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,56,10,56,48, 10,56,48,10,56,48,10,70,48,10,56,56,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,68,68,10,69,78,67,79,68,73,78,71,32,52, 51,49,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,53,48,10,65,56,10,65,56,10,65,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,48,68, 69,10,69,78,67,79,68,73,78,71,32,52,51,49,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,49,48,10,48,56,10,48,56,10,51, 48,10,48,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,48,68,70,10,69,78, 67,79,68,73,78,71,32,52,51,49,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,56,10,49,56,10,65,56, 10,65,56,10,52,56,10,48,56,10,52,56,10,51,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,69,48,10,69,78,67,79,68,73, 78,71,32,52,51,50,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,56, 10,55,48,10,56,48,10,68,48,10,65,56,10,65,56,10, 65,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,69,49,10,69,78,67,79,68,73,78,71,32,52, 51,50,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,48,10,56,48,10,56,48,10, 57,48,10,65,48,10,57,48,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,48,69, 50,10,69,78,67,79,68,73,78,71,32,52,51,50,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,53,48,10,53,48,10,55,48,10,68, 56,10,68,56,10,65,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,48,69,51,10,69,78, 67,79,68,73,78,71,32,52,51,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,66,48,10,52,56,10,52,56,10,48,56, 10,48,56,10,48,56,10,52,56,10,52,56,10,51,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,69,52,10,69,78,67,79,68,73, 78,71,32,52,51,50,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,53,48,10,65,56,10,65,56,10, 53,48,10,48,56,10,52,56,10,51,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,69,53,10,69,78,67,79,68,73,78,71,32,52, 51,50,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,56,10,49,56,10,48,56,10, 48,56,10,51,56,10,52,56,10,48,56,10,48,56,10,48, 56,10,56,56,10,55,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,48,69, 54,10,69,78,67,79,68,73,78,71,32,52,51,50,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,53, 48,10,65,56,10,65,56,10,56,56,10,56,48,10,55,48, 10,48,56,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,48,69,55,10,69,78, 67,79,68,73,78,71,32,52,51,50,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,56,56,10,56,56, 10,56,56,10,55,56,10,48,56,10,56,56,10,55,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,69,56,10,69,78,67,79,68,73, 78,71,32,52,51,50,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,53,48,10,65,56, 10,65,56,10,65,56,10,56,56,10,51,56,10,52,56,10, 52,56,10,51,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,69,57,10,69,78,67,79,68,73,78,71,32,52, 51,50,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,54,48,10,57,48,10,57,48,10, 69,48,10,56,48,10,70,48,10,56,56,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,48,69, 65,10,69,78,67,79,68,73,78,71,32,52,51,51,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,57,48,10,56,56,10,56, 56,10,66,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,48,69,66,10,69,78, 67,79,68,73,78,71,32,52,51,51,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,49, 48,10,48,56,10,48,56,10,48,56,10,55,56,10,56,56, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,69,67,10,69,78,67,79,68,73, 78,71,32,52,51,51,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,53,48,10,65,56, 10,65,56,10,56,48,10,56,48,10,70,56,10,56,56,10, 53,48,10,53,48,10,50,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,69,68,10,69,78,67,79,68,73,78,71,32,52, 51,51,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,54,48,10,65,48,10, 50,48,10,54,56,10,66,48,10,54,56,10,50,48,10,50, 48,10,65,48,10,67,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,48,69, 69,10,69,78,67,79,68,73,78,71,32,52,51,51,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,48,10,56,48,10,57,48,10,65,48,10,70, 48,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,48,69,70,10,69,78, 67,79,68,73,78,71,32,52,51,51,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,56,56,10,53,48, 10,50,48,10,53,48,10,56,56,10,52,48,10,56,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,70,48,10,69,78,67,79,68,73, 78,71,32,52,51,51,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,52,48,10,51,48,10,48,56, 10,51,48,10,48,56,10,48,56,10,51,48,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,70,49,10,69,78,67,79,68,73,78,71,32,52, 51,51,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,65,48,10,57,48,10,56,56,10,66,48,10, 56,56,10,56,56,10,66,48,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,48,70, 50,10,69,78,67,79,68,73,78,71,32,52,51,51,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,53,48,10,70,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,48,70,51,10,69,78, 67,79,68,73,78,71,32,52,51,51,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,56,10,48,56,10,49,48, 10,51,48,10,48,56,10,48,56,10,56,56,10,55,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,70,52,10,69,78,67,79,68,73, 78,71,32,52,51,52,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,52,48, 10,51,48,10,48,56,10,48,56,10,51,48,10,48,56,10, 48,56,10,56,56,10,56,56,10,55,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,70,53,10,69,78,67,79,68,73,78,71,32,52, 51,52,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,54,48,10,57,48,10,57,48,10, 55,56,10,49,48,10,55,56,10,57,48,10,57,48,10,54, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,48,70, 54,10,69,78,67,79,68,73,78,71,32,52,51,52,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,52,48,10,50,48,10,50,48,10,55, 48,10,65,56,10,65,56,10,55,48,10,50,48,10,50,48, 10,49,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,48,70,55,10,69,78, 67,79,68,73,78,71,32,52,51,52,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,51, 48,10,52,56,10,48,56,10,49,48,10,50,48,10,52,48, 10,52,56,10,52,56,10,51,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,70,56,10,69,78,67,79,68,73, 78,71,32,52,51,52,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,56,56, 10,56,56,10,70,48,10,56,48,10,56,56,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,70,66,10,69,78,67,79,68,73,78,71,32,52, 51,52,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,67,48,10, 67,48,10,49,56,10,49,56,10,67,48,10,67,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,49,65, 56,10,69,78,67,79,68,73,78,71,32,52,53,50,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,70,56,10,48,56,10,48,56,10,48, 56,10,48,56,10,48,56,10,49,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,49,65,57,10,69,78, 67,79,68,73,78,71,32,52,53,50,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,70,56,10,50,56,10,50,56,10,50,56,10,50,56, 10,50,56,10,53,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,49,65,65,10,69,78,67,79,68,73, 78,71,32,52,53,50,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,67,56, 10,52,56,10,53,48,10,53,48,10,53,56,10,54,56,10, 65,56,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,49,65,66,10,69,78,67,79,68,73,78,71,32,52, 53,50,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,56,48,10,56,48,10, 56,48,10,56,48,10,56,48,10,56,48,10,70,56,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,49,65, 67,10,69,78,67,79,68,73,78,71,32,52,53,50,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,66,56,10,57,48,10,57,48,10,57, 48,10,65,56,10,65,56,10,69,56,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,49,65,68,10,69,78, 67,79,68,73,78,71,32,52,53,50,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,66,56,10,56,48,10,66,56,10,56,48,10,66,56, 10,65,56,10,68,56,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,49,65,69,10,69,78,67,79,68,73, 78,71,32,52,53,50,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,70,56, 10,56,48,10,56,48,10,56,48,10,56,48,10,56,48,10, 70,56,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,49,65,70,10,69,78,67,79,68,73,78,71,32,52, 53,50,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,70,56,10,48,56,10, 48,56,10,70,56,10,56,48,10,56,48,10,70,56,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,49,66, 48,10,69,78,67,79,68,73,78,71,32,52,53,50,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,70,56,10,50,56,10,50,56,10,69, 56,10,56,56,10,65,56,10,67,56,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,49,66,49,10,69,78, 67,79,68,73,78,71,32,52,53,50,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,68,67,10,53,52,10,53,52,10,68,52,10,57,52, 10,66,52,10,68,67,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,49,66,50,10,69,78,67,79,68,73, 78,71,32,52,53,51,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,68,52, 10,53,52,10,53,52,10,68,67,10,57,52,10,66,52,10, 68,67,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,49,66,51,10,69,78,67,79,68,73,78,71,32,52, 53,51,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,69,52,10,50,52,10, 50,56,10,69,56,10,57,52,10,66,52,10,68,52,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,49,66, 52,10,69,78,67,79,68,73,78,71,32,52,53,51,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,68,56,10,53,48,10,53,48,10,68, 56,10,57,48,10,66,48,10,68,56,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,49,66,53,10,69,78, 67,79,68,73,78,71,32,52,53,51,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,68,67,10,52,48,10,53,52,10,68,52,10,57,52, 10,65,56,10,68,67,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,49,66,54,10,69,78,67,79,68,73, 78,71,32,52,53,51,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,69,67, 10,50,48,10,51,67,10,69,56,10,57,67,10,66,52,10, 68,56,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,49,66,55,10,69,78,67,79,68,73,78,71,32,52, 53,51,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,70,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,70,56,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,49,66, 56,10,69,78,67,79,68,73,78,71,32,52,53,51,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,56,56,10,56,56,10,56,56,10,70, 56,10,56,56,10,56,56,10,70,56,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,49,66,57,10,69,78, 67,79,68,73,78,71,32,52,53,51,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,65,56,10,65,56,10,65,56,10,69,56,10,66,52, 10,66,52,10,68,52,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,49,66,65,10,69,78,67,79,68,73, 78,71,32,52,53,51,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,49,48, 10,49,48,10,50,48,10,50,48,10,53,48,10,53,48,10, 56,56,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,49,66,66,10,69,78,67,79,68,73,78,71,32,52, 53,51,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,50,56,10,50,56,10, 53,48,10,53,48,10,53,56,10,65,56,10,65,52,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,49,66, 67,10,69,78,67,79,68,73,78,71,32,52,53,52,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,51,48,10,52,56,10,56,52,10,56, 52,10,56,52,10,52,56,10,51,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,49,66,68,10,69,78, 67,79,68,73,78,71,32,52,53,52,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,70,56,10,48,56,10,49,48,10,51,48,10,52,56, 10,52,56,10,56,52,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,49,66,69,10,69,78,67,79,68,73, 78,71,32,52,53,52,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,55,48, 10,48,48,10,70,56,10,50,48,10,50,48,10,53,48,10, 56,56,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,49,66,70,10,69,78,67,79,68,73,78,71,32,52, 53,52,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,70,56,10,48,56,10, 48,56,10,70,56,10,48,56,10,48,56,10,49,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,49,67, 48,10,69,78,67,79,68,73,78,71,32,52,53,52,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,70,56,10,56,48,10,56,48,10,70, 56,10,56,48,10,56,48,10,70,56,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,49,67,49,10,69,78, 67,79,68,73,78,71,32,52,53,52,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,70,56,10,53,48,10,53,48,10,53,48,10,53,48, 10,53,48,10,70,56,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,49,67,50,10,69,78,67,79,68,73, 78,71,32,52,53,52,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,48,48, 10,70,56,10,48,48,10,55,48,10,56,56,10,56,56,10, 55,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,49,69,66,10,69,78,67,79,68,73,78,71,32,52, 53,56,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,50,48,10,50,48,10, 53,48,10,53,48,10,53,48,10,56,56,10,70,56,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,49,70, 57,10,69,78,67,79,68,73,78,71,32,52,54,48,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,70,56,10,48,48,10,55, 48,10,56,56,10,56,56,10,55,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,56,48,10,69,78, 67,79,68,73,78,71,32,53,55,54,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,70,67,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,56,49,10,69,78,67,79,68,73, 78,71,32,53,55,54,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,70,67,10,48,56,10,48,56,10, 48,56,10,48,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,56,50,10,69,78,67,79,68,73,78,71,32,53, 55,54,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,70,67,10,50,56,10,50,56,10,50,56,10,50, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,56, 51,10,69,78,67,79,68,73,78,71,32,53,55,54,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,70, 67,10,51,56,10,51,56,10,51,56,10,51,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,56,52,10,69,78, 67,79,68,73,78,71,32,53,55,54,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,70,67,10,55,56, 10,55,56,10,55,56,10,55,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,56,53,10,69,78,67,79,68,73, 78,71,32,53,55,54,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,70,67,10,70,56,10,70,56,10, 70,56,10,70,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,56,54,10,69,78,67,79,68,73,78,71,32,53, 55,54,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,56,10,48,56,10,48,56,10, 48,56,10,70,67,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,56, 55,10,69,78,67,79,68,73,78,71,32,53,55,54,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,56,10,50,56,10,50,56,10,50,56,10,70, 67,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,56,56,10,69,78, 67,79,68,73,78,71,32,53,55,54,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,51, 56,10,51,56,10,51,56,10,51,56,10,70,67,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,56,57,10,69,78,67,79,68,73, 78,71,32,53,55,54,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,56,10,55,56, 10,55,56,10,55,56,10,70,67,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,56,65,10,69,78,67,79,68,73,78,71,32,53, 55,55,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,56,10,70,56,10,70,56,10, 70,56,10,70,67,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,56, 66,10,69,78,67,79,68,73,78,71,32,53,55,55,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,49,48,10,49,48,10,49,48,10,49,48,10,70, 67,10,50,48,10,50,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,56,67,10,69,78, 67,79,68,73,78,71,32,53,55,55,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 56,10,50,56,10,50,56,10,50,56,10,70,67,10,53,48, 10,53,48,10,53,48,10,53,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,56,68,10,69,78,67,79,68,73, 78,71,32,53,55,55,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,51,56,10,51,56, 10,51,56,10,51,56,10,70,67,10,55,48,10,55,48,10, 55,48,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,56,69,10,69,78,67,79,68,73,78,71,32,53, 55,55,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,51,67,10,51,67,10,51,67,10, 51,67,10,70,67,10,55,56,10,55,56,10,55,56,10,55, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,56, 70,10,69,78,67,79,68,73,78,71,32,53,55,55,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,55,67,10,55,67,10,55,67,10,55,67,10,70, 67,10,70,56,10,70,56,10,70,56,10,70,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,57,48,10,69,78, 67,79,68,73,78,71,32,53,55,55,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,49,48,10,70,67,10,49,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,57,49,10,69,78,67,79,68,73, 78,71,32,53,55,55,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,50,56,10,70,67,10,50,56,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,57,50,10,69,78,67,79,68,73,78,71,32,53, 55,55,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 51,56,10,70,67,10,51,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,57, 51,10,69,78,67,79,68,73,78,71,32,53,55,55,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,56,10,70, 67,10,55,56,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,57,52,10,69,78, 67,79,68,73,78,71,32,53,55,56,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,56,10,70,67,10,70,56, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,57,53,10,69,78,67,79,68,73, 78,71,32,53,55,56,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,56,10,50,56, 10,49,48,10,49,48,10,70,67,10,49,48,10,49,48,10, 50,56,10,50,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,57,54,10,69,78,67,79,68,73,78,71,32,53, 55,56,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,51,48,10,52,56,10,52,56,10, 56,52,10,70,67,10,56,52,10,52,56,10,52,56,10,51, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,57, 55,10,69,78,67,79,68,73,78,71,32,53,55,56,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,70, 67,10,52,48,10,53,56,10,52,56,10,55,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,57,56,10,69,78, 67,79,68,73,78,71,32,53,55,56,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,70,67,10,68,56, 10,55,48,10,55,48,10,68,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,57,57,10,69,78,67,79,68,73, 78,71,32,53,55,56,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,53,48,10,70,56,10,53,48, 10,70,56,10,53,48,10,70,67,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,57,65,10,69,78,67,79,68,73,78,71,32,53, 55,56,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,70,67,10,48,48,10,55,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,57, 66,10,69,78,67,79,68,73,78,71,32,53,55,56,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,56,48,10,52,48,10,50,48,10,49, 67,10,50,48,10,52,48,10,56,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,57,67,10,69,78, 67,79,68,73,78,71,32,53,55,56,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,52,10,48,56,10,49,48,10,69,48,10,49,48, 10,48,56,10,48,52,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,65,48,10,69,78,67,79,68,73, 78,71,32,53,55,57,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,52,56,10,53,48, 10,54,48,10,52,56,10,53,48,10,54,48,10,52,48,10, 52,48,10,52,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,65,49,10,69,78,67,79,68,73,78,71,32,53, 55,57,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,49,48,10,48,48,10,52,56,10,53,48,10,54,48,10, 52,56,10,53,48,10,54,48,10,52,48,10,52,48,10,52, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,65, 50,10,69,78,67,79,68,73,78,71,32,53,55,57,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,48,10,67,48,10,65,48,10,57,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,65,51,10,69,78, 67,79,68,73,78,71,32,53,55,57,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 48,10,67,48,10,65,48,10,57,48,10,65,56,10,65,56, 10,65,56,10,65,56,10,65,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,65,52,10,69,78,67,79,68,73, 78,71,32,53,55,57,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,48,10,67,48, 10,65,48,10,57,48,10,56,56,10,65,56,10,56,56,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,65,53,10,69,78,67,79,68,73,78,71,32,53, 55,57,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,48,10,67,48,10,65,48,10, 57,48,10,67,56,10,65,56,10,65,56,10,65,56,10,65, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,65, 54,10,69,78,67,79,68,73,78,71,32,53,55,57,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,52,48,10,52,48,10,55,48,10,52,56,10,52, 56,10,52,56,10,55,48,10,52,48,10,52,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,65,55,10,69,78, 67,79,68,73,78,71,32,53,55,57,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 48,10,56,48,10,70,48,10,56,56,10,65,56,10,56,56, 10,70,48,10,56,48,10,56,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,65,56,10,69,78,67,79,68,73, 78,71,32,53,56,48,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,67,48,10,65,48, 10,57,48,10,67,48,10,65,48,10,57,48,10,56,48,10, 56,48,10,56,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,65,57,10,69,78,67,79,68,73,78,71,32,53, 56,48,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,67,56,10,66,48,10,56,48,10, 67,56,10,66,48,10,56,48,10,56,48,10,56,48,10,56, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,65, 65,10,69,78,67,79,68,73,78,71,32,53,56,48,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,68,48,10,65,48,10,56,48,10,67, 48,10,66,48,10,56,48,10,56,48,10,56,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,65,66,10,69,78, 67,79,68,73,78,71,32,53,56,48,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,54, 48,10,53,48,10,52,56,10,54,48,10,53,48,10,52,56, 10,52,48,10,52,48,10,52,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,65,67,10,69,78,67,79,68,73, 78,71,32,53,56,48,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,65,48, 10,54,48,10,51,48,10,65,56,10,54,48,10,51,48,10, 50,56,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,65,68,10,69,78,67,79,68,73,78,71,32,53, 56,48,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,50,48,10, 51,48,10,50,56,10,50,48,10,51,48,10,50,56,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,65, 69,10,69,78,67,79,68,73,78,71,32,53,56,48,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,50,48,10,50,48,10,54,48,10,65, 48,10,50,48,10,54,48,10,65,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,65,70,10,69,78, 67,79,68,73,78,71,32,53,56,48,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,50,56,10,51,48,10,54,48,10,65,56,10,51,48, 10,54,48,10,65,48,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,66,48,10,69,78,67,79,68,73, 78,71,32,53,56,48,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,56, 10,51,48,10,54,48,10,65,48,10,50,48,10,54,48,10, 65,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,66,49,10,69,78,67,79,68,73,78,71,32,53, 56,48,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,67,48,10,66,48,10,56,56,10, 66,48,10,67,48,10,65,48,10,57,48,10,56,56,10,56, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,66, 50,10,69,78,67,79,68,73,78,71,32,53,56,49,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,56,10,49,48,10,50,48,10,52, 48,10,50,48,10,49,48,10,48,56,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,66,51,10,69,78, 67,79,68,73,78,71,32,53,56,49,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 48,10,56,48,10,56,48,10,56,48,10,56,48,10,67,48, 10,65,48,10,57,48,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,66,52,10,69,78,67,79,68,73, 78,71,32,53,56,49,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,57,48, 10,65,48,10,67,48,10,56,48,10,56,48,10,56,48,10, 56,48,10,56,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,66,53,10,69,78,67,79,68,73,78,71,32,53, 56,49,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,50,48,10,56,56,10,57,48,10,65,48,10, 67,48,10,56,48,10,56,48,10,56,48,10,56,48,10,56, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,66, 54,10,69,78,67,79,68,73,78,71,32,53,56,49,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,57,48,10,69,48,10,67,48,10,67, 48,10,56,48,10,56,48,10,56,48,10,56,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,66,55,10,69,78, 67,79,68,73,78,71,32,53,56,49,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,56,56,10,53,48,10,53,48,10,50,48,10,53,48, 10,53,48,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,66,56,10,69,78,67,79,68,73, 78,71,32,53,56,49,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,56,56, 10,53,48,10,53,48,10,65,56,10,53,48,10,53,48,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,66,57,10,69,78,67,79,68,73,78,71,32,53, 56,49,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,67,48,10,66,48,10,56,56,10, 66,48,10,67,48,10,56,48,10,56,48,10,56,48,10,56, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,66, 65,10,69,78,67,79,68,73,78,71,32,53,56,49,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,56,56,10,56,56,10,67,56,10,65, 56,10,57,56,10,56,56,10,56,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,66,66,10,69,78, 67,79,68,73,78,71,32,53,56,49,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,56,56,10,67,56,10,65,56,10,68,56,10,65,56, 10,57,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,66,67,10,69,78,67,79,68,73, 78,71,32,53,56,50,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,65,56,10,55,48,10,50,48,10,55,48,10,65,56,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,66,68,10,69,78,67,79,68,73,78,71,32,53, 56,50,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,50,48,10, 55,48,10,55,48,10,55,48,10,50,48,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,66, 69,10,69,78,67,79,68,73,78,71,32,53,56,50,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,50,48,10,65,48,10,54,48,10,50, 48,10,51,48,10,50,56,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,66,70,10,69,78, 67,79,68,73,78,71,32,53,56,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,51,48,10,50,56, 10,50,48,10,50,48,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,67,48,10,69,78,67,79,68,73, 78,71,32,53,56,50,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,65,48,10,55,48,10,55,48,10,55,48,10,50,56,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,67,49,10,69,78,67,79,68,73,78,71,32,53, 56,50,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,67, 50,10,69,78,67,79,68,73,78,71,32,53,56,50,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,50,48,10,50,48,10,55,48,10,55, 48,10,55,48,10,50,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,67,51,10,69,78, 67,79,68,73,78,71,32,53,56,50,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,50,48,10,52,48,10,57,48,10,52,56, 10,49,48,10,50,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,67,52,10,69,78,67,79,68,73, 78,71,32,53,56,50,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,50,48,10,55,48,10,65,56,10,55,48,10,50,48,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,67,53,10,69,78,67,79,68,73,78,71,32,53, 56,50,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,50,56,10, 51,48,10,50,48,10,54,48,10,65,48,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,67, 54,10,69,78,67,79,68,73,78,71,32,53,56,51,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,50,48,10,50,48,10,50,48,10,54, 48,10,65,48,10,50,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,67,55,10,69,78, 67,79,68,73,78,71,32,53,56,51,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,51,48,10,50,56,10,50,48,10,50,48,10,50,48, 10,65,48,10,54,48,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,67,56,10,69,78,67,79,68,73, 78,71,32,53,56,51,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,67,56,10,66,48, 10,56,48,10,56,48,10,56,48,10,56,48,10,56,48,10, 66,48,10,67,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,67,57,10,69,78,67,79,68,73,78,71,32,53, 56,51,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,65,56,10,55,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,67, 65,10,69,78,67,79,68,73,78,71,32,53,56,51,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,49,48,10,50,48,10,52,48,10,50,48,10,49, 48,10,50,48,10,52,48,10,50,48,10,49,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,67,66,10,69,78, 67,79,68,73,78,71,32,53,56,51,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 48,10,56,48,10,56,56,10,57,56,10,65,56,10,67,56, 10,56,56,10,48,56,10,48,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,67,67,10,69,78,67,79,68,73, 78,71,32,53,56,51,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,67,68,10,69,78,67,79,68,73,78,71,32,53, 56,51,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,55,48,10,55,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,67, 69,10,69,78,67,79,68,73,78,71,32,53,56,51,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,50,48,10,50,48,10,65,56,10,55, 48,10,50,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,67,70,10,69,78, 67,79,68,73,78,71,32,53,56,51,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,55,48,10,65,56,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,68,48,10,69,78,67,79,68,73, 78,71,32,53,56,52,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,54,48, 10,65,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,68,49,10,69,78,67,79,68,73,78,71,32,53, 56,52,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,54,48,10,65,48,10, 50,48,10,55,48,10,55,48,10,50,48,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,68, 50,10,69,78,67,79,68,73,78,71,32,53,56,52,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,67,48,10,66,48,10,56,56,10,66,48,10,67, 48,10,66,48,10,56,56,10,66,48,10,67,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,68,51,10,69,78, 67,79,68,73,78,71,32,53,56,52,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,50,48,10,50,56,10,51,48,10,50,48,10,50,56, 10,51,48,10,50,48,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,68,52,10,69,78,67,79,68,73, 78,71,32,53,56,52,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,70,48,10,56,56, 10,65,56,10,56,56,10,70,48,10,56,56,10,65,56,10, 56,56,10,70,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,68,53,10,69,78,67,79,68,73,78,71,32,53, 56,52,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,57,48,10,65,48,10, 67,48,10,56,48,10,67,48,10,65,48,10,57,48,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,68, 54,10,69,78,67,79,68,73,78,71,32,53,56,52,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,68,56,10,65,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,68,55,10,69,78, 67,79,68,73,78,71,32,53,56,52,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,68,56,10,65,56,10,68,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,68,56,10,69,78,67,79,68,73, 78,71,32,53,56,52,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,65,56,10,65,56, 10,55,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,68,57,10,69,78,67,79,68,73,78,71,32,53, 56,52,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,55,48,10,55,48,10,55,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,68, 65,10,69,78,67,79,68,73,78,71,32,53,56,53,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,51,48,10,50,56,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,68,66,10,69,78, 67,79,68,73,78,71,32,53,56,53,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,51,48,10,50,56,10,50,48,10,55,48,10,55,48, 10,50,48,10,50,48,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,68,67,10,69,78,67,79,68,73, 78,71,32,53,56,53,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,48,10,53,48,10,56,56,10,53,48,10,50,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,68,68,10,69,78,67,79,68,73,78,71,32,53, 56,53,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,53,48,10,50,48,10, 53,48,10,56,56,10,53,48,10,50,48,10,53,48,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,68, 69,10,69,78,67,79,68,73,78,71,32,53,56,53,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,68,56,10,68,56,10,65,56,10,65, 56,10,65,56,10,68,56,10,68,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,68,70,10,69,78, 67,79,68,73,78,71,32,53,56,53,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,53,48,10,56,56,10,56,56,10,53,48,10,50,48, 10,53,48,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,69,48,10,69,78,67,79,68,73, 78,71,32,53,56,53,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,70,56,10,55,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,69,49,10,69,78,67,79,68,73,78,71,32,53, 56,53,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,65,56,10, 55,48,10,50,48,10,55,48,10,65,56,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,69, 50,10,69,78,67,79,68,73,78,71,32,53,56,53,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,56,10,51,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,54,48,10,65,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,69,51,10,69,78, 67,79,68,73,78,71,32,53,56,53,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,55,48,10,65,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,69,52,10,69,78,67,79,68,73, 78,71,32,53,56,54,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,65,56,10,65,56, 10,55,48,10,65,56,10,65,56,10,65,56,10,55,48,10, 65,56,10,65,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,69,53,10,69,78,67,79,68,73,78,71,32,53, 56,54,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,68,56,10,65,56,10, 68,56,10,56,56,10,68,56,10,65,56,10,68,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,69, 54,10,69,78,67,79,68,73,78,71,32,53,56,54,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,55,48,10,65,56,10,65,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,69,55,10,69,78, 67,79,68,73,78,71,32,53,56,54,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,69,56,10,69,78,67,79,68,73, 78,71,32,53,56,54,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,55,48, 10,65,56,10,50,48,10,50,48,10,50,48,10,65,56,10, 55,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,69,57,10,69,78,67,79,68,73,78,71,32,53, 56,54,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,49,56,10,54,56,10,56,56,10, 54,56,10,49,56,10,48,56,10,48,56,10,48,56,10,48, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,69, 65,10,69,78,67,79,68,73,78,71,32,53,56,54,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,52,48,10,69,48,10,52,48,10,53,48,10,55, 48,10,53,48,10,49,48,10,51,56,10,49,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,69,66,10,69,78, 67,79,68,73,78,71,32,53,56,54,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,50,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,69,67,10,69,78,67,79,68,73, 78,71,32,53,56,54,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,69,68,10,69,78,67,79,68,73,78,71,32,53, 56,54,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 50,48,10,70,56,10,50,48,10,50,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,69, 69,10,69,78,67,79,68,73,78,71,32,53,56,55,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,51,48,10,50,56,10,50,48,10,54, 48,10,65,48,10,50,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,69,70,10,69,78, 67,79,68,73,78,71,32,53,56,55,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,65, 56,10,65,56,10,55,48,10,50,48,10,50,48,10,50,48, 10,55,48,10,65,56,10,65,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,70,48,10,69,78,67,79,68,73, 78,71,32,53,56,55,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,55,48,10,65,56,10,65,56,10,65,56,10,55,48,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,48,48,10,69,78,67,79,68,73,78,71,32,55, 54,56,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,53,48,10,56,56,10, 56,56,10,70,56,10,56,56,10,56,56,10,56,56,10,50, 48,10,53,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,48, 49,10,69,78,67,79,68,73,78,71,32,55,54,56,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,48,10,48,56,10,55, 56,10,56,56,10,57,56,10,54,56,10,50,48,10,53,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,48,50,10,69,78, 67,79,68,73,78,71,32,55,54,56,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,50,48,10,50, 48,10,48,48,10,70,48,10,52,56,10,52,56,10,55,48, 10,52,56,10,52,56,10,70,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,48,51,10,69,78,67,79,68,73, 78,71,32,55,54,56,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,50,48,10,65,48,10,56,48, 10,56,48,10,70,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,70,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,48,52,10,69,78,67,79,68,73,78,71,32,55, 54,56,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,48,10,52,56,10,52,56,10, 52,56,10,55,48,10,52,56,10,52,56,10,52,56,10,70, 48,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,48, 53,10,69,78,67,79,68,73,78,71,32,55,54,56,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,48,10,56,48,10,56,48,10,70,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,70,48,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,48,54,10,69,78, 67,79,68,73,78,71,32,55,54,56,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 48,10,52,56,10,52,56,10,52,56,10,55,48,10,52,56, 10,52,56,10,52,56,10,70,48,10,48,48,10,70,56,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,48,55,10,69,78,67,79,68,73, 78,71,32,55,54,56,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,48,10,56,48, 10,56,48,10,70,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,70,48,10,48,48,10,70,56,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,48,56,10,69,78,67,79,68,73,78,71,32,55, 54,56,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,49,48,10,50,48,10,48,48,10,55,48,10, 56,56,10,56,48,10,56,48,10,56,48,10,56,56,10,55, 48,10,50,48,10,52,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,48, 57,10,69,78,67,79,68,73,78,71,32,55,54,56,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,49,48,10,50,48,10,48,48,10,55,48,10,56, 56,10,56,48,10,56,48,10,56,56,10,55,48,10,50,48, 10,52,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,48,65,10,69,78, 67,79,68,73,78,71,32,55,54,57,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,50,48,10,50, 48,10,48,48,10,70,48,10,52,56,10,52,56,10,52,56, 10,52,56,10,52,56,10,70,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,48,66,10,69,78,67,79,68,73, 78,71,32,55,54,57,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,50,48,10,50,56,10,48,56, 10,48,56,10,55,56,10,56,56,10,56,56,10,56,56,10, 56,56,10,55,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,48,67,10,69,78,67,79,68,73,78,71,32,55, 54,57,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,48,10,52,56,10,52,56,10, 52,56,10,52,56,10,52,56,10,52,56,10,52,56,10,70, 48,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,48, 68,10,69,78,67,79,68,73,78,71,32,55,54,57,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,56,10,48,56,10,48,56,10,55,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,55,56,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,48,69,10,69,78, 67,79,68,73,78,71,32,55,54,57,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 48,10,52,56,10,52,56,10,52,56,10,52,56,10,52,56, 10,52,56,10,52,56,10,70,48,10,48,48,10,70,56,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,48,70,10,69,78,67,79,68,73, 78,71,32,55,54,57,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,56,10,48,56, 10,48,56,10,55,56,10,56,56,10,56,56,10,56,56,10, 56,56,10,55,56,10,48,48,10,70,56,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,49,48,10,69,78,67,79,68,73,78,71,32,55, 54,57,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,48,10,52,56,10,52,56,10, 52,56,10,52,56,10,52,56,10,52,56,10,52,56,10,70, 48,10,50,48,10,52,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,49, 49,10,69,78,67,79,68,73,78,71,32,55,54,57,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,56,10,48,56,10,48,56,10,55,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,55,56,10,50,48, 10,52,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,49,50,10,69,78, 67,79,68,73,78,71,32,55,54,57,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 48,10,52,56,10,52,56,10,52,56,10,52,56,10,52,56, 10,52,56,10,70,48,10,48,48,10,50,48,10,53,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,49,51,10,69,78,67,79,68,73, 78,71,32,55,54,57,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,56,10,48,56, 10,48,56,10,55,56,10,56,56,10,56,56,10,56,56,10, 55,56,10,48,48,10,50,48,10,53,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,49,52,10,69,78,67,79,68,73,78,71,32,55, 55,48,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,52,48,10,50,48,10,70,56,10,48,48,10,70,56,10, 56,48,10,56,48,10,70,48,10,56,48,10,56,48,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,49, 53,10,69,78,67,79,68,73,78,71,32,55,55,48,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 52,48,10,50,48,10,70,56,10,48,48,10,55,48,10,56, 56,10,70,56,10,56,48,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,49,54,10,69,78, 67,79,68,73,78,71,32,55,55,48,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,49,48,10,50,48,10,70, 56,10,48,48,10,70,56,10,56,48,10,56,48,10,70,48, 10,56,48,10,56,48,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,49,55,10,69,78,67,79,68,73, 78,71,32,55,55,48,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,48,10,50,48,10,70,56, 10,48,48,10,55,48,10,56,56,10,70,56,10,56,48,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,49,56,10,69,78,67,79,68,73,78,71,32,55, 55,48,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,56,10,56,48,10,56,48,10, 70,48,10,56,48,10,56,48,10,56,48,10,70,56,10,48, 48,10,50,48,10,53,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,49, 57,10,69,78,67,79,68,73,78,71,32,55,55,48,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,48,10,56,56,10,70, 56,10,56,48,10,56,56,10,55,48,10,48,48,10,50,48, 10,53,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,49,65,10,69,78, 67,79,68,73,78,71,32,55,55,48,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 56,10,56,48,10,56,48,10,70,48,10,56,48,10,56,48, 10,56,48,10,70,56,10,48,48,10,50,56,10,53,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,49,66,10,69,78,67,79,68,73, 78,71,32,55,55,48,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,55,48,10,56,56,10,70,56,10,56,48,10,56,56,10, 55,48,10,48,48,10,50,56,10,53,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,49,67,10,69,78,67,79,68,73,78,71,32,55, 55,48,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,56,56,10,55,48,10,48,48,10,70,56,10, 56,48,10,56,48,10,70,48,10,56,48,10,56,48,10,70, 56,10,50,48,10,52,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,49, 68,10,69,78,67,79,68,73,78,71,32,55,55,48,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,55,48,10,48,48,10,55,48,10,56, 56,10,70,56,10,56,48,10,56,56,10,55,48,10,50,48, 10,52,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,49,69,10,69,78, 67,79,68,73,78,71,32,55,55,49,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,50,48,10,50, 48,10,48,48,10,70,56,10,56,48,10,56,48,10,70,48, 10,56,48,10,56,48,10,56,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,49,70,10,69,78,67,79,68,73, 78,71,32,55,55,49,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,50,48,10,50,48,10,48,48, 10,51,48,10,52,56,10,52,48,10,70,48,10,52,48,10, 52,48,10,52,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,50,48,10,69,78,67,79,68,73,78,71,32,55, 55,49,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,70,56,10,48,48,10,55,48,10,56,56,10, 56,48,10,56,48,10,57,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,50, 49,10,69,78,67,79,68,73,78,71,32,55,55,49,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,70,56,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,55,56,10,48,56,10,56,56, 10,55,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,50,50,10,69,78, 67,79,68,73,78,71,32,55,55,49,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,50,48,10,50, 48,10,48,48,10,56,56,10,56,56,10,56,56,10,70,56, 10,56,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,50,51,10,69,78,67,79,68,73, 78,71,32,55,55,49,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,50,48,10,65,48,10,56,48, 10,56,48,10,66,48,10,67,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,50,52,10,69,78,67,79,68,73,78,71,32,55, 55,49,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,70,56,10,56,56,10,56,56,10,56,56,10,56, 56,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,50, 53,10,69,78,67,79,68,73,78,71,32,55,55,49,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,48,10,56,48,10,56,48,10,66,48,10,67, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,50,54,10,69,78, 67,79,68,73,78,71,32,55,55,49,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,53,48,10,53, 48,10,48,48,10,56,56,10,56,56,10,56,56,10,70,56, 10,56,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,50,55,10,69,78,67,79,68,73, 78,71,32,55,55,49,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,53,48,10,53,48,10,48,48, 10,56,48,10,56,48,10,66,48,10,67,56,10,56,56,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,50,56,10,69,78,67,79,68,73,78,71,32,55, 55,50,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,70,56,10,56,56,10,56,56,10,56,56,10,56, 56,10,49,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,50, 57,10,69,78,67,79,68,73,78,71,32,55,55,50,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,48,10,56,48,10,56,48,10,66,48,10,67, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,49,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,50,65,10,69,78, 67,79,68,73,78,71,32,55,55,50,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,56,56,10,56,56,10,70,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,48,48,10,56,56,10,55,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,50,66,10,69,78,67,79,68,73, 78,71,32,55,55,50,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,48,10,56,48, 10,56,48,10,66,48,10,67,56,10,56,56,10,56,56,10, 56,56,10,48,48,10,56,56,10,55,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,50,67,10,69,78,67,79,68,73,78,71,32,55, 55,50,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,55,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,55,48,10,48, 48,10,50,56,10,53,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,50, 68,10,69,78,67,79,68,73,78,71,32,55,55,50,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,50,48,10,48,48,10,54,48,10,50, 48,10,50,48,10,50,48,10,55,48,10,48,48,10,50,56, 10,53,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,50,69,10,69,78, 67,79,68,73,78,71,32,55,55,50,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,49,48,10,50,48,10,48, 48,10,53,48,10,48,48,10,55,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,50,70,10,69,78,67,79,68,73, 78,71,32,55,55,50,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,49,48,10,50,48,10,48,48,10,53,48, 10,48,48,10,54,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,51,48,10,69,78,67,79,68,73,78,71,32,55, 55,50,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,49,48,10,50,48,10,48,48,10,56,56,10, 57,48,10,65,48,10,67,48,10,65,48,10,57,48,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,51, 49,10,69,78,67,79,68,73,78,71,32,55,55,50,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 49,48,10,65,48,10,56,48,10,56,48,10,57,48,10,65, 48,10,67,48,10,65,48,10,57,48,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,51,50,10,69,78, 67,79,68,73,78,71,32,55,55,51,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,56,56,10,57,48,10,65,48,10,67,48,10,65,48, 10,57,48,10,56,56,10,56,56,10,48,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,51,51,10,69,78,67,79,68,73, 78,71,32,55,55,51,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,48,10,56,48, 10,56,48,10,57,48,10,65,48,10,67,48,10,65,48,10, 57,48,10,56,56,10,48,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,51,52,10,69,78,67,79,68,73,78,71,32,55, 55,51,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,56,56,10,57,48,10, 65,48,10,67,48,10,65,48,10,57,48,10,56,56,10,56, 56,10,48,48,10,70,56,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,51, 53,10,69,78,67,79,68,73,78,71,32,55,55,51,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,48,10,56,48,10,56,48,10,57,48,10,65, 48,10,67,48,10,65,48,10,57,48,10,56,56,10,48,48, 10,70,56,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,51,54,10,69,78, 67,79,68,73,78,71,32,55,55,51,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 48,10,56,48,10,56,48,10,56,48,10,56,48,10,56,48, 10,56,48,10,56,48,10,70,56,10,48,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,51,55,10,69,78,67,79,68,73, 78,71,32,55,55,51,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,54,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,55,48,10,48,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,51,56,10,69,78,67,79,68,73,78,71,32,55, 55,51,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,70,56,10,48,48,10,56,48,10,56,48,10, 56,48,10,56,48,10,56,48,10,56,48,10,56,48,10,70, 56,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,51, 57,10,69,78,67,79,68,73,78,71,32,55,55,51,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 70,56,10,48,48,10,54,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,55,48,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,51,65,10,69,78, 67,79,68,73,78,71,32,55,55,51,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 48,10,56,48,10,56,48,10,56,48,10,56,48,10,56,48, 10,56,48,10,56,48,10,70,56,10,48,48,10,70,56,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,51,66,10,69,78,67,79,68,73, 78,71,32,55,55,51,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,54,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,55,48,10,48,48,10,55,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,51,67,10,69,78,67,79,68,73,78,71,32,55, 55,52,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,48,10,56,48,10,56,48,10, 56,48,10,56,48,10,56,48,10,56,48,10,70,56,10,48, 48,10,50,48,10,53,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,51, 68,10,69,78,67,79,68,73,78,71,32,55,55,52,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,54,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,55,48,10,48,48,10,50,48, 10,53,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,51,69,10,69,78, 67,79,68,73,78,71,32,55,55,52,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,48,10,50, 48,10,56,56,10,56,56,10,68,56,10,65,56,10,65,56, 10,56,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,51,70,10,69,78,67,79,68,73, 78,71,32,55,55,52,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,49,48,10,50,48, 10,48,48,10,68,48,10,65,56,10,65,56,10,65,56,10, 65,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,52,48,10,69,78,67,79,68,73,78,71,32,55, 55,52,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,50,48,10,50,48,10,56,56,10,56,56,10, 68,56,10,65,56,10,65,56,10,56,56,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,52, 49,10,69,78,67,79,68,73,78,71,32,55,55,52,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,50,48,10,48,48,10,68,48,10,65, 56,10,65,56,10,65,56,10,65,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,52,50,10,69,78, 67,79,68,73,78,71,32,55,55,52,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,56,56,10,68,56,10,65,56,10,65,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,48,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,52,51,10,69,78,67,79,68,73, 78,71,32,55,55,52,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,68,48,10,65,56,10,65,56,10,65,56,10, 65,56,10,56,56,10,48,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,52,52,10,69,78,67,79,68,73,78,71,32,55, 55,52,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,50,48,10,50,48,10,56,56,10,67,56,10, 67,56,10,65,56,10,65,56,10,57,56,10,57,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,52, 53,10,69,78,67,79,68,73,78,71,32,55,55,52,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,50,48,10,48,48,10,66,48,10,67, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,52,54,10,69,78, 67,79,68,73,78,71,32,55,55,53,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,67,56,10,67,56,10,65,56,10,65,56,10,57,56, 10,57,56,10,56,56,10,56,56,10,48,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,52,55,10,69,78,67,79,68,73, 78,71,32,55,55,53,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,66,48,10,67,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,48,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,52,56,10,69,78,67,79,68,73,78,71,32,55, 55,53,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,67,56,10,67,56,10, 65,56,10,65,56,10,57,56,10,57,56,10,56,56,10,56, 56,10,48,48,10,70,56,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,52, 57,10,69,78,67,79,68,73,78,71,32,55,55,53,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,66,48,10,67, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,48,48, 10,70,56,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,52,65,10,69,78, 67,79,68,73,78,71,32,55,55,53,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,67,56,10,67,56,10,65,56,10,65,56,10,57,56, 10,57,56,10,56,56,10,56,56,10,50,48,10,53,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,52,66,10,69,78,67,79,68,73, 78,71,32,55,55,53,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,66,48,10,67,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,50,48,10,53,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,52,67,10,69,78,67,79,68,73,78,71,32,55, 55,53,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,49,48,10,50,48,10,48,48,10,50,56,10,53,48,10, 48,48,10,55,48,10,56,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,52, 68,10,69,78,67,79,68,73,78,71,32,55,55,53,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 49,48,10,50,48,10,48,48,10,50,56,10,53,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,52,69,10,69,78, 67,79,68,73,78,71,32,55,55,53,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,53,48,10,53,48,10,48, 48,10,50,56,10,53,48,10,48,48,10,55,48,10,56,56, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,52,70,10,69,78,67,79,68,73, 78,71,32,55,55,53,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,53,48,10,53,48,10,48,48, 10,50,56,10,53,48,10,48,48,10,55,48,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,53,48,10,69,78,67,79,68,73,78,71,32,55, 55,54,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,52,48,10,50,48,10,48,48,10,70,56,10,48,48,10, 55,48,10,56,56,10,56,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,53, 49,10,69,78,67,79,68,73,78,71,32,55,55,54,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 52,48,10,50,48,10,48,48,10,70,56,10,48,48,10,55, 48,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,53,50,10,69,78, 67,79,68,73,78,71,32,55,55,54,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,49,48,10,50,48,10,48, 48,10,70,56,10,48,48,10,55,48,10,56,56,10,56,56, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,53,51,10,69,78,67,79,68,73, 78,71,32,55,55,54,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,48,10,50,48,10,48,48, 10,70,56,10,48,48,10,55,48,10,56,56,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,53,52,10,69,78,67,79,68,73,78,71,32,55, 55,54,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,49,48,10,50,48,10,48,48,10,70,48,10, 56,56,10,56,56,10,70,48,10,56,48,10,56,48,10,56, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,53, 53,10,69,78,67,79,68,73,78,71,32,55,55,54,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,49,48,10,50,48,10,48,48,10,70,48,10,56, 56,10,56,56,10,56,56,10,70,48,10,56,48,10,56,48, 10,56,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,53,54,10,69,78, 67,79,68,73,78,71,32,55,55,54,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,50,48,10,50, 48,10,48,48,10,70,48,10,56,56,10,56,56,10,70,48, 10,56,48,10,56,48,10,56,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,53,55,10,69,78,67,79,68,73, 78,71,32,55,55,54,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,48,48,10,70,48,10,56,56,10,56,56,10,56,56,10, 70,48,10,56,48,10,56,48,10,56,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,53,56,10,69,78,67,79,68,73,78,71,32,55, 55,54,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,50,48,10,50,48,10,48,48,10,70,48,10, 56,56,10,56,56,10,70,48,10,65,48,10,57,48,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,53, 57,10,69,78,67,79,68,73,78,71,32,55,55,54,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,50,48,10,48,48,10,66,48,10,67, 56,10,56,48,10,56,48,10,56,48,10,56,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,53,65,10,69,78, 67,79,68,73,78,71,32,55,55,55,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 48,10,56,56,10,56,56,10,56,56,10,70,48,10,65,48, 10,57,48,10,56,56,10,56,56,10,48,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,53,66,10,69,78,67,79,68,73, 78,71,32,55,55,55,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,66,48,10,67,56,10,56,48,10,56,48,10, 56,48,10,56,48,10,48,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,53,67,10,69,78,67,79,68,73,78,71,32,55, 55,55,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,70,56,10,48,48,10,70,48,10,56,56,10, 56,56,10,56,56,10,70,48,10,65,48,10,57,48,10,56, 56,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,53, 68,10,69,78,67,79,68,73,78,71,32,55,55,55,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,70,56,10,48,48,10,66,48,10,67, 56,10,56,48,10,56,48,10,56,48,10,56,48,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,53,69,10,69,78, 67,79,68,73,78,71,32,55,55,55,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 48,10,56,56,10,56,56,10,56,56,10,70,48,10,65,48, 10,57,48,10,56,56,10,56,56,10,48,48,10,70,56,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,53,70,10,69,78,67,79,68,73, 78,71,32,55,55,55,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,66,48,10,67,56,10,56,48,10,56,48,10, 56,48,10,56,48,10,48,48,10,70,56,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,54,48,10,69,78,67,79,68,73,78,71,32,55, 55,55,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,50,48,10,50,48,10,48,48,10,55,48,10, 56,56,10,56,48,10,55,48,10,48,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,54, 49,10,69,78,67,79,68,73,78,71,32,55,55,55,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,50,48,10,48,48,10,55,48,10,56, 56,10,54,48,10,49,48,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,54,50,10,69,78, 67,79,68,73,78,71,32,55,55,55,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,55, 48,10,56,56,10,56,48,10,56,48,10,55,48,10,48,56, 10,48,56,10,56,56,10,55,48,10,48,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,54,51,10,69,78,67,79,68,73, 78,71,32,55,55,55,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,48,10,56,56,10,54,48,10,49,48,10, 56,56,10,55,48,10,48,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,54,52,10,69,78,67,79,68,73,78,71,32,55, 55,56,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,52,48,10,49,48,10,50,48,10,48,48,10,55,48,10, 56,56,10,56,48,10,55,48,10,48,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,54, 53,10,69,78,67,79,68,73,78,71,32,55,55,56,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,52,48,10, 49,48,10,50,48,10,48,48,10,48,48,10,55,48,10,56, 56,10,54,48,10,49,48,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,54,54,10,69,78, 67,79,68,73,78,71,32,55,55,56,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,50,48,10,48,48,10,53, 48,10,50,48,10,55,48,10,56,56,10,56,48,10,55,48, 10,48,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,54,55,10,69,78,67,79,68,73, 78,71,32,55,55,56,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,50,48,10,48,48,10,53,48,10,50,48, 10,48,48,10,55,48,10,56,56,10,54,48,10,49,48,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,54,56,10,69,78,67,79,68,73,78,71,32,55, 55,56,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,50,48,10,50,48,10,48,48,10,55,48,10, 56,56,10,56,48,10,55,48,10,48,56,10,56,56,10,55, 48,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,54, 57,10,69,78,67,79,68,73,78,71,32,55,55,56,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,50,48,10,48,48,10,55,48,10,56, 56,10,54,48,10,49,48,10,56,56,10,55,48,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,54,65,10,69,78, 67,79,68,73,78,71,32,55,55,56,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,50,48,10,50, 48,10,48,48,10,70,56,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,54,66,10,69,78,67,79,68,73, 78,71,32,55,55,56,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,50,48,10,50,48,10,48,48, 10,52,48,10,52,48,10,70,48,10,52,48,10,52,48,10, 52,56,10,51,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,54,67,10,69,78,67,79,68,73,78,71,32,55, 55,56,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,56,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,54, 68,10,69,78,67,79,68,73,78,71,32,55,55,56,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,52,48,10,52,48,10,70,48,10,52, 48,10,52,48,10,52,48,10,52,56,10,51,48,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,54,69,10,69,78, 67,79,68,73,78,71,32,55,55,57,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 56,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,48,48,10,70,56,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,54,70,10,69,78,67,79,68,73, 78,71,32,55,55,57,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,52,48, 10,52,48,10,70,48,10,52,48,10,52,48,10,52,48,10, 52,56,10,51,48,10,48,48,10,70,56,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,55,48,10,69,78,67,79,68,73,78,71,32,55, 55,57,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,56,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,48, 48,10,50,48,10,53,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,55, 49,10,69,78,67,79,68,73,78,71,32,55,55,57,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,52,48,10,52,48,10,70,48,10,52, 48,10,52,48,10,52,56,10,51,48,10,48,48,10,50,48, 10,53,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,55,50,10,69,78, 67,79,68,73,78,71,32,55,55,57,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,55,48,10,48,48,10,53,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,55,51,10,69,78,67,79,68,73, 78,71,32,55,55,57,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,56,56,10,56,56,10,56,56,10,56,56,10, 57,56,10,54,56,10,48,48,10,53,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,55,52,10,69,78,67,79,68,73,78,71,32,55, 55,57,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,55,48,10,48, 48,10,50,56,10,53,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,55, 53,10,69,78,67,79,68,73,78,71,32,55,55,57,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,56,10,56, 56,10,56,56,10,57,56,10,54,56,10,48,48,10,50,56, 10,53,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,55,54,10,69,78, 67,79,68,73,78,71,32,55,55,57,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,55,48,10,48,48,10,50,48,10,53,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,55,55,10,69,78,67,79,68,73, 78,71,32,55,55,57,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,56,56,10,56,56,10,56,56,10,57,56,10, 54,56,10,48,48,10,50,48,10,53,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,55,56,10,69,78,67,79,68,73,78,71,32,55, 56,48,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,49,48,10,50,48,10,48,48,10,50,56,10,53,48,10, 48,48,10,56,56,10,56,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,55, 57,10,69,78,67,79,68,73,78,71,32,55,56,48,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,49,48,10, 50,48,10,48,48,10,50,56,10,53,48,10,48,48,10,56, 56,10,56,56,10,56,56,10,57,56,10,54,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,55,65,10,69,78, 67,79,68,73,78,71,32,55,56,48,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,53,48,10,53,48,10,48, 48,10,70,56,10,48,48,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,55,66,10,69,78,67,79,68,73, 78,71,32,55,56,48,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,53,48,10,53,48,10,48,48,10,70,56, 10,48,48,10,56,56,10,56,56,10,56,56,10,56,56,10, 57,56,10,54,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,55,67,10,69,78,67,79,68,73,78,71,32,55, 56,48,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,50,56,10,53,48,10,48,48,10,56,56,10, 56,56,10,56,56,10,53,48,10,53,48,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,55, 68,10,69,78,67,79,68,73,78,71,32,55,56,48,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,56,10,53,48,10,48,48,10,56,56,10,56, 56,10,56,56,10,53,48,10,53,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,55,69,10,69,78, 67,79,68,73,78,71,32,55,56,48,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,53,48,10,53,48, 10,53,48,10,50,48,10,50,48,10,48,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,55,70,10,69,78,67,79,68,73, 78,71,32,55,56,48,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,56,56,10,56,56,10,56,56,10,53,48,10, 53,48,10,50,48,10,48,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,87,103, 114,97,118,101,10,69,78,67,79,68,73,78,71,32,55,56, 48,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,52,48,10,50,48,10,48,48,10,56,56,10,56, 56,10,65,56,10,65,56,10,65,56,10,68,56,10,56,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,119,103,114,97,118,101,10, 69,78,67,79,68,73,78,71,32,55,56,48,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,52,48,10,50,48,10,48,48,10,56,56,10,56,56,10, 65,56,10,65,56,10,65,56,10,53,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,87,97,99,117,116,101,10,69,78,67,79,68, 73,78,71,32,55,56,49,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,49,48,10,50,48,10,48, 48,10,56,56,10,56,56,10,65,56,10,65,56,10,65,56, 10,68,56,10,56,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,119, 97,99,117,116,101,10,69,78,67,79,68,73,78,71,32,55, 56,49,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,49,48,10,50,48,10,48,48,10, 56,56,10,56,56,10,65,56,10,65,56,10,65,56,10,53, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,87,100,105,101,114,101, 115,105,115,10,69,78,67,79,68,73,78,71,32,55,56,49, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,53,48,10,53,48,10,48,48,10,56,56,10,56,56, 10,65,56,10,65,56,10,65,56,10,68,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,119,100,105,101,114,101,115,105, 115,10,69,78,67,79,68,73,78,71,32,55,56,49,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,53,48,10,53,48,10,48,48,10,56,56,10,56, 56,10,65,56,10,65,56,10,65,56,10,53,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,56,54,10,69,78, 67,79,68,73,78,71,32,55,56,49,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,50,48,10,50, 48,10,48,48,10,56,56,10,56,56,10,65,56,10,65,56, 10,65,56,10,68,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,56,55,10,69,78,67,79,68,73, 78,71,32,55,56,49,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,48,48,10,56,56,10,56,56,10,65,56,10,65,56,10, 65,56,10,53,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,56,56,10,69,78,67,79,68,73,78,71,32,55, 56,49,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,65,56,10,65,56,10,65,56,10,68,56,10,56, 56,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,56, 57,10,69,78,67,79,68,73,78,71,32,55,56,49,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,56,10,56, 56,10,65,56,10,65,56,10,65,56,10,53,48,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,56,65,10,69,78, 67,79,68,73,78,71,32,55,56,49,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,50,48,10,50, 48,10,48,48,10,56,56,10,56,56,10,53,48,10,50,48, 10,53,48,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,56,66,10,69,78,67,79,68,73, 78,71,32,55,56,49,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,48,48,10,56,56,10,53,48,10,50,48,10,50,48,10, 53,48,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,56,67,10,69,78,67,79,68,73,78,71,32,55, 56,50,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,53,48,10,53,48,10,48,48,10,56,56,10, 56,56,10,53,48,10,50,48,10,53,48,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,56, 68,10,69,78,67,79,68,73,78,71,32,55,56,50,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,53,48,10,53,48,10,48,48,10,56,56,10,53, 48,10,50,48,10,50,48,10,53,48,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,56,69,10,69,78, 67,79,68,73,78,71,32,55,56,50,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,50,48,10,50, 48,10,48,48,10,56,56,10,56,56,10,53,48,10,53,48, 10,50,48,10,50,48,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,56,70,10,69,78,67,79,68,73, 78,71,32,55,56,50,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,48,48,10,56,56,10,56,56,10,56,56,10,57,56,10, 54,56,10,48,56,10,56,56,10,55,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,57,48,10,69,78,67,79,68,73,78,71,32,55, 56,50,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,51,48,10,52,56,10,48,48,10,70,56,10, 48,56,10,49,48,10,50,48,10,52,48,10,56,48,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,57, 49,10,69,78,67,79,68,73,78,71,32,55,56,50,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,51,48,10,52,56,10,48,48,10,70,56,10,49, 48,10,50,48,10,52,48,10,56,48,10,70,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,57,50,10,69,78, 67,79,68,73,78,71,32,55,56,50,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 56,10,48,56,10,49,48,10,49,48,10,50,48,10,52,48, 10,52,48,10,56,48,10,70,56,10,48,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,57,51,10,69,78,67,79,68,73, 78,71,32,55,56,50,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,56,10,49,48,10,50,48,10,52,48,10, 56,48,10,70,56,10,48,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,57,52,10,69,78,67,79,68,73,78,71,32,55, 56,50,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,56,10,48,56,10,49,48,10, 49,48,10,50,48,10,52,48,10,52,48,10,56,48,10,70, 56,10,48,48,10,70,56,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,57, 53,10,69,78,67,79,68,73,78,71,32,55,56,50,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,70,56,10,49, 48,10,50,48,10,52,48,10,56,48,10,70,56,10,48,48, 10,70,56,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,57,54,10,69,78, 67,79,68,73,78,71,32,55,56,51,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 48,10,56,48,10,56,48,10,66,48,10,67,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,48,48,10,70,56,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,57,55,10,69,78,67,79,68,73, 78,71,32,55,56,51,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,53,48,10,53,48,10,48,48, 10,52,48,10,52,48,10,70,48,10,52,48,10,52,48,10, 52,56,10,51,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,57,56,10,69,78,67,79,68,73,78,71,32,55, 56,51,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,50,48,10,53,48,10,50,48,10,48,48,10, 56,56,10,56,56,10,65,56,10,65,56,10,65,56,10,53, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,57, 57,10,69,78,67,79,68,73,78,71,32,55,56,51,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 50,48,10,53,48,10,50,48,10,48,48,10,56,56,10,56, 56,10,56,56,10,57,56,10,54,56,10,48,56,10,56,56, 10,55,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,57,65,10,69,78, 67,79,68,73,78,71,32,55,56,51,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,56,10,48,52,10,48, 52,10,48,56,10,48,48,10,55,48,10,48,56,10,55,56, 10,56,56,10,56,56,10,55,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,57,66,10,69,78,67,79,68,73, 78,71,32,55,56,51,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,50,48,10,50,48,10,48,48, 10,51,48,10,52,56,10,52,48,10,67,48,10,52,48,10, 52,48,10,52,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,65,48,10,69,78,67,79,68,73,78,71,32,55, 56,52,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,53,48,10,56,56,10, 56,56,10,56,56,10,70,56,10,56,56,10,56,56,10,56, 56,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,65, 49,10,69,78,67,79,68,73,78,71,32,55,56,52,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,48,10,48, 56,10,55,56,10,56,56,10,57,56,10,54,56,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,65,50,10,69,78, 67,79,68,73,78,71,32,55,56,52,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,50,48,10,53,48,10,49, 48,10,50,48,10,50,48,10,53,48,10,56,56,10,56,56, 10,70,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,65,51,10,69,78,67,79,68,73, 78,71,32,55,56,52,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,50,48,10,53,48,10,49,48,10,50,48, 10,50,48,10,55,48,10,48,56,10,55,56,10,56,56,10, 57,56,10,54,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,65,52,10,69,78,67,79,68,73,78,71,32,55, 56,52,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,52,52,10,65,56,10,48,48,10,50,48,10, 53,48,10,56,56,10,56,56,10,70,56,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,65, 53,10,69,78,67,79,68,73,78,71,32,55,56,52,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,52,52,10,65,56,10,48,48,10,55,48,10,48, 56,10,55,56,10,56,56,10,57,56,10,54,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,65,54,10,69,78, 67,79,68,73,78,71,32,55,56,52,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,56,56,10,53, 52,10,48,48,10,50,48,10,53,48,10,56,56,10,56,56, 10,70,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,65,55,10,69,78,67,79,68,73, 78,71,32,55,56,52,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,53,52, 10,48,48,10,55,48,10,48,56,10,55,56,10,56,56,10, 57,56,10,54,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,65,56,10,69,78,67,79,68,73,78,71,32,55, 56,52,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,56,10,53,52,10,65,52,10,48,56,10,50,56,10, 53,48,10,56,56,10,56,56,10,70,56,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,65, 57,10,69,78,67,79,68,73,78,71,32,55,56,52,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,56,10,53,52,10,65,52,10,48,56,10,55,48,10,48, 56,10,55,56,10,56,56,10,57,56,10,54,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,65,65,10,69,78, 67,79,68,73,78,71,32,55,56,53,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,50,56,10,53,48,10,48, 48,10,51,48,10,52,56,10,50,48,10,53,48,10,56,56, 10,70,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,65,66,10,69,78,67,79,68,73, 78,71,32,55,56,53,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,50,56,10,53,48,10,51,48,10,52,56, 10,48,48,10,55,48,10,48,56,10,55,56,10,56,56,10, 57,56,10,54,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,65,67,10,69,78,67,79,68,73,78,71,32,55, 56,53,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,51,48,10,52,56,10,48,48,10,50,48,10, 53,48,10,56,56,10,56,56,10,70,56,10,56,56,10,56, 56,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,65, 68,10,69,78,67,79,68,73,78,71,32,55,56,53,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,51,48,10,52,56,10,48,48,10,55,48,10,48, 56,10,55,56,10,56,56,10,57,56,10,54,56,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,65,69,10,69,78, 67,79,68,73,78,71,32,55,56,53,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,49,48,10,50,48,10,56, 56,10,55,48,10,48,48,10,50,48,10,53,48,10,56,56, 10,70,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,65,70,10,69,78,67,79,68,73, 78,71,32,55,56,53,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,49,48,10,50,48,10,56,56,10,55,48, 10,48,48,10,55,48,10,48,56,10,55,56,10,56,56,10, 57,56,10,54,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,66,48,10,69,78,67,79,68,73,78,71,32,55, 56,53,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,52,48,10,50,48,10,56,56,10,55,48,10,48,48,10, 50,48,10,53,48,10,56,56,10,70,56,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,66, 49,10,69,78,67,79,68,73,78,71,32,55,56,53,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,52,48,10, 50,48,10,56,56,10,55,48,10,48,48,10,55,48,10,48, 56,10,55,56,10,56,56,10,57,56,10,54,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,66,50,10,69,78, 67,79,68,73,78,71,32,55,56,53,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,50,48,10,53,48,10,49, 48,10,65,56,10,55,48,10,50,48,10,53,48,10,56,56, 10,56,56,10,70,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,66,51,10,69,78,67,79,68,73, 78,71,32,55,56,53,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,50,48,10,53,48,10,49,48,10,65,56, 10,55,48,10,48,48,10,55,48,10,48,56,10,55,56,10, 56,56,10,55,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,66,52,10,69,78,67,79,68,73,78,71,32,55, 56,54,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,53,48,10,65,48,10,56,56,10,55,48,10,48,48,10, 50,48,10,53,48,10,56,56,10,70,56,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,66, 53,10,69,78,67,79,68,73,78,71,32,55,56,54,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,53,48,10, 65,48,10,56,56,10,55,48,10,48,48,10,55,48,10,48, 56,10,55,56,10,56,56,10,57,56,10,54,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,66,54,10,69,78, 67,79,68,73,78,71,32,55,56,54,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,56,56,10,55, 48,10,48,48,10,50,48,10,53,48,10,56,56,10,56,56, 10,70,56,10,56,56,10,56,56,10,48,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,66,55,10,69,78,67,79,68,73, 78,71,32,55,56,54,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,55,48, 10,48,48,10,55,48,10,48,56,10,55,56,10,56,56,10, 57,56,10,54,56,10,48,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,66,56,10,69,78,67,79,68,73,78,71,32,55, 56,54,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,56,10,56,48,10,56,48,10, 56,48,10,70,48,10,56,48,10,56,48,10,56,48,10,70, 56,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,66, 57,10,69,78,67,79,68,73,78,71,32,55,56,54,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,48,10,56, 56,10,70,56,10,56,48,10,56,56,10,55,48,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,66,65,10,69,78, 67,79,68,73,78,71,32,55,56,54,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,50,48,10,53,48,10,49, 48,10,50,48,10,70,56,10,56,48,10,56,48,10,70,48, 10,56,48,10,56,48,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,66,66,10,69,78,67,79,68,73, 78,71,32,55,56,54,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,50,48,10,53,48,10,49,48,10,50,48, 10,50,48,10,55,48,10,56,56,10,70,56,10,56,48,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,66,67,10,69,78,67,79,68,73,78,71,32,55, 56,54,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,50,56,10,53,48,10,48,48,10,70,56,10, 56,48,10,56,48,10,70,48,10,56,48,10,56,48,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,66, 68,10,69,78,67,79,68,73,78,71,32,55,56,54,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,56,10,53,48,10,48,48,10,55,48,10,56, 56,10,70,56,10,56,48,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,66,69,10,69,78, 67,79,68,73,78,71,32,55,56,55,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,52,52,10,65, 56,10,48,48,10,70,56,10,56,48,10,56,48,10,70,48, 10,56,48,10,56,48,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,66,70,10,69,78,67,79,68,73, 78,71,32,55,56,55,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,52,52,10,65,56, 10,48,48,10,55,48,10,56,56,10,70,56,10,56,48,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,67,48,10,69,78,67,79,68,73,78,71,32,55, 56,55,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,56,56,10,53,52,10,48,48,10,70,56,10, 56,48,10,56,48,10,70,48,10,56,48,10,56,48,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,67, 49,10,69,78,67,79,68,73,78,71,32,55,56,55,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,53,52,10,48,48,10,55,48,10,56, 56,10,70,56,10,56,48,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,67,50,10,69,78, 67,79,68,73,78,71,32,55,56,55,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,56,10,53,52,10,65, 56,10,48,56,10,48,48,10,70,56,10,56,48,10,69,48, 10,56,48,10,56,48,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,67,51,10,69,78,67,79,68,73, 78,71,32,55,56,55,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,56,10,53,52,10,65,56, 10,48,56,10,55,48,10,56,56,10,70,56,10,56,48,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,67,52,10,69,78,67,79,68,73,78,71,32,55, 56,55,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,50,56,10,53,48,10,51,48,10,52,56,10,48,48,10, 70,56,10,56,48,10,70,48,10,56,48,10,56,48,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,67, 53,10,69,78,67,79,68,73,78,71,32,55,56,55,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,50,56,10, 53,48,10,51,48,10,52,56,10,48,48,10,55,48,10,56, 56,10,70,56,10,56,48,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,67,54,10,69,78, 67,79,68,73,78,71,32,55,56,55,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,51,48,10,52, 56,10,48,48,10,70,56,10,56,48,10,56,48,10,70,48, 10,56,48,10,56,48,10,70,56,10,48,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,67,55,10,69,78,67,79,68,73, 78,71,32,55,56,55,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,51,48,10,52,56, 10,48,48,10,55,48,10,56,56,10,70,56,10,56,48,10, 56,56,10,55,48,10,48,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,67,56,10,69,78,67,79,68,73,78,71,32,55, 56,56,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,50,48,10,53,48,10,49,48,10,50,48,10,70,56,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,67, 57,10,69,78,67,79,68,73,78,71,32,55,56,56,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,50,48,10, 53,48,10,50,48,10,50,48,10,48,48,10,54,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,67,65,10,69,78, 67,79,68,73,78,71,32,55,56,56,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,55, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,55,48,10,48,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,67,66,10,69,78,67,79,68,73, 78,71,32,55,56,56,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,50,48, 10,48,48,10,54,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,70,56,10,48,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,67,67,10,69,78,67,79,68,73,78,71,32,55, 56,56,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,55,48,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,67, 68,10,69,78,67,79,68,73,78,71,32,55,56,56,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,67,69,10,69,78, 67,79,68,73,78,71,32,55,56,56,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,50,48,10,53,48,10,49, 48,10,50,48,10,55,48,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,67,70,10,69,78,67,79,68,73, 78,71,32,55,56,56,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,50,48,10,53,48,10,49,48,10,50,48, 10,50,48,10,55,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,68,48,10,69,78,67,79,68,73,78,71,32,55, 56,56,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,52,52,10,65,56,10,48,48,10,55,48,10, 56,56,10,56,56,10,56,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,68, 49,10,69,78,67,79,68,73,78,71,32,55,56,56,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,52,52,10,65,56,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,68,50,10,69,78, 67,79,68,73,78,71,32,55,56,57,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,56,56,10,53, 52,10,48,48,10,55,48,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,68,51,10,69,78,67,79,68,73, 78,71,32,55,56,57,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,53,52, 10,48,48,10,55,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,68,52,10,69,78,67,79,68,73,78,71,32,55, 56,57,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,56,10,53,52,10,65,52,10,48,56,10,55,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,68, 53,10,69,78,67,79,68,73,78,71,32,55,56,57,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,56,10,53,52,10,65,52,10,48,56,10,55,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,68,54,10,69,78, 67,79,68,73,78,71,32,55,56,57,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,50,56,10,53,48,10,51, 56,10,52,56,10,55,48,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,68,55,10,69,78,67,79,68,73, 78,71,32,55,56,57,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,50,56,10,53,48,10,51,48,10,52,56, 10,48,48,10,55,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,68,56,10,69,78,67,79,68,73,78,71,32,55, 56,57,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,51,48,10,52,56,10,48,48,10,55,48,10, 56,56,10,56,56,10,56,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,68, 57,10,69,78,67,79,68,73,78,71,32,55,56,57,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,51,48,10,52,56,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,68,65,10,69,78, 67,79,68,73,78,71,32,55,56,57,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,50,48,10,52, 48,10,48,48,10,54,52,10,57,52,10,57,56,10,57,48, 10,57,48,10,57,48,10,54,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,68,66,10,69,78,67,79,68,73, 78,71,32,55,56,57,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,52,48, 10,48,48,10,54,52,10,57,52,10,57,56,10,57,48,10, 57,48,10,54,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,68,67,10,69,78,67,79,68,73,78,71,32,55, 57,48,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,52,48,10,50,48,10,48,48,10,54,52,10, 57,52,10,57,56,10,57,48,10,57,48,10,57,48,10,54, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,68, 68,10,69,78,67,79,68,73,78,71,32,55,57,48,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,52,48,10,50,48,10,48,48,10,54,52,10,57, 52,10,57,56,10,57,48,10,57,48,10,54,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,68,69,10,69,78, 67,79,68,73,78,71,32,55,57,48,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,50,48,10,53,48,10,49, 48,10,50,48,10,54,52,10,57,52,10,57,56,10,57,48, 10,57,48,10,57,48,10,54,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,68,70,10,69,78,67,79,68,73, 78,71,32,55,57,48,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,50,48,10,53,48,10,49,48, 10,50,48,10,54,52,10,57,52,10,57,56,10,57,48,10, 57,48,10,54,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,69,48,10,69,78,67,79,68,73,78,71,32,55, 57,48,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,53,48,10,65,48,10,48,48,10,54,52,10, 57,52,10,57,56,10,57,48,10,57,48,10,57,48,10,54, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,69, 49,10,69,78,67,79,68,73,78,71,32,55,57,48,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,53,48,10,65,48,10,48,48,10,54,52,10,57, 52,10,57,56,10,57,48,10,57,48,10,54,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,69,50,10,69,78, 67,79,68,73,78,71,32,55,57,48,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,54, 52,10,57,52,10,57,56,10,57,48,10,57,48,10,57,48, 10,57,48,10,57,48,10,54,48,10,48,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,69,51,10,69,78,67,79,68,73, 78,71,32,55,57,48,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,54,52,10,57,52,10,57,56,10,57,48,10, 57,48,10,54,48,10,48,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,69,52,10,69,78,67,79,68,73,78,71,32,55, 57,48,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,69, 53,10,69,78,67,79,68,73,78,71,32,55,57,48,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,56,10,56, 56,10,56,56,10,56,56,10,57,56,10,54,56,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,69,54,10,69,78, 67,79,68,73,78,71,32,55,57,49,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,50,48,10,53,48,10,49, 48,10,50,48,10,65,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,69,55,10,69,78,67,79,68,73, 78,71,32,55,57,49,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,50,48,10,53,48,10,49,48,10,50,48, 10,50,48,10,56,56,10,56,56,10,56,56,10,56,56,10, 57,56,10,54,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,69,56,10,69,78,67,79,68,73,78,71,32,55, 57,49,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,50,48,10,52,48,10,48,48,10,57,52,10, 57,52,10,57,56,10,57,48,10,57,48,10,57,48,10,54, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,69, 57,10,69,78,67,79,68,73,78,71,32,55,57,49,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,52,48,10,48,48,10,57,52,10,57, 52,10,57,56,10,57,48,10,66,48,10,53,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,69,65,10,69,78, 67,79,68,73,78,71,32,55,57,49,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,52,48,10,50, 48,10,48,48,10,57,52,10,57,52,10,57,56,10,57,48, 10,57,48,10,57,48,10,54,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,69,66,10,69,78,67,79,68,73, 78,71,32,55,57,49,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,52,48,10,50,48, 10,48,48,10,57,52,10,57,52,10,57,56,10,57,48,10, 66,48,10,53,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,69,67,10,69,78,67,79,68,73,78,71,32,55, 57,49,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,50,48,10,53,48,10,49,48,10,50,48,10,66,52,10, 57,52,10,57,56,10,57,48,10,57,48,10,57,48,10,54, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,69, 68,10,69,78,67,79,68,73,78,71,32,55,57,49,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,50,48,10, 53,48,10,49,48,10,50,48,10,50,48,10,57,52,10,57, 52,10,57,56,10,57,48,10,66,48,10,53,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,69,69,10,69,78, 67,79,68,73,78,71,32,55,57,49,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,53,48,10,65, 48,10,48,48,10,57,52,10,57,52,10,57,56,10,57,48, 10,57,48,10,57,48,10,54,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,69,70,10,69,78,67,79,68,73, 78,71,32,55,57,49,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,53,48,10,65,48, 10,48,48,10,57,52,10,57,52,10,57,56,10,57,48,10, 66,48,10,53,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,70,48,10,69,78,67,79,68,73,78,71,32,55, 57,50,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,57,52,10, 57,52,10,57,56,10,57,48,10,57,48,10,57,48,10,54, 48,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,70, 49,10,69,78,67,79,68,73,78,71,32,55,57,50,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,57,52,10,57, 52,10,57,56,10,57,48,10,66,48,10,53,48,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,89,103,114,97,118,101,10,69,78,67, 79,68,73,78,71,32,55,57,50,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,52,48,10,50,48, 10,48,48,10,56,56,10,56,56,10,53,48,10,53,48,10, 50,48,10,50,48,10,50,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,121,103,114,97,118,101,10,69,78,67,79,68,73,78,71, 32,55,57,50,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,52,48,10,50,48,10,48, 48,10,56,56,10,56,56,10,56,56,10,57,56,10,54,56, 10,48,56,10,56,56,10,55,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,70,52,10,69,78,67,79,68,73,78,71,32,55,57,50, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,56,10,56,56,10,53,48,10,53,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 48,48,10,50,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,70,53,10, 69,78,67,79,68,73,78,71,32,55,57,50,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,56,56,10,56,56,10,56,56,10,57,56,10, 54,56,10,48,56,10,56,56,10,55,48,10,48,48,10,50, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,69,70,54,10,69,78,67,79, 68,73,78,71,32,55,57,50,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,50,48,10,53,48,10,49,48,10, 50,48,10,56,56,10,53,48,10,53,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,69,70,55,10,69,78,67,79,68,73,78,71, 32,55,57,50,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,50,48,10,53,48,10,49,48,10,50,48,10,50, 48,10,56,56,10,56,56,10,56,56,10,57,56,10,54,56, 10,48,56,10,56,56,10,55,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,70,56,10,69,78,67,79,68,73,78,71,32,55,57,50, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,50,56,10,53,48,10,48,48,10,56,56,10,53,48, 10,53,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,70,57,10, 69,78,67,79,68,73,78,71,32,55,57,50,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,50,56,10,53,48,10,48,48,10,56,56,10,56,56,10, 56,56,10,57,56,10,54,56,10,48,56,10,56,56,10,55, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,48,48,10,69,78,67,79, 68,73,78,71,32,55,57,51,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,51,48,10,49,48,10, 50,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,57,56,10,54,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,48,49,10,69,78,67,79,68,73,78,71, 32,55,57,51,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,51,48,10,50,48,10,49,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,57,56, 10,54,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,48,50,10,69,78,67,79,68,73,78,71,32,55,57,51, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,68,48,10,52,56,10,56,48,10,48,48,10,55,48, 10,56,56,10,56,56,10,56,56,10,57,56,10,54,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,48,51,10, 69,78,67,79,68,73,78,71,32,55,57,51,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,68,48, 10,56,56,10,52,48,10,48,48,10,55,48,10,56,56,10, 56,56,10,56,56,10,57,56,10,54,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,48,52,10,69,78,67,79, 68,73,78,71,32,55,57,52,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,67,56,10,53,48,10, 56,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,57,56,10,54,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,48,53,10,69,78,67,79,68,73,78,71, 32,55,57,52,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,67,56,10,57,48,10,52,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,57,56, 10,54,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,48,54,10,69,78,67,79,68,73,78,71,32,55,57,52, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,54, 56,10,66,48,10,49,48,10,50,48,10,48,48,10,55,48, 10,56,56,10,56,56,10,56,56,10,57,56,10,54,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,48,55,10, 69,78,67,79,68,73,78,71,32,55,57,52,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,54,56,10,66,48, 10,50,48,10,49,48,10,48,48,10,55,48,10,56,56,10, 56,56,10,56,56,10,57,56,10,54,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,48,56,10,69,78,67,79, 68,73,78,71,32,55,57,52,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,68,48,10, 54,56,10,65,56,10,50,56,10,50,56,10,51,56,10,50, 56,10,50,56,10,50,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,48,57,10,69,78,67,79,68,73,78,71, 32,55,57,52,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,68,48,10,65,56,10,54, 56,10,50,56,10,50,56,10,51,56,10,50,56,10,50,56, 10,50,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,48,65,10,69,78,67,79,68,73,78,71,32,55,57,52, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,68,48,10,54,56,10,65,56,10,65,56, 10,54,56,10,51,56,10,50,56,10,50,56,10,50,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,48,66,10, 69,78,67,79,68,73,78,71,32,55,57,52,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,68,48,10,65,56,10,54,56,10,65,56,10,54,56,10, 51,56,10,50,56,10,50,56,10,50,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,48,67,10,69,78,67,79, 68,73,78,71,32,55,57,52,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,68,48,10, 54,56,10,65,56,10,54,56,10,65,56,10,51,56,10,50, 56,10,50,56,10,50,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,48,68,10,69,78,67,79,68,73,78,71, 32,55,57,52,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,68,48,10,65,56,10,54, 56,10,54,56,10,65,56,10,51,56,10,50,56,10,50,56, 10,50,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,48,69,10,69,78,67,79,68,73,78,71,32,55,57,53, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,68,48,10,50,56,10,69,56,10,54,56, 10,65,56,10,51,56,10,50,56,10,50,56,10,50,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,48,70,10, 69,78,67,79,68,73,78,71,32,55,57,53,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,68,48,10,50,56,10,69,56,10,65,56,10,54,56,10, 51,56,10,50,56,10,50,56,10,50,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,49,48,10,69,78,67,79, 68,73,78,71,32,55,57,53,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,51,48,10,49,48,10, 50,48,10,48,48,10,55,48,10,56,56,10,54,48,10,56, 48,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,49,49,10,69,78,67,79,68,73,78,71, 32,55,57,53,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,51,48,10,50,48,10,49,48,10,48, 48,10,55,48,10,56,56,10,54,48,10,56,48,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,49,50,10,69,78,67,79,68,73,78,71,32,55,57,53, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,68,48,10,52,56,10,56,48,10,48,48,10,55,48, 10,56,56,10,54,48,10,56,48,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,49,51,10, 69,78,67,79,68,73,78,71,32,55,57,53,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,68,48, 10,56,56,10,52,48,10,48,48,10,55,48,10,56,56,10, 54,48,10,56,48,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,49,52,10,69,78,67,79, 68,73,78,71,32,55,57,53,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,67,56,10,53,48,10, 56,48,10,48,48,10,55,48,10,56,56,10,54,48,10,56, 48,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,49,53,10,69,78,67,79,68,73,78,71, 32,55,57,53,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,67,56,10,57,48,10,52,48,10,48, 48,10,55,48,10,56,56,10,54,48,10,56,48,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,49,56,10,69,78,67,79,68,73,78,71,32,55,57,54, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,70,56,10,54,48,10,65,48,10,50,48, 10,51,48,10,50,48,10,50,48,10,50,48,10,51,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,49,57,10, 69,78,67,79,68,73,78,71,32,55,57,54,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,56,10,65,48,10,54,48,10,50,48,10,51,48,10, 50,48,10,50,48,10,50,48,10,51,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,49,65,10,69,78,67,79, 68,73,78,71,32,55,57,54,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,70,56,10, 54,48,10,65,48,10,65,48,10,55,48,10,50,48,10,50, 48,10,50,48,10,51,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,49,66,10,69,78,67,79,68,73,78,71, 32,55,57,54,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,70,56,10,65,48,10,54, 48,10,65,48,10,55,48,10,50,48,10,50,48,10,50,48, 10,51,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,49,67,10,69,78,67,79,68,73,78,71,32,55,57,54, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,70,56,10,54,48,10,65,48,10,54,48, 10,66,48,10,50,48,10,50,48,10,50,48,10,51,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,49,68,10, 69,78,67,79,68,73,78,71,32,55,57,54,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,56,10,65,48,10,54,48,10,54,48,10,66,48,10, 50,48,10,50,48,10,50,48,10,51,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,50,48,10,69,78,67,79, 68,73,78,71,32,55,57,54,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,51,48,10,49,48,10, 50,48,10,48,48,10,66,48,10,67,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,48,56,10,48,56,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,50,49,10,69,78,67,79,68,73,78,71, 32,55,57,54,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,51,48,10,50,48,10,49,48,10,48, 48,10,66,48,10,67,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,48,56,10,48,56,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,50,50,10,69,78,67,79,68,73,78,71,32,55,57,55, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,68,48,10,52,56,10,56,48,10,48,48,10,66,48, 10,67,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 48,56,10,48,56,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,50,51,10, 69,78,67,79,68,73,78,71,32,55,57,55,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,68,48, 10,56,56,10,52,48,10,48,48,10,66,48,10,67,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,48,56,10,48, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,50,52,10,69,78,67,79, 68,73,78,71,32,55,57,55,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,67,56,10,53,48,10, 56,48,10,48,48,10,66,48,10,67,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,48,56,10,48,56,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,50,53,10,69,78,67,79,68,73,78,71, 32,55,57,55,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,67,56,10,57,48,10,52,48,10,48, 48,10,66,48,10,67,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,48,56,10,48,56,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,50,54,10,69,78,67,79,68,73,78,71,32,55,57,55, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,54, 56,10,66,48,10,49,48,10,50,48,10,48,48,10,66,48, 10,67,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 48,56,10,48,56,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,50,55,10, 69,78,67,79,68,73,78,71,32,55,57,55,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,54,56,10,66,48, 10,50,48,10,49,48,10,48,48,10,66,48,10,67,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,48,56,10,48, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,50,56,10,69,78,67,79, 68,73,78,71,32,55,57,55,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,69,56,10, 54,56,10,65,56,10,50,56,10,51,56,10,50,56,10,50, 56,10,50,56,10,50,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,50,57,10,69,78,67,79,68,73,78,71, 32,55,57,55,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,69,56,10,65,56,10,54, 56,10,50,56,10,51,56,10,50,56,10,50,56,10,50,56, 10,50,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,50,65,10,69,78,67,79,68,73,78,71,32,55,57,55, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,69,56,10,54,56,10,65,56,10,65,56, 10,55,56,10,50,56,10,50,56,10,50,56,10,50,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,50,66,10, 69,78,67,79,68,73,78,71,32,55,57,55,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,69,56,10,65,56,10,54,56,10,65,56,10,55,56,10, 50,56,10,50,56,10,50,56,10,50,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,50,67,10,69,78,67,79, 68,73,78,71,32,55,57,56,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,69,56,10, 54,56,10,65,56,10,54,56,10,66,56,10,50,56,10,50, 56,10,50,56,10,50,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,50,68,10,69,78,67,79,68,73,78,71, 32,55,57,56,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,69,56,10,65,56,10,54, 56,10,54,56,10,66,56,10,50,56,10,50,56,10,50,56, 10,50,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,50,69,10,69,78,67,79,68,73,78,71,32,55,57,56, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,69,56,10,50,56,10,69,56,10,54,56, 10,66,56,10,50,56,10,50,56,10,50,56,10,50,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,50,70,10, 69,78,67,79,68,73,78,71,32,55,57,56,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,69,56,10,50,56,10,69,56,10,65,56,10,55,56,10, 50,56,10,50,56,10,50,56,10,50,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,51,48,10,69,78,67,79, 68,73,78,71,32,55,57,56,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,54,48,10,50,48,10, 52,48,10,48,48,10,52,48,10,52,48,10,52,48,10,52, 48,10,53,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,51,49,10,69,78,67,79,68,73,78,71, 32,55,57,56,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,54,48,10,52,48,10,50,48,10,48, 48,10,52,48,10,52,48,10,52,48,10,52,48,10,53,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,51,50,10,69,78,67,79,68,73,78,71,32,55,57,56, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,68,48,10,52,56,10,56,48,10,48,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,56,10,49,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,51,51,10, 69,78,67,79,68,73,78,71,32,55,57,56,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,68,48, 10,56,56,10,52,48,10,48,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,56,10,49,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,51,52,10,69,78,67,79, 68,73,78,71,32,55,57,56,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,67,56,10,53,48,10, 56,48,10,48,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,56,10,49,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,51,53,10,69,78,67,79,68,73,78,71, 32,55,57,56,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,67,56,10,57,48,10,52,48,10,48, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,56, 10,49,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,51,54,10,69,78,67,79,68,73,78,71,32,55,57,57, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,54, 56,10,66,48,10,49,48,10,50,48,10,48,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,56,10,49,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,51,55,10, 69,78,67,79,68,73,78,71,32,55,57,57,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,54,56,10,66,48, 10,50,48,10,49,48,10,48,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,56,10,49,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,51,56,10,69,78,67,79, 68,73,78,71,32,55,57,57,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,70,56,10, 53,48,10,57,48,10,49,48,10,49,48,10,49,48,10,49, 48,10,49,48,10,51,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,51,57,10,69,78,67,79,68,73,78,71, 32,55,57,57,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,70,56,10,57,48,10,53, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,49,48, 10,51,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,51,65,10,69,78,67,79,68,73,78,71,32,55,57,57, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,70,56,10,53,48,10,57,48,10,57,48, 10,53,48,10,49,48,10,49,48,10,49,48,10,51,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,51,66,10, 69,78,67,79,68,73,78,71,32,55,57,57,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,56,10,57,48,10,53,48,10,57,48,10,53,48,10, 49,48,10,49,48,10,49,48,10,51,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,51,67,10,69,78,67,79, 68,73,78,71,32,55,57,57,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,70,56,10, 53,48,10,57,48,10,53,48,10,57,48,10,49,48,10,49, 48,10,49,48,10,51,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,51,68,10,69,78,67,79,68,73,78,71, 32,55,57,57,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,70,56,10,57,48,10,53, 48,10,51,48,10,53,48,10,49,48,10,49,48,10,49,48, 10,51,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,51,69,10,69,78,67,79,68,73,78,71,32,55,57,57, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,70,56,10,49,48,10,68,48,10,53,48, 10,57,48,10,49,48,10,49,48,10,49,48,10,51,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,51,70,10, 69,78,67,79,68,73,78,71,32,55,57,57,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,56,10,49,48,10,68,48,10,57,48,10,53,48,10, 49,48,10,49,48,10,49,48,10,51,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,52,48,10,69,78,67,79, 68,73,78,71,32,56,48,48,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,51,48,10,49,48,10, 50,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,52,49,10,69,78,67,79,68,73,78,71, 32,56,48,48,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,51,48,10,50,48,10,49,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,52,50,10,69,78,67,79,68,73,78,71,32,56,48,48, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,68,48,10,52,56,10,56,48,10,48,48,10,55,48, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,52,51,10, 69,78,67,79,68,73,78,71,32,56,48,48,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,68,48, 10,56,56,10,52,48,10,48,48,10,55,48,10,56,56,10, 56,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,52,52,10,69,78,67,79, 68,73,78,71,32,56,48,48,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,67,56,10,53,48,10, 56,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,52,53,10,69,78,67,79,68,73,78,71, 32,56,48,48,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,67,56,10,57,48,10,52,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,52,56,10,69,78,67,79,68,73,78,71,32,56,48,48, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,68,48,10,54,56,10,65,56,10,50,56, 10,50,56,10,50,56,10,50,56,10,50,56,10,49,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,52,57,10, 69,78,67,79,68,73,78,71,32,56,48,48,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,68,48,10,65,56,10,54,56,10,50,56,10,50,56,10, 50,56,10,50,56,10,50,56,10,49,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,52,65,10,69,78,67,79, 68,73,78,71,32,56,48,49,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,68,48,10, 54,56,10,65,56,10,65,56,10,54,56,10,50,56,10,50, 56,10,50,56,10,49,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,52,66,10,69,78,67,79,68,73,78,71, 32,56,48,49,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,68,48,10,65,56,10,54, 56,10,65,56,10,54,56,10,50,56,10,50,56,10,50,56, 10,49,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,52,67,10,69,78,67,79,68,73,78,71,32,56,48,49, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,68,48,10,54,56,10,65,56,10,54,56, 10,65,56,10,50,56,10,50,56,10,50,56,10,49,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,52,68,10, 69,78,67,79,68,73,78,71,32,56,48,49,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,68,48,10,65,56,10,54,56,10,54,56,10,65,56,10, 50,56,10,50,56,10,50,56,10,49,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,53,48,10,69,78,67,79, 68,73,78,71,32,56,48,49,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,51,48,10,49,48,10, 50,48,10,48,48,10,56,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,53,49,10,69,78,67,79,68,73,78,71, 32,56,48,49,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,51,48,10,50,48,10,49,48,10,48, 48,10,56,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,53,50,10,69,78,67,79,68,73,78,71,32,56,48,49, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,68,48,10,52,56,10,56,48,10,48,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,53,51,10, 69,78,67,79,68,73,78,71,32,56,48,49,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,68,48, 10,56,56,10,52,48,10,48,48,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,53,52,10,69,78,67,79, 68,73,78,71,32,56,48,50,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,67,56,10,53,48,10, 56,48,10,48,48,10,56,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,53,53,10,69,78,67,79,68,73,78,71, 32,56,48,50,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,67,56,10,57,48,10,52,48,10,48, 48,10,56,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,53,54,10,69,78,67,79,68,73,78,71,32,56,48,50, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,54, 56,10,66,48,10,49,48,10,50,48,10,48,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,53,55,10, 69,78,67,79,68,73,78,71,32,56,48,50,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,54,56,10,66,48, 10,50,48,10,49,48,10,48,48,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,53,57,10,69,78,67,79, 68,73,78,71,32,56,48,50,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,69,56,10, 65,56,10,54,56,10,50,56,10,49,48,10,49,48,10,49, 48,10,49,48,10,49,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,53,66,10,69,78,67,79,68,73,78,71, 32,56,48,50,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,69,56,10,65,56,10,54, 56,10,65,56,10,53,48,10,49,48,10,49,48,10,49,48, 10,49,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,53,68,10,69,78,67,79,68,73,78,71,32,56,48,50, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,69,56,10,65,56,10,54,56,10,54,56, 10,57,48,10,49,48,10,49,48,10,49,48,10,49,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,53,70,10, 69,78,67,79,68,73,78,71,32,56,48,51,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,69,56,10,50,56,10,69,56,10,65,56,10,53,48,10, 49,48,10,49,48,10,49,48,10,49,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,54,48,10,69,78,67,79, 68,73,78,71,32,56,48,51,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,51,48,10,49,48,10, 50,48,10,48,48,10,56,56,10,65,56,10,65,56,10,65, 56,10,65,56,10,53,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,54,49,10,69,78,67,79,68,73,78,71, 32,56,48,51,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,51,48,10,50,48,10,49,48,10,48, 48,10,56,56,10,65,56,10,65,56,10,65,56,10,65,56, 10,53,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,54,50,10,69,78,67,79,68,73,78,71,32,56,48,51, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,68,48,10,52,56,10,56,48,10,48,48,10,56,56, 10,65,56,10,65,56,10,65,56,10,65,56,10,53,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,54,51,10, 69,78,67,79,68,73,78,71,32,56,48,51,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,68,48, 10,56,56,10,52,48,10,48,48,10,56,56,10,65,56,10, 65,56,10,65,56,10,65,56,10,53,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,54,52,10,69,78,67,79, 68,73,78,71,32,56,48,51,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,67,56,10,53,48,10, 56,48,10,48,48,10,56,56,10,65,56,10,65,56,10,65, 56,10,65,56,10,53,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,54,53,10,69,78,67,79,68,73,78,71, 32,56,48,51,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,67,56,10,57,48,10,52,48,10,48, 48,10,56,56,10,65,56,10,65,56,10,65,56,10,65,56, 10,53,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,54,54,10,69,78,67,79,68,73,78,71,32,56,48,51, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,54, 56,10,66,48,10,49,48,10,50,48,10,48,48,10,56,56, 10,65,56,10,65,56,10,65,56,10,65,56,10,53,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,54,55,10, 69,78,67,79,68,73,78,71,32,56,48,51,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,54,56,10,66,48, 10,50,48,10,49,48,10,48,48,10,56,56,10,65,56,10, 65,56,10,65,56,10,65,56,10,53,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,54,56,10,69,78,67,79, 68,73,78,71,32,56,48,52,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,68,48,10, 54,56,10,65,56,10,50,56,10,50,56,10,50,56,10,49, 48,10,49,48,10,50,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,54,57,10,69,78,67,79,68,73,78,71, 32,56,48,52,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,68,48,10,65,56,10,54, 56,10,50,56,10,50,56,10,50,56,10,49,48,10,49,48, 10,50,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,54,65,10,69,78,67,79,68,73,78,71,32,56,48,52, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,68,48,10,54,56,10,65,56,10,65,56, 10,54,56,10,50,56,10,49,48,10,49,48,10,50,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,54,66,10, 69,78,67,79,68,73,78,71,32,56,48,52,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,68,48,10,65,56,10,54,56,10,65,56,10,54,56,10, 50,56,10,49,48,10,49,48,10,50,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,54,67,10,69,78,67,79, 68,73,78,71,32,56,48,52,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,68,48,10, 54,56,10,65,56,10,54,56,10,65,56,10,50,56,10,49, 48,10,49,48,10,50,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,54,68,10,69,78,67,79,68,73,78,71, 32,56,48,52,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,68,48,10,65,56,10,54, 56,10,54,56,10,65,56,10,50,56,10,49,48,10,49,48, 10,50,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,54,69,10,69,78,67,79,68,73,78,71,32,56,48,52, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,68,48,10,50,56,10,69,56,10,54,56, 10,65,56,10,50,56,10,49,48,10,49,48,10,50,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,54,70,10, 69,78,67,79,68,73,78,71,32,56,48,52,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,68,48,10,50,56,10,69,56,10,65,56,10,54,56,10, 50,56,10,49,48,10,49,48,10,50,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,55,48,10,69,78,67,79, 68,73,78,71,32,56,48,52,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,48,10, 50,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,57,56,10,54,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,55,49,10,69,78,67,79,68,73,78,71, 32,56,48,52,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,49,48,10,50,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,57,56, 10,54,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,55,50,10,69,78,67,79,68,73,78,71,32,56,48,53, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,52,48,10,50,48,10,48,48,10,55,48, 10,56,56,10,54,48,10,56,48,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,55,51,10, 69,78,67,79,68,73,78,71,32,56,48,53,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,49,48,10,50,48,10,48,48,10,55,48,10,56,56,10, 54,48,10,56,48,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,55,52,10,69,78,67,79, 68,73,78,71,32,56,48,53,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,48,10, 50,48,10,48,48,10,66,48,10,67,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,48,56,10,48,56,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,55,53,10,69,78,67,79,68,73,78,71, 32,56,48,53,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,49,48,10,50,48,10,48, 48,10,66,48,10,67,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,48,56,10,48,56,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,55,54,10,69,78,67,79,68,73,78,71,32,56,48,53, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,48,10,52,48,10,48,48,10,52,48, 10,52,48,10,52,48,10,52,48,10,53,48,10,50,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,55,55,10, 69,78,67,79,68,73,78,71,32,56,48,53,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,50,48,10,52,48,10,48,48,10,52,48,10,52,48,10, 52,48,10,52,48,10,53,48,10,50,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,55,56,10,69,78,67,79, 68,73,78,71,32,56,48,53,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,48,10, 50,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,55,57,10,69,78,67,79,68,73,78,71, 32,56,48,53,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,49,48,10,50,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,55,65,10,69,78,67,79,68,73,78,71,32,56,48,53, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,52,48,10,50,48,10,48,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,55,66,10, 69,78,67,79,68,73,78,71,32,56,48,53,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,49,48,10,50,48,10,48,48,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,55,67,10,69,78,67,79, 68,73,78,71,32,56,48,54,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,48,10, 50,48,10,48,48,10,56,56,10,65,56,10,65,56,10,65, 56,10,65,56,10,53,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,55,68,10,69,78,67,79,68,73,78,71, 32,56,48,54,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,49,48,10,50,48,10,48, 48,10,56,56,10,65,56,10,65,56,10,65,56,10,65,56, 10,53,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,56,48,10,69,78,67,79,68,73,78,71,32,56,48,54, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,51,48,10,49,48,10,50,48,10,48,48,10,55,48, 10,56,56,10,56,56,10,56,56,10,57,56,10,54,56,10, 48,48,10,50,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,56,49,10, 69,78,67,79,68,73,78,71,32,56,48,54,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,51,48, 10,50,48,10,49,48,10,48,48,10,55,48,10,56,56,10, 56,56,10,56,56,10,57,56,10,54,56,10,48,48,10,50, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,56,50,10,69,78,67,79, 68,73,78,71,32,56,48,54,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,68,48,10,52,56,10, 56,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,57,56,10,54,56,10,48,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,56,51,10,69,78,67,79,68,73,78,71, 32,56,48,54,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,68,48,10,56,56,10,52,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,57,56, 10,54,56,10,48,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,56,52,10,69,78,67,79,68,73,78,71,32,56,48,54, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,67,56,10,53,48,10,56,48,10,48,48,10,55,48, 10,56,56,10,56,56,10,56,56,10,57,56,10,54,56,10, 48,48,10,50,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,56,53,10, 69,78,67,79,68,73,78,71,32,56,48,54,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,67,56, 10,57,48,10,52,48,10,48,48,10,55,48,10,56,56,10, 56,56,10,56,56,10,57,56,10,54,56,10,48,48,10,50, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,56,54,10,69,78,67,79, 68,73,78,71,32,56,48,55,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,54,56,10,66,48,10,49,48,10, 50,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,57,56,10,54,56,10,48,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,56,55,10,69,78,67,79,68,73,78,71, 32,56,48,55,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,54,56,10,66,48,10,50,48,10,49,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,57,56, 10,54,56,10,48,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,56,56,10,69,78,67,79,68,73,78,71,32,56,48,55, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,68,48,10,54,56,10,65,56,10,50,56, 10,50,56,10,51,56,10,50,56,10,50,56,10,50,56,10, 48,48,10,49,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,56,57,10, 69,78,67,79,68,73,78,71,32,56,48,55,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,68,48,10,65,56,10,54,56,10,50,56,10,50,56,10, 51,56,10,50,56,10,50,56,10,50,56,10,48,48,10,49, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,56,65,10,69,78,67,79, 68,73,78,71,32,56,48,55,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,68,48,10, 54,56,10,65,56,10,65,56,10,54,56,10,51,56,10,50, 56,10,50,56,10,50,56,10,48,48,10,49,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,56,66,10,69,78,67,79,68,73,78,71, 32,56,48,55,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,68,48,10,65,56,10,54, 56,10,65,56,10,54,56,10,51,56,10,50,56,10,50,56, 10,50,56,10,48,48,10,49,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,56,67,10,69,78,67,79,68,73,78,71,32,56,48,55, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,68,48,10,54,56,10,65,56,10,54,56, 10,65,56,10,51,56,10,50,56,10,50,56,10,50,56,10, 48,48,10,49,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,56,68,10, 69,78,67,79,68,73,78,71,32,56,48,55,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,68,48,10,65,56,10,54,56,10,54,56,10,65,56,10, 51,56,10,50,56,10,50,56,10,50,56,10,48,48,10,49, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,56,69,10,69,78,67,79, 68,73,78,71,32,56,48,55,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,68,48,10, 50,56,10,69,56,10,54,56,10,65,56,10,51,56,10,50, 56,10,50,56,10,50,56,10,48,48,10,49,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,56,70,10,69,78,67,79,68,73,78,71, 32,56,48,55,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,68,48,10,50,56,10,69, 56,10,65,56,10,54,56,10,51,56,10,50,56,10,50,56, 10,50,56,10,48,48,10,49,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,57,48,10,69,78,67,79,68,73,78,71,32,56,48,56, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,51,48,10,49,48,10,50,48,10,48,48,10,66,48, 10,67,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 48,56,10,56,56,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,57,49,10, 69,78,67,79,68,73,78,71,32,56,48,56,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,51,48, 10,50,48,10,49,48,10,48,48,10,66,48,10,67,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,48,56,10,56, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,57,50,10,69,78,67,79, 68,73,78,71,32,56,48,56,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,68,48,10,52,56,10, 56,48,10,48,48,10,66,48,10,67,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,48,56,10,56,56,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,57,51,10,69,78,67,79,68,73,78,71, 32,56,48,56,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,68,48,10,56,56,10,52,48,10,48, 48,10,66,48,10,67,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,48,56,10,56,56,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,57,52,10,69,78,67,79,68,73,78,71,32,56,48,56, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,67,56,10,53,48,10,56,48,10,48,48,10,66,48, 10,67,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 48,56,10,56,56,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,57,53,10, 69,78,67,79,68,73,78,71,32,56,48,56,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,67,56, 10,57,48,10,52,48,10,48,48,10,66,48,10,67,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,48,56,10,56, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,57,54,10,69,78,67,79, 68,73,78,71,32,56,48,56,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,54,56,10,66,48,10,49,48,10, 50,48,10,48,48,10,66,48,10,67,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,48,56,10,56,56,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,57,55,10,69,78,67,79,68,73,78,71, 32,56,48,56,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,54,56,10,66,48,10,50,48,10,49,48,10,48, 48,10,66,48,10,67,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,48,56,10,56,56,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,57,56,10,69,78,67,79,68,73,78,71,32,56,48,56, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,69,56,10,54,56,10,65,56,10,50,56, 10,51,56,10,50,56,10,50,56,10,50,56,10,50,56,10, 48,48,10,49,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,57,57,10, 69,78,67,79,68,73,78,71,32,56,48,56,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,69,56,10,65,56,10,54,56,10,50,56,10,51,56,10, 50,56,10,50,56,10,50,56,10,50,56,10,48,48,10,49, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,57,65,10,69,78,67,79, 68,73,78,71,32,56,48,57,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,69,56,10, 54,56,10,65,56,10,65,56,10,55,56,10,50,56,10,50, 56,10,50,56,10,50,56,10,48,48,10,49,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,57,66,10,69,78,67,79,68,73,78,71, 32,56,48,57,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,69,56,10,65,56,10,54, 56,10,65,56,10,55,56,10,50,56,10,50,56,10,50,56, 10,50,56,10,48,48,10,49,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,57,67,10,69,78,67,79,68,73,78,71,32,56,48,57, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,69,56,10,54,56,10,65,56,10,54,56, 10,66,56,10,50,56,10,50,56,10,50,56,10,50,56,10, 48,48,10,49,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,57,68,10, 69,78,67,79,68,73,78,71,32,56,48,57,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,69,56,10,65,56,10,54,56,10,54,56,10,66,56,10, 50,56,10,50,56,10,50,56,10,50,56,10,48,48,10,49, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,57,69,10,69,78,67,79, 68,73,78,71,32,56,48,57,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,69,56,10, 50,56,10,69,56,10,54,56,10,66,56,10,50,56,10,50, 56,10,50,56,10,50,56,10,48,48,10,49,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,57,70,10,69,78,67,79,68,73,78,71, 32,56,48,57,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,69,56,10,50,56,10,69, 56,10,65,56,10,55,56,10,50,56,10,50,56,10,50,56, 10,50,56,10,48,48,10,49,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,65,48,10,69,78,67,79,68,73,78,71,32,56,48,57, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,51,48,10,49,48,10,50,48,10,48,48,10,56,56, 10,65,56,10,65,56,10,65,56,10,65,56,10,53,48,10, 48,48,10,50,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,65,49,10, 69,78,67,79,68,73,78,71,32,56,48,57,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,51,48, 10,50,48,10,49,48,10,48,48,10,56,56,10,65,56,10, 65,56,10,65,56,10,65,56,10,53,48,10,48,48,10,50, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,65,50,10,69,78,67,79, 68,73,78,71,32,56,48,57,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,68,48,10,52,56,10, 56,48,10,48,48,10,56,56,10,65,56,10,65,56,10,65, 56,10,65,56,10,53,48,10,48,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,65,51,10,69,78,67,79,68,73,78,71, 32,56,48,57,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,68,48,10,56,56,10,52,48,10,48, 48,10,56,56,10,65,56,10,65,56,10,65,56,10,65,56, 10,53,48,10,48,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,65,52,10,69,78,67,79,68,73,78,71,32,56,49,48, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,67,56,10,53,48,10,56,48,10,48,48,10,56,56, 10,65,56,10,65,56,10,65,56,10,65,56,10,53,48,10, 48,48,10,50,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,65,53,10, 69,78,67,79,68,73,78,71,32,56,49,48,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,67,56, 10,57,48,10,52,48,10,48,48,10,56,56,10,65,56,10, 65,56,10,65,56,10,65,56,10,53,48,10,48,48,10,50, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,65,54,10,69,78,67,79, 68,73,78,71,32,56,49,48,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,54,56,10,66,48,10,49,48,10, 50,48,10,48,48,10,56,56,10,65,56,10,65,56,10,65, 56,10,65,56,10,53,48,10,48,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,65,55,10,69,78,67,79,68,73,78,71, 32,56,49,48,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,54,56,10,66,48,10,50,48,10,49,48,10,48, 48,10,56,56,10,65,56,10,65,56,10,65,56,10,65,56, 10,53,48,10,48,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,65,56,10,69,78,67,79,68,73,78,71,32,56,49,48, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,68,48,10,54,56,10,65,56,10,50,56, 10,50,56,10,50,56,10,49,48,10,49,48,10,50,56,10, 48,48,10,49,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,65,57,10, 69,78,67,79,68,73,78,71,32,56,49,48,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,68,48,10,65,56,10,54,56,10,50,56,10,50,56,10, 50,56,10,49,48,10,49,48,10,50,56,10,48,48,10,49, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,65,65,10,69,78,67,79, 68,73,78,71,32,56,49,48,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,68,48,10, 54,56,10,65,56,10,65,56,10,54,56,10,50,56,10,49, 48,10,49,48,10,50,56,10,48,48,10,49,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,65,66,10,69,78,67,79,68,73,78,71, 32,56,49,48,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,68,48,10,65,56,10,54, 56,10,65,56,10,54,56,10,50,56,10,49,48,10,49,48, 10,50,56,10,48,48,10,49,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,65,67,10,69,78,67,79,68,73,78,71,32,56,49,48, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,68,48,10,54,56,10,65,56,10,54,56, 10,65,56,10,50,56,10,49,48,10,49,48,10,50,56,10, 48,48,10,49,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,65,68,10, 69,78,67,79,68,73,78,71,32,56,49,48,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,68,48,10,65,56,10,54,56,10,54,56,10,65,56,10, 50,56,10,49,48,10,49,48,10,50,56,10,48,48,10,49, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,65,69,10,69,78,67,79, 68,73,78,71,32,56,49,49,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,68,48,10, 50,56,10,69,56,10,54,56,10,65,56,10,50,56,10,49, 48,10,49,48,10,50,56,10,48,48,10,49,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,65,70,10,69,78,67,79,68,73,78,71, 32,56,49,49,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,68,48,10,50,56,10,69, 56,10,65,56,10,54,56,10,50,56,10,49,48,10,49,48, 10,50,56,10,48,48,10,49,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,66,48,10,69,78,67,79,68,73,78,71,32,56,49,49, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,56,10,55,48,10,48,48,10,55,48, 10,56,56,10,56,56,10,56,56,10,57,56,10,54,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,66,49,10, 69,78,67,79,68,73,78,71,32,56,49,49,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,70,56,10,48,48,10,55,48,10,56,56,10, 56,56,10,56,56,10,57,56,10,54,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,66,50,10,69,78,67,79, 68,73,78,71,32,56,49,49,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,48,10, 50,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,57,56,10,54,56,10,48,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,66,51,10,69,78,67,79,68,73,78,71, 32,56,49,49,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,57,56, 10,54,56,10,48,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,66,52,10,69,78,67,79,68,73,78,71,32,56,49,49, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,49,48,10,50,48,10,48,48,10,55,48, 10,56,56,10,56,56,10,56,56,10,57,56,10,54,56,10, 48,48,10,50,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,66,54,10, 69,78,67,79,68,73,78,71,32,56,49,49,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,54,56,10,66,48,10,48,48,10,55,48,10,56,56,10, 56,56,10,56,56,10,57,56,10,54,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,66,55,10,69,78,67,79, 68,73,78,71,32,56,49,49,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,54,56,10, 66,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,57,56,10,54,56,10,48,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,66,56,10,69,78,67,79,68,73,78,71, 32,56,49,50,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,56,56,10,55,48,10,48,48,10,50, 48,10,53,48,10,56,56,10,56,56,10,70,56,10,56,56, 10,56,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,66,57,10,69,78,67,79,68,73,78,71,32,56,49,50, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,70,56,10,48,48,10,50,48,10,53,48,10,56,56, 10,56,56,10,70,56,10,56,56,10,56,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,66,65,10, 69,78,67,79,68,73,78,71,32,56,49,50,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,57,48,10,54,56,10,50,56,10,50,56,10,50,56,10, 51,56,10,50,56,10,50,56,10,50,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,66,66,10,69,78,67,79, 68,73,78,71,32,56,49,50,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,53,48,10, 65,56,10,50,56,10,50,56,10,50,56,10,51,56,10,50, 56,10,50,56,10,50,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,66,67,10,69,78,67,79,68,73,78,71, 32,56,49,50,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,50,48,10,53,48,10,56, 56,10,56,56,10,56,56,10,70,56,10,56,56,10,56,56, 10,56,56,10,48,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,66,68,10,69,78,67,79,68,73,78,71,32,56,49,50, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,51,48,10,49,48,10,50,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,66,69,10, 69,78,67,79,68,73,78,71,32,56,49,50,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 50,48,10,50,48,10,50,48,10,49,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,66,70,10,69,78,67,79, 68,73,78,71,32,56,49,50,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,51,48,10, 49,48,10,50,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,67,48,10,69,78,67,79,68,73,78,71, 32,56,49,50,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,54,56,10,66,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,67,49,10,69,78,67,79,68,73,78,71,32,56,49,50, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,54,56,10,66,48,10,48,48,10,68,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,67,50,10, 69,78,67,79,68,73,78,71,32,56,49,51,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,52,48,10,50,48,10,48,48,10,66,48,10,67,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,48,56,10,56, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,67,51,10,69,78,67,79, 68,73,78,71,32,56,49,51,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,66,48,10,67,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,48,56,10,56,56,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,67,52,10,69,78,67,79,68,73,78,71, 32,56,49,51,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,49,48,10,50,48,10,48, 48,10,66,48,10,67,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,48,56,10,56,56,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,67,54,10,69,78,67,79,68,73,78,71,32,56,49,51, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,54,56,10,66,48,10,48,48,10,66,48, 10,67,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 48,56,10,48,56,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,67,55,10, 69,78,67,79,68,73,78,71,32,56,49,51,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,54,56,10,66,48,10,48,48,10,66,48,10,67,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,48,56,10,56, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,67,56,10,69,78,67,79, 68,73,78,71,32,56,49,51,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,66,56,10, 54,48,10,50,48,10,50,48,10,51,48,10,50,48,10,50, 48,10,50,48,10,51,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,67,57,10,69,78,67,79,68,73,78,71, 32,56,49,51,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,56,10,65,48,10,50, 48,10,50,48,10,51,48,10,50,48,10,50,48,10,50,48, 10,51,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,67,65,10,69,78,67,79,68,73,78,71,32,56,49,51, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,65,56,10,54,56,10,50,56,10,50,56, 10,51,56,10,50,56,10,50,56,10,50,56,10,50,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,67,66,10, 69,78,67,79,68,73,78,71,32,56,49,51,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,54,56,10,65,56,10,50,56,10,50,56,10,51,56,10, 50,56,10,50,56,10,50,56,10,50,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,67,67,10,69,78,67,79, 68,73,78,71,32,56,49,52,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,56,56,10, 56,56,10,56,56,10,56,56,10,70,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,48,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,67,68,10,69,78,67,79,68,73,78,71, 32,56,49,52,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,68,48,10,52,56,10,56, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,67,69,10,69,78,67,79,68,73,78,71,32,56,49,52, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,67,56,10,53,48,10,56,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,67,70,10, 69,78,67,79,68,73,78,71,32,56,49,52,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,54,56,10,66,48,10,49,48,10,50,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,68,48,10,69,78,67,79, 68,73,78,71,32,56,49,52,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,56,56,10, 55,48,10,48,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,56,10,49,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,68,49,10,69,78,67,79,68,73,78,71, 32,56,49,52,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,70,56,10,48, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,56, 10,49,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,68,50,10,69,78,67,79,68,73,78,71,32,56,49,52, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,52,48,10,50,48,10,68,56,10,48,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,56,10,49,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,68,51,10, 69,78,67,79,68,73,78,71,32,56,49,52,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,49,48, 10,50,48,10,68,56,10,48,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,56,10,49,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,68,54,10,69,78,67,79, 68,73,78,71,32,56,49,53,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,54,56,10, 66,48,10,48,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,56,10,49,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,68,55,10,69,78,67,79,68,73,78,71, 32,56,49,53,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,54,56,10,66,48,10,48,48,10,68,56,10,48, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,56, 10,49,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,68,56,10,69,78,67,79,68,73,78,71,32,56,49,53, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,56,56,10,55,48,10,48,48,10,55,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,68,57,10, 69,78,67,79,68,73,78,71,32,56,49,53,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,56,10,48,48,10,55,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,68,65,10,69,78,67,79, 68,73,78,71,32,56,49,53,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,66,56,10, 53,48,10,49,48,10,49,48,10,49,48,10,49,48,10,49, 48,10,49,48,10,51,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,68,66,10,69,78,67,79,68,73,78,71, 32,56,49,53,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,56,10,57,48,10,49, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,49,48, 10,51,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,68,68,10,69,78,67,79,68,73,78,71,32,56,49,53, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,68,48,10,56,56,10,52,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,68,69,10, 69,78,67,79,68,73,78,71,32,56,49,53,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,67,56,10,57,48,10,52,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,68,70,10,69,78,67,79, 68,73,78,71,32,56,49,53,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,54,56,10, 66,48,10,50,48,10,49,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,69,48,10,69,78,67,79,68,73,78,71, 32,56,49,54,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,56,56,10,55,48,10,48, 48,10,56,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,69,49,10,69,78,67,79,68,73,78,71,32,56,49,54, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,70,56,10,48,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,69,50,10, 69,78,67,79,68,73,78,71,32,56,49,54,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,52,48, 10,50,48,10,68,56,10,48,48,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,69,51,10,69,78,67,79, 68,73,78,71,32,56,49,54,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,49,48,10,50,48,10, 68,56,10,48,48,10,56,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,69,52,10,69,78,67,79,68,73,78,71, 32,56,49,54,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,51,48,10,49,48,10,50,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,70,48,10,56,48,10,56,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,69,53,10,69,78,67,79,68,73,78,71,32,56,49,54, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,51,48,10,50,48,10,49,48,10,48,48,10,55,48, 10,56,56,10,56,56,10,56,56,10,56,56,10,70,48,10, 56,48,10,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,69,54,10, 69,78,67,79,68,73,78,71,32,56,49,54,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,54,56,10,66,48,10,48,48,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,69,55,10,69,78,67,79, 68,73,78,71,32,56,49,54,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,54,56,10,66,48,10,48,48,10, 68,56,10,48,48,10,56,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,69,56,10,69,78,67,79,68,73,78,71, 32,56,49,54,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,56,56,10,55,48,10,48,48,10,56, 56,10,53,48,10,53,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,69,57,10,69,78,67,79,68,73,78,71,32,56,49,54, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,70,56,10,48,48,10,56,56,10,56,56,10,53,48, 10,53,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,69,65,10, 69,78,67,79,68,73,78,71,32,56,49,55,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,65,56,10,54,56,10,50,56,10,50,56,10,49,48,10, 49,48,10,49,48,10,49,48,10,49,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,69,66,10,69,78,67,79, 68,73,78,71,32,56,49,55,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,54,56,10, 65,56,10,50,56,10,50,56,10,49,48,10,49,48,10,49, 48,10,49,48,10,49,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,69,67,10,69,78,67,79,68,73,78,71, 32,56,49,55,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,70,48,10,65,56,10,54, 56,10,50,56,10,51,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,69,68,10,69,78,67,79,68,73,78,71,32,56,49,55, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,52,48,10,50,48,10,68,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,69,69,10, 69,78,67,79,68,73,78,71,32,56,49,55,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,49,48, 10,50,48,10,68,56,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,69,70,10,69,78,67,79, 68,73,78,71,32,56,49,55,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,48,10, 50,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,70,50,10,69,78,67,79,68,73,78,71, 32,56,49,55,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,52,48,10,50,48,10,48, 48,10,56,56,10,65,56,10,65,56,10,65,56,10,65,56, 10,53,48,10,48,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,70,51,10,69,78,67,79,68,73,78,71,32,56,49,55, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,56,56, 10,65,56,10,65,56,10,65,56,10,65,56,10,53,48,10, 48,48,10,50,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,70,52,10, 69,78,67,79,68,73,78,71,32,56,49,56,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,49,48,10,50,48,10,48,48,10,56,56,10,65,56,10, 65,56,10,65,56,10,65,56,10,53,48,10,48,48,10,50, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,70,54,10,69,78,67,79, 68,73,78,71,32,56,49,56,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,54,56,10, 66,48,10,48,48,10,56,56,10,65,56,10,65,56,10,65, 56,10,65,56,10,53,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,70,55,10,69,78,67,79,68,73,78,71, 32,56,49,56,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,54,56,10,66,48,10,48, 48,10,56,56,10,65,56,10,65,56,10,65,56,10,65,56, 10,53,48,10,48,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,70,56,10,69,78,67,79,68,73,78,71,32,56,49,56, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,57,48,10,54,56,10,50,56,10,50,56, 10,50,56,10,50,56,10,50,56,10,50,56,10,49,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,70,57,10, 69,78,67,79,68,73,78,71,32,56,49,56,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,53,48,10,65,56,10,50,56,10,50,56,10,50,56,10, 50,56,10,50,56,10,50,56,10,49,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,70,65,10,69,78,67,79, 68,73,78,71,32,56,49,56,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,57,48,10, 54,56,10,50,56,10,50,56,10,50,56,10,50,56,10,49, 48,10,49,48,10,50,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,70,66,10,69,78,67,79,68,73,78,71, 32,56,49,56,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,53,48,10,65,56,10,50, 56,10,50,56,10,50,56,10,50,56,10,49,48,10,49,48, 10,50,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,70,67,10,69,78,67,79,68,73,78,71,32,56,49,56, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,55,48,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,53,48,10,53,48,10,68,56,10, 48,48,10,50,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,70,68,10, 69,78,67,79,68,73,78,71,32,56,49,56,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,49,48,10,50,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,70,69,10,69,78,67,79, 68,73,78,71,32,56,49,57,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,51,48,10, 50,48,10,49,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,48,48,10,69,78,67,79,68,73,78,71, 32,56,49,57,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,48,49,10,69,78,67,79,68,73,78,71,32,56,49,57, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,48,50,10, 69,78,67,79,68,73,78,71,32,56,49,57,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,48,51,10,69,78,67,79, 68,73,78,71,32,56,49,57,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,48,52,10,69,78,67,79,68,73,78,71, 32,56,49,57,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,48,53,10,69,78,67,79,68,73,78,71,32,56,49,57, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,48,54,10, 69,78,67,79,68,73,78,71,32,56,49,57,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,48,55,10,69,78,67,79, 68,73,78,71,32,56,49,57,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,48,56,10,69,78,67,79,68,73,78,71, 32,56,50,48,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,48,57,10,69,78,67,79,68,73,78,71,32,56,50,48, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,48,65,10, 69,78,67,79,68,73,78,71,32,56,50,48,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,48,66,10,69,78,67,79, 68,73,78,71,32,56,50,48,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,54,49,54,54,52,10,69,78,67,79,68,73, 78,71,32,56,50,48,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,51,48,49,10,69,78,67,79,68,73,78,71,32,56, 50,48,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,50,57, 57,10,69,78,67,79,68,73,78,71,32,56,50,48,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,51,48,48,10,69,78, 67,79,68,73,78,71,32,56,50,48,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,49,48,10,69,78,67,79,68,73, 78,71,32,56,50,48,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,55,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,48,49,49,10,69,78,67,79,68,73,78,71,32,56, 50,48,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,55,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,102,105,103,117,114,101, 100,97,115,104,10,69,78,67,79,68,73,78,71,32,56,50, 49,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,70,56,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,101,110,100,97,115,104,10, 69,78,67,79,68,73,78,71,32,56,50,49,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,101,109,100,97,115,104,10,69,78,67,79,68, 73,78,71,32,56,50,49,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,67,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,48,48,50,48,56,10,69,78,67,79,68,73,78, 71,32,56,50,49,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,70,67,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,48,49,54,10,69,78,67,79,68,73,78,71,32,56,50, 49,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,53,48,10,53,48,10,53,48,10,53, 48,10,53,48,10,53,48,10,53,48,10,53,48,10,53,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,100,101,114,115,99, 111,114,101,100,98,108,10,69,78,67,79,68,73,78,71,32, 56,50,49,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,56,10,48,48,10,70,56,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,113,117,111,116,101, 108,101,102,116,10,69,78,67,79,68,73,78,71,32,56,50, 49,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,49,48,10,50,48,10,51,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,113,117,111,116,101,114,105, 103,104,116,10,69,78,67,79,68,73,78,71,32,56,50,49, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,51,48,10,49,48,10,50,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,113,117,111,116,101,115,105,110, 103,108,98,97,115,101,10,69,78,67,79,68,73,78,71,32, 56,50,49,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,51,48,10, 49,48,10,50,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,113,117,111,116,101, 114,101,118,101,114,115,101,100,10,69,78,67,79,68,73,78, 71,32,56,50,49,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,51,48,10,50,48,10, 49,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,113,117,111, 116,101,100,98,108,108,101,102,116,10,69,78,67,79,68,73, 78,71,32,56,50,50,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,52,56,10,57,48, 10,68,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,113,117, 111,116,101,100,98,108,114,105,103,104,116,10,69,78,67,79, 68,73,78,71,32,56,50,50,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,68,56,10, 52,56,10,57,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 113,117,111,116,101,100,98,108,98,97,115,101,10,69,78,67, 79,68,73,78,71,32,56,50,50,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,52,56,10,57,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,48,49,70,10,69,78,67,79,68,73,78, 71,32,56,50,50,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,68,56,10,57,48,10, 52,56,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,100,97,103, 103,101,114,10,69,78,67,79,68,73,78,71,32,56,50,50, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,50,48,10,50,48,10,70,56,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,100,97,103,103,101,114,100,98, 108,10,69,78,67,79,68,73,78,71,32,56,50,50,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,50,48,10,70,56,10,50,48,10,50, 48,10,70,56,10,50,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,98,117,108,108,101,116,10,69,78,67, 79,68,73,78,71,32,56,50,50,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,48,10,70,56,10,70,56,10,70,56,10, 55,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,48,50,51,10,69,78,67,79,68,73,78, 71,32,56,50,50,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,52,48,10, 54,48,10,55,48,10,55,56,10,55,48,10,54,48,10,52, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,111,110,101, 100,111,116,101,110,108,101,97,100,101,114,10,69,78,67,79, 68,73,78,71,32,56,50,50,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 116,119,111,100,111,116,101,110,108,101,97,100,101,114,10,69, 78,67,79,68,73,78,71,32,56,50,50,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,53,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,101,108,108,105,112,115,105,115,10,69,78,67,79, 68,73,78,71,32,56,50,51,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,65,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,50,55,10,69,78,67,79,68,73,78,71, 32,56,50,51,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,51,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,50,70,10,69,78,67,79,68,73,78,71,32,56,50,51, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,112,101,114,116,104,111,117,115, 97,110,100,10,69,78,67,79,68,73,78,71,32,56,50,52, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,52,56,10,65,56,10,53,48,10,49,48, 10,50,48,10,52,48,10,54,56,10,68,52,10,65,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,51,49,10, 69,78,67,79,68,73,78,71,32,56,50,52,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,52,56,10,65,56,10,53,48,10,49,48,10,50,56,10, 53,52,10,54,56,10,68,52,10,65,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,109,105,110,117,116,101,10,69,78,67,79,68, 73,78,71,32,56,50,52,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,50, 48,10,52,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,115, 101,99,111,110,100,10,69,78,67,79,68,73,78,71,32,56, 50,52,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,53,48,10,53,48,10,65,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,48,51, 52,10,69,78,67,79,68,73,78,71,32,56,50,52,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,53,52,10,53,52,10,65,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,48,51,53,10,69,78, 67,79,68,73,78,71,32,56,50,52,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,52, 48,10,52,48,10,50,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,51,54,10,69,78,67,79,68,73, 78,71,32,56,50,52,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,65,48,10,65,48, 10,53,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,48,51,55,10,69,78,67,79,68,73,78,71,32,56, 50,52,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,65,56,10,65,56,10,53,52,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,48,51, 56,10,69,78,67,79,68,73,78,71,32,56,50,52,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,50,48,10,50,48,10,53,48, 10,53,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,103,117,105,108,115,105,110,103,108,108, 101,102,116,10,69,78,67,79,68,73,78,71,32,56,50,52, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,49,48,10,50,48, 10,52,48,10,52,48,10,50,48,10,49,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,103,117,105,108,115,105,110,103, 108,114,105,103,104,116,10,69,78,67,79,68,73,78,71,32, 56,50,53,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,52,48, 10,50,48,10,49,48,10,49,48,10,50,48,10,52,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,48, 51,66,10,69,78,67,79,68,73,78,71,32,56,50,53,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,65,56,10,56,56,10,53,48,10,50,48,10, 65,56,10,50,48,10,53,48,10,56,56,10,65,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,101,120,99,108,97,109,100,98,108, 10,69,78,67,79,68,73,78,71,32,56,50,53,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,53,48,10,53,48,10,53,48,10,53,48,10,53,48, 10,53,48,10,53,48,10,48,48,10,53,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,48,51,68,10,69,78,67, 79,68,73,78,71,32,56,50,53,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,55,48, 10,65,56,10,50,56,10,50,56,10,51,48,10,50,48,10, 50,48,10,48,48,10,50,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,48,51,69,10,69,78,67,79,68,73,78, 71,32,56,50,53,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,70,67,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,48,51,70,10,69,78,67,79,68,73,78,71,32,56,50, 53,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,56,56,10,55,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,48,52,48, 10,69,78,67,79,68,73,78,71,32,56,50,53,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,55, 48,10,56,56,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,48,52,49,10,69,78,67, 79,68,73,78,71,32,56,50,53,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,56,10,48,56,10,49,48,10, 49,48,10,50,48,10,50,48,10,53,48,10,53,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,48,52,50,10,69,78,67,79,68,73,78, 71,32,56,50,53,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 50,48,10,55,48,10,50,48,10,53,48,10,70,56,10,53, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,48,52,51,10,69,78,67,79,68,73,78,71,32,56,50, 53,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,48,10,55,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,102,114,97,99,116,105,111, 110,10,69,78,67,79,68,73,78,71,32,56,50,54,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,56,10,49,48,10,49,48,10,50,48,10,50, 48,10,52,48,10,52,48,10,56,48,10,56,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,48,52,53,10,69,78, 67,79,68,73,78,71,32,56,50,54,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,55, 48,10,52,48,10,52,48,10,52,48,10,55,48,10,52,48, 10,52,48,10,52,48,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,52,54,10,69,78,67,79,68,73, 78,71,32,56,50,54,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,49,48, 10,49,48,10,49,48,10,55,48,10,49,48,10,49,48,10, 49,48,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,48,52,55,10,69,78,67,79,68,73,78,71,32,56, 50,54,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,52,56,10,66,52,10,66,52,10, 50,52,10,52,56,10,52,56,10,52,56,10,48,48,10,52, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,48,52, 56,10,69,78,67,79,68,73,78,71,32,56,50,54,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,52,56,10,65,56,10,65,56,10,50,56,10,52, 56,10,52,56,10,52,56,10,48,48,10,52,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,48,52,57,10,69,78, 67,79,68,73,78,71,32,56,50,54,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,57, 48,10,65,56,10,65,56,10,56,56,10,57,48,10,57,48, 10,57,48,10,48,48,10,57,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,52,65,10,69,78,67,79,68,73, 78,71,32,56,50,54,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,56,10,48,56,10,48,56,10,48,56,10, 48,56,10,48,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,48,52,66,10,69,78,67,79,68,73,78,71,32,56, 50,54,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,48,10,66,56,10,66,56,10, 66,56,10,66,56,10,66,48,10,65,48,10,65,48,10,65, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,48,52, 67,10,69,78,67,79,68,73,78,71,32,56,50,54,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,56,10,69,56,10,69, 56,10,69,56,10,55,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,48,52,68,10,69,78, 67,79,68,73,78,71,32,56,50,54,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,70,48,10,66,56,10,66,56,10,66,56, 10,70,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,52,69,10,69,78,67,79,68,73, 78,71,32,56,50,55,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,50,48,10,65,56,10,55,48,10, 65,56,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,48,52,70,10,69,78,67,79,68,73,78,71,32,56, 50,55,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 55,48,10,50,48,10,48,48,10,48,48,10,54,48,10,50, 48,10,49,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,48,53, 48,10,69,78,67,79,68,73,78,71,32,56,50,55,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,55,48,10,56,56,10,48,48,10,48, 48,10,48,48,10,56,56,10,55,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,48,53,49,10,69,78, 67,79,68,73,78,71,32,56,50,55,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,65,56,10,55,48,10,65,56,10,50,48,10,65,56, 10,55,48,10,65,56,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,53,50,10,69,78,67,79,68,73, 78,71,32,56,50,55,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,67,56,10,67,56, 10,49,48,10,49,48,10,50,48,10,52,48,10,52,48,10, 57,56,10,57,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,48,53,55,10,69,78,67,79,68,73,78,71,32,56, 50,55,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,55,67,10,55,67,10,70,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,48,53, 70,10,69,78,67,79,68,73,78,71,32,56,50,56,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,48,54,48,10,69,78, 67,79,68,73,78,71,32,56,50,56,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,54,49,10,69,78,67,79,68,73, 78,71,32,56,50,56,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,48,54,50,10,69,78,67,79,68,73,78,71,32,56, 50,57,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,48,54, 51,10,69,78,67,79,68,73,78,71,32,56,50,57,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,122,101,114,111,115,117,112,101,114,105, 111,114,10,69,78,67,79,68,73,78,71,32,56,51,48,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,52,48, 10,65,48,10,65,48,10,65,48,10,52,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,48,55,49,10,69, 78,67,79,68,73,78,71,32,56,51,48,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,52,48,10,48,48,10, 52,48,10,52,48,10,52,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,102,111,117,114,115,117,112,101,114,105,111,114,10, 69,78,67,79,68,73,78,71,32,56,51,48,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,56,48,10,56,48, 10,67,48,10,69,48,10,52,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,102,105,118,101,115,117,112,101,114,105,111,114, 10,69,78,67,79,68,73,78,71,32,56,51,48,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,69,48,10,56, 48,10,67,48,10,50,48,10,67,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,115,105,120,115,117,112,101,114,105,111,114, 10,69,78,67,79,68,73,78,71,32,56,51,49,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,54,48,10,56, 48,10,67,48,10,65,48,10,52,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,115,101,118,101,110,115,117,112,101,114,105, 111,114,10,69,78,67,79,68,73,78,71,32,56,51,49,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,69,48, 10,50,48,10,52,48,10,52,48,10,52,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,101,105,103,104,116,115,117,112,101, 114,105,111,114,10,69,78,67,79,68,73,78,71,32,56,51, 49,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 52,48,10,65,48,10,52,48,10,65,48,10,52,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,110,105,110,101,115,117,112, 101,114,105,111,114,10,69,78,67,79,68,73,78,71,32,56, 51,49,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,52,48,10,65,48,10,54,48,10,50,48,10,67,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,48,55, 65,10,69,78,67,79,68,73,78,71,32,56,51,49,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 52,48,10,69,48,10,52,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,48,55,66,10,69,78, 67,79,68,73,78,71,32,56,51,49,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,69, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,55,67,10,69,78,67,79,68,73, 78,71,32,56,51,49,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,69,48,10,48,48,10,69,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,112,97, 114,101,110,108,101,102,116,115,117,112,101,114,105,111,114,10, 69,78,67,79,68,73,78,71,32,56,51,49,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,52,48,10,56,48, 10,56,48,10,56,48,10,52,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,112,97,114,101,110,114,105,103,104,116,115,117, 112,101,114,105,111,114,10,69,78,67,79,68,73,78,71,32, 56,51,49,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,52,48,10,50,48,10,50,48,10,50,48,10,52,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,110,115,117,112,101, 114,105,111,114,10,69,78,67,79,68,73,78,71,32,56,51, 49,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,67,48,10,65,48,10,65,48,10,65,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,122,101,114,111,105,110,102, 101,114,105,111,114,10,69,78,67,79,68,73,78,71,32,56, 51,50,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,52,48,10,65,48,10,65, 48,10,65,48,10,52,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,111,110,101,105,110,102, 101,114,105,111,114,10,69,78,67,79,68,73,78,71,32,56, 51,50,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,52,48,10,67,48,10,52, 48,10,52,48,10,69,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,116,119,111,105,110,102, 101,114,105,111,114,10,69,78,67,79,68,73,78,71,32,56, 51,50,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,52,48,10,65,48,10,50, 48,10,52,48,10,69,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,116,104,114,101,101,105, 110,102,101,114,105,111,114,10,69,78,67,79,68,73,78,71, 32,56,51,50,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,52,48,10,65,48, 10,52,48,10,50,48,10,67,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,102,111,117,114, 105,110,102,101,114,105,111,114,10,69,78,67,79,68,73,78, 71,32,56,51,50,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,48,10,56, 48,10,67,48,10,69,48,10,52,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,102,105,118, 101,105,110,102,101,114,105,111,114,10,69,78,67,79,68,73, 78,71,32,56,51,50,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,48,10, 56,48,10,67,48,10,50,48,10,67,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,115,105, 120,105,110,102,101,114,105,111,114,10,69,78,67,79,68,73, 78,71,32,56,51,50,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,54,48,10, 56,48,10,67,48,10,65,48,10,52,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,115,101, 118,101,110,105,110,102,101,114,105,111,114,10,69,78,67,79, 68,73,78,71,32,56,51,50,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 48,10,50,48,10,52,48,10,52,48,10,52,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 101,105,103,104,116,105,110,102,101,114,105,111,114,10,69,78, 67,79,68,73,78,71,32,56,51,50,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,52,48,10,65,48,10,52,48,10,65,48,10,52,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,110,105,110,101,105,110,102,101,114,105,111,114,10,69, 78,67,79,68,73,78,71,32,56,51,50,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,52,48,10,65,48,10,54,48,10,50,48,10,67,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,48,56,65,10,69,78,67,79,68, 73,78,71,32,56,51,51,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,52,48,10,69,48,10,52,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,48,56,66,10,69,78,67,79,68,73,78,71,32, 56,51,51,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,48, 56,67,10,69,78,67,79,68,73,78,71,32,56,51,51,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,48,10,48,48,10,69, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,112,97,114,101,110,108,101,102,116, 105,110,102,101,114,105,111,114,10,69,78,67,79,68,73,78, 71,32,56,51,51,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,52,48,10,56, 48,10,56,48,10,56,48,10,52,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,112,97,114, 101,110,114,105,103,104,116,105,110,102,101,114,105,111,114,10, 69,78,67,79,68,73,78,71,32,56,51,51,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,52,48,10,50,48,10,50,48,10,50,48,10,52, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,65,48,10,69,78,67,79, 68,73,78,71,32,56,51,53,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 54,48,10,56,48,10,56,48,10,66,56,10,65,48,10,55, 48,10,50,48,10,51,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 99,111,108,111,110,109,111,110,101,116,97,114,121,10,69,78, 67,79,68,73,78,71,32,56,51,53,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,56,10,55, 56,10,57,56,10,57,48,10,65,48,10,65,48,10,65,48, 10,67,48,10,67,56,10,70,48,10,56,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,65,50,10,69,78,67,79,68,73, 78,71,32,56,51,53,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,56,56, 10,56,48,10,56,48,10,65,56,10,66,48,10,65,48,10, 65,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,102,114, 97,110,99,10,69,78,67,79,68,73,78,71,32,56,51,53, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,70,56,10,56,48,10,56,48,10,56,48, 10,69,56,10,66,48,10,65,48,10,65,48,10,65,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,108,105,114,97,10,69,78,67, 79,68,73,78,71,32,56,51,53,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,51,48, 10,52,56,10,52,48,10,69,48,10,52,48,10,69,48,10, 52,48,10,52,56,10,66,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,48,65,53,10,69,78,67,79,68,73,78, 71,32,56,51,53,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,49,48,10, 49,48,10,68,48,10,65,56,10,65,56,10,65,56,10,65, 56,10,67,56,10,67,48,10,52,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,48,65,54,10,69,78,67,79,68,73,78,71,32,56,51, 53,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,52,56,10,52,56,10,54,56,10,70, 67,10,54,56,10,70,67,10,53,56,10,53,56,10,52,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,112,101,115,101,116,97,10, 69,78,67,79,68,73,78,71,32,56,51,53,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,48,10,52,56,10,70,67,10,52,56,10,55,48,10, 52,48,10,52,48,10,52,48,10,52,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,65,56,10,69,78,67,79, 68,73,78,71,32,56,51,54,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,67,48,10, 65,48,10,65,48,10,65,48,10,68,56,10,65,48,10,66, 48,10,65,56,10,66,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,65,57,10,69,78,67,79,68,73,78,71, 32,56,51,54,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,56,56,10,56,56,10,70, 56,10,56,56,10,70,56,10,65,56,10,65,56,10,68,56, 10,56,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 53,55,54,51,54,10,69,78,67,79,68,73,78,71,32,56, 51,54,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,54,52,10,57,52,10,66,52,10, 66,52,10,66,52,10,66,52,10,66,52,10,65,52,10,57, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,100,111,110,103,10,69, 78,67,79,68,73,78,71,32,56,51,54,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 49,48,10,55,48,10,49,48,10,55,48,10,57,48,10,57, 48,10,57,48,10,57,48,10,55,48,10,48,48,10,70,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,69,117,114,111,10,69,78,67,79,68,73,78,71, 32,56,51,54,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,51,56,10,52,48,10,52, 48,10,70,48,10,52,48,10,70,48,10,52,48,10,52,48, 10,51,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,65,68,10,69,78,67,79,68,73,78,71,32,56,51,54, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,52,52,10,52,52,10,52,56,10,53,48, 10,70,67,10,53,48,10,52,56,10,52,52,10,52,52,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,65,69,10, 69,78,67,79,68,73,78,71,32,56,51,54,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,56,10,50,48,10,50,48,10,51,48,10,54,48,10, 51,48,10,54,48,10,50,48,10,50,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,65,70,10,69,78,67,79, 68,73,78,71,32,56,51,54,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,48,10, 55,48,10,67,56,10,52,56,10,52,56,10,52,56,10,52, 56,10,69,56,10,68,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,66,48,10,69,78,67,79,68,73,78,71, 32,56,51,54,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,49,48,10,50,56,10,50, 56,10,50,56,10,49,48,10,49,48,10,53,48,10,54,56, 10,65,56,10,48,56,10,49,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,66,49,10,69,78,67,79,68,73,78,71,32,56,51,54, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,54,48,10,53,48,10,70,56,10,70,56, 10,53,48,10,54,48,10,52,48,10,52,48,10,52,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,68,48,10, 69,78,67,79,68,73,78,71,32,56,52,48,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,50,48,10,52,48, 10,70,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,68,49,10,69,78,67,79, 68,73,78,71,32,56,52,48,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,50,48,10,49,48,10,70,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,68,50,10,69,78,67,79,68,73,78,71, 32,56,52,48,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,68,51,10,69,78,67,79,68,73,78,71,32,56,52,48, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,68,52,10, 69,78,67,79,68,73,78,71,32,56,52,48,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,51,48, 10,67,56,10,67,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,68,53,10,69,78,67,79, 68,73,78,71,32,56,52,48,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,54,48,10,57,56,10, 49,56,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,68,54,10,69,78,67,79,68,73,78,71, 32,56,52,48,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,52,48,10,70,56,10,52,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,68,55,10,69,78,67,79,68,73,78,71,32,56,52,48, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,48,10,70,56,10,49,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,68,56,10, 69,78,67,79,68,73,78,71,32,56,52,48,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 50,48,10,53,48,10,50,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,68,57,10,69,78,67,79, 68,73,78,71,32,56,52,48,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,51,48,10,52,56,10,69, 56,10,52,56,10,51,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,68,65,10,69,78,67,79,68,73,78,71, 32,56,52,49,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,54,48,10,57,48,10,66,56,10,57,48, 10,54,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,68,66,10,69,78,67,79,68,73,78,71,32,56,52,49, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,65,56,10,65,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,68,67,10, 69,78,67,79,68,73,78,71,32,56,52,49,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,66,52, 10,66,52,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,68,68,10,69,78,67,79, 68,73,78,71,32,56,52,49,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,55,56,10,56,52,10,56,52,10, 56,52,10,56,52,10,56,52,10,56,52,10,56,52,10,56, 52,10,56,52,10,56,52,10,56,52,10,55,56,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,68,69,10,69,78,67,79,68,73,78,71, 32,56,52,49,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,70,67,10,56,52,10,56,52,10,56,52,10,56, 52,10,56,52,10,56,52,10,56,52,10,56,52,10,56,52, 10,56,52,10,56,52,10,70,67,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,68,70,10,69,78,67,79,68,73,78,71,32,56,52,49, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,51, 48,10,52,56,10,56,52,10,56,52,10,56,52,10,56,52, 10,56,52,10,56,52,10,56,52,10,56,52,10,56,52,10, 52,56,10,51,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,69,48,10, 69,78,67,79,68,73,78,71,32,56,52,49,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,55,56,10,67,52, 10,65,52,10,65,52,10,65,52,10,65,52,10,65,52,10, 57,52,10,57,52,10,57,52,10,57,52,10,56,67,10,55, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,69,49,10,69,78,67,79, 68,73,78,71,32,56,52,49,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,53,48,10,70,56,10, 53,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,69,50,10,69,78,67,79,68,73,78,71, 32,56,52,49,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,55,56,10,56,52,10,56,52,10,56, 52,10,56,52,10,56,52,10,56,52,10,56,52,10,56,52, 10,56,52,10,55,56,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,69,51,10,69,78,67,79,68,73,78,71,32,56,52,49, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,70, 67,10,70,67,10,56,52,10,56,52,10,56,52,10,56,52, 10,56,52,10,56,52,10,56,52,10,56,52,10,56,52,10, 70,67,10,70,67,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,69,52,10, 69,78,67,79,68,73,78,71,32,56,52,50,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,51,48,10,52,56, 10,52,56,10,52,56,10,52,56,10,52,56,10,56,52,10, 56,52,10,56,52,10,56,52,10,56,52,10,56,52,10,55, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,69,53,10,69,78,67,79, 68,73,78,71,32,56,52,50,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,56,48,10, 56,48,10,52,48,10,52,48,10,50,48,10,49,48,10,49, 48,10,48,56,10,48,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,69,54,10,69,78,67,79,68,73,78,71, 32,56,52,50,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,53,48,10,53,48,10,53, 48,10,53,48,10,53,48,10,53,48,10,53,48,10,53,48, 10,53,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,69,55,10,69,78,67,79,68,73,78,71,32,56,52,50, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,70,67,10,48,52,10,48,52,10,48,52,10,48,52, 10,48,52,10,48,52,10,48,52,10,48,52,10,48,52,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,69,56,10, 69,78,67,79,68,73,78,71,32,56,52,50,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,65, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,69,57,10,69,78,67,79, 68,73,78,71,32,56,52,50,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,70,56,10,56,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,69,65,10,69,78,67,79,68,73,78,71, 32,56,52,50,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,50,48,10,52,48,10,70,56,10,52,48,10,50,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,48,48,10,69,78,67,79,68,73,78,71,32,56,52,52, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,54,56,10,65,56,10,65,56,10,55,48, 10,54,48,10,53,56,10,65,48,10,65,48,10,57,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,48,49,10, 69,78,67,79,68,73,78,71,32,56,52,52,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,54,56,10,65,56,10,65,56,10,55,48,10,51,56,10, 54,48,10,57,48,10,56,56,10,66,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,48,50,10,69,78,67,79, 68,73,78,71,32,56,52,53,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,55,48,10, 65,56,10,65,48,10,65,48,10,65,48,10,65,48,10,65, 48,10,65,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,48,51,10,69,78,67,79,68,73,78,71, 32,56,52,53,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,52,48,10,65,48,10,52,48,10,51,56,10,52, 48,10,52,48,10,52,48,10,52,48,10,52,48,10,52,48, 10,51,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,48,52,10,69,78,67,79,68,73,78,71,32,56,52,53, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,50,48,10,50,48,10,55,48,10,65,48, 10,65,48,10,65,48,10,55,48,10,50,48,10,51,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,54,49,50,52, 56,10,69,78,67,79,68,73,78,71,32,56,52,53,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,52,56,10,56,56,10,57,48,10,53,48,10,50, 48,10,53,48,10,54,56,10,65,56,10,57,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,49,48,54,10,69,78, 67,79,68,73,78,71,32,56,52,53,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,52, 56,10,56,56,10,57,48,10,53,48,10,50,48,10,54,56, 10,54,56,10,65,56,10,57,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,48,55,10,69,78,67,79,68,73, 78,71,32,56,52,53,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,56,10,56,56, 10,56,48,10,56,48,10,54,48,10,56,48,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,49,48,56,10,69,78,67,79,68,73,78,71,32,56, 52,53,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,54,48,10,57,48,10,48,56,10, 52,56,10,55,56,10,52,56,10,48,56,10,57,48,10,54, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,48, 57,10,69,78,67,79,68,73,78,71,32,56,52,53,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,52,48,10, 65,48,10,52,48,10,55,56,10,52,48,10,52,48,10,55, 48,10,52,48,10,52,48,10,52,48,10,52,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,49,48,65,10,69,78, 67,79,68,73,78,71,32,56,52,53,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,51,48,10,52,56,10,56,56, 10,56,56,10,55,48,10,49,48,10,57,48,10,54,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,48,66,10,69,78,67,79,68,73, 78,71,32,56,52,53,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,67,56,10,52,56, 10,52,56,10,52,56,10,55,56,10,57,48,10,57,48,10, 57,48,10,57,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,49,48,67,10,69,78,67,79,68,73,78,71,32,56, 52,54,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,54,56,10,57,48,10,56,48,10, 66,48,10,67,56,10,52,56,10,50,56,10,65,56,10,52, 56,10,49,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,48, 68,10,69,78,67,79,68,73,78,71,32,56,52,54,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,65,56,10,65,56,10,65,56,10,65,56,10,66, 56,10,65,56,10,65,56,10,65,56,10,65,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,49,48,69,10,69,78, 67,79,68,73,78,71,32,56,52,54,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,50,48,10,50,48,10,52,48,10,55,48,10,52,56, 10,52,56,10,57,48,10,57,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,48,70,10,69,78,67,79,68,73, 78,71,32,56,52,54,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,51,48, 10,54,48,10,67,48,10,55,48,10,52,56,10,52,56,10, 57,48,10,57,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,49,49,48,10,69,78,67,79,68,73,78,71,32,56, 52,54,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,51,56,10,48,56,10,48,56,10, 49,48,10,49,48,10,49,48,10,50,48,10,65,48,10,52, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,73,102,114,97,107,116, 117,114,10,69,78,67,79,68,73,78,71,32,56,52,54,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,70,56,10,56,56,10,52,56,10,48,56,10, 49,48,10,49,48,10,48,56,10,67,56,10,51,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,49,50,10,69, 78,67,79,68,73,78,71,32,56,52,54,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 49,56,10,53,52,10,51,56,10,49,48,10,49,48,10,50, 48,10,54,48,10,65,56,10,53,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,102,105,105,54,49,50,56,57,10,69,78,67, 79,68,73,78,71,32,56,52,54,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,49,48, 10,50,56,10,50,56,10,50,56,10,50,56,10,50,56,10, 49,48,10,51,48,10,52,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,49,52,10,69,78,67,79,68,73,78, 71,32,56,52,54,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,65,48,10,70,56,10, 65,48,10,66,48,10,65,56,10,65,56,10,65,56,10,65, 56,10,66,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,49,53,10,69,78,67,79,68,73,78,71,32,56,52, 54,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,67,52,10,67,52,10,65,52,10,65, 52,10,66,52,10,66,52,10,65,67,10,65,67,10,65,52, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,54,49,51, 53,50,10,69,78,67,79,68,73,78,71,32,56,52,55,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,57,48,10,57,48,10,68,48,10,68,48,10, 68,67,10,66,52,10,66,52,10,57,52,10,57,67,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,49,55,10,69, 78,67,79,68,73,78,71,32,56,52,55,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 55,48,10,56,56,10,69,56,10,68,56,10,69,56,10,67, 56,10,67,56,10,56,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,119,101,105,101,114,115,116,114,97,115,115,10,69, 78,67,79,68,73,78,71,32,56,52,55,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 70,48,10,52,56,10,52,56,10,52,56,10,55,48,10,56, 48,10,56,48,10,56,48,10,56,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,49,57,10,69,78,67,79,68, 73,78,71,32,56,52,55,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,70,48,10,65, 56,10,65,56,10,65,56,10,65,56,10,66,48,10,65,48, 10,65,48,10,65,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,49,65,10,69,78,67,79,68,73,78,71,32, 56,52,55,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,48,10,65,56,10,65,56, 10,65,56,10,65,56,10,65,56,10,65,56,10,65,56,10, 55,48,10,48,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 49,66,10,69,78,67,79,68,73,78,71,32,56,52,55,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,70,48,10,52,56,10,52,56,10,52,56,10, 55,48,10,65,48,10,57,48,10,57,48,10,57,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,82,102,114,97,107,116,117,114,10, 69,78,67,79,68,73,78,71,32,56,52,55,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,48,10,65,56,10,54,56,10,50,56,10,51,48,10, 51,48,10,66,48,10,65,56,10,52,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,49,68,10,69,78,67,79, 68,73,78,71,32,56,52,55,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,70,48,10, 65,56,10,65,56,10,65,56,10,66,48,10,66,48,10,65, 56,10,65,56,10,65,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 112,114,101,115,99,114,105,112,116,105,111,110,10,69,78,67, 79,68,73,78,71,32,56,52,55,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,70,48, 10,56,56,10,56,56,10,56,56,10,70,48,10,65,56,10, 57,48,10,65,56,10,56,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,49,70,10,69,78,67,79,68,73,78, 71,32,56,52,55,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,54,48,10,50,48,10,70,48,10,65,56,10, 65,56,10,65,56,10,70,48,10,65,48,10,66,48,10,65, 56,10,65,56,10,50,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,50,48,10,69,78,67,79,68,73,78,71,32,56,52, 56,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 54,56,10,66,56,10,54,56,10,65,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,50,49, 10,69,78,67,79,68,73,78,71,32,56,52,56,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,69, 48,10,52,48,10,55,48,10,54,48,10,51,48,10,50,48, 10,51,48,10,48,48,10,49,48,10,49,48,10,49,48,10, 49,56,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,116,114,97,100,101,109,97,114,107,10,69, 78,67,79,68,73,78,71,32,56,52,56,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 70,52,10,53,67,10,53,52,10,53,52,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,50,51,10,69,78,67,79,68, 73,78,71,32,56,52,56,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,54,48,10,50,48,10,65,56,10,65, 56,10,65,56,10,65,56,10,55,48,10,55,48,10,55,48, 10,50,48,10,50,48,10,50,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,50,52,10,69,78,67,79,68,73,78,71,32, 56,52,56,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,70,56,10,50,56,10,50,56, 10,53,48,10,53,48,10,53,48,10,65,48,10,65,48,10, 70,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 50,53,10,69,78,67,79,68,73,78,71,32,56,52,56,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,55,56,10,49,48,10,50,48,10,55,56,10, 49,48,10,50,48,10,55,48,10,48,56,10,48,56,10,56, 56,10,55,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,79,109,101,103,97,10,69,78,67, 79,68,73,78,71,32,56,52,56,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,55,48, 10,56,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 53,48,10,53,48,10,68,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,50,55,10,69,78,67,79,68,73,78, 71,32,56,52,56,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,68,56,10,53,48,10, 53,48,10,56,56,10,56,56,10,56,56,10,56,56,10,56, 56,10,55,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,50,56,10,69,78,67,79,68,73,78,71,32,56,52, 56,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,55,48,10,56,56,10,48,56,10,52, 56,10,51,48,10,52,56,10,48,56,10,56,56,10,55,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,50,57, 10,69,78,67,79,68,73,78,71,32,56,52,56,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,54,48,10,49,48, 10,49,48,10,49,48,10,49,48,10,49,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,50,65,10,69,78,67, 79,68,73,78,71,32,56,52,57,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,56,56, 10,56,56,10,57,48,10,65,48,10,67,48,10,65,48,10, 57,48,10,56,56,10,56,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,50,66,10,69,78,67,79,68,73,78, 71,32,56,52,57,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,50,48,10,53,48,10,50,48,10, 50,48,10,53,48,10,56,56,10,56,56,10,70,56,10,56, 56,10,56,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,50,67,10,69,78,67,79,68,73,78,71,32,56,52, 57,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,70,48,10,52,56,10,52,56,10,52, 56,10,55,48,10,57,48,10,57,48,10,57,48,10,69,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,50,68, 10,69,78,67,79,68,73,78,71,32,56,52,57,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,51,56,10,53,48,10,57,48,10,56,56,10,65,56, 10,57,48,10,56,48,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,101,115,116,105,109,97,116,101,100,10,69, 78,67,79,68,73,78,71,32,56,52,57,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,55,48,10,68,56,10,68,56,10,70, 56,10,67,48,10,67,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,50,70,10,69,78,67,79,68, 73,78,71,32,56,52,57,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,51,56,10,52,56,10,55,56,10,56,48, 10,57,48,10,54,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,51,48,10,69,78,67,79,68,73,78,71,32, 56,52,57,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,48,10,56,56,10,56,56, 10,56,48,10,54,48,10,56,48,10,56,56,10,56,56,10, 55,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 51,49,10,69,78,67,79,68,73,78,71,32,56,52,57,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,55,67,10,57,48,10,49,48,10,49,48,10, 55,56,10,50,48,10,50,48,10,65,48,10,52,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,51,50,10,69, 78,67,79,68,73,78,71,32,56,52,57,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,56,10,48,56,10,48,56,10,48,56,10,55,56,10,48, 56,10,48,56,10,48,56,10,70,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,51,51,10,69,78,67,79,68, 73,78,71,32,56,52,57,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,52,52,10,54, 67,10,53,52,10,53,52,10,52,52,10,56,56,10,56,56, 10,56,56,10,56,52,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,51,52,10,69,78,67,79,68,73,78,71,32, 56,53,48,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,51,56,10,52,56,10,52,56,10,57,48,10,57,48,10, 69,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,108,101,112,104, 10,69,78,67,79,68,73,78,71,32,56,53,48,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,57,48,10,52,56, 10,54,56,10,57,48,10,56,56,10,67,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,51,54,10,69,78,67, 79,68,73,78,71,32,56,53,48,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,70,48,10,49,48,10,49,48,10, 49,48,10,49,48,10,70,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,51,55,10,69,78,67,79,68,73,78, 71,32,56,53,48,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,52,48,10,50,48,10,49,48,10,49,48,10,50, 56,10,52,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,51,56,10,69,78,67,79,68,73,78,71,32,56,53, 48,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,70, 56,10,49,48,10,49,48,10,49,48,10,49,48,10,49,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,51,57, 10,69,78,67,79,68,73,78,71,32,56,53,48,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,51,48,10,51,48,10,48,48,10,55,48,10,51,48, 10,51,48,10,51,48,10,51,48,10,55,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,51,65,10,69,78,67, 79,68,73,78,71,32,56,53,48,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,52,10,55,67,10,56,67,10, 56,52,10,56,52,10,55,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,51,68,10,69,78,67,79,68,73,78, 71,32,56,53,48,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,65,56,10,65,56,10,65,56,10,53,48,10,53, 48,10,65,48,10,65,48,10,67,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,51,69,10,69,78,67,79,68,73,78,71,32,56,53, 49,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,70,56,10,65,56,10,65,48,10,65, 48,10,65,48,10,65,48,10,65,48,10,65,48,10,65,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,51,70, 10,69,78,67,79,68,73,78,71,32,56,53,49,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,70,56,10,65,56,10,65,56,10,65,56,10,65,56, 10,65,56,10,65,56,10,65,56,10,65,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,52,48,10,69,78,67, 79,68,73,78,71,32,56,53,49,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,70,56, 10,65,48,10,53,48,10,53,48,10,50,56,10,53,48,10, 53,48,10,65,48,10,70,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,52,49,10,69,78,67,79,68,73,78, 71,32,56,53,49,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,55,48,10,56,56,10, 56,56,10,67,56,10,48,56,10,48,56,10,48,56,10,56, 56,10,55,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,52,50,10,69,78,67,79,68,73,78,71,32,56,53, 49,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,70,56,10,48,56,10,48,56,10,48, 56,10,48,56,10,48,56,10,48,56,10,48,56,10,48,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,52,51, 10,69,78,67,79,68,73,78,71,32,56,53,49,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,56,10,48,56,10,48,56,10,48,56,10,48,56, 10,48,56,10,48,56,10,48,56,10,70,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,52,52,10,69,78,67, 79,68,73,78,71,32,56,53,49,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,53,48,10, 53,48,10,56,56,10,56,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,52,53,10,69,78,67,79,68,73,78, 71,32,56,53,49,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,55,56,10,53,52,10, 53,52,10,53,52,10,65,56,10,65,56,10,65,56,10,65, 56,10,70,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,52,54,10,69,78,67,79,68,73,78,71,32,56,53, 49,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,49,52,10,49,52,10,49,52,10,55, 52,10,65,56,10,65,56,10,65,56,10,65,56,10,54,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,52,55, 10,69,78,67,79,68,73,78,71,32,56,53,49,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,51,56,10,53,52, 10,53,52,10,66,56,10,65,48,10,55,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,52,56,10,69,78,67, 79,68,73,78,71,32,56,53,50,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,49,48, 10,49,48,10,48,48,10,55,56,10,50,56,10,50,56,10, 53,48,10,53,48,10,53,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,52,57,10,69,78,67,79,68,73,78, 71,32,56,53,50,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,49,48,10,49,48,10, 48,48,10,55,56,10,50,56,10,50,56,10,53,48,10,53, 48,10,53,48,10,53,48,10,69,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,52,65,10,69,78,67,79,68,73,78,71,32,56,53, 50,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,50,48,10,50,48,10,70,48,10,65, 56,10,65,56,10,65,56,10,66,48,10,50,48,10,51,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,52,66, 10,69,78,67,79,68,73,78,71,32,56,53,50,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,66,48,10,52,56,10,67,56,10,50,56, 10,49,48,10,50,56,10,50,56,10,49,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,111,110,101,116,104,105,114,100,10,69,78, 67,79,68,73,78,71,32,56,53,51,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 48,10,56,48,10,56,48,10,56,48,10,57,48,10,50,56, 10,49,48,10,48,56,10,51,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,116,119,111,116,104,105,114,100,115,10,69,78,67,79, 68,73,78,71,32,56,53,51,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,48,10, 65,48,10,52,48,10,56,48,10,70,48,10,50,56,10,49, 48,10,48,56,10,51,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,53,53,10,69,78,67,79,68,73,78,71, 32,56,53,51,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,56,48,10,56,48,10,56, 48,10,56,48,10,66,56,10,50,48,10,51,48,10,48,56, 10,51,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,53,54,10,69,78,67,79,68,73,78,71,32,56,53,51, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,52,48,10,65,48,10,52,48,10,56,48,10,69,48, 10,51,56,10,50,48,10,51,48,10,48,56,10,51,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,53,55,10, 69,78,67,79,68,73,78,71,32,56,53,51,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,52,48, 10,65,48,10,52,48,10,50,48,10,67,48,10,51,56,10, 50,48,10,51,48,10,48,56,10,51,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,53,56,10,69,78,67,79, 68,73,78,71,32,56,53,51,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,56,48,10, 67,48,10,69,48,10,52,48,10,51,56,10,50,48,10,51, 48,10,48,56,10,51,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,53,57,10,69,78,67,79,68,73,78,71, 32,56,53,51,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,56,48,10,56,48,10,56, 48,10,56,48,10,57,56,10,50,48,10,51,48,10,50,56, 10,49,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,53,65,10,69,78,67,79,68,73,78,71,32,56,53,51, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,69,48,10,56,48,10,67,48,10,50,48, 10,68,56,10,50,48,10,51,48,10,50,56,10,49,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,111,110,101,101,105,103,104,116, 104,10,69,78,67,79,68,73,78,71,32,56,53,51,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,48,10,56,48,10,56,48,10,56,48,10,57, 48,10,50,56,10,49,48,10,50,56,10,49,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,116,104,114,101,101,101,105,103,104,116, 104,115,10,69,78,67,79,68,73,78,71,32,56,53,52,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,52,48,10,65,48,10,52,48,10,50,48,10, 68,48,10,50,56,10,49,48,10,50,56,10,49,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,102,105,118,101,101,105,103,104,116, 104,115,10,69,78,67,79,68,73,78,71,32,56,53,52,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,69,48,10,56,48,10,69,48,10,50,48,10, 68,48,10,50,56,10,49,48,10,50,56,10,49,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,115,101,118,101,110,101,105,103,104, 116,104,115,10,69,78,67,79,68,73,78,71,32,56,53,52, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,69,48,10,50,48,10,52,48,10,52,48, 10,53,48,10,50,56,10,49,48,10,50,56,10,49,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,53,70,10, 69,78,67,79,68,73,78,71,32,56,53,52,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,56,48,10,56,48,10,56,48,10,56,48,10,56,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,54,48,10,69,78,67,79, 68,73,78,71,32,56,53,52,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,54,49,10,69,78,67,79,68,73,78,71, 32,56,53,52,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,53,48,10,53,48,10,53, 48,10,53,48,10,53,48,10,53,48,10,53,48,10,53,48, 10,53,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,54,50,10,69,78,67,79,68,73,78,71,32,56,53,52, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,65,56,10,65,56,10,65,56,10,65,56, 10,65,56,10,65,56,10,65,56,10,65,56,10,65,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,54,51,10, 69,78,67,79,68,73,78,71,32,56,53,52,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,65,56,10,65,56,10,65,56,10,65,56,10,65,56,10, 65,56,10,65,56,10,57,48,10,57,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,54,52,10,69,78,67,79, 68,73,78,71,32,56,53,52,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,56,56,10, 56,56,10,56,56,10,56,56,10,53,48,10,53,48,10,53, 48,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,54,53,10,69,78,67,79,68,73,78,71, 32,56,53,52,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,65,56,10,65,56,10,65, 56,10,65,56,10,65,56,10,65,56,10,65,56,10,52,56, 10,52,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,54,54,10,69,78,67,79,68,73,78,71,32,56,53,53, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,68,52,10,68,52,10,68,52,10,68,52, 10,68,52,10,68,52,10,68,52,10,53,52,10,53,52,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,54,55,10, 69,78,67,79,68,73,78,71,32,56,53,53,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,68,67,10,68,67,10,68,67,10,68,67,10,68,67,10, 68,67,10,68,67,10,53,67,10,53,67,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,54,56,10,69,78,67,79, 68,73,78,71,32,56,53,53,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,65,56,10, 65,56,10,65,56,10,57,48,10,57,48,10,57,48,10,65, 56,10,65,56,10,65,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,54,57,10,69,78,67,79,68,73,78,71, 32,56,53,53,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,56,56,10,56,56,10,53, 48,10,53,48,10,50,48,10,53,48,10,53,48,10,56,56, 10,56,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,54,65,10,69,78,67,79,68,73,78,71,32,56,53,53, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,65,56,10,65,56,10,65,56,10,52,56, 10,52,56,10,52,56,10,65,56,10,65,56,10,65,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,54,66,10, 69,78,67,79,68,73,78,71,32,56,53,53,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,65,67,10,65,67,10,65,67,10,52,67,10,52,67,10, 52,67,10,65,67,10,65,67,10,65,67,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,54,67,10,69,78,67,79, 68,73,78,71,32,56,53,53,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,56,48,10, 56,48,10,56,48,10,56,48,10,56,48,10,56,48,10,56, 48,10,56,48,10,70,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,54,68,10,69,78,67,79,68,73,78,71, 32,56,53,53,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 48,10,56,48,10,56,48,10,56,48,10,56,48,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,54,69,10,69,78,67,79,68,73,78,71,32,56,53,53, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,70,48,10,52,56,10,52,56,10,52,56, 10,52,56,10,52,56,10,52,56,10,52,56,10,70,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,54,70,10, 69,78,67,79,68,73,78,71,32,56,53,53,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,56,56,10,56,56,10,68,56,10,65,56,10,65,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,55,48,10,69,78,67,79, 68,73,78,71,32,56,53,54,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 50,48,10,48,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,55,49,10,69,78,67,79,68,73,78,71, 32,56,53,54,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,53,48,10,48, 48,10,53,48,10,53,48,10,53,48,10,53,48,10,53,48, 10,53,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,55,50,10,69,78,67,79,68,73,78,71,32,56,53,54, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,65,56,10,48,48,10,65,56, 10,65,56,10,65,56,10,65,56,10,65,56,10,65,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,55,51,10, 69,78,67,79,68,73,78,71,32,56,53,54,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,56,48,10,48,48,10,65,56,10,65,56,10, 65,56,10,65,56,10,57,48,10,57,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,55,52,10,69,78,67,79, 68,73,78,71,32,56,53,54,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,56,56,10,56,56,10,56,56,10,53, 48,10,53,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,55,53,10,69,78,67,79,68,73,78,71, 32,56,53,54,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,56,10,48, 48,10,65,56,10,65,56,10,65,56,10,65,56,10,52,56, 10,52,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,55,54,10,69,78,67,79,68,73,78,71,32,56,53,54, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,49,52,10,48,48,10,68,52, 10,68,52,10,68,52,10,68,52,10,53,52,10,53,52,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,55,55,10, 69,78,67,79,68,73,78,71,32,56,53,54,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,49,67,10,48,48,10,68,67,10,68,67,10, 68,67,10,68,67,10,53,67,10,53,67,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,55,56,10,69,78,67,79, 68,73,78,71,32,56,53,54,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 56,48,10,48,48,10,65,56,10,65,56,10,57,48,10,57, 48,10,65,56,10,65,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,55,57,10,69,78,67,79,68,73,78,71, 32,56,53,54,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,56,56,10,53,48,10,50,48,10,50,48,10,53,48, 10,56,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,55,65,10,69,78,67,79,68,73,78,71,32,56,53,55, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,56,10,48,48,10,65,56, 10,65,56,10,52,56,10,52,56,10,65,56,10,65,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,55,66,10, 69,78,67,79,68,73,78,71,32,56,53,55,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,67,10,48,48,10,65,67,10,65,67,10, 52,67,10,52,67,10,65,67,10,65,67,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,55,67,10,69,78,67,79, 68,73,78,71,32,56,53,55,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,54,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,55,68,10,69,78,67,79,68,73,78,71, 32,56,53,55,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,48,10,56,56,10,56,48,10,56,48,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,55,69,10,69,78,67,79,68,73,78,71,32,56,53,55, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,56,10,48,56,10,48,56,10,55,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,55,70,10, 69,78,67,79,68,73,78,71,32,56,53,55,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,68,48,10,65,56,10, 65,56,10,65,56,10,65,56,10,56,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,56,48,10,69,78,67,79, 68,73,78,71,32,56,53,55,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,55,48,10, 65,56,10,65,56,10,65,56,10,65,56,10,65,56,10,65, 56,10,65,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,56,49,10,69,78,67,79,68,73,78,71, 32,56,53,55,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,70,48,10,56,56,10,69, 56,10,65,56,10,65,56,10,65,56,10,69,56,10,56,56, 10,70,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,56,50,10,69,78,67,79,68,73,78,71,32,56,53,55, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,55,48,10,65,56,10,65,56,10,70,56, 10,65,56,10,70,56,10,65,56,10,65,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,56,51,10, 69,78,67,79,68,73,78,71,32,56,53,55,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,48,10,56,56,10,48,56,10,48,56,10,48,56,10, 48,56,10,48,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,114,114,111,119,108,101,102,116,10,69,78, 67,79,68,73,78,71,32,56,53,57,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,50,48,10,52,48,10,70,56, 10,52,48,10,50,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,114,114,111,119,117,112,10,69,78,67,79,68,73, 78,71,32,56,53,57,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,55,48, 10,65,56,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,114, 114,111,119,114,105,103,104,116,10,69,78,67,79,68,73,78, 71,32,56,53,57,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,50,48,10,49,48,10,70,56,10,49,48,10,50, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,114,114, 111,119,100,111,119,110,10,69,78,67,79,68,73,78,71,32, 56,53,57,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,65,56,10,55,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,114,114,111,119, 98,111,116,104,10,69,78,67,79,68,73,78,71,32,56,53, 57,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,52,56,10,70,67,10,52,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,114,114,111,119,117,112, 100,110,10,69,78,67,79,68,73,78,71,32,56,53,57,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,50,48,10,55,48,10,65,56,10,50,48,10, 50,48,10,50,48,10,65,56,10,55,48,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,57,54,10,69, 78,67,79,68,73,78,71,32,56,53,57,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 67,48,10,70,48,10,69,48,10,65,48,10,50,48,10,49, 48,10,49,48,10,48,56,10,48,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,57,55,10,69,78,67,79,68, 73,78,71,32,56,53,57,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,49,56,10,55, 56,10,51,56,10,50,56,10,50,48,10,52,48,10,52,48, 10,56,48,10,56,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,57,56,10,69,78,67,79,68,73,78,71,32, 56,54,48,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,56,48,10,56,48,10,52,48, 10,52,48,10,50,48,10,50,56,10,51,56,10,55,56,10, 49,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 57,57,10,69,78,67,79,68,73,78,71,32,56,54,48,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,56,10,48,56,10,49,48,10,49,48,10, 50,48,10,65,48,10,69,48,10,70,48,10,67,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,57,65,10,69, 78,67,79,68,73,78,71,32,56,54,48,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,50,56,10,52,56,10,70, 67,10,53,48,10,51,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,57,66,10,69,78,67,79,68, 73,78,71,32,56,54,48,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,51,48,10,50,56,10,70,67,10,52,56, 10,53,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,57,67,10,69,78,67,79,68,73,78,71,32, 56,54,48,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,67,48,10,68,56,10,54,52,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 57,68,10,69,78,67,79,68,73,78,71,32,56,54,48,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,67,10, 54,67,10,57,56,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,57,69,10,69, 78,67,79,68,73,78,71,32,56,54,48,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,50,56,10,53,48,10,70, 67,10,53,48,10,50,56,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,57,70,10,69,78,67,79,68, 73,78,71,32,56,54,48,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,55, 48,10,65,56,10,55,48,10,65,56,10,50,48,10,50,48, 10,50,48,10,50,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,65,48,10,69,78,67,79,68,73,78,71,32, 56,54,48,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,53,48,10,50,56,10,70,67,10,50,56,10,53,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 65,49,10,69,78,67,79,68,73,78,71,32,56,54,48,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 65,56,10,55,48,10,65,56,10,55,48,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,65,50,10,69, 78,67,79,68,73,78,71,32,56,54,49,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,50,52,10,52,56,10,70, 48,10,52,56,10,50,52,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,65,51,10,69,78,67,79,68, 73,78,71,32,56,54,49,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,57,48,10,52,56,10,51,67,10,52,56, 10,57,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,65,52,10,69,78,67,79,68,73,78,71,32, 56,54,49,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,48,10,52,56,10,70,56,10,52,56,10,50,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 65,53,10,69,78,67,79,68,73,78,71,32,56,54,49,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,50,48,10,55,48,10,65,56,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,70,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,65,54,10,69, 78,67,79,68,73,78,71,32,56,54,49,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,50,48,10,57,48,10,70, 56,10,57,48,10,50,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,65,55,10,69,78,67,79,68, 73,78,71,32,56,54,49,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,70,56,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,65,56, 10,55,48,10,50,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 114,114,111,119,117,112,100,110,98,115,101,10,69,78,67,79, 68,73,78,71,32,56,54,49,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,50,48,10, 55,48,10,65,56,10,50,48,10,50,48,10,65,56,10,55, 48,10,50,48,10,70,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,65,57,10,69,78,67,79,68,73,78,71, 32,56,54,49,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,50,56,10,52,52,10,70,56,10,52,48,10,50,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,65,65,10,69,78,67,79,68,73,78,71,32,56,54,49, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,53,48, 10,56,56,10,55,67,10,48,56,10,49,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,65,66,10, 69,78,67,79,68,73,78,71,32,56,54,49,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,50,48,10,52,67,10, 70,67,10,52,56,10,50,56,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,65,67,10,69,78,67,79, 68,73,78,71,32,56,54,50,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,49,48,10,67,56,10,70,67,10,52, 56,10,53,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,65,68,10,69,78,67,79,68,73,78,71, 32,56,54,50,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,52,56,10,68,67,10,69,67,10,52,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,65,69,10,69,78,67,79,68,73,78,71,32,56,54,50, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,56, 10,53,56,10,70,67,10,54,56,10,52,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,65,70,10, 69,78,67,79,68,73,78,71,32,56,54,50,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,56,48,10,56,48,10,57,48,10,66,48,10,68,48,10, 57,48,10,49,48,10,51,56,10,49,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,66,48,10,69,78,67,79, 68,73,78,71,32,56,54,50,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,50,48,10, 52,48,10,70,56,10,52,56,10,50,56,10,48,56,10,48, 56,10,48,56,10,48,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,66,49,10,69,78,67,79,68,73,78,71, 32,56,54,50,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,50,48,10,49,48,10,70, 56,10,57,48,10,65,48,10,56,48,10,56,48,10,56,48, 10,56,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,66,50,10,69,78,67,79,68,73,78,71,32,56,54,50, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,56,10,48,56,10,48,56,10,48,56, 10,50,56,10,52,56,10,70,56,10,52,48,10,50,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,66,51,10, 69,78,67,79,68,73,78,71,32,56,54,50,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,56,48,10,56,48,10,56,48,10,56,48,10,65,48,10, 57,48,10,70,56,10,49,48,10,50,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,66,52,10,69,78,67,79, 68,73,78,71,32,56,54,50,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,70,48,10,49,48,10,49,48,10,51, 56,10,49,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 99,97,114,114,105,97,103,101,114,101,116,117,114,110,10,69, 78,67,79,68,73,78,71,32,56,54,50,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,56,10,48,56,10,48,56,10,52, 56,10,70,56,10,52,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,66,54,10,69,78,67,79,68, 73,78,71,32,56,54,51,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,51,48,10,52,56,10,52,56,10,69,56, 10,52,56,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,66,55,10,69,78,67,79,68,73,78,71,32, 56,54,51,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,54,48,10,57,48,10,57,48,10,66,56,10,57,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 66,56,10,69,78,67,79,68,73,78,71,32,56,54,51,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,70,56,10,56,48,10,69,48,10,67,48,10, 65,48,10,50,48,10,49,48,10,49,48,10,48,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,66,57,10,69, 78,67,79,68,73,78,71,32,56,54,51,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 65,48,10,67,48,10,70,56,10,67,48,10,65,56,10,49, 56,10,70,56,10,49,56,10,50,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,66,65,10,69,78,67,79,68, 73,78,71,32,56,54,51,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,51,56,10,51,48,10,65,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,66,66,10,69,78,67,79,68,73,78,71,32, 56,54,51,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,69,48, 10,54,48,10,65,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 66,67,10,69,78,67,79,68,73,78,71,32,56,54,51,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 52,48,10,70,56,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,66,68,10,69, 78,67,79,68,73,78,71,32,56,54,51,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,70, 56,10,52,48,10,50,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,66,69,10,69,78,67,79,68, 73,78,71,32,56,54,51,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,51, 48,10,50,56,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,66,70,10,69,78,67,79,68,73,78,71,32, 56,54,51,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,54,48,10,65,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 67,48,10,69,78,67,79,68,73,78,71,32,56,54,52,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 49,48,10,70,56,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,67,49,10,69, 78,67,79,68,73,78,71,32,56,54,52,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,70, 56,10,49,48,10,50,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,67,50,10,69,78,67,79,68, 73,78,71,32,56,54,52,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,56, 10,51,48,10,50,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,67,51,10,69,78,67,79,68,73,78,71,32, 56,54,52,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,65,48,10,54,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 67,52,10,69,78,67,79,68,73,78,71,32,56,54,52,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,50,48,10,49,48,10,70,56,10,49,48,10, 50,48,10,52,48,10,70,56,10,52,48,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,67,53,10,69, 78,67,79,68,73,78,71,32,56,54,52,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 53,48,10,70,48,10,53,48,10,53,48,10,53,48,10,53, 48,10,53,48,10,55,56,10,53,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,67,54,10,69,78,67,79,68, 73,78,71,32,56,54,52,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,52, 48,10,70,56,10,52,48,10,50,48,10,49,48,10,70,56, 10,49,48,10,50,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,67,55,10,69,78,67,79,68,73,78,71,32, 56,54,52,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,52,48,10,70,56, 10,52,48,10,50,48,10,52,48,10,70,56,10,52,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 67,56,10,69,78,67,79,68,73,78,71,32,56,54,52,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,53,48,10,70,56,10,53,48,10,53,48,10, 53,48,10,53,48,10,53,48,10,53,48,10,53,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,67,57,10,69, 78,67,79,68,73,78,71,32,56,54,52,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,49,48,10,70,56,10,49,48,10,50,48,10,49, 48,10,70,56,10,49,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,67,65,10,69,78,67,79,68, 73,78,71,32,56,54,53,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,53,48,10,53, 48,10,53,48,10,53,48,10,53,48,10,53,48,10,53,48, 10,70,56,10,53,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,67,66,10,69,78,67,79,68,73,78,71,32, 56,54,53,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,50,48, 10,52,48,10,70,56,10,48,48,10,70,56,10,49,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 67,67,10,69,78,67,79,68,73,78,71,32,56,54,53,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,50,48,10,49,48,10, 70,56,10,48,48,10,70,56,10,52,48,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,67,68,10,69, 78,67,79,68,73,78,71,32,56,54,53,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,49,52,10,50,56,10,55,67,10,57, 48,10,55,67,10,50,48,10,53,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,67,69,10,69,78,67,79,68, 73,78,71,32,56,54,53,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,56,10,53,56,10,70,67,10,65,52,10,70,67, 10,54,56,10,52,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,67,70,10,69,78,67,79,68,73,78,71,32, 56,54,53,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,65,48, 10,53,48,10,70,56,10,50,52,10,70,56,10,49,48,10, 50,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,114,114,111,119, 100,98,108,108,101,102,116,10,69,78,67,79,68,73,78,71, 32,56,54,53,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,49, 48,10,50,48,10,55,67,10,56,48,10,55,67,10,50,48, 10,49,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,114,114,111, 119,100,98,108,117,112,10,69,78,67,79,68,73,78,71,32, 56,54,53,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,53,48,10,68,56, 10,53,48,10,53,48,10,53,48,10,53,48,10,53,48,10, 53,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,114,114,111,119, 100,98,108,114,105,103,104,116,10,69,78,67,79,68,73,78, 71,32,56,54,53,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 50,48,10,49,48,10,70,56,10,48,52,10,70,56,10,49, 48,10,50,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,114,114, 111,119,100,98,108,100,111,119,110,10,69,78,67,79,68,73, 78,71,32,56,54,53,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,53,48,10,53,48, 10,53,48,10,53,48,10,53,48,10,53,48,10,68,56,10, 53,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,114, 114,111,119,100,98,108,98,111,116,104,10,69,78,67,79,68, 73,78,71,32,56,54,54,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,52,56,10,70,67,10,56,52,10,70,67, 10,52,56,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,68,53,10,69,78,67,79,68,73,78,71,32, 56,54,54,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,53,48,10,68,56, 10,53,48,10,53,48,10,53,48,10,68,56,10,53,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 68,54,10,69,78,67,79,68,73,78,71,32,56,54,54,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,70,56,10,65,48,10, 68,48,10,65,56,10,57,52,10,48,56,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,68,55,10,69, 78,67,79,68,73,78,71,32,56,54,54,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,55,67,10,49,52,10,50,67,10,53, 52,10,65,52,10,52,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,68,56,10,69,78,67,79,68, 73,78,71,32,56,54,54,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,52,48,10,65,52,10,53,52,10,50,67,10,49,52, 10,55,67,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,68,57,10,69,78,67,79,68,73,78,71,32, 56,54,54,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,56, 10,57,52,10,65,56,10,68,48,10,65,48,10,70,56,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 68,65,10,69,78,67,79,68,73,78,71,32,56,54,54,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,49,48,10,51,67,10, 52,48,10,70,67,10,52,48,10,51,67,10,49,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,68,66,10,69, 78,67,79,68,73,78,71,32,56,54,54,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,50,48,10,70,48,10,48,56,10,70, 67,10,48,56,10,70,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,68,67,10,69,78,67,79,68, 73,78,71,32,56,54,54,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,52,48,10,69,56,10,68,52,10,52,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,68,68,10,69,78,67,79,68,73,78,71,32, 56,54,54,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,56,10,53,67,10,65,67,10,48,56,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 68,69,10,69,78,67,79,68,73,78,71,32,56,54,55,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,50,48,10,55,48,10,65,56,10,50,48,10, 55,48,10,50,48,10,55,48,10,50,48,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,68,70,10,69, 78,67,79,68,73,78,71,32,56,54,55,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,50,48,10,55,48,10,50,48,10,55,48,10,50, 48,10,65,56,10,55,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,69,48,10,69,78,67,79,68, 73,78,71,32,56,54,55,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,50,48,10,52,48,10,65,56,10,52,48, 10,50,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,69,49,10,69,78,67,79,68,73,78,71,32, 56,54,55,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,55,48,10,65,56, 10,48,48,10,50,48,10,50,48,10,48,48,10,50,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 69,50,10,69,78,67,79,68,73,78,71,32,56,54,55,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 49,48,10,65,56,10,49,48,10,50,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,69,51,10,69, 78,67,79,68,73,78,71,32,56,54,55,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,50,48,10,48,48,10,50,48,10,50,48,10,48, 48,10,65,56,10,55,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,69,52,10,69,78,67,79,68, 73,78,71,32,56,54,55,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,65,48,10,67,48,10,70,56,10,67,48, 10,65,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,69,53,10,69,78,67,79,68,73,78,71,32, 56,54,55,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,56,10,49,56,10,70,56,10,49,56,10,50,56,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 69,54,10,69,78,67,79,68,73,78,71,32,56,54,55,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 55,56,10,56,56,10,55,56,10,50,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,69,55,10,69, 78,67,79,68,73,78,71,32,56,54,55,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,53,48,10,68,56,10,53,48,10,53,48,10,53, 48,10,53,48,10,53,48,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,69,56,10,69,78,67,79,68, 73,78,71,32,56,54,56,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,50,48,10,70,48,10,56,56,10,70,48, 10,50,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,69,57,10,69,78,67,79,68,73,78,71,32, 56,54,56,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,48,10,53,48,10,53,48, 10,53,48,10,53,48,10,53,48,10,68,56,10,53,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 69,65,10,69,78,67,79,68,73,78,71,32,56,54,56,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,50,48,10,53,48,10,68,56,10,53,48,10,53,48,10, 55,48,10,48,48,10,55,48,10,53,48,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,69,66,10,69, 78,67,79,68,73,78,71,32,56,54,56,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,53,48,10,68,56,10,53,48,10,53,48,10,53, 48,10,68,56,10,56,56,10,70,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,69,67,10,69,78,67,79,68, 73,78,71,32,56,54,56,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,53, 48,10,70,56,10,56,56,10,53,48,10,53,48,10,68,56, 10,56,56,10,70,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,69,68,10,69,78,67,79,68,73,78,71,32, 56,54,56,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,55,48,10,70,56, 10,55,48,10,55,48,10,55,48,10,70,56,10,65,56,10, 70,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 69,69,10,69,78,67,79,68,73,78,71,32,56,54,56,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,50,48,10,53,48,10,68,56,10,53,48,10, 68,56,10,53,48,10,53,48,10,53,48,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,69,70,10,69, 78,67,79,68,73,78,71,32,56,54,56,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,53,48,10,68,56,10,53,48,10,68,56,10,53, 48,10,68,56,10,56,56,10,70,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,70,48,10,69,78,67,79,68, 73,78,71,32,56,54,56,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,65,48,10,70,48,10,56,56,10,70,48, 10,65,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,70,49,10,69,78,67,79,68,73,78,71,32, 56,54,56,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,70,56,10,56,48,10,66,48, 10,69,48,10,57,48,10,49,48,10,48,56,10,48,56,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 70,50,10,69,78,67,79,68,73,78,71,32,56,54,57,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,56,48,10,56,48,10,52,48,10, 52,56,10,51,56,10,54,56,10,48,56,10,70,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,70,51,10,69, 78,67,79,68,73,78,71,32,56,54,57,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,53,48,10,68,56,10,53,48,10,53,48,10,53, 48,10,68,56,10,53,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,70,52,10,69,78,67,79,68, 73,78,71,32,56,54,57,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,49,48,10,54,56,10,70,67,10,54,56, 10,49,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,70,53,10,69,78,67,79,68,73,78,71,32, 56,54,57,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,53,48,10,55,56,10,53,48, 10,53,48,10,53,48,10,53,48,10,53,48,10,70,48,10, 53,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 70,54,10,69,78,67,79,68,73,78,71,32,56,54,57,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,49,48,10,70,56,10,49,48,10,49,48,10, 70,56,10,49,48,10,49,48,10,70,56,10,49,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,70,55,10,69, 78,67,79,68,73,78,71,32,56,54,57,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,50,56,10,52,56,10,70, 67,10,52,56,10,50,56,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,70,56,10,69,78,67,79,68, 73,78,71,32,56,54,57,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,53,48,10,52,56,10,70,67,10,52,56, 10,53,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,70,57,10,69,78,67,79,68,73,78,71,32, 56,54,57,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,51,48, 10,55,56,10,70,67,10,55,56,10,51,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 70,65,10,69,78,67,79,68,73,78,71,32,56,54,57,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,51,56,10, 53,56,10,70,67,10,53,56,10,51,56,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,70,66,10,69, 78,67,79,68,73,78,71,32,56,54,57,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,48,10,54,56,10,70, 67,10,54,56,10,55,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,70,67,10,69,78,67,79,68, 73,78,71,32,56,55,48,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,51,48,10,55,56,10,70,67,10,55,56,10,51,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,70,68,10,69,78,67,79,68,73,78,71,32, 56,55,48,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,48,10,54,48,10,66,56,10,54,48,10,50,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 70,69,10,69,78,67,79,68,73,78,71,32,56,55,48,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 51,48,10,69,56,10,51,48,10,50,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,70,70,10,69, 78,67,79,68,73,78,71,32,56,55,48,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,51,48,10,55,56,10,66,52,10,55, 56,10,51,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,118,101,114,115,97,108,10,69,78,67, 79,68,73,78,71,32,56,55,48,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,56,56, 10,56,56,10,56,56,10,70,56,10,56,56,10,56,56,10, 53,48,10,53,48,10,50,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,48,49,10,69,78,67,79,68,73,78, 71,32,56,55,48,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,50,48,10,53,48,10, 52,48,10,52,48,10,52,48,10,52,48,10,52,48,10,53, 48,10,50,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,112,97,114, 116,105,97,108,100,105,102,102,10,69,78,67,79,68,73,78, 71,32,56,55,48,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,51,48,10, 52,56,10,48,56,10,51,56,10,52,56,10,52,56,10,52, 56,10,51,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,101,120,105, 115,116,101,110,116,105,97,108,10,69,78,67,79,68,73,78, 71,32,56,55,48,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,70,56,10,48,56,10, 48,56,10,48,56,10,55,56,10,48,56,10,48,56,10,48, 56,10,70,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,48,52,10,69,78,67,79,68,73,78,71,32,56,55, 48,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 49,48,10,49,48,10,70,56,10,49,56,10,50,56,10,50, 56,10,55,56,10,50,56,10,50,56,10,52,56,10,70,56, 10,52,48,10,52,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,101,109,112,116,121,115,101, 116,10,69,78,67,79,68,73,78,71,32,56,55,48,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 49,48,10,49,48,10,55,48,10,57,56,10,65,56,10,65, 56,10,65,56,10,67,56,10,55,48,10,52,48,10,52,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,68,101,108,116,97,10,69,78,67,79, 68,73,78,71,32,56,55,49,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,50,48,10, 50,48,10,50,48,10,53,48,10,53,48,10,53,48,10,56, 56,10,56,56,10,70,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 103,114,97,100,105,101,110,116,10,69,78,67,79,68,73,78, 71,32,56,55,49,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,70,56,10,56,56,10, 56,56,10,53,48,10,53,48,10,53,48,10,50,48,10,50, 48,10,50,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,101,108,101, 109,101,110,116,10,69,78,67,79,68,73,78,71,32,56,55, 49,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,51,56,10,52, 48,10,56,48,10,70,48,10,56,48,10,52,48,10,51,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,110,111,116,101,108,101,109, 101,110,116,10,69,78,67,79,68,73,78,71,32,56,55,49, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,50,48,10,50,48,10,51,56,10,54,48, 10,65,48,10,70,48,10,65,48,10,54,48,10,51,56,10, 50,48,10,50,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,48,65,10, 69,78,67,79,68,73,78,71,32,56,55,49,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,51,56,10,52,48,10, 55,48,10,52,48,10,51,56,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,115,117,99,104,116,104,97,116,10,69,78,67, 79,68,73,78,71,32,56,55,49,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,48,10,49,48,10,48,56,10,55,56,10, 48,56,10,49,48,10,69,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,48,67,10,69,78,67,79,68,73,78, 71,32,56,55,49,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,50,48,10,50,48,10, 69,48,10,51,48,10,50,56,10,55,56,10,50,56,10,51, 48,10,69,48,10,50,48,10,50,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,48,68,10,69,78,67,79,68,73,78,71,32,56,55, 49,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,55, 48,10,48,56,10,51,56,10,48,56,10,55,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,50,48,69, 10,69,78,67,79,68,73,78,71,32,56,55,49,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,70,56,10,70,56,10,70,56,10,70,56, 10,70,56,10,70,56,10,70,56,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,112,114,111,100,117,99,116,10,69,78,67, 79,68,73,78,71,32,56,55,49,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,70,67,10,52,56, 10,52,56,10,52,56,10,52,56,10,52,56,10,52,56,10, 52,56,10,52,56,10,52,56,10,69,67,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,49,48,10,69,78,67,79,68,73,78, 71,32,56,55,50,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,69,67,10,52,56,10,52,56,10, 52,56,10,52,56,10,52,56,10,52,56,10,52,56,10,52, 56,10,52,56,10,70,67,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,115,117,109, 109,97,116,105,111,110,10,69,78,67,79,68,73,78,71,32, 56,55,50,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,70,67,10,56,48,10,52,48,10,50,48, 10,49,48,10,48,56,10,49,48,10,50,48,10,52,48,10, 56,48,10,70,67,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,109,105,110,117,115, 10,69,78,67,79,68,73,78,71,32,56,55,50,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,70,56, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,50,49,51,10,69,78,67, 79,68,73,78,71,32,56,55,50,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,70,56,10,48,48,10,50,48,10,50,48,10,70,56,10, 50,48,10,50,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,49,52,10,69,78,67,79,68,73,78, 71,32,56,55,50,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,50,48,10, 48,48,10,50,48,10,50,48,10,70,56,10,50,48,10,50, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,102,114,97, 99,116,105,111,110,10,69,78,67,79,68,73,78,71,32,56, 55,50,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,56,10,48,56,10,49,48,10, 49,48,10,50,48,10,50,48,10,52,48,10,52,48,10,56, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,49, 54,10,69,78,67,79,68,73,78,71,32,56,55,50,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,56,48,10,52,48,10,52,48,10,50, 48,10,50,48,10,49,48,10,49,48,10,48,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,115,116,101,114,105,115,107,109,97, 116,104,10,69,78,67,79,68,73,78,71,32,56,55,50,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,50,48,10,65,56,10,55,48,10, 70,56,10,55,48,10,65,56,10,50,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,50,49,56,10,69, 78,67,79,68,73,78,71,32,56,55,50,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,50,48,10,53,48,10,50, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,112,101,114,105,111,100,99,101,110,116,101,114,101, 100,10,69,78,67,79,68,73,78,71,32,56,55,50,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,50,48,10,55, 48,10,50,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,114,97,100,105,99,97,108,10,69,78, 67,79,68,73,78,71,32,56,55,51,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,52,10,48, 52,10,48,52,10,48,56,10,48,56,10,48,56,10,49,48, 10,57,48,10,57,48,10,54,48,10,54,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,49,66,10,69,78,67,79,68,73, 78,71,32,56,55,51,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,52,10,52,52,10,65,52, 10,52,56,10,50,56,10,67,56,10,49,48,10,57,48,10, 57,48,10,54,48,10,54,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,49,67,10,69,78,67,79,68,73,78,71,32,56, 55,51,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,52,10,56,52,10,56,52,10,67,56,10, 69,56,10,52,56,10,49,48,10,57,48,10,57,48,10,54, 48,10,54,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,112,114,111,112,111,114, 116,105,111,110,97,108,10,69,78,67,79,68,73,78,71,32, 56,55,51,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,53,48,10,65,48,10,65,48,10,53,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,105,110,102,105,110, 105,116,121,10,69,78,67,79,68,73,78,71,32,56,55,51, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,53,48, 10,65,56,10,65,56,10,53,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,111,114,116,104,111,103,111,110, 97,108,10,69,78,67,79,68,73,78,71,32,56,55,51,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,56,48,10, 56,48,10,56,48,10,56,48,10,56,48,10,70,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,110,103,108,101,10,69,78,67, 79,68,73,78,71,32,56,55,51,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,56,10,49,48,10,50,48,10,52,48,10, 56,48,10,70,56,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,50,49,10,69,78,67,79,68,73,78, 71,32,56,55,51,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,56,10,57,48,10,54,48,10,54,48,10,65,48,10,70, 56,10,50,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,50,50,10,69,78,67,79,68,73,78,71,32,56,55, 51,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,56,10,49,48,10,51,48,10,52, 56,10,56,56,10,52,56,10,51,48,10,49,48,10,48,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,50,50,51, 10,69,78,67,79,68,73,78,71,32,56,55,51,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,50,50,52,10,69,78,67, 79,68,73,78,71,32,56,55,52,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,50,48, 10,50,48,10,50,48,10,51,48,10,50,48,10,54,48,10, 50,48,10,50,48,10,50,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,50,53,10,69,78,67,79,68,73,78, 71,32,56,55,52,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,53,48,10,53,48,10, 53,48,10,53,48,10,53,48,10,53,48,10,53,48,10,53, 48,10,53,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,50,54,10,69,78,67,79,68,73,78,71,32,56,55, 52,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,53,48,10,53,48,10,53,56,10,53, 48,10,55,48,10,53,48,10,68,48,10,53,48,10,53,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,108,111,103,105,99,97,108, 97,110,100,10,69,78,67,79,68,73,78,71,32,56,55,52, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,48,10,50,48,10,53,48,10,53,48,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,108,111,103,105,99,97,108,111, 114,10,69,78,67,79,68,73,78,71,32,56,55,52,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,56, 56,10,53,48,10,53,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,105,110,116,101,114,115,101,99,116,105, 111,110,10,69,78,67,79,68,73,78,71,32,56,55,52,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,55,48,10, 56,56,10,56,56,10,56,56,10,56,56,10,56,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,111,110,10,69,78,67, 79,68,73,78,71,32,56,55,52,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,55,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,105,110,116,101,103,114,97,108,10,69,78,67,79,68,73, 78,71,32,56,55,52,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,49,48,10,50,56,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,65,48,10,52,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,50,67,10,69,78,67,79,68,73,78,71,32,56, 55,52,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,50,52,10,52,56,10,52,56,10,52,56,10, 52,56,10,52,56,10,52,56,10,52,56,10,52,56,10,52, 56,10,52,56,10,57,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,50, 68,10,69,78,67,79,68,73,78,71,32,56,55,52,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 53,52,10,65,56,10,65,56,10,65,56,10,65,56,10,65, 56,10,65,56,10,65,56,10,65,56,10,65,56,10,65,56, 10,68,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,50,69,10,69,78, 67,79,68,73,78,71,32,56,55,53,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,49,48,10,50,56,10,50, 48,10,50,48,10,55,48,10,65,56,10,65,56,10,65,56, 10,55,48,10,50,48,10,50,48,10,65,48,10,52,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,50,70,10,69,78,67,79,68,73, 78,71,32,56,55,53,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,50,52,10,52,56,10,52,56, 10,55,56,10,67,67,10,67,67,10,67,67,10,55,56,10, 52,56,10,52,56,10,52,56,10,57,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,51,48,10,69,78,67,79,68,73,78,71,32,56, 55,53,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,53,52,10,65,56,10,65,56,10,70,56,10, 65,67,10,65,67,10,65,67,10,70,56,10,65,56,10,65, 56,10,65,56,10,68,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,51, 49,10,69,78,67,79,68,73,78,71,32,56,55,53,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,49,48,10, 50,56,10,50,48,10,50,48,10,50,48,10,55,52,10,65, 67,10,51,67,10,50,48,10,50,48,10,50,48,10,65,48, 10,52,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,51,50,10,69,78, 67,79,68,73,78,71,32,56,55,53,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,49,48,10,50,56,10,50, 48,10,50,48,10,55,52,10,65,67,10,66,67,10,65,56, 10,55,48,10,50,48,10,50,48,10,65,48,10,52,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,51,51,10,69,78,67,79,68,73, 78,71,32,56,55,53,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,49,48,10,50,56,10,50,48,10,50,48, 10,55,48,10,65,56,10,66,67,10,65,67,10,55,52,10, 50,48,10,50,48,10,65,48,10,52,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,116,104, 101,114,101,102,111,114,101,10,69,78,67,79,68,73,78,71, 32,56,55,53,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,50,48,10,48,48,10,48,48,10,56,56, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,51,53,10,69,78,67,79,68,73,78,71,32,56,55,53, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,56,56,10,48,48,10,48,48,10,50,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,51,54,10, 69,78,67,79,68,73,78,71,32,56,55,53,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 48,48,10,48,48,10,50,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,51,55,10,69,78,67,79, 68,73,78,71,32,56,55,53,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,52,56,10,48,48,10,48, 48,10,52,56,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,51,56,10,69,78,67,79,68,73,78,71, 32,56,55,54,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,50,48,10,48,48,10,70,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,51,57,10,69,78,67,79,68,73,78,71,32,56,55,54, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,56, 10,48,48,10,69,48,10,48,48,10,48,56,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,51,65,10, 69,78,67,79,68,73,78,71,32,56,55,54,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,56,56,10,48,48,10, 70,56,10,48,48,10,56,56,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,51,66,10,69,78,67,79, 68,73,78,71,32,56,55,54,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,49,48,10,52,48,10,65,56,10,65, 56,10,49,48,10,52,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 115,105,109,105,108,97,114,10,69,78,67,79,68,73,78,71, 32,56,55,54,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,52,48,10,65,56,10,65,56,10,49,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,51,68,10,69,78,67,79,68,73,78,71,32,56,55,54, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,49,48,10,65,56,10,65,56,10,52,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,51,69,10, 69,78,67,79,68,73,78,71,32,56,55,54,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,52,56,10,65,52,10, 57,52,10,52,56,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,51,70,10,69,78,67,79, 68,73,78,71,32,56,55,54,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 52,48,10,65,48,10,65,48,10,65,48,10,50,56,10,50, 56,10,50,56,10,49,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,52,48,10,69,78,67,79,68,73,78,71, 32,56,55,54,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,50,48,10,49,48,10,49, 48,10,49,48,10,50,48,10,52,48,10,52,48,10,52,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,52,49,10,69,78,67,79,68,73,78,71,32,56,55,54, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,50,48,10,50,48, 10,54,48,10,65,56,10,65,56,10,51,48,10,50,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,52,50,10, 69,78,67,79,68,73,78,71,32,56,55,55,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,70,56,10,48,48,10, 52,56,10,65,56,10,57,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,52,51,10,69,78,67,79, 68,73,78,71,32,56,55,55,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,52,56,10,65,56,10,57,48,10,48, 48,10,70,56,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,52,52,10,69,78,67,79,68,73,78,71, 32,56,55,55,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,50,48,10,50, 48,10,54,56,10,65,56,10,66,48,10,50,48,10,70,56, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,99,111,110,103, 114,117,101,110,116,10,69,78,67,79,68,73,78,71,32,56, 55,55,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,52,56,10,65,56,10, 57,48,10,48,48,10,70,56,10,48,48,10,70,56,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,52, 54,10,69,78,67,79,68,73,78,71,32,56,55,55,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,52,56,10,65,56,10,57,48,10,50, 48,10,70,56,10,50,48,10,70,56,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,52,55,10,69,78, 67,79,68,73,78,71,32,56,55,55,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,54,56,10,65,56,10,66,48,10,50,48,10,70,56, 10,50,48,10,70,56,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,112,112,114,111,120,101,113,117,97,108,10,69,78, 67,79,68,73,78,71,32,56,55,55,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,52,56,10,65,56,10,57,48,10,52,56, 10,65,56,10,57,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,52,57,10,69,78,67,79,68,73, 78,71,32,56,55,55,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,54,56,10,65,56,10,66,48,10,54,56,10,65,56,10, 66,48,10,50,48,10,50,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,52,65,10,69,78,67,79,68,73,78,71,32,56, 55,55,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,52,56,10,65,56,10, 57,48,10,52,56,10,65,56,10,57,48,10,48,48,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,52, 66,10,69,78,67,79,68,73,78,71,32,56,55,55,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,52,56,10,65,56,10,57,48,10,52,56,10,65, 56,10,57,48,10,52,56,10,65,56,10,57,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,52,67,10,69,78, 67,79,68,73,78,71,32,56,55,56,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,57,48,10,65,56,10,52,56,10,48,48,10,70,56, 10,48,48,10,70,56,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,52,68,10,69,78,67,79,68,73, 78,71,32,56,55,56,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,56,56,10,55,48,10,48,48,10,55,48,10, 56,56,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,52,69,10,69,78,67,79,68,73,78,71,32,56, 55,56,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 50,48,10,68,56,10,48,48,10,68,56,10,50,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,52, 70,10,69,78,67,79,68,73,78,71,32,56,55,56,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,50,48,10,68, 56,10,48,48,10,70,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,53,48,10,69,78, 67,79,68,73,78,71,32,56,55,56,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,50,48,10,48,48,10,70,56,10,48,48, 10,70,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,53,49,10,69,78,67,79,68,73, 78,71,32,56,55,56,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,48,10,48,48,10,70,56,10,48,48,10,70,56,10, 48,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,53,50,10,69,78,67,79,68,73,78,71,32,56, 55,56,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,56,48,10, 48,48,10,70,56,10,48,48,10,70,56,10,48,48,10,48, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,53, 51,10,69,78,67,79,68,73,78,71,32,56,55,56,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,56,10,48,48,10,70, 56,10,48,48,10,70,56,10,48,48,10,56,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,53,52,10,69,78, 67,79,68,73,78,71,32,56,55,56,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,66,56,10,48,48, 10,66,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,53,53,10,69,78,67,79,68,73, 78,71,32,56,55,56,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,56,10,48,48,10,69,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,53,54,10,69,78,67,79,68,73,78,71,32,56, 55,57,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,70,56,10,53,48,10,70,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,53, 55,10,69,78,67,79,68,73,78,71,32,56,55,57,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,53,48,10,50,48,10,48,48,10,70, 56,10,48,48,10,70,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,53,56,10,69,78, 67,79,68,73,78,71,32,56,55,57,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,55,48,10,56,56,10,48,48,10,70,56,10,48,48, 10,70,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,53,57,10,69,78,67,79,68,73, 78,71,32,56,55,57,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,50,48, 10,53,48,10,48,48,10,70,56,10,48,48,10,70,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,53,65,10,69,78,67,79,68,73,78,71,32,56, 55,57,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,53,48,10,50,48,10, 48,48,10,70,56,10,48,48,10,70,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,53, 66,10,69,78,67,79,68,73,78,71,32,56,55,57,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,65,56,10,55,48,10,70,56,10,55,48,10,65, 56,10,48,48,10,70,56,10,48,48,10,70,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,53,67,10,69,78, 67,79,68,73,78,71,32,56,55,57,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,53,48,10,53,48,10,56,56,10,70,56,10,48,48, 10,70,56,10,48,48,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,53,68,10,69,78,67,79,68,73, 78,71,32,56,55,57,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,52,67,10,70,56, 10,70,56,10,48,48,10,70,56,10,48,48,10,70,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,53,69,10,69,78,67,79,68,73,78,71,32,56, 55,57,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,68,48,10,65,56,10,65,56,10, 65,56,10,48,48,10,70,56,10,48,48,10,70,56,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,53, 70,10,69,78,67,79,68,73,78,71,32,56,55,57,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,50,48,10, 53,48,10,49,48,10,50,48,10,48,48,10,50,48,10,70, 56,10,48,48,10,70,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,110,111,116,101,113,117,97,108,10,69, 78,67,79,68,73,78,71,32,56,56,48,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,56,10,70,56,10,50, 48,10,70,56,10,56,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,101,113,117,105,118,97,108,101,110,99,101,10,69, 78,67,79,68,73,78,71,32,56,56,48,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,70,56,10,48,48,10,70, 56,10,48,48,10,70,56,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,50,54,50,10,69,78,67,79,68, 73,78,71,32,56,56,48,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,49, 48,10,49,48,10,70,56,10,50,48,10,70,56,10,50,48, 10,70,56,10,52,48,10,52,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,50,54,51,10,69,78,67,79,68,73,78,71,32, 56,56,48,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,70,56, 10,48,48,10,70,56,10,48,48,10,70,56,10,48,48,10, 70,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,108,101,115,115,101, 113,117,97,108,10,69,78,67,79,68,73,78,71,32,56,56, 48,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,49,56,10,54,48,10,56, 48,10,54,48,10,49,56,10,48,48,10,70,56,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,103,114,101,97,116,101,114, 101,113,117,97,108,10,69,78,67,79,68,73,78,71,32,56, 56,48,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,67,48,10,51,48,10, 48,56,10,51,48,10,67,48,10,48,48,10,70,56,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,54, 54,10,69,78,67,79,68,73,78,71,32,56,56,48,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,49,56,10,54,48,10,56,48,10,54,48,10,49, 56,10,48,48,10,70,56,10,48,48,10,70,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,54,55,10,69,78, 67,79,68,73,78,71,32,56,56,48,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,67, 48,10,51,48,10,48,56,10,51,48,10,67,48,10,48,48, 10,70,56,10,48,48,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,54,56,10,69,78,67,79,68,73, 78,71,32,56,56,48,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,49,56,10,54,48, 10,56,48,10,54,48,10,49,56,10,50,48,10,70,56,10, 50,48,10,70,56,10,50,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,54,57,10,69,78,67,79,68,73,78,71,32,56, 56,48,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,67,48,10,51,48,10,48,56,10, 51,48,10,67,48,10,50,48,10,70,56,10,50,48,10,70, 56,10,50,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,54, 65,10,69,78,67,79,68,73,78,71,32,56,56,49,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,49,52,10,50,56,10,53,48,10,65, 48,10,53,48,10,50,56,10,49,52,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,54,66,10,69,78, 67,79,68,73,78,71,32,56,56,49,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,65,48,10,53,48,10,50,56,10,49,52,10,50,56, 10,53,48,10,65,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,54,67,10,69,78,67,79,68,73, 78,71,32,56,56,49,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,53,48,10,50,48, 10,53,48,10,53,48,10,53,48,10,53,48,10,53,48,10, 50,48,10,53,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,54,68,10,69,78,67,79,68,73,78,71,32,56, 56,49,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 65,56,10,55,48,10,50,48,10,55,48,10,65,56,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,54, 69,10,69,78,67,79,68,73,78,71,32,56,56,49,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 50,48,10,50,56,10,51,48,10,50,48,10,54,48,10,65, 48,10,54,48,10,50,48,10,51,48,10,50,56,10,50,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,54,70,10,69,78, 67,79,68,73,78,71,32,56,56,49,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,50,48,10,65, 48,10,54,48,10,50,48,10,51,48,10,50,56,10,51,48, 10,50,48,10,54,48,10,65,48,10,50,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,55,48,10,69,78,67,79,68,73, 78,71,32,56,56,49,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,50,48,10,50,48,10,51,56, 10,54,48,10,65,48,10,54,48,10,51,56,10,50,48,10, 70,56,10,50,48,10,50,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,55,49,10,69,78,67,79,68,73,78,71,32,56, 56,49,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,50,48,10,50,48,10,69,48,10,51,48,10, 50,56,10,51,48,10,69,48,10,50,48,10,70,56,10,50, 48,10,50,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,55, 50,10,69,78,67,79,68,73,78,71,32,56,56,49,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,49,56,10,54,48,10,56,48,10,54,48,10,49, 56,10,48,48,10,52,56,10,65,56,10,57,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,55,51,10,69,78, 67,79,68,73,78,71,32,56,56,49,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,67, 48,10,51,48,10,48,56,10,51,48,10,67,48,10,48,48, 10,52,56,10,65,56,10,57,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,55,52,10,69,78,67,79,68,73, 78,71,32,56,56,50,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,50,48,10,50,48,10,51,56,10,54,48, 10,65,48,10,54,48,10,51,56,10,50,48,10,54,56,10, 65,56,10,66,48,10,50,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,55,53,10,69,78,67,79,68,73,78,71,32,56, 56,50,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,50,48,10,50,48,10,69,48,10,51,48,10,50,56,10, 51,48,10,69,48,10,50,48,10,54,56,10,65,56,10,66, 48,10,50,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,55, 54,10,69,78,67,79,68,73,78,71,32,56,56,50,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 49,56,10,54,48,10,56,48,10,54,48,10,49,56,10,67, 48,10,51,48,10,48,56,10,51,48,10,67,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,55,55,10,69,78, 67,79,68,73,78,71,32,56,56,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,67,48,10,51, 48,10,48,56,10,51,48,10,67,48,10,49,56,10,54,48, 10,56,48,10,54,48,10,49,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,55,56,10,69,78,67,79,68,73, 78,71,32,56,56,50,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,49,48,10,49,56,10,55,48,10,57,48, 10,54,48,10,51,56,10,69,48,10,51,48,10,52,56,10, 55,48,10,67,48,10,52,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,55,57,10,69,78,67,79,68,73,78,71,32,56, 56,50,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,49,48,10,68,48,10,51,48,10,49,56,10,51,48,10, 69,48,10,51,56,10,54,48,10,67,48,10,54,48,10,53, 56,10,52,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,55, 65,10,69,78,67,79,68,73,78,71,32,56,56,50,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,56,10,49,48,10,69, 48,10,49,48,10,48,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,55,66,10,69,78, 67,79,68,73,78,71,32,56,56,50,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,56,48,10,52,48,10,51,56,10,52,48, 10,56,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,55,67,10,69,78,67,79,68,73, 78,71,32,56,56,50,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,56,10,49,48,10,69,48,10,49,48,10,69,56,10, 49,48,10,48,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,55,68,10,69,78,67,79,68,73,78,71,32,56, 56,50,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,56,48,10, 52,48,10,51,56,10,52,48,10,66,56,10,52,48,10,56, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,55, 69,10,69,78,67,79,68,73,78,71,32,56,56,51,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,56,10,49,48,10,69,48,10,49,48,10,48, 56,10,48,48,10,52,56,10,65,56,10,57,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,55,70,10,69,78, 67,79,68,73,78,71,32,56,56,51,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 48,10,52,48,10,51,56,10,52,48,10,56,48,10,48,48, 10,52,56,10,65,56,10,57,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,56,48,10,69,78,67,79,68,73, 78,71,32,56,56,51,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,50,56,10,51,48,10,69,48,10,51,48,10,50,56,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,56,49,10,69,78,67,79,68,73,78,71,32,56, 56,51,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,65,48,10, 54,48,10,51,56,10,54,48,10,65,48,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,112,114,111,112,101,114, 115,117,98,115,101,116,10,69,78,67,79,68,73,78,71,32, 56,56,51,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,55,56,10,56,48,10,56,48,10,56,48,10,55,56,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,112,114,111,112,101, 114,115,117,112,101,114,115,101,116,10,69,78,67,79,68,73, 78,71,32,56,56,51,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,48,10,48,56,10,48,56,10,48,56,10, 70,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,110,111, 116,115,117,98,115,101,116,10,69,78,67,79,68,73,78,71, 32,56,56,51,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,50,48,10,50, 48,10,55,56,10,65,48,10,65,48,10,65,48,10,55,56, 10,50,48,10,50,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,56,53,10,69,78,67,79,68,73,78,71,32,56,56,51, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,50,48,10,50,48,10,70,48, 10,50,56,10,50,56,10,50,56,10,70,48,10,50,48,10, 50,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,114,101,102,108,101,120,115,117, 98,115,101,116,10,69,78,67,79,68,73,78,71,32,56,56, 51,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,55,56,10,56,48,10,56, 48,10,56,48,10,55,56,10,48,48,10,70,56,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,114,101,102,108,101,120,115, 117,112,101,114,115,101,116,10,69,78,67,79,68,73,78,71, 32,56,56,51,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,70,48,10,48, 56,10,48,56,10,48,56,10,70,48,10,48,48,10,70,56, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,56,56,10,69,78,67,79,68,73,78,71,32,56,56,52, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,50,48,10,50,48,10,55,56,10,65,48,10,65,48, 10,65,48,10,55,56,10,50,48,10,70,56,10,50,48,10, 50,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,56,57,10, 69,78,67,79,68,73,78,71,32,56,56,52,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,50,48, 10,50,48,10,70,48,10,50,56,10,50,56,10,50,56,10, 70,48,10,50,48,10,70,56,10,50,48,10,50,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,56,65,10,69,78,67,79, 68,73,78,71,32,56,56,52,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 55,56,10,56,48,10,56,48,10,56,48,10,55,56,10,49, 48,10,70,56,10,52,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,56,66,10,69,78,67,79,68,73,78,71, 32,56,56,52,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,70,48,10,48, 56,10,48,56,10,48,56,10,70,48,10,49,48,10,70,56, 10,52,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,56,67,10,69,78,67,79,68,73,78,71,32,56,56,52, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,56,56,10,65,56,10,69,56, 10,70,56,10,69,56,10,65,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,56,68,10, 69,78,67,79,68,73,78,71,32,56,56,52,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,56,56,10,56,56,10,56,56,10,65,56,10, 56,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,56,69,10,69,78,67,79, 68,73,78,71,32,56,56,52,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 56,56,10,65,56,10,65,56,10,70,56,10,65,56,10,65, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,56,70,10,69,78,67,79,68,73,78,71, 32,56,56,52,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,70,56,10,56,48,10,56,48,10,56,48,10,70,56, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,57,48,10,69,78,67,79,68,73,78,71,32,56,56,52, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,70,56, 10,48,56,10,48,56,10,48,56,10,70,56,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,57,49,10, 69,78,67,79,68,73,78,71,32,56,56,52,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,70,56,10,56,48,10,56,48,10,56,48,10, 70,56,10,48,48,10,70,56,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,57,50,10,69,78,67,79, 68,73,78,71,32,56,56,53,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 70,56,10,48,56,10,48,56,10,48,56,10,70,56,10,48, 48,10,70,56,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,57,51,10,69,78,67,79,68,73,78,71, 32,56,56,53,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,70,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,57,52,10,69,78,67,79,68,73,78,71,32,56,56,53, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,99,105,114,99,108,101,112,108, 117,115,10,69,78,67,79,68,73,78,71,32,56,56,53,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,55,48,10,65,56,10, 70,56,10,65,56,10,55,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,50,57,54,10,69, 78,67,79,68,73,78,71,32,56,56,53,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,55,48,10,56,56,10,70,56,10,56, 56,10,55,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,99,105,114,99,108,101,109,117,108,116,105,112,108, 121,10,69,78,67,79,68,73,78,71,32,56,56,53,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,48,10,68,56,10,65, 56,10,68,56,10,55,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,57,56,10,69,78, 67,79,68,73,78,71,32,56,56,53,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,55,48,10,57,56,10,65,56,10,67,56, 10,55,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,57,57,10,69,78,67,79,68,73, 78,71,32,56,56,53,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,55,48,10,56,56,10,65,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,57,65,10,69,78,67,79,68,73,78,71,32,56, 56,53,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,55,48,10,56,56,10, 65,56,10,68,56,10,65,56,10,56,56,10,55,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,57, 66,10,69,78,67,79,68,73,78,71,32,56,56,53,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,55,48,10,56,56,10,68,56,10,65, 56,10,68,56,10,56,56,10,55,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,57,67,10,69,78, 67,79,68,73,78,71,32,56,56,54,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,55,48,10,56,56,10,70,56,10,56,56,10,70,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,57,68,10,69,78,67,79,68,73, 78,71,32,56,56,54,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,55,48, 10,56,56,10,56,56,10,70,56,10,56,56,10,56,56,10, 55,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,57,69,10,69,78,67,79,68,73,78,71,32,56, 56,54,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 65,56,10,70,56,10,65,56,10,70,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,57, 70,10,69,78,67,79,68,73,78,71,32,56,56,54,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,70,56,10,56,56,10,70, 56,10,56,56,10,70,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,65,48,10,69,78, 67,79,68,73,78,71,32,56,56,54,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,70,56,10,68,56,10,65,56,10,68,56, 10,70,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,65,49,10,69,78,67,79,68,73, 78,71,32,56,56,54,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,70,56,10,56,56,10,65,56,10,56,56,10,70,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,65,50,10,69,78,67,79,68,73,78,71,32,56, 56,54,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,48,10,56,48,10,56,48,10, 56,48,10,70,56,10,56,48,10,56,48,10,56,48,10,56, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,65, 51,10,69,78,67,79,68,73,78,71,32,56,56,54,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,56,10,48,56,10,48,56,10,48,56,10,70, 56,10,48,56,10,48,56,10,48,56,10,48,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,65,52,10,69,78, 67,79,68,73,78,71,32,56,56,54,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,70,56,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,112,101,114,112,101,110,100,105,99,117,108,97,114,10, 69,78,67,79,68,73,78,71,32,56,56,54,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,70,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,65,54,10,69,78,67,79, 68,73,78,71,32,56,56,55,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,56,48,10, 56,48,10,56,48,10,56,48,10,70,48,10,56,48,10,56, 48,10,56,48,10,56,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,65,55,10,69,78,67,79,68,73,78,71, 32,56,56,55,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,56,48,10,56,48,10,56, 48,10,70,48,10,56,48,10,70,48,10,56,48,10,56,48, 10,56,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,65,56,10,69,78,67,79,68,73,78,71,32,56,56,55, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,48,10,56,48,10,56,48,10,70,56, 10,56,48,10,70,56,10,56,48,10,56,48,10,56,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,65,57,10, 69,78,67,79,68,73,78,71,32,56,56,55,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,65,48,10,65,48,10,65,48,10,65,48,10,66,56,10, 65,48,10,65,48,10,65,48,10,65,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,65,65,10,69,78,67,79, 68,73,78,71,32,56,56,55,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,65,56,10, 65,56,10,65,56,10,65,56,10,65,67,10,65,56,10,65, 56,10,65,56,10,65,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,65,66,10,69,78,67,79,68,73,78,71, 32,56,56,55,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,65,48,10,65,48,10,65, 48,10,66,56,10,65,48,10,66,56,10,65,48,10,65,48, 10,65,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,65,67,10,69,78,67,79,68,73,78,71,32,56,56,55, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,48,10,56,48,10,57,48,10,57,48, 10,70,56,10,65,48,10,65,48,10,56,48,10,56,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,65,68,10, 69,78,67,79,68,73,78,71,32,56,56,55,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,56,48,10,56,56,10,56,56,10,70,56,10,57,48,10, 70,56,10,65,48,10,65,48,10,56,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,65,69,10,69,78,67,79, 68,73,78,71,32,56,56,55,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,65,48,10, 65,48,10,65,56,10,65,56,10,66,67,10,66,48,10,66, 48,10,65,48,10,65,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,65,70,10,69,78,67,79,68,73,78,71, 32,56,56,55,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,65,48,10,65,52,10,65, 52,10,66,67,10,65,56,10,66,67,10,66,48,10,66,48, 10,65,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,66,48,10,69,78,67,79,68,73,78,71,32,56,56,56, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,49,48,10,48,56,10,49,48, 10,69,48,10,49,48,10,48,56,10,49,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,66,49,10, 69,78,67,79,68,73,78,71,32,56,56,56,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,52,48,10,56,48,10,52,48,10,51,56,10, 52,48,10,56,48,10,52,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,66,50,10,69,78,67,79, 68,73,78,71,32,56,56,56,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,49,56,10,54,56,10,56,56,10,54,56,10,49, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,66,51,10,69,78,67,79,68,73,78,71, 32,56,56,56,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,67, 48,10,66,48,10,56,56,10,66,48,10,67,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,66,52,10,69,78,67,79,68,73,78,71,32,56,56,56, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,49,56,10,54,56,10,56,56, 10,54,56,10,49,56,10,48,48,10,70,56,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,66,53,10, 69,78,67,79,68,73,78,71,32,56,56,56,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,67,48,10,66,48,10,56,56,10,66,48,10, 67,48,10,48,48,10,70,56,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,66,54,10,69,78,67,79, 68,73,78,71,32,56,56,56,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,53,48,10,66,56,10,53,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,66,55,10,69,78,67,79,68,73,78,71, 32,56,56,56,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,53,48,10,69,56,10,53,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,66,56,10,69,78,67,79,68,73,78,71,32,56,56,56, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,49,48, 10,69,56,10,49,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,66,57,10, 69,78,67,79,68,73,78,71,32,56,56,56,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,50,48,10,50,48,10,68,56,10, 50,48,10,50,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,66,65,10,69,78,67,79, 68,73,78,71,32,56,56,57,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,55,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,66,66,10,69,78,67,79,68,73,78,71, 32,56,56,57,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,56,56,10,56, 56,10,53,48,10,53,48,10,50,48,10,50,48,10,48,48, 10,70,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,66,67,10,69,78,67,79,68,73,78,71,32,56,56,57, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,70,56,10,48,48,10,50,48, 10,50,48,10,53,48,10,53,48,10,56,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,66,68,10, 69,78,67,79,68,73,78,71,32,56,56,57,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,70,56,10,48,48,10,56,56,10,56,56,10, 53,48,10,53,48,10,50,48,10,50,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,66,69,10,69,78,67,79, 68,73,78,71,32,56,56,57,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,56,48,10,56,48,10,56,48,10,67, 48,10,65,48,10,70,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,66,70,10,69,78,67,79,68,73,78,71, 32,56,56,57,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,56,10,49,56,10,50,56,10,50,56,10,52,56, 10,70,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,67,48,10,69,78,67,79,68,73,78,71,32,56,56,57, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,51,48,10,51,48,10,51,48,10,51,48,10,52,56, 10,52,56,10,52,56,10,56,52,10,56,52,10,56,52,10, 56,52,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,67,49,10, 69,78,67,79,68,73,78,71,32,56,56,57,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,56,52, 10,56,52,10,56,52,10,56,52,10,52,56,10,52,56,10, 52,56,10,51,48,10,51,48,10,51,48,10,51,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,67,50,10,69,78,67,79, 68,73,78,71,32,56,56,57,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,51,48,10,52,56,10, 56,52,10,56,52,10,56,52,10,56,52,10,56,52,10,56, 52,10,56,52,10,56,52,10,56,52,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,67,51,10,69,78,67,79,68,73,78,71, 32,56,56,57,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,56,52,10,56,52,10,56,52,10,56, 52,10,56,52,10,56,52,10,56,52,10,56,52,10,56,52, 10,52,56,10,51,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,67,52,10,69,78,67,79,68,73,78,71,32,56,57,48, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,50,48,10,50,48,10,53,48, 10,56,56,10,53,48,10,50,48,10,50,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,100,111,116,109,97,116,104,10, 69,78,67,79,68,73,78,71,32,56,57,48,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,67,54,10,69,78,67,79, 68,73,78,71,32,56,57,48,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 50,48,10,50,48,10,70,56,10,55,48,10,55,48,10,56, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,67,55,10,69,78,67,79,68,73,78,71, 32,56,57,48,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,50,48,10,56, 56,10,53,48,10,70,56,10,53,48,10,56,56,10,50,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,67,56,10,69,78,67,79,68,73,78,71,32,56,57,48, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,56,56,10,68,56, 10,65,56,10,68,56,10,56,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,67,57,10, 69,78,67,79,68,73,78,71,32,56,57,48,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,56,56,10,68,48,10,65,48,10, 68,48,10,56,56,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,67,65,10,69,78,67,79, 68,73,78,71,32,56,57,48,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,56,56,10,53,56,10,50,56,10,53,56,10,56, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,67,66,10,69,78,67,79,68,73,78,71, 32,56,57,48,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,56, 48,10,52,48,10,50,48,10,53,48,10,56,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,67,67,10,69,78,67,79,68,73,78,71,32,56,57,48, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,56,10,49,48, 10,50,48,10,53,48,10,56,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,67,68,10, 69,78,67,79,68,73,78,71,32,56,57,48,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,57,48,10,65,56,10, 52,56,10,48,48,10,70,56,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,67,69,10,69,78,67,79, 68,73,78,71,32,56,57,49,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,56,56,10,53,48,10,53,48,10,50, 48,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,67,70,10,69,78,67,79,68,73,78,71, 32,56,57,49,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,50,48,10,50,48,10,50,48,10,53,48,10,53,48, 10,56,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,68,48,10,69,78,67,79,68,73,78,71,32,56,57,49, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,51,56,10,52,48, 10,57,56,10,65,48,10,57,56,10,52,48,10,51,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,68,49,10, 69,78,67,79,68,73,78,71,32,56,57,49,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,48,10,49,48,10,67,56,10, 50,56,10,67,56,10,49,48,10,69,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,68,50,10,69,78,67,79, 68,73,78,71,32,56,57,49,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,55,48,10,56,56,10,65,56,10,65,56,10,65, 56,10,65,56,10,65,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,68,51,10,69,78,67,79,68,73,78,71, 32,56,57,49,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,65, 56,10,65,56,10,65,56,10,65,56,10,65,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,68,52,10,69,78,67,79,68,73,78,71,32,56,57,49, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,50,48,10,50,48,10,55,48, 10,65,56,10,65,56,10,65,56,10,65,56,10,65,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,68,53,10, 69,78,67,79,68,73,78,71,32,56,57,49,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,53,48,10,53,48,10,53,48,10,70,56,10,53,48,10, 53,48,10,70,56,10,53,48,10,53,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,68,54,10,69,78,67,79, 68,73,78,71,32,56,57,49,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,56,10, 49,48,10,50,48,10,52,48,10,56,56,10,52,48,10,50, 48,10,49,48,10,48,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,68,55,10,69,78,67,79,68,73,78,71, 32,56,57,49,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,56,48,10,52,48,10,50, 48,10,49,48,10,56,56,10,49,48,10,50,48,10,52,48, 10,56,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,68,56,10,69,78,67,79,68,73,78,71,32,56,57,50, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,49,52,10,50,56, 10,53,52,10,65,56,10,53,52,10,50,56,10,49,52,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,68,57,10, 69,78,67,79,68,73,78,71,32,56,57,50,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,65,48,10,53,48,10,65,56,10, 53,52,10,65,56,10,53,48,10,65,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,68,65,10,69,78,67,79, 68,73,78,71,32,56,57,50,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,49,56,10,54,48,10,56,48,10, 54,48,10,49,56,10,48,48,10,70,56,10,48,48,10,67, 48,10,51,48,10,48,56,10,51,48,10,67,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,68,66,10,69,78,67,79,68,73,78,71, 32,56,57,50,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,67,48,10,51,48,10,48,56,10,51,48,10,67, 48,10,48,48,10,70,56,10,48,48,10,49,56,10,54,48, 10,56,48,10,54,48,10,49,56,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,68,67,10,69,78,67,79,68,73,78,71,32,56,57,50, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,70,56,10,48,48,10,49,56, 10,54,48,10,56,48,10,54,48,10,49,56,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,68,68,10, 69,78,67,79,68,73,78,71,32,56,57,50,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,70,56,10,48,48,10,67,48,10,51,48,10, 48,56,10,51,48,10,67,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,68,69,10,69,78,67,79, 68,73,78,71,32,56,57,50,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,56,10,49,48,10,69,56,10,49,48,10,69,48,10,49, 48,10,48,56,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,68,70,10,69,78,67,79,68,73,78,71, 32,56,57,50,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,56,48,10,52, 48,10,66,56,10,52,48,10,51,56,10,52,48,10,56,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,69,48,10,69,78,67,79,68,73,78,71,32,56,57,50, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,50,48,10,50,56,10,51,48, 10,69,48,10,51,48,10,69,56,10,51,48,10,50,56,10, 50,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,69,49,10, 69,78,67,79,68,73,78,71,32,56,57,50,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,50,48,10,65,48,10,54,48,10,51,56,10, 54,48,10,66,56,10,54,48,10,65,48,10,50,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,69,50,10,69,78,67,79, 68,73,78,71,32,56,57,51,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,50,48,10,50,48,10, 70,56,10,65,48,10,65,48,10,65,48,10,70,56,10,50, 48,10,70,56,10,50,48,10,50,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,69,51,10,69,78,67,79,68,73,78,71, 32,56,57,51,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,50,48,10,50,48,10,70,56,10,50, 56,10,50,56,10,50,56,10,70,56,10,50,48,10,70,56, 10,50,48,10,50,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,69,52,10,69,78,67,79,68,73,78,71,32,56,57,51, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,70,56,10,56,48,10,56,48, 10,56,48,10,70,56,10,49,48,10,70,56,10,52,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,69,53,10, 69,78,67,79,68,73,78,71,32,56,57,51,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,70,56,10,48,56,10,48,56,10,48,56,10, 70,56,10,49,48,10,70,56,10,52,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,69,54,10,69,78,67,79, 68,73,78,71,32,56,57,51,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,49,56,10, 54,48,10,56,48,10,54,48,10,51,56,10,50,48,10,54, 56,10,65,56,10,66,48,10,50,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,69,55,10,69,78,67,79,68,73,78,71, 32,56,57,51,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,67,48,10,51,48,10,48, 56,10,51,48,10,69,48,10,50,48,10,54,56,10,65,56, 10,66,48,10,50,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,69,56,10,69,78,67,79,68,73,78,71,32,56,57,51, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,56,10,49,48,10,69,48,10,49,48, 10,50,56,10,50,48,10,54,56,10,65,56,10,66,48,10, 50,48,10,50,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,69,57,10, 69,78,67,79,68,73,78,71,32,56,57,51,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,56,48,10,52,48,10,51,56,10,52,48,10,65,48,10, 50,48,10,54,56,10,65,56,10,66,48,10,50,48,10,50, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,69,65,10,69,78,67,79, 68,73,78,71,32,56,57,51,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,50,48,10, 50,48,10,51,56,10,54,56,10,65,56,10,54,56,10,51, 56,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,69,66,10,69,78,67,79,68,73,78,71, 32,56,57,51,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,50,48,10,50,48,10,69, 48,10,66,48,10,65,56,10,66,48,10,69,48,10,50,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,69,67,10,69,78,67,79,68,73,78,71,32,56,57,52, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,50,48,10,50,48,10,51,56,10,54,56,10,65,56, 10,54,56,10,51,56,10,50,48,10,70,56,10,50,48,10, 50,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,69,68,10, 69,78,67,79,68,73,78,71,32,56,57,52,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,50,48, 10,50,48,10,69,48,10,66,48,10,65,56,10,66,48,10, 69,48,10,50,48,10,70,56,10,50,48,10,50,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,69,69,10,69,78,67,79, 68,73,78,71,32,56,57,52,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 50,48,10,48,48,10,48,48,10,50,48,10,48,48,10,48, 48,10,50,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,69,70,10,69,78,67,79,68,73,78,71, 32,56,57,52,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,65,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,70,48,10,69,78,67,79,68,73,78,71,32,56,57,52, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,56,10,48,48, 10,50,48,10,48,48,10,56,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,70,49,10, 69,78,67,79,68,73,78,71,32,56,57,52,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,56,48,10,48,48,10,50,48,10, 48,48,10,48,56,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,70,50,10,69,78,67,79, 68,73,78,71,32,56,57,52,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,51,56,10,52,48,10,52,48,10,70,48,10,52, 48,10,52,48,10,51,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,70,51,10,69,78,67,79,68,73,78,71, 32,56,57,52,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,51, 56,10,52,48,10,56,56,10,70,56,10,56,56,10,52,48, 10,51,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,70,52,10,69,78,67,79,68,73,78,71,32,56,57,52, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,51,56,10,52,48, 10,52,56,10,55,56,10,52,56,10,52,48,10,51,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,70,53,10, 69,78,67,79,68,73,78,71,32,56,57,52,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,51,48,10,48,48,10,51,56,10,52,48,10,56,48,10, 70,48,10,56,48,10,52,48,10,51,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,70,54,10,69,78,67,79, 68,73,78,71,32,56,57,53,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,70,56,10, 48,48,10,51,56,10,52,48,10,56,48,10,70,48,10,56, 48,10,52,48,10,51,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,70,55,10,69,78,67,79,68,73,78,71, 32,56,57,53,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,55,56,10,48, 48,10,51,56,10,52,48,10,55,48,10,52,48,10,51,56, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,70,56,10,69,78,67,79,68,73,78,71,32,56,57,53, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,51,56,10,52,48, 10,56,48,10,70,48,10,56,48,10,52,48,10,51,56,10, 48,48,10,70,56,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,70,57,10, 69,78,67,79,68,73,78,71,32,56,57,53,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,51,56,10,52,48,10,70,48,10, 56,48,10,70,48,10,52,48,10,51,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,70,65,10,69,78,67,79, 68,73,78,71,32,56,57,53,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,48,10,49,48,10,49,48,10,55,56,10,49, 48,10,49,48,10,69,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,70,66,10,69,78,67,79,68,73,78,71, 32,56,57,53,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 48,10,49,48,10,56,56,10,70,56,10,56,56,10,49,48, 10,69,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,70,67,10,69,78,67,79,68,73,78,71,32,56,57,53, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,55,48,10,48,56, 10,52,56,10,55,56,10,52,56,10,48,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,70,68,10, 69,78,67,79,68,73,78,71,32,56,57,53,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,56,10,48,48,10,69,48,10,49,48,10,48,56,10, 55,56,10,48,56,10,49,48,10,69,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,70,69,10,69,78,67,79, 68,73,78,71,32,56,57,53,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 55,56,10,48,48,10,55,48,10,48,56,10,51,56,10,48, 56,10,55,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,70,70,10,69,78,67,79,68,73,78,71, 32,56,57,53,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,70, 56,10,56,48,10,56,48,10,70,56,10,56,48,10,56,48, 10,70,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,48,48,10,69,78,67,79,68,73,78,71,32,56,57,54, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,54,56,10,57,48,10,65,56,10,52,56,10,66,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,48,49,10, 69,78,67,79,68,73,78,71,32,56,57,54,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,50,48,10,51,48,10,65,56,10, 54,48,10,50,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,104,111,117,115,101,10,69,78,67,79,68,73, 78,71,32,56,57,54,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,53,48,10,53,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,70,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,48,51,10,69,78,67,79,68,73,78,71,32,56, 57,54,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,53,48,10,56,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,48, 52,10,69,78,67,79,68,73,78,71,32,56,57,54,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,56,56,10,53,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,48,53,10,69,78, 67,79,68,73,78,71,32,56,57,54,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,70,56,10,48,48, 10,50,48,10,53,48,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,48,54,10,69,78,67,79,68,73, 78,71,32,56,57,54,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,70,56,10,48,48,10,70,56,10,48,48,10,50,48,10, 53,48,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,48,55,10,69,78,67,79,68,73,78,71,32,56, 57,54,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,49,48,10,49,48,10,50,48,10, 50,48,10,49,48,10,49,48,10,50,48,10,50,48,10,49, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,48, 56,10,69,78,67,79,68,73,78,71,32,56,57,54,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 55,48,10,52,48,10,52,48,10,52,48,10,52,48,10,52, 48,10,52,48,10,52,48,10,52,48,10,52,48,10,52,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,48,57,10,69,78, 67,79,68,73,78,71,32,56,57,54,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,55,48,10,49, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,49,48, 10,49,48,10,49,48,10,49,48,10,49,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,48,65,10,69,78,67,79,68,73, 78,71,32,56,57,55,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,52,48,10,52,48,10,52,48, 10,52,48,10,52,48,10,52,48,10,52,48,10,52,48,10, 52,48,10,52,48,10,55,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,48,66,10,69,78,67,79,68,73,78,71,32,56, 57,55,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,49,48,10,49,48,10,49,48,10,49,48,10, 49,48,10,49,48,10,49,48,10,49,48,10,49,48,10,49, 48,10,55,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,48, 67,10,69,78,67,79,68,73,78,71,32,56,57,55,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,49, 56,10,50,48,10,50,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,48,68,10,69,78, 67,79,68,73,78,71,32,56,57,55,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,67,48,10,50,48, 10,50,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,48,69,10,69,78,67,79,68,73, 78,71,32,56,57,55,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,48,10,50,48,10,49,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,48,70,10,69,78,67,79,68,73,78,71,32,56, 57,55,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 50,48,10,67,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,114,101,118,108,111,103, 105,99,97,108,110,111,116,10,69,78,67,79,68,73,78,71, 32,56,57,55,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,70,56,10,56,48,10,56,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,49,49,10,69,78,67,79,68,73,78,71,32,56,57,55, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,56,56,10,55,48, 10,53,48,10,55,48,10,56,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,49,50,10, 69,78,67,79,68,73,78,71,32,56,57,55,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,55,48,10,56,56,10,56,56,10, 56,56,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,49,51,10,69,78,67,79, 68,73,78,71,32,56,57,55,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,55,48,10,56,56,10,56,56,10,70,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,49,52,10,69,78,67,79,68,73,78,71, 32,56,57,56,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,48,10,56,56,10,53,48,10,50,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,49,53,10,69,78,67,79,68,73,78,71,32,56,57,56, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,50,48, 10,53,48,10,56,56,10,65,56,10,53,48,10,65,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,49,54,10, 69,78,67,79,68,73,78,71,32,56,57,56,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,50,48,10,50,48,10,55,48,10,65,56,10,70,56,10, 65,56,10,55,48,10,50,48,10,50,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,49,55,10,69,78,67,79, 68,73,78,71,32,56,57,56,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 53,48,10,53,48,10,70,56,10,53,48,10,53,48,10,70, 56,10,53,48,10,53,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,49,56,10,69,78,67,79,68,73,78,71, 32,56,57,56,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,53, 48,10,65,56,10,55,48,10,50,48,10,55,48,10,65,56, 10,53,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,49,57,10,69,78,67,79,68,73,78,71,32,56,57,56, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,56,48,10,56,48, 10,70,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,49,65,10, 69,78,67,79,68,73,78,71,32,56,57,56,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,48,10,53,48,10,55,48,10,65,56,10,66,56,10, 56,56,10,55,48,10,53,48,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,49,66,10,69,78,67,79, 68,73,78,71,32,56,57,56,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 70,56,10,56,56,10,55,48,10,50,48,10,50,48,10,53, 48,10,65,56,10,70,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,49,67,10,69,78,67,79,68,73,78,71, 32,56,57,56,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 48,10,56,48,10,56,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,49,68,10,69,78,67,79,68,73,78,71,32,56,57,56, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,51,56,10,48,56, 10,48,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,49,69,10, 69,78,67,79,68,73,78,71,32,56,57,57,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,56,48,10, 56,48,10,69,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,49,70,10,69,78,67,79, 68,73,78,71,32,56,57,57,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,56,10,48,56,10,51, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 105,110,116,101,103,114,97,108,116,112,10,69,78,67,79,68, 73,78,71,32,56,57,57,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,49,48,10,50,56,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,105, 110,116,101,103,114,97,108,98,116,10,69,78,67,79,68,73, 78,71,32,56,57,57,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,65,48,10,52,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,50,50,10,69,78,67,79,68,73,78,71,32,56, 57,57,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,55,48,10,56,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,50, 51,10,69,78,67,79,68,73,78,71,32,56,57,57,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,56,10,55, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,50,52,10,69,78, 67,79,68,73,78,71,32,56,57,57,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,68,56,10,50,48, 10,53,48,10,56,56,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,50,53,10,69,78,67,79,68,73, 78,71,32,56,57,57,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,49,56,10,67,48,10,50,48,10,49,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,50,54,10,69,78,67,79,68,73,78,71,32,56, 57,57,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,48,10, 68,56,10,65,52,10,68,56,10,70,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,50, 55,10,69,78,67,79,68,73,78,71,32,56,57,57,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,70,56,10,68,56,10,65, 56,10,68,56,10,70,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,50,56,10,69,78, 67,79,68,73,78,71,32,57,48,48,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,70,67,10,56, 52,10,65,67,10,56,52,10,65,67,10,56,52,10,65,67, 10,56,52,10,65,67,10,56,52,10,70,67,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,110,103,108,101,108,101,102,116,10,69,78,67,79, 68,73,78,71,32,57,48,48,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,56,10,49,48,10, 49,48,10,50,48,10,50,48,10,52,48,10,50,48,10,50, 48,10,49,48,10,49,48,10,48,56,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,110,103,108,101,114,105,103,104,116,10,69,78,67,79,68, 73,78,71,32,57,48,48,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,52,48,10,50,48,10,50, 48,10,49,48,10,49,48,10,48,56,10,49,48,10,49,48, 10,50,48,10,50,48,10,52,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,50,66,10,69,78,67,79,68,73,78,71,32, 57,48,48,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,51,67, 10,54,67,10,57,52,10,54,67,10,51,67,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 50,67,10,69,78,67,79,68,73,78,71,32,57,48,48,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,50,48,10,53,48,10,56,56,10, 56,56,10,56,56,10,53,48,10,50,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,50,68,10,69, 78,67,79,68,73,78,71,32,57,48,48,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,49,48,10,50,48,10,54,48,10,68,56,10,51, 48,10,50,48,10,52,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,50,69,10,69,78,67,79,68, 73,78,71,32,57,48,48,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,55,48,10,56, 56,10,66,67,10,65,56,10,55,48,10,52,48,10,67,48, 10,69,48,10,67,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,50,70,10,69,78,67,79,68,73,78,71,32, 57,48,48,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,55,48, 10,48,48,10,70,56,10,48,48,10,55,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 51,48,10,69,78,67,79,68,73,78,71,32,57,48,48,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,52,56,10,70,67,10,52,56,10,52,56,10, 52,56,10,57,48,10,57,48,10,57,48,10,70,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,51,49,10,69, 78,67,79,68,73,78,71,32,57,48,48,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,52,48,10,52,48,10,65,56,10,70,67,10,65, 56,10,52,48,10,52,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,51,50,10,69,78,67,79,68, 73,78,71,32,57,48,49,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,52, 48,10,54,48,10,53,48,10,70,67,10,53,48,10,54,48, 10,52,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,51,51,10,69,78,67,79,68,73,78,71,32, 57,48,49,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,56,48,10,67,48,10,65,48,10,57,48,10, 70,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 51,52,10,69,78,67,79,68,73,78,71,32,57,48,49,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 56,52,10,56,52,10,56,52,10,56,52,10,70,67,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,51,53,10,69, 78,67,79,68,73,78,71,32,57,48,49,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,56,10,56, 56,10,53,48,10,53,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,51,54,10,69,78,67,79,68, 73,78,71,32,57,48,49,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,70,56,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,70,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,51,55,10,69,78,67,79,68,73,78,71,32, 57,48,49,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,55,56,10,52,56,10,52,56,10,52,56, 10,52,56,10,52,56,10,52,56,10,52,56,10,52,56,10, 52,56,10,55,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 51,56,10,69,78,67,79,68,73,78,71,32,57,48,49,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,70,56,10,56,56,10,56,56,10,56,56,10,70,56,10, 56,56,10,70,56,10,56,56,10,56,56,10,56,56,10,70, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,51,57,10,69, 78,67,79,68,73,78,71,32,57,48,49,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,70,56,10, 56,56,10,56,56,10,65,56,10,56,56,10,70,56,10,56, 56,10,65,56,10,56,56,10,56,56,10,70,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,51,65,10,69,78,67,79,68, 73,78,71,32,57,48,49,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,70,56,10,56,56,10,56, 56,10,65,56,10,68,56,10,56,56,10,68,56,10,65,56, 10,56,56,10,56,56,10,70,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,51,66,10,69,78,67,79,68,73,78,71,32, 57,48,49,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,70,56,10,56,56,10,56,56,10,56,56, 10,65,56,10,68,56,10,65,56,10,56,56,10,56,56,10, 56,56,10,70,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 51,67,10,69,78,67,79,68,73,78,71,32,57,48,50,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,70,56,10,56,56,10,65,56,10,68,56,10,56,56,10, 56,56,10,56,56,10,68,56,10,65,56,10,56,56,10,70, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,51,68,10,69, 78,67,79,68,73,78,71,32,57,48,50,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,50,48,10,55,48,10,65,56,10,65,56,10,65, 56,10,55,48,10,50,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,51,69,10,69,78,67,79,68, 73,78,71,32,57,48,50,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,55, 48,10,56,56,10,65,56,10,68,56,10,65,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,51,70,10,69,78,67,79,68,73,78,71,32, 57,48,50,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,56,10,49,48, 10,49,48,10,70,56,10,52,48,10,52,48,10,56,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 52,48,10,69,78,67,79,68,73,78,71,32,57,48,50,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,56,48,10,52,48,10,52,48,10, 70,56,10,49,48,10,49,48,10,48,56,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,52,49,10,69, 78,67,79,68,73,78,71,32,57,48,50,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,70,56,10, 57,56,10,57,56,10,57,56,10,65,56,10,65,56,10,65, 56,10,67,56,10,67,56,10,67,56,10,70,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,52,50,10,69,78,67,79,68, 73,78,71,32,57,48,50,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,70,56,10,67,56,10,67, 56,10,67,56,10,65,56,10,65,56,10,65,56,10,57,56, 10,57,56,10,57,56,10,70,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,52,51,10,69,78,67,79,68,73,78,71,32, 57,48,50,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,70,56,10,56,56,10,56,56,10,57,56, 10,65,56,10,67,56,10,65,56,10,57,56,10,56,56,10, 56,56,10,70,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 52,52,10,69,78,67,79,68,73,78,71,32,57,48,50,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,70,56,10,56,56,10,56,56,10,67,56,10,65,56,10, 57,56,10,65,56,10,67,56,10,56,56,10,56,56,10,70, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,52,53,10,69, 78,67,79,68,73,78,71,32,57,48,50,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 49,48,10,49,48,10,51,48,10,53,48,10,70,56,10,53, 48,10,51,48,10,49,48,10,49,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,52,54,10,69,78,67,79,68, 73,78,71,32,57,48,51,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,52,48,10,52, 48,10,54,48,10,53,48,10,70,56,10,53,48,10,54,48, 10,52,48,10,52,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,52,55,10,69,78,67,79,68,73,78,71,32, 57,48,51,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,70,56,10,56,56,10,56,56,10,65,56, 10,67,56,10,70,56,10,67,56,10,65,56,10,56,56,10, 56,56,10,70,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 52,56,10,69,78,67,79,68,73,78,71,32,57,48,51,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,70,56,10,56,56,10,56,56,10,65,56,10,57,56,10, 70,56,10,57,56,10,65,56,10,56,56,10,56,56,10,70, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,52,57,10,69, 78,67,79,68,73,78,71,32,57,48,51,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 56,48,10,56,48,10,55,48,10,67,56,10,65,56,10,57, 56,10,55,48,10,48,56,10,48,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,52,65,10,69,78,67,79,68, 73,78,71,32,57,48,51,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,70,56,10,48,48,10,70,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,52,66,10,69,78,67,79,68,73,78,71,32, 57,48,51,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,55,48,10,55,48,10,65,56,10,70,56,10, 50,48,10,50,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 52,67,10,69,78,67,79,68,73,78,71,32,57,48,51,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,70,56,10,56,56,10,56,56,10,56,56,10,68,56,10, 68,56,10,65,56,10,65,56,10,56,56,10,56,56,10,70, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,52,68,10,69, 78,67,79,68,73,78,71,32,57,48,51,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,70,56,10, 56,56,10,56,56,10,65,56,10,65,56,10,68,56,10,68, 56,10,70,56,10,56,56,10,56,56,10,70,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,52,69,10,69,78,67,79,68, 73,78,71,32,57,48,51,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,50, 48,10,55,48,10,65,56,10,65,56,10,55,48,10,50,48, 10,50,48,10,70,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,52,70,10,69,78,67,79,68,73,78,71,32, 57,48,51,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,55,48,10,65,56, 10,50,48,10,50,48,10,70,56,10,50,48,10,50,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 53,48,10,69,78,67,79,68,73,78,71,32,57,48,52,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,70,56,10,65,56,10,70,56,10,65,56,10,65,56,10, 65,56,10,65,56,10,65,56,10,65,56,10,65,56,10,70, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,53,49,10,69, 78,67,79,68,73,78,71,32,57,48,52,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 70,56,10,48,48,10,70,56,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,53,50,10,69,78,67,79,68, 73,78,71,32,57,48,52,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,50, 48,10,70,56,10,65,56,10,55,48,10,55,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,53,51,10,69,78,67,79,68,73,78,71,32, 57,48,52,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,70,56,10,56,56,10,56,56,10,65,56, 10,65,56,10,68,56,10,68,56,10,56,56,10,56,56,10, 56,56,10,70,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 53,52,10,69,78,67,79,68,73,78,71,32,57,48,52,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,70,56,10,56,56,10,56,56,10,70,56,10,68,56,10, 68,56,10,65,56,10,65,56,10,56,56,10,56,56,10,70, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,53,53,10,69, 78,67,79,68,73,78,71,32,57,48,52,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 70,56,10,50,48,10,50,48,10,55,48,10,65,56,10,65, 56,10,55,48,10,50,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,53,54,10,69,78,67,79,68, 73,78,71,32,57,48,52,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,50, 48,10,50,48,10,70,56,10,50,48,10,50,48,10,65,56, 10,55,48,10,50,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,53,55,10,69,78,67,79,68,73,78,71,32, 57,48,52,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,70,56,10,65,56,10,65,56,10,65,56, 10,65,56,10,65,56,10,65,56,10,65,56,10,70,56,10, 65,56,10,70,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 53,56,10,69,78,67,79,68,73,78,71,32,57,48,52,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,50,48,10,50,48,10,50,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,70, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,53,57,10,69, 78,67,79,68,73,78,71,32,57,48,52,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,50,48,10,53,48,10,53,48,10,53,48,10,56, 56,10,56,56,10,70,56,10,48,48,10,70,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,53,65,10,69,78,67,79,68, 73,78,71,32,57,48,53,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,50,48,10,53,48,10,56,56,10,53,48, 10,50,48,10,48,48,10,70,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,53,66,10,69,78,67,79,68,73,78,71,32, 57,48,53,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,48,10,53,48,10,50,48,10,48,48,10,48,48,10, 48,48,10,70,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 53,67,10,69,78,67,79,68,73,78,71,32,57,48,53,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,55,48,10,56,56,10, 56,56,10,56,56,10,55,48,10,48,48,10,48,48,10,70, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,53,68,10,69, 78,67,79,68,73,78,71,32,57,48,53,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,55,48,10,56,56,10,65,56,10,68, 56,10,65,56,10,56,56,10,56,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,53,69,10,69,78,67,79,68, 73,78,71,32,57,48,53,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,70,56,10,65,56,10,65, 56,10,65,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,70,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,53,70,10,69,78,67,79,68,73,78,71,32, 57,48,53,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,55,48,10,56,56, 10,65,56,10,70,56,10,65,56,10,68,56,10,56,56,10, 55,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 54,48,10,69,78,67,79,68,73,78,71,32,57,48,53,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,70,56,10,56,56,10,56,56,10,56,56,10,65,56,10, 56,56,10,56,56,10,65,56,10,56,56,10,56,56,10,70, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,54,49,10,69, 78,67,79,68,73,78,71,32,57,48,53,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,53,48,10, 53,48,10,48,48,10,70,56,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,54,50,10,69,78,67,79,68, 73,78,71,32,57,48,53,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,53,48,10,53,48,10,48, 48,10,70,56,10,56,56,10,56,56,10,53,48,10,53,48, 10,50,48,10,50,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,54,51,10,69,78,67,79,68,73,78,71,32, 57,48,53,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,53,48,10,53,48,10,48,48,10,50,48, 10,50,48,10,70,56,10,55,48,10,55,48,10,56,56,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 54,52,10,69,78,67,79,68,73,78,71,32,57,48,54,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,53,48,10,53,48,10,48,48,10,48,48,10,50,48,10, 53,48,10,50,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,54,53,10,69, 78,67,79,68,73,78,71,32,57,48,54,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,53,48,10, 53,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,55,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,54,54,10,69,78,67,79,68, 73,78,71,32,57,48,54,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,65, 56,10,65,56,10,65,56,10,65,56,10,65,56,10,55,48, 10,50,48,10,50,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,54,55,10,69,78,67,79,68,73,78,71,32, 57,48,54,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,49,48,10,49,48,10,55,56, 10,57,48,10,57,48,10,57,48,10,57,48,10,55,56,10, 49,48,10,49,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 54,56,10,69,78,67,79,68,73,78,71,32,57,48,54,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,53,48,10,53,48,10,48,48,10,48,48,10,48,48,10, 52,48,10,65,56,10,65,56,10,49,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,54,57,10,69, 78,67,79,68,73,78,71,32,57,48,54,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,53,48,10, 53,48,10,48,48,10,48,48,10,67,48,10,51,48,10,48, 56,10,51,48,10,67,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,54,65,10,69,78,67,79,68, 73,78,71,32,57,48,54,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,56,10,48,48,10,48,48, 10,51,48,10,50,48,10,52,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,54,66,10,69,78,67,79,68,73,78,71,32, 57,48,54,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,70,56,10,56,56,10,56,56, 10,53,48,10,53,56,10,65,56,10,66,48,10,50,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 54,67,10,69,78,67,79,68,73,78,71,32,57,48,54,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,50,48,10,53,48,10,56,56,10,69,56,10, 66,56,10,56,56,10,56,56,10,53,48,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,54,68,10,69, 78,67,79,68,73,78,71,32,57,48,54,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,50,48,10,50,48,10,54,56,10,65,56,10,66, 48,10,50,48,10,50,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,54,69,10,69,78,67,79,68, 73,78,71,32,57,48,55,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,50, 48,10,55,48,10,50,48,10,48,48,10,48,48,10,51,48, 10,50,48,10,52,48,10,70,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,54,70,10,69,78,67,79,68,73,78,71,32, 57,48,55,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,70,56,10,56,56,10,57,56,10,57,56, 10,70,56,10,65,56,10,70,56,10,67,56,10,67,56,10, 56,56,10,70,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 55,48,10,69,78,67,79,68,73,78,71,32,57,48,55,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,70,56,10,56,56,10,65,56,10,68,56,10,57,56,10, 65,56,10,65,56,10,56,56,10,65,56,10,56,56,10,70, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,55,49,10,69, 78,67,79,68,73,78,71,32,57,48,55,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 56,56,10,69,56,10,66,56,10,56,56,10,53,48,10,53, 48,10,50,48,10,50,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,55,50,10,69,78,67,79,68, 73,78,71,32,57,48,55,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,50, 48,10,50,48,10,53,48,10,53,48,10,56,56,10,69,56, 10,66,56,10,56,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,55,51,10,69,78,67,79,68,73,78,71,32, 57,48,55,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 49,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 55,52,10,69,78,67,79,68,73,78,71,32,57,48,55,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,55,48,10, 56,56,10,56,56,10,56,56,10,56,56,10,70,48,10,56, 48,10,56,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,55,53,10,69, 78,67,79,68,73,78,71,32,57,48,55,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,53,48,10,56,56,10,65, 56,10,65,56,10,65,56,10,53,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,55,54,10,69,78,67,79,68, 73,78,71,32,57,48,55,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,54,56,10,57,48,10,57,48,10,57,48,10,57,48, 10,54,56,10,48,48,10,70,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,55,55,10,69,78,67,79,68,73,78,71,32, 57,48,55,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,55,48, 10,56,56,10,54,48,10,56,48,10,56,56,10,55,48,10, 48,48,10,70,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 55,56,10,69,78,67,79,68,73,78,71,32,57,48,56,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,49,48,10,48,48,10,70, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,55,57,10,69, 78,67,79,68,73,78,71,32,57,48,56,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,53,48,10,56,56,10,65,56,10,65, 56,10,65,56,10,53,48,10,48,48,10,70,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,55,65,10,69,78,67,79,68, 73,78,71,32,57,48,56,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,54,56,10,57,48,10,57,48,10,57,48, 10,57,48,10,54,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,55,66,10,69,78,67,79,68,73,78,71,32, 57,48,56,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,56,10,48,56,10,48,56, 10,51,56,10,49,67,10,57,48,10,53,48,10,50,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 55,67,10,69,78,67,79,68,73,78,71,32,57,48,56,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,54,48,10,54,48,10,52,48,10,67,48,10, 67,48,10,52,48,10,54,48,10,70,67,10,67,48,10,69, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,55,68,10,69, 78,67,79,68,73,78,71,32,57,48,56,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,68,56,10,55, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,55,69,10,69,78,67,79,68, 73,78,71,32,57,48,56,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,70,56,10,53,48, 10,68,56,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,55,70,10,69,78,67,79,68,73,78,71,32, 57,48,56,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,50,48,10,55,48, 10,70,56,10,70,56,10,70,56,10,55,48,10,50,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 56,48,10,69,78,67,79,68,73,78,71,32,57,48,56,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,55,48,10,48,56,10,55,56,10, 56,56,10,56,56,10,55,56,10,48,48,10,56,56,10,53, 48,10,50,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,56,49,10,69, 78,67,79,68,73,78,71,32,57,48,56,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,54,48,10,49,48,10,55, 48,10,57,48,10,57,48,10,55,52,10,48,48,10,70,67, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,56,50,10,69,78,67,79,68, 73,78,71,32,57,48,57,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,52,56,10,50,52,10,54,67,10,66,52, 10,66,52,10,54,67,10,48,48,10,54,67,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,56,51,10,69,78,67,79,68,73,78,71,32, 57,48,57,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,48,10,57,52,10,51,48,10,68,52,10,53,48,10, 66,52,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 56,52,10,69,78,67,79,68,73,78,71,32,57,48,57,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 68,52,10,68,52,10,68,52,10,70,56,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,56,53,10,69, 78,67,79,68,73,78,71,32,57,48,57,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,70,56,10,65,56,10,65,56,10,65,56,10,65, 56,10,65,56,10,70,56,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,56,54,10,69,78,67,79,68, 73,78,71,32,57,48,57,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,50, 48,10,53,48,10,56,56,10,50,52,10,70,52,10,50,52, 10,56,56,10,53,48,10,50,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,56,55,10,69,78,67,79,68,73,78,71,32, 57,48,57,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,56, 10,49,67,10,50,56,10,52,48,10,57,67,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 56,56,10,69,78,67,79,68,73,78,71,32,57,48,57,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,50,48,10,65,56,10, 55,48,10,65,56,10,55,48,10,65,56,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,56,57,10,69, 78,67,79,68,73,78,71,32,57,48,57,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,56,10,56,52,10,56, 52,10,67,67,10,66,52,10,55,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,56,65,10,69,78,67,79,68, 73,78,71,32,57,48,57,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,56,10,56,52,10,70,67,10,67,67,10,66,52, 10,56,52,10,55,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,56,66,10,69,78,67,79,68,73,78,71,32, 57,48,57,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,69,56, 10,67,52,10,65,52,10,49,52,10,56,52,10,55,56,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 56,67,10,69,78,67,79,68,73,78,71,32,57,49,48,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,70,48,10,67,56,10, 48,48,10,53,48,10,65,56,10,53,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,56,68,10,69, 78,67,79,68,73,78,71,32,57,49,48,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,55,48,10,53,48,10,53,48,10,53, 48,10,53,48,10,68,56,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,56,69,10,69,78,67,79,68, 73,78,71,32,57,49,48,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,56,10,53,48,10,53,48,10,53,48,10,53,48, 10,70,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,56,70,10,69,78,67,79,68,73,78,71,32, 57,49,48,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,70,56, 10,50,48,10,53,48,10,56,56,10,53,48,10,50,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 57,48,10,69,78,67,79,68,73,78,71,32,57,49,48,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,50,48,10,53,48,10, 56,56,10,53,48,10,50,48,10,70,56,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,57,49,10,69, 78,67,79,68,73,78,71,32,57,49,48,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,70,56,10,50,48,10,53,48,10,70, 56,10,53,48,10,50,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,57,50,10,69,78,67,79,68, 73,78,71,32,57,49,48,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,50,48,10,53,48,10,70,56,10,53,48,10,50,48, 10,70,56,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,57,51,10,69,78,67,79,68,73,78,71,32, 57,49,48,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,70,56,10,48,48,10,65,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 57,52,10,69,78,67,79,68,73,78,71,32,57,49,48,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,51,48,10,52,56,10,56,52,10, 56,52,10,56,52,10,52,56,10,51,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,57,53,10,69, 78,67,79,68,73,78,71,32,57,49,48,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,70,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,70,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,57,54,10,69,78,67,79,68, 73,78,71,32,57,49,49,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,56,10,55,48,10,55,48,10,54,48,10,54,48, 10,52,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,57,55,10,69,78,67,79,68,73,78,71,32, 57,49,49,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,56,10,52,56,10,50,56, 10,52,56,10,70,56,10,52,56,10,50,56,10,52,56,10, 55,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 57,56,10,69,78,67,79,68,73,78,71,32,57,49,49,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,70,48,10,57,48,10,65,48,10,57,48,10, 70,56,10,57,48,10,65,48,10,57,48,10,70,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,57,57,10,69, 78,67,79,68,73,78,71,32,57,49,49,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,51,56,10,54,56,10,52,56,10,67,67,10,67, 67,10,67,67,10,70,67,10,70,67,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,57,65,10,69,78,67,79,68, 73,78,71,32,57,49,49,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,56,10,56,52,10,57,52,10,65,52,10,56,52, 10,55,56,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,57,66,10,69,78,67,79,68,73,78,71,32, 57,49,49,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,49,48,10,50,48,10,50,48,10,52,48, 10,52,48,10,52,48,10,52,48,10,52,48,10,52,48,10, 52,48,10,52,48,10,52,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 57,67,10,69,78,67,79,68,73,78,71,32,57,49,49,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,52,48, 10,52,48,10,52,48,10,52,48,10,52,48,10,52,48,10, 52,48,10,52,48,10,52,48,10,52,48,10,52,48,10,52, 48,10,52,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,57,68,10,69, 78,67,79,68,73,78,71,32,57,49,49,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,52,48,10,52,48,10, 52,48,10,52,48,10,52,48,10,52,48,10,52,48,10,52, 48,10,52,48,10,50,48,10,50,48,10,49,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,57,69,10,69,78,67,79,68, 73,78,71,32,57,49,49,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,52,48,10,50,48,10,50, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,49,48, 10,49,48,10,49,48,10,49,48,10,49,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,57,70,10,69,78,67,79,68,73,78,71,32, 57,49,49,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,49,48,10,49,48,10,49,48,10,49,48,10,49,48, 10,49,48,10,49,48,10,49,48,10,49,48,10,49,48,10, 49,48,10,49,48,10,49,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 65,48,10,69,78,67,79,68,73,78,71,32,57,49,50,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,49,48, 10,49,48,10,49,48,10,49,48,10,49,48,10,49,48,10, 49,48,10,49,48,10,49,48,10,50,48,10,50,48,10,52, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,65,49,10,69, 78,67,79,68,73,78,71,32,57,49,50,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,55,48,10, 52,48,10,52,48,10,52,48,10,52,48,10,52,48,10,52, 48,10,52,48,10,52,48,10,52,48,10,52,48,10,52,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,65,50,10,69,78,67,79,68, 73,78,71,32,57,49,50,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,52,48,10,52,48,10,52,48,10,52, 48,10,52,48,10,52,48,10,52,48,10,52,48,10,52,48, 10,52,48,10,52,48,10,52,48,10,52,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,65,51,10,69,78,67,79,68,73,78,71,32, 57,49,50,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,52,48,10,52,48,10,52,48,10,52,48,10,52,48, 10,52,48,10,52,48,10,52,48,10,52,48,10,52,48,10, 52,48,10,55,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 65,52,10,69,78,67,79,68,73,78,71,32,57,49,50,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,55,48,10,49,48,10,49,48,10,49,48,10,49,48,10, 49,48,10,49,48,10,49,48,10,49,48,10,49,48,10,49, 48,10,49,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,65,53,10,69, 78,67,79,68,73,78,71,32,57,49,50,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,49,48,10,49,48,10, 49,48,10,49,48,10,49,48,10,49,48,10,49,48,10,49, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,49,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,65,54,10,69,78,67,79,68, 73,78,71,32,57,49,50,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,49,48,10,49,48,10,49,48,10,49, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,49,48, 10,49,48,10,49,48,10,55,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,65,55,10,69,78,67,79,68,73,78,71,32, 57,49,50,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,49,56,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 65,56,10,69,78,67,79,68,73,78,71,32,57,49,50,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 67,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,65,57,10,69, 78,67,79,68,73,78,71,32,57,49,50,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,49,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,65,65,10,69,78,67,79,68, 73,78,71,32,57,49,51,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,65,66,10,69,78,67,79,68,73,78,71,32, 57,49,51,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,67,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 65,67,10,69,78,67,79,68,73,78,71,32,57,49,51,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 49,56,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,65,68,10,69, 78,67,79,68,73,78,71,32,57,49,51,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,67,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,65,69,10,69,78,67,79,68, 73,78,71,32,57,49,51,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,65,70,10,69,78,67,79,68,73,78,71,32, 57,49,51,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,70,67,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 66,48,10,69,78,67,79,68,73,78,71,32,57,49,51,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,49,56, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,67,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,66,49,10,69, 78,67,79,68,73,78,71,32,57,49,51,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,67,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,49,56, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,66,50,10,69,78,67,79,68, 73,78,71,32,57,49,51,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,70,67,10,56,48,10,52, 48,10,52,48,10,52,48,10,52,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,49,48,10,49,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,66,51,10,69,78,67,79,68,73,78,71,32, 57,49,51,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,49,48,10,49,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,52,48,10,52,48,10,52,48,10,52,48,10, 56,48,10,70,67,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 66,52,10,69,78,67,79,68,73,78,71,32,57,49,52,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,70,56,10,56,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,66,53,10,69, 78,67,79,68,73,78,71,32,57,49,52,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,56,56,10,70,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,66,54,10,69,78,67,79,68, 73,78,71,32,57,49,52,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,56, 56,10,70,56,10,48,48,10,48,48,10,48,48,10,70,56, 10,56,56,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,66,55,10,69,78,67,79,68,73,78,71,32, 57,49,52,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,65,48,10,65,48,10,54,48,10,54,48,10,50,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 66,56,10,69,78,67,79,68,73,78,71,32,57,49,52,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,56,48, 10,56,48,10,56,48,10,56,48,10,56,48,10,56,48,10, 56,48,10,56,48,10,56,48,10,56,48,10,56,48,10,56, 48,10,56,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,66,57,10,69, 78,67,79,68,73,78,71,32,57,49,52,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,52,10,48,52,10, 48,52,10,48,52,10,48,52,10,48,52,10,48,52,10,48, 52,10,48,52,10,48,52,10,48,52,10,48,52,10,48,52, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,66,65,10,69,78,67,79,68, 73,78,71,32,57,49,52,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,70,67,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,66,66,10,69,78,67,79,68,73,78,71,32, 57,49,52,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,70,67,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 66,67,10,69,78,67,79,68,73,78,71,32,57,49,52,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,70,67,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,66,68,10,69, 78,67,79,68,73,78,71,32,57,49,52,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,70,67, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,66,69,10,69,78,67,79,68, 73,78,71,32,57,49,53,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,70,56,10,56, 48,10,56,48,10,56,48,10,56,48,10,56,48,10,56,48, 10,56,48,10,56,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,66,70,10,69,78,67,79,68,73,78,71,32, 57,49,53,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,56,48,10,56,48,10,56,48, 10,56,48,10,56,48,10,56,48,10,56,48,10,56,48,10, 70,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 67,48,10,69,78,67,79,68,73,78,71,32,57,49,53,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,50,48,10,50,48,10,55,48,10,65,56,10, 65,56,10,65,56,10,55,48,10,50,48,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,67,49,10,69, 78,67,79,68,73,78,71,32,57,49,53,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 70,56,10,50,48,10,55,48,10,65,56,10,65,56,10,65, 56,10,55,48,10,50,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,67,50,10,69,78,67,79,68, 73,78,71,32,57,49,53,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,50, 48,10,55,48,10,65,56,10,65,56,10,65,56,10,55,48, 10,50,48,10,70,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,67,51,10,69,78,67,79,68,73,78,71,32, 57,49,53,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,50,48,10,50,48, 10,55,48,10,55,48,10,65,56,10,70,56,10,50,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 67,52,10,69,78,67,79,68,73,78,71,32,57,49,53,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,70,56,10,50,48,10,50,48,10,55,48,10, 55,48,10,65,56,10,70,56,10,50,48,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,67,53,10,69, 78,67,79,68,73,78,71,32,57,49,53,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,50,48,10,50,48,10,55,48,10,55,48,10,65, 56,10,70,56,10,50,48,10,70,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,67,54,10,69,78,67,79,68, 73,78,71,32,57,49,53,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,54,56,10,66,48,10,50,48, 10,50,48,10,50,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,67,55,10,69,78,67,79,68,73,78,71,32, 57,49,53,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,70,56,10,50,48,10,50,48, 10,50,48,10,54,56,10,66,48,10,50,48,10,50,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 67,56,10,69,78,67,79,68,73,78,71,32,57,49,54,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 54,56,10,66,48,10,50,48,10,50,48,10,70,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,67,57,10,69, 78,67,79,68,73,78,71,32,57,49,54,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 70,56,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,67,65,10,69,78,67,79,68, 73,78,71,32,57,49,54,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,70,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,67,66,10,69,78,67,79,68,73,78,71,32, 57,49,54,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,70,56,10,48,56,10,48,56, 10,48,56,10,48,56,10,48,56,10,48,56,10,48,56,10, 48,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 67,67,10,69,78,67,79,68,73,78,71,32,57,49,54,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,56,10,48,56,10,48,56,10,48,56,10, 48,56,10,48,56,10,48,56,10,48,56,10,70,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,67,68,10,69, 78,67,79,68,73,78,71,32,57,49,54,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,65,56,10,65,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,70,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,67,69,10,69,78,67,79,68, 73,78,71,32,57,49,54,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,49,56,10,49, 56,10,49,56,10,49,56,10,53,56,10,70,56,10,70,48, 10,52,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,48,48,10,69,78,67,79,68,73,78,71,32, 57,50,49,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,57,48,10,68,48,10,66,48,10,57,48, 10,53,48,10,53,48,10,55,48,10,50,48,10,50,48,10, 50,48,10,51,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 48,49,10,69,78,67,79,68,73,78,71,32,57,50,49,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,54,48,10,56,48,10,52,48,10,50,48,10,69,48,10, 53,48,10,53,48,10,50,48,10,50,56,10,51,56,10,50, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,48,50,10,69, 78,67,79,68,73,78,71,32,57,50,49,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,54,48,10, 56,48,10,52,48,10,50,48,10,67,48,10,55,48,10,50, 48,10,50,48,10,50,56,10,49,48,10,50,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,48,51,10,69,78,67,79,68, 73,78,71,32,57,50,49,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,69,48,10,56,48,10,67, 48,10,56,48,10,69,48,10,55,48,10,50,48,10,50,48, 10,50,56,10,49,48,10,50,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,48,52,10,69,78,67,79,68,73,78,71,32, 57,50,50,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,69,48,10,56,48,10,67,48,10,56,48, 10,69,48,10,53,48,10,53,48,10,50,48,10,51,56,10, 49,48,10,49,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 48,53,10,69,78,67,79,68,73,78,71,32,57,50,50,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,69,48, 10,56,48,10,67,48,10,56,48,10,69,48,10,54,56,10, 53,56,10,52,56,10,49,48,10,50,56,10,50,56,10,51, 56,10,49,56,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,48,54,10,69, 78,67,79,68,73,78,71,32,57,50,50,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,52,48,10, 65,48,10,69,48,10,65,48,10,51,48,10,52,48,10,51, 48,10,48,48,10,50,56,10,51,48,10,50,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,48,55,10,69,78,67,79,68, 73,78,71,32,57,50,50,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,67,48,10,65,48,10,67,48,10,65, 48,10,70,48,10,52,48,10,54,48,10,52,48,10,55,48, 10,50,48,10,50,48,10,50,48,10,51,56,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,48,56,10,69,78,67,79,68,73,78,71,32, 57,50,50,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,67,48,10,65,48,10,67,48, 10,65,48,10,68,56,10,50,48,10,49,48,10,48,56,10, 51,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 48,57,10,69,78,67,79,68,73,78,71,32,57,50,50,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,65,48,10,65,48,10,69,48,10,65,48,10, 65,48,10,51,56,10,49,48,10,49,48,10,49,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,48,65,10,69, 78,67,79,68,73,78,71,32,57,50,50,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 56,48,10,56,48,10,56,48,10,69,48,10,51,56,10,50, 48,10,51,48,10,50,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,48,66,10,69,78,67,79,68, 73,78,71,32,57,50,50,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,65,48,10,65, 48,10,65,48,10,52,48,10,52,48,10,51,56,10,49,48, 10,49,48,10,49,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,48,67,10,69,78,67,79,68,73,78,71,32, 57,50,50,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,69,48,10,56,48,10,67,48, 10,56,48,10,66,56,10,50,48,10,51,48,10,50,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 48,68,10,69,78,67,79,68,73,78,71,32,57,50,50,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,54,48,10,56,48,10,56,48,10,54,48,10, 51,48,10,50,56,10,51,48,10,50,56,10,50,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,48,69,10,69, 78,67,79,68,73,78,71,32,57,50,51,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 54,48,10,56,48,10,52,48,10,50,48,10,68,48,10,50, 56,10,50,56,10,50,56,10,49,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,48,70,10,69,78,67,79,68, 73,78,71,32,57,50,51,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,54,48,10,56, 48,10,52,48,10,50,48,10,70,56,10,49,48,10,49,48, 10,49,48,10,51,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,49,48,10,69,78,67,79,68,73,78,71,32, 57,50,51,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,67,48,10,65,48,10,65,48,10,67,48,10,52,48, 10,52,48,10,52,48,10,55,48,10,51,56,10,50,48,10, 51,48,10,50,48,10,51,56,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 49,49,10,69,78,67,79,68,73,78,71,32,57,50,51,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,67,48, 10,65,48,10,65,48,10,67,48,10,51,48,10,52,48,10, 52,48,10,51,48,10,48,48,10,49,48,10,51,48,10,49, 48,10,51,56,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,49,50,10,69, 78,67,79,68,73,78,71,32,57,50,51,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,67,48,10,65,48,10, 65,48,10,67,48,10,51,48,10,52,48,10,52,48,10,51, 48,10,48,48,10,51,48,10,48,56,10,49,48,10,51,56, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,49,51,10,69,78,67,79,68, 73,78,71,32,57,50,51,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,67,48,10,65,48,10,65,48,10,67, 48,10,51,48,10,52,48,10,52,48,10,51,48,10,49,48, 10,50,56,10,49,48,10,48,56,10,51,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,49,52,10,69,78,67,79,68,73,78,71,32, 57,50,51,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,67,48,10,65,48,10,65,48,10,67,48,10,51,48, 10,52,48,10,52,48,10,51,48,10,48,48,10,50,48,10, 51,48,10,51,56,10,49,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 49,53,10,69,78,67,79,68,73,78,71,32,57,50,51,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,57,48, 10,68,48,10,66,48,10,48,48,10,50,48,10,53,48,10, 55,48,10,53,48,10,48,48,10,50,56,10,51,48,10,51, 48,10,50,56,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,49,54,10,69, 78,67,79,68,73,78,71,32,57,50,51,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,54,48,10,56,48,10, 52,48,10,50,48,10,67,48,10,53,48,10,53,48,10,50, 48,10,50,48,10,52,56,10,54,56,10,53,56,10,52,56, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,49,55,10,69,78,67,79,68, 73,78,71,32,57,50,51,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,69,48,10,56,48,10,67,48,10,56, 48,10,69,48,10,55,48,10,50,48,10,50,48,10,51,48, 10,50,56,10,51,48,10,50,56,10,51,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,49,56,10,69,78,67,79,68,73,78,71,32, 57,50,52,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,55,48,10,56,48,10,56,48,10,55,48,10,50,48, 10,53,48,10,55,48,10,53,48,10,48,48,10,54,56,10, 53,56,10,52,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 49,57,10,69,78,67,79,68,73,78,71,32,57,50,52,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,69,48,10,56,48,10,67,48,10,56,48,10,69,48,10, 48,48,10,53,48,10,55,48,10,53,48,10,53,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,49,65,10,69, 78,67,79,68,73,78,71,32,57,50,52,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,54,48,10,56,48,10, 52,48,10,50,48,10,67,48,10,53,48,10,53,48,10,50, 48,10,51,48,10,50,56,10,51,48,10,50,56,10,51,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,49,66,10,69,78,67,79,68, 73,78,71,32,57,50,52,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,69,48,10,56,48,10,67,48,10,56, 48,10,70,48,10,52,48,10,50,48,10,49,48,10,55,56, 10,50,48,10,50,48,10,49,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,49,67,10,69,78,67,79,68,73,78,71,32, 57,50,52,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,69,48,10,56,48,10,67,48, 10,56,48,10,57,56,10,50,48,10,49,48,10,48,56,10, 51,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 49,68,10,69,78,67,79,68,73,78,71,32,57,50,52,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,55,48,10,56,48,10,66,48,10,57,48,10,54,48,10, 49,56,10,50,48,10,49,48,10,48,56,10,51,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,49,69,10,69, 78,67,79,68,73,78,71,32,57,50,52,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 65,48,10,67,48,10,65,48,10,65,48,10,49,56,10,50, 48,10,49,48,10,48,56,10,51,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,49,70,10,69,78,67,79,68, 73,78,71,32,57,50,52,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,57,48,10,57,48,10,57, 48,10,57,48,10,54,48,10,49,56,10,50,48,10,49,48, 10,48,56,10,51,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,50,48,10,69,78,67,79,68,73,78,71,32, 57,50,52,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,54,48,10,56,48,10,52,48,10,50,48, 10,67,48,10,51,48,10,50,56,10,51,48,10,50,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 50,49,10,69,78,67,79,68,73,78,71,32,57,50,52,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,65,48,10,65,48,10,70,48,10,52,48,10, 54,48,10,52,48,10,55,48,10,50,48,10,50,48,10,51, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,50,50,10,69, 78,67,79,68,73,78,71,32,57,50,53,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 52,48,10,53,48,10,54,48,10,52,48,10,70,48,10,52, 56,10,52,56,10,52,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,50,51,10,69,78,67,79,68, 73,78,71,32,57,50,53,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,56,56,10,70,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,50,52,10,69,78,67,79,68,73,78,71,32, 57,50,53,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,57,48,10,68,48,10,66,48, 10,57,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 51,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 50,53,10,69,78,67,79,68,73,78,71,32,57,50,53,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,52,56,10,52,56,10,57,48,10,57,48,10, 50,48,10,52,56,10,52,56,10,57,48,10,57,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,50,54,10,69, 78,67,79,68,73,78,71,32,57,50,53,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 55,48,10,56,56,10,56,56,10,56,48,10,52,48,10,50, 48,10,50,48,10,48,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,52,48,10,69,78,67,79,68, 73,78,71,32,57,50,56,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,51,56,10,50, 56,10,50,56,10,50,56,10,50,48,10,65,48,10,65,48, 10,65,48,10,69,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,52,49,10,69,78,67,79,68,73,78,71,32, 57,50,56,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,56,10,48,56,10,48,56, 10,48,56,10,70,56,10,56,56,10,56,56,10,56,56,10, 56,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 52,50,10,69,78,67,79,68,73,78,71,32,57,50,56,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,56,56,10,56,56,10,56,56,10,56,56,10, 70,56,10,50,48,10,50,48,10,50,48,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,52,51,10,69, 78,67,79,68,73,78,71,32,57,50,56,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,70,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,52,52,10,69,78,67,79,68, 73,78,71,32,57,50,56,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,70,56,10,65, 56,10,65,56,10,50,48,10,50,48,10,50,48,10,65,56, 10,65,56,10,70,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,52,53,10,69,78,67,79,68,73,78,71,32, 57,50,56,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,56,56,10,68,56,10,65,56, 10,68,56,10,56,56,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 52,54,10,69,78,67,79,68,73,78,71,32,57,50,56,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,49,56,10,49,56,10,68,56,10, 67,48,10,67,48,10,68,56,10,49,56,10,49,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,52,55,10,69, 78,67,79,68,73,78,71,32,57,50,56,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 49,56,10,49,56,10,49,56,10,50,48,10,50,48,10,50, 48,10,67,48,10,67,48,10,67,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,52,56,10,69,78,67,79,68, 73,78,71,32,57,50,56,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 67,10,65,67,10,65,67,10,65,67,10,65,48,10,65,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,52,57,10,69,78,67,79,68,73,78,71,32, 57,50,56,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,65,56, 10,65,56,10,65,56,10,65,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 52,65,10,69,78,67,79,68,73,78,71,32,57,50,57,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,57,48,10,57,48,10,57,48,10, 57,48,10,52,56,10,52,56,10,52,56,10,52,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,54,48,10,69, 78,67,79,68,73,78,71,32,57,51,49,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 55,48,10,56,56,10,65,56,10,69,56,10,65,56,10,65, 56,10,70,56,10,56,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,54,49,10,69,78,67,79,68, 73,78,71,32,57,51,49,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,55,48,10,56, 56,10,65,56,10,68,56,10,57,56,10,65,56,10,70,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,54,50,10,69,78,67,79,68,73,78,71,32, 57,51,49,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,48,10,56,56,10,65,56, 10,68,56,10,65,56,10,57,56,10,69,56,10,56,56,10, 55,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 54,51,10,69,78,67,79,68,73,78,71,32,57,51,49,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,55,48,10,56,56,10,67,56,10,67,56,10, 69,56,10,70,56,10,65,56,10,56,56,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,54,52,10,69, 78,67,79,68,73,78,71,32,57,51,49,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 55,48,10,56,56,10,70,56,10,67,56,10,69,56,10,57, 56,10,69,56,10,56,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,54,53,10,69,78,67,79,68, 73,78,71,32,57,51,49,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,55,48,10,56, 56,10,66,56,10,67,56,10,69,56,10,68,56,10,65,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,54,54,10,69,78,67,79,68,73,78,71,32, 57,51,49,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,48,10,56,56,10,70,56, 10,57,56,10,65,56,10,65,56,10,65,56,10,56,56,10, 55,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 54,55,10,69,78,67,79,68,73,78,71,32,57,51,49,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,55,48,10,56,56,10,65,56,10,68,56,10, 65,56,10,68,56,10,65,56,10,56,56,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,54,56,10,69, 78,67,79,68,73,78,71,32,57,51,50,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 55,48,10,56,56,10,65,56,10,68,56,10,66,56,10,57, 56,10,69,56,10,56,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,54,57,10,69,78,67,79,68, 73,78,71,32,57,51,50,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,55,56,10,56, 52,10,68,52,10,69,67,10,69,67,10,69,67,10,68,52, 10,56,52,10,55,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,54,65,10,69,78,67,79,68,73,78,71,32, 57,51,50,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,56,10,56,52,10,68,52, 10,68,52,10,68,52,10,68,52,10,68,52,10,56,52,10, 55,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 54,66,10,69,78,67,79,68,73,78,71,32,57,51,50,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,55,56,10,56,52,10,68,52,10,67,67,10, 67,67,10,68,52,10,68,67,10,56,52,10,55,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,54,67,10,69, 78,67,79,68,73,78,71,32,57,51,50,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 55,56,10,56,52,10,68,52,10,67,67,10,68,52,10,67, 67,10,68,52,10,56,52,10,55,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,54,68,10,69,78,67,79,68, 73,78,71,32,57,51,50,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,55,56,10,56, 52,10,68,52,10,68,52,10,68,67,10,68,67,10,67,67, 10,56,52,10,55,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,54,69,10,69,78,67,79,68,73,78,71,32, 57,51,50,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,56,10,56,52,10,68,67, 10,68,52,10,68,67,10,67,67,10,68,67,10,56,52,10, 55,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 54,70,10,69,78,67,79,68,73,78,71,32,57,51,50,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,55,56,10,56,52,10,68,52,10,68,52,10, 68,67,10,68,52,10,67,67,10,56,52,10,55,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,55,48,10,69, 78,67,79,68,73,78,71,32,57,51,50,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 55,56,10,56,52,10,68,67,10,67,67,10,68,52,10,68, 52,10,68,52,10,56,52,10,55,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,55,49,10,69,78,67,79,68, 73,78,71,32,57,51,50,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,55,56,10,56, 52,10,67,67,10,68,52,10,67,67,10,68,52,10,67,67, 10,56,52,10,55,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,55,50,10,69,78,67,79,68,73,78,71,32, 57,51,51,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,56,10,56,52,10,67,67, 10,68,52,10,67,67,10,67,52,10,68,67,10,56,52,10, 55,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 55,51,10,69,78,67,79,68,73,78,71,32,57,51,51,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,55,56,10,56,52,10,70,67,10,66,52,10, 66,52,10,68,52,10,70,67,10,56,52,10,55,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,55,52,10,69, 78,67,79,68,73,78,71,32,57,51,51,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 53,48,10,56,56,10,65,56,10,69,56,10,65,56,10,65, 56,10,70,56,10,56,56,10,53,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,55,53,10,69,78,67,79,68, 73,78,71,32,57,51,51,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,53,48,10,56, 56,10,65,56,10,68,56,10,57,56,10,65,56,10,70,56, 10,56,56,10,53,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,55,54,10,69,78,67,79,68,73,78,71,32, 57,51,51,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,53,48,10,56,56,10,65,56, 10,68,56,10,65,56,10,57,56,10,69,56,10,56,56,10, 53,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 55,55,10,69,78,67,79,68,73,78,71,32,57,51,51,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,53,48,10,56,56,10,67,56,10,67,56,10, 69,56,10,70,56,10,65,56,10,56,56,10,53,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,55,56,10,69, 78,67,79,68,73,78,71,32,57,51,51,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 53,48,10,56,56,10,70,56,10,67,56,10,69,56,10,57, 56,10,69,56,10,56,56,10,53,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,55,57,10,69,78,67,79,68, 73,78,71,32,57,51,51,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,53,48,10,56, 56,10,66,56,10,67,56,10,69,56,10,68,56,10,65,56, 10,56,56,10,53,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,55,65,10,69,78,67,79,68,73,78,71,32, 57,51,51,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,53,48,10,56,56,10,70,56, 10,57,56,10,65,56,10,65,56,10,65,56,10,56,56,10, 53,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 55,66,10,69,78,67,79,68,73,78,71,32,57,51,51,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,53,48,10,56,56,10,65,56,10,68,56,10, 65,56,10,68,56,10,65,56,10,56,56,10,53,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,55,67,10,69, 78,67,79,68,73,78,71,32,57,51,52,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 53,48,10,56,56,10,65,56,10,68,56,10,66,56,10,57, 56,10,69,56,10,56,56,10,53,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,55,68,10,69,78,67,79,68, 73,78,71,32,57,51,52,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,52,56,10,56, 52,10,68,52,10,69,67,10,69,67,10,69,67,10,68,52, 10,56,52,10,52,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,55,69,10,69,78,67,79,68,73,78,71,32, 57,51,52,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,52,56,10,56,52,10,68,52, 10,68,52,10,68,52,10,68,52,10,68,52,10,56,52,10, 52,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 55,70,10,69,78,67,79,68,73,78,71,32,57,51,52,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,52,56,10,56,52,10,68,52,10,67,67,10, 67,67,10,68,52,10,68,67,10,56,52,10,52,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,56,48,10,69, 78,67,79,68,73,78,71,32,57,51,52,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 52,56,10,56,52,10,68,52,10,67,67,10,68,52,10,67, 67,10,68,52,10,56,52,10,52,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,56,49,10,69,78,67,79,68, 73,78,71,32,57,51,52,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,52,56,10,56, 52,10,68,52,10,68,52,10,68,67,10,68,67,10,67,67, 10,56,52,10,52,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,56,50,10,69,78,67,79,68,73,78,71,32, 57,51,52,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,52,56,10,56,52,10,68,67, 10,68,52,10,68,67,10,67,67,10,68,67,10,56,52,10, 52,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 56,51,10,69,78,67,79,68,73,78,71,32,57,51,52,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,52,56,10,56,52,10,68,52,10,68,52,10, 68,67,10,68,52,10,67,67,10,56,52,10,52,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,56,52,10,69, 78,67,79,68,73,78,71,32,57,51,52,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 52,56,10,56,52,10,68,67,10,67,67,10,68,52,10,68, 52,10,68,52,10,56,52,10,52,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,56,53,10,69,78,67,79,68, 73,78,71,32,57,51,52,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,52,56,10,56, 52,10,67,67,10,68,52,10,67,67,10,68,52,10,67,67, 10,56,52,10,52,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,56,54,10,69,78,67,79,68,73,78,71,32, 57,51,53,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,52,56,10,56,52,10,67,67, 10,68,52,10,67,67,10,67,52,10,68,67,10,56,52,10, 52,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 69,65,10,69,78,67,79,68,73,78,71,32,57,52,53,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,55,48,10,56,56,10,65,56,10,68,56,10, 68,56,10,68,56,10,65,56,10,56,56,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,83,70,49,48,48,48,48,48,10, 69,78,67,79,68,73,78,71,32,57,52,55,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,67,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,48,49,10,69,78,67,79, 68,73,78,71,32,57,52,55,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,70,67,10,70,67,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 83,70,49,49,48,48,48,48,10,69,78,67,79,68,73,78, 71,32,57,52,55,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,48,51,10,69,78,67,79,68,73,78,71,32,57,52, 55,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 51,48,10,51,48,10,51,48,10,51,48,10,51,48,10,51, 48,10,51,48,10,51,48,10,51,48,10,51,48,10,51,48, 10,51,48,10,51,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,48,52, 10,69,78,67,79,68,73,78,71,32,57,52,55,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,65,56, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,48,53,10,69,78,67, 79,68,73,78,71,32,57,52,55,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,65,56,10,65,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,48,54,10,69,78,67,79,68,73,78, 71,32,57,52,55,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,50,48,10,50,48,10,48,48,10, 48,48,10,50,48,10,50,48,10,48,48,10,48,48,10,50, 48,10,50,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,48,55,10,69,78,67,79,68,73,78,71,32,57,52, 55,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,51,48,10,51,48,10,48,48,10,48,48,10,51, 48,10,51,48,10,48,48,10,48,48,10,51,48,10,51,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,48,56, 10,69,78,67,79,68,73,78,71,32,57,52,56,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,65,56, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,48,57,10,69,78,67, 79,68,73,78,71,32,57,52,56,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,65,56,10,65,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,48,65,10,69,78,67,79,68,73,78, 71,32,57,52,56,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,50,48,10,50,48,10,48,48,10,50,48,10, 50,48,10,48,48,10,50,48,10,50,48,10,48,48,10,50, 48,10,50,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,48,66,10,69,78,67,79,68,73,78,71,32,57,52, 56,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 51,48,10,51,48,10,48,48,10,51,48,10,51,48,10,48, 48,10,51,48,10,51,48,10,48,48,10,51,48,10,51,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,83,70,48,49,48,48,48, 48,10,69,78,67,79,68,73,78,71,32,57,52,56,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,51, 67,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,48,68,10,69,78, 67,79,68,73,78,71,32,57,52,56,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,51,67,10,51,67, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,48,69,10,69,78,67,79,68,73, 78,71,32,57,52,56,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,51,67,10,51,48,10,51,48,10, 51,48,10,51,48,10,51,48,10,51,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,48,70,10,69,78,67,79,68,73,78,71,32,57, 52,56,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,51,67,10,51,67,10,51,48,10,51,48,10,51, 48,10,51,48,10,51,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,83,70,48,51,48,48, 48,48,10,69,78,67,79,68,73,78,71,32,57,52,56,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,49,49,10,69, 78,67,79,68,73,78,71,32,57,52,56,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,48,10,69, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,49,50,10,69,78,67,79,68, 73,78,71,32,57,52,57,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,48,10,51,48,10,51,48, 10,51,48,10,51,48,10,51,48,10,51,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,49,51,10,69,78,67,79,68,73,78,71,32, 57,52,57,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,48,10,70,48,10,51,48,10,51,48,10, 51,48,10,51,48,10,51,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,83,70,48,50,48, 48,48,48,10,69,78,67,79,68,73,78,71,32,57,52,57, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,51,67,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,49,53,10, 69,78,67,79,68,73,78,71,32,57,52,57,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,51,67,10, 51,67,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,49,54,10,69,78,67,79, 68,73,78,71,32,57,52,57,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,51,48,10,51,48,10,51,48,10, 51,48,10,51,48,10,51,48,10,51,67,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,53,49,55,10,69,78,67,79,68,73,78,71, 32,57,52,57,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,51,48,10,51,48,10,51,48,10,51,48,10,51, 48,10,51,48,10,51,67,10,51,67,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,83,70,48,52, 48,48,48,48,10,69,78,67,79,68,73,78,71,32,57,52, 57,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,69,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,49,57, 10,69,78,67,79,68,73,78,71,32,57,52,57,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,69,48, 10,69,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,49,65,10,69,78,67, 79,68,73,78,71,32,57,52,57,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,51,48,10,51,48,10,51,48, 10,51,48,10,51,48,10,51,48,10,70,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,49,66,10,69,78,67,79,68,73,78, 71,32,57,52,57,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,51,48,10,51,48,10,51,48,10,51,48,10, 51,48,10,51,48,10,70,48,10,70,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,83,70,48, 56,48,48,48,48,10,69,78,67,79,68,73,78,71,32,57, 53,48,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,51,67,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,49, 68,10,69,78,67,79,68,73,78,71,32,57,53,48,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,51, 67,10,51,67,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,49,69,10,69,78, 67,79,68,73,78,71,32,57,53,48,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,51,48,10,51,48,10,51, 48,10,51,48,10,51,48,10,51,48,10,51,67,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,49,70,10,69,78,67,79,68,73, 78,71,32,57,53,48,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,51,67,10,51,48,10,51,48,10, 51,48,10,51,48,10,51,48,10,51,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,50,48,10,69,78,67,79,68,73,78,71,32,57, 53,48,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,51,48,10,51,48,10,51,48,10,51,48,10,51,48,10, 51,48,10,51,67,10,51,48,10,51,48,10,51,48,10,51, 48,10,51,48,10,51,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,50, 49,10,69,78,67,79,68,73,78,71,32,57,53,48,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,51,48,10, 51,48,10,51,48,10,51,48,10,51,48,10,51,48,10,51, 67,10,51,67,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,50,50,10,69,78, 67,79,68,73,78,71,32,57,53,48,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,51,67,10,51,67, 10,51,48,10,51,48,10,51,48,10,51,48,10,51,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,50,51,10,69,78,67,79,68,73, 78,71,32,57,53,48,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,51,48,10,51,48,10,51,48,10,51,48, 10,51,48,10,51,48,10,51,67,10,51,67,10,51,48,10, 51,48,10,51,48,10,51,48,10,51,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,83,70, 48,57,48,48,48,48,10,69,78,67,79,68,73,78,71,32, 57,53,48,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,69,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 50,53,10,69,78,67,79,68,73,78,71,32,57,53,48,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 69,48,10,69,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,50,54,10,69, 78,67,79,68,73,78,71,32,57,53,49,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,51,48,10,51,48,10, 51,48,10,51,48,10,51,48,10,51,48,10,70,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,50,55,10,69,78,67,79,68, 73,78,71,32,57,53,49,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,70,48,10,51,48,10,51,48, 10,51,48,10,51,48,10,51,48,10,51,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,50,56,10,69,78,67,79,68,73,78,71,32, 57,53,49,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,51,48,10,51,48,10,51,48,10,51,48,10,51,48, 10,51,48,10,70,48,10,51,48,10,51,48,10,51,48,10, 51,48,10,51,48,10,51,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 50,57,10,69,78,67,79,68,73,78,71,32,57,53,49,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,51,48, 10,51,48,10,51,48,10,51,48,10,51,48,10,51,48,10, 70,48,10,70,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,50,65,10,69, 78,67,79,68,73,78,71,32,57,53,49,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,70,48,10,70, 48,10,51,48,10,51,48,10,51,48,10,51,48,10,51,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,50,66,10,69,78,67,79,68, 73,78,71,32,57,53,49,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,51,48,10,51,48,10,51,48,10,51, 48,10,51,48,10,51,48,10,70,48,10,70,48,10,51,48, 10,51,48,10,51,48,10,51,48,10,51,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,83, 70,48,54,48,48,48,48,10,69,78,67,79,68,73,78,71, 32,57,53,49,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,70,67,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,50,68,10,69,78,67,79,68,73,78,71,32,57,53,49, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,70,67,10,69,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,50,69,10, 69,78,67,79,68,73,78,71,32,57,53,49,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,67,10, 51,67,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,50,70,10,69,78,67,79, 68,73,78,71,32,57,53,49,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,70,67,10,70,67,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,53,51,48,10,69,78,67,79,68,73,78,71, 32,57,53,50,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,70,67,10,51,48,10,51,48,10,51,48, 10,51,48,10,51,48,10,51,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,51,49,10,69,78,67,79,68,73,78,71,32,57,53,50, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,70,67,10,70,48,10,51,48,10,51,48,10,51,48,10, 51,48,10,51,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,51,50,10, 69,78,67,79,68,73,78,71,32,57,53,50,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,67,10, 51,67,10,51,48,10,51,48,10,51,48,10,51,48,10,51, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,51,51,10,69,78,67,79, 68,73,78,71,32,57,53,50,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,70,67,10,70,67,10,51, 48,10,51,48,10,51,48,10,51,48,10,51,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 83,70,48,55,48,48,48,48,10,69,78,67,79,68,73,78, 71,32,57,53,50,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,70,67,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,51,53,10,69,78,67,79,68,73,78,71,32,57,53, 50,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,70,67,10,69,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,51,54, 10,69,78,67,79,68,73,78,71,32,57,53,50,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,70,67, 10,51,67,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,51,55,10,69,78,67, 79,68,73,78,71,32,57,53,50,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,70,67,10,70,67,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,51,56,10,69,78,67,79,68,73,78, 71,32,57,53,50,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,51,48,10,51,48,10,51,48,10,51,48,10, 51,48,10,51,48,10,70,67,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,51,57,10,69,78,67,79,68,73,78,71,32,57,53, 50,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 51,48,10,51,48,10,51,48,10,51,48,10,51,48,10,51, 48,10,70,67,10,70,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,51,65, 10,69,78,67,79,68,73,78,71,32,57,53,51,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,51,48,10,51, 48,10,51,48,10,51,48,10,51,48,10,51,48,10,70,67, 10,51,67,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,51,66,10,69,78,67, 79,68,73,78,71,32,57,53,51,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,51,48,10,51,48,10,51,48, 10,51,48,10,51,48,10,51,48,10,70,67,10,70,67,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,83,70,48,53,48,48,48,48,10,69,78,67,79,68,73, 78,71,32,57,53,51,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,70,67,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,51,68,10,69,78,67,79,68,73,78,71,32,57, 53,51,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,70,67,10,69,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,51, 69,10,69,78,67,79,68,73,78,71,32,57,53,51,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,70, 67,10,51,67,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,51,70,10,69,78, 67,79,68,73,78,71,32,57,53,51,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,70,67,10,70,67, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,52,48,10,69,78,67,79,68,73, 78,71,32,57,53,51,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,51,48,10,51,48,10,51,48,10,51,48, 10,51,48,10,51,48,10,70,67,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,52,49,10,69,78,67,79,68,73,78,71,32,57, 53,51,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,70,67,10,51,48,10,51,48,10,51,48,10,51, 48,10,51,48,10,51,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,52, 50,10,69,78,67,79,68,73,78,71,32,57,53,51,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,51,48,10, 51,48,10,51,48,10,51,48,10,51,48,10,51,48,10,70, 67,10,51,48,10,51,48,10,51,48,10,51,48,10,51,48, 10,51,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,52,51,10,69,78, 67,79,68,73,78,71,32,57,53,51,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,51,48,10,51,48,10,51, 48,10,51,48,10,51,48,10,51,48,10,70,67,10,70,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,52,52,10,69,78,67,79,68,73, 78,71,32,57,53,52,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,51,48,10,51,48,10,51,48,10,51,48, 10,51,48,10,51,48,10,70,67,10,51,67,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,52,53,10,69,78,67,79,68,73,78,71,32,57, 53,52,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,70,67,10,70,48,10,51,48,10,51,48,10,51, 48,10,51,48,10,51,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,52, 54,10,69,78,67,79,68,73,78,71,32,57,53,52,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,70, 67,10,51,67,10,51,48,10,51,48,10,51,48,10,51,48, 10,51,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,52,55,10,69,78, 67,79,68,73,78,71,32,57,53,52,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,51,48,10,51,48,10,51, 48,10,51,48,10,51,48,10,51,48,10,70,67,10,70,67, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,52,56,10,69,78,67,79,68,73, 78,71,32,57,53,52,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,70,67,10,70,67,10,51,48,10, 51,48,10,51,48,10,51,48,10,51,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,52,57,10,69,78,67,79,68,73,78,71,32,57, 53,52,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,51,48,10,51,48,10,51,48,10,51,48,10,51,48,10, 51,48,10,70,67,10,70,48,10,51,48,10,51,48,10,51, 48,10,51,48,10,51,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,52, 65,10,69,78,67,79,68,73,78,71,32,57,53,52,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,51,48,10, 51,48,10,51,48,10,51,48,10,51,48,10,51,48,10,70, 67,10,51,67,10,51,48,10,51,48,10,51,48,10,51,48, 10,51,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,52,66,10,69,78, 67,79,68,73,78,71,32,57,53,52,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,51,48,10,51,48,10,51, 48,10,51,48,10,51,48,10,51,48,10,70,67,10,70,67, 10,51,48,10,51,48,10,51,48,10,51,48,10,51,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,52,67,10,69,78,67,79,68,73, 78,71,32,57,53,52,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,68,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,52,68,10,69,78,67,79,68,73,78,71,32,57, 53,52,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,68,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,52, 69,10,69,78,67,79,68,73,78,71,32,57,53,53,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,50,48,10, 50,48,10,50,48,10,50,48,10,48,48,10,48,48,10,48, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,52,70,10,69,78, 67,79,68,73,78,71,32,57,53,53,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,51,48,10,51,48,10,51, 48,10,51,48,10,48,48,10,48,48,10,48,48,10,51,48, 10,51,48,10,51,48,10,51,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,83,70,52,51,48,48,48,48,10,69,78,67,79,68, 73,78,71,32,57,53,53,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,70,67,10,48,48,10,70,67,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,83, 70,50,52,48,48,48,48,10,69,78,67,79,68,73,78,71, 32,57,53,53,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,53,48,10,53,48,10,53,48,10,53,48,10,53, 48,10,53,48,10,53,48,10,53,48,10,53,48,10,53,48, 10,53,48,10,53,48,10,53,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,83,70,53,49, 48,48,48,48,10,69,78,67,79,68,73,78,71,32,57,53, 53,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,51, 67,10,50,48,10,51,67,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,83,70,53,50,48,48,48, 48,10,69,78,67,79,68,73,78,71,32,57,53,53,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,55, 67,10,53,48,10,53,48,10,53,48,10,53,48,10,53,48, 10,53,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,83,70,51,57,48,48,48,48,10,69, 78,67,79,68,73,78,71,32,57,53,53,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,67,10,52,48,10,53, 67,10,53,48,10,53,48,10,53,48,10,53,48,10,53,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,83,70,50,50,48,48,48,48,10,69,78,67,79, 68,73,78,71,32,57,53,53,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,48,10,50,48,10,69,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 83,70,50,49,48,48,48,48,10,69,78,67,79,68,73,78, 71,32,57,53,53,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,70,48,10,53,48,10,53,48,10,53, 48,10,53,48,10,53,48,10,53,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,83,70,50, 53,48,48,48,48,10,69,78,67,79,68,73,78,71,32,57, 53,53,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,48,10,49,48,10,68,48,10,53,48,10,53,48,10,53, 48,10,53,48,10,53,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,83,70,53,48,48,48, 48,48,10,69,78,67,79,68,73,78,71,32,57,53,54,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,51,67,10, 50,48,10,51,67,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,83,70,52,57,48,48,48,48,10, 69,78,67,79,68,73,78,71,32,57,53,54,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,53,48,10,53,48, 10,53,48,10,53,48,10,53,48,10,53,48,10,55,67,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,83,70,51,56,48,48,48,48,10,69,78,67, 79,68,73,78,71,32,57,53,54,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,53,48,10,53,48,10,53,48, 10,53,48,10,53,48,10,53,67,10,52,48,10,55,67,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,83,70,50,56,48,48,48,48,10,69,78,67,79,68,73, 78,71,32,57,53,54,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,69,48,10,50,48,10,69,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,83,70, 50,55,48,48,48,48,10,69,78,67,79,68,73,78,71,32, 57,53,54,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,53,48,10,53,48,10,53,48,10,53,48,10,53,48, 10,53,48,10,70,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,83,70,50,54,48, 48,48,48,10,69,78,67,79,68,73,78,71,32,57,53,54, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,53, 48,10,53,48,10,53,48,10,53,48,10,53,48,10,68,48, 10,49,48,10,70,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,83,70,51,54,48,48,48,48, 10,69,78,67,79,68,73,78,71,32,57,53,54,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,51,67,10,50,48, 10,51,67,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,83,70,51,55,48,48,48,48,10,69,78, 67,79,68,73,78,71,32,57,53,54,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,53,48,10,53,48,10,53, 48,10,53,48,10,53,48,10,53,48,10,53,67,10,53,48, 10,53,48,10,53,48,10,53,48,10,53,48,10,53,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,83,70,52,50,48,48,48,48,10,69,78,67,79,68, 73,78,71,32,57,53,54,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,53,48,10,53,48,10,53,48,10,53, 48,10,53,48,10,53,67,10,52,48,10,53,67,10,53,48, 10,53,48,10,53,48,10,53,48,10,53,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,83, 70,49,57,48,48,48,48,10,69,78,67,79,68,73,78,71, 32,57,53,54,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,69,48,10,50,48,10,69,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,83,70,50,48, 48,48,48,48,10,69,78,67,79,68,73,78,71,32,57,53, 55,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 53,48,10,53,48,10,53,48,10,53,48,10,53,48,10,53, 48,10,68,48,10,53,48,10,53,48,10,53,48,10,53,48, 10,53,48,10,53,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,83,70,50,51,48,48,48, 48,10,69,78,67,79,68,73,78,71,32,57,53,55,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,53,48,10, 53,48,10,53,48,10,53,48,10,53,48,10,68,48,10,49, 48,10,68,48,10,53,48,10,53,48,10,53,48,10,53,48, 10,53,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,83,70,52,55,48,48,48,48,10,69, 78,67,79,68,73,78,71,32,57,53,55,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,70,67,10,48,48,10,70, 67,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,83,70,52,56,48,48,48,48,10,69,78,67,79, 68,73,78,71,32,57,53,55,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,70,67,10,53,48,10,53, 48,10,53,48,10,53,48,10,53,48,10,53,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 83,70,52,49,48,48,48,48,10,69,78,67,79,68,73,78, 71,32,57,53,55,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,70,67,10,48,48,10,68,67,10,53,48,10,53, 48,10,53,48,10,53,48,10,53,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,83,70,52, 53,48,48,48,48,10,69,78,67,79,68,73,78,71,32,57, 53,55,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 70,67,10,48,48,10,70,67,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,83,70,52,54,48,48, 48,48,10,69,78,67,79,68,73,78,71,32,57,53,55,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,53,48, 10,53,48,10,53,48,10,53,48,10,53,48,10,53,48,10, 70,67,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,83,70,52,48,48,48,48,48,10, 69,78,67,79,68,73,78,71,32,57,53,55,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,53,48,10,53,48, 10,53,48,10,53,48,10,53,48,10,68,67,10,48,48,10, 70,67,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,83,70,53,52,48,48,48,48,10,69,78,67, 79,68,73,78,71,32,57,53,55,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,70,67,10,50,48,10,70,67,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,83,70,53,51,48,48,48,48,10,69,78,67,79,68,73, 78,71,32,57,53,55,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,53,48,10,53,48,10,53,48,10,53,48, 10,53,48,10,53,48,10,70,67,10,53,48,10,53,48,10, 53,48,10,53,48,10,53,48,10,53,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,83,70, 52,52,48,48,48,48,10,69,78,67,79,68,73,78,71,32, 57,53,56,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,53,48,10,53,48,10,53,48,10,53,48,10,53,48, 10,68,67,10,48,48,10,68,67,10,53,48,10,53,48,10, 53,48,10,53,48,10,53,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 54,68,10,69,78,67,79,68,73,78,71,32,57,53,56,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,67,10,49,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,54,69,10,69, 78,67,79,68,73,78,71,32,57,53,56,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,48,10,52, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,54,70,10,69,78,67,79,68, 73,78,71,32,57,53,56,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,52,48,10,56,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,55,48,10,69,78,67,79,68,73,78,71,32, 57,53,56,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,49,48,10,48,67,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 55,49,10,69,78,67,79,68,73,78,71,32,57,53,56,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,52, 10,48,52,10,48,56,10,48,56,10,49,48,10,49,48,10, 50,48,10,50,48,10,50,48,10,52,48,10,52,48,10,56, 48,10,56,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,55,50,10,69, 78,67,79,68,73,78,71,32,57,53,56,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,56,48,10,56,48,10, 52,48,10,52,48,10,50,48,10,50,48,10,49,48,10,49, 48,10,49,48,10,48,56,10,48,56,10,48,52,10,48,52, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,55,51,10,69,78,67,79,68, 73,78,71,32,57,53,56,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,56,52,10,56,52,10,52,56,10,52, 56,10,51,48,10,51,48,10,51,48,10,51,48,10,51,48, 10,52,56,10,52,56,10,56,52,10,56,52,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,55,52,10,69,78,67,79,68,73,78,71,32, 57,53,56,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 55,53,10,69,78,67,79,68,73,78,71,32,57,53,56,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,55,54,10,69, 78,67,79,68,73,78,71,32,57,53,57,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,51,67,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,55,55,10,69,78,67,79,68, 73,78,71,32,57,53,57,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,55,56,10,69,78,67,79,68,73,78,71,32, 57,53,57,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,48,10,69,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 55,57,10,69,78,67,79,68,73,78,71,32,57,53,57,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,51,48, 10,51,48,10,51,48,10,51,48,10,51,48,10,51,48,10, 51,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,55,65,10,69, 78,67,79,68,73,78,71,32,57,53,57,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,51,67,10,51, 67,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,55,66,10,69,78,67,79,68, 73,78,71,32,57,53,57,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,51,48,10,51,48,10,51,48, 10,51,48,10,51,48,10,51,48,10,51,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,55,67,10,69,78,67,79,68,73,78,71,32, 57,53,57,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,67,10,49,67,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 55,68,10,69,78,67,79,68,73,78,71,32,57,53,57,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 51,48,10,51,48,10,51,48,10,51,48,10,51,48,10,51, 48,10,51,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,55,69,10,69, 78,67,79,68,73,78,71,32,57,53,57,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,70,67,10,69, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,55,70,10,69,78,67,79,68, 73,78,71,32,57,53,57,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,51,48,10,51,48,10,51,48,10,51, 48,10,51,48,10,51,48,10,51,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 112,98,108,111,99,107,10,69,78,67,79,68,73,78,71,32, 57,54,48,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,70,67,10,70,67,10,70,67,10,70,67,10,70,67, 10,70,67,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 56,49,10,69,78,67,79,68,73,78,71,32,57,54,48,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,70, 67,10,70,67,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,56,50,10,69, 78,67,79,68,73,78,71,32,57,54,48,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,67,10,70,67,10,70,67, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,56,51,10,69,78,67,79,68, 73,78,71,32,57,54,48,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,70,67, 10,70,67,10,70,67,10,70,67,10,70,67,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,100, 110,98,108,111,99,107,10,69,78,67,79,68,73,78,71,32, 57,54,48,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,67,10,70,67,10,70,67,10,70,67,10, 70,67,10,70,67,10,70,67,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 56,53,10,69,78,67,79,68,73,78,71,32,57,54,48,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,67,10, 70,67,10,70,67,10,70,67,10,70,67,10,70,67,10,70, 67,10,70,67,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,56,54,10,69, 78,67,79,68,73,78,71,32,57,54,48,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,70,67,10,70,67,10,70,67,10,70,67,10,70, 67,10,70,67,10,70,67,10,70,67,10,70,67,10,70,67, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,56,55,10,69,78,67,79,68, 73,78,71,32,57,54,48,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,70,67,10,70, 67,10,70,67,10,70,67,10,70,67,10,70,67,10,70,67, 10,70,67,10,70,67,10,70,67,10,70,67,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,98, 108,111,99,107,10,69,78,67,79,68,73,78,71,32,57,54, 48,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 70,67,10,70,67,10,70,67,10,70,67,10,70,67,10,70, 67,10,70,67,10,70,67,10,70,67,10,70,67,10,70,67, 10,70,67,10,70,67,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,56,57, 10,69,78,67,79,68,73,78,71,32,57,54,48,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,70,56,10,70, 56,10,70,56,10,70,56,10,70,56,10,70,56,10,70,56, 10,70,56,10,70,56,10,70,56,10,70,56,10,70,56,10, 70,56,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,56,65,10,69,78,67, 79,68,73,78,71,32,57,54,49,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,70,48,10,70,48,10,70,48, 10,70,48,10,70,48,10,70,48,10,70,48,10,70,48,10, 70,48,10,70,48,10,70,48,10,70,48,10,70,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,56,66,10,69,78,67,79,68,73,78, 71,32,57,54,49,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,70,48,10,70,48,10,70,48,10,70,48,10, 70,48,10,70,48,10,70,48,10,70,48,10,70,48,10,70, 48,10,70,48,10,70,48,10,70,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,108,102,98, 108,111,99,107,10,69,78,67,79,68,73,78,71,32,57,54, 49,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 69,48,10,69,48,10,69,48,10,69,48,10,69,48,10,69, 48,10,69,48,10,69,48,10,69,48,10,69,48,10,69,48, 10,69,48,10,69,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,56,68, 10,69,78,67,79,68,73,78,71,32,57,54,49,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,67,48,10,67, 48,10,67,48,10,67,48,10,67,48,10,67,48,10,67,48, 10,67,48,10,67,48,10,67,48,10,67,48,10,67,48,10, 67,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,56,69,10,69,78,67, 79,68,73,78,71,32,57,54,49,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,67,48,10,67,48,10,67,48, 10,67,48,10,67,48,10,67,48,10,67,48,10,67,48,10, 67,48,10,67,48,10,67,48,10,67,48,10,67,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,56,70,10,69,78,67,79,68,73,78, 71,32,57,54,49,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,56,48,10,56,48,10,56,48,10,56,48,10, 56,48,10,56,48,10,56,48,10,56,48,10,56,48,10,56, 48,10,56,48,10,56,48,10,56,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,114,116,98, 108,111,99,107,10,69,78,67,79,68,73,78,71,32,57,54, 49,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 49,67,10,49,67,10,49,67,10,49,67,10,49,67,10,49, 67,10,49,67,10,49,67,10,49,67,10,49,67,10,49,67, 10,49,67,10,49,67,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,108,116,115,104,97,100,101, 10,69,78,67,79,68,73,78,71,32,57,54,49,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,65,56,10,48, 48,10,53,52,10,48,48,10,65,56,10,48,48,10,53,52, 10,48,48,10,65,56,10,48,48,10,53,52,10,48,48,10, 65,56,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,115,104,97,100,101,10,69,78,67,79,68, 73,78,71,32,57,54,49,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,65,56,10,53,52,10,65,56,10,53, 52,10,65,56,10,53,52,10,65,56,10,53,52,10,65,56, 10,53,52,10,65,56,10,53,52,10,65,56,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,100, 107,115,104,97,100,101,10,69,78,67,79,68,73,78,71,32, 57,54,49,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,53,52,10,70,67,10,65,56,10,70,67,10,53,52, 10,70,67,10,65,56,10,70,67,10,53,52,10,70,67,10, 65,56,10,70,67,10,53,52,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 57,52,10,69,78,67,79,68,73,78,71,32,57,54,50,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,70,67, 10,70,67,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,57,53,10,69, 78,67,79,68,73,78,71,32,57,54,50,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,52,10,48,52,10, 48,52,10,48,52,10,48,52,10,48,52,10,48,52,10,48, 52,10,48,52,10,48,52,10,48,52,10,48,52,10,48,52, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,57,54,10,69,78,67,79,68, 73,78,71,32,57,54,50,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,48,10,69,48,10,69,48, 10,69,48,10,69,48,10,69,48,10,69,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,57,55,10,69,78,67,79,68,73,78,71,32, 57,54,50,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,49,67,10,49,67,10,49,67,10,49,67,10, 49,67,10,49,67,10,49,67,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 57,56,10,69,78,67,79,68,73,78,71,32,57,54,50,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,69,48, 10,69,48,10,69,48,10,69,48,10,69,48,10,69,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,57,57,10,69, 78,67,79,68,73,78,71,32,57,54,50,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,69,48,10,69,48,10, 69,48,10,69,48,10,69,48,10,69,48,10,70,67,10,70, 67,10,70,67,10,70,67,10,70,67,10,70,67,10,70,67, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,57,65,10,69,78,67,79,68, 73,78,71,32,57,54,50,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,69,48,10,69,48,10,69,48,10,69, 48,10,69,48,10,69,48,10,49,67,10,49,67,10,49,67, 10,49,67,10,49,67,10,49,67,10,49,67,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,57,66,10,69,78,67,79,68,73,78,71,32, 57,54,50,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,70,67,10,70,67,10,70,67,10,70,67,10,70,67, 10,70,67,10,69,48,10,69,48,10,69,48,10,69,48,10, 69,48,10,69,48,10,69,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 57,67,10,69,78,67,79,68,73,78,71,32,57,54,50,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,70,67, 10,70,67,10,70,67,10,70,67,10,70,67,10,70,67,10, 49,67,10,49,67,10,49,67,10,49,67,10,49,67,10,49, 67,10,49,67,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,57,68,10,69, 78,67,79,68,73,78,71,32,57,54,50,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,49,67,10,49,67,10, 49,67,10,49,67,10,49,67,10,49,67,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,57,69,10,69,78,67,79,68, 73,78,71,32,57,54,51,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,49,67,10,49,67,10,49,67,10,49, 67,10,49,67,10,49,67,10,69,48,10,69,48,10,69,48, 10,69,48,10,69,48,10,69,48,10,69,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,57,70,10,69,78,67,79,68,73,78,71,32, 57,54,51,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,49,67,10,49,67,10,49,67,10,49,67,10,49,67, 10,49,67,10,70,67,10,70,67,10,70,67,10,70,67,10, 70,67,10,70,67,10,70,67,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,102,105,108,108,101, 100,98,111,120,10,69,78,67,79,68,73,78,71,32,57,54, 51,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,70, 56,10,70,56,10,70,56,10,70,56,10,70,56,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,72,50,50,48,55,51,10, 69,78,67,79,68,73,78,71,32,57,54,51,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,70,56,10,56,56,10, 56,56,10,56,56,10,70,56,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,65,50,10,69,78,67,79, 68,73,78,71,32,57,54,51,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,55,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,53,65,51,10,69,78,67,79,68,73,78,71, 32,57,54,51,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,70,56,10,56,56,10,65,56,10,56,56,10,70,56, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,65,52,10,69,78,67,79,68,73,78,71,32,57,54,51, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,70,56,10,56,56,10,70,56,10,56,56,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,65,53,10, 69,78,67,79,68,73,78,71,32,57,54,51,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 65,56,10,65,56,10,65,56,10,70,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,65,54,10,69,78,67,79, 68,73,78,71,32,57,54,51,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,70,56,10,65,56,10,70, 56,10,65,56,10,70,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,53,65,55,10,69,78,67,79,68,73,78,71, 32,57,54,51,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,70,56,10,67,56,10,65,56,10,57,56, 10,70,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,65,56,10,69,78,67,79,68,73,78,71,32,57,54,52, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,70,56,10,57,56,10,65,56,10,67,56,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,65,57,10, 69,78,67,79,68,73,78,71,32,57,54,52,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 68,56,10,65,56,10,68,56,10,70,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,72,49,56,53,52,51,10,69,78,67,79,68, 73,78,71,32,57,54,52,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,55,48,10,55,48,10,55,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,72, 49,56,53,53,49,10,69,78,67,79,68,73,78,71,32,57, 54,52,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,48,10,53,48,10,55,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,102,105,108,108,101,100, 114,101,99,116,10,69,78,67,79,68,73,78,71,32,57,54, 52,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,70,67,10,70, 67,10,70,67,10,70,67,10,70,67,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,65,68, 10,69,78,67,79,68,73,78,71,32,57,54,52,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,67,10,56,52,10,56,52, 10,56,52,10,70,67,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,65,69,10,69,78,67, 79,68,73,78,71,32,57,54,52,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,55,56,10,55,56, 10,55,56,10,55,56,10,55,56,10,55,56,10,55,56,10, 55,56,10,55,56,10,55,56,10,55,56,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,65,70,10,69,78,67,79,68,73,78, 71,32,57,54,52,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,55,56,10,52,56,10,52,56,10, 52,56,10,52,56,10,52,56,10,52,56,10,52,56,10,52, 56,10,52,56,10,55,56,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,66,48,10,69,78,67,79,68,73,78,71,32,57,54, 52,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,51, 67,10,55,56,10,70,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,66,49, 10,69,78,67,79,68,73,78,71,32,57,54,52,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,51,67,10,52,56, 10,70,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,116,114,105,97,103,117,112,10,69,78,67, 79,68,73,78,71,32,57,54,53,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,50,48, 10,50,48,10,50,48,10,55,48,10,55,48,10,55,48,10, 70,56,10,70,56,10,70,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,66,51,10,69,78,67,79,68,73,78, 71,32,57,54,53,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,50,48,10,50,48,10, 50,48,10,53,48,10,53,48,10,53,48,10,56,56,10,56, 56,10,70,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,66,52,10,69,78,67,79,68,73,78,71,32,57,54, 53,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,50,48,10,50, 48,10,55,48,10,55,48,10,70,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,66,53, 10,69,78,67,79,68,73,78,71,32,57,54,53,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,50,48,10,50,48,10,53,48, 10,53,48,10,70,56,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,66,54,10,69,78,67, 79,68,73,78,71,32,57,54,53,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,56,48, 10,67,48,10,69,48,10,70,48,10,70,56,10,70,48,10, 69,48,10,67,48,10,56,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,66,55,10,69,78,67,79,68,73,78, 71,32,57,54,53,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,56,48,10,67,48,10, 65,48,10,57,48,10,56,56,10,57,48,10,65,48,10,67, 48,10,56,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,66,56,10,69,78,67,79,68,73,78,71,32,57,54, 53,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,52,48,10,54, 48,10,55,48,10,54,48,10,52,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,66,57, 10,69,78,67,79,68,73,78,71,32,57,54,53,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,52,48,10,54,48,10,53,48, 10,54,48,10,52,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,116,114,105,97,103,114,116,10,69,78,67, 79,68,73,78,71,32,57,54,53,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,67,48,10,70,48,10,70,67,10,70,48,10, 67,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,66,66,10,69,78,67,79,68,73,78, 71,32,57,54,53,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 67,48,10,66,48,10,56,67,10,66,48,10,67,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,116,114,105, 97,103,100,110,10,69,78,67,79,68,73,78,71,32,57,54, 54,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,70,56,10,70,56,10,70,56,10,55, 48,10,55,48,10,55,48,10,50,48,10,50,48,10,50,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,66,68, 10,69,78,67,79,68,73,78,71,32,57,54,54,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,70,56,10,56,56,10,56,56,10,53,48,10,53,48, 10,53,48,10,50,48,10,50,48,10,50,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,66,69,10,69,78,67, 79,68,73,78,71,32,57,54,54,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,70,56,10,55,48,10,55,48,10, 50,48,10,50,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,66,70,10,69,78,67,79,68,73,78, 71,32,57,54,54,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,70,56,10,53,48,10,53,48,10,50,48,10,50, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,67,48,10,69,78,67,79,68,73,78,71,32,57,54, 54,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,56,10,49,56,10,51,56,10,55, 56,10,70,56,10,55,56,10,51,56,10,49,56,10,48,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,67,49, 10,69,78,67,79,68,73,78,71,32,57,54,54,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,56,10,49,56,10,50,56,10,52,56,10,56,56, 10,52,56,10,50,56,10,49,56,10,48,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,67,50,10,69,78,67, 79,68,73,78,71,32,57,54,54,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,49,48,10,51,48,10,55,48,10,51,48,10, 49,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,67,51,10,69,78,67,79,68,73,78, 71,32,57,54,54,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 49,48,10,51,48,10,53,48,10,51,48,10,49,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,116,114,105, 97,103,108,102,10,69,78,67,79,68,73,78,71,32,57,54, 54,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,67,10,51, 67,10,70,67,10,51,67,10,48,67,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,67,53, 10,69,78,67,79,68,73,78,71,32,57,54,54,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,67,10,51,52,10,67,52, 10,51,52,10,48,67,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,67,54,10,69,78,67, 79,68,73,78,71,32,57,54,55,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,50,48,10,55,48,10,70,56,10,55,48,10, 50,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,67,55,10,69,78,67,79,68,73,78, 71,32,57,54,55,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 50,48,10,53,48,10,56,56,10,53,48,10,50,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,67,56,10,69,78,67,79,68,73,78,71,32,57,54, 55,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,50,48,10,53, 48,10,65,56,10,53,48,10,50,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,67,57, 10,69,78,67,79,68,73,78,71,32,57,54,55,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,51,48,10,52,56,10,66,52, 10,66,52,10,52,56,10,51,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,108,111,122,101,110,103,101,10,69,78,67, 79,68,73,78,71,32,57,54,55,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,50,48, 10,50,48,10,53,48,10,53,48,10,56,56,10,53,48,10, 53,48,10,50,48,10,50,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,99,105,114,99,108,101,10,69,78,67,79,68,73,78,71, 32,57,54,55,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,51, 48,10,52,56,10,56,52,10,56,52,10,52,56,10,51,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,67,67,10,69,78,67,79,68,73,78,71,32,57,54,55, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,50,48,10,48,56, 10,56,48,10,48,52,10,52,48,10,49,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,67,68,10, 69,78,67,79,68,73,78,71,32,57,54,55,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,55,48,10, 65,56,10,65,56,10,65,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,67,69,10,69,78,67,79, 68,73,78,71,32,57,54,55,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,55,48,10,56,56,10,65,56,10,68,56,10,65, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 72,49,56,53,51,51,10,69,78,67,79,68,73,78,71,32, 57,54,55,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,51,48, 10,55,56,10,70,67,10,70,67,10,55,56,10,51,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 68,48,10,69,78,67,79,68,73,78,71,32,57,54,56,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,51,48,10,54,56,10, 69,52,10,69,52,10,54,56,10,51,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,68,49,10,69, 78,67,79,68,73,78,71,32,57,54,56,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,51,48,10,53,56,10,57,67,10,57, 67,10,53,56,10,51,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,68,50,10,69,78,67,79,68, 73,78,71,32,57,54,56,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,51,48,10,52,56,10,56,52,10,70,67,10,55,56, 10,51,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,68,51,10,69,78,67,79,68,73,78,71,32, 57,54,56,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,51,48, 10,55,56,10,70,67,10,56,52,10,52,56,10,51,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 68,52,10,69,78,67,79,68,73,78,71,32,57,54,56,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,51,48,10,53,56,10, 57,67,10,56,52,10,52,56,10,51,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,68,53,10,69, 78,67,79,68,73,78,71,32,57,54,56,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,51,48,10,53,56,10,57,67,10,70, 67,10,55,56,10,51,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,68,54,10,69,78,67,79,68, 73,78,71,32,57,54,56,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,52,10,49,67,10,51, 67,10,51,67,10,55,67,10,55,67,10,51,67,10,51,67, 10,49,67,10,48,52,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,68,55,10,69,78,67,79,68,73,78,71,32, 57,54,56,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,56,48,10,69,48,10,70,48,10,70,48, 10,70,56,10,70,56,10,70,48,10,70,48,10,69,48,10, 56,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,105,110,118,98,117, 108,108,101,116,10,69,78,67,79,68,73,78,71,32,57,54, 56,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 70,67,10,70,67,10,70,67,10,70,67,10,70,67,10,67, 67,10,56,52,10,56,52,10,67,67,10,70,67,10,70,67, 10,70,67,10,70,67,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,105,110,118,99,105,114,99, 108,101,10,69,78,67,79,68,73,78,71,32,57,54,56,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,70,67, 10,70,67,10,70,67,10,70,67,10,67,67,10,66,52,10, 55,56,10,55,56,10,66,52,10,67,67,10,70,67,10,70, 67,10,70,67,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,68,65,10,69, 78,67,79,68,73,78,71,32,57,54,57,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,70,67,10,70,67,10, 70,67,10,70,67,10,67,67,10,66,52,10,55,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,68,66,10,69,78,67,79,68, 73,78,71,32,57,54,57,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,55,56,10,66,52, 10,67,67,10,70,67,10,70,67,10,70,67,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,68,67,10,69,78,67,79,68,73,78,71,32, 57,54,57,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,50,48, 10,52,48,10,56,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 68,68,10,69,78,67,79,68,73,78,71,32,57,54,57,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,49,48,10,48,56,10, 48,52,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,68,69,10,69, 78,67,79,68,73,78,71,32,57,54,57,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 52,10,48,56,10,49,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,68,70,10,69,78,67,79,68, 73,78,71,32,57,54,57,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,56,48,10,52,48, 10,50,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,69,48,10,69,78,67,79,68,73,78,71,32, 57,54,57,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,51,48, 10,52,56,10,56,52,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 69,49,10,69,78,67,79,68,73,78,71,32,57,54,57,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,56,52,10,52,56,10,51,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,69,50,10,69, 78,67,79,68,73,78,71,32,57,54,57,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,56,10,49,56,10,51, 56,10,55,56,10,70,56,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,69,51,10,69,78,67,79,68, 73,78,71,32,57,54,57,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,56,48,10,67,48,10,69,48,10,70,48, 10,70,56,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,69,52,10,69,78,67,79,68,73,78,71,32, 57,55,48,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,70,56,10,70,48,10,69,48,10,67,48,10,56,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 69,53,10,69,78,67,79,68,73,78,71,32,57,55,48,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 55,56,10,51,56,10,49,56,10,48,56,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,111,112,101,110,98,117,108,108,101, 116,10,69,78,67,79,68,73,78,71,32,57,55,48,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,69,55,10,69,78, 67,79,68,73,78,71,32,57,55,48,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,56,10,69,56,10,69,56, 10,69,56,10,70,56,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,69,56,10,69,78,67,79,68,73, 78,71,32,57,55,48,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,56,10,66,56,10,66,56,10,66,56,10, 70,56,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,69,57,10,69,78,67,79,68,73,78,71,32,57, 55,48,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,56,10,70,56,10,69,56,10,67,56,10,70,56,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,69, 65,10,69,78,67,79,68,73,78,71,32,57,55,48,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,70,56,10,57, 56,10,66,56,10,70,56,10,70,56,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,69,66,10,69,78, 67,79,68,73,78,71,32,57,55,48,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,56,10,65,56,10,65,56, 10,65,56,10,70,56,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,69,67,10,69,78,67,79,68,73, 78,71,32,57,55,48,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,50,48,10,53,48,10,53,48,10,55,48,10,65,56,10, 56,56,10,70,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,69,68,10,69,78,67,79,68,73,78,71,32,57, 55,48,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,50,48,10, 55,48,10,55,48,10,55,48,10,69,56,10,69,56,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,69, 69,10,69,78,67,79,68,73,78,71,32,57,55,49,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,50,48,10,50,48,10,55,48,10,55, 48,10,55,48,10,66,56,10,66,56,10,70,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,69,70,10,69,78, 67,79,68,73,78,71,32,57,55,49,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,51,48,10,52,56,10,56,52,10,56,52, 10,56,52,10,52,56,10,51,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,70,48,10,69,78,67,79,68,73, 78,71,32,57,55,49,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,56,10,65,56,10,69,56,10,56,56,10, 70,56,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,70,49,10,69,78,67,79,68,73,78,71,32,57, 55,49,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,56,10,56,56,10,69,56,10,65,56,10,70,56,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,70, 50,10,69,78,67,79,68,73,78,71,32,57,55,49,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,70,56,10,56, 56,10,66,56,10,65,56,10,70,56,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,70,51,10,69,78, 67,79,68,73,78,71,32,57,55,49,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,56,10,65,56,10,66,56, 10,56,56,10,70,56,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,70,52,10,69,78,67,79,68,73, 78,71,32,57,55,49,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,48,10,65,56,10,69,56,10,56,56,10, 55,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,70,53,10,69,78,67,79,68,73,78,71,32,57, 55,49,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,48,10,56,56,10,69,56,10,65,56,10,55,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,70, 54,10,69,78,67,79,68,73,78,71,32,57,55,49,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,48,10,56, 56,10,66,56,10,65,56,10,55,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,70,55,10,69,78, 67,79,68,73,78,71,32,57,55,49,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,48,10,65,56,10,66,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,70,56,10,69,78,67,79,68,73, 78,71,32,57,55,50,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,56,10,57,48,10,65,48,10,67,48,10, 56,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,70,57,10,69,78,67,79,68,73,78,71,32,57, 55,50,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,56,10,52,56,10,50,56,10,49,56,10,48,56,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,70, 65,10,69,78,67,79,68,73,78,71,32,57,55,50,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,48,10,67, 48,10,65,48,10,57,48,10,70,56,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,70,66,10,69,78, 67,79,68,73,78,71,32,57,55,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,56,10,52,56,10,52,56, 10,55,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,70,67,10,69,78,67,79,68,73, 78,71,32,57,55,50,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,56,10,55,56,10,55,56,10,55,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,70,68,10,69,78,67,79,68,73,78,71,32,57, 55,50,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,56,10,52,56,10,52,56,10,55,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,70, 69,10,69,78,67,79,68,73,78,71,32,57,55,50,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,56,10,55, 56,10,55,56,10,55,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,70,70,10,69,78, 67,79,68,73,78,71,32,57,55,50,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,56,10,49,56,10,50,56, 10,52,56,10,70,56,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,48,48,10,69,78,67,79,68,73, 78,71,32,57,55,50,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,56,56,10,50,48,10,55,48,10,50,48,10,56,56,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,48,49,10,69,78,67,79,68,73,78,71,32,57, 55,50,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 54,48,10,70,56,10,70,67,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,48, 50,10,69,78,67,79,68,73,78,71,32,57,55,51,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,55,48,10,70,56,10,70,56,10,50, 48,10,50,48,10,50,48,10,50,48,10,52,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,48,51,10,69,78, 67,79,68,73,78,71,32,57,55,51,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,65,48,10,50,48,10,55, 52,10,53,48,10,65,56,10,53,48,10,53,52,10,55,48, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,48,52,10,69,78,67,79,68,73, 78,71,32,57,55,51,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,56,10,52,56,10,53,48, 10,53,52,10,52,52,10,48,56,10,54,48,10,57,48,10, 57,48,10,54,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,48,53,10,69,78,67,79,68,73,78,71,32,57, 55,51,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,50,48,10,50,48,10, 70,56,10,55,48,10,55,48,10,56,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,48, 54,10,69,78,67,79,68,73,78,71,32,57,55,51,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,50,48,10,50,48,10,70,56,10,53, 48,10,55,48,10,56,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,48,55,10,69,78, 67,79,68,73,78,71,32,57,55,51,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 56,10,49,48,10,50,48,10,52,48,10,56,48,10,52,48, 10,50,56,10,49,56,10,51,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,48,56,10,69,78,67,79,68,73, 78,71,32,57,55,51,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,70,56,10,56,56, 10,57,48,10,57,48,10,65,48,10,65,48,10,57,56,10, 57,56,10,66,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,48,57,10,69,78,67,79,68,73,78,71,32,57, 55,51,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,48,10,56,56,10,65,56,10,56,56,10,55,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,48, 65,10,69,78,67,79,68,73,78,71,32,57,55,51,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 56,10,53,48,10,53,48,10,65,56,10,53,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,48,66,10,69,78, 67,79,68,73,78,71,32,57,55,51,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,53,48,10,65,56,10,53,48,10,53,48, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,48,67,10,69,78,67,79,68,73, 78,71,32,57,55,52,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,56,10,55,48,10,57,48,10, 57,48,10,54,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,48,68,10,69,78,67,79,68,73,78,71,32,57, 55,52,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,51,48,10,52,56,10,52,56,10, 51,48,10,50,48,10,54,48,10,57,48,10,57,48,10,54, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,48, 69,10,69,78,67,79,68,73,78,71,32,57,55,52,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,48,10,70,56,10,65, 56,10,55,48,10,70,56,10,70,56,10,70,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,48,70,10,69,78, 67,79,68,73,78,71,32,57,55,52,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,55,48,10,65,56,10,65,56,10,55,48, 10,56,56,10,56,56,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,49,48,10,69,78,67,79,68,73, 78,71,32,57,55,52,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,70,67,10,56,52, 10,56,52,10,56,52,10,56,52,10,56,52,10,56,52,10, 56,52,10,70,67,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,49,49,10,69,78,67,79,68,73,78,71,32,57, 55,52,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,67,10,56,52,10,56,67,10, 56,67,10,57,52,10,57,52,10,68,52,10,65,52,10,70, 67,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,49, 50,10,69,78,67,79,68,73,78,71,32,57,55,52,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,70,67,10,67,67,10,67,67,10,66,52,10,66, 52,10,66,52,10,67,67,10,67,67,10,70,67,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,49,51,10,69,78, 67,79,68,73,78,71,32,57,55,52,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,56,56,10,53,48,10,53,48,10,50,48,10,53,48, 10,53,48,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,49,54,10,69,78,67,79,68,73, 78,71,32,57,55,53,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,53,48, 10,56,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 56,56,10,70,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,49,55,10,69,78,67,79,68,73,78,71,32,57, 55,53,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,55,48,10,70,56,10, 70,56,10,70,56,10,70,56,10,70,56,10,70,56,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,49, 57,10,69,78,67,79,68,73,78,71,32,57,55,53,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,56,10,50,52,10,55,52,10,70, 56,10,69,56,10,70,52,10,55,52,10,50,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,49,65,10,69,78, 67,79,68,73,78,71,32,57,55,53,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,70,67,10,55,67, 10,55,67,10,51,67,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,49,66,10,69,78,67,79,68,73, 78,71,32,57,55,53,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,70,67,10,70,56,10,70,56,10, 70,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,49,67,10,69,78,67,79,68,73,78,71,32,57, 55,53,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,70,67,10,52,67,10,52,67,10,51,67,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,49, 68,10,69,78,67,79,68,73,78,71,32,57,55,53,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,56,10,48,56,10,49,56,10,55,56,10,54, 56,10,52,56,10,52,56,10,55,56,10,55,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,49,69,10,69,78, 67,79,68,73,78,71,32,57,55,53,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,70,67,10,67,56, 10,67,56,10,70,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,49,70,10,69,78,67,79,68,73, 78,71,32,57,55,53,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,56,10,55,56, 10,52,56,10,52,56,10,54,56,10,55,56,10,49,56,10, 48,56,10,48,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,50,48,10,69,78,67,79,68,73,78,71,32,57, 55,54,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,55,48,10,65,56,10,70,56,10, 53,48,10,55,48,10,50,48,10,56,56,10,55,48,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,50, 49,10,69,78,67,79,68,73,78,71,32,57,55,54,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,70,48,10,48,56,10,48,56,10,49,48,10,50, 48,10,52,48,10,56,48,10,56,48,10,55,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,50,50,10,69,78, 67,79,68,73,78,71,32,57,55,54,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,55,48,10,68,56,10,68,56,10,65,56, 10,65,56,10,55,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,50,51,10,69,78,67,79,68,73, 78,71,32,57,55,54,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,53,48,10,65,56,10,53,48,10,53,48,10,50,48,10, 55,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,50,52,10,69,78,67,79,68,73,78,71,32,57, 55,54,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,53,48,10,70,56,10, 53,48,10,55,48,10,53,48,10,55,48,10,53,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,50, 53,10,69,78,67,79,68,73,78,71,32,57,55,54,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,53,48,10,53,48,10,50,48,10,70, 56,10,50,48,10,50,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,50,54,10,69,78, 67,79,68,73,78,71,32,57,55,54,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,55,48,10,50,48,10,70,56,10,50,48,10,54,48, 10,51,48,10,50,48,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,50,55,10,69,78,67,79,68,73, 78,71,32,57,55,54,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,51,48,10,50,56, 10,50,56,10,51,48,10,65,56,10,55,48,10,50,48,10, 55,48,10,65,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,50,56,10,69,78,67,79,68,73,78,71,32,57, 55,54,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,55,48,10,50,48,10, 70,56,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,50, 57,10,69,78,67,79,68,73,78,71,32,57,55,54,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,55,48,10,50,48,10,65,56,10,70, 56,10,65,56,10,50,48,10,55,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,50,65,10,69,78, 67,79,68,73,78,71,32,57,55,55,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,55, 56,10,69,52,10,67,56,10,68,67,10,67,56,10,68,52, 10,67,48,10,69,52,10,55,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,50,66,10,69,78,67,79,68,73, 78,71,32,57,55,55,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,65,56,10,53,48,10,48,48,10,50,48, 10,65,56,10,65,56,10,65,56,10,65,56,10,65,56,10, 55,48,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,50,67,10,69,78,67,79,68,73,78,71,32,57, 55,55,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,55,48,10,65,56,10, 70,56,10,65,56,10,70,56,10,65,56,10,55,48,10,65, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,50, 68,10,69,78,67,79,68,73,78,71,32,57,55,55,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,55,48,10,56,56,10,50,56,10,54,56,10,67, 56,10,65,56,10,49,56,10,52,56,10,66,52,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,50,69,10,69,78, 67,79,68,73,78,71,32,57,55,55,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,55, 48,10,65,56,10,65,56,10,65,56,10,65,56,10,70,56, 10,65,56,10,65,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,50,70,10,69,78,67,79,68,73, 78,71,32,57,55,55,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,56,10,56,52,10,69,67,10,65,52,10, 70,67,10,55,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,51,48,10,69,78,67,79,68,73,78,71,32,57, 55,55,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,70,56,10,70,56,10, 48,48,10,70,56,10,70,56,10,48,48,10,70,56,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,51, 49,10,69,78,67,79,68,73,78,71,32,57,55,55,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,68,56,10,68,56,10,48,48,10,70, 56,10,70,56,10,48,48,10,70,56,10,70,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,51,50,10,69,78, 67,79,68,73,78,71,32,57,55,55,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,70,56,10,70,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,70,56,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,51,51,10,69,78,67,79,68,73, 78,71,32,57,55,55,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,68,56, 10,68,56,10,48,48,10,68,56,10,68,56,10,48,48,10, 70,56,10,70,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,51,52,10,69,78,67,79,68,73,78,71,32,57, 55,56,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,70,56,10,70,56,10, 48,48,10,70,56,10,70,56,10,48,48,10,68,56,10,68, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,51, 53,10,69,78,67,79,68,73,78,71,32,57,55,56,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,68,56,10,68,56,10,48,48,10,70, 56,10,70,56,10,48,48,10,68,56,10,68,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,51,54,10,69,78, 67,79,68,73,78,71,32,57,55,56,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,70,56,10,70,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,68,56,10,68,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,51,55,10,69,78,67,79,68,73, 78,71,32,57,55,56,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,68,56, 10,68,56,10,48,48,10,68,56,10,68,56,10,48,48,10, 68,56,10,68,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,51,56,10,69,78,67,79,68,73,78,71,32,57, 55,56,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 65,56,10,55,48,10,68,56,10,55,48,10,65,56,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,51, 57,10,69,78,67,79,68,73,78,71,32,57,55,56,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,55,56,10,56,52,10,67,67,10,56,52,10,66, 52,10,56,52,10,66,52,10,67,67,10,56,52,10,55,56, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,115,109,105,108,101,102,97,99,101,10, 69,78,67,79,68,73,78,71,32,57,55,56,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,56,10,56,52,10,67,67,10,56,52,10,66,52,10, 56,52,10,67,67,10,66,52,10,56,52,10,55,56,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,105,110,118,115,109,105,108,101,102,97,99,101, 10,69,78,67,79,68,73,78,71,32,57,55,56,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,55,56,10,70,67,10,66,52,10,70,67,10,67,67, 10,70,67,10,66,52,10,67,67,10,55,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,115,117,110,10,69,78,67,79,68,73,78, 71,32,57,55,56,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,50,48,10,50,48,10, 56,56,10,50,48,10,53,48,10,50,48,10,56,56,10,50, 48,10,50,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,51,68,10,69,78,67,79,68,73,78,71,32,57,55, 56,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,55,48,10,67,56,10,50,56,10,50, 56,10,50,56,10,50,56,10,50,56,10,67,56,10,55,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,51,69, 10,69,78,67,79,68,73,78,71,32,57,55,57,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,55,48,10,57,56,10,65,48,10,65,48,10,65,48, 10,65,48,10,65,48,10,57,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,51,70,10,69,78,67, 79,68,73,78,71,32,57,55,57,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,56,56, 10,55,48,10,56,56,10,56,56,10,56,56,10,55,48,10, 50,48,10,55,48,10,50,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,102,101,109,97,108,101,10,69,78,67,79,68,73,78,71, 32,57,55,57,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,55,48,10,50,48,10,55,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 54,52,49,10,69,78,67,79,68,73,78,71,32,57,55,57, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,50,48,10,55,48,10,50,48, 10,55,48,10,56,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,109,97,108,101,10,69,78,67, 79,68,73,78,71,32,57,55,57,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,49,67,10,48,67,10,55,52,10,56,56,10, 56,56,10,56,56,10,55,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,52,51,10,69,78,67,79,68,73,78, 71,32,57,55,57,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,56,10,52,56,10, 65,56,10,50,56,10,50,56,10,52,56,10,70,56,10,48, 56,10,48,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,52,52,10,69,78,67,79,68,73,78,71,32,57,55, 57,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,52,48,10,69,48,10,52,48,10,53, 48,10,54,56,10,52,56,10,52,56,10,53,48,10,53,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,52,53, 10,69,78,67,79,68,73,78,71,32,57,55,57,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,56,56,10,65,56,10,65,56,10,70,56,10,65,56, 10,65,56,10,65,56,10,50,48,10,53,48,10,50,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,52,54,10,69,78,67, 79,68,73,78,71,32,57,55,57,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,65,56, 10,70,67,10,65,56,10,65,56,10,65,56,10,55,48,10, 50,48,10,55,48,10,50,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,52,55,10,69,78,67,79,68,73,78, 71,32,57,55,57,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,70,48,10,56,56,10, 56,56,10,56,56,10,70,48,10,56,48,10,56,48,10,56, 48,10,70,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,52,56,10,69,78,67,79,68,73,78,71,32,57,56, 48,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,53,48,10,65,56,10,65,56,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,52,57, 10,69,78,67,79,68,73,78,71,32,57,56,48,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,56,56,10,56,56, 10,53,48,10,50,48,10,53,48,10,50,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,52,65,10,69,78,67, 79,68,73,78,71,32,57,56,48,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,70,56,10,53,48,10,53,48,10, 53,48,10,53,48,10,70,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,52,66,10,69,78,67,79,68,73,78, 71,32,57,56,48,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,51,48,10, 52,56,10,65,48,10,52,48,10,49,48,10,50,56,10,57, 48,10,54,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,52,67,10,69,78,67,79,68,73,78,71,32,57,56, 48,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 56,10,52,56,10,50,56,10,54,56,10,65,56,10,52,56, 10,48,52,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,52,68, 10,69,78,67,79,68,73,78,71,32,57,56,48,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,65,67,10,70,67,10,65,67,10,65,67,10,65,67, 10,65,67,10,65,56,10,65,56,10,65,56,10,49,56,10, 50,56,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,52,69,10,69,78,67, 79,68,73,78,71,32,57,56,48,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,48,10,56,56,10,53,48,10,53,48,10, 68,56,10,48,48,10,70,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,52,70,10,69,78,67,79,68,73,78, 71,32,57,56,48,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,65,56,10,70,56,10, 65,56,10,65,56,10,65,56,10,65,56,10,65,56,10,65, 56,10,65,56,10,48,67,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,53,48,10,69,78,67,79,68,73,78,71,32,57,56, 48,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,51, 56,10,49,56,10,65,56,10,52,48,10,65,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,53,49, 10,69,78,67,79,68,73,78,71,32,57,56,48,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,56,48,10,57,48,10,65,56,10,66,48, 10,67,56,10,56,56,10,48,56,10,51,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,53,50,10,69,78,67, 79,68,73,78,71,32,57,56,49,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,53,52,10,65,56,10,48,48,10, 48,48,10,53,52,10,65,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,53,51,10,69,78,67,79,68,73,78, 71,32,57,56,49,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,56,56,10,53,48,10, 53,48,10,53,48,10,70,56,10,53,48,10,53,48,10,53, 48,10,56,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,53,52,10,69,78,67,79,68,73,78,71,32,57,56, 49,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 50,48,10,55,48,10,55,48,10,65,56,10,70,56,10,56, 56,10,53,48,10,53,48,10,70,56,10,56,56,10,70,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,53,53, 10,69,78,67,79,68,73,78,71,32,57,56,49,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,65, 56,10,70,56,10,56,56,10,70,56,10,53,48,10,53,48, 10,56,56,10,70,56,10,56,56,10,70,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,53,54,10,69,78,67, 79,68,73,78,71,32,57,56,49,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,65,56,10,70,56,10,56,56,10,53,48,10,53,48,10, 53,48,10,56,56,10,70,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,53,55,10,69,78,67,79,68,73,78, 71,32,57,56,49,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,50,48,10,53,48,10,55,48,10, 68,56,10,56,56,10,53,48,10,53,48,10,55,48,10,56, 56,10,70,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,53,56,10,69,78,67,79,68,73,78,71,32,57,56, 49,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,49,48,10,51,56,10,54,56,10,56, 56,10,69,56,10,50,56,10,51,56,10,52,56,10,55,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,53,57, 10,69,78,67,79,68,73,78,71,32,57,56,49,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,50,48,10,53,48,10,50,48,10,53,48, 10,53,48,10,55,48,10,56,56,10,70,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,53,65,10,69,78,67, 79,68,73,78,71,32,57,56,49,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,50,48,10,55,48,10,55,48, 10,65,56,10,70,56,10,70,56,10,55,48,10,55,48,10, 70,56,10,70,56,10,70,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,53,66,10,69,78,67,79,68,73,78, 71,32,57,56,49,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,65,56,10,70,56,10,70,56,10, 70,56,10,55,48,10,55,48,10,70,56,10,70,56,10,70, 56,10,70,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,53,67,10,69,78,67,79,68,73,78,71,32,57,56, 50,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,65,56,10,70,56,10,70, 56,10,55,48,10,55,48,10,55,48,10,70,56,10,70,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,53,68, 10,69,78,67,79,68,73,78,71,32,57,56,50,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,50, 48,10,55,48,10,55,48,10,68,56,10,56,56,10,53,48, 10,53,48,10,55,48,10,70,56,10,70,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,53,69,10,69,78,67, 79,68,73,78,71,32,57,56,50,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,49,48, 10,51,56,10,53,56,10,70,56,10,70,56,10,51,56,10, 51,56,10,55,56,10,55,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,53,70,10,69,78,67,79,68,73,78, 71,32,57,56,50,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,50,48,10, 55,48,10,50,48,10,55,48,10,55,48,10,55,48,10,70, 56,10,70,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,115,112,97, 100,101,10,69,78,67,79,68,73,78,71,32,57,56,50,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,50,48,10,50,48,10,55,48,10, 55,48,10,70,56,10,70,56,10,50,48,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,54,54,49,10,69, 78,67,79,68,73,78,71,32,57,56,50,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,53,48,10,65,56,10,65,56,10,56, 56,10,53,48,10,50,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,54,54,50,10,69,78,67,79,68, 73,78,71,32,57,56,50,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,50,48,10,53,48,10,53,48,10,56,56,10,53,48, 10,53,48,10,50,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,99, 108,117,98,10,69,78,67,79,68,73,78,71,32,57,56,50, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,50,48,10,55,48,10,50,48,10,65,56, 10,70,56,10,70,56,10,65,56,10,50,48,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,54,54,52,10, 69,78,67,79,68,73,78,71,32,57,56,50,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,50,48,10,50,48,10,53,48,10,53,48,10, 56,56,10,70,56,10,50,48,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,104,101,97,114,116,10,69,78,67,79,68,73, 78,71,32,57,56,50,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,53,48,10,70,56,10,70,56,10,70,56,10,55,48,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,100,105, 97,109,111,110,100,10,69,78,67,79,68,73,78,71,32,57, 56,51,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 55,48,10,55,48,10,70,56,10,55,48,10,55,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,54, 55,10,69,78,67,79,68,73,78,71,32,57,56,51,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,50,48,10,53,48,10,50,48,10,55, 48,10,65,56,10,55,48,10,50,48,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,54,56,10,69,78, 67,79,68,73,78,71,32,57,56,51,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,57,48,10,52,56,10,57,48,10,52,56,10,48,48, 10,53,48,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,54,57,10,69,78,67,79,68,73, 78,71,32,57,56,51,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,49,48,10,49,48, 10,49,48,10,49,48,10,49,48,10,49,48,10,55,48,10, 70,48,10,54,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,109,117, 115,105,99,97,108,110,111,116,101,10,69,78,67,79,68,73, 78,71,32,57,56,51,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,49,48,10,49,56, 10,49,52,10,49,48,10,49,48,10,49,48,10,55,48,10, 70,48,10,54,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,109,117, 115,105,99,97,108,110,111,116,101,100,98,108,10,69,78,67, 79,68,73,78,71,32,57,56,51,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,52,48, 10,54,48,10,53,48,10,52,56,10,52,56,10,67,56,10, 67,56,10,49,56,10,49,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,54,67,10,69,78,67,79,68,73,78, 71,32,57,56,51,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,52,48,10,54,48,10, 53,48,10,54,56,10,53,56,10,67,56,10,67,56,10,49, 56,10,49,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,54,68,10,69,78,67,79,68,73,78,71,32,57,56, 51,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,56,48,10,56,48,10,56,48,10,66, 48,10,67,56,10,56,56,10,56,56,10,57,48,10,69,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,54,69, 10,69,78,67,79,68,73,78,71,32,57,56,51,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,56,48,10,56,56,10,57,56,10,65,56,10,67,56, 10,57,56,10,65,56,10,67,56,10,56,56,10,48,56,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,54,70,10,69,78,67, 79,68,73,78,71,32,57,56,51,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,49,48, 10,53,56,10,55,48,10,68,48,10,53,48,10,53,56,10, 55,48,10,68,48,10,52,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,55,48,10,69,78,67,79,68,73,78, 71,32,57,56,52,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,53,48,10,50,48,10, 65,56,10,55,48,10,65,56,10,50,48,10,50,48,10,50, 48,10,53,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,55,49,10,69,78,67,79,68,73,78,71,32,57,56, 52,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,50,48,10,53,48,10,50,48,10,65,56,10,68, 56,10,65,56,10,50,48,10,50,48,10,50,48,10,53,48, 10,50,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,55,50, 10,69,78,67,79,68,73,78,71,32,57,56,52,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,51,48,10,48,56,10,67,52,10,52,67, 10,56,48,10,57,52,10,65,56,10,49,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,55,51,10,69,78,67, 79,68,73,78,71,32,57,56,52,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,49,48,10,48,56, 10,67,52,10,67,67,10,65,67,10,65,48,10,65,52,10, 65,52,10,57,52,10,51,56,10,49,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,55,52,10,69,78,67,79,68,73,78, 71,32,57,56,52,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,49,48,10,48,56,10,67,52,10, 69,67,10,68,67,10,66,48,10,67,52,10,70,52,10,57, 52,10,51,56,10,49,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,55,53,10,69,78,67,79,68,73,78,71,32,57,56, 52,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,49,48,10,48,56,10,67,52,10,69,67,10,68, 67,10,57,48,10,66,52,10,68,52,10,66,52,10,51,56, 10,49,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,55,54, 10,69,78,67,79,68,73,78,71,32,57,56,52,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,49, 48,10,48,56,10,67,52,10,67,67,10,67,67,10,68,48, 10,70,67,10,57,52,10,57,52,10,51,56,10,49,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,55,55,10,69,78,67, 79,68,73,78,71,32,57,56,52,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,49,48,10,48,56, 10,67,52,10,67,67,10,70,67,10,67,48,10,69,52,10, 57,52,10,70,52,10,51,56,10,49,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,55,56,10,69,78,67,79,68,73,78, 71,32,57,56,52,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,49,48,10,48,56,10,67,52,10, 68,67,10,65,67,10,69,48,10,68,52,10,68,52,10,66, 52,10,51,56,10,49,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,55,57,10,69,78,67,79,68,73,78,71,32,57,56, 52,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,49,48,10,48,56,10,67,52,10,67,67,10,70, 67,10,57,48,10,65,52,10,65,52,10,66,52,10,51,56, 10,49,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,55,65, 10,69,78,67,79,68,73,78,71,32,57,56,53,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,49, 48,10,48,56,10,67,52,10,67,67,10,56,67,10,56,48, 10,56,52,10,56,52,10,57,52,10,51,56,10,49,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,55,66,10,69,78,67, 79,68,73,78,71,32,57,56,53,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,51,48,10,50,56,10,67,67,10,67,67,10,56,48,10, 57,52,10,66,56,10,49,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,55,67,10,69,78,67,79,68,73,78, 71,32,57,56,53,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,55,56,10,70,67,10,67,67,10, 68,52,10,51,48,10,51,48,10,55,67,10,54,56,10,52, 52,10,69,67,10,70,67,10,55,56,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,55,68,10,69,78,67,79,68,73,78,71,32,57,56, 53,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,55,56,10,56,52,10,51,48,10,50,56,10,67, 67,10,67,67,10,56,48,10,57,52,10,66,56,10,49,48, 10,56,52,10,55,56,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,56,48, 10,69,78,67,79,68,73,78,71,32,57,56,53,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,70,56,10,56,56,10,56,56,10,56,56,10,65,56, 10,56,56,10,56,56,10,56,56,10,70,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,56,49,10,69,78,67, 79,68,73,78,71,32,57,56,53,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,70,56, 10,56,56,10,67,56,10,56,56,10,56,56,10,56,56,10, 57,56,10,56,56,10,70,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,56,50,10,69,78,67,79,68,73,78, 71,32,57,56,53,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,70,56,10,56,56,10, 67,56,10,56,56,10,65,56,10,56,56,10,57,56,10,56, 56,10,70,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,56,51,10,69,78,67,79,68,73,78,71,32,57,56, 53,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,70,56,10,56,56,10,68,56,10,56, 56,10,56,56,10,56,56,10,68,56,10,56,56,10,70,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,56,52, 10,69,78,67,79,68,73,78,71,32,57,56,54,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,70,56,10,56,56,10,68,56,10,56,56,10,65,56, 10,56,56,10,68,56,10,56,56,10,70,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,56,53,10,69,78,67, 79,68,73,78,71,32,57,56,54,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,70,56, 10,56,56,10,68,56,10,56,56,10,68,56,10,56,56,10, 68,56,10,56,56,10,70,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,56,54,10,69,78,67,79,68,73,78, 71,32,57,56,54,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,55,48,10,56,56,10,57,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,56,55,10,69,78,67,79,68,73,78,71,32,57,56, 54,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,55, 48,10,56,56,10,68,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,56,56, 10,69,78,67,79,68,73,78,71,32,57,56,54,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,55,48,10,70,56, 10,69,56,10,70,56,10,55,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,56,57,10,69,78,67, 79,68,73,78,71,32,57,56,54,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,55,48,10,70,56,10,65,56,10, 70,56,10,55,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,55,48,49,10,69,78,67,79,68,73,78, 71,32,57,57,56,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,50,48,10,53,48,10,50,48,10,53,48,10,66, 67,10,52,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,55,48,50,10,69,78,67,79,68,73,78,71,32,57,57, 56,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,52,48,10,65, 52,10,54,56,10,49,48,10,54,56,10,65,52,10,52,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,55,48,51, 10,69,78,67,79,68,73,78,71,32,57,57,56,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,52,56,10,66,67,10,53,48,10,50,48,10,53,48, 10,50,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,55,48,52,10,69,78,67, 79,68,73,78,71,32,57,57,56,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,52,48,10,65,67,10,55,56,10,49,48,10, 55,56,10,65,67,10,52,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,55,48,54,10,69,78,67,79,68,73,78, 71,32,57,57,57,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,55,56,10,56,52,10,66,52,10, 66,52,10,65,52,10,65,52,10,65,52,10,66,52,10,66, 52,10,52,52,10,55,56,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,55,48,56,10,69,78,67,79,68,73,78,71,32,57,57, 57,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,50,48,10,50,48,10,49,48,10,57, 48,10,70,67,10,57,48,10,49,48,10,50,48,10,50,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,55,49,51, 10,69,78,67,79,68,73,78,71,32,49,48,48,48,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,52,10,48,52,10,48,56,10,48,56,10,48, 56,10,57,48,10,53,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,49,52,10,69,78, 67,79,68,73,78,71,32,49,48,48,48,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,67,10,48,67,10,48,67,10,49,56,10,49,56,10,57, 56,10,68,56,10,55,48,10,51,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,55,49,53,10,69,78,67,79,68, 73,78,71,32,49,48,48,48,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,56,56,10,53,48,10,50, 48,10,53,48,10,56,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,55,49,54,10,69,78,67,79,68,73,78,71, 32,49,48,48,48,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,56,56,10,68,56,10,55,48,10,55,48,10,68, 56,10,56,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,55,49,55,10,69,78,67,79,68,73,78,71,32,49,48, 48,48,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,56,10, 57,48,10,53,48,10,50,48,10,53,48,10,52,56,10,56, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,49, 56,10,69,78,67,79,68,73,78,71,32,49,48,48,48,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,56,10,57,56,10,68,48,10, 55,48,10,55,48,10,53,56,10,67,56,10,56,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,55,49,57,10,69, 78,67,79,68,73,78,71,32,49,48,48,48,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,51,48,10,51,48,10,51,48,10,70,67,10, 70,67,10,51,48,10,51,48,10,51,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,55,49,65,10,69,78,67,79, 68,73,78,71,32,49,48,48,49,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,51,48,10,51,48,10,51,48,10,70,67,10,70,67,10, 51,48,10,51,48,10,51,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,55,49,66,10,69,78,67,79,68,73,78, 71,32,49,48,48,49,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,50,48, 10,50,48,10,50,48,10,68,56,10,50,48,10,50,48,10, 50,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,49,67,10,69,78,67,79,68,73,78,71,32,49, 48,48,49,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,51,48,10,51,48, 10,51,48,10,67,67,10,67,67,10,51,48,10,51,48,10, 51,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,55, 49,68,10,69,78,67,79,68,73,78,71,32,49,48,48,49, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,50,48,10,50,48,10,70,56,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,55,49,69,10, 69,78,67,79,68,73,78,71,32,49,48,48,49,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,55,48,10,53,56,10,68,67,10,56,67,10,68,67, 10,53,67,10,53,56,10,53,56,10,55,56,10,51,56,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,55,49,70,10,69,78,67, 79,68,73,78,71,32,49,48,48,49,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,51, 48,10,51,48,10,70,67,10,70,67,10,51,48,10,51,48, 10,51,48,10,51,48,10,51,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,50,48,10,69,78,67,79,68,73, 78,71,32,49,48,48,49,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,48,10,50,48,10,65,56,10,70,56,10,65,56, 10,50,48,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,55,50,50,10,69,78,67,79,68,73,78,71,32, 49,48,48,49,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,51,48,10,51, 48,10,51,48,10,70,67,10,70,67,10,51,48,10,51,48, 10,51,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 55,50,51,10,69,78,67,79,68,73,78,71,32,49,48,48, 49,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,50,48,10,55,48,10,50,48,10,65, 56,10,70,56,10,65,56,10,50,48,10,55,48,10,50,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,55,50,52, 10,69,78,67,79,68,73,78,71,32,49,48,48,50,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,55,48,10,50,48,10,65,56,10,70, 56,10,65,56,10,50,48,10,55,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,50,53,10,69,78, 67,79,68,73,78,71,32,49,48,48,50,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,55,48,10,50,48,10,65,56,10,70,56,10,65, 56,10,50,48,10,55,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,55,50,54,10,69,78,67,79,68, 73,78,71,32,49,48,48,50,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,50,48,10,55,48,10,70,56,10,55,48,10,50, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,55,50,55,10,69,78,67,79,68,73,78,71, 32,49,48,48,50,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 50,48,10,53,48,10,56,56,10,53,48,10,50,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,55,50,57,10,69,78,67,79,68,73,78,71,32,49,48, 48,50,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,50,48,10,50,48,10, 70,56,10,53,48,10,55,48,10,56,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,50, 65,10,69,78,67,79,68,73,78,71,32,49,48,48,50,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,55,48,10,68,56,10,68,56,10,48,48,10, 56,56,10,56,56,10,55,48,10,70,56,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,55,50,66,10,69, 78,67,79,68,73,78,71,32,49,48,48,50,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,50,48,10,50,48,10,70,56,10,53,48,10, 55,48,10,56,56,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,55,50,67,10,69,78,67,79, 68,73,78,71,32,49,48,48,50,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,50,48,10,50,48,10,70,56,10,55,48,10,55,48,10, 56,56,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,55,50,68,10,69,78,67,79,68,73,78, 71,32,49,48,48,50,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,50,48, 10,50,48,10,70,56,10,55,48,10,55,48,10,56,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,50,69,10,69,78,67,79,68,73,78,71,32,49, 48,48,51,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,50,48,10,50,48, 10,70,56,10,55,48,10,55,48,10,56,56,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,55, 50,70,10,69,78,67,79,68,73,78,71,32,49,48,48,51, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,50,48,10,50,48,10,70,56, 10,55,48,10,55,48,10,56,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,55,51,48,10, 69,78,67,79,68,73,78,71,32,49,48,48,51,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,51,48,10,51,48,10,70,67,10,53,56, 10,55,56,10,67,67,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,55,51,49,10,69,78,67, 79,68,73,78,71,32,49,48,48,51,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,50,48,10,65,56,10,55,48,10,55,48,10,55,48, 10,65,56,10,50,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,51,50,10,69,78,67,79,68,73, 78,71,32,49,48,48,51,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,50, 48,10,65,56,10,55,48,10,53,48,10,55,48,10,65,56, 10,50,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,55,51,51,10,69,78,67,79,68,73,78,71,32, 49,48,48,51,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,50,48,10,65, 56,10,55,48,10,70,56,10,55,48,10,65,56,10,50,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 55,51,52,10,69,78,67,79,68,73,78,71,32,49,48,48, 51,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,50,48,10,65,56,10,55, 48,10,70,56,10,55,48,10,65,56,10,50,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,55,51,53, 10,69,78,67,79,68,73,78,71,32,49,48,48,51,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,50,48,10,65,56,10,55,48,10,70, 56,10,55,48,10,65,56,10,50,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,51,54,10,69,78, 67,79,68,73,78,71,32,49,48,48,51,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,50,48,10,65,56,10,55,48,10,55,48,10,55, 48,10,65,56,10,50,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,55,51,55,10,69,78,67,79,68, 73,78,71,32,49,48,48,51,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 53,48,10,53,48,10,70,56,10,50,48,10,70,56,10,53, 48,10,53,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,55,51,56,10,69,78,67,79,68,73,78,71, 32,49,48,48,52,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,53,48,10, 55,48,10,70,56,10,55,48,10,70,56,10,55,48,10,53, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,55,51,66,10,69,78,67,79,68,73,78,71,32,49,48, 48,52,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,50,48,10,65,56,10, 65,56,10,55,48,10,65,56,10,65,56,10,50,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,51, 67,10,69,78,67,79,68,73,78,71,32,49,48,48,52,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,50,48,10,65,56,10,65,56,10, 53,48,10,65,56,10,65,56,10,50,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,55,51,68,10,69, 78,67,79,68,73,78,71,32,49,48,48,52,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,50,48,10,65,56,10,65,56,10,55,48,10, 65,56,10,65,56,10,50,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,55,51,69,10,69,78,67,79, 68,73,78,71,32,49,48,48,52,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,50,48,10,65,56,10,65,56,10,53,48,10,65,56,10, 65,56,10,50,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,55,51,70,10,69,78,67,79,68,73,78, 71,32,49,48,48,52,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,48,10,70,56,10,53,48,10,55,48,10,68,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,52,51,10,69,78,67,79,68,73,78,71,32,49, 48,48,53,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,50,48,10,65,56, 10,65,56,10,55,48,10,65,56,10,65,56,10,50,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,55, 52,52,10,69,78,67,79,68,73,78,71,32,49,48,48,53, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,50,48,10,65,56,10,65,56, 10,55,48,10,65,56,10,65,56,10,50,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,55,52,53,10, 69,78,67,79,68,73,78,71,32,49,48,48,53,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,50,48,10,65,56,10,65,56,10,55,48, 10,65,56,10,65,56,10,50,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,55,52,54,10,69,78,67, 79,68,73,78,71,32,49,48,48,53,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,50,48,10,65,56,10,65,56,10,55,48,10,65,56, 10,65,56,10,50,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,52,55,10,69,78,67,79,68,73, 78,71,32,49,48,48,53,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,50, 48,10,65,56,10,55,48,10,70,56,10,55,48,10,65,56, 10,50,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,55,52,56,10,69,78,67,79,68,73,78,71,32, 49,48,48,53,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,50,48,10,65, 56,10,55,48,10,70,56,10,55,48,10,65,56,10,50,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 55,52,57,10,69,78,67,79,68,73,78,71,32,49,48,48, 53,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,50,48,10,65,56,10,65, 56,10,55,48,10,65,56,10,65,56,10,50,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,55,52,65, 10,69,78,67,79,68,73,78,71,32,49,48,48,53,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,50,48,10,65,56,10,55,48,10,70, 56,10,55,48,10,65,56,10,50,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,52,66,10,69,78, 67,79,68,73,78,71,32,49,48,48,53,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,50,48,10,65,56,10,55,48,10,70,56,10,55, 48,10,65,56,10,50,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,55,52,68,10,69,78,67,79,68, 73,78,71,32,49,48,48,54,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,55,56,10,56,67,10,56,67,10,56, 67,10,56,67,10,55,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,55,52,70,10,69,78,67,79,68,73,78,71, 32,49,48,48,54,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,70,56,10,56,56,10,56,67,10,56,67,10,70, 67,10,51,67,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,55,53,48,10,69,78,67,79,68,73,78,71,32,49,48, 48,54,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 51,67,10,70,67,10,56,67,10,56,67,10,56,56,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,53, 49,10,69,78,67,79,68,73,78,71,32,49,48,48,54,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 56,67,10,56,67,10,56,67,10,70,67,10,55,67,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,55,53,50,10,69, 78,67,79,68,73,78,71,32,49,48,48,54,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,55,67,10,70,67,10, 56,67,10,56,67,10,56,67,10,70,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,55,53,54,10,69,78,67,79, 68,73,78,71,32,49,48,48,55,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,50,48, 10,55,48,10,50,48,10,53,48,10,70,56,10,53,48,10, 50,48,10,55,48,10,50,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,55,53,56,10,69,78,67,79,68,73,78, 71,32,49,48,48,55,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,53,57,10,69,78,67,79,68,73,78,71,32,49, 48,48,55,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,48,10,55,48,10,55,48, 10,55,48,10,55,48,10,55,48,10,55,48,10,55,48,10, 55,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,55, 53,65,10,69,78,67,79,68,73,78,71,32,49,48,48,55, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,70,56,10,70,56,10,70,56,10,70,56, 10,70,56,10,70,56,10,70,56,10,70,56,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,55,53,66,10, 69,78,67,79,68,73,78,71,32,49,48,48,55,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,51, 48,10,52,48,10,55,48,10,55,48,10,50,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,55,53,67,10,69,78,67, 79,68,73,78,71,32,49,48,48,55,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,50,48,10,55, 48,10,55,48,10,49,48,10,54,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,53,68,10,69,78,67,79,68,73, 78,71,32,49,48,48,55,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,54,67,10,57,48,10,70, 67,10,70,67,10,52,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,55,53,69,10,69,78,67,79,68,73,78,71,32, 49,48,48,55,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,52,56,10,70,67,10,70,67,10,50, 52,10,68,56,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 55,54,49,10,69,78,67,79,68,73,78,71,32,49,48,48, 56,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,56,10,55,67,10,69,56,10,69,56,10,55, 56,10,48,56,10,54,56,10,54,56,10,52,56,10,51,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,55,54,50, 10,69,78,67,79,68,73,78,71,32,49,48,48,56,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,55,48,10,55,48,10,50,48,10,50, 48,10,48,48,10,50,48,10,55,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,54,51,10,69,78, 67,79,68,73,78,71,32,49,48,48,56,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 53,48,10,70,56,10,70,56,10,55,48,10,50,48,10,48, 48,10,50,48,10,55,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,55,54,52,10,69,78,67,79,68, 73,78,71,32,49,48,48,56,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,53,48,10,70,56,10,70,56,10,70,56,10,55, 48,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,55,54,53,10,69,78,67,79,68,73,78,71, 32,49,48,48,56,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 54,48,10,70,48,10,70,56,10,55,67,10,70,56,10,70, 48,10,54,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,55,54,54,10,69,78,67,79,68,73,78,71,32,49,48, 48,56,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,54,56,10,66,48,10,49,48,10, 68,56,10,70,56,10,70,48,10,54,48,10,54,56,10,51, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,54, 55,10,69,78,67,79,68,73,78,71,32,49,48,48,56,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,52,48,10,57,48,10,66,56,10, 55,67,10,53,67,10,66,67,10,66,56,10,53,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,55,55,54,10,69, 78,67,79,68,73,78,71,32,49,48,49,48,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,48,10,70,56,10,68,56,10,57,56,10,68,56,10, 68,56,10,56,56,10,70,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,55,55,55,10,69,78,67,79, 68,73,78,71,32,49,48,49,48,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,55,48, 10,70,56,10,68,56,10,65,56,10,69,56,10,68,56,10, 56,56,10,70,56,10,55,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,55,55,56,10,69,78,67,79,68,73,78, 71,32,49,48,49,48,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,70,56, 10,68,56,10,65,56,10,68,56,10,69,56,10,57,56,10, 70,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,55,57,10,69,78,67,79,68,73,78,71,32,49, 48,49,48,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,48,10,70,56,10,66,56, 10,66,56,10,57,56,10,56,56,10,68,56,10,70,56,10, 55,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,55, 55,65,10,69,78,67,79,68,73,78,71,32,49,48,49,48, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,55,48,10,70,56,10,56,56,10,66,56, 10,57,56,10,69,56,10,57,56,10,70,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,55,55,66,10, 69,78,67,79,68,73,78,71,32,49,48,49,48,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,55,48,10,70,56,10,67,56,10,66,56,10,57,56, 10,65,56,10,68,56,10,70,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,55,55,67,10,69,78,67, 79,68,73,78,71,32,49,48,49,48,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,55, 48,10,70,56,10,56,56,10,69,56,10,68,56,10,68,56, 10,68,56,10,70,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,55,68,10,69,78,67,79,68,73, 78,71,32,49,48,49,48,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,55,48,10,70, 56,10,68,56,10,65,56,10,68,56,10,65,56,10,68,56, 10,70,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,55,55,69,10,69,78,67,79,68,73,78,71,32, 49,48,49,49,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,48,10,70,56,10,68, 56,10,65,56,10,67,56,10,69,56,10,57,56,10,70,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 55,55,70,10,69,78,67,79,68,73,78,71,32,49,48,49, 49,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,55,56,10,70,67,10,65,67,10,57, 52,10,57,52,10,57,52,10,65,67,10,70,67,10,55,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,55,56,48, 10,69,78,67,79,68,73,78,71,32,49,48,49,49,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,55,48,10,56,56,10,65,56,10,69,56,10,65, 56,10,65,56,10,65,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,56,49,10,69,78, 67,79,68,73,78,71,32,49,48,49,49,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 55,48,10,56,56,10,65,56,10,68,56,10,57,56,10,65, 56,10,70,56,10,56,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,55,56,50,10,69,78,67,79,68, 73,78,71,32,49,48,49,49,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,55,48,10, 56,56,10,65,56,10,68,56,10,65,56,10,57,56,10,69, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,55,56,51,10,69,78,67,79,68,73,78,71, 32,49,48,49,49,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,55,48,10,56,56,10, 67,56,10,67,56,10,69,56,10,70,56,10,65,56,10,56, 56,10,55,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,55,56,52,10,69,78,67,79,68,73,78,71,32,49,48, 49,49,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,55,48,10,56,56,10,70,56,10, 67,56,10,69,56,10,57,56,10,69,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,56, 53,10,69,78,67,79,68,73,78,71,32,49,48,49,49,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,55,48,10,56,56,10,66,56,10,67,56,10, 69,56,10,68,56,10,65,56,10,56,56,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,55,56,54,10,69, 78,67,79,68,73,78,71,32,49,48,49,49,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,48,10,56,56,10,70,56,10,57,56,10,65,56,10, 65,56,10,65,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,55,56,55,10,69,78,67,79, 68,73,78,71,32,49,48,49,49,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,55,48, 10,56,56,10,65,56,10,68,56,10,65,56,10,68,56,10, 65,56,10,56,56,10,55,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,55,56,56,10,69,78,67,79,68,73,78, 71,32,49,48,49,50,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,56,56, 10,65,56,10,68,56,10,66,56,10,57,56,10,69,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,56,57,10,69,78,67,79,68,73,78,71,32,49, 48,49,50,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,56,10,56,52,10,68,52, 10,69,67,10,69,67,10,69,67,10,68,52,10,56,52,10, 55,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,55, 56,65,10,69,78,67,79,68,73,78,71,32,49,48,49,50, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,55,48,10,70,56,10,68,56,10,57,56, 10,68,56,10,68,56,10,68,56,10,70,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,55,56,66,10, 69,78,67,79,68,73,78,71,32,49,48,49,50,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,55,48,10,70,56,10,68,56,10,65,56,10,69,56, 10,68,56,10,56,56,10,70,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,55,56,67,10,69,78,67, 79,68,73,78,71,32,49,48,49,50,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,55, 48,10,70,56,10,68,56,10,65,56,10,68,56,10,69,56, 10,57,56,10,70,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,56,68,10,69,78,67,79,68,73, 78,71,32,49,48,49,50,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,55,48,10,70, 56,10,66,56,10,66,56,10,57,56,10,56,56,10,68,56, 10,70,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,55,56,69,10,69,78,67,79,68,73,78,71,32, 49,48,49,50,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,48,10,70,56,10,56, 56,10,66,56,10,57,56,10,69,56,10,57,56,10,70,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 55,56,70,10,69,78,67,79,68,73,78,71,32,49,48,49, 50,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,55,48,10,70,56,10,67,56,10,66, 56,10,57,56,10,65,56,10,68,56,10,70,56,10,55,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,55,57,48, 10,69,78,67,79,68,73,78,71,32,49,48,49,50,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,55,48,10,70,56,10,56,56,10,69,56,10,68, 56,10,68,56,10,68,56,10,70,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,57,49,10,69,78, 67,79,68,73,78,71,32,49,48,49,50,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 55,48,10,70,56,10,68,56,10,65,56,10,68,56,10,65, 56,10,68,56,10,70,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,55,57,50,10,69,78,67,79,68, 73,78,71,32,49,48,49,51,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,55,48,10, 70,56,10,68,56,10,65,56,10,67,56,10,69,56,10,57, 56,10,70,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,55,57,51,10,69,78,67,79,68,73,78,71, 32,49,48,49,51,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,55,56,10,70,67,10, 65,67,10,57,52,10,57,52,10,57,52,10,65,67,10,70, 67,10,55,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,55,57,52,10,69,78,67,79,68,73,78,71,32,49,48, 49,51,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,51,48,10,49,56,10, 70,67,10,70,67,10,49,56,10,51,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,57, 56,10,69,78,67,79,68,73,78,71,32,49,48,49,51,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,56,48,10,52,48,10, 50,56,10,49,56,10,51,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,55,57,57,10,69, 78,67,79,68,73,78,71,32,49,48,49,51,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,50,48,10,51,48,10,70,56,10, 51,48,10,50,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,55,57,65,10,69,78,67,79, 68,73,78,71,32,49,48,49,51,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,51,56,10,49,56,10,50,56,10,52,48,10, 56,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,55,57,66,10,69,78,67,79,68,73,78, 71,32,49,48,49,51,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,52,48, 10,50,48,10,51,48,10,70,67,10,51,48,10,50,48,10, 52,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,57,67,10,69,78,67,79,68,73,78,71,32,49, 48,49,52,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,51,48,10,49,56, 10,70,67,10,70,67,10,49,56,10,51,48,10,50,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,55, 57,68,10,69,78,67,79,68,73,78,71,32,49,48,49,52, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,49,48,10,49,56, 10,70,67,10,49,56,10,49,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,55,57,69,10, 69,78,67,79,68,73,78,71,32,49,48,49,52,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,49,48,10,49,56,10,70,67,10,70,67, 10,49,56,10,49,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,55,57,70,10,69,78,67, 79,68,73,78,71,32,49,48,49,52,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,49,48,10,49,56,10,66,67,10,66,67,10,49,56, 10,49,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,65,48,10,69,78,67,79,68,73, 78,71,32,49,48,49,52,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,50, 48,10,51,48,10,66,56,10,66,67,10,66,56,10,51,48, 10,50,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,55,65,49,10,69,78,67,79,68,73,78,71,32, 49,48,49,52,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,50,48,10,51, 48,10,70,56,10,70,67,10,70,56,10,51,48,10,50,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 55,65,52,10,69,78,67,79,68,73,78,71,32,49,48,49, 52,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,67,48,10,55, 48,10,51,67,10,55,48,10,67,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,55,65,53, 10,69,78,67,79,68,73,78,71,32,49,48,49,52,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,50,48,10,66,48,10,70,56,10,70, 67,10,55,56,10,51,48,10,50,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,65,54,10,69,78, 67,79,68,73,78,71,32,49,48,49,53,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,50,48,10,51,48,10,55,56,10,70,67,10,70, 56,10,66,48,10,50,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,55,65,55,10,69,78,67,79,68, 73,78,71,32,49,48,49,53,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,50,48,10,50,48,10,51,48,10, 70,48,10,70,56,10,70,56,10,70,67,10,70,56,10,70, 56,10,70,48,10,51,48,10,50,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,55,66,50,10,69,78,67,79,68,73,78,71, 32,49,48,49,54,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,55,56,10,70,67,10,68,67,10, 67,67,10,48,52,10,48,48,10,48,52,10,67,67,10,68, 67,10,70,56,10,55,56,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,55,66,52,10,69,78,67,79,68,73,78,71,32,49,48, 49,54,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,50,48,10,50,48,10, 69,48,10,49,52,10,48,67,10,49,67,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,66, 53,10,69,78,67,79,68,73,78,71,32,49,48,49,54,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,57,48,10,67,56,10, 55,67,10,67,56,10,57,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,55,66,54,10,69, 78,67,79,68,73,78,71,32,49,48,49,54,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,49,67,10,48,67,10,49,52,10,69,48,10, 50,48,10,50,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,55,66,55,10,69,78,67,79, 68,73,78,71,32,49,48,49,54,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,50,48,10,50,48,10,69,48,10,49,52,10,48,67,10, 49,67,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,55,66,56,10,69,78,67,79,68,73,78, 71,32,49,48,49,54,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,57,48,10,67,56,10,55,67,10,67,56,10,57,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,66,57,10,69,78,67,79,68,73,78,71,32,49, 48,49,54,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,49,67,10,48,67, 10,49,52,10,69,48,10,50,48,10,50,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,55, 66,65,10,69,78,67,79,68,73,78,71,32,49,48,49,55, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,49,48,10,48,56, 10,70,67,10,48,56,10,49,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,55,66,66,10, 69,78,67,79,68,73,78,71,32,49,48,49,55,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,49,48,10,67,56,10,70,67, 10,67,56,10,49,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,55,66,67,10,69,78,67, 79,68,73,78,71,32,49,48,49,55,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,56,10,55,67,10,69,56, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,66,68,10,69,78,67,79,68,73, 78,71,32,49,48,49,55,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,68,48,10,68,56,10,55,67,10,68,56,10,68,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,55,66,69,10,69,78,67,79,68,73,78,71,32, 49,48,49,55,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,65,48,10,53,48,10,50, 56,10,70,52,10,48,52,10,70,52,10,50,56,10,53,48, 10,65,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 55,69,54,10,69,78,67,79,68,73,78,71,32,49,48,50, 49,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,70,56,10,65,48,10,65,48,10,65,48,10,65, 48,10,65,48,10,65,48,10,65,48,10,65,48,10,65,48, 10,70,56,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,55,69,55, 10,69,78,67,79,68,73,78,71,32,49,48,50,49,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 70,56,10,50,56,10,50,56,10,50,56,10,50,56,10,50, 56,10,50,56,10,50,56,10,50,56,10,50,56,10,70,56, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,69,56,10,69,78, 67,79,68,73,78,71,32,49,48,50,49,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,56,10, 49,48,10,49,48,10,50,48,10,50,48,10,52,48,10,50, 48,10,50,48,10,49,48,10,49,48,10,48,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,55,69,57,10,69,78,67,79,68, 73,78,71,32,49,48,50,49,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,52,48,10,50,48,10, 50,48,10,49,48,10,49,48,10,48,56,10,49,48,10,49, 48,10,50,48,10,50,48,10,52,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,55,69,65,10,69,78,67,79,68,73,78,71, 32,49,48,50,49,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,49,52,10,50,56,10,50,56,10, 53,48,10,53,48,10,65,48,10,53,48,10,53,48,10,50, 56,10,50,56,10,49,52,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,55,69,66,10,69,78,67,79,68,73,78,71,32,49,48, 50,49,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,65,48,10,53,48,10,53,48,10,50,56,10, 50,56,10,49,52,10,50,56,10,50,56,10,53,48,10,53, 48,10,65,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,70, 53,10,69,78,67,79,68,73,78,71,32,49,48,50,50,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 52,48,10,70,67,10,52,48,10,50,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,55,70,54,10,69, 78,67,79,68,73,78,71,32,49,48,50,51,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,49,48,10,48,56,10, 70,67,10,48,56,10,49,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,55,70,55,10,69,78,67,79, 68,73,78,71,32,49,48,50,51,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,52,56,10,70,67,10, 52,56,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,55,70,56,10,69,78,67,79,68,73,78, 71,32,49,48,50,51,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,49,48,10,50,48,10,55,67,10,56,48,10,55,67,10, 50,48,10,49,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,70,57,10,69,78,67,79,68,73,78,71,32,49, 48,50,51,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,50,48, 10,49,48,10,70,56,10,48,52,10,70,56,10,49,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,55, 70,65,10,69,78,67,79,68,73,78,71,32,49,48,50,51, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,52,56, 10,70,67,10,56,52,10,70,67,10,52,56,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,55,70,66,10, 69,78,67,79,68,73,78,71,32,49,48,50,51,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,50,52,10,52,52, 10,70,67,10,52,52,10,50,52,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,55,70,67,10,69,78,67, 79,68,73,78,71,32,49,48,50,51,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,57,48,10,56,56,10,70,67, 10,56,56,10,57,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,70,68,10,69,78,67,79,68,73, 78,71,32,49,48,50,51,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,49,52,10,50,52,10,55,67,10,56,52,10,55,67, 10,50,52,10,49,52,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,55,70,69,10,69,78,67,79,68,73,78,71,32, 49,48,50,51,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,65, 48,10,57,48,10,70,56,10,56,52,10,70,56,10,57,48, 10,65,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 55,70,70,10,69,78,67,79,68,73,78,71,32,49,48,50, 51,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 56,10,53,67,10,65,67,10,48,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,48,48, 10,69,78,67,79,68,73,78,71,32,49,48,50,52,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,48,49,10,69,78, 67,79,68,73,78,71,32,49,48,50,52,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,48,50,10,69,78,67,79,68, 73,78,71,32,49,48,50,52,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,67,48,10,67,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,48,51,10,69,78,67,79,68,73,78,71, 32,49,48,50,52,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 67,48,10,67,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,48,52,10,69,78,67,79,68,73,78,71,32,49,48, 50,52,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,67,48,10,67,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,48, 53,10,69,78,67,79,68,73,78,71,32,49,48,50,52,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,67,48,10,67,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,48,54,10,69, 78,67,79,68,73,78,71,32,49,48,50,52,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,67,48,10,67,48,10,48,48,10, 67,48,10,67,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,48,55,10,69,78,67,79, 68,73,78,71,32,49,48,50,52,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,67,48,10,67,48,10,48,48,10,67,48,10, 67,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,48,56,10,69,78,67,79,68,73,78, 71,32,49,48,50,52,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,48,57,10,69,78,67,79,68,73,78,71,32,49, 48,50,52,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 48,65,10,69,78,67,79,68,73,78,71,32,49,48,50,53, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,67,48,10,67,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,48,66,10, 69,78,67,79,68,73,78,71,32,49,48,50,53,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,67,48,10,67,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,48,67,10,69,78,67, 79,68,73,78,71,32,49,48,50,53,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,67,48, 10,67,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,48,68,10,69,78,67,79,68,73, 78,71,32,49,48,50,53,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,67,48,10,67,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,48,69,10,69,78,67,79,68,73,78,71,32, 49,48,50,53,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,67, 48,10,67,48,10,48,48,10,67,48,10,67,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,48,70,10,69,78,67,79,68,73,78,71,32,49,48,50, 53,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,67,48,10,67, 48,10,48,48,10,67,48,10,67,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,49,48, 10,69,78,67,79,68,73,78,71,32,49,48,50,53,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,49,56,10,49,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,49,49,10,69,78, 67,79,68,73,78,71,32,49,48,50,53,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,49,56,10,49,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,49,50,10,69,78,67,79,68, 73,78,71,32,49,48,50,53,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,68,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,49,51,10,69,78,67,79,68,73,78,71, 32,49,48,50,53,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 68,56,10,68,56,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,49,52,10,69,78,67,79,68,73,78,71,32,49,48, 50,54,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,49,56,10, 49,56,10,48,48,10,67,48,10,67,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,49, 53,10,69,78,67,79,68,73,78,71,32,49,48,50,54,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,49,56,10,49,56,10, 48,48,10,67,48,10,67,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,49,54,10,69, 78,67,79,68,73,78,71,32,49,48,50,54,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,68,56,10,68,56,10,48,48,10, 67,48,10,67,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,49,55,10,69,78,67,79, 68,73,78,71,32,49,48,50,54,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,68,56,10,68,56,10,48,48,10,67,48,10, 67,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,49,56,10,69,78,67,79,68,73,78, 71,32,49,48,50,54,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,49,56,10,49,56,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,49,57,10,69,78,67,79,68,73,78,71,32,49, 48,50,54,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,49,56, 10,49,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 49,65,10,69,78,67,79,68,73,78,71,32,49,48,50,54, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,49,66,10, 69,78,67,79,68,73,78,71,32,49,48,50,54,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,68,56,10,68,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,49,67,10,69,78,67, 79,68,73,78,71,32,49,48,50,54,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,49,56,10,49,56,10,48,48,10,67,48, 10,67,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,49,68,10,69,78,67,79,68,73, 78,71,32,49,48,50,54,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,49,56,10,49,56,10,48,48,10,67,48,10,67,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,49,69,10,69,78,67,79,68,73,78,71,32, 49,48,50,55,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,68, 56,10,68,56,10,48,48,10,67,48,10,67,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,49,70,10,69,78,67,79,68,73,78,71,32,49,48,50, 55,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,68,56,10,68, 56,10,48,48,10,67,48,10,67,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,50,48, 10,69,78,67,79,68,73,78,71,32,49,48,50,55,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,49,56,10,49,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,50,49,10,69,78, 67,79,68,73,78,71,32,49,48,50,55,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,48,48,10,48,48,10,48,48,10,49, 56,10,49,56,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,50,50,10,69,78,67,79,68, 73,78,71,32,49,48,50,55,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,67,48,10,67,48,10,48,48,10,49,56,10,49, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,50,51,10,69,78,67,79,68,73,78,71, 32,49,48,50,55,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 67,48,10,67,48,10,48,48,10,49,56,10,49,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,50,52,10,69,78,67,79,68,73,78,71,32,49,48, 50,55,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,68,56,10,68,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,50, 53,10,69,78,67,79,68,73,78,71,32,49,48,50,55,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,68,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,50,54,10,69, 78,67,79,68,73,78,71,32,49,48,50,55,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,67,48,10,67,48,10,48,48,10, 68,56,10,68,56,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,50,55,10,69,78,67,79, 68,73,78,71,32,49,48,50,55,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,67,48,10,67,48,10,48,48,10,68,56,10, 68,56,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,50,56,10,69,78,67,79,68,73,78, 71,32,49,48,50,56,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,49,56,10,49,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,50,57,10,69,78,67,79,68,73,78,71,32,49, 48,50,56,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,49,56,10,49,56,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 50,65,10,69,78,67,79,68,73,78,71,32,49,48,50,56, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,67,48,10,67,48, 10,48,48,10,49,56,10,49,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,50,66,10, 69,78,67,79,68,73,78,71,32,49,48,50,56,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,67,48,10,67,48,10,48,48, 10,49,56,10,49,56,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,50,67,10,69,78,67, 79,68,73,78,71,32,49,48,50,56,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,68,56, 10,68,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,50,68,10,69,78,67,79,68,73, 78,71,32,49,48,50,56,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,68,56,10,68,56, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,50,69,10,69,78,67,79,68,73,78,71,32, 49,48,50,56,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,67, 48,10,67,48,10,48,48,10,68,56,10,68,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,50,70,10,69,78,67,79,68,73,78,71,32,49,48,50, 56,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,67,48,10,67, 48,10,48,48,10,68,56,10,68,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,51,48, 10,69,78,67,79,68,73,78,71,32,49,48,50,56,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,49,56,10,49,56,10,48, 48,10,49,56,10,49,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,51,49,10,69,78, 67,79,68,73,78,71,32,49,48,50,56,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,49,56,10,49,56,10,48,48,10,49, 56,10,49,56,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,51,50,10,69,78,67,79,68, 73,78,71,32,49,48,50,57,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,68,56,10,48,48,10,49,56,10,49, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,51,51,10,69,78,67,79,68,73,78,71, 32,49,48,50,57,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 68,56,10,68,56,10,48,48,10,49,56,10,49,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,51,52,10,69,78,67,79,68,73,78,71,32,49,48, 50,57,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,49,56,10, 49,56,10,48,48,10,68,56,10,68,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,51, 53,10,69,78,67,79,68,73,78,71,32,49,48,50,57,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,49,56,10,49,56,10, 48,48,10,68,56,10,68,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,51,54,10,69, 78,67,79,68,73,78,71,32,49,48,50,57,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,68,56,10,68,56,10,48,48,10, 68,56,10,68,56,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,51,55,10,69,78,67,79, 68,73,78,71,32,49,48,50,57,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,68,56,10,68,56,10,48,48,10,68,56,10, 68,56,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,51,56,10,69,78,67,79,68,73,78, 71,32,49,48,50,57,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,49,56,10,49,56,10,48,48,10,49,56,10,49,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,51,57,10,69,78,67,79,68,73,78,71,32,49, 48,50,57,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,49,56, 10,49,56,10,48,48,10,49,56,10,49,56,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 51,65,10,69,78,67,79,68,73,78,71,32,49,48,50,57, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,49,56,10,49,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,51,66,10, 69,78,67,79,68,73,78,71,32,49,48,50,57,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,68,56,10,68,56,10,48,48, 10,49,56,10,49,56,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,51,67,10,69,78,67, 79,68,73,78,71,32,49,48,51,48,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,49,56,10,49,56,10,48,48,10,68,56, 10,68,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,51,68,10,69,78,67,79,68,73, 78,71,32,49,48,51,48,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,49,56,10,49,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,51,69,10,69,78,67,79,68,73,78,71,32, 49,48,51,48,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,68, 56,10,68,56,10,48,48,10,68,56,10,68,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,51,70,10,69,78,67,79,68,73,78,71,32,49,48,51, 48,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,68,56,10,68, 56,10,48,48,10,68,56,10,68,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,52,48, 10,69,78,67,79,68,73,78,71,32,49,48,51,48,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,67,48,10,67,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,52,49,10,69,78, 67,79,68,73,78,71,32,49,48,51,48,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,67,48,10,67,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,52,50,10,69,78,67,79,68, 73,78,71,32,49,48,51,48,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,67,48,10,67,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,67,48,10,67,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,52,51,10,69,78,67,79,68,73,78,71, 32,49,48,51,48,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 67,48,10,67,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,67,48,10,67,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,52,52,10,69,78,67,79,68,73,78,71,32,49,48, 51,48,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,67,48,10,67,48,10,48,48,10,67, 48,10,67,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,52, 53,10,69,78,67,79,68,73,78,71,32,49,48,51,48,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,67,48,10,67,48,10,48,48,10,67,48,10,67, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,52,54,10,69, 78,67,79,68,73,78,71,32,49,48,51,49,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,67,48,10,67,48,10,48,48,10, 67,48,10,67,48,10,48,48,10,67,48,10,67,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,52,55,10,69,78,67,79, 68,73,78,71,32,49,48,51,49,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,67,48,10,67,48,10,48,48,10,67,48,10, 67,48,10,48,48,10,67,48,10,67,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,52,56,10,69,78,67,79,68,73,78, 71,32,49,48,51,49,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,67,48,10,67,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,52,57,10,69,78,67,79,68,73,78,71,32,49, 48,51,49,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 67,48,10,67,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 52,65,10,69,78,67,79,68,73,78,71,32,49,48,51,49, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,67,48,10,67,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,67,48,10, 67,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,52,66,10, 69,78,67,79,68,73,78,71,32,49,48,51,49,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,67,48,10,67,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,67,48,10,67,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,52,67,10,69,78,67, 79,68,73,78,71,32,49,48,51,49,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,67,48, 10,67,48,10,48,48,10,67,48,10,67,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,52,68,10,69,78,67,79,68,73, 78,71,32,49,48,51,49,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,67,48,10,67,48, 10,48,48,10,67,48,10,67,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,52,69,10,69,78,67,79,68,73,78,71,32, 49,48,51,49,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,67, 48,10,67,48,10,48,48,10,67,48,10,67,48,10,48,48, 10,67,48,10,67,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,52,70,10,69,78,67,79,68,73,78,71,32,49,48,51, 49,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,67,48,10,67, 48,10,48,48,10,67,48,10,67,48,10,48,48,10,67,48, 10,67,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,53,48, 10,69,78,67,79,68,73,78,71,32,49,48,51,50,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,49,56,10,49,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,67,48,10,67,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,53,49,10,69,78, 67,79,68,73,78,71,32,49,48,51,50,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,49,56,10,49,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,67,48,10,67,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,53,50,10,69,78,67,79,68, 73,78,71,32,49,48,51,50,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,68,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,67,48,10,67,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,53,51,10,69,78,67,79,68,73,78,71, 32,49,48,51,50,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 68,56,10,68,56,10,48,48,10,48,48,10,48,48,10,48, 48,10,67,48,10,67,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,53,52,10,69,78,67,79,68,73,78,71,32,49,48, 51,50,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,49,56,10, 49,56,10,48,48,10,67,48,10,67,48,10,48,48,10,67, 48,10,67,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,53, 53,10,69,78,67,79,68,73,78,71,32,49,48,51,50,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,49,56,10,49,56,10, 48,48,10,67,48,10,67,48,10,48,48,10,67,48,10,67, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,53,54,10,69, 78,67,79,68,73,78,71,32,49,48,51,50,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,68,56,10,68,56,10,48,48,10, 67,48,10,67,48,10,48,48,10,67,48,10,67,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,53,55,10,69,78,67,79, 68,73,78,71,32,49,48,51,50,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,68,56,10,68,56,10,48,48,10,67,48,10, 67,48,10,48,48,10,67,48,10,67,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,53,56,10,69,78,67,79,68,73,78, 71,32,49,48,51,50,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,49,56,10,49,56,10,48,48,10,48,48,10,48,48,10, 48,48,10,67,48,10,67,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,53,57,10,69,78,67,79,68,73,78,71,32,49, 48,51,50,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,49,56, 10,49,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 67,48,10,67,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 53,65,10,69,78,67,79,68,73,78,71,32,49,48,51,51, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,48,48,10,48,48,10,48,48,10,67,48,10, 67,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,53,66,10, 69,78,67,79,68,73,78,71,32,49,48,51,51,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,68,56,10,68,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,67,48,10,67,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,53,67,10,69,78,67, 79,68,73,78,71,32,49,48,51,51,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,49,56,10,49,56,10,48,48,10,67,48, 10,67,48,10,48,48,10,67,48,10,67,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,53,68,10,69,78,67,79,68,73, 78,71,32,49,48,51,51,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,49,56,10,49,56,10,48,48,10,67,48,10,67,48, 10,48,48,10,67,48,10,67,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,53,69,10,69,78,67,79,68,73,78,71,32, 49,48,51,51,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,68, 56,10,68,56,10,48,48,10,67,48,10,67,48,10,48,48, 10,67,48,10,67,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,53,70,10,69,78,67,79,68,73,78,71,32,49,48,51, 51,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,68,56,10,68, 56,10,48,48,10,67,48,10,67,48,10,48,48,10,67,48, 10,67,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,54,48, 10,69,78,67,79,68,73,78,71,32,49,48,51,51,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,49,56,10,49,56,10,48,48,10,67,48,10,67,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,54,49,10,69,78, 67,79,68,73,78,71,32,49,48,51,51,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,48,48,10,48,48,10,48,48,10,49, 56,10,49,56,10,48,48,10,67,48,10,67,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,54,50,10,69,78,67,79,68, 73,78,71,32,49,48,51,51,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,67,48,10,67,48,10,48,48,10,49,56,10,49, 56,10,48,48,10,67,48,10,67,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,54,51,10,69,78,67,79,68,73,78,71, 32,49,48,51,51,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 67,48,10,67,48,10,48,48,10,49,56,10,49,56,10,48, 48,10,67,48,10,67,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,54,52,10,69,78,67,79,68,73,78,71,32,49,48, 51,52,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,68,56,10,68,56,10,48,48,10,67, 48,10,67,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,54, 53,10,69,78,67,79,68,73,78,71,32,49,48,51,52,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,68,56,10,48,48,10,67,48,10,67, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,54,54,10,69, 78,67,79,68,73,78,71,32,49,48,51,52,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,67,48,10,67,48,10,48,48,10, 68,56,10,68,56,10,48,48,10,67,48,10,67,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,54,55,10,69,78,67,79, 68,73,78,71,32,49,48,51,52,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,67,48,10,67,48,10,48,48,10,68,56,10, 68,56,10,48,48,10,67,48,10,67,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,54,56,10,69,78,67,79,68,73,78, 71,32,49,48,51,52,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,49,56,10,49,56,10, 48,48,10,67,48,10,67,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,54,57,10,69,78,67,79,68,73,78,71,32,49, 48,51,52,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,49,56,10,49,56,10,48,48,10, 67,48,10,67,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 54,65,10,69,78,67,79,68,73,78,71,32,49,48,51,52, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,67,48,10,67,48, 10,48,48,10,49,56,10,49,56,10,48,48,10,67,48,10, 67,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,54,66,10, 69,78,67,79,68,73,78,71,32,49,48,51,52,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,67,48,10,67,48,10,48,48, 10,49,56,10,49,56,10,48,48,10,67,48,10,67,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,54,67,10,69,78,67, 79,68,73,78,71,32,49,48,51,52,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,68,56, 10,68,56,10,48,48,10,67,48,10,67,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,54,68,10,69,78,67,79,68,73, 78,71,32,49,48,51,52,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,68,56,10,68,56, 10,48,48,10,67,48,10,67,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,54,69,10,69,78,67,79,68,73,78,71,32, 49,48,51,53,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,67, 48,10,67,48,10,48,48,10,68,56,10,68,56,10,48,48, 10,67,48,10,67,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,54,70,10,69,78,67,79,68,73,78,71,32,49,48,51, 53,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,67,48,10,67, 48,10,48,48,10,68,56,10,68,56,10,48,48,10,67,48, 10,67,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,55,48, 10,69,78,67,79,68,73,78,71,32,49,48,51,53,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,49,56,10,49,56,10,48, 48,10,49,56,10,49,56,10,48,48,10,67,48,10,67,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,55,49,10,69,78, 67,79,68,73,78,71,32,49,48,51,53,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,49,56,10,49,56,10,48,48,10,49, 56,10,49,56,10,48,48,10,67,48,10,67,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,55,50,10,69,78,67,79,68, 73,78,71,32,49,48,51,53,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,68,56,10,48,48,10,49,56,10,49, 56,10,48,48,10,67,48,10,67,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,55,51,10,69,78,67,79,68,73,78,71, 32,49,48,51,53,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 68,56,10,68,56,10,48,48,10,49,56,10,49,56,10,48, 48,10,67,48,10,67,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,55,52,10,69,78,67,79,68,73,78,71,32,49,48, 51,53,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,49,56,10, 49,56,10,48,48,10,68,56,10,68,56,10,48,48,10,67, 48,10,67,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,55, 53,10,69,78,67,79,68,73,78,71,32,49,48,51,53,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,49,56,10,49,56,10, 48,48,10,68,56,10,68,56,10,48,48,10,67,48,10,67, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,55,54,10,69, 78,67,79,68,73,78,71,32,49,48,51,53,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,68,56,10,68,56,10,48,48,10, 68,56,10,68,56,10,48,48,10,67,48,10,67,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,55,55,10,69,78,67,79, 68,73,78,71,32,49,48,51,53,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,68,56,10,68,56,10,48,48,10,68,56,10, 68,56,10,48,48,10,67,48,10,67,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,55,56,10,69,78,67,79,68,73,78, 71,32,49,48,51,54,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,49,56,10,49,56,10,48,48,10,49,56,10,49,56,10, 48,48,10,67,48,10,67,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,55,57,10,69,78,67,79,68,73,78,71,32,49, 48,51,54,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,49,56, 10,49,56,10,48,48,10,49,56,10,49,56,10,48,48,10, 67,48,10,67,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 55,65,10,69,78,67,79,68,73,78,71,32,49,48,51,54, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,49,56,10,49,56,10,48,48,10,67,48,10, 67,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,55,66,10, 69,78,67,79,68,73,78,71,32,49,48,51,54,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,68,56,10,68,56,10,48,48, 10,49,56,10,49,56,10,48,48,10,67,48,10,67,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,55,67,10,69,78,67, 79,68,73,78,71,32,49,48,51,54,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,49,56,10,49,56,10,48,48,10,68,56, 10,68,56,10,48,48,10,67,48,10,67,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,55,68,10,69,78,67,79,68,73, 78,71,32,49,48,51,54,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,49,56,10,49,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,67,48,10,67,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,55,69,10,69,78,67,79,68,73,78,71,32, 49,48,51,54,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,68, 56,10,68,56,10,48,48,10,68,56,10,68,56,10,48,48, 10,67,48,10,67,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,55,70,10,69,78,67,79,68,73,78,71,32,49,48,51, 54,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,68,56,10,68, 56,10,48,48,10,68,56,10,68,56,10,48,48,10,67,48, 10,67,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,56,48, 10,69,78,67,79,68,73,78,71,32,49,48,51,54,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,49,56,10,49,56, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,56,49,10,69,78, 67,79,68,73,78,71,32,49,48,51,54,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,49,56,10,49,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,56,50,10,69,78,67,79,68, 73,78,71,32,49,48,51,55,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,67,48,10,67,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,49,56,10,49,56,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,56,51,10,69,78,67,79,68,73,78,71, 32,49,48,51,55,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 67,48,10,67,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,49,56,10,49,56,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,56,52,10,69,78,67,79,68,73,78,71,32,49,48, 51,55,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,67,48,10,67,48,10,48,48,10,49, 56,10,49,56,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,56, 53,10,69,78,67,79,68,73,78,71,32,49,48,51,55,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,67,48,10,67,48,10,48,48,10,49,56,10,49, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,56,54,10,69, 78,67,79,68,73,78,71,32,49,48,51,55,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,67,48,10,67,48,10,48,48,10, 67,48,10,67,48,10,48,48,10,49,56,10,49,56,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,56,55,10,69,78,67,79, 68,73,78,71,32,49,48,51,55,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,67,48,10,67,48,10,48,48,10,67,48,10, 67,48,10,48,48,10,49,56,10,49,56,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,56,56,10,69,78,67,79,68,73,78, 71,32,49,48,51,55,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,49,56,10,49,56,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,56,57,10,69,78,67,79,68,73,78,71,32,49, 48,51,55,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 49,56,10,49,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 56,65,10,69,78,67,79,68,73,78,71,32,49,48,51,55, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,67,48,10,67,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,49,56,10, 49,56,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,56,66,10, 69,78,67,79,68,73,78,71,32,49,48,51,55,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,67,48,10,67,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,49,56,10,49,56,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,56,67,10,69,78,67, 79,68,73,78,71,32,49,48,51,56,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,67,48, 10,67,48,10,48,48,10,49,56,10,49,56,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,56,68,10,69,78,67,79,68,73, 78,71,32,49,48,51,56,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,67,48,10,67,48, 10,48,48,10,49,56,10,49,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,56,69,10,69,78,67,79,68,73,78,71,32, 49,48,51,56,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,67, 48,10,67,48,10,48,48,10,67,48,10,67,48,10,48,48, 10,49,56,10,49,56,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,56,70,10,69,78,67,79,68,73,78,71,32,49,48,51, 56,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,67,48,10,67, 48,10,48,48,10,67,48,10,67,48,10,48,48,10,49,56, 10,49,56,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,57,48, 10,69,78,67,79,68,73,78,71,32,49,48,51,56,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,49,56,10,49,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,49,56,10,49,56, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,57,49,10,69,78, 67,79,68,73,78,71,32,49,48,51,56,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,49,56,10,49,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,49,56,10,49,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,57,50,10,69,78,67,79,68, 73,78,71,32,49,48,51,56,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,68,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,49,56,10,49,56,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,57,51,10,69,78,67,79,68,73,78,71, 32,49,48,51,56,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 68,56,10,68,56,10,48,48,10,48,48,10,48,48,10,48, 48,10,49,56,10,49,56,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,57,52,10,69,78,67,79,68,73,78,71,32,49,48, 51,56,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,49,56,10, 49,56,10,48,48,10,67,48,10,67,48,10,48,48,10,49, 56,10,49,56,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,57, 53,10,69,78,67,79,68,73,78,71,32,49,48,51,56,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,49,56,10,49,56,10, 48,48,10,67,48,10,67,48,10,48,48,10,49,56,10,49, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,57,54,10,69, 78,67,79,68,73,78,71,32,49,48,51,57,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,68,56,10,68,56,10,48,48,10, 67,48,10,67,48,10,48,48,10,49,56,10,49,56,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,57,55,10,69,78,67,79, 68,73,78,71,32,49,48,51,57,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,68,56,10,68,56,10,48,48,10,67,48,10, 67,48,10,48,48,10,49,56,10,49,56,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,57,56,10,69,78,67,79,68,73,78, 71,32,49,48,51,57,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,49,56,10,49,56,10,48,48,10,48,48,10,48,48,10, 48,48,10,49,56,10,49,56,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,57,57,10,69,78,67,79,68,73,78,71,32,49, 48,51,57,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,49,56, 10,49,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 49,56,10,49,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 57,65,10,69,78,67,79,68,73,78,71,32,49,48,51,57, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,48,48,10,48,48,10,48,48,10,49,56,10, 49,56,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,57,66,10, 69,78,67,79,68,73,78,71,32,49,48,51,57,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,68,56,10,68,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,49,56,10,49,56,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,57,67,10,69,78,67, 79,68,73,78,71,32,49,48,51,57,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,49,56,10,49,56,10,48,48,10,67,48, 10,67,48,10,48,48,10,49,56,10,49,56,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,57,68,10,69,78,67,79,68,73, 78,71,32,49,48,51,57,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,49,56,10,49,56,10,48,48,10,67,48,10,67,48, 10,48,48,10,49,56,10,49,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,57,69,10,69,78,67,79,68,73,78,71,32, 49,48,51,57,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,68, 56,10,68,56,10,48,48,10,67,48,10,67,48,10,48,48, 10,49,56,10,49,56,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,57,70,10,69,78,67,79,68,73,78,71,32,49,48,51, 57,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,68,56,10,68, 56,10,48,48,10,67,48,10,67,48,10,48,48,10,49,56, 10,49,56,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,65,48, 10,69,78,67,79,68,73,78,71,32,49,48,52,48,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,49,56,10,49,56,10,48,48,10,49,56,10,49,56, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,65,49,10,69,78, 67,79,68,73,78,71,32,49,48,52,48,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,48,48,10,48,48,10,48,48,10,49, 56,10,49,56,10,48,48,10,49,56,10,49,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,65,50,10,69,78,67,79,68, 73,78,71,32,49,48,52,48,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,67,48,10,67,48,10,48,48,10,49,56,10,49, 56,10,48,48,10,49,56,10,49,56,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,65,51,10,69,78,67,79,68,73,78,71, 32,49,48,52,48,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 67,48,10,67,48,10,48,48,10,49,56,10,49,56,10,48, 48,10,49,56,10,49,56,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,65,52,10,69,78,67,79,68,73,78,71,32,49,48, 52,48,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,68,56,10,68,56,10,48,48,10,49, 56,10,49,56,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,65, 53,10,69,78,67,79,68,73,78,71,32,49,48,52,48,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,68,56,10,48,48,10,49,56,10,49, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,65,54,10,69, 78,67,79,68,73,78,71,32,49,48,52,48,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,67,48,10,67,48,10,48,48,10, 68,56,10,68,56,10,48,48,10,49,56,10,49,56,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,65,55,10,69,78,67,79, 68,73,78,71,32,49,48,52,48,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,67,48,10,67,48,10,48,48,10,68,56,10, 68,56,10,48,48,10,49,56,10,49,56,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,65,56,10,69,78,67,79,68,73,78, 71,32,49,48,52,48,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,49,56,10,49,56,10, 48,48,10,49,56,10,49,56,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,65,57,10,69,78,67,79,68,73,78,71,32,49, 48,52,48,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,49,56,10,49,56,10,48,48,10, 49,56,10,49,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 65,65,10,69,78,67,79,68,73,78,71,32,49,48,52,49, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,67,48,10,67,48, 10,48,48,10,49,56,10,49,56,10,48,48,10,49,56,10, 49,56,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,65,66,10, 69,78,67,79,68,73,78,71,32,49,48,52,49,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,67,48,10,67,48,10,48,48, 10,49,56,10,49,56,10,48,48,10,49,56,10,49,56,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,65,67,10,69,78,67, 79,68,73,78,71,32,49,48,52,49,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,68,56, 10,68,56,10,48,48,10,49,56,10,49,56,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,65,68,10,69,78,67,79,68,73, 78,71,32,49,48,52,49,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,68,56,10,68,56, 10,48,48,10,49,56,10,49,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,65,69,10,69,78,67,79,68,73,78,71,32, 49,48,52,49,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,67, 48,10,67,48,10,48,48,10,68,56,10,68,56,10,48,48, 10,49,56,10,49,56,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,65,70,10,69,78,67,79,68,73,78,71,32,49,48,52, 49,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,67,48,10,67, 48,10,48,48,10,68,56,10,68,56,10,48,48,10,49,56, 10,49,56,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,66,48, 10,69,78,67,79,68,73,78,71,32,49,48,52,49,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,49,56,10,49,56,10,48, 48,10,49,56,10,49,56,10,48,48,10,49,56,10,49,56, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,66,49,10,69,78, 67,79,68,73,78,71,32,49,48,52,49,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,49,56,10,49,56,10,48,48,10,49, 56,10,49,56,10,48,48,10,49,56,10,49,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,66,50,10,69,78,67,79,68, 73,78,71,32,49,48,52,49,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,68,56,10,48,48,10,49,56,10,49, 56,10,48,48,10,49,56,10,49,56,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,66,51,10,69,78,67,79,68,73,78,71, 32,49,48,52,49,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 68,56,10,68,56,10,48,48,10,49,56,10,49,56,10,48, 48,10,49,56,10,49,56,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,66,52,10,69,78,67,79,68,73,78,71,32,49,48, 52,50,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,49,56,10, 49,56,10,48,48,10,68,56,10,68,56,10,48,48,10,49, 56,10,49,56,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,66, 53,10,69,78,67,79,68,73,78,71,32,49,48,52,50,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,49,56,10,49,56,10, 48,48,10,68,56,10,68,56,10,48,48,10,49,56,10,49, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,66,54,10,69, 78,67,79,68,73,78,71,32,49,48,52,50,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,68,56,10,68,56,10,48,48,10, 68,56,10,68,56,10,48,48,10,49,56,10,49,56,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,66,55,10,69,78,67,79, 68,73,78,71,32,49,48,52,50,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,68,56,10,68,56,10,48,48,10,68,56,10, 68,56,10,48,48,10,49,56,10,49,56,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,66,56,10,69,78,67,79,68,73,78, 71,32,49,48,52,50,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,49,56,10,49,56,10,48,48,10,49,56,10,49,56,10, 48,48,10,49,56,10,49,56,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,66,57,10,69,78,67,79,68,73,78,71,32,49, 48,52,50,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,49,56, 10,49,56,10,48,48,10,49,56,10,49,56,10,48,48,10, 49,56,10,49,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 66,65,10,69,78,67,79,68,73,78,71,32,49,48,52,50, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,49,56,10,49,56,10,48,48,10,49,56,10, 49,56,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,66,66,10, 69,78,67,79,68,73,78,71,32,49,48,52,50,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,68,56,10,68,56,10,48,48, 10,49,56,10,49,56,10,48,48,10,49,56,10,49,56,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,66,67,10,69,78,67, 79,68,73,78,71,32,49,48,52,50,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,49,56,10,49,56,10,48,48,10,68,56, 10,68,56,10,48,48,10,49,56,10,49,56,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,66,68,10,69,78,67,79,68,73, 78,71,32,49,48,52,50,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,49,56,10,49,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,49,56,10,49,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,66,69,10,69,78,67,79,68,73,78,71,32, 49,48,52,51,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,68, 56,10,68,56,10,48,48,10,68,56,10,68,56,10,48,48, 10,49,56,10,49,56,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,66,70,10,69,78,67,79,68,73,78,71,32,49,48,52, 51,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,68,56,10,68, 56,10,48,48,10,68,56,10,68,56,10,48,48,10,49,56, 10,49,56,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,67,48, 10,69,78,67,79,68,73,78,71,32,49,48,52,51,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,68,56,10,68,56, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,67,49,10,69,78, 67,79,68,73,78,71,32,49,48,52,51,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,68,56,10,68,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,67,50,10,69,78,67,79,68, 73,78,71,32,49,48,52,51,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,67,48,10,67,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,68,56,10,68,56,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,67,51,10,69,78,67,79,68,73,78,71, 32,49,48,52,51,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 67,48,10,67,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,68,56,10,68,56,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,67,52,10,69,78,67,79,68,73,78,71,32,49,48, 52,51,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,67,48,10,67,48,10,48,48,10,68, 56,10,68,56,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,67, 53,10,69,78,67,79,68,73,78,71,32,49,48,52,51,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,67,48,10,67,48,10,48,48,10,68,56,10,68, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,67,54,10,69, 78,67,79,68,73,78,71,32,49,48,52,51,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,67,48,10,67,48,10,48,48,10, 67,48,10,67,48,10,48,48,10,68,56,10,68,56,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,67,55,10,69,78,67,79, 68,73,78,71,32,49,48,52,51,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,67,48,10,67,48,10,48,48,10,67,48,10, 67,48,10,48,48,10,68,56,10,68,56,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,67,56,10,69,78,67,79,68,73,78, 71,32,49,48,52,52,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,68,56,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,67,57,10,69,78,67,79,68,73,78,71,32,49, 48,52,52,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 68,56,10,68,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 67,65,10,69,78,67,79,68,73,78,71,32,49,48,52,52, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,67,48,10,67,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,68,56,10, 68,56,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,67,66,10, 69,78,67,79,68,73,78,71,32,49,48,52,52,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,67,48,10,67,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,68,56,10,68,56,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,67,67,10,69,78,67, 79,68,73,78,71,32,49,48,52,52,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,67,48, 10,67,48,10,48,48,10,68,56,10,68,56,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,67,68,10,69,78,67,79,68,73, 78,71,32,49,48,52,52,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,67,48,10,67,48, 10,48,48,10,68,56,10,68,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,67,69,10,69,78,67,79,68,73,78,71,32, 49,48,52,52,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,67, 48,10,67,48,10,48,48,10,67,48,10,67,48,10,48,48, 10,68,56,10,68,56,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,67,70,10,69,78,67,79,68,73,78,71,32,49,48,52, 52,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,67,48,10,67, 48,10,48,48,10,67,48,10,67,48,10,48,48,10,68,56, 10,68,56,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,68,48, 10,69,78,67,79,68,73,78,71,32,49,48,52,52,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,49,56,10,49,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,68,56,10,68,56, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,68,49,10,69,78, 67,79,68,73,78,71,32,49,48,52,52,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,49,56,10,49,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,68,56,10,68,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,68,50,10,69,78,67,79,68, 73,78,71,32,49,48,52,53,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,68,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,68,56,10,68,56,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,68,51,10,69,78,67,79,68,73,78,71, 32,49,48,52,53,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 68,56,10,68,56,10,48,48,10,48,48,10,48,48,10,48, 48,10,68,56,10,68,56,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,68,52,10,69,78,67,79,68,73,78,71,32,49,48, 52,53,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,49,56,10, 49,56,10,48,48,10,67,48,10,67,48,10,48,48,10,68, 56,10,68,56,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,68, 53,10,69,78,67,79,68,73,78,71,32,49,48,52,53,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,49,56,10,49,56,10, 48,48,10,67,48,10,67,48,10,48,48,10,68,56,10,68, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,68,54,10,69, 78,67,79,68,73,78,71,32,49,48,52,53,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,68,56,10,68,56,10,48,48,10, 67,48,10,67,48,10,48,48,10,68,56,10,68,56,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,68,55,10,69,78,67,79, 68,73,78,71,32,49,48,52,53,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,68,56,10,68,56,10,48,48,10,67,48,10, 67,48,10,48,48,10,68,56,10,68,56,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,68,56,10,69,78,67,79,68,73,78, 71,32,49,48,52,53,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,49,56,10,49,56,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,68,56,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,68,57,10,69,78,67,79,68,73,78,71,32,49, 48,52,53,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,49,56, 10,49,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 68,56,10,68,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 68,65,10,69,78,67,79,68,73,78,71,32,49,48,52,53, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,48,48,10,48,48,10,48,48,10,68,56,10, 68,56,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,68,66,10, 69,78,67,79,68,73,78,71,32,49,48,52,53,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,68,56,10,68,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,68,56,10,68,56,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,68,67,10,69,78,67, 79,68,73,78,71,32,49,48,52,54,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,49,56,10,49,56,10,48,48,10,67,48, 10,67,48,10,48,48,10,68,56,10,68,56,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,68,68,10,69,78,67,79,68,73, 78,71,32,49,48,52,54,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,49,56,10,49,56,10,48,48,10,67,48,10,67,48, 10,48,48,10,68,56,10,68,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,68,69,10,69,78,67,79,68,73,78,71,32, 49,48,52,54,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,68, 56,10,68,56,10,48,48,10,67,48,10,67,48,10,48,48, 10,68,56,10,68,56,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,68,70,10,69,78,67,79,68,73,78,71,32,49,48,52, 54,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,68,56,10,68, 56,10,48,48,10,67,48,10,67,48,10,48,48,10,68,56, 10,68,56,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,69,48, 10,69,78,67,79,68,73,78,71,32,49,48,52,54,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,49,56,10,49,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,69,49,10,69,78, 67,79,68,73,78,71,32,49,48,52,54,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,48,48,10,48,48,10,48,48,10,49, 56,10,49,56,10,48,48,10,68,56,10,68,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,69,50,10,69,78,67,79,68, 73,78,71,32,49,48,52,54,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,67,48,10,67,48,10,48,48,10,49,56,10,49, 56,10,48,48,10,68,56,10,68,56,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,69,51,10,69,78,67,79,68,73,78,71, 32,49,48,52,54,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 67,48,10,67,48,10,48,48,10,49,56,10,49,56,10,48, 48,10,68,56,10,68,56,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,69,52,10,69,78,67,79,68,73,78,71,32,49,48, 52,54,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,68,56,10,68,56,10,48,48,10,68, 56,10,68,56,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,69, 53,10,69,78,67,79,68,73,78,71,32,49,48,52,54,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,68,56,10,48,48,10,68,56,10,68, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,69,54,10,69, 78,67,79,68,73,78,71,32,49,48,52,55,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,67,48,10,67,48,10,48,48,10, 68,56,10,68,56,10,48,48,10,68,56,10,68,56,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,69,55,10,69,78,67,79, 68,73,78,71,32,49,48,52,55,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,67,48,10,67,48,10,48,48,10,68,56,10, 68,56,10,48,48,10,68,56,10,68,56,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,69,56,10,69,78,67,79,68,73,78, 71,32,49,48,52,55,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,49,56,10,49,56,10, 48,48,10,68,56,10,68,56,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,69,57,10,69,78,67,79,68,73,78,71,32,49, 48,52,55,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,49,56,10,49,56,10,48,48,10, 68,56,10,68,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 69,65,10,69,78,67,79,68,73,78,71,32,49,48,52,55, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,67,48,10,67,48, 10,48,48,10,49,56,10,49,56,10,48,48,10,68,56,10, 68,56,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,69,66,10, 69,78,67,79,68,73,78,71,32,49,48,52,55,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,67,48,10,67,48,10,48,48, 10,49,56,10,49,56,10,48,48,10,68,56,10,68,56,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,69,67,10,69,78,67, 79,68,73,78,71,32,49,48,52,55,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,68,56, 10,68,56,10,48,48,10,68,56,10,68,56,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,69,68,10,69,78,67,79,68,73, 78,71,32,49,48,52,55,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,68,56,10,68,56, 10,48,48,10,68,56,10,68,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,69,69,10,69,78,67,79,68,73,78,71,32, 49,48,52,55,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,67, 48,10,67,48,10,48,48,10,68,56,10,68,56,10,48,48, 10,68,56,10,68,56,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,69,70,10,69,78,67,79,68,73,78,71,32,49,48,52, 55,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,67,48,10,67, 48,10,48,48,10,68,56,10,68,56,10,48,48,10,68,56, 10,68,56,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,70,48, 10,69,78,67,79,68,73,78,71,32,49,48,52,56,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,49,56,10,49,56,10,48, 48,10,49,56,10,49,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,70,49,10,69,78, 67,79,68,73,78,71,32,49,48,52,56,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,49,56,10,49,56,10,48,48,10,49, 56,10,49,56,10,48,48,10,68,56,10,68,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,70,50,10,69,78,67,79,68, 73,78,71,32,49,48,52,56,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,68,56,10,48,48,10,49,56,10,49, 56,10,48,48,10,68,56,10,68,56,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,70,51,10,69,78,67,79,68,73,78,71, 32,49,48,52,56,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 68,56,10,68,56,10,48,48,10,49,56,10,49,56,10,48, 48,10,68,56,10,68,56,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,70,52,10,69,78,67,79,68,73,78,71,32,49,48, 52,56,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,49,56,10, 49,56,10,48,48,10,68,56,10,68,56,10,48,48,10,68, 56,10,68,56,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,70, 53,10,69,78,67,79,68,73,78,71,32,49,48,52,56,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,49,56,10,49,56,10, 48,48,10,68,56,10,68,56,10,48,48,10,68,56,10,68, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,70,54,10,69, 78,67,79,68,73,78,71,32,49,48,52,56,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,68,56,10,68,56,10,48,48,10, 68,56,10,68,56,10,48,48,10,68,56,10,68,56,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,70,55,10,69,78,67,79, 68,73,78,71,32,49,48,52,56,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,68,56,10,68,56,10,48,48,10,68,56,10, 68,56,10,48,48,10,68,56,10,68,56,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,70,56,10,69,78,67,79,68,73,78, 71,32,49,48,52,56,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,49,56,10,49,56,10,48,48,10,49,56,10,49,56,10, 48,48,10,68,56,10,68,56,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,70,57,10,69,78,67,79,68,73,78,71,32,49, 48,52,56,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,49,56, 10,49,56,10,48,48,10,49,56,10,49,56,10,48,48,10, 68,56,10,68,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 70,65,10,69,78,67,79,68,73,78,71,32,49,48,52,57, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,49,56,10,49,56,10,48,48,10,68,56,10, 68,56,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,70,66,10, 69,78,67,79,68,73,78,71,32,49,48,52,57,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,68,56,10,68,56,10,48,48, 10,49,56,10,49,56,10,48,48,10,68,56,10,68,56,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,70,67,10,69,78,67, 79,68,73,78,71,32,49,48,52,57,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,49,56,10,49,56,10,48,48,10,68,56, 10,68,56,10,48,48,10,68,56,10,68,56,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,70,68,10,69,78,67,79,68,73, 78,71,32,49,48,52,57,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,49,56,10,49,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,68,56,10,68,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,70,69,10,69,78,67,79,68,73,78,71,32, 49,48,52,57,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,68, 56,10,68,56,10,48,48,10,68,56,10,68,56,10,48,48, 10,68,56,10,68,56,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,70,70,10,69,78,67,79,68,73,78,71,32,49,48,52, 57,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,68,56,10,68, 56,10,48,48,10,68,56,10,68,56,10,48,48,10,68,56, 10,68,56,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,57,48,54, 10,69,78,67,79,68,73,78,71,32,49,48,53,48,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,49,52,10,50,52,10,55, 67,10,56,52,10,55,67,10,50,52,10,49,52,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,57,48,55,10,69,78, 67,79,68,73,78,71,32,49,48,53,48,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,65,48,10,57,48,10,70,56,10,56, 52,10,70,56,10,57,48,10,65,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,57,56,51,10,69,78,67,79,68, 73,78,71,32,49,48,54,50,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,51,56,10,53,48,10, 53,48,10,53,48,10,53,48,10,57,48,10,53,48,10,53, 48,10,53,48,10,53,48,10,51,56,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,57,56,52,10,69,78,67,79,68,73,78,71, 32,49,48,54,50,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,69,48,10,53,48,10,53,48,10, 53,48,10,53,48,10,52,56,10,53,48,10,53,48,10,53, 48,10,53,48,10,69,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,57,56,53,10,69,78,67,79,68,73,78,71,32,49,48, 54,50,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,56,10,49,48,10,51,48,10,51,48,10, 53,48,10,53,48,10,53,48,10,51,48,10,51,48,10,49, 48,10,48,56,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,57,56, 54,10,69,78,67,79,68,73,78,71,32,49,48,54,51,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,52,48,10,50,48,10,51,48,10,51,48,10,50,56,10, 50,56,10,50,56,10,51,48,10,51,48,10,50,48,10,52, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,57,56,55,10,69, 78,67,79,68,73,78,71,32,49,48,54,51,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,49,48, 10,51,48,10,51,48,10,53,48,10,53,48,10,53,48,10, 53,48,10,53,48,10,51,48,10,51,48,10,49,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,57,56,56,10,69,78,67,79, 68,73,78,71,32,49,48,54,51,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,52,48,10,54,48, 10,54,48,10,53,48,10,53,48,10,53,48,10,53,48,10, 53,48,10,54,48,10,54,48,10,52,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,57,56,57,10,69,78,67,79,68,73,78, 71,32,49,48,54,51,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,56,10,49,56,10,49,56, 10,50,56,10,50,56,10,52,56,10,50,56,10,50,56,10, 49,56,10,49,56,10,48,56,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,57,56,65,10,69,78,67,79,68,73,78,71,32,49, 48,54,51,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,52,48,10,54,48,10,54,48,10,53,48, 10,53,48,10,52,56,10,53,48,10,53,48,10,54,48,10, 54,48,10,52,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,57, 56,66,10,69,78,67,79,68,73,78,71,32,49,48,54,51, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,55,48,10,52,48,10,52,48,10,52,48,10,52,48, 10,52,48,10,52,48,10,52,48,10,52,48,10,55,48,10, 48,48,10,55,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,57,56,67,10, 69,78,67,79,68,73,78,71,32,49,48,54,51,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,55, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,49,48, 10,49,48,10,49,48,10,49,48,10,55,48,10,48,48,10, 55,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,57,56,68,10,69,78,67, 79,68,73,78,71,32,49,48,54,51,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,55,48,10,54, 48,10,53,48,10,52,48,10,52,48,10,52,48,10,52,48, 10,52,48,10,52,48,10,52,48,10,55,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,57,56,69,10,69,78,67,79,68,73, 78,71,32,49,48,54,51,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,55,48,10,49,48,10,49, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,49,48, 10,53,48,10,51,48,10,55,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,57,56,70,10,69,78,67,79,68,73,78,71,32, 49,48,54,51,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,55,48,10,52,48,10,52,48,10,52, 48,10,52,48,10,52,48,10,52,48,10,52,48,10,53,48, 10,54,48,10,55,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 57,57,48,10,69,78,67,79,68,73,78,71,32,49,48,54, 52,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,55,48,10,51,48,10,53,48,10,49,48,10,49, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,49,48, 10,55,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,57,57,49, 10,69,78,67,79,68,73,78,71,32,49,48,54,52,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,56,10,49,48,10,49,48,10,50,48,10,50,48,10,52, 56,10,50,48,10,50,48,10,49,48,10,49,48,10,48,56, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,57,57,50,10,69,78, 67,79,68,73,78,71,32,49,48,54,52,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,52,48,10, 50,48,10,50,48,10,49,48,10,49,48,10,52,56,10,49, 48,10,49,48,10,50,48,10,50,48,10,52,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,57,57,51,10,69,78,67,79,68, 73,78,71,32,49,48,54,52,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,49,48,10, 50,48,10,51,56,10,54,48,10,65,48,10,54,48,10,51, 56,10,50,48,10,49,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,57,57,52,10,69,78,67,79,68,73,78,71, 32,49,48,54,52,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,52,48,10,50,48,10, 69,48,10,51,48,10,50,56,10,51,48,10,69,48,10,50, 48,10,52,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,57,57,53,10,69,78,67,79,68,73,78,71,32,49,48, 54,52,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,56,10,53,48,10,68,48,10, 55,48,10,53,56,10,55,48,10,68,48,10,53,48,10,50, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,57,57, 54,10,69,78,67,79,68,73,78,71,32,49,48,54,52,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,65,48,10,53,48,10,53,56,10,55,48,10, 68,48,10,55,48,10,53,56,10,53,48,10,65,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,57,57,55,10,69, 78,67,79,68,73,78,71,32,49,48,54,52,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,49,48, 10,50,48,10,54,48,10,54,48,10,54,48,10,54,48,10, 54,48,10,54,48,10,54,48,10,50,48,10,49,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,57,57,56,10,69,78,67,79, 68,73,78,71,32,49,48,54,52,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,52,48,10,50,48, 10,51,48,10,51,48,10,51,48,10,51,48,10,51,48,10, 51,48,10,51,48,10,50,48,10,52,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,57,70,67,10,69,78,67,79,68,73,78, 71,32,49,48,55,52,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,56,10,48,56,10,49,48, 10,49,48,10,50,48,10,52,48,10,50,48,10,49,48,10, 49,48,10,48,56,10,48,56,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,57,70,68,10,69,78,67,79,68,73,78,71,32,49, 48,55,52,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,52,48,10,52,48,10,50,48,10,50,48, 10,49,48,10,48,56,10,49,48,10,50,48,10,50,48,10, 52,48,10,52,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,65, 48,48,10,69,78,67,79,68,73,78,71,32,49,48,55,53, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,65,56, 10,65,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 55,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,65,48,49,10, 69,78,67,79,68,73,78,71,32,49,48,55,53,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,55, 48,10,65,56,10,65,56,10,65,56,10,65,56,10,70,56, 10,65,56,10,65,56,10,65,56,10,65,56,10,55,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,65,48,50,10,69,78,67, 79,68,73,78,71,32,49,48,55,53,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,55,48,10,56, 56,10,68,56,10,68,56,10,65,56,10,65,56,10,65,56, 10,68,56,10,68,56,10,56,56,10,55,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,65,48,51,10,69,78,67,79,68,73, 78,71,32,49,48,55,53,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,56,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,65,56, 10,65,56,10,56,56,10,55,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,65,48,52,10,69,78,67,79,68,73,78,71,32, 49,48,55,53,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,56,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,65,56,10,65,56,10,70,56,10,65,56, 10,65,56,10,55,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 65,48,53,10,69,78,67,79,68,73,78,71,32,49,48,55, 53,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,70,56,10,56,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,65,48,54, 10,69,78,67,79,68,73,78,71,32,49,48,55,53,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 56,56,10,56,56,10,56,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,70,56, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,65,48,57,10,69,78, 67,79,68,73,78,71,32,49,48,55,54,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,56,56,10, 56,56,10,53,48,10,53,48,10,50,48,10,50,48,10,50, 48,10,53,48,10,53,48,10,56,56,10,56,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,65,49,68,10,69,78,67,79,68, 73,78,71,32,49,48,55,56,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 56,52,10,67,67,10,66,52,10,66,52,10,66,52,10,67, 67,10,56,52,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,65,51,70,10,69,78,67,79,68,73,78,71, 32,49,48,56,49,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,69,67,10,52,56,10, 52,56,10,52,56,10,52,56,10,52,56,10,52,56,10,52, 56,10,70,67,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 51,48,48,48,10,69,78,67,79,68,73,78,71,32,49,50, 50,56,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,51,48,48, 49,10,69,78,67,79,68,73,78,71,32,49,50,50,56,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,52,48,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,51,48,48,50,10,69, 78,67,79,68,73,78,71,32,49,50,50,57,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,50,48,10,53,48,10,50,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,51,48,48,51,10,69,78,67,79, 68,73,78,71,32,49,50,50,57,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,50,56,10,50,56,10,53,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,51,48,48,53,10,69,78,67,79,68,73,78, 71,32,49,50,50,57,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,50,48,10,50,48,10,55,56,10,52,56,10, 66,48,10,57,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,48,48,54,10,69,78,67,79,68,73,78,71,32,49, 50,50,57,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,56,10,53,48,10,65,48,10,66,48,10,67,48,10, 56,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,51,48, 48,56,10,69,78,67,79,68,73,78,71,32,49,50,50,57, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,56,10,49,48,10,49,48,10,50,48,10,50,48, 10,52,48,10,50,48,10,50,48,10,49,48,10,49,48,10, 48,56,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,51,48,48,57,10, 69,78,67,79,68,73,78,71,32,49,50,50,57,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,52, 48,10,50,48,10,50,48,10,49,48,10,49,48,10,48,56, 10,49,48,10,49,48,10,50,48,10,50,48,10,52,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,51,48,48,65,10,69,78,67, 79,68,73,78,71,32,49,50,50,57,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,52,10,50, 56,10,50,56,10,53,48,10,53,48,10,65,48,10,53,48, 10,53,48,10,50,56,10,50,56,10,49,52,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,51,48,48,66,10,69,78,67,79,68,73, 78,71,32,49,50,50,57,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,65,48,10,53,48,10,53, 48,10,50,56,10,50,56,10,49,52,10,50,56,10,50,56, 10,53,48,10,53,48,10,65,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,51,48,48,67,10,69,78,67,79,68,73,78,71,32, 49,50,51,48,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,48,10,52,48,10,52, 48,10,52,48,10,52,48,10,52,48,10,52,48,10,52,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,51, 48,48,68,10,69,78,67,79,68,73,78,71,32,49,50,51, 48,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,49,48,10,49,48,10,49, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,55,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,51,48,48,69, 10,69,78,67,79,68,73,78,71,32,49,50,51,48,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 70,56,10,56,56,10,66,56,10,65,48,10,65,48,10,65, 48,10,65,48,10,65,48,10,65,48,10,69,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,51,48,48,70,10,69,78, 67,79,68,73,78,71,32,49,50,51,48,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 51,56,10,50,56,10,50,56,10,50,56,10,50,56,10,50, 56,10,50,56,10,69,56,10,56,56,10,70,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,51,48,49,48,10,69,78,67,79,68, 73,78,71,32,49,50,51,48,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,55,56,10,55,48,10, 55,48,10,54,48,10,54,48,10,54,48,10,54,48,10,54, 48,10,55,48,10,55,48,10,55,56,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,51,48,49,49,10,69,78,67,79,68,73,78,71, 32,49,50,51,48,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,55,56,10,51,56,10,51,56,10, 49,56,10,49,56,10,49,56,10,49,56,10,49,56,10,51, 56,10,51,56,10,55,56,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 51,48,49,50,10,69,78,67,79,68,73,78,71,32,49,50, 51,48,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,56,10,48,48,10,70,56,10,50,48,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,51,48,49, 51,10,69,78,67,79,68,73,78,71,32,49,50,51,48,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,56,10,70,56,10,48,48,10,70,56,10,70,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,51,48,49,52,10,69, 78,67,79,68,73,78,71,32,49,50,51,48,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,49,48, 10,50,48,10,52,48,10,52,48,10,52,48,10,52,48,10, 52,48,10,52,48,10,52,48,10,50,48,10,49,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,51,48,49,53,10,69,78,67,79, 68,73,78,71,32,49,50,51,48,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,52,48,10,50,48, 10,49,48,10,49,48,10,49,48,10,49,48,10,49,48,10, 49,48,10,49,48,10,50,48,10,52,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,51,48,49,54,10,69,78,67,79,68,73,78, 71,32,49,50,51,49,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,70,56,10,57,48,10,57,48, 10,65,48,10,65,48,10,65,48,10,65,48,10,65,48,10, 57,48,10,57,48,10,70,56,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,48,49,55,10,69,78,67,79,68,73,78,71,32,49, 50,51,49,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,70,56,10,52,56,10,52,56,10,50,56, 10,50,56,10,50,56,10,50,56,10,50,56,10,52,56,10, 52,56,10,70,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,51,48, 49,56,10,69,78,67,79,68,73,78,71,32,49,50,51,49, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,56,10,49,48,10,51,48,10,53,48,10,53,48, 10,53,48,10,53,48,10,53,48,10,51,48,10,49,48,10, 48,56,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,51,48,49,57,10, 69,78,67,79,68,73,78,71,32,49,50,51,49,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,52, 48,10,50,48,10,51,48,10,50,56,10,50,56,10,50,56, 10,50,56,10,50,56,10,51,48,10,50,48,10,52,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,51,48,49,65,10,69,78,67, 79,68,73,78,71,32,49,50,51,49,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,70,56,10,65, 48,10,65,48,10,65,48,10,65,48,10,65,48,10,65,48, 10,65,48,10,65,48,10,65,48,10,70,56,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,51,48,49,66,10,69,78,67,79,68,73, 78,71,32,49,50,51,49,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,70,56,10,50,56,10,50, 56,10,50,56,10,50,56,10,50,56,10,50,56,10,50,56, 10,50,56,10,50,56,10,70,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,51,48,49,67,10,69,78,67,79,68,73,78,71,32, 49,50,51,49,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,57,56,10,54,52,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,51, 48,49,68,10,69,78,67,79,68,73,78,71,32,49,50,51, 49,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,53,48,10,53,48,10,50,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,51,48,49,69, 10,69,78,67,79,68,73,78,71,32,49,50,51,49,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,56,10,50,56,10,53,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,51,48,49,70,10,69,78, 67,79,68,73,78,71,32,49,50,51,49,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,50,56,10,50,56,10,53,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,51,48,51,54,10,69,78,67,79,68, 73,78,71,32,49,50,51,52,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,55,48,10, 56,56,10,70,56,10,56,56,10,70,56,10,65,56,10,65, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,51,48,51,70,10,69,78,67,79,68,73,78,71, 32,49,50,51,53,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,70,56,10,68,56,10, 68,56,10,65,56,10,65,56,10,65,56,10,68,56,10,68, 56,10,70,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 51,48,57,57,10,69,78,67,79,68,73,78,71,32,49,50, 52,52,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,56,10,48,52,10,48,56,10,48,52,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,51,48,57, 65,10,69,78,67,79,68,73,78,71,32,49,50,52,52,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,67,10,48,67,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,51,48,57,66,10,69, 78,67,79,68,73,78,71,32,49,50,52,52,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,52,48,10,50,48, 10,56,48,10,52,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,51,48,57,67,10,69,78,67,79, 68,73,78,71,32,49,50,52,52,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,52,48,10,65,48,10,52,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,51,48,65,49,10,69,78,67,79,68,73,78, 71,32,49,50,52,52,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,70,48,10,53,48,10,54,48,10, 52,48,10,56,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,48,65,50,10,69,78,67,79,68,73,78,71,32,49, 50,52,53,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,70,56,10,48,56,10,50,56, 10,50,56,10,51,48,10,50,48,10,50,48,10,52,48,10, 56,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,51,48, 65,51,10,69,78,67,79,68,73,78,71,32,49,50,52,53, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,49,48,10,50,48,10,54,48,10,65,48,10,50,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,51,48,65,52,10, 69,78,67,79,68,73,78,71,32,49,50,52,53,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,56,10,49,48,10,50,48,10,54,48,10,65,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,51,48,65,53,10,69,78,67, 79,68,73,78,71,32,49,50,52,53,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,52,48,10,69,48, 10,65,48,10,50,48,10,52,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,51,48,65,54,10,69,78,67,79,68,73, 78,71,32,49,50,52,53,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,50,48,10,50,48,10,70, 56,10,56,56,10,56,56,10,48,56,10,48,56,10,49,48, 10,50,48,10,52,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,51,48,65,55,10,69,78,67,79,68,73,78,71,32, 49,50,52,53,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,55,48,10,50,48,10,50,48,10,50,48, 10,70,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,51, 48,65,56,10,69,78,67,79,68,73,78,71,32,49,50,52, 53,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,55,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,70,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,51,48,65,57, 10,69,78,67,79,68,73,78,71,32,49,50,52,53,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,50, 48,10,70,48,10,50,48,10,54,48,10,65,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,51,48,65,65,10,69,78, 67,79,68,73,78,71,32,49,50,52,53,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 49,48,10,49,48,10,70,56,10,49,48,10,51,48,10,53, 48,10,57,48,10,49,48,10,51,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,51,48,65,66,10,69,78,67,79,68, 73,78,71,32,49,50,52,53,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,50,48,10, 50,48,10,70,56,10,50,56,10,50,56,10,50,56,10,52, 56,10,52,56,10,57,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,51,48,65,67,10,69,78,67,79,68,73,78,71, 32,49,50,52,54,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,56,10,48,52,10,50,56,10,50,52,10, 70,56,10,50,56,10,50,56,10,50,56,10,52,56,10,52, 56,10,57,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 51,48,65,68,10,69,78,67,79,68,73,78,71,32,49,50, 52,54,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,52,48,10,52,48,10,53,56,10, 69,48,10,50,48,10,51,56,10,68,48,10,49,48,10,49, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,51,48,65, 69,10,69,78,67,79,68,73,78,71,32,49,50,52,54,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,56, 10,48,52,10,52,56,10,52,52,10,53,56,10,69,48,10, 50,48,10,51,56,10,68,48,10,49,48,10,49,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,51,48,65,70,10,69, 78,67,79,68,73,78,71,32,49,50,52,54,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,56,10,52,56,10,52,56,10,56,56,10,48,56,10, 49,48,10,49,48,10,50,48,10,52,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,51,48,66,48,10,69,78,67,79, 68,73,78,71,32,49,50,52,54,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,56,10,48,52,10,55,56, 10,52,67,10,52,56,10,56,56,10,48,56,10,49,48,10, 49,48,10,50,48,10,52,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,51,48,66,49,10,69,78,67,79,68,73,78, 71,32,49,50,52,54,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,52,48,10,52,48, 10,55,56,10,57,48,10,49,48,10,49,48,10,50,48,10, 50,48,10,52,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,48,66,50,10,69,78,67,79,68,73,78,71,32,49, 50,52,54,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,56,10,48,52,10,52,56,10,52,52,10,55,56, 10,57,48,10,49,48,10,49,48,10,50,48,10,50,48,10, 52,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,51,48, 66,51,10,69,78,67,79,68,73,78,71,32,49,50,52,54, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,70,56,10,48,56,10,48,56, 10,48,56,10,48,56,10,48,56,10,48,56,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,51,48,66,52,10, 69,78,67,79,68,73,78,71,32,49,50,52,54,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,56,10,48, 52,10,48,56,10,70,67,10,48,56,10,48,56,10,48,56, 10,48,56,10,48,56,10,48,56,10,70,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,51,48,66,53,10,69,78,67, 79,68,73,78,71,32,49,50,52,54,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,53, 48,10,53,48,10,70,56,10,53,48,10,53,48,10,49,48, 10,50,48,10,50,48,10,52,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,51,48,66,54,10,69,78,67,79,68,73, 78,71,32,49,50,52,55,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,56,10,48,52,10,53,56,10,53, 52,10,70,56,10,53,48,10,53,48,10,49,48,10,50,48, 10,50,48,10,52,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,51,48,66,55,10,69,78,67,79,68,73,78,71,32, 49,50,52,55,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,67,48,10,48, 56,10,67,56,10,48,56,10,48,56,10,49,48,10,50,48, 10,67,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,51, 48,66,56,10,69,78,67,79,68,73,78,71,32,49,50,52, 55,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,56,10,48,52,10,48,56,10,67,52,10,48,56,10,67, 56,10,48,56,10,48,56,10,49,48,10,50,48,10,67,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,51,48,66,57, 10,69,78,67,79,68,73,78,71,32,49,50,52,55,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,70,56,10,48,56,10,48,56,10,49,48,10,49, 48,10,51,48,10,51,48,10,52,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,51,48,66,65,10,69,78, 67,79,68,73,78,71,32,49,50,52,55,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,56,10,48,52,10, 70,56,10,48,67,10,48,56,10,49,48,10,49,48,10,51, 48,10,51,48,10,52,56,10,56,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,51,48,66,66,10,69,78,67,79,68, 73,78,71,32,49,50,52,55,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,48,10, 52,48,10,55,56,10,67,56,10,53,48,10,52,48,10,52, 48,10,52,48,10,51,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,51,48,66,67,10,69,78,67,79,68,73,78,71, 32,49,50,52,55,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,56,10,48,52,10,52,56,10,52,52,10, 55,56,10,67,56,10,53,48,10,52,48,10,52,48,10,52, 48,10,51,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 51,48,66,68,10,69,78,67,79,68,73,78,71,32,49,50, 52,55,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,56,10,56,56,10,52,56,10, 52,56,10,49,48,10,49,48,10,50,48,10,50,48,10,52, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,51,48,66, 69,10,69,78,67,79,68,73,78,71,32,49,50,52,55,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,56, 10,48,52,10,48,56,10,56,67,10,52,56,10,52,56,10, 49,48,10,49,48,10,50,48,10,50,48,10,52,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,51,48,66,70,10,69, 78,67,79,68,73,78,71,32,49,50,52,55,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,56,10,52,56,10,52,56,10,54,56,10,57,56,10, 49,48,10,49,48,10,50,48,10,52,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,51,48,67,48,10,69,78,67,79, 68,73,78,71,32,49,50,52,56,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,56,10,48,52,10,55,56, 10,52,67,10,52,56,10,54,56,10,57,56,10,49,48,10, 49,48,10,50,48,10,52,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,51,48,67,49,10,69,78,67,79,68,73,78, 71,32,49,50,52,56,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,49,48,10,50,48, 10,54,48,10,50,48,10,70,56,10,50,48,10,50,48,10, 52,48,10,56,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,48,67,50,10,69,78,67,79,68,73,78,71,32,49, 50,52,56,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,56,10,48,52,10,49,56,10,50,52,10,54,48, 10,50,48,10,70,56,10,50,48,10,50,48,10,52,48,10, 56,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,51,48, 67,51,10,69,78,67,79,68,73,78,71,32,49,50,52,56, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,65,56,10,65,56,10,48,56,10,49,48,10,69,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,51,48,67,52,10, 69,78,67,79,68,73,78,71,32,49,50,52,56,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,65,56,10,65,56,10,65,56,10,48,56, 10,48,56,10,49,48,10,50,48,10,67,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,51,48,67,53,10,69,78,67, 79,68,73,78,71,32,49,50,52,56,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,56,10,48,52,10,48, 56,10,65,67,10,65,56,10,65,56,10,48,56,10,48,56, 10,49,48,10,50,48,10,67,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,51,48,67,54,10,69,78,67,79,68,73, 78,71,32,49,50,52,56,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,55,48,10,48, 48,10,48,48,10,70,56,10,50,48,10,50,48,10,50,48, 10,52,48,10,52,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,51,48,67,55,10,69,78,67,79,68,73,78,71,32, 49,50,52,56,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,56,10,48,52,10,55,56,10,48,52,10,48, 48,10,70,56,10,50,48,10,50,48,10,50,48,10,52,48, 10,52,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,51, 48,67,56,10,69,78,67,79,68,73,78,71,32,49,50,52, 56,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,56,48,10,56,48,10,56,48,10,67, 48,10,65,48,10,57,48,10,56,48,10,56,48,10,56,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,51,48,67,57, 10,69,78,67,79,68,73,78,71,32,49,50,52,56,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 49,48,10,56,56,10,57,48,10,56,56,10,67,48,10,65, 48,10,57,48,10,56,48,10,56,48,10,56,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,51,48,67,65,10,69,78, 67,79,68,73,78,71,32,49,50,52,57,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,50,48,10,70,56,10,50,48,10,50,48,10,50, 48,10,52,48,10,52,48,10,56,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,51,48,67,66,10,69,78,67,79,68, 73,78,71,32,49,50,52,57,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,55,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,70,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,51,48,67,67,10,69,78,67,79,68,73,78,71, 32,49,50,52,57,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,70,56,10, 48,56,10,52,56,10,51,48,10,49,48,10,50,56,10,52, 48,10,56,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 51,48,67,68,10,69,78,67,79,68,73,78,71,32,49,50, 52,57,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,70,56,10, 49,48,10,50,48,10,55,48,10,65,56,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,51,48,67, 69,10,69,78,67,79,68,73,78,71,32,49,50,52,57,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,56,10,48,56,10,48,56,10,48,56,10, 49,48,10,49,48,10,50,48,10,52,48,10,56,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,51,48,67,70,10,69, 78,67,79,68,73,78,71,32,49,50,52,57,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,53,48,10,53,48,10,53,48,10,52,56,10, 52,56,10,56,56,10,56,56,10,56,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,51,48,68,48,10,69,78,67,79, 68,73,78,71,32,49,50,52,57,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,56,10,48,52,10,48,56, 10,53,52,10,53,48,10,53,48,10,52,56,10,52,56,10, 56,56,10,56,56,10,56,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,51,48,68,49,10,69,78,67,79,68,73,78, 71,32,49,50,52,57,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,67,10,48,67,10,53,48, 10,53,48,10,53,48,10,52,56,10,52,56,10,56,56,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,48,68,50,10,69,78,67,79,68,73,78,71,32,49, 50,52,57,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,56,48,10,56,48,10,70,56, 10,56,48,10,56,48,10,56,48,10,56,48,10,56,48,10, 55,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,51,48, 68,51,10,69,78,67,79,68,73,78,71,32,49,50,52,57, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 56,10,48,52,10,56,56,10,56,52,10,70,56,10,56,48, 10,56,48,10,56,48,10,56,48,10,56,48,10,55,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,51,48,68,52,10, 69,78,67,79,68,73,78,71,32,49,50,53,48,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 67,10,56,67,10,56,48,10,70,56,10,56,48,10,56,48, 10,56,48,10,56,48,10,56,48,10,55,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,51,48,68,53,10,69,78,67, 79,68,73,78,71,32,49,50,53,48,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,70,56,10,48,56,10,48,56,10,48,56,10,49,48, 10,49,48,10,50,48,10,67,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,51,48,68,54,10,69,78,67,79,68,73, 78,71,32,49,50,53,48,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,56,10,48,52,10,48,56,10,70, 67,10,48,56,10,48,56,10,48,56,10,49,48,10,49,48, 10,50,48,10,67,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,51,48,68,55,10,69,78,67,79,68,73,78,71,32, 49,50,53,48,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,67,10,48,67,10,48,48,10,70,56,10,48, 56,10,48,56,10,48,56,10,49,48,10,49,48,10,50,48, 10,67,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,51, 48,68,56,10,69,78,67,79,68,73,78,71,32,49,50,53, 48,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,50,48,10,50,48,10,53, 48,10,53,48,10,57,48,10,48,56,10,48,56,10,48,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,51,48,68,57, 10,69,78,67,79,68,73,78,71,32,49,50,53,48,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,56,10,50,52,10,50,56,10,53,52,10,53, 48,10,57,48,10,48,56,10,48,56,10,48,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,51,48,68,65,10,69,78, 67,79,68,73,78,71,32,49,50,53,48,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,67,10,50,67,10,50,48,10,53,48,10,53,48,10,57, 48,10,48,56,10,48,56,10,48,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,51,48,68,66,10,69,78,67,79,68, 73,78,71,32,49,50,53,48,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,50,48,10, 50,48,10,70,56,10,50,48,10,50,48,10,65,56,10,65, 56,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,51,48,68,67,10,69,78,67,79,68,73,78,71, 32,49,50,53,48,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,56,10,48,52,10,50,56,10,50,52,10, 70,56,10,50,48,10,50,48,10,65,56,10,65,56,10,50, 48,10,50,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 51,48,68,68,10,69,78,67,79,68,73,78,71,32,49,50, 53,48,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,67,10,50,67,10,50,48,10,70,56,10, 50,48,10,50,48,10,65,56,10,65,56,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,51,48,68, 69,10,69,78,67,79,68,73,78,71,32,49,50,53,49,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,70,56,10,48,56,10,48,56,10,48,56,10, 49,48,10,53,48,10,54,48,10,50,48,10,49,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,51,48,68,70,10,69, 78,67,79,68,73,78,71,32,49,50,53,49,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,67,48,10,51,48,10,48,48,10,67,48,10,51,48,10, 48,48,10,56,48,10,54,48,10,49,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,51,48,69,48,10,69,78,67,79, 68,73,78,71,32,49,50,53,49,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,49,48,10,49,48,10,50,48,10,50,48,10,53,48,10, 52,56,10,57,56,10,69,52,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,51,48,69,49,10,69,78,67,79,68,73,78, 71,32,49,50,53,49,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,56,10,48,56, 10,48,56,10,50,56,10,49,48,10,49,48,10,50,56,10, 52,48,10,56,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,48,69,50,10,69,78,67,79,68,73,78,71,32,49, 50,53,49,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,70,48,10,52,48,10,52,48, 10,70,56,10,52,48,10,52,48,10,52,48,10,52,48,10, 51,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,51,48, 69,51,10,69,78,67,79,68,73,78,71,32,49,50,53,49, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,52,48,10,55,56,10,67,56,10,50,48,10,50,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,51,48,69,52,10, 69,78,67,79,68,73,78,71,32,49,50,53,49,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,52,48,10,52,48,10,55,56,10,67,56,10,51,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,51,48,69,53,10,69,78,67, 79,68,73,78,71,32,49,50,53,49,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,54,48,10,50,48, 10,50,48,10,50,48,10,70,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,51,48,69,54,10,69,78,67,79,68,73, 78,71,32,49,50,53,49,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,55, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,49,48, 10,49,48,10,70,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,51,48,69,55,10,69,78,67,79,68,73,78,71,32, 49,50,53,49,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,70,48,10,49,48,10,70,48,10,49,48, 10,70,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,51, 48,69,56,10,69,78,67,79,68,73,78,71,32,49,50,53, 50,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,70,56,10,48,56,10,48, 56,10,70,56,10,48,56,10,48,56,10,48,56,10,70,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,51,48,69,57, 10,69,78,67,79,68,73,78,71,32,49,50,53,50,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,70,56,10,48,48,10,70,56,10,48,56,10,48, 56,10,48,56,10,49,48,10,50,48,10,67,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,51,48,69,65,10,69,78, 67,79,68,73,78,71,32,49,50,53,50,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 56,56,10,56,56,10,56,56,10,56,56,10,48,56,10,49, 48,10,49,48,10,50,48,10,52,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,51,48,69,66,10,69,78,67,79,68, 73,78,71,32,49,50,53,50,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,49,48,10, 53,48,10,53,48,10,53,48,10,53,48,10,53,48,10,53, 48,10,57,56,10,57,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,51,48,69,67,10,69,78,67,79,68,73,78,71, 32,49,50,53,50,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,56,48,10,56,48,10, 56,48,10,56,48,10,56,48,10,56,48,10,56,56,10,57, 48,10,69,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 51,48,69,68,10,69,78,67,79,68,73,78,71,32,49,50, 53,50,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,70,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,56,56,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,51,48,69, 69,10,69,78,67,79,68,73,78,71,32,49,50,53,50,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 56,56,10,48,56,10,48,56,10,49,48,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,51,48,69,70,10,69, 78,67,79,68,73,78,71,32,49,50,53,50,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,70,56,10,56,56,10,56,56,10,48,56,10, 48,56,10,48,56,10,49,48,10,50,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,51,48,70,48,10,69,78,67,79, 68,73,78,71,32,49,50,53,50,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,49,48, 10,49,48,10,70,56,10,53,48,10,53,48,10,70,56,10, 49,48,10,49,48,10,49,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,51,48,70,49,10,69,78,67,79,68,73,78, 71,32,49,50,53,50,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,55,56, 10,48,56,10,51,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,70,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,48,70,50,10,69,78,67,79,68,73,78,71,32,49, 50,53,51,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,70,56,10,48,56, 10,70,56,10,48,56,10,48,56,10,49,48,10,50,48,10, 67,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,51,48, 70,51,10,69,78,67,79,68,73,78,71,32,49,50,53,51, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,56,48,10,52,48,10,48,56, 10,48,56,10,48,56,10,49,48,10,50,48,10,67,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,51,48,70,52,10, 69,78,67,79,68,73,78,71,32,49,50,53,51,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,56,10,50, 52,10,50,56,10,70,67,10,56,56,10,56,56,10,48,56, 10,48,56,10,49,48,10,50,48,10,52,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,51,48,70,53,10,69,78,67, 79,68,73,78,71,32,49,50,53,51,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,50,48,10,70,56,10,50,56, 10,52,56,10,52,56,10,57,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,51,48,70,54,10,69,78,67,79,68,73, 78,71,32,49,50,53,51,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,52,48,10,55,56,10,57,48,10,49,48, 10,50,48,10,52,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,51,48,70,55,10,69,78,67,79,68,73,78,71,32, 49,50,53,51,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,56,10,48,52,10,48,56,10,70,67,10,56, 56,10,56,56,10,48,56,10,48,56,10,48,56,10,49,48, 10,54,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,51, 48,70,56,10,69,78,67,79,68,73,78,71,32,49,50,53, 51,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,56,10,48,52,10,49,56,10,49,52,10,70,56,10,53, 48,10,53,48,10,70,56,10,49,48,10,49,48,10,49,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,51,48,70,57, 10,69,78,67,79,68,73,78,71,32,49,50,53,51,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,56,10, 48,52,10,48,56,10,48,52,10,55,56,10,48,56,10,51, 48,10,50,48,10,50,48,10,50,48,10,70,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,51,48,70,65,10,69,78, 67,79,68,73,78,71,32,49,50,53,51,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,56,10,48,52,10, 48,56,10,70,67,10,48,56,10,70,56,10,48,56,10,48, 56,10,49,48,10,50,48,10,67,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,51,48,70,66,10,69,78,67,79,68, 73,78,71,32,49,50,53,51,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,50,48,10,55,48,10,50,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,51,48,70,67,10,69,78,67,79,68,73,78,71, 32,49,50,53,52,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,70,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 51,48,70,68,10,69,78,67,79,68,73,78,71,32,49,50, 53,52,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 52,48,10,50,48,10,49,48,10,49,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,51,48,70, 69,10,69,78,67,79,68,73,78,71,32,49,50,53,52,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,49,48,10,48,56,10,49,48,10,52,56,10, 50,48,10,49,48,10,49,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,51,49,48,53,10,69, 78,67,79,68,73,78,71,32,49,50,53,52,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,52,48,10,52,48,10,70,56,10,48,56,10, 48,56,10,48,56,10,50,56,10,49,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,51,49,48,54,10,69,78,67,79, 68,73,78,71,32,49,50,53,53,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,52,48,10,52,48,10,70,56,10,48,56,10,53,48,10, 53,48,10,50,48,10,68,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,51,49,48,55,10,69,78,67,79,68,73,78, 71,32,49,50,53,53,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,56,10,56,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,49,48,56,10,69,78,67,79,68,73,78,71,32,49, 50,53,53,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,70,56,10,56,48,10,56,48,10,56,48,10,56,48,10, 70,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,51,49, 48,57,10,69,78,67,79,68,73,78,71,32,49,50,53,53, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,52,48,10,56,48,10,70,56, 10,50,56,10,50,56,10,50,56,10,52,56,10,57,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,51,49,48,65,10, 69,78,67,79,68,73,78,71,32,49,50,53,53,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,50,48,10,50,48,10,70,56, 10,50,48,10,50,48,10,52,56,10,70,56,10,48,56,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,51,49,48,66,10,69,78,67, 79,68,73,78,71,32,49,50,53,53,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,55,48,10,49,48,10,51,56,10,48,56, 10,48,56,10,50,56,10,49,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,51,49,48,67,10,69,78,67,79,68,73, 78,71,32,49,50,53,53,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,50,48,10,65,48,10,70,56,10,50,56,10,52,56, 10,52,56,10,57,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,51,49,48,68,10,69,78,67,79,68,73,78,71,32, 49,50,53,53,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,52,56,10,52,56,10,57,48,10,57,48,10,52,56, 10,52,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,51, 49,48,69,10,69,78,67,79,68,73,78,71,32,49,50,53, 53,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,70, 56,10,50,48,10,55,56,10,48,56,10,48,56,10,51,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,51,49,48,70, 10,69,78,67,79,68,73,78,71,32,49,50,53,53,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,56,10,52, 48,10,52,48,10,52,48,10,52,48,10,56,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,51,49,49,48,10,69,78, 67,79,68,73,78,71,32,49,50,53,54,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,52,56,10,52,56,10,53, 56,10,54,56,10,48,56,10,49,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,51,49,49,49,10,69,78,67,79,68, 73,78,71,32,49,50,53,54,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,49,48,10,49,48,10,50,48,10,50, 48,10,49,48,10,49,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,51,49,49,50,10,69,78,67,79,68,73,78,71, 32,49,50,53,54,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,70,56,10,50,48,10,49,48,10,49,48,10,49, 48,10,50,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 51,49,49,51,10,69,78,67,79,68,73,78,71,32,49,50, 53,54,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 65,56,10,65,56,10,65,56,10,70,56,10,50,48,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,51,49,49, 52,10,69,78,67,79,68,73,78,71,32,49,50,53,54,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,49,48,10,54,48,10, 48,56,10,55,48,10,65,48,10,50,48,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,51,49,49,53,10,69, 78,67,79,68,73,78,71,32,49,50,53,54,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,55,56,10,48,56,10, 55,56,10,52,48,10,52,48,10,52,48,10,56,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,51,49,49,54,10,69,78,67,79, 68,73,78,71,32,49,50,53,54,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,56,10,56,56,10,67,56,10,65,56,10, 65,56,10,56,56,10,70,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,51,49,49,55,10,69,78,67,79,68,73,78, 71,32,49,50,53,54,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,70,56,10,52,56,10,52,56,10,52,56,10,52,56,10, 52,56,10,53,56,10,52,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,49,49,56,10,69,78,67,79,68,73,78,71,32,49, 50,53,54,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,50,48,10,50,48, 10,70,56,10,52,48,10,55,56,10,48,56,10,49,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,51,49, 49,57,10,69,78,67,79,68,73,78,71,32,49,50,53,54, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,50,48, 10,50,48,10,50,48,10,52,48,10,52,56,10,70,56,10, 48,56,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,51,49,49,65,10, 69,78,67,79,68,73,78,71,32,49,50,53,55,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,56,56,10,53,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,51,49,49,66,10,69,78,67, 79,68,73,78,71,32,49,50,53,55,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,56,10,50,48,10,54,48, 10,56,48,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,51,49,49,67,10,69,78,67,79,68,73, 78,71,32,49,50,53,55,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,50, 48,10,50,48,10,70,56,10,50,48,10,54,48,10,56,48, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,51,49,49,68,10,69,78,67,79,68,73,78,71,32, 49,50,53,55,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,53, 48,10,70,56,10,53,48,10,53,48,10,53,48,10,52,48, 10,55,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,51, 49,49,69,10,69,78,67,79,68,73,78,71,32,49,50,53, 55,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,70, 56,10,53,48,10,53,48,10,55,56,10,50,56,10,67,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,51,49,49,70, 10,69,78,67,79,68,73,78,71,32,49,50,53,55,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,50, 48,10,68,48,10,49,48,10,48,56,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,51,49,50,48,10,69,78, 67,79,68,73,78,71,32,49,50,53,55,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,50,48,10,52,56,10,70,48,10,50, 48,10,52,48,10,53,48,10,70,56,10,48,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,51,49,50,49,10,69,78,67,79,68, 73,78,71,32,49,50,53,55,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,70,56,10,48,56,10,53,48,10,53, 48,10,50,48,10,68,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,51,49,50,50,10,69,78,67,79,68,73,78,71, 32,49,50,53,55,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,70,56,10,53,48,10,53,48,10,70,56,10,48, 56,10,48,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 51,49,50,51,10,69,78,67,79,68,73,78,71,32,49,50, 53,55,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,56,48,10, 56,48,10,56,48,10,70,56,10,48,56,10,48,56,10,48, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,51,49,50, 52,10,69,78,67,79,68,73,78,71,32,49,50,53,56,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,50,48,10,50,48,10, 70,56,10,50,48,10,53,48,10,53,48,10,57,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,51,49,50,53,10,69, 78,67,79,68,73,78,71,32,49,50,53,56,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,49,48,10,50,48,10, 50,48,10,52,48,10,52,48,10,70,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,51,49,50,54,10,69,78,67,79, 68,73,78,71,32,49,50,53,56,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,53,48,10,53,48,10,53,48,10, 53,48,10,53,48,10,53,56,10,56,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,51,49,50,55,10,69,78,67,79,68,73,78, 71,32,49,50,53,56,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,70,56,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,49,50,56,10,69,78,67,79,68,73,78,71,32,49, 50,53,56,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,67,56,10,50,56,10,49,48,10,51,48,10,52,56,10, 56,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,51,49, 50,57,10,69,78,67,79,68,73,78,71,32,49,50,53,56, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,51,49,50,65,10, 69,78,67,79,68,73,78,71,32,49,50,53,56,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,56,10,50,48,10,50,48, 10,51,56,10,52,56,10,52,56,10,57,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,51,49,50,66,10,69,78,67, 79,68,73,78,71,32,49,50,53,56,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,70,56,10,53,48,10,53,48,10,53,48, 10,53,48,10,53,48,10,57,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,51,49,50,67,10,69,78,67,79,68,73, 78,71,32,49,50,53,56,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,49,48,10,55,56,10,52,48,10,52,48,10,52,48, 10,52,48,10,56,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,51,49,51,49,10,69,78,67,79,68,73,78,71,32, 49,50,53,57,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,70,56,10,48, 56,10,48,56,10,48,56,10,48,56,10,48,56,10,49,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,51, 49,51,50,10,69,78,67,79,68,73,78,71,32,49,50,53, 57,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,70,56,10,50,56,10,50, 56,10,50,56,10,50,56,10,50,56,10,53,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,51,49,51,51, 10,69,78,67,79,68,73,78,71,32,49,50,53,57,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,67,56,10,52,56,10,53,48,10,53, 48,10,53,56,10,54,56,10,65,56,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,51,49,51,52,10,69,78, 67,79,68,73,78,71,32,49,50,53,57,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,56,48,10,56,48,10,56,48,10,56,48,10,56, 48,10,56,48,10,70,56,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,51,49,51,53,10,69,78,67,79,68, 73,78,71,32,49,50,53,57,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 66,56,10,57,48,10,57,48,10,57,48,10,65,56,10,65, 56,10,69,56,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,51,49,51,54,10,69,78,67,79,68,73,78,71, 32,49,50,53,57,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,66,56,10, 56,48,10,66,56,10,56,48,10,66,56,10,65,56,10,68, 56,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 51,49,51,55,10,69,78,67,79,68,73,78,71,32,49,50, 53,57,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,70,56,10,56,48,10, 56,48,10,56,48,10,56,48,10,56,48,10,70,56,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,51,49,51, 56,10,69,78,67,79,68,73,78,71,32,49,50,54,48,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,70,56,10,65,48,10,65,48,10, 65,48,10,65,48,10,65,48,10,70,56,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,51,49,51,57,10,69, 78,67,79,68,73,78,71,32,49,50,54,48,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,70,56,10,48,56,10,48,56,10,70,56,10, 56,48,10,56,48,10,70,56,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,51,49,51,65,10,69,78,67,79, 68,73,78,71,32,49,50,54,48,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,70,56,10,50,56,10,50,56,10,69,56,10,56,56,10, 65,56,10,67,56,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,51,49,51,66,10,69,78,67,79,68,73,78, 71,32,49,50,54,48,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,68,67, 10,53,52,10,53,52,10,68,52,10,57,52,10,66,52,10, 68,67,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,49,51,67,10,69,78,67,79,68,73,78,71,32,49, 50,54,48,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,68,52,10,53,52, 10,53,52,10,68,67,10,57,52,10,66,52,10,68,67,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,51,49, 51,68,10,69,78,67,79,68,73,78,71,32,49,50,54,48, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,69,52,10,50,52,10,50,56, 10,69,56,10,57,52,10,66,52,10,68,52,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,51,49,51,69,10, 69,78,67,79,68,73,78,71,32,49,50,54,48,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,68,56,10,53,48,10,53,48,10,68,56, 10,57,48,10,66,48,10,68,56,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,51,49,51,70,10,69,78,67, 79,68,73,78,71,32,49,50,54,48,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,68,67,10,52,48,10,53,52,10,68,52,10,57,52, 10,65,56,10,68,67,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,51,49,52,48,10,69,78,67,79,68,73, 78,71,32,49,50,54,48,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,69, 67,10,50,48,10,51,67,10,69,56,10,57,67,10,66,52, 10,68,56,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,51,49,52,49,10,69,78,67,79,68,73,78,71,32, 49,50,54,48,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,70,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,70,56, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,51, 49,52,50,10,69,78,67,79,68,73,78,71,32,49,50,54, 49,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,56,56,10,56,56,10,56, 56,10,70,56,10,56,56,10,56,56,10,70,56,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,51,49,52,51, 10,69,78,67,79,68,73,78,71,32,49,50,54,49,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,65,56,10,65,56,10,65,56,10,70, 56,10,65,56,10,65,56,10,70,56,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,51,49,52,52,10,69,78, 67,79,68,73,78,71,32,49,50,54,49,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,65,56,10,65,56,10,65,56,10,69,56,10,66, 52,10,66,52,10,68,52,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,51,49,52,53,10,69,78,67,79,68, 73,78,71,32,49,50,54,49,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 49,48,10,49,48,10,50,48,10,50,48,10,53,48,10,53, 48,10,56,56,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,51,49,52,54,10,69,78,67,79,68,73,78,71, 32,49,50,54,49,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,50,56,10, 50,56,10,53,48,10,53,48,10,53,56,10,65,56,10,65, 52,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 51,49,52,55,10,69,78,67,79,68,73,78,71,32,49,50, 54,49,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,51,48,10,52,56,10, 56,52,10,56,52,10,56,52,10,52,56,10,51,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,51,49,52, 56,10,69,78,67,79,68,73,78,71,32,49,50,54,49,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,70,56,10,48,56,10,49,48,10, 51,48,10,52,56,10,52,56,10,56,52,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,51,49,52,57,10,69, 78,67,79,68,73,78,71,32,49,50,54,49,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,70,56,10,53,48,10,53,48,10,53,48,10, 65,56,10,65,56,10,65,56,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,51,49,52,65,10,69,78,67,79, 68,73,78,71,32,49,50,54,49,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,55,48,10,48,48,10,70,56,10,50,48,10,50,48,10, 53,48,10,56,56,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,51,49,52,66,10,69,78,67,79,68,73,78, 71,32,49,50,54,49,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,70,56, 10,48,56,10,48,56,10,70,56,10,48,56,10,48,56,10, 49,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,49,52,67,10,69,78,67,79,68,73,78,71,32,49, 50,54,50,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,70,56,10,56,48, 10,56,48,10,70,56,10,56,48,10,56,48,10,70,56,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,51,49, 52,68,10,69,78,67,79,68,73,78,71,32,49,50,54,50, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,70,56,10,53,48,10,53,48, 10,53,48,10,53,48,10,53,48,10,70,56,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,51,49,52,69,10, 69,78,67,79,68,73,78,71,32,49,50,54,50,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,55,48,10,48,48,10,70,56,10,48,48,10,55,48, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,51,49,52,70,10,69,78,67, 79,68,73,78,71,32,49,50,54,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,50,48,10,50,48,10,51,56,10,50,48,10,50,48, 10,50,48,10,50,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,51,49,53,48,10,69,78,67,79,68,73, 78,71,32,49,50,54,50,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,56,10,52, 56,10,52,56,10,55,56,10,52,56,10,52,56,10,52,56, 10,48,56,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,51,49,53,49,10,69,78,67,79,68,73,78,71,32, 49,50,54,50,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,50,48,10,50,48,10,51, 56,10,50,48,10,51,56,10,50,48,10,50,48,10,50,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,51, 49,53,50,10,69,78,67,79,68,73,78,71,32,49,50,54, 50,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,56,10,52,56,10,55,56,10,52, 56,10,55,56,10,52,56,10,52,56,10,48,56,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,51,49,53,51, 10,69,78,67,79,68,73,78,71,32,49,50,54,50,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,56,10,48,56,10,48,56,10,51,56,10,48, 56,10,48,56,10,48,56,10,48,56,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,51,49,53,52,10,69,78, 67,79,68,73,78,71,32,49,50,54,50,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,56,10,50,56,10,50,56,10,69,56,10,50,56,10,50, 56,10,50,56,10,48,56,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,51,49,53,53,10,69,78,67,79,68, 73,78,71,32,49,50,54,50,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,56,10, 48,56,10,51,56,10,48,56,10,51,56,10,48,56,10,48, 56,10,48,56,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,51,49,53,54,10,69,78,67,79,68,73,78,71, 32,49,50,54,51,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,56,10,50,56,10, 69,56,10,50,56,10,69,56,10,50,56,10,50,56,10,48, 56,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 51,49,53,55,10,69,78,67,79,68,73,78,71,32,49,50, 54,51,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 50,48,10,50,48,10,50,48,10,70,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,51,49,53, 56,10,69,78,67,79,68,73,78,71,32,49,50,54,51,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,56,10,48,56,10,48,56,10,52,56,10, 52,67,10,53,56,10,69,56,10,48,56,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,51,49,53,57,10,69, 78,67,79,68,73,78,71,32,49,50,54,51,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,52,10,49,52,10,49,52,10,53,67,10,53,52,10, 55,52,10,68,52,10,48,52,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,51,49,53,65,10,69,78,67,79, 68,73,78,71,32,49,50,54,51,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,56, 10,48,56,10,52,56,10,52,56,10,53,56,10,69,56,10, 48,56,10,48,56,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,51,49,53,66,10,69,78,67,79,68,73,78, 71,32,49,50,54,51,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,53,48,10,53,48,10,53,48,10,70,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,49,53,67,10,69,78,67,79,68,73,78,71,32,49, 50,54,51,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,56,10,50,48,10,50,48,10,50,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,51,49, 53,68,10,69,78,67,79,68,73,78,71,32,49,50,54,51, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,56,10,48,56,10,48,56,10,49,56, 10,69,56,10,52,56,10,55,56,10,52,56,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,51,49,53,69,10, 69,78,67,79,68,73,78,71,32,49,50,54,51,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,52,10,49,52,10,49,52,10,49,52,10,70,52, 10,53,52,10,55,52,10,53,52,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,51,49,53,70,10,69,78,67, 79,68,73,78,71,32,49,50,54,51,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 56,10,48,56,10,48,56,10,49,56,10,69,56,10,52,56, 10,52,56,10,52,56,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,51,49,54,48,10,69,78,67,79,68,73, 78,71,32,49,50,54,52,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,56,10,53,48,10,53,48, 10,53,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,51,49,54,49,10,69,78,67,79,68,73,78,71,32, 49,50,54,52,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,70,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,51, 49,54,50,10,69,78,67,79,68,73,78,71,32,49,50,54, 52,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,56,10,48,56,10,48,56,10,48, 56,10,48,56,10,49,56,10,69,56,10,48,56,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,51,49,54,51, 10,69,78,67,79,68,73,78,71,32,49,50,54,52,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,56,10,48,56,10,48,56,10,48,56,10,48, 56,10,48,56,10,48,56,10,48,56,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,69,48,48,48,10,69,78, 67,79,68,73,78,71,32,53,55,51,52,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,66,48,10,67, 56,10,56,56,10,65,56,10,66,48,10,56,48,10,56,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,69,48,48,49,10,69,78,67,79,68, 73,78,71,32,53,55,51,52,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,66,48,10,67,56,10,56, 56,10,57,48,10,70,56,10,56,48,10,56,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,69,48,48,50,10,69,78,67,79,68,73,78,71, 32,53,55,51,52,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,54,56,10,57,56,10,56,56,10,57, 56,10,54,56,10,48,56,10,48,56,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 69,48,48,51,10,69,78,67,79,68,73,78,71,32,53,55, 51,52,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,55,56,10,56,56,10,56,56,10,56,56,10,55, 56,10,48,56,10,48,56,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,69,48,48, 52,10,69,78,67,79,68,73,78,71,32,53,55,51,52,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 68,48,10,65,56,10,65,56,10,65,56,10,68,48,10,56, 48,10,56,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,69,48,48,53,10,69, 78,67,79,68,73,78,71,32,53,55,51,52,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,68,48,10, 65,56,10,65,56,10,65,56,10,70,56,10,56,48,10,56, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,69,48,48,54,10,69,78,67,79, 68,73,78,71,32,53,55,51,53,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,53,56,10,65,56,10, 65,56,10,65,56,10,53,56,10,48,56,10,48,56,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,69,48,48,55,10,69,78,67,79,68,73,78, 71,32,53,55,51,53,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,70,56,10,65,56,10,65,56,10, 65,56,10,70,56,10,48,56,10,48,56,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,69,48,48,56,10,69,78,67,79,68,73,78,71,32,53, 55,51,53,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,56,48, 10,56,48,10,66,48,10,67,56,10,56,56,10,65,56,10, 66,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,69,48, 48,57,10,69,78,67,79,68,73,78,71,32,53,55,51,53, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,56,48,10,56,48, 10,66,48,10,67,56,10,56,56,10,57,48,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,69,48,48,65,10, 69,78,67,79,68,73,78,71,32,53,55,51,53,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,56,10,48,56,10,51,56, 10,52,56,10,56,56,10,57,56,10,54,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,69,48,48,66,10,69,78,67, 79,68,73,78,71,32,53,55,51,53,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,56,10,48,56,10,55,56,10,56,56, 10,56,56,10,56,56,10,55,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,69,48,48,67,10,69,78,67,79,68,73, 78,71,32,53,55,51,53,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,56,48,10,56,48,10,68,48,10,65,56,10,65,56, 10,65,56,10,68,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,69,48,48,68,10,69,78,67,79,68,73,78,71,32, 53,55,51,53,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,56, 48,10,56,48,10,68,48,10,65,56,10,65,56,10,65,56, 10,70,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,69, 48,48,69,10,69,78,67,79,68,73,78,71,32,53,55,51, 53,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,56,10,48, 56,10,53,56,10,65,56,10,65,56,10,65,56,10,53,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,69,48,48,70, 10,69,78,67,79,68,73,78,71,32,53,55,51,53,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,56,10,48,56,10,70, 56,10,65,56,10,65,56,10,65,56,10,53,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,69,48,49,48,10,69,78, 67,79,68,73,78,71,32,53,55,51,54,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,68,48,10,65, 56,10,65,56,10,65,56,10,68,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,69,48,49,49,10,69,78,67,79,68, 73,78,71,32,53,55,51,54,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,68,48,10,65,56,10,65, 56,10,65,56,10,70,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,69,48,49,50,10,69,78,67,79,68,73,78,71, 32,53,55,51,54,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,53,56,10,65,56,10,65,56,10,65, 56,10,53,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 69,48,49,51,10,69,78,67,79,68,73,78,71,32,53,55, 51,54,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,70,56,10,65,56,10,65,56,10,65,56,10,53, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,69,48,49, 52,10,69,78,67,79,68,73,78,71,32,53,55,51,54,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 66,48,10,67,56,10,56,56,10,65,56,10,66,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,69,48,49,53,10,69, 78,67,79,68,73,78,71,32,53,55,51,54,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,66,48,10, 67,56,10,56,56,10,57,48,10,70,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,69,48,49,54,10,69,78,67,79, 68,73,78,71,32,53,55,51,54,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,55,56,10,56,56,10, 56,56,10,57,56,10,54,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,69,48,49,55,10,69,78,67,79,68,73,78, 71,32,53,55,51,54,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,70,56,10,56,56,10,56,56,10, 57,56,10,54,56,10,48,56,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,69,48,49,56,10,69,78,67,79,68,73,78,71,32,53, 55,51,54,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,48,10,53,48,10,53,48,10,50,48,10,50,48,10, 52,48,10,57,56,10,54,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,69,48, 49,57,10,69,78,67,79,68,73,78,71,32,53,55,51,54, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,48, 10,53,48,10,53,48,10,65,48,10,50,48,10,52,48,10, 57,56,10,54,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,69,48,49,65,10, 69,78,67,79,68,73,78,71,32,53,55,51,55,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,70,56,10,52,48, 10,56,48,10,56,48,10,56,48,10,52,56,10,51,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,69,48,49,66,10,69,78,67, 79,68,73,78,71,32,53,55,51,55,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,56,10,52,48,10,56,48, 10,54,48,10,49,48,10,48,56,10,56,56,10,55,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,69,48,49,67,10,69,78,67,79,68,73, 78,71,32,53,55,51,55,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,49, 48,10,50,48,10,52,48,10,56,48,10,56,48,10,57,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,69,48,49,68,10,69,78,67,79,68,73,78,71,32, 53,55,51,55,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,48,10,56,56,10,67,56,10,48,56,10,48,56, 10,49,48,10,50,48,10,52,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,69, 48,49,69,10,69,78,67,79,68,73,78,71,32,53,55,51, 55,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,51,48,10,52, 48,10,56,48,10,57,48,10,57,48,10,54,48,10,56,56, 10,56,56,10,55,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,69,48,49,70, 10,69,78,67,79,68,73,78,71,32,53,55,51,55,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 56,10,51,48,10,52,56,10,52,56,10,48,56,10,49,48, 10,54,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,69,48,50,48,10,69,78, 67,79,68,73,78,71,32,53,55,51,55,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,52,48,10,52,48,10,50,48,10,53, 48,10,53,48,10,56,56,10,56,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,69,48,50,49,10,69,78,67,79,68, 73,78,71,32,53,55,51,55,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,49,48,10,49,48,10,55,48,10,66,48,10,57, 48,10,57,48,10,55,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,69,48,50,50,10,69,78,67,79,68,73,78,71, 32,53,55,51,55,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,52,48,10,50,48,10,53, 48,10,56,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 69,48,50,51,10,69,78,67,79,68,73,78,71,32,53,55, 51,55,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,55,48,10,56,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,69,48,50, 52,10,69,78,67,79,68,73,78,71,32,53,55,51,56,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,69,48,50,53,10,69, 78,67,79,68,73,78,71,32,53,55,51,56,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,69,48,50,54,10,69,78,67,79, 68,73,78,71,32,53,55,51,56,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,69,48,50,55,10,69,78,67,79,68,73,78, 71,32,53,55,51,56,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,55,56,10,57,48,10,57,48,10, 66,48,10,52,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,69,48,50,56,10,69,78,67,79,68,73,78,71,32,53, 55,51,56,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,56,48, 10,56,48,10,70,48,10,56,56,10,56,56,10,65,56,10, 66,48,10,56,48,10,56,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,69,48, 50,57,10,69,78,67,79,68,73,78,71,32,53,55,51,56, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,56,48,10,56,48, 10,70,48,10,56,56,10,56,56,10,57,48,10,70,56,10, 56,48,10,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,69,48,50,65,10, 69,78,67,79,68,73,78,71,32,53,55,51,56,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,56,10,48,56,10,55,56, 10,56,56,10,56,56,10,57,56,10,54,56,10,48,56,10, 48,56,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,69,48,50,66,10,69,78,67, 79,68,73,78,71,32,53,55,51,56,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,56,10,48,56,10,70,56,10,56,56, 10,56,56,10,56,56,10,55,56,10,48,56,10,48,56,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,69,48,51,48,10,69,78,67,79,68,73, 78,71,32,53,55,51,57,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,48,10,48,56,10,48,56, 10,52,56,10,51,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,69,48,51,49,10,69,78,67,79,68,73,78,71,32, 53,55,51,57,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,55,48,10,48,56,10,48,56,10,49,48, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,69, 48,51,50,10,69,78,67,79,68,73,78,71,32,53,55,51, 57,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,51,56,10,52,48,10,52,48,10,52,56,10,51,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,69,48,51,51, 10,69,78,67,79,68,73,78,71,32,53,55,51,57,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,55, 56,10,50,48,10,52,48,10,52,56,10,51,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,69,48,51,52,10,69,78, 67,79,68,73,78,71,32,53,55,51,57,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,69,48,51,53,10,69,78,67,79,68, 73,78,71,32,53,55,51,57,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,69,48,51,54,10,69,78,67,79,68,73,78,71, 32,53,55,51,57,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 69,48,51,55,10,69,78,67,79,68,73,78,71,32,53,55, 51,57,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,69,48,51, 56,10,69,78,67,79,68,73,78,71,32,53,55,52,48,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,69,48,51,57,10,69, 78,67,79,68,73,78,71,32,53,55,52,48,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,69,48,51,65,10,69,78,67,79, 68,73,78,71,32,53,55,52,48,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,69,48,51,66,10,69,78,67,79,68,73,78, 71,32,53,55,52,48,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,69,48,51,67,10,69,78,67,79,68,73,78,71,32,53, 55,52,48,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,69,48, 51,68,10,69,78,67,79,68,73,78,71,32,53,55,52,48, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,69,48,51,69,10, 69,78,67,79,68,73,78,71,32,53,55,52,48,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,69,48,51,70,10,69,78,67, 79,68,73,78,71,32,53,55,52,48,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,69,48,52,48,10,69,78,67,79,68,73, 78,71,32,53,55,52,48,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,50, 48,10,53,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,69,48,52,49,10,69,78,67,79,68,73,78,71,32, 53,55,52,48,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,53,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,69, 48,52,50,10,69,78,67,79,68,73,78,71,32,53,55,52, 49,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,53,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,69,48,52,51, 10,69,78,67,79,68,73,78,71,32,53,55,52,49,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,53,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,69,48,52,52,10,69,78, 67,79,68,73,78,71,32,53,55,52,49,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,50,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,69,48,52,53,10,69,78,67,79,68, 73,78,71,32,53,55,52,49,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,50,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,69,48,52,54,10,69,78,67,79,68,73,78,71, 32,53,55,52,49,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,49,48,10,49,48,10,50,48,10, 50,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 69,48,52,55,10,69,78,67,79,68,73,78,71,32,53,55, 52,49,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,52,56,10,57,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,69,48,52, 56,10,69,78,67,79,68,73,78,71,32,53,55,52,49,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,50,48,10,53,48,10,54,48,10,52,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,69,48,52,57,10,69, 78,67,79,68,73,78,71,32,53,55,52,49,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,55,48, 10,65,56,10,66,48,10,65,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,69,48,52,65,10,69,78,67,79, 68,73,78,71,32,53,55,52,49,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,50,48,10,53,48, 10,51,48,10,49,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,69,48,52,66,10,69,78,67,79,68,73,78, 71,32,53,55,52,49,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,55,48,10,65,56,10,54,56, 10,50,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,69,48,52,67,10,69,78,67,79,68,73,78,71,32,53, 55,52,50,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,55,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,69,48, 52,68,10,69,78,67,79,68,73,78,71,32,53,55,52,50, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,55,56,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,69,48,52,69,10, 69,78,67,79,68,73,78,71,32,53,55,52,50,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,52, 48,10,50,48,10,49,48,10,48,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,69,48,52,70,10,69,78,67, 79,68,73,78,71,32,53,55,52,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,53,48,10,50,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,69,48,53,48,10,69,78,67,79,68,73, 78,71,32,53,55,52,50,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,50,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,69,48,53,49,10,69,78,67,79,68,73,78,71,32, 53,55,52,50,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,50,48,10,48,48,10,50,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,69, 48,53,50,10,69,78,67,79,68,73,78,71,32,53,55,52, 50,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,49, 48,10,50,48,10,50,48,10,49,48,10,49,48,10,50,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,69,48,53,51, 10,69,78,67,79,68,73,78,71,32,53,55,52,50,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,65,48,10,68,48,10,56,56,10,65,56,10,68, 48,10,56,56,10,56,56,10,65,56,10,66,48,10,56,48, 10,56,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,69,48,53,52,10,69,78, 67,79,68,73,78,71,32,53,55,52,50,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,52, 48,10,65,56,10,49,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,69,48,53,53,10,69,78,67,79,68, 73,78,71,32,53,55,52,50,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,52,48,10,70, 56,10,49,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,69,48,53,54,10,69,78,67,79,68,73,78,71, 32,53,55,52,51,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,50,48,10,50,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 69,48,53,55,10,69,78,67,79,68,73,78,71,32,53,55, 52,51,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,52,56,10,57,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,69,48,53, 56,10,69,78,67,79,68,73,78,71,32,53,55,52,51,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,52,48,10,54,48,10,53, 48,10,54,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,69,48,53,57,10,69, 78,67,79,68,73,78,71,32,53,55,52,51,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,69,48,53,65,10,69,78,67,79, 68,73,78,71,32,53,55,52,51,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 49,48,10,49,48,10,51,48,10,53,48,10,51,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,69,48,53,66,10,69,78,67,79,68,73,78, 71,32,53,55,52,51,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,69,48,53,67,10,69,78,67,79,68,73,78,71,32,53, 55,52,51,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 49,48,10,48,56,10,49,56,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,69,48, 53,68,10,69,78,67,79,68,73,78,71,32,53,55,52,51, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 52,48,10,54,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,69,48,53,69,10, 69,78,67,79,68,73,78,71,32,53,55,52,51,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,69,48,53,70,10,69,78,67, 79,68,73,78,71,32,53,55,52,51,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,69,48,54,48,10,69,78,67,79,68,73, 78,71,32,53,55,52,52,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,69,48,54,49,10,69,78,67,79,68,73,78,71,32, 53,55,52,52,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,69, 48,54,50,10,69,78,67,79,68,73,78,71,32,53,55,52, 52,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,70,56,10,53,48,10,53,48,10,53,48,10,50,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,69,48,54,51, 10,69,78,67,79,68,73,78,71,32,53,55,52,52,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,55, 67,10,65,56,10,65,56,10,65,56,10,53,52,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,69,48,54,52,10,69,78, 67,79,68,73,78,71,32,53,55,52,52,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,52,48,10,52,48,10,52,48,10,52, 48,10,52,48,10,52,48,10,52,48,10,52,56,10,51,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,69,48,54,53,10,69,78,67,79,68, 73,78,71,32,53,55,52,52,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,56,48,10,56,48,10,56,48,10,70,48,10,65, 48,10,65,48,10,66,56,10,57,48,10,54,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,69,48,54,54,10,69,78,67,79,68,73,78,71, 32,53,55,52,52,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 56,48,10,56,48,10,70,67,10,65,56,10,65,56,10,65, 56,10,57,67,10,57,48,10,55,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 69,48,54,55,10,69,78,67,79,68,73,78,71,32,53,55, 52,52,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,49,48,10, 49,48,10,49,48,10,49,48,10,49,48,10,49,48,10,49, 48,10,53,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,69,48,54, 56,10,69,78,67,79,68,73,78,71,32,53,55,52,52,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 50,48,10,50,48,10,51,48,10,50,56,10,51,56,10,65, 48,10,52,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,69,48,54,57,10,69, 78,67,79,68,73,78,71,32,53,55,52,52,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,52,48,10,52,48,10,54,56,10, 53,52,10,53,52,10,53,52,10,55,67,10,56,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,69,48,54,65,10,69,78,67,79, 68,73,78,71,32,53,55,52,53,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,67,48,10,50,48,10,49,48,10,48,56,10, 52,56,10,56,56,10,55,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,69,48,54,66,10,69,78,67,79,68,73,78, 71,32,53,55,52,53,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,67,48,10,50,48,10,49,48,10,48,56,10,52,56,10, 56,56,10,55,48,10,48,56,10,55,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,69,48,54,67,10,69,78,67,79,68,73,78,71,32,53, 55,52,53,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,50,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,69,48, 54,68,10,69,78,67,79,68,73,78,71,32,53,55,52,53, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,50,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,69,48,54,69,10, 69,78,67,79,68,73,78,71,32,53,55,52,53,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,50,48,10,53,48,10, 50,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,102,102,10,69,78,67,79,68,73,78,71, 32,54,52,50,53,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,50,56,10,53,52,10, 53,48,10,53,48,10,70,56,10,53,48,10,53,48,10,53, 48,10,53,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,102,105,10, 69,78,67,79,68,73,78,71,32,54,52,50,53,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,51,48,10,52,56,10,52,56,10,52,48,10,70,56, 10,52,56,10,52,56,10,52,56,10,52,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,102,108,10,69,78,67,79,68,73,78,71, 32,54,52,50,53,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,51,56,10,52,56,10, 52,56,10,52,56,10,70,56,10,52,56,10,52,56,10,52, 56,10,52,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,102,102,105, 10,69,78,67,79,68,73,78,71,32,54,52,50,53,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,53,48,10,65,56,10,65,48,10,65,56,10,70, 56,10,65,56,10,65,56,10,65,56,10,65,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,102,102,108,10,69,78,67,79,68,73, 78,71,32,54,52,50,54,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,53,56,10,65, 56,10,65,56,10,65,56,10,70,56,10,65,56,10,65,56, 10,65,56,10,65,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,66,48,53,10,69,78,67,79,68,73,78,71,32, 54,52,50,54,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,51,48,10,53,48,10,53, 48,10,53,48,10,53,56,10,53,48,10,53,48,10,53,48, 10,52,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 66,48,54,10,69,78,67,79,68,73,78,71,32,54,52,50, 54,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,51,48,10,53,48,10,53,48,10,66, 56,10,57,48,10,53,48,10,51,48,10,51,48,10,67,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,49,51, 10,69,78,67,79,68,73,78,71,32,54,52,50,55,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,53,56,10,54,48,10,50,48,10,66,52,10,66, 52,10,66,52,10,66,52,10,66,52,10,54,67,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,66,49,52,10,69,78, 67,79,68,73,78,71,32,54,52,50,55,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 49,48,10,51,56,10,51,48,10,66,52,10,66,52,10,66, 52,10,66,52,10,66,67,10,55,52,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,66,49,53,10,69,78,67,79,68, 73,78,71,32,54,52,50,55,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,49,48,10, 51,48,10,51,48,10,66,56,10,66,52,10,66,52,10,66, 52,10,66,52,10,55,52,10,49,48,10,49,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,66,49,54,10,69,78,67,79,68,73,78,71, 32,54,52,50,55,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,54,48,10,54,48,10, 55,48,10,66,52,10,66,52,10,66,52,10,66,52,10,66, 52,10,54,67,10,50,48,10,51,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,49,55,10,69,78,67,79,68,73,78,71,32,54,52, 50,55,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,54,48,10,54,48,10, 70,52,10,70,52,10,70,52,10,70,52,10,70,52,10,54, 67,10,50,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,66,49, 68,10,69,78,67,79,68,73,78,71,32,54,52,50,56,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,51,48,10, 49,48,10,49,48,10,48,48,10,49,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,66,49,69,10,69, 78,67,79,68,73,78,71,32,54,52,50,56,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,56,56, 10,55,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,53,55,55,48,53,10,69,78, 67,79,68,73,78,71,32,54,52,50,56,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,68,56,10,52,56,10,52, 56,10,48,48,10,70,56,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,66,50,48,10,69,78,67,79,68, 73,78,71,32,54,52,50,56,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,57,56,10,52,56,10,52,56,10,50, 56,10,50,56,10,70,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,66,50,49,10,69,78,67,79,68,73,78,71, 32,54,52,50,56,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,57,48,10,52,56,10,54,56,10,57,48,10,56, 56,10,67,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,50,50,10,69,78,67,79,68,73,78,71,32,54,52, 50,57,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,56,10,49,48,10,49,48,10,49,48,10,49,48,10,49, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,66,50, 51,10,69,78,67,79,68,73,78,71,32,54,52,50,57,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 48,56,10,48,56,10,56,56,10,56,56,10,56,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,66,50,52,10,69, 78,67,79,68,73,78,71,32,54,52,50,57,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,70,56,10,48,56,10, 48,56,10,48,56,10,48,56,10,70,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,66,50,53,10,69,78,67,79, 68,73,78,71,32,54,52,50,57,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,56,48, 10,56,48,10,56,48,10,70,56,10,48,56,10,48,56,10, 48,56,10,49,48,10,54,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,50,54,10,69,78,67,79,68,73,78, 71,32,54,52,50,57,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,56,10,52,56,10,52,56,10,52,56,10, 52,56,10,55,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,66,50,55,10,69,78,67,79,68,73,78,71,32,54, 52,50,57,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,70,48,10,48,56,10,48,56,10,48,56,10,48,56,10, 48,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,66, 50,56,10,69,78,67,79,68,73,78,71,32,54,52,50,57, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,70,56, 10,52,56,10,52,56,10,52,56,10,52,56,10,67,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,66,50,57,10, 69,78,67,79,68,73,78,71,32,54,52,50,57,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,50,48,10,50,48,10,70,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,102,105,105,53,55,54,57,52,10,69, 78,67,79,68,73,78,71,32,54,52,50,57,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,49,48,10,48,48,10,65,56,10,65,56,10, 65,56,10,69,56,10,56,56,10,70,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,53,55,54,57,53,10,69,78, 67,79,68,73,78,71,32,54,52,50,57,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,56,48,10,48,48,10,65,56,10,65,56,10,65, 56,10,69,56,10,56,56,10,70,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,66,50,67,10,69,78,67,79,68, 73,78,71,32,54,52,51,48,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 49,48,10,48,48,10,65,56,10,65,56,10,66,56,10,69, 56,10,56,56,10,70,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,66,50,68,10,69,78,67,79,68,73,78,71, 32,54,52,51,48,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,56,48,10, 48,48,10,65,56,10,65,56,10,66,56,10,69,56,10,56, 56,10,70,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,50,69,10,69,78,67,79,68,73,78,71,32,54,52, 51,48,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,57,48,10, 52,56,10,54,56,10,57,48,10,56,56,10,67,56,10,48, 48,10,55,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,66,50, 70,10,69,78,67,79,68,73,78,71,32,54,52,51,48,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,57,48,10,52,56,10, 54,56,10,57,48,10,56,56,10,67,56,10,48,48,10,55, 48,10,50,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,66,51,48,10,69, 78,67,79,68,73,78,71,32,54,52,51,48,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,57,48,10,52,56,10, 54,56,10,57,48,10,56,56,10,67,56,10,48,48,10,50, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,66,51,49,10,69,78,67,79, 68,73,78,71,32,54,52,51,48,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,70,48,10,49,48,10,53,48,10, 49,48,10,49,48,10,70,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,51,50,10,69,78,67,79,68,73,78, 71,32,54,52,51,48,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,52,48,10,50,48,10,49,48,10,57,48,10, 50,56,10,52,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,66,51,51,10,69,78,67,79,68,73,78,71,32,54, 52,51,48,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,70,56,10,49,48,10,49,48,10,53,48,10,49,48,10, 49,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,66, 51,52,10,69,78,67,79,68,73,78,71,32,54,52,51,48, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,70,56, 10,48,56,10,48,56,10,65,56,10,56,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,55,50, 51,10,69,78,67,79,68,73,78,71,32,54,52,51,48,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,51,48,10, 49,48,10,49,48,10,53,48,10,49,48,10,49,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,66,51,54,10,69, 78,67,79,68,73,78,71,32,54,52,51,49,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,70,56,10,50,48,10, 50,48,10,49,48,10,53,48,10,49,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,66,51,56,10,69,78,67,79, 68,73,78,71,32,54,52,51,49,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,57,56,10,56,56,10,65,56,10, 56,56,10,56,56,10,70,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,51,57,10,69,78,67,79,68,73,78, 71,32,54,52,51,49,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,51,48,10,49,48,10,53,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,66,51,65,10,69,78,67,79,68,73,78,71,32,54, 52,51,49,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,70,56,10,48,56,10,48,56,10,50,56,10,48,56,10, 48,56,10,48,56,10,48,56,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,66, 51,66,10,69,78,67,79,68,73,78,71,32,54,52,51,49, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,70,56, 10,48,56,10,52,56,10,48,56,10,48,56,10,70,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,66,51,67,10, 69,78,67,79,68,73,78,71,32,54,52,51,49,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,56,48,10,56,48,10,56,48,10,70,56,10,48,56, 10,52,56,10,48,56,10,49,48,10,54,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,51,69,10,69,78,67, 79,68,73,78,71,32,54,52,51,49,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,66,48,10,52,56,10,56,56, 10,65,56,10,56,56,10,66,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,70,66,52,48,10,69,78,67,79,68,73, 78,71,32,54,52,51,50,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,49,56,10,48,56,10,50,56,10,48,56, 10,48,56,10,55,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,66,52,49,10,69,78,67,79,68,73,78,71,32, 54,52,51,50,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,70,56,10,56,56,10,65,56,10,56,56,10,57,48, 10,69,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 66,52,51,10,69,78,67,79,68,73,78,71,32,54,52,51, 50,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,55, 56,10,56,56,10,56,56,10,50,56,10,48,56,10,48,56, 10,48,56,10,48,56,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,52,52, 10,69,78,67,79,68,73,78,71,32,54,52,51,50,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,56,10,56, 56,10,65,56,10,48,56,10,48,56,10,70,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,66,52,54,10,69,78, 67,79,68,73,78,71,32,54,52,51,50,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,57,48,10,52,56,10,50, 56,10,57,48,10,48,56,10,70,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,66,52,55,10,69,78,67,79,68, 73,78,71,32,54,52,51,50,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,70,56,10,48,56,10,65,56,10,56, 56,10,56,56,10,66,48,10,56,48,10,56,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,66,52,56,10,69,78,67,79,68,73,78,71, 32,54,52,51,50,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,70,48,10,48,56,10,50,56,10,48,56,10,48, 56,10,48,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,52,57,10,69,78,67,79,68,73,78,71,32,54,52, 51,50,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 65,56,10,65,56,10,66,56,10,69,56,10,56,56,10,70, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,66,52, 65,10,69,78,67,79,68,73,78,71,32,54,52,51,51,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 52,56,10,53,56,10,52,56,10,52,56,10,67,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,102,105,105,53,55,55,48,48, 10,69,78,67,79,68,73,78,71,32,54,52,51,51,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,50,48,10,48,48,10,51,48,10,49, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,66,52,67,10,69,78, 67,79,68,73,78,71,32,54,52,51,51,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,55,48,10,48,48,10,70,48,10,49,48,10,49, 48,10,49,48,10,49,48,10,70,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,66,52,68,10,69,78,67,79,68, 73,78,71,32,54,52,51,51,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 55,48,10,48,48,10,70,56,10,48,56,10,48,56,10,48, 56,10,48,56,10,70,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,66,52,69,10,69,78,67,79,68,73,78,71, 32,54,52,51,51,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,55,48,10, 48,48,10,55,56,10,56,56,10,56,56,10,48,56,10,48, 56,10,70,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,52,70,10,69,78,67,79,68,73,78,71,32,54,52, 51,51,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,48,10,56,48,10,56,48,10, 57,48,10,52,56,10,54,56,10,57,48,10,56,56,10,67, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,69,50, 48,10,69,78,67,79,68,73,78,71,32,54,53,48,53,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,51,67,10,67,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,69,50,49,10,69, 78,67,79,68,73,78,71,32,54,53,48,53,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,69,48, 10,49,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,69,50,50,10,69,78,67,79, 68,73,78,71,32,54,53,48,53,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,51,67,10,52,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,50,51,10,69,78,67,79,68,73,78, 71,32,54,53,48,53,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,56,10,70,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,70,48,49,10,69,78,67,79,68,73,78,71,32,54, 53,50,56,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,48,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,70, 48,50,10,69,78,67,79,68,73,78,71,32,54,53,50,56, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,53,48,10,53,48,10,53,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,70,48,51,10, 69,78,67,79,68,73,78,71,32,54,53,50,56,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,53,48,10,53,48,10,70,56,10,53,48, 10,70,56,10,53,48,10,53,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,48,52,10,69,78,67, 79,68,73,78,71,32,54,53,50,56,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,55,56,10,65,48,10,65,48,10,55,48,10,50,56, 10,50,56,10,70,48,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,70,70,48,53,10,69,78,67,79,68,73, 78,71,32,54,53,50,56,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,52,56,10,65, 56,10,53,48,10,49,48,10,50,48,10,52,48,10,53,48, 10,65,56,10,57,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,70,48,54,10,69,78,67,79,68,73,78,71,32, 54,53,50,56,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,52,48,10,65,48,10,65, 48,10,52,48,10,65,48,10,57,56,10,57,48,10,54,56, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 70,48,55,10,69,78,67,79,68,73,78,71,32,54,53,50, 56,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,50,48,10,50,48,10,50,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,48,56, 10,69,78,67,79,68,73,78,71,32,54,53,50,56,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 49,48,10,50,48,10,50,48,10,52,48,10,52,48,10,52, 48,10,52,48,10,52,48,10,50,48,10,50,48,10,49,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,70,48,57,10,69,78, 67,79,68,73,78,71,32,54,53,50,56,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,52,48,10, 50,48,10,50,48,10,49,48,10,49,48,10,49,48,10,49, 48,10,49,48,10,50,48,10,50,48,10,52,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,70,48,65,10,69,78,67,79,68, 73,78,71,32,54,53,50,57,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 50,48,10,65,56,10,70,56,10,55,48,10,70,56,10,65, 56,10,50,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,70,48,66,10,69,78,67,79,68,73,78,71, 32,54,53,50,57,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 50,48,10,50,48,10,70,56,10,50,48,10,50,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,48,67,10,69,78,67,79,68,73,78,71,32,54,53, 50,57,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,51,48,10,50, 48,10,52,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,70,48, 68,10,69,78,67,79,68,73,78,71,32,54,53,50,57,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,56,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,70,48,69,10,69, 78,67,79,68,73,78,71,32,54,53,50,57,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,50,48,10,55,48,10,50,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,70,48,70,10,69,78,67,79, 68,73,78,71,32,54,53,50,57,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,56, 10,48,56,10,49,48,10,49,48,10,50,48,10,52,48,10, 52,48,10,56,48,10,56,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,49,48,10,69,78,67,79,68,73,78, 71,32,54,53,50,57,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,53,48, 10,56,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 53,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,70,49,49,10,69,78,67,79,68,73,78,71,32,54, 53,50,57,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,54,48,10,65,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 70,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,70, 49,50,10,69,78,67,79,68,73,78,71,32,54,53,50,57, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,55,48,10,56,56,10,56,56,10,48,56, 10,49,48,10,50,48,10,52,48,10,56,48,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,70,49,51,10, 69,78,67,79,68,73,78,71,32,54,53,50,57,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,70,56,10,48,56,10,49,48,10,50,48,10,55,48, 10,48,56,10,48,56,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,49,52,10,69,78,67, 79,68,73,78,71,32,54,53,51,48,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,49, 48,10,49,48,10,51,48,10,53,48,10,53,48,10,57,48, 10,70,56,10,49,48,10,49,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,70,70,49,53,10,69,78,67,79,68,73, 78,71,32,54,53,51,48,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,70,56,10,56, 48,10,56,48,10,66,48,10,67,56,10,48,56,10,48,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,70,49,54,10,69,78,67,79,68,73,78,71,32, 54,53,51,48,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 48,10,56,48,10,70,48,10,56,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 70,49,55,10,69,78,67,79,68,73,78,71,32,54,53,51, 48,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,70,56,10,48,56,10,49,48,10,49, 48,10,50,48,10,50,48,10,52,48,10,52,48,10,52,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,49,56, 10,69,78,67,79,68,73,78,71,32,54,53,51,48,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,55,48,10,56,56,10,56,56,10,56,56,10,55, 48,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,70,49,57,10,69,78, 67,79,68,73,78,71,32,54,53,51,48,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 55,48,10,56,56,10,56,56,10,56,56,10,55,56,10,48, 56,10,48,56,10,56,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,70,49,65,10,69,78,67,79,68, 73,78,71,32,54,53,51,48,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,50,48,10,55,48,10,50,48,10,48,48,10,48, 48,10,50,48,10,55,48,10,50,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,70,49,66,10,69,78,67,79,68,73,78,71, 32,54,53,51,48,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 50,48,10,55,48,10,50,48,10,48,48,10,48,48,10,51, 48,10,50,48,10,52,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,49,67,10,69,78,67,79,68,73,78,71,32,54,53, 51,48,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,56,10,49,48,10,50,48,10, 52,48,10,56,48,10,52,48,10,50,48,10,49,48,10,48, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,70,49, 68,10,69,78,67,79,68,73,78,71,32,54,53,51,48,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 48,48,10,48,48,10,70,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,70,49,69,10,69, 78,67,79,68,73,78,71,32,54,53,51,49,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,56,48,10,52,48,10,50,48,10,49,48,10,48,56,10, 49,48,10,50,48,10,52,48,10,56,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,70,49,70,10,69,78,67,79, 68,73,78,71,32,54,53,51,49,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,55,48, 10,56,56,10,56,56,10,48,56,10,49,48,10,50,48,10, 50,48,10,48,48,10,50,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,50,48,10,69,78,67,79,68,73,78, 71,32,54,53,51,49,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,56,56, 10,56,56,10,57,56,10,65,56,10,65,56,10,66,48,10, 56,48,10,55,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,70,50,49,10,69,78,67,79,68,73,78,71,32,54, 53,51,49,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,53,48,10,56,56, 10,56,56,10,56,56,10,70,56,10,56,56,10,56,56,10, 56,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,70, 50,50,10,69,78,67,79,68,73,78,71,32,54,53,51,49, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,70,48,10,52,56,10,52,56,10,52,56, 10,55,48,10,52,56,10,52,56,10,52,56,10,70,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,70,50,51,10, 69,78,67,79,68,73,78,71,32,54,53,51,49,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,55,48,10,56,56,10,56,48,10,56,48,10,56,48, 10,56,48,10,56,48,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,50,52,10,69,78,67, 79,68,73,78,71,32,54,53,51,49,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 48,10,52,56,10,52,56,10,52,56,10,52,56,10,52,56, 10,52,56,10,52,56,10,70,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,70,70,50,53,10,69,78,67,79,68,73, 78,71,32,54,53,51,49,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,70,56,10,56, 48,10,56,48,10,56,48,10,70,48,10,56,48,10,56,48, 10,56,48,10,70,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,70,50,54,10,69,78,67,79,68,73,78,71,32, 54,53,51,49,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,70,56,10,56,48,10,56, 48,10,56,48,10,70,48,10,56,48,10,56,48,10,56,48, 10,56,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 70,50,55,10,69,78,67,79,68,73,78,71,32,54,53,51, 49,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,55,48,10,56,56,10,56,48,10,56, 48,10,56,48,10,57,56,10,56,56,10,56,56,10,55,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,50,56, 10,69,78,67,79,68,73,78,71,32,54,53,51,50,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,56,56,10,56,56,10,56,56,10,70, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,70,50,57,10,69,78, 67,79,68,73,78,71,32,54,53,51,50,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 55,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,70,50,65,10,69,78,67,79,68, 73,78,71,32,54,53,51,50,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,51,56,10, 49,48,10,49,48,10,49,48,10,49,48,10,49,48,10,49, 48,10,57,48,10,54,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,70,50,66,10,69,78,67,79,68,73,78,71, 32,54,53,51,50,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,56,56,10,56,56,10, 57,48,10,65,48,10,67,48,10,65,48,10,57,48,10,56, 56,10,56,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,50,67,10,69,78,67,79,68,73,78,71,32,54,53, 51,50,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,48,10,56,48,10,56,48,10, 56,48,10,56,48,10,56,48,10,56,48,10,56,48,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,70,50, 68,10,69,78,67,79,68,73,78,71,32,54,53,51,50,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,56,56,10,56,56,10,68,56,10,65,56,10, 65,56,10,56,56,10,56,56,10,56,56,10,56,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,70,50,69,10,69, 78,67,79,68,73,78,71,32,54,53,51,50,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,56,56,10,67,56,10,67,56,10,65,56,10,65,56,10, 57,56,10,57,56,10,56,56,10,56,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,70,50,70,10,69,78,67,79, 68,73,78,71,32,54,53,51,50,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,55,48, 10,56,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,55,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,51,48,10,69,78,67,79,68,73,78, 71,32,54,53,51,50,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,70,48,10,56,56, 10,56,56,10,56,56,10,70,48,10,56,48,10,56,48,10, 56,48,10,56,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,70,51,49,10,69,78,67,79,68,73,78,71,32,54, 53,51,50,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,48,10,56,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,65,56,10, 55,48,10,48,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,70, 51,50,10,69,78,67,79,68,73,78,71,32,54,53,51,51, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,70,48,10,56,56,10,56,56,10,56,56, 10,70,48,10,65,48,10,57,48,10,56,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,70,51,51,10, 69,78,67,79,68,73,78,71,32,54,53,51,51,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,55,48,10,56,56,10,56,48,10,56,48,10,55,48, 10,48,56,10,48,56,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,51,52,10,69,78,67, 79,68,73,78,71,32,54,53,51,51,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 56,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,70,70,51,53,10,69,78,67,79,68,73, 78,71,32,54,53,51,51,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,56,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,70,51,54,10,69,78,67,79,68,73,78,71,32, 54,53,51,51,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,56,56,10,56,56,10,56, 56,10,56,56,10,53,48,10,53,48,10,53,48,10,50,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 70,51,55,10,69,78,67,79,68,73,78,71,32,54,53,51, 51,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,56,56,10,56,56,10,56,56,10,56, 56,10,65,56,10,65,56,10,65,56,10,68,56,10,56,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,51,56, 10,69,78,67,79,68,73,78,71,32,54,53,51,51,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,56,56,10,53,48,10,53,48,10,50, 48,10,53,48,10,53,48,10,56,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,70,51,57,10,69,78, 67,79,68,73,78,71,32,54,53,51,51,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 56,56,10,56,56,10,53,48,10,53,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,70,51,65,10,69,78,67,79,68, 73,78,71,32,54,53,51,51,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,70,56,10, 48,56,10,49,48,10,49,48,10,50,48,10,52,48,10,52, 48,10,56,48,10,70,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,70,51,66,10,69,78,67,79,68,73,78,71, 32,54,53,51,51,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,55,48,10,52,48,10,52,48,10, 52,48,10,52,48,10,52,48,10,52,48,10,52,48,10,52, 48,10,52,48,10,55,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,51,67,10,69,78,67,79,68,73,78,71,32,54,53, 51,52,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,48,10,56,48,10,52,48,10, 52,48,10,50,48,10,49,48,10,49,48,10,48,56,10,48, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,70,51, 68,10,69,78,67,79,68,73,78,71,32,54,53,51,52,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,55,48,10,49,48,10,49,48,10,49,48,10,49,48,10, 49,48,10,49,48,10,49,48,10,49,48,10,49,48,10,55, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,70,51,69,10,69, 78,67,79,68,73,78,71,32,54,53,51,52,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,50,48,10,53,48,10,56,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,70,51,70,10,69,78,67,79, 68,73,78,71,32,54,53,51,52,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,70,56,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,52,48,10,69,78,67,79,68,73,78, 71,32,54,53,51,52,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,50,48,10,49,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,70,52,49,10,69,78,67,79,68,73,78,71,32,54, 53,51,52,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,55,48,10,48,56,10,55,56,10,56,56,10,56,56,10, 55,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,70, 52,50,10,69,78,67,79,68,73,78,71,32,54,53,51,52, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,48,10,56,48,10,56,48,10,70,48, 10,56,56,10,56,56,10,56,56,10,56,56,10,70,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,70,52,51,10, 69,78,67,79,68,73,78,71,32,54,53,51,52,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,55,48,10,56,56, 10,56,48,10,56,48,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,52,52,10,69,78,67, 79,68,73,78,71,32,54,53,51,52,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 56,10,48,56,10,48,56,10,55,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,55,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,70,70,52,53,10,69,78,67,79,68,73, 78,71,32,54,53,51,52,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,55,48,10,56,56,10,70,56,10,56,48, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,70,52,54,10,69,78,67,79,68,73,78,71,32, 54,53,51,53,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,51,48,10,52,56,10,52, 48,10,52,48,10,70,48,10,52,48,10,52,48,10,52,48, 10,52,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 70,52,55,10,69,78,67,79,68,73,78,71,32,54,53,51, 53,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,55, 48,10,56,56,10,56,56,10,56,56,10,55,56,10,48,56, 10,56,56,10,55,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,52,56, 10,69,78,67,79,68,73,78,71,32,54,53,51,53,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,48,10,56,48,10,56,48,10,66,48,10,67, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,70,52,57,10,69,78, 67,79,68,73,78,71,32,54,53,51,53,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,50,48,10,48,48,10,54,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,70,52,65,10,69,78,67,79,68, 73,78,71,32,54,53,51,53,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 49,48,10,48,48,10,51,48,10,49,48,10,49,48,10,49, 48,10,49,48,10,57,48,10,57,48,10,54,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,70,52,66,10,69,78,67,79,68,73,78,71, 32,54,53,51,53,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,56,48,10,56,48,10, 56,48,10,57,48,10,65,48,10,67,48,10,65,48,10,57, 48,10,56,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,52,67,10,69,78,67,79,68,73,78,71,32,54,53, 51,53,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,54,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,70,52, 68,10,69,78,67,79,68,73,78,71,32,54,53,51,53,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,68,48,10, 65,56,10,65,56,10,65,56,10,65,56,10,56,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,70,52,69,10,69, 78,67,79,68,73,78,71,32,54,53,51,53,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,66,48,10,67,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,70,52,70,10,69,78,67,79, 68,73,78,71,32,54,53,51,53,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,55,48,10,56,56,10,56,56,10, 56,56,10,56,56,10,55,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,53,48,10,69,78,67,79,68,73,78, 71,32,54,53,51,54,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,48,10,56,56,10,56,56,10,56,56,10, 70,48,10,56,48,10,56,48,10,56,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,70,53,49,10,69,78,67,79,68,73,78,71,32,54, 53,51,54,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,55,56,10,56,56,10,56,56,10,56,56,10,55,56,10, 48,56,10,48,56,10,48,56,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,70, 53,50,10,69,78,67,79,68,73,78,71,32,54,53,51,54, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,66,48, 10,67,56,10,56,48,10,56,48,10,56,48,10,56,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,70,53,51,10, 69,78,67,79,68,73,78,71,32,54,53,51,54,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,55,48,10,56,56, 10,54,48,10,49,48,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,53,52,10,69,78,67, 79,68,73,78,71,32,54,53,51,54,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,52,48,10,52,48,10,70,48,10,52,48,10,52,48, 10,52,48,10,52,56,10,51,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,70,70,53,53,10,69,78,67,79,68,73, 78,71,32,54,53,51,54,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,57,56,10,54,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,70,53,54,10,69,78,67,79,68,73,78,71,32, 54,53,51,54,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,56,56,10,56,56,10,56,56,10,53,48,10,53,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 70,53,55,10,69,78,67,79,68,73,78,71,32,54,53,51, 54,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,56, 56,10,56,56,10,65,56,10,65,56,10,65,56,10,53,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,53,56, 10,69,78,67,79,68,73,78,71,32,54,53,51,54,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,56,10,53, 48,10,50,48,10,50,48,10,53,48,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,70,53,57,10,69,78, 67,79,68,73,78,71,32,54,53,51,54,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,56,56,10,56,56,10,56, 56,10,57,56,10,54,56,10,48,56,10,56,56,10,55,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,70,53,65,10,69,78,67,79,68, 73,78,71,32,54,53,51,55,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,70,56,10,49,48,10,50,48,10,52, 48,10,56,48,10,70,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,70,53,66,10,69,78,67,79,68,73,78,71, 32,54,53,51,55,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,49,56,10,50,48,10,50,48,10, 50,48,10,50,48,10,67,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,49,56,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,53,67,10,69,78,67,79,68,73,78,71,32,54,53, 51,55,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,70,53, 68,10,69,78,67,79,68,73,78,71,32,54,53,51,55,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 49,56,10,50,48,10,50,48,10,50,48,10,50,48,10,67, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,70,53,69,10,69, 78,67,79,68,73,78,71,32,54,53,51,55,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,52,56,10,65,56,10,57,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,70,54,49,10,69,78,67,79, 68,73,78,71,32,54,53,51,55,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 50,48,10,53,48,10,50,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,54,50,10,69,78,67,79,68,73,78, 71,32,54,53,51,55,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,52,48, 10,52,48,10,52,48,10,52,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,70,54,51,10,69,78,67,79,68,73,78,71,32,54, 53,51,55,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,49,48,10,49,48,10,49,48,10,49,48,10, 55,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,70, 54,52,10,69,78,67,79,68,73,78,71,32,54,53,51,56, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,52,48,10,50,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,70,54,53,10, 69,78,67,79,68,73,78,71,32,54,53,51,56,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,50,48,10,55,48, 10,50,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,54,54,10,69,78,67, 79,68,73,78,71,32,54,53,51,56,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,70,56,10,48,56,10,70,56,10,48,56,10,48,56, 10,49,48,10,50,48,10,67,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,70,70,54,55,10,69,78,67,79,68,73, 78,71,32,54,53,51,56,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,48,10,49,48,10,53,48, 10,52,48,10,56,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,70,54,56,10,69,78,67,79,68,73,78,71,32, 54,53,51,56,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,49,48,10,50,48,10,54,48,10,65,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 70,54,57,10,69,78,67,79,68,73,78,71,32,54,53,51, 56,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,52,48,10,69,48,10,65,48,10,50,48,10,52,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,54,65, 10,69,78,67,79,68,73,78,71,32,54,53,51,56,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,55, 48,10,50,48,10,50,48,10,50,48,10,70,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,70,54,66,10,69,78, 67,79,68,73,78,71,32,54,53,51,56,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,50,48,10,70, 48,10,50,48,10,54,48,10,65,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,70,54,67,10,69,78,67,79,68, 73,78,71,32,54,53,51,56,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,52,48,10,55,56,10,67, 56,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,70,54,68,10,69,78,67,79,68,73,78,71, 32,54,53,51,56,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,54,48,10,50,48,10,50,48,10,50, 48,10,70,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,54,69,10,69,78,67,79,68,73,78,71,32,54,53, 51,57,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,70,48,10,49,48,10,55,48,10,49,48,10,70, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,70,54, 70,10,69,78,67,79,68,73,78,71,32,54,53,51,57,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 65,56,10,65,56,10,48,56,10,49,48,10,69,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,70,55,48,10,69, 78,67,79,68,73,78,71,32,54,53,51,57,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,70,55,49,10,69,78,67,79, 68,73,78,71,32,54,53,51,57,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,70,56, 10,48,56,10,48,56,10,50,56,10,51,48,10,50,48,10, 50,48,10,52,48,10,56,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,55,50,10,69,78,67,79,68,73,78, 71,32,54,53,51,57,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,56,10,49,48, 10,50,48,10,54,48,10,65,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,70,55,51,10,69,78,67,79,68,73,78,71,32,54, 53,51,57,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,50,48,10,50,48,10,70,56,10,56,56, 10,56,56,10,48,56,10,48,56,10,49,48,10,50,48,10, 52,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,70, 55,52,10,69,78,67,79,68,73,78,71,32,54,53,51,57, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,55,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,70,55,53,10, 69,78,67,79,68,73,78,71,32,54,53,51,57,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,49, 48,10,49,48,10,70,56,10,49,48,10,49,48,10,51,48, 10,53,48,10,57,48,10,49,48,10,49,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,55,54,10,69,78,67, 79,68,73,78,71,32,54,53,51,57,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,50,48,10,70,67,10,50,52,10,50,52,10,50,52, 10,52,52,10,52,52,10,57,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,70,70,55,55,10,69,78,67,79,68,73, 78,71,32,54,53,51,57,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,52,48,10,52, 48,10,53,56,10,69,48,10,50,48,10,51,56,10,68,48, 10,49,48,10,49,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,70,55,56,10,69,78,67,79,68,73,78,71,32, 54,53,52,48,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,52,48,10,55,56,10,52, 56,10,56,56,10,48,56,10,49,48,10,49,48,10,50,48, 10,52,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 70,55,57,10,69,78,67,79,68,73,78,71,32,54,53,52, 48,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,52,48,10,52,48,10,55,67,10,56, 56,10,48,56,10,48,56,10,49,48,10,49,48,10,50,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,55,65, 10,69,78,67,79,68,73,78,71,32,54,53,52,48,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,70,56,10,48,56,10,48,56,10,48, 56,10,48,56,10,48,56,10,48,56,10,70,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,70,55,66,10,69,78, 67,79,68,73,78,71,32,54,53,52,48,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 52,56,10,52,56,10,70,67,10,52,56,10,52,56,10,48, 56,10,49,48,10,49,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,70,55,67,10,69,78,67,79,68, 73,78,71,32,54,53,52,48,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 56,48,10,52,48,10,48,48,10,56,56,10,52,56,10,49, 48,10,50,48,10,67,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,70,55,68,10,69,78,67,79,68,73,78,71, 32,54,53,52,48,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,70,56,10,48,56,10, 48,56,10,48,56,10,49,48,10,49,48,10,51,48,10,52, 56,10,56,52,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,55,69,10,69,78,67,79,68,73,78,71,32,54,53, 52,48,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,52,48,10,52,48,10,55,67,10, 67,52,10,52,56,10,52,48,10,52,48,10,52,48,10,51, 67,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,70,55, 70,10,69,78,67,79,68,73,78,71,32,54,53,52,48,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,56,56,10,52,56,10,52,56,10, 49,48,10,49,48,10,50,48,10,50,48,10,52,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,70,56,48,10,69, 78,67,79,68,73,78,71,32,54,53,52,48,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,52,48,10,55,56,10,52,56,10,56,56,10,50,56,10, 49,48,10,49,48,10,50,48,10,52,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,70,56,49,10,69,78,67,79, 68,73,78,71,32,54,53,52,48,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,49,48, 10,50,48,10,54,48,10,50,48,10,70,56,10,50,48,10, 50,48,10,52,48,10,56,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,56,50,10,69,78,67,79,68,73,78, 71,32,54,53,52,49,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,65,48, 10,65,56,10,65,56,10,48,56,10,48,56,10,49,48,10, 50,48,10,67,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,70,56,51,10,69,78,67,79,68,73,78,71,32,54, 53,52,49,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,56,10,48,48,10,48,48, 10,70,67,10,49,48,10,49,48,10,50,48,10,50,48,10, 67,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,70, 56,52,10,69,78,67,79,68,73,78,71,32,54,53,52,49, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,48,10,56,48,10,56,48,10,67,48, 10,65,48,10,57,48,10,56,48,10,56,48,10,56,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,70,56,53,10, 69,78,67,79,68,73,78,71,32,54,53,52,49,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,50,48,10,50,48,10,70,56,10,50,48,10,50,48, 10,50,48,10,52,48,10,52,48,10,56,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,56,54,10,69,78,67, 79,68,73,78,71,32,54,53,52,49,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,55,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,70,70,56,55,10,69,78,67,79,68,73, 78,71,32,54,53,52,49,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,70, 56,10,48,56,10,52,56,10,51,48,10,49,48,10,50,56, 10,52,48,10,56,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,70,56,56,10,69,78,67,79,68,73,78,71,32, 54,53,52,49,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,50,48,10,50,48,10,70, 56,10,48,56,10,49,48,10,51,48,10,54,56,10,65,52, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 70,56,57,10,69,78,67,79,68,73,78,71,32,54,53,52, 49,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,56,10,48,56,10,48, 56,10,49,48,10,49,48,10,50,48,10,52,48,10,56,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,56,65, 10,69,78,67,79,68,73,78,71,32,54,53,52,49,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,53,48,10,53,48,10,53,48,10,52, 56,10,52,56,10,56,56,10,56,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,70,56,66,10,69,78, 67,79,68,73,78,71,32,54,53,52,49,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 56,48,10,56,48,10,70,56,10,56,48,10,56,48,10,56, 48,10,56,48,10,56,48,10,55,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,70,56,67,10,69,78,67,79,68, 73,78,71,32,54,53,52,50,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,70,56,10, 48,56,10,48,56,10,48,56,10,48,56,10,49,48,10,49, 48,10,50,48,10,67,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,70,56,68,10,69,78,67,79,68,73,78,71, 32,54,53,52,50,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,50,48,10, 50,48,10,53,48,10,53,48,10,56,56,10,56,56,10,48, 52,10,48,52,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,56,69,10,69,78,67,79,68,73,78,71,32,54,53, 52,50,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,70,56,10, 50,48,10,50,48,10,65,56,10,65,56,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,70,56, 70,10,69,78,67,79,68,73,78,71,32,54,53,52,50,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,70,56,10,48,56,10,48,56,10,49,48,10, 53,48,10,54,48,10,50,48,10,49,48,10,49,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,70,57,48,10,69, 78,67,79,68,73,78,71,32,54,53,52,50,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,67,48,10,51,48,10,48,48,10,67,48,10,51,48,10, 48,48,10,56,48,10,54,48,10,49,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,70,57,49,10,69,78,67,79, 68,73,78,71,32,54,53,52,50,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,49,48,10,49,48,10,50,48,10,50,48,10,53,48,10, 52,56,10,66,56,10,67,52,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,57,50,10,69,78,67,79,68,73,78, 71,32,54,53,52,50,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,56,10,48,56, 10,52,56,10,50,56,10,49,48,10,49,48,10,50,56,10, 52,48,10,56,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,70,57,51,10,69,78,67,79,68,73,78,71,32,54, 53,52,50,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,70,48,10,52,48,10,52,48, 10,70,56,10,52,48,10,52,48,10,52,48,10,52,48,10, 51,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,70, 57,52,10,69,78,67,79,68,73,78,71,32,54,53,52,50, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,52,48,10,52,48,10,53,67,10,69,52, 10,50,52,10,50,56,10,49,48,10,49,48,10,49,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,70,57,53,10, 69,78,67,79,68,73,78,71,32,54,53,52,50,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,55,56,10,48,56,10,48,56,10,48,56, 10,49,48,10,49,48,10,49,48,10,70,67,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,57,54,10,69,78,67, 79,68,73,78,71,32,54,53,52,51,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,70,56,10,48,56,10,48,56,10,70,56,10,48,56, 10,48,56,10,48,56,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,70,70,57,55,10,69,78,67,79,68,73, 78,71,32,54,53,52,51,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,70,56,10,48, 48,10,48,48,10,70,56,10,48,56,10,48,56,10,49,48, 10,50,48,10,67,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,70,57,56,10,69,78,67,79,68,73,78,71,32, 54,53,52,51,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,56,56,10,56,56,10,56, 56,10,56,56,10,48,56,10,49,48,10,49,48,10,50,48, 10,52,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 70,57,57,10,69,78,67,79,68,73,78,71,32,54,53,52, 51,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,53,48,10,53,48,10,53, 48,10,53,48,10,57,48,10,57,48,10,57,52,10,57,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,57,65, 10,69,78,67,79,68,73,78,71,32,54,53,52,51,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,48,10,56,48,10,56,48,10,56,48,10,56, 48,10,56,48,10,56,56,10,57,48,10,69,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,70,57,66,10,69,78, 67,79,68,73,78,71,32,54,53,52,51,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,70,56,10,56,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,70,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,70,57,67,10,69,78,67,79,68, 73,78,71,32,54,53,52,51,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,70,56,10, 56,56,10,56,56,10,56,56,10,49,48,10,49,48,10,50, 48,10,50,48,10,52,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,70,57,68,10,69,78,67,79,68,73,78,71, 32,54,53,52,51,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 56,48,10,52,48,10,48,48,10,48,52,10,48,56,10,51, 48,10,67,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,57,69,10,69,78,67,79,68,73,78,71,32,54,53, 52,51,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,52,48,10,50,48,10,56,48,10,52,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,70,57, 70,10,69,78,67,79,68,73,78,71,32,54,53,52,51,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,52,48, 10,65,48,10,52,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,70,65,49,10,69, 78,67,79,68,73,78,71,32,54,53,52,52,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,70,56,10,48,56,10,48,56,10,48,56,10, 48,56,10,48,56,10,49,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,70,65,50,10,69,78,67,79, 68,73,78,71,32,54,53,52,52,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,70,56,10,50,56,10,50,56,10,50,56,10,50,56,10, 50,56,10,53,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,65,51,10,69,78,67,79,68,73,78, 71,32,54,53,52,52,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,67,56, 10,52,56,10,53,48,10,53,48,10,53,56,10,54,56,10, 65,56,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,70,65,52,10,69,78,67,79,68,73,78,71,32,54, 53,52,52,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,56,48,10,56,48, 10,56,48,10,56,48,10,56,48,10,56,48,10,70,56,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,70, 65,53,10,69,78,67,79,68,73,78,71,32,54,53,52,52, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,66,56,10,57,48,10,57,48, 10,57,48,10,65,56,10,65,56,10,69,56,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,70,65,54,10, 69,78,67,79,68,73,78,71,32,54,53,52,52,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,66,56,10,56,48,10,66,56,10,56,48, 10,66,56,10,65,56,10,68,56,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,65,55,10,69,78,67, 79,68,73,78,71,32,54,53,52,52,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,70,56,10,56,48,10,56,48,10,56,48,10,56,48, 10,56,48,10,70,56,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,70,70,65,56,10,69,78,67,79,68,73, 78,71,32,54,53,52,52,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,70, 56,10,65,48,10,65,48,10,65,48,10,65,48,10,65,48, 10,70,56,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,70,65,57,10,69,78,67,79,68,73,78,71,32, 54,53,52,52,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,70,56,10,48, 56,10,48,56,10,70,56,10,56,48,10,56,48,10,70,56, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 70,65,65,10,69,78,67,79,68,73,78,71,32,54,53,52, 53,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,70,56,10,50,56,10,50, 56,10,69,56,10,56,56,10,65,56,10,67,56,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,65,66, 10,69,78,67,79,68,73,78,71,32,54,53,52,53,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,68,67,10,53,52,10,53,52,10,68, 52,10,57,52,10,66,52,10,68,67,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,70,65,67,10,69,78, 67,79,68,73,78,71,32,54,53,52,53,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,68,52,10,53,52,10,53,52,10,68,67,10,57, 52,10,66,52,10,68,67,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,70,65,68,10,69,78,67,79,68, 73,78,71,32,54,53,52,53,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 69,52,10,50,52,10,50,56,10,69,56,10,57,52,10,66, 52,10,68,52,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,70,65,69,10,69,78,67,79,68,73,78,71, 32,54,53,52,53,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,68,56,10, 53,48,10,53,48,10,68,56,10,57,48,10,66,48,10,68, 56,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,65,70,10,69,78,67,79,68,73,78,71,32,54,53, 52,53,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,68,67,10,52,48,10, 53,52,10,68,52,10,57,52,10,65,56,10,68,67,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,70,66, 48,10,69,78,67,79,68,73,78,71,32,54,53,52,53,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,69,67,10,50,48,10,51,67,10, 69,56,10,57,67,10,66,52,10,68,56,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,70,66,49,10,69, 78,67,79,68,73,78,71,32,54,53,52,53,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,70,56,10,56,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,70,56,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,70,66,50,10,69,78,67,79, 68,73,78,71,32,54,53,52,53,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,56,56,10,56,56,10,56,56,10,70,56,10,56,56,10, 56,56,10,70,56,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,66,51,10,69,78,67,79,68,73,78, 71,32,54,53,52,53,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,65,56, 10,65,56,10,65,56,10,70,56,10,65,56,10,65,56,10, 70,56,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,70,66,52,10,69,78,67,79,68,73,78,71,32,54, 53,52,54,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,65,56,10,65,56, 10,65,56,10,69,56,10,66,52,10,66,52,10,68,52,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,70, 66,53,10,69,78,67,79,68,73,78,71,32,54,53,52,54, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,49,48,10,49,48,10,50,48, 10,50,48,10,53,48,10,53,48,10,56,56,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,70,66,54,10, 69,78,67,79,68,73,78,71,32,54,53,52,54,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,50,56,10,50,56,10,53,48,10,53,48, 10,53,56,10,65,56,10,65,52,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,66,55,10,69,78,67, 79,68,73,78,71,32,54,53,52,54,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,51,48,10,52,56,10,56,52,10,56,52,10,56,52, 10,52,56,10,51,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,70,70,66,56,10,69,78,67,79,68,73, 78,71,32,54,53,52,54,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,70, 56,10,48,56,10,49,48,10,51,48,10,52,56,10,52,56, 10,56,52,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,70,66,57,10,69,78,67,79,68,73,78,71,32, 54,53,52,54,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,70,56,10,53, 48,10,53,48,10,53,48,10,65,56,10,65,56,10,65,56, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 70,66,65,10,69,78,67,79,68,73,78,71,32,54,53,52, 54,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,55,48,10,48,48,10,70, 56,10,50,48,10,50,48,10,53,48,10,56,56,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,66,66, 10,69,78,67,79,68,73,78,71,32,54,53,52,54,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,70,56,10,48,56,10,48,56,10,70, 56,10,48,56,10,48,56,10,49,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,70,66,67,10,69,78, 67,79,68,73,78,71,32,54,53,52,54,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,70,56,10,56,48,10,56,48,10,70,56,10,56, 48,10,56,48,10,70,56,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,70,66,68,10,69,78,67,79,68, 73,78,71,32,54,53,52,54,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 70,56,10,53,48,10,53,48,10,53,48,10,53,48,10,53, 48,10,70,56,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,70,66,69,10,69,78,67,79,68,73,78,71, 32,54,53,52,55,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,55,48,10,48,48,10, 70,56,10,48,48,10,55,48,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,67,50,10,69,78,67,79,68,73,78,71,32,54,53, 52,55,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,50,48,10, 51,56,10,50,48,10,50,48,10,50,48,10,50,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,70,67, 51,10,69,78,67,79,68,73,78,71,32,54,53,52,55,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,56,10,52,56,10,52,56,10,55,56,10, 52,56,10,52,56,10,52,56,10,48,56,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,70,67,52,10,69, 78,67,79,68,73,78,71,32,54,53,52,55,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,50,48,10,50,48,10,51,56,10,50,48,10,51,56,10, 50,48,10,50,48,10,50,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,70,67,53,10,69,78,67,79, 68,73,78,71,32,54,53,52,55,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,56, 10,52,56,10,55,56,10,52,56,10,55,56,10,52,56,10, 52,56,10,48,56,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,67,54,10,69,78,67,79,68,73,78, 71,32,54,53,52,55,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,56,10,48,56, 10,48,56,10,51,56,10,48,56,10,48,56,10,48,56,10, 48,56,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,70,67,55,10,69,78,67,79,68,73,78,71,32,54, 53,52,55,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,56,10,50,56,10,50,56, 10,69,56,10,50,56,10,50,56,10,50,56,10,48,56,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,70, 67,65,10,69,78,67,79,68,73,78,71,32,54,53,52,56, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,56,10,48,56,10,51,56,10,48,56, 10,51,56,10,48,56,10,48,56,10,48,56,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,70,67,66,10, 69,78,67,79,68,73,78,71,32,54,53,52,56,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,56,10,50,56,10,69,56,10,50,56,10,69,56, 10,50,56,10,50,56,10,48,56,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,67,67,10,69,78,67, 79,68,73,78,71,32,54,53,52,56,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,50,48,10,50,48,10,50,48, 10,70,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,70,70,67,68,10,69,78,67,79,68,73, 78,71,32,54,53,52,56,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,56,10,48, 56,10,48,56,10,52,56,10,52,67,10,53,56,10,69,56, 10,48,56,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,70,67,69,10,69,78,67,79,68,73,78,71,32, 54,53,52,56,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,52,10,49,52,10,49, 52,10,53,67,10,53,52,10,55,52,10,68,52,10,48,52, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 70,67,70,10,69,78,67,79,68,73,78,71,32,54,53,52, 56,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,56,10,48,56,10,52,56,10,52, 56,10,53,56,10,69,56,10,48,56,10,48,56,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,68,50, 10,69,78,67,79,68,73,78,71,32,54,53,52,57,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,53,48,10,53, 48,10,53,48,10,70,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,70,68,51,10,69,78, 67,79,68,73,78,71,32,54,53,52,57,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,70,56,10,50, 48,10,50,48,10,50,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,70,68,52,10,69,78,67,79,68, 73,78,71,32,54,53,52,57,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,56,10, 48,56,10,48,56,10,49,56,10,69,56,10,52,56,10,55, 56,10,52,56,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,70,68,53,10,69,78,67,79,68,73,78,71, 32,54,53,52,57,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,52,10,49,52,10, 49,52,10,49,52,10,70,52,10,53,52,10,55,52,10,53, 52,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,68,54,10,69,78,67,79,68,73,78,71,32,54,53, 52,57,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,56,10,48,56,10,48,56,10, 49,56,10,69,56,10,52,56,10,52,56,10,52,56,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,70,68, 55,10,69,78,67,79,68,73,78,71,32,54,53,52,57,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,56,10,53,48,10,53,48,10,53,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,70,68,65,10,69, 78,67,79,68,73,78,71,32,54,53,52,57,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,70,68,66,10,69,78,67,79, 68,73,78,71,32,54,53,52,57,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,56, 10,48,56,10,48,56,10,48,56,10,48,56,10,49,56,10, 69,56,10,48,56,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,68,67,10,69,78,67,79,68,73,78, 71,32,54,53,53,48,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,56,10,48,56, 10,48,56,10,48,56,10,48,56,10,48,56,10,48,56,10, 48,56,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,70,69,48,10,69,78,67,79,68,73,78,71,32,54, 53,53,48,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,55,48,10,65,56, 10,65,48,10,65,48,10,65,56,10,55,48,10,50,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,70, 69,49,10,69,78,67,79,68,73,78,71,32,54,53,53,48, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,51,48,10,52,56,10,52,48,10,52,48, 10,69,48,10,52,48,10,52,48,10,52,56,10,66,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,70,69,50,10, 69,78,67,79,68,73,78,71,32,54,53,53,48,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,70,56, 10,48,56,10,48,56,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,69,51,10,69,78,67, 79,68,73,78,71,32,54,53,53,48,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,70,70,69,52,10,69,78,67,79,68,73, 78,71,32,54,53,53,48,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,48,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,70,69,53,10,69,78,67,79,68,73,78,71,32, 54,53,53,48,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,56,56,10,56,56,10,53, 48,10,53,48,10,70,56,10,50,48,10,70,56,10,50,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 70,69,54,10,69,78,67,79,68,73,78,71,32,54,53,53, 49,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,56,56,10,56,56,10,70,56,10,56, 56,10,70,56,10,65,56,10,65,56,10,68,56,10,56,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,69,56, 10,69,78,67,79,68,73,78,71,32,54,53,53,49,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,70,69,57,10,69,78, 67,79,68,73,78,71,32,54,53,53,49,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,50,48,10,52,48,10,70, 56,10,52,48,10,50,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,70,69,65,10,69,78,67,79,68, 73,78,71,32,54,53,53,49,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,50,48,10, 55,48,10,65,56,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,70,69,66,10,69,78,67,79,68,73,78,71, 32,54,53,53,49,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,50,48,10,49,48,10,70,56,10,49,48,10,50, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,69,67,10,69,78,67,79,68,73,78,71,32,54,53, 53,49,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,65,56,10,55,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,70,69, 68,10,69,78,67,79,68,73,78,71,32,54,53,53,49,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 70,56,10,70,56,10,70,56,10,70,56,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,70,69,69,10,69, 78,67,79,68,73,78,71,32,54,53,53,49,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,51,48,10,52,56,10,56,52,10, 56,52,10,52,56,10,51,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,70,70,67,10,69,78,67,79, 68,73,78,71,32,54,53,53,51,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,53,52,10,65,48,10,65,52, 10,65,48,10,55,52,10,50,56,10,66,52,10,50,56,10, 66,67,10,48,52,10,56,52,10,49,52,10,65,56,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,70,68,10,69,78,67,79,68,73,78, 71,32,54,53,53,51,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,68,56, 10,65,56,10,69,56,10,68,56,10,68,56,10,70,56,10, 68,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,69,78,68,70,79,78,84,10,}; size_t lxFNT6x13_bdf_size = 550764; therion/loch/lxFNTFreeSans_ttf.h0000644000076400010400000276244610537464734017724 0ustar userAdministratorsFT_Byte lxFNTFreeSans_ttf[] = { 0,1,0,0,0,15,0,128,0,3,0,112,71,68,69,70, 85,149,93,142,0,0,0,252,0,0,0,114,71,80,79,83, 120,189,136,27,0,0,1,112,0,0,18,36,71,83,85,66, 249,2,197,18,0,0,19,148,0,0,2,6,79,83,47,50, 75,64,204,87,0,0,21,156,0,0,0,86,99,109,97,112, 235,21,241,230,0,0,21,244,0,0,9,130,99,118,116,32, 0,33,2,121,0,0,31,120,0,0,0,4,103,97,115,112, 255,255,0,3,0,0,31,124,0,0,0,8,103,108,121,102, 155,243,51,102,0,0,31,132,0,3,76,16,104,101,97,100, 219,187,238,20,0,3,107,148,0,0,0,54,104,104,101,97, 8,21,10,153,0,3,107,204,0,0,0,36,104,109,116,120, 5,62,143,235,0,3,107,240,0,0,33,252,108,111,99,97, 12,152,136,28,0,3,141,236,0,0,34,0,109,97,120,112, 8,222,1,90,0,3,175,236,0,0,0,32,110,97,109,101, 251,79,242,251,0,3,176,12,0,0,6,78,112,111,115,116, 90,188,188,203,0,3,182,92,0,0,81,43,0,1,0,0, 0,12,0,0,0,106,0,0,0,2,0,15,0,3,0,243, 0,1,0,244,0,245,0,2,0,246,3,109,0,1,3,110, 3,110,0,2,3,111,7,23,0,1,7,24,7,26,0,2, 7,27,7,27,0,1,7,28,7,28,0,2,7,29,7,29, 0,1,7,30,7,32,0,2,7,33,8,72,0,1,8,73, 8,79,0,2,8,80,8,124,0,1,8,125,8,125,0,2, 8,126,8,126,0,1,0,4,0,0,0,2,0,0,0,0, 0,1,0,0,0,10,0,48,0,62,0,2,68,70,76,84, 0,14,108,97,116,110,0,26,0,4,0,0,0,0,255,255, 0,1,0,0,0,4,0,0,0,0,255,255,0,1,0,0, 0,1,107,101,114,110,0,8,0,0,0,1,0,1,0,2, 0,6,0,14,0,2,0,0,0,1,0,16,0,2,0,0, 0,1,2,138,0,1,2,86,0,4,0,0,0,20,0,50, 0,64,0,102,0,116,0,154,0,188,0,250,1,32,1,70, 1,96,1,134,1,148,1,162,1,176,1,190,1,204,1,218, 2,8,2,22,2,36,0,3,6,205,255,206,6,209,255,215, 8,72,255,156,0,9,0,36,255,249,0,55,255,176,0,57, 255,210,0,58,255,237,0,60,255,164,0,131,255,249,0,134, 255,249,0,135,255,249,0,136,255,245,0,3,6,205,255,205, 6,209,255,215,8,72,255,155,0,9,0,36,255,206,0,55, 255,130,0,57,255,163,0,58,255,190,0,60,255,123,0,131, 255,206,0,134,255,206,0,135,255,206,0,136,255,202,0,8, 0,36,255,189,0,55,255,251,0,58,0,12,0,60,255,247, 0,131,255,189,0,134,255,189,0,135,255,189,0,136,255,177, 0,15,0,15,255,196,0,17,255,196,0,36,255,184,0,71, 255,236,0,82,255,230,0,85,255,238,0,86,255,238,0,87, 255,249,0,89,255,254,0,90,0,2,0,92,255,250,0,131, 255,184,0,134,255,184,0,135,255,184,0,136,255,171,0,9, 0,36,255,204,0,55,0,9,0,57,0,15,0,58,0,27, 0,60,0,5,0,131,255,204,0,134,255,204,0,135,255,204, 0,136,255,192,0,9,0,36,255,203,0,55,0,11,0,57, 0,15,0,58,0,26,0,60,0,7,0,131,255,203,0,134, 255,203,0,135,255,203,0,136,255,190,0,6,0,36,0,30, 0,55,255,181,0,57,255,187,0,58,255,222,0,60,255,165, 0,136,0,30,0,9,0,36,255,212,0,55,255,135,0,57, 255,168,0,58,255,196,0,60,255,128,0,131,255,212,0,134, 255,212,0,135,255,212,0,136,255,208,0,3,8,64,255,254, 8,67,255,217,8,72,255,210,0,3,8,64,255,219,8,67, 255,231,8,72,255,220,0,3,8,64,255,254,8,67,255,223, 8,72,255,207,0,3,8,64,0,5,8,67,255,200,8,72, 255,172,0,3,8,64,0,1,8,67,255,230,8,72,255,180, 0,3,8,64,0,1,8,67,255,226,8,72,255,213,0,11, 0,15,255,137,0,17,255,137,0,29,255,179,8,62,255,228, 8,63,255,233,8,64,255,163,8,65,255,226,8,66,255,216, 8,67,255,252,8,68,255,228,8,72,255,203,0,3,8,64, 0,1,8,67,255,223,8,72,255,208,0,3,8,64,255,253, 8,67,255,219,8,72,255,213,0,12,0,15,255,182,0,17, 255,182,8,61,255,194,8,62,255,187,8,63,255,189,8,64, 255,175,8,65,255,189,8,66,255,194,8,67,255,166,8,68, 255,191,8,69,255,191,8,72,255,138,0,1,0,20,0,15, 0,16,0,17,0,125,6,204,6,205,6,208,6,209,6,210, 6,226,8,61,8,62,8,63,8,64,8,65,8,66,8,67, 8,68,8,69,8,72,0,1,14,210,0,4,0,0,0,76, 0,162,1,60,1,130,1,172,1,226,2,88,2,138,2,156, 2,238,3,100,3,182,3,224,4,54,4,172,4,214,5,148, 5,202,6,100,6,246,7,32,7,178,7,188,7,210,7,224, 7,234,8,4,8,74,8,100,8,110,8,120,8,182,8,188, 8,206,8,232,9,6,9,16,9,26,9,200,9,210,10,16, 10,22,10,128,10,230,11,0,11,106,11,152,12,10,12,56, 12,102,12,216,13,78,13,84,13,98,13,120,13,134,13,148, 13,174,13,180,13,186,13,216,13,222,14,0,14,14,14,28, 14,42,14,56,14,70,14,84,14,98,14,112,14,126,14,132, 14,154,14,172,14,182,14,200,0,38,0,15,0,5,0,16, 255,253,0,17,0,5,0,38,255,220,0,42,255,221,0,50, 255,223,0,52,255,224,0,55,255,163,0,56,255,219,0,57, 255,181,0,58,255,205,0,60,255,157,0,68,255,252,0,69, 0,4,0,70,255,245,0,71,255,248,0,72,255,240,0,74, 255,246,0,82,255,243,0,84,255,248,0,87,255,240,0,88, 255,244,0,89,255,225,0,90,255,235,0,92,255,222,0,109, 255,212,0,137,255,220,0,152,255,223,0,155,255,219,0,156, 255,219,0,157,255,219,0,158,255,219,0,169,255,246,0,206, 255,220,0,207,255,245,6,205,255,191,6,209,255,200,6,225, 255,216,0,17,0,36,255,235,0,50,255,249,0,57,255,215, 0,58,255,231,0,60,255,212,0,131,255,235,0,132,255,235, 0,133,255,235,0,134,255,235,0,135,255,235,0,136,255,235, 0,148,255,249,0,149,255,249,0,150,255,249,0,152,255,249, 0,154,255,255,1,20,255,251,0,10,0,36,255,224,0,43, 255,244,0,46,255,246,0,50,255,248,0,131,255,224,0,134, 255,224,0,135,255,224,0,136,255,223,0,149,255,248,0,152, 255,248,0,13,0,36,255,214,0,45,255,251,0,55,255,211, 0,57,255,205,0,58,255,227,0,59,255,203,0,60,255,193, 0,130,255,214,0,131,255,214,0,132,255,214,0,133,255,214, 0,134,255,214,0,135,255,214,0,29,0,15,255,148,0,16, 255,242,0,17,255,148,0,36,255,187,0,45,255,205,0,50, 255,234,0,68,255,223,0,72,255,232,0,76,255,246,0,77, 255,244,0,82,255,235,0,85,255,221,0,88,255,223,0,130, 255,187,0,131,255,187,0,132,255,187,0,133,255,187,0,134, 255,187,0,135,255,187,0,152,255,234,0,163,255,223,0,166, 255,223,0,167,255,223,0,168,255,227,0,171,255,232,0,181, 255,235,0,184,255,235,0,186,255,235,1,21,255,233,0,12, 0,36,255,250,0,55,255,212,0,57,255,206,0,58,255,228, 0,60,255,194,0,130,255,250,0,131,255,250,0,132,255,250, 0,133,255,250,0,134,255,250,0,135,255,250,0,136,255,253, 0,4,0,36,255,224,0,134,255,224,0,135,255,224,0,136, 255,225,0,20,0,16,255,209,0,38,255,205,0,42,255,205, 0,50,255,208,0,54,255,218,0,55,0,20,0,68,255,245, 0,72,255,224,0,82,255,227,0,88,255,237,0,92,255,194, 0,149,255,208,0,152,255,208,0,166,255,245,0,167,255,245, 0,168,255,249,0,181,255,227,0,184,255,227,0,190,255,237, 1,20,255,211,0,29,0,16,255,131,0,36,0,17,0,38, 255,215,0,42,255,214,0,50,255,215,0,54,255,237,0,55, 255,151,0,56,255,221,0,57,255,151,0,58,255,188,0,60, 255,135,0,88,255,249,0,92,255,200,0,131,0,17,0,134, 0,17,0,135,0,17,0,136,0,20,0,137,255,219,0,148, 255,215,0,149,255,215,0,150,255,215,0,151,255,215,0,152, 255,215,0,158,255,221,0,190,255,249,0,206,255,215,1,34, 255,237,6,205,255,107,6,209,255,115,0,20,0,15,255,249, 0,17,255,249,0,36,255,247,0,38,255,253,0,42,255,254, 0,68,255,251,0,82,0,2,0,131,255,247,0,134,255,247, 0,135,255,247,0,136,255,250,0,137,255,253,0,163,255,251, 0,166,255,251,0,167,255,251,0,168,255,254,0,181,0,2, 0,184,0,2,0,186,0,4,0,206,255,253,0,10,0,36, 255,221,0,55,255,214,0,57,255,211,0,58,255,233,0,59, 255,210,0,60,255,197,0,131,255,221,0,134,255,221,0,135, 255,221,0,136,255,217,0,21,0,15,255,121,0,16,255,216, 0,17,255,121,0,36,255,178,0,45,255,178,0,68,255,228, 0,72,255,225,0,82,255,229,0,131,255,178,0,134,255,178, 0,135,255,178,0,136,255,170,0,163,255,228,0,166,255,228, 0,167,255,228,0,168,255,232,0,171,255,225,0,181,255,229, 0,184,255,229,0,186,255,229,1,21,255,228,0,29,0,16, 255,254,0,38,255,240,0,42,255,241,0,50,255,243,0,55, 255,233,0,56,255,239,0,57,255,217,0,58,255,229,0,60, 255,213,0,68,255,241,0,72,255,244,0,82,255,247,0,88, 255,247,0,92,255,248,0,137,255,240,0,149,255,243,0,152, 255,243,0,158,255,239,0,163,255,241,0,166,255,241,0,167, 255,241,0,168,255,244,0,171,255,244,0,181,255,247,0,184, 255,247,0,188,255,247,0,190,255,247,1,20,255,245,1,21, 255,245,0,10,0,36,255,234,0,55,255,228,0,57,255,214, 0,58,255,228,0,60,255,208,0,87,255,253,0,131,255,234, 0,134,255,234,0,135,255,234,0,136,255,234,0,47,0,15, 255,156,0,16,255,179,0,17,255,156,0,29,255,123,0,30, 255,127,0,36,255,161,0,38,255,212,0,42,255,211,0,45, 255,156,0,50,255,214,0,54,255,232,0,57,0,12,0,58, 0,16,0,60,0,20,0,68,255,156,0,70,255,166,0,72, 255,161,0,74,255,167,0,76,255,253,0,77,255,251,0,82, 255,164,0,85,255,164,0,86,255,164,0,88,255,165,0,89, 255,161,0,90,255,163,0,92,255,156,0,109,255,135,0,130, 255,161,0,131,255,161,0,132,255,161,0,133,255,161,0,134, 255,161,0,135,255,161,0,136,255,159,0,148,255,214,0,149, 255,214,0,150,255,214,0,151,255,214,0,152,255,214,0,154, 255,215,0,168,255,159,0,186,255,169,1,20,255,221,1,34, 255,232,1,35,255,196,6,225,255,139,0,13,0,15,255,229, 0,17,255,231,0,36,255,220,0,80,255,252,0,81,255,252, 0,83,0,3,0,85,255,252,0,131,255,220,0,132,255,220, 0,133,255,220,0,134,255,220,0,135,255,220,0,136,255,217, 0,38,0,15,255,167,0,16,255,218,0,17,255,167,0,29, 255,190,0,30,255,190,0,36,255,185,0,38,255,213,0,42, 255,214,0,50,255,216,0,54,255,221,0,55,0,15,0,68, 255,197,0,72,255,199,0,74,255,206,0,76,255,251,0,82, 255,202,0,85,255,214,0,88,255,215,0,92,255,236,0,109, 255,173,0,130,255,185,0,131,255,185,0,132,255,185,0,133, 255,185,0,134,255,185,0,135,255,185,0,136,255,178,0,148, 255,216,0,149,255,216,0,150,255,216,0,151,255,216,0,152, 255,216,0,154,255,223,0,168,255,201,0,186,255,206,0,207, 255,213,1,34,255,221,6,225,255,176,0,36,0,15,255,200, 0,16,255,243,0,17,255,200,0,29,255,204,0,30,255,203, 0,36,255,206,0,38,255,233,0,42,255,234,0,50,255,236, 0,54,255,232,0,55,0,19,0,68,255,218,0,72,255,224, 0,74,255,231,0,76,255,255,0,82,255,227,0,85,255,228, 0,88,255,228,0,92,255,250,0,109,255,198,0,130,255,206, 0,131,255,206,0,132,255,206,0,133,255,206,0,134,255,206, 0,135,255,206,0,136,255,200,0,148,255,236,0,149,255,236, 0,150,255,236,0,151,255,236,0,152,255,236,0,154,255,243, 0,168,255,222,0,186,255,231,6,225,255,202,0,10,0,16, 255,205,0,38,255,208,0,50,255,211,0,52,255,212,0,68, 255,241,0,72,255,220,0,82,255,223,0,88,255,232,0,92, 255,195,0,152,255,211,0,36,0,15,255,145,0,16,255,172, 0,17,255,145,0,29,255,169,0,30,255,168,0,36,255,160, 0,38,255,198,0,42,255,198,0,50,255,200,0,54,255,215, 0,55,0,23,0,68,255,168,0,72,255,167,0,74,255,173, 0,76,0,3,0,82,255,170,0,83,255,202,0,88,255,193, 0,89,255,220,0,109,255,133,0,130,255,160,0,131,255,160, 0,132,255,160,0,133,255,160,0,134,255,160,0,135,255,160, 0,136,255,153,0,148,255,200,0,149,255,200,0,150,255,200, 0,151,255,200,0,152,255,200,0,154,255,202,0,168,255,172, 0,186,255,174,6,225,255,137,0,2,0,89,255,223,0,92, 255,218,0,5,0,77,255,252,0,89,255,235,0,90,255,243, 0,92,255,230,6,205,255,233,0,3,0,89,255,245,0,90, 255,253,0,92,255,241,0,2,0,75,0,1,0,78,0,7, 0,6,0,87,255,246,0,89,255,241,0,90,255,247,0,91, 255,229,0,92,255,237,6,205,255,238,0,17,0,68,255,247, 0,72,255,241,0,73,0,22,0,76,255,254,0,77,255,252, 0,79,255,253,0,82,255,246,0,87,0,24,0,163,255,247, 0,166,255,247,0,167,255,247,0,168,255,251,0,171,255,241, 0,181,255,246,0,184,255,246,0,186,255,247,1,21,255,244, 0,6,0,68,255,251,0,166,255,251,0,167,255,251,0,168, 255,255,0,181,0,3,0,184,0,3,0,2,0,92,255,238, 6,205,255,241,0,2,0,55,255,249,0,77,255,253,0,15, 0,16,255,215,0,68,255,254,0,72,255,235,0,74,255,240, 0,82,255,237,0,86,255,253,0,88,255,245,0,163,255,254, 0,166,255,254,0,167,255,254,0,168,0,2,0,171,255,235, 0,181,255,237,0,184,255,237,0,190,255,250,0,1,0,92, 255,251,0,4,0,83,0,5,0,89,255,243,0,90,255,249, 0,92,255,238,0,6,0,55,255,160,0,83,0,5,0,89, 255,243,0,90,255,249,0,92,255,238,6,205,255,242,0,7, 0,55,255,157,0,87,255,246,0,89,255,238,0,90,255,246, 0,91,255,229,0,92,255,234,6,205,255,235,0,2,0,87, 255,252,0,92,255,240,0,2,0,70,0,8,0,88,0,4, 0,43,0,15,255,187,0,16,255,209,0,17,255,187,0,29, 255,234,0,30,255,234,0,68,255,251,0,70,255,250,0,71, 255,255,0,72,255,245,0,73,0,26,0,74,255,252,0,76, 0,1,0,78,0,6,0,79,0,1,0,82,255,250,0,83, 0,8,0,84,255,253,0,86,0,4,0,87,0,28,0,88, 0,2,0,89,0,29,0,90,0,31,0,91,0,20,0,92, 0,24,0,93,0,9,0,162,255,251,0,163,255,251,0,164, 255,251,0,166,255,251,0,167,255,251,0,168,255,255,0,169, 255,247,0,170,255,245,0,171,255,245,0,172,255,245,0,180, 255,250,0,181,255,250,0,182,255,250,0,184,255,250,0,186, 255,250,0,207,255,250,1,21,255,248,6,205,0,1,0,2, 0,87,255,253,6,205,255,234,0,15,0,29,255,228,0,30, 255,228,0,54,255,248,0,68,255,255,0,72,255,242,0,75, 255,253,0,82,255,244,0,163,255,255,0,166,255,255,0,167, 255,255,0,168,0,2,0,171,255,242,0,181,255,244,0,184, 255,244,6,205,255,255,0,1,6,205,255,248,0,26,0,15, 255,187,0,16,255,244,0,17,255,187,0,29,255,233,0,30, 255,233,0,68,255,238,0,70,255,240,0,72,255,235,0,74, 255,242,0,82,255,239,0,86,255,247,0,162,255,238,0,163, 255,238,0,164,255,238,0,165,255,238,0,166,255,238,0,167, 255,238,0,168,255,242,0,170,255,235,0,171,255,235,0,172, 255,235,0,180,255,239,0,181,255,239,0,184,255,239,0,186, 255,239,0,207,255,240,0,25,0,15,255,206,0,16,255,255, 0,17,255,206,0,29,255,233,0,30,255,233,0,68,255,241, 0,70,255,249,0,72,255,244,0,74,255,250,0,82,255,247, 0,86,255,251,0,162,255,241,0,163,255,241,0,164,255,241, 0,165,255,241,0,166,255,241,0,167,255,241,0,168,255,245, 0,170,255,244,0,171,255,244,0,172,255,244,0,180,255,247, 0,181,255,247,0,184,255,247,0,186,255,250,0,6,0,68, 255,239,0,70,255,233,0,72,255,228,0,82,255,231,0,84, 255,236,0,171,255,228,0,26,0,15,255,186,0,16,255,242, 0,17,255,186,0,29,255,229,0,30,255,229,0,68,255,234, 0,70,255,237,0,72,255,232,0,74,255,239,0,79,255,252, 0,82,255,236,0,86,255,244,0,162,255,234,0,163,255,234, 0,164,255,234,0,165,255,234,0,166,255,234,0,167,255,234, 0,168,255,238,0,170,255,232,0,171,255,232,0,172,255,232, 0,180,255,236,0,181,255,236,0,184,255,236,0,186,255,237, 0,11,0,15,0,5,0,17,0,5,0,38,255,220,0,42, 255,221,0,50,255,223,0,52,255,224,0,55,255,163,0,56, 255,219,0,57,255,181,0,58,255,205,0,60,255,157,0,28, 0,15,0,5,0,16,255,253,0,17,0,5,0,38,255,220, 0,42,255,221,0,50,255,223,0,52,255,224,0,55,255,163, 0,56,255,219,0,57,255,181,0,58,255,205,0,60,255,157, 0,68,255,252,0,69,0,4,0,70,255,245,0,71,255,248, 0,72,255,240,0,74,255,246,0,82,255,243,0,84,255,248, 0,87,255,240,0,88,255,244,0,89,255,225,0,90,255,235, 0,92,255,222,0,109,255,212,6,205,255,191,6,225,255,216, 0,11,0,15,0,5,0,17,0,5,0,38,255,220,0,42, 255,221,0,50,255,223,0,52,255,224,0,55,255,163,0,56, 255,219,0,57,255,181,0,58,255,205,0,60,255,157,0,11, 0,15,0,5,0,17,0,5,0,38,255,220,0,42,255,221, 0,50,255,223,0,52,255,224,0,55,255,163,0,56,255,219, 0,57,255,181,0,58,255,205,0,60,255,157,0,28,0,15, 0,5,0,16,255,253,0,17,0,5,0,38,255,220,0,42, 255,221,0,50,255,223,0,52,255,224,0,55,255,163,0,56, 255,219,0,57,255,181,0,58,255,205,0,60,255,157,0,68, 255,252,0,69,0,4,0,70,255,245,0,71,255,248,0,74, 255,246,0,82,255,243,0,84,255,248,0,87,255,240,0,88, 255,244,0,89,255,225,0,90,255,235,0,92,255,222,0,109, 255,212,6,205,255,191,6,209,255,200,6,225,255,216,0,29, 0,15,0,5,0,16,255,253,0,17,0,5,0,38,255,220, 0,42,255,221,0,50,255,223,0,52,255,224,0,55,255,163, 0,56,255,219,0,57,255,181,0,58,255,205,0,60,255,157, 0,68,255,252,0,69,0,4,0,70,255,245,0,71,255,248, 0,72,255,240,0,74,255,246,0,82,255,243,0,84,255,248, 0,87,255,240,0,88,255,244,0,89,255,225,0,90,255,235, 0,92,255,222,0,109,255,212,6,205,255,191,6,209,255,200, 6,225,255,216,0,1,0,36,255,225,0,3,0,55,255,214, 0,57,255,211,0,60,255,197,0,5,0,36,255,221,0,55, 255,214,0,57,255,211,0,58,255,233,0,60,255,197,0,3, 0,55,255,214,0,57,255,211,0,60,255,197,0,3,0,55, 255,214,0,57,255,211,0,60,255,197,0,6,0,36,255,221, 0,55,255,214,0,57,255,211,0,58,255,233,0,59,255,210, 0,60,255,197,0,1,0,36,255,223,0,1,0,36,255,220, 0,7,0,15,255,229,0,17,255,231,0,36,255,220,0,80, 255,252,0,81,255,252,0,83,0,3,0,85,255,252,0,1, 0,36,255,220,0,8,0,15,255,229,0,17,255,231,0,36, 255,220,0,69,0,3,0,80,255,252,0,81,255,252,0,83, 0,3,0,85,255,252,0,3,0,89,255,235,0,90,255,243, 0,92,255,230,0,3,0,89,255,235,0,90,255,243,0,92, 255,230,0,3,0,89,255,235,0,90,255,243,0,92,255,230, 0,3,0,89,255,235,0,90,255,243,0,92,255,230,0,3, 0,89,255,240,0,90,255,246,0,92,255,236,0,3,0,89, 255,241,0,90,255,247,0,92,255,237,0,3,0,89,255,241, 0,90,255,247,0,92,255,237,0,3,0,89,255,238,0,90, 255,246,0,92,255,234,0,3,0,89,255,238,0,90,255,246, 0,92,255,234,0,1,0,87,255,246,0,5,0,87,255,246, 0,89,255,238,0,90,255,246,0,91,255,229,0,92,255,234, 0,4,0,36,255,224,0,43,255,244,0,46,255,246,0,50, 255,248,0,2,0,75,0,1,0,78,0,7,0,4,0,36, 255,234,0,55,255,228,0,57,255,214,0,87,255,253,0,2, 0,89,255,223,0,92,255,218,0,2,0,20,0,36,0,39, 0,0,0,41,0,42,0,4,0,45,0,47,0,6,0,49, 0,51,0,9,0,53,0,61,0,12,0,68,0,70,0,21, 0,72,0,76,0,24,0,78,0,92,0,29,0,130,0,135, 0,44,0,137,0,137,0,50,0,148,0,152,0,51,0,154, 0,158,0,56,0,162,0,163,0,61,0,166,0,168,0,63, 0,171,0,172,0,66,0,180,0,182,0,68,0,184,0,184, 0,71,0,206,0,207,0,72,1,34,1,34,0,74,1,63, 1,63,0,75,0,1,0,0,0,10,0,84,0,110,0,4, 68,70,76,84,0,26,97,114,109,110,0,38,104,101,98,114, 0,50,108,97,116,110,0,62,0,4,0,0,0,0,255,255, 0,1,0,0,0,4,0,0,0,0,255,255,0,1,0,1, 0,4,0,0,0,0,255,255,0,1,0,1,0,4,0,0, 0,0,255,255,0,1,0,1,0,2,102,114,97,99,0,14, 108,105,103,97,0,20,0,0,0,1,0,0,0,0,0,1, 0,3,0,4,0,10,0,18,0,26,0,34,0,4,0,8, 0,1,0,32,0,4,0,8,0,1,0,204,0,4,0,8, 0,1,1,78,0,4,0,8,0,1,1,94,0,1,0,166, 0,5,0,16,0,38,0,80,0,102,0,144,0,2,0,6, 0,14,7,24,0,3,6,230,0,24,7,24,0,3,0,18, 0,24,0,4,0,10,0,18,0,26,0,34,7,30,0,3, 6,230,0,27,7,30,0,3,0,18,0,27,7,25,0,3, 6,230,0,24,7,25,0,3,0,18,0,24,0,2,0,6, 0,14,7,26,0,3,6,230,0,24,7,26,0,3,0,18, 0,24,0,4,0,10,0,18,0,26,0,34,7,31,0,3, 6,230,0,27,7,31,0,3,0,18,0,27,7,28,0,3, 6,230,0,25,7,28,0,3,0,18,0,25,0,2,0,6, 0,14,7,32,0,3,6,230,0,27,7,32,0,3,0,18, 0,27,0,1,0,5,0,21,0,22,0,23,0,24,0,26, 0,1,0,122,0,6,0,18,0,28,0,74,0,84,0,94, 0,104,0,1,0,4,0,244,0,2,0,45,0,5,0,12, 0,20,0,28,0,34,0,40,8,77,0,3,0,73,0,79, 8,76,0,3,0,73,0,76,8,75,0,2,0,79,8,74, 0,2,0,76,8,73,0,2,0,73,0,1,0,4,0,245, 0,2,0,77,0,1,0,4,8,79,0,2,0,87,0,1, 0,4,8,78,0,2,0,87,0,2,0,6,0,12,8,77, 0,2,0,79,8,76,0,2,0,76,0,1,0,6,0,44, 0,73,0,76,0,86,1,65,8,73,0,1,0,18,0,1, 0,8,0,1,0,4,3,110,0,2,3,105,0,1,0,1, 3,76,0,1,0,18,0,1,0,8,0,1,0,4,8,125, 0,2,3,145,0,1,0,1,3,133,0,0,0,1,1,225, 1,144,0,5,0,0,0,200,0,200,0,0,0,200,0,200, 0,200,0,0,0,200,0,49,1,2,0,0,2,11,5,4, 2,2,2,2,2,4,192,95,142,255,80,7,96,251,0,0, 2,160,0,0,0,0,80,102,69,100,0,64,0,32,255,253, 4,117,254,53,0,90,4,117,1,203,128,2,0,191,221,245, 0,1,0,0,0,0,0,3,0,0,0,3,0,0,0,28, 0,1,0,0,0,0,8,124,0,3,0,1,0,0,0,28, 0,4,8,96,0,0,2,20,2,0,0,8,0,20,0,13, 0,126,1,128,1,137,1,140,1,147,1,153,1,159,1,165, 1,169,1,171,1,174,1,227,1,237,1,245,2,27,2,31, 2,51,2,84,2,89,2,92,2,97,2,106,2,109,2,115, 2,117,2,127,2,133,2,137,2,142,2,144,2,156,2,158, 2,160,2,199,2,203,2,221,3,4,3,8,3,12,3,15, 3,20,3,40,3,117,3,122,3,126,3,138,3,140,3,161, 3,206,4,95,4,196,4,200,4,204,4,245,4,249,5,86, 5,94,5,135,5,138,5,185,5,196,5,234,7,13,7,44, 7,74,9,2,9,11,9,13,9,17,9,51,9,57,9,67, 9,69,9,73,9,77,9,81,9,112,9,131,9,140,9,144, 9,168,9,176,9,178,9,185,9,188,9,196,9,200,9,205, 9,215,9,221,9,227,9,250,10,10,10,16,10,40,10,48, 10,51,10,54,10,57,10,60,10,66,10,72,10,77,10,92, 10,94,10,112,10,116,10,130,10,139,10,168,10,176,10,179, 10,185,10,195,10,200,10,204,10,208,10,239,11,3,11,7, 11,9,11,11,11,15,11,19,11,24,11,26,11,29,11,33, 11,43,11,48,11,51,11,57,11,67,11,71,11,96,11,111, 11,131,11,138,11,144,11,149,11,154,11,156,11,159,11,164, 11,170,11,181,11,185,11,193,11,200,11,205,11,215,11,221, 11,225,12,131,12,138,12,144,12,154,12,156,12,168,12,179, 12,239,13,131,13,133,13,139,13,145,13,148,13,156,13,158, 13,162,13,165,13,171,13,177,13,187,13,189,13,198,13,202, 13,212,13,214,13,217,13,223,31,21,31,29,31,69,31,77, 31,87,31,89,31,91,31,93,31,125,31,180,31,196,31,211, 31,219,31,239,31,244,31,254,32,16,32,20,32,35,32,38, 32,55,32,61,32,68,32,73,32,75,32,113,32,121,32,137, 32,168,32,170,32,172,33,12,33,18,33,22,33,28,33,34, 33,40,33,45,33,51,33,127,33,149,33,181,33,212,34,0, 34,3,34,9,34,19,34,23,34,26,34,30,34,32,34,46, 34,52,34,60,34,62,34,67,34,73,34,96,34,101,34,151, 34,165,35,0,37,202,38,106,48,3,48,5,48,17,48,21, 48,147,48,153,48,155,48,254,246,65,246,190,246,195,246,220, 251,6,251,54,251,60,251,62,251,65,251,68,251,79,255,253, 255,255,0,0,0,13,0,32,0,160,1,130,1,139,1,142, 1,153,1,157,1,165,1,167,1,171,1,173,1,196,1,230, 1,240,1,248,2,30,2,38,2,80,2,86,2,91,2,96, 2,101,2,109,2,111,2,117,2,121,2,130,2,135,2,140, 2,144,2,156,2,158,2,160,2,198,2,202,2,216,3,0, 3,6,3,10,3,15,3,17,3,38,3,116,3,122,3,126, 3,132,3,140,3,142,3,163,4,0,4,140,4,199,4,203, 4,208,4,248,5,49,5,90,5,97,5,137,5,176,5,187, 5,208,7,0,7,16,7,48,9,1,9,5,9,13,9,16, 9,19,9,53,9,60,9,69,9,71,9,75,9,80,9,102, 9,129,9,133,9,143,9,147,9,170,9,178,9,182,9,188, 9,190,9,199,9,203,9,215,9,220,9,223,9,230,10,5, 10,15,10,19,10,42,10,50,10,53,10,56,10,60,10,62, 10,71,10,75,10,89,10,94,10,102,10,114,10,129,10,133, 10,149,10,170,10,178,10,181,10,189,10,199,10,203,10,208, 10,230,11,2,11,5,11,9,11,11,11,15,11,19,11,21, 11,26,11,28,11,31,11,42,11,47,11,50,11,54,11,62, 11,71,11,96,11,102,11,130,11,133,11,142,11,146,11,153, 11,156,11,158,11,163,11,168,11,174,11,183,11,190,11,198, 11,202,11,215,11,218,11,225,12,131,12,133,12,142,12,146, 12,156,12,158,12,176,12,230,13,130,13,133,13,137,13,145, 13,148,13,153,13,158,13,160,13,164,13,167,13,173,13,179, 13,189,13,192,13,202,13,207,13,214,13,216,13,223,31,0, 31,24,31,32,31,72,31,80,31,89,31,91,31,93,31,95, 31,128,31,182,31,198,31,214,31,221,31,242,31,246,32,16, 32,19,32,24,32,38,32,48,32,57,32,68,32,71,32,75, 32,112,32,116,32,128,32,167,32,170,32,172,33,11,33,16, 33,22,33,27,33,34,33,38,33,42,33,48,33,83,33,144, 33,181,33,208,34,0,34,2,34,5,34,15,34,23,34,26, 34,29,34,32,34,39,34,52,34,60,34,62,34,65,34,73, 34,96,34,100,34,149,34,165,35,0,37,202,38,106,48,1, 48,5,48,7,48,20,48,65,48,153,48,155,48,161,246,57, 246,190,246,195,246,220,251,0,251,29,251,56,251,62,251,64, 251,67,251,70,255,253,255,255,255,245,255,227,255,194,255,193, 255,192,255,191,255,186,255,183,255,178,255,177,255,176,255,175, 255,154,255,152,255,150,255,148,255,146,255,140,255,112,255,111, 255,110,255,107,255,104,255,102,255,101,255,100,255,97,255,95, 255,94,255,92,255,91,255,80,255,79,255,78,255,41,255,39, 255,27,254,249,254,248,254,247,254,245,254,244,254,227,254,152, 254,148,254,145,254,140,254,139,254,138,254,137,254,88,254,44, 254,42,254,40,254,37,254,35,253,236,253,233,253,231,253,230, 253,193,253,192,253,181,252,160,252,158,252,155,250,229,250,227, 250,226,250,224,250,223,250,222,250,220,250,219,250,218,250,217, 250,215,250,195,250,179,250,178,250,176,250,174,250,173,250,172, 250,169,250,167,250,166,250,164,250,162,250,153,250,149,250,148, 250,146,250,136,250,132,250,130,250,129,250,128,250,127,250,126, 250,124,250,123,250,119,250,117,250,106,250,105,250,98,250,97, 250,85,250,83,250,74,250,73,250,72,250,71,250,68,250,65, 250,63,250,60,250,39,250,21,250,20,250,19,250,18,250,15, 250,12,250,11,250,10,250,9,250,8,250,0,249,253,249,252, 249,250,249,246,249,243,249,219,249,214,249,196,249,195,249,192, 249,191,249,188,249,187,249,186,249,183,249,180,249,177,249,176, 249,172,249,168,249,167,249,158,249,156,249,153,248,248,248,247, 248,244,248,243,248,242,248,241,248,234,248,184,248,38,248,37, 248,34,248,29,248,27,248,23,248,22,248,21,248,20,248,19, 248,18,248,17,248,16,248,14,248,11,248,7,248,6,248,5, 248,0,230,224,230,222,230,220,230,218,230,216,230,215,230,214, 230,213,230,212,230,210,230,209,230,208,230,206,230,205,230,203, 230,202,230,185,230,183,230,180,230,178,230,169,230,168,230,162, 230,160,230,159,230,123,230,121,230,115,230,86,230,85,230,84, 229,246,229,243,229,240,229,236,229,231,229,228,229,227,229,225, 229,194,229,178,229,147,229,121,229,78,229,77,229,76,229,71, 229,68,229,66,229,64,229,63,229,57,229,52,229,45,229,44, 229,42,229,37,229,15,229,12,228,221,228,208,228,118,225,173, 225,14,215,120,215,119,215,118,215,116,215,73,215,68,215,67, 215,62,18,4,17,136,17,132,17,108,13,73,13,51,13,50, 13,49,13,48,13,47,13,46,8,129,0,1,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,1,6,0,0,1,146,178,0,0,0,0,159,1,3, 0,160,192,1,0,0,0,0,0,0,0,127,126,123,128,117, 116,104,111,1,0,0,3,4,5,6,7,8,9,10,11,12, 13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28, 29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44, 45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60, 61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76, 77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92, 93,94,95,96,97,0,134,135,137,139,147,152,158,163,162,164, 166,165,167,169,171,170,172,173,175,174,176,177,179,181,180,182, 184,183,188,187,189,190,0,114,100,101,105,0,120,161,112,107, 0,118,106,0,136,154,0,115,0,0,103,119,0,0,0,0, 0,108,124,0,168,186,129,99,110,0,0,0,0,109,125,0, 98,130,133,151,0,0,0,0,0,0,0,0,185,0,193,0, 0,0,0,0,0,0,0,121,0,0,0,132,140,131,141,138, 143,144,145,142,149,150,0,148,156,157,155,0,0,0,113,0, 0,0,122,0,0,0,0,0,0,33,2,121,0,0,0,1, 255,255,0,2,0,2,0,33,0,0,1,110,2,154,0,3, 0,7,0,46,177,1,0,47,60,178,7,4,0,237,50,177, 6,5,220,60,178,3,2,0,237,50,0,177,3,0,47,60, 178,5,4,0,237,50,178,7,6,1,252,60,178,1,2,0, 237,50,51,17,33,17,37,33,17,33,33,1,77,254,212,1, 11,254,245,2,154,253,102,33,2,88,0,2,0,124,0,0, 0,208,2,217,0,5,0,9,0,0,19,17,7,35,39,17, 19,21,35,53,208,22,39,22,83,84,2,217,254,174,223,223, 1,82,253,143,104,104,0,2,0,52,1,208,1,49,2,197, 0,5,0,11,0,0,19,51,21,7,35,39,55,51,21,7, 35,39,52,93,27,39,27,160,93,27,39,27,2,197,111,134, 134,111,111,134,134,0,0,2,0,14,255,236,2,30,2,185, 0,27,0,31,0,0,1,7,51,21,35,7,51,21,35,7, 35,55,35,7,35,55,35,53,51,55,35,53,51,55,51,7, 51,55,3,35,7,51,1,229,36,93,106,31,105,117,39,76, 38,124,39,76,38,101,114,31,108,121,36,76,36,125,35,48, 124,32,125,2,185,196,68,174,68,211,211,211,211,68,174,68, 196,196,196,254,248,174,0,3,0,32,255,130,2,6,3,2, 0,51,0,58,0,67,0,0,19,51,21,22,23,22,23,20, 21,35,38,39,38,39,38,35,21,22,23,22,21,20,7,6, 7,6,7,21,35,53,38,39,38,55,52,53,51,22,23,22, 23,22,23,17,38,39,38,53,52,55,54,55,17,53,6,7, 6,21,20,23,17,54,55,54,53,52,39,38,243,59,126,47, 19,2,79,1,57,20,24,6,7,100,31,85,68,11,13,49, 75,59,154,43,14,1,79,7,14,2,2,35,71,93,33,71, 140,26,31,96,17,3,175,61,31,42,47,29,3,2,54,9, 93,38,47,5,5,77,34,11,4,1,249,31,17,48,106,104, 61,10,8,29,6,103,103,10,117,39,48,9,8,74,24,3, 4,48,9,1,16,28,24,51,95,146,42,8,4,254,201,240, 13,76,14,16,90,127,254,249,7,30,40,60,61,30,18,0, 0,5,0,29,255,236,3,91,2,197,0,16,0,33,0,37, 0,53,0,70,0,0,19,50,31,1,22,21,20,7,6,35, 34,39,38,53,52,55,54,23,34,15,1,6,21,20,23,22, 51,50,55,54,53,52,39,38,37,51,1,35,1,50,23,22, 21,20,7,6,35,34,39,38,53,52,55,54,23,34,7,6, 21,20,23,22,51,50,55,54,53,52,47,1,38,199,84,51, 18,18,63,47,60,81,52,38,63,47,60,54,30,12,5,45, 26,31,54,30,17,48,24,1,124,66,254,117,66,1,218,85, 51,35,63,47,60,81,52,38,64,47,59,54,30,17,47,25, 30,54,30,17,48,23,15,2,173,66,28,37,42,79,51,39, 63,48,60,81,52,38,70,46,23,16,16,53,31,17,45,25, 30,57,30,15,94,253,39,1,86,66,46,60,79,51,39,63, 48,60,81,51,38,70,45,25,30,55,30,16,45,25,29,57, 30,10,5,0,0,3,0,52,255,233,2,125,2,197,0,41, 0,56,0,69,0,0,1,51,20,7,23,35,39,6,7,6, 35,34,39,38,53,52,55,54,55,38,39,38,53,52,55,54, 51,50,31,1,22,23,22,21,20,7,6,7,23,54,53,52, 39,54,55,54,53,52,39,38,35,34,7,6,21,20,23,19, 39,6,7,6,21,20,23,22,51,50,55,54,1,237,80,58, 122,109,62,49,28,56,76,116,56,33,52,36,74,70,9,2, 65,46,60,90,46,15,9,2,1,55,29,54,133,31,208,81, 15,7,45,19,23,60,20,6,25,178,160,94,20,8,54,35, 42,67,68,8,1,78,94,89,151,78,48,17,36,82,49,68, 81,53,36,43,88,48,13,14,77,47,33,66,28,21,24,9, 9,69,49,26,30,163,54,60,3,99,51,37,15,20,52,23, 10,50,16,20,33,35,254,164,200,60,50,20,24,65,38,25, 65,8,0,1,0,48,1,208,0,142,2,197,0,5,0,0, 19,51,21,7,35,39,48,94,27,40,27,2,197,111,134,134, 0,1,0,73,255,44,1,35,2,217,0,17,0,0,19,51, 6,7,6,21,20,23,22,23,35,38,39,38,53,52,55,54, 236,55,124,12,1,122,7,8,55,113,37,13,93,31,2,217, 200,229,21,20,233,213,13,12,148,192,68,63,179,179,61,0, 0,1,0,38,255,44,1,0,2,217,0,17,0,0,23,35, 54,55,54,53,52,39,38,39,51,22,23,22,21,20,7,6, 93,55,124,12,1,122,7,8,55,113,37,13,93,31,212,200, 229,21,20,233,213,13,12,148,192,68,63,179,179,61,0,1, 0,40,1,185,1,87,2,217,0,14,0,0,19,51,7,55, 23,7,23,7,39,7,39,55,39,55,23,160,63,5,106,19, 108,70,51,62,63,50,69,108,19,106,2,217,112,38,59,30, 89,36,93,93,36,89,30,59,38,0,0,1,0,50,255,246, 2,22,1,218,0,11,0,0,1,21,35,21,35,53,35,53, 51,53,51,21,2,22,207,70,207,207,70,1,11,70,207,207, 70,207,207,0,0,1,0,87,255,109,0,192,0,104,0,11, 0,0,55,51,21,20,35,53,54,55,54,61,1,35,87,105, 105,43,10,7,60,104,120,131,38,2,31,19,39,18,0,1, 0,46,0,240,1,28,1,56,0,3,0,0,1,21,35,53, 1,28,238,1,56,72,72,0,0,1,0,87,0,0,0,191, 0,104,0,3,0,0,55,21,35,53,191,104,104,104,104,0, 0,1,255,248,255,236,1,28,2,217,0,3,0,0,19,51, 3,35,229,55,237,55,2,217,253,19,0,2,0,43,255,233, 1,251,2,197,0,17,0,27,0,0,1,50,19,22,21,16, 7,6,35,34,39,38,53,52,55,54,55,50,23,34,17,16, 51,50,55,54,53,16,1,19,218,13,1,138,42,52,176,43, 13,69,54,95,7,7,142,140,118,21,5,2,197,254,183,21, 22,254,241,69,20,216,66,84,195,93,71,7,78,254,223,254, 220,192,46,57,1,30,0,1,0,102,0,0,1,91,2,197, 0,11,0,0,1,35,53,54,55,54,55,54,55,51,17,35, 1,3,157,102,30,30,21,2,2,58,88,1,249,63,13,23, 22,71,6,6,253,59,0,1,0,34,0,0,1,255,2,197, 0,35,0,0,1,50,31,1,22,21,20,15,1,6,7,6, 7,33,21,33,54,55,54,63,1,54,53,52,39,38,35,34, 15,1,6,7,35,54,55,54,1,28,121,64,19,23,150,100, 91,24,9,4,1,117,254,40,7,50,42,100,92,96,60,35, 45,75,40,7,17,4,88,3,35,60,2,197,80,30,44,54, 132,82,54,53,49,20,24,87,128,67,55,57,52,55,85,72, 39,22,57,12,32,68,100,54,92,0,0,1,0,32,255,233, 1,250,2,197,0,49,0,0,5,34,39,38,39,51,22,23, 22,51,50,55,54,53,52,35,7,35,53,54,55,54,53,52, 39,38,35,34,15,1,6,7,35,54,55,54,51,50,23,22, 21,20,7,22,23,22,21,20,7,6,1,10,197,32,3,2, 88,8,105,17,19,104,32,11,147,37,11,113,34,27,70,24, 31,78,35,6,15,1,88,4,186,15,17,140,52,24,99,93, 20,7,94,60,23,184,21,24,132,16,3,79,28,35,129,1, 75,2,31,25,53,85,27,9,53,10,29,60,210,18,1,94, 43,58,108,39,32,76,26,35,123,60,38,0,0,2,0,28, 0,0,2,8,2,197,0,10,0,13,0,0,37,33,53,1, 51,17,51,21,35,21,35,53,17,3,1,71,254,213,1,66, 65,105,105,88,222,170,93,1,190,254,52,79,170,249,1,54, 254,202,0,1,0,35,255,233,2,1,2,197,0,36,0,0, 1,21,33,7,54,51,50,23,22,21,20,7,6,35,34,39, 38,39,38,39,51,22,51,50,55,54,53,52,39,38,35,34, 7,6,7,35,19,1,220,254,217,28,59,72,120,64,45,87, 64,92,112,65,8,7,27,16,88,31,114,101,38,16,76,34, 45,64,45,10,11,81,53,2,197,87,198,43,87,61,88,129, 72,53,67,9,9,33,79,119,81,36,47,109,42,19,43,10, 13,1,130,0,0,2,0,43,255,233,2,1,2,197,0,30, 0,46,0,0,5,34,17,52,55,54,55,54,51,50,23,22, 23,35,38,39,38,35,34,7,6,21,54,51,50,23,22,21, 20,7,6,3,34,7,6,21,20,23,22,51,50,55,54,53, 52,39,38,1,25,238,64,56,100,17,17,115,55,23,8,88, 18,73,13,15,111,34,13,58,105,111,62,44,82,62,84,85, 40,22,61,36,47,76,40,25,71,29,23,1,90,185,100,84, 15,2,93,40,52,88,16,3,144,54,71,79,83,59,83,119, 68,52,1,130,66,36,47,86,46,27,63,40,51,102,37,15, 0,1,0,46,0,0,2,8,2,197,0,12,0,0,1,21, 2,3,6,7,35,54,55,54,55,33,53,2,8,202,66,12, 8,94,50,93,55,93,254,129,2,197,74,254,244,254,241,47, 49,218,171,101,132,87,0,3,0,37,255,233,2,1,2,197, 0,28,0,44,0,60,0,0,1,22,21,20,7,6,35,34, 39,38,53,52,55,38,39,38,53,52,55,54,51,50,23,22, 21,20,15,1,6,39,34,15,2,20,23,22,51,50,55,54, 53,52,39,38,3,34,7,6,21,20,23,22,51,50,55,54, 53,52,39,38,1,135,122,86,63,89,124,67,47,121,72,16, 8,81,55,77,116,59,38,45,32,9,127,80,30,10,3,61, 27,35,80,30,13,65,25,33,89,39,20,66,34,46,91,39, 20,67,35,1,117,58,119,112,61,46,82,58,80,118,58,45, 48,23,31,99,53,37,76,48,65,68,41,26,6,252,58,26, 28,70,28,13,57,24,29,75,27,11,254,215,64,33,42,82, 38,20,65,33,42,82,38,19,0,2,0,38,255,233,1,253, 2,197,0,30,0,48,0,0,1,50,17,20,7,6,7,6, 35,34,39,38,39,51,22,23,22,51,50,55,54,53,6,7, 34,39,38,53,52,55,54,23,34,15,2,6,21,20,23,22, 51,50,55,54,53,52,39,38,1,14,239,65,53,97,20,20, 115,55,23,8,88,18,73,13,15,111,34,13,70,92,112,62, 44,82,62,87,76,40,15,8,2,71,29,38,83,41,23,61, 37,2,197,254,166,185,100,81,17,3,93,40,52,88,16,3, 144,54,71,77,2,83,59,83,119,68,52,77,64,30,35,13, 13,102,37,15,65,36,48,87,46,27,0,2,0,110,0,0, 0,214,2,12,0,3,0,7,0,0,55,21,35,53,19,21, 35,53,214,104,104,104,104,104,104,1,164,104,104,0,0,2, 0,110,255,109,0,215,2,12,0,3,0,15,0,0,19,21, 35,53,3,51,21,20,35,53,54,55,54,61,1,35,215,104, 1,105,105,43,10,7,60,2,12,104,104,254,92,120,131,38, 2,31,19,39,18,0,0,1,0,45,255,247,2,22,1,218, 0,6,0,0,55,53,37,21,13,1,21,45,1,233,254,118, 1,138,198,69,207,79,161,164,79,0,0,2,0,50,0,111, 2,22,1,97,0,3,0,7,0,0,1,21,33,53,5,21, 33,53,2,22,254,28,1,228,254,28,1,97,70,70,172,70, 70,0,0,1,0,50,255,247,2,27,1,218,0,6,0,0, 1,21,5,53,45,1,53,2,27,254,23,1,138,254,118,1, 11,69,207,79,161,164,79,0,0,2,0,77,0,0,1,253, 2,229,0,37,0,41,0,0,37,35,53,52,55,54,55,54, 55,54,55,52,47,1,38,35,34,7,6,21,35,52,55,54, 51,50,31,1,22,21,20,7,6,7,6,7,6,29,2,35, 53,1,74,90,28,17,35,7,17,74,1,61,31,17,19,82, 30,17,85,180,19,20,126,56,16,15,51,19,30,63,10,6, 90,199,55,50,37,22,33,6,15,66,66,70,30,10,4,58, 34,64,211,21,2,83,30,36,43,70,59,23,27,58,27,15, 24,142,104,104,0,2,0,34,255,114,3,183,2,229,0,70, 0,89,0,0,1,51,3,6,21,20,23,22,51,50,55,54, 53,52,39,38,39,34,35,34,15,1,6,21,20,23,22,51, 50,55,23,6,35,34,39,38,39,38,53,52,55,54,55,54, 55,54,51,50,23,22,23,22,21,20,7,6,35,34,39,6, 35,34,39,38,53,52,55,54,55,50,23,39,34,7,6,21, 20,23,22,51,50,55,54,55,54,55,39,38,39,38,2,153, 83,90,12,29,10,11,64,53,51,97,99,141,7,8,147,113, 34,99,105,108,162,79,114,28,112,114,180,131,122,19,3,95, 28,35,108,151,37,37,166,123,116,18,3,86,76,110,96,14, 66,76,82,47,34,79,77,101,84,38,128,66,50,45,47,24, 28,58,44,33,16,4,1,2,11,47,16,1,245,254,232,35, 15,27,13,4,72,71,87,120,89,92,6,102,34,113,142,141, 97,100,32,67,42,107,100,147,23,23,154,130,39,31,98,25, 6,101,94,135,21,21,121,102,89,77,72,69,49,65,109,84, 83,1,87,23,71,63,80,67,34,17,65,48,84,22,17,26, 48,16,6,0,0,2,0,17,0,0,2,141,2,217,0,7, 0,10,0,0,37,33,7,35,1,51,1,35,11,2,1,218, 254,231,77,99,1,4,120,1,0,104,101,112,120,219,219,2, 217,253,39,1,41,1,76,254,180,0,0,3,0,79,0,0, 2,111,2,217,0,18,0,28,0,39,0,0,51,17,33,50, 23,22,21,20,7,22,23,22,23,20,21,20,7,6,35,3, 51,50,55,54,52,39,38,43,1,1,52,39,38,43,1,21, 51,50,55,54,79,1,40,103,55,58,101,105,21,6,1,56, 57,102,236,180,72,34,40,40,34,72,180,1,102,71,26,34, 227,227,65,32,34,2,217,51,52,82,112,47,41,80,20,23, 6,7,88,59,61,1,159,26,31,118,31,26,254,72,87,28, 11,251,35,36,0,1,0,48,255,233,2,165,2,229,0,31, 0,0,1,35,38,39,38,39,34,7,6,21,20,23,22,51, 50,55,54,55,54,55,51,2,33,34,39,38,53,52,55,54, 51,50,2,150,95,15,38,54,90,128,61,40,95,59,83,109, 51,6,4,22,11,96,33,254,245,141,82,106,102,82,149,238, 1,247,75,35,44,2,115,75,112,170,79,49,77,8,9,42, 71,254,223,85,109,185,183,111,91,0,0,2,0,89,0,0, 2,155,2,217,0,11,0,22,0,0,51,17,33,50,31,1, 22,21,20,7,6,35,39,51,50,55,54,53,52,39,38,43, 1,89,1,25,163,79,22,33,116,73,108,188,172,174,37,9, 168,25,27,172,2,217,132,43,81,108,209,95,61,82,181,45, 56,246,32,5,0,1,0,90,0,0,2,101,2,217,0,11, 0,0,19,21,33,21,33,17,33,21,33,21,33,21,183,1, 174,253,245,1,249,254,100,1,141,1,76,250,82,2,217,82, 233,82,0,1,0,90,0,0,2,67,2,217,0,9,0,0, 19,17,35,17,33,21,33,21,33,21,183,93,1,233,254,116, 1,92,1,76,254,180,2,217,82,233,82,0,0,1,0,44, 255,233,2,197,2,229,0,41,0,0,1,17,35,39,6,35, 34,39,38,53,52,55,54,55,54,51,50,23,22,23,35,38, 39,38,35,34,7,6,21,20,23,22,23,22,23,50,55,54, 61,1,35,53,2,197,59,23,104,145,153,94,87,102,14,16, 85,133,179,81,33,12,95,21,95,42,53,132,71,53,61,8, 8,72,112,114,66,49,222,1,129,254,123,97,116,114,104,162, 176,110,15,13,70,118,49,66,98,36,17,104,78,115,126,84, 10,9,72,2,80,60,84,20,82,0,0,1,0,83,0,0, 2,132,2,217,0,11,0,0,1,33,17,35,17,51,17,33, 17,51,17,35,2,39,254,138,94,93,1,119,93,93,1,76, 254,180,2,217,254,197,1,59,253,39,0,1,0,100,0,0, 0,194,2,217,0,3,0,0,19,17,35,17,194,94,2,217, 253,39,2,217,0,1,0,17,255,233,1,170,2,217,0,21, 0,0,1,51,17,20,7,6,35,34,39,38,61,1,51,21, 20,23,22,51,50,55,54,53,1,77,93,90,49,67,124,52, 27,95,81,13,15,58,31,23,2,217,253,221,124,53,28,86, 46,61,64,47,111,18,3,45,34,82,0,1,0,79,0,0, 2,146,2,217,0,11,0,0,19,21,35,17,51,17,1,51, 9,1,35,1,172,93,93,1,107,120,254,215,1,44,110,254, 255,0,255,255,2,217,254,143,1,113,254,215,254,80,1,118, 0,1,0,80,0,0,2,21,2,217,0,5,0,0,19,17, 33,21,33,17,173,1,104,254,59,2,217,253,121,82,2,217, 0,1,0,75,0,0,2,249,2,217,0,12,0,0,33,35, 3,17,35,17,51,27,1,51,17,35,17,1,212,98,207,88, 129,216,212,129,88,2,99,253,157,2,217,253,133,2,123,253, 39,2,99,0,0,1,0,76,0,0,2,134,2,217,0,9, 0,0,1,17,35,1,17,35,17,51,1,17,2,134,105,254, 135,88,101,1,125,2,217,253,39,2,79,253,177,2,217,253, 172,2,84,0,0,2,0,38,255,233,2,230,2,229,0,18, 0,34,0,0,1,50,31,1,22,21,20,7,6,7,6,35, 34,39,38,53,52,55,54,23,34,7,6,21,20,23,22,51, 50,55,54,53,52,39,38,1,133,174,97,26,56,82,20,24, 91,135,167,98,87,111,95,145,130,72,56,95,67,97,129,72, 58,98,66,2,229,123,38,96,131,148,105,26,20,77,117,104, 161,184,107,91,82,102,80,118,158,83,59,100,79,117,165,83, 56,0,0,2,0,91,0,0,2,105,2,217,0,12,0,24, 0,0,19,17,35,17,33,50,23,22,21,20,7,6,35,39, 51,50,55,54,53,52,47,1,38,43,1,184,93,1,45,161, 47,17,63,58,83,229,194,102,30,10,79,34,14,15,194,1, 53,254,203,2,217,118,41,55,97,57,52,82,74,24,30,90, 28,8,2,0,0,2,0,38,255,197,2,230,2,229,0,18, 0,37,0,0,5,7,39,6,35,34,39,38,53,52,55,54, 51,50,23,22,21,20,7,39,23,54,53,52,39,38,35,34, 7,6,21,20,23,22,51,50,55,39,2,221,47,105,86,105, 167,98,87,111,96,145,166,98,88,103,158,89,79,94,68,97, 131,72,56,95,67,96,60,60,74,1,58,87,51,117,104,161, 184,107,91,116,104,160,172,113,129,73,89,139,157,83,59,102, 80,118,159,83,58,28,62,0,0,2,0,93,0,0,2,167, 2,217,0,29,0,40,0,0,19,17,35,17,33,50,23,22, 21,20,7,6,7,22,23,22,23,22,23,22,23,21,35,38, 53,55,52,39,38,35,39,51,50,55,54,53,52,39,38,43, 1,186,93,1,80,170,41,11,72,19,24,62,19,17,1,2, 17,9,16,113,21,1,80,18,22,240,225,121,18,4,38,32, 73,225,1,58,254,198,2,217,120,33,42,98,51,13,12,27, 40,37,86,96,27,13,11,23,48,71,65,109,17,4,82,86, 17,22,66,32,28,0,0,1,0,48,255,233,2,109,2,229, 0,54,0,0,1,35,38,39,38,35,34,15,1,6,21,20, 23,22,31,1,22,23,22,21,20,7,6,7,6,35,34,39, 38,39,51,23,22,23,22,51,50,55,54,55,54,53,52,47, 2,38,53,52,55,54,51,50,23,22,2,84,88,1,109,32, 40,104,41,12,6,54,25,41,183,120,28,7,58,11,11,73, 132,169,76,42,1,88,3,7,28,51,117,89,45,44,7,1, 110,24,181,143,104,64,91,176,63,28,2,3,111,29,8,62, 24,17,20,56,28,13,11,49,33,97,25,28,84,63,11,9, 56,104,57,94,38,41,33,61,31,31,56,7,7,76,35,7, 48,37,133,124,56,34,111,49,0,1,0,21,0,0,2,81, 2,217,0,7,0,0,1,17,35,17,35,53,33,21,1,98, 93,240,2,60,2,135,253,121,2,135,82,82,0,1,0,85, 255,233,2,133,2,217,0,21,0,0,1,51,17,20,7,6, 35,34,39,38,53,17,51,17,20,23,22,51,50,55,54,53, 2,40,93,104,72,105,165,73,41,93,110,34,42,124,45,19, 2,217,254,0,130,65,45,101,58,81,2,0,254,0,117,31, 10,80,34,44,0,1,0,30,0,0,2,133,2,217,0,6, 0,0,33,35,1,51,27,1,51,1,136,100,254,250,100,214, 202,99,2,217,253,151,2,105,0,1,0,22,0,0,3,161, 2,217,0,12,0,0,33,35,11,1,35,3,51,27,1,51, 27,1,51,2,232,102,168,163,102,187,104,137,162,100,166,134, 104,2,87,253,169,2,217,253,176,2,80,253,176,2,80,0, 0,1,0,22,0,0,2,137,2,217,0,11,0,0,9,1, 35,11,1,35,1,3,51,27,1,51,1,135,1,2,115,199, 200,113,1,2,242,113,187,188,111,1,118,254,138,1,48,254, 208,1,118,1,99,254,226,1,30,0,0,1,0,13,0,0, 2,149,2,217,0,8,0,0,1,17,35,17,1,51,27,1, 51,1,131,93,254,231,115,214,208,111,1,30,254,226,1,30, 1,187,254,157,1,99,0,1,0,28,0,0,2,71,2,217, 0,9,0,0,1,21,1,33,21,33,53,1,33,53,2,69, 254,76,1,182,253,213,1,182,254,102,2,217,84,253,205,82, 82,2,53,82,0,1,0,64,255,44,0,250,2,217,0,7, 0,0,19,21,35,17,51,21,35,17,250,103,103,186,2,217, 72,252,227,72,3,173,0,1,255,248,255,236,1,28,2,217, 0,3,0,0,27,1,35,3,47,237,55,237,2,217,253,19, 2,237,0,1,0,23,255,44,0,209,2,217,0,7,0,0, 23,53,51,17,35,53,51,17,23,103,103,186,212,72,3,29, 72,252,83,0,0,1,0,44,1,73,1,169,2,197,0,6, 0,0,19,51,19,35,11,1,35,197,73,155,69,122,121,69, 2,197,254,132,1,44,254,212,0,1,255,234,255,80,2,66, 255,130,0,3,0,0,5,21,33,53,2,66,253,168,126,50, 50,0,0,1,0,22,2,80,0,231,2,228,0,3,0,0, 19,23,35,39,135,96,60,149,2,228,148,148,0,2,0,42, 255,233,2,23,2,27,0,45,0,62,0,0,37,21,6,35, 34,39,38,39,6,7,34,39,38,53,52,55,54,55,54,55, 54,55,54,61,1,52,39,38,35,34,7,6,7,35,54,55, 54,51,50,23,22,21,17,20,51,50,39,53,6,7,6,7, 6,7,6,21,20,23,22,51,50,55,54,2,23,35,22,71, 13,1,1,87,91,110,43,19,92,36,94,16,22,73,11,3, 81,17,19,103,17,2,1,84,3,33,55,119,176,19,2,45, 9,137,32,82,9,11,106,16,4,67,16,20,72,52,32,49, 63,9,63,7,7,76,1,75,35,45,102,38,15,12,2,3, 9,29,8,12,22,64,12,2,75,9,9,72,37,61,116,13, 14,254,204,41,118,94,15,11,1,2,15,54,12,15,65,15, 4,47,29,0,0,2,0,54,255,233,2,11,2,217,0,16, 0,32,0,0,19,51,17,54,51,50,23,22,21,20,7,6, 35,34,39,21,35,19,34,7,6,21,20,23,22,51,50,55, 54,53,52,39,38,54,83,57,105,128,59,37,91,57,80,107, 59,75,229,83,39,24,69,33,44,84,42,27,72,37,2,217, 254,236,86,108,68,99,161,77,49,90,67,1,205,84,50,69, 125,52,26,79,51,70,127,53,25,0,0,1,0,31,255,233, 1,221,2,27,0,32,0,0,1,35,38,47,1,34,7,6, 21,20,23,22,51,50,55,51,6,7,6,35,34,39,38,53, 52,55,54,51,50,23,22,23,22,1,215,84,13,84,27,94, 35,16,79,29,39,107,21,84,11,104,43,56,129,62,41,92, 59,82,106,58,4,4,29,1,92,97,15,2,100,46,63,137, 45,17,126,137,46,20,105,70,101,160,77,49,68,5,5,43, 0,2,0,26,255,233,1,239,2,217,0,18,0,36,0,0, 1,17,35,53,6,7,6,35,34,39,38,53,52,55,54,51, 50,23,17,3,34,7,6,7,6,21,20,23,22,51,50,55, 54,53,52,39,38,1,239,74,58,86,11,12,130,60,38,89, 57,79,108,53,147,85,41,20,5,1,70,36,47,83,39,24, 72,33,2,217,253,39,69,83,8,1,112,71,103,154,75,47, 81,1,15,254,244,82,38,51,16,16,122,54,27,82,50,69, 131,51,23,0,0,2,0,40,255,233,2,1,2,27,0,25, 0,36,0,0,37,33,22,23,22,51,50,55,51,6,7,6, 35,34,39,38,53,52,55,54,51,50,23,22,23,22,5,33, 54,53,52,39,38,35,34,7,6,2,1,254,126,1,27,43, 83,102,35,84,22,104,44,54,136,63,39,94,60,86,115,65, 20,12,21,254,128,1,38,1,59,38,48,85,41,20,234,72, 40,68,105,121,43,18,110,68,100,158,77,49,82,25,31,55, 44,2,4,80,45,29,75,36,0,1,0,18,0,0,1,2, 2,220,0,21,0,0,1,21,35,17,35,17,35,53,51,53, 52,55,54,51,50,23,21,38,35,34,29,1,1,2,87,83, 70,70,74,22,27,23,24,19,10,58,2,12,68,254,56,1, 200,68,89,88,24,7,5,69,1,53,82,0,0,2,0,29, 255,38,1,233,2,27,0,39,0,55,0,0,1,51,17,20, 7,6,7,6,7,6,35,34,39,38,39,51,22,23,22,51, 50,55,54,61,1,6,15,1,34,39,38,39,38,53,52,55, 54,51,50,23,39,34,7,6,21,20,23,22,51,50,55,54, 53,52,39,38,1,156,77,41,7,7,48,109,11,11,138,50, 17,4,85,6,26,36,59,81,35,30,59,73,27,83,61,3, 3,66,85,57,81,98,62,151,88,37,20,78,29,39,89,35, 18,82,27,2,12,254,74,154,64,10,9,60,6,1,88,31, 39,39,21,28,49,41,102,27,82,10,2,64,3,3,77,129, 153,79,54,91,14,90,48,66,139,47,18,92,46,63,150,43, 14,0,0,1,0,70,0,0,1,230,2,217,0,23,0,0, 19,51,17,54,55,54,51,50,23,22,21,17,35,17,52,39, 38,35,34,7,6,21,17,35,70,83,54,66,21,27,110,39, 16,83,34,32,42,84,37,21,83,2,217,254,235,70,13,4, 74,30,39,254,116,1,107,55,24,24,77,42,58,254,223,0, 0,2,0,66,0,0,0,150,2,217,0,3,0,7,0,0, 19,17,35,17,55,21,35,53,150,83,83,84,2,12,253,244, 2,12,205,105,105,0,0,2,255,238,255,38,0,153,2,217, 0,15,0,19,0,0,19,51,17,20,7,34,35,34,39,53, 22,51,50,55,54,53,19,21,35,53,70,83,128,7,8,13, 15,17,3,52,11,5,83,83,2,12,253,135,103,6,3,71, 1,32,14,23,3,37,105,105,0,1,0,58,0,0,1,246, 2,217,0,11,0,0,19,17,55,51,7,19,35,3,7,21, 35,17,141,222,107,182,214,103,177,81,83,2,217,254,85,222, 181,254,169,1,28,80,204,2,217,0,0,1,0,68,0,0, 0,152,2,217,0,3,0,0,19,17,35,17,152,84,2,217, 253,39,2,217,0,1,0,70,0,0,2,250,2,27,0,42, 0,0,19,51,21,54,55,54,51,50,23,22,23,54,55,54, 51,50,23,22,21,17,35,17,52,39,38,35,34,7,6,21, 17,35,17,52,39,38,35,34,7,6,21,17,35,70,77,54, 74,15,18,89,43,5,4,54,63,20,24,122,25,5,84,63, 16,18,61,37,25,84,71,12,14,62,37,24,84,2,12,74, 76,11,2,65,7,8,65,11,4,98,22,26,254,119,1,105, 81,19,5,54,37,46,254,183,1,105,87,15,3,56,36,45, 254,183,0,1,0,70,0,0,1,231,2,27,0,23,0,0, 19,51,21,54,55,54,51,50,23,22,21,17,35,17,52,39, 38,35,34,7,6,21,17,35,70,77,54,76,20,24,105,42, 19,83,59,21,28,84,37,21,84,2,12,88,85,14,4,70, 32,41,254,116,1,107,70,24,9,77,42,58,254,223,0,2, 0,36,255,233,1,254,2,27,0,15,0,31,0,0,1,50, 23,22,21,20,7,6,35,34,39,38,53,52,55,54,23,34, 7,6,21,20,23,22,51,50,55,54,53,52,39,38,1,16, 152,57,29,102,56,79,144,60,33,105,55,77,93,38,19,78, 31,41,90,39,21,82,30,2,27,129,65,91,167,71,39,119, 67,95,174,70,37,77,92,48,64,137,48,19,88,47,66,145, 46,16,0,2,0,54,255,38,2,11,2,27,0,18,0,34, 0,0,23,17,51,21,54,51,50,23,22,21,20,7,6,7, 6,35,34,39,17,19,34,7,6,21,20,23,22,51,50,55, 54,53,52,39,38,54,77,59,108,127,60,38,89,39,52,21, 23,97,64,146,83,39,24,69,33,44,84,42,26,71,35,218, 2,230,79,94,111,71,104,154,75,33,10,4,78,254,239,2, 167,84,50,69,125,52,26,81,50,69,127,53,26,0,0,2, 0,26,255,38,1,239,2,27,0,16,0,32,0,0,5,35, 17,6,35,34,39,38,53,52,55,54,51,50,23,53,51,7, 34,7,6,21,20,23,22,51,50,55,54,53,52,39,38,1, 239,83,57,105,128,59,37,91,57,80,107,60,74,229,84,42, 27,70,36,47,82,40,24,71,33,218,1,22,83,108,68,99, 161,77,49,85,70,63,81,51,71,122,54,27,81,50,69,131, 51,24,0,1,0,69,0,0,1,65,2,27,0,17,0,0, 19,51,21,54,55,54,51,50,23,21,6,7,6,7,6,21, 17,35,69,77,58,58,13,14,11,21,72,31,3,3,59,84, 2,12,95,93,14,3,3,85,1,21,2,2,43,110,254,240, 0,1,0,34,255,233,1,203,2,27,0,48,0,0,1,35, 38,35,34,7,6,21,20,23,22,31,1,22,23,22,21,20, 7,6,35,34,39,38,53,51,22,23,22,51,50,55,54,53, 52,47,2,38,39,38,53,52,55,54,51,50,23,22,1,182, 88,3,102,82,23,6,66,14,17,80,118,23,7,90,52,74, 194,14,1,88,6,18,33,71,84,28,10,54,27,78,119,31, 16,84,49,68,145,35,10,1,122,84,49,14,16,45,22,4, 4,19,28,70,21,27,96,44,26,162,8,9,47,20,35,47, 16,19,46,19,8,19,29,51,28,43,93,42,25,101,27,0, 0,1,0,14,255,233,0,254,2,156,0,23,0,0,19,21, 35,17,20,23,22,51,50,55,21,6,35,34,39,38,53,17, 35,53,51,53,51,21,254,86,22,9,15,25,15,39,29,89, 11,1,71,71,83,2,12,68,254,153,38,6,3,4,70,7, 67,7,9,1,140,68,144,144,0,1,0,65,255,233,1,226, 2,12,0,23,0,0,33,35,53,6,7,6,35,34,39,38, 53,17,51,17,20,23,22,51,50,55,54,53,17,51,1,226, 75,56,74,20,25,107,41,19,83,59,22,27,85,38,20,83, 73,79,13,4,70,32,41,1,148,254,141,70,24,9,78,42, 57,1,41,0,0,1,0,10,0,0,1,230,2,12,0,6, 0,0,33,35,3,51,27,1,51,1,29,91,184,94,140,148, 94,2,12,254,87,1,169,0,0,1,0,6,0,0,2,196, 2,12,0,12,0,0,33,35,11,1,35,3,51,27,1,51, 27,1,51,2,42,95,106,101,94,152,92,107,100,102,103,104, 94,1,155,254,101,2,12,254,104,1,152,254,104,1,152,0, 0,1,0,17,0,0,1,217,2,12,0,11,0,0,1,19, 35,39,7,35,19,3,51,23,55,51,1,36,181,97,131,133, 95,185,175,95,126,126,94,1,15,254,241,201,201,1,11,1, 1,190,190,0,0,1,0,20,255,38,1,222,2,12,0,19, 0,0,1,51,3,6,7,6,35,34,39,53,22,51,50,55, 54,63,1,3,51,19,1,132,90,233,22,35,34,44,31,25, 27,17,45,18,2,2,32,177,89,134,2,12,253,134,57,26, 25,13,75,6,40,5,6,83,2,14,254,104,0,1,0,31, 0,0,1,201,2,12,0,9,0,0,1,21,1,33,21,33, 53,1,33,53,1,187,254,201,1,69,254,86,1,57,254,220, 2,12,74,254,135,73,75,1,120,73,0,1,0,43,255,44, 1,20,2,217,0,41,0,0,1,21,35,34,15,1,29,1, 20,15,1,6,7,22,29,1,20,23,22,59,1,21,35,34, 39,38,61,1,52,39,38,39,53,54,55,54,61,1,52,55, 54,51,1,20,15,47,11,5,41,23,8,10,82,25,13,25, 15,46,82,21,6,35,16,27,54,14,10,71,18,20,2,217, 65,27,26,14,181,98,35,16,4,4,38,120,181,50,11,6, 65,80,23,28,167,93,27,12,6,69,11,44,29,54,167,102, 23,6,0,1,0,100,255,44,0,160,2,217,0,3,0,0, 19,51,17,35,100,60,60,2,217,252,83,0,0,1,0,29, 255,44,1,6,2,217,0,38,0,0,23,53,51,50,55,54, 61,1,52,55,38,61,1,52,39,38,43,1,53,51,50,23, 22,29,1,20,23,22,23,21,6,7,6,29,1,20,7,6, 35,29,16,48,11,5,82,82,26,13,25,16,47,83,21,6, 36,15,25,52,15,9,73,17,20,212,65,27,14,26,181,120, 37,38,120,181,50,11,6,65,81,23,27,167,94,27,12,5, 69,11,46,28,53,167,103,23,5,0,0,1,0,75,1,12, 1,252,1,182,0,27,0,0,1,51,21,20,7,6,35,34, 47,1,38,35,34,7,6,7,35,54,55,54,51,50,31,1, 22,51,50,55,1,199,53,57,21,27,39,42,98,23,20,29, 16,5,3,53,7,84,8,9,27,27,117,28,22,44,6,1, 155,16,85,30,12,26,63,14,35,14,29,131,13,1,16,69, 17,49,255,255,0,0,0,0,0,0,0,0,16,6,0,3, 0,0,0,2,0,121,255,51,0,205,2,12,0,5,0,9, 0,0,23,17,55,51,23,17,3,53,51,21,122,22,39,22, 84,84,205,1,82,223,223,254,174,2,113,104,104,0,0,2, 0,52,255,136,1,254,2,116,0,30,0,37,0,0,1,17, 54,55,51,6,7,6,7,21,35,53,38,39,38,53,52,55, 54,55,53,51,21,22,23,22,23,35,38,39,38,3,17,6, 21,20,23,22,1,56,96,18,84,7,93,43,55,42,129,56, 33,98,51,69,42,136,42,12,2,84,9,69,14,58,131,85, 21,1,206,254,103,11,116,124,52,24,3,97,98,11,112,64, 88,163,76,39,7,90,89,9,109,33,40,85,23,5,254,106, 1,150,24,184,138,45,11,0,0,1,0,26,255,233,2,23, 2,217,0,63,0,0,1,21,35,22,21,20,7,6,7,54, 51,50,23,22,51,50,55,23,6,35,34,39,38,39,38,35, 34,7,39,54,55,54,53,52,39,35,53,51,38,39,38,53, 52,55,54,51,50,23,22,23,22,23,35,38,35,34,7,6, 21,20,31,1,22,23,1,110,136,15,58,23,37,59,63,35, 47,55,24,40,43,42,57,74,44,83,9,10,33,33,53,56, 48,102,18,5,24,110,81,46,5,2,80,66,92,113,62,9, 8,27,1,88,4,132,89,36,16,22,21,4,12,1,120,55, 43,28,55,69,28,37,39,15,16,30,66,56,28,3,4,11, 37,66,88,63,19,21,38,40,55,76,33,12,18,99,63,52, 74,12,13,46,87,154,63,29,36,38,42,39,4,24,0,2, 0,67,0,133,1,233,2,39,0,27,0,44,0,0,37,7, 39,6,35,34,39,7,39,55,38,53,52,55,39,55,23,54, 51,50,23,55,23,7,22,21,20,7,39,34,15,1,6,21, 20,23,22,51,50,55,54,53,52,39,38,1,229,58,53,40, 60,53,41,51,56,48,32,32,54,56,55,44,53,58,40,59, 57,55,26,29,157,57,31,12,6,47,27,33,55,32,19,48, 27,190,54,53,30,25,51,57,49,43,59,57,45,55,53,55, 26,28,53,58,55,41,52,50,47,201,47,24,17,17,55,31, 18,45,27,31,58,31,17,0,0,1,0,11,0,0,2,33, 2,197,0,22,0,0,1,21,35,21,51,21,35,21,35,53, 35,53,51,53,35,53,51,3,51,27,1,51,3,1,239,170, 170,170,88,172,172,172,151,205,85,185,179,85,201,1,98,51, 77,51,175,175,51,77,51,1,99,254,190,1,66,254,157,0, 0,2,0,100,255,44,0,160,2,217,0,3,0,7,0,0, 19,51,17,35,21,51,17,35,100,60,60,60,60,2,217,254, 111,139,254,111,0,2,0,43,255,43,1,250,2,217,0,66, 0,80,0,0,1,35,53,52,39,38,35,34,15,1,6,21, 20,23,22,31,1,22,23,22,21,20,7,22,23,22,21,20, 7,6,35,34,39,38,39,38,53,51,20,23,22,51,50,55, 54,53,52,47,1,38,39,38,53,52,55,54,55,38,53,52, 55,54,51,50,23,22,21,1,23,54,53,52,47,1,6,7, 6,21,20,23,22,1,208,84,55,19,23,54,24,9,2,43, 7,7,146,82,19,8,109,48,4,1,71,50,66,100,52,15, 8,11,85,18,29,55,64,23,9,55,170,84,7,1,79,12, 14,44,68,50,67,99,48,28,254,236,166,73,73,161,62,7, 2,30,13,2,12,26,71,23,8,43,23,9,10,36,31,5, 5,94,53,56,25,33,115,41,55,48,7,8,85,49,34,69, 20,24,33,53,54,24,44,47,18,21,50,38,117,58,81,9, 9,84,51,8,7,51,51,79,49,37,74,43,60,254,189,123, 39,63,61,51,109,40,42,9,10,41,29,12,0,2,0,30, 2,100,1,40,2,203,0,3,0,7,0,0,19,21,35,53, 33,21,35,53,134,104,1,10,104,2,203,103,103,103,103,0, 0,3,255,243,255,234,2,239,2,230,0,32,0,56,0,72, 0,0,19,20,23,22,51,50,55,54,55,51,6,7,6,35, 34,39,38,53,52,55,54,51,50,31,1,35,38,39,38,35, 34,7,6,19,50,23,22,23,22,21,20,7,6,7,6,35, 34,39,38,39,38,53,52,55,54,55,54,23,34,7,6,7, 20,23,22,23,50,55,54,53,52,39,38,250,54,31,40,82, 22,1,1,71,16,25,49,87,101,54,39,80,49,68,120,39, 7,71,20,50,12,16,75,32,18,119,151,110,108,12,1,106, 103,153,13,12,145,109,107,14,2,103,102,147,15,15,129,92, 92,1,91,95,124,135,92,91,92,91,1,102,95,48,27,114, 5,5,79,37,70,85,61,85,131,64,40,129,26,77,13,3, 76,41,1,73,103,101,147,15,15,155,110,108,9,1,102,101, 143,18,18,151,110,108,12,1,62,93,93,134,130,94,94,2, 95,93,133,131,94,93,0,3,0,37,1,47,1,77,2,230, 0,3,0,43,0,55,0,0,1,21,33,53,37,21,6,35, 34,39,52,39,6,35,34,39,38,53,52,55,54,55,54,55, 54,61,1,52,39,34,7,6,7,35,54,55,50,51,50,29, 1,20,51,50,39,53,6,7,6,15,1,22,23,50,55,54, 1,64,254,235,1,34,16,16,44,10,1,49,56,74,23,7, 57,32,68,43,5,1,67,47,13,5,3,59,3,115,5,6, 122,23,4,84,14,62,63,8,1,9,48,52,27,12,1,98, 51,51,95,44,6,37,3,3,43,56,18,22,62,25,13,5, 3,19,5,6,13,43,1,28,11,17,103,5,94,179,23,71, 51,6,10,8,32,14,43,4,35,15,0,2,0,98,0,106, 1,199,1,182,0,6,0,13,0,0,55,53,55,21,7,23, 21,55,53,55,21,7,23,21,98,152,106,106,53,152,106,106, 227,89,122,83,83,83,83,121,89,122,83,83,83,83,0,1, 0,40,0,86,2,32,1,119,0,5,0,0,19,33,17,35, 53,33,40,1,248,70,254,78,1,119,254,223,219,0,0,1, 0,46,0,240,1,28,1,56,0,3,0,0,1,21,35,53, 1,28,238,1,56,72,72,0,0,4,255,243,255,234,2,239, 2,230,0,25,0,33,0,57,0,73,0,0,1,21,35,17, 51,50,21,20,15,1,22,23,22,23,22,23,22,23,21,35, 38,53,55,52,47,2,51,54,55,52,47,1,35,55,50,23, 22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,53, 52,55,54,55,54,23,34,7,6,7,20,23,22,23,50,55, 54,53,52,39,38,1,16,70,206,141,32,22,33,7,4,1, 1,13,3,6,79,15,1,46,18,134,129,71,4,52,23,129, 97,151,110,108,12,1,106,103,153,13,12,145,109,107,14,2, 103,102,147,15,15,129,92,92,1,91,95,124,135,92,91,92, 91,1,69,185,1,189,126,51,30,18,21,29,19,43,61,14, 4,4,25,35,42,40,59,8,1,63,9,58,58,7,2,220, 103,101,147,15,15,155,110,108,9,1,102,101,143,18,18,151, 110,108,12,1,62,93,93,134,130,94,94,2,95,93,133,131, 94,93,0,1,0,28,2,119,1,46,2,189,0,3,0,0, 1,21,33,53,1,46,254,238,2,189,70,70,0,2,0,151, 1,127,1,198,2,174,0,15,0,31,0,0,1,50,23,22, 21,20,7,6,35,34,39,38,53,52,55,54,23,34,7,6, 21,20,23,22,51,50,55,54,53,52,39,38,1,47,74,45, 32,60,41,52,72,46,32,60,40,52,52,28,15,44,23,26, 55,27,14,44,23,2,174,59,41,51,76,45,31,59,41,52, 74,46,31,57,44,23,27,51,29,15,46,22,27,52,28,14, 0,2,0,50,255,245,2,22,2,111,0,11,0,15,0,0, 1,21,35,21,35,53,35,53,51,53,51,21,19,21,33,53, 2,22,207,70,207,207,70,207,254,28,1,160,70,207,207,70, 207,207,254,155,70,70,0,1,0,19,1,28,1,70,2,197, 0,33,0,0,1,21,33,54,55,54,63,1,54,53,52,39, 38,35,34,7,6,7,35,54,55,50,51,50,31,1,22,21, 20,15,1,6,15,1,1,67,254,208,4,38,26,59,58,59, 43,19,23,51,23,10,3,62,4,134,6,7,87,39,13,7, 96,63,49,16,8,1,86,58,85,42,29,31,31,32,47,45, 21,9,39,17,43,145,7,59,25,20,22,82,47,32,26,34, 20,0,0,1,0,16,1,14,1,66,2,197,0,45,0,0, 19,53,50,55,54,53,52,47,1,34,7,6,21,35,54,51, 50,23,22,21,20,7,22,21,20,7,6,35,34,39,38,53, 51,22,23,22,51,50,55,54,53,52,39,38,39,38,135,85, 17,8,50,26,53,19,9,63,3,141,96,32,11,57,71,71, 36,48,113,29,9,62,4,63,11,13,72,15,3,40,8,10, 15,1,220,51,26,13,22,52,13,3,35,17,37,142,66,24, 30,59,26,24,76,82,34,18,86,25,31,78,9,2,56,11, 14,46,18,4,2,2,0,1,0,92,2,80,1,45,2,228, 0,3,0,0,19,51,7,35,188,113,149,60,2,228,148,0, 0,1,0,65,255,36,2,32,2,12,0,30,0,0,37,21, 6,35,34,39,38,53,6,35,34,39,21,35,17,51,17,20, 23,22,51,50,55,54,53,17,51,17,20,51,50,2,32,33, 24,79,6,1,59,104,54,36,83,83,58,22,27,85,38,20, 83,45,8,49,63,9,73,5,5,83,26,223,2,232,254,141, 70,24,9,78,42,57,1,41,254,76,41,0,0,1,0,48, 255,79,2,10,2,217,0,19,0,0,1,21,35,17,35,17, 35,17,35,17,38,39,38,39,38,53,52,55,54,51,2,10, 57,64,82,64,77,48,73,8,1,77,62,85,2,217,64,252, 182,3,74,252,182,1,180,4,40,61,105,10,10,112,71,57, 0,1,0,87,1,46,0,211,1,171,0,3,0,0,19,21, 35,53,211,124,1,171,125,125,0,1,0,39,255,42,1,31, 0,0,0,29,0,0,59,1,7,54,51,50,23,22,21,20, 7,6,35,34,39,38,39,55,23,22,23,50,55,54,53,38, 39,34,7,39,165,38,23,13,15,70,8,1,66,25,32,44, 63,8,10,21,9,57,32,38,13,3,7,39,15,16,12,56, 2,55,5,7,63,22,8,26,4,4,40,4,28,1,29,7, 9,34,3,8,7,0,0,1,0,61,1,28,0,222,2,197, 0,10,0,0,19,35,53,55,54,55,54,55,51,17,35,160, 99,15,61,18,13,11,43,62,2,68,46,1,6,20,15,41, 254,87,0,3,0,40,1,47,1,68,2,230,0,3,0,19, 0,36,0,0,1,21,33,53,19,50,23,22,21,20,7,6, 35,34,39,38,53,52,55,54,23,34,15,1,20,21,20,23, 22,51,50,55,54,53,52,39,38,1,58,254,249,131,108,26, 8,79,28,35,101,30,11,84,26,32,59,19,6,55,14,15, 59,19,6,58,12,1,98,51,51,1,132,106,31,37,119,37, 13,95,34,43,126,34,11,52,67,38,7,7,93,22,5,67, 22,29,97,20,4,0,0,2,0,98,0,106,1,195,1,182, 0,6,0,13,0,0,19,21,7,53,55,39,53,5,21,7, 53,55,39,53,252,154,108,108,1,97,154,108,108,1,61,89, 122,83,83,83,83,121,89,122,83,83,83,83,0,4,0,61, 255,236,3,81,2,197,0,10,0,14,0,25,0,28,0,0, 19,35,53,55,54,55,54,55,51,17,35,1,51,1,35,37, 35,53,19,51,17,51,21,35,21,35,61,1,7,160,99,15, 61,18,13,11,43,62,1,227,58,254,60,58,2,17,188,204, 46,67,67,62,129,2,68,46,1,6,20,15,41,254,87,1, 169,253,39,120,59,1,10,254,240,53,100,153,170,170,0,3, 0,61,255,236,3,76,2,197,0,10,0,14,0,49,0,0, 19,35,53,55,54,55,54,55,51,17,35,1,51,1,35,37, 21,33,54,55,54,63,1,54,53,52,39,38,35,34,7,6, 7,35,54,55,50,51,50,31,1,22,21,20,15,1,6,7, 6,7,160,99,15,61,18,13,11,43,62,1,203,58,254,60, 58,2,162,254,208,4,38,26,59,58,59,43,19,23,51,23, 10,3,62,4,134,6,7,87,39,13,7,96,63,49,16,5, 3,2,68,46,1,6,20,15,41,254,87,1,169,253,39,78, 58,85,42,29,31,31,32,47,45,21,9,39,17,43,145,7, 59,25,20,22,82,47,32,26,34,9,11,0,0,4,0,16, 255,236,3,81,2,197,0,45,0,49,0,60,0,63,0,0, 19,53,50,55,54,53,52,47,1,34,7,6,21,35,54,51, 50,23,22,21,20,7,22,21,20,7,6,35,34,39,38,53, 51,22,23,22,51,50,55,54,53,52,39,38,39,38,37,51, 1,35,37,35,53,19,51,17,51,21,35,21,35,61,1,7, 135,85,17,8,50,26,53,19,9,63,3,141,96,32,11,57, 71,71,36,48,113,29,9,62,4,63,11,13,72,15,3,40, 8,10,15,1,211,58,254,60,58,2,7,188,204,46,67,67, 62,129,1,220,51,26,13,22,52,13,3,35,17,37,142,66, 24,30,59,26,24,76,82,34,18,86,25,31,78,9,2,56, 11,14,46,18,4,2,2,233,253,39,120,59,1,10,254,240, 53,100,153,170,170,0,0,2,0,95,255,39,2,16,2,12, 0,35,0,39,0,0,1,51,21,20,7,6,7,6,7,6, 7,20,23,22,51,50,55,54,53,51,20,7,6,35,34,39, 38,53,52,55,54,55,54,55,54,61,2,51,21,1,19,90, 28,18,41,5,13,74,1,61,30,38,82,30,17,85,180,19, 20,129,55,30,49,20,31,63,11,6,90,1,69,55,50,37, 23,36,5,12,66,66,70,30,14,58,34,64,211,21,2,85, 45,62,70,58,22,29,57,26,15,26,142,104,104,0,0,3, 0,17,0,0,2,141,3,171,0,7,0,10,0,14,0,0, 37,33,7,35,1,51,1,35,11,2,19,23,35,39,1,218, 254,231,77,99,1,4,120,1,0,104,101,112,120,88,96,60, 149,219,219,2,217,253,39,1,41,1,76,254,180,2,130,148, 148,0,0,3,0,17,0,0,2,141,3,171,0,7,0,10, 0,14,0,0,37,33,7,35,1,51,1,35,11,2,19,51, 7,35,1,218,254,231,77,99,1,4,120,1,0,104,101,112, 120,154,113,149,60,219,219,2,217,253,39,1,41,1,76,254, 180,2,130,148,0,3,0,17,0,0,2,141,3,172,0,7, 0,10,0,17,0,0,37,33,7,35,1,51,1,35,11,2, 19,51,23,35,39,7,35,1,218,254,231,77,99,1,4,120, 1,0,104,101,112,120,72,95,96,63,81,79,64,219,219,2, 217,253,39,1,41,1,76,254,180,2,131,150,96,96,0,3, 0,17,0,0,2,141,3,148,0,7,0,10,0,32,0,0, 37,33,7,35,1,51,1,35,11,2,19,51,6,35,34,39, 38,35,34,7,35,54,55,54,51,50,23,22,23,22,51,50, 1,218,254,231,77,99,1,4,120,1,0,104,101,112,120,218, 58,15,74,21,64,35,14,23,10,58,16,59,5,6,23,42, 2,3,39,24,25,219,219,2,217,253,39,1,41,1,76,254, 180,2,107,104,25,13,37,93,9,1,17,1,1,18,0,4, 0,17,0,0,2,141,3,146,0,7,0,10,0,14,0,18, 0,0,37,33,7,35,1,51,1,35,11,2,19,21,35,53, 33,21,35,53,1,218,254,231,77,99,1,4,120,1,0,104, 101,112,120,90,104,1,10,104,219,219,2,217,253,39,1,41, 1,76,254,180,2,105,103,103,103,103,0,4,0,17,0,0, 2,141,3,185,0,7,0,10,0,27,0,43,0,0,37,33, 7,35,1,51,1,35,11,2,19,50,31,1,22,21,20,7, 6,35,34,39,38,53,52,55,54,23,34,7,6,21,20,23, 22,51,50,55,54,53,52,39,38,1,218,254,231,77,99,1, 4,120,1,0,104,101,112,120,119,50,26,9,3,43,21,24, 48,27,13,42,21,25,29,12,3,27,8,9,29,12,3,28, 8,219,219,2,217,253,39,1,41,1,76,254,180,2,144,43, 23,11,11,49,26,12,42,21,25,47,27,13,44,27,8,8, 29,11,4,27,8,8,31,10,3,0,0,2,0,11,0,0, 3,182,2,217,0,15,0,19,0,0,37,33,7,35,1,33, 21,33,21,33,21,33,21,33,21,33,25,1,35,3,1,212, 254,243,85,103,1,43,2,110,254,141,1,96,254,160,1,133, 254,30,100,138,214,214,2,217,82,233,82,250,82,1,40,1, 95,254,161,0,0,1,0,48,255,42,2,165,2,229,0,66, 0,0,5,7,54,51,50,23,22,21,20,7,6,35,34,39, 38,39,55,23,22,51,50,55,54,53,38,39,34,7,39,55, 38,39,38,39,38,39,38,53,52,55,54,55,54,51,50,23, 35,38,39,38,39,34,7,6,21,20,23,22,51,50,55,54, 55,54,55,51,2,1,123,13,13,15,70,8,1,66,25,32, 46,68,5,6,21,9,57,32,38,13,3,7,39,15,16,11, 31,85,45,9,10,109,27,8,97,3,2,82,149,238,43,95, 15,38,55,88,129,61,40,96,59,82,109,51,6,4,22,11, 96,33,23,33,2,55,5,7,63,22,8,29,2,3,40,4, 29,29,7,9,34,3,8,7,69,12,27,6,7,78,159,43, 47,178,111,2,3,91,238,75,35,43,3,115,75,112,172,79, 48,77,8,9,43,71,254,223,0,2,0,90,0,0,2,101, 3,171,0,11,0,15,0,0,19,21,33,21,33,17,33,21, 33,21,33,21,1,23,35,39,183,1,174,253,245,1,249,254, 100,1,141,254,252,96,60,149,1,76,250,82,2,217,82,233, 82,2,95,148,148,0,0,2,0,90,0,0,2,101,3,171, 0,11,0,15,0,0,19,21,33,21,33,17,33,21,33,21, 33,21,3,51,7,35,183,1,174,253,245,1,249,254,100,1, 141,214,113,149,60,1,76,250,82,2,217,82,233,82,2,95, 148,0,0,2,0,90,0,0,2,101,3,172,0,11,0,18, 0,0,19,21,33,21,33,17,33,21,33,21,33,21,1,51, 23,35,39,7,35,183,1,174,253,245,1,249,254,100,1,141, 254,229,95,96,63,81,79,64,1,76,250,82,2,217,82,233, 82,2,96,150,96,96,0,3,0,90,0,0,2,101,3,146, 0,11,0,15,0,19,0,0,19,21,33,21,33,17,33,21, 33,21,33,21,1,21,35,53,33,21,35,53,183,1,174,253, 245,1,249,254,100,1,141,254,247,104,1,10,104,1,76,250, 82,2,217,82,233,82,2,70,103,103,103,103,0,2,0,1, 0,0,0,210,3,171,0,3,0,7,0,0,19,17,35,17, 55,23,35,39,193,93,14,96,60,149,2,217,253,39,2,217, 210,148,148,0,0,2,0,71,0,0,1,24,3,171,0,3, 0,7,0,0,19,17,35,17,55,51,7,35,193,93,67,113, 149,60,2,217,253,39,2,217,210,148,0,2,255,255,0,0, 1,30,3,172,0,3,0,10,0,0,19,17,35,17,39,51, 23,35,39,7,35,193,93,5,95,96,63,81,79,64,2,217, 253,39,2,217,211,150,96,96,0,3,0,9,0,0,1,19, 3,139,0,3,0,7,0,11,0,0,19,17,35,17,55,21, 35,53,33,21,35,53,193,93,13,104,1,10,104,2,217,253, 39,2,217,178,103,103,103,103,0,2,0,20,0,0,2,155, 2,217,0,15,0,30,0,0,19,35,53,51,17,33,50,31, 1,22,21,20,7,6,35,33,19,17,51,50,55,54,53,52, 39,38,43,1,21,51,21,89,69,69,1,26,163,78,22,33, 117,73,106,254,230,93,173,178,34,7,161,27,31,173,171,1, 83,67,1,67,132,43,81,108,211,95,59,1,83,254,255,191, 42,50,239,37,6,241,67,0,0,2,0,76,0,0,2,134, 3,148,0,9,0,31,0,0,1,17,35,1,17,35,17,51, 1,17,39,51,6,35,34,39,38,35,34,7,35,54,55,54, 51,50,23,22,23,22,51,50,2,134,105,254,135,88,101,1, 125,91,58,15,74,21,64,35,14,23,10,58,16,59,5,6, 23,42,2,3,39,24,25,2,217,253,39,2,79,253,177,2, 217,253,172,2,84,187,104,25,13,37,93,9,1,17,1,1, 18,0,0,3,0,38,255,233,2,230,3,171,0,18,0,34, 0,38,0,0,1,50,31,1,22,21,20,7,6,7,6,35, 34,39,38,53,52,55,54,23,34,7,6,21,20,23,22,51, 50,55,54,53,52,39,38,3,23,35,39,1,133,174,97,26, 56,82,20,24,91,135,167,98,87,111,95,145,130,72,56,95, 67,97,129,72,58,98,66,126,96,60,149,2,229,123,38,96, 131,148,105,26,20,77,117,104,161,184,107,91,82,102,80,118, 158,83,59,100,79,117,165,83,56,1,24,148,148,0,0,3, 0,38,255,233,2,230,3,171,0,18,0,34,0,38,0,0, 1,50,31,1,22,21,20,7,6,7,6,35,34,39,38,53, 52,55,54,23,34,7,6,21,20,23,22,51,50,55,54,53, 52,39,38,3,51,7,35,1,133,174,97,26,56,82,20,24, 91,135,167,98,87,111,95,145,130,72,56,95,67,97,129,72, 58,98,66,67,113,149,60,2,229,123,38,96,131,148,105,26, 20,77,117,104,161,184,107,91,82,102,80,118,158,83,59,100, 79,117,165,83,56,1,24,148,0,3,0,38,255,233,2,230, 3,172,0,18,0,34,0,41,0,0,1,50,31,1,22,21, 20,7,6,7,6,35,34,39,38,53,52,55,54,23,34,7, 6,21,20,23,22,51,50,55,54,53,52,39,38,3,51,23, 35,39,7,35,1,133,174,97,26,56,82,20,24,91,135,167, 98,87,111,95,145,130,72,56,95,67,97,129,72,58,98,66, 142,95,96,63,81,79,64,2,229,123,38,96,131,148,105,26, 20,77,117,104,161,184,107,91,82,102,80,118,158,83,59,100, 79,117,165,83,56,1,25,150,96,96,0,3,0,38,255,233, 2,230,3,148,0,18,0,34,0,56,0,0,1,50,31,1, 22,21,20,7,6,7,6,35,34,39,38,53,52,55,54,23, 34,7,6,21,20,23,22,51,50,55,54,53,52,39,38,19, 51,6,35,34,39,38,35,34,7,35,54,55,54,51,50,23, 22,23,22,51,50,1,133,174,97,26,56,82,20,24,91,135, 167,98,87,111,95,145,130,72,56,95,67,97,129,72,58,98, 66,7,58,15,74,21,64,35,14,23,10,58,16,59,5,6, 23,42,2,3,39,24,25,2,229,123,38,96,131,148,105,26, 20,77,117,104,161,184,107,91,82,102,80,118,158,83,59,100, 79,117,165,83,56,1,1,104,25,13,37,93,9,1,17,1, 1,18,0,4,0,38,255,233,2,230,3,146,0,18,0,34, 0,38,0,42,0,0,1,50,31,1,22,21,20,7,6,7, 6,35,34,39,38,53,52,55,54,23,34,7,6,21,20,23, 22,51,50,55,54,53,52,39,38,3,21,35,53,33,21,35, 53,1,133,174,97,26,56,82,20,24,91,135,167,98,87,111, 95,145,130,72,56,95,67,97,129,72,58,98,66,124,104,1, 10,104,2,229,123,38,96,131,148,105,26,20,77,117,104,161, 184,107,91,82,102,80,118,158,83,59,100,79,117,165,83,56, 0,255,103,103,103,103,0,1,0,95,0,34,1,232,1,171, 0,11,0,0,1,23,7,23,7,39,7,39,55,39,55,23, 1,182,49,146,147,50,147,146,50,147,146,49,146,1,171,50, 146,147,50,147,146,49,147,146,49,145,0,3,0,30,255,233, 2,232,2,243,0,21,0,30,0,39,0,0,63,1,38,53, 52,55,54,51,50,23,55,23,7,22,21,20,7,6,35,34, 39,7,55,1,38,35,34,7,6,21,20,9,1,22,51,50, 55,54,53,52,30,81,76,112,95,145,137,93,87,40,89,84, 112,95,145,144,97,77,105,1,128,73,98,132,72,55,1,209, 254,125,74,107,132,72,55,19,89,106,146,184,106,91,81,95, 36,97,106,158,184,106,91,90,84,193,1,163,64,103,79,117, 104,1,42,254,91,74,103,79,117,114,0,2,0,85,255,233, 2,133,3,171,0,21,0,25,0,0,1,51,17,20,7,6, 35,34,39,38,53,17,51,17,20,23,22,51,50,55,54,53, 3,23,35,39,2,40,93,104,72,105,165,73,41,93,110,34, 42,124,45,19,218,96,60,149,2,217,254,0,130,65,45,101, 58,81,2,0,254,0,117,31,10,80,34,44,2,210,148,148, 0,2,0,85,255,233,2,133,3,171,0,21,0,25,0,0, 1,51,17,20,7,6,35,34,39,38,53,17,51,17,20,23, 22,51,50,55,54,53,3,51,7,35,2,40,93,104,72,105, 165,73,41,93,110,34,42,124,45,19,165,113,149,60,2,217, 254,0,130,65,45,101,58,81,2,0,254,0,117,31,10,80, 34,44,2,210,148,0,0,2,0,85,255,233,2,133,3,172, 0,21,0,28,0,0,1,51,17,20,7,6,35,34,39,38, 53,17,51,17,20,23,22,51,50,55,54,53,3,51,23,35, 39,7,35,2,40,93,104,72,105,165,73,41,93,110,34,42, 124,45,19,234,95,96,63,81,79,64,2,217,254,0,130,65, 45,101,58,81,2,0,254,0,117,31,10,80,34,44,2,211, 150,96,96,0,0,3,0,85,255,233,2,133,3,146,0,21, 0,25,0,29,0,0,1,51,17,20,7,6,35,34,39,38, 53,17,51,17,20,23,22,51,50,55,54,53,3,21,35,53, 33,21,35,53,2,40,93,104,72,105,165,73,41,93,110,34, 42,124,45,19,216,104,1,10,104,2,217,254,0,130,65,45, 101,58,81,2,0,254,0,117,31,10,80,34,44,2,185,103, 103,103,103,0,0,2,0,13,0,0,2,149,3,171,0,8, 0,12,0,0,1,17,35,17,1,51,27,1,51,37,51,7, 35,1,131,93,254,231,115,214,208,111,254,216,113,149,60,1, 30,254,226,1,30,1,187,254,157,1,99,210,148,0,0,2, 0,91,0,0,2,104,2,217,0,14,0,25,0,0,55,21, 35,17,51,21,51,50,23,22,21,20,7,6,35,39,51,50, 55,54,53,52,39,38,43,1,184,93,93,208,139,56,29,78, 53,72,229,194,100,29,9,78,26,34,194,189,189,2,217,120, 95,49,68,110,58,40,82,75,24,29,91,27,10,0,0,1, 0,67,255,241,2,59,2,216,0,49,0,0,1,54,55,52, 47,1,38,35,34,15,1,20,21,17,35,17,52,55,54,51, 50,23,22,21,20,7,34,7,22,23,22,21,20,7,6,35, 34,39,53,22,51,50,55,52,53,52,39,34,43,1,1,38, 148,7,75,38,18,21,115,21,6,88,93,56,82,147,61,31, 79,1,2,64,34,18,142,49,61,20,33,22,22,164,6,152, 9,9,16,1,171,9,104,74,26,9,3,86,40,8,8,254, 2,2,20,113,52,31,83,41,56,95,51,2,17,74,39,36, 180,52,17,7,75,3,140,5,5,133,7,0,0,3,0,42, 255,233,2,23,2,228,0,45,0,62,0,66,0,0,37,21, 6,35,34,39,38,39,6,7,34,39,38,53,52,55,54,55, 54,55,54,55,54,61,1,52,39,38,35,34,7,6,7,35, 54,55,54,51,50,23,22,21,17,20,51,50,39,53,6,7, 6,7,6,7,6,21,20,23,22,51,50,55,54,3,23,35, 39,2,23,35,22,71,13,1,1,87,91,110,43,19,92,36, 94,16,22,73,11,3,81,17,19,103,17,2,1,84,3,33, 55,119,176,19,2,45,9,137,32,82,9,11,106,16,4,67, 16,20,72,52,32,138,96,60,149,49,63,9,63,7,7,76, 1,75,35,45,102,38,15,12,2,3,9,29,8,12,22,64, 12,2,75,9,9,72,37,61,116,13,14,254,204,41,118,94, 15,11,1,2,15,54,12,15,65,15,4,47,29,2,102,148, 148,0,0,3,0,42,255,233,2,23,2,228,0,45,0,62, 0,66,0,0,37,21,6,35,34,39,38,39,6,7,34,39, 38,53,52,55,54,55,54,55,54,55,54,61,1,52,39,38, 35,34,7,6,7,35,54,55,54,51,50,23,22,21,17,20, 51,50,39,53,6,7,6,7,6,7,6,21,20,23,22,51, 50,55,54,3,51,7,35,2,23,35,22,71,13,1,1,87, 91,110,43,19,92,36,94,16,22,73,11,3,81,17,19,103, 17,2,1,84,3,33,55,119,176,19,2,45,9,137,32,82, 9,11,106,16,4,67,16,20,72,52,32,85,113,149,60,49, 63,9,63,7,7,76,1,75,35,45,102,38,15,12,2,3, 9,29,8,12,22,64,12,2,75,9,9,72,37,61,116,13, 14,254,204,41,118,94,15,11,1,2,15,54,12,15,65,15, 4,47,29,2,102,148,0,3,0,42,255,233,2,23,2,229, 0,45,0,62,0,69,0,0,37,21,6,35,34,39,38,39, 6,7,34,39,38,53,52,55,54,55,54,55,54,55,54,61, 1,52,39,38,35,34,7,6,7,35,54,55,54,51,50,23, 22,21,17,20,51,50,39,53,6,7,6,7,6,7,6,21, 20,23,22,51,50,55,54,3,51,23,35,39,7,35,2,23, 35,22,71,13,1,1,87,91,110,43,19,92,36,94,16,22, 73,11,3,81,17,19,103,17,2,1,84,3,33,55,119,176, 19,2,45,9,137,32,82,9,11,106,16,4,67,16,20,72, 52,32,160,95,96,63,81,79,64,49,63,9,63,7,7,76, 1,75,35,45,102,38,15,12,2,3,9,29,8,12,22,64, 12,2,75,9,9,72,37,61,116,13,14,254,204,41,118,94, 15,11,1,2,15,54,12,15,65,15,4,47,29,2,103,150, 96,96,0,3,0,42,255,233,2,23,2,205,0,45,0,62, 0,84,0,0,37,21,6,35,34,39,38,39,6,7,34,39, 38,53,52,55,54,55,54,55,54,55,54,61,1,52,39,38, 35,34,7,6,7,35,54,55,54,51,50,23,22,21,17,20, 51,50,39,53,6,7,6,7,6,7,6,21,20,23,22,51, 50,55,54,3,51,6,35,34,39,38,35,34,7,35,54,55, 54,51,50,23,22,23,22,51,50,2,23,35,22,71,13,1, 1,87,91,110,43,19,92,36,94,16,22,73,11,3,81,17, 19,103,17,2,1,84,3,33,55,119,176,19,2,45,9,137, 32,82,9,11,106,16,4,67,16,20,72,52,32,14,58,15, 74,21,64,35,14,23,10,58,16,59,5,6,23,42,2,3, 39,24,25,49,63,9,63,7,7,76,1,75,35,45,102,38, 15,12,2,3,9,29,8,12,22,64,12,2,75,9,9,72, 37,61,116,13,14,254,204,41,118,94,15,11,1,2,15,54, 12,15,65,15,4,47,29,2,79,104,25,13,37,93,9,1, 17,1,1,18,0,4,0,42,255,233,2,23,2,203,0,45, 0,62,0,66,0,70,0,0,37,21,6,35,34,39,38,39, 6,7,34,39,38,53,52,55,54,55,54,55,54,55,54,61, 1,52,39,38,35,34,7,6,7,35,54,55,54,51,50,23, 22,21,17,20,51,50,39,53,6,7,6,7,6,7,6,21, 20,23,22,51,50,55,54,3,21,35,53,33,21,35,53,2, 23,35,22,71,13,1,1,87,91,110,43,19,92,36,94,16, 22,73,11,3,81,17,19,103,17,2,1,84,3,33,55,119, 176,19,2,45,9,137,32,82,9,11,106,16,4,67,16,20, 72,52,32,144,104,1,10,104,49,63,9,63,7,7,76,1, 75,35,45,102,38,15,12,2,3,9,29,8,12,22,64,12, 2,75,9,9,72,37,61,116,13,14,254,204,41,118,94,15, 11,1,2,15,54,12,15,65,15,4,47,29,2,77,103,103, 103,103,0,4,0,42,255,233,2,23,2,242,0,45,0,62, 0,79,0,95,0,0,37,21,6,35,34,39,38,39,6,7, 34,39,38,53,52,55,54,55,54,55,54,55,54,61,1,52, 39,38,35,34,7,6,7,35,54,55,54,51,50,23,22,21, 17,20,51,50,39,53,6,7,6,7,6,7,6,21,20,23, 22,51,50,55,54,3,50,31,1,22,21,20,7,6,35,34, 39,38,53,52,55,54,23,34,7,6,21,20,23,22,51,50, 55,54,53,52,39,38,2,23,35,22,71,13,1,1,87,91, 110,43,19,92,36,94,16,22,73,11,3,81,17,19,103,17, 2,1,84,3,33,55,119,176,19,2,45,9,137,32,82,9, 11,106,16,4,67,16,20,72,52,32,113,50,26,9,3,43, 21,24,48,27,13,42,21,25,29,12,3,27,8,9,29,12, 3,28,8,49,63,9,63,7,7,76,1,75,35,45,102,38, 15,12,2,3,9,29,8,12,22,64,12,2,75,9,9,72, 37,61,116,13,14,254,204,41,118,94,15,11,1,2,15,54, 12,15,65,15,4,47,29,2,116,43,23,11,11,49,26,12, 42,21,25,47,27,13,44,27,8,8,29,12,3,27,8,8, 31,10,3,0,0,3,0,34,255,233,3,77,2,27,0,59, 0,76,0,85,0,0,37,51,6,7,6,7,34,39,38,39, 38,39,6,7,6,35,34,39,38,53,52,55,54,55,54,55, 54,61,1,52,35,34,7,6,7,35,54,55,54,51,50,23, 54,55,54,51,50,23,22,23,22,23,22,21,33,22,23,22, 51,50,37,53,6,7,34,7,6,7,6,21,20,23,22,51, 50,55,54,55,33,52,39,38,35,34,7,6,2,239,84,22, 100,51,50,107,59,6,6,4,12,93,91,16,16,103,43,22, 100,54,106,70,12,5,118,103,16,2,1,84,3,33,55,117, 128,47,49,94,15,15,111,66,15,10,5,4,21,254,126,1, 27,43,83,101,254,179,33,91,5,5,103,18,5,60,18,22, 61,50,49,80,1,38,65,34,45,85,41,20,159,118,44,18, 2,67,8,8,6,21,97,11,2,72,36,47,105,37,20,9, 6,26,10,17,22,78,77,7,9,72,37,61,82,69,11,2, 80,18,21,9,10,55,112,72,40,68,103,101,14,14,1,15, 48,14,18,61,18,5,38,38,176,93,44,23,75,36,0,1, 0,31,255,42,1,221,2,27,0,63,0,0,5,7,54,51, 50,23,22,21,20,7,6,35,34,39,38,39,55,23,22,51, 50,55,54,53,38,39,34,7,39,55,38,39,38,39,38,53, 52,55,54,51,50,23,22,23,22,23,35,38,47,1,34,7, 6,21,20,23,22,51,50,55,51,6,7,6,1,8,13,14, 14,67,10,2,66,25,32,44,60,9,12,21,9,55,34,38, 13,3,7,39,15,16,12,31,57,36,90,10,1,92,59,82, 106,58,4,4,29,6,84,13,84,27,94,35,16,79,29,39, 107,21,84,7,91,50,23,33,2,50,8,9,63,22,8,24, 4,5,41,4,29,29,7,9,34,3,8,7,71,11,26,64, 142,15,16,160,77,49,68,5,5,43,70,97,15,2,100,46, 64,137,45,17,127,122,53,28,0,3,0,40,255,233,2,1, 2,228,0,25,0,36,0,40,0,0,37,33,22,23,22,51, 50,55,51,6,7,6,35,34,39,38,53,52,55,54,51,50, 23,22,23,22,5,33,54,53,52,39,38,35,34,7,6,19, 23,35,39,2,1,254,126,1,27,43,83,102,35,84,22,104, 44,54,136,63,39,94,60,86,115,65,20,12,21,254,128,1, 38,1,59,38,48,85,41,20,119,96,60,149,234,72,40,68, 105,121,43,18,110,68,100,158,77,49,82,25,31,55,44,2, 4,80,45,29,75,36,1,133,148,148,0,3,0,40,255,233, 2,1,2,228,0,25,0,36,0,40,0,0,37,33,22,23, 22,51,50,55,51,6,7,6,35,34,39,38,53,52,55,54, 51,50,23,22,23,22,5,33,54,53,52,39,38,35,34,7, 6,19,51,7,35,2,1,254,126,1,27,43,83,102,35,84, 22,104,44,54,136,63,39,94,60,86,115,65,20,12,21,254, 128,1,38,1,59,38,48,85,41,20,175,113,149,60,234,72, 40,68,105,121,43,18,110,68,100,158,77,49,82,25,31,55, 44,2,4,80,45,29,75,36,1,133,148,0,0,3,0,40, 255,233,2,1,2,229,0,25,0,36,0,43,0,0,37,33, 22,23,22,51,50,55,51,6,7,6,35,34,39,38,53,52, 55,54,51,50,23,22,23,22,5,33,54,53,52,39,38,35, 34,7,6,19,51,23,35,39,7,35,2,1,254,126,1,27, 43,83,102,35,84,22,104,44,54,136,63,39,94,60,86,115, 65,20,12,21,254,128,1,38,1,59,38,48,85,41,20,106, 95,96,63,81,79,64,234,72,40,68,105,121,43,18,110,68, 100,158,77,49,82,25,31,55,44,2,4,80,45,29,75,36, 1,134,150,96,96,0,0,4,0,40,255,233,2,1,2,203, 0,25,0,36,0,40,0,44,0,0,37,33,22,23,22,51, 50,55,51,6,7,6,35,34,39,38,53,52,55,54,51,50, 23,22,23,22,5,33,54,53,52,39,38,35,34,7,6,19, 21,35,53,33,21,35,53,2,1,254,126,1,27,43,83,102, 35,84,22,104,44,54,136,63,39,94,60,86,115,65,20,12, 21,254,128,1,38,1,59,38,48,85,41,20,124,104,1,10, 104,234,72,40,68,105,121,43,18,110,68,100,158,77,49,82, 25,31,55,44,2,4,80,45,29,75,36,1,108,103,103,103, 103,0,0,2,255,251,0,0,0,204,2,228,0,3,0,7, 0,0,19,17,35,17,55,23,35,39,177,83,14,96,60,149, 2,12,253,244,2,12,216,148,148,0,0,2,0,65,0,0, 1,18,2,228,0,3,0,7,0,0,19,17,35,17,55,51, 7,35,177,83,67,113,149,60,2,12,253,244,2,12,216,148, 0,2,255,249,0,0,1,24,2,229,0,3,0,10,0,0, 19,17,35,17,39,51,23,35,39,7,35,177,83,5,95,96, 63,81,79,64,2,12,253,244,2,12,217,150,96,96,0,3, 0,3,0,0,1,13,2,196,0,3,0,7,0,11,0,0, 19,17,35,17,55,21,35,53,33,21,35,53,177,83,13,104, 1,10,104,2,12,253,244,2,12,184,103,103,103,103,0,2, 0,36,255,233,1,254,2,231,0,33,0,49,0,0,19,7, 39,55,38,39,55,22,23,55,23,7,22,31,1,22,23,20, 21,20,7,6,35,34,39,38,53,52,55,54,51,50,23,38, 7,34,7,6,21,20,23,22,51,50,55,54,53,52,39,38, 219,97,36,85,30,52,44,37,74,97,40,90,89,47,11,67, 5,121,50,66,155,56,26,104,52,62,24,39,39,5,93,38, 19,77,32,41,90,39,21,82,30,2,101,45,39,40,23,29, 44,16,47,45,37,41,68,65,17,102,113,11,12,193,63,26, 132,62,87,178,66,35,13,40,102,92,48,64,135,49,20,88, 47,66,145,46,16,0,0,2,0,70,0,0,1,231,2,205, 0,23,0,45,0,0,19,51,21,54,55,54,51,50,23,22, 21,17,35,17,52,39,38,35,34,7,6,21,17,35,1,51, 6,35,34,39,38,35,34,7,35,54,55,54,51,50,23,22, 23,22,51,50,70,77,54,76,20,24,105,42,19,83,59,21, 28,84,37,21,84,1,52,58,15,74,21,64,35,14,23,10, 58,16,59,5,6,23,42,2,3,39,24,25,2,12,88,85, 14,4,70,32,41,254,116,1,107,70,24,9,77,42,58,254, 223,2,205,104,25,13,37,93,9,1,17,1,1,18,0,3, 0,36,255,233,1,254,2,228,0,15,0,31,0,35,0,0, 1,50,23,22,21,20,7,6,35,34,39,38,53,52,55,54, 23,34,7,6,21,20,23,22,51,50,55,54,53,52,39,38, 3,23,35,39,1,16,152,57,29,102,56,79,144,60,33,105, 55,77,93,38,19,78,31,41,90,39,21,82,30,66,96,60, 149,2,27,129,65,91,167,71,39,119,67,95,174,70,37,77, 92,48,64,137,48,19,88,47,66,145,46,16,1,22,148,148, 0,3,0,36,255,233,1,254,2,228,0,15,0,31,0,35, 0,0,1,50,23,22,21,20,7,6,35,34,39,38,53,52, 55,54,23,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,3,51,7,35,1,16,152,57,29,102,56,79,144,60, 33,105,55,77,93,38,19,78,31,41,90,39,21,82,30,13, 113,149,60,2,27,129,65,91,167,71,39,119,67,95,174,70, 37,77,92,48,64,137,48,19,88,47,66,145,46,16,1,22, 148,0,0,3,0,36,255,233,1,254,2,229,0,15,0,31, 0,38,0,0,1,50,23,22,21,20,7,6,35,34,39,38, 53,52,55,54,23,34,7,6,21,20,23,22,51,50,55,54, 53,52,39,38,3,51,23,35,39,7,35,1,16,152,57,29, 102,56,79,144,60,33,105,55,77,93,38,19,78,31,41,90, 39,21,82,30,85,95,96,63,81,79,64,2,27,129,65,91, 167,71,39,119,67,95,174,70,37,77,92,48,64,137,48,19, 88,47,66,145,46,16,1,23,150,96,96,0,0,3,0,36, 255,233,1,254,2,205,0,15,0,31,0,53,0,0,1,50, 23,22,21,20,7,6,35,34,39,38,53,52,55,54,23,34, 7,6,21,20,23,22,51,50,55,54,53,52,39,38,19,51, 6,35,34,39,38,35,34,7,35,54,55,54,51,50,23,22, 23,22,51,50,1,16,152,57,29,102,56,79,144,60,33,105, 55,77,93,38,19,78,31,41,90,39,21,82,30,64,58,15, 74,21,64,35,14,23,10,58,16,59,5,6,23,42,2,3, 39,24,25,2,27,129,65,91,167,71,39,119,67,95,174,70, 37,77,92,48,64,137,48,19,88,47,66,145,46,16,0,255, 104,25,13,37,93,9,1,17,1,1,18,0,0,4,0,36, 255,233,1,254,2,203,0,15,0,31,0,35,0,39,0,0, 1,50,23,22,21,20,7,6,35,34,39,38,53,52,55,54, 23,34,7,6,21,20,23,22,51,50,55,54,53,52,39,38, 39,21,35,53,33,21,35,53,1,16,152,57,29,102,56,79, 144,60,33,105,55,77,93,38,19,78,31,41,90,39,21,82, 30,67,104,1,10,104,2,27,129,65,91,167,71,39,119,67, 95,174,70,37,77,92,48,64,137,48,19,88,47,66,145,46, 16,253,103,103,103,103,0,3,0,50,0,0,2,22,1,216, 0,3,0,7,0,11,0,0,1,21,33,53,5,21,35,53, 19,21,35,53,2,22,254,28,1,38,104,104,104,1,15,70, 70,167,104,104,1,112,104,104,0,3,0,18,255,226,2,17, 2,27,0,21,0,30,0,39,0,0,1,7,22,21,20,7, 6,35,34,39,7,39,55,38,53,52,55,54,51,50,23,55, 7,3,22,51,50,55,54,53,52,5,19,38,35,34,7,6, 21,20,2,17,63,44,106,55,75,103,60,61,32,66,48,106, 55,76,101,65,58,92,238,43,63,93,38,19,254,233,239,41, 69,93,38,19,1,255,71,73,109,176,70,35,62,69,28,74, 71,115,175,70,36,65,65,168,254,243,48,92,48,64,66,183, 1,13,52,92,48,64,68,0,0,2,0,65,255,233,1,226, 2,228,0,23,0,27,0,0,33,35,53,6,7,6,35,34, 39,38,53,17,51,17,20,23,22,51,50,55,54,53,17,51, 39,23,35,39,1,226,75,56,74,20,25,107,41,19,83,59, 22,27,85,38,20,83,239,96,60,149,73,79,13,4,70,32, 41,1,148,254,141,70,24,9,78,42,57,1,41,216,148,148, 0,2,0,65,255,233,1,226,2,228,0,23,0,27,0,0, 33,35,53,6,7,6,35,34,39,38,53,17,51,17,20,23, 22,51,50,55,54,53,17,51,39,51,7,35,1,226,75,56, 74,20,25,107,41,19,83,59,22,27,85,38,20,83,186,113, 149,60,73,79,13,4,70,32,41,1,148,254,141,70,24,9, 78,42,57,1,41,216,148,0,0,2,0,65,255,233,1,226, 2,229,0,23,0,30,0,0,33,35,53,6,7,6,35,34, 39,38,53,17,51,17,20,23,22,51,50,55,54,53,17,51, 39,51,23,35,39,7,35,1,226,75,56,74,20,25,107,41, 19,83,59,22,27,85,38,20,83,255,95,96,63,81,79,64, 73,79,13,4,70,32,41,1,148,254,141,70,24,9,78,42, 57,1,41,217,150,96,96,0,0,3,0,65,255,233,1,226, 2,203,0,23,0,27,0,31,0,0,33,35,53,6,7,6, 35,34,39,38,53,17,51,17,20,23,22,51,50,55,54,53, 17,51,39,21,35,53,33,21,35,53,1,226,75,56,74,20, 25,107,41,19,83,59,22,27,85,38,20,83,237,104,1,10, 104,73,79,13,4,70,32,41,1,148,254,141,70,24,9,78, 42,57,1,41,191,103,103,103,103,0,0,2,0,20,255,38, 1,222,2,228,0,19,0,23,0,0,1,51,3,6,7,6, 35,34,39,53,22,51,50,55,54,63,1,3,51,27,1,51, 7,35,1,132,90,233,22,35,34,44,31,25,27,17,45,18, 2,2,32,177,89,134,28,113,149,60,2,12,253,134,57,26, 25,13,75,6,40,5,6,83,2,14,254,104,2,112,148,0, 0,2,0,54,255,38,2,10,2,202,0,18,0,34,0,0, 23,17,51,21,54,55,50,23,22,21,20,7,6,7,6,35, 34,39,17,19,34,7,6,21,20,23,22,51,50,55,54,53, 52,39,38,54,83,60,101,120,61,43,89,39,52,21,23,97, 64,146,83,39,24,69,33,44,84,42,26,71,35,218,3,164, 255,78,2,105,73,108,154,75,33,10,4,78,254,239,2,167, 84,50,69,125,52,26,81,50,69,127,53,26,0,3,0,20, 255,38,1,222,2,203,0,19,0,23,0,27,0,0,1,51, 3,6,7,6,35,34,39,53,22,51,50,55,54,63,1,3, 51,19,3,21,35,53,33,21,35,53,1,132,90,233,22,35, 34,44,31,25,27,17,45,18,2,2,32,177,89,134,26,104, 1,10,104,2,12,253,134,57,26,25,13,75,6,40,5,6, 83,2,14,254,104,2,87,103,103,103,103,0,0,3,0,17, 0,0,2,141,3,132,0,7,0,10,0,14,0,0,37,33, 7,35,1,51,1,35,11,2,1,21,33,53,1,218,254,231, 77,99,1,4,120,1,0,104,101,112,120,1,0,254,238,219, 219,2,217,253,39,1,41,1,76,254,180,2,91,70,70,0, 0,3,0,42,255,233,2,23,2,189,0,45,0,62,0,66, 0,0,37,21,6,35,34,39,38,39,6,7,34,39,38,53, 52,55,54,55,54,55,54,55,54,61,1,52,39,38,35,34, 7,6,7,35,54,55,54,51,50,23,22,21,17,20,51,50, 39,53,6,7,6,7,6,7,6,21,20,23,22,51,50,55, 54,19,21,33,53,2,23,35,22,71,13,1,1,87,91,110, 43,19,92,36,94,16,22,73,11,3,81,17,19,103,17,2, 1,84,3,33,55,119,176,19,2,45,9,137,32,82,9,11, 106,16,4,67,16,20,72,52,32,23,254,238,49,63,9,63, 7,7,76,1,75,35,45,102,38,15,12,2,3,9,29,8, 12,22,64,12,2,75,9,9,72,37,61,116,13,14,254,204, 41,118,94,15,11,1,2,15,54,12,15,65,15,4,47,29, 2,63,70,70,0,3,0,17,0,0,2,141,3,163,0,7, 0,10,0,24,0,0,37,33,7,35,1,51,1,35,11,3, 51,22,51,50,55,54,53,51,6,35,34,39,38,1,218,254, 231,77,99,1,4,120,1,0,104,101,112,120,31,59,8,84, 77,13,1,59,11,141,86,42,20,219,219,2,217,253,39,1, 41,1,76,254,180,2,122,66,57,4,5,135,57,26,0,3, 0,42,255,233,2,23,2,220,0,45,0,62,0,76,0,0, 37,21,6,35,34,39,38,39,6,7,34,39,38,53,52,55, 54,55,54,55,54,55,54,61,1,52,39,38,35,34,7,6, 7,35,54,55,54,51,50,23,22,21,17,20,51,50,39,53, 6,7,6,7,6,7,6,21,20,23,22,51,50,55,54,1, 51,22,51,50,55,54,53,51,6,35,34,39,38,2,23,35, 22,71,13,1,1,87,91,110,43,19,92,36,94,16,22,73, 11,3,81,17,19,103,17,2,1,84,3,33,55,119,176,19, 2,45,9,137,32,82,9,11,106,16,4,67,16,20,72,52, 32,254,249,59,8,84,77,13,1,59,11,141,86,42,20,49, 63,9,63,7,7,76,1,75,35,45,102,38,15,12,2,3, 9,29,8,12,22,64,12,2,75,9,9,72,37,61,116,13, 14,254,204,41,118,94,15,11,1,2,15,54,12,15,65,15, 4,47,29,2,94,66,57,4,5,135,57,28,0,2,0,17, 255,51,2,180,2,217,0,24,0,27,0,0,37,33,7,35, 1,51,1,6,21,20,51,50,55,21,6,35,34,39,38,53, 52,55,54,55,35,11,2,1,218,254,231,77,99,1,4,120, 1,0,96,72,37,26,48,28,33,36,63,70,14,17,36,101, 112,120,219,219,2,217,253,39,46,59,55,10,45,10,13,24, 57,58,38,7,8,1,41,1,76,254,180,0,0,2,0,43, 255,51,2,84,2,27,0,56,0,73,0,0,37,21,6,7, 20,51,50,55,21,6,35,34,39,38,39,52,55,54,55,38, 39,6,35,34,39,38,53,52,55,54,55,54,55,54,55,54, 61,1,52,39,34,7,6,7,35,54,55,54,51,50,23,22, 21,17,20,51,50,39,53,6,7,6,7,6,7,6,21,20, 23,22,51,50,55,54,2,24,72,4,72,38,26,42,29,31, 43,61,2,47,9,12,57,6,81,97,110,43,19,93,35,93, 17,23,70,12,4,117,104,16,1,1,84,3,32,56,118,176, 19,2,45,9,138,32,82,9,11,106,16,4,67,16,20,72, 52,32,49,63,35,56,55,10,45,10,13,20,60,46,30,7, 6,10,67,77,75,35,45,101,39,15,12,2,3,9,26,10, 13,22,77,1,77,7,9,71,38,61,116,13,14,254,204,41, 118,94,15,11,1,2,15,54,12,15,65,15,4,47,29,0, 0,2,0,48,255,233,2,165,3,171,0,31,0,35,0,0, 1,35,38,39,38,39,34,7,6,21,20,23,22,51,50,55, 54,55,54,55,51,2,33,34,39,38,53,52,55,54,51,50, 39,51,7,35,2,150,95,15,38,54,90,128,61,40,95,59, 83,109,51,6,4,22,11,96,33,254,245,141,82,106,102,82, 149,238,213,113,149,60,1,247,75,35,44,2,115,75,112,170, 79,49,77,8,9,42,71,254,223,85,109,185,183,111,91,198, 148,0,0,2,0,31,255,233,1,221,2,228,0,32,0,36, 0,0,1,35,38,47,1,34,7,6,21,20,23,22,51,50, 55,51,6,7,6,35,34,39,38,53,52,55,54,51,50,23, 22,23,22,3,51,7,35,1,215,84,13,84,27,94,35,16, 79,29,39,107,21,84,11,104,43,56,129,62,41,92,59,82, 106,58,4,4,29,167,113,149,60,1,92,97,15,2,100,46, 63,137,45,17,126,137,46,20,105,70,101,160,77,49,68,5, 5,43,1,66,148,0,255,255,0,48,255,233,2,165,3,151, 16,39,1,239,0,144,0,178,16,6,0,38,0,0,255,255, 0,31,255,233,1,221,2,202,16,39,1,239,0,131,255,229, 16,6,0,70,0,0,255,255,0,48,255,233,2,165,3,105, 16,39,1,244,0,218,0,157,16,6,0,38,0,0,255,255, 0,31,255,233,1,221,2,156,16,38,1,244,92,208,16,6, 0,70,0,0,0,2,0,48,255,233,2,165,3,172,0,31, 0,38,0,0,1,35,38,39,38,39,34,7,6,21,20,23, 22,51,50,55,54,55,54,55,51,2,33,34,39,38,53,52, 55,54,51,50,39,35,39,51,23,55,51,2,150,95,15,38, 54,90,128,61,40,95,59,83,109,51,6,4,22,11,96,33, 254,245,141,82,106,102,82,149,238,191,95,96,63,81,79,64, 1,247,75,35,44,2,115,75,112,170,79,49,77,8,9,42, 71,254,223,85,109,185,183,111,91,49,150,96,96,0,0,2, 0,31,255,233,1,221,2,229,0,32,0,39,0,0,1,35, 38,47,1,34,7,6,21,20,23,22,51,50,55,51,6,7, 6,35,34,39,38,53,52,55,54,51,50,23,22,23,22,39, 35,39,51,23,55,51,1,215,84,13,84,27,94,35,16,79, 29,39,107,21,84,11,104,43,56,129,62,41,92,59,82,106, 58,4,4,29,152,95,96,63,81,79,64,1,92,97,15,2, 100,46,63,137,45,17,126,137,46,20,105,70,101,160,77,49, 68,5,5,43,173,150,96,96,0,3,0,89,0,0,2,155, 3,172,0,11,0,22,0,29,0,0,51,17,33,50,31,1, 22,21,20,7,6,35,39,51,50,55,54,53,52,39,38,43, 1,55,35,39,51,23,55,51,89,1,25,163,79,22,33,116, 73,108,188,172,174,37,9,168,25,27,172,204,95,96,63,81, 79,64,2,217,132,43,81,108,209,95,61,82,181,45,56,246, 32,5,143,150,96,96,0,3,0,26,255,233,2,136,2,217, 0,18,0,36,0,50,0,0,1,17,35,53,6,7,6,35, 34,39,38,53,52,55,54,51,50,23,17,3,34,7,6,7, 6,21,20,23,22,51,50,55,54,53,52,39,38,19,51,21, 20,7,6,43,1,53,50,53,52,53,35,1,239,74,58,86, 11,12,130,60,38,89,57,79,108,53,147,85,41,20,5,1, 70,36,47,83,39,24,72,33,241,100,48,20,24,8,55,55, 2,217,253,39,69,83,8,1,112,71,103,154,75,47,81,1, 15,254,244,82,38,51,16,16,122,54,27,82,50,69,131,51, 23,1,12,103,76,32,13,38,78,4,4,0,0,2,0,20, 0,0,2,155,2,217,0,15,0,30,0,0,19,35,53,51, 17,33,50,31,1,22,21,20,7,6,35,33,19,17,51,50, 55,54,53,52,39,38,43,1,21,51,21,89,69,69,1,26, 163,78,22,33,117,73,106,254,230,93,173,178,34,7,161,27, 31,173,171,1,83,67,1,67,132,43,81,108,211,95,59,1, 83,254,255,191,42,50,239,37,6,241,67,0,0,2,0,26, 255,233,2,45,2,217,0,24,0,40,0,0,1,51,21,35, 17,35,53,6,35,34,39,38,53,52,55,54,51,50,23,53, 35,53,51,53,51,3,34,7,6,21,20,23,22,51,50,55, 54,53,52,39,38,1,238,63,63,74,70,98,118,62,46,89, 56,79,97,64,150,150,83,229,85,41,26,68,36,48,84,39, 23,72,32,2,141,53,253,168,59,82,101,75,111,153,75,47, 78,139,53,76,254,240,81,49,69,118,53,28,82,49,66,128, 50,23,0,2,0,90,0,0,2,101,3,132,0,11,0,15, 0,0,19,21,33,21,33,17,33,21,33,21,33,21,3,21, 33,53,183,1,174,253,245,1,249,254,100,1,141,98,254,238, 1,76,250,82,2,217,82,233,82,2,56,70,70,0,0,3, 0,40,255,233,2,1,2,189,0,25,0,36,0,40,0,0, 37,33,22,23,22,51,50,55,51,6,7,6,35,34,39,38, 53,52,55,54,51,50,23,22,23,22,5,33,54,53,52,39, 38,35,34,7,6,1,21,33,53,2,1,254,126,1,27,43, 83,102,35,84,22,104,44,54,136,63,39,94,60,86,115,65, 20,12,21,254,128,1,38,1,59,38,48,85,41,20,1,33, 254,238,234,72,40,68,105,121,43,18,110,68,100,158,77,49, 82,25,31,55,44,2,4,80,45,29,75,36,1,94,70,70, 255,255,0,90,0,0,2,101,3,136,16,39,1,243,0,177, 0,172,16,6,0,40,0,0,255,255,0,40,255,233,2,1, 2,187,16,38,1,243,114,223,16,6,0,72,0,0,0,2, 0,90,0,0,2,101,3,147,0,11,0,15,0,0,19,21, 33,21,33,17,33,21,33,21,33,21,3,21,35,53,183,1, 174,253,245,1,249,254,100,1,141,183,104,1,76,250,82,2, 217,82,233,82,2,71,104,104,0,3,0,40,255,233,2,1, 2,204,0,25,0,36,0,40,0,0,37,33,22,23,22,51, 50,55,51,6,7,6,35,34,39,38,53,52,55,54,51,50, 23,22,23,22,5,33,54,53,52,39,38,35,34,7,6,19, 21,35,53,2,1,254,126,1,27,43,83,102,35,84,22,104, 44,54,136,63,39,94,60,86,115,65,20,12,21,254,128,1, 38,1,59,38,48,85,41,20,204,104,234,72,40,68,105,121, 43,18,110,68,100,158,77,49,82,25,31,55,44,2,4,80, 45,29,75,36,1,109,104,104,0,1,0,90,255,51,2,140, 2,217,0,28,0,0,19,21,33,21,6,21,20,51,50,55, 21,6,35,34,39,38,53,52,55,54,55,33,17,33,21,33, 21,33,21,183,1,174,96,72,37,26,46,29,33,37,63,76, 11,14,254,57,1,249,254,100,1,141,1,76,250,82,45,61, 54,10,45,10,13,24,57,61,38,6,6,2,217,82,233,82, 0,2,0,40,255,52,2,2,2,27,0,48,0,58,0,0, 37,33,22,23,22,51,50,55,51,6,7,6,7,6,21,20, 23,22,51,50,55,21,6,35,34,39,38,53,52,55,54,55, 6,35,34,39,38,53,52,55,54,51,50,23,22,23,22,21, 20,39,53,52,39,38,35,34,7,6,7,2,1,254,126,1, 27,45,81,101,37,84,14,67,63,7,1,49,11,12,38,26, 41,28,96,32,11,28,10,30,40,28,142,61,36,95,60,85, 113,65,20,14,21,89,59,38,48,85,41,20,3,234,70,42, 68,105,77,67,65,41,9,9,41,8,2,10,45,9,51,17, 20,37,31,10,23,8,114,67,96,159,77,49,79,25,34,54, 99,7,61,6,80,45,29,75,36,49,0,2,0,90,0,0, 2,101,3,172,0,11,0,18,0,0,19,21,33,21,33,17, 33,21,33,21,33,21,3,35,39,51,23,55,51,183,1,174, 253,245,1,249,254,100,1,141,188,95,96,63,81,79,64,1, 76,250,82,2,217,82,233,82,1,202,150,96,96,0,0,3, 0,40,255,233,2,1,2,229,0,25,0,36,0,43,0,0, 37,33,22,23,22,51,50,55,51,6,7,6,35,34,39,38, 53,52,55,54,51,50,23,22,23,22,5,33,54,53,52,39, 38,35,34,7,6,55,35,39,51,23,55,51,2,1,254,126, 1,27,43,83,102,35,84,22,104,44,54,136,63,39,94,60, 86,115,65,20,12,21,254,128,1,38,1,59,38,48,85,41, 20,201,95,96,63,81,79,64,234,72,40,68,105,121,43,18, 110,68,100,158,77,49,82,25,31,55,44,2,4,80,45,29, 75,36,240,150,96,96,255,255,0,44,255,233,2,197,3,152, 16,103,1,239,0,240,1,26,64,0,55,10,16,6,0,42, 0,0,255,255,0,29,255,38,1,233,2,202,16,38,1,239, 88,229,16,6,0,74,0,0,0,2,0,44,255,233,2,197, 3,163,0,41,0,55,0,0,1,17,35,39,6,35,34,39, 38,53,52,55,54,55,54,51,50,23,22,23,35,38,39,38, 35,34,7,6,21,20,23,22,23,22,23,50,55,54,61,1, 35,53,3,51,22,51,50,55,54,53,51,6,35,34,39,38, 2,197,59,23,104,145,153,94,87,102,14,16,85,133,179,81, 33,12,95,21,95,42,53,132,71,53,61,8,8,72,112,114, 66,49,222,156,59,8,84,77,13,1,59,11,141,86,42,20, 1,129,254,123,97,116,114,104,162,176,110,15,13,70,118,49, 66,98,36,17,104,78,115,126,84,10,9,72,2,80,60,84, 20,82,2,34,66,57,4,5,135,57,26,0,0,3,0,29, 255,38,1,233,2,220,0,39,0,55,0,69,0,0,1,51, 17,20,7,6,7,6,7,6,35,34,39,38,39,51,22,23, 22,51,50,55,54,61,1,6,15,1,34,39,38,39,38,53, 52,55,54,51,50,23,39,34,7,6,21,20,23,22,51,50, 55,54,53,52,39,38,3,51,22,51,50,55,54,53,51,6, 35,34,39,38,1,156,77,41,7,7,48,109,11,11,138,50, 17,4,85,6,26,36,59,81,35,30,59,73,27,83,61,3, 3,66,85,57,81,98,62,151,88,37,20,78,29,39,89,35, 18,82,27,163,59,7,85,77,13,1,59,11,141,86,42,20, 2,12,254,74,154,64,10,9,60,6,1,88,31,39,39,21, 28,49,41,102,27,82,10,2,64,3,3,77,129,153,79,54, 91,14,90,48,66,139,47,18,92,46,63,150,43,14,1,14, 66,57,4,5,135,57,28,0,255,255,0,44,255,233,2,197, 3,105,16,39,1,244,0,229,0,157,16,6,0,42,0,0, 255,255,0,29,255,38,1,233,2,156,16,38,1,244,88,208, 16,6,0,74,0,0,0,2,0,44,254,227,2,197,2,229, 0,41,0,54,0,0,1,17,35,39,6,35,34,39,38,53, 52,55,54,55,54,51,50,23,22,23,35,38,39,38,35,34, 7,6,21,20,23,22,23,22,23,50,55,54,61,1,35,53, 3,51,21,20,7,6,35,53,50,53,52,53,35,2,197,59, 23,104,145,153,94,87,102,14,16,85,133,179,81,33,12,95, 21,95,42,53,132,71,53,61,8,8,72,112,114,66,49,222, 68,100,59,17,24,55,55,1,129,254,123,97,116,114,104,162, 176,110,15,13,70,118,49,66,98,36,17,104,78,115,126,84, 10,9,72,2,80,60,84,20,82,254,67,103,88,25,8,38, 78,4,4,0,0,3,0,29,255,38,1,233,3,49,0,39, 0,55,0,69,0,0,1,51,17,20,7,6,7,6,7,6, 35,34,39,38,39,51,22,23,22,51,50,55,54,61,1,6, 15,1,34,39,38,39,38,53,52,55,54,51,50,23,39,34, 7,6,21,20,23,22,51,50,55,54,53,52,39,38,55,35, 53,52,55,54,51,21,7,6,21,20,21,51,1,156,77,41, 7,7,48,109,11,11,138,50,17,4,85,6,26,36,59,81, 35,30,59,73,27,83,61,3,3,66,85,57,81,98,62,151, 88,37,20,78,29,39,89,35,18,82,27,37,100,59,17,24, 2,53,55,2,12,254,74,154,64,10,9,60,6,1,88,31, 39,39,21,28,49,41,102,27,82,10,2,64,3,3,77,129, 153,79,54,91,14,90,48,66,139,47,18,92,46,63,150,43, 14,130,103,88,25,8,38,1,1,75,4,5,255,255,0,83, 0,0,2,132,3,151,16,39,1,239,0,200,0,178,16,6, 0,43,0,0,255,255,255,224,0,0,1,230,3,151,16,39, 1,239,255,204,0,178,16,6,0,75,0,0,0,2,0,39, 0,0,2,176,2,217,0,3,0,23,0,0,19,21,33,53, 37,53,51,21,33,53,51,21,51,21,35,17,35,17,33,17, 35,17,35,53,176,1,119,254,44,93,1,119,93,44,44,93, 254,138,94,44,1,248,90,90,72,153,153,153,153,70,254,6, 1,76,254,180,1,250,70,0,0,1,0,7,0,0,1,230, 2,217,0,31,0,0,19,51,21,35,21,54,55,54,51,50, 23,22,21,17,35,17,52,39,38,35,34,7,6,21,17,35, 17,35,53,51,53,51,153,150,150,54,66,21,27,110,39,16, 83,34,32,42,84,37,21,83,63,63,83,2,141,53,148,70, 13,4,74,30,39,254,116,1,107,55,24,24,77,42,58,254, 223,2,88,53,76,0,255,255,255,246,0,0,1,48,3,105, 16,39,1,247,255,241,0,156,16,6,0,44,0,0,255,255, 255,235,0,0,1,37,2,156,16,38,1,247,230,207,16,6, 0,243,0,0,0,2,0,20,0,0,1,18,3,132,0,3, 0,7,0,0,19,17,35,17,55,21,35,53,194,94,174,254, 2,217,253,39,2,217,171,70,70,0,0,2,255,240,0,0, 0,231,2,189,0,3,0,7,0,0,19,17,35,17,55,21, 35,53,149,83,165,247,2,12,253,244,2,12,177,70,70,0, 255,255,255,253,0,0,1,42,3,136,16,39,1,243,255,238, 0,172,16,6,0,44,0,0,255,255,255,241,0,0,1,30, 2,187,16,38,1,243,226,223,16,6,0,243,0,0,0,1, 0,66,255,52,0,234,2,217,0,22,0,0,19,17,6,21, 20,23,22,51,50,55,21,6,35,34,39,38,53,52,55,54, 55,35,17,194,56,34,8,9,18,27,32,27,73,26,10,51, 11,15,43,2,217,253,39,51,56,40,10,2,9,45,9,49, 17,22,52,44,9,11,2,217,0,2,0,25,255,52,0,190, 2,217,0,24,0,28,0,0,19,17,6,7,6,21,20,23, 22,51,50,55,21,6,35,34,39,38,53,52,55,54,55,35, 17,55,21,35,53,150,42,9,2,34,7,9,16,27,31,27, 70,27,10,45,12,17,32,83,84,2,12,253,244,38,49,9, 7,42,11,3,9,45,9,47,19,22,48,43,11,14,2,12, 205,105,105,0,0,2,0,96,0,0,0,200,3,147,0,3, 0,7,0,0,19,17,35,17,55,21,35,53,195,94,99,104, 2,217,253,39,2,217,186,104,104,0,0,1,0,94,0,0, 0,178,2,12,0,3,0,0,19,17,35,17,178,84,2,12, 253,244,2,12,255,255,0,100,255,233,2,114,2,217,16,39, 0,45,0,200,0,0,16,6,0,44,0,0,255,255,0,66, 255,38,1,49,2,217,16,39,0,77,0,152,0,0,16,6, 0,76,0,0,255,255,0,17,255,233,2,11,3,151,16,39, 1,239,0,216,0,178,16,6,0,45,0,0,0,2,255,224, 255,38,0,255,3,17,0,15,0,22,0,0,19,51,17,20, 7,34,35,34,39,53,22,51,50,55,54,53,3,51,23,35, 39,7,35,70,83,128,7,8,13,15,17,3,52,11,5,6, 95,96,63,81,79,64,2,12,253,135,103,6,3,71,1,32, 14,23,3,93,150,96,96,0,0,2,0,79,254,227,2,146, 2,217,0,11,0,24,0,0,19,21,35,17,51,17,1,51, 9,1,35,1,19,51,21,20,7,6,35,53,50,53,52,53, 35,172,93,93,1,107,120,254,215,1,44,110,254,255,8,100, 59,17,24,55,55,0,255,255,2,217,254,143,1,113,254,215, 254,80,1,118,254,78,103,88,25,8,38,78,4,4,0,2, 0,58,254,227,1,246,2,217,0,11,0,24,0,0,19,17, 55,51,7,19,35,3,7,21,35,17,19,51,21,20,7,6, 35,53,50,53,52,53,35,141,222,107,182,214,103,177,81,83, 159,100,59,17,24,55,55,2,217,254,85,222,181,254,169,1, 28,80,204,2,217,252,235,103,88,25,8,38,78,4,4,0, 0,1,0,58,0,0,1,246,2,12,0,10,0,0,19,21, 55,51,9,1,35,37,21,35,17,141,222,107,254,240,1,48, 103,254,254,83,2,12,222,222,254,252,254,248,216,216,2,12, 0,2,0,70,0,0,2,21,3,171,0,5,0,9,0,0, 19,17,33,21,33,17,55,51,7,35,173,1,104,254,59,86, 113,149,60,2,217,253,121,82,2,217,210,148,0,2,0,63, 0,0,1,16,3,171,0,3,0,7,0,0,19,17,35,17, 55,51,7,35,152,84,91,113,149,60,2,217,253,39,2,217, 210,148,0,2,0,80,254,227,2,21,2,217,0,5,0,18, 0,0,19,17,33,21,33,17,19,51,21,20,7,6,35,53, 50,53,52,53,35,173,1,104,254,59,177,100,59,17,24,55, 55,2,217,253,121,82,2,217,252,235,103,88,25,8,38,78, 4,4,0,2,0,63,254,227,0,163,2,217,0,3,0,16, 0,0,19,17,35,17,3,51,21,20,7,6,35,53,50,53, 52,53,35,152,84,5,100,59,17,24,55,55,2,217,253,39, 2,217,252,235,103,88,25,8,38,78,4,4,0,2,0,80, 0,0,2,21,2,217,0,5,0,19,0,0,19,17,33,21, 33,17,59,1,21,20,7,6,43,1,53,50,53,52,53,35, 173,1,104,254,59,193,100,48,20,24,8,55,55,2,217,253, 121,82,2,217,103,76,32,13,38,78,4,4,0,2,0,68, 0,0,1,49,2,217,0,3,0,17,0,0,19,17,35,17, 59,1,21,20,7,6,43,1,53,50,53,52,53,35,152,84, 137,100,48,20,24,8,55,55,2,217,253,39,2,217,103,76, 32,13,38,78,4,4,255,255,0,80,0,0,2,21,2,217, 16,39,0,121,1,0,0,0,16,6,0,47,0,0,255,255, 0,68,0,0,1,177,2,217,16,39,0,121,0,222,0,0, 16,6,0,79,0,0,0,1,0,0,0,0,2,40,2,217, 0,13,0,0,19,55,21,7,21,33,21,33,17,7,53,55, 17,51,173,171,171,1,123,254,40,80,80,93,1,150,121,76, 122,247,82,1,24,57,77,56,1,117,0,1,0,0,0,0, 0,212,2,217,0,11,0,0,19,55,21,7,17,35,17,7, 53,55,17,51,146,66,66,83,63,63,83,1,165,51,64,51, 254,155,1,57,50,64,50,1,96,0,0,2,0,76,0,0, 2,134,3,171,0,9,0,13,0,0,1,17,35,1,17,35, 17,51,1,17,39,51,7,35,2,134,105,254,135,88,101,1, 125,169,113,149,60,2,217,253,39,2,79,253,177,2,217,253, 172,2,84,210,148,0,0,2,0,70,0,0,1,231,2,228, 0,23,0,27,0,0,19,51,21,54,55,54,51,50,23,22, 21,17,35,17,52,39,38,35,34,7,6,21,17,35,19,51, 7,35,70,77,54,76,20,24,105,42,19,83,59,21,28,84, 37,21,84,240,113,149,60,2,12,88,85,14,4,70,32,41, 254,116,1,107,70,24,9,77,42,58,254,223,2,228,148,0, 0,2,0,76,254,227,2,134,2,217,0,9,0,22,0,0, 1,17,35,1,17,35,17,51,1,17,1,51,21,20,7,6, 35,53,50,53,52,53,35,2,134,105,254,135,88,101,1,125, 254,252,100,59,17,24,55,55,2,217,253,39,2,79,253,177, 2,217,253,172,2,84,252,235,103,88,25,8,38,78,4,4, 0,2,0,70,254,227,1,231,2,27,0,23,0,36,0,0, 19,51,21,54,55,54,51,50,23,22,21,17,35,17,52,39, 38,35,34,7,6,21,17,35,23,51,21,20,7,6,35,53, 50,53,52,53,35,70,77,54,76,20,24,105,42,19,83,59, 21,28,84,37,21,84,159,100,59,17,24,55,55,2,12,88, 85,14,4,70,32,41,254,116,1,107,70,24,9,77,42,58, 254,223,60,103,88,25,8,38,78,4,4,0,0,2,0,76, 0,0,2,134,3,172,0,9,0,16,0,0,1,17,35,1, 17,35,17,51,1,17,39,35,39,51,23,55,51,2,134,105, 254,135,88,101,1,125,149,95,96,63,81,79,64,2,217,253, 39,2,79,253,177,2,217,253,172,2,84,61,150,96,96,0, 0,2,0,70,0,0,1,231,2,229,0,23,0,30,0,0, 19,51,21,54,55,54,51,50,23,22,21,17,35,17,52,39, 38,35,34,7,6,21,17,35,1,35,39,51,23,55,51,70, 77,54,76,20,24,105,42,19,83,59,21,28,84,37,21,84, 1,0,95,96,63,81,79,64,2,12,88,85,14,4,70,32, 41,254,116,1,107,70,24,9,77,42,58,254,223,2,79,150, 96,96,0,1,0,70,0,0,1,231,2,27,0,23,0,0, 19,51,21,54,55,54,51,50,23,22,21,17,35,17,52,39, 38,35,34,7,6,21,17,35,70,77,54,76,20,24,105,42, 19,83,59,21,28,84,37,21,84,2,12,88,85,14,4,70, 32,41,254,116,1,107,70,24,9,77,42,58,254,223,0,2, 0,76,255,38,2,134,2,217,0,15,0,25,0,0,37,51, 17,20,7,6,35,34,39,53,22,51,50,55,54,53,19,17, 35,1,17,35,17,51,1,17,2,46,88,99,22,27,13,15, 17,3,52,11,5,88,105,254,135,88,101,1,125,224,254,179, 87,18,4,3,71,1,32,14,23,3,37,253,39,2,79,253, 177,2,217,253,172,2,84,0,0,1,0,70,255,38,1,231, 2,27,0,35,0,0,1,17,20,7,34,35,34,39,53,22, 51,50,55,54,53,17,52,39,38,35,34,7,6,21,17,35, 17,51,21,54,55,54,51,50,23,22,1,231,128,7,8,13, 15,17,3,52,11,5,59,21,28,84,37,21,84,77,54,76, 20,24,105,42,19,1,140,254,7,103,6,3,71,1,32,14, 23,1,183,70,24,9,77,42,58,254,223,2,12,88,85,14, 4,70,32,0,0,3,0,38,255,233,2,230,3,132,0,18, 0,34,0,38,0,0,1,50,31,1,22,21,20,7,6,7, 6,35,34,39,38,53,52,55,54,23,34,7,6,21,20,23, 22,51,50,55,54,53,52,39,38,55,21,33,53,1,133,174, 97,26,56,82,20,24,91,135,167,98,87,111,95,145,130,72, 56,95,67,97,129,72,58,98,66,42,254,238,2,229,123,38, 96,131,148,105,26,20,77,117,104,161,184,107,91,82,102,80, 118,158,83,59,100,79,117,165,83,56,241,70,70,0,0,3, 0,36,255,233,1,254,2,189,0,15,0,31,0,35,0,0, 1,50,23,22,21,20,7,6,35,34,39,38,53,52,55,54, 23,34,7,6,21,20,23,22,51,50,55,54,53,52,39,38, 55,21,33,53,1,16,152,57,29,102,56,79,144,60,33,105, 55,77,93,38,19,78,31,41,90,39,21,82,30,99,254,238, 2,27,129,65,91,167,71,39,119,67,95,174,70,37,77,92, 48,64,137,48,19,88,47,66,145,46,16,239,70,70,255,255, 0,38,255,233,2,230,3,136,16,39,1,243,0,224,0,172, 16,6,0,50,0,0,255,255,0,36,255,233,1,254,2,187, 16,38,1,243,108,223,16,6,0,82,0,0,0,4,0,38, 255,233,2,230,3,171,0,18,0,34,0,38,0,42,0,0, 1,50,31,1,22,21,20,7,6,7,6,35,34,39,38,53, 52,55,54,23,34,7,6,21,20,23,22,51,50,55,54,53, 52,39,38,3,51,7,35,37,51,7,35,1,133,174,97,26, 56,82,20,24,91,135,167,98,87,111,95,145,130,72,56,95, 67,97,129,72,58,98,66,121,113,149,60,1,14,113,149,60, 2,229,123,38,96,131,148,105,26,20,77,117,104,161,184,107, 91,82,102,80,118,158,83,59,100,79,117,165,83,56,1,24, 150,150,150,0,0,4,0,36,255,233,2,14,2,228,0,15, 0,31,0,35,0,39,0,0,1,50,23,22,21,20,7,6, 35,34,39,38,53,52,55,54,23,34,7,6,21,20,23,22, 51,50,55,54,53,52,39,38,3,51,7,35,37,51,7,35, 1,16,152,57,29,102,56,79,144,60,33,105,55,77,93,38, 19,78,31,41,90,39,21,82,30,72,113,149,60,1,14,113, 149,60,2,27,129,65,91,167,71,39,119,67,95,174,70,37, 77,92,48,64,137,48,19,88,47,66,145,46,16,1,22,150, 150,150,0,2,0,43,255,236,3,191,2,229,0,26,0,39, 0,0,1,21,33,21,33,53,6,7,34,39,38,53,52,55, 54,55,54,51,50,23,53,33,21,33,21,33,21,5,17,38, 35,34,7,6,21,20,23,22,51,50,2,106,1,85,254,78, 70,114,131,80,87,103,69,105,11,11,121,62,1,173,254,176, 1,72,254,91,59,124,101,54,51,51,54,100,125,1,71,245, 82,74,92,2,92,100,184,206,101,69,8,1,88,76,82,238, 82,145,1,101,120,78,77,144,144,76,78,0,0,3,0,40, 255,233,3,131,2,27,0,37,0,57,0,66,0,0,37,51, 6,7,6,35,34,39,38,39,6,35,34,39,38,53,52,55, 54,51,50,23,54,55,54,51,50,23,22,23,22,21,33,22, 23,22,51,50,1,34,7,6,7,20,21,20,23,22,51,50, 55,54,53,52,39,38,39,38,23,33,52,39,38,35,34,7, 6,3,36,84,22,102,44,55,124,64,3,3,63,131,155,56, 26,122,49,66,135,61,54,103,18,18,115,65,20,12,21,254, 126,1,27,43,83,102,254,20,93,38,16,3,79,31,40,91, 39,20,81,17,19,16,221,1,38,65,34,45,85,41,20,159, 120,43,19,93,5,5,103,133,62,87,192,63,25,106,88,15, 3,82,25,31,55,112,72,40,68,1,152,93,39,53,9,9, 139,47,19,89,48,65,143,46,9,4,4,160,93,44,23,75, 36,0,0,3,0,93,0,0,2,167,3,171,0,29,0,40, 0,44,0,0,19,17,35,17,33,50,23,22,21,20,7,6, 7,22,23,22,23,22,23,22,23,21,35,38,53,55,52,39, 38,35,39,51,50,55,54,53,52,39,38,43,1,19,51,7, 35,186,93,1,80,170,41,11,72,19,24,62,19,17,1,2, 17,9,16,113,21,1,80,18,22,240,225,121,18,4,38,32, 73,225,197,113,149,60,1,58,254,198,2,217,120,33,42,98, 51,13,12,27,40,37,86,96,27,13,11,23,48,71,65,109, 17,4,82,86,17,22,66,32,28,1,36,148,0,2,0,69, 0,0,1,75,2,228,0,17,0,21,0,0,19,51,21,54, 55,54,51,50,23,21,6,7,6,7,6,21,17,35,19,51, 7,35,69,77,58,58,13,14,11,21,72,31,3,3,59,84, 149,113,149,60,2,12,95,93,14,3,3,85,1,21,2,2, 43,110,254,240,2,228,148,0,0,3,0,93,254,227,2,167, 2,217,0,29,0,40,0,53,0,0,19,17,35,17,33,50, 23,22,21,20,7,6,7,22,23,22,23,22,23,22,23,21, 35,38,53,55,52,39,38,35,39,51,50,55,54,53,52,39, 38,43,1,19,51,21,20,7,6,35,53,50,53,52,53,35, 186,93,1,80,170,41,11,72,19,24,62,19,17,1,2,17, 9,16,113,21,1,80,18,22,240,225,121,18,4,38,32,73, 225,133,100,59,17,24,55,55,1,58,254,198,2,217,120,33, 42,98,51,13,12,27,40,37,86,96,27,13,11,23,48,71, 65,109,17,4,82,86,17,22,66,32,28,253,61,103,88,25, 8,38,78,4,4,0,0,2,0,65,254,227,1,65,2,27, 0,17,0,30,0,0,19,51,21,54,55,54,51,50,23,21, 6,7,6,7,6,21,17,35,7,51,21,20,7,6,35,53, 50,53,52,53,35,69,77,58,58,13,14,11,21,72,31,3, 3,59,84,4,100,59,17,24,55,55,2,12,95,93,14,3, 3,85,1,21,2,2,43,110,254,240,60,103,88,25,8,38, 78,4,4,0,0,3,0,93,0,0,2,167,3,172,0,29, 0,40,0,47,0,0,19,17,35,17,33,50,23,22,21,20, 7,6,7,22,23,22,23,22,23,22,23,21,35,38,53,55, 52,39,38,35,39,51,50,55,54,53,52,39,38,43,1,55, 35,39,51,23,55,51,186,93,1,80,170,41,11,72,19,24, 62,19,17,1,2,17,9,16,113,21,1,80,18,22,240,225, 121,18,4,38,32,73,225,218,95,96,63,81,79,64,1,58, 254,198,2,217,120,33,42,98,51,13,12,27,40,37,86,96, 27,13,11,23,48,71,65,109,17,4,82,86,17,22,66,32, 28,143,150,96,96,0,0,2,0,48,0,0,1,79,2,229, 0,17,0,24,0,0,19,51,21,54,55,54,51,50,23,21, 6,7,6,7,6,21,17,35,19,35,39,51,23,55,51,69, 77,58,58,13,14,11,21,72,31,3,3,59,84,170,95,96, 63,81,79,64,2,12,95,93,14,3,3,85,1,21,2,2, 43,110,254,240,2,79,150,96,96,0,0,2,0,48,255,233, 2,109,3,171,0,54,0,58,0,0,1,35,38,39,38,35, 34,15,1,6,21,20,23,22,31,1,22,23,22,21,20,7, 6,7,6,35,34,39,38,39,51,23,22,23,22,51,50,55, 54,55,54,53,52,47,2,38,53,52,55,54,51,50,23,22, 3,51,7,35,2,84,88,1,109,32,40,104,41,12,6,54, 25,41,183,120,28,7,58,11,11,73,132,169,76,42,1,88, 3,7,28,51,117,89,45,44,7,1,110,24,181,143,104,64, 91,176,63,28,234,113,149,60,2,3,111,29,8,62,24,17, 20,56,28,13,11,49,33,97,25,28,84,63,11,9,56,104, 57,94,38,41,33,61,31,31,56,7,7,76,35,7,48,37, 133,124,56,34,111,49,1,102,148,0,0,2,0,34,255,233, 1,203,2,228,0,48,0,52,0,0,1,35,38,35,34,7, 6,21,20,23,22,31,1,22,23,22,21,20,7,6,35,34, 39,38,53,51,22,23,22,51,50,55,54,53,52,47,2,38, 39,38,53,52,55,54,51,50,23,22,3,51,7,35,1,182, 88,3,102,82,23,6,66,14,17,80,118,23,7,90,52,74, 194,14,1,88,6,18,33,71,84,28,10,54,27,78,119,31, 16,84,49,68,145,35,10,163,113,149,60,1,122,84,49,14, 16,45,22,4,4,19,28,70,21,27,96,44,26,162,8,9, 47,20,35,47,16,19,46,19,8,19,29,51,28,43,93,42, 25,101,27,1,73,148,255,255,0,48,255,233,2,109,3,173, 16,39,1,239,0,172,0,200,16,6,0,54,0,0,255,255, 0,34,255,233,1,203,2,202,16,38,1,239,86,229,16,6, 0,86,0,0,0,1,0,47,255,42,2,109,2,229,0,87, 0,0,5,7,54,51,50,23,22,21,20,7,6,35,34,47, 1,55,23,22,51,50,55,54,53,38,39,34,7,39,55,38, 35,39,38,39,38,53,52,53,51,23,22,23,22,51,50,55, 54,55,54,53,52,47,2,38,53,52,55,54,51,50,23,22, 21,35,38,39,38,35,34,15,1,6,21,20,23,22,31,1, 22,23,22,21,20,7,6,7,6,1,79,15,14,14,70,8, 1,66,25,32,45,66,14,21,9,57,32,38,13,3,7,39, 14,17,11,31,9,2,44,117,49,26,88,3,7,28,51,117, 89,45,44,7,1,110,24,181,143,104,64,91,176,63,28,88, 1,109,32,40,104,41,12,6,54,25,41,183,120,28,7,71, 28,35,56,24,32,2,55,5,7,63,22,8,28,6,40,4, 29,29,7,9,34,3,7,6,69,3,7,25,98,52,62,4, 4,38,41,33,61,31,31,56,7,7,76,35,7,48,37,133, 124,56,34,111,49,66,111,29,8,62,24,17,20,56,28,13, 11,49,33,97,25,28,94,64,26,14,22,0,0,1,0,34, 255,42,1,203,2,27,0,77,0,0,23,7,54,51,50,23, 22,21,20,7,6,35,34,39,38,39,55,23,22,51,50,55, 54,53,38,39,34,7,39,55,38,39,51,22,23,22,51,50, 55,54,53,52,47,2,38,39,38,53,52,55,54,51,50,23, 22,21,35,38,35,34,7,6,21,20,23,22,31,1,22,23, 22,21,20,7,6,7,6,244,14,14,14,70,8,1,66,25, 32,45,66,6,8,21,9,57,32,38,13,3,7,39,14,17, 11,31,168,3,88,6,18,33,71,84,28,10,54,27,78,119, 31,16,84,49,68,145,35,10,88,3,102,82,23,6,66,14, 17,80,118,23,7,65,16,17,38,24,32,2,55,5,7,63, 22,8,28,3,3,40,4,29,29,7,9,34,3,7,6,71, 17,160,47,20,35,47,16,19,46,19,8,19,29,51,28,43, 93,42,25,101,27,33,84,49,14,16,45,22,4,4,19,28, 70,21,27,79,47,11,8,17,0,2,0,48,255,233,2,109, 3,172,0,54,0,61,0,0,1,35,38,39,38,35,34,15, 1,6,21,20,23,22,31,1,22,23,22,21,20,7,6,7, 6,35,34,39,38,39,51,23,22,23,22,51,50,55,54,55, 54,53,52,47,2,38,53,52,55,54,51,50,23,22,39,35, 39,51,23,55,51,2,84,88,1,109,32,40,104,41,12,6, 54,25,41,183,120,28,7,58,11,11,73,132,169,76,42,1, 88,3,7,28,51,117,89,45,44,7,1,110,24,181,143,104, 64,91,176,63,28,216,95,96,63,81,79,64,2,3,111,29, 8,62,24,17,20,56,28,13,11,49,33,97,25,28,84,63, 11,9,56,104,57,94,38,41,33,61,31,31,56,7,7,76, 35,7,48,37,133,124,56,34,111,49,209,150,96,96,0,2, 0,34,255,233,1,203,2,229,0,48,0,55,0,0,1,35, 38,35,34,7,6,21,20,23,22,31,1,22,23,22,21,20, 7,6,35,34,39,38,53,51,22,23,22,51,50,55,54,53, 52,47,2,38,39,38,53,52,55,54,51,50,23,22,39,35, 39,51,23,55,51,1,182,88,3,102,82,23,6,66,14,17, 80,118,23,7,90,52,74,194,14,1,88,6,18,33,71,84, 28,10,54,27,78,119,31,16,84,49,68,145,35,10,144,95, 96,63,81,79,64,1,122,84,49,14,16,45,22,4,4,19, 28,70,21,27,96,44,26,162,8,9,47,20,35,47,16,19, 46,19,8,19,29,51,28,43,93,42,25,101,27,180,150,96, 96,0,255,255,0,21,255,42,2,81,2,217,16,39,0,122, 0,128,0,0,16,6,0,55,0,0,255,255,0,14,255,19, 1,37,2,156,16,38,0,122,6,233,16,6,0,87,0,0, 0,2,0,21,0,0,2,81,3,172,0,7,0,14,0,0, 1,17,35,17,35,53,33,21,39,35,39,51,23,55,51,1, 98,93,240,2,60,238,95,96,63,81,79,64,2,135,253,121, 2,135,82,82,143,150,96,96,0,2,0,14,255,233,1,65, 3,32,0,23,0,37,0,0,19,21,35,17,20,23,22,51, 50,55,21,6,35,34,39,38,53,17,35,53,51,53,51,21, 19,51,21,20,7,6,43,1,53,50,53,52,53,35,254,86, 22,9,15,25,15,39,29,89,11,1,71,71,83,53,100,48, 20,24,8,55,55,2,12,68,254,153,38,6,3,4,70,7, 67,7,9,1,140,68,144,144,1,20,103,76,32,13,38,78, 4,4,0,1,0,21,0,0,2,81,2,217,0,7,0,0, 1,17,35,17,35,53,33,21,1,98,93,240,2,60,2,135, 253,121,2,135,82,82,0,1,0,14,255,233,0,254,2,156, 0,23,0,0,19,21,35,17,20,23,22,51,50,55,21,6, 35,34,39,38,53,17,35,53,51,53,51,21,254,86,22,9, 15,25,15,39,29,89,11,1,71,71,83,2,12,68,254,153, 38,6,3,4,70,7,67,7,9,1,140,68,144,144,255,255, 0,85,255,233,2,133,3,105,16,39,1,247,0,203,0,156, 16,6,0,56,0,0,255,255,0,65,255,233,1,226,2,156, 16,38,1,247,112,207,16,6,0,88,0,0,0,2,0,85, 255,233,2,133,3,132,0,21,0,25,0,0,1,51,17,20, 7,6,35,34,39,38,53,17,51,17,20,23,22,51,50,55, 54,53,3,21,33,53,2,40,93,104,72,105,165,73,41,93, 110,34,42,124,45,19,50,254,238,2,217,254,0,130,65,45, 101,58,81,2,0,254,0,117,31,10,80,34,44,2,171,70, 70,0,0,2,0,65,255,233,1,226,2,189,0,23,0,27, 0,0,33,35,53,6,7,6,35,34,39,38,53,17,51,17, 20,23,22,51,50,55,54,53,17,51,39,21,33,53,1,226, 75,56,74,20,25,107,41,19,83,59,22,27,85,38,20,83, 71,254,238,73,79,13,4,70,32,41,1,148,254,141,70,24, 9,78,42,57,1,41,177,70,70,0,255,255,0,85,255,233, 2,133,3,136,16,39,1,243,0,200,0,172,16,6,0,56, 0,0,255,255,0,65,255,233,1,226,2,187,16,38,1,243, 108,223,16,6,0,88,0,0,0,3,0,85,255,233,2,133, 3,185,0,21,0,38,0,54,0,0,1,51,17,20,7,6, 35,34,39,38,53,17,51,17,20,23,22,51,50,55,54,53, 3,50,31,1,22,21,20,7,6,35,34,39,38,53,52,55, 54,23,34,7,6,21,20,23,22,51,50,55,54,53,52,39, 38,2,40,93,104,72,105,165,73,41,93,110,34,42,124,45, 19,187,50,26,9,3,43,21,24,48,27,13,42,21,25,29, 12,3,27,8,9,29,12,3,28,8,2,217,254,0,130,65, 45,101,58,81,2,0,254,0,117,31,10,80,34,44,2,224, 43,23,11,11,49,26,12,42,21,25,47,27,13,44,27,8, 8,29,11,4,27,8,8,31,10,3,0,3,0,65,255,233, 1,226,2,242,0,23,0,40,0,56,0,0,33,35,53,6, 7,6,35,34,39,38,53,17,51,17,20,23,22,51,50,55, 54,53,17,51,39,50,31,1,22,21,20,7,6,35,34,39, 38,53,52,55,54,23,34,7,6,21,20,23,22,51,50,55, 54,53,52,39,38,1,226,75,56,74,20,25,107,41,19,83, 59,22,27,85,38,20,83,209,50,26,9,3,43,21,24,48, 27,13,42,21,25,29,12,3,27,8,9,29,12,3,28,8, 73,79,13,4,70,32,41,1,148,254,141,70,24,9,78,42, 57,1,41,230,43,23,11,11,49,26,12,42,21,25,47,27, 13,44,27,8,8,29,12,3,27,8,8,31,10,3,0,3, 0,85,255,233,2,133,3,171,0,21,0,25,0,29,0,0, 1,51,17,20,7,6,35,34,39,38,53,17,51,17,20,23, 22,51,50,55,54,53,3,51,7,35,37,51,7,35,2,40, 93,104,72,105,165,73,41,93,110,34,42,124,45,19,223,113, 149,60,1,14,113,149,60,2,217,254,0,130,65,45,101,58, 81,2,0,254,0,117,31,10,80,34,44,2,210,150,150,150, 0,3,0,65,255,233,2,18,2,228,0,23,0,27,0,31, 0,0,33,35,53,6,7,6,35,34,39,38,53,17,51,17, 20,23,22,51,50,55,54,53,17,51,39,51,7,35,37,51, 7,35,1,226,75,56,74,20,25,107,41,19,83,59,22,27, 85,38,20,83,239,113,149,60,1,14,113,149,60,73,79,13, 4,70,32,41,1,148,254,141,70,24,9,78,42,57,1,41, 216,150,150,150,0,1,0,85,255,51,2,133,2,217,0,40, 0,0,5,21,6,35,34,39,38,53,52,55,54,55,6,35, 34,39,38,53,17,51,17,20,23,22,51,50,55,54,53,17, 51,17,20,7,6,7,6,21,20,51,50,2,90,48,27,33, 37,63,59,6,8,57,44,168,73,40,93,110,34,42,124,45, 19,93,50,15,48,65,72,37,150,45,10,13,24,56,52,41, 4,5,13,102,57,81,2,0,254,0,117,31,10,80,34,44, 2,0,254,0,84,67,20,46,62,44,54,0,0,1,0,65, 255,52,2,9,2,12,0,42,0,0,1,17,6,7,6,21, 20,23,22,51,50,55,21,7,35,34,39,38,53,52,55,35, 53,6,7,6,35,34,39,38,53,17,51,17,20,23,22,51, 50,55,54,53,17,1,226,59,15,3,45,10,12,23,26,51, 1,96,30,10,96,22,56,74,20,25,107,41,19,83,59,22, 27,85,38,20,2,12,253,244,34,52,11,11,40,10,2,10, 45,9,54,18,21,61,50,73,79,13,4,70,32,41,1,148, 254,141,70,24,9,78,42,57,1,41,255,255,0,22,0,0, 3,161,3,151,16,39,1,239,1,56,0,178,16,6,0,58, 0,0,255,255,0,6,0,0,2,196,2,202,16,39,1,239, 0,194,255,229,16,6,0,90,0,0,255,255,0,13,0,0, 2,149,3,151,16,39,1,239,0,174,0,178,16,6,0,60, 0,0,255,255,0,20,255,38,1,222,2,202,16,38,1,239, 86,229,16,6,0,92,0,0,0,3,0,13,0,0,2,149, 3,146,0,8,0,12,0,16,0,0,1,17,35,17,1,51, 27,1,51,37,21,35,53,33,21,35,53,1,131,93,254,231, 115,214,208,111,254,163,104,1,10,104,1,30,254,226,1,30, 1,187,254,157,1,99,185,103,103,103,103,0,0,2,0,28, 0,0,2,71,3,171,0,9,0,13,0,0,1,21,1,33, 21,33,53,1,33,53,37,51,7,35,2,69,254,76,1,182, 253,213,1,182,254,102,1,35,113,149,60,2,217,84,253,205, 82,82,2,53,82,210,148,0,0,2,0,31,0,0,1,201, 2,228,0,9,0,13,0,0,1,21,1,33,21,33,53,1, 33,53,55,51,7,35,1,187,254,201,1,69,254,86,1,57, 254,220,226,113,149,60,2,12,74,254,135,73,75,1,120,73, 216,148,0,2,0,28,0,0,2,71,3,147,0,9,0,13, 0,0,1,21,1,33,21,33,53,1,33,53,37,21,35,53, 2,69,254,76,1,182,253,213,1,182,254,102,1,59,104,2, 217,84,253,205,82,82,2,53,82,186,104,104,0,2,0,31, 0,0,1,201,2,204,0,9,0,13,0,0,1,21,1,33, 21,33,53,1,33,53,55,21,35,53,1,187,254,201,1,69, 254,86,1,57,254,220,251,104,2,12,74,254,135,73,75,1, 120,73,192,104,104,0,0,2,0,28,0,0,2,71,3,172, 0,9,0,16,0,0,1,21,1,33,21,33,53,1,33,53, 37,35,39,51,23,55,51,2,69,254,76,1,182,253,213,1, 182,254,102,1,54,95,96,63,81,79,64,2,217,84,253,205, 82,82,2,53,82,61,150,96,96,0,0,2,0,31,0,0, 1,201,2,229,0,9,0,16,0,0,1,21,1,33,21,33, 53,1,33,53,55,35,39,51,23,55,51,1,187,254,201,1, 69,254,86,1,57,254,220,246,95,96,63,81,79,64,2,12, 74,254,135,73,75,1,120,73,67,150,96,96,0,1,0,18, 0,0,1,2,2,220,0,17,0,0,51,35,17,35,53,51, 53,52,55,54,51,50,23,21,38,35,34,21,171,83,70,70, 74,22,27,23,24,19,10,58,1,200,68,89,88,24,7,5, 69,1,53,0,255,255,0,26,255,233,2,45,2,217,16,71, 0,211,2,71,0,0,192,0,64,0,255,255,0,79,0,0, 2,112,2,217,16,6,2,105,0,0,0,2,0,54,255,233, 2,11,2,217,0,15,0,34,0,0,1,34,7,6,21,20, 23,22,51,50,55,54,53,52,39,38,1,17,33,21,33,21, 54,51,50,23,22,21,20,7,6,35,34,39,21,1,27,83, 39,24,69,33,44,84,42,27,72,37,254,239,1,135,254,204, 57,105,128,59,37,91,57,80,107,59,1,205,84,50,69,125, 52,26,79,51,70,127,53,25,254,52,2,217,73,203,86,108, 68,99,161,77,49,90,67,0,0,2,0,0,0,0,2,112, 2,217,0,10,0,31,0,0,55,51,50,55,54,53,52,39, 38,43,1,53,21,51,50,23,22,21,20,7,6,35,33,17, 7,53,55,53,51,21,55,21,172,212,81,41,24,65,35,46, 212,165,250,32,4,84,61,85,254,198,79,79,93,172,82,62, 35,46,84,39,21,170,88,173,24,28,114,65,47,1,221,52, 77,52,175,113,113,76,0,2,255,247,255,233,2,11,2,217, 0,15,0,40,0,0,1,34,7,6,21,20,23,22,51,50, 55,54,53,52,39,38,39,21,54,51,50,23,22,21,20,7, 6,35,34,39,21,35,17,7,53,55,53,51,21,55,21,1, 27,83,39,24,69,33,44,84,42,27,72,37,190,57,105,128, 59,37,91,57,80,107,59,75,63,63,83,66,1,205,84,50, 69,125,52,26,79,51,70,127,53,25,127,134,86,108,68,99, 161,77,49,90,67,2,31,50,64,50,122,78,51,64,255,255, 0,48,255,233,2,165,2,229,16,15,0,38,2,213,2,206, 192,0,0,2,0,48,255,233,2,237,2,229,0,15,0,47, 0,0,1,53,52,55,54,51,50,23,21,38,35,34,7,6, 29,1,49,35,38,39,38,39,34,7,6,21,20,23,22,51, 50,55,54,55,54,55,51,2,33,34,39,38,53,52,55,54, 51,50,2,63,73,24,30,23,24,19,10,51,6,1,95,15, 38,54,90,128,61,40,95,59,83,109,51,6,4,22,11,96, 33,254,245,141,82,106,102,82,149,238,1,247,89,92,28,9, 5,79,1,40,6,7,82,75,35,44,2,115,75,112,170,79, 49,77,8,9,42,71,254,223,85,109,185,183,111,91,0,1, 0,31,255,233,2,46,2,44,0,40,0,0,1,54,51,50, 23,21,38,35,34,7,6,29,1,35,38,47,1,34,7,6, 21,20,23,22,51,50,55,51,6,7,6,35,34,39,38,53, 52,55,54,51,50,1,148,25,82,23,24,19,10,51,6,1, 84,13,84,27,94,35,16,79,29,39,107,21,84,11,104,43, 56,129,62,41,92,59,82,84,1,238,62,5,69,1,40,6, 7,82,97,15,2,100,46,63,137,45,17,126,137,46,20,105, 70,101,160,77,49,0,255,255,0,20,0,0,2,155,2,217, 16,6,0,146,0,0,255,255,0,78,0,0,2,112,2,217, 16,71,2,105,2,190,0,0,192,0,64,0,255,255,0,54, 255,233,2,11,2,217,16,71,1,68,2,65,0,0,192,0, 64,0,255,255,0,90,0,0,2,101,2,217,16,71,0,40, 2,191,0,0,192,0,64,0,0,2,0,38,255,233,2,230, 2,229,0,30,0,39,0,0,19,54,55,54,51,50,31,1, 22,21,20,7,6,7,6,35,34,39,38,53,52,55,33,38, 39,38,35,34,7,6,7,5,33,22,23,22,51,50,55,54, 47,29,123,82,108,174,97,26,56,82,20,24,91,135,167,98, 87,1,2,97,9,101,63,86,130,72,32,14,1,249,254,0, 19,101,59,77,129,72,44,1,196,160,77,52,123,38,96,131, 148,105,26,20,77,117,104,161,17,9,156,73,45,102,45,60, 149,141,65,38,100,60,0,1,0,48,255,233,2,109,2,229, 0,57,0,0,1,35,34,7,6,21,20,23,22,23,22,51, 50,55,54,53,52,53,51,6,7,6,35,34,39,38,39,38, 53,52,55,54,55,38,53,52,55,54,51,50,23,22,21,35, 38,39,38,35,34,15,1,6,21,20,23,22,59,1,1,156, 108,81,51,31,43,4,5,45,89,117,51,38,88,1,42,76, 169,132,73,64,13,3,109,10,11,105,104,64,91,176,63,28, 88,1,109,32,40,104,41,12,6,48,49,61,88,1,65,59, 35,36,56,38,4,3,31,61,45,62,3,2,94,57,104,56, 51,84,16,16,114,51,5,4,45,108,124,56,34,111,49,66, 111,29,8,62,24,17,20,47,45,45,0,2,0,2,255,38, 2,67,2,217,0,13,0,23,0,0,55,51,17,20,7,6, 35,34,39,53,22,51,50,53,19,17,35,17,33,21,33,21, 33,21,90,93,88,29,36,13,15,17,3,68,93,93,1,233, 254,116,1,92,224,254,179,79,23,7,3,81,1,59,1,152, 254,180,2,217,82,233,82,0,0,1,0,11,255,44,2,30, 2,226,0,33,0,0,1,21,35,3,6,7,6,7,34,39, 55,22,51,50,55,54,55,19,35,53,51,55,54,55,54,51, 50,23,7,38,35,34,15,1,1,211,126,75,19,46,58,77, 36,19,17,25,26,69,24,1,2,78,113,125,22,16,45,51, 64,35,44,30,32,20,71,23,12,1,206,70,254,115,103,47, 55,2,10,84,16,97,8,8,1,157,70,104,80,44,48,19, 79,18,126,70,0,2,0,44,255,233,3,18,2,229,0,15, 0,57,0,0,1,53,52,55,54,51,50,23,21,38,35,34, 7,6,29,1,23,17,35,39,6,35,34,39,38,53,52,55, 54,55,54,51,50,23,22,23,35,38,39,38,35,34,7,6, 21,20,23,22,23,22,23,50,55,54,61,1,35,53,2,100, 73,24,30,23,24,19,10,51,6,1,10,59,23,104,145,153, 94,87,102,14,16,85,133,179,81,33,12,95,21,95,42,53, 132,71,53,61,8,8,72,112,114,66,49,222,1,252,89,92, 28,9,5,79,1,40,6,7,82,123,254,123,97,116,114,104, 162,176,110,15,13,70,118,49,66,98,36,17,104,78,115,126, 84,10,9,72,2,80,60,84,20,82,0,1,0,58,0,0, 1,246,2,220,0,21,0,0,51,17,52,55,54,51,50,23, 21,38,35,34,21,17,55,51,7,19,35,3,7,21,58,74, 22,27,23,24,19,10,58,222,107,182,214,103,177,81,2,101, 88,24,7,5,69,1,53,254,208,222,181,254,169,1,28,80, 204,0,0,1,255,244,255,38,2,134,2,217,0,19,0,0, 23,17,51,1,17,51,17,35,1,17,20,7,6,35,34,39, 53,22,51,50,76,101,1,125,88,105,254,135,99,22,27,13, 15,17,3,66,76,3,37,253,172,2,84,253,39,2,79,253, 68,87,18,4,3,76,1,0,0,1,0,70,255,56,1,231, 2,27,0,23,0,0,19,51,21,54,55,54,51,50,23,22, 21,17,35,17,52,39,38,35,34,7,6,21,17,35,70,77, 54,76,20,24,105,42,19,83,59,21,28,84,37,21,84,2, 12,88,85,14,4,70,32,41,253,172,2,51,70,24,9,77, 42,58,254,223,0,3,0,38,255,233,2,230,2,229,0,18, 0,27,0,36,0,0,1,50,31,1,22,21,20,7,6,7, 6,35,34,39,38,53,52,55,54,1,38,39,38,35,34,7, 6,7,5,33,22,23,22,51,50,55,54,1,133,174,97,26, 56,82,20,24,91,135,167,98,87,111,95,1,148,9,101,63, 86,129,72,50,6,2,3,253,254,15,99,62,81,129,73,46, 2,229,123,38,96,131,148,105,26,20,77,117,104,161,184,107, 91,254,156,156,73,45,101,71,102,70,145,69,42,100,65,0, 0,3,0,54,255,38,2,72,2,80,0,15,0,34,0,50, 0,0,1,53,52,55,54,51,50,23,21,38,35,34,7,6, 29,1,1,17,51,21,54,51,50,23,22,21,20,7,6,7, 6,35,34,39,17,19,34,7,6,21,20,23,22,51,50,55, 54,53,52,39,38,1,164,86,15,16,23,24,19,10,51,6, 1,254,69,77,59,108,127,60,38,89,39,52,21,23,97,64, 146,83,39,24,69,33,44,84,42,26,71,35,1,128,89,100, 16,3,5,69,1,40,6,7,82,253,166,2,230,79,94,111, 71,104,154,75,33,10,4,78,254,239,2,167,84,50,69,125, 52,26,81,50,69,127,53,26,255,255,0,48,255,233,2,109, 2,229,16,71,0,54,2,157,0,0,192,0,64,0,255,255, 0,34,255,233,1,203,2,27,16,71,0,86,1,237,0,0, 192,0,64,0,0,1,0,28,0,0,2,71,2,217,0,11, 0,0,19,3,53,33,21,33,19,3,33,21,33,53,247,217, 2,13,254,102,219,219,1,182,253,213,1,109,1,24,84,82, 254,230,254,229,82,82,0,1,0,14,255,38,0,254,2,156, 0,33,0,0,23,38,39,17,35,53,51,53,51,21,51,21, 35,17,20,23,22,51,50,55,21,20,7,6,35,34,39,53, 22,51,50,55,54,53,170,80,5,71,71,83,86,86,22,9, 15,25,15,114,14,16,13,15,17,3,52,11,5,22,15,67, 1,140,68,144,144,68,254,153,38,6,3,4,163,96,12,1, 3,71,1,32,14,23,0,1,0,14,255,233,0,255,2,220, 0,33,0,0,19,21,51,21,35,17,20,23,22,51,50,55, 21,6,35,34,39,38,53,17,35,53,51,53,52,55,54,51, 50,23,21,38,35,34,168,86,86,22,9,15,25,15,39,29, 89,11,1,71,71,74,22,27,23,24,19,10,58,2,94,82, 68,254,153,38,6,3,4,70,7,67,7,9,1,140,68,89, 88,24,7,5,69,1,0,2,0,21,255,38,2,81,2,217, 0,13,0,21,0,0,37,17,20,51,50,55,21,6,35,34, 39,38,53,17,19,17,35,17,35,53,33,21,1,98,68,3, 17,15,13,118,28,7,93,93,240,2,60,224,254,212,59,1, 81,3,70,18,21,1,77,1,167,253,121,2,135,82,82,0, 255,255,0,89,0,0,5,3,3,172,16,39,1,63,2,188, 0,0,16,6,0,39,0,0,255,255,0,89,0,0,4,141, 2,229,16,39,1,64,2,196,0,0,16,6,0,39,0,0, 255,255,0,26,255,233,3,245,2,229,16,39,1,64,2,44, 0,0,16,6,0,71,0,0,255,255,0,80,255,233,3,214, 2,217,16,39,0,45,2,44,0,0,16,6,0,47,0,0, 255,255,0,80,255,38,2,197,2,217,16,39,0,77,2,44, 0,0,16,6,0,47,0,0,255,255,0,68,255,38,1,119, 2,217,16,39,0,77,0,222,0,0,16,6,0,79,0,0, 255,255,0,76,255,233,4,110,2,217,16,39,0,45,2,196, 0,0,16,6,0,49,0,0,255,255,0,76,255,38,3,107, 2,217,16,39,0,77,2,210,0,0,16,6,0,49,0,0, 255,255,0,70,255,38,2,197,2,217,16,39,0,77,2,44, 0,0,16,6,0,81,0,0,255,255,0,17,0,0,2,141, 3,163,16,39,1,240,0,174,0,190,16,6,0,36,0,0, 255,255,0,42,255,233,2,23,2,217,16,38,1,240,112,244, 16,6,0,68,0,0,255,255,0,3,0,0,1,34,3,163, 16,39,1,240,255,240,0,190,16,6,0,44,0,0,255,255, 255,249,0,0,1,24,2,217,16,38,1,240,230,244,16,6, 0,243,0,0,255,255,0,38,255,233,2,230,3,163,16,39, 1,240,0,226,0,190,16,6,0,50,0,0,255,255,0,36, 255,233,1,254,2,217,16,38,1,240,110,244,16,6,0,82, 0,0,255,255,0,85,255,233,2,133,3,163,16,39,1,240, 0,202,0,190,16,6,0,56,0,0,255,255,0,65,255,233, 1,226,2,217,16,38,1,240,111,244,16,6,0,88,0,0, 255,255,0,85,255,233,2,133,4,0,16,39,0,113,0,200, 1,67,16,6,0,158,0,0,255,255,0,65,255,233,1,226, 3,57,16,38,0,113,109,124,16,6,0,190,0,0,255,255, 0,85,255,233,2,133,4,78,16,39,0,118,0,243,1,106, 16,6,0,158,0,0,255,255,0,65,255,233,1,226,3,135, 16,39,0,118,0,152,0,163,16,6,0,190,0,0,255,255, 0,85,255,233,2,133,4,80,16,39,1,240,0,202,1,107, 16,6,0,158,0,0,255,255,0,65,255,233,1,226,3,137, 16,39,1,240,0,112,0,164,16,6,0,190,0,0,255,255, 0,85,255,233,2,133,4,78,16,39,0,67,0,164,1,106, 16,6,0,158,0,0,255,255,0,65,255,233,1,226,3,135, 16,39,0,67,0,73,0,163,16,6,0,190,0,0,255,255, 0,40,255,233,2,1,2,27,16,15,0,72,2,41,2,4, 192,0,255,255,0,17,0,0,2,141,4,0,16,39,0,113, 0,170,1,67,16,6,0,134,0,0,255,255,0,42,255,233, 2,23,3,57,16,38,0,113,108,124,16,6,0,166,0,0, 255,255,0,17,0,0,2,141,3,227,16,39,0,113,0,172, 1,38,16,39,1,244,0,170,0,169,16,6,0,36,0,0, 255,255,0,42,255,233,2,23,3,25,16,38,0,113,110,92, 16,38,1,244,108,223,16,6,0,68,0,0,255,255,0,11, 0,0,3,182,3,83,16,39,0,113,1,200,0,150,16,6, 0,136,0,0,255,255,0,34,255,233,3,77,2,137,16,39, 0,113,1,18,255,204,16,6,0,168,0,0,255,255,0,44, 255,233,2,197,3,163,16,39,1,240,0,232,0,190,16,6, 0,42,0,0,255,255,0,29,255,38,1,233,2,217,16,38, 1,240,90,244,16,6,0,74,0,0,255,255,0,79,0,0, 2,146,3,163,16,39,1,240,0,204,0,190,16,6,0,46, 0,0,255,255,255,212,0,0,1,246,3,151,16,39,1,240, 255,193,0,178,16,6,0,78,0,0,255,255,0,38,255,35, 2,230,2,229,16,39,1,246,0,201,255,240,16,6,0,50, 0,0,255,255,0,36,255,35,1,254,2,27,16,38,1,246, 84,240,16,6,0,82,0,0,255,255,0,38,255,35,2,230, 3,83,16,39,0,113,0,224,0,150,16,39,1,246,0,201, 255,240,16,6,0,50,0,0,255,255,0,36,255,35,1,254, 2,137,16,38,0,113,107,204,16,38,1,246,84,240,16,6, 0,82,0,0,255,255,255,223,255,38,0,254,2,202,16,38, 1,240,204,229,16,6,8,70,0,0,255,255,0,89,0,0, 5,25,2,217,16,39,0,61,2,210,0,0,16,6,0,39, 0,0,255,255,0,89,0,0,4,155,2,217,16,39,0,93, 2,210,0,0,16,6,0,39,0,0,255,255,0,26,255,233, 3,245,2,217,16,39,0,93,2,44,0,0,16,6,0,71, 0,0,255,255,0,44,255,233,2,197,3,161,16,39,0,118, 1,16,0,189,16,6,0,42,0,0,255,255,0,29,255,38, 1,233,2,215,16,39,0,118,0,130,255,243,16,6,0,74, 0,0,255,255,0,76,0,0,2,134,3,161,16,39,0,67, 0,160,0,189,16,6,0,49,0,0,255,255,0,70,0,0, 1,231,2,215,16,38,0,67,78,243,16,6,0,81,0,0, 255,255,0,17,0,0,2,141,4,117,16,39,0,118,0,213, 1,145,16,6,0,135,0,0,255,255,0,42,255,233,2,23, 3,174,16,39,0,118,0,153,0,202,16,6,0,167,0,0, 255,255,0,11,0,0,3,182,3,161,16,39,0,118,1,243, 0,189,16,6,0,136,0,0,255,255,0,34,255,233,3,77, 2,215,16,39,0,118,1,61,255,243,16,6,0,168,0,0, 255,255,0,30,255,233,2,232,3,175,16,39,0,118,1,12, 0,203,16,6,0,154,0,0,255,255,0,18,255,226,2,17, 2,215,16,39,0,118,0,151,255,243,16,6,0,186,0,0, 255,255,254,250,0,0,2,141,3,163,16,39,2,4,0,106, 0,191,16,6,0,36,0,0,255,255,254,188,255,233,2,23, 2,217,16,38,2,4,44,245,16,6,0,68,0,0,255,255, 255,110,0,0,2,141,3,148,16,47,1,243,0,170,5,233, 192,0,16,6,0,36,0,0,255,255,255,48,255,233,2,23, 2,202,16,47,1,243,0,108,5,31,192,0,16,6,0,68, 0,0,255,255,255,0,0,0,2,101,3,163,16,39,2,4, 0,112,0,191,16,6,0,40,0,0,255,255,254,193,255,233, 2,1,2,217,16,38,2,4,49,245,16,6,0,72,0,0, 255,255,255,115,0,0,2,101,3,148,16,47,1,243,0,175, 5,233,192,0,16,6,0,40,0,0,255,255,255,52,255,233, 2,1,2,202,16,47,1,243,0,112,5,31,192,0,16,6, 0,72,0,0,255,255,254,60,0,0,0,194,3,163,16,39, 2,4,255,172,0,191,16,6,0,44,0,0,255,255,254,49, 0,0,0,178,2,217,16,38,2,4,161,245,16,6,0,243, 0,0,255,255,254,176,0,0,0,194,3,148,16,47,1,243, 255,236,5,233,192,0,16,6,0,44,0,0,255,255,254,164, 0,0,0,178,2,202,16,47,1,243,255,224,5,31,192,0, 16,6,0,243,0,0,255,255,255,46,255,233,2,230,3,163, 16,39,2,4,0,158,0,191,16,6,0,50,0,0,255,255, 254,185,255,233,1,254,2,217,16,38,2,4,41,245,16,6, 0,82,0,0,255,255,255,162,255,233,2,230,3,148,16,47, 1,243,0,222,5,233,192,0,16,6,0,50,0,0,255,255, 255,44,255,233,1,254,2,202,16,47,1,243,0,104,5,31, 192,0,16,6,0,82,0,0,255,255,254,174,0,0,2,167, 3,163,16,39,2,4,0,30,0,191,16,6,0,53,0,0, 255,255,254,108,0,0,1,65,2,217,16,38,2,4,220,245, 16,6,0,85,0,0,255,255,255,34,0,0,2,167,3,148, 16,47,1,243,0,94,5,233,192,0,16,6,0,53,0,0, 255,255,254,224,0,0,1,65,2,202,16,47,1,243,0,28, 5,31,192,0,16,6,0,85,0,0,255,255,255,22,255,233, 2,133,3,163,16,39,2,4,0,134,0,191,16,6,0,56, 0,0,255,255,254,186,255,233,1,226,2,217,16,38,2,4, 42,245,16,6,0,88,0,0,255,255,255,138,255,233,2,133, 3,148,16,47,1,243,0,198,5,233,192,0,16,6,0,56, 0,0,255,255,255,46,255,233,1,226,2,202,16,47,1,243, 0,106,5,31,192,0,16,6,0,88,0,0,0,2,0,48, 254,227,2,109,2,229,0,54,0,67,0,0,1,35,38,39, 38,35,34,15,1,6,21,20,23,22,31,1,22,23,22,21, 20,7,6,7,6,35,34,39,38,39,51,23,22,23,22,51, 50,55,54,55,54,53,52,47,2,38,53,52,55,54,51,50, 23,22,1,51,21,20,7,6,35,53,50,53,52,53,35,2, 84,88,1,109,32,40,104,41,12,6,54,25,41,183,120,28, 7,58,11,11,73,132,169,76,42,1,88,3,7,28,51,117, 89,45,44,7,1,110,24,181,143,104,64,91,176,63,28,254, 207,100,59,17,24,55,55,2,3,111,29,8,62,24,17,20, 56,28,13,11,49,33,97,25,28,84,63,11,9,56,104,57, 94,38,41,33,61,31,31,56,7,7,76,35,7,48,37,133, 124,56,34,111,49,253,127,103,88,25,8,38,78,4,4,0, 0,2,0,34,254,227,1,203,2,27,0,48,0,61,0,0, 1,35,38,35,34,7,6,21,20,23,22,31,1,22,23,22, 21,20,7,6,35,34,39,38,53,51,22,23,22,51,50,55, 54,53,52,47,2,38,39,38,53,52,55,54,51,50,23,22, 3,51,21,20,7,6,35,53,50,53,52,53,35,1,182,88, 3,102,82,23,6,66,14,17,80,118,23,7,90,52,74,194, 14,1,88,6,18,33,71,84,28,10,54,27,78,119,31,16, 84,49,68,145,35,10,241,100,59,17,24,55,55,1,122,84, 49,14,16,45,22,4,4,19,28,70,21,27,96,44,26,162, 8,9,47,20,35,47,16,19,46,19,8,19,29,51,28,43, 93,42,25,101,27,254,41,103,88,25,8,38,78,4,4,0, 0,2,0,21,254,227,2,81,2,217,0,7,0,20,0,0, 1,17,35,17,35,53,33,21,1,51,21,20,7,6,35,53, 50,53,52,53,35,1,98,93,240,2,60,254,179,100,59,17, 24,55,55,2,135,253,121,2,135,82,82,253,61,103,88,25, 8,38,78,4,4,0,0,2,0,14,254,227,0,254,2,156, 0,23,0,36,0,0,19,21,35,17,20,23,22,51,50,55, 21,6,35,34,39,38,53,17,35,53,51,53,51,21,3,51, 21,20,7,6,35,53,50,53,52,53,35,254,86,22,9,15, 25,15,39,29,89,11,1,71,71,83,57,100,59,17,24,55, 55,2,12,68,254,153,38,6,3,4,70,7,67,7,9,1, 140,68,144,144,253,184,103,88,25,8,38,78,4,4,255,255, 0,83,0,0,2,132,3,163,16,39,1,240,0,201,0,190, 16,6,0,43,0,0,255,255,0,70,0,0,1,230,3,151, 16,39,1,240,0,116,0,178,16,6,0,75,0,0,255,255, 0,17,0,0,2,141,3,117,16,39,1,244,0,170,0,169, 16,6,0,36,0,0,255,255,0,42,255,233,2,23,2,171, 16,38,1,244,108,223,16,6,0,68,0,0,255,255,0,90, 255,49,2,101,2,217,16,39,0,122,0,168,0,7,16,6, 0,40,0,0,255,255,0,40,255,26,2,1,2,27,16,38, 0,122,94,240,16,6,0,72,0,0,255,255,0,38,255,233, 2,230,4,0,16,39,0,113,0,225,1,67,16,6,0,152, 0,0,255,255,0,36,255,233,1,254,3,57,16,38,0,113, 108,124,16,6,0,184,0,0,255,255,0,38,255,233,2,230, 4,2,16,39,0,113,0,231,1,69,16,6,0,151,0,0, 255,255,0,36,255,233,1,254,3,59,16,38,0,113,114,126, 16,6,0,183,0,0,255,255,0,38,255,233,2,230,3,117, 16,39,1,244,0,222,0,169,16,6,0,50,0,0,255,255, 0,36,255,233,1,254,2,171,16,38,1,244,105,223,16,6, 0,82,0,0,255,255,0,38,255,233,2,230,3,227,16,39, 0,113,0,224,1,38,16,39,1,244,0,222,0,169,16,6, 0,50,0,0,255,255,0,36,255,233,1,254,3,25,16,38, 0,113,107,92,16,38,1,244,105,223,16,6,0,82,0,0, 255,255,0,13,0,0,2,149,3,83,16,39,0,113,0,172, 0,150,16,6,0,60,0,0,255,255,0,20,255,38,1,222, 2,137,16,38,0,113,84,204,16,6,0,92,0,0,255,255, 0,42,255,233,2,23,2,27,16,15,0,68,2,65,2,4, 192,0,0,2,0,26,255,242,1,229,2,26,0,19,0,35, 0,0,19,52,55,54,51,50,23,53,51,17,35,53,6,15, 1,34,35,34,39,38,37,52,39,38,35,34,7,6,21,20, 23,22,51,50,55,54,26,86,54,80,90,66,83,83,57,61, 49,1,1,85,62,60,1,115,58,38,53,74,38,23,55,41, 56,81,34,17,1,2,159,74,47,80,66,253,244,57,54,12, 5,86,84,107,111,59,38,89,55,66,96,60,45,96,48,0, 255,255,0,68,255,242,2,15,2,26,16,15,1,193,2,41, 2,12,192,0,0,3,0,54,255,233,2,11,2,220,0,13, 0,30,0,46,0,0,19,53,52,55,54,51,50,23,21,38, 35,34,29,1,35,51,21,54,51,50,23,22,21,20,7,6, 35,34,39,21,35,19,34,7,6,21,20,23,22,51,50,55, 54,53,52,39,38,54,74,22,27,23,24,19,10,58,83,83, 57,105,128,59,37,91,57,80,107,59,75,229,83,39,24,69, 33,44,84,42,27,72,37,2,12,89,88,24,7,5,69,1, 53,82,71,86,108,68,99,161,77,49,90,67,1,205,84,50, 69,125,52,26,79,51,70,127,53,25,255,255,0,31,255,233, 1,221,2,27,16,15,0,70,1,252,2,4,192,0,0,2, 0,26,255,38,2,76,2,217,0,17,0,46,0,0,1,34, 7,6,7,6,21,20,23,22,51,50,55,54,53,52,39,38, 19,6,7,6,35,34,39,38,53,52,55,54,51,50,23,17, 51,17,20,23,22,51,50,55,21,6,35,34,53,1,9,85, 41,20,5,1,70,36,47,83,39,24,72,33,114,58,86,11, 12,130,60,38,89,57,79,108,53,83,42,13,18,3,17,15, 13,139,1,205,82,38,51,16,16,122,54,27,82,50,69,131, 51,23,254,120,83,8,1,112,71,103,154,75,47,81,1,15, 252,219,56,10,3,1,71,3,109,0,0,2,0,26,255,233, 2,70,2,220,0,17,0,46,0,0,1,34,7,6,7,6, 21,20,23,22,51,50,55,54,53,52,39,38,55,17,35,53, 6,7,6,35,34,39,38,53,52,55,54,51,50,23,53,52, 55,54,51,50,23,21,38,35,34,1,9,85,41,20,5,1, 70,36,47,83,39,24,72,33,188,74,58,86,11,12,130,60, 38,89,57,79,108,53,74,22,27,23,24,19,10,58,1,205, 82,38,51,16,16,122,54,27,82,50,69,131,51,23,145,253, 162,69,83,8,1,112,71,103,154,75,47,81,155,88,24,7, 5,69,1,0,255,255,0,40,255,233,2,1,2,27,16,71, 0,72,2,41,0,0,192,0,64,0,255,255,0,40,255,233, 2,1,2,27,16,15,0,72,2,41,2,4,192,0,255,255, 0,34,255,233,1,203,2,27,16,71,2,143,1,237,0,0, 192,0,64,0,255,255,0,34,255,233,1,203,2,27,16,6, 2,143,0,0,0,3,0,29,255,38,2,64,2,138,0,15, 0,55,0,71,0,0,1,53,52,55,54,51,50,23,21,38, 35,34,7,6,29,1,39,51,17,20,7,6,7,6,7,6, 35,34,39,38,39,51,22,23,22,51,50,55,54,61,1,6, 15,1,34,39,38,39,38,53,52,55,54,51,50,23,39,34, 7,6,21,20,23,22,51,50,55,54,53,52,39,38,1,156, 86,15,16,23,24,19,10,51,6,1,77,77,41,7,7,48, 109,11,11,138,50,17,4,85,6,26,36,59,81,35,30,59, 73,27,83,61,3,3,66,85,57,81,98,62,151,88,37,20, 78,29,39,89,35,18,82,27,1,186,89,100,16,3,5,69, 1,40,6,7,82,82,254,74,154,64,10,9,60,6,1,88, 31,39,39,21,28,49,41,102,27,82,10,2,64,3,3,77, 129,153,79,54,91,14,90,48,66,139,47,18,92,46,63,150, 43,14,255,255,0,29,255,38,1,233,2,27,16,6,0,74, 0,0,255,255,0,70,255,51,1,230,2,12,16,15,0,75, 2,44,2,12,192,0,0,2,0,70,0,0,1,230,2,220, 0,13,0,37,0,0,19,53,52,55,54,51,50,23,21,38, 35,34,29,1,35,51,21,54,55,54,51,50,23,22,21,17, 35,17,52,39,38,35,34,7,6,21,17,35,70,74,22,27, 23,24,19,10,58,83,83,54,66,21,27,110,39,16,83,34, 32,42,84,37,21,83,2,12,89,88,24,7,5,69,1,53, 82,72,70,13,4,74,30,39,254,116,1,107,55,24,24,77, 42,58,254,223,0,1,0,70,255,38,1,230,2,220,0,45, 0,0,5,17,52,39,38,35,34,7,6,21,17,35,17,52, 55,54,51,50,23,21,38,35,34,29,1,54,55,54,51,50, 23,22,21,17,20,7,34,35,34,39,53,22,51,50,55,54, 1,147,34,32,42,84,37,21,83,74,22,27,23,24,19,10, 58,54,66,21,27,110,39,16,128,7,8,13,15,17,3,52, 11,5,76,1,183,55,24,24,77,42,58,254,223,2,101,88, 24,7,5,69,1,53,154,70,13,4,74,30,39,254,7,103, 6,3,71,1,32,14,0,2,255,248,0,0,0,230,2,217, 0,3,0,15,0,0,19,21,35,53,19,53,51,21,51,21, 35,21,35,53,35,53,150,84,1,83,80,80,83,75,2,217, 105,105,254,95,212,212,72,240,240,72,0,1,0,66,255,233, 0,235,2,12,0,15,0,0,19,17,20,23,22,51,50,55, 21,6,35,34,39,38,53,17,149,22,9,15,25,15,39,29, 89,11,1,2,12,254,85,38,6,3,4,70,7,67,7,9, 1,208,255,255,0,94,0,0,0,178,2,12,16,6,0,243, 0,0,0,1,0,68,255,38,0,240,2,217,0,15,0,0, 23,17,51,17,20,23,22,51,50,55,21,6,35,34,39,38, 68,84,32,13,23,3,17,15,13,134,9,1,109,3,70,252, 219,53,11,5,1,71,3,96,6,0,255,255,0,70,255,241, 2,250,2,12,16,15,0,80,3,64,2,12,192,0,0,1, 0,70,255,56,2,250,2,12,0,40,0,0,5,35,17,6, 15,1,34,39,38,39,6,15,1,34,39,38,53,17,51,17, 20,23,22,51,50,55,54,53,17,51,17,20,23,22,51,50, 55,54,53,17,51,2,250,77,54,74,33,89,43,5,4,54, 63,44,122,25,5,84,63,16,18,62,37,24,84,71,12,14, 62,37,24,84,200,1,18,76,11,2,65,7,8,65,11,4, 98,22,26,1,137,254,151,81,19,5,56,36,45,1,73,254, 151,87,15,3,56,36,45,1,73,0,0,2,0,70,255,38, 2,250,2,27,0,15,0,58,0,0,37,51,17,20,7,6, 35,34,39,53,22,51,50,55,54,53,1,51,21,54,55,54, 51,50,23,22,23,54,55,54,51,50,23,22,21,17,35,17, 52,39,38,35,34,7,6,21,17,35,17,52,39,38,35,34, 7,6,21,17,35,2,166,84,114,14,16,13,15,17,3,52, 11,5,253,160,77,54,74,15,18,89,43,5,4,54,63,20, 24,122,25,5,84,63,16,18,61,37,25,84,71,12,14,62, 37,24,84,224,254,179,96,12,1,3,71,1,32,14,23,2, 88,74,76,11,2,65,7,8,65,11,4,98,22,26,254,119, 1,105,81,19,5,54,37,46,254,183,1,105,87,15,3,56, 36,45,254,183,0,2,255,238,255,38,1,231,2,27,0,15, 0,39,0,0,55,51,17,20,7,6,35,34,39,53,22,51, 50,55,54,53,17,51,21,54,55,54,51,50,23,22,21,17, 35,17,52,39,38,35,34,7,6,21,17,35,70,84,114,14, 16,13,15,17,3,52,11,5,77,54,76,20,24,105,42,19, 83,59,21,28,84,37,21,84,224,254,179,96,12,1,3,71, 1,32,14,23,2,88,88,85,14,4,70,32,41,254,116,1, 107,70,24,9,77,42,58,254,223,0,0,2,0,70,255,38, 2,64,2,27,0,15,0,39,0,0,37,17,20,23,22,51, 50,55,21,6,35,34,39,38,53,17,1,51,21,54,55,54, 51,50,23,22,21,17,35,17,52,39,38,35,34,7,6,21, 17,35,1,232,32,13,23,3,17,15,13,134,9,1,254,178, 77,54,76,20,24,105,42,19,83,59,21,28,84,37,21,84, 224,254,212,53,11,5,1,71,3,96,6,7,1,77,1,44, 88,85,14,4,70,32,41,254,116,1,107,70,24,9,77,42, 58,254,223,0,0,3,0,36,255,233,1,254,2,27,0,15, 0,24,0,33,0,0,1,50,23,22,21,20,7,6,35,34, 39,38,53,52,55,54,23,38,39,38,35,34,7,6,7,5, 33,22,23,22,51,50,55,54,1,16,152,57,29,102,56,79, 144,60,33,105,55,226,12,87,23,27,92,38,15,4,1,41, 254,216,11,80,26,31,91,38,15,2,27,129,65,91,167,71, 39,119,67,95,174,70,37,249,131,32,9,91,35,46,70,119, 35,12,89,33,255,255,0,69,255,241,1,65,2,12,16,15, 0,85,1,134,2,12,192,0,0,1,0,69,255,241,1,65, 2,217,0,17,0,0,33,35,53,6,7,6,35,34,39,53, 54,55,54,55,54,53,17,51,1,65,77,58,58,13,14,11, 21,72,31,3,3,59,84,95,93,14,3,3,85,1,21,2, 2,43,110,1,221,0,0,2,0,69,255,38,1,153,2,12, 0,13,0,31,0,0,33,21,20,23,22,51,50,55,21,6, 35,34,61,1,51,35,53,6,7,6,35,34,39,53,54,55, 54,55,54,53,17,51,1,65,32,13,23,3,17,15,13,137, 77,77,58,58,13,14,11,21,72,31,3,3,59,84,76,53, 11,5,1,71,3,109,109,95,93,14,3,3,85,1,21,2, 2,43,110,1,16,0,0,1,0,69,255,56,1,65,2,27, 0,17,0,0,19,51,21,54,55,54,51,50,23,21,6,7, 6,7,6,21,17,35,69,77,58,58,13,14,11,21,72,31, 3,3,59,84,2,12,95,93,14,3,3,85,1,21,2,2, 43,110,254,40,0,1,0,69,255,38,1,65,2,27,0,29, 0,0,23,17,51,21,54,55,54,51,50,23,21,6,7,6, 7,6,21,17,20,23,22,51,50,55,21,6,35,34,39,38, 69,77,58,58,13,14,11,21,72,31,3,3,59,32,13,23, 3,17,15,13,134,9,1,109,2,121,95,93,14,3,3,85, 1,21,2,2,43,110,254,164,53,11,5,1,71,3,96,6, 0,1,0,84,0,0,1,0,2,27,0,15,0,0,51,35, 17,52,55,54,51,50,23,21,38,35,34,15,1,21,168,84, 114,14,16,13,15,17,3,52,11,5,1,174,96,12,1,3, 71,1,32,28,9,0,255,255,0,84,0,0,1,0,2,27, 16,71,1,223,1,84,0,0,192,0,64,0,0,1,255,202, 255,40,1,203,2,27,0,61,0,0,55,21,20,7,6,35, 34,39,53,22,51,50,55,54,61,1,51,22,23,22,51,50, 55,54,53,52,47,2,38,39,38,53,52,55,54,51,50,23, 22,21,35,38,35,34,7,6,21,20,23,22,31,1,22,23, 22,21,20,7,6,35,34,118,114,14,16,13,15,17,3,52, 11,5,88,6,18,33,71,84,28,10,54,27,78,119,31,16, 84,49,68,145,35,10,88,3,102,82,23,6,66,14,17,80, 118,23,7,90,52,74,77,2,109,96,12,1,3,71,1,32, 14,23,230,47,20,35,47,16,19,46,19,8,19,29,51,28, 43,93,42,25,101,27,33,84,49,14,16,45,22,4,4,19, 28,70,21,27,96,44,26,0,0,2,0,0,255,38,1,2, 2,220,0,15,0,37,0,0,55,51,17,20,7,6,35,34, 39,53,22,51,50,55,54,53,19,21,35,17,35,17,35,53, 51,53,52,55,54,51,50,23,21,38,35,34,29,1,88,84, 114,14,16,13,15,17,3,52,11,5,170,87,83,70,70,74, 22,27,23,24,19,10,58,224,254,179,96,12,1,3,71,1, 32,14,23,2,88,68,254,56,1,200,68,89,88,24,7,5, 69,1,53,82,0,2,0,0,255,38,1,2,2,220,0,15, 0,37,0,0,55,51,17,20,7,6,35,34,39,53,22,51, 50,55,54,53,19,21,35,17,35,17,35,53,51,53,52,55, 54,51,50,23,21,38,35,34,29,1,88,84,114,14,16,13, 15,17,3,52,11,5,170,87,83,70,70,74,22,27,23,24, 19,10,58,224,254,179,96,12,1,3,71,1,32,14,23,2, 88,68,254,56,1,200,68,89,88,24,7,5,69,1,53,82, 0,1,0,0,255,38,1,2,2,220,0,23,0,0,19,52, 35,34,7,53,54,51,50,23,22,21,17,20,23,22,51,50, 55,21,6,35,38,39,87,58,10,19,24,23,91,25,7,32, 13,23,3,17,15,13,138,5,2,94,53,1,69,5,71,22, 26,253,79,53,11,5,1,71,3,7,102,0,255,255,0,14, 255,233,0,254,2,156,16,15,0,87,1,12,2,133,192,0, 0,1,0,14,255,38,0,254,2,156,0,23,0,0,19,21, 35,17,20,23,22,51,50,55,21,6,35,34,39,38,53,17, 35,53,51,53,51,21,254,86,22,9,15,25,15,39,29,89, 11,1,71,71,83,2,12,68,253,214,38,6,3,4,70,7, 67,7,9,2,79,68,144,144,255,255,0,65,255,233,1,226, 2,12,16,6,0,88,0,0,255,255,0,10,0,0,1,230, 2,12,16,15,0,89,1,240,2,12,192,0,255,255,0,6, 0,0,2,196,2,12,16,15,0,90,2,202,2,12,192,0, 255,255,0,20,0,0,1,222,2,230,16,15,0,92,1,242, 2,12,192,0,0,1,0,31,255,40,2,33,2,12,0,23, 0,0,41,1,53,1,33,53,33,21,1,33,21,20,23,22, 51,50,55,21,6,35,34,39,38,53,1,117,254,170,1,57, 254,220,1,135,254,201,1,69,32,13,23,3,17,15,13,134, 9,1,75,1,120,73,74,254,135,147,53,11,5,1,71,3, 96,6,7,0,0,1,0,36,0,0,1,208,2,14,0,11, 0,0,37,33,21,35,17,51,21,33,53,51,17,35,1,125, 254,251,84,83,1,6,83,83,236,236,2,14,218,218,253,242, 255,255,0,58,0,0,1,246,2,217,16,15,0,78,2,48, 2,217,192,0,0,2,0,26,255,38,2,70,2,138,0,15, 0,44,0,0,1,34,7,6,21,20,23,22,51,50,55,54, 53,52,39,38,23,53,52,55,54,51,50,23,21,38,35,34, 7,6,21,17,35,17,6,35,34,39,38,53,52,55,54,51, 50,1,10,84,42,27,70,36,47,82,40,24,71,33,110,86, 15,16,23,24,19,10,51,6,1,83,57,105,128,59,37,91, 57,80,104,1,205,81,51,71,122,54,27,81,50,69,131,51, 24,3,73,100,16,3,5,69,1,40,6,7,253,26,1,22, 83,108,68,99,161,77,49,0,0,1,0,20,2,79,1,51, 2,229,0,6,0,0,19,51,23,35,39,7,35,116,95,96, 63,81,79,64,2,229,150,96,96,0,0,1,0,19,2,79, 1,50,2,229,0,6,0,0,19,35,39,51,23,55,51,210, 95,96,63,81,79,64,2,79,150,96,96,0,255,255,0,92, 2,80,1,45,2,228,16,6,0,118,0,0,255,255,0,22, 2,80,0,231,2,228,16,6,0,67,0,0,0,1,0,15, 2,85,1,60,2,220,0,13,0,0,19,51,22,51,50,55, 54,53,51,6,35,34,39,38,15,59,8,84,77,13,1,59, 11,141,86,42,20,2,220,66,57,4,5,135,57,28,0,1, 0,115,2,100,0,219,2,204,0,3,0,0,19,21,35,53, 219,104,2,204,104,104,0,2,0,79,2,67,0,255,2,242, 0,16,0,32,0,0,19,50,31,1,22,21,20,7,6,35, 34,39,38,53,52,55,54,23,34,7,6,21,20,23,22,51, 50,55,54,53,52,39,38,167,50,26,9,3,43,21,24,48, 27,13,42,21,25,29,12,3,27,8,9,29,12,3,28,8, 2,242,43,23,11,11,49,26,12,42,21,25,47,27,13,44, 27,8,8,29,12,3,27,8,8,31,10,3,0,1,0,57, 255,51,1,9,0,0,0,19,0,0,59,1,6,7,6,21, 20,51,50,55,21,6,35,34,39,38,53,52,55,54,154,70, 73,14,7,72,37,26,48,28,33,36,63,74,11,41,31,15, 19,54,10,45,10,13,24,57,64,37,6,0,0,1,0,5, 2,101,1,63,2,205,0,21,0,0,1,51,6,35,34,39, 38,35,34,7,35,54,55,54,51,50,23,22,23,22,51,50, 1,5,58,15,74,21,64,35,14,23,10,58,16,59,5,6, 23,42,2,3,39,24,25,2,205,104,25,13,37,93,9,1, 17,1,1,18,0,2,255,221,2,78,1,92,2,228,0,3, 0,7,0,0,19,51,7,35,37,51,7,35,61,113,149,60, 1,14,113,149,60,2,228,150,150,150,255,255,254,201,2,80, 255,154,2,228,16,7,0,67,254,179,0,0,255,255,255,15, 2,80,255,224,2,228,16,7,0,118,254,179,0,0,255,255, 254,199,2,79,255,230,2,229,16,7,1,239,254,179,0,0, 255,255,254,184,2,101,255,242,2,205,16,7,1,247,254,179, 0,0,255,255,254,207,2,119,255,225,2,189,16,7,0,113, 254,179,0,0,255,255,254,194,2,85,255,239,2,220,16,7, 1,243,254,179,0,0,255,255,255,38,2,100,255,142,2,204, 16,7,1,244,254,179,0,0,255,255,254,209,2,100,255,219, 2,203,16,7,0,106,254,179,0,0,255,255,255,2,2,67, 255,178,2,242,16,7,1,245,254,179,0,0,255,255,254,144, 2,78,0,15,2,228,16,7,1,248,254,179,0,0,255,255, 254,198,2,79,255,229,2,229,16,7,1,240,254,179,0,0, 0,2,254,144,2,78,0,15,2,228,0,3,0,7,0,0, 3,23,35,39,35,23,35,39,81,96,60,149,61,96,60,149, 2,228,150,150,150,150,255,255,254,194,2,85,255,239,2,220, 16,15,1,243,255,254,5,49,192,0,255,255,1,198,2,71, 2,23,2,228,16,15,2,7,1,77,5,43,192,0,0,1, 255,54,2,71,255,135,2,228,0,10,0,0,3,51,21,20, 35,53,50,55,54,53,35,202,81,81,28,8,5,41,2,228, 69,88,42,14,11,20,255,255,1,198,2,71,2,23,2,228, 16,71,2,7,1,77,0,0,192,0,64,0,0,1,255,28, 254,227,255,128,255,196,0,12,0,0,7,51,21,20,7,6, 35,53,50,53,52,53,35,228,100,59,17,24,55,55,60,103, 88,25,8,38,78,4,4,0,255,255,254,218,255,42,255,210, 0,0,16,7,0,122,254,179,0,0,255,255,254,236,255,51, 255,188,0,0,16,7,1,246,254,179,0,0,0,1,0,39, 2,68,0,156,3,12,0,3,0,0,19,7,39,55,156,106, 11,66,2,204,136,64,136,0,0,1,0,22,255,62,0,139, 0,6,0,3,0,0,23,55,23,7,22,106,11,66,130,136, 64,136,0,1,0,129,255,3,1,29,255,181,0,17,0,0, 5,20,15,1,34,35,34,61,1,51,22,21,23,22,51,54, 63,1,1,29,27,27,9,19,74,76,1,6,5,15,21,2, 5,192,47,9,5,79,99,106,2,21,12,1,5,18,255,255, 0,110,255,109,0,215,2,12,16,6,0,30,0,0,0,1, 0,174,2,73,0,255,2,208,0,3,0,0,1,7,35,39, 0,255,22,41,18,2,208,135,135,0,255,255,0,75,2,67, 1,85,3,75,16,38,2,16,253,123,16,6,0,106,45,223, 255,255,0,8,0,0,2,166,2,208,16,38,2,16,196,0, 16,6,2,27,0,0,0,1,0,89,0,200,0,188,1,48, 0,15,0,0,19,50,23,22,21,20,7,6,35,34,39,38, 53,52,55,54,138,32,13,4,30,9,10,31,13,5,30,9, 1,47,30,10,11,34,14,4,30,10,12,34,13,4,255,255, 255,212,0,0,2,102,2,208,16,39,2,16,255,38,0,0, 16,6,2,31,0,0,255,255,255,185,0,0,2,113,2,208, 16,39,2,16,255,11,0,0,16,6,2,33,0,0,255,255, 255,194,0,0,0,163,2,208,16,39,2,16,255,20,0,0, 16,6,2,35,0,0,255,255,255,240,255,248,2,222,2,208, 16,39,2,16,255,66,0,0,16,6,2,41,0,0,255,255, 255,158,255,254,2,151,2,208,16,39,2,16,254,240,0,0, 16,6,2,46,0,0,255,255,255,250,255,255,2,192,2,208, 16,39,2,16,255,76,0,0,16,6,2,50,0,0,255,255, 255,223,255,248,1,14,3,95,16,39,2,16,255,145,0,143, 16,38,0,106,193,243,16,6,2,66,0,0,0,2,0,8, 0,0,2,166,2,204,0,7,0,15,0,0,33,35,39,33, 7,35,1,51,19,3,38,39,6,7,6,7,2,166,106,84, 254,212,78,102,1,20,102,72,104,13,9,16,61,26,13,218, 218,2,204,254,90,1,24,37,31,86,156,68,38,0,0,3, 0,74,0,0,2,103,2,204,0,22,0,35,0,44,0,0, 37,20,15,1,6,35,33,17,33,50,31,1,22,23,22,21, 20,7,6,7,22,23,22,39,52,39,38,39,38,43,1,21, 51,50,55,54,23,52,39,38,43,1,21,51,50,2,103,62, 13,60,134,254,240,1,12,148,59,16,2,2,11,85,7,8, 37,21,77,129,51,9,9,35,70,144,156,63,27,72,30,109, 31,42,166,178,170,212,94,59,11,48,2,204,80,27,6,5, 36,28,96,48,4,4,12,14,53,219,69,25,5,2,9,216, 8,20,236,98,19,5,246,0,0,1,0,82,0,0,2,54, 2,204,0,5,0,0,1,33,17,35,17,33,2,54,254,124, 96,1,228,2,120,253,136,2,204,0,0,2,0,13,255,255, 2,171,2,204,0,5,0,14,0,0,33,37,4,35,1,51, 19,3,38,39,38,39,6,7,3,2,171,254,226,254,143,15, 1,20,102,154,169,12,9,8,10,11,27,152,2,2,2,204, 253,136,1,188,32,27,17,38,65,73,254,92,0,1,0,80, 0,0,2,102,2,204,0,11,0,0,41,1,17,33,21,33, 21,33,21,33,21,33,2,102,253,234,2,6,254,88,1,140, 254,116,1,184,2,204,84,220,84,244,0,1,0,35,0,0, 2,89,2,204,0,11,0,0,41,1,53,1,54,55,33,53, 33,21,1,33,2,89,253,202,1,112,43,31,254,112,2,0, 254,68,1,200,88,1,202,55,31,84,84,253,220,0,0,1, 0,65,0,0,2,113,2,204,0,11,0,0,33,35,17,33, 17,35,17,51,17,33,17,51,2,113,94,254,140,94,94,1, 116,94,1,82,254,174,2,204,254,218,1,38,0,3,0,45, 255,243,2,217,2,201,0,19,0,36,0,40,0,0,1,20, 7,6,35,34,39,38,39,38,53,52,55,54,51,50,23,22, 23,20,5,20,23,22,51,50,55,54,53,52,47,1,38,35, 34,7,6,5,33,53,33,2,217,106,93,143,90,75,80,48, 49,108,90,144,139,96,104,3,253,180,86,64,94,149,66,31, 89,29,54,72,162,57,27,1,156,254,176,1,80,1,93,170, 102,89,36,37,79,77,125,184,102,85,86,92,175,5,15,141, 76,55,130,62,89,152,78,21,33,141,65,107,82,0,0,1, 0,69,0,0,0,163,2,204,0,3,0,0,51,35,17,51, 163,94,94,2,204,0,0,1,0,74,0,0,2,154,2,204, 0,11,0,0,33,35,1,7,21,35,17,51,17,1,51,1, 2,154,126,254,254,114,94,94,1,98,120,254,222,1,106,114, 248,2,204,254,158,1,98,254,222,0,0,1,0,8,255,255, 2,166,2,188,0,10,0,0,33,35,3,48,23,3,6,7, 35,1,51,2,166,106,240,1,154,32,37,102,1,20,102,2, 115,1,254,77,87,104,2,188,0,1,0,64,0,0,2,236, 2,204,0,15,0,0,33,35,17,3,35,3,17,35,17,51, 19,22,23,55,19,51,2,236,92,208,86,206,92,144,168,27, 7,38,172,128,2,88,253,168,2,98,253,158,2,204,254,6, 69,37,114,1,242,0,0,1,0,56,0,0,2,108,2,204, 0,9,0,0,33,35,1,17,35,17,51,1,17,51,2,108, 96,254,136,92,98,1,120,90,2,50,253,206,2,204,253,206, 2,50,0,3,0,65,255,255,2,100,2,187,0,3,0,7, 0,11,0,0,1,33,53,33,3,33,53,33,19,33,53,33, 2,83,253,238,2,18,57,254,103,1,153,73,253,222,2,34, 2,105,82,254,131,82,254,112,82,0,0,2,0,50,255,248, 2,222,2,190,0,17,0,35,0,0,19,52,55,54,51,50, 23,22,23,22,21,20,7,6,35,34,39,38,55,20,23,22, 51,50,55,54,53,52,39,38,39,38,35,34,7,6,50,111, 90,141,88,78,77,50,49,106,94,142,181,94,67,96,86,64, 94,149,66,31,102,2,3,55,82,161,58,27,1,82,182,99, 82,37,38,80,78,122,167,99,87,124,91,128,138,73,54,127, 61,87,160,75,2,2,38,138,64,0,0,1,0,80,255,255, 2,128,2,188,0,7,0,0,33,35,17,33,17,35,17,33, 2,128,94,254,140,94,2,48,2,105,253,151,2,188,0,2, 0,78,255,255,2,112,2,188,0,14,0,25,0,0,1,20, 7,34,43,1,17,35,17,33,50,23,22,23,22,7,52,39, 38,43,1,21,51,50,55,54,2,112,252,8,8,184,94,1, 14,127,52,16,14,67,98,82,26,62,184,186,141,22,5,1, 242,206,7,254,227,2,188,28,8,12,58,100,91,27,6,251, 86,19,0,1,0,40,255,254,2,94,2,189,0,14,0,0, 5,33,53,19,39,53,33,21,33,22,23,22,23,3,33,2, 94,253,202,236,202,2,0,254,112,37,116,32,21,242,1,200, 1,86,1,35,243,82,82,38,142,38,25,254,217,0,0,1, 0,39,255,254,2,95,2,187,0,7,0,0,1,35,17,35, 17,35,53,33,2,95,238,94,236,2,56,2,105,253,150,2, 106,82,0,1,0,21,255,254,2,151,2,187,0,11,0,0, 9,1,17,35,17,1,51,23,22,23,54,55,2,151,254,232, 92,254,242,112,159,29,21,62,151,2,186,254,110,254,214,1, 42,1,146,243,46,39,103,225,0,3,0,29,255,254,2,176, 2,191,0,21,0,30,0,41,0,0,1,20,7,6,35,21, 35,53,34,39,38,53,52,55,54,51,53,51,21,50,23,22, 7,52,39,38,39,17,54,55,54,5,17,6,7,6,7,6, 21,20,23,22,2,176,82,82,124,83,124,82,82,93,81,115, 81,135,83,71,91,92,46,59,112,53,32,254,232,111,54,23, 7,2,91,46,1,88,122,75,77,71,71,77,74,123,129,81, 69,80,80,91,77,106,112,56,28,6,254,99,11,84,50,145, 1,157,11,80,35,43,16,17,117,59,29,0,0,1,0,36, 0,0,2,168,2,176,0,21,0,0,33,35,3,7,49,15, 1,35,1,3,51,23,22,23,54,55,54,55,54,55,51,3, 2,168,116,207,19,14,176,112,1,16,238,109,153,22,9,15, 13,13,120,21,13,102,246,1,36,31,21,240,1,103,1,72, 211,32,18,27,16,19,154,27,18,254,188,0,0,1,0,52, 255,253,2,182,2,186,0,35,0,0,1,20,7,6,7,6, 43,1,21,35,53,35,34,39,38,39,38,53,17,23,17,20, 23,22,59,1,17,51,17,51,50,55,54,53,17,55,2,182, 40,40,64,32,74,24,94,24,105,48,13,14,70,90,67,35, 60,26,86,26,113,31,18,90,1,100,88,50,53,15,9,144, 144,27,7,11,57,113,1,86,2,254,184,103,29,15,1,219, 254,37,59,32,56,1,72,2,0,1,0,42,255,255,2,192, 2,181,0,41,0,0,19,52,55,54,51,50,23,22,23,22, 21,20,7,6,7,51,21,33,53,54,55,54,53,52,39,38, 35,34,7,6,21,20,23,22,23,21,33,53,51,38,39,38, 47,87,91,141,110,77,111,31,9,142,17,19,176,254,238,92, 46,47,83,65,97,123,65,46,115,26,31,254,248,174,143,22, 4,1,95,139,99,103,48,72,133,41,43,171,91,11,10,73, 77,36,74,77,90,131,76,60,104,71,95,156,84,20,14,77, 73,85,136,28,255,255,255,239,0,0,0,249,3,136,16,39, 0,106,255,209,0,189,16,6,2,35,0,0,255,255,0,21, 255,254,2,151,3,136,16,39,0,106,0,178,0,189,16,6, 2,46,0,0,255,255,0,48,255,243,2,71,2,208,16,38, 2,16,86,0,16,6,2,58,0,0,255,255,0,39,255,246, 1,220,2,208,16,38,2,16,63,0,16,6,2,62,0,0, 255,255,0,24,255,74,1,242,2,208,16,38,2,16,91,0, 16,6,2,64,0,0,255,255,0,56,255,248,1,14,2,208, 16,38,2,16,143,0,16,6,2,66,0,0,255,255,0,40, 255,242,1,222,3,95,16,39,2,16,0,48,0,143,16,38, 0,106,96,243,16,6,2,78,0,0,0,2,0,48,255,243, 2,71,2,18,0,34,0,50,0,0,5,34,39,38,61,1, 38,53,7,6,7,6,35,34,39,38,53,52,55,54,55,54, 51,22,31,1,53,51,17,20,51,50,55,23,6,3,52,39, 38,35,34,7,6,21,20,23,22,51,50,55,54,1,247,51, 12,2,1,17,14,41,39,50,213,14,1,21,33,97,35,42, 111,51,8,72,21,11,12,21,43,116,41,34,73,127,15,2, 122,10,10,116,27,7,13,41,8,10,9,5,5,27,17,17, 16,241,16,17,53,67,104,32,12,2,70,16,78,254,91,31, 9,69,21,1,23,67,66,55,156,19,21,177,14,1,126,33, 0,2,0,50,255,58,1,248,2,220,0,24,0,50,0,0, 37,20,7,6,35,34,39,38,39,21,35,17,52,55,54,55, 54,51,50,23,22,21,6,7,22,3,50,55,54,53,52,39, 38,43,1,53,51,50,55,54,53,52,39,38,35,34,7,6, 21,19,22,1,248,81,52,73,86,49,13,14,86,35,11,15, 53,86,137,45,18,8,96,158,224,105,23,6,39,47,76,50, 42,94,30,10,34,33,48,59,41,27,1,31,200,119,58,37, 40,11,15,250,2,176,112,52,16,15,47,98,39,51,122,34, 30,254,214,92,23,27,71,30,35,74,76,26,32,56,28,30, 41,27,106,254,170,83,0,1,0,25,255,58,2,11,2,18, 0,18,0,0,1,3,21,35,53,3,38,35,34,7,39,52, 55,50,23,22,23,27,1,2,11,188,86,167,9,16,13,13, 6,42,47,20,20,19,118,144,2,6,254,26,230,230,1,152, 14,6,70,7,5,18,20,52,254,208,1,126,0,2,0,37, 255,240,2,17,2,206,0,23,0,42,0,0,37,20,7,6, 35,34,39,38,53,52,55,54,51,50,23,39,53,33,21,33, 23,22,23,22,39,34,7,6,7,20,23,22,59,1,50,55, 54,55,54,53,52,39,38,2,17,120,53,81,105,68,65,148, 38,27,10,24,211,1,142,254,243,175,56,20,76,248,90,42, 20,2,95,24,29,28,47,22,54,12,3,82,33,250,190,53, 23,68,67,123,191,55,11,4,151,72,72,127,41,22,77,53, 84,43,55,142,34,8,16,40,92,19,19,122,41,17,0,1, 0,39,255,246,1,220,2,20,0,45,0,0,37,6,7,6, 35,34,53,52,55,38,53,52,55,54,55,51,50,23,22,23, 35,38,39,38,35,34,21,22,23,22,59,1,21,35,34,7, 6,7,20,23,22,51,50,55,54,55,1,220,15,106,42,60, 214,102,102,119,39,56,9,148,45,15,6,76,7,99,21,23, 129,9,61,23,35,46,46,92,25,8,3,104,12,13,101,36, 11,2,136,109,27,10,146,95,30,29,96,111,26,8,1,78, 28,40,60,13,3,85,66,15,6,59,48,16,23,74,9,1, 45,14,17,0,0,1,0,38,255,62,1,184,2,206,0,36, 0,0,5,20,7,39,54,53,52,39,38,35,34,39,38,53, 52,55,54,55,35,53,33,21,6,7,6,21,20,23,22,23, 22,23,22,23,22,23,22,1,184,38,76,34,30,13,23,87, 92,77,135,47,58,224,1,100,129,79,72,46,43,52,14,18, 75,26,2,3,31,42,55,97,28,69,33,46,10,4,61,50, 113,192,146,51,37,72,60,73,121,111,117,74,40,34,10,2, 2,6,21,2,3,31,0,1,0,24,255,74,1,242,2,19, 0,30,0,0,5,39,17,52,39,38,35,34,21,17,35,17, 52,35,34,7,39,54,51,50,31,2,54,51,50,23,22,23, 22,21,1,242,88,10,25,73,138,88,22,6,10,14,30,31, 49,16,5,1,67,97,147,26,3,1,1,182,24,1,218,53, 27,58,170,254,228,1,158,37,3,72,11,55,31,15,100,124, 17,18,7,44,0,3,0,45,255,244,1,234,2,218,0,15, 0,22,0,31,0,0,1,50,19,22,21,16,7,6,35,34, 39,38,39,38,53,18,23,34,17,33,52,39,38,19,33,20, 23,22,51,50,55,54,1,12,201,19,2,100,49,73,139,50, 11,8,15,7,216,137,1,19,29,29,58,254,237,80,24,33, 98,26,14,2,218,254,206,31,33,254,244,70,34,128,30,38, 72,104,1,108,66,255,0,108,76,72,254,184,209,45,14,119, 65,0,0,1,0,56,255,248,1,14,2,8,0,16,0,0, 55,20,23,22,59,1,54,55,23,6,35,34,39,38,53,17, 51,144,19,7,19,7,16,28,30,46,44,107,15,2,88,136, 27,20,10,2,13,81,21,108,15,18,1,131,0,1,0,66, 0,0,1,240,2,6,0,11,0,0,33,35,3,7,21,35, 17,51,21,55,51,7,1,240,108,172,62,88,88,208,114,198, 1,10,60,206,2,6,210,210,192,0,0,1,0,30,255,246, 2,44,2,220,0,40,0,0,37,6,35,34,47,1,53,39, 38,39,6,7,6,7,35,19,38,39,38,39,38,35,34,15, 1,55,54,51,50,23,22,23,22,31,1,19,23,22,51,50, 55,2,44,48,33,50,18,13,88,23,11,25,91,18,12,96, 198,24,12,13,20,13,26,19,24,11,10,33,23,53,32,8, 10,32,32,9,152,14,9,19,15,19,14,24,48,29,1,236, 64,54,87,249,48,36,2,8,69,17,19,12,7,6,2,82, 12,30,7,12,39,89,25,254,102,28,19,11,0,1,0,78, 255,56,1,242,2,6,0,28,0,0,5,34,39,38,39,21, 35,17,51,21,20,23,22,23,22,51,50,55,54,55,54,61, 1,51,17,35,53,6,7,1,32,65,39,8,10,88,88,12, 19,61,13,15,35,33,33,8,17,86,80,39,58,12,42,9, 13,252,2,206,218,120,35,61,13,3,22,22,25,55,106,220, 253,250,62,61,10,0,0,1,0,14,0,0,1,232,2,6, 0,10,0,0,1,3,35,3,51,19,22,23,54,55,19,1, 232,196,82,196,92,115,17,12,30,4,114,2,6,253,250,2, 6,254,194,52,44,89,9,1,60,0,0,1,0,15,255,62, 1,185,2,206,0,59,0,0,5,20,7,39,54,55,54,53, 52,39,38,43,1,34,39,38,53,52,53,54,55,54,55,38, 39,38,53,52,55,54,55,35,53,33,21,35,34,7,6,21, 20,23,22,59,1,21,35,34,7,6,21,20,23,22,51,50, 23,22,23,20,1,185,39,74,32,2,1,19,18,57,19,144, 59,31,4,50,53,61,75,32,15,52,12,12,100,1,116,166, 50,34,22,91,24,49,82,110,96,53,25,77,38,47,74,31, 69,5,39,61,94,28,81,25,2,12,30,7,9,78,40,56, 7,7,85,47,47,9,11,63,30,36,70,46,10,6,70,70, 56,37,39,76,28,8,64,68,31,43,77,34,17,7,11,80, 5,0,0,2,0,34,255,243,2,6,2,18,0,14,0,30, 0,0,5,34,39,38,53,52,55,54,50,23,22,21,20,7, 6,39,50,55,54,53,52,39,38,35,34,7,6,21,20,23, 22,1,20,147,61,34,68,67,214,67,68,93,61,88,101,36, 15,73,33,46,101,36,15,42,40,12,117,65,90,135,68,67, 67,68,135,151,73,48,74,100,42,56,129,47,22,103,42,53, 98,49,51,0,0,1,0,53,255,252,2,105,2,8,0,25, 0,0,37,6,35,34,39,38,53,17,35,17,7,19,35,39, 33,21,35,17,20,23,22,51,50,55,54,55,2,105,48,26, 55,17,18,236,94,1,70,1,2,40,64,11,7,12,12,13, 3,2,14,18,29,29,60,1,80,254,62,2,1,196,70,70, 254,178,39,8,5,9,1,2,0,2,0,57,255,56,2,29, 2,20,0,20,0,36,0,0,1,20,7,6,7,6,7,6, 35,34,39,17,35,17,52,55,54,51,50,23,22,7,52,39, 38,35,34,7,6,21,20,23,22,51,50,55,54,2,29,23, 30,34,16,27,43,71,99,53,88,71,71,98,140,65,39,90, 44,44,66,67,41,44,43,43,66,65,45,44,1,14,98,46, 58,26,12,15,25,71,254,251,1,214,138,62,62,106,65,97, 96,50,50,50,47,101,100,49,49,48,53,0,0,1,0,22, 255,74,1,245,2,24,0,46,0,0,1,35,52,39,38,35, 34,7,6,21,20,23,22,23,22,23,22,23,22,21,20,7, 39,54,55,54,53,52,39,38,35,38,39,38,47,1,38,39, 38,53,52,55,54,55,50,23,22,1,245,91,83,25,32,87, 43,22,81,24,34,17,90,87,26,23,48,90,26,14,1,72, 5,8,90,48,20,27,8,78,20,5,34,76,146,120,62,41, 1,68,98,28,8,78,40,66,104,46,13,11,5,8,12,30, 25,48,44,110,32,52,56,2,6,27,4,1,4,24,11,19, 6,53,104,28,29,83,58,117,2,81,54,0,0,2,0,34, 255,243,2,78,2,18,0,18,0,34,0,0,5,34,39,38, 53,52,55,54,51,50,23,33,21,35,22,21,20,7,6,39, 50,55,54,53,52,39,38,35,34,7,6,21,20,23,22,1, 20,147,61,34,68,67,107,31,19,1,8,136,64,93,61,88, 101,36,15,73,33,46,101,36,15,42,40,12,117,65,90,135, 68,67,4,82,82,102,151,73,48,74,100,42,56,129,47,22, 103,42,53,98,49,51,0,1,0,42,255,252,1,238,2,6, 0,23,0,0,1,35,17,20,23,22,23,22,51,50,55,23, 6,35,34,39,38,39,38,53,17,35,53,33,1,238,200,11, 3,5,9,22,13,20,19,35,33,80,26,2,2,12,164,1, 196,1,194,254,214,47,13,3,3,6,5,79,10,46,5,5, 30,62,1,50,68,0,0,1,0,40,255,242,1,222,2,6, 0,29,0,0,37,20,7,6,7,6,35,34,39,38,39,38, 53,17,51,17,20,23,22,23,22,51,50,55,54,55,52,53, 17,51,1,222,32,13,47,35,89,95,35,47,13,32,88,20, 6,9,36,61,60,35,32,3,88,198,97,51,16,28,20,20, 28,16,49,99,1,64,254,226,98,29,10,6,27,27,22,91, 12,18,1,30,0,2,0,46,255,56,2,185,2,10,0,36, 0,47,0,0,55,20,23,22,59,1,17,51,50,23,22,21, 20,7,6,7,6,43,1,21,35,53,35,34,39,38,39,38, 53,52,55,54,55,23,6,7,6,5,52,39,38,43,1,17, 51,50,55,54,130,69,48,66,20,88,137,78,61,108,2,2, 55,77,32,88,22,142,73,20,12,18,98,29,33,42,94,20, 4,1,227,69,43,60,20,24,95,46,27,254,91,54,38,1, 195,93,73,107,143,77,1,2,36,190,190,100,28,34,52,46, 134,88,25,17,68,60,91,20,25,101,50,31,254,151,76,44, 0,1,0,14,255,44,2,61,2,26,0,32,0,0,5,6, 43,1,34,47,1,3,35,19,3,38,39,38,35,6,35,53, 55,50,31,2,19,51,3,23,22,23,22,51,50,55,2,61, 25,26,8,66,49,97,184,104,234,149,15,15,11,17,13,11, 56,58,33,7,131,153,96,195,131,6,14,7,25,14,20,200, 12,89,197,254,238,1,104,1,4,28,6,4,4,78,6,49, 11,244,1,28,254,154,251,14,12,10,6,0,0,1,0,42, 255,56,2,108,2,6,0,27,0,0,37,20,7,6,35,21, 35,53,34,39,38,53,17,51,17,20,23,22,51,17,51,17, 50,55,54,53,17,51,2,108,157,40,49,86,199,38,9,90, 68,33,55,86,113,30,13,90,214,169,37,10,198,198,145,32, 39,1,48,254,236,121,33,16,1,172,254,84,78,35,57,1, 20,0,0,1,0,36,255,247,2,192,2,14,0,55,0,0, 37,50,55,54,53,52,39,55,22,23,22,21,20,15,1,6, 35,34,39,6,35,34,39,38,53,52,55,54,55,54,55,23, 6,7,6,7,6,21,20,23,22,51,54,55,54,55,54,61, 1,51,21,20,23,22,23,22,1,254,90,17,3,108,80,51, 36,25,99,9,34,48,96,48,46,98,117,48,25,51,3,4, 25,29,80,69,26,1,2,10,72,17,20,41,14,6,10,28, 84,28,22,17,10,63,122,23,27,148,117,26,41,106,74,64, 166,60,5,19,90,90,114,59,77,99,101,7,7,48,23,26, 69,94,7,7,40,48,137,28,7,2,11,4,9,28,36,223, 223,36,28,20,3,2,255,255,255,223,255,248,1,14,2,190, 16,38,0,106,193,243,16,6,2,66,0,0,255,255,0,40, 255,242,1,222,2,190,16,38,0,106,96,243,16,6,2,78, 0,0,255,255,0,34,255,244,2,6,2,208,16,38,2,16, 64,0,16,6,2,72,0,0,255,255,0,40,255,242,1,222, 2,208,16,38,2,16,53,0,16,6,2,78,0,0,255,255, 0,36,255,247,2,192,2,208,16,39,2,16,0,158,0,0, 16,6,2,82,0,0,255,255,0,90,0,0,2,101,3,149, 16,39,0,67,0,216,0,177,16,6,0,40,0,0,0,3, 0,79,0,0,2,90,3,146,0,11,0,15,0,19,0,0, 19,21,33,21,33,17,33,21,33,21,33,21,1,21,35,53, 33,21,35,53,172,1,174,253,245,1,249,254,100,1,141,254, 246,104,1,10,104,1,76,250,82,2,217,82,233,82,2,70, 103,103,103,103,0,1,0,28,255,108,2,206,2,216,0,32, 0,0,33,20,7,6,7,6,43,1,7,53,51,54,55,53, 19,52,39,35,17,35,3,35,53,33,21,35,21,51,50,23, 22,29,1,2,204,38,12,18,35,63,1,81,99,52,5,1, 66,238,93,1,199,1,234,197,232,99,44,22,71,34,11,10, 21,1,66,10,56,10,1,65,53,4,254,140,2,136,80,80, 194,75,37,44,1,0,0,2,0,90,0,0,2,67,3,149, 0,5,0,9,0,0,51,35,17,33,21,33,19,51,7,35, 183,93,1,233,254,116,143,113,149,60,2,217,82,1,14,148, 0,1,0,48,255,233,2,165,2,229,0,36,0,0,19,22, 23,22,51,50,55,54,55,54,55,51,2,33,34,39,38,53, 52,55,54,51,50,23,35,38,39,38,39,34,7,6,7,6, 7,33,21,142,8,98,56,74,109,51,6,4,22,11,96,33, 254,245,141,82,106,102,82,149,238,43,95,15,38,54,90,126, 61,22,10,5,2,1,108,1,76,163,71,39,77,8,9,42, 71,254,223,85,109,185,183,111,91,238,75,35,44,2,112,39, 50,21,23,82,255,255,0,48,255,233,2,109,2,229,16,6, 0,54,0,0,255,255,0,100,0,0,0,194,2,217,16,6, 0,44,0,0,255,255,0,8,0,0,1,18,3,140,16,39, 0,106,255,234,0,193,16,6,0,44,0,0,255,255,0,17, 255,233,1,170,2,217,16,6,0,45,0,0,0,2,0,83, 0,0,3,254,2,217,0,24,0,35,0,0,33,3,35,20, 7,2,7,6,35,53,50,55,54,39,53,33,17,51,23,22, 23,20,7,6,35,55,52,39,38,43,1,21,51,50,55,54, 2,2,1,225,3,19,139,20,24,82,21,9,1,1,157,144, 62,187,22,56,57,102,122,71,26,34,191,191,65,32,34,2, 135,220,54,254,186,41,6,94,205,91,177,162,254,198,3,23, 181,88,59,61,207,87,28,11,251,35,36,0,0,2,0,83, 0,0,3,204,2,217,0,19,0,30,0,0,33,17,33,17, 35,17,51,17,33,17,51,17,51,23,22,23,20,7,6,35, 55,52,39,38,43,1,21,51,50,55,54,1,225,254,208,94, 93,1,49,93,127,62,187,22,56,57,102,122,71,26,34,174, 174,65,32,34,1,76,254,180,2,217,254,197,1,59,254,198, 3,23,181,88,59,61,207,87,28,11,251,35,36,0,0,1, 0,28,0,0,2,206,2,216,0,19,0,0,1,51,50,23, 22,21,17,35,17,52,39,35,17,35,3,35,53,33,21,35, 1,65,232,99,44,22,93,66,238,93,1,199,1,234,197,1, 198,75,37,44,254,214,1,59,53,4,254,140,2,136,80,80, 0,2,0,79,0,0,2,146,3,149,0,10,0,14,0,0, 51,35,17,51,17,1,51,9,1,35,1,19,51,7,35,172, 93,93,1,107,120,254,100,1,159,110,254,136,186,113,149,60, 2,217,254,197,1,59,254,158,254,137,1,68,2,81,148,0, 0,2,0,76,0,0,2,134,3,149,0,9,0,13,0,0, 19,51,17,1,51,17,35,17,1,35,1,23,35,39,76,88, 1,125,101,88,254,135,105,1,38,96,60,149,2,217,253,172, 2,84,253,39,2,79,253,177,3,149,148,148,0,2,0,26, 0,0,2,107,3,136,0,7,0,21,0,0,51,35,55,3, 51,27,1,51,37,51,22,51,50,55,54,53,51,6,35,34, 39,38,252,113,129,242,113,185,184,111,254,65,59,7,85,77, 13,1,59,11,141,86,42,20,244,1,229,254,133,1,123,175, 66,57,4,5,135,57,28,0,0,1,0,83,255,121,2,133, 2,217,0,11,0,0,33,21,35,53,35,17,51,17,33,17, 51,17,1,148,80,241,94,1,118,94,135,135,2,217,253,121, 2,135,253,39,255,255,0,17,0,0,2,141,2,217,16,6, 0,36,0,0,0,2,0,79,0,0,2,112,2,217,0,16, 0,27,0,0,37,20,7,6,7,6,35,33,17,33,21,33, 21,51,32,23,20,5,51,50,55,54,55,52,39,38,43,1, 2,111,47,5,4,57,102,254,183,1,233,254,116,180,1,10, 5,254,61,227,65,32,32,2,34,32,65,227,218,88,59,5, 5,61,2,217,82,212,207,5,141,35,38,62,63,38,35,0, 255,255,0,79,0,0,2,111,2,217,16,6,0,37,0,0, 0,1,0,79,0,0,2,56,2,217,0,5,0,0,51,35, 17,33,21,33,172,93,1,233,254,116,2,217,82,0,0,2, 0,34,255,121,3,10,2,217,0,5,0,21,0,0,37,33, 17,33,21,6,7,54,55,54,39,53,33,17,51,21,35,53, 33,21,35,53,1,6,1,75,254,250,6,199,85,19,8,1, 1,194,91,80,253,184,80,82,2,53,228,238,107,39,212,86, 158,160,253,113,209,135,135,209,0,1,0,79,0,0,2,90, 2,217,0,11,0,0,19,21,33,21,33,17,33,21,33,21, 33,21,172,1,174,253,245,1,249,254,100,1,141,1,76,250, 82,2,217,82,233,82,0,1,0,63,0,0,3,180,2,217, 0,17,0,0,9,1,35,9,1,51,19,17,51,17,19,51, 9,1,35,1,17,35,1,203,254,226,110,1,69,254,229,116, 238,93,238,116,254,229,1,69,118,254,234,93,1,68,254,188, 1,119,1,98,254,204,1,52,254,204,1,52,254,158,254,137, 1,68,254,188,0,1,0,48,255,233,2,109,2,229,0,57, 0,0,1,53,51,50,55,54,53,52,39,38,35,34,7,6, 21,35,54,55,54,51,50,23,22,23,22,21,20,7,22,23, 22,21,20,7,6,7,6,35,34,39,38,39,51,23,22,23, 22,51,50,55,54,55,54,53,52,39,38,35,1,1,88,73, 52,33,72,39,52,143,31,8,88,1,122,60,84,157,66,24, 8,4,105,115,14,1,58,11,11,73,132,169,76,42,1,88, 3,7,28,51,117,89,45,44,7,1,51,48,64,1,65,82, 60,40,37,73,32,18,98,23,27,145,54,27,94,33,41,22, 24,108,45,43,106,12,13,84,63,11,9,56,104,57,94,38, 41,33,61,31,31,56,7,7,49,42,39,0,0,1,0,79, 0,0,2,137,2,217,0,9,0,0,19,51,17,1,51,17, 35,17,1,35,79,88,1,125,101,88,254,135,105,2,217,253, 165,2,91,253,39,2,86,253,170,0,0,2,0,79,0,0, 2,137,3,156,0,9,0,23,0,0,19,51,17,1,51,17, 35,17,1,35,19,51,22,51,50,55,54,53,51,6,35,34, 39,38,79,88,1,125,101,88,254,135,105,134,59,8,84,77, 13,1,59,11,141,86,42,20,2,217,253,165,2,91,253,39, 2,86,253,170,3,156,66,57,4,5,135,57,28,0,0,1, 0,79,0,0,2,109,2,217,0,10,0,0,51,35,17,51, 17,1,51,9,1,35,1,172,93,93,1,49,111,254,167,1, 122,124,254,187,2,217,254,206,1,50,254,167,254,128,1,77, 0,1,0,33,255,246,2,82,2,217,0,16,0,0,1,33, 20,7,2,7,6,35,53,50,55,54,39,53,33,17,35,1, 244,254,250,3,19,144,19,20,83,20,9,1,1,194,94,2, 135,223,54,254,173,36,5,94,216,91,175,163,253,39,0,1, 0,79,0,0,2,253,2,217,0,12,0,0,33,35,3,17, 35,17,51,27,1,51,17,35,17,1,216,98,207,88,129,216, 212,129,88,2,99,253,157,2,217,253,133,2,123,253,39,2, 99,0,0,1,0,79,0,0,2,128,2,217,0,11,0,0, 1,33,17,35,17,51,17,33,17,51,17,35,2,34,254,139, 94,93,1,118,94,94,1,76,254,180,2,217,254,197,1,59, 253,39,255,255,0,38,255,233,2,230,2,229,16,6,0,50, 0,0,0,1,0,79,0,0,2,128,2,217,0,7,0,0, 1,33,17,35,17,33,17,35,2,34,254,139,94,2,49,94, 2,135,253,121,2,217,253,39,0,2,0,79,0,0,2,93, 2,217,0,12,0,24,0,0,19,17,35,17,33,50,23,22, 21,20,7,6,35,39,51,50,55,54,53,52,47,1,38,43, 1,172,93,1,45,161,47,17,63,58,83,229,194,102,30,10, 79,34,14,15,194,1,53,254,203,2,217,118,41,55,97,57, 52,82,74,24,30,90,28,8,2,0,255,255,0,48,255,233, 2,165,2,229,16,6,0,38,0,0,255,255,0,21,0,0, 2,81,2,217,16,6,0,55,0,0,0,1,0,26,0,0, 2,107,2,217,0,7,0,0,51,35,55,3,51,27,1,51, 252,113,129,242,113,185,184,111,244,1,229,254,133,1,123,0, 0,3,0,64,0,0,3,61,2,217,0,24,0,33,0,42, 0,0,1,23,22,23,22,21,16,5,6,35,21,35,53,34, 39,38,53,52,55,54,51,50,51,53,51,17,50,55,54,53, 52,39,38,35,3,17,34,7,6,21,20,23,22,1,238,71, 217,39,8,254,221,19,25,95,165,78,92,204,54,68,4,5, 95,126,63,46,144,43,48,95,126,63,46,144,43,2,124,3, 21,171,35,41,254,254,12,1,94,94,58,67,146,211,48,12, 93,253,215,65,47,77,140,38,11,254,134,1,122,65,47,77, 140,38,11,0,255,255,0,22,0,0,2,137,2,217,16,6, 0,59,0,0,0,1,0,79,255,121,2,195,2,217,0,11, 0,0,37,17,51,17,51,21,35,53,33,17,51,17,2,34, 94,67,80,253,220,94,82,2,135,253,113,209,135,2,217,253, 121,0,0,1,0,79,0,0,2,57,2,217,0,15,0,0, 1,35,34,39,38,53,17,51,17,22,23,51,17,51,17,35, 1,220,232,99,44,22,93,10,66,228,93,93,1,19,75,37, 45,1,41,254,197,53,4,1,116,253,39,0,0,1,0,79, 0,0,2,237,2,217,0,11,0,0,37,51,17,51,17,33, 17,51,17,51,17,51,1,205,194,94,253,98,94,194,94,82, 2,135,253,39,2,217,253,121,2,135,0,1,0,79,255,121, 3,48,2,217,0,15,0,0,41,1,17,51,17,51,17,51, 17,51,17,51,17,51,21,35,2,224,253,111,94,194,94,194, 94,67,80,2,217,253,121,2,135,253,121,2,135,253,113,209, 0,2,0,81,0,0,3,89,2,217,0,14,0,25,0,0, 33,17,35,53,33,17,51,50,23,22,21,20,7,6,35,39, 51,50,55,54,53,52,39,38,43,1,1,56,231,1,68,165, 250,32,4,84,61,85,221,212,81,41,24,65,35,46,212,2, 135,82,254,234,173,24,28,114,65,47,82,62,35,46,84,39, 21,0,0,3,0,79,0,0,3,25,2,217,0,12,0,23, 0,27,0,0,37,20,7,6,35,33,17,51,17,51,50,23, 22,5,51,50,55,54,53,52,39,38,43,1,1,17,35,17, 2,111,84,61,85,254,198,93,165,250,32,4,254,61,212,81, 41,24,65,35,46,212,2,109,94,226,114,65,47,2,217,254, 234,173,24,172,62,35,46,84,39,21,1,104,253,39,2,217, 0,2,0,79,0,0,2,112,2,217,0,12,0,23,0,0, 37,20,7,6,35,33,17,51,17,51,50,23,22,5,51,50, 55,54,53,52,39,38,43,1,2,111,84,61,85,254,198,93, 165,250,32,4,254,61,212,81,41,24,65,35,46,212,226,114, 65,47,2,217,254,234,173,24,172,62,35,46,84,39,21,0, 0,1,0,48,255,233,2,165,2,229,0,35,0,0,1,33, 53,33,38,39,38,35,34,15,1,6,7,35,54,51,50,23, 22,21,20,7,6,35,32,3,51,22,23,22,23,22,51,50, 55,54,2,72,254,145,1,108,17,102,47,60,91,50,3,38, 15,95,43,238,149,82,102,106,82,141,254,245,33,96,11,22, 41,102,13,14,129,64,39,1,76,82,159,59,27,43,3,35, 75,238,91,111,183,185,109,85,1,33,71,42,82,11,1,111, 66,0,0,2,0,83,255,233,3,190,2,229,0,26,0,43, 0,0,1,35,17,35,17,51,17,51,54,55,54,51,50,23, 22,21,20,7,6,7,6,7,6,35,34,39,38,1,34,7, 6,21,20,23,22,51,50,55,54,53,52,47,1,38,1,39, 118,94,93,121,21,127,76,104,187,87,59,82,20,24,79,88, 17,19,177,90,61,1,68,141,61,36,102,56,81,139,62,38, 109,32,44,1,76,254,180,2,217,254,197,193,84,50,144,98, 146,148,105,26,20,67,8,2,133,90,1,203,124,73,103,181, 77,42,120,72,104,193,74,18,19,0,0,2,0,32,0,0, 2,111,2,217,0,15,0,26,0,0,9,1,35,1,34,39, 38,39,52,55,54,51,33,17,35,25,1,35,34,7,6,21, 20,23,22,59,1,1,163,254,235,110,1,17,157,51,13,5, 56,57,102,1,73,93,227,65,32,34,34,32,65,227,1,58, 254,198,1,58,134,33,40,88,59,61,253,39,1,58,1,77, 35,36,55,54,36,35,255,255,0,42,255,233,2,23,2,27, 16,6,0,68,0,0,0,2,0,36,255,233,1,254,3,7, 0,32,0,48,0,0,19,54,51,50,23,22,21,20,7,6, 35,34,39,38,53,16,55,54,63,1,54,55,54,53,51,20, 7,6,15,1,6,7,6,23,34,7,6,21,20,23,22,51, 50,55,54,53,52,39,38,117,44,111,152,57,29,102,56,79, 144,60,33,126,21,24,133,36,15,5,74,17,24,70,135,58, 32,12,151,93,38,19,78,31,41,90,39,21,82,30,1,213, 70,129,65,91,167,71,39,119,67,95,1,78,79,13,6,26, 9,30,10,10,60,25,33,17,29,14,71,27,37,92,48,64, 137,48,19,88,47,66,145,46,16,0,0,3,0,70,0,0, 1,212,2,12,0,16,0,31,0,43,0,0,37,20,7,6, 43,1,17,51,50,23,22,21,20,7,22,23,22,37,51,50, 55,54,55,54,53,52,39,38,39,38,43,1,17,51,50,55, 54,53,52,47,1,38,43,1,1,212,65,38,52,243,219,73, 39,40,69,83,11,2,254,198,98,51,25,24,3,2,22,3, 4,24,52,98,132,46,23,22,10,12,31,38,132,150,85,41, 24,2,12,36,37,59,81,34,32,68,13,143,18,19,15,7, 10,30,18,3,3,19,254,139,26,22,31,34,11,11,20,0, 0,1,0,70,0,0,1,124,2,12,0,5,0,0,19,33, 21,35,17,35,70,1,54,226,84,2,12,76,254,64,0,2, 0,30,255,136,2,60,2,12,0,14,0,20,0,0,55,54, 19,54,53,33,17,51,21,35,53,33,21,35,53,55,51,17, 35,7,6,87,75,6,1,1,83,64,70,254,110,70,173,221, 172,1,7,64,8,1,111,39,46,254,52,184,120,120,184,12, 1,116,142,155,255,255,0,40,255,233,2,1,2,27,16,6, 0,72,0,0,0,1,0,44,0,0,3,21,2,12,0,17, 0,0,1,35,21,39,35,23,1,51,55,21,51,53,23,51, 1,55,35,7,1,202,83,192,107,242,254,238,106,225,83,225, 106,254,238,242,107,192,2,12,201,201,250,254,238,226,226,226, 226,1,18,250,201,0,0,1,0,34,255,233,1,203,2,27, 0,48,0,0,55,53,51,50,55,54,53,52,39,38,35,34, 7,35,54,55,54,51,50,23,22,21,20,7,6,7,22,23, 20,7,6,35,34,39,38,53,51,22,23,22,51,50,55,54, 53,52,39,38,35,192,62,69,22,6,60,23,28,102,3,88, 1,111,34,44,122,53,26,57,4,4,83,3,90,52,74,194, 14,1,88,6,18,33,71,85,26,7,39,28,35,221,76,55, 15,16,53,19,7,84,119,32,10,73,37,50,71,36,3,2, 44,80,96,44,26,162,8,9,47,20,35,50,15,17,37,28, 20,0,0,1,0,70,0,0,1,241,2,12,0,9,0,0, 19,51,17,19,51,17,35,17,3,35,70,84,235,108,83,235, 109,2,12,254,99,1,157,253,244,1,157,254,99,0,0,2, 0,70,0,0,1,241,2,187,0,9,0,23,0,0,19,51, 17,19,51,17,35,17,3,35,19,51,22,51,50,55,54,53, 51,6,35,34,39,38,70,84,235,108,83,235,109,63,59,8, 84,77,13,1,59,11,141,86,42,20,2,12,254,99,1,157, 253,244,1,157,254,99,2,187,66,57,4,5,135,57,28,0, 0,1,0,70,0,0,1,228,2,12,0,10,0,0,19,21, 55,51,7,1,35,39,21,35,17,153,212,96,251,1,18,106, 225,83,2,12,212,212,250,254,238,226,226,2,12,0,0,1, 0,70,255,246,1,231,2,12,0,12,0,0,19,33,17,35, 17,35,7,2,35,53,50,55,54,148,1,83,84,172,2,14, 145,60,13,5,2,12,253,244,1,192,145,254,199,80,186,73, 0,1,0,70,0,0,2,36,2,12,0,12,0,0,19,51, 27,1,51,17,35,17,3,35,3,17,35,70,104,135,135,104, 84,130,50,130,84,2,12,254,186,1,70,253,244,1,107,254, 189,1,67,254,149,0,0,1,0,70,0,0,1,232,2,12, 0,11,0,0,19,51,21,51,53,51,17,35,53,35,21,35, 70,84,250,84,84,250,84,2,12,215,215,253,244,233,233,0, 255,255,0,36,255,233,1,254,2,27,16,6,0,82,0,0, 0,1,0,70,0,0,1,231,2,12,0,7,0,0,19,33, 17,35,17,35,17,35,70,1,161,84,249,84,2,12,253,244, 1,192,254,64,0,2,0,70,255,38,2,27,2,27,0,18, 0,34,0,0,23,17,51,21,54,51,50,23,22,21,20,7, 6,7,6,35,34,39,17,19,34,7,6,21,20,23,22,51, 50,55,54,53,52,39,38,70,77,59,108,127,60,38,89,39, 52,21,23,97,64,146,83,39,24,69,33,44,84,42,26,71, 35,218,2,230,79,94,111,71,104,154,75,33,10,4,78,254, 239,2,167,84,50,69,125,52,26,81,50,69,127,53,26,0, 255,255,0,31,255,233,1,221,2,27,16,6,0,70,0,0, 0,1,0,60,0,0,1,176,2,12,0,7,0,0,19,33, 21,35,17,35,17,35,60,1,116,144,84,144,2,12,76,254, 64,1,192,0,255,255,0,20,255,38,1,222,2,12,16,6, 0,92,0,0,0,3,0,61,255,38,3,82,2,162,0,34, 0,50,0,66,0,0,1,54,51,50,23,22,21,20,15,1, 6,35,34,39,38,39,17,35,17,6,7,6,35,34,39,38, 53,52,55,54,51,50,23,53,51,23,34,7,6,21,20,23, 22,51,50,55,54,53,52,47,1,37,34,7,6,21,20,23, 22,51,50,55,54,53,52,39,38,1,239,45,100,141,48,21, 96,30,37,46,69,46,14,17,83,42,49,24,32,152,39,13, 104,44,60,94,49,83,131,95,27,9,84,21,26,94,31,12, 87,28,254,145,102,24,7,97,17,19,94,28,9,94,17,1, 189,94,141,61,84,174,68,17,17,43,14,21,254,239,1,22, 62,14,7,160,51,64,194,65,28,94,229,213,116,38,49,158, 36,9,104,42,54,159,37,8,2,126,34,43,170,28,5,112, 39,49,171,30,5,0,255,255,0,17,0,0,1,217,2,12, 16,6,0,91,0,0,0,1,0,70,255,136,2,36,2,12, 0,11,0,0,51,17,51,17,51,17,51,17,51,21,35,53, 70,84,249,84,61,70,2,12,254,64,1,192,254,52,184,120, 0,1,0,70,0,0,1,194,2,12,0,17,0,0,19,51, 21,20,23,22,59,1,53,51,17,35,53,35,34,39,38,53, 70,84,43,7,8,154,84,84,151,78,42,25,2,12,197,41, 8,1,247,253,244,201,50,31,42,0,0,1,0,70,0,0, 2,110,2,12,0,11,0,0,37,51,17,51,17,33,17,51, 17,51,17,51,1,132,150,84,253,216,84,150,84,76,1,192, 253,244,2,12,254,64,1,192,0,1,0,70,255,136,2,170, 2,12,0,15,0,0,41,1,17,51,17,51,17,51,17,51, 17,51,17,51,21,35,2,100,253,226,84,150,84,150,84,60, 70,2,12,254,64,1,192,254,64,1,192,254,52,184,0,2, 0,57,0,0,2,141,2,12,0,15,0,26,0,0,51,17, 35,53,33,21,51,23,22,23,20,21,20,7,6,35,39,51, 50,55,54,53,52,39,38,43,1,240,183,1,11,113,56,154, 6,69,42,56,162,124,105,8,1,83,14,17,124,1,192,76, 183,3,20,140,5,6,91,47,29,76,71,8,9,88,11,2, 0,3,0,70,0,0,2,108,2,12,0,13,0,24,0,28, 0,0,19,21,51,23,22,23,20,21,20,7,6,43,1,17, 19,51,50,55,54,53,52,39,38,43,1,1,17,35,17,154, 113,56,154,6,69,42,56,246,84,124,105,8,1,83,14,17, 124,1,210,83,2,12,183,3,20,140,5,6,91,47,29,2, 12,254,64,71,8,9,88,11,2,1,3,253,244,2,12,0, 0,2,0,70,0,0,1,227,2,12,0,13,0,24,0,0, 19,21,51,23,22,23,20,21,20,7,6,43,1,17,19,51, 50,55,54,53,52,39,38,43,1,154,113,56,154,6,69,42, 56,246,84,124,105,8,1,83,14,17,124,2,12,183,3,20, 140,5,6,91,47,29,2,12,254,64,71,8,9,88,11,2, 0,1,0,31,255,233,1,221,2,27,0,37,0,0,55,53, 51,38,39,38,35,34,7,6,7,35,54,55,54,55,54,51, 50,23,22,21,20,15,1,6,35,34,39,38,39,51,22,51, 50,55,54,55,163,224,17,84,19,22,94,25,3,2,84,6, 29,52,102,9,9,124,64,45,95,30,47,60,133,54,23,4, 84,21,107,96,35,14,2,232,77,121,26,6,89,12,13,70, 43,71,6,1,103,74,109,159,73,19,25,103,43,57,126,96, 36,46,0,2,0,70,255,233,2,209,2,27,0,22,0,39, 0,0,19,52,55,54,51,50,23,22,21,20,7,6,35,34, 39,38,53,35,21,35,17,51,21,37,34,7,6,21,20,23, 22,51,50,55,54,53,52,47,1,38,250,36,63,134,152,57, 29,102,56,79,154,57,25,94,84,84,1,74,93,38,19,78, 31,41,90,39,21,82,29,18,1,53,58,62,110,129,65,91, 167,71,39,135,58,63,233,2,12,215,153,92,48,64,137,48, 19,88,47,66,145,46,11,5,0,2,0,14,0,0,1,217, 2,12,0,15,0,28,0,0,55,38,39,38,53,52,55,54, 59,1,17,35,53,35,7,35,1,35,34,7,6,21,20,23, 22,23,22,59,1,219,110,30,9,41,40,74,248,84,69,203, 103,1,119,137,46,23,22,10,4,8,31,38,137,221,9,86, 26,33,62,44,43,253,244,218,218,1,193,26,22,31,34,11, 6,5,20,0,255,255,0,40,255,233,2,1,2,228,16,38, 0,67,116,0,16,6,0,72,0,0,255,255,0,40,255,233, 2,1,2,204,16,38,0,106,123,1,16,6,0,72,0,0, 0,1,0,18,255,92,2,5,2,217,0,42,0,0,1,34, 7,6,29,1,19,35,17,35,53,51,53,51,21,51,21,35, 7,54,55,54,51,50,23,22,29,1,3,6,7,6,7,39, 53,54,55,54,55,53,52,39,38,1,70,88,36,18,1,83, 84,84,83,171,171,1,53,67,19,29,111,39,15,1,7,107, 68,59,17,47,52,73,4,34,32,1,195,82,41,53,1,254, 238,2,84,64,69,69,64,159,69,14,4,74,29,39,1,254, 237,131,83,54,1,1,40,2,48,69,99,252,55,24,24,0, 0,2,0,70,0,0,1,109,2,200,0,5,0,9,0,0, 19,33,21,35,17,35,19,51,7,35,70,1,39,211,84,139, 113,149,60,2,12,76,254,64,2,200,148,0,0,1,0,31, 255,233,1,221,2,27,0,35,0,0,37,35,22,23,22,51, 50,55,51,6,7,6,35,34,39,38,53,52,55,54,51,50, 23,22,23,22,23,35,38,47,1,34,7,6,7,51,1,88, 226,7,82,26,32,107,21,84,11,104,43,56,129,62,41,92, 59,82,106,58,4,4,29,6,84,13,84,27,94,35,9,4, 223,232,129,37,12,126,137,46,20,105,70,101,160,77,49,68, 5,5,43,70,97,15,2,99,25,29,255,255,0,34,255,233, 1,203,2,27,16,6,0,86,0,0,255,255,0,66,0,0, 0,150,2,217,16,6,0,76,0,0,255,255,0,3,0,0, 1,13,2,196,16,38,0,106,229,249,16,6,0,243,0,0, 255,255,255,238,255,38,0,153,2,217,16,6,0,77,0,0, 0,2,0,70,0,0,3,48,2,12,0,31,0,45,0,0, 1,21,51,50,23,22,23,22,23,22,29,1,20,7,6,7, 6,43,1,17,35,7,6,7,6,35,53,50,55,54,61,1, 1,51,50,55,54,63,1,52,47,2,38,43,1,1,231,113, 142,45,16,7,2,2,2,54,7,8,43,55,246,172,3,5, 14,37,102,60,13,5,1,83,124,85,20,6,2,1,41,34, 8,18,13,124,2,12,214,55,20,29,10,11,18,11,1,72, 43,5,6,29,1,192,140,102,59,147,80,172,80,191,1,254, 64,34,10,15,17,55,16,8,1,2,0,2,0,70,0,0, 3,49,2,12,0,27,0,41,0,0,1,51,50,23,22,23, 22,23,22,29,1,20,7,6,7,6,43,1,53,35,21,35, 17,51,21,51,53,51,17,51,50,55,54,63,1,52,47,2, 38,43,1,1,232,113,142,45,16,7,2,2,2,54,7,8, 43,55,246,250,84,84,250,84,124,85,20,6,2,1,41,34, 8,18,13,124,1,54,55,20,29,10,11,18,11,1,72,43, 5,6,29,233,233,2,12,215,215,254,64,34,10,15,17,55, 16,8,1,2,0,1,0,18,0,0,2,5,2,217,0,33, 0,0,1,34,7,6,29,1,19,35,17,35,53,51,53,51, 21,51,21,35,7,54,55,54,51,50,23,22,29,1,3,35, 17,52,39,38,1,70,88,36,18,1,83,84,84,83,171,171, 1,53,67,19,29,111,39,15,1,82,34,32,1,195,82,41, 53,1,254,238,2,84,64,69,69,64,159,69,14,4,74,29, 39,1,254,131,1,92,55,24,24,0,0,2,0,58,0,0, 1,246,2,200,0,10,0,14,0,0,19,21,55,51,9,1, 35,37,21,35,17,55,51,7,35,141,222,107,254,240,1,48, 103,254,254,83,197,113,149,60,2,12,222,222,254,252,254,248, 216,216,2,12,188,148,0,2,0,70,0,0,1,231,2,200, 0,9,0,13,0,0,19,51,17,19,51,17,35,17,3,35, 19,23,35,39,70,84,235,98,83,235,99,217,96,60,149,2, 12,254,99,1,157,253,244,1,157,254,99,2,200,148,148,0, 255,255,0,20,255,38,1,222,2,187,16,38,1,243,83,223, 16,6,0,92,0,0,0,1,0,70,255,136,1,232,2,12, 0,11,0,0,33,21,35,53,35,17,51,17,51,17,51,17, 1,58,70,174,84,250,84,120,120,2,12,254,64,1,192,253, 244,0,0,2,0,79,0,0,2,111,2,217,0,11,0,22, 0,0,37,20,7,6,35,33,17,51,17,51,23,22,7,52, 39,38,43,1,21,51,50,55,54,2,111,56,57,102,254,183, 93,180,62,187,71,71,26,34,227,227,65,32,34,208,88,59, 61,2,217,254,198,3,23,182,87,28,11,251,35,36,0,2, 0,70,0,0,1,232,2,12,0,13,0,25,0,0,19,21, 50,23,22,23,22,21,20,7,6,35,33,17,19,51,50,55, 54,53,52,47,1,38,43,1,154,144,31,120,29,10,41,41, 73,254,249,84,152,46,23,22,12,10,31,38,152,2,12,217, 3,13,76,28,37,62,44,44,2,12,254,64,26,22,23,42, 14,8,20,0,255,255,0,91,0,0,2,105,2,217,16,6, 0,51,0,0,255,255,0,54,255,38,2,11,2,27,16,6, 0,83,0,0,0,1,0,90,0,0,2,67,3,57,0,7, 0,0,51,35,17,33,53,51,21,33,183,93,1,140,93,254, 116,2,217,96,178,0,0,1,0,70,0,0,1,109,2,117, 0,7,0,0,19,51,53,51,21,35,17,35,70,211,84,211, 84,2,12,105,181,254,64,0,0,1,0,90,0,0,2,67, 2,217,0,5,0,0,51,35,17,33,21,33,183,93,1,233, 254,116,2,217,82,0,0,1,0,70,0,0,1,109,2,12, 0,5,0,0,19,33,21,35,17,35,70,1,39,211,84,2, 12,76,254,64,0,1,0,90,0,0,2,67,2,217,0,5, 0,0,51,35,17,33,21,33,183,93,1,233,254,116,2,217, 82,0,0,1,0,70,0,0,1,109,2,12,0,5,0,0, 19,33,21,35,17,35,70,1,39,211,84,2,12,76,254,64, 0,1,0,63,0,0,3,180,2,217,0,17,0,0,9,1, 35,9,1,51,19,17,51,17,19,51,9,1,35,1,17,35, 1,203,254,226,110,1,69,254,225,120,238,93,238,120,254,225, 1,69,110,254,226,93,1,68,254,188,1,119,1,98,254,204, 1,52,254,204,1,52,254,158,254,137,1,68,254,188,0,1, 0,14,0,0,3,51,2,12,0,17,0,0,37,5,35,9, 1,51,23,53,51,21,55,51,9,1,35,37,21,35,1,119, 254,254,103,1,48,254,240,107,222,83,222,107,254,240,1,48, 103,254,254,83,216,216,1,8,1,4,222,222,222,222,254,252, 254,248,216,216,0,1,0,48,255,233,2,109,2,229,0,57, 0,0,1,53,51,50,55,54,53,52,39,38,35,34,7,6, 21,35,54,55,54,51,50,23,22,23,22,21,20,7,22,23, 22,21,20,7,6,7,6,35,34,39,38,39,51,23,22,23, 22,51,50,55,54,55,54,53,52,39,38,35,1,1,88,73, 52,33,72,39,52,143,31,8,88,1,122,60,84,157,66,24, 8,4,105,115,14,1,58,11,11,73,132,169,76,42,1,88, 3,7,28,51,117,89,45,44,7,1,51,48,64,1,65,82, 60,40,37,73,32,18,98,23,27,145,54,27,94,33,41,22, 24,108,45,43,106,12,13,84,63,11,9,56,104,57,94,38, 41,33,61,31,31,56,7,7,49,42,39,0,0,1,0,34, 255,233,1,203,2,27,0,48,0,0,55,53,51,50,55,54, 53,52,39,38,35,34,7,35,54,55,54,51,50,23,22,21, 20,7,6,7,22,23,20,7,6,35,34,39,38,53,51,22, 23,22,51,50,55,54,53,52,39,38,35,192,62,69,22,6, 60,23,28,102,3,88,1,111,34,44,122,53,26,57,4,4, 83,3,90,52,74,194,14,1,88,6,18,33,71,85,26,7, 39,28,35,221,76,55,15,16,53,19,7,84,119,32,10,73, 37,50,71,36,3,2,44,80,96,44,26,162,8,9,47,20, 35,50,15,17,37,28,20,0,0,1,0,79,0,0,2,146, 2,217,0,10,0,0,51,35,17,51,17,1,51,9,1,35, 1,172,93,93,1,107,120,254,100,1,159,110,254,136,2,217, 254,197,1,59,254,158,254,137,1,68,0,1,0,58,0,0, 1,246,2,12,0,10,0,0,19,21,55,51,9,1,35,37, 21,35,17,141,222,107,254,240,1,48,103,254,254,83,2,12, 222,222,254,252,254,248,216,216,2,12,0,1,0,79,0,0, 2,146,2,217,0,10,0,0,51,35,17,51,17,1,51,9, 1,35,1,172,93,93,1,107,120,254,100,1,159,110,254,136, 2,217,254,197,1,59,254,158,254,137,1,68,0,1,0,58, 0,0,1,246,2,12,0,10,0,0,19,21,55,51,9,1, 35,37,21,35,17,141,222,107,254,240,1,48,103,254,254,83, 2,12,222,222,254,252,254,248,216,216,2,12,0,1,0,79, 0,0,2,146,2,217,0,10,0,0,51,35,17,51,17,1, 51,9,1,35,1,172,93,93,1,107,120,254,100,1,159,110, 254,136,2,217,254,197,1,59,254,158,254,137,1,68,0,1, 0,58,0,0,1,246,2,12,0,10,0,0,19,21,55,51, 9,1,35,37,21,35,17,141,222,107,254,240,1,48,103,254, 254,83,2,12,222,222,254,252,254,248,216,216,2,12,0,1, 0,79,0,0,2,146,2,217,0,10,0,0,51,35,17,51, 17,1,51,9,1,35,1,172,93,93,1,107,120,254,100,1, 159,110,254,136,2,217,254,197,1,59,254,158,254,137,1,68, 0,1,0,58,0,0,1,246,2,12,0,10,0,0,19,21, 55,51,9,1,35,37,21,35,17,141,222,107,254,240,1,48, 103,254,254,83,2,12,222,222,254,252,254,248,216,216,2,12, 0,1,0,83,0,0,2,132,2,217,0,11,0,0,1,33, 17,35,17,51,17,33,17,51,17,35,2,38,254,139,94,93, 1,118,94,94,1,76,254,180,2,217,254,197,1,59,253,39, 0,1,0,70,0,0,1,232,2,12,0,11,0,0,19,51, 21,51,53,51,17,35,53,35,21,35,70,84,250,84,84,250, 84,2,12,215,215,253,244,233,233,0,0,1,0,83,0,0, 4,4,2,217,0,13,0,0,33,35,17,33,17,35,17,51, 17,33,17,33,21,33,2,132,94,254,139,94,93,1,118,1, 222,254,128,1,76,254,180,2,217,254,197,1,59,82,0,1, 0,70,0,0,2,187,2,12,0,13,0,0,33,35,53,35, 21,35,17,51,21,51,53,33,21,35,1,232,84,250,84,84, 250,1,39,211,233,233,2,12,215,215,76,0,0,1,0,83, 0,0,2,132,2,217,0,7,0,0,1,33,17,35,17,33, 17,35,2,38,254,139,94,2,49,94,2,135,253,121,2,217, 253,39,0,1,0,70,0,0,1,231,2,12,0,7,0,0, 19,33,17,35,17,35,17,35,70,1,161,84,249,84,2,12, 253,244,1,192,254,64,255,255,0,48,255,233,2,165,2,229, 16,6,0,38,0,0,255,255,0,31,255,233,1,221,2,27, 16,6,0,70,0,0,255,255,0,48,255,233,2,165,2,229, 16,6,0,38,0,0,255,255,0,31,255,233,1,221,2,27, 16,6,0,70,0,0,255,255,0,21,0,0,2,81,2,217, 16,6,0,55,0,0,0,1,0,60,0,0,1,176,2,12, 0,7,0,0,19,33,21,35,17,35,17,35,60,1,116,144, 84,144,2,12,76,254,64,1,192,0,255,255,0,13,0,0, 2,149,2,217,16,6,0,60,0,0,0,1,0,10,0,0, 1,230,2,12,0,6,0,0,33,35,3,51,27,1,51,1, 29,91,184,94,140,148,94,2,12,254,87,1,169,0,255,255, 0,13,0,0,2,149,2,217,16,6,0,60,0,0,0,1, 0,10,0,0,1,230,2,12,0,6,0,0,33,35,3,51, 27,1,51,1,29,91,184,94,140,148,94,2,12,254,87,1, 169,0,255,255,0,22,0,0,2,137,2,217,16,6,0,59, 0,0,255,255,0,17,0,0,1,217,2,12,16,6,0,91, 0,0,0,1,0,83,255,121,2,224,2,217,0,11,0,0, 37,17,51,17,51,21,35,53,33,17,51,17,2,38,94,92, 80,253,195,94,82,2,135,253,113,209,135,2,217,253,121,0, 0,1,0,70,255,136,2,56,2,12,0,11,0,0,51,17, 51,17,51,17,51,17,51,21,35,53,70,84,249,84,81,70, 2,12,254,64,1,192,254,52,184,120,0,1,0,83,0,0, 2,42,2,217,0,13,0,0,1,33,34,39,38,53,17,51, 17,33,17,51,17,35,1,205,254,227,78,13,2,93,1,29, 93,93,1,46,61,9,11,1,90,254,167,1,89,253,39,0, 0,1,0,69,0,0,1,176,2,12,0,13,0,0,19,51, 21,51,53,51,17,35,53,35,34,39,38,53,69,84,195,84, 84,195,64,14,6,2,12,225,225,253,244,223,33,15,25,0, 0,1,0,83,0,0,2,42,2,217,0,13,0,0,1,33, 34,39,38,53,17,51,17,33,17,51,17,35,1,205,254,227, 78,13,2,93,1,29,93,93,1,46,61,9,11,1,90,254, 167,1,89,253,39,0,0,1,0,69,0,0,1,176,2,12, 0,13,0,0,19,51,21,51,53,51,17,35,53,35,34,39, 38,53,69,84,195,84,84,195,64,14,6,2,12,225,225,253, 244,223,33,15,25,0,0,1,0,83,0,0,2,42,2,217, 0,13,0,0,19,33,50,23,22,21,17,35,17,33,17,35, 17,51,176,1,29,78,13,2,93,254,227,93,93,1,171,61, 9,11,254,166,1,89,254,167,2,217,0,1,0,69,0,0, 1,176,2,12,0,13,0,0,33,35,53,35,21,35,17,51, 21,51,50,23,22,21,1,176,84,195,84,84,195,64,14,6, 225,225,2,12,223,33,15,25,255,255,0,38,255,233,2,230, 2,229,16,15,1,78,3,12,2,206,192,0,255,255,0,40, 255,233,2,1,2,27,16,6,0,72,0,0,255,255,0,39, 255,233,2,154,2,143,16,70,0,72,243,5,84,179,77,24, 255,255,0,40,255,233,2,1,2,27,16,6,0,72,0,0, 255,255,0,100,0,0,0,194,2,217,16,6,0,44,0,0, 255,255,0,63,0,0,3,180,3,136,16,39,1,243,1,84, 0,172,16,6,2,110,0,0,255,255,0,44,0,0,3,21, 2,187,16,39,1,243,0,251,255,223,16,6,2,142,0,0, 0,1,0,79,0,0,2,146,2,217,0,10,0,0,51,35, 17,51,17,1,51,9,1,35,1,172,93,93,1,107,120,254, 100,1,159,110,254,136,2,217,254,197,1,59,254,158,254,137, 1,68,0,1,0,58,0,0,1,246,2,12,0,10,0,0, 19,21,55,51,9,1,35,37,21,35,17,141,222,107,254,240, 1,48,103,254,254,83,2,12,222,222,254,252,254,248,216,216, 2,12,0,1,0,83,0,0,2,132,2,217,0,11,0,0, 1,33,17,35,17,51,17,33,17,51,17,35,2,38,254,139, 94,93,1,118,94,94,1,76,254,180,2,217,254,197,1,59, 253,39,0,1,0,70,0,0,1,232,2,12,0,11,0,0, 19,51,21,51,53,51,17,35,53,35,21,35,70,84,250,84, 84,250,84,2,12,215,215,253,244,233,233,0,0,1,0,83, 0,0,2,42,2,217,0,13,0,0,1,33,34,39,38,53, 17,51,17,33,17,51,17,35,1,205,254,227,78,13,2,93, 1,29,93,93,1,46,61,9,11,1,90,254,167,1,89,253, 39,0,0,1,0,69,0,0,1,176,2,12,0,13,0,0, 19,51,21,51,53,51,17,35,53,35,34,39,38,53,69,84, 195,84,84,195,64,14,6,2,12,225,225,253,244,223,33,15, 25,0,255,255,0,17,0,0,2,141,3,136,16,39,1,243, 0,170,0,172,16,6,0,36,0,0,255,255,0,42,255,233, 2,23,2,187,16,38,1,243,103,223,16,6,0,68,0,0, 255,255,0,17,0,0,2,141,3,104,16,39,0,106,0,172, 0,157,16,6,0,36,0,0,255,255,0,42,255,233,2,23, 2,155,16,38,0,106,106,208,16,6,0,68,0,0,255,255, 0,11,0,0,3,182,2,217,16,6,0,136,0,0,255,255, 0,34,255,233,3,77,2,27,16,6,0,168,0,0,255,255, 0,79,0,0,2,90,3,136,16,39,1,243,0,177,0,172, 16,6,2,109,0,0,255,255,0,40,255,233,2,1,2,187, 16,39,1,243,0,156,255,223,16,6,0,72,0,0,255,255, 0,38,255,233,2,230,2,229,16,6,1,78,0,0,255,255, 0,40,255,233,2,1,2,27,16,15,0,72,2,41,2,4, 192,0,255,255,0,38,255,233,2,230,3,153,16,39,0,106, 0,225,0,206,16,6,1,78,0,0,255,255,0,40,255,233, 2,1,2,155,16,38,0,106,118,208,16,15,0,72,2,41, 2,4,192,0,255,255,0,63,0,0,3,180,3,104,16,39, 0,106,1,86,0,157,16,6,2,110,0,0,255,255,0,44, 0,0,3,21,2,155,16,39,0,106,0,254,255,208,16,6, 2,142,0,0,255,255,0,48,255,233,2,109,3,104,16,39, 0,106,0,168,0,157,16,6,2,111,0,0,255,255,0,34, 255,233,1,203,2,155,16,38,0,106,80,208,16,6,2,143, 0,0,0,1,0,48,255,233,2,109,2,229,0,57,0,0, 1,53,51,50,55,54,53,52,39,38,35,34,7,6,21,35, 54,55,54,51,50,23,22,23,22,21,20,7,22,23,22,21, 20,7,6,7,6,35,34,39,38,39,51,23,22,23,22,51, 50,55,54,55,54,53,52,39,38,35,1,1,88,73,52,33, 72,39,52,143,31,8,88,1,122,60,84,157,66,24,8,4, 105,115,14,1,58,11,11,73,132,169,76,42,1,88,3,7, 28,51,117,89,45,44,7,1,51,48,64,1,65,82,60,40, 37,73,32,18,98,23,27,145,54,27,94,33,41,22,24,108, 45,43,106,12,13,84,63,11,9,56,104,57,94,38,41,33, 61,31,31,56,7,7,49,42,39,0,0,1,0,34,255,233, 1,203,2,27,0,48,0,0,55,53,51,50,55,54,53,52, 39,38,35,34,7,35,54,55,54,51,50,23,22,21,20,7, 6,7,22,23,20,7,6,35,34,39,38,53,51,22,23,22, 51,50,55,54,53,52,39,38,35,192,62,69,22,6,60,23, 28,102,3,88,1,111,34,44,122,53,26,57,4,4,83,3, 90,52,74,194,14,1,88,6,18,33,71,85,26,7,39,28, 35,221,76,55,15,16,53,19,7,84,119,32,10,73,37,50, 71,36,3,2,44,80,96,44,26,162,8,9,47,20,35,50, 15,17,37,28,20,0,255,255,0,79,0,0,2,137,3,71, 16,39,0,113,0,196,0,138,16,6,2,112,0,0,255,255, 0,70,0,0,1,241,2,122,16,38,0,113,114,189,16,6, 2,144,0,0,255,255,0,79,0,0,2,137,3,104,16,39, 0,106,0,198,0,157,16,6,2,112,0,0,255,255,0,70, 0,0,1,241,2,155,16,38,0,106,116,208,16,6,2,144, 0,0,255,255,0,38,255,233,2,230,3,104,16,39,0,106, 0,227,0,157,16,6,0,50,0,0,255,255,0,36,255,233, 1,254,2,155,16,38,0,106,110,208,16,6,0,82,0,0, 255,255,0,38,255,233,2,230,2,229,16,6,0,50,0,0, 255,255,0,36,255,233,1,254,2,27,16,6,0,82,0,0, 255,255,0,38,255,233,2,230,3,104,16,39,0,106,0,227, 0,157,16,6,0,50,0,0,255,255,0,36,255,233,1,254, 2,155,16,38,0,106,110,208,16,6,0,82,0,0,255,255, 0,48,255,233,2,165,3,104,16,39,0,106,0,254,0,157, 16,6,2,133,0,0,255,255,0,31,255,233,1,221,2,155, 16,38,0,106,49,208,16,6,2,165,0,0,255,255,0,26, 0,0,2,107,3,71,16,39,0,113,0,158,0,138,16,6, 2,123,0,0,255,255,0,20,255,38,1,222,2,122,16,38, 0,113,84,189,16,6,0,92,0,0,255,255,0,26,0,0, 2,107,3,104,16,39,0,106,0,160,0,157,16,6,2,123, 0,0,255,255,0,20,255,38,1,222,2,155,16,38,0,106, 86,208,16,6,0,92,0,0,255,255,0,26,0,0,2,107, 3,151,16,39,1,248,0,166,0,179,16,6,2,123,0,0, 255,255,0,20,255,38,1,222,2,202,16,38,1,248,92,230, 16,6,0,92,0,0,255,255,0,79,0,0,2,57,3,104, 16,39,0,106,0,156,0,157,16,6,2,127,0,0,255,255, 0,70,0,0,1,194,2,155,16,38,0,106,88,208,16,6, 2,159,0,0,255,255,0,79,0,0,3,25,3,104,16,39, 0,106,1,22,0,157,16,6,2,131,0,0,255,255,0,70, 0,0,2,108,2,155,16,39,0,106,0,202,255,208,16,6, 2,163,0,0,0,1,0,79,255,215,2,217,2,204,0,28, 0,0,37,6,7,6,35,34,39,38,39,38,53,17,51,17, 20,23,22,23,22,23,50,55,54,53,17,51,17,23,7,2, 67,28,69,60,60,185,61,22,9,6,94,28,17,33,43,60, 102,45,46,95,87,59,60,31,22,19,116,40,57,45,56,1, 158,254,99,117,44,26,18,23,2,47,46,137,1,157,253,172, 93,68,0,1,0,79,255,254,2,130,2,214,0,32,0,0, 1,35,53,52,39,38,39,34,15,1,6,21,23,33,21,33, 7,35,17,52,55,54,55,54,51,50,23,22,23,22,23,22, 21,2,130,95,45,44,104,118,41,5,18,2,1,209,254,47, 1,94,57,24,37,64,101,104,63,63,25,3,12,10,1,74, 81,135,47,46,2,80,12,46,132,128,93,152,1,158,159,69, 30,21,35,39,40,64,8,47,55,61,0,2,0,83,255,255, 2,231,2,214,0,25,0,50,0,0,37,35,21,35,53,35, 34,39,38,47,1,52,55,54,55,54,51,50,23,22,29,2, 22,21,51,37,20,23,22,23,22,23,22,51,55,53,23,53, 52,39,53,52,39,38,39,34,7,6,7,6,2,231,107,95, 215,70,58,76,30,9,46,24,42,65,103,196,60,13,1,110, 253,198,9,5,10,30,89,21,23,180,2,1,7,37,126,117, 51,17,6,5,134,135,135,35,52,101,90,148,65,35,26,40, 135,29,81,28,163,36,24,217,56,24,20,27,71,16,4,1, 110,2,130,9,9,21,24,18,88,4,61,21,27,42,0,1, 0,82,0,1,2,215,2,217,0,29,0,0,1,52,39,38, 39,34,7,6,29,1,35,53,52,55,54,55,54,51,50,23, 22,23,22,29,1,51,21,35,21,35,2,38,4,14,162,103, 45,45,95,47,24,41,64,104,196,60,9,11,7,82,82,95, 1,158,51,31,144,4,48,46,136,81,82,149,66,33,25,41, 135,21,57,42,59,176,94,144,0,1,0,79,0,5,2,130, 2,221,0,29,0,0,1,20,7,6,7,6,7,34,39,38, 53,17,51,23,33,21,33,7,20,23,22,23,22,51,50,55, 54,61,1,51,2,130,50,24,39,61,106,199,57,27,94,1, 1,209,254,47,1,27,17,34,43,60,103,44,46,95,1,64, 149,68,33,24,39,2,135,66,114,1,157,152,93,168,115,43, 27,20,24,47,46,136,81,0,0,1,0,30,255,250,2,199, 2,223,0,73,0,0,1,52,39,38,39,38,39,38,43,1, 15,1,6,7,6,15,1,6,21,55,21,33,53,54,55,54, 55,54,55,51,50,23,50,23,22,23,22,23,22,23,22,23, 22,21,20,7,6,7,6,7,51,50,23,22,23,39,52,39, 33,21,35,53,51,21,51,50,55,54,55,54,55,54,55,54, 2,50,8,7,31,15,44,61,53,14,17,29,112,33,2,1, 8,2,188,254,230,6,26,9,16,71,156,37,14,11,12,7, 48,39,35,56,7,5,13,20,16,6,20,84,34,39,123,70, 39,25,2,83,69,254,89,90,90,127,48,81,8,6,94,36, 7,6,8,1,164,71,22,32,43,21,23,28,2,6,29,103, 5,4,40,18,15,2,81,67,95,59,20,25,99,11,2,2, 7,16,12,53,7,5,14,54,48,46,46,27,124,86,35,20, 46,33,58,1,55,2,54,186,55,44,4,4,51,83,18,20, 32,0,0,1,0,84,0,0,1,174,2,209,0,9,0,0, 37,21,35,17,51,21,51,21,35,17,1,78,250,96,250,250, 79,79,2,209,233,77,254,180,0,1,0,74,0,0,2,127, 2,217,0,29,0,0,1,35,53,52,39,38,39,34,15,1, 6,7,17,5,7,37,17,52,55,54,55,54,51,50,23,22, 31,1,22,21,2,125,95,45,45,103,108,43,12,16,2,1, 215,2,253,205,57,24,37,64,101,105,62,77,22,8,6,1, 18,140,134,48,47,1,68,24,41,97,254,186,1,87,1,1, 158,160,69,29,21,35,40,48,88,41,42,55,0,2,0,63, 255,254,3,15,2,216,0,15,0,65,0,0,37,20,23,22, 23,22,23,50,55,53,35,34,7,6,7,6,7,52,55,54, 59,1,53,52,39,38,39,35,34,39,35,34,7,17,35,17, 52,55,54,55,54,59,1,50,23,22,29,1,51,21,35,21, 20,7,6,43,1,34,39,34,39,34,39,38,39,38,1,84, 19,14,31,33,44,151,2,179,70,21,14,8,2,93,52,47, 108,180,44,42,62,179,9,1,15,122,2,95,13,48,143,16, 18,191,127,66,44,54,54,104,53,81,29,12,7,11,6,19, 32,89,25,14,218,78,26,19,11,7,1,137,155,26,19,49, 34,24,139,49,44,66,84,26,24,2,1,137,253,254,2,11, 40,39,112,13,1,80,52,73,75,78,164,120,57,31,1,1, 9,24,76,41,0,2,0,67,255,246,2,126,2,206,0,22, 0,41,0,0,5,34,39,38,61,1,52,55,54,55,50,59, 1,53,51,21,51,21,35,17,20,7,6,19,35,47,1,34, 7,6,7,21,20,23,22,23,50,55,54,55,54,55,1,48, 133,64,40,24,53,147,6,7,143,92,99,96,104,50,59,141, 9,14,43,39,37,2,23,46,73,72,32,8,8,21,2,10, 82,51,72,126,51,46,100,8,192,192,75,255,0,114,60,29, 1,203,1,1,30,27,87,107,60,29,46,2,30,7,10,29, 61,0,0,1,0,63,0,0,2,113,2,220,0,33,0,0, 1,34,7,6,7,6,7,17,35,17,51,21,54,55,54,51, 50,23,22,23,22,23,22,29,1,35,53,52,39,38,39,38, 39,38,1,95,130,43,10,4,5,2,94,98,13,98,38,29, 101,67,62,29,9,11,7,94,31,13,19,7,8,43,1,230, 68,17,20,29,66,254,226,2,220,214,31,19,7,38,32,68, 21,57,42,60,71,71,118,46,19,13,5,4,24,0,0,1, 0,93,0,0,1,117,2,204,0,5,0,0,51,17,51,17, 23,21,93,95,185,2,204,253,146,1,93,0,0,1,0,66, 255,244,3,15,2,211,0,41,0,0,37,55,61,1,51,21, 20,7,6,7,6,7,6,35,34,39,38,39,38,53,55,7, 17,35,17,51,21,23,21,20,23,22,23,22,23,50,55,54, 55,54,55,52,2,174,2,95,92,7,8,29,26,21,48,199, 57,13,7,8,1,108,95,95,203,28,17,32,43,60,49,18, 11,27,23,11,237,65,1,224,225,199,72,5,5,18,9,6, 135,37,41,48,86,114,1,254,64,2,211,195,1,224,117,44, 26,18,23,2,9,3,30,25,65,9,0,2,0,34,255,252, 3,0,2,250,0,38,0,54,0,0,1,7,38,39,38,35, 39,50,23,22,23,22,21,20,7,6,35,34,39,38,53,52, 55,54,55,54,55,39,34,47,1,55,22,23,22,51,33,50, 23,3,52,39,38,35,34,7,6,21,20,23,22,23,50,55, 54,3,0,65,6,28,12,15,126,13,38,130,14,1,101,98, 138,136,96,96,103,19,21,41,9,81,114,9,1,83,2,6, 22,66,1,159,93,37,132,68,72,103,103,76,75,73,71,98, 101,77,75,2,134,63,33,9,2,1,27,83,176,15,15,134, 91,91,97,99,138,134,101,19,16,30,1,1,69,20,41,20, 8,27,45,254,166,109,77,80,82,82,106,96,73,71,2,74, 71,0,0,1,0,74,0,1,2,125,2,221,0,29,0,0, 37,35,53,6,7,6,35,34,39,38,39,38,53,17,51,17, 20,23,22,23,22,23,50,55,54,55,54,61,1,51,2,124, 97,12,58,55,54,100,68,95,18,5,94,28,16,34,41,62, 107,52,17,10,7,95,1,215,25,19,13,37,52,137,40,51, 1,1,255,0,116,44,26,20,22,2,52,17,45,41,75,76, 0,1,0,23,255,182,2,55,2,213,0,19,0,0,1,50, 23,21,39,38,39,34,7,1,5,21,35,38,39,38,39,37, 1,54,1,248,44,19,13,17,23,38,38,254,241,1,128,32, 8,26,29,55,254,134,1,116,44,2,213,15,103,16,14,2, 46,254,184,176,163,45,29,34,25,170,1,184,56,0,0,2, 0,51,255,214,2,80,2,216,0,65,0,79,0,0,1,50, 23,22,23,21,20,7,6,7,6,7,22,23,22,23,7,38, 39,6,15,1,34,39,38,47,2,52,55,54,55,50,31,1, 22,23,22,23,54,55,54,61,1,52,39,38,39,38,35,34, 7,6,7,6,7,6,29,1,39,53,52,55,54,55,54,3, 20,23,50,55,54,55,38,39,38,35,34,7,6,1,76,141, 71,46,2,41,41,43,40,22,19,47,8,7,73,47,28,73, 45,20,65,32,34,8,7,3,82,19,22,27,27,12,17,21, 43,30,66,48,34,103,10,11,31,12,15,25,55,38,3,3, 20,95,94,24,27,48,134,62,28,20,22,8,20,39,20,19, 19,14,8,2,216,96,62,88,63,93,76,74,40,37,15,16, 58,10,8,34,40,38,38,8,1,26,27,25,22,17,101,24, 5,1,8,3,4,13,22,49,42,98,65,86,44,122,42,4, 3,9,6,6,56,4,4,32,50,61,2,66,105,70,18,12, 21,253,143,32,7,13,14,8,34,18,10,15,17,0,0,1, 0,79,0,0,2,138,2,216,0,29,0,0,33,35,17,52, 39,38,39,34,7,6,7,6,29,1,35,53,52,55,54,55, 54,51,50,23,22,23,22,21,17,51,2,138,192,43,40,59, 68,33,9,8,24,95,25,42,108,29,33,140,61,5,5,26, 97,2,5,83,27,24,2,29,7,10,31,59,204,210,50,47, 81,21,6,89,8,9,47,52,254,64,0,2,0,47,0,0, 2,113,2,212,0,24,0,34,0,0,41,1,52,55,54,55, 54,55,38,39,55,22,23,22,23,54,55,23,6,7,50,23, 22,23,22,47,1,38,39,34,7,6,7,6,7,2,113,253, 190,105,23,27,45,9,25,47,60,59,9,10,11,61,136,66, 122,64,8,48,111,35,13,88,17,61,117,3,38,47,37,47, 20,219,181,40,34,61,1,17,19,71,20,5,5,7,55,63, 67,55,45,66,149,200,72,26,69,210,121,53,67,75,99,106, 0,1,0,45,0,0,2,202,2,217,0,30,0,0,1,7, 17,20,7,6,15,1,6,7,6,35,34,39,38,39,38,53, 17,51,17,20,23,22,51,50,55,54,53,17,51,2,202,106, 57,12,14,31,2,2,64,101,104,63,64,24,25,95,45,45, 103,124,39,18,199,2,124,1,254,191,161,69,14,12,21,2, 1,34,39,40,64,73,98,1,158,254,98,134,48,47,91,44, 94,1,159,0,0,1,0,49,255,244,2,42,2,216,0,65, 0,0,37,20,7,6,35,34,39,34,39,38,39,38,39,38, 53,51,20,23,22,23,50,55,54,53,52,39,38,43,1,53, 51,50,55,54,55,52,39,38,35,34,7,6,15,1,20,21, 35,52,55,54,55,54,51,50,23,22,21,20,7,6,7,22, 23,22,23,22,2,42,101,66,89,27,6,73,67,7,5,28, 20,16,93,59,60,40,39,60,60,52,53,48,232,231,50,41, 40,2,117,16,7,11,21,70,16,6,96,21,21,50,50,79, 119,60,53,32,29,24,11,23,22,26,25,203,118,59,38,1, 52,5,5,26,41,44,32,72,27,28,4,28,27,91,87,28, 28,77,23,22,70,92,15,2,3,19,40,25,5,5,40,40, 39,27,26,57,53,77,79,33,33,10,1,14,12,43,40,0, 0,1,0,9,0,0,2,214,2,217,0,31,0,0,19,51, 17,20,23,22,23,22,51,50,55,54,61,1,51,21,20,7, 6,7,6,7,6,35,34,39,38,39,38,39,17,39,9,249, 27,17,33,43,60,103,45,45,95,53,16,21,10,12,64,104, 199,57,13,7,5,2,154,2,217,254,97,115,43,27,20,24, 47,46,136,140,140,153,69,20,17,8,7,40,134,36,43,40, 61,1,65,1,0,1,0,40,255,244,2,44,2,227,0,50, 0,0,19,5,21,39,38,47,1,34,7,34,15,1,6,7, 6,29,1,20,23,22,31,3,50,55,54,55,53,51,21,20, 7,6,7,34,35,34,39,38,39,38,61,1,52,55,54,55, 54,55,39,92,1,166,114,9,9,22,18,30,9,15,25,48, 39,38,30,31,40,34,15,13,46,56,55,2,96,64,72,109, 5,5,123,77,27,16,18,43,41,43,40,25,140,2,227,97, 83,26,1,1,1,5,5,9,17,58,58,103,91,68,42,40, 15,11,2,1,34,32,92,64,70,78,73,72,4,84,29,35, 40,39,118,102,65,65,26,25,9,30,0,1,0,74,0,1, 2,125,2,217,0,27,0,0,37,35,17,52,39,38,39,34, 15,1,6,7,17,35,17,52,55,54,55,54,51,50,23,22, 31,1,22,21,2,125,95,45,45,103,108,43,12,16,2,94, 57,24,37,64,101,105,62,77,22,8,6,1,1,157,134,48, 47,1,68,24,41,97,254,99,1,158,160,69,29,21,35,40, 48,88,41,42,55,0,0,1,0,66,255,242,2,71,2,216, 0,42,0,0,5,37,53,23,54,55,54,55,54,55,54,61, 1,52,39,38,39,38,39,34,7,6,7,21,7,53,52,55, 54,51,50,23,22,31,1,20,7,6,15,1,6,7,23,1, 232,254,110,131,23,11,54,54,48,41,38,31,41,65,7,22, 78,50,29,2,95,64,75,115,173,71,16,2,1,35,38,55, 31,41,48,151,14,105,85,37,2,2,8,27,23,56,55,90, 85,67,37,47,11,1,3,57,34,67,64,1,72,83,68,75, 147,42,37,116,78,57,60,35,17,21,10,40,0,1,0,74, 0,1,2,125,2,217,0,36,0,0,37,35,17,34,15,1, 6,7,6,7,6,7,21,35,53,52,55,54,55,54,51,50, 23,22,31,1,22,21,17,35,17,52,39,38,39,17,20,1, 139,95,28,7,25,30,21,1,2,16,2,94,57,24,37,64, 101,105,62,77,22,8,6,95,44,31,70,223,1,165,3,14, 18,50,3,4,41,97,42,43,160,69,29,21,35,40,48,88, 41,42,55,254,98,1,157,133,49,31,18,254,112,21,0,2, 0,42,255,248,2,199,2,224,0,22,0,80,0,0,1,6, 15,1,6,7,6,7,51,50,23,22,23,54,55,52,39,38, 39,38,39,38,35,1,39,52,39,33,21,35,53,51,21,51, 50,55,54,61,1,39,38,39,38,35,39,34,39,34,39,53, 52,55,54,55,54,59,1,50,23,50,23,22,23,22,23,22, 23,22,23,22,21,20,7,6,7,6,7,51,50,23,22,1, 73,88,48,14,28,18,9,2,21,179,100,76,20,41,3,35, 5,6,15,44,61,53,1,112,83,69,254,89,90,90,127,90, 52,33,2,12,92,70,103,80,18,7,6,6,16,8,32,73, 160,21,14,11,12,7,48,39,35,56,7,5,13,20,16,6, 20,84,34,39,123,115,18,3,2,148,10,50,15,34,56,34, 27,49,37,67,86,71,74,59,8,9,21,23,28,253,100,3, 55,2,54,186,55,42,28,38,13,8,52,26,19,2,1,2, 89,68,35,21,58,104,2,2,7,16,12,53,7,5,14,54, 48,46,46,27,124,86,35,20,108,15,0,1,0,74,0,1, 2,201,2,217,0,31,0,0,37,51,23,7,23,7,17,52, 39,38,39,34,15,1,6,7,17,35,17,52,55,54,55,54, 51,50,23,22,31,1,22,21,2,125,75,1,79,1,93,45, 45,103,108,43,12,16,2,94,57,24,37,64,101,105,62,77, 22,8,6,250,80,1,167,1,1,157,134,48,47,1,68,24, 41,97,254,99,1,158,160,69,29,21,35,40,48,88,41,42, 55,0,0,1,0,79,255,244,2,130,2,204,0,27,0,0, 1,51,17,20,7,6,7,6,35,34,39,38,39,38,53,17, 51,17,20,23,22,23,22,23,50,55,54,53,2,35,95,50, 24,39,62,105,185,61,22,9,6,94,28,17,33,43,60,102, 45,46,2,204,254,98,147,69,32,26,40,116,40,57,45,56, 1,158,254,99,117,44,26,18,23,2,47,46,137,0,0,1, 0,74,0,1,2,215,2,217,0,31,0,0,37,53,6,7, 6,35,34,39,38,39,38,61,1,51,21,20,23,22,23,22, 23,50,55,54,55,54,61,1,51,17,51,21,2,27,12,58, 55,54,100,68,95,18,5,94,28,16,34,41,62,107,52,17, 10,7,95,90,1,215,25,19,13,37,52,137,40,51,101,100, 116,44,26,20,22,2,52,17,45,41,75,252,253,134,94,0, 0,1,0,45,255,243,2,103,2,216,0,55,0,0,1,34, 7,6,21,20,23,22,23,22,23,22,23,22,31,1,20,7, 6,7,6,35,34,39,38,53,55,22,31,1,50,55,54,53, 52,47,1,38,39,38,39,38,39,52,55,54,51,50,31,1, 22,31,1,21,7,38,1,72,120,34,10,27,29,114,116,43, 61,31,22,6,2,32,47,106,39,41,239,56,10,89,13,167, 32,99,49,29,84,210,88,37,3,3,23,3,101,64,87,164, 67,3,17,12,6,91,12,2,133,64,20,24,39,24,26,25, 25,21,28,45,30,45,27,54,52,74,25,9,175,31,36,8, 142,22,1,51,29,41,71,30,58,29,50,4,5,33,57,108, 54,35,96,5,29,35,38,11,7,135,0,1,0,74,0,1, 2,125,2,217,0,27,0,0,1,35,53,52,39,38,39,34, 15,1,6,7,17,35,17,52,55,54,55,54,51,50,23,22, 31,1,22,21,2,125,95,45,45,103,108,43,12,16,2,94, 57,24,37,64,101,105,62,77,22,8,6,1,38,120,134,48, 47,1,68,24,41,97,254,99,1,158,160,69,29,21,35,40, 48,88,41,42,55,0,0,2,0,60,255,244,2,57,2,216, 0,59,0,81,0,0,1,50,23,20,15,1,6,7,22,23, 22,23,22,23,20,7,6,7,6,35,34,39,38,39,51,20, 23,22,31,2,50,55,54,55,54,53,52,39,38,47,3,34, 7,39,54,55,54,55,38,39,38,39,52,55,54,55,54,19, 50,55,54,53,52,39,38,39,38,35,34,7,6,7,6,21, 20,23,22,23,22,1,56,231,3,50,9,15,14,49,36,5, 4,15,2,30,47,112,32,35,120,69,61,3,93,35,33,38, 34,20,23,37,37,32,33,29,30,36,34,21,11,104,35,106, 14,30,34,17,22,31,30,2,15,16,52,54,96,97,31,12, 28,28,35,35,15,12,18,45,33,33,22,18,36,33,2,216, 184,76,40,6,10,6,12,68,9,10,37,59,59,52,83,23, 6,63,55,97,56,31,29,14,8,2,9,9,32,33,65,61, 34,34,9,7,2,1,53,1,44,23,23,7,8,31,30,71, 36,42,41,32,33,254,216,60,23,29,46,25,25,6,6,3, 9,24,24,48,35,28,18,19,12,0,0,1,0,76,0,0, 1,95,2,211,0,7,0,0,19,51,21,51,21,35,17,35, 76,95,180,180,95,2,211,248,80,254,117,0,0,3,0,42, 0,1,2,228,2,213,0,35,0,42,0,53,0,0,19,52, 55,54,55,54,55,53,51,21,51,50,31,1,22,23,22,23, 22,21,20,7,6,7,6,7,21,35,53,38,39,38,39,38, 39,38,55,20,23,17,6,7,6,1,54,55,54,55,54,55, 52,39,38,39,42,67,65,70,60,41,94,8,6,4,22,27, 34,65,68,67,66,66,68,65,36,94,75,66,17,11,50,17, 67,95,208,122,57,27,1,44,137,50,4,3,13,2,134,34, 41,1,106,124,70,67,23,19,5,55,55,1,4,6,12,18, 70,70,127,126,71,69,23,22,3,47,47,9,33,8,8,37, 22,68,127,193,41,1,209,13,100,49,254,209,25,103,8,8, 35,55,158,54,13,6,0,2,0,36,0,0,2,86,2,216, 0,28,0,45,0,0,1,34,39,38,39,21,33,21,33,21, 35,53,35,53,51,17,52,55,54,55,54,51,50,23,22,23, 20,7,6,39,20,23,22,51,50,53,52,39,38,39,34,7, 6,7,6,21,1,115,65,39,38,12,1,125,254,130,93,87, 87,15,21,69,53,80,166,53,12,2,116,46,214,65,41,48, 128,48,45,46,63,46,4,4,26,1,19,21,23,16,136,78, 121,121,78,1,68,47,26,64,39,29,132,40,35,170,54,22, 197,62,36,22,159,82,30,28,2,43,4,4,29,55,0,2, 0,48,255,244,2,221,2,217,0,19,0,34,0,0,5,34, 39,38,39,52,55,54,55,50,23,22,23,22,23,20,7,6, 7,6,1,20,23,22,51,50,54,53,52,39,38,35,34,7, 6,1,135,163,97,81,2,96,94,153,157,97,27,18,41,2, 44,52,111,64,254,196,69,71,104,107,138,115,58,70,100,74, 72,12,119,99,143,176,102,100,2,112,31,36,83,110,107,86, 104,46,26,1,103,129,74,75,150,138,180,73,37,69,69,0, 0,3,0,39,255,247,2,161,2,213,0,11,0,19,0,65, 0,0,1,35,17,51,50,55,54,61,1,52,39,38,37,20, 51,55,53,35,39,34,7,38,39,38,53,52,55,54,55,54, 59,1,21,51,50,23,22,23,21,20,15,1,6,7,35,7, 34,39,38,39,38,39,38,53,51,20,23,22,23,22,51,17, 39,34,39,38,1,180,46,46,70,43,29,27,41,254,157,109, 34,19,22,102,9,38,13,9,29,41,96,18,25,95,46,166, 57,12,2,79,25,51,82,133,27,46,58,55,37,11,19,11, 93,11,8,40,37,71,45,16,23,34,1,177,254,146,52,34, 65,55,69,35,56,145,72,1,146,1,191,20,38,18,37,64, 32,47,5,1,217,134,41,35,86,101,67,19,31,2,1,16, 17,40,13,35,41,22,32,18,19,22,18,1,112,1,5,5, 0,1,0,53,1,233,0,155,2,211,0,10,0,0,19,53, 51,21,20,7,6,7,39,54,53,61,94,15,20,46,21,53, 2,109,102,80,65,30,36,23,34,20,78,0,0,1,0,24, 2,76,0,153,2,206,0,3,0,0,19,55,51,7,24,88, 41,104,2,76,130,130,0,1,0,23,2,73,1,46,2,218, 0,22,0,0,19,34,7,6,7,39,54,55,54,55,54,59, 1,31,1,50,55,21,6,7,6,43,1,116,44,28,3,10, 8,5,12,8,24,22,22,34,19,41,44,48,36,40,5,5, 78,2,127,36,3,15,47,8,11,9,14,11,1,2,48,45, 38,6,1,0,0,1,0,43,2,71,0,227,2,208,0,3, 0,0,19,35,39,51,227,71,113,118,2,71,137,0,0,1, 0,21,2,83,1,44,3,14,0,34,0,0,1,52,39,38, 39,34,7,6,21,35,53,54,55,54,55,54,51,50,23,22, 21,20,7,6,35,34,53,51,20,23,22,23,50,55,54,0, 255,33,8,36,68,22,20,47,12,36,14,18,38,63,74,17, 7,63,15,18,90,44,28,8,12,37,8,3,2,172,43,7, 2,3,39,38,53,30,73,30,11,10,19,48,20,31,68,16, 4,90,38,8,2,1,24,10,0,1,0,65,255,246,3,0, 2,8,0,40,0,0,23,34,39,17,51,17,20,23,22,23, 22,51,50,55,54,53,17,51,17,20,23,22,51,50,55,54, 55,52,53,17,51,17,35,53,6,7,6,35,34,39,6,226, 158,3,88,16,8,15,23,30,54,36,37,88,72,9,11,34, 33,56,5,88,79,33,71,26,27,116,30,61,10,174,1,100, 254,185,69,22,11,11,14,36,36,81,1,45,254,175,105,11, 1,18,37,107,11,12,1,13,253,249,73,57,20,7,91,91, 0,1,0,74,255,45,1,239,2,17,0,29,0,0,37,35, 53,52,39,38,39,38,35,34,15,1,6,7,23,33,21,33, 7,35,17,51,21,54,51,50,31,1,22,21,1,239,88,6, 12,55,16,18,71,39,13,13,2,1,1,74,254,182,1,88, 79,60,104,78,53,14,33,189,98,73,19,55,15,5,54,22, 31,70,181,96,211,2,217,77,88,47,14,44,104,0,0,2, 0,35,255,47,2,49,2,18,0,24,0,40,0,0,19,50, 23,22,23,53,51,3,51,21,35,21,39,17,6,7,34,39, 38,39,38,53,52,55,54,19,52,39,38,35,34,7,6,21, 20,23,22,51,50,55,54,254,84,48,9,10,80,1,77,77, 87,50,86,58,57,83,22,6,103,50,217,43,43,56,55,42, 41,41,42,59,57,41,40,2,18,55,11,13,68,254,72,79, 209,1,1,6,63,3,34,52,120,33,36,163,70,34,254,238, 101,52,52,49,50,98,103,50,50,47,47,0,0,1,0,73, 255,47,2,55,2,3,0,28,0,0,1,50,31,1,22,23, 17,51,21,35,21,35,17,52,39,34,7,6,7,17,35,17, 51,21,54,55,54,55,54,1,65,89,38,10,7,2,100,100, 86,80,110,25,6,1,86,83,18,22,26,69,15,2,3,65, 18,22,25,254,189,62,209,2,44,91,2,114,25,31,254,242, 1,249,80,25,24,30,9,2,0,1,0,60,255,245,1,230, 2,209,0,31,0,0,33,35,53,6,35,34,39,38,39,38, 39,38,39,17,55,21,5,21,33,7,20,23,22,23,22,51, 50,55,54,61,1,51,1,225,79,58,107,92,46,3,3,17, 11,3,2,89,1,81,254,175,1,27,8,11,28,34,54,43, 41,87,74,85,52,4,4,24,42,29,56,2,7,2,201,1, 92,223,77,29,9,7,17,35,36,100,97,0,0,2,0,42, 255,47,2,66,2,6,0,26,0,44,0,0,55,52,55,54, 51,50,23,22,23,53,51,17,51,21,35,17,6,7,6,35, 34,39,38,39,38,39,38,23,50,55,54,55,52,39,38,35, 34,7,6,21,20,23,22,23,22,42,77,55,83,62,34,34, 10,82,99,184,41,85,12,13,108,57,6,7,8,9,6,228, 72,35,19,1,62,30,40,97,28,9,55,19,24,18,245,142, 76,55,25,25,17,54,253,112,58,1,15,65,10,1,108,13, 15,26,35,35,162,89,47,55,128,50,24,116,38,46,105,54, 19,8,5,0,0,1,0,94,255,135,1,101,2,209,0,11, 0,0,37,21,47,1,35,17,51,21,51,21,35,17,1,62, 75,1,148,86,177,177,74,195,2,119,2,209,243,77,254,185, 0,1,0,63,255,48,1,228,2,17,0,32,0,0,5,35, 17,52,39,38,39,38,35,34,15,1,6,7,6,7,19,33, 21,37,17,51,21,54,51,50,23,22,23,22,23,22,21,1, 228,88,5,12,53,17,20,66,39,15,1,1,14,2,1,1, 72,254,95,79,60,105,73,52,11,8,18,10,5,1,1,32, 76,16,53,17,5,48,23,2,3,33,68,254,119,92,2,2, 212,77,88,42,9,10,24,42,40,42,0,2,0,68,255,35, 2,42,2,6,0,42,0,56,0,0,55,52,55,54,55,51, 53,38,39,34,7,6,7,6,7,17,7,19,51,21,54,55, 54,55,54,51,55,50,23,22,23,21,51,21,35,21,20,7, 6,7,34,39,38,23,50,55,54,61,1,35,34,7,6,7, 20,23,22,208,59,38,51,83,8,125,26,27,50,21,30,3, 81,2,78,10,31,18,44,5,5,32,116,45,48,3,49,48, 33,38,75,94,39,19,152,66,13,3,95,53,15,3,1,44, 19,126,78,43,28,1,65,112,4,6,21,35,48,47,253,248, 1,2,214,65,20,28,18,9,1,2,48,63,54,80,60,63, 66,43,54,2,66,32,33,71,14,16,64,62,14,16,45,20, 8,0,0,2,0,48,255,242,2,70,2,211,0,27,0,41, 0,0,19,52,55,54,59,1,53,51,21,51,21,35,21,20, 7,6,43,1,39,34,39,34,39,38,39,38,39,38,37,35, 34,7,20,23,22,23,50,55,54,55,54,53,48,66,56,85, 140,89,98,98,105,48,67,14,18,4,8,4,38,11,15,86, 15,3,1,94,122,133,5,31,30,73,60,35,16,7,9,1, 2,120,73,61,211,212,68,233,132,62,30,2,2,13,4,12, 56,134,24,213,190,90,55,53,2,51,27,38,48,82,0,1, 0,66,255,51,1,232,2,204,0,25,0,0,23,17,51,17, 54,51,50,23,22,21,22,21,17,35,17,52,39,38,35,34, 7,6,7,6,21,17,66,88,62,93,151,22,1,5,88,88, 10,11,68,40,8,6,15,205,3,153,254,255,71,128,3,3, 33,34,254,183,1,73,112,12,2,52,11,12,36,60,254,23, 0,1,0,60,255,48,0,247,2,7,0,5,0,0,23,21, 35,3,51,19,247,186,1,87,1,125,83,2,215,253,124,0, 0,1,0,66,255,46,2,214,2,201,0,33,0,0,1,35, 17,35,17,51,21,51,17,20,23,22,23,22,23,50,55,54, 53,17,51,17,35,53,6,7,34,39,38,39,38,39,38,53, 1,48,153,85,85,242,26,8,12,25,36,56,41,41,88,79, 56,109,87,48,5,4,20,8,7,1,183,253,119,3,155,193, 254,194,76,29,9,8,15,2,36,34,101,1,28,253,249,74, 84,2,49,5,6,29,37,54,87,0,0,2,0,43,255,242, 2,11,2,230,0,43,0,64,0,0,5,34,39,38,53,52, 55,54,63,2,54,55,54,51,55,38,39,38,39,52,55,23, 6,7,20,23,22,23,51,21,35,22,23,22,23,22,31,1, 20,23,20,7,6,39,50,55,54,55,54,55,52,39,38,39, 38,35,34,15,1,6,21,20,23,22,1,13,129,66,31,6, 1,2,10,6,22,48,46,65,22,16,24,22,2,85,51,59, 1,26,27,41,146,102,7,11,23,14,1,1,2,1,71,57, 81,84,28,6,5,2,1,35,5,6,24,31,120,30,10,4, 115,12,14,126,65,81,29,31,14,3,31,14,58,40,39,1, 11,30,28,40,61,54,52,22,40,26,32,32,28,64,5,17, 30,84,7,6,33,25,14,115,69,55,70,101,22,28,25,27, 86,64,10,7,30,94,42,28,36,181,17,2,0,1,0,71, 255,45,1,238,2,209,0,23,0,0,5,39,17,6,7,34, 39,38,39,38,39,17,51,17,20,51,50,55,54,55,54,53, 17,51,1,238,88,61,95,115,42,1,2,18,1,88,110,71, 38,7,5,16,88,211,1,1,20,69,2,78,3,4,41,76, 2,12,253,244,126,55,9,11,37,59,1,23,0,1,0,66, 0,0,1,232,2,204,0,25,0,0,51,17,51,17,54,51, 50,23,22,21,22,21,17,35,17,52,39,38,35,34,7,6, 7,6,21,17,66,88,62,93,151,22,1,5,88,88,10,11, 68,40,8,6,15,2,204,254,255,71,128,3,3,33,34,254, 183,1,73,112,12,2,52,11,12,36,60,254,228,0,0,2, 0,40,255,242,1,216,2,224,0,50,0,73,0,0,1,20, 15,1,22,23,22,21,17,35,53,6,7,6,35,34,39,38, 39,38,53,52,55,54,55,54,55,54,55,54,55,52,39,38, 39,38,39,52,55,51,14,1,21,20,31,1,50,23,22,23, 22,1,20,23,22,23,50,55,54,53,52,55,52,39,38,39, 38,43,1,34,7,6,7,6,1,145,76,14,97,42,22,77, 7,34,32,62,62,50,51,28,29,13,7,16,18,10,35,68, 83,14,42,36,30,25,4,41,72,3,18,15,56,22,24,20, 4,1,254,240,67,30,42,90,34,8,1,37,24,47,11,10, 12,7,9,39,38,38,2,108,31,61,11,19,101,54,67,254, 236,63,19,29,29,33,34,62,69,76,32,36,25,27,30,10, 48,50,59,25,4,4,4,7,6,18,42,49,12,30,6,9, 6,8,6,8,16,6,254,139,128,49,22,1,120,56,11,11, 4,92,46,44,11,2,4,11,54,55,0,1,0,39,255,47, 2,20,2,3,0,23,0,0,5,35,17,52,39,34,7,6, 7,17,35,17,51,21,54,55,54,51,50,23,22,21,17,51, 2,20,185,81,91,37,8,5,86,82,41,15,41,68,75,35, 36,100,209,2,44,91,2,83,23,32,254,210,1,249,83,51, 12,30,41,39,50,253,237,0,0,2,0,43,0,0,1,251, 2,219,0,25,0,39,0,0,1,6,7,22,23,22,21,23, 49,7,20,7,33,38,39,52,55,54,55,54,55,39,55,23, 54,55,3,38,39,38,39,38,39,38,35,7,6,7,6,21, 1,251,32,156,150,25,1,3,1,1,254,61,1,1,39,8, 8,38,69,64,49,62,102,104,36,19,49,5,10,14,21,28, 5,4,54,40,35,2,171,31,166,166,228,2,3,56,21,8, 2,14,17,92,117,22,15,92,92,49,64,50,122,85,253,107, 143,88,13,17,26,28,37,7,78,102,90,75,0,1,0,73, 255,246,1,213,2,213,0,48,0,0,19,52,55,54,59,1, 50,23,21,39,34,15,1,20,31,1,22,23,22,21,17,35, 53,7,6,7,34,35,34,39,38,53,17,51,17,22,23,50, 55,54,55,53,52,39,38,39,38,39,38,244,100,19,25,64, 9,4,84,40,9,5,27,49,44,12,10,84,56,35,67,4, 3,84,47,16,86,9,71,122,19,2,2,16,17,36,37,16, 18,2,128,74,9,2,1,68,1,12,11,20,27,49,46,27, 24,27,254,98,56,36,28,2,66,34,25,1,134,254,160,84, 4,112,11,26,203,28,21,22,30,33,25,27,0,1,255,210, 255,46,0,153,2,7,0,15,0,0,23,50,55,54,53,17, 51,17,20,7,6,35,34,39,55,22,12,44,7,2,88,54, 28,48,42,27,17,27,133,51,16,40,2,33,253,221,128,35, 19,9,75,7,0,1,0,73,255,246,1,210,2,214,0,45, 0,0,33,35,53,7,6,7,6,7,6,7,34,47,1,38, 47,1,19,52,55,54,55,54,59,1,21,34,15,2,6,7, 20,7,17,20,23,22,23,50,55,50,55,54,55,17,51,1, 210,80,28,28,17,13,17,23,40,27,38,17,40,20,5,1, 48,8,9,45,72,65,102,33,13,5,6,4,1,46,9,25, 6,16,26,37,40,17,87,83,30,34,10,7,3,7,2,10, 9,24,46,33,1,169,65,62,12,8,42,61,39,22,12,25, 30,16,10,254,149,57,23,5,2,2,20,25,90,1,51,0, 0,1,0,53,255,47,1,137,1,254,0,47,0,0,1,52, 39,38,35,34,7,39,54,55,50,23,22,21,20,15,2,6, 7,6,21,22,59,1,54,55,21,35,34,47,1,34,39,38, 39,38,39,38,39,52,55,54,55,54,63,1,54,1,61,41, 26,32,51,46,43,59,86,79,51,39,40,28,34,102,22,24, 4,92,12,12,131,127,70,60,10,4,6,11,3,21,13,7, 8,15,35,109,34,22,37,12,1,66,52,35,23,56,58,73, 3,64,48,60,64,59,42,48,143,38,38,23,31,1,1,63, 5,2,3,2,3,7,15,13,31,26,31,59,154,47,33,56, 20,0,0,1,0,69,255,255,1,234,2,17,0,26,0,0, 5,35,17,52,39,38,39,38,35,34,15,1,6,7,17,35, 17,51,21,54,51,50,23,22,23,22,21,1,234,88,6,9, 51,19,22,69,40,14,13,2,88,79,60,105,75,53,9,7, 33,1,1,32,73,19,50,18,7,52,24,34,67,254,234,2, 7,77,88,45,8,8,44,104,0,1,0,35,255,47,1,101, 2,9,0,50,0,0,5,35,34,39,34,39,38,39,38,39, 52,63,1,54,55,52,39,38,39,38,39,52,55,54,55,23, 7,6,21,20,31,1,22,23,22,21,20,15,1,6,7,6, 21,23,22,59,1,55,51,55,51,1,101,107,74,29,16,31, 35,11,17,2,39,139,5,1,62,23,23,20,6,44,41,32, 86,71,41,2,61,38,15,15,23,69,66,16,9,2,7,87, 11,17,8,99,2,209,3,7,13,14,24,39,36,52,195,6, 11,27,41,16,20,19,18,21,68,58,42,19,85,53,20,5, 1,54,32,18,18,19,22,32,94,91,29,18,15,13,31,1, 1,0,0,1,0,65,255,43,3,0,2,8,0,40,0,0, 23,34,39,17,51,17,20,23,22,23,22,51,50,55,54,53, 17,51,17,20,23,22,51,50,55,54,55,52,53,17,51,17, 35,17,6,7,6,35,34,39,6,226,158,3,88,16,8,15, 23,30,54,36,37,88,72,9,11,34,33,56,5,88,79,33, 71,26,27,116,30,61,10,174,1,100,254,185,69,22,11,11, 14,36,36,81,1,45,254,175,105,11,1,18,37,107,11,12, 1,13,253,35,1,31,57,20,7,91,91,0,0,2,0,38, 255,47,1,207,2,20,0,55,0,86,0,0,19,54,55,54, 51,23,50,23,22,23,22,23,22,21,20,7,6,15,1,6, 7,6,21,20,23,51,55,51,55,51,21,35,34,39,38,39, 52,55,54,55,54,55,54,53,52,47,2,38,39,38,53,55, 52,55,52,55,34,7,6,7,20,23,22,23,22,23,22,23, 54,63,1,54,55,54,55,54,53,52,39,52,39,38,39,38, 39,38,45,21,84,46,43,33,15,15,30,24,88,16,3,9, 33,117,55,21,35,22,112,11,17,8,92,2,147,72,31,71, 10,40,5,2,37,19,14,42,39,36,30,11,3,2,2,192, 92,29,7,2,23,1,2,13,31,78,1,3,12,24,33,30, 4,3,30,3,6,16,46,4,5,38,1,137,78,40,21,1, 6,6,16,46,109,18,18,41,31,119,103,44,17,33,22,14, 35,1,1,1,63,3,7,62,27,45,5,3,39,28,22,20, 40,38,35,30,25,76,20,17,31,9,5,8,72,83,21,26, 36,35,1,3,21,31,58,90,2,12,26,33,52,7,6,57, 59,19,12,12,12,55,21,2,2,16,0,1,0,80,255,254, 1,247,2,17,0,41,0,0,1,54,53,52,39,38,39,34, 7,6,7,6,21,17,35,17,51,21,54,51,50,23,22,23, 22,23,22,23,20,7,6,7,6,15,1,51,7,39,53,50, 55,54,1,159,3,46,26,40,72,39,7,5,15,88,79,60, 104,74,53,11,7,10,12,11,2,16,10,19,13,4,112,116, 1,176,2,31,93,1,52,16,14,62,34,19,1,55,10,11, 34,67,254,234,2,7,77,88,44,8,9,12,42,33,26,43, 37,28,31,20,3,114,81,1,77,32,97,0,0,1,0,64, 255,244,1,228,2,7,0,29,0,0,33,53,6,35,34,39, 38,39,38,39,38,53,17,51,17,20,23,22,23,22,51,50, 55,54,55,54,53,17,51,17,1,150,61,104,70,54,12,8, 19,9,5,88,5,12,56,16,18,72,38,7,5,15,88,76, 88,42,9,10,25,41,45,37,1,66,254,224,77,16,54,16, 4,54,11,11,34,67,1,22,253,249,0,1,0,71,255,45, 2,68,2,204,0,25,0,0,5,17,6,7,34,39,38,39, 38,39,17,51,17,20,51,50,55,54,55,54,53,17,51,3, 51,21,1,150,61,95,115,42,1,2,18,1,88,110,71,38, 7,5,16,88,2,88,210,1,20,69,2,78,3,4,41,76, 1,68,254,188,126,55,9,11,37,59,1,218,252,172,75,0, 0,1,0,73,255,243,3,64,2,17,0,53,0,0,5,35, 17,52,39,38,39,38,35,34,7,6,7,6,7,17,35,53, 6,35,34,39,38,39,38,39,38,53,17,51,17,20,23,22, 23,22,51,50,55,54,55,54,53,17,51,21,54,51,50,23, 22,23,22,21,3,64,88,6,12,55,16,18,72,39,7,5, 13,2,84,61,104,71,54,11,8,19,9,5,88,5,12,56, 16,18,70,39,8,5,15,85,60,104,76,53,9,7,33,1, 1,32,73,19,55,15,5,55,10,11,31,70,254,234,76,88, 43,9,9,25,41,45,37,1,66,254,224,77,16,54,16,4, 53,11,12,35,66,1,22,77,88,45,8,8,44,104,0,1, 0,69,255,45,1,234,2,17,0,26,0,0,5,35,17,52, 39,38,39,38,35,34,15,1,6,7,17,35,17,51,21,54, 51,50,23,22,23,22,21,1,234,88,6,9,51,19,22,69, 40,14,13,2,88,79,60,105,75,53,9,7,33,1,1,32, 73,19,50,18,7,52,24,34,67,254,24,2,217,77,88,45, 8,8,44,104,0,2,0,32,255,46,1,233,2,18,0,35, 0,51,0,0,19,52,55,54,51,50,23,53,51,17,20,7, 6,7,6,35,34,39,38,39,38,53,23,22,23,50,55,54, 55,54,55,6,35,34,39,38,55,20,23,22,51,50,55,54, 53,52,39,38,35,34,7,6,32,79,58,88,92,59,81,24, 37,107,31,35,134,48,6,4,13,85,9,110,104,30,3,3, 4,2,57,87,129,59,35,90,40,40,62,60,41,41,42,43, 59,58,42,40,1,6,138,75,55,74,63,254,63,119,51,81, 23,6,74,9,10,29,45,13,79,3,77,7,9,28,85,68, 111,64,94,103,46,47,47,47,99,95,48,49,48,43,0,1, 0,76,0,0,1,31,1,249,0,5,0,0,19,17,51,21, 35,17,161,126,211,1,249,254,69,62,1,249,0,1,0,43, 255,50,3,34,2,211,0,53,0,0,1,50,23,22,23,22, 23,22,21,17,35,17,52,39,38,47,1,35,34,7,6,7, 6,21,17,35,17,6,35,34,39,38,39,38,53,17,51,17, 20,23,22,23,22,51,50,55,54,55,54,55,17,51,17,54, 2,113,77,53,9,6,17,10,5,88,5,12,53,31,6,69, 39,9,5,15,85,61,103,71,54,11,8,34,88,6,13,58, 14,16,73,38,7,5,13,2,84,60,2,17,46,7,8,25, 41,40,42,254,191,1,32,76,16,53,17,5,53,11,12,34, 67,254,29,1,25,88,43,8,10,44,104,1,66,254,224,74, 19,57,14,3,55,10,11,31,70,1,227,254,230,88,0,2, 0,25,255,47,2,55,2,6,0,28,0,47,0,0,37,34, 39,21,33,21,33,21,35,53,35,53,51,17,51,21,54,55, 54,51,50,23,22,21,20,7,6,7,6,55,52,47,1,34, 35,34,7,6,21,20,23,22,23,50,55,50,55,54,1,85, 80,50,1,53,254,203,86,100,100,81,7,35,34,62,133,62, 28,56,45,72,17,102,92,36,6,6,63,32,33,56,30,41, 14,5,85,27,10,34,65,165,58,85,85,58,2,59,65,19, 30,29,116,59,80,99,59,53,13,3,237,145,25,6,48,47, 81,96,49,26,2,1,96,35,0,2,0,50,255,244,2,24, 2,18,0,17,0,33,0,0,19,52,55,54,51,50,23,22, 21,20,7,6,7,6,7,34,39,38,55,20,23,22,51,50, 55,54,53,52,39,38,39,34,7,6,50,154,40,49,106,68, 69,80,17,21,55,70,109,67,67,90,44,42,67,65,43,44, 44,42,66,65,44,42,1,3,199,57,15,71,69,123,154,67, 14,12,30,2,70,68,133,101,48,49,49,50,102,95,50,49, 2,50,48,0,0,3,0,42,255,47,2,111,2,214,0,38, 0,47,0,55,0,0,19,52,55,54,55,50,55,21,51,50, 31,1,22,21,20,7,6,35,7,21,35,53,7,39,34,47, 1,38,39,38,53,51,20,51,17,7,34,39,38,5,17,51, 50,55,54,53,52,35,39,20,23,22,51,53,34,7,89,125, 17,19,1,114,61,142,42,7,6,100,50,61,45,87,56,12, 12,15,19,45,39,40,78,160,21,59,56,55,1,22,37,95, 30,11,141,227,72,15,20,98,8,2,68,110,28,3,3,1, 223,151,28,29,31,167,64,32,1,208,208,1,2,3,5,10, 32,33,59,74,1,110,1,35,36,70,254,146,105,38,48,175, 150,69,11,2,157,62,0,1,0,70,255,248,2,33,2,211, 0,25,0,0,55,50,55,53,51,3,51,23,7,53,6,7, 6,7,6,7,34,39,38,39,38,53,3,51,17,22,236,140, 3,86,1,80,1,163,37,20,20,26,23,39,45,40,4,5, 52,1,86,6,67,143,146,254,227,68,1,82,47,15,14,8, 6,2,24,2,3,37,57,2,96,253,200,85,0,2,0,90, 0,0,0,190,2,7,0,3,0,7,0,0,19,53,51,21, 3,53,51,21,90,100,100,100,1,162,101,101,254,94,100,100, 0,1,0,12,0,166,1,38,1,7,0,11,0,0,37,6, 7,34,39,55,22,23,22,23,50,55,1,38,65,85,42,90, 46,38,25,27,33,39,48,203,34,3,21,76,24,10,7,2, 15,0,0,2,0,0,255,2,0,71,255,196,0,3,0,7, 0,0,21,51,21,35,53,51,21,35,71,71,71,71,184,70, 194,71,0,5,0,0,255,2,1,79,255,196,0,3,0,7, 0,11,0,15,0,19,0,0,21,51,21,35,55,51,21,35, 7,51,21,35,55,51,21,35,53,51,21,35,71,71,129,71, 71,64,70,70,200,70,70,70,70,60,71,71,71,53,70,70, 70,194,71,0,0,3,0,0,255,2,1,73,255,196,0,3, 0,7,0,11,0,0,21,51,21,35,5,51,21,35,53,51, 21,35,188,188,1,3,70,70,70,70,60,71,53,70,194,71, 0,3,0,0,255,2,1,73,255,196,0,3,0,7,0,15, 0,0,5,51,21,35,53,51,21,43,1,21,35,53,35,53, 51,21,1,3,70,70,70,70,130,70,59,188,184,70,194,71, 117,117,71,71,0,1,0,0,255,125,0,71,255,196,0,3, 0,0,21,51,21,35,71,71,60,71,0,2,0,0,255,125, 0,200,255,196,0,3,0,7,0,0,21,51,21,35,55,51, 21,35,71,71,129,71,71,60,71,71,71,0,0,3,0,0, 255,2,0,200,255,196,0,3,0,7,0,11,0,0,21,51, 21,35,55,51,21,35,7,51,21,35,71,71,129,71,71,64, 70,70,60,71,71,71,53,70,0,1,0,0,255,125,0,188, 255,196,0,3,0,0,21,51,21,35,188,188,60,71,0,1, 0,0,255,8,0,188,255,196,0,7,0,0,23,21,35,53, 35,53,51,21,129,70,59,188,131,117,117,71,71,0,0,1, 0,0,2,148,0,71,2,219,0,3,0,0,17,51,21,35, 71,71,2,219,71,0,0,3,0,0,255,2,1,73,255,196, 0,3,0,7,0,11,0,0,5,51,21,35,39,51,21,35, 39,51,21,35,1,3,70,70,130,71,71,129,71,71,184,70, 135,70,129,71,0,1,0,0,1,14,0,71,1,85,0,3, 0,0,17,51,21,35,71,71,1,85,71,0,0,1,0,0, 255,8,0,71,255,196,0,3,0,0,23,21,35,53,71,71, 60,188,188,0,0,1,0,38,2,12,1,177,2,88,0,3, 0,0,1,33,53,33,1,177,254,117,1,139,2,12,76,0, 0,1,0,0,2,148,0,200,2,219,0,3,0,0,17,51, 21,35,200,200,2,219,71,0,0,1,0,62,255,156,0,149, 2,188,0,3,0,0,23,17,51,17,62,87,100,3,32,252, 224,0,0,1,2,127,2,128,2,198,2,199,0,3,0,0, 1,51,21,35,2,127,71,71,2,199,71,0,0,1,0,70, 2,128,0,141,2,199,0,3,0,0,19,51,21,35,70,71, 71,2,199,71,255,255,0,110,0,0,0,214,2,12,16,6, 0,29,0,0,0,1,0,0,2,148,0,71,2,219,0,3, 0,0,17,51,21,35,71,71,2,219,71,0,0,1,0,58, 0,0,2,70,2,88,0,37,0,0,19,6,7,6,7,6, 7,21,35,53,55,54,55,54,55,54,55,39,51,19,54,55, 54,55,54,55,53,51,21,7,6,7,6,7,6,7,23,35, 252,25,7,48,10,8,1,87,3,10,60,4,5,20,38,148, 102,228,25,7,47,10,9,1,87,3,11,58,5,5,20,38, 148,102,1,69,17,11,62,32,25,37,141,141,45,65,78,5, 6,25,25,210,254,187,17,11,61,25,25,36,150,150,43,62, 73,5,7,25,25,210,0,1,0,58,0,0,2,54,2,88, 0,27,0,0,37,17,38,39,38,39,38,39,38,39,35,53, 51,22,23,22,23,22,23,22,23,22,23,17,51,21,33,53, 1,149,13,16,6,7,34,106,8,18,139,145,94,49,12,12, 40,24,41,13,2,2,74,254,4,76,1,39,54,23,8,9, 39,16,1,3,76,11,20,5,6,17,32,52,61,8,10,254, 210,76,76,0,0,1,0,30,0,0,1,177,2,88,0,26, 0,0,37,7,35,55,51,39,38,39,38,39,38,39,38,39, 38,39,38,35,53,50,23,22,23,22,23,19,35,1,66,175, 117,207,81,22,6,19,6,11,13,16,1,4,62,32,15,19, 82,87,70,34,14,4,50,88,172,172,203,167,46,27,9,13, 15,8,1,2,28,4,1,76,42,31,82,32,34,254,133,0, 0,1,0,38,0,0,2,31,2,88,0,7,0,0,1,17, 35,17,33,53,33,21,1,204,87,254,177,1,249,2,12,253, 244,2,12,76,76,0,0,2,0,63,0,0,2,58,2,88, 0,26,0,30,0,0,1,17,35,17,38,39,38,39,38,47, 1,38,39,34,39,35,53,33,22,23,22,23,22,23,22,23, 22,1,17,51,17,2,58,87,11,14,5,6,10,12,6,38, 57,2,10,249,1,1,83,50,6,6,35,22,33,13,1,254, 6,87,1,122,254,134,1,116,55,24,8,8,14,7,4,21, 9,2,76,11,25,4,3,19,31,50,66,6,254,127,1,119, 254,137,0,1,0,62,0,0,0,149,2,88,0,3,0,0, 51,17,51,17,62,87,2,88,253,168,0,1,0,39,0,0, 1,40,2,88,0,7,0,0,19,17,35,17,35,53,33,21, 213,87,87,1,1,2,12,253,244,2,12,76,76,0,0,1, 0,63,0,0,2,59,2,88,0,24,0,0,1,17,35,17, 38,39,38,39,38,47,1,38,39,34,39,35,17,35,17,33, 50,23,22,23,22,2,59,87,11,14,5,6,10,12,6,38, 57,2,10,163,87,1,1,64,63,8,11,81,1,122,254,134, 1,116,55,24,8,8,14,7,4,21,9,2,253,244,2,88, 33,4,6,41,0,1,0,61,0,0,2,58,2,88,0,68, 0,0,1,34,7,53,54,51,50,23,22,23,22,23,22,23, 21,6,7,6,7,6,7,6,35,34,39,38,39,38,39,38, 39,17,51,17,22,23,22,23,22,23,20,23,22,23,22,51, 54,55,54,55,54,55,52,55,54,55,52,55,53,38,39,38, 39,38,47,1,38,39,38,1,58,32,45,42,38,72,76,36, 20,34,12,2,1,12,27,5,5,21,35,77,72,73,77,33, 23,36,11,1,1,87,11,17,4,4,11,11,6,50,28,11, 15,43,35,8,17,16,9,3,24,10,2,11,17,4,4,11, 11,6,51,23,13,2,12,20,82,14,43,20,30,49,65,7, 8,156,71,44,7,7,33,17,43,43,17,33,52,64,6,7, 1,122,254,140,56,28,5,6,15,6,1,3,27,3,2,1, 17,5,9,10,10,1,4,34,49,4,8,144,56,28,5,6, 15,6,4,27,3,2,0,1,0,58,1,30,0,145,2,88, 0,3,0,0,19,51,17,7,58,87,87,2,88,254,233,35, 0,1,0,38,255,56,1,218,2,88,0,26,0,0,1,17, 35,17,38,39,38,39,38,47,1,38,39,34,39,35,53,51, 22,23,22,23,22,23,22,23,22,1,218,87,11,14,5,6, 10,12,6,38,57,2,10,178,186,83,50,6,6,35,22,33, 13,1,1,122,253,190,2,60,55,24,8,8,14,7,4,21, 9,2,76,11,25,4,3,19,31,50,66,6,0,1,0,57, 0,0,2,4,2,88,0,44,0,0,51,35,53,51,54,55, 54,55,54,55,54,55,54,63,1,53,38,39,38,39,38,39, 38,39,35,53,51,22,23,22,23,22,23,22,23,22,23,21, 6,7,6,7,6,7,6,227,170,164,78,30,11,12,21,11, 1,2,26,12,4,13,16,6,7,34,106,8,18,164,170,95, 55,8,9,40,24,41,13,2,2,13,34,5,6,53,172,3, 76,11,12,4,6,10,12,2,2,32,46,16,142,54,23,8, 9,39,16,1,3,76,11,24,3,4,17,32,52,61,8,10, 156,69,47,7,8,69,21,1,0,1,0,37,0,0,2,33, 2,237,0,27,0,0,37,6,29,1,35,52,55,54,55,54, 55,54,55,54,55,53,33,53,51,21,33,21,20,15,1,6, 7,6,1,148,27,87,5,7,24,23,46,28,8,26,1,254, 91,87,1,165,31,5,22,46,29,208,42,97,69,120,30,49, 43,36,37,22,17,41,86,43,225,149,153,60,57,10,36,36, 23,0,0,2,0,63,0,0,2,60,2,88,0,10,0,20, 0,0,41,1,17,51,50,23,22,23,22,31,1,3,17,38, 39,38,39,38,39,35,17,2,59,254,4,217,85,84,39,26, 51,5,1,87,1,41,21,13,57,71,130,2,88,42,19,30, 63,53,18,254,213,1,43,51,39,18,8,32,1,254,64,0, 0,1,0,48,0,0,2,58,2,88,0,24,0,0,19,3, 35,19,35,53,51,50,23,22,23,22,21,17,33,53,51,17, 52,39,38,47,1,38,35,214,58,88,58,78,231,77,53,85, 45,31,254,214,211,18,28,31,35,36,56,2,12,253,244,2, 12,76,23,33,65,45,59,254,137,76,1,43,38,26,37,17, 16,15,0,1,0,62,255,56,0,149,2,88,0,3,0,0, 23,17,51,17,62,87,200,3,32,252,224,0,0,1,0,51, 0,0,1,70,2,88,0,20,0,0,41,1,53,51,17,38, 39,38,39,38,47,1,38,39,38,35,53,50,23,22,23,1, 70,254,237,188,11,14,5,6,10,12,6,52,29,10,13,73, 77,85,20,76,1,40,55,24,8,8,14,7,4,28,3,1, 76,43,46,133,0,2,0,61,0,0,2,57,2,88,0,28, 0,66,0,0,33,34,39,38,39,38,39,52,39,17,33,50, 23,22,23,22,23,22,23,22,23,21,6,7,6,7,6,7, 6,39,54,55,54,55,54,55,52,55,54,55,52,55,53,38, 39,38,39,38,47,1,38,39,34,39,35,17,22,23,22,23, 22,23,20,23,22,23,22,1,59,73,77,33,23,40,7,1, 1,1,64,66,7,9,36,20,34,12,2,1,12,27,5,5, 21,35,77,72,43,35,8,17,16,9,3,24,10,2,11,17, 4,4,11,11,6,38,57,2,10,163,11,15,4,5,11,11, 6,50,28,11,43,17,33,58,57,7,7,1,122,34,4,5, 20,30,49,65,7,8,156,71,44,7,7,33,17,43,76,1, 17,5,9,10,10,1,4,34,49,4,8,144,56,28,5,6, 15,6,4,21,9,2,254,216,56,25,7,7,15,6,1,3, 27,3,2,0,0,1,0,36,255,201,2,19,2,88,0,24, 0,0,55,3,51,19,55,54,55,54,55,54,63,1,17,51, 17,6,7,6,7,6,15,2,5,55,205,120,89,115,15,63, 10,13,11,26,10,7,87,14,12,13,23,37,65,31,2,254, 214,1,67,2,21,254,0,4,26,7,8,13,29,46,35,1, 88,254,162,74,25,26,26,41,25,11,1,76,79,0,0,1, 0,57,255,56,2,11,2,88,0,41,0,0,19,51,50,23, 22,23,22,23,22,23,22,23,17,35,17,38,39,38,39,38, 47,1,38,39,34,39,35,21,22,23,22,23,51,21,47,1, 38,39,38,39,38,39,57,215,64,63,8,11,35,22,33,13, 1,1,87,11,14,5,6,10,12,6,38,57,2,10,121,8, 20,14,66,34,40,71,36,31,43,6,1,1,2,88,33,4, 6,19,31,50,66,6,7,253,190,2,60,55,24,8,8,14, 7,4,21,9,2,127,52,12,8,6,76,1,7,7,23,36, 55,7,11,0,0,1,0,63,0,0,2,21,2,88,0,57, 0,0,51,35,53,51,50,55,54,55,54,55,54,55,53,38, 39,38,39,38,39,34,43,1,21,22,23,22,23,51,21,47, 1,38,39,38,39,52,39,53,51,50,23,22,23,22,23,22, 23,22,31,1,21,20,7,6,7,6,7,6,244,181,175,56, 55,7,13,44,23,9,1,2,44,14,17,59,53,9,10,88, 8,20,14,66,34,40,71,37,30,43,7,1,181,76,66,11, 14,30,29,3,2,47,10,1,36,11,11,29,35,97,76,24, 3,6,19,60,22,19,142,57,42,13,8,30,3,127,52,12, 8,6,76,1,7,7,23,36,58,6,9,210,30,5,7,15, 29,3,2,53,63,15,156,38,61,19,13,33,16,42,0,1, 0,13,255,56,1,229,2,88,0,25,0,0,1,54,55,54, 55,54,55,54,55,48,55,53,51,21,6,15,1,6,7,6, 7,17,35,17,3,51,1,21,46,14,11,11,2,2,23,11, 1,87,10,33,6,24,34,38,44,87,196,99,1,84,5,7, 6,13,4,2,29,42,5,147,154,55,48,8,34,16,16,4, 254,47,1,234,1,54,0,1,0,51,0,0,2,21,2,88, 0,28,0,0,1,54,55,54,55,54,55,54,55,54,55,48, 55,53,51,21,6,15,1,6,7,6,7,19,33,53,33,1, 51,1,60,46,10,2,2,11,11,2,2,23,11,1,87,10, 33,6,24,34,30,25,171,254,38,1,70,254,178,100,1,85, 5,4,1,1,6,13,4,2,29,42,5,147,154,55,48,8, 34,16,13,3,254,243,76,2,12,0,0,2,0,62,255,56, 2,38,2,88,0,18,0,22,0,0,37,35,53,51,54,55, 54,63,1,17,33,53,33,17,6,7,6,7,6,1,17,35, 17,1,44,62,55,104,31,23,9,3,254,111,1,232,12,24, 5,7,48,254,207,87,33,76,14,42,33,50,13,1,7,76, 254,167,71,40,8,10,73,1,117,253,142,2,114,0,0,1, 0,37,0,0,1,239,2,88,0,26,0,0,1,17,35,17, 38,39,38,39,38,47,1,38,39,34,39,35,53,51,22,23, 22,23,22,23,22,23,22,1,239,87,11,14,5,6,10,12, 6,38,57,2,10,200,207,84,50,6,6,35,22,33,13,1, 1,122,254,134,1,116,55,24,8,8,14,7,4,21,9,2, 76,11,26,3,3,19,31,50,66,6,0,1,0,59,0,0, 2,209,2,88,0,60,0,0,55,22,23,22,23,22,23,59, 1,55,54,55,54,55,54,55,52,53,17,51,17,7,6,7, 6,7,6,7,35,38,39,38,39,38,39,38,53,52,53,17, 51,17,51,54,55,54,55,54,55,54,61,1,51,21,7,6, 7,6,35,34,35,151,13,61,17,16,36,47,8,82,34,38, 18,54,33,23,2,87,3,17,91,22,21,64,71,82,71,63, 67,45,4,4,35,87,99,39,17,6,10,24,3,1,87,3, 10,40,50,79,2,2,224,53,50,13,9,20,3,4,9,10, 27,52,38,40,3,3,1,82,254,174,39,92,71,16,11,31, 2,2,31,35,63,5,6,57,57,3,3,1,82,254,212,2, 12,4,8,24,28,6,9,207,207,36,49,34,50,0,0,1, 0,35,0,0,2,123,2,88,0,45,0,0,1,17,20,7, 6,7,6,15,1,6,43,1,53,51,50,55,54,55,54,55, 54,61,1,17,35,53,33,22,23,22,31,1,17,35,17,38, 39,38,39,38,39,38,39,38,47,1,1,16,9,6,11,13, 37,8,65,84,4,4,50,41,6,6,21,5,17,60,1,3, 155,48,33,12,3,87,11,15,4,6,11,12,2,3,38,59, 10,2,12,254,212,63,28,18,19,24,24,5,43,76,25,3, 4,14,8,24,44,29,1,41,76,21,72,50,64,15,254,134, 1,116,56,25,7,8,15,7,1,2,20,9,2,0,0,12, 0,56,0,2,2,55,1,248,0,15,0,31,0,47,0,63, 0,79,0,95,0,111,0,127,0,143,0,159,0,175,0,191, 0,0,37,50,23,22,21,20,15,1,35,34,39,38,53,52, 55,54,51,50,23,22,21,20,15,1,35,34,39,38,53,52, 55,54,51,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,39,50,31,1,21,20,7,6,35,34,39,38,53,52, 55,54,51,50,31,1,21,20,7,6,35,34,39,38,53,52, 55,54,51,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,37,50,31,1,21,20,7,6,7,34,39,38,53,52, 55,54,51,50,31,1,21,20,7,6,7,34,39,38,53,52, 55,54,51,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,39,50,23,22,21,20,15,1,35,34,39,38,53,52, 55,54,51,50,23,22,21,20,15,1,35,34,39,38,53,52, 55,54,51,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,1,64,34,16,6,31,20,5,33,16,6,30,12,13, 34,16,6,31,20,5,33,16,6,30,12,13,36,14,5,33, 11,11,36,15,5,34,10,221,34,16,6,31,12,13,33,16, 6,30,12,13,34,16,6,31,12,13,33,16,6,30,12,13, 36,14,5,33,11,11,36,15,5,34,10,1,132,35,15,6, 31,15,10,32,16,7,29,12,14,35,15,6,31,15,10,32, 16,7,29,12,14,34,16,5,32,11,12,35,15,6,33,11, 205,36,15,5,30,19,7,33,16,6,30,12,13,36,15,5, 30,19,7,33,16,6,30,12,13,36,14,5,33,11,11,37, 14,5,33,11,113,30,12,14,34,15,6,30,11,14,34,16, 6,30,12,14,34,15,6,30,11,14,34,16,6,34,10,12, 35,15,5,33,10,12,37,14,5,196,30,19,7,34,15,6, 30,11,14,34,16,6,30,19,7,34,15,6,30,11,14,34, 16,6,34,10,12,35,15,5,33,10,12,37,14,5,1,31, 20,5,34,16,5,1,30,12,14,33,16,7,31,20,5,34, 16,5,1,30,12,14,33,16,7,33,11,12,35,15,6,32, 12,12,36,15,5,194,32,11,13,34,15,6,30,11,14,34, 16,6,32,11,13,34,15,6,30,11,14,34,16,6,34,10, 12,35,15,5,33,10,12,37,14,5,0,1,0,52,0,99, 0,163,0,210,0,15,0,0,55,50,23,22,21,20,7,6, 35,34,39,38,53,52,55,54,107,34,16,6,31,12,13,33, 16,6,30,12,210,30,12,14,34,15,6,30,11,14,34,16, 6,0,0,1,0,50,255,144,0,161,255,255,0,15,0,0, 23,50,23,22,21,20,7,6,35,34,39,38,53,52,55,54, 105,34,16,6,31,12,13,33,16,6,30,12,1,30,12,14, 34,15,6,30,12,13,34,16,6,0,0,6,0,51,0,100, 0,162,1,196,0,15,0,31,0,47,0,63,0,79,0,95, 0,0,55,50,23,22,21,20,7,6,35,34,39,38,53,52, 55,54,51,50,23,22,21,20,7,6,35,34,39,38,53,52, 55,54,51,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,39,50,31,1,21,20,7,6,35,34,39,38,53,52, 55,54,51,50,31,1,21,20,7,6,35,34,39,38,53,52, 55,54,51,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,106,36,15,5,30,12,14,33,16,6,30,12,13,36, 15,5,30,12,14,33,16,6,30,12,13,36,14,5,33,11, 11,37,14,5,33,11,12,34,16,6,31,12,13,33,16,6, 30,12,13,34,16,6,31,12,13,33,16,6,30,12,13,36, 14,5,33,11,11,36,15,5,34,10,211,32,11,13,34,15, 6,30,11,14,34,16,6,32,11,13,34,15,6,30,11,14, 34,16,6,34,10,12,35,15,5,33,10,12,37,14,5,241, 30,19,7,34,15,6,30,11,14,34,16,6,30,19,7,34, 15,6,30,11,14,34,16,6,34,10,12,35,15,5,33,10, 12,37,14,5,0,6,0,44,255,16,0,156,0,112,0,15, 0,31,0,47,0,63,0,79,0,95,0,0,23,50,23,22, 21,20,7,6,35,34,39,38,53,52,55,54,51,50,23,22, 21,20,7,6,35,34,39,38,53,52,55,54,51,34,7,6, 21,20,23,22,51,50,55,54,53,52,39,38,39,50,23,22, 21,20,7,6,35,34,39,38,53,52,55,54,51,50,23,22, 21,20,7,6,35,34,39,38,53,52,55,54,51,34,7,6, 21,20,23,22,51,50,55,54,53,52,39,38,100,34,16,6, 31,12,13,33,16,6,30,12,13,34,16,6,31,12,13,33, 16,6,30,12,13,36,14,5,33,11,11,36,15,5,34,10, 12,34,16,6,31,12,13,34,16,6,31,12,13,34,16,6, 31,12,13,34,16,6,31,12,13,35,15,6,32,12,12,36, 15,5,34,10,129,30,12,14,34,15,6,30,11,14,34,16, 6,30,12,14,34,15,6,30,11,14,34,16,6,34,10,12, 35,15,5,33,10,12,37,14,5,241,30,12,14,34,15,6, 31,11,13,34,16,6,30,12,14,34,15,6,31,11,13,34, 16,6,32,12,12,34,16,5,33,10,12,37,14,5,0,6, 0,106,0,1,1,138,0,113,0,15,0,31,0,47,0,63, 0,79,0,95,0,0,37,50,23,22,21,20,15,1,35,34, 39,38,53,52,55,54,51,50,23,22,21,20,15,1,35,34, 39,38,53,52,55,54,51,34,7,6,21,20,23,22,51,50, 55,54,53,52,39,38,39,50,23,22,21,20,7,6,35,34, 39,38,53,52,55,54,51,50,23,22,21,20,7,6,35,34, 39,38,53,52,55,54,51,34,7,6,21,20,23,22,51,50, 55,54,53,52,39,38,1,82,34,16,6,31,20,5,33,16, 6,30,12,13,34,16,6,31,20,5,33,16,6,30,12,13, 36,14,5,33,11,11,36,15,5,34,10,189,34,16,6,31, 12,13,33,16,6,30,12,13,34,16,6,31,12,13,33,16, 6,30,12,13,36,14,5,33,11,11,36,15,5,34,10,112, 30,12,14,34,15,6,30,11,14,34,16,6,30,12,14,34, 15,6,30,11,14,34,16,6,34,10,12,35,15,5,33,10, 12,37,14,5,1,30,12,14,34,15,6,30,11,14,34,16, 6,30,12,14,34,15,6,30,11,14,34,16,6,34,10,12, 35,15,5,33,10,12,37,14,5,0,0,6,0,106,255,146, 1,138,0,113,0,15,0,31,0,47,0,63,0,79,0,95, 0,0,37,50,23,22,21,20,15,1,35,34,39,38,53,52, 55,54,51,50,23,22,21,20,15,1,35,34,39,38,53,52, 55,54,51,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,39,50,23,22,21,20,7,6,35,34,39,38,53,52, 55,54,51,50,23,22,21,20,7,6,35,34,39,38,53,52, 55,54,51,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,1,82,34,16,6,31,20,5,33,16,6,30,12,13, 34,16,6,31,20,5,33,16,6,30,12,13,36,14,5,33, 11,11,36,15,5,34,10,189,34,16,6,31,12,13,33,16, 6,30,12,13,34,16,6,31,12,13,33,16,6,30,12,13, 36,14,5,33,11,11,36,15,5,34,10,1,30,12,14,34, 15,6,30,11,14,34,16,6,30,12,14,34,15,6,30,11, 14,34,16,6,34,10,12,35,15,5,33,10,12,37,14,5, 112,30,12,14,34,15,6,30,11,14,34,16,6,30,12,14, 34,15,6,30,11,14,34,16,6,34,10,12,35,15,5,33, 10,12,37,14,5,0,0,6,0,106,255,147,1,138,0,112, 0,15,0,31,0,47,0,63,0,79,0,95,0,0,37,50, 23,22,21,20,15,1,35,34,39,38,53,52,55,54,51,50, 23,22,21,20,15,1,35,34,39,38,53,52,55,54,51,34, 7,6,21,20,23,22,51,50,55,54,53,52,39,38,7,50, 23,22,21,20,7,6,35,34,39,38,53,52,55,54,51,50, 23,22,21,20,7,6,35,34,39,38,53,52,55,54,51,34, 7,6,21,20,23,22,51,50,55,54,53,52,39,38,1,82, 34,16,6,31,20,5,33,16,6,30,12,13,34,16,6,31, 20,5,33,16,6,30,12,13,36,14,5,33,11,11,36,15, 5,34,10,189,34,16,6,31,12,13,33,16,6,30,12,13, 34,16,6,31,12,13,33,16,6,30,12,13,36,14,5,33, 11,11,36,15,5,34,10,112,30,12,14,34,15,6,30,11, 14,34,16,6,30,12,14,34,15,6,30,11,14,34,16,6, 34,10,12,35,15,5,33,10,12,37,14,5,110,30,12,14, 34,15,6,30,11,14,34,16,6,30,12,14,34,15,6,30, 11,14,34,16,6,34,10,12,35,15,5,33,10,12,37,14, 5,0,0,6,0,84,0,97,1,53,1,194,0,15,0,31, 0,47,0,63,0,79,0,95,0,0,55,50,23,22,21,20, 15,1,35,34,39,38,53,52,55,54,51,50,23,22,21,20, 15,1,35,34,39,38,53,52,55,54,51,34,7,6,21,20, 23,22,51,50,55,54,53,52,39,38,39,50,23,22,21,20, 7,6,35,34,39,38,53,52,55,54,51,50,23,22,21,20, 7,6,35,34,39,38,53,52,55,54,51,34,7,6,21,20, 23,22,51,50,55,54,53,52,39,38,254,34,15,6,31,20, 4,34,16,6,31,12,13,34,15,6,31,20,4,34,16,6, 31,12,13,35,15,6,32,12,12,36,14,5,33,10,127,36, 15,5,31,12,13,33,16,6,30,12,13,36,15,5,31,12, 13,33,16,6,30,12,13,36,14,5,31,12,12,36,15,5, 33,11,208,30,12,14,35,15,5,31,11,13,34,16,6,30, 12,14,35,15,5,31,11,13,34,16,6,32,12,12,34,16, 5,32,11,12,37,14,5,242,32,11,13,34,15,6,30,12, 13,34,16,6,32,11,13,34,15,6,30,12,13,34,16,6, 34,10,12,34,15,6,33,10,12,37,14,5,0,6,0,87, 255,15,1,57,0,112,0,15,0,31,0,47,0,63,0,79, 0,95,0,0,5,50,23,22,21,20,15,1,35,34,39,38, 53,52,55,54,51,50,23,22,21,20,15,1,35,34,39,38, 53,52,55,54,51,34,7,6,21,20,23,22,51,50,55,54, 53,52,39,38,39,50,23,22,21,20,7,6,35,34,39,38, 53,52,55,54,51,50,23,22,21,20,7,6,35,34,39,38, 53,52,55,54,51,34,7,6,21,20,23,22,51,50,55,54, 53,52,39,38,1,1,34,16,6,31,20,5,35,15,5,30, 12,13,34,16,6,31,20,5,35,15,5,30,12,13,36,14, 5,32,11,12,36,15,5,34,10,127,36,15,5,30,12,14, 33,16,6,31,11,13,36,15,5,30,12,14,33,16,6,31, 11,13,34,16,5,31,12,12,37,14,5,33,11,130,30,12, 14,34,15,6,31,11,13,34,16,6,30,12,14,34,15,6, 31,11,13,34,16,6,34,10,12,36,14,5,33,10,12,37, 14,5,242,32,11,13,34,15,6,30,12,13,34,16,6,32, 11,13,34,15,6,30,12,13,34,16,6,32,12,12,34,15, 6,33,10,12,37,14,5,0,0,13,0,26,0,3,2,36, 2,200,0,15,0,31,0,47,0,63,0,79,0,95,0,111, 0,127,0,143,0,159,0,175,0,191,0,195,0,0,1,50, 31,1,21,20,7,6,7,34,39,38,53,52,55,54,51,50, 31,1,21,20,7,6,7,34,39,38,53,52,55,54,51,34, 7,6,21,20,23,22,51,50,55,54,53,52,39,38,7,50, 31,1,21,20,7,6,35,34,39,38,53,52,55,54,51,50, 31,1,21,20,7,6,35,34,39,38,53,52,55,54,51,34, 7,6,21,20,23,22,51,50,55,54,53,52,39,38,19,50, 23,22,21,20,15,1,35,34,39,38,53,52,55,54,51,50, 23,22,21,20,15,1,35,34,39,38,53,52,55,54,51,34, 7,6,21,20,23,22,51,50,55,54,53,52,39,38,39,50, 31,1,21,20,15,1,35,34,39,38,53,52,55,54,51,50, 31,1,21,20,15,1,35,34,39,38,53,52,55,54,51,34, 7,6,21,20,23,22,51,50,55,54,53,52,39,38,55,21, 33,53,1,121,35,15,6,31,15,10,32,16,7,29,12,14, 35,15,6,31,15,10,32,16,7,29,12,14,34,16,5,32, 11,12,35,15,6,33,11,188,34,16,6,31,12,13,33,16, 6,30,12,13,34,16,6,31,12,13,33,16,6,30,12,13, 36,14,5,33,11,11,36,15,5,34,10,75,34,16,6,31, 20,5,33,16,6,30,12,13,34,16,6,31,20,5,33,16, 6,30,12,13,36,14,5,33,11,11,36,15,5,34,10,12, 34,16,6,31,20,5,33,16,6,30,12,13,34,16,6,31, 20,5,33,16,6,30,12,13,36,14,5,33,11,11,36,15, 5,34,10,248,253,246,2,200,31,20,5,34,16,5,1,30, 12,14,33,16,7,31,20,5,34,16,5,1,30,12,14,33, 16,7,33,11,12,35,15,6,32,12,12,36,15,5,1,30, 19,7,34,15,6,30,11,14,34,16,6,30,19,7,34,15, 6,30,11,14,34,16,6,34,10,12,35,15,5,33,10,12, 37,14,5,253,171,30,12,14,34,15,6,30,11,14,34,16, 6,30,12,14,34,15,6,30,11,14,34,16,6,34,10,12, 35,15,5,33,10,12,37,14,5,240,30,19,7,34,15,6, 30,11,14,34,16,6,30,19,7,34,15,6,30,11,14,34, 16,6,34,10,12,35,15,5,33,10,12,37,14,5,170,92, 92,0,0,4,0,26,0,245,2,36,2,12,0,15,0,31, 0,47,0,51,0,0,1,50,23,22,21,20,15,1,35,34, 39,38,53,52,55,54,51,50,23,22,21,20,15,1,35,34, 39,38,53,52,55,54,51,34,7,6,21,20,23,22,51,50, 55,54,53,52,39,38,55,21,33,53,1,32,36,15,5,31, 20,5,33,16,6,30,12,13,36,15,5,31,20,5,33,16, 6,30,12,13,36,14,5,33,11,11,36,15,5,33,11,248, 253,246,1,100,32,11,13,34,15,6,30,11,14,34,16,6, 32,11,13,34,15,6,30,11,14,34,16,6,34,10,12,35, 15,5,33,10,12,37,14,5,168,92,92,0,0,1,0,136, 0,177,1,224,2,109,0,6,0,0,1,55,7,39,55,3, 55,1,176,48,24,140,50,230,77,1,16,31,126,24,30,1, 89,45,0,18,0,26,0,228,2,36,2,210,0,15,0,31, 0,47,0,63,0,79,0,95,0,99,0,103,0,119,0,135, 0,151,0,155,0,159,0,175,0,191,0,207,0,211,0,215, 0,0,1,50,31,1,21,20,7,6,7,34,39,38,53,52, 55,54,51,50,31,1,21,20,7,6,7,34,39,38,53,52, 55,54,51,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,3,50,31,1,21,20,7,6,35,34,39,38,53,52, 55,54,37,50,31,1,21,20,7,6,35,34,39,38,53,52, 55,54,19,50,31,1,21,20,7,6,35,34,39,38,53,52, 55,54,19,35,3,51,23,21,33,53,5,50,31,1,21,20, 7,6,35,34,39,38,53,52,55,54,37,50,31,1,21,20, 7,6,35,34,39,38,53,52,55,54,19,50,31,1,21,20, 7,6,35,34,39,38,53,52,55,54,19,35,3,51,23,21, 33,53,5,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,37,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,3,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,19,3,35,19,1,33,21,33,1,199,35,15,6,31, 15,10,32,16,7,29,12,14,35,15,6,31,15,10,32,16, 7,29,12,14,34,16,5,32,11,12,35,15,6,33,11,10, 34,15,6,30,12,13,34,16,6,30,12,254,193,34,16,6, 31,12,13,33,16,6,30,12,13,34,16,6,31,12,13,33, 16,6,30,12,231,101,1,101,207,253,246,1,175,34,15,6, 30,12,13,34,16,6,30,12,254,193,34,16,6,31,12,13, 33,16,6,30,12,13,34,16,6,31,12,13,33,16,6,30, 12,231,101,1,101,207,253,246,1,175,35,15,6,32,12,12, 36,14,5,33,10,254,167,36,14,5,33,11,11,36,15,5, 34,10,12,36,14,5,33,11,11,36,15,5,34,10,206,1, 101,1,1,51,253,246,2,10,2,177,31,20,5,34,16,5, 1,30,12,14,33,16,7,31,20,5,34,16,5,1,30,12, 14,33,16,7,33,11,12,35,15,6,32,12,12,36,15,5, 254,207,31,20,5,34,16,6,31,12,13,32,17,7,2,30, 19,7,34,15,6,30,11,14,34,16,6,1,46,30,19,7, 34,15,6,30,11,14,34,16,6,254,52,1,238,198,92,92, 140,31,20,5,34,16,6,31,12,13,32,17,7,2,30,19, 7,34,15,6,30,11,14,34,16,6,1,46,30,19,7,34, 15,6,30,11,14,34,16,6,254,52,1,238,198,92,92,140, 33,11,12,35,15,6,34,10,12,36,15,5,2,34,10,12, 35,15,5,33,10,12,37,14,5,1,46,34,10,12,35,15, 5,33,10,12,37,14,5,254,52,1,238,254,18,1,40,92, 0,1,0,35,255,119,1,159,2,122,0,29,0,0,33,35, 6,7,35,54,55,54,55,54,61,1,52,55,52,39,38,47, 1,38,39,51,22,31,1,22,21,20,7,51,1,159,220,33, 44,83,57,46,1,21,20,1,15,1,1,28,16,25,85,31, 24,27,9,27,171,78,59,79,135,3,65,56,45,42,28,14, 75,46,3,3,90,50,37,41,68,76,23,55,79,202,0,1, 0,57,1,116,1,130,3,50,0,30,0,0,1,35,7,6, 7,6,7,35,54,63,1,54,55,54,39,52,39,38,39,38, 39,51,22,23,22,23,20,7,6,7,51,1,130,189,12,20, 13,6,6,83,33,24,21,20,14,4,1,2,5,15,30,15, 85,23,19,13,8,4,1,2,140,1,198,27,29,14,6,6, 35,41,37,35,64,16,31,25,26,38,28,54,16,29,47,34, 37,64,35,13,15,0,0,1,255,184,0,0,2,26,1,171, 0,7,0,0,41,1,53,33,53,33,53,33,2,26,253,158, 2,4,254,220,1,130,90,249,88,0,0,1,255,184,255,25, 2,97,2,29,0,34,0,0,5,34,39,38,53,52,55,39, 33,53,33,1,55,1,51,21,35,34,7,34,39,38,53,39, 6,7,23,55,22,51,22,21,20,7,6,1,221,40,12,3, 25,116,254,109,1,166,254,251,77,1,12,175,28,19,10,100, 14,3,24,19,39,102,15,7,11,35,25,8,231,33,8,9, 19,21,141,90,1,150,45,254,61,90,1,35,7,9,6,30, 36,125,2,1,12,32,29,19,5,0,0,1,255,184,255,25, 2,97,2,29,0,37,0,0,5,34,39,38,53,52,55,39, 33,53,51,55,7,51,1,55,1,51,21,35,34,7,34,39, 38,53,39,6,7,23,55,22,51,22,21,20,7,6,1,221, 40,12,3,25,116,254,109,212,98,40,152,254,251,77,1,12, 175,28,19,10,100,14,3,24,19,39,102,15,7,11,35,25, 8,231,33,8,9,19,21,141,90,154,154,1,150,45,254,61, 90,1,35,7,9,6,30,36,125,2,1,12,32,29,19,5, 0,2,0,107,255,113,1,217,1,173,0,3,0,18,0,0, 23,35,53,51,55,33,53,33,55,53,52,39,38,35,53,50, 23,22,21,241,121,121,232,254,146,1,40,2,39,40,151,178, 59,61,143,83,60,90,120,1,83,22,23,90,25,24,83,0, 0,1,0,107,0,0,1,217,1,173,0,14,0,0,41,1, 53,33,55,53,52,39,38,35,53,50,23,22,21,1,217,254, 146,1,40,2,39,40,151,178,59,61,90,120,1,83,22,23, 90,25,24,83,0,2,0,109,255,187,2,133,1,173,0,22, 0,38,0,0,5,35,17,35,22,21,20,7,6,7,6,35, 34,39,38,39,38,53,52,55,54,51,5,1,50,55,54,53, 52,39,38,35,34,7,6,21,20,23,22,2,133,89,131,10, 14,39,75,13,13,69,53,26,11,13,66,46,68,1,100,254, 149,47,27,16,38,24,32,43,34,23,47,25,69,1,148,44, 69,88,33,86,15,2,59,29,34,38,44,118,64,45,2,254, 162,54,31,37,69,43,28,57,39,36,75,36,19,0,0,2, 0,100,0,0,2,26,1,171,0,15,0,31,0,0,55,52, 55,54,51,50,23,22,21,20,7,6,35,34,39,38,55,34, 7,6,21,20,23,22,51,50,55,54,53,52,39,38,100,76, 60,84,103,62,53,77,59,82,104,62,54,217,60,40,27,54, 36,43,63,38,24,53,37,213,102,63,49,71,62,81,104,61, 48,71,61,205,51,33,38,60,39,26,52,31,38,57,40,29, 0,1,0,177,255,86,1,92,1,115,0,19,0,0,1,50, 21,20,15,1,6,7,39,54,55,54,55,38,39,38,53,52, 55,54,1,59,32,5,48,11,7,58,10,36,16,6,71,21, 17,16,23,1,115,215,115,49,133,26,3,16,6,94,42,6, 123,53,45,52,68,15,21,0,0,1,255,184,0,0,2,79, 1,34,0,14,0,0,33,35,39,21,35,39,21,33,53,51, 53,23,52,55,23,2,79,36,127,74,122,254,208,248,195,6, 214,112,112,115,115,90,189,195,92,114,193,0,0,2,255,184, 255,95,2,170,2,28,0,9,0,12,0,0,5,7,39,33, 53,33,1,55,1,51,7,35,23,2,170,175,95,254,28,1, 180,254,240,74,1,16,244,46,166,68,7,154,161,90,1,150, 44,254,62,90,95,0,0,1,255,184,255,95,2,170,2,28, 0,9,0,0,5,7,39,33,53,33,1,55,1,51,2,170, 175,95,254,28,1,180,254,240,74,1,16,244,7,154,161,90, 1,150,44,254,62,0,0,1,255,184,0,0,1,192,1,17, 0,7,0,0,37,39,7,33,53,33,53,23,1,192,106,7, 254,105,1,101,163,17,79,96,90,183,193,0,0,7,255,112, 255,83,2,245,3,0,0,15,0,31,0,47,0,63,0,65, 0,81,0,111,0,0,23,50,23,22,21,20,7,6,35,34, 39,38,53,52,55,54,3,50,31,1,21,20,7,6,35,34, 39,38,53,52,55,54,51,50,31,1,21,20,15,1,35,34, 39,38,53,52,55,54,39,50,31,1,21,20,7,6,35,34, 39,38,53,52,55,54,1,23,55,50,55,54,53,52,39,38, 35,34,7,6,21,20,23,22,37,51,53,23,21,39,7,35, 7,17,35,22,21,20,7,6,7,6,35,34,39,38,39,38, 53,52,55,54,51,5,222,34,16,6,31,12,13,33,16,6, 30,12,85,34,16,6,31,12,13,33,16,6,30,12,209,34, 16,6,31,20,5,33,16,6,30,12,85,34,16,6,31,12, 13,33,16,6,30,12,254,159,1,238,47,27,16,38,24,32, 43,34,23,47,25,1,141,134,163,106,7,184,91,131,10,14, 39,75,13,13,69,54,26,11,12,66,46,68,1,100,62,30, 12,14,34,15,6,30,11,14,34,16,6,2,178,30,19,7, 34,15,6,30,11,14,34,16,6,30,19,7,34,15,6,30, 11,14,34,16,6,140,30,19,7,34,15,6,30,11,14,34, 16,6,253,0,1,79,53,32,37,69,43,28,57,39,36,75, 36,19,14,183,193,63,79,98,68,1,148,44,69,88,33,86, 15,2,60,29,34,36,45,118,64,45,2,0,0,1,0,97, 255,40,2,37,1,219,0,19,0,0,5,35,54,53,52,35, 34,7,3,37,21,5,23,54,51,50,23,22,21,20,1,215, 90,92,64,68,116,128,1,97,254,254,69,92,73,91,25,7, 216,149,87,72,79,1,93,113,90,85,180,59,82,25,30,110, 0,1,255,184,0,0,2,112,2,152,0,6,0,0,41,1, 53,33,1,55,1,2,112,253,72,2,102,254,85,74,1,179, 90,1,251,67,253,205,0,2,0,107,255,118,2,133,1,171, 0,7,0,11,0,0,41,1,7,35,19,35,53,33,3,53, 35,7,2,133,254,145,61,83,189,216,2,26,79,159,94,138, 1,221,88,254,175,249,249,0,0,1,0,107,254,167,2,147, 1,3,0,5,0,0,63,1,1,7,1,7,107,115,1,181, 39,254,191,60,158,101,253,200,36,1,144,55,0,3,255,184, 255,255,2,177,1,168,0,30,0,48,0,65,0,0,1,50, 23,22,21,20,7,6,35,39,43,1,34,39,21,33,53,33, 38,39,52,55,54,55,54,51,50,23,22,23,54,23,52,39, 38,35,34,7,6,7,6,7,20,21,22,59,1,55,54,39, 53,52,39,38,35,34,7,6,21,20,23,22,23,54,55,54, 2,47,83,32,15,71,36,64,70,1,11,27,170,254,201,1, 23,39,1,31,8,8,34,61,56,45,10,41,53,119,37,25, 31,39,34,4,5,16,3,34,28,26,21,85,233,15,27,42, 40,26,19,77,22,43,19,7,1,1,111,101,45,53,114,38, 17,1,85,85,90,43,97,89,55,13,7,30,27,7,58,35, 198,54,39,27,50,5,8,31,95,6,5,9,4,12,146,20, 34,18,38,34,31,42,78,42,13,17,48,78,12,0,0,3, 0,167,255,50,2,177,1,168,0,37,0,55,0,72,0,0, 1,50,23,22,21,20,7,6,35,39,43,1,34,39,6,15, 1,39,55,38,39,38,39,38,39,38,53,52,55,54,55,54, 51,50,23,22,23,54,23,52,39,38,35,34,7,6,7,6, 7,20,21,22,59,1,55,54,39,53,52,39,38,35,34,7, 6,21,20,23,22,23,54,55,54,2,47,83,32,15,71,36, 64,70,1,11,8,32,4,40,100,72,154,52,55,2,3,37, 7,11,31,8,8,34,61,56,45,10,41,53,119,37,25,31, 39,34,4,5,16,3,34,28,26,21,85,233,15,27,42,40, 26,19,77,22,43,19,7,1,1,111,101,45,53,114,38,17, 1,4,13,63,134,50,180,14,44,2,2,40,24,34,46,89, 55,13,7,30,27,7,58,35,198,54,39,27,50,5,8,31, 95,6,5,9,4,12,146,20,34,18,38,34,31,42,78,42, 13,17,48,78,12,0,0,1,255,184,0,0,2,164,2,28, 0,24,0,0,37,6,35,34,39,38,39,6,7,33,53,37, 50,55,3,55,19,22,23,22,51,50,55,54,55,2,164,107, 70,80,52,6,7,36,6,254,128,1,38,56,44,220,65,188, 42,31,38,42,58,75,4,6,75,62,82,10,12,68,49,90, 1,41,1,109,43,254,192,66,28,35,66,4,5,0,0,2, 255,184,0,0,2,28,2,64,0,15,0,28,0,0,41,1, 53,33,39,6,35,34,39,38,39,38,53,52,63,1,3,39, 48,15,1,49,6,21,20,23,22,51,50,2,28,253,156,2, 10,12,62,37,67,56,47,13,3,127,197,45,22,119,28,30, 60,13,15,70,90,145,6,25,18,74,19,19,99,42,51,254, 243,165,29,11,27,36,55,12,3,0,0,2,255,184,0,0, 2,28,2,64,0,15,0,26,0,0,35,19,23,22,21,20, 7,6,7,6,35,34,39,7,33,21,1,22,51,50,55,54, 53,52,39,38,39,72,63,197,127,41,10,12,56,67,37,62, 12,2,10,254,8,41,70,71,14,3,30,12,135,2,64,51, 42,99,78,38,9,5,25,6,145,90,1,51,8,49,10,11, 36,27,11,29,0,1,0,127,254,147,2,130,1,16,0,43, 0,0,1,33,53,33,34,39,38,39,38,39,38,53,52,55, 22,23,22,23,22,59,1,54,51,53,23,21,39,7,35,34, 39,38,39,6,21,20,23,22,23,22,23,22,21,20,2,105, 254,41,1,140,9,73,211,93,12,10,7,27,10,32,43,27, 68,60,25,12,1,162,105,9,172,56,21,4,3,4,34,55, 184,60,16,73,254,147,90,29,84,124,16,17,10,43,95,129, 16,65,91,3,9,2,180,194,62,79,93,29,5,6,4,10, 27,33,55,87,29,9,39,31,10,0,0,2,255,184,0,0, 2,38,1,171,0,14,0,18,0,0,41,1,34,39,38,39, 38,39,7,21,35,53,51,17,33,3,53,35,21,2,38,254, 205,13,26,34,7,2,2,25,206,224,1,142,70,253,22,28, 11,4,4,4,65,100,1,71,254,185,239,239,0,2,0,107, 0,0,1,217,2,96,0,3,0,18,0,0,1,35,53,51, 19,33,53,33,55,53,52,39,38,35,53,50,23,22,21,1, 29,123,123,188,254,146,1,40,2,39,40,151,178,59,61,2, 14,82,253,160,90,120,1,83,22,23,90,25,24,83,0,1, 255,184,0,0,2,133,1,171,0,15,0,0,33,35,34,39, 7,33,53,33,39,35,53,33,23,7,23,51,2,133,205,47, 21,24,254,92,1,176,10,200,1,193,1,160,10,195,59,59, 90,247,90,89,1,247,0,1,0,99,255,246,2,107,1,235, 0,30,0,0,37,1,6,21,20,51,50,55,54,55,23,22, 23,22,23,7,38,39,34,7,6,35,34,39,38,53,52,55, 54,55,1,2,107,254,175,110,42,24,49,63,4,13,35,50, 3,2,40,29,40,14,52,54,18,85,21,5,49,53,91,1, 71,4,1,136,192,74,42,18,23,1,1,10,66,3,3,57, 38,12,24,23,79,21,24,73,104,103,94,254,108,0,0,3, 0,0,0,0,1,140,3,18,0,15,0,18,0,20,0,0, 1,7,39,7,39,55,39,55,23,55,23,7,23,7,39,7, 39,55,39,3,23,1,31,24,13,38,6,37,24,26,89,40, 22,44,36,26,34,53,7,39,61,246,1,2,100,16,43,24, 29,22,106,14,65,24,15,27,30,16,30,33,27,23,53,253, 12,1,0,3,0,0,254,207,1,189,0,1,0,15,0,18, 0,20,0,0,5,55,23,55,23,7,23,7,39,7,39,55, 39,55,23,55,23,7,23,1,23,1,109,24,13,38,5,36, 24,26,89,40,22,43,35,26,34,53,7,40,62,254,106,1, 131,16,43,24,29,22,106,14,65,23,14,27,30,16,30,33, 26,24,53,1,21,1,0,3,0,0,254,247,1,79,2,233, 0,3,0,7,0,9,0,0,5,51,21,35,17,51,21,35, 1,23,1,44,35,35,35,35,254,212,1,115,150,3,242,150, 253,174,1,0,0,3,0,0,0,0,1,224,3,8,0,3, 0,7,0,9,0,0,1,23,7,47,1,23,7,39,3,23, 1,194,30,75,30,55,30,75,30,245,1,2,189,18,129,17, 205,18,129,17,253,123,1,0,0,3,0,0,254,252,1,184, 0,1,0,3,0,7,0,9,0,0,5,23,7,47,1,23, 7,47,1,23,1,154,30,75,30,55,30,75,30,205,1,113, 18,129,17,205,18,129,17,169,1,0,0,3,0,0,0,0, 1,248,3,0,0,15,0,31,0,33,0,0,1,50,23,22, 21,20,15,1,35,34,39,38,53,52,55,54,39,50,31,1, 21,20,15,1,35,34,39,38,53,52,55,54,1,23,1,192, 36,15,5,31,20,5,33,16,6,30,12,152,34,15,6,31, 20,4,34,16,6,31,12,254,242,1,2,164,32,11,13,34, 15,6,30,11,14,34,16,6,92,30,19,7,35,15,5,31, 11,13,34,16,6,253,1,1,0,2,0,0,0,0,1,224, 3,8,0,11,0,13,0,0,1,7,39,55,39,7,39,55, 23,7,39,55,1,23,1,140,56,33,56,32,56,30,75,160, 75,30,55,254,82,1,2,174,94,19,95,19,96,17,130,93, 129,17,95,253,103,1,0,2,0,0,254,252,1,184,0,1, 0,11,0,13,0,0,5,55,23,7,23,55,23,7,39,55, 23,7,39,23,1,33,57,32,56,32,56,30,75,160,75,30, 55,255,1,170,94,19,95,19,96,17,130,93,129,17,95,151, 1,0,0,3,0,0,255,31,1,149,0,1,0,3,0,7, 0,9,0,0,5,51,21,35,39,51,21,35,39,23,1,114, 35,35,150,35,35,220,1,75,150,150,150,226,1,0,0,3, 0,0,254,246,1,154,0,1,0,3,0,7,0,9,0,0, 5,23,7,47,1,23,7,47,1,23,1,124,30,75,30,105, 30,75,30,125,1,64,18,129,17,75,18,129,17,250,1,0, 0,2,0,0,0,0,1,91,2,202,0,11,0,13,0,0, 19,53,51,53,35,53,51,21,35,21,51,21,1,23,169,72, 72,178,73,73,254,165,1,2,76,34,60,32,32,60,34,253, 181,1,0,2,0,0,255,68,1,210,0,1,0,11,0,13, 0,0,5,53,51,53,35,53,51,21,35,21,51,21,37,23, 1,32,72,72,178,73,73,254,46,1,188,34,60,32,32,60, 34,189,1,0,0,2,0,0,255,79,1,118,0,1,0,15, 0,17,0,0,5,50,23,22,21,20,15,1,35,34,39,38, 53,52,55,54,37,23,1,62,34,16,6,31,20,5,33,16, 6,30,12,254,207,1,66,30,12,14,34,15,6,30,11,14, 34,16,6,67,1,0,0,3,0,0,0,0,1,123,3,15, 0,15,0,24,0,26,0,0,19,50,23,22,21,20,7,6, 35,34,39,38,53,52,55,54,23,7,47,1,53,51,55,23, 7,1,23,249,29,11,4,27,8,9,28,13,4,27,9,139, 30,47,131,141,43,24,43,254,176,1,2,149,26,9,9,30, 11,4,26,9,10,29,12,3,85,10,121,4,33,59,18,57, 253,61,1,0,0,3,0,0,255,1,1,205,0,1,0,14, 0,23,0,25,0,0,5,50,23,22,21,20,15,1,34,39, 38,53,52,55,54,7,55,31,1,21,35,7,39,55,37,23, 1,121,30,11,4,27,18,29,11,4,27,8,115,31,46,131, 140,43,25,43,254,216,1,45,27,9,9,29,12,3,27,8, 9,30,11,4,2,10,119,6,34,59,19,56,181,1,0,2, 0,0,0,0,1,118,2,217,0,15,0,17,0,0,1,50, 31,1,21,20,15,1,35,34,39,38,53,52,55,54,1,23, 1,62,34,16,6,31,20,5,33,16,6,30,12,254,207,1, 2,217,30,19,7,34,15,6,30,11,14,34,16,6,253,40, 1,0,0,2,0,0,255,102,1,113,0,1,0,3,0,5, 0,0,5,35,53,51,37,23,1,113,98,98,254,143,1,154, 93,62,1,0,0,2,0,0,0,0,1,118,2,217,0,15, 0,17,0,0,1,50,31,1,21,20,15,1,35,34,39,38, 53,52,55,54,1,23,1,62,34,16,6,31,20,5,33,16, 6,30,12,254,207,1,2,217,30,19,7,34,15,6,30,11, 14,34,16,6,253,40,1,0,0,2,0,0,255,79,1,118, 0,1,0,15,0,17,0,0,5,50,23,22,21,20,15,1, 35,34,39,38,53,52,55,54,37,23,1,62,34,16,6,31, 20,5,33,16,6,30,12,254,207,1,66,30,12,14,34,15, 6,30,11,14,34,16,6,67,1,0,0,3,0,0,0,0, 1,120,3,0,0,15,0,31,0,33,0,0,1,50,23,22, 21,20,15,1,35,34,39,38,53,52,55,54,55,50,31,1, 21,20,15,1,35,34,39,38,53,52,55,54,1,23,1,64, 36,15,5,30,19,7,33,16,6,30,12,13,34,16,6,31, 20,5,33,16,6,30,12,254,205,1,2,86,32,11,13,34, 15,6,30,11,14,34,16,6,170,30,19,7,34,15,6,30, 11,14,34,16,6,253,1,1,0,3,0,0,254,177,1,119, 0,1,0,15,0,31,0,33,0,0,5,50,23,22,21,20, 15,1,35,34,39,38,53,52,55,54,55,50,23,22,21,20, 15,1,35,34,39,38,53,52,55,54,37,23,1,63,34,16, 6,31,20,5,35,15,5,30,12,13,34,15,6,31,20,4, 34,16,6,31,12,254,206,1,224,30,12,14,34,15,6,31, 11,13,34,16,6,170,30,12,14,35,15,5,30,12,13,34, 16,6,55,1,0,4,0,0,0,0,1,218,3,0,0,15, 0,31,0,47,0,49,0,0,19,50,31,1,21,20,7,6, 35,34,39,38,53,52,55,54,51,50,31,1,21,20,15,1, 35,34,39,38,53,52,55,54,39,50,31,1,21,20,15,1, 35,34,39,38,53,52,55,54,1,23,222,34,16,6,31,12, 13,33,16,6,30,12,209,34,16,6,31,20,5,33,16,6, 30,12,85,34,16,6,31,20,5,33,16,6,30,12,254,205, 1,2,116,30,19,7,34,15,6,30,11,14,34,16,6,30, 19,7,34,15,6,30,11,14,34,16,6,140,30,19,7,34, 15,6,30,11,14,34,16,6,253,1,1,0,0,4,0,0, 254,201,1,218,0,1,0,15,0,31,0,47,0,49,0,0, 23,52,55,54,51,50,23,22,21,20,7,6,35,34,39,38, 55,52,55,54,51,50,23,22,21,20,15,1,35,34,39,38, 7,50,23,22,21,20,15,1,35,34,39,38,53,52,55,54, 37,23,167,31,12,12,36,15,5,34,10,12,34,16,5,196, 31,12,12,36,15,5,34,21,1,34,16,5,44,34,16,6, 31,20,5,33,16,6,30,12,254,206,1,110,33,17,6,32, 11,13,38,13,4,32,11,12,33,17,6,32,11,13,38,13, 4,32,11,78,30,12,14,34,15,6,30,12,13,34,16,6, 201,1,0,2,0,0,0,0,1,216,3,12,0,3,0,5, 0,0,19,37,23,5,3,23,170,1,30,16,254,230,190,1, 2,190,78,44,96,253,129,1,0,2,0,0,255,72,1,218, 0,1,0,3,0,5,0,0,23,5,7,37,39,23,186,1, 32,20,254,226,168,1,30,82,72,102,83,1,0,1,0,167, 2,55,1,212,3,33,0,35,0,0,19,23,55,23,7,23, 55,23,7,23,55,23,7,23,55,23,7,23,7,39,7,39, 55,39,7,39,55,39,7,39,55,39,7,39,55,39,178,30, 22,31,21,30,22,30,21,31,20,36,22,31,23,34,22,36, 15,36,23,35,24,30,23,34,24,29,24,30,23,30,24,32, 23,30,2,239,9,59,9,59,9,59,8,62,9,63,10,63, 10,64,10,64,12,40,13,68,13,67,10,67,12,67,11,66, 12,64,12,66,12,65,11,0,0,14,0,0,0,0,1,165, 3,27,0,11,0,23,0,35,0,46,0,57,0,71,0,81, 0,92,0,106,0,116,0,127,0,139,0,148,0,150,0,0, 19,23,53,51,21,51,21,35,7,35,39,35,55,52,55,50, 23,22,21,20,7,34,39,38,53,52,55,50,23,22,21,20, 7,34,39,38,23,50,55,52,38,35,34,7,20,23,22,23, 34,39,52,54,51,50,23,20,7,6,39,20,7,6,35,34, 39,38,53,52,55,54,51,50,39,52,51,22,23,20,7,6, 35,34,23,34,39,52,54,51,50,23,20,7,6,39,20,7, 6,35,34,39,38,53,52,55,54,51,50,39,52,51,22,23, 20,7,6,35,34,23,52,39,34,6,21,20,23,50,55,54, 39,52,39,34,7,6,21,20,23,50,55,54,53,52,39,38, 35,34,20,51,54,1,23,213,86,39,83,82,1,39,1,85, 149,22,10,6,6,22,14,6,2,22,10,6,6,22,14,6, 2,22,19,3,12,10,20,2,16,3,4,19,3,12,10,20, 2,16,3,114,16,3,3,12,9,1,6,6,10,20,42,22, 18,4,17,2,3,22,155,19,3,12,10,20,2,16,3,114, 16,3,3,12,9,1,6,6,10,20,42,22,18,4,17,2, 3,22,177,22,10,12,22,16,5,1,133,22,10,6,6,22, 16,5,1,16,3,3,22,22,18,254,242,1,2,204,1,80, 79,37,81,81,81,19,3,6,6,10,20,2,15,4,3,19, 3,6,6,10,20,2,15,4,19,22,10,12,22,16,5,1, 122,22,10,12,22,16,5,1,23,16,5,1,14,2,6,10, 6,6,99,22,4,18,17,4,1,122,22,10,12,22,16,5, 1,23,16,5,1,14,2,6,10,6,6,99,22,4,18,17, 4,1,100,19,3,12,10,20,2,16,3,4,19,3,6,6, 10,19,3,16,3,124,16,5,1,44,4,253,27,1,0,2, 255,21,1,253,0,48,2,177,0,3,0,24,0,0,3,7, 39,55,23,6,7,6,35,34,39,38,39,38,53,52,51,50, 23,22,51,50,55,54,55,49,47,47,47,144,18,58,37,29, 53,55,22,9,2,12,9,5,46,69,24,28,37,18,2,131, 45,45,46,100,35,28,17,54,21,19,6,3,12,8,70,16, 19,35,0,1,255,112,2,28,255,214,2,130,0,3,0,0, 3,7,39,55,42,51,51,51,2,79,51,51,51,0,0,1, 0,41,255,254,2,139,1,205,0,70,0,0,19,50,23,22, 21,20,7,22,23,22,51,50,55,53,35,53,51,21,35,17, 39,53,6,35,34,39,38,39,22,21,20,7,6,35,34,39, 38,39,38,53,52,51,50,23,22,23,22,51,50,53,52,39, 38,35,34,7,39,54,55,54,51,54,55,54,53,52,35,34, 7,39,54,201,68,55,43,38,3,47,30,29,48,49,135,251, 71,45,28,44,35,23,6,4,5,62,38,43,82,91,21,16, 6,23,16,3,18,62,48,46,95,34,17,15,60,35,50,51, 44,17,24,33,6,3,118,47,29,38,37,1,205,40,31,39, 46,29,1,27,18,25,166,40,40,254,89,46,159,11,7,2, 2,12,12,57,33,21,100,23,23,9,7,16,8,56,42,32, 90,28,21,11,20,26,28,4,1,5,26,11,21,61,26,32, 34,0,0,1,0,41,255,254,3,53,1,205,0,74,0,0, 19,50,23,22,21,20,7,22,23,22,51,50,55,53,35,53, 33,21,35,17,39,17,35,17,39,53,6,35,34,39,38,39, 22,21,20,7,6,35,34,39,38,39,38,53,52,51,50,23, 22,23,22,51,50,53,52,39,38,35,34,7,39,54,55,54, 51,54,55,54,53,52,35,34,7,39,54,201,68,55,43,38, 3,47,30,29,48,49,135,1,165,69,45,127,45,28,44,35, 23,6,4,5,62,38,43,82,91,21,16,6,23,16,3,18, 62,48,46,95,34,17,15,60,35,50,51,44,17,24,33,6, 3,118,47,29,38,37,1,205,40,31,39,46,29,1,27,18, 25,166,40,40,254,89,46,1,121,254,89,46,159,11,7,2, 2,12,12,57,33,21,100,23,23,9,7,16,8,56,42,32, 90,28,21,11,20,26,28,4,1,5,26,11,21,61,26,32, 34,0,0,1,0,0,255,178,1,136,1,205,0,58,0,0, 55,34,39,38,53,52,55,54,59,1,53,35,53,33,21,35, 21,35,34,21,20,23,22,51,50,55,54,51,50,23,22,21, 20,7,6,7,23,7,39,35,38,39,38,53,52,51,50,23, 22,23,22,51,50,55,54,53,52,39,38,158,48,37,26,55, 21,23,99,245,1,136,100,157,37,29,11,11,4,4,17,11, 60,41,39,81,21,23,109,34,118,32,56,15,4,41,41,19, 3,2,8,9,46,36,22,36,5,184,41,28,31,47,18,7, 65,40,40,103,54,27,13,5,1,3,25,22,28,59,39,10, 6,97,15,108,7,42,11,12,34,44,7,8,3,32,20,22, 29,6,1,0,0,1,0,0,255,178,1,136,2,157,0,78, 0,0,55,34,39,38,53,52,55,54,59,1,53,35,53,51, 38,39,52,55,54,51,50,23,22,23,7,38,35,34,7,6, 21,20,23,51,21,35,21,35,34,21,20,23,22,51,50,55, 54,51,50,23,22,21,20,7,6,7,23,7,39,35,38,39, 38,53,52,51,50,23,22,23,22,51,50,55,54,53,52,39, 38,158,48,37,26,55,21,23,99,245,245,50,1,45,18,21, 45,40,11,8,17,33,42,30,12,4,38,110,100,157,37,29, 11,11,4,4,17,11,60,41,39,81,21,23,109,34,118,32, 56,15,4,41,41,19,3,2,8,9,46,36,22,36,5,184, 41,28,31,47,18,7,65,40,65,55,56,23,9,49,14,17, 36,69,38,11,13,49,50,40,103,54,27,13,5,1,3,25, 22,28,59,39,10,6,97,15,108,7,42,11,12,34,44,7, 8,3,32,20,22,29,6,1,0,1,0,0,0,32,1,203, 1,205,0,49,0,0,1,52,39,38,43,1,53,33,21,35, 22,21,20,7,22,21,20,7,6,35,34,39,38,39,38,53, 52,51,50,23,22,23,22,51,50,55,54,53,52,39,38,35, 34,7,39,54,55,54,51,54,1,63,52,30,35,202,1,203, 158,65,41,71,61,38,43,81,93,21,16,6,23,18,1,21, 61,47,46,66,22,8,32,19,16,60,35,49,50,47,16,22, 45,1,72,50,28,15,40,40,41,52,42,29,38,71,58,36, 22,101,23,23,9,7,16,9,56,41,33,52,19,23,29,28, 17,20,26,28,4,1,7,0,0,1,0,0,0,32,2,149, 1,205,0,70,0,0,1,52,39,38,39,38,43,1,53,33, 21,33,22,21,20,7,22,23,54,51,50,23,22,21,6,7, 6,7,39,54,53,52,35,34,7,22,21,20,7,6,35,34, 39,38,39,38,53,52,51,50,23,22,23,22,51,50,55,54, 53,52,39,38,35,34,7,39,54,55,54,51,54,1,67,54, 18,20,13,14,204,2,149,254,154,68,42,25,8,51,63,59, 36,21,4,31,11,6,56,63,57,58,44,12,62,38,44,82, 93,21,17,6,24,17,2,21,61,48,46,66,23,8,32,19, 16,61,35,50,50,54,14,19,46,1,72,51,27,9,4,2, 40,40,44,49,41,30,14,8,45,49,29,36,39,58,20,13, 22,70,57,56,41,24,28,58,36,22,101,23,23,9,7,16, 9,55,42,33,52,19,23,29,28,17,20,26,29,3,1,7, 0,1,0,0,255,254,2,133,1,205,0,62,0,0,1,33, 21,54,53,52,51,50,31,1,22,21,20,7,20,23,22,31, 1,6,21,20,51,50,55,23,6,35,34,39,38,53,52,55, 54,55,38,39,38,39,7,21,39,53,7,39,55,53,38,35, 34,7,39,54,51,50,23,22,23,53,33,53,33,2,133,254, 229,84,26,14,17,33,16,53,9,10,30,23,109,84,34,37, 14,29,41,70,47,31,55,7,8,14,7,2,2,96,45,214, 29,243,71,93,63,32,18,27,69,68,76,25,12,254,195,2, 133,1,165,173,39,45,32,9,18,9,11,18,32,4,15,15, 11,29,15,47,49,18,39,15,38,25,32,42,24,4,2,12, 17,4,4,48,204,46,137,104,32,118,18,53,24,42,21,33, 11,11,139,40,0,1,0,0,255,157,1,184,1,205,0,34, 0,0,5,7,39,54,53,52,47,1,38,61,1,35,53,33, 21,35,21,20,7,6,35,47,1,51,50,61,1,35,21,20, 31,1,22,21,20,1,174,25,48,18,23,240,70,42,1,169, 68,43,13,17,32,51,75,34,222,54,243,55,74,25,38,13, 9,8,12,125,36,26,253,40,40,217,36,13,4,1,39,15, 215,252,13,29,128,28,26,12,0,1,0,0,255,157,1,184, 2,160,0,44,0,0,1,51,21,35,21,20,7,6,35,47, 1,51,50,61,1,35,21,20,31,1,22,21,20,15,1,39, 54,53,52,47,1,38,61,1,35,53,33,38,43,1,39,51, 50,23,22,1,92,77,68,43,13,17,32,51,75,34,222,54, 243,55,10,25,48,18,23,240,70,42,1,54,84,46,56,37, 50,51,43,71,1,205,40,217,36,13,4,1,39,15,215,252, 13,29,128,28,26,12,7,25,38,13,9,8,12,125,36,26, 253,40,134,77,48,80,0,2,0,41,255,254,3,53,2,112, 0,20,0,95,0,0,1,6,7,6,35,34,39,38,39,38, 53,52,51,50,23,22,51,50,55,54,55,5,50,23,22,21, 20,7,22,23,22,51,50,55,53,35,53,33,21,35,17,39, 17,35,17,39,53,6,35,34,39,38,39,22,21,20,7,6, 35,34,39,38,39,38,53,52,51,50,23,22,23,22,51,50, 53,52,39,38,35,34,7,39,54,55,54,51,54,55,54,53, 52,35,34,7,39,54,3,42,18,58,37,29,53,55,22,9, 2,12,9,5,46,69,24,28,37,18,253,194,68,55,43,38, 3,47,30,29,48,49,135,1,165,69,45,127,45,28,44,35, 23,6,4,5,62,38,43,82,91,21,16,6,23,16,3,18, 62,48,46,95,34,17,15,60,35,50,51,44,17,24,33,6, 3,118,47,29,38,37,2,77,35,28,17,54,21,19,6,3, 12,8,70,16,19,35,155,40,31,39,46,29,1,27,18,25, 166,40,40,254,89,46,1,121,254,89,46,159,11,7,2,2, 12,12,57,33,21,100,23,23,9,7,16,8,56,42,32,90, 28,21,11,20,26,28,4,1,5,26,11,21,61,26,32,34, 0,1,0,41,255,254,3,53,2,160,0,84,0,0,19,50, 23,22,21,20,7,22,23,22,51,50,55,53,35,53,33,38, 43,1,39,51,50,23,22,23,51,21,35,17,39,17,35,17, 39,53,6,35,34,39,38,39,22,21,20,7,6,35,34,39, 38,39,38,53,52,51,50,23,22,23,22,51,50,53,52,39, 38,35,34,7,39,54,55,54,51,54,55,54,53,52,35,34, 7,39,54,201,68,55,43,38,3,47,30,29,48,49,135,1, 49,81,47,56,37,50,50,44,66,50,77,69,45,127,45,28, 44,35,23,6,4,5,62,38,43,82,91,21,16,6,23,16, 3,18,62,48,46,95,34,17,15,60,35,50,51,44,17,24, 33,6,3,118,47,29,38,37,1,205,40,31,39,46,29,1, 27,18,25,166,40,134,77,48,73,90,40,254,89,46,1,121, 254,89,46,159,11,7,2,2,12,12,57,33,21,100,23,23, 9,7,16,8,56,42,32,90,28,21,11,20,26,28,4,1, 5,26,11,21,61,26,32,34,0,1,0,41,255,254,3,53, 2,226,0,106,0,0,19,50,23,22,21,20,7,22,23,22, 51,50,55,53,35,53,33,38,39,38,35,7,39,38,53,52, 55,54,51,50,23,38,39,38,47,2,34,7,53,52,51,50, 23,22,23,22,23,51,21,35,17,39,17,35,17,39,53,6, 35,34,39,38,39,22,21,20,7,6,35,34,39,38,39,38, 53,52,51,50,23,22,23,22,51,50,53,52,39,38,35,34, 7,39,54,55,54,51,54,55,54,53,52,35,34,7,39,54, 201,68,55,43,38,3,47,30,29,48,49,135,1,45,50,29, 20,29,35,36,2,32,6,5,65,99,6,26,14,33,22,12, 5,6,20,33,40,40,24,3,2,76,69,45,127,45,28,44, 35,23,6,4,5,62,38,43,82,91,21,16,6,23,16,3, 18,62,48,46,95,34,17,15,60,35,50,51,44,17,24,33, 6,3,118,47,29,38,37,1,205,40,31,39,46,29,1,27, 18,25,166,40,53,11,8,2,42,2,4,19,5,1,102,31, 72,29,21,10,2,2,53,20,52,50,138,20,17,40,254,89, 46,1,121,254,89,46,159,11,7,2,2,12,12,57,33,21, 100,23,23,9,7,16,8,56,42,32,90,28,21,11,20,26, 28,4,1,5,26,11,21,61,26,32,34,0,0,2,0,0, 255,254,2,91,1,205,0,45,0,58,0,0,1,33,21,54, 55,54,51,50,23,22,21,20,7,6,7,39,54,55,54,53, 52,39,38,35,34,15,1,21,39,53,6,35,34,39,38,53, 52,55,54,51,50,23,53,33,53,33,5,53,38,35,34,7, 6,21,20,23,22,51,50,2,91,254,238,49,14,24,29,47, 36,25,42,11,10,32,35,9,3,33,12,14,22,33,62,45, 48,68,60,40,26,58,26,31,82,45,254,228,2,91,254,193, 52,64,42,26,13,41,11,13,80,1,165,176,43,8,13,59, 41,38,53,43,11,6,29,32,38,13,39,37,17,7,28,56, 188,46,113,30,47,31,37,58,26,11,63,147,40,253,18,72, 34,17,19,45,13,4,0,3,0,0,255,254,2,116,1,205, 0,25,0,34,0,62,0,0,1,35,17,39,53,6,35,34, 35,38,39,38,39,55,54,51,50,23,54,55,54,61,1,35, 53,33,7,53,38,35,34,21,20,51,50,23,53,6,35,34, 39,38,39,55,54,55,54,51,50,23,22,23,53,33,21,20, 15,1,22,23,22,51,50,2,116,61,45,105,88,3,2,84, 95,83,21,1,7,20,31,29,15,11,3,158,2,116,106,50, 68,98,97,57,62,46,61,85,45,24,2,3,13,67,25,24, 71,46,8,6,254,196,33,32,27,61,42,41,113,1,165,254, 89,46,23,58,1,89,77,68,9,12,38,10,31,9,6,138, 40,242,35,53,63,69,54,53,39,53,29,38,21,44,19,7, 33,6,7,121,138,55,33,28,58,36,25,0,0,1,0,0, 255,254,1,174,1,205,0,20,0,0,1,35,17,39,17,35, 21,20,35,34,47,1,38,53,52,59,1,53,35,53,33,1, 174,70,45,149,25,16,17,54,15,31,51,121,1,174,1,165, 254,89,46,1,121,229,40,17,56,15,10,15,156,40,0,2, 0,0,255,254,1,222,1,205,0,21,0,50,0,0,1,35, 17,39,53,6,35,34,39,38,53,52,55,38,39,38,53,52, 55,35,53,33,7,53,33,34,7,6,21,20,23,22,23,22, 23,22,31,1,38,35,34,7,6,21,20,23,22,51,50,55, 54,1,222,70,45,65,89,47,48,61,50,44,15,5,11,50, 1,222,115,255,0,14,7,1,19,7,1,16,65,34,28,31, 67,58,38,17,7,63,18,21,70,74,10,1,165,254,89,46, 131,56,27,34,58,37,20,26,37,11,11,14,27,40,236,196, 30,6,5,27,18,7,1,13,5,1,7,54,26,26,10,11, 53,15,5,56,8,0,0,2,0,0,0,0,2,0,1,205, 0,3,0,52,0,0,1,7,39,55,7,52,39,38,35,34, 39,38,53,52,55,54,59,1,53,33,53,33,21,35,21,35, 34,21,20,23,22,51,50,23,22,21,20,7,6,35,34,39, 38,53,52,51,50,23,22,51,50,55,54,1,252,45,46,46, 59,53,22,68,97,36,14,49,18,21,156,254,154,2,0,107, 203,38,49,17,38,71,56,55,75,31,40,138,117,6,14,11, 9,101,126,68,24,8,1,0,38,38,36,180,45,10,4,62, 25,23,50,18,7,65,40,40,103,62,36,7,2,29,28,34, 79,29,12,147,7,7,13,11,123,40,14,0,0,1,0,0, 255,254,2,12,1,205,0,29,0,0,1,35,17,39,53,6, 35,34,39,38,53,52,55,35,53,33,21,35,6,21,20,23, 22,51,50,55,53,33,53,33,2,12,70,45,65,75,68,49, 37,18,88,1,8,102,45,57,17,21,67,85,254,103,2,12, 1,165,254,89,46,122,50,50,37,44,26,21,40,40,20,37, 59,18,5,56,210,40,0,2,0,0,0,0,2,71,1,205, 0,60,0,73,0,0,1,35,21,22,23,22,21,20,7,6, 35,34,53,52,55,38,39,38,53,52,55,54,51,50,23,21, 38,35,34,21,20,23,22,51,50,55,51,23,35,34,21,20, 23,22,51,50,55,54,55,38,39,38,53,52,55,54,55,53, 33,53,33,7,34,7,6,21,20,23,22,23,54,53,52,39, 2,71,147,53,19,7,95,85,88,160,37,48,23,11,58,27, 30,41,31,35,46,58,56,23,19,11,12,54,12,75,67,40, 15,41,97,84,10,9,52,48,49,63,20,23,254,124,2,71, 183,29,26,16,41,38,42,18,45,1,165,89,20,59,22,24, 84,65,58,94,38,25,17,37,18,17,47,24,11,21,27,9, 62,29,16,7,4,40,55,39,10,4,74,9,9,19,37,39, 28,54,26,8,3,84,40,156,27,16,16,29,29,32,3,31, 49,55,14,0,0,1,0,0,255,254,2,41,1,205,0,36, 0,0,1,35,17,39,53,35,22,21,20,7,6,35,34,39, 38,39,55,54,51,50,23,22,23,22,51,50,53,52,39,38, 39,55,33,53,33,53,33,2,41,68,45,182,84,49,23,27, 52,65,70,14,1,2,7,11,6,29,57,44,40,57,37,41, 62,4,1,24,254,72,2,41,1,165,254,89,46,246,75,44, 49,24,11,56,60,71,11,4,13,67,47,36,60,23,37,41, 30,11,93,40,0,2,0,0,255,178,1,253,1,205,0,50, 0,70,0,0,55,34,39,38,53,52,55,54,59,1,53,35, 53,33,21,35,17,39,53,6,43,1,22,21,20,7,6,7, 23,7,39,35,38,39,38,53,52,51,50,23,22,23,22,51, 50,55,54,53,52,39,38,55,53,35,21,35,34,21,20,23, 22,51,50,55,54,51,50,23,22,51,50,158,48,37,26,55, 21,23,99,245,1,253,70,45,29,54,7,21,81,21,23,109, 33,119,32,56,15,4,41,41,19,3,2,8,10,45,37,23, 37,5,157,102,157,37,29,11,11,4,4,17,19,31,33,29, 12,49,184,41,28,31,47,18,7,65,40,40,254,89,46,158, 17,17,20,59,39,10,6,97,15,108,7,42,11,12,34,44, 7,8,3,32,20,22,29,6,1,70,167,103,54,27,13,5, 1,3,3,4,0,1,0,0,255,254,2,32,1,205,0,41, 0,0,1,35,17,39,53,35,6,7,6,35,34,39,38,53, 52,51,50,23,22,51,50,55,54,53,52,39,38,35,34,7, 39,54,51,50,23,22,23,51,53,33,53,33,2,32,70,45, 73,17,63,27,29,89,88,7,16,9,8,72,68,79,22,7, 32,10,10,56,22,46,25,76,68,34,12,4,69,254,83,2, 32,1,165,254,89,46,155,53,21,9,100,7,7,12,8,79, 45,13,16,43,14,4,28,21,46,54,17,20,183,40,0,1, 0,0,0,0,1,188,1,205,0,31,0,0,55,20,23,22, 51,50,55,54,55,23,6,35,34,39,38,53,52,55,54,59, 1,53,33,53,33,21,35,21,35,34,7,6,80,53,35,27, 92,34,15,15,27,52,77,102,62,43,46,37,38,98,254,251, 1,188,135,125,71,24,9,117,31,28,18,15,7,12,34,40, 50,36,50,53,46,36,150,40,40,190,63,23,0,2,0,0, 0,0,1,224,1,205,0,38,0,52,0,0,1,35,22,21, 20,7,6,21,20,23,22,23,22,21,20,7,6,35,34,39, 38,39,38,53,52,55,54,55,54,55,54,53,52,39,38,35, 33,53,33,3,52,35,34,7,6,21,20,23,22,51,50,55, 54,1,224,150,25,17,18,8,37,27,19,72,42,53,63,72, 58,9,3,100,30,102,20,12,4,29,8,10,254,252,1,224, 115,110,93,29,48,43,48,63,93,26,7,1,165,29,43,21, 28,24,5,5,5,18,46,31,27,76,39,24,57,47,44,14, 11,74,22,6,8,4,40,13,11,50,16,4,40,254,199,89, 9,15,54,35,39,45,65,19,0,1,0,0,0,0,2,10, 1,205,0,48,0,0,37,52,39,38,35,34,39,38,53,52, 55,54,59,1,53,33,53,33,21,35,21,35,34,21,20,23, 22,51,50,23,22,21,20,7,6,35,34,39,38,53,52,51, 50,23,22,51,50,55,54,1,150,53,22,68,99,36,14,49, 18,22,158,254,151,2,10,115,204,37,40,17,46,73,56,56, 74,32,41,141,117,6,15,12,9,102,126,62,26,11,112,45, 10,4,62,25,23,49,19,7,65,40,40,103,62,35,7,3, 29,29,33,77,30,13,147,7,7,13,11,123,37,16,0,2, 0,0,0,0,1,223,1,205,0,36,0,50,0,0,1,35, 21,35,34,21,20,23,22,23,38,53,52,55,54,51,50,23, 22,21,20,7,6,35,34,39,38,53,52,55,54,59,1,53, 33,53,33,3,52,39,38,35,34,21,20,23,22,51,50,55, 54,1,223,114,190,87,61,27,27,10,58,17,19,69,35,19, 66,25,32,100,71,74,31,37,75,133,254,194,1,223,107,37, 11,13,81,13,5,18,75,24,7,1,165,134,90,60,54,24, 10,24,41,74,20,5,45,25,31,75,27,10,68,65,94,37, 28,34,95,40,254,163,43,15,4,71,37,25,1,42,14,0, 0,2,0,0,255,254,1,254,1,205,0,18,0,27,0,0, 1,35,17,39,17,35,21,20,7,6,35,34,39,38,61,1, 35,53,33,5,53,35,21,20,23,22,51,50,1,254,69,45, 125,48,25,26,46,48,37,41,1,254,254,227,138,45,15,11, 67,1,165,254,89,46,1,121,201,44,25,13,36,28,27,192, 40,241,201,209,19,13,4,0,0,1,0,0,255,254,1,189, 1,205,0,24,0,0,1,35,17,39,53,35,34,21,20,23, 35,38,39,38,39,55,54,55,54,59,1,53,33,53,33,1, 189,70,45,179,64,125,45,80,25,20,1,3,15,72,15,16, 168,254,182,1,189,1,165,254,89,46,245,63,82,125,88,50, 40,36,26,55,12,2,93,40,0,2,0,43,255,254,2,36, 1,205,0,38,0,50,0,0,1,35,17,39,53,6,35,34, 39,38,39,54,55,38,39,38,53,52,55,54,51,50,23,22, 21,20,7,6,7,22,23,22,51,50,55,53,35,53,51,5, 52,35,34,21,20,23,22,51,50,55,54,2,36,70,45,62, 97,117,70,24,13,69,57,50,40,43,68,19,22,79,36,18, 94,37,35,16,72,32,22,80,92,96,211,254,202,75,73,63, 23,25,9,8,20,1,165,254,89,46,131,50,60,21,26,16, 31,5,30,31,24,69,18,5,50,26,33,58,51,20,10,27, 21,9,65,200,40,101,69,60,39,15,6,1,20,0,0,1, 0,0,255,206,1,171,1,205,0,42,0,0,55,52,55,54, 59,1,53,33,53,33,21,35,21,35,34,7,6,21,20,23, 22,51,50,55,38,53,52,55,23,22,23,22,21,20,7,23, 7,39,6,35,34,39,38,42,81,28,33,98,254,230,1,171, 99,121,84,26,9,54,47,53,7,7,2,44,24,32,7,1, 29,68,29,73,10,4,84,76,83,246,63,20,7,85,40,40, 124,47,15,19,45,33,31,1,6,11,44,6,1,8,31,6, 6,32,15,112,14,115,2,50,54,0,0,2,0,43,255,254, 2,14,1,205,0,48,0,62,0,0,1,35,17,39,53,6, 7,6,35,34,39,38,53,52,55,38,39,55,54,55,54,51, 50,23,22,21,20,7,6,7,22,23,51,23,7,38,35,34, 21,20,23,22,51,50,55,53,35,53,51,5,52,39,38,35, 34,21,20,23,22,51,50,55,54,2,14,69,45,44,82,22, 17,60,47,46,55,102,3,3,13,54,10,10,54,30,15,65, 6,6,26,38,54,37,10,23,42,96,70,17,17,103,65,108, 222,254,173,31,8,9,48,25,10,8,21,21,11,1,165,254, 89,46,108,29,12,3,34,34,33,49,25,36,68,22,41,9, 2,34,17,21,33,35,3,3,15,11,38,11,10,51,39,10, 3,64,210,40,75,24,9,3,43,22,15,5,27,13,0,1, 0,0,255,254,1,165,1,205,0,20,0,0,1,35,17,39, 53,35,21,20,35,34,47,1,38,53,52,59,1,53,33,53, 33,1,165,70,45,169,18,11,10,44,15,44,223,254,206,1, 165,1,165,254,89,46,191,51,25,10,48,17,13,27,147,40, 0,2,0,0,255,254,1,165,1,205,0,3,0,24,0,0, 55,7,39,55,1,35,17,39,53,35,21,20,35,34,47,1, 38,53,52,59,1,53,33,53,33,168,51,51,51,1,48,70, 45,169,18,11,10,44,15,44,223,254,206,1,165,50,51,51, 51,1,64,254,89,46,191,51,25,10,48,17,13,27,147,40, 0,2,0,0,255,254,1,150,1,205,0,14,0,23,0,0, 1,35,17,39,53,6,35,34,39,38,61,1,35,53,33,7, 53,35,21,20,23,22,51,50,1,150,69,45,47,73,49,46, 36,41,1,150,114,205,40,19,14,87,1,165,254,89,46,141, 47,42,34,33,174,40,208,168,195,24,18,8,0,2,0,0, 255,254,2,82,1,205,0,37,0,46,0,0,1,33,21,54, 51,50,23,22,21,20,7,6,7,39,54,55,54,53,52,39, 38,35,34,15,1,21,39,53,6,35,34,39,38,61,1,35, 53,33,5,53,35,21,20,23,22,51,50,2,82,254,255,61, 47,44,37,27,41,11,11,32,35,9,3,31,13,15,21,31, 57,45,47,73,49,46,36,41,2,82,254,210,205,40,19,14, 87,1,165,142,57,61,46,40,57,46,12,7,29,32,42,15, 42,40,21,9,26,51,222,46,141,47,42,34,33,174,40,208, 168,195,24,18,8,0,0,3,0,0,255,254,1,192,1,205, 0,22,0,31,0,40,0,0,1,35,17,39,53,6,7,6, 35,34,39,38,53,52,55,54,51,50,23,53,33,53,33,7, 53,38,39,38,43,1,23,54,7,39,6,21,20,23,22,51, 50,1,192,70,45,46,66,15,13,68,48,36,69,39,42,95, 47,254,179,1,192,115,37,33,25,45,17,93,26,59,95,54, 60,16,19,30,1,165,254,89,46,123,38,11,2,50,37,44, 55,29,16,65,139,40,247,22,46,15,12,135,12,24,137,24, 38,61,17,4,0,2,0,43,255,254,2,14,1,205,0,35, 0,46,0,0,1,35,17,39,53,35,21,20,35,34,47,1, 38,53,52,59,1,53,38,39,38,53,52,55,54,51,50,23, 22,29,1,51,53,35,53,51,5,53,52,39,38,35,34,21, 20,23,22,2,14,70,45,172,14,13,19,59,18,24,53,83, 43,24,43,22,22,44,34,31,172,132,247,254,179,26,9,8, 60,62,22,1,165,254,89,46,153,48,15,12,47,18,11,14, 53,9,41,22,28,36,24,12,34,31,28,132,185,40,147,69, 22,12,4,40,32,24,8,0,0,2,0,0,255,254,1,213, 1,205,0,20,0,24,0,0,1,35,17,39,53,35,21,20, 35,34,47,1,38,53,52,59,1,53,35,53,33,7,53,35, 21,1,213,70,45,196,21,16,19,47,15,32,40,112,1,213, 115,196,1,165,254,89,46,156,47,24,19,47,15,12,16,183, 40,223,183,183,0,2,0,0,255,254,1,201,1,205,0,18, 0,36,0,0,1,35,17,39,53,6,35,34,39,38,53,54, 53,52,47,1,35,53,33,7,53,35,22,21,20,7,6,7, 6,21,20,23,22,51,50,55,54,1,201,70,45,46,70,91, 56,38,133,33,12,129,1,201,115,159,43,40,42,43,3,39, 18,18,95,43,16,1,165,254,89,46,133,40,51,36,48,31, 48,31,30,9,40,231,191,37,47,19,29,29,10,8,7,33, 18,9,28,11,0,1,0,0,0,1,1,63,1,205,0,23, 0,0,1,35,21,20,7,23,7,39,38,53,52,51,50,23, 22,51,50,55,54,61,1,35,53,33,1,63,112,74,139,34, 135,56,25,31,26,2,1,9,9,11,161,1,63,1,165,147, 75,23,162,13,157,67,16,22,41,2,22,19,23,137,40,0, 0,2,0,0,255,255,1,63,1,205,0,3,0,27,0,0, 55,7,39,55,39,52,51,50,23,22,51,50,55,54,61,1, 35,53,33,21,35,21,20,7,23,7,39,38,136,51,51,51, 38,25,31,26,2,1,9,9,11,161,1,63,112,74,139,34, 135,56,50,51,51,51,140,22,41,2,22,19,23,137,40,40, 147,75,23,162,13,157,67,0,0,1,0,0,255,254,2,43, 1,205,0,47,0,0,1,35,17,39,53,38,35,34,15,2, 39,54,55,38,39,38,35,34,7,6,21,20,23,22,23,22, 21,20,35,34,39,38,53,52,55,54,51,50,23,54,51,50, 23,53,33,53,33,2,43,70,45,37,13,57,30,25,3,41, 3,19,19,43,16,15,58,12,5,94,24,22,43,18,11,16, 184,55,23,30,67,60,43,59,32,29,254,72,2,43,1,165, 254,89,46,227,8,47,48,6,15,27,22,33,15,6,42,16, 25,57,78,20,14,27,12,7,13,114,101,70,28,12,63,46, 20,122,40,0,0,3,0,0,0,48,2,129,1,205,0,32, 0,46,0,57,0,0,55,34,39,38,53,52,55,54,51,50, 23,54,55,53,33,53,33,21,35,21,22,23,22,21,20,15, 1,6,7,39,38,39,6,37,52,47,1,35,34,7,6,7, 22,51,50,55,54,39,38,35,34,21,20,23,22,51,50,55, 188,74,44,29,72,36,44,93,29,38,81,254,78,2,129,160, 41,32,20,63,29,19,22,44,77,13,41,1,5,30,25,11, 60,34,17,20,6,91,66,24,10,232,15,84,108,44,20,22, 66,27,48,61,39,50,64,30,15,56,54,2,114,40,40,115, 4,49,33,30,81,39,13,7,1,2,10,68,81,150,53,11, 5,28,14,39,99,60,23,43,54,105,43,22,10,51,0,2, 0,0,255,254,1,192,1,205,0,22,0,37,0,0,1,35, 17,39,53,6,7,6,35,34,39,38,53,52,55,54,51,50, 23,53,33,53,33,7,53,38,39,38,35,34,7,6,21,20, 23,22,51,50,1,192,70,45,46,66,15,13,68,48,36,69, 39,42,96,46,254,179,1,192,115,38,32,25,45,56,33,17, 60,16,19,68,1,165,254,89,46,123,38,11,2,50,37,44, 55,29,16,64,138,40,249,25,45,15,12,33,18,21,61,17, 4,0,0,2,0,0,255,243,2,81,1,205,0,14,0,52, 0,0,1,52,35,34,15,1,6,21,20,23,22,51,50,55, 54,37,33,21,35,17,39,17,35,22,21,20,7,6,7,23, 7,47,1,38,39,38,53,52,51,50,23,55,54,55,54,55, 38,39,38,53,52,55,35,1,51,101,45,23,8,2,58,43, 46,7,8,17,254,205,2,81,69,45,175,49,48,47,71,131, 31,141,36,35,23,8,27,55,26,24,47,37,7,4,91,65, 34,20,101,1,63,102,23,12,5,4,52,31,24,1,20,170, 40,254,89,46,1,121,34,67,58,56,54,17,131,17,141,1, 5,22,8,20,40,53,2,10,37,7,6,16,48,25,51,28, 20,0,0,3,0,0,255,254,1,148,1,205,0,16,0,21, 0,34,0,0,1,35,17,39,53,6,7,6,35,34,39,38, 61,1,35,53,33,7,53,35,23,22,7,53,52,47,1,21, 20,23,22,51,50,55,54,1,148,70,45,27,65,13,12,49, 46,36,41,1,148,115,192,186,3,25,12,162,40,19,14,62, 29,10,1,165,254,89,46,134,30,8,2,42,34,33,174,40, 202,162,156,1,53,27,4,10,136,162,24,18,8,19,7,0, 0,2,0,0,255,254,2,0,1,205,0,29,0,37,0,0, 55,50,55,54,61,1,35,53,33,21,35,17,39,53,6,35, 34,39,6,7,23,7,39,38,53,52,51,50,23,22,37,53, 35,7,21,22,51,50,133,13,13,4,163,2,0,70,45,29, 54,72,44,16,48,141,34,137,57,25,32,26,2,1,9,187, 1,24,52,67,220,41,14,9,137,40,40,254,89,46,149,12, 43,34,14,162,13,157,66,17,22,41,2,14,187,158,1,42, 0,1,0,0,255,215,1,174,1,205,0,56,0,0,1,35, 21,35,34,21,20,23,22,23,54,51,50,23,22,21,20,7, 6,35,34,52,51,50,55,54,53,52,35,34,7,6,21,20, 23,22,23,21,38,39,38,53,52,55,38,39,38,53,52,55, 54,59,1,53,33,53,33,1,174,89,223,27,33,8,7,28, 47,74,45,29,36,19,20,27,16,26,10,3,98,71,20,5, 43,49,116,113,77,65,32,30,21,12,58,18,20,156,254,217, 1,174,1,165,104,40,29,17,3,2,16,41,26,35,38,24, 12,34,36,10,11,45,45,12,15,50,33,37,28,23,13,54, 46,58,40,38,11,36,20,17,45,15,4,65,40,0,0,1, 254,238,255,115,255,84,255,217,0,3,0,0,15,1,39,55, 172,51,51,51,90,51,51,51,0,1,0,45,0,48,1,112, 1,205,0,39,0,0,1,35,34,21,20,31,1,22,21,20, 7,6,35,34,39,38,39,38,53,52,51,50,23,22,23,22, 51,50,53,52,39,38,39,38,53,52,55,54,59,1,1,112, 189,24,45,84,45,34,36,58,79,50,12,8,7,9,16,17, 19,40,11,10,93,45,15,70,45,43,19,20,171,1,153,30, 23,37,69,44,36,49,34,39,60,15,16,13,10,12,30,31, 11,3,80,41,48,14,59,39,18,36,19,8,0,1,255,251, 255,254,0,177,1,205,0,7,0,0,19,35,17,39,17,35, 53,51,177,69,45,68,182,1,165,254,89,46,1,121,40,0, 0,1,255,250,255,254,1,162,2,98,0,27,0,0,19,52, 55,54,51,50,23,7,38,39,38,35,34,15,1,21,20,23, 51,21,35,17,39,17,35,53,51,38,32,63,33,37,134,119, 14,48,93,42,42,73,19,5,18,78,70,45,69,67,29,2, 11,50,25,12,122,25,66,28,13,38,18,3,25,25,40,254, 89,46,1,121,40,29,0,1,255,63,255,254,0,177,2,126, 0,27,0,0,19,35,17,39,17,35,53,51,38,39,38,35, 34,21,20,23,35,38,53,52,55,54,51,50,23,22,23,51, 177,69,45,68,69,13,51,36,40,81,33,33,36,58,21,24, 89,58,32,9,79,1,165,254,89,46,1,121,40,65,44,30, 52,32,55,53,31,64,22,7,80,44,53,0,0,1,254,125, 255,79,0,14,0,0,0,25,0,0,23,20,7,6,35,34, 39,55,22,51,50,55,54,53,52,39,38,35,34,7,39,54, 51,50,23,22,14,97,27,30,114,133,26,112,109,55,35,18, 28,20,13,25,32,46,25,54,47,44,40,97,59,16,5,108, 19,89,24,13,15,22,15,12,22,26,34,36,33,0,0,1, 255,41,255,69,0,149,0,0,0,30,0,0,7,52,55,54, 51,50,31,1,35,39,38,35,34,7,6,21,20,23,22,51, 50,54,59,1,23,6,7,39,38,39,38,215,45,23,27,44, 47,178,48,145,35,41,39,7,3,22,9,7,30,36,4,13, 23,20,53,32,29,22,34,80,47,22,11,39,148,120,29,34, 12,22,16,13,5,16,19,32,2,3,6,20,31,0,0,1, 255,30,255,126,255,243,0,38,0,21,0,0,7,6,35,34, 39,38,53,52,55,54,51,23,34,7,6,21,20,23,22,51, 50,55,13,23,40,60,45,45,67,31,33,48,86,32,12,41, 12,12,48,22,114,16,25,24,40,47,22,10,37,32,12,15, 25,11,3,16,0,1,255,21,1,253,0,48,2,112,0,20, 0,0,19,6,7,6,35,34,39,38,39,38,53,52,51,50, 23,22,51,50,55,54,55,48,18,58,37,29,53,55,22,9, 2,12,9,5,46,69,24,28,37,18,2,77,35,28,17,54, 21,19,6,3,12,8,70,16,19,35,0,1,254,181,1,205, 255,186,2,160,0,9,0,0,3,35,38,43,1,39,51,50, 23,22,70,38,84,46,56,37,50,51,43,71,1,205,134,77, 48,80,0,1,254,204,1,205,255,194,2,230,0,31,0,0, 3,35,38,39,38,39,7,39,38,53,52,55,54,51,50,23, 38,39,38,39,38,35,34,7,53,52,51,50,23,22,23,22, 62,42,50,28,18,24,46,36,2,32,6,5,65,99,6,26, 14,33,19,15,5,6,20,33,40,41,24,3,1,205,55,12, 7,2,2,42,2,4,19,5,1,102,31,72,29,21,12,2, 53,20,52,51,141,20,0,2,255,201,255,254,0,228,2,112, 0,20,0,28,0,0,19,6,7,6,35,34,39,38,39,38, 53,52,51,50,23,22,51,50,55,54,55,7,35,17,39,17, 35,53,51,228,18,58,37,29,53,55,22,9,2,12,9,5, 46,69,24,28,37,18,16,69,45,68,182,2,77,35,28,17, 54,21,19,6,3,12,8,70,16,19,35,195,254,89,46,1, 121,40,0,1,255,96,255,254,0,177,2,160,0,17,0,0, 19,35,17,39,17,35,53,51,38,43,1,39,51,50,23,22, 23,51,177,69,45,68,66,81,47,56,37,50,50,44,66,50, 77,1,165,254,89,46,1,121,40,134,77,48,73,90,0,1, 255,112,255,254,0,177,2,226,0,40,0,0,19,35,17,39, 17,35,53,51,38,39,38,35,34,7,39,38,53,52,55,54, 51,50,23,38,39,38,39,38,35,34,7,53,52,51,50,23, 22,23,22,23,51,177,69,45,68,62,50,29,20,29,14,21, 36,2,32,6,5,65,99,6,26,14,33,19,15,5,6,20, 33,40,40,24,3,2,76,1,165,254,89,46,1,121,40,53, 11,8,2,42,2,4,19,5,1,102,31,72,29,21,12,2, 53,20,52,50,138,20,17,0,0,1,255,104,255,79,0,153, 255,255,0,11,0,0,23,35,38,39,38,43,1,39,51,22, 23,22,153,36,45,61,59,26,43,35,81,75,99,30,177,52, 44,42,38,21,100,29,0,4,0,40,0,68,3,87,2,40, 0,3,0,26,0,107,0,121,0,0,1,7,39,55,23,6, 7,6,35,34,39,38,39,38,53,52,51,50,23,22,23,22, 51,50,55,54,55,23,50,23,22,21,22,7,6,7,6,35, 34,39,38,39,6,35,34,39,22,21,20,7,6,35,34,39, 38,39,38,53,52,51,50,23,22,23,22,51,50,55,54,53, 52,39,38,35,34,7,39,54,55,54,51,54,55,54,53,52, 35,34,7,39,54,51,50,23,22,23,22,21,20,7,22,51, 22,51,50,63,1,54,23,52,35,34,7,6,7,22,23,22, 51,50,55,54,2,55,48,45,45,151,20,45,46,37,56,57, 26,10,3,15,10,5,30,52,20,20,22,31,39,19,112,56, 34,19,1,8,6,12,29,43,62,47,10,7,67,84,29,50, 4,64,38,43,82,92,22,17,7,24,16,3,19,62,49,47, 69,21,7,34,18,15,62,35,49,49,50,16,22,33,7,3, 121,43,34,38,37,78,68,56,21,12,12,38,73,1,41,30, 56,45,72,43,114,52,43,36,5,21,13,41,19,19,48,14, 3,2,1,37,37,39,87,33,25,25,53,24,22,6,4,13, 8,49,20,7,17,21,37,90,52,31,36,21,21,17,15,38, 51,11,12,76,29,9,13,58,33,20,99,23,24,8,8,16, 8,55,42,34,53,17,21,27,22,11,20,25,29,4,1,6, 23,11,23,61,26,32,34,39,15,18,18,20,46,29,41,20, 49,92,49,121,81,50,7,30,37,19,10,46,12,0,0,1, 255,148,1,205,255,245,2,115,0,3,0,0,3,7,35,55, 11,59,38,62,2,100,151,166,0,2,0,148,0,98,1,175, 1,107,0,15,0,31,0,0,37,20,7,6,35,34,39,38, 53,52,55,54,51,50,23,22,39,34,7,6,21,20,23,22, 51,50,55,54,53,52,39,38,1,175,49,43,50,87,36,18, 56,40,45,93,35,14,142,68,26,10,55,22,27,65,21,6, 33,20,245,62,45,40,61,29,38,61,44,32,60,25,46,50, 19,24,60,24,10,47,15,18,75,20,12,0,0,2,0,173, 255,178,1,193,1,205,0,29,0,42,0,0,5,22,21,20, 7,6,35,34,39,50,53,52,47,1,55,38,39,38,53,52, 55,54,51,50,23,22,21,20,15,1,55,52,39,38,35,34, 21,20,23,22,23,54,55,1,172,21,20,6,6,43,26,46, 5,178,96,68,40,26,59,23,28,55,38,25,29,105,86,32, 13,15,73,52,28,32,18,3,1,18,22,23,11,3,41,18, 4,5,153,96,15,49,32,34,61,22,9,55,38,40,57,29, 105,223,35,18,8,54,55,31,15,1,19,30,0,1,0,143, 255,189,1,196,1,205,0,36,0,0,1,50,23,22,21,20, 7,23,7,39,6,35,34,39,38,61,1,52,55,54,51,50, 23,22,51,50,55,54,53,52,39,38,35,34,7,39,54,1, 42,77,44,28,118,123,22,136,4,9,40,31,18,22,9,7, 29,23,20,10,55,30,16,47,31,32,71,60,29,71,1,205, 64,41,53,96,58,182,34,204,1,28,17,18,18,20,19,8, 50,5,48,26,30,49,37,23,27,33,33,0,0,1,0,133, 255,199,1,207,1,205,0,43,0,0,37,20,7,6,7,23, 7,39,38,39,38,53,52,55,54,51,50,23,55,54,55,54, 53,52,43,1,39,51,50,53,52,39,38,43,1,39,51,50, 23,22,21,20,7,22,1,207,90,13,14,78,33,83,58,36, 20,27,7,7,53,27,25,44,18,7,72,139,20,165,39,45, 17,19,137,31,158,61,44,32,31,66,178,72,45,7,5,93, 13,102,1,29,17,20,31,10,2,64,2,10,43,15,17,66, 39,69,44,18,7,40,49,35,40,43,30,42,0,2,0,47, 0,38,2,1,1,187,0,19,0,31,0,0,1,7,23,22, 21,20,7,6,35,34,39,38,53,52,63,1,39,55,23,55, 3,52,47,1,7,6,21,20,51,50,55,54,2,1,172,79, 38,68,32,33,53,40,41,37,53,234,13,246,189,84,35,58, 55,25,85,57,23,8,1,145,163,56,27,43,43,21,10,31, 32,30,25,34,50,169,32,177,179,254,196,21,23,44,52,24, 20,43,28,10,0,1,0,113,255,198,1,228,1,195,0,32, 0,0,5,7,39,6,35,34,39,38,39,53,54,55,23,6, 21,20,23,22,51,50,53,52,39,38,53,52,55,54,51,50, 21,20,7,1,228,31,88,35,51,94,46,21,4,5,36,30, 25,69,18,21,75,1,25,27,7,7,45,10,36,22,214,24, 72,32,42,41,59,73,42,66,83,68,17,4,31,5,3,21, 19,23,9,2,54,29,21,0,0,1,0,99,255,197,1,251, 1,205,0,54,0,0,5,7,39,7,49,34,39,38,39,38, 53,52,55,38,39,38,53,52,55,54,59,1,7,35,34,7, 6,21,20,23,22,59,1,7,35,34,21,20,23,22,51,50, 53,52,39,38,53,52,51,50,23,22,21,20,7,1,251,33, 83,59,130,65,22,10,3,49,33,17,2,50,28,34,159,22, 142,34,14,17,2,20,39,165,10,141,57,2,18,115,48,3, 6,34,36,26,14,15,44,15,117,2,68,24,29,9,8,39, 31,23,49,14,6,56,31,18,40,17,14,23,5,8,71,39, 46,4,14,81,19,5,6,12,11,27,38,21,20,18,11,0, 0,2,0,78,0,38,1,248,1,197,0,33,0,43,0,0, 37,20,7,6,35,34,39,38,53,52,51,50,21,20,23,22, 51,50,55,54,55,6,35,34,39,38,53,52,55,54,51,50, 23,22,35,52,35,34,7,6,21,20,51,50,1,248,71,40, 56,113,78,68,20,19,51,61,108,72,33,14,2,27,27,63, 37,22,42,21,24,82,36,17,46,82,34,15,6,70,67,234, 114,52,30,133,118,129,35,35,118,100,124,69,30,35,13,43, 25,31,51,27,13,72,35,68,33,12,14,53,0,1,0,102, 0,0,1,213,1,198,0,21,0,0,55,20,23,22,51,50, 55,23,6,7,6,35,34,39,38,53,52,55,1,23,3,6, 146,80,28,34,87,60,34,34,69,38,36,84,56,50,15,1, 7,27,250,11,129,63,20,7,92,29,56,29,17,49,42,51, 24,15,1,17,34,254,252,13,0,2,0,153,255,200,1,250, 1,205,0,27,0,41,0,0,5,20,7,6,35,34,53,50, 53,52,47,1,38,53,52,55,54,51,50,23,22,21,20,7, 6,7,23,22,3,52,47,1,35,34,21,20,23,22,51,50, 55,54,1,250,35,14,14,42,32,20,204,56,68,43,41,79, 36,18,40,33,78,175,43,113,31,26,5,130,27,17,16,56, 46,30,4,30,16,6,49,21,24,20,192,53,46,54,36,22, 52,26,34,40,31,28,27,164,40,1,76,55,11,4,91,24, 27,17,40,26,0,4,0,40,0,68,3,87,2,40,0,3, 0,26,0,107,0,121,0,0,1,7,39,55,23,6,7,6, 35,34,39,38,39,38,53,52,51,50,23,22,23,22,51,50, 55,54,55,23,50,23,22,21,22,7,6,7,6,35,34,39, 38,39,6,35,34,39,22,21,20,7,6,35,34,39,38,39, 38,53,52,51,50,23,22,23,22,51,50,55,54,53,52,39, 38,35,34,7,39,54,55,54,51,54,55,54,53,52,35,34, 7,39,54,51,50,23,22,23,22,21,20,7,22,51,22,51, 50,63,1,54,23,52,35,34,7,6,7,22,23,22,51,50, 55,54,2,55,48,45,45,151,20,45,46,37,56,57,26,10, 3,15,10,5,30,52,20,20,22,31,39,19,112,56,34,19, 1,8,6,12,29,43,62,47,10,7,67,84,29,50,4,64, 38,43,82,92,22,17,7,24,16,3,19,62,49,47,69,21, 7,34,18,15,62,35,49,49,50,16,22,33,7,3,121,43, 34,38,37,78,68,56,21,12,12,38,73,1,41,30,56,45, 72,43,114,52,43,36,5,21,13,41,19,19,48,14,3,2, 1,37,37,39,87,33,25,25,53,24,22,6,4,13,8,49, 20,7,17,21,37,90,52,31,36,21,21,17,15,38,51,11, 12,76,29,9,13,58,33,20,99,23,24,8,8,16,8,55, 42,34,53,17,21,27,22,11,20,25,29,4,1,6,23,11, 23,61,26,32,34,39,15,18,18,20,46,29,41,20,49,92, 49,121,81,50,7,30,37,19,10,46,12,0,0,2,0,20, 1,50,1,4,2,9,0,12,0,29,0,0,19,52,63,1, 22,31,1,20,15,1,38,39,38,39,22,31,1,54,55,54, 55,20,7,6,35,34,39,38,39,38,90,35,21,33,9,2, 35,21,34,8,2,70,38,64,21,56,41,11,9,64,25,30, 16,15,59,22,9,1,214,39,9,2,4,31,15,38,10,1, 3,32,7,52,141,21,3,3,102,27,33,134,53,22,6,24, 93,39,0,3,0,20,0,0,1,104,1,254,0,15,0,29, 0,40,0,0,19,20,23,22,51,50,55,54,53,52,39,38, 35,34,7,6,23,48,23,22,51,50,55,54,48,39,38,35, 34,15,1,22,31,1,22,23,7,48,39,38,39,20,51,31, 38,69,34,17,51,31,38,69,34,17,50,8,20,42,52,16, 2,8,20,42,52,16,52,118,110,102,5,5,40,34,104,122, 1,164,47,27,16,44,21,25,47,27,16,44,21,25,24,36, 52,8,24,36,52,128,11,130,128,6,5,20,54,149,37,0, 0,4,0,19,0,100,1,5,1,254,0,15,0,29,0,45, 0,61,0,0,19,34,39,38,53,52,55,54,51,50,23,22, 21,20,7,6,39,34,15,1,23,22,23,50,55,54,53,52, 39,38,3,34,39,38,53,52,55,54,51,50,23,22,21,20, 7,6,39,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,140,81,30,10,50,30,41,81,30,10,36,33,52,50, 16,3,3,13,53,51,15,4,7,18,45,81,30,10,50,30, 41,81,30,10,50,30,41,50,16,3,36,15,18,51,15,4, 7,18,1,74,52,18,20,50,25,15,52,18,20,41,25,24, 150,39,20,20,39,2,39,10,10,15,13,33,254,132,52,18, 20,50,25,15,52,18,20,50,25,15,150,39,11,11,38,15, 6,39,10,10,15,13,33,0,0,1,255,236,0,0,2,148, 2,88,0,44,0,0,1,23,35,17,39,6,7,35,38,39, 38,39,23,18,23,22,51,50,55,54,53,52,39,6,7,6, 35,34,39,38,39,54,55,54,51,50,23,22,21,20,7,23, 17,33,39,2,108,40,80,120,76,97,30,96,72,61,28,20, 67,121,36,36,71,46,38,24,3,46,13,15,18,15,39,1, 3,45,23,24,70,35,24,13,48,254,12,40,2,88,60,253, 228,165,152,11,14,150,130,204,20,254,225,76,23,75,61,81, 63,60,61,21,6,9,21,58,38,19,10,70,48,74,55,68, 76,1,174,60,0,1,255,236,0,0,3,32,2,88,0,53, 0,0,33,39,17,39,35,17,39,6,7,35,38,39,38,39, 23,18,23,22,51,50,55,54,53,52,39,20,7,6,35,39, 38,39,38,53,52,55,54,51,50,23,22,21,20,7,23,17, 33,39,33,23,53,51,23,35,2,208,60,39,41,118,77,98, 30,96,71,62,28,20,65,121,38,38,71,46,38,27,46,13, 15,22,45,8,1,43,24,26,74,35,23,14,49,254,12,40, 2,128,40,100,40,80,74,1,150,60,253,228,168,156,11,14, 150,130,205,20,254,230,78,24,73,60,80,66,63,63,21,7, 3,15,54,9,10,33,20,10,71,47,72,56,69,76,1,174, 60,60,60,60,0,2,255,236,0,0,2,28,3,22,0,18, 0,61,0,0,1,52,47,2,38,39,20,23,22,51,50,23, 22,21,33,23,33,39,1,22,23,22,23,7,38,39,38,49, 39,22,51,55,54,55,54,53,52,39,38,39,6,15,1,38, 39,38,53,52,55,54,51,22,23,22,23,22,21,7,6,7, 6,1,204,124,62,201,90,3,106,40,71,125,25,83,254,62, 40,2,8,40,254,160,23,146,100,43,40,112,227,41,40,39, 55,68,127,71,36,46,44,83,4,68,30,57,31,14,95,26, 31,123,91,50,17,9,4,24,166,71,2,88,102,24,7,3, 6,48,91,20,8,3,11,57,60,60,254,152,4,104,71,41, 20,124,99,17,60,12,4,14,44,22,23,25,21,20,15,76, 15,3,2,33,15,17,51,13,4,1,45,26,33,17,17,21, 67,35,15,0,0,2,255,236,0,0,2,28,3,22,0,18, 0,71,0,0,1,33,23,33,39,35,52,47,2,38,39,20, 23,22,51,50,23,22,19,7,39,38,53,52,55,6,7,6, 7,6,35,34,39,22,51,50,55,54,55,39,38,39,38,39, 20,7,6,35,34,39,38,53,55,54,55,54,51,50,23,22, 23,20,21,54,55,54,55,23,6,7,20,1,174,254,62,40, 2,8,40,40,124,62,201,90,3,106,40,71,125,25,83,10, 20,36,30,19,21,53,70,40,39,36,58,56,21,29,25,28, 64,39,2,2,18,3,2,49,15,16,48,22,11,2,11,46, 19,20,19,16,71,4,67,29,28,60,50,63,1,2,88,60, 60,102,24,7,3,6,48,91,20,8,3,11,253,131,20,67, 65,90,75,99,10,67,89,29,28,69,17,13,29,72,44,13, 18,3,2,63,21,6,43,21,28,22,41,17,8,6,26,110, 6,6,92,23,23,17,100,94,117,94,0,1,255,236,0,0, 2,38,3,22,0,51,0,0,19,51,21,23,54,55,21,6, 7,6,35,34,39,38,39,38,47,1,16,23,22,23,55,54, 55,54,53,52,39,6,15,2,53,33,39,35,52,47,2,38, 39,20,23,22,51,23,22,31,1,33,20,180,70,105,65,10, 77,43,51,56,49,109,22,2,1,20,124,59,75,37,89,56, 47,37,31,100,42,17,1,34,40,40,128,64,203,91,4,108, 41,74,124,100,11,2,254,52,2,28,240,70,39,71,52,116, 58,32,39,86,225,24,24,20,254,196,124,59,1,4,18,86, 74,94,81,83,73,47,17,3,240,60,103,23,7,3,11,43, 91,20,8,1,6,49,15,0,0,1,255,236,0,1,2,58, 3,22,0,63,0,0,1,51,23,33,21,54,55,54,55,22, 21,22,7,6,7,35,38,39,38,39,23,22,23,22,23,38, 39,38,53,52,55,23,18,23,22,51,50,55,54,55,6,7, 6,7,39,53,35,39,33,52,39,38,35,34,39,38,53,20, 23,22,23,50,23,22,1,234,40,40,254,222,107,48,9,6, 35,1,56,61,90,37,106,66,65,5,20,11,68,46,57,88, 26,9,1,20,10,89,36,41,65,48,40,11,62,52,17,18, 70,201,40,1,224,90,26,133,143,49,39,92,15,142,162,56, 43,2,88,60,240,46,68,13,13,84,80,105,76,83,10,10, 118,119,201,20,160,113,77,17,76,189,62,68,21,21,20,254, 247,95,37,83,70,104,68,27,8,7,70,240,60,57,11,3, 36,28,55,46,8,1,1,42,32,0,0,2,0,20,0,0, 2,118,2,88,0,37,0,43,0,0,33,17,51,39,35,17, 39,17,35,21,7,39,15,1,6,7,38,47,1,6,7,6, 21,20,31,1,54,55,54,55,23,5,23,22,23,22,21,53, 3,17,38,39,38,49,2,38,80,40,100,60,60,40,110,35, 14,11,14,6,42,22,39,13,4,47,25,57,39,27,5,80, 254,232,20,159,142,89,60,82,144,24,2,28,60,254,32,70, 1,154,100,20,120,84,21,13,5,50,11,2,3,34,11,12, 53,12,2,2,50,36,49,90,160,20,69,114,72,25,130,1, 59,254,197,106,56,8,0,1,0,20,255,254,1,124,2,88, 0,52,0,0,55,39,22,51,50,55,54,55,39,38,39,23, 6,7,6,35,34,39,38,53,52,55,51,22,23,22,21,20, 7,54,55,54,53,39,38,39,38,39,38,53,23,22,31,1, 22,21,20,7,6,7,6,35,38,50,30,25,34,51,28,12, 1,4,7,20,2,3,27,19,21,46,5,1,50,25,55,38, 27,15,99,9,2,4,12,76,90,14,94,20,8,97,135,100, 71,34,45,31,35,54,20,60,19,34,15,17,18,18,17,14, 21,14,12,49,6,6,63,8,7,48,36,41,30,29,21,105, 13,21,24,40,59,69,12,85,91,20,52,72,96,77,63,105, 64,31,13,9,1,0,0,1,0,20,0,0,1,184,2,88, 0,48,0,0,19,51,22,31,1,7,6,7,6,35,34,39, 38,53,52,55,54,55,54,49,23,17,38,35,34,15,1,6, 35,34,39,38,53,23,22,23,22,51,50,63,1,54,51,50, 23,17,48,7,6,207,17,34,13,5,3,1,2,18,46,46, 23,12,5,24,166,60,60,58,61,37,46,59,14,10,125,9, 1,20,13,42,10,14,19,35,60,25,23,56,43,59,91,1, 184,5,29,18,21,3,4,41,39,21,26,17,18,90,54,16, 70,253,238,64,25,33,6,208,15,17,20,117,17,4,10,22, 8,42,1,194,15,30,0,1,0,20,0,0,2,68,3,32, 0,72,0,0,1,52,39,38,39,38,39,38,53,20,31,1, 22,23,22,21,20,7,6,7,53,39,48,7,6,7,6,21, 23,22,31,1,54,55,54,53,52,39,38,39,38,35,34,7, 54,55,54,49,17,38,35,34,15,1,6,35,34,39,38,47, 1,22,23,50,55,54,51,50,23,19,50,55,54,2,68,149, 33,98,70,8,2,73,128,91,7,1,37,12,11,80,66,161, 23,5,3,12,44,24,44,18,6,10,5,9,17,19,5,4, 29,128,16,43,56,36,63,9,35,19,45,19,10,5,20,5, 130,16,48,60,45,66,70,1,45,39,35,1,234,154,65,14, 27,19,21,5,5,57,41,63,52,81,8,8,48,40,14,3, 145,70,18,54,88,18,16,27,45,12,3,1,40,13,12,16, 13,8,7,12,1,57,30,3,254,62,42,27,3,10,57,30, 51,20,235,5,27,34,61,1,109,43,37,0,0,1,0,20, 255,255,2,54,2,91,0,67,0,0,1,54,53,54,39,38, 39,38,35,34,7,6,7,6,21,20,23,22,51,50,55,54, 53,52,39,38,35,54,51,50,23,22,21,20,7,38,39,7, 6,7,20,23,22,51,50,55,54,55,6,7,6,35,34,39, 38,47,1,18,23,22,51,50,55,54,53,52,39,54,2,49, 4,1,4,17,81,52,55,22,19,16,14,66,30,19,23,14, 14,39,19,9,11,13,32,55,49,48,27,39,32,21,33,5, 25,16,20,26,28,8,7,4,75,20,23,84,90,98,56,20, 75,160,50,55,87,63,52,32,5,1,129,18,19,17,16,76, 43,28,4,4,8,34,89,29,24,16,6,18,40,31,21,10, 19,43,42,55,39,40,28,1,4,18,37,32,26,16,28,7, 9,140,35,10,105,113,187,20,254,145,101,32,72,60,69,51, 38,10,0,1,0,20,0,0,2,168,3,32,0,95,0,0, 1,6,7,39,38,39,38,53,52,55,54,51,50,23,54,53, 39,38,39,38,35,7,6,7,23,22,31,1,22,21,20,7, 6,35,39,38,39,38,53,52,55,54,51,50,31,1,22,21, 20,7,54,55,54,53,52,47,2,38,53,20,23,22,23,22, 23,22,21,20,7,6,35,6,7,22,21,20,7,6,35,34, 39,38,39,38,39,23,22,23,22,51,50,55,54,55,54,1, 234,36,32,18,31,11,2,30,13,15,32,40,27,3,16,66, 35,32,23,14,8,11,8,6,10,4,39,13,14,21,34,14, 4,81,25,30,83,65,23,38,4,23,21,15,92,59,77,72, 4,13,76,113,48,106,56,35,33,20,6,31,62,61,79,24, 24,133,87,42,29,20,68,122,74,66,19,17,76,7,1,1, 4,43,1,3,13,42,9,7,36,16,7,29,39,39,29,60, 34,18,3,5,11,3,4,9,21,13,12,40,18,6,3,12, 35,10,9,101,29,9,55,23,46,55,19,19,7,40,30,28, 89,55,31,38,40,57,8,7,18,21,30,29,65,132,58,41, 26,62,13,38,50,77,63,61,6,36,213,104,140,20,225,113, 68,6,29,131,10,0,0,2,255,236,0,0,2,158,2,88, 0,5,0,38,0,0,1,7,48,23,22,23,19,50,23,22, 23,20,7,6,7,39,38,47,1,54,55,38,47,1,17,52, 39,38,39,38,47,1,37,53,33,39,33,23,33,1,94,250, 62,129,59,60,53,59,70,1,3,13,42,20,33,11,3,1, 71,16,100,14,94,143,132,11,10,20,1,94,254,182,40,2, 138,40,254,252,1,189,145,26,61,83,1,114,46,55,71,14, 14,62,3,2,11,32,20,46,24,52,16,2,254,72,23,78, 117,54,4,4,20,200,40,60,60,0,0,1,0,20,0,0, 1,254,2,88,0,46,0,0,19,54,55,23,22,21,20,7, 6,15,1,23,22,23,22,23,17,51,39,35,17,38,47,1, 55,54,53,52,39,38,35,48,23,6,7,38,39,7,6,7, 6,21,20,23,22,51,50,140,41,9,44,56,11,20,49,190, 20,134,148,107,1,80,40,100,77,149,24,140,59,57,47,65, 2,1,11,16,39,22,36,6,1,40,11,12,26,1,174,27, 83,2,9,32,14,16,29,28,110,20,54,114,83,29,2,28, 60,254,42,102,59,9,80,34,57,58,39,32,50,35,15,39, 1,3,11,32,5,5,53,15,4,0,0,1,0,20,0,0, 1,254,2,88,0,41,0,0,1,53,51,23,35,17,39,17, 38,35,7,6,7,6,7,54,55,23,22,23,7,6,7,39, 54,55,47,1,7,6,7,6,35,39,38,53,52,55,54,51, 50,23,1,114,100,40,80,60,82,79,25,58,39,12,5,43, 57,26,46,1,4,20,109,40,111,1,3,10,24,27,28,23, 20,16,11,82,45,63,72,70,1,189,155,60,253,228,64,1, 80,140,3,17,82,25,23,48,1,4,13,46,27,71,90,40, 98,29,7,4,3,8,15,13,3,6,14,151,64,35,120,0, 0,2,255,236,0,0,1,234,2,88,0,15,0,35,0,0, 1,33,6,21,20,23,22,23,55,23,7,23,22,23,22,23, 19,35,17,52,39,38,47,1,55,38,39,38,53,52,55,54, 55,35,39,33,1,94,254,242,5,96,56,3,50,40,220,29, 113,70,24,14,140,80,108,140,142,20,190,111,38,37,8,11, 27,30,40,1,214,2,28,7,7,28,42,24,2,30,30,130, 10,47,68,23,22,1,154,253,228,30,83,107,60,20,110,17, 18,17,23,10,12,15,18,60,0,2,0,18,0,0,1,250, 2,89,0,55,0,65,0,0,1,21,54,55,54,55,22,21, 20,7,6,7,6,35,34,39,38,39,38,53,23,22,23,22, 23,50,55,54,55,54,53,52,39,6,7,39,53,38,39,38, 39,22,51,52,55,54,51,23,22,23,22,21,7,6,7,6, 53,50,55,39,38,39,15,2,6,1,22,29,53,76,32,37, 13,31,85,47,51,50,45,119,34,12,20,12,110,53,63,32, 30,77,30,14,1,65,105,70,32,36,20,2,62,28,53,20, 22,22,20,9,15,3,16,75,7,50,1,3,6,11,11,9, 8,3,1,182,138,2,29,43,66,83,81,48,45,105,50,28, 28,73,227,78,94,20,248,101,49,1,14,34,94,44,51,11, 11,71,39,70,138,12,47,26,15,40,63,28,11,3,7,17, 29,23,22,47,13,1,60,25,15,14,1,3,9,18,11,0, 0,2,255,236,0,0,1,255,2,88,0,11,0,32,0,0, 19,17,54,55,54,53,39,38,39,38,39,38,39,22,31,1, 22,23,22,21,6,7,6,7,34,7,39,17,35,39,33,23, 33,110,101,88,91,2,5,61,126,55,18,13,53,93,110,47, 31,5,1,142,102,108,5,4,37,30,40,1,234,41,254,111, 1,224,254,107,30,70,72,65,21,8,15,31,54,18,61,73, 22,23,13,26,24,23,128,98,71,18,1,51,1,233,60,60, 0,2,255,236,255,176,2,39,2,88,0,8,0,47,0,0, 19,21,54,55,54,49,38,39,38,23,6,7,6,21,39,17, 35,39,33,23,33,21,22,31,1,22,31,1,6,7,6,7, 22,31,1,7,38,39,38,49,39,22,51,50,55,54,53,52, 110,73,82,3,39,60,37,197,75,156,11,37,30,40,2,18, 41,254,71,22,190,14,44,13,3,2,80,44,62,104,108,70, 40,110,214,46,30,47,45,119,53,27,1,196,154,6,64,2, 6,33,20,79,69,53,4,1,51,1,10,60,60,20,52,57, 5,21,58,33,80,43,24,7,30,102,68,20,121,74,15,60, 10,55,28,36,25,0,0,1,255,236,255,216,2,138,2,88, 0,63,0,0,1,35,21,22,51,55,54,55,54,55,22,23, 7,6,7,6,35,34,39,38,17,23,18,23,22,51,55,54, 55,54,53,6,35,34,47,1,53,35,39,33,23,33,48,23, 22,51,55,54,55,23,6,21,20,23,7,38,39,38,53,54, 55,48,39,38,1,64,90,1,7,17,41,36,11,7,45,1, 3,15,72,38,43,78,58,89,20,13,94,35,40,26,61,34, 27,97,34,21,23,15,140,40,2,118,40,254,222,22,45,51, 30,6,6,50,64,44,20,42,14,13,1,18,43,90,2,28, 220,6,5,20,50,16,15,95,92,49,109,52,29,87,134,1, 29,20,254,246,92,34,3,18,80,62,79,81,30,21,240,60, 60,24,43,3,2,2,100,94,124,97,85,20,80,60,57,67, 80,96,19,47,0,2,255,236,0,0,2,98,2,88,0,18, 0,24,0,0,33,17,51,39,35,17,39,17,33,23,33,21, 5,23,22,23,22,23,53,3,17,38,39,38,49,2,18,80, 40,100,60,254,82,40,1,74,254,162,20,154,150,84,2,60, 51,169,30,2,28,60,254,32,70,1,154,60,40,200,20,62, 125,71,22,130,1,59,254,197,85,73,12,0,0,2,0,24, 0,0,2,120,2,88,0,31,0,99,0,0,1,6,7,39, 38,39,55,54,55,50,23,22,23,54,53,39,38,35,7,6, 7,6,7,22,23,22,51,50,53,52,39,38,55,22,21,20, 7,6,35,34,39,38,39,17,38,39,7,6,7,6,35,34, 39,38,53,23,22,23,22,51,50,63,1,54,51,50,23,17, 48,7,6,7,51,22,31,1,7,6,7,6,35,34,39,38, 53,52,55,54,55,54,49,23,21,54,55,51,22,31,1,20, 2,52,26,20,13,22,1,3,9,23,10,13,11,13,17,2, 6,15,19,43,37,17,8,22,54,29,20,23,10,3,25,36, 43,14,16,15,16,55,37,58,58,30,25,56,32,16,125,9, 1,20,13,42,10,14,19,35,57,23,22,52,43,54,83,23, 17,32,13,4,4,1,1,18,46,46,23,12,5,24,159,57, 60,47,65,25,44,13,3,1,84,28,3,2,8,35,23,29, 1,7,7,12,46,27,19,15,4,17,57,25,25,65,46,26, 34,22,35,12,34,53,48,55,19,7,6,21,75,254,232,63, 1,4,7,34,19,208,15,17,20,117,17,4,10,23,7,42, 1,194,16,29,45,5,29,19,21,3,3,41,39,21,26,17, 18,90,54,16,70,90,85,10,7,44,27,46,0,1,255,236, 0,0,2,19,3,22,0,55,0,0,1,51,23,33,17,54, 55,54,55,39,38,53,6,35,39,38,39,38,53,52,55,54, 55,51,22,23,20,23,22,21,20,7,6,7,6,7,39,17, 35,39,33,52,39,38,35,34,39,38,53,20,23,22,23,50, 23,22,1,194,40,41,254,91,82,91,101,6,1,1,31,31, 21,37,13,4,9,20,49,29,66,20,1,5,131,97,104,16, 15,37,30,40,1,184,83,24,121,132,44,36,84,14,132,148, 52,40,2,88,60,254,47,23,82,93,75,25,2,1,30,3, 12,43,12,13,18,13,31,7,8,78,3,3,23,24,127,113, 85,28,4,2,51,1,233,60,57,11,3,36,28,55,46,8, 1,1,42,32,0,2,255,236,255,255,1,245,3,37,0,20, 0,66,0,0,19,35,22,21,20,7,6,7,6,15,1,22, 51,55,54,55,54,53,52,39,38,55,22,21,22,7,6,7, 6,7,34,39,38,47,1,55,54,63,1,54,53,52,39,35, 39,51,39,38,39,53,54,51,50,31,1,38,39,15,1,6, 7,20,23,22,23,51,23,250,40,27,33,14,43,38,5,1, 42,45,27,62,40,31,34,25,9,120,1,12,29,78,50,54, 16,17,40,35,47,3,9,50,47,39,21,130,60,163,5,57, 7,9,66,22,29,40,29,22,23,15,13,1,5,17,61,250, 31,2,28,105,70,76,42,16,29,25,29,18,42,3,18,83, 65,73,77,60,43,30,91,148,44,44,110,62,41,1,4,11, 36,51,49,68,43,39,40,68,53,79,60,6,75,56,25,43, 5,60,10,1,3,8,11,19,11,13,45,41,60,0,0,1, 255,236,255,250,2,28,2,88,0,36,0,0,1,23,33,21, 54,55,54,55,22,23,7,6,7,6,35,34,39,38,17,23, 22,23,22,51,55,54,55,54,53,6,7,6,7,39,53,35, 39,1,244,40,254,252,92,35,22,11,40,1,4,16,82,54, 61,101,70,93,20,12,111,50,59,34,78,44,32,40,81,9, 30,70,190,40,2,88,60,240,40,34,21,25,85,82,48,111, 61,39,101,135,1,14,20,254,99,44,3,17,81,60,76,44, 31,4,11,70,240,60,0,1,255,236,0,0,2,19,2,88, 0,38,0,0,1,23,33,17,54,55,54,55,39,38,53,6, 35,39,38,39,38,53,52,55,54,63,1,22,23,20,23,22, 21,20,7,6,7,6,7,39,17,35,39,1,234,41,254,91, 82,91,101,6,1,1,31,31,20,37,13,4,8,20,49,30, 70,20,1,5,124,96,109,21,18,37,30,40,2,88,60,254, 47,23,82,93,75,25,2,1,30,3,12,43,13,13,17,13, 31,7,1,8,79,3,3,23,23,122,111,86,32,6,3,51, 1,233,60,0,0,1,0,20,0,0,1,234,2,88,0,39, 0,0,19,38,39,38,53,52,55,54,51,22,23,22,49,53, 51,23,35,17,39,17,38,35,34,7,6,21,20,23,54,55, 23,22,23,22,21,20,7,6,35,34,120,68,23,9,53,40, 57,57,113,8,102,40,80,60,103,70,66,24,8,11,30,45, 20,34,14,5,12,24,63,9,1,4,11,77,29,33,90,56, 44,1,102,7,110,60,253,228,64,1,115,94,76,27,31,36, 19,78,3,2,12,43,14,15,22,18,36,0,0,2,255,236, 255,254,2,48,2,88,0,3,0,44,0,0,1,39,33,23, 1,54,53,52,39,38,35,34,7,6,21,20,23,22,51,55, 54,55,54,53,22,21,7,6,7,6,35,34,39,38,39,38, 47,1,18,23,22,51,50,55,54,2,48,40,253,228,40,1, 194,15,85,19,23,48,32,18,46,13,15,22,45,8,1,26, 3,15,65,33,38,31,31,115,68,9,8,20,41,113,56,63, 80,69,26,2,28,60,60,254,158,72,58,144,33,8,30,16, 18,63,21,7,3,15,54,9,10,63,65,47,98,46,23,15, 60,242,33,35,20,254,203,128,64,99,38,0,0,1,0,20, 0,0,1,254,2,88,0,43,0,0,19,50,23,22,21,20, 15,1,48,23,22,23,17,51,23,35,17,39,38,39,38,39, 38,47,1,55,54,55,39,38,35,22,21,7,6,15,1,38, 39,38,53,52,55,54,150,93,42,20,45,140,65,133,52,100, 40,80,5,19,60,147,153,3,3,20,190,45,6,1,12,98, 10,3,11,38,24,43,16,5,80,23,2,88,68,32,36,58, 26,80,27,62,81,1,214,60,253,228,13,28,50,124,63,1, 1,20,110,26,38,19,47,27,23,26,39,10,3,2,37,13, 16,87,25,8,0,1,255,236,0,0,1,235,2,88,0,25, 0,0,19,17,33,39,33,23,51,17,23,48,55,54,55,6, 21,20,31,1,55,38,53,54,55,39,6,7,110,1,125,41, 254,42,40,30,60,70,93,50,19,46,20,20,44,1,63,50, 86,115,1,18,1,10,60,60,254,222,71,85,106,26,99,75, 105,82,35,20,85,94,117,94,100,24,147,0,0,2,0,20, 0,0,1,254,2,88,0,5,0,36,0,0,1,7,48,23, 22,23,3,55,53,51,23,35,17,52,39,38,47,1,55,48, 39,38,39,55,54,55,54,51,23,22,31,1,6,7,22,23, 22,1,114,250,69,133,48,115,115,100,40,80,93,134,163,20, 211,50,90,1,4,4,8,20,33,23,38,12,3,1,48,17, 35,12,1,189,145,30,65,75,1,48,66,100,60,253,228,28, 74,107,71,20,122,15,34,53,22,12,12,29,3,12,34,19, 37,27,23,5,2,0,0,1,255,236,0,0,1,214,2,88, 0,29,0,0,1,17,38,47,1,6,7,6,21,20,23,22, 51,50,55,54,53,52,39,22,23,22,23,22,23,17,51,39, 33,23,1,74,85,125,31,61,21,7,48,16,17,48,16,4, 29,80,85,8,82,8,7,80,40,254,62,40,2,28,254,153, 205,20,1,5,58,21,23,46,16,5,31,10,10,29,36,19, 139,14,149,15,13,2,28,60,60,0,0,2,0,19,0,0, 2,69,2,88,0,33,0,49,0,0,63,1,54,53,52,39, 38,35,34,15,1,6,7,6,35,39,38,53,52,55,54,51, 50,31,1,53,51,23,35,17,39,17,39,5,55,38,39,38, 35,34,7,55,22,23,22,21,7,6,7,48,120,27,11,48, 23,12,4,1,3,4,8,10,10,10,5,152,23,25,65,135, 20,101,40,80,61,20,254,242,220,26,54,39,36,97,46,10, 31,38,31,3,5,11,240,24,10,13,30,31,14,2,13,7, 5,6,2,3,6,225,30,5,139,21,160,60,253,228,60,1, 84,20,210,240,42,29,20,148,2,2,31,27,26,17,11,10, 0,1,255,236,0,0,2,158,2,88,0,48,0,0,1,17, 38,37,38,49,39,55,38,39,38,53,52,55,54,55,35,39, 33,23,33,6,21,20,31,1,7,48,23,22,23,17,51,50, 23,22,23,20,7,6,7,39,38,47,1,54,55,38,39,1, 154,87,254,225,16,20,190,111,38,37,8,11,27,30,40,2, 138,40,253,178,5,55,160,190,103,91,56,60,53,59,70,1, 3,13,42,20,33,11,3,1,71,16,100,1,184,254,72,94, 176,10,20,110,17,18,17,23,10,12,15,18,60,60,8,7, 21,25,69,110,63,58,49,1,114,46,55,71,14,14,62,3, 2,11,32,20,46,24,52,16,0,2,255,236,0,0,1,234, 2,88,0,5,0,18,0,0,1,7,48,23,22,23,17,33, 39,33,23,35,17,52,39,38,47,1,37,1,94,250,63,129, 58,254,182,40,1,214,40,80,93,133,164,20,1,94,1,189, 145,26,61,83,1,154,60,60,253,228,26,74,107,73,20,200, 0,2,255,236,0,1,2,98,2,88,0,3,0,52,0,0, 19,39,33,23,3,6,7,34,39,38,39,38,39,23,18,23, 22,51,50,55,54,53,52,39,6,7,39,38,39,38,53,52, 55,54,55,23,22,23,22,21,20,7,6,7,55,54,55,54, 55,22,31,1,6,20,40,2,78,40,131,78,95,24,24,113, 76,44,25,20,78,136,40,41,82,54,46,17,59,88,30,50, 31,22,30,27,31,21,37,17,7,18,14,23,29,46,51,18, 21,41,9,1,4,2,28,60,60,254,86,112,1,8,37,191, 111,152,20,254,227,76,22,75,63,82,48,45,122,8,1,9, 43,32,37,42,34,29,1,3,12,42,17,17,28,22,17,10, 1,8,77,26,38,32,104,60,112,0,0,2,255,237,0,0, 1,234,2,88,0,36,0,54,0,0,1,17,38,47,1,6, 7,39,38,39,53,54,63,1,22,23,48,55,54,53,52,39, 38,39,38,39,38,39,55,54,55,54,55,35,39,33,23,5, 22,21,20,15,1,48,23,22,23,17,33,7,22,23,22,23, 22,1,154,76,134,30,43,34,19,39,7,7,39,22,33,41, 20,13,1,6,77,80,17,15,2,1,4,24,8,5,25,41, 1,213,40,254,246,6,48,12,74,59,47,254,240,3,2,48, 65,19,9,2,28,253,228,123,64,13,33,1,3,13,53,31, 53,12,3,2,32,27,22,16,4,4,25,22,24,11,10,12, 17,12,21,7,6,60,60,156,12,13,32,62,15,43,38,39, 1,154,13,19,34,45,23,11,0,2,255,236,0,0,1,234, 2,88,0,11,0,33,0,0,1,33,6,21,20,31,1,7, 48,23,22,23,19,17,52,39,38,39,38,47,1,55,38,39, 38,53,52,55,54,55,35,39,33,23,1,94,254,242,5,55, 160,190,70,138,42,60,84,143,154,4,5,20,190,111,38,37, 8,11,27,30,40,1,214,40,2,28,8,7,21,25,69,110, 29,66,75,1,154,253,228,22,71,122,61,2,2,20,110,17, 18,17,23,10,12,15,18,60,60,0,0,3,255,236,0,0, 1,234,2,88,0,13,0,19,0,32,0,0,55,52,63,1, 22,23,22,21,20,15,1,38,39,38,19,7,48,23,22,23, 17,33,39,33,23,35,17,52,39,38,47,1,37,140,35,21, 33,9,2,35,21,34,8,2,210,250,65,127,58,254,182,40, 1,214,40,80,95,135,160,20,1,94,50,39,9,2,4,31, 7,8,38,10,1,3,32,7,1,146,145,28,63,79,1,154, 60,60,253,228,29,76,107,68,20,200,0,1,255,236,0,0, 1,234,2,88,0,51,0,0,55,54,55,23,22,31,1,6, 7,39,38,39,48,39,38,53,55,54,55,54,51,50,23,54, 51,50,31,2,22,23,53,33,39,33,23,35,17,39,17,38, 35,34,7,38,35,34,7,6,21,20,23,73,24,38,17,30, 11,2,1,47,32,20,25,21,49,3,11,41,20,21,60,44, 39,41,12,11,15,16,9,7,254,182,40,1,214,40,80,60, 36,32,41,41,51,49,37,17,7,21,237,71,2,4,12,39, 24,42,3,2,3,9,23,64,83,27,53,27,13,100,100,9, 16,29,20,26,150,60,60,253,228,64,1,36,54,90,90,46, 21,22,40,29,0,1,0,20,0,0,2,18,2,88,0,51, 0,0,19,6,7,39,38,53,52,55,54,55,38,39,7,6, 7,39,48,55,54,51,23,22,23,22,23,54,55,23,22,23, 22,23,53,51,23,35,17,39,17,38,39,7,6,7,22,23, 7,6,35,34,39,38,190,39,39,15,23,5,14,47,18,34, 15,20,16,17,17,24,25,20,29,27,14,14,48,54,20,45, 25,5,3,100,40,80,60,54,39,13,25,19,61,5,2,8, 26,27,28,13,1,114,74,1,3,11,34,15,15,45,32,89, 1,4,10,28,39,23,25,3,11,45,24,32,114,1,3,18, 85,17,18,156,60,253,228,64,1,90,129,1,3,14,73,42, 57,25,31,36,16,0,0,3,255,236,0,0,1,234,2,88, 0,6,0,12,0,32,0,0,1,39,7,48,23,22,23,17, 53,33,6,21,22,37,17,52,39,38,47,1,55,38,39,38, 53,52,55,54,55,35,39,33,23,1,94,91,159,64,128,58, 254,242,5,1,1,78,75,140,175,20,190,111,38,37,8,11, 27,30,40,1,214,40,1,110,27,93,27,62,81,1,15,139, 6,6,48,60,253,228,22,65,122,71,20,110,17,18,17,23, 10,12,15,18,60,60,0,2,255,236,0,0,1,234,2,88, 0,32,0,48,0,0,17,22,51,50,55,54,49,38,39,38, 53,38,55,54,55,35,39,33,23,35,17,39,17,38,39,15, 1,6,7,6,7,39,38,55,54,51,50,23,22,31,1,53, 33,6,21,23,22,23,22,17,23,71,105,14,148,45,31,1, 38,3,4,30,40,1,214,40,80,60,14,25,16,22,12,59, 74,47,22,32,223,34,17,6,6,8,23,6,254,241,5,3, 15,99,48,1,44,12,103,14,21,23,17,20,22,27,3,2, 60,60,253,228,60,1,50,44,1,4,14,9,60,75,2,3, 10,170,31,4,6,41,10,140,6,7,11,23,38,18,0,2, 255,236,0,0,2,28,2,88,0,3,0,46,0,0,1,33, 23,33,1,22,23,22,23,7,38,39,38,49,39,22,51,55, 54,55,54,53,52,39,38,39,6,15,1,38,39,38,53,52, 55,54,51,22,23,22,23,22,21,7,6,7,6,1,244,253, 248,40,2,8,254,120,23,146,100,43,40,112,227,41,40,39, 55,68,127,71,36,46,44,83,4,68,30,57,31,14,95,26, 31,123,91,50,17,9,4,24,166,71,2,88,60,254,212,4, 104,71,41,20,124,99,17,60,12,4,14,44,22,23,25,21, 20,15,76,15,3,2,33,15,17,51,13,4,1,45,26,33, 17,17,21,67,35,15,0,1,0,20,255,156,0,120,0,1, 0,13,0,0,23,52,63,1,22,23,22,21,20,15,1,38, 39,38,20,35,21,33,9,2,35,21,34,8,2,50,39,9, 2,4,31,7,8,38,10,1,3,32,7,0,0,1,255,236, 0,0,0,200,2,88,0,9,0,0,19,23,53,51,23,35, 17,39,17,39,20,40,100,40,80,60,80,2,88,60,60,60, 253,228,60,1,164,120,0,1,255,236,0,0,2,168,3,33, 0,26,0,0,19,39,51,39,54,51,50,23,22,23,22,23, 35,39,38,35,34,7,6,7,23,51,23,35,17,39,17,20, 40,80,20,94,148,97,153,116,14,10,8,20,241,83,50,47, 39,48,52,20,40,40,80,60,2,28,60,30,170,84,62,7, 4,3,76,24,20,24,66,30,60,253,228,60,1,224,0,1, 254,12,0,0,0,200,3,33,0,38,0,0,19,35,17,39, 17,35,39,51,39,38,39,38,35,34,7,6,7,6,21,20, 31,1,22,23,35,52,47,1,38,53,52,55,54,51,50,23, 22,21,51,200,80,60,40,40,80,1,12,88,81,115,129,54, 12,5,3,94,148,137,1,60,96,163,121,98,77,100,176,96, 73,40,2,28,253,228,60,1,224,60,29,64,36,33,34,8, 9,6,5,25,1,2,9,63,33,3,1,7,56,48,30,23, 68,52,81,0,0,2,0,20,255,106,1,24,0,0,0,11, 0,33,0,0,23,39,6,21,20,23,22,23,55,54,55,54, 23,6,7,39,38,47,1,54,63,1,22,23,55,51,7,22, 23,22,23,38,39,38,148,34,66,1,6,19,18,32,19,3, 28,46,48,20,31,7,1,6,57,39,16,17,14,30,18,60, 32,4,2,30,50,17,60,1,3,28,4,4,22,1,4,13, 33,6,3,70,6,1,8,30,19,39,10,3,1,2,37,46, 23,66,9,6,38,31,11,0,0,1,0,28,255,76,1,13, 0,0,0,31,0,0,23,38,39,7,6,7,6,21,20,23, 51,54,55,22,31,1,38,47,1,6,7,39,38,39,53,54, 63,1,22,23,55,51,159,18,37,24,20,4,2,25,18,22, 25,59,60,6,26,73,21,33,28,19,33,7,7,42,27,17, 19,8,30,55,13,1,3,5,18,6,7,28,6,3,21,4, 78,8,29,25,6,26,1,2,11,40,25,43,9,1,1,7, 24,0,0,1,0,35,255,106,0,173,0,0,0,5,0,0, 23,55,23,7,23,7,35,115,23,82,82,23,75,75,23,52, 52,23,0,2,255,206,255,14,0,213,0,0,0,5,0,11, 0,0,7,55,23,7,23,7,63,1,23,7,23,7,50,116, 22,82,82,22,9,115,23,82,82,23,167,75,23,52,52,23, 167,75,23,52,52,23,0,1,255,236,0,3,1,104,2,88, 0,30,0,0,3,33,23,35,7,6,21,20,23,22,23,54, 51,50,23,22,21,7,6,35,34,39,38,53,38,55,54,55, 54,49,35,20,1,84,40,170,50,80,10,23,77,27,35,28, 14,5,3,10,37,17,22,189,1,4,21,118,17,140,2,88, 60,83,142,104,35,30,70,36,68,34,12,13,19,26,6,54, 146,21,23,123,144,19,0,1,255,236,0,3,1,104,3,22, 0,48,0,0,19,52,39,38,35,34,39,38,53,20,23,22, 23,50,31,1,22,21,35,23,51,48,7,6,21,6,23,22, 23,55,54,55,39,38,39,35,6,7,6,7,38,53,52,55, 54,63,1,51,39,190,70,14,59,50,12,5,55,10,52,45, 12,5,1,180,40,140,44,115,1,190,17,14,24,33,1,3, 11,26,15,23,19,6,6,110,7,22,99,2,170,40,2,88, 114,17,3,26,11,19,102,14,2,1,29,26,8,8,60,55, 155,119,147,54,5,1,2,7,33,23,33,5,6,36,11,14, 51,119,30,34,108,154,4,60,0,2,255,236,0,0,2,248, 2,88,0,9,0,40,0,0,1,23,53,51,23,35,17,39, 17,39,41,1,23,35,7,6,21,20,23,22,23,54,51,50, 23,22,21,7,6,35,34,39,38,53,38,55,54,55,54,49, 35,2,68,40,100,40,80,60,80,253,208,1,84,40,170,50, 80,10,23,77,27,35,28,14,5,3,10,37,17,22,189,1, 4,21,118,17,140,2,88,60,60,60,253,228,60,1,150,134, 60,83,142,104,35,30,70,36,68,34,12,13,19,26,6,54, 146,21,23,123,144,19,0,2,255,236,0,0,2,248,3,22, 0,25,0,56,0,0,1,21,39,35,23,17,23,17,51,39, 35,52,47,1,38,49,38,39,20,23,22,23,50,31,1,22, 5,33,23,35,7,6,21,20,23,22,23,54,51,50,23,22, 21,7,6,35,34,39,38,53,38,55,54,55,54,49,35,2, 108,40,40,80,60,80,40,70,70,35,62,41,2,55,10,52, 45,12,5,1,253,128,1,84,40,170,50,80,10,23,77,27, 35,28,14,5,3,10,37,17,22,189,1,4,21,118,17,140, 2,88,60,60,120,254,92,60,2,28,60,114,17,3,1,10, 45,102,14,2,1,29,26,8,8,60,83,142,104,35,30,70, 36,68,34,12,13,19,26,6,54,146,21,23,123,144,19,0, 0,1,0,120,255,71,1,34,255,221,0,9,0,0,23,22, 23,22,23,7,48,39,38,39,120,63,62,43,2,20,26,49, 55,35,6,78,54,2,10,39,64,17,0,1,255,136,0,0, 0,200,3,22,0,26,0,0,19,21,39,35,23,17,23,17, 51,39,35,52,39,38,35,34,39,38,53,20,23,22,23,50, 31,1,22,60,40,40,80,60,80,40,70,70,14,59,50,12, 5,55,10,52,45,12,5,1,2,88,60,60,120,254,92,60, 2,28,60,114,17,3,26,11,19,102,14,2,1,29,26,8, 0,2,255,236,255,106,2,48,2,88,0,13,0,54,0,0, 23,52,63,1,22,23,22,21,20,15,1,38,39,38,1,23, 33,21,54,55,54,55,22,21,20,7,6,7,6,35,34,39, 38,39,38,53,23,22,23,22,51,50,55,54,55,54,53,52, 39,6,7,39,53,35,39,200,35,21,33,9,2,35,21,34, 8,2,1,64,40,254,212,31,57,77,25,37,13,31,85,47, 51,50,45,119,34,12,20,12,110,53,63,29,27,75,34,18, 1,65,105,70,180,40,100,39,9,2,4,31,7,8,38,10, 1,3,32,7,2,195,60,240,1,34,45,60,83,81,48,45, 105,50,28,28,73,227,78,94,20,248,101,49,10,30,88,49, 59,11,11,71,39,70,240,60,0,2,255,236,255,106,2,19, 2,88,0,13,0,52,0,0,23,52,63,1,22,23,22,21, 20,15,1,38,39,38,55,54,55,54,55,39,38,53,6,7, 39,38,39,38,53,52,55,54,63,1,22,23,20,23,22,21, 20,7,6,7,6,7,39,17,35,39,33,23,33,100,35,21, 33,9,2,35,21,34,8,2,10,82,91,101,6,1,1,31, 32,20,37,13,4,9,18,46,30,67,20,1,5,130,96,104, 16,14,37,30,40,1,254,41,254,91,100,39,9,2,4,31, 7,8,38,10,1,3,32,7,182,23,82,93,75,25,2,1, 30,1,3,12,42,13,13,19,15,29,7,1,8,79,3,3, 23,24,127,114,84,28,4,2,51,1,233,60,60,0,0,3, 255,236,0,0,1,234,2,88,0,13,0,25,0,45,0,0, 55,52,63,1,22,23,22,21,20,15,1,38,39,38,19,33, 6,21,20,31,1,7,48,23,22,23,19,17,52,39,38,47, 1,55,38,39,38,53,52,55,54,55,35,39,33,23,140,35, 21,33,9,2,35,21,34,8,2,210,254,242,5,55,160,190, 68,133,49,60,98,139,153,20,190,111,38,37,8,11,27,30, 40,1,214,40,50,39,9,2,4,31,7,8,38,10,1,3, 32,7,1,241,8,7,21,25,69,110,29,65,76,1,154,253, 228,28,78,109,65,20,110,17,18,17,23,10,12,15,18,60, 60,0,0,3,0,20,0,0,2,118,2,88,0,5,0,43, 0,49,0,0,63,1,23,7,23,7,33,17,51,39,35,17, 39,17,35,21,7,39,15,1,6,7,38,47,1,6,7,6, 21,20,31,1,54,55,54,55,23,5,23,22,23,22,21,53, 3,17,38,39,38,49,65,115,23,82,82,23,1,114,80,40, 100,60,60,40,110,35,14,11,14,6,42,22,39,13,4,47, 25,57,39,27,5,80,254,232,20,159,142,89,60,82,144,24, 75,75,23,52,52,23,2,28,60,254,32,70,1,154,100,20, 120,84,21,13,5,50,11,2,3,34,11,12,53,12,2,2, 50,36,49,90,160,20,69,114,72,25,130,1,59,254,197,106, 56,8,0,2,0,20,255,110,1,124,2,88,0,37,0,90, 0,0,23,39,22,51,55,54,55,39,38,39,15,2,38,53, 52,51,23,22,21,20,7,54,55,52,39,38,39,23,22,23, 22,23,20,7,6,35,34,47,1,22,51,50,55,54,55,39, 38,39,23,6,7,6,35,34,39,38,53,52,55,51,22,23, 22,21,20,7,54,55,54,53,39,38,39,38,39,38,53,23, 22,31,1,22,21,20,7,6,7,6,35,38,128,8,6,7, 14,9,1,3,2,3,1,7,11,10,14,15,19,4,25,2, 30,38,3,5,2,38,40,3,31,10,12,13,92,30,25,34, 51,28,12,1,4,7,20,2,3,27,19,21,46,5,1,50, 25,55,38,27,15,99,9,2,4,12,76,90,14,94,20,8, 97,135,100,71,34,45,31,35,54,140,14,4,2,5,8,9, 2,3,7,6,2,2,13,17,4,10,18,7,7,5,33,13, 22,34,23,5,13,26,28,20,37,12,4,165,60,19,34,15, 17,18,18,17,14,21,14,12,49,6,6,63,8,7,48,36, 41,30,29,21,105,13,21,24,40,59,69,12,85,91,20,52, 72,96,77,63,105,64,31,13,9,1,0,1,0,100,255,110, 0,188,0,0,0,37,0,0,23,39,22,51,55,54,55,39, 38,39,15,2,38,53,52,51,23,22,21,20,7,54,55,52, 39,38,39,23,22,23,22,23,20,7,6,35,34,108,8,6, 7,14,9,1,3,2,3,1,7,11,10,14,15,19,4,25, 2,30,38,3,5,2,38,40,3,31,10,12,13,140,14,4, 2,5,8,9,2,3,7,6,2,2,13,17,4,10,18,7, 7,5,33,13,22,34,23,5,13,26,28,20,37,12,4,0, 0,2,0,100,255,110,1,42,0,50,0,37,0,75,0,0, 23,39,22,51,55,54,55,39,38,39,15,2,38,53,52,51, 23,22,21,20,7,54,55,52,39,38,39,23,22,23,22,23, 20,15,1,39,34,7,39,22,51,55,54,55,39,38,39,15, 2,38,53,52,51,23,22,21,20,7,54,55,52,39,38,39, 23,22,23,22,23,20,7,6,35,34,218,8,6,7,14,9, 1,3,2,3,1,7,11,10,14,15,19,4,25,2,30,38, 3,5,2,38,40,3,31,21,24,2,112,8,6,7,14,9, 1,3,2,3,1,7,11,10,14,15,19,4,25,2,30,38, 3,5,2,38,40,3,31,10,12,13,90,14,4,2,5,8, 9,2,3,7,6,2,2,13,17,4,10,18,7,7,5,33, 13,22,34,23,5,13,26,28,20,37,12,4,4,49,14,4, 2,5,8,9,2,3,7,6,2,2,13,17,4,10,18,7, 7,5,33,13,22,34,23,5,13,26,28,20,37,12,4,0, 0,2,0,22,0,0,1,162,2,88,0,15,0,35,0,0, 51,34,39,38,53,52,55,54,51,50,23,22,21,20,7,6, 39,50,55,54,53,52,39,38,39,38,35,34,7,6,21,20, 23,22,23,22,220,105,55,38,65,53,80,106,54,37,64,53, 80,84,42,26,13,29,76,16,18,85,41,24,10,26,71,21, 116,79,105,143,87,70,116,78,103,143,88,72,80,94,57,72, 50,43,100,20,4,95,55,69,44,41,102,27,7,0,0,1, 0,20,0,0,1,124,2,88,0,29,0,0,19,20,31,1, 22,21,20,7,34,39,38,53,52,55,54,51,50,31,1,6, 7,50,55,54,53,52,47,1,38,39,40,95,140,105,216,101, 33,10,36,19,25,61,11,1,2,11,104,34,12,73,111,104, 2,2,68,44,70,101,82,61,201,21,66,21,24,49,26,14, 62,33,29,26,93,34,43,47,60,86,94,93,0,1,0,19, 0,0,1,225,2,88,0,29,0,0,19,22,23,22,23,7, 38,39,38,49,39,22,23,55,54,55,52,39,38,37,48,39, 48,23,4,23,22,21,20,7,189,26,233,17,14,40,116,216, 28,60,120,133,63,83,1,6,37,254,255,50,116,1,21,18, 1,208,1,14,5,216,16,13,20,128,117,15,100,39,1,3, 10,31,8,9,57,82,80,37,99,87,6,5,97,1,0,1, 0,19,255,251,1,246,2,91,0,39,0,0,37,55,38,39, 38,35,7,6,7,6,7,21,22,23,22,51,50,55,54,55, 22,21,20,7,6,35,34,39,38,3,38,47,1,18,23,22, 51,50,55,54,1,243,3,2,87,23,27,26,50,24,5,3, 8,46,16,16,25,20,31,14,27,58,41,52,21,22,111,77, 20,17,20,46,115,57,62,41,40,67,228,93,211,56,15,4, 14,48,12,13,30,53,20,6,13,20,44,67,76,121,77,55, 10,51,1,22,72,85,20,254,134,152,74,34,57,0,0,3, 0,21,0,0,1,103,2,88,0,28,0,45,0,63,0,0, 19,38,53,52,55,54,55,54,51,50,23,22,21,20,7,6, 7,22,23,7,6,7,6,35,34,39,38,53,52,55,34,7, 6,21,20,23,22,51,50,55,54,55,39,38,39,38,39,50, 55,54,53,39,38,39,38,35,34,7,6,21,23,22,23,22, 73,52,14,29,63,31,32,77,52,40,13,14,25,51,1,4, 16,60,41,48,72,53,44,169,101,25,6,48,36,48,75,38, 18,1,4,11,43,31,43,98,27,7,4,14,55,27,32,74, 39,19,4,17,87,12,1,43,32,69,35,36,77,35,17,75, 57,63,34,27,28,16,33,71,38,79,47,32,73,60,65,69, 2,59,14,16,51,34,25,54,25,29,24,37,18,12,62,58, 15,17,25,50,23,11,54,26,29,24,57,8,1,0,0,2, 0,24,255,254,1,95,2,88,0,16,0,42,0,0,19,6, 21,20,23,22,23,22,23,38,39,53,54,55,38,39,38,55, 7,23,22,23,22,23,55,23,6,21,20,23,22,23,35,38, 39,38,39,38,53,52,55,54,55,225,134,10,15,35,27,57, 36,7,9,84,37,17,6,70,40,3,13,41,1,2,20,16, 113,61,4,2,22,60,67,20,16,96,122,53,76,1,244,74, 124,33,35,54,45,35,20,44,68,40,87,51,31,57,22,50, 20,27,58,42,2,1,10,54,18,103,68,134,9,4,8,53, 16,17,103,99,112,104,45,43,0,1,0,24,0,0,2,0, 2,89,0,44,0,0,19,38,39,55,54,51,50,23,22,23, 21,54,55,54,55,22,21,20,7,6,7,6,35,34,39,38, 39,38,53,23,22,23,22,51,50,55,54,55,54,53,52,39, 6,7,39,224,20,1,3,4,8,22,36,4,4,31,57,77, 25,37,13,31,85,47,51,50,45,119,34,12,20,12,110,53, 63,29,27,75,34,18,1,65,105,70,2,28,19,22,13,7, 49,6,6,240,1,34,45,60,83,81,48,45,105,50,28,28, 73,227,78,94,20,248,101,49,10,30,88,49,59,11,11,71, 39,70,0,2,0,20,0,2,1,94,2,86,0,18,0,32, 0,0,1,6,35,34,39,38,53,52,55,54,55,54,51,50, 23,17,47,2,17,53,38,39,7,6,7,6,21,20,23,22, 51,50,1,33,45,39,128,42,14,5,18,58,30,34,94,89, 3,52,5,32,53,27,55,35,21,69,21,25,46,1,18,9, 88,31,37,23,23,77,35,19,136,254,53,2,55,2,1,32, 135,56,1,4,14,53,32,30,54,14,4,0,0,2,0,21, 0,0,1,180,2,87,0,25,0,36,0,0,1,6,15,1, 22,21,20,7,6,7,39,17,38,39,55,54,51,23,22,31, 1,21,52,63,1,54,1,54,55,54,55,6,7,6,15,2, 1,180,7,44,6,16,111,86,116,38,21,1,3,3,8,13, 15,21,19,88,149,95,254,180,177,54,16,1,14,91,109,24, 8,2,1,199,90,18,2,34,35,99,84,66,27,50,1,224, 22,25,15,6,4,9,26,29,201,37,11,15,14,254,180,69, 124,37,35,12,7,8,22,12,11,0,0,1,0,20,0,0, 1,125,2,88,0,45,0,0,19,39,20,31,1,22,21,20, 7,6,7,54,53,52,39,38,39,38,35,34,7,6,21,20, 23,55,54,63,1,52,39,22,21,20,7,23,50,55,54,53, 52,39,38,47,1,38,40,20,109,128,53,87,11,12,14,6, 17,57,27,25,26,16,20,46,22,37,13,4,2,33,53,30, 149,58,24,1,10,108,143,73,2,68,20,96,95,105,47,37, 126,28,4,2,29,29,19,18,55,28,13,14,18,35,60,5, 1,9,27,15,5,4,24,44,51,21,40,110,46,48,9,7, 76,80,100,56,0,3,255,246,0,0,1,244,2,88,0,9, 0,15,0,28,0,0,19,22,23,22,23,7,48,39,38,39, 55,7,48,23,22,23,17,33,39,33,23,35,17,52,39,38, 47,1,37,198,63,62,43,2,20,26,49,55,142,250,63,129, 58,254,182,40,1,214,40,80,93,133,164,20,1,94,1,133, 6,78,54,2,10,39,64,17,86,145,26,61,83,1,154,60, 60,253,228,26,74,107,73,20,200,0,0,3,255,243,0,0, 1,241,2,88,0,5,0,18,0,28,0,0,1,7,48,23, 22,23,17,33,39,33,23,35,17,52,39,38,47,1,37,3, 22,23,22,23,7,48,39,38,39,1,101,250,63,129,58,254, 182,40,1,214,40,80,93,133,164,20,1,94,230,63,62,43, 2,20,26,49,55,1,189,145,26,61,83,1,154,60,60,253, 228,26,74,107,73,20,200,254,162,6,78,54,2,10,39,64, 17,0,0,1,0,20,0,20,1,104,1,91,0,14,0,0, 19,54,51,23,22,23,22,23,39,48,39,38,39,38,35,20, 29,27,40,130,77,27,10,40,15,53,110,38,44,1,84,7, 4,25,181,64,53,20,50,137,39,14,0,1,255,236,0,0, 1,235,3,35,0,52,0,0,17,54,55,50,23,22,21,7, 35,23,51,17,23,54,55,54,55,52,39,38,39,7,6,7, 6,7,21,22,23,22,51,50,55,22,21,20,7,6,7,6, 7,17,33,39,33,53,52,39,7,6,7,6,7,59,31,19, 7,5,1,140,40,100,37,150,56,49,1,8,17,54,21,36, 14,2,1,6,29,9,10,16,18,5,7,11,33,32,90,1, 55,41,254,242,59,24,55,57,2,3,2,178,62,1,25,16, 26,226,60,254,163,51,21,53,46,78,31,37,81,3,3,10, 30,4,3,18,39,13,3,9,20,17,20,16,25,19,19,25, 1,69,60,232,110,1,4,17,66,3,3,0,0,1,0,20, 0,93,1,104,1,164,0,14,0,0,55,22,51,55,54,55, 54,55,7,48,7,6,7,6,35,20,29,27,40,131,77,26, 10,40,15,53,110,38,44,100,7,4,25,183,62,53,20,50, 137,39,14,0,0,1,0,20,0,93,1,104,1,164,0,41, 0,0,55,7,22,51,50,55,54,55,7,48,7,6,7,6, 7,54,53,39,38,39,38,35,34,7,6,15,1,21,20,23, 22,51,50,55,54,53,52,39,22,23,7,6,80,40,29,27, 146,78,30,10,40,9,34,104,8,7,16,3,12,49,15,15, 17,13,18,7,5,37,9,10,16,12,20,4,24,1,4,13, 160,60,7,187,73,67,20,49,136,39,3,2,33,29,28,46, 17,5,6,8,17,20,4,45,14,4,9,14,29,12,15,18, 31,23,39,0,0,1,0,20,0,98,1,104,1,164,0,42, 0,0,55,50,55,54,53,52,39,23,6,7,35,38,39,38, 53,52,55,54,51,50,23,22,21,20,7,6,7,22,51,55, 54,55,54,63,1,6,7,6,7,34,39,38,39,80,40,25, 12,17,2,3,33,21,34,9,2,38,10,12,53,19,7,46, 23,30,20,26,27,63,53,47,4,40,17,85,66,66,36,27, 28,15,203,46,22,23,26,13,25,35,6,6,31,7,7,47, 12,3,54,19,21,63,33,17,3,15,3,18,80,72,72,20, 143,100,78,1,27,27,51,0,0,1,0,20,0,0,0,80, 2,88,0,3,0,0,19,17,23,17,20,60,2,88,253,228, 60,2,28,0,0,1,0,19,0,0,1,145,2,89,0,27, 0,0,19,17,23,48,55,54,55,6,21,20,31,1,55,38, 53,54,55,39,6,15,1,17,38,39,15,1,21,22,41,60, 70,93,50,19,46,20,20,44,1,63,50,86,115,49,40,25, 10,5,3,2,28,254,222,71,85,106,26,99,75,105,82,35, 20,85,94,117,94,100,24,147,65,1,10,59,2,3,8,15, 20,0,0,2,0,20,0,200,1,124,1,214,0,17,0,35, 0,0,55,34,39,38,53,55,54,55,54,51,50,23,22,21, 20,15,1,6,39,34,7,6,21,20,23,22,51,50,55,54, 53,52,39,38,39,38,200,111,47,22,4,16,73,38,49,112, 47,21,61,31,39,49,70,25,9,31,28,45,71,25,8,5, 19,60,10,200,67,31,36,29,65,27,15,69,30,36,66,39, 15,15,225,52,18,20,41,26,23,52,17,20,16,15,50,9, 1,0,0,2,0,20,0,176,1,124,1,234,0,14,0,32, 0,0,19,52,55,54,51,23,22,23,20,7,6,35,34,39, 38,39,22,23,22,51,50,55,54,55,20,7,6,7,34,39, 38,39,38,130,44,12,14,24,44,2,44,12,14,45,18,7, 110,53,87,20,20,78,60,24,18,83,43,53,24,23,77,35, 22,1,164,48,16,5,4,14,51,48,15,4,36,14,87,195, 42,10,128,51,68,185,84,44,1,10,32,114,69,0,0,1, 0,0,0,0,2,216,2,22,0,53,0,0,55,52,39,38, 39,35,53,51,22,23,22,23,54,55,54,55,22,23,22,23, 51,17,51,21,35,17,35,53,35,6,7,6,35,34,53,52, 55,54,55,52,39,38,39,6,7,6,7,22,21,20,35,34, 53,52,126,47,16,13,50,85,35,36,11,5,19,61,43,29, 52,38,20,28,152,114,50,64,152,6,32,30,34,49,59,16, 16,52,18,12,46,49,20,9,6,86,40,250,64,108,38,17, 57,39,104,31,22,39,47,32,6,18,65,35,76,1,10,57, 254,35,211,81,64,66,57,72,74,20,13,45,78,27,11,21, 65,25,21,43,37,141,58,65,255,255,0,0,0,0,3,116, 2,22,16,38,4,141,0,0,16,7,4,185,2,216,0,0, 255,255,0,0,255,245,2,146,2,187,16,38,4,186,0,0, 16,7,4,211,0,174,0,0,255,255,0,0,255,245,2,144, 2,187,16,38,4,211,0,0,16,7,4,187,1,226,0,0, 255,255,0,0,255,97,2,68,2,219,16,38,4,212,0,0, 16,7,4,188,2,48,0,0,255,255,0,0,255,13,2,68, 2,219,16,38,4,212,0,0,16,7,4,189,2,48,0,0, 255,255,0,0,255,245,1,228,2,209,16,38,4,211,0,0, 16,7,4,190,1,244,0,0,255,255,0,0,0,0,2,216, 3,11,16,38,4,141,0,0,16,7,4,191,2,198,0,0, 0,3,0,0,255,240,2,68,2,218,0,33,0,42,0,52, 0,0,1,51,21,35,34,7,6,7,33,21,35,20,7,6, 7,22,21,20,15,1,6,35,34,39,38,39,38,39,38,39, 35,53,51,54,19,50,55,54,53,52,39,33,22,1,33,7, 49,20,23,33,54,55,54,1,32,168,168,96,54,25,7,1, 218,22,57,18,21,36,81,33,27,31,104,81,36,19,29,19, 5,1,32,32,43,251,58,32,18,18,254,232,62,1,30,254, 134,2,14,1,36,32,23,19,2,218,67,62,29,38,57,94, 84,28,17,46,66,98,40,13,7,96,44,50,76,159,40,28, 57,196,253,89,43,25,31,42,33,174,1,160,55,72,48,19, 62,51,255,255,0,0,0,0,2,230,2,254,16,38,4,141, 0,0,16,7,4,193,3,42,0,0,0,2,0,0,0,0, 2,24,2,22,0,34,0,50,0,0,55,52,55,54,51,50, 23,22,23,54,55,54,53,33,53,33,21,35,20,15,1,6, 7,22,23,35,38,39,6,7,6,35,34,39,38,55,20,23, 22,51,50,55,54,55,38,39,38,35,34,7,6,35,72,43, 56,70,81,33,15,28,12,3,254,64,2,22,22,42,19,3, 2,64,26,66,17,38,31,95,49,36,99,46,24,69,52,21, 27,34,57,64,17,29,59,52,32,67,24,9,200,77,40,24, 40,17,16,32,123,31,23,57,57,118,102,39,4,4,82,128, 103,41,37,26,14,59,32,46,50,21,9,24,25,31,35,25, 20,44,16,0,0,2,0,0,0,0,2,6,2,22,0,22, 0,30,0,0,1,35,17,35,53,6,35,34,39,38,39,54, 53,52,39,35,53,51,22,23,33,53,51,3,53,33,6,7, 22,51,50,2,6,50,64,45,67,90,94,54,22,39,39,32, 86,42,6,1,14,114,114,254,242,3,25,84,98,80,1,221, 254,35,92,42,65,38,39,58,93,91,43,57,84,93,177,254, 153,125,53,51,84,0,0,2,0,0,255,244,2,90,2,22, 0,11,0,33,0,0,37,53,35,34,7,6,21,20,23,22, 51,50,17,33,53,33,21,35,17,35,17,35,17,20,35,34, 39,38,53,52,55,54,59,1,1,40,134,47,16,5,47,43, 36,76,254,216,2,90,50,64,128,122,90,61,57,63,26,33, 144,97,157,43,13,16,47,47,43,1,176,57,57,254,35,1, 221,254,125,102,61,57,76,85,31,13,0,1,0,0,0,0, 2,162,2,22,0,46,0,0,1,35,17,35,53,6,35,34, 39,6,35,34,39,38,39,54,53,52,39,35,53,51,22,21, 20,7,22,23,22,51,54,53,52,39,51,22,21,20,7,22, 23,22,51,50,55,17,51,2,162,50,64,21,55,96,52,22, 40,93,82,39,18,62,42,62,103,65,40,8,78,42,22,46, 50,68,46,20,23,59,18,16,57,19,114,1,221,254,35,68, 18,42,16,60,29,33,59,96,79,45,57,67,117,91,61,22, 26,13,46,112,137,102,114,144,75,45,29,13,4,49,1,119, 0,2,0,0,255,243,2,18,2,22,0,39,0,49,0,0, 1,33,21,33,50,23,22,21,20,7,22,23,22,23,35,38, 39,6,35,34,39,38,53,52,55,54,51,50,23,54,53,52, 39,38,35,33,53,35,53,33,3,38,39,38,35,34,21,20, 51,50,2,18,254,78,1,44,73,22,7,76,34,6,4,8, 70,6,25,73,87,79,47,31,80,34,40,115,57,64,54,11, 13,254,176,32,2,18,192,31,70,19,18,80,83,86,1,221, 116,67,22,26,98,55,45,14,11,23,15,33,61,48,32,41, 71,26,11,70,46,51,48,11,2,173,57,254,76,40,13,4, 56,53,0,2,0,0,255,243,1,246,2,22,0,21,0,31, 0,0,1,35,17,20,7,6,35,34,39,38,53,35,52,55, 54,51,21,33,53,33,53,33,3,33,21,22,23,22,51,50, 53,52,1,246,24,100,41,55,93,57,44,56,26,22,72,1, 6,254,98,1,246,88,254,250,5,26,41,58,133,1,221,254, 245,152,50,21,94,73,91,69,23,21,56,175,57,254,223,41, 46,45,69,168,22,0,0,3,0,0,255,244,2,64,2,22, 0,39,0,48,0,59,0,0,1,35,21,33,34,7,6,21, 20,51,33,50,23,22,21,20,7,6,7,6,35,34,39,38, 39,38,53,52,55,38,53,52,55,54,51,33,53,33,53,33, 3,52,43,1,21,51,50,55,54,37,20,23,22,59,1,53, 35,34,7,6,2,64,50,254,144,25,10,2,45,1,18,64, 23,8,41,13,15,44,110,104,60,50,21,10,23,32,55,22, 29,1,42,254,50,2,64,104,94,45,49,64,20,6,254,170, 48,20,24,47,45,58,25,11,1,221,149,32,8,9,43,64, 24,28,69,36,11,4,12,12,10,58,26,29,47,26,35,48, 68,27,11,92,57,254,93,64,128,38,12,14,40,17,7,128, 33,14,0,1,0,0,0,0,1,220,2,22,0,25,0,0, 1,35,17,35,53,35,20,7,6,7,35,54,55,35,38,53, 52,51,50,23,21,51,53,33,53,33,1,220,50,64,210,23, 2,1,64,25,1,56,1,96,16,9,210,254,150,1,220,1, 221,254,35,215,71,127,10,7,157,58,8,14,92,1,56,205, 57,0,0,2,0,0,0,0,2,46,2,22,0,6,0,57, 0,0,1,33,22,51,50,55,54,23,20,7,6,7,23,35, 47,1,38,39,38,53,52,55,54,51,50,23,22,51,50,55, 54,53,52,39,38,39,38,35,34,7,6,35,34,47,1,55, 38,39,35,53,33,21,35,6,7,6,7,22,1,216,254,166, 37,137,101,38,21,33,70,23,26,56,130,32,66,118,13,1, 43,15,16,43,43,48,43,70,24,9,4,5,11,34,73,42, 51,58,26,19,13,58,122,39,51,62,2,46,22,27,10,32, 41,67,1,221,139,53,30,235,71,37,13,5,60,38,1,9, 48,5,5,33,14,5,32,16,43,16,15,11,10,14,13,43, 17,20,4,64,14,30,127,57,57,77,23,65,18,34,0,2, 0,3,0,0,1,245,2,22,0,33,0,38,0,0,1,35, 21,33,34,21,20,23,22,51,33,21,35,20,51,55,49,21, 35,34,53,34,39,38,53,52,55,38,39,38,53,35,53,33, 7,53,33,20,23,1,245,32,254,185,41,31,9,11,1,61, 232,168,64,71,227,75,36,18,63,19,16,5,62,1,242,96, 254,236,38,1,221,154,48,39,13,4,57,107,2,57,162,51, 27,34,68,28,12,62,21,12,57,154,97,44,53,0,0,1, 0,0,255,244,1,254,2,22,0,33,0,0,1,35,21,38, 35,32,7,23,22,51,50,55,54,55,54,59,1,20,7,6, 35,34,39,38,39,54,55,54,59,1,53,33,53,33,1,254, 22,45,43,254,240,28,103,59,52,44,37,2,34,25,18,10, 56,54,60,58,76,75,73,33,90,74,183,12,254,88,1,254, 1,221,207,3,85,94,47,34,2,34,25,60,46,48,52,52, 90,90,30,25,150,57,0,2,0,0,255,244,2,28,2,22, 0,22,0,38,0,0,1,35,21,50,23,22,21,20,7,6, 35,34,39,38,53,52,55,54,51,53,35,53,33,1,20,23, 22,51,50,55,54,53,52,39,38,35,34,7,6,2,28,232, 62,71,77,68,66,108,108,66,68,77,71,62,244,2,28,254, 76,65,55,52,60,56,56,72,47,53,77,54,41,1,221,123, 57,63,72,76,48,50,50,48,76,72,63,57,123,57,254,138, 43,38,31,37,38,37,67,39,26,48,37,0,0,2,0,0, 255,242,1,252,2,22,0,9,0,52,0,0,37,38,39,38, 35,34,21,20,51,50,1,53,33,21,35,20,7,22,21,20, 7,6,35,34,53,52,55,54,51,50,23,22,23,54,53,52, 39,38,35,34,35,6,35,34,53,52,51,23,49,50,55,54, 53,1,83,52,92,17,14,64,113,70,254,229,1,252,50,50, 68,20,55,177,184,99,21,22,101,68,21,12,27,29,30,48, 6,5,130,15,76,71,144,59,30,16,57,27,8,2,26,28, 1,181,57,57,140,39,85,70,37,32,88,88,61,12,3,39, 13,14,20,36,37,35,38,15,45,46,14,77,41,47,0,2, 0,0,255,243,2,0,2,22,0,30,0,42,0,0,37,20, 7,6,35,34,39,38,53,35,52,55,54,51,21,51,53,33, 53,33,21,35,21,33,20,23,54,51,50,23,22,7,52,39, 38,35,34,7,22,51,50,55,54,1,221,80,31,38,148,60, 32,56,31,25,64,246,254,114,2,0,50,254,202,28,46,97, 84,44,26,63,55,14,15,77,23,27,76,56,19,6,82,63, 23,9,123,66,91,75,21,17,56,153,57,57,210,104,37,61, 44,26,35,34,10,3,47,40,24,7,0,1,0,0,255,253, 2,46,2,22,0,42,0,0,5,34,39,38,39,54,55,54, 51,50,23,55,38,39,33,53,33,21,35,22,23,22,23,7, 38,47,1,7,38,35,34,7,6,7,22,23,22,51,50,55, 20,7,6,1,71,140,106,28,21,16,69,45,55,48,41,54, 38,34,254,224,2,46,214,12,90,50,40,30,51,53,20,83, 23,59,70,32,9,4,32,78,57,57,122,84,83,52,3,116, 30,35,78,43,29,23,51,31,90,57,57,48,60,34,13,71, 24,41,16,102,36,49,13,16,64,39,29,124,100,51,32,0, 0,1,0,0,255,250,1,212,2,22,0,47,0,0,17,53, 33,21,35,20,7,6,7,22,21,20,15,1,6,35,34,39, 38,39,51,55,51,22,23,55,54,55,54,53,52,39,38,35, 34,35,6,35,34,53,52,51,23,49,50,55,54,53,1,212, 22,47,11,12,79,78,29,33,52,118,68,26,13,5,7,2, 81,113,47,79,19,2,48,24,28,5,5,130,15,76,71,144, 59,30,16,1,219,59,59,101,62,15,9,55,75,80,52,16, 16,75,28,35,8,76,2,3,12,63,10,4,53,29,14,15, 45,46,14,76,41,46,0,3,0,0,0,0,2,6,2,22, 0,7,0,12,0,30,0,0,37,53,33,20,7,22,51,50, 39,33,53,33,22,39,35,53,33,21,35,17,35,53,6,35, 34,39,38,39,54,53,52,1,148,254,236,22,84,98,80,234, 1,14,254,209,26,95,32,2,6,50,64,45,67,90,94,54, 22,39,175,105,40,44,84,225,140,50,50,57,57,254,35,92, 42,65,38,39,58,93,91,0,0,1,0,0,255,243,1,232, 2,22,0,31,0,0,1,35,21,33,22,51,50,55,54,59, 1,6,7,6,35,34,39,38,39,35,53,52,55,54,59,1, 21,51,53,33,53,33,1,232,22,254,204,24,132,42,50,52, 16,10,2,62,48,58,163,45,9,3,56,37,19,36,28,244, 254,110,1,232,1,221,234,198,49,48,70,48,36,177,36,42, 29,71,18,10,71,177,57,0,0,2,0,0,0,0,2,6, 2,22,0,9,0,26,0,0,55,22,51,50,55,17,33,22, 21,20,39,35,53,33,21,35,17,35,53,6,35,34,39,38, 39,54,52,106,84,98,80,36,254,209,36,105,32,2,6,50, 64,45,67,90,94,54,22,39,226,84,63,1,16,73,70,65, 208,57,57,254,35,122,42,65,38,39,58,154,0,1,0,0, 255,254,2,10,2,22,0,44,0,0,1,35,21,22,23,22, 21,20,7,6,35,53,48,23,50,55,54,53,52,39,38,39, 6,7,6,21,20,23,22,51,55,49,21,34,39,38,53,52, 55,54,55,53,35,53,33,2,10,224,98,41,63,87,44,55, 14,44,38,26,76,49,45,61,57,54,49,31,28,16,99,54, 35,65,37,102,234,2,10,1,221,103,60,41,65,76,81,35, 18,59,2,35,23,25,64,63,41,11,15,59,55,50,36,29, 18,2,59,53,34,47,76,65,37,64,103,57,0,1,0,0, 0,0,2,6,2,22,0,26,0,0,55,22,51,50,55,17, 51,21,35,17,35,53,6,35,34,39,38,39,54,52,39,35, 53,51,22,21,20,106,84,98,80,36,114,50,64,45,67,90, 94,54,22,39,39,32,86,46,226,84,63,1,73,57,254,35, 122,42,65,38,39,58,154,43,57,82,101,68,0,2,0,0, 255,245,1,234,2,22,0,34,0,48,0,0,1,35,21,33, 34,7,20,23,54,55,54,51,50,23,22,21,20,7,6,35, 34,39,38,39,38,53,52,55,54,59,1,53,33,53,33,3, 52,35,34,7,6,21,20,23,22,51,50,55,54,1,234,22, 254,234,84,1,61,27,78,31,33,83,39,19,75,37,44,134, 93,8,7,38,124,12,14,214,254,108,1,234,68,86,60,32, 16,68,14,15,66,23,8,1,221,175,70,58,62,63,22,9, 48,24,32,68,30,15,108,9,10,53,64,114,11,1,118,57, 254,80,48,27,13,16,38,10,2,33,11,0,0,3,0,0, 0,0,2,34,2,22,0,17,0,22,0,34,0,0,1,35, 17,35,53,6,35,34,39,54,55,38,39,38,39,35,53,33, 7,53,33,22,31,1,53,35,34,7,6,7,22,23,22,51, 50,2,34,50,64,57,61,130,110,25,83,54,38,6,40,44, 2,34,114,254,193,23,104,192,116,94,45,14,13,39,75,32, 32,57,1,221,254,35,64,28,132,86,38,22,64,9,90,57, 209,152,108,44,200,143,47,14,21,59,24,10,0,2,0,0, 255,247,1,244,2,22,0,13,0,63,0,0,1,38,35,34, 7,6,21,20,23,22,51,50,55,54,5,22,23,22,51,50, 55,54,53,52,39,6,7,6,35,34,39,38,53,52,55,54, 51,50,23,54,53,52,39,33,53,33,21,35,20,15,1,22, 21,20,7,6,35,34,39,38,39,38,55,54,1,72,46,68, 62,25,14,41,21,24,64,42,20,254,219,40,96,54,35,67, 42,26,26,30,87,23,22,101,34,13,81,33,41,94,55,28, 2,254,126,1,244,50,30,18,46,85,46,58,122,82,20,15, 2,8,6,1,19,54,25,12,17,30,17,8,27,13,132,35, 30,17,44,28,35,33,34,41,13,4,59,22,29,74,28,11, 47,28,78,11,22,57,57,102,62,33,76,63,89,40,21,82, 20,23,2,4,4,0,0,1,0,0,255,251,2,18,2,22, 0,28,0,0,1,17,51,21,35,17,35,53,35,6,7,6, 35,38,53,52,55,54,63,1,38,39,35,53,51,22,23,22, 23,1,160,114,50,64,224,12,11,18,39,55,53,4,4,10, 25,31,72,128,25,30,7,2,1,12,1,10,57,254,35,211, 122,35,58,1,63,69,72,6,5,40,159,66,57,69,146,34, 17,0,0,2,0,0,0,0,2,142,2,22,0,17,0,29, 0,0,33,38,39,38,39,54,53,52,39,35,53,33,21,35, 17,35,53,35,37,22,21,20,7,22,23,22,23,53,51,53, 1,119,160,106,36,39,52,54,32,2,142,50,64,165,254,239, 45,37,23,100,49,29,229,2,81,28,43,56,95,99,73,57, 57,254,35,239,238,83,90,80,70,32,38,18,4,234,181,0, 0,2,0,0,255,245,2,10,2,22,0,19,0,33,0,0, 1,35,17,20,7,6,35,34,39,38,53,52,55,54,59,1, 53,33,53,33,3,53,35,34,21,20,23,22,23,22,51,50, 55,54,2,10,50,61,39,50,83,85,81,54,23,30,228,254, 104,2,10,114,206,67,59,7,7,55,54,64,20,7,1,221, 254,169,76,42,27,73,69,86,71,29,13,147,57,254,125,126, 56,56,56,6,6,43,56,19,0,2,0,0,255,254,2,198, 2,22,0,58,0,67,0,0,23,34,39,38,53,52,55,54, 55,38,39,35,53,33,21,35,6,7,22,23,22,21,20,7, 6,35,39,49,53,22,51,50,55,54,53,52,39,38,39,6, 7,6,7,38,39,38,39,6,7,6,21,20,23,22,51,50, 55,21,7,1,33,22,23,22,23,54,55,54,238,89,56,43, 49,24,75,19,35,144,2,198,134,35,19,74,25,49,63,55, 68,54,17,17,55,49,38,67,24,23,34,57,22,19,53,54, 16,9,51,37,26,59,42,39,19,17,52,1,18,254,208,15, 68,35,34,56,50,39,2,59,46,61,59,49,24,50,25,106, 57,57,106,25,49,25,49,59,78,47,41,2,57,4,42,33, 36,51,52,19,9,48,29,11,4,10,53,15,14,21,48,33, 29,48,37,26,4,57,2,1,223,80,78,41,18,28,78,60, 0,3,255,254,255,250,2,198,2,22,0,15,0,74,0,83, 0,0,55,50,23,22,21,20,7,6,35,34,39,38,53,52, 55,54,23,34,39,38,53,52,55,54,55,38,39,35,53,33, 21,35,6,7,22,23,22,21,20,7,6,35,39,49,53,22, 51,50,55,54,53,52,39,38,39,6,7,6,7,38,39,38, 39,6,7,6,21,20,23,22,51,50,55,21,7,1,33,22, 23,22,23,54,55,54,31,25,7,1,21,6,6,23,8,2, 22,5,213,89,56,43,49,24,75,19,35,144,2,198,134,35, 19,74,25,49,63,55,68,54,17,17,55,49,38,67,24,23, 34,57,22,19,53,54,16,9,51,37,26,59,42,39,19,17, 52,1,18,254,208,15,68,35,34,56,50,39,60,23,5,5, 22,9,2,22,6,5,23,8,2,62,59,46,61,59,49,24, 50,25,106,57,57,106,25,49,25,49,59,78,47,41,2,57, 4,42,33,36,51,52,19,9,48,29,11,4,10,53,15,14, 21,48,33,29,48,37,26,4,57,2,1,223,80,78,41,18, 28,78,60,0,0,1,0,0,0,0,1,242,2,22,0,39, 0,0,1,35,21,33,34,7,6,21,20,23,22,51,33,21, 35,20,23,22,51,55,49,21,35,34,39,38,39,38,39,38, 53,52,55,54,59,1,53,33,53,33,1,242,32,254,176,31, 11,4,38,8,10,1,70,232,105,29,34,64,50,138,68,41, 1,84,36,18,56,28,34,254,254,110,1,242,1,221,154,28, 9,10,40,10,2,57,87,21,6,4,57,67,40,60,4,49, 24,31,62,29,14,97,57,0,0,3,0,0,255,250,2,18, 2,22,0,4,0,20,0,42,0,0,1,33,22,23,51,7, 50,23,22,21,20,7,6,35,34,39,38,53,52,55,54,19, 21,35,17,35,53,35,6,7,6,35,38,53,52,55,54,63, 1,38,39,35,53,1,160,254,240,28,20,224,126,25,7,1, 21,6,6,23,8,2,22,5,246,50,64,224,12,11,18,39, 55,53,4,4,10,25,31,72,1,221,82,127,208,23,5,5, 22,9,2,22,6,5,23,8,2,1,218,57,254,35,211,122, 35,58,1,63,69,72,6,5,40,159,66,57,0,2,0,0, 255,251,2,18,2,22,0,4,0,26,0,0,1,33,22,23, 51,19,21,35,17,35,53,35,6,7,6,35,38,53,52,55, 54,63,1,38,39,35,53,1,160,254,240,28,20,224,114,50, 64,224,12,11,18,39,55,53,4,4,10,25,31,72,1,221, 82,127,1,10,57,254,35,211,122,35,58,1,63,69,72,6, 5,40,159,66,57,0,0,1,0,0,255,244,1,245,2,22, 0,29,0,0,55,20,23,22,51,50,53,17,33,53,33,21, 35,17,20,35,34,39,38,39,38,53,52,55,54,59,1,21, 35,34,97,57,47,60,126,254,125,1,245,50,172,75,42,49, 42,39,58,28,35,52,56,52,210,70,52,43,127,1,49,57, 57,254,189,166,20,23,61,58,54,73,33,16,57,0,0,1, 0,84,0,0,0,194,0,114,0,3,0,0,55,21,35,53, 194,110,114,114,114,0,0,1,0,0,0,194,0,156,2,22, 0,7,0,0,19,17,35,17,35,53,51,21,124,64,60,156, 1,221,254,229,1,27,57,57,0,1,0,0,0,0,1,42, 2,187,0,29,0,0,1,35,53,52,39,38,35,34,7,6, 29,1,51,21,35,17,35,17,35,53,51,53,52,55,54,51, 50,23,22,21,1,42,64,37,11,12,41,15,4,60,60,64, 50,50,53,33,38,62,38,24,2,40,26,45,15,4,39,12, 13,44,57,254,35,1,221,57,46,60,37,22,51,32,38,0, 0,1,255,132,0,0,0,174,2,187,0,29,0,0,19,35, 17,35,17,35,53,51,53,52,39,38,35,34,7,6,29,1, 35,53,52,55,54,51,50,23,22,29,1,51,174,50,64,60, 60,37,11,12,41,15,4,64,53,33,38,62,38,24,50,1, 221,254,35,1,221,57,44,45,15,4,39,12,13,26,26,61, 37,23,50,32,37,46,0,1,254,97,255,97,255,150,255,164, 0,9,0,0,7,6,35,34,39,53,22,51,50,55,106,96, 59,58,96,96,58,59,96,151,8,8,59,8,8,0,0,2, 254,98,255,13,255,148,255,174,0,9,0,19,0,0,7,21, 6,35,34,39,53,22,51,55,29,1,6,35,34,39,53,22, 51,55,108,95,63,61,87,44,104,158,95,63,61,87,44,104, 158,82,56,4,4,56,6,6,101,56,4,4,56,6,6,0, 0,1,254,126,2,36,255,214,2,209,0,12,0,0,3,38, 35,34,39,38,53,52,55,23,22,23,22,42,158,115,38,24, 9,71,38,103,97,19,2,36,107,19,7,9,24,6,1,14, 112,22,0,1,254,120,2,32,255,208,3,11,0,27,0,0, 3,38,35,7,49,34,53,52,51,50,23,22,23,38,39,38, 35,34,35,39,38,53,52,63,1,22,23,22,48,103,109,80, 36,70,97,93,23,17,16,57,77,105,6,6,27,22,32,22, 81,95,100,2,32,64,7,28,37,56,15,15,40,42,54,2, 5,18,24,10,3,1,70,73,0,1,254,100,2,60,255,188, 3,2,0,13,0,0,3,35,38,43,1,34,39,51,22,59, 1,50,23,22,68,16,22,52,154,95,5,22,22,48,150,74, 19,7,2,60,64,134,70,60,26,0,0,1,254,55,2,32, 255,188,2,254,0,30,0,0,3,53,34,39,38,53,52,55, 51,22,51,55,49,50,29,1,35,53,50,53,52,39,38,35, 34,7,6,21,20,51,21,246,100,58,53,1,12,15,142,127, 92,64,13,24,8,8,26,10,3,16,2,32,82,40,35,52, 6,7,73,3,41,111,36,17,27,12,4,27,7,8,19,35, 0,1,255,52,255,72,0,50,255,232,0,12,0,0,23,38, 35,6,35,34,53,52,51,53,51,21,22,50,83,87,24,26, 34,72,64,87,184,77,12,24,45,26,36,30,0,3,0,0, 255,250,2,6,2,22,0,22,0,30,0,46,0,0,1,35, 17,35,53,6,35,34,39,38,39,54,53,52,39,35,53,51, 22,23,33,53,51,3,53,33,6,7,22,51,50,5,50,23, 22,21,20,7,6,35,34,39,38,53,52,55,54,2,6,50, 64,45,67,90,94,54,22,39,39,32,86,42,6,1,14,114, 114,254,242,3,25,84,98,80,254,239,25,7,1,21,6,6, 23,8,2,22,5,1,221,254,35,92,42,65,38,39,58,93, 91,43,57,84,93,177,254,153,125,53,51,84,52,23,5,5, 22,9,2,22,6,5,23,8,2,0,0,3,255,254,255,244, 2,90,2,22,0,11,0,33,0,49,0,0,37,53,35,34, 7,6,21,20,23,22,51,50,17,33,53,33,21,35,17,35, 17,35,17,20,35,34,39,38,53,52,55,54,59,1,5,50, 23,22,21,20,7,6,35,34,39,38,53,52,55,54,1,40, 134,47,16,5,47,43,36,76,254,216,2,90,50,64,128,122, 90,61,57,63,26,33,144,254,247,25,7,1,21,6,6,23, 8,2,22,5,97,157,43,13,16,47,47,43,1,176,57,57, 254,35,1,221,254,125,102,61,57,76,85,31,13,251,23,5, 5,22,9,2,22,6,5,23,8,2,0,2,0,0,255,250, 1,220,2,22,0,25,0,41,0,0,1,35,17,35,53,35, 20,7,6,7,35,54,55,35,38,53,52,51,50,23,21,51, 53,33,53,33,3,50,23,22,21,20,7,6,35,34,39,38, 53,52,55,54,1,220,50,64,210,23,2,1,64,25,1,56, 1,96,16,9,210,254,150,1,220,231,25,7,1,21,6,6, 22,9,2,22,5,1,221,254,35,215,71,127,10,7,157,58, 8,14,92,1,56,205,57,254,38,23,5,5,22,9,2,21, 6,6,23,8,2,0,0,1,0,0,0,0,1,212,2,22, 0,54,0,0,55,38,53,52,51,50,23,22,23,55,54,55, 54,53,52,39,38,35,34,7,6,35,34,53,52,51,50,23, 51,54,55,54,53,33,53,33,21,35,20,7,6,7,22,21, 20,7,23,35,39,6,35,34,39,23,35,48,17,40,27,62, 59,23,41,77,14,3,50,19,23,22,29,42,55,93,109,41, 62,27,37,28,32,254,132,1,212,32,49,11,12,79,73,72, 72,50,17,33,76,68,30,64,90,37,11,24,24,24,2,2, 11,50,9,11,48,19,8,8,13,47,57,9,6,37,44,46, 57,57,80,56,12,9,48,74,73,49,76,58,10,36,84,0, 0,3,0,0,255,245,1,234,2,22,0,34,0,48,0,64, 0,0,1,35,21,33,34,7,20,23,54,55,54,51,50,23, 22,21,20,7,6,35,34,39,38,39,38,53,52,55,54,59, 1,53,33,53,33,3,52,35,34,7,6,21,20,23,22,51, 50,55,54,5,50,23,22,21,20,7,6,35,34,39,38,53, 52,55,54,1,234,22,254,234,84,1,61,27,78,31,33,83, 39,19,75,37,44,134,93,8,7,38,124,12,14,214,254,108, 1,234,68,86,60,32,16,68,14,15,66,23,8,254,165,25, 7,1,21,6,6,23,8,2,22,5,1,221,175,70,58,62, 63,22,9,48,24,32,68,30,15,108,9,10,53,64,114,11, 1,118,57,254,80,48,27,13,16,38,10,2,33,11,28,23, 5,5,22,9,2,22,6,5,23,8,2,0,0,2,0,0, 255,242,2,56,2,34,0,13,0,29,0,0,17,52,55,54, 51,50,22,21,20,6,35,34,39,38,37,52,39,38,35,34, 7,6,21,20,23,22,51,50,55,54,90,78,114,118,168,168, 118,128,82,72,1,248,74,63,83,98,67,55,74,63,83,98, 67,55,1,10,128,81,71,162,118,118,162,89,79,112,98,67, 58,76,64,83,98,67,58,76,64,0,0,2,0,0,0,0, 1,218,2,36,0,24,0,41,0,0,33,35,34,39,38,61, 1,6,35,34,39,38,53,52,55,54,51,50,23,22,21,17, 20,23,22,3,52,39,38,35,34,15,1,6,21,20,23,22, 51,50,55,54,1,218,66,66,18,10,52,73,93,56,40,76, 50,63,93,56,40,47,22,133,63,28,34,75,34,11,5,63, 28,34,75,34,16,41,21,83,108,39,62,44,61,87,48,32, 62,44,61,254,249,64,35,17,1,123,69,28,13,52,24,16, 18,69,28,13,52,25,0,1,255,250,0,2,1,250,2,37, 0,37,0,0,37,39,6,7,6,35,34,39,38,53,52,51, 50,23,54,55,54,53,52,39,38,35,34,7,6,7,55,54, 51,50,23,22,21,20,7,6,7,23,1,172,117,51,91,22, 17,67,39,24,130,76,118,79,19,7,65,62,76,87,111,19, 15,6,102,121,104,74,93,89,20,23,144,2,120,26,11,3, 41,24,31,82,57,21,68,26,36,53,41,43,53,9,9,70, 58,47,60,110,103,55,13,8,150,0,0,1,255,254,0,0, 1,168,2,24,0,57,0,0,3,52,55,54,51,50,23,22, 51,50,55,54,53,52,39,38,35,34,7,53,54,51,50,23, 22,21,20,7,22,21,20,7,23,35,47,1,35,34,39,38, 53,52,51,50,23,54,53,52,39,38,35,34,6,35,34,7, 35,34,2,82,17,29,4,50,40,32,57,24,11,41,47,90, 107,59,66,100,174,49,17,36,28,58,84,100,40,92,6,112, 50,24,106,29,139,56,29,9,12,28,110,14,10,9,24,87, 1,36,42,5,1,10,11,35,15,18,35,23,27,35,69,30, 87,29,39,57,56,43,43,63,49,70,30,2,36,18,24,34, 42,24,63,45,17,6,18,1,0,2,0,0,0,0,1,164, 2,22,0,43,0,59,0,0,19,20,23,22,51,50,55,54, 53,52,47,1,38,35,53,50,23,22,21,20,7,22,21,20, 7,6,43,1,34,39,38,53,52,55,38,53,52,55,54,51, 21,6,7,6,23,20,23,22,51,50,55,54,53,52,39,38, 35,34,7,6,64,65,37,44,66,43,37,62,32,4,4,95, 45,26,80,56,67,43,54,44,78,50,36,56,80,76,39,51, 72,23,7,24,66,26,30,77,32,13,68,25,29,75,32,15, 1,126,52,28,16,33,28,35,65,22,7,1,57,64,36,48, 78,50,41,67,77,44,29,57,41,52,67,41,50,78,89,39, 20,57,4,53,17,253,62,22,9,47,20,26,53,19,7,39, 17,0,0,1,255,248,0,0,1,160,2,22,0,25,0,0, 55,50,55,54,53,17,51,17,35,53,6,35,34,39,38,39, 54,53,52,39,51,22,21,20,7,22,211,65,47,29,64,64, 38,89,125,73,18,12,29,34,66,31,21,51,181,28,17,21, 1,31,253,234,160,36,69,17,20,96,59,72,77,68,86,70, 71,58,0,1,255,252,0,0,1,194,2,189,0,66,0,0, 1,50,23,22,21,20,35,39,49,34,7,6,21,20,23,22, 51,33,21,33,34,39,38,53,52,55,38,39,38,53,52,55, 54,55,38,53,52,55,54,51,50,23,21,39,49,34,21,20, 23,50,23,22,21,20,35,34,38,35,34,7,6,21,20,23, 22,51,55,1,82,53,30,14,79,196,45,18,6,51,14,16, 1,22,254,222,79,36,18,57,51,25,12,161,30,33,39,144, 32,38,13,14,54,114,56,64,29,13,38,18,102,40,72,44, 38,59,21,26,168,1,20,32,15,17,40,18,37,13,15,50, 14,4,57,56,28,37,71,32,19,48,24,25,96,36,6,4, 62,45,89,19,4,1,59,2,70,53,38,34,15,19,36,38, 29,26,35,48,18,6,22,0,0,1,0,0,0,0,1,233, 2,10,0,33,0,0,19,38,53,52,55,54,51,50,23,22, 21,20,7,6,7,6,35,53,50,55,54,55,54,53,52,39, 38,35,34,7,6,21,20,23,114,10,79,47,61,104,57,37, 9,38,162,121,159,155,114,114,32,9,60,32,41,78,30,14, 9,1,34,33,33,94,45,27,69,46,63,31,33,148,75,57, 57,65,62,102,28,27,70,36,19,59,26,33,26,32,0,1, 0,0,255,252,2,12,2,22,0,19,0,0,1,21,33,20, 23,22,59,1,21,35,34,39,38,53,35,52,55,54,51,21, 2,12,254,132,64,72,198,46,46,230,92,76,80,28,27,89, 1,190,57,184,70,80,59,104,86,203,89,28,28,88,0,1, 0,4,255,252,2,2,2,217,0,40,0,0,1,20,23,22, 23,21,33,20,23,22,23,22,51,21,6,35,34,39,38,53, 35,52,55,54,51,21,51,38,53,52,55,54,51,50,23,21, 38,35,34,7,6,1,105,106,20,23,254,142,33,27,58,81, 171,46,18,222,83,65,72,34,27,75,238,87,102,40,51,19, 11,18,17,73,31,14,2,61,86,65,13,10,52,138,54,43, 23,34,57,2,98,77,176,84,24,20,72,73,101,104,34,14, 1,57,3,50,22,0,0,1,254,143,2,62,255,101,2,207, 0,23,0,0,3,35,54,53,52,39,38,35,34,21,20,23, 35,38,53,52,55,54,51,50,31,2,20,183,40,12,34,8, 10,50,10,38,28,58,23,26,66,29,9,3,2,62,8,22, 34,11,3,48,20,10,38,32,48,19,8,38,17,20,32,0, 0,2,0,0,255,244,1,228,2,22,0,34,0,41,0,0, 37,6,7,6,35,34,47,1,52,55,54,55,38,39,35,53, 33,21,35,21,35,38,35,34,7,6,7,22,23,22,51,50, 55,54,51,39,53,33,22,23,22,23,1,228,2,63,48,57, 96,71,103,67,12,13,78,26,32,1,226,22,44,51,39,37, 27,116,24,7,44,79,48,36,60,63,15,78,254,214,12,52, 17,19,142,70,47,36,50,83,66,72,14,10,55,138,57,57, 227,5,5,24,68,7,36,69,48,48,169,166,83,55,19,9, 0,4,0,0,255,240,2,68,2,219,0,31,0,40,0,50, 0,59,0,0,1,35,20,7,6,7,22,21,20,15,1,6, 35,34,39,38,39,38,39,38,39,35,53,51,54,55,23,22, 23,22,23,51,35,38,39,38,35,34,7,6,7,5,33,7, 49,20,23,33,54,55,54,3,50,55,54,53,52,39,33,22, 2,68,22,57,18,21,36,81,33,27,31,104,81,36,19,29, 19,5,1,32,32,42,214,55,129,56,24,6,22,96,8,74, 54,60,98,53,24,7,1,122,254,134,2,14,1,36,32,23, 19,158,58,32,18,18,254,232,62,1,221,94,84,28,17,46, 66,98,40,13,7,96,44,50,76,159,40,28,57,192,4,3, 15,92,38,48,60,40,29,63,29,37,67,55,72,48,19,62, 51,254,139,43,25,31,42,33,174,0,0,5,0,0,255,248, 3,212,2,192,0,51,0,74,0,84,0,93,0,109,0,0, 1,35,53,52,35,34,7,38,35,34,7,6,7,33,21,35, 20,7,6,7,22,21,20,7,6,35,34,39,38,39,38,39, 38,39,35,53,51,54,55,54,51,50,23,22,23,54,51,50, 31,1,22,21,1,34,39,38,53,52,55,54,51,50,23,22, 29,1,20,23,35,34,39,38,61,1,6,37,33,20,7,20, 23,51,54,55,54,7,52,39,35,22,51,50,55,54,37,52, 39,38,35,34,7,6,21,20,23,22,51,50,55,54,3,212, 64,57,117,67,43,50,62,43,18,7,1,151,19,55,13,15, 32,73,33,42,68,61,64,25,10,10,12,2,28,28,23,64, 43,51,40,51,5,9,89,105,54,36,13,8,252,195,73,46, 32,63,41,47,83,43,25,96,66,66,18,10,38,2,64,254, 188,1,11,251,35,19,9,43,15,241,54,110,55,26,11,254, 16,45,20,21,48,26,12,43,21,22,48,26,12,2,79,16, 40,99,58,74,32,35,57,83,71,17,13,41,55,87,34,15, 53,55,91,37,60,71,49,57,105,57,37,30,2,6,78,36, 17,14,15,254,115,49,34,43,64,38,24,54,31,41,233,108, 10,41,21,83,102,22,183,41,7,59,44,20,72,32,246,37, 28,149,42,19,239,40,20,9,34,16,19,39,20,10,34,16, 0,2,254,193,1,228,0,88,2,162,0,12,0,26,0,0, 3,50,31,1,20,7,6,35,34,39,38,53,54,23,6,7, 6,35,34,39,38,39,51,22,51,50,55,118,28,11,4,27, 8,8,27,11,3,1,246,8,22,54,118,119,55,24,7,92, 12,101,88,17,2,162,24,17,24,10,3,24,7,8,39,57, 39,27,67,67,29,37,80,80,0,1,255,72,1,253,255,198, 2,125,0,15,0,0,3,50,23,22,21,20,7,6,35,34, 39,38,53,52,55,54,121,41,16,6,34,13,16,38,18,7, 37,12,2,125,37,13,15,38,18,7,34,13,16,44,16,5, 0,1,0,39,0,0,2,187,1,187,0,47,0,0,37,50, 55,54,61,1,51,21,51,53,51,17,35,53,35,21,20,7, 6,35,34,39,35,39,51,50,55,54,53,52,43,1,55,51, 50,23,22,23,20,21,20,7,6,39,23,22,23,22,1,46, 58,34,20,89,101,95,94,100,85,52,66,196,19,47,1,142, 41,11,2,59,111,1,158,68,25,8,2,70,42,33,2,1, 2,26,90,45,26,33,205,99,143,254,69,230,56,82,42,26, 163,72,40,9,11,56,68,67,23,27,6,5,82,31,20,5, 17,4,5,71,0,2,0,39,0,0,3,125,1,187,0,3, 0,51,0,0,33,35,17,51,1,50,55,54,61,1,51,21, 51,53,51,17,35,53,35,21,20,7,6,35,34,39,35,39, 51,50,55,54,53,52,43,1,55,51,50,23,22,23,20,21, 20,7,6,39,23,22,23,22,3,125,93,93,253,177,58,34, 20,89,101,95,94,100,85,52,66,196,19,47,1,142,41,11, 2,59,111,1,158,68,25,8,2,70,42,33,2,1,2,26, 1,187,254,159,45,26,33,205,99,143,254,69,230,56,82,42, 26,163,72,40,9,11,56,68,67,23,27,6,5,82,31,20, 5,17,4,5,71,0,0,1,0,40,255,254,1,241,1,189, 0,48,0,0,1,35,34,7,6,29,1,20,7,6,35,34, 39,52,55,38,53,52,55,54,59,1,7,35,34,7,6,59, 1,21,35,34,7,6,21,22,23,22,51,50,55,54,61,1, 52,55,54,59,1,1,241,34,20,9,3,84,45,56,205,1, 59,57,36,28,23,136,1,74,47,1,2,53,72,64,30,19, 10,2,55,18,21,39,28,30,68,5,6,83,1,117,19,6, 6,217,74,34,19,145,51,41,29,73,43,35,28,69,46,57, 73,31,15,20,44,15,6,17,21,25,223,84,7,1,0,1, 0,40,255,254,1,237,2,102,0,50,0,0,1,35,34,21, 3,20,7,6,35,34,39,52,63,2,38,53,52,55,54,59, 1,7,35,34,7,6,21,22,59,1,21,7,6,21,22,23, 22,51,50,51,54,55,54,53,17,52,55,54,59,1,1,237, 35,32,1,87,41,51,205,1,25,25,1,49,36,28,23,136, 1,74,32,13,5,1,51,72,64,65,2,51,24,26,2,3, 47,31,17,22,21,28,83,2,42,41,254,124,79,33,15,145, 42,28,21,1,33,69,43,35,28,69,33,11,13,52,59,1, 1,58,48,23,10,2,34,19,20,1,123,49,22,24,0,1, 0,40,255,245,1,203,2,118,0,61,0,0,1,52,39,38, 43,1,53,51,50,23,22,21,20,21,6,7,22,23,22,21, 20,7,6,7,6,39,38,53,17,52,55,54,55,23,22,23, 7,38,39,38,35,34,35,6,21,3,20,23,22,51,54,55, 52,47,1,43,1,39,51,50,55,54,1,102,37,10,11,83, 136,54,28,15,1,54,31,3,30,108,45,55,91,62,58,62, 60,106,46,84,58,52,6,26,40,59,3,3,129,1,53,27, 32,107,1,33,19,5,75,1,76,40,14,4,1,69,36,10, 3,69,48,26,30,2,2,90,18,15,3,29,57,86,33,13, 1,2,50,45,60,1,20,92,58,58,2,3,13,68,57,16, 23,35,4,128,254,219,43,22,12,2,64,44,17,6,72,36, 11,0,0,1,0,40,255,246,2,122,2,107,0,59,0,0, 23,34,39,38,53,17,52,55,54,51,50,23,22,21,3,35, 19,52,39,38,35,34,7,6,21,3,20,23,22,51,50,55, 54,55,39,38,43,1,39,51,50,53,38,43,1,53,51,50, 23,22,21,20,7,6,35,22,21,20,7,6,251,110,60,41, 110,73,98,123,93,97,1,94,1,64,69,84,120,47,22,1, 30,35,52,79,23,6,1,3,10,46,73,1,74,60,2,58, 83,136,56,27,14,35,22,14,80,100,48,10,58,39,56,1, 20,109,55,36,57,58,85,254,93,1,163,44,43,45,63,29, 40,254,232,27,26,30,44,12,14,26,39,70,62,51,69,51, 26,31,57,32,19,20,84,83,34,16,0,1,0,30,255,246, 3,48,1,187,0,64,0,0,1,7,21,35,53,7,39,55, 52,39,38,35,34,7,6,7,6,21,39,52,55,54,51,50, 23,22,23,22,29,1,63,1,51,21,55,38,53,52,51,50, 23,15,1,6,7,22,23,22,21,20,7,6,35,34,39,55, 22,51,50,55,54,53,52,39,38,2,115,139,95,231,65,183, 28,35,36,23,27,19,17,13,52,39,49,61,80,50,10,7, 13,54,1,95,112,6,56,67,3,3,7,10,18,36,52,45, 86,27,29,74,41,47,28,35,10,12,48,40,53,1,31,66, 221,184,134,64,84,18,66,83,32,24,39,27,7,82,16,44, 58,109,21,23,39,14,4,28,189,155,49,9,26,61,61,28, 18,15,7,30,55,53,57,77,32,10,71,41,42,5,23,37, 36,36,47,0,0,1,0,39,255,249,2,39,1,197,0,43, 0,0,1,50,23,22,23,7,38,35,34,7,22,23,22,51, 33,23,35,22,23,20,7,6,35,34,39,55,22,23,22,51, 50,55,52,39,38,35,7,39,55,38,53,54,55,54,1,3, 54,73,10,5,6,45,52,83,1,2,27,8,8,1,35,1, 174,82,1,109,40,50,112,92,72,7,32,45,49,102,1,39, 29,11,233,14,144,75,2,85,29,1,197,16,2,2,69,19, 41,33,12,3,56,30,82,93,29,11,70,69,14,19,30,73, 41,30,23,56,74,28,16,64,64,20,7,0,0,1,0,39, 0,0,2,71,1,187,0,33,0,0,1,53,51,17,35,53, 35,21,20,7,6,35,34,39,38,61,2,38,43,1,55,51, 50,31,1,21,20,51,50,61,1,51,21,1,234,93,93,88, 34,40,68,69,44,40,3,16,49,1,94,57,10,2,51,56, 90,1,57,130,254,69,237,15,41,34,41,39,34,51,117,17, 9,70,56,21,133,51,49,168,86,0,0,2,0,39,0,0, 2,39,1,197,0,3,0,36,0,0,33,35,17,51,37,50, 23,22,23,20,21,6,35,34,39,38,39,55,6,23,22,51, 50,55,54,55,39,38,39,38,35,34,7,6,7,53,54,2, 39,93,93,254,159,128,46,18,1,1,188,70,52,32,9,72, 5,26,30,39,72,19,5,1,3,5,18,27,50,46,33,5, 2,39,1,187,10,84,34,45,4,4,181,48,29,23,43,4, 32,36,68,18,21,30,26,19,31,11,2,2,73,10,0,1, 0,38,0,0,2,8,1,199,0,46,0,0,37,48,17,51, 17,35,53,6,7,6,35,34,39,38,53,52,55,38,39,38, 53,55,54,55,54,51,50,23,7,38,35,34,35,6,21,20, 59,1,23,35,34,7,6,23,22,55,54,1,171,93,93,40, 84,30,22,114,60,38,71,18,20,33,3,12,40,44,67,87, 36,1,34,38,4,4,109,62,106,1,105,62,1,1,112,57, 63,44,177,1,10,254,69,90,33,18,6,54,35,49,55,35, 5,18,27,37,25,38,20,24,12,71,12,1,45,54,67,52, 51,6,3,33,22,0,0,2,0,40,255,244,2,21,1,197, 0,15,0,60,0,0,1,50,31,1,21,20,7,6,35,34, 39,38,53,52,55,54,3,50,55,54,53,39,38,47,1,38, 39,38,39,38,53,55,54,55,50,23,7,38,35,34,21,20, 31,2,22,23,22,21,20,7,6,35,34,39,38,39,55,22, 23,22,1,223,35,14,5,30,12,13,36,13,4,31,11,211, 71,30,12,3,8,28,35,3,4,88,41,51,3,21,154,48, 46,2,39,55,83,86,32,2,102,30,10,102,44,56,85,73, 47,16,76,8,34,50,1,110,32,20,3,32,14,6,32,9, 11,35,15,5,254,206,38,15,20,19,21,15,14,1,1,24, 24,32,46,32,90,1,15,76,21,50,26,24,8,1,26,61, 20,22,104,37,16,46,28,26,53,15,27,39,0,1,0,39, 0,35,1,181,1,187,0,39,0,0,37,6,7,6,35,34, 39,38,39,35,55,51,50,55,54,55,39,38,43,1,55,51, 50,23,22,21,20,7,6,7,6,35,34,39,22,51,54,55, 54,55,1,181,20,39,58,50,103,50,18,13,47,1,152,48, 13,2,1,3,10,51,127,1,168,72,31,14,53,4,4,38, 52,15,3,13,97,43,52,47,2,96,17,17,27,77,28,55, 71,38,8,9,20,32,70,62,28,32,67,34,3,2,21,1, 86,2,33,29,11,0,0,2,0,40,255,254,2,39,1,193, 0,56,0,71,0,0,19,20,23,22,59,1,7,35,34,7, 6,21,23,22,51,50,55,6,35,34,39,52,55,54,55,23, 22,31,1,22,21,20,21,6,7,6,35,34,39,38,53,52, 53,54,55,34,39,38,53,52,55,54,59,1,7,35,34,5, 50,55,54,53,52,39,38,35,34,7,23,22,23,22,134,29, 10,11,60,1,32,31,19,7,3,18,113,114,52,18,13,132, 2,55,30,39,32,62,27,11,5,2,68,75,115,190,37,8, 1,72,18,27,43,40,24,28,115,1,61,50,1,28,37,11, 3,29,10,13,51,4,3,10,29,7,1,74,35,13,5,73, 31,13,12,23,54,105,2,122,85,43,23,1,3,14,74,44, 31,36,3,3,95,70,77,98,21,25,3,3,55,37,18,28, 54,51,33,19,69,141,44,12,13,47,21,7,73,21,37,11, 2,0,0,1,0,40,255,252,2,84,1,199,0,54,0,0, 55,34,39,38,53,52,55,54,51,50,23,22,23,22,21,55, 23,7,22,23,22,21,20,21,6,7,6,35,38,39,38,53, 52,55,54,55,54,39,38,35,34,7,6,21,20,23,22,51, 50,55,54,39,21,7,6,175,69,40,26,36,35,59,96,87, 6,5,29,139,64,161,8,13,18,2,56,13,20,66,19,6, 23,16,8,3,60,65,37,37,16,6,37,12,15,17,20,16, 1,18,19,164,58,38,49,66,39,41,113,7,8,41,5,170, 68,163,8,32,41,28,2,2,85,20,5,2,65,20,25,32, 48,32,8,7,71,77,43,16,17,47,19,7,12,11,1,73, 12,10,0,1,0,39,255,255,2,32,1,194,0,66,0,0, 55,50,55,54,53,52,39,38,35,34,7,55,54,51,22,23, 54,63,1,22,23,54,53,51,20,7,6,35,22,23,7,6, 7,6,7,39,38,39,38,53,55,22,51,55,54,55,54,53, 52,39,38,35,34,7,6,7,21,20,7,6,35,34,39,38, 39,53,22,103,70,26,10,15,24,51,25,37,1,54,31,120, 23,14,54,32,20,21,19,98,50,16,4,56,3,3,14,74, 18,21,32,7,8,27,1,21,19,15,17,16,19,42,16,21, 22,20,16,2,49,49,73,14,7,25,42,36,65,86,35,41, 52,42,63,25,74,17,2,113,12,21,3,1,6,19,60,57, 37,13,46,88,52,111,30,8,1,2,1,2,6,1,74,21, 3,8,26,36,58,69,26,10,24,18,9,46,80,61,64,1, 3,22,73,33,0,1,0,40,0,0,2,47,1,195,0,37, 0,0,19,54,51,50,23,22,23,51,53,51,17,35,53,35, 22,7,6,7,6,35,34,39,38,39,55,22,23,22,51,50, 55,39,38,39,38,35,34,7,78,49,52,91,60,36,10,90, 93,93,90,2,14,45,115,12,12,38,53,41,8,34,8,47, 26,15,110,5,3,13,54,21,24,62,29,1,168,26,67,40, 52,152,254,69,213,9,39,116,12,1,29,23,11,75,17,21, 11,126,31,58,23,9,23,0,0,1,0,40,255,244,1,179, 1,194,0,38,0,0,55,50,55,54,55,23,6,7,6,35, 34,39,38,53,52,55,54,55,38,39,38,35,34,7,55,54, 51,22,23,22,21,6,7,6,7,6,7,23,22,246,57,55, 19,10,48,42,97,28,28,127,49,24,148,104,1,2,43,14, 25,42,55,1,37,64,127,34,10,2,37,31,87,87,2,3, 15,56,54,19,19,77,60,18,5,76,36,50,80,42,29,36, 36,6,2,26,83,12,3,67,20,28,48,25,20,26,25,59, 24,49,0,2,0,40,255,244,1,203,1,194,0,33,0,53, 0,0,55,52,55,54,55,38,53,54,55,54,55,50,23,7, 38,35,34,7,23,22,23,22,23,22,23,22,21,20,7,6, 35,34,39,38,23,50,55,54,53,39,38,39,38,39,7,6, 7,6,21,20,23,22,23,22,40,61,27,31,46,2,98,33, 39,53,38,1,34,58,72,3,3,11,90,8,4,91,32,12, 93,45,60,182,33,6,219,48,32,20,3,12,56,34,40,14, 11,15,40,7,10,21,35,143,67,39,17,5,25,34,83,27, 9,1,12,75,20,56,10,19,16,1,1,15,63,25,29,101, 40,19,109,21,60,37,23,27,21,34,16,13,11,4,5,10, 26,42,16,16,22,15,26,0,0,1,0,40,255,244,1,206, 1,197,0,44,0,0,37,50,55,54,53,39,38,47,1,38, 39,38,39,38,53,55,54,55,50,23,7,38,35,34,21,20, 31,2,22,23,22,21,20,7,6,35,34,39,38,39,55,22, 23,22,0,255,73,29,11,3,8,28,35,3,4,89,40,51, 3,21,154,47,47,2,39,55,83,86,32,2,102,30,10,102, 44,56,85,73,48,14,75,7,35,49,60,39,15,19,19,21, 15,14,1,1,24,24,32,46,32,90,1,15,76,21,50,26, 24,8,1,26,61,20,22,104,37,16,46,30,24,53,15,27, 39,0,0,1,0,39,255,243,1,187,1,194,0,43,0,0, 37,50,23,20,21,6,7,6,39,38,39,55,54,55,54,53, 52,35,34,7,55,54,51,22,23,22,21,6,7,6,7,6, 21,20,23,22,51,50,55,54,55,54,55,54,1,84,101,1, 2,70,58,65,204,3,3,19,123,106,90,43,54,1,37,65, 129,39,13,2,39,36,85,85,48,22,17,6,6,1,2,9, 58,14,167,75,2,3,47,28,26,2,1,159,26,67,33,28, 35,42,26,85,12,3,64,22,31,50,26,23,18,18,54,57, 19,9,1,9,20,63,14,4,0,3,0,39,255,240,2,47, 1,193,0,3,0,31,0,50,0,0,33,35,17,51,7,6, 7,6,35,34,39,53,22,51,54,55,39,38,47,1,34,35, 6,7,55,54,51,50,23,22,21,20,7,50,55,54,55,23, 6,15,1,38,39,38,53,19,51,3,20,23,22,2,47,93, 93,150,2,86,26,31,30,31,33,18,66,1,2,11,40,24, 1,2,9,29,1,29,34,62,41,39,159,58,51,8,6,24, 33,89,29,96,58,53,1,96,1,52,28,1,187,143,112,29, 9,19,66,16,3,82,26,43,9,1,2,17,69,15,42,40, 61,3,249,22,4,4,76,15,6,1,3,61,56,76,1,6, 254,248,74,34,18,0,0,1,0,39,255,254,1,209,1,187, 0,26,0,0,1,53,51,17,35,17,35,34,7,6,21,23, 22,51,50,55,15,1,39,38,39,38,53,52,55,54,51,1, 116,93,93,134,70,25,9,3,17,107,18,5,23,27,35,120, 31,9,63,47,57,1,97,90,254,69,1,26,59,21,27,31, 72,1,73,1,5,20,101,29,35,78,50,36,0,1,0,39, 0,0,2,4,1,207,0,55,0,0,1,20,7,6,7,38, 35,6,21,20,23,22,23,55,54,55,54,55,53,51,17,35, 53,6,7,6,35,34,39,38,53,52,55,54,51,55,54,53, 52,39,38,35,34,21,20,23,35,38,53,52,55,54,51,50, 23,22,1,90,88,21,25,15,31,29,47,27,28,37,40,45, 54,8,93,93,23,37,56,64,108,58,38,33,12,51,48,80, 33,13,15,44,38,81,42,59,32,37,68,38,39,1,76,95, 28,7,2,1,2,15,34,22,13,1,3,7,25,29,16,249, 254,69,112,16,17,23,59,38,55,32,8,2,3,12,60,44, 20,7,44,22,26,26,36,55,28,14,35,33,0,1,0,40, 255,249,1,168,1,197,0,41,0,0,19,20,23,22,59,1, 21,35,34,7,6,21,22,23,22,23,55,54,55,23,6,35, 34,39,38,53,52,55,34,39,38,53,52,55,54,51,50,23, 21,38,35,34,139,39,11,12,119,114,44,16,6,1,27,28, 41,31,52,49,55,76,107,105,57,39,65,11,22,32,79,42, 52,51,74,51,36,111,1,69,30,11,3,66,40,14,14,34, 22,23,2,3,12,56,71,73,60,40,57,60,41,19,27,40, 68,31,17,15,71,15,0,1,0,36,0,0,2,3,2,3, 0,54,0,0,55,20,23,22,51,50,55,54,55,39,51,17, 35,55,6,7,34,35,39,38,39,38,53,52,55,38,39,38, 39,38,53,52,55,54,53,52,39,23,22,21,20,7,6,15, 1,6,21,20,23,22,59,1,23,35,34,140,63,21,22,47, 67,55,8,1,93,93,1,102,77,4,3,49,98,35,13,81, 54,23,5,2,3,107,27,3,76,5,55,40,8,5,1,23, 21,20,106,1,105,63,170,39,14,5,37,30,13,251,254,69, 99,53,6,3,14,62,23,29,55,35,29,42,9,9,14,10, 64,26,8,25,9,9,25,15,12,43,19,15,10,14,3,4, 19,16,18,69,0,2,0,39,0,0,2,27,1,187,0,12, 0,35,0,0,37,38,39,38,35,34,21,22,23,55,54,55, 54,23,20,7,6,35,34,39,38,53,52,55,54,51,33,53, 51,17,35,17,35,31,1,22,1,14,2,30,4,22,77,1, 65,23,36,8,2,73,69,33,41,102,40,19,65,33,41,1, 12,93,93,129,13,1,12,216,47,16,4,62,55,2,3,10, 28,6,10,62,28,13,60,28,37,74,35,17,94,254,69,1, 23,17,1,23,0,1,0,39,0,0,1,187,1,187,0,35, 0,0,37,17,51,17,35,53,6,15,1,38,39,38,61,1, 47,1,38,43,1,55,51,50,23,22,29,1,20,23,22,51, 55,54,55,50,55,54,1,94,93,93,32,65,20,69,45,29, 1,5,5,9,31,1,75,40,20,9,43,13,15,31,13,15, 11,21,3,185,1,2,254,69,111,23,5,1,3,49,33,40, 146,12,6,2,70,38,18,21,152,37,14,5,3,2,5,15, 2,0,0,1,0,40,255,151,2,18,1,197,0,55,0,0, 19,20,23,22,51,37,23,7,50,23,22,21,6,7,6,35, 34,39,23,35,39,38,39,38,39,55,22,23,22,51,50,55, 54,55,54,55,39,38,39,7,39,55,38,53,54,55,54,51, 50,23,22,23,7,38,7,6,219,25,9,5,1,3,13,170, 14,41,50,4,97,41,50,22,4,131,115,89,47,23,14,35, 72,7,30,41,50,27,23,13,12,36,2,3,15,79,220,11, 151,67,2,91,21,25,76,54,5,4,6,28,68,81,1,68, 13,13,4,33,75,14,30,37,47,84,30,12,2,105,110,12, 16,5,27,55,13,17,23,7,4,7,21,38,22,44,20,46, 84,15,25,57,68,16,4,17,1,2,62,13,1,3,0,1, 0,38,0,88,1,251,1,197,0,32,0,0,55,50,55,54, 61,1,51,21,51,7,35,21,6,7,6,7,39,38,53,52, 55,54,51,50,23,21,38,39,34,21,20,21,22,230,56,23, 9,92,97,1,96,5,46,47,71,51,151,70,32,42,34,41, 16,47,60,4,159,50,20,24,137,71,71,36,51,34,36,2, 3,21,173,107,41,19,11,63,5,1,102,4,5,115,0,1, 0,40,0,46,1,245,1,215,0,45,0,0,1,50,23,22, 29,1,51,21,35,21,20,7,6,35,34,35,38,39,38,53, 52,53,54,51,53,52,39,38,39,7,6,7,6,21,20,23, 22,23,7,38,39,38,53,52,55,54,1,1,71,48,35,90, 89,43,16,19,2,2,42,20,21,3,70,49,13,15,24,31, 25,34,32,23,14,68,19,29,42,89,53,1,215,49,35,44, 49,73,22,49,19,6,2,24,22,38,3,3,77,51,40,14, 4,1,3,8,33,44,65,65,56,39,8,37,15,47,68,65, 133,61,36,0,0,1,0,40,0,108,1,54,1,196,0,26, 0,0,55,34,39,38,53,52,51,53,52,39,38,35,34,7, 53,54,51,50,29,1,51,7,35,21,20,7,6,133,64,15, 4,82,20,5,6,29,32,48,26,106,90,1,89,49,18,108, 53,13,15,81,48,55,7,2,12,73,9,96,87,72,30,39, 15,5,0,1,255,175,0,0,2,2,1,188,0,57,0,0, 1,20,7,6,7,35,34,39,38,49,34,7,23,22,23,22, 51,50,51,54,55,17,51,3,35,39,6,7,6,35,34,39, 38,53,52,55,54,59,1,50,55,54,53,52,39,38,35,34, 7,6,7,55,54,55,23,22,23,22,1,85,58,18,20,36, 4,4,30,27,1,3,7,24,37,49,3,2,94,58,94,1, 93,1,11,34,53,52,87,68,75,26,10,11,86,40,24,10, 65,23,27,82,72,49,9,1,92,80,78,70,40,61,1,54, 63,27,8,2,1,2,21,17,18,18,30,2,67,1,9,254, 69,85,11,16,25,51,56,82,25,13,5,26,11,13,41,15, 6,30,26,5,86,39,2,3,6,20,33,0,0,1,0,39, 0,55,1,167,1,207,0,51,0,0,1,20,7,6,7,38, 35,6,21,20,23,22,23,55,54,55,54,55,21,6,7,6, 35,34,39,38,53,52,55,54,51,55,54,53,52,39,38,35, 34,21,20,23,35,38,53,52,55,54,51,50,23,22,1,90, 88,21,25,15,31,29,47,27,28,37,40,45,54,8,23,37, 56,64,108,58,38,33,12,51,48,80,33,13,15,44,38,81, 42,59,32,37,68,38,39,1,76,95,28,7,2,1,2,15, 34,22,13,1,3,7,25,29,16,82,16,17,23,59,38,55, 32,8,2,3,12,60,44,20,7,44,22,26,26,36,55,28, 14,35,33,0,0,2,0,39,0,0,1,240,1,189,0,28, 0,36,0,0,55,34,39,38,53,52,55,54,55,23,22,23, 7,38,35,34,7,6,21,20,23,22,51,50,55,54,55,7, 6,19,53,51,17,35,53,35,53,240,90,60,51,69,52,68, 52,20,20,1,29,21,91,32,12,84,22,28,23,22,4,3, 1,46,130,93,93,172,10,75,63,83,99,64,47,3,2,3, 4,67,10,78,31,39,116,28,8,12,2,2,73,11,0,255, 178,254,69,196,69,0,0,1,0,40,0,0,2,82,1,192, 0,41,0,0,1,38,35,6,21,20,21,7,6,7,6,35, 38,39,38,53,52,55,54,51,50,23,7,38,35,6,7,6, 21,22,23,54,55,54,53,52,55,54,59,1,17,35,1,245, 21,46,61,1,11,84,21,28,95,54,39,61,28,38,17,52, 1,21,21,44,12,3,1,87,53,12,4,65,28,41,169,93, 1,97,31,3,148,10,11,63,114,20,5,1,86,62,79,135, 52,23,15,64,8,3,89,22,22,156,1,2,69,28,58,148, 38,16,254,69,0,1,0,39,0,0,1,202,1,187,0,29, 0,0,37,6,35,34,39,38,53,52,55,54,55,54,23,21, 38,35,34,7,6,21,20,51,50,55,54,55,53,51,17,35, 1,109,72,72,129,39,14,83,35,45,40,41,22,28,45,22, 28,108,39,42,30,8,93,93,114,51,100,36,46,94,38,17, 2,2,14,66,7,16,21,52,90,24,16,11,246,254,69,0, 0,2,0,39,0,0,2,1,1,202,0,3,0,55,0,0, 33,35,17,51,7,6,7,6,7,22,31,1,22,23,22,23, 35,38,39,38,39,38,43,1,39,51,50,55,54,55,39,38, 39,7,6,7,23,22,23,50,55,23,6,43,1,38,39,38, 53,52,55,54,51,50,23,22,2,1,93,93,135,2,129,21, 23,41,45,3,22,24,9,1,107,22,68,4,3,16,49,39, 1,128,65,34,17,1,3,13,68,28,40,3,3,9,28,17, 15,13,17,33,8,70,29,13,84,28,34,105,52,31,1,187, 143,123,29,4,2,7,42,3,20,46,16,8,95,20,1,1, 3,71,54,27,34,27,55,6,3,9,35,15,21,1,10,54, 10,1,48,21,27,75,22,8,65,38,0,2,0,39,0,0, 1,226,1,187,0,9,0,29,0,0,37,39,21,20,23,22, 51,50,55,54,55,53,51,17,35,53,6,15,1,38,39,38, 53,55,39,38,43,1,55,51,1,126,191,44,12,14,51,40, 27,10,93,93,37,66,35,68,50,37,1,1,4,15,38,1, 109,206,152,144,46,13,4,26,18,53,195,254,69,128,31,13, 3,1,47,36,42,148,11,7,70,0,0,1,0,39,0,0, 2,23,1,187,0,40,0,0,1,53,51,17,35,53,35,6, 7,6,35,48,23,22,59,1,21,35,34,47,1,35,55,51, 50,55,54,53,38,39,38,43,1,53,51,50,31,1,22,23, 21,1,186,93,93,115,8,38,35,49,24,5,18,123,191,38, 9,31,59,1,159,34,19,9,1,38,12,13,123,162,65,34, 12,4,2,1,45,142,254,69,235,12,29,20,94,10,70,41, 133,70,34,15,18,42,15,5,70,52,26,13,14,37,0,1, 0,38,255,217,1,219,1,204,0,62,0,0,37,52,39,38, 35,34,7,6,7,6,23,22,51,55,54,55,21,6,35,34, 39,38,39,55,54,55,38,53,52,23,22,23,7,38,39,15, 1,6,21,20,23,22,23,22,23,22,23,22,21,20,15,1, 6,35,34,39,38,61,1,22,23,55,54,1,127,75,25,29, 88,23,6,1,2,47,44,65,55,67,48,66,104,114,66,68, 3,2,15,107,19,144,67,35,1,20,63,37,12,28,37,53, 21,86,34,12,2,1,65,41,17,21,21,42,31,16,56,30, 44,209,47,17,5,66,17,21,66,42,41,3,9,33,76,33, 57,58,95,38,88,37,28,28,70,1,2,14,66,20,3,1, 3,9,25,21,6,8,3,13,53,17,21,6,6,76,19,8, 2,5,5,1,68,5,8,2,9,0,0,1,0,40,255,244, 1,207,1,188,0,40,0,0,37,20,7,6,35,34,39,38, 39,55,22,23,22,51,50,55,39,38,39,38,39,38,39,55, 54,55,54,51,50,51,50,23,21,35,34,7,20,23,22,23, 22,1,206,130,33,39,85,73,46,16,64,3,43,55,51,114, 2,3,14,75,100,27,47,2,2,9,29,42,92,4,4,73, 39,115,80,2,43,52,25,143,136,116,25,7,49,31,26,64, 15,35,47,62,19,37,22,29,16,28,55,28,34,21,31,1, 69,44,22,16,16,7,44,0,0,1,0,70,0,0,0,163, 1,187,0,3,0,0,51,35,17,51,163,93,93,1,187,0, 0,1,0,69,0,0,2,46,2,151,0,20,0,0,1,34, 7,6,21,17,35,19,52,55,54,51,50,51,22,23,22,23, 7,39,38,1,36,82,33,14,94,1,88,44,60,3,2,144, 86,48,13,80,18,65,2,76,72,32,41,254,69,1,187,138, 54,27,2,68,39,36,35,28,75,0,0,1,255,77,0,0, 0,163,2,159,0,22,0,0,51,35,19,52,39,38,39,7, 6,21,20,23,35,38,53,52,53,54,51,50,23,22,21,163, 94,1,39,29,39,23,30,11,73,26,5,119,79,70,68,1, 155,85,58,42,1,3,10,43,24,36,29,45,3,3,110,88, 85,87,0,1,254,80,254,225,255,131,255,158,0,31,0,0, 5,50,55,54,53,52,35,34,35,6,7,39,63,1,54,51, 50,23,22,23,22,21,20,7,6,35,34,35,38,39,55,22, 254,215,64,28,9,51,6,7,47,15,33,25,1,34,39,24, 22,70,13,2,83,33,40,7,7,82,55,37,40,228,21,7, 8,34,3,15,47,15,1,14,6,17,57,10,11,57,21,8, 5,50,49,46,0,1,254,79,254,206,255,235,255,160,0,29, 0,0,5,52,55,54,51,50,23,22,23,7,52,39,38,39, 35,6,7,22,51,50,51,54,53,23,6,7,39,38,39,38, 254,79,91,33,41,106,79,45,17,64,41,55,70,38,62,6, 1,51,4,4,56,30,11,77,40,75,16,3,208,77,26,9, 79,43,43,45,21,53,69,4,14,36,40,3,8,52,12,1, 3,12,55,12,0,1,254,189,254,243,255,243,0,1,0,21, 0,0,5,52,55,54,59,1,21,35,34,7,6,21,22,51, 50,55,23,6,35,34,39,38,254,189,53,32,39,135,98,47, 23,11,1,98,41,52,38,55,82,74,49,50,129,67,38,24, 67,30,14,16,76,37,67,36,40,41,0,1,254,144,1,187, 255,192,2,153,0,3,0,0,3,35,39,51,64,80,224,124, 1,187,222,0,0,1,254,117,1,187,255,191,2,168,0,6, 0,0,3,39,55,23,35,39,55,181,97,86,127,77,253,67, 2,9,130,29,237,149,59,0,0,2,255,102,0,0,0,163, 2,153,0,3,0,7,0,0,19,35,39,51,19,35,17,51, 150,80,224,124,193,93,93,1,187,222,253,103,1,187,0,2, 255,75,0,0,0,163,2,168,0,6,0,10,0,0,19,39, 55,23,35,39,55,1,35,17,51,33,97,86,127,77,253,67, 1,21,93,93,2,9,130,29,237,149,59,253,117,1,187,0, 0,4,0,30,255,246,3,67,2,162,0,15,0,32,0,78, 0,127,0,0,1,50,23,22,21,20,7,6,35,34,39,38, 53,52,55,54,23,6,7,6,7,39,38,39,38,39,51,22, 51,50,51,54,55,19,6,7,6,35,34,39,38,39,55,22, 23,22,51,50,55,54,53,52,39,38,35,34,15,1,6,35, 34,47,1,49,53,22,51,50,63,1,54,51,50,23,22,23, 22,21,20,37,34,15,1,39,54,51,50,51,22,21,20,7, 22,23,22,21,20,21,6,7,6,35,34,39,38,39,55,31, 1,22,51,50,55,39,38,39,38,43,1,55,51,50,55,39, 38,47,1,38,1,199,30,11,3,28,7,8,27,11,3,26, 7,233,10,5,52,155,55,117,38,7,6,92,39,85,4,3, 99,26,250,2,66,42,61,72,47,26,9,36,4,28,37,32, 42,29,32,13,16,33,35,23,44,29,76,18,9,13,20,13, 37,11,66,35,63,18,17,48,28,38,253,181,46,52,10,4, 80,45,4,4,164,56,28,5,30,2,103,36,44,94,73,47, 10,81,6,11,57,70,82,2,2,10,34,5,5,83,1,82, 49,1,3,6,21,26,14,2,162,26,7,8,26,9,2,24, 7,8,27,10,2,57,24,13,93,3,3,14,79,22,15,80, 3,77,254,126,125,63,42,26,21,7,72,9,20,25,44,48, 76,43,34,45,41,88,48,2,1,67,3,18,119,51,4,13, 43,56,88,3,146,12,3,68,15,3,108,90,20,19,5,30, 45,3,2,95,28,10,67,43,29,47,14,17,87,62,25,38, 7,1,72,60,20,18,10,7,2,0,0,2,0,39,0,33, 1,154,1,154,0,15,0,32,0,0,55,52,55,54,51,22, 23,22,21,20,7,6,35,34,39,38,23,50,55,54,53,52, 39,38,35,7,6,7,6,21,20,23,22,39,66,51,71,89, 54,40,53,52,78,79,54,55,189,48,20,8,19,21,37,21, 24,16,21,11,23,220,88,57,44,2,69,51,67,77,55,55, 55,54,32,60,25,28,45,30,36,3,8,25,31,43,32,27, 55,0,0,2,0,40,255,239,1,166,1,199,0,31,0,49, 0,0,19,50,23,22,21,17,20,23,55,54,55,23,6,35, 34,39,38,61,1,7,6,7,39,38,39,38,53,52,55,54, 55,54,23,34,7,6,21,20,23,22,51,55,54,55,54,61, 1,52,39,38,194,87,42,23,36,13,11,15,1,44,35,34, 23,40,20,26,34,29,31,26,40,39,2,3,40,73,44,17, 5,15,18,28,21,10,9,16,34,8,1,199,49,26,36,254, 249,29,2,3,6,19,83,12,12,20,55,122,13,11,1,3, 7,26,38,61,62,43,3,3,42,70,44,15,16,28,22,23, 4,3,8,13,5,77,28,8,2,0,0,1,0,38,255,249, 1,140,1,197,0,35,0,0,19,50,23,22,21,6,7,23, 21,22,51,50,55,21,6,35,34,39,38,53,38,39,54,51, 50,23,54,53,52,39,38,35,34,7,39,54,184,103,62,46, 1,161,14,23,44,34,48,58,43,88,36,19,111,2,2,71, 59,45,83,54,30,34,50,54,1,69,1,197,56,41,62,130, 26,35,1,35,20,75,19,68,34,36,7,72,68,76,24,67, 49,27,14,16,66,20,0,1,0,39,255,246,1,143,1,200, 0,49,0,0,37,20,7,6,35,34,39,55,22,51,54,55, 54,53,39,38,35,34,7,55,23,22,31,1,54,55,54,53, 39,38,35,34,7,6,7,39,54,51,50,51,22,23,22,23, 7,6,7,6,7,22,1,143,77,46,58,90,89,45,66,59, 79,15,3,3,18,101,29,32,1,3,11,8,49,84,12,1, 3,14,87,21,30,27,2,27,80,44,2,2,107,43,19,1, 3,6,21,7,26,83,130,77,39,24,58,63,47,3,55,9, 10,20,47,5,71,1,1,2,2,4,41,4,5,20,40,10, 9,2,67,27,2,58,26,34,33,30,17,7,8,20,0,2, 0,29,255,249,1,172,1,197,0,27,0,40,0,0,23,34, 39,38,53,54,55,38,39,38,47,1,22,23,22,23,22,21, 55,23,7,22,23,22,21,20,7,6,55,39,38,39,38,35, 6,21,20,23,22,51,50,225,82,45,28,2,103,18,53,28, 46,1,44,58,29,40,35,128,65,134,8,29,35,58,36,7, 3,6,17,24,5,64,16,16,28,55,7,56,35,49,77,75, 17,34,15,8,94,14,24,15,33,29,3,114,63,111,3,42, 53,44,72,42,26,142,21,19,22,31,58,45,22,19,19,0, 0,1,0,39,255,255,1,185,1,187,0,39,0,0,33,35, 39,38,61,1,6,35,34,35,38,39,38,53,55,39,38,43, 1,55,51,50,23,22,29,1,20,23,22,51,50,55,53,51, 17,20,23,22,59,1,1,185,81,24,33,48,35,3,2,75, 38,21,1,1,4,16,22,1,66,40,20,9,39,11,12,21, 44,92,5,6,8,28,2,8,33,94,22,4,51,29,36,112, 15,11,70,38,17,22,131,35,12,3,27,231,254,164,5,13, 7,0,0,1,0,39,255,106,1,145,1,197,0,55,0,0, 19,50,23,21,38,39,7,6,7,20,51,50,55,23,39,35, 6,7,6,21,23,22,23,22,23,22,21,20,7,6,35,34, 35,39,50,55,54,53,38,47,1,38,39,38,53,54,55,54, 55,38,39,38,53,52,55,54,218,22,87,22,72,35,47,3, 133,31,6,1,92,31,37,4,1,3,7,27,27,47,136,113, 25,28,6,6,13,76,18,4,2,58,57,76,22,46,2,39, 24,22,73,18,4,125,24,1,197,20,66,7,9,2,14,41, 68,3,82,10,6,36,4,4,16,16,12,9,14,40,66,93, 18,4,63,31,7,10,36,16,14,24,14,28,46,54,29,20, 1,31,46,11,11,94,13,3,0,2,0,39,255,255,1,187, 1,197,0,38,0,52,0,0,55,20,23,22,51,50,51,54, 55,54,39,34,39,55,54,55,54,51,50,51,22,23,22,21, 20,21,6,7,6,35,38,39,38,39,55,54,55,23,6,55, 39,38,39,7,6,21,20,21,22,23,22,51,54,116,48,20, 24,2,3,98,25,8,2,183,8,2,7,28,36,65,5,6, 85,38,19,3,114,38,55,144,37,10,1,2,5,14,65,10, 246,3,10,52,22,38,1,58,33,25,6,154,47,20,9,3, 65,20,4,149,37,41,23,32,4,69,35,46,3,2,225,51, 17,2,94,26,32,59,39,20,46,26,106,26,42,1,2,12, 60,3,3,47,26,16,13,0,0,1,0,40,255,249,1,130, 1,192,0,21,0,0,23,34,39,38,53,52,63,1,23,7, 6,21,20,23,22,51,50,55,23,6,7,6,226,97,54,35, 56,228,62,233,23,50,19,22,50,53,62,16,28,55,7,61, 40,56,75,44,179,66,182,18,40,47,18,7,68,82,16,16, 31,0,0,2,0,39,255,249,1,163,1,184,0,3,0,30, 0,0,37,35,53,51,5,52,55,54,51,50,23,21,38,35, 34,7,6,7,23,22,23,22,51,50,55,23,6,35,34,39, 38,1,163,198,198,254,132,80,66,88,31,38,33,29,66,46, 32,1,3,14,61,31,39,27,31,1,39,40,102,67,55,188, 68,36,101,65,54,12,73,11,54,38,48,35,72,33,17,16, 78,14,76,64,0,2,255,156,1,79,0,82,2,2,0,15, 0,31,0,0,19,20,7,6,35,34,39,38,53,52,55,54, 51,50,23,22,7,52,39,38,35,34,7,6,21,20,23,22, 51,50,55,54,82,43,23,26,52,26,12,44,21,25,39,26, 27,37,32,11,12,32,15,6,30,11,12,35,15,5,1,169, 49,27,14,44,21,25,52,25,12,26,24,39,35,15,5,31, 12,12,33,15,5,31,10,0,0,3,255,216,255,246,0,209, 2,35,0,29,0,43,0,58,0,0,55,20,7,6,35,34, 39,38,53,52,55,54,55,38,39,38,53,52,55,54,51,50, 23,22,21,20,7,22,23,22,3,52,39,38,35,34,7,6, 21,20,23,22,23,54,21,52,47,1,6,7,6,21,20,23, 22,51,50,55,54,209,61,27,34,73,34,17,40,33,11,13, 32,42,54,32,40,77,31,15,77,8,31,38,46,42,17,20, 49,23,9,42,10,32,76,38,38,9,31,38,49,13,16,52, 18,6,119,82,33,14,58,30,37,47,58,51,3,3,44,54, 44,68,38,22,62,28,36,70,77,3,49,62,1,2,58,22, 9,46,20,22,39,46,12,25,63,244,45,52,41,6,42,56, 36,61,16,5,48,16,0,1,0,0,255,253,1,202,2,25, 0,71,0,0,55,50,55,54,53,17,51,17,35,53,6,7, 6,35,34,39,38,53,52,55,54,55,54,55,54,53,52,47, 1,34,15,1,21,35,53,38,39,38,35,34,7,6,21,20, 31,1,21,34,39,38,53,52,55,54,51,50,23,54,51,50, 23,22,21,20,7,6,7,6,21,20,23,22,225,81,59,47, 46,46,38,84,37,34,100,58,41,98,24,43,51,36,24,34, 19,23,15,10,45,1,3,16,32,38,12,3,28,29,65,26, 11,47,24,28,43,31,29,48,54,25,12,46,20,164,45,70, 42,40,49,39,50,1,96,253,238,81,50,24,10,59,42,58, 82,50,12,17,17,41,28,26,48,14,3,15,16,71,66,8, 5,25,38,10,12,36,12,5,41,49,20,25,57,29,15,29, 29,53,25,29,57,40,18,83,32,53,55,32,20,0,0,2, 0,0,255,253,2,53,2,25,0,3,0,75,0,0,33,35, 3,51,1,50,55,54,53,17,51,17,35,53,6,7,6,35, 34,39,38,53,52,55,54,55,54,55,54,53,52,47,1,34, 15,1,21,35,53,38,39,38,35,34,7,6,21,20,31,1, 21,34,39,38,53,52,55,54,51,50,23,54,51,50,23,22, 21,20,7,6,7,6,21,20,23,22,2,52,43,1,45,254, 172,81,59,47,46,46,38,84,37,34,100,58,41,98,24,43, 51,36,24,34,19,23,15,10,45,1,3,16,32,38,12,3, 28,29,65,26,11,47,24,28,43,31,29,48,54,25,12,46, 20,164,45,70,42,2,18,254,22,49,39,50,1,96,253,238, 81,50,24,10,59,42,58,82,50,12,17,17,41,28,26,48, 14,3,15,16,71,66,8,5,25,38,10,12,36,12,5,41, 49,20,25,57,29,15,29,29,53,25,29,57,40,18,83,32, 53,55,32,20,0,3,255,253,255,252,2,22,2,25,0,59, 0,75,0,91,0,0,1,20,7,23,35,39,55,54,53,52, 39,38,35,34,7,6,21,20,31,1,55,54,51,50,23,22, 23,55,54,51,50,23,22,21,20,7,6,7,39,38,47,1, 7,6,35,34,39,38,61,1,55,38,53,52,55,54,51,50, 23,22,3,52,39,38,35,34,7,6,21,20,23,22,51,50, 55,54,39,52,39,38,35,34,7,6,21,20,23,22,51,50, 55,54,1,246,43,75,56,75,37,17,82,61,82,88,53,49, 25,27,7,21,40,26,26,8,2,16,23,24,60,18,5,51, 20,15,19,13,12,14,15,22,26,42,26,16,3,85,79,71, 80,106,79,90,168,26,9,12,32,13,4,24,12,15,34,9, 2,125,23,11,13,33,10,3,29,9,10,34,9,2,1,14, 95,59,117,115,69,48,42,109,64,47,56,52,73,46,34,27, 15,35,25,8,7,19,20,77,23,28,94,27,7,1,1,4, 12,21,19,19,56,33,36,29,8,58,98,100,66,56,64,73, 254,234,61,25,9,60,18,17,46,31,15,65,14,13,44,34, 17,66,15,14,62,19,6,62,12,0,0,1,255,253,255,248, 2,40,2,25,0,66,0,0,23,34,39,38,53,54,55,38, 53,52,55,54,51,50,23,22,21,20,7,23,35,39,54,55, 54,53,52,39,38,35,34,7,6,21,20,31,1,55,23,7, 6,7,6,21,20,23,22,51,50,55,54,61,1,52,39,38, 39,7,39,55,23,7,22,21,20,7,6,204,89,48,29,6, 4,51,84,76,88,109,76,90,43,75,56,76,37,13,4,84, 59,82,83,62,62,16,16,66,30,49,27,2,9,52,29,36, 69,33,17,21,4,3,66,31,128,34,34,44,50,50,8,64, 40,52,53,7,23,84,98,66,58,64,75,134,78,70,116,119, 37,72,20,19,119,63,44,53,54,69,34,22,14,65,27,50, 37,4,18,18,64,34,20,50,26,32,11,19,21,5,1,67, 32,128,31,32,37,53,67,42,44,0,0,2,255,253,255,165, 1,246,2,25,0,60,0,76,0,0,37,20,7,6,7,23, 35,39,51,50,53,52,39,38,39,54,53,52,39,38,35,34, 7,6,21,20,31,1,54,51,50,23,22,21,20,7,6,35, 34,39,38,53,52,55,38,53,52,55,54,51,50,23,22,21, 20,7,6,7,22,23,22,5,50,55,54,53,52,39,38,35, 34,7,6,21,20,23,22,1,246,50,9,9,52,55,70,11, 79,36,13,24,43,58,58,75,76,52,54,26,32,38,52,65, 40,25,58,32,40,64,40,27,12,80,82,67,89,95,70,72, 8,1,7,19,17,10,254,206,43,22,11,37,18,21,45,22, 10,39,17,134,56,39,7,5,118,160,63,43,18,5,3,37, 79,75,49,49,55,55,68,40,26,21,35,55,35,42,74,38, 20,54,35,43,16,38,48,81,103,67,56,63,62,95,26,35, 14,19,3,43,24,112,43,20,24,45,25,12,42,19,21,52, 24,11,0,1,255,237,0,0,1,237,2,18,0,27,0,0, 33,35,1,51,1,17,6,15,2,22,21,20,7,6,35,34, 39,38,53,52,55,54,55,54,55,54,55,1,237,63,254,63, 67,1,143,51,11,30,17,29,31,11,12,42,14,5,25,74, 51,11,13,53,14,1,122,254,178,1,151,18,9,23,15,14, 32,35,15,5,34,11,12,33,25,58,29,6,6,28,3,0, 0,1,255,255,255,251,1,170,2,25,0,69,0,0,37,20, 7,6,35,34,39,38,53,52,55,51,6,7,6,21,20,23, 22,51,50,55,54,53,52,39,38,35,34,7,6,7,39,55, 54,51,50,55,54,53,52,39,38,39,38,35,34,7,6,21, 6,21,20,23,7,38,53,52,55,54,51,50,23,22,21,20, 7,6,7,22,1,170,77,46,59,187,45,13,80,58,30,34, 29,168,13,14,103,25,7,51,23,29,35,36,3,3,35,30, 36,38,75,23,7,31,10,11,5,6,36,16,6,1,13,47, 19,49,29,34,59,34,20,20,23,25,76,150,86,43,26,182, 53,66,122,112,19,78,69,68,233,18,1,68,18,23,66,28, 13,42,4,4,37,31,30,57,19,23,47,25,7,3,1,27, 10,11,6,6,24,13,26,29,33,56,33,19,56,33,39,42, 34,38,9,36,0,2,255,254,0,0,1,232,2,25,0,60, 0,76,0,0,37,34,7,6,7,21,35,53,6,35,34,39, 38,61,1,55,39,38,53,52,55,54,51,50,23,22,21,20, 7,20,7,39,54,55,52,39,38,39,38,35,34,7,6,21, 20,23,55,54,51,50,23,54,51,50,23,22,29,1,35,53, 38,7,50,55,54,53,52,39,38,35,34,7,6,21,20,23, 22,1,40,26,15,4,1,45,34,32,71,20,6,3,23,24, 81,66,88,104,73,78,5,5,43,5,1,73,51,65,9,8, 78,57,56,23,24,29,24,44,30,29,44,53,29,16,46,13, 185,39,11,3,42,6,7,35,15,6,32,12,233,33,10,10, 180,53,18,75,22,27,21,12,37,45,39,103,66,55,70,73, 111,17,25,9,15,18,24,26,94,62,43,5,1,51,51,65, 48,30,18,18,31,29,41,22,26,190,176,52,149,52,14,14, 65,10,1,43,16,17,52,20,8,0,0,2,255,254,255,251, 1,209,2,25,0,56,0,72,0,0,33,35,17,6,35,34, 39,38,53,52,55,6,7,6,21,20,31,1,55,54,51,50, 23,22,21,20,7,6,35,34,39,38,53,52,55,38,53,52, 55,54,51,50,23,50,23,6,21,20,23,22,51,50,55,54, 55,53,51,3,52,39,38,35,34,7,6,21,20,23,22,51, 50,55,54,1,209,46,56,54,75,24,8,17,54,32,86,33, 36,22,28,29,71,36,19,49,33,40,71,40,24,19,85,83, 66,88,18,22,7,14,45,32,13,12,39,40,9,23,46,192, 44,16,18,49,23,9,46,16,19,62,13,3,1,130,66,55, 19,23,23,52,14,19,51,96,44,22,15,14,15,58,31,40, 65,43,28,57,35,44,31,30,28,91,107,66,53,5,6,76, 32,30,14,5,49,10,39,63,254,113,53,19,7,42,17,21, 59,19,7,59,12,0,0,2,255,254,255,251,1,207,2,27, 0,44,0,60,0,0,33,35,17,52,39,38,35,34,7,6, 21,20,23,22,23,54,55,54,51,50,23,22,21,20,7,6, 35,34,39,38,53,52,55,38,53,52,55,54,51,50,23,22, 23,53,51,3,52,47,1,35,34,7,6,21,20,23,22,51, 50,55,54,1,207,45,73,54,72,82,52,38,30,5,25,29, 44,8,7,71,36,19,49,33,40,72,37,21,9,80,65,64, 94,59,53,62,23,45,193,45,23,8,45,22,11,40,17,21, 52,18,6,1,116,36,49,36,65,49,61,45,30,5,15,29, 7,1,58,31,40,65,43,28,60,33,43,26,30,36,92,101, 62,61,25,29,30,75,254,113,58,18,6,41,20,22,54,24, 10,51,18,0,0,2,0,1,255,248,1,205,2,25,0,30, 0,66,0,0,33,35,53,7,6,35,34,39,38,39,6,7, 6,35,34,39,38,53,52,63,1,38,53,52,55,54,51,50, 23,53,51,1,50,55,54,61,1,51,21,20,23,22,51,50, 63,1,17,38,39,38,35,34,7,6,21,20,23,22,51,54, 55,23,6,21,20,23,22,1,205,45,16,21,34,39,27,6, 14,17,12,25,31,57,37,23,23,6,85,95,59,81,85,93, 47,254,228,31,18,7,48,35,15,16,31,22,14,34,13,61, 71,97,55,37,24,24,28,8,43,36,97,36,13,34,21,21, 24,5,20,26,7,16,45,28,33,43,41,11,27,109,116,57, 35,73,66,254,22,33,13,13,81,80,36,17,7,37,37,1, 36,34,9,43,64,42,58,40,26,27,17,35,37,66,81,40, 17,6,0,2,255,254,255,255,2,11,2,27,0,45,0,61, 0,0,1,20,15,1,39,54,55,52,39,38,35,34,7,6, 21,20,23,22,23,54,55,54,51,50,23,22,21,20,7,6, 35,34,39,38,53,38,39,38,53,52,55,54,51,50,23,22, 3,52,39,38,35,34,7,6,21,20,23,22,51,50,55,54, 2,11,14,32,48,41,2,50,63,107,76,62,65,56,14,17, 25,63,15,16,67,37,23,56,32,39,64,39,24,44,21,65, 91,80,85,113,77,79,191,39,17,21,44,23,11,39,18,21, 45,22,10,1,25,43,36,58,17,47,71,71,62,78,52,52, 68,80,45,11,7,60,14,3,54,32,40,68,37,22,51,32, 39,24,19,60,91,96,69,59,77,75,254,251,46,22,10,39, 18,21,44,23,10,39,18,0,0,1,255,255,255,246,1,246, 2,25,0,75,0,0,55,52,55,54,51,50,23,21,35,53, 38,35,34,7,6,21,20,23,22,23,20,7,6,35,34,39, 38,53,52,55,39,38,39,38,53,52,55,54,51,50,22,21, 20,7,39,54,55,52,39,38,35,34,7,6,21,20,23,22, 23,54,51,21,39,34,7,6,21,20,23,22,51,50,55,54, 55,38,186,56,24,29,58,37,46,15,36,44,13,3,29,5, 6,8,23,72,62,35,22,12,42,3,2,17,80,67,89,111, 156,12,49,9,3,73,62,83,89,56,42,21,6,16,35,48, 9,39,17,8,38,14,17,37,16,1,1,39,158,61,26,12, 28,229,195,15,34,9,11,32,11,1,2,40,20,60,60,37, 43,29,30,42,3,3,29,45,102,67,57,150,108,25,48,13, 30,34,92,62,53,65,49,64,42,25,7,9,35,46,1,49, 21,25,57,21,8,37,3,3,29,0,0,2,255,253,255,251, 1,232,2,63,0,67,0,83,0,0,1,52,39,38,35,55, 22,23,22,21,20,7,6,35,34,39,38,61,1,55,34,15, 1,6,21,20,31,1,55,54,51,50,23,22,21,20,7,23, 7,39,7,6,35,34,39,38,53,52,55,38,53,52,55,54, 51,50,23,22,23,34,21,20,23,22,51,50,55,54,3,52, 39,38,35,34,7,6,21,20,23,22,51,50,55,54,1,188, 33,17,17,15,82,12,2,54,33,41,79,36,18,2,144,32, 6,1,33,36,22,29,28,67,39,24,5,117,22,118,26,35, 37,71,40,24,19,85,94,61,83,39,16,4,3,26,44,19, 24,52,24,10,174,43,15,18,47,23,10,44,16,20,55,16, 5,1,197,38,28,14,42,31,68,12,15,65,40,24,64,33, 41,12,4,106,37,9,10,44,22,15,14,15,55,34,41,19, 20,50,46,49,24,25,57,35,44,31,30,27,92,113,57,38, 16,4,13,40,48,23,10,45,19,254,214,54,19,6,41,18, 21,57,21,7,53,15,0,2,255,253,255,255,1,207,2,20, 0,38,0,54,0,0,19,50,23,53,51,17,35,53,52,39, 38,35,34,7,6,21,20,23,54,55,50,23,22,21,20,7, 6,35,34,39,38,53,52,55,38,53,52,55,54,19,52,39, 38,35,34,7,6,21,20,23,22,51,50,55,54,233,115,69, 46,46,73,48,62,90,57,41,100,18,61,65,38,22,54,32, 39,76,34,18,16,116,85,68,150,39,18,21,45,22,9,38, 16,20,47,23,10,2,20,65,63,254,237,93,73,41,27,52, 37,52,73,50,26,1,55,32,40,67,37,22,62,31,39,10, 45,58,101,93,52,42,254,107,45,22,10,41,18,20,45,22, 9,40,17,0,0,2,0,1,255,248,1,215,2,25,0,15, 0,31,0,0,1,20,7,6,35,34,39,38,53,52,55,54, 51,50,23,22,5,20,23,22,51,50,55,54,53,52,39,38, 35,34,7,6,1,215,68,67,102,107,69,57,64,68,101,110, 69,58,254,89,63,50,72,93,56,41,63,52,75,94,53,38, 1,11,106,85,84,94,79,102,108,79,83,92,76,102,109,67, 54,86,63,81,103,68,57,87,62,0,0,1,255,254,0,0, 1,222,2,25,0,56,0,0,55,34,39,38,53,52,55,38, 39,38,53,52,55,54,51,50,23,22,21,20,7,39,55,54, 53,52,39,38,35,34,7,6,21,20,31,1,54,55,54,55, 54,55,23,6,21,20,23,22,51,50,55,53,51,17,35,53, 6,195,69,33,16,7,70,13,3,77,64,84,119,75,61,29, 45,11,11,57,57,91,72,55,49,27,31,29,31,9,14,6, 6,23,96,39,17,20,58,33,45,45,37,30,59,30,36,17, 21,27,68,13,14,100,66,56,83,68,95,72,41,18,21,31, 38,84,61,61,59,51,65,35,27,20,29,10,3,4,1,3, 46,20,68,42,21,10,65,128,254,241,67,37,0,2,0,1, 0,0,1,217,2,25,0,26,0,56,0,0,19,50,23,53, 51,17,35,53,6,7,6,35,34,39,38,53,52,55,52,55, 38,39,38,53,52,55,54,3,20,23,22,51,50,55,54,55, 53,52,39,38,35,34,7,6,21,20,31,1,54,51,50,51, 23,35,6,7,6,232,111,85,45,47,22,17,53,68,84,55, 51,5,6,69,13,4,88,62,26,58,35,42,61,55,43,9, 68,55,71,84,55,49,36,37,17,34,4,3,34,19,37,20, 10,2,25,89,82,253,238,76,25,12,37,48,44,57,22,18, 5,11,25,61,19,23,104,58,40,254,131,58,34,20,46,34, 32,215,37,47,37,50,46,63,53,24,13,20,34,8,34,15, 0,3,255,253,0,0,2,115,2,25,0,39,0,55,0,83, 0,0,19,50,23,53,51,21,54,55,54,51,50,23,22,21, 20,7,6,35,34,39,17,35,53,6,7,6,35,34,39,38, 53,52,55,38,39,38,53,52,55,54,5,34,7,6,21,20, 23,22,51,50,55,54,53,52,39,38,1,20,23,22,51,50, 55,54,55,53,52,39,38,35,34,7,6,21,20,31,1,54, 51,23,35,6,7,6,227,111,85,46,2,35,13,12,50,29, 17,42,25,29,45,17,48,59,78,10,12,84,55,51,12,70, 13,4,86,62,1,129,33,13,5,31,10,12,31,15,6,17, 15,254,81,58,35,42,61,55,45,6,68,55,70,84,55,50, 36,37,20,40,33,19,16,21,30,2,25,89,82,40,25,12, 5,50,28,32,53,34,20,42,254,155,76,67,6,1,48,44, 57,25,31,23,63,19,23,102,58,42,48,38,13,15,44,16, 5,37,14,14,27,19,20,254,179,58,34,20,46,38,28,215, 37,47,37,50,45,64,53,24,13,20,34,4,14,23,0,2, 255,248,0,0,2,38,2,25,0,37,0,66,0,0,1,50, 23,53,51,17,35,53,6,7,6,35,34,39,38,53,52,55, 7,22,31,1,20,7,34,39,38,53,52,55,54,63,1,38, 53,52,55,54,3,20,23,22,51,50,55,54,55,53,52,39, 38,35,34,7,6,21,20,31,1,54,59,1,23,35,6,7, 6,1,52,107,89,46,48,22,17,53,68,84,55,51,4,92, 14,1,3,40,36,11,3,36,2,3,102,58,88,62,26,58, 35,42,61,55,43,9,68,55,71,85,51,52,36,37,26,17, 16,33,19,37,20,10,2,25,89,82,253,238,76,25,12,37, 48,44,57,20,7,56,16,6,13,39,7,31,8,9,43,24, 1,2,60,30,86,104,58,40,254,131,58,34,20,46,34,32, 215,37,47,37,48,46,65,53,24,13,20,34,8,34,15,0, 0,2,0,1,255,252,1,249,2,25,0,43,0,59,0,0, 19,34,7,6,21,20,31,1,54,51,50,23,22,21,20,7, 6,35,34,39,38,61,1,55,38,53,52,55,54,51,50,23, 22,21,20,7,23,35,39,54,53,52,39,38,3,50,55,54, 53,52,39,38,35,34,7,6,21,20,23,22,236,83,56,45, 26,32,38,52,65,40,26,57,33,41,64,40,27,13,81,81, 68,88,104,73,85,68,73,56,76,78,94,51,106,43,22,11, 40,16,20,45,22,10,37,19,1,234,63,51,64,40,26,21, 35,55,35,42,71,39,22,54,35,43,16,38,48,81,102,67, 57,63,73,135,70,87,113,118,86,69,134,57,30,254,63,43, 20,24,50,23,9,42,19,21,49,25,13,0,0,1,0,1, 255,255,2,52,2,20,0,66,0,0,5,35,39,54,55,54, 53,52,39,38,35,34,21,20,31,1,55,54,51,50,31,1, 54,55,50,23,22,23,21,35,53,38,35,34,7,21,35,53, 38,39,38,39,38,35,34,7,21,35,53,34,39,38,39,38, 53,52,55,54,51,50,23,22,21,20,7,6,7,2,52,55, 73,18,22,17,57,63,102,220,29,30,12,22,41,23,23,19, 40,23,56,26,7,8,51,12,28,27,12,51,9,9,2,3, 10,13,23,19,48,30,35,14,6,7,106,67,92,138,76,64, 20,18,13,1,115,13,47,40,37,90,66,74,185,33,32,26, 18,19,12,15,24,3,41,12,30,159,163,32,30,165,167,13, 5,1,2,5,30,163,156,59,22,19,20,28,129,61,38,96, 82,111,39,45,43,6,0,1,255,251,0,0,1,246,2,25, 0,64,0,0,19,34,7,6,21,20,23,22,23,54,55,54, 51,50,31,1,54,55,50,23,22,23,21,35,53,52,39,38, 35,34,15,1,21,35,53,38,47,1,38,35,34,15,1,21, 35,53,38,53,52,55,54,51,50,23,22,21,20,15,1,39, 54,53,52,39,38,238,102,54,36,33,7,7,10,39,17,17, 26,21,19,37,27,56,26,8,7,51,23,9,9,17,14,9, 51,9,8,5,12,12,16,15,10,49,89,91,63,90,106,79, 78,19,5,46,23,63,62,1,234,79,54,73,47,36,8,4, 29,16,8,12,15,26,1,41,12,30,159,163,18,10,4,15, 15,165,167,14,4,3,5,15,15,163,134,59,100,130,67,47, 71,70,105,44,48,10,18,50,31,80,61,61,0,2,255,253, 255,240,1,234,2,27,0,56,0,72,0,0,33,35,17,38, 35,34,7,6,21,20,31,1,7,47,1,34,15,1,20,23, 22,51,54,51,50,23,22,21,20,7,6,35,34,39,38,53, 63,1,38,53,52,55,54,59,1,23,52,55,54,51,50,23, 22,31,1,53,51,3,52,39,38,35,34,7,6,21,20,23, 22,51,50,55,54,1,234,45,81,101,43,21,9,42,65,22, 130,15,66,12,2,36,18,19,41,56,66,39,25,56,33,41, 70,39,24,1,9,100,79,21,26,8,4,52,33,44,77,71, 2,2,29,45,192,39,18,22,46,24,11,39,19,23,46,23, 10,1,115,119,34,15,18,38,18,33,37,58,1,51,19,41, 24,11,38,56,35,42,70,38,23,55,34,41,31,27,29,82, 88,22,6,1,75,41,25,63,2,2,28,86,254,97,48,25, 13,43,20,23,49,26,13,45,20,0,0,4,255,253,255,253, 1,213,2,25,0,24,0,32,0,44,0,57,0,0,19,50, 23,53,51,17,35,53,6,7,6,35,34,39,38,53,52,55, 54,55,38,53,52,55,54,1,53,52,39,38,35,34,7,23, 39,6,7,6,21,20,23,22,51,50,55,7,20,23,22,51, 50,63,1,39,7,6,7,6,227,111,85,46,46,32,21,70, 79,78,48,33,19,2,1,87,79,66,1,25,71,55,67,55, 31,95,135,22,7,29,36,18,18,14,15,38,62,28,33,78, 61,45,145,115,35,8,4,2,25,89,82,253,238,83,30,13, 43,52,35,46,33,36,3,2,33,78,100,67,55,254,162,184, 37,47,37,23,157,134,26,10,47,51,37,24,12,9,126,49, 21,10,48,51,140,76,22,27,14,0,0,2,255,254,0,0, 1,178,2,23,0,17,0,34,0,0,33,35,37,55,38,39, 38,53,52,55,54,51,50,23,22,23,53,51,3,17,38,35, 34,7,6,21,20,23,22,51,50,63,1,23,7,1,178,47, 254,150,110,129,7,1,74,64,84,78,52,14,23,47,47,54, 110,75,52,51,55,32,35,25,17,83,31,201,101,88,31,96, 7,7,100,56,49,44,12,33,84,254,26,1,57,131,48,50, 55,53,32,19,17,58,33,151,0,1,0,1,255,244,1,192, 2,25,0,64,0,0,19,34,7,6,21,20,31,1,54,55, 54,55,23,6,7,20,23,22,59,1,50,55,53,51,21,35, 53,6,35,34,35,7,5,7,37,55,38,39,38,39,38,61, 1,38,53,38,39,38,53,52,55,54,51,50,23,22,21,20, 7,39,54,53,52,39,38,211,83,46,30,22,25,6,18,20, 16,30,48,5,62,3,4,4,43,28,44,43,37,48,4,5, 71,1,17,19,254,158,120,33,10,1,2,3,2,27,15,42, 78,58,74,106,69,62,18,44,13,70,50,1,234,57,38,51, 29,19,15,10,25,18,10,33,45,35,55,8,1,39,112,234, 64,27,52,43,38,53,95,27,20,4,3,8,10,20,6,1, 11,10,32,58,91,57,43,70,64,88,28,70,22,52,24,86, 52,37,0,1,0,20,0,4,0,65,2,7,0,3,0,0, 55,35,3,51,64,43,1,45,4,2,3,0,0,1,254,38, 2,65,255,185,2,174,0,17,0,0,3,7,38,39,38,35, 34,7,6,7,39,54,55,54,51,50,23,22,71,32,61,80, 15,18,78,58,12,16,33,76,86,16,17,101,66,19,2,96, 31,55,7,1,42,8,13,34,66,8,1,45,13,0,0,1, 255,221,0,0,0,128,2,27,0,5,0,0,51,35,17,7, 39,55,128,46,93,24,163,1,204,62,34,107,0,2,254,223, 254,53,0,134,255,35,0,30,0,42,0,0,19,6,7,6, 35,34,39,38,39,7,6,35,34,39,38,53,52,55,54,51, 50,23,53,51,21,22,23,50,55,54,55,7,38,39,38,35, 34,7,6,21,20,51,50,134,7,39,27,22,41,60,6,2, 15,42,59,64,27,12,44,25,28,33,51,43,70,27,24,25, 18,4,209,28,40,7,7,30,16,7,58,51,254,163,26,26, 18,37,4,1,25,57,49,21,27,50,30,16,30,75,105,45, 2,25,18,9,27,28,8,2,30,12,13,49,0,1,255,44, 254,61,0,207,255,22,0,37,0,0,3,52,55,54,51,53, 51,21,39,34,15,1,21,20,23,22,51,50,55,54,53,22, 51,50,63,1,23,6,35,34,39,6,7,6,35,34,39,38, 212,48,26,33,43,42,37,16,7,38,13,14,52,40,30,18, 65,27,25,20,29,45,59,38,31,10,45,40,35,64,34,18, 254,163,51,27,14,23,60,3,34,22,7,33,15,5,52,39, 19,58,19,19,23,60,28,27,28,24,46,25,0,1,254,76, 255,0,255,56,255,226,0,33,0,0,5,20,23,22,51,54, 55,52,47,1,34,7,63,1,50,31,1,21,20,7,6,35, 34,39,38,53,52,55,54,55,23,34,7,6,254,118,41,16, 19,74,5,33,15,11,30,20,28,55,19,6,77,18,22,67, 34,18,42,31,15,37,5,38,40,157,37,17,7,5,35,28, 7,2,7,39,2,39,21,8,63,14,4,45,24,30,35,50, 35,7,17,41,46,0,0,2,255,250,255,247,1,82,2,25, 0,28,0,42,0,0,37,20,7,6,35,34,39,38,53,52, 55,54,51,50,23,22,23,7,38,35,34,7,6,21,55,51, 50,23,22,7,52,39,38,35,15,1,22,23,22,51,50,55, 54,1,82,48,35,45,108,61,47,80,52,77,70,38,8,18, 39,31,64,69,43,47,62,1,96,67,68,49,61,61,63,31, 29,21,129,7,7,49,22,10,131,63,44,33,103,78,102,146, 71,46,47,10,38,25,75,54,62,64,5,56,55,68,54,39, 40,1,3,218,10,1,52,22,0,2,0,1,255,199,1,244, 2,25,0,72,0,88,0,0,19,50,23,22,21,20,7,22, 23,20,7,22,23,20,7,6,35,23,35,39,22,51,50,55, 54,53,52,39,54,55,54,53,52,39,38,39,34,7,55,54, 53,52,39,38,35,34,7,6,21,20,31,1,54,51,50,23, 22,21,20,7,6,35,34,39,38,61,1,55,38,53,52,55, 54,19,50,55,54,53,52,39,38,35,34,7,6,21,20,23, 22,238,108,70,61,12,33,2,30,26,4,35,13,16,53,52, 88,31,35,33,10,2,57,51,5,1,28,6,6,22,6,17, 17,73,53,66,76,52,54,26,32,38,52,65,40,26,57,33, 41,64,40,27,13,81,81,68,50,43,22,11,40,16,20,45, 22,10,37,19,2,25,71,61,88,14,18,21,42,42,21,24, 37,49,19,7,80,132,17,27,6,6,35,27,13,42,4,5, 22,12,2,1,5,19,23,20,84,52,37,55,55,68,40,26, 21,35,55,35,42,71,39,22,54,35,43,16,38,48,81,102, 67,57,254,16,43,20,24,50,23,9,42,19,21,49,25,13, 0,2,0,18,255,251,1,181,2,25,0,15,0,31,0,0, 1,20,7,6,35,34,39,38,53,52,55,54,51,50,23,22, 7,52,39,38,35,34,7,6,21,20,23,22,51,50,55,54, 1,181,62,62,88,85,62,60,60,62,85,86,63,63,34,53, 54,72,69,51,52,50,49,73,73,53,53,1,14,115,80,80, 81,80,114,112,78,77,77,78,112,91,65,65,63,64,94,95, 67,68,68,67,0,2,0,25,255,236,1,101,2,47,0,30, 0,46,0,0,19,52,55,54,51,50,23,22,21,20,7,6, 35,34,39,22,23,22,23,22,23,7,38,39,38,39,38,39, 38,39,38,37,52,39,38,35,34,7,6,21,20,23,22,51, 50,55,54,25,72,42,55,80,49,34,60,41,55,60,49,6, 40,53,93,17,24,34,63,60,18,9,71,32,1,1,11,1, 22,52,27,32,63,32,18,50,29,34,59,34,18,1,127,101, 48,27,60,41,54,84,50,35,44,38,60,80,60,12,14,35, 35,54,17,12,83,114,3,3,44,53,63,32,17,51,27,34, 59,34,20,51,28,0,0,2,0,24,255,236,1,105,2,47, 0,31,0,47,0,0,1,20,7,6,7,6,7,6,7,6, 7,39,54,55,54,55,54,55,7,6,35,34,39,38,53,52, 55,54,51,50,23,22,7,52,39,38,35,34,7,6,21,20, 23,22,51,50,55,54,1,105,91,12,12,27,77,3,2,17, 24,27,18,72,72,45,13,7,27,36,37,85,51,36,69,45, 56,100,44,23,47,53,30,37,68,35,20,53,32,38,61,36, 23,1,127,138,119,15,13,33,54,2,2,12,15,40,7,50, 59,85,24,22,14,14,63,44,58,79,46,30,78,42,41,65, 36,21,55,30,37,62,37,23,52,32,0,1,255,244,0,0, 2,7,2,47,0,52,0,0,33,35,17,52,39,38,35,34, 7,6,21,17,35,17,38,39,38,35,34,7,6,21,20,51, 50,55,52,39,55,22,21,20,7,6,35,34,39,38,53,52, 55,54,51,50,23,22,23,54,51,50,23,22,23,2,7,46, 44,25,29,45,30,16,45,11,9,31,44,59,33,20,48,37, 5,37,10,70,37,18,21,84,15,2,67,39,54,63,45,2, 2,46,67,84,39,11,12,1,183,40,24,14,33,19,21,254, 68,1,188,21,12,34,69,40,45,118,37,22,19,40,25,53, 49,24,12,114,19,22,119,55,32,47,2,2,55,61,17,45, 0,2,0,0,255,247,1,250,2,51,0,34,0,50,0,0, 1,6,7,6,7,22,23,22,21,20,7,6,35,34,39,38, 53,52,55,54,63,1,38,39,38,39,55,22,23,54,55,54, 55,54,55,3,52,39,38,39,6,7,6,21,20,23,22,51, 50,55,54,1,250,45,109,18,26,19,41,56,47,47,69,87, 47,31,58,11,11,34,129,63,10,8,52,77,130,91,67,4, 5,12,9,73,101,7,7,17,39,56,52,27,33,67,32,16, 2,28,94,83,15,18,3,47,62,62,76,44,45,67,43,57, 66,60,11,9,26,85,93,13,14,25,141,65,44,104,7,7, 19,28,254,107,69,71,5,5,10,35,56,55,65,32,17,56, 29,0,0,3,255,249,0,0,2,12,2,45,0,47,0,59, 0,71,0,0,37,7,38,47,2,23,22,21,20,7,6,35, 34,39,38,53,52,55,54,55,38,39,38,39,55,22,23,39, 38,53,52,55,54,51,50,23,22,21,20,7,6,7,22,23, 22,23,22,39,52,39,38,35,34,7,6,21,20,23,54,7, 52,39,6,21,20,23,22,51,50,55,54,2,12,27,49,26, 49,33,26,12,61,34,43,78,39,23,45,14,31,87,83,11, 16,35,66,100,19,19,58,37,46,72,40,24,48,11,38,96, 43,11,11,25,138,49,18,21,52,26,13,62,117,51,67,117, 45,20,24,74,17,4,162,34,51,16,28,16,46,30,25,78, 38,22,60,34,44,50,48,14,21,27,74,11,15,32,85,33, 30,37,38,72,42,26,58,36,44,61,44,11,20,34,35,9, 11,24,254,60,22,7,46,23,26,72,46,36,192,65,52,52, 69,56,25,12,64,15,0,1,0,0,255,255,1,222,2,56, 0,57,0,0,1,20,7,6,7,6,35,53,50,55,54,55, 54,53,52,39,38,35,34,7,6,21,20,31,1,22,31,2, 20,7,6,35,34,39,38,39,55,23,22,51,50,55,54,53, 52,39,38,39,38,53,52,55,54,51,50,23,22,1,222,184, 74,120,57,43,143,127,127,28,6,54,40,47,56,27,13,27, 54,31,3,1,1,56,32,36,58,47,32,6,39,26,35,41, 43,25,12,23,55,11,33,66,36,44,99,54,36,1,119,173, 117,46,26,13,49,78,79,111,26,26,69,48,35,36,16,21, 21,15,27,23,31,13,12,53,31,17,41,28,17,27,32,32, 30,14,17,20,14,27,8,25,37,67,35,20,75,50,0,2, 0,48,255,248,1,229,2,53,0,49,0,64,0,0,19,52, 55,54,51,50,23,22,21,20,7,6,7,6,15,1,53,50, 55,54,55,54,55,54,53,52,39,38,35,34,7,6,21,20, 31,1,55,54,51,50,23,22,21,20,7,6,35,34,39,38, 23,52,47,1,34,15,1,21,20,23,22,51,50,55,54,48, 70,63,81,102,67,54,134,25,32,60,101,85,16,67,90,47, 107,36,24,67,46,61,73,49,44,21,2,7,24,63,60,27, 12,46,24,29,78,50,36,215,31,18,35,14,5,30,12,12, 35,11,3,1,105,84,63,57,80,65,86,138,92,17,18,36, 25,16,46,19,25,27,58,66,46,58,94,53,35,52,47,59, 29,34,4,28,61,48,22,27,52,29,16,66,48,18,38,12, 3,29,18,3,31,15,6,31,9,0,0,1,0,56,0,0, 1,166,2,53,0,5,0,0,1,33,17,35,17,33,1,166, 254,192,46,1,110,2,11,253,245,2,53,0,0,1,0,47, 255,248,1,123,2,56,0,22,0,0,1,39,7,6,21,20, 23,22,51,7,34,39,38,39,38,53,52,55,54,55,23,53, 51,1,123,198,61,28,157,47,8,48,7,47,102,37,16,102, 14,28,143,45,1,61,197,80,57,69,144,114,33,25,38,83, 111,47,47,148,74,10,18,144,141,0,0,2,0,83,2,16, 1,128,3,62,0,15,0,32,0,0,19,50,55,54,53,52, 39,38,35,34,7,6,21,20,23,22,55,50,31,1,22,21, 20,7,6,35,34,39,38,53,52,55,54,234,55,25,12,47, 20,25,58,25,11,52,19,23,68,47,18,17,57,43,50,69, 47,35,57,43,2,70,48,22,26,61,26,11,50,22,26,66, 22,8,248,58,27,33,34,69,46,35,58,42,50,69,48,35, 0,6,0,16,255,254,3,84,2,218,0,16,0,32,0,47, 0,62,0,79,0,95,0,0,1,20,23,22,51,50,55,54, 53,52,39,38,35,34,15,1,6,1,20,23,22,51,50,55, 54,53,52,39,38,35,34,7,6,5,34,39,38,53,52,55, 54,51,50,22,21,20,7,6,1,50,23,22,21,20,7,6, 35,34,39,38,53,52,54,19,52,55,54,51,50,31,1,22, 21,20,7,6,35,34,39,38,1,52,39,38,35,34,7,6, 21,20,23,22,51,50,55,54,1,84,54,18,22,56,25,11, 26,24,42,60,24,8,2,254,247,54,18,21,60,22,8,47, 19,24,65,21,7,2,112,68,47,35,45,46,59,61,92,48, 46,253,178,60,44,46,46,45,59,60,46,46,92,175,57,42, 52,68,47,18,17,46,45,59,59,46,46,1,253,47,21,25, 61,22,9,50,19,23,58,25,10,2,66,68,21,7,49,21, 26,43,27,28,51,27,10,254,73,68,21,7,53,20,23,63, 24,10,56,19,173,56,42,52,61,45,47,92,61,58,46,46, 1,47,47,45,61,59,45,46,46,45,59,61,92,1,21,71, 47,34,58,26,33,35,59,45,46,46,45,254,142,60,26,11, 52,20,25,64,23,9,49,21,0,3,0,12,255,96,3,193, 1,226,0,13,0,22,0,71,0,0,1,34,21,20,23,22, 51,50,55,54,53,52,39,38,19,33,22,23,22,51,50,55, 54,1,52,55,54,51,50,23,22,21,20,7,51,17,51,17, 35,53,35,6,7,6,35,34,39,38,53,52,51,33,54,53, 52,47,1,38,35,34,7,22,23,22,21,6,7,6,35,34, 39,38,1,219,60,35,11,12,39,14,5,34,10,194,253,159, 23,107,77,84,174,104,23,254,205,80,53,67,109,68,53,14, 135,53,53,160,60,135,87,97,110,111,136,78,2,109,16,59, 25,42,49,23,27,50,23,11,7,62,20,24,81,28,7,1, 123,66,42,15,4,38,12,14,44,15,4,254,203,71,43,30, 97,22,1,23,81,46,31,89,70,94,50,48,1,84,253,137, 230,110,54,35,50,61,100,49,45,58,83,62,21,31,9,10, 53,25,27,79,24,7,81,18,0,3,0,8,254,244,4,115, 1,226,0,13,0,22,0,100,0,0,1,20,23,22,51,50, 55,54,53,52,35,34,7,6,5,33,22,23,22,51,50,55, 54,19,34,39,38,53,52,59,1,21,35,22,51,50,53,52, 47,1,38,35,34,7,21,35,53,35,6,7,6,35,34,39, 38,53,52,51,33,54,53,52,47,1,38,35,34,7,22,23, 22,21,20,7,6,35,34,39,38,53,52,55,54,51,50,23, 22,21,20,7,51,17,51,17,54,51,50,23,22,21,20,1, 152,32,15,12,38,15,5,54,32,21,10,1,13,253,159,23, 107,77,84,172,102,26,191,198,50,14,60,194,205,10,195,248, 43,23,7,8,27,25,55,158,60,135,87,97,110,111,136,78, 2,109,16,59,25,42,49,23,27,57,18,7,51,27,35,71, 29,13,70,59,70,109,68,53,14,133,55,30,33,68,34,17, 1,51,25,20,10,38,12,15,62,36,19,254,71,43,30,93, 24,254,201,63,17,22,55,55,55,147,49,21,8,1,13,152, 230,110,54,35,50,61,100,49,45,58,83,62,21,31,9,13, 53,18,21,67,34,19,64,28,35,75,45,38,89,70,94,50, 48,1,84,254,82,15,60,31,39,194,0,5,255,176,254,239, 3,91,2,220,0,15,0,90,0,100,0,113,0,126,0,0, 1,52,39,38,35,34,7,6,21,20,23,22,51,50,55,54, 1,54,55,54,55,54,55,38,53,52,55,54,51,50,23,22, 21,17,35,17,52,39,38,35,34,7,6,21,20,23,54,55, 54,51,50,23,54,53,52,39,38,35,22,21,20,7,6,35, 34,39,38,53,52,55,54,51,50,23,22,21,20,7,22,21, 20,7,6,35,34,39,6,35,34,39,38,1,38,35,34,7, 22,23,54,55,54,31,1,6,7,6,7,22,51,50,55,54, 53,52,5,6,7,6,7,23,22,23,22,51,50,55,38,1, 142,34,18,20,49,21,8,47,13,15,50,19,6,254,35,1, 40,11,29,14,63,67,131,127,185,252,98,54,48,150,83,119, 168,109,108,56,82,60,86,66,78,57,27,55,50,83,51,57, 30,36,56,38,39,83,52,65,120,71,57,34,106,74,53,66, 108,104,137,116,71,39,24,2,96,48,61,143,119,60,91,108, 90,12,59,2,91,109,9,9,76,76,72,30,38,253,221,41, 45,39,1,1,2,42,14,16,82,118,86,1,105,39,29,16, 47,19,22,48,14,4,40,13,254,30,56,42,12,26,13,45, 118,139,184,119,116,158,86,127,254,149,1,107,199,80,44,104, 104,169,123,102,44,18,24,22,54,54,73,71,65,47,62,70, 33,17,42,40,51,84,44,28,95,75,105,63,63,65,131,84, 50,36,62,91,57,34,1,25,14,76,88,63,58,123,16,6, 1,125,84,7,6,38,26,33,57,98,20,25,43,38,43,21, 42,15,5,76,65,0,0,3,0,16,255,254,2,133,1,226, 0,15,0,31,0,41,0,0,19,50,23,22,21,20,7,6, 35,34,39,38,53,52,55,54,33,50,23,22,21,20,7,6, 35,34,39,38,53,52,55,54,3,35,17,35,17,35,17,33, 21,35,197,30,13,4,29,8,10,32,11,4,31,7,1,68, 30,13,4,29,8,10,32,11,4,31,7,112,61,254,60,2, 117,254,1,8,29,9,10,32,12,4,30,8,10,35,11,2, 29,9,10,32,12,4,30,8,10,35,11,2,254,246,1,168, 254,88,1,228,60,0,0,2,0,12,255,254,3,19,1,226, 0,48,0,60,0,0,23,34,53,52,55,54,59,1,50,55, 54,53,52,39,38,35,34,7,50,23,22,21,20,7,6,35, 34,39,38,53,52,55,54,51,50,23,22,21,20,7,6,43, 1,34,21,20,51,33,21,1,34,7,6,21,20,51,50,55, 54,53,52,127,115,57,21,25,127,52,48,39,75,34,44,54, 41,53,18,7,53,19,24,64,27,12,73,61,84,100,60,46, 67,61,78,115,54,54,2,160,253,96,38,12,3,47,35,13, 4,2,84,57,21,8,42,34,39,92,36,17,26,54,19,22, 61,22,8,49,21,27,89,43,37,69,53,71,75,52,49,31, 29,55,1,107,35,10,11,47,33,11,11,48,0,4,0,6, 255,254,4,156,1,226,0,45,0,94,0,106,0,116,0,0, 1,54,55,54,59,1,21,35,17,35,17,35,6,29,1,35, 53,52,39,38,35,34,7,6,21,54,51,50,23,22,21,20, 7,6,7,34,39,38,53,52,55,54,51,50,23,22,1,21, 33,34,53,52,55,54,59,1,50,55,54,53,52,39,38,35, 34,7,50,23,22,21,20,7,6,35,34,39,38,53,52,55, 54,51,50,23,22,21,20,7,6,43,1,34,21,20,51,39, 50,55,54,53,52,35,34,7,6,21,20,5,20,23,22,51, 50,53,52,35,34,3,54,32,50,17,17,242,145,55,37,89, 55,59,30,38,33,40,46,29,28,63,31,17,57,32,27,53, 37,25,49,53,80,92,45,8,1,107,251,221,115,57,21,25, 127,58,46,35,75,34,44,54,41,53,18,7,53,19,24,64, 27,12,73,61,85,95,61,49,74,60,71,116,54,54,5,36, 12,3,46,38,12,3,1,239,39,9,10,51,59,50,1,133, 56,19,7,55,254,215,1,41,8,101,188,188,68,31,16,29, 34,45,15,49,25,32,68,29,11,2,60,42,43,84,64,71, 65,11,254,164,55,84,57,21,8,43,33,39,92,36,17,26, 54,19,22,61,22,8,49,21,27,89,43,37,68,53,72,79, 54,43,31,29,205,35,9,11,48,34,10,11,48,29,40,10, 3,47,56,0,0,2,0,14,255,254,2,203,1,221,0,28, 0,44,0,0,1,33,21,35,17,35,17,35,34,7,6,21, 54,51,50,23,22,21,20,7,6,35,34,39,38,53,52,55, 54,19,52,39,38,35,34,7,6,21,20,23,22,51,50,55, 54,1,12,1,191,180,60,207,89,59,46,44,95,93,39,20, 50,43,51,102,60,45,85,71,141,39,26,25,51,33,20,50, 20,24,66,24,10,1,221,61,254,94,1,162,65,51,66,65, 67,34,44,69,47,40,84,64,83,114,72,62,254,178,39,35, 23,43,25,29,55,23,9,46,18,0,0,2,0,14,255,61, 2,203,1,221,0,30,0,46,0,0,37,7,35,55,17,35, 34,7,6,21,54,51,50,23,22,21,20,7,6,35,34,39, 38,53,52,55,54,51,33,21,35,3,52,39,38,35,34,7, 6,21,20,23,22,51,50,55,54,2,23,140,67,147,207,89, 59,46,44,95,93,39,20,50,43,51,102,60,45,85,71,98, 1,191,180,224,39,26,25,51,33,20,50,20,24,66,24,10, 4,199,211,1,144,65,51,66,65,67,34,44,69,47,40,84, 64,83,114,72,62,61,254,239,39,35,23,43,25,29,55,23, 9,46,18,0,0,2,0,12,254,244,3,25,1,221,0,105, 0,121,0,0,37,52,39,38,35,34,7,6,29,1,35,53, 52,39,38,35,34,15,1,6,7,54,51,50,23,22,21,20, 7,6,35,34,39,38,53,52,55,54,51,50,23,54,51,50, 23,22,21,20,7,6,35,33,34,7,6,21,20,23,22,51, 50,55,54,61,1,51,21,20,23,22,51,50,55,54,53,52, 47,1,52,55,54,51,22,21,20,7,6,35,34,39,38,39, 6,35,34,39,38,53,52,55,54,51,33,50,55,54,37,34, 7,6,21,20,23,22,51,50,55,54,53,52,39,38,2,226, 51,41,54,74,40,25,55,60,45,57,67,41,15,2,2,25, 24,74,38,21,62,36,43,64,40,34,81,61,82,143,51,51, 111,96,59,46,84,53,76,254,168,95,42,21,60,37,42,76, 57,48,55,57,38,44,65,40,26,22,2,31,7,7,43,76, 53,66,94,56,15,9,56,141,115,55,33,103,53,68,1,82, 82,46,30,253,180,56,14,4,47,16,19,49,16,4,42,16, 240,78,58,46,66,41,51,151,145,78,52,40,41,19,3,4, 9,62,35,44,69,37,21,57,46,53,109,63,47,98,98,85, 66,86,132,64,40,48,24,32,58,34,21,52,43,55,18,41, 61,40,26,47,29,37,33,28,12,22,7,2,53,56,81,48, 34,61,16,19,93,68,40,57,97,41,21,73,47,134,48,13, 14,58,19,7,45,13,16,55,22,8,0,2,0,12,254,239, 2,244,1,226,0,97,0,113,0,0,1,50,23,22,21,20, 7,6,35,34,39,38,53,52,55,6,21,20,23,22,59,1, 21,35,34,7,6,7,6,35,34,39,38,53,52,55,54,51, 50,23,22,21,35,38,35,34,7,6,21,20,51,50,55,54, 55,34,39,38,53,52,55,54,51,50,23,6,21,20,23,22, 51,50,55,54,53,52,39,38,35,34,7,6,7,54,51,50, 23,22,21,20,7,6,35,34,53,52,55,54,3,34,7,6, 21,20,23,22,51,50,55,54,53,52,39,38,1,125,250,86, 39,60,40,56,79,32,14,9,49,50,32,40,66,66,33,29, 46,15,47,78,124,28,7,59,21,25,59,29,14,60,19,23, 27,12,5,92,67,33,49,21,53,30,17,45,43,63,30,26, 42,41,12,14,73,10,1,167,59,76,143,90,69,7,48,40, 78,29,12,50,32,39,152,123,103,74,48,22,10,42,15,16, 49,18,6,34,15,1,226,136,62,87,99,56,38,55,24,31, 24,30,31,58,66,39,25,54,44,68,12,44,85,21,26,67, 23,8,39,18,23,25,27,10,11,75,52,76,13,71,42,45, 63,51,52,21,53,43,49,15,4,104,13,15,171,49,17,69, 52,78,21,65,26,34,62,39,26,199,141,78,66,254,221,34, 15,17,44,16,6,38,13,15,36,21,9,0,0,3,0,12, 254,239,2,244,1,226,0,15,0,27,0,119,0,0,55,50, 55,54,53,52,39,38,35,34,7,6,21,20,23,22,19,50, 55,54,53,52,39,38,35,34,7,20,19,50,23,22,21,20, 7,6,35,34,39,38,53,52,55,6,21,20,23,22,59,1, 21,35,34,7,6,7,6,35,34,53,52,55,54,51,50,23, 22,21,20,15,1,54,55,54,55,54,55,34,39,38,53,52, 55,54,51,50,23,6,21,20,23,22,51,50,55,54,53,52, 39,38,35,34,7,6,7,54,51,50,23,22,21,20,7,6, 35,34,53,52,55,54,150,59,16,5,41,15,16,51,18,5, 34,15,114,59,7,1,33,7,8,49,6,170,250,86,39,60, 40,56,79,32,14,9,49,50,32,40,66,66,33,29,46,15, 47,78,159,53,30,33,64,28,13,35,8,46,27,1,1,49, 21,53,30,17,45,43,63,30,26,42,41,12,14,73,10,1, 167,59,76,143,90,69,7,48,40,78,29,12,50,32,39,152, 123,103,59,41,12,13,42,16,6,38,12,14,36,21,9,254, 243,60,7,8,25,8,2,46,46,2,162,136,62,87,99,56, 38,55,24,31,24,30,31,58,66,39,25,54,44,68,12,44, 132,49,30,17,47,21,27,52,23,5,9,38,2,2,76,13, 71,42,45,63,51,52,21,53,43,49,15,4,104,13,15,171, 49,17,69,52,78,21,65,26,34,62,39,26,199,141,78,66, 0,4,0,12,254,239,5,200,1,226,0,45,0,55,0,153, 0,169,0,0,37,54,55,54,59,1,21,35,17,35,17,35, 6,21,17,35,17,52,39,38,35,34,7,6,21,54,51,50, 23,22,21,20,7,6,7,34,39,38,53,52,55,54,51,50, 23,22,5,20,23,22,51,50,53,52,35,34,1,50,23,22, 21,20,7,6,35,34,39,38,53,52,55,6,21,20,23,22, 59,1,21,35,34,7,6,7,6,35,34,39,38,53,52,55, 54,51,50,23,22,21,35,38,35,34,7,6,21,20,51,50, 55,54,55,34,39,38,53,52,55,54,51,50,23,6,21,20, 23,22,51,50,55,54,53,52,39,38,35,34,7,6,7,54, 51,50,23,22,21,20,7,6,35,34,53,52,55,54,3,34, 7,6,21,20,23,22,51,50,55,54,53,52,39,38,4,98, 32,50,17,17,242,145,55,37,89,55,59,30,38,33,40,46, 29,28,63,31,17,57,32,27,53,37,25,49,53,80,92,45, 8,254,246,39,9,10,51,59,50,254,42,250,86,39,60,40, 56,79,32,14,9,49,50,32,40,66,66,33,29,46,15,47, 78,124,28,7,59,21,25,59,29,14,60,19,23,27,12,5, 92,67,33,49,21,53,30,17,45,43,63,30,26,42,41,12, 14,73,10,1,167,59,76,143,90,69,7,48,40,78,29,12, 50,32,39,152,123,103,74,48,22,10,42,15,16,49,18,6, 34,15,170,56,19,7,55,254,115,1,141,8,101,254,224,1, 32,68,31,16,29,34,45,15,49,25,32,68,29,11,2,60, 42,43,84,64,71,65,11,172,40,10,3,47,56,1,166,136, 62,87,99,56,38,55,24,31,24,30,31,58,66,39,25,54, 44,68,12,44,85,21,26,67,23,8,39,18,23,25,27,10, 11,75,52,76,13,71,42,45,63,51,52,21,53,43,49,15, 4,104,13,15,171,49,17,69,52,78,21,65,26,34,62,39, 26,199,141,78,66,254,221,34,15,17,44,16,6,38,13,15, 36,21,9,0,0,3,0,16,255,254,2,121,1,226,0,3, 0,15,0,55,0,0,19,21,51,53,7,34,7,6,21,20, 23,22,51,50,61,1,7,34,39,38,53,52,55,54,59,1, 53,33,21,35,21,51,50,23,22,21,20,7,6,35,34,39, 53,22,51,50,55,54,53,52,43,1,21,20,7,6,180,162, 217,28,15,6,60,44,43,119,119,95,62,50,38,22,26,23, 1,174,159,110,64,38,25,62,39,48,32,36,29,35,67,23, 8,96,86,80,41,1,172,139,139,194,38,14,14,49,38,28, 115,66,236,63,50,69,55,34,20,193,54,139,61,39,46,69, 41,27,15,61,16,43,15,19,91,91,87,38,20,0,0,1, 0,14,255,254,2,179,1,226,0,35,0,0,19,33,21,35, 21,54,51,50,23,22,21,20,7,51,17,51,17,33,53,51, 54,55,54,53,38,39,38,35,34,7,21,35,17,35,17,35, 14,1,162,145,34,44,71,47,33,55,176,54,254,53,133,58, 20,6,1,47,20,23,44,27,55,164,54,1,226,54,133,28, 53,38,46,91,42,1,173,254,28,55,18,64,20,25,46,21, 10,34,92,1,41,254,82,0,0,3,0,16,255,254,2,115, 1,226,0,21,0,33,0,37,0,0,23,34,39,38,53,52, 55,54,59,1,53,33,21,35,21,51,21,35,21,20,7,6, 55,53,35,34,7,6,21,20,23,22,51,50,17,35,21,51, 223,95,62,50,39,21,26,23,1,174,159,231,231,80,41,67, 217,36,10,3,60,44,43,119,162,162,2,63,50,69,59,32, 18,193,54,139,55,91,87,38,20,170,66,43,11,12,49,38, 28,1,119,139,0,3,0,12,254,244,3,25,1,221,0,15, 0,31,0,128,0,0,5,20,23,22,51,50,55,54,53,52, 39,38,35,34,7,6,1,52,39,38,35,34,7,6,21,20, 23,22,51,50,55,54,7,34,39,38,53,52,55,54,51,50, 23,54,51,50,23,22,21,20,15,3,33,34,7,6,21,20, 23,22,51,50,63,1,54,51,50,23,22,21,20,15,1,6, 35,34,39,38,39,52,55,6,7,6,35,34,39,38,53,52, 55,54,51,33,50,55,54,53,52,39,38,35,34,7,6,29, 1,35,53,52,39,38,35,34,15,1,6,7,54,51,50,23, 22,21,20,7,6,2,84,45,10,11,50,19,7,40,14,16, 46,19,7,254,146,44,17,20,55,17,5,48,17,19,49,19, 6,80,94,32,12,81,61,82,143,51,51,111,96,59,46,104, 35,41,33,254,168,95,42,21,63,35,41,37,80,149,80,89, 73,39,23,57,28,21,21,61,33,16,1,14,19,198,76,59, 85,59,49,103,53,68,1,82,82,46,30,51,41,54,74,40, 25,55,60,45,57,67,41,15,2,2,25,24,74,38,21,62, 36,136,55,11,3,36,13,15,45,17,6,35,13,1,94,51, 20,8,45,13,16,51,19,6,40,14,110,83,32,41,109,63, 47,98,98,85,66,86,156,55,15,8,2,48,24,32,62,33, 18,51,96,52,57,33,42,63,34,13,6,55,28,33,34,26, 6,127,49,58,47,63,97,41,21,73,47,61,78,58,46,66, 41,51,151,145,78,52,40,41,19,3,4,9,62,35,44,69, 37,21,0,2,0,8,254,239,3,166,1,221,0,15,0,80, 0,0,37,20,23,22,51,50,55,54,53,52,39,38,35,34, 7,6,37,54,51,50,23,22,21,20,7,6,35,34,39,38, 53,52,63,1,50,21,6,21,20,23,22,51,50,55,54,53, 52,39,38,35,34,7,21,35,17,35,34,7,6,21,54,51, 50,23,22,21,20,7,6,35,34,39,38,53,52,55,54,51, 33,21,35,1,0,50,20,24,63,26,10,39,26,25,50,33, 20,1,162,40,56,98,43,23,145,122,175,193,142,149,78,11, 38,67,137,130,157,147,104,124,43,31,35,46,38,61,205,90, 59,46,50,90,93,39,19,56,39,50,101,60,46,76,76,104, 1,191,181,143,55,23,9,45,19,23,39,35,23,42,26,44, 33,88,47,61,164,88,74,119,126,190,198,97,2,25,109,163, 155,113,107,64,76,137,53,41,29,49,140,1,162,65,51,66, 65,68,33,44,75,48,33,83,64,84,105,72,71,61,0,1, 0,20,255,254,2,211,1,226,0,5,0,0,19,51,17,33, 21,33,20,54,2,137,253,65,1,226,254,83,55,0,0,4, 0,8,255,254,5,34,1,228,0,73,0,88,0,100,0,112, 0,0,1,50,23,54,55,54,51,33,21,35,17,35,17,35, 34,7,22,21,20,7,6,35,34,39,38,53,52,55,38,35, 34,7,22,21,20,15,1,6,35,34,39,38,53,52,55,38, 35,34,7,6,7,54,51,50,23,22,21,20,7,6,35,34, 39,38,53,52,55,54,51,50,23,54,55,54,5,34,7,6, 15,1,20,23,22,51,50,53,52,39,38,5,20,23,22,51, 50,55,54,53,52,39,6,39,6,21,20,23,22,51,50,55, 54,53,52,2,168,116,65,60,64,8,7,1,58,156,60,98, 52,38,100,57,38,54,78,44,28,96,66,67,60,48,100,57, 23,32,38,76,44,29,94,53,62,137,74,39,10,42,48,82, 43,27,80,31,39,84,46,40,107,97,135,93,76,65,82,9, 254,18,44,34,18,2,2,48,23,29,95,43,24,2,46,39, 25,33,46,30,20,96,97,248,96,41,24,31,42,33,22,1, 226,41,35,5,1,54,254,82,1,174,18,82,137,98,56,39, 76,48,60,140,82,28,22,82,137,98,56,19,20,75,49,60, 144,78,24,71,37,50,27,64,39,51,99,33,13,66,55,72, 129,86,78,43,35,5,1,242,35,18,19,18,59,30,14,96, 48,31,18,49,72,44,28,63,41,40,121,65,79,79,75,111, 75,43,26,62,43,39,122,0,0,3,255,228,254,244,2,103, 1,226,0,57,0,61,0,73,0,0,23,34,39,38,53,52, 55,54,59,1,53,33,21,35,21,51,50,23,22,21,20,7, 6,7,6,43,1,34,7,6,21,20,23,22,49,35,52,39, 52,55,54,59,1,50,55,54,53,52,39,38,39,34,43,1, 21,20,7,6,3,51,53,35,23,35,34,7,6,21,20,23, 22,51,50,53,223,95,62,50,39,21,26,23,1,174,159,43, 96,49,31,113,37,46,25,27,242,66,18,16,1,1,52,3, 58,29,48,235,154,47,18,69,18,23,6,6,43,80,41,95, 162,162,162,217,36,10,3,63,39,45,119,2,63,50,69,59, 32,18,193,54,139,79,49,65,153,60,19,6,4,20,18,38, 11,12,23,1,49,90,24,12,97,36,47,104,31,9,2,91, 87,38,20,1,35,139,194,43,11,12,58,35,22,115,0,1, 255,232,254,244,2,4,1,226,0,43,0,0,19,33,21,35, 21,54,51,50,23,22,21,20,7,6,7,35,34,7,21,23, 35,39,55,54,55,54,59,1,50,55,54,53,52,39,38,35, 34,7,21,35,17,35,17,35,8,1,179,144,39,33,82,40, 23,87,60,70,170,94,3,1,54,2,2,10,79,19,24,182, 124,33,11,47,25,34,45,11,55,181,55,1,226,54,164,18, 87,51,62,129,61,36,2,82,11,29,46,42,73,12,3,102, 32,40,81,40,22,39,188,1,174,254,82,0,0,3,0,8, 255,254,3,209,1,231,0,51,0,63,0,78,0,0,1,22, 21,20,15,1,6,35,34,39,38,53,52,55,38,35,34,7, 6,7,54,51,50,23,22,21,20,7,6,35,34,39,38,53, 52,55,54,51,50,23,54,55,54,51,33,21,35,17,35,17, 35,34,7,6,21,20,23,22,51,50,55,54,53,52,1,50, 53,52,39,38,35,34,7,6,15,1,20,23,22,2,54,100, 57,23,32,38,76,44,29,94,53,62,137,74,39,10,42,48, 82,43,27,80,31,39,84,46,40,108,100,136,89,75,50,79, 9,8,1,59,159,60,96,54,92,96,41,24,31,42,33,22, 254,77,95,43,24,28,44,34,18,2,2,48,23,1,154,82, 137,98,56,19,20,75,49,60,144,78,24,71,37,50,27,64, 39,51,99,33,13,66,55,72,131,86,79,42,32,4,1,54, 254,82,1,174,51,75,111,75,43,26,62,43,39,122,254,246, 96,48,31,18,35,18,19,18,59,30,14,0,0,1,0,18, 255,254,2,39,1,226,0,7,0,0,19,51,17,33,17,51, 17,33,18,54,1,168,55,253,235,1,226,254,83,1,173,254, 28,0,0,2,0,14,255,254,2,133,1,226,0,17,0,31, 0,0,19,51,17,51,17,52,55,54,51,50,23,22,21,20, 7,6,35,33,37,52,39,38,35,34,7,6,21,17,51,50, 55,54,14,54,205,89,26,32,96,68,61,68,31,42,254,22, 2,66,53,48,69,67,17,10,176,52,24,12,1,226,254,83, 1,46,95,25,7,99,88,102,126,47,22,191,98,73,68,34, 20,38,254,229,68,32,0,1,0,14,255,251,2,131,1,226, 0,23,0,0,19,51,17,22,23,50,55,54,55,17,51,17, 33,17,51,17,33,53,6,7,6,35,34,53,14,54,6,37, 55,38,20,3,52,1,53,55,254,96,27,63,19,19,85,1, 226,254,132,46,4,53,28,29,1,64,254,83,1,173,254,28, 55,39,14,5,75,0,0,1,0,10,255,49,1,146,1,226, 0,11,0,0,19,33,21,35,17,7,53,55,17,35,17,35, 10,1,136,144,199,144,139,54,1,226,54,254,88,211,66,157, 1,156,254,82,0,1,255,253,254,244,2,56,1,226,0,59, 0,0,5,35,34,7,6,21,20,21,23,35,39,55,54,55, 54,59,1,50,55,54,53,52,35,34,7,6,21,17,35,17, 52,39,38,35,34,7,6,21,17,35,17,52,55,54,51,50, 23,22,23,54,55,54,51,50,23,22,21,20,7,6,1,53, 159,72,17,7,1,55,2,2,11,85,17,20,176,110,59,42, 145,44,29,17,55,43,22,26,35,25,13,54,55,31,41,68, 41,7,5,24,49,21,21,128,45,20,60,70,146,36,16,27, 5,4,34,45,42,76,11,2,106,76,101,237,45,26,27,254, 180,1,76,55,28,15,48,26,24,254,180,1,82,81,42,23, 53,9,10,43,20,9,142,62,81,137,94,112,0,2,0,12, 255,253,3,52,1,226,0,61,0,77,0,0,1,34,7,6, 21,54,51,50,23,22,21,20,7,6,35,34,39,38,53,52, 55,54,51,50,23,22,21,20,21,20,7,6,49,23,22,23, 22,51,50,55,54,53,52,35,53,50,21,20,7,6,35,34, 39,38,53,52,53,55,39,38,39,38,7,34,7,6,21,20, 23,22,51,50,55,54,53,52,39,38,1,8,70,63,61,51, 74,85,44,26,67,41,51,83,49,47,72,71,109,94,75,74, 1,2,2,11,66,10,11,96,43,23,176,230,71,55,79,97, 41,28,3,2,8,46,57,136,63,30,14,53,21,24,66,25, 10,40,24,1,172,61,60,67,57,65,39,50,78,41,26,67, 62,84,110,81,80,72,73,88,5,5,1,23,33,40,76,11, 2,83,45,59,188,54,242,119,70,53,65,44,56,5,6,55, 36,55,49,59,182,49,24,30,58,22,9,47,18,24,51,33, 19,0,0,2,0,10,255,254,3,64,1,226,0,47,0,63, 0,0,1,33,21,35,17,35,17,35,34,7,6,21,17,35, 17,52,39,38,35,34,7,6,21,54,51,50,23,22,21,20, 7,6,35,34,39,38,53,52,55,54,51,50,23,22,23,54, 55,54,3,52,39,38,35,34,7,6,21,20,23,22,51,50, 55,54,2,60,1,4,144,55,67,51,25,13,55,60,47,51, 93,60,47,53,76,93,38,18,63,39,49,112,46,23,74,74, 112,77,64,17,11,12,61,28,251,43,26,29,44,31,20,51, 22,27,59,24,10,1,226,54,254,82,1,174,59,29,33,254, 203,1,29,60,48,37,69,54,71,56,73,35,45,74,40,25, 99,51,67,112,77,78,63,16,18,61,25,11,254,167,52,32, 19,43,26,28,54,24,11,44,17,0,0,2,0,8,254,244, 2,133,1,226,0,13,0,67,0,0,37,52,39,38,35,34, 7,6,21,17,51,50,55,54,5,20,23,22,59,1,21,35, 34,15,1,6,35,34,39,38,53,52,55,54,59,1,21,35, 34,7,6,21,20,51,50,55,54,51,38,53,33,17,51,17, 51,17,52,55,54,51,50,23,22,21,20,7,6,35,2,80, 53,48,69,67,17,10,176,52,24,12,254,248,34,20,44,17, 23,56,51,81,48,49,90,28,9,35,18,19,115,109,21,7, 1,78,35,83,41,34,55,254,253,54,205,89,26,32,96,68, 61,68,31,42,189,98,73,68,34,20,38,254,229,68,32,155, 57,13,8,49,36,67,36,66,22,28,41,25,12,55,21,5, 5,61,82,39,20,78,1,228,254,83,1,46,95,25,7,99, 88,102,126,47,22,0,0,2,0,16,255,254,3,48,1,226, 0,41,0,57,0,0,1,34,7,6,7,54,51,50,23,22, 21,20,7,6,35,34,39,38,53,52,55,54,51,50,23,22, 21,20,7,33,17,51,17,33,53,54,55,54,53,52,39,38, 7,34,7,6,21,20,23,22,51,50,55,54,53,52,39,38, 1,39,78,63,45,7,45,39,81,43,26,66,37,47,100,45, 25,80,81,118,100,79,81,78,1,27,56,254,63,83,30,14, 71,56,187,58,22,9,49,20,26,60,23,9,48,22,1,172, 56,40,49,20,67,41,52,83,40,22,85,46,62,119,86,86, 70,74,98,128,59,1,173,254,28,49,29,81,36,41,90,58, 46,182,50,20,24,63,25,11,49,19,24,61,27,13,0,4, 0,10,255,49,4,62,1,226,0,8,0,24,0,40,0,109, 0,0,37,51,50,55,54,53,52,43,1,37,34,7,6,21, 20,23,22,51,50,55,54,53,52,39,38,37,34,7,6,21, 20,23,22,51,55,54,55,52,47,1,38,33,34,7,6,7, 54,51,50,23,22,21,20,7,6,35,34,39,38,53,52,55, 54,51,50,23,22,21,20,7,51,55,34,39,38,53,52,55, 54,51,50,23,22,21,20,15,1,51,50,23,22,21,20,15, 1,6,43,1,7,35,55,33,53,54,55,54,53,52,39,38, 2,254,207,42,17,7,98,115,253,116,58,22,9,49,20,26, 60,23,9,48,22,2,46,44,29,17,63,30,32,41,6,1, 44,27,6,254,35,78,63,45,7,45,39,81,43,26,66,37, 47,101,45,24,79,79,121,100,79,81,78,235,64,75,48,32, 43,42,60,75,39,23,10,35,107,80,32,15,57,26,14,16, 231,97,61,97,254,192,83,30,14,71,56,53,37,13,16,67, 60,50,20,24,63,25,11,49,19,24,61,27,13,182,52,32, 31,42,21,10,94,13,16,39,18,7,1,56,40,49,20,67, 41,52,83,40,22,85,47,61,122,85,84,70,74,98,128,59, 135,51,35,44,62,50,52,50,29,37,25,21,80,60,27,34, 77,31,10,3,205,205,49,29,81,36,41,90,58,46,0,2, 0,12,255,254,3,252,2,0,0,76,0,92,0,0,1,50, 23,22,7,20,21,15,1,20,51,50,55,54,53,52,39,53, 50,23,22,21,20,7,6,35,34,53,52,55,54,55,39,38, 39,38,35,34,7,6,21,17,35,17,52,39,38,35,34,7, 6,21,54,51,50,23,22,21,20,7,6,35,34,39,38,53, 52,55,54,51,50,23,22,23,54,55,54,1,20,23,22,51, 50,55,54,53,52,39,38,35,34,7,6,2,92,99,38,17, 1,3,5,77,64,43,32,139,96,56,42,67,51,76,133,7, 1,1,2,12,64,12,14,65,27,12,55,80,43,52,70,63, 61,51,74,85,44,26,67,41,51,83,49,47,72,71,109,108, 67,21,11,16,58,29,254,34,53,21,24,66,25,10,40,24, 28,63,30,14,1,226,81,35,45,7,8,42,72,139,81,60, 64,183,16,55,92,69,87,132,76,58,184,23,70,12,12,38, 75,13,3,59,25,31,254,197,1,47,74,34,19,61,60,67, 57,65,39,50,78,41,26,67,62,84,110,81,80,48,15,17, 46,22,12,254,173,58,22,9,47,18,24,51,33,19,49,24, 0,2,0,16,254,244,4,238,1,226,0,95,0,111,0,0, 1,34,7,6,7,54,51,50,23,22,21,20,7,6,35,34, 39,38,53,52,55,54,51,50,23,22,21,20,7,51,17,52, 55,54,51,50,23,54,55,54,51,50,23,22,21,20,7,6, 35,33,34,15,1,20,21,23,35,39,55,54,55,54,51,33, 50,55,54,53,52,35,34,7,6,21,17,35,17,52,47,1, 38,35,34,7,6,21,17,33,53,54,55,54,53,52,39,38, 7,34,7,6,21,20,23,22,51,50,55,54,53,52,39,38, 1,39,78,63,45,7,45,39,81,43,26,66,37,47,100,45, 25,80,81,118,100,79,81,78,228,55,31,41,85,36,32,51, 16,16,128,46,20,60,70,130,252,213,82,13,2,2,55,2, 2,11,85,17,20,3,54,110,62,45,145,43,29,17,55,43, 22,13,14,35,24,13,254,119,83,30,14,71,56,187,58,22, 9,49,20,26,60,23,9,48,22,1,172,56,40,49,20,67, 41,52,83,40,22,85,46,62,119,86,86,70,74,98,128,59, 1,27,81,42,23,72,51,16,5,140,63,82,137,94,112,52, 30,1,2,37,45,42,76,11,2,104,76,103,237,45,26,27, 254,180,1,76,54,29,11,4,47,26,25,254,180,49,29,81, 36,41,90,58,46,182,50,20,24,63,25,11,49,19,24,61, 27,13,0,1,0,10,255,254,1,140,1,226,0,9,0,0, 19,33,21,35,17,35,17,35,17,35,10,1,130,138,55,139, 54,1,226,54,254,82,1,174,254,82,0,1,254,143,255,254, 0,76,3,3,0,24,0,0,19,52,39,38,35,34,7,6, 21,20,23,35,38,53,52,55,54,51,50,31,1,22,21,17, 7,21,88,35,46,80,49,33,37,67,29,90,57,76,153,49, 13,7,55,2,6,144,47,18,55,37,49,52,52,60,47,98, 51,33,128,44,35,41,253,245,2,0,0,2,254,180,1,226, 255,244,3,2,0,27,0,39,0,0,3,35,38,39,38,53, 52,55,54,51,50,31,1,22,21,20,7,6,35,34,39,38, 53,52,55,6,21,20,55,34,7,6,21,20,51,50,53,52, 39,38,195,73,40,17,7,71,47,59,92,35,11,5,50,25, 30,57,32,18,13,65,153,35,10,3,54,49,32,11,1,226, 19,67,26,25,77,44,30,65,27,19,20,62,30,14,49,29, 33,27,22,12,78,87,179,36,9,10,56,50,40,16,5,0, 0,2,0,8,0,209,1,236,1,226,0,5,0,9,0,0, 19,33,17,33,53,35,33,21,51,53,8,1,228,254,247,219, 1,15,159,1,226,254,239,219,164,164,0,2,0,12,255,254, 2,39,3,9,0,37,0,53,0,0,19,52,55,54,51,50, 31,1,22,21,17,35,17,52,39,38,35,34,7,6,21,20, 23,54,55,54,51,50,23,22,21,20,7,6,35,34,39,38, 37,34,7,6,21,20,23,22,51,50,55,54,53,52,39,38, 12,90,77,124,174,53,13,8,55,88,44,61,119,64,53,48, 12,70,33,41,98,31,12,65,36,45,143,67,44,1,9,57, 27,13,58,13,15,42,31,18,39,18,1,123,194,110,94,137, 44,36,42,253,248,2,13,126,50,26,118,97,128,116,104,83, 34,16,86,32,40,79,38,22,149,97,2,53,25,30,72,15, 4,44,26,26,60,29,14,0,0,3,0,10,255,254,2,97, 3,3,0,15,0,60,0,76,0,0,1,34,7,6,21,20, 23,22,51,50,55,54,53,52,39,38,3,38,53,52,55,54, 51,50,23,22,21,20,7,6,35,34,39,38,53,52,55,54, 51,50,23,22,21,20,15,1,6,35,34,39,38,53,52,55, 34,7,6,21,20,23,22,55,34,7,6,21,20,23,22,51, 50,55,54,53,52,39,38,1,189,45,31,19,55,20,25,62, 26,11,46,29,124,56,63,42,52,65,52,41,94,62,80,145, 110,108,104,104,167,105,65,49,76,33,24,26,76,43,28,57, 127,85,80,79,86,217,52,32,19,50,23,27,66,28,13,45, 29,2,181,43,25,27,60,22,8,46,20,24,44,32,19,253, 134,56,68,78,45,30,56,44,50,101,53,34,117,117,147,167, 112,113,61,46,66,92,38,11,6,62,39,49,69,47,108,101, 127,127,94,101,224,49,28,32,57,25,12,50,22,28,45,35, 23,0,0,3,0,18,255,254,3,156,1,229,0,56,0,70, 0,82,0,0,1,34,7,6,7,54,51,50,23,22,21,20, 7,6,35,34,39,38,53,52,55,54,51,50,23,54,51,50, 23,22,21,20,7,39,54,55,54,53,52,39,38,35,34,7, 22,21,20,7,6,35,34,39,38,53,52,55,38,7,34,7, 6,21,20,23,22,51,50,53,52,39,38,23,20,23,22,51, 50,55,54,53,52,39,6,1,99,130,74,45,8,40,49,81, 44,26,80,31,39,93,47,30,108,98,135,95,71,73,70,112, 74,70,96,55,71,21,6,67,66,87,39,36,100,58,39,54, 76,43,29,96,55,230,63,24,9,48,21,27,97,45,24,214, 41,23,31,46,32,20,98,95,1,172,64,39,55,27,65,39, 50,99,33,13,79,49,65,129,86,79,44,41,89,83,115,125, 72,18,60,92,27,28,86,57,59,15,82,137,100,56,37,75, 50,59,140,82,24,188,52,21,24,59,25,12,96,50,30,17, 49,77,42,25,63,41,40,115,71,81,0,3,0,12,255,254, 4,172,3,9,0,9,0,47,0,63,0,0,1,33,21,35, 17,35,17,35,17,35,1,52,55,54,51,50,31,1,22,21, 17,35,17,52,39,38,35,34,7,6,21,20,23,54,55,54, 51,50,23,22,21,20,7,6,35,34,39,38,37,34,7,6, 21,20,23,22,51,50,55,54,53,52,39,38,3,42,1,130, 138,55,139,54,252,226,90,77,124,174,53,13,8,55,88,44, 61,119,64,53,48,12,70,33,41,98,31,12,65,36,45,143, 67,44,1,9,57,27,13,58,13,15,42,31,18,39,18,1, 226,54,254,82,1,174,254,82,1,125,194,110,94,137,44,36, 42,253,248,2,13,126,50,26,118,97,128,116,104,83,34,16, 86,32,40,79,38,22,149,97,2,53,25,30,72,15,4,44, 26,26,60,29,14,0,0,4,0,10,255,254,4,172,3,3, 0,15,0,60,0,76,0,86,0,0,1,34,7,6,21,20, 23,22,51,50,55,54,53,52,39,38,3,38,53,52,55,54, 51,50,23,22,21,20,7,6,35,34,39,38,53,52,55,54, 51,50,23,22,21,20,15,1,6,35,34,39,38,53,52,55, 34,7,6,21,20,23,22,55,34,7,6,21,20,23,22,51, 50,55,54,53,52,39,38,37,33,21,35,17,35,17,35,17, 35,1,189,45,31,19,55,20,25,62,26,11,46,29,124,56, 63,42,52,65,52,41,94,62,80,145,110,108,104,104,167,105, 65,49,76,33,24,26,76,43,28,57,127,85,80,79,86,217, 52,32,19,50,23,27,66,28,13,45,29,1,79,1,130,138, 55,139,54,2,181,43,25,27,60,22,8,46,20,24,44,32, 19,253,134,56,68,78,45,30,56,44,50,101,53,34,117,117, 147,167,112,113,61,46,66,92,38,11,6,62,39,49,69,47, 108,101,127,127,94,101,224,49,28,32,57,25,12,50,22,28, 45,35,23,199,54,254,82,1,174,254,82,0,0,4,0,12, 255,254,6,96,3,9,0,48,0,64,0,102,0,118,0,0, 1,33,21,35,17,35,17,35,34,7,6,21,17,35,17,52, 39,38,35,34,7,6,21,54,51,50,23,22,21,20,15,1, 6,35,34,39,38,53,52,55,54,51,50,23,22,23,54,55, 54,3,52,39,38,35,34,7,6,21,20,23,22,51,50,55, 54,1,52,55,54,51,50,31,1,22,21,17,35,17,52,39, 38,35,34,7,6,21,20,23,54,55,54,51,50,23,22,21, 20,7,6,35,34,39,38,37,34,7,6,21,20,23,22,51, 50,55,54,53,52,39,38,5,92,1,4,144,55,67,51,25, 13,55,60,47,51,93,60,47,53,76,93,38,18,65,29,27, 30,112,46,23,74,74,112,77,64,17,11,12,61,28,251,43, 26,29,44,31,20,51,22,27,59,24,10,251,203,90,77,124, 174,53,13,8,55,88,44,61,119,64,53,48,12,70,33,41, 98,31,12,65,36,45,143,67,44,1,9,57,27,13,58,13, 15,42,31,18,39,18,1,226,54,254,82,1,174,59,29,33, 254,203,1,29,60,48,37,69,54,71,56,73,35,45,75,40, 14,10,99,51,67,112,77,78,63,16,18,61,25,11,254,167, 52,32,19,43,26,28,54,24,11,44,17,1,8,194,110,94, 137,44,36,42,253,248,2,13,126,50,26,118,97,128,116,104, 83,34,16,86,32,40,79,38,22,149,97,2,53,25,30,72, 15,4,44,26,26,60,29,14,0,1,0,118,2,164,0,213, 3,1,0,11,0,0,19,20,7,6,35,34,53,52,55,54, 51,50,213,28,10,10,47,31,8,9,47,2,213,31,14,4, 49,31,10,3,0,2,0,10,255,254,3,64,1,226,0,47, 0,63,0,0,1,33,21,35,17,35,17,35,34,7,6,21, 17,35,17,52,39,38,35,34,7,6,21,54,51,50,23,22, 21,20,7,6,35,34,39,38,53,52,55,54,51,50,23,22, 23,54,55,54,3,52,39,38,35,34,7,6,21,20,23,22, 51,50,55,54,2,60,1,4,144,55,67,51,25,13,55,60, 47,51,93,60,47,53,76,93,38,18,63,39,49,112,46,23, 74,74,112,77,64,17,11,12,61,28,251,43,26,29,44,31, 20,51,22,27,59,24,10,1,226,54,254,82,1,174,59,29, 33,254,203,1,29,60,48,37,69,54,71,56,73,35,45,74, 40,25,99,51,67,112,77,78,63,16,18,61,25,11,254,167, 52,32,19,43,26,28,54,24,11,44,17,0,0,3,0,16, 255,254,2,199,1,226,0,11,0,15,0,39,0,0,37,53, 35,34,7,6,21,20,23,22,51,50,17,35,21,51,3,34, 39,38,53,52,55,54,59,1,53,33,21,35,21,33,53,51, 21,33,21,20,7,6,1,86,217,36,10,3,60,44,43,119, 162,162,119,95,62,50,39,21,26,23,1,174,159,0,255,60, 254,197,80,41,168,66,43,11,12,49,38,28,1,119,139,254, 221,63,50,69,59,32,18,193,54,139,193,248,91,87,38,20, 0,2,0,14,254,239,3,52,1,226,0,53,0,63,0,0, 37,52,39,38,47,1,38,35,34,7,53,54,55,54,51,50, 23,22,21,20,7,6,35,34,39,38,47,1,55,54,55,54, 55,54,51,50,23,22,21,7,6,7,6,21,20,21,23,22, 23,22,51,50,55,54,3,21,35,17,35,17,35,17,35,17, 2,254,44,10,11,22,16,18,67,41,18,53,22,20,98,46, 26,123,113,145,175,122,122,4,1,2,14,69,15,16,7,8, 20,4,1,3,59,28,12,1,6,105,101,152,121,100,111,90, 139,55,140,53,47,79,55,13,9,13,7,75,67,36,17,7, 99,56,73,141,93,86,106,108,172,32,64,139,84,18,13,6, 20,2,3,10,62,116,52,47,5,5,28,161,87,84,68,77, 2,38,54,254,82,1,174,254,82,1,228,0,0,5,0,16, 255,254,3,59,1,226,0,3,0,7,0,29,0,41,0,45, 0,0,37,51,21,35,39,51,21,35,5,34,39,38,53,52, 55,54,59,1,53,33,21,35,21,33,21,33,21,20,7,6, 39,20,23,22,51,50,61,1,35,34,7,6,37,35,21,51, 2,218,60,60,200,60,60,254,205,95,62,50,24,22,40,23, 1,174,159,1,175,254,81,78,41,201,58,44,45,119,217,36, 10,3,1,10,162,162,254,254,254,254,2,63,50,69,41,33, 35,193,54,139,55,91,86,38,21,170,49,38,28,115,66,43, 11,248,139,0,0,2,0,14,255,254,2,107,1,221,0,28, 0,44,0,0,1,33,21,35,17,35,17,35,34,7,6,21, 54,51,50,23,22,21,20,7,6,35,34,39,38,53,52,55, 54,19,50,55,54,53,52,39,38,35,34,7,6,21,20,23, 22,1,12,1,95,84,60,207,89,59,46,44,95,93,39,20, 50,43,51,102,60,45,85,71,41,65,25,10,37,26,27,51, 33,20,50,20,1,221,61,254,94,1,162,65,51,66,65,67, 34,44,69,47,40,84,64,83,114,72,62,254,91,46,18,23, 38,34,25,42,25,30,56,22,9,0,0,1,0,16,255,251, 2,203,1,216,0,27,0,0,19,50,23,22,23,53,33,21, 35,17,35,17,35,17,35,17,38,39,38,35,34,7,17,35, 17,52,55,54,79,67,51,14,8,1,240,110,78,228,80,7, 39,16,18,41,4,78,31,13,1,216,42,11,13,66,57,254, 92,1,164,254,92,1,86,52,21,9,25,254,113,1,164,45, 8,4,0,4,0,22,255,253,1,39,1,199,0,13,0,23, 0,33,0,47,0,0,37,20,7,6,35,34,53,52,55,54, 51,50,23,22,39,51,50,53,52,43,1,34,21,20,23,34, 21,20,59,1,50,53,52,35,3,50,23,22,21,20,35,34, 39,38,53,52,55,54,1,39,73,29,36,135,70,29,36,92, 33,13,189,103,38,38,103,32,32,39,39,103,31,31,52,93, 33,12,138,68,41,26,71,29,98,66,24,10,100,65,24,10, 52,21,189,45,41,42,44,173,42,43,43,42,1,59,54,20, 26,100,41,26,33,66,24,10,0,1,0,22,255,254,2,89, 1,199,0,55,0,0,1,34,7,6,21,20,23,51,21,35, 53,51,38,53,52,55,54,51,50,23,22,21,20,7,6,35, 34,39,38,53,52,55,54,51,50,23,22,21,20,7,39,54, 53,52,35,34,21,20,23,22,51,50,55,54,53,52,1,211, 31,16,8,19,36,241,145,18,54,26,34,81,35,18,104,78, 107,127,81,82,46,46,60,66,25,9,13,52,6,33,93,61, 60,102,103,64,65,1,135,47,22,23,34,25,58,58,46,39, 78,35,17,106,54,68,117,64,48,66,64,99,93,68,67,49, 18,22,28,25,27,18,8,25,164,76,48,48,49,50,78,159, 0,2,0,17,255,254,2,54,1,199,0,59,0,69,0,0, 37,52,39,38,43,1,53,51,38,39,38,53,52,55,54,51, 50,23,22,21,20,7,22,21,20,35,34,39,38,53,52,55, 54,51,50,23,22,21,20,7,39,54,53,52,39,38,35,34, 7,34,21,20,21,22,23,22,51,50,55,54,55,52,39,38, 35,34,21,20,51,54,1,211,18,6,6,231,177,39,7,5, 32,31,50,68,34,19,68,37,244,109,79,86,44,37,57,62, 30,15,14,61,10,20,5,4,8,5,71,2,98,46,61,117, 42,17,31,33,10,10,42,50,45,151,18,10,3,58,34,28, 16,22,46,34,35,57,31,39,48,65,27,41,149,61,66,102, 111,62,55,43,21,26,23,26,24,13,11,19,7,1,4,152, 4,4,101,39,19,44,17,211,27,12,4,43,79,9,0,2, 0,17,255,254,2,53,1,199,0,60,0,73,0,0,19,52, 55,54,51,50,23,54,51,50,23,22,21,20,7,6,7,22, 23,35,52,39,6,35,34,39,38,53,52,55,54,51,50,23, 22,21,54,55,54,53,52,35,34,7,6,29,1,35,53,52, 39,38,35,34,21,20,23,7,38,39,38,23,20,23,22,51, 50,55,54,55,38,39,7,6,17,59,36,43,89,47,58,80, 81,36,19,22,26,27,48,1,59,25,85,95,94,52,43,128, 35,42,43,62,53,33,12,3,84,54,24,10,67,79,12,12, 69,51,61,42,10,7,128,57,26,27,27,50,61,11,25,114, 48,71,1,99,51,31,18,50,50,85,44,56,42,63,74,13, 54,26,18,31,49,34,28,38,85,22,6,30,25,24,31,71, 19,17,113,23,9,11,13,13,35,7,1,56,41,16,30,25, 32,21,206,35,17,8,12,13,21,52,2,3,10,0,0,4, 0,22,255,254,2,227,2,142,0,8,0,18,0,76,0,85, 0,0,1,34,7,6,7,33,52,39,38,5,50,55,54,53, 52,35,34,21,20,55,50,23,22,21,6,7,6,7,22,23, 22,21,20,7,35,54,53,52,39,35,6,7,6,35,34,39, 38,39,35,53,51,52,55,54,55,35,53,33,50,55,54,53, 52,39,55,22,21,20,7,22,21,51,38,53,52,55,54,1, 50,55,54,53,33,22,23,22,1,5,67,44,20,8,1,11, 51,43,1,75,33,14,5,69,52,59,89,26,8,7,40,25, 24,50,18,6,5,86,13,82,90,16,71,52,67,139,49,15, 4,32,32,61,14,11,103,1,54,56,20,7,15,52,32,120, 88,56,33,60,29,254,194,62,35,21,254,255,8,66,29,1, 127,65,29,34,55,41,32,128,41,15,16,56,56,72,200,87, 28,35,41,36,21,2,43,76,25,25,16,22,26,32,92,49, 99,57,43,115,37,47,58,47,71,16,10,56,59,22,25,35, 31,27,55,74,91,35,64,80,39,46,69,31,15,254,125,54, 33,42,83,32,14,0,0,1,0,14,255,254,4,80,1,205, 0,77,0,0,1,52,55,54,51,50,21,7,21,20,51,50, 55,54,53,52,39,38,39,55,22,23,22,23,16,35,34,39, 38,53,52,55,52,35,34,21,20,23,22,21,20,7,6,35, 34,39,38,53,52,55,54,51,50,21,20,7,6,7,39,54, 53,52,35,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,1,133,96,41,53,192,10,112,112,31,14,31,32,37, 71,55,32,12,4,231,117,43,19,7,122,126,7,11,81,50, 67,114,73,72,54,35,49,136,10,13,12,59,30,72,46,17, 7,50,52,89,101,23,5,11,2,1,33,111,39,16,163,104, 1,119,82,40,65,33,58,58,31,26,35,96,38,37,254,255, 90,40,54,38,35,128,86,18,24,41,36,100,49,31,79,79, 114,97,53,35,86,20,33,31,10,22,29,25,40,59,23,26, 90,61,64,81,19,23,34,30,32,0,0,1,0,14,255,254, 5,154,1,200,0,119,0,0,37,50,55,54,53,52,39,52, 55,54,51,50,23,22,21,20,15,2,35,34,39,38,53,52, 55,54,51,23,34,7,6,21,20,23,20,23,22,51,50,55, 39,38,39,38,35,34,7,6,21,22,21,20,7,6,35,34, 53,52,55,54,53,52,39,34,7,6,21,20,23,22,21,20, 35,34,39,38,53,52,55,54,51,50,23,22,21,20,15,1, 39,54,53,52,34,21,20,51,50,53,52,39,38,53,52,55, 54,51,50,51,22,23,22,23,22,21,20,7,6,21,20,3, 85,90,16,4,7,108,56,75,121,68,50,99,32,40,1,96, 30,10,70,29,37,10,54,16,4,6,45,11,12,92,3,3, 9,41,50,69,99,39,18,3,142,22,25,184,12,2,124,86, 28,9,4,9,216,93,62,64,43,38,57,66,43,27,17,8, 52,11,140,171,128,10,7,57,54,78,3,3,146,36,8,2, 1,9,2,68,69,19,25,36,38,125,50,25,87,65,92,156, 43,10,4,63,22,27,77,28,12,51,34,9,11,12,12,33, 10,2,158,39,53,36,44,61,29,38,29,23,176,25,4,166, 40,51,14,11,102,1,57,19,24,17,11,41,42,174,80,77, 115,92,49,44,42,28,33,31,20,10,14,17,14,47,100,215, 110,36,41,29,17,67,44,43,5,98,19,23,10,11,10,63, 15,13,120,0,0,1,0,17,255,253,2,35,1,248,0,44, 0,0,55,50,55,54,53,51,20,23,22,23,50,55,54,53, 52,39,38,39,38,39,55,22,21,20,7,6,35,38,39,6, 7,6,35,34,53,52,55,54,55,23,34,7,6,21,22,155, 50,32,21,67,33,25,34,6,6,46,5,6,44,43,52,36, 186,59,24,35,111,27,22,69,22,23,138,63,27,31,17,47, 17,5,3,68,43,27,32,52,29,23,1,1,4,63,7,57, 65,74,73,32,63,140,224,94,34,14,2,66,47,16,5,142, 65,33,14,3,64,28,9,14,72,0,0,1,0,17,255,254, 2,38,2,1,0,62,0,0,1,34,39,38,53,51,20,23, 22,51,50,55,23,22,23,22,23,22,21,20,7,6,35,34, 39,38,39,6,35,34,39,38,53,52,55,23,38,35,34,7, 6,21,20,23,22,51,50,55,54,53,51,20,51,50,55,54, 53,52,39,38,39,6,7,1,2,77,30,13,68,52,15,18, 44,3,39,107,44,17,4,1,61,26,34,71,44,18,5,42, 94,77,38,23,121,17,6,6,27,20,10,18,19,49,50,24, 12,67,88,47,13,8,40,41,48,29,32,1,113,73,31,40, 53,15,4,43,7,72,128,49,52,9,17,99,37,16,36,15, 19,70,61,35,46,81,34,71,3,24,12,11,38,18,16,49, 24,29,107,30,22,72,43,67,69,30,23,3,0,1,0,17, 255,254,2,35,1,199,0,62,0,0,1,34,7,6,21,35, 52,39,38,35,34,21,20,23,7,38,53,52,55,54,51,50, 23,54,51,50,23,22,29,1,20,15,1,6,35,34,39,6, 35,34,53,52,55,54,51,23,34,7,6,7,20,51,50,55, 54,53,51,20,51,50,61,1,52,1,138,45,26,13,52,48, 28,27,69,8,59,18,67,33,38,76,60,34,88,72,39,23, 65,26,13,14,105,33,49,87,138,74,21,26,17,42,20,6, 1,86,50,24,12,67,88,67,1,127,35,17,18,35,22,13, 43,21,14,8,30,42,51,23,12,64,64,60,36,46,173,99, 31,9,3,64,64,142,80,22,6,57,28,9,14,72,49,24, 29,102,116,86,113,0,0,1,255,251,255,254,2,47,1,199, 0,59,0,0,23,34,39,38,53,52,55,54,55,54,53,52, 35,34,21,20,23,7,38,53,52,55,54,51,50,23,22,21, 20,15,1,6,21,20,23,22,51,50,53,51,20,23,22,51, 50,55,54,53,52,39,55,22,21,20,7,6,35,34,39,6, 167,95,32,12,40,1,73,40,51,72,5,52,17,53,32,35, 94,31,11,40,75,40,22,17,47,88,67,58,12,16,52,14, 3,35,35,67,55,27,36,105,33,49,2,76,29,37,44,40, 1,60,31,24,59,45,12,15,14,14,42,44,27,15,55,20, 25,55,37,55,31,37,48,13,11,86,73,11,2,33,8,9, 29,23,57,31,56,85,38,19,64,64,0,1,255,251,255,253, 2,49,2,151,0,75,0,0,19,34,15,1,6,21,20,23, 7,38,53,52,55,54,55,52,39,38,53,52,55,23,6,21, 20,31,1,22,21,20,7,6,7,6,21,20,23,22,51,50, 53,51,20,23,22,51,50,55,54,53,52,39,55,22,23,20, 7,6,7,34,35,34,39,6,35,34,39,38,53,52,55,54, 55,54,55,52,131,49,19,6,1,8,52,17,24,24,36,31, 30,19,78,19,40,75,40,40,6,69,40,49,17,20,88,67, 56,14,16,53,11,2,32,35,53,16,66,21,27,3,3,105, 33,40,96,80,38,21,38,65,9,39,3,1,143,24,12,3, 3,9,14,21,14,42,29,30,28,5,27,44,42,30,28,31, 9,6,50,59,43,65,36,40,55,40,6,52,31,31,49,17, 6,86,66,16,4,36,7,7,29,29,56,23,69,98,32,11, 1,64,64,63,34,45,41,38,52,7,30,32,59,0,0,2, 255,251,255,254,2,107,2,112,0,35,0,92,0,0,1,20, 7,6,43,1,53,51,50,53,52,43,1,53,33,50,31,1, 22,23,7,6,7,6,35,34,53,51,20,23,50,53,52,43, 1,22,19,34,39,38,39,6,35,34,39,38,53,52,63,1, 54,53,52,35,34,21,20,23,7,38,53,52,55,54,51,50, 23,22,21,20,15,1,6,21,20,51,50,53,51,20,23,22, 51,50,53,52,39,55,22,21,20,7,6,1,21,42,17,19, 187,187,21,11,197,1,155,128,47,12,7,1,3,14,64,20, 24,122,70,42,78,138,152,6,154,80,31,9,8,40,96,85, 36,18,40,76,38,51,78,8,47,19,53,32,35,94,31,11, 40,75,40,86,88,67,56,14,16,70,26,26,68,38,37,2, 20,36,16,6,43,33,25,49,72,25,20,24,45,90,27,8, 112,55,5,103,107,7,253,198,38,11,15,64,66,33,43,42, 37,59,30,32,59,36,15,18,14,16,37,44,27,15,55,20, 25,55,37,55,31,37,72,86,66,16,4,57,29,37,49,26, 74,68,36,38,0,2,0,7,255,234,1,159,1,203,0,17, 0,51,0,0,37,52,39,38,35,34,7,6,21,20,21,22, 23,50,51,54,55,54,39,52,39,38,43,1,53,33,21,35, 22,20,7,51,21,35,22,21,20,7,6,35,34,39,38,53, 52,55,54,55,35,53,51,50,1,51,45,22,25,50,24,11, 10,66,5,4,65,21,6,101,16,6,5,172,1,40,52,14, 14,164,112,70,34,43,81,69,43,39,34,13,22,126,154,45, 127,47,25,12,39,17,20,4,4,82,1,4,47,15,249,20, 13,4,63,60,23,56,23,57,40,73,48,43,58,45,41,48, 75,31,11,11,57,0,0,2,0,14,255,254,2,240,1,192, 0,60,0,68,0,0,1,50,23,22,21,20,7,22,51,50, 53,52,39,38,39,35,53,51,23,22,21,20,7,6,35,34, 39,6,7,6,35,34,39,38,53,52,55,54,51,50,23,22, 23,54,53,52,47,1,38,35,34,7,23,21,7,38,53,55, 54,55,54,3,20,51,50,55,38,35,34,1,17,87,45,28, 42,115,40,136,67,18,18,20,79,54,60,94,41,54,121,76, 47,92,30,28,72,44,39,45,43,67,70,69,16,10,30,39, 18,16,18,65,1,4,69,4,5,3,34,38,136,87,70,49, 51,68,87,1,189,75,46,62,90,52,58,135,85,81,21,15, 49,69,77,105,133,46,20,70,47,17,6,34,28,38,43,27, 29,33,8,8,30,74,70,39,13,9,41,23,1,5,4,23, 37,25,19,24,254,165,43,43,42,0,0,1,0,14,255,254, 1,239,1,204,0,25,0,0,37,20,7,35,54,53,52,39, 38,35,34,7,6,21,20,23,35,38,53,52,55,35,53,33, 23,22,1,239,35,69,35,60,51,62,62,49,60,36,69,35, 102,102,1,68,83,74,140,89,53,56,86,114,67,58,58,67, 114,50,92,50,92,157,102,61,91,82,0,4,0,5,255,113, 3,14,1,204,0,13,0,17,0,21,0,77,0,0,1,50, 23,22,21,20,7,6,35,34,39,38,53,52,19,35,55,51, 1,33,53,33,23,20,7,6,35,34,39,38,39,21,20,7, 6,35,34,39,6,35,34,39,38,53,52,55,54,55,23,34, 21,20,23,22,51,50,55,54,53,51,20,51,50,55,54,53, 39,53,55,20,23,22,51,50,55,53,23,22,1,23,34,14, 4,33,10,9,29,14,5,84,69,17,35,1,137,253,90,2, 166,91,50,36,39,68,30,9,3,54,39,53,86,36,63,73, 77,39,22,83,18,20,26,78,50,17,19,50,24,12,69,86, 44,19,8,1,114,27,19,16,55,12,66,2,1,86,26,8, 9,27,9,3,23,7,9,40,254,30,114,1,172,61,146,56, 41,28,32,10,11,53,92,57,40,57,57,61,35,46,69,34, 8,4,58,70,40,14,5,49,24,29,102,61,27,31,105,1, 30,22,27,19,50,54,26,14,0,2,255,252,255,254,2,114, 1,254,0,78,0,92,0,0,1,50,31,1,22,21,35,39, 38,47,1,38,35,34,7,6,7,6,15,1,6,21,20,51, 50,55,54,53,51,6,21,20,23,22,51,50,53,52,39,55, 22,23,22,21,20,7,6,35,34,39,6,35,34,39,38,53, 52,63,1,54,53,52,39,38,35,34,21,20,23,7,38,53, 52,55,54,51,50,23,54,23,50,23,22,21,20,7,6,35, 34,39,52,55,54,1,199,86,43,14,10,78,3,9,35,33, 24,30,50,40,20,5,7,47,79,40,96,75,18,5,75,2, 52,22,25,75,26,28,48,19,8,62,30,40,103,52,65,87, 104,37,15,45,83,45,40,8,9,87,8,55,17,64,41,46, 87,47,60,55,31,17,6,29,12,13,36,18,29,12,1,254, 61,27,25,31,23,30,15,9,4,40,20,21,40,41,61,34, 33,81,62,15,19,16,3,48,20,9,63,33,34,63,18,60, 23,26,88,38,18,55,55,81,34,44,47,39,61,36,41,53, 11,2,49,13,19,15,15,47,49,29,19,74,74,160,27,10, 11,29,15,7,51,27,15,6,0,1,255,251,255,254,2,83, 1,200,0,69,0,0,55,20,23,22,51,50,53,51,20,51, 50,53,52,43,1,53,51,53,35,53,51,23,21,51,21,35, 22,31,1,20,15,1,6,35,34,39,6,35,34,39,38,53, 52,53,52,63,1,54,53,52,35,34,21,20,23,7,38,53, 52,55,54,51,50,23,22,21,20,15,1,6,96,49,17,20, 88,67,86,69,77,61,87,87,62,93,86,76,34,5,1,47, 21,23,27,105,36,46,87,55,41,43,40,76,38,51,77,10, 50,19,53,32,35,94,31,11,40,75,40,140,49,17,6,86, 86,72,87,58,114,57,36,135,58,14,44,29,70,43,16,13, 64,64,39,40,58,3,2,48,36,56,27,33,59,41,11,19, 13,15,39,44,27,15,55,20,25,52,40,57,31,0,0,1, 0,10,255,253,2,63,1,199,0,75,0,0,1,50,55,54, 53,51,20,7,6,7,6,35,34,39,6,15,1,6,21,6, 21,20,51,50,53,51,20,23,22,51,50,55,54,53,52,39, 55,22,23,22,21,20,7,6,35,34,39,6,35,34,39,38, 53,52,63,1,54,53,52,35,34,21,20,23,7,38,53,52, 55,54,51,50,23,22,23,22,1,113,78,29,11,71,61,38, 37,45,37,59,26,7,38,65,33,3,88,86,69,52,16,18, 45,23,9,35,27,42,18,8,56,28,36,110,28,51,86,91, 33,14,38,70,37,42,65,7,62,15,60,36,39,52,44,11, 6,42,1,113,38,15,19,52,43,27,5,8,29,44,38,55, 30,28,9,7,56,86,62,18,6,27,11,13,24,27,70,16, 52,22,23,77,35,17,70,70,73,30,39,49,35,54,27,35, 49,31,14,10,21,13,43,44,26,16,38,9,9,30,0,3, 0,17,255,246,3,67,1,211,0,11,0,27,0,119,0,0, 37,50,55,54,55,38,39,38,21,20,23,22,1,50,23,22, 21,20,7,6,35,34,39,38,53,52,55,54,23,52,39,38, 35,34,7,6,21,20,23,6,7,21,20,7,22,21,35,52, 39,38,39,6,35,34,39,38,53,52,55,54,51,50,23,22, 23,54,53,52,47,2,34,7,6,29,1,35,53,38,35,34, 35,6,21,20,23,22,23,7,38,53,52,55,54,51,50,23, 54,55,54,51,50,23,22,23,52,55,54,51,50,23,22,23, 21,6,7,6,7,39,54,1,19,32,45,19,6,35,67,105, 63,23,1,185,16,10,4,20,5,5,19,8,3,18,6,83, 36,18,23,56,14,7,2,21,36,68,52,69,12,13,17,72, 101,84,50,45,128,35,42,33,45,54,22,52,43,19,22,54, 24,10,67,15,73,7,8,71,2,17,34,51,69,67,32,39, 103,33,32,60,18,28,62,41,11,6,49,39,42,84,45,24, 2,3,9,19,38,42,51,62,27,11,10,40,2,2,44,29, 14,5,1,57,23,8,7,16,7,2,16,4,5,18,15,5, 67,55,30,16,44,22,14,7,4,8,16,24,89,91,42,58, 12,22,20,11,57,34,28,38,85,22,6,19,22,30,45,85, 70,30,10,3,23,9,11,13,13,43,5,42,3,6,41,16, 30,40,75,60,27,13,46,36,5,1,59,15,16,43,35,28, 59,31,40,51,31,29,53,53,66,60,0,1,0,26,0,16, 2,68,2,114,0,96,0,0,19,52,55,54,59,1,21,35, 38,35,34,21,20,23,22,51,50,23,22,21,20,7,39,54, 53,52,39,38,35,34,7,6,21,20,23,22,51,50,55,54, 53,51,7,20,23,22,51,50,55,54,53,52,35,53,51,50, 55,54,53,52,47,1,38,43,1,53,51,50,23,22,21,20, 7,6,7,34,39,22,21,20,7,6,15,1,34,39,38,39, 6,35,34,39,38,53,52,55,38,41,35,22,26,80,31,6, 12,49,37,21,24,67,27,11,22,58,14,30,12,12,27,26, 30,41,19,23,60,26,12,64,2,43,20,21,49,22,10,98, 34,36,27,17,41,22,8,9,17,32,72,37,22,30,27,24, 4,3,70,76,18,21,13,67,46,11,7,53,77,74,43,30, 80,65,2,19,46,30,19,69,2,43,38,27,15,50,21,25, 35,31,20,19,12,30,18,8,44,51,81,76,33,14,40,19, 23,15,37,21,9,43,18,21,151,53,44,26,25,59,25,8, 2,69,58,34,43,59,49,43,1,1,57,104,121,32,8,1, 1,35,9,10,54,74,50,65,149,68,56,0,0,3,0,5, 255,253,1,177,1,202,0,15,0,31,0,40,0,0,19,34, 7,6,7,20,23,22,51,50,55,54,53,52,39,38,37,51, 23,22,21,20,7,6,35,34,35,38,53,52,55,35,23,52, 55,54,51,50,20,35,34,229,80,39,16,4,77,27,35,100, 28,9,55,35,254,241,244,117,67,61,58,88,3,2,197,77, 96,182,29,6,7,41,41,42,1,127,81,34,41,112,35,12, 93,30,36,79,47,30,75,59,76,96,106,62,61,5,224,84, 88,172,39,11,2,104,0,2,0,10,255,254,2,3,1,202, 0,35,0,60,0,0,1,20,7,6,7,50,23,22,21,20, 15,1,6,35,34,39,6,7,6,35,34,39,38,53,52,55, 54,55,35,53,33,23,22,23,22,23,7,52,39,38,35,53, 50,53,52,35,34,7,6,7,21,22,23,22,51,50,53,51, 20,51,50,1,245,16,5,8,28,12,3,60,26,12,14,119, 19,10,68,21,21,63,42,30,59,24,27,110,1,69,103,27, 23,10,2,45,30,15,17,39,167,103,53,25,7,3,16,23, 26,87,68,87,68,1,41,64,15,4,3,56,17,15,84,30, 9,2,57,40,13,4,61,43,52,102,88,35,20,59,59,15, 43,20,16,165,27,20,10,43,48,95,97,45,57,33,28,23, 32,86,86,0,0,3,0,10,255,111,2,11,1,202,0,29, 0,33,0,64,0,0,37,52,47,1,38,35,53,50,53,52, 39,38,39,38,35,34,7,6,7,23,22,23,22,51,50,53, 51,20,51,50,7,55,51,23,55,20,15,1,6,35,34,39, 6,7,6,35,34,39,38,53,52,55,35,53,33,23,22,23, 22,23,20,7,22,23,22,1,199,29,16,4,3,39,4,19, 94,30,30,95,54,35,4,2,4,15,20,27,87,68,87,68, 223,16,35,17,223,51,28,20,21,119,19,10,68,21,21,63, 42,30,110,110,1,69,103,35,25,13,2,41,37,11,3,130, 19,32,14,2,43,50,14,9,48,17,5,80,52,67,36,28, 22,30,86,86,213,114,114,243,51,30,13,6,57,40,13,4, 61,43,52,150,95,59,59,21,37,19,19,75,17,16,65,16, 0,1,0,14,255,254,3,17,1,199,0,74,0,0,1,34, 15,1,6,21,35,52,39,38,35,34,21,20,51,21,34,21, 20,51,50,55,51,6,7,6,35,34,39,38,53,52,55,38, 39,38,53,52,55,54,51,50,23,54,51,50,23,22,23,22, 21,20,7,6,35,34,39,38,53,52,55,54,55,21,6,21, 20,51,50,55,54,53,52,39,38,2,51,68,42,15,12,86, 62,34,40,113,78,87,87,92,27,69,21,93,42,49,64,44, 30,68,46,9,3,87,41,52,106,81,52,120,119,61,35,6, 1,54,54,79,93,33,12,73,25,30,49,76,50,32,21,52, 48,1,127,41,18,19,22,55,29,16,70,86,57,43,65,48, 71,28,13,40,27,33,95,18,25,43,17,22,87,34,16,94, 94,92,53,73,13,13,95,58,60,54,20,26,64,30,10,3, 57,25,27,34,62,41,46,72,52,48,0,1,0,21,255,254, 1,243,1,202,0,44,0,0,1,52,39,38,35,33,53,33, 23,22,31,1,21,6,7,22,21,20,7,6,35,34,39,55, 54,55,23,6,21,22,51,50,55,54,53,52,39,38,43,1, 53,51,50,55,54,1,155,57,29,30,254,254,1,54,94,21, 12,3,8,38,68,72,69,97,235,4,2,12,70,34,51,1, 161,85,50,45,62,19,22,33,33,70,11,2,1,71,39,22, 11,59,59,13,50,31,6,50,22,30,66,59,38,36,142,30, 57,28,50,20,45,78,22,20,23,50,15,5,58,48,10,0, 0,4,0,10,255,111,2,11,1,202,0,23,0,39,0,43, 0,65,0,0,55,52,55,54,55,35,53,33,23,22,23,22, 21,20,7,6,35,34,39,6,35,34,39,38,37,20,7,6, 35,34,39,38,53,52,55,54,51,50,23,22,3,35,55,51, 55,50,55,54,53,52,39,38,39,38,35,34,7,6,7,21, 22,23,50,53,51,20,10,63,26,29,118,1,44,93,78,30, 12,47,32,41,118,22,48,87,51,33,34,1,47,27,10,11, 29,13,4,24,11,11,24,17,7,13,68,16,35,104,50,16, 5,3,15,56,54,65,78,59,44,7,15,53,87,68,140,104, 94,39,22,59,59,67,105,44,43,69,43,30,61,61,40,38, 194,25,12,4,24,8,9,23,18,8,27,11,254,86,114,99, 51,16,19,14,16,88,54,57,76,57,66,39,71,6,86,86, 0,2,0,10,255,253,2,11,1,202,0,20,0,44,0,0, 55,20,23,22,51,50,53,51,20,51,50,55,54,53,52,39, 38,35,34,7,6,37,23,22,23,22,21,20,7,6,7,6, 35,34,39,6,35,34,39,38,53,52,55,35,53,75,41,13, 16,87,68,87,39,20,10,65,53,73,79,57,54,1,9,73, 79,24,7,52,31,37,9,16,92,23,48,87,51,33,34,118, 118,161,65,21,7,86,86,47,23,27,99,65,54,73,68,216, 59,63,120,37,39,68,45,26,3,1,62,61,40,38,64,181, 78,59,0,3,0,10,255,111,2,11,1,202,0,22,0,44, 0,48,0,0,55,50,53,51,20,51,50,55,54,55,52,39, 38,39,38,35,34,7,6,7,6,21,20,37,20,7,6,35, 34,39,6,35,34,39,38,53,52,55,35,53,33,23,22,23, 22,5,51,23,35,145,87,68,87,28,21,20,1,10,17,36, 52,77,86,57,39,6,1,1,191,47,32,41,118,22,48,87, 51,33,34,108,108,1,84,63,81,22,7,254,237,35,17,68, 68,86,86,30,29,42,28,31,58,40,57,79,53,67,8,15, 93,72,69,43,30,61,61,40,38,64,187,72,59,59,76,115, 34,205,114,0,0,1,0,10,255,254,1,249,1,202,0,45, 0,0,55,52,55,54,51,50,23,22,21,23,22,51,50,53, 52,39,38,39,35,53,33,23,22,23,22,21,20,7,6,35, 34,39,38,39,38,39,38,35,34,7,6,21,20,23,7,38, 10,56,44,52,46,32,25,29,22,45,77,43,45,67,241,1, 37,85,45,26,14,66,37,50,63,44,9,7,20,4,16,34, 62,13,3,26,61,32,127,54,41,33,30,24,17,76,40,116, 57,62,68,28,59,89,47,73,37,28,108,50,28,73,16,17, 53,6,28,63,14,16,37,41,22,58,0,2,0,24,255,254, 1,177,1,202,0,19,0,33,0,0,19,23,22,23,22,21, 20,7,6,35,34,39,38,53,52,55,54,55,35,53,23,34, 7,6,21,20,23,22,51,50,53,52,39,38,249,107,44,23, 10,57,57,90,90,57,58,24,27,43,93,204,77,39,22,43, 43,59,130,57,34,1,202,39,52,79,34,27,102,63,64,66, 64,99,43,48,54,27,59,75,67,39,50,73,46,46,165,86, 44,26,0,4,0,10,255,255,2,39,1,205,0,30,0,44, 0,72,0,86,0,0,37,7,6,7,6,7,39,38,39,6, 35,38,39,38,55,52,55,54,51,50,21,20,7,51,38,53, 52,51,50,23,22,39,50,55,54,53,52,39,38,35,34,7, 6,21,20,23,52,39,6,7,6,7,21,33,53,38,39,38, 39,6,21,20,23,22,23,55,54,55,22,23,54,55,54,37, 20,23,22,51,50,53,52,39,38,35,34,7,6,2,38,3, 6,23,40,72,30,64,33,40,87,81,39,22,1,28,32,62, 83,6,138,5,83,91,25,7,123,36,11,3,10,28,22,25, 19,10,168,33,4,35,12,15,254,209,41,18,6,1,32,47, 38,47,27,59,31,40,77,59,40,35,254,65,29,10,11,63, 30,12,11,24,25,11,244,57,55,46,85,1,3,16,94,113, 2,106,62,77,89,60,65,121,14,20,25,9,121,136,37,18, 35,9,10,18,13,20,26,13,14,52,72,84,46,63,30,11, 2,19,20,6,59,19,21,47,83,65,51,41,1,3,17,99, 117,2,2,57,50,176,36,14,5,52,28,18,7,20,14,0, 0,1,0,12,255,254,2,83,1,199,0,42,0,0,1,52, 39,38,39,51,22,31,1,20,7,6,35,34,39,38,53,52, 55,54,51,22,23,22,21,20,7,39,54,53,52,35,34,15, 1,21,20,23,22,51,50,55,54,2,14,30,14,25,77,50, 8,3,94,79,119,111,85,95,48,49,65,64,32,16,35,52, 15,47,67,17,4,88,57,79,99,64,60,0,255,100,51,22, 27,54,81,65,130,69,58,65,74,118,83,59,58,8,38,18, 22,56,30,30,24,16,30,81,42,5,104,54,35,59,55,0, 0,2,0,12,255,254,2,63,2,97,0,84,0,96,0,0, 1,20,23,22,51,50,55,21,6,35,34,47,1,54,55,54, 51,50,51,22,31,1,22,21,20,7,6,7,22,21,20,7, 6,35,34,39,38,53,52,55,54,55,34,39,38,53,52,55, 54,51,50,31,1,20,21,20,7,6,35,34,39,53,22,51, 50,53,52,47,2,34,7,6,7,20,23,22,51,50,53,52, 39,38,35,34,3,20,51,50,53,52,39,38,39,15,1,6, 1,121,15,4,4,7,5,14,6,53,23,2,1,10,42,63, 3,4,87,34,12,5,104,37,46,17,54,30,35,64,35,20, 1,3,17,98,48,30,52,38,46,89,18,6,62,10,11,8, 12,10,9,16,10,15,1,52,25,9,2,137,33,37,220,45, 11,13,60,153,62,61,18,12,31,23,19,20,1,253,10,8, 2,4,60,2,62,21,34,10,50,4,92,41,28,31,145,75, 27,13,26,42,46,26,14,39,21,26,35,4,15,14,72,43, 60,63,43,32,55,30,5,6,61,9,2,2,51,6,21,19, 7,7,1,42,14,16,91,20,5,201,100,24,6,254,74,63, 57,38,9,5,2,2,8,14,0,2,0,64,255,254,2,32, 1,143,0,15,0,32,0,0,37,50,55,54,53,52,39,38, 35,34,7,6,21,20,23,22,19,50,23,22,23,22,21,20, 6,35,34,39,38,53,52,55,54,1,47,84,51,37,75,42, 55,73,52,47,67,49,56,120,69,33,12,7,138,103,102,69, 68,74,70,55,53,38,51,82,39,22,47,44,52,65,44,33, 1,88,71,34,44,26,27,85,114,57,57,85,85,60,57,0, 0,1,0,79,255,254,2,14,1,199,0,29,0,0,1,34, 7,6,15,1,21,20,23,7,38,39,38,53,52,55,54,51, 50,23,22,21,20,7,39,54,53,52,39,38,1,47,76,48, 32,1,2,38,51,35,10,7,61,64,99,97,66,60,67,70, 70,62,45,1,143,68,47,57,56,1,69,76,27,58,56,34, 81,95,64,69,76,71,81,138,91,27,88,114,90,50,30,0, 0,1,0,64,255,254,2,32,1,199,0,27,0,0,1,20, 23,22,51,21,38,53,52,51,50,23,22,21,20,7,6,35, 33,53,33,50,53,52,39,38,35,34,1,56,24,8,10,120, 137,109,43,21,126,42,54,254,254,1,2,153,29,28,39,67, 1,84,25,13,5,57,21,79,115,114,56,74,156,43,14,70, 159,66,49,49,0,2,0,79,255,254,2,32,1,227,0,41, 0,52,0,0,55,34,39,38,53,52,51,50,23,54,53,52, 39,38,35,34,15,1,21,39,54,51,50,21,20,7,20,23, 22,51,54,53,51,20,7,6,35,34,39,38,53,6,39,34, 15,1,20,51,50,53,52,39,38,200,69,34,18,120,52,61, 45,41,18,22,36,16,6,70,14,124,137,69,31,14,16,52, 77,63,26,32,59,38,40,43,44,41,11,2,37,88,39,17, 88,45,22,29,86,52,54,53,61,28,12,31,20,6,30,84, 156,99,74,50,25,11,13,29,73,28,11,32,30,50,22,139, 30,13,36,36,22,15,6,0,0,2,0,12,255,254,2,33, 1,199,0,7,0,58,0,0,37,50,55,52,35,34,21,20, 23,34,39,38,53,52,55,54,55,38,39,38,53,52,51,50, 21,35,55,38,53,38,35,52,35,34,21,20,23,20,23,22, 51,54,55,54,53,52,39,38,39,51,22,21,20,7,22,21, 20,7,6,1,30,46,5,51,52,42,56,34,19,11,7,12, 90,55,40,136,121,72,3,1,1,1,40,85,7,79,58,60, 135,41,24,8,8,1,67,19,174,31,68,26,47,51,56,56, 51,49,38,22,26,26,28,12,24,15,54,38,46,128,107,12, 2,2,9,26,46,13,13,53,37,26,30,65,38,55,19,16, 14,7,26,30,152,63,52,34,67,24,9,0,0,3,0,64, 255,253,2,14,1,199,0,9,0,70,0,80,0,0,55,50, 55,54,53,34,7,6,21,20,1,50,31,1,22,21,20,7, 6,7,20,23,22,23,22,21,20,7,35,54,53,52,39,6, 7,6,7,6,7,39,38,39,38,53,52,55,54,55,52,39, 38,35,34,21,35,52,55,54,51,22,23,22,21,48,55,54, 55,39,52,55,54,23,34,21,20,23,54,55,54,55,38,167, 27,29,21,14,26,52,1,15,62,28,10,3,22,20,43,21, 27,13,21,31,69,31,75,8,68,7,85,28,35,20,39,8, 2,45,38,72,22,21,24,45,58,58,20,25,65,34,19,52, 15,3,16,41,19,24,34,26,44,11,2,2,17,68,54,40, 29,17,35,45,26,1,131,41,21,11,13,28,22,20,29,12, 27,34,22,39,39,49,50,58,52,84,56,4,33,151,46,15, 1,2,12,52,10,10,53,45,35,38,54,45,45,44,70,22, 8,6,79,46,54,16,6,5,72,50,25,11,43,35,15,35, 20,24,5,7,29,0,0,2,0,64,255,254,2,14,1,191, 0,29,0,43,0,0,55,20,23,22,51,33,21,33,34,39, 38,53,52,55,39,55,23,50,23,22,21,6,7,6,35,34, 39,38,39,6,55,52,39,38,35,34,7,20,23,22,51,50, 55,54,140,61,23,27,1,19,254,220,95,47,28,103,27,69, 9,117,48,23,10,62,23,25,57,25,34,22,8,199,50,20, 18,75,19,52,36,25,33,25,11,145,51,19,7,70,66,38, 52,109,64,114,6,120,55,26,35,47,18,6,5,6,25,18, 69,27,15,6,27,24,24,16,23,10,0,1,0,96,255,254, 2,32,1,199,0,31,0,0,1,34,7,6,21,35,52,51, 50,23,22,21,6,15,1,6,21,20,23,22,51,33,21,33, 34,53,52,63,1,54,53,52,1,14,40,10,2,72,124,67, 34,18,3,58,106,56,51,16,18,1,37,254,219,155,59,108, 59,1,135,26,5,5,100,44,23,33,59,48,69,38,31,38, 13,4,57,112,59,42,59,33,37,51,0,1,0,64,255,254, 2,14,1,199,0,47,0,0,1,52,55,54,59,1,21,35, 34,21,20,23,22,21,20,7,6,35,34,39,38,53,52,55, 54,51,50,23,22,21,39,52,39,38,35,34,7,6,21,20, 51,50,55,54,53,52,39,38,1,98,43,20,24,85,45,76, 52,52,67,65,91,137,56,29,34,33,51,70,29,14,61,31, 10,11,51,13,3,171,73,43,39,43,44,1,113,48,26,12, 56,32,16,65,62,40,76,54,56,102,53,74,65,38,39,56, 26,32,7,33,14,4,66,17,19,149,40,34,48,33,54,51, 0,2,0,80,255,254,2,14,1,199,0,7,0,47,0,0, 37,52,35,34,21,22,51,50,39,50,23,22,23,20,7,6, 35,34,39,6,21,20,23,22,51,50,55,21,34,39,38,53, 52,55,38,53,52,55,54,51,33,21,33,34,21,20,23,54, 1,66,61,79,23,42,75,52,65,25,10,1,51,24,26,58, 64,11,64,33,40,3,26,101,60,62,35,35,77,23,29,1, 61,254,185,65,14,64,240,30,52,16,111,44,18,24,43,20, 10,37,22,19,56,27,14,2,57,45,44,67,56,30,41,74, 73,21,6,56,60,23,33,30,0,2,0,60,0,104,1,143, 1,188,0,15,0,32,0,0,19,50,23,22,21,20,7,6, 35,34,39,38,53,52,55,54,19,50,55,54,53,52,47,1, 38,35,34,7,6,21,20,23,22,227,85,51,36,49,48,70, 82,52,38,61,46,59,65,37,23,51,25,20,23,51,37,38, 50,31,1,188,64,45,59,70,50,52,63,47,61,81,51,37, 254,222,53,32,41,63,35,13,8,35,34,51,65,37,23,0, 0,4,0,7,0,50,0,210,2,13,0,14,0,30,0,48, 0,64,0,0,55,50,23,22,21,20,7,6,35,34,47,1, 52,55,54,23,52,39,38,35,34,7,6,21,20,23,22,51, 50,55,54,19,20,7,6,35,34,39,38,39,52,53,52,55, 54,51,50,23,22,7,52,39,38,35,34,7,6,21,20,23, 22,51,50,55,54,105,58,31,16,28,27,40,42,31,32,43, 23,106,40,17,20,29,19,19,40,17,20,37,20,10,26,43, 22,28,46,30,30,2,43,22,28,60,31,17,23,52,17,21, 25,17,18,41,17,21,44,19,8,250,46,24,31,41,28,30, 29,72,54,29,16,98,43,21,9,22,27,25,43,20,8,36, 17,1,34,55,28,15,29,26,27,6,12,57,28,15,46,25, 29,51,18,6,23,26,27,45,21,9,40,17,0,3,0,31, 255,12,2,123,2,108,0,70,0,86,0,103,0,0,1,20, 7,6,35,34,47,1,17,50,55,7,6,7,21,6,15,1, 34,39,53,35,34,39,38,53,52,55,54,51,23,50,23,50, 23,52,47,2,34,7,6,35,34,39,38,53,52,55,54,55, 50,23,22,31,2,22,23,54,55,54,55,22,23,6,21,23, 22,23,22,5,20,23,22,51,31,1,50,55,17,38,35,7, 6,7,6,37,50,55,54,53,52,39,38,53,55,52,55,6, 15,1,21,22,2,123,44,23,27,24,19,27,37,63,5,38, 56,3,6,9,19,8,91,120,88,97,118,76,108,32,14,25, 5,15,22,58,16,24,42,39,36,34,12,4,65,29,33,39, 42,48,21,16,23,5,2,23,102,7,8,7,9,27,1,6, 21,18,254,54,67,55,71,22,29,3,2,32,24,34,84,45, 30,1,115,33,14,4,14,32,1,5,47,16,21,25,1,142, 52,29,15,10,18,254,219,42,34,40,5,213,24,4,3,30, 214,59,64,107,139,65,43,1,7,5,38,22,31,1,36,36, 29,9,10,56,23,7,2,15,19,23,20,40,12,13,78,47, 4,3,8,24,42,20,10,17,38,29,185,90,60,48,1,1, 1,1,134,7,3,15,73,48,46,34,10,12,22,20,50,19, 22,8,15,47,25,44,60,36,0,2,0,36,255,14,2,187, 2,99,0,141,0,162,0,0,5,20,15,1,35,38,47,1, 34,7,6,15,1,20,31,1,22,51,55,54,55,54,53,52, 39,38,39,38,47,1,38,39,38,39,53,22,51,50,51,23, 55,54,55,54,55,54,55,54,53,52,47,1,38,39,38,47, 1,34,7,6,15,1,21,20,31,1,22,51,50,63,1,7, 34,39,38,53,52,55,54,51,50,23,22,21,20,7,6,7, 6,35,34,39,38,53,52,55,54,55,54,55,54,51,23,51, 22,23,22,23,22,29,1,6,7,6,7,6,7,6,7,22, 23,22,23,22,21,20,7,6,35,34,39,38,39,38,53,52, 55,54,51,50,23,22,19,52,39,38,35,34,7,6,7,20, 21,20,23,22,31,2,51,50,55,54,1,144,27,18,2,19, 10,9,18,11,3,1,2,30,31,20,19,17,50,31,18,13, 14,11,23,63,7,108,45,13,30,88,99,5,6,41,29,49, 67,11,7,29,31,19,78,32,30,33,30,37,82,167,46,18, 3,1,104,26,46,27,30,36,25,23,66,39,26,63,26,35, 90,33,15,76,12,17,51,46,36,45,176,90,27,34,97,26, 26,27,42,1,66,71,100,33,23,24,73,22,29,8,9,39, 51,34,27,24,3,1,86,31,40,30,18,62,29,15,37,23, 38,31,24,25,57,58,19,23,37,28,24,1,45,8,8,19, 18,1,52,26,13,71,20,11,4,2,6,3,21,5,4,16, 27,21,15,5,1,8,41,24,28,24,17,22,8,23,12,1, 9,17,5,14,10,22,1,2,9,39,7,5,23,53,34,41, 92,64,23,17,8,7,5,4,65,25,35,13,10,101,53,13, 15,14,12,2,52,34,45,79,31,13,69,29,39,76,49,8, 9,27,14,50,175,131,69,20,12,26,3,4,1,9,37,58, 72,50,68,34,134,65,20,17,4,5,21,11,9,30,44,23, 7,6,74,39,15,7,17,48,25,27,39,37,20,14,12,1, 72,70,22,7,27,27,28,4,7,48,33,6,4,7,1,44, 22,0,0,6,0,30,255,254,3,18,3,106,0,16,0,32, 0,87,0,122,0,139,0,155,0,0,1,52,55,54,51,50, 31,1,22,21,20,7,6,35,34,39,38,55,52,39,38,35, 34,7,6,21,20,23,22,51,50,55,54,1,52,55,54,63, 1,54,55,54,63,1,54,55,54,63,1,50,23,15,1,6, 7,6,7,6,7,51,50,23,50,23,22,23,22,23,22,23, 22,21,22,21,20,7,6,7,6,35,39,34,39,38,39,38, 39,38,55,22,31,2,50,55,54,55,54,55,54,55,54,55, 53,52,39,38,39,38,43,1,34,7,6,7,6,7,6,7, 6,7,20,23,1,20,7,6,35,34,39,38,53,52,55,54, 55,50,31,1,22,7,52,39,38,35,34,7,6,21,20,23, 22,51,50,55,54,1,91,38,17,20,49,23,8,2,39,18, 21,43,24,12,129,28,12,13,28,12,5,31,8,10,35,11, 3,254,66,121,19,22,195,32,26,69,21,81,15,15,26,28, 21,35,12,1,9,12,25,46,68,120,88,32,17,10,16,36, 65,42,41,40,12,5,7,2,11,10,51,97,158,58,74,76, 60,30,8,15,46,98,38,71,51,86,64,22,26,18,62,59, 5,5,40,4,51,59,107,21,20,29,94,59,15,19,39,20, 20,30,12,4,32,2,162,39,18,21,43,24,12,21,29,25, 49,23,8,2,28,28,12,13,28,12,5,31,8,10,35,11, 3,2,247,47,22,9,41,22,9,9,44,23,11,39,19,20, 27,16,7,27,10,11,36,12,3,31,9,254,22,152,84,13, 12,91,16,16,45,20,79,15,22,36,12,4,38,24,29,31, 26,49,33,48,19,2,9,14,30,27,57,17,13,19,3,5, 11,111,49,42,62,108,3,33,27,38,10,22,67,5,48,17, 5,2,5,3,8,26,53,4,5,46,63,11,70,48,51,12, 3,27,6,11,20,23,17,44,16,58,53,42,1,104,44,23, 11,39,19,23,31,24,22,1,41,22,9,9,27,16,7,27, 10,11,36,12,3,31,9,0,0,1,0,19,254,184,3,10, 2,91,0,80,0,0,1,34,39,38,47,1,54,55,23,51, 50,23,22,23,22,23,7,21,35,39,34,7,6,7,6,7, 6,7,6,21,20,23,22,23,22,51,50,55,54,55,54,55, 54,55,52,39,55,22,21,7,20,7,6,7,6,35,34,39, 36,3,52,55,54,55,54,55,54,55,54,51,23,55,52,39, 38,47,1,34,15,1,6,1,131,43,19,6,1,2,9,99, 51,3,39,27,28,40,52,3,1,212,19,91,48,7,7,60, 24,9,9,13,45,44,88,46,51,45,33,157,65,3,3,5, 1,84,12,97,3,49,60,104,82,40,77,71,255,0,17,29, 37,58,26,41,31,22,55,81,237,4,46,15,16,29,37,46, 42,6,1,232,20,6,6,22,57,3,3,13,10,28,33,73, 21,29,1,26,4,4,39,57,22,32,56,50,125,87,97,41, 21,11,38,201,9,9,36,44,149,68,18,97,158,58,76,85, 106,41,22,29,88,1,78,68,58,80,40,18,19,13,5,4, 1,12,47,26,8,3,3,17,18,3,0,2,0,37,255,252, 2,240,3,39,0,82,0,95,0,0,1,52,55,38,47,1, 22,23,22,23,22,23,22,21,16,7,6,35,34,39,38,53, 52,55,54,55,35,34,53,52,55,54,51,33,52,39,38,47, 1,34,7,6,35,34,39,38,47,1,52,55,54,51,50,23, 39,6,7,34,7,6,21,23,22,23,22,51,50,55,54,53, 52,39,38,39,6,7,6,35,34,39,38,39,38,23,22,51, 50,55,38,39,38,39,6,21,20,23,1,150,48,31,8,5, 85,70,48,71,20,23,25,219,61,78,146,97,114,95,2,3, 66,16,11,2,2,1,15,15,14,33,14,15,52,26,21,34, 9,3,3,1,61,24,25,146,17,76,17,16,72,55,53,1, 12,99,54,144,171,87,61,7,6,23,39,62,20,16,81,42, 1,2,9,76,42,44,41,44,56,11,41,69,26,21,2,129, 54,64,19,11,18,18,58,38,95,27,54,68,49,254,192,66, 18,62,72,130,109,60,1,2,16,12,4,1,27,24,23,11, 1,35,16,19,7,9,12,39,16,7,172,1,1,1,42,39, 67,15,91,31,15,89,63,96,61,29,36,39,34,14,5,89, 3,4,26,32,45,38,84,9,44,32,35,43,46,26,0,3, 0,32,0,0,3,14,3,58,0,14,0,129,0,179,0,0, 1,34,7,6,7,20,23,22,51,50,63,1,52,39,38,7, 52,39,38,35,34,15,1,6,7,6,21,20,23,22,59,1, 50,55,54,55,54,55,54,53,20,23,22,31,1,50,55,54, 55,54,55,23,6,7,6,7,6,7,6,35,34,39,38,39, 38,39,6,15,1,6,35,34,39,38,53,52,55,54,63,2, 50,23,22,23,20,7,6,21,20,23,22,51,50,55,54,53, 52,39,38,39,22,21,20,7,6,35,34,39,38,53,52,55, 54,51,50,23,22,21,20,7,6,35,34,39,38,53,52,55, 54,5,54,53,52,61,1,39,52,39,38,39,38,39,38,39, 38,39,38,7,34,15,1,34,7,6,7,6,7,39,54,59, 1,50,23,22,23,22,23,22,23,22,23,22,23,22,21,20, 15,1,39,1,153,34,18,6,1,30,15,17,25,17,17,19, 17,173,23,8,7,15,12,28,56,24,13,52,52,69,19,61, 34,9,12,20,9,2,27,27,34,39,68,32,35,43,9,8, 40,11,53,24,34,13,24,22,26,46,30,30,30,7,9,11, 1,8,49,107,109,59,42,87,16,20,35,34,46,17,2,2, 12,27,110,21,22,132,18,3,18,19,34,13,24,22,33,60, 30,15,51,24,29,72,53,43,74,45,56,104,55,35,21,22, 1,189,22,4,5,3,12,40,33,31,83,30,58,44,49,18, 17,24,15,13,65,27,30,51,19,118,120,38,83,54,35,22, 54,69,17,9,26,33,41,4,1,22,40,12,2,26,31,11, 16,33,20,10,17,43,23,18,20,32,18,9,3,5,8,15, 74,51,82,67,46,47,20,6,8,14,25,6,5,15,30,26, 4,1,22,22,70,21,30,1,127,97,45,22,8,8,6,12, 15,37,8,38,33,1,11,65,114,82,111,158,62,12,9,15, 7,50,8,8,12,18,38,21,62,12,2,80,14,16,14,27, 28,10,19,33,34,26,27,42,20,26,52,26,12,51,42,52, 71,38,23,55,34,49,15,27,28,248,34,92,34,2,46,29, 19,15,12,23,85,33,34,43,14,18,11,1,1,1,4,7, 10,6,30,27,65,16,8,14,24,60,15,11,26,61,84,92, 19,22,84,48,80,66,0,2,0,35,0,0,3,145,2,89, 0,32,0,139,0,0,37,50,55,54,53,52,39,38,47,1, 6,7,6,7,23,48,23,22,59,1,54,55,54,55,54,53, 20,23,22,23,22,23,22,55,20,7,6,7,34,47,1,7, 6,7,6,35,34,39,38,39,38,35,34,7,6,35,39,38, 39,54,55,54,55,54,55,52,39,38,39,38,35,34,15,1, 6,35,34,39,38,53,39,52,55,54,51,50,23,22,23,22, 23,54,55,54,51,50,23,22,23,22,23,22,21,20,7,6, 15,2,6,43,1,34,47,1,23,51,50,55,54,55,54,55, 54,53,52,39,38,35,34,7,6,7,50,23,22,23,22,23, 22,1,243,67,31,15,117,58,47,55,72,42,55,54,69,49, 13,8,25,53,29,4,5,10,21,4,6,18,20,21,202,66, 35,53,86,46,7,11,23,44,30,26,42,35,21,16,4,27, 9,13,5,9,9,6,4,72,88,42,58,9,1,25,4,4, 13,23,39,23,20,6,61,35,16,7,1,51,51,68,20,11, 56,22,12,15,50,40,63,57,151,107,31,23,11,9,30,20, 21,44,45,31,44,39,13,17,18,6,15,16,35,20,55,33, 7,4,10,78,77,111,65,22,26,54,73,80,5,5,88,26, 15,138,69,34,42,78,51,28,12,1,47,53,69,96,44,14, 3,10,46,7,9,27,29,45,28,5,7,18,8,6,131,160, 70,38,1,114,26,30,51,35,24,50,34,51,16,25,18,3, 4,8,164,92,44,44,6,16,29,19,3,2,7,53,94,47, 30,12,14,13,66,52,54,4,13,28,16,35,38,27,36,83, 25,30,14,15,52,65,92,54,65,34,33,17,21,5,24,1, 7,14,67,13,14,41,73,112,84,83,7,6,40,45,3,3, 46,51,29,0,0,3,0,28,0,0,3,14,3,58,0,19, 0,92,0,142,0,0,37,52,39,38,35,34,7,6,7,6, 21,20,23,22,23,22,51,50,55,54,55,20,7,6,35,34, 39,38,53,52,55,54,51,50,23,22,21,20,7,6,15,1, 22,51,55,54,55,54,55,54,55,54,55,23,6,7,6,7, 6,35,34,35,34,39,7,39,63,1,54,55,54,53,52,39, 38,35,34,7,6,7,6,21,20,23,54,55,54,55,54,51, 50,23,22,37,54,53,52,61,1,39,52,39,38,39,38,39, 38,39,38,39,38,7,34,15,1,34,7,6,7,6,7,39, 54,59,1,50,23,22,23,22,23,22,23,22,23,22,23,22, 21,20,15,1,39,1,0,38,17,20,38,15,22,2,1,50, 2,2,17,16,35,21,10,26,40,23,29,92,44,26,66,66, 102,134,64,41,13,7,38,35,20,44,43,55,48,9,10,39, 44,9,8,40,10,10,24,96,42,40,3,8,89,64,75,16, 32,65,9,20,18,11,50,125,97,53,11,12,18,16,16,31, 11,10,11,19,39,30,32,1,169,22,4,5,3,12,40,33, 31,83,30,58,44,49,18,17,24,15,13,65,27,30,51,19, 118,120,38,83,54,35,22,54,69,17,9,26,33,41,4,1, 22,40,12,101,43,21,9,20,30,14,4,4,46,23,1,1, 5,37,18,19,51,31,18,100,59,77,103,81,80,83,54,77, 46,49,27,50,36,9,3,10,47,8,11,41,74,21,30,1, 108,28,95,58,23,64,65,16,30,67,9,41,41,29,24,19, 85,53,12,15,24,44,47,28,29,20,7,2,5,31,29,109, 34,92,34,2,46,29,19,15,12,23,85,33,34,43,14,18, 11,1,1,1,4,7,10,6,30,27,65,16,8,14,24,60, 15,11,26,61,84,92,19,22,84,48,80,66,0,1,0,63, 0,6,3,164,2,92,0,111,0,0,19,52,55,54,51,50, 23,22,23,21,38,39,35,6,7,6,21,23,20,23,22,23, 22,23,22,59,1,54,55,54,55,54,53,38,39,6,7,38, 39,52,55,54,55,54,55,54,51,50,23,22,21,7,20,7, 6,7,6,7,6,35,34,47,1,55,31,1,50,51,55,50, 55,54,55,54,55,52,39,38,39,38,39,38,35,34,7,6, 15,1,20,23,54,55,50,23,22,23,22,21,20,7,6,35, 34,35,39,38,39,38,39,38,39,38,63,93,70,107,38,19, 32,40,73,18,28,146,52,22,1,60,9,11,30,42,40,38, 31,83,20,6,4,45,4,73,16,38,8,1,11,8,34,30, 52,71,57,119,78,69,1,7,8,24,42,54,56,77,21,40, 33,1,47,29,1,1,13,37,26,19,31,57,1,13,22,81, 14,14,33,52,93,50,18,8,3,2,20,23,73,41,6,4, 13,48,71,122,4,4,10,102,19,66,54,17,10,23,1,44, 154,82,62,4,3,13,32,16,1,11,96,41,55,22,80,51, 7,8,22,19,13,14,10,3,3,24,39,74,13,2,12,40, 26,42,28,28,41,29,29,37,90,80,112,52,13,26,43,35, 71,38,36,12,12,20,17,3,1,17,12,31,64,105,77,39, 75,44,7,6,13,67,24,29,45,13,12,6,1,60,9,9, 35,42,63,49,66,2,19,8,25,72,23,22,54,0,0,4, 0,30,255,255,3,14,3,58,0,15,0,34,0,98,0,148, 0,0,19,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,23,20,15,1,55,54,51,54,55,54,55,52,47,1, 34,7,50,23,22,55,20,15,1,34,7,6,21,20,23,22, 51,50,63,1,54,55,54,55,20,23,22,23,22,51,50,55, 54,55,54,55,23,6,7,6,35,34,39,6,7,34,35,34, 39,38,39,52,53,52,55,54,55,35,34,39,38,53,52,55, 54,51,22,23,22,1,54,53,52,61,1,39,52,39,38,39, 38,39,38,39,38,39,38,7,34,15,1,34,7,6,7,6, 7,39,54,59,1,50,23,22,23,22,23,22,23,22,23,22, 23,22,21,20,15,1,39,95,30,11,3,26,10,11,35,11, 3,29,11,60,12,11,124,7,7,30,5,1,3,68,107,17, 14,27,17,8,181,91,34,72,41,44,57,39,87,40,25,14, 43,9,2,1,34,22,35,28,40,66,35,36,41,9,8,40, 11,50,47,104,107,74,50,100,6,6,84,56,48,4,52,12, 18,23,36,16,6,103,19,22,107,26,40,1,103,22,4,5, 3,12,40,33,31,83,30,58,44,49,18,17,24,15,13,65, 27,30,51,19,118,120,38,83,54,35,22,54,69,17,9,26, 33,41,4,1,22,40,12,1,253,28,8,9,32,12,5,31, 9,9,27,13,5,43,33,11,8,20,1,6,17,4,17,30, 11,3,2,28,13,6,73,8,2,37,37,57,80,32,19,16, 10,36,33,6,6,37,25,13,15,9,23,21,70,21,30,1, 127,96,89,95,90,6,71,64,79,10,10,84,53,12,15,37, 15,16,73,14,2,7,12,15,254,241,34,92,34,2,46,29, 19,15,12,23,85,33,34,43,14,18,11,1,1,1,4,7, 10,6,30,27,65,16,8,14,24,60,15,11,26,61,84,92, 19,22,84,48,80,66,0,2,0,35,0,10,2,253,3,58, 0,84,0,126,0,0,19,20,23,22,51,50,55,54,63,1, 54,55,54,55,54,55,51,21,6,49,20,7,6,7,6,7, 6,35,34,39,38,39,38,39,38,47,1,52,55,54,55,54, 55,54,55,39,38,53,52,55,5,52,39,38,35,34,7,6, 7,6,49,7,34,39,38,53,52,55,54,55,23,50,23,22, 23,22,23,22,21,35,34,7,6,7,6,37,38,39,52,39, 38,39,38,39,38,39,38,39,38,7,34,15,1,34,7,6, 7,6,7,39,54,59,1,50,23,22,23,22,23,22,23,22, 23,22,23,22,23,94,204,28,35,49,68,19,32,38,16,22, 67,29,9,8,47,2,9,11,26,39,104,70,100,56,46,51, 57,48,44,46,13,3,2,4,33,5,3,16,29,89,8,30, 1,40,51,32,31,33,11,6,30,8,21,29,9,3,47,34, 25,30,25,54,41,20,2,3,16,71,73,40,66,34,16,2, 114,4,7,5,3,12,40,33,31,83,30,58,44,49,18,17, 24,15,13,65,27,30,51,19,118,120,38,83,54,35,22,54, 69,17,9,43,34,14,5,3,1,1,70,113,45,5,11,4, 12,15,5,15,38,70,21,28,33,12,13,25,40,53,85,68, 43,10,9,25,20,50,49,49,62,20,21,29,35,5,3,13, 12,1,5,12,10,4,1,42,29,18,17,19,13,3,2,24, 7,7,37,16,8,3,3,27,23,33,4,5,31,42,8,8, 41,19,17,86,38,19,15,12,23,85,33,34,43,14,18,11, 1,1,1,4,7,10,6,30,27,65,16,8,14,24,60,15, 11,42,87,33,27,20,95,0,0,4,0,32,0,0,3,103, 3,37,0,14,0,29,0,37,0,140,0,0,1,34,15,1, 22,23,22,51,50,63,2,52,39,38,23,50,23,54,55,52, 39,34,7,6,21,51,50,23,50,39,52,55,54,55,6,15, 1,1,50,23,7,20,7,6,7,6,7,55,22,23,22,21, 6,7,22,23,22,21,20,7,6,15,1,34,39,38,53,52, 55,54,63,1,54,51,23,52,39,38,39,34,7,6,7,6, 35,39,38,39,52,55,54,51,23,50,23,22,23,22,21,7, 38,43,1,34,7,6,21,20,23,22,23,22,23,32,53,52, 47,1,38,39,6,7,34,35,34,39,38,39,35,52,55,54, 55,54,55,54,55,52,55,54,2,110,56,7,1,4,43,16, 18,24,15,27,3,61,12,42,10,26,6,1,93,53,10,5, 39,20,16,18,128,15,4,7,37,16,12,1,87,36,7,3, 10,36,61,121,21,30,25,25,59,1,6,58,17,12,129,98, 84,85,162,117,131,85,25,28,25,34,56,89,50,22,13,15, 24,18,47,33,11,17,21,7,64,36,38,22,48,33,40,19, 9,3,129,9,11,93,50,31,133,28,37,63,98,1,105,27, 19,6,7,23,62,6,5,65,35,11,5,70,15,24,68,61, 124,25,6,31,7,1,216,27,7,44,17,6,11,32,14,34, 8,2,18,8,22,12,67,10,33,15,48,2,3,47,21,5, 9,16,33,33,1,87,39,26,7,10,35,28,57,21,1,2, 12,33,64,16,22,45,41,30,75,113,71,51,6,2,75,84, 137,91,44,13,6,4,6,1,54,22,7,1,9,9,27,13, 2,8,35,37,22,12,1,21,19,46,22,24,39,1,50,31, 43,107,34,7,5,6,1,121,80,32,17,5,4,64,6,56, 19,22,48,30,45,24,56,53,11,49,42,12,3,0,0,2, 0,32,0,0,3,75,3,34,0,11,0,130,0,0,1,50, 55,52,39,38,35,15,1,20,23,22,19,20,15,1,6,7, 6,7,6,7,54,55,50,23,22,21,20,7,6,7,6,35, 34,39,38,39,38,53,52,55,6,7,6,7,51,23,50,23, 22,23,22,23,22,21,20,7,6,35,34,39,38,53,52,55, 54,63,1,54,51,23,38,39,34,7,6,7,6,35,39,38, 39,52,55,54,51,23,50,23,22,23,22,21,20,21,38,43, 1,34,7,6,21,20,23,22,23,22,23,50,55,54,53,52, 39,38,47,1,52,55,54,63,1,54,63,1,54,55,50,23, 22,2,110,48,5,30,11,12,53,1,31,11,233,41,69,47, 16,49,23,6,6,19,22,35,24,13,4,16,30,10,12,30, 14,2,3,30,5,27,20,21,1,65,59,33,28,33,25,66, 19,14,123,112,149,162,117,131,85,25,28,25,34,56,89,5, 80,15,24,18,47,33,11,17,21,7,64,36,38,22,48,33, 29,24,12,129,9,11,93,50,31,133,28,37,63,98,110,46, 195,39,31,59,213,63,21,25,9,58,68,44,22,19,43,18, 6,1,230,52,34,15,5,44,11,32,14,5,1,10,34,16, 10,9,8,16,32,9,12,7,1,37,20,22,15,8,40,8, 2,11,1,3,21,41,14,15,13,24,49,21,1,5,3,17, 43,44,31,43,126,78,70,75,84,137,91,44,13,6,4,6, 1,75,9,9,9,27,13,2,8,35,37,22,12,1,21,14, 37,25,53,8,13,1,50,31,43,107,34,7,5,6,1,7, 20,121,49,39,31,15,2,93,51,17,8,23,126,29,18,6, 1,28,10,0,0,3,0,25,255,48,4,194,2,97,0,33, 0,182,0,217,0,0,37,50,55,54,53,52,39,38,39,38, 35,34,7,6,7,6,7,54,55,50,23,22,23,50,55,54, 55,54,55,54,55,31,1,22,3,50,23,22,23,22,31,1, 54,55,54,55,50,31,1,54,55,50,23,22,23,22,21,20, 15,1,38,35,7,34,7,6,7,6,21,20,23,22,23,22, 23,55,50,63,1,23,7,6,35,34,39,38,53,52,55,54, 55,54,51,63,1,22,23,38,47,1,38,35,34,6,35,34, 39,38,39,38,53,38,35,34,7,6,7,23,50,23,22,23, 22,23,22,21,20,7,6,7,6,15,1,6,35,34,39,38, 53,20,7,6,35,34,39,38,39,38,35,7,6,15,1,39, 54,55,54,55,52,39,38,39,7,6,15,2,6,15,1,20, 7,6,7,6,35,34,39,38,53,52,55,54,1,54,55,54, 55,23,6,7,6,7,6,7,23,22,23,22,23,55,50,55, 54,63,1,21,6,7,34,39,38,39,38,53,52,55,54,1, 213,66,35,20,93,16,21,52,42,29,33,116,87,10,10,11, 30,9,61,18,13,13,6,64,24,3,2,15,1,3,16,35, 205,19,17,45,30,2,10,5,79,92,46,71,83,86,79,28, 97,63,51,51,21,43,1,1,30,45,100,74,54,52,30,18, 12,12,54,73,94,20,8,59,35,10,77,60,73,83,106,135, 69,69,90,37,95,42,58,34,39,8,51,36,28,42,22,82, 16,16,19,3,1,10,81,149,88,51,48,95,35,17,12,26, 33,134,28,6,51,2,1,27,26,30,9,10,21,48,57,46, 31,35,24,28,28,29,19,23,23,3,3,8,27,58,97,49, 75,12,12,23,19,14,12,26,6,1,3,2,10,30,26,7, 8,34,16,6,58,45,3,84,29,109,20,35,10,28,72,4, 3,28,4,1,1,1,15,60,12,8,26,3,2,12,62,59, 20,15,21,34,10,4,5,150,45,25,33,89,58,10,11,27, 10,91,150,19,19,5,5,16,5,2,2,16,39,4,4,37, 13,22,28,61,1,193,5,6,38,3,37,12,70,23,11,7, 20,19,33,4,21,22,20,34,60,9,9,22,7,4,23,24, 62,42,35,29,40,42,30,41,9,1,12,11,18,24,18,56, 69,97,106,57,54,9,4,1,1,2,7,66,20,9,6,60, 24,3,2,14,21,29,20,16,74,1,4,3,16,57,112,26, 28,100,65,2,2,38,9,5,1,30,36,36,48,33,21,25, 26,45,37,9,2,4,22,6,163,104,52,59,12,26,24,8, 1,4,12,30,12,2,55,16,9,10,37,6,1,37,15,16, 80,54,42,253,96,68,46,8,13,18,9,40,2,2,22,42, 25,3,3,51,5,1,9,1,1,6,23,40,3,5,4,39, 17,21,13,9,15,0,0,3,0,38,255,48,4,192,2,97, 0,23,0,143,0,178,0,0,1,52,39,38,47,2,34,7, 6,29,1,22,23,52,63,1,54,55,54,55,54,55,54,37, 50,23,22,23,22,21,20,15,1,38,35,15,1,34,7,6, 7,6,7,6,21,20,23,22,23,22,23,55,50,63,1,23, 7,6,35,34,39,38,53,52,55,54,55,54,51,54,55,50, 23,38,47,1,38,35,34,6,35,34,39,38,35,7,34,7, 6,21,31,1,22,23,20,7,6,35,34,39,38,53,52,55, 54,51,50,23,22,21,20,7,6,7,6,21,20,23,22,23, 22,23,22,59,1,50,55,54,53,52,39,38,35,34,7,52, 55,54,51,50,31,1,54,19,54,55,54,55,23,6,7,6, 7,6,7,23,22,23,22,23,55,50,55,54,63,1,21,6, 7,34,39,38,39,38,53,52,55,54,1,73,33,7,7,22, 19,71,44,47,2,24,3,19,23,30,8,10,73,12,46,2, 145,87,73,16,11,43,1,1,41,42,40,23,15,12,85,42, 60,27,18,12,12,54,73,94,20,8,59,35,10,77,60,73, 83,106,135,67,68,90,38,100,37,27,50,58,8,51,36,28, 42,22,82,16,22,26,48,35,94,75,68,69,23,31,109,4, 99,82,108,127,88,90,50,56,87,18,8,122,66,152,11,6, 10,18,55,42,79,3,4,14,93,64,52,45,26,37,21,18, 73,67,100,78,62,52,30,99,29,109,20,35,10,28,72,4, 3,28,4,1,1,1,15,60,12,8,26,3,2,12,62,59, 20,15,21,34,10,4,5,1,253,31,19,4,2,5,1,65, 62,87,19,31,58,41,18,49,47,18,5,5,19,5,19,133, 44,10,10,34,60,9,9,22,10,2,1,4,12,18,27,58, 42,35,29,40,42,30,41,9,1,12,11,18,24,18,56,69, 97,111,55,56,10,4,2,2,11,66,20,9,6,60,42,12, 4,60,58,79,1,8,32,71,106,66,55,90,92,123,112,91, 101,2,21,80,46,33,69,47,31,21,27,24,54,25,19,7, 1,47,38,53,34,21,12,4,133,87,79,17,13,36,253,87, 68,46,8,13,18,9,40,2,2,22,42,25,3,3,51,5, 1,9,1,1,6,23,40,3,5,4,39,17,21,13,9,15, 0,2,0,43,0,0,3,6,3,58,0,49,0,97,0,0, 19,20,33,50,55,54,55,54,55,54,55,51,20,7,6,15, 1,6,7,6,7,34,35,34,39,38,61,1,55,52,55,54, 55,54,59,1,22,23,22,23,21,38,35,34,7,6,7,6, 7,6,37,54,53,52,39,52,39,38,39,38,39,38,47,1, 38,39,38,39,38,7,34,15,1,34,7,6,7,6,7,39, 54,59,1,50,23,22,23,22,23,22,23,22,23,22,21,7, 20,7,92,1,32,81,58,38,48,39,29,35,11,47,12,19, 39,4,13,21,115,151,4,5,104,106,130,1,10,46,94,20, 24,31,21,23,40,17,47,59,48,33,25,18,15,17,16,2, 115,9,2,5,3,12,22,16,28,36,16,28,42,30,58,44, 49,18,17,24,15,13,65,27,30,51,19,118,120,38,83,54, 35,22,53,71,16,9,30,31,36,3,10,1,58,148,19,10, 30,21,36,47,51,45,36,68,64,7,20,21,115,4,56,67, 99,31,66,15,24,107,17,4,1,3,7,10,25,19,12,9, 17,13,30,33,22,37,41,21,19,19,15,12,23,47,25,46, 27,12,18,22,14,18,11,1,1,1,4,7,10,6,30,27, 65,16,8,14,24,61,14,10,33,59,72,28,64,21,40,0, 0,2,0,28,0,0,3,18,3,42,0,88,0,105,0,0, 55,34,39,38,47,1,52,55,54,55,54,55,21,34,7,6, 7,6,21,20,31,1,22,51,50,55,54,55,54,53,20,23, 22,23,22,23,22,51,50,55,54,55,54,61,1,38,39,6, 7,6,35,34,39,38,39,38,53,52,55,38,39,38,47,1, 22,23,22,23,22,23,22,29,1,7,6,7,6,7,6,7, 6,35,34,39,38,39,15,1,6,19,22,23,22,51,50,55, 54,55,54,55,38,39,38,39,7,6,247,108,65,31,12,3, 91,40,50,38,35,25,42,33,50,65,82,44,21,24,66,59, 11,14,13,30,4,5,36,33,23,35,83,49,29,4,6,13, 53,26,42,35,30,41,36,46,15,4,34,39,11,4,2,6, 34,120,51,48,75,45,44,4,10,16,22,55,19,18,36,54, 42,24,37,40,7,14,54,97,8,56,28,34,29,36,24,7, 1,2,68,124,4,5,12,12,1,109,53,67,42,121,72,32, 14,7,2,22,10,4,49,60,73,84,49,20,6,62,11,26, 42,26,64,32,4,5,36,12,9,58,33,42,57,33,36,86, 65,31,19,13,21,29,56,17,17,49,59,19,16,6,7,19, 14,66,30,42,68,82,82,95,29,31,80,36,52,51,18,10, 24,18,28,70,17,21,77,2,142,72,31,16,15,14,7,2, 2,86,62,3,2,25,29,0,0,2,0,30,0,0,3,14, 3,58,0,77,0,127,0,0,37,20,7,6,35,34,39,38, 53,52,55,54,55,35,53,33,52,39,38,39,38,39,38,35, 34,7,6,35,34,39,38,53,52,55,54,51,50,23,22,21, 7,39,34,7,6,21,23,22,23,22,31,1,50,55,54,53, 20,23,22,59,1,55,50,55,54,55,54,55,23,6,7,6, 7,6,35,34,39,38,37,54,53,52,61,1,39,52,39,38, 39,38,39,38,39,38,39,38,7,34,15,1,34,7,6,7, 6,7,39,54,59,1,50,23,22,23,22,23,22,23,22,23, 22,23,22,21,20,15,1,39,1,127,64,43,48,83,57,58, 14,16,48,72,1,70,26,3,3,23,18,9,12,29,33,36, 28,13,15,11,72,19,22,21,6,145,1,213,51,30,13,3, 17,124,10,11,24,53,32,27,56,21,30,26,28,66,35,36, 41,9,8,40,8,56,15,56,44,60,71,48,36,1,68,22, 4,5,3,12,40,33,31,83,30,58,44,49,18,17,24,15, 13,65,27,30,51,19,118,120,38,83,54,35,22,54,69,17, 9,26,33,41,4,1,22,40,12,115,55,36,24,72,73,95, 59,37,34,34,27,47,30,3,3,23,3,1,37,36,12,14, 16,57,15,4,2,15,133,37,1,60,39,24,27,87,20,2, 1,1,32,27,29,50,23,6,1,23,21,70,21,30,1,118, 106,32,34,23,43,32,175,34,92,34,2,46,29,19,15,12, 23,85,33,34,43,14,18,11,1,1,1,4,7,10,6,30, 27,65,16,8,14,24,60,15,11,26,61,84,92,19,22,84, 48,80,66,0,0,2,0,19,0,0,3,22,3,42,0,113, 0,130,0,0,37,50,55,54,63,1,54,53,20,23,22,23, 22,23,22,23,50,55,54,61,1,38,39,6,7,6,35,34, 39,38,39,38,53,52,55,38,39,38,47,1,22,23,22,23, 22,23,22,29,1,7,6,7,6,7,6,7,6,35,34,39, 38,39,20,7,6,35,34,47,1,38,53,52,55,54,63,1, 35,34,53,52,51,33,52,39,38,35,34,15,2,34,39,38, 39,52,55,54,55,50,23,22,23,22,21,7,34,7,6,7, 6,21,20,23,22,19,22,23,22,51,50,55,54,55,54,55, 38,39,38,39,7,6,1,6,67,32,8,10,20,13,9,35, 25,10,12,33,35,152,13,6,13,53,26,42,35,30,41,36, 46,15,4,34,39,11,4,2,6,34,120,51,48,75,45,44, 4,10,15,21,49,37,22,36,40,93,37,10,7,43,42,74, 55,40,14,110,23,12,25,31,85,18,17,1,54,26,23,41, 24,26,50,22,39,10,2,1,57,22,21,55,31,68,32,13, 161,46,55,12,7,22,92,40,225,8,56,28,34,29,36,24, 7,1,2,68,124,4,5,12,12,145,25,6,10,24,31,24, 28,18,40,12,5,4,8,2,131,60,32,36,86,65,31,19, 13,21,29,56,17,17,49,59,19,16,6,7,19,14,66,30, 42,68,82,82,95,29,31,80,37,54,40,30,13,17,61,18, 43,48,36,36,22,9,65,132,85,37,19,25,25,22,20,28, 17,20,13,22,3,33,4,5,31,21,8,2,11,16,67,32, 36,1,51,12,9,35,44,87,33,15,1,254,72,31,16,15, 14,7,2,2,86,62,3,2,25,29,0,5,0,15,255,255, 4,244,3,50,0,126,0,142,0,189,0,207,0,216,0,0, 37,20,7,6,35,34,39,38,53,55,6,7,6,7,6,35, 34,39,38,47,1,38,39,34,39,35,34,15,1,38,39,54, 55,54,63,1,39,52,55,52,55,54,51,50,23,22,23,37, 22,23,20,7,6,7,6,7,6,15,1,22,23,22,23,22, 23,54,55,54,51,50,23,22,23,54,51,50,31,1,7,20, 7,6,35,34,39,38,53,55,20,23,22,51,50,55,54,53, 39,53,52,39,38,39,38,47,2,34,7,6,7,52,39,38, 39,38,35,34,7,6,7,6,21,54,51,50,23,22,7,52, 39,38,35,34,7,6,21,20,23,22,51,50,55,54,37,52, 55,54,51,50,23,22,23,20,7,6,35,39,38,39,38,39, 38,39,7,50,23,22,23,22,23,22,51,50,55,54,55,54, 53,52,39,38,39,5,22,23,22,23,38,39,38,55,52,39, 38,39,38,35,34,7,6,21,20,23,22,51,50,55,54,55, 38,39,34,7,6,21,23,21,3,197,48,25,32,59,34,20, 1,33,33,26,53,66,90,69,58,39,63,51,29,34,6,9, 6,17,6,30,3,12,11,71,15,6,91,5,1,70,63,94, 58,25,29,63,2,67,15,3,22,2,46,91,126,54,167,56, 59,19,8,5,7,6,38,96,3,3,47,30,30,32,36,68, 59,40,42,2,50,26,33,72,26,11,20,32,16,23,61,4, 1,1,18,7,10,19,9,13,20,57,21,4,4,24,27,54, 9,12,49,43,4,3,32,36,45,62,36,21,31,44,22,26, 25,24,20,42,21,24,30,22,22,253,186,42,23,26,34,29, 32,4,52,27,35,55,49,45,8,5,14,27,135,31,35,50, 71,27,21,54,49,127,76,55,10,4,22,19,51,254,163,16, 69,30,35,46,8,3,155,34,9,10,6,5,35,16,6,33, 14,17,34,16,7,63,50,92,112,48,26,1,223,56,30,16, 44,28,35,11,98,38,31,33,40,40,26,74,59,25,5,1, 2,13,4,16,26,44,9,4,54,49,5,4,79,54,48,4, 3,33,248,22,30,24,21,2,27,41,25,12,55,18,48,31, 13,13,20,38,84,14,1,11,9,35,59,46,113,210,64,32, 16,79,31,38,4,54,29,16,108,12,14,59,25,90,33,12, 11,19,3,4,2,70,13,17,29,33,34,3,1,42,3,4, 41,50,33,49,29,34,45,25,12,24,29,25,45,25,12,22, 31,136,45,25,13,23,25,51,57,28,16,3,8,35,6,6, 17,47,79,20,28,23,8,8,14,70,50,42,15,17,59,37, 37,37,166,69,30,13,2,19,29,12,21,36,18,5,2,1, 31,13,15,37,18,7,33,12,238,23,3,63,33,46,41,4, 0,2,0,33,0,0,3,141,2,82,0,102,0,125,0,0, 19,34,15,2,20,7,6,35,34,39,38,53,52,55,54,55, 54,51,50,23,22,23,22,23,54,55,54,55,50,51,23,50, 23,50,23,22,23,22,21,20,7,6,7,6,43,1,34,47, 1,23,51,50,55,54,55,54,55,54,53,52,39,38,39,38, 39,38,35,34,7,6,7,23,50,31,1,22,23,22,21,20, 7,6,35,34,39,38,47,1,38,39,7,39,54,55,54,63, 1,54,55,52,39,38,3,50,23,22,23,22,31,1,51,50, 55,54,53,52,39,38,47,1,34,7,6,7,6,225,33,23, 7,3,5,18,51,20,18,14,34,43,81,5,17,43,23,7, 11,13,5,47,53,57,65,6,6,44,24,15,33,37,167,32, 8,52,18,26,79,65,13,17,18,6,15,16,35,20,58,27, 7,3,5,36,39,86,37,38,40,48,66,41,20,17,66,14, 15,29,115,41,36,57,69,112,101,78,14,15,58,24,28,24, 24,63,84,15,13,62,2,1,19,17,141,12,33,33,26,30, 24,42,33,154,51,20,113,29,45,44,13,13,71,84,31,2, 30,46,13,68,10,8,48,18,20,24,55,49,60,16,1,26, 8,15,21,30,48,25,28,1,1,4,16,62,139,36,42,123, 66,23,22,59,5,24,1,7,18,57,14,15,30,46,95,57, 65,45,19,9,10,26,11,17,3,4,8,33,50,42,64,84, 78,96,59,10,13,50,15,3,42,12,129,106,18,15,73,8, 15,20,18,20,254,146,14,14,19,19,6,6,89,35,48,92, 44,12,12,3,2,65,118,43,0,2,0,37,255,252,2,240, 3,39,0,58,0,71,0,0,1,52,55,39,38,39,22,23, 22,23,22,23,22,21,16,7,6,35,34,39,38,53,52,55, 54,55,54,51,23,50,23,7,38,39,34,7,6,21,20,23, 22,51,50,55,54,53,52,39,38,39,6,7,6,35,34,39, 38,39,38,23,22,51,50,55,38,39,38,39,6,21,20,23, 1,150,48,31,9,4,85,70,48,71,20,23,25,219,61,78, 146,97,114,46,56,48,26,40,25,8,18,6,19,20,114,41, 18,127,89,93,171,87,61,7,6,23,39,62,20,16,81,42, 1,2,9,76,42,44,41,44,56,11,41,69,26,21,2,129, 54,64,19,10,19,18,58,38,95,27,54,68,49,254,192,66, 18,62,72,130,111,52,63,14,7,1,6,27,6,2,103,45, 60,68,41,28,89,63,96,61,29,36,39,34,14,5,89,3, 4,26,32,45,38,84,9,44,32,35,43,46,26,0,0,2, 0,28,255,48,2,77,2,95,0,70,0,104,0,0,1,6, 7,6,7,6,7,6,21,20,23,22,23,22,23,55,50,63, 1,23,7,6,35,34,39,38,53,52,55,54,59,1,55,22, 23,50,23,38,39,38,39,38,35,34,6,35,34,39,38,39, 38,53,54,63,2,50,23,22,23,22,23,7,38,39,38,35, 6,7,39,38,3,54,55,54,55,23,6,15,1,6,7,23, 22,23,22,23,55,50,55,54,63,1,21,6,7,34,39,38, 39,38,53,52,55,54,1,155,109,35,26,21,8,8,19,12, 12,54,73,94,20,8,59,35,10,77,60,73,83,106,135,66, 86,206,24,47,80,18,2,2,8,51,16,20,28,42,22,82, 16,16,20,2,1,10,3,40,42,50,64,50,53,18,40,4, 3,69,23,28,12,7,12,13,11,54,29,109,20,35,10,28, 72,7,28,4,1,1,1,15,60,12,8,26,3,2,12,62, 59,20,15,21,34,10,4,5,1,166,19,22,16,31,11,15, 47,32,29,40,42,30,41,9,1,12,11,18,24,18,56,69, 97,109,57,71,1,10,6,1,66,20,6,3,6,60,25,3, 1,14,21,23,18,12,4,22,24,17,33,59,42,11,2,2, 13,1,4,7,254,17,68,46,8,13,18,9,40,4,22,42, 25,3,3,51,5,1,9,1,1,6,23,40,3,5,4,39, 17,21,13,9,15,0,0,2,0,32,0,0,3,14,3,58, 0,53,0,103,0,0,55,50,55,54,55,22,23,22,51,50, 55,54,55,54,55,23,21,7,6,7,6,35,34,39,38,47, 2,6,7,6,7,6,35,34,39,38,53,52,55,54,51,55, 22,31,1,35,34,7,6,21,20,23,22,37,54,53,52,61, 1,39,52,39,38,39,38,39,38,39,38,39,38,7,34,15, 1,34,7,6,7,6,7,39,54,59,1,50,23,22,23,22, 23,22,23,22,23,22,23,22,21,20,15,1,39,220,107,63, 8,9,34,34,31,36,66,35,36,41,9,8,41,10,25,30, 47,101,37,22,23,33,26,19,29,16,20,34,39,36,87,56, 56,80,53,93,34,7,7,2,45,146,36,11,58,40,2,27, 22,4,5,3,12,40,33,31,83,30,58,44,49,18,17,24, 15,13,65,27,30,51,19,118,120,38,83,54,35,22,54,69, 17,9,26,33,41,4,1,22,40,12,150,73,10,12,46,28, 22,23,21,70,21,30,1,32,48,94,50,89,9,9,24,27, 36,51,15,18,14,7,74,74,96,190,64,41,1,1,1,27, 121,36,44,79,48,33,100,34,92,34,2,46,29,19,15,12, 23,85,33,34,43,14,18,11,1,1,1,4,7,10,6,30, 27,65,16,8,14,24,60,15,11,26,61,84,92,19,22,84, 48,80,66,0,0,2,0,31,0,2,3,130,2,87,0,116, 0,138,0,0,55,54,55,54,63,1,54,55,54,53,39,38, 35,34,7,6,21,20,23,20,7,6,7,6,35,34,47,1, 52,55,54,55,54,55,54,59,1,22,31,1,22,23,54,55, 54,55,54,55,50,23,22,23,22,23,20,7,6,7,6,7, 6,15,1,34,39,55,22,59,1,54,55,54,55,54,55,52, 39,38,35,34,15,1,6,7,55,50,23,22,23,22,23,22, 31,1,20,15,1,6,7,6,7,6,7,6,35,7,34,39, 38,39,38,39,38,39,22,23,22,1,7,6,15,1,6,7, 31,1,51,50,55,54,55,54,55,54,53,38,39,38,39,120, 14,16,16,30,55,9,7,9,2,12,43,35,26,4,4,5, 9,12,10,21,45,20,5,48,32,49,8,10,18,19,12,42, 20,6,11,6,36,65,27,34,18,74,95,93,120,16,7,1, 50,10,13,26,31,2,3,32,76,31,10,27,45,11,52,16, 7,4,8,2,81,85,140,36,20,73,34,16,64,27,27,73, 36,13,18,25,7,2,2,12,17,63,10,31,77,27,9,10, 71,56,34,32,47,9,22,17,29,53,22,3,1,16,42,94, 54,7,35,8,74,32,29,93,47,15,20,70,19,12,7,81, 17,23,126,64,45,51,57,76,14,14,23,15,18,37,56,12, 17,16,24,15,10,20,12,13,45,29,49,55,39,17,2,3, 6,5,24,8,22,50,49,30,16,8,5,10,45,60,115,61, 55,121,65,13,13,30,13,1,1,4,48,6,30,11,33,15, 22,46,55,126,81,85,3,24,18,18,7,9,16,36,14,24, 49,28,55,14,13,38,50,39,6,18,23,3,2,2,12,12, 30,7,25,19,49,30,2,1,1,27,3,16,106,15,110,39, 18,2,22,7,12,40,34,23,27,93,34,7,6,0,0,3, 0,26,255,21,2,70,2,108,0,45,0,78,0,118,0,0, 1,50,23,22,23,22,23,21,20,7,38,39,34,7,6,7, 6,21,20,23,22,23,22,51,63,1,15,1,6,35,38,39, 38,47,1,38,39,38,53,52,55,54,55,54,55,54,23,34, 39,38,39,38,39,6,7,6,21,20,23,54,55,54,51,23, 51,23,50,23,54,53,52,39,38,39,38,39,34,7,6,19, 54,55,54,55,23,6,7,6,7,6,21,20,23,22,23,22, 51,50,55,54,63,1,50,55,52,63,1,21,6,7,34,39, 38,39,38,55,52,55,54,1,87,89,68,48,17,9,7,2, 59,60,47,30,149,25,6,41,56,96,18,18,40,90,5,86, 57,59,75,8,81,21,6,83,29,26,29,6,10,40,92,68, 10,27,17,2,3,10,8,57,42,35,2,100,115,39,43,38, 22,15,21,70,3,23,19,30,9,26,22,76,38,13,33,107, 25,53,11,35,86,7,13,16,4,8,36,15,25,16,13,3, 2,9,3,2,17,6,68,68,23,17,22,40,12,1,4,6, 2,108,47,28,30,17,26,47,5,6,11,2,10,48,88,20, 22,74,48,71,13,2,2,20,18,22,13,4,3,22,11,4, 48,56,52,92,83,61,13,18,75,45,33,130,22,3,4,18, 1,12,67,55,59,18,6,116,25,8,1,4,15,4,7,17, 26,26,18,6,4,46,22,253,196,74,47,11,20,20,12,48, 5,19,29,29,14,11,37,16,10,4,1,1,2,1,1,6, 4,26,45,4,6,4,44,19,25,14,10,17,0,2,0,32, 0,0,3,58,2,105,0,82,0,97,0,0,19,52,55,54, 63,1,54,51,23,52,39,38,39,34,7,6,7,6,35,39, 38,39,52,55,54,51,23,50,23,22,23,22,21,7,38,43, 1,34,7,6,21,20,23,22,23,22,23,50,55,54,53,52, 39,38,47,2,52,55,54,55,54,59,1,23,50,31,1,22, 23,22,21,20,7,22,23,20,7,6,35,34,39,38,1,34, 7,6,21,63,1,50,63,1,52,39,38,39,38,32,85,25, 28,25,34,56,89,50,22,13,15,24,18,47,33,11,17,21, 7,64,36,38,22,48,33,40,19,9,3,129,9,11,93,50, 31,133,28,37,63,98,110,46,195,39,31,59,213,3,22,3, 2,58,91,28,18,7,10,26,39,18,8,47,98,1,123,112, 149,162,117,131,2,78,75,52,11,100,96,44,10,2,25,9, 3,37,1,40,91,44,13,6,4,6,1,54,22,7,1,9, 9,27,13,2,8,35,37,22,12,1,21,19,46,22,24,39, 1,50,31,43,107,34,7,5,6,1,7,20,121,49,39,31, 15,2,32,27,36,6,4,82,5,5,11,18,40,17,17,45, 24,35,126,126,78,70,75,84,1,167,73,20,28,1,2,30, 13,21,19,8,2,25,0,2,0,37,255,252,2,240,3,39, 0,79,0,92,0,0,1,52,55,38,47,1,22,23,22,23, 22,23,22,21,16,7,6,35,34,39,38,53,52,55,54,55, 54,55,23,50,23,52,39,38,47,1,34,7,6,35,34,39, 38,47,1,52,55,54,51,50,23,39,6,7,34,7,6,21, 23,22,23,22,51,50,55,54,53,52,39,38,39,6,7,6, 35,34,39,38,39,38,23,22,51,50,55,38,39,38,39,6, 21,20,23,1,150,48,31,8,5,85,70,48,71,20,23,25, 219,61,78,143,100,114,139,28,32,27,15,37,16,10,15,14, 33,14,15,52,26,21,34,9,3,3,1,61,24,25,146,17, 76,17,16,72,55,53,1,12,99,54,144,171,87,61,7,6, 23,39,62,20,16,81,42,1,2,9,76,42,44,41,44,56, 11,41,69,26,21,2,129,54,64,19,11,18,18,58,38,95, 27,54,68,49,254,192,66,18,67,75,122,139,51,10,6,1, 1,1,2,27,24,23,11,1,35,16,19,7,9,12,39,16, 7,172,1,1,1,42,39,67,15,91,31,15,89,63,96,61, 29,36,39,34,14,5,89,3,4,26,32,45,38,84,9,44, 32,35,43,46,26,0,0,3,0,32,255,255,3,14,3,58, 0,15,0,100,0,150,0,0,37,52,39,38,35,34,7,6, 21,20,23,22,51,50,55,54,55,20,7,6,43,1,39,22, 23,22,51,55,54,55,54,55,54,55,54,55,23,6,7,6, 7,6,35,34,39,38,39,38,39,38,39,53,55,22,55,50, 55,54,53,52,39,38,35,34,7,6,15,1,20,23,22,23, 52,55,54,51,50,23,22,21,20,7,6,35,34,39,38,39, 38,39,52,53,54,55,54,55,54,51,50,23,22,23,54,53, 52,61,1,39,52,39,38,39,38,39,38,39,38,39,38,7, 34,15,1,34,7,6,7,6,7,39,54,59,1,50,23,22, 23,22,23,22,23,22,23,22,23,22,21,20,15,1,39,1, 13,35,17,18,29,14,19,34,17,19,35,19,8,250,77,20, 24,11,20,17,46,44,50,31,58,46,16,45,4,11,1,1, 40,12,34,8,10,71,98,68,37,37,19,1,3,39,4,4, 16,25,12,12,55,63,40,82,67,64,66,4,3,28,2,1, 39,25,30,56,32,18,46,25,31,39,25,22,28,50,4,2, 47,13,18,66,94,109,73,65,188,22,4,5,3,12,40,33, 31,83,30,58,44,49,18,17,24,15,13,65,27,30,51,19, 118,120,38,83,54,35,22,54,69,17,9,26,33,41,4,1, 22,40,12,97,36,21,10,18,25,22,35,22,10,33,15,194, 95,23,6,2,27,22,22,3,9,61,22,87,6,40,3,2, 1,140,58,14,12,88,12,12,21,2,3,44,39,30,24,9, 1,2,18,56,48,20,10,30,30,28,35,34,71,5,3,49, 32,20,43,25,31,52,31,17,14,13,33,63,73,7,7,116, 63,17,16,63,67,59,109,34,92,34,2,46,29,19,15,12, 23,85,33,34,43,14,18,11,1,1,1,4,7,10,6,30, 27,65,16,8,14,24,60,15,11,26,61,84,92,19,22,84, 48,80,66,0,0,1,0,28,0,0,3,115,2,94,0,98, 0,0,1,20,7,6,35,34,39,55,23,22,49,23,50,55, 54,53,52,39,38,39,38,47,1,34,7,6,21,22,23,22, 21,20,7,6,7,6,35,34,39,38,53,52,55,35,34,39, 52,55,33,52,39,48,39,38,39,38,35,7,6,7,6,35, 34,39,38,53,52,55,54,51,50,23,22,23,22,31,1,7, 34,7,6,21,20,23,22,51,50,55,54,53,52,35,52,55, 54,51,50,23,22,3,115,156,33,39,37,71,8,34,30,35, 78,47,34,31,26,45,35,46,33,86,49,33,46,18,46,111, 41,51,22,24,104,78,80,98,80,11,3,14,1,50,8,10, 15,29,8,8,13,29,26,31,22,34,11,2,46,20,23,63, 39,45,22,8,2,4,172,45,45,47,71,68,100,98,54,34, 92,52,63,107,190,51,18,1,35,238,44,9,34,24,16,10, 6,75,54,69,78,54,45,27,21,9,3,51,34,47,10,15, 37,92,106,45,16,6,2,78,79,98,120,59,15,14,2,17, 24,20,28,9,3,2,6,32,31,31,8,8,37,19,8,17, 18,46,17,18,52,1,57,57,70,51,36,37,43,27,38,61, 107,85,104,171,57,0,0,3,0,29,0,0,2,253,3,54, 0,15,0,128,0,170,0,0,1,52,39,38,35,34,15,1, 20,23,22,51,55,54,55,54,7,34,39,38,39,52,55,54, 51,50,23,22,23,22,23,22,21,20,15,1,6,7,6,7, 6,35,34,39,38,53,54,55,54,63,1,52,39,38,35,34, 7,6,7,6,29,1,20,23,22,23,22,51,50,55,54,55, 54,63,1,54,55,23,21,6,49,20,7,6,15,1,6,7, 6,7,34,35,34,39,38,39,38,39,52,55,54,55,54,51, 50,23,22,21,20,7,6,21,20,23,22,51,50,55,54,53, 52,39,22,23,22,21,20,7,6,51,52,39,52,39,38,39, 38,39,38,39,38,39,38,7,34,15,1,34,7,6,7,6, 7,39,54,59,1,50,23,22,23,22,23,22,23,22,23,22, 23,22,21,1,232,40,14,17,32,23,20,34,19,22,11,40, 15,5,75,57,30,8,4,73,15,19,35,37,1,3,75,24, 9,6,3,7,18,32,51,40,66,93,63,47,2,30,16,6, 2,13,11,24,17,27,21,20,26,12,31,95,83,83,81,58, 38,48,39,29,11,9,21,51,2,9,19,39,4,13,21,115, 151,4,5,87,112,120,21,12,2,52,27,40,17,14,34,29, 23,27,21,82,35,42,111,48,30,71,12,8,1,20,29,247, 4,5,3,12,40,33,31,83,30,58,44,49,18,17,24,15, 13,65,27,30,51,19,118,120,38,83,54,35,22,54,69,17, 9,43,34,14,5,6,1,218,51,18,7,20,50,40,24,12, 1,4,39,12,88,55,15,18,100,21,4,17,1,1,32,59, 25,19,31,15,7,20,21,41,21,15,41,31,43,37,44,22, 12,14,13,17,20,17,18,27,44,53,44,13,24,63,45,40, 19,10,30,21,36,19,16,66,1,33,12,13,25,68,64,7, 20,21,115,4,67,72,83,56,68,106,78,39,18,7,32,24, 29,30,32,27,22,63,25,10,60,40,43,62,26,9,41,5, 4,29,29,42,91,20,19,15,12,23,85,33,34,43,14,18, 11,1,1,1,4,7,10,6,30,27,65,16,8,14,24,60, 15,11,42,87,33,27,68,48,0,3,0,31,0,0,3,14, 3,58,0,14,0,160,0,210,0,0,1,52,39,38,35,34, 15,1,20,23,22,51,50,55,54,19,23,51,55,54,55,54, 55,54,55,23,6,7,6,7,6,7,34,35,34,39,38,53, 52,63,2,54,55,52,35,7,35,34,7,6,21,20,23,22, 23,22,23,22,21,20,7,6,35,34,39,38,53,52,55,54, 51,50,31,1,7,20,23,22,51,50,55,54,53,38,47,1, 22,23,20,7,6,35,34,39,38,53,52,55,54,51,50,23, 22,21,20,7,6,35,34,39,38,47,1,54,55,54,53,52, 39,38,39,38,35,34,7,6,21,20,23,22,31,1,22,51, 50,55,54,53,52,39,38,53,52,55,54,63,1,50,23,50, 23,22,21,20,7,6,7,22,23,22,55,54,53,52,61,1, 39,52,39,38,39,38,39,38,39,38,39,38,7,34,15,1, 34,7,6,7,6,7,39,54,59,1,50,23,22,23,22,23, 22,23,22,23,22,23,22,21,20,15,1,39,1,230,29,15, 16,28,20,21,33,13,14,42,19,8,11,37,1,15,63,33, 29,45,9,8,40,11,53,22,41,40,41,4,10,48,39,40, 17,4,36,6,2,56,20,14,39,20,19,25,3,1,24,4, 7,46,47,55,115,57,38,68,47,71,48,26,5,14,4,38, 85,78,41,22,5,25,19,8,2,43,21,26,55,23,11,79, 19,19,56,41,31,71,44,54,49,47,48,15,1,1,6,9, 19,4,3,10,19,97,31,12,63,15,20,46,39,34,35,25, 9,32,32,45,9,9,49,37,29,19,17,20,31,29,3,4, 6,20,215,22,4,5,3,12,40,33,31,83,30,58,44,49, 18,17,24,15,13,65,27,30,51,19,118,120,38,83,54,35, 22,54,69,17,9,26,33,41,4,1,22,40,12,1,248,34, 19,10,20,48,39,16,6,35,14,254,159,1,4,10,24,21, 71,21,30,1,127,97,41,24,23,1,36,36,52,27,22,5, 21,5,7,30,1,5,3,26,11,13,1,1,22,8,11,15, 52,34,36,121,80,110,149,78,55,41,19,57,10,7,84,40, 22,29,50,19,11,20,22,52,26,13,43,18,24,60,33,6, 50,37,43,73,40,24,37,38,53,22,13,12,19,6,13,12, 2,1,3,140,54,68,84,40,10,9,18,12,13,14,3,9, 17,15,20,35,13,3,1,3,5,14,12,23,18,18,15,11, 11,6,5,114,34,92,34,2,46,29,19,15,12,23,85,33, 34,43,14,18,11,1,1,1,4,7,10,6,30,27,65,16, 8,14,24,60,15,11,26,61,84,92,19,22,84,48,80,66, 0,2,0,44,0,2,3,61,2,97,0,98,0,110,0,0, 19,50,23,22,23,6,7,21,54,49,38,34,7,6,21,20, 23,22,59,1,54,49,50,55,54,55,54,63,1,51,23,22, 23,22,23,22,51,54,55,54,63,1,52,39,38,39,38,47, 1,38,39,38,43,1,53,54,55,54,51,50,23,22,21,20, 15,1,31,1,22,21,20,7,6,7,6,15,2,34,39,38, 47,1,38,39,6,15,1,6,15,1,39,34,39,38,53,52, 55,54,37,34,7,51,50,31,1,54,55,52,39,38,254,53, 45,7,13,25,4,18,45,108,57,63,49,54,75,33,12,16, 20,49,19,3,2,10,8,3,3,15,15,46,45,53,90,33, 23,15,1,41,1,2,32,1,27,3,4,30,35,134,10,66, 55,59,92,35,14,29,21,17,23,38,7,6,24,46,69,47, 50,49,41,6,7,27,11,3,2,22,21,34,56,29,21,8, 17,182,55,61,1,227,109,34,130,26,66,11,29,4,2,17, 2,0,29,4,9,29,7,2,16,36,51,55,71,53,49,56, 2,9,17,42,7,7,59,35,17,26,29,21,18,9,43,30, 67,17,41,42,1,2,26,1,11,1,1,10,35,52,40,34, 54,22,29,51,21,12,14,32,69,61,51,25,28,37,70,19, 8,2,39,5,7,37,20,28,18,36,26,40,15,3,1,7, 49,206,101,70,76,60,97,26,2,9,38,14,4,60,0,2, 0,26,255,253,2,253,3,105,0,51,0,87,0,0,55,38, 39,38,39,52,63,1,54,55,54,63,1,54,55,54,63,1, 50,23,15,1,6,7,6,7,6,7,51,50,23,50,23,22, 23,22,23,22,21,20,7,6,7,6,7,6,7,6,35,39, 38,39,55,50,55,54,55,54,55,54,53,55,52,47,1,38, 39,38,39,35,34,7,6,15,1,6,7,6,7,20,23,22, 23,22,23,22,23,22,72,15,17,12,2,162,195,32,26,69, 21,81,15,15,26,28,21,35,12,1,9,12,25,46,68,120, 88,32,17,10,56,84,14,8,67,30,15,50,12,18,45,65, 13,14,41,68,67,96,54,185,94,44,15,19,72,21,39,1, 112,44,12,12,40,38,29,63,37,42,45,38,45,26,14,2, 12,11,20,2,3,34,74,74,130,20,34,38,34,174,87,91, 16,16,45,20,79,15,22,36,12,4,38,24,29,31,26,49, 33,48,19,2,40,7,5,41,84,42,43,104,70,17,21,54, 26,5,3,15,3,9,24,97,19,7,12,42,23,39,55,20, 108,52,17,3,3,7,1,10,9,25,22,27,54,38,37,29, 33,31,17,2,2,22,26,24,0,1,0,31,255,98,2,249, 2,84,0,94,0,0,1,20,35,38,39,38,39,38,53,52, 55,39,34,39,54,55,31,1,50,23,20,7,39,6,21,22, 31,2,50,53,52,39,38,35,34,7,6,7,6,21,20,23, 22,23,22,23,22,51,50,55,54,55,54,55,54,55,52,39, 38,39,55,22,23,6,7,6,7,6,15,1,6,35,39,38, 39,38,39,38,39,38,53,54,55,54,55,54,55,54,55,54, 51,50,23,22,2,183,184,71,21,18,15,30,28,76,18,2, 12,7,230,17,5,3,25,120,31,3,62,44,38,142,61,59, 150,118,73,7,8,30,17,14,56,49,54,68,46,47,50,54, 43,42,12,7,1,40,6,3,19,53,9,4,25,12,27,49, 82,44,38,31,33,95,44,60,45,80,31,30,4,12,9,16, 36,78,42,38,54,72,186,58,59,1,137,125,3,8,6,13, 24,38,31,28,1,15,11,2,1,3,10,11,4,1,12,36, 35,9,5,1,91,88,33,34,115,12,14,55,102,86,44,46, 74,65,22,25,10,9,42,41,29,18,21,35,62,10,5,20, 79,71,45,42,20,25,55,17,8,6,1,16,27,33,47,82, 58,60,76,97,34,25,23,62,53,28,12,20,41,39,0,2, 0,42,0,0,2,254,3,58,0,79,0,124,0,0,19,20, 23,22,51,50,55,54,55,54,55,54,55,51,21,6,49,20, 7,6,15,1,6,7,6,7,34,35,34,39,38,61,1,54, 55,54,55,54,55,54,55,54,51,55,52,39,38,35,34,7, 6,7,6,49,7,34,39,38,53,52,55,54,55,23,50,23, 22,23,22,23,22,21,35,34,7,6,7,6,7,6,37,38, 53,52,55,39,52,39,38,39,38,39,38,39,38,39,38,7, 34,15,1,34,7,6,7,6,7,39,54,59,1,50,23,22, 23,22,23,22,23,22,23,22,23,22,21,92,228,28,32,81, 58,61,61,20,12,27,18,47,2,9,19,39,4,13,21,115, 151,4,5,104,106,130,4,9,3,23,15,50,3,2,49,38, 122,51,32,31,33,11,6,30,8,21,29,9,3,47,34,25, 30,25,54,41,20,2,3,16,71,73,40,61,29,6,6,16, 2,120,15,1,1,5,3,12,40,33,31,83,30,58,44,49, 18,17,24,15,13,65,27,30,51,19,118,120,38,83,54,35, 22,54,69,17,9,26,33,41,4,1,1,58,130,16,2,19, 15,50,17,15,36,64,33,12,13,25,68,64,7,20,21,115, 4,56,67,99,71,53,18,7,25,16,23,2,1,14,1,42, 29,18,17,19,13,3,2,24,7,7,37,16,8,3,3,27, 23,33,4,5,31,42,8,8,32,7,8,22,19,46,50,12, 12,11,19,15,12,23,85,33,34,43,14,18,11,1,1,1, 4,7,10,6,30,27,65,16,8,14,24,60,15,11,26,61, 84,92,19,22,0,2,0,31,255,255,3,109,2,88,0,18, 0,122,0,0,37,54,55,38,35,7,6,7,6,7,6,21, 20,31,1,55,51,50,23,3,34,7,6,7,50,23,22,23, 22,23,22,21,20,7,20,7,6,7,6,43,1,38,39,38, 47,1,38,39,38,53,52,55,54,55,54,63,1,54,51,50, 23,21,38,39,34,7,6,7,6,21,23,20,23,22,51,50, 63,1,52,39,38,47,1,7,52,55,54,51,50,23,22,21, 20,7,6,7,38,39,38,35,34,7,38,39,38,53,52,55, 54,55,54,51,50,23,22,23,54,55,52,39,38,39,38,3, 0,24,20,35,53,11,61,16,1,1,7,19,17,48,1,23, 6,154,147,40,8,4,26,37,52,23,2,2,5,2,5,14, 64,62,80,16,63,31,23,9,37,53,22,23,21,20,49,26, 53,49,27,25,42,66,60,51,74,44,12,15,62,1,80,47, 81,149,39,4,39,13,12,34,40,63,72,105,194,63,26,10, 12,82,17,31,9,8,39,37,30,1,10,18,24,61,12,12, 31,21,21,29,7,3,46,39,40,57,56,39,61,53,1,6, 48,3,3,22,18,27,13,5,11,2,1,135,83,17,20,14, 17,51,5,6,20,19,16,8,16,15,73,41,43,7,15,13, 7,32,47,52,52,68,73,51,52,52,27,23,15,5,21,32, 15,2,35,9,15,60,80,25,90,56,34,80,17,35,25,8, 2,2,4,94,90,101,143,59,81,37,65,68,143,26,11,3, 40,61,3,26,20,44,32,39,8,2,10,7,32,33,34,67, 51,47,19,22,0,3,0,53,0,2,3,79,2,104,0,18, 0,36,0,133,0,0,1,34,15,1,20,23,22,51,55,50, 55,54,53,52,39,38,39,38,35,55,54,55,54,55,52,47, 1,38,35,34,7,6,21,51,22,23,50,37,50,23,22,29, 1,7,35,34,21,20,23,22,31,1,49,51,54,49,54,55, 54,53,52,39,6,7,22,23,22,31,2,20,7,6,35,7, 34,39,38,53,52,55,54,59,1,55,38,35,39,52,55,54, 55,54,51,50,31,1,22,23,20,15,1,22,23,22,21,20, 7,6,35,32,39,38,53,52,55,54,51,23,52,35,34,7, 6,7,34,39,38,53,52,55,54,55,54,1,69,67,14,3, 18,20,46,249,30,17,7,34,2,2,21,26,190,41,7,2, 1,61,38,9,10,55,41,41,114,17,13,40,254,54,99,47, 27,2,99,225,55,38,91,151,149,14,155,36,13,56,64,98, 31,4,4,4,14,4,42,14,16,220,76,30,28,74,21,23, 215,176,32,33,173,19,26,69,34,36,95,38,4,9,2,37, 11,34,24,13,228,82,113,254,241,74,26,94,64,88,96,101, 28,30,55,15,34,8,2,8,25,61,15,1,91,40,18,30, 15,13,2,31,13,13,28,17,1,1,10,105,5,28,7,9, 44,19,7,1,32,33,38,1,2,149,62,35,49,12,17,154, 69,37,25,12,5,4,14,72,26,35,76,44,20,35,10,3, 3,4,21,28,45,16,5,3,18,19,45,47,15,4,57,16, 1,45,41,54,25,13,72,9,31,20,36,20,5,23,63,35, 29,194,58,19,150,52,68,106,55,38,1,87,18,36,5,31, 6,8,16,11,39,5,1,0,0,2,0,47,0,0,3,66, 2,104,0,104,0,122,0,0,1,52,39,38,35,39,52,55, 54,55,54,51,50,31,1,22,21,20,7,6,7,50,23,22, 21,20,7,6,35,34,39,38,47,1,7,6,7,6,35,34, 39,38,53,52,55,54,55,35,38,53,52,55,33,52,35,34, 7,6,7,34,39,38,53,52,55,54,55,54,51,50,23,22, 29,1,7,35,34,7,6,21,20,23,22,59,1,50,55,54, 55,54,55,54,53,21,20,23,22,23,22,23,22,51,50,55, 54,39,54,55,54,55,52,47,1,38,35,34,7,6,21,51, 22,23,50,3,19,59,35,45,173,19,26,70,34,35,95,38, 4,10,40,4,5,10,33,34,73,60,88,111,43,8,6,3, 8,27,81,24,34,112,63,46,40,17,30,73,12,12,1,61, 101,28,30,55,15,34,8,2,8,25,61,15,24,88,51,36, 4,194,39,40,51,51,52,86,28,37,18,33,30,8,4,10, 13,7,20,23,29,34,41,128,38,12,71,42,7,1,1,61, 38,9,10,55,41,41,114,17,13,40,1,33,82,42,24,1, 45,41,55,25,12,72,9,31,19,39,21,3,2,57,67,50, 114,72,60,86,15,19,20,34,74,25,7,92,67,93,98,46, 19,20,3,14,12,6,87,18,36,5,31,6,8,16,11,39, 5,1,55,38,51,18,13,37,45,68,51,45,43,5,5,41, 11,9,20,46,13,16,36,13,22,25,10,8,82,27,198,4, 33,5,7,44,19,7,1,32,33,38,1,2,0,1,0,29, 255,255,3,124,2,93,0,118,0,0,37,34,39,38,39,38, 39,52,55,54,55,54,51,22,23,38,39,38,43,1,34,7, 6,15,2,38,39,38,53,52,55,54,51,50,23,22,23,20, 7,20,7,38,43,1,6,7,6,21,20,23,22,23,51,50, 55,54,53,52,39,38,39,48,7,53,54,55,54,55,54,63, 2,50,23,22,23,22,29,1,15,1,6,7,6,7,34,47, 1,55,50,23,22,51,50,55,54,55,54,55,52,39,38,35, 15,1,35,6,7,6,21,23,22,23,22,23,20,7,6,1, 27,145,69,18,11,9,2,23,21,69,60,61,36,40,5,5, 30,57,9,20,14,41,3,20,10,19,11,9,55,40,40,100, 39,15,1,2,9,49,29,11,96,37,55,92,36,45,12,66, 55,59,45,3,4,26,2,14,12,65,75,71,21,14,148,64, 13,9,9,12,11,31,80,41,66,55,54,1,6,2,3,52, 40,20,11,89,30,4,3,55,55,79,26,55,1,4,32,92, 1,54,36,24,2,82,69,1,108,27,34,36,32,32,64,53, 40,35,2,10,36,11,64,20,56,1,10,2,1,15,12,16, 38,30,21,99,31,14,11,6,6,23,14,13,30,37,62,95, 41,16,4,29,27,35,59,13,1,1,1,69,34,25,39,53, 60,9,1,1,151,32,37,42,36,36,63,32,95,35,19,9, 51,4,1,2,28,4,20,103,14,16,107,83,81,1,8,2, 8,20,76,19,4,49,41,51,77,52,44,0,0,2,0,26, 255,48,3,21,2,102,0,93,0,117,0,0,1,50,23,22, 23,22,23,47,1,34,7,6,35,20,23,22,31,1,51,50, 55,54,55,47,1,52,55,31,1,22,21,22,21,20,7,20, 7,6,35,39,34,39,38,39,52,39,6,15,1,6,21,31, 1,22,23,22,51,50,55,54,53,52,39,38,47,1,52,55, 51,22,31,1,22,29,1,7,21,7,6,7,6,35,34,39, 38,53,52,55,54,63,1,54,55,54,23,34,39,38,39,55, 6,7,6,7,54,55,23,51,50,23,52,47,1,38,35,34, 7,6,1,196,152,52,16,10,8,1,145,105,36,130,3,3, 132,28,33,15,20,111,51,20,6,1,3,11,10,4,1,6, 1,72,74,88,24,87,65,63,9,1,23,20,3,5,1,3, 16,72,93,132,104,70,87,8,8,12,1,10,6,3,5,11, 27,1,9,40,101,79,141,157,118,117,157,22,25,9,21,24, 73,96,44,11,3,2,3,79,34,7,5,100,102,91,43,22, 29,39,13,21,31,18,32,28,2,102,62,20,28,32,41,2, 3,16,1,162,49,10,4,2,65,25,32,28,20,6,3,1, 6,2,1,39,9,6,5,80,48,48,1,71,69,103,28,10, 8,98,12,24,27,55,47,111,83,103,61,73,136,20,16,23, 13,6,4,12,2,4,21,48,47,12,16,1,32,140,50,39, 107,107,153,206,66,9,6,28,45,23,69,101,25,6,8,22, 13,76,13,17,16,3,1,4,47,22,5,6,18,18,0,1, 0,40,0,0,3,123,2,82,0,74,0,0,1,50,23,22, 23,22,23,20,7,6,7,6,43,1,47,2,53,22,23,50, 55,54,55,54,55,53,52,39,38,35,7,6,15,1,35,52, 47,1,38,39,38,35,34,7,6,7,6,21,20,23,22,23, 55,54,55,15,2,34,47,1,38,39,38,53,52,55,54,51, 50,23,54,55,54,2,161,114,62,23,11,7,1,22,68,166, 17,18,41,25,27,6,52,45,26,52,52,33,35,7,46,47, 60,28,52,38,39,16,18,2,24,38,47,51,79,62,28,13, 16,154,34,40,55,16,36,4,40,44,73,55,11,137,25,5, 67,73,109,133,61,48,106,18,2,79,122,46,57,43,45,77, 44,143,13,1,1,3,1,24,11,1,13,15,38,47,69,14, 77,62,63,3,12,44,92,32,36,4,51,26,30,62,27,32, 35,49,138,58,12,8,1,1,4,22,3,1,25,5,64,138, 28,30,120,88,94,123,101,16,3,0,0,2,253,30,1,233, 254,22,3,151,0,36,0,45,0,0,1,3,52,53,38,39, 38,35,15,2,39,38,53,52,55,54,51,23,51,50,23,54, 51,50,23,22,21,20,7,6,35,34,39,38,49,3,17,22, 51,54,55,38,39,34,7,253,122,1,1,14,11,9,18,4, 19,9,6,6,12,23,22,1,25,24,20,39,7,7,62,40, 11,18,23,19,17,1,10,33,38,3,7,40,20,16,1,233, 1,96,7,8,1,22,9,4,2,8,2,4,8,7,6,11, 1,20,28,1,23,59,52,24,7,9,12,254,242,1,47,27, 6,50,51,4,27,0,0,1,0,3,0,3,1,80,2,93, 0,58,0,0,19,52,55,54,51,23,50,23,22,23,22,23, 20,7,6,7,6,15,1,6,7,39,38,39,38,39,38,39, 38,39,53,51,22,23,22,23,22,23,22,23,50,55,54,55, 54,63,1,52,39,52,39,38,39,38,35,34,7,6,7,3, 51,35,44,25,9,18,115,21,11,4,5,4,32,3,2,27, 42,70,37,29,20,31,6,4,3,3,2,15,1,7,8,11, 7,23,17,20,23,26,24,10,2,1,9,3,12,12,56,18, 14,37,26,9,12,1,221,62,39,27,1,6,31,113,66,161, 43,20,28,54,5,4,28,38,3,2,5,15,32,11,5,7, 9,18,22,18,12,13,13,7,16,6,1,15,17,32,6,5, 235,39,24,21,50,49,20,6,31,14,42,0,0,1,0,1, 255,22,1,126,1,154,0,34,0,0,19,33,6,7,20,23, 22,23,22,51,55,22,23,6,7,6,35,38,39,38,39,38, 53,52,63,1,54,55,35,39,38,55,48,55,54,17,1,35, 133,8,10,9,31,57,84,21,2,1,10,55,42,35,68,38, 7,6,85,41,87,38,47,233,7,7,1,7,4,1,154,127, 231,45,30,35,37,74,1,4,4,16,25,17,7,24,4,5, 58,120,65,76,145,52,57,3,7,7,10,3,0,1,0,15, 255,19,1,202,1,150,0,54,0,0,5,34,39,38,39,38, 39,38,53,52,55,54,55,54,55,35,53,55,39,38,39,38, 39,52,63,1,23,7,55,15,1,6,7,6,29,1,23,22, 23,22,23,22,51,50,63,1,51,22,23,15,2,6,7,6, 1,46,88,40,17,25,83,22,12,18,18,74,33,66,184,92, 95,7,7,1,7,7,20,168,94,199,29,22,43,30,28,4, 17,53,18,26,36,32,27,20,41,11,5,4,1,7,3,69, 13,32,237,18,9,16,52,56,29,36,43,42,40,75,35,42, 9,104,2,1,1,2,11,8,6,6,1,116,1,21,20,39, 50,49,57,19,25,97,43,14,13,14,5,7,3,7,10,8, 2,33,4,11,0,1,252,237,2,213,254,251,3,213,0,44, 0,0,1,52,39,38,47,1,38,35,39,34,7,6,7,20, 23,22,23,7,34,47,1,38,53,52,55,54,55,54,51,50, 31,1,22,21,20,7,6,35,34,35,39,55,50,55,54,254, 218,32,3,4,33,16,27,124,126,51,34,9,20,50,18,12, 10,5,54,41,6,15,36,87,111,73,42,96,60,29,34,45, 4,5,1,18,50,13,4,3,63,38,19,2,2,10,3,3, 22,9,52,23,20,35,11,11,5,34,30,43,13,24,48,19, 40,8,29,25,81,34,34,35,21,1,47,12,0,2,253,16, 2,213,255,15,3,219,0,16,0,59,0,0,1,34,7,6, 21,20,23,22,23,55,54,55,54,53,52,39,38,23,20,15, 1,6,35,34,39,38,53,52,55,38,47,1,35,34,7,6, 21,20,23,22,23,7,34,47,1,38,53,52,55,54,55,50, 51,23,51,50,23,50,23,22,254,188,36,19,8,41,8,10, 18,29,9,2,30,11,70,45,26,10,10,34,24,26,35,22, 86,16,50,69,48,46,20,50,18,12,10,5,54,41,58,47, 58,11,28,87,29,14,20,45,37,77,3,117,31,14,16,42, 13,2,1,2,10,33,8,8,36,16,6,60,48,23,9,2, 25,23,34,46,29,11,4,1,30,32,29,23,20,35,11,11, 5,34,30,43,78,39,30,3,1,4,26,50,0,1,252,237, 254,250,255,158,1,40,0,35,0,0,5,20,23,22,59,1, 50,55,54,51,50,23,22,59,1,17,55,17,33,34,39,38, 53,52,55,54,51,23,22,23,7,47,1,34,7,6,253,24, 69,20,17,24,41,84,42,33,28,67,33,26,128,34,253,189, 57,33,20,61,31,37,28,13,18,1,23,24,58,26,13,132, 55,34,7,41,20,37,18,1,190,72,253,210,57,35,41,69, 32,16,1,4,10,37,12,3,40,19,0,1,252,227,255,7, 255,153,1,31,0,43,0,0,5,20,23,22,51,50,55,54, 51,50,23,22,31,1,22,23,19,55,17,7,38,39,38,35, 34,7,6,35,34,39,38,53,52,55,54,51,50,23,7,38, 35,34,7,6,253,12,54,25,31,66,78,81,64,39,59,47, 8,18,18,25,1,39,32,8,86,87,38,51,55,138,43,78, 46,32,59,43,43,28,39,11,24,30,48,37,21,117,56,24, 12,37,36,13,13,4,13,14,7,1,165,66,253,242,10,7, 24,23,16,37,49,34,47,41,30,23,20,25,12,26,16,0, 0,2,0,13,255,254,1,111,2,90,0,52,0,69,0,0, 19,50,23,54,55,52,39,38,39,38,35,34,7,6,15,1, 39,54,55,54,55,54,51,50,23,22,23,22,23,22,21,20, 7,6,7,6,7,39,38,35,34,7,6,7,38,39,38,53, 52,55,54,55,54,19,54,55,38,39,38,35,6,7,6,21, 20,23,54,55,50,23,167,48,71,6,2,6,3,16,38,68, 19,15,18,49,28,10,11,8,55,42,18,21,43,40,51,29, 5,7,13,12,9,52,1,1,41,42,27,14,45,20,20,33, 27,10,24,28,60,21,124,17,1,51,29,6,5,84,27,14, 24,21,65,25,41,1,80,31,43,46,24,27,26,24,65,5, 4,27,22,18,18,7,45,8,4,18,20,87,13,24,54,64, 32,116,55,116,3,2,22,21,13,8,18,18,60,36,30,53, 48,53,28,8,254,232,87,110,30,2,1,5,62,39,48,42, 35,27,7,18,0,2,0,33,0,0,2,105,2,110,0,65, 0,82,0,0,19,52,55,54,51,50,23,22,23,22,23,22, 21,20,7,6,35,34,39,38,39,38,53,52,55,54,51,50, 23,22,23,7,39,38,35,34,7,6,21,20,23,22,51,50, 55,54,53,52,47,1,38,39,38,35,22,23,22,21,6,15, 1,6,35,38,39,38,55,52,39,38,35,34,7,6,7,21, 20,23,22,51,50,55,54,206,68,42,52,100,54,20,19,49, 6,1,88,83,115,126,89,39,22,22,97,96,136,89,58,14, 19,20,66,51,41,113,83,82,91,67,90,106,62,44,27,18, 6,8,32,36,31,14,5,6,31,9,37,48,95,28,9,222, 47,25,28,36,25,24,1,48,24,28,48,25,13,1,91,73, 41,25,38,14,20,52,77,19,27,105,69,65,92,41,50,51, 65,133,94,96,34,8,13,12,26,13,82,84,106,95,56,41, 58,42,58,87,33,17,4,5,17,22,49,17,16,58,28,7, 30,6,68,22,38,48,27,14,28,27,27,11,52,27,14,47, 23,0,0,1,0,42,255,254,2,66,2,89,0,79,0,0, 19,50,55,54,53,52,39,38,39,52,55,54,51,50,23,22, 21,20,7,6,35,34,47,1,38,39,55,20,23,22,31,2, 50,55,54,55,54,53,52,47,1,38,35,34,15,1,6,21, 22,21,20,7,6,35,34,39,38,53,52,55,54,51,55,50, 31,1,7,6,35,39,34,7,6,7,6,21,20,23,22,192, 57,21,8,8,7,41,68,9,10,93,88,88,66,68,90,70, 43,16,6,2,12,11,3,26,33,44,32,27,4,6,24,69, 22,14,17,33,18,7,1,42,32,30,46,75,45,30,48,28, 36,21,20,7,1,1,9,13,18,11,7,24,12,10,42,23, 1,92,39,15,18,28,18,15,14,92,12,2,82,82,109,134, 98,98,60,22,17,19,2,19,11,5,18,10,3,51,9,12, 53,157,165,47,11,5,27,16,5,4,10,80,43,29,30,60, 39,51,68,38,23,1,18,11,2,9,1,4,12,24,26,29, 64,34,18,0,255,255,255,158,255,243,2,71,2,244,16,38, 2,7,104,16,16,6,2,58,0,0,255,255,0,48,255,243, 2,138,2,244,16,103,2,7,1,191,0,16,192,0,64,0, 16,6,2,58,0,0,255,255,255,29,255,243,2,71,2,244, 16,39,0,67,0,215,0,16,16,38,2,7,231,16,16,6, 2,58,0,0,255,255,0,48,255,243,2,71,2,244,16,39, 0,67,0,220,0,16,16,103,2,7,1,57,0,16,192,0, 64,0,16,6,2,58,0,0,255,255,255,29,255,243,2,71, 2,244,16,39,0,118,0,145,0,16,16,38,2,7,231,16, 16,6,2,58,0,0,255,255,0,48,255,243,2,71,2,244, 16,39,0,118,0,150,0,16,16,103,2,7,1,57,0,16, 192,0,64,0,16,6,2,58,0,0,255,255,255,163,255,243, 2,71,3,132,16,39,1,247,0,114,0,183,16,38,2,7, 109,16,16,6,2,58,0,0,255,255,0,48,255,243,2,133, 3,132,16,39,1,247,0,114,0,183,16,103,2,7,1,186, 0,16,192,0,64,0,16,6,2,58,0,0,255,255,255,27, 0,0,2,166,2,235,16,38,2,7,229,7,16,6,2,27, 0,0,255,255,0,8,0,0,2,166,2,229,16,103,2,7, 1,75,0,1,192,0,64,0,16,6,2,27,0,0,255,255, 254,33,0,0,2,166,2,232,16,38,0,67,219,4,16,39, 2,7,254,235,0,4,16,6,2,27,0,0,255,255,255,217, 0,0,2,166,2,235,16,38,0,67,195,7,16,102,2,7, 32,7,192,0,64,0,16,6,2,27,0,0,255,255,254,63, 0,0,2,166,2,229,16,38,0,118,179,1,16,39,2,7, 255,9,0,1,16,6,2,27,0,0,255,255,0,8,0,0, 2,166,2,229,16,38,0,118,179,1,16,102,2,7,86,1, 192,0,64,0,16,6,2,27,0,0,255,255,254,210,0,0, 2,166,2,229,16,38,1,247,161,24,16,39,2,7,255,157, 255,113,16,6,2,27,0,0,255,255,255,166,0,0,2,166, 2,229,16,38,1,247,161,24,16,103,2,7,0,233,255,113, 192,0,64,0,16,6,2,27,0,0,255,255,255,140,255,246, 1,220,2,244,16,38,2,7,86,16,16,6,2,62,0,0, 255,255,0,39,255,246,2,119,2,244,16,103,2,7,1,173, 0,16,192,0,64,0,16,6,2,62,0,0,255,255,255,10, 255,246,1,220,2,244,16,39,0,67,0,196,0,16,16,38, 2,7,213,16,16,6,2,62,0,0,255,255,0,39,255,246, 1,241,2,244,16,39,0,67,0,201,0,16,16,103,2,7, 1,38,0,16,192,0,64,0,16,6,2,62,0,0,255,255, 255,10,255,246,1,220,2,244,16,38,0,118,126,16,16,38, 2,7,213,16,16,6,2,62,0,0,255,255,0,39,255,246, 1,241,2,244,16,39,0,118,0,131,0,16,16,103,2,7, 1,38,0,16,192,0,64,0,16,6,2,62,0,0,255,255, 254,118,0,0,2,102,2,229,16,39,2,7,255,64,0,1, 16,6,2,31,0,0,255,255,0,80,0,0,2,102,2,229, 16,103,2,7,0,151,0,1,192,0,64,0,16,6,2,31, 0,0,255,255,253,115,0,0,2,102,2,229,16,39,0,67, 255,45,0,1,16,39,2,7,254,61,0,1,16,6,2,31, 0,0,255,255,255,67,0,0,2,102,2,229,16,39,0,67, 255,45,0,1,16,102,2,7,138,1,192,0,64,0,16,6, 2,31,0,0,255,255,253,115,0,0,2,102,2,229,16,39, 0,118,254,231,0,1,16,39,2,7,254,61,0,1,16,6, 2,31,0,0,255,255,255,67,0,0,2,102,2,229,16,39, 0,118,254,231,0,1,16,102,2,7,138,1,192,0,64,0, 16,6,2,31,0,0,255,255,255,168,255,74,1,242,2,241, 16,38,2,7,114,13,16,6,2,64,0,0,255,255,0,24, 255,74,2,139,2,244,16,103,2,7,1,192,0,16,192,0, 64,0,16,6,2,64,0,0,255,255,255,27,255,74,1,242, 2,238,16,39,0,67,0,213,0,10,16,38,2,7,229,10, 16,6,2,64,0,0,255,255,0,24,255,74,1,251,2,238, 16,39,0,67,0,212,0,10,16,103,2,7,1,49,0,10, 192,0,64,0,16,6,2,64,0,0,255,255,255,21,255,74, 1,242,2,241,16,39,0,118,0,137,0,13,16,38,2,7, 223,13,16,6,2,64,0,0,255,255,0,24,255,74,1,248, 2,244,16,39,0,118,0,139,0,16,16,103,2,7,1,46, 0,16,192,0,64,0,16,6,2,64,0,0,255,255,255,155, 255,74,1,242,3,129,16,39,1,247,0,106,0,180,16,38, 2,7,101,13,16,6,2,64,0,0,255,255,0,24,255,74, 2,143,3,129,16,39,1,247,0,124,0,180,16,103,2,7, 1,196,0,13,192,0,64,0,16,6,2,64,0,0,255,255, 254,103,0,0,2,113,2,229,16,39,2,7,255,49,0,1, 16,6,2,33,0,0,255,255,0,65,0,0,2,113,2,229, 16,103,2,7,0,136,0,1,192,0,64,0,16,6,2,33, 0,0,255,255,253,100,0,0,2,113,2,229,16,39,0,67, 255,30,0,1,16,39,2,7,254,46,0,1,16,6,2,33, 0,0,255,255,255,52,0,0,2,113,2,229,16,39,0,67, 255,30,0,1,16,103,2,7,255,123,0,1,192,0,64,0, 16,6,2,33,0,0,255,255,253,100,0,0,2,113,2,229, 16,39,0,118,254,216,0,1,16,39,2,7,254,46,0,1, 16,6,2,33,0,0,255,255,255,52,0,0,2,113,2,229, 16,39,0,118,254,216,0,1,16,103,2,7,255,123,0,1, 192,0,64,0,16,6,2,33,0,0,255,255,253,247,0,0, 2,113,2,229,16,39,1,247,254,198,0,24,16,39,2,7, 254,194,255,113,16,6,2,33,0,0,255,255,254,203,0,0, 2,113,2,229,16,39,1,247,254,198,0,24,16,103,2,7, 0,14,255,113,192,0,64,0,16,6,2,33,0,0,255,255, 254,238,255,248,1,14,2,244,16,38,2,7,185,16,16,6, 2,66,0,0,255,255,0,56,255,248,1,218,2,244,16,103, 2,7,1,15,0,16,192,0,64,0,16,6,2,66,0,0, 255,255,254,109,255,248,1,14,2,244,16,38,0,67,39,16, 16,39,2,7,255,55,0,16,16,6,2,66,0,0,255,255, 0,56,255,248,1,83,2,244,16,38,0,67,44,16,16,103, 2,7,0,137,0,16,192,0,64,0,16,6,2,66,0,0, 255,255,254,109,255,248,1,14,2,244,16,38,0,118,225,16, 16,39,2,7,255,55,0,16,16,6,2,66,0,0,255,255, 0,56,255,248,1,83,2,244,16,38,0,118,230,16,16,103, 2,7,0,137,0,16,192,0,64,0,16,6,2,66,0,0, 255,255,254,243,255,248,1,14,3,132,16,39,1,247,255,194, 0,183,16,38,2,7,190,16,16,6,2,66,0,0,255,255, 255,199,255,248,1,213,3,132,16,39,1,247,255,194,0,183, 16,103,2,7,1,10,0,16,192,0,64,0,16,6,2,66, 0,0,255,255,254,107,0,0,0,163,2,229,16,39,2,7, 255,53,0,1,16,6,2,35,0,0,255,255,0,69,0,0, 1,86,2,229,16,103,2,7,0,140,0,1,192,0,64,0, 16,6,2,35,0,0,255,255,253,104,0,0,0,163,2,229, 16,39,0,67,255,34,0,1,16,39,2,7,254,50,0,1, 16,6,2,35,0,0,255,255,255,56,0,0,0,163,2,229, 16,39,0,67,255,34,0,1,16,103,2,7,255,127,0,1, 192,0,64,0,16,6,2,35,0,0,255,255,253,104,0,0, 0,163,2,229,16,39,0,118,254,220,0,1,16,39,2,7, 254,50,0,1,16,6,2,35,0,0,255,255,255,56,0,0, 0,163,2,229,16,39,0,118,254,220,0,1,16,103,2,7, 255,127,0,1,192,0,64,0,16,6,2,35,0,0,255,255, 253,251,0,0,0,163,2,229,16,39,1,247,254,202,0,24, 16,39,2,7,254,198,255,113,16,6,2,35,0,0,255,255, 254,207,0,0,0,221,2,229,16,39,1,247,254,202,0,24, 16,103,2,7,0,18,255,113,192,0,64,0,16,6,2,35, 0,0,255,255,255,158,255,244,2,6,2,244,16,38,2,7, 104,16,16,6,2,72,0,0,255,255,0,34,255,244,2,138, 2,244,16,103,2,7,1,191,0,16,192,0,64,0,16,6, 2,72,0,0,255,255,255,29,255,244,2,6,2,244,16,39, 0,67,0,215,0,16,16,38,2,7,231,16,16,6,2,72, 0,0,255,255,0,34,255,244,2,6,2,244,16,39,0,67, 0,220,0,16,16,103,2,7,1,57,0,16,192,0,64,0, 16,6,2,72,0,0,255,255,255,29,255,244,2,6,2,244, 16,39,0,118,0,145,0,16,16,38,2,7,231,16,16,6, 2,72,0,0,255,255,0,34,255,244,2,6,2,244,16,39, 0,118,0,150,0,16,16,103,2,7,1,57,0,16,192,0, 64,0,16,6,2,72,0,0,255,255,254,157,255,248,2,222, 2,232,16,39,2,7,255,103,0,4,16,6,2,41,0,0, 255,255,0,50,255,248,2,222,2,235,16,103,2,7,0,172, 0,7,192,0,64,0,16,6,2,41,0,0,255,255,253,175, 255,248,2,222,2,226,16,39,0,67,255,105,255,254,16,39, 2,7,254,121,255,254,16,6,2,41,0,0,255,255,255,115, 255,248,2,222,2,223,16,39,0,67,255,93,255,251,16,102, 2,7,186,251,192,0,64,0,16,6,2,41,0,0,255,255, 253,235,255,248,2,222,2,226,16,39,0,118,255,95,255,254, 16,39,2,7,254,181,255,254,16,6,2,41,0,0,255,255, 255,166,255,248,2,222,2,229,16,39,0,118,255,74,0,1, 16,102,2,7,237,1,192,0,64,0,16,6,2,41,0,0, 255,255,255,141,255,242,1,222,2,244,16,38,2,7,87,16, 16,6,2,78,0,0,255,255,0,40,255,242,2,121,2,244, 16,103,2,7,1,174,0,16,192,0,64,0,16,6,2,78, 0,0,255,255,255,12,255,242,1,222,2,244,16,39,0,67, 0,198,0,16,16,38,2,7,214,16,16,6,2,78,0,0, 255,255,0,40,255,242,1,242,2,244,16,39,0,67,0,203, 0,16,16,103,2,7,1,40,0,16,192,0,64,0,16,6, 2,78,0,0,255,255,255,12,255,242,1,222,2,244,16,39, 0,118,0,128,0,16,16,38,2,7,214,16,16,6,2,78, 0,0,255,255,0,40,255,242,1,242,2,244,16,39,0,118, 0,133,0,16,16,103,2,7,1,40,0,16,192,0,64,0, 16,6,2,78,0,0,255,255,255,146,255,242,1,222,3,132, 16,39,1,247,0,97,0,183,16,38,2,7,92,16,16,6, 2,78,0,0,255,255,0,40,255,242,2,116,3,132,16,39, 1,247,0,97,0,183,16,103,2,7,1,169,0,16,192,0, 64,0,16,6,2,78,0,0,255,255,0,21,255,254,2,151, 2,229,16,102,2,7,85,1,192,0,64,0,16,6,2,46, 0,0,255,255,255,1,255,254,2,151,2,229,16,39,0,67, 254,235,0,1,16,103,2,7,255,72,0,1,192,0,64,0, 16,6,2,46,0,0,255,255,255,1,255,254,2,151,2,229, 16,39,0,118,254,165,0,1,16,103,2,7,255,72,0,1, 192,0,64,0,16,6,2,46,0,0,255,255,254,152,255,254, 2,151,2,229,16,39,1,247,254,147,0,24,16,103,2,7, 255,220,255,113,192,0,64,0,16,6,2,46,0,0,255,255, 255,252,255,247,2,192,2,244,16,39,2,7,0,198,0,16, 16,6,2,82,0,0,255,255,0,36,255,247,2,232,2,244, 16,103,2,7,2,29,0,16,192,0,64,0,16,6,2,82, 0,0,255,255,255,123,255,247,2,192,2,244,16,39,0,67, 1,53,0,16,16,38,2,7,69,16,16,6,2,82,0,0, 255,255,0,36,255,247,2,192,2,244,16,39,0,67,1,58, 0,16,16,103,2,7,1,151,0,16,192,0,64,0,16,6, 2,82,0,0,255,255,255,123,255,247,2,192,2,244,16,39, 0,118,0,239,0,16,16,38,2,7,69,16,16,6,2,82, 0,0,255,255,0,36,255,247,2,192,2,244,16,39,0,118, 0,244,0,16,16,103,2,7,1,151,0,16,192,0,64,0, 16,6,2,82,0,0,255,255,0,1,255,247,2,192,3,132, 16,39,1,247,0,208,0,183,16,39,2,7,0,203,0,16, 16,6,2,82,0,0,255,255,0,36,255,247,2,227,3,132, 16,39,1,247,0,208,0,183,16,103,2,7,2,24,0,16, 192,0,64,0,16,6,2,82,0,0,255,255,254,158,255,255, 2,192,2,226,16,39,2,7,255,104,255,254,16,6,2,50, 0,0,255,255,0,42,255,255,2,192,2,229,16,103,2,7, 0,191,0,1,192,0,64,0,16,6,2,50,0,0,255,255, 253,161,255,255,2,192,2,232,16,39,0,67,255,91,0,4, 16,39,2,7,254,107,0,4,16,6,2,50,0,0,255,255, 255,113,255,255,2,192,2,232,16,39,0,67,255,91,0,4, 16,102,2,7,184,4,192,0,64,0,16,6,2,50,0,0, 255,255,253,248,255,255,2,192,2,226,16,39,0,118,255,108, 255,254,16,39,2,7,254,194,255,254,16,6,2,50,0,0, 255,255,255,170,255,255,2,192,2,190,16,39,0,118,255,78, 255,218,16,102,2,7,241,218,192,0,64,0,16,6,2,50, 0,0,255,255,254,67,255,255,2,192,2,229,16,39,1,247, 255,18,0,24,16,39,2,7,255,14,255,113,16,6,2,50, 0,0,255,255,255,29,255,255,2,192,2,238,16,39,1,247, 255,24,0,33,16,103,2,7,0,96,255,122,192,0,64,0, 16,6,2,50,0,0,255,255,0,48,255,243,2,71,2,235, 16,39,0,67,0,149,0,7,16,6,2,58,0,0,255,255, 0,48,255,243,2,71,2,235,16,38,0,118,79,7,16,6, 2,58,0,0,255,255,0,39,255,246,1,220,2,235,16,39, 0,67,0,131,0,7,16,6,2,62,0,0,255,255,0,39, 255,246,1,220,2,235,16,38,0,118,61,7,16,6,2,62, 0,0,255,255,0,24,255,74,1,242,2,235,16,39,0,67, 0,162,0,7,16,6,2,64,0,0,255,255,0,24,255,74, 1,242,2,235,16,38,0,118,98,7,16,6,2,64,0,0, 255,255,255,251,255,248,1,14,2,235,16,38,0,67,230,7, 16,6,2,66,0,0,255,255,255,251,255,248,1,14,2,235, 16,38,0,118,160,7,16,6,2,66,0,0,255,255,0,34, 255,244,2,6,2,235,16,39,0,67,0,149,0,7,16,6, 2,72,0,0,255,255,0,34,255,244,2,6,2,235,16,38, 0,118,79,7,16,6,2,72,0,0,255,255,0,40,255,242, 1,222,2,235,16,39,0,67,0,132,0,7,16,6,2,78, 0,0,255,255,0,40,255,242,1,222,2,235,16,38,0,118, 62,7,16,6,2,78,0,0,255,255,0,36,255,247,2,192, 2,235,16,39,0,67,0,243,0,7,16,6,2,82,0,0, 255,255,0,36,255,247,2,192,2,235,16,39,0,118,0,173, 0,7,16,6,2,82,0,0,255,255,255,158,255,8,2,71, 2,244,16,38,2,14,114,5,16,38,2,7,104,16,16,6, 2,58,0,0,255,255,0,48,255,8,2,138,2,244,16,38, 2,14,114,5,16,103,2,7,1,191,0,16,192,0,64,0, 16,6,2,58,0,0,255,255,255,29,255,8,2,71,2,244, 16,38,2,14,114,5,16,39,0,67,0,215,0,16,16,38, 2,7,231,16,16,6,2,58,0,0,255,255,0,48,255,8, 2,71,2,244,16,38,2,14,114,5,16,39,0,67,0,220, 0,16,16,103,2,7,1,57,0,16,192,0,64,0,16,6, 2,58,0,0,255,255,255,29,255,8,2,71,2,244,16,38, 2,14,114,5,16,39,0,118,0,145,0,16,16,38,2,7, 231,16,16,6,2,58,0,0,255,255,0,48,255,8,2,71, 2,244,16,38,2,14,114,5,16,39,0,118,0,150,0,16, 16,103,2,7,1,57,0,16,192,0,64,0,16,6,2,58, 0,0,255,255,255,163,255,8,2,71,3,132,16,38,2,14, 114,5,16,39,1,247,0,114,0,183,16,38,2,7,109,16, 16,6,2,58,0,0,255,255,0,48,255,8,2,133,3,132, 16,38,2,14,114,5,16,39,1,247,0,114,0,183,16,103, 2,7,1,186,0,16,192,0,64,0,16,6,2,58,0,0, 255,255,255,27,255,241,3,89,2,235,16,39,2,14,2,60, 0,238,16,38,2,7,229,7,16,6,2,27,0,0,255,255, 0,8,255,241,3,89,2,229,16,39,2,14,2,60,0,238, 16,103,2,7,1,75,0,1,192,0,64,0,16,6,2,27, 0,0,255,255,254,33,255,241,3,89,2,232,16,39,2,14, 2,60,0,238,16,38,0,67,219,4,16,39,2,7,254,235, 0,4,16,6,2,27,0,0,255,255,255,217,255,241,3,89, 2,235,16,39,2,14,2,60,0,238,16,38,0,67,195,7, 16,102,2,7,32,7,192,0,64,0,16,6,2,27,0,0, 255,255,254,63,255,241,3,89,2,229,16,39,2,14,2,60, 0,238,16,38,0,118,179,1,16,39,2,7,255,9,0,1, 16,6,2,27,0,0,255,255,0,8,255,241,3,89,2,229, 16,39,2,14,2,60,0,238,16,38,0,118,179,1,16,102, 2,7,86,1,192,0,64,0,16,6,2,27,0,0,255,255, 254,210,255,241,3,89,2,229,16,39,2,14,2,60,0,238, 16,38,1,247,161,24,16,39,2,7,255,157,255,113,16,6, 2,27,0,0,255,255,255,166,255,241,3,89,2,229,16,39, 2,14,2,60,0,238,16,38,1,247,161,24,16,103,2,7, 0,233,255,113,192,0,64,0,16,6,2,27,0,0,255,255, 255,168,255,18,1,242,2,241,16,38,2,14,209,15,16,38, 2,7,114,13,16,6,2,64,0,0,255,255,0,24,255,18, 2,139,2,244,16,38,2,14,209,15,16,103,2,7,1,192, 0,16,192,0,64,0,16,6,2,64,0,0,255,255,255,27, 255,18,1,242,2,238,16,38,2,14,209,15,16,39,0,67, 0,213,0,10,16,38,2,7,229,10,16,6,2,64,0,0, 255,255,0,24,255,18,1,251,2,238,16,38,2,14,209,15, 16,39,0,67,0,212,0,10,16,103,2,7,1,49,0,10, 192,0,64,0,16,6,2,64,0,0,255,255,255,21,255,18, 1,242,2,241,16,38,2,14,209,15,16,39,0,118,0,137, 0,13,16,38,2,7,223,13,16,6,2,64,0,0,255,255, 0,24,255,18,1,248,2,244,16,38,2,14,209,15,16,39, 0,118,0,139,0,16,16,103,2,7,1,46,0,16,192,0, 64,0,16,6,2,64,0,0,255,255,255,155,255,18,1,242, 3,129,16,38,2,14,209,15,16,39,1,247,0,106,0,180, 16,38,2,7,101,13,16,6,2,64,0,0,255,255,0,24, 255,18,2,143,3,129,16,38,2,14,209,15,16,39,1,247, 0,124,0,180,16,103,2,7,1,196,0,13,192,0,64,0, 16,6,2,64,0,0,255,255,254,103,255,235,3,65,2,229, 16,39,2,14,2,36,0,232,16,39,2,7,255,49,0,1, 16,6,2,33,0,0,255,255,0,65,255,235,3,65,2,229, 16,39,2,14,2,36,0,232,16,103,2,7,0,136,0,1, 192,0,64,0,16,6,2,33,0,0,255,255,253,100,255,235, 3,65,2,229,16,39,2,14,2,36,0,232,16,39,0,67, 255,30,0,1,16,39,2,7,254,46,0,1,16,6,2,33, 0,0,255,255,255,52,255,235,3,65,2,229,16,39,2,14, 2,36,0,232,16,39,0,67,255,30,0,1,16,103,2,7, 255,123,0,1,192,0,64,0,16,6,2,33,0,0,255,255, 253,100,255,235,3,65,2,229,16,39,2,14,2,36,0,232, 16,39,0,118,254,216,0,1,16,39,2,7,254,46,0,1, 16,6,2,33,0,0,255,255,255,52,255,235,3,65,2,229, 16,39,2,14,2,36,0,232,16,39,0,118,254,216,0,1, 16,103,2,7,255,123,0,1,192,0,64,0,16,6,2,33, 0,0,255,255,253,247,255,235,3,65,2,229,16,39,2,14, 2,36,0,232,16,39,1,247,254,198,0,24,16,39,2,7, 254,194,255,113,16,6,2,33,0,0,255,255,254,203,255,235, 3,65,2,229,16,39,2,14,2,36,0,232,16,39,1,247, 254,198,0,24,16,103,2,7,0,14,255,113,192,0,64,0, 16,6,2,33,0,0,255,255,255,252,255,9,2,192,2,244, 16,39,2,14,0,203,0,6,16,39,2,7,0,198,0,16, 16,6,2,82,0,0,255,255,0,36,255,9,2,232,2,244, 16,39,2,14,0,203,0,6,16,103,2,7,2,29,0,16, 192,0,64,0,16,6,2,82,0,0,255,255,255,123,255,9, 2,192,2,244,16,39,2,14,0,203,0,6,16,39,0,67, 1,53,0,16,16,38,2,7,69,16,16,6,2,82,0,0, 255,255,0,36,255,9,2,192,2,244,16,39,2,14,0,203, 0,6,16,39,0,67,1,58,0,16,16,103,2,7,1,151, 0,16,192,0,64,0,16,6,2,82,0,0,255,255,255,123, 255,9,2,192,2,244,16,39,2,14,0,203,0,6,16,39, 0,118,0,239,0,16,16,38,2,7,69,16,16,6,2,82, 0,0,255,255,0,36,255,9,2,192,2,244,16,39,2,14, 0,203,0,6,16,39,0,118,0,244,0,16,16,103,2,7, 1,151,0,16,192,0,64,0,16,6,2,82,0,0,255,255, 0,1,255,9,2,192,3,132,16,39,2,14,0,203,0,6, 16,39,1,247,0,208,0,183,16,39,2,7,0,203,0,16, 16,6,2,82,0,0,255,255,0,36,255,9,2,227,3,132, 16,39,2,14,0,203,0,6,16,39,1,247,0,208,0,183, 16,103,2,7,2,24,0,16,192,0,64,0,16,6,2,82, 0,0,255,255,254,158,255,238,3,152,2,226,16,39,2,14, 2,123,0,235,16,39,2,7,255,104,255,254,16,6,2,50, 0,0,255,255,0,42,255,238,3,152,2,229,16,39,2,14, 2,123,0,235,16,103,2,7,0,191,0,1,192,0,64,0, 16,6,2,50,0,0,255,255,253,161,255,238,3,152,2,232, 16,39,2,14,2,123,0,235,16,39,0,67,255,91,0,4, 16,39,2,7,254,107,0,4,16,6,2,50,0,0,255,255, 255,113,255,238,3,152,2,232,16,39,2,14,2,123,0,235, 16,39,0,67,255,91,0,4,16,102,2,7,184,4,192,0, 64,0,16,6,2,50,0,0,255,255,253,248,255,238,3,152, 2,226,16,39,2,14,2,123,0,235,16,39,0,118,255,108, 255,254,16,39,2,7,254,194,255,254,16,6,2,50,0,0, 255,255,255,170,255,238,3,152,2,190,16,39,2,14,2,123, 0,235,16,39,0,118,255,78,255,218,16,102,2,7,241,218, 192,0,64,0,16,6,2,50,0,0,255,255,254,67,255,238, 3,152,2,229,16,39,2,14,2,123,0,235,16,39,1,247, 255,18,0,24,16,39,2,7,255,14,255,113,16,6,2,50, 0,0,255,255,255,29,255,238,3,152,2,238,16,39,2,14, 2,123,0,235,16,39,1,247,255,24,0,33,16,103,2,7, 0,96,255,122,192,0,64,0,16,6,2,50,0,0,255,255, 0,48,255,243,2,71,2,222,16,38,1,243,110,2,16,6, 2,58,0,0,255,255,0,48,255,243,2,71,2,157,16,38, 0,113,111,224,16,6,2,58,0,0,255,255,0,48,255,23, 2,71,2,235,16,38,2,14,105,20,16,39,0,67,0,149, 0,7,16,6,2,58,0,0,255,255,0,48,255,23,2,71, 2,18,16,38,2,14,105,20,16,6,2,58,0,0,255,255, 0,48,255,23,2,71,2,235,16,38,0,118,79,7,16,38, 2,58,0,0,16,6,2,14,105,20,255,255,0,48,255,243, 2,71,2,191,16,38,1,247,114,242,16,6,2,58,0,0, 255,255,0,48,255,23,2,71,2,191,16,38,2,14,105,20, 16,38,1,247,114,242,16,6,2,58,0,0,255,255,0,8, 0,0,2,166,3,168,16,39,1,243,0,169,0,204,16,6, 2,27,0,0,255,255,0,8,0,0,2,166,3,103,16,39, 0,113,0,170,0,170,16,6,2,27,0,0,255,255,0,8, 0,0,2,166,2,229,16,38,0,67,249,1,16,6,2,27, 0,0,255,255,0,8,0,0,2,166,2,229,16,38,0,118, 179,1,16,6,2,27,0,0,255,255,0,8,255,241,3,89, 2,204,16,39,2,14,2,60,0,238,16,6,2,27,0,0, 255,255,255,203,2,88,0,53,3,83,16,7,0,15,255,117, 2,235,255,255,0,23,0,0,0,179,0,178,16,7,2,14, 255,150,0,253,255,255,255,54,2,71,255,135,2,228,16,6, 2,7,0,0,255,255,255,99,2,108,0,157,2,212,16,7, 1,247,255,94,0,7,255,255,0,6,2,100,1,64,3,111, 16,39,1,247,0,1,0,162,16,6,0,106,0,0,255,255, 0,24,255,18,1,242,2,235,16,38,2,14,209,15,16,39, 0,67,0,162,0,7,16,6,2,64,0,0,255,255,0,24, 255,18,1,242,2,19,16,38,2,14,209,15,16,6,2,64, 0,0,255,255,0,24,255,18,1,242,2,235,16,38,0,118, 98,7,16,38,2,64,0,0,16,6,2,14,209,15,255,255, 0,24,255,74,1,242,2,224,16,38,1,247,109,19,16,6, 2,64,0,0,255,255,0,24,254,92,2,104,2,224,16,39, 2,14,1,75,255,89,16,38,1,247,109,19,16,6,2,64, 0,0,255,255,255,67,0,0,2,102,2,229,16,39,0,67, 255,45,0,1,16,6,2,31,0,0,255,255,255,67,0,0, 2,102,2,229,16,39,0,118,254,231,0,1,16,6,2,31, 0,0,255,255,255,52,0,0,2,113,2,229,16,39,0,67, 255,30,0,1,16,6,2,33,0,0,255,255,255,52,0,0, 2,113,2,229,16,39,0,118,254,216,0,1,16,6,2,33, 0,0,255,255,0,65,255,235,3,65,2,204,16,39,2,14, 2,36,0,232,16,6,2,33,0,0,255,255,255,54,2,71, 1,215,2,228,16,39,0,67,0,240,0,0,16,6,2,7, 0,0,255,255,255,54,2,71,1,215,2,228,16,39,0,118, 0,170,0,0,16,6,2,7,0,0,255,255,255,54,2,71, 1,68,3,116,16,39,1,247,0,4,0,167,16,6,2,7, 0,0,255,255,255,205,255,248,1,14,2,222,16,38,1,243, 191,2,16,6,2,66,0,0,255,255,255,219,255,248,1,14, 2,157,16,38,0,113,191,224,16,6,2,66,0,0,255,255, 255,223,255,248,1,14,3,122,16,39,0,67,255,230,0,150, 16,38,0,106,193,243,16,6,2,66,0,0,255,255,255,214, 255,248,1,14,3,104,16,39,0,118,255,190,0,132,16,38, 0,106,184,238,16,6,2,66,0,0,255,255,255,199,255,248, 1,14,2,191,16,38,1,247,194,242,16,6,2,66,0,0, 255,255,255,213,255,248,1,15,3,116,16,39,1,247,255,208, 0,167,16,38,0,106,193,243,16,6,2,66,0,0,255,255, 255,221,0,0,1,11,3,168,16,39,1,243,255,207,0,204, 16,6,2,35,0,0,255,255,255,235,0,0,0,253,3,103, 16,39,0,113,255,207,0,170,16,6,2,35,0,0,255,255, 255,56,0,0,0,163,2,229,16,39,0,67,255,34,0,1, 16,6,2,35,0,0,255,255,255,56,0,0,0,163,2,229, 16,39,0,118,254,220,0,1,16,6,2,35,0,0,255,255, 1,6,2,71,2,23,2,228,16,39,0,67,0,240,0,0, 16,71,2,7,1,77,0,0,192,0,64,0,255,255,1,6, 2,71,2,23,2,228,16,39,0,118,0,170,0,0,16,71, 2,7,1,77,0,0,192,0,64,0,255,255,0,9,2,71, 2,23,3,116,16,39,1,247,0,4,0,167,16,71,2,7, 1,77,0,0,192,0,64,0,255,255,0,40,255,242,1,222, 2,222,16,38,1,243,93,2,16,6,2,78,0,0,255,255, 0,40,255,242,1,222,2,157,16,38,0,113,94,224,16,6, 2,78,0,0,255,255,0,40,255,242,1,222,3,122,16,39, 0,67,0,132,0,150,16,38,0,106,96,243,16,6,2,78, 0,0,255,255,0,40,255,242,1,222,3,107,16,39,0,118, 0,82,0,135,16,38,0,106,76,241,16,6,2,78,0,0, 255,255,255,179,255,56,2,29,2,244,16,38,2,7,125,16, 16,6,2,74,0,0,255,255,0,57,255,56,2,159,2,244, 16,103,2,7,1,212,0,16,192,0,64,0,16,6,2,74, 0,0,255,255,0,40,255,242,1,222,2,191,16,38,1,247, 97,242,16,6,2,78,0,0,255,255,0,40,255,242,1,222, 3,118,16,39,1,247,0,99,0,169,16,38,0,106,96,243, 16,6,2,78,0,0,255,255,0,21,255,254,2,151,3,168, 16,39,1,243,0,176,0,204,16,6,2,46,0,0,255,255, 0,21,255,254,2,151,3,103,16,39,0,113,0,177,0,170, 16,6,2,46,0,0,255,255,255,1,255,254,2,151,2,229, 16,39,0,67,254,235,0,1,16,6,2,46,0,0,255,255, 255,1,255,254,2,151,2,229,16,39,0,118,254,165,0,1, 16,6,2,46,0,0,255,255,0,78,255,255,2,112,2,229, 16,103,2,7,0,149,0,1,192,0,64,0,16,6,2,43, 0,0,255,255,0,30,2,100,1,40,3,135,16,39,0,67, 0,36,0,163,16,6,0,106,0,0,255,255,0,30,2,100, 1,51,3,122,16,39,0,118,0,6,0,150,16,6,0,106, 0,0,255,255,0,22,2,80,0,231,2,228,16,6,0,67, 0,0,255,255,0,36,255,9,2,192,2,235,16,39,2,14, 0,203,0,6,16,39,0,67,0,243,0,7,16,6,2,82, 0,0,255,255,0,36,255,9,2,192,2,14,16,39,2,14, 0,203,0,6,16,6,2,82,0,0,255,255,0,36,255,9, 2,192,2,235,16,39,0,118,0,173,0,7,16,38,2,82, 0,0,16,7,2,14,0,203,0,6,255,255,0,36,255,247, 2,192,2,191,16,39,1,247,0,208,255,242,16,6,2,82, 0,0,255,255,0,36,255,9,2,192,2,191,16,39,2,14, 0,203,0,6,16,39,1,247,0,208,255,242,16,6,2,82, 0,0,255,255,255,121,255,248,2,222,2,226,16,39,0,67, 255,99,255,254,16,6,2,41,0,0,255,255,255,184,255,248, 2,222,2,220,16,39,0,118,255,92,255,248,16,6,2,41, 0,0,255,255,255,119,255,255,2,192,2,217,16,39,0,67, 255,97,255,245,16,6,2,50,0,0,255,255,255,158,255,255, 2,192,2,193,16,39,0,118,255,66,255,221,16,6,2,50, 0,0,255,255,0,42,255,238,3,152,2,181,16,39,2,14, 2,123,0,235,16,6,2,50,0,0,255,255,0,92,2,80, 1,45,2,228,16,6,0,118,0,0,255,255,1,198,2,71, 2,23,2,228,16,71,2,7,1,77,0,0,192,0,64,0, 0,1,0,46,0,240,1,28,1,56,0,3,0,0,1,21, 35,53,1,28,238,1,56,72,72,0,0,1,255,251,0,240, 2,49,1,56,0,3,0,0,1,21,33,53,2,49,253,202, 1,56,72,72,0,1,255,247,0,240,3,233,1,56,0,3, 0,0,1,21,33,53,3,233,252,14,1,56,72,72,0,1, 0,65,1,221,0,158,2,197,0,12,0,0,19,35,53,52, 55,54,55,21,6,21,20,21,51,158,93,76,8,9,48,48, 1,221,101,110,18,2,1,38,7,77,3,3,0,1,0,64, 1,241,0,157,2,217,0,11,0,0,19,51,21,20,7,6, 7,53,54,55,53,35,64,93,81,6,6,45,3,48,2,217, 101,114,15,1,1,38,6,66,18,0,0,1,0,64,255,128, 0,158,0,104,0,12,0,0,55,51,21,20,7,6,35,53, 54,55,52,53,35,65,93,84,5,5,48,1,48,104,101,116, 14,1,38,7,70,6,7,0,0,1,0,64,1,241,0,157, 2,217,0,11,0,0,19,21,35,23,22,23,21,38,39,38, 61,1,157,48,3,7,38,82,10,1,2,217,104,40,45,5, 38,7,100,11,13,101,0,2,0,48,1,221,1,43,2,197, 0,12,0,25,0,0,19,35,53,52,55,54,55,21,6,21, 20,21,51,23,35,53,52,55,54,55,21,6,21,20,21,51, 141,93,76,8,9,48,48,158,93,76,8,9,48,48,1,221, 101,110,18,2,1,38,7,77,3,3,104,101,110,18,2,1, 38,7,77,3,3,0,0,2,0,49,1,221,1,46,2,197, 0,11,0,23,0,0,19,51,21,20,7,6,7,53,54,55, 53,35,55,51,21,20,7,6,7,53,54,55,53,35,49,93, 81,6,6,45,3,48,160,93,81,6,6,45,3,48,2,197, 101,114,15,1,1,38,6,66,18,104,101,114,15,1,1,38, 6,66,18,0,0,2,0,47,255,128,1,44,0,104,0,11, 0,23,0,0,55,51,21,20,7,6,7,53,54,55,53,35, 55,51,21,20,7,6,7,53,54,55,53,35,47,93,81,6, 6,45,3,48,160,93,81,6,6,45,3,48,104,101,114,15, 1,1,38,6,66,18,104,101,114,15,1,1,38,6,66,18, 0,2,0,49,1,221,1,46,2,197,0,11,0,23,0,0, 19,21,35,23,22,23,21,38,39,38,61,1,51,21,35,23, 22,23,21,38,39,38,61,1,142,48,3,7,38,82,10,1, 253,48,3,7,38,82,10,1,2,197,104,40,45,5,38,7, 100,11,13,101,104,40,45,5,38,7,100,11,13,101,0,1, 0,38,255,79,2,1,2,197,0,11,0,0,1,21,35,17, 35,17,35,53,51,53,51,21,2,1,194,88,193,193,88,1, 246,82,253,171,2,85,82,207,207,0,0,1,0,38,255,79, 2,1,2,197,0,19,0,0,1,21,35,17,51,21,35,21, 35,53,35,53,51,17,35,53,51,53,51,21,2,1,194,194, 194,88,193,193,193,193,88,1,246,82,254,205,82,208,208,82, 1,51,82,207,207,0,0,1,0,50,0,220,1,44,1,214, 0,15,0,0,19,50,23,22,21,20,7,6,35,34,39,38, 53,52,55,54,175,66,37,22,53,33,39,64,38,23,52,33, 1,214,54,32,41,63,37,23,52,33,40,64,38,23,0,1, 0,70,0,220,1,44,1,214,0,4,0,0,19,48,23,20, 7,70,230,230,1,214,125,1,124,0,0,3,0,115,0,0, 3,117,0,104,0,3,0,7,0,11,0,0,55,21,35,53, 33,21,35,53,33,21,35,53,219,104,1,181,104,1,181,104, 104,104,104,104,104,104,104,0,0,7,0,9,255,234,3,225, 2,226,0,15,0,31,0,35,0,51,0,67,0,83,0,99, 0,0,19,50,23,22,21,20,7,6,35,34,39,38,53,52, 55,54,23,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,37,51,1,35,1,50,23,22,21,20,7,6,35,34, 39,38,53,52,55,54,23,34,7,6,21,20,23,22,51,50, 55,54,53,52,39,38,37,50,23,22,21,20,7,6,35,34, 39,38,53,52,55,54,23,34,7,6,21,20,23,22,51,50, 55,54,53,52,39,38,158,76,44,30,59,40,50,75,45,30, 59,40,50,49,27,14,43,22,26,49,27,14,44,21,1,52, 66,254,117,66,1,130,76,44,30,59,40,50,75,45,30,59, 40,50,49,27,14,43,22,25,50,27,14,44,21,1,78,76, 44,30,59,40,50,75,45,30,59,40,50,49,27,14,43,22, 25,50,27,14,44,21,2,216,60,41,51,72,46,31,60,40, 51,74,45,31,60,42,22,26,50,27,14,42,22,26,52,26, 13,70,253,10,1,43,60,41,51,72,46,31,60,40,51,74, 45,31,60,42,22,26,50,27,14,43,22,25,52,26,13,60, 60,41,51,72,46,31,60,40,51,74,45,31,60,42,22,26, 50,27,14,43,22,25,52,26,13,0,0,9,0,9,255,234, 5,73,2,226,0,15,0,31,0,47,0,64,0,80,0,96, 0,100,0,116,0,132,0,0,1,50,23,22,21,20,7,6, 35,34,39,38,53,52,55,54,23,34,7,6,21,20,23,22, 51,50,55,54,53,52,39,38,37,50,23,22,21,20,7,6, 35,34,39,38,53,52,55,54,23,34,7,6,21,20,23,22, 51,50,55,54,53,52,47,1,38,1,50,23,22,21,20,7, 6,35,34,39,38,53,52,55,54,23,34,7,6,21,20,23, 22,51,50,55,54,53,52,39,38,37,51,1,35,1,50,23, 22,21,20,7,6,35,34,39,38,53,52,55,54,23,34,7, 6,21,20,23,22,51,50,55,54,53,52,39,38,3,75,76, 44,30,59,40,50,75,45,30,59,40,50,49,27,14,43,22, 25,50,27,14,44,21,1,78,76,44,30,59,40,50,75,45, 30,59,40,50,49,27,14,43,22,25,50,27,14,44,24,11, 251,223,76,44,30,59,40,50,75,45,30,59,40,50,49,27, 14,43,22,26,49,27,14,44,21,1,52,66,254,117,66,1, 130,76,44,30,59,40,50,75,45,30,59,40,50,49,27,14, 43,22,25,50,27,14,44,21,1,23,60,41,51,72,46,31, 60,40,51,74,45,31,60,42,22,26,50,27,14,43,22,25, 52,26,13,60,60,41,51,72,46,31,60,40,51,74,45,31, 60,42,22,26,50,27,14,43,22,25,52,26,10,3,1,253, 60,41,51,72,46,31,60,40,51,74,45,31,60,42,22,26, 50,27,14,42,22,26,52,26,13,70,253,10,1,43,60,41, 51,72,46,31,60,40,51,74,45,31,60,42,22,26,50,27, 14,43,22,25,52,26,13,0,0,1,0,49,1,182,0,226, 2,204,0,5,0,0,19,23,15,1,39,55,141,85,56,85, 36,36,2,204,40,118,120,17,142,0,0,2,0,49,1,182, 1,181,2,204,0,5,0,11,0,0,19,23,15,1,39,55, 37,23,15,1,39,55,141,85,56,85,36,36,1,11,85,56, 85,36,36,2,204,40,118,120,17,142,119,40,118,120,17,142, 0,3,0,49,1,182,2,136,2,204,0,5,0,11,0,17, 0,0,1,23,15,1,39,55,39,23,15,1,39,55,37,23, 15,1,39,55,1,96,85,56,85,36,36,155,85,56,85,36, 36,1,222,85,56,85,36,36,2,204,40,118,120,17,142,119, 40,118,120,17,142,119,40,118,120,17,142,0,0,1,0,49, 1,182,0,226,2,204,0,5,0,0,19,31,1,7,47,1, 134,55,37,37,85,55,2,204,119,142,17,120,118,0,0,2, 0,49,1,182,1,181,2,204,0,5,0,11,0,0,1,31, 1,7,47,2,31,1,7,47,1,1,89,55,37,37,85,55, 126,55,37,37,85,55,2,204,119,142,17,120,118,40,119,142, 17,120,118,0,0,3,0,49,1,182,2,136,2,204,0,5, 0,11,0,17,0,0,1,31,1,7,47,1,37,31,1,7, 47,1,37,31,1,7,47,1,1,89,56,36,36,85,56,1, 40,56,36,36,85,56,254,175,56,36,36,85,56,2,204,119, 142,17,120,118,40,119,142,17,120,118,40,119,142,17,120,118, 0,1,0,91,0,106,0,243,1,182,0,6,0,0,55,53, 55,21,7,23,21,91,152,106,106,227,89,122,83,83,83,83, 0,1,0,85,0,106,0,239,1,182,0,6,0,0,19,21, 7,53,55,39,53,239,154,108,108,1,61,89,122,83,83,83, 83,0,0,5,0,98,0,68,2,12,1,237,0,15,0,30, 0,46,0,60,0,72,0,0,19,52,55,54,51,50,23,22, 21,20,7,6,35,34,39,38,55,50,23,22,21,20,7,6, 35,34,39,38,53,55,54,23,6,7,6,35,38,39,38,53, 52,55,54,51,50,23,22,7,34,47,1,52,55,54,51,23, 22,21,20,7,6,39,55,39,55,23,55,23,7,23,7,39, 7,98,23,8,7,22,12,4,24,7,7,22,12,4,213,22, 11,4,22,7,8,22,11,4,3,10,237,1,23,7,7,23, 11,4,23,8,7,21,13,4,213,23,11,3,22,7,8,15, 22,22,7,221,188,188,26,187,187,26,188,188,26,187,187,1, 24,23,11,4,23,8,7,21,13,4,22,8,220,22,7,8, 22,11,4,22,7,8,15,21,211,22,12,4,1,23,7,7, 23,11,4,22,8,220,22,15,22,11,4,3,11,23,22,11, 4,24,188,188,24,187,187,24,188,188,24,187,187,0,0,4, 0,124,0,0,1,230,2,217,0,5,0,9,0,15,0,19, 0,0,19,17,7,35,39,17,19,21,35,53,1,17,7,35, 39,17,19,21,35,53,208,22,39,22,83,84,1,106,22,39, 22,83,84,2,217,254,174,223,223,1,82,253,143,104,104,2, 113,254,174,223,223,1,82,253,143,104,104,0,0,3,0,77, 0,0,1,253,2,229,0,3,0,32,0,40,0,0,37,21, 35,53,17,6,15,1,21,35,52,55,54,51,50,31,1,22, 21,20,7,6,7,6,7,6,29,1,35,53,52,55,39,19, 21,55,54,55,52,39,38,1,74,90,61,13,4,85,180,19, 20,126,56,16,15,51,19,30,63,10,6,90,9,9,90,14, 74,1,62,13,104,104,104,2,39,20,70,49,9,211,21,2, 83,30,36,43,70,59,23,27,58,27,15,24,47,55,33,21, 83,1,12,255,13,66,66,71,30,6,0,1,255,82,255,236, 1,80,2,197,0,3,0,0,1,51,1,35,1,22,58,254, 60,58,2,197,253,39,255,255,0,77,0,0,4,41,2,229, 16,39,0,34,2,44,0,0,16,6,0,34,0,0,0,4, 0,77,0,0,2,252,2,229,0,5,0,9,0,47,0,51, 0,0,1,17,7,35,39,17,19,21,35,53,37,35,53,52, 55,54,55,54,55,54,55,52,47,1,38,35,34,7,6,21, 35,52,55,54,51,50,31,1,22,21,20,7,6,7,6,7, 6,29,2,35,53,2,252,22,39,22,83,84,254,162,90,28, 17,35,7,17,74,1,61,31,17,19,82,30,17,85,180,19, 20,126,56,16,15,51,19,30,63,10,6,90,2,217,254,174, 223,223,1,82,253,143,104,104,95,55,50,37,22,33,6,15, 66,66,70,30,10,4,58,34,64,211,21,2,83,30,36,43, 70,59,23,27,58,27,15,24,142,104,104,0,0,4,0,124, 0,0,3,19,2,229,0,5,0,9,0,46,0,50,0,0, 19,17,7,35,39,17,19,21,35,53,37,35,53,52,55,54, 55,54,55,54,55,52,39,38,35,34,7,6,21,35,52,55, 54,51,50,31,1,22,21,20,7,6,7,6,7,6,29,2, 35,53,208,22,39,22,83,84,1,228,90,28,17,35,7,17, 74,1,61,30,37,82,30,17,85,180,19,20,126,56,16,15, 51,19,30,63,10,6,90,2,217,254,174,223,223,1,82,253, 143,104,104,95,55,50,37,22,33,6,15,66,66,70,30,14, 58,34,64,211,21,2,83,30,36,43,70,59,23,27,58,27, 15,24,142,104,104,0,0,1,0,48,255,79,2,10,2,217, 0,18,0,0,19,51,50,23,22,21,20,15,1,6,7,17, 35,17,35,17,35,17,35,48,250,103,66,55,70,12,48,77, 64,82,64,57,2,217,81,67,92,107,68,11,40,4,254,76, 3,74,252,182,3,74,0,2,0,27,1,14,1,69,2,197, 0,13,0,23,0,0,19,50,21,20,7,6,35,34,39,38, 53,52,55,54,23,34,21,20,51,50,55,54,53,52,176,149, 111,18,20,130,17,2,44,38,67,91,90,82,9,1,2,197, 223,184,28,4,169,24,26,119,54,47,47,173,175,137,18,22, 171,0,0,2,0,160,255,56,0,222,0,131,0,3,0,7, 0,0,55,51,53,35,23,21,35,53,160,62,62,62,62,73, 58,106,225,225,0,2,0,20,1,28,1,81,2,197,0,10, 0,13,0,0,19,35,53,19,51,17,51,21,35,21,35,61, 1,7,208,188,204,46,67,67,62,129,1,128,59,1,10,254, 240,53,100,153,170,170,0,1,0,17,1,13,1,70,2,197, 0,34,0,0,1,21,35,7,54,51,50,31,1,22,21,20, 7,6,35,34,39,38,39,51,22,51,50,55,54,53,52,39, 38,35,34,15,1,35,55,1,46,190,18,38,46,87,40,13, 8,68,38,51,82,42,17,10,56,20,74,73,21,6,58,19, 23,46,33,5,52,34,2,197,52,119,26,64,28,23,27,86, 42,24,51,20,47,71,60,17,21,72,23,7,35,5,232,0, 0,2,0,16,1,14,1,63,2,197,0,26,0,42,0,0, 19,34,53,52,55,54,55,50,23,22,23,35,38,39,34,7, 6,21,54,51,50,23,22,21,20,7,6,39,34,7,6,21, 20,23,22,51,50,55,54,53,52,39,38,170,154,42,47,75, 86,32,8,3,56,19,58,82,16,4,38,67,81,38,21,63, 38,46,63,23,8,45,21,26,56,24,11,55,15,1,14,207, 112,59,59,2,72,18,21,60,4,111,23,27,47,61,32,42, 79,41,23,231,49,18,22,56,26,13,47,20,25,68,19,5, 0,1,0,22,1,28,1,71,2,197,0,12,0,0,1,21, 6,7,6,7,35,54,55,54,55,35,53,1,71,144,38,2, 1,61,35,75,31,47,247,2,197,44,179,186,8,8,143,118, 49,63,52,0,0,3,0,23,1,14,1,73,2,197,0,26, 0,42,0,58,0,0,19,22,21,20,7,6,35,34,39,38, 53,52,55,38,39,38,53,52,55,54,51,50,23,22,21,20, 7,39,34,7,6,21,20,23,22,51,50,55,54,53,52,39, 38,7,34,7,6,21,20,23,22,51,50,55,54,53,52,39, 38,251,78,66,37,50,90,42,21,78,52,8,2,60,34,43, 83,37,17,35,102,60,15,4,46,15,18,57,17,5,49,14, 16,64,23,8,51,19,24,68,21,7,50,20,1,251,34,72, 74,36,21,61,31,40,71,34,30,34,11,14,64,32,17,55, 26,32,45,26,137,44,11,12,47,15,5,41,12,13,50,14, 4,178,47,16,20,55,21,8,49,16,19,54,21,8,0,2, 0,23,1,14,1,70,2,197,0,28,0,45,0,0,19,50, 21,20,7,6,7,34,35,34,39,38,39,51,22,23,50,55, 54,53,6,35,34,39,38,53,52,55,54,23,34,15,1,6, 21,20,23,22,51,50,55,54,53,52,39,38,172,154,42,38, 73,5,6,85,33,8,4,57,19,58,79,18,4,41,63,82, 38,20,63,38,47,56,24,8,2,53,16,19,60,25,10,47, 21,2,197,208,110,61,55,5,70,19,22,60,4,105,25,31, 47,61,33,41,79,41,23,46,48,25,10,10,67,20,6,47, 19,24,58,26,12,0,255,255,0,27,255,42,1,69,0,225, 16,7,6,235,0,0,254,28,255,255,0,61,255,56,0,222, 0,225,16,7,0,123,0,0,254,28,255,255,0,19,255,56, 1,70,0,225,16,7,0,116,0,0,254,28,255,255,0,16, 255,42,1,66,0,225,16,7,0,117,0,0,254,28,255,255, 0,20,255,56,1,81,0,225,16,7,6,237,0,0,254,28, 255,255,0,17,255,41,1,70,0,225,16,7,6,238,0,0, 254,28,255,255,0,16,255,42,1,63,0,225,16,7,6,239, 0,0,254,28,255,255,0,22,255,56,1,71,0,225,16,7, 6,240,0,0,254,28,255,255,0,23,255,42,1,73,0,225, 16,7,6,241,0,0,254,28,255,255,0,23,255,42,1,70, 0,225,16,7,6,242,0,0,254,28,0,4,0,91,255,233, 5,124,2,217,0,48,0,72,0,85,0,97,0,0,1,35, 38,35,34,7,6,21,20,23,22,31,1,22,23,22,21,20, 7,6,35,34,39,38,53,51,22,23,22,51,50,55,54,53, 52,47,2,38,39,38,53,52,55,54,51,50,23,22,37,21, 35,17,20,23,22,51,50,55,21,6,35,34,39,38,53,17, 35,53,51,53,51,21,5,17,35,17,33,50,23,22,21,20, 7,6,35,39,51,50,55,54,53,52,47,1,38,43,1,5, 103,88,3,102,82,23,6,66,14,17,80,118,23,7,90,52, 74,194,14,1,88,6,18,33,71,84,28,10,54,27,78,119, 31,16,84,49,68,145,35,10,254,50,86,22,9,15,25,15, 39,29,89,11,1,71,71,83,253,117,93,1,45,161,47,17, 63,58,83,229,194,102,30,10,79,34,14,15,194,1,122,84, 49,14,16,45,22,4,4,19,28,70,21,27,96,44,26,162, 8,9,47,20,35,47,16,19,46,19,8,19,29,51,28,43, 93,42,25,101,27,113,68,254,153,38,6,3,4,70,7,67, 7,9,1,140,68,144,144,215,254,203,2,217,118,41,55,97, 57,52,82,74,24,30,90,28,8,2,0,3,0,93,255,233, 4,157,2,217,0,48,0,78,0,89,0,0,1,35,38,35, 34,7,6,21,20,23,22,31,1,22,23,22,21,20,7,6, 35,34,39,38,53,51,22,23,22,51,50,55,54,53,52,47, 2,38,39,38,53,52,55,54,51,50,23,22,5,17,35,17, 33,50,23,22,21,20,7,6,7,22,23,22,23,22,23,22, 23,21,35,38,53,55,52,39,38,35,39,51,50,55,54,53, 52,39,38,43,1,4,136,88,3,102,82,23,6,66,14,17, 80,118,23,7,90,52,74,194,14,1,88,6,18,33,71,84, 28,10,54,27,78,119,31,16,84,49,68,145,35,10,252,50, 93,1,80,170,41,11,72,19,24,62,19,17,1,2,17,9, 16,113,21,1,80,18,22,240,225,121,18,4,38,32,73,225, 1,122,84,49,14,16,45,22,4,4,19,28,70,21,27,96, 44,26,162,8,9,47,20,35,47,16,19,46,19,8,19,29, 51,28,43,93,42,25,101,27,97,254,198,2,217,120,33,42, 98,51,13,12,27,40,37,86,96,27,13,11,23,48,71,65, 109,17,4,82,86,17,22,66,32,28,0,2,0,60,0,0, 3,27,2,88,0,19,0,36,0,0,37,3,51,3,6,7, 6,7,5,17,51,17,51,54,55,54,55,54,55,54,3,19, 35,19,38,47,1,33,17,35,17,33,50,23,22,23,22,2, 197,1,87,1,17,94,35,41,254,175,87,241,49,13,6,7, 21,13,1,136,1,87,1,3,50,19,254,244,87,1,108,60, 32,7,6,43,156,1,188,254,58,86,39,15,5,1,1,119, 254,213,11,8,4,5,16,30,4,1,76,254,221,1,25,39, 8,1,253,245,2,87,19,4,5,33,0,1,0,2,255,233, 2,31,2,197,0,47,0,0,19,53,52,55,35,55,51,54, 55,54,51,50,23,7,38,47,1,34,7,6,7,33,7,33, 6,21,20,23,51,7,35,22,51,50,55,54,55,21,6,35, 34,39,38,39,38,39,35,55,79,2,79,22,63,15,51,70, 128,98,94,32,85,57,25,107,44,9,6,1,28,23,254,242, 2,1,246,24,214,38,131,54,70,18,24,77,89,107,66,14, 11,44,18,83,22,1,57,25,22,19,59,95,75,101,67,80, 63,7,1,139,25,31,59,16,20,15,15,59,199,38,10,14, 93,47,71,15,17,72,102,59,0,2,0,33,255,234,4,216, 2,205,0,131,0,143,0,0,37,20,7,6,15,1,6,35, 34,39,38,53,52,63,1,35,34,15,1,6,7,6,35,34, 39,38,53,52,55,54,55,50,21,20,7,6,35,34,39,6, 21,20,23,22,51,50,55,54,55,6,7,6,43,1,34,53, 55,54,63,1,6,35,34,39,38,53,52,55,54,53,52,35, 34,7,6,7,6,43,1,34,53,52,55,54,51,50,31,1, 20,7,6,21,20,51,50,55,54,63,1,54,51,50,23,20, 7,3,51,54,55,54,51,50,21,20,7,6,7,6,15,1, 6,21,20,51,50,55,54,55,54,59,1,50,19,34,7,6, 7,54,55,54,55,54,53,52,3,152,1,74,72,29,7,7, 104,10,1,76,64,60,46,23,121,76,111,85,68,92,30,10, 26,19,38,33,29,14,13,19,11,9,80,17,18,100,150,43, 72,177,74,1,6,11,8,1,86,210,74,51,46,57,12,2, 13,24,25,37,59,7,11,4,3,11,8,1,82,61,58,11, 2,21,12,20,65,63,25,16,153,3,3,6,5,2,228,128, 166,126,55,51,71,49,85,224,16,17,73,99,57,62,87,6, 5,2,5,11,8,245,81,177,19,22,202,82,9,7,48,140, 3,2,103,30,9,1,85,8,9,84,107,89,1,168,108,67, 52,46,15,18,29,38,27,2,34,20,13,6,15,19,15,49, 10,2,215,62,89,21,105,3,8,5,121,20,87,23,29,6, 6,15,19,34,21,23,80,10,15,4,9,3,1,118,40,14, 24,32,16,11,16,47,19,22,149,3,14,5,3,254,213,225, 61,26,64,54,70,121,20,1,1,102,141,69,51,116,7,8, 3,2,26,231,25,30,17,93,10,10,68,43,45,0,0,1, 0,17,255,144,2,80,2,206,0,147,0,0,1,23,7,35, 38,35,38,7,6,7,6,15,1,22,23,22,23,51,54,55, 54,55,54,51,50,23,22,23,22,23,22,21,20,7,6,15, 2,6,35,34,39,55,54,61,1,52,39,38,39,15,1,6, 21,23,22,51,22,55,54,55,23,6,35,34,39,38,47,1, 52,55,54,55,54,55,54,55,22,23,22,31,1,54,55,54, 55,52,53,52,39,38,39,38,39,7,6,7,6,7,21,23, 22,23,20,21,7,6,7,6,7,34,39,38,39,55,54,51, 50,23,22,23,63,1,54,55,54,53,52,39,38,39,38,39, 38,53,52,55,54,55,54,55,54,55,54,55,50,51,54,1, 131,18,91,1,23,38,17,16,34,12,1,1,2,2,34,2, 1,1,4,37,56,38,33,35,12,13,90,42,12,6,4,6, 19,87,44,55,4,3,7,6,3,2,1,13,42,23,14,40, 2,10,36,4,4,22,31,8,38,31,7,6,44,11,2,2, 13,79,4,46,18,3,19,1,9,11,19,18,11,45,4,7, 20,66,33,36,28,36,40,22,2,2,23,4,2,11,51,46, 57,26,21,11,9,67,5,2,2,27,24,13,12,1,12,8, 7,6,7,37,6,4,22,29,5,37,37,14,12,14,11,41, 3,2,47,2,206,12,128,27,1,7,13,32,3,4,25,31, 64,3,2,5,40,59,18,16,2,16,111,33,36,33,27,33, 26,77,89,44,55,4,13,9,3,1,16,3,3,34,1,3, 6,23,50,22,41,1,1,3,20,21,25,1,7,55,31,9, 9,58,50,3,27,10,1,44,1,15,4,3,1,10,36,111, 15,20,43,27,74,37,18,2,1,7,40,23,4,7,4,40, 57,3,2,45,78,48,43,1,11,5,8,78,5,22,20,1, 3,1,7,18,15,18,17,18,23,71,11,9,45,51,60,51, 9,47,46,12,10,5,5,1,2,0,0,2,0,58,255,239, 3,184,2,205,0,11,0,87,0,0,1,20,23,55,54,55, 54,55,7,6,7,6,37,52,55,51,50,23,22,21,20,7, 6,7,6,15,1,6,7,6,35,34,39,38,53,52,55,54, 55,50,21,20,7,6,35,34,39,6,21,20,23,50,51,50, 55,54,63,1,38,39,52,53,52,55,54,55,54,55,54,55, 54,51,50,31,1,20,7,6,7,6,7,6,7,54,55,54, 53,52,1,193,62,126,6,6,75,123,155,129,54,60,1,75, 14,2,6,2,2,36,43,81,32,30,18,66,126,98,82,96, 30,10,25,19,38,33,29,14,13,20,9,8,99,9,10,86, 112,47,37,17,87,7,53,63,134,15,149,73,49,1,2,6, 2,2,3,155,92,30,43,18,14,81,57,47,1,85,60,20, 196,9,8,105,83,51,49,77,84,85,11,1,7,22,13,60, 51,60,34,14,4,28,103,67,52,45,14,18,27,37,27,2, 34,20,13,6,15,15,16,52,6,111,45,53,24,26,78,5, 6,65,76,89,46,5,41,20,20,1,6,11,6,1,97,132, 42,98,41,26,15,69,57,64,8,0,0,2,0,16,255,117, 1,239,2,194,0,53,0,133,0,0,1,20,7,6,35,34, 39,38,47,1,38,39,38,35,34,7,6,7,6,21,22,23, 7,38,47,1,53,38,39,38,47,1,54,55,54,55,54,63, 1,22,23,22,31,1,22,23,50,55,54,55,47,1,55,22, 1,38,53,52,55,54,51,54,23,22,23,22,23,55,54,55, 54,53,52,39,38,39,38,39,38,53,52,55,54,55,54,63, 1,22,23,22,21,35,52,39,38,35,34,15,1,6,7,21, 22,23,22,23,22,23,22,21,20,21,6,7,6,7,6,35, 34,39,38,39,38,39,38,35,7,6,35,6,21,31,1,6, 1,239,39,23,29,13,13,38,50,41,1,1,41,32,18,13, 48,15,5,2,48,59,12,4,2,2,18,9,1,1,2,7, 26,89,43,47,34,15,11,25,31,22,31,32,6,6,24,4, 3,6,20,12,254,79,12,28,25,44,5,6,30,43,43,32, 29,60,20,6,1,6,56,45,12,24,9,25,61,5,5,26, 50,16,4,22,19,15,17,13,10,10,5,1,3,15,7,44, 28,9,6,4,70,21,23,45,46,13,7,26,37,14,8,27, 26,20,1,1,16,3,4,1,2,92,49,30,18,4,10,52, 39,1,1,31,4,17,59,17,17,64,39,71,6,10,19,1, 8,38,17,13,28,20,21,91,47,22,6,1,2,6,13,47, 32,39,1,2,6,30,16,15,9,26,253,23,28,28,43,26, 25,1,1,4,39,39,6,1,9,66,23,24,10,9,54,73, 60,21,45,40,25,21,51,14,1,1,1,6,59,17,18,39, 22,16,8,13,10,14,28,23,31,14,67,42,32,20,26,6, 6,86,89,27,19,38,1,6,39,14,7,23,3,1,6,19, 22,17,4,0,0,3,0,12,255,239,4,9,2,205,0,86, 0,98,0,106,0,0,1,50,21,22,21,20,15,1,6,35, 34,7,6,7,6,21,20,23,22,51,50,55,18,55,54,51, 50,23,22,21,20,7,6,15,1,6,7,22,51,50,55,54, 55,54,59,1,50,21,20,7,6,7,6,15,1,34,39,38, 39,6,43,1,34,53,52,55,54,55,50,59,1,50,23,54, 63,1,6,35,34,39,38,53,52,55,54,55,54,1,50,55, 38,35,34,7,6,21,20,23,50,1,34,3,54,55,54,53, 38,2,59,33,4,2,4,2,4,69,78,39,24,37,84,40, 51,15,30,205,110,33,27,81,7,1,46,98,238,100,61,100, 110,71,69,76,36,22,2,4,12,8,2,55,92,45,39,19, 83,106,6,9,102,82,16,132,11,33,92,7,11,6,69,87, 80,58,86,10,22,146,56,25,40,53,93,50,254,147,58,72, 64,62,68,25,5,76,8,3,18,38,231,193,85,47,6,2, 192,6,2,4,3,2,6,3,59,29,35,51,43,66,25,12, 2,1,24,59,18,65,6,6,54,66,140,35,140,85,61,27, 56,26,31,3,8,1,4,78,46,22,5,1,44,2,4,50, 38,10,16,46,2,20,58,82,122,1,61,28,36,47,57,76, 41,22,253,70,45,22,36,6,7,17,1,2,176,254,191,37, 120,67,46,48,0,4,0,76,0,0,3,210,2,217,0,3, 0,20,0,36,0,46,0,0,1,21,35,53,19,50,23,22, 21,20,15,1,6,35,34,39,38,53,52,55,54,23,34,7, 6,21,20,23,22,51,50,55,54,53,52,39,38,39,17,35, 1,17,35,17,51,1,17,3,180,238,117,74,45,32,60,28, 30,35,72,46,32,60,40,52,51,28,16,44,23,26,55,27, 14,44,23,208,105,254,135,88,101,1,125,1,29,72,72,1, 88,59,41,51,76,45,17,14,59,41,52,74,46,31,57,43, 23,28,51,29,15,46,22,27,52,28,14,157,253,39,2,79, 253,177,2,217,253,172,2,84,0,3,255,254,255,239,3,119, 2,205,0,11,0,151,0,156,0,0,1,50,23,54,55,54, 53,52,39,6,15,1,3,20,23,22,51,50,55,54,55,54, 59,1,50,21,20,7,6,7,6,35,34,39,38,39,38,53, 52,63,1,54,55,54,53,6,35,7,6,7,6,35,34,39, 38,53,52,55,54,55,50,21,20,7,6,35,34,39,6,21, 20,23,22,51,50,55,54,63,1,52,55,54,55,38,35,34, 7,6,7,6,21,23,22,51,50,55,54,63,1,54,61,1, 52,55,50,23,20,7,6,7,6,7,6,35,34,39,38,39, 38,53,52,55,54,55,54,51,50,23,55,54,51,50,23,20, 15,1,22,49,22,21,20,7,6,7,6,7,22,21,20,15, 1,6,19,35,15,1,54,2,100,25,20,81,54,43,24,106, 102,14,33,10,10,21,34,41,52,42,3,4,11,9,2,57, 81,35,25,18,16,52,19,6,15,81,46,5,1,34,34,74, 71,117,90,73,95,32,12,24,23,35,33,30,12,13,16,9, 5,83,14,16,88,118,29,27,91,12,143,142,60,123,109,114, 115,63,55,1,7,66,29,37,30,35,79,29,21,8,2,71, 3,12,39,67,44,38,71,20,3,1,1,56,64,128,125,113, 133,74,47,1,2,8,3,4,36,14,33,40,40,83,12,32, 12,34,75,27,55,34,4,1,24,1,109,10,31,70,56,54, 39,27,82,163,22,254,180,15,10,2,36,42,61,3,8,1, 4,79,50,23,9,11,38,13,14,22,20,113,63,25,4,7, 7,110,101,65,50,42,14,19,26,34,26,3,34,20,13,5, 8,13,9,46,9,1,134,33,37,128,11,4,190,102,44,60, 60,89,79,52,12,54,29,23,50,100,40,22,6,7,6,18, 50,101,4,18,55,36,23,54,8,9,6,11,63,78,90,67, 65,47,29,1,17,3,3,23,14,36,47,51,56,55,41,5, 12,14,27,43,48,105,40,1,26,4,1,2,0,2,0,16, 255,242,2,111,2,193,0,162,0,181,0,0,19,20,23,22, 51,55,54,63,1,53,38,39,38,39,38,39,38,61,2,52, 55,54,55,54,55,54,51,50,23,22,23,22,23,54,55,54, 55,54,55,54,51,50,23,22,31,1,22,23,20,7,6,15, 1,6,21,23,49,22,49,22,23,22,23,22,23,55,54,55, 54,49,23,6,7,6,7,38,39,38,53,39,38,47,1,6, 7,6,7,23,21,23,7,6,7,6,35,39,38,47,1,38, 35,34,7,6,15,1,39,38,39,52,55,54,53,52,39,22, 51,54,55,54,55,23,6,7,6,21,20,23,22,51,50,55, 54,55,54,63,1,38,39,38,39,38,35,34,7,6,21,22, 23,22,23,22,21,20,7,6,7,35,38,39,38,53,37,55, 54,53,47,1,38,39,38,35,34,7,6,7,23,22,21,23, 22,39,31,8,8,17,27,8,1,3,44,49,8,5,3,10, 1,10,56,4,4,32,42,32,30,11,10,44,22,25,39,50, 3,12,13,11,3,4,12,48,7,6,4,14,1,2,50,20, 7,7,27,8,7,7,11,7,8,10,4,4,18,19,3,99, 2,2,54,12,1,27,2,13,14,9,11,10,1,2,3,1, 11,75,38,45,26,6,5,61,16,15,11,10,3,3,10,2, 10,1,6,13,7,24,13,39,45,5,2,14,16,10,24,31, 18,22,10,10,37,22,12,2,2,1,6,15,67,34,42,62, 18,5,1,57,46,7,35,8,23,55,22,45,12,3,1,87, 97,9,1,14,7,15,12,17,35,25,9,2,3,1,9,14, 1,68,52,16,4,3,13,36,21,2,26,15,17,6,3,3, 12,24,13,64,32,16,79,42,2,3,21,12,5,6,29,49, 37,17,21,1,5,10,8,7,30,55,43,13,2,19,2,2, 30,12,5,2,32,214,74,19,17,11,7,1,4,3,6,24, 11,5,135,3,2,60,121,7,7,210,26,4,1,1,6,4, 6,22,1,61,81,159,64,31,3,2,2,35,7,4,1,2, 4,1,4,12,2,8,22,27,19,20,2,2,27,3,1,17, 7,9,22,34,35,24,14,3,5,56,38,50,117,63,59,158, 45,26,65,17,14,38,39,32,7,35,41,19,22,62,7,6, 59,14,14,110,56,6,5,9,71,25,12,11,31,10,10,12, 2,1,29,57,0,2,0,63,1,36,3,170,2,217,0,7, 0,20,0,0,1,17,35,17,35,53,33,21,1,35,3,17, 35,17,51,27,1,51,17,35,17,1,29,68,154,1,119,1, 54,70,121,67,94,132,131,91,67,2,162,254,130,1,126,55, 55,254,130,1,85,254,171,1,181,254,150,1,106,254,75,1, 85,0,255,255,0,42,255,255,2,192,2,181,16,6,2,50, 0,0,0,1,0,42,0,0,2,192,2,210,0,40,0,0, 37,50,55,54,53,52,39,38,39,53,33,21,35,22,23,22, 21,20,7,14,1,35,34,39,38,53,52,55,54,55,35,53, 33,21,6,7,6,21,20,23,22,1,112,131,68,46,47,46, 92,1,18,176,142,28,8,37,37,154,110,147,91,81,41,37, 91,174,1,8,127,34,11,76,63,76,106,73,99,94,80,76, 38,80,76,77,134,39,44,91,78,81,102,115,102,139,92,74, 68,56,76,80,59,135,43,48,132,81,68,0,0,1,0,16, 255,116,1,232,2,194,0,135,0,0,19,7,49,38,39,38, 53,52,55,54,55,54,55,23,22,23,22,23,22,21,20,7, 6,7,6,7,22,23,22,23,22,21,20,7,6,7,6,7, 39,34,47,1,38,35,34,7,54,53,52,39,38,39,38,39, 34,7,6,7,6,7,23,22,23,22,51,21,34,39,38,53, 52,55,54,55,54,51,50,51,23,51,55,54,55,21,20,23, 51,54,55,54,53,52,39,38,47,1,38,35,34,7,6,21, 35,52,55,54,55,54,55,53,38,47,1,54,55,51,22,51, 50,55,54,55,54,55,54,53,52,39,38,35,34,7,6,15, 1,22,69,30,5,11,6,10,29,84,46,54,42,95,61,31, 12,7,16,33,77,16,32,25,31,71,22,7,22,32,71,17, 18,30,3,3,65,9,9,13,17,14,11,2,2,11,18,12, 13,5,4,36,1,3,13,34,5,5,53,22,7,2,11,44, 20,21,3,4,59,1,30,11,19,27,16,30,22,23,14,27, 75,13,38,35,45,20,18,61,74,12,12,26,14,42,35,4, 1,16,1,57,82,41,35,69,24,2,1,5,55,51,70,83, 59,40,8,2,1,1,145,10,2,32,23,26,33,34,91,45, 25,3,1,12,72,37,46,25,27,42,35,73,35,7,10,6, 22,48,85,27,26,47,39,61,21,5,2,1,1,28,3,7, 30,27,23,15,3,2,11,1,6,2,2,22,41,21,38,6, 1,33,55,20,22,13,11,45,20,8,11,3,2,6,83,51, 3,4,29,30,46,36,44,87,42,7,16,30,26,54,67,45, 7,5,12,3,1,13,23,6,2,16,50,15,29,65,4,5, 18,26,65,49,44,54,37,48,32,16,255,255,0,79,0,0, 2,146,2,217,16,6,0,46,0,0,255,255,0,17,0,0, 2,141,3,185,16,6,0,135,0,0,0,3,0,34,255,242, 3,160,2,196,0,141,0,153,0,163,0,0,19,20,51,50, 55,54,55,54,55,54,61,1,52,55,50,21,22,21,20,7, 6,7,6,35,34,39,38,39,38,53,52,55,54,55,54,51, 50,23,55,54,51,50,23,20,7,6,7,22,21,20,7,6, 7,22,21,20,7,6,7,6,35,34,39,38,53,52,55,54, 55,54,51,50,23,20,15,1,6,35,34,7,6,7,6,21, 20,23,22,51,50,55,54,55,54,53,52,39,6,35,34,39, 7,6,7,6,35,34,39,38,53,52,55,54,55,50,21,20, 7,6,35,34,39,6,21,20,23,22,51,50,55,54,55,54, 55,54,55,38,35,34,7,6,7,6,5,50,23,54,55,54, 53,52,39,6,7,54,7,48,7,22,51,50,55,38,35,34, 189,75,40,46,39,32,72,9,2,14,9,2,56,40,79,50, 44,75,17,2,1,2,55,64,129,120,111,134,73,52,1,3, 8,3,4,21,16,53,109,15,15,56,86,79,87,15,15,63, 14,2,33,32,77,32,28,6,2,1,4,3,4,42,43,43, 18,30,46,7,8,41,51,42,46,51,37,68,53,29,17,70, 72,118,90,73,98,30,9,24,19,38,33,29,14,13,20,9, 8,93,13,14,87,116,31,29,137,80,82,85,63,121,106,115, 114,60,54,1,239,39,30,45,41,37,27,77,128,21,12,20, 2,9,36,47,23,24,16,1,100,65,28,25,46,102,42,9, 8,8,6,5,8,18,9,77,78,56,34,21,57,6,6,12, 7,60,78,90,64,59,42,33,1,16,3,4,14,14,44,57, 86,88,12,10,34,62,83,84,78,16,3,47,6,13,40,47, 46,21,9,8,4,1,6,3,18,20,26,42,32,39,7,1, 37,31,63,71,54,43,21,37,6,98,102,66,51,45,14,17, 28,34,27,2,34,20,13,6,15,18,11,50,7,1,131,35, 41,192,88,89,63,39,58,57,86,76,34,9,35,59,53,45, 40,27,79,174,3,28,27,1,29,5,0,2,0,16,255,243, 2,88,2,194,0,123,0,156,0,0,55,20,15,1,38,39, 38,39,52,55,6,7,23,22,23,22,51,50,55,54,55,53, 38,39,38,53,38,55,54,55,54,51,50,23,22,31,2,51, 54,49,54,55,22,23,55,23,7,39,7,23,21,23,6,7, 6,35,34,39,63,1,54,53,52,39,6,7,6,21,20,23, 22,31,1,22,23,7,6,7,6,7,23,22,55,50,55,54, 55,54,55,23,22,23,21,6,15,1,6,7,6,35,34,47, 1,38,35,34,7,6,35,34,39,38,39,38,53,52,55,54, 63,1,22,23,22,63,2,54,53,52,53,38,39,38,39,38, 53,52,55,54,55,54,55,38,39,38,39,34,7,6,7,6, 7,23,22,23,22,140,26,15,13,10,9,1,6,32,1,4, 7,16,29,41,26,24,13,39,35,32,93,1,13,31,94,34, 38,48,37,17,11,12,2,10,3,18,104,14,14,17,6,115, 33,28,7,2,3,15,5,2,8,6,1,8,4,5,29,16, 14,8,5,36,19,6,2,1,11,62,18,3,33,46,38,25, 20,38,44,12,3,7,3,2,1,21,86,2,38,4,8,76, 77,12,15,2,2,13,56,56,19,19,46,18,7,1,9,41, 23,39,8,2,161,18,1,21,3,35,10,6,13,8,18,34, 32,25,16,16,25,31,22,21,21,17,59,7,1,11,96,18, 93,29,6,1,3,11,11,14,10,11,6,30,19,20,12,24, 11,6,30,1,23,38,107,156,57,63,144,47,16,25,13,13, 14,1,1,4,12,54,48,4,21,33,118,6,26,1,32,29, 27,7,9,13,21,17,16,18,18,13,27,22,28,22,25,17, 72,47,20,19,32,67,62,18,4,15,17,1,7,14,44,12, 1,3,2,4,7,5,20,89,1,39,1,40,6,9,10,45, 6,15,39,15,17,7,7,40,10,1,3,34,7,26,28,1, 39,34,3,4,41,86,27,16,39,34,27,23,42,28,26,5, 21,10,16,1,8,9,15,56,126,60,155,92,17,0,0,2, 0,45,255,248,2,199,2,196,0,120,0,130,0,0,1,52, 55,54,51,50,21,20,15,1,6,35,34,7,6,21,20,51, 50,55,54,55,54,53,52,39,34,35,34,7,6,7,6,21, 20,23,54,51,50,31,1,21,20,7,6,35,34,39,6,7, 6,7,6,21,20,23,22,51,50,55,54,55,54,53,52,39, 34,35,34,7,6,7,20,7,35,34,53,54,55,54,51,50, 23,22,21,20,7,6,7,6,35,34,39,38,53,52,55,54, 55,54,55,38,53,52,55,54,55,54,51,50,31,1,22,21, 20,7,6,35,34,39,38,7,50,55,52,39,38,35,34,7, 22,1,236,51,42,38,9,2,4,2,5,38,38,25,45,36, 42,7,5,28,114,5,5,43,48,40,41,56,5,30,21,53, 20,5,40,8,8,63,37,27,20,56,38,62,92,22,25,53, 56,52,36,27,84,6,7,44,43,31,7,12,4,7,9,55, 45,43,103,30,10,24,45,91,62,56,132,44,18,51,55,106, 16,15,16,93,84,92,14,13,97,33,10,3,54,49,49,51, 13,3,82,18,7,6,14,34,16,15,20,1,243,47,46,38, 8,3,2,6,3,51,34,25,32,48,9,7,38,34,70,4, 33,29,59,80,45,14,10,5,19,10,2,25,8,1,28,11, 11,34,57,89,60,76,18,4,33,31,53,36,31,52,5,58, 43,47,5,5,9,69,57,45,52,17,21,32,34,63,39,27, 72,30,39,67,71,75,39,6,4,20,35,88,82,73,13,2, 53,21,12,13,57,56,52,36,9,121,10,2,2,6,3,17, 0,2,255,187,255,44,2,222,2,226,0,33,0,43,0,0, 1,21,35,3,6,7,6,7,34,39,55,22,51,50,55,54, 55,19,35,53,51,55,54,55,54,51,50,23,7,38,35,34, 15,2,3,35,19,33,7,33,7,33,7,1,131,126,75,19, 46,58,77,36,19,17,25,26,69,24,1,2,78,113,125,22, 16,45,51,64,35,44,30,32,20,71,23,12,19,71,94,155, 1,233,17,254,117,50,1,91,17,1,206,70,254,115,103,47, 55,2,10,84,16,97,8,8,1,157,70,104,80,44,48,19, 79,18,126,70,130,254,180,2,217,82,233,82,0,1,0,90, 0,0,2,67,2,217,0,9,0,0,1,17,51,17,33,53, 33,53,33,53,1,230,93,254,23,1,140,254,164,1,141,1, 76,253,39,82,233,82,0,1,0,29,255,220,4,191,2,207, 0,126,0,0,55,51,54,55,54,55,54,55,54,55,54,55, 54,55,54,51,23,22,49,23,20,15,1,1,6,7,6,21, 20,51,50,1,54,63,2,54,51,23,22,21,20,15,1,6, 7,6,7,6,7,6,21,20,51,50,55,54,55,54,59,1, 50,23,20,7,6,7,6,35,34,39,52,39,38,53,52,55, 54,55,54,55,6,7,2,7,6,35,34,61,1,54,55,54, 55,54,55,6,7,6,15,1,6,7,6,35,34,39,38,53, 52,55,54,51,54,51,50,23,20,7,6,35,34,39,21,20, 23,22,124,9,75,86,17,102,31,25,74,167,165,60,4,5, 2,3,4,12,1,2,117,254,237,52,23,12,3,15,1,15, 67,154,29,169,2,4,11,5,1,118,41,97,57,44,54,13, 4,17,35,55,56,42,1,6,11,6,2,2,43,65,64,44, 58,12,1,1,45,36,122,17,14,117,71,244,45,6,3,45, 7,49,33,162,44,30,161,66,19,16,145,119,93,9,10,61, 20,7,18,7,2,16,31,34,1,31,14,13,8,6,3,17, 14,4,94,18,125,37,29,83,125,124,54,5,4,3,1,8, 4,1,4,146,254,127,72,56,28,9,5,1,64,79,135,31, 151,2,3,3,5,4,1,147,58,166,98,62,77,55,13,12, 20,41,42,59,4,8,3,2,62,46,47,56,5,4,5,11, 64,63,51,192,27,22,105,87,254,224,25,3,57,14,74,71, 47,208,57,41,120,67,19,18,172,133,11,1,33,11,13,22, 25,7,21,36,20,14,7,3,4,10,5,17,255,255,0,61, 255,236,3,91,2,197,16,39,0,117,2,25,254,234,16,39, 6,230,1,109,0,0,16,6,0,123,0,0,255,255,0,20, 255,236,3,91,2,197,16,39,0,117,2,25,254,234,16,38, 0,116,1,0,16,7,6,230,1,109,0,0,255,255,0,61, 255,236,3,95,2,197,16,39,6,238,2,25,254,234,16,38, 0,123,0,0,16,7,6,230,1,109,0,0,255,255,0,19, 255,236,3,95,2,197,16,39,6,238,2,25,254,234,16,38, 0,116,0,0,16,7,6,230,1,109,0,0,255,255,0,16, 255,236,3,95,2,197,16,39,6,238,2,25,254,234,16,38, 0,117,0,0,16,7,6,230,1,109,0,0,255,255,0,20, 255,236,3,95,2,197,16,39,6,238,2,25,254,234,16,38, 6,237,0,0,16,7,6,230,1,109,0,0,255,255,0,61, 255,236,3,88,2,197,16,39,6,239,2,25,254,234,16,38, 0,123,0,0,16,7,6,230,1,109,0,0,255,255,0,17, 255,236,3,88,2,197,16,39,6,239,2,25,254,234,16,38, 6,238,0,0,16,7,6,230,1,109,0,0,255,255,0,61, 255,236,3,98,2,197,16,39,6,241,2,25,254,234,16,38, 0,123,0,0,16,7,6,230,1,109,0,0,255,255,0,16, 255,236,3,98,2,197,16,39,6,241,2,25,254,234,16,38, 0,117,0,0,16,7,6,230,1,109,0,0,255,255,0,17, 255,236,3,98,2,197,16,39,6,241,2,25,254,234,16,38, 6,238,0,0,16,7,6,230,1,109,0,0,255,255,0,22, 255,236,3,98,2,197,16,38,6,240,0,0,16,39,6,241, 2,25,254,234,16,7,6,230,1,109,0,0,255,255,0,61, 255,236,2,189,2,197,16,38,0,123,0,0,16,7,6,230, 1,109,0,0,255,255,0,100,0,0,0,194,2,217,16,6, 0,44,0,0,255,255,0,100,0,0,1,216,2,217,16,39, 0,44,1,22,0,0,16,6,0,44,0,0,255,255,0,100, 0,0,2,238,2,217,16,39,0,44,2,44,0,0,16,39, 0,44,1,22,0,0,16,6,0,44,0,0,255,255,0,100, 0,0,3,155,2,217,16,39,0,57,1,22,0,0,16,6, 0,44,0,0,255,255,0,30,0,0,2,133,2,217,16,6, 0,57,0,0,255,255,0,30,0,0,3,93,2,217,16,39, 0,44,2,155,0,0,16,6,0,57,0,0,255,255,0,30, 0,0,4,115,2,217,16,39,0,44,3,177,0,0,16,39, 0,44,2,155,0,0,16,6,0,57,0,0,255,255,0,30, 0,0,5,137,2,217,16,39,0,44,4,199,0,0,16,39, 0,44,3,177,0,0,16,39,0,44,2,155,0,0,16,6, 0,57,0,0,255,255,0,100,0,0,3,159,2,217,16,39, 0,59,1,22,0,0,16,6,0,44,0,0,255,255,0,22, 0,0,2,137,2,217,16,6,0,59,0,0,255,255,0,22, 0,0,3,93,2,217,16,39,0,44,2,155,0,0,16,6, 0,59,0,0,255,255,0,22,0,0,4,115,2,217,16,39, 0,44,3,177,0,0,16,39,0,44,2,155,0,0,16,6, 0,59,0,0,255,255,0,80,0,0,2,21,2,217,16,6, 0,47,0,0,255,255,0,48,255,233,2,165,2,229,16,6, 0,38,0,0,255,255,0,89,0,0,2,155,2,217,16,6, 0,39,0,0,255,255,0,75,0,0,2,249,2,217,16,6, 0,48,0,0,255,255,0,66,0,0,0,150,2,217,16,6, 0,76,0,0,255,255,0,66,0,0,1,116,2,217,16,39, 0,76,0,222,0,0,16,6,0,76,0,0,255,255,0,66, 0,0,2,82,2,217,16,39,0,76,1,188,0,0,16,39, 0,76,0,222,0,0,16,6,0,76,0,0,255,255,0,66, 0,0,2,196,2,217,16,39,0,89,0,222,0,0,16,6, 0,76,0,0,255,255,0,10,0,0,1,230,2,12,16,6, 0,89,0,0,255,255,0,10,0,0,2,138,2,217,16,39, 0,76,1,244,0,0,16,6,0,89,0,0,255,255,0,10, 0,0,3,104,2,217,16,39,0,76,2,210,0,0,16,39, 0,76,1,244,0,0,16,6,0,89,0,0,255,255,0,10, 0,0,4,70,2,217,16,39,0,76,3,176,0,0,16,39, 0,76,2,210,0,0,16,39,0,76,1,244,0,0,16,6, 0,89,0,0,255,255,0,66,0,0,2,183,2,217,16,39, 0,91,0,222,0,0,16,6,0,76,0,0,255,255,0,17, 0,0,1,217,2,12,16,6,0,91,0,0,255,255,0,17, 0,0,2,138,2,217,16,39,0,76,1,244,0,0,16,6, 0,91,0,0,255,255,0,17,0,0,3,104,2,217,16,39, 0,76,2,210,0,0,16,39,0,76,1,244,0,0,16,6, 0,91,0,0,255,255,0,68,0,0,0,152,2,217,16,6, 0,79,0,0,255,255,0,31,255,233,1,221,2,27,16,6, 0,70,0,0,255,255,0,26,255,233,1,239,2,217,16,6, 0,71,0,0,255,255,0,70,0,0,2,250,2,27,16,6, 0,80,0,0,0,1,0,32,255,241,3,174,1,255,0,12, 0,0,1,21,33,22,23,7,38,39,54,55,23,6,7,3, 174,252,229,50,121,35,100,151,151,100,35,121,50,1,20,56, 49,151,35,119,144,144,119,35,151,49,0,1,0,45,0,0, 2,59,3,142,0,12,0,0,33,35,17,6,7,39,54,55, 22,23,7,38,39,1,80,56,49,151,35,119,144,144,119,35, 151,49,3,27,50,121,35,100,151,151,100,35,121,50,0,1, 0,49,255,241,3,191,1,255,0,12,0,0,55,53,33,38, 39,55,22,23,6,7,39,54,55,49,3,27,50,121,35,100, 151,151,100,35,121,50,220,56,49,151,35,119,144,144,119,35, 151,49,0,1,0,45,255,234,2,59,3,120,0,12,0,0, 1,51,17,54,55,23,6,7,38,39,55,22,23,1,24,56, 49,151,35,119,144,144,119,35,151,49,3,120,252,229,50,121, 35,100,151,151,100,35,121,50,0,1,0,24,255,241,4,0, 1,255,0,35,0,0,19,33,38,39,38,39,55,22,23,22, 23,6,15,1,39,54,55,54,55,33,22,31,1,7,38,39, 38,39,54,55,54,55,23,6,7,6,139,3,2,88,46,14, 23,37,112,68,32,37,108,105,36,37,69,58,16,28,252,254, 88,46,37,37,112,68,32,37,108,105,6,30,37,69,58,16, 1,18,92,62,19,32,32,134,65,31,33,96,125,42,32,96, 63,17,29,92,62,51,32,134,65,31,33,96,125,6,36,32, 96,63,17,0,0,1,1,5,255,234,3,19,3,142,0,36, 0,0,37,17,6,15,1,39,54,55,54,55,22,23,22,23, 7,38,39,38,39,17,54,55,54,55,23,6,7,6,7,38, 39,38,39,55,22,23,22,1,242,92,62,51,32,134,65,31, 33,96,125,6,36,32,96,63,17,29,92,62,19,32,32,134, 65,31,33,96,125,6,36,32,96,63,17,93,2,190,88,46, 37,37,112,68,32,37,108,105,6,30,37,69,58,16,28,253, 66,88,46,14,23,37,112,68,32,37,108,105,6,30,37,69, 58,16,0,1,0,15,255,240,2,90,2,117,0,8,0,0, 1,51,17,33,21,39,55,21,33,2,35,55,254,91,166,166, 1,110,2,117,253,207,84,112,111,84,0,1,0,30,255,241, 3,171,2,1,0,19,0,0,1,21,33,7,23,33,21,33, 23,7,38,39,38,39,54,55,54,55,23,7,3,171,253,24, 81,81,2,232,253,72,77,41,92,94,25,38,129,69,22,29, 41,77,1,126,53,80,80,53,98,33,114,90,24,36,122,80, 26,36,33,98,0,1,0,39,0,2,2,55,3,143,0,19, 0,0,19,39,54,55,54,55,22,23,22,23,7,39,17,35, 17,39,7,17,35,17,72,33,114,90,24,36,122,80,26,36, 33,98,53,80,80,53,2,109,41,92,94,25,38,129,69,22, 29,41,77,253,72,2,232,81,81,253,24,2,184,0,0,1, 0,45,255,236,3,186,1,252,0,19,0,0,5,39,55,33, 53,33,55,39,33,53,33,39,55,22,23,22,23,6,7,6, 2,193,41,77,253,72,2,232,81,81,253,24,2,184,77,41, 92,94,25,38,129,69,22,20,33,98,53,80,80,53,98,33, 114,90,24,36,122,80,26,0,0,1,0,44,255,237,2,60, 3,122,0,19,0,0,1,23,6,7,6,7,38,39,38,39, 55,23,17,51,17,23,55,17,51,17,2,27,33,114,90,24, 36,122,80,26,36,33,98,53,80,80,53,1,15,41,92,94, 25,38,129,69,22,29,41,77,2,184,253,24,81,81,2,232, 253,72,0,2,0,27,255,236,3,255,1,254,0,25,0,31, 0,0,19,33,39,55,22,23,22,23,6,7,6,7,39,55, 33,23,7,38,39,38,39,54,55,54,55,23,3,33,55,39, 33,7,241,2,56,76,40,110,68,30,42,111,82,19,38,40, 76,253,200,76,40,110,68,30,42,111,82,19,38,40,120,2, 145,84,84,253,111,84,1,125,95,34,132,65,29,39,101,96, 23,45,34,95,95,34,132,65,29,39,101,96,23,45,34,254, 195,86,86,86,255,255,0,17,0,0,2,141,2,217,16,71, 0,36,0,0,2,217,64,0,192,0,0,3,0,36,255,233, 1,254,2,229,0,19,0,35,0,51,0,0,1,22,31,1, 35,52,39,38,39,38,39,38,35,34,7,39,54,51,22,23, 7,50,23,22,21,20,7,6,35,34,39,38,53,52,55,54, 23,34,7,6,21,20,23,22,51,50,55,54,53,52,39,38, 1,211,37,4,2,80,16,7,14,40,59,17,19,80,46,60, 69,117,137,65,188,152,57,29,102,56,79,144,60,33,105,55, 77,93,38,19,78,31,41,90,39,21,82,30,2,61,90,119, 110,160,63,30,36,95,18,5,51,54,77,1,149,52,129,65, 91,167,71,39,119,67,95,174,70,37,77,92,48,64,137,48, 19,88,47,66,145,46,16,0,0,1,0,90,0,0,2,84, 2,217,0,11,0,0,1,33,53,33,53,33,53,33,17,33, 53,33,1,247,254,99,1,157,254,100,1,249,254,6,1,157, 1,76,82,233,82,253,39,82,0,3,0,43,255,213,1,251, 2,217,0,3,0,21,0,31,0,0,1,51,1,35,19,50, 19,22,21,16,7,6,35,34,39,38,53,52,55,54,55,50, 23,34,17,16,51,50,55,54,53,16,1,117,59,254,255,59, 159,218,13,1,138,42,52,176,43,13,69,54,95,7,7,142, 140,118,21,5,2,217,252,252,2,240,254,183,21,22,254,241, 69,20,216,66,84,195,93,71,7,78,254,223,254,220,192,46, 57,1,30,0,0,2,0,10,0,0,2,189,2,217,0,3, 0,6,0,0,51,1,51,9,1,3,33,10,1,38,100,1, 41,254,166,212,1,167,2,217,253,39,2,104,253,234,255,255, 0,10,0,0,2,189,2,217,16,71,7,82,0,0,2,217, 64,0,192,0,0,1,0,45,0,0,1,249,1,212,0,23, 0,0,1,21,33,22,23,22,59,1,21,35,34,39,38,52, 55,54,59,1,21,35,34,7,6,7,1,249,254,108,14,40, 49,64,237,237,113,74,36,36,74,113,237,237,64,49,40,14, 1,5,54,70,37,46,54,106,50,156,50,106,54,46,37,70, 0,3,0,44,255,198,1,249,2,43,0,31,0,38,0,42, 0,0,1,21,35,7,22,59,1,21,35,34,39,7,39,55, 38,39,38,53,52,55,54,55,54,59,1,55,23,7,51,21, 35,7,55,35,34,7,6,7,51,7,55,35,22,1,249,216, 80,18,33,245,255,41,26,45,44,44,54,19,20,22,50,97, 26,21,116,49,46,35,68,99,87,29,93,58,52,42,3,159, 93,64,128,12,1,5,54,141,12,54,19,77,25,78,51,42, 45,52,56,42,97,30,8,87,25,62,54,153,155,59,47,49, 167,113,71,0,0,1,0,105,255,61,2,205,2,217,0,7, 0,0,19,33,17,35,17,33,17,35,105,2,100,118,254,136, 118,2,217,252,100,3,55,252,201,0,255,255,0,105,255,61, 2,205,2,217,16,71,7,86,0,0,2,22,64,0,192,0, 0,1,0,41,255,61,2,180,2,217,0,11,0,0,19,33, 21,33,9,1,33,21,33,53,9,1,56,2,111,254,37,1, 77,254,168,1,243,253,117,1,103,254,168,2,217,96,254,158, 254,133,95,74,1,141,1,109,0,1,0,40,0,197,2,32, 1,11,0,3,0,0,1,21,33,53,2,32,254,8,1,11, 70,70,0,2,0,50,255,245,2,22,2,111,0,11,0,15, 0,0,37,35,21,35,53,35,53,51,53,51,21,51,17,33, 53,33,2,22,207,70,207,207,70,207,254,28,1,228,196,207, 207,70,207,207,1,31,70,0,0,1,0,64,0,134,1,172, 2,40,0,114,0,0,55,38,39,53,54,55,54,53,52,39, 7,6,15,1,6,35,6,39,38,53,52,63,1,54,55,39, 38,39,38,39,38,39,38,39,38,53,52,55,54,51,50,23, 22,23,22,23,22,23,63,1,38,39,38,39,38,53,52,55, 23,22,21,15,1,6,49,6,7,31,1,54,55,54,55,54, 55,54,51,50,23,22,21,7,6,7,6,15,2,6,21,23, 22,31,1,22,21,7,21,6,39,34,47,2,38,47,1,6, 21,20,23,22,23,7,6,246,32,5,1,16,12,5,10,45, 38,13,11,15,24,9,3,27,96,35,1,3,3,6,45,41, 13,11,21,11,4,6,7,20,21,18,5,19,20,36,10,4, 4,2,2,12,4,3,7,36,19,17,4,3,16,3,2,2, 4,4,10,38,24,10,8,18,21,20,7,6,3,7,17,5, 4,62,48,12,3,8,25,96,27,3,9,24,15,11,43,29, 12,12,10,5,19,8,2,1,8,134,5,32,15,14,39,30, 36,17,2,3,26,48,15,9,1,16,7,9,30,10,28,10, 11,7,3,3,21,6,2,3,6,20,8,9,10,10,12,14, 4,26,27,19,5,1,3,15,44,32,11,9,23,13,33,1, 3,7,23,28,9,51,15,30,15,3,1,5,20,34,16,6, 14,12,10,10,15,15,9,3,1,12,20,6,6,7,8,7, 28,8,31,16,1,16,1,9,49,25,8,7,3,2,17,38, 44,20,17,21,26,0,0,1,0,7,255,220,2,0,3,145, 0,7,0,0,1,23,11,1,7,39,55,19,1,220,36,152, 241,94,18,148,193,3,145,5,252,80,1,241,46,33,73,254, 116,0,0,2,0,26,0,123,2,127,1,149,0,55,0,74, 0,0,1,7,38,35,34,7,6,7,6,7,22,23,22,23, 22,51,50,63,1,23,6,35,34,39,38,47,1,6,7,6, 7,6,35,34,39,38,39,52,55,54,55,54,51,50,23,22, 23,22,23,54,55,54,55,54,51,50,5,38,35,7,6,7, 6,7,23,22,23,22,51,50,55,54,55,39,38,2,122,28, 38,24,20,24,37,45,22,6,13,55,9,8,42,31,18,17, 24,32,37,55,46,45,44,39,18,46,66,8,6,32,31,73, 42,24,1,1,6,48,37,47,31,33,38,40,2,47,79,35, 10,11,28,26,42,254,141,28,23,26,44,16,2,1,2,10, 43,16,18,20,22,47,69,48,31,1,116,38,20,8,13,44, 20,6,23,36,6,4,23,8,14,34,36,27,26,38,18,56, 33,4,2,12,59,35,42,7,6,60,39,29,12,14,35,1, 41,69,17,5,4,10,63,11,3,13,50,8,7,25,48,17, 7,8,16,66,42,24,0,3,0,25,0,124,2,177,1,149, 0,39,0,60,0,80,0,0,1,54,55,54,55,54,51,50, 23,22,23,7,6,7,6,35,34,39,38,47,1,7,6,7, 39,38,39,38,53,52,55,54,55,54,51,50,23,22,23,22, 7,38,39,38,39,38,35,34,15,1,6,21,22,23,22,51, 50,55,54,55,54,55,22,23,22,31,1,54,55,54,55,39, 38,39,38,35,34,7,6,7,6,1,101,71,33,11,14,30, 31,46,37,52,6,1,8,51,34,40,7,6,86,80,18,48, 63,73,31,64,34,19,1,7,58,35,41,31,30,46,53,10, 13,77,36,3,3,20,19,30,23,16,21,2,47,21,24,11, 11,47,38,10,103,60,21,20,31,27,51,26,11,1,3,14, 43,14,16,19,20,38,71,5,1,41,64,18,6,6,13,27, 37,61,31,62,37,25,1,8,80,18,46,53,7,1,9,62, 33,36,7,6,66,37,22,13,21,46,9,51,64,15,1,1, 7,18,16,27,32,51,24,12,3,11,33,9,36,58,12,12, 7,2,2,42,19,23,24,48,16,5,7,14,59,4,0,1, 0,26,0,0,2,226,2,161,0,5,0,0,1,23,1,33, 21,33,2,185,41,253,190,2,32,253,90,2,161,37,253,187, 55,0,0,1,0,23,0,0,2,71,1,198,0,5,0,0, 33,35,11,1,35,1,2,71,65,215,215,65,1,24,1,94, 254,162,1,198,0,1,0,30,0,0,2,66,1,221,0,5, 0,0,19,55,27,1,23,1,30,44,230,230,44,254,238,1, 192,29,254,137,1,119,29,254,64,0,0,1,0,40,0,0, 2,220,1,253,0,25,0,0,33,35,53,52,39,38,35,34, 7,6,29,1,35,53,52,55,54,55,54,51,50,23,22,23, 22,21,2,220,55,91,87,113,113,87,91,55,93,95,136,11, 11,138,102,97,8,1,190,109,79,76,76,79,109,190,180,125, 96,99,8,1,95,91,123,10,10,0,0,1,0,40,255,239, 2,220,1,236,0,25,0,0,1,51,21,20,7,6,7,6, 35,34,39,38,39,38,61,1,51,21,20,23,22,51,50,55, 54,53,2,165,55,93,65,90,48,50,138,102,97,8,1,55, 91,87,113,113,87,91,1,236,180,125,96,68,26,14,95,91, 123,10,10,180,190,109,79,76,76,79,109,0,0,1,0,100, 255,10,1,198,2,255,0,27,0,0,23,17,52,55,54,51, 50,23,7,38,35,34,7,6,7,17,20,7,6,7,6,35, 34,39,55,22,51,50,230,39,52,81,19,33,15,29,13,8, 4,68,2,37,37,68,25,25,13,10,2,19,15,94,33,2, 83,79,55,71,7,83,9,1,13,128,253,222,104,56,56,20, 8,3,86,8,0,2,0,100,255,10,2,182,2,255,0,27, 0,55,0,0,5,17,52,55,54,51,50,23,7,38,35,34, 7,6,7,17,20,7,6,7,6,35,34,39,55,22,51,50, 39,17,52,55,54,51,50,23,7,38,35,34,7,6,7,17, 20,7,6,7,6,35,34,39,55,22,51,50,1,214,39,52, 81,19,33,15,29,13,8,4,68,2,37,37,68,25,25,13, 10,2,19,15,94,240,39,52,81,19,33,15,29,13,8,4, 68,2,37,37,68,25,25,13,10,2,19,15,94,33,2,83, 79,55,71,7,83,9,1,13,128,253,222,104,56,56,20,8, 3,86,8,132,2,83,79,55,71,7,83,9,1,13,128,253, 222,104,56,56,20,8,3,86,8,0,0,3,0,100,255,10, 3,86,2,255,0,27,0,55,0,83,0,0,5,17,52,55, 54,51,50,23,7,38,35,34,7,6,7,17,20,7,6,7, 6,35,34,39,55,22,51,50,39,17,52,55,54,51,50,23, 7,38,35,34,7,6,7,17,20,7,6,7,6,35,34,39, 55,22,51,50,39,17,52,55,54,51,50,23,7,38,35,34, 7,6,7,17,20,7,6,7,6,35,34,39,55,22,51,50, 2,118,39,52,81,19,33,15,29,13,8,4,68,2,37,37, 68,25,25,13,10,2,19,15,94,200,39,52,81,19,33,15, 29,13,8,4,68,2,37,37,68,25,25,13,10,2,19,15, 94,200,39,52,81,19,33,15,29,13,8,4,68,2,37,37, 68,25,25,13,10,2,19,15,94,33,2,83,79,55,71,7, 83,9,1,13,128,253,222,104,56,56,20,8,3,86,8,132, 2,83,79,55,71,7,83,9,1,13,128,253,222,104,56,56, 20,8,3,86,8,132,2,83,79,55,71,7,83,9,1,13, 128,253,222,104,56,56,20,8,3,86,8,0,0,1,0,100, 255,10,1,198,2,255,0,27,0,0,23,17,52,55,54,51, 50,23,7,38,35,34,7,6,7,17,20,7,6,7,6,35, 34,39,55,22,51,50,230,39,52,81,19,33,15,29,13,8, 4,68,2,37,37,68,25,25,13,10,2,19,15,94,33,2, 83,79,55,71,7,83,9,1,13,128,253,222,104,56,56,20, 8,3,86,8,0,3,0,163,0,0,2,189,1,222,0,15, 0,31,0,47,0,0,55,52,55,54,51,50,23,22,21,20, 7,6,35,34,39,38,37,52,55,54,51,50,23,22,21,20, 7,6,35,34,39,38,3,52,55,54,51,50,23,22,21,20, 7,6,35,34,39,38,163,36,13,16,40,18,7,36,13,16, 40,18,7,1,152,36,13,16,40,18,7,36,13,16,39,18, 8,204,36,13,16,40,18,7,36,13,16,40,18,7,65,40, 18,7,36,13,16,40,18,7,36,13,16,40,18,7,36,13, 16,40,18,7,34,15,1,108,40,18,7,36,13,16,40,18, 7,36,13,0,0,1,0,17,0,203,2,17,1,51,0,32, 0,0,1,23,7,6,7,6,35,34,47,1,38,35,34,7, 6,7,39,54,55,54,55,23,22,23,22,23,22,23,50,55, 54,55,54,1,236,37,20,17,26,34,37,44,75,10,66,41, 24,20,23,34,41,27,4,38,66,37,30,79,11,8,40,32, 26,21,26,27,2,1,51,24,29,20,12,16,26,3,23,8, 10,37,25,33,3,37,5,1,4,28,4,3,12,1,8,10, 33,2,0,1,0,75,1,12,1,252,1,182,0,27,0,0, 1,51,21,20,7,6,35,34,47,1,38,35,34,7,6,7, 35,54,55,54,51,50,31,1,22,51,50,55,1,199,53,57, 21,27,39,42,98,23,20,29,16,5,3,53,7,84,8,9, 27,27,117,28,22,44,6,1,155,16,85,30,12,26,63,14, 35,14,29,131,13,1,16,69,17,49,0,2,0,17,255,231, 2,17,1,230,0,32,0,36,0,0,1,23,7,6,7,6, 35,34,47,1,38,35,34,7,6,7,39,54,55,54,55,23, 22,23,22,23,22,23,50,55,54,55,54,39,23,1,39,1, 236,37,20,17,26,34,37,44,75,10,66,41,24,20,23,34, 41,27,4,38,66,37,30,79,11,8,40,32,26,21,26,27, 2,123,50,254,242,51,1,51,24,29,20,12,16,26,3,23, 8,10,37,25,33,3,37,5,1,4,28,4,3,12,1,8, 10,33,2,180,28,254,29,29,0,1,0,95,0,34,1,232, 1,171,0,11,0,0,1,23,7,23,7,39,7,39,55,39, 55,23,1,182,49,146,147,50,147,146,50,147,146,49,146,1, 171,50,146,147,50,147,146,49,147,146,49,145,0,3,0,50, 0,0,2,22,1,216,0,3,0,7,0,11,0,0,1,21, 33,53,5,21,35,53,19,21,35,53,2,22,254,28,1,38, 104,104,104,1,15,70,70,167,104,104,1,112,104,104,0,1, 0,53,255,204,2,71,2,54,0,47,0,0,37,6,35,34, 39,7,35,55,38,35,34,7,39,54,51,50,23,55,39,38, 35,34,7,39,54,51,50,23,22,23,55,51,7,22,51,50, 55,23,6,35,34,39,7,23,22,51,50,55,2,71,26,135, 52,77,71,54,82,27,23,70,37,40,41,124,26,33,37,63, 29,22,70,37,40,41,124,46,70,1,8,71,54,81,32,22, 71,31,40,26,135,28,35,37,67,31,21,71,31,223,148,51, 178,205,16,80,15,132,13,93,40,16,80,15,132,44,1,5, 177,204,18,98,16,148,14,93,42,16,98,0,0,1,0,32, 255,231,2,4,1,230,0,19,0,0,55,35,53,51,55,35, 53,33,55,23,7,51,21,35,7,51,21,33,7,39,157,125, 164,57,221,1,4,76,50,59,157,196,57,253,254,220,76,51, 111,70,102,70,133,28,105,70,102,70,136,29,0,2,0,45, 255,245,2,22,2,127,0,3,0,10,0,0,37,21,33,53, 17,53,37,21,13,1,21,2,22,254,23,1,233,254,118,1, 138,56,67,67,1,51,69,207,79,161,164,79,0,2,0,45, 255,245,2,22,2,127,0,3,0,10,0,0,37,21,33,53, 1,21,5,53,45,1,53,2,22,254,23,1,233,254,23,1, 138,254,118,56,67,67,1,120,69,207,79,161,164,79,0,3, 0,43,255,241,2,221,2,163,0,11,0,29,0,53,0,0, 1,51,21,51,21,35,21,35,53,35,53,51,5,20,23,22, 51,50,55,54,53,52,47,1,38,35,34,15,1,6,7,52, 55,54,55,50,51,50,23,22,23,20,21,20,7,6,7,34, 35,34,39,38,39,52,1,105,54,223,223,54,221,221,254,247, 88,85,119,123,86,83,88,31,77,96,123,86,26,57,53,97, 97,139,6,6,140,100,100,5,97,97,139,6,6,140,100,100, 5,2,65,220,54,223,223,54,27,123,86,83,88,85,119,123, 86,26,57,88,31,77,96,140,100,100,5,97,97,139,6,6, 140,100,100,5,97,97,139,6,0,3,0,43,255,241,2,221, 2,163,0,3,0,21,0,45,0,0,1,33,53,33,5,20, 23,22,51,50,55,54,53,52,47,1,38,35,34,15,1,6, 7,52,55,54,55,50,51,50,23,22,23,20,21,20,7,6, 7,34,35,34,39,38,39,52,2,126,254,14,1,242,253,226, 88,85,119,123,86,83,88,31,77,96,123,86,26,57,53,97, 97,139,6,6,140,100,100,5,97,97,139,6,6,140,100,100, 5,1,47,54,27,123,86,83,88,85,119,123,86,26,57,88, 31,77,96,140,100,100,5,97,97,139,6,6,140,100,100,5, 97,97,139,6,0,3,0,43,255,239,2,221,2,161,0,11, 0,35,0,53,0,0,19,55,23,55,23,7,23,7,39,7, 39,55,33,52,55,54,55,50,51,50,23,22,23,20,21,20, 7,6,7,34,35,34,39,38,39,52,55,20,23,22,51,50, 55,54,53,52,47,1,38,35,34,15,1,6,193,39,156,156, 39,156,156,39,156,156,39,156,254,206,97,97,139,6,6,140, 100,100,5,97,97,139,6,6,140,100,100,5,53,88,85,119, 123,86,83,88,31,77,96,123,86,26,57,1,228,39,157,156, 38,156,156,38,156,157,39,156,140,100,100,5,97,97,139,6, 6,140,100,100,5,97,97,139,6,6,123,86,83,88,85,119, 123,86,26,57,88,31,77,0,0,1,0,15,0,0,2,140, 2,162,0,7,0,0,37,21,33,53,33,17,51,17,2,140, 253,131,1,35,55,55,55,55,2,107,253,149,0,3,0,39, 255,232,3,13,2,207,0,8,0,18,0,44,0,0,9,1, 22,51,50,55,54,53,52,9,1,38,35,34,15,1,6,21, 20,1,23,7,22,21,20,7,6,7,6,35,34,39,7,39, 55,38,53,52,55,54,55,54,51,50,23,2,138,254,74,86, 116,129,92,91,253,217,1,183,87,113,129,92,28,63,2,130, 36,91,92,101,100,145,10,11,139,102,97,37,97,89,101,100, 145,10,11,136,104,2,42,254,70,74,92,91,129,117,254,195, 1,183,73,92,32,83,105,113,1,226,35,91,103,140,147,107, 104,8,1,91,98,37,98,102,137,147,107,104,8,1,89,0, 0,2,0,16,0,0,1,206,2,232,0,5,0,9,0,0, 1,19,3,35,3,27,2,11,1,1,14,192,192,62,192,192, 32,160,160,161,2,232,254,140,254,140,1,116,1,116,253,84, 1,56,1,56,254,200,0,1,0,55,0,0,1,242,2,182, 0,28,0,0,1,17,20,7,6,35,34,39,38,53,52,55, 54,51,50,23,17,51,21,20,23,22,29,1,35,53,52,39, 38,1,21,56,25,30,64,32,15,56,25,30,54,32,25,137, 84,25,137,38,1,247,254,92,50,23,10,39,20,24,50,23, 10,29,2,45,55,28,109,67,148,56,56,28,109,30,0,1, 0,102,0,87,1,88,1,47,0,11,0,0,19,22,23,22, 23,7,6,35,38,47,1,38,102,150,67,24,1,3,5,16, 33,36,68,38,1,47,77,77,28,17,9,7,3,46,85,44, 0,2,0,80,0,101,1,28,1,54,0,15,0,31,0,0, 19,50,23,22,21,20,7,6,35,34,39,38,53,52,55,54, 23,34,7,6,21,20,23,22,51,50,55,54,53,52,39,38, 182,54,31,17,46,26,30,55,30,17,47,25,30,45,22,11, 40,17,21,45,23,10,40,18,1,54,47,26,32,56,31,17, 47,26,31,57,31,17,24,40,19,22,46,24,10,41,18,21, 48,23,10,0,0,2,0,152,0,170,3,64,3,94,0,30, 0,60,0,0,1,54,55,54,51,50,23,22,23,7,6,7, 6,7,6,7,6,7,6,7,6,39,38,53,52,55,54,55, 54,55,54,37,54,63,1,50,23,22,23,7,6,7,6,7, 6,7,6,7,6,7,6,35,39,38,52,55,54,55,54,55, 54,2,201,13,37,10,11,5,5,33,4,2,1,2,24,80, 20,11,26,77,28,15,8,12,5,4,42,72,25,25,14,254, 192,15,36,18,6,5,31,1,3,2,2,27,89,16,11,30, 86,33,18,7,9,4,5,5,46,87,27,35,17,3,17,53, 18,5,1,9,50,31,8,8,82,177,42,26,58,119,42,26, 12,1,3,7,6,7,74,181,62,148,82,44,50,14,4,2, 9,48,31,6,7,78,174,33,22,61,121,46,28,11,1,2, 13,7,77,192,59,148,70,0,0,1,1,8,0,97,3,35, 2,191,0,42,0,0,37,54,55,35,6,7,6,7,39,55, 54,55,54,55,22,23,15,1,6,7,6,7,51,55,23,22, 21,15,2,6,7,22,21,20,7,35,38,47,1,38,39,22, 2,10,89,86,222,79,126,1,2,2,1,109,62,22,31,71, 1,4,16,4,10,12,28,222,29,9,55,3,15,33,110,111, 74,14,11,33,34,66,36,41,90,226,126,171,153,115,1,1, 2,4,138,155,58,93,20,18,8,13,2,6,29,60,42,6, 43,12,8,7,9,171,115,72,34,13,1,7,50,98,48,42, 58,0,0,2,0,99,0,124,3,144,3,108,0,22,0,47, 0,0,37,54,55,54,55,54,53,38,39,38,39,38,35,34, 7,6,7,6,21,23,22,23,22,23,38,39,38,39,38,53, 52,55,54,55,54,51,23,22,23,22,23,22,21,20,7,6, 7,6,1,244,121,106,99,20,4,2,94,93,120,21,20,122, 106,100,19,3,3,18,98,109,122,136,118,111,28,7,101,97, 133,35,34,52,133,107,106,13,1,101,99,132,39,175,1,89, 83,107,22,23,108,93,93,16,3,87,83,106,19,18,41,107, 85,90,52,2,98,91,120,32,32,124,109,106,28,8,3,19, 102,102,122,14,13,122,109,106,29,9,0,1,1,207,0,24, 3,88,3,224,0,31,0,0,9,1,54,55,50,23,22,21, 7,6,7,9,1,22,23,20,7,6,7,6,35,34,39,1, 38,53,52,53,38,53,54,55,1,238,1,19,21,27,9,7, 12,3,4,8,254,234,1,32,15,1,4,3,5,7,8,28, 22,254,222,20,6,1,23,2,47,1,144,32,1,5,7,19, 22,11,11,254,106,254,101,23,21,11,7,6,3,5,32,1, 158,6,22,3,2,13,12,28,3,0,0,1,0,77,0,2, 1,254,3,228,0,28,0,0,9,1,38,53,52,55,54,51, 50,23,1,22,21,20,15,1,6,35,1,6,35,6,39,38, 53,52,55,54,55,1,168,254,198,17,11,6,10,28,22,1, 63,20,1,1,5,14,254,178,23,26,10,7,11,10,4,4, 1,245,1,163,23,23,17,8,4,30,254,87,5,24,6,6, 18,20,254,83,29,1,6,8,16,17,18,6,6,0,0,2, 2,88,0,0,3,207,3,232,0,5,0,11,0,0,1,51, 3,19,35,3,19,51,3,19,35,3,3,157,50,188,188,50, 188,50,50,187,187,50,187,3,232,254,12,254,12,1,244,1, 244,254,12,254,12,1,244,0,0,2,0,25,0,0,1,144, 3,232,0,5,0,11,0,0,1,3,51,19,3,35,3,51, 19,3,35,19,1,94,188,50,188,188,50,137,50,187,187,50, 187,1,244,1,244,254,12,254,12,3,232,254,12,254,12,1, 244,0,0,1,1,183,255,247,3,166,3,241,0,27,0,0, 1,33,50,23,22,21,20,15,1,35,33,17,20,7,6,35, 34,39,38,53,17,38,53,52,55,54,51,50,2,17,1,90, 41,14,4,33,25,1,254,174,25,6,7,23,10,4,23,29, 10,21,19,3,220,25,6,7,23,10,4,252,161,41,14,4, 33,12,14,3,103,11,18,22,10,27,0,1,0,190,255,247, 2,47,3,241,0,27,0,0,37,17,52,55,54,51,50,23, 22,21,17,22,21,20,7,6,35,34,39,35,34,39,38,53, 52,55,54,51,1,206,25,6,6,25,10,3,22,28,10,22, 18,11,220,43,14,3,32,13,15,88,3,94,43,13,3,34, 11,14,252,154,11,18,22,10,28,22,25,6,7,22,11,4, 0,2,2,188,0,50,3,182,3,232,0,5,0,11,0,0, 37,51,17,51,53,35,39,51,21,35,17,35,2,213,50,150, 200,25,250,150,100,75,3,82,50,25,100,252,174,0,0,2, 0,50,0,0,1,44,3,182,0,5,0,11,0,0,55,51, 17,35,17,35,7,53,51,17,51,17,75,200,50,150,25,150, 100,25,3,132,252,174,75,100,3,82,252,74,0,1,2,188, 0,0,3,182,3,232,0,13,0,0,1,51,6,7,6,7, 6,21,20,23,22,31,1,35,2,188,250,93,29,1,2,22, 22,24,88,13,250,3,232,196,114,8,7,93,96,96,90,102, 173,25,0,1,0,50,0,0,1,44,3,232,0,14,0,0, 19,51,17,35,54,55,54,55,54,53,52,39,38,39,38,50, 250,250,84,26,9,6,21,21,27,92,3,3,232,252,24,169, 79,27,25,90,96,96,93,115,197,6,0,1,1,170,255,251, 2,246,3,249,0,38,0,0,1,38,53,52,63,1,54,51, 50,23,22,21,20,7,6,15,1,23,21,17,23,22,21,20, 7,6,35,34,47,1,6,35,34,39,38,53,39,54,55,1, 189,19,25,230,23,25,14,8,7,6,7,12,214,1,204,23, 8,7,13,24,25,176,6,6,23,10,4,3,1,2,2,191, 4,20,27,24,217,21,8,7,11,11,13,13,12,202,3,1, 254,53,204,23,25,13,8,8,24,177,3,32,13,15,26,4, 2,0,0,1,0,197,255,246,1,246,3,237,0,43,0,0, 37,19,39,38,53,52,55,54,51,50,31,1,54,51,50,23, 22,23,22,23,20,15,1,3,22,21,20,7,6,7,34,39, 7,6,7,34,39,38,39,38,53,55,54,55,1,154,2,173, 25,7,8,14,24,23,152,2,6,23,10,2,1,11,1,4, 7,2,17,21,9,25,5,3,166,23,22,9,7,5,4,6, 4,7,18,214,2,41,161,24,24,11,9,8,21,141,1,33, 6,7,16,16,9,7,8,254,15,8,19,21,20,33,2,1, 133,18,1,4,2,5,7,10,17,18,14,0,0,3,0,177, 0,66,3,69,3,32,0,7,0,24,0,92,0,0,1,22, 23,54,55,15,1,6,7,38,39,6,7,6,7,6,21,20, 23,22,23,22,51,55,54,19,7,34,35,63,1,50,51,48, 55,23,6,7,54,55,23,6,7,6,21,54,51,50,23,55, 23,7,22,23,22,21,20,7,6,15,1,39,54,55,54,55, 54,53,52,39,38,39,6,7,23,7,6,35,34,39,38,39, 38,39,38,53,52,55,54,55,54,55,52,1,200,4,11,53, 63,55,58,8,50,18,5,29,21,72,22,5,2,10,26,3, 2,19,44,45,137,5,6,1,144,5,4,18,65,12,5,49, 108,15,121,57,5,65,59,24,24,50,55,38,46,31,64,29, 38,106,57,17,114,35,8,6,17,42,26,43,93,79,7,54, 78,66,7,8,58,28,6,3,7,85,19,22,36,50,1,176, 69,66,62,92,3,11,2,198,101,69,14,16,51,76,20,16, 11,8,29,7,1,2,14,1,158,1,65,1,147,9,88,43, 6,27,63,30,7,52,41,16,3,78,35,58,17,30,62,96, 63,49,64,34,17,63,31,36,8,10,29,44,76,41,25,12, 141,84,38,11,75,1,8,53,10,12,22,24,90,83,19,16, 26,22,48,0,0,3,0,132,0,90,3,117,3,165,0,6, 0,23,0,95,0,0,1,22,23,54,55,35,6,7,38,39, 6,7,6,7,6,21,20,23,22,23,22,51,55,54,19,6, 35,63,1,50,55,54,55,23,6,7,54,55,23,7,6,7, 6,21,54,51,50,23,55,23,7,22,23,22,21,20,7,6, 7,6,15,1,39,54,55,54,55,54,53,52,39,38,39,6, 7,23,7,34,53,6,35,34,39,38,39,38,39,38,53,52, 55,54,55,54,55,52,1,188,4,16,72,74,57,43,102,22, 5,34,32,81,27,8,3,11,31,5,5,21,51,58,39,137, 1,154,14,13,6,16,64,14,6,68,120,16,144,34,32,6, 73,72,31,31,59,55,47,55,38,73,12,8,13,43,116,70, 18,124,42,16,9,21,50,31,54,122,81,9,63,1,88,74, 7,8,61,32,8,5,7,88,26,30,40,61,2,0,82,90, 84,110,4,249,123,83,16,22,60,85,25,21,14,11,35,10, 2,2,14,1,236,2,65,1,1,58,116,9,106,53,10,30, 63,34,6,3,80,39,20,4,93,35,73,18,37,70,109,42, 38,25,22,71,38,21,63,34,37,13,16,35,54,88,49,31, 14,181,83,47,12,2,83,1,7,57,13,15,24,27,98,91, 26,22,30,26,45,0,0,2,0,206,0,136,3,32,2,170, 0,13,0,33,0,0,1,55,22,23,22,23,22,21,7,39, 53,38,39,38,37,23,6,21,20,23,22,23,54,55,23,6, 15,1,38,39,38,39,55,54,2,120,51,68,21,4,4,19, 1,65,3,11,17,254,62,63,44,1,4,36,31,28,57,45, 33,69,58,12,3,1,1,5,2,30,39,86,51,11,11,58, 86,57,1,94,50,35,50,231,17,157,77,12,12,77,96,76, 47,31,75,112,3,147,77,23,21,62,70,0,0,2,0,165, 0,166,3,73,3,28,0,15,0,34,0,0,1,55,22,23, 22,23,22,21,7,47,1,38,39,38,39,38,37,23,6,7, 21,22,23,54,55,23,6,15,1,38,39,38,39,53,54,2, 145,51,78,25,4,4,22,1,65,1,3,13,19,77,2,254, 70,63,47,3,5,47,30,42,57,45,46,69,63,14,7,2, 6,2,126,40,100,60,12,11,65,107,59,1,112,58,39,57, 101,3,161,17,175,83,42,88,127,82,73,31,76,143,3,160, 79,37,34,66,83,0,0,2,0,243,0,62,3,18,3,8, 0,34,0,47,0,0,1,39,54,55,54,23,50,23,22,21, 20,7,6,7,6,7,6,15,1,39,54,55,54,55,54,63, 1,38,39,38,39,7,34,35,6,39,55,22,23,22,51,50, 55,23,7,34,39,38,1,8,21,118,75,49,42,137,67,55, 5,24,113,3,4,54,112,6,19,104,52,72,32,8,4,3, 1,32,48,127,66,2,2,66,37,31,77,36,29,41,34,55, 5,99,44,34,49,1,181,61,39,9,6,1,59,49,77,22, 22,103,78,3,2,36,36,2,63,32,34,47,66,17,16,31, 47,28,41,1,4,8,246,57,39,8,6,5,65,5,8,10, 0,2,0,205,0,86,3,58,3,134,0,36,0,50,0,0, 19,39,54,55,54,51,50,23,22,23,20,7,6,7,6,7, 6,7,39,54,55,54,55,54,55,54,55,54,53,52,39,38, 35,7,34,7,6,3,55,22,23,22,51,50,55,23,6,35, 34,39,38,225,20,128,93,55,48,158,77,61,1,6,25,119, 10,10,67,131,19,119,54,4,4,85,37,11,4,4,40,56, 149,73,5,4,84,32,30,85,48,34,49,35,67,5,78,33, 52,41,58,2,6,62,43,12,6,68,53,89,25,24,111,87, 7,7,44,40,62,37,34,3,3,55,76,21,20,17,17,58, 36,49,3,1,10,1,28,58,45,10,7,5,65,6,9,12, 0,2,0,134,0,29,3,49,3,35,0,48,0,58,0,0, 19,55,22,51,50,55,23,7,6,7,6,7,54,55,54,51, 50,23,22,21,7,20,23,22,23,50,55,23,6,35,39,38, 39,38,61,1,52,53,34,7,6,7,6,7,39,1,6,35, 34,39,55,22,23,22,23,7,38,39,38,219,9,83,83,103, 124,33,198,7,50,17,7,56,39,12,12,42,17,10,2,8, 12,59,50,116,11,128,49,45,64,23,13,6,5,31,45,65, 166,43,1,155,68,77,88,1,29,74,45,52,129,1,133,62, 43,2,17,65,15,25,61,205,3,47,17,4,34,9,4,34, 21,28,43,61,13,18,1,21,65,21,3,10,46,26,50,80, 2,1,1,8,28,38,124,49,1,171,11,230,59,37,11,13, 2,65,2,15,10,0,0,2,0,80,0,48,3,98,3,164, 0,46,0,56,0,0,19,55,22,51,50,51,54,55,23,1, 54,55,54,51,50,23,22,21,7,23,22,23,22,51,50,55, 23,6,35,34,39,38,53,55,38,39,6,7,6,7,6,7, 39,1,6,35,34,19,55,22,23,22,23,7,38,39,38,176, 9,127,71,5,5,82,168,32,254,195,67,41,14,13,47,16, 12,3,2,5,30,20,40,51,142,11,148,56,116,32,15,1, 1,1,30,51,17,9,74,194,43,1,231,87,95,103,2,28, 93,47,64,146,1,154,71,55,2,114,64,18,1,29,61,254, 184,40,9,4,36,23,32,49,60,37,9,7,24,64,25,66, 25,59,91,7,5,2,28,9,5,44,144,49,1,249,15,1, 10,58,43,12,16,2,65,2,17,13,0,3,0,136,0,40, 3,101,2,240,0,8,0,22,0,109,0,0,1,55,22,23, 22,23,7,38,39,1,6,15,1,20,23,22,23,55,54,55, 54,63,1,3,38,39,55,22,23,54,55,23,6,7,54,55, 23,6,7,6,7,54,51,50,23,22,23,22,23,22,21,20, 7,6,35,34,39,38,39,38,53,52,63,1,23,6,21,20, 23,22,23,22,51,55,54,55,54,55,54,55,52,39,38,39, 38,39,38,35,34,7,23,6,7,6,7,6,35,34,39,38, 39,38,53,52,55,54,55,54,55,52,2,152,31,60,29,22, 49,51,48,73,254,174,113,28,1,1,10,44,29,6,4,45, 6,1,2,51,121,9,104,62,4,1,65,1,4,50,116,13, 124,58,2,2,123,91,50,43,96,39,11,4,4,72,67,96, 9,10,79,32,19,6,7,63,10,4,12,41,6,6,39,34, 28,55,21,6,1,2,11,63,15,17,29,40,84,134,7,1, 11,21,66,25,28,18,19,54,22,14,17,8,13,54,114,2, 81,57,31,24,18,59,41,67,39,254,233,55,83,20,3,1, 14,3,1,1,2,14,44,44,1,40,1,15,65,15,1,99, 61,1,64,93,5,22,63,25,4,41,86,44,13,29,74,21, 23,18,18,88,63,59,1,5,44,25,34,20,29,25,15,39, 22,13,5,16,6,1,1,4,13,29,63,21,19,9,8,53, 31,8,5,11,48,119,41,30,56,20,7,3,9,33,22,26, 29,34,15,19,75,51,53,0,0,3,0,85,0,60,3,154, 3,110,0,9,0,25,0,111,0,0,1,55,22,23,22,23, 7,38,39,38,1,6,7,6,15,1,23,22,23,55,54,55, 54,63,1,39,19,38,39,55,22,51,55,23,6,7,54,55, 23,6,7,6,21,54,51,50,23,22,23,22,23,22,21,6, 7,6,35,34,39,38,39,38,53,38,55,23,6,21,20,23, 22,23,22,23,55,54,55,54,55,54,53,52,39,38,39,38, 39,38,35,34,7,6,7,23,6,7,6,7,6,35,34,39, 38,39,38,53,52,55,54,63,1,54,2,180,31,70,32,36, 45,50,45,27,26,254,80,130,37,3,3,2,3,11,52,34, 9,7,54,8,3,6,2,69,134,9,134,63,7,64,3,3, 70,129,13,139,76,4,143,107,58,50,105,46,14,6,4,1, 76,77,111,12,12,89,36,20,1,16,63,12,6,14,49,8, 7,44,43,33,62,26,10,2,12,72,20,22,35,48,121,130, 2,2,8,1,13,21,72,30,34,21,21,60,25,14,43,60, 135,3,1,2,186,58,37,27,30,58,41,56,23,21,254,218, 64,88,8,8,21,10,18,4,1,1,3,16,51,42,100,1, 5,1,18,64,18,190,1,134,53,5,27,64,28,6,102,56, 53,15,32,80,26,28,19,20,96,71,72,1,7,48,27,38, 26,59,16,45,25,16,9,19,8,1,1,1,4,17,32,71, 27,26,11,10,61,38,11,7,11,55,1,1,145,43,32,60, 24,10,4,11,36,26,28,49,59,85,60,150,23,0,0,2, 0,119,0,121,3,139,3,142,0,15,0,75,0,0,1,55, 22,23,22,23,22,23,7,39,55,22,23,38,39,38,37,6, 35,34,39,55,22,51,50,55,54,55,23,6,7,55,22,23, 22,23,22,21,20,7,6,7,6,15,1,38,47,1,55,22, 51,50,51,54,55,54,55,54,53,52,39,38,39,38,47,1, 7,35,6,7,6,7,39,54,55,54,2,115,45,90,34,12, 11,42,46,52,159,14,32,92,36,35,38,254,104,37,48,56, 57,7,67,42,51,39,8,2,65,2,6,46,106,52,12,8, 11,63,38,24,27,36,28,35,61,10,33,59,24,2,2,22, 39,10,9,55,6,16,49,8,7,31,57,1,21,112,24,43, 55,94,31,47,2,164,47,89,46,17,17,67,151,55,35,64, 8,20,112,57,61,21,6,8,64,7,9,90,149,1,152,75, 4,1,79,18,22,32,37,81,142,84,27,31,8,2,2,37, 6,56,35,4,71,18,20,124,79,24,18,47,19,3,2,3, 6,186,196,42,67,34,154,69,108,0,0,4,0,89,0,93, 3,231,3,176,0,10,0,21,0,40,0,107,0,0,1,55, 22,23,22,23,22,23,7,38,39,7,55,22,23,22,23,22, 23,7,38,47,1,55,22,23,22,23,22,23,22,23,7,39, 55,23,38,39,38,39,38,5,6,35,34,39,55,22,51,50, 55,54,55,23,6,7,54,51,50,23,22,23,22,23,22,21, 20,7,6,7,6,7,6,15,1,38,39,38,39,55,22,23, 50,55,54,55,54,55,54,55,52,39,38,39,38,39,38,35, 34,7,6,7,6,7,39,54,55,54,3,89,30,60,20,2, 2,18,10,59,13,28,119,29,58,17,4,4,13,15,61,12, 25,183,46,100,41,8,8,46,48,1,1,52,174,15,138,40, 38,39,105,2,254,177,48,55,62,52,6,66,51,56,45,8, 4,64,2,7,30,24,28,25,81,40,9,6,11,62,2,3, 42,28,28,35,29,38,65,8,4,34,64,26,4,2,25,40, 12,10,60,1,7,17,54,9,9,16,20,25,38,21,117,27, 51,55,100,34,53,2,246,57,31,21,3,2,20,29,25,33, 17,31,58,31,16,4,4,16,37,23,34,16,12,47,96,61, 12,13,73,157,2,4,56,39,63,30,124,63,63,101,2,76, 6,8,64,8,10,84,178,2,166,82,4,6,18,71,15,17, 34,39,86,144,5,6,92,31,30,8,2,1,41,5,2,55, 38,1,1,5,74,21,24,134,85,27,20,52,21,4,2,3, 6,198,205,49,81,35,163,76,119,0,0,1,0,150,0,22, 3,104,3,164,0,77,0,0,1,7,39,55,22,55,50,55, 38,39,55,22,23,54,55,54,55,23,6,7,22,23,54,55, 23,6,7,22,23,7,38,35,34,7,6,7,6,7,20,23, 22,23,22,51,50,55,54,55,23,6,7,35,38,39,38,39, 38,53,52,55,54,55,54,51,50,23,38,39,6,35,34,39, 55,22,51,54,55,38,1,211,95,168,4,122,57,30,26,21, 32,62,36,22,54,108,29,20,20,135,70,27,38,80,172,19, 159,65,48,94,31,156,81,60,53,75,54,46,5,50,56,73, 51,57,95,177,5,8,17,175,91,68,48,44,87,63,78,77, 67,84,66,73,59,64,42,38,91,119,99,115,5,135,82,88, 70,45,2,164,2,7,65,8,1,1,57,118,17,128,59,4, 34,9,5,62,42,10,61,51,16,51,62,47,15,51,83,59, 38,15,19,40,33,33,27,37,38,17,13,48,2,2,63,48, 5,3,11,21,44,54,62,62,57,48,22,18,12,41,45,16, 11,64,10,1,9,74,0,3,0,122,255,241,3,184,3,199, 0,8,0,19,0,101,0,0,1,55,22,23,22,23,7,38, 39,7,55,22,23,22,23,22,23,7,38,39,5,7,38,39, 55,22,55,50,55,38,39,55,22,23,54,55,54,55,23,6, 7,22,23,54,55,23,6,7,22,23,7,38,7,34,7,6, 7,6,7,22,23,22,23,22,23,22,51,50,55,54,55,23, 6,15,1,38,39,38,39,38,53,55,54,55,54,55,54,51, 50,23,38,39,6,35,34,39,55,22,51,50,55,38,3,41, 31,61,23,14,14,60,13,27,120,30,56,17,5,4,17,11, 60,12,26,254,205,107,67,113,4,134,63,32,29,22,37,63, 33,30,70,143,10,8,19,147,77,30,43,95,180,18,159,87, 47,110,30,169,90,65,58,80,60,52,4,2,49,3,2,58, 82,56,62,103,186,8,11,17,183,95,72,57,52,94,67,83, 3,13,66,69,93,70,78,67,77,56,39,100,130,106,123,5, 142,91,100,77,51,3,130,57,32,25,15,34,25,33,17,31, 58,30,16,4,5,19,34,23,34,16,127,3,1,7,65,8, 1,1,60,132,18,125,80,8,44,3,2,62,46,11,69,57, 19,54,63,47,20,51,98,60,42,1,15,21,44,38,35,31, 37,1,2,41,19,14,51,2,3,63,50,7,1,2,13,24, 47,56,67,29,51,47,49,26,19,15,55,46,18,12,64,11, 12,84,0,1,0,243,0,59,2,150,3,160,0,38,0,0, 1,23,6,15,2,6,7,6,21,20,23,22,31,1,22,31, 1,7,38,39,38,47,1,38,39,38,53,52,55,52,55,54, 55,54,55,54,55,54,2,45,56,102,61,26,89,17,5,4, 5,11,84,14,77,157,5,47,158,69,3,3,79,33,15,11, 7,1,16,62,34,12,70,107,2,3,160,32,178,77,30,99, 21,14,11,9,10,11,24,67,11,62,162,5,46,162,57,3, 2,64,30,31,23,26,20,19,2,2,43,63,35,13,79,188, 3,0,0,3,0,225,0,25,3,116,3,194,0,10,0,21, 0,57,0,0,1,55,22,23,22,23,22,23,7,38,39,7, 55,22,23,22,23,22,23,7,38,39,3,23,6,15,2,6, 7,6,21,20,23,22,23,22,23,22,31,1,7,38,47,1, 38,39,38,53,52,55,54,55,54,55,54,55,54,2,230,30, 60,20,2,2,18,10,59,13,28,119,29,58,17,4,4,13, 15,61,12,25,143,56,104,58,42,96,19,6,5,6,12,79, 25,3,83,168,7,47,169,83,84,37,15,12,8,18,68,36, 12,71,109,4,2,231,57,31,21,3,2,20,29,25,33,17, 31,58,31,16,4,4,16,37,23,34,16,1,41,33,182,74, 51,107,23,16,11,11,11,13,25,64,20,3,67,173,7,46, 175,68,68,33,32,25,29,23,22,45,69,37,13,81,189,6, 0,2,0,117,0,53,3,165,3,98,0,34,0,48,0,0, 1,6,35,38,39,55,22,51,50,55,53,51,21,54,55,23, 6,7,21,20,7,6,7,6,7,6,15,1,39,54,55,54, 55,54,55,1,23,6,21,20,21,22,31,1,7,38,39,55, 54,2,200,47,55,82,139,9,149,65,54,46,65,41,95,20, 100,56,10,9,20,6,7,49,130,78,20,144,49,19,12,39, 1,253,209,64,34,2,45,3,64,48,3,2,5,2,93,8, 1,21,64,20,8,195,181,10,31,62,33,13,138,132,50,47, 35,11,10,68,47,27,62,48,38,15,17,56,167,1,122,10, 206,104,12,12,108,212,14,14,226,120,92,88,0,3,0,89, 0,20,3,199,3,157,0,8,0,52,0,69,0,0,1,55, 22,23,22,23,7,38,39,7,6,39,34,39,55,22,51,50, 55,53,23,21,22,23,22,23,7,38,39,38,39,21,54,55, 23,6,7,21,20,7,6,7,6,7,6,7,39,54,55,54, 55,54,55,1,23,6,21,20,21,22,31,1,21,7,38,39, 38,53,55,54,3,56,31,61,23,14,14,60,13,27,135,52, 59,90,151,9,158,75,59,51,65,41,21,17,11,60,13,12, 2,3,43,107,20,102,68,11,13,32,53,137,21,65,21,156, 53,22,13,43,1,253,163,65,38,3,48,4,64,47,7,1, 2,5,3,100,57,32,25,15,34,25,33,17,228,8,1,22, 64,22,9,214,1,35,20,24,19,34,23,31,9,2,2,88, 11,34,61,35,16,151,142,54,66,44,73,50,8,21,61,52, 41,17,18,62,176,1,158,11,222,122,9,8,116,226,18,2, 13,222,110,21,20,97,94,0,0,2,0,156,0,121,3,50, 3,70,0,25,0,37,0,0,19,23,6,21,20,23,22,23, 22,23,22,51,50,55,23,6,35,34,39,38,39,38,53,52, 55,54,19,55,22,51,50,55,23,6,35,34,39,38,189,61, 27,3,25,126,39,35,52,55,82,170,8,143,121,164,107,91, 25,11,30,2,91,11,126,137,77,87,4,122,62,33,29,70, 1,150,24,67,33,11,6,43,22,7,2,5,18,64,18,33, 29,53,23,27,35,76,5,1,115,64,26,8,65,9,2,4, 0,4,0,131,0,93,3,199,3,137,0,8,0,19,0,45, 0,58,0,0,1,55,22,23,22,23,7,38,39,7,55,22, 23,22,23,22,23,7,38,39,1,23,6,21,20,23,22,23, 22,23,22,51,50,55,23,6,35,34,39,38,39,38,53,52, 55,54,19,55,22,31,1,54,55,23,6,35,34,39,38,3, 56,31,61,23,14,14,60,13,27,120,30,56,17,5,4,17, 11,60,12,26,253,146,60,30,4,28,138,41,39,56,59,98, 176,7,152,132,177,116,96,27,12,34,1,95,12,134,69,102, 49,108,4,133,66,36,31,67,3,80,57,32,25,15,34,25, 33,17,31,58,30,16,4,5,19,34,23,34,16,254,139,23, 77,32,13,7,47,25,8,2,5,20,65,20,37,31,55,25, 29,40,81,4,1,147,65,24,4,1,2,7,65,9,2,4, 0,1,0,140,0,62,3,20,3,133,0,61,0,0,1,6, 39,34,39,55,22,51,50,55,38,39,55,22,23,54,55,23, 6,7,22,31,1,7,38,39,38,35,34,7,6,7,6,21, 23,22,23,22,23,22,51,50,55,23,6,35,34,39,38,39, 38,39,55,54,55,54,55,54,51,50,23,38,1,254,44,47, 101,149,9,157,93,32,31,17,16,64,20,14,70,144,18,144, 68,36,94,58,39,146,76,28,26,33,31,73,55,51,3,10, 45,57,75,42,45,67,131,16,139,77,51,49,87,67,82,4, 2,16,108,51,51,46,49,70,71,52,2,142,5,1,24,64, 23,2,70,104,10,117,57,12,42,62,42,13,93,108,65,54, 71,13,5,8,19,50,49,34,20,27,33,40,16,10,33,63, 35,11,21,46,57,68,32,83,64,31,13,12,25,71,0,3, 0,114,0,29,3,236,3,225,0,8,0,19,0,81,0,0, 1,55,22,23,22,23,7,38,39,7,55,22,23,22,23,22, 23,7,38,39,5,6,39,34,39,55,22,51,50,55,38,39, 55,22,23,54,55,23,6,7,22,31,1,7,38,39,38,7, 34,7,6,7,6,21,22,23,22,23,22,51,54,55,23,6, 7,39,38,39,38,39,38,39,55,54,55,54,55,54,51,50, 23,38,3,94,30,62,22,18,10,59,13,29,118,29,59,20, 2,2,14,14,61,12,27,254,200,48,51,113,159,10,184,75, 44,39,18,19,65,18,19,91,143,18,158,74,36,93,76,39, 156,83,32,30,36,33,77,63,56,3,61,64,80,46,49,73, 142,15,147,75,64,27,27,98,68,87,4,2,14,110,59,59, 48,51,81,86,72,3,168,57,32,25,20,29,25,33,18,33, 58,29,22,2,2,17,35,23,34,16,189,5,1,26,64,27, 5,69,121,10,118,73,17,43,63,46,14,98,108,86,53,76, 15,6,1,8,20,55,51,46,42,42,43,18,11,1,35,64, 35,2,3,3,6,24,48,60,73,31,85,70,38,14,13,32, 94,0,0,1,1,8,0,39,3,105,3,98,0,39,0,0, 1,51,7,6,7,6,7,23,22,23,22,23,22,55,50,55, 54,55,54,55,23,6,7,6,7,6,35,34,39,38,39,38, 53,52,55,54,55,54,53,52,1,35,65,1,2,6,15,1, 3,4,11,26,82,38,42,58,51,60,80,11,23,53,78,45, 35,38,67,76,115,77,35,18,25,16,1,1,10,3,98,203, 75,67,164,27,60,35,24,66,28,13,1,26,33,108,15,33, 37,112,42,34,21,35,71,33,41,57,82,39,144,12,9,104, 142,31,0,3,0,247,0,3,3,133,3,128,0,8,0,19, 0,59,0,0,1,55,22,23,22,23,7,38,39,7,55,22, 23,22,23,22,23,7,38,39,37,55,7,6,7,6,7,23, 22,23,22,23,22,51,50,55,54,55,54,55,23,6,7,6, 7,6,35,34,39,38,39,38,53,52,55,54,55,54,53,52, 2,60,30,62,22,18,10,59,13,29,118,29,59,20,2,2, 14,14,61,12,27,254,254,65,1,2,7,16,1,3,4,12, 33,87,41,43,64,57,67,86,14,22,53,82,46,40,43,71, 80,119,84,41,20,27,17,1,1,11,3,18,57,32,25,20, 29,25,33,18,33,58,29,22,2,2,17,35,23,34,16,187, 1,213,86,75,173,35,63,38,27,73,30,14,30,36,118,19, 32,37,117,45,40,23,38,74,36,46,60,90,42,153,13,11, 113,157,32,0,0,2,0,128,0,54,3,114,3,132,0,15, 0,68,0,0,1,38,39,6,7,6,21,23,22,23,22,23, 55,54,55,54,19,39,38,39,55,22,51,50,55,39,55,22, 49,54,55,23,6,7,23,20,7,22,21,20,7,6,7,6, 7,6,39,34,39,55,22,51,54,55,54,55,6,35,34,39, 38,53,52,55,54,51,50,23,39,2,22,23,97,59,29,23, 3,5,11,25,66,37,25,15,34,13,124,111,174,8,230,106, 32,30,9,65,9,90,182,11,175,106,3,2,7,8,28,87, 9,10,54,81,29,72,6,64,33,66,35,60,32,49,63,88, 53,38,44,52,84,68,55,2,1,165,62,2,2,29,23,39, 28,17,12,32,1,3,5,11,24,1,25,1,4,20,64,25, 1,206,3,204,8,30,64,30,9,156,27,24,27,33,35,39, 134,60,7,5,30,1,6,65,6,1,19,33,95,32,55,42, 59,64,44,50,34,109,0,4,0,98,0,20,3,144,3,200, 0,8,0,19,0,36,0,96,0,0,1,55,22,23,22,23, 7,38,39,7,55,22,23,22,23,22,23,7,38,39,3,38, 39,6,7,6,7,20,23,22,23,22,23,55,54,55,54,19, 7,38,39,55,22,51,50,55,39,55,22,23,54,55,23,6, 7,23,6,7,22,21,20,7,6,7,6,7,6,35,39,34, 39,55,22,51,50,55,54,55,54,55,6,7,6,35,34,39, 38,39,38,53,52,55,54,51,50,23,52,2,242,31,60,24, 14,14,60,13,29,118,30,58,21,1,2,17,11,60,13,27, 177,25,108,65,32,25,1,5,5,12,28,69,39,30,19,38, 13,121,121,202,8,240,127,34,33,10,64,8,3,83,214,10, 198,107,3,1,2,8,9,29,93,10,11,57,86,86,4,21, 6,67,37,73,39,64,35,3,2,4,3,53,67,44,38,41, 27,41,47,56,90,77,58,3,143,57,31,26,15,34,25,33, 17,32,58,29,22,2,2,19,33,23,34,16,254,94,69,2, 2,32,25,43,17,15,19,13,34,3,2,6,14,27,1,51, 1,4,24,64,27,1,225,3,148,75,7,34,64,34,8,175, 27,24,30,36,37,41,143,66,7,6,31,5,2,65,6,22, 35,96,8,8,2,3,34,15,15,29,44,63,69,47,53,40, 4,0,0,1,0,95,0,112,3,93,3,85,0,70,0,0, 19,7,39,54,49,54,55,23,6,7,54,51,38,53,51,31, 1,50,23,7,39,34,35,22,21,20,7,6,7,6,35,34, 39,38,39,55,22,31,1,50,55,54,53,52,39,34,7,23, 22,23,22,23,22,51,50,55,23,7,38,39,38,39,38,39, 38,39,52,39,38,53,52,241,137,9,147,2,6,65,3,4, 172,156,5,65,3,2,54,106,1,148,3,2,5,5,10,42, 18,23,21,31,26,70,25,79,16,31,5,4,21,6,164,171, 1,2,3,6,21,61,234,43,81,1,184,47,39,129,52,8, 6,37,9,1,7,2,55,18,65,18,69,152,2,65,146,18, 70,124,138,56,2,65,2,55,37,38,30,68,21,9,9,8, 28,60,31,4,4,1,22,80,42,47,19,187,45,33,63,20, 49,2,65,1,1,3,11,39,6,6,34,81,4,5,81,111, 35,0,0,3,0,63,0,84,3,219,3,114,0,8,0,19, 0,93,0,0,1,55,22,23,22,23,7,38,39,7,55,22, 23,22,23,22,23,7,38,39,5,7,34,35,39,55,54,55, 23,6,7,54,51,38,53,52,55,23,20,23,50,23,7,38, 35,22,21,6,7,6,7,6,35,47,1,38,39,55,22,51, 50,55,54,53,52,39,7,6,7,21,22,23,22,23,22,23, 22,51,50,55,23,7,39,38,39,38,39,38,39,38,53,38, 53,52,3,76,31,61,23,14,14,60,13,27,120,30,56,17, 5,4,17,11,60,12,26,253,182,148,2,2,8,161,2,6, 65,6,1,177,183,6,1,64,6,88,87,1,112,56,6,1, 4,12,43,20,24,34,21,34,70,26,95,38,7,7,24,6, 150,104,113,2,4,7,23,40,130,60,99,21,105,1,198,94, 148,56,2,2,40,9,1,8,3,35,57,32,25,15,34,25, 33,17,31,58,30,16,4,5,19,34,23,34,16,150,19,64, 21,77,164,3,156,75,20,107,64,22,20,1,141,71,3,64, 2,67,39,39,30,72,22,10,4,6,9,30,60,42,1,23, 85,42,61,3,4,13,184,61,44,69,23,38,10,5,1,64, 1,4,12,49,2,2,39,86,4,4,77,123,41,0,0,1, 0,82,0,41,3,119,3,97,0,48,0,0,1,55,22,51, 50,51,54,55,23,5,54,51,50,31,1,6,7,6,7,6, 21,20,23,22,23,22,5,7,38,39,38,39,38,53,54,55, 54,55,54,63,1,6,5,39,37,39,35,39,38,1,17,9, 139,73,5,5,71,152,21,254,46,191,231,87,89,7,229,82, 143,32,12,6,2,3,39,1,23,16,163,46,110,39,20,1, 19,42,144,11,13,71,222,254,212,21,1,196,28,1,87,51, 3,24,64,20,1,28,63,245,26,4,65,53,29,51,58,20, 21,15,14,6,5,65,73,63,43,17,42,66,33,39,40,34, 74,55,4,5,28,10,49,63,238,8,3,4,0,3,0,49, 0,6,3,166,3,124,0,10,0,21,0,72,0,0,1,55, 22,23,22,23,22,23,7,38,39,7,55,22,23,22,23,22, 23,7,38,39,37,55,22,51,50,51,54,55,23,1,54,33, 50,31,1,6,7,6,7,6,21,20,23,22,23,22,23,22, 23,7,38,39,38,39,38,53,52,55,54,55,39,35,7,35, 6,5,39,1,47,1,38,3,24,30,60,20,2,2,18,10, 59,13,28,119,29,58,17,4,4,13,15,61,12,25,254,10, 9,158,73,5,4,90,152,22,253,249,210,1,10,92,96,3, 230,95,151,43,22,8,3,4,43,245,26,31,16,170,53,119, 43,24,32,58,174,46,1,36,2,139,254,232,21,1,249,49, 85,59,3,45,57,31,21,3,2,20,29,25,33,17,31,58, 31,16,4,4,16,37,23,34,16,83,65,23,2,30,63,254, 239,31,4,65,34,26,42,66,32,40,23,21,8,7,73,62, 7,7,64,41,21,45,74,41,50,58,50,86,49,7,12,10, 44,62,1,10,6,2,4,0,0,3,0,40,0,76,3,102, 3,114,0,20,0,35,0,62,0,0,1,55,22,23,22,51, 50,51,54,55,23,6,7,47,3,38,39,38,39,19,39,54, 51,50,23,22,31,1,7,38,47,1,7,34,37,38,39,55, 22,23,54,55,23,6,7,54,55,54,55,23,6,7,6,7, 6,15,1,39,54,55,54,1,138,63,18,23,29,87,8,8, 70,151,10,158,71,66,46,34,26,3,2,40,17,101,9,86, 53,21,19,64,132,5,20,131,56,56,84,5,254,245,49,95, 4,102,47,7,10,65,13,3,51,106,4,3,19,119,73,16, 32,40,108,26,55,113,44,40,1,35,12,84,20,26,2,25, 65,24,3,1,8,13,16,2,2,34,83,1,10,64,14,2, 5,41,1,62,40,4,1,9,89,1,6,65,6,1,65,127, 5,156,28,3,30,1,1,62,35,4,122,93,118,177,41,35, 177,116,106,0,0,5,0,4,0,43,3,131,3,145,0,8, 0,19,0,41,0,54,0,83,0,0,1,55,22,23,22,23, 7,38,39,7,55,22,23,22,23,22,23,7,38,39,1,55, 22,23,22,23,22,51,50,51,54,55,23,6,7,39,38,39, 38,39,38,39,19,39,54,51,50,23,22,23,7,38,39,35, 7,37,38,39,55,22,51,54,55,23,6,7,54,55,23,6, 7,6,35,6,7,6,15,1,39,54,55,54,55,54,2,212, 31,60,24,14,14,60,13,29,118,30,58,21,1,2,17,11, 60,13,27,254,213,63,19,21,2,3,34,96,7,8,76,163, 9,170,76,71,73,41,3,2,42,18,106,9,106,45,21,20, 74,143,19,142,61,63,91,254,223,71,88,4,131,33,11,8, 65,8,10,79,102,19,126,68,8,7,18,34,42,115,31,56, 114,41,15,12,30,3,63,57,31,26,15,34,25,33,17,32, 58,29,22,2,2,19,33,23,34,16,254,33,13,87,22,3, 2,29,2,27,65,26,3,2,6,32,2,2,37,88,1,34, 65,14,2,6,45,62,44,5,9,96,1,7,64,7,93,117, 5,104,99,8,31,62,36,5,1,133,102,126,186,50,35,181, 97,36,34,89,0,1,0,126,0,54,3,102,3,152,0,66, 0,0,1,38,39,55,22,23,54,55,23,6,7,54,63,1, 23,6,7,6,35,6,7,6,7,54,51,50,23,22,23,22, 21,20,7,6,7,6,7,6,35,34,39,38,39,55,22,31, 1,54,55,54,55,54,55,53,38,39,38,39,38,35,34,7, 6,7,39,55,54,1,71,62,139,12,123,75,4,2,65,2, 4,98,211,7,14,188,73,39,38,23,79,2,3,163,102,78, 64,76,55,45,2,23,139,40,45,34,35,112,175,14,32,22, 170,87,62,26,26,95,59,31,7,6,26,44,60,49,63,99, 192,14,18,43,80,43,2,194,5,23,64,22,6,49,101,1, 113,37,2,46,2,63,41,7,4,122,138,4,5,56,28,33, 70,59,56,12,11,99,45,13,6,5,62,4,12,61,61,10, 3,1,3,13,46,24,28,22,32,35,54,27,22,68,4,7, 53,140,83,0,0,2,0,96,0,21,3,139,3,186,0,8, 0,87,0,0,1,55,22,23,22,23,7,38,39,5,38,39, 55,22,23,54,55,23,6,7,54,63,1,22,23,22,23,22, 23,7,38,39,38,39,6,7,6,35,6,7,6,7,54,51, 50,23,22,23,22,21,20,7,6,7,6,7,6,35,34,39, 38,39,55,22,23,22,51,50,55,54,55,54,55,53,38,39, 38,39,38,35,34,7,6,7,39,54,55,54,2,252,31,60, 24,14,14,60,13,29,254,23,76,144,12,147,70,5,2,65, 2,5,106,204,17,58,21,1,2,17,11,60,15,4,2,3, 195,68,51,47,20,78,8,13,181,111,84,69,83,55,50,2, 22,149,44,50,36,38,121,186,17,35,22,181,95,33,32,31, 30,98,65,39,8,5,30,45,69,54,69,71,96,67,115,44, 80,17,39,3,98,57,31,26,15,34,25,33,17,117,5,26, 64,26,4,53,111,2,109,55,2,44,34,29,22,2,2,19, 33,23,31,4,2,2,41,7,6,118,142,15,23,63,30,37, 71,66,60,13,12,101,50,14,8,5,66,5,13,61,65,11, 4,4,12,48,29,33,23,36,39,58,30,24,26,18,42,54, 137,35,80,0,0,1,0,184,0,101,3,83,2,99,0,44, 0,0,19,55,23,54,63,1,54,51,50,23,22,23,22,21, 20,21,6,7,6,7,6,15,1,39,54,55,54,55,54,55, 54,55,39,38,39,38,39,38,35,34,7,6,7,6,35,184, 3,125,62,49,124,32,27,40,35,83,50,36,3,118,23,25, 91,161,42,3,155,74,21,20,83,34,13,1,3,15,57,26, 26,21,27,32,102,23,17,66,86,1,245,65,2,1,10,30, 6,13,30,81,59,61,3,4,105,76,15,12,43,7,1,65, 5,24,7,9,39,63,26,24,28,62,51,24,9,8,24,6, 3,14,0,1,0,135,0,130,3,133,2,198,0,45,0,0, 19,55,23,54,63,1,54,51,50,23,22,23,22,21,20,21, 6,7,6,7,6,7,34,7,39,54,55,54,55,54,55,54, 55,39,38,39,38,39,38,35,34,15,1,6,35,34,135,3, 131,80,63,143,37,30,46,39,91,57,45,4,126,29,33,102, 175,17,45,2,167,76,38,32,97,40,17,1,3,16,64,33, 34,26,32,35,54,113,77,98,39,2,81,65,3,1,13,34, 7,15,32,88,70,73,3,4,116,85,20,15,48,9,2,65, 6,21,11,15,46,73,31,30,32,71,59,32,12,9,12,26, 15,0,0,3,0,106,0,103,3,194,3,182,0,8,0,19, 0,66,0,0,1,55,22,23,22,23,7,38,39,7,55,22, 23,22,23,22,23,7,38,39,5,55,23,54,63,1,54,51, 50,23,22,23,22,21,20,21,6,7,6,7,6,7,6,7, 39,54,55,54,55,54,55,54,55,39,38,39,38,39,38,35, 7,6,7,6,7,6,35,3,51,31,61,23,14,14,60,13, 27,120,30,56,17,5,4,17,11,60,12,26,253,90,2,143, 87,68,155,40,33,48,41,96,61,49,4,133,32,37,110,190, 21,44,2,181,86,39,34,101,45,22,1,3,16,67,38,40, 29,35,52,10,123,19,15,83,107,3,125,57,32,25,15,34, 25,33,17,31,58,30,16,4,5,19,34,23,34,16,212,65, 3,1,14,37,7,15,35,93,74,79,4,5,122,91,22,18, 52,9,1,1,65,6,24,11,16,48,76,37,36,33,76,64, 38,14,10,4,2,28,4,3,16,0,0,1,0,127,0,85, 3,90,2,254,0,32,0,0,19,53,36,37,23,6,7,6, 7,6,21,20,23,22,23,22,23,22,23,7,38,39,38,39, 38,53,52,55,54,55,54,55,4,127,1,59,1,150,10,235, 94,79,33,30,11,8,11,42,147,29,47,14,140,56,71,37, 44,12,10,18,69,101,254,247,2,166,65,1,22,64,60,52, 43,56,50,66,39,33,22,16,60,39,7,11,63,30,26,33, 54,62,84,43,41,35,31,115,46,6,0,3,0,97,0,54, 3,174,3,17,0,8,0,19,0,48,0,0,1,55,22,23, 22,23,7,38,39,7,55,22,23,22,23,22,23,7,38,39, 37,53,36,37,23,6,7,6,7,6,21,20,23,22,23,22, 23,7,38,39,38,39,38,53,52,55,54,55,4,3,31,31, 60,24,14,14,60,13,29,118,30,58,21,1,2,17,11,60, 13,27,253,103,1,78,1,190,10,246,101,95,37,33,34,44, 154,34,56,15,148,59,79,41,46,42,73,135,254,206,2,129, 57,31,26,15,34,25,33,17,32,58,29,22,2,2,19,33, 23,34,16,133,64,1,24,64,63,53,50,63,56,71,73,48, 65,41,8,13,63,32,27,36,58,67,90,87,73,124,56,8, 0,1,0,185,0,79,3,24,3,128,0,37,0,0,1,54, 55,23,4,7,6,7,6,21,22,23,22,23,22,51,50,55, 23,7,34,39,38,39,38,39,38,53,52,55,54,55,38,53, 52,53,55,20,1,218,70,208,13,254,255,102,90,35,30,1, 16,37,150,60,88,60,127,2,200,83,61,171,58,3,3,28, 42,55,130,33,65,2,69,24,45,63,57,49,42,54,45,53, 38,24,58,16,6,4,65,4,7,17,77,4,4,43,55,69, 65,83,55,127,192,8,9,1,205,0,0,3,0,162,0,48, 3,161,3,160,0,8,0,19,0,57,0,0,1,55,22,23, 22,23,7,38,39,7,55,22,23,22,23,22,23,7,38,39, 5,54,55,23,4,7,6,7,6,21,20,23,22,23,22,51, 50,55,23,7,34,39,38,39,38,39,38,53,52,55,54,55, 38,53,52,53,51,22,3,19,30,62,22,18,10,59,13,29, 118,29,59,20,2,2,14,14,61,12,27,254,232,80,223,13, 254,239,112,100,39,33,18,41,163,66,95,65,136,3,218,89, 64,181,63,5,4,30,45,61,140,36,65,2,2,254,57,32, 25,20,29,25,33,18,33,58,29,22,2,2,17,35,23,34, 16,104,27,49,64,60,52,46,60,49,58,42,28,64,17,6, 4,65,4,7,18,79,6,6,45,60,75,68,92,57,140,209, 8,9,227,0,0,3,0,58,0,31,3,85,3,147,0,18, 0,64,0,89,0,0,37,38,39,38,35,34,7,6,7,6, 21,23,22,23,22,31,1,54,55,19,38,39,55,22,23,22, 23,15,1,6,7,6,21,23,22,21,22,23,7,38,39,6, 7,6,35,34,39,38,39,38,55,52,55,54,55,54,51,50, 23,52,47,1,52,55,54,37,34,39,55,22,51,54,55,23, 6,7,54,55,54,55,23,6,7,6,15,1,39,54,55,54, 2,54,14,15,66,42,30,21,20,13,6,2,8,41,14,15, 51,84,10,108,29,89,2,113,55,51,78,13,94,91,26,15, 5,14,63,111,32,111,37,16,52,41,57,26,27,97,28,10, 1,54,8,8,34,48,57,83,14,4,30,29,254,177,37,106, 6,94,57,12,17,64,16,10,51,96,22,15,22,132,87,38, 122,66,56,103,25,60,179,7,5,25,12,12,24,11,10,9, 16,14,5,3,3,3,66,1,171,5,4,65,4,13,12,33, 65,2,6,31,29,48,67,116,21,31,65,56,63,19,68,29, 22,5,17,56,20,21,55,43,7,5,22,32,11,110,64,65, 41,38,95,9,65,9,60,116,10,108,54,4,35,8,5,61, 50,8,181,215,113,33,179,50,123,0,0,3,0,135,0,103, 3,85,3,89,0,19,0,29,0,43,0,0,1,55,22,23, 22,23,22,51,50,55,23,6,35,34,39,38,39,38,39,38, 19,55,22,51,54,55,23,6,35,34,37,23,6,7,23,22, 31,1,7,38,53,52,53,54,1,76,58,46,33,9,10,44, 94,75,143,9,166,63,70,50,27,22,58,48,4,77,7,71, 67,104,108,10,112,114,72,254,202,64,41,3,2,4,16,6, 65,28,3,1,59,29,92,29,8,6,26,19,64,23,17,8, 13,35,93,7,1,172,64,9,1,22,64,24,151,10,234,123, 109,87,137,46,8,245,113,16,15,127,0,4,0,97,0,102, 3,187,3,88,0,15,0,23,0,39,0,105,0,0,37,38, 7,34,7,6,15,1,23,22,23,22,51,50,55,54,1,22, 23,54,55,54,55,6,3,38,39,6,7,6,21,20,23,22, 23,22,51,50,55,54,3,38,39,55,22,23,54,63,1,23, 6,7,55,22,23,22,21,20,7,23,7,38,39,6,7,6, 35,34,39,38,47,1,53,54,55,54,63,1,22,23,54,53, 52,39,38,35,34,7,6,7,23,7,39,6,7,6,35,34, 39,38,39,38,53,52,55,54,3,31,89,48,8,7,33,19, 5,4,16,34,27,28,46,35,11,254,53,24,60,15,49,2, 2,85,11,79,34,85,20,8,36,11,12,13,13,14,17,51, 76,15,25,64,23,12,85,107,36,63,17,12,68,169,68,43, 37,70,41,57,5,13,14,53,75,41,38,78,13,2,4,69, 17,19,37,69,90,27,34,51,142,35,40,42,50,56,49,36, 56,69,30,32,34,27,53,24,12,10,31,223,58,1,1,6, 27,12,12,28,15,12,33,11,1,125,71,85,37,163,7,6, 20,254,250,98,92,62,73,24,30,76,56,18,7,8,9,28, 1,127,54,120,13,111,42,42,21,136,17,63,46,2,4,111, 72,109,104,88,56,50,43,4,18,14,51,17,34,59,26,1, 62,31,7,4,3,1,61,65,86,95,53,84,5,157,128,66, 42,41,116,39,17,19,34,86,44,44,39,36,107,0,0,2, 0,77,0,89,3,187,3,129,0,20,0,99,0,0,37,38, 39,38,35,34,7,6,15,1,21,22,23,22,31,1,54,55, 54,55,54,1,55,23,7,55,23,7,21,54,55,54,55,54, 51,50,23,22,23,22,7,20,7,22,23,7,38,39,6,7, 6,35,34,39,38,39,38,47,1,54,55,54,55,54,51,50, 23,54,53,52,39,38,47,1,38,35,6,7,6,7,20,23, 35,2,53,6,7,39,19,54,63,1,53,6,35,34,39,63, 1,54,3,14,40,11,56,36,17,10,24,9,1,4,34,8, 8,24,58,50,6,5,4,254,14,3,65,3,38,41,82,36, 100,5,5,116,87,32,29,90,39,22,1,34,28,58,36,68, 14,45,73,35,32,18,17,63,28,9,3,1,6,53,5,4, 25,33,63,110,26,11,25,59,11,15,19,75,99,85,97,3, 65,3,46,100,54,180,11,10,2,67,90,21,22,2,103,53, 250,22,5,27,6,12,35,21,2,32,18,5,2,1,5,54, 6,6,6,1,249,145,2,132,7,58,137,11,31,63,3,3, 76,10,32,116,63,72,93,81,17,38,54,44,8,67,31,15, 5,15,56,19,20,32,67,34,3,2,14,62,66,77,48,42, 92,31,5,5,1,63,55,104,181,181,1,32,1,54,126,36, 1,67,18,18,92,1,11,1,65,1,2,0,0,2,0,85, 0,109,3,165,3,27,0,44,0,59,0,0,1,2,7,6, 7,39,38,39,38,39,52,55,54,55,54,55,54,55,54,51, 22,23,22,23,22,21,20,7,6,15,1,39,54,55,54,55, 54,53,52,39,38,39,38,35,34,7,6,7,6,7,6,23, 20,23,22,31,1,54,55,54,2,12,48,102,47,51,28,63, 53,46,1,18,1,2,45,119,90,104,36,37,151,113,59,33, 39,57,61,148,97,19,151,58,40,23,44,29,48,115,70,71, 4,72,124,93,51,22,17,1,36,29,38,15,22,29,95,2, 217,254,139,160,67,5,1,10,87,76,90,54,51,5,4,123, 84,64,16,6,1,82,43,57,69,83,104,80,85,52,30,62, 46,39,26,32,61,86,67,51,83,42,25,7,27,100,55,60, 45,47,72,60,48,16,4,2,42,154,0,3,0,123,0,108, 3,94,3,98,0,19,0,68,0,81,0,0,37,38,35,34, 7,6,15,1,23,22,23,22,23,22,51,50,55,54,55,54, 3,6,35,34,39,55,22,55,50,55,54,55,23,6,7,54, 55,23,6,15,1,22,23,22,23,7,38,39,6,7,6,15, 1,38,39,38,39,52,55,54,55,54,55,51,22,23,38,53, 52,1,23,6,15,1,22,23,7,38,53,52,55,54,2,159, 120,72,8,8,47,26,5,3,10,21,5,6,44,72,22,22, 58,14,8,6,59,68,82,85,5,94,73,67,57,4,3,65, 3,4,31,85,13,72,58,1,2,8,21,102,35,77,17,4, 13,32,85,56,89,61,73,1,3,17,100,9,9,47,75,91, 7,254,18,64,38,5,1,1,14,65,16,2,5,243,64,1, 4,26,7,15,24,18,4,4,30,3,8,22,11,1,128,6, 9,64,9,1,7,125,60,2,56,117,6,17,63,17,9,149, 87,95,12,65,55,48,10,18,19,46,12,4,1,41,51,61, 11,11,69,16,1,1,6,46,121,100,31,1,39,10,239,116, 117,86,179,5,207,103,42,38,118,0,0,5,0,95,0,78, 3,201,3,128,0,10,0,29,0,36,0,92,0,105,0,0, 1,55,22,23,22,23,22,23,7,38,39,3,38,35,34,7, 6,7,6,7,23,22,23,22,51,50,55,54,55,54,19,54, 55,38,47,1,6,7,6,35,34,39,55,22,51,50,55,54, 55,23,6,7,55,22,23,22,23,22,23,7,55,23,6,15, 1,22,31,1,7,38,39,6,7,6,7,6,35,34,39,38, 53,52,55,54,55,54,55,51,22,23,38,53,52,1,23,6, 15,1,22,23,7,38,53,52,55,54,3,59,30,60,20,2, 2,18,10,59,13,28,181,131,80,9,8,52,27,6,1,2, 13,34,48,78,24,24,63,18,8,62,58,21,11,27,39,2, 67,58,72,72,119,4,118,70,71,59,2,6,64,2,2,29, 58,17,4,4,13,15,32,17,14,90,53,1,2,9,134,36, 24,79,7,13,33,91,30,29,96,66,79,3,18,112,7,7, 48,80,105,7,253,233,64,41,6,1,1,15,65,17,2,6, 3,60,57,31,21,3,2,20,29,25,33,17,253,188,70,1, 4,29,6,4,14,36,23,33,4,8,26,11,1,240,11,5, 30,16,21,54,104,8,10,64,9,8,67,136,3,70,35,57, 31,16,4,4,16,37,12,4,64,19,9,165,101,95,84,55, 16,49,26,18,47,14,4,45,52,67,11,12,74,16,1,1, 6,52,106,111,47,1,76,11,248,135,127,102,185,5,235,105, 42,39,134,0,0,5,0,95,0,78,3,144,3,128,0,15, 0,31,0,50,0,98,0,111,0,0,1,34,7,6,21,20, 23,22,51,50,55,54,53,52,39,38,39,50,23,22,21,20, 7,6,35,34,39,38,53,52,55,54,3,38,35,34,7,6, 7,6,7,23,22,23,22,51,50,55,54,55,54,3,6,35, 34,39,55,22,51,50,55,54,55,23,7,54,55,23,6,15, 1,22,31,1,7,38,39,6,7,6,7,6,35,34,39,38, 53,52,55,54,55,54,55,51,22,23,38,53,52,1,23,6, 15,1,22,23,7,38,53,52,55,54,3,74,31,11,3,28, 8,9,30,12,4,29,8,9,41,20,9,37,15,18,41,19, 9,37,15,137,131,80,9,8,52,27,6,1,2,13,34,48, 78,24,24,63,18,8,5,58,72,72,119,4,118,70,71,59, 2,6,64,6,31,96,14,90,53,1,2,9,134,36,24,79, 7,13,33,91,30,29,96,66,79,3,18,112,7,7,48,80, 105,7,253,233,64,41,6,1,1,15,65,17,2,6,3,78, 29,8,9,30,12,3,27,8,10,31,12,3,24,36,16,18, 41,20,8,36,15,18,43,19,8,253,122,70,1,4,29,6, 4,14,36,23,33,4,8,26,11,1,165,8,10,64,9,8, 67,136,3,190,6,20,64,19,9,165,101,95,84,55,16,49, 26,18,47,14,4,45,52,67,11,12,74,16,1,1,6,52, 106,111,47,1,76,11,248,135,127,102,185,5,235,105,42,39, 134,0,0,1,0,114,0,47,3,162,3,59,0,48,0,0, 19,39,54,55,23,6,7,6,7,6,21,20,23,22,31,1, 50,55,54,55,54,55,54,53,52,39,55,22,23,7,38,39, 6,7,6,7,6,35,34,39,38,39,38,53,52,55,54,55, 6,162,1,147,160,30,140,59,37,27,54,23,35,100,55,63, 44,99,42,2,2,33,1,64,88,100,56,70,58,3,34,49, 134,61,75,33,33,117,54,39,63,68,146,97,2,224,65,1, 25,61,140,81,51,52,104,82,50,28,47,14,4,20,40,146, 7,7,123,229,37,75,13,245,159,33,117,123,172,125,188,55, 25,5,17,68,49,71,92,121,132,148,13,0,0,2,0,85, 0,13,3,209,3,107,0,8,0,72,0,0,1,55,22,23, 22,23,7,38,39,7,22,23,7,38,39,6,7,6,7,6, 7,34,39,38,39,38,53,52,55,54,55,54,55,6,35,39, 50,55,23,6,7,6,7,6,21,20,23,22,23,22,51,50, 55,54,55,54,55,54,53,52,39,55,23,55,22,23,22,23, 22,23,7,38,39,3,66,31,61,23,14,14,60,13,27,84, 67,103,57,92,51,3,37,53,143,71,81,136,82,18,13,41, 68,70,158,4,4,124,130,1,135,198,30,146,62,47,31,58, 25,36,106,31,31,70,50,106,47,3,3,35,1,64,15,13, 56,17,5,4,17,11,60,13,16,3,50,57,32,25,15,34, 25,33,17,51,178,168,33,157,117,200,136,203,59,26,1,66, 15,16,52,76,98,132,136,163,4,4,17,65,28,61,145,83, 62,62,113,88,55,31,51,16,5,22,43,156,9,10,136,242, 48,77,12,39,26,30,16,4,5,19,34,23,32,12,0,2, 0,85,0,13,3,195,3,83,0,15,0,82,0,0,1,34, 7,6,21,20,23,22,51,50,55,54,53,52,39,38,7,22, 23,7,38,39,6,7,6,7,6,7,34,39,38,39,38,53, 52,55,54,55,54,55,6,35,39,50,55,23,6,7,6,7, 6,21,20,23,22,23,22,51,50,55,54,55,54,55,54,53, 52,39,55,23,55,54,55,50,31,1,22,21,20,7,6,35, 34,3,104,30,12,3,25,10,10,30,12,4,28,8,67,44, 104,57,92,51,3,37,53,143,71,81,136,82,18,13,41,68, 70,158,4,4,124,130,1,135,198,30,146,62,47,31,58,25, 36,106,31,31,70,50,106,47,3,3,35,1,64,44,2,12, 55,41,20,8,1,37,15,18,37,3,5,28,8,9,29,12, 5,28,8,10,29,12,4,84,117,175,33,157,117,200,136,203, 59,26,1,66,15,16,52,76,98,132,136,163,4,4,17,65, 28,61,145,83,62,62,113,88,55,31,51,16,5,22,43,156, 9,10,136,242,48,77,12,116,27,47,5,36,20,7,6,41, 20,9,0,4,0,64,0,89,3,173,3,115,0,9,0,21, 0,54,0,62,0,0,1,55,22,23,22,23,7,38,39,38, 37,23,6,7,6,7,6,7,39,54,55,54,19,55,22,23, 22,21,20,7,6,7,6,7,6,35,34,39,38,39,55,22, 23,22,51,50,55,54,55,54,55,39,38,39,38,3,55,22, 23,7,38,39,38,2,170,42,74,27,40,76,55,77,33,25, 254,38,56,58,38,6,5,40,92,30,84,33,38,148,48,129, 44,74,1,8,57,19,22,17,19,43,53,43,84,37,77,42, 41,29,8,7,30,19,9,2,1,8,53,43,116,48,94,122, 36,88,38,46,1,211,49,65,31,46,120,34,119,38,30,40, 32,102,40,6,5,38,48,57,44,32,36,1,0,44,141,64, 105,81,10,11,76,42,14,6,5,28,21,60,53,55,21,21, 2,9,40,17,18,31,56,75,63,1,118,43,110,74,55,59, 32,40,0,6,0,29,0,59,3,206,3,144,0,8,0,19, 0,29,0,42,0,76,0,84,0,0,1,55,22,23,22,23, 7,38,39,7,55,22,23,22,23,22,23,7,38,39,23,55, 22,23,22,23,7,38,39,38,37,23,6,15,1,6,7,6, 7,39,54,55,54,19,55,22,23,22,21,20,7,6,7,6, 7,6,35,34,47,1,38,39,55,22,23,22,51,50,55,54, 55,54,55,53,38,39,38,3,55,22,23,7,38,39,38,2, 192,31,60,24,14,14,60,13,29,118,30,58,21,1,2,17, 11,60,13,27,31,43,79,29,45,80,54,78,42,35,254,8, 57,62,37,17,41,97,2,2,31,92,36,41,160,48,136,52, 79,1,10,59,21,24,18,18,42,54,8,39,98,37,85,44, 44,31,10,9,33,21,10,2,8,59,47,125,48,101,133,36, 91,45,38,2,189,57,31,26,15,34,25,33,17,32,58,29, 22,2,2,19,33,23,34,16,157,49,70,33,52,127,35,123, 48,39,34,33,106,41,18,39,51,1,1,57,48,35,38,1, 25,44,148,73,114,86,11,11,82,44,15,7,5,26,4,20, 67,54,60,23,23,3,9,43,20,20,32,61,85,67,1,149, 43,118,81,55,60,38,32,0,0,6,0,29,0,59,3,206, 3,144,0,14,0,32,0,42,0,55,0,89,0,97,0,0, 1,34,15,1,20,23,22,51,50,55,54,53,52,39,38,39, 50,31,1,22,21,20,15,1,6,35,34,39,38,53,52,55, 54,7,55,22,23,22,23,7,38,39,38,37,23,6,15,1, 6,7,6,7,39,54,55,54,19,55,22,23,22,21,20,7, 6,7,6,7,6,35,34,47,1,38,39,55,22,23,22,51, 50,55,54,55,54,55,53,38,39,38,3,55,22,23,7,38, 39,38,2,218,31,12,3,26,9,11,29,12,4,28,8,9, 42,19,7,1,36,20,7,6,42,20,8,36,16,14,43,79, 29,45,80,54,78,42,35,254,8,57,62,37,17,41,97,2, 2,31,92,36,41,160,48,136,52,79,1,10,59,21,24,18, 18,42,54,8,39,98,37,85,44,44,31,10,9,33,21,10, 2,8,59,47,125,48,101,133,36,91,45,38,2,181,28,17, 29,12,5,28,8,10,30,12,3,24,37,21,6,5,41,20, 8,1,37,15,18,41,20,8,251,49,70,33,52,127,35,123, 48,39,34,33,106,41,18,39,51,1,1,57,48,35,38,1, 25,44,148,73,114,86,11,11,82,44,15,7,5,26,4,20, 67,54,60,23,23,3,9,43,20,20,32,61,85,67,1,149, 43,118,81,55,60,38,32,0,0,1,0,76,0,180,3,162, 2,210,0,29,0,0,19,39,55,54,55,54,51,50,23,22, 31,1,22,23,22,23,7,38,39,38,47,1,38,47,1,34, 7,6,15,1,123,47,98,58,30,57,60,19,20,72,86,96, 82,156,6,14,42,153,72,21,19,120,67,36,23,27,29,31, 60,6,1,174,44,108,69,24,46,4,20,104,120,96,131,5, 12,49,129,78,22,22,140,73,10,3,20,20,71,7,0,3, 0,43,0,156,3,195,3,62,0,10,0,21,0,56,0,0, 1,55,22,23,22,23,22,23,7,38,39,7,55,22,23,22, 23,22,23,7,38,39,1,39,54,55,54,55,54,55,54,51, 50,23,22,31,1,22,23,22,23,7,38,39,38,47,1,38, 39,38,35,34,7,6,15,1,6,2,185,30,60,20,2,2, 18,10,59,13,28,119,29,58,17,4,4,13,15,61,12,25, 253,197,48,95,12,61,8,25,25,49,52,21,20,75,91,107, 88,164,9,18,42,161,76,26,23,129,73,40,12,13,30,33, 34,67,5,36,3,5,57,31,21,3,2,20,29,25,33,17, 31,58,31,16,4,4,16,37,23,34,16,254,243,44,103,14, 69,8,25,16,32,5,22,109,132,103,139,7,15,49,136,81, 27,27,151,80,11,4,22,22,79,6,42,0,0,3,0,43, 0,156,3,195,3,22,0,15,0,31,0,66,0,0,1,34, 7,6,21,20,23,22,51,50,55,54,53,52,39,38,39,50, 23,22,21,20,7,6,35,34,39,38,53,52,55,54,1,39, 54,55,54,55,54,55,54,51,50,23,22,31,1,22,23,22, 23,7,38,39,38,47,1,38,39,38,35,34,7,6,15,1, 6,2,210,31,11,3,28,8,9,30,12,4,29,8,9,41, 20,9,37,15,18,41,19,9,37,15,253,154,48,95,12,61, 8,25,25,49,52,21,20,75,91,107,88,164,9,18,42,161, 76,26,23,129,73,40,12,13,30,33,34,67,5,36,2,254, 29,8,9,30,12,3,27,8,10,31,12,3,24,36,16,18, 41,20,8,36,15,18,43,19,8,254,148,44,103,14,69,8, 25,16,32,5,22,109,132,103,139,7,15,49,136,81,27,27, 151,80,11,4,22,22,79,6,42,0,0,3,0,123,0,108, 3,162,3,104,0,19,0,75,0,88,0,0,37,38,35,34, 7,6,15,1,23,22,23,22,23,22,51,50,55,54,55,54, 3,6,35,34,39,55,22,51,50,51,54,55,23,6,15,1, 54,55,23,6,7,23,22,23,22,23,7,38,39,6,7,6, 15,1,38,39,38,39,52,55,54,63,1,22,23,38,39,7, 47,1,55,22,51,50,55,54,37,23,6,15,1,22,23,7, 38,53,52,55,54,2,160,115,73,10,10,49,25,5,3,11, 22,4,5,44,72,22,22,58,14,8,3,39,43,79,117,8, 118,64,11,10,79,152,12,86,25,4,53,114,18,127,58,3, 2,5,64,128,34,108,52,5,15,32,85,56,89,61,73,1, 3,18,117,49,74,90,5,2,85,114,88,6,144,65,39,33, 2,254,16,64,38,5,1,1,14,65,16,2,5,253,54,1, 4,26,7,15,24,19,4,3,30,3,8,22,11,2,50,4, 16,64,15,2,29,63,17,3,198,10,32,62,36,10,124,45, 61,34,80,55,66,28,29,21,46,12,4,1,41,51,61,11, 11,75,12,1,4,40,48,140,3,5,8,65,13,3,134,151, 10,239,116,117,86,179,5,207,103,42,38,118,0,4,0,95, 0,78,3,211,3,132,0,10,0,28,0,99,0,112,0,0, 1,55,22,23,22,23,22,23,7,38,39,3,38,35,34,7, 6,15,1,23,22,23,22,51,50,55,54,55,54,3,6,35, 34,39,55,22,51,50,51,54,55,23,6,7,6,7,54,55, 38,47,1,55,22,23,22,23,22,23,54,55,23,6,7,20, 23,22,23,7,38,39,6,7,6,7,6,35,34,39,38,53, 55,54,63,1,22,23,39,52,53,7,38,39,55,22,51,54, 55,50,55,52,37,23,6,15,1,22,23,7,38,53,52,55, 54,3,69,30,60,20,2,2,18,10,59,13,28,191,125,81, 11,11,53,27,6,2,12,35,48,78,24,24,62,19,10,5, 45,52,83,123,9,134,75,6,5,79,170,13,48,74,4,1, 46,47,11,25,41,29,58,17,4,4,12,16,12,16,18,127, 75,11,58,151,34,130,46,7,16,33,91,30,29,96,66,78, 2,20,124,49,81,102,7,88,75,150,7,159,64,43,37,1, 2,253,234,64,41,6,1,1,15,65,17,2,6,2,226,57, 31,21,3,2,20,29,25,33,17,254,32,60,1,6,26,10, 15,35,24,33,4,8,25,14,2,99,6,18,65,18,3,32, 64,9,13,148,71,9,12,29,15,23,58,31,16,4,4,14, 38,3,5,63,37,13,143,110,30,93,55,78,25,33,23,48, 14,4,45,52,66,23,79,14,1,4,46,193,9,9,4,1, 14,64,14,1,3,1,70,240,11,248,135,127,102,185,5,235, 105,42,39,134,0,4,0,95,0,78,3,196,3,132,0,14, 0,32,0,104,0,117,0,0,1,34,7,6,21,20,23,22, 51,50,55,54,53,52,39,3,38,35,34,7,6,15,1,23, 22,23,22,51,50,55,54,55,54,3,6,35,34,39,55,22, 51,50,51,54,55,23,6,7,6,7,54,55,38,39,52,55, 54,51,23,22,31,1,6,7,55,23,6,7,20,23,22,23, 7,38,39,6,7,6,7,6,35,34,39,38,53,55,54,63, 1,22,23,39,52,53,7,38,39,55,22,51,54,55,50,55, 52,37,23,6,15,1,22,23,7,38,53,52,55,54,3,92, 32,11,3,29,8,9,30,12,3,28,189,125,81,11,11,53, 27,6,2,12,35,48,78,24,24,62,19,10,5,45,52,83, 123,9,134,75,6,5,79,170,13,48,74,4,1,28,56,35, 3,38,15,17,21,35,10,3,1,9,9,18,127,75,11,58, 151,34,130,46,7,16,33,91,30,29,96,66,78,2,20,124, 49,81,102,7,88,75,150,7,159,64,43,37,1,2,253,234, 64,41,6,1,1,15,65,17,2,6,2,209,29,8,9,31, 11,3,28,8,9,31,12,254,28,60,1,6,26,10,15,35, 24,33,4,8,25,14,2,99,6,18,65,18,3,32,64,9, 13,148,71,5,14,22,39,43,19,8,3,11,38,23,17,14, 3,63,37,13,143,110,30,93,55,78,25,33,23,48,14,4, 45,52,66,23,79,14,1,4,46,193,9,9,4,1,14,64, 14,1,3,1,70,240,11,248,135,127,102,185,5,235,105,42, 39,134,0,2,0,88,0,59,3,35,3,169,0,17,0,88, 0,0,37,38,35,34,7,6,7,20,23,22,23,22,51,22, 55,54,55,54,3,55,23,7,55,50,23,7,39,6,7,6, 23,54,55,23,6,7,22,23,22,23,22,23,7,38,39,6, 7,6,7,6,35,38,39,38,39,38,53,52,55,54,55,54, 51,50,23,39,53,7,38,39,38,53,55,31,3,22,31,1, 55,51,53,54,55,6,7,39,54,1,204,82,85,66,51,19, 3,11,18,27,44,65,36,31,47,17,10,21,7,65,7,186, 37,74,2,224,39,35,6,3,93,131,9,160,69,1,18,5, 2,92,183,34,155,88,5,14,34,92,31,32,81,63,59,20, 7,3,11,48,60,80,83,84,20,94,129,39,23,1,64,2, 6,2,19,94,56,36,1,1,1,75,234,7,213,231,30,19, 9,7,12,16,25,18,30,1,10,15,30,17,2,119,110,4, 103,1,2,65,2,1,1,108,105,9,19,64,22,7,28,121, 37,26,38,112,56,96,40,31,26,61,20,7,1,41,38,51, 17,17,10,9,37,21,25,26,181,1,3,2,58,30,52,35, 1,51,22,4,26,6,1,1,152,31,32,5,24,64,24,0, 0,2,0,109,0,61,3,152,3,71,0,17,0,71,0,0, 1,6,7,6,7,6,7,20,51,48,23,54,51,54,55,54, 55,54,55,54,55,6,35,34,39,55,23,54,55,23,6,7, 22,23,54,55,23,6,7,22,23,7,38,39,6,7,6,7, 6,7,39,54,55,54,55,38,39,6,7,6,7,6,35,34, 39,38,39,52,55,54,55,54,1,116,106,60,12,8,9,2, 2,20,3,4,82,48,14,16,3,34,39,66,86,100,33,32, 4,72,90,111,51,74,38,101,161,8,6,65,6,9,27,96, 23,57,57,16,25,49,124,18,38,32,107,26,83,23,171,104, 49,23,35,47,60,36,35,27,23,1,5,4,10,73,1,157, 13,70,14,15,20,18,14,3,1,15,79,22,34,8,77,94, 188,26,3,65,3,2,34,53,212,93,9,50,53,115,3,135, 52,9,36,61,22,20,53,40,78,72,11,21,56,63,19,63, 96,56,3,102,32,49,26,28,22,23,34,15,17,19,20,136, 0,3,0,78,0,53,3,168,3,150,0,9,0,26,0,108, 0,0,1,55,22,23,22,23,7,38,39,38,5,38,39,38, 39,7,6,7,6,7,6,23,20,23,22,23,54,19,7,34, 39,55,22,51,50,55,52,39,55,22,23,54,55,23,6,7, 6,7,22,21,6,7,6,21,20,23,22,23,22,55,50,55, 54,55,54,55,39,38,39,55,22,21,20,7,6,15,1,35, 6,35,34,39,38,39,52,55,52,55,6,7,34,39,38,39, 38,39,38,53,52,55,54,55,54,51,50,23,22,23,54,2, 239,34,61,27,27,36,59,28,24,19,253,209,4,8,14,17, 12,8,7,20,10,4,1,8,5,19,40,63,84,21,70,4, 73,44,29,26,5,65,4,2,58,120,20,129,70,5,26,3, 1,26,10,37,2,2,36,95,36,51,161,53,56,2,4,2, 7,64,15,9,36,185,100,4,79,28,96,55,69,1,5,1, 23,22,8,7,43,23,2,3,12,6,14,47,28,29,8,7, 29,24,5,2,162,55,35,30,31,72,29,62,26,20,201,19, 19,31,7,2,4,7,17,36,16,20,31,27,13,29,27,1, 61,1,4,65,5,2,85,108,3,94,94,11,38,62,42,11, 136,92,24,23,45,82,32,16,41,26,2,1,24,1,3,9, 27,25,58,45,20,31,13,76,28,31,25,104,22,7,5,35, 47,81,20,22,3,3,17,1,2,10,62,7,8,38,39,27, 24,60,36,20,1,7,27,37,0,3,0,96,0,137,3,147, 3,88,0,7,0,24,0,83,0,0,1,22,23,54,55,54, 55,6,3,38,39,6,7,6,21,20,31,1,22,23,22,51, 50,55,54,3,38,39,55,22,23,54,63,1,23,7,23,22, 31,1,22,21,20,7,6,7,6,7,6,7,39,54,55,54, 55,54,55,53,38,39,38,39,38,35,34,7,6,7,23,7, 39,6,7,6,35,34,39,38,39,38,53,52,55,54,1,74, 26,60,16,48,3,2,84,13,76,38,84,20,8,35,15,5, 4,13,13,14,17,51,77,10,29,64,19,14,89,105,36,63, 30,65,166,69,9,33,67,6,7,65,143,25,62,2,144,58, 29,19,49,9,3,18,45,125,35,38,13,14,53,39,56,49, 36,56,69,30,33,33,27,53,24,12,72,35,2,84,76,84, 40,159,8,8,15,254,243,92,101,63,75,24,31,76,55,18, 4,3,8,9,28,1,131,36,134,13,98,51,44,16,135,17, 113,3,18,109,16,62,78,118,83,8,7,70,12,3,2,65, 6,26,14,20,52,99,50,48,33,83,22,6,1,184,99,66, 42,41,116,39,16,17,36,84,44,42,105,86,42,0,0,1, 0,137,0,63,3,79,3,139,0,74,0,0,1,54,55,23, 6,7,54,55,23,6,7,6,7,50,55,23,6,35,34,35, 7,22,23,22,23,22,23,22,55,50,55,54,55,54,53,38, 39,38,39,55,22,23,22,23,7,6,7,6,7,6,35,34, 39,38,39,38,39,38,53,52,55,38,39,55,22,23,55,54, 55,38,39,38,39,55,22,1,104,7,5,65,4,8,53,99, 11,118,52,1,33,69,130,9,132,66,9,9,1,1,5,20, 72,12,14,41,48,60,45,57,23,9,2,76,7,8,51,67, 19,19,1,2,15,78,12,12,62,77,61,55,94,43,11,6, 9,2,67,107,22,111,49,31,1,1,56,85,23,11,29,83, 2,211,90,94,4,89,92,2,19,64,21,2,11,185,17,64, 18,53,22,20,87,50,8,7,19,1,28,35,69,25,25,57, 99,8,11,40,84,45,43,41,40,92,62,9,8,39,25,44, 101,25,26,36,43,17,20,9,42,60,39,8,174,10,10,6, 40,11,5,58,42,0,0,1,0,101,0,68,3,77,2,235, 0,63,0,0,1,7,39,55,39,55,23,55,54,55,38,39, 55,22,23,54,51,50,23,22,23,22,23,7,6,7,6,7, 6,39,34,47,1,55,22,51,55,54,55,54,55,54,55,38, 39,38,47,1,38,35,34,7,22,23,7,38,39,6,7,22, 19,7,3,38,1,21,143,33,150,87,59,86,109,17,15,26, 55,45,70,29,54,45,33,31,95,46,24,3,3,17,90,35, 35,33,36,59,91,29,23,106,51,38,7,6,51,46,34,1, 3,61,25,25,6,23,25,29,32,6,25,59,20,15,86,67, 51,109,61,135,11,1,201,83,55,88,197,27,192,57,7,6, 31,50,47,63,40,18,9,27,66,36,40,30,75,54,21,10, 10,1,33,11,61,40,4,1,2,12,46,36,32,43,39,17, 6,2,6,9,10,51,29,44,24,38,38,117,254,231,23,1, 85,25,0,1,0,41,0,89,3,126,3,101,0,61,0,0, 19,7,39,55,39,55,23,54,55,38,39,55,22,23,54,51, 50,23,22,23,22,23,7,6,7,6,7,6,35,34,47,1, 55,22,23,55,54,55,54,55,54,55,38,39,38,39,38,35, 34,7,22,23,7,38,39,6,7,22,19,7,3,38,245,171, 33,178,103,59,101,80,94,23,74,44,82,34,64,52,38,35, 70,56,62,3,3,17,97,44,43,38,41,72,122,11,23,119, 61,41,11,11,61,52,42,2,4,69,36,34,27,29,36,43, 19,20,59,22,20,80,106,67,119,60,168,8,2,32,99,56, 104,231,27,227,44,43,29,69,48,76,46,21,10,18,50,55, 67,32,80,62,28,12,11,47,4,61,46,1,3,2,3,14, 53,43,41,51,46,24,8,7,12,35,42,28,47,35,33,59, 155,254,203,23,1,164,18,0,0,2,0,146,0,14,3,121, 2,244,0,11,0,73,0,0,37,55,54,55,54,53,38,39, 38,39,23,20,3,6,7,6,7,6,7,39,38,55,52,55, 54,55,23,6,7,54,55,54,55,54,55,38,39,55,23,21, 22,23,22,23,22,21,6,7,6,7,6,35,34,39,6,15, 1,39,54,55,38,39,38,39,38,39,55,22,23,22,23,54, 53,52,2,93,45,104,45,24,6,71,36,48,4,70,157,80, 61,54,7,11,65,15,1,2,7,40,63,50,1,37,63,88, 146,23,27,4,3,65,7,67,49,81,26,8,1,75,21,25, 65,81,31,30,54,125,6,33,104,45,6,3,63,49,6,11, 59,41,26,25,33,63,210,1,10,84,44,55,121,52,25,2, 111,188,1,39,28,99,75,195,24,42,5,145,81,38,34,92, 157,15,196,153,110,79,105,36,6,5,56,29,5,85,1,3, 30,51,108,36,39,115,74,20,15,37,6,58,72,4,55,63, 40,4,1,37,97,10,24,29,84,28,25,14,83,190,45,0, 0,2,0,96,0,29,3,176,3,115,0,18,0,81,0,0, 37,51,54,55,54,55,54,53,52,39,38,39,38,39,38,39, 22,21,20,3,6,7,6,7,6,7,39,38,53,52,55,54, 55,54,55,23,6,7,23,20,21,54,55,54,55,54,55,39, 55,23,22,23,22,23,22,21,6,7,6,7,6,35,34,39, 6,15,1,39,54,55,38,39,38,39,55,22,23,22,23,54, 53,52,2,101,52,64,43,79,22,6,54,19,21,4,3,37, 59,5,71,180,103,70,60,9,15,66,17,3,7,45,1,1, 64,51,6,1,49,72,88,160,38,44,8,64,9,78,58,88, 31,12,1,81,25,32,73,92,38,35,58,130,27,33,130,49, 85,64,6,9,58,46,24,34,48,76,246,5,26,46,98,27, 27,93,73,25,16,2,2,23,3,67,59,221,1,87,26,123, 87,214,33,58,5,178,87,42,38,92,188,4,3,15,200,133, 97,2,2,154,90,110,47,12,6,103,6,105,2,35,55,120, 45,46,126,84,27,18,42,8,62,79,16,55,80,45,40,128, 14,19,28,91,29,41,17,101,225,53,0,2,0,138,0,49, 3,8,3,36,0,19,0,59,0,0,37,38,35,34,7,6, 15,1,23,22,23,22,51,50,55,54,55,54,53,52,39,38, 53,52,55,23,6,7,22,51,50,55,23,6,35,34,39,20, 23,22,31,1,7,38,39,6,7,6,35,34,39,38,53,52, 55,54,55,54,51,50,1,203,76,65,21,20,50,19,3,1, 12,35,38,54,33,27,34,13,7,7,15,12,65,8,3,47, 44,74,95,13,98,90,44,42,21,82,147,16,41,134,67,6, 79,43,51,74,59,76,4,19,105,27,28,62,237,32,3,10, 23,6,15,40,27,30,12,15,29,17,33,7,81,97,127,106, 165,5,120,94,7,23,63,25,6,111,129,42,115,13,51,106, 39,90,42,22,45,57,65,14,14,67,18,5,0,2,0,86, 0,70,3,51,3,169,0,22,0,69,0,0,1,38,35,34, 7,6,7,6,7,23,22,23,22,23,22,51,50,55,54,55, 54,53,52,39,38,39,38,53,54,55,23,6,7,22,51,50, 55,23,6,35,34,39,23,22,23,22,23,22,23,7,38,39, 38,39,6,7,6,35,34,39,38,39,55,52,55,54,55,54, 51,50,1,202,91,77,25,23,58,24,5,1,1,9,39,5, 4,46,64,50,37,28,12,10,9,2,6,10,1,13,65,10, 2,57,52,92,105,14,117,99,55,50,2,5,16,99,162,6, 18,40,156,67,9,9,3,86,50,62,84,68,81,4,3,1, 21,118,30,32,73,1,30,39,4,11,28,5,5,16,43,33, 4,3,37,23,18,27,22,37,11,85,18,53,85,106,103,213, 4,169,84,8,27,64,29,9,101,74,113,49,128,5,14,51, 121,40,6,5,102,50,29,50,62,72,29,3,3,74,20,6, 0,2,0,122,0,52,3,87,3,137,0,46,0,56,0,0, 19,23,6,7,54,55,54,51,50,51,22,23,22,23,22,21, 20,15,1,6,7,6,35,34,39,55,22,51,54,55,54,55, 54,53,52,39,38,39,38,39,7,6,7,6,7,39,54,19, 55,22,23,22,23,7,38,39,38,201,65,24,32,118,58,110, 104,7,8,109,70,40,14,7,79,31,13,13,85,143,40,93, 5,82,45,125,67,63,30,14,4,15,68,44,47,43,102,135, 58,94,57,62,95,2,125,62,58,112,28,99,59,53,2,180, 8,190,119,90,32,61,6,67,38,49,25,27,98,87,30,11, 9,59,7,65,7,1,46,44,80,35,30,15,13,53,34,23, 2,1,12,96,41,80,36,220,1,65,65,4,15,14,53,59, 48,15,13,0,0,1,1,9,0,46,3,43,3,156,0,53, 0,0,1,23,6,15,1,20,23,54,55,54,55,54,51,50, 23,22,23,22,31,1,6,7,6,7,6,7,6,7,39,54, 55,54,55,54,55,54,39,52,39,38,39,7,6,7,6,7, 6,7,39,38,53,52,55,54,1,81,62,57,10,3,2,114, 116,23,24,41,34,14,13,46,26,19,6,4,1,89,15,18, 73,151,25,55,14,145,58,40,27,75,23,8,1,24,15,15, 17,15,17,114,104,24,59,67,9,6,10,3,156,19,180,112, 85,27,28,226,99,19,16,26,4,14,66,52,72,83,213,132, 24,19,78,38,6,12,63,32,32,22,29,83,169,52,52,97, 75,37,4,1,4,10,77,191,46,120,12,123,62,59,50,99, 0,1,0,163,0,65,3,113,3,102,0,77,0,0,1,55, 22,51,50,55,23,1,54,55,54,51,50,23,22,23,22,21, 20,7,6,7,6,7,6,35,34,39,38,53,52,55,54,55, 54,51,50,23,22,23,22,23,7,38,47,1,6,7,6,7, 6,21,20,23,22,51,50,55,54,55,54,55,39,38,47,2, 38,35,34,7,6,7,39,1,6,35,34,1,53,6,58,55, 108,128,32,254,170,25,91,95,71,58,47,83,37,19,1,13, 113,56,64,45,42,92,54,50,15,24,54,24,22,26,22,55, 28,2,10,62,28,29,23,42,22,3,2,4,29,36,64,33, 37,86,65,42,5,1,8,55,28,7,34,45,61,84,89,200, 39,1,159,62,73,65,3,15,64,7,30,59,254,173,11,31, 32,20,37,77,40,42,11,10,102,74,37,18,12,56,52,59, 31,25,38,16,7,9,22,84,8,34,19,95,12,3,1,22, 3,3,7,12,39,30,36,10,24,67,45,40,27,59,42,18, 3,15,28,30,102,54,1,154,10,0,0,2,0,77,0,89, 3,217,3,129,0,3,0,78,0,0,1,55,53,6,19,55, 23,7,55,23,7,21,54,55,54,51,50,23,22,23,22,23, 22,21,15,2,23,22,23,55,54,55,54,55,23,6,7,6, 7,6,35,34,39,38,47,1,52,55,54,53,52,39,38,39, 38,35,34,15,1,6,7,20,23,35,3,7,39,19,63,1, 53,6,35,34,39,63,1,54,1,12,9,9,13,3,65,3, 38,41,82,128,106,68,58,25,24,72,30,6,4,7,5,35, 2,1,5,11,17,10,6,24,18,64,14,16,12,19,33,39, 12,12,51,11,3,26,16,4,14,54,15,17,34,40,20,103, 162,3,65,3,146,54,151,50,2,67,90,21,22,2,103,53, 1,192,11,4,15,1,48,145,2,132,7,58,137,51,124,55, 35,7,23,69,14,15,26,35,63,204,50,13,29,3,3,4, 6,23,107,10,91,33,25,18,32,4,15,69,41,41,135,84, 43,24,18,57,16,4,17,10,53,165,169,169,1,14,162,38, 1,16,86,92,1,11,1,65,1,2,0,1,0,163,0,34, 3,119,3,102,0,47,0,0,1,55,22,51,50,55,23,1, 54,55,50,23,22,23,22,23,7,6,7,6,15,1,39,54, 55,54,55,54,55,54,53,52,53,38,39,38,39,38,35,34, 7,6,7,39,1,6,35,34,1,53,6,58,55,108,128,32, 254,199,129,104,46,43,95,52,30,4,1,13,120,79,149,37, 17,141,59,23,21,76,24,7,4,58,34,38,26,30,116,222, 37,53,40,1,159,62,73,65,3,15,64,7,30,59,254,202, 60,1,12,26,74,41,47,36,100,85,56,41,10,63,38,32, 12,15,54,66,20,17,3,3,49,45,26,11,7,122,20,31, 52,1,155,10,0,1,0,130,0,69,3,86,3,0,0,64, 0,0,1,55,23,6,21,54,55,23,15,1,21,54,55,54, 51,50,23,22,31,1,6,7,6,7,6,7,39,54,55,54, 55,54,53,52,39,38,39,38,35,34,7,6,7,6,7,20, 23,7,38,53,6,7,39,19,54,63,1,53,6,35,34,39, 63,1,54,1,50,3,65,2,10,15,41,69,1,56,105,64, 57,75,50,66,10,2,3,12,35,135,35,105,21,166,56,36, 12,9,24,13,17,30,51,32,37,14,14,85,101,2,65,2, 55,63,55,161,7,6,1,57,72,20,19,1,90,42,2,135, 121,1,74,35,1,4,59,115,13,1,43,42,25,43,56,96, 44,35,31,90,56,15,34,61,55,43,27,32,22,29,53,47, 25,14,27,11,4,6,34,99,98,198,1,154,76,61,77,37, 1,31,11,11,72,1,8,1,65,1,2,0,0,1,0,77, 0,89,3,135,3,129,0,58,0,0,1,55,23,7,55,23, 7,21,54,55,54,51,50,23,22,31,1,6,7,6,7,6, 7,39,54,55,54,55,54,39,52,39,38,39,38,35,34,7, 6,7,20,23,35,3,6,7,39,19,54,63,1,53,6,35, 34,39,63,1,54,1,25,3,65,3,38,41,82,88,105,72, 66,84,56,73,14,2,2,15,39,148,45,124,20,185,67,47, 16,11,1,43,9,11,38,62,53,59,97,121,3,65,3,37, 109,54,180,11,10,2,67,90,21,22,2,103,53,2,240,145, 2,132,7,58,137,37,71,42,29,48,63,107,47,43,38,100, 63,20,40,62,60,49,34,41,27,35,82,59,13,9,33,24, 39,118,171,174,1,22,40,129,36,1,67,18,18,92,1,11, 1,65,1,2,0,3,0,56,0,79,3,165,3,105,0,14, 0,32,0,102,0,0,37,38,35,34,7,6,7,23,22,23, 22,51,50,55,54,1,6,7,6,7,6,21,22,23,22,23, 22,23,54,55,54,55,54,63,1,6,7,39,54,55,23,7, 54,51,50,23,22,23,22,21,20,7,6,7,6,35,34,39, 38,39,38,47,1,52,55,54,55,54,55,51,22,23,22,23, 54,53,52,47,1,38,39,38,7,34,7,6,15,1,6,7, 6,35,34,35,38,39,38,39,38,53,52,55,54,2,254,92, 62,38,35,23,3,5,16,30,22,34,70,61,8,254,147,148, 73,3,3,47,1,9,13,22,15,14,19,29,10,86,33,63, 88,129,173,6,164,188,43,93,47,44,87,67,104,44,23,88, 26,32,78,81,40,35,7,8,73,14,2,1,14,93,19,21, 41,67,98,5,6,54,69,30,14,17,52,77,62,68,50,54, 61,28,30,28,32,3,2,41,36,30,15,12,63,97,197,61, 20,14,11,13,28,14,13,41,5,1,105,48,74,4,3,52, 59,28,30,41,28,21,3,5,53,21,194,73,124,164,34,13, 65,10,50,56,170,6,25,40,98,49,56,114,91,28,21,51, 13,2,4,33,55,26,5,6,67,24,5,2,8,63,3,4, 69,72,88,58,21,9,6,21,1,13,97,121,141,56,34,29, 2,48,39,49,37,37,89,70,106,0,0,4,0,107,0,30, 3,177,3,142,0,9,0,23,0,47,0,128,0,0,37,55, 22,23,22,23,7,38,39,38,37,54,55,39,38,47,1,6, 7,6,21,20,23,22,31,1,54,55,54,55,54,53,52,39, 38,35,34,7,6,7,55,22,23,22,21,20,7,6,39,6, 7,39,54,55,39,38,39,55,22,51,50,55,23,6,7,54, 55,54,51,50,23,22,21,20,7,6,7,6,35,34,39,6, 7,6,15,2,54,51,50,23,22,23,22,23,51,54,55,54, 55,23,6,7,6,35,34,39,38,39,38,39,38,39,38,35, 34,7,6,7,6,7,39,54,55,38,39,38,53,38,2,231, 36,71,30,30,35,58,36,20,23,254,87,59,9,22,8,8, 29,18,10,21,7,11,102,52,99,66,51,15,5,11,20,74, 28,31,91,129,47,71,30,8,43,14,147,37,74,39,182,192, 109,57,76,6,122,58,43,123,23,186,139,110,115,45,35,97, 40,24,8,22,68,87,121,52,54,53,9,7,29,18,2,47, 36,42,32,23,44,28,15,16,17,22,28,62,43,72,26,46, 35,15,13,30,37,2,1,39,26,15,18,17,21,11,13,52, 103,35,136,88,28,16,16,1,247,54,46,34,34,72,29,70, 22,26,162,54,32,11,3,1,1,1,6,12,28,13,11,18, 33,3,1,48,39,62,19,20,30,17,29,5,15,57,3,3, 46,19,18,35,48,16,159,17,38,53,193,134,2,2,8,65, 12,11,63,128,119,48,20,7,58,34,48,28,30,84,52,62, 12,50,8,1,23,11,1,13,18,11,46,30,7,4,14,17, 55,49,60,18,29,4,8,42,2,1,42,9,5,5,2,4, 14,49,56,112,80,19,27,27,31,54,0,1,0,148,0,43, 3,119,3,170,0,84,0,0,1,38,39,55,22,23,54,55, 23,6,7,51,54,55,54,51,23,6,7,39,6,7,54,55, 54,23,50,23,22,23,54,55,23,6,7,22,21,7,47,1, 38,39,6,7,6,7,6,21,20,23,22,23,22,23,50,23, 22,23,7,38,39,38,39,38,39,38,53,54,55,54,55,54, 55,38,35,34,7,6,7,6,7,39,54,55,54,1,62,51, 100,9,110,58,28,33,64,33,24,88,60,184,2,3,10,199, 92,81,41,45,57,85,45,34,56,35,9,8,92,148,17,149, 81,12,1,65,1,2,5,112,69,26,9,16,5,1,1,25, 109,3,3,67,198,5,192,81,128,43,7,5,17,1,26,39, 152,19,25,14,24,28,34,88,161,7,9,46,123,43,2,2, 136,5,14,65,16,5,76,151,14,147,70,3,27,1,64,31, 2,2,94,66,31,23,12,1,30,8,9,30,40,63,40,27, 54,87,50,1,107,34,27,38,57,21,18,26,26,14,13,2, 2,40,23,1,15,16,64,14,17,25,53,9,9,28,35,44, 42,71,67,9,10,6,8,23,105,5,6,48,168,88,4,0, 0,1,0,76,0,75,3,142,3,154,0,52,0,0,1,20, 23,22,23,51,54,55,54,55,54,55,23,6,7,6,7,6, 35,34,39,38,47,1,38,39,34,7,6,7,6,7,39,18, 55,54,55,23,6,3,51,7,51,54,55,54,51,50,23,22, 23,22,23,2,66,10,11,21,20,40,40,53,81,3,4,49, 79,49,13,14,68,51,18,17,80,7,1,1,12,3,21,33, 58,79,179,51,184,91,59,104,59,81,151,1,1,1,63,44, 24,24,15,14,14,10,27,1,1,104,133,39,39,6,5,26, 34,95,3,5,42,93,38,10,9,43,5,24,158,96,71,34, 7,15,50,67,189,40,1,17,158,102,213,29,169,254,243,14, 55,20,12,5,6,12,33,73,0,2,2,255,2,251,3,219, 3,180,0,8,0,19,0,0,1,55,22,23,22,23,7,38, 39,7,55,22,23,22,23,22,23,7,38,39,3,76,31,60, 24,14,14,60,13,29,118,30,58,21,1,2,17,11,60,13, 27,3,123,57,31,26,15,34,25,33,17,32,58,29,22,2, 2,19,33,23,34,16,255,255,2,255,2,251,3,219,3,180, 16,6,7,221,0,0,0,1,0,207,0,44,3,28,2,150, 0,30,0,0,1,54,55,5,34,35,39,37,51,23,6,7, 6,7,39,6,7,6,15,1,39,54,55,54,55,54,53,52, 53,55,20,2,15,119,62,254,59,24,23,1,1,250,54,29, 67,49,46,95,12,2,38,36,100,37,41,98,34,14,9,33, 65,1,232,42,67,2,65,2,65,74,34,31,35,33,149,80, 73,80,30,51,77,46,19,19,68,159,17,27,1,27,0,1, 0,162,0,63,3,72,3,1,0,36,0,0,1,54,55,54, 55,4,35,53,50,37,23,6,7,6,7,6,7,39,20,7, 6,7,6,7,6,7,39,54,55,54,55,54,53,52,39,55, 23,2,14,143,79,2,2,254,120,198,217,1,176,29,78,44, 7,6,53,109,17,44,1,1,42,114,15,28,40,105,37,25, 14,39,1,65,1,2,53,49,86,2,2,2,65,2,65,86, 31,5,4,36,40,47,178,94,2,2,84,92,12,22,51,84, 44,30,30,80,178,24,34,1,53,0,0,1,0,168,0,77, 2,188,2,209,0,19,0,0,1,6,15,1,39,54,55,54, 55,54,55,54,55,23,6,7,6,7,17,35,1,201,82,172, 8,27,167,70,17,15,79,111,8,12,53,105,56,8,9,65, 1,152,62,78,4,59,77,51,12,12,65,153,11,17,39,144, 57,9,8,254,125,0,0,1,0,118,0,98,2,215,3,71, 0,19,0,0,1,6,15,1,39,54,55,54,55,54,55,54, 55,23,6,7,6,7,17,35,1,199,93,188,29,27,186,81, 24,21,90,120,12,22,53,113,62,16,16,65,1,234,72,87, 13,59,86,56,17,17,73,165,17,31,38,156,66,17,15,254, 63,0,0,1,0,169,0,19,3,42,3,15,0,25,0,0, 1,53,51,21,33,6,7,6,7,6,7,6,7,39,54,55, 54,55,54,55,54,55,33,21,35,17,1,181,65,1,52,22, 6,27,62,67,155,27,60,21,158,62,36,23,60,27,4,4, 254,9,65,2,96,175,175,176,32,138,75,81,57,10,20,61, 54,41,25,28,72,187,24,32,196,1,5,0,0,1,0,122, 0,35,3,85,3,146,0,24,0,0,1,53,51,21,33,6, 7,6,7,6,15,1,39,54,55,54,55,54,55,54,55,33, 21,35,17,1,176,65,1,100,24,12,31,67,74,166,115,21, 182,74,43,27,71,31,4,5,253,175,65,2,194,208,208,195, 57,145,81,89,64,40,62,61,50,28,33,87,215,31,39,231, 1,40,0,1,0,140,0,163,3,78,2,160,0,11,0,0, 1,35,53,33,21,35,17,33,21,33,53,33,1,189,221,2, 8,234,1,80,253,62,1,49,2,95,65,65,254,133,65,65, 0,1,0,83,0,202,3,132,3,12,0,11,0,0,1,33, 53,33,21,33,17,33,21,33,53,33,1,186,254,250,2,90, 254,237,1,137,252,207,1,103,2,203,65,65,254,64,65,65, 0,1,0,132,0,78,3,52,3,21,0,57,0,0,1,5, 34,35,39,37,50,51,38,39,55,23,55,50,51,23,7,35, 22,23,22,21,20,7,6,7,34,7,6,35,47,1,55,22, 51,50,55,54,55,54,55,54,53,52,39,38,39,6,7,6, 15,1,39,54,55,54,55,54,1,205,254,236,8,7,1,1, 68,12,11,6,11,65,18,227,5,5,1,222,10,13,15,8, 13,25,61,2,3,20,22,42,53,17,54,27,13,9,31,15, 2,1,6,7,13,13,86,63,59,132,14,39,130,54,5,6, 62,2,25,2,65,2,66,114,7,186,1,65,1,133,111,61, 15,34,26,54,19,1,5,4,13,63,15,3,7,26,3,2, 12,22,21,45,100,132,152,73,69,103,10,51,102,59,7,6, 72,0,0,1,0,77,0,104,3,102,3,152,0,54,0,0, 1,34,7,53,37,39,55,23,37,50,51,23,5,34,35,22, 23,22,21,20,7,6,7,6,35,34,39,55,22,51,50,55, 54,55,54,55,54,53,52,39,38,39,6,7,6,7,6,15, 1,39,54,55,54,55,54,1,208,116,230,1,151,21,65,21, 1,9,7,7,1,254,251,7,6,19,14,9,14,30,72,22, 25,33,76,17,66,28,16,12,39,19,1,1,7,8,15,17, 102,73,2,2,73,153,10,40,153,68,3,3,69,2,122,2, 65,3,214,6,220,2,65,2,186,101,70,18,38,29,62,20, 6,19,63,16,3,9,34,2,2,15,25,24,54,117,167,183, 85,3,2,85,117,8,51,118,76,4,3,81,0,1,0,136, 0,119,3,2,3,140,0,49,0,0,1,38,35,53,50,23, 54,53,52,39,55,21,6,7,5,50,51,6,7,6,7,6, 7,6,7,47,2,55,22,51,50,55,54,55,54,55,39,34, 35,6,7,6,7,6,7,39,54,55,54,1,134,68,135,139, 69,4,1,65,1,1,1,36,9,8,32,12,18,25,9,12, 35,54,37,46,18,23,50,21,27,21,28,20,17,17,229,6, 5,13,34,44,123,16,43,47,111,42,85,2,105,1,65,1, 65,88,32,40,1,182,23,21,1,254,77,109,44,17,13,41, 3,3,13,7,61,19,22,31,119,105,151,1,113,83,110,131, 17,44,46,114,60,122,0,3,0,109,0,90,4,3,3,173, 0,8,0,19,0,65,0,0,1,55,22,23,22,23,7,38, 39,7,55,22,23,22,23,22,23,7,38,39,5,34,39,53, 51,54,53,52,39,55,21,7,5,50,51,2,7,6,7,6, 7,6,7,39,38,39,55,22,51,50,55,54,55,54,55,38, 35,6,7,6,15,1,39,54,55,54,3,116,31,61,23,14, 14,60,13,27,120,30,56,17,5,4,17,11,60,12,26,254, 47,148,74,227,4,1,65,2,1,58,10,10,34,13,19,25, 11,13,39,56,35,22,51,22,56,23,31,22,32,20,18,20, 88,177,13,37,49,133,63,46,116,45,98,3,70,57,32,25, 15,34,25,33,17,31,58,30,16,4,5,19,34,23,34,16, 130,1,64,61,86,32,66,1,199,48,1,254,240,83,117,46, 19,15,43,2,2,3,19,61,21,25,35,128,110,170,1,123, 90,119,141,66,46,120,62,138,0,1,0,164,0,111,3,52, 3,131,0,19,0,0,1,7,39,55,39,55,23,55,23,7, 23,37,23,5,19,7,3,5,39,37,1,118,186,24,181,92, 58,95,199,25,195,83,1,20,26,254,240,145,58,147,254,224, 25,1,27,2,117,75,60,73,183,29,188,81,60,79,166,117, 59,116,254,223,29,1,36,122,60,121,0,3,0,137,0,81, 3,166,3,172,0,10,0,21,0,41,0,0,1,55,22,23, 22,23,22,23,7,38,39,7,55,22,23,22,23,22,23,7, 38,39,5,7,39,55,39,55,23,55,23,7,23,37,23,5, 19,7,3,5,39,37,3,24,30,60,20,2,2,18,10,59, 13,28,119,29,58,17,4,4,13,15,61,12,25,254,120,203, 25,199,101,59,103,218,24,213,93,1,44,26,254,215,158,58, 160,254,199,26,1,54,3,115,57,31,21,3,2,20,29,25, 33,17,31,58,31,16,4,4,16,37,23,34,16,162,83,61, 80,200,29,205,88,60,86,184,127,59,127,254,198,29,1,62, 133,59,132,0,0,1,0,107,0,57,3,29,3,86,0,37, 0,0,1,6,7,6,15,1,39,54,55,54,55,54,55,54, 55,23,6,7,37,51,23,6,7,6,7,6,7,6,7,39, 54,55,54,55,54,55,54,55,1,139,24,32,49,115,28,40, 115,44,10,9,46,44,2,3,63,16,9,1,62,17,44,82, 63,37,41,100,201,33,63,26,192,79,62,43,89,87,10,13, 2,169,62,49,72,89,22,51,88,56,12,13,69,161,7,10, 17,60,30,5,64,201,94,55,43,101,94,15,28,59,86,53, 40,45,92,201,23,31,0,3,0,77,0,23,3,234,3,135, 0,8,0,19,0,57,0,0,1,55,22,23,22,23,7,38, 39,7,55,22,23,22,23,22,23,7,38,39,5,6,7,6, 7,6,7,39,54,55,54,55,54,55,54,55,23,6,7,37, 23,6,7,6,7,6,7,6,7,39,54,55,54,55,54,55, 54,55,3,91,31,60,24,14,14,60,13,29,118,30,58,21, 1,2,17,11,60,13,27,254,75,25,36,52,118,10,27,40, 117,45,17,14,50,47,2,4,63,20,9,1,112,44,87,65, 42,47,103,205,35,85,26,209,92,62,44,99,95,10,13,3, 78,57,31,26,15,34,25,33,17,32,58,29,22,2,2,19, 33,23,34,16,69,67,55,76,93,7,21,51,90,52,21,20, 75,170,10,13,18,72,28,6,64,213,100,64,49,105,97,17, 38,60,92,63,42,46,103,221,24,31,0,1,0,105,0,74, 3,129,3,122,0,34,0,0,1,33,6,15,1,39,54,55, 54,55,54,55,54,53,23,6,7,33,21,35,6,7,6,7, 6,15,1,39,54,55,54,55,54,55,54,2,77,254,238,40, 110,11,49,118,40,7,6,29,25,1,64,22,26,2,38,243, 14,34,13,17,46,113,49,38,111,42,22,15,48,18,1,2, 111,72,126,13,43,136,72,13,12,62,135,3,2,11,123,68, 65,190,92,35,30,81,85,36,53,81,48,26,27,82,196,16, 0,3,0,75,0,42,3,226,3,153,0,10,0,21,0,55, 0,0,1,55,22,23,22,23,22,23,7,38,39,7,55,22, 23,22,23,22,23,7,38,39,7,33,6,15,1,39,54,55, 54,55,54,55,23,6,7,33,21,33,6,7,6,7,6,7, 6,7,39,54,55,54,55,54,55,54,3,84,30,60,20,2, 2,18,10,59,13,28,119,29,58,17,4,4,13,15,61,12, 25,218,254,212,46,120,9,49,130,44,6,5,33,27,64,24, 30,2,88,254,246,15,34,15,20,50,122,17,35,38,118,45, 26,17,54,18,2,3,90,57,31,21,3,2,20,29,25,33, 17,31,58,31,16,4,4,16,37,23,34,16,145,80,137,11, 42,149,82,11,11,70,149,11,137,73,65,202,97,42,35,87, 92,13,25,52,87,52,29,30,94,217,15,0,0,1,0,187, 0,163,2,251,2,241,0,7,0,0,19,53,33,17,33,53, 33,17,194,2,57,253,192,1,255,2,176,65,253,178,65,1, 204,0,0,3,0,162,0,138,3,216,3,150,0,8,0,19, 0,27,0,0,1,55,22,23,22,23,7,38,39,7,55,22, 23,22,23,22,23,7,38,39,5,53,33,17,33,53,33,17, 3,74,30,62,22,18,10,59,13,29,118,29,59,20,2,2, 14,14,61,12,27,253,133,2,100,253,148,2,43,3,93,57, 32,25,20,29,25,33,18,33,58,29,22,2,2,17,35,23, 34,16,78,65,253,136,65,1,246,0,0,1,0,153,0,51, 3,92,3,94,0,30,0,0,1,35,53,51,53,51,21,51, 54,55,23,6,7,51,21,35,6,7,6,15,1,39,54,55, 54,55,54,55,35,21,35,1,75,178,178,65,249,3,2,65, 3,1,149,153,14,53,47,118,44,44,112,45,22,15,45,15, 245,65,2,83,65,201,201,65,137,1,168,33,65,184,112,99, 109,40,48,101,64,31,32,93,175,236,0,3,0,125,0,16, 3,194,3,145,0,8,0,19,0,51,0,0,1,55,22,23, 22,23,7,38,39,7,55,22,23,22,23,22,23,7,38,39, 5,35,53,51,53,51,21,33,54,55,23,20,7,51,21,35, 6,7,6,7,6,7,39,54,55,54,55,54,55,33,17,35, 3,51,31,60,24,14,14,60,13,29,118,30,58,21,1,2, 17,11,60,13,27,254,50,195,195,65,1,18,4,2,64,4, 165,169,16,56,49,123,15,38,44,116,48,27,19,50,15,254, 242,65,3,88,57,31,26,15,34,25,33,17,32,58,29,22, 2,2,19,33,23,34,16,173,65,220,220,72,149,1,123,97, 65,202,119,103,116,14,35,49,103,67,38,39,105,188,254,255, 0,3,0,138,0,81,3,158,3,46,0,17,0,27,0,37, 0,0,37,39,54,55,54,55,54,55,54,55,23,6,7,6, 7,6,7,6,3,55,22,23,22,23,7,38,39,38,19,55, 22,23,22,23,7,38,39,38,1,18,21,198,86,47,36,95, 106,17,31,57,100,60,51,54,100,197,24,202,7,93,41,46, 70,41,71,64,36,43,38,69,31,30,62,56,52,32,27,81, 62,67,50,27,30,80,186,30,56,32,181,78,65,46,83,72, 8,1,101,65,11,17,20,59,50,62,18,9,1,47,53,50, 33,33,97,34,85,34,29,0,0,5,0,109,0,50,3,190, 3,105,0,8,0,19,0,37,0,49,0,59,0,0,1,55, 22,23,22,23,7,38,39,7,55,22,23,22,23,22,23,7, 38,39,1,39,54,55,54,55,54,55,54,55,23,6,7,6, 7,6,7,6,3,55,22,23,22,23,22,23,7,38,39,38, 19,55,22,23,22,23,7,38,39,38,2,202,31,60,24,14, 14,60,13,29,118,30,58,21,1,2,17,11,60,13,27,254, 90,21,202,84,64,47,102,112,20,36,57,104,60,58,63,109, 210,31,214,6,98,43,2,2,49,76,41,69,41,36,7,39, 77,30,37,62,56,55,36,27,3,48,57,31,26,15,34,25, 33,17,32,58,29,22,2,2,19,33,23,34,16,253,80,61, 70,45,34,40,86,194,35,66,31,189,81,77,52,91,76,11, 1,132,64,10,18,1,1,21,63,51,58,18,15,1,77,53, 57,32,40,101,33,90,39,29,0,1,0,82,0,94,3,94, 3,19,0,36,0,0,1,6,7,6,15,1,39,54,55,54, 55,54,55,54,55,6,5,39,37,50,51,23,6,7,6,7, 22,23,22,31,1,7,38,39,38,39,38,1,201,2,6,96, 188,48,35,183,81,30,26,98,127,2,1,146,254,216,1,1, 182,22,21,38,122,80,2,1,63,53,67,170,8,26,158,63, 21,18,52,1,104,3,6,101,124,32,54,121,73,27,27,104, 218,2,2,2,2,65,4,64,211,98,2,2,82,43,53,73, 3,60,70,41,14,14,41,0,0,3,0,49,0,63,3,174, 3,212,0,8,0,19,0,57,0,0,1,55,22,23,22,23, 7,38,39,7,55,22,23,22,23,22,23,7,38,39,1,6, 7,6,7,39,54,55,54,55,54,55,54,55,5,34,35,53, 37,54,51,23,6,7,6,7,22,23,22,23,22,23,7,38, 39,38,39,38,3,31,31,61,23,14,14,60,13,27,120,30, 56,17,5,4,17,11,60,12,26,254,202,116,221,15,17,36, 197,90,32,28,105,136,4,4,254,72,22,21,1,214,26,25, 38,129,80,8,7,70,58,70,173,8,14,26,179,80,11,10, 57,3,155,57,32,25,15,34,25,33,17,31,58,30,16,4, 5,19,34,23,34,16,254,19,124,144,10,11,55,129,80,29, 29,111,232,7,7,4,65,4,1,65,221,102,9,9,90,46, 56,75,4,6,59,76,57,8,8,45,0,1,0,95,0,80, 3,30,3,39,0,43,0,0,19,7,39,55,54,55,23,6, 7,37,23,6,7,6,7,39,54,55,54,55,5,23,22,23, 22,23,22,23,22,51,50,55,23,6,35,34,39,38,39,38, 39,38,53,52,250,137,18,156,2,6,65,3,4,1,136,52, 40,41,30,80,48,72,30,33,30,254,141,1,2,5,7,27, 18,50,52,86,74,155,5,165,70,91,61,78,37,28,9,9, 1,248,42,63,47,75,160,2,66,148,118,52,139,71,51,91, 44,80,51,58,97,112,150,60,42,65,21,13,14,12,12,65, 13,14,19,43,35,72,73,128,19,0,0,3,0,63,0,48, 3,196,3,112,0,10,0,21,0,65,0,0,1,55,22,23, 22,23,22,23,7,38,39,7,55,22,23,22,23,22,23,7, 38,39,5,7,39,55,54,55,23,6,7,37,23,6,7,6, 7,39,54,55,54,55,5,23,22,23,22,23,22,23,22,51, 50,55,23,6,35,34,39,38,39,38,39,38,53,52,3,54, 30,60,20,2,2,18,10,59,13,28,119,29,58,17,4,4, 13,15,61,12,25,253,214,152,18,171,2,6,65,6,1,1, 172,53,47,41,33,86,49,81,30,34,36,254,104,1,3,5, 8,30,20,54,55,91,81,171,5,178,77,97,65,84,39,29, 11,9,3,55,57,31,21,3,2,20,29,25,33,17,31,58, 31,16,4,4,16,37,23,34,16,238,45,62,52,85,171,3, 157,77,129,52,156,72,57,96,44,88,54,57,116,123,176,59, 40,70,24,15,16,13,14,65,14,15,18,48,36,78,81,138, 21,0,0,2,0,137,0,69,3,50,3,38,0,16,0,26, 0,0,1,23,6,7,6,7,6,15,1,39,54,55,54,55, 54,55,54,37,55,22,23,22,23,7,38,39,38,2,243,63, 58,39,35,44,75,157,72,37,155,65,39,29,76,63,10,253, 167,45,67,29,34,46,59,44,29,27,3,37,17,217,91,83, 61,104,113,50,54,107,65,39,40,106,226,34,19,47,63,41, 48,101,27,97,41,37,0,4,0,110,0,36,3,221,3,220, 0,8,0,19,0,36,0,46,0,0,1,55,22,23,22,23, 7,38,39,7,55,22,23,22,23,22,23,7,38,39,7,23, 6,7,6,7,6,15,1,39,54,55,54,55,54,55,54,37, 55,22,23,22,23,7,38,39,38,3,79,30,62,22,18,10, 59,13,29,118,29,59,20,2,2,14,14,61,12,27,32,63, 62,44,37,47,78,164,86,37,162,69,47,34,83,68,11,253, 118,44,71,33,34,52,59,51,28,24,3,163,57,32,25,20, 29,25,33,18,33,58,29,22,2,2,17,35,23,34,16,24, 17,232,102,88,66,109,118,61,54,112,67,46,47,116,242,40, 22,47,65,47,46,115,26,109,40,33,0,1,0,115,0,29, 3,61,3,153,0,41,0,0,1,6,7,6,7,39,54,55, 54,55,54,55,54,55,23,7,37,23,6,7,6,7,6,15, 1,39,54,55,54,55,38,39,38,39,55,22,23,22,23,54, 55,6,1,107,46,141,9,9,43,97,38,6,6,47,50,2, 3,63,39,1,141,44,96,70,35,37,90,180,71,33,165,63, 87,54,72,46,34,83,15,87,41,48,80,59,77,135,2,195, 119,123,7,8,50,83,51,9,9,73,178,8,10,18,130,9, 64,229,109,53,42,103,110,43,55,102,50,70,78,50,21,15, 20,63,21,18,21,55,96,183,4,0,0,3,0,86,255,249, 3,221,3,217,0,10,0,21,0,68,0,0,1,55,22,23, 22,23,22,23,7,38,39,7,55,22,23,22,23,22,23,7, 38,39,5,6,7,6,15,1,39,54,55,54,55,54,55,54, 55,23,6,7,54,37,23,6,7,6,7,6,7,6,7,39, 54,55,54,55,38,39,38,39,55,22,23,22,23,54,55,5, 6,3,79,30,60,20,2,2,18,10,59,13,28,119,29,58, 17,4,4,13,15,61,12,25,254,50,22,29,46,106,19,42, 100,38,12,9,49,53,3,6,62,22,21,145,1,34,44,99, 71,42,46,93,185,25,64,34,185,84,80,53,115,111,15,16, 14,97,42,52,88,63,87,254,112,17,3,160,57,31,21,3, 2,20,29,25,33,17,31,58,31,16,4,4,16,37,23,34, 16,124,52,46,73,90,17,50,87,49,15,14,76,183,10,22, 17,85,60,4,6,63,238,112,67,53,108,114,16,38,55,111, 71,68,77,83,26,4,3,64,24,18,23,61,101,207,10,1, 0,1,0,113,0,86,3,102,3,172,0,35,0,0,1,33, 53,33,39,38,39,6,7,39,54,55,54,55,23,6,7,22, 21,20,21,33,21,33,6,7,6,7,6,7,39,54,55,54, 55,54,1,196,254,173,1,87,2,2,3,91,212,10,202,97, 103,178,25,151,77,9,1,92,254,161,10,38,44,117,18,42, 38,111,41,31,18,31,1,244,65,127,36,41,26,34,64,32, 27,30,78,60,65,26,140,66,9,9,65,114,78,89,89,14, 30,52,82,46,35,36,63,0,0,3,0,82,0,54,3,209, 3,205,0,8,0,19,0,55,0,0,1,55,22,23,22,23, 7,38,39,7,55,22,23,22,23,22,23,7,38,39,1,33, 53,33,39,38,39,6,7,39,54,55,54,55,23,6,7,22, 21,20,21,33,21,33,6,7,6,7,6,7,39,54,55,54, 55,54,3,66,31,61,23,14,14,60,13,27,120,30,56,17, 5,4,17,11,60,12,26,254,164,254,143,1,117,1,2,4, 98,233,10,218,105,107,197,26,158,91,10,1,123,254,130,10, 42,47,123,20,47,39,123,49,28,18,35,3,140,57,32,25, 15,34,25,33,17,31,58,30,16,4,5,19,34,23,34,16, 254,185,65,118,44,64,28,38,65,33,31,30,86,60,68,31, 145,71,15,15,65,126,83,95,95,16,34,53,89,57,34,35, 70,0,0,3,0,158,0,48,3,45,2,191,0,17,0,23, 0,29,0,0,1,23,6,7,6,7,6,7,6,7,39,54, 55,54,55,54,55,54,37,55,22,23,7,38,37,55,22,23, 7,38,2,238,63,59,42,33,40,70,145,17,29,33,143,60, 22,18,73,65,9,254,200,61,38,10,65,9,254,212,47,85, 37,59,40,2,165,19,203,87,68,51,87,87,10,17,55,84, 59,22,22,92,213,31,54,23,89,125,7,115,8,45,86,93, 27,91,0,3,0,108,0,68,3,89,3,52,0,16,0,22, 0,28,0,0,1,23,6,7,6,7,6,15,1,39,54,55, 54,55,54,55,54,37,55,22,23,7,38,37,55,22,23,7, 38,3,26,63,66,45,40,49,76,155,69,34,156,67,34,26, 84,73,12,254,153,61,46,9,65,10,254,163,48,94,45,58, 46,3,21,18,226,96,87,62,96,95,41,56,92,61,30,33, 105,238,39,74,24,107,140,7,135,11,44,93,112,27,103,0, 0,5,0,78,0,35,3,236,3,249,0,8,0,19,0,36, 0,44,0,52,0,0,1,55,22,23,22,23,7,38,39,7, 55,22,23,22,23,22,23,7,38,39,7,23,6,7,6,7, 6,15,1,39,54,55,54,55,54,55,54,37,55,22,23,22, 23,7,38,37,55,22,23,7,38,39,38,3,94,30,61,23, 18,10,59,13,29,118,29,59,20,2,2,14,14,61,12,27, 4,62,68,44,46,58,79,161,83,34,161,69,44,33,88,77, 14,254,128,60,28,9,10,13,65,12,254,135,48,101,49,58, 40,15,20,3,193,56,32,24,20,29,25,33,18,33,58,29, 22,2,2,17,35,23,34,16,71,18,233,98,105,73,99,101, 50,56,96,59,39,41,111,247,44,93,24,74,35,41,116,7, 146,13,44,102,119,27,81,22,30,0,0,2,0,90,0,51, 3,120,3,68,0,20,0,24,0,0,1,33,53,33,21,33, 23,6,7,6,7,6,7,39,54,55,54,55,54,53,52,3, 53,33,21,1,203,254,143,3,30,254,148,1,3,20,29,99, 9,24,49,103,32,8,6,19,243,1,246,2,5,65,65,95, 75,56,85,117,10,28,43,118,66,17,17,56,89,25,1,33, 65,65,0,4,0,57,0,17,3,239,3,135,0,8,0,19, 0,40,0,44,0,0,1,55,22,23,22,23,7,38,39,7, 55,22,23,22,23,22,23,7,38,39,5,33,53,33,21,33, 23,6,7,6,7,6,7,39,54,55,54,55,54,53,52,1, 53,33,21,3,96,31,60,24,14,14,60,13,29,118,30,58, 21,1,2,17,11,60,13,27,254,143,254,111,3,95,254,116, 1,3,22,30,103,9,31,50,109,35,11,7,21,254,247,2, 30,3,78,57,31,26,15,34,25,33,17,32,58,29,22,2, 2,19,33,23,34,16,248,65,65,101,82,62,90,122,10,36, 42,125,69,22,21,61,94,29,1,59,65,65,0,1,1,121, 0,100,3,30,3,130,0,17,0,0,1,17,35,17,51,17, 55,22,23,22,31,1,7,38,39,38,39,38,1,186,65,65, 6,121,59,63,102,5,46,99,48,6,6,51,2,47,254,53, 3,30,254,223,17,41,36,39,102,5,46,97,32,4,4,32, 0,3,1,114,0,68,3,52,3,162,0,8,0,19,0,37, 0,0,1,55,22,23,22,23,7,38,39,7,55,22,23,22, 23,22,23,7,38,39,7,17,35,17,51,17,55,22,23,22, 31,1,7,38,39,38,39,38,2,122,31,61,23,14,14,60, 13,27,120,30,56,17,5,4,17,11,60,12,26,164,65,65, 7,131,64,65,108,10,46,104,54,7,7,48,3,20,57,32, 25,15,34,25,33,17,31,58,30,16,4,5,19,34,23,34, 16,142,254,12,3,94,254,192,24,44,39,41,106,10,47,104, 36,4,4,31,0,1,0,118,0,55,3,106,3,106,0,32, 0,0,1,6,35,53,50,55,54,53,52,39,55,23,6,7, 37,50,51,21,5,34,35,6,7,6,7,6,7,39,54,55, 54,55,54,1,204,114,228,232,115,4,2,65,2,1,2,1, 66,11,10,254,186,11,11,14,31,39,108,10,27,48,101,38, 20,13,26,1,255,1,65,1,63,86,48,99,2,213,46,39, 1,65,1,117,77,100,121,11,30,44,112,63,33,34,69,0, 0,2,0,99,0,181,3,139,2,238,0,3,0,7,0,0, 55,53,33,21,1,53,33,21,99,3,40,253,69,2,50,181, 65,65,1,248,65,65,0,1,0,108,0,54,3,45,2,255, 0,31,0,0,1,54,55,33,53,33,23,6,7,22,31,1, 7,38,39,6,7,6,15,1,39,54,55,54,55,34,39,38, 47,1,55,22,2,45,63,83,254,17,2,22,37,105,64,70, 121,12,49,125,70,46,33,98,189,62,33,215,109,47,38,1, 1,71,149,15,18,171,1,223,85,138,65,65,175,86,57,137, 14,43,143,56,55,32,97,114,37,56,124,102,45,47,1,45, 45,4,62,48,0,2,0,50,0,96,3,136,3,191,0,9, 0,37,0,0,1,55,22,23,22,23,7,38,39,38,19,6, 15,1,39,54,55,54,55,54,55,33,53,33,23,6,7,22, 23,22,23,7,38,39,38,39,17,35,1,117,31,68,32,33, 59,50,72,82,9,59,115,238,14,25,217,101,5,5,106,155, 254,104,1,227,24,130,43,89,64,67,119,42,108,70,60,117, 65,3,134,57,37,26,27,70,42,90,45,5,254,49,78,101, 6,59,94,62,3,3,66,133,65,65,112,34,38,38,40,101, 50,93,43,36,49,254,131,0,0,1,0,184,0,149,2,167, 3,80,0,17,0,0,1,23,6,7,6,7,6,7,6,7, 39,54,55,54,55,54,55,54,2,104,63,34,33,26,36,70, 161,28,72,35,166,67,48,31,64,41,5,3,80,11,196,88, 70,54,104,110,19,47,55,108,63,44,46,97,204,29,0,2, 0,78,0,196,3,126,2,181,0,5,0,20,0,0,1,55, 22,23,7,38,37,23,6,7,6,7,6,15,1,39,54,55, 54,55,54,2,51,53,185,93,58,106,254,67,64,28,30,5, 5,38,101,17,47,102,35,4,4,33,2,143,38,254,214,27, 231,210,13,144,65,11,10,76,107,17,45,107,61,8,8,65, 0,4,0,46,0,173,3,181,3,112,0,10,0,21,0,29, 0,47,0,0,1,55,22,23,22,23,22,23,7,38,39,7, 55,22,23,22,23,22,23,7,38,39,7,55,18,23,7,38, 39,38,37,23,6,7,6,7,6,7,6,7,39,54,55,54, 55,54,55,52,3,39,30,60,20,2,2,18,10,59,13,28, 119,29,58,17,4,4,13,15,61,12,25,202,54,194,106,59, 67,49,51,254,84,64,31,35,3,4,40,105,5,18,47,110, 39,4,4,36,30,3,55,57,31,21,3,2,20,29,25,33, 17,31,58,31,16,4,4,16,37,23,34,16,76,38,254,245, 238,28,144,84,87,160,12,159,76,7,7,78,113,4,20,45, 116,69,8,7,70,155,2,0,0,4,0,46,0,173,3,169, 3,49,0,15,0,32,0,40,0,58,0,0,1,34,7,6, 21,20,23,22,51,50,55,54,53,52,39,38,39,50,31,1, 22,21,20,7,6,35,34,39,38,53,52,55,54,5,55,18, 23,7,38,39,38,37,23,6,7,6,7,6,7,6,7,39, 54,55,54,55,54,55,52,3,99,30,12,3,25,10,10,30, 12,4,28,8,10,41,20,8,1,37,15,18,41,20,8,37, 15,254,232,54,194,106,59,67,49,51,254,84,64,31,35,3, 4,40,105,5,18,47,110,39,4,4,36,30,3,25,28,8, 9,29,12,5,28,8,10,29,12,4,24,36,20,7,6,41, 20,9,37,15,18,42,19,8,148,38,254,245,238,28,144,84, 87,160,12,159,76,7,7,78,113,4,20,45,116,69,8,7, 70,155,2,0,0,1,0,135,0,63,3,31,3,17,0,31, 0,0,19,21,23,22,23,22,23,22,51,50,55,23,6,35, 34,39,38,39,38,61,1,17,51,21,54,55,54,55,23,6, 7,6,201,2,6,39,18,35,63,113,102,213,7,229,93,119, 77,88,34,23,65,133,83,93,192,25,200,93,95,1,214,150, 62,57,26,12,13,20,21,64,24,25,28,61,42,86,15,1, 209,249,20,22,25,78,60,80,26,25,0,3,0,109,0,30, 3,144,3,120,0,8,0,19,0,53,0,0,1,55,22,23, 22,23,7,38,39,7,55,22,23,22,23,22,23,7,38,39, 1,20,7,20,23,22,23,22,51,50,55,23,6,35,34,39, 38,39,38,53,52,53,17,51,22,21,54,55,54,55,23,6, 7,6,3,1,31,60,24,14,14,60,13,29,118,30,58,21, 1,2,17,11,60,13,27,253,211,1,16,25,69,70,123,111, 228,7,250,99,127,82,97,34,24,64,1,158,78,95,214,24, 211,105,101,3,63,57,31,26,15,34,25,33,17,32,58,29, 22,2,2,19,33,23,34,16,254,229,116,49,91,30,43,22, 22,23,64,25,26,32,63,44,79,10,21,1,246,93,180,26, 21,25,86,60,85,29,27,0,0,3,0,109,0,30,3,129, 3,87,0,15,0,31,0,65,0,0,1,34,7,6,21,20, 23,22,51,50,55,54,53,52,39,38,39,50,23,22,21,20, 7,6,35,34,39,38,53,52,55,54,1,20,7,20,23,22, 23,22,51,50,55,23,6,35,34,39,38,39,38,53,52,53, 17,51,22,21,54,55,54,55,23,6,7,6,3,59,31,11, 3,28,8,9,30,12,4,29,8,9,41,20,9,37,15,18, 41,19,9,37,15,253,133,1,16,25,69,70,123,111,228,7, 250,99,127,82,97,34,24,64,1,158,78,95,214,24,211,105, 101,3,63,29,8,9,30,12,3,27,8,10,31,12,3,24, 36,16,18,41,20,8,36,15,18,43,19,8,254,127,116,49, 91,30,43,22,22,23,64,25,26,32,63,44,79,10,21,1, 246,93,180,26,21,25,86,60,85,29,27,0,0,1,0,127, 0,106,3,56,3,5,0,20,0,0,19,53,33,23,6,7, 6,7,6,7,6,7,39,54,55,54,55,54,55,54,55,127, 2,132,53,40,44,25,33,73,162,27,66,28,162,64,48,31, 69,45,6,7,2,196,65,65,195,93,53,42,92,82,14,31, 58,78,49,36,39,86,196,26,34,0,0,3,0,97,0,76, 3,201,3,207,0,10,0,21,0,41,0,0,1,55,22,23, 22,23,22,23,7,38,39,7,55,22,23,22,23,22,23,7, 38,39,5,53,33,23,6,7,6,7,6,15,1,39,54,55, 54,55,54,55,54,55,3,59,30,60,20,2,2,18,10,59, 13,28,119,29,58,17,4,4,13,15,61,12,25,253,73,2, 186,54,43,45,29,37,77,171,106,28,174,72,51,34,75,49, 6,8,3,150,57,31,21,3,2,20,29,25,33,17,31,58, 31,16,4,4,16,37,23,34,16,112,65,65,207,98,63,47, 98,87,52,59,83,54,39,42,95,214,28,38,0,3,0,97, 0,76,3,171,3,167,0,14,0,30,0,50,0,0,1,34, 7,6,21,20,23,22,51,50,55,54,53,52,47,1,50,23, 22,21,20,7,6,35,34,39,38,53,52,55,54,5,53,33, 23,6,7,6,7,6,15,1,39,54,55,54,55,54,55,54, 55,3,102,32,11,3,29,8,9,30,12,3,28,17,41,20, 8,36,15,18,43,19,8,38,15,253,12,2,186,54,43,45, 29,37,77,171,106,28,174,72,51,34,75,49,6,8,3,143, 29,8,9,31,11,3,28,8,9,31,12,27,36,16,18,41, 19,9,37,15,17,43,19,8,207,65,65,207,98,63,47,98, 87,52,59,83,54,39,42,95,214,28,38,0,0,1,0,106, 1,1,3,163,2,147,0,24,0,0,19,39,54,55,54,55, 54,51,50,23,22,23,22,23,7,0,47,1,38,39,34,7, 6,7,6,158,52,110,50,40,34,16,17,26,33,110,246,29, 114,40,254,178,119,28,24,15,7,6,18,27,48,1,107,39, 148,52,42,10,5,12,39,188,22,89,52,1,6,54,12,8, 1,2,7,28,51,0,0,3,0,76,0,240,3,196,3,60, 0,8,0,19,0,44,0,0,1,55,22,23,22,23,7,38, 39,7,55,22,23,22,23,22,23,7,38,39,1,39,54,55, 54,55,54,51,50,23,22,5,22,23,7,36,39,38,39,38, 35,34,15,1,6,2,205,30,62,22,18,10,59,13,29,118, 29,59,20,2,2,14,14,61,12,27,253,216,52,117,55,46, 34,16,18,27,36,119,1,5,42,117,39,254,183,125,39,28, 29,15,22,25,17,48,3,3,57,32,25,20,29,25,33,18, 33,58,29,22,2,2,17,35,23,34,16,254,173,38,157,59, 46,10,5,13,41,200,33,91,51,254,69,22,10,9,24,17, 49,0,0,3,0,76,0,240,3,196,3,64,0,14,0,32, 0,57,0,0,1,34,15,1,20,23,22,51,50,55,54,53, 52,39,38,39,50,31,1,22,21,20,15,1,6,35,34,39, 38,53,52,55,54,1,39,54,55,54,55,54,51,50,23,22, 5,22,23,7,36,39,38,39,38,35,34,15,1,6,2,188, 31,12,3,26,9,11,29,12,4,28,8,9,42,19,7,1, 36,20,7,6,42,20,8,36,16,253,214,52,117,55,46,34, 16,18,27,36,119,1,5,42,117,39,254,183,125,39,28,29, 15,22,25,17,48,3,40,28,17,29,12,5,28,8,10,30, 12,3,24,37,21,6,5,41,20,8,1,37,15,18,41,20, 8,254,34,38,157,59,46,10,5,13,41,200,33,91,51,254, 69,22,10,9,24,17,49,0,0,3,0,73,0,137,3,94, 3,98,0,9,0,24,0,36,0,0,1,55,22,23,22,23, 7,38,39,38,37,23,6,7,6,7,6,15,1,39,54,55, 54,55,54,55,33,53,33,53,51,21,33,21,33,17,35,2, 83,59,51,34,35,88,45,91,40,36,254,115,63,32,29,3, 2,33,86,14,44,88,29,2,2,28,210,254,212,1,44,65, 1,49,254,207,65,1,231,27,116,48,50,84,47,87,57,50, 134,16,121,52,5,4,55,79,12,48,79,46,3,3,45,251, 65,173,173,65,254,21,0,5,0,40,0,108,3,141,3,165, 0,8,0,19,0,32,0,43,0,55,0,0,1,55,22,23, 22,23,7,38,39,7,55,22,23,22,23,22,23,7,38,39, 3,55,22,23,22,31,1,7,38,39,38,39,38,37,23,6, 7,6,15,1,39,54,55,54,19,33,53,33,53,51,21,33, 21,33,17,35,2,255,30,62,22,18,10,59,13,29,118,29, 59,20,2,2,14,14,61,12,27,125,59,52,40,34,96,3, 44,99,43,39,57,1,254,142,62,32,39,34,89,20,44,97, 35,32,226,254,184,1,72,65,1,76,254,180,65,3,108,57, 32,25,20,29,25,33,18,33,58,29,22,2,2,17,35,23, 34,16,254,201,27,120,57,49,94,3,46,93,61,54,130,2, 11,16,132,64,58,81,19,49,86,56,54,1,13,65,190,190, 65,253,236,0,0,5,0,40,0,108,3,121,3,144,0,14, 0,32,0,45,0,56,0,68,0,0,1,34,15,1,20,23, 22,51,50,55,54,53,52,39,38,39,50,31,1,22,21,20, 15,1,6,35,34,39,38,53,52,55,54,3,55,22,23,22, 31,1,7,38,39,38,39,38,37,23,6,7,6,15,1,39, 54,55,54,19,33,53,33,53,51,21,33,21,33,17,35,3, 12,31,12,3,26,9,11,29,12,4,28,8,9,42,19,7, 1,36,20,7,6,42,20,8,36,16,157,59,52,40,34,96, 3,44,99,43,39,57,1,254,142,62,32,39,34,89,20,44, 97,35,32,226,254,184,1,72,65,1,76,254,180,65,3,120, 28,17,29,12,5,28,8,10,30,12,3,24,37,21,6,5, 41,20,8,1,37,15,18,41,20,8,254,87,27,120,57,49, 94,3,46,93,61,54,130,2,11,16,132,64,58,81,19,49, 86,56,54,1,13,65,190,190,65,253,236,0,0,1,0,139, 0,194,3,73,3,36,0,21,0,0,1,54,55,54,55,33, 53,33,23,6,7,6,7,22,23,7,38,39,38,39,55,22, 1,221,124,57,50,60,253,139,2,150,40,75,59,57,124,53, 76,48,116,59,46,116,38,100,1,163,82,65,57,116,65,65, 147,69,65,85,52,83,44,126,52,40,85,53,71,0,0,3, 0,219,0,80,3,50,3,54,0,19,0,29,0,39,0,0, 55,39,54,51,50,23,22,23,22,23,7,38,39,38,39,38, 35,34,7,6,19,55,22,23,22,23,7,38,39,38,3,55, 22,23,22,23,7,38,39,38,225,6,121,64,57,50,109,181, 7,10,26,174,85,16,16,46,54,49,71,20,78,6,110,64, 69,124,27,114,68,54,149,6,143,68,69,126,27,120,65,64, 174,65,13,8,17,80,3,5,59,75,18,4,2,7,6,2, 1,50,65,10,16,19,55,59,52,18,14,1,27,65,14,19, 20,59,59,57,18,17,0,1,0,135,0,155,3,135,3,36, 0,24,0,0,55,39,54,55,54,55,54,55,23,6,7,6, 7,54,55,38,39,55,22,23,7,39,4,5,39,186,4,113, 40,1,2,42,51,63,52,44,41,91,249,205,48,69,48,143, 109,53,85,254,250,254,152,8,229,1,175,90,3,4,97,205, 15,209,104,93,144,32,55,58,76,44,156,154,39,115,71,41, 65,0,0,1,0,174,0,94,2,225,3,136,0,25,0,0, 1,38,39,55,22,23,54,55,23,6,7,6,7,22,23,7, 38,39,6,7,6,7,39,54,55,54,1,225,64,154,25,149, 64,30,26,65,27,30,3,3,68,110,45,98,58,58,157,39, 67,41,128,41,96,1,244,40,65,60,63,39,105,236,7,240, 110,11,10,49,103,48,92,44,144,138,33,53,50,105,42,97, 0,1,0,90,0,75,3,120,3,91,0,38,0,0,1,35, 53,33,21,33,22,21,33,21,33,20,7,21,22,23,22,23, 22,51,50,55,23,6,35,34,39,38,39,38,53,52,55,54, 53,33,53,33,52,1,149,245,2,107,254,203,2,1,160,254, 96,2,2,6,17,56,43,66,57,117,6,123,60,70,51,82, 31,20,2,2,254,195,1,61,3,26,65,65,154,72,65,154, 60,68,22,10,26,12,10,10,64,12,12,20,48,32,52,3, 49,59,153,65,72,0,0,1,0,153,0,62,3,40,3,11, 0,20,0,0,1,7,39,55,39,55,23,37,23,6,7,6, 7,39,54,55,54,55,5,19,7,1,88,174,17,163,96,59, 100,1,124,49,36,35,34,84,47,99,42,10,9,254,187,196, 59,1,232,48,63,45,204,27,214,105,53,103,56,53,86,45, 98,87,22,24,89,254,95,27,0,1,0,100,0,82,3,85, 3,139,0,20,0,0,1,7,39,55,39,55,23,37,23,6, 7,6,7,39,54,55,54,55,5,19,7,1,66,205,17,194, 113,59,118,1,189,50,45,38,43,93,47,112,49,16,12,254, 122,228,58,2,67,57,63,54,241,27,251,123,53,125,60,67, 93,45,109,101,33,36,108,254,25,28,0,1,0,168,0,173, 3,64,2,122,0,9,0,0,37,17,33,53,33,17,51,21, 33,53,2,97,254,157,1,164,158,253,104,238,1,75,65,254, 116,65,65,0,0,1,0,116,0,214,3,115,2,224,0,9, 0,0,1,17,33,53,33,17,51,21,33,53,2,119,254,96, 1,225,187,253,1,1,23,1,136,65,254,55,65,65,0,1, 0,232,0,95,2,248,2,200,0,11,0,0,1,53,33,53, 33,17,33,53,33,53,33,53,2,183,254,67,1,254,253,240, 1,207,254,113,1,192,199,65,253,151,65,223,65,0,0,1, 0,190,0,123,3,28,3,59,0,11,0,0,1,53,33,53, 33,17,33,53,33,17,33,53,2,219,253,247,2,74,253,162, 2,29,254,45,2,9,241,65,253,64,65,1,12,65,0,2, 0,183,0,49,3,117,3,86,0,20,0,24,0,0,19,53, 33,23,6,7,6,7,6,7,6,7,39,54,55,54,55,54, 55,54,55,37,53,33,21,183,2,150,40,91,64,34,36,84, 165,16,48,24,163,69,34,27,86,94,7,9,253,243,1,195, 2,46,65,65,183,82,43,33,75,68,6,19,61,64,45,22, 25,76,183,15,18,231,65,65,0,2,1,19,0,36,2,249, 3,141,0,19,0,23,0,0,1,55,22,21,2,7,6,7, 6,7,6,7,39,54,55,54,55,54,17,52,37,51,17,35, 2,175,65,9,1,98,13,14,64,141,17,33,24,140,55,20, 15,110,254,91,65,65,3,138,3,151,89,254,205,143,18,16, 71,58,7,13,60,57,43,16,17,123,1,68,93,129,254,57, 0,2,0,81,0,157,3,117,3,35,0,13,0,29,0,0, 1,51,17,54,55,54,55,23,6,7,6,15,1,39,3,55, 23,6,7,6,15,1,39,54,55,54,55,54,53,52,1,174, 65,145,62,53,80,50,80,64,73,166,7,65,187,65,1,4, 45,32,85,20,42,78,28,8,7,42,3,35,253,192,59,46, 39,97,41,99,48,53,67,3,44,2,55,1,171,168,92,66, 75,17,49,69,43,13,13,87,219,38,0,1,0,178,0,135, 3,79,3,54,0,16,0,0,19,51,17,54,55,54,55,54, 55,23,6,7,6,7,6,7,39,178,65,183,91,97,152,10, 28,43,145,76,40,39,107,197,65,3,54,253,147,43,47,50, 132,8,25,48,128,50,27,20,54,44,51,0,0,2,0,190, 0,198,3,51,2,250,0,3,0,11,0,0,1,17,33,17, 29,1,35,17,33,17,35,53,2,242,254,13,65,2,117,65, 1,73,1,112,254,144,65,66,2,52,253,208,62,0,0,1, 0,183,0,51,3,40,2,136,0,20,0,0,19,21,35,17, 33,6,7,6,7,6,15,1,39,54,55,54,55,54,55,54, 55,248,65,2,113,10,3,16,55,66,165,125,21,185,72,43, 24,53,12,2,1,2,71,196,1,5,164,28,129,75,90,65, 46,61,66,50,30,33,72,178,19,23,0,1,0,139,0,72, 3,82,2,241,0,21,0,0,19,21,35,17,33,6,7,6, 7,6,7,6,7,39,54,55,54,55,54,55,54,55,204,65, 2,199,9,6,19,61,73,180,42,114,22,199,80,65,34,61, 15,2,2,2,176,231,1,40,180,46,141,83,99,74,17,41, 61,71,50,41,47,83,192,30,41,0,0,2,0,93,0,87, 3,145,3,160,0,3,0,23,0,0,1,35,17,51,3,35, 53,33,53,51,21,51,21,35,17,33,21,33,17,35,17,33, 53,51,2,29,189,189,254,74,1,72,65,192,192,1,51,254, 205,65,254,64,194,2,180,254,235,1,21,65,171,171,65,254, 235,65,254,249,1,7,65,0,0,2,0,111,0,167,3,122, 2,220,0,7,0,16,0,0,37,17,51,17,33,21,33,53, 19,53,33,23,6,7,39,54,55,1,190,65,1,123,252,245, 109,2,29,28,104,142,32,127,61,232,1,31,254,225,65,65, 1,179,65,65,118,72,56,70,64,0,0,1,0,208,0,71, 3,74,2,245,0,20,0,0,1,54,55,33,53,33,23,6, 7,6,7,6,15,1,39,54,55,54,55,33,53,2,217,18, 28,253,201,2,71,51,46,43,29,37,80,175,104,27,169,68, 118,48,254,16,2,14,52,114,65,65,193,90,59,46,97,87, 49,59,78,48,84,121,65,0,0,2,0,185,0,103,3,148, 3,18,0,16,0,27,0,0,55,39,54,55,54,55,54,55, 54,55,23,6,7,6,7,6,7,3,55,22,23,22,31,1, 7,38,39,38,213,5,215,94,66,45,92,85,19,32,60,76, 49,56,68,108,211,163,19,94,40,42,70,5,46,68,36,35, 103,65,17,31,21,33,67,182,42,75,26,180,76,87,50,78, 24,2,97,62,30,24,25,70,5,46,68,22,21,0,0,3, 0,95,0,0,3,219,3,180,0,8,0,19,0,44,0,0, 1,55,22,23,22,23,7,38,39,7,55,22,23,22,23,22, 23,7,38,39,5,53,51,21,33,6,7,6,7,6,15,1, 39,54,55,54,55,54,55,54,55,33,21,35,17,3,76,31, 60,24,14,14,60,13,29,118,30,58,21,1,2,17,11,60, 13,27,254,135,65,1,128,25,12,34,73,79,179,125,20,189, 79,52,32,76,33,6,6,253,123,65,3,123,57,31,26,15, 34,25,33,17,32,58,29,22,2,2,19,33,23,34,16,93, 228,228,204,57,162,90,96,67,44,61,64,52,33,39,92,223, 38,53,252,1,61,0,0,1,0,182,0,93,2,226,3,10, 0,49,0,0,1,38,35,55,50,23,55,38,53,55,21,20, 7,23,50,51,6,7,6,15,2,6,7,47,1,38,39,55, 22,51,50,55,54,55,54,55,54,55,39,35,6,7,6,15, 1,39,54,55,54,1,143,56,114,1,117,58,3,1,65,1, 254,7,6,28,10,17,20,17,2,31,50,33,40,3,13,23, 43,16,18,15,3,3,24,16,12,18,193,7,10,29,42,115, 40,47,98,34,72,2,10,1,65,1,144,21,25,1,165,13, 13,1,229,63,96,37,25,2,36,3,2,12,1,5,61,16, 12,2,3,27,101,71,145,1,95,72,99,121,42,45,101,49, 103,0,0,1,0,155,0,53,3,76,2,251,0,33,0,0, 1,35,6,7,6,7,39,54,55,54,55,54,55,23,6,7, 33,21,35,6,7,6,7,6,15,1,39,54,55,54,55,54, 55,54,2,60,229,35,100,2,2,49,105,32,6,4,24,24, 63,18,21,1,214,207,13,31,10,13,40,99,42,39,104,39, 11,9,44,14,1,2,15,60,116,3,2,43,121,60,10,9, 52,122,11,103,57,65,169,79,27,23,69,76,31,53,75,50, 15,16,75,182,4,0,255,255,0,139,0,72,3,219,3,180, 16,38,7,221,0,0,16,6,8,45,0,0,255,255,0,93, 0,87,3,219,3,180,16,38,7,221,0,0,16,6,8,46, 0,0,255,255,0,111,0,167,3,219,3,180,16,38,7,221, 0,0,16,6,8,47,0,0,255,255,0,208,0,71,3,219, 3,180,16,38,7,221,0,0,16,6,8,48,0,0,255,255, 0,87,1,46,0,211,1,171,16,6,0,121,0,0,255,255, 255,247,1,134,3,233,1,206,16,7,6,203,0,0,0,150, 0,1,0,184,0,149,2,167,3,80,0,17,0,0,37,38, 39,38,39,38,39,38,39,55,22,23,22,23,22,23,22,23, 2,104,37,36,21,26,64,161,29,58,35,157,64,68,42,72, 40,6,11,149,204,89,51,39,94,109,20,38,55,102,56,59, 63,109,205,29,65,0,255,255,0,184,0,149,3,101,3,80, 16,38,7,221,138,132,16,6,8,59,0,0,255,255,0,43, 255,233,1,251,2,197,16,6,0,19,0,0,255,255,0,34, 0,0,1,255,2,197,16,6,0,21,0,0,255,255,0,32, 255,233,1,250,2,197,16,6,0,22,0,0,255,255,0,28, 0,0,2,8,2,197,16,6,0,23,0,0,255,255,0,35, 255,233,2,1,2,197,16,6,0,24,0,0,255,255,0,43, 255,233,2,1,2,197,16,6,0,25,0,0,255,255,0,46, 0,0,2,8,2,197,16,6,0,26,0,0,255,255,0,37, 255,233,2,1,2,197,16,6,0,27,0,0,255,255,0,38, 255,233,1,253,2,197,16,6,0,28,0,0,0,1,255,238, 255,38,0,153,2,12,0,15,0,0,19,51,17,20,7,34, 35,34,39,53,22,51,50,55,54,53,70,83,128,7,8,13, 15,17,3,52,11,5,2,12,253,135,103,6,3,71,1,32, 14,23,0,1,0,116,254,227,0,216,255,196,0,12,0,0, 23,51,21,20,7,6,35,53,50,53,52,53,35,116,100,59, 17,24,55,55,60,103,88,25,8,38,78,4,4,0,255,255, 0,102,0,0,1,91,2,197,16,6,0,20,0,0,0,2, 0,18,0,0,2,18,2,220,0,21,0,43,0,0,1,21, 35,17,35,17,35,53,51,53,52,55,54,51,50,23,21,38, 35,34,29,1,33,21,35,17,35,17,35,53,51,53,52,55, 54,51,50,23,21,38,35,34,29,1,1,2,87,83,70,70, 74,22,27,23,24,19,10,58,1,103,87,83,70,70,74,22, 27,23,24,19,10,58,2,12,68,254,56,1,200,68,89,88, 24,7,5,69,1,53,82,68,254,56,1,200,68,89,88,24, 7,5,69,1,53,82,0,3,0,12,0,0,1,180,2,220, 0,21,0,25,0,29,0,0,19,21,35,17,35,17,35,53, 51,53,52,55,54,51,50,23,21,38,35,34,29,1,33,17, 35,17,55,21,35,53,252,87,83,70,70,74,22,27,23,24, 19,10,58,1,15,83,83,83,2,12,68,254,56,1,200,68, 89,88,24,7,5,69,1,53,82,253,244,2,12,205,105,105, 0,2,0,17,0,0,1,174,2,220,0,21,0,25,0,0, 1,21,35,17,35,17,35,53,51,53,52,55,54,51,50,23, 21,38,35,34,29,1,37,17,35,17,1,1,87,83,70,70, 74,22,27,23,24,19,10,58,1,4,83,2,12,68,254,56, 1,200,68,89,88,24,7,5,69,1,53,82,205,253,39,2, 217,0,0,4,0,18,0,0,2,202,2,220,0,21,0,43, 0,47,0,51,0,0,1,21,35,17,35,17,35,53,51,53, 52,55,54,51,50,23,21,38,35,34,29,1,33,21,35,17, 35,17,35,53,51,53,52,55,54,51,50,23,21,38,35,34, 29,1,33,17,35,17,55,21,35,53,1,2,87,83,70,70, 74,22,27,23,24,19,10,58,1,103,87,83,70,70,74,22, 27,23,24,19,10,58,1,15,83,83,83,2,12,68,254,56, 1,200,68,89,88,24,7,5,69,1,53,82,68,254,56,1, 200,68,89,88,24,7,5,69,1,53,82,253,244,2,12,205, 105,105,0,3,0,18,0,0,2,196,2,220,0,21,0,43, 0,47,0,0,1,21,35,17,35,17,35,53,51,53,52,55, 54,51,50,23,21,38,35,34,29,1,33,21,35,17,35,17, 35,53,51,53,52,55,54,51,50,23,21,38,35,34,29,1, 37,17,35,17,1,2,87,83,70,70,74,22,27,23,24,19, 10,58,1,108,87,83,70,70,74,22,27,23,24,19,10,58, 1,4,83,2,12,68,254,56,1,200,68,89,88,24,7,5, 69,1,53,82,68,254,56,1,200,68,89,88,24,7,5,69, 1,53,82,205,253,39,2,217,0,2,0,18,255,233,2,20, 2,220,0,23,0,41,0,0,1,21,35,17,20,23,22,51, 50,55,21,6,35,34,39,38,53,17,35,53,51,53,51,21, 1,35,17,35,53,51,53,52,55,54,51,50,23,21,38,35, 34,21,2,20,86,22,9,15,25,15,39,29,89,11,1,71, 71,83,254,237,83,70,70,74,22,27,23,24,19,10,58,2, 12,68,254,153,38,6,3,4,70,7,67,7,9,1,140,68, 144,144,253,244,1,200,68,89,88,24,7,5,69,1,53,0, 0,2,0,34,255,233,2,242,2,156,0,23,0,72,0,0, 1,21,35,17,20,23,22,51,50,55,21,6,35,34,39,38, 53,17,35,53,51,53,51,21,7,35,38,35,34,7,6,21, 20,23,22,31,1,22,23,22,21,20,7,6,35,34,39,38, 53,51,22,23,22,51,50,55,54,53,52,47,2,38,39,38, 53,52,55,54,51,50,23,22,2,242,86,22,9,15,25,15, 39,29,89,11,1,71,71,83,230,88,3,102,82,23,6,66, 14,17,80,118,23,7,90,52,74,194,14,1,88,6,18,33, 71,84,28,10,54,27,78,119,31,16,84,49,68,145,35,10, 2,12,68,254,153,38,6,3,4,70,7,67,7,9,1,140, 68,144,144,146,84,49,14,16,45,22,4,4,19,28,70,21, 27,96,44,26,162,8,9,47,20,35,47,16,19,46,19,8, 19,29,51,28,43,93,42,25,101,27,0,2,0,58,0,149, 0,145,2,88,0,3,0,7,0,0,19,51,17,7,23,51, 21,35,58,87,87,8,71,71,2,88,254,233,35,66,71,0, 0,1,0,0,2,148,1,50,3,45,0,24,0,0,19,35, 48,23,22,23,22,23,22,51,50,55,54,55,54,55,35,48, 7,6,7,6,34,39,38,71,71,10,6,8,17,30,39,43, 43,39,30,17,18,6,71,8,7,8,23,72,23,18,3,45, 48,21,13,30,17,24,24,17,30,29,53,34,17,8,23,23, 18,0,0,3,0,58,0,149,1,89,2,88,0,3,0,7, 0,11,0,0,1,51,17,7,3,51,17,7,23,51,21,35, 1,2,87,87,200,87,87,50,188,188,2,88,254,233,35,1, 58,254,233,35,66,71,0,1,0,37,0,0,2,19,2,88, 0,24,0,0,37,54,55,54,55,54,55,54,53,17,51,17, 20,7,6,7,6,35,34,35,7,53,51,3,51,1,34,24, 40,40,16,6,9,19,87,31,34,68,63,64,3,3,228,165, 139,90,78,2,20,21,20,7,13,28,37,1,118,254,138,57, 46,56,33,33,1,76,2,12,0,1,0,58,0,0,3,64, 2,88,0,37,0,0,1,6,7,6,7,6,7,21,35,53, 55,54,55,54,55,54,55,39,51,1,54,55,54,55,54,55, 53,51,21,7,6,7,6,7,6,7,23,35,1,53,60,29, 48,10,8,1,87,3,11,68,32,65,3,2,192,122,1,144, 65,25,47,10,9,1,87,3,11,60,3,5,25,78,193,125, 1,112,32,39,62,32,25,37,141,141,46,73,80,39,41,2, 1,177,254,143,39,33,61,25,25,36,150,150,43,64,73,5, 5,31,52,177,0,1,0,38,0,0,3,25,2,88,0,7, 0,0,1,17,35,17,33,53,33,21,2,198,87,253,183,2, 243,2,12,253,244,2,12,76,76,0,0,2,0,63,0,0, 3,52,2,88,0,26,0,30,0,0,1,17,35,17,38,39, 38,39,38,47,1,38,39,34,39,33,53,33,22,23,22,23, 22,23,22,23,22,1,17,51,17,3,52,87,11,14,5,6, 10,12,6,38,57,2,10,254,13,1,251,83,50,6,6,35, 22,33,13,1,253,12,87,1,122,254,134,1,116,55,24,8, 8,14,7,4,21,9,2,76,11,25,4,3,19,31,50,66, 6,254,127,1,119,254,137,0,0,1,0,57,0,0,2,254, 2,88,0,44,0,0,41,1,53,33,54,55,54,55,54,55, 54,55,54,63,1,53,38,39,38,39,38,39,38,39,33,53, 33,22,23,22,23,22,23,22,23,22,23,21,6,7,6,7, 6,7,6,1,221,254,92,1,158,78,30,11,12,21,11,1, 2,26,12,4,13,16,6,7,34,106,8,18,254,98,1,164, 95,55,8,9,40,24,41,13,2,2,13,34,5,6,53,172, 3,76,11,12,4,6,10,12,2,2,32,46,16,142,54,23, 8,9,39,16,1,3,76,11,24,3,4,17,32,52,61,8, 10,156,69,47,7,8,69,21,1,0,0,1,0,37,0,0, 3,27,2,237,0,28,0,0,37,7,35,52,55,54,55,54, 55,54,55,54,55,52,55,53,33,53,51,21,33,21,20,7, 6,7,6,7,6,1,247,1,87,23,13,22,37,113,21,7, 46,10,1,253,97,87,2,159,56,25,78,58,25,40,86,86, 114,55,29,30,50,64,12,4,29,57,4,4,72,225,149,153, 69,51,23,46,34,28,45,0,0,2,0,63,0,0,3,54, 2,88,0,10,0,20,0,0,41,1,17,33,50,23,22,23, 22,31,1,3,17,38,39,38,39,38,39,33,17,3,53,253, 10,1,211,85,84,39,26,51,5,1,87,1,41,21,13,57, 71,254,132,2,88,42,19,30,63,53,18,254,213,1,43,51, 39,18,8,32,1,254,64,0,0,1,0,37,0,0,2,233, 2,88,0,26,0,0,1,17,35,17,38,39,38,39,38,47, 1,38,39,34,39,33,53,33,22,23,22,23,22,23,22,23, 22,2,233,87,11,14,5,6,10,12,6,38,57,2,10,254, 62,1,201,84,50,6,6,35,22,33,13,1,1,122,254,134, 1,116,55,24,8,8,14,7,4,21,9,2,76,11,26,3, 3,19,31,50,66,6,0,1,0,35,0,0,3,117,2,88, 0,45,0,0,1,17,20,7,6,7,6,15,1,6,43,1, 53,51,50,55,54,55,54,55,54,61,1,17,35,53,33,22, 23,22,31,1,17,35,17,38,39,38,39,38,39,38,39,38, 47,1,1,16,9,6,11,13,37,8,65,84,4,4,50,41, 6,6,21,5,17,60,1,253,155,48,33,12,3,87,11,15, 4,6,11,12,2,3,38,59,10,2,12,254,212,63,28,18, 19,24,24,5,43,76,25,3,4,14,8,24,44,29,1,41, 76,21,72,50,64,15,254,134,1,116,56,25,7,8,15,7, 1,2,20,9,2,0,0,1,0,50,0,197,2,22,1,218, 0,7,0,0,1,21,33,53,51,53,51,21,2,22,254,28, 207,70,1,11,70,70,207,207,0,2,0,59,0,0,2,209, 2,199,0,60,0,64,0,0,55,22,23,22,23,22,23,59, 1,55,54,55,54,55,54,55,52,53,17,51,17,7,6,7, 6,7,6,7,35,38,39,38,39,38,39,38,53,52,53,17, 51,17,51,54,55,54,55,54,55,54,61,1,51,21,7,6, 7,6,35,34,35,1,51,21,35,151,13,61,17,16,36,47, 8,82,34,38,18,54,33,23,2,87,3,17,91,22,21,64, 71,82,71,63,67,45,4,4,35,87,99,39,17,6,10,24, 3,1,87,3,10,40,50,79,2,2,1,136,71,71,224,53, 50,13,9,20,3,4,9,10,27,52,38,40,3,3,1,82, 254,174,39,92,71,16,11,31,2,2,31,35,63,5,6,57, 57,3,3,1,82,254,212,2,12,4,8,24,28,6,9,207, 207,36,49,34,50,1,231,71,0,2,0,59,0,0,2,209, 2,199,0,60,0,64,0,0,55,22,23,22,23,22,23,59, 1,55,54,55,54,55,54,55,52,53,17,51,17,7,6,7, 6,7,6,7,35,38,39,38,39,38,39,38,53,52,53,17, 51,17,51,54,55,54,55,54,55,54,61,1,51,21,7,6, 7,6,35,34,35,3,51,21,35,151,13,61,17,16,36,47, 8,82,34,38,18,54,33,23,2,87,3,17,91,22,21,64, 71,82,71,63,67,45,4,4,35,87,99,39,17,6,10,24, 3,1,87,3,10,40,50,79,2,2,177,71,71,224,53,50, 13,9,20,3,4,9,10,27,52,38,40,3,3,1,82,254, 174,39,92,71,16,11,31,2,2,31,35,63,5,6,57,57, 3,3,1,82,254,212,2,12,4,8,24,28,6,9,207,207, 36,49,34,50,1,231,71,0,0,3,0,59,0,0,2,209, 2,199,0,60,0,64,0,68,0,0,55,22,23,22,23,22, 23,59,1,55,54,55,54,55,54,55,52,53,17,51,17,7, 6,7,6,7,6,7,35,38,39,38,39,38,39,38,53,52, 53,17,51,17,51,54,55,54,55,54,55,54,61,1,51,21, 7,6,7,6,35,34,35,55,51,21,35,19,51,21,35,151, 13,61,17,16,36,47,8,82,34,38,18,54,33,23,2,87, 3,17,91,22,21,64,71,82,71,63,67,45,4,4,35,87, 99,39,17,6,10,24,3,1,87,3,10,40,50,79,2,2, 195,71,71,197,71,71,224,53,50,13,9,20,3,4,9,10, 27,52,38,40,3,3,1,82,254,174,39,92,71,16,11,31, 2,2,31,35,63,5,6,57,57,3,3,1,82,254,212,2, 12,4,8,24,28,6,9,207,207,36,49,34,50,19,71,2, 27,71,0,3,0,59,0,0,2,209,2,199,0,60,0,64, 0,68,0,0,55,22,23,22,23,22,23,59,1,55,54,55, 54,55,54,55,52,53,17,51,17,7,6,7,6,7,6,7, 35,38,39,38,39,38,39,38,53,52,53,17,51,17,51,54, 55,54,55,54,55,54,61,1,51,21,7,6,7,6,35,34, 35,55,51,21,35,1,51,21,35,151,13,61,17,16,36,47, 8,82,34,38,18,54,33,23,2,87,3,17,91,22,21,64, 71,82,71,63,67,45,4,4,35,87,99,39,17,6,10,24, 3,1,87,3,10,40,50,79,2,2,195,71,71,254,140,71, 71,224,53,50,13,9,20,3,4,9,10,27,52,38,40,3, 3,1,82,254,174,39,92,71,16,11,31,2,2,31,35,63, 5,6,57,57,3,3,1,82,254,212,2,12,4,8,24,28, 6,9,207,207,36,49,34,50,19,71,2,27,71,0,0,2, 0,58,255,125,2,70,2,88,0,37,0,41,0,0,19,6, 7,6,7,6,7,21,35,53,55,54,55,54,55,54,55,39, 51,19,54,55,54,55,54,55,53,51,21,7,6,7,6,7, 6,7,23,35,7,51,21,35,252,25,7,48,10,8,1,87, 3,10,60,4,5,20,38,148,102,228,25,7,47,10,9,1, 87,3,11,58,5,5,20,38,148,102,254,188,188,1,69,17, 11,62,32,25,37,141,141,45,65,78,5,6,25,25,210,254, 187,17,11,61,25,25,36,150,150,43,62,73,5,7,25,25, 210,60,71,0,0,2,0,58,255,8,2,70,2,88,0,37, 0,45,0,0,19,6,7,6,7,6,7,21,35,53,55,54, 55,54,55,54,55,39,51,19,54,55,54,55,54,55,53,51, 21,7,6,7,6,7,6,7,23,35,7,21,35,53,35,53, 51,21,252,25,7,48,10,8,1,87,3,10,60,4,5,20, 38,148,102,228,25,7,47,10,9,1,87,3,11,58,5,5, 20,38,148,102,137,70,59,188,1,69,17,11,62,32,25,37, 141,141,45,65,78,5,6,25,25,210,254,187,17,11,61,25, 25,36,150,150,43,62,73,5,7,25,25,210,131,117,117,71, 71,0,0,2,0,58,0,0,2,70,2,88,0,37,0,41, 0,0,19,6,7,6,7,6,7,21,35,53,55,54,55,54, 55,54,55,39,51,19,54,55,54,55,54,55,53,51,21,7, 6,7,6,7,6,7,23,35,37,51,21,35,252,25,7,48, 10,8,1,87,3,10,60,4,5,20,38,148,102,228,25,7, 47,10,9,1,87,3,11,58,5,5,20,38,148,102,254,248, 71,71,1,69,17,11,62,32,25,37,141,141,45,65,78,5, 6,25,25,210,254,187,17,11,61,25,25,36,150,150,43,62, 73,5,7,25,25,210,195,71,0,2,0,58,0,0,2,54, 2,88,0,27,0,31,0,0,37,17,38,39,38,39,38,39, 38,39,35,53,51,22,23,22,23,22,23,22,23,22,23,17, 51,21,33,53,19,51,21,35,1,149,13,16,6,7,34,106, 8,18,139,145,94,49,12,12,40,24,41,13,2,2,74,254, 4,160,71,71,76,1,39,54,23,8,9,39,16,1,3,76, 11,20,5,6,17,32,52,61,8,10,254,210,76,76,1,9, 71,0,0,2,0,30,0,0,1,177,2,88,0,26,0,30, 0,0,37,7,35,55,51,39,38,39,38,39,38,39,38,39, 38,39,38,35,53,50,23,22,23,22,23,19,35,3,51,21, 35,1,66,175,117,207,81,22,6,19,6,11,13,16,1,4, 62,32,15,19,82,87,70,34,14,4,50,88,191,71,71,172, 172,203,167,46,27,9,13,15,8,1,2,28,4,1,76,42, 31,82,32,34,254,133,1,85,71,0,0,2,0,38,0,0, 2,31,2,88,0,7,0,11,0,0,1,17,35,17,33,53, 33,21,5,51,21,35,1,204,87,254,177,1,249,254,199,71, 71,2,12,253,244,2,12,76,76,183,71,0,0,3,0,63, 0,0,2,58,2,88,0,26,0,30,0,34,0,0,1,17, 35,17,38,39,38,39,38,47,1,38,39,34,39,35,53,33, 22,23,22,23,22,23,22,23,22,1,17,51,17,19,51,21, 35,2,58,87,11,14,5,6,10,12,6,38,57,2,10,249, 1,1,83,50,6,6,35,22,33,13,1,254,6,87,128,71, 71,1,122,254,134,1,116,55,24,8,8,14,7,4,21,9, 2,76,11,25,4,3,19,31,50,66,6,254,127,1,119,254, 137,1,85,71,0,2,0,18,0,0,0,199,2,88,0,3, 0,7,0,0,51,17,51,17,3,51,21,35,112,87,181,71, 71,2,88,253,168,1,85,71,0,2,0,14,0,0,1,40, 2,88,0,7,0,11,0,0,19,17,35,17,35,53,33,21, 5,51,21,35,213,87,87,1,1,254,230,71,71,2,12,253, 244,2,12,76,76,183,71,0,0,2,0,61,0,0,2,58, 2,88,0,68,0,72,0,0,1,34,7,53,54,51,50,23, 22,23,22,23,22,23,21,6,7,6,7,6,7,6,35,34, 39,38,39,38,39,38,39,17,51,17,22,23,22,23,22,23, 20,23,22,23,22,51,54,55,54,55,54,55,52,55,54,55, 52,55,53,38,39,38,39,38,47,1,38,39,38,7,51,21, 35,1,58,32,45,42,38,72,76,36,20,34,12,2,1,12, 27,5,5,21,35,77,72,73,77,33,23,36,11,1,1,87, 11,17,4,4,11,11,6,50,28,11,15,43,35,8,17,16, 9,3,24,10,2,11,17,4,4,11,11,6,51,23,13,50, 71,71,2,12,20,82,14,43,20,30,49,65,7,8,156,71, 44,7,7,33,17,43,43,17,33,52,64,6,7,1,122,254, 140,56,28,5,6,15,6,1,3,27,3,2,1,17,5,9, 10,10,1,4,34,49,4,8,144,56,28,5,6,15,6,4, 27,3,2,183,71,0,0,2,0,12,1,30,0,215,2,88, 0,3,0,7,0,0,19,51,17,7,39,51,21,35,128,87, 87,116,71,71,2,88,254,233,35,119,71,0,0,2,0,38, 255,56,1,218,2,88,0,26,0,30,0,0,1,17,35,17, 38,39,38,39,38,47,1,38,39,34,39,35,53,51,22,23, 22,23,22,23,22,23,22,7,51,21,35,1,218,87,11,14, 5,6,10,12,6,38,57,2,10,178,186,83,50,6,6,35, 22,33,13,1,251,71,71,1,122,253,190,2,60,55,24,8, 8,14,7,4,21,9,2,76,11,25,4,3,19,31,50,66, 6,44,71,0,0,2,0,57,0,0,2,4,2,88,0,44, 0,48,0,0,51,35,53,51,54,55,54,55,54,55,54,55, 54,63,1,53,38,39,38,39,38,39,38,39,35,53,51,22, 23,22,23,22,23,22,23,22,23,21,6,7,6,7,6,7, 6,3,51,21,35,227,170,164,78,30,11,12,21,11,1,2, 26,12,4,13,16,6,7,34,106,8,18,164,170,95,55,8, 9,40,24,41,13,2,2,13,34,5,6,53,172,3,8,71, 71,76,11,12,4,6,10,12,2,2,32,46,16,142,54,23, 8,9,39,16,1,3,76,11,24,3,4,17,32,52,61,8, 10,156,69,47,7,8,69,21,1,1,85,71,0,2,0,37, 0,0,2,33,2,237,0,3,0,31,0,0,19,51,21,35, 23,6,29,1,35,52,55,54,55,54,55,54,55,54,55,53, 33,53,51,21,33,21,20,15,1,6,7,6,226,71,71,178, 27,87,5,7,24,23,46,28,8,26,1,254,91,87,1,165, 31,5,22,46,29,1,155,71,132,42,97,69,120,30,49,43, 36,37,22,17,41,86,43,225,149,153,60,57,10,36,36,23, 0,2,0,48,0,0,2,58,2,88,0,24,0,28,0,0, 19,3,35,19,35,53,51,50,23,22,23,22,21,17,33,53, 51,17,52,39,38,47,1,38,35,23,51,21,35,214,58,88, 58,78,231,77,53,85,45,31,254,214,211,18,28,31,35,36, 56,17,71,71,2,12,253,244,2,12,76,23,33,65,45,59, 254,137,76,1,43,38,26,37,17,16,15,183,71,0,0,2, 0,51,0,0,1,70,2,88,0,20,0,24,0,0,41,1, 53,51,17,38,39,38,39,38,47,1,38,39,38,35,53,50, 23,22,23,7,51,21,35,1,70,254,237,188,11,14,5,6, 10,12,6,52,29,10,13,73,77,85,20,236,71,71,76,1, 40,55,24,8,8,14,7,4,28,3,1,76,43,46,133,37, 71,0,0,3,0,61,0,0,2,57,2,88,0,28,0,66, 0,70,0,0,33,34,39,38,39,38,39,52,39,17,33,50, 23,22,23,22,23,22,23,22,23,21,6,7,6,7,6,7, 6,39,54,55,54,55,54,55,52,55,54,55,52,55,53,38, 39,38,39,38,47,1,38,39,34,39,35,17,22,23,22,23, 22,23,20,23,22,23,22,3,51,21,35,1,59,73,77,33, 23,40,7,1,1,1,64,66,7,9,36,20,34,12,2,1, 12,27,5,5,21,35,77,72,43,35,8,17,16,9,3,24, 10,2,11,17,4,4,11,11,6,38,57,2,10,163,11,15, 4,5,11,11,6,50,28,11,24,71,71,43,17,33,58,57, 7,7,1,122,34,4,5,20,30,49,65,7,8,156,71,44, 7,7,33,17,43,76,1,17,5,9,10,10,1,4,34,49, 4,8,144,56,28,5,6,15,6,4,21,9,2,254,216,56, 25,7,7,15,6,1,3,27,3,2,1,9,71,0,0,2, 0,57,255,56,2,11,2,88,0,41,0,45,0,0,19,51, 50,23,22,23,22,23,22,23,22,23,17,35,17,38,39,38, 39,38,47,1,38,39,34,39,35,21,22,23,22,23,51,21, 47,1,38,39,38,39,38,39,37,51,21,35,57,215,64,63, 8,11,35,22,33,13,1,1,87,11,14,5,6,10,12,6, 38,57,2,10,121,8,20,14,66,34,40,71,36,31,43,6, 1,1,0,255,71,71,2,88,33,4,6,19,31,50,66,6, 7,253,190,2,60,55,24,8,8,14,7,4,21,9,2,127, 52,12,8,6,76,1,7,7,23,36,55,7,11,20,71,0, 0,2,0,63,0,0,2,21,2,88,0,57,0,61,0,0, 51,35,53,51,50,55,54,55,54,55,54,55,53,38,39,38, 39,38,39,34,43,1,21,22,23,22,23,51,21,47,1,38, 39,38,39,52,39,53,51,50,23,22,23,22,23,22,23,22, 31,1,21,20,7,6,7,6,7,6,19,51,21,35,244,181, 175,56,55,7,13,44,23,9,1,2,44,14,17,59,53,9, 10,88,8,20,14,66,34,40,71,37,30,43,7,1,181,76, 66,11,14,30,29,3,2,47,10,1,36,11,11,29,35,97, 12,71,71,76,24,3,6,19,60,22,19,142,57,42,13,8, 30,3,127,52,12,8,6,76,1,7,7,23,36,58,6,9, 210,30,5,7,15,29,3,2,53,63,15,156,38,61,19,13, 33,16,42,1,155,71,0,2,0,51,0,0,2,21,2,88, 0,28,0,32,0,0,1,54,55,54,55,54,55,54,55,54, 55,48,55,53,51,21,6,15,1,6,7,6,7,19,33,53, 33,1,51,3,51,21,35,1,60,46,10,2,2,11,11,2, 2,23,11,1,87,10,33,6,24,34,30,25,171,254,38,1, 70,254,178,100,19,71,71,1,85,5,4,1,1,6,13,4, 2,29,42,5,147,154,55,48,8,34,16,13,3,254,243,76, 2,12,254,189,71,0,0,3,0,62,255,56,2,38,2,88, 0,18,0,22,0,26,0,0,37,35,53,51,54,55,54,63, 1,17,33,53,33,17,6,7,6,7,6,1,17,35,17,23, 51,21,35,1,44,62,55,104,31,23,9,3,254,111,1,232, 12,24,5,7,48,254,207,87,208,71,71,33,76,14,42,33, 50,13,1,7,76,254,167,71,40,8,10,73,1,117,253,142, 2,114,85,71,0,2,0,37,0,0,1,239,2,88,0,26, 0,30,0,0,1,17,35,17,38,39,38,39,38,47,1,38, 39,34,39,35,53,51,22,23,22,23,22,23,22,23,22,5, 51,21,35,1,239,87,11,14,5,6,10,12,6,38,57,2, 10,200,207,84,50,6,6,35,22,33,13,1,254,246,71,71, 1,122,254,134,1,116,55,24,8,8,14,7,4,21,9,2, 76,11,26,3,3,19,31,50,66,6,44,71,0,2,0,59, 0,0,2,209,2,88,0,60,0,64,0,0,55,22,23,22, 23,22,23,59,1,55,54,55,54,55,54,55,52,53,17,51, 17,7,6,7,6,7,6,7,35,38,39,38,39,38,39,38, 53,52,53,17,51,17,51,54,55,54,55,54,55,54,61,1, 51,21,7,6,7,6,35,34,35,55,51,21,35,151,13,61, 17,16,36,47,8,82,34,38,18,54,33,23,2,87,3,17, 91,22,21,64,71,82,71,63,67,45,4,4,35,87,99,39, 17,6,10,24,3,1,87,3,10,40,50,79,2,2,195,71, 71,224,53,50,13,9,20,3,4,9,10,27,52,38,40,3, 3,1,82,254,174,39,92,71,16,11,31,2,2,31,35,63, 5,6,57,57,3,3,1,82,254,212,2,12,4,8,24,28, 6,9,207,207,36,49,34,50,19,71,0,2,0,35,0,0, 2,123,2,88,0,45,0,49,0,0,1,17,20,7,6,7, 6,15,1,6,43,1,53,51,50,55,54,55,54,55,54,61, 1,17,35,53,33,22,23,22,31,1,17,35,17,38,39,38, 39,38,39,38,39,38,47,1,7,51,21,35,1,16,9,6, 11,13,37,8,65,84,4,4,50,41,6,6,21,5,17,60, 1,3,155,48,33,12,3,87,11,15,4,6,11,12,2,3, 38,59,10,3,71,71,2,12,254,212,63,28,18,19,24,24, 5,43,76,25,3,4,14,8,24,44,29,1,41,76,21,72, 50,64,15,254,134,1,116,56,25,7,8,15,7,1,2,20, 9,2,183,71,0,2,0,62,0,0,0,149,2,219,0,3, 0,7,0,0,51,17,51,17,3,51,21,35,62,87,79,71, 71,2,88,253,168,2,219,71,0,2,0,58,0,0,2,54, 2,219,0,27,0,31,0,0,37,17,38,39,38,39,38,39, 38,39,35,53,51,22,23,22,23,22,23,22,23,22,23,17, 51,21,33,53,19,51,21,35,1,149,13,16,6,7,34,106, 8,18,139,145,94,49,12,12,40,24,41,13,2,2,74,254, 4,110,200,200,76,1,39,54,23,8,9,39,16,1,3,76, 11,20,5,6,17,32,52,61,8,10,254,210,76,76,2,143, 71,0,0,2,0,57,0,0,2,4,2,219,0,44,0,48, 0,0,51,35,53,51,54,55,54,55,54,55,54,55,54,63, 1,53,38,39,38,39,38,39,38,39,35,53,51,22,23,22, 23,22,23,22,23,22,23,21,6,7,6,7,6,7,6,3, 51,21,35,227,170,164,78,30,11,12,21,11,1,2,26,12, 4,13,16,6,7,34,106,8,18,164,170,95,55,8,9,40, 24,41,13,2,2,13,34,5,6,53,172,3,86,200,200,76, 11,12,4,6,10,12,2,2,32,46,16,142,54,23,8,9, 39,16,1,3,76,11,24,3,4,17,32,52,61,8,10,156, 69,47,7,8,69,21,1,2,219,71,0,2,0,63,0,0, 2,21,2,219,0,57,0,61,0,0,51,35,53,51,50,55, 54,55,54,55,54,55,53,38,39,38,39,38,39,34,43,1, 21,22,23,22,23,51,21,47,1,38,39,38,39,52,39,53, 51,50,23,22,23,22,23,22,23,22,31,1,21,20,7,6, 7,6,7,6,3,51,21,35,244,181,175,56,55,7,13,44, 23,9,1,2,44,14,17,59,53,9,10,88,8,20,14,66, 34,40,71,37,30,43,7,1,181,76,66,11,14,30,29,3, 2,47,10,1,36,11,11,29,35,97,136,200,200,76,24,3, 6,19,60,22,19,142,57,42,13,8,30,3,127,52,12,8, 6,76,1,7,7,23,36,58,6,9,210,30,5,7,15,29, 3,2,53,63,15,156,38,61,19,13,33,16,42,2,219,71, 0,1,0,72,0,0,2,70,2,237,0,22,0,0,19,53, 51,21,19,54,55,54,55,54,55,53,51,21,7,6,7,6, 7,6,7,23,35,72,87,229,25,7,47,10,9,1,87,3, 11,58,5,5,20,38,148,102,2,68,169,149,254,187,17,11, 61,25,25,36,150,150,43,62,73,5,7,25,25,210,0,3, 0,35,255,242,2,242,2,193,0,33,0,37,0,41,0,0, 37,53,52,55,54,55,54,55,54,53,52,39,38,39,38,35, 6,7,51,52,55,54,51,50,23,22,21,20,7,6,7,6, 29,1,23,35,21,51,7,9,2,1,160,21,10,19,55,6, 1,67,16,20,14,16,132,5,53,11,19,51,57,18,5,47, 37,11,17,56,56,56,21,254,152,1,104,1,103,233,30,27, 22,10,18,51,42,9,10,78,29,7,4,2,10,136,40,21, 36,43,13,15,41,41,34,14,22,32,35,59,65,123,1,104, 1,103,254,153,0,1,0,0,0,1,69,30,40,17,139,253, 95,15,60,245,2,19,3,232,0,0,0,0,187,169,178,179, 0,0,0,0,187,169,178,179,252,227,254,53,6,96,4,117, 0,0,0,8,0,0,0,1,0,0,0,0,0,1,0,0, 4,117,254,53,0,90,6,170,252,227,253,58,6,96,0,1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,127, 1,176,0,33,0,0,0,0,1,77,0,0,1,22,0,0, 1,22,0,124,1,99,0,52,2,44,0,14,2,44,0,32, 3,121,0,29,2,155,0,52,0,191,0,48,1,77,0,73, 1,77,0,38,1,133,0,40,2,72,0,50,1,22,0,87, 1,77,0,46,1,22,0,87,1,22,255,248,2,44,0,43, 2,44,0,102,2,44,0,34,2,44,0,32,2,44,0,28, 2,44,0,35,2,44,0,43,2,44,0,46,2,44,0,37, 2,44,0,38,1,22,0,110,1,22,0,110,2,72,0,45, 2,72,0,50,2,72,0,50,2,44,0,77,3,247,0,34, 2,155,0,17,2,155,0,79,2,210,0,48,2,210,0,89, 2,155,0,90,2,99,0,90,3,10,0,44,2,210,0,83, 1,22,0,100,1,244,0,17,2,155,0,79,2,44,0,80, 3,65,0,75,2,210,0,76,3,10,0,38,2,155,0,91, 3,10,0,38,2,210,0,93,2,155,0,48,2,99,0,21, 2,210,0,85,2,155,0,30,3,176,0,22,2,155,0,22, 2,155,0,13,2,99,0,28,1,22,0,64,1,22,255,248, 1,22,0,23,1,213,0,44,2,44,255,234,1,77,0,22, 2,44,0,42,2,44,0,54,1,244,0,31,2,44,0,26, 2,44,0,40,1,22,0,18,2,44,0,29,2,44,0,70, 0,222,0,66,0,222,255,238,1,244,0,58,0,222,0,68, 3,65,0,70,2,44,0,70,2,44,0,36,2,44,0,54, 2,44,0,26,1,77,0,69,1,244,0,34,1,22,0,14, 2,44,0,65,1,244,0,10,2,210,0,6,1,244,0,17, 1,244,0,20,1,244,0,31,1,78,0,43,1,4,0,100, 1,78,0,29,2,72,0,75,1,22,0,0,1,77,0,121, 2,44,0,52,2,44,0,26,2,44,0,67,2,44,0,11, 1,4,0,100,2,44,0,43,1,77,0,30,2,225,255,243, 1,114,0,37,2,44,0,98,2,72,0,40,1,77,0,46, 2,225,255,243,1,77,0,28,2,94,0,151,2,72,0,50, 1,95,0,19,1,95,0,16,1,77,0,92,2,44,0,65, 2,25,0,48,1,22,0,87,1,77,0,39,1,95,0,61, 1,109,0,40,2,44,0,98,3,101,0,61,3,101,0,61, 3,101,0,16,2,99,0,95,2,155,0,17,2,155,0,17, 2,155,0,17,2,155,0,17,2,155,0,17,2,155,0,17, 3,232,0,11,2,210,0,48,2,155,0,90,2,155,0,90, 2,155,0,90,2,155,0,90,1,22,0,1,1,22,0,71, 1,22,255,255,1,22,0,9,2,210,0,20,2,210,0,76, 3,10,0,38,3,10,0,38,3,10,0,38,3,10,0,38, 3,10,0,38,2,72,0,95,3,10,0,30,2,210,0,85, 2,210,0,85,2,210,0,85,2,210,0,85,2,154,0,13, 2,154,0,91,2,99,0,67,2,44,0,42,2,44,0,42, 2,44,0,42,2,44,0,42,2,44,0,42,2,44,0,42, 3,121,0,34,1,244,0,31,2,44,0,40,2,44,0,40, 2,44,0,40,2,44,0,40,1,22,255,251,1,22,0,65, 1,22,255,249,1,22,0,3,2,44,0,36,2,44,0,70, 2,44,0,36,2,44,0,36,2,44,0,36,2,44,0,36, 2,44,0,36,2,72,0,50,2,99,0,18,2,44,0,65, 2,44,0,65,2,44,0,65,2,44,0,65,1,244,0,20, 2,43,0,54,1,244,0,20,2,155,0,17,2,44,0,42, 2,155,0,17,2,44,0,42,2,155,0,17,2,44,0,43, 2,210,0,48,1,244,0,31,2,210,0,48,1,244,0,31, 2,210,0,48,1,244,0,31,2,210,0,48,1,244,0,31, 2,210,0,89,2,123,0,26,2,210,0,20,2,44,0,26, 2,155,0,90,2,44,0,40,2,155,0,90,2,44,0,40, 2,155,0,90,2,44,0,40,2,155,0,90,2,44,0,40, 2,155,0,90,2,44,0,40,3,10,0,44,2,44,0,29, 3,10,0,44,2,44,0,29,3,10,0,44,2,44,0,29, 3,10,0,44,2,44,0,29,2,210,0,83,2,44,255,224, 2,210,0,39,2,44,0,7,1,22,255,246,1,22,255,235, 1,22,0,20,0,222,255,240,1,22,255,253,1,22,255,241, 1,22,0,66,0,222,0,25,1,22,0,96,1,22,0,94, 2,188,0,100,1,118,0,66,1,244,0,17,0,222,255,224, 2,155,0,79,1,244,0,58,1,244,0,58,2,44,0,70, 0,222,0,63,2,44,0,80,0,222,0,63,2,44,0,80, 1,36,0,68,2,44,0,80,1,244,0,68,2,44,0,0, 0,222,0,0,2,210,0,76,2,44,0,70,2,210,0,76, 2,44,0,70,2,210,0,76,2,44,0,70,2,44,0,70, 2,210,0,76,2,44,0,70,3,10,0,38,2,44,0,36, 3,10,0,38,2,44,0,36,3,10,0,38,2,44,0,36, 3,232,0,43,3,176,0,40,2,210,0,93,1,77,0,69, 2,210,0,93,1,77,0,65,2,210,0,93,1,77,0,48, 2,155,0,48,1,244,0,34,2,155,0,48,1,244,0,34, 2,155,0,47,1,244,0,34,2,155,0,48,1,244,0,34, 2,99,0,21,1,22,0,14,2,99,0,21,1,52,0,14, 2,99,0,21,1,22,0,14,2,210,0,85,2,44,0,65, 2,210,0,85,2,44,0,65,2,210,0,85,2,44,0,65, 2,210,0,85,2,44,0,65,2,210,0,85,2,44,0,65, 2,210,0,85,2,44,0,65,3,176,0,22,2,210,0,6, 2,155,0,13,1,244,0,20,2,155,0,13,2,99,0,28, 1,244,0,31,2,99,0,28,1,244,0,31,2,99,0,28, 1,244,0,31,1,22,0,18,2,44,0,26,2,155,0,79, 2,44,0,54,2,155,0,0,2,44,255,247,2,210,0,48, 2,210,0,48,1,244,0,31,2,210,0,20,2,155,0,78, 2,44,0,54,2,155,0,90,3,10,0,38,2,155,0,48, 2,99,0,2,2,44,0,11,3,10,0,44,1,244,0,58, 2,210,255,244,2,44,0,70,3,10,0,38,2,44,0,54, 2,155,0,48,1,244,0,34,2,99,0,28,1,22,0,14, 1,22,0,14,2,99,0,21,5,31,0,89,4,184,0,89, 4,32,0,26,4,32,0,80,3,10,0,80,1,188,0,68, 4,134,0,76,3,176,0,76,3,10,0,70,2,155,0,17, 2,44,0,42,1,22,0,3,1,22,255,249,3,10,0,38, 2,44,0,36,2,210,0,85,2,44,0,65,2,210,0,85, 2,44,0,65,2,210,0,85,2,44,0,65,2,210,0,85, 2,44,0,65,2,210,0,85,2,44,0,65,2,44,0,40, 2,155,0,17,2,44,0,42,2,155,0,17,2,44,0,42, 3,232,0,11,3,121,0,34,3,10,0,44,2,44,0,29, 2,155,0,79,1,244,255,212,3,10,0,38,2,44,0,36, 3,10,0,38,2,44,0,36,0,222,255,223,5,53,0,89, 4,198,0,89,4,32,0,26,3,10,0,44,2,44,0,29, 2,210,0,76,2,44,0,70,2,155,0,17,2,44,0,42, 3,232,0,11,3,121,0,34,3,10,0,30,2,99,0,18, 2,155,254,250,2,44,254,188,2,155,255,110,2,44,255,48, 2,155,255,0,2,44,254,193,2,155,255,115,2,44,255,52, 1,22,254,60,1,22,254,49,1,22,254,176,1,22,254,164, 3,10,255,46,2,44,254,185,3,10,255,162,2,44,255,44, 2,210,254,174,1,77,254,108,2,210,255,34,1,77,254,224, 2,210,255,22,2,44,254,186,2,210,255,138,2,44,255,46, 2,155,0,48,1,244,0,34,2,99,0,21,1,22,0,14, 2,210,0,83,2,44,0,70,2,155,0,17,2,44,0,42, 2,155,0,90,2,44,0,40,3,10,0,38,2,44,0,36, 3,10,0,38,2,44,0,36,3,10,0,38,2,44,0,36, 3,10,0,38,2,44,0,36,2,155,0,13,1,244,0,20, 2,44,0,42,2,44,0,26,2,44,0,68,2,44,0,54, 1,244,0,31,2,44,0,26,2,44,0,26,2,44,0,40, 2,44,0,40,1,244,0,34,1,244,0,34,2,44,0,29, 2,44,0,29,2,44,0,70,2,44,0,70,2,44,0,70, 0,222,255,248,0,222,0,66,1,22,0,94,0,222,0,68, 3,65,0,70,3,65,0,70,3,65,0,70,2,44,255,238, 2,44,0,70,2,44,0,36,1,77,0,69,1,77,0,69, 1,77,0,69,1,77,0,69,1,77,0,69,1,22,0,84, 1,22,0,84,1,244,255,202,1,22,0,0,1,22,0,0, 1,22,0,0,1,22,0,14,1,22,0,14,2,44,0,65, 1,244,0,10,2,210,0,6,1,244,0,20,1,244,0,31, 1,244,0,36,1,244,0,58,2,44,0,26,1,77,0,20, 1,77,0,19,1,77,0,92,1,77,0,22,1,77,0,15, 1,77,0,115,1,77,0,79,1,77,0,57,1,77,0,5, 1,77,255,221,0,0,254,201,0,0,255,15,0,0,254,199, 0,0,254,184,0,0,254,207,0,0,254,194,0,0,255,38, 0,0,254,209,0,0,255,2,0,0,254,144,0,0,254,198, 0,0,254,144,0,0,254,194,0,0,1,198,0,0,255,54, 0,0,1,198,0,0,255,28,0,0,254,218,0,0,254,236, 0,199,0,39,0,199,0,22,1,76,0,129,1,22,0,110, 1,158,0,174,2,235,0,75,2,218,0,8,1,22,0,89, 2,152,255,212,2,169,255,185,0,230,255,194,3,24,255,240, 2,198,255,158,2,246,255,250,1,30,255,223,2,172,0,8, 2,116,0,74,2,70,0,82,2,172,0,13,2,138,0,80, 2,116,0,35,2,171,0,65,2,238,0,45,0,236,0,69, 2,172,0,74,2,172,0,8,3,32,0,64,2,142,0,56, 2,118,0,65,2,238,0,50,2,209,0,80,2,126,0,78, 2,116,0,40,2,116,0,39,2,172,0,21,2,205,0,29, 2,211,0,36,2,233,0,52,2,208,0,42,0,236,255,239, 2,172,0,21,2,96,0,48,2,16,0,39,2,35,0,24, 1,51,0,56,2,3,0,40,2,84,0,48,2,4,0,50, 2,19,0,25,2,48,0,37,1,254,0,39,1,206,0,38, 2,14,0,24,2,14,0,45,1,30,0,56,2,4,0,66, 2,48,0,30,2,62,0,78,1,248,0,14,1,214,0,15, 2,38,0,34,2,149,0,53,2,54,0,57,2,23,0,22, 2,104,0,34,2,20,0,42,2,3,0,40,2,229,0,46, 2,60,0,14,2,150,0,42,2,228,0,36,1,30,255,223, 2,3,0,40,2,41,0,34,2,6,0,40,2,228,0,36, 2,155,0,90,2,155,0,79,2,254,0,28,2,99,0,90, 2,210,0,48,2,155,0,48,1,22,0,100,1,22,0,8, 1,244,0,17,4,56,0,83,3,246,0,83,2,254,0,28, 2,155,0,79,2,210,0,76,2,138,0,26,2,210,0,83, 2,155,0,17,2,155,0,79,2,155,0,79,2,99,0,79, 3,44,0,34,2,155,0,79,3,255,0,63,2,155,0,48, 2,216,0,79,2,216,0,79,2,155,0,79,2,161,0,33, 3,76,0,79,2,207,0,79,3,10,0,38,2,207,0,79, 2,155,0,79,2,210,0,48,2,99,0,21,2,138,0,26, 3,168,0,64,2,155,0,22,2,229,0,79,2,136,0,79, 3,60,0,79,3,82,0,79,3,129,0,81,3,104,0,79, 2,155,0,79,2,210,0,48,4,8,0,83,2,190,0,32, 2,44,0,42,2,44,0,36,2,10,0,70,1,174,0,70, 2,90,0,30,2,44,0,40,3,69,0,44,1,244,0,34, 2,55,0,70,2,55,0,70,1,254,0,70,2,45,0,70, 2,106,0,70,2,46,0,70,2,44,0,36,2,45,0,70, 2,64,0,70,1,244,0,31,1,240,0,60,1,244,0,20, 3,144,0,61,1,244,0,17,2,66,0,70,2,8,0,70, 2,180,0,70,2,200,0,70,2,222,0,57,2,178,0,70, 2,40,0,70,1,244,0,31,2,246,0,70,2,31,0,14, 2,44,0,40,2,44,0,40,2,56,0,18,1,174,0,70, 1,244,0,31,1,244,0,34,0,222,0,66,1,22,0,3, 0,222,255,238,3,72,0,70,3,82,0,70,2,56,0,18, 1,244,0,58,2,44,0,70,1,244,0,20,2,44,0,70, 2,155,0,79,2,40,0,70,2,155,0,91,2,44,0,54, 2,99,0,90,1,174,0,70,2,99,0,90,1,174,0,70, 2,99,0,90,1,174,0,70,3,255,0,63,3,69,0,14, 2,155,0,48,1,244,0,34,2,155,0,79,1,244,0,58, 2,155,0,79,1,244,0,58,2,155,0,79,1,244,0,58, 2,155,0,79,1,244,0,58,2,210,0,83,2,44,0,70, 4,36,0,83,2,252,0,70,2,210,0,83,2,44,0,70, 2,210,0,48,1,244,0,31,2,210,0,48,1,244,0,31, 2,99,0,21,1,240,0,60,2,155,0,13,1,244,0,10, 2,155,0,13,1,244,0,10,2,155,0,22,1,244,0,17, 3,6,0,83,2,96,0,70,2,130,0,83,1,252,0,69, 2,130,0,83,1,252,0,69,2,130,0,83,1,252,0,69, 3,10,0,38,2,44,0,40,2,176,0,39,2,44,0,40, 1,22,0,100,3,255,0,63,3,69,0,44,2,155,0,79, 1,244,0,58,2,210,0,83,2,44,0,70,2,130,0,83, 1,252,0,69,2,155,0,17,2,44,0,42,2,155,0,17, 2,44,0,42,3,232,0,11,3,121,0,34,2,155,0,79, 2,44,0,40,3,10,0,38,2,44,0,40,3,10,0,38, 2,44,0,40,3,255,0,63,3,69,0,44,2,155,0,48, 1,244,0,34,2,155,0,48,1,244,0,34,2,216,0,79, 2,55,0,70,2,216,0,79,2,55,0,70,3,10,0,38, 2,44,0,36,3,10,0,38,2,44,0,36,3,10,0,38, 2,44,0,36,2,210,0,48,1,244,0,31,2,138,0,26, 1,244,0,20,2,138,0,26,1,244,0,20,2,138,0,26, 1,244,0,20,2,136,0,79,2,8,0,70,3,104,0,79, 2,178,0,70,2,210,0,79,2,193,0,79,3,6,0,83, 2,242,0,82,2,210,0,79,2,239,0,30,1,229,0,84, 2,210,0,74,3,14,0,63,2,143,0,67,2,187,0,63, 1,161,0,93,3,85,0,66,3,23,0,34,2,199,0,74, 2,76,0,23,2,151,0,51,2,153,0,79,2,153,0,47, 2,244,0,45,2,111,0,49,3,5,0,9,2,91,0,40, 2,210,0,74,2,136,0,66,2,210,0,74,2,239,0,42, 2,238,0,74,2,210,0,79,2,236,0,74,2,155,0,45, 2,187,0,74,2,111,0,60,1,161,0,76,3,17,0,42, 2,126,0,36,3,10,0,48,2,204,0,39,0,222,0,53, 0,133,0,24,1,69,0,23,1,77,0,43,1,88,0,21, 3,65,0,65,2,44,0,74,2,60,0,35,2,69,0,73, 2,38,0,60,2,76,0,42,1,192,0,94,2,44,0,63, 2,56,0,68,2,70,0,48,2,33,0,66,1,45,0,60, 3,31,0,66,2,44,0,43,2,42,0,71,2,21,0,66, 2,36,0,40,2,40,0,39,2,40,0,43,2,32,0,73, 0,222,255,210,2,32,0,73,1,200,0,53,2,44,0,69, 1,134,0,35,3,65,0,65,1,253,0,38,2,35,0,80, 2,21,0,64,2,98,0,71,3,119,0,73,2,44,0,69, 2,33,0,32,1,96,0,76,3,85,0,43,2,76,0,25, 2,67,0,50,2,178,0,42,2,33,0,70,1,22,0,90, 1,111,0,12,0,70,0,0,1,79,0,0,1,73,0,0, 1,73,0,0,0,70,0,0,0,200,0,0,0,200,0,0, 0,188,0,0,0,188,0,0,0,70,0,0,1,73,0,0, 0,70,0,0,0,70,0,0,1,232,0,38,0,200,0,0, 0,212,0,62,0,0,2,127,0,0,0,70,1,22,0,110, 0,70,0,0,2,128,0,58,2,79,0,58,1,210,0,30, 2,86,0,38,2,110,0,63,0,212,0,62,1,95,0,39, 2,111,0,63,2,96,0,61,0,200,0,58,2,14,0,38, 2,38,0,57,2,88,0,37,2,111,0,63,2,109,0,48, 0,212,0,62,1,122,0,51,2,95,0,61,2,75,0,36, 2,63,0,57,2,56,0,63,2,28,0,13,2,78,0,51, 2,94,0,62,2,35,0,37,3,8,0,59,2,175,0,35, 2,88,0,56,0,201,0,52,0,201,0,50,0,201,0,51, 0,201,0,44,1,244,0,106,1,244,0,106,1,244,0,106, 1,114,0,84,1,114,0,87,2,62,0,26,2,62,0,26, 2,133,0,136,2,62,0,26,1,196,0,35,1,196,0,57, 2,62,255,184,2,133,255,184,2,133,255,184,1,253,0,107, 1,253,0,107,2,170,0,109,2,73,0,100,1,148,0,177, 2,115,255,184,2,206,255,184,2,206,255,184,1,228,255,184, 2,170,255,112,2,88,0,97,2,148,255,184,2,170,0,107, 2,26,0,107,2,206,255,184,2,206,0,167,2,206,255,184, 2,62,255,184,2,62,255,184,2,126,0,127,2,73,255,184, 1,253,0,107,2,170,255,184,2,170,0,99,0,1,0,0, 0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0, 0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0, 0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0, 0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0, 0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0, 0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0, 0,1,0,167,0,1,0,0,0,6,255,21,0,6,255,112, 2,132,0,41,3,48,0,41,1,136,0,0,1,136,0,0, 1,203,0,0,2,149,0,0,2,129,0,0,1,167,0,0, 1,167,0,0,3,48,0,41,3,48,0,41,3,48,0,41, 1,137,0,0,2,110,0,0,1,168,0,0,1,216,0,0, 1,252,0,0,2,5,0,0,2,71,0,0,2,37,0,0, 1,247,0,0,2,26,0,0,1,188,0,0,1,224,0,0, 2,7,0,0,1,223,0,0,1,248,0,0,1,183,0,0, 2,30,0,43,1,171,0,0,2,8,0,43,1,159,0,0, 1,159,0,0,1,145,0,0,1,145,0,0,1,186,0,0, 2,8,0,43,1,207,0,0,1,195,0,0,1,63,0,0, 1,63,0,0,2,37,0,0,2,129,0,0,1,186,0,0, 2,77,0,0,1,142,0,0,1,250,0,0,1,174,0,0, 0,6,254,238,1,182,0,45,0,172,255,251,0,172,255,250, 0,172,255,63,0,6,254,125,0,6,255,41,0,6,255,30, 0,6,255,21,0,6,254,181,0,6,254,204,0,172,255,201, 0,172,255,96,0,172,255,112,0,6,255,104,3,130,0,40, 0,6,255,148,2,72,0,148,2,72,0,173,2,72,0,143, 2,72,0,133,2,72,0,47,2,72,0,113,2,72,0,99, 2,72,0,78,2,72,0,102,2,72,0,153,3,130,0,40, 1,44,0,20,1,144,0,20,1,44,0,19,2,128,255,236, 3,12,255,236,2,8,255,236,2,8,255,236,2,18,255,236, 2,38,255,236,2,108,0,20,1,164,0,20,1,224,0,20, 2,108,0,20,2,108,0,20,2,208,0,20,2,140,255,236, 1,244,0,20,1,234,0,20,1,210,255,236,2,28,0,18, 1,234,255,236,2,28,255,236,2,118,255,236,2,78,255,236, 2,168,0,24,1,254,255,236,1,234,255,236,2,8,255,236, 2,8,255,236,1,214,0,20,2,28,255,236,1,234,0,20, 1,214,255,236,1,234,0,20,1,196,255,236,2,48,0,19, 2,138,255,236,1,224,255,236,2,76,255,236,1,224,255,237, 1,214,255,236,1,224,255,236,1,216,255,236,2,0,0,20, 1,214,255,236,1,214,255,236,2,8,255,236,0,160,0,20, 0,180,255,236,0,180,255,236,0,180,254,12,1,64,0,20, 1,73,0,28,0,195,0,35,1,4,255,206,1,84,255,236, 1,84,255,236,2,228,255,236,2,228,255,236,1,144,0,120, 0,180,255,136,2,28,255,236,2,8,255,236,1,214,255,236, 2,100,0,20,1,164,0,20,0,234,0,100,1,104,0,100, 1,204,0,22,1,164,0,20,2,8,0,19,2,28,0,19, 1,144,0,21,1,144,0,24,2,48,0,24,1,134,0,20, 1,224,0,21,1,164,0,20,1,224,255,246,1,214,255,243, 1,144,0,20,1,214,255,236,1,144,0,20,1,144,0,20, 1,144,0,20,0,120,0,20,1,184,0,19,1,164,0,20, 1,164,0,20,2,232,0,0,3,146,0,0,2,178,0,0, 2,158,0,0,2,84,0,0,2,84,0,0,1,242,0,0, 2,232,0,0,2,84,0,0,2,232,0,0,2,38,0,0, 2,22,0,0,2,106,0,0,2,178,0,0,2,34,0,0, 2,6,0,0,2,80,0,0,1,236,0,0,2,62,0,0, 2,2,0,3,2,14,0,0,2,44,0,0,2,12,0,0, 2,16,0,0,2,62,0,0,1,228,0,0,2,22,0,0, 1,248,0,0,2,22,0,0,2,26,0,0,2,22,0,0, 1,250,0,0,2,50,0,0,2,4,0,0,2,34,0,0, 2,158,0,0,2,26,0,0,2,214,0,0,2,214,255,254, 2,2,0,0,2,34,0,0,2,34,0,0,2,5,0,0, 1,30,0,84,0,172,0,0,0,190,0,0,0,190,255,132, 0,1,254,97,0,1,254,98,0,1,254,126,0,1,254,120, 0,1,254,100,0,1,254,56,0,1,255,52,2,22,0,0, 2,106,255,254,1,236,0,0,1,228,0,0,1,250,0,0, 2,104,0,0,1,224,0,0,2,48,255,250,1,224,255,254, 1,212,0,0,1,236,255,248,2,2,255,252,2,26,0,0, 2,60,0,0,2,48,0,4,0,1,254,143,1,242,0,0, 2,84,0,0,3,132,0,0,0,33,254,193,0,33,255,72, 2,255,0,39,3,193,0,39,1,244,0,40,1,239,0,40, 2,16,0,40,2,190,0,40,3,117,0,30,1,245,0,39, 2,100,0,39,2,107,0,39,2,57,0,38,2,20,0,40, 1,102,0,39,2,108,0,40,2,94,0,40,2,90,0,39, 2,119,0,40,1,239,0,40,2,16,0,40,2,19,0,40, 1,255,0,39,2,102,0,39,1,38,0,39,1,88,0,39, 1,169,0,40,1,89,0,36,2,99,0,39,2,0,0,39, 2,66,0,40,1,172,0,38,1,167,0,40,0,231,0,40, 2,70,255,175,1,88,0,39,2,46,0,39,2,158,0,40, 2,25,0,39,2,80,0,39,2,56,0,39,2,88,0,39, 2,32,0,38,2,19,0,40,0,232,0,70,0,232,0,69, 0,232,255,78,0,33,254,80,0,33,254,79,0,33,254,189, 0,33,254,144,0,33,254,117,0,232,255,102,0,232,255,75, 3,135,0,30,1,223,0,39,1,160,0,40,1,209,0,38, 1,213,0,39,1,242,0,29,1,207,0,39,1,195,0,39, 1,254,0,39,1,199,0,40,1,232,0,39,0,131,255,156, 1,46,255,216,2,48,0,0,2,132,0,0,2,120,255,253, 2,118,255,253,2,41,255,253,2,92,255,237,2,8,255,255, 2,60,255,254,2,58,255,254,2,68,255,254,2,53,0,1, 2,68,255,254,2,52,255,255,2,63,255,253,2,53,255,253, 2,53,0,1,2,12,255,254,2,60,0,1,2,188,255,253, 2,143,255,248,2,108,0,1,2,140,0,1,2,48,255,251, 2,53,255,253,2,53,255,253,2,33,255,254,2,12,0,1, 0,128,0,20,0,1,254,38,0,190,255,221,0,1,254,223, 0,1,255,44,0,1,254,76,1,140,255,250,2,51,0,1, 1,252,0,18,1,168,0,25,1,184,0,24,2,88,255,244, 2,88,0,0,2,88,255,249,2,88,0,0,2,88,0,48, 1,255,0,56,1,227,0,47,1,223,0,83,3,125,0,16, 3,250,0,12,4,146,0,8,3,148,255,177,2,164,0,16, 3,68,0,12,4,201,0,6,2,232,0,14,2,232,0,14, 3,80,0,12,3,45,0,12,3,45,0,12,3,45,0,12, 2,176,0,16,2,232,0,14,2,164,0,16,3,80,0,12, 3,216,0,8,3,9,0,20,5,58,0,8,2,152,255,228, 2,49,255,233,4,5,0,8,2,95,0,18,2,185,0,14, 2,185,0,14,1,178,0,10,2,105,255,254,3,101,0,12, 3,91,0,10,2,185,0,8,3,101,0,16,4,121,0,10, 4,40,0,12,5,36,0,16,1,168,0,10,0,125,254,143, 2,84,254,180,2,27,0,8,2,84,0,12,2,138,0,10, 3,205,0,18,5,6,0,12,5,6,0,10,6,170,0,12, 1,77,0,118,3,91,0,10,3,10,0,16,3,113,0,14, 3,108,0,16,2,136,0,14,2,232,0,16,1,86,0,22, 2,108,0,22,2,79,0,17,2,88,0,17,3,8,0,22, 4,114,0,14,5,184,0,14,2,62,0,17,2,58,0,17, 2,68,0,17,2,77,255,251,2,85,255,251,2,113,255,251, 1,0,0,7,2,53,0,14,1,70,0,14,2,92,0,5, 2,139,255,252,1,152,255,251,2,99,0,10,3,75,0,17, 2,98,0,26,1,2,0,5,1,61,0,10,1,72,0,10, 3,35,0,14,1,61,0,21,1,72,0,10,1,96,0,10, 1,96,0,10,1,61,0,10,0,248,0,24,2,109,0,10, 2,108,0,12,2,108,0,12,2,137,0,64,2,38,0,79, 2,61,0,64,2,55,0,79,2,50,0,12,2,45,0,64, 2,50,0,64,2,55,0,96,2,45,0,64,2,45,0,80, 1,212,0,60,1,62,0,7,2,148,0,31,3,10,0,36, 3,39,0,30,3,62,0,19,3,70,0,37,3,92,0,32, 3,232,0,0,3,205,0,35,3,92,0,28,3,229,0,63, 2,228,0,30,3,70,0,35,3,118,0,32,3,118,0,32, 5,15,0,25,5,15,0,38,3,70,0,43,3,92,0,28, 3,92,0,30,3,92,0,19,5,123,0,15,3,205,0,33, 3,70,0,37,2,148,0,28,3,92,0,32,3,205,0,31, 2,148,0,26,3,118,0,32,3,70,0,37,3,92,0,32, 3,205,0,28,3,70,0,29,3,92,0,31,3,118,0,44, 3,39,0,26,3,62,0,31,3,70,0,42,3,205,0,31, 3,118,0,53,3,118,0,47,3,205,0,29,3,62,0,26, 3,205,0,40,0,0,253,31,1,176,0,3,1,124,0,1, 1,164,0,15,0,0,252,237,0,0,253,16,0,0,252,237, 0,0,252,227,1,245,0,13,2,140,0,33,2,136,0,42, 2,84,255,159,2,84,0,48,2,84,255,29,2,84,0,48, 2,84,255,29,2,84,0,48,2,84,255,164,2,84,0,48, 2,172,255,27,2,172,0,8,2,172,254,33,2,172,255,217, 2,172,254,63,2,172,0,8,2,172,254,211,2,172,255,166, 1,254,255,140,1,254,0,39,1,254,255,11,1,254,0,39, 1,254,255,11,1,254,0,39,2,138,254,118,2,138,0,80, 2,138,253,115,2,138,255,67,2,138,253,115,2,138,255,67, 2,14,255,169,2,14,0,24,2,14,255,27,2,14,0,24, 2,14,255,21,2,14,0,24,2,14,255,156,2,14,0,24, 2,171,254,103,2,171,0,65,2,171,253,100,2,171,255,52, 2,171,253,100,2,171,255,52,2,171,253,248,2,171,254,203, 1,30,254,239,1,30,0,56,1,30,254,109,1,30,0,56, 1,30,254,109,1,30,0,56,1,30,254,244,1,30,255,199, 0,236,254,107,0,236,0,69,0,236,253,104,0,236,255,56, 0,236,253,104,0,236,255,56,0,236,253,252,0,236,254,207, 2,38,255,159,2,38,0,34,2,38,255,29,2,38,0,34, 2,38,255,29,2,38,0,34,2,238,254,157,2,238,0,50, 2,238,253,175,2,238,255,115,2,238,253,235,2,238,255,166, 2,3,255,142,2,3,0,40,2,3,255,12,2,3,0,40, 2,3,255,12,2,3,0,40,2,3,255,147,2,3,0,40, 2,172,0,21,2,172,255,1,2,172,255,1,2,172,254,152, 2,228,255,253,2,228,0,36,2,228,255,123,2,228,0,36, 2,228,255,123,2,228,0,36,2,228,0,1,2,228,0,36, 2,208,254,158,2,208,0,42,2,208,253,161,2,208,255,113, 2,208,253,248,2,208,255,170,2,208,254,68,2,208,255,29, 2,84,0,48,2,84,0,48,1,254,0,39,1,254,0,39, 2,14,0,24,2,14,0,24,1,30,255,252,1,30,255,252, 2,38,0,34,2,38,0,34,2,3,0,40,2,3,0,40, 2,228,0,36,2,228,0,36,2,84,255,159,2,84,0,48, 2,84,255,29,2,84,0,48,2,84,255,29,2,84,0,48, 2,84,255,164,2,84,0,48,3,114,255,27,3,114,0,8, 3,114,254,33,3,114,255,217,3,114,254,63,3,114,0,8, 3,114,254,211,3,114,255,166,2,14,255,169,2,14,0,24, 2,14,255,27,2,14,0,24,2,14,255,21,2,14,0,24, 2,14,255,156,2,14,0,24,3,89,254,103,3,89,0,65, 3,89,253,100,3,89,255,52,3,89,253,100,3,89,255,52, 3,89,253,248,3,89,254,203,2,228,255,253,2,228,0,36, 2,228,255,123,2,228,0,36,2,228,255,123,2,228,0,36, 2,228,0,1,2,228,0,36,3,177,254,158,3,177,0,42, 3,177,253,161,3,177,255,113,3,177,253,248,3,177,255,170, 3,177,254,68,3,177,255,29,2,84,0,48,2,84,0,48, 2,84,0,48,2,84,0,48,2,84,0,48,2,84,0,48, 2,84,0,48,2,172,0,8,2,172,0,8,2,172,0,8, 2,172,0,8,3,114,0,8,1,22,255,204,0,201,0,23, 1,77,255,54,1,22,255,99,1,77,0,6,2,14,0,24, 2,14,0,24,2,24,0,24,2,14,0,24,2,14,0,24, 2,138,255,67,2,138,255,67,2,171,255,52,2,171,255,52, 3,89,0,65,2,70,255,54,2,70,255,54,1,77,255,54, 1,30,255,206,1,30,255,219,1,30,255,223,1,30,255,214, 1,30,255,199,1,56,255,213,0,236,255,222,0,236,255,235, 0,236,255,56,0,236,255,56,2,70,1,6,2,70,1,6, 1,77,0,9,2,3,0,40,2,3,0,40,2,3,0,40, 2,3,0,40,2,54,255,180,2,54,0,57,2,3,0,40, 2,3,0,40,2,172,0,21,2,172,0,21,2,172,255,1, 2,172,255,1,2,126,0,78,1,77,0,30,1,137,0,30, 1,77,0,22,2,228,0,36,2,228,0,36,2,228,0,36, 2,228,0,36,2,228,0,36,2,238,255,121,2,238,255,184, 2,208,255,119,2,208,255,158,3,171,0,42,1,77,0,92, 1,77,1,198,1,77,0,46,2,44,255,251,3,232,255,247, 0,222,0,65,0,221,0,64,0,222,0,64,0,221,0,64, 1,77,0,48,1,77,0,49,1,77,0,47,1,77,0,49, 2,44,0,38,2,44,0,38,1,94,0,50,1,94,0,70, 3,232,0,115,3,232,0,9,5,80,0,9,1,22,0,49, 1,213,0,49,2,168,0,49,1,22,0,49,1,213,0,49, 2,168,0,49,1,77,0,91,1,77,0,85,2,110,0,98, 2,44,0,124,2,44,0,77,0,167,255,82,4,88,0,77, 3,66,0,77,3,66,0,124,2,25,0,48,1,95,0,27, 1,95,0,160,1,95,0,20,1,95,0,17,1,95,0,16, 1,95,0,22,1,95,0,23,1,95,0,23,1,95,0,27, 1,95,0,61,1,95,0,19,1,95,0,16,1,95,0,20, 1,97,0,17,1,95,0,16,1,95,0,22,1,95,0,23, 1,95,0,23,5,165,0,91,4,198,0,93,3,101,0,60, 2,44,0,2,3,201,0,33,2,103,0,17,3,41,0,58, 2,7,0,16,3,106,0,12,3,240,0,76,3,82,255,254, 2,132,0,16,3,232,0,63,2,208,0,42,2,208,0,42, 2,0,0,16,2,155,0,79,2,155,0,17,3,140,0,34, 2,111,0,16,2,50,0,45,2,99,255,187,2,99,0,90, 4,56,0,29,3,101,0,61,3,101,0,20,3,101,0,61, 3,101,0,19,3,101,0,16,3,101,0,20,3,101,0,61, 3,101,0,17,3,101,0,61,3,101,0,16,3,101,0,17, 3,101,0,22,3,101,0,61,1,22,0,100,2,44,0,100, 3,66,0,100,3,177,0,100,2,155,0,30,3,177,0,30, 4,199,0,30,5,221,0,30,3,177,0,100,2,155,0,22, 3,177,0,22,4,199,0,22,2,44,0,80,2,210,0,48, 2,210,0,89,3,65,0,75,0,222,0,66,1,188,0,66, 2,154,0,66,2,210,0,66,1,244,0,10,2,210,0,10, 3,176,0,10,4,142,0,10,2,210,0,66,1,244,0,17, 2,210,0,17,3,176,0,17,0,222,0,68,1,244,0,31, 2,44,0,26,3,65,0,70,3,219,0,32,2,91,0,45, 3,219,0,49,2,91,0,45,4,18,0,24,4,18,1,5, 2,146,0,15,3,219,0,30,2,91,0,39,3,219,0,45, 2,91,0,44,4,18,0,27,2,155,0,17,2,44,0,36, 2,155,0,90,2,44,0,43,2,199,0,10,2,199,0,10, 2,201,0,45,2,201,0,44,3,55,0,105,3,55,0,105, 3,36,0,41,2,72,0,40,2,72,0,50,1,244,0,64, 2,30,0,7,2,201,0,26,2,201,0,25,3,0,0,26, 2,91,0,23,2,91,0,30,3,0,0,40,3,0,0,40, 2,44,0,100,3,28,0,100,3,188,0,100,2,44,0,100, 3,95,0,163,2,37,0,17,2,72,0,75,2,72,0,17, 2,72,0,95,2,72,0,50,2,124,0,53,2,36,0,32, 2,72,0,45,2,72,0,45,3,0,0,43,3,0,0,43, 3,0,0,43,2,146,0,15,3,55,0,39,1,233,0,16, 2,43,0,55,3,232,0,102,3,232,0,80,3,232,0,152, 3,232,1,8,3,232,0,99,3,232,1,207,3,232,0,77, 3,232,2,88,3,232,0,25,3,232,1,183,3,232,0,190, 3,232,2,188,3,232,0,50,3,232,2,188,3,232,0,50, 3,232,1,170,3,232,0,197,3,232,0,177,3,232,0,132, 3,232,0,206,3,232,0,165,3,232,0,243,3,232,0,205, 3,232,0,134,3,232,0,80,3,232,0,136,3,232,0,85, 3,232,0,119,3,232,0,89,3,232,0,150,3,232,0,122, 3,232,0,243,3,232,0,225,3,232,0,117,3,232,0,89, 3,232,0,156,3,232,0,131,3,232,0,140,3,232,0,114, 3,232,1,8,3,232,0,247,3,232,0,128,3,232,0,98, 3,232,0,95,3,232,0,63,3,232,0,82,3,232,0,49, 3,232,0,40,3,232,0,4,3,232,0,126,3,232,0,96, 3,232,0,184,3,232,0,135,3,232,0,106,3,232,0,127, 3,232,0,97,3,232,0,185,3,232,0,162,3,232,0,58, 3,232,0,135,3,232,0,97,3,232,0,77,3,232,0,85, 3,232,0,123,3,232,0,95,3,232,0,95,3,232,0,114, 3,232,0,85,3,232,0,85,3,232,0,64,3,232,0,29, 3,232,0,29,3,232,0,76,3,232,0,43,3,232,0,43, 3,232,0,123,3,232,0,95,3,232,0,95,3,232,0,88, 3,232,0,109,3,232,0,78,3,232,0,96,3,232,0,137, 3,232,0,101,3,232,0,41,3,232,0,146,3,232,0,96, 3,232,0,138,3,232,0,86,3,232,0,122,3,232,1,9, 3,232,0,163,3,232,0,77,3,232,0,163,3,232,0,130, 3,232,0,77,3,232,0,56,3,232,0,107,3,232,0,148, 3,232,0,76,3,232,2,255,3,232,2,255,3,232,0,207, 3,232,0,162,3,232,0,168,3,232,0,118,3,232,0,169, 3,232,0,122,3,232,0,140,3,232,0,83,3,232,0,132, 3,232,0,77,3,232,0,136,3,232,0,109,3,232,0,164, 3,232,0,137,3,232,0,107,3,232,0,77,3,232,0,105, 3,232,0,75,3,232,0,187,3,232,0,162,3,232,0,153, 3,232,0,125,3,232,0,138,3,232,0,109,3,232,0,82, 3,232,0,49,3,232,0,95,3,232,0,63,3,232,0,137, 3,232,0,110,3,232,0,115,3,232,0,86,3,232,0,113, 3,232,0,82,3,232,0,158,3,232,0,108,3,232,0,78, 3,232,0,90,3,232,0,57,3,232,1,121,3,232,1,114, 3,232,0,118,3,232,0,99,3,232,0,108,3,232,0,50, 3,232,0,184,3,232,0,78,3,232,0,46,3,232,0,46, 3,232,0,135,3,232,0,109,3,232,0,109,3,232,0,127, 3,232,0,97,3,232,0,97,3,232,0,106,3,232,0,76, 3,232,0,76,3,232,0,73,3,232,0,40,3,232,0,40, 3,232,0,139,3,232,0,219,3,232,0,135,3,232,0,174, 3,232,0,90,3,232,0,153,3,232,0,100,3,232,0,168, 3,232,0,116,3,232,0,232,3,232,0,190,3,232,0,183, 3,232,1,19,3,232,0,81,3,232,0,178,3,232,0,190, 3,232,0,183,3,232,0,139,3,232,0,93,3,232,0,111, 3,232,0,208,3,232,0,185,3,232,0,95,3,232,0,182, 3,232,0,155,3,232,0,139,3,232,0,93,3,232,0,111, 3,232,0,208,1,22,0,87,3,232,255,247,3,232,0,184, 3,232,0,184,2,44,0,43,2,44,0,34,2,44,0,32, 2,44,0,28,2,44,0,35,2,44,0,43,2,44,0,46, 2,44,0,37,2,44,0,38,0,222,255,238,1,77,0,116, 2,44,0,102,2,44,0,18,1,244,0,12,1,244,0,17, 3,10,0,18,3,10,0,18,2,44,0,18,3,10,0,34, 0,200,0,58,1,49,0,0,1,144,0,58,2,75,0,37, 3,122,0,58,3,80,0,38,3,104,0,63,3,32,0,57, 3,82,0,37,3,105,0,63,3,29,0,37,3,169,0,35, 2,72,0,50,3,8,0,59,3,8,0,59,3,8,0,59, 3,8,0,59,2,128,0,58,2,128,0,58,2,128,0,58, 2,79,0,58,1,210,0,30,2,86,0,38,2,110,0,63, 1,6,0,18,1,95,0,14,2,96,0,61,1,14,0,12, 2,14,0,38,2,38,0,57,2,88,0,37,2,109,0,48, 1,122,0,51,2,95,0,61,2,63,0,57,2,56,0,63, 2,78,0,51,2,94,0,62,2,35,0,37,3,8,0,59, 2,175,0,35,0,212,0,62,2,79,0,58,2,38,0,57, 2,56,0,63,2,128,0,72,3,20,0,35,0,0,0,0, 0,0,0,86,0,0,0,86,0,0,0,86,0,0,0,86, 0,0,0,130,0,0,0,178,0,0,1,18,0,0,1,220, 0,0,2,176,0,0,3,126,0,0,3,156,0,0,3,220, 0,0,4,26,0,0,4,86,0,0,4,128,0,0,4,170, 0,0,4,196,0,0,4,220,0,0,4,246,0,0,5,82, 0,0,5,130,0,0,5,246,0,0,6,136,0,0,6,190, 0,0,7,48,0,0,7,188,0,0,7,242,0,0,8,164, 0,0,9,54,0,0,9,90,0,0,9,146,0,0,9,182, 0,0,9,222,0,0,10,4,0,0,10,128,0,0,11,128, 0,0,11,182,0,0,12,48,0,0,12,150,0,0,12,224, 0,0,13,14,0,0,13,56,0,0,13,182,0,0,13,230, 0,0,14,0,0,0,14,70,0,0,14,124,0,0,14,156, 0,0,14,208,0,0,15,0,0,0,15,110,0,0,15,192, 0,0,16,52,0,0,16,178,0,0,17,84,0,0,17,120, 0,0,17,192,0,0,17,228,0,0,18,28,0,0,18,86, 0,0,18,130,0,0,18,176,0,0,18,210,0,0,18,238, 0,0,19,16,0,0,19,52,0,0,19,78,0,0,19,104, 0,0,20,32,0,0,20,134,0,0,20,236,0,0,21,96, 0,0,21,212,0,0,22,24,0,0,22,190,0,0,23,12, 0,0,23,50,0,0,23,116,0,0,23,166,0,0,23,192, 0,0,24,62,0,0,24,138,0,0,24,238,0,0,25,90, 0,0,25,190,0,0,25,252,0,0,26,140,0,0,26,212, 0,0,27,32,0,0,27,68,0,0,27,124,0,0,27,176, 0,0,27,248,0,0,28,38,0,0,28,158,0,0,28,184, 0,0,29,38,0,0,29,126,0,0,29,142,0,0,29,186, 0,0,30,52,0,0,30,234,0,0,31,116,0,0,31,188, 0,0,31,224,0,0,32,200,0,0,32,236,0,0,33,194, 0,0,34,102,0,0,34,154,0,0,34,186,0,0,34,212, 0,0,35,174,0,0,35,200,0,0,36,44,0,0,36,98, 0,0,36,206,0,0,37,82,0,0,37,108,0,0,37,200, 0,0,38,12,0,0,38,36,0,0,38,130,0,0,38,174, 0,0,39,34,0,0,39,88,0,0,39,186,0,0,40,88, 0,0,41,18,0,0,41,138,0,0,41,206,0,0,42,16, 0,0,42,90,0,0,42,202,0,0,43,22,0,0,43,166, 0,0,43,240,0,0,44,180,0,0,44,242,0,0,45,46, 0,0,45,114,0,0,45,184,0,0,45,224,0,0,46,6, 0,0,46,52,0,0,46,100,0,0,46,196,0,0,47,46, 0,0,47,170,0,0,48,36,0,0,48,166,0,0,49,78, 0,0,49,210,0,0,50,6,0,0,50,134,0,0,50,220, 0,0,51,50,0,0,51,144,0,0,51,240,0,0,52,42, 0,0,52,122,0,0,53,8,0,0,53,206,0,0,54,146, 0,0,55,94,0,0,56,80,0,0,57,30,0,0,58,48, 0,0,59,42,0,0,59,228,0,0,60,102,0,0,60,232, 0,0,61,114,0,0,61,254,0,0,62,38,0,0,62,76, 0,0,62,122,0,0,62,170,0,0,63,66,0,0,63,202, 0,0,64,60,0,0,64,174,0,0,65,40,0,0,65,200, 0,0,66,66,0,0,66,116,0,0,66,244,0,0,67,76, 0,0,67,164,0,0,68,4,0,0,68,102,0,0,68,188, 0,0,69,40,0,0,69,136,0,0,69,204,0,0,70,144, 0,0,70,234,0,0,71,200,0,0,72,40,0,0,72,252, 0,0,73,110,0,0,73,226,0,0,73,250,0,0,74,18, 0,0,74,42,0,0,74,64,0,0,74,186,0,0,75,52, 0,0,75,146,0,0,76,40,0,0,76,136,0,0,76,254, 0,0,77,58,0,0,77,188,0,0,77,212,0,0,77,234, 0,0,78,36,0,0,78,164,0,0,78,252,0,0,79,166, 0,0,79,234,0,0,80,114,0,0,80,142,0,0,80,164, 0,0,81,72,0,0,82,20,0,0,82,44,0,0,82,66, 0,0,82,224,0,0,83,168,0,0,83,192,0,0,83,216, 0,0,84,36,0,0,84,130,0,0,84,154,0,0,84,176, 0,0,84,214,0,0,84,252,0,0,85,20,0,0,85,42, 0,0,85,116,0,0,85,208,0,0,85,246,0,0,86,16, 0,0,86,40,0,0,86,64,0,0,86,88,0,0,86,164, 0,0,86,250,0,0,87,76,0,0,87,124,0,0,87,168, 0,0,87,206,0,0,88,14,0,0,88,72,0,0,88,136, 0,0,88,194,0,0,88,218,0,0,88,242,0,0,89,38, 0,0,89,86,0,0,89,146,0,0,89,236,0,0,90,60, 0,0,90,168,0,0,90,236,0,0,91,78,0,0,91,154, 0,0,91,244,0,0,92,96,0,0,92,218,0,0,93,74, 0,0,93,98,0,0,93,120,0,0,94,0,0,0,94,126, 0,0,94,248,0,0,95,190,0,0,96,72,0,0,96,148, 0,0,97,50,0,0,97,144,0,0,98,34,0,0,98,118, 0,0,99,38,0,0,99,194,0,0,99,218,0,0,99,240, 0,0,100,232,0,0,101,196,0,0,102,122,0,0,103,30, 0,0,103,54,0,0,103,76,0,0,103,132,0,0,103,238, 0,0,104,18,0,0,104,90,0,0,104,114,0,0,104,136, 0,0,104,222,0,0,105,54,0,0,105,78,0,0,105,100, 0,0,106,6,0,0,106,170,0,0,107,12,0,0,107,112, 0,0,107,232,0,0,108,102,0,0,108,126,0,0,108,150, 0,0,108,174,0,0,108,196,0,0,109,8,0,0,109,68, 0,0,109,126,0,0,109,184,0,0,109,242,0,0,110,54, 0,0,110,120,0,0,110,176,0,0,110,198,0,0,110,214, 0,0,111,68,0,0,111,162,0,0,112,26,0,0,112,46, 0,0,112,186,0,0,113,50,0,0,113,66,0,0,113,88, 0,0,113,110,0,0,113,132,0,0,114,2,0,0,114,166, 0,0,114,244,0,0,115,96,0,0,116,6,0,0,116,78, 0,0,116,148,0,0,116,224,0,0,117,92,0,0,117,244, 0,0,118,10,0,0,118,32,0,0,118,82,0,0,118,178, 0,0,119,18,0,0,119,92,0,0,119,116,0,0,119,140, 0,0,119,164,0,0,119,188,0,0,119,212,0,0,119,236, 0,0,120,4,0,0,120,28,0,0,120,52,0,0,120,76, 0,0,120,98,0,0,120,122,0,0,120,144,0,0,120,168, 0,0,120,190,0,0,120,214,0,0,120,236,0,0,121,4, 0,0,121,26,0,0,121,50,0,0,121,74,0,0,121,98, 0,0,121,122,0,0,121,146,0,0,121,170,0,0,121,190, 0,0,121,214,0,0,121,236,0,0,122,12,0,0,122,40, 0,0,122,64,0,0,122,88,0,0,122,112,0,0,122,134, 0,0,122,158,0,0,122,182,0,0,122,206,0,0,122,228, 0,0,123,4,0,0,123,32,0,0,123,54,0,0,123,78, 0,0,123,102,0,0,123,126,0,0,123,150,0,0,123,174, 0,0,123,198,0,0,123,220,0,0,123,244,0,0,124,12, 0,0,124,36,0,0,124,60,0,0,124,84,0,0,124,108, 0,0,124,132,0,0,124,154,0,0,124,180,0,0,124,206, 0,0,124,230,0,0,124,252,0,0,125,22,0,0,125,48, 0,0,125,72,0,0,125,94,0,0,125,120,0,0,125,146, 0,0,125,170,0,0,125,192,0,0,125,218,0,0,125,244, 0,0,126,12,0,0,126,34,0,0,126,60,0,0,126,86, 0,0,126,110,0,0,126,132,0,0,126,158,0,0,126,184, 0,0,127,124,0,0,128,44,0,0,128,114,0,0,128,218, 0,0,128,242,0,0,129,10,0,0,129,34,0,0,129,56, 0,0,129,80,0,0,129,102,0,0,129,126,0,0,129,148, 0,0,129,172,0,0,129,194,0,0,129,218,0,0,129,240, 0,0,130,16,0,0,130,44,0,0,130,68,0,0,130,90, 0,0,130,110,0,0,130,220,0,0,130,240,0,0,131,118, 0,0,131,138,0,0,132,22,0,0,132,160,0,0,132,182, 0,0,132,202,0,0,132,224,0,0,132,240,0,0,133,190, 0,0,133,206,0,0,133,226,0,0,134,80,0,0,134,210, 0,0,135,6,0,0,135,62,0,0,135,78,0,0,135,134, 0,0,135,154,0,0,136,22,0,0,136,192,0,0,137,54, 0,0,137,176,0,0,138,32,0,0,138,52,0,0,138,114, 0,0,138,210,0,0,139,16,0,0,139,108,0,0,139,162, 0,0,139,184,0,0,140,100,0,0,140,208,0,0,141,60, 0,0,141,136,0,0,141,156,0,0,141,228,0,0,141,244, 0,0,142,8,0,0,142,28,0,0,142,48,0,0,142,128, 0,0,142,172,0,0,142,192,0,0,143,68,0,0,143,102, 0,0,143,136,0,0,143,152,0,0,143,168,0,0,143,218, 0,0,143,242,0,0,144,88,0,0,144,152,0,0,144,224, 0,0,145,6,0,0,145,24,0,0,145,42,0,0,145,60, 0,0,145,78,0,0,145,96,0,0,145,114,0,0,145,132, 0,0,145,150,0,0,145,168,0,0,145,186,0,0,145,204, 0,0,145,242,0,0,146,6,0,0,146,26,0,0,146,66, 0,0,146,88,0,0,146,132,0,0,146,150,0,0,146,168, 0,0,146,196,0,0,146,222,0,0,147,26,0,0,147,42, 0,0,147,70,0,0,147,92,0,0,147,114,0,0,147,170, 0,0,147,194,0,0,147,218,0,0,147,242,0,0,148,10, 0,0,148,34,0,0,148,58,0,0,148,88,0,0,148,154, 0,0,149,36,0,0,149,70,0,0,149,136,0,0,149,182, 0,0,149,234,0,0,150,24,0,0,150,154,0,0,150,178, 0,0,150,230,0,0,151,20,0,0,151,82,0,0,151,126, 0,0,151,182,0,0,152,38,0,0,152,74,0,0,152,158, 0,0,152,218,0,0,152,254,0,0,153,52,0,0,153,184, 0,0,154,8,0,0,154,116,0,0,154,240,0,0,155,8, 0,0,155,32,0,0,155,54,0,0,155,76,0,0,155,98, 0,0,155,120,0,0,155,150,0,0,156,44,0,0,156,194, 0,0,157,8,0,0,157,138,0,0,158,16,0,0,158,130, 0,0,158,224,0,0,159,78,0,0,159,136,0,0,159,182, 0,0,160,56,0,0,160,146,0,0,160,198,0,0,161,110, 0,0,161,208,0,0,162,36,0,0,162,152,0,0,163,40, 0,0,163,146,0,0,163,226,0,0,164,64,0,0,164,204, 0,0,165,56,0,0,165,142,0,0,166,50,0,0,166,72, 0,0,166,94,0,0,166,116,0,0,166,138,0,0,166,162, 0,0,166,186,0,0,167,0,0,0,167,98,0,0,167,140, 0,0,168,0,0,0,168,16,0,0,168,32,0,0,168,56, 0,0,168,72,0,0,168,184,0,0,169,26,0,0,169,92, 0,0,169,156,0,0,169,216,0,0,170,36,0,0,170,80, 0,0,170,96,0,0,170,188,0,0,170,204,0,0,170,234, 0,0,171,52,0,0,171,98,0,0,171,176,0,0,172,88, 0,0,172,134,0,0,172,218,0,0,173,12,0,0,173,74, 0,0,173,126,0,0,173,174,0,0,173,190,0,0,173,228, 0,0,174,54,0,0,174,70,0,0,174,86,0,0,174,124, 0,0,175,0,0,0,175,16,0,0,175,62,0,0,175,120, 0,0,175,166,0,0,175,220,0,0,176,46,0,0,176,140, 0,0,176,220,0,0,177,78,0,0,177,214,0,0,178,50, 0,0,178,66,0,0,178,214,0,0,179,92,0,0,179,122, 0,0,179,192,0,0,179,208,0,0,180,18,0,0,180,158, 0,0,180,202,0,0,181,28,0,0,181,74,0,0,181,124, 0,0,181,178,0,0,181,220,0,0,181,236,0,0,182,16, 0,0,182,124,0,0,182,140,0,0,182,176,0,0,182,192, 0,0,183,130,0,0,183,146,0,0,183,188,0,0,183,246, 0,0,184,36,0,0,184,90,0,0,184,172,0,0,185,12, 0,0,185,92,0,0,185,206,0,0,186,68,0,0,186,160, 0,0,186,182,0,0,186,204,0,0,187,76,0,0,187,120, 0,0,187,230,0,0,187,246,0,0,188,6,0,0,188,28, 0,0,188,44,0,0,188,182,0,0,189,48,0,0,189,150, 0,0,189,210,0,0,190,12,0,0,190,34,0,0,190,78, 0,0,190,154,0,0,190,240,0,0,191,0,0,0,191,16, 0,0,191,50,0,0,191,84,0,0,191,114,0,0,191,144, 0,0,191,174,0,0,191,204,0,0,192,26,0,0,192,96, 0,0,193,8,0,0,193,148,0,0,193,198,0,0,193,246, 0,0,194,40,0,0,194,88,0,0,194,138,0,0,194,186, 0,0,194,236,0,0,195,28,0,0,195,76,0,0,195,118, 0,0,195,170,0,0,195,216,0,0,195,254,0,0,196,34, 0,0,196,50,0,0,196,66,0,0,196,82,0,0,196,98, 0,0,196,114,0,0,196,150,0,0,196,166,0,0,196,202, 0,0,196,218,0,0,196,254,0,0,197,14,0,0,197,30, 0,0,197,76,0,0,197,118,0,0,197,172,0,0,197,220, 0,0,198,18,0,0,198,66,0,0,198,118,0,0,198,164, 0,0,198,184,0,0,198,200,0,0,198,220,0,0,198,236, 0,0,198,252,0,0,199,20,0,0,199,44,0,0,199,94, 0,0,199,142,0,0,199,190,0,0,199,232,0,0,200,30, 0,0,200,78,0,0,200,102,0,0,200,124,0,0,200,148, 0,0,200,170,0,0,200,186,0,0,200,202,0,0,200,226, 0,0,200,250,0,0,201,10,0,0,201,30,0,0,201,54, 0,0,201,80,0,0,201,104,0,0,201,128,0,0,201,152, 0,0,201,174,0,0,202,86,0,0,202,226,0,0,202,250, 0,0,203,16,0,0,203,40,0,0,203,62,0,0,203,86, 0,0,203,108,0,0,203,124,0,0,203,140,0,0,203,164, 0,0,203,186,0,0,203,210,0,0,203,232,0,0,204,0, 0,0,204,22,0,0,204,46,0,0,204,68,0,0,204,92, 0,0,204,114,0,0,204,138,0,0,204,160,0,0,204,184, 0,0,204,208,0,0,205,46,0,0,205,150,0,0,206,42, 0,0,206,132,0,0,206,228,0,0,207,190,0,0,207,228, 0,0,208,72,0,0,209,0,0,0,209,126,0,0,209,234, 0,0,210,8,0,0,210,134,0,0,211,46,0,0,211,140, 0,0,211,218,0,0,212,202,0,0,213,38,0,0,213,156, 0,0,214,0,0,0,214,188,0,0,215,32,0,0,215,182, 0,0,216,18,0,0,216,152,0,0,217,10,0,0,217,246, 0,0,218,94,0,0,218,186,0,0,219,28,0,0,219,198, 0,0,220,34,0,0,221,22,0,0,221,56,0,0,221,226, 0,0,222,106,0,0,222,220,0,0,223,156,0,0,223,200, 0,0,223,226,0,0,224,48,0,0,224,74,0,0,224,180, 0,0,225,44,0,0,225,138,0,0,226,8,0,0,226,100, 0,0,226,200,0,0,227,80,0,0,227,124,0,0,227,230, 0,0,228,142,0,0,229,10,0,0,229,92,0,0,229,124, 0,0,229,230,0,0,230,168,0,0,230,248,0,0,231,74, 0,0,232,38,0,0,232,116,0,0,232,248,0,0,233,136, 0,0,233,192,0,0,234,76,0,0,234,222,0,0,235,52, 0,0,235,206,0,0,236,72,0,0,237,70,0,0,237,200, 0,0,238,38,0,0,238,124,0,0,239,26,0,0,239,112, 0,0,240,10,0,0,240,40,0,0,240,202,0,0,241,84, 0,0,241,192,0,0,242,98,0,0,242,184,0,0,242,220, 0,0,243,14,0,0,243,46,0,0,243,112,0,0,243,156, 0,0,243,208,0,0,243,230,0,0,244,8,0,0,244,52, 0,0,244,74,0,0,244,106,0,0,244,130,0,0,244,176, 0,0,244,200,0,0,244,224,0,0,244,252,0,0,245,20, 0,0,245,46,0,0,245,72,0,0,245,96,0,0,245,112, 0,0,245,136,0,0,246,2,0,0,246,96,0,0,246,188, 0,0,246,226,0,0,247,78,0,0,247,102,0,0,247,138, 0,0,247,224,0,0,248,178,0,0,248,204,0,0,249,40, 0,0,249,180,0,0,250,14,0,0,250,92,0,0,250,174, 0,0,250,200,0,0,251,16,0,0,251,224,0,0,252,58, 0,0,252,192,0,0,253,106,0,0,253,194,0,0,254,38, 0,0,254,122,0,0,254,214,0,0,255,138,0,1,0,26, 0,1,2,38,0,1,2,94,0,1,2,150,0,1,3,160, 0,1,4,170,0,1,5,182,0,1,6,194,0,1,7,206, 0,1,8,216,0,1,9,228,0,1,11,254,0,1,12,152, 0,1,12,190,0,1,15,44,0,1,15,138,0,1,15,242, 0,1,16,22,0,1,16,134,0,1,16,252,0,1,17,60, 0,1,17,112,0,1,17,234,0,1,18,76,0,1,18,148, 0,1,18,200,0,1,19,2,0,1,19,50,0,1,19,88, 0,1,20,152,0,1,20,220,0,1,21,2,0,1,21,52, 0,1,21,88,0,1,22,26,0,1,22,242,0,1,23,74, 0,1,23,166,0,1,24,0,0,1,24,134,0,1,24,200, 0,1,25,10,0,1,25,66,0,1,25,170,0,1,25,254, 0,1,26,82,0,1,26,128,0,1,26,180,0,1,26,230, 0,1,27,84,0,1,27,146,0,1,27,206,0,1,27,250, 0,1,28,44,0,1,28,94,0,1,28,144,0,1,28,210, 0,1,29,48,0,1,29,138,0,1,29,206,0,1,29,240, 0,1,30,52,0,1,30,118,0,1,30,228,0,1,31,80, 0,1,31,232,0,1,32,126,0,1,32,164,0,1,32,200, 0,1,33,68,0,1,34,234,0,1,35,62,0,1,35,90, 0,1,36,30,0,1,36,238,0,1,37,144,0,1,38,100, 0,1,38,244,0,1,39,188,0,1,40,112,0,1,40,212, 0,1,41,82,0,1,42,92,0,1,43,68,0,1,44,104, 0,1,45,18,0,1,45,200,0,1,46,10,0,1,46,162, 0,1,47,56,0,1,47,146,0,1,48,96,0,1,48,208, 0,1,49,144,0,1,50,10,0,1,50,104,0,1,51,4, 0,1,51,138,0,1,52,28,0,1,52,116,0,1,52,196, 0,1,53,90,0,1,53,214,0,1,54,138,0,1,54,204, 0,1,55,28,0,1,55,104,0,1,55,242,0,1,56,112, 0,1,56,244,0,1,57,64,0,1,57,176,0,1,57,252, 0,1,58,84,0,1,58,224,0,1,59,138,0,1,59,254, 0,1,60,158,0,1,61,12,0,1,61,124,0,1,62,26, 0,1,62,52,0,1,62,168,0,1,62,204,0,1,63,34, 0,1,63,120,0,1,63,202,0,1,64,42,0,1,64,112, 0,1,64,182,0,1,64,222,0,1,65,66,0,1,65,158, 0,1,65,218,0,1,66,84,0,1,66,130,0,1,67,218, 0,1,67,244,0,1,68,88,0,1,68,216,0,1,69,72, 0,1,69,200,0,1,70,48,0,1,70,148,0,1,71,44, 0,1,71,168,0,1,71,244,0,1,72,112,0,1,73,200, 0,1,74,46,0,1,74,172,0,1,75,100,0,1,75,240, 0,1,76,144,0,1,77,80,0,1,78,38,0,1,78,196, 0,1,79,134,0,1,80,18,0,1,80,178,0,1,81,66, 0,1,82,24,0,1,82,222,0,1,83,242,0,1,84,118, 0,1,85,6,0,1,85,140,0,1,86,4,0,1,86,204, 0,1,87,60,0,1,87,210,0,1,88,144,0,1,88,232, 0,1,90,8,0,1,90,176,0,1,91,122,0,1,91,242, 0,1,92,112,0,1,92,232,0,1,93,120,0,1,94,0, 0,1,94,88,0,1,94,210,0,1,95,54,0,1,95,204, 0,1,96,100,0,1,96,172,0,1,97,86,0,1,98,4, 0,1,98,118,0,1,98,230,0,1,99,128,0,1,100,34, 0,1,100,146,0,1,101,42,0,1,101,194,0,1,101,248, 0,1,102,34,0,1,102,122,0,1,102,240,0,1,103,100, 0,1,103,206,0,1,103,238,0,1,104,34,0,1,104,130, 0,1,105,20,0,1,105,146,0,1,106,60,0,1,106,102, 0,1,106,188,0,1,107,100,0,1,108,10,0,1,108,158, 0,1,109,62,0,1,110,70,0,1,110,188,0,1,111,156, 0,1,112,10,0,1,112,104,0,1,112,202,0,1,113,74, 0,1,114,10,0,1,114,148,0,1,115,30,0,1,115,136, 0,1,116,6,0,1,116,144,0,1,116,246,0,1,117,94, 0,1,117,150,0,1,118,56,0,1,118,112,0,1,118,240, 0,1,119,116,0,1,119,144,0,1,119,238,0,1,120,94, 0,1,120,202,0,1,121,100,0,1,121,124,0,1,121,148, 0,1,121,172,0,1,121,196,0,1,121,220,0,1,121,244, 0,1,122,12,0,1,122,174,0,1,122,198,0,1,123,96, 0,1,123,194,0,1,124,38,0,1,124,172,0,1,125,62, 0,1,125,162,0,1,126,78,0,1,126,158,0,1,127,74, 0,1,127,186,0,1,128,34,0,1,128,152,0,1,129,42, 0,1,129,166,0,1,130,44,0,1,130,178,0,1,131,20, 0,1,131,116,0,1,131,200,0,1,132,72,0,1,132,152, 0,1,133,40,0,1,133,152,0,1,134,82,0,1,134,174, 0,1,135,12,0,1,135,116,0,1,136,60,0,1,137,48, 0,1,137,164,0,1,138,40,0,1,138,130,0,1,138,218, 0,1,138,242,0,1,139,20,0,1,139,108,0,1,139,194, 0,1,139,234,0,1,140,44,0,1,140,94,0,1,140,180, 0,1,140,230,0,1,141,60,0,1,141,104,0,1,141,246, 0,1,142,134,0,1,143,2,0,1,143,156,0,1,144,88, 0,1,144,182,0,1,145,50,0,1,145,166,0,1,146,68, 0,1,146,238,0,1,147,62,0,1,147,244,0,1,148,90, 0,1,148,154,0,1,149,18,0,1,149,92,0,1,149,220, 0,1,150,150,0,1,151,204,0,1,152,36,0,1,152,92, 0,1,152,224,0,1,153,114,0,1,153,250,0,1,154,138, 0,1,155,62,0,1,155,230,0,1,156,160,0,1,157,40, 0,1,157,134,0,1,157,250,0,1,158,130,0,1,159,56, 0,1,159,178,0,1,160,126,0,1,161,30,0,1,161,224, 0,1,162,84,0,1,162,206,0,1,163,116,0,1,163,254, 0,1,164,132,0,1,165,34,0,1,165,120,0,1,166,24, 0,1,166,146,0,1,167,48,0,1,167,160,0,1,168,14, 0,1,168,186,0,1,169,26,0,1,169,160,0,1,169,238, 0,1,170,152,0,1,171,48,0,1,171,162,0,1,172,32, 0,1,172,124,0,1,173,38,0,1,173,134,0,1,173,250, 0,1,174,182,0,1,175,52,0,1,175,76,0,1,175,150, 0,1,175,222,0,1,176,64,0,1,176,160,0,1,176,230, 0,1,177,0,0,1,177,36,0,1,177,74,0,1,177,124, 0,1,178,230,0,1,179,78,0,1,179,230,0,1,180,82, 0,1,180,234,0,1,181,108,0,1,181,222,0,1,182,132, 0,1,183,36,0,1,183,110,0,1,183,208,0,1,184,52, 0,1,184,226,0,1,185,170,0,1,186,128,0,1,187,134, 0,1,188,70,0,1,189,30,0,1,189,124,0,1,190,64, 0,1,191,22,0,1,191,226,0,1,192,144,0,1,193,78, 0,1,194,4,0,1,194,214,0,1,195,194,0,1,196,96, 0,1,196,198,0,1,197,104,0,1,198,12,0,1,198,250, 0,1,199,188,0,1,200,104,0,1,201,34,0,1,201,216, 0,1,202,166,0,1,203,86,0,1,203,196,0,1,204,126, 0,1,204,152,0,1,204,218,0,1,204,248,0,1,205,120, 0,1,205,232,0,1,206,82,0,1,206,212,0,1,207,204, 0,1,208,48,0,1,208,194,0,1,209,86,0,1,209,236, 0,1,210,142,0,1,211,98,0,1,212,10,0,1,212,198, 0,1,212,232,0,1,213,54,0,1,213,156,0,1,214,180, 0,1,215,132,0,1,216,150,0,1,218,2,0,1,218,130, 0,1,219,40,0,1,220,96,0,1,220,230,0,1,221,112, 0,1,222,182,0,1,223,232,0,1,225,44,0,1,226,240, 0,1,227,138,0,1,227,244,0,1,228,96,0,1,229,190, 0,1,230,154,0,1,230,186,0,1,231,244,0,1,232,186, 0,1,233,56,0,1,234,24,0,1,234,62,0,1,234,162, 0,1,234,242,0,1,235,32,0,1,235,200,0,1,236,158, 0,1,237,86,0,1,238,18,0,1,238,186,0,1,239,234, 0,1,240,236,0,1,242,30,0,1,242,70,0,1,242,150, 0,1,243,12,0,1,243,54,0,1,243,212,0,1,244,174, 0,1,245,150,0,1,246,82,0,1,247,72,0,1,248,148, 0,1,248,192,0,1,249,120,0,1,249,236,0,1,250,168, 0,1,251,48,0,1,251,182,0,1,252,14,0,1,252,148, 0,1,253,44,0,1,253,234,0,1,254,186,0,1,255,178, 0,2,0,134,0,2,1,192,0,2,2,70,0,2,2,248, 0,2,3,162,0,2,4,70,0,2,5,26,0,2,6,16, 0,2,6,162,0,2,7,102,0,2,7,182,0,2,8,148, 0,2,9,148,0,2,10,74,0,2,11,26,0,2,12,102, 0,2,13,104,0,2,13,226,0,2,14,144,0,2,15,76, 0,2,16,22,0,2,16,156,0,2,17,92,0,2,17,222, 0,2,18,112,0,2,18,246,0,2,19,94,0,2,20,92, 0,2,20,220,0,2,21,228,0,2,22,76,0,2,22,172, 0,2,23,0,0,2,23,148,0,2,24,56,0,2,25,34, 0,2,25,166,0,2,26,6,0,2,26,140,0,2,27,20, 0,2,27,124,0,2,28,56,0,2,29,100,0,2,31,46, 0,2,32,244,0,2,33,230,0,2,34,250,0,2,36,242, 0,2,36,242,0,2,38,128,0,2,40,24,0,2,41,90, 0,2,43,2,0,2,44,116,0,2,46,10,0,2,47,128, 0,2,49,242,0,2,51,236,0,2,53,12,0,2,54,68, 0,2,55,176,0,2,57,38,0,2,59,140,0,2,60,244, 0,2,61,202,0,2,63,2,0,2,64,48,0,2,65,202, 0,2,67,40,0,2,68,66,0,2,69,82,0,2,71,0, 0,2,72,18,0,2,73,244,0,2,76,60,0,2,77,122, 0,2,78,132,0,2,79,154,0,2,81,0,0,2,82,96, 0,2,83,212,0,2,85,40,0,2,86,120,0,2,87,202, 0,2,88,166,0,2,89,50,0,2,89,232,0,2,90,88, 0,2,91,0,0,2,91,136,0,2,92,56,0,2,92,166, 0,2,93,44,0,2,94,0,0,2,94,238,0,2,95,208, 0,2,95,230,0,2,96,2,0,2,96,32,0,2,96,68, 0,2,96,98,0,2,96,134,0,2,96,164,0,2,96,200, 0,2,96,222,0,2,96,250,0,2,97,24,0,2,97,56, 0,2,97,86,0,2,97,118,0,2,97,148,0,2,97,182, 0,2,97,204,0,2,97,232,0,2,98,6,0,2,98,42, 0,2,98,70,0,2,98,106,0,2,98,130,0,2,98,158, 0,2,98,190,0,2,98,224,0,2,99,0,0,2,99,34, 0,2,99,56,0,2,99,84,0,2,99,114,0,2,99,150, 0,2,99,180,0,2,99,216,0,2,99,246,0,2,100,26, 0,2,100,50,0,2,100,78,0,2,100,110,0,2,100,146, 0,2,100,178,0,2,100,214,0,2,100,246,0,2,101,26, 0,2,101,48,0,2,101,76,0,2,101,106,0,2,101,140, 0,2,101,170,0,2,101,204,0,2,101,234,0,2,102,14, 0,2,102,38,0,2,102,66,0,2,102,98,0,2,102,134, 0,2,102,166,0,2,102,202,0,2,102,234,0,2,103,14, 0,2,103,36,0,2,103,64,0,2,103,94,0,2,103,130, 0,2,103,160,0,2,103,196,0,2,103,220,0,2,103,248, 0,2,104,24,0,2,104,58,0,2,104,90,0,2,104,124, 0,2,104,146,0,2,104,174,0,2,104,204,0,2,104,240, 0,2,105,14,0,2,105,50,0,2,105,80,0,2,105,116, 0,2,105,142,0,2,105,178,0,2,105,214,0,2,105,250, 0,2,106,18,0,2,106,46,0,2,106,76,0,2,106,112, 0,2,106,142,0,2,106,178,0,2,106,210,0,2,106,246, 0,2,107,14,0,2,107,42,0,2,107,74,0,2,107,108, 0,2,107,140,0,2,107,174,0,2,107,206,0,2,107,242, 0,2,108,10,0,2,108,32,0,2,108,56,0,2,108,78, 0,2,108,102,0,2,108,124,0,2,108,146,0,2,108,168, 0,2,108,192,0,2,108,214,0,2,108,238,0,2,109,4, 0,2,109,28,0,2,109,52,0,2,109,80,0,2,109,114, 0,2,109,150,0,2,109,192,0,2,109,228,0,2,110,14, 0,2,110,50,0,2,110,92,0,2,110,122,0,2,110,158, 0,2,110,196,0,2,110,236,0,2,111,18,0,2,111,58, 0,2,111,96,0,2,111,138,0,2,111,166,0,2,111,200, 0,2,111,236,0,2,112,22,0,2,112,58,0,2,112,100, 0,2,112,136,0,2,112,178,0,2,112,210,0,2,112,246, 0,2,113,30,0,2,113,74,0,2,113,114,0,2,113,158, 0,2,113,198,0,2,113,242,0,2,114,18,0,2,114,54, 0,2,114,92,0,2,114,136,0,2,114,174,0,2,114,218, 0,2,115,2,0,2,115,46,0,2,115,78,0,2,115,114, 0,2,115,154,0,2,115,196,0,2,115,236,0,2,116,22, 0,2,116,62,0,2,116,106,0,2,116,128,0,2,116,150, 0,2,116,180,0,2,116,202,0,2,116,230,0,2,116,252, 0,2,117,24,0,2,117,48,0,2,117,72,0,2,117,94, 0,2,117,116,0,2,117,140,0,2,117,158,0,2,117,176, 0,2,117,192,0,2,117,210,0,2,117,234,0,2,118,8, 0,2,118,30,0,2,118,58,0,2,118,80,0,2,118,110, 0,2,118,134,0,2,118,158,0,2,118,182,0,2,118,206, 0,2,118,230,0,2,118,254,0,2,119,22,0,2,119,46, 0,2,119,68,0,2,119,90,0,2,119,120,0,2,119,150, 0,2,119,172,0,2,119,202,0,2,119,226,0,2,119,250, 0,2,120,18,0,2,120,42,0,2,120,72,0,2,120,102, 0,2,120,132,0,2,120,154,0,2,120,176,0,2,120,206, 0,2,120,236,0,2,121,2,0,2,121,30,0,2,121,52, 0,2,121,82,0,2,121,106,0,2,121,130,0,2,121,154, 0,2,121,178,0,2,121,206,0,2,121,230,0,2,121,254, 0,2,122,14,0,2,122,46,0,2,122,70,0,2,122,102, 0,2,122,126,0,2,122,158,0,2,122,182,0,2,122,206, 0,2,122,230,0,2,122,254,0,2,123,22,0,2,123,38, 0,2,123,60,0,2,123,86,0,2,123,112,0,2,123,138, 0,2,123,184,0,2,123,230,0,2,124,20,0,2,124,66, 0,2,124,146,0,2,124,224,0,2,125,44,0,2,125,122, 0,2,125,166,0,2,125,226,0,2,126,26,0,2,126,54, 0,2,126,100,0,2,127,134,0,2,129,4,0,2,129,38, 0,2,129,92,0,2,129,168,0,2,129,202,0,2,130,0, 0,2,130,76,0,2,130,108,0,2,130,142,0,2,131,106, 0,2,131,184,0,2,132,54,0,2,132,82,0,2,132,106, 0,2,133,8,0,2,133,162,0,2,133,226,0,2,134,46, 0,2,134,80,0,2,134,130,0,2,134,236,0,2,135,108, 0,2,135,160,0,2,136,74,0,2,136,210,0,2,136,228, 0,2,136,246,0,2,137,8,0,2,137,26,0,2,137,44, 0,2,137,62,0,2,137,80,0,2,137,98,0,2,137,116, 0,2,137,134,0,2,138,150,0,2,139,150,0,2,140,22, 0,2,140,164,0,2,142,42,0,2,143,214,0,2,144,214, 0,2,146,96,0,2,147,144,0,2,148,36,0,2,149,216, 0,2,151,224,0,2,152,46,0,2,152,62,0,2,152,184, 0,2,154,54,0,2,154,70,0,2,154,86,0,2,156,22, 0,2,157,218,0,2,159,60,0,2,159,200,0,2,159,242, 0,2,161,88,0,2,161,120,0,2,161,152,0,2,161,184, 0,2,161,216,0,2,161,248,0,2,162,24,0,2,162,56, 0,2,162,88,0,2,162,120,0,2,162,152,0,2,162,184, 0,2,162,216,0,2,162,240,0,2,163,0,0,2,163,24, 0,2,163,56,0,2,163,80,0,2,163,96,0,2,163,120, 0,2,163,152,0,2,163,192,0,2,163,216,0,2,163,232, 0,2,164,0,0,2,164,32,0,2,164,48,0,2,164,64, 0,2,164,80,0,2,164,96,0,2,164,112,0,2,164,136, 0,2,164,168,0,2,164,192,0,2,164,208,0,2,164,232, 0,2,165,8,0,2,165,48,0,2,165,72,0,2,165,88, 0,2,165,112,0,2,165,144,0,2,165,160,0,2,165,176, 0,2,165,192,0,2,165,208,0,2,166,6,0,2,166,58, 0,2,166,110,0,2,166,164,0,2,167,32,0,2,167,158, 0,2,167,198,0,2,168,16,0,2,168,90,0,2,168,164, 0,2,168,238,0,2,169,96,0,2,169,118,0,2,170,20, 0,2,170,68,0,2,170,176,0,2,170,218,0,2,170,240, 0,2,171,60,0,2,171,192,0,2,171,230,0,2,171,252, 0,2,172,52,0,2,172,78,0,2,172,132,0,2,173,210, 0,2,173,254,0,2,174,226,0,2,175,218,0,2,175,254, 0,2,176,32,0,2,176,70,0,2,176,150,0,2,176,232, 0,2,177,64,0,2,177,230,0,2,178,216,0,2,179,48, 0,2,179,192,0,2,180,46,0,2,180,134,0,2,181,4, 0,2,181,56,0,2,181,106,0,2,181,248,0,2,182,56, 0,2,182,104,0,2,182,154,0,2,183,52,0,2,183,192, 0,2,184,100,0,2,184,136,0,2,185,28,0,2,185,82, 0,2,185,170,0,2,185,220,0,2,186,64,0,2,187,4, 0,2,187,142,0,2,188,38,0,2,188,150,0,2,188,250, 0,2,189,52,0,2,189,110,0,2,189,198,0,2,190,28, 0,2,190,74,0,2,190,120,0,2,190,174,0,2,190,230, 0,2,191,94,0,2,191,232,0,2,193,0,0,2,194,34, 0,2,194,152,0,2,195,18,0,2,195,172,0,2,196,76, 0,2,197,2,0,2,197,182,0,2,199,4,0,2,200,90, 0,2,201,70,0,2,202,150,0,2,203,130,0,2,204,190, 0,2,205,62,0,2,205,252,0,2,206,152,0,2,207,116, 0,2,207,236,0,2,208,172,0,2,209,106,0,2,210,110, 0,2,210,238,0,2,211,176,0,2,212,130,0,2,213,174, 0,2,214,126,0,2,215,154,0,2,216,56,0,2,217,36, 0,2,217,240,0,2,219,0,0,2,219,208,0,2,220,224, 0,2,221,110,0,2,221,254,0,2,222,214,0,2,223,70, 0,2,223,236,0,2,224,102,0,2,225,32,0,2,226,54, 0,2,226,198,0,2,228,10,0,2,229,56,0,2,229,246, 0,2,230,246,0,2,232,64,0,2,233,142,0,2,234,40, 0,2,235,10,0,2,235,254,0,2,236,206,0,2,237,228, 0,2,239,20,0,2,239,122,0,2,240,56,0,2,241,6, 0,2,242,24,0,2,243,112,0,2,244,206,0,2,245,220, 0,2,246,188,0,2,248,4,0,2,249,10,0,2,249,242, 0,2,250,190,0,2,251,132,0,2,252,108,0,2,253,102, 0,2,254,24,0,2,254,236,0,2,255,160,0,3,0,76, 0,3,1,54,0,3,2,38,0,3,2,192,0,3,3,136, 0,3,4,64,0,3,5,118,0,3,6,246,0,3,7,252, 0,3,8,164,0,3,8,242,0,3,9,2,0,3,9,106, 0,3,9,230,0,3,10,50,0,3,10,126,0,3,10,216, 0,3,11,46,0,3,11,92,0,3,11,140,0,3,12,62, 0,3,12,232,0,3,13,130,0,3,14,84,0,3,14,166, 0,3,15,64,0,3,15,194,0,3,16,134,0,3,16,252, 0,3,17,184,0,3,17,222,0,3,18,70,0,3,18,166, 0,3,19,76,0,3,19,212,0,3,20,164,0,3,21,36, 0,3,21,230,0,3,22,118,0,3,23,78,0,3,23,178, 0,3,24,86,0,3,24,230,0,3,25,204,0,3,26,68, 0,3,26,254,0,3,27,110,0,3,27,220,0,3,28,150, 0,3,28,238,0,3,29,136,0,3,29,204,0,3,30,80, 0,3,30,188,0,3,30,226,0,3,31,80,0,3,31,212, 0,3,32,26,0,3,32,108,0,3,33,20,0,3,33,208, 0,3,34,54,0,3,34,228,0,3,35,168,0,3,35,246, 0,3,36,136,0,3,37,40,0,3,37,130,0,3,38,30, 0,3,38,212,0,3,39,82,0,3,40,16,0,3,40,232, 0,3,41,58,0,3,41,194,0,3,42,30,0,3,42,124, 0,3,42,242,0,3,43,68,0,3,43,150,0,3,43,192, 0,3,43,234,0,3,44,26,0,3,44,74,0,3,44,164, 0,3,44,252,0,3,45,102,0,3,45,168,0,3,45,218, 0,3,46,38,0,3,46,118,0,3,46,196,0,3,47,6, 0,3,47,84,0,3,47,186,0,3,48,82,0,3,48,238, 0,3,49,98,0,3,49,120,0,3,49,142,0,3,49,164, 0,3,49,186,0,3,49,202,0,3,49,220,0,3,50,34, 0,3,50,56,0,3,50,72,0,3,50,88,0,3,50,104, 0,3,50,120,0,3,50,136,0,3,50,152,0,3,50,168, 0,3,50,184,0,3,50,200,0,3,50,254,0,3,51,42, 0,3,51,58,0,3,51,178,0,3,52,12,0,3,52,94, 0,3,52,238,0,3,53,116,0,3,53,236,0,3,54,182, 0,3,54,220,0,3,55,46,0,3,55,98,0,3,55,180, 0,3,56,48,0,3,56,86,0,3,56,196,0,3,57,86, 0,3,57,180,0,3,58,4,0,3,58,98,0,3,58,242, 0,3,59,20,0,3,59,212,0,3,60,148,0,3,61,94, 0,3,62,42,0,3,62,176,0,3,63,62,0,3,63,196, 0,3,64,46,0,3,64,150,0,3,64,200,0,3,65,64, 0,3,65,100,0,3,65,148,0,3,66,114,0,3,66,152, 0,3,67,0,0,3,67,152,0,3,67,252,0,3,68,90, 0,3,68,174,0,3,69,138,0,3,70,28,0,3,70,210, 0,3,71,66,0,3,71,160,0,3,72,8,0,3,72,198, 0,3,73,96,0,3,73,132,0,3,73,238,0,3,74,134, 0,3,75,60,0,3,75,138,0,3,76,16,0,1,0,0, 8,127,0,218,0,18,0,77,0,7,0,2,0,0,0,1, 0,1,0,0,0,64,0,46,0,4,0,2,0,0,0,34, 1,158,0,0,0,3,0,0,0,0,0,90,0,0,0,0, 0,3,0,0,0,1,0,16,0,92,0,0,0,3,0,0, 0,2,0,12,0,110,0,0,0,3,0,0,0,3,0,68, 0,124,0,0,0,3,0,0,0,4,0,18,0,194,0,0, 0,3,0,0,0,5,0,52,0,214,0,0,0,3,0,0, 0,6,0,16,1,12,0,0,0,3,0,0,0,13,0,140, 1,30,0,0,0,3,0,0,0,14,0,72,1,172,0,0, 0,3,0,0,0,19,0,88,1,246,0,1,0,0,0,0, 0,0,0,45,2,80,0,1,0,0,0,0,0,1,0,8, 2,126,0,1,0,0,0,0,0,2,0,6,2,135,0,1, 0,0,0,0,0,3,0,34,2,142,0,1,0,0,0,0, 0,4,0,9,2,177,0,1,0,0,0,0,0,5,0,26, 2,187,0,1,0,0,0,0,0,6,0,8,2,214,0,1, 0,0,0,0,0,13,0,70,2,223,0,1,0,0,0,0, 0,14,0,36,3,38,0,1,0,0,0,0,0,19,0,44, 3,75,0,3,0,1,4,9,0,0,0,90,0,0,0,3, 0,1,4,9,0,1,0,16,0,92,0,3,0,1,4,9, 0,2,0,12,0,110,0,3,0,1,4,9,0,3,0,68, 0,124,0,3,0,1,4,9,0,4,0,18,0,194,0,3, 0,1,4,9,0,5,0,52,0,214,0,3,0,1,4,9, 0,6,0,16,1,12,0,3,0,1,4,9,0,13,0,140, 1,30,0,3,0,1,4,9,0,14,0,72,1,172,0,3, 0,1,4,9,0,19,0,88,1,246,0,3,0,1,4,36, 0,2,0,14,3,120,0,3,0,1,4,36,0,13,0,134, 3,136,0,3,0,1,4,36,0,14,0,72,4,16,0,3, 0,1,4,36,0,19,0,84,4,90,0,67,0,111,0,112, 0,121,0,108,0,101,0,102,0,116,0,32,0,50,0,48, 0,48,0,50,0,44,0,32,0,50,0,48,0,48,0,51, 0,32,0,70,0,114,0,101,0,101,0,32,0,83,0,111, 0,102,0,116,0,119,0,97,0,114,0,101,0,32,0,70, 0,111,0,117,0,110,0,100,0,97,0,116,0,105,0,111, 0,110,0,46,0,0,0,70,0,114,0,101,0,101,0,83, 0,97,0,110,0,115,0,0,0,77,0,101,0,100,0,105, 0,117,0,109,0,0,0,80,0,102,0,97,0,69,0,100, 0,105,0,116,0,32,0,49,0,46,0,48,0,32,0,58, 0,32,0,70,0,114,0,101,0,101,0,32,0,83,0,97, 0,110,0,115,0,32,0,58,0,32,0,56,0,45,0,57, 0,45,0,50,0,48,0,48,0,51,0,0,0,70,0,114, 0,101,0,101,0,32,0,83,0,97,0,110,0,115,0,0, 0,86,0,101,0,114,0,115,0,105,0,111,0,110,0,32, 0,36,0,82,0,101,0,118,0,105,0,115,0,105,0,111, 0,110,0,58,0,32,0,49,0,46,0,50,0,55,0,32, 0,36,0,32,0,0,0,70,0,114,0,101,0,101,0,83, 0,97,0,110,0,115,0,0,0,84,0,104,0,101,0,32, 0,117,0,115,0,101,0,32,0,111,0,102,0,32,0,116, 0,104,0,105,0,115,0,32,0,102,0,111,0,110,0,116, 0,32,0,105,0,115,0,32,0,103,0,114,0,97,0,110, 0,116,0,101,0,100,0,32,0,115,0,117,0,98,0,106, 0,101,0,99,0,116,0,32,0,116,0,111,0,32,0,71, 0,78,0,85,0,32,0,71,0,101,0,110,0,101,0,114, 0,97,0,108,0,32,0,80,0,117,0,98,0,108,0,105, 0,99,0,32,0,76,0,105,0,99,0,101,0,110,0,115, 0,101,0,46,0,0,0,104,0,116,0,116,0,112,0,58, 0,47,0,47,0,119,0,119,0,119,0,46,0,103,0,110, 0,117,0,46,0,111,0,114,0,103,0,47,0,99,0,111, 0,112,0,121,0,108,0,101,0,102,0,116,0,47,0,103, 0,112,0,108,0,46,0,104,0,116,0,109,0,108,0,0, 0,84,0,104,0,101,0,32,0,113,0,117,0,105,0,99, 0,107,0,32,0,98,0,114,0,111,0,119,0,110,0,32, 0,102,0,111,0,120,0,32,0,106,0,117,0,109,0,112, 0,115,0,32,0,111,0,118,0,101,0,114,0,32,0,116, 0,104,0,101,0,32,0,108,0,97,0,122,0,121,0,32, 0,100,0,111,0,103,0,46,0,0,67,111,112,121,108,101, 102,116,32,50,48,48,50,44,32,50,48,48,51,32,70,114, 101,101,32,83,111,102,116,119,97,114,101,32,70,111,117,110, 100,97,116,105,111,110,46,0,70,114,101,101,83,97,110,115, 0,77,101,100,105,117,109,0,80,102,97,69,100,105,116,32, 49,46,48,32,58,32,70,114,101,101,32,83,97,110,115,32, 58,32,56,45,57,45,50,48,48,51,0,70,114,101,101,32, 83,97,110,115,0,86,101,114,115,105,111,110,32,36,82,101, 118,105,115,105,111,110,58,32,49,46,50,55,32,36,32,0, 70,114,101,101,83,97,110,115,0,84,104,101,32,117,115,101, 32,111,102,32,116,104,105,115,32,102,111,110,116,32,105,115, 32,103,114,97,110,116,101,100,32,115,117,98,106,101,99,116, 32,116,111,32,71,78,85,32,71,101,110,101,114,97,108,32, 80,117,98,108,105,99,32,76,105,99,101,110,115,101,46,0, 104,116,116,112,58,47,47,119,119,119,46,103,110,117,46,111, 114,103,47,99,111,112,121,108,101,102,116,47,103,112,108,46, 104,116,109,108,0,84,104,101,32,113,117,105,99,107,32,98, 114,111,119,110,32,102,111,120,32,106,117,109,112,115,32,111, 118,101,114,32,116,104,101,32,108,97,122,121,32,100,111,103, 46,0,0,110,0,97,0,118,0,97,0,100,0,110,0,111, 0,0,0,68,0,111,0,118,0,111,0,108,0,106,0,101, 0,110,0,97,0,32,0,106,0,101,0,32,0,117,0,112, 0,111,0,114,0,97,0,98,0,97,0,32,0,118,0,32, 0,115,0,107,0,108,0,97,0,100,0,117,0,32,0,122, 0,32,0,108,0,105,0,99,0,101,0,110,0,99,0,111, 0,32,0,71,0,78,0,85,0,32,0,71,0,101,0,110, 0,101,0,114,0,97,0,108,0,32,0,80,0,117,0,98, 0,108,0,105,0,99,0,32,0,76,0,105,0,99,0,101, 0,110,0,115,0,101,0,46,0,0,0,104,0,116,0,116, 0,112,0,58,0,47,0,47,0,119,0,119,0,119,0,46, 0,103,0,110,0,117,0,46,0,111,0,114,0,103,0,47, 0,99,0,111,0,112,0,121,0,108,0,101,0,102,0,116, 0,47,0,103,0,112,0,108,0,46,0,104,0,116,0,109, 0,108,0,0,1,96,0,101,0,114,0,105,0,102,0,32, 0,98,0,111,0,32,0,122,0,97,0,32,0,118,0,97, 0,106,0,111,0,32,0,115,0,112,0,101,0,116,0,32, 0,107,0,117,0,104,0,97,0,108,0,32,0,100,0,111, 0,109,0,97,1,13,0,101,0,32,1,126,0,103,0,97, 0,110,0,99,0,101,0,46,0,0,0,0,0,2,0,0, 0,0,0,0,255,105,0,50,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,8,127,0,0, 0,1,0,2,1,2,1,3,1,4,1,5,1,6,1,7, 1,8,1,9,1,10,1,11,1,12,1,13,1,14,1,15, 1,16,1,17,1,18,1,19,1,20,1,21,1,22,1,23, 1,24,1,25,1,26,1,27,1,28,1,29,1,30,1,31, 1,32,1,33,1,34,1,35,1,36,1,37,1,38,1,39, 1,40,1,41,1,42,1,43,1,44,1,45,1,46,1,47, 1,48,1,49,1,50,1,51,1,52,1,53,1,54,1,55, 1,56,1,57,1,58,1,59,1,60,1,61,1,62,1,63, 1,64,1,65,1,66,1,67,1,68,1,69,1,70,1,71, 1,72,1,73,1,74,1,75,1,76,1,77,1,78,1,79, 1,80,1,81,1,82,1,83,1,84,1,85,1,86,1,87, 1,88,1,89,1,90,1,91,1,92,1,93,1,94,1,95, 1,96,0,172,0,163,0,132,0,133,0,189,0,150,0,232, 0,134,0,142,0,139,0,157,0,169,0,164,1,97,0,138, 0,218,0,131,0,147,0,242,0,243,0,141,0,151,0,136, 0,195,0,222,0,241,0,158,0,170,0,245,0,244,0,246, 0,162,0,173,0,201,0,199,0,174,0,98,0,99,0,144, 0,100,0,203,0,101,0,200,0,202,0,207,0,204,0,205, 0,206,0,233,0,102,0,211,0,208,0,209,0,175,0,103, 0,240,0,145,0,214,0,212,0,213,0,104,0,235,0,237, 0,137,0,106,0,105,0,107,0,109,0,108,0,110,0,160, 0,111,0,113,0,112,0,114,0,115,0,117,0,116,0,118, 0,119,0,234,0,120,0,122,0,121,0,123,0,125,0,124, 0,184,0,161,0,127,0,126,0,128,0,129,0,236,0,238, 0,186,1,98,1,99,1,100,1,101,1,102,1,103,0,253, 0,254,1,104,1,105,1,106,1,107,0,255,1,0,1,108, 1,109,1,110,1,1,1,111,1,112,1,113,1,114,1,115, 1,116,1,117,1,118,1,119,1,120,1,121,1,122,0,248, 0,249,1,123,1,124,1,125,1,126,1,127,1,128,1,129, 1,130,1,131,1,132,1,133,1,134,1,135,1,136,1,137, 1,138,0,250,0,215,1,139,1,140,1,141,1,142,1,143, 1,144,1,145,1,146,1,147,1,148,1,149,1,150,1,151, 1,152,1,153,0,226,0,227,1,154,1,155,1,156,1,157, 1,158,1,159,1,160,1,161,1,162,1,163,1,164,1,165, 1,166,1,167,1,168,0,176,0,177,1,169,1,170,1,171, 1,172,1,173,1,174,1,175,1,176,1,177,1,178,0,251, 0,252,0,228,0,229,1,179,1,180,1,181,1,182,1,183, 1,184,1,185,1,186,1,187,1,188,1,189,1,190,1,191, 1,192,1,193,1,194,1,195,1,196,1,197,1,198,1,199, 1,200,0,187,1,201,1,202,1,203,1,204,0,230,0,231, 1,205,1,206,1,207,1,208,1,209,1,210,1,211,1,212, 1,213,1,214,1,215,1,216,1,217,1,218,1,219,1,220, 0,166,1,221,1,222,1,223,1,224,1,225,1,226,1,227, 1,228,1,229,1,230,1,231,1,232,1,233,1,234,1,235, 1,236,1,237,1,238,1,239,1,240,1,241,1,242,1,243, 1,244,1,245,1,246,1,247,1,248,1,249,1,250,1,251, 1,252,1,253,1,254,1,255,2,0,2,1,2,2,2,3, 2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11, 2,12,2,13,2,14,2,15,2,16,2,17,2,18,2,19, 2,20,2,21,2,22,2,23,2,24,2,25,2,26,2,27, 2,28,2,29,2,30,2,31,2,32,2,33,2,34,2,35, 2,36,2,37,2,38,2,39,2,40,2,41,2,42,2,43, 2,44,2,45,2,46,2,47,2,48,2,49,2,50,2,51, 2,52,2,53,2,54,2,55,2,56,2,57,2,58,2,59, 2,60,2,61,2,62,2,63,2,64,2,65,2,66,2,67, 2,68,2,69,2,70,2,71,2,72,2,73,2,74,2,75, 2,76,2,77,2,78,2,79,2,80,2,81,2,82,2,83, 2,84,2,85,2,86,2,87,2,88,2,89,2,90,2,91, 2,92,2,93,2,94,2,95,2,96,2,97,2,98,2,99, 2,100,2,101,2,102,2,103,2,104,2,105,2,106,2,107, 2,108,2,109,2,110,2,111,2,112,2,113,2,114,2,115, 2,116,2,117,2,118,2,119,2,120,2,121,0,216,0,225, 2,122,2,123,0,219,0,220,0,221,0,224,0,217,0,223, 2,124,2,125,2,126,2,127,2,128,2,129,2,130,2,131, 2,132,2,133,2,134,2,135,2,136,2,137,2,138,2,139, 2,140,2,141,2,142,2,143,2,144,2,145,2,146,2,147, 2,148,2,149,2,150,2,151,2,152,2,153,2,154,2,155, 2,156,2,157,2,158,2,159,2,160,2,161,2,162,2,163, 2,164,2,165,2,166,2,167,2,168,2,169,2,170,2,171, 2,172,2,173,2,174,2,175,2,176,2,177,2,178,2,179, 2,180,2,181,2,182,2,183,2,184,2,185,2,186,2,187, 2,188,2,189,2,190,2,191,2,192,2,193,2,194,2,195, 2,196,2,197,2,198,2,199,2,200,2,201,2,202,2,203, 0,155,2,204,2,205,2,206,2,207,2,208,2,209,2,210, 2,211,2,212,2,213,2,214,2,215,2,216,2,217,2,218, 2,219,2,220,2,221,2,222,2,223,2,224,2,225,2,226, 2,227,2,228,2,229,2,230,2,231,2,232,2,233,2,234, 2,235,2,236,2,237,2,238,2,239,2,240,2,241,2,242, 2,243,2,244,2,245,2,246,2,247,2,248,2,249,2,250, 2,251,2,252,2,253,2,254,2,255,3,0,3,1,3,2, 3,3,3,4,3,5,3,6,3,7,3,8,3,9,3,10, 3,11,3,12,3,13,3,14,3,15,3,16,3,17,3,18, 3,19,3,20,3,21,3,22,3,23,3,24,3,25,3,26, 3,27,3,28,3,29,3,30,3,31,3,32,3,33,3,34, 3,35,3,36,3,37,3,38,3,39,3,40,3,41,3,42, 3,43,3,44,3,45,3,46,3,47,3,48,3,49,3,50, 3,51,3,52,3,53,3,54,3,55,3,56,3,57,3,58, 3,59,3,60,3,61,3,62,3,63,3,64,3,65,3,66, 3,67,3,68,3,69,3,70,3,71,3,72,3,73,3,74, 3,75,3,76,3,77,3,78,3,79,3,80,3,81,3,82, 3,83,3,84,3,85,3,86,3,87,3,88,3,89,3,90, 3,91,3,92,3,93,3,94,3,95,3,96,3,97,3,98, 3,99,3,100,3,101,3,102,3,103,3,104,3,105,3,106, 3,107,3,108,3,109,3,110,3,111,3,112,3,113,3,114, 3,115,3,116,3,117,3,118,3,119,3,120,3,121,3,122, 3,123,3,124,3,125,3,126,3,127,3,128,3,129,3,130, 3,131,3,132,3,133,3,134,3,135,3,136,3,137,3,138, 3,139,3,140,3,141,3,142,3,143,3,144,3,145,3,146, 3,147,3,148,3,149,3,150,3,151,3,152,3,153,3,154, 3,155,3,156,3,157,3,158,3,159,3,160,3,161,3,162, 3,163,3,164,3,165,3,166,3,167,3,168,3,169,3,170, 3,171,3,172,3,173,3,174,3,175,3,176,3,177,3,178, 3,179,3,180,3,181,3,182,3,183,3,184,3,185,3,186, 3,187,3,188,3,189,3,190,3,191,3,192,3,193,3,194, 3,195,3,196,3,197,3,198,3,199,3,200,3,201,3,202, 3,203,3,204,3,205,3,206,3,207,3,208,3,209,3,210, 3,211,3,212,3,213,3,214,3,215,3,216,3,217,3,218, 3,219,3,220,3,221,3,222,3,223,3,224,3,225,3,226, 3,227,3,228,3,229,3,230,3,231,3,232,3,233,3,234, 3,235,3,236,3,237,3,238,3,239,3,240,3,241,3,242, 3,243,3,244,3,245,3,246,3,247,3,248,3,249,3,250, 3,251,3,252,3,253,3,254,3,255,4,0,4,1,4,2, 4,3,4,4,4,5,4,6,4,7,4,8,4,9,4,10, 4,11,4,12,4,13,4,14,4,15,4,16,4,17,4,18, 4,19,4,20,4,21,4,22,4,23,4,24,4,25,4,26, 4,27,4,28,4,29,4,30,4,31,4,32,4,33,4,34, 4,35,4,36,4,37,4,38,4,39,4,40,4,41,4,42, 4,43,4,44,4,45,4,46,4,47,4,48,4,49,4,50, 4,51,4,52,4,53,4,54,4,55,4,56,4,57,4,58, 4,59,4,60,4,61,4,62,4,63,4,64,4,65,4,66, 4,67,4,68,4,69,4,70,4,71,4,72,4,73,4,74, 4,75,4,76,4,77,4,78,4,79,4,80,4,81,4,82, 4,83,4,84,4,85,4,86,4,87,4,88,4,89,4,90, 4,91,4,92,4,93,4,94,4,95,4,96,4,97,4,98, 4,99,4,100,4,101,4,102,4,103,4,104,4,105,4,106, 4,107,4,108,4,109,4,110,4,111,4,112,4,113,4,114, 4,115,4,116,4,117,4,118,4,119,4,120,4,121,4,122, 4,123,4,124,4,125,4,126,4,127,4,128,4,129,4,130, 4,131,4,132,4,133,4,134,4,135,4,136,4,137,4,138, 4,139,4,140,4,141,4,142,4,143,4,144,4,145,4,146, 4,147,4,148,4,149,4,150,4,151,4,152,4,153,4,154, 4,155,4,156,4,157,4,158,4,159,4,160,4,161,4,162, 4,163,4,164,4,165,4,166,4,167,4,168,4,169,4,170, 4,171,4,172,4,173,4,174,4,175,4,176,4,177,4,178, 4,179,4,180,4,181,4,182,4,183,4,184,4,185,4,186, 4,187,4,188,4,189,4,190,4,191,4,192,4,193,4,194, 4,195,4,196,4,197,4,198,4,199,4,200,4,201,4,202, 4,203,4,204,4,205,4,206,4,207,4,208,4,209,4,210, 4,211,4,212,4,213,4,214,4,215,4,216,4,217,4,218, 4,219,4,220,4,221,4,222,4,223,4,224,4,225,4,226, 4,227,4,228,4,229,4,230,4,231,4,232,4,233,4,234, 4,235,4,236,4,237,4,238,4,239,4,240,4,241,4,242, 4,243,4,244,4,245,4,246,4,247,4,248,4,249,4,250, 4,251,4,252,4,253,4,254,4,255,5,0,5,1,5,2, 5,3,5,4,5,5,5,6,5,7,5,8,5,9,5,10, 5,11,5,12,5,13,5,14,5,15,5,16,5,17,5,18, 5,19,5,20,5,21,5,22,5,23,5,24,5,25,5,26, 5,27,5,28,5,29,5,30,5,31,5,32,5,33,5,34, 5,35,5,36,5,37,5,38,5,39,5,40,5,41,5,42, 5,43,5,44,5,45,5,46,5,47,5,48,5,49,5,50, 5,51,5,52,5,53,5,54,5,55,5,56,5,57,5,58, 5,59,5,60,5,61,5,62,5,63,5,64,5,65,5,66, 5,67,5,68,5,69,5,70,5,71,5,72,5,73,5,74, 5,75,5,76,5,77,5,78,5,79,5,80,5,81,5,82, 5,83,5,84,5,85,5,86,5,87,5,88,5,89,5,90, 5,91,5,92,5,93,5,94,5,95,5,96,5,97,5,98, 5,99,5,100,5,101,5,102,5,103,5,104,5,105,5,106, 5,107,5,108,5,109,5,110,5,111,5,112,5,113,5,114, 5,115,5,116,5,117,5,118,5,119,5,120,5,121,5,122, 5,123,5,124,5,125,5,126,5,127,5,128,5,129,5,130, 5,131,5,132,5,133,5,134,5,135,5,136,5,137,5,138, 5,139,5,140,5,141,5,142,5,143,5,144,5,145,5,146, 5,147,5,148,5,149,5,150,5,151,5,152,5,153,5,154, 5,155,5,156,5,157,5,158,5,159,5,160,5,161,5,162, 5,163,5,164,5,165,5,166,5,167,5,168,5,169,5,170, 5,171,5,172,5,173,5,174,5,175,5,176,5,177,5,178, 5,179,5,180,5,181,5,182,5,183,5,184,5,185,5,186, 5,187,5,188,5,189,5,190,5,191,5,192,5,193,5,194, 5,195,5,196,5,197,5,198,5,199,5,200,5,201,5,202, 5,203,5,204,5,205,5,206,5,207,5,208,5,209,5,210, 5,211,5,212,5,213,5,214,5,215,5,216,5,217,5,218, 5,219,5,220,5,221,5,222,5,223,5,224,5,225,5,226, 5,227,5,228,5,229,5,230,5,231,5,232,5,233,5,234, 5,235,5,236,5,237,5,238,5,239,5,240,5,241,5,242, 5,243,5,244,5,245,5,246,5,247,5,248,5,249,5,250, 5,251,5,252,5,253,5,254,5,255,6,0,6,1,6,2, 6,3,6,4,6,5,6,6,6,7,6,8,6,9,6,10, 6,11,6,12,6,13,6,14,6,15,6,16,6,17,6,18, 6,19,6,20,6,21,6,22,6,23,6,24,6,25,6,26, 6,27,6,28,6,29,6,30,6,31,6,32,6,33,6,34, 6,35,6,36,6,37,6,38,6,39,6,40,6,41,6,42, 6,43,6,44,6,45,6,46,6,47,6,48,6,49,6,50, 6,51,6,52,6,53,6,54,6,55,6,56,6,57,6,58, 6,59,6,60,6,61,6,62,6,63,6,64,6,65,6,66, 6,67,6,68,6,69,6,70,6,71,6,72,6,73,6,74, 6,75,6,76,6,77,6,78,6,79,6,80,6,81,6,82, 6,83,6,84,6,85,6,86,6,87,6,88,6,89,6,90, 6,91,6,92,6,93,6,94,6,95,6,96,6,97,6,98, 6,99,6,100,6,101,6,102,6,103,6,104,6,105,6,106, 6,107,6,108,6,109,6,110,6,111,6,112,6,113,6,114, 6,115,6,116,6,117,6,118,6,119,6,120,6,121,6,122, 6,123,6,124,6,125,6,126,6,127,6,128,6,129,6,130, 6,131,6,132,6,133,6,134,6,135,6,136,6,137,6,138, 6,139,6,140,6,141,6,142,6,143,6,144,6,145,6,146, 6,147,6,148,6,149,6,150,6,151,6,152,6,153,6,154, 6,155,6,156,6,157,6,158,6,159,6,160,6,161,6,162, 6,163,6,164,6,165,6,166,6,167,6,168,6,169,6,170, 6,171,6,172,6,173,6,174,6,175,6,176,6,177,6,178, 6,179,6,180,6,181,6,182,6,183,6,184,6,185,6,186, 6,187,6,188,6,189,6,190,6,191,6,192,6,193,6,194, 6,195,6,196,6,197,6,198,6,199,6,200,6,201,6,202, 6,203,6,204,6,205,6,206,6,207,6,208,6,209,6,210, 6,211,6,212,6,213,6,214,6,215,6,216,6,217,6,218, 6,219,6,220,6,221,6,222,6,223,6,224,6,225,6,226, 6,227,6,228,6,229,6,230,6,231,6,232,6,233,6,234, 6,235,6,236,6,237,6,238,6,239,6,240,6,241,6,242, 6,243,6,244,6,245,6,246,6,247,6,248,6,249,6,250, 6,251,6,252,6,253,6,254,6,255,7,0,7,1,7,2, 7,3,7,4,7,5,7,6,7,7,7,8,7,9,7,10, 7,11,7,12,7,13,7,14,7,15,7,16,7,17,7,18, 7,19,7,20,7,21,7,22,7,23,7,24,7,25,7,26, 7,27,7,28,7,29,7,30,7,31,7,32,7,33,7,34, 7,35,7,36,7,37,7,38,7,39,7,40,7,41,7,42, 7,43,7,44,7,45,7,46,7,47,7,48,7,49,7,50, 7,51,7,52,7,53,7,54,7,55,7,56,7,57,7,58, 7,59,7,60,7,61,7,62,7,63,7,64,7,65,7,66, 7,67,7,68,7,69,7,70,7,71,7,72,7,73,7,74, 7,75,0,178,0,179,0,182,0,183,0,196,7,76,0,180, 0,181,0,197,7,77,0,130,0,194,0,135,7,78,0,171, 0,198,7,79,7,80,7,81,7,82,7,83,7,84,7,85, 0,190,0,191,7,86,7,87,7,88,0,188,7,89,7,90, 7,91,7,92,7,93,7,94,7,95,7,96,7,97,7,98, 7,99,7,100,7,101,7,102,7,103,7,104,7,105,7,106, 7,107,7,108,7,109,7,110,7,111,7,112,7,113,7,114, 7,115,7,116,7,117,7,118,7,119,7,120,7,121,7,122, 0,140,7,123,7,124,7,125,7,126,7,127,7,128,7,129, 7,130,7,131,7,132,7,133,7,134,7,135,7,136,7,137, 7,138,7,139,7,140,7,141,7,142,7,143,7,144,7,145, 7,146,7,147,7,148,7,149,7,150,7,151,7,152,7,153, 7,154,7,155,7,156,7,157,7,158,7,159,7,160,7,161, 7,162,7,163,7,164,7,165,7,166,7,167,7,168,7,169, 7,170,7,171,7,172,7,173,7,174,7,175,7,176,7,177, 7,178,7,179,7,180,7,181,7,182,7,183,7,184,7,185, 7,186,7,187,7,188,7,189,7,190,7,191,0,152,7,192, 7,193,0,168,7,194,7,195,7,196,0,154,7,197,0,153, 0,239,7,198,7,199,0,165,7,200,0,146,7,201,7,202, 7,203,7,204,7,205,0,156,7,206,7,207,7,208,7,209, 7,210,7,211,7,212,7,213,7,214,7,215,0,143,0,148, 0,149,7,216,7,217,7,218,7,219,7,220,0,185,7,221, 7,222,7,223,7,224,7,225,7,226,7,227,7,228,7,229, 7,230,7,231,7,232,7,233,7,234,7,235,7,236,7,237, 7,238,7,239,7,240,7,241,7,242,7,243,7,244,7,245, 7,246,7,247,7,248,7,249,7,250,7,251,7,252,7,253, 7,254,7,255,8,0,8,1,8,2,8,3,8,4,8,5, 8,6,8,7,8,8,8,9,8,10,8,11,8,12,8,13, 8,14,8,15,8,16,8,17,8,18,8,19,8,20,8,21, 8,22,8,23,8,24,8,25,8,26,8,27,8,28,8,29, 8,30,8,31,8,32,8,33,8,34,8,35,8,36,8,37, 8,38,8,39,8,40,8,41,8,42,8,43,8,44,8,45, 8,46,8,47,8,48,8,49,8,50,8,51,8,52,8,53, 8,54,8,55,8,56,8,57,8,58,8,59,8,60,8,61, 8,62,8,63,8,64,8,65,8,66,8,67,8,68,8,69, 8,70,8,71,8,72,8,73,8,74,8,75,8,76,8,77, 8,78,8,79,8,80,8,81,8,82,8,83,8,84,8,85, 8,86,8,87,8,88,8,89,8,90,8,91,8,92,8,93, 8,94,8,95,8,96,8,97,8,98,8,99,8,100,8,101, 8,102,8,103,8,104,8,105,8,106,8,107,8,108,8,109, 8,110,8,111,8,112,8,113,8,114,8,115,8,116,8,117, 8,118,8,119,8,120,8,121,8,122,8,123,8,124,8,125, 8,126,8,127,8,128,8,129,8,130,8,131,8,132,8,133, 8,134,8,135,8,136,8,137,8,138,8,139,8,140,8,141, 8,142,8,143,8,144,8,145,8,146,8,147,8,148,8,149, 8,150,8,151,8,152,8,153,8,154,8,155,8,156,8,157, 8,158,8,159,8,160,8,161,8,162,8,163,8,164,8,165, 8,166,8,167,8,168,8,169,8,170,8,171,8,172,8,173, 8,174,0,192,0,193,8,175,8,176,8,177,8,178,8,179, 8,180,8,181,8,182,8,183,8,184,8,185,8,186,8,187, 8,188,8,189,8,190,8,191,8,192,8,193,8,194,8,195, 8,196,8,197,8,198,8,199,8,200,8,201,8,202,8,203, 8,204,8,205,8,206,8,207,8,208,8,209,8,210,8,211, 8,212,8,213,8,214,8,215,8,216,8,217,8,218,8,219, 8,220,8,221,8,222,8,223,8,224,8,225,5,115,112,97, 99,101,6,101,120,99,108,97,109,8,113,117,111,116,101,100, 98,108,10,110,117,109,98,101,114,115,105,103,110,6,100,111, 108,108,97,114,7,112,101,114,99,101,110,116,9,97,109,112, 101,114,115,97,110,100,11,113,117,111,116,101,115,105,110,103, 108,101,9,112,97,114,101,110,108,101,102,116,10,112,97,114, 101,110,114,105,103,104,116,8,97,115,116,101,114,105,115,107, 4,112,108,117,115,5,99,111,109,109,97,6,104,121,112,104, 101,110,6,112,101,114,105,111,100,5,115,108,97,115,104,4, 122,101,114,111,3,111,110,101,3,116,119,111,5,116,104,114, 101,101,4,102,111,117,114,4,102,105,118,101,3,115,105,120, 5,115,101,118,101,110,5,101,105,103,104,116,4,110,105,110, 101,5,99,111,108,111,110,9,115,101,109,105,99,111,108,111, 110,4,108,101,115,115,5,101,113,117,97,108,7,103,114,101, 97,116,101,114,8,113,117,101,115,116,105,111,110,2,97,116, 1,65,1,66,1,67,1,68,1,69,1,70,1,71,1,72, 1,73,1,74,1,75,1,76,1,77,1,78,1,79,1,80, 1,81,1,82,1,83,1,84,1,85,1,86,1,87,1,88, 1,89,1,90,11,98,114,97,99,107,101,116,108,101,102,116, 9,98,97,99,107,115,108,97,115,104,12,98,114,97,99,107, 101,116,114,105,103,104,116,11,97,115,99,105,105,99,105,114, 99,117,109,10,117,110,100,101,114,115,99,111,114,101,5,103, 114,97,118,101,1,97,1,98,1,99,1,100,1,101,1,102, 1,103,1,104,1,105,1,106,1,107,1,108,1,109,1,110, 1,111,1,112,1,113,1,114,1,115,1,116,1,117,1,118, 1,119,1,120,1,121,1,122,9,98,114,97,99,101,108,101, 102,116,3,98,97,114,10,98,114,97,99,101,114,105,103,104, 116,10,97,115,99,105,105,116,105,108,100,101,10,115,111,102, 116,104,121,112,104,101,110,7,65,109,97,99,114,111,110,7, 97,109,97,99,114,111,110,6,65,98,114,101,118,101,6,97, 98,114,101,118,101,7,65,111,103,111,110,101,107,7,97,111, 103,111,110,101,107,11,67,99,105,114,99,117,109,102,108,101, 120,11,99,99,105,114,99,117,109,102,108,101,120,10,67,100, 111,116,97,99,99,101,110,116,10,99,100,111,116,97,99,99, 101,110,116,6,68,99,97,114,111,110,6,100,99,97,114,111, 110,6,68,99,114,111,97,116,7,69,109,97,99,114,111,110, 7,101,109,97,99,114,111,110,6,69,98,114,101,118,101,6, 101,98,114,101,118,101,10,69,100,111,116,97,99,99,101,110, 116,10,101,100,111,116,97,99,99,101,110,116,7,69,111,103, 111,110,101,107,7,101,111,103,111,110,101,107,6,69,99,97, 114,111,110,6,101,99,97,114,111,110,11,71,99,105,114,99, 117,109,102,108,101,120,11,103,99,105,114,99,117,109,102,108, 101,120,10,71,100,111,116,97,99,99,101,110,116,10,103,100, 111,116,97,99,99,101,110,116,12,71,99,111,109,109,97,97, 99,99,101,110,116,12,103,99,111,109,109,97,97,99,99,101, 110,116,11,72,99,105,114,99,117,109,102,108,101,120,11,104, 99,105,114,99,117,109,102,108,101,120,4,72,98,97,114,4, 104,98,97,114,6,73,116,105,108,100,101,6,105,116,105,108, 100,101,7,73,109,97,99,114,111,110,7,105,109,97,99,114, 111,110,6,73,98,114,101,118,101,6,105,98,114,101,118,101, 7,73,111,103,111,110,101,107,7,105,111,103,111,110,101,107, 2,73,74,2,105,106,11,74,99,105,114,99,117,109,102,108, 101,120,11,106,99,105,114,99,117,109,102,108,101,120,12,75, 99,111,109,109,97,97,99,99,101,110,116,12,107,99,111,109, 109,97,97,99,99,101,110,116,12,107,103,114,101,101,110,108, 97,110,100,105,99,6,76,97,99,117,116,101,6,108,97,99, 117,116,101,12,76,99,111,109,109,97,97,99,99,101,110,116, 12,108,99,111,109,109,97,97,99,99,101,110,116,6,76,99, 97,114,111,110,6,108,99,97,114,111,110,4,76,100,111,116, 4,108,100,111,116,6,78,97,99,117,116,101,6,110,97,99, 117,116,101,12,78,99,111,109,109,97,97,99,99,101,110,116, 12,110,99,111,109,109,97,97,99,99,101,110,116,6,78,99, 97,114,111,110,6,110,99,97,114,111,110,11,110,97,112,111, 115,116,114,111,112,104,101,3,69,110,103,3,101,110,103,7, 79,109,97,99,114,111,110,7,111,109,97,99,114,111,110,6, 79,98,114,101,118,101,6,111,98,114,101,118,101,13,79,104, 117,110,103,97,114,117,109,108,97,117,116,13,111,104,117,110, 103,97,114,117,109,108,97,117,116,6,82,97,99,117,116,101, 6,114,97,99,117,116,101,12,82,99,111,109,109,97,97,99, 99,101,110,116,12,114,99,111,109,109,97,97,99,99,101,110, 116,6,82,99,97,114,111,110,6,114,99,97,114,111,110,6, 83,97,99,117,116,101,6,115,97,99,117,116,101,11,83,99, 105,114,99,117,109,102,108,101,120,11,115,99,105,114,99,117, 109,102,108,101,120,7,117,110,105,48,49,54,50,7,117,110, 105,48,49,54,51,6,84,99,97,114,111,110,6,116,99,97, 114,111,110,4,84,98,97,114,4,116,98,97,114,6,85,116, 105,108,100,101,6,117,116,105,108,100,101,7,85,109,97,99, 114,111,110,7,117,109,97,99,114,111,110,6,85,98,114,101, 118,101,6,117,98,114,101,118,101,5,85,114,105,110,103,5, 117,114,105,110,103,13,85,104,117,110,103,97,114,117,109,108, 97,117,116,13,117,104,117,110,103,97,114,117,109,108,97,117, 116,7,85,111,103,111,110,101,107,7,117,111,103,111,110,101, 107,11,87,99,105,114,99,117,109,102,108,101,120,11,119,99, 105,114,99,117,109,102,108,101,120,11,89,99,105,114,99,117, 109,102,108,101,120,11,121,99,105,114,99,117,109,102,108,101, 120,6,90,97,99,117,116,101,6,122,97,99,117,116,101,10, 90,100,111,116,97,99,99,101,110,116,10,122,100,111,116,97, 99,99,101,110,116,5,108,111,110,103,115,7,117,110,105,48, 49,56,48,7,117,110,105,48,49,56,50,7,117,110,105,48, 49,56,51,7,117,110,105,48,49,56,52,7,117,110,105,48, 49,56,53,7,117,110,105,48,49,56,54,7,117,110,105,48, 49,56,55,7,117,110,105,48,49,56,56,7,117,110,105,48, 49,56,57,7,117,110,105,48,49,56,66,7,117,110,105,48, 49,56,67,7,117,110,105,48,49,56,69,7,117,110,105,48, 49,56,70,7,117,110,105,48,49,57,48,7,117,110,105,48, 49,57,49,7,117,110,105,48,49,57,51,7,117,110,105,48, 49,57,57,7,117,110,105,48,49,57,68,7,117,110,105,48, 49,57,69,7,117,110,105,48,49,57,70,7,117,110,105,48, 49,65,53,7,117,110,105,48,49,65,55,7,117,110,105,48, 49,65,56,7,117,110,105,48,49,65,57,7,117,110,105,48, 49,65,66,7,117,110,105,48,49,65,68,7,117,110,105,48, 49,65,69,7,117,110,105,48,49,67,52,7,117,110,105,48, 49,67,53,7,117,110,105,48,49,67,54,7,117,110,105,48, 49,67,55,7,117,110,105,48,49,67,56,7,117,110,105,48, 49,67,57,7,117,110,105,48,49,67,65,7,117,110,105,48, 49,67,66,7,117,110,105,48,49,67,67,7,117,110,105,48, 49,67,68,7,117,110,105,48,49,67,69,7,117,110,105,48, 49,67,70,7,117,110,105,48,49,68,48,7,117,110,105,48, 49,68,49,7,117,110,105,48,49,68,50,7,117,110,105,48, 49,68,51,7,117,110,105,48,49,68,52,7,117,110,105,48, 49,68,53,7,117,110,105,48,49,68,54,7,117,110,105,48, 49,68,55,7,117,110,105,48,49,68,56,7,117,110,105,48, 49,68,57,7,117,110,105,48,49,68,65,7,117,110,105,48, 49,68,66,7,117,110,105,48,49,68,67,7,117,110,105,48, 49,68,68,7,117,110,105,48,49,68,69,7,117,110,105,48, 49,68,70,7,117,110,105,48,49,69,48,7,117,110,105,48, 49,69,49,7,117,110,105,48,49,69,50,7,117,110,105,48, 49,69,51,6,71,99,97,114,111,110,6,103,99,97,114,111, 110,7,117,110,105,48,49,69,56,7,117,110,105,48,49,69, 57,7,117,110,105,48,49,69,65,7,117,110,105,48,49,69, 66,7,117,110,105,48,49,69,67,7,117,110,105,48,49,69, 68,7,117,110,105,48,49,70,48,7,117,110,105,48,49,70, 49,7,117,110,105,48,49,70,50,7,117,110,105,48,49,70, 51,7,117,110,105,48,49,70,52,7,117,110,105,48,49,70, 53,7,117,110,105,48,49,70,56,7,117,110,105,48,49,70, 57,10,65,114,105,110,103,97,99,117,116,101,10,97,114,105, 110,103,97,99,117,116,101,7,65,69,97,99,117,116,101,7, 97,101,97,99,117,116,101,11,79,115,108,97,115,104,97,99, 117,116,101,11,111,115,108,97,115,104,97,99,117,116,101,7, 117,110,105,48,50,48,48,7,117,110,105,48,50,48,49,7, 117,110,105,48,50,48,50,7,117,110,105,48,50,48,51,7, 117,110,105,48,50,48,52,7,117,110,105,48,50,48,53,7, 117,110,105,48,50,48,54,7,117,110,105,48,50,48,55,7, 117,110,105,48,50,48,56,7,117,110,105,48,50,48,57,7, 117,110,105,48,50,48,65,7,117,110,105,48,50,48,66,7, 117,110,105,48,50,48,67,7,117,110,105,48,50,48,68,7, 117,110,105,48,50,48,69,7,117,110,105,48,50,48,70,7, 117,110,105,48,50,49,48,7,117,110,105,48,50,49,49,7, 117,110,105,48,50,49,50,7,117,110,105,48,50,49,51,7, 117,110,105,48,50,49,52,7,117,110,105,48,50,49,53,7, 117,110,105,48,50,49,54,7,117,110,105,48,50,49,55,12, 83,99,111,109,109,97,97,99,99,101,110,116,12,115,99,111, 109,109,97,97,99,99,101,110,116,12,84,99,111,109,109,97, 97,99,99,101,110,116,12,116,99,111,109,109,97,97,99,99, 101,110,116,7,117,110,105,48,50,49,69,7,117,110,105,48, 50,49,70,7,117,110,105,48,50,50,54,7,117,110,105,48, 50,50,55,7,117,110,105,48,50,50,56,7,117,110,105,48, 50,50,57,7,117,110,105,48,50,50,65,7,117,110,105,48, 50,50,66,7,117,110,105,48,50,50,67,7,117,110,105,48, 50,50,68,7,117,110,105,48,50,50,69,7,117,110,105,48, 50,50,70,7,117,110,105,48,50,51,48,7,117,110,105,48, 50,51,49,7,117,110,105,48,50,51,50,7,117,110,105,48, 50,51,51,7,117,110,105,48,50,53,48,7,117,110,105,48, 50,53,49,7,117,110,105,48,50,53,50,7,117,110,105,48, 50,53,51,7,117,110,105,48,50,53,52,7,117,110,105,48, 50,53,54,7,117,110,105,48,50,53,55,7,117,110,105,48, 50,53,56,7,117,110,105,48,50,53,57,7,117,110,105,48, 50,53,66,7,117,110,105,48,50,53,67,7,117,110,105,48, 50,54,48,7,117,110,105,48,50,54,49,7,117,110,105,48, 50,54,53,7,117,110,105,48,50,54,54,7,117,110,105,48, 50,54,55,7,117,110,105,48,50,54,56,7,117,110,105,48, 50,54,57,7,117,110,105,48,50,54,65,7,117,110,105,48, 50,54,68,7,117,110,105,48,50,54,70,7,117,110,105,48, 50,55,48,7,117,110,105,48,50,55,49,7,117,110,105,48, 50,55,50,7,117,110,105,48,50,55,51,7,117,110,105,48, 50,55,53,7,117,110,105,48,50,55,57,7,117,110,105,48, 50,55,65,7,117,110,105,48,50,55,66,7,117,110,105,48, 50,55,67,7,117,110,105,48,50,55,68,7,117,110,105,48, 50,55,69,7,117,110,105,48,50,55,70,7,117,110,105,48, 50,56,50,7,117,110,105,48,50,56,51,7,117,110,105,48, 50,56,52,7,117,110,105,48,50,56,53,7,117,110,105,48, 50,56,55,7,117,110,105,48,50,56,56,7,117,110,105,48, 50,56,57,7,117,110,105,48,50,56,67,7,117,110,105,48, 50,56,68,7,117,110,105,48,50,56,69,7,117,110,105,48, 50,57,48,7,117,110,105,48,50,57,67,7,117,110,105,48, 50,57,69,7,117,110,105,48,50,65,48,7,117,110,105,48, 50,67,65,7,117,110,105,48,50,67,66,9,103,114,97,118, 101,99,111,109,98,9,97,99,117,116,101,99,111,109,98,7, 117,110,105,48,51,48,50,9,116,105,108,100,101,99,111,109, 98,7,117,110,105,48,51,48,52,7,117,110,105,48,51,48, 54,7,117,110,105,48,51,48,55,7,117,110,105,48,51,48, 56,7,117,110,105,48,51,48,65,7,117,110,105,48,51,48, 66,7,117,110,105,48,51,48,67,7,117,110,105,48,51,48, 70,7,117,110,105,48,51,49,49,7,117,110,105,48,51,49, 50,7,117,110,105,48,51,49,51,7,117,110,105,48,51,49, 52,7,117,110,105,48,51,50,54,7,117,110,105,48,51,50, 55,7,117,110,105,48,51,50,56,7,117,110,105,48,51,55, 52,7,117,110,105,48,51,55,53,7,117,110,105,48,51,55, 65,7,117,110,105,48,51,55,69,5,116,111,110,111,115,13, 100,105,101,114,101,115,105,115,116,111,110,111,115,10,65,108, 112,104,97,116,111,110,111,115,9,97,110,111,116,101,108,101, 105,97,12,69,112,115,105,108,111,110,116,111,110,111,115,8, 69,116,97,116,111,110,111,115,9,73,111,116,97,116,111,110, 111,115,12,79,109,105,99,114,111,110,116,111,110,111,115,12, 85,112,115,105,108,111,110,116,111,110,111,115,10,79,109,101, 103,97,116,111,110,111,115,17,105,111,116,97,100,105,101,114, 101,115,105,115,116,111,110,111,115,5,65,108,112,104,97,4, 66,101,116,97,5,71,97,109,109,97,7,117,110,105,48,51, 57,52,7,69,112,115,105,108,111,110,4,90,101,116,97,3, 69,116,97,5,84,104,101,116,97,4,73,111,116,97,5,75, 97,112,112,97,6,76,97,109,98,100,97,2,77,117,2,78, 117,2,88,105,7,79,109,105,99,114,111,110,2,80,105,3, 82,104,111,5,83,105,103,109,97,3,84,97,117,7,85,112, 115,105,108,111,110,3,80,104,105,3,67,104,105,3,80,115, 105,7,117,110,105,48,51,65,57,12,73,111,116,97,100,105, 101,114,101,115,105,115,15,85,112,115,105,108,111,110,100,105, 101,114,101,115,105,115,10,97,108,112,104,97,116,111,110,111, 115,12,101,112,115,105,108,111,110,116,111,110,111,115,8,101, 116,97,116,111,110,111,115,9,105,111,116,97,116,111,110,111, 115,20,117,112,115,105,108,111,110,100,105,101,114,101,115,105, 115,116,111,110,111,115,5,97,108,112,104,97,4,98,101,116, 97,5,103,97,109,109,97,5,100,101,108,116,97,7,101,112, 115,105,108,111,110,4,122,101,116,97,3,101,116,97,5,116, 104,101,116,97,4,105,111,116,97,5,107,97,112,112,97,6, 108,97,109,98,100,97,7,117,110,105,48,51,66,67,2,110, 117,2,120,105,7,111,109,105,99,114,111,110,3,114,104,111, 6,115,105,103,109,97,49,5,115,105,103,109,97,3,116,97, 117,7,117,112,115,105,108,111,110,3,112,104,105,3,99,104, 105,3,112,115,105,5,111,109,101,103,97,12,105,111,116,97, 100,105,101,114,101,115,105,115,15,117,112,115,105,108,111,110, 100,105,101,114,101,115,105,115,12,111,109,105,99,114,111,110, 116,111,110,111,115,12,117,112,115,105,108,111,110,116,111,110, 111,115,10,111,109,101,103,97,116,111,110,111,115,7,117,110, 105,48,52,48,48,9,97,102,105,105,49,48,48,50,51,9, 97,102,105,105,49,48,48,53,49,9,97,102,105,105,49,48, 48,53,50,9,97,102,105,105,49,48,48,53,51,9,97,102, 105,105,49,48,48,53,52,9,97,102,105,105,49,48,48,53, 53,9,97,102,105,105,49,48,48,53,54,9,97,102,105,105, 49,48,48,53,55,9,97,102,105,105,49,48,48,53,56,9, 97,102,105,105,49,48,48,53,57,9,97,102,105,105,49,48, 48,54,48,9,97,102,105,105,49,48,48,54,49,7,117,110, 105,48,52,48,68,9,97,102,105,105,49,48,48,54,50,9, 97,102,105,105,49,48,49,52,53,9,97,102,105,105,49,48, 48,49,55,9,97,102,105,105,49,48,48,49,56,9,97,102, 105,105,49,48,48,49,57,9,97,102,105,105,49,48,48,50, 48,9,97,102,105,105,49,48,48,50,49,9,97,102,105,105, 49,48,48,50,50,9,97,102,105,105,49,48,48,50,52,9, 97,102,105,105,49,48,48,50,53,9,97,102,105,105,49,48, 48,50,54,9,97,102,105,105,49,48,48,50,55,9,97,102, 105,105,49,48,48,50,56,9,97,102,105,105,49,48,48,50, 57,9,97,102,105,105,49,48,48,51,48,9,97,102,105,105, 49,48,48,51,49,9,97,102,105,105,49,48,48,51,50,9, 97,102,105,105,49,48,48,51,51,9,97,102,105,105,49,48, 48,51,52,9,97,102,105,105,49,48,48,51,53,9,97,102, 105,105,49,48,48,51,54,9,97,102,105,105,49,48,48,51, 55,9,97,102,105,105,49,48,48,51,56,9,97,102,105,105, 49,48,48,51,57,9,97,102,105,105,49,48,48,52,48,9, 97,102,105,105,49,48,48,52,49,9,97,102,105,105,49,48, 48,52,50,9,97,102,105,105,49,48,48,52,51,9,97,102, 105,105,49,48,48,52,52,9,97,102,105,105,49,48,48,52, 53,9,97,102,105,105,49,48,48,52,54,9,97,102,105,105, 49,48,48,52,55,9,97,102,105,105,49,48,48,52,56,9, 97,102,105,105,49,48,48,52,57,9,97,102,105,105,49,48, 48,54,53,9,97,102,105,105,49,48,48,54,54,9,97,102, 105,105,49,48,48,54,55,9,97,102,105,105,49,48,48,54, 56,9,97,102,105,105,49,48,48,54,57,9,97,102,105,105, 49,48,48,55,48,9,97,102,105,105,49,48,48,55,50,9, 97,102,105,105,49,48,48,55,51,9,97,102,105,105,49,48, 48,55,52,9,97,102,105,105,49,48,48,55,53,9,97,102, 105,105,49,48,48,55,54,9,97,102,105,105,49,48,48,55, 55,9,97,102,105,105,49,48,48,55,56,9,97,102,105,105, 49,48,48,55,57,9,97,102,105,105,49,48,48,56,48,9, 97,102,105,105,49,48,48,56,49,9,97,102,105,105,49,48, 48,56,50,9,97,102,105,105,49,48,48,56,51,9,97,102, 105,105,49,48,48,56,52,9,97,102,105,105,49,48,48,56, 53,9,97,102,105,105,49,48,48,56,54,9,97,102,105,105, 49,48,48,56,55,9,97,102,105,105,49,48,48,56,56,9, 97,102,105,105,49,48,48,56,57,9,97,102,105,105,49,48, 48,57,48,9,97,102,105,105,49,48,48,57,49,9,97,102, 105,105,49,48,48,57,50,9,97,102,105,105,49,48,48,57, 51,9,97,102,105,105,49,48,48,57,52,9,97,102,105,105, 49,48,48,57,53,9,97,102,105,105,49,48,48,57,54,9, 97,102,105,105,49,48,48,57,55,7,117,110,105,48,52,53, 48,9,97,102,105,105,49,48,48,55,49,9,97,102,105,105, 49,48,48,57,57,9,97,102,105,105,49,48,49,48,48,9, 97,102,105,105,49,48,49,48,49,9,97,102,105,105,49,48, 49,48,50,9,97,102,105,105,49,48,49,48,51,9,97,102, 105,105,49,48,49,48,52,9,97,102,105,105,49,48,49,48, 53,9,97,102,105,105,49,48,49,48,54,9,97,102,105,105, 49,48,49,48,55,9,97,102,105,105,49,48,49,48,56,9, 97,102,105,105,49,48,49,48,57,7,117,110,105,48,52,53, 68,9,97,102,105,105,49,48,49,49,48,9,97,102,105,105, 49,48,49,57,51,7,117,110,105,48,52,56,67,7,117,110, 105,48,52,56,68,7,117,110,105,48,52,56,69,7,117,110, 105,48,52,56,70,9,97,102,105,105,49,48,48,53,48,9, 97,102,105,105,49,48,48,57,56,7,117,110,105,48,52,57, 50,7,117,110,105,48,52,57,51,7,117,110,105,48,52,57, 52,7,117,110,105,48,52,57,53,7,117,110,105,48,52,57, 54,7,117,110,105,48,52,57,55,7,117,110,105,48,52,57, 56,7,117,110,105,48,52,57,57,7,117,110,105,48,52,57, 65,7,117,110,105,48,52,57,66,7,117,110,105,48,52,57, 67,7,117,110,105,48,52,57,68,7,117,110,105,48,52,57, 69,7,117,110,105,48,52,57,70,7,117,110,105,48,52,65, 48,7,117,110,105,48,52,65,49,7,117,110,105,48,52,65, 50,7,117,110,105,48,52,65,51,7,117,110,105,48,52,65, 52,7,117,110,105,48,52,65,53,7,117,110,105,48,52,65, 54,7,117,110,105,48,52,65,55,7,117,110,105,48,52,65, 56,7,117,110,105,48,52,65,57,7,117,110,105,48,52,65, 65,7,117,110,105,48,52,65,66,7,117,110,105,48,52,65, 67,7,117,110,105,48,52,65,68,7,117,110,105,48,52,65, 69,7,117,110,105,48,52,65,70,7,117,110,105,48,52,66, 48,7,117,110,105,48,52,66,49,7,117,110,105,48,52,66, 50,7,117,110,105,48,52,66,51,7,117,110,105,48,52,66, 52,7,117,110,105,48,52,66,53,7,117,110,105,48,52,66, 54,7,117,110,105,48,52,66,55,7,117,110,105,48,52,66, 56,7,117,110,105,48,52,66,57,7,117,110,105,48,52,66, 65,7,117,110,105,48,52,66,66,7,117,110,105,48,52,66, 67,7,117,110,105,48,52,66,68,7,117,110,105,48,52,66, 69,7,117,110,105,48,52,66,70,7,117,110,105,48,52,67, 48,7,117,110,105,48,52,67,49,7,117,110,105,48,52,67, 50,7,117,110,105,48,52,67,51,7,117,110,105,48,52,67, 52,7,117,110,105,48,52,67,55,7,117,110,105,48,52,67, 56,7,117,110,105,48,52,67,66,7,117,110,105,48,52,67, 67,7,117,110,105,48,52,68,48,7,117,110,105,48,52,68, 49,7,117,110,105,48,52,68,50,7,117,110,105,48,52,68, 51,7,117,110,105,48,52,68,52,7,117,110,105,48,52,68, 53,7,117,110,105,48,52,68,54,7,117,110,105,48,52,68, 55,7,117,110,105,48,52,68,56,9,97,102,105,105,49,48, 56,52,54,7,117,110,105,48,52,68,65,7,117,110,105,48, 52,68,66,7,117,110,105,48,52,68,67,7,117,110,105,48, 52,68,68,7,117,110,105,48,52,68,69,7,117,110,105,48, 52,68,70,7,117,110,105,48,52,69,48,7,117,110,105,48, 52,69,49,7,117,110,105,48,52,69,50,7,117,110,105,48, 52,69,51,7,117,110,105,48,52,69,52,7,117,110,105,48, 52,69,53,7,117,110,105,48,52,69,54,7,117,110,105,48, 52,69,55,7,117,110,105,48,52,69,56,7,117,110,105,48, 52,69,57,7,117,110,105,48,52,69,65,7,117,110,105,48, 52,69,66,7,117,110,105,48,52,69,67,7,117,110,105,48, 52,69,68,7,117,110,105,48,52,69,69,7,117,110,105,48, 52,69,70,7,117,110,105,48,52,70,48,7,117,110,105,48, 52,70,49,7,117,110,105,48,52,70,50,7,117,110,105,48, 52,70,51,7,117,110,105,48,52,70,52,7,117,110,105,48, 52,70,53,7,117,110,105,48,52,70,56,7,117,110,105,48, 52,70,57,7,117,110,105,48,53,51,49,7,117,110,105,48, 53,51,50,7,117,110,105,48,53,51,51,7,117,110,105,48, 53,51,52,7,117,110,105,48,53,51,53,7,117,110,105,48, 53,51,54,7,117,110,105,48,53,51,55,7,117,110,105,48, 53,51,56,7,117,110,105,48,53,51,57,7,117,110,105,48, 53,51,65,7,117,110,105,48,53,51,66,7,117,110,105,48, 53,51,67,7,117,110,105,48,53,51,68,7,117,110,105,48, 53,51,69,7,117,110,105,48,53,51,70,7,117,110,105,48, 53,52,48,7,117,110,105,48,53,52,49,7,117,110,105,48, 53,52,50,7,117,110,105,48,53,52,51,7,117,110,105,48, 53,52,52,7,117,110,105,48,53,52,53,7,117,110,105,48, 53,52,54,7,117,110,105,48,53,52,55,7,117,110,105,48, 53,52,56,7,117,110,105,48,53,52,57,7,117,110,105,48, 53,52,65,7,117,110,105,48,53,52,66,7,117,110,105,48, 53,52,67,7,117,110,105,48,53,52,68,7,117,110,105,48, 53,52,69,7,117,110,105,48,53,52,70,7,117,110,105,48, 53,53,48,7,117,110,105,48,53,53,49,7,117,110,105,48, 53,53,50,7,117,110,105,48,53,53,51,7,117,110,105,48, 53,53,52,7,117,110,105,48,53,53,53,7,117,110,105,48, 53,53,54,7,117,110,105,48,53,53,65,7,117,110,105,48, 53,53,66,7,117,110,105,48,53,53,67,7,117,110,105,48, 53,53,68,7,117,110,105,48,53,53,69,7,117,110,105,48, 53,54,49,7,117,110,105,48,53,54,50,7,117,110,105,48, 53,54,51,7,117,110,105,48,53,54,52,7,117,110,105,48, 53,54,53,7,117,110,105,48,53,54,54,7,117,110,105,48, 53,54,55,7,117,110,105,48,53,54,56,7,117,110,105,48, 53,54,57,7,117,110,105,48,53,54,65,7,117,110,105,48, 53,54,66,7,117,110,105,48,53,54,67,7,117,110,105,48, 53,54,68,7,117,110,105,48,53,54,69,7,117,110,105,48, 53,54,70,7,117,110,105,48,53,55,48,7,117,110,105,48, 53,55,49,7,117,110,105,48,53,55,50,7,117,110,105,48, 53,55,51,7,117,110,105,48,53,55,52,7,117,110,105,48, 53,55,53,7,117,110,105,48,53,55,54,7,117,110,105,48, 53,55,55,7,117,110,105,48,53,55,56,7,117,110,105,48, 53,55,57,7,117,110,105,48,53,55,65,7,117,110,105,48, 53,55,66,7,117,110,105,48,53,55,67,7,117,110,105,48, 53,55,68,7,117,110,105,48,53,55,69,7,117,110,105,48, 53,55,70,7,117,110,105,48,53,56,48,7,117,110,105,48, 53,56,49,7,117,110,105,48,53,56,50,7,117,110,105,48, 53,56,51,7,117,110,105,48,53,56,52,7,117,110,105,48, 53,56,53,7,117,110,105,48,53,56,54,7,117,110,105,48, 53,56,55,7,117,110,105,48,53,56,57,7,117,110,105,48, 53,56,65,9,97,102,105,105,53,55,55,57,57,9,97,102, 105,105,53,55,56,48,49,9,97,102,105,105,53,55,56,48, 48,9,97,102,105,105,53,55,56,48,50,9,97,102,105,105, 53,55,55,57,51,9,97,102,105,105,53,55,55,57,52,9, 97,102,105,105,53,55,55,57,53,9,97,102,105,105,53,55, 55,57,56,9,97,102,105,105,53,55,55,57,55,9,97,102, 105,105,53,55,56,48,54,9,97,102,105,105,53,55,55,57, 54,9,97,102,105,105,53,55,56,48,55,9,97,102,105,105, 53,55,56,51,57,9,97,102,105,105,53,55,54,52,53,9, 97,102,105,105,53,55,56,52,49,9,97,102,105,105,53,55, 56,52,50,9,97,102,105,105,53,55,56,48,52,9,97,102, 105,105,53,55,56,48,51,9,97,102,105,105,53,55,54,53, 56,7,117,110,105,48,53,67,52,9,97,102,105,105,53,55, 54,54,52,9,97,102,105,105,53,55,54,54,53,9,97,102, 105,105,53,55,54,54,54,9,97,102,105,105,53,55,54,54, 55,9,97,102,105,105,53,55,54,54,56,9,97,102,105,105, 53,55,54,54,57,9,97,102,105,105,53,55,54,55,48,9, 97,102,105,105,53,55,54,55,49,9,97,102,105,105,53,55, 54,55,50,9,97,102,105,105,53,55,54,55,51,9,97,102, 105,105,53,55,54,55,52,9,97,102,105,105,53,55,54,55, 53,9,97,102,105,105,53,55,54,55,54,9,97,102,105,105, 53,55,54,55,55,9,97,102,105,105,53,55,54,55,56,9, 97,102,105,105,53,55,54,55,57,9,97,102,105,105,53,55, 54,56,48,9,97,102,105,105,53,55,54,56,49,9,97,102, 105,105,53,55,54,56,50,9,97,102,105,105,53,55,54,56, 51,9,97,102,105,105,53,55,54,56,52,9,97,102,105,105, 53,55,54,56,53,9,97,102,105,105,53,55,54,56,54,9, 97,102,105,105,53,55,54,56,55,9,97,102,105,105,53,55, 54,56,56,9,97,102,105,105,53,55,54,56,57,9,97,102, 105,105,53,55,54,57,48,7,117,110,105,48,55,48,48,7, 117,110,105,48,55,48,49,7,117,110,105,48,55,48,50,7, 117,110,105,48,55,48,51,7,117,110,105,48,55,48,52,7, 117,110,105,48,55,48,53,7,117,110,105,48,55,48,54,7, 117,110,105,48,55,48,55,7,117,110,105,48,55,48,56,7, 117,110,105,48,55,48,57,7,117,110,105,48,55,48,65,7, 117,110,105,48,55,48,66,7,117,110,105,48,55,48,67,7, 117,110,105,48,55,48,68,7,117,110,105,48,55,49,48,7, 117,110,105,48,55,49,49,7,117,110,105,48,55,49,50,7, 117,110,105,48,55,49,51,7,117,110,105,48,55,49,52,7, 117,110,105,48,55,49,53,7,117,110,105,48,55,49,54,7, 117,110,105,48,55,49,55,7,117,110,105,48,55,49,56,7, 117,110,105,48,55,49,57,7,117,110,105,48,55,49,65,7, 117,110,105,48,55,49,66,7,117,110,105,48,55,49,67,7, 117,110,105,48,55,49,68,7,117,110,105,48,55,49,69,7, 117,110,105,48,55,49,70,7,117,110,105,48,55,50,48,7, 117,110,105,48,55,50,49,7,117,110,105,48,55,50,50,7, 117,110,105,48,55,50,51,7,117,110,105,48,55,50,52,7, 117,110,105,48,55,50,53,7,117,110,105,48,55,50,54,7, 117,110,105,48,55,50,55,7,117,110,105,48,55,50,56,7, 117,110,105,48,55,50,57,7,117,110,105,48,55,50,65,7, 117,110,105,48,55,50,66,7,117,110,105,48,55,50,67,7, 117,110,105,48,55,51,48,7,117,110,105,48,55,51,49,7, 117,110,105,48,55,51,50,7,117,110,105,48,55,51,51,7, 117,110,105,48,55,51,52,7,117,110,105,48,55,51,53,7, 117,110,105,48,55,51,54,7,117,110,105,48,55,51,55,7, 117,110,105,48,55,51,56,7,117,110,105,48,55,51,57,7, 117,110,105,48,55,51,65,7,117,110,105,48,55,51,66,7, 117,110,105,48,55,51,67,7,117,110,105,48,55,51,68,7, 117,110,105,48,55,51,69,7,117,110,105,48,55,51,70,7, 117,110,105,48,55,52,48,7,117,110,105,48,55,52,49,7, 117,110,105,48,55,52,50,7,117,110,105,48,55,52,51,7, 117,110,105,48,55,52,52,7,117,110,105,48,55,52,53,7, 117,110,105,48,55,52,54,7,117,110,105,48,55,52,55,7, 117,110,105,48,55,52,56,7,117,110,105,48,55,52,57,7, 117,110,105,48,55,52,65,7,117,110,105,48,57,48,49,7, 117,110,105,48,57,48,50,7,117,110,105,48,57,48,53,7, 117,110,105,48,57,48,54,7,117,110,105,48,57,48,55,7, 117,110,105,48,57,48,56,7,117,110,105,48,57,48,57,7, 117,110,105,48,57,48,65,7,117,110,105,48,57,48,66,7, 117,110,105,48,57,48,68,7,117,110,105,48,57,49,48,7, 117,110,105,48,57,49,49,7,117,110,105,48,57,49,51,7, 117,110,105,48,57,49,52,7,117,110,105,48,57,49,53,7, 117,110,105,48,57,49,54,7,117,110,105,48,57,49,55,7, 117,110,105,48,57,49,56,7,117,110,105,48,57,49,57,7, 117,110,105,48,57,49,65,7,117,110,105,48,57,49,66,7, 117,110,105,48,57,49,67,7,117,110,105,48,57,49,68,7, 117,110,105,48,57,49,69,7,117,110,105,48,57,49,70,7, 117,110,105,48,57,50,48,7,117,110,105,48,57,50,49,7, 117,110,105,48,57,50,50,7,117,110,105,48,57,50,51,7, 117,110,105,48,57,50,52,7,117,110,105,48,57,50,53,7, 117,110,105,48,57,50,54,7,117,110,105,48,57,50,55,7, 117,110,105,48,57,50,56,7,117,110,105,48,57,50,57,7, 117,110,105,48,57,50,65,7,117,110,105,48,57,50,66,7, 117,110,105,48,57,50,67,7,117,110,105,48,57,50,68,7, 117,110,105,48,57,50,69,7,117,110,105,48,57,50,70,7, 117,110,105,48,57,51,48,7,117,110,105,48,57,51,49,7, 117,110,105,48,57,51,50,7,117,110,105,48,57,51,51,7, 117,110,105,48,57,51,53,7,117,110,105,48,57,51,54,7, 117,110,105,48,57,51,55,7,117,110,105,48,57,51,56,7, 117,110,105,48,57,51,57,7,117,110,105,48,57,51,67,7, 117,110,105,48,57,51,68,7,117,110,105,48,57,51,69,7, 117,110,105,48,57,51,70,7,117,110,105,48,57,52,48,7, 117,110,105,48,57,52,49,7,117,110,105,48,57,52,50,7, 117,110,105,48,57,52,51,7,117,110,105,48,57,52,53,7, 117,110,105,48,57,52,55,7,117,110,105,48,57,52,56,7, 117,110,105,48,57,52,57,7,117,110,105,48,57,52,66,7, 117,110,105,48,57,52,67,7,117,110,105,48,57,52,68,7, 117,110,105,48,57,53,48,7,117,110,105,48,57,53,49,7, 117,110,105,48,57,54,54,7,117,110,105,48,57,54,55,7, 117,110,105,48,57,54,56,7,117,110,105,48,57,54,57,7, 117,110,105,48,57,54,65,7,117,110,105,48,57,54,66,7, 117,110,105,48,57,54,67,7,117,110,105,48,57,54,68,7, 117,110,105,48,57,54,69,7,117,110,105,48,57,54,70,7, 117,110,105,48,57,55,48,7,117,110,105,48,57,56,49,7, 117,110,105,48,57,56,50,7,117,110,105,48,57,56,51,7, 117,110,105,48,57,56,53,7,117,110,105,48,57,56,54,7, 117,110,105,48,57,56,55,7,117,110,105,48,57,56,56,7, 117,110,105,48,57,56,57,7,117,110,105,48,57,56,65,7, 117,110,105,48,57,56,66,7,117,110,105,48,57,56,67,7, 117,110,105,48,57,56,70,7,117,110,105,48,57,57,48,7, 117,110,105,48,57,57,51,7,117,110,105,48,57,57,52,7, 117,110,105,48,57,57,53,7,117,110,105,48,57,57,54,7, 117,110,105,48,57,57,55,7,117,110,105,48,57,57,56,7, 117,110,105,48,57,57,57,7,117,110,105,48,57,57,65,7, 117,110,105,48,57,57,66,7,117,110,105,48,57,57,67,7, 117,110,105,48,57,57,68,7,117,110,105,48,57,57,69,7, 117,110,105,48,57,57,70,7,117,110,105,48,57,65,48,7, 117,110,105,48,57,65,49,7,117,110,105,48,57,65,50,7, 117,110,105,48,48,67,49,7,117,110,105,48,57,65,52,7, 117,110,105,48,57,65,53,7,117,110,105,48,48,67,52,7, 117,110,105,48,57,65,55,7,117,110,105,48,48,67,54,7, 117,110,105,48,48,67,56,7,117,110,105,48,57,65,66,7, 117,110,105,48,57,65,67,7,117,110,105,48,57,65,68,7, 117,110,105,48,57,65,69,7,117,110,105,48,57,65,70,7, 117,110,105,48,57,66,48,7,117,110,105,48,57,66,50,7, 117,110,105,48,48,66,54,7,117,110,105,48,57,66,55,7, 117,110,105,48,57,66,56,7,117,110,105,48,57,66,57,7, 117,110,105,48,57,66,67,7,117,110,105,48,48,68,65,7, 117,110,105,48,57,66,70,7,117,110,105,48,57,67,48,7, 117,110,105,48,57,67,49,7,117,110,105,48,57,67,50,7, 117,110,105,48,57,67,51,7,117,110,105,48,57,67,52,7, 117,110,105,48,57,67,55,7,117,110,105,48,57,67,56,7, 117,110,105,48,57,67,66,7,117,110,105,48,57,67,67,7, 117,110,105,48,57,67,68,7,117,110,105,48,57,68,55,7, 117,110,105,48,57,68,67,7,117,110,105,48,57,68,68,7, 117,110,105,48,57,68,70,7,117,110,105,48,57,69,48,7, 117,110,105,48,57,69,49,7,117,110,105,48,57,69,50,7, 117,110,105,48,57,69,51,7,117,110,105,48,48,70,49,7, 117,110,105,48,48,70,50,7,117,110,105,48,48,70,51,7, 117,110,105,48,48,70,52,7,117,110,105,48,48,70,53,7, 117,110,105,48,48,70,54,7,117,110,105,48,48,70,55,7, 117,110,105,48,48,70,56,7,117,110,105,48,48,70,57,7, 117,110,105,48,48,70,65,7,117,110,105,48,57,70,48,7, 117,110,105,48,57,70,49,7,117,110,105,48,57,70,50,7, 117,110,105,48,57,70,51,7,117,110,105,48,57,70,52,7, 117,110,105,48,57,70,53,7,117,110,105,48,57,70,54,7, 117,110,105,48,57,70,55,7,117,110,105,48,57,70,56,7, 117,110,105,48,57,70,57,7,117,110,105,48,57,70,65,7, 117,110,105,48,65,48,53,7,117,110,105,48,65,48,54,7, 117,110,105,48,65,48,55,7,117,110,105,48,65,48,56,7, 117,110,105,48,65,48,57,7,117,110,105,48,65,48,65,7, 117,110,105,48,65,48,70,7,117,110,105,48,65,49,48,7, 117,110,105,48,65,49,51,7,117,110,105,48,65,49,52,7, 117,110,105,48,65,49,53,7,117,110,105,48,65,49,54,7, 117,110,105,48,65,49,55,7,117,110,105,48,65,49,56,7, 117,110,105,48,65,49,57,7,117,110,105,48,65,49,65,7, 117,110,105,48,65,49,66,7,117,110,105,48,65,49,67,7, 117,110,105,48,65,49,68,7,117,110,105,48,65,49,69,7, 117,110,105,48,65,49,70,7,117,110,105,48,65,50,48,7, 117,110,105,48,65,50,49,7,117,110,105,48,65,50,50,7, 117,110,105,48,65,50,51,7,117,110,105,48,65,50,52,7, 117,110,105,48,65,50,53,7,117,110,105,48,65,50,54,7, 117,110,105,48,65,50,55,7,117,110,105,48,65,50,56,7, 117,110,105,48,65,50,65,7,117,110,105,48,65,50,66,7, 117,110,105,48,65,50,67,7,117,110,105,48,65,50,68,7, 117,110,105,48,65,50,69,7,117,110,105,48,65,50,70,7, 117,110,105,48,65,51,48,7,117,110,105,48,65,51,50,7, 117,110,105,48,65,51,51,7,117,110,105,48,65,51,53,7, 117,110,105,48,65,51,54,7,117,110,105,48,65,51,56,7, 117,110,105,48,65,51,57,7,117,110,105,48,65,51,67,7, 117,110,105,48,65,51,69,7,117,110,105,48,65,51,70,7, 117,110,105,48,65,52,48,7,117,110,105,48,65,52,49,7, 117,110,105,48,65,52,50,7,117,110,105,48,65,52,55,7, 117,110,105,48,65,52,56,7,117,110,105,48,65,52,66,7, 117,110,105,48,65,52,67,7,117,110,105,48,65,52,68,7, 117,110,105,48,65,53,57,7,117,110,105,48,65,53,65,7, 117,110,105,48,65,53,66,7,117,110,105,48,65,53,67,7, 117,110,105,48,65,53,69,7,117,110,105,48,65,54,54,7, 117,110,105,48,65,54,55,7,117,110,105,48,65,54,56,7, 117,110,105,48,65,54,57,7,117,110,105,48,65,54,65,7, 117,110,105,48,65,54,66,7,117,110,105,48,65,54,67,7, 117,110,105,48,65,54,68,7,117,110,105,48,65,54,69,7, 117,110,105,48,65,54,70,7,117,110,105,48,65,55,48,7, 117,110,105,48,65,55,50,7,117,110,105,48,65,55,51,7, 117,110,105,48,65,55,52,7,117,110,105,48,65,56,49,7, 117,110,105,48,65,56,50,7,117,110,105,48,65,56,53,7, 117,110,105,48,65,56,54,7,117,110,105,48,65,56,55,7, 117,110,105,48,65,56,56,7,117,110,105,48,65,56,57,7, 117,110,105,48,65,56,65,7,117,110,105,48,65,56,66,7, 117,110,105,48,65,57,53,7,117,110,105,48,65,57,54,7, 117,110,105,48,65,57,55,7,117,110,105,48,65,57,56,7, 117,110,105,48,65,57,57,7,117,110,105,48,65,57,65,7, 117,110,105,48,65,57,66,7,117,110,105,48,65,57,67,7, 117,110,105,48,65,57,68,7,117,110,105,48,65,57,69,7, 117,110,105,48,65,57,70,7,117,110,105,48,65,65,48,7, 117,110,105,48,65,65,49,7,117,110,105,48,65,65,50,7, 117,110,105,48,65,65,51,7,117,110,105,48,65,65,52,7, 117,110,105,48,65,65,53,7,117,110,105,48,65,65,54,7, 117,110,105,48,65,65,55,7,117,110,105,48,65,65,56,7, 117,110,105,48,65,65,65,7,117,110,105,48,65,65,66,7, 117,110,105,48,65,65,67,7,117,110,105,48,65,65,68,7, 117,110,105,48,65,65,69,7,117,110,105,48,65,65,70,7, 117,110,105,48,65,66,48,7,117,110,105,48,65,66,50,7, 117,110,105,48,65,66,51,7,117,110,105,48,65,66,53,7, 117,110,105,48,65,66,54,7,117,110,105,48,65,66,55,7, 117,110,105,48,65,66,56,7,117,110,105,48,65,66,57,7, 117,110,105,48,65,66,68,7,117,110,105,48,65,66,69,7, 117,110,105,48,65,66,70,7,117,110,105,48,65,67,48,7, 117,110,105,48,65,67,49,7,117,110,105,48,65,67,50,7, 117,110,105,48,65,67,51,7,117,110,105,48,65,67,55,7, 117,110,105,48,65,67,56,7,117,110,105,48,65,67,66,7, 117,110,105,48,65,67,67,7,117,110,105,48,65,68,48,7, 117,110,105,48,65,69,54,7,117,110,105,48,65,69,55,7, 117,110,105,48,65,69,56,7,117,110,105,48,65,69,57,7, 117,110,105,48,65,69,65,7,117,110,105,48,65,69,66,7, 117,110,105,48,65,69,67,7,117,110,105,48,65,69,68,7, 117,110,105,48,65,69,69,7,117,110,105,48,65,69,70,7, 117,110,105,48,66,48,50,7,117,110,105,48,66,48,51,7, 117,110,105,48,66,48,53,7,117,110,105,48,66,48,54,7, 117,110,105,48,66,48,55,7,117,110,105,48,66,48,57,7, 117,110,105,48,66,48,66,7,117,110,105,48,66,48,70,7, 117,110,105,48,66,49,51,7,117,110,105,48,66,49,53,7, 117,110,105,48,66,49,54,7,117,110,105,48,66,49,55,7, 117,110,105,48,66,49,56,7,117,110,105,48,66,49,65,7, 117,110,105,48,66,49,67,7,117,110,105,48,66,49,68,7, 117,110,105,48,66,49,70,7,117,110,105,48,66,50,48,7, 117,110,105,48,66,50,49,7,117,110,105,48,66,50,65,7, 117,110,105,48,66,50,66,7,117,110,105,48,66,50,70,7, 117,110,105,48,66,51,48,7,117,110,105,48,66,51,50,7, 117,110,105,48,66,51,51,7,117,110,105,48,66,51,54,7, 117,110,105,48,66,51,55,7,117,110,105,48,66,51,56,7, 117,110,105,48,66,51,57,7,117,110,105,48,66,51,69,7, 117,110,105,48,66,51,70,7,117,110,105,48,66,52,48,7, 117,110,105,48,66,52,49,7,117,110,105,48,66,52,50,7, 117,110,105,48,66,52,51,7,117,110,105,48,66,52,55,7, 117,110,105,48,66,54,48,7,117,110,105,48,66,54,54,7, 117,110,105,48,66,54,55,7,117,110,105,48,66,54,56,7, 117,110,105,48,66,54,57,7,117,110,105,48,66,54,65,7, 117,110,105,48,66,54,66,7,117,110,105,48,66,54,67,7, 117,110,105,48,66,54,68,7,117,110,105,48,66,54,69,7, 117,110,105,48,66,54,70,7,117,110,105,48,66,56,50,7, 117,110,105,48,66,56,51,7,117,110,105,48,66,56,53,7, 117,110,105,48,66,56,54,7,117,110,105,48,66,56,55,7, 117,110,105,48,66,56,56,7,117,110,105,48,66,56,57,7, 117,110,105,48,66,56,65,7,117,110,105,48,66,56,69,7, 117,110,105,48,66,56,70,7,117,110,105,48,66,57,48,7, 117,110,105,48,66,57,50,7,117,110,105,48,66,57,51,7, 117,110,105,48,66,57,52,7,117,110,105,48,66,57,53,7, 117,110,105,48,66,57,57,7,117,110,105,48,66,57,65,7, 117,110,105,48,66,57,67,7,117,110,105,48,66,57,69,7, 117,110,105,48,66,57,70,7,117,110,105,48,66,65,51,7, 117,110,105,48,66,65,52,7,117,110,105,48,66,65,56,7, 117,110,105,48,66,65,57,7,117,110,105,48,66,65,65,7, 117,110,105,48,66,65,69,7,117,110,105,48,66,65,70,7, 117,110,105,48,66,66,48,7,117,110,105,48,66,66,49,7, 117,110,105,48,66,66,50,7,117,110,105,48,66,66,51,7, 117,110,105,48,66,66,52,7,117,110,105,48,66,66,53,7, 117,110,105,48,66,66,55,7,117,110,105,48,66,66,56,7, 117,110,105,48,66,66,57,7,117,110,105,48,66,66,69,7, 117,110,105,48,66,66,70,7,117,110,105,48,66,67,48,7, 117,110,105,48,66,67,49,7,117,110,105,48,66,67,54,7, 117,110,105,48,66,67,55,7,117,110,105,48,66,67,56,7, 117,110,105,48,66,67,65,7,117,110,105,48,66,67,66,7, 117,110,105,48,66,67,67,7,117,110,105,48,66,67,68,7, 117,110,105,48,66,68,55,7,117,110,105,48,66,68,65,7, 117,110,105,48,66,68,66,7,117,110,105,48,66,68,67,7, 117,110,105,48,66,68,68,7,117,110,105,48,66,69,49,7, 117,110,105,48,67,56,51,7,117,110,105,48,67,56,53,7, 117,110,105,48,67,56,54,7,117,110,105,48,67,56,55,7, 117,110,105,48,67,56,56,7,117,110,105,48,67,56,57,7, 117,110,105,48,67,56,65,7,117,110,105,48,67,56,69,7, 117,110,105,48,67,56,70,7,117,110,105,48,67,57,48,7, 117,110,105,48,67,57,50,7,117,110,105,48,67,57,51,7, 117,110,105,48,67,57,52,7,117,110,105,48,67,57,53,7, 117,110,105,48,67,57,54,7,117,110,105,48,67,57,55,7, 117,110,105,48,67,57,56,7,117,110,105,48,67,57,57,7, 117,110,105,48,67,57,65,7,117,110,105,48,67,57,67,7, 117,110,105,48,67,57,69,7,117,110,105,48,67,57,70,7, 117,110,105,48,67,65,48,7,117,110,105,48,67,65,49,7, 117,110,105,48,67,65,50,7,117,110,105,48,67,65,51,7, 117,110,105,48,67,65,52,7,117,110,105,48,67,65,53,7, 117,110,105,48,67,65,54,7,117,110,105,48,67,65,55,7, 117,110,105,48,67,65,56,7,117,110,105,48,67,66,48,7, 117,110,105,48,67,66,49,7,117,110,105,48,67,66,50,7, 117,110,105,48,67,66,51,7,117,110,105,48,67,69,54,7, 117,110,105,48,67,69,55,7,117,110,105,48,67,69,56,7, 117,110,105,48,67,69,57,7,117,110,105,48,67,69,65,7, 117,110,105,48,67,69,66,7,117,110,105,48,67,69,67,7, 117,110,105,48,67,69,68,7,117,110,105,48,67,69,69,7, 117,110,105,48,67,69,70,7,117,110,105,48,68,56,50,7, 117,110,105,48,68,56,51,7,117,110,105,48,68,56,53,7, 117,110,105,48,68,56,57,7,117,110,105,48,68,56,65,7, 117,110,105,48,68,56,66,7,117,110,105,48,68,57,49,7, 117,110,105,48,68,57,52,7,117,110,105,48,68,57,57,7, 117,110,105,48,68,57,65,7,117,110,105,48,68,57,66,7, 117,110,105,48,68,57,67,7,117,110,105,48,68,57,69,7, 117,110,105,48,68,65,48,7,117,110,105,48,68,65,49,7, 117,110,105,48,68,65,50,7,117,110,105,48,68,65,52,7, 117,110,105,48,68,65,53,7,117,110,105,48,68,65,55,7, 117,110,105,48,68,65,56,7,117,110,105,48,68,65,57,7, 117,110,105,48,68,65,65,7,117,110,105,48,68,65,66,7, 117,110,105,48,68,65,68,7,117,110,105,48,68,65,69,7, 117,110,105,48,68,65,70,7,117,110,105,48,68,66,48,7, 117,110,105,48,68,66,49,7,117,110,105,48,68,66,51,7, 117,110,105,48,68,66,52,7,117,110,105,48,68,66,53,7, 117,110,105,48,68,66,54,7,117,110,105,48,68,66,55,7, 117,110,105,48,68,66,56,7,117,110,105,48,68,66,57,7, 117,110,105,48,68,66,65,7,117,110,105,48,68,66,66,7, 117,110,105,48,68,66,68,7,117,110,105,48,68,67,48,7, 117,110,105,48,68,67,49,7,117,110,105,48,68,67,50,7, 117,110,105,48,68,67,51,7,117,110,105,48,68,67,52,7, 117,110,105,48,68,67,53,7,117,110,105,48,68,67,54,7, 117,110,105,48,68,67,65,7,117,110,105,48,68,67,70,7, 117,110,105,48,68,68,48,7,117,110,105,48,68,68,49,7, 117,110,105,48,68,68,50,7,117,110,105,48,68,68,51,7, 117,110,105,48,68,68,52,7,117,110,105,48,68,68,54,7, 117,110,105,48,68,68,56,7,117,110,105,48,68,68,57,7, 117,110,105,48,68,68,70,7,117,110,105,49,70,48,48,7, 117,110,105,49,70,48,49,7,117,110,105,49,70,48,50,7, 117,110,105,49,70,48,51,7,117,110,105,49,70,48,52,7, 117,110,105,49,70,48,53,7,117,110,105,49,70,48,54,7, 117,110,105,49,70,48,55,7,117,110,105,49,70,48,56,7, 117,110,105,49,70,48,57,7,117,110,105,49,70,48,65,7, 117,110,105,49,70,48,66,7,117,110,105,49,70,48,67,7, 117,110,105,49,70,48,68,7,117,110,105,49,70,48,69,7, 117,110,105,49,70,48,70,7,117,110,105,49,70,49,48,7, 117,110,105,49,70,49,49,7,117,110,105,49,70,49,50,7, 117,110,105,49,70,49,51,7,117,110,105,49,70,49,52,7, 117,110,105,49,70,49,53,7,117,110,105,49,70,49,56,7, 117,110,105,49,70,49,57,7,117,110,105,49,70,49,65,7, 117,110,105,49,70,49,66,7,117,110,105,49,70,49,67,7, 117,110,105,49,70,49,68,7,117,110,105,49,70,50,48,7, 117,110,105,49,70,50,49,7,117,110,105,49,70,50,50,7, 117,110,105,49,70,50,51,7,117,110,105,49,70,50,52,7, 117,110,105,49,70,50,53,7,117,110,105,49,70,50,54,7, 117,110,105,49,70,50,55,7,117,110,105,49,70,50,56,7, 117,110,105,49,70,50,57,7,117,110,105,49,70,50,65,7, 117,110,105,49,70,50,66,7,117,110,105,49,70,50,67,7, 117,110,105,49,70,50,68,7,117,110,105,49,70,50,69,7, 117,110,105,49,70,50,70,7,117,110,105,49,70,51,48,7, 117,110,105,49,70,51,49,7,117,110,105,49,70,51,50,7, 117,110,105,49,70,51,51,7,117,110,105,49,70,51,52,7, 117,110,105,49,70,51,53,7,117,110,105,49,70,51,54,7, 117,110,105,49,70,51,55,7,117,110,105,49,70,51,56,7, 117,110,105,49,70,51,57,7,117,110,105,49,70,51,65,7, 117,110,105,49,70,51,66,7,117,110,105,49,70,51,67,7, 117,110,105,49,70,51,68,7,117,110,105,49,70,51,69,7, 117,110,105,49,70,51,70,7,117,110,105,49,70,52,48,7, 117,110,105,49,70,52,49,7,117,110,105,49,70,52,50,7, 117,110,105,49,70,52,51,7,117,110,105,49,70,52,52,7, 117,110,105,49,70,52,53,7,117,110,105,49,70,52,56,7, 117,110,105,49,70,52,57,7,117,110,105,49,70,52,65,7, 117,110,105,49,70,52,66,7,117,110,105,49,70,52,67,7, 117,110,105,49,70,52,68,7,117,110,105,49,70,53,48,7, 117,110,105,49,70,53,49,7,117,110,105,49,70,53,50,7, 117,110,105,49,70,53,51,7,117,110,105,49,70,53,52,7, 117,110,105,49,70,53,53,7,117,110,105,49,70,53,54,7, 117,110,105,49,70,53,55,7,117,110,105,49,70,53,57,7, 117,110,105,49,70,53,66,7,117,110,105,49,70,53,68,7, 117,110,105,49,70,53,70,7,117,110,105,49,70,54,48,7, 117,110,105,49,70,54,49,7,117,110,105,49,70,54,50,7, 117,110,105,49,70,54,51,7,117,110,105,49,70,54,52,7, 117,110,105,49,70,54,53,7,117,110,105,49,70,54,54,7, 117,110,105,49,70,54,55,7,117,110,105,49,70,54,56,7, 117,110,105,49,70,54,57,7,117,110,105,49,70,54,65,7, 117,110,105,49,70,54,66,7,117,110,105,49,70,54,67,7, 117,110,105,49,70,54,68,7,117,110,105,49,70,54,69,7, 117,110,105,49,70,54,70,7,117,110,105,49,70,55,48,7, 117,110,105,49,70,55,49,7,117,110,105,49,70,55,50,7, 117,110,105,49,70,55,51,7,117,110,105,49,70,55,52,7, 117,110,105,49,70,55,53,7,117,110,105,49,70,55,54,7, 117,110,105,49,70,55,55,7,117,110,105,49,70,55,56,7, 117,110,105,49,70,55,57,7,117,110,105,49,70,55,65,7, 117,110,105,49,70,55,66,7,117,110,105,49,70,55,67,7, 117,110,105,49,70,55,68,7,117,110,105,49,70,56,48,7, 117,110,105,49,70,56,49,7,117,110,105,49,70,56,50,7, 117,110,105,49,70,56,51,7,117,110,105,49,70,56,52,7, 117,110,105,49,70,56,53,7,117,110,105,49,70,56,54,7, 117,110,105,49,70,56,55,7,117,110,105,49,70,56,56,7, 117,110,105,49,70,56,57,7,117,110,105,49,70,56,65,7, 117,110,105,49,70,56,66,7,117,110,105,49,70,56,67,7, 117,110,105,49,70,56,68,7,117,110,105,49,70,56,69,7, 117,110,105,49,70,56,70,7,117,110,105,49,70,57,48,7, 117,110,105,49,70,57,49,7,117,110,105,49,70,57,50,7, 117,110,105,49,70,57,51,7,117,110,105,49,70,57,52,7, 117,110,105,49,70,57,53,7,117,110,105,49,70,57,54,7, 117,110,105,49,70,57,55,7,117,110,105,49,70,57,56,7, 117,110,105,49,70,57,57,7,117,110,105,49,70,57,65,7, 117,110,105,49,70,57,66,7,117,110,105,49,70,57,67,7, 117,110,105,49,70,57,68,7,117,110,105,49,70,57,69,7, 117,110,105,49,70,57,70,7,117,110,105,49,70,65,48,7, 117,110,105,49,70,65,49,7,117,110,105,49,70,65,50,7, 117,110,105,49,70,65,51,7,117,110,105,49,70,65,52,7, 117,110,105,49,70,65,53,7,117,110,105,49,70,65,54,7, 117,110,105,49,70,65,55,7,117,110,105,49,70,65,56,7, 117,110,105,49,70,65,57,7,117,110,105,49,70,65,65,7, 117,110,105,49,70,65,66,7,117,110,105,49,70,65,67,7, 117,110,105,49,70,65,68,7,117,110,105,49,70,65,69,7, 117,110,105,49,70,65,70,7,117,110,105,49,70,66,48,7, 117,110,105,49,70,66,49,7,117,110,105,49,70,66,50,7, 117,110,105,49,70,66,51,7,117,110,105,49,70,66,52,7, 117,110,105,49,70,66,54,7,117,110,105,49,70,66,55,7, 117,110,105,49,70,66,56,7,117,110,105,49,70,66,57,7, 117,110,105,49,70,66,65,7,117,110,105,49,70,66,66,7, 117,110,105,49,70,66,67,7,117,110,105,49,70,66,68,7, 117,110,105,49,70,66,69,7,117,110,105,49,70,66,70,7, 117,110,105,49,70,67,48,7,117,110,105,49,70,67,49,7, 117,110,105,49,70,67,50,7,117,110,105,49,70,67,51,7, 117,110,105,49,70,67,52,7,117,110,105,49,70,67,54,7, 117,110,105,49,70,67,55,7,117,110,105,49,70,67,56,7, 117,110,105,49,70,67,57,7,117,110,105,49,70,67,65,7, 117,110,105,49,70,67,66,7,117,110,105,49,70,67,67,7, 117,110,105,49,70,67,68,7,117,110,105,49,70,67,69,7, 117,110,105,49,70,67,70,7,117,110,105,49,70,68,48,7, 117,110,105,49,70,68,49,7,117,110,105,49,70,68,50,7, 117,110,105,49,70,68,51,7,117,110,105,49,70,68,54,7, 117,110,105,49,70,68,55,7,117,110,105,49,70,68,56,7, 117,110,105,49,70,68,57,7,117,110,105,49,70,68,65,7, 117,110,105,49,70,68,66,7,117,110,105,49,70,68,68,7, 117,110,105,49,70,68,69,7,117,110,105,49,70,68,70,7, 117,110,105,49,70,69,48,7,117,110,105,49,70,69,49,7, 117,110,105,49,70,69,50,7,117,110,105,49,70,69,51,7, 117,110,105,49,70,69,52,7,117,110,105,49,70,69,53,7, 117,110,105,49,70,69,54,7,117,110,105,49,70,69,55,7, 117,110,105,49,70,69,56,7,117,110,105,49,70,69,57,7, 117,110,105,49,70,69,65,7,117,110,105,49,70,69,66,7, 117,110,105,49,70,69,67,7,117,110,105,49,70,69,68,7, 117,110,105,49,70,69,69,7,117,110,105,49,70,69,70,7, 117,110,105,49,70,70,50,7,117,110,105,49,70,70,51,7, 117,110,105,49,70,70,52,7,117,110,105,49,70,70,54,7, 117,110,105,49,70,70,55,7,117,110,105,49,70,70,56,7, 117,110,105,49,70,70,57,7,117,110,105,49,70,70,65,7, 117,110,105,49,70,70,66,7,117,110,105,49,70,70,67,7, 117,110,105,49,70,70,68,7,117,110,105,49,70,70,69,7, 117,110,105,50,48,49,48,13,113,117,111,116,101,114,101,118, 101,114,115,101,100,7,117,110,105,50,48,49,70,7,117,110, 105,50,48,50,51,7,117,110,105,50,48,51,49,6,109,105, 110,117,116,101,6,115,101,99,111,110,100,7,117,110,105,50, 48,51,52,7,117,110,105,50,48,51,53,7,117,110,105,50, 48,51,54,7,117,110,105,50,48,51,55,7,117,110,105,50, 48,51,66,9,101,120,99,108,97,109,100,98,108,7,117,110, 105,50,48,51,68,7,117,110,105,50,48,52,55,7,117,110, 105,50,48,52,56,7,117,110,105,50,48,52,57,7,117,110, 105,50,48,52,66,12,122,101,114,111,115,117,112,101,114,105, 111,114,7,117,110,105,50,48,55,49,12,102,111,117,114,115, 117,112,101,114,105,111,114,12,102,105,118,101,115,117,112,101, 114,105,111,114,11,115,105,120,115,117,112,101,114,105,111,114, 13,115,101,118,101,110,115,117,112,101,114,105,111,114,13,101, 105,103,104,116,115,117,112,101,114,105,111,114,12,110,105,110, 101,115,117,112,101,114,105,111,114,12,122,101,114,111,105,110, 102,101,114,105,111,114,11,111,110,101,105,110,102,101,114,105, 111,114,11,116,119,111,105,110,102,101,114,105,111,114,13,116, 104,114,101,101,105,110,102,101,114,105,111,114,12,102,111,117, 114,105,110,102,101,114,105,111,114,12,102,105,118,101,105,110, 102,101,114,105,111,114,11,115,105,120,105,110,102,101,114,105, 111,114,13,115,101,118,101,110,105,110,102,101,114,105,111,114, 13,101,105,103,104,116,105,110,102,101,114,105,111,114,12,110, 105,110,101,105,110,102,101,114,105,111,114,6,112,101,115,101, 116,97,7,117,110,105,50,48,65,56,9,97,102,105,105,53, 55,54,51,54,4,69,117,114,111,7,117,110,105,50,49,48, 66,7,117,110,105,50,49,48,67,7,117,110,105,50,49,49, 48,8,73,102,114,97,107,116,117,114,7,117,110,105,50,49, 49,50,9,97,102,105,105,54,49,51,53,50,7,117,110,105, 50,49,49,66,8,82,102,114,97,107,116,117,114,7,117,110, 105,50,49,50,54,7,117,110,105,50,49,50,55,7,117,110, 105,50,49,50,56,7,117,110,105,50,49,50,65,7,117,110, 105,50,49,50,66,7,117,110,105,50,49,50,67,7,117,110, 105,50,49,50,68,7,117,110,105,50,49,51,48,7,117,110, 105,50,49,51,49,7,117,110,105,50,49,51,50,7,117,110, 105,50,49,51,51,8,111,110,101,116,104,105,114,100,9,116, 119,111,116,104,105,114,100,115,7,117,110,105,50,49,53,53, 7,117,110,105,50,49,53,54,7,117,110,105,50,49,53,55, 7,117,110,105,50,49,53,56,7,117,110,105,50,49,53,57, 7,117,110,105,50,49,53,65,9,111,110,101,101,105,103,104, 116,104,12,116,104,114,101,101,101,105,103,104,116,104,115,11, 102,105,118,101,101,105,103,104,116,104,115,12,115,101,118,101, 110,101,105,103,104,116,104,115,7,117,110,105,50,49,53,70, 7,117,110,105,50,49,54,48,7,117,110,105,50,49,54,49, 7,117,110,105,50,49,54,50,7,117,110,105,50,49,54,51, 7,117,110,105,50,49,54,52,7,117,110,105,50,49,54,53, 7,117,110,105,50,49,54,54,7,117,110,105,50,49,54,55, 7,117,110,105,50,49,54,56,7,117,110,105,50,49,54,57, 7,117,110,105,50,49,54,65,7,117,110,105,50,49,54,66, 7,117,110,105,50,49,54,67,7,117,110,105,50,49,54,68, 7,117,110,105,50,49,54,69,7,117,110,105,50,49,54,70, 7,117,110,105,50,49,55,48,7,117,110,105,50,49,55,49, 7,117,110,105,50,49,55,50,7,117,110,105,50,49,55,51, 7,117,110,105,50,49,55,52,7,117,110,105,50,49,55,53, 7,117,110,105,50,49,55,54,7,117,110,105,50,49,55,55, 7,117,110,105,50,49,55,56,7,117,110,105,50,49,55,57, 7,117,110,105,50,49,55,65,7,117,110,105,50,49,55,66, 7,117,110,105,50,49,55,67,7,117,110,105,50,49,55,68, 7,117,110,105,50,49,55,69,7,117,110,105,50,49,55,70, 9,97,114,114,111,119,108,101,102,116,7,97,114,114,111,119, 117,112,10,97,114,114,111,119,114,105,103,104,116,9,97,114, 114,111,119,100,111,119,110,9,97,114,114,111,119,98,111,116, 104,9,97,114,114,111,119,117,112,100,110,14,99,97,114,114, 105,97,103,101,114,101,116,117,114,110,12,97,114,114,111,119, 100,98,108,108,101,102,116,10,97,114,114,111,119,100,98,108, 117,112,13,97,114,114,111,119,100,98,108,114,105,103,104,116, 12,97,114,114,111,119,100,98,108,100,111,119,110,12,97,114, 114,111,119,100,98,108,98,111,116,104,9,117,110,105,118,101, 114,115,97,108,11,101,120,105,115,116,101,110,116,105,97,108, 8,101,109,112,116,121,115,101,116,8,103,114,97,100,105,101, 110,116,7,101,108,101,109,101,110,116,10,110,111,116,101,108, 101,109,101,110,116,7,117,110,105,50,50,49,48,7,117,110, 105,50,50,49,51,12,97,115,116,101,114,105,115,107,109,97, 116,104,12,112,114,111,112,111,114,116,105,111,110,97,108,5, 97,110,103,108,101,10,108,111,103,105,99,97,108,97,110,100, 9,108,111,103,105,99,97,108,111,114,12,105,110,116,101,114, 115,101,99,116,105,111,110,5,117,110,105,111,110,7,117,110, 105,50,50,50,67,7,117,110,105,50,50,50,68,7,117,110, 105,50,50,50,69,9,116,104,101,114,101,102,111,114,101,7, 115,105,109,105,108,97,114,7,117,110,105,50,50,51,69,7, 117,110,105,50,50,52,49,7,117,110,105,50,50,52,50,7, 117,110,105,50,50,52,51,7,117,110,105,50,50,52,57,10, 99,105,114,99,108,101,112,108,117,115,7,117,110,105,50,50, 57,54,14,99,105,114,99,108,101,109,117,108,116,105,112,108, 121,13,112,101,114,112,101,110,100,105,99,117,108,97,114,7, 117,110,105,50,51,48,48,11,109,117,115,105,99,97,108,110, 111,116,101,7,117,110,105,51,48,48,49,7,117,110,105,51, 48,48,50,7,117,110,105,51,48,48,51,7,117,110,105,51, 48,48,53,7,117,110,105,51,48,48,55,7,117,110,105,51, 48,48,56,7,117,110,105,51,48,48,57,7,117,110,105,51, 48,48,65,7,117,110,105,51,48,48,66,7,117,110,105,51, 48,48,67,7,117,110,105,51,48,48,68,7,117,110,105,51, 48,48,69,7,117,110,105,51,48,48,70,7,117,110,105,51, 48,49,48,7,117,110,105,51,48,49,49,7,117,110,105,51, 48,49,52,7,117,110,105,51,48,49,53,7,117,110,105,51, 48,52,49,7,117,110,105,51,48,52,50,7,117,110,105,51, 48,52,51,7,117,110,105,51,48,52,52,7,117,110,105,51, 48,52,53,7,117,110,105,51,48,52,54,7,117,110,105,51, 48,52,55,7,117,110,105,51,48,52,56,7,117,110,105,51, 48,52,57,7,117,110,105,51,48,52,65,7,117,110,105,51, 48,52,66,7,117,110,105,51,48,52,67,7,117,110,105,51, 48,52,68,7,117,110,105,51,48,52,69,7,117,110,105,51, 48,52,70,7,117,110,105,51,48,53,48,7,117,110,105,51, 48,53,49,7,117,110,105,51,48,53,50,7,117,110,105,51, 48,53,51,7,117,110,105,51,48,53,52,7,117,110,105,51, 48,53,53,7,117,110,105,51,48,53,54,7,117,110,105,51, 48,53,55,7,117,110,105,51,48,53,56,7,117,110,105,51, 48,53,57,7,117,110,105,51,48,53,65,7,117,110,105,51, 48,53,66,7,117,110,105,51,48,53,67,7,117,110,105,51, 48,53,68,7,117,110,105,51,48,53,69,7,117,110,105,51, 48,53,70,7,117,110,105,51,48,54,48,7,117,110,105,51, 48,54,49,7,117,110,105,51,48,54,50,7,117,110,105,51, 48,54,51,7,117,110,105,51,48,54,52,7,117,110,105,51, 48,54,53,7,117,110,105,51,48,54,54,7,117,110,105,51, 48,54,55,7,117,110,105,51,48,54,56,7,117,110,105,51, 48,54,57,7,117,110,105,51,48,54,65,7,117,110,105,51, 48,54,66,7,117,110,105,51,48,54,67,7,117,110,105,51, 48,54,68,7,117,110,105,51,48,54,69,7,117,110,105,51, 48,54,70,7,117,110,105,51,48,55,48,7,117,110,105,51, 48,55,49,7,117,110,105,51,48,55,50,7,117,110,105,51, 48,55,51,7,117,110,105,51,48,55,52,7,117,110,105,51, 48,55,53,7,117,110,105,51,48,55,54,7,117,110,105,51, 48,55,55,7,117,110,105,51,48,55,56,7,117,110,105,51, 48,55,57,7,117,110,105,51,48,55,65,7,117,110,105,51, 48,55,66,7,117,110,105,51,48,55,67,7,117,110,105,51, 48,55,68,7,117,110,105,51,48,55,69,7,117,110,105,51, 48,55,70,7,117,110,105,51,48,56,48,7,117,110,105,51, 48,56,49,7,117,110,105,51,48,56,50,7,117,110,105,51, 48,56,51,7,117,110,105,51,48,56,52,7,117,110,105,51, 48,56,53,7,117,110,105,51,48,56,54,7,117,110,105,51, 48,56,55,7,117,110,105,51,48,56,56,7,117,110,105,51, 48,56,57,7,117,110,105,51,48,56,65,7,117,110,105,51, 48,56,66,7,117,110,105,51,48,56,67,7,117,110,105,51, 48,56,68,7,117,110,105,51,48,56,69,7,117,110,105,51, 48,56,70,7,117,110,105,51,48,57,48,7,117,110,105,51, 48,57,49,7,117,110,105,51,48,57,50,7,117,110,105,51, 48,57,51,7,117,110,105,51,48,57,57,7,117,110,105,51, 48,57,66,7,117,110,105,51,48,65,49,7,117,110,105,51, 48,65,50,7,117,110,105,51,48,65,51,7,117,110,105,51, 48,65,52,7,117,110,105,51,48,65,53,7,117,110,105,51, 48,65,54,7,117,110,105,51,48,65,55,7,117,110,105,51, 48,65,56,7,117,110,105,51,48,65,57,7,117,110,105,51, 48,65,65,7,117,110,105,51,48,65,66,7,117,110,105,51, 48,65,67,7,117,110,105,51,48,65,68,7,117,110,105,51, 48,65,69,7,117,110,105,51,48,65,70,7,117,110,105,51, 48,66,48,7,117,110,105,51,48,66,49,7,117,110,105,51, 48,66,50,7,117,110,105,51,48,66,51,7,117,110,105,51, 48,66,52,7,117,110,105,51,48,66,53,7,117,110,105,51, 48,66,54,7,117,110,105,51,48,66,55,7,117,110,105,51, 48,66,56,7,117,110,105,51,48,66,57,7,117,110,105,51, 48,66,65,7,117,110,105,51,48,66,66,7,117,110,105,51, 48,66,67,7,117,110,105,51,48,66,68,7,117,110,105,51, 48,66,69,7,117,110,105,51,48,66,70,7,117,110,105,51, 48,67,48,7,117,110,105,51,48,67,49,7,117,110,105,51, 48,67,50,7,117,110,105,51,48,67,51,7,117,110,105,51, 48,67,52,7,117,110,105,51,48,67,53,7,117,110,105,51, 48,67,54,7,117,110,105,51,48,67,55,7,117,110,105,51, 48,67,56,7,117,110,105,51,48,67,57,7,117,110,105,51, 48,67,65,7,117,110,105,51,48,67,66,7,117,110,105,51, 48,67,67,7,117,110,105,51,48,67,68,7,117,110,105,51, 48,67,69,7,117,110,105,51,48,67,70,7,117,110,105,51, 48,68,48,7,117,110,105,51,48,68,49,7,117,110,105,51, 48,68,50,7,117,110,105,51,48,68,51,7,117,110,105,51, 48,68,52,7,117,110,105,51,48,68,53,7,117,110,105,51, 48,68,54,7,117,110,105,51,48,68,55,7,117,110,105,51, 48,68,56,7,117,110,105,51,48,68,57,7,117,110,105,51, 48,68,65,7,117,110,105,51,48,68,66,7,117,110,105,51, 48,68,67,7,117,110,105,51,48,68,68,7,117,110,105,51, 48,68,69,7,117,110,105,51,48,68,70,7,117,110,105,51, 48,69,48,7,117,110,105,51,48,69,49,7,117,110,105,51, 48,69,50,7,117,110,105,51,48,69,51,7,117,110,105,51, 48,69,52,7,117,110,105,51,48,69,53,7,117,110,105,51, 48,69,54,7,117,110,105,51,48,69,55,7,117,110,105,51, 48,69,56,7,117,110,105,51,48,69,57,7,117,110,105,51, 48,69,65,7,117,110,105,51,48,69,66,7,117,110,105,51, 48,69,67,7,117,110,105,51,48,69,68,7,117,110,105,51, 48,69,69,7,117,110,105,51,48,69,70,7,117,110,105,51, 48,70,48,7,117,110,105,51,48,70,49,7,117,110,105,51, 48,70,50,7,117,110,105,51,48,70,51,7,117,110,105,51, 48,70,52,7,117,110,105,51,48,70,53,7,117,110,105,51, 48,70,54,7,117,110,105,51,48,70,55,7,117,110,105,51, 48,70,56,7,117,110,105,51,48,70,57,7,117,110,105,51, 48,70,65,7,117,110,105,51,48,70,66,7,117,110,105,51, 48,70,67,7,117,110,105,51,48,70,68,7,117,110,105,51, 48,70,69,7,117,110,105,70,54,51,57,7,117,110,105,70, 54,51,65,7,117,110,105,70,54,51,66,7,117,110,105,70, 54,51,67,7,117,110,105,70,54,51,68,7,117,110,105,70, 54,51,69,7,117,110,105,70,54,51,70,7,117,110,105,70, 54,52,48,7,117,110,105,70,54,52,49,8,100,111,116,108, 101,115,115,106,11,99,111,109,109,97,97,99,99,101,110,116, 9,111,110,101,102,105,116,116,101,100,2,102,102,3,102,102, 105,3,102,102,108,7,117,110,105,70,66,48,53,7,117,110, 105,70,66,48,54,7,117,110,105,70,66,49,68,7,117,110, 105,70,66,49,69,9,97,102,105,105,53,55,55,48,53,7, 117,110,105,70,66,50,48,7,117,110,105,70,66,50,49,7, 117,110,105,70,66,50,50,7,117,110,105,70,66,50,51,7, 117,110,105,70,66,50,52,7,117,110,105,70,66,50,53,7, 117,110,105,70,66,50,54,7,117,110,105,70,66,50,55,7, 117,110,105,70,66,50,56,7,117,110,105,70,66,50,57,9, 97,102,105,105,53,55,54,57,52,9,97,102,105,105,53,55, 54,57,53,7,117,110,105,70,66,50,67,7,117,110,105,70, 66,50,68,7,117,110,105,70,66,50,69,7,117,110,105,70, 66,50,70,7,117,110,105,70,66,51,48,7,117,110,105,70, 66,51,49,7,117,110,105,70,66,51,50,7,117,110,105,70, 66,51,51,7,117,110,105,70,66,51,52,9,97,102,105,105, 53,55,55,50,51,7,117,110,105,70,66,51,54,7,117,110, 105,70,66,51,56,7,117,110,105,70,66,51,57,7,117,110, 105,70,66,51,65,7,117,110,105,70,66,51,66,7,117,110, 105,70,66,51,67,7,117,110,105,70,66,51,69,7,117,110, 105,70,66,52,48,7,117,110,105,70,66,52,49,7,117,110, 105,70,66,52,51,7,117,110,105,70,66,52,52,7,117,110, 105,70,66,52,54,7,117,110,105,70,66,52,55,7,117,110, 105,70,66,52,56,7,117,110,105,70,66,52,57,7,117,110, 105,70,66,52,65,9,97,102,105,105,53,55,55,48,48,7, 117,110,105,70,66,52,67,7,117,110,105,70,66,52,68,7, 117,110,105,70,66,52,69,7,117,110,105,70,66,52,70,7, 117,110,105,70,70,70,68,0,}; size_t lxFNTFreeSans_ttf_size = 264072; therion/loch/lxGLC.cxx0000644000076400010400000015522312047524664015731 0ustar userAdministrators/** * @file lxGLC.cxx * Loch GL canvas implementation. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ */ // Standard libraries #ifndef LXDEPCHECK #include #include #include #include #include #include #include #include #ifdef LXMACOSX #include #include #else #include #include #endif #endif //LXDEPCHECK - standart libraries #include "lxGLC.h" #include "lxGUI.h" #include "lxData.h" #include "lxSetup.h" #include "lxSView.h" #include "lxFNT6x13_bdf.h" #include "lxFNT10x20_bdf.h" #include "lxFNTFreeSans_ttf.h" #include "lxSetup.h" #include "lxRender.h" #include "lxGUI.h" #include "lxTR.h" #ifdef LXWIN32 #include "lxR2D.h" #endif #ifdef LXLINUX #include "lxR2P.h" #endif #define LXTRCBORDER (this->m_renderData->m_scaleMode == LXRENDER_FIT_SCREEN ? 0 : 16) BEGIN_EVENT_TABLE(lxGLCanvas, wxGLCanvas) EVT_LEFT_DCLICK(lxGLCanvas::OnMouseDouble) EVT_RIGHT_DCLICK(lxGLCanvas::OnMouseDouble) EVT_LEFT_DOWN(lxGLCanvas::OnMouseDown) EVT_LEFT_UP(lxGLCanvas::OnMouseUp) EVT_MIDDLE_DOWN(lxGLCanvas::OnMouseDown) EVT_MIDDLE_UP(lxGLCanvas::OnMouseUp) EVT_RIGHT_DOWN(lxGLCanvas::OnMouseDown) EVT_RIGHT_UP(lxGLCanvas::OnMouseUp) EVT_MOTION(lxGLCanvas::OnMouseMove) EVT_MOUSEWHEEL(lxGLCanvas::OnMouseWheel) EVT_SIZE(lxGLCanvas::OnSize) EVT_PAINT(lxGLCanvas::OnPaint) EVT_ERASE_BACKGROUND(lxGLCanvas::OnEraseBackground) EVT_ENTER_WINDOW(lxGLCanvas::OnEnterWindow ) EVT_CHAR(lxGLCanvas::OnKeyPress) EVT_IDLE(lxGLCanvas::OnIdle) END_EVENT_TABLE() static const GLubyte srf16tex[48] = { 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 0, 0 }; lxGLCanvas::lxGLCanvas(struct lxSetup * stp, struct lxData * dat, wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name) : wxGLCanvas(parent, (wxGLCanvas*) NULL, id, pos, size, style, name) { this->frame = NULL; this->data = dat; this->setup = stp; this->ww = 100; this->wh = 100; this->mx = 0; this->my = 0; this->m_sList = 0; this->m_sFixList = 0; this->m_sEntList = 0; this->m_sStList = 0; this->m_oList = 0; this->m_oFixList = 0; this->m_oEntList = 0; this->m_oStList = 0; this->m_lic = 0; this->m_sInit = true; this->m_sInitReset = true; this->m_isO = false; this->m_renderData = NULL; // fonts initialization FT_Library library = OGLFT::Library::instance(); FT_New_Memory_Face(library, lxFNT10x20_bdf, lxFNT10x20_bdf_size, 0, &this->m_ftFace1); FT_New_Memory_Face(library, lxFNT6x13_bdf, lxFNT6x13_bdf_size, 0, &this->m_ftFace2); FT_New_Memory_Face(library, lxFNTFreeSans_ttf, lxFNTFreeSans_ttf_size, 0, &this->m_ftFace3); this->m_fntTitleS = new OGLFT::Monochrome(this->m_ftFace1); this->m_fntNumericS = new OGLFT::Monochrome(this->m_ftFace2); this->m_fntTitleO = new OGLFT::Filled(this->m_ftFace3); this->m_fntNumericO = new OGLFT::Filled(this->m_ftFace3); this->m_OSC = NULL; this->m_TRC = NULL; this->m_sMoveLock = LXGLCML_NONE; this->m_sCameraAutoRotate = false; this->m_sCameraLockRotation = false; this->m_sCameraAutoRotateAngle = 1.0; this->m_maxTSizeO = 0; this->m_maxTSizeS = 0; this->m_initTextures = true; } bool lxGLCanvas::IsRenderingOff() { return (m_isO && (this->m_renderData->m_scaleMode != LXRENDER_FIT_SCREEN)); } lxGLCanvas::~lxGLCanvas() { this->OSCDestroy(); this->TRCDestroy(); delete this->m_fntTitleS; delete this->m_fntNumericS; delete this->m_fntTitleO; delete this->m_fntNumericO; FT_Done_Face(this->m_ftFace1); FT_Done_Face(this->m_ftFace2); FT_Done_Face(this->m_ftFace3); } void lxGLCanvas::OnEnterWindow( wxMouseEvent& WXUNUSED(event) ) { //this->SetFocus(); } void lxGLCanvas::RenderScreen() { glViewport(0, 0, (GLint) this->ww, (GLint) this->wh); if (this->m_sInit) this->InitializeS(); if (this->setup->cam_anaglyph) { glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); glClearColor(0.0, 0.0, 0.0, 1.0); glClear(GL_COLOR_BUFFER_BIT); this->setup->cam_anaglyph_left = false; this->SetCamera(); this->SetColorMask(); glCallList(this->m_sList); this->setup->cam_anaglyph_left = true; this->SetCamera(); this->SetColorMask(); glCallList(this->m_sList); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); } else { this->SetCamera(); glCallList(this->m_sList); } glPixelStorei(GL_UNPACK_ALIGNMENT, 1); this->RenderOffList(); if (this->setup->m_vis_indicators) this->RenderInds(); } void lxGLCanvas::OnPaint( wxPaintEvent& WXUNUSED(event)) { wxPaintDC dc(this); #ifndef __WXMOTIF__ if (!GetContext()) return; #endif if (!this->m_isO) { SetCurrent(); this->RenderScreen(); SwapBuffers(); } } void lxGLCanvas::ForceRefresh(bool updateTB) { this->Refresh(false); if (updateTB) this->frame->SetupUpdate(); } void lxGLCanvas::OnSize(wxSizeEvent& event) { // this is also necessary to update the context on some platforms wxGLCanvas::OnSize(event); // set GL viewport (not called by wxGLCanvas::OnSize on all platforms...) int w, h; this->GetClientSize(&w, &h); #ifndef __WXMOTIF__ if (GetContext()) #endif { this->setup->cam_width = double((GLfloat) w / (GLfloat) h); this->ww = w; this->wh = h; #ifdef __WXMSW__ this->ForceRefresh(); #endif } } void lxGLCanvas::OnEraseBackground(wxEraseEvent& WXUNUSED(event)) { // Do nothing, to avoid flashing. } void lxGLCanvas::InitializeS() { wxSizeEvent tmpe; OnSize(tmpe); this->OpenGLInit(); //this->SetFontColors(); this->UpdateRenderContents(); this->UpdateRenderList(); if (this->m_sInitReset) { this->setup->ResetCamera(); this->m_sInitReset = false; } this->m_sInit = false; } void lxGLCanvas::UpdateRenderList() { SetCurrent(); if (this->m_sList == 0) this->m_sList = glGenLists(1); glNewList(this->m_sList, GL_COMPILE); this->RenderAll(); glEndList(); } void lxGLCanvas::UpdateRenderContents() { this->setup->UpdateData(); if (this->data->m_textureSurface.image.data != NULL) { GLint newTSizeO, newTSizeS; newTSizeO = this->m_maxTSizeO; newTSizeS = this->m_maxTSizeS; if (this->m_isO) { glGetIntegerv(GL_MAX_TEXTURE_SIZE, &newTSizeO); if (newTSizeO > 4096) newTSizeO = 4096; //printf("MaxTSizeO: %d\n", newTSizeO); if (newTSizeS == 0) { newTSizeS = newTSizeO; } } else { glGetIntegerv(GL_MAX_TEXTURE_SIZE, &newTSizeS); if (newTSizeS > 4096) newTSizeS = 4096; //printf("MaxTSizeS: %d\n", newTSizeS); if (newTSizeO == 0) { newTSizeO = newTSizeS; } } if ((this->data->m_textureSurface.texS == NULL) || (this->m_maxTSizeO != newTSizeO) || (this->m_maxTSizeS != newTSizeS)) { this->m_maxTSizeS = newTSizeS; this->m_maxTSizeO = newTSizeO; this->SetCurrent(); this->data->m_textureSurface.CreateTexImages(this->m_maxTSizeS, this->m_maxTSizeO); if (this->m_isO) this->OSCMakeCurrent(); } if (this->m_initTextures) { glGenTextures(1, & this->m_idTexSurface); glGenTextures(1, & this->m_idTexStation); this->m_initTextures = false; } glBindTexture(GL_TEXTURE_2D, this->m_idTexSurface); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); if (this->m_isO) { glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, this->data->m_textureSurface.texSizeO, this->data->m_textureSurface.texSizeO, 0, GL_RGB, GL_UNSIGNED_BYTE, (this->setup->cam_anaglyph && this->setup->cam_anaglyph_bw) ? this->data->m_textureSurface.texObw : this->data->m_textureSurface.texO); } else { glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, this->data->m_textureSurface.texSizeS, this->data->m_textureSurface.texSizeS, 0, GL_RGB, GL_UNSIGNED_BYTE, (this->setup->cam_anaglyph && this->setup->cam_anaglyph_bw) ? this->data->m_textureSurface.texSbw : this->data->m_textureSurface.texS); } } this->shift = (this->setup->data_limits.max + this->setup->data_limits.min) / 2.0; } void lxGLCanvas::UpdateContents() { this->UpdateRenderContents(); this->UpdateRenderList(); this->ForceRefresh(); } void lxGLCanvas::OnMouseUp(wxMouseEvent& event) { switch (this->m_sMoveLock) { case LXGLCML_ZOOM: case LXGLCML_ROTATE: case LXGLCML_ZOOM2ROTATE: if (event.LeftUp()) this->m_sMoveLock = LXGLCML_NONE; break; case LXGLCML_PANX: case LXGLCML_PANY: case LXGLCML_PANX2Y: if ((this->mx == event.GetX()) && (this->my == event.GetY())) { this->PopupMenu(this->frame->m_toolMenu); } if (event.RightUp() || (event.LeftUp() && this->m_sMoveSingle)) this->m_sMoveLock = LXGLCML_NONE; break; case LXGLCML_TILT: if (event.MiddleUp() || (event.LeftUp() && this->m_sMoveSingle)) this->m_sMoveLock = LXGLCML_NONE; break; } if ((this->m_sMoveLock == LXGLCML_NONE) && (this->HasCapture())) { this->ReleaseMouse(); } } void lxGLCanvas::SetColorMask() { switch (this->setup->cam_anaglyph_glasses) { // red & cyan case 0: if (this->setup->cam_anaglyph_left) glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_TRUE); else glColorMask(GL_FALSE, GL_TRUE, GL_TRUE, GL_TRUE); break; // red & green case 1: if (this->setup->cam_anaglyph_left) glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_TRUE); else glColorMask(GL_FALSE, GL_TRUE, GL_FALSE, GL_TRUE); break; // red & blue case 2: if (this->setup->cam_anaglyph_left) glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_TRUE); else glColorMask(GL_FALSE, GL_FALSE, GL_TRUE, GL_TRUE); break; // yellow & blue case 3: if (this->setup->cam_anaglyph_left) glColorMask(GL_TRUE, GL_TRUE, GL_FALSE, GL_TRUE); else glColorMask(GL_FALSE, GL_FALSE, GL_TRUE, GL_TRUE); break; // cyan & red case 4: if (this->setup->cam_anaglyph_left) glColorMask(GL_FALSE, GL_TRUE, GL_TRUE, GL_TRUE); else glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_TRUE); break; // green & red case 5: if (this->setup->cam_anaglyph_left) glColorMask(GL_FALSE, GL_TRUE, GL_FALSE, GL_TRUE); else glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_TRUE); break; // blue & red case 6: if (this->setup->cam_anaglyph_left) glColorMask(GL_FALSE, GL_FALSE, GL_TRUE, GL_TRUE); else glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_TRUE); break; // yellow & blue default: if (this->setup->cam_anaglyph_left) glColorMask(GL_FALSE, GL_FALSE, GL_TRUE, GL_TRUE); else glColorMask(GL_TRUE, GL_TRUE, GL_FALSE, GL_TRUE); break; } } bool lxGLCanvas::CameraAutoRotate() { if (this->m_sCameraAutoRotate) { this->setup->RotateCameraF(this->m_sCameraAutoRotateAngle); this->ForceRefresh(); this->m_sCameraAutoRotateCounter++; if (this->m_sCameraAutoRotateSWatch.Time() > 1000) { ((wxStaticText *)(this->frame->m_viewpointSetupDlg->FindWindow(LXVSTP_RENSPEED)))->SetLabel( wxString::Format(_("Rendering at %.1f fps."), 1000.0 * double(this->m_sCameraAutoRotateCounter) / double(this->m_sCameraAutoRotateSWatch.Time()))); this->m_sCameraAutoRotateCounter = 0; this->m_sCameraAutoRotateSWatch.Start(); } return true; } else return false; } void lxGLCanvas::OnIdle(wxIdleEvent& WXUNUSED(event)) { // fix bug with opening file before everything is initialized if (!this->frame->m_fileToOpen.IsEmpty()) { wxString fto; fto = this->frame->m_fileToOpen; this->frame->m_fileToOpen = _T(""); this->frame->OpenFile(fto); return; } switch (this->m_sMoveLock) { case LXGLCML_PANX: case LXGLCML_PANX2Y: case LXGLCML_PANY: break; default: this->CameraAutoRotate(); break; } } void lxGLCanvas::OnMouseDouble(wxMouseEvent& event) { if (event.m_leftDown) this->frame->ToggleFullScreen(); } void lxGLCanvas::OnMouseDown(wxMouseEvent& event) { this->m_lic = 0; switch (this->m_sMoveLock) { case LXGLCML_ZOOM2ROTATE: if (event.RightDown()) { if (abs(this->mx - event.GetX()) >= abs(this->my - event.GetY())) { this->m_sMoveLock = LXGLCML_ROTATE; } else { this->m_sMoveLock = LXGLCML_ZOOM; } } break; case LXGLCML_PANX2Y: if (event.LeftDown()) { if (abs(this->mx - event.GetX()) >= abs(this->my - event.GetY())) { this->m_sMoveLock = LXGLCML_PANX; } else { this->m_sMoveLock = LXGLCML_PANY; } } break; case LXGLCML_NONE: this->mx = event.GetX(); this->my = event.GetY(); this->m_sCameraStartAutoRotateAngle = this->m_sCameraAutoRotateAngle; this->setup->StartCameraMovement(); this->m_sMoveSingle = false; if (event.LeftDown() && event.ShiftDown()) { this->m_sMoveLock = LXGLCML_PANX2Y; this->m_sMoveSingle = true; } else if (event.LeftDown() && event.ControlDown()) { this->m_sMoveLock = LXGLCML_TILT; this->m_sMoveSingle = true; } else if (event.LeftDown()) { this->m_sMoveLock = LXGLCML_ZOOM2ROTATE; } else if (event.RightDown()) { this->m_sMoveLock = LXGLCML_PANX2Y; } else if (event.MiddleDown()) { this->m_sMoveLock = LXGLCML_TILT; } break; } if (this->m_sMoveLock != LXGLCML_NONE) { if (!this->HasCapture()) { this->CaptureMouse(); } } } void lxGLCanvas::OnMouseWheel(wxMouseEvent& event) { if (this->m_sMoveLock == LXGLCML_NONE) { this->setup->StartCameraMovement(); this->setup->TiltCamera(-1.0 * double(event.GetWheelRotation()) / double(event.GetWheelDelta())); this->ForceRefresh(); } } void lxGLCanvas::OnMouseMove(wxMouseEvent& event) { double f, ff; switch (this->m_sMoveLock) { case LXGLCML_ZOOM: case LXGLCML_ROTATE: case LXGLCML_ZOOM2ROTATE: if ((this->m_sMoveLock == LXGLCML_ZOOM) || (this->m_sMoveLock == LXGLCML_ZOOM2ROTATE)) f = pow(1.4142135623730950488016887242097, double(this->my - event.GetY()) / 20.0); else f = 1.0; if ((!this->m_sCameraLockRotation) && ((this->m_sMoveLock == LXGLCML_ROTATE) || (this->m_sMoveLock == LXGLCML_ZOOM2ROTATE))) { ff = double(event.GetX() - this->mx) / 2.0; } else { ff = 0.0; } this->setup->ZoomCamera(f); if (this->m_sCameraAutoRotate) { this->m_sCameraAutoRotateAngle = this->m_sCameraStartAutoRotateAngle + ff / 50.0; #ifdef LXWIN32 if (!this->CameraAutoRotate()) this->ForceRefresh(); #endif } else { this->setup->RotateCamera(ff); this->ForceRefresh(); } break; case LXGLCML_PANX: case LXGLCML_PANY: case LXGLCML_PANX2Y: if ((this->m_sMoveLock == LXGLCML_PANX) || (this->m_sMoveLock == LXGLCML_PANX2Y)) f = double(event.GetX() - this->mx) / double(this->ww); else f = 0.0; if ((this->m_sMoveLock == LXGLCML_PANY) || (this->m_sMoveLock == LXGLCML_PANX2Y)) ff = double(event.GetY() - this->my) / double(this->wh); else ff = 0.0; this->setup->PanCamera(f, ff); this->ForceRefresh(); break; case LXGLCML_TILT: this->setup->TiltCamera(double(event.GetY() - this->my) / 2.0); if (this->m_sCameraAutoRotate) { #ifdef LXWIN32 if (!this->CameraAutoRotate()) this->ForceRefresh(); #else ; #endif } else { this->ForceRefresh(); } break; } if (this->m_sMoveLock != LXGLCML_NONE) { if (!this->HasCapture()) { this->CaptureMouse(); } } } void lxGLCanvas::OnKeyPress(wxKeyEvent& event) { switch (event.GetKeyCode()) { case WXK_ESCAPE: if (this->frame->IsFullScreen()) this->frame->ToggleFullScreen(); break; case WXK_LEFT: this->setup->StartCameraMovement(); if (event.ShiftDown()) this->setup->PanCamera(-0.02, 0.0); else this->setup->RotateCamera(-1.0); this->ForceRefresh(); break; case WXK_RIGHT: this->setup->StartCameraMovement(); if (event.ShiftDown()) this->setup->PanCamera(0.02, 0.0); else this->setup->RotateCamera(1.0); this->ForceRefresh(); break; case WXK_UP: this->setup->StartCameraMovement(); if (event.ShiftDown()) this->setup->PanCamera(0.0, -0.02); else if (event.ControlDown()) this->setup->ZoomCamera(1.02); else this->setup->TiltCamera(-1.0); this->ForceRefresh(); break; case WXK_DOWN: this->setup->StartCameraMovement(); if (event.ShiftDown()) this->setup->PanCamera(0.0, 0.02); else if (event.ControlDown()) this->setup->ZoomCamera(0.98); else this->setup->TiltCamera(1.0); this->ForceRefresh(); break; default: event.Skip(); } } #define lxFNTSH (this->IsRenderingOff() ? (this->m_fntNumericO->pointSize() * this->m_fntNumericO->resolution() / 72.0) : 13.0) #define lxFNTSW (this->IsRenderingOff() ? (0.55 * lxFNTSH) : 6.0) #define lxFNTLH (this->IsRenderingOff() ? (this->m_fntTitleO->pointSize() * this->m_fntTitleO->resolution() / 72.0) : 20.0) #define lxFNTLW (this->IsRenderingOff() ? (0.55 * lxFNTLH) : 10.0) OGLFT::Face * lxGLCanvas::GetFontNumeric() { if (this->IsRenderingOff()) return this->m_fntNumericO; else return this->m_fntNumericS; } OGLFT::Face * lxGLCanvas::GetFontTitle() { if (this->IsRenderingOff()) return this->m_fntTitleO; else return this->m_fntTitleS; } void lxGLCanvas::SetCamera() { double minclip, maxclip, vclip, hclip; lxVecLimits ml = this->setup->data_limits.Rotate(this->setup->cam_dir, this->setup->cam_tilt, this->setup->cam_center); //printf("\n\n\nCAMERA\n"); //printf(" dir: %12.2f\n", this->setup->cam_dir); //printf(" tilt: %12.2f\n", this->setup->cam_tilt); //printf(" ext x: %12.2f%12.2f\n", ml.min.x, ml.max.x); //printf(" y: %12.2f%12.2f\n", ml.min.y, ml.max.y); //printf(" z: %12.2f%12.2f\n", ml.min.z, ml.max.z); //printf("center: %12.2f%12.2f%12.2f\n", lxVecXYZ(this->setup->cam_center)); //printf(" pos: %12.2f%12.2f%12.2f\n", lxVecXYZ(this->setup->cam_pos)); //printf(" dist: %12.2f\n", this->setup->cam_dist); minclip = this->setup->cam_dist + ml.min.y; if (minclip < 0.0) minclip = 1.0; minclip = 0.9 * minclip; maxclip = this->setup->cam_dist + ml.max.y; maxclip = 1.1 * maxclip; if (maxclip < minclip) maxclip = minclip + 1.0; if (minclip < (maxclip / 100.0)) minclip = maxclip / 100.0; glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (this->setup->cam_persp) { if (!this->m_isO) { gluPerspective(this->setup->cam_lens_vfov, this->setup->cam_width, minclip, maxclip); } else { if (this->TRCGetContext()) { trPerspective(this->TRCGetContext(), this->setup->cam_lens_vfov, this->setup->cam_width, minclip, maxclip); } else { gluPerspective(this->setup->cam_lens_vfov, this->setup->cam_width, minclip, maxclip); } } } else { vclip = this->setup->cam_dist * this->setup->cam_lens_vfovr; hclip = vclip * this->setup->cam_width; //printf("x clip: %12.2f%12.2f\n", -hclip, hclip); //printf("y clip: %12.2f%12.2f\n", -vclip, vclip); if (!this->m_isO) { glOrtho(-hclip, hclip, -vclip, vclip, minclip, maxclip); } else { if (this->TRCGetContext() != NULL) { trOrtho(this->TRCGetContext(), -hclip, hclip, -vclip, vclip, minclip, maxclip); } else { glOrtho(-hclip, hclip, -vclip, vclip, minclip, maxclip); } } } //printf("z clip: %12.2f%12.2f\n", minclip, maxclip); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); lxVec up = lxVec( sin(this->setup->cam_tilt / 180.0 * lxPI) * sin(this->setup->cam_dir / 180.0 * lxPI), sin(this->setup->cam_tilt / 180.0 * lxPI) * cos(this->setup->cam_dir / 180.0 * lxPI), cos(this->setup->cam_tilt / 180.0 * lxPI) ); //printf("LOOK FROM: %12.2f%12.2f%12.f\n", lxShiftVecXYZ(this->setup->cam_pos,this->shift)); //printf(" TO: %12.2f%12.2f%12.f\n", lxShiftVecXYZ(this->setup->cam_center,this->shift)); //printf(" UP: %12.2f%12.2f%12.f\n", lxVecXYZ(up)); if (this->setup->cam_anaglyph) { lxVec aRPosShift = (this->setup->cam_anaglyph_left ? -1.0 : 1.0) * (this->setup->cam_anaglyph_eyesep * this->setup->cam_dist) * lxVec( -cos(this->setup->cam_dir / 180.0 * lxPI), sin(this->setup->cam_dir / 180.0 * lxPI), 0 ); gluLookAt(lxShiftVecXYZ(this->setup->cam_pos,this->shift + aRPosShift), lxShiftVecXYZ(this->setup->cam_center, this->shift), lxVecXYZ(up)); } else { gluLookAt(lxShiftVecXYZ(this->setup->cam_pos,this->shift), lxShiftVecXYZ(this->setup->cam_center,this->shift), lxVecXYZ(up)); } // Save view coordinates glGetDoublev(GL_MODELVIEW_MATRIX, m_camera_modelview); glGetDoublev(GL_PROJECTION_MATRIX, m_camera_projection); glGetIntegerv(GL_VIEWPORT, m_camera_viewport); } static const GLfloat mat0[] = { 0.0, 0.0, 0.0, 1.0}; static const GLfloat mat1[] = { 1.0, 1.0, 1.0, 1.0}; static const GLfloat mat2[] = { 0.5}; static const GLfloat mat3[] = { 1.0, 1.0, 1.0, 0.5}; void lxGLCanvas::RenderScrapWalls() { GLfloat clr[4]; clr[0] = 1.0; clr[1] = 1.0; clr[2] = 1.0; clr[3] = this->setup->m_walls_opacity; glColor4f(1.0,1.0,1.0,this->setup->m_walls_opacity); glShadeModel(GL_SMOOTH); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glEnable(GL_LIGHTING); bool useTransparency; useTransparency = false; if (this->setup->m_walls_transparency && (clr[3] < 1.0)) { lxVec viewDir; viewDir = this->setup->cam_center - this->setup->cam_pos; viewDir.Normalize(); this->data->allWallsSorted->SetVector(viewDir.x, viewDir.y, viewDir.z); glDepthMask(GL_FALSE); glEnable(GL_BLEND); useTransparency = true; } else { glDepthMask(GL_TRUE); glDisable(GL_BLEND); } glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE); glEnable(GL_COLOR_MATERIAL); glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, mat0); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat0); glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mat2); glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); glColor4fv(clr); vtkIdType * cPts, nPts, xP; double * nmv, * ptc, nmvv[3]; this->data->scrapWallsNormals->Update(); vtkPolyData * pdt; if (useTransparency) { pdt = this->data->allWallsSorted->GetOutput(); } else { pdt = this->data->allWallsStripped->GetOutput(); } vtkCellArray * tgs = pdt->GetPolys(); vtkCellArray * tss = pdt->GetStrips(); vtkDataArray * nms = pdt->GetPointData()->GetNormals(); #define draw3vert(N) \ ptc = pdt->GetPoint(cPts[N]); \ nmv = nms->GetTuple(cPts[N]); \ glNormal3f(nmv[0],nmv[1],nmv[2]); \ if ((!this->setup->cam_anaglyph) && (this->setup->m_colormd != lxSETUP_COLORMD_DEFAULT) && (this->setup->m_colormd_app_walls)) { \ this->data->luTable->GetColor(ptc[2], nmvv); \ clr[0] = nmvv[0]; clr[1] = nmvv[1]; clr[2] = nmvv[2]; \ glColor4fv(clr); \ } \ glVertex3f(lxShiftVecX3(ptc, this->shift)); tgs->InitTraversal(); glBegin(GL_TRIANGLES); while (tgs->GetNextCell(nPts, cPts) != 0) { if (nPts == 3) { draw3vert(0); draw3vert(1); draw3vert(2); } } glEnd(); tss->InitTraversal(); while (tss->GetNextCell(nPts, cPts) != 0) { glBegin(GL_TRIANGLE_STRIP); for(xP = 0; xP < nPts; xP++) { draw3vert(xP); } glEnd(); } glDisable(GL_COLOR_MATERIAL); } void lxGLCanvas::RenderSurface() { GLfloat clr[4]; clr[0] = 1.0; clr[1] = 1.0; clr[2] = 1.0; clr[3] = this->setup->m_srf_opacity; bool srf_tex = (this->data->m_textureSurface.image.data != NULL) && (this->setup->m_srf_texture); glShadeModel(GL_SMOOTH); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glColor4f(1.0,1.0,1.0,this->setup->m_srf_opacity); if (this->setup->m_srf_transparency && (clr[3] < 1.0)) { lxVec viewDir; viewDir = this->setup->cam_center - this->setup->cam_pos; viewDir.Normalize(); this->data->surfaceSorted->SetVector(viewDir.x, viewDir.y, viewDir.z); glDepthMask(GL_FALSE); glEnable(GL_BLEND); } else { glDepthMask(GL_TRUE); glDisable(GL_BLEND); } glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, mat0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, clr); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat0); glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mat2); if (srf_tex) { glEnable(GL_TEXTURE_2D); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glBindTexture(GL_TEXTURE_2D, this->m_idTexSurface); } else { glDisable(GL_TEXTURE_2D); } if (this->setup->m_srf_lighting) glEnable(GL_LIGHTING); else glDisable(GL_LIGHTING); vtkIdType * cPts, nPts; double * nmv, * ptc; this->data->surfaceSorted->Update(); vtkPolyData * pdt = this->data->surfaceSorted->GetOutput(); vtkCellArray * tgs = pdt->GetPolys(); vtkDataArray * nms = pdt->GetPointData()->GetNormals(); tgs->InitTraversal(); glBegin(GL_TRIANGLES); while (tgs->GetNextCell(nPts, cPts) != 0) { if (nPts == 3) { // nmv = this->data->luTable->GetColor(ptc[2]); // clr[0] = nmv[0]; clr[1] = nmv[1]; clr[2] = nmv[2]; // glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, clr); #undef draw3vert #define draw3vert(N) \ ptc = pdt->GetPoint(cPts[N]); \ nmv = nms->GetTuple(cPts[N]); \ glNormal3f(nmv[0],nmv[1],nmv[2]); \ if (srf_tex) \ glTexCoord2f(\ (ptc[0] * this->data->m_textureSurface.xx + ptc[1] * this->data->m_textureSurface.xy + this->data->m_textureSurface.dx) / this->data->m_textureSurface.iw, \ 1.0 - (ptc[0] * this->data->m_textureSurface.yx + ptc[1] * this->data->m_textureSurface.yy + this->data->m_textureSurface.dy) / this->data->m_textureSurface.ih); \ glVertex3f(lxShiftVecX3(ptc, this->shift)); \ draw3vert(0); draw3vert(1); draw3vert(2); } } glEnd(); glDisable(GL_TEXTURE_2D); } void lxGLCanvas::RenderCenterline() { if (this->IsRenderingOff()) { glLineWidth(this->m_renderData->m_imgResolution / 96.0); } else { glLineWidth(1.0); } double clrs[3], clrc[3]; if (this->setup->cam_anaglyph) { if ((this->m_renderData != NULL) && (this->m_renderData->m_scaleMode != LXRENDER_FIT_SCREEN) && this->m_renderData->m_imgWhiteBg) { clrc[0] = 0.0;clrc[1] = 0.0;clrc[2] = 0.0; } else { clrc[0] = 1.0;clrc[1] = 1.0;clrc[2] = 1.0; } } else { clrc[0] = 0.0;clrc[1] = 1.0;clrc[2] = 1.0; } clrs[0] = 0.5; clrs[1] = 0.5; clrs[2] = 0.5; bool prevsurface = false; lxDataShot * psh; lxVec * stv; double clr[3]; unsigned long id, nid; nid = this->data->shots.size(); glColor3f(clrc[0],clrc[1],clrc[2]); glBegin(GL_LINES); for(id = 0; id < nid; id++) { psh = &(this->data->shots[id]); if (psh->invisible) continue; if (psh->splay && (!this->setup->m_vis_centerline_splay)) continue; if (psh->duplicate && (!this->setup->m_vis_centerline_duplicate)) continue; #define drawLvert(N) \ stv = &(this->data->stations[N].pos); \ if ((!psh->surface) && (!this->setup->cam_anaglyph) && (this->setup->m_colormd != lxSETUP_COLORMD_DEFAULT) && (this->setup->m_colormd_app_centerline)) { \ this->data->luTable->GetColor(stv->z, clr); \ glColor3f(clr[0],clr[1],clr[2]); \ } \ glVertex3f(lxShiftVecPXYZ(stv, this->shift)); if ((psh->surface && this->setup->m_vis_centerline_surface) || ((!psh->surface) && this->setup->m_vis_centerline_cave)) { if (prevsurface != psh->surface) { if (psh->surface) { glColor3f(clrs[0],clrs[1],clrs[2]); } else { glColor3f(clrc[0],clrc[1],clrc[2]); } } drawLvert(psh->from); drawLvert(psh->to); } prevsurface = psh->surface; } glEnd(); } void lxGLCanvas::ProjectPoint(double src_x, double src_y, double src_z, GLdouble * x, GLdouble * y, GLdouble * z) { gluProject(src_x, src_y, src_z, m_camera_modelview, m_camera_projection, m_camera_viewport, x, y, z); } void lxGLCanvas::ProjectStations() { unsigned long id, nid; nid = this->data->stations.size(); lxDataStation * st; for(id = 0; id < nid; id++) { st = &(this->data->stations[id]); this->ProjectPoint(lxShiftVecPXYZ(&(st->pos), this->shift), &(st->m_screen_x), &(st->m_screen_y), &(st->m_screen_z)); } } void lxGLCanvas::RenderOffList() { if (!(this->setup->m_vis_centerline_fix || this->setup->m_vis_centerline_station || this->setup->m_vis_centerline_entrance)) return; this->ProjectStations(); this->SetIndicatorsTransform(); // Render stations unsigned long id, nid; nid = this->data->stations.size(); lxDataStation * st; GLdouble x, y, z; GLuint fxList, enList, stList; glShadeModel(GL_FLAT); glDepthMask(GL_TRUE); glDisable(GL_LIGHTING); glEnable(GL_DEPTH_TEST); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); if (this->IsRenderingOff()) { if (this->m_oStList == 0) { this->m_oStList = glGenLists(3); this->m_oEntList = this->m_oStList + 1; this->m_oFixList = this->m_oStList + 2; } stList = this->m_oStList; enList = this->m_oEntList; fxList = this->m_oFixList; } else { if (this->m_sStList == 0) { this->m_sStList = glGenLists(3); this->m_sEntList = this->m_sStList + 1; this->m_sFixList = this->m_sStList + 2; } stList = this->m_sStList; enList = this->m_sEntList; fxList = this->m_sFixList; } glNewList(fxList, GL_COMPILE); glColor3f(0.2,0.0,0.0); glBegin(GL_TRIANGLE_FAN); glVertex3d( 0.0,-2.4,0.0); glVertex3d(+2.4, 0.0,0.0); glVertex3d( 0.0,+2.4,0.0); glVertex3d(-2.4, 0.0,0.0); glEnd(); glColor3f(1.0,0.0,0.0); glBegin(GL_LINE_STRIP); glVertex3d( 0.0,-2.4,0.0); glVertex3d(+2.4, 0.0,0.0); glVertex3d( 0.0,+2.4,0.0); glVertex3d(-2.4, 0.0,0.0); glVertex3d( 0.0,-2.4,0.0); glEnd(); glBegin(GL_LINES); glVertex3d( 0.0,-2.4,0.0); glVertex3d( 0.0,-3.4,0.0); glVertex3d(+2.4, 0.0,0.0); glVertex3d(+3.4, 0.0,0.0); glVertex3d( 0.0,+2.4,0.0); glVertex3d( 0.0,+3.4,0.0); glVertex3d(-2.4, 0.0,0.0); glVertex3d(-3.4, 0.0,0.0); glEnd(); glEndList(); glNewList(enList, GL_COMPILE); glColor3f(0.0,0.0,0.0); //glColor3f(0.1,0.3,0.1); glBegin(GL_TRIANGLE_FAN); glVertex3d(-4.4,-4.4,0.0); glVertex3d(-4.4, 2.4,0.0); glVertex3d(-2.4, 4.4,0.0); glVertex3d( 2.4, 4.4,0.0); glVertex3d( 4.4, 2.4,0.0); glVertex3d( 4.4,-4.4,0.0); glEnd(); glColor3f(0.3,1.0,0.3); glBegin(GL_LINE_STRIP); glVertex3d(-3.4,-3.4,0.0); glVertex3d(-0.4,-3.4,0.0); glVertex3d(-3.4,-0.4,0.0); glVertex3d(-3.4, 0.4,0.0); glVertex3d(-0.4, 3.4,0.0); glVertex3d( 0.4, 3.4,0.0); glVertex3d( 3.4, 0.4,0.0); glVertex3d( 3.4,-0.4,0.0); glVertex3d( 0.4,-3.4,0.0); glVertex3d( 3.4,-3.4,0.0); glEnd(); glEndList(); glNewList(stList, GL_COMPILE); glColor3f(1.0,1.0,0.0); glBegin(GL_LINES); glVertex3d(-2.4, 0,0); glVertex3d( 2.4, 0,0); glVertex3d( 0,-2.4,0); glVertex3d( 0,+2.4,0); glEnd(); glEndList(); if (this->setup->m_vis_centerline_station) { for(id = 0; id < nid; id++) { st = &(this->data->stations[id]); if (st->m_screen_z < 0.0) continue; x = (GLdouble)long(st->m_screen_x) + 0.5; y = (GLdouble)long(st->m_screen_y) + 0.5; z = - st->m_screen_z; if (st->m_temporary && (!this->setup->m_vis_centerline_splay)) continue; if (st->m_surface && (!this->setup->m_vis_centerline_surface)) continue; if ((!st->m_surface) && (!this->setup->m_vis_centerline_cave)) continue; glLoadIdentity(); glTranslated(x, y, z); glCallList(stList); } } glDisable(GL_DEPTH_TEST); if (this->setup->m_vis_centerline_fix) { for(id = 0; id < nid; id++) { st = &(this->data->stations[id]); if (st->m_fix) { if (st->m_screen_z < 0.0) continue; x = (GLdouble)long(st->m_screen_x) + 0.5; y = (GLdouble)long(st->m_screen_y) + 0.5; z = - st->m_screen_z; glLoadIdentity(); glTranslated(x, y, z); glCallList(fxList); } } } if (this->setup->m_vis_centerline_entrance) { for(id = 0; id < nid; id++) { st = &(this->data->stations[id]); if (st->m_entrance) { if (st->m_screen_z < 0.0) continue; x = (GLdouble)long(st->m_screen_x) + 0.5; y = (GLdouble)long(st->m_screen_y) + 0.5; z = - st->m_screen_z; glLoadIdentity(); glTranslated(x, y, z); glCallList(enList); } } } glLoadIdentity(); std::string cmnt; const char * csurvey; char strCBar[10]; bool show_label; this->GetFontNumeric()->setForegroundColor(1.0, 1.0, 0.5, 1.0); if (this->setup->m_stlabel_name || this->setup->m_stlabel_comment || this->setup->m_stlabel_altitude || this->setup->m_stlabel_survey) { for(id = 0; id < nid; id++) { show_label = false; st = &(this->data->stations[id]); if (st->m_screen_z < 0.0) continue; if (st->m_temporary) continue; if (this->setup->m_vis_centerline_entrance && st->m_entrance) show_label = true; if (this->setup->m_vis_centerline_fix && st->m_fix) show_label = true; if (st->m_surface && this->setup->m_vis_centerline_surface && this->setup->m_vis_centerline_station) show_label = true; if ((!st->m_surface) && this->setup->m_vis_centerline_cave && this->setup->m_vis_centerline_station) show_label = true; if (!show_label) continue; // name cmnt = ""; if (this->setup->m_stlabel_name && (strlen(st->m_name) > 0)) cmnt = st->m_name; // survey if (this->setup->m_stlabel_survey) { csurvey = this->data->surveys[st->m_survey_idx].m_full_name.c_str(); if (strlen(csurvey) > 0) { if (cmnt.length() > 0) cmnt += "@"; cmnt += csurvey; } } // altitude if (this->setup->m_stlabel_altitude) { if (this->frame->m_iniUnits == 1) { sprintf(&(strCBar[0]), "%.0f ft", st->pos.z / 0.3048); } else { sprintf(&(strCBar[0]), "%.0f m", st->pos.z); } if (cmnt.length() > 0) cmnt += ":"; cmnt += strCBar; } // comment if (this->setup->m_stlabel_comment && (strlen(st->m_comment) > 0)) { if (cmnt.length() > 0) cmnt += ":"; cmnt += st->m_comment; } x = (GLdouble)long(st->m_screen_x+0.5); y = (GLdouble)long(st->m_screen_y+0.5); z = - st->m_screen_z; if (cmnt.length() > 0) { this->GetFontNumeric()->draw(x + 5, y - 0.25 * lxFNTSH, z, wxString(wxConvUTF8.cMB2WX(cmnt.c_str()))); } } } } void lxGLCanvas::GeomOutline() { glBegin(GL_LINE_STRIP); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(0), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(4), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(0), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(1), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(5), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(1), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(2), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(6), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(2), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(3), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(7), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(3), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(0), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(4), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(5), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(6), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(7), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(4), this->shift)); glEnd(); } void lxGLCanvas::RenderAll() { if (this->m_isO) { if ((this->m_renderData != NULL) && (this->m_renderData->m_scaleMode != LXRENDER_FIT_SCREEN) && this->m_renderData->m_imgWhiteBg) glClearColor(1.0, 1.0, 1.0, 0.0); else glClearColor(0.0, 0.0, 0.0, 0.0); } else { glClearColor(0.0, 0.0, 0.0, 0.0); } glClearDepth(1.0); if (this->setup->cam_anaglyph) glClear(GL_DEPTH_BUFFER_BIT); else glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // vyrendruje outline glDisable(GL_LIGHTING); glShadeModel(GL_FLAT); glDepthMask(GL_TRUE); if (this->m_isO) { glLineWidth(this->m_renderData->m_scaleMode == LXRENDER_FIT_SCREEN ? 1.0 : this->m_renderData->m_imgResolution / 96.0); } else { glLineWidth(1.0); } glDisable(GL_BLEND); if (this->setup->cam_anaglyph) glColor3f(0.7, 0.7, 0.7); else glColor3f(1.0, 0.0, 0.0); if (this->setup->m_vis_bbox) this->GeomOutline(); glShadeModel(GL_SMOOTH); if (this->setup->m_vis_centerline) this->RenderCenterline(); glEnable(GL_CULL_FACE); glCullFace(GL_BACK); if (this->setup->m_vis_walls) this->RenderScrapWalls(); glDisable(GL_CULL_FACE); if (this->setup->m_vis_surface) this->RenderSurface(); glDepthMask(GL_TRUE); glDisable(GL_BLEND); glShadeModel(GL_FLAT); } void lxGLCanvas::OpenGLInit() { glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } void lxGLCanvas::SetIndicatorsTransform() { if (this->m_isO) { this->m_indRes = this->m_renderData->m_imgResolution / 25.4; // pixels per mm this->m_indLWidth = 0.5; // line width mm if ((this->m_indLWidth * this->m_indRes) < 1.0) { this->m_indLWidth = 1.0 / this->m_indRes; // line width mm } } else { this->m_indRes = 3.7795276; // pixels per mm this->m_indLWidth = 1.0 / this->m_indRes; // line width mm glLineWidth(1.0); } glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (this->m_isO) { trOrtho(this->TRCGetContext(), 0.0, this->m_renderData->m_imgPixW, 0.0, this->m_renderData->m_imgPixH, -1.0, 1.0); this->TRCBeginTile(); } else { glOrtho(0.0, this->ww, 0.0, this->wh, 0.0, 1.0); //gluOrtho2D(0.0, this->ww, 0.0, this->wh); } glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void lxGLCanvas::RenderInds() { this->SetFontColors(); if (this->m_isO) { this->m_indRes = this->m_renderData->m_imgResolution / 25.4; // pixels per mm this->m_indLWidth = 0.5; // line width mm if ((this->m_indLWidth * this->m_indRes) < 1.0) { this->m_indLWidth = 1.0 / this->m_indRes; // line width mm } } else { this->m_indRes = 3.7795276; // pixels per mm this->m_indLWidth = 1.0 / this->m_indRes; // line width mm glLineWidth(1.0); } glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (this->m_isO) { trOrtho(this->TRCGetContext(), 0.0, this->m_renderData->m_imgPixW, 0.0, this->m_renderData->m_imgPixH, -1.0, 1.0); this->TRCBeginTile(); } else { gluOrtho2D(0.0, this->ww, 0.0, this->wh); } glDepthMask(GL_FALSE); glDisable(GL_DEPTH_TEST); glDisable(GL_LIGHTING); glShadeModel(GL_FLAT); glMatrixMode(GL_MODELVIEW); glEnable(GL_BLEND); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glLoadIdentity(); glTranslatef(this->m_indRes * 9.0, this->m_indRes * 18.0, 0.0); this->RenderICompass(5.0); glLoadIdentity(); glTranslatef(this->m_indRes * 28.0, this->m_indRes * 13.0, 0.0); this->RenderIClino(8.0); glLoadIdentity(); glTranslatef(this->m_indRes * 34.0, this->m_indRes * 9.0, 0.0); this->RenderIScalebar(50.0); if ((!this->setup->cam_anaglyph) && (this->setup->m_colormd != lxSETUP_COLORMD_DEFAULT)) { glLoadIdentity(); glTranslatef(this->m_indRes * 4.0, this->m_indRes * 29.0, 0.0); this->RenderIDepthbar(40.0); } glLoadIdentity(); this->GetFontTitle()->draw(this->m_indRes * 3.0, this->m_indRes * 3.0, this->data->title); // if (this->m_isO) // this->m_fntTitleO->draw(this->m_indRes * 3.0, this->m_indRes * 3.0, this->data->title); // else // this->m_fntTitleS->draw(this->m_indRes * 3.0, this->m_indRes * 3.0, this->data->title); glDepthMask(GL_TRUE); glEnable(GL_DEPTH_TEST); glDisable(GL_BLEND); } #define clrTemplate(AW,AB,NL) {\ if (this->m_isO) {\ if (this->setup->cam_anaglyph) {\ if (this->m_renderData->m_imgWhiteBg)\ glColor4f AW; \ else \ glColor4f AB; \ } else \ glColor4f NL; \ } else { \ if (this->setup->cam_anaglyph) \ glColor4f AB; \ else \ glColor4f NL; \ } \ } #define clrOutCntr() clrTemplate((0.0, 0.0, 0.0, 1.0),(1.0, 1.0, 1.0, 1.0),(0.1, 0.1, 1.0, 1.0)) #define clrOutFill() clrTemplate((0.5, 0.5, 0.5, 0.5),(0.5, 0.5, 0.5, 0.5),(0.0, 0.0, 1.0, 0.5)) #define clrIndCntr() clrTemplate((0.0, 0.0, 0.0, 1.0),(1.0, 1.0, 1.0, 1.0),(1.0, 0.0, 0.0, 1.0)) #define clrIndFill() clrTemplate((0.5, 0.5, 0.5, 1.0),(0.5, 0.5, 0.5, 1.0),(1.0, 0.8, 0.0, 1.0)) #define v2r(x,y) glVertex2f(this->m_indRes * (x), this->m_indRes * (y)) #define hlw (this->m_indLWidth / 2.0) void lxGLCanvas::RenderICompass(double size) { int t; glPushMatrix(); glRotatef(this->setup->cam_dir, 0.0, 0.0, 1.0); clrOutFill(); // draw circle aroung glBegin(GL_TRIANGLE_FAN); for(t = 0; t < 360; t++) { v2r( (size - hlw) * sin(double(t)/180.0*lxPI), (size - hlw) * cos(double(t)/180.0*lxPI)); } glEnd(); clrOutCntr(); if (this->m_isO) { glBegin(GL_TRIANGLE_STRIP); for(t = 0; t <= 360; t++) { v2r( (size - hlw) * sin(double(t)/180.0*lxPI), (size - hlw) * cos(double(t)/180.0*lxPI)); v2r( (size + hlw) * sin(double(t)/180.0*lxPI), (size + hlw) * cos(double(t)/180.0*lxPI)); } glEnd(); } else { glBegin(GL_LINE_STRIP); for(t = 0; t <= 360; t++) { v2r( (size - hlw) * sin(double(t)/180.0*lxPI), (size - hlw) * cos(double(t)/180.0*lxPI)); } glEnd(); } this->RenderILine(0.0, -size - 0.75, 0.0, -size + 1.0); this->RenderILine(-size - 0.75, 0.0, -size + 1.0, 0.0); this->RenderILine( size - 1.0, 0.0, size + 0.75, 0.0); lxVec a1, a2, a3, a4; a1 = lxVec(0.0, size + 1.0, 0.0); a2 = a1.Rotated(150.0, 0.0); a3 = a1.Rotated(-150.0, 0.0); a4 = lxVec(0.0, -0.333 * size, 0.0); clrIndFill(); glBegin(GL_TRIANGLE_STRIP); v2r(a2.x, a2.y); v2r(a1.x, a1.y); v2r(a4.x, a4.y); v2r(a3.x, a3.y); glEnd(); clrIndCntr(); this->RenderILine(a1.x, a1.y, a2.x, a2.y); this->RenderILine(a1.x, a1.y, a3.x, a3.y); this->RenderILine(a4.x, a4.y, a2.x, a2.y); this->RenderILine(a4.x, a4.y, a3.x, a3.y); glPopMatrix(); this->GetFontNumeric()->draw((-2.0) * lxFNTSW, this->m_indRes * (-size - 1.0) - lxFNTSH, wxString::Format(_("%03d\260"), int(this->setup->cam_dir))); } void lxGLCanvas::RenderIClino(double size) { #define awn 0.75 #define awt 1.5 #define aae 0.33 int t; double tilt = this->setup->cam_tilt; bool neg = tilt < 0.0; glPushMatrix(); if (neg) glTranslatef(0.0, this->m_indRes * size, 0.0); clrOutFill(); if (fabs(tilt) > 0.0) { glBegin(GL_TRIANGLE_FAN); v2r(0.0, 0.0); for(t = 0; t <= 20; t++) { v2r( (-size) * cos(double(t) * (tilt / 20.0) / 180.0 * lxPI), (size) * sin(double(t) * (tilt / 20.0) / 180.0 * lxPI)); } glEnd(); } clrOutCntr(); if (this->m_isO) { glBegin(GL_TRIANGLE_STRIP); for(t = 0; t <= 90; t += 5) { v2r( (-1.0) * (size - hlw) * cos(double(t)/180.0*lxPI), (neg ? -1.0 : 1.0) * (size - hlw) * sin(double(t)/180.0*lxPI)); v2r( (-1.0) * (size + hlw) * cos(double(t)/180.0*lxPI), (neg ? -1.0 : 1.0) * (size + hlw) * sin(double(t)/180.0*lxPI)); } glEnd(); } else { glBegin(GL_LINE_STRIP); for(t = 0; t <= 90; t += 5) { v2r( (-1.0) * (size) * cos(double(t)/180.0*lxPI), (neg ? -1.0 : 1.0) * (size) * sin(double(t)/180.0*lxPI)); } glEnd(); } this->RenderILine(-size - 1.0, 0.0, 1.0, 0.0); this->RenderILine(0.0, (neg ? 1.0 : -1.0), 0.0, (neg ? -size - 1.0 : size + 1.0)); this->RenderILine(-size, (neg ? 1.0 : -1.0), -size, 0.0); this->RenderILine(0.0, (neg ? -size : size), 1.0, (neg ? -size : size)); glPushMatrix(); glRotatef(-tilt, 0.0, 0.0, 1.0); clrIndFill(); glBegin(GL_QUADS); v2r(-size - 1.0, -awn); v2r(-size - 1.0, awn); v2r(-aae * size, awn); v2r(-aae * size, -awn); glEnd(); glBegin(GL_TRIANGLES); v2r(-aae * size, awt); v2r(-aae * size, -awt); v2r(0.0, 0.0); glEnd(); clrIndCntr(); this->RenderILine(-size - 1.0, -awn, -size - 1.0, awn); this->RenderILine(-size - 1.0, -awn, -aae * size, -awn); this->RenderILine(-size - 1.0, awn, -aae * size, awn); this->RenderILine(-aae * size, -awn, -aae * size, -awt); this->RenderILine(-aae * size, awn, -aae * size, awt); this->RenderILine(-aae * size, -awt, 0.0, 0.0); this->RenderILine(-aae * size, awt, 0.0, 0.0); glPopMatrix(); glPopMatrix(); this->GetFontNumeric()->draw(this->m_indRes * (-size) / 2.0 - 1.5 * lxFNTSW, this->m_indRes * (-1.0) - lxFNTSH, wxString::Format(_("%+03d\260"), int(this->setup->cam_tilt))); } void lxGLCanvas::RenderIDepthbar(double size) { #define dbw 3.0 #define dbtw 0.8 #define dbnc 32 int t; double clv[3], * clr; clr = this->data->luTable->GetRange(); glShadeModel(GL_SMOOTH); glBegin(GL_QUAD_STRIP); for(t = 0; t <= dbnc; t++) { this->data->luTable->GetColor(clr[0] + t / double(dbnc) * (clr[1] - clr[0]), clv); glColor4f(clv[0], clv[1], clv[2], 1.0); v2r(0.0, double(t) * size / double(dbnc)); v2r(dbw, double(t) * size / double(dbnc)); } glEnd(); glShadeModel(GL_FLAT); clrOutCntr(); this->RenderILine(dbw, 0.0, dbw, size); char strCBar[10]; for(t = 0; t <= 10; t++) { clrOutCntr(); this->RenderILine(dbw, double(t) * size / 10.0, dbw + dbtw, double(t) * size / 10.0); if (this->frame->m_iniUnits == 1) { sprintf(&(strCBar[0]), "%.0f ft", (clr[0] + double(t) / 10.0 * (clr[1] - clr[0])) / 0.3048); } else { sprintf(&(strCBar[0]), "%.0f m", (clr[0] + double(t) / 10.0 * (clr[1] - clr[0]))); } this->GetFontNumeric()->draw(this->m_indRes * dbw + lxFNTSW, this->m_indRes * (double(t) * size / 10.0) - 0.333 * lxFNTSH, strCBar); } // Depth-bar title this->GetFontNumeric()->draw(0.0, this->m_indRes * (size + 1.0) + 0.5 * lxFNTSH, wxString(_("Altitude"))); } void lxGLCanvas::RenderIScalebar(double size) { #define sbh 2.0 #define sbt 1.5 // upravime size tak, aby zodpovedala 1.0, 2.5 alebo 5.0 // nasobku standardnej velkosti // pixel -> 1 meter??? char strLen[32]; double sblen, scale; int sbtest; // scale = m / pixel scale = 2.0 * this->setup->cam_dist * this->setup->cam_lens_vfovr / (this->m_isO ? this->m_renderData->m_imgPixH : this->wh); if (this->frame->m_iniUnits == 1) { bool miles; miles = false; sbtest = int(floor(log((size * this->m_indRes) * scale / 0.3048) / log(pow(10.0,1.0/3.0)))); sblen = pow(10.0,floor(double(sbtest)/3.0)); switch (sbtest % 3) { case 0: sblen *= 1.0; break; case -2: case 1: sblen *= 2.5; break; default: sblen *= 5.0; break; } size = sblen * 0.3048 / scale / this->m_indRes; if (sbtest > 12) { size *= 1.6; miles = true; sbtest = int(floor(log((size * this->m_indRes) * scale / 1609.344) / log(pow(10.0,1.0/3.0)))); if (sbtest < 0) sbtest = 0; sblen = pow(10.0,floor(double(sbtest)/3.0)); switch (sbtest % 3) { case 0: sblen *= 1.0; break; case -2: case 1: sblen *= 2.5; break; default: sblen *= 5.0; break; } size = sblen * 1609.344 / scale / this->m_indRes; } if (miles) sprintf(&(strLen[0]),"%.0f mi", sblen); else if (sblen > 4.0) sprintf(&(strLen[0]),"%.0f ft", sblen); else sprintf(&(strLen[0]),"%g in", 12.0 * sblen); } else { sbtest = int(floor(log((size * this->m_indRes) * scale) / log(pow(10.0,1.0/3.0)))); sblen = pow(10.0,floor(double(sbtest)/3.0)); switch (sbtest % 3) { case 0: sblen *= 1.0; break; case -2: case 1: sblen *= 2.5; break; default: sblen *= 5.0; break; } size = sblen / scale / this->m_indRes; if (sblen >= 10000.0) sprintf(&(strLen[0]),"%.0f km", sblen / 1000.0); else if (sblen >= 4.0) sprintf(&(strLen[0]),"%.0f m", sblen); else if (sblen >= 0.01) sprintf(&(strLen[0]),"%.0f mm", sblen * 1000.0); else sprintf(&(strLen[0]),"%g mm", sblen * 1000.0); } clrOutFill(); glBegin(GL_QUADS); v2r(0.0 * size, 0.0); v2r(0.2 * size, 0.0); v2r(0.2 * size, sbh); v2r(0.0 * size, sbh); v2r(0.4 * size, 0.0); v2r(0.6 * size, 0.0); v2r(0.6 * size, sbh); v2r(0.4 * size, sbh); v2r(0.8 * size, 0.0); v2r(1.0 * size, 0.0); v2r(1.0 * size, sbh); v2r(0.8 * size, sbh); glEnd(); clrOutCntr(); this->RenderILine(0.0, 0.0, size, 0.0); this->RenderILine(0.0, sbh, size, sbh); this->RenderILine( 0.0, 0.0, 0.0, sbh + sbt); this->RenderILine(0.1 * size, sbh, 0.1 * size, sbh + sbt/3.0); this->RenderILine(0.2 * size, 0.0, 0.2 * size, sbh + sbt/3.0); this->RenderILine(0.3 * size, sbh, 0.3 * size, sbh + sbt/3.0); this->RenderILine(0.4 * size, 0.0, 0.4 * size, sbh + sbt/3.0); this->RenderILine(0.5 * size, sbh, 0.5 * size, sbh + 2.0*sbt/3.0); this->RenderILine(0.6 * size, 0.0, 0.6 * size, sbh + sbt/3.0); this->RenderILine(0.7 * size, sbh, 0.7 * size, sbh + sbt/3.0); this->RenderILine(0.8 * size, 0.0, 0.8 * size, sbh + sbt/3.0); this->RenderILine(0.9 * size, sbh, 0.9 * size, sbh + sbt/3.0); this->RenderILine( size, 0.0, size, sbh + sbt); this->GetFontNumeric()->draw(0.5 * size * this->m_indRes - 0.5 * double(strlen(strLen)) * lxFNTSW, (sbh + sbt + 1.0) * this->m_indRes, strLen); } void lxGLCanvas::RenderILine(double fx, double fy, double tx, double ty) { bool rounded; if (this->m_isO) rounded = true; else rounded = false; if (this->m_isO) { lxVec n, nr; int t; n = lxVec(tx, ty, 0.0) - lxVec(fx, fy, 0.0); n.Normalize(); n = hlw * lxVec(n.y, -n.x, n.z); glBegin(GL_QUADS); v2r(fx + n.x, fy + n.y); v2r(tx + n.x, ty + n.y); v2r(tx - n.x, ty - n.y); v2r(fx - n.x, fy - n.y); glEnd(); if (rounded) { glBegin(GL_TRIANGLE_FAN); v2r(fx - n.x, fy - n.y); for(t = 0; t > -180; t -= 30) { nr = n.Rotated(double(t), 0.0); v2r(fx + nr.x, fy + nr.y); } glEnd(); glBegin(GL_TRIANGLE_FAN); v2r(tx - n.x, ty - n.y); for(t = 0; t < 180; t += 30) { nr = n.Rotated(double(t), 0.0); v2r(tx + nr.x, ty + nr.y); } glEnd(); } } else { glBegin(GL_LINES); v2r(fx, fy); v2r(tx, ty); glEnd(); } } void lxGLCanvas::SetFontColors() { if (this->m_isO && this->m_renderData->m_imgWhiteBg) { this->GetFontTitle()->setForegroundColor(0.0, 0.0, 0.0, 1.0); this->GetFontNumeric()->setForegroundColor(0.0, 0.0, 0.0, 1.0); } else { if (this->setup->cam_anaglyph) { this->GetFontTitle()->setForegroundColor(1.0, 1.0, 1.0, 1.0); this->GetFontNumeric()->setForegroundColor(1.0, 1.0, 1.0, 1.0); } else { this->GetFontTitle()->setForegroundColor(0.0, 0.8, 1.0, 1.0); this->GetFontNumeric()->setForegroundColor(0.0, 0.8, 1.0, 1.0); } } } struct OSC { int m_Width, m_Height; bool m_OK; #ifdef LXWIN32 R2DContext * m_r2d; #endif #ifdef LXLINUX R2PContext * m_r2p; #endif OSC() { #ifdef LXWIN32 this->m_r2d = NULL; #endif #ifdef LXLINUX this->m_r2p = NULL; #endif this->m_Width = 0; this->m_Height = 0; this->m_OK = false; } }; bool lxGLCanvas::OSCMakeCurrent() { // urobime context current #ifdef LXWIN32 if (this->m_OSC->m_r2d) { R2DMakeCurrent(this->m_OSC->m_r2d); return true; } #endif #ifdef LXLINUX if (this->m_OSC->m_r2p) { R2PMakeCurrent(this->m_OSC->m_r2p); return true; } #endif return false; } bool lxGLCanvas::OSCInit(GLint w, GLint h) { // vytvorime dib // vytvorime context this->m_OSC = new OSC(); this->m_OSC->m_Width = w; this->m_OSC->m_Height = h; this->m_OSC->m_OK = true; #ifdef LXWIN32 this->m_OSC->m_r2d = R2DCreate(w, h); #endif #ifdef LXLINUX this->m_OSC->m_r2p = R2PCreate(w, h); #endif return this->m_OSC->m_OK; } void lxGLCanvas::OSCDestroy() { if (this->m_OSC != NULL) { #ifdef LXWIN32 if (this->m_OSC->m_r2d) R2DDestroy(this->m_OSC->m_r2d); #endif #ifdef LXLINUX if (this->m_OSC->m_r2p) R2PDestroy(this->m_OSC->m_r2p); #endif delete this->m_OSC; } this->m_OSC = NULL; } struct _TRctx * lxGLCanvas::TRCGetContext() { if (this->m_TRC != NULL) return this->m_TRC->m_ctx; else return NULL; } void lxGLCanvas::TRCInit(int type, GLint w, GLint h, GLint tw, GLint th) { if (this->m_TRC == NULL) { this->m_TRC = new TRC(); if (th < 64) th = 64; if (tw < 64) tw = 64; if (th > this->m_OSC->m_Height) th = this->m_OSC->m_Height; if (tw > this->m_OSC->m_Width) tw = this->m_OSC->m_Width; tw = tw - tw % 8; th = th - th % 8; TRcontext * ctx = this->m_TRC->m_ctx = trNew(); GLubyte * buff = this->m_TRC->m_buff = new GLubyte [3 * sizeof(GLubyte) * (type == LXGLCTR_IMAGE ? w : tw) * (type == LXGLCTR_IMAGE ? h : th)]; this->OSCMakeCurrent(); this->OpenGLInit(); trTileSize(ctx, tw, th, LXTRCBORDER); trImageSize(ctx, w, h); if (type == LXGLCTR_IMAGE) trImageBuffer(ctx, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid *) buff); else trTileBuffer(ctx, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid *) buff); } } GLint lxGLCanvas::TRCGet(int param) { if (this->m_TRC != NULL) return trGet(this->m_TRC->m_ctx, (TRenum) param); else return -1; } GLubyte * lxGLCanvas::TRCGetBuffer() { if (this->m_TRC != NULL) return this->m_TRC->m_buff; else return (GLubyte *) NULL; } void lxGLCanvas::TRCDestroy() { if (this->m_TRC != NULL) { delete [] this->m_TRC->m_buff; trDelete(this->m_TRC->m_ctx); delete this->m_TRC; } this->m_TRC = NULL; } void lxGLCanvas::TRCBeginTile() { if (this->m_TRC != NULL) { this->OSCMakeCurrent(); trBeginTile(this->m_TRC->m_ctx); } } bool lxGLCanvas::TRCEndTile() { if (this->m_TRC != NULL) return (trEndTile(this->m_TRC->m_ctx) > 0); else return false; } therion/loch/lxGLC.h0000644000076400010400000001131711207745636015352 0ustar userAdministrators/** * @file lxGLC.h * Loch GL canvas. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef lx_h #define lx_h // Standard libraries #ifndef LXDEPCHECK #include #include #include #include "lxOGLFT.h" #endif //LXDEPCHECK - standart libraries enum { LXGLCML_NONE, LXGLCML_ZOOM2ROTATE, LXGLCML_ZOOM, LXGLCML_ROTATE, LXGLCML_TILT, LXGLCML_PANX, LXGLCML_PANY, LXGLCML_PANX2Y, LXGLCTR_TILE, LXGLCTR_IMAGE }; #include "lxMath.h" class lxGLCanvas: public wxGLCanvas { public: lxVec shift; long ww, wh, mx, my; struct lxRenderData * m_renderData; struct lxData * data; struct lxSetup * setup; class lxFrame * frame; void UpdateContents(); lxGLCanvas(struct lxSetup * stp, struct lxData * dat, wxWindow *parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, const wxString& name = _T("lxGLCanvas") ); ~lxGLCanvas(); GLuint m_idTexSurface, m_idTexStation, m_initTextures; // screen funkcie a premenne GLuint m_sList, m_oList, m_sFixList, m_sEntList, m_sStList, m_oFixList, m_oEntList, m_oStList; int m_sMoveLock; double m_indRes, m_indLWidth; bool m_sInit, m_sInitReset; bool m_sMoveSingle, m_isO; // fonty FT_Face m_ftFace1, m_ftFace2, m_ftFace3; OGLFT::Monochrome * m_fntNumericS, * m_fntTitleS; OGLFT::Filled * m_fntNumericO, * m_fntTitleO; GLdouble m_camera_modelview[16]; GLdouble m_camera_projection[16]; GLint m_camera_viewport[4]; bool m_sCameraAutoRotate, m_sCameraLockRotation; wxStopWatch m_sCameraAutoRotateSWatch; long m_sCameraAutoRotateCounter; double m_sCameraAutoRotateAngle, m_sCameraStartAutoRotateAngle; void OnPaint(wxPaintEvent& event); void OnSize(wxSizeEvent& event); void OnEraseBackground(wxEraseEvent& event); void OnEnterWindow(wxMouseEvent& event); void OnMouseDouble(wxMouseEvent& event); void OnMouseDown(wxMouseEvent& event); void OnMouseUp(wxMouseEvent& event); void OnMouseMove(wxMouseEvent& event); void OnMouseWheel(wxMouseEvent& event); void OnKeyPress(wxKeyEvent& event); void OnIdle(wxIdleEvent& event); bool CameraAutoRotate(); void InitializeS(); void ForceRefresh(bool updateTB = true); void UpdateRenderContents(); void UpdateRenderList(); void RenderScreen(); void SetIndicatorsTransform(); void ProjectPoint(double src_x, double src_y, double src_z, GLdouble * x, GLdouble * y, GLdouble * z); void ProjectStations(); void RenderOffList(); // offscreen funkcie a premenne struct OSC * m_OSC; struct TRC * m_TRC; GLint m_maxTSizeS, m_maxTSizeO; bool OSCMakeCurrent(); void OSCDestroy(); bool OSCInit(GLint w, GLint h); void TRCInit(int type, GLint w, GLint h, GLint tw = 0, GLint th = 0); struct _TRctx * TRCGetContext(); void TRCDestroy(); GLint TRCGet(int param); GLubyte * TRCGetBuffer(); void TRCBeginTile(); bool TRCEndTile(); void SetColorMask(); long m_lic; DECLARE_EVENT_TABLE() public: bool IsRenderingOff(); OGLFT::Face * GetFontNumeric(); OGLFT::Face * GetFontTitle(); void OpenGLInit(); void SetCamera(); void RenderAll(); void SetFontColors(); void RenderSurface(); void GeomOutline(); void RenderCenterline(); void RenderScrapWalls(); void RenderInds(); void RenderICompass(double size); void RenderIClino(double size); void RenderIScalebar(double size); void RenderIDepthbar(double size); void RenderILine(double fx, double fy, double tx, double ty); }; // lxGLCanvas struct TRC { struct _TRctx * m_ctx; GLubyte * m_buff; TRC() { this->m_ctx = NULL; this->m_buff = NULL; } }; #endif therion/loch/lxGUI.cxx0000644000076400010400000011307312255615010015730 0ustar userAdministrators/** * @file lxGUI.cxx * Loch user interface implementation. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ */ // Standard libraries #ifndef LXDEPCHECK #include #include #include #include #include #include #include #include #include #include #include #endif //LXDEPCHECK - standart libraries #include "lxGUI.h" #include "lxData.h" #include "lxSetup.h" #include "lxRender.h" #include "lxOptDlg.h" #include "lxAboutDlg.h" #include "lxSView.h" #include "lxSScene.h" #include "lxSTree.h" #include "icons/open.xpm" #include "icons/render.xpm" #include "icons/reload.xpm" #include "icons/stereo.xpm" #include "icons/rotation.xpm" #include "icons/lockrot.xpm" #include "icons/fit.xpm" #include "icons/home.xpm" #include "icons/rendersetup.xpm" #include "icons/plan.xpm" #include "icons/profile.xpm" #include "icons/fullscreen.xpm" #include "icons/orto.xpm" #include "icons/camera.xpm" #include "icons/scene.xpm" #include "icons/viscline.xpm" #include "icons/vissurface.xpm" #include "icons/visbbox.xpm" #include "icons/viswalls.xpm" #include "icons/visinds.xpm" #include "icons/visentrance.xpm" #include "icons/visfix.xpm" #include "icons/visstation.xpm" #include "icons/vislabel.xpm" #ifndef LXGNUMSW #include "loch.xpm" #endif //////////////////////////////////////////////////////////////////////// // Main frame //////////////////////////////////////////////////////////////////////// BEGIN_EVENT_TABLE(lxFrame, wxFrame) EVT_MENU(wxID_EXIT, lxFrame::OnExit) EVT_MENU(LXMENU_CAMERA_ROTCW, lxFrame::OnMenuCameraMove) EVT_MENU(LXMENU_CAMERA_ROTCCW, lxFrame::OnMenuCameraMove) EVT_MENU(LXMENU_CAMERA_UPPER, lxFrame::OnMenuCameraMove) EVT_MENU(LXMENU_CAMERA_LOWER, lxFrame::OnMenuCameraMove) EVT_MENU(LXMENU_CAMERA_UP, lxFrame::OnMenuCameraMove) EVT_MENU(LXMENU_CAMERA_DOWN, lxFrame::OnMenuCameraMove) EVT_MENU(LXMENU_CAMERA_LEFT, lxFrame::OnMenuCameraMove) EVT_MENU(LXMENU_CAMERA_RIGHT, lxFrame::OnMenuCameraMove) EVT_MENU(LXMENU_CAMERA_ZOOMIN, lxFrame::OnMenuCameraMove) EVT_MENU(LXMENU_CAMERA_ZOOMOUT, lxFrame::OnMenuCameraMove) EVT_MENU(LXMENU_CAMERA_PERSP, lxFrame::OnAll) EVT_MENU(LXMENU_CAMERA_AUTOROTATE, lxFrame::OnAll) EVT_MENU(LXMENU_CAMERA_LOCKROT, lxFrame::OnAll) EVT_MENU(LXMENU_CAMERA_ORIENT_HOME, lxFrame::OnMenuCameraOrient) EVT_MENU(LXMENU_CAMERA_ORIENT_PLAN, lxFrame::OnMenuCameraOrient) EVT_MENU(LXMENU_CAMERA_ORIENT_PROFILE, lxFrame::OnMenuCameraOrient) EVT_MENU(LXMENU_CAMERA_ORIENT_NORTH, lxFrame::OnMenuCameraOrient) EVT_MENU(LXMENU_CAMERA_ORIENT_WEST, lxFrame::OnMenuCameraOrient) EVT_MENU(LXMENU_CAMERA_ORIENT_EAST, lxFrame::OnMenuCameraOrient) EVT_MENU(LXMENU_CAMERA_ORIENT_SOUTH, lxFrame::OnMenuCameraOrient) EVT_MENU(LXMENU_CAMERA_EXTENDS, lxFrame::OnAll) EVT_MENU_RANGE(LXMENU_VIEW, LXMENU_VIEWEND, lxFrame::OnAll) EVT_MENU(LXMENU_FILE_OPEN, lxFrame::OnAll) EVT_MENU_RANGE(wxID_FILE1, wxID_FILE9, lxFrame::OnAll) EVT_MENU(LXMENU_FILE_RELOAD, lxFrame::OnAll) EVT_MENU(LXMENU_FILE_RENDER, lxFrame::OnAll) EVT_MENU(LXMENU_FILE_RENDER_SETUP, lxFrame::OnAll) EVT_MENU(LXMENU_FILE_EXPORT, lxFrame::OnAll) EVT_MENU(LXMENU_FILE_IMPORT, lxFrame::OnAll) EVT_MENU(LXMENU_EXPROT, lxFrame::OnAll) EVT_MENU(LXMENU_EXPFIT, lxFrame::OnAll) EVT_MENU_RANGE(LXMENU_HELP_CONTENTS, LXMENU_HELP_ABOUT, lxFrame::OnAll) EVT_TOOL_RANGE(LXTB, LXTBEND, lxFrame::OnAll) EVT_SIZE(lxFrame::OnSize) EVT_MOVE(lxFrame::OnMove) END_EVENT_TABLE() #if wxUSE_DRAG_AND_DROP class DnDFile : public wxFileDropTarget { lxFrame * m_Parent; public: DnDFile(lxFrame *parent) : m_Parent(parent) { } virtual bool OnDropFiles(wxCoord, wxCoord, const wxArrayString &filenames); }; bool DnDFile::OnDropFiles(wxCoord, wxCoord, const wxArrayString &filenames) { assert(filenames.GetCount() > 0); m_Parent->OpenFile(filenames[0]); return TRUE; } #endif lxFrame::lxFrame(class lxApp * app, const wxString& title, const wxPoint& pos, const wxSize& size, long style) : wxFrame(NULL, wxID_ANY, title, pos, size, style), m_modelSetupDlg(NULL), m_modelSetupDlgOn(false), m_selectionSetupDlg(NULL), m_selectionSetupDlgOn(false), m_viewpointSetupDlg(NULL), m_viewpointSetupDlgOn(false) { // // Give it an icon #ifdef LXGNUMSW this->SetIcon(wxIcon(_T("LOCHICON"))); #else this->SetIcon(wxIcon(loch_xpm)); #endif this->m_app = app; this->data = new lxData; this->setup = new lxSetup(data); this->m_fileToOpen = _T(""); this->m_renderData = new lxRenderData(); this->m_fileName = _("noname"); this->m_fileConfig = new wxFileConfig(_T("loch")); this->m_fileHistory = new wxFileHistory; this->m_helpController = new wxHelpController; wxString hlpFName = _T("loch"), tmpHlpFName; #ifdef LXWIN32 hlpFName += _T(".chm"); #else hlpFName += _T(".htb"); #endif wxFileName hlpFN; hlpFN = wxFileName(this->m_app->m_path); hlpFN.AppendDir(this->m_app->m_locale.GetCanonicalName()); hlpFN.SetFullName(hlpFName); if (hlpFN.FileExists()) { hlpFName = hlpFN.GetFullPath(); } else { hlpFN = wxFileName(this->m_app->m_path); hlpFN.AppendDir(this->m_app->m_locale.GetCanonicalName().Left(2)); hlpFN.SetFullName(hlpFName); if (hlpFN.FileExists()) { hlpFName = hlpFN.GetFullPath(); } else { hlpFName = _T("en/loch"); } } this->m_helpController->Initialize(hlpFName); this->m_fileConfig->Read(_T("startup_dir"), &this->m_iniDirectory, wxEmptyString); this->m_fileConfig->Read(_T("startup_dir_last"), &this->m_fileDir, ::wxGetCwd()); this->m_fileConfig->Read(_T("units"), &this->m_iniUnits, LXUNITS_METRIC); if (this->m_iniDirectory.Length() > 0) { this->m_fileDir = this->m_iniDirectory; } this->m_fileConfig->Read(_T("stereo_channels_last"), &this->m_iniStereoGlassesLast, 0); this->m_fileConfig->Read(_T("stereo_channels"), &this->m_iniStereoGlasses, 8); if (this->m_iniStereoGlasses == 8) this->setup->cam_anaglyph_glasses = this->m_iniStereoGlassesLast; else this->setup->cam_anaglyph_glasses = this->m_iniStereoGlasses; this->m_fileConfig->Read(_T("wall_extra"), &this->m_iniWallsInterpolate, LXWALLS_INTERP_NONE); this->m_toolBar = CreateToolBar(); this->m_toolBar->AddTool(LXTB_OPEN, _("Open"), wxBitmap(open_xpm), _("Open file")); this->m_toolBar->AddTool(LXTB_RELOAD, _("Reload"), wxBitmap(reload_xpm), _("Reload file")); this->m_toolBar->AddSeparator(); this->m_toolBar->AddTool(LXTB_RENDER, _("Render"), wxBitmap(render_xpm), _("Render to file")); this->m_toolBar->AddTool(LXTB_RENDER_SETUP, _("Rendering setup"), wxBitmap(rendersetup_xpm), _("Rendering setup")); this->m_toolBar->AddSeparator(); this->m_toolBar->AddTool(LXTB_ROTATION, _("Rotation"), wxBitmap(rotation_xpm), _("Rotation"), wxITEM_CHECK); this->m_toolBar->AddTool(LXTB_LOCKROT, _("Lock rotation"), wxBitmap(lockrot_xpm), _("Lock rotation"), wxITEM_CHECK); this->m_toolBar->AddTool(LXTB_PERSP, _("Ortho"), wxBitmap(orto_xpm), _("Orthogonal view"), wxITEM_CHECK); this->m_toolBar->AddTool(LXTB_STEREO, _("Stereo"), wxBitmap(stereo_xpm), _("Stereo mode"), wxITEM_CHECK); this->m_toolBar->AddSeparator(); this->m_toolBar->AddTool(LXMENU_CAMERA_ORIENT_PLAN, _("Plan"), wxBitmap(plan_xpm), _("Plan view")); this->m_toolBar->AddTool(LXMENU_CAMERA_ORIENT_PROFILE, _("Profile"), wxBitmap(profile_xpm), _("Profile view")); this->m_toolBar->AddTool(LXTB_FIT, _("Fit zoom"), wxBitmap(fit_xpm), _("Zoom to fit")); this->m_toolBar->AddTool(LXMENU_CAMERA_ORIENT_HOME, _("Reset"), wxBitmap(home_xpm), _("Reset viewpoint")); this->m_toolBar->AddSeparator(); this->m_toolBar->AddTool(LXTB_VISENTRANCE, _("Entrances"), wxBitmap(visentrance_xpm), _("Show entrances"), wxITEM_CHECK); this->m_toolBar->AddTool(LXTB_VISFIX, _("Fixed stations"), wxBitmap(visfix_xpm), _("Show fixed stations"), wxITEM_CHECK); this->m_toolBar->AddTool(LXTB_VISSTATION, _("All stations"), wxBitmap(visstation_xpm), _("Show all stations"), wxITEM_CHECK); this->m_toolBar->AddTool(LXTB_VISLABEL, _("Labels"), wxBitmap(vislabel_xpm), _("Toggle station labeling")); this->m_toolBar->AddSeparator(); this->m_toolBar->AddTool(LXTB_VISCENTERLINE, _("Centerline"), wxBitmap(viscline_xpm), _("Show centerline"), wxITEM_CHECK); this->m_toolBar->AddTool(LXTB_VISWALLS, _("Walls"), wxBitmap(viswalls_xpm), _("Show walls"), wxITEM_CHECK); this->m_toolBar->AddTool(LXTB_VISSURFACE, _("Surface"), wxBitmap(vissurface_xpm), _("Show surface"), wxITEM_CHECK); this->m_toolBar->AddTool(LXTB_VISBBOX, _("Bounding box"), wxBitmap(visbbox_xpm), _("Show bounding box"), wxITEM_CHECK); this->m_toolBar->AddTool(LXTB_VISINDS, _("Indicators"), wxBitmap(visinds_xpm), _("Show indicators"), wxITEM_CHECK); this->m_toolBar->AddSeparator(); this->m_toolBar->AddTool(LXTB_VIEWSTP, _("Camera setup"), wxBitmap(camera_xpm), _("Camera setup"), wxITEM_CHECK); this->m_toolBar->AddTool(LXTB_SCENESTP, _("Scene setup"), wxBitmap(scene_xpm), _("Scene setup"), wxITEM_CHECK); this->m_toolBar->AddSeparator(); this->m_toolBar->AddTool(LXTB_FULLSCREEN, _("Full screen"), wxBitmap(fullscreen_xpm), _("Full screen"), wxITEM_CHECK); this->m_toolBar->Realize(); // Make a menubar wxMenu *fileMenu = new wxMenu; fileMenu->Append(LXMENU_FILE_OPEN, _("&Open...\tCtrl+O")); fileMenu->Append(LXMENU_FILE_RELOAD, _("&Reload\tCtrl+R")); fileMenu->AppendSeparator(); fileMenu->Append(LXMENU_FILE_RENDER, _("&Render to file\tCtrl+P")); fileMenu->Append(LXMENU_FILE_RENDER_SETUP, _("Rendering &setup...")); fileMenu->AppendSeparator(); fileMenu->Append(LXMENU_FILE_IMPORT, _("&Import...\tCtrl+I")); fileMenu->Append(LXMENU_FILE_EXPORT, _("&Export...\tCtrl+X")); fileMenu->AppendSeparator(); fileMenu->Append(wxID_EXIT, _("E&xit\tCtrl+Q")); this->m_fileHistory->UseMenu(fileMenu); this->m_fileHistory->Load(*this->m_fileConfig); wxMenu *cameraAdjustMenu = new wxMenu; cameraAdjustMenu->Append(LXMENU_CAMERA_ROTCW, _("Rotate left\tRight")); cameraAdjustMenu->Append(LXMENU_CAMERA_ROTCCW, _("Rotate right\tLeft")); cameraAdjustMenu->AppendSeparator(); cameraAdjustMenu->Append(LXMENU_CAMERA_UPPER, _("Upper viewpoint\tDown")); cameraAdjustMenu->Append(LXMENU_CAMERA_LOWER, _("Lower viewpoint\tUp")); cameraAdjustMenu->AppendSeparator(); cameraAdjustMenu->Append(LXMENU_CAMERA_UP, _("Move up\tShift+Down")); cameraAdjustMenu->Append(LXMENU_CAMERA_DOWN, _("Move down\tShift+Up")); cameraAdjustMenu->Append(LXMENU_CAMERA_LEFT, _("Move left\tShift+Right")); cameraAdjustMenu->Append(LXMENU_CAMERA_RIGHT, _("Move right\tShift+Left")); cameraAdjustMenu->AppendSeparator(); cameraAdjustMenu->Append(LXMENU_CAMERA_ZOOMIN, _("Zoom in\tCtrl+Up")); cameraAdjustMenu->Append(LXMENU_CAMERA_ZOOMOUT, _("Zoom out\tCtrl+Down")); cameraAdjustMenu->Append(LXMENU_CAMERA_EXTENDS,_("Zoom to fit\tSpace")); wxMenu *cameraOrientMenu = new wxMenu; cameraOrientMenu->Append(LXMENU_CAMERA_ORIENT_PLAN,_("&Plan")); cameraOrientMenu->Append(LXMENU_CAMERA_ORIENT_PROFILE,_("Pro&file")); cameraOrientMenu->AppendSeparator(); cameraOrientMenu->Append(LXMENU_CAMERA_ORIENT_NORTH, _("&North")); cameraOrientMenu->Append(LXMENU_CAMERA_ORIENT_WEST, _("&West")); cameraOrientMenu->Append(LXMENU_CAMERA_ORIENT_EAST, _("&East")); cameraOrientMenu->Append(LXMENU_CAMERA_ORIENT_SOUTH, _("&South")); cameraOrientMenu->AppendSeparator(); cameraOrientMenu->Append(LXMENU_CAMERA_ORIENT_HOME,_("&Reset")); this->m_viewpointMenu = cameraOrientMenu; this->m_toolMenu = new wxMenu; this->m_toolMenu->AppendCheckItem(LXMENU_CAMERA_AUTOROTATE, _("Rotation")); this->m_toolMenu->AppendCheckItem(LXMENU_CAMERA_LOCKROT, _("Lock rotation")); this->m_toolMenu->AppendSeparator(); this->m_toolMenu->AppendCheckItem(LXMENU_VIEW_VIEWPOINTSTP, _("Camera")); this->m_toolMenu->AppendCheckItem(LXMENU_VIEW_MODELSTP, _("Scene")); wxMenu *viewMenu = new wxMenu; viewMenu->Append(LXMENU_CAMERA_ADJUST, _("Action"), cameraAdjustMenu); viewMenu->AppendCheckItem(LXMENU_CAMERA_AUTOROTATE, _("Rotation")); viewMenu->AppendCheckItem(LXMENU_CAMERA_LOCKROT, _("Lock rotation")); viewMenu->Append(LXMENU_CAMERA_ORIENT, _("Orientation"), cameraOrientMenu); viewMenu->AppendCheckItem(LXMENU_CAMERA_PERSP, _("Orthogonal")); viewMenu->AppendSeparator(); viewMenu->Append(LXMENU_VIEW_FULLSCREEN, _("Full screen\tF11")); viewMenu->Append(LXMENU_EXPFIT, _("&Size...")); wxMenu *winMenu = new wxMenu; winMenu->AppendCheckItem(LXMENU_VIEW_VIEWPOINTSTP, _("&Camera")); winMenu->AppendCheckItem(LXMENU_VIEW_MODELSTP, _("&Scene")); winMenu->AppendCheckItem(LXMENU_VIEW_SELECTIONSTP, _("&Selection")); winMenu->Append(LXMENU_EXPROT, _("&Animation")); winMenu->AppendSeparator(); winMenu->Append(LXMENU_TOOLS_OPTIONS, _("&Options...")); wxMenu * hlpMenu = new wxMenu; hlpMenu->Append(LXMENU_HELP_CONTENTS, _("&Contents...\tF1")); hlpMenu->Append(LXMENU_HELP_CONTROL, _("&Control")); hlpMenu->Append(LXMENU_HELP_RENDERING, _("&Rendering")); hlpMenu->Append(LXMENU_HELP_BUGS, _("&Bugs")); hlpMenu->AppendSeparator(); hlpMenu->Append(LXMENU_HELP_ABOUT, _("&About...")); m_menuBar = new wxMenuBar; m_menuBar->Append(fileMenu, _("&File")); m_menuBar->Append(viewMenu, _("&View")); m_menuBar->Append(winMenu, _("&Tools")); m_menuBar->Append(hlpMenu, _("&Help")); this->SetMenuBar(m_menuBar); this->canvas = new lxGLCanvas(this->setup, this->data, this, wxID_ANY, wxDefaultPosition, wxDefaultSize); this->canvas->frame = this; wxBoxSizer * ms = new wxBoxSizer(wxVERTICAL); ms->SetMinSize(192, 128); ms->Add(this->canvas, 1, wxEXPAND, 0); SetSizer(ms); ms->SetSizeHints(this); this->SetPosition(pos); this->SetSize(size); this->m_modelSetupDlg = new lxModelSetupDlg(this); this->m_modelSetupDlgOn = false; this->m_selectionSetupDlg = new lxModelTreeDlg(this); this->m_selectionSetupDlgOn = false; wxSize csize = this->GetClientSize(); #ifdef __WXMSW__ lxTBoxPos::m_fsOffset = size.y - csize.y; this->m_selectionSetupDlg->m_toolBoxPosition.Set(0, size.x - csize.x, size.y - csize.y); #else wxSize tbsize = this->m_toolBar->GetSize(); lxTBoxPos::m_fsOffset = size.y - csize.y + tbsize.y; this->m_selectionSetupDlg->m_toolBoxPosition.Set(0, size.x - csize.x, size.y - csize.y + tbsize.y); #endif this->m_viewpointSetupDlg = new lxViewpointSetupDlg(this); #ifdef __WXMSW__ this->m_viewpointSetupDlg->m_toolBoxPosition.Set(1, size.x - csize.x, size.y - csize.y); #else tbsize = this->m_toolBar->GetSize(); this->m_viewpointSetupDlg->m_toolBoxPosition.Set(1, size.x - csize.x, size.y - csize.y + tbsize.y); #endif this->m_viewpointSetupDlgOn = false; this->UpdateM2TB(); #if wxUSE_DRAG_AND_DROP SetDropTarget(new DnDFile(this)); #endif // Show the frame this->Show(true); } void lxFrame::OnExit( wxCommandEvent& WXUNUSED(event) ) { // true is to force the frame to close Close(true); } lxFrame::~lxFrame() { this->m_fileHistory->Save(*this->m_fileConfig); this->m_fileConfig->Write(_T("startup_dir"), this->m_iniDirectory); this->m_fileConfig->Write(_T("startup_dir_last"), this->m_fileDir); this->m_fileConfig->Write(_T("units"), this->m_iniUnits); this->m_fileConfig->Write(_T("stereo_channels_last"), this->m_iniStereoGlassesLast); this->m_fileConfig->Write(_T("stereo_channels"), this->m_iniStereoGlasses); this->m_fileConfig->Write(_T("wall_extra"), this->m_iniWallsInterpolate); #ifdef LXVCPPMSW SetToolBar(NULL); #endif delete this->m_fileHistory; delete this->m_fileConfig; delete this->m_toolMenu; delete this->setup; delete this->data; delete this->m_renderData; delete this->m_helpController; } void lxFrame::OnMenuCameraMove(wxCommandEvent& event){ wxKeyEvent ke; ke.m_keyCode = 0; ke.m_shiftDown = false; ke.m_controlDown = false; switch (event.GetId()) { case LXMENU_CAMERA_ROTCW: ke.m_keyCode = WXK_RIGHT; break; case LXMENU_CAMERA_ROTCCW: ke.m_keyCode = WXK_LEFT; break; case LXMENU_CAMERA_UPPER: ke.m_keyCode = WXK_DOWN; break; case LXMENU_CAMERA_LOWER: ke.m_keyCode = WXK_UP; break; case LXMENU_CAMERA_UP: ke.m_keyCode = WXK_DOWN; ke.m_shiftDown = true; break; case LXMENU_CAMERA_DOWN: ke.m_keyCode = WXK_UP; ke.m_shiftDown = true; break; case LXMENU_CAMERA_LEFT: ke.m_keyCode = WXK_RIGHT; ke.m_shiftDown = true; break; case LXMENU_CAMERA_RIGHT: ke.m_keyCode = WXK_LEFT; ke.m_shiftDown = true; break; case LXMENU_CAMERA_ZOOMIN: ke.m_keyCode = WXK_UP; ke.m_controlDown = true; break; case LXMENU_CAMERA_ZOOMOUT: ke.m_keyCode = WXK_DOWN; ke.m_controlDown = true; break; } if (ke.GetKeyCode() != 0) this->canvas->OnKeyPress(ke); } void lxFrame::OnMenuCameraOrient(wxCommandEvent& event) { switch (event.GetId()) { case LXMENU_CAMERA_ORIENT_HOME: this->setup->cam_tilt = 90.0; this->setup->cam_dir = 0.0; this->setup->ResetCamera(); break; case LXMENU_CAMERA_ORIENT_PLAN: this->setup->cam_tilt = 90.0; this->setup->UpdatePos(); break; case LXMENU_CAMERA_ORIENT_PROFILE: this->setup->cam_tilt = 0.0; this->setup->UpdatePos(); break; case LXMENU_CAMERA_ORIENT_NORTH: this->setup->cam_dir = 0.0; this->setup->UpdatePos(); break; case LXMENU_CAMERA_ORIENT_EAST: this->setup->cam_dir = 90.0; this->setup->UpdatePos(); break; case LXMENU_CAMERA_ORIENT_SOUTH: this->setup->cam_dir = 180.0; this->setup->UpdatePos(); break; case LXMENU_CAMERA_ORIENT_WEST: this->setup->cam_dir = 270.0; this->setup->UpdatePos(); break; } this->canvas->ForceRefresh(); } void lxFrame::ToggleFullScreen() { this->ShowFullScreen(!this->IsFullScreen()); this->UpdateM2TB(); } int lxFrame::GetFileType(wxString fName) { #define matchtype(w,t) if (fName.EndsWith((const wxChar *)wxString(_T(w)))) return t; matchtype(".lox",1); matchtype(".LOX",1); matchtype(".plt",2); matchtype(".PLT",2); matchtype(".3d",3); matchtype(".3D",3); return 1; } void lxFrame::DetectFileType() { if (this->m_fileType == 0) { this->m_fileType = this->GetFileType(this->m_fileName); } } void lxFrame::OnAll(wxCommandEvent& event) { switch (event.GetId()) { case LXMENU_HELP_CONTENTS: this->m_helpController->DisplayContents(); break; case LXMENU_EXPROT: this->ExportRotationPictures(); break; case LXMENU_EXPFIT: this->canvas->SetSize(720,576); this->Fit(); break; case LXMENU_HELP_CONTROL: this->m_helpController->DisplaySection(_T("Control")); break; case LXMENU_HELP_RENDERING: this->m_helpController->DisplaySection(_T("Rendering")); break; case LXMENU_HELP_BUGS: this->m_helpController->DisplaySection(_T("Bugs")); break; case LXMENU_HELP_ABOUT: lxShowAboutDialog(this); break; case LXTB_VIEWPOINT: lxSize = this->m_toolBar->GetSize(); lxPoint = wxGetMousePosition() - this->GetPosition(); #ifdef __WXMSW__ this->PopupMenu(this->m_viewpointMenu, lxPoint.x - 8, lxSize.y); #else this->PopupMenu(this->m_viewpointMenu, lxPoint.x - 8, 0); #endif this->m_toolBar->ToggleTool(LXTB_VIEWPOINT, false); break; case LXTB_LOCKROT: case LXMENU_CAMERA_LOCKROT: this->ToggleRotLock(); break; case LXTB_FULLSCREEN: case LXMENU_VIEW_FULLSCREEN: this->ToggleFullScreen(); break; case LXTB_STEREO: this->ToggleStereo(); break; case LXTB_VIEWSTP: this->ToggleViewpointSetup(); break; case LXTB_SCENESTP: this->ToggleModelSetup(); break; case LXMENU_TOOLS_OPTIONS: lxShowOptionsDialog(this); break; case wxID_FILE1: case wxID_FILE2: case wxID_FILE3: case wxID_FILE4: case wxID_FILE5: case wxID_FILE6: case wxID_FILE7: case wxID_FILE8: case wxID_FILE9: this->m_fileName = this->m_fileHistory->GetHistoryFile(event.GetId() - wxID_FILE1); this->m_fileDir = wxFileName(this->m_fileName).GetPath(); this->m_fileType = 0; this->DetectFileType(); this->ReloadData(); this->setup->ResetCamera(); this->canvas->ForceRefresh(); break; case LXMENU_FILE_EXPORT: { wxFileDialog dialog ( this, _("Export"), wxEmptyString, wxEmptyString, _("VTK file (*.vtk)|*.vtk|Loch file (*.lox)|*.lox"), wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); dialog.SetDirectory(this->m_fileDir); dialog.CentreOnParent(); if (dialog.ShowModal() == wxID_OK) { switch (dialog.GetFilterIndex()) { case 0: this->data->ExportVTK(dialog.GetPath()); break; case 1: this->data->m_input.ExportLOX(dialog.GetPath().mbc_str()); break; } this->canvas->ForceRefresh(); } } break; case LXTB_OPEN: case LXMENU_FILE_OPEN: case LXMENU_FILE_IMPORT: { wxFileDialog dialog ( this, _("Open"), wxEmptyString, wxEmptyString, _("All supported files (*.lox;*.plt;*.3d)|*.lox;*.plt;*.3d|Loch files (*.lox)|*.lox|Compass PLT files (*.plt)|*.plt|Survex 3D files (*.3d)|*.3d") ); dialog.SetDirectory(this->m_fileDir); dialog.CentreOnParent(); if (dialog.ShowModal() == wxID_OK) { if (event.GetId() == LXMENU_FILE_IMPORT) { this->ImportFile(dialog.GetPath(), this->GetFileType(dialog.GetPath())); } else { this->m_fileName = dialog.GetPath(); this->m_fileDir = dialog.GetDirectory(); this->m_fileType = 0; this->DetectFileType(); this->ReloadData(); this->setup->ResetCamera(); } this->canvas->ForceRefresh(); } } break; case LXTB_RELOAD: case LXMENU_FILE_RELOAD: this->ReloadData(); this->canvas->ForceRefresh(); break; case LXTB_RENDER_SETUP: case LXMENU_FILE_RENDER_SETUP: this->m_renderData->Configure(this, this->canvas); break; case LXTB_RENDER: case LXMENU_FILE_RENDER: this->m_renderData->Render(this, this->canvas); break; case LXTB_ROTATION: case LXMENU_CAMERA_AUTOROTATE: this->ToggleRotation(); break; case LXTB_PERSP: case LXMENU_CAMERA_PERSP: this->TogglePerspective(); break; case LXTB_FIT: case LXMENU_CAMERA_EXTENDS: this->setup->ResetCamera(); this->canvas->ForceRefresh(); break; case LXMENU_VIEW_MODELSTP: this->ToggleModelSetup(); break; case LXMENU_VIEW_SELECTIONSTP: this->ToggleSelectionSetup(); break; case LXMENU_VIEW_VIEWPOINTSTP: this->ToggleViewpointSetup(); break; case LXTB_VISENTRANCE: this->ToggleVisibilityCenterlineEntrance(); break; case LXTB_VISFIX: this->ToggleVisibilityCenterlineFix(); break; case LXTB_VISSTATION: this->ToggleVisibilityCenterlineStation(); break; case LXTB_VISLABEL: { int cmode = 0; if (this->setup->m_stlabel_comment) cmode = 1; if (this->setup->m_stlabel_name) cmode = 2; if (this->setup->m_stlabel_name && this->setup->m_stlabel_survey) cmode = 3; if (this->setup->m_stlabel_altitude) cmode = 4; cmode = (cmode + 1) % 5; this->setup->m_stlabel_comment = false; this->setup->m_stlabel_name = false; this->setup->m_stlabel_survey = false; this->setup->m_stlabel_altitude = false; switch (cmode) { case 1: this->setup->m_stlabel_comment = true; break; case 2: this->setup->m_stlabel_name = true; break; case 3: this->setup->m_stlabel_name = true; this->setup->m_stlabel_survey = true; break; case 4: this->setup->m_stlabel_altitude = true; break; } this->canvas->UpdateRenderList(); this->canvas->ForceRefresh(); this->UpdateM2TB(); } break; case LXTB_VISBBOX: this->ToggleVisibilityBBox(); break; case LXTB_VISCENTERLINE: this->ToggleVisibilityCenterline(); break; case LXTB_VISWALLS: this->ToggleVisibilityWalls(); break; case LXTB_VISSURFACE: this->ToggleVisibilitySurface(); break; case LXTB_VISINDS: this->ToggleVisibilityIndicators(); break; default: event.Skip(); } } void lxFrame::OnSize(wxSizeEvent& event) { wxFrame::OnSize(event); if (this->m_viewpointSetupDlg != NULL) { this->m_viewpointSetupDlg->m_toolBoxPosition.Restore(); } if (this->m_modelSetupDlg != NULL) { this->m_modelSetupDlg->m_toolBoxPosition.Restore(); } if (this->m_selectionSetupDlg != NULL) { this->m_selectionSetupDlg->m_toolBoxPosition.Restore(); } } void lxFrame::OnMove(wxMoveEvent& event) { if ((event.GetPosition().x > 0) || (event.GetPosition().y > 0)) { if (this->m_viewpointSetupDlg != NULL) { this->m_viewpointSetupDlg->m_toolBoxPosition.Restore(); } if (this->m_modelSetupDlg != NULL) { this->m_modelSetupDlg->m_toolBoxPosition.Restore(); } if (this->m_selectionSetupDlg != NULL) { this->m_selectionSetupDlg->m_toolBoxPosition.Restore(); } } } void lxFrame::UpdateM2TB() { // perspective this->m_menuBar->Check(LXMENU_CAMERA_PERSP, !this->setup->cam_persp); this->m_menuBar->Check(LXMENU_VIEW_MODELSTP, this->m_modelSetupDlgOn); this->m_menuBar->Check(LXMENU_VIEW_VIEWPOINTSTP, this->m_viewpointSetupDlgOn); this->m_menuBar->Check(LXMENU_VIEW_SELECTIONSTP, this->m_selectionSetupDlgOn); this->m_toolBar->ToggleTool(LXTB_PERSP, !this->setup->cam_persp); // visibility this->m_toolBar->ToggleTool(LXTB_VISCENTERLINE, this->setup->m_vis_centerline); this->m_toolBar->ToggleTool(LXTB_VISWALLS, this->setup->m_vis_walls); this->m_toolBar->ToggleTool(LXTB_VISSURFACE, this->setup->m_vis_surface); this->m_toolBar->ToggleTool(LXTB_VISBBOX, this->setup->m_vis_bbox); this->m_toolBar->ToggleTool(LXTB_VISINDS, this->setup->m_vis_indicators); this->m_toolBar->ToggleTool(LXTB_VISENTRANCE, this->setup->m_vis_centerline_entrance); this->m_toolBar->ToggleTool(LXTB_VISFIX, this->setup->m_vis_centerline_fix); this->m_toolBar->ToggleTool(LXTB_VISSTATION, this->setup->m_vis_centerline_station); // rotation this->m_menuBar->Check(LXMENU_CAMERA_AUTOROTATE, this->canvas->m_sCameraAutoRotate); this->m_toolMenu->Check(LXMENU_CAMERA_AUTOROTATE, this->canvas->m_sCameraAutoRotate); this->m_toolBar->ToggleTool(LXTB_ROTATION, this->canvas->m_sCameraAutoRotate); // lock rotation this->m_menuBar->Check(LXMENU_CAMERA_LOCKROT, this->canvas->m_sCameraLockRotation); this->m_toolMenu->Check(LXMENU_CAMERA_LOCKROT, this->canvas->m_sCameraLockRotation); this->m_toolBar->ToggleTool(LXTB_LOCKROT, this->canvas->m_sCameraLockRotation); // stereo this->m_toolBar->ToggleTool(LXTB_STEREO, this->setup->cam_anaglyph); // dialogs this->m_toolBar->ToggleTool(LXTB_VIEWSTP, this->m_viewpointSetupDlgOn); this->m_toolMenu->Check(LXMENU_VIEW_VIEWPOINTSTP, this->m_viewpointSetupDlgOn); this->m_toolBar->ToggleTool(LXTB_SCENESTP, this->m_modelSetupDlgOn); this->m_toolMenu->Check(LXMENU_VIEW_MODELSTP, this->m_modelSetupDlgOn); // TODO: Tree button // this->m_toolMenu->Check(LXMENU_VIEW_SELECTIONSTP, this->m_selectionSetupDlgOn); // full screen this->m_toolBar->ToggleTool(LXTB_FULLSCREEN, this->IsFullScreen()); #ifdef LXLINUX this->m_toolBar->Show(!this->IsFullScreen()); #endif this->SetupUpdate(); } void lxFrame::TogglePerspective() { this->setup->cam_persp = !this->setup->cam_persp; this->canvas->ForceRefresh(); this->UpdateM2TB(); } #define lxFrameToggle(proc,item) void lxFrame::Toggle##proc() { \ this->setup->item = !this->setup->item; \ this->canvas->UpdateContents(); \ this->UpdateM2TB(); \ } #define lxFrameFastToggle(proc,item) void lxFrame::Toggle##proc() { \ this->setup->item = !this->setup->item; \ this->canvas->UpdateRenderList(); \ this->canvas->ForceRefresh(); \ this->UpdateM2TB(); \ } #define lxFrameFastSet(proc,item) void lxFrame::Set##proc(int value) { \ this->setup->item = value; \ this->canvas->UpdateRenderList(); \ this->canvas->ForceRefresh(); \ this->UpdateM2TB(); \ } lxFrameToggle(VisibilityCenterline, m_vis_centerline) lxFrameToggle(VisibilityCenterlineCave, m_vis_centerline_cave) lxFrameToggle(VisibilityCenterlineSurface, m_vis_centerline_surface) lxFrameToggle(VisibilityCenterlineSplay, m_vis_centerline_splay) lxFrameToggle(VisibilityCenterlineDuplicate, m_vis_centerline_duplicate) lxFrameToggle(VisibilityCenterlineFix, m_vis_centerline_fix) lxFrameToggle(VisibilityCenterlineEntrance, m_vis_centerline_entrance) lxFrameToggle(VisibilityCenterlineStation, m_vis_centerline_station) lxFrameToggle(VisibilityWalls, m_vis_walls) lxFrameToggle(VisibilitySurface, m_vis_surface) lxFrameToggle(VisibilityLabels, m_vis_labels) lxFrameToggle(VisibilityBBox, m_vis_bbox) lxFrameToggle(VisibilityGrid, m_vis_grid) lxFrameToggle(VisibilityIndicators, m_vis_indicators) lxFrameToggle(VisibilityStLabelName, m_stlabel_name) lxFrameToggle(VisibilityStLabelComment, m_stlabel_comment) lxFrameToggle(VisibilityStLabelAltitude, m_stlabel_altitude) lxFrameToggle(VisibilityStLabelSurvey, m_stlabel_survey) lxFrameFastSet(ColorMode, m_colormd) lxFrameFastToggle(ColorsApplyCenterline, m_colormd_app_centerline) lxFrameFastToggle(ColorsApplyWalls, m_colormd_app_walls) lxFrameToggle(WallsTransparency, m_walls_transparency) lxFrameToggle(SurfaceLighting, m_srf_lighting) lxFrameToggle(SurfaceTransparency, m_srf_transparency) void lxFrame::ToggleSurfaceTexture() { this->setup->m_srf_texture = !this->setup->m_srf_texture; this->setup->m_srf_lighting = !this->setup->m_srf_texture; this->canvas->UpdateContents(); this->UpdateM2TB(); } void lxFrame::ToggleStereo() { this->setup->cam_anaglyph = !this->setup->cam_anaglyph; this->canvas->SetFontColors(); this->canvas->UpdateRenderContents(); this->canvas->UpdateRenderList(); this->canvas->ForceRefresh(); this->UpdateM2TB(); } void lxFrame::ToggleStereoBW() { this->setup->cam_anaglyph_bw = !this->setup->cam_anaglyph_bw; this->canvas->UpdateRenderContents(); this->canvas->UpdateRenderList(); this->canvas->ForceRefresh(); this->UpdateM2TB(); } void lxFrame::ToggleRotation() { this->canvas->m_sCameraAutoRotate = !this->canvas->m_sCameraAutoRotate; if (this->canvas->m_sCameraAutoRotate) { this->canvas->m_sCameraAutoRotateCounter = 0; this->canvas->m_sCameraAutoRotateSWatch.Start(); this->setup->StartCameraMovement(); } else { ((wxStaticText *)(this->m_viewpointSetupDlg->FindWindow(LXVSTP_RENSPEED)))->SetLabel(_T("")); } this->UpdateM2TB(); } void lxFrame::ToggleRotLock() { this->canvas->m_sCameraLockRotation = !this->canvas->m_sCameraLockRotation; this->UpdateM2TB(); } void lxFrame::ToggleModelSetup() { if (this->m_modelSetupDlgOn) { this->m_modelSetupDlg->m_toolBoxPosition.Save(); this->m_modelSetupDlg->Show(false); } else { this->m_modelSetupDlg->m_toolBoxPosition.Restore(); this->m_modelSetupDlg->Show(true); } this->m_modelSetupDlgOn = !this->m_modelSetupDlgOn; this->UpdateM2TB(); } void lxFrame::ToggleSelectionSetup() { if (this->m_selectionSetupDlgOn) { this->m_selectionSetupDlg->m_toolBoxPosition.Save(); this->m_selectionSetupDlg->Show(false); } else { this->m_selectionSetupDlg->m_toolBoxPosition.Restore(); this->m_selectionSetupDlg->Show(true); } this->m_selectionSetupDlgOn = !this->m_selectionSetupDlgOn; this->UpdateM2TB(); } void lxFrame::ToggleViewpointSetup() { if (this->m_viewpointSetupDlgOn) { this->m_viewpointSetupDlg->m_toolBoxPosition.Save(); this->m_viewpointSetupDlg->Show(false); } else { this->m_viewpointSetupDlg->m_toolBoxPosition.Restore(); this->m_viewpointSetupDlg->Show(true); } this->m_viewpointSetupDlgOn = !this->m_viewpointSetupDlgOn; this->UpdateM2TB(); } void lxFrame::SetupUpdate() { if (this == NULL) return; if (this->m_viewpointSetupDlgOn) this->m_viewpointSetupDlg->LoadSetup(); if (this->m_modelSetupDlgOn) this->m_modelSetupDlg->LoadSetup(); } void lxFrame::SetupApply() { } void lxFrame::ImportFile(wxString fName, int fType) { if (fType == 0) fType = this->GetFileType(fName); this->LoadData(fName, fType); } void lxFrame::LoadData(wxString fName, int fType) { wxBusyInfo info(_("Building 3D model, please wait...")); switch (fType) { case 1: this->data->m_input.ImportLOX(fName.mbc_str()); break; case 2: this->data->m_input.ImportPLT(fName.mbc_str()); break; case 3: this->data->m_input.Import3D(fName.mbc_str()); break; default: this->data->m_input.m_error = "unable to detect file format"; break; } switch (this->m_iniWallsInterpolate) { case LXWALLS_INTERP_ALL_ONLY: if (!this->data->m_input.HasAnyWalls()) this->data->m_input.InterpolateMissingLRUD(); break; case LXWALLS_INTERP_MISSING: this->data->m_input.InterpolateMissingLRUD(); break; } if (this->data->m_input.m_error.length() > 0) { wxMessageBox(_("Error reading input file"), _("Error"), wxICON_ERROR | wxOK); } else { this->m_fileHistory->AddFileToHistory(this->m_fileName); } this->data->Rebuild(); this->canvas->UpdateRenderContents(); this->canvas->UpdateRenderList(); } void lxFrame::ReloadData() { this->canvas->Refresh(false); this->data->m_input.Clear(); this->LoadData(this->m_fileName, this->m_fileType); this->m_modelSetupDlg->InitSetup(); this->m_selectionSetupDlg->LoadData(); } //////////////////////////////////////////////////////////////////////// // Application //////////////////////////////////////////////////////////////////////// IMPLEMENT_APP(lxApp) bool lxApp::OnInit() { m_locale.Init(wxLANGUAGE_DEFAULT, wxLOCALE_LOAD_DEFAULT | wxLOCALE_CONV_ENCODING); m_locale.AddCatalog(wxT("loch")); m_path = wxFileName(this->argv[0]); vtkObject::GlobalWarningDisplayOff(); #if wxUSE_DISPLAY //multi screen support wxDisplay display(0); //Get the settings for screen 0 wxRect displayRect = display.GetGeometry(); #else wxSize scr = wxGetDisplaySize(); #endif wxFileSystem::AddHandler(new wxZipFSHandler); // Use a double-buffered visual if available, as it will give much smoother // animation. bool double_buffered = true; int wx_gl_attribs[] = { WX_GL_RGBA, WX_GL_DOUBLEBUFFER, 0 }; if (!InitGLVisual(wx_gl_attribs)) { int wx_gl_attribs_no_db[] = { WX_GL_RGBA, 0 }; if (!InitGLVisual(wx_gl_attribs_no_db)) { wxString m; m.Printf(_T("This version of loch requires OpenGL to work, but it isn't available")); wxMessageBox(m,_T("Loch") , wxOK | wxCENTRE | wxICON_EXCLAMATION); exit(1); } double_buffered = false; } #if wxUSE_DISPLAY this->frame = new lxFrame(this, _T("Loch"), wxPoint(displayRect.width / 8, displayRect.height / 8), wxSize(3 * displayRect.width / 4, 3 * displayRect.height / 4)); #else this->frame = new lxFrame(this, _T("Loch"), wxPoint(scr.x / 8, scr.y / 8), wxSize(3 * scr.x / 4, 3 * scr.y / 4)); #endif this->frame->Show(true); this->frame->canvas->SetFocus(); #if wxUSE_DISPLAY this->frame->canvas->OSCInit(displayRect.width, displayRect.height); #else this->frame->canvas->OSCInit(wxGetDisplaySize().x, wxGetDisplaySize().y); #endif if (this->argc > 1) { this->frame->m_fileToOpen = wxString(this->argv[1]); } return true; } void lxFrame::OpenFile(const wxString & fName) { wxFileName tmpFN(fName); this->m_fileName = tmpFN.GetFullPath(); this->m_fileDir = tmpFN.GetPath(); this->m_fileType = 0; this->DetectFileType(); this->ReloadData(); this->setup->ResetCamera(); this->canvas->ForceRefresh(); } void lxFrame::ExportRotationPictures() { wxMessageDialog dlg(this, _("This is only EXPERIMENTAL function! Are you sure?"), _("Warning"), wxYES_NO | wxNO_DEFAULT | wxICON_EXCLAMATION | wxCENTRE); if (dlg.ShowModal() != wxID_YES) return; int i; lxRenderData * tmpRD = new lxRenderData(); tmpRD->m_imgFileType = 1; tmpRD->m_askFName = false; this->canvas->setup->cam_orig_dir = this->canvas->setup->cam_dir; this->canvas->setup->cam_orig_dist = this->canvas->setup->cam_dist; this->canvas->setup->cam_orig_tilt = this->canvas->setup->cam_tilt; this->canvas->setup->cam_orig_center = this->canvas->setup->cam_center; this->canvas->setup->cam_orig_pos = this->canvas->setup->cam_pos; for(i = 0; i < 600; i++) { tmpRD->m_imgFileName = this->m_fileDir; tmpRD->m_imgFileName += _T("/"); tmpRD->m_imgFileName += wxString::Format(_T("ROT%04d.png"), i); tmpRD->Render(this, this->canvas); this->canvas->SwapBuffers(); if (i == 0) { tmpRD->Render(this, this->canvas); this->canvas->SwapBuffers(); tmpRD->Render(this, this->canvas); this->canvas->SwapBuffers(); } if (i < 599) { this->canvas->setup->RotateCameraF(0.6); } } delete tmpRD; } #ifdef LXMACOSX void lxApp::MacOpenFile(const wxString &fileName) { this->frame->OpenFile(fileName); } #endif therion/loch/lxGUI.h0000644000076400010400000001371112054165776015373 0ustar userAdministrators/** * @file lxGUI.h * Loch user interface. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef lxGUI_h #define lxGUI_h // Standard libraries #ifndef LXDEPCHECK #include #include #include #include #endif //LXDEPCHECK - standart libraries #include "lxGLC.h" enum { LXMENU_CAMERA_ADJUST = 1000, LXMENU_CAMERA_ROTCW, LXMENU_CAMERA_ROTCCW, LXMENU_CAMERA_UPPER, LXMENU_CAMERA_LOWER, LXMENU_CAMERA_UP, LXMENU_CAMERA_DOWN, LXMENU_CAMERA_LEFT, LXMENU_CAMERA_RIGHT, LXMENU_CAMERA_ZOOMIN, LXMENU_CAMERA_ZOOMOUT, LXMENU_CAMERA_ORIENT, LXMENU_CAMERA_ORIENT_HOME, LXMENU_CAMERA_ORIENT_PLAN, LXMENU_CAMERA_ORIENT_PROFILE, LXMENU_CAMERA_ORIENT_NORTH, LXMENU_CAMERA_ORIENT_SOUTH, LXMENU_CAMERA_ORIENT_EAST, LXMENU_CAMERA_ORIENT_WEST, LXMENU_CAMERA_EXTENDS, LXMENU_CAMERA_DEFAULTS, LXMENU_CAMERA_PERSP, LXMENU_CAMERA_AUTOROTATE, LXMENU_CAMERA_LOCKROT, LXMENU_VIEW, LXMENU_VIEW_FULLSCREEN, LXMENU_VIEW_MODELSTP, LXMENU_VIEW_SELECTIONSTP, LXMENU_VIEW_VIEWPOINTSTP, LXMENU_TOOLS_OPTIONS, LXMENU_VIEWEND, LXMENU_EDIT_UNDO, LXMENU_EDIT_REDO, LXMENU_FILE_OPEN, LXMENU_FILE_RELOAD, LXMENU_FILE_RENDER, LXMENU_FILE_RENDER_SETUP, LXMENU_FILE_EXPORT, LXMENU_FILE_IMPORT, LXMENU_HELP_CONTENTS, LXMENU_HELP_CONTROL, LXMENU_HELP_RENDERING, LXMENU_HELP_BUGS, LXMENU_HELP_ABOUT, LXMENU_EXPFIT, LXMENU_EXPROT, LXTB, LXTB_OPEN, LXTB_RELOAD, LXTB_RENDER, LXTB_RENDER_SETUP, LXTB_VIEWPOINT, LXTB_PERSP, LXTB_ROTATION, LXTB_LOCKROT, LXTB_PLAN, LXTB_PROFILE, LXTB_FIT, LXTB_HOME, LXTB_FULLSCREEN, LXTB_STEREO, LXTB_VIEWSTP, LXTB_SCENESTP, LXTB_VISCENTERLINE, LXTB_VISWALLS, LXTB_VISSURFACE, LXTB_VISBBOX, LXTB_VISINDS, LXTB_VISENTRANCE, LXTB_VISFIX, LXTB_VISSTATION, LXTB_VISLABEL, LXTBEND, }; enum { LXWALLS_INTERP_NONE, LXWALLS_INTERP_ALL_ONLY, LXWALLS_INTERP_MISSING, }; enum { LXUNITS_METRIC, LXUNITS_IMPERIAL, }; class lxFrame: public wxFrame { public: lxGLCanvas * canvas; wxString m_fileDir, m_fileToOpen, m_fileName; int m_fileType; struct lxData * data; struct lxSetup * setup; struct lxRenderData * m_renderData; class lxModelSetupDlg * m_modelSetupDlg; bool m_modelSetupDlgOn; class lxModelTreeDlg * m_selectionSetupDlg; bool m_selectionSetupDlgOn; class lxViewpointSetupDlg * m_viewpointSetupDlg; bool m_viewpointSetupDlgOn; wxMenuBar * m_menuBar; wxToolBar * m_toolBar; wxMenu * m_viewpointMenu, * m_toolMenu; wxAcceleratorTable m_menuAccelTable; wxFileConfig * m_fileConfig; wxFileHistory * m_fileHistory; wxString m_iniDirectory; long m_iniUnits; int m_iniStereoGlasses; int m_iniStereoGlassesLast; long m_iniWallsInterpolate; class lxApp * m_app; class wxHelpController * m_helpController; lxFrame(class lxApp * app, const wxString& title, const wxPoint& pos, const wxSize& size, long style = wxDEFAULT_FRAME_STYLE); virtual ~lxFrame(); void OnExit(wxCommandEvent& event); void OnAll(wxCommandEvent& event); void OnMenuCameraMove(wxCommandEvent& event); void OnMenuCameraOrient(wxCommandEvent& event); void OnSize(wxSizeEvent& event); void OnMove(wxMoveEvent& event); void TogglePerspective(); void ToggleStereo(); void ToggleStereoBW(); void ToggleRotation(); void ToggleRotLock(); void ToggleFullScreen(); void ToggleModelSetup(); void ToggleSelectionSetup(); void ToggleViewpointSetup(); void ToggleVisibilityCenterline(); void ToggleVisibilityCenterlineCave(); void ToggleVisibilityCenterlineSurface(); void ToggleVisibilityCenterlineSplay(); void ToggleVisibilityCenterlineDuplicate(); void ToggleVisibilityCenterlineFix(); void ToggleVisibilityCenterlineStation(); void ToggleVisibilityCenterlineEntrance(); void ToggleVisibilitySurface(); void ToggleVisibilityWalls(); void ToggleVisibilityLabels(); void ToggleVisibilityBBox(); void ToggleVisibilityGrid(); void ToggleVisibilityIndicators(); void ToggleVisibilityStLabelName(); void ToggleVisibilityStLabelComment(); void ToggleVisibilityStLabelAltitude(); void ToggleVisibilityStLabelSurvey(); void ExportRotationPictures(); void SetColorMode(int); void DetectFileType(); int GetFileType(wxString fName); void ToggleColorsApplyCenterline(); void ToggleColorsApplyWalls(); void ToggleSurfaceTexture(); void ToggleSurfaceTransparency(); void ToggleSurfaceLighting(); void ToggleWallsTransparency(); void SetupUpdate(); void SetupApply(); void OpenFile(const wxString & fName); void ImportFile(const wxString fName, int fType); void LoadData(wxString fName, int fType); void ReloadData(); void UpdateM2TB(); DECLARE_EVENT_TABLE() }; // lxFrame class lxApp: public wxGLApp { public: class lxFrame * frame; wxLocale m_locale; wxFileName m_path; bool OnInit(); #ifdef LXMACOSX virtual void MacOpenFile(const wxString &fileName); #endif }; // lxApp #endif therion/loch/lxImgIO.cxx0000644000076400010400000004161610537464734016273 0ustar userAdministrators#include "lxImgIO.h" // Standard libraries #ifndef LXDEPCHECK #include #include #include #include #ifdef __cplusplus extern "C" { // stupid JPEG library #endif #include #ifdef __cplusplus } #endif #endif //LXDEPCHECK - standart libraries /******************** JPEG COMPRESSION SAMPLE INTERFACE *******************/ /* This half of the example shows how to feed data into the JPEG compressor. * We present a minimal version that does not worry about refinements such * as error recovery (the JPEG code will just exit() if it gets an error). */ /* * IMAGE DATA FORMATS: * * The standard input image format is a rectangular array of pixels, with * each pixel having the same number of "component" values (color channels). * Each pixel row is an array of JSAMPLEs (which typically are unsigned chars). * If you are working with color data, then the color values for each pixel * must be adjacent in the row; for example, R,G,B,R,G,B,R,G,B,... for 24-bit * RGB color. * * For this example, we'll assume that this data structure matches the way * our application has stored the image in memory, so we can just pass a * pointer to our image buffer. In particular, let's say that the image is * RGB color and is described by: */ //extern JSAMPLE * image_buffer; /* Points to large array of R,G,B-order data */ //extern int image_height; /* Number of rows in image */ //extern int image_width; /* Number of columns in image */ /* * Sample routine for JPEG compression. We assume that the target file name * and a compression quality factor are passed in. */ GLOBAL(bool) lxWrite_JPEG_file (const char * filename, int quality, lxImageRGB img) { int image_width = img.width; int image_height = img.height; unsigned char* image = img.data; JSAMPLE * image_buffer = (JSAMPLE *) image; /* This struct contains the JPEG compression parameters and pointers to * working space (which is allocated as needed by the JPEG library). * It is possible to have several such structures, representing multiple * compression/decompression processes, in existence at once. We refer * to any one struct (and its associated working data) as a "JPEG object". */ struct jpeg_compress_struct cinfo; /* This struct represents a JPEG error handler. It is declared separately * because applications often want to supply a specialized error handler * (see the second half of this file for an example). But here we just * take the easy way out and use the standard error handler, which will * print a message on stderr and call exit() if compression fails. * Note that this struct must live as long as the main JPEG parameter * struct, to avoid dangling-pointer problems. */ struct jpeg_error_mgr jerr; /* More stuff */ FILE * outfile; /* target file */ JSAMPROW row_pointer[1]; /* pointer to JSAMPLE row[s] */ int row_stride; /* physical row width in image buffer */ /* Step 1: allocate and initialize JPEG compression object */ /* We have to set up the error handler first, in case the initialization * step fails. (Unlikely, but it could happen if you are out of memory.) * This routine fills in the contents of struct jerr, and returns jerr's * address which we place into the link field in cinfo. */ cinfo.err = jpeg_std_error(&jerr); /* Now we can initialize the JPEG compression object. */ jpeg_create_compress(&cinfo); /* Step 2: specify data destination (eg, a file) */ /* Note: steps 2 and 3 can be done in either order. */ /* Here we use the library-supplied code to send compressed data to a * stdio stream. You can also write your own code to do something else. * VERY IMPORTANT: use "b" option to fopen() if you are on a machine that * requires it in order to write binary files. */ if ((outfile = fopen(filename, "wb")) == NULL) { lxImgIOError = "can't open file for output"; //fprintf(stderr, "can't open %s\n", filename); return(false); //exit(1); } jpeg_stdio_dest(&cinfo, outfile); /* Step 3: set parameters for compression */ /* First we supply a description of the input image. * Four fields of the cinfo struct must be filled in: */ cinfo.image_width = image_width; /* image width and height, in pixels */ cinfo.image_height = image_height; cinfo.input_components = 3; /* # of color components per pixel */ cinfo.in_color_space = JCS_RGB; /* colorspace of input image */ /* Now use the library's routine to set default compression parameters. * (You must set at least cinfo.in_color_space before calling this, * since the defaults depend on the source color space.) */ jpeg_set_defaults(&cinfo); /* Now you can set any non-default parameters you wish to. * Here we just illustrate the use of quality (quantization table) scaling: */ jpeg_set_quality(&cinfo, quality, TRUE /* limit to baseline-JPEG values */); /* Step 4: Start compressor */ /* TRUE ensures that we will write a complete interchange-JPEG file. * Pass TRUE unless you are very sure of what you're doing. */ jpeg_start_compress(&cinfo, TRUE); /* Step 5: while (scan lines remain to be written) */ /* jpeg_write_scanlines(...); */ /* Here we use the library's state variable cinfo.next_scanline as the * loop counter, so that we don't have to keep track ourselves. * To keep things simple, we pass one scanline per call; you can pass * more if you wish, though. */ row_stride = image_width * 3; /* JSAMPLEs per row in image_buffer */ while (cinfo.next_scanline < cinfo.image_height) { /* jpeg_write_scanlines expects an array of pointers to scanlines. * Here the array is only one element long, but you could pass * more than one scanline at a time if that's more convenient. */ row_pointer[0] = & image_buffer[cinfo.next_scanline * row_stride]; (void) jpeg_write_scanlines(&cinfo, row_pointer, 1); } /* Step 6: Finish compression */ jpeg_finish_compress(&cinfo); /* After finish_compress, we can close the output file. */ fclose(outfile); /* Step 7: release JPEG compression object */ /* This is an important step since it will release a good deal of memory. */ jpeg_destroy_compress(&cinfo); /* And we're done! */ return(true); } /* * SOME FINE POINTS: * * In the above loop, we ignored the return value of jpeg_write_scanlines, * which is the number of scanlines actually written. We could get away * with this because we were only relying on the value of cinfo.next_scanline, * which will be incremented correctly. If you maintain additional loop * variables then you should be careful to increment them properly. * Actually, for output to a stdio stream you needn't worry, because * then jpeg_write_scanlines will write all the lines passed (or else exit * with a fatal error). Partial writes can only occur if you use a data * destination module that can demand suspension of the compressor. * (If you don't know what that's for, you don't need it.) * * If the compressor requires full-image buffers (for entropy-coding * optimization or a multi-scan JPEG file), it will create temporary * files for anything that doesn't fit within the maximum-memory setting. * (Note that temp files are NOT needed if you use the default parameters.) * On some systems you may need to set up a signal handler to ensure that * temporary files are deleted if the program is interrupted. See libjpeg.doc. * * Scanlines MUST be supplied in top-to-bottom order if you want your JPEG * files to be compatible with everyone else's. If you cannot readily read * your data in that order, you'll need an intermediate array to hold the * image. See rdtarga.c or rdbmp.c for examples of handling bottom-to-top * source data using the JPEG code's internal virtual-array mechanisms. */ /******************** JPEG DECOMPRESSION SAMPLE INTERFACE *******************/ /* This half of the example shows how to read data from the JPEG decompressor. * It's a bit more refined than the above, in that we show: * (a) how to modify the JPEG library's standard error-reporting behavior; * (b) how to allocate workspace using the library's memory manager. * * Just to make this example a little different from the first one, we'll * assume that we do not intend to put the whole image into an in-memory * buffer, but to send it line-by-line someplace else. We need a one- * scanline-high JSAMPLE array as a work buffer, and we will let the JPEG * memory manager allocate it for us. This approach is actually quite useful * because we don't need to remember to deallocate the buffer separately: it * will go away automatically when the JPEG object is cleaned up. */ /* * ERROR HANDLING: * * The JPEG library's standard error handler (jerror.c) is divided into * several "methods" which you can override individually. This lets you * adjust the behavior without duplicating a lot of code, which you might * have to update with each future release. * * Our example here shows how to override the "error_exit" method so that * control is returned to the library's caller when a fatal error occurs, * rather than calling exit() as the standard error_exit method does. * * We use C's setjmp/longjmp facility to return control. This means that the * routine which calls the JPEG library must first execute a setjmp() call to * establish the return point. We want the replacement error_exit to do a * longjmp(). But we need to make the setjmp buffer accessible to the * error_exit routine. To do this, we make a private extension of the * standard JPEG error handler object. (If we were using C++, we'd say we * were making a subclass of the regular error handler.) * * Here's the extended error handler struct: */ struct my_error_mgr { struct jpeg_error_mgr pub; /* "public" fields */ jmp_buf setjmp_buffer; /* for return to caller */ }; typedef struct my_error_mgr * my_error_ptr; /* * Here's the routine that will replace the standard error_exit method: */ METHODDEF(void) my_error_exit (j_common_ptr cinfo) { /* cinfo->err really points to a my_error_mgr struct, so coerce pointer */ my_error_ptr myerr = (my_error_ptr) cinfo->err; /* Always display the message. */ /* We could postpone this until after returning, if we chose. */ (*cinfo->err->output_message) (cinfo); /* Return control to the setjmp point */ longjmp(myerr->setjmp_buffer, 1); } /* * Sample routine for JPEG decompression. We assume that the source file name * is passed in. We want to return 1 on success, 0 on error. */ GLOBAL(lxImageRGB) lxRead_JPEG_file (const char * filename, FILE * infile) { /* This struct contains the JPEG decompression parameters and pointers to * working space (which is allocated as needed by the JPEG library). */ struct jpeg_decompress_struct cinfo; /* We use our private extension JPEG error handler. * Note that this struct must live as long as the main JPEG parameter * struct, to avoid dangling-pointer problems. */ struct my_error_mgr jerr; /* More stuff */ //FILE * infile; /* source file */ JSAMPARRAY buffer; /* Output row buffer */ int row_stride; /* physical row width in output buffer */ /* In this example we want to open the input file before doing anything else, * so that the setjmp() error recovery below can assume the file is open. * VERY IMPORTANT: use "b" option to fopen() if you are on a machine that * requires it in order to read binary files. */ if (infile == NULL) { if ((infile = fopen(filename, "rb")) == NULL) { lxImgIOError = "can't open file for input"; //fprintf(stderr, "can't open %s\n", filename); return lxImageRGB(); } } /* Step 1: allocate and initialize JPEG decompression object */ /* We set up the normal JPEG error routines, then override error_exit. */ cinfo.err = jpeg_std_error(&jerr.pub); jerr.pub.error_exit = my_error_exit; /* Establish the setjmp return context for my_error_exit to use. */ if (setjmp(jerr.setjmp_buffer)) { /* If we get here, the JPEG code has signaled an error. * We need to clean up the JPEG object, close the input file, and return. */ jpeg_destroy_decompress(&cinfo); fclose(infile); lxImgIOError = "error reading JPEG file"; return lxImageRGB(); } /* Now we can initialize the JPEG decompression object. */ jpeg_create_decompress(&cinfo); /* Step 2: specify data source (eg, a file) */ jpeg_stdio_src(&cinfo, infile); /* Step 3: read file parameters with jpeg_read_header() */ (void) jpeg_read_header(&cinfo, TRUE); /* We can ignore the return value from jpeg_read_header since * (a) suspension is not possible with the stdio data source, and * (b) we passed TRUE to reject a tables-only JPEG file as an error. * See libjpeg.doc for more info. */ /* Step 4: set parameters for decompression */ /* In this example, we don't need to change any of the defaults set by * jpeg_read_header(), so we do nothing here. */ /* Step 5: Start decompressor */ (void) jpeg_start_decompress(&cinfo); /* We can ignore the return value since suspension is not possible * with the stdio data source. */ /* We may need to do some setup of our own at this point before reading * the data. After jpeg_start_decompress() we have the correct scaled * output image dimensions available, as well as the output colormap * if we asked for color quantization. * In this example, we need to make an output work buffer of the right size. */ /* JSAMPLEs per row in output buffer */ row_stride = cinfo.output_width * cinfo.output_components; /* Make a one-row-high sample array that will go away when done with image */ buffer = (*cinfo.mem->alloc_sarray) ((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1); /* Step 6: while (scan lines remain to be read) */ /* jpeg_read_scanlines(...); */ lxImageRGB img; img.width = cinfo.output_width; img.height = cinfo.output_height; img.data = (unsigned char*)malloc(cinfo.output_components * img.width * img.height); unsigned char* ptr = img.data; /* Here we use the library's state variable cinfo.output_scanline as the * loop counter, so that we don't have to keep track ourselves. */ while (cinfo.output_scanline < cinfo.output_height) { /* jpeg_read_scanlines expects an array of pointers to scanlines. * Here the array is only one element long, but you could ask for * more than one scanline at a time if that's more convenient. */ (void) jpeg_read_scanlines(&cinfo, buffer, 1); /* Assume put_scanline_someplace wants a pointer and sample count. */ memcpy(ptr, buffer[0], row_stride); ptr += row_stride; } /* Step 7: Finish decompression */ (void) jpeg_finish_decompress(&cinfo); /* We can ignore the return value since suspension is not possible * with the stdio data source. */ /* Step 8: Release JPEG decompression object */ /* This is an important step since it will release a good deal of memory. */ jpeg_destroy_decompress(&cinfo); /* After finish_decompress, we can close the input file. * Here we postpone it until after no more JPEG errors are possible, * so as to simplify the setjmp error logic above. (Actually, I don't * think that jpeg_destroy can do an error exit, but why assume anything...) */ fclose(infile); /* At this point you may want to check to see whether any corrupt-data * warnings occurred (test whether jerr.pub.num_warnings is nonzero). */ /* And we're done! */ return img; } /* * SOME FINE POINTS: * * In the above code, we ignored the return value of jpeg_read_scanlines, * which is the number of scanlines actually read. We could get away with * this because we asked for only one line at a time and we weren't using * a suspending data source. See libjpeg.doc for more info. * * We cheated a bit by calling alloc_sarray() after jpeg_start_decompress(); * we should have done it beforehand to ensure that the space would be * counted against the JPEG max_memory setting. In some systems the above * code would risk an out-of-memory error. However, in general we don't * know the output image dimensions before jpeg_start_decompress(), unless we * call jpeg_calc_output_dimensions(). See libjpeg.doc for more about this. * * Scanlines are returned in the same order as they appear in the JPEG file, * which is standardly top-to-bottom. If you must emit data bottom-to-top, * you can use one of the virtual arrays provided by the JPEG memory manager * to invert the data. See wrbmp.c for an example. * * As with compression, some operating modes may require temporary files. * On some systems you may need to set up a signal handler to ensure that * temporary files are deleted if the program is interrupted. See libjpeg.doc. */ void lxImageRGBFree(lxImageRGB & img) { if (img.data != NULL) free(img.data); img.data = NULL; } char * lxImgIOError = "unknown"; therion/loch/lxImgIO.h0000644000076400010400000000143310537464734015711 0ustar userAdministrators#ifndef lxImgIO_h #define lxImgIO_h // Standard libraries #ifndef LXDEPCHECK #include #include #endif //LXDEPCHECK - standart libraries #ifndef UCHAR #define UCHAR typedef unsigned char uchar; #endif extern char * lxImgIOError; // struct for handling images struct lxImageRGB { uchar* data; //pixel data in RGB format. sizeof(data) == 3 * width * height; int width, height; lxImageRGB() : data(NULL), width(0), height(0) {} }; /* Compress image into JPEG, and save it to disk quality must be in range 0-100 */ bool lxWrite_JPEG_file (const char * filename, int quality, lxImageRGB img); /* Load and decompress JPEG image from disk */ lxImageRGB lxRead_JPEG_file (const char * filename, FILE * infile = NULL); void lxImageRGBFree(lxImageRGB & img); #endif therion/loch/lxLRUD.cxx0000644000076400010400000005323611577054400016064 0ustar userAdministrators#include "lxLRUD.h" // Standard libraries #ifndef LXDEPCHECK #include #include #include #include #include #endif //LXDEPCHECK - standart libraries static const double lxVecPrec = 0.01; long lxLRUDData::GetStationID(lxVec pos, bool insert) { std::map::iterator smi; smi = this->station_map.find(pos); if (smi == this->station_map.end()) { if (insert) { this->station_map[pos] = this->nstations; nstations++; return (this->nstations - 1); } else { return -1; } } else { return smi->second; } } void lxLRUD::SetVThreshold(double vt) { this->i.currentVT = vt; } void lxLRUD::SetProfile(int sec_type) { this->i.currentProfile = sec_type; } void lxLRUD::InsertShot(double * from, double * to, double * fromLRUD, double * toLRUD, void * usrData) { lxLRUDShot shot; shot.fl = fromLRUD[0]; shot.fr = fromLRUD[1]; shot.fu = fromLRUD[2]; shot.fd = fromLRUD[3]; shot.tl = toLRUD[0]; shot.tr = toLRUD[1]; shot.tu = toLRUD[2]; shot.td = toLRUD[3]; shot.vthresh = this->i.currentVT; shot.profile = this->i.currentProfile; shot.from = lxVec(from[0], from[1], from[2]); shot.to = lxVec(to[0], to[1], to[2]); shot.xfrom = this->i.GetStationID(shot.from, true); shot.xto = this->i.GetStationID(shot.to, true); shot.usr_data = usrData; this->i.shots.insert(this->i.shots.end(), shot); } struct xcEdge { size_t fx, tx; lxLRUDShot * shot; lxVec dir; bool used; xcEdge() : fx(0), tx(0), shot(NULL), used(false) {} }; struct xcNodeArrow { xcEdge * edge; bool orient; xcNodeArrow() : edge(NULL), orient(true) {} xcNodeArrow(xcEdge * e, bool o) : edge(e), orient(o) {} lxVec GetDir(); size_t GetFX(); double GetFU(); double GetFD(); double GetFL(); double GetFR(); size_t GetTX(); double GetTU(); double GetTD(); double GetTL(); double GetTR(); }; lxVec xcNodeArrow::GetDir() { return (this->orient ? 1.0 : -1.0) * this->edge->dir; } size_t xcNodeArrow::GetFX() { return (this->orient ? this->edge->fx : this->edge->tx); } size_t xcNodeArrow::GetTX() { return (this->orient ? this->edge->tx : this->edge->fx); } #define xcNAGet(d,e,f) double xcNodeArrow::Get##d() { \ return (this->orient ? lxMax(this->edge->shot->e, lxVecPrec) : lxMax(this->edge->shot->f, lxVecPrec)); \ } xcNAGet(TU,tu,fu) xcNAGet(TD,td,fd) xcNAGet(TL,tl,fr) xcNAGet(TR,tr,fl) xcNAGet(FU,fu,tu) xcNAGet(FD,fd,td) xcNAGet(FL,fl,tr) xcNAGet(FR,fr,tl) struct xcNode { size_t id; lxVec p; std::list arrows; }; struct xcSeriesStart { double prob; xcNodeArrow arrow; }; bool operator < (const xcSeriesStart & s, const xcSeriesStart & t) { return s.prob < t.prob; } enum { LXPE_FLAT, LXPE_ROUND, LXPE_CONT, }; struct xcSeriesArrow { xcNodeArrow arrow; xcSeriesArrow * next, * prev; int fType, tType, fXMin, tXMin; lxVec f, t, ft, sDir, uDir, rDir, fDir, nfDir, tDir, ntDir; double fDist, tDist; lxTriGeomPoint fp[9], tp[9], nfp[9], ntp[9]; lxPlane fPlane, tPlane, nfPlane, ntPlane; xcSeriesArrow() : next(NULL), prev(NULL) {} }; void lxLRUD::Calculate() { // TODO - more sophisticated LRUD modelling :) std::list::iterator shi; lxVec shotDir, uDir, rDir; double pX[8], pY[8]; int prevProfile, i; prevProfile = -1; double ca, ci; // 1. traverse all shots and create a list of nodes size_t csx, cex, nedg, cnx, nnod; std::map stMap; std::map::iterator stMapIter; nedg = this->i.shots.size(); nnod = 0; if (nedg == 0) return; xcEdge * edges = new xcEdge [nedg], * cedge; for(csx = 0, shi = this->i.shots.begin(); shi != this->i.shots.end(); shi++) { cedge = &(edges[csx]); cedge->shot = &(*shi); stMapIter = stMap.find(shi->from); if (stMapIter == stMap.end()) { cedge->fx = nnod; stMap[shi->from] = nnod++; } else { cedge->fx = stMapIter->second; } stMapIter = stMap.find(shi->to); if (stMapIter == stMap.end()) { cedge->tx = nnod; stMap[shi->to] = nnod++; } else { cedge->tx = stMapIter->second; } if (cedge->fx != cedge->tx) csx++; else nedg--; } if (nedg == 0) { delete [] edges; return; } xcNode * nodes = new xcNode [nnod], * cnode; for(stMapIter = stMap.begin(); stMapIter != stMap.end(); stMapIter++) { nodes[stMapIter->second].id = stMapIter->second; nodes[stMapIter->second].p = stMapIter->first; } // 2. for each node, create a list of edges (with edge orientation) for(cex = 0; cex < nedg; cex++) { cedge = &(edges[cex]); cedge->dir = nodes[cedge->tx].p - nodes[cedge->fx].p; cedge->dir.Normalize(); nodes[cedge->fx].arrows.push_back(xcNodeArrow(cedge, true)); nodes[cedge->tx].arrows.push_back(xcNodeArrow(cedge, false)); } // 3. calculate series starting arrow probabilities std::vector sstarts; size_t narrows; xcSeriesStart sstart; std::list::iterator nait; for (cnx = 0; cnx < nnod; cnx++) { cnode = &(nodes[cnx]); narrows = cnode->arrows.size(); for (nait = cnode->arrows.begin(); nait != cnode->arrows.end(); nait++) { sstart.arrow = *nait; sstart.prob = ((narrows % 2 == 0) ? 1.0 : -1.0) / double (narrows); sstarts.push_back(sstart); } } std::sort(sstarts.begin(), sstarts.end()); // 4. create series bool nextarrow = true; xcSeriesArrow sarrow; xcNodeArrow parrow, narrow; xcNode * lastN; std::list series; std::list::iterator si; xcSeriesArrow * psi; std::vector::iterator ssi; sarrow.arrow = sstarts[0].arrow; sarrow.arrow.edge->used = true; series.push_back(sarrow); parrow = sarrow.arrow; while (nextarrow) { // find next arrow from parrow nextarrow = false; lastN = &(nodes[parrow.GetTX()]); for(nait = lastN->arrows.begin(); nait != lastN->arrows.end(); nait++) { if (!nait->edge->used) { if (nextarrow) { if ((nait->GetDir() * parrow.GetDir()) > (narrow.GetDir() * parrow.GetDir())) { narrow = *nait; } } else { nextarrow = true; narrow = *nait; } } } // if not found, find new start arrow if (!nextarrow) { for(ssi = sstarts.begin(); ssi != sstarts.end(); ssi++) { if (!ssi->arrow.edge->used) { narrow = ssi->arrow; nextarrow = true; break; } } } // add new series item if (nextarrow) { narrow.edge->used = true; sarrow.arrow = narrow; series.push_back(sarrow); } parrow = narrow; } xcSeriesArrow * first, * prev; first = NULL; prev = NULL; for(si = series.begin(); si != series.end(); si++) { if (prev != NULL) { if (si->arrow.GetFX() == prev->arrow.GetTX()) { si->prev = prev; prev->next = &(*si); } else { if ((first != NULL) && (first->arrow.GetFX() == prev->arrow.GetTX())) { prev->next = first; first->prev = prev; } first = NULL; } } prev = &(*si); if (first == NULL) first = prev; } if ((first != NULL) && (first->arrow.GetFX() == prev->arrow.GetTX())) { prev->next = first; first->prev = prev; } for(si = series.begin(); si != series.end(); si++) { si->fType = LXPE_CONT; si->tType = LXPE_CONT; if (si->prev == NULL) { if (nodes[si->arrow.GetFX()].arrows.size() == 1) { si->fType = LXPE_FLAT; } else { si->fType = LXPE_ROUND; } } if (si->next == NULL) { if (nodes[si->arrow.GetTX()].arrows.size() == 1) { si->tType = LXPE_FLAT; } else { si->tType = LXPE_ROUND; } } } for(si = series.begin(); si != series.end(); si++) { psi = &(*si); #define pXY(i,x,y) pX[i] = x; pY[i] = y; //if (shi->profile != prevProfile) { if (psi->arrow.edge->shot->profile != prevProfile) { switch (psi->arrow.edge->shot->profile) { case LXLRUD_TUNNEL: pXY(0,0.0,1.0) pXY(1,0.5,0.75) pXY(2,0.8,0.0) pXY(3,1.0,-1.0) pXY(4,0.0,-1.0) pXY(5,-1.0,-1.0) pXY(6,-0.8,0.0) pXY(7,-0.5,0.75) break; case LXLRUD_DIAMOND: pXY(0,0.0,1.0) pXY(1,0.5,0.5) pXY(2,1.0,0.0) pXY(3,0.5,-0.5) pXY(4,0.0,-1.0) pXY(5,-0.5,-0.5) pXY(6,-1.0,0.0) pXY(7,-0.5,0.5) break; case LXLRUD_SQUARE: pXY(0,0.0,1.0) pXY(1,1.0,1.0) pXY(2,1.0,0.0) pXY(3,1.0,-1.0) pXY(4,0.0,-1.0) pXY(5,-1.0,-1.0) pXY(6,-1.0,0.0) pXY(7,-1.0,1.0) break; default: pXY(0,0.0,1.0) pXY(1,0.707,0.707) pXY(2,1.0,0.0) pXY(3,0.707,-0.707) pXY(4,0.0,-1.0) pXY(5,-0.707,-0.707) pXY(6,-1.0,0.0) pXY(7,-0.707,0.707) break; } } prevProfile = psi->arrow.edge->shot->profile; shotDir = nodes[si->arrow.GetTX()].p - nodes[si->arrow.GetFX()].p; rDir = lxVec(shotDir.y, -shotDir.x, 0.0); if (rDir.Norm() == 0.0) { rDir = lxVec(1.0, 0.0, 0.0); uDir = lxVec(0.0, (shotDir.z < 0 ? 1.0 : -1.0), 0.0); } else { rDir.Normalize(); ci = shotDir.Inclination(); if (fabs(ci) < si->arrow.edge->shot->vthresh) uDir = lxVec(0.0, 0.0, 1.0); else { uDir = lxVec(0.0, 1.0, 0.0); ca = shotDir.Azimuth(); uDir = lxPol2Vec(1.0, (ci >= 0.0 ? ca + 180.0 : ca), (ci >= 0.0 ? 90 - ci : 90 + ci)); } } si->uDir = uDir; si->rDir = rDir; si->sDir = uDir ^ rDir; si->sDir.Normalize(); si->f = nodes[si->arrow.GetFX()].p; si->t = nodes[si->arrow.GetTX()].p; si->ft = si->t - si->f; si->tDir = si->sDir; si->fDir = si->sDir; si->fPlane.Init(si->f, si->fDir); si->tPlane.Init(si->t, si->tDir); si->fXMin = -1; si->tXMin = -1; si->fDist = -1.0; si->tDist = -1.0; for(i = 0; i < 8; i++) { si->fp[i].p = si->f + pX[i] * (pX[i] > 0 ? si->arrow.GetFR() : si->arrow.GetFL()) * rDir + pY[i] * (pY[i] > 0 ? si->arrow.GetFU() : si->arrow.GetFD()) * uDir; si->tp[i].p = si->t + pX[i] * (pX[i] > 0 ? si->arrow.GetTR() : si->arrow.GetTL()) * rDir + pY[i] * (pY[i] > 0 ? si->arrow.GetTU() : si->arrow.GetTD()) * uDir; } } // spocitajme fDir a tDir, fPlane a tPlane for(si = series.begin(); si != series.end(); si++) { psi = &(*si); if (si->next != NULL) { si->tDir = si->sDir + si->next->sDir; if (si->tDir.Norm() < 1E-6) { if (si->tType == LXPE_CONT) { si->tType = LXPE_ROUND; si->next->fType = LXPE_ROUND; } } else { si->tDir.Normalize(); si->next->fDir = si->tDir; si->tPlane.Init(si->t, si->tDir); si->next->fPlane = si->tPlane; } } } // spocitajme body na fPlane a tPlane lxVec ffp[8], ttp[8], nsDir; lxPlane sPlane; double sDistMax(0.0), sDistMin(0.0), sDistCur; int sXMax(0), sXMin(0); bool allOK; for(si = series.begin(); si != series.end(); si++) { psi = &(*si); // spocitajme tPlane allOK = true; sPlane.Init(si->t, si->sDir); for(i = 0; i < 8; i++) { allOK = allOK && (si->tPlane.CalcIntersection(si->fp[i], si->tp[i], ttp[i])); sDistCur = sPlane.CalcPosition(ttp[i]); if (i == 0) { sDistMax = sDistCur; sXMax = 0; sDistMin = sDistCur; sXMin = 0; } else { if (sDistCur > sDistMax) { sDistMax = sDistCur; sXMax = i; } if (sDistCur < sDistMin) { sDistMin = sDistCur; sXMin = i; } } } if (sXMin != sXMax) { nsDir = ttp[sXMin] - si->tp[sXMax]; if (nsDir.Norm() > 0) nsDir.Normalize(); else allOK = false; si->ntDir = nsDir ^ si->tDir; si->ntDir = nsDir ^ si->ntDir; if ((si->ntDir * si->sDir) < 0) si->ntDir *= -1.0; else if ((si->ntDir * si->sDir) == 0.0) allOK = false; si->ntDir.Normalize(); } else { si->ntDir = si->sDir; } si->ntPlane.Init(ttp[sXMin], si->ntDir); for(i = 0; i < 8; i++) { allOK = allOK && si->ntPlane.CalcIntersection(si->fp[i], si->tp[i], si->ntp[i]); } if (si->tType == LXPE_CONT) { si->tXMin = sXMin; si->tDist = (si->tp[7 - sXMin].p - si->t).Length(); if (!allOK) { si->tType = LXPE_ROUND; } } // spocitajme fPlane allOK = true; sPlane.Init(si->f, si->sDir); for(i = 0; i < 8; i++) { allOK = allOK && (si->fPlane.CalcIntersection(si->tp[i], si->fp[i], ffp[i])); sDistCur = sPlane.CalcPosition(ffp[i]); if (i == 0) { sDistMax = sDistCur; sXMax = 0; sDistMin = sDistCur; sXMin = 0; } else { if (sDistCur > sDistMax) { sDistMax = sDistCur; sXMax = i; } if (sDistCur < sDistMin) { sDistMin = sDistCur; sXMin = i; } } } if (sXMax != sXMin) { nsDir = ffp[sXMax] - si->fp[sXMin]; if (nsDir.Norm() > 0) nsDir.Normalize(); else allOK = false; si->nfDir = nsDir ^ si->fDir; si->nfDir = nsDir ^ si->nfDir; if ((si->nfDir * si->sDir) < 0) si->nfDir *= -1.0; else if ((si->nfDir * si->sDir) == 0.0) allOK = false; si->nfDir.Normalize(); } else { si->nfDir = si->sDir; } si->nfPlane.Init(ffp[sXMax], si->nfDir); for(i = 0; i < 8; i++) { allOK = allOK && si->nfPlane.CalcIntersection(si->tp[i], si->fp[i], si->nfp[i]); } if (si->fType == LXPE_CONT) { si->fXMin = sXMax; si->fDist = (si->fp[7 - sXMax].p - si->f).Length(); if (!allOK) { si->fType = LXPE_ROUND; } } } for(si = series.begin(); si != series.end(); si++) { psi = &(*si); if ((si->fType == LXPE_ROUND) && (si->prev != NULL)) { si->prev->tType = LXPE_ROUND; } if ((si->tType == LXPE_ROUND) && (si->next != NULL)) { si->next->fType = LXPE_ROUND; } } for(si = series.begin(); si != series.end(); si++) { // teraz nastavime body tak, ako ich mame vo vystupe allOK = false; while (((si->tType == LXPE_CONT) || (si->fType == LXPE_CONT)) && (!allOK)) { // 1. Nastavime body for(i = 0; i < 8; i++) { if (si->fType == LXPE_CONT) ffp[i] = si->nfp[i]; else ffp[i] = si->fp[i]; if (si->tType == LXPE_CONT) ttp[i] = si->ntp[i]; else ttp[i] = si->tp[i]; } // 2. Skontrolujeme ci sedia smery a to, ci body nelezia mimo // koncovych rovin allOK = true; for (i = 0; i < 8; i++) { if (((ttp[i] - ffp[i]) * si->ft) < 0.0) { allOK = false; break; } } if (!allOK) { if ((si->fType == LXPE_CONT) && (si->tType == LXPE_CONT)) { if ((si->sDir * si->nfDir) < (si->sDir * si->ntDir)) { si->fType = LXPE_ROUND; si->prev->tType = LXPE_ROUND; } else { si->tType = LXPE_ROUND; si->next->fType = LXPE_ROUND; } } else if (si->fType == LXPE_CONT) { si->fType = LXPE_ROUND; si->prev->tType = LXPE_ROUND; } else if (si->tType == LXPE_CONT) { si->tType = LXPE_ROUND; si->next->fType = LXPE_ROUND; } } } // koniec checkovania } // calculate points for(si = series.begin(); si != series.end(); si++) { psi = &(*si); if (si->tType == LXPE_CONT) { for(i = 0; i < 8; i++) { si->tp[i] = si->ntp[i]; } } if (si->fType == LXPE_CONT) { for(i = 0; i < 8; i++) { si->fp[i] = si->nfp[i]; } } } // if points are too close to each other, reduce geometry double avDist; int ti, fi; for(si = series.begin(); si != series.end(); si++) { if (si->tType == LXPE_CONT) { for(i = 0; i < 8; i++) { ti = (i + si->tXMin) % 8; fi = (i + si->next->fXMin) % 8; avDist = (si->tp[ti].p - si->tp[(ti + 7) % 8].p).Length() + (si->tp[ti].p - si->tp[(ti + 1) % 8].p).Length(); avDist += (si->next->fp[fi].p - si->next->fp[(fi + 7) % 8].p).Length() + (si->next->fp[fi].p - si->next->fp[(fi + 1) % 8].p).Length(); avDist *= 0.25; if ((avDist > 0.0) && ((si->next->fp[fi].p - si->tp[ti].p).Length() / avDist < 0.25)) { si->tp[ti].p = 0.5 * (si->next->fp[fi].p + si->tp[ti].p); si->next->fp[fi].p = si->tp[ti].p; } } } } // calculate normals for(si = series.begin(); si != series.end(); si++) { psi = &(*si); for(i = 0; i < 8; i++) { si->tp[i].n = lxCalcNormal4(si->tp[(i + 1) % 8].p, si->fp[i].p, si->tp[(i + 7) % 8].p, si->tp[i].p); si->fp[i].n = lxCalcNormal4(si->fp[(i + 7) % 8].p, si->tp[i].p, si->fp[(i + 1) % 8].p, si->fp[i].p); } } lxVec nnorm; for(si = series.begin(); si != series.end(); si++) { psi = &(*si); if (si->tType == LXPE_CONT) { for(i = 0; i < 8; i++) { ti = (i + si->tXMin) % 8; fi = (i + si->next->fXMin) % 8; nnorm = si->tp[i].n + si->next->fp[i].n; nnorm.Normalize(); si->tp[i].n = nnorm; si->next->fp[i].n = nnorm; } } } // insert geometry // COUNTER NEEDED lxTriGeom so; for(si = series.begin(); si != series.end(); si++) { psi = &(*si); if (si->fType != LXPE_CONT) { this->o.Append(&so); so.Clear(); } si->fp[8].p = lxVec(0.0, 0.0, 0.0); si->tp[8].p = lxVec(0.0, 0.0, 0.0); for(i = 0; i < 8; i++) { si->fp[8].p += si->fp[i]; si->tp[8].p += si->tp[i]; } si->fp[8].p *= 0.125; si->fp[8].n = -1.0 * si->sDir; si->tp[8].p *= 0.125; si->tp[8].n = si->sDir; double dl; lxTriGeomPoint ddt, ddp[8]; double diam; switch (si->tType) { case LXPE_ROUND: //if (si->tDist <= 0.0) { diam = (si->tp[0].p - si->tp[8].p).Length(); for(i = 1; i < 8; i++) { dl = (si->tp[i].p - si->tp[8].p).Length(); if (diam > dl) diam = dl; } //} else { // diam = si->tDist; //} ddt = si->tp[8].p + diam * si->sDir; ddt.n = si->tp[8].n; for (i = 0; i < 8; i++) { ddp[i] = si->tp[8] + 0.70710678 * (si->tp[i] - si->tp[8]) + 0.70710678 * diam * si->sDir; } for (i = 0; i < 8; i++) { nnorm = lxCalcNormal4(si->tp[(i + 7) % 8].p, ddp[i].p, si->tp[(i + 1) % 8].p, si->tp[i].p); nnorm += si->tp[i].n; nnorm.Normalize(); si->tp[i].n = nnorm; ddp[i].n = lxCalcNormal5(ddp[(i+1) % 8], si->tp[i], ddp[(i+7) % 8], ddt, ddp[i]); } for (i = 0; i < 8; i++) { so.Insert3Angle(ddt, ddp[i], ddp[(i + 1) % 8]); so.Insert4Angle(ddp[i], si->tp[i], ddp[(i + 1) % 8], si->tp[(i + 1) % 8]); } break; case LXPE_FLAT: for(i = 0; i < 8; i++) { ddp[i].p = si->tp[i].p; ddp[i].n = si->tp[8].n; } for(i = 0; i < 8; i++) { so.Insert3Angle(si->tp[8], ddp[i], ddp[(i + 1) % 8]); } break; } switch (si->fType) { case LXPE_ROUND: //if (si->fDist <= 0.0) { diam = (si->fp[0].p - si->fp[8].p).Length(); for(i = 1; i < 8; i++) { dl = (si->fp[i].p - si->fp[8].p).Length(); if (diam > dl) diam = dl; } //} else { // diam = si->fDist; //} ddt = si->fp[8].p - diam * si->sDir; ddt.n = si->fp[8].n; for (i = 0; i < 8; i++) { ddp[i].n = ddp[i].p - si->fp[8].p; ddp[i].n.Normalize(); } for (i = 0; i < 8; i++) { ddp[i] = si->fp[8] + 0.70710678 * (si->fp[i] - si->fp[8]) - 0.70710678 * diam * si->sDir; } for (i = 0; i < 8; i++) { nnorm = lxCalcNormal4(si->fp[(i + 1) % 8].p, ddp[i].p, si->fp[(i + 7) % 8].p, si->fp[i].p); nnorm += si->fp[i].n; nnorm.Normalize(); si->fp[i].n = nnorm; ddp[i].n = lxCalcNormal5(ddp[(i+1) % 8], ddt, ddp[(i+7) % 8], si->fp[i], ddp[i]); } for (i = 0; i < 8; i++) { so.Insert3Angle(ddt, ddp[(i + 1) % 8], ddp[i]); so.Insert4Angle(si->fp[i], ddp[i], si->fp[(i + 1) % 8], ddp[(i + 1) % 8]); } break; case LXPE_FLAT: for(i = 0; i < 8; i++) { ddp[i].p = si->fp[i].p; ddp[i].n = si->fp[8].n; } for(i = 0; i < 8; i++) { so.Insert3Angle(si->fp[8], ddp[(i + 1) % 8], ddp[i]); } break; } if (si->tType == LXPE_CONT) { for(i = 0; i < 8; i++) { ti = (i + si->tXMin) % 8; fi = (i + si->next->fXMin) % 8; so.Insert4Angle(si->next->fp[fi], si->tp[ti], si->next->fp[(fi + 1) % 8], si->tp[(ti + 1) % 8]); } } for(i = 0; i < 8; i++) { so.Insert4Angle(si->tp[i], si->fp[i], si->tp[(i + 1) % 8], si->fp[(i + 1) % 8]); } } this->o.Append(&so); delete [] edges; delete [] nodes; //size_t nT = this->o.GetNTriangles(); //size_t nP = this->o.GetNPoints(); } long lxLRUD::GetPointsN() { return long(this->o.GetNPoints()); } void lxLRUD::GetPoint(long idx, double * coord, double * norm) { lxTriGeomPoint pt = this->o.GetPoint(idx); coord[0] = pt.p.x; coord[1] = pt.p.y; coord[2] = pt.p.z; norm[0] = pt.n.x; norm[1] = pt.n.y; norm[2] = pt.n.z; } long lxLRUD::GetTrianglesN() { return long(this->o.GetNTriangles()); } void lxLRUD::GetTriangle(long idx, long * vertices) { lxTriGeom3Angle tg = this->o.GetTriangle(idx); vertices[0] = long(tg.v1); vertices[1] = long(tg.v2); vertices[2] = long(tg.v3); } therion/loch/lxLRUD.h0000644000076400010400000000213210537464734015510 0ustar userAdministrators#ifndef lxLRUD_h #define lxLRUD_h // Standard libraries #ifndef LXDEPCHECK #endif //LXDEPCHECK - standart libraries #include "lxMath.h" enum { LXLRUD_OCTAGON, LXLRUD_TUNNEL, LXLRUD_DIAMOND, LXLRUD_SQUARE, }; struct lxLRUDShot { lxVec from, to; long xfrom, xto; int profile; double fl, fr, fu, fd, tl, tr, tu, td, vthresh; void * usr_data; lxLRUDShot() : profile(LXLRUD_OCTAGON), vthresh(60.0) {} }; struct lxLRUDData { long nstations; std::list shots; std::map station_map; double currentVT; int currentProfile; lxLRUDData() : nstations(0), currentVT(60.0), currentProfile(LXLRUD_OCTAGON) {} long GetStationID(lxVec pos, bool insert = false); }; struct lxLRUD { lxLRUDData i; lxTriGeom o; void SetVThreshold(double vt); void SetProfile(int sec_type); void InsertShot(double * from, double * to, double * fromLRUD, double * toLRUD, void * usrData); void Calculate(); long GetPointsN(); void GetPoint(long idx, double * coord, double * norm); long GetTrianglesN(); void GetTriangle(long idx, long * vertices); }; #endif therion/loch/lxMath.cxx0000644000076400010400000002250411453314100016166 0ustar userAdministrators/** * @file lxMath.cxx * Loch math implementation. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ // Standard libraries #ifndef LXDEPCHECK #include #endif //LXDEPCHECK - standart libraries #include "lxMath.h" void lxVec::Normalize() { double n = this->Length(); if (n > 0.0) { this->x /= n; this->y /= n; this->z /= n; } } double lxVec::Norm() { return (this->x * this->x + this->y * this->y + this->z * this->z); } double lxVec::Length() { return sqrt(this->x * this->x + this->y * this->y + this->z * this->z); } double lxVec::Azimuth() { return atan2(this->x, this->y) / lxPI * 180.0; } double lxVec::Inclination() { return atan2(this->z, sqrt(this->x * this->x + this->y * this->y)) / lxPI * 180.0; } lxVec operator + ( const lxVec& p, const lxVec& q ) { return lxVec(p.x + q.x, p.y + q.y, p.z + q.z); } lxVec operator - ( const lxVec& p, const lxVec& q ) { return lxVec(p.x - q.x, p.y - q.y, p.z - q.z); } double operator * ( const lxVec& p, const lxVec& q ) { return (p.x * q.x + p.y * q.y + p.z * q.z); } lxVec operator * ( const double& c, const lxVec& q ) { return lxVec(c * q.x, c * q.y, c * q.z); } lxVec operator / ( const lxVec& p, const double& c) { return (c != 0.0 ? lxVec(p.x / c, p.y / c, p.z / c) : lxVec()); } lxVec operator ^ ( const lxVec& p, const lxVec& q ) { return lxVec(p.y * q.z - p.z * q.y, p.z * q.x - p.x * q.z, p.x * q.y - p.y * q.x); } void lxVecLimits::Add(double a, double b, double c) { #define lxVecLimAddSet(par) this->par = lxVec(a, b, c) if (this->valid) { if (this->min.x > a) { this->min.x = a; lxVecLimAddSet(xmin); } if (this->max.x < a) { this->max.x = a; lxVecLimAddSet(xmax); } if (this->min.y > b) { this->min.y = b; lxVecLimAddSet(ymin); } if (this->max.y < b) { this->max.y = b; lxVecLimAddSet(xmax); } if (this->min.z > c) { this->min.z = c; lxVecLimAddSet(zmin); } if (this->max.z < c) { this->max.z = c; lxVecLimAddSet(zmax); } } else { lxVecLimAddSet(min); lxVecLimAddSet(max); lxVecLimAddSet(xmin); lxVecLimAddSet(xmax); lxVecLimAddSet(ymin); lxVecLimAddSet(ymax); lxVecLimAddSet(zmin); lxVecLimAddSet(zmax); this->valid = true; } } lxVec lxPol2Vec(const double l, const double a, const double i) { return lxVec( l * cos(i / 180.0 * lxPI) * sin(a / 180.0 * lxPI), l * cos(i / 180.0 * lxPI) * cos(a / 180.0 * lxPI), l * sin(i / 180.0 * lxPI) ); } lxVec lxVec::Rotated(double a, double i) { double sa = sin(a / 180.0 * lxPI), ca = cos(a / 180.0 * lxPI), si = sin(i / 180.0 * lxPI), ci = cos(i / 180.0 * lxPI); return lxVec( this->x * ca - this->y * sa , this->x * ci * sa + this->y * ca * ci - this->z * si, this->x * si * sa + this->y * si * ca + this->z * ci ); } lxVec lxVecLimits::Vertex(int v) { switch (v) { case 0: return this->min; case 1: return lxVec(this->max.x, this->min.y, this->min.z); case 2: return lxVec(this->max.x, this->max.y, this->min.z); case 3: return lxVec(this->min.x, this->max.y, this->min.z); case 4: return lxVec(this->min.x, this->min.y, this->max.z); case 5: return lxVec(this->max.x, this->min.y, this->max.z); case 6: return this->max; default: return lxVec(this->min.x, this->max.y, this->max.z); } } lxVecLimits lxVecLimits::Rotate(double a, double i, lxVec c) { lxVecLimits result; lxVec mymin = this->min - c; lxVec mymax = this->max - c; result.Add(mymin.Rotated(a,i)); result.Add(lxVec(mymin.x, mymin.y, mymax.z).Rotated(a,i)); result.Add(lxVec(mymin.x, mymax.y, mymin.z).Rotated(a,i)); result.Add(lxVec(mymax.x, mymin.y, mymin.z).Rotated(a,i)); result.Add(lxVec(mymax.x, mymin.y, mymax.z).Rotated(a,i)); result.Add(lxVec(mymax.x, mymax.y, mymin.z).Rotated(a,i)); result.Add(lxVec(mymin.x, mymax.y, mymax.z).Rotated(a,i)); result.Add(mymax.Rotated(a,i)); return result; } lxVec lxVec::operator += ( const lxVec& v) { *this = lxVec(this->x + v.x, this->y + v.y, this->z + v.z); return *this; } lxVec lxVec::operator -= ( const lxVec& v) { *this = lxVec(this->x - v.x, this->y - v.y, this->z - v.z); return *this; } lxVec lxVec::operator *= ( const double& c) { *this = lxVec(this->x * c, this->y * c, this->z * c); return *this; } lxVec lxVec::operator /= ( const double& c) { *this = lxVec(this->x / c, this->y / c, this->z / c); return *this; } bool operator < (const struct lxVec & p, const struct lxVec & q) { if (p.x < q.x) return true; if (p.x > q.x) return false; if (p.y < q.y) return true; if (p.y > q.y) return false; if (p.z < q.z) return true; return false; } bool operator == ( const lxVec& p, const lxVec& q ) { if ((!(p < q)) && (!(q < p))) return true; else return false; } bool operator != ( const lxVec& p, const lxVec& q ) { return !(p == q); } bool operator < ( const lxTriGeomPoint& p, const lxTriGeomPoint& q ) { if (p.p < q.p) return true; if (q.p < p.p) return false; if (p.n < q.n) return true; else return false; } void lxVecLimits::Add(lxVec v) { this->Add(lxVecXYZ(v)); } lxVec lxVecAbs(lxVec v) { return lxVec(fabs(v.x), fabs(v.y), fabs(v.z)); } size_t lxTriGeom::InsertPoint(lxTriGeomPoint p) { size_t rv; std::map::iterator i; i = this->m_points.find(p); if (i == this->m_points.end()) { rv = this->m_nPoints; this->m_positions.push_back(p); this->m_nPoints++; this->m_points[p] = rv; } else { rv = i->second; } return rv; } void lxTriGeom::Clear() { this->m_nPoints = 0; this->m_points.clear(); this->m_positions.clear(); this->m_triangles.clear(); this->m_geometry.clear(); } lxTriGeom3Angle::lxTriGeom3Angle(size_t vv1, size_t vv2, size_t vv3) { this->v1 = vv1; this->v2 = vv2; this->v3 = vv3; } bool lxTriGeom::Insert3Angle(lxTriGeomPoint p1, lxTriGeomPoint p2, lxTriGeomPoint p3) { size_t v1, v2, v3; v1 = this->InsertPoint(p1); v2 = this->InsertPoint(p2); v3 = this->InsertPoint(p3); if ((p1.p != p2.p) && (p2.p != p3.p) && (p1.p != p3.p)) { this->m_triangles.push_back(lxTriGeom3Angle(v1, v2, v3)); return true; } else { return false; } } bool lxTriGeom::Insert4Angle(lxTriGeomPoint p1, lxTriGeomPoint p2, lxTriGeomPoint p3, lxTriGeomPoint p4) { bool i1, i2; i1 = this->Insert3Angle(p1, p2, p3); i2 = this->Insert3Angle(p4, p3, p2); return (i1 && i2); } size_t lxTriGeom::GetNPoints() { return this->m_nPoints; } lxTriGeomPoint lxTriGeom::GetPoint(size_t i) { return this->m_positions[i]; } size_t lxTriGeom::GetNTriangles() { this->m_geometry.clear(); std::list::iterator i; for(i = this->m_triangles.begin(); i != this->m_triangles.end(); i++) { this->m_geometry.push_back(*i); } return this->m_geometry.size(); } lxTriGeom3Angle lxTriGeom::GetTriangle(size_t i) { return this->m_geometry[i]; } void lxPlane::Init(lxVec pt, lxVec norm) { norm.Normalize(); this->m_normal = norm; this->m_point = pt; this->m_delta = -1.0 * (this->m_normal * this->m_point); } double lxPlane::CalcPosition(lxVec pt) { return (pt * this->m_normal + this->m_delta); } bool lxPlane::CalcIntersection(lxVec fp, lxVec tp, lxVec & tgt) { lxVec d = (tp - fp); double y = (this->m_normal * d); if (y == 0.0) return false; else { y = ((this->m_normal * fp + this->m_delta) / y); tgt = fp - y * d; if (y > 0.0) return false; else return true; } } void lxTriGeom::Append(lxTriGeom * src) { lxTriGeomPoint pp; lxTriGeom3Angle tt; size_t sn, sx, i; sn = src->GetNPoints(); sx = this->m_nPoints; for(i = 0; i < sn; i++) { pp = src->GetPoint(i); this->m_nPoints++; this->m_positions.push_back(pp); this->m_points[pp] = sx + i; } sn = src->GetNTriangles(); for(i = 0; i < sn; i++) { tt = src->GetTriangle(i); tt.v1 += sx; tt.v2 += sx; tt.v3 += sx; this->m_triangles.push_back(tt); } } lxVec lxCalcNormal4(lxVec v1, lxVec v2, lxVec v3, lxVec vN) { v1 = vN - v1; v2 = vN - v2; v3 = vN - v3; v1 = v1 ^ (-1.0 * v2); v3 = v3 ^ v2; v1.Normalize(); v3.Normalize(); vN = v1 + v3; vN.Normalize(); return vN; } lxVec lxCalcNormal5(lxVec v1, lxVec v2, lxVec v3, lxVec v4, lxVec vN) { v2 = lxCalcNormal4(v1, v2, v3, vN); v4 = lxCalcNormal4(v3, v4, v1, vN); vN = v2 + v4; vN.Normalize(); return vN; } therion/loch/lxMath.h0000644000076400010400000001015711577052700015630 0ustar userAdministrators/** * @file lxMath.h * Loch mathematics module. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef lxMath_h #define lxMath_h // Standard libraries #ifndef LXDEPCHECK #include #include #include #include #endif //LXDEPCHECK - standart libraries #define lxPI 3.1415926535898 struct lxVec { double x, y, z; lxVec() : x(0.0), y(0.0), z(0.0) {}; lxVec(double a, double b, double c) : x(a), y(b), z(c) {}; double Length(); double Azimuth(); double Inclination(); double Norm(); void Normalize(); lxVec operator += ( const lxVec& v); lxVec operator -= ( const lxVec& v); lxVec operator *= ( const double& c); lxVec operator /= ( const double& c); lxVec Rotated(double a, double i); }; lxVec operator + ( const lxVec& p, const lxVec& q ); lxVec operator - ( const lxVec& p, const lxVec& q ); double operator * ( const lxVec& p, const lxVec& q ); lxVec operator * ( const double& c, const lxVec& q ); lxVec operator / ( const lxVec& p, const double& c); lxVec operator ^ ( const lxVec& p, const lxVec& q ); bool operator < ( const lxVec& p, const lxVec& q ); bool operator == ( const lxVec& p, const lxVec& q ); bool operator != ( const lxVec& p, const lxVec& q ); lxVec lxPol2Vec(const double l, const double a, const double i); lxVec lxVecAbs(lxVec v); lxVec lxCalcNormal4(lxVec v1, lxVec v2, lxVec v3, lxVec vN); lxVec lxCalcNormal5(lxVec v1, lxVec v2, lxVec v3, lxVec v4, lxVec vN); struct lxVecLimits { lxVec min, max, xmin, xmax, ymin, ymax, zmin, zmax; bool valid; lxVecLimits() : valid(false) {}; void Add(double a, double b, double c); void Add(lxVec v); lxVecLimits Rotate(double a, double i, lxVec c); lxVec Vertex(int v); }; struct lxTriGeomPoint { lxVec p, n; operator lxVec & () {return this->p;} const lxVec & operator = (const lxVec q) {this->p = q; return this->p;} }; bool operator < ( const lxTriGeomPoint& p, const lxTriGeomPoint& q ); struct lxTriGeom3Angle { size_t v1, v2, v3; lxTriGeom3Angle() : v1(0), v2(0), v3(0) {} lxTriGeom3Angle(size_t vv1, size_t vv2, size_t vv3); }; struct lxTriGeom { size_t m_nPoints; std::map m_points; std::vector m_positions; std::list m_triangles; std::vector m_geometry; void Clear(); void Append(lxTriGeom * src); size_t InsertPoint(lxTriGeomPoint p); bool Insert3Angle(lxTriGeomPoint p1, lxTriGeomPoint p2, lxTriGeomPoint p3); bool Insert4Angle(lxTriGeomPoint p1, lxTriGeomPoint p2, lxTriGeomPoint p3, lxTriGeomPoint p4); size_t GetNPoints(); lxTriGeomPoint GetPoint(size_t i); size_t GetNTriangles(); lxTriGeom3Angle GetTriangle(size_t i); lxTriGeom() : m_nPoints(0) {} }; struct lxPlane { lxVec m_point, m_normal; double m_delta; void Init(lxVec pt, lxVec norm); double CalcPosition(lxVec pt); bool CalcIntersection(lxVec fp, lxVec tp, lxVec & tgt); }; #define lxVecXYZ(vec) (vec).x, (vec).y, (vec).z #define lxMax(a,b) ((a) > (b) ? (a) : (b)) #define lxMin(a,b) ((a) < (b) ? (a) : (b)) #define lxShiftVecPXYZ(v,s) ((v)->x - (s).x), ((v)->y - (s).y), ((v)->z - (s).z) #define lxShiftVecXYZ(v,s) ((v).x - (s).x), ((v).y - (s).y), ((v).z - (s).z) #define lxShiftVecX3(v,s) (v[0] - (s).x), (v[1] - (s).y), (v[2] - (s).z) #endif therion/loch/lxOGLFT.cxx0000644000076400010400000031435512047417426016177 0ustar userAdministrators/* * OGLFT: A library for drawing text with OpenGL using the FreeType library * Copyright (C) 2002 lignum Computing, Inc. * $Id: OGLFT.cpp,v 1.11 2003/10/01 14:21:18 allen Exp $ * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #define OGLFT_NO_SOLID #include "lxOGLFT.h" namespace OGLFT { // This is the static instance of the FreeType library wrapper ... Library Library::library; // ... and this is the FreeType library handle itself. FT_Library Library::library_; // The static instance above causes this constructor to be called // when the object module is loaded. Library::Library ( void ) { FT_Error error = FT_Init_FreeType( &library_ ); if ( error != 0 ) { std::cerr << "Could not initialize the FreeType library. Exiting." << std::endl; exit( 1 ); } } Library::~Library ( void ) { FT_Error error = FT_Done_FreeType( library_ ); if ( error != 0 ) { std::cerr << "Could not terminate the FreeType library." << std::endl; } } // Return the only instance in the process FT_Library& Library::instance ( void ) { return library_; } // Load a new face Face::Face ( const char* filename, float point_size, FT_UInt resolution ) : point_size_( point_size ), resolution_( resolution ) { valid_ = true; // Assume the best :-) FT_Face ft_face; FT_Error error = FT_New_Face( Library::instance(), filename, 0, &ft_face ); if ( error != 0 ) { valid_ = false; return; } // As of FreeType 2.1: only a UNICODE charmap is automatically activated. // If no charmap is activated automatically, just use the first one. if ( ft_face->charmap == 0 && ft_face->num_charmaps > 0 ) FT_Select_Charmap( ft_face, ft_face->charmaps[0]->encoding ); faces_.push_back( FaceData( ft_face ) ); init(); } // Go with a face that the user has already opened. Face::Face ( FT_Face face, float point_size, FT_UInt resolution ) : point_size_( point_size ), resolution_( resolution ) { valid_ = true; // As of FreeType 2.1: only a UNICODE charmap is automatically activated. // If no charmap is activated automatically, just use the first one. if ( face->charmap == 0 && face->num_charmaps > 0 ) FT_Select_Charmap( face, face->charmaps[0]->encoding ); faces_.push_back( FaceData( face, false ) ); init(); } // Standard initialization behavior once the font file is opened. void Face::init ( void ) { // By default, each glyph is compiled into a display list the first // time it is encountered compile_mode_ = COMPILE; // By default, all drawing is wrapped with push/pop matrix so that the // MODELVIEW matrix is not modified. If advance_ is set, then subsequent // drawings follow from the advance of the last glyph rendered. advance_ = false; // Initialize the default colors foreground_color_[R] = 0.; foreground_color_[G] = 0.; foreground_color_[B] = 0.; foreground_color_[A] = 1.; background_color_[R] = 1.; background_color_[G] = 1.; background_color_[B] = 1.; background_color_[A] = 0.; // The default positioning of the text is at the origin of the first glyph horizontal_justification_ = ORIGIN; vertical_justification_ = BASELINE; // By default, strings are rendered in their nominal direction string_rotation_ = 0; // setCharacterRotationReference calls the virtual function clearCaches() // so it is up to a subclass to set the real default rotation_reference_glyph_ = 0; rotation_reference_face_ = 0; rotation_offset_y_ = 0.; } Face::~Face ( void ) { for ( unsigned int i = 0; i < faces_.size(); i++ ) if ( faces_[i].free_on_exit_ ) FT_Done_Face( faces_[i].face_ ); } // Add another Face to select characters from bool Face::addAuxiliaryFace ( const char* filename ) { FT_Face ft_face; FT_Error error = FT_New_Face( Library::instance(), filename, 0, &ft_face ); if ( error != 0 ) return false; faces_.push_back( FaceData( ft_face ) ); setCharSize(); return true; } // Add another Face to select characters from bool Face::addAuxiliaryFace ( FT_Face face ) { faces_.push_back( FaceData( face, false ) ); setCharSize(); return true; } // Note: Changing the point size also clears the display list cache void Face::setPointSize ( float point_size ) { if ( point_size != point_size_ ) { point_size_ = point_size; clearCaches(); setCharSize(); } } // Note: Changing the resolution also clears the display list cache void Face::setResolution ( FT_UInt resolution ) { if ( resolution != resolution_ ) { resolution_ = resolution; clearCaches(); setCharSize(); } } // Note: Changing the background color also clears the display list cache. void Face::setBackgroundColor ( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ) { if ( background_color_[R] != red || background_color_[G] != green || background_color_[B] != blue || background_color_[A] != alpha ) { background_color_[R] = red; background_color_[G] = green; background_color_[B] = blue; background_color_[A] = alpha; clearCaches(); } } // Note: Changing the foreground color also clears the display list cache. void Face::setForegroundColor ( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ) { if ( foreground_color_[R] != red || foreground_color_[G] != green || foreground_color_[B] != blue || foreground_color_[A] != alpha ) { foreground_color_[R] = red; foreground_color_[G] = green; foreground_color_[B] = blue; foreground_color_[A] = alpha; clearCaches(); } } // Note: Changing the foreground color also clears the display list cache. void Face::setForegroundColor ( const GLfloat foreground_color[4] ) { if ( foreground_color_[R] != foreground_color[R] || foreground_color_[G] != foreground_color[G] || foreground_color_[B] != foreground_color[B] || foreground_color_[A] != foreground_color[A] ) { foreground_color_[R] = foreground_color[R]; foreground_color_[G] = foreground_color[G]; foreground_color_[B] = foreground_color[B]; foreground_color_[A] = foreground_color[A]; clearCaches(); } } // Note: Changing the background color also clears the display list cache. void Face::setBackgroundColor ( const GLfloat background_color[4] ) { if ( background_color_[R] != background_color[R] || background_color_[G] != background_color[G] || background_color_[B] != background_color[B] || background_color_[A] != background_color[A] ) { background_color_[R] = background_color[R]; background_color_[G] = background_color[G]; background_color_[B] = background_color[B]; background_color_[A] = background_color[A]; clearCaches(); } } #ifndef OGLFT_NO_WX // Note: Changing the foreground color also clears the display list cache. void Face::setForegroundColor ( const wxColour foreground_rgba ) { GLfloat foreground_color[4]; foreground_color[R] = foreground_rgba.Red() / 255.; foreground_color[G] = foreground_rgba.Green() / 255.; foreground_color[B] = foreground_rgba.Blue() / 255.; foreground_color[A] = 1.0; if ( foreground_color_[R] != foreground_color[R] || foreground_color_[G] != foreground_color[G] || foreground_color_[B] != foreground_color[B] || foreground_color_[A] != foreground_color[A] ) { foreground_color_[R] = foreground_color[R]; foreground_color_[G] = foreground_color[G]; foreground_color_[B] = foreground_color[B]; foreground_color_[A] = foreground_color[A]; clearCaches(); } } // Note: Changing the background color also clears the display list cache. void Face::setBackgroundColor ( const wxColour background_rgba ) { GLfloat background_color[4]; background_color[R] = background_rgba.Red() / 255.; background_color[G] = background_rgba.Green() / 255.; background_color[B] = background_rgba.Blue() / 255.; background_color[A] = 1.0; if ( background_color_[R] != background_color[R] || background_color_[G] != background_color[G] || background_color_[B] != background_color[B] || background_color_[A] != background_color[A] ) { background_color_[R] = background_color[R]; background_color_[G] = background_color[G]; background_color_[B] = background_color[B]; background_color_[A] = background_color[A]; clearCaches(); } } #endif /* OGLFT_NO_WX */ // Note: Changing the string rotation angle clears the display list cache void Face::setStringRotation ( GLfloat string_rotation ) { if ( string_rotation != string_rotation_ ) { string_rotation_ = string_rotation; clearCaches(); // Note that this affects ALL glyphs accessed through // the Face, both the vector and the raster glyphs. Very nice! if ( string_rotation_ != 0. ) { float angle; if ( string_rotation_ < 0. ) { angle = 360. - fmod( fabs( string_rotation_ ), 360.f ); } else { angle = fmod( string_rotation_, 360.f ); } FT_Matrix rotation_matrix; FT_Vector sinus; FT_Vector_Unit( &sinus, (FT_Angle)(angle * 0x10000L) ); rotation_matrix.xx = sinus.x; rotation_matrix.xy = -sinus.y; rotation_matrix.yx = sinus.y; rotation_matrix.yy = sinus.x; for ( unsigned int i = 0; i < faces_.size(); i++ ) FT_Set_Transform( faces_[i].face_, &rotation_matrix, 0 ); } else for ( unsigned int i = 0; i < faces_.size(); i++ ) FT_Set_Transform( faces_[i].face_, 0, 0 ); } } // Note: Changing the rotation reference character clears the display list cache. void Face::setCharacterRotationReference ( unsigned char c ) { unsigned int f; FT_UInt glyph_index = 0; for ( f = 0; f < faces_.size(); f++ ) { glyph_index = FT_Get_Char_Index( faces_[f].face_, c ); if ( glyph_index != 0 ) break; } if ( f < faces_.size() && glyph_index != rotation_reference_glyph_ ) { FT_Error error = FT_Load_Glyph( faces_[f].face_, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return; rotation_reference_glyph_ = glyph_index; rotation_reference_face_ = faces_[f].face_; setRotationOffset(); clearCaches(); } } BBox Face::measure ( const char* s ) { BBox bbox; unsigned char c; if ( ( c = *s++ ) != 0 ) { bbox = measure( c ); for ( c = *s; c != 0; c = *++s ) { BBox char_bbox = measure( c ); bbox += char_bbox; } } return bbox; } BBox Face::measureRaw ( const char* s ) { BBox bbox; for ( char c = *s; c != 0; c = *++s ) { BBox char_bbox; unsigned int f; FT_UInt glyph_index = 0; for ( f = 0; f < faces_.size(); f++ ) { glyph_index = FT_Get_Char_Index( faces_[f].face_, c ); if ( glyph_index != 0 ) break; } if ( glyph_index == 0 ) continue; FT_Error error = FT_Load_Glyph( faces_[f].face_, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) continue; FT_Glyph glyph; error = FT_Get_Glyph( faces_[f].face_->glyph, &glyph ); if ( error != 0 ) continue; FT_BBox ft_bbox; FT_Glyph_Get_CBox( glyph, ft_glyph_bbox_unscaled, &ft_bbox ); FT_Done_Glyph( glyph ); char_bbox = ft_bbox; char_bbox.advance_ = faces_[f].face_->glyph->advance; bbox += char_bbox; } return bbox; } #ifndef OGLFT_NO_WX BBox Face::measure ( const wxString& s ) { BBox bbox; if ( s.length() > 0 ) { bbox = measure( (const wxChar) s.GetChar( 0 ) ); for ( unsigned int i = 1; i < s.length(); i++ ) { BBox char_bbox = measure( (const wxChar) s.GetChar( i ) ); bbox += char_bbox; } } return bbox; } BBox Face::measure ( const wxString& format, double number ) { return measure( format_number( format, number ) ); } BBox Face::measureRaw ( const wxString& s ) { BBox bbox; for ( unsigned int i = 0; i < s.length(); i++ ) { BBox char_bbox; unsigned int f; FT_UInt glyph_index = 0; for ( f = 0; f < faces_.size(); f++ ) { glyph_index = FT_Get_Char_Index( faces_[f].face_, s.GetChar( i ) ); if ( glyph_index != 0 ) break; } if ( glyph_index == 0 ) { continue; } FT_Error error = FT_Load_Glyph( faces_[f].face_, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) continue; FT_Glyph glyph; error = FT_Get_Glyph( faces_[f].face_->glyph, &glyph ); if ( error != 0 ) continue; FT_BBox ft_bbox; FT_Glyph_Get_CBox( glyph, ft_glyph_bbox_unscaled, &ft_bbox ); FT_Done_Glyph( glyph ); char_bbox = ft_bbox; char_bbox.advance_ = faces_[f].face_->glyph->advance; bbox += char_bbox; } return bbox; } #endif /* OGLFT_NO_WX */ // Measure the bounding box as if the (latin1) string were not rotated BBox Face::measure_nominal ( const char* s ) { if ( string_rotation_ == 0. ) return measure( s ); for ( unsigned int f = 0; f < faces_.size(); f++ ) FT_Set_Transform( faces_[f].face_, 0, 0 ); BBox bbox = measure( s ); float angle; if ( string_rotation_ < 0. ) { angle = 360. - fmod( fabs( string_rotation_ ), 360.f ); } else { angle = fmod( string_rotation_, 360.f ); } FT_Matrix rotation_matrix; FT_Vector sinus; FT_Vector_Unit( &sinus, (FT_Angle)(angle * 0x10000L) ); rotation_matrix.xx = sinus.x; rotation_matrix.xy = -sinus.y; rotation_matrix.yx = sinus.y; rotation_matrix.yy = sinus.x; for ( unsigned int f = 0; f < faces_.size(); f++ ) FT_Set_Transform( faces_[f].face_, &rotation_matrix, 0 ); return bbox; } #ifndef OGLFT_NO_WX // Measure the bounding box as if the (UNICODE) string were not rotated BBox Face::measure_nominal ( const wxString& s ) { if ( string_rotation_ == 0. ) return measure( s ); for ( unsigned int f = 0; f < faces_.size(); f++ ) FT_Set_Transform( faces_[f].face_, 0, 0 ); BBox bbox = measure( s ); float angle; if ( string_rotation_ < 0. ) { angle = 360. - fmod( fabs( string_rotation_ ), 360.f ); } else { angle = fmod( string_rotation_, 360.f ); } FT_Matrix rotation_matrix; FT_Vector sinus; FT_Vector_Unit( &sinus, (FT_Angle)(angle * 0x10000L) ); rotation_matrix.xx = sinus.x; rotation_matrix.xy = -sinus.y; rotation_matrix.yx = sinus.y; rotation_matrix.yy = sinus.x; for ( unsigned int f = 0; f < faces_.size(); f++ ) FT_Set_Transform( faces_[f].face_, &rotation_matrix, 0 ); return bbox; } // Format the number per the given format. Mostly pointless // for the standard formats, e.g. %12e. You can use the regular // Qt functions to format such a string and avoid the parsing // which is done here. wxString Face::format_number ( const wxString& format, double number ) { return wxString::Format(format, number); } #endif /* OGLFT_NO_WX */ // Compile a (latin1) string into a display list GLuint Face::compile ( const char* s ) { // First, make sure all the characters in the string are themselves // in display lists const char* s_tmp = s; unsigned char c; for ( c = *s_tmp; c != 0; c = *++s_tmp ) { compile( c ); } GLuint dlist = glGenLists( 1 ); glNewList( dlist, GL_COMPILE ); glColor4f( foreground_color_[R], foreground_color_[G], foreground_color_[B], foreground_color_[A] ); if ( !advance_ ) glPushMatrix(); draw( s ); if ( !advance_ ) glPopMatrix(); glEndList(); return dlist; } #ifndef OGLFT_NO_WX // Compile a (UNICODE) string into a display list GLuint Face::compile ( const wxString& s ) { // First, make sure all the characters in the string are themselves // in display lists for ( unsigned int i = 0; i < s.length(); i++ ) { compile( (const wxChar) s.GetChar( i ) ); } GLuint dlist = glGenLists( 1 ); glNewList( dlist, GL_COMPILE ); glColor4f( foreground_color_[R], foreground_color_[G], foreground_color_[B], foreground_color_[A] ); if ( !advance_ ) glPushMatrix(); draw( s ); if ( !advance_ ) glPopMatrix(); glEndList(); return dlist; } #endif /* OGLFT_NO_WX */ // Compile a (latin1) character glyph into a display list and cache // it for later GLuint Face::compile ( unsigned char c ) { // See if we've done it already GDLCI fgi = glyph_dlists_.find( c ); if ( fgi != glyph_dlists_.end() ) return fgi->second; unsigned int f; FT_UInt glyph_index = 0; for ( f = 0; f < faces_.size(); f++ ) { glyph_index = FT_Get_Char_Index( faces_[f].face_, c ); if ( glyph_index != 0 ) break; } if ( glyph_index == 0 ) return 0; GLuint dlist = compileGlyph( faces_[f].face_, glyph_index ); glyph_dlists_[ c ] = dlist; return dlist; } #ifndef OGLFT_NO_WX // Compile a (UNICODE) character glyph into a display list and cache // it for later GLuint Face::compile ( const wxChar c ) { // See if we've done it already GDLCI fgi = glyph_dlists_.find( c ); if ( fgi != glyph_dlists_.end() ) return fgi->second; unsigned int f; FT_UInt glyph_index = 0; for ( f = 0; f < faces_.size(); f++ ) { glyph_index = FT_Get_Char_Index( faces_[f].face_, c ); if ( glyph_index != 0 ) break; } if ( glyph_index == 0 ) return 0; GLuint dlist = compileGlyph( faces_[f].face_, glyph_index ); glyph_dlists_[ c ] = dlist; return dlist; } #endif /* OGLFT_NO_WX */ // Assume the MODELVIEW matrix is already set and draw the (latin1) // string. Note: this routine now ignores almost all settings: // including the position (both modelview and raster), color, // justification and advance settings. Consider this to be the raw // drawing routine for which you are responsible for most of the // setup. void Face::draw ( const char* s ) { DLCI character_display_list = character_display_lists_.begin(); unsigned char c; for (c = *s; c != 0; c = *++s ) { if ( character_display_list != character_display_lists_.end() ) { glCallList( *character_display_list ); character_display_list++; } draw( c ); } } #ifndef OGLFT_NO_WX // Assume the MODELVIEW matrix is already set and draw the (UNICODE) // string. Note: this routine now ignores almost all settings: // including the position (both modelview and raster), color, // justification and advance settings. Consider this to be the raw // drawing routine for which you are responsible for most of the // setup. void Face::draw ( const wxString& s ) { DLCI character_display_list = character_display_lists_.begin(); for ( unsigned int i = 0; i < s.length(); i++ ) { if ( character_display_list != character_display_lists_.end() ) { glCallList( *character_display_list ); character_display_list++; } draw( (const wxChar) s.GetChar( i ) ); } } #endif /* OGLFT_NO_WX */ // Assume the MODELVIEW matrix is already setup and draw the // (latin1) character. void Face::draw ( unsigned char c ) { // See if we've done it already GDLCI fgi = glyph_dlists_.find( c ); if ( fgi != glyph_dlists_.end( ) ) { glCallList( fgi->second ); return; } unsigned int f; FT_UInt glyph_index = 0; for ( f = 0; f < faces_.size(); f++ ) { glyph_index = FT_Get_Char_Index( faces_[f].face_, c ); if ( glyph_index != 0 ) break; } if ( glyph_index == 0 ) return; // Otherwise, either compile it (and call it) or ... else if ( compile_mode_ == COMPILE ) { GLuint dlist = compile( c ); glCallList( dlist ); } // ... render it immediately else { renderGlyph( faces_[f].face_, glyph_index ); } } #ifndef OGLFT_NO_WX // Assume the MODELVIEW matrix is already setup and draw the // (UNICODE) character. void Face::draw ( const wxChar c ) { // See if we've done it already GDLCI fgi = glyph_dlists_.find( c ); if ( fgi != glyph_dlists_.end( ) ) { glCallList( fgi->second ); return; } unsigned int f; FT_UInt glyph_index = 0; for ( f = 0; f < faces_.size(); f++ ) { glyph_index = FT_Get_Char_Index( faces_[f].face_, c ); if ( glyph_index != 0 ) { break; } } if ( glyph_index == 0 ) return; // Otherwise, either compile it (and call it) or ... if ( compile_mode_ == COMPILE ) { GLuint dlist = compile( c ); glCallList( dlist ); } // ... render it immediately else { renderGlyph( faces_[f].face_, glyph_index ); } } #endif /* OGLFT_NO_WX */ // Draw the (latin1) character at the given position. The MODELVIEW // matrix is modified by the glyph advance. void Face::draw ( GLfloat x, GLfloat y, unsigned char c ) { glTranslatef( x, y, 0. ); glColor4f( foreground_color_[R], foreground_color_[G], foreground_color_[B], foreground_color_[A] ); glRasterPos2i( 0, 0 ); draw( c ); } // Draw the (latin1) character at the given position. The MODELVIEW // matrix is modified by the glyph advance. void Face::draw ( GLfloat x, GLfloat y, GLfloat z, unsigned char c ) { glTranslatef( x, y, z ); glColor4f( foreground_color_[R], foreground_color_[G], foreground_color_[B], foreground_color_[A] ); glRasterPos2i( 0, 0 ); draw( c ); } #ifndef OGLFT_NO_WX // Draw the (UNICODE) character at the given position. The MODELVIEW // matrix is modified by the glyph advance. void Face::draw ( GLfloat x, GLfloat y, wxChar c ) { glTranslatef( x, y, 0. ); glColor4f( foreground_color_[R], foreground_color_[G], foreground_color_[B], foreground_color_[A] ); glRasterPos2i( 0, 0 ); draw( c ); } // Draw the (UNICODE) character at the given position. The MODELVIEW // matrix is modified by the glyph advance. void Face::draw ( GLfloat x, GLfloat y, GLfloat z, wxChar c ) { glTranslatef( x, y, z ); glColor4f( foreground_color_[R], foreground_color_[G], foreground_color_[B], foreground_color_[A] ); glRasterPos2i( 0, 0 ); draw( c ); } #endif /* OGLFT_NO_WX */ // Draw the (latin1) string at the given position. void Face::draw ( GLfloat x, GLfloat y, const char* s ) { if ( !advance_ ) glPushMatrix(); if ( horizontal_justification_ != ORIGIN || vertical_justification_ != BASELINE ) { glPushMatrix(); BBox bbox = measure_nominal( s ); GLfloat dx = 0, dy = 0; switch ( horizontal_justification_ ) { case LEFT: dx = -bbox.x_min_; break; case CENTER: dx = -( bbox.x_min_ + bbox.x_max_ ) / 2.; break; case RIGHT: dx = -bbox.x_max_; break; default: break; } switch ( vertical_justification_ ) { case BOTTOM: dy = -bbox.y_min_; break; case MIDDLE: dy = -( bbox.y_min_ + bbox.y_max_ ) / 2.; break; case TOP: dy = -bbox.y_max_; break; default: break; } // There is probably a less expensive way to compute this glRotatef( string_rotation_, 0., 0., 1. ); glTranslatef( dx, dy, 0 ); glRotatef( -string_rotation_, 0., 0., 1. ); } glTranslatef( x, y, 0. ); glColor4f( foreground_color_[R], foreground_color_[G], foreground_color_[B], foreground_color_[A] ); glRasterPos2i( 0, 0 ); draw( s ); if ( horizontal_justification_ != ORIGIN || vertical_justification_ != BASELINE ) glPopMatrix(); if ( !advance_ ) glPopMatrix(); } // Draw the (latin1) string at the given position. void Face::draw ( GLfloat x, GLfloat y, GLfloat z, const char* s ) { if ( !advance_ ) glPushMatrix(); if ( horizontal_justification_ != ORIGIN || vertical_justification_ != BASELINE ) { glPushMatrix(); BBox bbox = measure_nominal( s ); GLfloat dx = 0, dy = 0; switch ( horizontal_justification_ ) { case LEFT: dx = -bbox.x_min_; break; case CENTER: dx = -( bbox.x_min_ + bbox.x_max_ ) / 2.; break; case RIGHT: dx = -bbox.x_max_; break; default: break; } switch ( vertical_justification_ ) { case BOTTOM: dy = -bbox.y_min_; break; case MIDDLE: dy = -( bbox.y_min_ + bbox.y_max_ ) / 2.; break; case TOP: dy = -bbox.y_max_; break; default: break; } // There is probably a less expensive way to compute this glRotatef( string_rotation_, 0., 0., 1. ); glTranslatef( dx, dy, 0 ); glRotatef( -string_rotation_, 0., 0., 1. ); } glTranslatef( x, y, z ); glColor4f( foreground_color_[R], foreground_color_[G], foreground_color_[B], foreground_color_[A] ); glRasterPos2i( 0, 0 ); draw( s ); if ( horizontal_justification_ != ORIGIN || vertical_justification_ != BASELINE ) glPopMatrix(); if ( !advance_ ) glPopMatrix(); } #ifndef OGLFT_NO_WX // Draw the (UNICODE) string at the given position. void Face::draw ( GLfloat x, GLfloat y, const wxString& s ) { if ( !advance_ ) glPushMatrix(); if ( horizontal_justification_ != ORIGIN || vertical_justification_ != BASELINE ) { glPushMatrix(); BBox bbox = measure_nominal( s ); GLfloat dx = 0, dy = 0; switch ( horizontal_justification_ ) { case LEFT: dx = -bbox.x_min_; break; case CENTER: dx = -( bbox.x_min_ + bbox.x_max_ ) / 2.; break; case RIGHT: dx = -bbox.x_max_; break; default: break; } switch ( vertical_justification_ ) { case BOTTOM: dy = -bbox.y_min_; break; case MIDDLE: dy = -( bbox.y_min_ + bbox.y_max_ ) / 2.; break; case TOP: dy = -bbox.y_max_; break; default: break; } // There is probably a less expensive way to compute this glRotatef( string_rotation_, 0., 0., 1. ); glTranslatef( dx, dy, 0 ); glRotatef( -string_rotation_, 0., 0., 1. ); } glTranslatef( x, y, 0. ); glColor4f( foreground_color_[R], foreground_color_[G], foreground_color_[B], foreground_color_[A] ); glRasterPos2i( 0, 0 ); draw( s ); if ( horizontal_justification_ != ORIGIN || vertical_justification_ != BASELINE ) glPopMatrix(); if ( !advance_ ) glPopMatrix(); } // Draw the (UNICODE) string at the given position. void Face::draw ( GLfloat x, GLfloat y, GLfloat z, const wxString& s ) { if ( !advance_ ) glPushMatrix(); if ( horizontal_justification_ != ORIGIN || vertical_justification_ != BASELINE ) { glPushMatrix(); // In 3D, we need to exert more care in the computation of the // bounding box of the text. NOTE: Needs to be fixed up for // polygonal faces, too... BBox bbox; // Code from measure_nominal, but changed to use measureRaw instead if ( string_rotation_ == 0. ) bbox = measureRaw( s ); else { // Undo rotation for ( unsigned int f = 0; f < faces_.size(); f++ ) FT_Set_Transform( faces_[f].face_, 0, 0 ); bbox = measureRaw( s ); // Redo rotation float angle; if ( string_rotation_ < 0. ) { angle = 360. - fmod( fabs( string_rotation_ ), 360.f ); } else { angle = fmod( string_rotation_, 360.f ); } FT_Matrix rotation_matrix; FT_Vector sinus; FT_Vector_Unit( &sinus, (FT_Angle)(angle * 0x10000L) ); rotation_matrix.xx = sinus.x; rotation_matrix.xy = -sinus.y; rotation_matrix.yx = sinus.y; rotation_matrix.yy = sinus.x; for ( unsigned int f = 0; f < faces_.size(); f++ ) FT_Set_Transform( faces_[f].face_, &rotation_matrix, 0 ); } // Determine the offset into the bounding box which will appear // at the user's specified position. GLfloat dx = 0, dy = 0; switch ( horizontal_justification_ ) { case LEFT: dx = bbox.x_min_; break; case CENTER: dx = ( bbox.x_min_ + bbox.x_max_ ) / 2; break; case RIGHT: dx = bbox.x_max_; break; default: break; } switch ( vertical_justification_ ) { case BOTTOM: dy = bbox.y_min_; break; case MIDDLE: dy = ( bbox.y_min_ + bbox.y_max_ ) /2; break; case TOP: dy = bbox.y_max_; break; default: break; } // **Now** rotate these coordinates around into 3D modeling coordinates! GLint viewport[4]; GLdouble modelview[16], projection[16]; glGetIntegerv( GL_VIEWPORT, viewport ); glGetDoublev( GL_MODELVIEW_MATRIX, modelview ); glGetDoublev( GL_PROJECTION_MATRIX, projection ); GLdouble x0, y0, z0; gluUnProject( 0, 0, 0, modelview, projection, viewport, &x0, &y0, &z0 ); GLdouble dx_m, dy_m, dz_m; gluUnProject( dx, dy, 0., modelview, projection, viewport,&dx_m,&dy_m,&dz_m ); glTranslated( x0-dx_m, y0-dy_m, z0-dz_m ); } glTranslatef( x, y, z ); glColor4f( foreground_color_[R], foreground_color_[G], foreground_color_[B], foreground_color_[A] ); glRasterPos2i( 0, 0 ); draw( s ); if ( horizontal_justification_ != ORIGIN || vertical_justification_ != BASELINE ) glPopMatrix(); if ( !advance_ ) glPopMatrix(); } // Draw the number at the given position per the given format. void Face::draw ( GLfloat x, GLfloat y, const wxString& format, double number ) { draw( x, y, format_number( format, number ) ); } // Draw the number at the given position per the given format. void Face::draw ( GLfloat x, GLfloat y, GLfloat z, const wxString& format, double number ) { draw( x, y, z, format_number( format, number ) ); } #endif /* OGLFT_NO_WX */ Raster::Raster ( const char* filename, float point_size, FT_UInt resolution ) : Face( filename, point_size, resolution ) { if ( !isValid() ) return; init(); } Raster::Raster ( FT_Face face, float point_size, FT_UInt resolution ) : Face( face, point_size, resolution ) { init(); } void Raster::init ( void ) { character_rotation_z_ = 0; setCharSize(); setCharacterRotationReference( 'o' ); } Raster::~Raster ( void ) { clearCaches(); } void Raster::setCharacterRotationZ ( GLfloat character_rotation_z ) { if ( character_rotation_z != character_rotation_z_ ) { character_rotation_z_ = character_rotation_z; clearCaches(); } } double Raster::height ( void ) const { if ( faces_[0].face_->height > 0 ) return faces_[0].face_->height / 64.; else return faces_[0].face_->size->metrics.y_ppem; } BBox Raster::measure ( unsigned char c ) { BBox bbox; // For starters, just get the unscaled glyph bounding box unsigned int f; FT_UInt glyph_index = 0; for ( f = 0; f < faces_.size(); f++ ) { glyph_index = FT_Get_Char_Index( faces_[f].face_, c ); if ( glyph_index != 0 ) break; } if ( glyph_index == 0 ) return bbox; FT_Error error = FT_Load_Glyph( faces_[f].face_, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return bbox; FT_Glyph glyph; error = FT_Get_Glyph( faces_[f].face_->glyph, &glyph ); if ( error != 0 ) return bbox; FT_BBox ft_bbox; FT_Glyph_Get_CBox( glyph, ft_glyph_bbox_unscaled, &ft_bbox ); FT_Done_Glyph( glyph ); bbox = ft_bbox; bbox.advance_ = faces_[f].face_->glyph->advance; // In order to be accurate regarding the placement of text not // aligned at the glyph's origin (CENTER/MIDDLE), the bounding box // of the raster format has to be projected back into the // view's coordinates GLint viewport[4]; GLdouble modelview[16], projection[16]; glGetIntegerv( GL_VIEWPORT, viewport ); glGetDoublev( GL_MODELVIEW_MATRIX, modelview ); glGetDoublev( GL_PROJECTION_MATRIX, projection ); // Well, first we have to get the Origin, since that is the basis // of the bounding box GLdouble x0, y0, z0; gluUnProject( 0., 0., 0., modelview, projection, viewport, &x0, &y0, &z0 ); GLdouble x, y, z; gluUnProject( bbox.x_min_, bbox.y_min_, 0., modelview, projection, viewport, &x, &y, &z ); bbox.x_min_ = x - x0; bbox.y_min_ = y - y0; gluUnProject( bbox.x_max_, bbox.y_max_, 0., modelview, projection, viewport, &x, &y, &z ); bbox.x_max_ = x - x0; bbox.y_max_ = y - y0; gluUnProject( bbox.advance_.dx_, bbox.advance_.dy_, 0., modelview, projection, viewport, &x, &y, &z ); bbox.advance_.dx_ = x - x0; bbox.advance_.dy_ = y - y0; return bbox; } #ifdef _UNICODE #ifndef OGLFT_NO_WX BBox Raster::measure ( const wxChar c ) { BBox bbox; // For starters, just get the unscaled glyph bounding box unsigned int f; FT_UInt glyph_index = 0; for ( f = 0; f < faces_.size(); f++ ) { glyph_index = FT_Get_Char_Index( faces_[f].face_, c ); if ( glyph_index != 0 ) break; } if ( glyph_index == 0 ) return bbox; FT_Error error = FT_Load_Glyph( faces_[f].face_, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return bbox; FT_Glyph glyph; error = FT_Get_Glyph( faces_[f].face_->glyph, &glyph ); if ( error != 0 ) return bbox; FT_BBox ft_bbox; FT_Glyph_Get_CBox( glyph, ft_glyph_bbox_unscaled, &ft_bbox ); FT_Done_Glyph( glyph ); bbox = ft_bbox; bbox.advance_ = faces_[f].face_->glyph->advance; // In order to be accurate regarding the placement of text not // aligned at the glyph's origin (CENTER/MIDDLE), the bounding box // of the raster format has to be projected back into the // view's coordinates GLint viewport[4]; GLdouble modelview[16], projection[16]; glGetIntegerv( GL_VIEWPORT, viewport ); glGetDoublev( GL_MODELVIEW_MATRIX, modelview ); glGetDoublev( GL_PROJECTION_MATRIX, projection ); // Well, first we have to get the Origin, since that is the basis // of the bounding box GLdouble x0, y0, z0; gluUnProject( 0., 0., 0., modelview, projection, viewport, &x0, &y0, &z0 ); GLdouble x, y, z; gluUnProject( bbox.x_min_, bbox.y_min_, 0., modelview, projection, viewport, &x, &y, &z ); bbox.x_min_ = x - x0; bbox.y_min_ = y - y0; gluUnProject( bbox.x_max_, bbox.y_max_, 0., modelview, projection, viewport, &x, &y, &z ); bbox.x_max_ = x - x0; bbox.y_max_ = y - y0; gluUnProject( bbox.advance_.dx_, bbox.advance_.dy_, 0., modelview, projection, viewport, &x, &y, &z ); bbox.advance_.dx_ = x - x0; bbox.advance_.dy_ = y - y0; return bbox; } #endif /* OGLFT_NO_WX */ #endif /* _UNICODE */ GLuint Raster::compileGlyph ( FT_Face face, FT_UInt glyph_index ) { GLuint dlist = glGenLists( 1 ); glNewList( dlist, GL_COMPILE ); renderGlyph( face, glyph_index ); glEndList( ); return dlist; } void Raster::setCharSize ( void ) { FT_Error error; for ( unsigned int i = 0; i < faces_.size(); i++ ) { error = FT_Set_Char_Size( faces_[i].face_, (FT_F26Dot6)( point_size_ * 64 ), (FT_F26Dot6)( point_size_ * 64 ), resolution_, resolution_ ); if ( error != 0 ) return; } if ( rotation_reference_glyph_ != 0 ) setRotationOffset(); } void Raster::setRotationOffset ( void ) { FT_Error error = FT_Load_Glyph( rotation_reference_face_, rotation_reference_glyph_, FT_LOAD_RENDER ); if ( error != 0 ) return; rotation_offset_y_ = rotation_reference_face_->glyph->bitmap.rows / 2.; } void Raster::clearCaches ( void ) { GDLI fgi = glyph_dlists_.begin(); for ( ; fgi != glyph_dlists_.end(); ++fgi ) { glDeleteLists( fgi->second, 1 ); } glyph_dlists_.clear(); } Monochrome::Monochrome ( const char* filename, float point_size, FT_UInt resolution ) : Raster( filename, point_size, resolution ) {} Monochrome::Monochrome ( FT_Face face, float point_size, FT_UInt resolution ) : Raster( face, point_size, resolution ) {} Monochrome::~Monochrome ( void ) {} GLubyte* Monochrome::invertBitmap ( const FT_Bitmap& bitmap ) { // In FreeType 2.0.9, the pitch of bitmaps was rounded up to an // even number. In general, this disagrees with what we had been // using for OpenGL. int width = bitmap.width / 8 + ( ( bitmap.width & 7 ) > 0 ? 1 : 0 ); GLubyte* inverse = new GLubyte[ bitmap.rows * width ]; GLubyte* inverse_ptr = inverse; for ( int r = 0; r < bitmap.rows; r++ ) { GLubyte* bitmap_ptr = &bitmap.buffer[bitmap.pitch * ( bitmap.rows - r - 1 )]; for ( int p = 0; p < width; p++ ) *inverse_ptr++ = *bitmap_ptr++; } return inverse; } void Monochrome::renderGlyph ( FT_Face face, FT_UInt glyph_index ) { // Start by retrieving the glyph's data. FT_Error error = FT_Load_Glyph( face, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return; FT_Glyph original_glyph; FT_Glyph glyph; error = FT_Get_Glyph( face->glyph, &original_glyph ); if ( error != 0 ) return; error = FT_Glyph_Copy( original_glyph, &glyph ); FT_Done_Glyph( original_glyph ); if ( error != 0 ) return; // If the individual characters are rotated (as distinct from string // rotation), then apply that extra rotation here. This is equivalent // to the sequence // glTranslate(x_center,y_center); // glRotate(angle); // glTranslate(-x_center,-y_center); // which is used for the polygonal styles. The deal with the raster // styles is that you must retain the advance from the string rotation // so that the glyphs are laid out properly. So, we make a copy of // the string rotated glyph, and then rotate that and add back an // additional offset to (in effect) restore the proper origin and // advance of the glyph. if ( character_rotation_z_ != 0. ) { FT_Matrix rotation_matrix; FT_Vector sinus; FT_Vector_Unit( &sinus, (FT_Angle)(character_rotation_z_ * 0x10000L) ); rotation_matrix.xx = sinus.x; rotation_matrix.xy = -sinus.y; rotation_matrix.yx = sinus.y; rotation_matrix.yy = sinus.x; FT_Vector original_offset, rotation_offset; original_offset.x = ( face->glyph->metrics.width / 2 + face->glyph->metrics.horiBearingX ) / 64 * 0x10000L; original_offset.y = (FT_Pos)(rotation_offset_y_ * 0x10000L); rotation_offset = original_offset; FT_Vector_Rotate( &rotation_offset, (FT_Angle)(character_rotation_z_ * 0x10000L) ); rotation_offset.x = original_offset.x - rotation_offset.x; rotation_offset.y = original_offset.y - rotation_offset.y; rotation_offset.x /= 1024; rotation_offset.y /= 1024; error = FT_Glyph_Transform( glyph, &rotation_matrix, &rotation_offset ); } error = FT_Glyph_To_Bitmap( &glyph, FT_RENDER_MODE_MONO, 0, 1 ); if ( error != 0 ) { FT_Done_Glyph( glyph ); return; } FT_BitmapGlyph bitmap_glyph = (FT_BitmapGlyph)glyph; // Evidently, in FreeType2, you can only get "upside-down" bitmaps and // OpenGL won't invert a bitmap with PixelZoom, so we have to invert the // glyph's bitmap ourselves. GLubyte* inverted_bitmap = invertBitmap( bitmap_glyph->bitmap ); glBitmap( bitmap_glyph->bitmap.width, bitmap_glyph->bitmap.rows, -bitmap_glyph->left, bitmap_glyph->bitmap.rows - bitmap_glyph->top, face->glyph->advance.x / 64., face->glyph->advance.y / 64., inverted_bitmap ); FT_Done_Glyph( glyph ); delete[] inverted_bitmap; } Grayscale::Grayscale ( const char* filename, float point_size, FT_UInt resolution ) : Raster( filename, point_size, resolution ) {} Grayscale::Grayscale ( FT_Face face, float point_size, FT_UInt resolution ) : Raster( face, point_size, resolution ) {} Grayscale::~Grayscale ( void ) {} GLubyte* Grayscale::invertPixmap ( const FT_Bitmap& bitmap ) { GLubyte* inverse = new GLubyte[ bitmap.rows * bitmap.pitch ]; GLubyte* inverse_ptr = inverse; for ( int r = 0; r < bitmap.rows; r++ ) { GLubyte* bitmap_ptr = &bitmap.buffer[bitmap.pitch * ( bitmap.rows - r - 1 )]; for ( int p = 0; p < bitmap.pitch; p++ ) { *inverse_ptr++ = *bitmap_ptr++; } } return inverse; } void Grayscale::renderGlyph ( FT_Face face, FT_UInt glyph_index ) { FT_Error error = FT_Load_Glyph( face, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return; FT_Glyph original_glyph; FT_Glyph glyph; error = FT_Get_Glyph( face->glyph, &original_glyph ); if ( error != 0 ) return; error = FT_Glyph_Copy( original_glyph, &glyph ); FT_Done_Glyph( original_glyph ); if ( error != 0 ) return; if ( character_rotation_z_ != 0. ) { FT_Matrix rotation_matrix; FT_Vector sinus; FT_Vector_Unit( &sinus, (FT_Angle)(character_rotation_z_ * 0x10000L) ); rotation_matrix.xx = sinus.x; rotation_matrix.xy = -sinus.y; rotation_matrix.yx = sinus.y; rotation_matrix.yy = sinus.x; FT_Vector original_offset, rotation_offset; original_offset.x = ( face->glyph->metrics.width / 2 + face->glyph->metrics.horiBearingX ) / 64 * 0x10000L; original_offset.y = (FT_Pos)(rotation_offset_y_ * 0x10000L); rotation_offset = original_offset; FT_Vector_Rotate( &rotation_offset, (FT_Angle)(character_rotation_z_ * 0x10000L) ); rotation_offset.x = original_offset.x - rotation_offset.x; rotation_offset.y = original_offset.y - rotation_offset.y; rotation_offset.x /= 1024; rotation_offset.y /= 1024; error = FT_Glyph_Transform( glyph, &rotation_matrix, &rotation_offset ); } error = FT_Glyph_To_Bitmap( &glyph, FT_RENDER_MODE_NORMAL, 0, 1 ); if ( error != 0 ) { FT_Done_Glyph( glyph ); return; } FT_BitmapGlyph bitmap_glyph = (FT_BitmapGlyph)glyph; // Evidently, in FreeType2, you can only get "upside-down" bitmaps // (this could be cured with PixelZoom, but that an additional function) GLubyte* inverted_pixmap = invertPixmap( bitmap_glyph->bitmap ); // :-( If this is compiled in a display list, it may or not be in effect // later when the list is actually called. So, the client should be alerted // to this fact: unpack alignment must be 1 glPushAttrib( GL_PIXEL_MODE_BIT ); glPixelTransferf( GL_RED_SCALE, foreground_color_[R] - background_color_[R] ); glPixelTransferf( GL_GREEN_SCALE, foreground_color_[G] - background_color_[G] ); glPixelTransferf( GL_BLUE_SCALE, foreground_color_[B] - background_color_[B] ); glPixelTransferf( GL_ALPHA_SCALE, foreground_color_[A] ); glPixelTransferf( GL_RED_BIAS, background_color_[R] ); glPixelTransferf( GL_GREEN_BIAS, background_color_[G] ); glPixelTransferf( GL_BLUE_BIAS, background_color_[B] ); glPixelTransferf( GL_ALPHA_BIAS, background_color_[A] ); glBitmap( 0, 0, 0, 0, bitmap_glyph->left, bitmap_glyph->top - bitmap_glyph->bitmap.rows, 0 ); glDrawPixels( bitmap_glyph->bitmap.width, bitmap_glyph->bitmap.rows, GL_LUMINANCE, GL_UNSIGNED_BYTE, inverted_pixmap ); // This is how you advance the raster position when drawing PIXMAPS // (without querying the state) glBitmap( 0, 0, 0, 0, -bitmap_glyph->left + face->glyph->advance.x / 64., bitmap_glyph->bitmap.rows - bitmap_glyph->top + face->glyph->advance.y / 64., 0 ); FT_Done_Glyph( glyph ); glPopAttrib(); delete[] inverted_pixmap; } Translucent::Translucent ( const char* filename, float point_size, FT_UInt resolution ) : Raster( filename, point_size, resolution ) {} Translucent::Translucent ( FT_Face face, float point_size, FT_UInt resolution ) : Raster( face, point_size, resolution ) {} Translucent::~Translucent ( void ) {} // The simplest format which glDrawPixels can render with (varying) transparency // is GL_LUMINANCE_ALPHA; so, we take the grayscale bitmap from FreeType // and treat all non-zero values as full luminance (basically the mask for // rendering) and duplicate the grayscale values as alpha values // (as well as turn it upside-down). GLubyte* Translucent::invertPixmapWithAlpha ( const FT_Bitmap& bitmap ) { GLubyte* inverse = new GLubyte[ 2 * bitmap.rows * bitmap.pitch ]; GLubyte* inverse_ptr = inverse; for ( int r = 0; r < bitmap.rows; r++ ) { GLubyte* bitmap_ptr = &bitmap.buffer[bitmap.pitch * ( bitmap.rows - r - 1 )]; for ( int p = 0; p < bitmap.pitch; p++ ) { *inverse_ptr++ = *bitmap_ptr ? 255 : 0; *inverse_ptr++ = *bitmap_ptr++; } } return inverse; } void Translucent::renderGlyph ( FT_Face face, FT_UInt glyph_index ) { FT_Error error = FT_Load_Glyph( face, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return; FT_Glyph original_glyph; FT_Glyph glyph; error = FT_Get_Glyph( face->glyph, &original_glyph ); if ( error != 0 ) return; error = FT_Glyph_Copy( original_glyph, &glyph ); FT_Done_Glyph( original_glyph ); if ( error != 0 ) return; if ( character_rotation_z_ != 0. ) { FT_Matrix rotation_matrix; FT_Vector sinus; FT_Vector_Unit( &sinus, (FT_Angle)(character_rotation_z_ * 0x10000L) ); rotation_matrix.xx = sinus.x; rotation_matrix.xy = -sinus.y; rotation_matrix.yx = sinus.y; rotation_matrix.yy = sinus.x; FT_Vector original_offset, rotation_offset; original_offset.x = ( face->glyph->metrics.width / 2 + face->glyph->metrics.horiBearingX ) / 64 * 0x10000L; original_offset.y = (FT_Pos)(rotation_offset_y_ * 0x10000L); rotation_offset = original_offset; FT_Vector_Rotate( &rotation_offset, (FT_Angle)(character_rotation_z_ * 0x10000L) ); rotation_offset.x = original_offset.x - rotation_offset.x; rotation_offset.y = original_offset.y - rotation_offset.y; rotation_offset.x /= 1024; rotation_offset.y /= 1024; error = FT_Glyph_Transform( glyph, &rotation_matrix, &rotation_offset ); } error = FT_Glyph_To_Bitmap( &glyph, FT_RENDER_MODE_NORMAL, 0, 1 ); if ( error != 0 ) { FT_Done_Glyph( glyph ); return; } FT_BitmapGlyph bitmap_glyph = (FT_BitmapGlyph)glyph; // Evidently, in FreeType2, you can only get "upside-down" bitmaps. For // translucency, the grayscale bitmap generated by FreeType is expanded // to include an alpha value (and the non-zero values of the // grayscale bitmap are saturated to provide a "mask" of the glyph). GLubyte* inverted_pixmap = invertPixmapWithAlpha( bitmap_glyph->bitmap ); glPushAttrib( GL_PIXEL_MODE_BIT ); glPixelTransferf( GL_RED_SCALE, foreground_color_[R] - background_color_[R] ); glPixelTransferf( GL_GREEN_SCALE, foreground_color_[G] -background_color_[G] ); glPixelTransferf( GL_BLUE_SCALE, foreground_color_[B] - background_color_[B] ); glPixelTransferf( GL_ALPHA_SCALE, foreground_color_[A] ); glPixelTransferf( GL_RED_BIAS, background_color_[R] ); glPixelTransferf( GL_GREEN_BIAS, background_color_[G] ); glPixelTransferf( GL_BLUE_BIAS, background_color_[B] ); glPixelTransferf( GL_ALPHA_BIAS, background_color_[A] ); // Set the proper raster position for rendering this glyph (why doesn't // OpenGL have a similar function for pixmaps?) glBitmap( 0, 0, 0, 0, bitmap_glyph->left, bitmap_glyph->top - bitmap_glyph->bitmap.rows, 0 ); glDrawPixels( bitmap_glyph->bitmap.width, bitmap_glyph->bitmap.rows, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, inverted_pixmap ); // This is how you advance the raster position when drawing PIXMAPS // (without querying the state) glBitmap( 0, 0, 0, 0, -bitmap_glyph->left + face->glyph->advance.x / 64., bitmap_glyph->bitmap.rows - bitmap_glyph->top + face->glyph->advance.y / 64., 0 ); FT_Done_Glyph( glyph ); glPopAttrib(); delete[] inverted_pixmap; } Polygonal::Polygonal ( const char* filename, float point_size, FT_UInt resolution ) : Face( filename, point_size, resolution ) { if ( !isValid() ) return; init(); } Polygonal::Polygonal ( FT_Face face, float point_size, FT_UInt resolution ) : Face( face, point_size, resolution ) { init(); } void Polygonal::init ( void ) { character_rotation_.active_ = false; character_rotation_.x_ = 0; character_rotation_.y_ = 0; character_rotation_.z_ = 0; tessellation_steps_ = DEFAULT_TESSELLATION_STEPS; delta_ = 1. / (double)tessellation_steps_; delta2_ = delta_ * delta_; delta3_ = delta2_ * delta_; // For vector rendition modes, FreeType is allowed to generate the // lines and arcs at the original face definition resolution. To // get to the proper glyph size, the vertices are scaled before // they're passed to the GLU tessellation routines. if ( resolution_ != 0 ) vector_scale_ = (GLdouble)( point_size_ * resolution_ ) / (GLdouble)( faces_.front().face_->units_per_EM * 72 ); else // According to the FreeType documentation, resolution == 0 -> 72 DPI vector_scale_ = (GLdouble)( point_size_ ) / (GLdouble)( faces_.front().face_->units_per_EM ); color_tess_ = 0; texture_tess_ = 0; setCharSize(); // Can't call this until a valid character size is set! setCharacterRotationReference( 'o' ); } Polygonal::~Polygonal ( void ) { clearCaches(); } // Note: Changing the color tessellation object also clears the // display list cache void Polygonal::setColorTess ( ColorTess* color_tess ) { color_tess_ = color_tess; clearCaches(); } // Note: Changing the texture coordinate tessellation object also // clears the display list cache void Polygonal::setTextureTess ( TextureTess* texture_tess ) { texture_tess_ = texture_tess; clearCaches(); } // Note: Changing the appoximation steps also clears the display list cache void Polygonal::setTessellationSteps ( unsigned int tessellation_steps ) { if ( tessellation_steps != tessellation_steps_ ) { tessellation_steps_ = tessellation_steps; delta_ = 1. / (double)tessellation_steps_; delta2_ = delta_ * delta_; delta3_ = delta2_ * delta_; clearCaches(); } } // Note: Changing the character rotation also clears the display list cache. void Polygonal::setCharacterRotationX ( GLfloat character_rotation_x ) { if ( character_rotation_x != character_rotation_.x_ ) { character_rotation_.x_ = character_rotation_x; if ( character_rotation_.x_ != 0. || character_rotation_.y_ != 0. || character_rotation_.z_ != 0. ) character_rotation_.active_ = true; else character_rotation_.active_ = false; clearCaches(); } } void Polygonal::setCharacterRotationY ( GLfloat character_rotation_y ) { if ( character_rotation_y != character_rotation_.y_ ) { character_rotation_.y_ = character_rotation_y; if ( character_rotation_.x_ != 0. || character_rotation_.y_ != 0. || character_rotation_.z_ != 0. ) character_rotation_.active_ = true; else character_rotation_.active_ = false; clearCaches(); } } void Polygonal::setCharacterRotationZ ( GLfloat character_rotation_z ) { if ( character_rotation_z != character_rotation_.z_ ) { character_rotation_.z_ = character_rotation_z; if ( character_rotation_.x_ != 0. || character_rotation_.y_ != 0. || character_rotation_.z_ != 0. ) character_rotation_.active_ = true; else character_rotation_.active_ = false; clearCaches(); } } void Polygonal::setCharSize ( void ) { for ( unsigned int i = 0; i < faces_.size(); i++ ) { FT_Error error = FT_Set_Char_Size( faces_[i].face_, 0, faces_[i].face_->units_per_EM * 64, 0, 0 ); if ( error != 0 ) return; } if ( rotation_reference_glyph_ != 0 ) setRotationOffset(); } void Polygonal::setRotationOffset ( void ) { FT_Error error = FT_Load_Glyph( rotation_reference_face_, rotation_reference_glyph_, FT_LOAD_RENDER ); if ( error != 0 ) return; vector_scale_ = ( point_size_ * resolution_ ) / ( 72. * rotation_reference_face_->units_per_EM ); rotation_offset_y_ = ( rotation_reference_face_->glyph->metrics.horiBearingY / 2. ) / 64. * vector_scale_; } double Polygonal::height ( void ) const { if ( faces_[0].face_->height > 0 ) return ( faces_[0].face_->height * point_size_ * resolution_ ) / ( 72. * faces_[0].face_->units_per_EM ); else return ( faces_[0].face_->size->metrics.y_ppem * point_size_ * resolution_ ) / ( 72. * faces_[0].face_->units_per_EM ); } BBox Polygonal::measure ( unsigned char c ) { BBox bbox; // For starters, just get the unscaled glyph bounding box unsigned int f; FT_UInt glyph_index = 0; for ( f = 0; f < faces_.size(); f++ ) { glyph_index = FT_Get_Char_Index( faces_[f].face_, c ); if ( glyph_index != 0 ) break; } if ( glyph_index == 0 ) return bbox; FT_Error error = FT_Load_Glyph( faces_[f].face_, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return bbox; FT_Glyph glyph; error = FT_Get_Glyph( faces_[f].face_->glyph, &glyph ); if ( error != 0 ) return bbox; FT_BBox ft_bbox; FT_Glyph_Get_CBox( glyph, ft_glyph_bbox_unscaled, &ft_bbox ); FT_Done_Glyph( glyph ); bbox = ft_bbox; bbox.advance_ = faces_[f].face_->glyph->advance; bbox *= ( point_size_ * resolution_ ) / ( 72. * faces_[f].face_->units_per_EM ); return bbox; } #ifdef _UNICODE #ifndef OGLFT_NO_WX BBox Polygonal::measure ( const wxChar c ) { BBox bbox; // For starters, just get the unscaled glyph bounding box unsigned int f; FT_UInt glyph_index = 0; for ( f = 0; f < faces_.size(); f++ ) { glyph_index = FT_Get_Char_Index( faces_[f].face_, c ); if ( glyph_index != 0 ) break; } if ( glyph_index == 0 ) return bbox; FT_Error error = FT_Load_Glyph( faces_[f].face_, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return bbox; FT_Glyph glyph; error = FT_Get_Glyph( faces_[f].face_->glyph, &glyph ); if ( error != 0 ) return bbox; FT_BBox ft_bbox; FT_Glyph_Get_CBox( glyph, ft_glyph_bbox_unscaled, &ft_bbox ); FT_Done_Glyph( glyph ); bbox = ft_bbox; bbox.advance_ = faces_[f].face_->glyph->advance; bbox *= ( point_size_ * resolution_ ) / ( 72. * faces_[f].face_->units_per_EM ); return bbox; } #endif /* OGLFT_NO_WX */ #endif /* _UNICODE */ GLuint Polygonal::compileGlyph ( FT_Face face, FT_UInt glyph_index ) { GLuint dlist = glGenLists( 1 ); glNewList( dlist, GL_COMPILE ); renderGlyph( face, glyph_index ); glEndList( ); return dlist; } void Polygonal::clearCaches ( void ) { GDLI fgi = glyph_dlists_.begin(); for ( ; fgi != glyph_dlists_.end(); ++fgi ) { glDeleteLists( fgi->second, 1 ); } glyph_dlists_.clear(); } Outline::Outline ( const char* filename, float point_size, FT_UInt resolution ) : Polygonal( filename, point_size, resolution ) { if ( !isValid() ) return; init(); } Outline::Outline ( FT_Face face, float point_size, FT_UInt resolution ) : Polygonal( face, point_size, resolution ) { init(); } void Outline::init ( void ) { interface_.move_to = (FT_Outline_MoveTo_Func)moveToCallback; interface_.line_to = (FT_Outline_LineTo_Func)lineToCallback; interface_.conic_to = (FT_Outline_ConicTo_Func)conicToCallback; interface_.cubic_to = (FT_Outline_CubicTo_Func)cubicToCallback; interface_.shift = 0; interface_.delta = 0; } Outline::~Outline ( void ) {} void Outline::renderGlyph ( FT_Face face, FT_UInt glyph_index ) { FT_Error error = FT_Load_Glyph( face, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return; FT_OutlineGlyph g; error = FT_Get_Glyph( face->glyph, (FT_Glyph*)&g ); if ( error != 0 ) return; vector_scale_ = ( point_size_ * resolution_ ) / ( 72. * face->units_per_EM ); if ( character_rotation_.active_ ) { glPushMatrix(); glTranslatef( ( face->glyph->metrics.width / 2. + face->glyph->metrics.horiBearingX ) / 64. * vector_scale_, rotation_offset_y_, 0. ); if ( character_rotation_.x_ != 0. ) glRotatef( character_rotation_.x_, 1., 0., 0. ); if ( character_rotation_.y_ != 0. ) glRotatef( character_rotation_.y_, 0., 1., 0. ); if ( character_rotation_.z_ != 0. ) glRotatef( character_rotation_.z_, 0., 0., 1. ); glTranslatef( -( face->glyph->metrics.width / 2. + face->glyph->metrics.horiBearingX ) / 64. * vector_scale_, -rotation_offset_y_, 0. ); } contour_open_ = false; // The Big Kahuna: the FreeType glyph decomposition routine traverses // the outlines of the font by calling the various routines stored in // outline_interface_. These routines in turn call the GL vertex routines. error = FT_Outline_Decompose( &g->outline, &interface_, this ); FT_Done_Glyph( (FT_Glyph)g ); // Some glyphs may be empty (the 'blank' for instance!) if ( contour_open_ ) glEnd( ); if ( character_rotation_.active_ ) { glPopMatrix(); } // Drawing a character always advances the MODELVIEW. glTranslatef( face->glyph->advance.x / 64. * vector_scale_, face->glyph->advance.y / 64. * vector_scale_, 0. ); for ( VILI vili = vertices_.begin(); vili != vertices_.end(); vili++ ) delete *vili; vertices_.clear(); } int Outline::moveToCallback ( FT_Vector* to, Outline* outline ) { if ( outline->contour_open_ ) { glEnd(); } outline->last_vertex_ = VertexInfo( to, outline->colorTess(), outline->textureTess() ); glBegin( GL_LINE_LOOP ); outline->contour_open_ = true; return 0; } int Outline::lineToCallback ( FT_Vector* to, Outline* outline ) { outline->last_vertex_ = VertexInfo( to, outline->colorTess(), outline->textureTess() ); GLdouble g[2]; g[X] = outline->last_vertex_.v_[X] * outline->vector_scale_; g[Y] = outline->last_vertex_.v_[Y] * outline->vector_scale_; glVertex2dv( g ); return 0; } int Outline::conicToCallback ( FT_Vector* control, FT_Vector* to, Outline* outline ) { // This is crude: Step off conics with a fixed number of increments VertexInfo to_vertex( to, outline->colorTess(), outline->textureTess() ); VertexInfo control_vertex( control, outline->colorTess(), outline->textureTess() ); double b[2], c[2], d[2], f[2], df[2], d2f[2]; GLdouble g[3]; g[Z] = 0.; b[X] = outline->last_vertex_.v_[X] - 2 * control_vertex.v_[X] + to_vertex.v_[X]; b[Y] = outline->last_vertex_.v_[Y] - 2 * control_vertex.v_[Y] + to_vertex.v_[Y]; c[X] = -2 * outline->last_vertex_.v_[X] + 2 * control_vertex.v_[X]; c[Y] = -2 * outline->last_vertex_.v_[Y] + 2 * control_vertex.v_[Y]; d[X] = outline->last_vertex_.v_[X]; d[Y] = outline->last_vertex_.v_[Y]; f[X] = d[X]; f[Y] = d[Y]; df[X] = c[X] * outline->delta_ + b[X] * outline->delta2_; df[Y] = c[Y] * outline->delta_ + b[Y] * outline->delta2_; d2f[X] = 2 * b[X] * outline->delta2_; d2f[Y] = 2 * b[Y] * outline->delta2_; for ( unsigned int i = 0; i < outline->tessellation_steps_-1; i++ ) { f[X] += df[X]; f[Y] += df[Y]; g[X] = f[X] * outline->vector_scale_; g[Y] = f[Y] * outline->vector_scale_; if ( outline->colorTess() ) glColor4fv( outline->colorTess()->color( g ) ); glVertex2dv( g ); df[X] += d2f[X]; df[Y] += d2f[Y]; } g[X] = to_vertex.v_[X] * outline->vector_scale_; g[Y] = to_vertex.v_[Y] * outline->vector_scale_; if ( outline->colorTess() ) glColor4fv( outline->colorTess()->color( g ) ); glVertex2dv( g ); outline->last_vertex_ = to_vertex; return 0; } int Outline::cubicToCallback ( FT_Vector* control1, FT_Vector* control2, FT_Vector* to, Outline* outline ) { // This is crude: Step off cubics with a fixed number of increments VertexInfo to_vertex( to, outline->colorTess(), outline->textureTess() ); VertexInfo control1_vertex( control1, outline->colorTess(), outline->textureTess() ); VertexInfo control2_vertex( control2, outline->colorTess(), outline->textureTess() ); double a[2], b[2], c[2], d[2], f[2], df[2], d2f[2], d3f[2]; GLdouble g[3]; g[Z] = 0.; a[X] = -outline->last_vertex_.v_[X] + 3 * control1_vertex.v_[X] -3 * control2_vertex.v_[X] + to_vertex.v_[X]; a[Y] = -outline->last_vertex_.v_[Y] + 3 * control1_vertex.v_[Y] -3 * control2_vertex.v_[Y] + to_vertex.v_[Y]; b[X] = 3 * outline->last_vertex_.v_[X] - 6 * control1_vertex.v_[X] + 3 * control2_vertex.v_[X]; b[Y] = 3 * outline->last_vertex_.v_[Y] - 6 * control1_vertex.v_[Y] + 3 * control2_vertex.v_[Y]; c[X] = -3 * outline->last_vertex_.v_[X] + 3 * control1_vertex.v_[X]; c[Y] = -3 * outline->last_vertex_.v_[Y] + 3 * control1_vertex.v_[Y]; d[X] = outline->last_vertex_.v_[X]; d[Y] = outline->last_vertex_.v_[Y]; f[X] = d[X]; f[Y] = d[Y]; df[X] = c[X] * outline->delta_ + b[X] * outline->delta2_ + a[X] * outline->delta3_; df[Y] = c[Y] * outline->delta_ + b[Y] * outline->delta2_ + a[Y] * outline->delta3_; d2f[X] = 2 * b[X] * outline->delta2_ + 6 * a[X] * outline->delta3_; d2f[Y] = 2 * b[Y] * outline->delta2_ + 6 * a[Y] * outline->delta3_; d3f[X] = 6 * a[X] * outline->delta3_; d3f[Y] = 6 * a[Y] * outline->delta3_; for ( unsigned int i = 0; i < outline->tessellation_steps_-1; i++ ) { f[X] += df[X]; f[Y] += df[Y]; g[X] = f[X] * outline->vector_scale_; g[Y] = f[Y] * outline->vector_scale_; if ( outline->colorTess() ) glColor4fv( outline->colorTess()->color( g ) ); glVertex2dv( g ); df[X] += d2f[X]; df[Y] += d2f[Y]; d2f[X] += d3f[X]; d2f[Y] += d3f[Y]; } g[X] = to_vertex.v_[X] * outline->vector_scale_; g[Y] = to_vertex.v_[Y] * outline->vector_scale_; if ( outline->colorTess() ) glColor4fv( outline->colorTess()->color( g ) ); glVertex2dv( g ); outline->last_vertex_ = to_vertex; return 0; } Filled::Filled ( const char* filename, float point_size, FT_UInt resolution ) : Polygonal( filename, point_size, resolution ) { if ( !isValid() ) return; init(); } Filled::Filled ( FT_Face face, float point_size, FT_UInt resolution ) : Polygonal( face, point_size, resolution ) { init(); } void Filled::init ( void ) { depth_offset_ = 0; interface_.move_to = (FT_Outline_MoveTo_Func)moveToCallback; interface_.line_to = (FT_Outline_LineTo_Func)lineToCallback; interface_.conic_to = (FT_Outline_ConicTo_Func)conicToCallback; interface_.cubic_to = (FT_Outline_CubicTo_Func)cubicToCallback; interface_.shift = 0; interface_.delta = 0; tess_obj_ = gluNewTess(); #ifdef LXWIN32 gluTessCallback( tess_obj_, GLU_TESS_VERTEX, (void (__stdcall *)(void)) & glVertex3dv ); gluTessCallback( tess_obj_, GLU_TESS_BEGIN, (void (__stdcall *)(void)) & glBegin ); gluTessCallback( tess_obj_, GLU_TESS_END, (void (__stdcall *)(void)) & glEnd ); gluTessCallback( tess_obj_, GLU_TESS_COMBINE_DATA, (void (__stdcall *)(void)) & combineCallback ); gluTessCallback( tess_obj_, GLU_TESS_ERROR, (void (__stdcall *)(void)) & errorCallback); #else gluTessCallback( tess_obj_, GLU_TESS_VERTEX, (GLUTessCallback)vertexCallback ); gluTessCallback( tess_obj_, GLU_TESS_BEGIN, (GLUTessCallback)beginCallback ); gluTessCallback( tess_obj_, GLU_TESS_END, (GLUTessCallback)endCallback ); gluTessCallback( tess_obj_, GLU_TESS_COMBINE_DATA, (GLUTessCallback)combineCallback ); gluTessCallback( tess_obj_, GLU_TESS_ERROR, (GLUTessCallback)errorCallback); #endif } Filled::~Filled ( void ) { gluDeleteTess( tess_obj_ ); } void Filled::renderGlyph ( FT_Face face, FT_UInt glyph_index ) { FT_Error error = FT_Load_Glyph( face, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return; FT_OutlineGlyph g; error = FT_Get_Glyph( face->glyph, (FT_Glyph*)&g ); if ( error != 0 ) return; vector_scale_ = ( point_size_ * resolution_ ) / ( 72. * face->units_per_EM ); if ( character_rotation_.active_ ) { glPushMatrix(); glTranslatef( ( face->glyph->metrics.width / 2. + face->glyph->metrics.horiBearingX ) / 64. * vector_scale_, rotation_offset_y_, 0. ); if ( character_rotation_.x_ != 0. ) glRotatef( character_rotation_.x_, 1., 0., 0. ); if ( character_rotation_.y_ != 0. ) glRotatef( character_rotation_.y_, 0., 1., 0. ); if ( character_rotation_.z_ != 0. ) glRotatef( character_rotation_.z_, 0., 0., 1. ); glTranslatef( -( face->glyph->metrics.width / 2. + face->glyph->metrics.horiBearingX ) / 64. * vector_scale_, -rotation_offset_y_, 0. ); } if ( depth_offset_ != 0. ) { glPushMatrix(); glTranslatef( 0., 0., depth_offset_ ); glNormal3f( 0., 0., 1. ); } else { glNormal3f( 0., 0., -1. ); } glPolygonMode( GL_FRONT_AND_BACK, GL_FILL ); contour_open_ = false; gluTessBeginPolygon( tess_obj_, this ); // The Big Kahuna: the FreeType glyph decomposition routine traverses // the outlines of the font by calling the various routines stored in // interface_. These routines in turn call the GLU tessellation routines // to create OGL polygons. error = FT_Outline_Decompose( &g->outline, &interface_, this ); FT_Done_Glyph( (FT_Glyph)g ); // Some glyphs may be empty (the 'blank' for instance!) if ( contour_open_ ) gluTessEndContour( tess_obj_ ); gluTessEndPolygon( tess_obj_ ); if ( depth_offset_ != 0. ) { glPopMatrix(); } if ( character_rotation_.active_ ) { glPopMatrix(); } // Drawing a character always advances the MODELVIEW. glTranslatef( face->glyph->advance.x / 64 * vector_scale_, face->glyph->advance.y / 64 * vector_scale_, 0. ); for ( VILI vili = extra_vertices_.begin(); vili != extra_vertices_.end(); vili++ ) delete *vili; extra_vertices_.clear(); for ( VILI vili = vertices_.begin(); vili != vertices_.end(); vili++ ) delete *vili; vertices_.clear(); } int Filled::moveToCallback ( FT_Vector* to, Filled* filled ) { if ( filled->contour_open_ ) { gluTessEndContour( filled->tess_obj_ ); } filled->last_vertex_ = VertexInfo( to, filled->colorTess(), filled->textureTess() ); gluTessBeginContour( filled->tess_obj_ ); filled->contour_open_ = true; return 0; } int Filled::lineToCallback ( FT_Vector* to, Filled* filled ) { filled->last_vertex_ = VertexInfo( to, filled->colorTess(), filled->textureTess() ); VertexInfo* vertex = new VertexInfo( to, filled->colorTess(), filled->textureTess() ); vertex->v_[X] *= filled->vector_scale_; vertex->v_[Y] *= filled->vector_scale_; gluTessVertex( filled->tess_obj_, vertex->v_, vertex ); filled->vertices_.push_back( vertex ); return 0; } int Filled::conicToCallback ( FT_Vector* control, FT_Vector* to, Filled* filled ) { // This is crude: Step off conics with a fixed number of increments VertexInfo to_vertex( to, filled->colorTess(), filled->textureTess() ); VertexInfo control_vertex( control, filled->colorTess(), filled->textureTess() ); double b[2], c[2], d[2], f[2], df[2], d2f[2]; b[X] = filled->last_vertex_.v_[X] - 2 * control_vertex.v_[X] + to_vertex.v_[X]; b[Y] = filled->last_vertex_.v_[Y] - 2 * control_vertex.v_[Y] + to_vertex.v_[Y]; c[X] = -2 * filled->last_vertex_.v_[X] + 2 * control_vertex.v_[X]; c[Y] = -2 * filled->last_vertex_.v_[Y] + 2 * control_vertex.v_[Y]; d[X] = filled->last_vertex_.v_[X]; d[Y] = filled->last_vertex_.v_[Y]; f[X] = d[X]; f[Y] = d[Y]; df[X] = c[X] * filled->delta_ + b[X] * filled->delta2_; df[Y] = c[Y] * filled->delta_ + b[Y] * filled->delta2_; d2f[X] = 2 * b[X] * filled->delta2_; d2f[Y] = 2 * b[Y] * filled->delta2_; for ( unsigned int i = 0; i < filled->tessellation_steps_-1; i++ ) { f[X] += df[X]; f[Y] += df[Y]; VertexInfo* vertex = new VertexInfo( f, filled->colorTess(), filled->textureTess() ); vertex->v_[X] *= filled->vector_scale_; vertex->v_[Y] *= filled->vector_scale_; filled->vertices_.push_back( vertex ); gluTessVertex( filled->tess_obj_, vertex->v_, vertex ); df[X] += d2f[X]; df[Y] += d2f[Y]; } VertexInfo* vertex = new VertexInfo( to, filled->colorTess(), filled->textureTess() ); vertex->v_[X] *= filled->vector_scale_; vertex->v_[Y] *= filled->vector_scale_; filled->vertices_.push_back( vertex ); gluTessVertex( filled->tess_obj_, vertex->v_, vertex ); filled->last_vertex_ = to_vertex; return 0; } int Filled::cubicToCallback ( FT_Vector* control1, FT_Vector* control2, FT_Vector* to, Filled* filled ) { // This is crude: Step off cubics with a fixed number of increments VertexInfo to_vertex( to, filled->colorTess(), filled->textureTess() ); VertexInfo control1_vertex( control1, filled->colorTess(), filled->textureTess() ); VertexInfo control2_vertex( control2, filled->colorTess(), filled->textureTess() ); double a[2], b[2], c[2], d[2], f[2], df[2], d2f[2], d3f[2]; a[X] = -filled->last_vertex_.v_[X] + 3 * control1_vertex.v_[X] -3 * control2_vertex.v_[X] + to_vertex.v_[X]; a[Y] = -filled->last_vertex_.v_[Y] + 3 * control1_vertex.v_[Y] -3 * control2_vertex.v_[Y] + to_vertex.v_[Y]; b[X] = 3 * filled->last_vertex_.v_[X] - 6 * control1_vertex.v_[X] + 3 * control2_vertex.v_[X]; b[Y] = 3 * filled->last_vertex_.v_[Y] - 6 * control1_vertex.v_[Y] + 3 * control2_vertex.v_[Y]; c[X] = -3 * filled->last_vertex_.v_[X] + 3 * control1_vertex.v_[X]; c[Y] = -3 * filled->last_vertex_.v_[Y] + 3 * control1_vertex.v_[Y]; d[X] = filled->last_vertex_.v_[X]; d[Y] = filled->last_vertex_.v_[Y]; f[X] = d[X]; f[Y] = d[Y]; df[X] = c[X] * filled->delta_ + b[X] * filled->delta2_ + a[X] * filled->delta3_; df[Y] = c[Y] * filled->delta_ + b[Y] * filled->delta2_ + a[Y] * filled->delta3_; d2f[X] = 2 * b[X] * filled->delta2_ + 6 * a[X] * filled->delta3_; d2f[Y] = 2 * b[Y] * filled->delta2_ + 6 * a[Y] * filled->delta3_; d3f[X] = 6 * a[X] * filled->delta3_; d3f[Y] = 6 * a[Y] * filled->delta3_; for ( unsigned int i = 0; i < filled->tessellation_steps_-1; i++ ) { f[X] += df[X]; f[Y] += df[Y]; VertexInfo* vertex = new VertexInfo( f, filled->colorTess(), filled->textureTess() ); vertex->v_[X] *= filled->vector_scale_; vertex->v_[Y] *= filled->vector_scale_; filled->vertices_.push_back( vertex ); gluTessVertex( filled->tess_obj_, vertex->v_, vertex ); df[X] += d2f[X]; df[Y] += d2f[Y]; d2f[X] += d3f[X]; d2f[Y] += d3f[Y]; } VertexInfo* vertex = new VertexInfo( to, filled->colorTess(), filled->textureTess() ); vertex->v_[X] *= filled->vector_scale_; vertex->v_[Y] *= filled->vector_scale_; filled->vertices_.push_back( vertex ); gluTessVertex( filled->tess_obj_, vertex->v_, vertex ); filled->last_vertex_ = to_vertex; return 0; } void Filled::vertexCallback ( VertexInfo* vertex ) { if ( vertex->color_tess_ != 0 ) glColor4fv( vertex->color_tess_->color( vertex->v_ ) ); if ( vertex->texture_tess_ != 0 ) glTexCoord2fv( vertex->texture_tess_->texCoord( vertex->v_ ) ); glVertex3dv( vertex->v_ ); } void Filled::beginCallback ( GLenum which ) { glBegin( which ); } void Filled::endCallback ( void ) { glEnd(); } void Filled::combineCallback ( GLdouble coords[3], void* vertex_data[4], GLfloat weight[4], void** out_data, Filled* filled ) { (void)vertex_data; (void)weight; // std::cerr << "called combine" << std::endl; VertexInfo* vertex = new VertexInfo( coords ); *out_data = vertex; filled->extraVertices().push_back( vertex ); } void Filled::errorCallback ( GLenum error_code ) { std::cerr << "hmm. error during tessellation?:" << gluErrorString( error_code ) << std::endl; } #ifndef OGLFT_NO_SOLID Solid::Solid ( const char* filename, float point_size, FT_UInt resolution ) : Filled( filename, point_size, resolution ) { if ( !isValid() ) return; init(); } Solid::Solid ( FT_Face face, float point_size, FT_UInt resolution ) : Filled( face, point_size, resolution ) { init(); } void Solid::init ( void ) { interface_.move_to = (FT_Outline_MoveTo_Func)moveToCallback; interface_.line_to = (FT_Outline_LineTo_Func)lineToCallback; interface_.conic_to = (FT_Outline_ConicTo_Func)conicToCallback; interface_.cubic_to = (FT_Outline_CubicTo_Func)cubicToCallback; interface_.shift = 0; interface_.delta = 0; // Set up for extrusion. Default depth is 1 (units of what?) extrusion_.depth_ = 1.; extrusion_.up_[X] = 0.; extrusion_.up_[Y] = 1.; extrusion_.up_[Z] = 0.; extrusion_.n_polyline_pts_ = N_POLYLINE_PTS; assign( extrusion_.point_array_[0], 0., 0., extrusion_.depth_ + 1. ); assign( extrusion_.point_array_[1], 0., 0., extrusion_.depth_ ); assign( extrusion_.point_array_[2], 0., 0., 0. ); assign( extrusion_.point_array_[3], 0., 0., -1. ); // Turn on closed contours and smooth vertices; turn off end capping gleSetJoinStyle( TUBE_JN_RAW | TUBE_CONTOUR_CLOSED | TUBE_NORM_EDGE ); } Solid::~Solid ( void ) {} // Note: as usual, setting this clears the caches void Solid::setDepth ( double depth ) { if ( depth > 0. && depth != extrusion_.depth_ ) { extrusion_.depth_ = depth; assign( extrusion_.point_array_[0], 0., 0., extrusion_.depth_ + 1. ); assign( extrusion_.point_array_[1], 0., 0., extrusion_.depth_ ); clearCaches(); } } void Solid::renderGlyph ( FT_Face face, FT_UInt glyph_index ) { FT_Error error = FT_Load_Glyph( face, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return; FT_OutlineGlyph g; error = FT_Get_Glyph( face->glyph, (FT_Glyph*)&g ); if ( error != 0 ) return; vector_scale_ = ( point_size_ * resolution_ ) / ( 72. * face->units_per_EM ); if ( character_rotation_.active_ ) { glPushMatrix(); glTranslatef( ( face->glyph->metrics.width / 2. + face->glyph->metrics.horiBearingX ) / 64. * vector_scale_, rotation_offset_y_, 0. ); if ( character_rotation_.x_ != 0. ) glRotatef( character_rotation_.x_, 1., 0., 0. ); if ( character_rotation_.y_ != 0. ) glRotatef( character_rotation_.y_, 0., 1., 0. ); if ( character_rotation_.z_ != 0. ) glRotatef( character_rotation_.z_, 0., 0., 1. ); glTranslatef( -( face->glyph->metrics.width / 2. + face->glyph->metrics.horiBearingX ) / 64. * vector_scale_, -rotation_offset_y_, 0. ); } contour_open_ = false; // In theory, TrueType contours are defined clockwise and Type1 contours // are defined counter-clockwise. Trust the flag set by FreeType to // indicate this since it is critical to getting the orientation of the // surface normals correct. if ( g->outline.flags & FT_OUTLINE_REVERSE_FILL ) { extrusion_.normal_sign_.x_ = -1; extrusion_.normal_sign_.y_ = 1; } else { extrusion_.normal_sign_.x_ = 1; extrusion_.normal_sign_.y_ = -1; } // The Big Kahuna: the FreeType glyph decomposition routine traverses // the outlines of the font by calling the various routines stored in // extrude_interface_. These in turn call the gleExtrusion routine. error = FT_Outline_Decompose( &g->outline, &interface_, this ); FT_Done_Glyph( (FT_Glyph)g ); // Some glyphs may be empty (the 'blank' for instance!) if ( contour_open_ ) { extrusion_.contour_normals_.push_back( extrusion_.contour_normals_.front() ); gleExtrusion( extrusion_.contour_.size(), &extrusion_.contour_.begin()->p_, &extrusion_.contour_normals_[1].p_, extrusion_.up_, extrusion_.n_polyline_pts_, extrusion_.point_array_, 0 ); extrusion_.contour_.clear(); extrusion_.contour_normals_.clear(); } if ( character_rotation_.active_ ) { glPopMatrix(); } // Apply the front and back faces of the solid character (recall that // drawing a character advances the MODELVIEW, so defend against that // with the stack operations) glPushMatrix(); depth_offset_ = 0.; Filled::renderGlyph( face, glyph_index ); glPopMatrix(); glPushMatrix(); depth_offset_ = extrusion_.depth_; Filled::renderGlyph( face, glyph_index ); glPopMatrix(); // Drawing a character always advances the MODELVIEW. glTranslatef( face->glyph->advance.x / 64. * vector_scale_, face->glyph->advance.y / 64. * vector_scale_, 0. ); for ( VILI vili = vertices_.begin(); vili != vertices_.end(); vili++ ) delete *vili; vertices_.clear(); } int Solid::moveToCallback ( FT_Vector* to, Solid* solid ) { if ( solid->contour_open_ ) { // A word of explanation: since you can't predict when the // contour is going to end (its end is signaled by calling this // routine, i.e., the contour ends when another is started // abruptly), only the lineTo and arcTo functions generate contour // points. The upshot is that the normals, which are computed for the // current segment, are one behind the segment described in the // the contour array. To make things match up at the end, the first // normal is copied to the end of the normal array and the extrusion // routine is passed the list of normals starting at the second entry. solid->extrusion_.contour_normals_. push_back( solid->extrusion_.contour_normals_.front() ); #if 1 gleExtrusion( solid->extrusion_.contour_.size(), &solid->extrusion_.contour_.begin()->p_, &solid->extrusion_.contour_normals_[1].p_, solid->extrusion_.up_, solid->extrusion_.n_polyline_pts_, solid->extrusion_.point_array_, 0 ); #endif solid->extrusion_.contour_.clear(); solid->extrusion_.contour_normals_.clear(); } solid->last_vertex_ = VertexInfo( to, solid->colorTess(), solid->textureTess() ); solid->contour_open_ = true; return 0; } int Solid::lineToCallback ( FT_Vector* to, Solid* solid ) { VertexInfo vertex( to, solid->colorTess(), solid->textureTess() ); VertexInfo normal( solid->extrusion_.normal_sign_.y_ * ( vertex.v_[Y] - solid->last_vertex_.v_[Y] ), solid->extrusion_.normal_sign_.x_ * ( vertex.v_[X] - solid->last_vertex_.v_[X] ) ); solid->last_vertex_ = vertex; vertex.v_[X] *= solid->vector_scale_; vertex.v_[Y] *= solid->vector_scale_; normal.normalize(); solid->extrusion_.contour_.push_back( vertex ); solid->extrusion_.contour_normals_.push_back( normal ); return 0; } int Solid::conicToCallback ( FT_Vector* control, FT_Vector* to, Solid* solid ) { // This is crude: Step off conics with a fixed number of increments VertexInfo to_vertex( to, solid->colorTess(), solid->textureTess() ); VertexInfo control_vertex( control, solid->colorTess(), solid->textureTess() ); double b[2], c[2], d[2], f[2], df[2], d2f[2]; b[X] = solid->last_vertex_.v_[X] - 2 * control_vertex.v_[X] + to_vertex.v_[X]; b[Y] = solid->last_vertex_.v_[Y] - 2 * control_vertex.v_[Y] + to_vertex.v_[Y]; c[X] = -2 * solid->last_vertex_.v_[X] + 2 * control_vertex.v_[X]; c[Y] = -2 * solid->last_vertex_.v_[Y] + 2 * control_vertex.v_[Y]; d[X] = solid->last_vertex_.v_[X]; d[Y] = solid->last_vertex_.v_[Y]; f[X] = d[X]; f[Y] = d[Y]; df[X] = c[X] * solid->delta_ + b[X] * solid->delta2_; df[Y] = c[Y] * solid->delta_ + b[Y] * solid->delta2_; d2f[X] = 2 * b[X] * solid->delta2_; d2f[Y] = 2 * b[Y] * solid->delta2_; for ( unsigned int i = 0; i < solid->tessellation_steps_-1; i++ ) { f[X] += df[X]; f[Y] += df[Y]; VertexInfo vertex( f, solid->colorTess(), solid->textureTess() ); VertexInfo normal( solid->extrusion_.normal_sign_.y_ * df[Y], solid->extrusion_.normal_sign_.x_ * df[X] ); vertex.v_[X] *= solid->vector_scale_; vertex.v_[Y] *= solid->vector_scale_; normal.normalize(); solid->extrusion_.contour_.push_back( vertex ); solid->extrusion_.contour_normals_.push_back( normal ); df[X] += d2f[X]; df[Y] += d2f[Y]; } VertexInfo vertex( to, solid->colorTess(), solid->textureTess() ); VertexInfo normal( solid->extrusion_.normal_sign_.y_ * df[Y], solid->extrusion_.normal_sign_.x_ * df[X] ); vertex.v_[X] *= solid->vector_scale_; vertex.v_[Y] *= solid->vector_scale_; normal.normalize(); solid->extrusion_.contour_.push_back( vertex ); solid->extrusion_.contour_normals_.push_back( normal ); solid->last_vertex_ = to_vertex; return 0; } int Solid::cubicToCallback ( FT_Vector* control1, FT_Vector* control2, FT_Vector* to, Solid* solid ) { // This is crude: Step off cubics with a fixed number of increments VertexInfo to_vertex( to, solid->colorTess(), solid->textureTess() ); VertexInfo control1_vertex( control1, solid->colorTess(), solid->textureTess() ); VertexInfo control2_vertex( control2, solid->colorTess(), solid->textureTess() ); double a[2], b[2], c[2], d[2], f[2], df[2], d2f[2], d3f[2]; a[X] = -solid->last_vertex_.v_[X] + 3 * control1_vertex.v_[X] -3 * control2_vertex.v_[X] + to_vertex.v_[X]; a[Y] = -solid->last_vertex_.v_[Y] + 3 * control1_vertex.v_[Y] -3 * control2_vertex.v_[Y] + to_vertex.v_[Y]; b[X] = 3 * solid->last_vertex_.v_[X] - 6 * control1_vertex.v_[X] + 3 * control2_vertex.v_[X]; b[Y] = 3 * solid->last_vertex_.v_[Y] - 6 * control1_vertex.v_[Y] + 3 * control2_vertex.v_[Y]; c[X] = -3 * solid->last_vertex_.v_[X] + 3 * control1_vertex.v_[X]; c[Y] = -3 * solid->last_vertex_.v_[Y] + 3 * control1_vertex.v_[Y]; d[X] = solid->last_vertex_.v_[X]; d[Y] = solid->last_vertex_.v_[Y]; f[X] = d[X]; f[Y] = d[Y]; df[X] = c[X] * solid->delta_ + b[X] * solid->delta2_ + a[X] * solid->delta3_; df[Y] = c[Y] * solid->delta_ + b[Y] * solid->delta2_ + a[Y] * solid->delta3_; d2f[X] = 2 * b[X] * solid->delta2_ + 6 * a[X] * solid->delta3_; d2f[Y] = 2 * b[Y] * solid->delta2_ + 6 * a[Y] * solid->delta3_; d3f[X] = 6 * a[X] * solid->delta3_; d3f[Y] = 6 * a[Y] * solid->delta3_; for ( unsigned int i = 0; i < solid->tessellation_steps_-1; i++ ) { f[X] += df[X]; f[Y] += df[Y]; VertexInfo vertex( f, solid->colorTess(), solid->textureTess() ); VertexInfo normal( solid->extrusion_.normal_sign_.y_ * df[Y], solid->extrusion_.normal_sign_.x_ * df[X] ); vertex.v_[X] *= solid->vector_scale_; vertex.v_[Y] *= solid->vector_scale_; normal.normalize(); solid->extrusion_.contour_.push_back( vertex ); solid->extrusion_.contour_normals_.push_back( normal ); df[X] += d2f[X]; df[Y] += d2f[Y]; d2f[X] += d3f[X]; d2f[Y] += d3f[Y]; } VertexInfo vertex( to, solid->colorTess(), solid->textureTess() ); VertexInfo normal( solid->extrusion_.normal_sign_.y_ * df[Y], solid->extrusion_.normal_sign_.x_ * df[X] ); vertex.v_[X] *= solid->vector_scale_; vertex.v_[Y] *= solid->vector_scale_; normal.normalize(); solid->extrusion_.contour_.push_back( vertex ); solid->extrusion_.contour_normals_.push_back( normal ); solid->last_vertex_ = to_vertex; return 0; } #endif // OGLFT_NO_SOLID Texture::Texture ( const char* filename, float point_size, FT_UInt resolution ) : Face( filename, point_size, resolution ) { if ( !isValid() ) return; init(); } Texture::Texture ( FT_Face face, float point_size, FT_UInt resolution ) : Face( face, point_size, resolution ) { init(); } void Texture::init ( void ) { character_rotation_.active_ = false; character_rotation_.x_ = 0; character_rotation_.y_ = 0; character_rotation_.z_ = 0; setCharSize(); setCharacterRotationReference( 'o' ); } Texture::~Texture ( void ) { clearCaches(); } // Note: Changing the character rotation also clears the display list cache. void Texture::setCharacterRotationX ( GLfloat character_rotation_x ) { if ( character_rotation_x != character_rotation_.x_ ) { character_rotation_.x_ = character_rotation_x; if ( character_rotation_.x_ != 0. || character_rotation_.y_ != 0. || character_rotation_.z_ != 0. ) character_rotation_.active_ = true; else character_rotation_.active_ = false; clearCaches(); } } void Texture::setCharacterRotationY ( GLfloat character_rotation_y ) { if ( character_rotation_y != character_rotation_.y_ ) { character_rotation_.y_ = character_rotation_y; if ( character_rotation_.x_ != 0. || character_rotation_.y_ != 0. || character_rotation_.z_ != 0. ) character_rotation_.active_ = true; else character_rotation_.active_ = false; clearCaches(); } } void Texture::setCharacterRotationZ ( GLfloat character_rotation_z ) { if ( character_rotation_z != character_rotation_.z_ ) { character_rotation_.z_ = character_rotation_z; if ( character_rotation_.x_ != 0. || character_rotation_.y_ != 0. || character_rotation_.z_ != 0. ) character_rotation_.active_ = true; else character_rotation_.active_ = false; clearCaches(); } } void Texture::setCharSize ( void ) { for ( unsigned int f = 0; f < faces_.size(); f++ ) { FT_Error error = FT_Set_Char_Size( faces_[f].face_, (FT_F26Dot6)( point_size_ * 64 ), (FT_F26Dot6)( point_size_ * 64 ), resolution_, resolution_ ); if ( error != 0 ) return; } if ( rotation_reference_glyph_ != 0 ) setRotationOffset(); } void Texture::setRotationOffset ( void ) { FT_Error error = FT_Load_Glyph( rotation_reference_face_, rotation_reference_glyph_, FT_LOAD_RENDER ); if ( error != 0 ) return; rotation_offset_y_ = rotation_reference_face_->glyph->bitmap.rows / 2.; } BBox Texture::measure ( unsigned char c ) { BBox bbox; // For starters, just get the unscaled glyph bounding box unsigned int f; FT_UInt glyph_index = 0; for ( f = 0; f < faces_.size(); f++ ) { glyph_index = FT_Get_Char_Index( faces_[f].face_, c ); if ( glyph_index != 0 ) break; } if ( glyph_index == 0 ) return bbox; FT_Error error = FT_Load_Glyph( faces_[f].face_, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return bbox; FT_Glyph glyph; error = FT_Get_Glyph( faces_[f].face_->glyph, &glyph ); if ( error != 0 ) return bbox; FT_BBox ft_bbox; FT_Glyph_Get_CBox( glyph, ft_glyph_bbox_unscaled, &ft_bbox ); FT_Done_Glyph( glyph ); bbox = ft_bbox; bbox.advance_ = faces_[f].face_->glyph->advance; return bbox; } double Texture::height ( void ) const { if ( faces_[0].face_->height > 0 ) return faces_[0].face_->height / 64.; else return faces_[0].face_->size->metrics.y_ppem; } #ifdef _UNICODE #ifndef OGLFT_NO_WX BBox Texture::measure ( const wxChar c ) { BBox bbox; // For starters, just get the unscaled glyph bounding box unsigned int f; FT_UInt glyph_index = 0; for ( f = 0; f < faces_.size(); f++ ) { glyph_index = FT_Get_Char_Index( faces_[f].face_, c ); if ( glyph_index != 0 ) break; } if ( glyph_index == 0 ) return bbox; FT_Error error = FT_Load_Glyph( faces_[f].face_, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return bbox; FT_Glyph glyph; error = FT_Get_Glyph( faces_[f].face_->glyph, &glyph ); if ( error != 0 ) return bbox; FT_BBox ft_bbox; FT_Glyph_Get_CBox( glyph, ft_glyph_bbox_unscaled, &ft_bbox ); FT_Done_Glyph( glyph ); bbox = ft_bbox; bbox.advance_ = faces_[f].face_->glyph->advance; return bbox; } #endif /* OGLFT_NO_WX */ #endif /* _UNICODE */ GLuint Texture::compileGlyph ( FT_Face face, FT_UInt glyph_index ) { bindTexture( face, glyph_index ); GLuint dlist = glGenLists( 1 ); glNewList( dlist, GL_COMPILE ); renderGlyph( face, glyph_index ); glEndList( ); return dlist; } void Texture::renderGlyph ( FT_Face face, FT_UInt glyph_index ) { FT_Error error = FT_Load_Glyph( face, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return; TextureInfo texture_info; GTOCI texture_object = glyph_texobjs_.find( glyph_index ); if ( texture_object == glyph_texobjs_.end() ) { bindTexture( face, glyph_index ); texture_object = glyph_texobjs_.find( glyph_index ); if ( texture_object == glyph_texobjs_.end() ) return; } texture_info = texture_object->second; glBindTexture( GL_TEXTURE_2D, texture_info.texture_name_ ); if ( character_rotation_.active_ ) { glPushMatrix(); glTranslatef( ( texture_info.width_ / 2. + texture_info.left_bearing_ ), rotation_offset_y_, 0. ); if ( character_rotation_.x_ != 0. ) glRotatef( character_rotation_.x_, 1., 0., 0. ); if ( character_rotation_.y_ != 0. ) glRotatef( character_rotation_.y_, 0., 1., 0. ); if ( character_rotation_.z_ != 0. ) glRotatef( character_rotation_.z_, 0., 0., 1. ); glTranslatef( -( texture_info.width_ / 2. + texture_info.left_bearing_ ), -rotation_offset_y_, 0. ); } glBegin( GL_QUADS ); glTexCoord2i( 0, 0 ); glVertex2f( texture_info.left_bearing_, texture_info.bottom_bearing_ ); glTexCoord2f( texture_info.texture_s_, 0. ); glVertex2f( texture_info.left_bearing_ + texture_info.width_, texture_info.bottom_bearing_ ); glTexCoord2f( texture_info.texture_s_, texture_info.texture_t_ ); glVertex2f( texture_info.left_bearing_ + texture_info.width_, texture_info.bottom_bearing_ + texture_info.height_ ); glTexCoord2f( 0., texture_info.texture_t_ ); glVertex2f( texture_info.left_bearing_, texture_info.bottom_bearing_ + texture_info.height_ ); glEnd(); if ( character_rotation_.active_ ) { glPopMatrix(); } // Drawing a character always advances the MODELVIEW. glTranslatef( texture_info.advance_.x / 64., texture_info.advance_.y / 64., 0. ); } void Texture::clearCaches ( void ) { GDLI fgi = glyph_dlists_.begin(); for ( ; fgi != glyph_dlists_.end(); ++fgi ) { glDeleteLists( fgi->second, 1 ); } glyph_dlists_.clear(); GTOI fti = glyph_texobjs_.begin(); for ( ; fti != glyph_texobjs_.end(); ++fti ) { glDeleteTextures( 1, &fti->second.texture_name_ ); } glyph_texobjs_.clear(); } unsigned int Texture::nearestPowerCeil ( unsigned int a ) { unsigned int b = a; unsigned int c = 1; if ( a == 0 ) return 1; // Take the log-2 of a for ( ; ; ) { if ( b == 1 ) break; else if ( b == 3 ) { c *= 4; break; } b >>= 1; c *= 2; } // If it's too small, raise it another power if ( c < a ) c *= 2; return c; } MonochromeTexture::MonochromeTexture ( const char* filename, float point_size, FT_UInt resolution ) : Texture( filename, point_size, resolution ) {} MonochromeTexture::MonochromeTexture ( FT_Face face, float point_size, FT_UInt resolution ) : Texture( face, point_size, resolution ) {} MonochromeTexture::~MonochromeTexture ( void ) {} // Round up the size of the image to a power of two, but otherwise // use the bitmap as is (i.e., don't expand it into separate // luminance and alpha components) GLubyte* MonochromeTexture::invertBitmap ( const FT_Bitmap& bitmap, int* width, int* height ) { *width = nearestPowerCeil( bitmap.width ); *height = nearestPowerCeil( bitmap.rows ); GLubyte* inverse = new GLubyte[ ( *width + 7) / 8 * *height ]; GLubyte* inverse_ptr = inverse; memset( inverse, 0, sizeof( GLubyte )*( *width + 7 ) / 8 * *height ); for ( int r = 0; r < bitmap.rows; r++ ) { GLubyte* bitmap_ptr = &bitmap.buffer[bitmap.pitch * ( bitmap.rows - r - 1 )]; for ( int p = 0; p < bitmap.pitch; p++ ) { *inverse_ptr++ = *bitmap_ptr++; } inverse_ptr += ( ( *width + 7 ) / 8 - bitmap.pitch ); } return inverse; } // Hmm. This is the only routine which is different between the different // styles. void MonochromeTexture::bindTexture ( FT_Face face, FT_UInt glyph_index ) { GTOCI texobj = glyph_texobjs_.find( glyph_index ); if ( texobj != glyph_texobjs_.end() ) return; // Retrieve the glyph's data. FT_Error error = FT_Load_Glyph( face, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return; error = FT_Render_Glyph( face->glyph, FT_RENDER_MODE_MONO ); if ( error != 0 ) return; TextureInfo texture_info; glGenTextures( 1, &texture_info.texture_name_ ); glBindTexture( GL_TEXTURE_2D, texture_info.texture_name_ ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST ); // Texture maps have be a power of 2 in size (is 1 a power of 2?), so // pad it out while flipping it over int width, height; GLubyte* inverted_pixmap = invertBitmap( face->glyph->bitmap, &width, &height ); GLfloat red_map[2] = { background_color_[R], foreground_color_[R] }; GLfloat green_map[2] = { background_color_[G], foreground_color_[G] }; GLfloat blue_map[2] = { background_color_[B], foreground_color_[B] }; GLfloat alpha_map[2] = { background_color_[A], foreground_color_[A] }; glPixelMapfv( GL_PIXEL_MAP_I_TO_R, 2, red_map ); glPixelMapfv( GL_PIXEL_MAP_I_TO_G, 2, green_map ); glPixelMapfv( GL_PIXEL_MAP_I_TO_B, 2, blue_map ); glPixelMapfv( GL_PIXEL_MAP_I_TO_A, 2, alpha_map ); glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_COLOR_INDEX, GL_BITMAP, inverted_pixmap ); // Save a good bit of the data about this glyph texture_info.left_bearing_ = face->glyph->bitmap_left; texture_info.bottom_bearing_ = -( face->glyph->bitmap.rows - face->glyph->bitmap_top ); texture_info.width_ = face->glyph->bitmap.width; texture_info.height_ = face->glyph->bitmap.rows; texture_info.texture_s_ = (GLfloat)texture_info.width_ / width; texture_info.texture_t_ = (GLfloat)texture_info.height_ / height; texture_info.advance_ = face->glyph->advance; glyph_texobjs_[ glyph_index ] = texture_info; delete[] inverted_pixmap; } GrayscaleTexture::GrayscaleTexture ( const char* filename, float point_size, FT_UInt resolution ) : Texture( filename, point_size, resolution ) {} GrayscaleTexture::GrayscaleTexture ( FT_Face face, float point_size, FT_UInt resolution ) : Texture( face, point_size, resolution ) {} GrayscaleTexture::~GrayscaleTexture ( void ) {} // For the grayscale style, the luminance is the grayscale FreeType value, // so this just rounds up to a power of two and inverts the pixmap GLubyte* GrayscaleTexture::invertPixmap ( const FT_Bitmap& bitmap, int* width, int* height ) { *width = nearestPowerCeil( bitmap.width ); *height = nearestPowerCeil( bitmap.rows ); GLubyte* inverse = new GLubyte[ *width * *height ]; GLubyte* inverse_ptr = inverse; for ( int r = 0; r < bitmap.rows; r++ ) { GLubyte* bitmap_ptr = &bitmap.buffer[bitmap.pitch * ( bitmap.rows - r - 1 )]; for ( int p = 0; p < bitmap.width; p++ ) { *inverse_ptr++ = *bitmap_ptr++; } inverse_ptr += ( *width - bitmap.pitch ); } return inverse; } // Hmm. This is the only routine which is different between the different // styles. void GrayscaleTexture::bindTexture ( FT_Face face, FT_UInt glyph_index ) { GTOCI texobj = glyph_texobjs_.find( glyph_index ); if ( texobj != glyph_texobjs_.end() ) return; // Retrieve the glyph's data. FT_Error error = FT_Load_Glyph( face, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return; error = FT_Render_Glyph( face->glyph, FT_RENDER_MODE_NORMAL ); if ( error != 0 ) return; TextureInfo texture_info; glGenTextures( 1, &texture_info.texture_name_ ); glBindTexture( GL_TEXTURE_2D, texture_info.texture_name_ ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST ); // Texture maps have be a power of 2 in size (is 1 a power of 2?), so // pad it out while flipping it over int width, height; GLubyte* inverted_pixmap = invertPixmap( face->glyph->bitmap, &width, &height ); glPushAttrib( GL_PIXEL_MODE_BIT ); glPixelTransferf( GL_RED_SCALE, foreground_color_[R] - background_color_[R] ); glPixelTransferf( GL_GREEN_SCALE, foreground_color_[G]-background_color_[G] ); glPixelTransferf( GL_BLUE_SCALE, foreground_color_[B]-background_color_[B] ); glPixelTransferf( GL_ALPHA_SCALE, foreground_color_[A]-background_color_[A] ); glPixelTransferf( GL_RED_BIAS, background_color_[R] ); glPixelTransferf( GL_GREEN_BIAS, background_color_[G] ); glPixelTransferf( GL_BLUE_BIAS, background_color_[B] ); glPixelTransferf( GL_ALPHA_BIAS, background_color_[A] ); glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, inverted_pixmap ); glPopAttrib(); // Save a good bit of the data about this glyph texture_info.left_bearing_ = face->glyph->bitmap_left; texture_info.bottom_bearing_ = -( face->glyph->bitmap.rows - face->glyph->bitmap_top ); texture_info.width_ = face->glyph->bitmap.width; texture_info.height_ = face->glyph->bitmap.rows; texture_info.texture_s_ = (GLfloat)texture_info.width_ / width; texture_info.texture_t_ = (GLfloat)texture_info.height_ / height; texture_info.advance_ = face->glyph->advance; glyph_texobjs_[ glyph_index ] = texture_info; delete[] inverted_pixmap; } TranslucentTexture::TranslucentTexture ( const char* filename, float point_size, FT_UInt resolution ) : Texture( filename, point_size, resolution ) {} TranslucentTexture::TranslucentTexture ( FT_Face face, float point_size, FT_UInt resolution ) : Texture( face, point_size, resolution ) {} TranslucentTexture::~TranslucentTexture ( void ) {} // For the translucent style, the luminance is saturated and alpha value // is the translucent FreeType value GLubyte* TranslucentTexture::invertPixmap ( const FT_Bitmap& bitmap, int* width, int* height ) { *width = nearestPowerCeil( bitmap.width ); *height = nearestPowerCeil( bitmap.rows ); GLubyte* inverse = new GLubyte[ 2 * *width * *height ]; GLubyte* inverse_ptr = inverse; for ( int r = 0; r < bitmap.rows; r++ ) { GLubyte* bitmap_ptr = &bitmap.buffer[bitmap.pitch * ( bitmap.rows - r - 1 )]; for ( int p = 0; p < bitmap.width; p++ ) { *inverse_ptr++ = 0xff; *inverse_ptr++ = *bitmap_ptr++; } inverse_ptr += 2 * ( *width - bitmap.pitch ); } return inverse; } // Hmm. This is the only routine which is different between the different // styles. void TranslucentTexture::bindTexture ( FT_Face face, FT_UInt glyph_index ) { GTOCI texobj = glyph_texobjs_.find( glyph_index ); if ( texobj != glyph_texobjs_.end() ) return; // Retrieve the glyph's data. FT_Error error = FT_Load_Glyph( face, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return; error = FT_Render_Glyph( face->glyph, FT_RENDER_MODE_NORMAL ); if ( error != 0 ) return; TextureInfo texture_info; glGenTextures( 1, &texture_info.texture_name_ ); glBindTexture( GL_TEXTURE_2D, texture_info.texture_name_ ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST ); // Texture maps have be a power of 2 in size (is 1 a power of 2?), so // pad it out while flipping it over int width, height; GLubyte* inverted_pixmap = invertPixmap( face->glyph->bitmap, &width, &height ); glPushAttrib( GL_PIXEL_MODE_BIT ); glPixelTransferf( GL_RED_SCALE, foreground_color_[R] - background_color_[R] ); glPixelTransferf( GL_GREEN_SCALE, foreground_color_[G]-background_color_[G] ); glPixelTransferf( GL_BLUE_SCALE, foreground_color_[B]-background_color_[B] ); glPixelTransferf( GL_ALPHA_SCALE, foreground_color_[A]-background_color_[A] ); glPixelTransferf( GL_RED_BIAS, background_color_[R] ); glPixelTransferf( GL_GREEN_BIAS, background_color_[G] ); glPixelTransferf( GL_BLUE_BIAS, background_color_[B] ); glPixelTransferf( GL_ALPHA_BIAS, background_color_[A] ); glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, inverted_pixmap ); glPopAttrib(); // Save a good bit of the data about this glyph texture_info.left_bearing_ = face->glyph->bitmap_left; texture_info.bottom_bearing_ = -( face->glyph->bitmap.rows - face->glyph->bitmap_top ); texture_info.width_ = face->glyph->bitmap.width; texture_info.height_ = face->glyph->bitmap.rows; texture_info.texture_s_ = (GLfloat)texture_info.width_ / width; texture_info.texture_t_ = (GLfloat)texture_info.height_ / height; texture_info.advance_ = face->glyph->advance; glyph_texobjs_[ glyph_index ] = texture_info; delete[] inverted_pixmap; } } // close OGLFT namespace therion/loch/lxOGLFT.h0000644000076400010400000024033112047414660015611 0ustar userAdministrators// -*- c++ -*- /* * OGLFT: A library for drawing text with OpenGL using the FreeType library * Copyright (C) 2002 lignum Computing, Inc. * $Id: OGLFT.h,v 1.15 2003/10/01 14:41:09 allen Exp $ * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef OGLFT_H #define OGLFT_H #ifndef LXDEPCHECK #ifndef OGLFT_NO_WX #include #include #else #include #endif #include #include #include #include #ifdef HAVE_MPATROL #include #endif #ifdef LXMACOSX #include #include #else #include #include #endif #ifndef OGLFT_NO_SOLID #define OGLFT_NO_SOLID #endif #ifndef OGLFT_NO_SOLID #include #endif #include #include FT_FREETYPE_H #include FT_GLYPH_H #include FT_OUTLINE_H #include FT_TRIGONOMETRY_H #endif //! All of OGLFT C++ objects are in this namespace. namespace OGLFT { //! Thanks to DesCartes, I'd consider these manifest constants. enum Coordinates { X, //!< The X component of space Y, //!< The Y component of space Z, //!< The Z component of space W //!< The projection component of space }; //! Who to credit? Newton? I'd consider these manifest constants. enum ColorSpace { R, //!< The Red component of a color G, //!< The Green component of a color B, //!< The Blue component of a color A, //!< The Alpha (or transparency) of a color }; //! Callback from GLU tessellation routines. typedef void (*GLUTessCallback)(); //! The FreeType library instance. /*! * The FreeType library has a single, global instance of a library * handle. This reference is used to load font faces. This detail * is generally hidden from the user of OGLFT, however, it * can be useful to get the FT_Library instance if you want to open * a font file yourself, either from disk or embedded in the program. */ class Library { public: /*! * The FreeType library's library handle is only available through this * accessor method. * \return the global OGLFT FreeType library handle. */ static FT_Library& instance ( void ); protected: /*! * The constructor for this class is automatically called when * this library is loaded. Access the instance through the instance() * method. */ Library ( void ); /*! * This destructor is automatically called when the program exits. */ ~Library( void ); private: static Library library; static FT_Library library_; }; //! Advance describes the "advance" of a glyph, namely the distance in //! model space at which the NEXT glyph should be drawn. This class exists //! to assist the computation of string metrics. struct Advance { float dx_; //!< Advance increment in the X direction. float dy_; //!< Advance increment in the Y direction. //! Default constructor. An otherwise uninitialized Advance contains zeros. Advance ( float dx = 0, float dy = 0 ) : dx_( dx ), dy_( dy ) {} //! Initialize an advance from a FreeType advance member. Advance ( FT_Vector v ) { dx_ = v.x / 64.; dy_ = v.y / 64.; } //! Increment Advance with a FreeType advance member. //! \return a reference to oneself. Advance& operator+= ( const FT_Vector v ) { dx_ += v.x / 64.; dy_ += v.y / 64.; return *this; } }; //! Describe the metrics of a glyph or string relative to the origin //! of the first character struct BBox { float x_min_; //!< The left-most position at which "ink" appears. float y_min_; //!< the bottom-most position at which "ink" appears. float x_max_; //!< The right-most position at which "ink" appears. float y_max_; //!< The top-most position at which "ink" appears. Advance advance_; //!< The (total) advancement //! Default constructor is all zeros. BBox () : x_min_( 0 ), y_min_( 0 ), x_max_( 0 ), y_max_( 0 ) {} /*! *(Partially) initialize a BBox from a FreeType bounding box member. *(The advancement is initialized to zero by its default constructor). * \param ft_bbox a FreeType bounding box as retrieved from * \c FT_Glyph_Get_CBox. */ BBox ( FT_BBox ft_bbox ) { x_min_ = ft_bbox.xMin / 64.; y_min_ = ft_bbox.yMin / 64.; x_max_ = ft_bbox.xMax / 64.; y_max_ = ft_bbox.yMax / 64.; } //! Scale the bounding box by a constant. //! \param k a constant to scale the bounding box by. //! \return a reference to oneself. BBox& operator*= ( double k ) { x_min_ *= k; y_min_ *= k; x_max_ *= k; y_max_ *= k; advance_.dx_ *= k; advance_.dy_ *= k; return *this; } /*! * Merge a bounding box into the current one (not really addition). * Each time a BBox is "added", the current BBox is expanded to include * the metrics of the new BBox. May only work for horizontal fonts, though. * \param b the bounding box to merge. * \return a reference to oneself. */ BBox& operator+= ( const BBox& b ) { float new_value; new_value = b.x_min_ + advance_.dx_; if ( new_value < x_min_ ) x_min_ = new_value; new_value = b.y_min_ + advance_.dy_; if ( new_value < y_min_ ) y_min_ = new_value; new_value = b.x_max_ + advance_.dx_; if ( new_value > x_max_ ) x_max_ = new_value; new_value = b.y_max_ + advance_.dy_; if ( new_value > y_max_ ) y_max_ = new_value; advance_.dx_ += b.advance_.dx_; advance_.dy_ += b.advance_.dy_; return *this; } }; //! During tesselation of a polygonal Face (outline, filled or solid), //! an object which implements this interface can be used to compute a //! different color for each vertex. class ColorTess { public: //! Compute a color for this position. Note that the position is //! in the glyph's local coordinate system. //! \param p vertex position in glyph's local coordinate system. Argument is //! a GLdouble[3]. //! \return GLfloat[4] (RGBA) color specification. virtual GLfloat* color ( GLdouble* p ) = 0; virtual ~ColorTess(); }; //! During tesselation of a polygonal Face (outline, filled or solid), //! an object which implements this interface can be used to compute a //! different texture coordinate for each vertex. class TextureTess { public: //! Compute a texture coordinate for this position. Note that the //! position is in the glyph's local coordinate system. //! \param p vertex position in glyph's local coordinate system. Argument is //! a GLdouble[3]. //! \return GLfloat[2] (s,t) texture coordinates. virtual GLfloat* texCoord ( GLdouble* p ) = 0; virtual ~TextureTess(); }; //! The argument to setCharacterDisplayLists is an STL vector of //! OpenGL display list names (GLuints). typedef std::vector DisplayLists; //! A convenience definition of an iterator for display list vectors. typedef DisplayLists::const_iterator DLCI; //! A convenience definition of an iterator for display list vectors. typedef DisplayLists::iterator DLI; //! A face (aka font) used to render text with OpenGL. /*! * This is an abstract class, but it does define most the functions that * you are likely to call to manipulate the rendering of the text. */ class Face { public: //! Thanks to the standard formerly known as PHIGS. Horizontal text //! justification constants. enum HorizontalJustification { LEFT, //!< Left justified justification of text ORIGIN, //!< Natural origin alignment of text (default) CENTER, //!< Center justified alignment of text RIGHT //!< Right justified alignment of text }; //! Thanks to the standard formerly known as PHIGS. Vertical text //! justification constants. enum VerticalJustification { BOTTOM, //!< Descender alignment of text BASELINE, //!< Baseline alignment of text (default) MIDDLE, //!< Centered alignment of text TOP //!< Ascender justification of text }; //! Control how OpenGL display lists are created for individual glyphs. //! The default mode is to create display lists for each glyph as it //! is requested. Therefore, the Face drawing routines cannot themselves //! be called from within an open display list. In IMMEDIATE mode, //! cached glyphs will be drawn if available, otherwise the FreeType //! data for a glyph is re-rendered each time. enum GlyphCompileMode { COMPILE, //!< Compile new glyphs when seen for the first time. IMMEDIATE //!< Do not \em create display lists for glyphs. }; private: //! We allow a Face to be constructed either from a file name //! or passed in as an already opened FreeType FT_Face. In the case //! of the later (already opened), we don't close the FT_Face on //! destruction. This way you can share FT_Faces between related //! OGLFT faces. Also, we're experimenting with being able to use //! multiple FT_Faces in a single OGLFT Face, so this is represented //! as a data structure. struct FaceData { FT_Face face_; bool free_on_exit_; FaceData ( FT_Face face, bool free_on_exit = true ) : face_( face ), free_on_exit_( free_on_exit ) {} }; protected: //! The FreeType face - experimentally, this is now an array of //! faces so that we can handle a wider range of UNICODE points //! in case a face doesn't cover the points of interest. std::vector< FaceData > faces_; //! Did a font load OK? bool valid_; //! Glyph display list creation mode. enum GlyphCompileMode compile_mode_; //! Nominal point size. float point_size_; //! Display resolution in pixels per inch. FT_UInt resolution_; //! Does rendering text affect the MODELVIEW matrix? bool advance_; //! Foreground color (I really wanted to avoid this, but not really //! possible without state queries, which you can't put into //! display lists. Anyway, you'll be able to get even more fancy //! by passing in a function to map the color with, so why balk at //! this?) GLfloat foreground_color_[4]; //! Background color (what modes would use this?) GLfloat background_color_[4]; //! PHIGS-like horizontal positioning of text. enum HorizontalJustification horizontal_justification_; //! PHIGS-like vertical positioning of text. enum VerticalJustification vertical_justification_; //! Rotate an entire string in the Z plane GLfloat string_rotation_; //! Let the user decide which character to use as the rotation reference. //! Use "o" by default, I suppose. FT_UInt rotation_reference_glyph_; //! The rotation reference character could be in any face. FT_Face rotation_reference_face_; //! These are the translation offsets provided by the rotation reference //! character; for whom, we've discovered, only the Y position is relevant. GLfloat rotation_offset_y_; //! Type of the cache of defined glyph to display list mapping. typedef std::map< FT_UInt, GLuint > GlyphDLists; //! A convenience definition of the iterator over the glyph to display //! list map. typedef GlyphDLists::const_iterator GDLCI; //! A convenience definition of the iterator over the glyph to display //! list map. typedef GlyphDLists::iterator GDLI; //! Cache of defined glyph display lists GlyphDLists glyph_dlists_; //! The user can supply an array of display list which are invoked //! before each glyph is rendered. DisplayLists character_display_lists_; public: /*! * Construct a Face by loading a font from the given file. * \param filename the filename which contains the font face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Face ( const char* filename, float point_size = 12, FT_UInt resolution = 100 ); /*! * Alternatively, the user may have already opened a face and just * wants to draw with it. This is useful for Multiple Master fonts or * combining multiple files to increase UNICODE point coverage. * \param face open Freetype FT_Face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Face ( FT_Face face, float point_size = 12, FT_UInt resolution = 100 ); /*! * Deleting a Face frees its FreeType face (and anything else it's * styles have allocated). */ virtual ~Face ( void ); /*! * Let the user test to see if the font was loaded OK. * \return true if the FT_Face was successfully created. */ bool isValid ( void ) const { return valid_; } /*! * Add another FT_Face to the OGLFT Face. Generally used to add more * coverage of UNICODE points (at least that's the plan). This * routine takes a filename and takes ownership of the FT_Face. * \param filename name of file containing font face data. * \return true if face was successfully added. */ bool addAuxiliaryFace ( const char* filename ); /*! * Add another FT_Face to the OGLFT Face. Generally used to add more * coverage of UNICODE points (at least that's the plan). This * routine takes an already open FT_Face. The user is responsible * for clean up. * \param face open FreeType FT_Face * \return true if face was successfully added. */ bool addAuxiliaryFace ( FT_Face face ); /*! * By default, each time a new character is seen, its glyph is rendered * into a display list. This means that a display list cannot already * be open (since OpenGL doesn't allow nested display list creation). * Rendering can be set into immediate mode in which case glyphs are * rendered from display lists if available, but are otherwise generated * anew each time. * \param compile_mode the new compile mode. */ void setCompileMode ( enum GlyphCompileMode compile_mode ) { compile_mode_ = compile_mode; } /*! * \return the current glyph compile mode. */ enum GlyphCompileMode compileMode ( void ) const { return compile_mode_; } /*! * For the rasterized styles (Monochrome, Grayscale, Translucent, Texture), * glyphs are rendered at the pixel size given by: * * point_size [pts] * / 72 [pts/in] * resolution [dots/in] = [dots]. * * For the polygon styles (Outline, Filled, Solid), the "nominal" size of * the glyphs is: * * point_size[pts] / 72 [pts/in] * resolution [dots/in] * / units_per_EM [font unit/EM] = [dots * EM]. * * If the MODELVIEW and PROJECTION matrices are such that one screen pixel * corresponds to one modeling unit, then polygonal Faces will * be the same size as raster Faces. * * Note that changing the point size after Face creation will invalidate * the cache of OpenGL display lists and any other information which * the individual styles have cached. * \param point_size the new point size in points (1/72-th inch). */ void setPointSize ( float point_size ); /*! * \return the current point size. */ float pointSize ( void ) { return point_size_; } /*! * For the rasterized styles (Monochrome, Grayscale, * Translucent, Texture), the exact rendered size of the glyphs depends on * the resolution of the display (as opposed to the polygon styles * whose size is controlled by the viewing matrices). The Texture * style is slightly different because the glyphs are texture-mapped * onto an arbitrary rectangle; here, the resolution only controls * how accurately the glyph is rendered. * \param resolution the resolution in DPI (dots per inch). */ void setResolution ( FT_UInt resolution ); /*! * \return the current raster resolution. */ FT_UInt resolution ( void ) { return resolution_; } /*! * If advance is true, then the changes made to the MODELVIEW matrix * to render a string are allowed to remain. Otherwise, the library * pushes the current MODELVIEW matrix onto the matrix stack, renders * the string and then pops it off again. Rendering a character always * modifies the MODELVIEW matrix. * \param advance whether or not the MODELVIEW matrix should be left * translated by the advancement of a rendered string. */ void setAdvance ( bool advance ) { advance_ = advance; } /*! * \return the advance value. */ bool advance ( void ) const { return advance_; } /*! * This is the nominal color of the glyphs. A lot of other things * can alter what you actually see! Note that changing the foreground * color invalidates the glyph cache. * \param red the red component of the foreground color. * \param green the green component of the foreground color. * \param blue the blue component of the foreground color. * \param alpha the alpha component of the foreground color. */ void setForegroundColor ( GLfloat red = 0.0, GLfloat green = 0.0, GLfloat blue = 0.0, GLfloat alpha = 1.0 ); /*! * This is the nominal color of the glyphs. A lot of other things * can alter what you actually see! Note that changing the foreground * color invalidates the glyph cache. * \param foreground_color an array of 4 values corresponding to the * red, green, blue and alpha components of the foreground color. */ void setForegroundColor ( const GLfloat foreground_color[4] ); #ifndef OGLFT_NO_WX /*! * This is the nominal color of the glyphs. A lot of other things * can alter what you actually see! Note that changing the foreground * color invalidates the glyph cache. * \param foreground_color the foreground color as an unsigned int. */ void setForegroundColor ( const wxColour foreground_color ); #endif /* OGLFT_NO_WX */ /*! * \return the red component of the foreground color */ GLfloat foregroundRed ( void ) const { return foreground_color_[R]; } /*! * \return the green component of the foreground color */ GLfloat foregroundGreen ( void ) const { return foreground_color_[G]; } /*! * \return the blue component of the foreground color */ GLfloat foregroundBlue ( void ) const { return foreground_color_[B]; } /*! * \return the alpha component of the foreground color */ GLfloat foregroundAlpha ( void ) const { return foreground_color_[A]; } /*! * This is the nominal background color of the glyphs. A lot of other things * can alter what you actually see! Note that changing the background * color invalidates the glyph cache. * \param red the red component of the background color. * \param green the green component of the background color. * \param blue the blue component of the background color. * \param alpha the alpha component of the background color. */ void setBackgroundColor ( GLfloat red = 1.0, GLfloat green = 1.0, GLfloat blue = 1.0, GLfloat alpha = 0.0 ); /*! * This is the nominal background color of the glyphs. A lot of other things * can alter what you actually see! Note that changing the background * color invalidates the glyph cache. * \param background_color an array of 4 values corresponding to the * red, green, blue and alpha components of the background color. */ void setBackgroundColor ( const GLfloat background_color[4] ); #ifndef OGLFT_NO_WX /*! * This is the nominal background color of the glyphs. A lot of other things * can alter what you actually see! Note that changing the background * color invalidates the glyph cache. * \param background_color the background color as an unsigned int. */ void setBackgroundColor ( const wxColour background_color ); #endif /* OGLFT_NO_WX */ /*! * \return the red component of the background color */ GLfloat backgroundRed ( void ) const { return background_color_[R]; } /*! * \return the green component of the background color */ GLfloat backgroundGreen ( void ) const { return background_color_[G]; } /*! * \return the blue component of the background color */ GLfloat backgroundBlue ( void ) const { return background_color_[B]; } /*! * \return the alpha component of the background color */ GLfloat backgroundAlpha ( void ) const { return background_color_[A]; } /*! * Set the individual character rotation in the Z direction. * \param character_rotation_z angle in degrees of z rotation. */ virtual void setCharacterRotationZ ( GLfloat character_rotation_z ) = 0; /*! * \return the character rotation in the Z direction. */ virtual GLfloat characterRotationZ ( void ) const = 0; /*! * The z rotation angle needs a center. Nominate a character whose * center is to be the center of rotation. By default, use "o". * \param c rotation reference character. */ void setCharacterRotationReference ( unsigned char c ); /*! * Rotate an entire string through the given angle (in the Z plane only). * (Somewhat pointless for the vector styles since you can do mostly * the same thing with the MODELVIEW transform, however, for what its * worth, this routine uses the FreeType rotation function to compute * the "proper" metrics for glyph advance.) * \param string_rotation angle in degrees of z rotation. */ void setStringRotation ( GLfloat string_rotation ); /*! * \return the (Z plane) string rotation angle. */ GLfloat stringRotation ( void ) const { return string_rotation_; } /*! * Set the horizontal justification. * \param horizontal_justification the new horizontal justification. */ void setHorizontalJustification ( enum HorizontalJustification horizontal_justification ) { horizontal_justification_ = horizontal_justification; } /*! * \return the horizontal justification. */ enum HorizontalJustification horizontalJustification ( void ) const { return horizontal_justification_; } /*! * Set the vertical justification. * \param vertical_justification the new vertical justification */ void setVerticalJustification ( enum VerticalJustification vertical_justification ) { vertical_justification_ = vertical_justification; } /*! * \return the vertical justification. */ enum VerticalJustification verticaljustification ( void ) const { return vertical_justification_; } /*! * Specify an OpenGL display list to be invoked before * each character in a string. Face makes a copy of the argument. Pass * an empty DisplayLists to disable this feature. * \param character_display_lists STL vector containing a display * list to invoke before each glyph in a string is drawn. */ void setCharacterDisplayLists ( const DisplayLists& character_display_lists ) { character_display_lists_ = character_display_lists; } /*! * \return a reference to the array of character display lists. This is * the live list as stored in the Face. */ DisplayLists& characterDisplayLists ( void ) { return character_display_lists_; } /*! * \return the height (i.e., line spacing) at the current character size. */ virtual double height ( void ) const = 0; /*! * Compute the bounding box info for a character. * \param c the (latin1) character to measure. * \return the bounding box of c. */ virtual BBox measure ( unsigned char c ) = 0; #ifdef _UNICODE #ifndef OGLFT_NO_WX /*! * Compute the bounding box info for a character. * \param c the (UNICODE) character to measure. * \return the bounding box of c. */ virtual BBox measure ( const wxChar c ) = 0; #endif /* OGLFT_NO_WX */ #endif /* _UNICODE */ /*! * Compute the bounding box info for a string. * \param s the (latin1) string to measure. * \return the bounding box of s. */ virtual BBox measure ( const char* s ); /*! * Compute the bounding box info for a string without conversion * to modeling coordinates. * \param s the (latin1) string to measure. * \return the bounding box of s. */ virtual BBox measureRaw ( const char* s ); #ifndef OGLFT_NO_WX /*! * Compute the bounding box info for a string. * \param s the (UNICODE) string to measure. * \return the bounding box of s. */ virtual BBox measure ( const wxString& s ); /*! * Compute the bounding box info for a real number formatted as specified. * \param format (see draw for valid formats) * \param number real number. * \return the bounding box of the formatted number. */ virtual BBox measure ( const wxString& format, double number ); /*! * Compute the bounding box info for a string without conversion * to modeling coordinates. * \param s the (UNICODE) string to measure. * \return the bounding box of s. */ virtual BBox measureRaw ( const wxString& s ); #endif /* OGLFT_NO_WX */ /*! * Compile a string into an OpenGL display list for later * rendering. Essentially, the string is rendered at the origin * of the current MODELVIEW. Note: no other display lists should * be open when this routine is called. Also, the Face does not * keep track of these lists, so you must delete them in order * to recover the memory. * \param s the (latin1) string to compile. * \return the display list name for the string. */ GLuint compile ( const char* s ); #ifndef OGLFT_NO_WX /*! * Compile a string into an OpenGL display list for later * rendering. Essentially, the string is rendered at the origin * of the current MODELVIEW. Note: no other display lists should * be open when this routine is called. Also, the Face does not * keep track of these lists, so you must delete them in order * to recover the memory. * \param s the (UNICODE) string to compile. * \return the display list name for the string. */ GLuint compile ( const wxString& s ); #endif /* OGLFT_NO_WX */ /*! * Compile a single character (glyph) into an OpenGL display list * for later rendering. The Face \em does keep track of these * display lists, so do not delete them. * \param c the (latin1) character to compile. * \return the display list name for the character. */ GLuint compile ( unsigned char c ); #ifndef OGLFT_NO_WX /*! * Compile a single character (glyph) into an OpenGL display list * for later rendering. The Face \em does keep track of these * display lists, so do not delete them. * \param c the (UNICODE) character to compile. * \return the display list name for the character. */ GLuint compile ( const wxChar c ); #endif /* OGLFT_NO_WX */ /*! * Draw a (latin1) string using the current MODELVIEW matrix. If * advance is true, then the final glyph advance changes to the * MODELVIEW matrix are left in place. * \param s the (latin1) string to draw. */ void draw ( const char* s ); #ifndef OGLFT_NO_WX /*! * Draw a (UNICODE) string using the current MODELVIEW * matrix. If advance is true, then the final glyph advance * changes to the MODELVIEW matrix are left in place. * \param s the (UNICODE) string to draw. */ void draw ( const wxString& s ); #endif /* OGLFT_NO_WX */ /*! * Draw the character using the current MODELVIEW matrix. Note that * the MODELVIEW matrix is modified by the glyph advance. Draw a * string if you don't want the MODELVIEW matrix changed. * \param c the (latin1) character to draw. */ void draw ( unsigned char c ); #ifndef OGLFT_NO_WX /*! * Draw the character using the current MODELVIEW matrix. Note that * the MODELVIEW matrix is modified by the glyph advance. Draw a * string if you don't want the MODELVIEW matrix changed. * \param c the (UNICODE) character to draw. */ void draw ( const wxChar c ); #endif /* OGLFT_NO_WX */ /*! * Draw the (latin1) character at the given 2D point. Note that * the MODELVIEW matrix is modified by the glyph advance. Draw * a string if you don't want the MODELVIEW matrix changed. * \param x the X position. * \param y the Y position. * \param c the (latin1) character to draw. */ void draw ( GLfloat x, GLfloat y, unsigned char c ); /*! * Draw the (latin1) character at the given 3D point. Note that * the MODELVIEW matrix is modified by the glyph advance. Draw * a string if you don't want the MODELVIEW matrix changed. * \param x the X position. * \param y the Y position. * \param z the Z position. * \param c the (latin1) character to draw. */ void draw ( GLfloat x, GLfloat y, GLfloat z, unsigned char c ); #ifndef OGLFT_NO_WX /*! * Draw the (UNICODE) character at the given 2D point. Note that * the MODELVIEW matrix is modified by the glyph advance. Draw * a string if you don't want the MODELVIEW matrix changed. * \param x the X position. * \param y the Y position. * \param c the (UNICODE) character to draw. */ void draw ( GLfloat x, GLfloat y, wxChar c ); /*! * Draw the (UNICODE) character at the given 3D point. Note that * the MODELVIEW matrix is modified by the glyph advance. Draw * a string if you don't want the MODELVIEW matrix changed. * \param x the X position. * \param y the Y position. * \param z the Z position. * \param c the (UNICODE) character to draw. */ void draw ( GLfloat x, GLfloat y, GLfloat z, wxChar c ); #endif /* OGLFT_NO_WX */ /*! * Draw a string at the given 2D point. * \param x the X position. * \param y the Y position. * \param s the (latin1) string to draw. */ void draw ( GLfloat x, GLfloat y, const char* s ); /*! * Draw a string at the given 3D point. * \param x the X position. * \param y the Y position. * \param z the Z position. * \param s the (latin1) string to draw. */ void draw ( GLfloat x, GLfloat y, GLfloat z, const char* s ); #ifndef OGLFT_NO_WX /*! * Draw a string at the given 2D point. * \param x the X position. * \param y the Y position. * \param s the (UNICODE) string to draw. */ void draw ( GLfloat x, GLfloat y, const wxString& s ); /*! * Draw a string at the given 3D point. * \param x the X position. * \param y the Y position. * \param z the Z position. * \param s the (UNICODE) string to draw. */ void draw ( GLfloat x, GLfloat y, GLfloat z, const wxString& s ); /*! * Draw a real number per the given format at the given 2D point. * \param x the X position. * \param y the Y position. * \param format Like a typical printf format. Regular text is printed * while a '%' introduces the real number's format. Includes the * following format flags: * \li %%x.yf - floating point in field width x and precision y * \li %%x.ye - scientific notation in field width x and precision y * \li %%x.yg - pick best floating or scientific in field width x and * precision y * \li %%p - draw as a proper fraction, e.g. 1 1/2. Note: this currently * requires a special font which encodes glyphs to be drawn for the * numerator and demoninator in the UNICODE Private Area (0xE000). * * \param number the numeric value. */ void draw ( GLfloat x, GLfloat y, const wxString& format, double number ); /*! * Draw a real number per the given format at the given 3D point. * \param x the X position. * \param y the Y position. * \param z the Z position. * \param format Like a typical printf format. Regular text is printed * while a '%' introduces the real number's format. Includes the * following format flags: * \li %%x.yf - floating point in field width x and precision y * \li %%x.ye - scientific notation in field width x and precision y * \li %%x.yg - pick best floating or scientific in field width x and * precision y * \li %%p - draw as a proper fraction, e.g. 1 1/2. Note: this currently * requires a special font which encodes glyphs to be drawn for the * numerator and demoninator in the UNICODE Private Area (0xE000). * * \param number the numeric value. */ void draw ( GLfloat x, GLfloat y, GLfloat z, const wxString& format, double number ); #endif /* OGLFT_NO_WX */ /*! * \return the nominal ascender from the face. This is in "notional" * units. */ int ascender ( void ) { return faces_.front().face_->ascender; } /*! * \return the nominal descender from the face. This is in "notional" * units. */ int descender ( void ) { return faces_.front().face_->descender; } protected: // The various styles override these routines //! Some styles, in particular the Texture, need specialized steps //! to compile a glyph into an OpenGL display list. //! \param face the FT_Face containing the glyph. //! \param glyph_index the index of the glyph in face. //! \return the display list of the compiled glyph. virtual GLuint compileGlyph ( FT_Face face, FT_UInt glyph_index ) = 0; //! Each style implements its own glyph rendering routine. //! \param face the FT_Face containing the glyph. //! \param glyph_index the index of the glyph in face. virtual void renderGlyph ( FT_Face face, FT_UInt glyph_index ) = 0; //! There is a slight different between the way in which the polygonal //! and raster styles select the character size for FreeType to generate. virtual void setCharSize ( void ) = 0; //! The different styles have different caching needs (well, really only //! the texture style currently has more than the display list cache). virtual void clearCaches ( void ) = 0; //! The polygonal and raster styles compute different values for the //! Z rotation offset. (It's in integer pixels for the raster styles and //! in floating point pixels for the polygonal styles.) virtual void setRotationOffset ( void ) = 0; private: void init ( void ); BBox measure_nominal ( const char* s ); #ifndef OGLFT_NO_WX BBox measure_nominal ( const wxString& s ); wxString format_number ( const wxString& format, double number ); #endif /* OGLFT_NO_WX */ }; //! This is the base class of the polygonal styles: outline, filled and solid. /*! * In the polygonal styles, the detailed geometric outlines of the glyphs * are extracted from the font file and rendered as polygons. */ class Polygonal : public Face { protected: //! Angle of rotation of characters relative to text orientation. struct { bool active_; GLfloat x_, y_, z_; } character_rotation_; //! The tessellation of curves is pretty crude; regardless of length, //! use the same number of increments (and as near as I can tell, this //! is more than sufficient unless the glyph takes up the whole screen). unsigned int tessellation_steps_; //! When curves are tessellated, we use the forward difference algorithm //! from Foley and van Dam for parametric curves (pg. 511 of 2nd Ed. in C). //! So, the step size, delta, is in the parametric variable which is always //! on the interval [0,1]. Therefore, delta = 1/tessellation_steps double delta_, delta2_, delta3_; //! For vector rendition modes, FreeType is allowed to generate the //! lines and arcs at the original face definition resolution. To //! get to the proper glyph size, the vertices are scaled before //! they're passed to the GLU tessellation routines. double vector_scale_; //! Callbacks for FreeType glyph decomposition into outlines FT_Outline_Funcs interface_; //! Default number of steps to break TrueType and Type1 arcs into. //! (Note: this looks good to me, anyway) static const unsigned int DEFAULT_TESSELLATION_STEPS = 4; /*! * VertexInfo is a private class which is used by the decomposition and * tessellation routines to store the vertices and other data of the glyph's * outline. Because of the "impedance mismatch" between the crazy * 26.6 fixed point format of the FreeType library (well, don't * blame them; look at what they have to work with) and OpenGL's preference * for double precision, this simple vector has two constructors: one * for 26.6 format and one for direct floating point. * * VertexInfo also contains (optional) pointers to objects which * implement the ColorTess and TextureTess interfaces. */ struct VertexInfo { double v_[3]; //!< Why is this double precision? Because the second //!< argument to the routine gluTessVertex is a pointer //!< to an array of doubles. Otherwise, we could use //!< single precision everywhere. //! The user can provide a ColorTess object which computes a color //! for each tesselated vertex. ColorTess* color_tess_; //! The user can provide a TextureTess object which computes texture //! coordinates for each tesselated vertex. TextureTess* texture_tess_; //! Default constructor just initializes Vertex to zero. //! \param color_tess optional color tesselation object. //! \param texture_tess optional texture tesselation object. VertexInfo ( ColorTess* color_tess = 0, TextureTess* texture_tess = 0 ) : color_tess_( color_tess ), texture_tess_( texture_tess ) { v_[X] = v_[Y] = v_[Z] = 0.; } /*! * Construct a Vertex from a point in a FreeType contour. * \param ft_v a FreeType FT_Vector, normally passed into the * the decomposition callbacks. * \param color_tess optional color tesselation object. * \param texture_tess optional texture tesselation object. */ VertexInfo ( FT_Vector* ft_v, ColorTess* color_tess = 0, TextureTess* texture_tess = 0 ) : color_tess_( color_tess ), texture_tess_( texture_tess ) { v_[X] = (double)( ft_v->x / 64 ) + (double)( ft_v->x % 64 ) / 64.; v_[Y] = (double)( ft_v->y / 64 ) + (double)( ft_v->y % 64 ) / 64.; v_[Z] = 0.; } /*! * Construct a Vertex from a 2D point. * \param p 2D array of doubles. * \param color_tess optional color tesselation object. * \param texture_tess optional texture tesselation object. */ VertexInfo ( double p[2], ColorTess* color_tess = 0, TextureTess* texture_tess = 0 ) : color_tess_( color_tess ), texture_tess_( texture_tess ) { v_[X] = p[X]; v_[Y] = p[Y]; v_[Z] = 0.; } /*! * Construct a Vertex from a 2D point. * \param x the X coordinate. * \param y the Y coordinate. * \param color_tess optional color tesselation object. * \param texture_tess optional texture tesselation object. */ VertexInfo ( double x, double y, ColorTess* color_tess = 0, TextureTess* texture_tess = 0 ) : color_tess_( color_tess ), texture_tess_( texture_tess ) { v_[X] = x; v_[Y] = y; v_[Z] = 0.; } //! Treat the Vertex like a vector: Normalize its length in the //! usual way. void normalize ( void ) { double length = sqrt( v_[X] * v_[X] + v_[Y] * v_[Y] + v_[Z] * v_[Z] ); v_[X] /= length; v_[Y] /= length; v_[Z] /= length; } }; /*! * Buffers the last control point as the outline of a glyph is * decomposed. */ VertexInfo last_vertex_; //! Normally, we will consider a list of vertices. typedef std::list< VertexInfo* > VertexInfoList; //! A convenience definition of the iterator over the list of vertices. typedef VertexInfoList::const_iterator VILCI; //! A convenience definition of the iterator over the list of vertices. typedef VertexInfoList::iterator VILI; /*! * As curves are decomposed out of the glyph, their vertices are passed * along to the GLU tessellation functions. These vertices have to * hang around until gluTessContourEnd is called. */ VertexInfoList vertices_; //! As GLU tessellation proceeds, new contours open with every call //! to moveTo. bool contour_open_; //! The user can provide a ColorTess object which computes a color //! for each tesselated vertex. ColorTess* color_tess_; //! The user can provide a TextureTess object which computes texture //! coordinates for each tesselated vertex. TextureTess* texture_tess_; public: /*! * \param filename the filename which contains the font face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Polygonal ( const char* filename, float point_size = 12, FT_UInt resolution = 100 ); /*! * \param face open Freetype FT_Face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Polygonal ( FT_Face face, float point_size = 12, FT_UInt resolution = 100 ); /*! * The Polygonal destructor doesn't do anything in particular. */ virtual ~Polygonal ( void ); /*! * TrueType and Type1 files describe the boundaries of glyphs with * quadratic and cubic curves, respectively. Since OpenGL can only really * draw straight lines, these curves have to be tessellated. The * number of steps used is fixed for all glyphs in the face, * but can be changed through this method. Other notes: This value is * only applicable for Outline, Filled and Solid styles. Changing this value * invalidates any cached display lists for glyphs in this face. * * \param tessellation_steps the number of steps to tessellate each curved * segment of a glyph outline. */ void setTessellationSteps ( unsigned int tessellation_steps ); /*! * \return the number of steps used to tessellate curves in the * polygonal font types. */ unsigned int tessellationSteps ( void ) const { return tessellation_steps_; } /*! * Set the individual character rotation in the X direction. * \param character_rotation_x angle in degrees of the X rotation. */ void setCharacterRotationX ( GLfloat character_rotation_x ); /*! * Set the individual character rotation in the Y direction. * \param character_rotation_y angle in degrees of the Y rotation. */ void setCharacterRotationY ( GLfloat character_rotation_y ); /*! * Set the individual character rotation in the Z direction. * \param character_rotation_z angle in degrees of the Z rotation. */ void setCharacterRotationZ ( GLfloat character_rotation_z ); /*! * \return the character rotation in the X direction. */ GLfloat characterRotationX ( void ) const { return character_rotation_.x_; } /*! * \return the character rotation in the Y direction. */ GLfloat characterRotationY ( void ) const { return character_rotation_.y_; } /*! * \return the character rotation in the Z direction. */ GLfloat characterRotationZ ( void ) const { return character_rotation_.z_; } /*! * Set an optional color tesselation object. Each tesselated vertex * is passed to this object, which returns a color for that position * in space. * \param color_tess the color tesselation object. */ void setColorTess ( ColorTess* color_tess ); /*! * \return the color tesselation object. */ ColorTess* colorTess ( void ) const { return color_tess_; } /*! * Set an optional texture coordinate tesselation object. Each * tessellated vertex is passed to this object, which returns * texture coordinates for that position in space. * \param texture_tess the texture coordinate tesselation object. */ void setTextureTess ( TextureTess* texture_tess ); /*! * \return the texture coordinate tesselation object. */ TextureTess* textureTess ( void ) const { return texture_tess_; } /*! * \return the height (i.e., line spacing) at the current character size. */ double height ( void ) const; /*! * Implement measuring a character in a polygonal face. * \param c the (latin1) character to measure * \return the bounding box of c. */ BBox measure ( unsigned char c ); #ifdef _UNICODE #ifndef OGLFT_NO_WX /*! * Implement measuring a character in a polygonal face. * \param c the (UNICODE) character to measure * \return the bounding box of c. */ BBox measure ( const wxChar c ); #endif /* OGLFT_NO_WX */ #endif /* _UNICODE */ /*! * Measure a string of characters. Note: currently, this merely * calls Face's measure routine. * \param s string of (latin1) characters to measure * \return the bounding box of s. */ BBox measure ( const char* s ) { return Face::measure( s ); } #ifndef OGLFT_NO_WX /*! * Implement measuring a formatted number * \param format the format string * \param number to value to format * \return the bounding box of the formatted number */ BBox measure ( const wxString& format, double number ) { return Face::measure( format, number ); } #endif /* OGLFT_NO_WX */ private: void init ( void ); void setCharSize ( void ); void setRotationOffset ( void ); GLuint compileGlyph ( FT_Face face, FT_UInt glyph_index ); protected: void clearCaches ( void ); }; //! Render text as a polygon outline. /*! * \image html outline_class.png * Text is drawn as an outline of each glyph. The contours are extracted * from the font file through FreeType. FreeType is used to scale the * contours to a given size. Usually the outline is drawn in the foreground * color, however, you can specify a ColorTess object to provide a color * for each vertex individually. You can also use * the per-glyph display list functionality to alter the attributes * of each glyph. * * The only complexity to this style is selecting the point size. Since * the outlines are drawn as a polygon, they are subject to the MODELVIEW * transformation. The point size is nominally chosen to be the same as a * raster image generated at the given resolution. Some experimentation * with point size and resolution may be necessary to achieve the desired * results. */ class Outline : public Polygonal { public: /*! * \param filename the filename which contains the font face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Outline ( const char* filename, float point_size = 12, FT_UInt resolution = 100 ); /*! * \param face open FreeType FT_Face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Outline ( FT_Face face, float point_size = 12, FT_UInt resolution = 100 ); /*! * The destructor doesn't do anything in particular. */ ~Outline ( void ); private: void init ( void ); void renderGlyph ( FT_Face face, FT_UInt glyph_index ); static int moveToCallback ( FT_Vector* to, Outline* outline ); static int lineToCallback ( FT_Vector* to, Outline* outline ); static int conicToCallback ( FT_Vector* control, FT_Vector* to, Outline* outline ); static int cubicToCallback ( FT_Vector* control1, FT_Vector* control2, FT_Vector* to, Outline* outline ); }; //! Render text as a filled polygons. /*! * \image html filled_class.png * Each glyph is drawn as a filled polygon. The contours are extracted * from the font file through FreeType. FreeType is used to scale the * contours to the given size. Then the GLU tessellation routines are used * to tessellate the contours into polygons (well, triangles). By default, * these are drawn in GL_FILL polygon mode, but any other polygon mode * can be specified. * * Usually, the polygons are drawn only in the * foreground color, however, you may supply ColorTess and TextureTess * objects which can alter the color or texture coordinates of each * vertex individually. You can also use * the per-glyph display list functionality to alter the attributes * of each glyph. * * The only complexity to this style is selecting the point size. Since * the glyphs are drawn as polygons, they are subject to the viewing and * modeling transformations. The point size is nominally chosen to be the same * as a raster image generated at the given resolution. Some experimentation * with point size and resolution may be necessary to achieve the desired * results. */ class Filled : public Polygonal { //! 3D tessellation of glyphs is accomplished through the standard GLU //! routines GLUtesselator* tess_obj_; //! A place to store any extra vertices generated by the Combine callback VertexInfoList extra_vertices_; protected: //! Offset the glyph in the Z direction. Solely for the Solid subclass. //! Until I can figure out how to shift the glyph outside the context //! of this class, I guess this has got to stay (but it is redundant //! to extrusion_.depth_) GLfloat depth_offset_; public: /*! * \param filename the filename which contains the font face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Filled ( const char* filename, float point_size = 12, FT_UInt resolution = 100 ); /*! * \param face open FreeType FT_Face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Filled ( FT_Face face, float point_size = 12, FT_UInt resolution = 100 ); /*! * The destructor deletes the GLU tessellation object allocated in * in the constructor. */ virtual ~Filled ( void ); /*! * \return the list of extra vertices created by the GLU tessellation * combine callback. */ VertexInfoList& extraVertices ( void ) { return extra_vertices_; } protected: void renderGlyph ( FT_Face face, FT_UInt glyph_index ); private: void init ( void ); static int moveToCallback ( FT_Vector* to, Filled* filled ); static int lineToCallback ( FT_Vector* to, Filled* filled ); static int conicToCallback ( FT_Vector* control, FT_Vector* to, Filled* filled); static int cubicToCallback ( FT_Vector* control1, FT_Vector* control2, FT_Vector* to, Filled* filled ); static void vertexCallback ( VertexInfo* vertex ); static void beginCallback ( GLenum which ); static void endCallback ( void ); static void combineCallback ( GLdouble coords[3], void* vertex_data[4], GLfloat weight[4], void** out_data, Filled* filled ); static void errorCallback ( GLenum error_code ); }; #ifndef OGLFT_NO_SOLID //! Render text as solid letters. /*! * \image html solid_class.png * Each glyph is drawn as a closed solid. The contours are extracted * from the font file through FreeType. FreeType is used to scale the * contours to the given size. The contours are passed to the GLE * tubing and extrusion library to create the sides of the solid. * Then the GLU tessellation routines are used * to tessellate the contours into polygons which are used to cap the sides. * * Currently, the solids are drawn only in the foreground color. However, * proper surface normals are computed so that the solids may be lighted. * Eventually, you'll be able to supply a color/texture * coordinate function to make glyphs more interesting. Note that you can use * the per-glyph display list functionality to alter each glyph individually. * * Another TODO item is to improve the interaction with GLE. Currently, * you can only create block solids. Eventually, we'll have the capability * add bevels and rounds to the edges of the solids and maybe even more * general extrusions (like, for example, the swooshing letters in the title * sequence of the Salkind's 1978 "Superman" movie). * * The only complexity to this style is selecting the point size. Since * the glyphs are drawn as a collection of polygons, they are subject to the * viewing and modeling transformations. The point size is nominally chosen * to be the same as a raster image generated at the given resolution. * Some experimentation with point size and resolution may be necessary to * achieve the desired results. */ class Solid : public Filled { private: //! Callbacks for FreeType glyph decomposition into outlines (note: this //! has the same name as the variable in Polygonal, but it is distinct since //! the routines for the GLE contouring are different from the Filled //! GLU tessellation routines. This may be too confusing?) FT_Outline_Funcs interface_; //! For now, you can only get block extruded solids static const unsigned int N_POLYLINE_PTS = 4; //! Data for the gleExtrusion routine struct glePoint2D { double p_[2]; glePoint2D ( double p[2] ) { p_[X] = p[X]; p_[Y] = p[Y]; } glePoint2D ( double x, double y ) { p_[X] = x; p_[Y] = y; } glePoint2D ( const VertexInfo& v ) { p_[X] = v.v_[X]; p_[Y] = v.v_[Y]; } }; //! Collect all the output from GLE in one of these structures. struct { double depth_; struct { int x_, y_; } normal_sign_; std::vector< glePoint2D > contour_; std::vector< glePoint2D > contour_normals_; gleDouble up_[3]; int n_polyline_pts_; gleDouble point_array_[N_POLYLINE_PTS][3]; } extrusion_; public: /*! * \param filename the filename which contains the font face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Solid ( const char* filename, float point_size = 12, FT_UInt resolution = 100 ); /*! * \param face open FreeType FT_Face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Solid ( FT_Face face, float point_size = 12, FT_UInt resolution = 100 ); /*! * The destructor doesn't do anything in particular. */ ~Solid ( void ); /*! * Set the thickness of the solid * \param depth thickness of the solid in model units. */ void setDepth ( double depth ); /*! * \return the solid extrusion depth. */ double depth ( void ) const { return extrusion_.depth_; } private: // It would be nice if C/C++ had real matrix notation (like Perl!) void assign ( gleDouble a[3], double x, double y, double z ) { a[X] = x; a[Y] = y; a[Z] = z; } void init ( void ); void renderGlyph ( FT_Face face, FT_UInt glyph_index ); static int moveToCallback ( FT_Vector* to, Solid* solid ); static int lineToCallback ( FT_Vector* to, Solid* solid ); static int conicToCallback ( FT_Vector* control, FT_Vector* to, Solid* solid ); static int cubicToCallback ( FT_Vector* control1, FT_Vector* control2, FT_Vector* to, Solid* solid ); }; #endif /* OGLFT_NO_SOLID */ //! This is the base class of the raster styles: bitmap, grayscale and //! translucent. /*! * In the raster styles, FreeType's rasterizer is used to generate raster * images of each glyph. */ class Raster : public Face { protected: //! Raster glyph can be rotated in the Z plane (in addition to the string //! rotation). GLfloat character_rotation_z_; public: /*! * \param filename the filename which contains the font face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Raster ( const char* filename, float point_size = 12, FT_UInt resolution = 100 ); /*! * \param face open FreeType FT_Face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Raster ( FT_Face face, float point_size = 12, FT_UInt resolution = 100 ); /*! * The destructor doesn't do anything in particular. */ virtual ~Raster ( void ); /*! * Set the individual character rotation in the Z direction. * \param character_rotation_z angle in degrees of Z rotation. */ void setCharacterRotationZ ( GLfloat character_rotation_z ); /*! * \return the character rotation in the Z direction. */ GLfloat characterRotationZ ( void ) const { return character_rotation_z_; } /*! * \return the height (i.e., line spacing) at the current character size. */ double height ( void ) const; /*! * Implement measuring a character in a raster face. * \param c the (latin1) character to measure * \return the bounding box of c. */ BBox measure ( unsigned char c ); #ifdef _UNICODE #ifndef OGLFT_NO_WX /*! * Implement measuring a character in a raster face. * \param c the (UNICODE) character to measure * \return the bounding box of c. */ BBox measure ( const wxChar c ); #endif /* OGLFT_NO_WX */ #endif /* _UNICODE */ /*! * Measure a string of characters. Note: currently, this merely * calls Face's measure routine. * \param s string of (latin1) characters to measure * \return the bounding box of s. */ BBox measure ( const char* s ) { return Face::measure( s ); } #ifndef OGLFT_NO_WX /*! * Implement measuring a formatted number * \param format the format string * \param number to value to format * \return the bounding box of the formatted number */ BBox measure ( const wxString& format, double number ) { return Face::measure( format, number ); } #endif /* OGLFT_NO_WX */ private: void init ( void ); GLuint compileGlyph ( FT_Face face, FT_UInt glyph_index ); void setCharSize ( void ); void setRotationOffset ( void ); void clearCaches ( void ); }; //! Render text as a monochrome raster image. /*! * \image html monochrome_class.png * This is more or less the standard way in which text is intended to * be rendered in OpenGL. It uses the \c glBitmap call to draw a sequence * of monochrome bitmaps. Since FreeType is capable of rotating glyphs * created from faces based on vector outlines, you can rotate (in the Z plane) * both the text string as well as the individual characters in the string. * * Note: you \em must call * \code * glPixelStorei( GL_UNPACK_ALIGNMENT, 1 ); * \endcode * before drawing in order for monochrome glyphs to be rendered properly. * * Another note: It is helpful to have the option * \c GL_RASTER_POSITION_UNCLIPPED_IBM available if you intend to draw text * at MODELVIEW based positions, otherwise if the initial text position is off * the screen, the entire image is clipped. */ class Monochrome : public Raster { public: /*! * \param filename the filename which contains the font face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Monochrome ( const char* filename, float point_size = 12, FT_UInt resolution = 100 ); /*! * \param face open FreeType FT_Face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Monochrome ( FT_Face face, float point_size = 12, FT_UInt resolution = 100 ); /*! * The destructor doesn't do anything in particular. */ ~Monochrome ( void ); private: GLubyte* invertBitmap ( const FT_Bitmap& bitmap ); void renderGlyph ( FT_Face face, FT_UInt glyph_index ); }; //! Render text as a grayscale raster image. /*! * \image html grayscale_class.png * The Grayscale style is similar to the Monochrome style. FreeType is used * to rasterize a glyph and this is then drawn on the screen using * \c glDrawPixels. The FreeType rasterization is done in anti-aliased mode. * When Grayscale draws the glyph image, the resulting text is blended * smoothly from the foreground color to the background color. The background * of the glyph is opaque, so this style works best over a solid background. * * Note: you \em must call * \code * glPixelStorei( GL_UNPACK_ALIGNMENT, 1 ); * \endcode * before drawing in order for grayscale glyphs to be rendered properly. * * Another note: It is helpful to have the option * \c GL_RASTER_POSITION_UNCLIPPED_IBM available if you intend to draw text * at MODELVIEW based positions, otherwise if the initial text position is off * the screen, the entire image is clipped. */ class Grayscale : public Raster { public: /*! * \param filename the filename which contains the font face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Grayscale ( const char* filename, float point_size = 12, FT_UInt resolution = 100 ); /*! * \param face open FreeType FT_Face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Grayscale ( FT_Face face, float point_size = 12, FT_UInt resolution = 100 ); /*! * The destructor doesn't do anything in particular. */ ~Grayscale ( void ); private: GLubyte* invertPixmap ( const FT_Bitmap& bitmap ); void renderGlyph ( FT_Face face, FT_UInt glyph_index ); }; //! Render text as a translucent raster image. /*! * \image html translucent_class.png * The Translucent style is similar to the Grayscale style. FreeType is used * to rasterize a glyph and this is then drawn on the screen using * \c glDrawPixels. The FreeType rasterization is done in anti-aliased mode. * When Translucent draws the glyph image, the grayscale levels provided * by FreeType are used as Alpha values in the raster image. This allows * the glyphs to be smoothly blended into complicated backgrounds. * * Note: you \em must call * \code * glPixelStorei( GL_UNPACK_ALIGNMENT, 1 ); * \endcode * before drawing in order for translucent glyphs to be rendered properly. * Additionally, you need to activate blending in order to achieve the * translucent effect: * \code * glEnable( GL_BLEND ); * glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); * \endcode * * Another note: It is helpful to have the option * \c GL_RASTER_POSITION_UNCLIPPED_IBM available if you intend to draw text * at MODELVIEW based positions, otherwise if the initial text position is off * the screen, the entire image is clipped. */ class Translucent : public Raster { public: /*! * \param filename the filename which contains the font face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Translucent ( const char* filename, float point_size = 12, FT_UInt resolution = 100 ); /*! * \param face open FreeType FT_Face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Translucent ( FT_Face face, float point_size = 12, FT_UInt resolution = 100 ); /*! * The destructor doesn't do anything in particular. */ ~Translucent ( void ); private: GLubyte* invertPixmapWithAlpha ( const FT_Bitmap& bitmap ); void renderGlyph ( FT_Face face, FT_UInt glyph_index ); }; //! This is the base class of the texture style. class Texture : public Face { protected: //! Angle of rotation of characters relative to text orientation. struct { bool active_; //!< Is character rotation non-zero? (faster than checking all //!< the other values.) GLfloat x_, //!< Angle of rotation in the X direction. y_, //!< Angle of rotation in the Y direction. z_; //!< Angle of rotation in the Z direction. } character_rotation_; /*! * The textured glyphs need a little bit more infrastructure to draw * since we have to remember the size of the texture object itself * (at least implicitly). Also, we don't want to create any more * texture objects than we have to, so they are always cached. */ struct TextureInfo { GLuint texture_name_; //!< A bound texture name is an integer in OpenGL. FT_Int left_bearing_, //!< The left bearing of the transformed glyph. bottom_bearing_; //!< The bottom bearing of the transformed glyph. int width_, //!< The 2**l width of the texture. height_; //!< The 2**m height of the texture. GLfloat texture_s_, //!< The fraction of the texture width occupied //!< by the glyph. texture_t_; //!< The fraction of the texture height occupied //!< by the glyph. FT_Vector advance_; //!< The advance vector of the transformed glyph. }; //! Type of the cache of defined glyph to texture objects mapping. typedef std::map< FT_UInt, TextureInfo > GlyphTexObjs; //! A convenience definition of the iterator over the glyph to texture //! object map. typedef GlyphTexObjs::const_iterator GTOCI; //! A convenience definition of the iterator over the glyph to texture //! object map. typedef GlyphTexObjs::iterator GTOI; //! Cache of defined glyph texture objects. GlyphTexObjs glyph_texobjs_; public: /*! * \param filename the filename which contains the font face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Texture ( const char* filename, float point_size = 12, FT_UInt resolution = 100 ); /*! * \param face open FreeType FT_Face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Texture ( FT_Face face, float point_size = 12, FT_UInt resolution = 100 ); /*! * The texture destructor doesn't really do anything. */ virtual ~Texture ( void ); /*! * Set the individual character rotation in the X direction. * \param character_rotation_x angle in degrees of X rotation. */ void setCharacterRotationX ( GLfloat character_rotation_x ); /*! * Set the individual character rotation in the Y direction. * \param character_rotation_y angle in degrees of Y rotation. */ void setCharacterRotationY ( GLfloat character_rotation_y ); /*! * Set the individual character rotation in the Z direction. * \param character_rotation_z angle in degrees of Z rotation. */ void setCharacterRotationZ ( GLfloat character_rotation_z ); /*! * \return the character rotation in the X direction. */ GLfloat characterRotationX ( void ) const { return character_rotation_.x_; } /*! * \return the character rotation in the Y direction. */ GLfloat characterRotationY ( void ) const { return character_rotation_.y_; } /*! * \return the character rotation in the Z direction. */ GLfloat characterRotationZ ( void ) const { return character_rotation_.z_; } /*! * \return the height (i.e., line spacing) at the current character size. */ double height ( void ) const; /*! * Implement measuring a character in a texture face. * \param c the (latin1) character to measure * \return the bounding box of c. */ BBox measure ( unsigned char c ); #ifdef _UNICODE #ifndef OGLFT_NO_WX /*! * Implement measuring a character in a texture face. * \param c the (UNICODE) character to measure * \return the bounding box of c. */ BBox measure ( const wxChar c ); #endif /* OGLFT_NO_WX */ #endif /* _UNICODE */ /*! * Measure a string of characters. Note: currently, this merely * calls Face's measure routine. * \param s string of (latin1) characters to measure * \return the bounding box of s. */ BBox measure ( const char* s ) { return Face::measure( s ); } #ifndef OGLFT_NO_WX /*! * Implement measuring a formatted number * \param format the format string * \param number to value to format * \return the bounding box of the formatted number */ BBox measure ( const wxString& format, double number ) { return Face::measure( format, number ); } #endif /* OGLFT_NO_WX */ protected: /*! * OpenGL texture maps have to be a power of 2 in width and height (including * apparently 1 = 2**0 ). This function returns the next higher power of * 2 of the argument. If the argument is already a power of 2, you just * get that back. * \param a width or height of an image. * \return value of a rounded to nearest, higher power of 2. */ unsigned int nearestPowerCeil ( unsigned int a ); /*! * This is all that distinguishes the various texture styles. Each subclass * defines this method as appropriate. Once the texture is bound, it * is rendered the same in all cases. * \param face FT_Face containing the glyph to render. * \param glyph_index index of glyph in face. */ virtual void bindTexture ( FT_Face face, FT_UInt glyph_index ) = 0; private: void init ( void ); void setCharSize ( void ); void setRotationOffset ( void ); GLuint compileGlyph ( FT_Face face, FT_UInt glyph_index ); void renderGlyph ( FT_Face face, FT_UInt glyph_index ); void clearCaches ( void ); }; //! Render text as texture mapped monochrome quads. /*! * \image html texture_monochrome_class.png * This style is similar to the Monochrome raster style, except instead * of using \c glBitmap to draw the raster image, the image is used * as a texture map on a quad. If drawing is confined to the Z plane, * then you will see no difference between this style and Monochrome. * However, because the quad is a 3D object, it can be transformed * by the usual modeling operations; so, texture mapped glyphs can be * rotated in the X and Y directions as well as Z direction. Also, * if the viewing (or modeling) transformation has a non-unity scale or * shear, the glyphs will also be scaled or sheared (unlike the raster * styles). Also, there is no problem with clipping glyphs which lie * off the screen; texture mapped quads are properly clipped to the * screen boundary. * * If this is not convincing enough, the performance of texture mapped * glyphs is generally as good as or better than the equivalent * raster style (especially with hardware texture acceleration). However, * they do take up more memory space. * * Note: you \em must call * \code * glPixelStorei( GL_UNPACK_ALIGNMENT, 1 ); * \endcode * before drawing in order for textured glyphs to be rendered properly. */ class MonochromeTexture : public Texture { public: /*! * \param filename the filename which contains the font face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ MonochromeTexture ( const char* filename, float point_size = 12, FT_UInt resolution = 100 ); /*! * \param face open FreeType FT_Face * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ MonochromeTexture ( FT_Face face, float point_size = 12, FT_UInt resolution = 100 ); /*! * The monochrome texture destructor doesn't really do anything. */ ~MonochromeTexture ( void ); private: GLubyte* invertBitmap ( const FT_Bitmap& bitmap, int* width, int* height ); void bindTexture ( FT_Face face, FT_UInt glyph_index ); }; //! Render text as texture mapped grayscale quads. /*! * \image html texture_grayscale_class.png * This style is similar to the Grayscale raster style, except instead * of using \c glDrawPixels to draw the raster image, the image is used * as a texture map on a quad. If drawing is confined to the Z plane, * then you will see no difference between this style and Grayscale. * However, because the quad is a 3D object, it can be transformed * by the usual modeling operations; so, texture mapped glyphs can be * rotated in the X and Y directions as well as Z direction. Also, * if the viewing (or modeling) transformation has a non-unity scale or * shear, the glyphs will also be scaled or sheared (unlike the raster * styles). Also, there is no problem with clipping glyphs which lie * off the screen; texture mapped quads are properly clipped to the * screen boundary. * * If this is not convincing enough, the performance of texture mapped * glyphs is generally as good as or better than the equivalent * raster style (especially with hardware texture acceleration). However, * they do consume more memory space. * * Note: you \em must call * \code * glPixelStorei( GL_UNPACK_ALIGNMENT, 1 ); * \endcode * before drawing in order for textured glyphs to be rendered properly. */ class GrayscaleTexture : public Texture { public: /*! * \param filename the filename which contains the font face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ GrayscaleTexture ( const char* filename, float point_size = 12, FT_UInt resolution = 100 ); /*! * \param face open FreeType FT_Face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ GrayscaleTexture ( FT_Face face, float point_size = 12, FT_UInt resolution = 100 ); /*! * The grayscale texture destructor doesn't really do anything. */ ~GrayscaleTexture ( void ); private: GLubyte* invertPixmap ( const FT_Bitmap& bitmap, int* width, int* height ); void bindTexture ( FT_Face face, FT_UInt glyph_index ); }; //! Render text as texture mapped translucent quads. /*! * \image html texture_translucent_class.png * This style is similar to the Translucent raster style, except instead * of using \c glDrawPixels to draw the raster image, the image is used * as a texture map on a quad. If drawing is confined to the Z plane, * then you will see no difference between this style and Translucent. * However, because the quad is a 3D object, it can be transformed * by the usual modeling operations; so, texture mapped glyphs can be * rotated in the X and Y directions as well as Z direction. Also, * if the viewing (or modeling) transformation has a non-unity scale or * shear, the glyphs will also be scaled or sheared (unlike the raster * styles). Also, there is no problem with clipping glyphs which lie * off the screen; texture mapped quads are properly clipped to the * screen boundary. * * If this is not convincing enough, the performance of texture mapped * glyphs is generally as good as or better than the equivalent * raster style (especially with hardware texture acceleration). However, * they do consume more memory space. * * Note: you \em must call * \code * glPixelStorei( GL_UNPACK_ALIGNMENT, 1 ); * \endcode * before drawing in order for textured glyphs to be rendered properly. * Additionally, you need to activate blending in order to achieve the * translucent effect: * \code * glEnable( GL_BLEND ); * glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); * \endcode */ class TranslucentTexture : public Texture { public: /*! * \param filename the filename which contains the font face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ TranslucentTexture ( const char* filename, float point_size = 12, FT_UInt resolution = 100 ); /*! * \param face open FreeType FT_Face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ TranslucentTexture ( FT_Face face, float point_size = 12, FT_UInt resolution = 100 ); /*! * The translucent texture destructor doesn't really do anything. */ ~TranslucentTexture ( void ); private: GLubyte* invertPixmap ( const FT_Bitmap& bitmap, int* width, int* height ); void bindTexture ( FT_Face face, FT_UInt glyph_index ); }; } // Close OGLFT namespace #endif /* OGLFT_H */ therion/loch/lxOptDlg.cxx0000644000076400010400000001177611102265142016501 0ustar userAdministrators#include "lxWX.h" #include "lxGUI.h" // Standard libraries #ifndef LXDEPCHECK #include #include #endif //LXDEPCHECK - standart libraries enum { LXOD_START = 6000, LXOD_INIT_DIR_PATH, LXOD_INIT_DIR_BROWSE, LXOD_GLASSES, LXOD_END, }; class lxOptionsDlg : public wxDialog { public: long tmp; lxFrame * m_lxframe; lxOptionsDlg(wxWindow * parent); void OnCommand(wxCommandEvent& event); DECLARE_EVENT_TABLE() }; BEGIN_EVENT_TABLE(lxOptionsDlg, wxDialog) //EVT_UPDATE_UI_RANGE(LXOD_START, LXOD_END, lxOptionsDlg::OnUpdateUI) EVT_BUTTON(LXOD_INIT_DIR_BROWSE, lxOptionsDlg::OnCommand) END_EVENT_TABLE() lxOptionsDlg::lxOptionsDlg(wxWindow * parent) : wxDialog(parent, wxID_ANY, wxString(_("Options"))) { this->m_lxframe = (lxFrame *) parent; wxBoxSizer * sizerAll = new wxBoxSizer(wxVERTICAL); lxStaticBoxSizer = new wxStaticBoxSizer( new wxStaticBox(this, wxID_ANY, _("General options")), wxVERTICAL); lxStaticBoxSizer->Add( new wxStaticText(this, wxID_ANY, _("Default data files directory")), 0, wxALIGN_LEFT | wxALL, lxBORDER); lxBoxSizer = new wxBoxSizer(wxHORIZONTAL); lxBoxSizer->Add(new wxTextCtrl(this, LXOD_INIT_DIR_PATH, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxTextValidator(0, &this->m_lxframe->m_iniDirectory)), 1, wxALIGN_CENTER | lxNOTTOP, lxBORDER); lxBoxSizer->Add(new wxButton(this, LXOD_INIT_DIR_BROWSE, _("Browse...")), 0, wxALIGN_LEFT | wxRIGHT | wxBOTTOM, lxBORDER); lxStaticBoxSizer->Add(lxBoxSizer, 0, wxEXPAND); lxStaticBoxSizer->Add( new wxStaticText(this, wxID_ANY, _("Default stereo colors")), 0, wxALIGN_LEFT | lxNOTTOP, lxBORDER); wxChoice * ch = new wxChoice(this, LXOD_GLASSES, wxDefaultPosition, wxDefaultSize, 0, 0, 0, wxGenericValidator(&this->m_lxframe->m_iniStereoGlasses)); ch->Append(_("red & cyan")); ch->Append(_("red & green")); ch->Append(_("red & blue")); ch->Append(_("yellow & blue")); ch->Append(_("cyan & red")); ch->Append(_("green & red")); ch->Append(_("blue & red")); ch->Append(_("blue & yellow")); ch->Append(_("remember last used channels")); lxStaticBoxSizer->Add(ch, 0, wxEXPAND | lxNOTTOP, lxBORDER); lxStaticBoxSizer->Add( new wxStaticText(this, wxID_ANY, _("Measurement system")), 0, wxALIGN_LEFT | lxNOTTOP, lxBORDER); lxBoxSizer = new wxBoxSizer(wxHORIZONTAL); lxBoxSizer->Add(new wxRadioButton(this, wxID_ANY, _("Metric"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP, lxRadioBtnValidator(&this->m_lxframe->m_iniUnits, LXUNITS_METRIC)), 0, wxALIGN_LEFT | lxNOTTOP, lxBORDER); lxBoxSizer->Add(new wxRadioButton(this, wxID_ANY, _("Imperial"), wxDefaultPosition, wxDefaultSize, 0, lxRadioBtnValidator(&this->m_lxframe->m_iniUnits, LXUNITS_IMPERIAL)), 0, wxALIGN_LEFT | wxRIGHT | wxBOTTOM, lxBORDER); lxStaticBoxSizer->Add(lxBoxSizer, 0, wxEXPAND); sizerAll->Add(lxStaticBoxSizer, 0, wxEXPAND | wxALL, lxBORDER); lxStaticBoxSizer = new wxStaticBoxSizer( new wxStaticBox(this, wxID_ANY, _("Walls extrapolation")), wxVERTICAL); lxStaticBoxSizer->Add( new wxRadioButton(this, wxID_ANY, _("Do not extrapolate walls"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP, lxRadioBtnValidator(&this->m_lxframe->m_iniWallsInterpolate, LXWALLS_INTERP_NONE)), 0, wxALIGN_LEFT | wxALL, lxBORDER); lxStaticBoxSizer->Add( new wxRadioButton(this, wxID_ANY, _("Extrapolate only files without walls information"), wxDefaultPosition, wxDefaultSize, 0, lxRadioBtnValidator(&this->m_lxframe->m_iniWallsInterpolate, LXWALLS_INTERP_ALL_ONLY)), 0, wxALIGN_LEFT | wxALL, lxBORDER); lxStaticBoxSizer->Add( new wxRadioButton(this, wxID_ANY, _("Extrapolate all missing walls information"), wxDefaultPosition, wxDefaultSize, 0, lxRadioBtnValidator(&this->m_lxframe->m_iniWallsInterpolate, LXWALLS_INTERP_MISSING)), 0, wxALIGN_LEFT | wxALL, lxBORDER); sizerAll->Add(lxStaticBoxSizer, 0, wxEXPAND | lxNOTTOP, lxBORDER); // Bottom line lxBoxSizer = new wxBoxSizer(wxHORIZONTAL); lxBoxSizer->Add(new wxButton(this, wxID_OK, _("OK")), 0, wxALIGN_CENTER | wxLEFT | wxRIGHT | wxBOTTOM, lxBORDER); lxBoxSizer->Add(new wxButton(this, wxID_CANCEL, _("Cancel")), 0, wxALIGN_CENTER | wxRIGHT | wxBOTTOM, lxBORDER); sizerAll->Add(lxBoxSizer, 0, wxALIGN_RIGHT); lxFButton(wxID_CANCEL)->SetFocus(); SetSizer(sizerAll); sizerAll->SetSizeHints(this); sizerAll->Fit(this); this->CentreOnParent(); } void lxOptionsDlg::OnCommand(wxCommandEvent& event) { switch (event.GetId()) { case LXOD_INIT_DIR_BROWSE: { wxDirDialog dd(this); dd.SetPath(lxFTextCtrl(LXOD_INIT_DIR_PATH)->GetValue()); if (dd.ShowModal() == wxID_OK) { lxFTextCtrl(LXOD_INIT_DIR_PATH)->SetValue(dd.GetPath()); } } break; // case wxID_OK: // this->m_lxframe->m_iniDirectory = lxFTextCtrl(LXOD_INIT_DIR_PATH)->GetValue(); // this->m_lxframe->m_iniStereoGlasses = lxFChoice(LXOD_GLASSES)->GetSelection(); // break; } } void lxShowOptionsDialog(wxWindow * parent) { lxOptionsDlg od(parent); od.ShowModal(); } therion/loch/lxOptDlg.h0000644000076400010400000000052510537464734016137 0ustar userAdministrators/** * @file lxSScene.h * Loch scene setup. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ */ #ifndef lxOptDlg_h #define lxOptDlg_h // Standard libraries #ifndef LXDEPCHECK #include #endif //LXDEPCHECK - standart libraries void lxShowOptionsDialog(wxWindow * parent); #endif therion/loch/lxR2D.c0000644000076400010400000003723410507531566015332 0ustar userAdministrators/* ** Simple example of rendering to a Windows DIB (Device Independent Bitmap) */ #include "lxR2D.h" #include #include #include #if !defined(M_PI) #define M_PI 3.14159265F #endif #define colorIndexMode FALSE #define doubleBuffered FALSE #define renderToDIB TRUE struct _R2DCTX { int winWidth, winHeight; HDC hDC; HGLRC hGLRC; HPALETTE hPalette; HBITMAP hBitmap; }; /* Struct used to manage color ramps */ struct R2DcolorIndexState { GLfloat amb[3]; /* ambient color / bottom of ramp */ GLfloat diff[3]; /* diffuse color / middle of ramp */ GLfloat spec[3]; /* specular color / top of ramp */ GLfloat ratio; /* ratio of diffuse to specular in ramp */ GLint indexes[3]; /* where ramp was placed in palette */ }; /* ** Each entry in this array corresponds to a color ramp in the ** palette. The indexes member of each struct is updated to ** reflect the placement of the color ramp in the palette. */ #define NUM_COLORS (sizeof(R2Dcolors) / sizeof(R2Dcolors[0])) struct R2DcolorIndexState R2Dcolors[] = { { { 0.0F, 0.0F, 0.0F }, { 0.1F, 0.6F, 0.3F }, { 1.0F, 1.0F, 1.0F }, 0.75F, { 0, 0, 0 }, }, { { 0.0F, 0.0F, 0.0F }, { 0.0F, 0.2F, 0.5F }, { 1.0F, 1.0F, 1.0F }, 0.75F, { 0, 0, 0 }, }, { { 0.0F, 0.05F, 0.05F }, { 0.6F, 0.0F, 0.8F }, { 1.0F, 1.0F, 1.0F }, 0.75F, { 0, 0, 0 }, }, }; /*****************************************************************/ void R2DsetupDIB(R2DContext * ctx) { HDC hDC = ctx->hDC; BITMAPINFO *bmInfo; BITMAPINFOHEADER *bmHeader; UINT usage; VOID *base; int bmiSize; int bitsPerPixel; bmiSize = sizeof(*bmInfo); bitsPerPixel = GetDeviceCaps(hDC, BITSPIXEL); switch (bitsPerPixel) { case 8: /* bmiColors is 256 WORD palette indices */ bmiSize += (256 * sizeof(WORD)) - sizeof(RGBQUAD); break; case 16: /* bmiColors is 3 WORD component masks */ bmiSize += (3 * sizeof(DWORD)) - sizeof(RGBQUAD); break; case 24: case 32: default: /* bmiColors not used */ break; } bmInfo = (BITMAPINFO *) calloc(1, bmiSize); bmHeader = &bmInfo->bmiHeader; bmHeader->biSize = sizeof(*bmHeader); bmHeader->biWidth = ctx->winWidth; bmHeader->biHeight = ctx->winHeight; bmHeader->biPlanes = 1; /* must be 1 */ bmHeader->biBitCount = (WORD) bitsPerPixel; bmHeader->biXPelsPerMeter = 0; bmHeader->biYPelsPerMeter = 0; bmHeader->biClrUsed = 0; /* all are used */ bmHeader->biClrImportant = 0; /* all are important */ switch (bitsPerPixel) { case 8: bmHeader->biCompression = BI_RGB; bmHeader->biSizeImage = 0; usage = DIB_PAL_COLORS; /* bmiColors is 256 WORD palette indices */ { WORD *palIndex = (WORD *) &bmInfo->bmiColors[0]; int i; for (i=0; i<256; i++) { palIndex[i] = (WORD)i; } } break; case 16: bmHeader->biCompression = BI_RGB; bmHeader->biSizeImage = 0; usage = DIB_RGB_COLORS; /* bmiColors is 3 WORD component masks */ { DWORD *compMask = (DWORD *) &bmInfo->bmiColors[0]; compMask[0] = 0xF800; compMask[1] = 0x07E0; compMask[2] = 0x001F; } break; case 24: case 32: default: bmHeader->biCompression = BI_RGB; bmHeader->biSizeImage = 0; usage = DIB_RGB_COLORS; /* bmiColors not used */ break; } ctx->hBitmap = CreateDIBSection(hDC, bmInfo, usage, &base, NULL, 0); if (ctx->hBitmap == NULL) { (void) MessageBox(WindowFromDC(hDC), "Failed to create DIBSection.", "OpenGL application error", MB_ICONERROR | MB_OK); exit(1); } SelectObject(hDC, ctx->hBitmap); free(bmInfo); } void R2DsetupPalette(R2DContext * ctx) { HDC hDC = ctx->hDC; PIXELFORMATDESCRIPTOR pfd; LOGPALETTE* pPal; int pixelFormat = GetPixelFormat(hDC); int paletteSize; DescribePixelFormat(hDC, pixelFormat, sizeof(PIXELFORMATDESCRIPTOR), &pfd); /* ** Determine if a palette is needed and if so what size. */ if (pfd.dwFlags & PFD_NEED_PALETTE) { paletteSize = 1 << pfd.cColorBits; } else if (pfd.iPixelType == PFD_TYPE_COLORINDEX) { paletteSize = 4096; } else { return; } pPal = (LOGPALETTE*) malloc(sizeof(LOGPALETTE) + paletteSize * sizeof(PALETTEENTRY)); pPal->palVersion = 0x300; pPal->palNumEntries = (WORD) paletteSize; if (pfd.iPixelType == PFD_TYPE_RGBA) { /* ** Fill the logical paletee with RGB color ramps */ int redMask = (1 << pfd.cRedBits) - 1; int greenMask = (1 << pfd.cGreenBits) - 1; int blueMask = (1 << pfd.cBlueBits) - 1; int i; for (i=0; ipalPalEntry[i].peRed = (BYTE)( (((i >> pfd.cRedShift) & redMask) * 255) / redMask); pPal->palPalEntry[i].peGreen = (BYTE)( (((i >> pfd.cGreenShift) & greenMask) * 255) / greenMask); pPal->palPalEntry[i].peBlue = (BYTE)( (((i >> pfd.cBlueShift) & blueMask) * 255) / blueMask); pPal->palPalEntry[i].peFlags = 0; } } else { /* ** Fill the logical palette with color ramps. ** ** Set up the logical palette so that it can be realized ** into the system palette as an identity palette. ** ** 1) The default static entries should be present and at the right ** location. The easiest way to do this is to grab them from ** the current system palette. ** ** 2) All non-static entries should be initialized to unique values. ** The easiest way to do this is to ensure that all of the non-static ** entries have the PC_NOCOLLAPSE flag bit set. */ int numRamps = NUM_COLORS; int rampSize = (paletteSize - 20) / numRamps; int extra = (paletteSize - 20) - (numRamps * rampSize); int i, r; /* ** Initialize static entries by copying them from the ** current system palette. */ GetSystemPaletteEntries(hDC, 0, paletteSize, &pPal->palPalEntry[0]); /* ** Fill in non-static entries with desired colors. */ for (r=0; rpalPalEntry[rampBase]; int diffSize = (int) (rampSize * R2Dcolors[r].ratio); int specSize = rampSize - diffSize; for (i=0; ipalPalEntry[index]; pe->peRed = (BYTE) 0; pe->peGreen = (BYTE) 0; pe->peBlue = (BYTE) 0; pe->peFlags = PC_NOCOLLAPSE; } } ctx->hPalette = CreatePalette(pPal); free(pPal); if (ctx->hPalette) { SelectPalette(hDC, ctx->hPalette, FALSE); RealizePalette(hDC); } } void R2DsetupPixelFormat(HDC hDC) { PIXELFORMATDESCRIPTOR pfd = { sizeof(PIXELFORMATDESCRIPTOR), /* size of this pfd */ 1, /* version num */ PFD_SUPPORT_OPENGL, /* support OpenGL */ 0, /* pixel type */ 0, /* 8-bit color depth */ 0, 0, 0, 0, 0, 0, /* color bits (ignored) */ 0, /* no alpha buffer */ 0, /* alpha bits (ignored) */ 0, /* no accumulation buffer */ 0, 0, 0, 0, /* accum bits (ignored) */ 16, /* depth buffer */ 0, /* no stencil buffer */ 0, /* no auxiliary buffers */ PFD_MAIN_PLANE, /* main layer */ 0, /* reserved */ 0, 0, 0, /* no layer, visible, damage masks */ }; int SelectedPixelFormat; BOOL retVal; pfd.cColorBits = (BYTE) GetDeviceCaps(hDC, BITSPIXEL); /* if (colorIndexMode) { */ /* pfd.iPixelType = PFD_TYPE_COLORINDEX; */ /* } else { */ pfd.iPixelType = PFD_TYPE_RGBA; /* } */ /* if (doubleBuffered) { */ /* pfd.dwFlags |= PFD_DOUBLEBUFFER; */ /* } */ /* if (renderToDIB) { */ pfd.dwFlags |= PFD_DRAW_TO_BITMAP; /* } else { */ /* pfd.dwFlags |= PFD_DRAW_TO_WINDOW; */ /* } */ SelectedPixelFormat = ChoosePixelFormat(hDC, &pfd); if (SelectedPixelFormat == 0) { (void) MessageBox(WindowFromDC(hDC), "Failed to find acceptable pixel format.", "OpenGL application error", MB_ICONERROR | MB_OK); exit(1); } retVal = SetPixelFormat(hDC, SelectedPixelFormat, &pfd); if (retVal != TRUE) { (void) MessageBox(WindowFromDC(hDC), "Failed to set pixel format.", "OpenGL application error", MB_ICONERROR | MB_OK); exit(1); } } R2DContext * R2DCreate(int width, int height) { R2DContext * ctx = (R2DContext *) calloc(1, sizeof(R2DContext)); if (ctx) { ctx->winWidth = width; ctx->winHeight = height; ctx->hDC = CreateCompatibleDC(NULL); R2DsetupDIB(ctx); R2DsetupPixelFormat(ctx->hDC); R2DsetupPalette(ctx); ctx->hGLRC = wglCreateContext(ctx->hDC); } return ctx; } void R2DMakeCurrent(R2DContext * ctx) { if (ctx) { wglMakeCurrent(ctx->hDC, ctx->hGLRC); } } void R2DDestroy(R2DContext * ctx) { if (ctx) { if (ctx->hGLRC) { wglMakeCurrent(NULL, NULL); wglDeleteContext(ctx->hGLRC); } DeleteDC(ctx->hDC); free(ctx); } } /* Stand alone stuff */ #ifndef LXWIN32 HDC hDCFrontBuffer; void (*idleFunc)(void); R2DContext * global_ctx; void drawTorus(void) { int numMajor = 32; int numMinor = 24; float majorRadius = 0.6F; float minorRadius = 0.2F; double majorStep = 2.0F*M_PI / numMajor; double minorStep = 2.0F*M_PI / numMinor; int i, j; for (i=0; iwinWidth > global_ctx->winHeight) { GLfloat aspect = (GLfloat) global_ctx->winWidth / (GLfloat) global_ctx->winHeight; glFrustum(-0.5F*aspect, 0.5F*aspect, -0.5F, 0.5F, 1.0F, 3.0F); } else { GLfloat aspect = (GLfloat) global_ctx->winHeight / (GLfloat) global_ctx->winWidth; glFrustum(-0.5F, 0.5F, -0.5F*aspect, 0.5F*aspect, 1.0F, 3.0F); } glMatrixMode(GL_MODELVIEW); } void init(void) { GLfloat matShine = 20.00F; GLfloat light0Pos[4] = { 0.70F, 0.70F, 1.25F, 0.00F }; glClearColor(R2Dcolors[2].diff[0], R2Dcolors[2].diff[1], R2Dcolors[2].diff[2], 1.0F); glClearIndex((GLfloat) R2Dcolors[2].indexes[1]); setProjection(); glTranslatef(0.0F, 0.0F, -2.0F); glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, matShine); glLightfv(GL_LIGHT0, GL_POSITION, light0Pos); glEnable(GL_LIGHT0); glEnable(GL_LIGHTING); glEnable(GL_DEPTH_TEST); if (!colorIndexMode) { glEnable(GL_COLOR_MATERIAL); } } void doRedraw(void) { static GLfloat x, y, z; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glRotatef(x, 1.0F, 0.0F, 0.0F); glRotatef(y, 0.0F, 1.0F, 0.0F); glRotatef(z, 0.0F, 0.0F, 1.0F); drawTorus(); glPopMatrix(); if (renderToDIB) { glFinish(); BitBlt(hDCFrontBuffer, 0, 0, global_ctx->winWidth, global_ctx->winHeight, global_ctx->hDC, 0, 0, SRCCOPY); GdiFlush(); } else { SwapBuffers(hDCFrontBuffer); } x += 5.0F; if (x > 360.0F) x -= 360.0F; y += 7.0F; if (y > 360.0F) y -= 360.0F; z += 9.0F; if (z > 360.0F) z -= 360.0F; } void redraw(void) { idleFunc = doRedraw; } void resize(void) { setProjection(); glViewport(0, 0, global_ctx->winWidth, global_ctx->winHeight); } LRESULT APIENTRY WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: return 0; case WM_DESTROY: PostQuitMessage(0); return 0; case WM_SIZE: if (global_ctx->hGLRC) { //global_ctx->winWidth = (int) LOWORD(lParam); //global_ctx->winHeight = (int) HIWORD(lParam); resize(); return 0; } case WM_PALETTECHANGED: /* ** Update palette mapping if this *is not* the active window. */ if (global_ctx->hGLRC && global_ctx->hPalette && (HWND) wParam != hWnd) { UnrealizeObject(global_ctx->hPalette); SelectPalette(global_ctx->hDC, global_ctx->hPalette, FALSE); RealizePalette(global_ctx->hDC); redraw(); return 0; } break; case WM_QUERYNEWPALETTE: /* ** Update palette mapping if this *is* the active window. */ if (global_ctx->hGLRC && global_ctx->hPalette) { UnrealizeObject(global_ctx->hPalette); SelectPalette(global_ctx->hDC, global_ctx->hPalette, FALSE); RealizePalette(global_ctx->hDC); redraw(); return TRUE; } break; case WM_PAINT: /* ** Update the window. Don't use the device context returned by ** BeginPaint as it won't have the right palette selected into it. */ if (global_ctx->hGLRC) { PAINTSTRUCT ps; BeginPaint(hWnd, &ps); redraw(); EndPaint(hWnd, &ps); return 0; } break; case WM_CHAR: switch ((int)wParam) { case VK_ESCAPE: DestroyWindow(hWnd); return 0; case VK_SPACE: if (idleFunc) { idleFunc = NULL; } else { idleFunc = doRedraw; } default: break; } break; default: break; } /* Deal with any unprocessed messages */ return DefWindowProc(hWnd, message, wParam, lParam); } int APIENTRY WinMain( HINSTANCE hCurrentInst, HINSTANCE hPreviousInst, LPSTR lpszCmdLine, int nCmdShow) { WNDCLASS wndClass; HWND hWnd; MSG msg; char *className = "OpenGL"; char *windowName = "Simple DIB Example"; int winX = 0, winY = 0; R2DContext * ctx = R2DCreate(512, 512); global_ctx = ctx; /* Define and register a window class */ wndClass.style = CS_HREDRAW | CS_VREDRAW; wndClass.lpfnWndProc = WndProc; wndClass.cbClsExtra = 0; wndClass.cbWndExtra = 0; wndClass.hInstance = hCurrentInst; wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); wndClass.hbrBackground = GetStockObject(WHITE_BRUSH); wndClass.lpszMenuName = NULL; wndClass.lpszClassName = className; RegisterClass(&wndClass); /* Create a window of the previously defined class */ hWnd = CreateWindow( className, /* Window class's name */ windowName, /* Title bar text */ WS_OVERLAPPEDWINDOW | /* The window's style */ WS_CLIPCHILDREN | WS_CLIPSIBLINGS, winX, winY, /* Position */ global_ctx->winWidth, global_ctx->winHeight, /* Size */ NULL, /* Parent window's handle */ NULL, /* Menu handle */ hCurrentInst, /* Instance handle */ NULL); /* No additional data */ /* Map the window to the screen */ ShowWindow(hWnd, nCmdShow); /* Force the window to repaint itself */ UpdateWindow(hWnd); /* ** Set up for OpenGL rendering. Bind the rendering context to ** the same device context that the palette will be selected into. */ hDCFrontBuffer = GetDC(hWnd); R2DMakeCurrent(ctx); init(); idleFunc = doRedraw; /* Process Messages */ while (1) { /* execute the idle function while there are no messages to process */ while (idleFunc && PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) == FALSE) { (*idleFunc)(); } if (GetMessage(&msg, NULL, 0, 0) != TRUE) { break; } TranslateMessage(&msg); DispatchMessage(&msg); } /* ** Finish OpenGL rendering. */ idleFunc = NULL; R2DDestroy(ctx); ReleaseDC(hWnd, hDCFrontBuffer); return (int) msg.wParam; } #endif /* Stand alone stuff */ therion/loch/lxR2D.h0000644000076400010400000000054510537464734015337 0ustar userAdministrators#ifdef __cplusplus extern "C" { #endif /*Standard libraries*/ #ifndef LXDEPCHECK #include #endif /*LXDEPCHECK - standart libraries*/ typedef struct _R2DCTX R2DContext; extern R2DContext *R2DCreate(int width, int height); extern void R2DMakeCurrent(R2DContext * ctx); extern void R2DDestroy(R2DContext * ctx); #ifdef __cplusplus } #endif therion/loch/lxR2P.c0000644000076400010400000001114010507531566015332 0ustar userAdministrators/*Standard libraries*/ #ifndef LXDEPCHECK #include #define GLX_GLXEXT_PROTOTYPES #include #include #include #include #endif /*LXDEPCHECK - standart libraries*/ #include "lxR2P.h" struct _R2PCTX { GLXContext ctx; Pixmap pm; XVisualInfo *visinfo; GLXPixmap glxpm; Display *dpy; }; void R2Pmake_context(R2PContext * r2pc) { const int sbAttrib[] = { GLX_RGBA, GLX_RED_SIZE, 1, GLX_GREEN_SIZE, 1, GLX_BLUE_SIZE, 1, None }; const int dbAttrib[] = { GLX_RGBA, GLX_RED_SIZE, 1, GLX_GREEN_SIZE, 1, GLX_BLUE_SIZE, 1, GLX_DOUBLEBUFFER, None }; int scrnum; Window root; scrnum = DefaultScreen( r2pc->dpy ); root = RootWindow( r2pc->dpy, scrnum ); r2pc->visinfo = glXChooseVisual( r2pc->dpy, scrnum, (int *) sbAttrib ); if (!r2pc->visinfo) { r2pc->visinfo = glXChooseVisual( r2pc->dpy, scrnum, (int *) dbAttrib ); if (!r2pc->visinfo) { printf("Error: couldn't get an RGB visual\n"); exit(1); } } /* need indirect context */ r2pc->ctx = glXCreateContext( r2pc->dpy, r2pc->visinfo, NULL, False ); if (!r2pc->ctx) { printf("Error: glXCreateContext failed\n"); exit(-1); } } void R2Pmake_pixmap(R2PContext * r2pc, unsigned int width, unsigned int height) { r2pc->pm = XCreatePixmap( r2pc->dpy, RootWindow( r2pc->dpy, DefaultScreen( r2pc->dpy )), width, height, r2pc->visinfo->depth ); if (!r2pc->pm) { printf("Error: XCreatePixmap failed\n"); exit(-1); } r2pc->glxpm = glXCreateGLXPixmap( r2pc->dpy, r2pc->visinfo, r2pc->pm ); if (!r2pc->glxpm) { printf("Error: GLXCreateGLXPixmap failed\n"); exit(-1); } } R2PContext *R2PCreate(int width, int height) { R2PContext * c = (R2PContext *) calloc(1, sizeof(R2PContext)); if (c) { c->dpy = XOpenDisplay(NULL); R2Pmake_context(c); R2Pmake_pixmap(c, (unsigned int) width, (unsigned int) height); } return c; } void R2PMakeCurrent(R2PContext * c) { if (c) { glXMakeCurrent( c->dpy, c->glxpm, c->ctx ); } } void R2PDestroy(R2PContext * c) { if (c) { glXDestroyGLXPixmap(c->dpy, c->glxpm); XFreePixmap(c->dpy, c->pm); glXDestroyContext(c->dpy, c->ctx); XCloseDisplay(c->dpy); free(c); } } #ifndef LXLINUX static GC gc; R2PContext * global_ctx; static Window make_rgb_window( Display *dpy, unsigned int width, unsigned int height ) { XSetWindowAttributes attr; unsigned long mask; Window win; int scrnum; Window root; scrnum = DefaultScreen( dpy ); root = RootWindow( dpy, scrnum ); /* window attributes */ attr.background_pixel = 0; attr.border_pixel = 0; /* TODO: share root colormap if possible */ attr.colormap = XCreateColormap( dpy, root, global_ctx->visinfo->visual, AllocNone); attr.event_mask = StructureNotifyMask | ExposureMask; mask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask; win = XCreateWindow( dpy, root, 0, 0, width, height, 0, global_ctx->visinfo->depth, InputOutput, global_ctx->visinfo->visual, mask, &attr ); /* make an X GC so we can do XCopyArea later */ gc = XCreateGC( global_ctx->dpy, win, 0, NULL ); return win; } static void event_loop( Display *dpy, GLXPixmap pm ) { XEvent event; while (1) { XNextEvent( dpy, &event ); switch (event.type) { case Expose: printf("Redraw\n"); /* copy the image from GLXPixmap to window */ XCopyArea( dpy, pm, event.xany.window, /* src, dest */ gc, 0, 0, 300, 300, /* gc, src pos, size */ 0, 0 ); /* dest pos */ break; case ConfigureNotify: /* nothing */ break; } } } int main( int argc, char *argv[] ) { Window win; global_ctx = R2PCreate(300, 300); win = make_rgb_window( global_ctx->dpy, 300, 300 ); R2PMakeCurrent(global_ctx); printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER)); /* Render an image into the pixmap */ glShadeModel( GL_FLAT ); glClearColor( 0.5, 0.5, 0.5, 1.0 ); glClear( GL_COLOR_BUFFER_BIT ); glViewport( 0, 0, 300, 300 ); glOrtho( -1.0, 1.0, -1.0, 1.0, -1.0, 1.0 ); glColor3f( 0.0, 1.0, 1.0 ); glRectf( -0.75, -0.75, 0.75, 0.75 ); glFlush(); XMapWindow( global_ctx->dpy, win ); event_loop( global_ctx->dpy, global_ctx->pm ); R2PDestroy(global_ctx); return 0; } #endif therion/loch/lxR2P.h0000644000076400010400000000037010537464734015347 0ustar userAdministrators#ifdef __cplusplus extern "C" { #endif typedef struct _R2PCTX R2PContext; extern R2PContext *R2PCreate(int width, int height); extern void R2PMakeCurrent(R2PContext * ctx); extern void R2PDestroy(R2PContext * ctx); #ifdef __cplusplus } #endif therion/loch/lxRender.cxx0000644000076400010400000007675711775015730016555 0ustar userAdministrators/** * @file lxRender.cxx * Loch printing implementation. */ // Standard libraries #ifndef LXDEPCHECK #include #include #include #include #include #include #include #include #include #include #include #ifdef __cplusplus extern "C" { // stupid JPEG library #endif #include #ifdef __cplusplus } #endif #endif //LXDEPCHECK - standard libraries #include "lxRender.h" #include "lxWX.h" #include "lxGLC.h" #include "lxGUI.h" #include "lxSetup.h" #include "lxTR.h" #define lxRENDERBORDER this->m_glc->TRCGet(TR_TILE_BORDER) //#ifdef LXLINUX //#define lxPPMFORMAT 1 //#endif lxRenderData::lxRenderData() { this->m_scale = 2000.0; this->m_scaleMode = LXRENDER_FIT_SCREEN; this->m_imgWhiteBg = true; this->m_imgWidth = 170.0; this->m_imgHeight = 257.0; this->m_imgResolution = 300.0; this->m_imgFileType = 0; this->m_askFName = true; #ifdef lxPPMFORMAT this->m_imgFileName = _T("cave.ppm"); #else this->m_imgFileName = _T("cave.bmp"); #endif } #define pngerr(err) printf(err) void lxRenderData::CalcImageDimensions(lxGLCanvas * glc) { switch (this->m_scaleMode) { case LXRENDER_FIT_SCALE: this->m_imgPixH = 2.0 * glc->setup->cam_dist * glc->setup->cam_lens_vfovr / this->m_scale / 0.0254 * this->m_imgResolution; this->m_imgPixW = glc->setup->cam_width * this->m_imgPixH; break; case LXRENDER_FIT_WIDTH: this->m_imgPixW = (this->m_imgWidth / 25.4 * this->m_imgResolution); this->m_imgPixH = this->m_imgPixW / glc->setup->cam_width; break; case LXRENDER_FIT_HEIGHT: this->m_imgPixH = (this->m_imgHeight / 25.4 * this->m_imgResolution); this->m_imgPixW = this->m_imgPixH * glc->setup->cam_width; break; // screen shot default: this->m_imgPixH = glc->wh; this->m_imgPixW = glc->ww; break; } if (glc->setup->cam_width <= 1.0) { if (this->m_imgPixH < 32.0) { this->m_imgPixH = 32.0; this->m_imgPixW = this->m_imgPixH * glc->setup->cam_width; } if (this->m_imgPixH > 32768.0){ this->m_imgPixH = 32768.0; this->m_imgPixW = this->m_imgPixH * glc->setup->cam_width; } } else { if (this->m_imgPixW < 32.0) { this->m_imgPixW = 32.0; this->m_imgPixH = this->m_imgPixW / glc->setup->cam_width; } if (this->m_imgPixW > 32768.0){ this->m_imgPixW = 32768.0; this->m_imgPixH = this->m_imgPixW / glc->setup->cam_width; } } switch (this->m_scaleMode) { case LXRENDER_FIT_SCALE: this->m_imgHeight = this->m_imgPixH / this->m_imgResolution * 25.4; this->m_imgWidth = this->m_imgPixW / this->m_imgResolution * 25.4; break; case LXRENDER_FIT_WIDTH: this->m_imgHeight = this->m_imgPixH / this->m_imgResolution * 25.4; this->m_scale = 2.0 * glc->setup->cam_dist * glc->setup->cam_lens_vfovr / this->m_imgPixH / 0.0254 * this->m_imgResolution; break; case LXRENDER_FIT_HEIGHT: this->m_imgWidth = this->m_imgPixW / this->m_imgResolution * 25.4; this->m_scale = 2.0 * glc->setup->cam_dist * glc->setup->cam_lens_vfovr / this->m_imgPixH / 0.0254 * this->m_imgResolution; break; } } enum { LXRDC_START = 6000, LXRDC_FIT_SCREEN, LXRDC_FIT_WIDTH, LXRDC_FIT_HEIGHT, LXRDC_FIT_SCALE, LXRDC_WIDTH, LXRDC_HEIGHT, LXRDC_SCALE, LXRDC_RESOL, LXRDC_RESOL_LBL, LXRDC_IMGSIZE, LXRDC_IMGSIZE_LBL, LXRDC_WHITEBG, LXRDC_END, }; class lxRenderDataConfig : public wxDialog { public: lxRenderDataConfig(wxWindow * parent, lxRenderData * data, lxGLCanvas * glc); lxRenderData * m_data; lxCRC32 m_dataCRC; lxGLCanvas * m_glc; void OnUpdateUI(wxUpdateUIEvent & event); void OnKey(wxKeyEvent & event); DECLARE_EVENT_TABLE() }; BEGIN_EVENT_TABLE(lxRenderDataConfig, wxDialog) EVT_UPDATE_UI_RANGE(LXRDC_START, LXRDC_END, lxRenderDataConfig::OnUpdateUI) END_EVENT_TABLE() void lxRenderDataConfig::OnUpdateUI(wxUpdateUIEvent & WXUNUSED(event)) { lxFTextCtrl(LXRDC_WIDTH)->Enable(lxFRadioBtn(LXRDC_FIT_WIDTH)->GetValue()); lxFTextCtrl(LXRDC_HEIGHT)->Enable(lxFRadioBtn(LXRDC_FIT_HEIGHT)->GetValue()); lxFTextCtrl(LXRDC_SCALE)->Enable(lxFRadioBtn(LXRDC_FIT_SCALE)->GetValue()); lxFTextCtrl(LXRDC_RESOL)->Enable(!lxFRadioBtn(LXRDC_FIT_SCREEN)->GetValue()); lxFStaticText(LXRDC_RESOL_LBL)->Enable(!lxFRadioBtn(LXRDC_FIT_SCREEN)->GetValue()); lxFCheckBox(LXRDC_WHITEBG)->Enable(!lxFRadioBtn(LXRDC_FIT_SCREEN)->GetValue()); lxRenderData rd; lxFTextCtrl(LXRDC_WIDTH)->GetValue().ToDouble(&rd.m_imgWidth); lxFTextCtrl(LXRDC_HEIGHT)->GetValue().ToDouble(&rd.m_imgHeight); lxFTextCtrl(LXRDC_SCALE)->GetValue().ToDouble(&rd.m_scale); lxFTextCtrl(LXRDC_RESOL)->GetValue().ToDouble(&rd.m_imgResolution); if (lxFRadioBtn(LXRDC_FIT_SCALE)->GetValue()) rd.m_scaleMode = LXRENDER_FIT_SCALE; if (lxFRadioBtn(LXRDC_FIT_SCREEN)->GetValue()) rd.m_scaleMode = LXRENDER_FIT_SCREEN; if (lxFRadioBtn(LXRDC_FIT_WIDTH)->GetValue()) rd.m_scaleMode = LXRENDER_FIT_WIDTH; if (lxFRadioBtn(LXRDC_FIT_HEIGHT)->GetValue()) rd.m_scaleMode = LXRENDER_FIT_HEIGHT; #define lxRenderDataConfig_check \ this->m_dataCRC.Initialize(); \ this->m_dataCRC.AddInteger(rd.m_scaleMode); \ this->m_dataCRC.AddString(lxFTextCtrl(LXRDC_WIDTH)->GetValue()); \ this->m_dataCRC.AddString(lxFTextCtrl(LXRDC_HEIGHT)->GetValue()); \ this->m_dataCRC.AddString(lxFTextCtrl(LXRDC_SCALE)->GetValue()); \ this->m_dataCRC.AddString(lxFTextCtrl(LXRDC_RESOL)->GetValue()); lxRenderDataConfig_check rd.CalcImageDimensions(this->m_glc); if (this->m_dataCRC.Changed()) { double imgsize = 0.000003 * rd.m_imgPixH * rd.m_imgPixW; if (imgsize < 100.0) lxFStaticText(LXRDC_IMGSIZE)->SetLabel(wxString::Format(_T("%.0f x %.0f (%.1f MB)"), rd.m_imgPixW, rd.m_imgPixH, imgsize)); else lxFStaticText(LXRDC_IMGSIZE)->SetLabel(wxString::Format(_T("%.0f x %.0f (%.1f GB)"), rd.m_imgPixW, rd.m_imgPixH, 0.001 * imgsize)); if (rd.m_scaleMode != LXRENDER_FIT_SCREEN) { if (rd.m_scaleMode != LXRENDER_FIT_WIDTH) { lxFTextCtrl(LXRDC_WIDTH)->SetValue(wxString::Format(_T("%.0f"), rd.m_imgWidth)); } if (rd.m_scaleMode != LXRENDER_FIT_HEIGHT) { lxFTextCtrl(LXRDC_HEIGHT)->SetValue(wxString::Format(_T("%.0f"), rd.m_imgHeight)); } if (rd.m_scaleMode != LXRENDER_FIT_SCALE) { lxFTextCtrl(LXRDC_SCALE)->SetValue(wxString::Format(_T("%.0f"), rd.m_scale)); } } lxRenderDataConfig_check this->m_dataCRC.Changed(); } } lxRenderDataConfig::lxRenderDataConfig(wxWindow * parent, lxRenderData * data, class lxGLCanvas * glc) : wxDialog(parent, wxID_ANY, wxString(_("Rendering setup"))) { m_data = data; m_glc = glc; // TODO: dat to lxWX wxBoxSizer * sizerAll = new wxBoxSizer(wxVERTICAL); lxStaticBoxSizer = new wxStaticBoxSizer( new wxStaticBox(this, wxID_ANY, _("Size and scaling")), wxVERTICAL); lxStaticBoxSizer->Add( new wxRadioButton(this, LXRDC_FIT_SCREEN, _("Screen shot"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP, lxRadioBtnValidator(&this->m_data->m_scaleMode, LXRENDER_FIT_SCREEN)), 0, wxALIGN_LEFT | wxALL, lxBORDER); lxFlexGridSizer = new wxFlexGridSizer(3); lxFlexGridSizer->Add( new wxRadioButton(this, LXRDC_FIT_WIDTH, _("Image width"), wxDefaultPosition, wxDefaultSize, 0, lxRadioBtnValidator(&this->m_data->m_scaleMode, LXRENDER_FIT_WIDTH)), 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | lxNOTTOP, lxBORDER); lxFlexGridSizer->Add( new wxStaticText(this, wxID_ANY, _("(mm)")), 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxBOTTOM | wxRIGHT | wxALIGN_RIGHT, lxBORDER); lxFlexGridSizer->Add( new wxTextCtrl(this, LXRDC_WIDTH, _T(""), wxDefaultPosition, wxDefaultSize, wxTE_RIGHT, lxDoubleValidator(&this->m_data->m_imgWidth,0.005,5000.0)), 0, wxALIGN_CENTER | wxBOTTOM | wxRIGHT, lxBORDER); lxSETWWIDTH(LXRDC_WIDTH, 2); lxFlexGridSizer->Add( new wxRadioButton(this, LXRDC_FIT_HEIGHT, _("Image height"), wxDefaultPosition, wxDefaultSize, 0, lxRadioBtnValidator(&this->m_data->m_scaleMode, LXRENDER_FIT_HEIGHT)), 0, wxALIGN_LEFT | lxNOTTOP | wxALIGN_CENTER_VERTICAL, lxBORDER); lxFlexGridSizer->Add( new wxStaticText(this, wxID_ANY, _("(mm)")), 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxBOTTOM | wxRIGHT | wxALIGN_RIGHT, lxBORDER); lxFlexGridSizer->Add( new wxTextCtrl(this, LXRDC_HEIGHT, _T(""), wxDefaultPosition, wxDefaultSize, wxTE_RIGHT, lxDoubleValidator(&this->m_data->m_imgHeight,0.005,5000.0)), 0, wxALIGN_CENTER | wxBOTTOM | wxRIGHT, lxBORDER); lxSETWWIDTH(LXRDC_HEIGHT, 2); lxFlexGridSizer->Add( new wxRadioButton(this, LXRDC_FIT_SCALE, _("Scale"), wxDefaultPosition, wxDefaultSize, 0, lxRadioBtnValidator(&this->m_data->m_scaleMode, LXRENDER_FIT_SCALE)), 0, wxALIGN_LEFT | lxNOTTOP | wxALIGN_CENTER_VERTICAL, lxBORDER); lxFlexGridSizer->Add( new wxStaticText(this, wxID_ANY, _("1 :")), 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxBOTTOM | wxRIGHT | wxALIGN_RIGHT, lxBORDER); lxFlexGridSizer->Add( new wxTextCtrl(this, LXRDC_SCALE, _T(""), wxDefaultPosition, wxDefaultSize, wxTE_RIGHT, lxDoubleValidator(&this->m_data->m_scale,1,1e10)), 0, wxALIGN_CENTER | wxBOTTOM | wxRIGHT, lxBORDER); lxSETWWIDTH(LXRDC_SCALE, 2); lxStaticBoxSizer->Add(lxFlexGridSizer, 0, wxEXPAND); sizerAll->Add(lxStaticBoxSizer, 0, wxEXPAND | wxALL, lxBORDER); lxStaticBoxSizer = new wxStaticBoxSizer( new wxStaticBox(this, wxID_ANY, _("Image options")), wxVERTICAL); lxBoxSizer = new wxBoxSizer(wxHORIZONTAL); lxBoxSizer->Add( new wxStaticText(this, LXRDC_RESOL_LBL, _("Rendering resolution (dpi)")), 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL | wxALIGN_RIGHT, lxBORDER); lxBoxSizer->Add( new wxTextCtrl(this, LXRDC_RESOL, _T(""), wxDefaultPosition, wxDefaultSize, wxTE_RIGHT, lxDoubleValidator(&this->m_data->m_imgResolution,96,2400)), 0, wxALIGN_CENTER | lxNOTLEFT, lxBORDER); lxSETWWIDTH(LXRDC_RESOL, 2); lxStaticBoxSizer->Add(lxBoxSizer, 0, wxEXPAND); lxBoxSizer = new wxBoxSizer(wxHORIZONTAL); lxBoxSizer->Add( new wxStaticText(this, LXRDC_IMGSIZE_LBL, _("Image size:")), 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | lxNOTTOP | wxALIGN_RIGHT, lxBORDER); lxBoxSizer->Add( new wxStaticText(this, LXRDC_IMGSIZE, _("00 x 00 (00.0 MB)")), 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxBOTTOM | wxRIGHT | wxALIGN_LEFT, lxBORDER); lxStaticBoxSizer->Add(lxBoxSizer, 0, wxEXPAND); lxStaticBoxSizer->Add( new wxCheckBox(this, LXRDC_WHITEBG, _("White background"), wxDefaultPosition, wxDefaultSize, 0, wxGenericValidator(&this->m_data->m_imgWhiteBg)), 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | lxNOTTOP | wxALIGN_LEFT, lxBORDER); sizerAll->Add(lxStaticBoxSizer, 0, wxEXPAND | lxNOTTOP, lxBORDER); // Bottom line lxBoxSizer = new wxBoxSizer(wxHORIZONTAL); lxBoxSizer->Add(new wxButton(this, wxID_OK, _("OK")), 0, wxALIGN_CENTER | wxLEFT | wxRIGHT | wxBOTTOM, lxBORDER); lxBoxSizer->Add(new wxButton(this, wxID_CANCEL, _("Cancel")), 0, wxALIGN_CENTER | wxRIGHT | wxBOTTOM, lxBORDER); sizerAll->Add(lxBoxSizer, 0, wxALIGN_RIGHT); SetSizer(sizerAll); sizerAll->SetSizeHints(this); sizerAll->Fit(this); this->CentreOnParent(); } void lxRenderData::Configure(wxWindow * parent, class lxGLCanvas * glc) { lxRenderDataConfig cdlg(parent, this, glc); cdlg.ShowModal(); } class lxRenderFile { public: bool m_started, m_continue, m_progress; lxGLCanvas * m_glc; lxRenderData * m_pData; FILE * m_file, * m_fileTMP; GLint m_imgWidth, m_imgHeight, m_tWidth, m_tHeight; GLubyte * m_imgBuffRow; GLubyte * m_imgBuffLine; int m_imgBuffLineSize; int m_cTile; wxWindow * m_parent; png_structp png_ptr; png_infop png_info_ptr; void Render(); void RenderBMPHeader(); void RenderPNGHeader(); void RenderPNGFooter(); void RenderPDFHeader(); void RenderPDFFooter(); void ErrorExit(const wxString & err); lxRenderFile(wxWindow * p, lxRenderData * pdata, lxGLCanvas * glc); ~lxRenderFile(); }; lxRenderFile::lxRenderFile(wxWindow * p, lxRenderData * pdata, lxGLCanvas * glc) { m_parent = p; m_pData = pdata; m_glc = glc; m_started = false; m_file = NULL; m_continue = false; m_progress = false; m_imgBuffLine = NULL; m_imgBuffRow = NULL; } lxRenderFile::~lxRenderFile() { if (m_file != NULL) fclose(m_file); if (this->m_imgBuffLine != NULL) delete [] this->m_imgBuffLine; if (this->m_imgBuffRow != NULL) delete [] this->m_imgBuffRow; this->m_glc->TRCDestroy(); this->m_glc->m_renderData = NULL; this->m_glc->ForceRefresh(); } void lxRenderFile::Render() { m_file = NULL; // najprv zrata rozmery oprazka double tmp_w, tmp_h; // zratame rozmery oprazka //if (m_pData->m_scaleMode == LXRENDER_FIT_SCALE) { // tmp_w = (m_pData->m_imgWidth / 25.4 * m_pData->m_imgResolution); // tmp_h = (m_pData->m_imgHeight / 25.4 * m_pData->m_imgResolution); //} else { // tmp_h = 2.0 * m_glc->setup->cam_dist * lxVFOVR / m_pData->m_scale / 0.0254 * m_pData->m_imgResolution; // tmp_w = m_glc->setup->cam_width * tmp_h; //} this->m_pData->CalcImageDimensions(m_glc); tmp_h = this->m_pData->m_imgPixH; tmp_w = this->m_pData->m_imgPixW; m_imgWidth = (GLint) tmp_w; m_imgHeight = (GLint) tmp_h; m_tWidth = m_glc->ww; m_tHeight = m_glc->wh; if (this->m_pData->m_scaleMode != LXRENDER_FIT_SCREEN) { if (m_tHeight * m_imgWidth > 5000000) m_tHeight = 5000000 / m_imgWidth; m_tHeight = m_tHeight - (m_tHeight % 8); m_tWidth = m_tWidth - (m_tHeight % 8); } else { m_tHeight = m_tHeight + 8 - (m_tHeight % 8); m_tWidth = m_tWidth + 8 - (m_tHeight % 8); } wxString cdir, cnm; wxFileName::SplitPath(m_pData->m_imgFileName, &cdir, &cnm, NULL); if (cdir.Length() == 0) cdir = this->m_glc->frame->m_fileDir; if (m_pData->m_askFName) { wxFileDialog fileDlg(this->m_parent, _("Save rendering as"), cdir, cnm, #ifdef lxPPMFORMAT _("PPM files (*.ppm)|*.ppm"), #else _("PDF files (*.pdf)|*.pdf|PNG files (*.png)|*.png|BMP files (*.bmp)|*.bmp"), #endif wxFD_SAVE | wxFD_OVERWRITE_PROMPT); fileDlg.CentreOnParent(); fileDlg.SetFilterIndex(m_pData->m_imgFileType); if (fileDlg.ShowModal() == wxID_OK) { m_pData->m_imgFileName = fileDlg.GetPath(); m_pData->m_imgFileType = fileDlg.GetFilterIndex(); } else return; } // otvorime subor m_file = fopen(m_pData->m_imgFileName.mb_str(), "w+b"); if (m_file == NULL) { ErrorExit(_("Unable to open file for output.")); return; } // start rendering m_glc->m_renderData = m_pData; // allocate rendering buffers this->m_glc->TRCInit(LXGLCTR_TILE, this->m_imgWidth, this->m_imgHeight, this->m_tWidth, this->m_tHeight); this->m_imgBuffLineSize = 3 * this->m_imgWidth; switch (m_pData->m_imgFileType) { case 0: RenderPDFHeader(); trRowOrder(this->m_glc->m_TRC->m_ctx, TR_TOP_TO_BOTTOM); break; case 1: RenderPNGHeader(); trRowOrder(this->m_glc->m_TRC->m_ctx, TR_TOP_TO_BOTTOM); break; default: RenderBMPHeader(); trRowOrder(this->m_glc->m_TRC->m_ctx, TR_BOTTOM_TO_TOP); break; } this->m_tWidth = this->m_glc->TRCGet(TR_TILE_WIDTH); this->m_tHeight = this->m_glc->TRCGet(TR_TILE_HEIGHT); this->m_imgBuffLine = new GLubyte [m_imgBuffLineSize]; this->m_imgBuffRow = new GLubyte [3 * this->m_imgWidth * this->m_tHeight]; double tmpcw = m_glc->setup->cam_width; m_glc->setup->cam_width = double(m_imgWidth) / double(m_imgHeight); m_cTile = 0; long max = ((this->m_imgWidth + this->m_tWidth - 2 * lxRENDERBORDER - 1) / (this->m_tWidth - 2 * lxRENDERBORDER)) * ((this->m_imgHeight + this->m_tHeight - 2 * lxRENDERBORDER - 1) / (this->m_tHeight - 2 * lxRENDERBORDER)); m_continue = true; wxString renmsg = wxString::Format(_("Rendering (%d x %d, %.1f MB) ..."), m_imgWidth, m_imgHeight, double(m_imgWidth) * double(m_imgHeight) * 3 / 1048576.0); wxProgressDialog * dialog = NULL; if (this->m_pData->m_askFName) { dialog = new wxProgressDialog(_("Rendering to bitmap"), renmsg, max, // range m_parent, // parent wxPD_CAN_ABORT | wxPD_APP_MODAL | wxPD_AUTO_HIDE | wxPD_ELAPSED_TIME | wxPD_ESTIMATED_TIME | wxPD_REMAINING_TIME); } int curColumn; this->m_glc->SetFontColors(); this->m_glc->m_fntTitleO->setPointSize(14.0 * this->m_pData->m_imgResolution / 96.0); this->m_glc->m_fntNumericO->setPointSize(8.0 * this->m_pData->m_imgResolution / 96.0); while (m_continue) { if (this->m_pData->m_scaleMode == LXRENDER_FIT_SCREEN) { this->m_glc->TRCBeginTile(); this->m_glc->m_sInit = true; this->m_glc->m_isO = false; this->m_glc->RenderScreen(); this->m_glc->m_isO = true; this->m_glc->m_sInit = true; } else { if (this->m_cTile == 0) { this->m_glc->UpdateRenderContents(); if (this->m_glc->m_oList == 0) this->m_glc->m_oList = glGenLists(1); glNewList(this->m_glc->m_oList, GL_COMPILE); this->m_glc->RenderAll(); glEndList(); } if (this->m_glc->setup->cam_anaglyph) { this->m_glc->setup->cam_anaglyph_left = false; this->m_glc->SetCamera(); this->m_glc->TRCBeginTile(); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); if (this->m_glc->m_renderData->m_imgWhiteBg) glClearColor(1.0, 1.0, 1.0, 1.0); else glClearColor(0.0, 0.0, 0.0, 1.0); glClear(GL_COLOR_BUFFER_BIT); this->m_glc->SetColorMask(); #ifdef LXLINUX this->m_glc->RenderAll(); #else glCallList(this->m_glc->m_oList); #endif this->m_glc->setup->cam_anaglyph_left = true; this->m_glc->SetCamera(); this->m_glc->TRCBeginTile(); this->m_glc->SetColorMask(); #ifdef LXLINUX this->m_glc->RenderAll(); #else glCallList(this->m_glc->m_oList); #endif glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); } else { m_glc->SetCamera(); this->m_glc->TRCBeginTile(); #ifdef LXLINUX this->m_glc->RenderAll(); #else glCallList(this->m_glc->m_oList); #endif } // render indicators if (this->m_glc->setup->m_vis_indicators) this->m_glc->RenderInds(); } curColumn = this->m_glc->TRCGet(TR_CURRENT_COLUMN); m_continue = this->m_glc->TRCEndTile(); this->m_cTile++; m_continue = m_continue && ((dialog == NULL) || dialog->Update(this->m_cTile, renmsg)); // save tile do rowbuffera { int curTileWidth = this->m_glc->TRCGet(TR_CURRENT_TILE_WIDTH); int bytesPerImageRow = m_imgWidth * 3 * sizeof(GLubyte); int bytesPerTileRow = (m_tWidth - 2 * lxRENDERBORDER) * 3 * sizeof(GLubyte); int xOffset = curColumn * bytesPerTileRow; int bytesPerCurrentTileRow = (curTileWidth - 2 * lxRENDERBORDER) * 3 * sizeof(GLubyte); int i; int curTileHeight = this->m_glc->TRCGet(TR_CURRENT_TILE_HEIGHT); for (i = 0; i < curTileHeight; i++) { memcpy(m_imgBuffRow + i * bytesPerImageRow + xOffset, // Dest this->m_glc->TRCGetBuffer() + i * bytesPerTileRow, // Src bytesPerCurrentTileRow); // Byte count } } if (curColumn == (this->m_glc->TRCGet(TR_COLUMNS)-1)) { // write this buffered row of tiles to the file int curTileHeight = this->m_glc->TRCGet(TR_CURRENT_TILE_HEIGHT); int bytesPerImageRow = m_imgWidth * 3 * sizeof(GLubyte); int i; GLubyte * rowPtr; // The arithmetic is a bit tricky here because of borders and // the up/down flip. Thanks to Marcel Lancelle for fixing it. #ifdef lxPPMFORMAT for (i = 2 * lxRENDERBORDER; i < curTileHeight; i++) { rowPtr = m_imgBuffRow + (curTileHeight-1-i) * bytesPerImageRow; // (curTileHeight-1-i) fwrite(rowPtr, 1, 3 * m_imgWidth, m_file); } #else GLubyte * sPtr, * dPtr; int j; switch (this->m_pData->m_imgFileType) { // case 0: // for (i = (curTileHeight - 2 * lxRENDERBORDER); i > 0 ; i--) { // rowPtr = m_imgBuffRow + (i-1) * bytesPerImageRow; // fwrite(rowPtr, 1, m_imgBuffLineSize, m_file); // } // break; case 0: case 1: for (i = (curTileHeight - 2 * lxRENDERBORDER); i > 0 ; i--) { rowPtr = m_imgBuffRow + (i-1) * bytesPerImageRow; png_write_row(this->png_ptr, rowPtr); } break; default: for (i = 0; i < (curTileHeight - 2 * lxRENDERBORDER); i++) { rowPtr = m_imgBuffRow + i * bytesPerImageRow; for (j = 0, dPtr = m_imgBuffLine, sPtr = rowPtr; j < m_imgWidth; j++, dPtr += 3, sPtr += 3) { dPtr[2] = sPtr[0]; dPtr[1] = sPtr[1]; dPtr[0] = sPtr[2]; } fwrite(m_imgBuffLine, 1, m_imgBuffLineSize, m_file); } break; } #endif } } m_glc->setup->cam_width = tmpcw; //pngtst; if (dialog != NULL) { delete dialog; } switch (this->m_pData->m_imgFileType) { case 0: this->RenderPDFFooter(); break; case 1: this->RenderPNGFooter(); break; } delete [] this->m_imgBuffLine; delete [] this->m_imgBuffRow; this->m_imgBuffLine = NULL; this->m_imgBuffRow = NULL; } void lxRenderFile::ErrorExit(const wxString & err) { wxMessageBox(err, _("Error"), wxICON_ERROR | wxOK, m_parent); } void lxRenderFile::RenderBMPHeader() { #ifdef lxPPMFORMAT fprintf(this->m_file,"P6\n"); fprintf(this->m_file,"# ppm-file created by loch\n"); fprintf(this->m_file,"%d %d\n", this->m_imgWidth, this->m_imgHeight); fprintf(this->m_file,"255\n"); #else wxUint16 bpp = 24; // # of bits per pixel int palette_size = 0; // # of color map entries, ie. 2^bpp colors unsigned width = this->m_imgWidth; unsigned row_padding = (4 - int(width*bpp/8.0) % 4) % 4; // # bytes to pad to dword unsigned row_width = int(width * bpp/8.0) + row_padding; // # of bytes per row this->m_imgBuffLineSize = row_width; struct { // BitmapHeader: wxUint16 magic; // format magic, always 'BM' wxUint32 filesize; // total file size, inc. headers wxUint32 reserved; // for future use wxUint32 data_offset; // image data offset in the file // BitmapInfoHeader: wxUint32 bih_size; // 2nd part's size wxUint32 width, height; // bitmap's dimensions wxUint16 planes; // num of planes wxUint16 bpp; // bits per pixel wxUint32 compression; // compression method wxUint32 size_of_bmp; // size of the bitmap wxUint32 h_res, v_res; // image resolution in dpi wxUint32 num_clrs; // number of colors used wxUint32 num_signif_clrs;// number of significant colors } hdr; double imgRes; if (this->m_pData->m_scaleMode == LXRENDER_FIT_SCREEN) imgRes = 96.0; else imgRes = this->m_pData->m_imgResolution; wxUint32 hdr_size = 14/*BitmapHeader*/ + 40/*BitmapInfoHeader*/; hdr.magic = wxUINT16_SWAP_ON_BE(0x4D42/*'BM'*/); hdr.filesize = wxUINT32_SWAP_ON_BE(hdr_size + palette_size * 4 + row_width * this->m_imgHeight); hdr.reserved = 0; hdr.data_offset = wxUINT32_SWAP_ON_BE(hdr_size + palette_size * 4); hdr.bih_size = wxUINT32_SWAP_ON_BE(hdr_size - 14); hdr.width = wxUINT32_SWAP_ON_BE(this->m_imgWidth); hdr.height = wxUINT32_SWAP_ON_BE(this->m_imgHeight); hdr.planes = wxUINT16_SWAP_ON_BE(1); // always 1 plane hdr.bpp = wxUINT16_SWAP_ON_BE(bpp); hdr.compression = 0; // RGB uncompressed hdr.size_of_bmp = wxUINT32_SWAP_ON_BE(row_width * this->m_imgHeight); hdr.h_res = hdr.v_res = wxUINT32_SWAP_ON_BE((wxUint32) (imgRes * 100.0 / 2.54 + 0.5)); // 72dpi is standard hdr.num_clrs = wxUINT32_SWAP_ON_BE(palette_size); // # colors in colormap hdr.num_signif_clrs = 0; // all colors are significant #ifdef bmpWrite #undef bmpWrite #endif #define bmpWrite(srcp, srcs) fwrite(srcp, 1, srcs, this->m_file) bmpWrite(&hdr.magic, 2); bmpWrite(&hdr.filesize, 4); bmpWrite(&hdr.reserved, 4); bmpWrite(&hdr.data_offset, 4); bmpWrite(&hdr.bih_size, 4); bmpWrite(&hdr.width, 4); bmpWrite(&hdr.height, 4); bmpWrite(&hdr.planes, 2); bmpWrite(&hdr.bpp, 2); bmpWrite(&hdr.compression, 4); bmpWrite(&hdr.size_of_bmp, 4); bmpWrite(&hdr.h_res, 4); bmpWrite(&hdr.v_res, 4); bmpWrite(&hdr.num_clrs, 4); bmpWrite(&hdr.num_signif_clrs, 4); #endif } void lxRenderData::Render(wxWindow * parent, lxGLCanvas * glc) { lxRenderFile pf(parent, this, glc); char * prevlocale = setlocale(LC_NUMERIC,NULL); setlocale(LC_NUMERIC,"C"); glc->m_isO = true; pf.Render(); glc->m_isO = false; setlocale(LC_NUMERIC,prevlocale); } void lxRenderFile::RenderPNGHeader() { double imgRes; if (this->m_pData->m_scaleMode == LXRENDER_FIT_SCREEN) imgRes = 96.0; else imgRes = this->m_pData->m_imgResolution; /* initialize stuff */ png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); if (!png_ptr) pngerr("[write_png_file] png_create_write_struct failed"); png_info_ptr = png_create_info_struct(png_ptr); if (!png_info_ptr) pngerr("[write_png_file] png_create_info_struct failed"); if (setjmp(png_jmpbuf(png_ptr))) pngerr("[write_png_file] Error during init_io"); png_init_io(png_ptr, this->m_file); /* write header */ if (setjmp(png_jmpbuf(png_ptr))) pngerr("[write_png_file] Error during writing header"); png_set_IHDR(png_ptr, png_info_ptr, /*256, 256,*/ this->m_imgWidth, this->m_imgHeight, 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); png_set_pHYs(png_ptr, png_info_ptr, (png_uint_32) (imgRes * 39.3700787401574 + 0.5), (png_uint_32) (imgRes * 39.3700787401574 + 0.5), PNG_RESOLUTION_METER); png_write_info(png_ptr, png_info_ptr); /* write bytes */ if (setjmp(png_jmpbuf(png_ptr))) pngerr("[write_png_file] Error during writing bytes"); } void lxRenderFile::RenderPNGFooter() { /* end write */ if (setjmp(png_jmpbuf(png_ptr))) pngerr("[write_png_file] Error during end of write"); png_write_end(png_ptr, NULL); png_destroy_write_struct(&this->png_ptr, &this->png_info_ptr); } size_t pdf_obj[10], pdf_png_start_length, pdf_png_start; void lxRenderFile::RenderPDFHeader() { double imgRes; if (this->m_pData->m_scaleMode == LXRENDER_FIT_SCREEN) imgRes = 96.0; else imgRes = this->m_pData->m_imgResolution; double imw, imh; imw = 72.0 * this->m_imgWidth / imgRes; imh = 72.0 * this->m_imgHeight / imgRes; char tmp_buff[256]; fprintf(this->m_file,"%%PDF-1.4\n"); pdf_obj[4] = ftell(this->m_file); sprintf(tmp_buff, "q\n%.4f 0 0 %.4f 0 0 cm\n/Im1 Do\nQ\n", imw, imh); fprintf(this->m_file,"4 0 obj <<\n/Length %u\n>>\nstream\n%sendstream\nendobj\n", (unsigned)strlen(tmp_buff), tmp_buff); pdf_obj[3] = ftell(this->m_file); fprintf(this->m_file,"3 0 obj <<\n/Type /Page\n/Contents 4 0 R\n/Resources 2 0 R\n/MediaBox [0 0 %.4f %.4f]\n/Parent 5 0 R\n>> endobj\n", imw, imh); pdf_obj[1] = ftell(this->m_file); fprintf(this->m_file,"1 0 obj <<\n/Type /XObject\n/Subtype /Image\n/Width %u\n" "/Height %u\n/BitsPerComponent 8\n/ColorSpace /DeviceRGB\n", this->m_imgWidth, this->m_imgHeight); pdf_png_start_length = ftell(this->m_file); fprintf(this->m_file,"/Length 00000000000000\n/Filter /FlateDecode\n/DecodeParms << /Colors 3 /Columns %u /BitsPerComponent 8 /Predictor 10 >>\n>>\nstream\n", this->m_imgWidth); /* initialize stuff */ png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); if (!png_ptr) pngerr("[write_png_file] png_create_write_struct failed"); png_info_ptr = png_create_info_struct(png_ptr); if (!png_info_ptr) pngerr("[write_png_file] png_create_info_struct failed"); if (setjmp(png_jmpbuf(png_ptr))) pngerr("[write_png_file] Error during init_io"); this->m_fileTMP = tmpfile(); png_init_io(png_ptr, this->m_fileTMP); /* write header */ if (setjmp(png_jmpbuf(png_ptr))) pngerr("[write_png_file] Error during writing header"); png_set_IHDR(png_ptr, png_info_ptr, /*256, 256,*/ this->m_imgWidth, this->m_imgHeight, 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); png_write_info(png_ptr, png_info_ptr); pdf_png_start = ftell(this->m_fileTMP); } void lxRenderFile::RenderPDFFooter() { size_t src_pos, dst_pos, png_len, png_pos, png_hdr, png_add, buff_read, buff_rest; unsigned char lenbuff[8]; png_write_end(png_ptr, NULL); fseek(this->m_fileTMP, pdf_png_start, SEEK_SET); png_len = 0; bool contpng = true; do { fread(lenbuff, 1, 8, this->m_fileTMP); png_add = (size_t) lenbuff[3] + 256 * (size_t) lenbuff[2] + 256 * 256 * (size_t) lenbuff[1] + 256 * 256 * 256 * (size_t) lenbuff[0]; png_hdr = (size_t) lenbuff[7] + 256 * (size_t) lenbuff[6] + 256 * 256 * (size_t) lenbuff[5] + 256 * 256 * 256 * (size_t) lenbuff[4]; if (png_hdr == 0x49444154) { png_len += png_add; if (fseek(this->m_fileTMP, png_add + 4, SEEK_CUR) != 0) contpng = false; } else { contpng = false; } } while (contpng); fseek(this->m_file, pdf_png_start_length, SEEK_SET); fprintf(this->m_file,"/Length %u\n/Filter /FlateDecode\n/DecodeParms << /Colors 3 /Columns %u /BitsPerComponent 8 /Predictor 10 >>\n>>\nstream\n", (unsigned) png_len, this->m_imgWidth); #define buffsize 256000 unsigned char * buff = new unsigned char [buffsize]; contpng = true; dst_pos = ftell(this->m_file); src_pos = pdf_png_start; do { fseek(this->m_fileTMP, src_pos, SEEK_SET); src_pos += 8; fread(lenbuff, 1, 8, this->m_fileTMP); png_add = (size_t) lenbuff[3] + 256 * (size_t) lenbuff[2] + 256 * 256 * (size_t) lenbuff[1] + 256 * 256 * 256 * (size_t) lenbuff[0]; png_hdr = (size_t) lenbuff[7] + 256 * (size_t) lenbuff[6] + 256 * 256 * (size_t) lenbuff[5] + 256 * 256 * 256 * (size_t) lenbuff[4]; if (png_hdr == 0x49444154) { for(png_pos = 0; png_pos < png_add; png_pos += buff_read) { if (fseek(this->m_fileTMP, src_pos, SEEK_SET) != 0) contpng = false; buff_rest = png_add - png_pos; if (buff_rest > buffsize) buff_rest = buffsize; buff_read = fread(buff, 1, buff_rest, this->m_fileTMP); //fseek(this->m_file, dst_pos, SEEK_SET); fwrite(buff, 1, buff_read, this->m_file); src_pos += buff_read; dst_pos += buff_read; } src_pos += 4; } else { contpng = false; } } while (contpng); delete [] buff; //fseek(this->m_file, dst_pos, SEEK_SET); fprintf(this->m_file,"\n"); fprintf(this->m_file,"endstream\nendobj\n"); pdf_obj[2] = ftell(this->m_file); fprintf(this->m_file,"2 0 obj <<\n/XObject << /Im1 1 0 R >>\n/ProcSet [ /PDF /ImageC ]\n>> endobj\n"); pdf_obj[5] = ftell(this->m_file); fprintf(this->m_file,"5 0 obj <<\n/Type /Pages\n/Count 1\n/Kids [3 0 R]\n>> endobj\n"); pdf_obj[6] = ftell(this->m_file); fprintf(this->m_file,"6 0 obj <<\n/Type /Catalog\n/Pages 5 0 R\n>> endobj\n"); pdf_obj[7] = ftell(this->m_file); fprintf(this->m_file,"7 0 obj <<\n/Producer (Loch)\n/Creator (Therion)\n>> endobj\n"); pdf_obj[9] = ftell(this->m_file); fprintf(this->m_file,"xref\n0 8\n%010u 65535 f\n%010u 00000 n\n%010u 00000 n\n%010u 00000 n\n%010u 00000 n\n%010u 00000 n\n%010u 00000 n\n%010u 00000 n\n", 0,(unsigned)pdf_obj[1],(unsigned)pdf_obj[2],(unsigned)pdf_obj[3],(unsigned)pdf_obj[4],(unsigned)pdf_obj[5],(unsigned)pdf_obj[6],(unsigned)pdf_obj[7]); fprintf(this->m_file,"trailer\n<< /Size 8\n /Root 6 0 R\n/Info 7 0 R >>\nstartxref\n%u\n%%%%EOF\n",(unsigned)pdf_obj[9]); png_destroy_write_struct(&this->png_ptr, &this->png_info_ptr); fclose(this->m_fileTMP); } therion/loch/lxRender.h0000644000076400010400000000135410763455544016166 0ustar userAdministrators/** * @file lxRender.h * Loch printing module. */ #ifndef lxRender_h #define lxRender_h // Standard libraries #ifndef LXDEPCHECK #include #endif //LXDEPCHECK - standart libraries enum { LXRENDER_FIT_SCREEN, LXRENDER_FIT_WIDTH, LXRENDER_FIT_HEIGHT, LXRENDER_FIT_SCALE, }; struct lxRenderData { long m_scaleMode; bool m_printRenderer, m_imgWhiteBg, m_askFName; wxString m_imgFileName; int m_imgFileType; double m_scale, m_imgResolution, m_imgWidth, m_imgHeight, m_imgPixW, m_imgPixH; lxRenderData(); void Configure(wxWindow * parent, class lxGLCanvas * glc); void Render(wxWindow * parent, class lxGLCanvas * glc); void CalcImageDimensions(class lxGLCanvas * glc); }; #endif therion/loch/lxSetup.cxx0000644000076400010400000002135111775251620016412 0ustar userAdministrators/** * @file lxSetup.cxx * Loch model setup. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ // Standard libraries #ifndef LXDEPCHECK #include #include #include #endif //LXDEPCHECK - standart libraries #include "lxSetup.h" #include "lxData.h" lxSetup::lxSetup(lxData * dat) { this->data = dat; this->UpdateData(); this->cam_dir = 0; this->cam_tilt = 90; this->cam_persp = true; this->SetLens(50.0); this->cam_anaglyph = false; this->cam_anaglyph_bw = true; this->cam_anaglyph_left = false; this->cam_anaglyph_eyesep = 0.02; this->cam_anaglyph_glasses = 0; this->m_vis_centerline = true; this->m_vis_walls = true; this->m_vis_surface = true; this->m_vis_labels = false; this->m_vis_bbox = true; this->m_vis_indicators = true; this->m_vis_grid = false; this->m_vis_centerline_cave = true; this->m_vis_centerline_surface = true; this->m_vis_centerline_splay = false; this->m_vis_centerline_duplicate = false; this->m_vis_centerline_entrance = false; this->m_vis_centerline_fix = false; this->m_vis_centerline_station = false; this->m_stlabel_altitude = false; this->m_stlabel_comment = false; this->m_stlabel_name = false; this->m_stlabel_survey = false; this->m_colormd = lxSETUP_COLORMD_ALTITUDE; this->m_colormd_app_centerline = true; this->m_colormd_app_walls = true; this->m_srf_transparency = true; this->m_srf_texture = true; this->m_srf_opacity = 0.5; this->m_srf_lighting = false; this->m_walls_transparency = false; this->m_walls_opacity = 0.5; } void lxSetup::SetLens(double lens) { this->cam_lens = lens; if (this->cam_lens < 20.0) this->cam_lens = 20.0; if (this->cam_lens > 2000.0) this->cam_lens = 2000.0; this->cam_lens_vfov = atan(12.0 / this->cam_lens) / lxPI * 360.0; this->cam_lens_vfovr = 12.0 / this->cam_lens; } void lxSetup::UpdateData() { // udate data limits lxVecLimits tmp, tmpZ; tmp.valid = false; this->data_limits.valid = false; unsigned long id, nid; double * bnds; nid = this->data->shots.size(); lxDataShot * shp; for(id = 0; id < nid; id++) { shp = &(this->data->shots[id]); if (this->m_vis_centerline && (((!shp->surface) && this->m_vis_centerline_cave) || (shp->surface && this->m_vis_centerline_surface))) { this->data_limits.Add(this->data->stations[shp->from].pos); this->data_limits.Add(this->data->stations[shp->to].pos); if (!shp->surface) { tmpZ.Add(this->data->stations[shp->from].pos); tmpZ.Add(this->data->stations[shp->to].pos); } } } nid = this->data->stations.size(); for(id = 0; id < nid; id++) { tmp.Add(this->data->stations[id].pos); } vtkPolyData * w; w = this->data->allWalls->GetOutput(); if ((w != NULL) && (w->GetNumberOfPoints() > 0)) { bnds = w->GetBounds(); if (this->m_vis_walls) { this->data_limits.Add(bnds[0], bnds[2], bnds[4]); this->data_limits.Add(bnds[1], bnds[3], bnds[5]); tmpZ.Add(bnds[0], bnds[2], bnds[4]); tmpZ.Add(bnds[1], bnds[3], bnds[5]); } tmp.Add(bnds[0], bnds[2], bnds[4]); tmp.Add(bnds[1], bnds[3], bnds[5]); } if (tmpZ.valid) { this->data->luTable->SetTableRange(tmpZ.min.z, tmpZ.max.z); } else if (this->data_limits.valid) { this->data->luTable->SetTableRange(this->data_limits.min.z, this->data_limits.max.z); } if ((this->data->surface != NULL) && (this->data->surface->GetNumberOfPoints() > 0)) { bnds = this->data->surface->GetBounds(); if (this->m_vis_surface) { this->data_limits.Add(bnds[0], bnds[2], bnds[4]); this->data_limits.Add(bnds[1], bnds[3], bnds[5]); } tmp.Add(bnds[0], bnds[2], bnds[4]); tmp.Add(bnds[1], bnds[3], bnds[5]); } if (!this->data_limits.valid) { if (tmp.valid) this->data_limits = tmp; else { this->data_limits.Add(0.0, 0.0, 0.0); this->data_limits.Add(300.0, 200.0, 100.0); } this->data->luTable->SetTableRange(this->data_limits.min.z, this->data_limits.max.z); } this->data_limits_diam = (this->data_limits.max - this->data_limits.min).Length(); } void lxSetup::UpdatePos() { this->cam_pos = this->cam_center + \ lxPol2Vec(this->cam_dist, this->cam_dir + 180.0, this->cam_tilt); } void lxSetup::ResetCamera() { this->cam_center = (this->data_limits.min + this->data_limits.max) / 2.0; lxVecLimits target = this->data_limits.Rotate(this->cam_dir, this->cam_tilt, this->cam_center); double model_width; model_width = target.max.x / lxVecAbs(target.max).z; if (this->cam_width > model_width) { this->cam_dist = target.max.z / (this->cam_lens_vfovr * 0.99); } else { this->cam_dist = target.max.x / (this->cam_lens_vfovr * this->cam_width * 0.99); } if (this->cam_persp) { this->cam_dist += target.max.y; } this->UpdatePos(); //if (this->cam_persp) { // //} //printf("MAX: %8.2f %8.2f %8.2f\n", lxVecXYZ(this->data_limits.max)); //printf("MIN: %8.2f %8.2f %8.2f\n", lxVecXYZ(this->data_limits.min)); //printf("CENTER: %8.2f %8.2f %8.2f\n", lxVecXYZ(this->cam_center)); //printf("MLMAX: %8.2f %8.2f %8.2f\n", lxVecXYZ(target.max)); //printf("MLMIN: %8.2f %8.2f %8.2f\n", lxVecXYZ(target.min)); //printf("DIST: %8.2f\n", this->cam_dist); //printf("WIDTH: %8.2f\n", this->cam_width); } #define calc_cam_pos void lxSetup::StartCameraMovement() { this->cam_orig_center = this->cam_center; this->cam_orig_pos = this->cam_pos; this->cam_orig_dist = this->cam_dist; this->cam_orig_dir = this->cam_dir; this->cam_orig_tilt = this->cam_tilt; } void lxSetup::ZoomCamera(double zoom) { if (zoom > 0.0) this->cam_dist = this->cam_orig_dist / zoom; this->UpdatePos(); } void lxSetup::PanCamera(double panx, double pany) { this->cam_center = this->cam_orig_center + lxPol2Vec(panx * this->cam_dist * 2.0 * this->cam_lens_vfovr * this->cam_width, this->cam_dir + 270.0, 0); this->cam_center = this->cam_center + lxPol2Vec(pany * this->cam_dist * 2.0 * this->cam_lens_vfovr, this->cam_dir + (this->cam_tilt > 0.0 ? 0 : 180.0), (this->cam_tilt > 0 ? 90.0 - this->cam_tilt : 90 + this->cam_tilt)); this->UpdatePos(); } void lxSetup::TiltCamera(double tilt) { this->cam_tilt = this->cam_orig_tilt + tilt; if (this->cam_tilt > 90.0) this->cam_tilt = 90.0; if (this->cam_tilt < -90.0) this->cam_tilt = -90.0; this->UpdatePos(); } void lxSetup::RotateCamera(double rot) { this->cam_dir = this->cam_orig_dir + rot; if (this->cam_dir < 0.0) { this->cam_dir += 360.0 * ceil(fabs(this->cam_dir) / 360.0); } if (this->cam_dir >= 360.0) { this->cam_dir -= 360.0 * floor(this->cam_dir / 360.0); } this->UpdatePos(); } void lxSetup::RotateCameraF(double rot) { this->cam_orig_dir += rot; this->RotateCamera(0.0); } void lxSetup::SelectSurvey(const char * survey) { this->m_survey_selection.insert(std::string(survey)); } bool lxSetup::IsSurveySelected(const char * survey) { if (this->m_survey_selection.size() == 0) return true; std::set::iterator it = this->m_survey_selection.find(std::string(survey)); if (it != this->m_survey_selection.end()) return true; return false; } void lxSetup::ClearSurveySelection() { this->m_survey_selection.clear(); } wxXmlNode * lxSetup::SaveToXML(unsigned long items) { wxXmlNode * rv, * n, * nn; rv = new wxXmlNode(wxXML_ELEMENT_NODE, _T("Setup")); if (items & lxSETUP_CAMERA) { n = new wxXmlNode(wxXML_ELEMENT_NODE, _T("CameraTilt")); nn = new wxXmlNode(wxXML_TEXT_NODE, wxEmptyString, wxString::Format(_T("%.0f"), this->cam_tilt)); n->AddChild(nn); rv->AddChild(n); } return rv; } void lxSetup::LoadFromXML(wxXmlNode * n) { if (n->GetName() != _T("Setup")) return; wxXmlNode * nn; nn = n->GetChildren(); while (nn != NULL) { if (nn->GetName() == _T("CameraTilt")) { n = nn->GetChildren(); if (n->GetType() == wxXML_TEXT_NODE) this->cam_tilt = atof(n->GetContent().mbc_str()); } nn = nn->GetNext(); } } therion/loch/lxSetup.h0000644000076400010400000000443611763136446016051 0ustar userAdministrators/** * @file lxSetup.h * Loch model setup. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ */ #ifndef lxSetup_h #define lxSetup_h // Standard libraries #ifndef LXDEPCHECK #include #endif //LXDEPCHECK - standart libraries #include "lxData.h" #include "lxMath.h" #include enum { lxSETUP_COLORMD_DEFAULT, lxSETUP_COLORMD_ALTITUDE, }; enum { lxSETUP_CAMERA = 1, lxSETUP_SCENE = 2, lxSETUP_ALL = lxSETUP_CAMERA | lxSETUP_SCENE, }; struct lxSetup { // data settings lxData * data; lxVecLimits data_limits; // camera settings lxVec cam_center, cam_pos, cam_orig_center, cam_orig_pos; int cam_anaglyph_glasses, m_colormd; double cam_dist, cam_dir, cam_tilt, cam_width, cam_orig_dist, cam_orig_dir, cam_orig_tilt, cam_lens, cam_lens_vfov, cam_lens_vfovr, cam_anaglyph_eyesep, data_limits_diam; bool cam_persp, cam_anaglyph, cam_anaglyph_bw, cam_anaglyph_left; bool m_vis_centerline, m_vis_walls, m_vis_surface, m_vis_labels, m_vis_bbox, m_vis_grid, m_vis_indicators, m_vis_centerline_cave, m_vis_centerline_surface, m_vis_centerline_splay, m_vis_centerline_station, m_vis_centerline_entrance, m_vis_centerline_fix, m_vis_centerline_duplicate, m_stlabel_comment, m_stlabel_name, m_stlabel_altitude, m_stlabel_survey; bool m_srf_transparency, m_srf_texture, m_srf_lighting; bool m_walls_transparency; bool m_colormd_app_centerline, m_colormd_app_walls; double m_srf_opacity, m_walls_opacity; std::set m_survey_selection; lxSetup(struct lxData * dat); // Upravi data na zaklade settings a potom updatne // sam seba. void UpdateData(); // Restne pohlad podla prave nastaveneho dir a tilt, // ostatne da tak, aby data_limits vyplnali obrazovku void ResetCamera(); void StartCameraMovement(); void ZoomCamera(double zoom); void PanCamera(double panx, double pany); void TiltCamera(double tilt); void RotateCamera(double rot); void RotateCameraF(double rot); void SetLens(double lens); void UpdatePos(); void SelectSurvey(const char * survey); bool IsSurveySelected(const char * survey); void ClearSurveySelection(); wxXmlNode * SaveToXML(unsigned long items = lxSETUP_ALL); void LoadFromXML(wxXmlNode * n); }; #endif therion/loch/lxSScene.cxx0000644000076400010400000004245211763375654016512 0ustar userAdministrators// Standard libraries #ifndef LXDEPCHECK #include #endif //LXDEPCHECK - standart libraries #include "lxSScene.h" #include "lxGUI.h" #include "lxGLC.h" #include "lxSetup.h" #ifndef LXGNUMSW #include "loch.xpm" #endif enum { lxSS_VIS_CENTERLINE = 4000, lxSS_VIS_WALLS, lxSS_VIS_SURFACE, lxSS_VIS_LABELS, lxSS_VIS_BBOX, lxSS_VIS_GRID, lxSS_VIS_INDICATORS, lxSS_SRF_TRANSPARENCY, lxSS_SRF_OPACITY, lxSS_SRF_TEXTURE, lxSS_SRF_LIGHTING, lxSS_WALLS_TRANSPARENCY, lxSS_WALLS_OPACITY, lxSS_COLORMD_ALTITUDE, lxSS_COLORMD_DEFAULT, lxSS_COLORAPP_CENTERLINE, lxSS_COLORAPP_WALLS, lxSS_CLNVIS_SURFACE, lxSS_CLNVIS_CAVE, lxSS_CLNVIS_SPLAY, lxSS_CLNVIS_DUPLICATE, lxSS_CLNVIS_STATION, lxSS_CLNVIS_ENTRANCE, lxSS_CLNVIS_FIX, lxSS_STLABEL_NAME, lxSS_STLABEL_SURVEY, lxSS_STLABEL_COMMENT, lxSS_STLABEL_ALTITUDE, lxSS_IND_PNAME, }; BEGIN_EVENT_TABLE(lxModelSetupDlg, wxMiniFrame) EVT_RADIOBUTTON(lxSS_COLORMD_ALTITUDE, lxModelSetupDlg::OnCommand) EVT_RADIOBUTTON(lxSS_COLORMD_DEFAULT, lxModelSetupDlg::OnCommand) EVT_BUTTON(wxID_ANY, lxModelSetupDlg::OnCommand) EVT_BUTTON(wxID_CLOSE, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_VIS_CENTERLINE, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_VIS_WALLS, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_VIS_SURFACE, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_VIS_LABELS, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_VIS_BBOX, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_VIS_GRID, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_VIS_INDICATORS, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_WALLS_TRANSPARENCY, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_SRF_TRANSPARENCY, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_SRF_TEXTURE, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_SRF_LIGHTING, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_CLNVIS_STATION, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_CLNVIS_ENTRANCE, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_CLNVIS_FIX, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_CLNVIS_SURFACE, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_CLNVIS_CAVE, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_CLNVIS_SPLAY, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_CLNVIS_DUPLICATE, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_COLORAPP_CENTERLINE, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_COLORAPP_WALLS, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_STLABEL_NAME, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_STLABEL_COMMENT, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_STLABEL_ALTITUDE, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_STLABEL_SURVEY, lxModelSetupDlg::OnCommand) EVT_MOVE(lxModelSetupDlg::OnMove) EVT_CLOSE(lxModelSetupDlg::OnClose) EVT_COMMAND_SCROLL(lxSS_WALLS_OPACITY, lxModelSetupDlg::OnSlider) EVT_COMMAND_SCROLL(lxSS_SRF_OPACITY, lxModelSetupDlg::OnSlider) EVT_LISTBOX(LXMSTP_CONTROLLB, lxModelSetupDlg::OnControlSelect) EVT_TEXT(lxSS_IND_PNAME, lxModelSetupDlg::OnCommand) END_EVENT_TABLE() void lxModelSetupDlg::OnCommand(wxCommandEvent& event) { switch (event.GetId()) { case wxID_CLOSE: this->m_mainFrame->ToggleModelSetup(); break; case lxSS_SRF_TEXTURE: this->m_mainFrame->ToggleSurfaceTexture(); break; case lxSS_SRF_LIGHTING: this->m_mainFrame->ToggleSurfaceLighting(); break; case lxSS_SRF_TRANSPARENCY: this->m_mainFrame->ToggleSurfaceTransparency(); break; case lxSS_WALLS_TRANSPARENCY: this->m_mainFrame->ToggleWallsTransparency(); break; case lxSS_VIS_CENTERLINE: this->m_mainFrame->ToggleVisibilityCenterline(); break; case lxSS_VIS_WALLS: this->m_mainFrame->ToggleVisibilityWalls(); break; case lxSS_VIS_SURFACE: this->m_mainFrame->ToggleVisibilitySurface(); break; case lxSS_VIS_LABELS: this->m_mainFrame->ToggleVisibilityLabels(); break; case lxSS_VIS_BBOX: this->m_mainFrame->ToggleVisibilityBBox(); break; case lxSS_VIS_GRID: this->m_mainFrame->ToggleVisibilityGrid(); break; case lxSS_VIS_INDICATORS: this->m_mainFrame->ToggleVisibilityIndicators(); break; case lxSS_COLORMD_ALTITUDE: this->m_mainFrame->SetColorMode(lxSETUP_COLORMD_ALTITUDE); break; case lxSS_COLORMD_DEFAULT: this->m_mainFrame->SetColorMode(lxSETUP_COLORMD_DEFAULT); break; case lxSS_COLORAPP_CENTERLINE: this->m_mainFrame->ToggleColorsApplyCenterline(); break; case lxSS_COLORAPP_WALLS: this->m_mainFrame->ToggleColorsApplyWalls(); break; case lxSS_CLNVIS_SURFACE: this->m_mainFrame->ToggleVisibilityCenterlineSurface(); break; case lxSS_CLNVIS_CAVE: this->m_mainFrame->ToggleVisibilityCenterlineCave(); break; case lxSS_CLNVIS_SPLAY: this->m_mainFrame->ToggleVisibilityCenterlineSplay(); break; case lxSS_CLNVIS_DUPLICATE: this->m_mainFrame->ToggleVisibilityCenterlineDuplicate(); break; case lxSS_CLNVIS_FIX: this->m_mainFrame->ToggleVisibilityCenterlineFix(); break; case lxSS_CLNVIS_ENTRANCE: this->m_mainFrame->ToggleVisibilityCenterlineEntrance(); break; case lxSS_CLNVIS_STATION: this->m_mainFrame->ToggleVisibilityCenterlineStation(); break; case lxSS_STLABEL_ALTITUDE: this->m_mainFrame->ToggleVisibilityStLabelAltitude(); break; case lxSS_STLABEL_NAME: this->m_mainFrame->ToggleVisibilityStLabelName(); break; case lxSS_STLABEL_SURVEY: this->m_mainFrame->ToggleVisibilityStLabelSurvey(); break; case lxSS_STLABEL_COMMENT: this->m_mainFrame->ToggleVisibilityStLabelComment(); break; case lxSS_IND_PNAME: this->m_mainFrame->data->title = lxFTextCtrl(lxSS_IND_PNAME)->GetValue(); this->m_mainFrame->canvas->ForceRefresh(); break; } } void lxModelSetupDlg::OnSlider(wxScrollEvent& event) { bool update = false; switch (event.GetId()) { case lxSS_SRF_OPACITY: this->m_mainFrame->setup->m_srf_opacity = 1.0 - double(event.GetInt()) / 100.0; update = true; break; case lxSS_WALLS_OPACITY: this->m_mainFrame->setup->m_walls_opacity = 1.0 - double(event.GetInt()) / 100.0; update = true; break; } if (update) this->m_mainFrame->canvas->UpdateContents(); } void lxModelSetupDlg::OnClose(wxCloseEvent& WXUNUSED(event)) { this->m_mainFrame->ToggleModelSetup(); } void lxModelSetupDlg::OnMove(wxMoveEvent& WXUNUSED(event)) { this->m_toolBoxPosition.Save(); } void lxModelSetupDlg::OnControlSelect(wxCommandEvent& event) { this->m_controlSizer->Show(this->m_controlSizer_Visibility, event.GetSelection() == 0); this->m_controlSizer->Show(this->m_controlSizer_ColorMode, event.GetSelection() == 1); this->m_controlSizer->Show(this->m_controlSizer_Centerline, event.GetSelection() == 2); this->m_controlSizer->Show(this->m_controlSizer_Labels, event.GetSelection() == 3); this->m_controlSizer->Show(this->m_controlSizer_Walls, event.GetSelection() == 4); this->m_controlSizer->Show(this->m_controlSizer_Surface, event.GetSelection() == 5); //this->m_controlSizer->Show(this->m_controlSizer_BBox2Grid, event.GetSelection() == 6); this->m_controlSizer->Show(this->m_controlSizer_Indicators, event.GetSelection() == 6); //this->m_controlSizer->Show(this->m_controlSizer_ColorSetup, event.GetSelection() == 8); this->m_controlSizer->Layout(); } lxModelSetupDlg::lxModelSetupDlg(wxWindow *parent) : wxMiniFrame(parent, wxID_ANY, _(" Scene"),wxDefaultPosition, wxDefaultSize, (wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX) & (~(wxMINIMIZE_BOX | wxMAXIMIZE_BOX))) { this->m_toolBoxPosition.Init(this, parent, 2, 8, 8); #ifdef LXGNUMSW this->SetIcon(wxIcon(_T("LOCHICON"))); #else this->SetIcon(wxIcon(loch_xpm)); #endif this->m_mainFrame = (lxFrame *) parent; wxBoxSizer * sizerTop = new wxBoxSizer(wxHORIZONTAL), * sizerFrame = new wxBoxSizer(wxVERTICAL); lxPanel = new wxPanel(this, wxID_ANY); wxListBox * ctrlLBox; ctrlLBox = new wxListBox(lxPanel, LXMSTP_CONTROLLB); ctrlLBox->AppendString(_("Visibility")); ctrlLBox->AppendString(_("Color mode")); ctrlLBox->AppendString(_("Centerline")); ctrlLBox->AppendString(_("Stations")); ctrlLBox->AppendString(_("Walls")); ctrlLBox->AppendString(_("Surface")); //ctrlLBox->AppendString(_("BBox & grid")); ctrlLBox->AppendString(_("Indicators")); //ctrlLBox->AppendString(_("Color setup")); ctrlLBox->Select(0); this->m_controlSizer = new wxBoxSizer(wxVERTICAL); wxSize ctrlMinSize; ///////////////////////////////////////////////////////// // Visibility lxBoxSizer = this->m_controlSizer_Visibility = new wxBoxSizer(wxVERTICAL); #define ADDCB(id, ss) \ lxBoxSizer->Add( \ new wxCheckBox(lxPanel, id, ss), \ 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxBOTTOM, lxBORDER); #define ADDRB(id, ss) \ lxBoxSizer->Add( \ new wxRadioButton(lxPanel, id, ss), \ 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxBOTTOM, lxBORDER); #define ADDST(id, ss) \ lxBoxSizer->Add( \ new wxStaticText(lxPanel, id, ss), \ 0, wxALIGN_LEFT | wxBOTTOM, lxBORDER); ADDST(wxID_ANY, _("Scene items")) ADDCB(lxSS_VIS_CENTERLINE, _("Centerline")) ADDCB(lxSS_VIS_WALLS, _("Walls")) ADDCB(lxSS_VIS_SURFACE, _("Surface")) // ADDCB(lxSS_VIS_LABELS, _("Labels")) ADDCB(lxSS_VIS_BBOX, _("Bounding box")) // ADDCB(lxSS_VIS_GRID, _("Grid")) ADDCB(lxSS_VIS_INDICATORS, _("Indicators")) this->m_controlSizer->Add(lxBoxSizer, 1, wxEXPAND); ctrlMinSize = lxBoxSizer->GetMinSize(); #define updateCtrlMinSize \ lxSize = lxBoxSizer->GetMinSize(); \ if (lxSize.x > ctrlMinSize.x) ctrlMinSize.x = lxSize.x; \ if (lxSize.y > ctrlMinSize.y) ctrlMinSize.y = lxSize.y; ///////////////////////////////////////////////////////// // color mode lxBoxSizer = this->m_controlSizer_ColorMode = new wxBoxSizer(wxVERTICAL); ADDST(wxID_ANY, _("Color mode")) lxBoxSizer->Add( new wxRadioButton(lxPanel, lxSS_COLORMD_ALTITUDE, _("Altitude"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP), 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxBOTTOM, lxBORDER); //ADDRB(lxSS_COLORMD_ALTITUDE, _("Altitude")) // ADDRB(wxID_ANY, _("Topo date")) ADDRB(lxSS_COLORMD_DEFAULT, _("Default")) lxBoxSizer->Add( \ new wxStaticLine(lxPanel, wxID_ANY), \ 0, wxBOTTOM | wxEXPAND, lxBORDER); ADDST(wxID_ANY, _("Applies to")); ADDCB(lxSS_COLORAPP_CENTERLINE, _("Centerline")) ADDCB(lxSS_COLORAPP_WALLS, _("Walls")) // ADDCB(wxID_ANY, _("Surface")) this->m_controlSizer->Add(lxBoxSizer, 1, wxEXPAND); updateCtrlMinSize; ///////////////////////////////////////////////////////// // Centerline lxBoxSizer = this->m_controlSizer_Centerline = new wxBoxSizer(wxVERTICAL); ADDST(wxID_ANY, _("Centerline visibility")) ADDCB(lxSS_CLNVIS_SURFACE, _("Surface")) ADDCB(lxSS_CLNVIS_CAVE, _("Underground")) ADDCB(lxSS_CLNVIS_SPLAY, _("Splay")) ADDCB(lxSS_CLNVIS_DUPLICATE, _("Duplicate")) this->m_controlSizer->Add(lxBoxSizer, 1, wxEXPAND); updateCtrlMinSize; ///////////////////////////////////////////////////////// // Walls lxBoxSizer = this->m_controlSizer_Walls = new wxBoxSizer(wxVERTICAL); ADDCB(lxSS_WALLS_TRANSPARENCY, _("Transparency")) lxBoxSizer->Add( new wxSlider(lxPanel, lxSS_WALLS_OPACITY, 50, 0, 100, wxDefaultPosition, wxDefaultSize), 0, wxALIGN_CENTER_VERTICAL | wxEXPAND | wxBOTTOM, lxBORDER); this->m_controlSizer->Add(lxBoxSizer, 1, wxEXPAND); updateCtrlMinSize; ///////////////////////////////////////////////////////// // Surface lxBoxSizer = this->m_controlSizer_Surface = new wxBoxSizer(wxVERTICAL); ADDCB(lxSS_SRF_TRANSPARENCY, _("Transparency")) lxBoxSizer->Add( new wxSlider(lxPanel, lxSS_SRF_OPACITY, 50, 0, 100, wxDefaultPosition, wxDefaultSize), 0, wxALIGN_CENTER_VERTICAL | wxEXPAND | wxBOTTOM, lxBORDER); ADDCB(lxSS_SRF_TEXTURE, _("Texture")) ADDCB(lxSS_SRF_LIGHTING, _("Lighting")) // ADDCB(wxID_ANY, _("Fit to underground")) this->m_controlSizer->Add(lxBoxSizer, 1, wxEXPAND); updateCtrlMinSize; ///////////////////////////////////////////////////////// // Labels lxBoxSizer = this->m_controlSizer_Labels = new wxBoxSizer(wxVERTICAL); ADDST(wxID_ANY, _("Marked stations")); ADDCB(lxSS_CLNVIS_ENTRANCE, _("Entrances")) ADDCB(lxSS_CLNVIS_FIX, _("Fixed stations")) ADDCB(lxSS_CLNVIS_STATION, _("All")) lxBoxSizer->Add(new wxStaticLine(lxPanel, wxID_ANY), 0, wxBOTTOM | wxEXPAND, lxBORDER); ADDST(wxID_ANY, _("Labels")) ADDCB(lxSS_STLABEL_COMMENT, _("Comment")) ADDCB(lxSS_STLABEL_NAME, _("Name")) ADDCB(lxSS_STLABEL_SURVEY, _("Survey")) ADDCB(lxSS_STLABEL_ALTITUDE, _("Altitude")) // lxBoxSizer->Add(new wxStaticLine(lxPanel, wxID_ANY), 0, wxBOTTOM | wxEXPAND, lxBORDER); // // ADDST(wxID_ANY, _("Other labels")) // ADDCB(wxID_ANY, _("Survey names")) // ADDCB(wxID_ANY, _("Map labels")) // ADDCB(wxID_ANY, _("Map remarks")) // this->m_controlSizer->Add(lxBoxSizer, 1, wxEXPAND); updateCtrlMinSize; ///////////////////////////////////////////////////////// // BBox & Grid // // lxBoxSizer = this->m_controlSizer_BBox2Grid = new wxBoxSizer(wxVERTICAL); // // ADDST(wxID_ANY, _("Bounding box size")) // // wxBoxSizer * bs2; // bs2 = new wxBoxSizer(wxHORIZONTAL); // // bs2->Add( // new wxStaticText(lxPanel, wxID_ANY, _T("Overlap (%)")), // 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, lxBORDER); // bs2->Add( // new wxSpinCtrl(lxPanel, 3332, _T("5"), wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 100, 5)); // lxSETWWIDTH(3332, 2); // lxBoxSizer->Add(bs2, 0, wxBOTTOM | wxALIGN_LEFT, lxBORDER); // // ADDCB(wxID_ANY, _("Fit bbox to grid")) // lxBoxSizer->Add(new wxStaticLine(lxPanel, wxID_ANY), 0, wxBOTTOM | wxEXPAND, lxBORDER); // ADDST(wxID_ANY, _("Grid labels")) // ADDCB(wxID_ANY, _("Altitude")) // ADDCB(wxID_ANY, _("XY coordinates")) // // this->m_controlSizer->Add(lxBoxSizer, 1, wxEXPAND); // updateCtrlMinSize; ///////////////////////////////////////////////////////// // Indicators lxBoxSizer = this->m_controlSizer_Indicators = new wxBoxSizer(wxVERTICAL); ADDST(wxID_ANY, _("Project title")) lxBoxSizer->Add( new wxTextCtrl(lxPanel, lxSS_IND_PNAME), 0, wxALIGN_CENTER_VERTICAL | wxEXPAND | wxBOTTOM, lxBORDER); this->m_controlSizer->Add(lxBoxSizer, 1, wxEXPAND); updateCtrlMinSize; ///////////////////////////////////////////////////////// // Color setup // lxBoxSizer = this->m_controlSizer_ColorSetup = new wxBoxSizer(wxVERTICAL); // lxFlexGridSizer = new wxFlexGridSizer(2); ///////////////////////////////////////////////////////// // end of tools this->m_controlSizer->Layout(); wxCommandEvent cmdEvent; cmdEvent.SetInt(0); this->m_controlSizer->SetMinSize(ctrlMinSize); this->OnControlSelect(cmdEvent); sizerTop->Add(ctrlLBox, 0, wxALL | wxEXPAND, lxBORDER); lxBoxSizer = new wxBoxSizer(wxVERTICAL); lxBoxSizer->Add( this->m_controlSizer, 1, wxEXPAND, lxBORDER); lxBoxSizer->Add( new wxButton(lxPanel, wxID_CLOSE, _("Close")), 0, wxALIGN_RIGHT); sizerTop->Add(lxBoxSizer, 1, wxALL | wxEXPAND, lxBORDER); lxPanel->SetSizer(sizerTop); sizerTop->Fit(lxPanel); sizerFrame->Add(lxPanel, 1, wxEXPAND | wxALL); this->SetSizer(sizerFrame); sizerFrame->SetSizeHints(this); sizerFrame->Fit(this); } void lxModelSetupDlg::InitSetup() { lxFTextCtrl(lxSS_IND_PNAME)->SetValue(this->m_mainFrame->data->title); } void lxModelSetupDlg::LoadSetup() { lxSetup * stp = this->m_mainFrame->setup; lxFCheckBox(lxSS_VIS_CENTERLINE)->SetValue(stp->m_vis_centerline); lxFCheckBox(lxSS_VIS_WALLS)->SetValue(stp->m_vis_walls); lxFCheckBox(lxSS_VIS_SURFACE)->SetValue(stp->m_vis_surface); // lxFCheckBox(lxSS_VIS_LABELS)->SetValue(stp->m_vis_labels); lxFCheckBox(lxSS_VIS_BBOX)->SetValue(stp->m_vis_bbox); // lxFCheckBox(lxSS_VIS_GRID)->SetValue(stp->m_vis_grid); lxFCheckBox(lxSS_VIS_INDICATORS)->SetValue(stp->m_vis_indicators); lxFCheckBox(lxSS_CLNVIS_CAVE)->SetValue(stp->m_vis_centerline_cave); lxFCheckBox(lxSS_CLNVIS_SURFACE)->SetValue(stp->m_vis_centerline_surface); lxFCheckBox(lxSS_CLNVIS_SPLAY)->SetValue(stp->m_vis_centerline_splay); lxFCheckBox(lxSS_CLNVIS_DUPLICATE)->SetValue(stp->m_vis_centerline_duplicate); lxFCheckBox(lxSS_CLNVIS_FIX)->SetValue(stp->m_vis_centerline_fix); lxFCheckBox(lxSS_CLNVIS_ENTRANCE)->SetValue(stp->m_vis_centerline_entrance); lxFCheckBox(lxSS_CLNVIS_STATION)->SetValue(stp->m_vis_centerline_station); lxFRadioBtn(lxSS_COLORMD_ALTITUDE)->SetValue(stp->m_colormd == lxSETUP_COLORMD_ALTITUDE); lxFRadioBtn(lxSS_COLORMD_DEFAULT)->SetValue(stp->m_colormd == lxSETUP_COLORMD_DEFAULT); lxFCheckBox(lxSS_COLORAPP_CENTERLINE)->SetValue(stp->m_colormd_app_centerline); lxFCheckBox(lxSS_COLORAPP_WALLS)->SetValue(stp->m_colormd_app_walls); lxFCheckBox(lxSS_STLABEL_ALTITUDE)->SetValue(stp->m_stlabel_altitude); lxFCheckBox(lxSS_STLABEL_NAME)->SetValue(stp->m_stlabel_name); lxFCheckBox(lxSS_STLABEL_SURVEY)->SetValue(stp->m_stlabel_survey); lxFCheckBox(lxSS_STLABEL_COMMENT)->SetValue(stp->m_stlabel_comment); lxFCheckBox(lxSS_SRF_TRANSPARENCY)->SetValue(stp->m_srf_transparency); lxFCheckBox(lxSS_SRF_TEXTURE)->SetValue(stp->m_srf_texture); lxFCheckBox(lxSS_SRF_LIGHTING)->SetValue(stp->m_srf_lighting); lxFSlider(lxSS_SRF_OPACITY)->SetValue(100 - int(stp->m_srf_opacity * 100.0)); lxFCheckBox(lxSS_WALLS_TRANSPARENCY)->SetValue(stp->m_walls_transparency); lxFSlider(lxSS_WALLS_OPACITY)->SetValue(100 - int(stp->m_walls_opacity * 100.0)); } therion/loch/lxSScene.h0000644000076400010400000000206610537464734016130 0ustar userAdministrators/** * @file lxSScene.h * Loch scene setup. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ */ #ifndef lxSScene_h #define lxSScene_h // Standard libraries #ifndef LXDEPCHECK #include #endif //LXDEPCHECK - standart libraries #include "lxWX.h" enum { LXMSTP_CONTROLLB, }; class lxModelSetupDlg : public wxMiniFrame { public: lxTBoxPos m_toolBoxPosition; class lxFrame * m_mainFrame; wxBoxSizer * m_controlSizer, * m_controlSizer_ColorMode, * m_controlSizer_Visibility, * m_controlSizer_Centerline, * m_controlSizer_Walls, * m_controlSizer_Surface, * m_controlSizer_Labels, * m_controlSizer_BBox2Grid, * m_controlSizer_Indicators, * m_controlSizer_ColorSetup; lxModelSetupDlg(wxWindow *parent); void LoadSetup(); void InitSetup(); void OnSlider(wxScrollEvent& event); void OnCommand(wxCommandEvent& event); void OnClose(wxCloseEvent& event); void OnMove(wxMoveEvent& event); void OnControlSelect(wxCommandEvent& event); private: DECLARE_EVENT_TABLE() }; #endif therion/loch/lxSTree.cxx0000644000076400010400000000511212047417350016326 0ustar userAdministrators// Standard libraries #ifndef LXDEPCHECK #include #endif //LXDEPCHECK - standart libraries #include "lxSTree.h" #include "lxGUI.h" #include "lxGLC.h" #include "lxSetup.h" #ifndef LXGNUMSW #include "loch.xpm" #endif enum { lxSS_SURVEY_TREE = 4000, }; BEGIN_EVENT_TABLE(lxModelTreeDlg, wxMiniFrame) EVT_BUTTON(wxID_ANY, lxModelTreeDlg::OnCommand) EVT_BUTTON(wxID_CLOSE, lxModelTreeDlg::OnCommand) EVT_MOVE(lxModelTreeDlg::OnMove) EVT_CLOSE(lxModelTreeDlg::OnClose) END_EVENT_TABLE() void lxModelTreeDlg::OnCommand(wxCommandEvent& event) { switch (event.GetId()) { case wxID_CLOSE: this->m_mainFrame->ToggleSelectionSetup(); break; } } void lxModelTreeDlg::OnClose(wxCloseEvent& WXUNUSED(event)) { this->m_mainFrame->ToggleSelectionSetup(); } void lxModelTreeDlg::OnMove(wxMoveEvent& WXUNUSED(event)) { this->m_toolBoxPosition.Save(); } lxModelTreeDlg::lxModelTreeDlg(wxWindow *parent) : wxMiniFrame(parent, wxID_ANY, _(" Selection"),wxDefaultPosition, wxDefaultSize, (wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX | wxRESIZE_BORDER) & (~(wxMINIMIZE_BOX | wxMAXIMIZE_BOX))) { this->m_toolBoxPosition.Init(this, parent, 0, 8, 8); #ifdef LXGNUMSW this->SetIcon(wxIcon(_T("LOCHICON"))); #else this->SetIcon(wxIcon(loch_xpm)); #endif this->m_mainFrame = (lxFrame *) parent; wxBoxSizer * sizerFrame = new wxBoxSizer(wxVERTICAL); wxBoxSizer * sizerTop = new wxBoxSizer(wxVERTICAL); lxPanel = new wxPanel(this, wxID_ANY); this->m_treeControl = new wxTreeCtrl(lxPanel); sizerTop->Add( this->m_treeControl, 1, wxALL | wxEXPAND, lxBORDER); sizerTop->Add( new wxButton(lxPanel, wxID_CLOSE, _("Close")), 0, wxALIGN_RIGHT | lxNOTTOP, lxBORDER); lxPanel->SetSizer(sizerTop); sizerTop->Fit(lxPanel); sizerFrame->Add(lxPanel, 1, wxEXPAND | wxALL); this->SetSizer(sizerFrame); sizerFrame->SetSizeHints(this); sizerFrame->Fit(this); wxSize mfs = this->m_mainFrame->GetSize(); this->SetSize(mfs.GetWidth() / 4, mfs.GetHeight() / 2); } void lxModelTreeDlg::LoadData() { this->m_treeControl->DeleteAllItems(); lxData * data = this->m_mainFrame->data; std::vector parents; lxDataSurveyVec::iterator i; if (data == NULL) return; i = data->surveys.begin(); if (i == data->surveys.end()) return; wxTreeItemId tmpId = this->m_treeControl->AddRoot(_T("Surveys")); parents.push_back(tmpId); i++; for(; i != data->surveys.end(); i++) { parents.push_back(this->m_treeControl->AppendItem(parents[i->m_parent], wxConvUTF8.cMB2WX(strlen(i->m_title) > 0 ? i->m_title : i->m_name))); } } therion/loch/lxSTree.h0000644000076400010400000000127012047417736015764 0ustar userAdministrators/** * @file lxSTree.h * Loch scene setup. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ */ #ifndef lxSTree_h #define lxSTree_h // Standard libraries #ifndef LXDEPCHECK #include #include #endif //LXDEPCHECK - standart libraries #include "lxWX.h" class lxModelTreeDlg : public wxMiniFrame { public: lxTBoxPos m_toolBoxPosition; class lxFrame * m_mainFrame; wxTreeCtrl * m_treeControl; lxModelTreeDlg(wxWindow *parent); void LoadData(); void OnCommand(wxCommandEvent& event); void OnClose(wxCloseEvent& event); void OnMove(wxMoveEvent& event); private: DECLARE_EVENT_TABLE() }; #endif therion/loch/lxSView.cxx0000644000076400010400000004541011037115630016340 0ustar userAdministrators// Standard libraries #ifndef LXDEPCHECK #include #include #endif //LXDEPCHECK - standart libraries #include "lxSView.h" #include "lxGUI.h" #include "lxGLC.h" #include "lxSetup.h" #ifndef LXGNUMSW #include "loch.xpm" #endif #define POS(r, c) wxGBPosition(r,c) #define SPAN(r, c) wxGBSpan(r,c) BEGIN_EVENT_TABLE(lxViewpointSetupDlg, wxMiniFrame) EVT_BUTTON(wxID_CLOSE, lxViewpointSetupDlg::OnCommand) EVT_CHECKBOX(LXVSTP_PERSP, lxViewpointSetupDlg::OnCommand) EVT_CHECKBOX(LXVSTP_ROTATION, lxViewpointSetupDlg::OnCommand) EVT_CHECKBOX(LXVSTP_ROTLOCK, lxViewpointSetupDlg::OnCommand) EVT_CHECKBOX(LXVSTP_STEREO, lxViewpointSetupDlg::OnCommand) EVT_CHECKBOX(LXVSTP_STEREOBW, lxViewpointSetupDlg::OnCommand) EVT_CHOICE(LXVSTP_3DGLASSES, lxViewpointSetupDlg::OnCommand) EVT_MOVE(lxViewpointSetupDlg::OnMove) EVT_CLOSE(lxViewpointSetupDlg::OnClose) EVT_LISTBOX(LXVSTP_CONTROLLB, lxViewpointSetupDlg::OnControlSelect) EVT_TEXT(LXVSTP_FACING, lxViewpointSetupDlg::OnText) EVT_TEXT(LXVSTP_TILT, lxViewpointSetupDlg::OnText) EVT_TEXT(LXVSTP_CENTERX, lxViewpointSetupDlg::OnText) EVT_TEXT(LXVSTP_CENTERY, lxViewpointSetupDlg::OnText) EVT_TEXT(LXVSTP_CENTERZ, lxViewpointSetupDlg::OnText) EVT_TEXT(LXVSTP_DIST, lxViewpointSetupDlg::OnText) EVT_TEXT(LXVSTP_ZOOM, lxViewpointSetupDlg::OnText) EVT_COMMAND_SCROLL(LXVSTP_FACINGSLIDE, lxViewpointSetupDlg::OnSlider) EVT_COMMAND_SCROLL(LXVSTP_TILTSLIDE, lxViewpointSetupDlg::OnSlider) EVT_COMMAND_SCROLL(LXVSTP_ZOOMSLIDE, lxViewpointSetupDlg::OnSlider) EVT_COMMAND_SCROLL(LXVSTP_DISTSLIDE, lxViewpointSetupDlg::OnSlider) EVT_COMMAND_SCROLL(LXVSTP_EYESEP, lxViewpointSetupDlg::OnSlider) EVT_COMMAND_SCROLL(LXVSTP_ROTSPEED, lxViewpointSetupDlg::OnSlider) END_EVENT_TABLE() void lxViewpointSetupDlg::OnControlSelect(wxCommandEvent& event) { this->m_controlSizer->Show(this->m_controlSizer_Orientation, event.GetSelection() == 0); this->m_controlSizer->Show(this->m_controlSizer_Center, event.GetSelection() == 1); this->m_controlSizer->Show(this->m_controlSizer_Camera, event.GetSelection() == 2); this->m_controlSizer->Show(this->m_controlSizer_Rotation, event.GetSelection() == 3); this->m_controlSizer->Show(this->m_controlSizer_Stereo, event.GetSelection() == 4); this->m_controlSizer->Layout(); } void lxViewpointSetupDlg::OnText(wxCommandEvent& event) { bool update = false; double tmpv; switch (event.GetId()) { case LXVSTP_FACING: if (this->m_uicFacing) { if ((lxFTextCtrl(LXVSTP_FACING)->GetValue().ToDouble(&tmpv)) && (tmpv >= 0.0) && (tmpv < 360.0)) { this->m_mainFrame->setup->cam_dir = tmpv; update = true; } } this->m_uicFacing = true; break; case LXVSTP_TILT: if (this->m_uicTilt) { if ((lxFTextCtrl(LXVSTP_TILT)->GetValue().ToDouble(&tmpv)) && (tmpv <= 90.0) && (tmpv >= -90.0)) { this->m_mainFrame->setup->cam_tilt = tmpv; update = true; } } this->m_uicTilt = true; break; case LXVSTP_DIST: if (this->m_uicDist) { if ((lxFTextCtrl(LXVSTP_DIST)->GetValue().ToDouble(&tmpv)) && (tmpv > 0.0)) { this->m_mainFrame->setup->cam_dist = tmpv; update = true; } } this->m_uicDist = true; break; case LXVSTP_ZOOM: if (this->m_uicZoom) { if ((lxFTextCtrl(LXVSTP_ZOOM)->GetValue().ToDouble(&tmpv)) && (tmpv >= 20.0) && (tmpv <= 2000.0)) { double oldvfovr = this->m_mainFrame->setup->cam_lens_vfovr; this->m_mainFrame->setup->SetLens(tmpv); this->m_mainFrame->setup->cam_dist *= oldvfovr / this->m_mainFrame->setup->cam_lens_vfovr; this->m_uicDist = false; lxFTextCtrl(LXVSTP_DIST)->SetValue(wxString::Format(_T("%.0f"), this->m_mainFrame->setup->cam_dist)); update = true; } } this->m_uicZoom = true; break; case LXVSTP_CENTERX: if (this->m_uicCenterX) { if (lxFTextCtrl(LXVSTP_CENTERX)->GetValue().ToDouble(&tmpv)) { this->m_mainFrame->setup->cam_center.x = tmpv; update = true; } } this->m_uicCenterX = true; break; case LXVSTP_CENTERY: if (this->m_uicCenterY) { if (lxFTextCtrl(LXVSTP_CENTERY)->GetValue().ToDouble(&tmpv)) { this->m_mainFrame->setup->cam_center.y = tmpv; update = true; } } this->m_uicCenterY = true; break; case LXVSTP_CENTERZ: if (this->m_uicCenterZ) { if (lxFTextCtrl(LXVSTP_CENTERZ)->GetValue().ToDouble(&tmpv)) { this->m_mainFrame->setup->cam_center.z = tmpv; update = true; } } this->m_uicCenterZ = true; break; } if (update) { this->m_mainFrame->setup->UpdatePos(); this->m_mainFrame->canvas->ForceRefresh(false); this->SetSliders(); } } void lxViewpointSetupDlg::OnSlider(wxScrollEvent& event) { wxCommandEvent tmpEvent(wxEVT_COMMAND_TEXT_UPDATED); switch (event.GetId()) { case LXVSTP_FACINGSLIDE: #ifndef LXDEPCHECK #if wxCHECK_VERSION(2,7,1) lxFTextCtrl(LXVSTP_FACING)->ChangeValue(wxString::Format(_T("%d"), event.GetInt())); tmpEvent.SetId(LXVSTP_FACING); #else lxFTextCtrl(LXVSTP_FACING)->SetValue(wxString::Format(_T("%d"), event.GetInt())); #endif break; case LXVSTP_TILTSLIDE: #if wxCHECK_VERSION(2,7,1) lxFTextCtrl(LXVSTP_TILT)->ChangeValue(wxString::Format(_T("%d"), event.GetInt())); tmpEvent.SetId(LXVSTP_TILT); #else lxFTextCtrl(LXVSTP_TILT)->SetValue(wxString::Format(_T("%d"), event.GetInt())); #endif break; case LXVSTP_ZOOMSLIDE: #if wxCHECK_VERSION(2,7,1) lxFTextCtrl(LXVSTP_ZOOM)->ChangeValue(wxString::Format(_T("%d"), int(20.0 * pow(100.0, (double(event.GetInt()) / 1000.0))))); tmpEvent.SetId(LXVSTP_ZOOM); #else lxFTextCtrl(LXVSTP_ZOOM)->SetValue(wxString::Format(_T("%d"), int(20.0 * pow(100.0, (double(event.GetInt()) / 1000.0))))); #endif break; case LXVSTP_DISTSLIDE: #if wxCHECK_VERSION(2,7,1) lxFTextCtrl(LXVSTP_DIST)->ChangeValue(wxString::Format(_T("%d"), int(pow(200.0 * this->m_mainFrame->setup->data_limits_diam, (double(event.GetInt()) / 1000.0))))); tmpEvent.SetId(LXVSTP_DIST); #else lxFTextCtrl(LXVSTP_DIST)->SetValue(wxString::Format(_T("%d"), int(pow(200.0 * this->m_mainFrame->setup->data_limits_diam, (double(event.GetInt()) / 1000.0))))); #endif #endif break; case LXVSTP_ROTSPEED: this->m_mainFrame->canvas->m_sCameraAutoRotateAngle = (event.GetInt() >= 0 ? 1.0 : -1.0) * 0.05 * pow(200.0, fabs(double(event.GetInt())) / 1000.0); break; case LXVSTP_EYESEP: this->m_mainFrame->setup->cam_anaglyph_eyesep = (double(event.GetInt()) / 10000.0); if (this->m_mainFrame->setup->cam_anaglyph) this->m_mainFrame->canvas->ForceRefresh(false); break; } this->OnText(tmpEvent); } void lxViewpointSetupDlg::OnCommand(wxCommandEvent& event) { switch (event.GetId()) { case wxID_CLOSE: this->m_mainFrame->ToggleViewpointSetup(); break; case LXVSTP_PERSP: this->m_mainFrame->TogglePerspective(); break; case LXVSTP_STEREO: this->m_mainFrame->ToggleStereo(); break; case LXVSTP_STEREOBW: this->m_mainFrame->ToggleStereoBW(); break; case LXVSTP_ROTATION: this->m_mainFrame->ToggleRotation(); break; case LXVSTP_ROTLOCK: this->m_mainFrame->ToggleRotLock(); break; case LXVSTP_3DGLASSES: this->m_mainFrame->setup->cam_anaglyph_glasses = event.GetSelection(); if (this->m_mainFrame->setup->cam_anaglyph) this->m_mainFrame->canvas->ForceRefresh(); break; } } void lxViewpointSetupDlg::OnClose(wxCloseEvent& WXUNUSED(event)) { this->m_mainFrame->ToggleViewpointSetup(); } void lxViewpointSetupDlg::OnMove(wxMoveEvent& WXUNUSED(event)) { if (!this->IsIconized()) { this->m_toolBoxPosition.Save(); } } lxViewpointSetupDlg::lxViewpointSetupDlg(wxWindow *parent) : wxMiniFrame(parent, wxID_ANY, _(" Camera"),wxDefaultPosition, wxDefaultSize, (wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX) & (~(wxMINIMIZE_BOX | wxMAXIMIZE_BOX))) { m_toolBoxPosition.Init(this, parent, 0, 0, 0); #ifdef LXGNUMSW this->SetIcon(wxIcon(_T("LOCHICON"))); #else this->SetIcon(wxIcon(loch_xpm)); #endif this->m_mainFrame = (lxFrame *) parent; this->m_uicFacing = false; this->m_uicTilt = false; this->m_uicCenterX = false; this->m_uicCenterY = false; this->m_uicCenterZ = false; this->m_uicDist = false; this->m_uicZoom = false; ///////////////////////////////////////////////////////////// wxBoxSizer * sizerTop = new wxBoxSizer(wxHORIZONTAL), * sizerFrame = new wxBoxSizer(wxVERTICAL); lxPanel = new wxPanel(this, wxID_ANY); wxListBox * ctrlLBox; ctrlLBox = new wxListBox(lxPanel, LXVSTP_CONTROLLB); ctrlLBox->AppendString(_("Orientation")); ctrlLBox->AppendString(_("Center")); ctrlLBox->AppendString(_("Focus")); ctrlLBox->AppendString(_("Rotation")); ctrlLBox->AppendString(_("Stereo mode")); this->m_controlSizer = new wxBoxSizer(wxVERTICAL); wxSize ctrlMinSize; #define ADDCB(id, ss) \ lxBoxSizer->Add( \ new wxCheckBox(lxPanel, id, ss), \ 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxBOTTOM | wxEXPAND, lxBORDER); #define ADDRB(id, ss) \ lxBoxSizer->Add( \ new wxRadioButton(lxPanel, id, ss), \ 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxBOTTOM | wxEXPAND, lxBORDER); #define ADDST(id, ss) \ lxBoxSizer->Add( \ new wxStaticText(lxPanel, id, ss), \ 0, wxALIGN_LEFT | wxBOTTOM | wxEXPAND, lxBORDER); ///////////////////////////////////////////////////////// // Orientation lxBoxSizer = this->m_controlSizer_Orientation = new wxBoxSizer(wxVERTICAL); lxGBSizer = new wxGridBagSizer(); lxGBSizer->AddGrowableCol(1, 1); lxGBSizer->Add( new wxStaticText(lxPanel, wxID_ANY, _("Facing (deg)")), POS(0, 0), SPAN(1, 1), wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxBOTTOM | wxRIGHT, lxBORDER); lxGBSizer->Add( new wxTextCtrl(lxPanel, LXVSTP_FACING, _T("0"), wxDefaultPosition, wxDefaultSize, wxTE_RIGHT), POS(0, 1), SPAN(1, 1), wxALIGN_LEFT | wxBOTTOM, lxBORDER); lxGBSizer->Add( new wxSlider(lxPanel, LXVSTP_FACINGSLIDE, 0, 0, 359), POS(1, 0), SPAN(1, 2), wxBOTTOM | wxEXPAND, lxBORDER); lxSETWWIDTH(LXVSTP_FACING, 2); lxGBSizer->Add( new wxStaticText(lxPanel, wxID_ANY, _("Tilt (deg)")), POS(2, 0), SPAN(1, 1), wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxBOTTOM | wxRIGHT, lxBORDER); lxGBSizer->Add( new wxTextCtrl(lxPanel, LXVSTP_TILT, _T("90"), wxDefaultPosition, wxDefaultSize, wxTE_RIGHT), POS(2, 1), SPAN(1, 1), wxALIGN_LEFT | wxBOTTOM, lxBORDER); lxGBSizer->Add( new wxSlider(lxPanel, LXVSTP_TILTSLIDE, 0, -90, 90), POS(3, 0), SPAN(1, 2), wxBOTTOM | wxEXPAND, lxBORDER); lxSETWWIDTH(LXVSTP_TILT, 2); lxBoxSizer->Add(lxGBSizer, 0, wxEXPAND); this->m_controlSizer->Add(lxBoxSizer, 1, wxEXPAND); ctrlMinSize = lxBoxSizer->GetMinSize(); #define updateCtrlMinSize \ lxSize = lxBoxSizer->GetMinSize(); \ if (lxSize.x > ctrlMinSize.x) ctrlMinSize.x = lxSize.x; \ if (lxSize.y > ctrlMinSize.y) ctrlMinSize.y = lxSize.y; ///////////////////////////////////////////////////////// // Center lxBoxSizer = this->m_controlSizer_Center = new wxBoxSizer(wxVERTICAL); ADDST(wxID_ANY,_("Rotation center")); lxGBSizer = new wxGridBagSizer(); lxGBSizer->Add( new wxStaticText(lxPanel, wxID_ANY, _("Easting (m)")), POS(0, 0), SPAN(1, 1), wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxBOTTOM | wxRIGHT, lxBORDER); lxGBSizer->Add( new wxTextCtrl(lxPanel, LXVSTP_CENTERX, _T("100.0"), wxDefaultPosition, wxDefaultSize, wxTE_RIGHT), POS(0, 1), SPAN(1, 1), wxALIGN_LEFT | wxBOTTOM, lxBORDER); lxSETWWIDTH(LXVSTP_CENTERX, 3); lxGBSizer->Add( new wxStaticText(lxPanel, wxID_ANY, _("Northing (m)")), POS(1, 0), SPAN(1, 1), wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxBOTTOM | wxRIGHT, lxBORDER); lxGBSizer->Add( new wxTextCtrl(lxPanel, LXVSTP_CENTERY, _T("100.0"), wxDefaultPosition, wxDefaultSize, wxTE_RIGHT), POS(1, 1), SPAN(1, 1), wxALIGN_LEFT | wxBOTTOM, lxBORDER); lxSETWWIDTH(LXVSTP_CENTERY, 3); lxGBSizer->Add( new wxStaticText(lxPanel, wxID_ANY, _("Altitude (m)")), POS(2, 0), SPAN(1, 1), wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxBOTTOM | wxRIGHT, lxBORDER); lxGBSizer->Add( new wxTextCtrl(lxPanel, LXVSTP_CENTERZ, _T("100.0"), wxDefaultPosition, wxDefaultSize, wxTE_RIGHT), POS(2, 1), SPAN(1, 1), wxALIGN_LEFT | wxBOTTOM, lxBORDER); lxSETWWIDTH(LXVSTP_CENTERZ, 3); lxBoxSizer->Add(lxGBSizer, 1, wxEXPAND); this->m_controlSizer->Add(lxBoxSizer, 0, wxEXPAND); updateCtrlMinSize; ///////////////////////////////////////////////////////// // Camera lxBoxSizer = this->m_controlSizer_Camera = new wxBoxSizer(wxVERTICAL); lxGBSizer = new wxGridBagSizer(); lxGBSizer->AddGrowableCol(1, 1); lxGBSizer->Add( new wxStaticText(lxPanel, wxID_ANY, _("Distance (m)")), POS(0, 0), SPAN(1, 1), wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxBOTTOM | wxRIGHT, lxBORDER); lxGBSizer->Add( new wxTextCtrl(lxPanel, LXVSTP_DIST, _T("100"), wxDefaultPosition, wxDefaultSize, wxTE_RIGHT), POS(0, 1), SPAN(1, 1), wxALIGN_LEFT | wxBOTTOM, lxBORDER); lxGBSizer->Add( new wxSlider(lxPanel, LXVSTP_DISTSLIDE, 0, 0, 1000), POS(1, 0), SPAN(1, 2), wxBOTTOM | wxEXPAND, lxBORDER); lxSETWWIDTH(LXVSTP_DIST, 2.0); lxGBSizer->Add( new wxCheckBox(lxPanel, LXVSTP_PERSP, _("Orthogonal view")), POS(2,0), SPAN(1, 2), wxBOTTOM | wxALIGN_LEFT, lxBORDER); lxGBSizer->Add( new wxStaticText(lxPanel, wxID_ANY, _("Focus (mm)")), POS(3, 0), SPAN(1, 1), wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxBOTTOM | wxRIGHT, lxBORDER); lxGBSizer->Add( new wxTextCtrl(lxPanel, LXVSTP_ZOOM, _T(""), wxDefaultPosition, wxDefaultSize, wxTE_RIGHT), POS(3, 1), SPAN(1, 1), wxALIGN_LEFT | wxBOTTOM, lxBORDER); lxGBSizer->Add( new wxSlider(lxPanel, LXVSTP_ZOOMSLIDE, 0, 0, 1000), POS(4, 0), SPAN(1, 2), wxBOTTOM | wxEXPAND, lxBORDER); lxSETWWIDTH(LXVSTP_ZOOM, 2.0); lxBoxSizer->Add(lxGBSizer, 0, wxEXPAND); this->m_controlSizer->Add(lxBoxSizer, 0, wxEXPAND); updateCtrlMinSize; ///////////////////////////////////////////////////////// // Rotation lxBoxSizer = this->m_controlSizer_Rotation = new wxBoxSizer(wxVERTICAL); ADDCB(LXVSTP_ROTATION, _("Enable rotation")) ADDCB(LXVSTP_ROTLOCK, _("Lock rotation")) ADDST(wxID_ANY, _("Rotation speed")) wxSlider * rspeed = new wxSlider(lxPanel, LXVSTP_ROTSPEED, 0, -1000, 1000, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL | wxSL_AUTOTICKS); rspeed->SetTickFreq(1000,0); lxBoxSizer->Add( rspeed, 0, wxBOTTOM | wxEXPAND, lxBORDER); lxBoxSizer->Add( new wxStaticText(lxPanel, LXVSTP_RENSPEED, _T("")), 0, wxALIGN_LEFT | wxBOTTOM | wxEXPAND, lxBORDER); this->m_controlSizer->Add(lxBoxSizer, 0, wxEXPAND); updateCtrlMinSize; ///////////////////////////////////////////////////////// // Stereo lxBoxSizer = this->m_controlSizer_Stereo = new wxBoxSizer(wxVERTICAL); ADDCB(LXVSTP_STEREO, _("Enable stereo mode")) ADDST(wxID_ANY, _("Eye separation")) lxBoxSizer->Add( new wxSlider(lxPanel, LXVSTP_EYESEP, 250, 1, 1000), 0, wxEXPAND); wxChoice * ch = new wxChoice(lxPanel, LXVSTP_3DGLASSES); ch->Append(_("red & cyan")); ch->Append(_("red & green")); ch->Append(_("red & blue")); ch->Append(_("yellow & blue")); ch->Append(_("cyan & red")); ch->Append(_("green & red")); ch->Append(_("blue & red")); ch->Append(_("blue & yellow")); ch->SetSelection(0); ADDCB(LXVSTP_STEREOBW, _("Disable color textures")) ADDST(wxID_ANY, _("Color channels")) lxBoxSizer->Add(ch, 0, wxBOTTOM | wxEXPAND, lxBORDER); this->m_controlSizer->Add(lxBoxSizer, 0, wxEXPAND); updateCtrlMinSize; ///////////////////////////////////////////////////////// // end of tools this->m_controlSizer->Layout(); wxCommandEvent cmdEvent; cmdEvent.SetInt(0); this->m_controlSizer->SetMinSize(ctrlMinSize); this->OnControlSelect(cmdEvent); sizerTop->Add(ctrlLBox, 0, wxALL | wxEXPAND, lxBORDER); lxBoxSizer = new wxBoxSizer(wxVERTICAL); lxBoxSizer->Add( this->m_controlSizer, 1, wxEXPAND, lxBORDER); lxBoxSizer->Add( new wxButton(lxPanel, wxID_CLOSE, _("Close")), 0, wxALIGN_RIGHT); sizerTop->Add(lxBoxSizer, 1, wxALL | wxEXPAND, lxBORDER); lxPanel->SetSizer(sizerTop); sizerTop->Fit(lxPanel); sizerFrame->Add(lxPanel, 1, wxEXPAND | wxALL); this->SetSizer(sizerFrame); sizerFrame->SetSizeHints(this); sizerFrame->Fit(this); wxCommandEvent cmdEvt; cmdEvt.SetInt(3); this->OnControlSelect(cmdEvt); ctrlLBox->Select(3); } bool lxViewpointSetupDlg::IsChanged() { return false; } void lxViewpointSetupDlg::LoadSetup() { lxSetup * stp = this->m_mainFrame->setup; this->m_uicFacing = false; lxFTextCtrl(LXVSTP_FACING)->SetValue(wxString::Format(_T("%.0f"), stp->cam_dir)); this->m_uicTilt = false; lxFTextCtrl(LXVSTP_TILT)->SetValue(wxString::Format(_T("%.0f"), stp->cam_tilt)); this->m_uicCenterX = false; lxFTextCtrl(LXVSTP_CENTERX)->SetValue(wxString::Format(_T("%.0f"), stp->cam_center.x)); this->m_uicCenterY = false; lxFTextCtrl(LXVSTP_CENTERY)->SetValue(wxString::Format(_T("%.0f"), stp->cam_center.y)); this->m_uicCenterZ = false; lxFTextCtrl(LXVSTP_CENTERZ)->SetValue(wxString::Format(_T("%.0f"), stp->cam_center.z)); this->m_uicDist = false; lxFTextCtrl(LXVSTP_DIST)->SetValue(wxString::Format(_T("%.0f"), stp->cam_dist)); this->m_uicZoom = false; lxFTextCtrl(LXVSTP_ZOOM)->SetValue(wxString::Format(_T("%.0f"), stp->cam_lens)); lxFCheckBox(LXVSTP_PERSP)->SetValue(!stp->cam_persp); lxFCheckBox(LXVSTP_STEREO)->SetValue(stp->cam_anaglyph); lxFCheckBox(LXVSTP_STEREOBW)->SetValue(stp->cam_anaglyph_bw); lxFCheckBox(LXVSTP_ROTATION)->SetValue(this->m_mainFrame->canvas->m_sCameraAutoRotate); lxFCheckBox(LXVSTP_ROTLOCK)->SetValue(this->m_mainFrame->canvas->m_sCameraLockRotation); if (this->m_mainFrame->canvas->m_sCameraAutoRotate) lxFCheckBox(LXVSTP_ROTLOCK)->SetLabel(_("Lock rotation speed")); else lxFCheckBox(LXVSTP_ROTLOCK)->SetLabel(_("Lock rotation")); this->SetSliders(); this->IsChanged(); } void lxViewpointSetupDlg::SetSliders() { lxSetup * stp = this->m_mainFrame->setup; lxFSlider(LXVSTP_FACINGSLIDE)->SetValue(int(stp->cam_dir)); lxFSlider(LXVSTP_TILTSLIDE)->SetValue(int(stp->cam_tilt)); lxFSlider(LXVSTP_ZOOMSLIDE)->SetValue(int(1000.0 * log(stp->cam_lens / 20.0)/log(100.0) + 0.5)); lxFSlider(LXVSTP_DISTSLIDE)->SetValue(int(1000.0 * log(stp->cam_dist)/log(200.0 * stp->data_limits_diam) + 0.5)); lxFSlider(LXVSTP_EYESEP)->SetValue(int(stp->cam_anaglyph_eyesep * 10000.0)); lxFSlider(LXVSTP_ROTSPEED)->SetValue(int(fabs(this->m_mainFrame->canvas->m_sCameraAutoRotateAngle) < 0.05 ? 0.0 : (this->m_mainFrame->canvas->m_sCameraAutoRotateAngle > 0 ? 1 : -1) * int(1000.0 * log(fabs(this->m_mainFrame->canvas->m_sCameraAutoRotateAngle) / 0.05)/log(200.0) + 0.5))); } therion/loch/lxSView.h0000644000076400010400000000276610537464734016014 0ustar userAdministrators/** * @file lxSView.h * Loch scene setup. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ */ #ifndef lxSView_h #define lxSView_h // Standard libraries #ifndef LXDEPCHECK #include #endif //LXDEPCHECK - standart libraries #include "lxWX.h" enum { LXVSTP_CONTROLLB = 10000, LXVSTP_PERSP, LXVSTP_ZOOM, LXVSTP_ZOOMSLIDE, LXVSTP_FACING, LXVSTP_FACINGSLIDE, LXVSTP_TILT, LXVSTP_TILTSLIDE, LXVSTP_DIST, LXVSTP_DISTSLIDE, LXVSTP_CENTERX, LXVSTP_CENTERY, LXVSTP_CENTERZ, LXVSTP_ROTATION, LXVSTP_ROTLOCK, LXVSTP_ROTSPEED, LXVSTP_STEREO, LXVSTP_STEREOBW, LXVSTP_3DGLASSES, LXVSTP_EYESEP, LXVSTP_RENSPEED, }; class lxViewpointSetupDlg : public wxMiniFrame { public: lxTBoxPos m_toolBoxPosition; lxCRC32 m_toolBoxCRC; class lxFrame * m_mainFrame; wxBoxSizer * m_controlSizer, * m_controlSizer_Orientation, * m_controlSizer_Center, * m_controlSizer_Camera, * m_controlSizer_Rotation, * m_controlSizer_Stereo; bool m_uicFacing, m_uicTilt, m_uicCenterX, m_uicCenterY, m_uicCenterZ, m_uicDist, m_uicZoom; lxViewpointSetupDlg(wxWindow *parent); bool IsChanged(); void LoadSetup(); void SetSliders(); void OnCommand(wxCommandEvent& event); void OnClose(wxCloseEvent& event); void OnMove(wxMoveEvent& event); void OnControlSelect(wxCommandEvent& event); void OnSlider(wxScrollEvent& event); void OnText(wxCommandEvent& event); private: DECLARE_EVENT_TABLE() }; #endif therion/loch/lxTR.c0000644000076400010400000002716510507531566015272 0ustar userAdministrators/* $Id: tr.c,v 1.9 1998/01/29 16:56:54 brianp Exp $ */ /* * $Log: tr.c,v $ * Revision 1.9 1998/01/29 16:56:54 brianp * allow trOrtho() and trFrustum() to be called at any time, minor clean-up * * Revision 1.8 1998/01/28 19:47:39 brianp * minor clean-up for C++ * * Revision 1.7 1997/07/21 17:34:38 brianp * added tile borders * * Revision 1.6 1997/07/21 15:47:35 brianp * renamed all "near" and "far" variables * * Revision 1.5 1997/04/26 21:23:25 brianp * added trRasterPos3f function * * Revision 1.4 1997/04/26 19:59:36 brianp * set CurrentTile to -1 before first tile and after last tile * * Revision 1.3 1997/04/22 23:51:15 brianp * added WIN32 header stuff, removed tabs * * Revision 1.2 1997/04/19 23:26:10 brianp * many API changes * * Revision 1.1 1997/04/18 21:53:05 brianp * Initial revision * */ /* * Tiled Rendering library * Version 1.1 * Copyright (C) Brian Paul */ #include "lxTR.h" #define DEFAULT_TILE_WIDTH 256 #define DEFAULT_TILE_HEIGHT 256 #define DEFAULT_TILE_BORDER 0 #ifdef assert #undef assert #endif #define assert(x) struct _TRctx { /* Final image parameters */ GLint ImageWidth, ImageHeight; GLenum ImageFormat, ImageType; GLvoid *ImageBuffer; /* Tile parameters */ GLint TileWidth, TileHeight; GLint TileWidthNB, TileHeightNB; GLint TileBorder; GLenum TileFormat, TileType; GLvoid *TileBuffer; /* Projection parameters */ GLboolean Perspective; GLdouble Left; GLdouble Right; GLdouble Bottom; GLdouble Top; GLdouble Near; GLdouble Far; /* Misc */ TRenum RowOrder; GLint Rows, Columns; GLint CurrentTile; GLint CurrentTileWidth, CurrentTileHeight; GLint CurrentRow, CurrentColumn; GLint ViewportSave[4]; }; /* * Misc setup including computing number of tiles (rows and columns). */ static void Setup(TRcontext *tr) { if (!tr) return; tr->Columns = (tr->ImageWidth + tr->TileWidthNB - 1) / tr->TileWidthNB; tr->Rows = (tr->ImageHeight + tr->TileHeightNB - 1) / tr->TileHeightNB; tr->CurrentTile = 0; assert(tr->Columns >= 0); assert(tr->Rows >= 0); } TRcontext *trNew(void) { TRcontext *tr = (TRcontext *) calloc(1, sizeof(TRcontext)); if (tr) { tr->TileWidth = DEFAULT_TILE_WIDTH; tr->TileHeight = DEFAULT_TILE_HEIGHT; tr->TileBorder = DEFAULT_TILE_BORDER; tr->RowOrder = TR_BOTTOM_TO_TOP; tr->CurrentTile = -1; } return (TRcontext *) tr; } void trDelete(TRcontext *tr) { if (tr) free(tr); } void trTileSize(TRcontext *tr, GLint width, GLint height, GLint border) { if (!tr) return; assert(border >= 0); assert(width >= 1); assert(height >= 1); assert(width >= 2*border); assert(height >= 2*border); tr->TileBorder = border; tr->TileWidth = width; tr->TileHeight = height; tr->TileWidthNB = width - 2 * border; tr->TileHeightNB = height - 2 * border; Setup(tr); } void trTileBuffer(TRcontext *tr, GLenum format, GLenum type, GLvoid *image) { if (!tr) return; tr->TileFormat = format; tr->TileType = type; tr->TileBuffer = image; } void trImageSize(TRcontext *tr, GLint width, GLint height) { if (!tr) return; tr->ImageWidth = width; tr->ImageHeight = height; Setup(tr); } void trImageBuffer(TRcontext *tr, GLenum format, GLenum type, GLvoid *image) { if (!tr) return; tr->ImageFormat = format; tr->ImageType = type; tr->ImageBuffer = image; } GLint trGet(TRcontext *tr, TRenum param) { if (!tr) return 0; switch (param) { case TR_TILE_WIDTH: return tr->TileWidth; case TR_TILE_HEIGHT: return tr->TileHeight; case TR_TILE_BORDER: return tr->TileBorder; case TR_IMAGE_WIDTH: return tr->ImageWidth; case TR_IMAGE_HEIGHT: return tr->ImageHeight; case TR_ROWS: return tr->Rows; case TR_COLUMNS: return tr->Columns; case TR_CURRENT_ROW: if (tr->CurrentTile<0) return -1; else return tr->CurrentRow; case TR_CURRENT_COLUMN: if (tr->CurrentTile<0) return -1; else return tr->CurrentColumn; case TR_CURRENT_TILE_WIDTH: return tr->CurrentTileWidth; case TR_CURRENT_TILE_HEIGHT: return tr->CurrentTileHeight; case TR_ROW_ORDER: return (GLint) tr->RowOrder; default: return 0; } } void trRowOrder(TRcontext *tr, TRenum order) { if (!tr) return; if (order==TR_TOP_TO_BOTTOM || order==TR_BOTTOM_TO_TOP) tr->RowOrder = order; } void trOrtho(TRcontext *tr, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) { if (!tr) return; tr->Perspective = GL_FALSE; tr->Left = left; tr->Right = right; tr->Bottom = bottom; tr->Top = top; tr->Near = zNear; tr->Far = zFar; } void trFrustum(TRcontext *tr, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) { if (!tr) return; tr->Perspective = GL_TRUE; tr->Left = left; tr->Right = right; tr->Bottom = bottom; tr->Top = top; tr->Near = zNear; tr->Far = zFar; } void trPerspective(TRcontext *tr, GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar ) { GLdouble xmin, xmax, ymin, ymax; ymax = zNear * tan(fovy * 3.14159265 / 360.0); ymin = -ymax; xmin = ymin * aspect; xmax = ymax * aspect; trFrustum(tr, xmin, xmax, ymin, ymax, zNear, zFar); } void trBeginTile(TRcontext *tr) { GLint matrixMode; GLint tileWidth, tileHeight, border; GLdouble left, right, bottom, top; if (!tr) return; if (tr->CurrentTile <= 0) { Setup(tr); /* Save user's viewport, will be restored after last tile rendered */ glGetIntegerv(GL_VIEWPORT, tr->ViewportSave); } /* which tile (by row and column) we're about to render */ if (tr->RowOrder==TR_BOTTOM_TO_TOP) { tr->CurrentRow = tr->CurrentTile / tr->Columns; tr->CurrentColumn = tr->CurrentTile % tr->Columns; } else if (tr->RowOrder==TR_TOP_TO_BOTTOM) { tr->CurrentRow = tr->Rows - (tr->CurrentTile / tr->Columns) - 1; tr->CurrentColumn = tr->CurrentTile % tr->Columns; } else { /* This should never happen */ abort(); } assert(tr->CurrentRow < tr->Rows); assert(tr->CurrentColumn < tr->Columns); border = tr->TileBorder; /* Compute actual size of this tile with border */ if (tr->CurrentRow < tr->Rows-1) tileHeight = tr->TileHeight; else tileHeight = tr->ImageHeight - (tr->Rows-1) * (tr->TileHeightNB) + 2 * border; if (tr->CurrentColumn < tr->Columns-1) tileWidth = tr->TileWidth; else tileWidth = tr->ImageWidth - (tr->Columns-1) * (tr->TileWidthNB) + 2 * border; /* Save tile size, with border */ tr->CurrentTileWidth = tileWidth; tr->CurrentTileHeight = tileHeight; glViewport(0, 0, tileWidth, tileHeight); /* tile size including border */ /* save current matrix mode */ glGetIntegerv(GL_MATRIX_MODE, &matrixMode); glMatrixMode(GL_PROJECTION); glLoadIdentity(); /* compute projection parameters */ left = tr->Left + (tr->Right - tr->Left) * (tr->CurrentColumn * tr->TileWidthNB - border) / tr->ImageWidth; right = left + (tr->Right - tr->Left) * tileWidth / tr->ImageWidth; bottom = tr->Bottom + (tr->Top - tr->Bottom) * (tr->CurrentRow * tr->TileHeightNB - border) / tr->ImageHeight; top = bottom + (tr->Top - tr->Bottom) * tileHeight / tr->ImageHeight; if (tr->Perspective) glFrustum(left, right, bottom, top, tr->Near, tr->Far); else glOrtho(left, right, bottom, top, tr->Near, tr->Far); /* restore user's matrix mode */ glMatrixMode(matrixMode); } int trEndTile(TRcontext *tr) { GLint prevRowLength, prevSkipRows, prevSkipPixels; /* prevAlignment; */ if (!tr) return 0; assert(tr->CurrentTile>=0); /* be sure OpenGL rendering is finished */ glFinish(); /* save current glPixelStore values */ glGetIntegerv(GL_PACK_ROW_LENGTH, &prevRowLength); glGetIntegerv(GL_PACK_SKIP_ROWS, &prevSkipRows); glGetIntegerv(GL_PACK_SKIP_PIXELS, &prevSkipPixels); /*glGetIntegerv(GL_PACK_ALIGNMENT, &prevAlignment);*/ if (tr->TileBuffer) { GLint srcX = tr->TileBorder; GLint srcY = tr->TileBorder; GLint srcWidth = tr->TileWidthNB; GLint srcHeight = tr->TileHeightNB; glReadPixels(srcX, srcY, srcWidth, srcHeight, tr->TileFormat, tr->TileType, tr->TileBuffer); } if (tr->ImageBuffer) { GLint srcX = tr->TileBorder; GLint srcY = tr->TileBorder; GLint srcWidth = tr->CurrentTileWidth - 2 * tr->TileBorder; GLint srcHeight = tr->CurrentTileHeight - 2 * tr->TileBorder; GLint destX = tr->TileWidthNB * tr->CurrentColumn; GLint destY = tr->TileHeightNB * tr->CurrentRow; /* setup pixel store for glReadPixels */ glPixelStorei(GL_PACK_ROW_LENGTH, tr->ImageWidth); glPixelStorei(GL_PACK_SKIP_ROWS, destY); glPixelStorei(GL_PACK_SKIP_PIXELS, destX); /*glPixelStorei(GL_PACK_ALIGNMENT, 1);*/ /* read the tile into the final image */ glReadPixels(srcX, srcY, srcWidth, srcHeight, tr->ImageFormat, tr->ImageType, tr->ImageBuffer); } /* restore previous glPixelStore values */ glPixelStorei(GL_PACK_ROW_LENGTH, prevRowLength); glPixelStorei(GL_PACK_SKIP_ROWS, prevSkipRows); glPixelStorei(GL_PACK_SKIP_PIXELS, prevSkipPixels); /*glPixelStorei(GL_PACK_ALIGNMENT, prevAlignment);*/ /* increment tile counter, return 1 if more tiles left to render */ tr->CurrentTile++; if (tr->CurrentTile >= tr->Rows * tr->Columns) { /* restore user's viewport */ glViewport(tr->ViewportSave[0], tr->ViewportSave[1], tr->ViewportSave[2], tr->ViewportSave[3]); tr->CurrentTile = -1; /* all done */ return 0; } else return 1; } /* * Replacement for glRastePos3f() which avoids the problem with invalid * raster pos. */ void trRasterPos3f(TRcontext *tr, GLfloat x, GLfloat y, GLfloat z) { if (tr->CurrentTile<0) { /* not doing tile rendering right now. Let OpenGL do this. */ glRasterPos3f(x, y, z); } else { GLdouble modelview[16], proj[16]; GLint viewport[4]; GLdouble winX, winY, winZ; /* Get modelview, projection and viewport */ glGetDoublev(GL_MODELVIEW_MATRIX, modelview); glGetDoublev(GL_PROJECTION_MATRIX, proj); viewport[0] = 0; viewport[1] = 0; viewport[2] = tr->CurrentTileWidth; viewport[3] = tr->CurrentTileHeight; /* Project object coord to window coordinate */ if (gluProject(x, y, z, modelview, proj, viewport, &winX, &winY, &winZ)){ /* set raster pos to window coord (0,0) */ glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glOrtho(0.0, tr->CurrentTileWidth, 0.0, tr->CurrentTileHeight, 0.0, 1.0); glRasterPos3f(0.0, 0.0, (GLfloat) -winZ); /* Now use empty bitmap to adjust raster position to (winX,winY) */ { GLubyte bitmap[1] = {0}; glBitmap(1, 1, 0.0, 0.0, (GLfloat) winX, (GLfloat) winY, bitmap); } /* restore original matrices */ glPopMatrix(); /*proj*/ glMatrixMode(GL_MODELVIEW); glPopMatrix(); } #ifdef DEBUG if (glGetError()) printf("GL error!\n"); #endif } } therion/loch/lxTR.h0000644000076400010400000000716212047414326015265 0ustar userAdministrators/* $Id: tr.h,v 1.5 1997/07/21 17:34:07 brianp Exp $ */ /* * $Log: tr.h,v $ * Revision 1.5 1997/07/21 17:34:07 brianp * added tile borders, incremented version to 1.1 * * Revision 1.4 1997/07/21 15:47:35 brianp * renamed all "near" and "far" variables * * Revision 1.3 1997/04/26 21:23:25 brianp * added trRasterPos3f function * * Revision 1.2 1997/04/19 23:26:10 brianp * many API changes * * Revision 1.1 1997/04/18 21:53:05 brianp * Initial revision * */ /* * Tiled Rendering library * Version 1.1 * Copyright (C) Brian Paul * * * This library allows one to render arbitrarily large images with OpenGL. * The basic idea is to break the image into tiles which are rendered one * at a time. The tiles are assembled together to form the final, large * image. Tiles and images can be of any size. * * Basic usage: * * 1. Allocate a tile rendering context: * TRcontext t = trNew(); * * 2. Specify the final image buffer and tile size: * GLubyte image[W][H][4] * trImageSize(t, W, H); * trImageBuffer(t, GL_RGBA, GL_UNSIGNED_BYTE, (GLubyte *) image); * * 3. Setup your projection: * trFrustum(t, left, right, bottom top, near, far); * or * trOrtho(t, left, right, bottom top, near, far); * or * trPerspective(t, fovy, aspect, near, far); * * 4. Render the tiles: * do { * trBeginTile(t); * DrawMyScene(); * } while (trEndTile(t)); * * You provide the DrawMyScene() function which calls glClear() and * draws all your stuff. * * 5. The image array is now complete. Display it, write it to a file, etc. * * 6. Delete the tile rendering context when finished: * trDelete(t); * */ #ifndef lxTR_h #define lxTR_h /* Standard libraries */ #ifndef LXDEPCHECK #include #include #include #include #ifdef _WIN32 #include #endif #ifdef LXMACOSX #include #include #else #include #include #endif #endif /* LXDEPCHECK - standart libraries */ #ifdef __cplusplus extern "C" { #endif #define TR_VERSION "1.1" #define TR_MAJOR_VERSION 1 #define TR_MINOR_VERSION 1 typedef struct _TRctx TRcontext; typedef enum { TR_TILE_WIDTH = 100, TR_TILE_HEIGHT, TR_TILE_BORDER, TR_IMAGE_WIDTH, TR_IMAGE_HEIGHT, TR_ROWS, TR_COLUMNS, TR_CURRENT_ROW, TR_CURRENT_COLUMN, TR_CURRENT_TILE_WIDTH, TR_CURRENT_TILE_HEIGHT, TR_ROW_ORDER, TR_TOP_TO_BOTTOM, TR_BOTTOM_TO_TOP } TRenum; extern TRcontext *trNew(void); extern void trDelete(TRcontext *tr); extern void trTileSize(TRcontext *tr, GLint width, GLint height, GLint border); extern void trTileBuffer(TRcontext *tr, GLenum format, GLenum type, GLvoid *image); extern void trImageSize(TRcontext *tr, GLint width, GLint height); extern void trImageBuffer(TRcontext *tr, GLenum format, GLenum type, GLvoid *image); extern void trRowOrder(TRcontext *tr, TRenum order); extern GLint trGet(TRcontext *tr, TRenum param); extern void trOrtho(TRcontext *tr, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); extern void trFrustum(TRcontext *tr, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); extern void trPerspective(TRcontext *tr, GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar ); extern void trBeginTile(TRcontext *tr); extern int trEndTile(TRcontext *tr); extern void trRasterPos3f(TRcontext *tr, GLfloat x, GLfloat y, GLfloat z); #ifdef __cplusplus } #endif #endif therion/loch/lxWX.cxx0000644000076400010400000002512210537464734015657 0ustar userAdministrators#include "lxWX.h" #ifndef LXDEPCHECK #include #include #include #include #endif wxStaticBox * lxStaticBox; wxStaticBoxSizer * lxStaticBoxSizer; wxBoxSizer * lxBoxSizer; wxGridSizer * lxGridSizer; wxFlexGridSizer * lxFlexGridSizer; wxGridBagSizer * lxGBSizer; wxRadioButton * lxRadioBtn; wxCheckBox * lxCheckBox; wxPanel * lxPanel; wxSize lxSize; wxPoint lxPoint; lxDoubleValidator::lxDoubleValidator(double * val, const double vmin, const double vmax, const wxChar * fmt) : wxValidator() { this->m_variable = val; this->m_vMin = vmin; this->m_vMax = vmax; this->m_fmt = fmt; } lxDoubleValidator::lxDoubleValidator(const lxDoubleValidator & val) : wxValidator() { Copy(val); } bool lxDoubleValidator::Copy(const lxDoubleValidator& val) { this->m_variable = val.m_variable; this->m_vMin = val.m_vMin; this->m_vMax = val.m_vMax; this->m_fmt = val.m_fmt; wxValidator::Copy(val); return TRUE; } lxDoubleValidator::~lxDoubleValidator() { } bool lxDoubleValidator::Validate(wxWindow * WXUNUSED(parent)) { double tmp; if( !CheckValidator() ) return FALSE; if (!((wxTextCtrl *)m_validatorWindow)->GetValue().ToDouble(&tmp)) { // TODO: MSGBox saying something about the range ((wxTextCtrl *)this->m_validatorWindow)->SetSelection(-1, -1); this->m_validatorWindow->SetFocus(); return FALSE; } if ((tmp < this->m_vMin) || (tmp > this->m_vMax)) { ((wxTextCtrl *)this->m_validatorWindow)->SetSelection(-1, -1); this->m_validatorWindow->SetFocus(); return FALSE; } return TRUE; } bool lxDoubleValidator::TransferToWindow() { if (!CheckValidator()) return FALSE; ((wxTextCtrl *) m_validatorWindow)->SetValue(wxString::Format(this->m_fmt, *this->m_variable)); return TRUE; } bool lxDoubleValidator::TransferFromWindow() { if (((wxTextCtrl *)m_validatorWindow)->GetValue().ToDouble(this->m_variable)) { if (*this->m_variable < this->m_vMin) *this->m_variable = this->m_vMin; if (*this->m_variable > this->m_vMax) *this->m_variable = this->m_vMax; } return TRUE; } lxRadioBtnValidator::lxRadioBtnValidator(long * val, const long optval) : wxValidator() { this->m_variable = val; this->m_variableValue = optval; } lxRadioBtnValidator::lxRadioBtnValidator(const lxRadioBtnValidator & val) : wxValidator() { Copy(val); } bool lxRadioBtnValidator::Copy(const lxRadioBtnValidator& val) { this->m_variable = val.m_variable; this->m_variableValue = val.m_variableValue; wxValidator::Copy(val); return TRUE; } lxRadioBtnValidator::~lxRadioBtnValidator() { } bool lxRadioBtnValidator::Validate(wxWindow * WXUNUSED(parent)) { if( !CheckValidator() ) return FALSE; return TRUE; } bool lxRadioBtnValidator::TransferToWindow() { if (!CheckValidator()) return FALSE; ((wxRadioButton *) m_validatorWindow)->SetValue((*this->m_variable) == this->m_variableValue); return TRUE; } bool lxRadioBtnValidator::TransferFromWindow() { if (((wxRadioButton *) m_validatorWindow)->GetValue()) *this->m_variable = this->m_variableValue; return TRUE; } void lxAdjustBitmapRGB(size_t s, unsigned char * d) { unsigned char * x; size_t i = 0; x = d; while ((i + 3) < s) { if (x[2] >= 0x80) { if ((abs(x[0] - x[2]) < 0x10) && (abs(x[0] - x[1]) < 0x10)) { x[0] -= 0x0C; x[1] -= 0x0C; } } else { if ((abs(x[0] - x[2]) < 0x10) && (abs(x[0] - x[1]) < 0x10)) { x[2] += 0x0C; } } x += 3; i += 3; } } lxCRC32::lxCRC32() { this->m_prevCrc = 0; this->Initialize(); } void lxCRC32::Initialize() { this->m_crcStr = _T(""); } bool lxCRC32::Changed() { unsigned long crc = this->Calculate(); bool r; r = (this->m_prevCrc != crc); this->m_prevCrc = crc; return r; } void lxCRC32::AddInteger(long var) { this->m_crcStr += wxString::Format(_("%ld"), var); } void lxCRC32::AddReal(double dbl) { this->m_crcStr += wxString::Format(_("%.14e"), dbl); } void lxCRC32::AddString(wxString sss) { this->m_crcStr += sss; } static unsigned long lxCrc32Table[] = { 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L, 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L, 0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL, 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L, 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L, 0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L, 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL, 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L, 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL, 0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L, 0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L, 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L, 0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL, 0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL, 0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L, 0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL, 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L, 0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L, 0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L, 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL, 0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L, 0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L, 0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL, 0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L, 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L, 0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L, 0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L, 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L, 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL, 0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL, 0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L, 0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L, 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL, 0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL, 0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L, 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL, 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L, 0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL, 0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L, 0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL, 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L, 0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L, 0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL, 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L, 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L, 0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L, 0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L, 0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L, 0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L, 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL, 0x2d02ef8dL }; unsigned long lxCRC32::Calculate() { unsigned long i; unsigned long crc32val; size_t len = this->m_crcStr.Length() * sizeof(wxChar); const unsigned char * s = (const unsigned char *) this->m_crcStr.GetData(); crc32val = 0; for (i = 0; i < len; i++) { crc32val = lxCrc32Table[(crc32val ^ s[i]) & 0xff] ^ (crc32val >> 8); } return crc32val; } lxTBoxPos::lxTBoxPos(wxWindow * tool, wxWindow * frame, int corner, int xOffset, int yOffset) { this->Init(tool, frame, corner, xOffset, yOffset); } lxTBoxPos::lxTBoxPos() { this->Init(NULL, NULL, 0, 0, 0); } void lxTBoxPos::Init(wxWindow * tool, wxWindow * frame, int corner, int xOffset, int yOffset) { this->m_corner = corner; this->m_xOffset = xOffset; this->m_yOffset = yOffset; this->m_winFrame = frame; this->m_winTool = tool; } void lxTBoxPos::Save() { if ((this->m_winFrame == NULL) || (this->m_winTool == NULL)) return; int fw, fh, fx, fy, tw, th, tx, ty, nc; double cdist, mdist; this->m_winFrame->GetSize(& fw, & fh); this->m_winFrame->GetPosition(& fx, & fy); this->m_winTool->GetSize(& tw, & th); this->m_winTool->GetPosition(& tx, & ty); nc = 0; cdist = hypot(fx - tx, fy - ty); mdist = cdist; cdist = hypot(fx + fw - tx - tw, fy - ty); if (cdist < mdist) {mdist = cdist; nc = 1;} cdist = hypot(fx + fw - tx - tw, fy + fh - ty - th); if (cdist < mdist) {mdist = cdist; nc = 2;} cdist = hypot(fx - tx, fy + fh - ty - th); if (cdist < mdist) {mdist = cdist; nc = 3;} this->m_corner = nc; if (((wxFrame*)this->m_winFrame)->IsFullScreen() && ((nc == 1) || (nc == 4))) { ty += this->m_fsOffset; } switch (nc) { case 1: this->m_xOffset = fx + fw - tx - tw; this->m_yOffset = ty - fy; break; case 2: this->m_xOffset = fx + fw - tx - tw; this->m_yOffset = fy + fh - ty - th; break; case 3: this->m_xOffset = tx - fx; this->m_yOffset = fy + fh - ty - th; break; default: this->m_xOffset = tx - fx; this->m_yOffset = ty - fy; break; } } void lxTBoxPos::Restore() { if ((this->m_winFrame == NULL) || (this->m_winTool == NULL)) return; int fw, fh, fx, fy, tw, th, tx, ty, sx, sy; wxDisplaySize(& sx, & sy); this->m_winFrame->GetSize(& fw, & fh); this->m_winFrame->GetPosition(& fx, & fy); this->m_winTool->GetSize(& tw, & th); this->m_winTool->GetPosition(& tx, & ty); if (((wxFrame*)this->m_winFrame)->IsFullScreen() && ((this->m_corner == 1) || (this->m_corner == 4))) { fy -= this->m_fsOffset; } switch (this->m_corner) { case 1: tx = fx + fw - this->m_xOffset - tw; ty = fy + this->m_yOffset; break; case 2: tx = fx + fw - this->m_xOffset - tw; ty = fy + fh - this->m_yOffset - th; break; case 3: tx = fx + this->m_xOffset; ty = fy + fh - this->m_yOffset - th; break; default: tx = fx + this->m_xOffset; ty = fy + this->m_yOffset; break; } sx -= tw; sy -= th; if (tx < 0) tx = 0; if (tx > sx) tx = sx; if (ty < 0) ty = 0; if (ty > sy) ty = sy; this->m_winTool->Move(tx, ty); //this->Save(); } void lxTBoxPos::Set(int corner, int xOffset, int yOffset) { this->m_corner = corner; this->m_xOffset = xOffset; this->m_yOffset = yOffset; } int lxTBoxPos::m_fsOffset(0); therion/loch/lxWX.h0000644000076400010400000001024710763712120015270 0ustar userAdministrators#ifndef lxWX_h #define lxWX_h // Standard libraries #ifndef LXDEPCHECK #include #include #include #include #if !wxCHECK_VERSION(2,7,0) #define wxFD_OVERWRITE_PROMPT wxOVERWRITE_PROMPT #define wxFD_SAVE wxSAVE #endif #endif //LXDEPCHECK - standart libraries #ifdef __WXGTK__ #define lxBORDER 3 #else #define lxBORDER 5 #endif #define lxFStaticText(ID) ((wxStaticText *)FindWindow(ID)) #define lxFRadioBtn(ID) ((wxRadioButton *)FindWindow(ID)) #define lxFCheckBox(ID) ((wxCheckBox *)FindWindow(ID)) #define lxFButton(ID) ((wxButton *)FindWindow(ID)) #define lxFTextCtrl(ID) ((wxTextCtrl*)FindWindow(ID)) #define lxFSpinCtrl(ID) ((wxSpinCtrl*)FindWindow(ID)) #define lxFSlider(ID) ((wxSlider*)FindWindow(ID)) #define lxFChoice(ID) ((wxChoice*)FindWindow(ID)) #define lxNOTTOP wxBOTTOM | wxLEFT | wxRIGHT #define lxNOTLEFT wxBOTTOM | wxTOP | wxRIGHT void lxAdjustBitmapRGB(size_t s, unsigned char * d); #ifdef LXWIN32 #define lxADJUSTRGB(s, n) lxAdjustBitmapRGB(s, n) #else #define lxADJUSTRGB(s, n) #endif extern wxStaticBox * lxStaticBox; extern wxStaticBoxSizer * lxStaticBoxSizer; extern wxBoxSizer * lxBoxSizer; extern wxGridSizer * lxGridSizer; extern wxGridBagSizer * lxGBSizer; extern wxFlexGridSizer * lxFlexGridSizer; extern wxRadioButton * lxRadioBtn; extern wxCheckBox * lxCheckBox; extern wxPanel * lxPanel; extern wxSize lxSize; extern wxPoint lxPoint; #define lxSETWWIDTH(ID, fact) \ lxSize = FindWindow(ID)->GetSize(); \ lxSize.SetWidth((int) (lxSize.GetHeight() * fact)); \ FindWindow(ID)->SetSizeHints(lxSize, lxSize); #define lxSETWWH(ID, fact, fact2) \ lxSize = FindWindow(ID)->GetSize(); \ lxSize.SetWidth((int) (lxSize.GetHeight() * fact)); \ lxSize.SetHeight((int) (lxSize.GetHeight() * fact * fact2)); \ FindWindow(ID)->SetSizeHints(lxSize, lxSize); class lxTBoxPos { int m_xOffset, m_yOffset, m_corner; wxWindow * m_winTool, * m_winFrame; public: static int m_fsOffset; lxTBoxPos(); lxTBoxPos(wxWindow * tool, wxWindow * frame, int corner, int xOffset, int yOffset); void Init(wxWindow * tool, wxWindow * frame, int corner = 0, int xOffset = 0, int yOffset = 0); void Set(int corner, int xOffset, int yOffset); void Save(); void Restore(); }; class lxCRC32 { public: unsigned long m_prevCrc; wxString m_crcStr; lxCRC32(); void Initialize(); void AddInteger(long var); void AddReal(double dbl); void AddString(wxString sss); unsigned long Calculate(); bool Changed(); }; class lxDoubleValidator : public wxValidator { public: lxDoubleValidator(double * val, const double vmin, const double vmax, const wxChar * fmt = _T("%.0f")); lxDoubleValidator(const lxDoubleValidator & val); ~lxDoubleValidator(); virtual wxObject *Clone() const { return new lxDoubleValidator(*this); } bool Copy(const lxDoubleValidator& val); virtual bool Validate(wxWindow *parent); virtual bool TransferToWindow(); virtual bool TransferFromWindow(); protected: double * m_variable; double m_vMin, m_vMax; const wxChar * m_fmt; bool CheckValidator() const { wxCHECK_MSG( m_validatorWindow, FALSE, _T("No window associated with validator") ); wxCHECK_MSG( m_validatorWindow->IsKindOf(CLASSINFO(wxTextCtrl)), FALSE, _T("wxNumberValidator is only for wxTextCtrl's") ); wxCHECK_MSG( ((wxTextCtrl *)m_validatorWindow)->IsSingleLine(), FALSE, _T("Multiline wxTextCtrl not allowed yet") ); return TRUE; } }; class lxRadioBtnValidator : public wxValidator { public: lxRadioBtnValidator(long * val, const long optval); lxRadioBtnValidator(const lxRadioBtnValidator & val); ~lxRadioBtnValidator(); virtual wxObject *Clone() const { return new lxRadioBtnValidator(*this); } bool Copy(const lxRadioBtnValidator& val); virtual bool Validate(wxWindow *parent); virtual bool TransferToWindow(); virtual bool TransferFromWindow(); protected: long * m_variable; long m_variableValue; bool CheckValidator() const { wxCHECK_MSG( m_validatorWindow, FALSE, _T("No window associated with validator") ); wxCHECK_MSG( m_validatorWindow->IsKindOf(CLASSINFO(wxRadioButton)), FALSE, _T("wxRadioBtnValidator is only for wxRadioButtons") ); return TRUE; } }; #endif therion/loch/makeconfig.pl0000644000076400010400000000146610251676250016665 0ustar userAdministrators# read make file open(MF,"Makefile"); @mflines = ; close(MF); # backup makefile open(MFB,">Makefile~"); print MFB @mflines; close(MFB); open(MF,">Makefile"); $insidecfg = 0; $insideprm = 0; $config = $ARGV[0]; $param = $ARGV[1]; foreach $ln (@mflines) { if ($ln =~ /^\s*\#\s*$config\s+CONFIG\s*$/) { $insidecfg = 1; } if ($ln =~ /^\s*\#\s*$config\s+ENDCONFIG\s*$/) { $insidecfg = 0; } if ($insidecfg && ($ln =~ /^\s*\#\s*$config\s+$param\s*$/)) { $insideprm = 1; } elsif ($insidecfg && ($ln =~ /^\s*\#\s*$config\s+\S+\s*$/)) { $insideprm = 0; } if ($ln =~ /\S/) { if ($insidecfg) { if ($insideprm) { $ln =~ s/^\s*\#\#//; } else { if ($ln =~ /^\s*[^\#]/) { $ln = "##$ln"; } } } } print MF $ln; } close(MF); therion/loch/makedepend.pl0000644000076400010400000000035510251676250016653 0ustar userAdministrators# read make file open(MF,"Makefile"); @mflines = ; close(MF); # backup makefile open(MFB,">Makefile~"); print MFB @mflines; close(MFB); foreach $ln (@mflines) { print $ln; if ($ln =~ /^\s*\#\s*DEPENDENCIES/) { last; } } therion/loch/Makefile0000644000076400010400000001421612270034364015657 0ustar userAdministrators# common therion objects CMNOBJECTS = \ lxTR.o lxOGLFT.o lxSetup.o lxRender.o lxWX.o \ lxImgIO.o lxLRUD.o lxFile.o lxSTree.o \ lxData.o lxMath.o lxSView.o lxSScene.o \ lxGUI.o lxGLC.o lxOptDlg.o lxAboutDlg.o \ img.o # VTKVERSION = 5.4 VTKVERSION = $(shell tclsh ./getvtkver.tcl version) # VTKPATH = /usr/local/include/vtk-$(VTKVERSION) VTKPATH = $(shell tclsh ./getvtkver.tcl incpath) # VTKLIBPATH = /usr/local/lib/vtk-$(VTKVERSION) VTKLIBPATH = $(shell tclsh ./getvtkver.tcl libpath) VTKLIBS = -lvtkHybrid -lvtkImaging -lvtkIO -lvtkGraphics -lvtkFiltering -lvtkCommon -lvtkjpeg -lvtkpng -lvtkzlib -lvtksys -lfreetype POSTMAKE = STRIPFLAG = -s # PLATFORM CONFIG # PLATFORM LINUX ##CXX = c++ ##CC = gcc ##POBJECTS = lxR2P.o ##CXXPFLAGS = -DLXLINUX $(shell wx-config --cxxflags) -Wno-deprecated $(shell freetype-config --cflags) -I$(VTKPATH) ##CCPFLAGS = -DLXLINUX $(shell wx-config --cflags) ##LXLIBDIR = linux ##PLIBS = $(shell wx-config --libs --gl-libs) -L$(VTKLIBPATH) $(VTKLIBS) -lGLU -lpthread -lz ##LXPLATFORM = LINUX # PLATFORM DEBIAN CXX = c++ CC = gcc POBJECTS = lxR2P.o VTKLIBS = -lvtkHybrid -lvtkImaging -lvtkIO -lvtkGraphics -lvtkFiltering -lvtkCommon -lfreetype CXXPFLAGS = -DLXLINUX $(shell wx-config --cxxflags) -Wno-deprecated $(shell freetype-config --cflags) -I$(VTKPATH) CCPFLAGS = -DLXLINUX $(shell wx-config --cflags) LXLIBDIR = linux PLIBS = $(shell wx-config --libs --gl-libs) -L$(VTKLIBPATH) $(VTKLIBS) -lGLU -lpthread -lz LXPLATFORM = LINUX # PLATFORM WIN32 ##CXX = c++ ##CC = gcc ##POBJECTS = loch.res lxR2D.o getline.o ##CXXPFLAGS = -W -Wall -DLXWIN32 $(shell wx-config --static --cxxflags) $(shell freetype-config --cflags) -I$(VTKPATH) -Wno-deprecated ##CCPFLAGS = -W -Wall -DLXWIN32 $(shell wx-config --static --cflags) ##LXLIBDIR = mingw ##PLIBS = $(shell freetype-config --libs) $(shell wx-config --static --libs --gl-libs) -L$(VTKLIBPATH) $(VTKLIBS) ##LXPLATFORM = WIN32 ##STRIPFLAG = -static-libgcc -static -s # PLATFORM MACOSX ##CXX = c++ ##CC = cc ##POBJECTS = ##CXXPFLAGS = -W -Wall -DLXMACOSX $(shell wx-config --cxxflags) $(shell freetype-config --cflags) -I$(VTKPATH) -Wno-deprecated -I/usr/X11R6/include -I/usr/X11R6/include/freetype2 ##CCPFLAGS = -W -Wall -DLXMACOSX $(shell wx-config --cflags) -I/usr/X11R6/include ##LXLIBDIR = ##PLIBS = -lz -L/usr/X11R6/lib $(shell wx-config --libs --gl-libs) -L$(VTKLIBPATH) $(VTKLIBS) ##POSTMAKE = cp -f ./loch ./loch.app/Contents/MacOS ##STRIPFLAG = # PLATFORM ENDCONFIG # BUILD CONFIG # BUILD OZONE ##CCBFLAGS = -O3 ##CXXBFLAGS = -O3 ##LDBFLAGS = $(STRIPFLAG) # BUILD OXYGEN ##CCBFLAGS = -O2 ##CXXBFLAGS = -O2 ##LDBFLAGS = $(STRIPFLAG) # BUILD RELEASE CCBFLAGS = CXXBFLAGS = LDBFLAGS = $(STRIPFLAG) # BUILD DEBUG ##CCBFLAGS = -ggdb ##CXXBFLAGS = -ggdb -DLXDEBUG ##LDBFLAGS = # BUILD ENDCONFIG # compiler settings CXXFLAGS = -Wall -D_GNU_SOURCE -DLOCH $(CXXPFLAGS) $(CXXBFLAGS) CCFLAGS = -Wall -D_GNU_SOURCE -DLOCH $(CCPFLAGS) $(CCBFLAGS) OBJECTS = $(POBJECTS) $(CMNOBJECTS) # linker settings LIBS = $(PLIBS) LDFLAGS = $(LDBFLAGS) .SUFFIXES: .SUFFIXES: .cxx .o .h .c .cxx.o: $(CXX) -c $(CXXFLAGS) -o $@ $< .c.o: $(CC) -c $(CCFLAGS) -o $@ $< all: loch hlp hlp: make -C ./help loch: $(OBJECTS) $(CXX) -o loch -Wall $(OBJECTS) $(LIBS) $(LDFLAGS) $(POSTMAKE) loch.res: loch.rc loch.ico windres --include-dir e:/MSVCProjects/wxWidgets-2.6.0/include -i loch.rc -I rc -o loch.res -O coff graphs: dot -Tps graph-vispipe.dot -o graph-vispipe.ps depend: perl makedepend.pl > Makefile.dep perl maketest.pl Makefile.dep perl makefile.pl mv Makefile.dep Makefile $(CXX) -DLXDEPCHECK -DLOCH -MM *.cxx >> Makefile $(CC) -DLXDEPCHECK -DLOCH -MM *.c >> Makefile config-debug: perl makeconfig.pl BUILD DEBUG test-release: zip -9 loch.zip loch.exe test.th test.jpg thconfig config-release: perl makeconfig.pl BUILD RELEASE config-oxygen: perl makeconfig.pl BUILD OXYGEN config-ozone: perl makeconfig.pl BUILD OZONE config-linux: perl makeconfig.pl PLATFORM LINUX config-debian: perl makeconfig.pl PLATFORM DEBIAN config-win32: perl makeconfig.pl PLATFORM WIN32 config-macosx: perl makeconfig.pl PLATFORM MACOSX clean: perl makefile.pl rm -q *~ perl makefile.pl rm -q help/*/*~ perl makefile.pl rm -q loch.exe perl makefile.pl rm -q loch perl makefile.pl rm -q loch.app/Contents/MacOS/loch perl makefile.pl rm -q *.o perl makefile.pl rm -q *.log perl makefile.pl rm -q core perl makefile.pl rmdir -q .xvpics perl makefile.pl rm -q *.bmp perl makefile.pl rm -q *.ppm perl makefile.pl rm -q *.zip perl makefile.pl rm -q *.pdf perl makefile.pl rm -q *.png # DEPENDENCIES lxAboutDlg.o: lxAboutDlg.cxx lxWX.h icons/about.xpm ../thversion.h lxData.o: lxData.cxx lxData.h lxMath.h lxImgIO.h lxFile.h lxLRUD.h lxFile.o: lxFile.cxx lxFile.h lxMath.h img.h lxGLC.o: lxGLC.cxx lxGLC.h lxMath.h lxGUI.h lxData.h lxImgIO.h lxFile.h \ lxSetup.h lxSView.h lxWX.h lxFNT6x13_bdf.h lxFNT10x20_bdf.h \ lxFNTFreeSans_ttf.h lxRender.h lxTR.h lxGUI.o: lxGUI.cxx lxGUI.h lxGLC.h lxMath.h lxData.h lxImgIO.h lxFile.h \ lxSetup.h lxRender.h lxOptDlg.h lxAboutDlg.h lxSView.h lxWX.h \ lxSScene.h icons/open.xpm icons/render.xpm icons/reload.xpm \ icons/stereo.xpm icons/rotation.xpm icons/lockrot.xpm icons/fit.xpm \ icons/home.xpm icons/rendersetup.xpm icons/plan.xpm icons/profile.xpm \ icons/fullscreen.xpm icons/orto.xpm icons/camera.xpm icons/scene.xpm \ icons/viscline.xpm icons/vissurface.xpm icons/visbbox.xpm \ icons/viswalls.xpm icons/visinds.xpm loch.xpm lxImgIO.o: lxImgIO.cxx lxImgIO.h lxLRUD.o: lxLRUD.cxx lxLRUD.h lxMath.h lxMath.o: lxMath.cxx lxMath.h lxOGLFT.o: lxOGLFT.cxx lxOGLFT.h lxOptDlg.o: lxOptDlg.cxx lxWX.h lxGUI.h lxGLC.h lxMath.h lxRender.o: lxRender.cxx lxRender.h lxWX.h lxGLC.h lxMath.h lxGUI.h \ lxSetup.h lxData.h lxImgIO.h lxFile.h lxTR.h lxSScene.o: lxSScene.cxx lxSScene.h lxWX.h lxGUI.h lxGLC.h lxMath.h \ lxSetup.h lxData.h lxImgIO.h lxFile.h loch.xpm lxSView.o: lxSView.cxx lxSView.h lxWX.h lxGUI.h lxGLC.h lxMath.h \ lxSetup.h lxData.h lxImgIO.h lxFile.h loch.xpm lxSetup.o: lxSetup.cxx lxSetup.h lxData.h lxMath.h lxImgIO.h lxFile.h lxWX.o: lxWX.cxx lxWX.h getline.o: getline.c img.o: img.c img.h lxR2D.o: lxR2D.c lxR2D.h lxR2P.o: lxR2P.c lxR2P.h lxTR.o: lxTR.c lxTR.h therion/loch/makefile.pl0000644000076400010400000000175610251676250016341 0ustar userAdministratorsuse File::Glob; use File::Copy; use File::Path; if ($ARGV[0] =~ /^\s*cp\s*$/i) { copy($ARGV[1],$ARGV[2]) || die("$0: error -- cp $ARGV[1] -> $ARGV[2]\n"); } elsif ($ARGV[0] =~ /^\s*mv\s*$/i) { copy($ARGV[1],$ARGV[2]) || die("$0: error -- cp $ARGV[1] -> $ARGV[2]\n"); unlink($ARGV[1]) || warn("$0: can't delete $ARGV[1]\n");; } elsif ($ARGV[0] =~ /^\s*rm\s*$/i) { $dum = shift @ARGV; $quietdel = ''; if ($ARGV[0] =~ /^\s*\-q\s*$/) { $dum = shift @ARGV; $quietdel = 1; } foreach $f (@ARGV) { if ($f =~ /\*/) { @fl = glob($f); foreach $ff (@fl) { unlink($ff) || $quietdel || warn("$0: can't delete $ff\n"); } } else { unlink($f) || $quietdel || warn("$0: can't delete $f\n"); } } } elsif ($ARGV[0] =~ /^\s*rmdir\s*$/i) { $dum = shift @ARGV; $quietdel = ''; if ($ARGV[0] =~ /^\s*\-q\s*$/) { $dum = shift @ARGV; $quietdel = 1; } foreach $f (@ARGV) { rmtree($f) || $quietdel || warn("$0: can't delete $f\n");; } } therion/loch/maketest.pl0000644000076400010400000000007410251676250016371 0ustar userAdministratorsif ((-s $ARGV[0]) > 0) { exit 0 } else { die "error" } therion/loch/README0000644000076400010400000000047610507526040015100 0ustar userAdministratorsTo compile loch, you will need following packages: freetype (version 2 and above, freetype-config must work) wxWidgets (version 2.6 and above, wx-config must work) VTK (version 5.0 and above installed at /usr/local or modify VTKPATH and VTKLIBPATH in Makefile) Then following should work: make config-linux maketherion/loch/TODO0000644000076400010400000000174111105003560014674 0ustar userAdministratorsTODO: + stations signs + labels + label entrances and fixed stations + multiple color modes + measure toolbox + survey tree + animation toolbox + multiple surfaces support + finish SK translation + fix Mac OS X built + search for help and localization files under Linux + scalebar to OpenGL list + channel brightness adjustment in stereo mode + station labeling + PNG texture support + color schemes (altitude, surveys, date) + add closed file mode + File->Close + escape in full-screen mode from toolboxes BUGS: + inactive loading file window + radiobutton not active when rotation MAC OS X: a) Udelat z ni bundlovanou aplikaci b) Dodat Info.plist, do kteryho se napisi typy souboru, ktery to ma zrat pretazenim, jaky maji mit obrazek (asi mysli ikonu), koncovku, file type, atd. c) Doprogramovat podporu pro tohle aby pri pretazeni se event zkonvertoval na udalost pro otevreni souboru aniz by te to otravovalo s oknem pro jeho vyber. therion/makearchive.pl0000644000076400010400000000074111046571436016112 0ustar userAdministratorsif (open(VFL,"thversion.h")) { @verfl = ; $verfl[0] =~ /(\d+)\.(\d+)(\.(\d+))?/; ($v1,$v2,$v3) = ($1,$2,$4); if (!$v3) { $v3 = 0; } close(VFL); $v3++; } else { $v1 = 0; $v2 = 0; $v3 = 0; } open(VFL,">thversion.h"); print VFL "#define THVERSION \"$v1.$v2.$v3\"\n"; close(VFL); open(VFL,">thbook/version.tex"); print VFL "$v1.$v2.$v3"; close(VFL); system("tar -cvf ../therion-$v1.$v2.$v3.tar -C .. therion"); system("gzip ../therion-$v1.$v2.$v3.tar"); therion/makearchive2.pl0000644000076400010400000000037211046571464016175 0ustar userAdministratorsif (open(VFL,"thversion.h")) { @verfl = ; $verfl[0] =~ /(\d+)\.(\d+)(\.(\d+))?/; $version = $&; close(VFL); } else { $version = "0.0"; } system("tar -cvf ../therion-$version.tar -C .. therion"); system("gzip ../therion-$version.tar"); therion/makebinary.pl0000644000076400010400000000206310576400772015755 0ustar userAdministrators$platform = lc($ARGV[0]); #($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = gmtime(time); #$year += 1900; #$mon += 1; #$datestr = sprintf("%04d%02d%02d",$year,$mon,$mday); if (open(VFL,"thversion.h")) { @verfl = ; $verfl[0] =~ /(\d+)\.(\d+)\.(\d+)/; ($v1,$v2,$v3) = ($1,$2,$3); close(VFL); } else { $v1 = 0; $v2 = 2; $v3 = 1; } $dd = "therion-temp"; $d = "../$dd"; system("mkdir $d"); system("cp ./therion $d"); system("cp ./install $d"); system("cp ./therion.ini $d"); system("cp ./xtherion/xtherion $d"); system("cp ./xtherion/xtherion.ini $d"); system("cp ./thbook/thbook.pdf $d"); system("cp ./man/therion.1 $d"); system("cp ./man/xtherion.1 $d"); system("cp ./README $d"); system("cp ./COPYING $d"); if ($platform eq "win32") { system("zip -jr ../therion-$platform-$v1.$v2.$v3.zip $d"); } else { system("tar -cvf ../therion-linux.i386-$v1.$v2.$v3.tar -C $d install therion therion.ini xtherion xtherion.ini thbook.pdf therion.1 xtherion.1 README COPYING"); system("gzip -f ../therion-linux.i386-$v1.$v2.$v3.tar"); } system("rm -R $d"); therion/makeconfig.pl0000644000076400010400000000146610576400772015744 0ustar userAdministrators# read make file open(MF,"Makefile"); @mflines = ; close(MF); # backup makefile open(MFB,">Makefile~"); print MFB @mflines; close(MFB); open(MF,">Makefile"); $insidecfg = 0; $insideprm = 0; $config = $ARGV[0]; $param = $ARGV[1]; foreach $ln (@mflines) { if ($ln =~ /^\s*\#\s*$config\s+CONFIG\s*$/) { $insidecfg = 1; } if ($ln =~ /^\s*\#\s*$config\s+ENDCONFIG\s*$/) { $insidecfg = 0; } if ($insidecfg && ($ln =~ /^\s*\#\s*$config\s+$param\s*$/)) { $insideprm = 1; } elsif ($insidecfg && ($ln =~ /^\s*\#\s*$config\s+\S+\s*$/)) { $insideprm = 0; } if ($ln =~ /\S/) { if ($insidecfg) { if ($insideprm) { $ln =~ s/^\s*\#\#//; } else { if ($ln =~ /^\s*[^\#]/) { $ln = "##$ln"; } } } } print MF $ln; } close(MF); therion/makeconvert.pl0000755000076400010400000000175210576400772016160 0ustar userAdministrators#!/usr/bin/perl @ls = `ls -1 -R`; @flist = (); $cdir = '.'; foreach $ln (@ls) { if ($ln =~ /(.*)\:$/) { $cdir = $1; } elsif ($ln =~ /\S/) { $ln =~ s/^\s+//; $ln =~ s/\s+$//; if ($ln =~ /(\.th$|\.th2$)/) { push @flist, "$cdir/$ln"; } } } foreach $fn (@flist) { open(FL,"$fn"); @fls = ; close(FL); @flso = (); $toconv = 1; $numch = 0; foreach $fln (@fls) { if ($fln =~ /\d\s+station\s+\-name\s+\S+/) { $toconv = 0; } if ($fln =~ /\s+\-id\s+\S+/) { $toconv = 0; } if ($fln =~ /(\s+)\-name(\s+\S+)/) {$numch++}; $fln =~ s/(\s+)\-name(\s+\S+)/\1\-id\2/g; if ($fln =~ /(^\s*)name(\s+\S+\s*$)/) {$numch++}; $fln =~ s/(^\s*)name(\s+\S+\s*$)/\1\id\2/g; if ($fln =~ /(\s+)\-station(\s+\S+)/) {$numch++}; $fln =~ s/(\s+)\-station(\s+\S+)/\1\-name\2/g; push @flso,$fln; } if ($toconv && ($numch > 0)) { print "$fn ($numch changes)\n"; open(FL,">$fn"); print FL "@flso"; close(FL); } }therion/makeconvert2.pl0000755000076400010400000000175610576400772016246 0ustar userAdministrators#!/usr/bin/perl @ls = `ls -1 -R`; @flist = (); $cdir = '.'; foreach $ln (@ls) { if ($ln =~ /(.*)\:$/) { $cdir = $1; } elsif ($ln =~ /\S/) { $ln =~ s/^\s+//; $ln =~ s/\s+$//; if ($ln =~ /(\.th$|\.th2$)/) { push @flist, "$cdir/$ln"; } } } foreach $fn (@flist) { open(FL,"$fn"); @fls = ; close(FL); @flso = (); $toconv = 1; $numch = 0; foreach $fln (@fls) { if ($fln =~ /endcenterline/) { $toconv = 0; } if ($fln =~ /^\s*centerline\s*$/) { $toconv = 0; } if ($fln =~ /^\s*enddata/) { $numch++; $fln =~ s/data/centerline/; } if ($fln =~ /^\s*data\s*$/) { $numch++; $fln =~ s/data/centerline/; } if ($fln =~ /^\s*data\s*(\s+)$/) { if ($1 =~ /^\-/) { $numch++; $fln =~ s/data/centerline/; } } push @flso,$fln; } if ($toconv && ($numch > 0)) { print "$fn ($numch changes)\n"; open(FL,">$fn"); print FL "@flso"; close(FL); } }therion/makedepend.pl0000644000076400010400000000035510576400772015732 0ustar userAdministrators# read make file open(MF,"Makefile"); @mflines = ; close(MF); # backup makefile open(MFB,">Makefile~"); print MFB @mflines; close(MFB); foreach $ln (@mflines) { print $ln; if ($ln =~ /^\s*\#\s*DEPENDENCIES/) { last; } } therion/Makefile0000644000076400010400000013464612270034364014744 0ustar userAdministrators# common therion objects CMNOBJECTS = thdate.o extern/shpopen.o extern/dbfopen.o \ thexception.o thbuffer.o thmbuffer.o thlogfile.o thtmpdir.o thlocale.o \ thparse.o thcmdline.o thconfig.o thinput.o thchenc.o thdatabase.o \ thdataobject.o thdatareader.o thsurvey.o thendsurvey.o thdata.o \ thperson.o thtf.o thtfangle.o thtflength.o thtfpwf.o \ thdataleg.o thobjectname.o thinfnan.o thlayout.o \ thinit.o thdb1d.o thsvxctrl.o thdatastation.o thobjectid.o \ thobjectsrc.o thgrade.o thlibrary.o thgeomag.o thbezier.o \ thexport.o thexporter.o thselector.o extern/img.o \ thexpmodel.o thdb2d00.o thscrapis.o thcs.o thcsdata.o thexptable.o \ thdb2d.o thscrap.o thendscrap.o th2ddataobject.o thdb2dprj.o \ thdb2dpt.o thdb2dlp.o thdb2dab.o thdb2dji.o thdb2dmi.o thdb2dcp.o \ thdb2dxm.o thdb2dxs.o thscraplo.o thscraplp.o thscrapen.o \ thpoint.o thline.o tharea.o thlegenddata.o thmpost.o thsymbolsets.o \ thjoin.o thmap.o thexpmap.o thlayoutln.o thlayoutclr.o thexpsys.o thexpuni.o \ thconvert.o thpdf.o thpdfdbg.o thpdfdata.o thtexfonts.o \ thsymbolset.o thlang.o thmapstat.o thexpdb.o thpic.o thsketch.o thproj.o \ extern/lxMath.o extern/lxFile.o thdb3d.o thsurface.o thimport.o thsvg.o thepsparse.o \ thtrans.o thwarpp.o thwarppt.o thwarppme.o thwarp.o thexpshp.o thattr.o thtex.o \ extern/poly2tri/common/shapes.o extern/poly2tri/sweep/advancing_front.o extern/poly2tri/sweep/sweep.o extern/poly2tri/sweep/cdt.o extern/poly2tri/sweep/sweep_context.o \ therion.o extern/proj4/libproj.a # PLATFORM CONFIG # PLATFORM LINUX ##CXX = g++ ##CC = gcc ##POBJECTS = ##LOCHEXE = loch/loch ##CXXPFLAGS = -DTHLINUX ##CCPFLAGS = -DTHLINUX ##LDPFLAGS = -s ##THPLATFORM = LINUX ##THXTHMKCMD = ./therion # PLATFORM DEBIAN CXX = c++ CC = gcc POBJECTS = LOCHEXE = loch/loch CXXPFLAGS = -DTHLINUX CCPFLAGS = -DTHLINUX LDPFLAGS = -s THPLATFORM = LINUX THXTHMKCMD = ./therion # PLATFORM WIN32 ##CXX = c++ ##CC = gcc ##POBJECTS = extern/getopt.o extern/getopt1.o therion.res extern/getline.o ##LOCHEXE = loch/loch ##CXXPFLAGS = -DTHWIN32 ##CCPFLAGS = -DTHWIN32 ##LDPFLAGS = -static-libgcc -static -s ##THPLATFORM = WIN32 ##THXTHMKCMD = therion # PLATFORM MACOSX ##CXX = c++ ##CC = cc ##LOCHEXE = loch/loch ##POBJECTS = extern/getopt.o extern/getopt1.o extern/getline.o ##CXXPFLAGS = -DTHMACOSX ##CCPFLAGS = -DTHMACOSX ##LDPFLAGS = ##THPLATFORM = MACOSX ##THXTHMKCMD = ./therion # PLATFORM ENDCONFIG # BUILD CONFIG # BUILD OZONE ##CCBFLAGS = -O3 ##CXXBFLAGS = -O3 ##LDBFLAGS = $(LDPFLAGS) # BUILD OXYGEN CCBFLAGS = -O2 CXXBFLAGS = -O2 LDBFLAGS = $(LDPFLAGS) # BUILD RELEASE ##CCBFLAGS = ##CXXBFLAGS = ##LDBFLAGS = $(LDPFLAGS) # BUILD DEBUG ##CCBFLAGS = -ggdb ##CXXBFLAGS = -ggdb -DTHDEBUG ##LDBFLAGS = # BUILD ENDCONFIG # compiler settings CXXFLAGS = -Wall $(CXXPFLAGS) $(CXXBFLAGS) CCFLAGS = -DIMG_API_VERSION=1 -Wall $(CCPFLAGS) $(CCBFLAGS) OBJECTS = $(POBJECTS) $(CMNOBJECTS) # linker settings LIBS = LDFLAGS = $(LDBFLAGS) .SUFFIXES: .cxx .o .h .c .cc .cxx.o: $(CXX) -c $(CXXFLAGS) -o $@ $< .cc.o: $(CXX) -c $(CXXFLAGS) -o $@ $< .c.o: $(CC) -c $(CCFLAGS) -o $@ $< all: therion doc xtherion/xtherion $(LOCHEXE) extern/proj4/libproj.a: extern/proj4/*.c extern/proj4/*.h make -C ./extern/proj4 therion: $(OBJECTS) $(CXX) -Wall -o therion $(OBJECTS) $(LDFLAGS) $(LIBS) therion.res: therion.rc windres -i therion.rc -J rc -o therion.res -O coff init: ./therion --print-init-file > therion.ini install: all tclsh makeinstall.tcl $(THPLATFORM) minor-release: perl makerelease.pl archive: clean perl makearchive2.pl release: clean perl makearchive.pl binary: all doc perl makebinary.pl $(THPLATFORM) depend: perl makedepend.pl > Makefile.dep perl maketest.pl Makefile.dep perl makefile.pl mv Makefile.dep Makefile $(CXX) -MM $(CXXFLAGS) *.cxx >> Makefile library: $(THXTHMKCMD) --print-library-src thlibrarydata.thcfg > thlibrarydata.log $(THXTHMKCMD) --print-xtherion-src > xtherion/therion.tcl perl makelibrary.pl thlibrarydata.log > thlibrarydata.tmp perl maketest.pl thlibrarydata.tmp perl makefile.pl mv thlibrarydata.tmp thlibrarydata.cxx thlibrarydata.cxx: thlang/texts.txt make library xtherion/xtherion: xtherion/*.tcl make -C ./xtherion loch/loch: loch/*.h loch/*.cxx loch/*.c make -C ./loch doc: thbook/thbook.pdf thbook: thbook/thbook.pdf samples: samples.doc/index.tex samples.doc/index.tex: make -C ./samples thbook/thbook.pdf: thbook/*.tex make -C ./thbook clean: make -C ./xtherion clean make -C ./loch clean make -C ./samples clean make -C ./extern/proj4 clean perl makefile.pl rm -q therion ./xtherion/xtherion ./xtherion/xtherion.tcl therion.exe *~ *.log *.o thchencdata/*~ .xtherion.dat ./xtherion/ver.tcl perl makefile.pl rm -q xtherion/*~ .xth_thconfig_xth xtherion/screendump thlang/*~ perl makefile.pl rm -q extern/*.o extern/*~ extern/poly2tri/common/*.o extern/poly2tri/sweep/*.o samples/*~ samples/*.log perl makefile.pl rm -q symbols.html therion.res perl makefile.pl rm -q tri/*.o tri/*~ perl makefile.pl rm -q tex/*~ perl makefile.pl rm -q mpost/*~ examples/*~ examples/therion.log perl makefile.pl rm -q core symbols.xhtml cave.kml perl makefile.pl rm -q data.3d data.svx data.pos data.pts data.err data.plt perl makefile.pl rm -q cave.3d cave.lox cave.thm cave.pdf cave.sql cave.xhtml therion.tcl cave_a.pdf cave_m.pdf cave.vrml cave.wrl cave.3dmf cave.svg cave.tlx perl makefile.pl rm -q ./thbook/*~ ./thbook/thbook.log ./thbook/thbook.pdf ./lib/*~ ./mpost/*~ ./tex/*~ perl makefile.pl rmdir -q doc thTMPDIR samples.doc symbols cave.shp tests/.doc thmpost.h: mpost/*.mp make -C ./mpost thsymbolsetlist.h: thsymbolsetlist.pl mpost/thTrans.mp perl thsymbolsetlist.pl thtex.h: tex/*.tex make -C ./tex thcsdata.h: thcsdata.tcl tclsh thcsdata.tcl update: make -C ./thlang update unixify: clean tclsh makeunixify.tcl thlangdata.cxx: thlang/texts.txt make -C ./thlang config-debug: perl makeconfig.pl BUILD DEBUG make -C ./loch config-debug config-release: perl makeconfig.pl BUILD RELEASE make -C ./loch config-release config-oxygen: perl makeconfig.pl BUILD OXYGEN make -C ./loch config-oxygen config-ozone: perl makeconfig.pl BUILD OZONE make -C ./loch config-ozone config-debian: perl makeconfig.pl PLATFORM DEBIAN make -C ./loch config-debian config-linux: perl makeconfig.pl PLATFORM LINUX make -C ./loch config-linux config-win32: perl makeconfig.pl PLATFORM WIN32 make -C ./loch config-win32 config-macosx: perl makeconfig.pl PLATFORM MACOSX make -C ./loch config-macosx # external sources extern/lxMath.o: loch/lxMath.h loch/lxMath.cxx $(CXX) -c $(CXXFLAGS) -o extern/lxMath.o loch/lxMath.cxx extern/lxFile.o: loch/lxFile.h loch/lxFile.cxx $(CXX) -c $(CXXFLAGS) -o extern/lxFile.o loch/lxFile.cxx extern/getopt.o: extern/getopt.c extern/getopt.h extern/getopt1.o: extern/getopt1.c extern/img.o: extern/img.c extern/img.h extern/poly2tri/common/shapes.o: extern/poly2tri/common/shapes.cc extern/poly2tri/common/shapes.h extern/poly2tri/sweep/advancing_front.o: extern/poly2tri/sweep/advancing_front.cc extern/poly2tri/sweep/sweep.o: extern/poly2tri/sweep/sweep.cc extern/poly2tri/sweep/cdt.o: extern/poly2tri/sweep/cdt.cc extern/poly2tri/sweep/sweep_context.o: extern/poly2tri/sweep/sweep_context.cc # DEPENDENCIES th2ddataobject.o: th2ddataobject.cxx th2ddataobject.h thdataobject.h \ thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h \ thdataleg.h thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h \ thexception.h thsymbolset.h thsymbolsetlist.h tharea.o: tharea.cxx tharea.h th2ddataobject.h thdataobject.h \ thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h \ thdataleg.h thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h \ thexception.h thexpmap.h thexport.h thsymbolset.h thsymbolsetlist.h \ thlayout.h thlocale.h thlang.h thlangdata.h thline.h thattr.o: thattr.cxx thattr.h thmbuffer.h thchenc.h thchencdata.h \ thparse.h thbuffer.h extern/shapefil.h thexception.h therion.h thbezier.o: thbezier.cxx thbezier.h thbuffer.o: thbuffer.cxx thbuffer.h thchenc.o: thchenc.cxx thchenc.h thchencdata.h thparse.h thbuffer.h \ thmbuffer.h thchencdata.cxx therion.h thexception.h thchencdata.o: thchencdata.cxx thcmdline.o: thcmdline.cxx thcmdline.h therion.h thlogfile.h thbuffer.h \ thconfig.h thmbuffer.h thinput.h thparse.h thexporter.h thexport.h \ thobjectsrc.h thselector.h thtmpdir.h extern/getopt.h thconfig.o: thconfig.cxx thconfig.h thbuffer.h thmbuffer.h thinput.h \ thparse.h thexporter.h thexport.h thobjectsrc.h thselector.h therion.h \ thlang.h thlangdata.h thchenc.h thchencdata.h thexception.h thdatabase.h \ thdataobject.h thperson.h thdate.h thdataleg.h thobjectname.h thinfnan.h \ thdb1d.h thobjectid.h thdb3d.h loch/lxMath.h thattr.h thdb2d.h \ thdb2dprj.h thmapstat.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thdatareader.h \ thcsdata.h thproj.h thlogfile.h thinit.h thgeomag.h thgeomagdata.h \ thlayout.h thsymbolset.h thsymbolsetlist.h thlocale.h thsketch.h thpic.h \ thcs.h thconvert.o: thconvert.cxx thpdfdbg.h thexception.h therion.h thbuffer.h \ thpdfdata.h thepsparse.h thtexfonts.h thcs.o: thcs.cxx thcs.h thcsdata.h thparse.h thbuffer.h thmbuffer.h \ thexception.h therion.h extern/proj4/proj_api.h thdatabase.h \ thdataobject.h thperson.h thdate.h thdataleg.h thobjectname.h \ thobjectsrc.h thinfnan.h thdb1d.h thobjectid.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h \ thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h thlayoutclr.h \ thscrapen.h thscraplp.h thcsdata.o: thcsdata.cxx thcsdata.h thparse.h thbuffer.h thmbuffer.h thdata.o: thdata.cxx thdata.h thdataleg.h thparse.h thbuffer.h \ thmbuffer.h thobjectname.h therion.h thobjectsrc.h thinfnan.h \ thdataobject.h thdatabase.h thdb1d.h thobjectid.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thtfangle.h thtf.h \ thtflength.h thtfpwf.h thexception.h thsurvey.h thlayout.h thsymbolset.h \ thsymbolsetlist.h thlocale.h thgrade.h thcsdata.h thdatareader.h \ thinput.h thdatabase.o: thdatabase.cxx thdatabase.h thdataobject.h thperson.h \ thparse.h thbuffer.h thmbuffer.h thdate.h thdataleg.h thobjectname.h \ therion.h thobjectsrc.h thinfnan.h thdb1d.h thobjectid.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thlayoutclr.h thscrapen.h thscraplp.h thsurvey.h thtfpwf.h thendsurvey.h \ thexception.h thdata.h thtfangle.h thtf.h thtflength.h thcmdline.h \ thdatastation.h thlookup.h thlocale.h thgrade.h thlayout.h thsymbolset.h \ thsymbolsetlist.h thscrap.h thsketch.h thpic.h thtrans.h \ th2ddataobject.h thpoint.h thline.h tharea.h thjoin.h thmap.h thimport.h \ thsurface.h thendscrap.h thdataleg.o: thdataleg.cxx thdataleg.h thparse.h thbuffer.h thmbuffer.h \ thobjectname.h therion.h thobjectsrc.h thinfnan.h thcs.h thcsdata.h thdataobject.o: thdataobject.cxx thdataobject.h thdatabase.h thmbuffer.h \ thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h thparse.h \ thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h \ thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thlayoutclr.h thscrapen.h thscraplp.h thexception.h thsurvey.h thtfpwf.h \ thconfig.h thinput.h thexporter.h thexport.h thselector.h thcsdata.h \ thdata.h thtfangle.h thtf.h thtflength.h thproj.h thcs.h thdatareader.o: thdatareader.cxx thdatareader.h thdatabase.h \ thdataobject.h thperson.h thparse.h thbuffer.h thmbuffer.h thdate.h \ thdataleg.h thobjectname.h therion.h thobjectsrc.h thinfnan.h thdb1d.h \ thobjectid.h thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h \ thdb2d.h thdb2dprj.h thmapstat.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thinput.h \ thexception.h thdatastation.o: thdatastation.cxx thdatastation.h thdataobject.h \ thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h \ thdataleg.h thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h \ thexception.h thdate.o: thdate.cxx thdate.h thparse.h thbuffer.h thmbuffer.h \ thexception.h therion.h thdb1d.o: thdb1d.cxx thdb1d.h thobjectid.h thinfnan.h thdataleg.h \ thparse.h thbuffer.h thmbuffer.h thobjectname.h therion.h thobjectsrc.h \ thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h thsurvey.h \ thdataobject.h thdatabase.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h \ thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thlayoutclr.h thscrapen.h thscraplp.h thtfpwf.h thsvxctrl.h \ thexception.h thdata.h thtfangle.h thtf.h thtflength.h thpoint.h \ th2ddataobject.h thlogfile.h thsurface.h thlocale.h thinit.h thinput.h \ thconfig.h thexporter.h thexport.h thselector.h thtrans.h thcs.h \ thcsdata.h thdb2d.o: thdb2d.cxx thdb2d.h thinfnan.h thdb2dprj.h thparse.h thbuffer.h \ thmbuffer.h thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h \ thdb2dlp.h thdb2dab.h thobjectname.h therion.h thobjectsrc.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thlayoutclr.h thscrapen.h thscraplp.h thdb1d.h thobjectid.h thdataleg.h \ thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h thexception.h \ thdatabase.h thdataobject.h thtfangle.h thtf.h tharea.h th2ddataobject.h \ thmap.h thjoin.h thpoint.h thline.h thscrap.h thsketch.h thpic.h \ thtrans.h thsurvey.h thtfpwf.h thlogfile.h thlayout.h thsymbolset.h \ thsymbolsetlist.h thlocale.h thexpmap.h thexport.h thlang.h thlangdata.h \ thconfig.h thinput.h thexporter.h thselector.h thtmpdir.h thinit.h thdb2d00.o: thdb2d00.cxx thdb2d.h thinfnan.h thdb2dprj.h thparse.h \ thbuffer.h thmbuffer.h thmapstat.h thdate.h thperson.h thlegenddata.h \ thdb2dpt.h thdb2dlp.h thdb2dab.h thobjectname.h therion.h thobjectsrc.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thdb1d.h thobjectid.h \ thdataleg.h thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h \ thexception.h thdatabase.h thdataobject.h thtfangle.h thtf.h tharea.h \ th2ddataobject.h thmap.h thjoin.h thpoint.h thline.h thscrap.h \ thsketch.h thpic.h thtrans.h thsurvey.h thtfpwf.h thlogfile.h thlayout.h \ thsymbolset.h thsymbolsetlist.h thlocale.h thconfig.h thinput.h \ thexporter.h thexport.h thselector.h thdb2dab.o: thdb2dab.cxx thdb2dab.h thobjectname.h thmbuffer.h therion.h \ thobjectsrc.h thdb2dcp.o: thdb2dcp.cxx thdb2dcp.h thdb2dpt.h thdb2dji.o: thdb2dji.cxx thdb2dji.h thobjectname.h thmbuffer.h therion.h \ thdatabase.h thdataobject.h thperson.h thparse.h thbuffer.h thdate.h \ thdataleg.h thobjectsrc.h thinfnan.h thdb1d.h thobjectid.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dmi.h \ thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h thlayoutclr.h \ thscrapen.h thscraplp.h thexception.h thdb2dlp.o: thdb2dlp.cxx thdb2dlp.h thdb2dpt.h thline.h th2ddataobject.h \ thdataobject.h thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h \ thinfnan.h thdataleg.h thparse.h thobjectname.h therion.h thobjectsrc.h \ thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h \ thdb2dprj.h thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thexpmap.h thexport.h \ thsymbolset.h thsymbolsetlist.h thlayout.h thlocale.h thlang.h \ thlangdata.h thdb2dmi.o: thdb2dmi.cxx thdb2dmi.h thobjectname.h thmbuffer.h therion.h \ thobjectsrc.h thparse.h thbuffer.h thexception.h thdb2dprj.o: thdb2dprj.cxx thdb2dprj.h thparse.h thbuffer.h thmbuffer.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thinfnan.h thdb2dpt.o: thdb2dpt.cxx thdb2dpt.h thexpmap.h thexport.h thparse.h \ thbuffer.h thmbuffer.h thobjectsrc.h thsymbolset.h thsymbolsetlist.h \ thlayoutclr.h thlayout.h thdataobject.h thdatabase.h thdb1d.h \ thobjectid.h thinfnan.h thdataleg.h thobjectname.h therion.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thscrapen.h thscraplp.h thlocale.h thlang.h thlangdata.h thdb2dxm.o: thdb2dxm.cxx thdb2dxm.h thdb2dmi.h thobjectname.h thmbuffer.h \ therion.h thobjectsrc.h thparse.h thbuffer.h thdb2dxs.o: thdb2dxs.cxx thdb2dxs.h thdb2dmi.h thobjectname.h thmbuffer.h \ therion.h thobjectsrc.h thparse.h thbuffer.h thdb3d.o: thdb3d.cxx thdb3d.h loch/lxMath.h thendscrap.o: thendscrap.cxx thendscrap.h thdataobject.h thdatabase.h \ thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h \ thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thexception.h thendsurvey.o: thendsurvey.cxx thendsurvey.h thdataobject.h thdatabase.h \ thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h \ thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thexception.h thepsparse.o: thepsparse.cxx thepsparse.h thpdfdbg.h thexception.h \ therion.h thbuffer.h thpdfdata.h thtexfonts.h thconvert.h therion.o: therion.cxx therion.h thlogfile.h thbuffer.h thtmpdir.h \ thcmdline.h thconfig.h thmbuffer.h thinput.h thparse.h thexporter.h \ thexport.h thobjectsrc.h thselector.h thchenc.h thchencdata.h \ thdatabase.h thdataobject.h thperson.h thdate.h thdataleg.h \ thobjectname.h thinfnan.h thdb1d.h thobjectid.h thdb3d.h loch/lxMath.h \ thattr.h thdb2d.h thdb2dprj.h thmapstat.h thlegenddata.h thdb2dpt.h \ thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h \ thdb2dxm.h thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h \ thscraplp.h thdatareader.h thexception.h thlibrary.h thinit.h thgrade.h \ thdata.h thtfangle.h thtf.h thtflength.h thtfpwf.h thlayout.h \ thsymbolset.h thsymbolsetlist.h thlocale.h thpoint.h th2ddataobject.h \ thline.h tharea.h thversion.h thtexfonts.h thlang.h thlangdata.h \ thbezier.h thexception.o: thexception.cxx thexception.h therion.h thbuffer.h thexpdb.o: thexpdb.cxx thexpdb.h thexport.h thparse.h thbuffer.h \ thmbuffer.h thobjectsrc.h thexception.h therion.h thscrap.h \ thdataobject.h thdatabase.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h \ thobjectname.h thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h \ thdb2d.h thdb2dprj.h thmapstat.h thdate.h thperson.h thlegenddata.h \ thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h \ thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h \ thscraplp.h thsketch.h thpic.h thtrans.h thmap.h thdata.h thtfangle.h \ thtf.h thtflength.h thtfpwf.h thinit.h thinput.h thsurvey.h thexpmap.o: thexpmap.cxx thexpmap.h thexport.h thparse.h thbuffer.h \ thmbuffer.h thobjectsrc.h thsymbolset.h thsymbolsetlist.h thlayoutclr.h \ thlayout.h thdataobject.h thdatabase.h thdb1d.h thobjectid.h thinfnan.h \ thdataleg.h thobjectname.h therion.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h \ thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thscrapen.h thscraplp.h thlocale.h thlang.h thlangdata.h thexporter.h \ thexception.h thtmpdir.h thscrap.h thsketch.h thpic.h thtrans.h \ thpoint.h th2ddataobject.h thline.h tharea.h thmap.h thconfig.h \ thinput.h thselector.h thinit.h thlogfile.h thconvert.h thpdf.h \ thpdfdata.h thepsparse.h thmpost.h thtex.h thcmdline.h thtexfonts.h \ thsurvey.h thtfpwf.h thcsdata.h thproj.h thsurface.h thtflength.h thtf.h \ thsvg.h extern/img.h thcs.h thexpmodel.o: thexpmodel.cxx thexpmodel.h thexport.h thparse.h thbuffer.h \ thmbuffer.h thobjectsrc.h thexception.h therion.h thdatabase.h \ thdataobject.h thperson.h thdate.h thdataleg.h thobjectname.h thinfnan.h \ thdb1d.h thobjectid.h thdb3d.h loch/lxMath.h thattr.h thchenc.h \ thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thlegenddata.h thdb2dpt.h \ thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h \ thdb2dxm.h thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h \ thscraplp.h thdata.h thtfangle.h thtf.h thtflength.h thtfpwf.h \ thsurvey.h extern/img.h thscrap.h thsketch.h thpic.h thtrans.h \ thsurface.h loch/lxFile.h thconfig.h thinput.h thexporter.h thselector.h \ thcsdata.h thproj.h thcs.h thexport.o: thexport.cxx thexport.h thparse.h thbuffer.h thmbuffer.h \ thobjectsrc.h thexception.h therion.h thconfig.h thinput.h thexporter.h \ thselector.h thdatabase.h thdataobject.h thperson.h thdate.h thdataleg.h \ thobjectname.h thinfnan.h thdb1d.h thobjectid.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h \ thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h thlayoutclr.h \ thscrapen.h thscraplp.h thcs.h thcsdata.h thexporter.o: thexporter.cxx thexporter.h thexport.h thparse.h thbuffer.h \ thmbuffer.h thobjectsrc.h thexception.h therion.h thconfig.h thinput.h \ thselector.h thdatabase.h thdataobject.h thperson.h thdate.h thdataleg.h \ thobjectname.h thinfnan.h thdb1d.h thobjectid.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h \ thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h thlayoutclr.h \ thscrapen.h thscraplp.h thexpmodel.h thexpmap.h thsymbolset.h \ thsymbolsetlist.h thlayout.h thlocale.h thlang.h thlangdata.h thexpdb.h \ thexpsys.h thexptable.h thexpshp.o: thexpshp.cxx thexpmap.h thexport.h thparse.h thbuffer.h \ thmbuffer.h thobjectsrc.h thsymbolset.h thsymbolsetlist.h thlayoutclr.h \ thlayout.h thdataobject.h thdatabase.h thdb1d.h thobjectid.h thinfnan.h \ thdataleg.h thobjectname.h therion.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h \ thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thscrapen.h thscraplp.h thlocale.h thlang.h thlangdata.h thexporter.h \ thexception.h thmap.h thsketch.h thpic.h thconfig.h thinput.h \ thselector.h thtmpdir.h thinit.h thlogfile.h thcmdline.h thsurvey.h \ thtfpwf.h thsurface.h thtflength.h thtf.h extern/shapefil.h thexpmodel.h \ thcsdata.h thcs.h thexpshp.h thscrap.h thtrans.h thpoint.h \ th2ddataobject.h thline.h tharea.h thexpsys.o: thexpsys.cxx thexpsys.h thexport.h thparse.h thbuffer.h \ thmbuffer.h thobjectsrc.h thexception.h therion.h thdatabase.h \ thdataobject.h thperson.h thdate.h thdataleg.h thobjectname.h thinfnan.h \ thdb1d.h thobjectid.h thdb3d.h loch/lxMath.h thattr.h thchenc.h \ thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thlegenddata.h thdb2dpt.h \ thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h \ thdb2dxm.h thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h \ thscraplp.h thexptable.o: thexptable.cxx thexptable.h thexport.h thparse.h thbuffer.h \ thmbuffer.h thobjectsrc.h thattr.h thchenc.h thchencdata.h thexception.h \ therion.h thdatabase.h thdataobject.h thperson.h thdate.h thdataleg.h \ thobjectname.h thinfnan.h thdb1d.h thobjectid.h thdb3d.h loch/lxMath.h \ thdb2d.h thdb2dprj.h thmapstat.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thdata.h \ thtfangle.h thtf.h thtflength.h thtfpwf.h thexporter.h thinit.h \ thinput.h thsurvey.h thscrap.h thsketch.h thpic.h thtrans.h thpoint.h \ th2ddataobject.h thcsdata.h thproj.h thconfig.h thselector.h thcs.h thexpuni.o: thexpuni.cxx thexpmap.h thexport.h thparse.h thbuffer.h \ thmbuffer.h thobjectsrc.h thsymbolset.h thsymbolsetlist.h thlayoutclr.h \ thlayout.h thdataobject.h thdatabase.h thdb1d.h thobjectid.h thinfnan.h \ thdataleg.h thobjectname.h therion.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h \ thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thscrapen.h thscraplp.h thlocale.h thlang.h thlangdata.h thexporter.h \ thexception.h thmap.h thsketch.h thpic.h thconfig.h thinput.h \ thselector.h thtmpdir.h thcsdata.h thinit.h thlogfile.h thcmdline.h \ thsurvey.h thtfpwf.h thsurface.h thtflength.h thtf.h extern/shapefil.h \ thexpmodel.h thexpuni.h thscrap.h thtrans.h thpoint.h th2ddataobject.h \ thline.h tharea.h thproj.h thcs.h thgeomag.o: thgeomag.cxx thgeomagdata.h thgrade.o: thgrade.cxx thgrade.h thdataobject.h thdatabase.h thmbuffer.h \ thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h thparse.h \ thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h \ thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thlayoutclr.h thscrapen.h thscraplp.h thdata.h thtfangle.h thtf.h \ thtflength.h thtfpwf.h thexception.h thimport.o: thimport.cxx thimport.h thdataobject.h thdatabase.h \ thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h \ thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thexception.h \ thdata.h thtfangle.h thtf.h thtflength.h thtfpwf.h thsurvey.h \ thendsurvey.h extern/img.h thinfnan.o: thinfnan.cxx thinfnan.h thinit.o: thinit.cxx thinit.h thbuffer.h thmbuffer.h thinput.h thparse.h \ thchenc.h thchencdata.h therion.h thconfig.h thexporter.h thexport.h \ thobjectsrc.h thselector.h thexception.h thtexfonts.h thlang.h \ thlangdata.h thlocale.h thtmpdir.h thcs.h thcsdata.h thinput.o: thinput.cxx thinput.h thbuffer.h thmbuffer.h thparse.h \ thchenc.h thchencdata.h therion.h thexception.h thjoin.o: thjoin.cxx thjoin.h thdataobject.h thdatabase.h thmbuffer.h \ thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h thparse.h \ thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h \ thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thlayoutclr.h thscrapen.h thscraplp.h thexception.h thlang.o: thlang.cxx thlang.h thlangdata.h thparse.h thbuffer.h \ thmbuffer.h thlangdata.cxx thinit.h thinput.h thconfig.h thexporter.h \ thexport.h thobjectsrc.h thselector.h thdatabase.h thdataobject.h \ thperson.h thdate.h thdataleg.h thobjectname.h therion.h thinfnan.h \ thdb1d.h thobjectid.h thdb3d.h loch/lxMath.h thattr.h thchenc.h \ thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thlegenddata.h thdb2dpt.h \ thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h \ thdb2dxm.h thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h \ thscraplp.h thexception.h thlangdata.o: thlangdata.cxx thlayout.o: thlayout.cxx thlayout.h thdataobject.h thdatabase.h \ thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h \ thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thsymbolset.h \ thsymbolsetlist.h thlocale.h thexception.h thdata.h thtfangle.h thtf.h \ thtflength.h thtfpwf.h thpdfdata.h thepsparse.h thlang.h thlangdata.h \ thcsdata.h thconfig.h thinput.h thexporter.h thexport.h thselector.h thlayoutclr.o: thlayoutclr.cxx thlayoutclr.h thparse.h thbuffer.h \ thmbuffer.h thdatabase.h thdataobject.h thperson.h thdate.h thdataleg.h \ thobjectname.h therion.h thobjectsrc.h thinfnan.h thdb1d.h thobjectid.h \ thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h \ thdb2dprj.h thmapstat.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thscrapen.h thscraplp.h thexception.h thlayoutln.o: thlayoutln.cxx thlayoutln.h thlayoutclr.h thlayout.h \ thdataobject.h thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h \ thinfnan.h thdataleg.h thparse.h thobjectname.h therion.h thobjectsrc.h \ thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h \ thdb2dprj.h thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h \ thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h \ thdb2dxm.h thscraplo.h thscrapen.h thscraplp.h thsymbolset.h \ thsymbolsetlist.h thlocale.h thlegenddata.o: thlegenddata.cxx thlegenddata.h thlibrary.o: thlibrary.cxx thlibrary.h thlibrarydata.cxx thdatabase.h \ thdataobject.h thperson.h thparse.h thbuffer.h thmbuffer.h thdate.h \ thdataleg.h thobjectname.h therion.h thobjectsrc.h thinfnan.h thdb1d.h \ thobjectid.h thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h \ thdb2d.h thdb2dprj.h thmapstat.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h \ thlayout.h thsymbolset.h thsymbolsetlist.h thlocale.h thlang.h \ thlangdata.h thgrade.h thdata.h thtfangle.h thtf.h thtflength.h \ thtfpwf.h thlibrarydata.o: thlibrarydata.cxx thdatabase.h thdataobject.h thperson.h \ thparse.h thbuffer.h thmbuffer.h thdate.h thdataleg.h thobjectname.h \ therion.h thobjectsrc.h thinfnan.h thdb1d.h thobjectid.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thlayoutclr.h thscrapen.h thscraplp.h thlayout.h thsymbolset.h \ thsymbolsetlist.h thlocale.h thlang.h thlangdata.h thgrade.h thdata.h \ thtfangle.h thtf.h thtflength.h thtfpwf.h thline.o: thline.cxx thline.h th2ddataobject.h thdataobject.h \ thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h \ thdataleg.h thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h \ thexception.h thexpmap.h thexport.h thsymbolset.h thsymbolsetlist.h \ thlayout.h thlocale.h thlang.h thlangdata.h thtflength.h thtf.h \ thtexfonts.h thscrap.h thsketch.h thpic.h thtrans.h thlocale.o: thlocale.cxx thlocale.h thparse.h thbuffer.h thmbuffer.h \ thexception.h therion.h thlang.h thlangdata.h thinit.h thinput.h thlogfile.o: thlogfile.cxx thlogfile.h thbuffer.h therion.h thlookup.o: thlookup.cxx thlookup.h thdataobject.h thdatabase.h \ thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h \ thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thlocale.h \ thexception.h thdata.h thtfangle.h thtf.h thtflength.h thtfpwf.h \ thpdfdata.h thepsparse.h thsymbolset.h thsymbolsetlist.h thlang.h \ thlangdata.h thcsdata.h thconfig.h thinput.h thexporter.h thexport.h \ thselector.h thmap.o: thmap.cxx thmap.h thdataobject.h thdatabase.h thmbuffer.h \ thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h thparse.h \ thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h \ thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thlayoutclr.h thscrapen.h thscraplp.h thexception.h thscrap.h thsketch.h \ thpic.h thtrans.h thtflength.h thtf.h thmapstat.o: thmapstat.cxx thmapstat.h thdate.h thperson.h thlegenddata.h \ thscrap.h thdataobject.h thdatabase.h thmbuffer.h thbuffer.h thdb1d.h \ thobjectid.h thinfnan.h thdataleg.h thparse.h thobjectname.h therion.h \ thobjectsrc.h thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h \ thdb2d.h thdb2dprj.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thlayoutclr.h thscrapen.h thscraplp.h thsketch.h thpic.h thtrans.h \ thdata.h thtfangle.h thtf.h thtflength.h thtfpwf.h thmap.h thlayout.h \ thsymbolset.h thsymbolsetlist.h thlocale.h thlang.h thlangdata.h \ thtexfonts.h thsurvey.h thmbuffer.o: thmbuffer.cxx thmbuffer.h thmpost.o: thmpost.cxx thmpost.h thobjectid.o: thobjectid.cxx thobjectid.h thobjectname.o: thobjectname.cxx thobjectname.h thmbuffer.h therion.h \ thexception.h thbuffer.h thparse.h thdatabase.h thdataobject.h \ thperson.h thdate.h thdataleg.h thobjectsrc.h thinfnan.h thdb1d.h \ thobjectid.h thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h \ thdb2d.h thdb2dprj.h thmapstat.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h \ thsurvey.h thtfpwf.h thobjectsrc.o: thobjectsrc.cxx thobjectsrc.h thparse.o: thparse.cxx thparse.h thbuffer.h thmbuffer.h therion.h \ thlang.h thlangdata.h thtexfonts.h thinfnan.h thdatabase.h \ thdataobject.h thperson.h thdate.h thdataleg.h thobjectname.h \ thobjectsrc.h thdb1d.h thobjectid.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thlegenddata.h \ thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h \ thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h \ thscraplp.h thtflength.h thtf.h thexception.h thpdf.o: thpdf.cxx thpdfdbg.h thexception.h therion.h thbuffer.h \ thpdfdata.h thepsparse.h thtexfonts.h thlang.h thlangdata.h thparse.h \ thmbuffer.h thversion.h thchenc.h thchencdata.h thpdfdata.o: thpdfdata.cxx thpdfdata.h thepsparse.h thlang.h thlangdata.h \ thparse.h thbuffer.h thmbuffer.h thpdfdbg.o: thpdfdbg.cxx thpdfdbg.h thexception.h therion.h thbuffer.h \ thpdfdata.h thepsparse.h thperson.o: thperson.cxx thperson.h thdatabase.h thdataobject.h thparse.h \ thbuffer.h thmbuffer.h thdate.h thdataleg.h thobjectname.h therion.h \ thobjectsrc.h thinfnan.h thdb1d.h thobjectid.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h \ thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h thlayoutclr.h \ thscrapen.h thscraplp.h thexception.h thpic.o: thpic.cxx thpic.h thbuffer.h thdatabase.h thdataobject.h \ thperson.h thparse.h thmbuffer.h thdate.h thdataleg.h thobjectname.h \ therion.h thobjectsrc.h thinfnan.h thdb1d.h thobjectid.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thlayoutclr.h thscrapen.h thscraplp.h thinit.h thinput.h thtmpdir.h \ thexception.h thpoint.o: thpoint.cxx thpoint.h th2ddataobject.h thdataobject.h \ thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h \ thdataleg.h thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h \ thexception.h thexpmap.h thexport.h thsymbolset.h thsymbolsetlist.h \ thlayout.h thlocale.h thlang.h thlangdata.h thtflength.h thtf.h \ thtexfonts.h thscrap.h thsketch.h thpic.h thtrans.h thproj.o: thproj.cxx thexception.h therion.h thbuffer.h \ extern/proj4/proj_api.h thscrap.o: thscrap.cxx thscrap.h thdataobject.h thdatabase.h thmbuffer.h \ thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h thparse.h \ thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h \ thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thlayoutclr.h thscrapen.h thscraplp.h thsketch.h thpic.h thtrans.h \ thexception.h thtflength.h thtf.h th2ddataobject.h thline.h thpoint.h \ thscrapis.h thsurvey.h thtfpwf.h thsymbolset.h thsymbolsetlist.h \ thcsdata.h thscrapen.o: thscrapen.cxx thscrapen.h thscrapis.o: thscrapis.cxx thscrapis.h thdb3d.h loch/lxMath.h thscrap.h \ thdataobject.h thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h \ thinfnan.h thdataleg.h thparse.h thobjectname.h therion.h thobjectsrc.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thsketch.h thpic.h \ thtrans.h thpoint.h th2ddataobject.h thline.h thconfig.h thinput.h \ thexporter.h thexport.h thselector.h extern/poly2tri/poly2tri.h \ extern/poly2tri/common/shapes.h extern/poly2tri/sweep/cdt.h \ extern/poly2tri/sweep/advancing_front.h \ extern/poly2tri/sweep/../common/shapes.h \ extern/poly2tri/sweep/sweep_context.h extern/poly2tri/sweep/sweep.h \ thsurvey.h thtfpwf.h thscraplo.o: thscraplo.cxx thscraplo.h thscraplp.o: thscraplp.cxx thscraplp.h thdb1d.h thobjectid.h thinfnan.h \ thdataleg.h thparse.h thbuffer.h thmbuffer.h thobjectname.h therion.h \ thobjectsrc.h thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h \ thscrap.h thdataobject.h thdatabase.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thlayoutclr.h thscrapen.h thsketch.h thpic.h thtrans.h \ thexpmap.h thexport.h thsymbolset.h thsymbolsetlist.h thlayout.h \ thlocale.h thlang.h thlangdata.h thselector.o: thselector.cxx thselector.h thexception.h therion.h \ thbuffer.h thconfig.h thmbuffer.h thinput.h thparse.h thexporter.h \ thexport.h thobjectsrc.h thdatabase.h thdataobject.h thperson.h thdate.h \ thdataleg.h thobjectname.h thinfnan.h thdb1d.h thobjectid.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thlayoutclr.h thscrapen.h thscraplp.h thsurvey.h thtfpwf.h \ th2ddataobject.h thscrap.h thsketch.h thpic.h thtrans.h thmap.h thsketch.o: thsketch.cxx therion.h thsketch.h thpic.h thscrap.h \ thdataobject.h thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h \ thinfnan.h thdataleg.h thparse.h thobjectname.h thobjectsrc.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thtrans.h \ thwarpp.h thwarp.h thwarppme.h thwarppdef.h thwarppt.h thconfig.h \ thinput.h thexporter.h thexport.h thselector.h thsurface.o: thsurface.cxx thsurface.h thdb3d.h loch/lxMath.h \ thdataobject.h thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h \ thinfnan.h thdataleg.h thparse.h thobjectname.h therion.h thobjectsrc.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thtflength.h thtf.h \ thexception.h thcsdata.h thdatareader.h thinput.h thsurvey.o: thsurvey.cxx thsurvey.h thdataobject.h thdatabase.h \ thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h \ thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thtfpwf.h \ thexception.h thtfangle.h thtf.h thdata.h thtflength.h thsvg.o: thsvg.cxx thepsparse.h thpdfdbg.h thexception.h therion.h \ thbuffer.h thpdfdata.h thversion.h thlegenddata.h thsvxctrl.o: thsvxctrl.cxx thsvxctrl.h thdataleg.h thparse.h thbuffer.h \ thmbuffer.h thobjectname.h therion.h thobjectsrc.h thinfnan.h \ thdatabase.h thdataobject.h thperson.h thdate.h thdb1d.h thobjectid.h \ thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h \ thdb2dprj.h thmapstat.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thtmpdir.h thdata.h \ thtfangle.h thtf.h thtflength.h thtfpwf.h thexception.h thinit.h \ thinput.h thconfig.h thexporter.h thexport.h thselector.h thsurvey.h \ thcs.h thcsdata.h thlogfile.h extern/img.h thsymbolset.o: thsymbolset.cxx thsymbolset.h thsymbolsetlist.h \ thlayoutclr.h thparse.h thbuffer.h thmbuffer.h thpoint.h \ th2ddataobject.h thdataobject.h thdatabase.h thdb1d.h thobjectid.h \ thinfnan.h thdataleg.h thobjectname.h therion.h thobjectsrc.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thscraplo.h thlayoutln.h thscrapen.h thscraplp.h thline.h tharea.h \ thexception.h thpdfdata.h thepsparse.h thlayout.h thlocale.h \ thtexfonts.h thlang.h thlangdata.h thtmpdir.h thcmdline.h thmpost.h \ thinit.h thinput.h thsymbolsets.h thlogfile.h thsymbolsets.o: thsymbolsets.cxx thsymbolsets.h thsymbolsetlist.h thtex.o: thtex.cxx thtex.h thtexenc.o: thtexenc.cxx thtexfonts.o: thtexfonts.cxx thtexfonts.h thtexenc.cxx thpdfdbg.h \ thexception.h therion.h thbuffer.h thinit.h thmbuffer.h thinput.h \ thparse.h thpdfdata.h thepsparse.h thtf.o: thtf.cxx thtf.h thexception.h therion.h thbuffer.h thparse.h \ thmbuffer.h thtfangle.o: thtfangle.cxx thparse.h thbuffer.h thmbuffer.h thtfangle.h \ thtf.h thexception.h therion.h thinfnan.h thtflength.o: thtflength.cxx thtflength.h thtf.h thparse.h thbuffer.h \ thmbuffer.h thexception.h therion.h thtfpwf.o: thtfpwf.cxx thtfpwf.h thexception.h therion.h thbuffer.h \ thinfnan.h thparse.h thmbuffer.h thtmpdir.o: thtmpdir.cxx thtmpdir.h thbuffer.h therion.h thinit.h \ thmbuffer.h thinput.h thparse.h thtrans.o: thtrans.cxx thtrans.h thinfnan.h thdatabase.h thdataobject.h \ thperson.h thparse.h thbuffer.h thmbuffer.h thdate.h thdataleg.h \ thobjectname.h therion.h thobjectsrc.h thdb1d.h thobjectid.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thlayoutclr.h thscrapen.h thscraplp.h thwarp.o: thwarp.cxx thwarp.h thpic.h thsketch.h thdb1d.h thobjectid.h \ thinfnan.h thdataleg.h thparse.h thbuffer.h thmbuffer.h thobjectname.h \ therion.h thobjectsrc.h thdb3d.h loch/lxMath.h thattr.h thchenc.h \ thchencdata.h thscrap.h thdataobject.h thdatabase.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thtrans.h \ th2ddataobject.h thpoint.h thwarpp.o: thwarpp.cxx thwarpp.h thwarp.h thpic.h thsketch.h thwarppme.h \ thwarppdef.h therion.h thtrans.h thinfnan.h thwarppt.h thdataobject.h \ thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thdataleg.h \ thparse.h thobjectname.h thobjectsrc.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h \ thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thlayoutclr.h thscrapen.h thscraplp.h thscrap.h th2ddataobject.h \ thpoint.h thwarppme.o: thwarppme.cxx thinfnan.h thwarppme.h thwarppdef.h therion.h \ thtrans.h thwarppt.o: thwarppt.cxx thwarppt.h thtrans.h thinfnan.h thwarppme.h \ thwarppdef.h therion.h therion/makefile.pl0000644000076400010400000000175610576400772015420 0ustar userAdministratorsuse File::Glob; use File::Copy; use File::Path; if ($ARGV[0] =~ /^\s*cp\s*$/i) { copy($ARGV[1],$ARGV[2]) || die("$0: error -- cp $ARGV[1] -> $ARGV[2]\n"); } elsif ($ARGV[0] =~ /^\s*mv\s*$/i) { copy($ARGV[1],$ARGV[2]) || die("$0: error -- cp $ARGV[1] -> $ARGV[2]\n"); unlink($ARGV[1]) || warn("$0: can't delete $ARGV[1]\n");; } elsif ($ARGV[0] =~ /^\s*rm\s*$/i) { $dum = shift @ARGV; $quietdel = ''; if ($ARGV[0] =~ /^\s*\-q\s*$/) { $dum = shift @ARGV; $quietdel = 1; } foreach $f (@ARGV) { if ($f =~ /\*/) { @fl = glob($f); foreach $ff (@fl) { unlink($ff) || $quietdel || warn("$0: can't delete $ff\n"); } } else { unlink($f) || $quietdel || warn("$0: can't delete $f\n"); } } } elsif ($ARGV[0] =~ /^\s*rmdir\s*$/i) { $dum = shift @ARGV; $quietdel = ''; if ($ARGV[0] =~ /^\s*\-q\s*$/) { $dum = shift @ARGV; $quietdel = 1; } foreach $f (@ARGV) { rmtree($f) || $quietdel || warn("$0: can't delete $f\n");; } } therion/makeinstall.tcl0000644000076400010400000000455112047546126016311 0ustar userAdministratorsset platform LINUX set instdir /usr/local if {$argc > 0} { set platform [lindex $argv 0] } else { if {[string equal $tcl_platform(platform) windows]} { set platform WIN32 } } proc copyfile {force src dst} { if {$force} { if {[catch { file copy -force -- $src $dst }]} { puts stderr "installation error: could not write $dst" } } else { if {![file exists $dst]} { copyfile 1 $src $dst } } } if {[string equal $platform WIN32]} { copyfile 1 therion.exe "c:/Program files/Therion/therion.exe" copyfile 1 xtherion/xtherion.tcl "c:/Program files/Therion/xtherion.tcl" copyfile 1 loch/loch.exe "c:/Program files/Therion/loch.exe" } elseif {[string equal $platform MACOSX]} { copyfile 1 therion /usr/bin/therion file attributes /usr/bin/therion -permissions 0755 copyfile 1 xtherion/xtherion /usr/bin/xtherion file attributes /usr/bin/xtherion -permissions 0755 file delete -force /Applications/loch.app copyfile 1 loch/loch.app /Applications file attributes /Applications/loch.app -permissions 0755 file attributes /Applications/loch.app/Contents -permissions 0755 file attributes /Applications/loch.app/Contents/Info.plist -permissions 0644 file attributes /Applications/loch.app/Contents/PkgInfo -permissions 0644 file attributes /Applications/loch.app/Contents/MacOS -permissions 0755 file attributes /Applications/loch.app/Contents/MacOS/loch -permissions 0755 file attributes /Applications/loch.app/Contents/Resources -permissions 0755 file attributes /Applications/loch.app/Contents/Resources/loch.icns -permissions 0644 copyfile 1 therion.ini /etc/therion.ini.new file attributes /etc/therion.ini.new -permissions 0644 copyfile 1 xtherion/xtherion.ini /etc/xtherion.ini.new file attributes /etc/xtherion.ini.new -permissions 0644 copyfile 0 therion.ini /etc/therion.ini file attributes /etc/therion.ini -permissions 0644 copyfile 0 xtherion/xtherion.ini /etc/xtherion.ini file attributes /etc/xtherion.ini -permissions 0644 } else { copyfile 1 therion $instdir/bin/therion copyfile 1 xtherion/xtherion $instdir/bin/xtherion copyfile 1 loch/loch $instdir/bin/loch copyfile 1 therion.ini $instdir/etc/therion.ini.new copyfile 1 xtherion/xtherion.ini $instdir/etc/xtherion.ini.new copyfile 0 therion.ini $instdir/etc/therion.ini copyfile 0 xtherion/xtherion.ini $instdir/etc/xtherion.ini } therion/makelibrary.pl0000644000076400010400000000017710576400772016141 0ustar userAdministrators$a = 0; open(INP,$ARGV[0]); while() { if (/\/\*\*/) { $a = 1; } if ($a) { print; } } close(INP);therion/makerelease.pl0000644000076400010400000000047711046570542016114 0ustar userAdministratorsif (open(VFL,"thversion.h")) { @verfl = ; $verfl[0] =~ /(\d+)\.(\d+)(\.(\d+))?/; ($v1,$v2) = ($1,$2); close(VFL); $v2++; } else { $v1 = 0; $v2 = 0; } open(VFL,">thversion.h"); print VFL "#define THVERSION \"$v1.$v2\"\n"; close(VFL); open(VFL,">thbook/version.tex"); print VFL "$v1.$v2"; close(VFL); therion/makerelease2.pl0000644000076400010400000000056712041762714016176 0ustar userAdministratorsif (open(VFL,"thversion.h")) { @verfl = ; $verfl[0] =~ /(\d+)\.(\d+)(\.(\d+))?/; ($v1,$v2,$v3) = ($1,$2,$4); if (!$v3) { $v3 = 0; } close(VFL); $v3++; } else { $v1 = 0; $v2 = 0; $v3 = 0; } open(VFL,">thversion.h"); print VFL "#define THVERSION \"$v1.$v2.$v3\"\n"; close(VFL); open(VFL,">thbook/version.tex"); print VFL "$v1.$v2.$v3"; close(VFL); therion/maketest.pl0000644000076400010400000000007410576400772015450 0ustar userAdministratorsif ((-s $ARGV[0]) > 0) { exit 0 } else { die "error" } therion/makeunixify.tcl0000644000076400010400000000322511577061216016332 0ustar userAdministratorsproc procdir {dir} { set dirs [glob -nocomplain -directory $dir -types d *] set files [glob -nocomplain -directory $dir -types f *] foreach d $dirs { exec chmod 775 $d procdir $d } puts "\n\n\nDIR: $dir" foreach f $files { puts $f exec chmod 664 $f dos2unix $f } } proc dos2unix {fnm} { set doit 0 if {[regexp {\.(c|cxx|h|tcl|svx|th|ini|thcfg|th2|thc|cof|xpm|txt|pl|mp|tex|TXT|sty|usr|enc|htm|xvi)$} $fnm]} { set doit 1 } elseif {[regexp {(Makefile|TODO\.\w|README|COPYING|CHANGES|thconfig|thconfig\..*)$} $fnm]} { set doit 1 } if {!$doit} return; set fmtime [file mtime $fnm] set fid [open $fnm r] fconfigure $fid -translation binary set fdt [read $fid] close $fid if {[regexp {\15} $fdt]} { puts " ...converted to UNIX format" regsub -all {\15} $fdt {} fdt set fid [open $fnm w] fconfigure $fid -translation binary puts -nonewline $fid $fdt close $fid file mtime $fnm $fmtime } } procdir . exec chmod 775 ./cclass.pl exec chmod 775 makeconvert.pl exec chmod 775 makeconvert2.pl exec chmod 775 thcsdata.tcl exec chmod 775 threpair-files exec chmod 775 thsymbolsetlist.pl exec chmod 775 geomag/cof11_2c.pl exec chmod 775 mpost/genmpost.pl exec chmod 775 samples/samples.tcl exec chmod 775 tex/gentex.pl exec chmod 775 texenc/afm2enc.pl exec chmod 775 texenc/mktexenc.pl exec chmod 775 texenc/unidata.pl exec chmod 775 thchencdata/generate.pl exec chmod 775 thlang/process.pl exec chmod 775 thlang/thlang_stats.pl exec chmod 775 xtherion/bac.tcl exec chmod 775 xtherion/dbg.tcl exec chmod 775 xtherion/bac.tcl exec chmod 775 xtherion/source.tcl exec chmod 775 xtherion/lang/process.pl therion/man/0000755000076400010400000000000012050456022014034 5ustar userAdministratorstherion/man/therion.10000644000076400010400000001014607705142140015574 0ustar userAdministrators.TH "THERION" "1" "2003/07/15" .SH "NAME" Therion \(em program to draw cave surveys .SH "SYNOPSIS" .PP \fBtherion\fP [\fB-q\fP] [\fB-L\fP] [\fB-l \fIlog-file\fR] [\fB-s \fIsource file\fR] [\fB-p \fIsearch path\fR] [\fB-g\fP|\fB-u\fP] [\fB-i\fP] [\fB-d\fP] [\fB-x\fP] [config-file] .PP \fBtherion\fP [\fB-h\fP|\fB--help\fP] [\fB-v\fP|\fB--version\fP] [\fB--print-encodings\fP] [\fB--print-tex-encodings\fP] [\fB--print-init-file\fP] .SH "DESCRIPTION" .PP This manual page briefly documents \fBTherion\fP and provides an overview of the package. .PP \fBTherion\fP is a program that processes Therion data files to produce cave surveys. The data files are usually .th files which contain survey data, largely equivalent to survex .svx files, .th2 files which contain drawing data and thconfig files which control the data files to be used and the maps to be output. .PP \fBTherion\fP uses a number of helper programs to do its job. \fBSurvex\fP is used to process the centreline data, \fBMetaPost\fP is used to draw cave symbols, and \fBpdfTeX\fP generates the final maps. .PP In order to make the entering of drawing data practical, and to make the editing of survey files easier, a graphical editor \fBXTherion\fP is included. This also includes a 'compiler' function which runs Therion on the data to produce output. This is implemented using Tcl/Tk. .PP The Therion data files describe the cave as text in terms of objects so the corresponding graphical representations are only inserted at output generation time. This means that a survey can be produced using whichever symbol set you require by specifying the relevant set of MetaPost macros. Currently the UIS symbol set is supported. .PP Multiple languages and character sets are supported \(em currently ISO-8859-1, ISO-8859-2, ISO-8859-5, ISO-8859-7, UTF-8, ASCII and CP1250. .SH "ARGUMENTS" .PP therion takes only one argument \(em a \fIconfig-file\fP. If no file is specified then the default \fIthconfig\fP file in the current directory will be used. A new default file can be created using the \fB-g\fP option. .SH "OPTIONS" .PP This program follows the usual GNU command line syntax, with long options starting with two dashes ("--"). A summary of options is included below. For a complete description, see \fBThe Therion Book\fP. .IP "\fB-h\fP, \fB--help\fP" 10 Show summary of options. .IP "\fB-v\fP, \fB--version\fP" 10 Show version information. .IP "\fB-q\fP" 10 Quiet mode \(em minimise output. .IP "\fB-g\fP" 10 Generate a new configuration file. This will be the given config-file if specified, or \fBthconfig\fP in the current directory if not. If the file already exists, it will be overwritten. .IP "\fB-i\fP" 10 Ignore comments when writing (-g|-u) configuration file. .IP "\fB-L\fP" 10 Do not create a log-file. Normally all messages are written into a \fBtherion.log\fP file. .IP "\fB-l log-file\fP" 10 Change the name of the log file. .IP "\fB-p search-path\fP" 10 This option is used to set the search path (or list of paths, separated by colon), which therion will use to find its source files (if it doesn't find them in the working directory). .IP "\fB-q\fP" 10 Run therion in quiet mode. It will print only warning and error messages (to STDERR). .IP "\fB--print-encodings\fP" 10 Print a list of all supported encodings. .IP "\fB--print-init-file\fP" 10 Print a default initialisation file. For more details see the Initialisation section in the Appendix of the Therion Book. .IP "\fB-s\fP" 10 Set the name of the source file. .IP "\fB-u\fP" 10 Upgrade the configuration file. .IP "\fB-d\fP" 10 Turn on debugging mode. The current implementation creates a temporary directory named \fBthTMPDIR\fP (in your system temporary directory) and does not delete any temporary files. .SH "SEE ALSO" .PP xtherion (1) .PP For full information see The Therion Book which describes Therion and its use in detail. .SH "AUTHORS" .PP Stacho Mudrak and Martin Budaj. This manual page was written by Wookey wookey@debian.org for the \fBDebian\fP system. Modified by MB.therion/man/xtherion.10000644000076400010400000000206007735157760016001 0ustar userAdministrators.TH "THERION" "1" "2003/07/15" .SH "NAME" XTherion \(em Graphical drawing editor for Therion .SH "SYNOPSIS" .PP \fBxtherion\fP .SH "DESCRIPTION" .PP This manual page documents \fBXTherion\fP, which is part of the therion package. .PP \fBXTherion\fP is an application that serves as a graphical front end for Therion. Therion itself works entirely with text-based files, but much of the data needs to be generated graphically, so XTherion is one example of how it might be done. It is written in Tcl/Tk. .PP \fBXTherion\fP lets you load a background GIF, PPM or PNM (a scan of the cave segment or to-scale notes), scale it, then draw Therion 'scraps' over the image, and relate it to survey stations and save the resulting data. .PP For full information see The Therion Book which describes the application and its use in detail. .SH "OPTIONS" .PP XTherion takes no options. .SH "SEE ALSO" .PP therion (1) .SH "AUTHOR" .PP Stacho Mudrak. This manual page was written by Wookey wookey@debian.org for the \fBDebian\fP system. Modified by MB.therion/mpost/0000755000076400010400000000000012065350264014432 5ustar userAdministratorstherion/mpost/genmpost.pl0000755000076400010400000001060310415014516016620 0ustar userAdministrators#!/usr/bin/perl -w sub encodecxx { $str = shift; $str =~ s/\x0D//g; $str =~ s/\x0C//g; $str =~ s/\x0A//g; $str =~ s/\\/\\\\/g; $str =~ s/\n/\\n/g; $str =~ s/\t/\\t/g; $str =~ s/\"/\\"/g; return $str; } sub init_symbol { my $s = shift; # if ($s =~ /def\s+((p|l|a)_([a-z]+_){1,2}[A-Z]+)/) { if ($s =~ /(def|let)\s+(p|l|a|s)_([a-z_]+)_([A-Z]+)\W/) { $SYMBOLS{$2}{$3}{$4} = 1; } # elsif ($s =~ /beginpattern\(a_([a-z]+)_([A-Z]+)\)/) { # $SYMBOLS{"a"}{$1}{$2} = 1; # } } sub process_symbols { my ($s1, $s2, $s3, %ss); open(OUT, ">../SYMBOLS.txt"); $thmpost_library .= "\n"; foreach $s1 (reverse sort keys %SYMBOLS) { print OUT "\n\n[", ($s1 eq "p") ? "Point" : (($s1 eq "l") ? "Line" : (($s1 eq "s") ? "Special" : "Area")), " symbols]\n"; foreach $s2 (sort keys %{$SYMBOLS{$s1}}) { print OUT "\n$s2: "; foreach $s3 (sort keys %{$SYMBOLS{$s1}{$s2}}) { print OUT "$s3 "; $thmpost_library .= "\"initsymbol(\\\"$s1\_$s2\_$s3\\\");\\n\"\n"; $ss{$s3} = 1; } } } close(OUT); my $i = 0; my $ssl; foreach $s3 (sort keys %ss) { $ssl .= "\"$s3\",\n"; $ss{$s3} = $i; $i++; } open(OUT, ">../thsymbolsets.h"); print OUT "#ifndef thsymbolsets_h\n#define thsymbolsets_h\n\n"; print OUT "#include \"thsymbolsetlist.h\"\n\n"; print OUT "#include \n"; print OUT "#include \n\n"; print OUT "\n#define thsymsets_size $i\n\n"; print OUT "extern int thsymsets_symbols [thsymbolset_size][thsymsets_size];\n\n"; print OUT "extern int thsymsets_figure [thsymbolset_size][thsymsets_size+1];\n\n"; print OUT "extern int thsymsets_order[thsymbolset_size];\n\n"; print OUT "extern int thsymsets_count[thsymsets_size];\n\n"; print OUT "extern std::map thsymsets_comment;\n\n"; print OUT "\nstatic const thsymbolset__char_ptr thsymsets [] = {\n$ssl};\n\nvoid thsymsets_symbols_init();\n\n"; print OUT "#endif\n\n"; close(OUT); open(OUT, ">../thsymbolsets.cxx"); print OUT "#include \"thsymbolsets.h\"\n\n"; print OUT "int thsymsets_symbols [thsymbolset_size][thsymsets_size];\n\n"; print OUT "int thsymsets_figure [thsymbolset_size][thsymsets_size+1];\n\n"; print OUT "int thsymsets_order[thsymbolset_size];\n\n"; print OUT "int thsymsets_count[thsymsets_size];\n\n"; print OUT "std::map thsymsets_comment;\n\n"; print OUT "\n\n\nvoid thsymsets_symbols_init() {\n"; print OUT "\tsize_t i, j;\n\tfor(i = 0; i <= thsymbolset_size; i++)\n"; print OUT "\t\tfor(j = 0; j < thsymsets_size; j++) \n\t\t\tthsymsets_symbols[i][j] = 0;\n\t\t\n\t\n"; foreach $s1 (reverse sort keys %SYMBOLS) { if (($s1 eq "p") || ($s1 eq "a") || ($s1 eq "l")) { foreach $s2 (sort keys %{$SYMBOLS{$s1}}) { foreach $s3 (sort keys %{$SYMBOLS{$s1}{$s2}}) { print OUT "\tthsymsets_symbols[SYM" . uc($s1) . "_" . uc($s2) . "][$ss{$s3}] = 1;\n"; } } } } print OUT "}\n"; close(OUT); } print "reading therion.mp\n"; $thmpost_library = ""; open(INPT,"therion.mp"); while ($ln = ) { init_symbol($ln); if ($ln =~ /^\s*input\s+(\S+)\s*\;/) { if (open(INPT2,"$1.mp") || open(INPT2,"$1")) { print "reading $1\n"; $fname = $1; $thmpost_library .= "\n\"\\n\\n\\n%%%%% INPUT $fname %%%%%\\n\\n\\n\""; while($ln2 = ) { init_symbol($ln2); if ($ln2 !~ /\s*endinput\s*\;\s*$/) { $thmpost_library .= "\n\"" . encodecxx($ln2) . "\\n\""; } } close(INPT2); $thmpost_library .= "\n\"\\n\\n\\n%%%%% ENDINPUT $fname %%%%%\\n\\n\\n\""; } else { $thmpost_library .= "\n\"" . encodecxx($ln) . "\\n\""; } } else { $thmpost_library .= "\n\"" . encodecxx($ln) . "\\n\""; } } close(INPT); process_symbols(); open(OUTPT,">../thmpost.h"); print OUTPT <../thmpost.cxx"); print OUTPT < 2*radius; endfor; j := j + (j/(2*radius))[u*d_beg,u*d_end]; exitif j > 2*radius; endfor; ); % clip tmp_pic to p; drawoptions(); draw tmp_pic; enddef; def a_pebbles_SKBB (expr p) = T:=identity; pickup PenC; path q, qq; q = bbox p; picture tmp_pic; tmp_pic := image( for i = xpart llcorner q step 1.5u until xpart urcorner q: for j = ypart llcorner q step 1.5u until ypart urcorner q: qq := (superellipse((.2u,0),(0,.1u),(-.2u,0),(0,.-.1u),.75)) % randomized (u/25) rotated uniformdeviate(360) shifted ((i,j) randomized 0.8u); if xpart (p intersectiontimes qq) < 0: thdraw qq; fi; endfor; endfor; ); clip tmp_pic to p; drawoptions(); draw tmp_pic; enddef; def a_water_SKBB (expr Path) = T:=identity; thfill Path; enddef; let a_sump_SKBB = a_water_SKBB; def a_u (expr p) = T:=identity; thfill p withcolor red; enddef; therion/mpost/therion.mp0000644000076400010400000006746112255655124016462 0ustar userAdministrators%% therion source code %% %% therion.mp %% %% This file defines low-level MetaPost macros and variables required %% for generation of map symbols %% %% $Date: 2003/07/01 09:06:44 $ %% $RCSfile: therion.mp,v $ %% $Revision: 1.3 $ %% %% Copyright (C) 2000-2003 Martin Budaj %% %% Some macros are adapted from MPATTERN package of P. Bolek %% %% Some macros are used from MetaFun package of H. Hagen %% %% -------------------------------------------------------------------- %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 2 of the License, or %% any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; if not, write to the Free Software %% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA %% -------------------------------------------------------------------- % This file defines low level macros used for map signatures in Therion. % Before loading this file set `Scale' variable to numeric value % representing denominator of the scale ratio. Internal variable % `prologues' is set to 1 by this file. This module loads also % symbol libraries. tracingstats:=1; prologues:=0; if known Background: background:=Background fi; %TrueScale:=Scale; % @VARIABLE % symbol_scale -- % % internal numeric; in map symbol definitions used for scaling % in T transformation; recommended % values are 1 or 2. %newinternal symbol_scale; %symbol_scale := 1; % @VARIABLE % fill_only -- % % boolean, used in thdraw and % thpattfill commands. When set to false, it has % no effect, when it is true, it supresses all drawing % commands with exception of thpermanentfill, so that only filled % areas are drawn boolean fill_only, horiz_labels, transparency; fill_only := false; horiz_labels:=true; transparency:=false; string ATTR__id, ATTR__survey, ATTR__scrap; boolean ATTR__scrap_centerline; picture ATTR__text; numeric ATTR__height; boolean ATTR__elevation; ATTR__scrap_centerline := false; ATTR__height:=0; ATTR__elevation:=false; boolean ATTR__shotflag_splay; ATTR__shotflag_splay:=false; boolean ATTR__shotflag_duplicate; ATTR__shotflag_duplicate:=false; boolean ATTR__shotflag_approx; ATTR__shotflag_approx:=false; boolean ATTR__stationflag_splay; ATTR__stationflag_splay:=false; color label_fill_color, label_fill_color_tmp; label_fill_color := (1.0, 1.0, 1.0); def push_label_fill_color(expr r,g,b) = label_fill_color_tmp := label_fill_color; label_fill_color := (r,g,b); enddef; def pop_label_fill_color = label_fill_color := label_fill_color_tmp; enddef; def process_filledlabel(expr cent, rot) = begingroup; interim bboxmargin:=2.0bp; q:=((bbox lab) smoothed 2) rotatedaround (cent, rot); fill q withcolor label_fill_color; draw lab rotatedaround (cent, rot); write_circ_bbox(q); % without corners smoothing it was enough to use % write_bbox(q); endgroup; enddef; numeric area_border_errors; area_border_errors = 0; % @VARIABLE % last_write -- % % numeric; charcode of last figure which contained % write_bbox macro; this value is used by % close_file macro. Initially set to -1. numeric last_write; last_write = -1; % @VARIABLE % strut_string -- % % string containing combination of the "highest" and "lowest" character % in used font; it's used by free_text macro. %string strut_string; %strut_string = "(È"; % @VARIABLE % file_name -- % % string, name of file, where write_bbox macro writes % text clipping path % @VARIABLE % s ch -- % % string, temporary string/char variables string s, ch, file_name, bg_name, clip_name, lang, diff_pos, diff_neg, current_scrap, current_src; % @VARIABLE % u v w -- % % internal numeric variables used as basic length units for drawing; % they are set by initialize macro. %
  • u -- normal unit decreasing with increasing scale %
  • v -- like u, but can increase drammaticaly % when some limit is encountered (to get effects like logarithmic % scale) %
  • w -- nearly constant at all scales %
% @VARIABLE % legend_scale -- % % numeric, length of the longer side of signatures' legend box newinternal legend_scale, u,v,w; % @VARIABLE % lab Lab -- % % picture, in which are saved typeset labels picture lab, Lab; % @VARIABLE % T -- % % transformation, defines transformation function for transforming % every argument of thfill % macros transform T; % @VARIABLE % p,q -- % % path, for saving temporary paths path p,q; % @MACRO % initialize -- % % initializes basic length units (u,v,w) and pens used % in map symbols according to scale. Five circular pens are defined: %
  • PenA -- thick; for outlines %
  • PenB, PenC -- thinner; for pits, symbols etc. %
  • PenD -- thinnest; for fine details %
  • PenX -- extra thick; not recommended for use %
def fonts_setup (expr t,s,m,l,h) = write "\def\updown#1#2{\vbox{" & "\offinterlineskip" & "\setbox100=\hbox{#1}" & "\setbox101=\hbox{#2}" & "\ifnum\wd100>\wd101\hsize=\wd100\else\hsize=\wd101\fi" & "\centerline{\box100}\vskip4pt" & "\centerline{\box101}}}" & "\def\thlabel{\thnormalsize}" & "\def\thremark{\thsmallsize\si}" & "\def\thcomment{\thsmallsize}" & "\def\thentrance{\thsmallsize}" & "\def\thaltitude{\thsmallsize}" & "\def\thstationname{\thsmallsize}" & "\def\thdate{\thsmallsize}" & "\def\thheight{\thsmallsize}" & "\def\thheightpos{+\ignorespaces}" & "\def\thheightneg{-\ignorespaces}" & "\def\thframed{\thsmallsize}" & "\def\thwallaltitude{\thtinysize}" to "mptexpre.tex"; write "\def\thtinysize{\size[" & decimal max(optical_zoom*t,0) & "]}" & "\def\thsmallsize{\size[" & decimal max(optical_zoom*s,0) & "]}" & "\def\thnormalsize{\size[" & decimal max(optical_zoom*m,0) & "]}" & "\def\thlargesize{\size[" & decimal max(optical_zoom*l,0) & "]}" & "\def\thhugesize{\size[" & decimal max(optical_zoom*h,0) & "]}" to "mptexpre.tex"; write EOF to "mptexpre.tex"; enddef; def initialize (expr sc) = if unknown BaseScale: BaseScale = sc; fi; optical_zoom := BaseScale/sc; if BaseScale <= 1: % 1:100 u:=14bp; v:=14bp; w:=12bp; fonts_setup(8,10,12,16,24); elseif BaseScale <= 2: % 1:200 u:=12bp; v:=12bp; w:=12bp; fonts_setup(7,8,10,14,20); elseif BaseScale <= 5: % 1:500 u:=10bp; v:=10bp; w:=12bp; fonts_setup(6,7,8,10,14); else: u:=7bp; v:=14bp; w:=10bp; fonts_setup(5,6,7,8,10); fi; u := optical_zoom * u; v := optical_zoom * v; w := optical_zoom * w; defaultscale := 0.8 * optical_zoom; def PenA = pencircle scaled (u/10) enddef; def PenB = pencircle scaled (0.7*u/10) enddef; def PenC = pencircle scaled (0.5*u/10) enddef; def PenD = pencircle scaled (0.35*u/10) enddef; def PenX = pencircle scaled (1.2*u/10) enddef; legend_scale := 3.14*u; enddef; % macro is expanded, we have to know all dimensions and pens before reading % mpattern macros initialize(Scale); vardef thTEX primary s = write "verbatimtex \input th_enc.tex etex" to "mptextmp.mp"; write "btex \mainfont "&s&" etex" to "mptextmp.mp"; write EOF to "mptextmp.mp"; scantokens "input mptextmp" enddef; % @MACRO % inscale -- % % zooms objects to scale specified in legend_scale variable (used in legend % typesetting) def inscale = xscaled legend_scale yscaled (0.618*legend_scale) enddef; % @MACRO % draw_legend_box -- % % draws a legend bounding box and resets drawoptions() options def draw_legend_box = clip currentpicture to unitsquare inscale; drawoptions(); pickup PenB; draw unitsquare inscale; enddef; def clean_legend_box = unfill unitsquare inscale; enddef; def legend_point (expr name) = % if substring (2,9) of name = "station": % scantokens(name)((0.5,0.5) inscale); % else: scantokens(name)((0.5,0.5) inscale,0,1,(0,0)); % fi; draw_legend_box; enddef; def legend_line (expr name) = scantokens(name)((((-0.3,.5)..(.3,.7)..(.5,.3)..{dir 80}(1.3,.9)) inscale) randomized 3mm); draw_legend_box; enddef; % legend_label % legend_area % legend_random % @MACRO % roundone -- % % rounds numeric value to one decimal point vardef roundone(expr n) = % round(10*n)/10 n enddef; % @MACRO % process_label -- % % draws a label saved in lab picture variable and calls % write_bbox macro. def process_label (expr cent, rot) = begingroup; interim bboxmargin:=0.8bp; q:=((bbox lab) smoothed 2) rotatedaround (cent, rot); draw lab rotatedaround (cent, rot); write_circ_bbox(q); % without corners smoothing it was enough to use % write_bbox(q); endgroup; enddef; % @MACRO % process_uplabel -- % % draws a label into semicircular box and writes clipping path to a file def process_uplabel = begingroup; interim bboxmargin := 0.8 bp; q:=bbox lab; endgroup; alef:=.8-.02*(xpart lrcorner q - xpart llcorner q); % show alef; q:=alef[llcorner q,ulcorner q]{up} .. {down}alef[lrcorner q, urcorner q] -- lrcorner q -- llcorner q -- cycle; draw lab; draw q; q:=reverse q; write_circ_bbox(q); enddef; % @MACRO % process_downlabel -- % % draws a label into down oriented semicircular box and writes % clipping path to a file def process_downlabel = begingroup; interim bboxmargin := 0.8 bp; q:=bbox lab; endgroup; alef:=1-(.8-.02*(xpart lrcorner q - xpart llcorner q)); q:=alef[llcorner q,ulcorner q]{down} .. {up}alef[lrcorner q, urcorner q] -- urcorner q -- ulcorner q -- cycle; draw lab; draw q; write_circ_bbox(q); enddef; % @MACRO % process_updownlabel -- % % draws a label splitted into down and up oriented semicircular boxes and % writes clipping path to a file def process_updownlabel = begingroup; interim bboxmargin := 0.8 bp; p:=bbox lab; endgroup; leftside:=xpart llcorner p; rightside:=xpart lrcorner p; draw (xpart llcorner p,.5[ypart llcorner p,ypart ulcorner p]) -- (xpart lrcorner p,.5[ypart llcorner p,ypart ulcorner p]); alef:=1.05-.02*(xpart lrcorner p - xpart llcorner p); % alef:=.8-.02*(rightside-leftside); p:=alef[(leftside, ypart llcorner p),(leftside, ypart ulcorner p)]{up} .. {down}alef[(rightside, ypart lrcorner p), (rightside, ypart urcorner p)] -- alef[(rightside, ypart urcorner p), (rightside, ypart lrcorner p)]{down} .. {up}alef[(leftside, ypart ulcorner p),(leftside, ypart llcorner p)] -- cycle; % p:=alef[llcorner p,ulcorner p]{up} .. {down}alef[lrcorner p, urcorner p] -- % aleff[llcorner p,ulcorner p]{down} .. % {up}aleff[lrcorner p, urcorner p] -- cycle; draw lab; draw p; p:=reverse p; write_circ_bbox(p); enddef; def process_updownlabel_OLD = p:=bbox lab; q:=bbox Lab; leftside:=min(xpart llcorner p, xpart ulcorner q); rightside:=max(xpart lrcorner p, xpart urcorner q); draw .5[(leftside, ypart llcorner p),(leftside, ypart ulcorner q)] -- .5[(rightside,ypart lrcorner p),(rightside,ypart urcorner q)]; alef:=.8-.02*(rightside-leftside); q:=alef[(leftside, ypart llcorner p),(leftside, ypart ulcorner p)]{up} .. {down}alef[(rightside, ypart lrcorner p), (rightside, ypart urcorner p)] -- alef[(rightside, ypart urcorner q), (rightside, ypart lrcorner q)]{down} .. {up}alef[(leftside, ypart ulcorner q),(leftside, ypart llcorner q)] -- cycle; draw lab; draw Lab; draw q; q:=reverse q; write_circ_bbox(q); enddef; % @MACRO % process_boxedlabel -- % % draws a label into circular box and writes % clipping path to a file def process_boxedlabel = q:=bbox lab; draw lab; draw q; write_bbox(q); enddef; % @MACRO % process_circledlabel -- % % draws a label into circular box and writes % clipping path to a file def process_circledlabel = begingroup; interim bboxmargin := 0.4 bp; q:=bbox lab; endgroup; q:=point 0 of q .. point 1 of q .. point 2 of q .. point 3 of q .. cycle; draw lab; draw q; write_circ_bbox(q); enddef; % @MACRO % write_bbox -- % % Arguments: % path variable -- rectangular bounding box of a label; % assumptions: path is cyclic, counterclockwise oriented, with four points, % composed from linear segments; % see general write_circ_bbox macro % Results: % one file per figure which uses labels with a clipping path in pseudo-pdf % format def write_bbox (expr q) = file_name := jobname & "." & decimal(charcode) & "bbox"; for i:=4 downto 0: s := decimal(roundone(xpart point i of q)) & " " & decimal(roundone(ypart point i of q)) & if i=4: " m " else: " l" fi; write s to file_name; endfor; last_write := charcode; enddef; % @MACRO % write_circ_bbox -- % % Arguments: % path variable, only assumption is that path is cyclic % and counterclockwise oriented. % Results: % one file per figure which uses labels with a clipping path in pseudo-pdf % format def write_circ_bbox expr q = file_name := jobname & "." & decimal(charcode) & "bbox"; tmp:=length q; s := decimal(roundone(xpart point tmp of q)) & " " & decimal(roundone(ypart point tmp of q)) & " m"; write s to file_name; for i:=tmp downto 1: s := decimal(roundone(xpart precontrol i of q)) & " " & decimal(roundone(ypart precontrol i of q)) & " " & decimal(roundone(xpart postcontrol i-1 of q)) & " " & decimal(roundone(ypart postcontrol i-1 of q)) & " " & decimal(roundone(xpart point i-1 of q)) & " " & decimal(roundone(ypart point i-1 of q)) & " c"; write s to file_name; endfor; last_write := charcode; enddef; % @MACRO % close_file -- % % closes file with a clipping path; it's invoked by endchar macro def close_file = if last_write=charcode: write EOF to jobname & "." & decimal(charcode) & "bbox"; fi; enddef; % endchar should run close_file macro extra_endfig := "close_file;"; % @MACRO % thdraw -- % % like plain MetaPost's draw, but draws a path transformed % (rotated, scaled, shifted) to scrap's coordinates according T variable. % (If fill_only=false) def thdrawoptions(text t) = def _thop_ = t enddef enddef; thdrawoptions(); def thdraw expr p = if not fill_only: addto currentpicture if picture p: also (p transformed T) else: doublepath (p transformed T) withpen currentpen fi _thop_ _op_ else: addto currentpicture also nullpicture fi enddef; % @MACRO % thfill -- % % fills a path transformed % (rotated, scaled, shifted) to scrap's coordinates according T variable. % Filled areas are clipped (like most % other lines and points) with a clipping path around text labels. def thfill expr c = addto currentpicture contour (c transformed T) _thop_ _op_ enddef; def thfilldraw expr c = if not fill_only: addto currentpicture contour (c transformed T) withpen currentpen _thop_ _op_ else: addto currentpicture contour (c transformed T) _thop_ _op_ fi enddef; def thunfill expr c = thfill c withcolor background enddef; def thundraw expr p = thdraw p withcolor background enddef; def thunfilldraw expr c = thfilldraw c withcolor background enddef; def thclean expr c = if transparency: thfill c withtransparentcolor tr_bg else: thunfill c fi; enddef; def thPatternFill (expr Path, Pattern) = T:=identity; thclean Path; thfill Path withpattern Pattern; enddef; %def thLegendPatternFill (expr Path, Pattern) = % T:=identity; % thfill Path withpattern Pattern; %enddef; % for drawarrow: def _finarr text t = thdraw _apth t; thfilldraw arrowhead _apth t enddef; % @MACRO % thpermanentfill -- % % Fills specified area with a solid color; this area is not affected by % text clipping path %def thpermanentfill expr c = % addto currentpicture contour (c transformed T) _thop_ _op_ %enddef; let thpermanentfill = thfill; primarydef p aligned al= p shifted (xpart al * xpart U, ypart al * ypart U) enddef; % macros for drawing scraps in upper and lower levels; filled lower scraps % require special treatment (MetaPost doesn't support non-continuous paths). % We can't use one file for both, while PDF XObject has to be explicitely % filled or stroked. Second macro writes also pseudo-pdf code of a clipping % path for given scrap boolean drawnext; drawnext:=true; def draw_upscrap (expr isout)(text t) = path q; for i=t: if (numeric i): if (i=1): drawnext:=true; else: drawnext:=false; fi; else: if drawnext: draw i withpen PenD; fi; if not known q: q:=i; else: q:=q -- i; fi; fi; endfor; if not cycle q: q:=q -- cycle; fi; if turningnumber q = 0: thwarning("scrap outline intersects itself"); fi; if isout=1: if turningnumber q > 0: q := reverse q; fi; else: if turningnumber q < 0: q := reverse q; fi; fi; addto bgfill contour q; enddef; % following macro writes noncontinuous PostScript path directly to EPS file % (filled background and clipping path) picture bgfill; bgfill:=nullpicture; def draw_downscrap = bg_name := jobname & "." & decimal(charcode) & "bg"; clip_name := jobname & "." & decimal(charcode) & "clip"; write "%!PS" to bg_name; write "%%BoundingBox: " & decimal floor xpart llcorner bgfill & " " & decimal floor ypart llcorner bgfill & " " & decimal ceiling xpart urcorner bgfill & " " & decimal ceiling ypart urcorner bgfill to bg_name; write "%%Page: 1 1" to bg_name; write "newpath" to bg_name; for qq within bgfill: q := pathpart qq; tmp:=length q; s := decimal(roundone(xpart point tmp of q)) & " " & decimal(roundone(ypart point tmp of q)) & " m"; write s & "oveto" to bg_name; write s to clip_name; for i:=tmp downto 1: s := decimal(roundone(xpart precontrol i of q)) & " " & decimal(roundone(ypart precontrol i of q)) & " " & decimal(roundone(xpart postcontrol i-1 of q)) & " " & decimal(roundone(ypart postcontrol i-1 of q)) & " " & decimal(roundone(xpart point i-1 of q)) & " " & decimal(roundone(ypart point i-1 of q)) & " c"; write s & "urveto" to bg_name; write s to clip_name; endfor; endfor; write "closepath fill" to bg_name; write "showpage" to bg_name; write "%%EOF" to bg_name; write EOF to bg_name; write EOF to clip_name; bgfill:=nullpicture; enddef; vardef buildcycle(text ll) = save ta_, tb_, k_, i_, pp_; path pp_[]; k_=0; for q=ll: pp_[incr k_]=q; endfor i_=k_; for i=1 upto k_: (ta_[i], length pp_[i_]-tb_[i_]) = pp_[i] intersectiontimes reverse pp_[i_]; if ta_[i]<0: message("[Error: area borders "& area_border[i] &" and "& area_border[i_] &" don't intersect in scrap " & current_scrap & " (file " & current_src & ")]"); area_border_errors := area_border_errors + 1; fi i_ := i; endfor for i=1 upto k_: subpath (ta_[i],tb_[i]) of pp_[i] .. endfor cycle enddef; vardef unitvector primary z = if (z<>(0,0)): z/abs z else: hide(thwarning("strange path")) (0,epsilon) fi enddef; def thwarning (expr m) = message("[Warning: " & m & " in scrap " & current_scrap & "]"); enddef; def check_area_borders = if area_border_errors > 0: fi; enddef; %%%%%%%%%%%% Map symbols management %%%%%%%%%%%%%%%%%%% def mapsymbol (expr name, set, warning) = string s, stype, lname, ID; stype = substring (0,1) of name; lname = name & "_" & set; ID := "ID_" & lname; if (known scantokens ID): if stype = "a": s = "def " & name & " = scantokens(" & ditto & lname & ditto & ") enddef;"; else: s = "let " & name & " = " & lname & ";"; fi; scantokens s; elseif warning: message("[Warning: undefined symbol `" & lname & "']"); fi; enddef; %def hidesymbol (expr name) = % string s, stype; % stype = substring (0,1) of name; % if stype = "a": % s = "def " & name & " = scantokens(" & ditto & "a_empty" & ditto & ") enddef;"; % else: % s = "vardef " & name & "@# (text t) = enddef;"; % fi; % scantokens s; % write name to "missed.dat"; %enddef; def initsymbol (expr name) = s := "ID_" & name & " = 1"; scantokens s; enddef; %%% % comment out groups in order to use 'save ATTR_*' appropriately def beginfig(expr c) = % begingroup charcode:=c; clearxy; clearit; clearpen; pickup defaultpen; drawoptions(); scantokens extra_beginfig; save smartll, smartur; pair smartll[], smartur[]; smart_count := 0; enddef; def endfig = scantokens extra_endfig; shipit; % endgroup enddef; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % P. Bolek's MPATTERN package adapted and simplified for Therion % (with the same user interface except of patterncolor) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% string Pname_, PXYsteps_; string Pmatrix_; numeric Pnum_; Pnum_=0; def PmakeBB_= PBBox_ := "[" & decimal Plft_ & " " & decimal Plow_ & " " & decimal Prt_ & " " & decimal Pup_ & "]"; enddef; def Psteps_= PXYsteps_ := decimal if unknown PXStep_: (Prt_-Plft_) else: PXStep_ fi & ":" & decimal if unknown PYStep_: (Pup_-Plow_) else: PYStep_ fi; enddef; vardef Pfindbounds_= Plow_ = ypart (llcorner currentpicture); Plft_ = xpart (llcorner currentpicture); Pup_ = ypart (urcorner currentpicture); Prt_ = xpart (urcorner currentpicture); PmakeBB_; enddef; def PmakePattern_(expr name)= write decimal (Pnum_*epsilon) & ":" & jobname & "." & decimal charcode & ":" & PBBox_ & ":" & PXYsteps_ & ":" & Pmatrix_ to "patterns.dat" enddef; % User interface macros vardef patternbbox(expr a)(text b)= save Pi_, Pz_; numeric Pi_, Pz_[]; if pair a: Plft_:=min(xpart(a),xpart(b)); Plow_:=min(ypart(a),ypart(b)); Prt_:=max(xpart(a),xpart(b)); Pup_:=max(ypart(a),ypart(b)); else: Pi_=1; for t=b: Pz_[Pi_]=t; Pi_:=Pi_+1; endfor; Plft_:=min(a,Pz_2); Plow_:=min(Pz_1,Pz_3); Prt_:=max(a,Pz_2); Pup_:=max(Pz_1,Pz_3); fi; PmakeBB_; enddef; def beginpattern(suffix name)= numeric PXStep_, PYStep_; numeric Plow_, Plft_, Pup_, Prt_; string PBBox_; Pmatrix_:="[1 0 0 1 0 0]"; Pname_:=str name; Pnum_:=Pnum_+1; beginfig(Pnum_+4000); enddef; def endpattern= if unknown PBBox_: Pfindbounds_; fi; endfig; Psteps_; PmakePattern_(Pname_); scantokens(Pname_ & "=Pnum_;"); enddef; picture pattpict; color patterncolor_; patterncolor_ := black; primarydef p withpattern s= if known s: hide(pattpict := image(draw (0,0)--(10,10)); for i within pattpict: patterncolor_ := (redpart i, greenpart i, bluepart i); endfor;) p withcolor (epsilon, 10*epsilon, s*epsilon) if known mpversion: if scantokens(mpversion)>=1.000: withprescript(decimal redpart patterncolor_ & " " & decimal greenpart patterncolor_ & " " & decimal bluepart patterncolor_ & " THsetpatterncolor") fi; fi; else: p withcolor (1,0,0); message("Warning: undefined pattern ignored"); fi; enddef; def patterntransform expr t= Pmatrix_ := "[" & decimal xxpart t & " " & decimal yxpart t & " " & decimal xypart t & " " & decimal yypart t & " " & decimal xpart t & " " & decimal ypart t & "]"; enddef; def patternxstep expr t= PXStep_ = t; enddef; def patternystep expr t= PYStep_ = t; enddef; def patternstep text t= if pair t: PXStep_ = xpart t; PYStep_ = ypart t; else: (PXStep_,PYStep_)=t; fi; enddef; def patterncolor expr t= message("Warning: patterncolor not supported in Therion"); enddef; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % end of pattern macros %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % transparent rgb colors numeric RGBnum; RGBnum=0; string RGBname; def def_transparent_rgb (suffix name)(expr r, g, b) = RGBnum := RGBnum+1; RGBname := str name; write decimal (RGBnum*epsilon) & ":" & decimal r & " " & decimal g & " " & decimal b to "rgbcolors.dat"; scantokens(RGBname & ":=RGBnum;"); enddef; primarydef p withtransparentcolor s= p withcolor (epsilon, 12*epsilon, s*epsilon); enddef; def_transparent_rgb(tr_white, 1, 1, 1); def_transparent_rgb(tr_blue, 0, 0, 1); def_transparent_rgb(tr_black, 0, 0, 0); def_transparent_rgb(tr_bg, redpart background, greenpart background, bluepart background); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % some useful macros from H. Hagen's MetaFun package %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% vardef paired (expr d) = if pair d : d else : (d,d) fi enddef ; primarydef p randomshifted s = begingroup ; save ss ; pair ss ; ss := paired(s) ; p shifted (-.5xpart ss + uniformdeviate xpart ss, -.5ypart ss + uniformdeviate ypart ss) endgroup enddef ; primarydef p randomized s = (if path p : for i=0 upto length(p)-1 : ((point i of p) randomshifted s) .. controls ((postcontrol i of p) randomshifted s) and ((precontrol (i+1) of p) randomshifted s) .. endfor if cycle p : cycle else : ((point length(p) of p) randomshifted s) fi elseif pair p : p randomshifted s elseif color p : if color s : (uniformdeviate redpart s * redpart p, uniformdeviate greenpart s * greenpart p, uniformdeviate bluepart s * bluepart p) elseif pair s : ((xpart s + uniformdeviate (ypart s - xpart s)) * p) else : (uniformdeviate s * p) fi else : p + uniformdeviate s fi) enddef ; primarydef p llmoved d = ((llcorner p) shifted (-xpart paired(d),-ypart paired(d))) enddef ; primarydef p lrmoved d = ((lrcorner p) shifted (+xpart paired(d),-ypart paired(d))) enddef ; primarydef p urmoved d = ((urcorner p) shifted (+xpart paired(d),+ypart paired(d))) enddef ; primarydef p ulmoved d = ((ulcorner p) shifted (-xpart paired(d),+ypart paired(d))) enddef ; primarydef p smoothed d = (p llmoved (-xpart paired(d),0) -- p lrmoved (-xpart paired(d),0) {right} .. p lrmoved (0,-ypart paired(d)) -- p urmoved (0,-ypart paired(d)) {up} .. p urmoved (-xpart paired(d),0) -- p ulmoved (-xpart paired(d),0) {left} .. p ulmoved (0,-ypart paired(d)) -- p llmoved (0,-ypart paired(d)) {down} .. cycle) enddef ; vardef punked primary p = (point 0 of p for i=1 upto length(p)-1 : -- point i of p endfor if cycle p : -- cycle else : -- point length(p) of p fi) enddef ; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % end of MetaFun macros %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % we input map symbol definitions input thPoint; input thLine; input thArea; input thText; input thSpecial; input uAUT; input thTrans; nonstopmode; therion/mpost/thLine.mp0000644000076400010400000006762612054203266016231 0ustar userAdministrators%% therion source code %% %% This file defines macros for line symbols %% %% $Date: 2003/07/01 09:06:44 $ %% $RCSfile: thLine.mp,v $ %% $Revision: 1.4 $ %% %% Copyright (C) 2000 Martin Budaj %% %% -------------------------------------------------------------------- %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 2 of the License, or %% any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; if not, write to the Free Software %% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA %% -------------------------------------------------------------------- % some definitions % adjust step according to the length of the path; return at least two steps vardef adjust_step (expr len, s) = if s <= len/2: len / (floor(len / s)) else: len/2 fi enddef; def mark_(expr p,t,l) = thdraw (point t of p) -- ((point t of p) + l * unitvector(thdir(p,t) rotated 90)); enddef; vardef thdir (expr p,t) = % 1 * epsilon caused problems in scales < 1:1000 % n * epsilon is enough for scale 1:(n*1000) if arclength(p)=0: hide(thwarning("unable to determine direction on zero-length path")) (0,1) else: % ((direction t-100*epsilon of p) + (direction t+100*epsilon of p)) / 2 postcontrol (t+1000*epsilon) of p - precontrol (t-1000*epsilon) of p % direction t of p fi enddef; % walls: def l_wall_bedrock_UIS (expr P) = T:=identity; pickup PenA; thdraw P; enddef; def l_wall_sand_SKBB (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, 0.1u); pickup PenB; forever: t := arctime cas of P; thdraw ((point t of P) + (uniformdeviate 1) * .4u * unitvector(thdir(P,t) rotated -90)); cas := cas + mojkrok; exitif cas > dlzka + (mojkrok / 3); % for rounding errors endfor; pickup PenA; thdraw P; enddef; def l_wall_pebbles_SKBB (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, .35u); pickup PenC; q:=superellipse((.2u,0),(0,.1u),(-.2u,0),(0,.-.1u),.75); forever: t := arctime (cas + mojkrok/2) of P; thdraw q randomized (u/20) rotated (angle(thdir(P,t)) + (normaldeviate*40)) shifted point t of P; cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; enddef; def l_wall_clay_SKBB (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, .5u); pickup PenC; q := (-0.15u,0){up}..{down}origin..{up}(0.15u,0); forever: t := arctime (cas + mojkrok/2) of P; thdraw q shifted (point t of P + .25u * unitvector(thdir(P,t) rotated -90)); cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; pickup PenA; thdraw P; enddef; def l_wall_debris_SKBB (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, .4u); pickup PenC; % q := ((-.1u,-.15u)--(.2,.03u)--(-.2u,.15u)--cycle) scaled 1.5; q := ((-.2u,-.1u)--(.2u,-.1u)--(0,.2u)--cycle) scaled 1.1; forever: t := arctime (cas + mojkrok/2) of P; thdraw q randomized (u/10) rotated uniformdeviate (360) shifted point t of P; cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; enddef; def l_wall_blocks_SKBB (expr P) = % pickup PenD; % draw P withcolor red; T:=identity; cas := 0; dlzka := arclength P; if dlzka > 0: mojkrok:=adjust_step(dlzka, 1.5u); pickup PenA; forever: t1 := arctime (cas + mojkrok*1/10) of P; t2 := arctime (cas + mojkrok*9/10) of P; q := ((point t1 of P) + .4u * unitvector(thdir(P,t1) rotated -90)) -- (subpath (t1,t2) of P) -- ((point t2 of P) + .4u * unitvector(thdir(P,t2) rotated -90)); thdraw q randomized (u/6); cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; fi; enddef; def l_wall_ice_SKBB (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, .5u); pickup PenC; p := (-.1u,0)--(.1u,0); q := (0,-.1u)--(0,.1u); forever: t := arctime (cas + mojkrok/2) of P; thdraw p shifted (point t of P + .25u * unitvector(thdir(P,t) rotated -90)); thdraw q shifted (point t of P + .25u * unitvector(thdir(P,t) rotated -90)); cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; pickup PenA; thdraw P; enddef; def l_wall_underlying_UIS (expr P) = T:=identity; pickup PenA; thdraw P dashed evenly scaled optical_zoom; enddef; def l_wall_unsurveyed_SKBB (expr P) = T:=identity; pickup PenC; thdraw P; enddef; def l_wall_presumed_UIS (expr P) = T:=identity; pickup PenA; thdraw P dashed evenly scaled (2*optical_zoom); enddef; % other line symbols def l_pit_UIS (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, 0.25u); pickup PenD; forever: t := arctime cas of P; mark_ (P,t,0.2u); cas := cas + mojkrok; exitif cas > dlzka + (mojkrok / 3); % for rounding errors endfor; pickup PenC; thdraw P; enddef; let l_floorstep_UIS = l_pit_UIS; def l_overhang_SKBB (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, 0.3u); pickup PenC; t1:=0; forever: t := arctime (cas + mojkrok/2) of P; t2 := arctime (cas + mojkrok) of P; thfill (subpath (t1,t2) of P) -- ((point t of P) + .3u * unitvector(thdir(P,t) rotated 90)) -- cycle; cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors t1:=t2; endfor; thdraw P; enddef; def l_chimney_UIS (expr P) = T:=identity; pickup PenC; thdraw P dashed evenly scaled optical_zoom; enddef; def l_ceilingstep_SKBB (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, 0.8u); pickup PenC; forever: t1 := arctime (cas + mojkrok*1/5) of P; t := arctime (cas + mojkrok/2) of P; t2 := arctime (cas + mojkrok*4/5) of P; thdraw (subpath (t1,t2) of P); mark_ (P,t,0.2u); cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; enddef; def l_ceilingmeander_SKBB (expr P) = pair Pp; pair Pd; pair Pv; T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, 0.8u); pickup PenC; forever: t := arctime (cas + mojkrok/2) of P; Pp := (point t of P); Pd := unitvector(thdir(P,t)); Pv := Pd rotated 90; thdraw (Pp + 0.1u * Pv) -- (Pp + 0.2u * Pv); thdraw (Pp + 0.2u * Pv + 0.2u * Pd) -- (Pp + 0.2u * Pv - 0.2u * Pd); thdraw (Pp - 0.1u * Pv) -- (Pp - 0.2u * Pv); thdraw (Pp - 0.2u * Pv + 0.2u * Pd) -- (Pp - 0.2u * Pv - 0.2u * Pd); cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; enddef; %Bruce Mutton 2012.06.16 uses general code for l_ceilingmeander_SKBB defined in therion source code by Martin Budaj 5.3.9 % but ticks on outside (rock) side of lines def l_ceilingmeander_UIS (expr P) = pair Pp; pair Pd; pair Pv; T:=identity; cas := 0; % cursor to step along path dlzka := arclength P; mojkrok:=adjust_step(dlzka, 0.8u); % symbol length nudged to be multiple of path length pickup PenC; forever: t := arctime (cas + mojkrok/2) of P; Pp := (point t of P); Pd := unitvector(thdir(P,t)); Pv := Pd rotated 90; thdraw (Pp + 0.2u * Pv) -- (Pp + 0.3u * Pv); % add 0.1u to each moves ticks outside thdraw (Pp + 0.2u * Pv + 0.2u * Pd) -- (Pp + 0.2u * Pv - 0.2u * Pd); thdraw (Pp - 0.2u * Pv) -- (Pp - 0.3u * Pv); % subtract 0.1u to each moves ticks outside thdraw (Pp - 0.2u * Pv + 0.2u * Pd) -- (Pp - 0.2u * Pv - 0.2u * Pd); cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; enddef; let l_ceilingmeander_NZSS = l_ceilingmeander_UIS; %Bruce Mutton 2012.06.16 uses general code for l_ceilingstep_SKBB defined in therion source code by Martin Budaj 5.3.9 % but ticks on righthand (rock) side of line def l_ceilingstep_UIS (expr P) = T:=identity; cas := 0; % cursor to step along path dlzka := arclength P; mojkrok:=adjust_step(dlzka, 0.8u); % symbol length nudged to be multiple of path length pickup PenC; forever: t1 := arctime (cas + mojkrok*1/5) of P; t := arctime (cas + mojkrok/2) of P; t2 := arctime (cas + mojkrok*4/5) of P; thdraw (subpath (t1,t2) of P); mark_ (P,t,-0.2u); % change sign to -0.2u cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; enddef; let l_ceilingstep_NZSS = l_ceilingstep_UIS; %Bruce Mutton 2012.06.10 uses general code for l_pit_UIS defined in therion source code by Martin Budaj 5.3.9 % dots on righthand (rock) side of line spaced 0.2u, 0.2u same as floor-step ticks def l_chimney_NZSS (expr P) = T:=identity; cas := 0; % cursor to step along path dlzka := arclength P; mojkrok:=adjust_step(dlzka, 0.25u); % symbol length nudged to be multiple of path length q:= (0.20u,-0.20u) -- (0.21u,-0.21u); % dot pickup PenC; %2nd thinnest pen forever: t := arctime cas of P; thdraw q rotated angle(thdir(P,t)) shifted (point t of P ); % draw dots cas := cas + mojkrok; exitif cas > dlzka + (mojkrok / 3); % for rounding errors endfor; pickup PenB; %2nd thickest pen thdraw P; %continuous line enddef; %Bruce Mutton 2010.06.20 uses general code and adjust_step defined in therion source code by Martin Budaj %for Therion 5.3.8 def l_wall_presumed_NZSS (expr P) = T:=identity; cas := 0; % cursor to step along path dlzka := arclength P; mojkrok:=adjust_step(dlzka, 1.5u); % symbol length nudged to be multiple of path length q := (-0.2u,-0.4u)--(0,0)--(0.2u,-0.4u); % define v shape forever: t1 := arctime (cas + mojkrok*1/5) of P; t := arctime (cas + mojkrok/2) of P; t2 := arctime (cas + mojkrok*4/5) of P; pickup PenA; % thick thdraw (subpath (t1,t2) of P); % dash pickup PenC; % thin thdraw q rotated angle(thdir(P,t)) shifted (point t of P ); % v shape cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; enddef; def l_floormeander_SKBB (expr P) = pair Pp; pair Pd; pair Pv; pair PPp; pair PPd; pair PPv; T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, 0.25u); pickup PenC; forever: t := arctime cas of P; Pp := (point t of P); Pd := unitvector(thdir(P,t)); Pv := Pd rotated 90; thdraw (Pp + 0.1u * Pv) -- (Pp + 0.2u * Pv); thdraw (Pp - 0.1u * Pv) -- (Pp - 0.2u * Pv); if cas > 0: thdraw (PPp + 0.2u * PPv) -- (Pp + 0.2u * Pv); thdraw (PPp - 0.2u * PPv) -- (Pp - 0.2u * Pv); fi; PPp := Pp; PPd := Pd; PPv := Pv; cas := cas + mojkrok; exitif cas > dlzka + (mojkrok / 3); % for rounding errors endfor; enddef; boolean alw_perpendicular; def l_slope_SKBB (expr P,S)(text Q) = %show Q; T:=identity; numeric dirs[]; numeric lengths[]; for i=Q: dirs[redpart i]:=greenpart i; lengths[redpart i]:=bluepart i; endfor; li:=length(P); % last alw_perpendicular:=true; for i=0 upto li: if unknown dirs[i]: dirs[i]:=-1; else: if dirs[i]>-1: dirs[i]:=((90-dirs[i]) - angle(thdir(P,i))) mod 360; alw_perpendicular:=false; fi; fi; if unknown lengths[i]: lengths[i]:=-1; fi; endfor; %for i=0 upto li: show dirs[i]; endfor; ni:=0; % next pi:=0; % previous for i=0 upto li: d:=dirs[i]; if d=-1: if (i=0) or (i=li): dirs[i] := angle(thdir(P,i) rotated 90) mod 360; pi:=i; else: if ni<=i: for j=i upto li: ni:=j; exitif dirs[j]>-1; endfor; fi; w:=arclength(subpath(pi,i) of P) / arclength(subpath(pi,ni) of P); dirs[i]:=w[dirs[pi],dirs[ni]]; % if (dirs[i]-angle(thdir(P,i))) mod 360>180: % dirs[i]:=w[dirs[ni],dirs[pi]]; % message("*******"); % fi; fi; else: pi:=i; fi; endfor; %for i=0 upto li: show dirs[i]; endfor; ni:=0; % next pi:=0; % previous for i=0 upto li: l:=lengths[i]; if l=-1: if (i=0) or (i=li): lengths[i] := 1cm; % should never happen! thwarning("slope width at the end point not specified"); pi:=i; else: if ni<=i: for j=i+1 upto li: ni:=j; exitif lengths[j]>-1; endfor; fi; w:=arclength(subpath(pi,i) of P) / arclength(subpath(pi,ni) of P); lengths[i]:=w[lengths[pi],lengths[ni]]; pi:=i; fi; else: pi:=i; fi; endfor; % for i=0 upto li: show lengths[i]; endfor; T:=identity; boolean par; offset:=0; dlzka := (arclength P); if dlzka>3u: offset := 0.3u; elseif dlzka>u: offset := 0.1u; fi; dlzka:=dlzka-2offset; cas := offset; mojkrok:=adjust_step(dlzka,1.4u) / 2; pickup PenD; par := false; forever: t := arctime cas of P; if t mod 1>0: % not a key point w := (arclength(subpath(floor t,t) of P) / arclength(subpath(floor t,ceiling t) of P)); if alw_perpendicular: a := 90; else: a := w[dirs[floor t],dirs[ceiling t]]; fi; l := w[lengths[floor t],lengths[ceiling t]]; else: if alw_perpendicular: a := 90; else: a:= dirs[t]; fi; l:=lengths[t]; fi; a := a + angle(thdir(P,t)); thdraw (point t of P) -- ((point t of P) + if par: 0.333 * fi l * unitvector(dir(a))); cas := cas + mojkrok; par := not par; exitif cas > dlzka + offset + 0.1mm; % for rounding errors endfor; if S = 1: pickup PenC; draw P fi; %pickup pencircle scaled 3pt; %for i=0 upto li: draw point i of P; endfor; enddef; def l_slope_BCRA (expr P,S)(text Q) = %show Q; T:=identity; numeric dirs[]; numeric lengths[]; for i=Q: dirs[redpart i]:=greenpart i; lengths[redpart i]:=bluepart i; endfor; li:=length(P); % last alw_perpendicular:=true; for i=0 upto li: if unknown dirs[i]: dirs[i]:=-1; else: if dirs[i]>-1: dirs[i]:=((90-dirs[i]) - angle(thdir(P,i))) mod 360; alw_perpendicular:=false; fi; fi; if unknown lengths[i]: lengths[i]:=-1; fi; endfor; %for i=0 upto li: show dirs[i]; endfor; ni:=0; % next pi:=0; % previous for i=0 upto li: d:=dirs[i]; if d=-1: if (i=0) or (i=li): dirs[i] := angle(thdir(P,i) rotated 90) mod 360; pi:=i; else: if ni<=i: for j=i upto li: ni:=j; exitif dirs[j]>-1; endfor; fi; w:=arclength(subpath(pi,i) of P) / arclength(subpath(pi,ni) of P); dirs[i]:=w[dirs[pi],dirs[ni]]; % if (dirs[i]-angle(thdir(P,i))) mod 360>180: % dirs[i]:=w[dirs[ni],dirs[pi]]; % message("*******"); % fi; fi; else: pi:=i; fi; endfor; %for i=0 upto li: show dirs[i]; endfor; ni:=0; % next pi:=0; % previous for i=0 upto li: l:=lengths[i]; if l=-1: if (i=0) or (i=li): lengths[i] := 1cm; % should never happen! thwarning("slope width at the end point not specified"); pi:=i; else: if ni<=i: for j=i+1 upto li: ni:=j; exitif lengths[j]>-1; endfor; fi; w:=arclength(subpath(pi,i) of P) / arclength(subpath(pi,ni) of P); lengths[i]:=w[lengths[pi],lengths[ni]]; pi:=i; fi; else: pi:=i; fi; endfor; % for i=0 upto li: show lengths[i]; endfor; T:=identity; boolean par; offset:=0; dlzka := (arclength P); if dlzka>3u: offset := 0.3u; elseif dlzka>u: offset := 0.1u; fi; dlzka:=dlzka-2offset; cas := offset; mojkrok:=adjust_step(dlzka,1.4u) / 2; pickup PenD; par := false; forever: t := arctime cas of P; if t mod 1>0: % not a key point w := (arclength(subpath(floor t,t) of P) / arclength(subpath(floor t,ceiling t) of P)); if alw_perpendicular: a := 90; else: a := w[dirs[floor t],dirs[ceiling t]]; fi; l := w[lengths[floor t],lengths[ceiling t]]; else: if alw_perpendicular: a := 90; else: a:= dirs[t]; fi; l:=lengths[t]; fi; a := a + angle(thdir(P,t)); if par: thfill (point t of P) + mojkrok/2.5 * unitvector(dir(a+90))-- ((point t of P) + l * unitvector(dir(a))) -- (point t of P) + mojkrok/2.5 * unitvector(dir(a-90)) -- cycle; fi; cas := cas + mojkrok; par := not par; exitif cas > dlzka + offset + 0.1mm; % for rounding errors endfor; enddef; def l_contour_UIS(expr P)(text txt) = T:=identity; pickup PenD; thdraw P; for pnt=txt: if pnt=-2: mark_(P,arctime(arclength(P)/2) of P, 0.2u); elseif pnt>=0: mark_(P,pnt,0.2*u); fi; exitif pnt<0; endfor; enddef; def l_contour_SKBB(expr P)(text txt) = T:=identity; pickup PenD; thdraw P; for pnt=txt: if (pnt=-2) or (pnt=-1): mark_(P,arctime(arclength(P)/2) of P, 0.2u); elseif pnt>=0: mark_(P,pnt,0.2*u); fi; exitif pnt<0; endfor; enddef; def l_rockborder_UIS (expr P) = T:=identity; pickup PenC; if cycle P: thclean P fi; thdraw P; enddef; def l_rockedge_UIS (expr P) = T:=identity; pickup PenD; thdraw P; enddef; def l_border_visible_SKBB (expr Path) = T:=identity; pickup PenC; draw Path; enddef; def l_border_temporary_SKBB (expr Path) = T:=identity; pickup PenC; draw Path dashed evenly scaled optical_zoom; enddef; def l_flowstone_UIS (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, .7u); if (cycle P) and (dlzka < 3.5u): % make at least 5 curls on a cyclic path mojkrok := dlzka/5; fi; pickup PenC; t1:=0; forever: t2 := arctime (cas + mojkrok) of P; thdraw (point t1 of P){dir (angle(thdir(P,t1)) + 60)} .. {dir (angle(thdir(P,t2)) - 60)}(point t2 of P); cas := cas + mojkrok; exitif cas > dlzka + (mojkrok / 3); % for rounding errors t1:=t2; endfor; enddef; def l_moonmilk_UIS (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, .3u); pickup PenC; t1:=0; forever: t2 := arctime (cas + mojkrok) of P; thdraw (point t1 of P){dir (angle(thdir(P,t1)) + 80)} .. {dir (angle(thdir(P,t2)) - 80)}(point t2 of P); cas := cas + mojkrok; exitif cas > dlzka + (mojkrok / 3); % for rounding errors t1:=t2; endfor; enddef; def l_survey_surface_SKBB (expr P) = T:=identity; thdrawoptions(dashed withdots scaled (0.2 * optical_zoom) withpen PenC); thdraw P; thdrawoptions(); enddef; def l_survey_cave_SKBB (expr P) = T:=identity; pickup PenC; if ATTR__scrap_centerline: thdraw P; else: PolygonLine:=.8u; pair zz[]; for t = 0 upto length P - 1: zz1 := point t of P; zz2 := point t+1 of P; if length (zz2-zz1) > 2*PolygonLine: thdraw zz1 -- zz1 + PolygonLine * unitvector(zz2 - zz1); thdraw zz2 -- zz2 + PolygonLine * unitvector(zz1 - zz2); else: thdraw zz1 -- zz2; fi; endfor; fi; enddef; def l_survey_cave_UIS (expr P) = T:=identity; pair zz[]; pickup PenC; for t = 0 upto length P - 1: zz1 := point t of P; zz2 := point t+1 of P; draw zz1 -- zz2; endfor; enddef; def l_waterflow_permanent_UIS (expr Path) = path ppp; T:=identity; cas := 0; dlzka := arclength Path; mojkrok:=adjust_step(dlzka, 0.5u); pickup PenD; vardef azim = 50 + 15*normaldeviate enddef; az1 := azim; sgn := 1; ppp := point 0 of Path; forever: t1 := arctime cas of Path; t2 := arctime (cas+mojkrok) of Path; if cas+1.1*mojkrok > dlzka: az2 := 0; else: az2 := azim; fi; d1 := angle(thdir(Path,t1)) + sgn * az1; d2 := angle(thdir(Path,t2)) - sgn * az2; ppp := ppp & (point t1 of Path){dir d1} .. {dir d2}(point t2 of Path); az1 := az2; sgn := -1 * sgn; cas := cas + mojkrok; exitif cas > dlzka + mojkrok/3; % for rounding errors endfor; % drawarrow ppp; thdraw ppp; thdrawoptions(); oldahlength:=ahlength; ahlength:=ahlength*optical_zoom; thdraw arrowhead ppp; thfill arrowhead ppp; ahlength:=oldahlength; enddef; def l_waterflow_intermittent_SKBB (expr Path) = thdrawoptions(dashed evenly scaled optical_zoom); l_waterflow_permanent_UIS (Path); thdrawoptions(); enddef; def l_waterflow_conjectural_SKBB (expr Path) = thdrawoptions(dashed withdots scaled (0.5 * optical_zoom) withpen PenB); l_waterflow_permanent_UIS (Path); thdrawoptions(); enddef; def l_invisible (expr P) = enddef; def l_undefined (expr P) = T:=identity; pickup PenC; thdraw P withcolor red; thwarning("undefined line symbol used"); enddef; % Q = 0 -- no arrows % 1 -- end % 2 -- begin % 3 -- both def l_arrow_SKBB (expr P, Q) = T:=identity; pickup PenC; thdraw P; p := (-.1u,-.25u)--(0,0)--(.1u,-.25u); if odd Q: draw p rotated (angle(thdir(P,0))+90) shifted (point 0 of P); fi; if Q>1: draw p rotated (angle(thdir(P,length P))-90) shifted (point infinity of P); fi; enddef; def l_mapconnection_SKBB (expr P) = thdrawoptions(dashed withdots scaled (0.5 * optical_zoom) withpen PenB); l_arrow_SKBB(P,3); thdrawoptions(); enddef; def l_section_SKBB (expr P)(text txt) = T:=identity; path Q; Q = punked P; pickup PenC; for t = 0 upto length P - 1: pair zz[]; zz1 := point t of P; zz2 := point t+1 of P; zz3 := postcontrol t of P; zz4 := precontrol t+1 of P; if (length(zz3-1/3[zz1,zz2]) > 0.1pt) or (length(zz4-2/3[zz1,zz2]) > 0.1pt): zz5 = whatever[zz1,zz2]; (zz3-zz5) = whatever * (zz1-zz2) rotated 90; draw zz1--zz5; zz6 = whatever[zz1,zz2]; (zz4-zz6) = whatever * (zz1-zz2) rotated 90; draw zz2--zz6; else: draw zz1--zz2; fi; endfor; for pnt=txt: if pnt=-1: else: T:=identity rotated angle(thdir(Q,pnt)) shifted (point pnt of Q); pickup PenC; thdraw (0,0)--(0,.8u); thdraw (-.1u,.55u)--(0,.8u)--(.1u,.55u); fi; exitif pnt=-1; endfor; enddef; let l_border_invisible = l_invisible; let l_wall_invisible = l_invisible; def l_debug (expr col, pen, P) = T:=identity; pickup if pen=0: PenD else: PenB fi; thdraw P withcolor if col=-2: (1,.85,0) elseif col=-1: black elseif col=0: red else: blue fi; enddef; def l_u (expr P) = T:=identity; pickup PenA; thdraw P withcolor red; enddef; def l_gradient_UIS (expr P) = T:=identity; pickup PenC; thdraw P; p:=(-.15u,-.4u)--(0,0)--(.15u,-.4u)--cycle; thfill (p rotated (angle(thdir(P,length P))-90) shifted (point infinity of P)); thdraw (p rotated (angle(thdir(P,length P))-90) shifted (point infinity of P)); enddef; def l_gradient_BCRA (expr P) = T:=identity; pickup PenC; for t = 0 upto length P - 1: pair zz[]; zz1 := point t of P; zz2 := point t+1 of P; zz3 := unitvector(zz2 - zz1); thfill zz1 + u/3 * zz3 + .25u * (zz3 rotated 90) -- zz2 - u/3 * zz3 -- zz1 + u/3 * zz3 + .25u * (zz3 rotated -90) -- cycle; endfor; enddef; def l_rope_SKBB (expr P,exact) = T:=identity; pickup PenC; if exact: draw P; else: d:=0.5u; for i:=0 upto (length P - 2): x1 := xpart point i of P; y1 := ypart point i of P; x2 := xpart point i+1 of P; y2 := ypart point i+1 of P; dx1:=x1; dy1:=y1; x1:=0; y1:=0; x2:=x2-dx1; y2:=y2-dy1; if y2 > y1: y3 := y1 - d; x3 := x1 + (x2-x1)*sqrt(d)/(sqrt(d)+sqrt(y2-y1+d)); else: y3 := y2 - d; x3 := x1 + (x2-x1)*sqrt(y1-y2+d)/(sqrt(d)+sqrt(y1-y2+d)); fi; numeric a,b,c; a*x1/10*x1 + b/10*x1 + c/10 = y1/10; a*x2/10*x2 + b/10*x2 + c/10 = y2/10; a*x3/10*x3 + b/10*x3 + c/10 = y3/10; draw (x1+dx1,y1+dy1) for t = x1 step (x2-x1)/20 until x2+10*epsilon: -- (t+dx1,a*t*t+b*t+c+dy1) endfor; endfor; pair x; x = point (length P)-1 of P + whatewer * down; x = point (length P) of P + whatever * right; draw point (length P)-1 of P -- x; % thdraw point length P of P withpen pencircle scaled 0.3u withcolor red; fi; for i:=0 upto length P if not exact: -1 fi: thdraw point i of P withpen pencircle scaled 0.3u; endfor; enddef; def l_border_presumed_SKBB (expr Path) = T:=identity; pickup PenC; draw Path dashed evenly scaled (0.25 * optical_zoom); enddef; def l_steps_SKBB (expr P) = if known ATTR_c: c := scantokens ATTR_c; else: c := 2; fi; if ATTR__elevation: if (c < 2): thwarning("Invalid stairs definition (c<2)"); pickup PenA; draw P withcolor red; else: path PP; if (ypart point 0 of P) < (ypart point length P of P): PP := P; else: PP := reverse P; fi; path p; for j:=0 upto ((length PP) - 1): p := (point j of PP) -- (point (j + 1) of PP); c := ceiling(abs((ypart point 0 of p) - (ypart point length p of p)) / (0.2 / Scale * 72 / 2.54)); % 20 cm height if (c < 2): c:=2 fi; pair cp; cp = point length p of p - point 0 of p; dx := (xpart cp) / c; dy := (ypart cp) / c; cp := point 0 of p; for i:= 0 upto c - 1: l_border_visible(cp -- cp + (0,dy) -- cp + (dx,dy)); cp := cp + (dx, dy); endfor; %draw P; endfor; fi; else: if known ATTR_l: l := scantokens ATTR_l; else: l := (length(P)-2)/2; fi; if ((length(P) < 4) or (c < 2)) or ((odd length P) and (not known ATTR_l)): thwarning("Invalid stairs definition" if c<2: &" (c<2)" fi); pickup PenA; draw P withcolor red; else: path p, q; p = subpath (1, 1+l) of P; q = reverse subpath (l+2, length(P)) of P; lp := arclength(p); lq := arclength(q); for i=1 upto c: l_border_visible(point(arctime ((i-1)/(c-1)*lp) of p) of p -- point(arctime ((i-1)/(c-1)*lq) of q) of q); endfor; l_border_visible(p); l_border_visible(q); drawoptions(withcolor 0.3*white); %p_label(decimal c, point 0.5 of P, 0, 6); drawoptions(); fi; fi; enddef; def l_handrail_SKBB (expr P) = if ATTR__elevation: T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, 1u); pickup PenD; pair tmppoint; tmph := 1 / Scale * 72 / 2.54; % 1 m height tmppoint:=(point 0 of P) +(0,tmph); forever: t := arctime cas of P; draw point t of P -- (point t of P)+(0,tmph) withpen PenD; if cas > 0: draw tmppoint -- (point t of P)+(0,tmph) withpen PenC; tmppoint := (point t of P)+(0,tmph); fi; cas := cas + mojkrok; exitif cas > dlzka + (mojkrok / 3); % for rounding errors endfor; else: T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, u); pickup PenD; forever: t := arctime cas of P; thdraw point t of P withpen pencircle scaled .25u; cas := cas + mojkrok; exitif cas > dlzka + (mojkrok / 3); % for rounding errors endfor; pickup PenC; thdraw P; fi; enddef; def l_fixedladder_SKBB (expr P) = pickup PenD; draw P withcolor red; enddef; def l_ropeladder_SKBB (expr P) = pickup PenD; draw P withcolor red; enddef; def l_viaferrata_SKBB (expr P) = pickup PenD; draw P withcolor red; enddef; therion/mpost/thPoint.mp0000644000076400010400000006372412054203652016425 0ustar userAdministrators%% therion source code %% %% This file defines macros for point map symbols %% %% $Date: 2003/07/01 09:06:44 $ %% $RCSfile: thPoint.mp,v $ %% $Revision: 1.8 $ %% %% Copyright (C) 2000-2004 Martin Budaj %% %% -------------------------------------------------------------------- %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 2 of the License, or %% any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; if not, write to the Free Software %% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA %% -------------------------------------------------------------------- pair U; def p_stalactite_UIS(expr pos,theta,sc,al) = U:=(.15u, .4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (0,-.4u) -- (0,.15u) -- (-.15u,.4u); thdraw (0,.15u) -- (.15u,.4u); enddef; def p_stalagmite_UIS(expr pos,theta,sc,al) = U:=(.15u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (0,.4u) -- (0,-.15u) -- (-.15u,-.4u); thdraw (0,-.15u) -- (.15u,-.4u); enddef; def p_pillar_UIS(expr pos,theta,sc,al) = U:=(.15u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (0,.15u)--(0,-.15u); thdraw (-.15u,-.4u)--(0,-.15u)--(.15u,-.4u); thdraw (-.15u,.4u)--(0,.15u)--(.15u,.4u); enddef; def p_curtain_UIS(expr pos,theta,sc,al) = U:=(.15u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.15u,.4u)--(0,.15u)--(.15u,.4u); thdraw (0,.15u)--(0,0){dir 180}..(-.12u,-.11u)..{dir 0}(0,-.22u)--(0,-.4u); enddef; def p_helictite_UIS(expr pos,theta,sc,al) = U:=(.2u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (0,.4u)--(0,-.4u); p := (-.2u,.4u)---(-.2u,.1u){down}..{dir -10}(-.1u,0.02u)---origin; thdraw p; thdraw p reflectedabout (origin,(0,u)) reflectedabout (origin,(u,0)); enddef; def p_sodastraw_UIS(expr pos,theta,sc,al) = U:=(.5u,.25u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.5u,.2u)--(.5u,.2u); pickup PenD; thdraw (-.4u,.2u)--(-.4u,0); thdraw (-.12u,.2u)--(-.12u,-.25u); thdraw (.02u,.2u)--(.02u,-.1u); thdraw (.23u,.2u)--(.23u,-.19u); thdraw (.35u,.2u)--(.35u,-.15u); enddef; def p_crystal_UIS (expr pos,theta,sc,al)= U:=(.35u,.35u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p := ((-.35*u,0)--(.35*u,0)); thdraw p; thdraw p rotated (60); thdraw p rotated (120); enddef; def p_flowstone_UIS (expr pos,theta,sc,al)= U:=(.45u,.1u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p := ((-.15*u,0)--(.15*u,0)); thdraw p shifted (.3u,-.1u); thdraw p shifted (-.3u,-.1u); thdraw p shifted (0,.1u); enddef; def p_moonmilk_UIS (expr pos,theta,sc,al)= U:=(.5u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.5u,-.2u){up}..{dir -60}(-.18u,-.105u){dir 80}.. {dir-80}(.18u,-.105u){dir 60}..{down}(.5u,-.2u); enddef; def p_wallcalcite_UIS (expr pos,theta,sc,al)= U:=(.2u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.2u,-.2u)--(0,.1u)--(.2u,-.2u); enddef; def p_popcorn_UIS (expr pos,theta,sc,al)= U:=(.5u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.5u,-.2u)--(.5u,-.2u); pickup PenD; thdraw (-.3u,-.2u)--(-.3u,.1u); thdraw (0,-.2u)--(0,.1u); thdraw (.3u,-.2u)--(.3u,.1u); thfill fullcircle scaled .2u shifted (-.3u,.1u); thfill fullcircle scaled .2u shifted (0,.1u); thfill fullcircle scaled .2u shifted (.3u,.1u); enddef; def p_disk_UIS (expr pos,theta,sc,al)= U:=(.2u,.3u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.2u,-.3u)--origin--(.2u,-.3u); p:=fullcircle scaled .3u shifted (0,.15u); thclean p; thdraw p; enddef; def p_gypsum_NSS (expr pos,theta,sc,al)= U:=(.25u,.25u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.25u,0)--(.25u,0); thdraw (0,-.25u)--(0,.25u); enddef; def p_aragonite_NSS (expr pos,theta,sc,al)= U:=(.3u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (0,-.4u)--(0,.3u); thdraw (0,-.1u){dir 40}..{dir 5}(.3u,.08u); thdraw (0,-.1u){dir 140}..{dir 175}(-.3u,.08u); thdraw (0,.2u){dir 30}..{dir 5}(.25u,.3u); thdraw (0,.2u){dir 150}..{dir 175}(-.25u,.3u); enddef; def p_cavepearl_SKBB (expr pos,theta,sc,al)= U:=(.25u,.25u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p:=fullcircle scaled .25u shifted (0,.16u); thdraw p; thdraw p rotated 120; thdraw p rotated 240; enddef; def p_gypsumflower_NSS (expr pos,theta,sc,al)= U:=(.4u,.3u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; % thdraw (.2u,0){left}..(0,.2u)..(.25u,.35u)..(.5u,0).. % (.1u,-.3u)..{dir 125}(-.5u,.2u); thdraw (.18u,0){left}..(0,.15u)..(.2u,.3u)..(.4u,0).. (.15u,-.28u)..{dir 120}(-.4u,.15u); enddef; def p_rimstonepool_ASF (expr pos,theta,sc,al)= U:=(.4u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p := (-.4u,.2u){dir -70}..{dir 70}(.4u,.2u); thfill buildcycle(p,((.5u,.1u)--(-.5u,.1u))); thdraw p; enddef; def p_rimstonedam_ASF (expr pos,theta,sc,al)= U:=(.4u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.4u,.2u){dir -70}..{dir 70}(.4u,.2u); enddef; def p_anastomosis_UIS (expr pos,theta,sc,al)= U:=(.4u,.3u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p:=(-.4u,-.2u)--(-.3u,-.3u)--(0,.3u)--(.1u,.2u); thdraw p; thdraw p shifted (.3u,0); enddef; def p_karren_UIS (expr pos,theta,sc,al)= U:=(.5u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.5u,-.3u){dir -85}..{dir 85}(-.32u,-.3u)..(-.28u,.3u){dir 85}.. {dir -85}(-.12u,.3u)..(-.08u,-.3u){dir-85}..{dir 85}(.08u,-.3u).. {dir85}(.12u,.3u)..(.28u,.3u){dir -85}..(.32u,-.3u){dir -85}.. {dir 85}(.5u,-.3u); enddef; def p_scallop_UIS (expr pos,theta,sc,al)= U:=(.2u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (0,-.4u){dir 125}..{dir 105}(-.2u,.1u){up}.. {down}(.2u,.1u){dir -105}...{dir -125}(0,-.4u); enddef; def p_flute_UIS (expr pos,theta,sc,al)= U:=(.5u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.5u,.2u)--(.5u,.2u); thdraw (-.3u,.2u){dir -70}..{dir 70}(.3u,.2u); enddef; def p_raft_NSS (expr pos,theta,sc,al)= U:=(.5u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.5u,.2u){dir -80}..(-.3u,-.2u)..origin..(.3u,.2u).. {dir -80}(.5u,-.2u); enddef; def p_raftcone_NSS (expr pos,theta,sc,al)= U:=(.3u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.3u,-.4u)--(0,.4u)--(.3u,-.4u); enddef; def p_spring_SKBB (expr pos,theta,sc,al)= U:=(.3u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.3u,.2u){down}..(0,-.2u)..{up}(.3u,.2u); enddef; def p_sink_SKBB (expr pos,theta,sc,al)= U:=(.3u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.3u,-.2u){up}..(0,.2u)..{down}(.3u,-.2u); enddef; def p_narrowend_UIS (expr pos,theta,sc,al)= U:=(.1u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.1u,-.4u)--(-.1u,.4u); thdraw (.1u,-.4u)--(.1u,.4u); enddef; def p_lowend_UIS (expr pos,theta,sc,al)= U:=(.4u,.1u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.4u,-.1u)--(.4u,-.1u); thdraw (-.4u,.1u)--(.4u,.1u); enddef; def p_lowend_NSS (expr pos,theta,sc,al)= U:=(.4u,0); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.4u,0)--(.4u,0); enddef; def p_flowstonechoke_NSS (expr pos,theta,sc,al)= U:=(.4u,.3u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p:=(-.4u,-.4u){right}..{dir120}(-.2u,-.2u){dir -20}..{up}(0,0); thdraw p; thdraw p shifted (0,.2u); thdraw p reflectedabout (origin,down); thdraw p reflectedabout (origin,down) shifted (0,.2u); enddef; def p_breakdownchoke_NSS (expr pos,theta,sc,al)= U:=(.5u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.5u,-.1u)--(-.15u,.05u)--(-.48u,.2u)--cycle; thdraw (-.2u,-.2u)--(.15u,-.18u)--(-.08u,.14u)--cycle; thdraw (.1u,0)--(.4u,-.1u)--(.5u,.2u)--(.1u,.2u)--cycle; enddef; def p_bedrock_ASF (expr pos,theta,sc,al)= U:=(.5u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.5u,0)--(.5u,0); thdraw (-.3u,0)--(-.3u,.2u); thdraw (.3u,0)--(.3u,-.2u); enddef; def p_sand_UIS (expr pos,theta,sc,al)= U:=(.2u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenB; thdraw (0,.2u); thdraw (0,.2u) rotated 120; thdraw (0,.2u) rotated 240; enddef; def p_clay_SKBB (expr pos,theta,sc,al) = U:=(.3u,.3u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.3u,0){up}..origin{down}..{up}(0.3u,0); enddef; def p_pebbles_UIS (expr pos,theta,sc,al)= U:=(.45u,.35u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p:=superellipse((.2u,0),(0,.1u),(-.2u,0),(0,.-.1u),.75); thdraw p rotated 20 shifted (0,.25u); thdraw p rotated -37 shifted (.25u,-.25u); thdraw p rotated -62 shifted (-.25u,-.25u); enddef; def p_debris_UIS (expr pos,theta,sc,al)= U:=(.4u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.3u,-.4u)--(0,-.22u)--(-.4u,-.1u)--cycle; thdraw (.2u,-.4u)--(.4u,-.1u)--(.1u,-.1u)--cycle; thdraw (-.1u,0)--(.2u,.3u)--(-.2u,.3u)--cycle; enddef; def p_blocks_UIS (expr pos,theta,sc,al)= U:=(.5u,.5u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.5u,-.5u)--(.3u,-.4u)--(-.17u,.2u)--cycle; thdraw (.25u,-.25u)--(.5u,-.15u)--(.3u,.5u)--(-.1u,.5u)--cycle; thdraw (-.27u,0)--(-.1u,.3u)--(-.5u,.35u)--cycle; pickup PenD; thdraw (-.5u,-.5u)--(-.1u,-.2u)--(-.17u,.2u); thdraw (-.1u,-.2u)--(.3u,-.4u); thdraw (.25u,-.25u)--(.3u,0)--(.2u,.2u)--(-.1u,.5u); thdraw (.3u,.5u)--(.2u,.2u); thdraw (.5u,-.15u)--(.3u,0); enddef; def p_water_UIS (expr pos,theta,sc,al)= U:=(.425u,.3u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenD; p:=fullcircle xscaled (.85u) yscaled (.6u); thfill p withpattern pattern_water_UIS; thdraw p; enddef; def p_ice_UIS (expr pos,theta,sc,al)= U:=(.4u,.35u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p := (0,.05u)--(0,.35u); thdraw p; thdraw p shifted (-.25u,-.3u); thdraw p shifted (.25u,-.3u); p := (-0.15u,.2u)--(0.15u,.2u); thdraw p; thdraw p shifted (-.25u,-.3u); thdraw p shifted (.25u,-.3u); enddef; def p_snow_SKBB (expr pos,theta,sc,al)= U:=(.35u,.35u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p := origin--(0,.25*u); q := ((0,.35u)--(0,0.25u)--(0.1u,0.25u)) rotatedaround ((0,0.25u),45); thdraw p; thdraw p rotated (60); thdraw p rotated (120); thdraw p rotated (180); thdraw p rotated (240); thdraw p rotated (300); thdraw q; thdraw q rotated (60); thdraw q rotated (120); thdraw q rotated (180); thdraw q rotated (240); thdraw q rotated (300); enddef; def p_archeomaterial_UIS (expr pos,theta,sc,al)= U:=(.4u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p := fullcircle scaled .8u; thdraw (-.5u,-.5u)--origin cutbefore p; thdraw (-.5u,.5u)--origin cutbefore p; thdraw origin--(.4u,0); thdraw p; enddef; def p_paleomaterial_UIS (expr pos,theta,sc,al)= U:=(.4u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; thfill (-.4u,-.2u)..(-.2u,-.08u)---(-.1u,.05u)---(0,.2u)..(-.03u,.4u).. (.2u,.3u)..(.35u,.25u)..(.2u,.2u)---origin---(-.1u,-.17u).. (-.08u,-.25u){dir -120}..(-.3u,-.23u) ..cycle; enddef; def p_guano_UIS (expr pos,theta,sc,al)= U:=(.4u,.35u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.4u,.2u){dir 40}..{down}(0,-.35u){up}..{dir-40}(.4u,.2u); enddef; def p_vegetabledebris_ASF (expr pos,theta,sc,al)= U:=(.38u,.3u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.3u,-.3u)--(0,.3u); thdraw (0,-.3u)--(.3u,.3u); thdraw (-.25u,.13u)--(.38u,.13u); thdraw (-.38u,-.13u)--(.25u,-.13u); enddef; def p_root_ASF (expr pos,theta,sc,al)= U:=(.1u,.5u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.1u,-.5u)--(-.1u,.5u); p:=(-.1u,-.3u)--(.1u,-.5u); thdraw p; thdraw p shifted (0,.2u); thdraw p shifted (0,.4u); enddef; def p_entrance_UIS (expr pos,theta,sc,al)= U:=(.2u,.5u); T:=identity aligned al rotated theta scaled sc shifted pos; thfill (-.2u,-.5u)--(0,.5u)--(.2u,-.5u)--cycle; enddef; def p_waterflow_paleo_UIS (expr pos,theta,sc,al)= U:=(.2u,u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (0,-u)--(0,u); thdraw halfcircle scaled .4u shifted (0,-.4u); p:=(-.15u,.6u)--(0,u)--(.15u,.6u)--cycle; thfill p; thdraw p; enddef; def p_gradient_UIS (expr pos,theta,sc,al)= U:=(.15u,u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (0,-u)--(0,u); p:=(-.15u,.6u)--(0,u)--(.15u,.6u)--cycle; thfill p; thdraw p; enddef; def p_gradient_BCRA (expr pos,theta,sc,al)= U:=(.25u,0.7u); T:=identity aligned al rotated theta scaled sc shifted pos; thfill (-.25u,-0.7u)--(0,.7u)--(.25u,-.7u)--cycle; enddef; % by Philip Schuchardt def p_gradient_NSS (expr pos,theta,sc,al) = U:=(.7u, .6u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.3u, -.5u) -- (-.7u, -.2u); thdraw (-.2u, -.4u) -- (-.4u, .3u); thdraw (0u, -.3u) -- (0u, .6u); thdraw (.3u, -.5u) -- (.7u, -.2u); thdraw (.2u, -.4u) -- (.4u, .3u); enddef; def p_waterflow_permanent_UIS (expr pos,theta,sc,al)= U:=(.15u,.5u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p:=(0,.5u){down}..(.12u,.3u)..(-.15u,.15u)..(.13u,0).. (-.08u,-.2u)..{down}(0,-.5u); p:=p rotated 180; thdraw p; thdrawoptions(); oldahlength:=ahlength; ahlength:=2.5pt*optical_zoom; thdraw arrowhead p; thfill arrowhead p; ahlength:=oldahlength; enddef; def p_waterflow_intermittent_UIS (expr pos,theta,sc,al)= thdrawoptions(dashed evenly scaled (.5 * optical_zoom)); p_waterflow_permanent_UIS (pos,theta,sc,al); thdrawoptions(); enddef; def p_airdraught_UIS (expr pos,theta,sc,al)= U:=(.2u,u); T:=identity aligned al rotated theta scaled 1 shifted pos; pickup PenC; thdraw (0,u)--(0,-0.8u); p:=(-.2u,.65u){dir 20}..{dir 90}(0,u); thdraw p; thdraw p reflectedabout (origin,(0,u)); for i:=1 upto round(3+2*mlog(sc)/mlog 2): thdraw (0,-(1-0.2i)*u)--(.2u,-(1-0.2(i-1))*u); endfor; enddef; def p_airdraught_winter_UIS (expr pos,theta,sc,al)= U:=(.2u,u); T:=identity aligned al rotated theta scaled 1 shifted pos; pickup PenC; thdraw (0,u)--(0,-0.8u); p:=(-.2u,.65u){dir 20}..{dir 90}(0,u); thdraw p; thdraw p reflectedabout (origin,(0,u)); for i:=1 upto round(3+2*mlog(sc)/mlog 2): thdraw (0,-(1-0.2i)*u)--(.2u,-(1-0.2(i-1))*u); endfor; thclean fullcircle scaled 0.6u shifted (0,0.05u); thdraw (-0.1732u,-0.05u) -- (0.1732u,0.15u); thdraw (0.1732u,-0.05u) -- (-0.1732u,0.15u); thdraw (0,-0.15u) -- (0,0.25u); enddef; def p_airdraught_summer_UIS (expr pos,theta,sc,al)= U:=(.2u,u); T:=identity aligned al rotated theta scaled 1 shifted pos; pickup PenC; thdraw (0,u)--(0,-0.8u); p:=(-.2u,.65u){dir 20}..{dir 90}(0,u); thdraw p; thdraw p reflectedabout (origin,(0,u)); for i:=1 upto round(3+2*mlog(sc)/mlog 2): thdraw (0,-(1-0.2i)*u)--(.2u,-(1-0.2(i-1))*u); endfor; thclean fullcircle scaled 0.6u shifted (0,0.05u); thdraw (-0.1732u,-0.05u) -- (0.1732u,0.15u); thdraw (0.1732u,-0.05u) -- (-0.1732u,0.15u); thdraw (0,-0.15u) -- (0,0.25u); thclean fullcircle scaled 0.3u shifted (0,0.05u); thdraw fullcircle scaled 0.2u shifted (0,0.05u); enddef; def p_station_fixed_ASF (expr pos)= T:=identity shifted pos; pickup PenD; pair z; z:=(0,.2u); thclean z -- (z rotated 120) -- (z rotated 240) -- cycle; thdraw z -- (z rotated 120) -- (z rotated 240) -- cycle; thdraw origin; enddef; def p_station_painted_SKBB (expr pos)= T:=identity shifted pos; pickup PenC; thclean fullcircle scaled 0.25u; thdraw fullcircle scaled 0.25u; enddef; def p_station_natural_ASF (expr pos)= T:=identity shifted pos; pickup PenD; thclean fullcircle scaled .3u; thdraw fullcircle scaled .3u; thdraw origin; enddef; def p_station_temporary_ASF (expr pos)= T:=identity shifted pos; pickup PenD; p:=(-.2u,0)--(.2u,0); thdraw p; thdraw p rotated 90; thclean fullcircle scaled .16u; pickup PenC; thdraw origin; enddef; let p_station_temporary_SKBB = p_station_painted_SKBB; def p_steps_SKBB (expr pos,r,s,al) = U:=(.4u, .4u); T:=identity aligned al shifted pos; thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD; pickup PenC; thdraw (-.3u,.3u)--(-.3u,.1u)--(-.1u,.1u)--(-.1u,-.1u)-- (.1u,-.1u)--(.1u,-.3u)--(.3u,-.3u); enddef; def p_fixedladder_SKBB (expr pos,r,s,al) = U:=(.4u, .4u); T:=identity aligned al shifted pos; thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD; pickup PenC; thdraw (-.15u,-.4u)--(-.15u,.4u); thdraw (.15u,-.4u)--(.15u,.4u); thdraw (-.15u,0)--(.15u,0); thdraw (-.15u,.2u)--(.15u,.2u); thdraw (-.15u,-.2u)--(.15u,-.2u); enddef; def p_ropeladder_SKBB (expr pos,r,s,al) = U:=(.4u, .4u); T:=identity aligned al shifted pos; thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD; pickup PenC; thdraw (.1u,-.4u)..(.2u,-.2u)..(.1u,.2u)..(.2u,.4u); thdraw (-.2u,-.4u)..(-.1u,-.2u)..(-.2u,.2u)..(-.1u,.4u); thdraw (-.2u,.2u)--(.1u,.2u); thdraw (-.15u,0)--(.15u,0); thdraw (-.1u,-.2u)--(.2u,-.2u); enddef; def p_bridge_SKBB (expr pos,r,s,al) = U:=(.4u, .4u); T:=identity aligned al shifted pos; thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD; pickup PenC; thdraw (-.3u,.2u)--(-.2u,.1u)--(.2u,.1u)--(.3u,.2u); thdraw (-.3u,-.2u)--(-.2u,-.1u)--(.2u,-.1u)--(.3u,-.2u); enddef; def p_noequipment_SKBB (expr pos,r,s,al) = U:=(.4u, .4u); T:=identity aligned al shifted pos; thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD; thfill (0,-.1u)--(-.05u,.3u)--(.05u,.3u)--cycle; thdraw (0,-.2u) withpen PenX; enddef; def p_anchor_SKBB (expr pos,r,s,al) = U:=(.4u, .4u); T:=identity aligned al shifted pos; thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD; thdraw fullcircle scaled .2u shifted (0.2u,0) withpen PenC; begingroup; interim linecap:=butt; thdraw (-.3u,0)--(.1u,0) withpen PenA; endgroup; thdraw (.1u,-.4u)--(.1u,.4u) withpen PenD; enddef; def p_traverse_SKBB (expr pos,r,s,al) = U:=(.4u, .4u); T:=identity aligned al shifted pos; thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD; pickup PenC; thdraw (-.25u,.05u)..(0,-.08u)..(.25u,.05u); pickup pencircle scaled .18u; thdraw (-.25u,.05u); thdraw (.25u,.05u); enddef; def p_rope_SKBB (expr pos,r,s,al) = U:=(.4u, .4u); T:=identity aligned al shifted pos; thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD; pickup PenC; thdraw (-.2u,.2u)..origin..(.1u,.1u)--(.1u,-.4u); pickup pencircle scaled .18u; thdraw (-.2u,.2u); thdraw (.1u,.1u); enddef; def p_camp_SKBB (expr pos,r,s,al) = U:=(.4u, .5u); T:=identity aligned al shifted pos; pickup PenC; thdraw (-.4u,-.4u)--(0,.5u)--(.4u,-.4u)--cycle; pickup PenD; thdraw (0,-.4u)--(0,.5u); enddef; def p_dig_UIS (expr pos,r,s,al) = U:=(.4u, .5u); T:=identity aligned al shifted pos; thfill ((-.075u,-.5u){down} .. {up}(0.075u, -.5u) -- (0.075u, .15u) -- (0.3u, 0.15u) -- (0.3u, 0.5u) -- (-.3u, .5u) -- (-.3u, .15u) -- (-.075u, .15u) -- cycle) rotated 45; enddef; def p_continuation_UIS(expr pos,theta,sc,al) = U:=(.15u,.3u); T:=identity aligned al shifted pos; pickup PenC; thdraw (-.1u,.2u){up}..{down}(.1u,.2u)..{down}(0,-.05u); pickup PenX; thdraw (0,-.2u); enddef; def p_station_SKBB(expr pos,mark,txt)(text flags) = T:=identity shifted pos; if mark=4: p_station_fixed(pos) elseif mark=3: p_station_natural(pos) elseif mark=2: p_station_painted(pos) elseif mark=1: p_station_temporary(pos) fi; path path_cave; path_cave = (-.3u,-.25u) -- (-.2u,-.25u){dir 135} .. (0, .25u) .. {dir 225}(.2u,-.25u) -- (.3u,-.25u); for i=flags: pickup PenX; if i="entrance": % thfill fullcircle scaled 1 cm withtransparentcolor tr_blue; thdraw path_cave; % p_label.urt(txt,pos+(0.4u,0),0,0); if not numeric txt: p_smartlabel(txt,pos); fi; elseif i="sink": thdraw path_cave cutbefore ((-u,0)--(u,0)) cutafter ((-u,0)--(u,0)); pickup PenA; thdraw (0,-.45u) -- (0,.05u) withcolor blue; thdraw (-.15u,-.02u) -- (0,.05u) -- (.15u,-.02u) withcolor blue; elseif i="spring": thdraw path_cave cutbefore ((-u,0)--(u,0)) cutafter ((-u,0)--(u,0)); pickup PenA; thdraw (0,-.45u) -- (0,.05u) withcolor blue; thdraw (-.15u,-.38u) -- (0,-.45u) -- (.15u,-.38u) withcolor blue; elseif i="doline": thdraw (-.5u,.05u){down}..(0,-0.6u)..{up}(.5u,.05u); elseif i="dig": thdraw (-.5u,.25u) -- (-.35u,.25u)--(-.23u,-.25u)--(.23u,-.25u)--(.35u,.25u)--(.5u,.25u); elseif substring(0,11) of i = "air-draught": pickup PenB; thdraw ((0,.11u){dir-120} ..{dir-70}(0,0) .. {dir-120}(0,-.11u)); thdraw ((0,.11u){dir-120} ..{dir-70}(0,0) .. {dir-120}(0,-.11u)) shifted (.11u,0); thdraw ((0,.11u){dir-120} ..{dir-70}(0,0) .. {dir-120}(0,-.11u)) shifted (-.11u,0); elseif i="continuation": if picture(txt): picture ATTR__text; ATTR__text := txt; fi; begingroup; save T; transform T; p_continuation(pos+(0,.25u),0,1,(0,1)); endgroup; if picture(txt): save ATTR__text; fi; elseif i="arch": thdraw (-.5u,-.25u)--(-.5u,.25u)--(.5u,.25u)--(.5u,-.25u)..(0,.2u)..cycle; thfill (-.5u,-.25u)--(-.5u,.25u)--(.5u,.25u)--(.5u,-.25u)..(0,.2u)..cycle; elseif i="overhang": thdraw (.2u,-.25u)--(-.2u,-.25u){up}..{right}(.2u,.25u); fi; endfor; % thdraw (0,0) withpen PenX withcolor red; enddef; def p_debug (expr col, pen, pos)= T:=identity shifted pos; thdraw origin withpen pencircle scaled if pen=0: 2pt else: 4pt fi withcolor if col=-2: (1,.85,0) elseif col=-1: black elseif col=0: red else: blue fi; enddef; def p_u(expr pos,theta,sc,al) = T:=identity shifted pos; thdraw origin withpen pencircle scaled 4pt withcolor red; enddef; def p_handrail_SKBB(expr pos,theta,sc,al) = tmph := 1 / Scale * 72 / 2.54; % 1 m height U:=(.1u, tmph); pickup PenC; T:=identity aligned al rotated theta scaled sc shifted pos; thdraw (0,0) -- (0,tmph); thdraw (0,tmph) withpen pencircle scaled .25u; enddef; def p_viaferrata_SKBB(expr pos,r,s,al) = U:=(.4u, .4u); T:=identity aligned al shifted pos; thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD; pickup PenC; thdraw (-.15u,.15u)--(-.15u,.1u)--(.15u,.1u)--(.15u,.15u); thdraw (-.15u,-.05u)--(-.15u,-.1u)--(.15u,-.1u)--(.15u,-.05u); enddef; def p_stalagmites_UIS(expr pos,theta,sc,al) = U:=(.3u, .2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; for i=-1 upto 1: T:=identity aligned al rotated theta scaled (sc * 0.7) shifted (pos + (i * .3u, 0)); thdraw (0,.4u) -- (0,-.15u) -- (-.15u,-.4u); thdraw (0,-.15u) -- (.15u,-.4u); endfor; enddef; def p_stalactites_UIS(expr pos,theta,sc,al) = U:=(.3u, .2u); pickup PenC; for i=-1 upto 1: T:=identity aligned al rotated theta scaled (sc * 0.7) shifted (pos + (i * .3u, 0)); thdraw (0,-.4u) -- (0,.15u) -- (-.15u,.4u); thdraw (0,.15u) -- (.15u,.4u); endfor; enddef; def p_gradient_SKBB (expr pos,theta,sc,al)= U:=(.3u,.6u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.3u,-.6u)--(-.3u,.6u); thdraw (0,-.6u)--(0,-0.2u); thdraw (.3u,-.6u)--(.3u,.6u); enddef; def p_pillars_UIS(expr pos,theta,sc,al) = U:=(.3u, .2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; for i=-1 upto 1: T:=identity aligned al rotated theta scaled (sc * 0.7) shifted (pos + (i * .3u, 0)); thdraw (0,.15u)--(0,-.15u); thdraw (-.15u,-.4u)--(0,-.15u)--(.15u,-.4u); thdraw (-.15u,.4u)--(0,.15u)--(.15u,.4u); endfor; enddef; therion/mpost/thSpecial.mp0000644000076400010400000000537710564525424016724 0ustar userAdministrators%% therion source code %% %% This file defines macros for special symbols %% %% $Date: $ %% $RCSfile: $ %% $Revision: $ %% %% Copyright (C) 2004 Martin Budaj %% %% -------------------------------------------------------------------- %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 2 of the License, or %% any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; if not, write to the Free Software %% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA %% -------------------------------------------------------------------- def s_northarrow_SKBB_old (expr rot) = T:=identity; picture tmp_pic; tmp_pic = image ( begingroup interim defaultscale:=3; label(if (lang="sk") or (lang="cz"): "S" else: "N" fi, origin); endgroup; drawarrow (0,-1cm)--(0,1cm); ); draw tmp_pic rotatedaround(origin, -rot); enddef; def s_northarrow_SKBB (expr rot) = T:=identity scaled 0.7 rotated -rot; thdraw (-.5cm,-1cm)--(0,1.5cm)--(.5cm,-1cm)--(0,-.5cm)--cycle; thfill (-.5cm,-1cm)--(0,1.5cm)--(0,-.5cm)--cycle; enddef; def s_scalebar_SKBB (expr l, units, txt) = begingroup interim warningcheck:=0; tmpl:=l / Scale * cm * units / 2; endgroup; pickup PenC; draw (-tmpl,0)--(tmpl,0); draw (-tmpl,0)--(-tmpl,2bp); draw (tmpl,0)--(tmpl,2bp); begingroup interim labeloffset:=2bp; label.top(thTEX(decimal (l) & "\thinspace" & txt),origin); endgroup enddef; def s_scalebar_SM (expr l, units, txt) = begingroup interim warningcheck:=0; tmpl:=l / Scale * cm * units / 2; endgroup; pickup PenC; draw (-tmpl,0)--(tmpl,0); draw (-tmpl,0)--(-tmpl,2bp); draw (tmpl,0)--(tmpl,2bp); draw (0,0)--(0,2bp); begingroup interim labeloffset:=3.5bp; label.top(thTEX(decimal (0)),(-tmpl,0)); label.top(thTEX(decimal (l/2)),origin); label.top(thTEX(decimal (l) & "\thinspace" & txt),(tmpl,0)); endgroup enddef; def s_hgrid_SM (expr xpos, ypos, xsize, ysize) = pickup PenD; draw ( if xpos < 0: 0 else: -5mm fi, 0 ) -- ( if xpos > 0: 0 else: 5mm fi, 0 ); draw ( 0, if ypos < 0: 0 else: -5mm fi ) -- ( 0, if ypos > 0: 0 else: 5mm fi ); enddef; def s_vgrid_SM (expr xpos, ypos, xsize, ysize) = pickup PenD; draw ( if xpos < 0: 0 else: -xsize/2 fi, 0 ) -- ( if xpos > 0: 0 else: xsize/2 fi, 0 ) dashed evenly; enddef; therion/mpost/thText.mp0000644000076400010400000001367011173157520016256 0ustar userAdministrators%% therion source code %% %% This file defines macros for labels %% %% $Date: 2003/07/01 09:06:44 $ %% $RCSfile: thText.mp,v $ %% $Revision: 1.6 $ %% %% Copyright (C) 2000-2004 Martin Budaj %% %% -------------------------------------------------------------------- %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 2 of the License, or %% any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; if not, write to the Free Software %% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA %% -------------------------------------------------------------------- labeloffset:=0bp; def l_label(expr txt,path) = picture pict,pic; pair pos; numeric dx[],dy[],ptime; string ss,ch; pic := thelabel(txt,(0,0)); strl := xpart(lrcorner pic - llcorner pic); pathl := arclength (path); dx0 := xpart(llcorner pic); % dy0 := ypart(llcorner pic); if strl>pathl: txtzoom := pathl / strl; thwarning("text scaled down to fit the path"); else: txtzoom := 1; fi; zoom := pathl / strl; for p within pic: if textual p: ss := textpart p; dx1 := xpart p; dy1 := ypart p; dx2 := dx1; if xxpart p / yypart p <> 1: message("Error: distorted text!") fi; txtscale := txtzoom * xxpart p; l := length(ss); ptime := 0; for i=0 upto (l - 1): ch := substring(i,i+1) of ss; pict := ch infont fontpart p scaled txtscale; charwidth := xpart (lrcorner pict - llcorner pict) / txtzoom; dy2 := ypart lrcorner pict / txtzoom; ptime := (dx2 - dx0 + 0.5*charwidth) * zoom; t := arctime ptime of (path); pos := point t of path + (dy1+dy2)*txtzoom*unitvector((direction t of path) rotated 90); begingroup % interim labeloffset:=0bp; lab:=thelabel.top(pict,pos); process_label(pos,angle direction t of path); endgroup; dx2 := dx2 + charwidth; endfor; else: message("Strange component of line label!"); fi; endfor; % draw path; enddef; vardef p_label@#(expr txt,pos,rot,mode) = if (mode=1) or (mode=7): interim labeloffset:=(u/8) fi; lab:=thelabel@#(txt, pos); if mode>1: pickup PenD fi; if mode=1: pickup pencircle scaled (u/6); drawdot(pos); process_label(pos,0); elseif mode=2: process_uplabel; elseif mode=3: process_downlabel; elseif mode=4: process_updownlabel; elseif mode=5: process_circledlabel; elseif mode=6: process_boxedlabel; elseif mode=7: process_label(pos,rot); % station name elseif mode=8: process_filledlabel(pos, rot); else: process_label(pos,rot); fi; enddef; % at beginfig: save smartll[], smartur[]; pair smartll[], smartur[]; smart_count=0; numeric smart_count, smart_D; boolean smart_quit, smart_inner_quit; def p_smartlabel (expr txt, pos) = begingroup; interim bboxmargin:=0.2pt; lab:=thelabel.rt(txt,pos+(0.4u,0)); q:=bbox lab; smart_D := 0; forever: smart_quit := true; smart_inner_quit := false; for i=1 upto smart_count: if smart_overlap(((point 0 of q) shifted (0,smart_D)), ((point 2 of q) shifted (0,smart_D)), smartll[i], smartur[i]) = 1: smart_quit := false; smart_D := smart_D - 3pt; smart_inner_quit := true; fi; exitif smart_inner_quit; endfor; exitif smart_quit; endfor; smart_U := 0; forever: smart_quit := true; smart_inner_quit := false; for i=1 upto smart_count: if smart_overlap(((point 0 of q) shifted (0,smart_U)), ((point 2 of q) shifted (0,smart_U)), smartll[i], smartur[i]) = 1: smart_quit := false; smart_U := smart_U + 3pt; smart_inner_quit := true; fi; exitif smart_inner_quit; endfor; exitif smart_quit; endfor; if (smart_U < -smart_D): smart_D := smart_U; fi; draw lab shifted (0,smart_D); if (abs(smart_D)>3pt): pickup PenB; draw pos{left}..{right}(pos shifted (.4u, smart_D)) dashed withdots scaled 0.2; pickup PenA; drawdot pos; fi; smart_count := smart_count + 1; smartll[smart_count] := point 0 of (q shifted (0,smart_D)); smartur[smart_count] := point 2 of (q shifted (0,smart_D)); endgroup; enddef; def smart_overlap (expr llA, urA, llB, urB) = if ((xpart llA < xpart urB) and (xpart urA > xpart llB)) and ((ypart llA < ypart urB) and (ypart urA > ypart llB)): 1 else: 0 fi enddef; def p_wallaltitude (expr pprev,pos,pnext,txt) = rot:=angle(unitvector(pnext-pos)+unitvector(pos-pprev)) - 90; pickup PenD; pair zz; % zz:=(pos + 3*unitvector(dir rot)); zz:=(pos + (u/4)*unitvector(dir rot)); draw (pos)--zz; begingroup % interim labeloffset:=2pt; interim labeloffset:=(u/12); if horiz_labels: rot:=rot mod 360; if rot<=22.5: lab:=thelabel.rt(txt, zz); elseif rot<=67.5: lab:=thelabel.urt(txt, zz); elseif rot<=112.5: lab:=thelabel.top(txt, zz); elseif rot<=157.5: lab:=thelabel.ulft(txt, zz); elseif rot<=202.5: lab:=thelabel.lft(txt, zz); elseif rot<=247.5: lab:=thelabel.llft(txt, zz); elseif rot<=292.5: lab:=thelabel.bot(txt, zz); elseif rot<=337.5: lab:=thelabel.lrt(txt, zz); else: lab:=thelabel.rt(txt, zz); fi; else: if (abs rot>90) and (abs rot <=270): rot:=rot-180; lab:=thelabel.lft(txt, pos); else: lab:=thelabel.rt(txt, pos); fi; fi; process_label(pos, if horiz_labels: 0 else: rot fi); endgroup; enddef; therion/mpost/thTrans.mp0000644000076400010400000001223212047251644016415 0ustar userAdministrators% default translations let p_station_fixed = p_station_fixed_ASF; let p_station_painted = p_station_painted_SKBB; let p_station_natural = p_station_natural_ASF; let p_station_temporary = p_station_temporary_ASF; let p_waterflow_paleo = p_waterflow_paleo_UIS; let p_waterflow_permanent = p_waterflow_permanent_UIS; let p_waterflow_intermittent = p_waterflow_intermittent_UIS; let p_stalactite = p_stalactite_UIS; let p_stalagmite = p_stalagmite_UIS; let p_pillar = p_pillar_UIS; let p_icestalactite = p_icestalactite_AUT; let p_icestalagmite = p_icestalagmite_AUT; let p_icepillar = p_icepillar_AUT; let p_curtain = p_curtain_UIS; let p_helictite = p_helictite_UIS; let p_sodastraw = p_sodastraw_UIS; let p_crystal = p_crystal_UIS; let p_flowstone = p_flowstone_UIS; let p_moonmilk = p_moonmilk_UIS; let p_wallcalcite = p_wallcalcite_UIS; let p_popcorn = p_popcorn_UIS; let p_disk = p_disk_UIS; let p_gypsum = p_gypsum_NSS; let p_aragonite = p_aragonite_NSS; let p_cavepearl = p_cavepearl_SKBB; let p_gypsumflower = p_gypsumflower_NSS; let p_rimstonepool = p_rimstonepool_ASF; let p_rimstonedam = p_rimstonedam_ASF; let p_anastomosis = p_anastomosis_UIS; let p_karren = p_karren_UIS; let p_scallop = p_scallop_UIS; let p_flute = p_flute_UIS; let p_raft = p_raft_NSS; let p_raftcone = p_raftcone_NSS; let p_spring = p_spring_SKBB; let p_sink = p_sink_SKBB; let p_narrowend = p_narrowend_UIS; let p_lowend = p_lowend_UIS; let p_flowstonechoke = p_flowstonechoke_NSS; let p_breakdownchoke = p_breakdownchoke_NSS; let p_claychoke = p_claychoke_AUT; let p_claytree = p_claytree_AUT; let p_bedrock = p_bedrock_ASF; let p_clay = p_clay_SKBB; let p_sand = p_sand_UIS; let p_pebbles = p_pebbles_UIS; let p_debris = p_debris_UIS; let p_blocks = p_blocks_UIS; let p_water = p_water_UIS; let p_ice = p_ice_UIS; let p_snow = p_snow_SKBB; let p_archeomaterial = p_archeomaterial_UIS; let p_paleomaterial = p_paleomaterial_UIS; let p_guano = p_guano_UIS; let p_vegetabledebris = p_vegetabledebris_ASF; let p_root = p_root_ASF; let p_entrance = p_entrance_UIS; let p_gradient = p_gradient_UIS; let p_rope = p_rope_SKBB; let p_fixedladder = p_fixedladder_SKBB; let p_ropeladder = p_ropeladder_SKBB; let p_steps = p_steps_SKBB; let p_bridge = p_bridge_SKBB; let p_traverse = p_traverse_SKBB; let p_anchor = p_anchor_SKBB; let p_camp = p_camp_SKBB; let p_dig = p_dig_UIS; let p_noequipment = p_noequipment_SKBB; let p_sectionarrow = p_sectionarrow_SKBB; let p_continuation = p_continuation_UIS; let p_airdraught = p_airdraught_UIS; let p_airdraught_winter = p_airdraught_winter_UIS; let p_airdraught_summer = p_airdraught_summer_UIS; let p_station = p_station_SKBB; let p_handrail = p_handrail_SKBB; let p_viaferrata = p_viaferrata_SKBB; let p_stalactites = p_stalactites_UIS; let p_stalagmites = p_stalagmites_UIS; let p_pillars = p_pillars_UIS; let l_wall_bedrock = l_wall_bedrock_UIS; let l_wall_sand = l_wall_sand_SKBB; let l_wall_clay = l_wall_clay_SKBB; let l_wall_pebbles = l_wall_pebbles_SKBB; let l_wall_debris = l_wall_debris_SKBB; let l_wall_blocks = l_wall_blocks_SKBB; let l_wall_ice = l_wall_ice_SKBB; let l_wall_underlying = l_wall_underlying_UIS; let l_wall_unsurveyed = l_wall_unsurveyed_SKBB; let l_wall_presumed = l_wall_presumed_UIS; %let l_wall_invisible = l_wall_invisible; let l_wall_pit = l_wall_pit_AUT; let l_wall_overlying = l_wall_overlying_AUT; let l_wall_flowstone = l_wall_flowstone_AUT; let l_wall_moonmilk = l_wall_moonmilk_AUT; let l_waterflow_permanent = l_waterflow_permanent_UIS; let l_waterflow_intermittent = l_waterflow_intermittent_SKBB; let l_waterflow_conjectural = l_waterflow_conjectural_SKBB; let l_border_visible = l_border_visible_SKBB; let l_border_temporary = l_border_temporary_SKBB; let l_border_presumed = l_border_presumed_SKBB; %let l_border_invisible = l_border_invisible; let l_floorstep = l_floorstep_UIS; let l_pit = l_pit_UIS; let l_ceilingstep = l_ceilingstep_SKBB; let l_chimney = l_chimney_UIS; let l_overhang = l_overhang_SKBB; let l_slope = l_slope_SKBB; let l_ceilingmeander = l_ceilingmeander_SKBB; let l_floormeander = l_floormeander_SKBB; let l_contour = l_contour_SKBB; let l_rockborder = l_rockborder_UIS; let l_rockedge = l_rockedge_UIS; let l_flowstone = l_flowstone_UIS; let l_moonmilk = l_moonmilk_UIS; let l_section = l_section_SKBB; let l_survey_cave = l_survey_cave_SKBB; let l_survey_surface = l_survey_surface_SKBB; let l_arrow = l_arrow_SKBB; let l_gradient = l_gradient_UIS; let l_mapconnection = l_mapconnection_SKBB; let l_handrail = l_handrail_SKBB; let l_steps = l_steps_SKBB; let l_fixedladder = l_fixedladder_SKBB; let l_ropeladder = l_ropeladder_SKBB; let l_rope = l_rope_SKBB; let l_viaferrata = l_viaferrata_SKBB; let a_water = a_water_UIS; let a_sump = a_sump_UIS; let a_sand = a_sand_UIS; let a_debris = a_debris_SKBB; let a_blocks = a_blocks_SKBB; let a_snow = a_snow_SKBB; let a_ice = a_ice_SKBB; let a_pebbles = a_pebbles_SKBB; let a_clay = a_clay_SKBB; let a_bedrock = a_bedrock_SKBB; let a_flowstone = a_flowstone_ASF; let a_moonmilk = a_moonmilk_SKBB; let a_dimensions = a_dimensions_SKBB; let s_northarrow = s_northarrow_SKBB; let s_scalebar = s_scalebar_SKBB; let s_hgrid = s_hgrid_SM; let s_vgrid = s_vgrid_SM; therion/mpost/uAUT.mp0000644000076400010400000007015412064677632015627 0ustar userAdministrators% Austrian Symbol Set, author Georg Pacher % color (for Austrian symbol-set) color col_water_bg; col_water_bg :=(226/255,244/255,253/255); %%%%%%%%%%%%%%%%%%%%%%% %% areas % returns true if pair point lies within path q. % outside_point is any pair outside of path q (needed for reference). vardef pointinside(expr pt,q,outside_point)= T:=identity; path test; test:= outside_point--pt; %thdraw test; boolean isinside; isinside:=false; numintersections:=recgetnumintersections(test,q,0); if (numintersections <0): isinside:=true; elseif odd(numintersections): isinside:=true; else: isinside:=false; fi; isinside enddef; % get number of intersection between paths p (length 1!) and q % recnum is needed for limitation of recursions. % If the number of allowed recursions is reached, a negativ number of intersections is returned vardef recgetnumintersections(expr p,q,recnum)= pair inter; save preinter; save postinter; save numintersections; path preinter, postinter; inter:=p intersectiontimes q; %show recnum; if recnum >25: numintersections:=-100; else: if xpart(inter)>0 : %show (xpart inter); % split p into two paths and call yourself again preinter:=subpath (0,xpart(inter)-2eps) of p; postinter:=subpath (xpart(inter)+2eps,1) of p; numintersections:= recgetnumintersections(preinter,q,recnum+1) + recgetnumintersections(postinter,q,recnum+1) + 1; else: numintersections:=0; fi; fi; numintersections enddef; beginpattern(pattern_water_AUT); draw origin--10up withpen pensquare scaled (0.02u); patternxstep(.18u); patterntransform(identity rotated 90); endpattern; beginpattern(pattern_sump_AUT); draw origin--(0,.25u) withpen pensquare scaled (0.02u); draw origin--(.25u,0) withpen pensquare scaled (0.02u); endpattern; beginpattern(pattern_sand_AUT); pickup PenC; p:= origin -- (0.01u,0.01u); for i=0.0u step 0.2u until 2.4u: for j=0.0u step 0.2u until 2.4u: draw p rotated uniformdeviate(360) shifted ((i,j) randomized 0.09u); endfor; endfor; if BaseScale<=2.5: my_step:=2.4u; else: my_step:=2.6u; fi; patternstep(my_step,my_step); endpattern; beginpattern(pattern_pebbles_AUT); pickup PenC; path qq; for i=0.0u step 0.3u until 5.1u: for j=0.0u step 0.3u until 5.1u: qq := (superellipse((.1u,0),(0,.05u),(-.1u,0),(0,.-.05u),.75)) randomized (u/45) scaled (uniformdeviate(0.4)+.55) rotated uniformdeviate(360) shifted ((i,j) randomized 0.15u); draw qq; endfor; endfor; patternstep(5.1u,5.1u); endpattern; beginpattern(pattern_ice_AUT); pickup PenC; p:=(-.15u,.0u) -- (0.15u,.0u); draw p; draw p shifted (0.25u,.0u) rotated (90); draw p shifted (0.45u,0.25u); draw p shifted (0.0u,0.45u) rotated (90); patternxstep(.9u); patternystep(0.5u); endpattern; def a_water_AUT (expr Path) = T:=identity; thclean Path; pickup PenC; thfill Path withcolor col_water_bg; thfill Path withpattern pattern_water_AUT; thdraw Path; enddef; def a_sump_AUT (expr Path) = T:=identity; thclean Path; pickup PenC; thfill Path withcolor col_water_bg; thfill Path withpattern pattern_sump_AUT; thdraw Path; enddef; def a_sand_AUT (expr Path) = T:=identity; % thclean Path; thfill Path withpattern pattern_sand_AUT ; enddef; let a_clay_AUT = a_sand_AUT; def a_pebbles_AUT (expr p) = T:=identity; thfill p withpattern pattern_pebbles_AUT; enddef; def a_debris_AUT (expr p) = T:=identity; symbol_distance:=1.0; scale_factor:= 0.3; pickup PenC; path q, qq; q = bbox p; pair outside; outside:= ulcorner q + up; picture tmp_pic; uu := max(u, (xpart urcorner q - xpart llcorner q)/100, (ypart urcorner q - ypart llcorner q)/100); tmp_pic := image( for i = xpart llcorner q step symbol_distance*uu until xpart urcorner q: for j = ypart llcorner q step symbol_distance*uu until ypart urcorner q: qq := punked (((-.5uu,-.5uu)--(.5uu,-.5uu)--(1.05uu,0.01uu)--(.5uu,.5uu)--(-.5uu,.5uu)--cycle) randomized (uu/2)) scaled (uniformdeviate(0.4)+scale_factor ) rotated uniformdeviate(360) shifted ((i,j) randomized 0.5uu); if xpart (p intersectiontimes qq) < 0: if pointinside((i,j),p,outside): thclean qq; thdraw qq; fi; else: qq:= qq scaled (uniformdeviate(.2)+.5 ) if xpart (p intersectiontimes qq) < 0: if pointinside((i,j),p,outside): thclean qq; thdraw qq; fi; fi; fi; endfor; endfor; ); clip tmp_pic to p; drawoptions(); draw tmp_pic; enddef; def a_ice_AUT (expr p) = T:=identity; thclean p; thfill p withpattern pattern_ice_AUT; pickup PenC; thdraw p; enddef; def a_snow_AUT (expr P) = T:=identity; pickup PenC; path q; q = bbox P; picture tmp_pic, tmp_sn; pair z; tmp_sn := image( pickup PenC; p := origin--(0,.2*u); draw p; draw p rotated (60); draw p rotated (120); draw p rotated (180); draw p rotated (240); draw p rotated (300); p := ((0,.3u)--(0,0.2u)--(0.1u,0.2u)) rotatedaround ((0,0.2u),45); draw p; draw p rotated (60); draw p rotated (120); draw p rotated (180); draw p rotated (240); draw p rotated (300); ); tmp_pic := image( for i = xpart llcorner q step 1.0u until xpart urcorner q: for j = ypart llcorner q step 1.0u until ypart urcorner q: z:=((i,j) randomized 0.5u); if xpart (P intersectiontimes ((bbox tmp_sn) shifted z)) < 0: draw tmp_sn shifted z; fi; endfor; endfor; ); clip tmp_pic to P; draw tmp_pic; thdraw P; enddef; def a_blocks_AUT (expr p) = T:=identity; symbol_distance:=1.6; scale_factor:= 0.8; pickup PenC; path q, qq; q = bbox p; pair outside; outside:= ulcorner q + up; picture tmp_pic; uu := max(u, (xpart urcorner q - xpart llcorner q)/100, (ypart urcorner q - ypart llcorner q)/100); tmp_pic := image( for i = xpart llcorner q step symbol_distance*uu until xpart urcorner q: for j = ypart llcorner q step symbol_distance*uu until ypart urcorner q: qq := punked (((-.5uu,-.5uu)--(.5uu,-.5uu)--(1.05uu,0.01uu)--(.5uu,.5uu)--(-.5uu,.5uu)--cycle) randomized (uu/2)) scaled (uniformdeviate(0.7)+scale_factor ) rotated uniformdeviate(360) shifted ((i,j) randomized 0.75uu); if xpart (p intersectiontimes qq) < 0: if pointinside((i,j),p,outside): thclean qq; thdraw qq; fi; else: qq:= qq scaled (uniformdeviate(.2)+.5 ) if xpart (p intersectiontimes qq) < 0: if pointinside((i,j),p,outside): thclean qq; thdraw qq; fi; fi; fi; endfor; endfor; ); clip tmp_pic to p; drawoptions(); draw tmp_pic; enddef; %% lines def l_wall_pit_AUT (expr P) = T:=identity; % draw outer path pickup PenA; thdraw P; laenge:= arclength P; pair inner[],innerdir[], inter; pair test; samplingdistance:=max(0.15u,laenge/1500); path testcircle; % testcircle, used to test, whether the path makes a 'v'-like bend, % where normal sampling and offsetting gives poor results for the parallel line % size of testcircle= size PenA/2 + 2* (distance between outer and inner line) % + PenC (inner line) testcircle := halfcircle scaled (.5*u/10+2*.125u+.5*u/10) shifted (0,.5*u/10); cur:=samplingdistance/2; count:=0; forever: t:= arctime cur of P; inter:=P intersectiontimes (testcircle rotated (angle thdir(P,t)) shifted (point t of P)); %thdraw testcircle rotated (angle thdir(P,t)) shifted (point t of P) withpen (pencircle scaled 0.01u) ; if (xpart inter) >=0: % we are at a 'sharp bend', so set next point to intersectionpoint cur:=cur+samplingdistance; t := max( xpart inter, arctime cur of P); %thdraw point t of P withcolor 0.7*green; forever: t:= arctime cur of P; inter:=P intersectiontimes (testcircle rotated (angle thdir(P,t)) shifted (point t of P)); exitif (xpart inter <0); cur := cur + samplingdistance; exitif (cur >=laenge); endfor; if (cur =laenge); endfor; if count>2: % draw inner path pickup PenC; path innerpath; innerpath = for i=0 upto count-2: inner[i]{(innerdir[i])} .. endfor if cycle P: cycle; else: inner[count-1]; fi; thdraw innerpath; % draw the triangles path draw_triangle; pair l_triangle; laenge:= arclength innerpath; symsize:= adjust_step(laenge,0.5u); triangle_width:=symsize/2; cur:=(symsize/2); t := arctime (cur) of innerpath; t1:= arctime (cur-triangle_width/2) of innerpath; t2:= arctime (cur+triangle_width/2) of innerpath; l_triangle := (point t of innerpath); if ATTR__height >= 10: thfill else: thdraw fi (subpath (t1,t2) of innerpath) -- ((point t of innerpath) + symsize/2 * unitvector(thdir(innerpath,t) rotated 90)) -- cycle; for cur=(symsize/2) step symsize until laenge: t := arctime (cur) of innerpath; test := (point t of innerpath); my_dist := length(test-l_triangle); if (abs(my_dist-symsize) < 0.05u) or (my_dist>symsize): t1:= arctime (cur-triangle_width/2) of innerpath; t2:= arctime (cur+triangle_width/2) of innerpath; draw_triangle:=(subpath (t1,t2) of innerpath) -- ((point t of innerpath) + symsize/2 * unitvector(thdir(innerpath,t) rotated 90)) -- cycle; if xpart (draw_triangle intersectiontimes P) < 0: if ATTR__height >= 10: thfill draw_triangle; else: thclean draw_triangle; thdraw draw_triangle; fi; l_triangle:= test; fi; fi; endfor; fi; enddef; def l_wall_sand_AUT (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, 0.1u); pickup PenC; forever: t := arctime cas of P; thdraw (((0.01u,0.01u)--origin) rotated uniformdeviate(360) shifted ((point t of P) + (uniformdeviate 1) * .4u * unitvector(thdir(P,t) rotated -90))); cas := cas + mojkrok; exitif cas > dlzka + (mojkrok / 3); % for rounding errors endfor; pickup PenC; thdraw P; enddef; def l_wall_pebbles_AUT (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, .18u); pickup PenC; q:=superellipse((.1u,0),(0,.05u),(-.1u,0),(0,.-.05u),.75); forever: t := arctime (cas + mojkrok/2) of P; thdraw q randomized (u/45) rotated (angle(thdir(P,t)) + (normaldeviate*40)) shifted point t of P; cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; enddef; let l_wall_clay_AUT = l_wall_sand_AUT; def l_wall_debris_AUT (expr P) = T:=identity; pickup PenC; laenge := arclength P; path block; path old_block; cur := 0; t:= arctime cur of P; % draw first block old_block := (((-.0u,-.0u)--(.25u,-.15u)--(.45u,0.01u)--(.2u,.25u)--(.05u,.15u)--cycle)); block_width := (xpart urcorner old_block - xpart ulcorner old_block); old_block:=old_block rotated angle(thdir(P,0)) shifted point t of P; thclean old_block; thdraw old_block; cur := cur + 0.9*block_width; t:= arctime cur of P; % proceed with path forever: % generate random block block := punked (((-.25u,-.25u)--(0.25.u,-.25u)--(0.50u,0.01u)--(0.25u,.25u)--(-.25u,.25u)--cycle) randomized (u/4)) scaled (uniformdeviate(0.3)+.4) rotated uniformdeviate(360); % check width of block block_width := (xpart urcorner block - xpart ulcorner block); exitif cur > (laenge- 2.5*block_width/2); % find next position where the block fits in without intersecting the previous one forever: exitif xpart ( (block rotated angle(-direction t of P) shifted point t of P) intersectiontimes old_block) < 0; cur:=cur+0.01u; t:= arctime cur of P; exitif cur > (laenge- 2.5*block_width/2); endfor; exitif cur > (laenge- 2.5*block_width/2); old_block:= block rotated angle(-direction t of P) shifted point t of P; thclean old_block; thdraw old_block; cur := cur + block_width/2; t:= arctime cur of P; endfor; t:= arctime laenge-eps of P; % generate last block block := (((-.0u,-.0u)--(.25u,-.15u)--(.45u,0.01u)--(.2u,.25u)--(.1u,.15u)--cycle)); block_width := (xpart urcorner block - xpart ulcorner block); % scale last block to fit in the remaining gap scale_factor:=1.5*(laenge-cur)/block_width; forever: exitif scale_factor < 0; % bruces stab at preventing endless loop at large scales exitif xpart ( (block rotated angle(-direction t of P) scaled scale_factor shifted (point t of P)) intersectiontimes old_block) < 0; scale_factor:=scale_factor-0.01; endfor; if scale_factor > 0: thclean block rotated angle(-direction t of P) scaled scale_factor shifted (point t of P); thdraw block rotated angle(-direction t of P) scaled scale_factor shifted (point t of P); fi; enddef; def l_wall_blocks_AUT (expr P) = T:=identity; pickup PenC; laenge := arclength P; path block; path old_block; cur := 0; t:= arctime cur of P; % draw first block old_block := ( (.7u,-.35u)--(.85u,0.01u)--(.4u,.5u)--(.1u,.3u)--(-.0u,-.0u) ); block_width := (xpart urcorner old_block - xpart ulcorner old_block); old_block:=old_block rotated angle( thdir(P,0) ) shifted point t of P; thclean (old_block--cycle); thdraw old_block; cur := cur + block_width/2; t:= arctime cur of P; forever: % generate random block block := punked ( ( (.8u,-.35u)--(.85u,0.01u)--(.6u,.4u)--(.1u,.1u)--(-.0u,-.3u) ) randomized (0.3u) ) scaled (uniformdeviate(0.3)+.65) rotated (uniformdeviate(45)-15); % check width of block block_width := (xpart urcorner block - xpart ulcorner block); exitif cur > (laenge- 3.5*block_width/2); % find next position where the block fits in without intersecting the previous one forever: exitif xpart ( ((block--cycle) rotated angle(direction t of P) shifted point t of P) intersectiontimes old_block) < 0; cur:=cur+0.01u; t:= arctime cur of P; exitif cur > (laenge- 3.5*block_width/2); endfor; exitif cur > (laenge- 3.5*block_width/2); old_block:= block rotated angle(direction t of P) shifted point t of P; thclean (old_block--cycle); thdraw old_block; cur := cur + block_width/2; t:= arctime cur of P; endfor; % generate last block t:= arctime laenge-eps of P; block := (( (-.15u,-.35u)--(.0u,.0u)--(-.45u,.5u)--(-.75u,.3u)--(-.85u,-.0u)) ); block_width := (xpart urcorner block - xpart ulcorner block); % scale last block to fit in the remaining gap scale_factor:=(laenge-cur)/block_width; forever: exitif scale_factor < 0; exitif xpart ( ( (block) rotated angle (direction t of P) scaled scale_factor shifted (point t of P) ) intersectiontimes old_block) < 0; scale_factor:=scale_factor-0.001; endfor; if scale_factor > 0: thclean (block--cycle) rotated angle (direction t of P) scaled scale_factor shifted (point t of P); thdraw (block) rotated angle (direction t of P) scaled scale_factor shifted (point t of P); fi; enddef; def l_wall_ice_AUT (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, .6u); pickup PenC; p := (-.15u,0)--(.15u,0); q := p rotated 90 shifted (.25u,.0u); picture symbol,test_symbol; symbol:= image ( thdraw p; thdraw q; ); path bound,old_bound,test_bound; begingroup; interim bboxmargin:=0; bound := bbox (symbol); endgroup; t := arctime (cas + mojkrok/2) of P; thdraw symbol rotated angle(thdir(P,t)) shifted (point t of P + .25u * unitvector(thdir(P,t) rotated -90)); old_bound:=bound rotated angle(thdir(P,t)) shifted (point t of P + .25u * unitvector(thdir(P,t) rotated -90)); forever: t := arctime (cas + mojkrok/2) of P; test_bound:= bound rotated angle(thdir(P,t)) shifted (point t of P + .25u * unitvector(thdir(P,t) rotated -90)); if xpart ((old_bound) intersectiontimes (test_bound))<0: if xpart (P intersectiontimes (test_bound))<0: thdraw symbol rotated angle(thdir(P,t)) shifted (point t of P + .25u * unitvector(thdir(P,t) rotated -90)); old_bound:=bound rotated angle(thdir(P,t)) shifted (point t of P + .25u * unitvector(thdir(P,t) rotated -90)); fi; fi; cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; thdraw P; enddef; def l_wall_underlying_AUT (expr P) = T:=identity; pickup PenA; laenge:= arclength P; t1 := arctime (0.5u) of P; t2 := arctime (laenge-.5u) of P; thdraw (subpath (t1,t2) of P) dashed evenly scaled optical_zoom; enddef; def l_wall_overlying_AUT (expr P) = T:=identity; laenge:= arclength P; t1 := arctime (0.25u) of P; t2 := arctime (laenge-.25u) of P; t3 :=arctime (laenge) of P; pickup pensquare scaled (3.5*u/10); thdraw (subpath (t1,t2) of P) withcolor background; pickup PenA; thdraw subpath(0,t1) of P; thdraw subpath(t2,t3) of P; thdraw (subpath (t1,t2) of P) dashed dashpattern(on 2bp off 2bp on .5bp off 2bp on 2bp) scaled optical_zoom; enddef; def l_wall_moonmilk_AUT (expr P) = T:=identity; laenge:= arclength P; symsize:=adjust_step(laenge,0.8u); circle_width:=symsize/2; cur:=(symsize-circle_width)/2; pickup PenC; forever: t1 := arctime (cur) of P; t2 := arctime (cur + circle_width) of P; thdraw (point t1 of P){dir (angle(thdir(P,t1)) + 90)} .. {dir (angle(thdir(P,t2)) - 90)}(point t2 of P); cur := cur + symsize; exitif cur > laenge + (symsize / 3); % for rounding errors endfor; pickup PenA; thdraw P; enddef; def l_wall_flowstone_AUT (expr P) = T:=identity; laenge:= arclength P; symsize:=adjust_step(laenge,0.8u); circle_width:=symsize/2; cur:=(symsize-circle_width)/2; pickup PenC; forever: t1 := arctime (cur) of P; t2 := arctime (cur + circle_width) of P; thdraw (point t1 of P){dir (angle(thdir(P,t1)) + 90)} .. {dir (angle(thdir(P,t2)) - 90)}(point t2 of P); thfill (point t1 of P){dir (angle(thdir(P,t1)) + 90)} .. {dir (angle(thdir(P,t2)) - 90)}(point t2 of P) -- (point t1 of P)--cycle; cur := cur + symsize; exitif cur > laenge + (symsize / 3); % for rounding errors endfor; pickup PenA; thdraw P; enddef; def l_pit_AUT (expr P) = T:=identity; laenge:= arclength P; symsize:=adjust_step(laenge,0.5u); triangle_width:=symsize/2; cur:=(symsize-triangle_width)/2; pickup PenC; forever: t1 := arctime (cur) of P; t := arctime (cur + triangle_width/2) of P; t2 := arctime (cur + triangle_width) of P; if ATTR__height >= 10: thfill (subpath (t1,t2) of P) -- ((point t of P) + symsize/2 * unitvector(thdir(P,t) rotated 90)) -- cycle; else: thclean (subpath (t1,t2) of P) -- ((point t of P) + symsize/2 * unitvector(thdir(P,t) rotated 90)) -- cycle; thdraw (point t2 of P) --((point t of P) + symsize/2 * unitvector(thdir(P,t) rotated 90)) -- (point t1 of P); fi; cur := cur + symsize; exitif cur > laenge - (1*symsize/3); % for rounding errors t1:=arctime (cur) of P; endfor; thdraw P; enddef; let l_overhang_AUT = l_pit_AUT; let l_floorstep_AUT = l_floorstep_UIS; let l_contour_AUT =l_contour_SKBB; def l_flowstone_AUT (expr P) = T:=identity; pickup PenC; thdraw P dashed evenly scaled optical_zoom; enddef; def l_survey_cave_AUT (expr P) = T:=identity; pair zz[]; pickup PenD; thdraw P; enddef; %% points def p_stalactite_AUT(expr pos,theta,sc,al) = pickup PenC; if ATTR__elevation: U:=(.15u, .4u); T:=identity aligned al rotated theta scaled sc shifted pos; thdraw (0,-.4u) -- (0,.15u) -- (-.15u,.4u); thdraw (0,.15u) -- (.15u,.4u); else: U:=(.175u, .175u); T:=identity aligned al rotated theta scaled sc shifted pos; thclean fullcircle scaled 0.35u; thdraw fullcircle scaled 0.35u; fi; enddef; let p_icestalactite_AUT = p_stalactite_AUT; def p_stalagmite_AUT(expr pos,theta,sc,al) = pickup PenC; if ATTR__elevation: U:=(.15u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; thdraw (0,.4u) -- (0,-.15u) -- (-.15u,-.4u); thdraw (0,-.15u) -- (.15u,-.4u); else: U:=(.15u,.15u); T:=identity aligned al rotated theta scaled sc shifted pos; thfill fullcircle scaled 0.3u; fi; enddef; let p_icestalagmite_AUT = p_stalagmite_AUT; def p_pillar_AUT(expr pos,theta,sc,al) = pickup PenC; if ATTR__elevation: U:=(.15u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; thdraw (0,.15u)--(0,-.15u); thdraw (-.15u,-.4u)--(0,-.15u)--(.15u,-.4u); thdraw (-.15u,.4u)--(0,.15u)--(.15u,.4u); else: U:=(.225u,.225u); T:=identity aligned al rotated theta scaled sc shifted pos; thclean fullcircle scaled 0.45u; thdraw fullcircle scaled 0.45u; thfill fullcircle scaled 0.3u; fi; enddef; let p_icepillar_AUT = p_pillar_AUT; def p_crystal_AUT (expr pos,theta,sc,al)= U:=(.35u,.35u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p := ((-.35*u,0)--(.35*u,0)); thdraw p; thdraw p rotated (45); thdraw p rotated (90); thdraw p rotated (135); thdrawoptions(); enddef; def p_spring_AUT (expr pos,theta,sc,al)= U:=(.3u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.3u,.1u)..(0,-.1u)..(.3u,.1u); enddef; def p_sink_AUT (expr pos,theta,sc,al)= U:=(.3u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.3u,-.1u)..(0,.1u)..(.3u,-.1u); enddef; def p_breakdownchoke_AUT (expr pos,theta,sc,al)= U:=(.4u,.4u); T:=identity rotated -theta aligned al rotated theta scaled sc shifted pos; pickup PenC; thclean (-.4u,-.4u)--(.4u,-.4u)--(.4u,.4u)--(-.4u,.4u)--cycle; thdraw (-.4u,-.4u)--(.4u,-.4u)--(.4u,.4u)--(-.4u,.4u)--cycle; thdraw (-.21u,.305u)--(.0u,-.305u)--(.21u,.305u); enddef; def p_sand_AUT (expr pos,theta,sc,al)= U:=(.2u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p:= origin -- (0.01u,0.01u); for i=-0.1u step 0.2u until .15u: for j=-0.1u step 0.2u until .15u: thdraw p rotated uniformdeviate(360) shifted ((i,j) randomized 0.09u); endfor; endfor; thdrawoptions(); enddef; let p_clay_AUT = p_sand_AUT; def p_pebbles_AUT (expr pos,theta,sc,al)= U:=(.4u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; path qq; for i=-0.15u step 0.3u until .2u: for j=-0.15u step 0.3u until .2u: qq := (superellipse((.1u,0),(0,.05u),(-.1u,0),(0,.-.05u),.75)) randomized (u/45) scaled (uniformdeviate(0.4)+.55) rotated uniformdeviate(360) shifted ((i,j) randomized 0.15u); thdraw qq; endfor; endfor; enddef; def p_debris_AUT (expr pos,theta,sc,al)= U:=(.5u,.5u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; path block,q; block := ((-.15u,-.15u)--(.15u,-.15u)--(.3u,0.01u)--(.15u,.15u)--(-.15u,.15u)--cycle) ; q:= (punked (block randomized (0.15u))) rotated uniformdeviate(360) scaled (uniformdeviate(0.3)+0.3) shifted (0.0u,0.15u); thclean q; thdraw q; q:= (punked (block randomized (0.15u))) rotated uniformdeviate(360) scaled (uniformdeviate(0.5)+0.7) shifted (-0.15u,-0.15u); thclean q; thdraw q; q:= (punked (block randomized (0.15u))) rotated uniformdeviate(360) shifted (0.15u,-0.15u); thclean q; thdraw q; enddef; def p_blocks_AUT (expr pos,theta,sc,al)= U:=(u,u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; path block,q; block := ((-.25u,-.25u)--(.25u,-.25u)--(.5u,0.01u)--(.25u,.25u)--(-.25u,.25u)--cycle) ; q:= (punked (block randomized (0.3u))) rotated uniformdeviate(360) scaled (uniformdeviate(0.3)+0.3) shifted (0.0u,0.25u); thclean q; thdraw q; q:= (punked (block randomized (0.3u))) rotated uniformdeviate(360) scaled (uniformdeviate(0.5)+0.7) shifted (-0.25u,-0.25u); thclean q; thdraw q; q:= (punked (block randomized (0.3u))) rotated uniformdeviate(360) shifted (0.25u,-0.25u); thclean q; thdraw q; enddef; def p_water_AUT (expr pos,theta,sc,al)= U:=(.425u,.3u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenD; p:=fullcircle xscaled (.85u) yscaled (.6u); thfill p withcolor col_water_bg; thfill p withpattern pattern_water_AUT; thdraw p; enddef; def p_ice_AUT (expr pos,theta,sc,al)= U:=(.6u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p:=(-.15u,.0u) -- (0.15u,.0u); thdraw p rotated 90; thdraw p shifted (0.45u,.0u); thdraw p shifted (-0.45u,.0u); thdraw p rotated 90 shifted (-0.45u,0.25u); thdraw p shifted (0u,0.25u); thdraw p rotated 90 shifted (0.45u,.25u); enddef; def p_entrance_AUT (expr pos,theta,sc,al)= U:=(.3u,.75u); T:=identity aligned al rotated theta scaled sc shifted pos; path slice; for i= -0.5 step 0.01 until 0.5: slice:= (-.3u*(0.5-i),1.5*i*u)--(0,.75u)--(.3u*(0.5-i),1.5i*u)--cycle; thfill slice withcolor (min(0.95,0.5-1.75i),min(0.95,.5-1.75i),min(0.95,.5-1.75i)); endfor; thdraw ((-.3u,-0.75u)--(0,.75u)--(.3u,-0.75u)--cycle); enddef; def p_gradient_AUT (expr pos,theta,sc,al)= U:=(.15u,u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (0,-0.5u)--(0,0.5u); p:=(-.15u,.3u)--(0,0.7u)--(.15u,.3u)--cycle; thfill p; thdraw p; enddef; def p_airdraught_AUT (expr pos,theta,sc,al)= U:=(.2u,u); T:=identity aligned al rotated theta scaled 1 shifted pos; pickup PenC; thdraw (0,.5u)--(0,-0.8u); p:=(-.2u,.2u)--(0,.55u)--(.2u,.2u)--cycle; thfill p; for i:=1 upto round(3+2*mlog(sc)/mlog 2): thdraw (0,-(1-0.2i)*u)--(.2u,-(1-0.2(i-1))*u); thdraw (0,-(1-0.2i)*u)--(-.2u,-(1-0.2(i-1))*u); endfor; enddef; def p_station_temporary_AUT (expr pos)= T:=identity shifted pos; pickup PenD; thclean fullcircle scaled 0.15u; thdraw fullcircle scaled 0.15u; enddef; let p_station_painted_AUT = p_station_temporary_AUT ; let p_station_fixed_AUT = p_station_temporary_AUT ; def p_claychoke_AUT (expr pos,theta,sc,al)= U:=(.4u,.4u); T:=identity rotated -theta aligned al rotated theta scaled sc shifted pos; pickup PenC; thclean (-.4u,-.4u)--(.4u,-.4u)--(.4u,.4u)--(-.4u,.4u)--cycle; thdraw (-.4u,-.4u)--(.4u,-.4u)--(.4u,.4u)--(-.4u,.4u)--cycle; thdraw (-.15u,.3u)--(-.15u,-.25u)--(.15u,-.25u); enddef; def p_claytree_AUT (expr pos,theta,sc,al)= U:=(.55u,.6u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p:= (-.15u,.15u)--(.0u,.6u)--(.15u,.15u); thdraw p ; thdraw p shifted (-.4u,-.3u); thdraw p shifted (.4u,-.2u) ; enddef; therion/pt2pdf.pl0000755000076400010400000001775111305423060015031 0ustar userAdministrators#!/usr/bin/perl -w use POSIX "ceil"; use Getopt::Std; die "Usage: pt2pdf .txt\n" unless $ARGV[0]; getopt('i'); $plan = 2; $elev = 3; $cm = 72/2.54; ## SETTINGS ## $cave = ""; $team = ""; $date = ""; $columns = 3; $scale[$plan] = 1/200; $scale[$elev] = 1/400; $rotate[$plan] = 0; $rotate[$elev] = 1; $paper_x = 20*$cm; $paper_y = 30*$cm; $margin = 20; # bp $tex = " \\pageframe{% \\sketch{0}{1}{\\data}% \\sketch{0.05}{0.03}{\\plan}% \\sketch{0.95}{0.03}{\\elev}% } \\autoframe{\\plan} \\pageframe{% \\sketch{0}{1}{\\data}% } \\autoframe{\\data} "; ## END OF SETTINGS ## if (defined $opt_i) {do $opt_i;} $block = 0; $poly_len = 0; @DATA=(); $DATA[1] = ""; @CENTRELINE = (); open IN, $ARGV[0] or die "can't open pockettopo file $ARGV[0]!\n"; while() { s/\s+$//; if (/^$/) {next;} if (/^TRIP$/) { $block = 1; # $DATA[$block] = ""; $subblock = 0; } elsif (/^PLAN$/) { $block = 2; reset_bbox($block); } elsif (/^ELEVATION$/) { if ($poly_len>0) { if ($poly_len==1) { $DATA[2] .= "\\pdfliteral{$poly_moveto l}%\n"; } $DATA[2] .= "\\pdfliteral{S}%\n"; $poly_len = 0; } $block = 3; reset_bbox($block); } elsif (/^DATE (\d{4}\-\d{2}\-\d{2})$/) { $date ||= $1; } elsif (/^DECLINATION$/) { } elsif (/^DATA$/) { $subblock = 1; # @CENTRELINE = (); } elsif (/^STATIONS$/) { $subblock = 1; $DATA[$block] .= "\\pdfliteral{2 w 0.5 G}%\n"; } elsif (/^SHOTS$/) { $subblock = 2; $DATA[$block] .= "\\pdfliteral{0.5 w 0.5 G [2] 0 d}%\n"; } elsif (/^POLYLINE ([A-Z]+)$/) { $subblock = 3; if ($poly_len>0) { if ($poly_len==1) { $DATA[$block] .= "\\pdfliteral{$poly_moveto l}%\n"; } $DATA[$block] .= "\\pdfliteral{S}%\n"; $poly_len = 0; } else { $DATA[$block] .= "\\pdfliteral{0.5 w [] 0 d}%\n"; } $col = $1; if ($col eq "BLACK") {$color = "0 0 0";} elsif ($col eq "GRAY") {$color = "0.5 0.5 0.5";} elsif ($col eq "BROWN") {$color = "0.74 0.59 0.23";} elsif ($col eq "RED") {$color = "1 0 0";} elsif ($col eq "GREEN") {$color = "0.066 0.87 0.047";} elsif ($col eq "BLUE") {$color = "0 0 1";} else {$color = "0.78 0.28 0.89";} $DATA[$block] .= "\\pdfliteral{$color RG}%\n"; $is_first_poly = 1; } else { if ($block == 1) { if ($subblock == 1) { @ldata = split /\t/; $cl_from = $ldata[0]; $cl_to = $ldata[1]; $cl_az = $ldata[2]; $cl_cl = $ldata[3]; $cl_len = $ldata[4]; $tmp = ""; if (!$cl_to) {$tmp .= "\\pdfliteral{0.6 g}";} $tmp .= "$cl_from&$cl_to&$cl_az&$cl_cl&$cl_len"; if (!$cl_to) {$tmp .= "\\pdfliteral{0 g}";} push @CENTRELINE, $tmp; } } elsif ($block>1) { @ldata = split /\s+/; if ($subblock == 1) { $x = inscale($ldata[0]); $y = inscale($ldata[1]); $txt = $ldata[2]; add_to_bbox($x,$y,$block); $DATA[$block] .= "\\pdfliteral{$x $y m $x $y l S}%\n"; $DATA[$block] .= "\\pdfliteral{BT /F\\pdffontname\\f\\space 6 Tf $x $y Td ($txt) Tj ET}"; } if ($subblock == 2) { $x = inscale($ldata[0]); $y = inscale($ldata[1]); $x2 = inscale($ldata[2]); $y2 = inscale($ldata[3]); add_to_bbox($x,$y,$block); add_to_bbox($x2,$y2,$block); $DATA[$block] .= "\\pdfliteral{$x $y m $x2 $y2 l S}%\n"; } if ($subblock == 3) { $x = inscale($ldata[0]); $y = inscale($ldata[1]); add_to_bbox($x,$y,$block); if ($is_first_poly) { $DATA[$block] .= "\\pdfliteral{$x $y m}%\n"; $poly_moveto = "$x $y"; $is_first_poly = 0; } else { $DATA[$block] .= "\\pdfliteral{$x $y l}%\n"; } $poly_len++; } } } } if ($poly_len>0) { if ($poly_len==1) { $DATA[$block] .= "\\pdfliteral{$poly_moveto l}%\n"; } $DATA[$block] .= "\\pdfliteral{S}%\n"; } close IN; expand_bbox(2,$margin); expand_bbox(3,$margin); for $i (2..3) { if ($rotate[$i]==0) { $hsize[$i] = $maxx[$i]-$minx[$i]; $vsize[$i] = $maxy[$i]-$miny[$i]; } else { $vsize[$i] = $maxx[$i]-$minx[$i]; $hsize[$i] = $maxy[$i]-$miny[$i]; } if ($hsize[$i] > $paper_x || $vsize[$i] > $paper_y) { die "The sketch does not fit onto paper in the current scale!\n"; } } if (defined $date) {$fname = $date;} else {$fname = "archive";} $fname2 = $ARGV[0]; $fname2 =~ s/\.txt$//; $fname .= "_" . $fname2; open OUT, ">$fname.tex"; print OUT <> } 0\n"; if ($i==2) {print OUT "\\plan";} else {print OUT "\\elev";} print OUT "=\\pdflastxform\n"; print OUT "\n"; } print OUT "$tex\n"; print OUT "\\end\n"; close OUT; system("pdftex $fname.tex"); unlink("$fname.log"); unlink("$fname.tex"); sub add_to_bbox { # global minmaxxy my ($x,$y,$b) = @_; if ($x < $minx[$b]) {$minx[$b] = $x;} if ($x > $maxx[$b]) {$maxx[$b] = $x;} if ($y < $miny[$b]) {$miny[$b] = $y;} if ($y > $maxy[$b]) {$maxy[$b] = $y;} } sub reset_bbox { # global minmaxxy my $b = shift; $minx[$b] = 1e10; $maxx[$b] = -1e10; $miny[$b] = 1e10; $maxy[$b] = -1e10; } sub expand_bbox { # global minmaxxy my ($b,$val) = @_; $minx[$b] -= $val; $maxx[$b] += $val; $miny[$b] -= $val; $maxy[$b] += $val; } sub inscale { # global block my $n = shift; return $n * 100 * 72 /2.54 * $scale[$block]; } sub make_table { # global CENTRELINE, columns my $elem = @CENTRELINE; my $rows = ceil($elem/$columns); my $pos; my $s = "\\halign{\\f "; for ($j = 0; $j < $columns; $j++) { if ($j>0) {$s.="\\quad&";} $s .= "\\hfil#&\\hfil#&\\hfil#&\\hfil#&\\hfil#"; } $s .= "\\cr\n"; for ($j = 0; $j < $columns; $j++) { if ($j>0) {$s.="&";} $s .= "From&To&Compass&Clino&Length"; } $s .= "\\cr\\noalign{\\smallskip\\hrule\\smallskip}\n"; for ($i = 0; $i < $rows; $i++) { for ($j = 0; $j < $columns; $j++) { $pos = $i+$j*$rows; if ($j>0) {$s .= "&";} if ($pos<$elem) { $s .= $CENTRELINE[$pos]; } } $s .= "\\cr\n"; } $s .= "}\n"; return $s; } therion/README0000644000076400010400000000141711144727546014163 0ustar userAdministratorsThis is Therion, cave surveying software. It produces complete, always up-to-date cave maps. The map is automatically updated after loop closure, blunder fix or map symbol set change. It's particularly well suitable for documenting large and complicated cave systems. Therion creates realistic 3D models from 2D maps without quantity of additional informations. LRUD dimensions are also supported. Documentation is in the Therion Book (file thbook.pdf), which can either be downloaded from the internet or compiled in the `thbook' directory using pdfTeX. Installation (compilation) is described in the Appendix of the Therion Book. Web page: http://therion.speleo.sk Copyright (c) 1999-2009 Stacho Mudrak, Martin Budaj Distributed free under the GNU General Public License therion/samples/0000755000076400010400000000000012270034435014731 5ustar userAdministratorstherion/samples/areas/0000755000076400010400000000000012270034352016022 5ustar userAdministratorstherion/samples/areas/thconfig0000644000076400010400000000030710633566270017560 0ustar userAdministratorsencoding utf-8 source types.th2 export map -o types.pdf \ -layout-map-header 0 0 off \ -layout-symbol-hide group centerline #!PROCESS #!TITLE 7 Area symbols #!IMAGE types.pdf #!CLEAN types.pdftherion/samples/areas/thTMPDIR/0000755000076400010400000000000012050456024017355 5ustar userAdministratorstherion/samples/areas/thTMPDIR/data.10000644000076400010400000007141411145241274020362 0ustar userAdministrators%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: -43 -224 43 214 %%Creator: MetaPost %%CreationDate: 2009.02.13:1551 %%Pages: 1 %%EndProlog %%Page: 1 1 gsave newpath 34.1854 -148.6998 moveto 21.3034 -149.48573 -10.61458 -149.44963 -28.61816 -148.54234 curveto -28.62114 -148.54219 -28.61748 -148.53624 -28.61766 -148.54028 curveto -29.13751 -160.00256 -29.62985 -171.13118 -29.92444 -181.36069 curveto -29.92413 -181.36212 lineto -13.78838 -181.82458 18.6292 -181.35017 32.98209 -180.34279 curveto 32.98343 -180.3427 32.98148 -180.3439 32.98148 -180.34294 curveto 33.10815 -170.26721 33.5851 -159.58676 34.18536 -148.69833 curveto 34.18549 -148.6959 34.18692 -148.6997 34.1854 -148.6998 curveto closepath clip 0 0.6 dtransform truncate idtransform setlinewidth pop [] 0 setdash 1 setlinecap 1 setlinejoin 10 setmiterlimit newpath -29.25569 -190.08768 moveto -24.45576 -190.08768 lineto stroke 0.6 0 dtransform exch truncate exch idtransform pop setlinewidth newpath -26.85573 -192.48764 moveto -26.85573 -187.68771 lineto stroke 0 0.6 dtransform truncate idtransform setlinewidth pop newpath -39.09308 -148.64365 moveto -34.29315 -148.64365 lineto stroke 0.6 0 dtransform exch truncate exch idtransform pop setlinewidth newpath -36.69312 -151.04361 moveto -36.69312 -146.24368 lineto stroke 0 0.6 dtransform truncate idtransform setlinewidth pop newpath -17.16187 -173.30756 moveto -12.36194 -173.30756 lineto stroke 0.6 0 dtransform exch truncate exch idtransform pop setlinewidth newpath -14.7619 -175.70752 moveto -14.7619 -170.9076 lineto stroke 0 0.6 dtransform truncate idtransform setlinewidth pop newpath 0.49176 -170.56465 moveto 5.29169 -170.56465 lineto stroke 0.6 0 dtransform exch truncate exch idtransform pop setlinewidth newpath 2.89172 -172.96461 moveto 2.89172 -168.16469 lineto stroke 0 0.6 dtransform truncate idtransform setlinewidth pop newpath 21.25732 -165.67238 moveto 26.05725 -165.67238 lineto stroke 0.6 0 dtransform exch truncate exch idtransform pop setlinewidth newpath 23.65729 -168.07234 moveto 23.65729 -163.27242 lineto stroke grestore gsave newpath 32.98209 -180.34279 moveto 18.6292 -181.35017 -13.78838 -181.82458 -29.92413 -181.36212 curveto -29.92604 -181.36208 -29.92432 -181.35538 -29.92442 -181.35968 curveto -30.32343 -195.21484 -30.35966 -207.42067 -29.61009 -216.57225 curveto -29.60995 -216.5742 -29.61192 -216.57143 -29.6104 -216.57149 curveto -11.41945 -217.07947 20.58362 -217.47241 34.86763 -216.39745 curveto 34.8678 -216.3966 lineto 33.26392 -206.06956 32.81303 -193.74036 32.9815 -180.34187 curveto 32.98154 -180.33972 32.98415 -180.34264 32.98209 -180.34279 curveto closepath clip 0 setgray 0.6 0 dtransform exch truncate exch idtransform pop setlinewidth [] 0 setdash 1 setlinecap 1 setlinejoin 10 setmiterlimit newpath -38.0638 -216.73029 moveto -38.0638 -214.33032 lineto stroke 0 0.6 dtransform truncate idtransform setlinewidth pop newpath -38.0638 -216.73029 moveto -40.14223 -215.5303 lineto stroke newpath -38.0638 -216.73029 moveto -40.14223 -217.93027 lineto stroke 0.6 0 dtransform exch truncate exch idtransform pop setlinewidth newpath -38.0638 -216.73029 moveto -38.0638 -219.13025 lineto stroke 0 0.6 dtransform truncate idtransform setlinewidth pop newpath -38.0638 -216.73029 moveto -35.98537 -217.93027 lineto stroke newpath -38.0638 -216.73029 moveto -35.98537 -215.5303 lineto stroke newpath -38.91238 -213.48174 moveto -38.0638 -214.33032 lineto -37.21521 -213.48174 lineto stroke newpath -41.30144 -215.8409 moveto -40.14223 -215.5303 lineto -40.45284 -214.37111 lineto stroke newpath -40.45284 -219.08946 moveto -40.14223 -217.93027 lineto -41.30144 -217.61967 lineto stroke newpath -37.21521 -219.97884 moveto -38.0638 -219.13025 lineto -38.91238 -219.97884 lineto stroke newpath -34.82616 -217.61967 moveto -35.98537 -217.93027 lineto -35.67476 -219.08946 lineto stroke newpath -35.67476 -214.37111 moveto -35.98537 -215.5303 lineto -34.82616 -215.8409 lineto stroke 0.6 0 dtransform exch truncate exch idtransform pop setlinewidth newpath -39.79234 -187.49602 moveto -39.79234 -185.09605 lineto stroke 0 0.6 dtransform truncate idtransform setlinewidth pop newpath -39.79234 -187.49602 moveto -41.87077 -186.29604 lineto stroke newpath -39.79234 -187.49602 moveto -41.87077 -188.696 lineto stroke 0.6 0 dtransform exch truncate exch idtransform pop setlinewidth newpath -39.79234 -187.49602 moveto -39.79234 -189.89598 lineto stroke 0 0.6 dtransform truncate idtransform setlinewidth pop newpath -39.79234 -187.49602 moveto -37.71391 -188.696 lineto stroke newpath -39.79234 -187.49602 moveto -37.71391 -186.29604 lineto stroke newpath -40.64093 -184.24747 moveto -39.79234 -185.09605 lineto -38.94376 -184.24747 lineto stroke newpath -43.02998 -186.60663 moveto -41.87077 -186.29604 lineto -42.18138 -185.13684 lineto stroke newpath -42.18138 -189.8552 moveto -41.87077 -188.696 lineto -43.02998 -188.3854 lineto stroke newpath -38.94376 -190.74457 moveto -39.79234 -189.89598 lineto -40.64093 -190.74457 lineto stroke newpath -36.5547 -188.3854 moveto -37.71391 -188.696 lineto -37.4033 -189.8552 lineto stroke newpath -37.4033 -185.13684 moveto -37.71391 -186.29604 lineto -36.5547 -186.60663 lineto stroke 0.6 0 dtransform exch truncate exch idtransform pop setlinewidth newpath -17.25761 -196.54321 moveto -17.25761 -194.14325 lineto stroke 0 0.6 dtransform truncate idtransform setlinewidth pop newpath -17.25761 -196.54321 moveto -19.33604 -195.34323 lineto stroke newpath -17.25761 -196.54321 moveto -19.33604 -197.7432 lineto stroke 0.6 0 dtransform exch truncate exch idtransform pop setlinewidth newpath -17.25761 -196.54321 moveto -17.25761 -198.94318 lineto stroke 0 0.6 dtransform truncate idtransform setlinewidth pop newpath -17.25761 -196.54321 moveto -15.17918 -197.7432 lineto stroke newpath -17.25761 -196.54321 moveto -15.17918 -195.34323 lineto stroke newpath -18.1062 -193.29466 moveto -17.25761 -194.14325 lineto -16.40903 -193.29466 lineto stroke newpath -20.49525 -195.65382 moveto -19.33604 -195.34323 lineto -19.64665 -194.18404 lineto stroke newpath -19.64665 -198.90239 moveto -19.33604 -197.7432 lineto -20.49525 -197.4326 lineto stroke newpath -16.40903 -199.79176 moveto -17.25761 -198.94318 lineto -18.1062 -199.79176 lineto stroke newpath -14.01997 -197.4326 moveto -15.17918 -197.7432 lineto -14.86858 -198.90239 lineto stroke newpath -14.86858 -194.18404 moveto -15.17918 -195.34323 lineto -14.01997 -195.65382 lineto stroke 0.6 0 dtransform exch truncate exch idtransform pop setlinewidth newpath 2.08119 -208.66661 moveto 2.08119 -206.26665 lineto stroke 0 0.6 dtransform truncate idtransform setlinewidth pop newpath 2.08119 -208.66661 moveto 0.00276 -207.46663 lineto stroke newpath 2.08119 -208.66661 moveto 0.00276 -209.8666 lineto stroke 0.6 0 dtransform exch truncate exch idtransform pop setlinewidth newpath 2.08119 -208.66661 moveto 2.08119 -211.06657 lineto stroke 0 0.6 dtransform truncate idtransform setlinewidth pop newpath 2.08119 -208.66661 moveto 4.15962 -209.8666 lineto stroke newpath 2.08119 -208.66661 moveto 4.15962 -207.46663 lineto stroke newpath 1.2326 -205.41806 moveto 2.08119 -206.26665 lineto 2.92978 -205.41806 lineto stroke newpath -1.15645 -207.77722 moveto 0.00276 -207.46663 lineto -0.30785 -206.30743 lineto stroke newpath -0.30785 -211.02579 moveto 0.00276 -209.8666 lineto -1.15645 -209.556 lineto stroke newpath 2.92978 -211.91516 moveto 2.08119 -211.06657 lineto 1.2326 -211.91516 lineto stroke newpath 5.31883 -209.556 moveto 4.15962 -209.8666 lineto 4.47023 -211.02579 lineto stroke newpath 4.47023 -206.30743 moveto 4.15962 -207.46663 lineto 5.31883 -207.77722 lineto stroke 0.6 0 dtransform exch truncate exch idtransform pop setlinewidth newpath 21.21722 -194.80937 moveto 21.21722 -192.40941 lineto stroke 0 0.6 dtransform truncate idtransform setlinewidth pop newpath 21.21722 -194.80937 moveto 19.1388 -193.60939 lineto stroke newpath 21.21722 -194.80937 moveto 19.1388 -196.00935 lineto stroke 0.6 0 dtransform exch truncate exch idtransform pop setlinewidth newpath 21.21722 -194.80937 moveto 21.21722 -197.20934 lineto stroke 0 0.6 dtransform truncate idtransform setlinewidth pop newpath 21.21722 -194.80937 moveto 23.29565 -196.00935 lineto stroke newpath 21.21722 -194.80937 moveto 23.29565 -193.60939 lineto stroke newpath 20.36864 -191.56082 moveto 21.21722 -192.40941 lineto 22.06581 -191.56082 lineto stroke newpath 17.97958 -193.91998 moveto 19.1388 -193.60939 lineto 18.82819 -192.4502 lineto stroke newpath 18.82819 -197.16855 moveto 19.1388 -196.00935 lineto 17.97958 -195.69876 lineto stroke newpath 22.06581 -198.05792 moveto 21.21722 -197.20934 lineto 20.36864 -198.05792 lineto stroke newpath 24.45486 -195.69876 moveto 23.29565 -196.00935 lineto 23.60626 -197.16855 lineto stroke newpath 23.60626 -192.4502 moveto 23.29565 -193.60939 lineto 24.45486 -193.91998 lineto stroke grestore 0.00002 0.00018 0.00008 setrgbcolor newpath 34.26648 -38.73701 moveto 20.36212 -40.73904 -10.63553 -42.02469 -29.1686 -41.62814 curveto -29.169 -41.6292 lineto -27.46475 -50.97232 -26.72469 -63.09773 -26.56053 -76.71597 curveto -26.56024 -76.71712 lineto -9.17743 -77.5038 24.66048 -75.8044 37.51857 -74.14069 curveto 37.51865 -74.14038 lineto 37.43575 -60.5742 36.55858 -48.41144 34.2663 -38.7374 curveto closepath fill newpath 37.51857 -74.14069 moveto 24.66048 -75.8044 -9.17743 -77.5038 -26.56024 -76.71712 curveto -26.56125 -76.71707 -26.56056 -76.71321 -26.56053 -76.71567 curveto -26.4205 -88.33061 -26.69943 -101.03151 -27.15642 -114.01833 curveto -27.15648 -114.0198 -27.15753 -114.01752 -27.15651 -114.01758 curveto -4.21933 -115.42853 23.82866 -114.75432 36.27228 -113.25113 curveto 36.27261 -113.25082 lineto 37.0283 -99.60725 37.593 -86.30954 37.51866 -74.14095 curveto closepath fill 0.00002 0.00015 0.00009 setrgbcolor newpath 37.51857 -74.14069 moveto 24.66048 -75.8044 -9.17743 -77.5038 -26.56024 -76.71712 curveto -26.56125 -76.71707 -26.56056 -76.71321 -26.56053 -76.71567 curveto -26.4205 -88.33061 -26.69943 -101.03151 -27.15642 -114.01833 curveto -27.15648 -114.0198 -27.15753 -114.01752 -27.15651 -114.01758 curveto -4.21933 -115.42853 23.82866 -114.75432 36.27228 -113.25113 curveto 36.27261 -113.25082 lineto 37.0283 -99.60725 37.593 -86.30954 37.51866 -74.14095 curveto closepath fill 0.00002 0.00018 0.00008 setrgbcolor newpath 36.27228 -113.25113 moveto 23.82866 -114.75432 -4.21933 -115.42853 -27.15651 -114.01758 curveto -27.1564 -114.01779 lineto -27.55995 -125.48631 -28.10236 -137.17783 -28.61772 -148.54138 curveto -28.61774 -148.54169 -28.61902 -148.5423 -28.61816 -148.54234 curveto -10.61458 -149.44963 21.3034 -149.48573 34.1854 -148.6998 curveto 34.18529 -148.69948 lineto 32.58795 -177.67462 31.864 -205.17683 36.29 -223.73 curveto 36.29 -223.73 lineto 36.29 -223.73 lineto 30.07066 -197.65945 34.0201 -153.91869 36.27261 -113.25082 curveto closepath fill 0.00002 0.00015 0.00008 setrgbcolor newpath 36.27228 -113.25113 moveto 23.82866 -114.75432 -4.21933 -115.42853 -27.15651 -114.01758 curveto -27.1564 -114.01779 lineto -27.55995 -125.48631 -28.10236 -137.17783 -28.61772 -148.54138 curveto -28.61774 -148.54169 -28.61902 -148.5423 -28.61816 -148.54234 curveto -10.61458 -149.44963 21.3034 -149.48573 34.1854 -148.6998 curveto 34.18529 -148.69948 lineto 32.58795 -177.67462 31.864 -205.17683 36.29 -223.73 curveto 36.29 -223.73 lineto 36.29 -223.73 lineto 30.07066 -197.65945 34.0201 -153.91869 36.27261 -113.25082 curveto closepath fill 0.00002 0.00018 0.00008 setrgbcolor newpath 32.68211 211.28107 moveto 14.02905 215.10141 -17.5444 211.93707 -33.09227 207.7223 curveto -33.09303 207.7221 -33.09283 207.72528 -33.09264 207.7233 curveto -31.8932 196.47768 -31.52502 183.10312 -31.64006 168.42076 curveto -31.6401 168.42038 lineto -14.16208 172.00319 16.96597 174.07968 33.15897 171.5863 curveto 33.15883 171.58653 lineto 33.41263 186.19472 33.3309 199.68452 32.68236 211.27994 curveto closepath fill 0.00002 0.00015 0.00002 setrgbcolor newpath 32.68211 211.28107 moveto 14.02905 215.10141 -17.5444 211.93707 -33.09227 207.7223 curveto -33.09303 207.7221 -33.09283 207.72528 -33.09264 207.7233 curveto -31.8932 196.47768 -31.52502 183.10312 -31.64006 168.42076 curveto -31.6401 168.42038 lineto -14.16208 172.00319 16.96597 174.07968 33.15897 171.5863 curveto 33.15883 171.58653 lineto 33.41263 186.19472 33.3309 199.68452 32.68236 211.27994 curveto closepath fill 0.00002 0.00018 0.00008 setrgbcolor newpath 33.15897 171.5863 moveto 16.96597 174.07968 -14.16208 172.00319 -31.6401 168.42038 curveto -31.64134 168.42014 -31.64005 168.42326 -31.64005 168.42123 curveto -31.71948 158.27995 -32.02946 147.51472 -32.45529 136.39613 curveto -32.45547 136.39201 -32.45879 136.39835 -32.45567 136.39789 curveto -15.59921 133.92552 18.05566 134.92465 32.11867 137.13315 curveto 32.11983 137.13333 32.11827 137.13443 32.1183 137.13509 curveto 32.58893 149.03008 32.96835 160.62318 33.15881 171.5864 curveto closepath fill 0.00002 0.00015 0.00003 setrgbcolor newpath 33.15897 171.5863 moveto 16.96597 174.07968 -14.16208 172.00319 -31.6401 168.42038 curveto -31.64134 168.42014 -31.64005 168.42326 -31.64005 168.42123 curveto -31.71948 158.27995 -32.02946 147.51472 -32.45529 136.39613 curveto -32.45547 136.39201 -32.45879 136.39835 -32.45567 136.39789 curveto -15.59921 133.92552 18.05566 134.92465 32.11867 137.13315 curveto 32.11983 137.13333 32.11827 137.13443 32.1183 137.13509 curveto 32.58893 149.03008 32.96835 160.62318 33.15881 171.5864 curveto closepath fill gsave newpath 32.11794 137.13303 moveto 18.05446 134.9246 -15.59952 133.92557 -32.45567 136.39789 curveto -32.45728 136.39813 -32.45529 136.39635 -32.45532 136.39551 curveto -32.91736 124.33151 -33.51578 111.8515 -34.10406 99.30112 curveto -34.10417 99.29933 lineto -16.6587 97.18086 16.60957 96.05302 30.35019 96.92178 curveto 30.35072 96.92255 lineto 30.9632 110.39977 31.59674 123.95267 32.1183 137.13483 curveto 32.11842 137.13762 32.1191 137.13321 32.11794 137.13303 curveto closepath clip 0 setgray 0 0.6 dtransform truncate idtransform setlinewidth pop [] 0 setdash 1 setlinecap 1 setlinejoin 10 setmiterlimit newpath -35.10829 90.39084 moveto -35.76517 92.51042 -32.11656 92.05847 -32.72086 89.91162 curveto -32.3167 88.68684 -29.17023 88.3266 -29.13116 90.68614 curveto stroke newpath -21.36513 99.63895 moveto -21.53627 102.11395 -18.37291 101.69357 -18.27036 99.89056 curveto -18.61888 98.1294 -15.621 97.92137 -15.25949 99.67348 curveto stroke newpath -25.41852 107.76328 moveto -25.7937 109.42339 -22.299 109.64737 -22.49869 107.88057 curveto -22.40799 105.67537 -19.6403 105.41583 -19.87628 107.36073 curveto stroke newpath -18.9754 123.4584 moveto -19.16505 125.53873 -16.53294 125.22185 -16.14125 123.78777 curveto -16.33775 121.19669 -13.3228 121.57564 -13.45796 123.27625 curveto stroke newpath -2.11098 113.64905 moveto -2.21228 115.60365 0.8161 115.54852 0.57245 113.94635 curveto 0.84189 112.17459 4.24556 112.12112 4.30655 114.17322 curveto stroke newpath 0.91031 125.51515 moveto 1.04724 127.71675 4.13255 127.20207 3.72395 125.50333 curveto 4.48383 123.2178 7.51521 123.62003 7.25226 125.29578 curveto stroke newpath 9.57837 87.38965 moveto 9.63484 89.13782 12.79782 89.68604 12.57379 87.16742 curveto 12.62804 85.62683 16.03156 85.18925 15.89116 87.77347 curveto stroke newpath 15.56007 110.31981 moveto 15.60902 112.3497 18.55508 112.26563 19.03911 110.29524 curveto 18.77994 108.91362 21.30241 108.80193 21.79807 110.65912 curveto stroke newpath 21.0432 127.5415 moveto 20.82121 129.30139 23.88142 129.58046 24.4788 127.49501 curveto 24.53133 125.17496 27.4315 125.45276 26.78984 127.31763 curveto stroke grestore gsave newpath 30.35019 96.92178 moveto 16.60957 96.05302 -16.6587 97.18086 -34.10417 99.29933 curveto -34.10614 99.29956 -34.10391 99.30482 -34.10406 99.30136 curveto -34.65546 87.53812 -35.19795 75.71306 -35.61093 64.11076 curveto -35.61096 64.10988 -35.61098 64.11128 -35.61072 64.11125 curveto -17.31688 62.54536 12.70424 62.54173 28.9201 63.0961 curveto 28.92007 63.09587 lineto 29.32782 74.13568 29.83168 85.50148 30.35068 96.92163 curveto closepath clip 0 setgray 0 0.6 dtransform truncate idtransform setlinewidth pop [] 0 setdash 1 setlinecap 1 setlinejoin 10 setmiterlimit newpath -36.79102 60.94402 moveto 0 0 rlineto stroke newpath -40.38577 73.74525 moveto 0 0 rlineto stroke newpath -38.79796 84.6862 moveto 0 0 rlineto stroke newpath -33.50446 92.9244 moveto 0 0 rlineto stroke newpath -25.6038 58.35437 moveto 0 0 rlineto stroke newpath -23.8343 73.51608 moveto 0 0 rlineto stroke newpath -23.91957 87.38666 moveto 0 0 rlineto stroke newpath -23.79427 97.55972 moveto 0 0 rlineto stroke newpath -11.20886 57.95807 moveto 0 0 rlineto stroke newpath -16.44395 76.33691 moveto 0 0 rlineto stroke newpath -15.1105 85.46555 moveto 0 0 rlineto stroke newpath -11.0909 98.1549 moveto 0 0 rlineto stroke newpath 0.47812 60.552 moveto 0 0 rlineto stroke newpath -0.10379 68.98979 moveto 0 0 rlineto stroke newpath -5.09613 82.90881 moveto 0 0 rlineto stroke newpath -4.36385 95.1856 moveto 0 0 rlineto stroke newpath 13.7995 58.34843 moveto 0 0 rlineto stroke newpath 7.80225 76.82526 moveto 0 0 rlineto stroke newpath 10.1374 84.2584 moveto 0 0 rlineto stroke newpath 6.5342 94.28468 moveto 0 0 rlineto stroke newpath 22.67027 57.3692 moveto 0 0 rlineto stroke newpath 22.34909 68.58734 moveto 0 0 rlineto stroke newpath 22.29231 84.92558 moveto 0 0 rlineto stroke newpath 21.31802 99.70012 moveto 0 0 rlineto stroke grestore gsave newpath 28.9201 63.0961 moveto 12.70424 62.54173 -17.31688 62.54536 -35.61072 64.11125 curveto -35.61133 64.1113 -35.61082 64.11368 -35.61087 64.11215 curveto -36.02843 52.38124 -36.31358 40.87807 -36.34163 29.89679 curveto -36.34135 29.89641 lineto -13.07925 28.33315 14.44374 28.38947 28.03996 29.02649 curveto 28.04236 29.02663 28.03952 29.0221 28.03955 29.02515 curveto 28.1558 39.78337 28.48265 51.25221 28.9201 63.09627 curveto closepath clip 0 setgray 0 0.6 dtransform truncate idtransform setlinewidth pop [] 0 setdash 1 setlinejoin 10 setmiterlimit newpath -40.96799 31.04416 moveto -41.2403 31.3209 -41.65474 31.38562 -42.02692 31.2649 curveto -42.61453 31.0743 -43.08081 30.64877 -43.52032 30.2163 curveto -43.95984 29.78381 -44.39285 29.32448 -44.5929 28.73999 curveto -44.71962 28.36981 -44.66159 27.95439 -44.38928 27.67764 curveto -44.11697 27.4009 -43.70253 27.33618 -43.33035 27.45691 curveto -42.74274 27.6475 -42.27646 28.07303 -41.83694 28.50551 curveto -41.39743 28.93799 -40.96442 29.39732 -40.76437 29.98181 curveto -40.63765 30.35199 -40.69568 30.76741 -40.96799 31.04416 curveto closepath stroke newpath -44.47697 65.15198 moveto -44.33897 64.78906 -43.98553 64.56313 -43.59624 64.52394 curveto -42.98157 64.4621 -42.3835 64.66412 -41.80714 64.8833 curveto -41.23079 65.10248 -40.6496 65.34888 -40.23134 65.80351 curveto -39.96643 66.09148 -39.85243 66.49515 -39.99043 66.85806 curveto -40.12843 67.22098 -40.48187 67.44691 -40.87117 67.4861 curveto -41.48584 67.54794 -42.08391 67.34592 -42.66026 67.12674 curveto -43.23662 66.90756 -43.81781 66.66116 -44.23607 66.20653 curveto -44.50098 65.91856 -44.61497 65.5149 -44.47697 65.15198 curveto closepath stroke newpath -22.2993 44.54509 moveto -22.55573 44.83662 -22.9659 44.92441 -23.34424 44.82468 curveto -23.94162 44.66724 -24.43095 44.26845 -24.89397 43.8612 curveto -25.35698 43.45396 -25.81497 43.01953 -26.0474 42.44717 curveto -26.1946 42.08466 -26.15991 41.66661 -25.90349 41.37508 curveto -25.64706 41.08354 -25.2369 40.99576 -24.85855 41.09549 curveto -24.26117 41.25293 -23.77184 41.65172 -23.30882 42.05896 curveto -22.84581 42.4662 -22.38782 42.90063 -22.1554 43.47299 curveto -22.0082 43.83551 -22.04288 44.25356 -22.2993 44.54509 curveto closepath stroke newpath -21.7225 68.51532 moveto -21.98228 68.80386 -22.39345 68.88687 -22.77061 68.78278 curveto -23.36612 68.61842 -23.85078 68.21399 -24.30905 67.80142 curveto -24.76732 67.38885 -25.22025 66.94914 -25.44603 66.37411 curveto -25.589 66.00992 -25.54948 65.59232 -25.2897 65.30377 curveto -25.02992 65.01523 -24.61876 64.93222 -24.2416 65.03632 curveto -23.64609 65.20067 -23.16142 65.6051 -22.70316 66.01767 curveto -22.24489 66.43024 -21.79196 66.86995 -21.56618 67.44498 curveto -21.4232 67.80917 -21.46272 68.22678 -21.7225 68.51532 curveto closepath stroke newpath -4.00941 23.03662 moveto -3.79822 23.36241 -3.8248 23.78105 -4.02327 24.11826 curveto -4.33661 24.65067 -4.85303 25.0137 -5.37044 25.34914 curveto -5.88785 25.68457 -6.43008 26.00781 -7.04402 26.07654 curveto -7.43286 26.12007 -7.8259 25.97346 -8.0371 25.64767 curveto -8.24829 25.32188 -8.22171 24.90324 -8.02324 24.56604 curveto -7.7099 24.03363 -7.19348 23.6706 -6.67607 23.33516 curveto -6.15866 22.99973 -5.61642 22.67648 -5.00249 22.60776 curveto -4.61365 22.56422 -4.22061 22.71083 -4.00941 23.03662 curveto closepath stroke newpath -5.88954 42.56546 moveto -6.20822 42.34367 -6.34186 41.94604 -6.28558 41.55885 curveto -6.19673 40.9475 -5.85587 40.41617 -5.50363 39.91005 curveto -5.1514 39.40393 -4.77159 38.8997 -4.22919 38.60402 curveto -3.88565 38.41672 -3.46637 38.40388 -3.14769 38.62567 curveto -2.82901 38.84746 -2.69537 39.24509 -2.75165 39.63228 curveto -2.8405 40.24364 -3.18137 40.77496 -3.5336 41.28108 curveto -3.88583 41.7872 -4.26564 42.29143 -4.80804 42.58711 curveto -5.15158 42.77441 -5.57086 42.78725 -5.88954 42.56546 curveto closepath stroke newpath 1.87437 67.20976 moveto 1.60515 67.48952 1.19144 67.55882 0.81795 67.44223 curveto 0.22823 67.25818 -0.24274 66.83786 -0.68704 66.41028 curveto -1.13135 65.9827 -1.56941 65.52817 -1.77596 64.94595 curveto -1.90677 64.5772 -1.85338 64.16115 -1.58415 63.8814 curveto -1.31493 63.60164 -0.90121 63.53233 -0.52773 63.64893 curveto 0.062 63.83298 0.53296 64.2533 0.97726 64.68088 curveto 1.42157 65.10846 1.85963 65.56299 2.06618 66.1452 curveto 2.19699 66.51396 2.1436 66.93001 1.87437 67.20976 curveto closepath stroke newpath 15.56825 22.28087 moveto 15.73123 21.92848 16.09956 21.72774 16.49065 21.71582 curveto 17.10812 21.697 17.69063 21.94026 18.25029 22.19911 curveto 18.80995 22.45796 19.37253 22.74431 19.75804 23.22702 curveto 20.00221 23.53276 20.08777 23.9434 19.92479 24.29579 curveto 19.76181 24.64818 19.39348 24.84892 19.0024 24.86084 curveto 18.38492 24.87965 17.80241 24.6364 17.24275 24.37755 curveto 16.68309 24.1187 16.12051 23.83235 15.735 23.34964 curveto 15.49083 23.0439 15.40527 22.63326 15.56825 22.28087 curveto closepath stroke newpath 15.44554 43.8312 moveto 15.83182 43.79207 16.19212 44.00685 16.4015 44.33739 curveto 16.73209 44.85927 16.81929 45.48447 16.88145 46.09795 curveto 16.94362 46.71143 16.98361 47.34142 16.76442 47.91899 curveto 16.62563 48.2848 16.31573 48.56752 15.92946 48.60666 curveto 15.54318 48.6458 15.18288 48.43102 14.9735 48.10048 curveto 14.64291 47.5786 14.55571 46.9534 14.49355 46.33992 curveto 14.43138 45.72644 14.39139 45.09645 14.61058 44.51888 curveto 14.74937 44.15306 15.05927 43.87035 15.44554 43.8312 curveto closepath stroke grestore gsave newpath 28.03996 29.02649 moveto 14.44374 28.38947 -13.07925 28.33315 -36.34135 29.89641 curveto -36.34291 29.89651 -36.34163 29.90195 -36.34163 29.89847 curveto -36.37312 17.58017 -36.08112 5.91855 -35.28961 -4.67116 curveto -35.2896 -4.67137 -35.29097 -4.6719 -35.29007 -4.67192 curveto -19.87265 -4.98239 12.2678 -4.31265 28.53369 -3.07172 curveto 28.53342 -3.07025 lineto 28.03534 6.50458 27.91336 17.34598 28.03955 29.02484 curveto 28.03955 29.0254 28.04115 29.02654 28.03996 29.02649 curveto closepath clip 0 setgray 0 0.6 dtransform truncate idtransform setlinewidth pop [] 0 setdash 1 setlinecap 1 setlinejoin 10 setmiterlimit newpath -33.89325 -6.88333 moveto -37.31516 -3.5173 lineto stroke newpath -39.84105 1.71526 moveto -43.4254 4.9077 lineto stroke 0.6 0 dtransform exch truncate exch idtransform pop setlinewidth newpath -35.00624 15.96907 moveto -34.7321 20.76115 lineto stroke 0 0.6 dtransform truncate idtransform setlinewidth pop newpath -36.29327 25.8978 moveto -38.68335 30.0603 lineto stroke newpath -24.54755 -9.80443 moveto -27.12286 -5.75383 lineto stroke newpath -27.17702 5.9078 moveto -29.63008 1.78207 lineto stroke newpath -28.47826 17.02415 moveto -29.9983 21.57704 lineto stroke newpath -29.7701 29.55644 moveto -24.99464 29.0724 lineto stroke newpath -15.44135 -4.70572 moveto -10.74329 -5.68927 lineto stroke 0.6 0 dtransform exch truncate exch idtransform pop setlinewidth newpath -12.53955 6.18825 moveto -12.0662 10.9648 lineto stroke newpath -14.32825 21.70718 moveto -14.54034 16.91196 lineto stroke 0 0.6 dtransform truncate idtransform setlinewidth pop newpath -13.09776 29.48459 moveto -14.34593 24.84982 lineto stroke 0.6 0 dtransform exch truncate exch idtransform pop setlinewidth newpath 0.62111 -3.29466 moveto 0.80525 -8.09108 lineto stroke 0 0.6 dtransform truncate idtransform setlinewidth pop newpath -4.81721 4.28838 moveto -2.66884 -0.00392 lineto stroke newpath -3.4701 16.27399 moveto -8.04758 14.82983 lineto stroke newpath -6.1479 29.34598 moveto -4.58128 24.8089 lineto stroke newpath 11.94485 -5.26404 moveto 12.89706 -9.96854 lineto stroke newpath 9.96681 7.68126 moveto 6.46068 4.40312 lineto stroke newpath 8.2701 16.65091 moveto 12.87624 15.30084 lineto stroke newpath 11.62048 34.21075 moveto 8.12747 30.91864 lineto stroke newpath 27.2285 -8.88849 moveto 22.47707 -9.56903 lineto stroke newpath 24.25621 4.28319 moveto 19.48589 3.75124 lineto stroke newpath 24.50641 17.71161 moveto 23.33353 22.366 lineto stroke newpath 22.46559 29.63625 moveto 20.77864 25.14253 lineto stroke grestore gsave newpath 28.53296 -3.07178 moveto 12.26718 -4.31265 -19.87157 -4.98238 -35.28911 -4.67194 curveto -35.28943 -4.67192 -35.28972 -4.6698 -35.28961 -4.67116 curveto -34.41019 -16.43723 -32.91412 -26.88002 -30.56 -35.43 curveto -30.03786 -37.32602 -29.57597 -39.39821 -29.16905 -41.62901 curveto -29.16847 -41.63217 -29.17241 -41.62805 -29.1697 -41.62813 curveto -10.6368 -42.02477 20.36166 -40.73907 34.26636 -38.73701 curveto 34.26717 -38.7369 34.2666 -38.73862 34.26636 -38.73761 curveto 33.85446 -36.99928 33.39688 -35.34132 32.89 -33.77 curveto 30.5515 -26.51892 29.2028 -15.93845 28.53342 -3.07025 curveto 28.53326 -3.06769 28.53377 -3.07172 28.53296 -3.07178 curveto closepath clip 0.00002 0.00018 0.00008 setrgbcolor newpath -36.2043 -33.23795 moveto -46.49374 -32.45242 lineto -50.94089 -42.40157 lineto -36.13957 -48.74173 lineto closepath fill 0 setgray 0 0.6 dtransform truncate idtransform setlinewidth pop [] 0 setdash 1 setlinejoin 10 setmiterlimit newpath -36.2043 -33.23795 moveto -46.49374 -32.45242 lineto -50.94089 -42.40157 lineto -36.13957 -48.74173 lineto closepath stroke 0.00002 0.00018 0.00008 setrgbcolor newpath -41.21217 -20.77356 moveto -37.34367 -11.75774 lineto -45.93695 -2.52475 lineto -53.85999 -12.70966 lineto closepath fill 0 setgray newpath -41.21217 -20.77356 moveto -37.34367 -11.75774 lineto -45.93695 -2.52475 lineto -53.85999 -12.70966 lineto closepath stroke 0.00002 0.00018 0.00008 setrgbcolor newpath -9.2344 -28.34296 moveto -0.03065 -31.77254 lineto 2.0046 -21.64258 lineto -9.1286 -19.69002 lineto closepath fill 0 setgray newpath -9.2344 -28.34296 moveto -0.03065 -31.77254 lineto 2.0046 -21.64258 lineto -9.1286 -19.69002 lineto closepath stroke 0.00002 0.00018 0.00008 setrgbcolor newpath -3.40125 -19.94446 moveto -6.92896 -31.037 lineto 5.45816 -32.25905 lineto 10.99 -22.57074 lineto closepath fill 0 setgray newpath -3.40125 -19.94446 moveto -6.92896 -31.037 lineto 5.45816 -32.25905 lineto 10.99 -22.57074 lineto closepath stroke grestore 0 setgray 0 0.6 dtransform truncate idtransform setlinewidth pop [] 0 setdash 1 setlinecap 1 setlinejoin 10 setmiterlimit newpath -35.94 206.88 moveto -19.72 212.15 23.09 216.44 40.2 209.03 curveto stroke newpath -35.25 167.61 moveto -17.04 172.11 23.4 174.8 38.11 170.54 curveto stroke newpath -36.21 137.07 moveto -18.73 133.23 30.04 135.18 37.55 138.41 curveto stroke newpath -39.9 100.15 moveto -23.22 97.1 27.56 95.5 35.48 97.54 curveto stroke newpath -39.24 64.46 moveto -18.6 62.23 23.05 62.54 36.13 63.44 curveto stroke newpath -42.16 30.33 moveto -11.2 27.78 30.84 28.49 35.99 29.72 curveto stroke newpath -39.12 -4.56 moveto -22.85 -5.23 29.49 -4.04 37.41 -2 curveto stroke newpath -35.27 -41.41 moveto -15.83 -42.46 30.16 -40.53 39.66 -37.68 curveto stroke newpath -32.24 -76.3 moveto -15.96 -78.16 35.18 -75.4 41.91 -73.36 curveto stroke newpath -33.15 -113.59 moveto -6.56 -115.77 30.32 -114.7 40.22 -112.64 curveto stroke newpath -35.27 -148.11 moveto -18.21 -149.57 28.6 -149.62 38.11 -148.36 curveto stroke newpath -36.61 -181.04 moveto -23.52 -182.13 31.21 -181.33 39.14 -179.68 curveto stroke newpath -36.75 -216.34 moveto -19.29 -217.01 29.9 -217.83 40.2 -215.77 curveto stroke showpage %%EOF therion/samples/areas/thTMPDIR/data.20000644000076400010400000000105511145241274020355 0ustar userAdministrators%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: -37 -227 38 224 %%Creator: MetaPost %%CreationDate: 2009.02.13:1551 %%Pages: 1 %%EndProlog %%Page: 1 1 0 0.42001 dtransform truncate idtransform setlinewidth pop [] 0 setdash 1 setlinecap 1 setlinejoin 10 setmiterlimit newpath 36.29 -223.73 moveto 25.24 -177.41 46.29 -75.31 32.89 -33.77 curveto 19.49 7.78 38.59 158.65 31.77 222.85 curveto stroke newpath -34.84 219.58 moveto -23.71 163.34 -46.29 21.7 -30.56 -35.43 curveto -19.55 -75.41 -35.33 -193.72 -28.35 -225.8 curveto stroke showpage %%EOF therion/samples/areas/thTMPDIR/data.2bg0000644000076400010400000000065211145241274020670 0ustar userAdministrators%!PS %%BoundingBox: -36 -226 38 223 %%Page: 1 1 newpath 36.29 -223.73 moveto 25.24 -177.41 46.29 -75.31 32.89 -33.77 curveto 19.49 7.78 38.59 158.65 31.77 222.85 curveto 9.56667 221.76001 -12.63666 220.67 -34.84 219.58 curveto -23.71 163.34 -46.29 21.7 -30.56 -35.43 curveto -19.55 -75.41 -35.33 -193.72 -28.35 -225.8 curveto -6.80334 -225.11 14.74333 -224.42 36.29 -223.73 curveto closepath fill showpage %%EOF therion/samples/areas/thTMPDIR/data.2clip0000644000076400010400000000044411145241274021226 0ustar userAdministrators36.29 -223.73 m 25.24 -177.41 46.29 -75.31 32.89 -33.77 c 19.49 7.78 38.59 158.65 31.77 222.85 c 9.56667 221.76001 -12.63666 220.67 -34.84 219.58 c -23.71 163.34 -46.29 21.7 -30.56 -35.43 c -19.55 -75.41 -35.33 -193.72 -28.35 -225.8 c -6.80334 -225.11 14.74333 -224.42 36.29 -223.73 c therion/samples/areas/thTMPDIR/data.30000644000076400010400000000105111145241274020352 0ustar userAdministrators%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: -37 -227 39 224 %%Creator: MetaPost %%CreationDate: 2009.02.13:1551 %%Pages: 1 %%EndProlog %%Page: 1 1 0 1.2 dtransform truncate idtransform setlinewidth pop [] 0 setdash 1 setlinecap 1 setlinejoin 10 setmiterlimit newpath -28.35 -225.8 moveto -35.33 -193.72 -19.55 -75.41 -30.56 -35.43 curveto -46.29 21.7 -23.71 163.34 -34.84 219.58 curveto stroke newpath 36.29 -223.73 moveto 25.24 -177.41 46.29 -75.31 32.89 -33.77 curveto 19.49 7.78 38.59 158.65 31.77 222.85 curveto stroke showpage %%EOF therion/samples/areas/thTMPDIR/data.3d0000644000076400010400000000021611145241274020520 0ustar userAdministratorsSurvex 3D Image File v3 data Fri,2009.02.13 15:51:55 Central Europe Standard Time €¸ B2¸ B1therion/samples/areas/thTMPDIR/data.40000644000076400010400000000334511145241276020365 0ustar userAdministrators%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: -56 -204 100 250 %%Creator: MetaPost %%CreationDate: 2009.02.13:1551 %%Pages: 1 %%DocumentFonts: cmss10 /cmss10 /cmss10 def /fshow {exch findfont exch scalefont setfont show}bind def %%EndProlog %%Page: 1 1 -55.83575 235.37442 moveto (Therion) cmss10 19.9253 fshow 15.34195 235.37442 moveto (a) cmss10 19.9253 fshow 24.36374 235.37442 moveto (rea) cmss10 19.9253 fshow 56.24425 235.37442 moveto (t) cmss10 19.9253 fshow 62.88594 235.37442 moveto (yp) cmss10 19.9253 fshow 82.92204 235.37442 moveto (es) cmss10 19.9253 fshow 43.37 -60.14926 moveto (b) cmss10 9.96265 fshow 48.7941 -60.14926 moveto (edro) cmss10 9.96265 fshow 67.0313 -60.14926 moveto (ck) cmss10 9.96265 fshow 40.89 -99.03926 moveto (\015o) cmss10 9.96265 fshow 50.9357 -99.03926 moveto (wstone) cmss10 9.96265 fshow 38.4 -137.13925 moveto (mo) cmss10 9.96265 fshow 51.57289 -137.13925 moveto (onmilk) cmss10 9.96265 fshow 37.05 -168.80415 moveto (ice) cmss10 9.96265 fshow 37.71 -203.3239 moveto (sno) cmss10 9.96265 fshow 51.38101 -203.3239 moveto (w) cmss10 9.96265 fshow 39.55 186.7435 moveto (w) cmss10 9.96265 fshow 46.0811 186.7435 moveto (ater) cmss10 9.96265 fshow 39.03 152.2447 moveto (sump) cmss10 9.96265 fshow 36.92 114.49934 moveto (cla) cmss10 9.96265 fshow 48.2387 114.49934 moveto (y) cmss10 9.96265 fshow 35.61 76.63074 moveto (sand) cmss10 9.96265 fshow 34.29 41.49934 moveto (p) cmss10 9.96265 fshow 39.7141 41.49934 moveto (ebbles) cmss10 9.96265 fshow 34.14 8.00075 moveto (deb) cmss10 9.96265 fshow 48.5858 8.00075 moveto (ris) cmss10 9.96265 fshow 37.95 -24.88925 moveto (blo) cmss10 9.96265 fshow 50.7354 -24.88925 moveto (cks) cmss10 9.96265 fshow showpage %%EOF therion/samples/areas/thTMPDIR/data.40010000644000076400010400000000052211145241274020576 0ustar userAdministrators%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: -1 -1 1 11 %%Creator: MetaPost %%CreationDate: 2009.02.13:1551 %%Pages: 1 %%EndProlog %%Page: 1 1 newpath -0.12003 -0.12003 moveto 0.12003 -0.12003 lineto 0.12003 0.12003 lineto 0.12003 10.12003 lineto -0.12003 10.12003 lineto -0.12003 9.87997 lineto closepath fill showpage %%EOF therion/samples/areas/thTMPDIR/data.40020000644000076400010400000000077511145241274020611 0ustar userAdministrators%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: -1 -1 4 4 %%Creator: MetaPost %%CreationDate: 2009.02.13:1551 %%Pages: 1 %%EndProlog %%Page: 1 1 newpath -0.12003 -0.12003 moveto 0.12003 -0.12003 lineto 0.12003 0.12003 lineto 0.12003 3.12003 lineto -0.12003 3.12003 lineto -0.12003 2.87997 lineto closepath fill newpath -0.12003 0.12003 moveto -0.12003 -0.12003 lineto 0.12003 -0.12003 lineto 3.12003 -0.12003 lineto 3.12003 0.12003 lineto 2.87997 0.12003 lineto closepath fill showpage %%EOF therion/samples/areas/thTMPDIR/data.40030000644000076400010400000000073211145241274020603 0ustar userAdministrators%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 2 0 10 9 %%Creator: MetaPost %%CreationDate: 2009.02.13:1551 %%Pages: 1 %%EndProlog %%Page: 1 1 0 0.6 dtransform truncate idtransform setlinewidth pop [] 0 setdash 1 setlinecap 1 setlinejoin 10 setmiterlimit newpath 2.39996 3.60004 moveto 0 0 rlineto stroke newpath 4.20007 8.39996 moveto 0 0 rlineto stroke newpath 7.20007 6 moveto 0 0 rlineto stroke newpath 9.60004 1.20007 moveto 0 0 rlineto stroke showpage %%EOF therion/samples/areas/thTMPDIR/data.40040000644000076400010400000000073111145241274020603 0ustar userAdministrators%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 2 20 20 %%Creator: MetaPost %%CreationDate: 2009.02.13:1551 %%Pages: 1 %%EndProlog %%Page: 1 1 0 0.6 dtransform truncate idtransform setlinewidth pop [] 0 setdash 1 setlinecap 1 setlinejoin 10 setmiterlimit newpath 1.02115 4.75702 moveto 3.77878 2.44305 lineto stroke newpath 10.18431 16.30861 moveto 11.41554 19.69139 lineto stroke newpath 16.30861 8.98442 moveto 19.69139 10.21565 lineto stroke showpage %%EOF therion/samples/areas/thTMPDIR/data.40050000644000076400010400000000117311145241274020605 0ustar userAdministrators%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: -7 -3 13 4 %%Creator: MetaPost %%CreationDate: 2009.02.13:1551 %%Pages: 1 %%EndProlog %%Page: 1 1 0 0.6 dtransform truncate idtransform setlinewidth pop [] 0 setdash 1 setlinecap 1 setlinejoin 10 setmiterlimit newpath -6 0 moveto -6 -2.66724 -1.99915 -2.66724 -1.99915 0 curveto -1.99915 -2.66553 1.99915 -2.66553 1.99915 0 curveto 1.99915 -2.66724 6 -2.66724 6 0 curveto stroke newpath 0 3.60004 moveto 0 0.9328 4.00085 0.9328 4.00085 3.60004 curveto 4.00085 0.93451 7.99915 0.93451 7.99915 3.60004 curveto 7.99915 0.9328 12 0.9328 12 3.60004 curveto stroke showpage %%EOF therion/samples/areas/thTMPDIR/data.40060000644000076400010400000000070411145241274020605 0ustar userAdministrators%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: -5 -3 9 6 %%Creator: MetaPost %%CreationDate: 2009.02.13:1551 %%Pages: 1 %%EndProlog %%Page: 1 1 0 0.6 dtransform truncate idtransform setlinewidth pop [] 0 setdash 1 setlinecap 1 setlinejoin 10 setmiterlimit newpath -4.20007 0 moveto -2.33337 -3.23323 2.33337 -3.23323 4.20007 0 curveto stroke newpath 0 4.79993 moveto 1.8667 1.5667 6.53345 1.5667 8.40015 4.79993 curveto stroke showpage %%EOF therion/samples/areas/thTMPDIR/data.40070000644000076400010400000000023611145241274020606 0ustar userAdministrators%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 0 0 %%Creator: MetaPost %%CreationDate: 2009.02.13:1551 %%Pages: 1 %%EndProlog %%Page: 1 1 showpage %%EOF therion/samples/areas/thTMPDIR/data.4bbox0000644000076400010400000001402011145241276021230 0ustar userAdministrators-54.63576 230.70001 m -55.74033 230.70001 -56.63576 231.59544 -56.63576 232.70001 c -56.63576 237.80382 -56.63576 242.90762 -56.63576 248.01143 c -56.63576 249.116 -55.74033 250.01143 -54.63576 250.01143 c -3.68526 250.01143 47.26524 250.01143 98.21574 250.01143 c 99.32031 250.01143 100.21574 249.116 100.21574 248.01143 c 100.21574 242.90762 100.21574 237.80382 100.21574 232.70001 c 100.21574 231.59544 99.32031 230.70001 98.21574 230.70001 c 47.26524 230.70001 -3.68526 230.70001 -54.63576 230.70001 c 44.56999 -60.94926 m 43.46542 -60.94926 42.56999 -60.05383 42.56999 -58.94926 c 42.56999 -57.4431 42.56999 -55.93692 42.56999 -54.43076 c 42.56999 -53.32619 43.46542 -52.43076 44.56999 -52.43076 c 54.75659 -52.43076 64.94319 -52.43076 75.12979 -52.43076 c 76.23436 -52.43076 77.12979 -53.32619 77.12979 -54.43076 c 77.12979 -55.93692 77.12979 -57.4431 77.12979 -58.94926 c 77.12979 -60.05383 76.23436 -60.94926 75.12979 -60.94926 c 64.94319 -60.94926 54.75659 -60.94926 44.56999 -60.94926 c 42.09 -99.83926 m 40.98543 -99.83926 40.09 -98.94383 40.09 -97.83926 c 40.09 -96.3331 40.09 -94.82692 40.09 -93.32076 c 40.09 -92.21619 40.98543 -91.32076 42.09 -91.32076 c 54.23224 -91.32076 66.37447 -91.32076 78.51671 -91.32076 c 79.62128 -91.32076 80.51671 -92.21619 80.51671 -93.32076 c 80.51671 -94.82692 80.51671 -96.3331 80.51671 -97.83926 c 80.51671 -98.94383 79.62128 -99.83926 78.51671 -99.83926 c 66.37447 -99.83926 54.23224 -99.83926 42.09 -99.83926 c 39.59999 -137.93925 m 38.49542 -137.93925 37.59999 -137.04382 37.59999 -135.93925 c 37.59999 -134.43309 37.59999 -132.92691 37.59999 -131.42075 c 37.59999 -130.31618 38.49542 -129.42075 39.59999 -129.42075 c 52.41562 -129.42075 65.23126 -129.42075 78.04689 -129.42075 c 79.15146 -129.42075 80.04689 -130.31618 80.04689 -131.42075 c 80.04689 -132.92691 80.04689 -134.43309 80.04689 -135.93925 c 80.04689 -137.04382 79.15146 -137.93925 78.04689 -137.93925 c 65.23126 -137.93925 52.41562 -137.93925 39.59999 -137.93925 c 38.25 -169.60416 m 37.14543 -169.60416 36.25 -168.70872 36.25 -167.60416 c 36.25 -166.14806 36.25 -164.69196 36.25 -163.23586 c 36.25 -162.13129 37.14543 -161.23586 38.25 -161.23586 c 41.1952 -161.23586 44.1404 -161.23586 47.0856 -161.23586 c 48.19017 -161.23586 49.0856 -162.13129 49.0856 -163.23586 c 49.0856 -164.69196 49.0856 -166.14806 49.0856 -167.60416 c 49.0856 -168.70872 48.19017 -169.60416 47.0856 -169.60416 c 44.1404 -169.60416 41.1952 -169.60416 38.25 -169.60416 c 38.91 -204.1239 m 37.80544 -204.1239 36.91 -203.22847 36.91 -202.1239 c 36.91 -201.44797 36.91 -200.77203 36.91 -200.0961 c 36.91 -198.99153 37.80544 -198.0961 38.91 -198.0961 c 44.93628 -198.0961 50.96254 -198.0961 56.98882 -198.0961 c 58.09338 -198.0961 58.98882 -198.99153 58.98882 -200.0961 c 58.98882 -200.77203 58.98882 -201.44797 58.98882 -202.1239 c 58.98882 -203.22847 58.09338 -204.1239 56.98882 -204.1239 c 50.96254 -204.1239 44.93628 -204.1239 38.91 -204.1239 c 40.75 185.9435 m 39.64543 185.9435 38.75 186.83893 38.75 187.9435 c 38.75 189.04117 38.75 190.13882 38.75 191.2365 c 38.75 192.34106 39.64543 193.2365 40.75 193.2365 c 47.5327 193.2365 54.3154 193.2365 61.0981 193.2365 c 62.20267 193.2365 63.0981 192.34106 63.0981 191.2365 c 63.0981 190.13882 63.0981 189.04117 63.0981 187.9435 c 63.0981 186.83893 62.20267 185.9435 61.0981 185.9435 c 54.3154 185.9435 47.5327 185.9435 40.75 185.9435 c 40.23 149.5075 m 39.12543 149.5075 38.23 150.40294 38.23 151.5075 c 38.23 152.82918 38.23 154.15083 38.23 155.4725 c 38.23 156.57707 39.12543 157.4725 40.23 157.4725 c 46.77283 157.4725 53.31567 157.4725 59.8585 157.4725 c 60.96307 157.4725 61.8585 156.57707 61.8585 155.4725 c 61.8585 154.15083 61.8585 152.82918 61.8585 151.5075 c 61.8585 150.40294 60.96307 149.5075 59.8585 149.5075 c 53.31567 149.5075 46.77283 149.5075 40.23 149.5075 c 38.12 111.76215 m 37.01543 111.76215 36.12 112.65758 36.12 113.76215 c 36.12 115.91405 36.12 118.06595 36.12 120.21785 c 36.12 121.32242 37.01543 122.21785 38.12 122.21785 c 42.62419 122.21785 47.1284 122.21785 51.6326 122.21785 c 52.73717 122.21785 53.6326 121.32242 53.6326 120.21785 c 53.6326 118.06595 53.6326 115.91405 53.6326 113.76215 c 53.6326 112.65758 52.73717 111.76215 51.6326 111.76215 c 47.1284 111.76215 42.62419 111.76215 38.12 111.76215 c 36.81 75.83073 m 35.70543 75.83073 34.81 76.72617 34.81 77.83073 c 34.81 79.3369 34.81 80.84308 34.81 82.34924 c 34.81 83.45381 35.70543 84.34924 36.81 84.34924 c 42.31047 84.34924 47.81093 84.34924 53.3114 84.34924 c 54.41597 84.34924 55.3114 83.45381 55.3114 82.34924 c 55.3114 80.84308 55.3114 79.3369 55.3114 77.83073 c 55.3114 76.72617 54.41597 75.83073 53.3114 75.83073 c 47.81093 75.83073 42.31047 75.83073 36.81 75.83073 c 35.48999 38.76215 m 34.38542 38.76215 33.48999 39.65758 33.48999 40.76215 c 33.48999 42.91405 33.48999 45.06595 33.48999 47.21785 c 33.48999 48.32242 34.38542 49.21785 35.48999 49.21785 c 44.94783 49.21785 54.40565 49.21785 63.8635 49.21785 c 64.96806 49.21785 65.8635 48.32242 65.8635 47.21785 c 65.8635 45.06595 65.8635 42.91405 65.8635 40.76215 c 65.8635 39.65758 64.96806 38.76215 63.8635 38.76215 c 54.40565 38.76215 44.94783 38.76215 35.48999 38.76215 c 35.34 7.20074 m 34.23543 7.20074 33.34 8.09618 33.34 9.20074 c 33.34 10.70691 33.34 12.21309 33.34 13.71925 c 33.34 14.82382 34.23543 15.71925 35.34 15.71925 c 42.55623 15.71925 49.77248 15.71925 56.98871 15.71925 c 58.09328 15.71925 58.98871 14.82382 58.98871 13.71925 c 58.98871 12.21309 58.98871 10.70691 58.98871 9.20074 c 58.98871 8.09618 58.09328 7.20074 56.98871 7.20074 c 49.77248 7.20074 42.55623 7.20074 35.34 7.20074 c 39.15 -25.68925 m 38.04543 -25.68925 37.15 -24.79382 37.15 -23.68925 c 37.15 -22.18309 37.15 -20.67691 37.15 -19.17075 c 37.15 -18.06618 38.04543 -17.17075 39.15 -17.17075 c 46.9843 -17.17075 54.81859 -17.17075 62.6529 -17.17075 c 63.75746 -17.17075 64.6529 -18.06618 64.6529 -19.17075 c 64.6529 -20.67691 64.6529 -22.18309 64.6529 -23.68925 c 64.6529 -24.79382 63.75746 -25.68925 62.6529 -25.68925 c 54.81859 -25.68925 46.9843 -25.68925 39.15 -25.68925 c therion/samples/areas/thTMPDIR/data.50000644000076400010400000000073411145241276020365 0ustar userAdministrators%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: -11 -21 11 31 %%Creator: MetaPost %%CreationDate: 2009.02.13:1551 %%Pages: 1 %%EndProlog %%Page: 1 1 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash 1 setlinejoin 10 setmiterlimit newpath -9.92122 -19.84242 moveto 0 29.76364 lineto 9.92122 -19.84242 lineto 0 -9.92122 lineto closepath stroke newpath -9.92122 -19.84242 moveto 0 29.76364 lineto 0 -9.92122 lineto closepath fill showpage %%EOF therion/samples/areas/thTMPDIR/data.60000644000076400010400000000130111145241276020355 0ustar userAdministrators%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: -72 -1 72 9 %%Creator: MetaPost %%CreationDate: 2009.02.13:1551 %%Pages: 1 %%DocumentFonts: cmss10 /cmss10 /cmss10 def /fshow {exch findfont exch scalefont setfont show}bind def %%EndProlog %%Page: 1 1 0 0.6 dtransform truncate idtransform setlinewidth pop [] 0 setdash 1 setlinecap 1 setlinejoin 10 setmiterlimit newpath -70.86613 0 moveto 70.86613 0 lineto stroke 0.6 0 dtransform exch truncate exch idtransform pop setlinewidth newpath -70.86613 0 moveto -70.86613 2 lineto stroke newpath 70.86613 0 moveto 70.86613 2 lineto stroke -9.76895 2 moveto (10) cmss10 9.96265 fshow 1.85425 2 moveto (m) cmss10 9.96265 fshow showpage %%EOF therion/samples/areas/thTMPDIR/data.err0000644000076400010400000000000011145241274020771 0ustar userAdministratorstherion/samples/areas/thTMPDIR/data.mp0000644000076400010400000033573011145241274020642 0ustar userAdministratorsScale:=2.00; color HelpSymbolColor; HelpSymbolColor := (0.8, 0.8, 0.8); background:=(1.00000,1.00000,1.00000); verbatimtex \input th_enc.tex etex; %% therion source code %% %% therion.mp %% %% This file defines low-level MetaPost macros and variables required %% for generation of map symbols %% %% $Date: 2003/07/01 09:06:44 $ %% $RCSfile: therion.mp,v $ %% $Revision: 1.3 $ %% %% Copyright (C) 2000-2003 Martin Budaj %% %% Some macros are adapted from MPATTERN package of P. Bolek %% %% Some macros are used from MetaFun package of H. Hagen %% %% -------------------------------------------------------------------- %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 2 of the License, or %% any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; if not, write to the Free Software %% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA %% -------------------------------------------------------------------- % This file defines low level macros used for map signatures in Therion. % Before loading this file set `Scale' variable to numeric value % representing denominator of the scale ratio. Internal variable % `prologues' is set to 1 by this file. This module loads also % symbol libraries. tracingstats:=1; prologues:=1; if known Background: background:=Background fi; %TrueScale:=Scale; % @VARIABLE % symbol_scale -- % % internal numeric; in map symbol definitions used for scaling % in T transformation; recommended % values are 1 or 2. %newinternal symbol_scale; %symbol_scale := 1; % @VARIABLE % fill_only -- % % boolean, used in thdraw and % thpattfill commands. When set to false, it has % no effect, when it is true, it supresses all drawing % commands with exception of thpermanentfill, so that only filled % areas are drawn boolean fill_only, horiz_labels, transparency; fill_only := false; horiz_labels:=true; transparency:=false; string ATTR__id, ATTR__survey, ATTR__scrap; boolean ATTR__scrap_centerline; picture ATTR__text; ATTR__scrap_centerline := false; color label_fill_color, label_fill_color_tmp; label_fill_color := (1.0, 1.0, 1.0); def push_label_fill_color(expr r,g,b) = label_fill_color_tmp := label_fill_color; label_fill_color := (r,g,b); enddef; def pop_label_fill_color = label_fill_color := label_fill_color_tmp; enddef; def process_filledlabel(expr cent, rot) = begingroup bboxmargin:=2.0bp; q:=((bbox lab) smoothed 2) rotatedaround (cent, rot); fill q withcolor label_fill_color; draw lab rotatedaround (cent, rot); write_circ_bbox(q); % without corners smoothing it was enough to use % write_bbox(q); endgroup; enddef; numeric area_border_errors; area_border_errors = 0; % @VARIABLE % last_write -- % % numeric; charcode of last figure which contained % write_bbox macro; this value is used by % close_file macro. Initially set to -1. numeric last_write; last_write = -1; % @VARIABLE % strut_string -- % % string containing combination of the "highest" and "lowest" character % in used font; it's used by free_text macro. %string strut_string; %strut_string = "(È"; % @VARIABLE % file_name -- % % string, name of file, where write_bbox macro writes % text clipping path % @VARIABLE % s ch -- % % string, temporary string/char variables string s, ch, file_name, bg_name, clip_name, lang, diff_pos, diff_neg, current_scrap, current_src; % @VARIABLE % u v w -- % % internal numeric variables used as basic length units for drawing; % they are set by initialize macro. %
  • u -- normal unit decreasing with increasing scale %
  • v -- like u, but can increase drammaticaly % when some limit is encountered (to get effects like logarithmic % scale) %
  • w -- nearly constant at all scales %
% @VARIABLE % legend_scale -- % % numeric, length of the longer side of signatures' legend box newinternal legend_scale, u,v,w; % @VARIABLE % lab Lab -- % % picture, in which are saved typeset labels picture lab, Lab; % @VARIABLE % T -- % % transformation, defines transformation function for transforming % every argument of thfill % macros transform T; % @VARIABLE % p,q -- % % path, for saving temporary paths path p,q; % @MACRO % initialize -- % % initializes basic length units (u,v,w) and pens used % in map symbols according to scale. Five circular pens are defined: %
  • PenA -- thick; for outlines %
  • PenB, PenC -- thinner; for pits, symbols etc. %
  • PenD -- thinnest; for fine details %
  • PenX -- extra thick; not recommended for use %
def fonts_setup (expr t,s,m,l,h) = write "\def\updown#1#2{\vbox{" & "\offinterlineskip" & "\setbox100=\hbox{#1}" & "\setbox101=\hbox{#2}" & "\ifnum\wd100>\wd101\hsize=\wd100\else\hsize=\wd101\fi" & "\centerline{\box100}\vskip4pt" & "\centerline{\box101}}}" & "\def\thlabel{\thnormalsize}" & "\def\thremark{\thsmallsize\si}" & "\def\thcomment{\thsmallsize}" & "\def\thentrance{\thsmallsize}" & "\def\thaltitude{\thsmallsize}" & "\def\thstationname{\thsmallsize}" & "\def\thdate{\thsmallsize}" & "\def\thheight{\thsmallsize}" & "\def\thheightpos{+\ignorespaces}" & "\def\thheightneg{-\ignorespaces}" & "\def\thframed{\thsmallsize}" & "\def\thwallaltitude{\thtinysize}" to "mptexpre.tex"; write "\def\thtinysize{\size[" & decimal max(optical_zoom*t,0) & "]}" & "\def\thsmallsize{\size[" & decimal max(optical_zoom*s,0) & "]}" & "\def\thnormalsize{\size[" & decimal max(optical_zoom*m,0) & "]}" & "\def\thlargesize{\size[" & decimal max(optical_zoom*l,0) & "]}" & "\def\thhugesize{\size[" & decimal max(optical_zoom*h,0) & "]}" to "mptexpre.tex"; write EOF to "mptexpre.tex"; enddef; def initialize (expr sc) = if unknown BaseScale: BaseScale = sc; fi; optical_zoom := BaseScale/sc; if BaseScale <= 1: % 1:100 u:=14bp; v:=14bp; w:=12bp; fonts_setup(8,10,12,16,24); elseif BaseScale <= 2: % 1:200 u:=12bp; v:=12bp; w:=12bp; fonts_setup(7,8,10,14,20); elseif BaseScale <= 5: % 1:500 u:=10bp; v:=10bp; w:=12bp; fonts_setup(6,7,8,10,14); else: u:=7bp; v:=14bp; w:=10bp; fonts_setup(5,6,7,8,10); fi; u := optical_zoom * u; v := optical_zoom * v; w := optical_zoom * w; defaultscale := 0.8 * optical_zoom; def PenA = pencircle scaled (u/10) enddef; def PenB = pencircle scaled (0.7*u/10) enddef; def PenC = pencircle scaled (0.5*u/10) enddef; def PenD = pencircle scaled (0.35*u/10) enddef; def PenX = pencircle scaled (1.2*u/10) enddef; legend_scale := 3.14*u; enddef; % macro is expanded, we have to know all dimensions and pens before reading % mpattern macros initialize(Scale); vardef thTEX primary s = write "verbatimtex \input th_enc.tex etex" to "mptextmp.mp"; write "btex \mainfont "&s&" etex" to "mptextmp.mp"; write EOF to "mptextmp.mp"; scantokens "input mptextmp" enddef; % @MACRO % inscale -- % % zooms objects to scale specified in legend_scale variable (used in legend % typesetting) def inscale = xscaled legend_scale yscaled (0.618*legend_scale) enddef; % @MACRO % draw_legend_box -- % % draws a legend bounding box and resets drawoptions() options def draw_legend_box = clip currentpicture to unitsquare inscale; drawoptions(); pickup PenB; draw unitsquare inscale; enddef; def clean_legend_box = unfill unitsquare inscale; enddef; def legend_point (expr name) = % if substring (2,9) of name = "station": % scantokens(name)((0.5,0.5) inscale); % else: scantokens(name)((0.5,0.5) inscale,0,1,(0,0)); % fi; draw_legend_box; enddef; def legend_line (expr name) = scantokens(name)((((-0.3,.5)..(.3,.7)..(.5,.3)..{dir 80}(1.3,.9)) inscale) randomized 3mm); draw_legend_box; enddef; % legend_label % legend_area % legend_random % @MACRO % roundone -- % % rounds numeric value to one decimal point vardef roundone(expr n) = % round(10*n)/10 n enddef; % @MACRO % process_label -- % % draws a label saved in lab picture variable and calls % write_bbox macro. def process_label (expr cent, rot) = begingroup interim bboxmargin:=0.8bp; q:=((bbox lab) smoothed 2) rotatedaround (cent, rot); draw lab rotatedaround (cent, rot); write_circ_bbox(q); % without corners smoothing it was enough to use % write_bbox(q); endgroup; enddef; % @MACRO % process_uplabel -- % % draws a label into semicircular box and writes clipping path to a file def process_uplabel = q:=bbox lab; alef:=.8-.02*(xpart lrcorner q - xpart llcorner q); % show alef; q:=alef[llcorner q,ulcorner q]{up} .. {down}alef[lrcorner q, urcorner q] -- lrcorner q -- llcorner q -- cycle; draw lab; draw q; q:=reverse q; write_circ_bbox(q); enddef; % @MACRO % process_downlabel -- % % draws a label into down oriented semicircular box and writes % clipping path to a file def process_downlabel = q:=bbox lab; alef:=1-(.8-.02*(xpart lrcorner q - xpart llcorner q)); q:=alef[llcorner q,ulcorner q]{down} .. {up}alef[lrcorner q, urcorner q] -- urcorner q -- ulcorner q -- cycle; draw lab; draw q; write_circ_bbox(q); enddef; % @MACRO % process_updownlabel -- % % draws a label splitted into down and up oriented semicircular boxes and % writes clipping path to a file def process_updownlabel = p:=bbox lab; leftside:=xpart llcorner p; rightside:=xpart lrcorner p; draw (xpart llcorner p,.5[ypart llcorner p,ypart ulcorner p]) -- (xpart lrcorner p,.5[ypart llcorner p,ypart ulcorner p]); alef:=1.05-.02*(xpart lrcorner p - xpart llcorner p); % alef:=.8-.02*(rightside-leftside); p:=alef[(leftside, ypart llcorner p),(leftside, ypart ulcorner p)]{up} .. {down}alef[(rightside, ypart lrcorner p), (rightside, ypart urcorner p)] -- alef[(rightside, ypart urcorner p), (rightside, ypart lrcorner p)]{down} .. {up}alef[(leftside, ypart ulcorner p),(leftside, ypart llcorner p)] -- cycle; % p:=alef[llcorner p,ulcorner p]{up} .. {down}alef[lrcorner p, urcorner p] -- % aleff[llcorner p,ulcorner p]{down} .. % {up}aleff[lrcorner p, urcorner p] -- cycle; draw lab; draw p; p:=reverse p; write_circ_bbox(p); enddef; def process_updownlabel_OLD = p:=bbox lab; q:=bbox Lab; leftside:=min(xpart llcorner p, xpart ulcorner q); rightside:=max(xpart lrcorner p, xpart urcorner q); draw .5[(leftside, ypart llcorner p),(leftside, ypart ulcorner q)] -- .5[(rightside,ypart lrcorner p),(rightside,ypart urcorner q)]; alef:=.8-.02*(rightside-leftside); q:=alef[(leftside, ypart llcorner p),(leftside, ypart ulcorner p)]{up} .. {down}alef[(rightside, ypart lrcorner p), (rightside, ypart urcorner p)] -- alef[(rightside, ypart urcorner q), (rightside, ypart lrcorner q)]{down} .. {up}alef[(leftside, ypart ulcorner q),(leftside, ypart llcorner q)] -- cycle; draw lab; draw Lab; draw q; q:=reverse q; write_circ_bbox(q); enddef; % @MACRO % process_boxedlabel -- % % draws a label into circular box and writes % clipping path to a file def process_boxedlabel = q:=bbox lab; draw lab; draw q; write_bbox(q); enddef; % @MACRO % process_circledlabel -- % % draws a label into circular box and writes % clipping path to a file def process_circledlabel = begingroup; interim bboxmargin := 0.4 bp; q:=bbox lab; endgroup; q:=point 0 of q .. point 1 of q .. point 2 of q .. point 3 of q .. cycle; draw lab; draw q; write_circ_bbox(q); enddef; % @MACRO % write_bbox -- % % Arguments: % path variable -- rectangular bounding box of a label; % assumptions: path is cyclic, counterclockwise oriented, with four points, % composed from linear segments; % see general write_circ_bbox macro % Results: % one file per figure which uses labels with a clipping path in pseudo-pdf % format def write_bbox (expr q) = file_name := jobname & "." & decimal(charcode) & "bbox"; for i:=4 downto 0: s := decimal(roundone(xpart point i of q)) & " " & decimal(roundone(ypart point i of q)) & if i=4: " m " else: " l" fi; write s to file_name; endfor; last_write := charcode; enddef; % @MACRO % write_circ_bbox -- % % Arguments: % path variable, only assumption is that path is cyclic % and counterclockwise oriented. % Results: % one file per figure which uses labels with a clipping path in pseudo-pdf % format def write_circ_bbox expr q = file_name := jobname & "." & decimal(charcode) & "bbox"; tmp:=length q; s := decimal(roundone(xpart point tmp of q)) & " " & decimal(roundone(ypart point tmp of q)) & " m"; write s to file_name; for i:=tmp downto 1: s := decimal(roundone(xpart precontrol i of q)) & " " & decimal(roundone(ypart precontrol i of q)) & " " & decimal(roundone(xpart postcontrol i-1 of q)) & " " & decimal(roundone(ypart postcontrol i-1 of q)) & " " & decimal(roundone(xpart point i-1 of q)) & " " & decimal(roundone(ypart point i-1 of q)) & " c"; write s to file_name; endfor; last_write := charcode; enddef; % @MACRO % close_file -- % % closes file with a clipping path; it's invoked by endchar macro def close_file = if last_write=charcode: write EOF to jobname & "." & decimal(charcode) & "bbox"; fi; enddef; % endchar should run close_file macro extra_endfig := "close_file;"; % @MACRO % thdraw -- % % like plain MetaPost's draw, but draws a path transformed % (rotated, scaled, shifted) to scrap's coordinates according T variable. % (If fill_only=false) def thdrawoptions(text t) = def _thop_ = t enddef enddef; thdrawoptions(); def thdraw expr p = if not fill_only: addto currentpicture doublepath (p transformed T) withpen currentpen _thop_ _op_ else: addto currentpicture also nullpicture fi enddef; % @MACRO % thfill -- % % fills a path transformed % (rotated, scaled, shifted) to scrap's coordinates according T variable. % Filled areas are clipped (like most % other lines and points) with a clipping path around text labels. def thfill expr c = addto currentpicture contour (c transformed T) _thop_ _op_ enddef; def thfilldraw expr c = if not fill_only: addto currentpicture contour (c transformed T) withpen currentpen _thop_ _op_ else: addto currentpicture contour (c transformed T) _thop_ _op_ fi enddef; def thunfill expr c = thfill c withcolor background enddef; def thundraw expr p = thdraw p withcolor background enddef; def thunfilldraw expr c = thfilldraw c withcolor background enddef; def thclean expr c = if transparency: thfill c withtransparentcolor tr_bg else: thunfill c fi; enddef; def thPatternFill (expr Path, Pattern) = T:=identity; thclean Path; thfill Path withpattern Pattern; enddef; %def thLegendPatternFill (expr Path, Pattern) = % T:=identity; % thfill Path withpattern Pattern; %enddef; % for drawarrow: def _finarr text t = thdraw _apth t; thfilldraw arrowhead _apth t enddef; % @MACRO % thpermanentfill -- % % Fills specified area with a solid color; this area is not affected by % text clipping path %def thpermanentfill expr c = % addto currentpicture contour (c transformed T) _thop_ _op_ %enddef; let thpermanentfill = thfill; primarydef p aligned al= p shifted (xpart al * xpart U, ypart al * ypart U) enddef; % macros for drawing scraps in upper and lower levels; filled lower scraps % require special treatment (MetaPost doesn't support non-continuous paths). % We can't use one file for both, while PDF XObject has to be explicitely % filled or stroked. Second macro writes also pseudo-pdf code of a clipping % path for given scrap boolean drawnext; drawnext:=true; def draw_upscrap (expr isout)(text t) = path q; for i=t: if (numeric i): if (i=1): drawnext:=true; else: drawnext:=false; fi; else: if drawnext: draw i withpen PenD; fi; if not known q: q:=i; else: q:=q -- i; fi; fi; endfor; if not cycle q: q:=q -- cycle; fi; if turningnumber q = 0: thwarning("scrap outline intersects itself"); fi; if isout=1: if turningnumber q > 0: q := reverse q; fi; else: if turningnumber q < 0: q := reverse q; fi; fi; addto bgfill contour q; enddef; % following macro writes noncontinuous PostScript path directly to EPS file % (filled background and clipping path) picture bgfill; bgfill:=nullpicture; def draw_downscrap = bg_name := jobname & "." & decimal(charcode) & "bg"; clip_name := jobname & "." & decimal(charcode) & "clip"; write "%!PS" to bg_name; write "%%BoundingBox: " & decimal round xpart llcorner bgfill & " " & decimal round ypart llcorner bgfill & " " & decimal round xpart urcorner bgfill & " " & decimal round ypart urcorner bgfill to bg_name; write "%%Page: 1 1" to bg_name; write "newpath" to bg_name; for qq within bgfill: q := pathpart qq; tmp:=length q; s := decimal(roundone(xpart point tmp of q)) & " " & decimal(roundone(ypart point tmp of q)) & " m"; write s & "oveto" to bg_name; write s to clip_name; for i:=tmp downto 1: s := decimal(roundone(xpart precontrol i of q)) & " " & decimal(roundone(ypart precontrol i of q)) & " " & decimal(roundone(xpart postcontrol i-1 of q)) & " " & decimal(roundone(ypart postcontrol i-1 of q)) & " " & decimal(roundone(xpart point i-1 of q)) & " " & decimal(roundone(ypart point i-1 of q)) & " c"; write s & "urveto" to bg_name; write s to clip_name; endfor; endfor; write "closepath fill" to bg_name; write "showpage" to bg_name; write "%%EOF" to bg_name; write EOF to bg_name; write EOF to clip_name; bgfill:=nullpicture; enddef; vardef buildcycle(text ll) = save ta_, tb_, k_, i_, pp_; path pp_[]; k_=0; for q=ll: pp_[incr k_]=q; endfor i_=k_; for i=1 upto k_: (ta_[i], length pp_[i_]-tb_[i_]) = pp_[i] intersectiontimes reverse pp_[i_]; if ta_[i]<0: message("[Error: area borders "& area_border[i] &" and "& area_border[i_] &" don't intersect in scrap " & current_scrap & " (file " & current_src & ")]"); area_border_errors := area_border_errors + 1; fi i_ := i; endfor for i=1 upto k_: subpath (ta_[i],tb_[i]) of pp_[i] .. endfor cycle enddef; vardef unitvector primary z = if (z<>(0,0)): z/abs z else: hide(thwarning("strange path")) (0,epsilon) fi enddef; def thwarning (expr m) = message("[Warning: " & m & " in scrap " & current_scrap & "]"); enddef; def check_area_borders = if area_border_errors > 0: fi; enddef; %%%%%%%%%%%% Map symbols management %%%%%%%%%%%%%%%%%%% def mapsymbol (expr name, set, warning) = string s, stype, lname, ID; stype = substring (0,1) of name; lname = name & "_" & set; ID := "ID_" & lname; if (known scantokens ID): if stype = "a": s = "def " & name & " = scantokens(" & ditto & lname & ditto & ") enddef;"; else: s = "let " & name & " = " & lname & ";"; fi; scantokens s; elseif warning: message("[Warning: undefined symbol `" & lname & "']"); fi; enddef; %def hidesymbol (expr name) = % string s, stype; % stype = substring (0,1) of name; % if stype = "a": % s = "def " & name & " = scantokens(" & ditto & "a_empty" & ditto & ") enddef;"; % else: % s = "vardef " & name & "@# (text t) = enddef;"; % fi; % scantokens s; % write name to "missed.dat"; %enddef; def initsymbol (expr name) = s := "ID_" & name & " = 1"; scantokens s; enddef; %%% % comment out groups in order to use 'save ATTR_*' appropriately def beginfig(expr c) = % begingroup charcode:=c; clearxy; clearit; clearpen; pickup defaultpen; drawoptions(); scantokens extra_beginfig; save smartll, smartur; pair smartll[], smartur[]; smart_count := 0; enddef; def endfig = scantokens extra_endfig; shipit; % endgroup enddef; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % P. Bolek's MPATTERN package adapted and simplified for Therion % (with the same user interface except of patterncolor) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% string Pname_, PXYsteps_; string Pmatrix_; numeric Pnum_; Pnum_=0; def PmakeBB_= PBBox_ := "[" & decimal Plft_ & " " & decimal Plow_ & " " & decimal Prt_ & " " & decimal Pup_ & "]"; enddef; def Psteps_= PXYsteps_ := decimal if unknown PXStep_: (Prt_-Plft_) else: PXStep_ fi & ":" & decimal if unknown PYStep_: (Pup_-Plow_) else: PYStep_ fi; enddef; vardef Pfindbounds_= Plow_ = ypart (llcorner currentpicture); Plft_ = xpart (llcorner currentpicture); Pup_ = ypart (urcorner currentpicture); Prt_ = xpart (urcorner currentpicture); PmakeBB_; enddef; def PmakePattern_(expr name)= write decimal (Pnum_*epsilon) & ":" & jobname & "." & decimal charcode & ":" & PBBox_ & ":" & PXYsteps_ & ":" & Pmatrix_ to "patterns.dat" enddef; % User interface macros vardef patternbbox(expr a)(text b)= save Pi_, Pz_; numeric Pi_, Pz_[]; if pair a: Plft_:=min(xpart(a),xpart(b)); Plow_:=min(ypart(a),ypart(b)); Prt_:=max(xpart(a),xpart(b)); Pup_:=max(ypart(a),ypart(b)); else: Pi_=1; for t=b: Pz_[Pi_]=t; Pi_:=Pi_+1; endfor; Plft_:=min(a,Pz_2); Plow_:=min(Pz_1,Pz_3); Prt_:=max(a,Pz_2); Pup_:=max(Pz_1,Pz_3); fi; PmakeBB_; enddef; def beginpattern(suffix name)= numeric PXStep_, PYStep_; numeric Plow_, Plft_, Pup_, Prt_; string PBBox_; Pmatrix_:="[1 0 0 1 0 0]"; Pname_:=str name; Pnum_:=Pnum_+1; beginfig(Pnum_+4000); enddef; def endpattern= if unknown PBBox_: Pfindbounds_; fi; endfig; Psteps_; PmakePattern_(Pname_); scantokens(Pname_ & "=Pnum_;"); enddef; primarydef p withpattern s= if known s: p withcolor (epsilon, 10*epsilon, s*epsilon); else: p withcolor (1,0,0); message("Warning: undefined pattern ignored"); fi; enddef; def patterntransform expr t= Pmatrix_ := "[" & decimal xxpart t & " " & decimal yxpart t & " " & decimal xypart t & " " & decimal yypart t & " " & decimal xpart t & " " & decimal ypart t & "]"; enddef; def patternxstep expr t= PXStep_ = t; enddef; def patternystep expr t= PYStep_ = t; enddef; def patternstep text t= if pair t: PXStep_ = xpart t; PYStep_ = ypart t; else: (PXStep_,PYStep_)=t; fi; enddef; def patterncolor expr t= message("Warning: patterncolor not supported in Therion"); enddef; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % end of pattern macros %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % transparent rgb colors numeric RGBnum; RGBnum=0; string RGBname; def def_transparent_rgb (suffix name)(expr r, g, b) = RGBnum := RGBnum+1; RGBname := str name; write decimal (RGBnum*epsilon) & ":" & decimal r & " " & decimal g & " " & decimal b to "rgbcolors.dat"; scantokens(RGBname & ":=RGBnum;"); enddef; primarydef p withtransparentcolor s= p withcolor (epsilon, 12*epsilon, s*epsilon); enddef; def_transparent_rgb(tr_white, 1, 1, 1); def_transparent_rgb(tr_blue, 0, 0, 1); def_transparent_rgb(tr_black, 0, 0, 0); def_transparent_rgb(tr_bg, redpart background, greenpart background, bluepart background); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % some useful macros from H. Hagen's MetaFun package %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% vardef paired (expr d) = if pair d : d else : (d,d) fi enddef ; primarydef p randomshifted s = begingroup ; save ss ; pair ss ; ss := paired(s) ; p shifted (-.5xpart ss + uniformdeviate xpart ss, -.5ypart ss + uniformdeviate ypart ss) endgroup enddef ; primarydef p randomized s = (if path p : for i=0 upto length(p)-1 : ((point i of p) randomshifted s) .. controls ((postcontrol i of p) randomshifted s) and ((precontrol (i+1) of p) randomshifted s) .. endfor if cycle p : cycle else : ((point length(p) of p) randomshifted s) fi elseif pair p : p randomshifted s elseif color p : if color s : (uniformdeviate redpart s * redpart p, uniformdeviate greenpart s * greenpart p, uniformdeviate bluepart s * bluepart p) elseif pair s : ((xpart s + uniformdeviate (ypart s - xpart s)) * p) else : (uniformdeviate s * p) fi else : p + uniformdeviate s fi) enddef ; primarydef p llmoved d = ((llcorner p) shifted (-xpart paired(d),-ypart paired(d))) enddef ; primarydef p lrmoved d = ((lrcorner p) shifted (+xpart paired(d),-ypart paired(d))) enddef ; primarydef p urmoved d = ((urcorner p) shifted (+xpart paired(d),+ypart paired(d))) enddef ; primarydef p ulmoved d = ((ulcorner p) shifted (-xpart paired(d),+ypart paired(d))) enddef ; primarydef p smoothed d = (p llmoved (-xpart paired(d),0) -- p lrmoved (-xpart paired(d),0) {right} .. p lrmoved (0,-ypart paired(d)) -- p urmoved (0,-ypart paired(d)) {up} .. p urmoved (-xpart paired(d),0) -- p ulmoved (-xpart paired(d),0) {left} .. p ulmoved (0,-ypart paired(d)) -- p llmoved (0,-ypart paired(d)) {down} .. cycle) enddef ; vardef punked primary p = (point 0 of p for i=1 upto length(p)-1 : -- point i of p endfor if cycle p : -- cycle else : -- point length(p) of p fi) enddef ; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % end of MetaFun macros %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % we input map symbol definitions %%%%% INPUT thPoint %%%%% %% therion source code %% %% This file defines macros for point map symbols %% %% $Date: 2003/07/01 09:06:44 $ %% $RCSfile: thPoint.mp,v $ %% $Revision: 1.8 $ %% %% Copyright (C) 2000-2004 Martin Budaj %% %% -------------------------------------------------------------------- %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 2 of the License, or %% any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; if not, write to the Free Software %% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA %% -------------------------------------------------------------------- pair U; def p_stalactite_UIS(expr pos,theta,sc,al) = U:=(.15u, .4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (0,-.4u) -- (0,.15u) -- (-.15u,.4u); thdraw (0,.15u) -- (.15u,.4u); enddef; def p_stalagmite_UIS(expr pos,theta,sc,al) = U:=(.15u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (0,.4u) -- (0,-.15u) -- (-.15u,-.4u); thdraw (0,-.15u) -- (.15u,-.4u); enddef; def p_pillar_UIS(expr pos,theta,sc,al) = U:=(.15u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (0,.15u)--(0,-.15u); thdraw (-.15u,-.4u)--(0,-.15u)--(.15u,-.4u); thdraw (-.15u,.4u)--(0,.15u)--(.15u,.4u); enddef; def p_curtain_UIS(expr pos,theta,sc,al) = U:=(.15u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.15u,.4u)--(0,.15u)--(.15u,.4u); thdraw (0,.15u)--(0,0){dir 180}..(-.12u,-.11u)..{dir 0}(0,-.22u)--(0,-.4u); enddef; def p_helictite_UIS(expr pos,theta,sc,al) = U:=(.2u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (0,.4u)--(0,-.4u); p := (-.2u,.4u)---(-.2u,.1u){down}..{dir -10}(-.1u,0.02u)---origin; thdraw p; thdraw p reflectedabout (origin,(0,u)) reflectedabout (origin,(u,0)); enddef; def p_sodastraw_UIS(expr pos,theta,sc,al) = U:=(.5u,.25u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.5u,.2u)--(.5u,.2u); pickup PenD; thdraw (-.4u,.2u)--(-.4u,0); thdraw (-.12u,.2u)--(-.12u,-.25u); thdraw (.02u,.2u)--(.02u,-.1u); thdraw (.23u,.2u)--(.23u,-.19u); thdraw (.35u,.2u)--(.35u,-.15u); enddef; def p_crystal_UIS (expr pos,theta,sc,al)= U:=(.35u,.35u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p := ((-.35*u,0)--(.35*u,0)); thdraw p; thdraw p rotated (60); thdraw p rotated (120); enddef; def p_flowstone_UIS (expr pos,theta,sc,al)= U:=(.45u,.1u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p := ((-.15*u,0)--(.15*u,0)); thdraw p shifted (.3u,-.1u); thdraw p shifted (-.3u,-.1u); thdraw p shifted (0,.1u); enddef; def p_moonmilk_UIS (expr pos,theta,sc,al)= U:=(.5u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.5u,-.2u){up}..{dir -60}(-.18u,-.105u){dir 80}.. {dir-80}(.18u,-.105u){dir 60}..{down}(.5u,-.2u); enddef; def p_wallcalcite_UIS (expr pos,theta,sc,al)= U:=(.2u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.2u,-.2u)--(0,.1u)--(.2u,-.2u); enddef; def p_popcorn_UIS (expr pos,theta,sc,al)= U:=(.5u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.5u,-.2u)--(.5u,-.2u); pickup PenD; thdraw (-.3u,-.2u)--(-.3u,.1u); thdraw (0,-.2u)--(0,.1u); thdraw (.3u,-.2u)--(.3u,.1u); thfill fullcircle scaled .2u shifted (-.3u,.1u); thfill fullcircle scaled .2u shifted (0,.1u); thfill fullcircle scaled .2u shifted (.3u,.1u); enddef; def p_disk_UIS (expr pos,theta,sc,al)= U:=(.2u,.3u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.2u,-.3u)--origin--(.2u,-.3u); p:=fullcircle scaled .3u shifted (0,.15u); thclean p; thdraw p; enddef; def p_gypsum_NSS (expr pos,theta,sc,al)= U:=(.25u,.25u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.25u,0)--(.25u,0); thdraw (0,-.25u)--(0,.25u); enddef; def p_aragonite_NSS (expr pos,theta,sc,al)= U:=(.3u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (0,-.4u)--(0,.3u); thdraw (0,-.1u){dir 40}..{dir 5}(.3u,.08u); thdraw (0,-.1u){dir 140}..{dir 175}(-.3u,.08u); thdraw (0,.2u){dir 30}..{dir 5}(.25u,.3u); thdraw (0,.2u){dir 150}..{dir 175}(-.25u,.3u); enddef; def p_cavepearl_SKBB (expr pos,theta,sc,al)= U:=(.25u,.25u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p:=fullcircle scaled .25u shifted (0,.16u); thdraw p; thdraw p rotated 120; thdraw p rotated 240; enddef; def p_gypsumflower_NSS (expr pos,theta,sc,al)= U:=(.4u,.3u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; % thdraw (.2u,0){left}..(0,.2u)..(.25u,.35u)..(.5u,0).. % (.1u,-.3u)..{dir 125}(-.5u,.2u); thdraw (.18u,0){left}..(0,.15u)..(.2u,.3u)..(.4u,0).. (.15u,-.28u)..{dir 120}(-.4u,.15u); enddef; def p_rimstonepool_ASF (expr pos,theta,sc,al)= U:=(.4u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p := (-.4u,.2u){dir -70}..{dir 70}(.4u,.2u); thfill buildcycle(p,((.5u,.1u)--(-.5u,.1u))); thdraw p; enddef; def p_rimstonedam_ASF (expr pos,theta,sc,al)= U:=(.4u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.4u,.2u){dir -70}..{dir 70}(.4u,.2u); enddef; def p_anastomosis_UIS (expr pos,theta,sc,al)= U:=(.4u,.3u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p:=(-.4u,-.2u)--(-.3u,-.3u)--(0,.3u)--(.1u,.2u); thdraw p; thdraw p shifted (.3u,0); enddef; def p_karren_UIS (expr pos,theta,sc,al)= U:=(.5u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.5u,-.3u){dir -85}..{dir 85}(-.32u,-.3u)..(-.28u,.3u){dir 85}.. {dir -85}(-.12u,.3u)..(-.08u,-.3u){dir-85}..{dir 85}(.08u,-.3u).. {dir85}(.12u,.3u)..(.28u,.3u){dir -85}..(.32u,-.3u){dir -85}.. {dir 85}(.5u,-.3u); enddef; def p_scallop_UIS (expr pos,theta,sc,al)= U:=(.2u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (0,-.4u){dir 125}..{dir 105}(-.2u,.1u){up}.. {down}(.2u,.1u){dir -105}...{dir -125}(0,-.4u); enddef; def p_flute_UIS (expr pos,theta,sc,al)= U:=(.5u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.5u,.2u)--(.5u,.2u); thdraw (-.3u,.2u){dir -70}..{dir 70}(.3u,.2u); enddef; def p_raft_NSS (expr pos,theta,sc,al)= U:=(.5u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.5u,.2u){dir -80}..(-.3u,-.2u)..origin..(.3u,.2u).. {dir -80}(.5u,-.2u); enddef; def p_raftcone_NSS (expr pos,theta,sc,al)= U:=(.3u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.3u,-.4u)--(0,.4u)--(.3u,-.4u); enddef; def p_spring_SKBB (expr pos,theta,sc,al)= U:=(.3u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.3u,.2u){down}..(0,-.2u)..{up}(.3u,.2u); enddef; def p_sink_SKBB (expr pos,theta,sc,al)= U:=(.3u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.3u,-.2u){up}..(0,.2u)..{down}(.3u,-.2u); enddef; def p_narrowend_UIS (expr pos,theta,sc,al)= U:=(.1u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.1u,-.4u)--(-.1u,.4u); thdraw (.1u,-.4u)--(.1u,.4u); enddef; def p_lowend_UIS (expr pos,theta,sc,al)= U:=(.4u,.1u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.4u,-.1u)--(.4u,-.1u); thdraw (-.4u,.1u)--(.4u,.1u); enddef; def p_lowend_NSS (expr pos,theta,sc,al)= U:=(.4u,0); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.4u,0)--(.4u,0); enddef; def p_flowstonechoke_NSS (expr pos,theta,sc,al)= U:=(.4u,.3u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p:=(-.4u,-.4u){right}..{dir120}(-.2u,-.2u){dir -20}..{up}(0,0); thdraw p; thdraw p shifted (0,.2u); thdraw p reflectedabout (origin,down); thdraw p reflectedabout (origin,down) shifted (0,.2u); enddef; def p_breakdownchoke_NSS (expr pos,theta,sc,al)= U:=(.5u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.5u,-.1u)--(-.15u,.05u)--(-.48u,.2u)--cycle; thdraw (-.2u,-.2u)--(.15u,-.18u)--(-.08u,.14u)--cycle; thdraw (.1u,0)--(.4u,-.1u)--(.5u,.2u)--(.1u,.2u)--cycle; enddef; def p_bedrock_ASF (expr pos,theta,sc,al)= U:=(.5u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.5u,0)--(.5u,0); thdraw (-.3u,0)--(-.3u,.2u); thdraw (.3u,0)--(.3u,-.2u); enddef; def p_sand_UIS (expr pos,theta,sc,al)= U:=(.2u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenB; thdraw (0,.2u); thdraw (0,.2u) rotated 120; thdraw (0,.2u) rotated 240; enddef; def p_clay_SKBB (expr pos,theta,sc,al) = U:=(.3u,.3u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.3u,0){up}..origin{down}..{up}(0.3u,0); enddef; def p_pebbles_UIS (expr pos,theta,sc,al)= U:=(.45u,.35u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p:=superellipse((.2u,0),(0,.1u),(-.2u,0),(0,.-.1u),.75); thdraw p rotated 20 shifted (0,.25u); thdraw p rotated -37 shifted (.25u,-.25u); thdraw p rotated -62 shifted (-.25u,-.25u); enddef; def p_debris_UIS (expr pos,theta,sc,al)= U:=(.4u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.3u,-.4u)--(0,-.22u)--(-.4u,-.1u)--cycle; thdraw (.2u,-.4u)--(.4u,-.1u)--(.1u,-.1u)--cycle; thdraw (-.1u,0)--(.2u,.3u)--(-.2u,.3u)--cycle; enddef; def p_blocks_UIS (expr pos,theta,sc,al)= U:=(.5u,.5u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.5u,-.5u)--(.3u,-.4u)--(-.17u,.2u)--cycle; thdraw (.25u,-.25u)--(.5u,-.15u)--(.3u,.5u)--(-.1u,.5u)--cycle; thdraw (-.27u,0)--(-.1u,.3u)--(-.5u,.35u)--cycle; pickup PenD; thdraw (-.5u,-.5u)--(-.1u,-.2u)--(-.17u,.2u); thdraw (-.1u,-.2u)--(.3u,-.4u); thdraw (.25u,-.25u)--(.3u,0)--(.2u,.2u)--(-.1u,.5u); thdraw (.3u,.5u)--(.2u,.2u); thdraw (.5u,-.15u)--(.3u,0); enddef; def p_water_UIS (expr pos,theta,sc,al)= U:=(.425u,.3u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenD; p:=fullcircle xscaled (.85u) yscaled (.6u); thfill p withpattern pattern_water_UIS; thdraw p; enddef; def p_ice_UIS (expr pos,theta,sc,al)= U:=(.4u,.35u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p := (0,.05u)--(0,.35u); thdraw p; thdraw p shifted (-.25u,-.3u); thdraw p shifted (.25u,-.3u); p := (-0.15u,.2u)--(0.15u,.2u); thdraw p; thdraw p shifted (-.25u,-.3u); thdraw p shifted (.25u,-.3u); enddef; def p_snow_SKBB (expr pos,theta,sc,al)= U:=(.35u,.35u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p := origin--(0,.25*u); q := ((0,.35u)--(0,0.25u)--(0.1u,0.25u)) rotatedaround ((0,0.25u),45); thdraw p; thdraw p rotated (60); thdraw p rotated (120); thdraw p rotated (180); thdraw p rotated (240); thdraw p rotated (300); thdraw q; thdraw q rotated (60); thdraw q rotated (120); thdraw q rotated (180); thdraw q rotated (240); thdraw q rotated (300); enddef; def p_archeomaterial_UIS (expr pos,theta,sc,al)= U:=(.4u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p := fullcircle scaled .8u; thdraw (-.5u,-.5u)--origin cutbefore p; thdraw (-.5u,.5u)--origin cutbefore p; thdraw origin--(.4u,0); thdraw p; enddef; def p_paleomaterial_UIS (expr pos,theta,sc,al)= U:=(.4u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; thfill (-.4u,-.2u)..(-.2u,-.08u)---(-.1u,.05u)---(0,.2u)..(-.03u,.4u).. (.2u,.3u)..(.35u,.25u)..(.2u,.2u)---origin---(-.1u,-.17u).. (-.08u,-.25u){dir -120}..(-.3u,-.23u) ..cycle; enddef; def p_guano_UIS (expr pos,theta,sc,al)= U:=(.4u,.35u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.4u,.2u){dir 40}..{down}(0,-.35u){up}..{dir-40}(.4u,.2u); enddef; def p_vegetabledebris_ASF (expr pos,theta,sc,al)= U:=(.38u,.3u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.3u,-.3u)--(0,.3u); thdraw (0,-.3u)--(.3u,.3u); thdraw (-.25u,.13u)--(.38u,.13u); thdraw (-.38u,-.13u)--(.25u,-.13u); enddef; def p_root_ASF (expr pos,theta,sc,al)= U:=(.1u,.5u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.1u,-.5u)--(-.1u,.5u); p:=(-.1u,-.3u)--(.1u,-.5u); thdraw p; thdraw p shifted (0,.2u); thdraw p shifted (0,.4u); enddef; def p_entrance_UIS (expr pos,theta,sc,al)= U:=(.2u,.5u); T:=identity aligned al rotated theta scaled sc shifted pos; thfill (-.2u,-.5u)--(0,.5u)--(.2u,-.5u)--cycle; enddef; def p_waterflow_paleo_UIS (expr pos,theta,sc,al)= U:=(.2u,u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (0,-u)--(0,u); thdraw halfcircle scaled .4u shifted (0,-.4u); p:=(-.15u,.6u)--(0,u)--(.15u,.6u)--cycle; thfill p; thdraw p; enddef; def p_gradient_UIS (expr pos,theta,sc,al)= U:=(.15u,u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (0,-u)--(0,u); p:=(-.15u,.6u)--(0,u)--(.15u,.6u)--cycle; thfill p; thdraw p; enddef; def p_gradient_BCRA (expr pos,theta,sc,al)= U:=(.25u,0.7u); T:=identity aligned al rotated theta scaled sc shifted pos; thfill (-.25u,-0.7u)--(0,.7u)--(.25u,-.7u)--cycle; enddef; % by Philip Schuchardt def p_gradient_NSS (expr pos,theta,sc,al) = U:=(.7u, .6u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.3u, -.5u) -- (-.7u, -.2u); thdraw (-.2u, -.4u) -- (-.4u, .3u); thdraw (0u, -.3u) -- (0u, .6u); thdraw (.3u, -.5u) -- (.7u, -.2u); thdraw (.2u, -.4u) -- (.4u, .3u); enddef; def p_waterflow_permanent_UIS (expr pos,theta,sc,al)= U:=(.15u,.5u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p:=(0,.5u){down}..(.12u,.3u)..(-.15u,.15u)..(.13u,0).. (-.08u,-.2u)..{down}(0,-.5u); p:=p rotated 180; thdraw p; thdrawoptions(); oldahlength:=ahlength; ahlength:=2.5pt*optical_zoom; thdraw arrowhead p; thfill arrowhead p; ahlength:=oldahlength; enddef; def p_waterflow_intermittent_UIS (expr pos,theta,sc,al)= thdrawoptions(dashed evenly scaled (.5 * optical_zoom)); p_waterflow_permanent_UIS (pos,theta,sc,al); thdrawoptions(); enddef; def p_airdraught_UIS (expr pos,theta,sc,al)= U:=(.2u,u); T:=identity aligned al rotated theta scaled 1 shifted pos; pickup PenC; thdraw (0,u)--(0,-0.75u); p:=(-.2u,.65u){dir 20}..{dir 90}(0,u); thdraw p; thdraw p reflectedabout (origin,(0,u)); for i:=1 upto round(3+2*mlog(sc)/mlog 2): thdraw (0,-(1-0.2i)*u)--(.2u,-(1-0.2(i-1))*u); endfor; enddef; def p_airdraught_winter_UIS (expr pos,theta,sc,al)= U:=(.2u,u); T:=identity aligned al rotated theta scaled 1 shifted pos; pickup PenC; thdraw (0,u)--(0,-0.75u); p:=(-.2u,.65u){dir 20}..{dir 90}(0,u); thdraw p; thdraw p reflectedabout (origin,(0,u)); for i:=1 upto round(3+2*mlog(sc)/mlog 2): thdraw (0,-(1-0.2i)*u)--(.2u,-(1-0.2(i-1))*u); endfor; thclean fullcircle scaled 0.6u shifted (0,0.05u); thdraw (-0.1732u,-0.05u) -- (0.1732u,0.15u); thdraw (0.1732u,-0.05u) -- (-0.1732u,0.15u); thdraw (0,-0.15u) -- (0,0.25u); enddef; def p_airdraught_summer_UIS (expr pos,theta,sc,al)= U:=(.2u,u); T:=identity aligned al rotated theta scaled 1 shifted pos; pickup PenC; thdraw (0,u)--(0,-0.75u); p:=(-.2u,.65u){dir 20}..{dir 90}(0,u); thdraw p; thdraw p reflectedabout (origin,(0,u)); for i:=1 upto round(3+2*mlog(sc)/mlog 2): thdraw (0,-(1-0.2i)*u)--(.2u,-(1-0.2(i-1))*u); endfor; thclean fullcircle scaled 0.6u shifted (0,0.05u); thdraw (-0.1732u,-0.05u) -- (0.1732u,0.15u); thdraw (0.1732u,-0.05u) -- (-0.1732u,0.15u); thdraw (0,-0.15u) -- (0,0.25u); thclean fullcircle scaled 0.3u shifted (0,0.05u); thdraw fullcircle scaled 0.2u shifted (0,0.05u); enddef; def p_station_fixed_ASF (expr pos)= T:=identity shifted pos; pickup PenD; pair z; z:=(0,.2u); thclean z -- (z rotated 120) -- (z rotated 240) -- cycle; thdraw z -- (z rotated 120) -- (z rotated 240) -- cycle; thdraw origin; enddef; def p_station_painted_SKBB (expr pos)= T:=identity shifted pos; pickup PenC; thclean fullcircle scaled 0.25u; thdraw fullcircle scaled 0.25u; enddef; def p_station_natural_ASF (expr pos)= T:=identity shifted pos; pickup PenD; thclean fullcircle scaled .3u; thdraw fullcircle scaled .3u; thdraw origin; enddef; def p_station_temporary_ASF (expr pos)= T:=identity shifted pos; pickup PenD; p:=(-.2u,0)--(.2u,0); thdraw p; thdraw p rotated 90; thclean fullcircle scaled .16u; pickup PenC; thdraw origin; enddef; let p_station_temporary_SKBB = p_station_painted_SKBB; def p_steps_SKBB (expr pos,r,s,al) = U:=(.4u, .4u); T:=identity aligned al shifted pos; thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD; pickup PenC; thdraw (-.3u,.3u)--(-.3u,.1u)--(-.1u,.1u)--(-.1u,-.1u)-- (.1u,-.1u)--(.1u,-.3u)--(.3u,-.3u); enddef; def p_fixedladder_SKBB (expr pos,r,s,al) = U:=(.4u, .4u); T:=identity aligned al shifted pos; thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD; pickup PenC; thdraw (-.15u,-.4u)--(-.15u,.4u); thdraw (.15u,-.4u)--(.15u,.4u); thdraw (-.15u,0)--(.15u,0); thdraw (-.15u,.2u)--(.15u,.2u); thdraw (-.15u,-.2u)--(.15u,-.2u); enddef; def p_ropeladder_SKBB (expr pos,r,s,al) = U:=(.4u, .4u); T:=identity aligned al shifted pos; thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD; pickup PenC; thdraw (.1u,-.4u)..(.2u,-.2u)..(.1u,.2u)..(.2u,.4u); thdraw (-.2u,-.4u)..(-.1u,-.2u)..(-.2u,.2u)..(-.1u,.4u); thdraw (-.2u,.2u)--(.1u,.2u); thdraw (-.15u,0)--(.15u,0); thdraw (-.1u,-.2u)--(.2u,-.2u); enddef; def p_bridge_SKBB (expr pos,r,s,al) = U:=(.4u, .4u); T:=identity aligned al shifted pos; thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD; pickup PenC; thdraw (-.3u,.2u)--(-.2u,.1u)--(.2u,.1u)--(.3u,.2u); thdraw (-.3u,-.2u)--(-.2u,-.1u)--(.2u,-.1u)--(.3u,-.2u); enddef; def p_noequipment_SKBB (expr pos,r,s,al) = U:=(.4u, .4u); T:=identity aligned al shifted pos; thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD; thfill (0,-.1u)--(-.05u,.3u)--(.05u,.3u)--cycle; thdraw (0,-.2u) withpen PenX; enddef; def p_anchor_SKBB (expr pos,r,s,al) = U:=(.4u, .4u); T:=identity aligned al shifted pos; thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD; thdraw fullcircle scaled .2u shifted (0.2u,0) withpen PenC; begingroup; interim linecap:=butt; thdraw (-.3u,0)--(.1u,0) withpen PenA; endgroup; thdraw (.1u,-.4u)--(.1u,.4u) withpen PenD; enddef; def p_traverse_SKBB (expr pos,r,s,al) = U:=(.4u, .4u); T:=identity aligned al shifted pos; thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD; pickup PenC; thdraw (-.25u,.05u)..(0,-.08u)..(.25u,.05u); pickup pencircle scaled .18u; thdraw (-.25u,.05u); thdraw (.25u,.05u); enddef; def p_rope_SKBB (expr pos,r,s,al) = U:=(.4u, .4u); T:=identity aligned al shifted pos; thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD; pickup PenC; thdraw (-.2u,.2u)..origin..(.1u,.1u)--(.1u,-.4u); pickup pencircle scaled .18u; thdraw (-.2u,.2u); thdraw (.1u,.1u); enddef; def p_camp_SKBB (expr pos,r,s,al) = U:=(.4u, .5u); T:=identity aligned al shifted pos; pickup PenC; thdraw (-.4u,-.4u)--(0,.5u)--(.4u,-.4u)--cycle; pickup PenD; thdraw (0,-.4u)--(0,.5u); enddef; def p_dig_UIS (expr pos,r,s,al) = U:=(.4u, .5u); T:=identity aligned al shifted pos; thfill ((-.075u,-.5u){down} .. {up}(0.075u, -.5u) -- (0.075u, .15u) -- (0.3u, 0.15u) -- (0.3u, 0.5u) -- (-.3u, .5u) -- (-.3u, .15u) -- (-.075u, .15u) -- cycle) rotated 45; enddef; def p_continuation_UIS(expr pos,theta,sc,al) = U:=(.15u,.3u); T:=identity aligned al shifted pos; pickup PenC; thdraw (-.1u,.2u){up}..{down}(.1u,.2u)..{down}(0,-.05u); pickup PenX; thdraw (0,-.2u); enddef; def p_station_SKBB(expr pos,mark,txt)(text flags) = T:=identity shifted pos; if mark=4: p_station_fixed(pos) elseif mark=3: p_station_natural(pos) elseif mark=2: p_station_painted(pos) elseif mark=1: p_station_temporary(pos) fi; path path_cave; path_cave = (-.3u,-.25u) -- (-.2u,-.25u){dir 135} .. (0, .25u) .. {dir 225}(.2u,-.25u) -- (.3u,-.25u); for i=flags: pickup PenX; if i="entrance": % thfill fullcircle scaled 1 cm withtransparentcolor tr_blue; thdraw path_cave; % p_label.urt(txt,pos+(0.4u,0),0,0); if not numeric txt: p_smartlabel(txt,pos); fi; elseif i="sink": thdraw path_cave cutbefore ((-u,0)--(u,0)) cutafter ((-u,0)--(u,0)); pickup PenA; thdraw (0,-.45u) -- (0,.05u) withcolor blue; thdraw (-.15u,-.02u) -- (0,.05u) -- (.15u,-.02u) withcolor blue; elseif i="spring": thdraw path_cave cutbefore ((-u,0)--(u,0)) cutafter ((-u,0)--(u,0)); pickup PenA; thdraw (0,-.45u) -- (0,.05u) withcolor blue; thdraw (-.15u,-.38u) -- (0,-.45u) -- (.15u,-.38u) withcolor blue; elseif i="doline": thdraw (-.5u,.05u){down}..(0,-0.6u)..{up}(.5u,.05u); elseif i="dig": thdraw (-.5u,.25u) -- (-.35u,.25u)--(-.23u,-.25u)--(.23u,-.25u)--(.35u,.25u)--(.5u,.25u); elseif substring(0,11) of i = "air-draught": pickup PenB; thdraw ((0,.11u){dir-120} ..{dir-70}(0,0) .. {dir-120}(0,-.11u)); thdraw ((0,.11u){dir-120} ..{dir-70}(0,0) .. {dir-120}(0,-.11u)) shifted (.11u,0); thdraw ((0,.11u){dir-120} ..{dir-70}(0,0) .. {dir-120}(0,-.11u)) shifted (-.11u,0); elseif i="continuation": if picture(txt): picture ATTR__text; ATTR__text := txt; fi; begingroup; save T; transform T; p_continuation(pos+(0,.25u),0,1,(0,1)); endgroup; if picture(txt): save ATTR__text; fi; elseif i="arch": thdraw (-.5u,-.25u)--(-.5u,.25u)--(.5u,.25u)--(.5u,-.25u)..(0,.2u)..cycle; thfill (-.5u,-.25u)--(-.5u,.25u)--(.5u,.25u)--(.5u,-.25u)..(0,.2u)..cycle; elseif i="overhang": thdraw (.2u,-.25u)--(-.2u,-.25u){up}..{right}(.2u,.25u); fi; endfor; % thdraw (0,0) withpen PenX withcolor red; enddef; def p_debug (expr col, pen, pos)= T:=identity shifted pos; thdraw origin withpen pencircle scaled if pen=0: 2pt else: 4pt fi withcolor if col=-2: (1,.85,0) elseif col=-1: black elseif col=0: red else: blue fi; enddef; def p_u(expr pos,theta,sc,al) = T:=identity shifted pos; thdraw origin withpen pencircle scaled 4pt withcolor red; enddef; %%%%% ENDINPUT thPoint %%%%% %%%%% INPUT thLine %%%%% %% therion source code %% %% This file defines macros for line symbols %% %% $Date: 2003/07/01 09:06:44 $ %% $RCSfile: thLine.mp,v $ %% $Revision: 1.4 $ %% %% Copyright (C) 2000 Martin Budaj %% %% -------------------------------------------------------------------- %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 2 of the License, or %% any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; if not, write to the Free Software %% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA %% -------------------------------------------------------------------- % some definitions vardef adjust_step (expr L, S) = % krok is stretched a bit if S <= L: L / (floor(L / S)) % according to length of path else: L fi enddef; def mark_(expr p,t,l) = thdraw (point t of p) -- ((point t of p) + l * unitvector(thdir(p,t) rotated 90)); enddef; vardef thdir (expr p,t) = % 1 * epsilon caused problems in scales < 1:1000 % n * epsilon is enough for scale 1:(n*1000) % ((direction t-100*epsilon of p) + (direction t+100*epsilon of p)) / 2 postcontrol (t+1000*epsilon) of p - precontrol (t-1000*epsilon) of p % direction t of p enddef; % walls: def l_wall_bedrock_UIS (expr P) = T:=identity; pickup PenA; thdraw P; enddef; def l_wall_sand_SKBB (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, 0.1u); pickup PenB; forever: t := arctime cas of P; thdraw ((point t of P) + (uniformdeviate 1) * .4u * unitvector(thdir(P,t) rotated -90)); cas := cas + mojkrok; exitif cas > dlzka + (mojkrok / 3); % for rounding errors endfor; pickup PenA; thdraw P; enddef; def l_wall_pebbles_SKBB (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, .35u); pickup PenC; q:=superellipse((.2u,0),(0,.1u),(-.2u,0),(0,.-.1u),.75); forever: t := arctime (cas + mojkrok/2) of P; thdraw q randomized (u/20) rotated (angle(thdir(P,t)) + (normaldeviate*40)) shifted point t of P; cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; enddef; def l_wall_clay_SKBB (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, .5u); pickup PenC; q := (-0.15u,0){up}..{down}origin..{up}(0.15u,0); forever: t := arctime (cas + mojkrok/2) of P; thdraw q shifted (point t of P + .25u * unitvector(thdir(P,t) rotated -90)); cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; pickup PenA; thdraw P; enddef; def l_wall_debris_SKBB (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, .4u); pickup PenC; % q := ((-.1u,-.15u)--(.2,.03u)--(-.2u,.15u)--cycle) scaled 1.5; q := ((-.2u,-.1u)--(.2u,-.1u)--(0,.2u)--cycle) scaled 1.1; forever: t := arctime (cas + mojkrok/2) of P; thdraw q randomized (u/10) rotated uniformdeviate (360) shifted point t of P; cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; enddef; def l_wall_blocks_SKBB (expr P) = % pickup PenD; % draw P withcolor red; T:=identity; cas := 0; dlzka := arclength P; if dlzka > 0: mojkrok:=adjust_step(dlzka, 1.5u); pickup PenA; forever: t1 := arctime (cas + mojkrok*1/10) of P; t2 := arctime (cas + mojkrok*9/10) of P; q := ((point t1 of P) + .4u * unitvector(thdir(P,t1) rotated -90)) -- (subpath (t1,t2) of P) -- ((point t2 of P) + .4u * unitvector(thdir(P,t2) rotated -90)); thdraw q randomized (u/6); cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; fi; enddef; def l_wall_ice_SKBB (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, .5u); pickup PenC; p := (-.1u,0)--(.1u,0); q := (0,-.1u)--(0,.1u); forever: t := arctime (cas + mojkrok/2) of P; thdraw p shifted (point t of P + .25u * unitvector(thdir(P,t) rotated -90)); thdraw q shifted (point t of P + .25u * unitvector(thdir(P,t) rotated -90)); cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; pickup PenA; thdraw P; enddef; def l_wall_underlying_UIS (expr P) = T:=identity; pickup PenA; thdraw P dashed evenly scaled optical_zoom; enddef; def l_wall_unsurveyed_SKBB (expr P) = T:=identity; pickup PenC; thdraw P; enddef; def l_wall_presumed_UIS (expr P) = T:=identity; pickup PenA; thdraw P dashed evenly scaled (2*optical_zoom); enddef; % other line symbols def l_pit_UIS (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, 0.25u); pickup PenD; forever: t := arctime cas of P; mark_ (P,t,0.2u); cas := cas + mojkrok; exitif cas > dlzka + (mojkrok / 3); % for rounding errors endfor; pickup PenC; thdraw P; enddef; let l_floorstep_UIS = l_pit_UIS; def l_overhang_SKBB (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, 0.3u); pickup PenC; t1:=0; forever: t := arctime (cas + mojkrok/2) of P; t2 := arctime (cas + mojkrok) of P; thfill (subpath (t1,t2) of P) -- ((point t of P) + .3u * unitvector(thdir(P,t) rotated 90)) -- cycle; cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors t1:=t2; endfor; thdraw P; enddef; def l_chimney_UIS (expr P) = T:=identity; pickup PenC; thdraw P dashed evenly scaled optical_zoom; enddef; def l_ceilingstep_SKBB (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, 0.8u); pickup PenC; forever: t1 := arctime (cas + mojkrok*1/5) of P; t := arctime (cas + mojkrok/2) of P; t2 := arctime (cas + mojkrok*4/5) of P; thdraw (subpath (t1,t2) of P); mark_ (P,t,0.2u); cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; enddef; def l_ceilingmeander_SKBB (expr P) = pair Pp; pair Pd; pair Pv; T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, 0.8u); pickup PenC; forever: t := arctime (cas + mojkrok/2) of P; Pp := (point t of P); Pd := unitvector(thdir(P,t)); Pv := Pd rotated 90; thdraw (Pp + 0.1u * Pv) -- (Pp + 0.2u * Pv); thdraw (Pp + 0.2u * Pv + 0.2u * Pd) -- (Pp + 0.2u * Pv - 0.2u * Pd); thdraw (Pp - 0.1u * Pv) -- (Pp - 0.2u * Pv); thdraw (Pp - 0.2u * Pv + 0.2u * Pd) -- (Pp - 0.2u * Pv - 0.2u * Pd); cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; enddef; def l_floormeander_SKBB (expr P) = pair Pp; pair Pd; pair Pv; pair PPp; pair PPd; pair PPv; T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, 0.25u); pickup PenC; forever: t := arctime cas of P; Pp := (point t of P); Pd := unitvector(thdir(P,t)); Pv := Pd rotated 90; thdraw (Pp + 0.1u * Pv) -- (Pp + 0.2u * Pv); thdraw (Pp - 0.1u * Pv) -- (Pp - 0.2u * Pv); if cas > 0: thdraw (PPp + 0.2u * PPv) -- (Pp + 0.2u * Pv); thdraw (PPp - 0.2u * PPv) -- (Pp - 0.2u * Pv); fi; PPp := Pp; PPd := Pd; PPv := Pv; cas := cas + mojkrok; exitif cas > dlzka + (mojkrok / 3); % for rounding errors endfor; enddef; boolean alw_perpendicular; def l_slope_SKBB (expr P,S)(text Q) = %show Q; T:=identity; numeric dirs[]; numeric lengths[]; for i=Q: dirs[redpart i]:=greenpart i; lengths[redpart i]:=bluepart i; endfor; li:=length(P); % last alw_perpendicular:=true; for i=0 upto li: if unknown dirs[i]: dirs[i]:=-1; else: if dirs[i]>-1: dirs[i]:=((90-dirs[i]) - angle(thdir(P,i))) mod 360; alw_perpendicular:=false; fi; fi; if unknown lengths[i]: lengths[i]:=-1; fi; endfor; %for i=0 upto li: show dirs[i]; endfor; ni:=0; % next pi:=0; % previous for i=0 upto li: d:=dirs[i]; if d=-1: if (i=0) or (i=li): dirs[i] := angle(thdir(P,i) rotated 90) mod 360; pi:=i; else: if ni<=i: for j=i upto li: ni:=j; exitif dirs[j]>-1; endfor; fi; w:=arclength(subpath(pi,i) of P) / arclength(subpath(pi,ni) of P); dirs[i]:=w[dirs[pi],dirs[ni]]; % if (dirs[i]-angle(thdir(P,i))) mod 360>180: % dirs[i]:=w[dirs[ni],dirs[pi]]; % message("*******"); % fi; fi; else: pi:=i; fi; endfor; %for i=0 upto li: show dirs[i]; endfor; ni:=0; % next pi:=0; % previous for i=0 upto li: l:=lengths[i]; if l=-1: if (i=0) or (i=li): lengths[i] := 1cm; % should never happen! thwarning("slope width at the end point not specified"); pi:=i; else: if ni<=i: for j=i+1 upto li: ni:=j; exitif lengths[j]>-1; endfor; fi; w:=arclength(subpath(pi,i) of P) / arclength(subpath(pi,ni) of P); lengths[i]:=w[lengths[pi],lengths[ni]]; pi:=i; fi; else: pi:=i; fi; endfor; % for i=0 upto li: show lengths[i]; endfor; T:=identity; boolean par; cas := 0.3u; krok := 0.7u; dlzka := (arclength P); if dlzka>3u: dlzka:=dlzka-0.6u fi; mojkrok:=adjust_step(dlzka,1.4u) / 2; pickup PenD; par := false; forever: t := arctime cas of P; if t mod 1>0: % not a key point w := (arclength(subpath(floor t,t) of P) / arclength(subpath(floor t,ceiling t) of P)); if alw_perpendicular: a := 90; else: a := w[dirs[floor t],dirs[ceiling t]]; fi; l := w[lengths[floor t],lengths[ceiling t]]; else: if alw_perpendicular: a := 90; else: a:= dirs[t]; fi; l:=lengths[t]; fi; a := a + angle(thdir(P,t)); thdraw (point t of P) -- ((point t of P) + if par: 0.333 * fi l * unitvector(dir(a))); cas := cas + mojkrok; par := not par; exitif cas > dlzka + .3u + (krok / 3); % for rounding errors endfor; if S = 1: pickup PenC; draw P fi; %pickup pencircle scaled 3pt; %for i=0 upto li: draw point i of P; endfor; enddef; def l_slope_BCRA (expr P,S)(text Q) = %show Q; T:=identity; numeric dirs[]; numeric lengths[]; for i=Q: dirs[redpart i]:=greenpart i; lengths[redpart i]:=bluepart i; endfor; li:=length(P); % last alw_perpendicular:=true; for i=0 upto li: if unknown dirs[i]: dirs[i]:=-1; else: if dirs[i]>-1: dirs[i]:=((90-dirs[i]) - angle(thdir(P,i))) mod 360; alw_perpendicular:=false; fi; fi; if unknown lengths[i]: lengths[i]:=-1; fi; endfor; %for i=0 upto li: show dirs[i]; endfor; ni:=0; % next pi:=0; % previous for i=0 upto li: d:=dirs[i]; if d=-1: if (i=0) or (i=li): dirs[i] := angle(thdir(P,i) rotated 90) mod 360; pi:=i; else: if ni<=i: for j=i upto li: ni:=j; exitif dirs[j]>-1; endfor; fi; w:=arclength(subpath(pi,i) of P) / arclength(subpath(pi,ni) of P); dirs[i]:=w[dirs[pi],dirs[ni]]; % if (dirs[i]-angle(thdir(P,i))) mod 360>180: % dirs[i]:=w[dirs[ni],dirs[pi]]; % message("*******"); % fi; fi; else: pi:=i; fi; endfor; %for i=0 upto li: show dirs[i]; endfor; ni:=0; % next pi:=0; % previous for i=0 upto li: l:=lengths[i]; if l=-1: if (i=0) or (i=li): lengths[i] := 1cm; % should never happen! thwarning("slope width at the end point not specified"); pi:=i; else: if ni<=i: for j=i+1 upto li: ni:=j; exitif lengths[j]>-1; endfor; fi; w:=arclength(subpath(pi,i) of P) / arclength(subpath(pi,ni) of P); lengths[i]:=w[lengths[pi],lengths[ni]]; pi:=i; fi; else: pi:=i; fi; endfor; % for i=0 upto li: show lengths[i]; endfor; T:=identity; boolean par; cas := 0.3u; krok := 0.7u; dlzka := (arclength P); if dlzka>3u: dlzka:=dlzka-0.6u fi; mojkrok:=adjust_step(dlzka,1.4u) / 2; pickup PenD; par := false; forever: t := arctime cas of P; if t mod 1>0: % not a key point w := (arclength(subpath(floor t,t) of P) / arclength(subpath(floor t,ceiling t) of P)); if alw_perpendicular: a := 90; else: a := w[dirs[floor t],dirs[ceiling t]]; fi; l := w[lengths[floor t],lengths[ceiling t]]; else: if alw_perpendicular: a := 90; else: a:= dirs[t]; fi; l:=lengths[t]; fi; a := a + angle(thdir(P,t)); if par: thfill (point t of P) + mojkrok/2.5 * unitvector(dir(a+90))-- ((point t of P) + l * unitvector(dir(a))) -- (point t of P) + mojkrok/2.5 * unitvector(dir(a-90)) -- cycle; fi; cas := cas + mojkrok; par := not par; exitif cas > dlzka + .3u + (krok / 3); % for rounding errors endfor; enddef; def l_contour_UIS(expr P)(text txt) = T:=identity; pickup PenD; thdraw P; for pnt=txt: if pnt=-2: mark_(P,arctime(arclength(P)/2) of P, 0.2u); elseif pnt>=0: mark_(P,pnt,0.2*u); fi; exitif pnt<0; endfor; enddef; def l_contour_SKBB(expr P)(text txt) = T:=identity; pickup PenD; thdraw P; for pnt=txt: if (pnt=-2) or (pnt=-1): mark_(P,arctime(arclength(P)/2) of P, 0.2u); elseif pnt>=0: mark_(P,pnt,0.2*u); fi; exitif pnt<0; endfor; enddef; def l_rockborder_UIS (expr P) = T:=identity; pickup PenC; if cycle P: thclean P fi; thdraw P; enddef; def l_rockedge_UIS (expr P) = T:=identity; pickup PenD; thdraw P; enddef; def l_border_visible_SKBB (expr Path) = T:=identity; pickup PenC; draw Path; enddef; def l_border_temporary_SKBB (expr Path) = T:=identity; pickup PenC; draw Path dashed evenly scaled optical_zoom; enddef; def l_flowstone_UIS (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, .7u); pickup PenC; t1:=0; forever: t2 := arctime (cas + mojkrok) of P; thdraw (point t1 of P){dir (angle(thdir(P,t1)) + 60)} .. {dir (angle(thdir(P,t2)) - 60)}(point t2 of P); cas := cas + mojkrok; exitif cas > dlzka + (mojkrok / 3); % for rounding errors t1:=t2; endfor; enddef; def l_moonmilk_UIS (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, .3u); pickup PenC; t1:=0; forever: t2 := arctime (cas + mojkrok) of P; thdraw (point t1 of P){dir (angle(thdir(P,t1)) + 80)} .. {dir (angle(thdir(P,t2)) - 80)}(point t2 of P); cas := cas + mojkrok; exitif cas > dlzka + (mojkrok / 3); % for rounding errors t1:=t2; endfor; enddef; def l_survey_surface_SKBB (expr P) = T:=identity; thdrawoptions(dashed withdots scaled (0.2 * optical_zoom) withpen PenC); thdraw P; thdrawoptions(); enddef; def l_survey_cave_SKBB (expr P) = T:=identity; pickup PenC; if ATTR__scrap_centerline: thdraw P; else: PolygonLine:=.8u; pair zz[]; for t = 0 upto length P - 1: zz1 := point t of P; zz2 := point t+1 of P; if length (zz2-zz1) > 2*PolygonLine: thdraw zz1 -- zz1 + PolygonLine * unitvector(zz2 - zz1); thdraw zz2 -- zz2 + PolygonLine * unitvector(zz1 - zz2); else: thdraw zz1 -- zz2; fi; endfor; fi; enddef; def l_survey_cave_UIS (expr P) = T:=identity; pair zz[]; pickup PenC; for t = 0 upto length P - 1: zz1 := point t of P; zz2 := point t+1 of P; draw zz1 -- zz2; endfor; enddef; def l_waterflow_permanent_UIS (expr Path) = path ppp; T:=identity; cas := 0; dlzka := arclength Path; mojkrok:=adjust_step(dlzka, 0.5u); pickup PenD; vardef azim = 50 + 15*normaldeviate enddef; az1 := azim; sgn := 1; ppp := point 0 of Path; forever: t1 := arctime cas of Path; t2 := arctime (cas+mojkrok) of Path; if cas+1.1*mojkrok > dlzka: az2 := 0; else: az2 := azim; fi; d1 := angle(thdir(Path,t1)) + sgn * az1; d2 := angle(thdir(Path,t2)) - sgn * az2; ppp := ppp & (point t1 of Path){dir d1} .. {dir d2}(point t2 of Path); az1 := az2; sgn := -1 * sgn; cas := cas + mojkrok; exitif cas > dlzka + mojkrok/3; % for rounding errors endfor; % drawarrow ppp; thdraw ppp; thdrawoptions(); oldahlength:=ahlength; ahlength:=ahlength*optical_zoom; thdraw arrowhead ppp; thfill arrowhead ppp; ahlength:=oldahlength; enddef; def l_waterflow_intermittent_SKBB (expr Path) = thdrawoptions(dashed evenly scaled optical_zoom); l_waterflow_permanent_UIS (Path); thdrawoptions(); enddef; def l_waterflow_conjectural_SKBB (expr Path) = thdrawoptions(dashed withdots scaled (0.5 * optical_zoom) withpen PenB); l_waterflow_permanent_UIS (Path); thdrawoptions(); enddef; def l_invisible (expr P) = enddef; def l_undefined (expr P) = T:=identity; pickup PenC; thdraw P withcolor red; thwarning("undefined line symbol used"); enddef; % Q = 0 -- no arrows % 1 -- end % 2 -- begin % 3 -- both def l_arrow_SKBB (expr P, Q) = T:=identity; pickup PenC; thdraw P; p := (-.1u,-.25u)--(0,0)--(.1u,-.25u); if odd Q: draw p rotated (angle(thdir(P,0))+90) shifted (point 0 of P); fi; if Q>1: draw p rotated (angle(thdir(P,length P))-90) shifted (point infinity of P); fi; enddef; def l_mapconnection_SKBB (expr P) = thdrawoptions(dashed withdots scaled (0.5 * optical_zoom) withpen PenB); l_arrow_SKBB(P,3); thdrawoptions(); enddef; def l_section_SKBB (expr P)(text txt) = T:=identity; path Q; Q = punked P; pickup PenC; for t = 0 upto length P - 1: pair zz[]; zz1 := point t of P; zz2 := point t+1 of P; zz3 := postcontrol t of P; zz4 := precontrol t+1 of P; if (length(zz3-1/3[zz1,zz2]) > 0.1pt) or (length(zz4-2/3[zz1,zz2]) > 0.1pt): zz5 = whatever[zz1,zz2]; (zz3-zz5) = whatever * (zz1-zz2) rotated 90; draw zz1--zz5; zz6 = whatever[zz1,zz2]; (zz4-zz6) = whatever * (zz1-zz2) rotated 90; draw zz2--zz6; else: draw zz1--zz2; fi; endfor; for pnt=txt: if pnt=-1: else: T:=identity rotated angle(thdir(Q,pnt)) shifted (point pnt of Q); pickup PenC; thdraw (0,0)--(0,.8u); thdraw (-.1u,.55u)--(0,.8u)--(.1u,.55u); fi; exitif pnt=-1; endfor; enddef; let l_border_invisible = l_invisible; let l_wall_invisible = l_invisible; def l_debug (expr col, pen, P) = T:=identity; pickup if pen=0: PenD else: PenB fi; thdraw P withcolor if col=-2: (1,.85,0) elseif col=-1: black elseif col=0: red else: blue fi; enddef; def l_u (expr P) = T:=identity; pickup PenA; thdraw P withcolor red; enddef; def l_gradient_UIS (expr P) = T:=identity; pickup PenC; thdraw P; p:=(-.15u,-.4u)--(0,0)--(.15u,-.4u)--cycle; thfill (p rotated (angle(thdir(P,length P))-90) shifted (point infinity of P)); thdraw (p rotated (angle(thdir(P,length P))-90) shifted (point infinity of P)); enddef; def l_gradient_BCRA (expr P) = T:=identity; pickup PenC; for t = 0 upto length P - 1: pair zz[]; zz1 := point t of P; zz2 := point t+1 of P; zz3 := unitvector(zz2 - zz1); thfill zz1 + u/3 * zz3 + .25u * (zz3 rotated 90) -- zz2 - u/3 * zz3 -- zz1 + u/3 * zz3 + .25u * (zz3 rotated -90) -- cycle; endfor; enddef; def l_rope_SKBB (expr P,exact) = T:=identity; pickup PenC; if exact: draw P; else: d:=0.5u; for i:=0 upto (length P - 2): x1 := xpart point i of P; y1 := ypart point i of P; x2 := xpart point i+1 of P; y2 := ypart point i+1 of P; dx1:=x1; dy1:=y1; x1:=0; y1:=0; x2:=x2-dx1; y2:=y2-dy1; if y2 > y1: y3 := y1 - d; x3 := x1 + (x2-x1)*sqrt(d)/(sqrt(d)+sqrt(y2-y1+d)); else: y3 := y2 - d; x3 := x1 + (x2-x1)*sqrt(y1-y2+d)/(sqrt(d)+sqrt(y1-y2+d)); fi; numeric a,b,c; a*x1/10*x1 + b/10*x1 + c/10 = y1/10; a*x2/10*x2 + b/10*x2 + c/10 = y2/10; a*x3/10*x3 + b/10*x3 + c/10 = y3/10; draw (x1+dx1,y1+dy1) for t = x1 step (x2-x1)/20 until x2+10*epsilon: -- (t+dx1,a*t*t+b*t+c+dy1) endfor; endfor; pair x; x = point (length P)-1 of P + whatewer * down; x = point (length P) of P + whatever * right; draw point (length P)-1 of P -- x; % thdraw point length P of P withpen pencircle scaled 0.3u withcolor red; fi; for i:=0 upto length P if not exact: -1 fi: thdraw point i of P withpen pencircle scaled 0.3u; endfor; enddef; def l_border_presumed_SKBB (expr Path) = T:=identity; pickup PenC; draw Path dashed evenly scaled (0.25 * optical_zoom); enddef; %%%%% ENDINPUT thLine %%%%% %%%%% INPUT thArea %%%%% %% therion source code %% %% This file defines tiling patterns %% %% $Date: 2003/07/01 09:06:44 $ %% $RCSfile: thPatterns.mp,v $ %% $Revision: 1.6 $ %% %% Copyright (C) 2000-2004 Martin Budaj %% %% -------------------------------------------------------------------- %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 2 of the License, or %% any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; if not, write to the Free Software %% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA %% -------------------------------------------------------------------- if unknown a_water_UIS: else: endinput fi; % patterns beginpattern(pattern_water_UIS); draw origin--10up withpen pensquare scaled (0.02u); patternxstep(.18u); patterntransform(identity rotated 45); endpattern; beginpattern(pattern_sump_UIS); draw origin--(0,.25u) withpen pensquare scaled (0.02u); draw origin--(.25u,0) withpen pensquare scaled (0.02u); patterntransform(identity rotated 45); endpattern; beginpattern(pattern_sand_UIS); pickup PenC; draw (0.2u,.3u); draw (0.35u,.7u); draw (0.6u,.5u); draw (0.8u,.1u); endpattern; beginpattern(pattern_debris_SKBB); pickup PenC; p:=(-.15u,0)--(.15u,0); draw p rotated -40 shifted (.2u,.3u); draw p rotated 70 shifted (.9u,1.5u); draw p rotated 20 shifted (1.5u,.8u); % draw p rotated 95 shifted (.9u,.8u); endpattern; beginpattern(pattern_moonmilk_SKBB); pickup PenC; p:=(-.5u,0){down} .. {up}(-.1666u,0){down}.. {up}(.1666u,0){down} .. {up}(.5u,0); draw p; draw p shifted (0.5u,0.3u); patternxstep(1.0u); patternystep(0.6u); endpattern; beginpattern(pattern_flowstone_ASF); pickup PenC; p:=(-.35u,0){dir -60} .. {dir 60}(0.35u,0); draw p; draw p shifted (0.35u,0.4u); patternxstep(u); patternystep(0.8u); endpattern; beginpattern(pattern_empty); patternbbox(0,0,10,10); patternstep(10,10); endpattern; % symbols def a_water_UIS (expr Path) = T:=identity; thclean Path; thfill Path withpattern pattern_water_UIS; enddef; def a_sump_UIS (expr Path) = T:=identity; thclean Path; thfill Path withpattern pattern_sump_UIS; enddef; def a_flowstone_ASF (expr Path) = T:=identity; thclean Path; thfill Path withpattern pattern_flowstone_ASF; enddef; def a_moonmilk_SKBB (expr Path) = T:=identity; thclean Path; thfill Path withpattern pattern_moonmilk_SKBB; enddef; def a_sand_UIS (expr p) = T:=identity; % thclean p; pickup PenC; path q; q = bbox p; picture tmp_pic; tmp_pic := image( for i = xpart llcorner q step 1u until xpart urcorner q: for j = ypart llcorner q step 1u until ypart urcorner q: draw origin shifted ((i,j) randomized 0.7u) withpen PenC; endfor; endfor; ); clip tmp_pic to p; draw tmp_pic; enddef; def a_debris_UIS (expr Path) = T:=identity; % thclean Path; thfill Path withpattern pattern_debris_SKBB; enddef; def a_bedrock_SKBB (expr Path) = T:=identity; thclean Path; enddef; def a_dimensions_SKBB (expr Path) = T:=identity; thclean Path; enddef; def a_debris_SKBB (expr p) = T:=identity; % thclean p; pickup PenC; path q; q = bbox p; picture tmp_pic; tmp_pic := image( for i = xpart llcorner q step 1u until xpart urcorner q: for j = ypart llcorner q step 1u until ypart urcorner q: draw ((-.2u,0)--(.2u,0)) rotated uniformdeviate(360) shifted ((i,j) randomized 0.6u) withpen PenC; endfor; endfor; ); clip tmp_pic to p; draw tmp_pic; enddef; def a_clay_SKBB (expr p) = T:=identity; pickup PenC; path q, qq; q = bbox p; picture tmp_pic; tmp_pic := image( for i = xpart llcorner q step 1.5u until xpart urcorner q: for j = ypart llcorner q step 1.5u until ypart urcorner q: qq := ((-.25u,0){up}..origin{down}..{up}(0.25u,0)) randomized (u/15) shifted ((i,j) randomized 1.3u); if xpart (p intersectiontimes qq) < 0: thdraw qq; fi; endfor; endfor; ); clip tmp_pic to p; draw tmp_pic; enddef; def a_ice_SKBB (expr p) = T:=identity; pickup PenC; path q; q = bbox p; picture tmp_pic, tmp_ice; pair z; tmp_ice := image ( draw (-.2u,0)--(.2u,0); draw (0,-.2u)--(0,.2u); ); tmp_pic := image( for i = xpart llcorner q step 1.5u until xpart urcorner q: for j = ypart llcorner q step 1.5u until ypart urcorner q: z := ((i,j) randomized 1.3u); if xpart (p intersectiontimes ((bbox tmp_ice) shifted z)) < 0: draw tmp_ice shifted z; fi; endfor; endfor; ); clip tmp_pic to p; draw tmp_pic; enddef; def a_snow_SKBB (expr P) = T:=identity; pickup PenC; path q; q = bbox P; picture tmp_pic, tmp_sn; pair z; tmp_sn := image( pickup PenC; p := origin--(0,.2*u); draw p; draw p rotated (60); draw p rotated (120); draw p rotated (180); draw p rotated (240); draw p rotated (300); p := ((0,.3u)--(0,0.2u)--(0.1u,0.2u)) rotatedaround ((0,0.2u),45); draw p; draw p rotated (60); draw p rotated (120); draw p rotated (180); draw p rotated (240); draw p rotated (300); ); tmp_pic := image( for i = xpart llcorner q step 1.5u until xpart urcorner q: for j = ypart llcorner q step 1.5u until ypart urcorner q: z:=((i,j) randomized 1.3u); if xpart (P intersectiontimes ((bbox tmp_sn) shifted z)) < 0: draw tmp_sn shifted z; fi; endfor; endfor; ); clip tmp_pic to P; draw tmp_pic; enddef; def a_blocks_SKBB (expr p) = T:=identity; pickup PenC; path q, qq; q = bbox p; picture tmp_pic; uu := max(u, (xpart urcorner q - xpart llcorner q)/100, (ypart urcorner q - ypart llcorner q)/100); tmp_pic := image( for i = xpart llcorner q step 2uu until xpart urcorner q: for j = ypart llcorner q step 2uu until ypart urcorner q: qq := punked (((-.5uu,-.5uu)--(.5uu,-.5uu)--(.5uu,.5uu)--(-.5uu,.5uu)--cycle) randomized (uu/2)) rotated uniformdeviate(360) shifted ((i,j) randomized 1.6uu); if xpart (p intersectiontimes qq) < 0: thclean qq; thdraw qq; fi; endfor; endfor; ); clip tmp_pic to p; draw tmp_pic; enddef; def a_blocks_SKBB_ (expr p,o,s_beg,s_end,d_beg,d_end) = T:=identity; orient = 90-o; pickup PenC; path q[], qq; q1 = bbox p; draw q1; draw p; q2 = llcorner q1 .. lrcorner q1 .. urcorner q1 .. ulcorner q1 .. cycle; draw q2; pair zz[]; radius := .5*length(llcorner q1 - urcorner q1); zz1 := .5[llcorner q1,urcorner q1]; zz2 := zz1 - dir(orient)*radius; zz3 = zz1 rotatedaround (zz2,90); draw zz1 withpen pencircle scaled 2mm; draw zz2 withpen pencircle scaled 2mm; draw zz3 withpen pencircle scaled 2mm; picture tmp_pic; tmp_pic := image( j := 0; forever: i := 0; forever: qq := punked (((-.5,-.5)--(.5,-.5)--(.5,.5)--(-.5,.5)--cycle) scaled (0.7(5u-(j/(2*radius))[u*s_beg,u*s_end])) randomized (u/2)) rotated uniformdeviate(360) shifted (((zz3 + (i,j)) rotatedaround (zz3,-o)) randomized 1.6u); draw ((zz3 + (i,j)) rotatedaround (zz3,-o)) withpen pencircle scaled 1mm withcolor red; if xpart (p intersectiontimes qq) < 0: thclean qq; thdraw qq; fi; i := i + (j/(2*radius))[u*d_beg,u*d_end]; exitif i > 2*radius; endfor; j := j + (j/(2*radius))[u*d_beg,u*d_end]; exitif j > 2*radius; endfor; ); % clip tmp_pic to p; draw tmp_pic; enddef; def a_pebbles_SKBB (expr p) = T:=identity; pickup PenC; path q, qq; q = bbox p; picture tmp_pic; tmp_pic := image( for i = xpart llcorner q step 1.5u until xpart urcorner q: for j = ypart llcorner q step 1.5u until ypart urcorner q: qq := (superellipse((.2u,0),(0,.1u),(-.2u,0),(0,.-.1u),.75)) % randomized (u/25) rotated uniformdeviate(360) shifted ((i,j) randomized 0.8u); if xpart (p intersectiontimes qq) < 0: thdraw qq; fi; endfor; endfor; ); clip tmp_pic to p; draw tmp_pic; enddef; def a_u (expr p) = T:=identity; thfill p withcolor red; enddef; %%%%% ENDINPUT thArea %%%%% %%%%% INPUT thText %%%%% %% therion source code %% %% This file defines macros for labels %% %% $Date: 2003/07/01 09:06:44 $ %% $RCSfile: thText.mp,v $ %% $Revision: 1.6 $ %% %% Copyright (C) 2000-2004 Martin Budaj %% %% -------------------------------------------------------------------- %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 2 of the License, or %% any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; if not, write to the Free Software %% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA %% -------------------------------------------------------------------- labeloffset:=0bp; def l_label(expr txt,path) = picture pict,pic; pair pos; numeric dx[],dy[],ptime; string ss,ch; pic := thelabel(txt,(0,0)); strl := xpart(lrcorner pic - llcorner pic); pathl := arclength (path); dx0 := xpart(llcorner pic); % dy0 := ypart(llcorner pic); if strl>pathl: txtzoom := pathl / strl; thwarning("text scaled down to fit the path"); else: txtzoom := 1; fi; zoom := pathl / strl; for p within pic: if textual p: ss := textpart p; dx1 := xpart p; dy1 := ypart p; dx2 := dx1; if xxpart p / yypart p <> 1: message("Error: distorted text!") fi; txtscale := txtzoom * xxpart p; l := length(ss); ptime := 0; for i=0 upto (l - 1): ch := substring(i,i+1) of ss; pict := ch infont fontpart p scaled txtscale; charwidth := xpart (lrcorner pict - llcorner pict) / txtzoom; dy2 := ypart lrcorner pict / txtzoom; ptime := (dx2 - dx0 + 0.5*charwidth) * zoom; t := arctime ptime of (path); pos := point t of path + (dy1+dy2)*txtzoom*unitvector((direction t of path) rotated 90); begingroup % interim labeloffset:=0bp; lab:=thelabel.top(pict,pos); process_label(pos,angle direction t of path); endgroup; dx2 := dx2 + charwidth; endfor; else: message("Strange component of line label!"); fi; endfor; % draw path; enddef; vardef p_label@#(expr txt,pos,rot,mode) = if (mode=1) or (mode=7): interim labeloffset:=(u/8) fi; lab:=thelabel@#(txt, pos); if mode>1: pickup PenD fi; if mode=1: pickup pencircle scaled (u/6); drawdot(pos); process_label(pos,0); elseif mode=2: process_uplabel; elseif mode=3: process_downlabel; elseif mode=4: process_updownlabel; elseif mode=5: process_circledlabel; elseif mode=6: process_boxedlabel; elseif mode=7: process_label(pos,rot); % station name elseif mode=8: process_filledlabel(pos, rot); else: process_label(pos,rot); fi; enddef; % at beginfig: save smartll[], smartur[]; pair smartll[], smartur[]; smart_count=0; numeric smart_count, smart_D; boolean smart_quit, smart_inner_quit; def p_smartlabel (expr txt, pos) = % begingroup; interim bboxmargin:=0.2pt; lab:=thelabel.rt(txt,pos+(0.4u,0)); q:=bbox lab; smart_D := 0; forever: smart_quit := true; smart_inner_quit := false; for i=1 upto smart_count: if smart_overlap(((point 0 of q) shifted (0,smart_D)), ((point 2 of q) shifted (0,smart_D)), smartll[i], smartur[i]) = 1: smart_quit := false; smart_D := smart_D - 3pt; smart_inner_quit := true; fi; exitif smart_inner_quit; endfor; exitif smart_quit; endfor; smart_U := 0; forever: smart_quit := true; smart_inner_quit := false; for i=1 upto smart_count: if smart_overlap(((point 0 of q) shifted (0,smart_U)), ((point 2 of q) shifted (0,smart_U)), smartll[i], smartur[i]) = 1: smart_quit := false; smart_U := smart_U + 3pt; smart_inner_quit := true; fi; exitif smart_inner_quit; endfor; exitif smart_quit; endfor; if (smart_U < -smart_D): smart_D := smart_U; fi; draw lab shifted (0,smart_D); if (abs(smart_D)>3pt): pickup PenB; draw pos{left}..{right}(pos shifted (.4u, smart_D)) dashed withdots scaled 0.2; pickup PenA; drawdot pos; fi; smart_count := smart_count + 1; smartll[smart_count] := point 0 of (q shifted (0,smart_D)); smartur[smart_count] := point 2 of (q shifted (0,smart_D)); % endgroup; enddef; def smart_overlap (expr llA, urA, llB, urB) = if ((xpart llA < xpart urB) and (xpart urA > xpart llB)) and ((ypart llA < ypart urB) and (ypart urA > ypart llB)): 1 else: 0 fi enddef; def p_wallaltitude (expr pprev,pos,pnext,txt) = rot:=angle(unitvector(pnext-pos)+unitvector(pos-pprev)) - 90; pickup PenD; pair zz; % zz:=(pos + 3*unitvector(dir rot)); zz:=(pos + (u/4)*unitvector(dir rot)); draw (pos)--zz; begingroup % interim labeloffset:=2pt; interim labeloffset:=(u/12); if horiz_labels: rot:=rot mod 360; if rot<=22.5: lab:=thelabel.rt(txt, zz); elseif rot<=67.5: lab:=thelabel.urt(txt, zz); elseif rot<=112.5: lab:=thelabel.top(txt, zz); elseif rot<=157.5: lab:=thelabel.ulft(txt, zz); elseif rot<=202.5: lab:=thelabel.lft(txt, zz); elseif rot<=247.5: lab:=thelabel.llft(txt, zz); elseif rot<=292.5: lab:=thelabel.bot(txt, zz); elseif rot<=337.5: lab:=thelabel.lrt(txt, zz); else: lab:=thelabel.rt(txt, zz); fi; else: if (abs rot>90) and (abs rot <=270): rot:=rot-180; lab:=thelabel.lft(txt, pos); else: lab:=thelabel.rt(txt, pos); fi; fi; process_label(pos, if horiz_labels: 0 else: rot fi); endgroup; enddef; %%%%% ENDINPUT thText %%%%% %%%%% INPUT thSpecial %%%%% %% therion source code %% %% This file defines macros for special symbols %% %% $Date: $ %% $RCSfile: $ %% $Revision: $ %% %% Copyright (C) 2004 Martin Budaj %% %% -------------------------------------------------------------------- %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 2 of the License, or %% any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; if not, write to the Free Software %% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA %% -------------------------------------------------------------------- def s_northarrow_SKBB_old (expr rot) = T:=identity; picture tmp_pic; tmp_pic = image ( begingroup interim defaultscale:=3; label(if (lang="sk") or (lang="cz"): "S" else: "N" fi, origin); endgroup; drawarrow (0,-1cm)--(0,1cm); ); draw tmp_pic rotatedaround(origin, -rot); enddef; def s_northarrow_SKBB (expr rot) = T:=identity scaled 0.7 rotated -rot; thdraw (-.5cm,-1cm)--(0,1.5cm)--(.5cm,-1cm)--(0,-.5cm)--cycle; thfill (-.5cm,-1cm)--(0,1.5cm)--(0,-.5cm)--cycle; enddef; def s_scalebar_SKBB (expr l, units, txt) = begingroup interim warningcheck:=0; tmpl:=l / Scale * cm * units / 2; endgroup; pickup PenC; draw (-tmpl,0)--(tmpl,0); draw (-tmpl,0)--(-tmpl,2bp); draw (tmpl,0)--(tmpl,2bp); begingroup interim labeloffset:=2bp; label.top(thTEX(decimal (l) & "\thinspace" & txt),origin); endgroup enddef; def s_scalebar_SM (expr l, units, txt) = begingroup interim warningcheck:=0; tmpl:=l / Scale * cm * units / 2; endgroup; pickup PenC; draw (-tmpl,0)--(tmpl,0); draw (-tmpl,0)--(-tmpl,2bp); draw (tmpl,0)--(tmpl,2bp); draw (0,0)--(0,2bp); begingroup interim labeloffset:=3.5bp; label.top(thTEX(decimal (0)),(-tmpl,0)); label.top(thTEX(decimal (l/2)),origin); label.top(thTEX(decimal (l) & "\thinspace" & txt),(tmpl,0)); endgroup enddef; def s_hgrid_SM (expr xpos, ypos, xsize, ysize) = pickup PenD; draw ( if xpos < 0: 0 else: -5mm fi, 0 ) -- ( if xpos > 0: 0 else: 5mm fi, 0 ); draw ( 0, if ypos < 0: 0 else: -5mm fi ) -- ( 0, if ypos > 0: 0 else: 5mm fi ); enddef; def s_vgrid_SM (expr xpos, ypos, xsize, ysize) = pickup PenD; draw ( if xpos < 0: 0 else: -xsize/2 fi, 0 ) -- ( if xpos > 0: 0 else: xsize/2 fi, 0 ) dashed evenly; enddef; %%%%% ENDINPUT thSpecial %%%%% %%%%% INPUT thTrans %%%%% % default translations let p_station_fixed = p_station_fixed_ASF; let p_station_painted = p_station_painted_SKBB; let p_station_natural = p_station_natural_ASF; let p_station_temporary = p_station_temporary_ASF; let p_waterflow_paleo = p_waterflow_paleo_UIS; let p_waterflow_permanent = p_waterflow_permanent_UIS; let p_waterflow_intermittent = p_waterflow_intermittent_UIS; let p_stalactite = p_stalactite_UIS; let p_stalagmite = p_stalagmite_UIS; let p_pillar = p_pillar_UIS; let p_curtain = p_curtain_UIS; let p_helictite = p_helictite_UIS; let p_sodastraw = p_sodastraw_UIS; let p_crystal = p_crystal_UIS; let p_flowstone = p_flowstone_UIS; let p_moonmilk = p_moonmilk_UIS; let p_wallcalcite = p_wallcalcite_UIS; let p_popcorn = p_popcorn_UIS; let p_disk = p_disk_UIS; let p_gypsum = p_gypsum_NSS; let p_aragonite = p_aragonite_NSS; let p_cavepearl = p_cavepearl_SKBB; let p_gypsumflower = p_gypsumflower_NSS; let p_rimstonepool = p_rimstonepool_ASF; let p_rimstonedam = p_rimstonedam_ASF; let p_anastomosis = p_anastomosis_UIS; let p_karren = p_karren_UIS; let p_scallop = p_scallop_UIS; let p_flute = p_flute_UIS; let p_raft = p_raft_NSS; let p_raftcone = p_raftcone_NSS; let p_spring = p_spring_SKBB; let p_sink = p_sink_SKBB; let p_narrowend = p_narrowend_UIS; let p_lowend = p_lowend_UIS; let p_flowstonechoke = p_flowstonechoke_NSS; let p_breakdownchoke = p_breakdownchoke_NSS; let p_bedrock = p_bedrock_ASF; let p_clay = p_clay_SKBB; let p_sand = p_sand_UIS; let p_pebbles = p_pebbles_UIS; let p_debris = p_debris_UIS; let p_blocks = p_blocks_UIS; let p_water = p_water_UIS; let p_ice = p_ice_UIS; let p_snow = p_snow_SKBB; let p_archeomaterial = p_archeomaterial_UIS; let p_paleomaterial = p_paleomaterial_UIS; let p_guano = p_guano_UIS; let p_vegetabledebris = p_vegetabledebris_ASF; let p_root = p_root_ASF; let p_entrance = p_entrance_UIS; let p_gradient = p_gradient_UIS; let p_rope = p_rope_SKBB; let p_fixedladder = p_fixedladder_SKBB; let p_ropeladder = p_ropeladder_SKBB; let p_steps = p_steps_SKBB; let p_bridge = p_bridge_SKBB; let p_traverse = p_traverse_SKBB; let p_anchor = p_anchor_SKBB; let p_camp = p_camp_SKBB; let p_dig = p_dig_UIS; let p_noequipment = p_noequipment_SKBB; let p_sectionarrow = p_sectionarrow_SKBB; let p_continuation = p_continuation_UIS; let p_airdraught = p_airdraught_UIS; let p_airdraught_winter = p_airdraught_winter_UIS; let p_airdraught_summer = p_airdraught_summer_UIS; let p_station = p_station_SKBB; let l_wall_bedrock = l_wall_bedrock_UIS; let l_wall_sand = l_wall_sand_SKBB; let l_wall_clay = l_wall_clay_SKBB; let l_wall_pebbles = l_wall_pebbles_SKBB; let l_wall_debris = l_wall_debris_SKBB; let l_wall_blocks = l_wall_blocks_SKBB; let l_wall_ice = l_wall_ice_SKBB; let l_wall_underlying = l_wall_underlying_UIS; let l_wall_unsurveyed = l_wall_unsurveyed_SKBB; let l_wall_presumed = l_wall_presumed_UIS; %let l_wall_invisible = l_wall_invisible; let l_waterflow_permanent = l_waterflow_permanent_UIS; let l_waterflow_intermittent = l_waterflow_intermittent_SKBB; let l_waterflow_conjectural = l_waterflow_conjectural_SKBB; let l_border_visible = l_border_visible_SKBB; let l_border_temporary = l_border_temporary_SKBB; let l_border_presumed = l_border_presumed_SKBB; %let l_border_invisible = l_border_invisible; let l_floorstep = l_floorstep_UIS; let l_pit = l_pit_UIS; let l_ceilingstep = l_ceilingstep_SKBB; let l_chimney = l_chimney_UIS; let l_overhang = l_overhang_SKBB; let l_slope = l_slope_SKBB; let l_ceilingmeander = l_ceilingmeander_SKBB; let l_floormeander = l_floormeander_SKBB; let l_contour = l_contour_SKBB; let l_rockborder = l_rockborder_UIS; let l_rockedge = l_rockedge_UIS; let l_flowstone = l_flowstone_UIS; let l_moonmilk = l_moonmilk_UIS; let l_section = l_section_SKBB; let l_survey_cave = l_survey_cave_SKBB; let l_survey_surface = l_survey_surface_SKBB; let l_arrow = l_arrow_SKBB; let l_gradient = l_gradient_UIS; let l_mapconnection = l_mapconnection_SKBB; let a_water = a_water_UIS; let a_sump = a_sump_UIS; let a_sand = a_sand_UIS; let a_debris = a_debris_SKBB; let a_blocks = a_blocks_SKBB; let a_snow = a_snow_SKBB; let a_ice = a_ice_SKBB; let a_pebbles = a_pebbles_SKBB; let a_clay = a_clay_SKBB; let a_bedrock = a_bedrock_SKBB; let a_flowstone = a_flowstone_ASF; let a_moonmilk = a_moonmilk_SKBB; let a_dimensions = a_dimensions_SKBB; let s_northarrow = s_northarrow_SKBB; let s_scalebar = s_scalebar_SKBB; let s_hgrid = s_hgrid_SM; let s_vgrid = s_vgrid_SM; %%%%% ENDINPUT thTrans %%%%% nonstopmode; initsymbol("s_hgrid_SM"); initsymbol("s_northarrow_SKBB"); initsymbol("s_scalebar_SKBB"); initsymbol("s_scalebar_SM"); initsymbol("s_vgrid_SM"); initsymbol("p_airdraught_UIS"); initsymbol("p_airdraught_summer_UIS"); initsymbol("p_airdraught_winter_UIS"); initsymbol("p_anastomosis_UIS"); initsymbol("p_anchor_SKBB"); initsymbol("p_aragonite_NSS"); initsymbol("p_archeomaterial_UIS"); initsymbol("p_bedrock_ASF"); initsymbol("p_blocks_UIS"); initsymbol("p_breakdownchoke_NSS"); initsymbol("p_bridge_SKBB"); initsymbol("p_camp_SKBB"); initsymbol("p_cavepearl_SKBB"); initsymbol("p_clay_SKBB"); initsymbol("p_continuation_UIS"); initsymbol("p_crystal_UIS"); initsymbol("p_curtain_UIS"); initsymbol("p_debris_UIS"); initsymbol("p_dig_UIS"); initsymbol("p_disk_UIS"); initsymbol("p_entrance_UIS"); initsymbol("p_fixedladder_SKBB"); initsymbol("p_flowstone_UIS"); initsymbol("p_flowstonechoke_NSS"); initsymbol("p_flute_UIS"); initsymbol("p_gradient_BCRA"); initsymbol("p_gradient_NSS"); initsymbol("p_gradient_UIS"); initsymbol("p_guano_UIS"); initsymbol("p_gypsum_NSS"); initsymbol("p_gypsumflower_NSS"); initsymbol("p_helictite_UIS"); initsymbol("p_ice_UIS"); initsymbol("p_karren_UIS"); initsymbol("p_lowend_NSS"); initsymbol("p_lowend_UIS"); initsymbol("p_moonmilk_UIS"); initsymbol("p_narrowend_UIS"); initsymbol("p_noequipment_SKBB"); initsymbol("p_paleomaterial_UIS"); initsymbol("p_pebbles_UIS"); initsymbol("p_pillar_UIS"); initsymbol("p_popcorn_UIS"); initsymbol("p_raft_NSS"); initsymbol("p_raftcone_NSS"); initsymbol("p_rimstonedam_ASF"); initsymbol("p_rimstonepool_ASF"); initsymbol("p_root_ASF"); initsymbol("p_rope_SKBB"); initsymbol("p_ropeladder_SKBB"); initsymbol("p_sand_UIS"); initsymbol("p_scallop_UIS"); initsymbol("p_sink_SKBB"); initsymbol("p_snow_SKBB"); initsymbol("p_sodastraw_UIS"); initsymbol("p_spring_SKBB"); initsymbol("p_stalactite_UIS"); initsymbol("p_stalagmite_UIS"); initsymbol("p_station_SKBB"); initsymbol("p_station_fixed_ASF"); initsymbol("p_station_natural_ASF"); initsymbol("p_station_painted_SKBB"); initsymbol("p_station_temporary_ASF"); initsymbol("p_station_temporary_SKBB"); initsymbol("p_steps_SKBB"); initsymbol("p_traverse_SKBB"); initsymbol("p_vegetabledebris_ASF"); initsymbol("p_wallcalcite_UIS"); initsymbol("p_water_UIS"); initsymbol("p_waterflow_intermittent_UIS"); initsymbol("p_waterflow_paleo_UIS"); initsymbol("p_waterflow_permanent_UIS"); initsymbol("l_arrow_SKBB"); initsymbol("l_border_presumed_SKBB"); initsymbol("l_border_temporary_SKBB"); initsymbol("l_border_visible_SKBB"); initsymbol("l_ceilingmeander_SKBB"); initsymbol("l_ceilingstep_SKBB"); initsymbol("l_chimney_UIS"); initsymbol("l_contour_SKBB"); initsymbol("l_contour_UIS"); initsymbol("l_floormeander_SKBB"); initsymbol("l_floorstep_UIS"); initsymbol("l_flowstone_UIS"); initsymbol("l_gradient_BCRA"); initsymbol("l_gradient_UIS"); initsymbol("l_mapconnection_SKBB"); initsymbol("l_moonmilk_UIS"); initsymbol("l_overhang_SKBB"); initsymbol("l_pit_UIS"); initsymbol("l_rockborder_UIS"); initsymbol("l_rockedge_UIS"); initsymbol("l_rope_SKBB"); initsymbol("l_section_SKBB"); initsymbol("l_slope_BCRA"); initsymbol("l_slope_SKBB"); initsymbol("l_survey_cave_SKBB"); initsymbol("l_survey_cave_UIS"); initsymbol("l_survey_surface_SKBB"); initsymbol("l_wall_bedrock_UIS"); initsymbol("l_wall_blocks_SKBB"); initsymbol("l_wall_clay_SKBB"); initsymbol("l_wall_debris_SKBB"); initsymbol("l_wall_ice_SKBB"); initsymbol("l_wall_pebbles_SKBB"); initsymbol("l_wall_presumed_UIS"); initsymbol("l_wall_sand_SKBB"); initsymbol("l_wall_underlying_UIS"); initsymbol("l_wall_unsurveyed_SKBB"); initsymbol("l_waterflow_conjectural_SKBB"); initsymbol("l_waterflow_intermittent_SKBB"); initsymbol("l_waterflow_permanent_UIS"); initsymbol("a_bedrock_SKBB"); initsymbol("a_blocks_SKBB"); initsymbol("a_clay_SKBB"); initsymbol("a_debris_SKBB"); initsymbol("a_debris_UIS"); initsymbol("a_dimensions_SKBB"); initsymbol("a_flowstone_ASF"); initsymbol("a_ice_SKBB"); initsymbol("a_moonmilk_SKBB"); initsymbol("a_pebbles_SKBB"); initsymbol("a_sand_UIS"); initsymbol("a_snow_SKBB"); initsymbol("a_sump_UIS"); initsymbol("a_water_UIS"); lang:="en"; % user defined symbols defaults % end of user defined symbols defaultfont:="cmss10"; transparency:=true; background:=(1.00000,1.00000,1.00000); def_transparent_rgb(tr_bg, 1.00000, 1.00000, 1.00000); warningcheck := 1; current_scrap := "scrap.types@"; ATTR__scrap := "scrap.types"; beginfig(1); current_src := "types.th2 [190]"; string area_border[]; area_border[1] := "l18-413-242"; area_border[2] := "l6-342-1086"; area_border[3] := "l19-409-159"; area_border[4] := "l7-497-1096"; a_ice(buildcycle(((-35.27,-148.11) .. controls (-18.21,-149.57) and (28.60,-149.62) .. (38.11,-148.36) ), ((-28.35,-225.80) .. controls (-35.33,-193.72) and (-19.55,-75.41) .. (-30.56,-35.43) .. controls (-46.29,21.70) and (-23.71,163.34) .. (-34.84,219.58) ), ((-36.61,-181.04) .. controls (-23.52,-182.13) and (31.21,-181.33) .. (39.14,-179.68) ), ((36.29,-223.73) .. controls (25.24,-177.41) and (46.29,-75.31) .. (32.89,-33.77) .. controls (19.49,7.78) and (38.59,158.65) .. (31.77,222.85) ))); current_src := "types.th2 [183]"; string area_border[]; area_border[1] := "l19-409-159"; area_border[2] := "l6-342-1086"; area_border[3] := "l46-411-69"; area_border[4] := "l7-497-1096"; a_snow(buildcycle(((-36.61,-181.04) .. controls (-23.52,-182.13) and (31.21,-181.33) .. (39.14,-179.68) ), ((-28.35,-225.80) .. controls (-35.33,-193.72) and (-19.55,-75.41) .. (-30.56,-35.43) .. controls (-46.29,21.70) and (-23.71,163.34) .. (-34.84,219.58) ), ((-36.75,-216.34) .. controls (-19.29,-217.01) and (29.90,-217.83) .. (40.20,-215.77) ), ((36.29,-223.73) .. controls (25.24,-177.41) and (46.29,-75.31) .. (32.89,-33.77) .. controls (19.49,7.78) and (38.59,158.65) .. (31.77,222.85) ))); current_src := "types.th2 [168]"; string area_border[]; area_border[1] := "l15-428-512"; area_border[2] := "l6-342-1086"; area_border[3] := "l16-411-424"; area_border[4] := "l7-497-1096"; a_bedrock(buildcycle(((-35.27,-41.41) .. controls (-15.83,-42.46) and (30.16,-40.53) .. (39.66,-37.68) ), ((-28.35,-225.80) .. controls (-35.33,-193.72) and (-19.55,-75.41) .. (-30.56,-35.43) .. controls (-46.29,21.70) and (-23.71,163.34) .. (-34.84,219.58) ), ((-32.24,-76.30) .. controls (-15.96,-78.16) and (35.18,-75.40) .. (41.91,-73.36) ), ((36.29,-223.73) .. controls (25.24,-177.41) and (46.29,-75.31) .. (32.89,-33.77) .. controls (19.49,7.78) and (38.59,158.65) .. (31.77,222.85) ))); current_src := "types.th2 [161]"; string area_border[]; area_border[1] := "l16-411-424"; area_border[2] := "l6-342-1086"; area_border[3] := "l17-420-327"; area_border[4] := "l7-497-1096"; a_flowstone(buildcycle(((-32.24,-76.30) .. controls (-15.96,-78.16) and (35.18,-75.40) .. (41.91,-73.36) ), ((-28.35,-225.80) .. controls (-35.33,-193.72) and (-19.55,-75.41) .. (-30.56,-35.43) .. controls (-46.29,21.70) and (-23.71,163.34) .. (-34.84,219.58) ), ((-33.15,-113.59) .. controls (-6.56,-115.77) and (30.32,-114.70) .. (40.22,-112.64) ), ((36.29,-223.73) .. controls (25.24,-177.41) and (46.29,-75.31) .. (32.89,-33.77) .. controls (19.49,7.78) and (38.59,158.65) .. (31.77,222.85) ))); current_src := "types.th2 [152]"; string area_border[]; area_border[1] := "l17-420-327"; area_border[2] := "l6-342-1086"; area_border[3] := "l18-413-242"; area_border[4] := "l7-497-1096"; area_border[5] := "l7-497-1096"; area_border[6] := "l7-497-1096"; a_moonmilk(buildcycle(((-33.15,-113.59) .. controls (-6.56,-115.77) and (30.32,-114.70) .. (40.22,-112.64) ), ((-28.35,-225.80) .. controls (-35.33,-193.72) and (-19.55,-75.41) .. (-30.56,-35.43) .. controls (-46.29,21.70) and (-23.71,163.34) .. (-34.84,219.58) ), ((-35.27,-148.11) .. controls (-18.21,-149.57) and (28.60,-149.62) .. (38.11,-148.36) ), ((36.29,-223.73) .. controls (25.24,-177.41) and (46.29,-75.31) .. (32.89,-33.77) .. controls (19.49,7.78) and (38.59,158.65) .. (31.77,222.85) ), ((36.29,-223.73) .. controls (25.24,-177.41) and (46.29,-75.31) .. (32.89,-33.77) .. controls (19.49,7.78) and (38.59,158.65) .. (31.77,222.85) ), ((36.29,-223.73) .. controls (25.24,-177.41) and (46.29,-75.31) .. (32.89,-33.77) .. controls (19.49,7.78) and (38.59,158.65) .. (31.77,222.85) ))); current_src := "types.th2 [82]"; string area_border[]; area_border[1] := "l8-427-1151"; area_border[2] := "l6-342-1086"; area_border[3] := "l9-429-1051"; area_border[4] := "l7-497-1096"; a_water(buildcycle(((-35.94,206.88) .. controls (-19.72,212.15) and (23.09,216.44) .. (40.20,209.03) ), ((-28.35,-225.80) .. controls (-35.33,-193.72) and (-19.55,-75.41) .. (-30.56,-35.43) .. controls (-46.29,21.70) and (-23.71,163.34) .. (-34.84,219.58) ), ((-35.25,167.61) .. controls (-17.04,172.11) and (23.40,174.80) .. (38.11,170.54) ), ((36.29,-223.73) .. controls (25.24,-177.41) and (46.29,-75.31) .. (32.89,-33.77) .. controls (19.49,7.78) and (38.59,158.65) .. (31.77,222.85) ))); current_src := "types.th2 [75]"; string area_border[]; area_border[1] := "l9-429-1051"; area_border[2] := "l6-342-1086"; area_border[3] := "l10-429-957"; area_border[4] := "l7-497-1096"; a_sump(buildcycle(((-35.25,167.61) .. controls (-17.04,172.11) and (23.40,174.80) .. (38.11,170.54) ), ((-28.35,-225.80) .. controls (-35.33,-193.72) and (-19.55,-75.41) .. (-30.56,-35.43) .. controls (-46.29,21.70) and (-23.71,163.34) .. (-34.84,219.58) ), ((-36.21,137.07) .. controls (-18.73,133.23) and (30.04,135.18) .. (37.55,138.41) ), ((36.29,-223.73) .. controls (25.24,-177.41) and (46.29,-75.31) .. (32.89,-33.77) .. controls (19.49,7.78) and (38.59,158.65) .. (31.77,222.85) ))); current_src := "types.th2 [68]"; string area_border[]; area_border[1] := "l10-429-957"; area_border[2] := "l6-342-1086"; area_border[3] := "l11-426-861"; area_border[4] := "l7-497-1096"; a_clay(buildcycle(((-36.21,137.07) .. controls (-18.73,133.23) and (30.04,135.18) .. (37.55,138.41) ), ((-28.35,-225.80) .. controls (-35.33,-193.72) and (-19.55,-75.41) .. (-30.56,-35.43) .. controls (-46.29,21.70) and (-23.71,163.34) .. (-34.84,219.58) ), ((-39.90,100.15) .. controls (-23.22,97.10) and (27.56,95.50) .. (35.48,97.54) ), ((36.29,-223.73) .. controls (25.24,-177.41) and (46.29,-75.31) .. (32.89,-33.77) .. controls (19.49,7.78) and (38.59,158.65) .. (31.77,222.85) ))); current_src := "types.th2 [61]"; string area_border[]; area_border[1] := "l11-426-861"; area_border[2] := "l6-342-1086"; area_border[3] := "l12-412-775"; area_border[4] := "l7-497-1096"; a_sand(buildcycle(((-39.90,100.15) .. controls (-23.22,97.10) and (27.56,95.50) .. (35.48,97.54) ), ((-28.35,-225.80) .. controls (-35.33,-193.72) and (-19.55,-75.41) .. (-30.56,-35.43) .. controls (-46.29,21.70) and (-23.71,163.34) .. (-34.84,219.58) ), ((-39.24,64.46) .. controls (-18.60,62.23) and (23.05,62.54) .. (36.13,63.44) ), ((36.29,-223.73) .. controls (25.24,-177.41) and (46.29,-75.31) .. (32.89,-33.77) .. controls (19.49,7.78) and (38.59,158.65) .. (31.77,222.85) ))); current_src := "types.th2 [54]"; string area_border[]; area_border[1] := "l12-412-775"; area_border[2] := "l6-342-1086"; area_border[3] := "l13-424-689"; area_border[4] := "l7-497-1096"; a_pebbles(buildcycle(((-39.24,64.46) .. controls (-18.60,62.23) and (23.05,62.54) .. (36.13,63.44) ), ((-28.35,-225.80) .. controls (-35.33,-193.72) and (-19.55,-75.41) .. (-30.56,-35.43) .. controls (-46.29,21.70) and (-23.71,163.34) .. (-34.84,219.58) ), ((-42.16,30.33) .. controls (-11.20,27.78) and (30.84,28.49) .. (35.99,29.72) ), ((36.29,-223.73) .. controls (25.24,-177.41) and (46.29,-75.31) .. (32.89,-33.77) .. controls (19.49,7.78) and (38.59,158.65) .. (31.77,222.85) ))); current_src := "types.th2 [47]"; string area_border[]; area_border[1] := "l13-424-689"; area_border[2] := "l6-342-1086"; area_border[3] := "l14-414-607"; area_border[4] := "l7-497-1096"; a_debris(buildcycle(((-42.16,30.33) .. controls (-11.20,27.78) and (30.84,28.49) .. (35.99,29.72) ), ((-28.35,-225.80) .. controls (-35.33,-193.72) and (-19.55,-75.41) .. (-30.56,-35.43) .. controls (-46.29,21.70) and (-23.71,163.34) .. (-34.84,219.58) ), ((-39.12,-4.56) .. controls (-22.85,-5.23) and (29.49,-4.04) .. (37.41,-2.00) ), ((36.29,-223.73) .. controls (25.24,-177.41) and (46.29,-75.31) .. (32.89,-33.77) .. controls (19.49,7.78) and (38.59,158.65) .. (31.77,222.85) ))); current_src := "types.th2 [40]"; string area_border[]; area_border[1] := "l14-414-607"; area_border[2] := "l6-342-1086"; area_border[3] := "l15-428-512"; area_border[4] := "l7-497-1096"; a_blocks(buildcycle(((-39.12,-4.56) .. controls (-22.85,-5.23) and (29.49,-4.04) .. (37.41,-2.00) ), ((-28.35,-225.80) .. controls (-35.33,-193.72) and (-19.55,-75.41) .. (-30.56,-35.43) .. controls (-46.29,21.70) and (-23.71,163.34) .. (-34.84,219.58) ), ((-35.27,-41.41) .. controls (-15.83,-42.46) and (30.16,-40.53) .. (39.66,-37.68) ), ((36.29,-223.73) .. controls (25.24,-177.41) and (46.29,-75.31) .. (32.89,-33.77) .. controls (19.49,7.78) and (38.59,158.65) .. (31.77,222.85) ))); ATTR__id := "l8-427-1151"; l_border_visible(((-35.94,206.88) .. controls (-19.72,212.15) and (23.09,216.44) .. (40.20,209.03) )); ATTR__id := "l9-429-1051"; l_border_visible(((-35.25,167.61) .. controls (-17.04,172.11) and (23.40,174.80) .. (38.11,170.54) )); ATTR__id := "l10-429-957"; l_border_visible(((-36.21,137.07) .. controls (-18.73,133.23) and (30.04,135.18) .. (37.55,138.41) )); ATTR__id := "l11-426-861"; l_border_visible(((-39.90,100.15) .. controls (-23.22,97.10) and (27.56,95.50) .. (35.48,97.54) )); ATTR__id := "l12-412-775"; l_border_visible(((-39.24,64.46) .. controls (-18.60,62.23) and (23.05,62.54) .. (36.13,63.44) )); ATTR__id := "l13-424-689"; l_border_visible(((-42.16,30.33) .. controls (-11.20,27.78) and (30.84,28.49) .. (35.99,29.72) )); ATTR__id := "l14-414-607"; l_border_visible(((-39.12,-4.56) .. controls (-22.85,-5.23) and (29.49,-4.04) .. (37.41,-2.00) )); ATTR__id := "l15-428-512"; l_border_visible(((-35.27,-41.41) .. controls (-15.83,-42.46) and (30.16,-40.53) .. (39.66,-37.68) )); ATTR__id := "l16-411-424"; l_border_visible(((-32.24,-76.30) .. controls (-15.96,-78.16) and (35.18,-75.40) .. (41.91,-73.36) )); ATTR__id := "l17-420-327"; l_border_visible(((-33.15,-113.59) .. controls (-6.56,-115.77) and (30.32,-114.70) .. (40.22,-112.64) )); ATTR__id := "l18-413-242"; l_border_visible(((-35.27,-148.11) .. controls (-18.21,-149.57) and (28.60,-149.62) .. (38.11,-148.36) )); ATTR__id := "l19-409-159"; l_border_visible(((-36.61,-181.04) .. controls (-23.52,-182.13) and (31.21,-181.33) .. (39.14,-179.68) )); ATTR__id := "l46-411-69"; l_border_visible(((-36.75,-216.34) .. controls (-19.29,-217.01) and (29.90,-217.83) .. (40.20,-215.77) )); endfig; beginfig(2); draw_upscrap(1)(1,((36.29,-223.73) .. controls (25.24,-177.41) and (46.29,-75.31) .. (32.89,-33.77) .. controls (19.49,7.78) and (38.59,158.65) .. (31.77,222.85) ), 1,reverse ((-28.35,-225.80) .. controls (-35.33,-193.72) and (-19.55,-75.41) .. (-30.56,-35.43) .. controls (-46.29,21.70) and (-23.71,163.34) .. (-34.84,219.58) )); draw_downscrap; endfig; beginfig(3); ATTR__id := "l6-342-1086"; l_wall_bedrock(((-28.35,-225.80) .. controls (-35.33,-193.72) and (-19.55,-75.41) .. (-30.56,-35.43) .. controls (-46.29,21.70) and (-23.71,163.34) .. (-34.84,219.58) )); ATTR__id := "l7-497-1096"; l_wall_bedrock(((36.29,-223.73) .. controls (25.24,-177.41) and (46.29,-75.31) .. (32.89,-33.77) .. controls (19.49,7.78) and (38.59,158.65) .. (31.77,222.85) )); endfig; beginfig(4); ATTR__id := ""; p_label.top(btex \thlabel\thhugesize \thfb\char84 \char104 \char101 \char114 \char105 \char111 \char110 \ \char97 \char114 \char101 \char97 \ \char116 \char121 \char112 \char101 \char115 \mainfont{} etex,(21.79,231.50),0.0,0); p_label.rt(btex \thlabel\thnormalsize \thfb\char98 \char101 \char100 \char114 \char111 \char99 \char107 \mainfont{} etex,(43.37,-56.69),0.0,0); p_label.rt(btex \thlabel\thnormalsize \thfb\char102 \char108 \char111 \char119 \char115 \char116 \char111 \char110 \char101 \mainfont{} etex,(40.89,-95.58),0.0,0); p_label.rt(btex \thlabel\thnormalsize \thfb\char109 \char111 \char111 \char110 \char109 \char105 \char108 \char107 \mainfont{} etex,(38.40,-133.68),0.0,0); p_label.rt(btex \thlabel\thnormalsize \thfb\char105 \char99 \char101 \mainfont{} etex,(37.05,-165.42),0.0,0); p_label.rt(btex \thlabel\thnormalsize \thfb\char115 \char110 \char111 \char119 \mainfont{} etex,(37.71,-201.11),0.0,0); p_label.rt(btex \thlabel\thnormalsize \thfb\char119 \char97 \char116 \char101 \char114 \mainfont{} etex,(39.55,189.59),0.0,0); p_label.rt(btex \thlabel\thnormalsize \thfb\char115 \char117 \char109 \char112 \mainfont{} etex,(39.03,153.49),0.0,0); p_label.rt(btex \thlabel\thnormalsize \thfb\char99 \char108 \char97 \char121 \mainfont{} etex,(36.92,116.99),0.0,0); p_label.rt(btex \thlabel\thnormalsize \thfb\char115 \char97 \char110 \char100 \mainfont{} etex,(35.61,80.09),0.0,0); p_label.rt(btex \thlabel\thnormalsize \thfb\char112 \char101 \char98 \char98 \char108 \char101 \char115 \mainfont{} etex,(34.29,43.99),0.0,0); p_label.rt(btex \thlabel\thnormalsize \thfb\char100 \char101 \char98 \char114 \char105 \char115 \mainfont{} etex,(34.14,11.46),0.0,0); p_label.rt(btex \thlabel\thnormalsize \thfb\char98 \char108 \char111 \char99 \char107 \char115 \mainfont{} etex,(37.95,-21.43),0.0,0); endfig; beginfig(5); s_northarrow(0); endfig; beginfig(6); s_scalebar(10, 1, "\thfb\char109 \mainfont{}"); endfig; background:=(1.00000,1.00000,1.00000); transparency:=false; end; therion/samples/areas/thTMPDIR/data.mpx0000644000076400010400000001156411145241276021030 0ustar userAdministrators% Written by DVItoMP, Version 0.64 (Web2c 7.5.2) begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture; string _n[]; vardef _s(expr _t,_f,_m,_x,_y)= addto _p also _t infont _f scaled _m shifted (_x,_y); enddef; _n0="cmss10"; _s("Therion",_n0,2.00000,0.0000,0.0000); _s("a",_n0,2.00000,71.1777,0.0000); _s("rea",_n0,2.00000,80.1995,0.0000); _s("t",_n0,2.00000,112.0800,0.0000); _s("yp",_n0,2.00000,118.7217,0.0000); _s("es",_n0,2.00000,138.7578,0.0000); setbounds _p to (0,-3.8744)--(155.2515,-3.8744)-- (155.2515,13.8370)--(0,13.8370)--cycle; _p endgroup mpxbreak begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture; string _n[]; vardef _s(expr _t,_f,_m,_x,_y)= addto _p also _t infont _f scaled _m shifted (_x,_y); enddef; _n1="cmss10"; _s("b",_n1,1.00000,0.0000,0.0000); _s("edro",_n1,1.00000,5.4241,0.0000); _s("ck",_n1,1.00000,23.6613,0.0000); setbounds _p to (0,0.0000)--(32.9598,0.0000)-- (32.9598,6.9185)--(0,6.9185)--cycle; _p endgroup mpxbreak begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture; string _n[]; vardef _s(expr _t,_f,_m,_x,_y)= addto _p also _t infont _f scaled _m shifted (_x,_y); enddef; _n1="cmss10"; _s(char13&"o",_n1,1.00000,0.0000,0.0000); _s("wstone",_n1,1.00000,10.0457,0.0000); setbounds _p to (0,0.0000)--(38.8267,0.0000)-- (38.8267,6.9185)--(0,6.9185)--cycle; _p endgroup mpxbreak begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture; string _n[]; vardef _s(expr _t,_f,_m,_x,_y)= addto _p also _t infont _f scaled _m shifted (_x,_y); enddef; _n1="cmss10"; _s("mo",_n1,1.00000,0.0000,0.0000); _s("onmilk",_n1,1.00000,13.1729,0.0000); setbounds _p to (0,0.0000)--(40.8469,0.0000)-- (40.8469,6.9185)--(0,6.9185)--cycle; _p endgroup mpxbreak begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture; string _n[]; vardef _s(expr _t,_f,_m,_x,_y)= addto _p also _t infont _f scaled _m shifted (_x,_y); enddef; _n1="cmss10"; _s("ice",_n1,1.00000,0.0000,0.0000); setbounds _p to (0,0.0000)--(11.2356,0.0000)-- (11.2356,6.7683)--(0,6.7683)--cycle; _p endgroup mpxbreak begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture; string _n[]; vardef _s(expr _t,_f,_m,_x,_y)= addto _p also _t infont _f scaled _m shifted (_x,_y); enddef; _n1="cmss10"; _s("sno",_n1,1.00000,0.0000,0.0000); _s("w",_n1,1.00000,13.6710,0.0000); setbounds _p to (0,0.0000)--(20.4788,0.0000)-- (20.4788,4.4278)--(0,4.4278)--cycle; _p endgroup mpxbreak begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture; string _n[]; vardef _s(expr _t,_f,_m,_x,_y)= addto _p also _t infont _f scaled _m shifted (_x,_y); enddef; _n1="cmss10"; _s("w",_n1,1.00000,0.0000,0.0000); _s("ater",_n1,1.00000,6.5311,0.0000); setbounds _p to (0,0.0000)--(22.7481,0.0000)-- (22.7481,5.6930)--(0,5.6930)--cycle; _p endgroup mpxbreak begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture; string _n[]; vardef _s(expr _t,_f,_m,_x,_y)= addto _p also _t infont _f scaled _m shifted (_x,_y); enddef; _n1="cmss10"; _s("sump",_n1,1.00000,0.0000,0.0000); setbounds _p to (0,-1.9372)--(22.0285,-1.9372)-- (22.0285,4.4278)--(0,4.4278)--cycle; _p endgroup mpxbreak begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture; string _n[]; vardef _s(expr _t,_f,_m,_x,_y)= addto _p also _t infont _f scaled _m shifted (_x,_y); enddef; _n1="cmss10"; _s("cla",_n1,1.00000,0.0000,0.0000); _s("y",_n1,1.00000,11.3187,0.0000); setbounds _p to (0,-1.9372)--(15.9126,-1.9372)-- (15.9126,6.9185)--(0,6.9185)--cycle; _p endgroup mpxbreak begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture; string _n[]; vardef _s(expr _t,_f,_m,_x,_y)= addto _p also _t infont _f scaled _m shifted (_x,_y); enddef; _n1="cmss10"; _s("sand",_n1,1.00000,0.0000,0.0000); setbounds _p to (0,0.0000)--(18.9014,0.0000)-- (18.9014,6.9185)--(0,6.9185)--cycle; _p endgroup mpxbreak begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture; string _n[]; vardef _s(expr _t,_f,_m,_x,_y)= addto _p also _t infont _f scaled _m shifted (_x,_y); enddef; _n1="cmss10"; _s("p",_n1,1.00000,0.0000,0.0000); _s("ebbles",_n1,1.00000,5.4241,0.0000); setbounds _p to (0,-1.9372)--(30.7735,-1.9372)-- (30.7735,6.9185)--(0,6.9185)--cycle; _p endgroup mpxbreak begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture; string _n[]; vardef _s(expr _t,_f,_m,_x,_y)= addto _p also _t infont _f scaled _m shifted (_x,_y); enddef; _n1="cmss10"; _s("deb",_n1,1.00000,0.0000,0.0000); _s("ris",_n1,1.00000,14.4458,0.0000); setbounds _p to (0,0.0000)--(24.0487,0.0000)-- (24.0487,6.9185)--(0,6.9185)--cycle; _p endgroup mpxbreak begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture; string _n[]; vardef _s(expr _t,_f,_m,_x,_y)= addto _p also _t infont _f scaled _m shifted (_x,_y); enddef; _n1="cmss10"; _s("blo",_n1,1.00000,0.0000,0.0000); _s("cks",_n1,1.00000,12.7854,0.0000); setbounds _p to (0,0.0000)--(25.9029,0.0000)-- (25.9029,6.9185)--(0,6.9185)--cycle; _p endgroup mpxbreak therion/samples/areas/thTMPDIR/data.pdf0000644000076400010400000005026111145241300020756 0ustar userAdministrators%PDF-1.5 %ÐÔÅØ 1 0 obj << /GS0 << /Type /ExtGState /ca 1 /BM /Normal >> /GS1 << /Type /ExtGState /ca 0.75 /BM /Normal >> /GS2 << /Type /ExtGState /ca 0.75 /BM /Normal >> >> endobj 2 0 obj << /S /Transparency /K true >> endobj 3 0 obj << /Type /OCG /Name >> endobj 4 0 obj << /Type /OCG /Name >> endobj 5 0 obj << /Type /OCG /Name >> endobj 6 0 obj << /Type /OCG /Name >> endobj 8 0 obj << /Type /Pattern /PaintType 1 /PatternType 1 /TilingType 1 /Matrix [0.7071 0.7071 -0.7071 0.7071 0 0] /BBox [-0.12003 -0.12003 0.12003 10.12003] /XStep 2.15991 /YStep 10.24005 /Resources << /ProcSet [/PDF ] >> /Length 47 /Filter /FlateDecode >> stream xÚ3PHW0PpWÐ5Ð34‚’¹ Hœ™måèbáYêYX9 iZ 1òõ endstream endobj 9 0 obj << /Type /Pattern /PaintType 1 /PatternType 1 /TilingType 1 /Matrix [0.7071 0.7071 -0.7071 0.7071 0 0] /BBox [-0.12003 -0.12003 3.12003 3.12003] /XStep 3.24005 /YStep 3.24005 /Resources << /ProcSet [/PDF ] >> /Length 66 /Filter /FlateDecode >> stream xÚ3PHW0PpWÐ5Ð34‚’¹ Hœ™m aëbrŒô,,€œ …4-¨Ô@]Lac ” 6 Ê›8Ã!• endstream endobj 10 0 obj << /Type /Pattern /PaintType 1 /PatternType 1 /TilingType 1 /Matrix [1 0 0 1 0 0] /BBox [-6.3 -2.30043 12.3 3.90004] /XStep 12 /YStep 7.20007 /Resources << /ProcSet [/PDF ] >> /Length 109 /Filter /FlateDecode >> stream xÚ]K €0 D¯2hI[‰zApÕ¥¸ª ®½¾ýl»Hx™7ÂÂÒŒûkœ†°A±&Š>®Ge5iwœK¡=J¥Š¹CiøNsúKÅÌCKÙ‡*Zÿ§Æv( ˆp2/ endstream endobj 11 0 obj << /Type /Pattern /PaintType 1 /PatternType 1 /TilingType 1 /Matrix [1 0 0 1 0 0] /BBox [-4.50008 -2.72491 8.70015 5.09993] /XStep 12 /YStep 9.60004 /Resources << /ProcSet [/PDF ] >> /Length 93 /Filter /FlateDecode >> stream xÚM‹A €0¿2è²í¶Ú‚'âIA<û}[*è!aBå@Pé¸YÖv> stream xÚí[9,GröûW”½Àó>l!=C† kQÞ,@ÑÐßßïÈš®ê™žåaŠ$Ö7yEFFDFDFÿ|ësOs {êÛÛ­=•­´½Îm¨!–±·¹õº€‰~y{½µ´—¹¥÷>¶Ù=´·ºõ²÷¾L1*:Ö´Wº÷¶å°çPöÖ·±G~ç½ô‹Z,¾ç²½d‚ÄAa‹Xªlq NôzKy/UTaÍΉ0kø W‰ûè•ÛžQŒ[í{Çœa/i;möõöoÙþvûùÖûµÁÈÂÿc5n9íyê›+îy°Wi$÷„ž}£WÞGÛ0cÀ6òžûvŒÎï0¶~÷zGßo F¢8¶÷–ÕR9çD¯¼7Î|FϾѫiÿyïyë:SÐRâvÞñëeÿϾ_oÿmv…½mÿwû÷ÿØÂöŸ·¸ýÿýÏ-†íŸ¹ °9ç}F°1â|ôýöm‹ dîÛÚžÏ}4„«6t{?À½‡ô´Oö0è¯{i-[ ”Ü·¤èÔÇ¢>(o UáÜŒ„˜ã¯À·›ûúH3j܃úiýÅeOm«cÏ™$Ï=èÔ§ñÐ0rªP <:öù êépÑã$g¡ù(\}¡sËC/ülàAŸÔ7¶7ê%…–ZV²§:ÀçŸP»ÈQmŸikÙŸ5ót ôÐÕ%møN_bçžia¢”¹ý.a?tû ²ùã‚ZöY@€ì¾'­Èé@Oí‰ <öâö-Ìý|¤¾ ÷úy{ßC¼ÿÐrZÃ^Ó¹•¦× ìi+eS¯T'¯IQa/¡b=ï@£m{ij,œö!ZôwöÂbÝc®»é”ër(¾Ö¿îL£EïYõ!Ű•†Ø`ì3<ëëž·ÜI:{|Ò&ÛõåüeO{T]Iïs|Òö¾v¢…Êsïõ‘òB]w ;â ":ÏÇ„}$K MäÃvÖuoñ‘FS›Úã¶L–Zرñêô¸‡ÝUê£³Š”‡­z ‘1·0ý©óÖ{;мoä“>RZœæ>Ÿ¶¶ƒî/V©ÜûÓ><¼Ïóië†BÓ Ôã‡]$ÝžnSßD1ÀØ\?ì(Ë$ëÉ•Gò¸·5O£o£¾Z”¤øa¦Ïmê;hþ<öq¯hƒÀxÍÕ—X4=î|Í£½\®5\±úÊZ¨×ѧ}²ü™|‰åg­…tüƒU¯ƒ§}:mÆ}žO[ï4ú«tFƇ]]µnSßÈKcSú°^”“#— ±0(íö¶æ)‡›°ÖI\ûq‹>µ©/N!­±{‚åôšêkÜíä\w¾æÑ^®nH¢ÄiO(ËyÚ'ÉE ‡¾Ö išó¬¹ì_ôi´B÷y>k=Ñ O:'ó躋Vy¹M}ecÅûënà@¬‘–{cP:ò‡½yêˆõÉë@¿fù°GÓç6õí´™û¸Wºyq­©¾Â¦éqçžÇ{±KøÃßâöÓ/pmøïÿþ´ùã_¤—_"ŽêK$A8†n‚œ "·Ä…JH³#–w· Ò‹=ó¡4aY!Å`T©K ßÎðû WΠë²Ý­)bCH6ä°Ä"»úz»ÀäÂD¬VéVEzç ÑÙû¯¿\¿Ý.ë\(øŠØ˜Ÿt”\éqEFLÒ¿(?†I¾Þ.ð9€ƒ<ìµ)˜m:v¶¥ªÈó¡댛/PŒá ÀøC¸oК¥ù c rñÃ?A>^Ù~Àhü3·_^ÿö'×¾àÚ3m:O+µ¼Sp¡í« J›À§9ý¨C‹F3¿{j᜚8§,ž‡ößoÖ$.®Jô4\ÿ’9ï@¡$lU.\Q@—-z8ƒ¯$pHÿdçï`ç3ѬŒÜ ”-ñ†«_oÀñKÚÛ5" +LØ%ÌzF÷ïüÐ+*V¬2Î$ÒÝ(¡sj<‰I5u¼Cy”8¨<Ý¢:©úçÄÍ5z)yŠuNP½C¥ ÖÃÖÉf1¶Ð_Ö9Ý·ùµŒ%ËØÿk¾<–ó´`Ê™‚ m_mã9PGÐÁLpRn‚Óweû˜¨`®,£&Ýaž×¶‡Ž Öp/U¥ˆà¡1Ò­ƒ &l=Âñk •$ºÃg ¸#C9û4L!ÆQö–á+!˲?ùù[ùùóub¥1C=h¸P÷t‹»úØüÏe8óÍÐQ7ed2Ãqv;#ø°Ã9E¦PqôÂ¡ß ­+|'˜<’ ”ŸL±®[@i_¿àgÙž3÷7ä1»Ò±8•ÔHfú^Ž1p¼QÏ#9*¯.î4B°Ù!P"«º&l<®o·¤ 3YÔåFzT€O¥¶ÊÎÝG&]­>sÝ ®óågìZÑkåùDæïß™½‚ ñ‹{`†;Ð%eÇAC—äÌe„ˆÌ[+º!à¨,nf)Ò«Ó:!éPŽÜ· Ï2ƒ½Àv8~ÃÎŽ]»P>#^‡cì…@nÒØ|ø»ˆÄƒŽ‚®%ÀN8) E.53¯™n ;NÞílã#Ic.”ÓUƒDÉeIµ„ŽOd+;Q¬5ºúgP ¤'w¤”sÛô&>T³¢ p=t”:|ÓS%#Z y ,4‚@ÓëwÁ[IJcP’ª pUA©%¢‘O‚Zb0¤£¶dîzÆ Jc¤¶F÷Ñw(îHâšÞ3¼40ÁþH aèØ|Ü|m+bF-Ž|Éþ*5§§9ø4aΰ£–èÌœØ<±b€ˆ»M':æ¤%ôs62ýw‹q±%F‡ 1:·<öâø¨-tî/Í©‡0žLƒ øz;£g߯Ì!êi§Qþª^T0³UrÈqÁtgÃ&›p™Ñ^%)MP=Ä_m¯u;²r&'ä :!³;&8#§¸†±r]'ÄV‘Es§³8£ï¶1…›NNÖ^ Úuä\Lªu«=œôâW;V’ü¾]¡Þ "å'1ߢý9_¾žú۪݆Ì/G¢÷®ùihn«ç¿Ãï6eˆÕJ*]àÊeNŠXbJêí 5—p†æg£ TûàýãJ×] šDøàÿª=H…±a%Þ.PíÙY»á\ÖŠþ)ÍEð%WÿW®· žUâp†«]ùúd/îW;@° _fÏpe+a¨¼ý( x‡ïO·gåz»]ô𢡿GÅ}®Ôõ×tÓ*ê»aöÌób¯;R™ ªÒrø[¥Lš…PÔ1d›…;<ôIÇȇLS @!ƒkÃ$ÍÕÐ|m0–±Hœ4OÁÏ_½ 1©í×”JZåó[IA9¿ÓYîA'¼º*D÷A¢Åœf(}‰•9÷‹ÒÈdD§kû¢ëU|él#ïîcTäÑ©cL‚0-/ò[²ÊNhFktžA¯ÛVAüšäšw¼å£Ñq ‚mL“i´X£ #”D‡›"?”T®ª½9³ŽÜþFò¤òÓâE”Q|`ˆÈ ˬW&H¢6$!Ðè3ð›ÙBª6¿å‹év×ä¤Äà[4­¿»"GTÍÀ'äL:øMCÍ7a~+§ò˜4£ü1¾™=÷óUd9W¬Q¨’‹Ó½2¿¹¯¹il†ìÂÔ0T/zN%ý`ÀjIѧ§Ç<©9 ` ãÌK{¥© [Ó¤Œ5!<¹¤|#&‚ÔCŸrB*p †ÌŠ*½E ¤¶j8 btŠ ëœ”q"zΙô.ô«<눂A Y`ã¥iyxFG{ýjAK{”4°BkyeÏ( »¢ˆBîw\”tÞÁtèmJ§é7{¦Yêváãb­¢]YÞäxƒâ7åç­E&Iè«v¬6±=Ú|ãl£\JÄXûK£¬Ç¼>,âsµHú¤3á"il+êêQyj,]±ó|ùM½ð»"ùÌ–b—fÀu ;†œFl†º;¥lâÇMy äÈÒŽNP–pÆ‹DI|EíÚ£ÞùhÖ²qZ·=Í"ƒÐe ðS ècû1ÁsLμSˆY¨Ü,Y‹ \a°“2ÏPQ¡ã$½I§*ö1ÍÖ ”˯Gô*_«8qRÔ‘ShÆBçO ¨¢›¬©:…E£*suµàXUdGqe`ãXm³¸(l'‚j8IÁƒˆÞ5­{±'6¼tãÁ_ø¸Xë·õŸõ H˜UÛÖ¬l±¬j[Ô]ÕSRÄÂ@E+bU°¨(CZ)'¤u•Vñ £ '‘$4…BºW¨Ñãð×bùÃôI y­÷ŽMd¥¢I’@g–KªßVâñXº*TL*é´kN›išDecª0¹óѬ-åý:ˆz[²±ã®m,p ?º­`yW{﬩ãï¬å}ÑúŠg†Ë ”VªÓÚ0hÉZ_2O€ÝÞvQ—²)I@o:øšfž¹vMBiéòé8EPh^}1v¥« )®º£dðªªu+Ûx… .ÒZÚÎI×ÝP›è€Ž0†˜ÞÌRmí©:^i’+N}ñ'w¤™oº[°´œ$Õˆ^øhÖ®Pêvèeç»\¢šçáϳoõâ±ßËX“§ô­ÏK\¡Î =ûV¥:Ö(߀1Jh ±¨îIÊ©Èé¿Ìr»¼WR”ë5üzšåÇÐìW§hlÅé>*©%íð+— y$Y‚7º×{eýÔ#ËñHyy–¬Ÿl(®Îã[ßáUªruÉA‚r$Ü+O£þ&¤­< wÌ{}æ§»ÖW–¼ú\ó£þÍ÷¡9Óųúç*Å`ŽPU|K«’Ú“õö˜B±‘ý”Ò?6ᗤꥎCs<³ly‘éæÙu2…®9mw>'õMHSókž=õêY3±¤Ñbš†’rSÔc>C._€¿È€AÌ3úgIá9ë`U[s´8(¼CU.yú†zZS˜Æ{½C*<ßêÁ¾þóÕM©×1ÜM²ä8ðu«8ýs×ý"åß0ÆŽ~Yz’s2ÕCëé¶øå¦qEî±¾?eM™ÞÑÿéÇŹÑì'‘áŒ,SÓÙmººãy¦‚ÓZQÎÆtqñÊsEÅÙÝ ÚÀ°¡2%E‹«6¨zDÀ­»œÔÉq¢AÅýÂ_IÚx¯×Ä(ÁêI=$ű¨Ö­ëJ×O0qúMM¬Á¿Ùâ³Ml%2^a¬ó`ª<èr¥°´äýI\´Ú‹«]¥oE–´©Œ!uü,0:NvY¿º‹ŠK>÷²~|Ö´;Ü–¥›kÊÿ[aù" á=ÙõæO€$žÃ—%ÿï?+< endstream endobj 13 0 obj << /ProcSet [/PDF /Text] /ExtGState 1 0 R /Pattern << /0.00002 8 0 R /0.00003 9 0 R /0.00008 10 0 R /0.00009 11 0 R >> /ColorSpace << /CS1 [/Pattern /DeviceGray] >> /ProcSet [ /PDF ] >> endobj 14 0 obj << /Type /XObject /Subtype /Form /BBox [0 0 75 451] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 15 0 R /Length 148 /Filter /FlateDecode >> stream xÚ%Ž=®BQ„û³ŠÙ€8ünÁÄÊÒXiebíö÷¾’f>˜L™¿õx‚ñ^‚ëÔg ã¶r“6¦%¾+”Ô`MÞ¨s!.hª=³×ò kè6ÊBúq¾Ë)Q” ›ˆò9¼/%‰ÑA^Z3mÃ¥¡6Æ$Ú„<Ç'Iæ'|¢çƒÄg¡†ò™ýóö)¥ endstream endobj 15 0 obj << /ProcSet [ /PDF ] >> endobj 16 0 obj << /Type /XObject /Subtype /Form /BBox [0 0 74 449] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 17 0 R /Length 150 /Filter /FlateDecode >> stream xÚE; CwN‘¹R- _ÎS©êÒû¯uXºIžc“û”mb?Rw°|"ŽD¡XöT^ÃF‘*²$­q-C¸D"SŒ+Ê šÃ»d7ÈCƒE RV¿9/rëši¨ÉsÍ›©UShetž½ˆ`Àü¦¢çìEJ)C´9e“Ì>}ÏNL.©n“üô5>ãý?–!/³ endstream endobj 17 0 obj << /ProcSet [ /PDF ] >> endobj 18 0 obj << /Type /XObject /Subtype /Form /BBox [0 0 76 451] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 19 0 R /Length 147 /Filter /FlateDecode >> stream xÚ%Ž;Ž0D{Ÿb.‘ù|…H©RF[íV+¥Îõƒ“‰a†BÅk<~0ñ7×®ÿ!·Q\¡N<‡p%̨IzÏC‹îÝ}âw\6uC½˜bGØž4‡RÜ£:wù5©Ùð¥T‡ï¬qè«é›Õb÷Ìz-úZãÍ™…Œ·Šóåê‹ÙüÎLJÿ(ä(á endstream endobj 19 0 obj << /ProcSet [ /PDF ] >> endobj 20 0 obj << /Type /XObject /Subtype /Form /BBox [0 0 156 454] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 21 0 R /Length 483 /Filter /FlateDecode >> stream xÚ•KŽÜ0 D÷>…NÀH¢HY@0‹É |‚t§&÷_¦èZš Þøáu‘–«#% …q ŸË¿ðc[¾ýÊ1¤F- ‡íµ¤qáNy'KØ>—å»]UjÖ¦/ýó¶¿ËÏm©‰¸8…ÆŽFM—eÄÞX`ËhA"y›RÊ”½vxr•·g¥µ¹=+µÉÓjì&ÆÃì5ñ6Η©í†T˜V™Dð(¶0Šš m§'÷<±PmNÁëä-Øø«Û2Sd¯ÍàÉÆú»O§¶pûÁ¦·Ó)*°ížøE<,NѦZ+×b'\¥'+TbPä»ÔÈk¾)W%©>±:z,Ï_ÞcØv)… ¸Kek7ò´5ì]Oµ]W‡¦¬ç¦™¦éxui -ƒ§ö$B‚‰•Û,`ô«%ÅLquj N£GÞ>ZnÈ„ãÍ¢Ö*÷™â^ª¢Ïw´lEÀ( ¹e`´)¡åp¸‘ǧÚáÑU[O”HSȨTåÛD`´¿ÿ„Ð;Ì-ä"žéÐ÷zºâ°oœF§ìhA7e\©3#¥2Š>zR¥=}ÅŒãÎ¥9Uëè²ÿÍ!PBªRrTJ<ЫÉ1áÔv8æ>ÕO.ôï;ÕTD£ endstream endobj 21 0 obj << /ProcSet [/PDF /Text] /Font << /F20 7 0 R >> /ProcSet [ /PDF ] >> endobj 22 0 obj << /Type /XObject /Subtype /Form /BBox [0 0 22 52] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 23 0 R /Length 80 /Filter /FlateDecode >> stream xÚ3Ð3U(犎U0PHá2TÈâ24Pðå2Ô3°P0Ô34SÈå2r L ôÌÍr¸Œ ô, R9P)C°ê® ®`<ÑÕ¦iqÙDÊ endstream endobj 23 0 obj << /ProcSet [ /PDF ] >> endobj 24 0 obj << /Type /XObject /Subtype /Form /BBox [0 0 144 10] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 25 0 R /Length 138 /Filter /FlateDecode >> stream xÚŽ± Â@DûùŠù‚u÷Î\r B,+¯»`<[ß;M¢v²,ì0o†U |à|¡r€ñPv„)01OUfØÚI×¾Õ 'è+õCÔÛÏþ7¿¤78qœqç.aµwÊ(1¸Ð0]ËZÆXÉ 2e`ãÍë–iDŸÐzéš¿: ?a˜ž—k0À endstream endobj 25 0 obj << /ProcSet [/PDF /Text] /Font << /F20 7 0 R >> /ProcSet [ /PDF ] >> endobj 26 0 obj << /Type /XObject /Subtype /Form /BBox [0 0 156 477] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 27 0 R /Length 8 /Filter /FlateDecode >> stream xÚ endstream endobj 27 0 obj << /ProcSet [ /PDF ] >> endobj 28 0 obj << /Type /XObject /Subtype /Form /Group 2 0 R /BBox [0 0 156 477] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 29 0 R /Length 1427 /Filter /FlateDecode >> stream xÚU˜KŽG D÷}Šº€sòÿÙÖÚÐÂè…¼ÐØ}@$#È*a€™z¬$•™•Ý_¾–ëÛÿ¯WI9?~ý÷íõãU®,?åªúëýùúøã³]¿ÿûúS~>¾|͸Sc>¯2¦Þ—¯ï~Ù×Ò?߯_.å÷«¤6¯>VZrç+§ô[N³ ì4o8ª¼_ÄÙÓmžtŠÃ)—;pÍTê…Ñ5¹×ïר©•rKužj½CË©Õ[P-AÐðX0J ²ª¼¥`ë׳À ¯$±¬ÌâúðSsë*SžÂÏI=ðl×Î [•÷Ëñ¤1][2n¨ú'WKs]~uûsƒ¤–’Óš¡ÖœNj%•öˆm5Õv« ª% ªK¶òœPyÛ ¶ž= ìð@Ë ©²zÒ/¾š ùHO+•©6Ëð¦mspTy¿ˆ-›{„šÊ Òò~ö´öÅáÛP©pY{—*scÉí£>bõ¢Þê„j9‚šÇ’­º Œ'ò®‚7ž²À ¯¤.£Bª¬žÎ=]†®Œ}tPñXÆq:Êñëc“AîÙTáuO9®GûŽšæ§{–*Ȉk]L;õJ,µh¥iJ”JÇe„†Å6Ýc…á@+É¡bÊØrx´ÎÔµÓÊ¢†‚éÑý·ºWÇ%ÛD×mWú/N’_•êñë£ÿ—{ŒfN{P™¶óðºéúˆ(ÙãÌewU×µ’¼I@º˜JhúÐ=®äžÊ m˜fc;4ZEV*Á»p´9<:gjöN)‹®X½¼~xgNÊÞ.³xo8¹Ä U¤Àå×]ÿo)É,®L›M~}òµõ]Âq·*̸¥eÊ6,yê !”ªûD–®í¹Ö©éKŒ0ï@ .E‚ÕêÀ6­CÞZ÷Ô•,  †G÷l—[ãêzsW3eÊJ¤ibÄ ]{†²HnméÓs§ý <©õ‹ÃË6/Sð†ÍY·%};ÉÐù«£ç[=¦"GÐöX²Ud…±«`kÙ³À ¯„m_+¤ÊêéÜÓU3Yžk“Ë(0¹êÔVˆy®°UÁ–¡xÒn®íb¡êÛ?wãªÃï®SÔäª3‡\òÑœÊH{>b‹M¡PTËT=–lÕ9¡ð vŒ-€Yà†×ÒzQ!UVOçž®šrlmëîdÛB”umÚI3 çØ= mé; {c–žïÀ­qø~Tcj€Mf N }N+Ív‡êûbõ[=P-EÐòX²dueß›ÁèØ³À ¯„…W‚Y<áé©9 [b“§ U,.iž Mv¦º*rqÚ@X¶«ä);PVV·7±_ŠjL 0‹[ 6°tÖ©¼’]Õ?‘ÂÉó/¬ÒľBbSÁÖ±g^ßαxÂÓÓ·zÚõE08‹e ”“„iSŸ©Ã£q´=9®ËDqè˜EŽöa‡Ã/ûÄԾ决õWn:ºLïX=¸¯PåDdªåêK¶êœøy͉][Ëž…GÖçVxŸp´zž„ž®šÉò@«œãj†É5phC7{‡©Šyg¸tb:ÈÊ ÐåWïÀ.Õ›É:¼,Ôe&·|–›ŽzN’í͉/tõ·½«<XŠ |ÇÚ1ÁŠ ²ºƒØT°uìY`†×ÂIN+³xÂÓSûä /‚šmØG‡ˆ3j•)_ohª¼_ŽÝœ#L …(g+{7ÚðxQ2õñµ'=lg%2rÐÖÉ+sJfˆ«2ßfäbÁ³œd…±«àŠçÁ,æFÔPëBõêáÜÓÕ÷ëïë¯ëŸÇ7Eº‹ó›¢‚oŠÚ‘?к‹t«YžÕõ'¸ž‰× endstream endobj 29 0 obj << /ExtGState 1 0 R /XObject << /Fm3 16 0 R /Fm1 12 0 R /Fm4 18 0 R /Fm5 20 0 R >> /ProcSet [ /PDF ] >> endobj 30 0 obj << /Type /XObject /Subtype /Form /OC 6 0 R /BBox [0 0 156 477] /FormType 1 /Matrix [1 0 0 1 0 0] /Resources 31 0 R /Length 29 /Filter /FlateDecode >> stream xÚ+ä2T0B™œË¥ï–k©à’ÏÈJd‹ endstream endobj 31 0 obj << /XObject << /Fm9 28 0 R >> /ProcSet [ /PDF ] >> endobj 34 0 obj << /Length 111 /Filter /FlateDecode >> stream xÚu± Ã@ Cw…~àû|ÎùöнßPÚL!äþhBJÈR„„@<¤]Šlg+x-$,—ûL”EnÑg¤ƒ)­ÒÉEudÍ> endobj 32 0 obj << /XObject << /Fm10 30 0 R /Fm8 26 0 R >> /ProcSet [ /PDF ] >> endobj 36 0 obj [536.1 813.9 813.9 238.9 266.7 500 500 500 500 500 666.7 444.4 480.6 722.2 777.8 500 861.1 972.2 777.8 238.9 319.4 500 833.3 500 833.3 758.3 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 319.4 777.8 472.2 472.2 666.7 666.7 666.7 638.9 722.2 597.2 569.4 666.7 708.3 277.8 472.2 694.4 541.7 875 708.3 736.1 638.9 736.1 645.8 555.6 680.6 687.5 666.7 944.5 666.7 666.7 611.1 288.9 500 288.9 500 277.8 277.8 480.6 516.7 444.4 516.7 444.4 305.6 500 516.7 238.9 266.7 488.9 238.9 794.4 516.7 500 516.7 516.7 341.7 383.3 361.1 516.7 461.1 683.3 461.1 461.1] endobj 37 0 obj << /Length1 1068 /Length2 3367 /Length3 0 /Length 4030 /Filter /FlateDecode >> stream xÚ­“y<Ôm÷Ç)Ýöd¯¦ôÔfÆNÆš5[„3ƒaÆXF¶d˾E¶ˆ‰4qÛ÷%eÉNYBB"[ÏÔýÜw~÷óïïõýçzŸs®óù¼Îu¾ÂgLÄUQ{´&O‡IÀ¸¾‰ À$ ,ÂÂp"AÂðêZ€)(ÀUG@’–—S”’R”’fàW2ãèDÀp‘ŸEr€*MÄ x@ArBãh=,`B@bÐ$² ŠÅÆ?o¸Æhw4Ñ’`ÁIìÑŽ< ä§#¼û+Œòpý;å‰&ºÓL`šI€fEÀcÉ íÀ1 дÐ4'ÿ¦þÝ\Ó‹5@à~¶ÿ5¥ÿÉ#p,ù¿œ« Mô (4ÿïÒëè¿Ìé£QÜ¿³:$ƒTÅ;bÑô¯Æ]ãFaHH'ÀuGÿŠ£ñ¨›  î—ˆ‘ÉU=K‹ÿ}Ñ_I#O2%»þÓögõ/†ýfÚ|ˆoÀ *…Âh…´ïï“Í¿Ä4ðH ƒ§­„Œ,€ dÚnÐH¸0xÚ@{ÓC$ðí @Šà@ ²ü|Pyibú3ô‹hoAü&ybÿ›ò‚A¡uaý¥ˆö@–¦âteæÒT] Möà]š.î7ÒæÁ@š.ᔦÕð|À$ˆë¤ù @š÷( @HfËãÒz{ýFIš0ù·0ͳšø—“ÿÝ55‚÷-qY .)¥MR“Qðû?uH"'ýúÓh+õ7;`h ˆF{£‘,o‡ ÈKÁÎ)•¡þ¹½OŽˆÒ«9VÅ”=h`½ó&ž›×¡ë&ú®Ôb‡šÆ}tîÈܯ]{D½ïµnÍ•Ûnq÷‡öæ<íæÒ|j@kiúäYWÁ­;‹u•ƒëŸeè ûßu$YR^d~i[|hV7g?K×låYÞœ,+g¡™†5 )=/uÖøØ}·‚pé° ¯cI =wüت/Ž­ê=¸vr™²÷¬·xc9‘ ¯£ËÆ?–¿ê»ÿLžT1·ý}=@\l™Ãyg’rªDMãØÇu°ÅpÆô^?ÖŽ¤”îÉJ ˜–HFÅ›U/!!7xù…¤B‹r{ÕªßdDM“š¼¤I¸Uýü%eIotßl§<Dzöº©ù©"Þ!a»îö¶xhíG#¾BûÝbSG&1‰Úê}ðŒ‹–›fq³¾Ùï´OúHϧÂJ®]Öƒò"\UÒt«5¹úF·#WÅëvµ•×?þ£¸?^gâ³1[l-·KÐûi2])²*¸Â®Uʦ?éË ³$ÅÓ°Ës4n)Ħ,Þ³ôb\B¶‘ýkAš '¨%£ ÝÊøº8lPß?|ël™s–Vó»¬Ï¿p œxû[Ó[Ẁâ]¬òväùñ0?,›‹§œÝެ>Ý7Oevš{.ôö½ÒÏËÉs]f–ý®õG—ý{éžå«y¼­Ñ`bvØW渗7QµN_‡šù¹¤ÇTOe‰œ,º\›gŒ[½Ü )’ =ÃÁÝ3GTmScˆq1KsSæù² ^ QÈ Eò~o•®ø‹ÎUN[°jODøª9Ó7›Ô[•ïJ{ŠÙí܇é¾ègÃu“`»òû­¢luÜL)Q÷›f†ksHÖ¼+ý!»ÙÉz·Xƒzè[Ð̆®M ɲô}oOLqVr]A°æ}dÕIèÓ0f¤¢Tœ»ug…«UãFÐEN¾0z4•Å@¬Ðdl¡òþÝȨ¦AùBWØü©r®äV˜¼bµíñpºQ6á –cxg,pÞNg­Ü,'‡¼›V„jÁYùêh‡H–FüIŽF\øõK}'!_‹Ô+Ÿ„g>ÖŒQí±Æ ( _Öç„Z0<Ù9Éhkhûà^š¥xšK³¥Á¹(™«%!Ìb‚W3²|™ÙlçXs⇌ç Å:¤ÆVòoGªÖ­\\ØYa;у,ó)—KTˆ­†³b˜¬”ªÂ멇ے“d®x" TÜê´­ØëMw3p;‡ =nVÁ-­€Fø;¼<±Ðd¤oìg¡ÍÑoó°Q{Þ{#3_õŽ_)Ép±úævzÉkr©‡£ÎƳ¤ý&ŽÆ×]ÏÆ¶º×¿^9¢ÛŠ—o?$w•-ú5`#a?|êôEs û×bbÎ<9vhñõýmÊ<¥Ne¡ô´¨ ·t¸¦gííã:–£Ò"ƒê£ýv+е8ýúO(ë4„ÔÑex ³ R?>ÅKÎ4ˆñQO_×9QßÝìßeÍ7.¹wÝB,³ àb07Ù¦ ‰‚3dìF¤ÙÎñ®NóæB™OÜ©ö"Yf_ã…mÂÀ,­¤VJsßCæ÷¦J纔N"ýƒF¯Œómc¸¦UÝeÞTkÙù­UæÜÈÉ¥R:,T8+,–ÎN÷â´6'> ¾†ç¤µœ{|ÿ4^-¨†RÞ†Î&µ•DFÙ逎$îü©§}oà¢;Æ.åf—†Æ¢âÈT¥ÿ@.›J ågVÛõI+XIq¥PDl7)»ö§ˆ0– ›¸&j÷ô.^ß·Z«T¿ëÍÿ~›“'«âhTÔ/+ ¨ô¾’.ñÝW'ÉÒÕ‡zÍÔî«g[î÷i‘D¢üèݱ¹ðâ­Ø\ÐwûKähÁƒe+U³ ”„œ‘1Ë|‡†q>,äU¶¹zàú.ýÞ½›ÞÈc¦Á³ ”„ÑÌóóC%—›j7<ûÜøê&ˆ™yó’#q f‡šîR¿­zÇ÷ ¡lÎe/ÍØÃØ[f¿+ZÇU–>›5•¨&Âßò¨LO> hñ®³ÆH]Qý‚’ë˜Õg¿Jº<0Õ²¡§.X¶Í—™0È[pxøxsS;C”ϲÆB΢Eh;‘°O„¬.£æ+ž³Ô&h=ú`{4}xt»p¶zd4 j~·SE&¦/2wXL°yª#úFr¾ˆn!´µk ø‚¶™¢ò{èŽ šæ©·øœ~¥/wÚÖœm”™Ù5>Ú¬ž=þ,¡ÊâRþÑòÏÄ®£u;¾sv^úVW8Î8=Ú™MI´‚)pø¾ª«-  W»›=¨]¿°$íu=ÅÄh²¼úÄ`a ÞÇó%Š1GBN °õ×®&Öe+„·»•Ñé— p'ùpj9~îíMI€—z׃öAWŸoRê>3åJLd‰ëòÅãõOï¥>^‰e–x}{o¢©þ±.[A××»‡ÊÖ¯ôä˅畬Ùò5ØsÊ*Ìê/üW/F<ÚFËb8òÍš¸†–ÈÝrÎuÜI—Q,³~BPróÜ,–âg]Ô v(që[†÷B/½K¡†Ì¦s‹]¸7ž?ZTS Wˆ}2LŸ4Î>Dë:iSM·#æBâµðçý«§C÷ÑŘêCoönŸmí,rýÉB”¸Õ‡+¹÷î%á®\ª “ÉúÎã§#2ä«ãûåD©#%9N–§.WÑË›¯ëɶƸœ©ù:ÛŠÁq+µE•žxh²·ùàÆÕQeGÇn­k]¤ôÇÐ@caÁŽl·͵‰†2¹ýNÉs9nô?x­äµç˜_ã¾ä¼ªß±–ó¹F$ŽzÏ1Tü‚¾ŸïäyWñ7ø¡o«N^Œ‘Žé‡ly´Ðç+¿íµ=Kiþ:úi)JHH‘ww¤xküÕTÀæ<ùéau¬å|’OöœçëœìÒfpvØ´dï”æÀÅu'o…š™Ç |mLe<‘a ÙË[„>ôíÏwæ6–Ò«ÎØÒ]+º]|­Œ3-!Qƒë¨’͇Ú2*£sAYÑÙzÐÙ1O¿¥ü<Ïm°ë›Œ>ÍAÎåÔ?/ç ‚ Ì“­]õ¯L*ï»|¿|eÓ¹ŒÁïMÕ4ôã“0ÓT0‚óc‘,¤ÉzqÞ^ /X27¦ìj2¨–>;Àýniô¸þð Á)D̃¥ÆMO¹>¦ÀxUjë¼~ŠÿÅÊ.-ú†è£Ókžþ^žsN[¯ì|ιj¹[ªxdãžÎ¿!—’¶‘µÙ“ªÇ+Ð%Yžñ¥×=`6YÑewÖË0ò9%åÖ)ˆ·(šÂ.×Þ(¯†Ê=’·â|놨öÆ#ð 9ž.ÕWëíÓ%éÅJ+.·9“âeكص°^•S‹š‰êoôú¦efRò¯ ·X,K|‘íÖÒ´ Îe 8`¯¡ÌVœÜ P[ürDÔæJ@é.˜ Åcy«rõ¤œ†‰h¡:9¾Ýs‡Kào쇆:Ï]¯Ì±@—'n_ø>ÈÞïR—¹JŸµ’òŒ0Çtˇ k:ó87åÞ´Ah~`°©üÓ.(W±—Ÿ¦ŠßRÈ /“ÕýÝá\$ó<¹™ÎÖQÖ+âÜQ{ †Ïk™ƒoà¦àäDzå§õ'r˜‘ãQšÇ­…˜‡æ‡J@ jmâ&ìÞ ¯TýùeR5À)×?u°yŒP»uõ|ew×WEøÆÎíõ¨]µ{¹÷Ò>{·gy6=èQe^¸~÷ã[–yÇÎ@«?»¿%sAJ‹ôš‚®¾ü12ÊÀ6©™²Pç1 ¹¤CW-±ñÞà}Cw«¬<é¡cJÄÿiÏòï“;Ê7ù‡´_ßx]êû¹[DÇ œÔ(6²¾9pÆðƒ¤ù`còÎÔÄD_î>uÌÚ®[GvæŠ>‘’(a‰Îþ“{Ni¥BÙc*ŠR>pÞVÖÄ*RÄXug%JöRß)ªÀèä,™úÜ×g¼ã›S,'„M¥;¥*¶S#osè(Z¦m—·Šøi¹o©ÚÈZWÒ °õ@çÌa¾D¶µ–y³2ž"ôB8o#]m©ÜG+ShY›ú3ìz±ckw“Þ_]ƒüêŠù endstream endobj 38 0 obj << /Type /FontDescriptor /FontName /PSJLYI+CMSS10 /Flags 4 /FontBBox [-61 -250 999 759] /Ascent 694 /CapHeight 694 /Descent -194 /ItalicAngle 0 /StemV 78 /XHeight 444 /CharSet (/T/a/b/c/d/e/fl/h/i/k/l/m/n/o/one/p/r/s/t/u/w/y/zero) /FontFile 37 0 R >> endobj 39 0 obj << /Length 732 /Filter /FlateDecode >> stream xÚmUMoâ0¼çWx•ÚÅvHB²ó!qض*Õj¯˜n$HPý÷ëñ#xÙö?ŸgìÁÜýxÝLTÕîÌ$|äìÍôí¹+Í$ý¹=wwY[ž¦ž©L5ÎöOìµkËØ}ºÎÖM=ÙëÃP7ò{=,éÛyf‹ì¶ÈÜ¢_¦ëë¶ybâ‘sn yS¥í6ú`z‘¦£¸}ÝTÝEÛA] $«êr¸ŒÜwy´çÅ›Ï~0Çu³oƒå’Mßìd?tŸNãC0}é*ÓÕÍ»¿•f§6çÓé` ƒñ`µb•ÙÛŽÖÿóöhØô[WÎûçÉ0鯂t•meúÓ¶4ݶù0Á’ó[Å*0Mõß\B+vû‘šX*Ÿã+TÑ*XÊÐb£À-¶L†š s[ ‹#*X,caq¢\Áâ`™`2Iш ôPè¡×]¬®QAŠÊ?Û ,ãh,%%Õ¡€‡„5ðŒpÑ8&ìú\vvk¡S éz’‰8ÆãÔg~œbœÿÃ9Åm <á<ˆg!ࡈ5ô I\èÎ×3`çA¦ °ó 3ht ‡,ª+à9­uçgŽCwËpÞDÿ‚|ŽOžRÇɉ#ɇÛW ºmè—’®1NÃwH=8!õ Á éŒ4ôD—àL"âDàD9ù…†¨ _èsâCC’Qü„øú$¤ÓÝ¥â¤ç©„Ï’>7*ô¹Q3ŸùܨØçF%>7JùܨÌçFå·¹QÅmn4¿Í_s£å×ÜèÐçFÏ|ntäs£cŸøÜè¹Ï^øÜhås£µÏN}ntæs£sŸ]øÜ¤Üç&>7©ô¹Ig×»q¿p÷‹Æ„óú¼•箳/Ÿ{V݃†§¬nÌõå=µ'¬r÷dÿ½Á_Êš¦ endstream endobj 7 0 obj << /Type /Font /Subtype /Type1 /BaseFont /PSJLYI+CMSS10 /FontDescriptor 38 0 R /FirstChar 13 /LastChar 121 /Widths 36 0 R /ToUnicode 39 0 R >> endobj 35 0 obj << /Type /Pages /Count 1 /Kids [33 0 R] >> endobj 40 0 obj << /Type /Catalog /Pages 35 0 R /ViewerPreferences << /DisplayDocTitle true /PrintScaling /None >> /OCProperties << /OCGs [3 0 R 6 0 R 4 0 R ] /D << /Name (Map layers) /ListMode /VisiblePages /Order [3 0 R 6 0 R 4 0 R ] >> >> /thCalibrate0 (X=38.20367pt, Y=23.9366pt, L=0.0000000000, F=0.0000000000) /thCalibrate1 (X=84.6663pt, Y=23.9366pt, L=0.0000000000, F=0.0000000000) /thCalibrate2 (X=131.12894pt, Y=23.9366pt, L=0.0000000000, F=0.0000000000) /thCalibrate3 (X=38.20367pt, Y=256.30756pt, L=0.0000000000, F=0.0000000000) /thCalibrate4 (X=131.12894pt, Y=256.30756pt, L=0.0000000000, F=0.0000000000) /thCalibrate5 (X=38.20367pt, Y=488.67853pt, L=0.0000000000, F=0.0000000000) /thCalibrate6 (X=84.6663pt, Y=488.67853pt, L=0.0000000000, F=0.0000000000) /thCalibrate7 (X=131.12894pt, Y=488.67853pt, L=0.0000000000, F=0.0000000000) /thCalibrate8 (X=84.6663pt, Y=256.30756pt, L=0.0000000000, F=0.0000000000) /thCalibrate (HS=213.49762pt, VS=535.70137pt, HD=6.5318993758) >> endobj 41 0 obj << /Producer (pdfTeX-1.40.1) /Creator (Therion 5.2.7, MetaPost, TeX) /CreationDate (D:20090213155157+01'00') /ModDate (D:20090213155157+01'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.141592-1.40.1-2.2 (Web2C 7.5.6) kpathsea version 3.5.6) >> endobj xref 0 42 0000000000 65535 f 0000000015 00000 n 0000000182 00000 n 0000000230 00000 n 0000000337 00000 n 0000000444 00000 n 0000000543 00000 n 0000018175 00000 n 0000000590 00000 n 0000000925 00000 n 0000001277 00000 n 0000001640 00000 n 0000001994 00000 n 0000006910 00000 n 0000007114 00000 n 0000007443 00000 n 0000007483 00000 n 0000007814 00000 n 0000007854 00000 n 0000008182 00000 n 0000008222 00000 n 0000008887 00000 n 0000008974 00000 n 0000009234 00000 n 0000009274 00000 n 0000009593 00000 n 0000009680 00000 n 0000009870 00000 n 0000009910 00000 n 0000011532 00000 n 0000011652 00000 n 0000011873 00000 n 0000012245 00000 n 0000012131 00000 n 0000011940 00000 n 0000018333 00000 n 0000012325 00000 n 0000012947 00000 n 0000017096 00000 n 0000017363 00000 n 0000018392 00000 n 0000019381 00000 n trailer << /Size 42 /Root 40 0 R /Info 41 0 R /ID [<6F8DF6A9227A3C6B315188F14B7E2BFD> <6F8DF6A9227A3C6B315188F14B7E2BFD>] >> startxref 19660 %%EOF therion/samples/areas/thTMPDIR/data.pl0000644000076400010400000000050011145241274020621 0ustar userAdministrators%SCRAP = ( # scrap: scrap.types aaaaaaa => { F => "data.1", B => "data.2", I => "data.2bg", C => "data.2clip", E => "data.3", X => "data.4", P => "data.4bbox", Y => 1, V => -2, S => "-4.62 -193.69", }, ); %LAYER = ( # expanded map: 1 => { N => '', }, ); $PATTERN_DEFS = "./"; therion/samples/areas/thTMPDIR/data.svx0000644000076400010400000000032211145241274021030 0ustar userAdministrators*units declination clino compass degrees *units tape depth counter northing easting altitude metres *infer plumbs off *infer equates off *data normal from to tape compass clino 1 2 30.000000 0.000000 0.000000 therion/samples/areas/thTMPDIR/data.tex0000644000076400010400000004074511145241274021025 0ustar userAdministrators%% %% therion.tex %% %% Copyright (C) 2001-2004 Martin Budaj %% %% -------------------------------------------------------------------- %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 2 of the License, or %% any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; if not, write to the Free Software %% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA %% -------------------------------------------------------------------- \ifx\pdfoutput\undefined \newlinechar`\^^J \immediate\write16{^^J^^JProcess me with pdfTeX, please!^^J^^J} \expandafter\end \fi \def\requiredformat{plain} \ifx\requiredformat\fmtname\else \newlinechar`\^^J \immediate\write16{^^J^^JTherion works only with plain TeX format!^^J} \immediate\write16{Your format is: \fmtname^^J^^J} \expandafter\end \fi \def\wlog#1{} \parindent=0pt \raggedbottom \nopagenumbers \tracingstats=1 \pdfimageresolution=300 %\pdfinfo{/Creator }% \newbox\xxx \newbox\mapbox \newbox\navbox \newcount\pointerE \newcount\pointerW \newcount\pointerN \newcount\pointerS \newtoks\pointerU \newtoks\pointerD \newcount\pagenum \newtoks\pagename \newtoks\pagelabel \newtoks\opacity \opacity{0.7} \newtoks\surfaceopacity \surfaceopacity{0.7} \newif\ifpagenumbering \pagenumberingfalse \newtoks\bgcolor \newif\iflegendbgfill \let\ne\noexpand \def\notdef{notdef} % hyperlinks \def\flatlink#1#2#3#4#5{% \setbox\xxx=\hbox{}\wd\xxx=#3bp\ht\xxx=#4bp% \rlap{\kern#1bp\raise#2bp\hbox{% \vbox to0bp{\vss\hbox to 0bp{% \pdfstartlink attr {/Border [0 0 0]} goto name {#5}% \box\xxx\pdfendlink\hss}}}}}% \def\textlink#1#2{% \pdfstartlink attr {/Border [0 0 0]} goto name {#2}#1\pdfendlink}% \def\includechars#1:#2\endinclude{\pdfincludechars#1{#2}} \newbox\tmpboxa \newbox\tmpboxb \newdimen\legendsymbolwd \newdimen\legendsymbolht \legendsymbolht=12pt \newdimen\tmpdimen \def\legendsymbolbox#1#2{% \setbox\tmpboxa=\hbox{\pdfrefxform#1}% \setbox\tmpboxb=\hbox{\the\legendtextsize(}% \legendsymbolwd=\wd\tmpboxa \legendsymbolht=\ht\tmpboxa \advance\legendsymbolht by -\ht\tmpboxb \advance\legendsymbolht by -1dd \tmpdimen=\hsize \advance\tmpdimen by 10pt \divide\tmpdimen by\legendcolumns \advance\tmpdimen by-10pt \hbox to \tmpdimen{% \box\tmpboxa\kern10pt\raise\legendsymbolht\vtop{% \advance\tmpdimen by -\legendsymbolwd \advance\tmpdimen by -10pt \hsize=\tmpdimen\rightskip=0pt plus \tmpdimen minus 0pt\relax\the\legendtextsize #2\vskip1dd}\hss}% } \def\colorlegendbox#1#2#3{% \setbox\xxx=\hbox to 36bp{\PL{q #1 #2 #3 rg 0 0 36 24 re f Q}\hfil}% \ht\xxx=25bp\dp\xxx=0bp \immediate\pdfxform\xxx } \let\PL\pdfliteral \newdimen\xcorr \newdimen\ycorr \def\PB#1#2#3{\rlap{\kern#1bp\raise#2bp\hbox{\pdfrefxform#3}}} %placebox \def\gridcoord#1#2{\hbox to0pt{% \ifnum#1=1\hss\fi \ifnum#1=4\hss\fi \ifnum#1=7\hss\fi \ifnum#1=8\hss\fi \ifnum#1=2\hss\fi \vbox to0pt{% \ifnum#1>3\vss\fi \kern2pt% \hbox{\kern2pt#2\kern2pt}% \kern2pt% \ifnum#1<7\vss\fi }% \ifnum#1=3\hss\fi \ifnum#1=6\hss\fi \ifnum#1=9\hss\fi \ifnum#1=8\hss\fi \ifnum#1=2\hss\fi }% } \def\PBcorr#1#2#3{% \xcorr=#1bp\advance\xcorr by\extraW\advance\xcorr by\overlap% \ycorr=#2bp\advance\ycorr by\extraS\advance\ycorr by\overlap% \rlap{\kern\xcorr\raise\ycorr\hbox{\pdfrefxform#3}}} %placebox \def\bitmap#1#2#3#4#5#6#7{% \pdfliteral{q #1 #2 #3 #4 #5 #6 cm}% \rlap{\pdfrefximage#7}% \pdfliteral{Q}% } \def\bitmapcorr#1#2#3#4#5#6#7{% \xcorr=#5bp\advance\xcorr by\extraW\advance\xcorr by\overlap \ycorr=#6bp\advance\ycorr by\extraS\advance\ycorr by\overlap \dimtobp{\xcorr}\edef\wdth{\tmpdef}% \dimtobp{\ycorr}\edef\hght{\tmpdef}% \pdfliteral{q #1 #2 #3 #4 \wdth\space\hght\space cm}% \rlap{\pdfrefximage#7}% \pdfliteral{Q}% } \newdimen\tmpdimenX \newdimen\tmpdimenY \def\calibrX#1{\tmpdimen=#1\advance\tmpdimen by\overlap\advance\tmpdimen by\extraW} \def\calibrY#1{\tmpdimen=#1\advance\tmpdimen by\overlap\advance\tmpdimen by\extraS} \def\TITLE#1{\eject\hbox{}\vskip5cm\centerline{\size[24]#1}\vfil\eject} % processing of the E-W-N-S references \def\showpointer#1{\ifnum\the#1=0\else\the#1\fi} % processing of the up and down references \def\showpointerlist#1{\edef\test{\the#1}\ifx\test\notdef\else \expandafter\process\the#1\endarg\fi} \def\process#1||#2\endarg{ \expandafter\processpointeritem#1\endarg% \if@#2@\def\next##1\endarg{} \else\let\next=\process\fi \next#2\endarg} \def\processpointeritem#1|#2|#3\endarg{\hbox{\textlink{\arr\ #2 (#1)}{#3}}} \def\arr{} % to be redefined in the \dopage macro \def\pagesetup#1#2#3#4#5#6{ \pdfpagewidth#1 \pdfpageheight#2 \hsize#3 \vsize#4 \pdfhorigin#5 \pdfvorigin#6 \hoffset0pt \voffset0pt\relax } \def\linestyle{1 J 1 j 1.5 w} \def\framed#1{% \dimtobp{\wd#1}\edef\wdth{\tmpdef}% \dimtobp{\ht#1}\edef\hght{\tmpdef}% \hbox to \wd#1{\rlap{\box#1}\PL{q \linestyle\space 0 0 \wdth\space\hght\space re S Q}\hfill}% } {\catcode`\p=12\catcode`\t=12\gdef\SKIPPT#1pt{#1}} \def\dimtobp#1{% \tmpdimen=#1% \tmpdimen=0.996264\tmpdimen \edef\tmpdef{\the\tmpdimen}% \edef\tmpdef{\expandafter\SKIPPT\tmpdef}% } \def\color[#1 #2 #3]{% \tmpdimen=#1pt% \divide\tmpdimen100 \edef\tmpdef{\the\tmpdimen}% \edef\tmpdef{\expandafter\SKIPPT\tmpdef}% \pdfliteral{\tmpdef}% \tmpdimen=#2pt% \divide\tmpdimen100 \edef\tmpdef{\the\tmpdimen}% \edef\tmpdef{\expandafter\SKIPPT\tmpdef}% \pdfliteral{\tmpdef}% \tmpdimen=#3pt% \divide\tmpdimen100 \edef\tmpdef{\the\tmpdimen}% \edef\tmpdef{\expandafter\SKIPPT\tmpdef}% \pdfliteral{\tmpdef}% \pdfliteral{rg} } % actual placing of the page elements \def\dopage{% \vbox{\centerline{\framed{\mapbox}} \bigskip \line{% \vbox to \ht\navbox{ \hbox{\size[20]\the\pagelabel \ifpagenumbering\space(\the\pagenum)\fi \space\size[16]\the\pagename} \ifpagenumbering \medskip \hbox{\qquad\qquad \vtop{% \hbox to 0pt{\hss\showpointer\pointerN\hss} \hbox to 0pt{\llap{\showpointer\pointerW\hskip0.7em}% \raise1pt\hbox to 0pt{\hss$\updownarrow$\hss}% \raise1pt\hbox to 0pt{\hss$\leftrightarrow$\hss}% \rlap{\hskip0.7em\showpointer\pointerE}} \hbox to 0pt{\hss\showpointer\pointerS\hss} }\qquad\qquad \vtop{ \def\arr{$\uparrow$} \showpointerlist\pointerU \def\arr{$\downarrow$} \showpointerlist\pointerD } } \fi \vss } \hss \vbox to \ht\navbox{ \ifnortharrow\hbox to 0pt{\hss\northarrow\qquad}\fi \vss \ifscalebar\hbox to 0pt{\hss\scalebar\qquad}\fi } \box\navbox } } } \newif\iflegend \newif\ifcolorlegend \newtoks\legendcontent \newtoks\cavename \newtoks\comment \newtoks\legendtitle \newtoks\colorlegendtitle \newif\ifnortharrow \newif\ifscalebar \newtoks\explotitle \newtoks\explodate \newtoks\exploteam \newtoks\topotitle \newtoks\topodate \newtoks\topoteam \newtoks\cartotitle \newtoks\cartodate \newtoks\cartoteam \newtoks\copyrights \newtoks\cavelength \newtoks\cavedepth \newtoks\cavelengthtitle \newtoks\cavedepthtitle \newtoks\legendtextcolor\legendtextcolor={\color[0 0 0]} \newtoks\legendtextsize\legendtextsize={\size[12]} \newtoks\legendtextheadersize\legendtextheadersize={\size[26]} \newtoks\legendtextsectionsize\legendtextsectionsize={\size[14]} \def\scalebar{\pdfrefxform\THWscalebar} \def\northarrow{\pdfrefxform\THWnortharrow} \newdimen\legendwidth %\legendwidth=14cm \newcount\legendcolumns \legendcolumns=2 \legendcontent={% \hsize=\legendwidth \color[0 0 0]\the\legendtextcolor \ifnortharrow\vbox to 0pt{\line{\hfil\northarrow}\vss}\fi \edef\tmp{\the\cavename} \ifx\tmp\empty \else {\the\legendtextheadersize\the\cavename}\vskip1cm \fi \ifscalebar\scalebar\vskip1cm\fi {\rightskip=0pt plus 3em\parskip=3bp \edef\tmp{\the\comment} \ifx\tmp\empty \else {\the\legendtextsize\the\comment} \par\medskip \fi \everypar{\hangindent=2em\hangafter=1} \edef\tmp{\the\cavelength} \ifx\tmp\empty \else {\the\legendtextsize\si\the\cavelengthtitle: \ss\the\cavelength\par} \fi \edef\tmp{\the\cavedepth} \ifx\tmp\empty \else {\the\legendtextsize\si\the\cavedepthtitle: \ss\the\cavedepth\par} \fi \edef\tmp{\the\exploteam} \ifx\tmp\empty \else {\the\legendtextsize\si\the\explotitle: \ss\the\exploteam\quad\si\the\explodate\par} \fi \edef\tmp{\the\topoteam} \ifx\tmp\empty \else {\the\legendtextsize\si\the\topotitle: \ss\the\topoteam\quad\si\the\topodate\par} \fi \edef\tmp{\the\cartoteam} \ifx\tmp\empty \else {\the\legendtextsize\si\the\cartotitle: \ss\the\cartoteam\quad\si\the\cartodate\par} \fi \edef\tmp{\the\copyrights} \ifx\tmp\empty \else {\the\legendtextsize\ss\the\copyrights\par} \fi } \formattedlegend \color[0 0 0] } \def\maplayout{ \legendbox{NW}{\the\legendcontent} \legendbox{NE}{\northarrow} } \def\formattedlegend{% \ifcolorlegend \vskip1cm{\the\legendtextsectionsize\the\colorlegendtitle}\bigskip \insertcolorlegend \fi \iflegend \vskip1cm{\the\legendtextsectionsize\the\legendtitle}\bigskip \insertlegend \fi} \let\atlaslegend=\formattedlegend \def\atlastitlepages{ \edef\tmp{\the\cavename} \ifx\tmp\empty \else \TITLE{\the\cavename} \fi {\rightskip=0pt plus 3em\parskip=3bp \edef\tmp{\the\comment} \ifx\tmp\empty \else {\size[12]\the\comment} \par\medskip \fi \everypar{\hangindent=2em\hangafter=1} \edef\tmp{\the\exploteam} \ifx\tmp\empty \else {\size[12]\si\the\explotitle: \ss\the\exploteam\par} \fi \edef\tmp{\the\topoteam} \ifx\tmp\empty \else {\size[12]\si\the\topotitle: \ss\the\topoteam\par} \fi \edef\tmp{\the\cartoteam} \ifx\tmp\empty \else {\size[12]\si\the\cartotitle: \ss\the\cartoteam\par} \fi \edef\tmp{\the\copyrights} \ifx\tmp\empty \else {\size[12]\ss\the\copyrights\par} \fi \edef\tmp{\the\cavelength} \ifx\tmp\empty \else {\the\legendtextsize\si\the\cavelengthtitle: \ss\the\cavelength\par} \fi \edef\tmp{\the\cavedepth} \ifx\tmp\empty \else {\the\legendtextsize\si\the\cavedepthtitle: \ss\the\cavedepth\par} \fi } } \newdimen\sx \newdimen\sy \newdimen\sxd \newdimen\syd \def\LEGN{N} \def\LEGE{E} \def\LEGW{W} \def\LEGS{S} \def\LEGNE{NE} \def\LEGNW{NW} \def\LEGSE{SE} \def\LEGSW{SW} \def\LEGC{C} \newdimen\extraN \extraN=0mm \newdimen\extraS \extraS=0mm \newdimen\extraE \extraE=0mm \newdimen\extraW \extraW=0mm \newdimen\adjustedHS \newdimen\adjustedVS \newdimen\adjustedX \newdimen\adjustedY \newdimen\framethickness\framethickness=0cm \def\legendbox#1#2#3#4{% \unskip \setbox\tmpboxa=\vbox{#4}% \sx=\wd\tmpboxa \sy=\ht\tmpboxa \advance\sy by \dp\tmpboxa \sxd=\hsize \divide\sxd by 100 \sxd=#1\sxd \syd=\vsize \divide\syd by 100 \syd=#2\syd \edef\test{#3}% \ifx\test\LEGN \divide\sx by 2 \advance\sxd by -\sx \advance\syd by -\sy \else\ifx\test\LEGW \divide\sy by 2 \advance\syd by -\sy \else\ifx\test\LEGE \advance\sxd by -\sx \divide\sy by 2 \advance\syd by -\sy \else\ifx\test\LEGS \divide\sx by 2 \advance\sxd by -\sx \else\ifx\test\LEGNW \advance\syd by -\sy \else\ifx\test\LEGNE \advance\sxd by -\sx \advance\syd by -\sy \else\ifx\test\LEGSW \else\ifx\test\LEGSE \advance\sxd by -\sx \else\ifx\test\LEGC \divide\sx by 2 \advance\sxd by -\sx \divide\sy by 2 \advance\syd by -\sy \fi\fi\fi\fi\fi\fi\fi\fi\fi % \ifdim\sxd<-\extraW \global\extraW=-\sxd\fi \ifdim\syd<-\extraS \global\extraS=-\syd\fi \sx=\wd\tmpboxa \sy=\ht\tmpboxa \advance\sy by \dp\tmpboxa \advance\sx by \sxd \advance\sx by -\hsize \advance\sy by \syd \advance\sy by -\vsize \ifdim\sx>\extraE \global\extraE=\sx \fi \ifdim\sy>\extraN \global\extraN=\sy \fi % \unskip % \advance\sxd by \extraW -- presunute do thpdf.cxx % \advance\syd by \extraS % vypln pod legendou \iflegendbgfill \begingroup \advance\sxd-1cm \advance\syd-1cm \sx=\wd\tmpboxa \advance\sx by 2cm \dimtobp{\sxd}\edef\shiftx{\tmpdef}% \dimtobp{\syd}\edef\shifty{\tmpdef}% % \dimtobp{\wd\tmpboxa}\edef\wdth{\tmpdef}% \dimtobp{\sx}\edef\wdth{\tmpdef}% \sy=\ht\tmpboxa \advance\sy by \dp\tmpboxa \advance\sy by 2 cm \dimtobp{\sy}\edef\hght{\tmpdef}% \rlap{\PL{q \the\bgcolor\space rg \shiftx\space \shifty\space \wdth\space \hght\space re f Q}}% \endgroup \fi % \advance\syd by \dp\tmpboxa \rlap{\kern\sxd\raise\syd\box\tmpboxa}% \ignorespaces } \def\loadpicture#1{\pdfximage{#1}\pdfrefximage\pdflastximage} \def\insertmaps{% \color[0 0 0] \input th_formdef \input th_pagedef \input th_pages \immediate\write-1{ \the\count10 \space numeric registers used out of \ifx\eTeXversion\undefined256\else32768\fi} } \def\insertlegend{% \input th_legend } \def\insertcolorlegend{% \input th_legendcolor } \def\insertkeyplan#1#2{% \tmpdimen=#1 \tmpdimen=2\tmpdimen \setbox0=\hbox{\pdfximage width \tmpdimen {#2}\pdfrefximage\pdflastximage} % \pdfxform0\keyplan=\pdflastxform \setbox1=\hbox to #1 {\copy0\hss} \setbox2=\hbox to #1 {\hss\box0} \eject \ifodd\pageno\hbox{}\vfil\eject\fi \line{\hss\pdfxform1\pdfrefxform\pdflastxform} \vfil \eject \line{\pdfxform2\pdfrefxform\pdflastxform\hss} \vfil \eject } \newcount\stopcount \newcount\stoprow \newcount\rows \newcount\rowstmp \newcount\i \newcount\j \def\placemaps{ \message{ [Warning: \string\placemaps\space is deprecated; use \string\insertmaps] } \insertmaps } %% Petr Olsak's multicolumn macros (slightly modified) \newdimen\colsep \colsep=1em % horiz. mezera mezi sloupci \newcount\tempnum % pracovní promìnná \splittopskip=\baselineskip \def\roundtolines #1{%% zaokrouhlí na celé násobky vel. øádku \divide #1 by\baselineskip \multiply #1 by\baselineskip} \def\corrsize #1{%% #1 := #1 + \splittopskip - \topskip \advance #1 by \splittopskip \advance #1 by-\topskip} \def\begmulti#1{\par\bigskip\penalty0 \def\Ncols{#1} \setbox0=\vbox\bgroup\penalty0 %% \hsize := ¹íøka sloupce = (\hsize+\colsep) / n - \colsep \advance\hsize by\colsep \divide\hsize by\Ncols \advance\hsize by-\colsep} \def\endmulti{\vfil\egroup \setbox1=\vsplit0 to0pt %% \dimen1 := velikost zbylého místa na stránce \ifdim\pagegoal=\maxdimen \dimen1=\vsize \corrsize{\dimen1} \else \dimen1=\pagegoal \advance\dimen1 by-\pagetotal \fi \ifdim \dimen1<2\baselineskip \vfil\break \dimen1=\vsize \corrsize{\dimen1} \fi %% \dimen0 := vý¹ka n sloupcové sazby po rozdìlení do sloupcù %% = (\ht0 + (n-1)\baselineskip) / n, zaokruhleno na øádky \dimen0=\Ncols\baselineskip \advance\dimen0 by-\baselineskip \advance\dimen0 by \ht0 \divide\dimen0 by\Ncols \roundtolines{\dimen0} %% Rozdìlit sazbu n sloupcù do stránek nebo nerozdìlit ? \ifdim \dimen0>\dimen1 \splitpart \else \makecolumns{\dimen0} \fi \ifvoid0 \else \errmessage{Lost text in multiple columns?} \fi \bigskip} \def\makecolumns#1{\setbox1=\hbox{}\tempnum=0 \loop \ifnum\Ncols>\tempnum \setbox1=\hbox{\unhbox1 \vsplit0 to#1 \hss} \advance\tempnum by1 \repeat \hbox{}\nobreak\vskip-\splittopskip \nointerlineskip \line{\unhbox1\unskip}} \def\splitpart{\roundtolines{\dimen1} \makecolumns{\dimen1} \advance\dimen0 by-\dimen1 %% \dimen0 := vý¹ka _zbylé_ n sloupcové sazby %% \dimen1 := prázdné místo na stránce = (cca) \vsize \vfil\break \dimen1=\vsize \corrsize{\dimen1} %% Rozdìlit zbylou sazbu n sloupcù do více stránek ? \ifvoid0 \else \ifdim \dimen0>\dimen1 \splitpart \else \makecolumns{\dimen0} \fi \fi} %% end of multicolumn macros \input th_enc \input th_texts \input th_resources \input th_fontdef \nonstopmode \opacity{0.75} \def\scale{200} \pagesetup{21.0000cm}{29.7000cm}{20.0000cm}{28.7000cm}{0.5000cm}{0.5000cm} \def\maplayout{} \insertmaps \end therion/samples/areas/thTMPDIR/mptexpre.tex0000644000076400010400000000123311145241274021745 0ustar userAdministrators\def\updown#1#2{\vbox{\offinterlineskip\setbox100=\hbox{#1}\setbox101=\hbox{#2}\ifnum\wd100>\wd101\hsize=\wd100\else\hsize=\wd101\fi\centerline{\box100}\vskip4pt\centerline{\box101}}}\def\thlabel{\thnormalsize}\def\thremark{\thsmallsize\si}\def\thcomment{\thsmallsize}\def\thentrance{\thsmallsize}\def\thaltitude{\thsmallsize}\def\thstationname{\thsmallsize}\def\thdate{\thsmallsize}\def\thheight{\thsmallsize}\def\thheightpos{+\ignorespaces}\def\thheightneg{-\ignorespaces}\def\thframed{\thsmallsize}\def\thwallaltitude{\thtinysize} \def\thtinysize{\size[7]}\def\thsmallsize{\size[8]}\def\thnormalsize{\size[10]}\def\thlargesize{\size[14]}\def\thhugesize{\size[20]} therion/samples/areas/thTMPDIR/mptextmp.mp0000644000076400010400000000013511145241276021575 0ustar userAdministratorsverbatimtex \input th_enc.tex etex btex \mainfont 10\thinspace\thfb\char109 \mainfont{} etex therion/samples/areas/thTMPDIR/mptextmp.mpx0000644000076400010400000000064311145241276021771 0ustar userAdministrators% Written by DVItoMP, Version 0.64 (Web2c 7.5.2) begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture; string _n[]; vardef _s(expr _t,_f,_m,_x,_y)= addto _p also _t infont _f scaled _m shifted (_x,_y); enddef; _n0="cmss10"; _s("10",_n0,1.00000,0.0000,0.0000); _s("m",_n0,1.00000,11.6232,0.0000); setbounds _p to (0,0.0000)--(19.5379,0.0000)-- (19.5379,6.5311)--(0,6.5311)--cycle; _p endgroup mpxbreak therion/samples/areas/thTMPDIR/patterns.dat0000644000076400010400000000111011145241276021705 0ustar userAdministrators0.00002:data.4001:[-0.12003 -0.12003 0.12003 10.12003]:2.15991:10.24005:[0.7071 0.7071 -0.7071 0.7071 0 0] 0.00003:data.4002:[-0.12003 -0.12003 3.12003 3.12003]:3.24005:3.24005:[0.7071 0.7071 -0.7071 0.7071 0 0] 0.00005:data.4003:[2.09996 0.90007 9.90004 8.69997]:7.80008:7.7999:[1 0 0 1 0 0] 0.00006:data.4004:[0.72115 2.14305 19.9914 19.9914]:19.27025:17.84834:[1 0 0 1 0 0] 0.00008:data.4005:[-6.3 -2.30043 12.3 3.90004]:12:7.20007:[1 0 0 1 0 0] 0.00009:data.4006:[-4.50008 -2.72491 8.70015 5.09993]:12:9.60004:[1 0 0 1 0 0] 0.0001:data.4007:[0 0 10 10]:10:10:[1 0 0 1 0 0] therion/samples/areas/thTMPDIR/rgbcolors.dat0000644000076400010400000000011311145241276022043 0ustar userAdministrators0.00002:1 1 1 0.00003:0 0 1 0.00005:0 0 0 0.00006:1 1 1 0.00008:1 1 1 therion/samples/areas/thTMPDIR/scraps.dat0000644000076400010400000000041011145241276021342 0ustar userAdministrators[SCRAP] N aaaaaaa F -47.6177 -417.694 38.3823 20.306 B -41.6177 -420.694 33.3823 30.306 I -40.6177 -419.694 33.3823 29.306 E -41.6177 -420.694 34.3823 30.306 X -60.6177 -397.694 95.3823 56.306 P data.4bbox -4.61765 -193.694 Y 1 V -2 [LAYER] R 1 [MAP] therion/samples/areas/thTMPDIR/th_enc.tex0000644000076400010400000000176611145241274021354 0ustar userAdministrators\def\rms{\rm} \def\its{\it} \def\bfs{\bf} \def\sss{\ss} \def\sis{\si} \def\fixaccent#1#2 {{\setbox0\hbox{#2}\ifdim\ht0=1ex\accent#1 #2% \else\ooalign{\unhbox0\crcr\hidewidth\char#1\hidewidth}\fi}} \def\size[#1]{% \let\prevstyle\laststyle \baselineskip#1pt \baselineskip=1.2\baselineskip \def\rm{\font\thfb=cmr10 at#1pt\font\thfc=csr10 at#1pt\font\thfa=cmcyr10 at#1pt\let\laststyle\rms\thfb}% \def\it{\font\thfb=cmti10 at#1pt\font\thfc=csti10 at#1pt\font\thfa=cmcti10 at#1pt\let\laststyle\its\thfb}% \def\bf{\font\thfb=cmbx10 at#1pt\font\thfc=csbx10 at#1pt\font\thfa=cmcbx10 at#1pt\let\laststyle\bfs\thfb}% \def\ss{\font\thfb=cmss10 at#1pt\font\thfc=csss10 at#1pt\font\thfa=cmcss10 at#1pt\let\laststyle\sss\thfb}% \def\si{\font\thfb=cmssi10 at#1pt\font\thfc=csssi10 at#1pt\font\thfa=cmcssi10 at#1pt\let\laststyle\sis\thfb}% \prevstyle }\let\laststyle\rms \size[10]\ss \def\mainfont{\thfb} \ifx\TeXXeTstate\undefined \let\beginR\relax \let\endR\relax \def\TeXXeTstate=#1{\def\blbost{}} \fi therion/samples/areas/thTMPDIR/th_fontdef.tex0000644000076400010400000000376111145241276022233 0ustar userAdministrators\font\THFa=cmss10 \begingroup \catcode`\^^@=12\catcode`\^^?=12\catcode`\{=12 \catcode`\}=12\catcode`\$=12\catcode`\&=12 \catcode`\#=12\catcode`\_=12\catcode`\~=12 \catcode`\%=12 \catcode`\^^L=12\catcode`\^^A=12\catcode`\^^K=12\catcode`\^^I=12 \catcode`\^^M=12 \includechars\THFa:^^M01Tabcdehiklmnoprstuwy\endinclude\endgroup \immediate\pdfobj stream attr {/Type /Pattern /PaintType 1 /PatternType 1 /TilingType 1 /Matrix [0.7071 0.7071 -0.7071 0.7071 0 0] /BBox [-0.12003 -0.12003 0.12003 10.12003] /XStep 2.15991 /YStep 10.24005 /Resources << /ProcSet [/PDF ] >> } {0 g 0 G -0.12 -0.12 m 0.12 -0.12 l 0.12 0.12 l 0.12 10.12 l -0.12 10.12 l -0.12 9.88 l h f* } \newcount \THPc\THPc=\pdflastobj \immediate\pdfobj stream attr {/Type /Pattern /PaintType 1 /PatternType 1 /TilingType 1 /Matrix [0.7071 0.7071 -0.7071 0.7071 0 0] /BBox [-0.12003 -0.12003 3.12003 3.12003] /XStep 3.24005 /YStep 3.24005 /Resources << /ProcSet [/PDF ] >> } {0 g 0 G -0.12 -0.12 m 0.12 -0.12 l 0.12 0.12 l 0.12 3.12 l -0.12 3.12 l -0.12 2.88 l h f* -0.12 0.12 m -0.12 -0.12 l 0.12 -0.12 l 3.12 -0.12 l 3.12 0.12 l 2.88 0.12 l h f* } \newcount \THPd\THPd=\pdflastobj \immediate\pdfobj stream attr {/Type /Pattern /PaintType 1 /PatternType 1 /TilingType 1 /Matrix [1 0 0 1 0 0] /BBox [-6.3 -2.30043 12.3 3.90004] /XStep 12 /YStep 7.20007 /Resources << /ProcSet [/PDF ] >> } {0 g 0 G 0.6 w [] 0 d 1 J 1 j 10 M -6.00 0.00 m -6.00 -2.67 -2.00 -2.67 -2.00 0.00 c -2.00 -2.67 2.00 -2.67 2.00 0.00 c 2.00 -2.67 6.00 -2.67 6.00 0.00 c S 0.00 3.60 m 0.00 0.93 4.00 0.93 4.00 3.60 c 4.00 0.93 8.00 0.93 8.00 3.60 c 8.00 0.93 12.00 0.93 12.00 3.60 c S } \newcount \THPb\THPb=\pdflastobj \immediate\pdfobj stream attr {/Type /Pattern /PaintType 1 /PatternType 1 /TilingType 1 /Matrix [1 0 0 1 0 0] /BBox [-4.50008 -2.72491 8.70015 5.09993] /XStep 12 /YStep 9.60004 /Resources << /ProcSet [/PDF ] >> } {0 g 0 G 0.6 w [] 0 d 1 J 1 j 10 M -4.20 0.00 m -2.33 -3.23 2.33 -3.23 4.20 0.00 c S 0.00 4.80 m 1.87 1.57 6.53 1.57 8.40 4.80 c S } \newcount \THPa\THPa=\pdflastobj therion/samples/areas/thTMPDIR/th_formdef.tex0000644000076400010400000006521311145241276022230 0ustar userAdministrators% \setbox\xxx=\hbox{\vbox to438.00bp{\vfill \PL{q}\PL{79.29 0.27 m}% \PL{68.24 46.59 89.29 148.69 75.89 190.23 c}% \PL{62.49 231.78 81.59 382.65 74.77 446.85 c}% \PL{52.57 445.76 30.36 444.67 8.16 443.58 c}% \PL{19.29 387.34 -3.29 245.70 12.44 188.57 c}% \PL{23.45 148.59 7.67 30.28 14.65 -1.80 c}% \PL{36.20 -1.11 57.74 -0.42 79.29 0.27 c}% \PL{W* n}\PL{q}% \PL{77.19 75.30 m}% \PL{64.30 74.51 32.39 74.55 14.38 75.46 c}% \PL{14.38 75.46 14.38 75.46 14.38 75.46 c}% \PL{13.86 64.00 13.37 52.87 13.08 42.64 c}% \PL{13.08 42.64 l}% \PL{29.21 42.18 61.63 42.65 75.98 43.66 c}% \PL{75.98 43.66 75.98 43.66 75.98 43.66 c}% \PL{76.11 53.73 76.59 64.41 77.19 75.30 c}% \PL{77.19 75.30 77.19 75.30 77.19 75.30 c}% \PL{h}% \PL{W* n}% \PL{0.6 w}% \PL{[] 0 d}% \PL{1 J}% \PL{1 j}% \PL{10 M}% \PL{13.74 33.91 m}% \PL{18.54 33.91 l}% \PL{S}% \PL{0.6 w}% \PL{16.14 31.51 m}% \PL{16.14 36.31 l}% \PL{S}% \PL{0.6 w}% \PL{3.91 75.36 m}% \PL{8.71 75.36 l}% \PL{S}% \PL{0.6 w}% \PL{6.31 72.96 m}% \PL{6.31 77.76 l}% \PL{S}% \PL{0.6 w}% \PL{25.84 50.69 m}% \PL{30.64 50.69 l}% \PL{S}% \PL{0.6 w}% \PL{28.24 48.29 m}% \PL{28.24 53.09 l}% \PL{S}% \PL{0.6 w}% \PL{43.49 53.44 m}% \PL{48.29 53.44 l}% \PL{S}% \PL{0.6 w}% \PL{45.89 51.04 m}% \PL{45.89 55.84 l}% \PL{S}% \PL{0.6 w}% \PL{64.26 58.33 m}% \PL{69.06 58.33 l}% \PL{S}% \PL{0.6 w}% \PL{66.66 55.93 m}% \PL{66.66 60.73 l}% \PL{S}% \PL{Q}% \PL{q}% \PL{75.98 43.66 m}% \PL{61.63 42.65 29.21 42.18 13.08 42.64 c}% \PL{13.07 42.64 13.08 42.64 13.08 42.64 c}% \PL{12.68 28.79 12.64 16.58 13.39 7.43 c}% \PL{13.39 7.43 13.39 7.43 13.39 7.43 c}% \PL{31.58 6.92 63.58 6.53 77.87 7.60 c}% \PL{77.87 7.60 l}% \PL{76.26 17.93 75.81 30.26 75.98 43.66 c}% \PL{75.98 43.66 75.98 43.66 75.98 43.66 c}% \PL{h}% \PL{W* n}% \PL{0 g 0 G}% \PL{0.6 w}% \PL{[] 0 d}% \PL{1 J}% \PL{1 j}% \PL{10 M}% \PL{4.94 7.27 m}% \PL{4.94 9.67 l}% \PL{S}% \PL{0.6 w}% \PL{4.94 7.27 m}% \PL{2.86 8.47 l}% \PL{S}% \PL{4.94 7.27 m}% \PL{2.86 6.07 l}% \PL{S}% \PL{0.6 w}% \PL{4.94 7.27 m}% \PL{4.94 4.87 l}% \PL{S}% \PL{0.6 w}% \PL{4.94 7.27 m}% \PL{7.01 6.07 l}% \PL{S}% \PL{4.94 7.27 m}% \PL{7.01 8.47 l}% \PL{S}% \PL{4.09 10.52 m}% \PL{4.94 9.67 l}% \PL{5.78 10.52 l}% \PL{S}% \PL{1.70 8.16 m}% \PL{2.86 8.47 l}% \PL{2.55 9.63 l}% \PL{S}% \PL{2.55 4.91 m}% \PL{2.86 6.07 l}% \PL{1.70 6.38 l}% \PL{S}% \PL{5.78 4.02 m}% \PL{4.94 4.87 l}% \PL{4.09 4.02 l}% \PL{S}% \PL{8.17 6.38 m}% \PL{7.01 6.07 l}% \PL{7.33 4.91 l}% \PL{S}% \PL{7.33 9.63 m}% \PL{7.01 8.47 l}% \PL{8.17 8.16 l}% \PL{S}% \PL{0.6 w}% \PL{3.21 36.50 m}% \PL{3.21 38.90 l}% \PL{S}% \PL{0.6 w}% \PL{3.21 36.50 m}% \PL{1.13 37.70 l}% \PL{S}% \PL{3.21 36.50 m}% \PL{1.13 35.30 l}% \PL{S}% \PL{0.6 w}% \PL{3.21 36.50 m}% \PL{3.21 34.10 l}% \PL{S}% \PL{0.6 w}% \PL{3.21 36.50 m}% \PL{5.29 35.30 l}% \PL{S}% \PL{3.21 36.50 m}% \PL{5.29 37.70 l}% \PL{S}% \PL{2.36 39.75 m}% \PL{3.21 38.90 l}% \PL{4.06 39.75 l}% \PL{S}% \PL{-0.03 37.39 m}% \PL{1.13 37.70 l}% \PL{0.82 38.86 l}% \PL{S}% \PL{0.82 34.14 m}% \PL{1.13 35.30 l}% \PL{-0.03 35.61 l}% \PL{S}% \PL{4.06 33.26 m}% \PL{3.21 34.10 l}% \PL{2.36 33.26 l}% \PL{S}% \PL{6.45 35.61 m}% \PL{5.29 35.30 l}% \PL{5.60 34.14 l}% \PL{S}% \PL{5.60 38.86 m}% \PL{5.29 37.70 l}% \PL{6.45 37.39 l}% \PL{S}% \PL{0.6 w}% \PL{25.74 27.46 m}% \PL{25.74 29.86 l}% \PL{S}% \PL{0.6 w}% \PL{25.74 27.46 m}% \PL{23.66 28.66 l}% \PL{S}% \PL{25.74 27.46 m}% \PL{23.66 26.26 l}% \PL{S}% \PL{0.6 w}% \PL{25.74 27.46 m}% \PL{25.74 25.06 l}% \PL{S}% \PL{0.6 w}% \PL{25.74 27.46 m}% \PL{27.82 26.26 l}% \PL{S}% \PL{25.74 27.46 m}% \PL{27.82 28.66 l}% \PL{S}% \PL{24.89 30.71 m}% \PL{25.74 29.86 l}% \PL{26.59 30.71 l}% \PL{S}% \PL{22.50 28.35 m}% \PL{23.66 28.66 l}% \PL{23.35 29.82 l}% \PL{S}% \PL{23.35 25.10 m}% \PL{23.66 26.26 l}% \PL{22.50 26.57 l}% \PL{S}% \PL{26.59 24.21 m}% \PL{25.74 25.06 l}% \PL{24.89 24.21 l}% \PL{S}% \PL{28.98 26.57 m}% \PL{27.82 26.26 l}% \PL{28.13 25.10 l}% \PL{S}% \PL{28.13 29.82 m}% \PL{27.82 28.66 l}% \PL{28.98 28.35 l}% \PL{S}% \PL{0.6 w}% \PL{45.08 15.33 m}% \PL{45.08 17.73 l}% \PL{S}% \PL{0.6 w}% \PL{45.08 15.33 m}% \PL{43.00 16.53 l}% \PL{S}% \PL{45.08 15.33 m}% \PL{43.00 14.13 l}% \PL{S}% \PL{0.6 w}% \PL{45.08 15.33 m}% \PL{45.08 12.93 l}% \PL{S}% \PL{0.6 w}% \PL{45.08 15.33 m}% \PL{47.16 14.13 l}% \PL{S}% \PL{45.08 15.33 m}% \PL{47.16 16.53 l}% \PL{S}% \PL{44.23 18.58 m}% \PL{45.08 17.73 l}% \PL{45.93 18.58 l}% \PL{S}% \PL{41.84 16.22 m}% \PL{43.00 16.53 l}% \PL{42.69 17.69 l}% \PL{S}% \PL{42.69 12.97 m}% \PL{43.00 14.13 l}% \PL{41.84 14.44 l}% \PL{S}% \PL{45.93 12.08 m}% \PL{45.08 12.93 l}% \PL{44.23 12.08 l}% \PL{S}% \PL{48.32 14.44 m}% \PL{47.16 14.13 l}% \PL{47.47 12.97 l}% \PL{S}% \PL{47.47 17.69 m}% \PL{47.16 16.53 l}% \PL{48.32 16.22 l}% \PL{S}% \PL{0.6 w}% \PL{64.22 29.19 m}% \PL{64.22 31.59 l}% \PL{S}% \PL{0.6 w}% \PL{64.22 29.19 m}% \PL{62.14 30.39 l}% \PL{S}% \PL{64.22 29.19 m}% \PL{62.14 27.99 l}% \PL{S}% \PL{0.6 w}% \PL{64.22 29.19 m}% \PL{64.22 26.79 l}% \PL{S}% \PL{0.6 w}% \PL{64.22 29.19 m}% \PL{66.30 27.99 l}% \PL{S}% \PL{64.22 29.19 m}% \PL{66.30 30.39 l}% \PL{S}% \PL{63.37 32.44 m}% \PL{64.22 31.59 l}% \PL{65.07 32.44 l}% \PL{S}% \PL{60.98 30.08 m}% \PL{62.14 30.39 l}% \PL{61.83 31.55 l}% \PL{S}% \PL{61.83 26.83 m}% \PL{62.14 27.99 l}% \PL{60.98 28.30 l}% \PL{S}% \PL{65.07 25.94 m}% \PL{64.22 26.79 l}% \PL{63.37 25.94 l}% \PL{S}% \PL{67.45 28.30 m}% \PL{66.30 27.99 l}% \PL{66.61 26.83 l}% \PL{S}% \PL{66.61 31.55 m}% \PL{66.30 30.39 l}% \PL{67.45 30.08 l}% \PL{S}% \PL{Q}% \PL{/GS1 gs}% \PL{1 1 1 rg 1 1 1 RG}% \PL{77.27 185.26 m}% \PL{63.36 183.26 32.36 181.98 13.83 182.37 c}% \PL{13.83 182.37 l}% \PL{15.54 173.03 16.28 160.90 16.44 147.28 c}% \PL{16.44 147.28 l}% \PL{33.82 146.50 67.66 148.20 80.52 149.86 c}% \PL{80.52 149.86 l}% \PL{80.44 163.43 79.56 175.59 77.27 185.26 c}% \PL{h}% \PL{f*}% \PL{80.52 149.86 m}% \PL{67.66 148.20 33.82 146.50 16.44 147.28 c}% \PL{16.44 147.28 16.44 147.29 16.44 147.28 c}% \PL{16.58 135.67 16.30 122.97 15.84 109.98 c}% \PL{15.84 109.98 15.84 109.98 15.84 109.98 c}% \PL{38.78 108.57 66.83 109.25 79.27 110.75 c}% \PL{79.27 110.75 l}% \PL{80.03 124.39 80.59 137.69 80.52 149.86 c}% \PL{h}% \PL{f*}% \PL{/GS0 gs}% \PL{/CS1 cs /0.00009 scn}% \PL{80.52 149.86 m}% \PL{67.66 148.20 33.82 146.50 16.44 147.28 c}% \PL{16.44 147.28 16.44 147.29 16.44 147.28 c}% \PL{16.58 135.67 16.30 122.97 15.84 109.98 c}% \PL{15.84 109.98 15.84 109.98 15.84 109.98 c}% \PL{38.78 108.57 66.83 109.25 79.27 110.75 c}% \PL{79.27 110.75 l}% \PL{80.03 124.39 80.59 137.69 80.52 149.86 c}% \PL{h}% \PL{f*}% \PL{/GS1 gs}% \PL{1 1 1 rg 1 1 1 RG}% \PL{79.27 110.75 m}% \PL{66.83 109.25 38.78 108.57 15.84 109.98 c}% \PL{15.84 109.98 l}% \PL{15.44 98.51 14.90 86.82 14.38 75.46 c}% \PL{14.38 75.46 14.38 75.46 14.38 75.46 c}% \PL{32.39 74.55 64.30 74.51 77.19 75.30 c}% \PL{77.19 75.30 l}% \PL{75.59 46.33 74.86 18.82 79.29 0.27 c}% \PL{79.29 0.27 l}% \PL{79.29 0.27 l}% \PL{73.07 26.34 77.02 70.08 79.27 110.75 c}% \PL{h}% \PL{f*}% \PL{/GS0 gs}% \PL{/CS1 cs /0.00008 scn}% \PL{79.27 110.75 m}% \PL{66.83 109.25 38.78 108.57 15.84 109.98 c}% \PL{15.84 109.98 l}% \PL{15.44 98.51 14.90 86.82 14.38 75.46 c}% \PL{14.38 75.46 14.38 75.46 14.38 75.46 c}% \PL{32.39 74.55 64.30 74.51 77.19 75.30 c}% \PL{77.19 75.30 l}% \PL{75.59 46.33 74.86 18.82 79.29 0.27 c}% \PL{79.29 0.27 l}% \PL{79.29 0.27 l}% \PL{73.07 26.34 77.02 70.08 79.27 110.75 c}% \PL{h}% \PL{f*}% \PL{/GS1 gs}% \PL{1 1 1 rg 1 1 1 RG}% \PL{75.68 435.28 m}% \PL{57.03 439.10 25.46 435.94 9.91 431.72 c}% \PL{9.91 431.72 9.91 431.73 9.91 431.72 c}% \PL{11.11 420.48 11.47 407.10 11.36 392.42 c}% \PL{11.36 392.42 l}% \PL{28.84 396.00 59.97 398.08 76.16 395.59 c}% \PL{76.16 395.59 l}% \PL{76.41 410.19 76.33 423.68 75.68 435.28 c}% \PL{h}% \PL{f*}% \PL{/GS0 gs}% \PL{/CS1 cs /0.00002 scn}% \PL{75.68 435.28 m}% \PL{57.03 439.10 25.46 435.94 9.91 431.72 c}% \PL{9.91 431.72 9.91 431.73 9.91 431.72 c}% \PL{11.11 420.48 11.47 407.10 11.36 392.42 c}% \PL{11.36 392.42 l}% \PL{28.84 396.00 59.97 398.08 76.16 395.59 c}% \PL{76.16 395.59 l}% \PL{76.41 410.19 76.33 423.68 75.68 435.28 c}% \PL{h}% \PL{f*}% \PL{/GS1 gs}% \PL{1 1 1 rg 1 1 1 RG}% \PL{76.16 395.59 m}% \PL{59.97 398.08 28.84 396.00 11.36 392.42 c}% \PL{11.36 392.42 11.36 392.42 11.36 392.42 c}% \PL{11.28 382.28 10.97 371.51 10.54 360.40 c}% \PL{10.54 360.39 10.54 360.40 10.54 360.40 c}% \PL{27.40 357.93 61.06 358.92 75.12 361.13 c}% \PL{75.12 361.13 75.12 361.13 75.12 361.14 c}% \PL{75.59 373.03 75.97 384.62 76.16 395.59 c}% \PL{h}% \PL{f*}% \PL{/GS0 gs}% \PL{/CS1 cs /0.00003 scn}% \PL{76.16 395.59 m}% \PL{59.97 398.08 28.84 396.00 11.36 392.42 c}% \PL{11.36 392.42 11.36 392.42 11.36 392.42 c}% \PL{11.28 382.28 10.97 371.51 10.54 360.40 c}% \PL{10.54 360.39 10.54 360.40 10.54 360.40 c}% \PL{27.40 357.93 61.06 358.92 75.12 361.13 c}% \PL{75.12 361.13 75.12 361.13 75.12 361.14 c}% \PL{75.59 373.03 75.97 384.62 76.16 395.59 c}% \PL{h}% \PL{f*}% \PL{q}% \PL{75.12 361.13 m}% \PL{61.05 358.92 27.40 357.93 10.54 360.40 c}% \PL{10.54 360.40 10.54 360.40 10.54 360.40 c}% \PL{10.08 348.33 9.48 335.85 8.90 323.30 c}% \PL{8.90 323.30 l}% \PL{26.34 321.18 59.61 320.05 73.35 320.92 c}% \PL{73.35 320.92 l}% \PL{73.96 334.40 74.60 347.95 75.12 361.13 c}% \PL{75.12 361.14 75.12 361.13 75.12 361.13 c}% \PL{h}% \PL{W* n}% \PL{0 g 0 G}% \PL{0.6 w}% \PL{[] 0 d}% \PL{1 J}% \PL{1 j}% \PL{10 M}% \PL{7.89 314.39 m}% \PL{7.23 316.51 10.88 316.06 10.28 313.91 c}% \PL{10.68 312.69 13.83 312.33 13.87 314.69 c}% \PL{S}% \PL{21.63 323.64 m}% \PL{21.46 326.11 24.63 325.69 24.73 323.89 c}% \PL{24.38 322.13 27.38 321.92 27.74 323.67 c}% \PL{S}% \PL{17.58 331.76 m}% \PL{17.21 333.42 20.70 333.65 20.50 331.88 c}% \PL{20.59 329.68 23.36 329.42 23.12 331.36 c}% \PL{S}% \PL{24.02 347.46 m}% \PL{23.83 349.54 26.47 349.22 26.86 347.79 c}% \PL{26.66 345.20 29.68 345.58 29.54 347.28 c}% \PL{S}% \PL{40.89 337.65 m}% \PL{40.79 339.60 43.82 339.55 43.57 337.95 c}% \PL{43.84 336.17 47.25 336.12 47.31 338.17 c}% \PL{S}% \PL{43.91 349.52 m}% \PL{44.05 351.72 47.13 351.20 46.72 349.50 c}% \PL{47.48 347.22 50.52 347.62 50.25 349.30 c}% \PL{S}% \PL{52.58 311.39 m}% \PL{52.63 313.14 55.80 313.69 55.57 311.17 c}% \PL{55.63 309.63 59.03 309.19 58.89 311.77 c}% \PL{S}% \PL{58.56 334.32 m}% \PL{58.61 336.35 61.56 336.27 62.04 334.30 c}% \PL{61.78 332.91 64.30 332.80 64.80 334.66 c}% \PL{S}% \PL{64.04 351.54 m}% \PL{63.82 353.30 66.88 353.58 67.48 351.50 c}% \PL{67.53 349.17 70.43 349.45 69.79 351.32 c}% \PL{S}% \PL{Q}% \PL{q}% \PL{73.35 320.92 m}% \PL{59.61 320.05 26.34 321.18 8.90 323.30 c}% \PL{8.89 323.30 8.90 323.30 8.90 323.30 c}% \PL{8.34 311.54 7.80 299.71 7.39 288.11 c}% \PL{7.39 288.11 7.39 288.11 7.39 288.11 c}% \PL{25.68 286.55 55.70 286.54 71.92 287.10 c}% \PL{71.92 287.10 l}% \PL{72.33 298.14 72.83 309.50 73.35 320.92 c}% \PL{h}% \PL{W* n}% \PL{0 g 0 G}% \PL{0.6 w}% \PL{[] 0 d}% \PL{1 J}% \PL{1 j}% \PL{10 M}% \PL{6.21 284.94 m}% \PL{6.21 284.94 l}% \PL{S}% \PL{2.61 297.75 m}% \PL{2.61 297.75 l}% \PL{S}% \PL{4.20 308.69 m}% \PL{4.20 308.69 l}% \PL{S}% \PL{9.50 316.92 m}% \PL{9.50 316.92 l}% \PL{S}% \PL{17.40 282.35 m}% \PL{17.40 282.35 l}% \PL{S}% \PL{19.17 297.52 m}% \PL{19.17 297.52 l}% \PL{S}% \PL{19.08 311.39 m}% \PL{19.08 311.39 l}% \PL{S}% \PL{19.21 321.56 m}% \PL{19.21 321.56 l}% \PL{S}% \PL{31.79 281.96 m}% \PL{31.79 281.96 l}% \PL{S}% \PL{26.56 300.34 m}% \PL{26.56 300.34 l}% \PL{S}% \PL{27.89 309.47 m}% \PL{27.89 309.47 l}% \PL{S}% \PL{31.91 322.15 m}% \PL{31.91 322.15 l}% \PL{S}% \PL{43.48 284.55 m}% \PL{43.48 284.55 l}% \PL{S}% \PL{42.90 292.99 m}% \PL{42.90 292.99 l}% \PL{S}% \PL{37.90 306.91 m}% \PL{37.90 306.91 l}% \PL{S}% \PL{38.64 319.19 m}% \PL{38.64 319.19 l}% \PL{S}% \PL{56.80 282.35 m}% \PL{56.80 282.35 l}% \PL{S}% \PL{50.80 300.83 m}% \PL{50.80 300.83 l}% \PL{S}% \PL{53.14 308.26 m}% \PL{53.14 308.26 l}% \PL{S}% \PL{49.53 318.28 m}% \PL{49.53 318.28 l}% \PL{S}% \PL{65.67 281.37 m}% \PL{65.67 281.37 l}% \PL{S}% \PL{65.35 292.59 m}% \PL{65.35 292.59 l}% \PL{S}% \PL{65.29 308.93 m}% \PL{65.29 308.93 l}% \PL{S}% \PL{64.32 323.70 m}% \PL{64.32 323.70 l}% \PL{S}% \PL{Q}% \PL{q}% \PL{71.92 287.10 m}% \PL{55.70 286.54 25.68 286.55 7.39 288.11 c}% \PL{7.39 288.11 7.39 288.11 7.39 288.11 c}% \PL{6.97 276.38 6.69 264.88 6.66 253.90 c}% \PL{6.66 253.90 l}% \PL{29.92 252.33 57.44 252.39 71.04 253.03 c}% \PL{71.04 253.03 71.04 253.02 71.04 253.03 c}% \PL{71.16 263.78 71.48 275.25 71.92 287.10 c}% \PL{h}% \PL{W* n}% \PL{0 g 0 G}% \PL{0.6 w}% \PL{[] 0 d}% \PL{1 j}% \PL{10 M}% \PL{2.03 255.04 m}% \PL{1.76 255.32 1.35 255.39 0.97 255.26 c}% \PL{0.39 255.07 -0.08 254.65 -0.52 254.22 c}% \PL{-0.96 253.78 -1.39 253.32 -1.59 252.74 c}% \PL{-1.72 252.37 -1.66 251.95 -1.39 251.68 c}% \PL{-1.12 251.40 -0.70 251.34 -0.33 251.46 c}% \PL{0.26 251.65 0.72 252.07 1.16 252.51 c}% \PL{1.60 252.94 2.04 253.40 2.24 253.98 c}% \PL{2.36 254.35 2.30 254.77 2.03 255.04 c}% \PL{h}% \PL{S}% \PL{-1.48 289.15 m}% \PL{-1.34 288.79 -0.99 288.56 -0.60 288.52 c}% \PL{0.02 288.46 0.62 288.66 1.19 288.88 c}% \PL{1.77 289.10 2.35 289.35 2.77 289.80 c}% \PL{3.03 290.09 3.15 290.50 3.01 290.86 c}% \PL{2.87 291.22 2.52 291.45 2.13 291.49 c}% \PL{1.51 291.55 0.92 291.35 0.34 291.13 c}% \PL{-0.24 290.91 -0.82 290.66 -1.24 290.21 c}% \PL{-1.50 289.92 -1.61 289.51 -1.48 289.15 c}% \PL{h}% \PL{S}% \PL{20.70 268.55 m}% \PL{20.44 268.84 20.03 268.92 19.66 268.82 c}% \PL{19.06 268.67 18.57 268.27 18.11 267.86 c}% \PL{17.64 267.45 17.19 267.02 16.95 266.45 c}% \PL{16.81 266.08 16.84 265.67 17.10 265.38 c}% \PL{17.35 265.08 17.76 265.00 18.14 265.10 c}% \PL{18.74 265.25 19.23 265.65 19.69 266.06 c}% \PL{20.15 266.47 20.61 266.90 20.84 267.47 c}% \PL{20.99 267.84 20.96 268.25 20.70 268.55 c}% \PL{h}% \PL{S}% \PL{21.28 292.52 m}% \PL{21.02 292.80 20.61 292.89 20.23 292.78 c}% \PL{19.63 292.62 19.15 292.21 18.69 291.80 c}% \PL{18.23 291.39 17.78 290.95 17.55 290.37 c}% \PL{17.41 290.01 17.45 289.59 17.71 289.30 c}% \PL{17.97 289.02 18.38 288.93 18.76 289.04 c}% \PL{19.35 289.20 19.84 289.61 20.30 290.02 c}% \PL{20.76 290.43 21.21 290.87 21.43 291.44 c}% \PL{21.58 291.81 21.54 292.23 21.28 292.52 c}% \PL{h}% \PL{S}% \PL{38.99 247.04 m}% \PL{39.20 247.36 39.18 247.78 38.98 248.12 c}% \PL{38.66 248.65 38.15 249.01 37.63 249.35 c}% \PL{37.11 249.68 36.57 250.01 35.96 250.08 c}% \PL{35.57 250.12 35.17 249.97 34.96 249.65 c}% \PL{34.75 249.32 34.78 248.90 34.98 248.57 c}% \PL{35.29 248.03 35.81 247.67 36.32 247.34 c}% \PL{36.84 247.00 37.38 246.68 38.00 246.61 c}% \PL{38.39 246.56 38.78 246.71 38.99 247.04 c}% \PL{h}% \PL{S}% \PL{37.11 266.57 m}% \PL{36.79 266.34 36.66 265.95 36.71 265.56 c}% \PL{36.80 264.95 37.14 264.42 37.50 263.91 c}% \PL{37.85 263.40 38.23 262.90 38.77 262.60 c}% \PL{39.11 262.42 39.53 262.40 39.85 262.63 c}% \PL{40.17 262.85 40.30 263.25 40.25 263.63 c}% \PL{40.16 264.24 39.82 264.77 39.47 265.28 c}% \PL{39.11 265.79 38.73 266.29 38.19 266.59 c}% \PL{37.85 266.77 37.43 266.79 37.11 266.57 c}% \PL{h}% \PL{S}% \PL{44.87 291.21 m}% \PL{44.61 291.49 44.19 291.56 43.82 291.44 c}% \PL{43.23 291.26 42.76 290.84 42.31 290.41 c}% \PL{41.87 289.98 41.43 289.53 41.22 288.95 c}% \PL{41.09 288.58 41.15 288.16 41.42 287.88 c}% \PL{41.69 287.60 42.10 287.53 42.47 287.65 c}% \PL{43.06 287.83 43.53 288.25 43.98 288.68 c}% \PL{44.42 289.11 44.86 289.56 45.07 290.15 c}% \PL{45.20 290.51 45.14 290.93 44.87 291.21 c}% \PL{h}% \PL{S}% \PL{58.57 246.28 m}% \PL{58.73 245.93 59.10 245.73 59.49 245.72 c}% \PL{60.11 245.70 60.69 245.94 61.25 246.20 c}% \PL{61.81 246.46 62.37 246.74 62.76 247.23 c}% \PL{63.00 247.53 63.09 247.94 62.92 248.30 c}% \PL{62.76 248.65 62.39 248.85 62.00 248.86 c}% \PL{61.38 248.88 60.80 248.64 60.24 248.38 c}% \PL{59.68 248.12 59.12 247.83 58.73 247.35 c}% \PL{58.49 247.04 58.41 246.63 58.57 246.28 c}% \PL{h}% \PL{S}% \PL{58.45 267.83 m}% \PL{58.83 267.79 59.19 268.01 59.40 268.34 c}% \PL{59.73 268.86 59.82 269.48 59.88 270.10 c}% \PL{59.94 270.71 59.98 271.34 59.76 271.92 c}% \PL{59.63 272.28 59.32 272.57 58.93 272.61 c}% \PL{58.54 272.65 58.18 272.43 57.97 272.10 c}% \PL{57.64 271.58 57.56 270.95 57.49 270.34 c}% \PL{57.43 269.73 57.39 269.10 57.61 268.52 c}% \PL{57.75 268.15 58.06 267.87 58.45 267.83 c}% \PL{h}% \PL{S}% \PL{Q}% \PL{q}% \PL{71.04 253.03 m}% \PL{57.44 252.39 29.92 252.33 6.66 253.90 c}% \PL{6.66 253.90 6.66 253.90 6.66 253.90 c}% \PL{6.63 241.58 6.92 229.92 7.71 219.33 c}% \PL{7.71 219.33 7.71 219.33 7.71 219.33 c}% \PL{23.13 219.02 55.27 219.69 71.53 220.93 c}% \PL{71.53 220.93 l}% \PL{71.04 230.50 70.91 241.35 71.04 253.02 c}% \PL{71.04 253.03 71.04 253.03 71.04 253.03 c}% \PL{h}% \PL{W* n}% \PL{0 g 0 G}% \PL{0.6 w}% \PL{[] 0 d}% \PL{1 J}% \PL{1 j}% \PL{10 M}% \PL{9.11 217.12 m}% \PL{5.68 220.48 l}% \PL{S}% \PL{3.16 225.72 m}% \PL{-0.43 228.91 l}% \PL{S}% \PL{0.6 w}% \PL{7.99 239.97 m}% \PL{8.27 244.76 l}% \PL{S}% \PL{0.6 w}% \PL{6.71 249.90 m}% \PL{4.32 254.06 l}% \PL{S}% \PL{18.45 214.20 m}% \PL{15.88 218.25 l}% \PL{S}% \PL{15.82 229.91 m}% \PL{13.37 225.78 l}% \PL{S}% \PL{14.52 241.02 m}% \PL{13.00 245.58 l}% \PL{S}% \PL{13.23 253.56 m}% \PL{18.01 253.07 l}% \PL{S}% \PL{27.56 219.29 m}% \PL{32.26 218.31 l}% \PL{S}% \PL{0.6 w}% \PL{30.46 230.19 m}% \PL{30.93 234.96 l}% \PL{S}% \PL{28.67 245.71 m}% \PL{28.46 240.91 l}% \PL{S}% \PL{0.6 w}% \PL{29.90 253.48 m}% \PL{28.65 248.85 l}% \PL{S}% \PL{0.6 w}% \PL{43.62 220.71 m}% \PL{43.81 215.91 l}% \PL{S}% \PL{0.6 w}% \PL{38.18 228.29 m}% \PL{40.33 224.00 l}% \PL{S}% \PL{39.53 240.27 m}% \PL{34.95 238.83 l}% \PL{S}% \PL{36.85 253.35 m}% \PL{38.42 248.81 l}% \PL{S}% \PL{54.94 218.74 m}% \PL{55.90 214.03 l}% \PL{S}% \PL{52.97 231.68 m}% \PL{49.46 228.40 l}% \PL{S}% \PL{51.27 240.65 m}% \PL{55.88 239.30 l}% \PL{S}% \PL{54.62 258.21 m}% \PL{51.13 254.92 l}% \PL{S}% \PL{70.23 215.11 m}% \PL{65.48 214.43 l}% \PL{S}% \PL{67.26 228.28 m}% \PL{62.49 227.75 l}% \PL{S}% \PL{67.51 241.71 m}% \PL{66.33 246.37 l}% \PL{S}% \PL{65.47 253.64 m}% \PL{63.78 249.14 l}% \PL{S}% \PL{Q}% \PL{q}% \PL{71.53 220.93 m}% \PL{55.27 219.69 23.13 219.02 7.71 219.33 c}% \PL{7.71 219.33 7.71 219.33 7.71 219.33 c}% \PL{8.59 207.56 10.09 197.12 12.44 188.57 c}% \PL{12.96 186.67 13.42 184.60 13.83 182.37 c}% \PL{13.83 182.37 13.83 182.37 13.83 182.37 c}% \PL{32.36 181.98 63.36 183.26 77.27 185.26 c}% \PL{77.27 185.26 77.27 185.26 77.27 185.26 c}% \PL{76.85 187.00 76.40 188.66 75.89 190.23 c}% \PL{73.55 197.48 72.20 208.06 71.53 220.93 c}% \PL{71.53 220.93 71.53 220.93 71.53 220.93 c}% \PL{h}% \PL{W* n}% \PL{/GS1 gs}% \PL{1 1 1 rg 1 1 1 RG}% \PL{6.80 190.76 m}% \PL{-3.49 191.55 l}% \PL{-7.94 181.60 l}% \PL{6.86 175.26 l}% \PL{h}% \PL{f*}% \PL{/GS0 gs}% \PL{0 g 0 G}% \PL{0.6 w}% \PL{[] 0 d}% \PL{1 j}% \PL{10 M}% \PL{6.80 190.76 m}% \PL{-3.49 191.55 l}% \PL{-7.94 181.60 l}% \PL{6.86 175.26 l}% \PL{h}% \PL{S}% \PL{/GS1 gs}% \PL{1 1 1 rg 1 1 1 RG}% \PL{1.79 203.23 m}% \PL{5.66 212.24 l}% \PL{-2.94 221.48 l}% \PL{-10.86 211.29 l}% \PL{h}% \PL{f*}% \PL{/GS0 gs}% \PL{0 g 0 G}% \PL{1.79 203.23 m}% \PL{5.66 212.24 l}% \PL{-2.94 221.48 l}% \PL{-10.86 211.29 l}% \PL{h}% \PL{S}% \PL{/GS1 gs}% \PL{1 1 1 rg 1 1 1 RG}% \PL{33.77 195.66 m}% \PL{42.97 192.23 l}% \PL{45.00 202.36 l}% \PL{33.87 204.31 l}% \PL{h}% \PL{f*}% \PL{/GS0 gs}% \PL{0 g 0 G}% \PL{33.77 195.66 m}% \PL{42.97 192.23 l}% \PL{45.00 202.36 l}% \PL{33.87 204.31 l}% \PL{h}% \PL{S}% \PL{/GS1 gs}% \PL{1 1 1 rg 1 1 1 RG}% \PL{39.60 204.06 m}% \PL{36.07 192.96 l}% \PL{48.46 191.74 l}% \PL{53.99 201.43 l}% \PL{h}% \PL{f*}% \PL{/GS0 gs}% \PL{0 g 0 G}% \PL{39.60 204.06 m}% \PL{36.07 192.96 l}% \PL{48.46 191.74 l}% \PL{53.99 201.43 l}% \PL{h}% \PL{S}% \PL{Q}% \PL{0 g 0 G}% \PL{0.6 w}% \PL{[] 0 d}% \PL{1 J}% \PL{1 j}% \PL{10 M}% \PL{7.06 430.88 m}% \PL{23.28 436.15 66.09 440.44 83.20 433.03 c}% \PL{S}% \PL{7.75 391.61 m}% \PL{25.96 396.11 66.40 398.80 81.11 394.54 c}% \PL{S}% \PL{6.79 361.07 m}% \PL{24.27 357.23 73.04 359.18 80.55 362.41 c}% \PL{S}% \PL{3.10 324.15 m}% \PL{19.78 321.10 70.56 319.50 78.48 321.54 c}% \PL{S}% \PL{3.76 288.46 m}% \PL{24.40 286.23 66.05 286.54 79.13 287.44 c}% \PL{S}% \PL{0.84 254.33 m}% \PL{31.80 251.78 73.84 252.49 78.99 253.72 c}% \PL{S}% \PL{3.88 219.44 m}% \PL{20.15 218.77 72.49 219.96 80.41 222.00 c}% \PL{S}% \PL{7.73 182.59 m}% \PL{27.17 181.54 73.16 183.47 82.66 186.32 c}% \PL{S}% \PL{10.76 147.70 m}% \PL{27.04 145.84 78.18 148.60 84.91 150.64 c}% \PL{S}% \PL{9.85 110.41 m}% \PL{36.44 108.23 73.32 109.30 83.22 111.36 c}% \PL{S}% \PL{7.73 75.89 m}% \PL{24.79 74.43 71.60 74.38 81.11 75.64 c}% \PL{S}% \PL{6.39 42.96 m}% \PL{19.48 41.87 74.21 42.67 82.14 44.32 c}% \PL{S}% \PL{6.25 7.66 m}% \PL{23.71 6.99 72.90 6.17 83.20 8.23 c}% \PL{S}% \PL{Q}% }}\wd\xxx=86.00bp \immediate\pdfxform resources { /ProcSet [/PDF /Text] /ExtGState \the\resid\space 0 R /Pattern << /0.00002 \the\THPc\space 0 R /0.00003 \the\THPd\space 0 R /0.00008 \the\THPb\space 0 R /0.00009 \the\THPa\space 0 R >> /ColorSpace << /CS1 [/Pattern /DeviceGray] >> } \xxx \newcount\THXaaaaaaa\THXaaaaaaa=\pdflastxform % \setbox\xxx=\hbox{\vbox to451.00bp{\vfill \PL{0.42001 w}% \PL{[] 0 d}% \PL{1 J}% \PL{1 j}% \PL{10 M}% \PL{73.29 3.27 m}% \PL{62.24 49.59 83.29 151.69 69.89 193.23 c}% \PL{56.49 234.78 75.59 385.65 68.77 449.85 c}% \PL{S}% \PL{2.16 446.58 m}% \PL{13.29 390.34 -9.29 248.70 6.44 191.57 c}% \PL{17.45 151.59 1.67 33.28 8.65 1.20 c}% \PL{S}% }}\wd\xxx=75.00bp \immediate\pdfxform\xxx \newcount\THXBaaaaaaa\THXBaaaaaaa=\pdflastxform % \setbox\xxx=\hbox{\vbox to449.00bp{\vfill \PL{72.29 2.27 m}% \PL{61.24 48.59 82.29 150.69 68.89 192.23 c}% \PL{55.49 233.78 74.59 384.65 67.77 448.85 c}% \PL{45.57 447.76 23.36 446.67 1.16 445.58 c}% \PL{12.29 389.34 -10.29 247.70 5.44 190.57 c}% \PL{16.45 150.59 0.67 32.28 7.65 0.20 c}% \PL{29.20 0.89 50.74 1.58 72.29 2.27 c}% \PL{h}% \PL{f*}% }}\wd\xxx=74.00bp \immediate\pdfxform\xxx \newcount\THXIaaaaaaa\THXIaaaaaaa=\pdflastxform % \setbox\xxx=\hbox{\vbox to451.00bp{\vfill \PL{1.2 w}% \PL{[] 0 d}% \PL{1 J}% \PL{1 j}% \PL{10 M}% \PL{8.65 1.20 m}% \PL{1.67 33.28 17.45 151.59 6.44 191.57 c}% \PL{-9.29 248.70 13.29 390.34 2.16 446.58 c}% \PL{S}% \PL{73.29 3.27 m}% \PL{62.24 49.59 83.29 151.69 69.89 193.23 c}% \PL{56.49 234.78 75.59 385.65 68.77 449.85 c}% \PL{S}% }}\wd\xxx=76.00bp \immediate\pdfxform\xxx \newcount\THXEaaaaaaa\THXEaaaaaaa=\pdflastxform % \setbox\xxx=\hbox{\vbox to454.00bp{\vfill \PL{0.16 439.37 m}% \PL{n BT}% \PL{/F\pdffontname\THFa\space 19.9253 Tf}% \PL{1 0 0 1 0.2 439.4 Tm}% \PL{}% \PL{<54686572696f6e> Tj}% \PL{ET}% \PL{71.34 439.37 m}% \PL{n BT}% \PL{/F\pdffontname\THFa\space 19.9253 Tf}% \PL{1 0 0 1 71.3 439.4 Tm}% \PL{}% \PL{<61> Tj}% \PL{ET}% \PL{80.36 439.37 m}% \PL{n BT}% \PL{/F\pdffontname\THFa\space 19.9253 Tf}% \PL{1 0 0 1 80.4 439.4 Tm}% \PL{}% \PL{<726561> Tj}% \PL{ET}% \PL{112.24 439.37 m}% \PL{n BT}% \PL{/F\pdffontname\THFa\space 19.9253 Tf}% \PL{1 0 0 1 112.2 439.4 Tm}% \PL{}% \PL{<74> Tj}% \PL{ET}% \PL{118.89 439.37 m}% \PL{n BT}% \PL{/F\pdffontname\THFa\space 19.9253 Tf}% \PL{1 0 0 1 118.9 439.4 Tm}% \PL{}% \PL{<7970> Tj}% \PL{ET}% \PL{138.92 439.37 m}% \PL{n BT}% \PL{/F\pdffontname\THFa\space 19.9253 Tf}% \PL{1 0 0 1 138.9 439.4 Tm}% \PL{}% \PL{<6573> Tj}% \PL{ET}% \PL{99.37 143.85 m}% \PL{n BT}% \PL{/F\pdffontname\THFa\space 9.96265 Tf}% \PL{1 0 0 1 99.4 143.9 Tm}% \PL{}% \PL{<62> Tj}% \PL{ET}% \PL{104.79 143.85 m}% \PL{n BT}% \PL{/F\pdffontname\THFa\space 9.96265 Tf}% \PL{1 0 0 1 104.8 143.9 Tm}% \PL{}% \PL{<6564726f> Tj}% \PL{ET}% \PL{123.03 143.85 m}% \PL{n BT}% \PL{/F\pdffontname\THFa\space 9.96265 Tf}% \PL{1 0 0 1 123.0 143.9 Tm}% \PL{}% \PL{<636b> Tj}% \PL{ET}% \PL{96.89 104.96 m}% \PL{n BT}% \PL{/F\pdffontname\THFa\space 9.96265 Tf}% \PL{1 0 0 1 96.9 105.0 Tm}% \PL{}% \PL{<0d6f> Tj}% \PL{ET}% \PL{106.94 104.96 m}% \PL{n BT}% \PL{/F\pdffontname\THFa\space 9.96265 Tf}% \PL{1 0 0 1 106.9 105.0 Tm}% \PL{}% \PL{<7773746f6e65> Tj}% \PL{ET}% \PL{94.40 66.86 m}% \PL{n BT}% \PL{/F\pdffontname\THFa\space 9.96265 Tf}% \PL{1 0 0 1 94.4 66.9 Tm}% \PL{}% \PL{<6d6f> Tj}% \PL{ET}% \PL{107.57 66.86 m}% \PL{n BT}% \PL{/F\pdffontname\THFa\space 9.96265 Tf}% \PL{1 0 0 1 107.6 66.9 Tm}% \PL{}% \PL{<6f6e6d696c6b> Tj}% \PL{ET}% \PL{93.05 35.20 m}% \PL{n BT}% \PL{/F\pdffontname\THFa\space 9.96265 Tf}% \PL{1 0 0 1 93.0 35.2 Tm}% \PL{}% \PL{<696365> Tj}% \PL{ET}% \PL{93.71 0.68 m}% \PL{n BT}% \PL{/F\pdffontname\THFa\space 9.96265 Tf}% \PL{1 0 0 1 93.7 0.7 Tm}% \PL{}% \PL{<736e6f> Tj}% \PL{ET}% \PL{107.38 0.68 m}% \PL{n BT}% \PL{/F\pdffontname\THFa\space 9.96265 Tf}% \PL{1 0 0 1 107.4 0.7 Tm}% \PL{}% \PL{<77> Tj}% \PL{ET}% \PL{95.55 390.74 m}% \PL{n BT}% \PL{/F\pdffontname\THFa\space 9.96265 Tf}% \PL{1 0 0 1 95.5 390.7 Tm}% \PL{}% \PL{<77> Tj}% \PL{ET}% \PL{102.08 390.74 m}% \PL{n BT}% \PL{/F\pdffontname\THFa\space 9.96265 Tf}% \PL{1 0 0 1 102.1 390.7 Tm}% \PL{}% \PL{<61746572> Tj}% \PL{ET}% \PL{95.03 356.24 m}% \PL{n BT}% \PL{/F\pdffontname\THFa\space 9.96265 Tf}% \PL{1 0 0 1 95.0 356.2 Tm}% \PL{}% \PL{<73756d70> Tj}% \PL{ET}% \PL{92.92 318.50 m}% \PL{n BT}% \PL{/F\pdffontname\THFa\space 9.96265 Tf}% \PL{1 0 0 1 92.9 318.5 Tm}% \PL{}% \PL{<636c61> Tj}% \PL{ET}% \PL{104.24 318.50 m}% \PL{n BT}% \PL{/F\pdffontname\THFa\space 9.96265 Tf}% \PL{1 0 0 1 104.2 318.5 Tm}% \PL{}% \PL{<79> Tj}% \PL{ET}% \PL{91.61 280.63 m}% \PL{n BT}% \PL{/F\pdffontname\THFa\space 9.96265 Tf}% \PL{1 0 0 1 91.6 280.6 Tm}% \PL{}% \PL{<73616e64> Tj}% \PL{ET}% \PL{90.29 245.50 m}% \PL{n BT}% \PL{/F\pdffontname\THFa\space 9.96265 Tf}% \PL{1 0 0 1 90.3 245.5 Tm}% \PL{}% \PL{<70> Tj}% \PL{ET}% \PL{95.71 245.50 m}% \PL{n BT}% \PL{/F\pdffontname\THFa\space 9.96265 Tf}% \PL{1 0 0 1 95.7 245.5 Tm}% \PL{}% \PL{<6562626c6573> Tj}% \PL{ET}% \PL{90.14 212.00 m}% \PL{n BT}% \PL{/F\pdffontname\THFa\space 9.96265 Tf}% \PL{1 0 0 1 90.1 212.0 Tm}% \PL{}% \PL{<646562> Tj}% \PL{ET}% \PL{104.59 212.00 m}% \PL{n BT}% \PL{/F\pdffontname\THFa\space 9.96265 Tf}% \PL{1 0 0 1 104.6 212.0 Tm}% \PL{}% \PL{<726973> Tj}% \PL{ET}% \PL{93.95 179.11 m}% \PL{n BT}% \PL{/F\pdffontname\THFa\space 9.96265 Tf}% \PL{1 0 0 1 94.0 179.1 Tm}% \PL{}% \PL{<626c6f> Tj}% \PL{ET}% \PL{106.74 179.11 m}% \PL{n BT}% \PL{/F\pdffontname\THFa\space 9.96265 Tf}% \PL{1 0 0 1 106.7 179.1 Tm}% \PL{}% \PL{<636b73> Tj}% \PL{ET}% }}\wd\xxx=156.00bp \immediate\pdfxform resources { /ProcSet [/PDF /Text] /Font << /F\pdffontname\THFa\space\pdffontobjnum\THFa\space 0 R >> } \xxx \newcount\THXXaaaaaaa\THXXaaaaaaa=\pdflastxform % \setbox\xxx=\hbox{\vbox to52.00bp{\vfill \PL{0.5 w}% \PL{[] 0 d}% \PL{1 j}% \PL{10 M}% \PL{1.08 1.16 m}% \PL{11.00 50.76 l}% \PL{20.92 1.16 l}% \PL{11.00 11.08 l}% \PL{h}% \PL{S}% \PL{1.08 1.16 m}% \PL{11.00 50.76 l}% \PL{11.00 11.08 l}% \PL{h}% \PL{f*}% }}\wd\xxx=22.00bp \immediate\pdfxform\xxx \newcount\THWnortharrow\THWnortharrow=\pdflastxform % \setbox\xxx=\hbox{\vbox to10.00bp{\vfill \PL{0.6 w}% \PL{[] 0 d}% \PL{1 J}% \PL{1 j}% \PL{10 M}% \PL{1.13 1.00 m}% \PL{142.87 1.00 l}% \PL{S}% \PL{0.6 w}% \PL{1.13 1.00 m}% \PL{1.13 3.00 l}% \PL{S}% \PL{142.87 1.00 m}% \PL{142.87 3.00 l}% \PL{S}% \PL{62.23 3.00 m}% \PL{n BT}% \PL{/F\pdffontname\THFa\space 9.96265 Tf}% \PL{1 0 0 1 62.2 3.0 Tm}% \PL{}% \PL{<3130> Tj}% \PL{ET}% \PL{73.85 3.00 m}% \PL{n BT}% \PL{/F\pdffontname\THFa\space 9.96265 Tf}% \PL{1 0 0 1 73.9 3.0 Tm}% \PL{}% \PL{<6d> Tj}% \PL{ET}% }}\wd\xxx=144.00bp \immediate\pdfxform resources { /ProcSet [/PDF /Text] /Font << /F\pdffontname\THFa\space\pdffontobjnum\THFa\space 0 R >> } \xxx \newcount\THWscalebar\THWscalebar=\pdflastxform therion/samples/areas/thTMPDIR/th_legend.tex0000644000076400010400000000002011145241276022025 0ustar userAdministrators\legendcolumns2 therion/samples/areas/thTMPDIR/th_legendcolor.tex0000644000076400010400000000002011145241276023064 0ustar userAdministrators\legendcolumns1 therion/samples/areas/thTMPDIR/th_pagedef.tex0000644000076400010400000002360711145241276022202 0ustar userAdministrators\eject \hsize=156.00bp \vsize=477.00bp \pdfpagewidth=\hsize\advance\pdfpagewidth by 56.69bp \pdfpageheight=\vsize\advance\pdfpageheight by 56.69bp \hoffset=0cm \voffset=0cm \pdfhorigin=28.35bp \pdfvorigin=28.35bp \newdimen\x \x=156.00bp \newdimen\y \y=477.00bp \setbox\xxx=\hbox to \x{\maplayout\hfill}%\dp\xxx=0bp \advance\x by \extraE \advance\x by \extraW \advance\y by \extraN \advance\y by \extraS \newbox\xxxx\setbox\xxxx=\hbox to \x{\kern\extraW\raise\extraS\box\xxx\hss}%\dp\xxx=0bp \wd\xxxx=\x \ht\xxxx=\y \immediate\pdfxform\xxxx \newcount\THmaplegend\THmaplegend=\pdflastxform \advance\pdfhorigin by \extraW \advance\pdfvorigin by \extraN \advance\pdfpagewidth by \extraW \advance\pdfpagewidth by \extraE \advance\pdfpageheight by \extraN \advance\pdfpageheight by \extraS \newdimen\overlap\overlap=28.35bp \dimtobp{\the\pdfpagewidth}\edef\xsize{\tmpdef}% \dimtobp{\the\pdfpageheight}\edef\ysize{\tmpdef}% \advance\y by -\extraN\advance\y by \overlap \dimtobp{\the\y}\edef\nsize{\tmpdef}% \x=\extraW\advance\x by \overlap \dimtobp{\the\x}\edef\wsize{\tmpdef}% \newdimen\overlaphalf\overlaphalf=\overlap\divide\overlaphalf by 2% \newdimen\framew\framew=\pdfpagewidth\advance\framew by -\overlap \newdimen\frameh\frameh=\pdfpageheight\advance\frameh by -\overlap \newdimen\framex\framex=\extraW\advance\framex by \overlaphalf \newdimen\framey\framey=\extraN\advance\framey by \overlaphalf \dimtobp{\framew}\edef\Framew{\tmpdef}% \dimtobp{\frameh}\edef\Frameh{\tmpdef}% \dimtobp{\framex}\edef\Framex{\tmpdef}% \dimtobp{\framey}\edef\Framey{\tmpdef}% \adjustedHS=156.00bp\advance\adjustedHS by \extraE\advance\adjustedHS by \extraW\advance\adjustedHS by \overlap\advance\adjustedHS by \overlap \adjustedVS=477.00bp\advance\adjustedVS by \extraN\advance\adjustedVS by \extraS\advance\adjustedVS by \overlap\advance\adjustedVS by \overlap \calibrX{9.7109493057bp}\tmpdimenX=\tmpdimen \calibrY{-4.5028377062bp}\tmpdimenY=\tmpdimen \pdfcatalog { /thCalibrate0 (X=\the\tmpdimenX, Y=\the\tmpdimenY, L=0.0000000000, F=0.0000000000)} \calibrX{56.0000000000bp}\tmpdimenX=\tmpdimen \calibrY{-4.5028377062bp}\tmpdimenY=\tmpdimen \pdfcatalog { /thCalibrate1 (X=\the\tmpdimenX, Y=\the\tmpdimenY, L=0.0000000000, F=0.0000000000)} \calibrX{102.2890506943bp}\tmpdimenX=\tmpdimen \calibrY{-4.5028377062bp}\tmpdimenY=\tmpdimen \pdfcatalog { /thCalibrate2 (X=\the\tmpdimenX, Y=\the\tmpdimenY, L=0.0000000000, F=0.0000000000)} \calibrX{9.7109493057bp}\tmpdimenX=\tmpdimen \calibrY{227.0000000000bp}\tmpdimenY=\tmpdimen \pdfcatalog { /thCalibrate3 (X=\the\tmpdimenX, Y=\the\tmpdimenY, L=0.0000000000, F=0.0000000000)} \calibrX{102.2890506943bp}\tmpdimenX=\tmpdimen \calibrY{227.0000000000bp}\tmpdimenY=\tmpdimen \pdfcatalog { /thCalibrate4 (X=\the\tmpdimenX, Y=\the\tmpdimenY, L=0.0000000000, F=0.0000000000)} \calibrX{9.7109493057bp}\tmpdimenX=\tmpdimen \calibrY{458.5028377062bp}\tmpdimenY=\tmpdimen \pdfcatalog { /thCalibrate5 (X=\the\tmpdimenX, Y=\the\tmpdimenY, L=0.0000000000, F=0.0000000000)} \calibrX{56.0000000000bp}\tmpdimenX=\tmpdimen \calibrY{458.5028377062bp}\tmpdimenY=\tmpdimen \pdfcatalog { /thCalibrate6 (X=\the\tmpdimenX, Y=\the\tmpdimenY, L=0.0000000000, F=0.0000000000)} \calibrX{102.2890506943bp}\tmpdimenX=\tmpdimen \calibrY{458.5028377062bp}\tmpdimenY=\tmpdimen \pdfcatalog { /thCalibrate7 (X=\the\tmpdimenX, Y=\the\tmpdimenY, L=0.0000000000, F=0.0000000000)} \calibrX{56.0000000000bp}\tmpdimenX=\tmpdimen \calibrY{227.0000000000bp}\tmpdimenY=\tmpdimen \pdfcatalog { /thCalibrate8 (X=\the\tmpdimenX, Y=\the\tmpdimenY, L=0.0000000000, F=0.0000000000)} \pdfcatalog { /thCalibrate (HS=\the\adjustedHS, VS=\the\adjustedVS, HD=6.5318993758)}\tmpdimen=\extraW\advance\tmpdimen by \overlap \dimtobp{\tmpdimen}\edef\adjustedX{\tmpdef}% \tmpdimen=\extraS\advance\tmpdimen by \overlap \dimtobp{\tmpdimen}\edef\adjustedY{\tmpdef}% \PL{q 1.00 1.00 1.00 rg -\wsize\space-\nsize\space\xsize\space\ysize\space re f Q}% \ifdim\framethickness>0mm\dimtobp{\framethickness}\edef\Framethickness{\tmpdef}\PL{q 0 0 0 RG 1 J 1 j \Framethickness\space w -\Framex\space\Framey\space\Framew\space-\Frameh\space re s Q}\fi \leavevmode\setbox\xxx=\hbox to 0bp{% \setbox\xxx=\hbox to 156.00bp{% \setbox\xxx=\hbox to 156.00bp{% \PL{/GS1 gs}% \PL{q 1.00 1.00 1.00 rg}% \PB{20.00}{1.00}{\THXIaaaaaaa}% \PL{Q}% \PL{/GS0 gs}% \PL{q 0 0 m 156.00 0 l 156.00 477.00 l 0 477.00 l 0 0 l}\PL{1.36 457.70 m}% \PL{0.26 457.70 -0.64 458.60 -0.64 459.70 c}% \PL{-0.64 464.80 -0.64 469.91 -0.64 475.01 c}% \PL{-0.64 476.12 0.26 477.01 1.36 477.01 c}% \PL{52.31 477.01 103.27 477.01 154.22 477.01 c}% \PL{155.32 477.01 156.22 476.12 156.22 475.01 c}% \PL{156.22 469.91 156.22 464.80 156.22 459.70 c}% \PL{156.22 458.60 155.32 457.70 154.22 457.70 c}% \PL{103.27 457.70 52.31 457.70 1.36 457.70 c}% \PL{100.57 166.05 m}% \PL{99.47 166.05 98.57 166.95 98.57 168.05 c}% \PL{98.57 169.56 98.57 171.06 98.57 172.57 c}% \PL{98.57 173.67 99.47 174.57 100.57 174.57 c}% \PL{110.76 174.57 120.94 174.57 131.13 174.57 c}% \PL{132.23 174.57 133.13 173.67 133.13 172.57 c}% \PL{133.13 171.06 133.13 169.56 133.13 168.05 c}% \PL{133.13 166.95 132.23 166.05 131.13 166.05 c}% \PL{120.94 166.05 110.76 166.05 100.57 166.05 c}% \PL{98.09 127.16 m}% \PL{96.99 127.16 96.09 128.06 96.09 129.16 c}% \PL{96.09 130.67 96.09 132.17 96.09 133.68 c}% \PL{96.09 134.78 96.99 135.68 98.09 135.68 c}% \PL{110.23 135.68 122.37 135.68 134.52 135.68 c}% \PL{135.62 135.68 136.52 134.78 136.52 133.68 c}% \PL{136.52 132.17 136.52 130.67 136.52 129.16 c}% \PL{136.52 128.06 135.62 127.16 134.52 127.16 c}% \PL{122.37 127.16 110.23 127.16 98.09 127.16 c}% \PL{95.60 89.06 m}% \PL{94.50 89.06 93.60 89.96 93.60 91.06 c}% \PL{93.60 92.57 93.60 94.07 93.60 95.58 c}% \PL{93.60 96.68 94.50 97.58 95.60 97.58 c}% \PL{108.42 97.58 121.23 97.58 134.05 97.58 c}% \PL{135.15 97.58 136.05 96.68 136.05 95.58 c}% \PL{136.05 94.07 136.05 92.57 136.05 91.06 c}% \PL{136.05 89.96 135.15 89.06 134.05 89.06 c}% \PL{121.23 89.06 108.42 89.06 95.60 89.06 c}% \PL{94.25 57.40 m}% \PL{93.15 57.40 92.25 58.29 92.25 59.40 c}% \PL{92.25 60.85 92.25 62.31 92.25 63.76 c}% \PL{92.25 64.87 93.15 65.76 94.25 65.76 c}% \PL{97.20 65.76 100.14 65.76 103.09 65.76 c}% \PL{104.19 65.76 105.09 64.87 105.09 63.76 c}% \PL{105.09 62.31 105.09 60.85 105.09 59.40 c}% \PL{105.09 58.29 104.19 57.40 103.09 57.40 c}% \PL{100.14 57.40 97.20 57.40 94.25 57.40 c}% \PL{94.91 22.88 m}% \PL{93.81 22.88 92.91 23.77 92.91 24.88 c}% \PL{92.91 25.55 92.91 26.23 92.91 26.90 c}% \PL{92.91 28.01 93.81 28.90 94.91 28.90 c}% \PL{100.94 28.90 106.96 28.90 112.99 28.90 c}% \PL{114.09 28.90 114.99 28.01 114.99 26.90 c}% \PL{114.99 26.23 114.99 25.55 114.99 24.88 c}% \PL{114.99 23.77 114.09 22.88 112.99 22.88 c}% \PL{106.96 22.88 100.94 22.88 94.91 22.88 c}% \PL{96.75 412.94 m}% \PL{95.65 412.94 94.75 413.84 94.75 414.94 c}% \PL{94.75 416.04 94.75 417.14 94.75 418.24 c}% \PL{94.75 419.34 95.65 420.24 96.75 420.24 c}% \PL{103.53 420.24 110.32 420.24 117.10 420.24 c}% \PL{118.20 420.24 119.10 419.34 119.10 418.24 c}% \PL{119.10 417.14 119.10 416.04 119.10 414.94 c}% \PL{119.10 413.84 118.20 412.94 117.10 412.94 c}% \PL{110.32 412.94 103.53 412.94 96.75 412.94 c}% \PL{96.23 376.51 m}% \PL{95.13 376.51 94.23 377.40 94.23 378.51 c}% \PL{94.23 379.83 94.23 381.15 94.23 382.47 c}% \PL{94.23 383.58 95.13 384.47 96.23 384.47 c}% \PL{102.77 384.47 109.32 384.47 115.86 384.47 c}% \PL{116.96 384.47 117.86 383.58 117.86 382.47 c}% \PL{117.86 381.15 117.86 379.83 117.86 378.51 c}% \PL{117.86 377.40 116.96 376.51 115.86 376.51 c}% \PL{109.32 376.51 102.77 376.51 96.23 376.51 c}% \PL{94.12 338.76 m}% \PL{93.02 338.76 92.12 339.66 92.12 340.76 c}% \PL{92.12 342.91 92.12 345.07 92.12 347.22 c}% \PL{92.12 348.32 93.02 349.22 94.12 349.22 c}% \PL{98.62 349.22 103.13 349.22 107.63 349.22 c}% \PL{108.74 349.22 109.63 348.32 109.63 347.22 c}% \PL{109.63 345.07 109.63 342.91 109.63 340.76 c}% \PL{109.63 339.66 108.74 338.76 107.63 338.76 c}% \PL{103.13 338.76 98.62 338.76 94.12 338.76 c}% \PL{92.81 302.83 m}% \PL{91.71 302.83 90.81 303.73 90.81 304.83 c}% \PL{90.81 306.34 90.81 307.84 90.81 309.35 c}% \PL{90.81 310.45 91.71 311.35 92.81 311.35 c}% \PL{98.31 311.35 103.81 311.35 109.31 311.35 c}% \PL{110.42 311.35 111.31 310.45 111.31 309.35 c}% \PL{111.31 307.84 111.31 306.34 111.31 304.83 c}% \PL{111.31 303.73 110.42 302.83 109.31 302.83 c}% \PL{103.81 302.83 98.31 302.83 92.81 302.83 c}% \PL{91.49 265.76 m}% \PL{90.39 265.76 89.49 266.66 89.49 267.76 c}% \PL{89.49 269.91 89.49 272.07 89.49 274.22 c}% \PL{89.49 275.32 90.39 276.22 91.49 276.22 c}% \PL{100.95 276.22 110.41 276.22 119.86 276.22 c}% \PL{120.97 276.22 121.86 275.32 121.86 274.22 c}% \PL{121.86 272.07 121.86 269.91 121.86 267.76 c}% \PL{121.86 266.66 120.97 265.76 119.86 265.76 c}% \PL{110.41 265.76 100.95 265.76 91.49 265.76 c}% \PL{91.34 234.20 m}% \PL{90.24 234.20 89.34 235.10 89.34 236.20 c}% \PL{89.34 237.71 89.34 239.21 89.34 240.72 c}% \PL{89.34 241.82 90.24 242.72 91.34 242.72 c}% \PL{98.56 242.72 105.77 242.72 112.99 242.72 c}% \PL{114.09 242.72 114.99 241.82 114.99 240.72 c}% \PL{114.99 239.21 114.99 237.71 114.99 236.20 c}% \PL{114.99 235.10 114.09 234.20 112.99 234.20 c}% \PL{105.77 234.20 98.56 234.20 91.34 234.20 c}% \PL{95.15 201.31 m}% \PL{94.05 201.31 93.15 202.21 93.15 203.31 c}% \PL{93.15 204.82 93.15 206.32 93.15 207.83 c}% \PL{93.15 208.93 94.05 209.83 95.15 209.83 c}% \PL{102.98 209.83 110.82 209.83 118.65 209.83 c}% \PL{119.76 209.83 120.65 208.93 120.65 207.83 c}% \PL{120.65 206.32 120.65 204.82 120.65 203.31 c}% \PL{120.65 202.21 119.76 201.31 118.65 201.31 c}% \PL{110.82 201.31 102.98 201.31 95.15 201.31 c}% \PL{h W n}\PB{13.00}{3.00}{\THXaaaaaaa}% \PB{19.00}{0.00}{\THXEaaaaaaa}% \PL{Q}\PB{0.00}{23.00}{\THXXaaaaaaa}% \hfill}\ht\xxx=477.00bp\dp\xxx=0bp \immediate\pdfxform attr{/Group \the\attrid\space 0 R} resources{/ExtGState \the\resid\space 0 R}\xxx\PB{0}{0}{\pdflastxform}% \hfill}\ht\xxx=477.00bp\dp\xxx=0bp \immediate\pdfxform attr{/OC \the\oca\space 0 R} \xxx\PB{0}{0}{\pdflastxform}% \hfill}\ht\xxx=477.00bp\dp\xxx=0bp \box\xxx% \smash{\rlap{\kern-\extraW\raise-\extraS\hbox{\pdfrefxform\THmaplegend}}} therion/samples/areas/thTMPDIR/th_pages.tex0000644000076400010400000000000011145241276021664 0ustar userAdministratorstherion/samples/areas/thTMPDIR/th_resources.tex0000644000076400010400000000306711145241276022617 0ustar userAdministrators\ifnum\pdftexversion<110\pdfcatalog{ /Version /1.5 }\else\pdfoptionpdfminorversion=5\fi \pdfinfo{/Creator (Therion 5.2.7, MetaPost, TeX)}% \pdfcatalog{ /ViewerPreferences << /DisplayDocTitle true /PrintScaling /None >> } \ifnum\pdftexversion>139 \newread\testin \openin\testin=glyphtounicode.tex \ifeof\testin\message{No glyph to unicode mapping found!}\else\closein\testin\input glyphtounicode.tex\pdfgentounicode=1\fi \fi \opacity{0.75}% \surfaceopacity{0.75}% \immediate\pdfobj{ << /GS0 << /Type /ExtGState /ca 1 /BM /Normal >> /GS1 << /Type /ExtGState /ca \the\opacity\space /BM /Normal >> /GS2 << /Type /ExtGState /ca \the\surfaceopacity\space /BM /Normal >> >> } \newcount\resid\resid=\pdflastobj \immediate\pdfobj{ << /S /Transparency /K true >> } \newcount\attrid\attrid=\pdflastobj \immediate\pdfobj{ << /Type /OCG /Name >> } \newcount\ocU\ocU=\pdflastobj \immediate\pdfobj{ << /Type /OCG /Name >> } \newcount\ocD\ocD=\pdflastobj \immediate\pdfobj{ << /Type /OCG /Name >> } \newcount\ocSUR\ocSUR=\pdflastobj \immediate\pdfobj{ << /Type /OCG /Name >> } \newcount\oca\oca=\pdflastobj \pdfcatalog{ /OCProperties << /OCGs [\the\ocU\space0 R \the\oca\space 0 R \the\ocD\space0 R ] /D << /Name (Map layers) /ListMode /VisiblePages /Order [\the\ocU\space0 R \the\oca\space 0 R \the\ocD\space0 R ] >> >> } \legendfalse \colorlegendfalse \legendwidth=396.85bp \legendbgfillfalse therion/samples/areas/thTMPDIR/th_texts.tex0000644000076400010400000000044711145241274021751 0ustar userAdministrators\legendtitle={\thfb\char76 \char101 \char103 \char101 \char110 \char100 \mainfont{}} \cavename={\mainfont{}} \northarrowtrue \scalebartrue \cavelengthtitle={\thfb\char76 \char101 \char110 \char103 \char116 \char104 \mainfont{}} \cavelength={\thfb\char51 \char48 \thinspace \char109 \mainfont{}} therion/samples/areas/types.th20000644000076400010400000000640010570474764017625 0ustar userAdministratorsencoding utf-8 ##XTHERION## xth_me_area_adjust 177.0 -100.0 657.0 1333.0 ##XTHERION## xth_me_area_zoom_to 100 centerline data normal from to compass clino tape 0 1 0 0 30 endcenterline scrap scrap.types -scale [0 0 1600 0 0.0 0.0 40.64 0.0 m] line wall -id l7-497-1096 503.0 52.0 476.0 169.0 531.0 426.0 498.0 531.0 465.0 636.0 516.0 1016.0 500.0 1178.0 endline line border -id l46-411-69 319.0 72.0 363.0 70.0 487.0 67.0 513.0 72.0 endline line wall -id l6-342-1086 340.0 48.0 323.0 129.0 365.0 427.0 338.0 528.0 299.42 672.33 359.0 1029.0 332.0 1171.0 endline point 511.0 562.0 label -text blocks -align r point 502.0 645.0 label -text debris -align r point 503.0 727.0 label -text pebbles -align r point 507.0 818.0 label -text sand -align r point 511.0 911.0 label -text clay -align r area blocks l14-414-607 l6-342-1086 l15-428-512 l7-497-1096 endarea area debris l13-424-689 l6-342-1086 l14-414-607 l7-497-1096 endarea area pebbles l12-412-775 l6-342-1086 l13-424-689 l7-497-1096 endarea area sand l11-426-861 l6-342-1086 l12-412-775 l7-497-1096 endarea area clay l10-429-957 l6-342-1086 l11-426-861 l7-497-1096 endarea area sump l9-429-1051 l6-342-1086 l10-429-957 l7-497-1096 endarea area water l8-427-1151 l6-342-1086 l9-429-1051 l7-497-1096 endarea point 517.0 1003.0 label -text sump -align r point 519.0 1094.0 label -text water -align r line border -id l19-409-159 320.0 161.0 353.0 158.0 491.0 159.0 511.0 163.0 endline line border -id l18-413-242 324.0 244.0 367.0 240.0 485.0 239.0 509.0 242.0 endline line border -id l17-420-327 330.0 331.0 397.0 325.0 490.0 327.0 515.0 332.0 endline line border -id l16-411-424 333.0 425.0 374.0 420.0 503.0 426.0 520.0 431.0 endline line border -id l15-428-512 326.0 513.0 375.0 510.0 491.0 514.0 515.0 521.0 endline line border -id l14-414-607 317.0 606.0 358.0 604.0 490.0 606.0 510.0 611.0 endline line border -id l13-424-689 310.0 694.0 388.0 687.0 494.0 688.0 507.0 691.0 endline line border -id l12-412-775 318.0 780.0 370.0 774.0 475.0 774.0 508.0 776.0 endline line border -id l11-426-861 317.0 870.0 359.0 862.0 487.0 857.0 507.0 862.0 endline line border -id l10-429-957 327.0 963.0 371.0 953.0 494.0 957.0 513.0 965.0 endline line border -id l9-429-1051 330.0 1040.0 376.0 1051.0 478.0 1057.0 515.0 1046.0 endline point 507.0 109.0 label -text snow -align r point 506.0 199.0 label -text ice -align r area moonmilk l17-420-327 l6-342-1086 l18-413-242 l7-497-1096 l7-497-1096 l7-497-1096 endarea area flowstone l16-411-424 l6-342-1086 l17-420-327 l7-497-1096 endarea area bedrock l15-428-512 l6-342-1086 l16-411-424 l7-497-1096 endarea point 510.0 279.0 label -text moonmilk -align r point 517.0 375.0 label -text flowstone -align r point 524.0 473.0 label -text bedrock -align r point 475.0 1200.0 label -text "Therion area types" -scale xl -align top area snow l19-409-159 l6-342-1086 l46-411-69 l7-497-1096 endarea area ice l18-413-242 l6-342-1086 l19-409-159 l7-497-1096 endarea line border -id l8-427-1151 329.0 1139.0 370.0 1152.0 478.0 1162.0 521.0 1143.0 endline point 431.0 1105.0 station -name 1 point 423.0 33.0 station -name 0 endscrap therion/samples/basics/0000755000076400010400000000000012270034352016173 5ustar userAdministratorstherion/samples/basics/rabbit.th0000644000076400010400000000300310564753114017777 0ustar userAdministratorsencoding iso8859-2 survey rabbit -title "Rabbit Cave" centreline date 1997.08.10 team "Martin Budaj" team "Stacho Mudrák" team "Miroslav Hofer" units compass clino grads data normal from to compass clino tape 0 1 200 -5 6.4 1 2 73 8 5.2 2 3 42 0 2.09 3 4 82 8 4 4 5 21 -8 8.28 4 6 354 -5 10.89 6 7 358 5 7.08 7 8 260 1 2.73 8 9 382 8 7.28 9 10 308 2 6.59 10 11 373 -14 3.44 11 12 276 -2 6.97 11 13 390 62 4.98 flags surface 13 14 295 3 11.9 14 15 170 2 23.28 fix 15 20 40 646.23 extend ignore 5 extend ignore 12 endcentreline input rabbit.th2 join ew1:0 ew2:end join ew1:end ew2:0 join ps1 ps2 map pdx -title "Rabbit Cave -- extended elevation" xs1 xs2 endmap map pdp -title "Rabbit Cave - plan" ps1 ps2 endmap surface bitmap surface.jpg [0 0 5 20 100 100 55 70] grid 5 20 10 10 6 6 638 642 646 650 654 650 639 644 649 654 659 654 638 642 646 650 654 650 638 642 646 650 654 650 639 644 649 654 659 654 640 646 652 658 664 658 endsurface endsurvey rabbit therion/samples/basics/rabbit.th20000644000076400010400000004436110215546614020073 0ustar userAdministratorsencoding utf-8 ##XTHERION## xth_me_area_adjust 72.0 55.5 1095.5 1416.0 ##XTHERION## xth_me_area_zoom_to 200 ##XTHERION## xth_me_image_insert {204.0 1 1.0} {1288.0 {}} img/2002-08-10.gif 0 {} scrap ps2 -scale [295.0 203.0 995.0 207.5 0.0 0.0 0 -36 m] point 629.0 269.5 debris line pit 596.0 214.5 595.5 232.0 584.0 228.5 584.0 228.5 smooth off endline line pit 599.5 216.0 615.5 246.0 627.5 233.0 629.0 215.0 smooth off endline point 619.0 234.5 station -name 12 line wall 584.5 210.75 596.75 220.25 615.25 217.0 621.0 215.0 626.75 213.0 632.25 214.75 637.75 221.75 643.25 228.75 643.25 230.75 652.0 241.5 altitude . 662.43 254.31 657.0 254.25 662.25 262.5 667.5 270.75 657.25 289.5 663.0 305.25 smooth off endline line chimney -clip off 578.0 261.5 601.75 274.0 611.25 277.75 607.5 303.75 603.75 329.75 559.25 318.25 559.25 318.25 smooth off endline line wall 559.25 318.25 575.94 295.99 563.5 291.5 572.5 282.25 577.1 277.52 572.0 275.0 578.0 261.5 584.0 248.0 576.75 249.25 576.5 244.75 576.25 240.25 592.5 229.75 576.25 215.0 smooth off endline point 568.0 360.5 station -name 11 endscrap scrap ps1 -scale [295.0 203.0 995.0 207.5 0.0 0.0 0 -36 m] point 251.5 245.5 station -name 11 point 310.0 271.5 station -name 10 point 324.0 396.0 station -name 9 point 460.0 436.5 station -name 8 point 429.5 478.5 station -name 7 point 536.5 563.5 station -name 6 point 600.5 734.0 station -name 5 point 693.0 702.0 station -name 4 point 702.5 631.5 station -name 3 point 733.0 610.0 station -name 2 point 460.0 436.5 station-name -align br point 536.5 563.5 station-name -align br point 646.0 517.0 station-name -align b point 693.0 702.0 station-name -align r point 773.5 517.0 station-name -align b point 773.5 517.0 station -name 1 point 646.0 517.0 station -name 0 line wall 605.5 507.5 subtype presumed 625.0 506.0 subtype bedrock 632.0 505.0 endline line wall 636.75 630.0 644.75 636.0 644.0 626.0 649.0 630.0 654.0 634.0 662.5 627.08 662.5 612.5 662.5 605.5 676.5 609.0 671.5 595.0 666.5 581.0 654.0 584.5 653.0 568.5 651.6 546.04 651.5 547.5 650.5 540.0 649.5 532.5 649.0 533.5 641.0 528.0 636.92 525.2 631.5 520.0 626.5 520.0 subtype presumed 621.5 520.0 615.5 518.0 608.0 520.5 smooth off endline line wall -close on -outline in 697.0 590.5 689.0 596.0 691.5 608.0 672.5 609.0 672.0 619.5 671.5 630.0 667.0 636.5 667.0 636.5 smooth off 668.0 641.5 665.0 645.5 665.0 645.5 676.0 653.5 685.5 645.5 690.81 641.03 690.5 646.5 694.5 641.0 698.5 635.5 698.5 629.0 709.0 621.5 719.5 614.0 722.5 609.5 720.5 601.5 smooth off 715.5 586.0 715.5 586.0 707.5 585.0 704.5 595.0 smooth off 697.0 590.5 endline line wall 571.75 561.5 565.5 566.5 567.25 567.25 570.5 573.5 573.75 579.75 581.75 580.0 589.75 589.0 602.83 603.72 600.5 592.75 611.0 605.75 617.16 613.37 619.0 611.25 625.75 617.75 632.5 624.25 631.75 628.5 636.5 630.0 smooth off endline line wall 554.5 537.5 552.5 543.25 545.65 543.55 555.5 550.5 559.75 553.5 559.46 555.62 560.5 557.5 564.5 564.75 568.75 557.25 568.75 557.25 smooth off endline point 308.5 274.0 station-name -align tl line wall 333.5 197.0 342.5 211.5 333.9 216.51 341.0 224.5 349.0 233.5 347.0 236.5 350.5 242.0 354.0 247.5 365.75 265.0 364.5 274.5 363.25 284.0 362.5 290.0 361.5 295.25 altitude . 359.14 307.65 354.5 293.75 349.75 299.75 345.19 305.51 354.5 308.25 351.5 322.5 350.15 328.9 348.25 330.5 344.5 335.5 342.69 337.91 343.5 341.5 340.5 346.5 smooth off 343.5 390.0 364.25 360.25 363.75 384.25 363.47 397.76 378.0 397.75 383.0 402.0 395.1 412.28 409.0 400.5 423.25 414.25 440.33 430.73 459.5 417.75 463.75 417.5 altitude . 473.0 416.96 477.0 397.25 492.0 398.0 501.82 398.49 501.0 393.5 508.5 398.75 516.0 404.0 509.75 409.0 515.25 414.25 520.75 419.5 524.0 434.0 519.25 438.0 514.5 442.0 508.0 452.25 499.25 450.25 485.22 447.04 479.0 467.75 491.25 472.25 503.08 476.6 494.25 486.5 493.5 490.0 490.95 501.9 487.5 504.0 507.25 513.75 529.45 524.71 515.25 511.5 525.25 514.75 536.51 518.41 539.75 541.0 550.75 529.5 smooth off endline line wall 212.75 232.5 212.75 232.5 233.5 247.25 232.25 230.5 231.0 213.75 227.75 202.0 231.75 185.75 smooth off endline point 218.5 263.0 fixed-ladder line wall 241.25 387.25 260.0 382.75 264.0 380.5 268.0 372.25 272.0 364.0 278.25 363.5 272.25 357.5 266.25 351.5 262.5 348.25 247.25 348.75 239.99 348.99 237.75 345.75 235.0 341.25 232.25 336.75 231.5 336.25 236.25 332.75 241.0 329.25 231.5 307.75 231.25 295.5 231.0 283.25 239.51 273.75 233.25 256.0 231.75 251.75 211.5 246.75 211.5 246.75 smooth off endline line wall 391.75 526.5 395.0 524.75 398.75 515.75 388.5 507.0 387.5 497.25 381.75 492.5 smooth off 381.75 492.5 388.25 482.25 381.75 475.25 smooth off 392.75 459.75 415.0 462.5 428.25 458.5 428.25 451.5 428.25 444.5 437.0 444.25 436.75 437.5 436.5 430.75 432.25 435.0 427.5 431.0 422.75 427.0 413.25 429.25 397.25 428.5 smooth off 393.5 435.0 398.25 441.0 387.25 440.25 371.29 439.16 374.5 433.25 366.75 432.25 359.0 431.25 364.75 437.25 350.25 434.5 335.75 431.75 323.25 432.75 323.25 432.75 smooth off 323.25 424.25 291.5 412.0 291.5 412.0 276.5 411.5 270.25 411.5 264.0 411.5 253.75 404.0 252.5 399.5 251.25 395.0 252.75 390.25 244.25 393.0 smooth off endline line wall 471.5 609.25 subtype presumed 438.25 573.0 427.46 559.99 423.25 533.5 smooth off subtype bedrock 415.75 533.75 404.5 531.5 404.5 531.5 399.75 527.25 394.5 530.75 smooth off endline line wall 568.5 740.0 600.5 717.5 610.0 690.5 610.0 690.5 623.5 689.0 625.0 676.0 smooth off 637.0 672.5 637.0 672.5 639.0 667.5 633.0 663.0 smooth off 633.0 663.0 632.0 658.5 629.5 657.0 smooth off 613.75 657.5 607.75 650.5 609.25 640.5 580.25 617.0 575.5 611.25 569.25 612.75 563.34 614.17 548.5 604.5 547.0 601.75 545.5 599.0 533.25 593.75 522.0 594.25 smooth off altitude . 511.25 582.5 498.75 586.0 487.75 562.75 smooth off 481.0 561.0 486.5 551.75 484.25 549.0 482.0 546.25 478.75 541.0 468.0 531.0 467.77 530.79 442.0 519.25 445.5 545.25 subtype presumed 447.4 559.37 487.25 599.75 487.25 599.75 smooth off endline line wall 576.5 757.5 591.5 745.5 590.5 739.5 572.0 746.5 smooth off endline line wall 741.5 678.5 735.5 686.5 741.5 694.5 727.5 694.5 725.5 710.5 723.5 726.5 727.5 738.5 723.5 744.5 altitude . 719.5 750.5 711.5 758.5 709.5 764.5 707.5 770.5 703.5 772.5 697.5 772.5 691.5 772.5 689.5 776.5 691.5 784.5 smooth off 691.5 784.5 689.5 792.5 681.5 792.5 673.5 792.5 671.5 804.5 659.5 790.5 647.5 776.5 633.5 756.5 619.5 764.5 smooth off 619.5 764.5 619.5 752.5 599.5 760.5 smooth off 594.5 753.5 594.5 753.5 584.5 758.5 581.5 763.0 smooth off endline line wall 773.5 610.5 769.23 601.96 765.5 589.0 758.5 600.0 744.23 622.42 748.5 612.0 744.0 610.0 739.5 608.0 734.0 608.5 728.5 617.5 724.29 624.39 722.5 622.0 715.5 627.5 708.5 633.0 707.5 632.0 710.5 637.5 715.55 646.76 708.0 640.0 710.0 652.0 smooth off 710.0 652.0 711.5 674.5 727.5 674.5 735.5 674.5 739.5 672.5 739.5 672.5 smooth off endline line wall 795.0 574.5 787.09 574.5 786.0 575.5 789.0 579.0 792.0 582.5 789.5 588.0 785.0 587.5 780.5 587.0 780.5 592.5 783.0 598.0 smooth off endline line wall 803.5 534.5 789.5 537.0 791.0 545.0 789.0 556.0 787.0 567.0 789.0 565.5 794.0 565.5 smooth off endline line wall 632.0 505.0 630.5 491.0 636.5 491.0 656.5 474.0 660.5 477.0 670.0 467.5 683.81 453.69 660.0 443.5 686.0 425.0 712.0 406.5 723.0 400.0 732.0 400.0 741.0 400.0 760.0 415.0 769.0 420.0 771.55 421.42 771.5 426.5 776.5 441.0 781.5 455.5 791.0 487.0 794.0 493.0 altitude . 797.0 499.0 787.0 529.5 802.5 527.5 smooth off endline line pit 419.0 535.5 422.5 526.5 414.5 517.5 430.0 516.5 445.5 515.5 442.0 515.0 446.5 536.5 smooth off endline point 202.5 237.0 entrance -orientation 73.4 -align b point 223.5 243.5 gradient -orientation 69.7 point 441.0 490.0 water -align tl point 445.0 485.5 water -align br point 429.5 478.5 stalactite -align l point 455.0 457.5 stalactite point 351.0 386.0 stalactite line rock-border -close on 371.0 426.5 353.5 424.5 348.0 418.0 356.5 415.0 367.0 415.5 372.0 419.0 371.0 426.5 endline line pit 371.5 434.5 382.5 422.5 376.0 413.0 367.5 408.0 359.0 403.0 366.0 391.0 366.0 391.0 smooth off endline line pit 348.0 370.5 306.5 376.5 310.5 384.0 309.0 389.5 307.5 395.0 317.0 404.0 349.5 402.0 smooth off endline line rock-edge 300.5 223.0 315.0 252.0 308.0 278.0 315.0 252.0 342.5 254.0 endline line rock-edge 262.0 217.0 269.5 221.0 274.5 228.0 291.0 212.5 274.5 228.0 275.0 248.0 267.0 258.5 endline line rock-border -close on 251.5 245.5 247.0 236.5 250.5 231.5 258.0 235.5 256.5 248.0 251.5 245.5 endline line rock-border -close on 262.0 217.0 271.0 212.5 291.0 212.5 290.0 224.0 286.5 245.0 280.0 261.0 267.0 258.5 261.5 228.5 262.0 217.0 endline line rock-border -close on 294.5 246.0 300.5 223.0 308.0 223.0 322.0 233.0 327.0 243.0 342.5 254.0 317.5 280.5 308.0 278.0 301.5 264.0 294.5 246.0 endline point 269.0 300.0 debris point 323.5 332.5 debris point 280.0 390.5 debris point 516.5 521.5 water-flow -orientation 0.0 -align t line pit 603.5 635.5 612.5 624.0 602.0 616.0 586.0 623.0 endline line contour 530.5 595.0 506.5 559.5 494.5 556.5 488.5 557.0 smooth off endline line contour 488.0 515.0 499.5 524.5 516.0 518.0 516.0 518.0 smooth off endline line contour 386.0 503.0 409.5 485.5 407.5 476.0 411.5 460.0 smooth off endline line contour 382.5 483.0 395.5 474.0 399.0 458.5 399.0 458.5 smooth off endline point 475.0 490.0 clay point 495.0 423.0 debris point 471.0 444.5 sand point 569.0 593.0 sand point 623.0 639.0 sand point 647.5 722.0 sand point 673.5 734.0 stalactite point 685.5 670.25 stalactite line chimney 697.0 590.5 671.5 595.0 endline line chimney 737.5 609.5 720.5 601.5 endline line chimney 582.5 730.5 582.5 730.5 597.67 728.34 600.5 734.0 603.5 740.0 604.5 743.0 594.5 753.5 smooth off endline point 715.0 686.5 flowstone -orientation 115.4 line flowstone -close on 689.0 688.0 670.47 698.86 681.5 723.0 699.5 714.5 717.5 706.0 703.5 679.5 689.0 688.0 endline point 686.5 726.5 flowstone -orientation 347.4 point 701.5 749.5 flowstone -orientation 235.6 point 675.0 763.5 flowstone -orientation 235.6 point 647.0 750.5 flowstone -orientation 235.6 line pit 710.5 637.5 695.5 657.0 668.0 667.5 662.5 680.5 smooth off endline line pit 614.5 737.5 624.0 726.0 618.5 714.5 627.5 709.0 636.5 703.5 626.0 691.58 649.0 684.5 655.5 682.5 654.5 671.0 664.5 666.5 674.5 662.0 691.0 649.0 694.5 641.0 smooth off endline line chimney 782.0 534.0 759.5 548.0 750.5 581.0 730.5 596.0 smooth off endline line chimney 730.5 596.0 739.5 580.0 746.47 563.63 738.5 553.0 smooth off endline line chimney -reverse on 787.75 576.0 788.5 563.5 endline line chimney 764.75 596.5 764.75 596.5 774.5 595.5 782.75 587.75 smooth off endline line chimney -reverse on 793.75 517.25 792.0 541.75 endline line chimney 634.0 524.0 632.0 505.0 endline point 688.5 525.75 clay point 749.0 499.5 clay point 727.75 439.75 clay point 745.5 550.75 stalactite -align b point 702.25 483.25 stalactite point 694.75 563.5 stalactite endscrap scrap xs1 -projection extended -flip horizontal -scale [295.0 203.0 995.0 207.5 0.0 0.0 0 -36 m] point 897.0 1250.5 station -name 10 point 898.5 1122.0 station -name 9 point 917.5 981.0 station -name 8 point 918.0 931.5 station -name 7 point 930.5 794.0 station -name 6 point 918.0 580.0 station -name 4 point 950.0 511.0 station -name 3 point 943.5 470.5 station -name 2 point 930.0 370.0 station -name 1 line wall 943.0 506.5 944.0 487.0 940.5 471.0 925.5 466.5 940.5 447.0 924.0 432.0 915.89 424.63 921.0 421.0 915.5 416.5 smooth off 915.5 416.5 909.0 415.0 908.0 410.0 smooth off 908.0 410.0 902.5 409.0 899.0 413.0 smooth off 895.0 414.0 881.5 403.0 895.0 396.0 908.5 389.0 912.5 390.0 917.5 386.5 smooth off 915.0 378.5 920.0 370.5 912.0 363.0 907.36 358.65 912.5 351.0 908.0 345.5 902.63 338.94 901.0 320.0 900.5 310.0 900.0 300.0 903.5 300.0 903.5 295.0 903.5 290.0 917.0 286.0 917.0 286.0 smooth off 921.0 275.5 916.5 274.0 919.5 268.0 914.5 262.0 914.5 262.0 smooth off 914.5 262.0 917.0 257.5 916.5 252.0 smooth off 936.0 245.0 936.0 245.0 953.0 230.0 944.5 223.0 smooth off endline line wall 861.0 1249.5 857.0 1191.5 863.5 1191.5 863.0 1186.0 867.0 1184.5 smooth off 861.0 1182.0 860.5 1176.5 853.0 1172.5 smooth off 852.5 1162.5 844.0 1158.0 845.0 1142.5 smooth off 871.0 1114.5 868.0 1096.0 880.0 1045.5 889.5 1042.0 899.0 1038.5 888.0 1029.5 901.0 1023.0 911.4 1017.8 906.0 1014.5 906.5 1006.0 907.0 997.5 911.5 991.5 905.0 987.5 898.5 983.5 901.5 970.0 888.0 967.0 874.5 964.0 876.5 953.5 871.5 944.5 smooth off 873.0 934.0 869.5 928.5 869.5 928.5 smooth off 880.0 921.0 883.5 923.0 880.0 911.5 879.4 909.53 891.5 898.0 899.5 896.5 907.5 895.0 906.5 894.0 906.0 886.5 905.5 879.0 919.0 881.5 914.0 859.5 911.34 847.8 907.5 841.0 907.5 841.0 smooth off 907.5 826.5 911.0 814.5 908.0 798.0 899.5 788.0 896.83 784.86 906.0 786.5 905.5 775.0 905.0 763.5 916.0 760.0 910.0 729.0 904.0 698.0 911.0 699.5 904.5 686.5 898.0 673.5 898.5 665.0 899.0 654.5 899.5 644.0 902.5 639.0 880.5 615.5 858.5 592.0 851.0 598.5 848.5 578.5 smooth off 848.5 578.5 853.0 571.0 849.0 565.0 smooth off 860.0 561.5 853.5 556.0 868.0 555.5 877.55 555.17 888.0 552.0 888.0 552.0 smooth off 888.0 552.0 894.5 542.0 900.0 540.5 905.5 539.0 911.0 521.5 919.5 527.5 923.27 530.16 923.5 522.5 931.5 519.0 939.5 515.5 947.0 513.5 943.0 506.5 smooth off endline area water l153-922-620 l117-939-614 endarea line rock-border -close on 936.5 788.5 930.5 794.0 935.0 796.0 938.0 792.5 936.5 788.5 endline line border -id l153-922-620 933.5 607.0 adjust horizontal 932.5 949.5 endline line wall -id l117-939-614 -subtype sand 952.5 223.0 951.0 227.5 952.5 238.5 947.5 243.5 942.5 248.5 945.0 257.5 942.5 266.0 940.0 274.5 943.0 272.0 943.5 278.5 944.0 285.0 942.0 303.0 942.5 311.5 943.73 332.49 940.0 341.0 940.0 353.5 940.0 366.0 943.0 381.5 946.5 392.5 smooth off 945.5 396.5 945.5 408.0 951.0 431.0 smooth off 950.5 437.5 950.0 448.0 952.5 464.5 954.02 474.51 947.5 470.0 950.0 480.0 953.42 493.69 949.5 494.5 950.0 505.5 smooth off 950.0 511.0 959.0 514.0 955.0 523.5 950.5 529.0 946.0 534.5 945.5 535.5 946.0 543.5 subtype bedrock 946.5 551.5 942.5 555.5 942.5 563.0 smooth off 933.5 607.0 subtype sand 944.0 608.5 932.5 615.5 947.5 622.5 953.58 625.34 940.5 623.0 940.0 631.0 939.41 640.49 935.0 637.5 936.0 653.5 937.0 669.5 940.5 660.5 938.0 679.0 935.5 697.5 941.5 688.5 934.0 705.0 928.07 718.04 932.75 718.25 936.0 721.5 941.0 726.5 936.0 740.0 940.5 751.0 943.04 757.21 932.77 775.06 936.5 788.5 939.0 797.5 933.0 819.0 935.0 833.0 941.05 875.38 931.0 906.0 941.0 913.0 smooth off subtype bedrock 941.0 913.0 933.0 933.5 932.5 949.5 932.0 965.5 921.5 972.0 921.0 989.5 920.67 1001.01 920.5 1006.5 920.5 1006.5 smooth off 933.5 1011.5 924.0 1052.5 924.0 1052.5 smooth off 912.5 1063.5 914.0 1063.0 914.0 1073.0 smooth off 912.5 1087.0 905.0 1097.0 901.47 1102.02 902.0 1111.0 902.5 1119.5 898.5 1112.5 898.5 1122.0 898.5 1131.5 917.0 1138.0 917.0 1138.0 smooth off subtype debris 917.0 1138.0 918.73 1192.95 918.5 1195.0 917.19 1206.7 930.5 1208.0 931.0 1250.5 smooth off endline line rock-border -reverse on 937.0 600.0 919.0 590.5 925.5 595.5 922.5 593.0 919.5 590.5 918.56 585.99 918.0 580.0 917.48 574.43 928.5 580.0 942.5 563.0 smooth off endline line rock-border 890.5 897.5 915.5 897.5 adjust vertical endline line rock-border 879.5 918.0 909.5 918.5 adjust vertical endline line rock-border 869.5 928.5 872.0 931.0 918.0 927.5 918.0 931.5 918.0 935.5 871.0 931.0 870.0 936.0 smooth off endline line rock-border 873.0 952.0 885.0 956.0 898.5 952.5 905.0 959.0 smooth off 886.5 959.5 888.0 963.0 878.5 963.0 smooth off endline line rock-border 844.5 1139.0 872.5 1139.0 adjust vertical endline line rock-border 843.5 1150.5 887.5 1150.5 adjust vertical endline line rock-border 846.0 1158.0 868.0 1158.0 adjust vertical endline area water l151-964-516 endarea line border -id l151-964-516 -close on 940.0 353.5 942.5 563.0 adjust horizontal 965.0 565.5 963.0 351.0 940.0 353.5 endline line border -subtype invisible 871.0 931.5 918.0 931.5 adjust vertical endline line rock-border 853.0 1172.5 865.5 1172.5 adjust vertical endline line rock-border 897.0 1250.5 903.5 1235.0 931.5 1229.0 endline line wall -id ew1 -subtype invisible 931.0 1250.5 897.0 1250.5 861.0 1249.5 endline point 918.0 580.0 station-name -align l point 930.0 370.0 station-name -align l point 897.0 1250.5 station-name -align l point 917.5 981.0 station-name -align l point 930.5 794.0 station-name -align l point 939.0 247.5 station-name -align tl point 940.5 246.0 station -name 0 endscrap scrap xs2 -projection extended -flip horizontal -scale [295.0 203.0 995.0 207.5 0.0 0.0 0 -36 m] point 690.5 1121.5 station -name 13 point 773.5 1069.5 station -name 11 line rock-border 787.0 1065.5 773.5 1069.5 777.5 1073.5 788.0 1072.5 endline line rock-border -close on 788.0 1050.0 785.0 1032.5 778.0 1036.5 773.0 1044.0 773.5 1050.5 779.5 1059.0 786.0 1061.0 788.0 1050.0 endline line rock-border 792.0 1028.0 772.0 1020.5 761.0 1007.0 endline point 722.0 1106.0 entrance -orientation 160.9 -align b point 760.5 1101.5 fixed-ladder -align tr line wall -subtype debris 791.0 1006.0 792.5 1037.0 780.0 1051.5 785.5 1081.0 smooth off subtype bedrock 735.5 1106.5 endline line wall -subtype debris 716.0 1092.0 723.0 1089.5 725.5 1085.0 733.0 1083.0 735.6 1082.31 750.0 1071.0 741.5 1069.0 smooth off 741.5 1069.0 721.0 1044.0 721.0 1007.0 smooth off endline line wall -id ew2 -subtype invisible 721.0 1007.0 761.0 1007.0 791.0 1006.0 endline point 761.0 1007.0 station -name 10 endscrap therion/samples/basics/surface.jpg0000644000076400010400000000723410507575544020351 0ustar userAdministratorsÿØÿàJFIFÿÛC  !"$"$ÿÛCÿÀdd"ÿÄÿÄ4!1A"Qa2q¡#‘±3BÁÑðáñÿÄÿÄ!1"AQÿÚ ?ËrL»1lþ,ž¾žZZ¦;<ªT¨m7÷·KGX™÷ÚÓÊ&û™v66ßã]mVU™TÁ˜UäæJøÀ„N’´{(Ùš÷»oã¨*©d’&4ªÑêµõn>Øó'ÊD¯ÔuÕ´ÒQÍ—UÅ3IQ´£€[ôÞßœ-K–W<âHèg‚ ´èU:Å·ûüceòZˆÊNgXÈ-§@ -¹ß|<ô« ¤Ë"…h~–ZwÝ»$™[à ͼàsÔüc~unÏcž•$Ëê4=‚¹[ñúãX鎛¥Èi ¼pš¦ dz­r6þ¯&é„ÌôÕK&0-n8ñ{üà.kUM\Í“ÒÍŽt¬óM?qAm+ûàw×É …f±¥"Æ Æî íºÞFá€Ûr(Uu]—E4Ðe…á§³4¤ŸsaþßßjòCõN\1i$¾×>×ýOZ¤Hä* m%lÇðœ‹öç÷GäzŸªº3¨òÔËòšÚœ–±Ðˆg–>ìÁ¿«È¾âà~0•Eü=ë~ü™¤°Ç^¥ÌŸWDDÁ€7:€n6Çh ž/§XâB=)¾Ç{\böI™f4UCé«*b”·Ýö÷¹ÜÛœSR©äÓQTæ9~UK˜­t¤ÌÚ€‰m}Ékq{`Œ W˜SSÔT¢†x¾Ûî,<ßaê9ª*¾›8–JÚjF¹¬Í Ï*NüæØµ˜ÐMC˜­%d—T]»«¡Ü5Ç‚-…~~J†I’ÒUB±ÅÙÈ–v}µů¶&äŸ/Ìu†EØÝq0ºË¤©™çuÃQZá´‚bKI¸ÚÃÎÞøi r$„e‚<[[ƒw—A[BA4ò˨ü_œ¢î¤ËU Ll ¹[Ûí?ûÆ/ÏŒbr3vQÕn;µTpÌà–+Æ‘qqc*Ì2ú†Š«/’JB  .£Ó¨Zàw¶2š‰¢&Hýl53ŽMí°ýðí—åÇ.Ö’ÕZƒ´²êÔçþñ>ùÏ‘LøLôòÔ<a4*AU ê$ ß~o||¬jç Z•2²9c¡t‚‡ÍìoøÀî¦Z¨2¥Ïéó®Ô¤jAå­k \üÜ .GÔ9¼‰ ÉXÕÜiÕô_…›p²ú¿ìn©¬40m!¯Éþ7Áú‰ ïGLË,ª¡Ö).×'aS§º<ä¯KO•¬RÎ#¼±Ô[@•ÔƒÃm~6ÀÙ¹ÂúÅ^ƒ­+ «¤TÉQþœ&à!ûwÜy<ÛŒeªT°0¨{"±!A°ò_8ØzÛ¥²|߬`þo\2ùR’õ?Ó$JÛ•U¶Á¶ckÛ|#Öä´Ô4Õò•šµ"´ÍÙ™ˆ¶÷&À¾ÜÆfeÌ ¸”$­¥­Ü)°wöߟƒŠBx)¥¨ôöZĺ6Ü~¸#E8« ’¥‚Kµo³|‹óÏübÇdE–š:ìÂ*xZõDnÊX nÚÿ®àŒJ°8dQîÛÜŸ¼´L‘®¦,Ž ì}+¾9@”ê‘wf}r5Í£?§·¿,uœMIJT36–$X:oœkT€ŠDqøŽÄ½ÿl[¢x©ê{²A@#ý2¢ÀÛÁò1J“úLrDÖ%ƒGkø¹ý±æ’u–Q“sb[M€çÍ*S땃1"Ëöüba¶ Ü—,‚:i«É§[éBEÏãeTM+vû¸3Œ¦*Êhᔨš £aA$_›‹àåI¤xÍ8¹A¾®AÿófBÈ?¦  ,.1Êui*éüųqFÂÔÀI#J–±¶ç}¹1½åy•7NôU$k™SÓ›¹vøÏú}è(3H«'£Z–•„÷ ^ÃÁUþ!e•ÍdÙ¤sK,ºÑ%ÈRx^,/o·= _޾MÄßâ_Wò¼R¶9×1$ /?÷…ö¢‚ƒ,¥‹'š¨IP•ˆ\,,6 mÅþpµ4ëV>¦%H»/"ÇàaꃶçAÛôþØ®Eo³©Õ¦Œ#EÔõ«|âPË,êi&© ݸ'Ù·;üÿœW­+ ¤›±2lIñcçG7¬†[€é{‘~1²hèÞŸ£˜—ÚÁu\\‘çæØc Èâ¨Êà‰ê¤Š¢Mï/ôÈ&ÛïâøA§ !d2õsªÇŒÊz…òâb‘bÏS1[€oÈyÀÆ5\ø´ÙË-8“¶Š±+iú@ð>p"M)nÛ0 FþçPÿÞpÍÔ9¾a]GL“@°ÃÕ߉@, ÞänvÀLº‚}]j!6d`Äa¹½¿\r|¨¦–Y¤d‹{þxÄÃEcC–Biê$.Äë[¥ÈRÄÀ†Mo!R—²‹–Œ}Òe‘î¡U­¤.?ã¶WUc}LQHÚ’ÃÐvþÇÞØ³H‹PX+Ë©\)Õà¨ÜXùãm …VI/l/ÜEÔXi8«!ªŽzdS2Ic¸m­¿ç³H¾š¤©7$ý…H6#‘Š’ ’iº\ý¬è¸Á>OÏÈ=ÉV¬õÔ_OUµº¯ß{ÞãÎãœxÍ:z,ÆS=,ú$c`NâÖÈÁWfšu!…Þ@I¾Û/àó‚YyY)ưŠ\jU îH±·ž7Ã{³mç;S@’OSêXÈè-qî=†(É”˜dŠjyV¡feÒà\©;\li±ÕUÌâ' zÌf3¦öy?8áG‘å””u‹¬2HDГp@ßcàí‡<±Û2xlÚèvÔÁv6äßÿsŠr1’F7Mp·ö¿œ5u< xF¨T(e*o{ÛoŸ;àPNR&ËØ®Äë‹sÖ“Ÿo4“ʉcfÚ×Ù¯·ø¶;-)‹/—¨<²­ñÉ)&5?N냧‘ùÅüºuV‰ˆYAv,nö [rT`’RµÕ ¥ÅÍׯ&èº{,­‰ª ®ª£ ÇT.»¡ò11/ivcéÚú³ ‡¾àA*¢066+É÷7$à7FçµéÔó庑¢ÔX±Y>­ï|LLdþ6É÷8cS%Dļ†6$–'‹ gÙ½lÑfôÔÈG$ºXiñ¹ÿŒLLEƒœö ÐÄ^äo±½–ÌÆª*¥{ÒxçÓ{bb`½U3}LHÍ­Ĩ‚™½44•I*{k8Rn.yÄÄÁ- 晬ÒÇ;I Å!l¤m¨sc‹òÐÒ)Š SƯ1tkÿÆ&&-Ï幆R•Ÿ'«i#Bè,mŰɔeÔFš–¯éÐJ±!'“‰‰…iÿq¡ @µ£]ÍÎÜœLLL_ÿÙtherion/samples/basics/thconfig0000644000076400010400000000110311655756420017727 0ustar userAdministratorsencoding utf-8 source rabbit.th #!PROCESS #!TITLE 2 Drawing maps in therion layout water-blue code metapost def a_water (expr p) = T:=identity; thfill p withcolor (0.0, 0.5, 1.0); enddef; endlayout select pdx@rabbit select pdp@rabbit export map -projection plan -output rabbit-plan.pdf \ -layout-map-header 0 0 s #!IMAGE rabbit-plan.pdf export map -projection extended -output rabbit-xelev.pdf \ -layout-map-header 0 110 sw -layout water-blue #!IMAGE rabbit-xelev.pdf export model -output rabbit.lox #!CLEAN rabbit.lox rabbit-plan.pdf rabbit-xelev.pdf therion/samples/cave-list/0000755000076400010400000000000012270034352016616 5ustar userAdministratorstherion/samples/cave-list/thconfig0000644000076400010400000000411311207763562020354 0ustar userAdministratorsencoding utf-8 #!PROCESS #!TITLE 4 Listing caves #! #! When surveying caves in some large area, you often need to generate #! an up to date list of all caves in that area. In therion dataset, "cave" #! can be defined in several ways, depending on the level of cave survey. #! #! If you have just surveyed entrance station (e.g. using GPS or standard #! surveying methods), all you need to do is to assign entrance #! flag using source centerline fix cave-1 123456 789101112 1234 fix cave-2 123333 789101122 1256 #!CODE station cave-1 "Unsurveyed cave" entrance #!ENDCODE #! #! If there is some explored passage behind this entrance, but you did not #! survey it properly, you should add also continuation flag #! and explored flag followed by explored length. Explored but #! unsurveyed passage lengths are also part of summary statistics. #! #!CODE station cave-2 "Unsurveyed but explored" entrance \ continuation explored 80m #!ENDCODE endcenterline #! #! If you have properly surveyed some cave, its data are usually in some #! survey structure. Survey becomes a cave, if it has main entrance #! station specified using -entrance option. Example: #! #!CODE survey small_cave -title "Tunnel cave" -entrance 0 #!ENDCODE centerline fix 0 123488 78910888 1244 data normal from to compass clino tape 0 1 100 -10 10 1 2 200 -20 15 station 0 "Main entrance" entrance station 2 "Second entrance" entrance endcenterline endsurvey survey xx endsurvey endsource #! #! If survey contains survey data, but it has no main entrance specified, it #! is not considered as a cave, just as data organization unit and thus not #! present in the cave list. Only surveys containing some caves (i.e. entrance #! stations or surveys with main entrance defined) are present in the final #! cave list table. #! #! After caves in your data have been properly defined, you can generate #! table using #!CODE export cave-list -o caves.html #!ENDCODE #! #! Resulting table looks like this #!HTML caves.html #!CLEAN caves.html therion/samples/langs/0000755000076400010400000000000011763362346016050 5ustar userAdministratorstherion/samples/Makefile0000644000076400010400000000010110564735340016370 0ustar userAdministratorsall: tclsh samples.tcl clean: tclsh samples.tcl clean therion/samples/map-offset/0000755000076400010400000000000012270034352016770 5ustar userAdministratorstherion/samples/map-offset/cave.th0000644000076400010400000000034510564525114020252 0ustar userAdministratorsencoding utf-8 centerline data cartesian from to dx dy dz 0 1 5 0 0 1 2 5 1 0 2 3 5 0 0 2 A -5 -1 -5 A B 5 1 0 A T 4 0.5 -5 endcenterline input cave.th2 map m1 s1 endmap map m2 s2 endmap map m3 s3 endmap therion/samples/map-offset/cave.th20000644000076400010400000000367510564525114020345 0ustar userAdministratorsencoding utf-8 ##XTHERION## xth_me_area_adjust -113.5 -109.5 471.5 403.5 ##XTHERION## xth_me_area_zoom_to 200 scrap s1 -scale [-128.0 -128.0 482.33 -128.0 0.0 0.0 15.502382 0.0 m] line pit -close on 207.0 62.0 178.0 58.0 120.0 40.0 167.0 38.0 214.0 36.0 236.0 66.0 207.0 62.0 endline line wall 341.0 76.0 300.0 74.0 254.0 84.0 231.0 77.0 208.0 70.0 155.0 54.0 131.0 56.0 107.0 58.0 20.0 59.0 20.0 59.0 smooth off endline line wall 17.0 28.0 48.0 25.0 83.0 22.0 119.0 21.0 155.0 20.0 209.0 41.0 249.0 39.0 289.0 37.0 340.0 38.0 340.0 38.0 smooth off endline point 334.648 59.0526 station -name 3 point 236.218 59.0526 station -name 2 point 137.798 39.3726 station -name 1 point 39.368 39.3726 station -name 0 endscrap scrap s2 -scale [-128.0 -128.0 482.33 -128.0 0.0 0.0 15.502382 0.0 m] line wall 255.0 219.0 260.0 167.0 239.0 170.0 252.0 148.0 265.0 126.0 184.0 146.0 158.0 129.0 132.0 112.0 123.0 155.0 122.0 123.0 121.44 104.98 121.0 81.0 121.0 81.0 smooth off endline line pit -close on 169.0 147.0 162.52 138.1 217.0 136.0 217.0 158.0 217.0 180.0 207.0 159.0 192.0 157.0 185.73 156.16 173.0 152.5 169.0 147.0 endline point 260.0 142.5 map-connection point 100.5 135.5 map-connection line wall 111.0 86.0 118.0 117.0 94.0 136.0 114.0 151.0 134.0 166.0 124.68 122.82 224.0 178.0 233.0 183.0 245.0 182.0 244.0 218.0 smooth off endline point 230.218 160.0526 station -name B point 131.798 140.3726 station -name A endscrap scrap s3 -scale [131.798 140.3726 230.218 160.0526 0.0 0.0 5 1 m] point 174.5 222.5 station -name T line chimney -close on 175.0 234.5 167.5 246.0 154.5 248.5 154.0 217.5 153.5 186.5 182.5 223.0 175.0 234.5 endline line wall 147.0 268.5 155.5 256.5 186.0 251.0 183.0 228.0 180.0 205.0 159.5 202.0 152.5 181.0 smooth off endline point 141.0 273.0 map-connection line wall 145.5 183.0 149.5 204.5 155.0 248.5 140.0 265.0 smooth off endline endscrap therion/samples/map-offset/thconfig.10000644000076400010400000000060311025754474020665 0ustar userAdministratorsencoding utf-8 source cave.th #!PROCESS #!FILE 1 #!TITLE 30 Dipsplaying overlaying maps in offset #! #! Assume that there are two maps m1 and m2 #! (m1 is above m2). By default therion displays #! m1 overlying m2. #! #!IMAGE map1.pdf #!CLEAN map1.pdf select m1 select m2 input thconfig.layout export map -layout l -o map1.pdf therion/samples/map-offset/thconfig.20000644000076400010400000000117111025754576020672 0ustar userAdministratorsencoding utf-8 source cave.th #!PROCESS #!FILE 2 #! #! To display map m2 in offset you need to create a map #! containing m2 and specify offset and preview type #! for m2 in this map. Example: source #!CODE map m12 m1 break m2 [0 8 m] below endmap #!ENDCODE endsource #! After selecting the m12 in configuration file you #! receive: #! #!IMAGE map2.pdf #!CLEAN map2.pdf select m12 input thconfig.layout export map -layout l -o map2.pdf #! Joining arrows are created from map-connection points #! specified in scraps that are moved. Otherwise these points are #! ignored. #! therion/samples/map-offset/thconfig.30000644000076400010400000000051711025754650020667 0ustar userAdministratorsencoding utf-8 source cave.th #!PROCESS #!FILE 3 #! #! If the situation is more complicated, e.g. there is m3 #! below m2 #!IMAGE map3.pdf #!CLEAN map3.pdf #! you need to create more complicated map structure #! to handle this. select m1 select m2 select m3 input thconfig.layout export map -layout l -o map3.pdf therion/samples/map-offset/thconfig.40000644000076400010400000000051310564525114020662 0ustar userAdministratorsencoding utf-8 source cave.th #!PROCESS #!FILE 4 source #!CODE map m23 m2 break m3 [-8 0 m] below endmap map m123 m1 break m23 [0 8 m] below endmap #!ENDCODE endsource #! Then m123 looks like this: #! #!IMAGE map4.pdf #!CLEAN map4.pdf select m123 input thconfig.layout export map -layout l -o map4.pdf therion/samples/map-offset/thconfig.layout0000644000076400010400000000017010564525114022033 0ustar userAdministratorslayout l map-header 0 0 off symbol-hide group centerline color map-fg [100 100 80] origin -10 -10 0 m endlayout therion/samples/morphing/0000755000076400010400000000000012050456024016552 5ustar userAdministratorstherion/samples/morphing/sample1/0000755000076400010400000000000012270034352020114 5ustar userAdministratorstherion/samples/morphing/sample1/cave1.jpg0000644000076400010400000004706010564726604021640 0ustar userAdministratorsÿØÿàJFIFHHÿÛC(#(#!#-+(0†Ð6±òT[‘n^ÀL×Ü6P†á¿#/ÿ‘¿Fm¿ m ŽŽçÒO‚\oÑ\€ÙøÍmÊkéê}Eû_(ëmËÈKî4ŽJsÑÃWÏ6MÁ¦ùÿ£ž”vê}òv¸-yjI¤¾ Î2’â7ä£UýMÝÑÎ j')pø1¤¥ ýí¶×ÍÕU*"õæÜÛ”RÝPzšj㘛¿§¥(¦œ¹tOgÛ'ÉYb_¨’KjË%ú©)íÔ†=ÖÒ”¾èU˜ÒŒ¥ª÷ò–l‹éþœõTœ–2‘½Y'¤ê¥àž„[µ†cÿ7ºÁèÐÒJ;¥Ëòw£ A5û™ã¯÷Ñ*ÇD¬xäæ´›¢ÿÇ]ɰmmêEvŒýUxNOЭ'f”T‘OYú“ÿc©<Ü›AÒ`PÔRÇ t5“2„ZÇ §K)°k¢D°¨ÌZš´1J‚µadT€œ½…*à×á_E`]Y'bù ^J×’d°€Dž ­nW…“Ã5„aðÈ+ôOàR&¦ÚÔxų|™Ô{ù4Q%ŽHCAC@ÑA$‹ЀR‘  1Æ”W‚þá(i"¡ "• ˆ¸ào “w` ºáàRÁPúý ’ÿ Vü¶) d ×°ìÓÊ¡D@FsœöjÌùVYòW€oNè}±å áQ™c«4ý[ Ê\ªGF“Tø p yå¢àÜ ób¿R’ji©#»V²yõô–å:´¹Až5ZjãŽA­H{^N°ÚÒqâÇ-7÷Ý”c¿u»Oƒ±Œ›Œ9íy(ê¸=²ƒAéêl»L´ó«¨þ MJS–£Â\éÿl›î@Æ/6Çn [èHÒŠ¤4f1¥ ”£mÐí<ó_S[jt£Ë kRýO*·ïò'”´óèÞŽšŠuœò2ÓÝ(´øy ë^mÒ‡òÁêÍM)GŸ£ ÖrUULT£õmZ]€ÃQMcŸÎkšÙÑè aöëJ=5gEÉÍçõ+ã&óŸFÄÊX©¼ ƒàWD]‘_">P¢‰–BJÓ^CNû¤þ]Iò$–D*'à ñÉ6ÔB4 z~QFµ?{ÿØj~÷ò6¨Š¯$‹˜F€±ä°.j†×’‰r€¿¸Lnû‹vxe;Ÿ†7éQ4a7àÒoÀðƒ> Ý<¥ÁÎ09ð¬[ð ºà–VbØX³.· ÏA›\°h>ïE÷˜iä×ÜÎ@RÁ<"Wäš~@k$ëI´wé K Úß,iù‘X䫨4š§ÀíöTš[´%|Å›Rzqs›OÁÒZjJŸhóNöl•Úãà3Ǧ*/¸Ë™8ÿM^у§)rÂI(iʃôê´£fuÒÚ£Ût3“‚ŒRJÂ;ƒJ6ÌÂJqµA¢¤¸ìÑΚ{ªÍ'ÚÐF›öy\¾›qJíòwšrý®™+ß%%Q=]šw¹ø1§«©+ûm³Ð¡»HÕ.2¼Ð†ªnžÔÅh'=Ò•³ÐƒcªX)N1VØjjÇOœ¿cª÷j*] 3¤›”¦Õ'ÁÓÿÉ¿AÂÅ‚*/‚±—Dà2o$è ;Æ 6RèW\•1ã#€0¯%M—‘\qàÌ™¼m+O'„Ú5ù1¹,¤¯ÙE¶×U}ÒÏf’3«w/–ipKÀ$…’ˆH¬>¢`ÄÃýÂO÷"ìABÍPG³@MaX`gÁ£5Tk  }0**H?¹AÚ £³¡‰v¸â`\åŒj$‰p€H„ É`Š\ û‘™é©Y§Ê<òßµ,Ä饘,ômýØèã§zz®‡ÀN ýß©Œ'YAISVrYý[ô¹Ëêí¬n_µØEcŠôi«åYI¨,þBSP·ø9¹k?¹$—Š(9=óü#¸N¼ßZk˜gø¯'ÆšþOH0epúú‹5ü“ÖŸ?M' •Åk´³ ü˜úón£ÉèóeØÀ2±§¢—Ý,Éù:Ñh—`!D@N©‘7†_ ,t_3!\¹ `ý°©»¼š\¾FÒÈCÑÎq\»:’µ®V±Ö .ä’ïM^Pðóy2¯F¢Ì¾X® ês?–1xɤ V°XÙŒøôø |pYðŠ‚Ë ïÐýÈLæú¡³ò9ò£Ù£ ?#Ÿ "øÈ5ì °ŠuÉgÈ à¿,Ç jÄÊX*ùAÚ ö²²ÀÙ¥ìv€˜|³TŒ4­¤]’H¶«°‹Ç%KÀFšà ãÉb—‚¥à UE‚’Bh­ m6 ßÚÜ’@fÒGš3–¦¬¥T–èÕj:lÌÍ î¬%cA·©9?ŒíYÏôËúwäê ÁgÕ+ŒyÃ=Ô6ås`¼ní_¿ "°n‚³~ñÁ°|;ðƒ@@;ðÜhËýÖ«~ š,úyà×äÊà!wèÏÜÇå…Nèi×%ÂðW²§\’ö Œ#Lºeû¾ ko,ݯÚDVRVj¾A[vme uÚ6ãqØžIÆ86¸²Et¹OåŠà¥û§òÊ.ÀkTnŒ²¢" &­ Y… ‡†„ZÊ*«ˆzí—²ØÐl¯" àJ< 2ò &¬$Y4`ùC@ÖP{#TTB²ÍÑžØx\2¸FŸŠ „‰p!.>Š+HÝèTDƒ STj‰¬¡êÙÒywZìުݥ%èñ¹½±Œ¸Ef½lc'UFôäçÕJÉ(j=õgEKŽÇ-MG $•ùG=(Êsz²TºFµúðMÖÔ—ë1X4Ð' ‚KØJX I®ÃpnöÑcÙ•,ä+`Ù—+Àn è˜_&7P¦Pò+ Ái¼àÍŠ–4ˆ7"µäDŸ’oÙ"Q«¡´¼€'Xf¬ÍÆÝÑ_†…£žç‹Á­ß3XÜ«†[’òEtrû¦½°‡Bÿ|þXC†A»‘ÉQU ±²±3%ŽE,rPþ¨( Ö°•*wËhQš%“VÇrôsÚ­ŽÐ5¹äaÅ1Ú¼¨ÉW(w/'5[P y)J4 i%`tܼ–øù3µŠ[Ð9«AAY@kz-ëØR*rÈoËähÏlu"ßOö•'ÐÐÔí'Ùª(¬ZöIãÚ@NXà·ú :E`;Ÿ‚ßè ÉÚ-Ì(€\š‹gŠ5-D›ÅžwZRø£Í¤—ÔÓ^¬¬×­ê5ãø 9ê¼Êª‚ )Rª7~ˆ®_ªn£.Ó;)¶®ÎzÑß§]†”Ô¡XMrõÑ6—%¹‚x£t»²{äÒÀ{½•?f›Ás§ìwäë]dTï‚i¼²¬äŠÂ‹6…e•Ú[]›Hh môQŽ ôK‚Œµè¨Ð‡c“R_´Õ¬±H—<EÏf‰ˆ¬ÛäÒàܤ¾¤—¶f”—õgòÊ “*ÑvD»*$@O\x%tŠ2è«%.QvDC€3ýÃAýÂDVL&`›3.ƒà!Ê| 4@(ËäÝd<ªX"À¢-`IðÈóþ«vÕµµæIÇ[V{f°û ^xkOM5©rK‡äôhë-TñMtšRÛÇ£œtÖ–¼*Ûj˜Oc¦¿úMžm»Z×ö£ß(§|?Ò/êÏøëPZŸY´š‹y³ÑCØà,Œàá¯Cúšn¼žš”Ð,rÒ’œ‘ÔóéÿKYÃ;_¥ðh$ETCh-hm«AEÚ%Ød¹b ¬Ä,“ApWè#uÃ(hþƒKÁKà³ø(‰{ÁgÀ¬ö9ð@d»°+%e›ú³^Ø'ègZJùaY•h“ÉQVJY`)/,ûQ4«‚IRÁCi•z*^$Âò/ 6V4TpßÉv…Y1 3zôïäÐà×M`7\oÀ® 3ŸïÁõò’§èHŸA›4þŽ|’KÙ \W²ÚüŠ 2㇒Qö/†+€ ¾Î?¨ÓSÒ}µ“¹5`¯Ÿ£)C„Ü|x=Púz­M;kÙ—¦á:Qµ'ü‡éá ïX~ƒ1ŸÔMééá[x9þ‘§»ÞMþ²-ÁSìóÆz‰ÇzõÎéíË )î¸ÉT‘ˆjFOï[dÑÖ1Qà+T¤R’Œw7HÌf¦­\õ¢œ-sgh=ÑMVšèçúfêQ|¢§×z°6 á‘Mz†È½å`_°¼ !ÀVIrÅ‚ì! ¼•… ¸&®B4]ˆ`ž \äáÉ+üv@D¹.D(EÙ.IüÕ—Ë(òòSÿV_,ûˆ­’ä‘vTk‚26ø(þÔ,#ûQBDV@Jè8c'‚ì¡" Íd@f+“Iåˆ1è˜á .èL°4@F_?ƒF_?€(³Fbh" ¬€‘Z+@O†HTòIãÑZ} –øÈÚºkRìå£&ç(Kðwmw*ýO<„®N5µ¬¹h¾åðkSskª¶ã”êjÑiÃd{vìÌ´ÒnZmÅøèÏÔþÝKƒóÓ ìŽrþ–²}¯‘ÓsX–WLÔíªÛe²|ÔŽhÌõç¸×” z„åXˇŸÓdRÌÖPÛÞ-å Ï„NµўÃ(­ßA™É6Óä+Wèl„m4&R~G>@%Ž1•ÓÈ(¿ >Ë®‰/`ãoª²(6Óå’^Â5`ÙWÉPìÑšä¨S:å…ýéþ¤¾Y–ò¸"¶W¶M䨷|ú`4P_¦1xá•¿LoÑ@uÀ[ð-º Ø·àrIˆ¶9ô”j€2Yô$UÛÈçÉ.X€Sòüš&RûyöKö¡¯l$½š WÉR£5“feû€"‘ª@R IgK–KÁRð$Ò¦Ic|áVB•>ˆŸB€>ºÛ8ê,ÖéèËI¦šÃ á?ü‡NÓX:ÙÂPކ¬d­Å¤°©„ŠOw6N*J¤¬¢Û‚o‘ëã‚SÒxû£ã´v„Ô×ÚÌGê}F¥Uè§£otIŽZú{ ß‚†­½³U/òkRöJ«€v<ú_§ÝÜÛ¾7©¢ÕÊãìÄe«RÊé¤uŽ´f”ewíoNR6>ŽrÐiÜ0ú’‹KR?”]ƒ—èËÕ‹Žå•èt¤§Ñ"š²íˆwø! ¬’àÕÀD%D*|y(ª˜‘W”/&{B¸&]ÈT¹)3A­Y_– eÕýïäJˆ¦Ÿ³,é†e਒e@O%¢à£ÁB!BÖ á€‡dÚ=¡#5‘°.Ø™\±°Ê×(ð„Êj†ÐK€µäœ±È;—’µäÁ¿¹£.JÀb²hÂ’5¸,·|’~˜ úe~˜Ip·\0M×l·à-ø“+2Ûð)¿@?$VË>€Ìच}£Žœöýš˜®ÙÚÝ™”¹YÒV±TcSM5meúZ‘Ì%F\µâóב†»CöäÓi¯û“_8kkÜ•'|^ÉÁj,£É«¨àÞ–íÄõ¿Q(*T¼¢–iÇQ]÷}›ütý;Ø¿ÝÿGV¡>o£ŒjqSÓyªh´e6ž%Ñ~:Çê)-ÒMvt’ºáœ¾¤r­ã“n’Nð‰þž-}¸g)=-f¥‹=QjJÓÁË_K|qÊö üvr¾*|ôpÓrÒ[gÇLëŽVB¶@•“Df¤%œ8¢ÁQVËi¦Zô ༕¯%H±à¾Ð:´]ðecD€”²òiLÊäÖ [R“öe»®‡S÷K=“ý¨ŠVR&˜§Á0*k²Ï¡ ‚›ì£Ç" U”9ò9òH[NžA§|š|0Úü{ì ÖVX×¶/¢5ò‘¶eÕ•Vj½Kq¤kÑxÁ w~€#UÁªA°fð* |¡ÊO"™P +%˾à"k¸Á”Ð~Eþ3%äeÁR* °²‰ÙG€+")¼Åz1}$k¶i1ÍÂq‹Qvrޤà¶ÎôÏKOcÏ¡©·öø7¯¸Û\vcWM¬éÚCZ³RòTs„ÕÔ³ÙÖSþØþÓN ¿jþOSO1j»L#Ó 5 Q=¿o'--]éäÛrÒ#EÓŠµÏ(çOMâÜ|x:Õ®Œ´×ÈV¡%%iÙ£‚ƒŒ÷Eדª’“yX|ì„›&<‡Ø&¬JŒ¹Æ6Û¢‹ÍöÀ_+ÙUäh ‰¡" ¬6h;bQj~é|ƒ_j)þùü°J¢e[Ê< @³Ð¥L¸ˆ,LÝ6Q¬eeh ðÚ UÈD ¯%¹²ü™m`m{†ÐXY5Fo=ð7é€Ñú+ô¸3ëƒYð­¬mø3+®Ñ||}É—v€DÆo£YôeÁ’ÍòŠÂŸÏ4 à3ä~@Ý‘œù*~@¥À£2Xä¿ , ½°k7ç^_b&¯³48}U1ëªlix(¯%~Š—¥à tsÔ‚šç=dê’® —€3Õ{jNšäéš«Lξ‚ÔÊÃF4d³ bEG)éíÕNîðÅʦ–¤i¼6oM8ÎKsÜŸgyéÇZ rø~-8¨G–ÍZ³”´Éf>|“¶šàEƒœ£M¸,‹€®pÔOÁ¤ù éî^“ŠZºväÓH£»ü…ú8-iê?²(k¹PÁÒîðÌîôÌý=EÿÜÇÁ}95™tÒÖyŽ:ÅV3¤Ò¸®"èéÇd¼`n‘Zæû9jO|ÖœsçÒª•¢·àjŒê76€Ä%)NOûVÐÌ#¶).‘ºÔýÓùfj oS™|°_³Œ‘DDÐFè %B_h4IS(¨„€Wَ艥–ú6šM3@ L婯J©¿þéØ˜ŒÔò¸4Ø p&PØK†VxH[‹°-p6eô¹4e5bšð –6Ùfù¢ ù*|ØØ‚à¡'ȸ!— ä•f²j‰¬¡4Æ„€Åešè,ÒX(¨ 0 K‚(ZúJiK‰.;0hSŒ›ŒÕKüÓM`Ʀ’šÏ+ƒsqžÉrTuœÕ3†ç¡*y‡^H8Þd0Å©+O O=?Ó¼f ïFjÓ´ QšË4¶•Á·•òh?"@I«¯ ºFšþLÅ”Nº=GŠ:•¯¹E¥/'§{}³†¾šÜ§lÞöÑË~¢“Nš"ѹB.pÏ”wÓ’œ— òËO{u/“®”\#IØHïbs¹º :.þHæ¤Ët€èOƒŽ¤ä£ù5r®Â:.ºìr«2ÕÕù3mù'¸#u‘µÛHÆ[í It­É•å™KÑšû½ÖÂÑŠ~× 5ù(¼rbŠ€éehçC´ 6©å£-`ªÀÕ¯!j¹ eO€&ÕªÈËYC@kr È+<•{¼šLÍdRÀä[­ðɯaTž ýàÐú&ððDé&òrÔ…µ%û—líJÄ CSräÕ¼Úúz¾Ž»x(/£„£-oÓã´v›PVÅT•ò™GQN6¿‚¼¾SÒ”ý/Êën{b¾ï`×r¿g*Ôk2Wð5(®sì+nT¯“ ¦Œ½Im{¢—»5§'v)Rmº^IIº} à¥I«Fðmÿû ÉB6¿”à£Ïðb+ê<ÅíêÀ´ôÿ¹·lëXË.©03Þ,³àÝg’IùoïŸË3h¥I»å°OUFQŒ\›£†£zòQ_µÙÙ^Ü+É”õûtÒ,fºiÁB)$i¶–NZÞ"‰ý^åS][I[i#ަ²m¨ÅÌóV®¬ÔweᣭQœl&ë:Vžèº]§Ñé„ÔÖ—SKVr•ù£RQR„°\{Ìãnx8ÆœSZ²/ ß:’a­uÙ¿j®"‘Ëè.\å_'Ÿ^0½°“r ®ß©J2Œ°…~§Iº·óG—N1•ýFít3Ò¨9U.ŠšöOWN /“3©µ(4ßgé9V×i”ž–Õý×yEí¸ªhÞ›o÷F™Ïú‘Î$ÃR2uÃðÂÇA¢KÐÓ ²Ëò)eƒ¨­ÍÏR9‹wKÀý_÷ÅÄß+œš[Z’ÀBš¥÷ ¯&43§“¥¯ ‚V!¹J6¼€T¬Òo³5žM¥€¨;þîÑZØØ'ÏÈ> <à—k ìˆò„x"ÈO"Œ¾E;èȰ ¬€àIð„:`gY9G;(»JÍ)ta֛ܸ|”sœÛ›„ôðýšQ”b¤m´ë6frØ“ëÐCº|R“”ôn{ÕEøO“¬Ru$¹\“Ã:Sw¶IîóäÛáÑšR|3:‰E9&ìƒ[¡Ä¤¯ÁÎŒ]źðyô´Üõ[‘èéið½]\ía?ɇ¦åËi|›ÓÆœoš5ZqŠJßIQ–ìoÃ\™¿ekÈ ýÅfmZ@RŠz’~Ù”°-Ôçÿ&I™S£“¶ä±ÔšÓƒlå²SÌÞ<ýCûR}³§ ¤Tè„TV¹ÅK.Ž/Zñ¥–ÒÜîr°oàÔÖž­ÇI:òn§Œ"×Meå¶ üšŽªrÚÝKÀG;ž†Ý%/ÔABÓ·àÞºœ¡Qï“’ÒÙÒ“ì§ÔÔ–“MÑÐUrå ”ôðë qœ#µ-Þè#Í­¦Ôä•*à6~¢qÚÿiÞm·-J·äÕ­%'m¯ èè-4œß«5šï“2ÖrMl‘§n)mË@QoN·¦øôZŽíVûhÔëOGîËðpÒme^×Íô ë ½:Z—µðÏB®ž7ê5!§›¶ø<ñž´båGÀ]ÇÐÅògU^›GŸCõ1ŸÛÃènýí²úÒ¿Ùöù³¤$¦¬©åeiÆ?µS2õ ¥LìòppŒeO7ØväãR9KOSRqn4¼g¶;\pììبâ£%©$–<³Ðs›{YV¹ÆkM½Ïð‡_[fŽøåñ“: 9yÝÝôcVW³)d&øó%©¨œ·;f¶IFÔŸ´Í鸭6§ºï•Ñ·«/§¦•Ë °Ë¤g-T©c³zºŸN’«~N0ÐÕƒn3ÉÓíÖ¤ÝI‹’¹I7èé¶+Jº9êEiE(âûð/OúmÊmºǯO[9]á-]‰:h×þ4utîòû9­ ©Ò›O 3«­G×'£ôÓrƒMÛG%úw=F¦í¥vtŒv-ÚkítÔÔZq·—à4ã¿ï—Ê/¥ I­FÛ;R#ApRÌZôQ•A\4§qP–SáŒ!(¹EþÎGOúj/“SjnO XÕ–Øû|Œ6飖jÍêKðHX¨Ÿ(Aò‚¢"fW,єհ4@åé’“o€ÂBÂ/í ¬†ª| ø0Ûº£e 2ðРyf…¤[—°%Ù|ä›Ánð˜Àeú@ )Y|á`]u›•AvtrQMß¹9ÉöX;ÅRJ°ƒVj+'5¯»Q$¾ÞÛÔõÖpÁÒPŠÁËWvýÒuá~¢Wo(å§z³Üÿjà#5(ÁÊoîôz4ÕA/G=wö¯“¢j‚ÿò7ŽLß‚ ›|7‚\pˆÍú`O”&[v°9ð$ÚÕž¹’’·òRÔŸü˜G–eLs6òœ$ä›k+ÀÃ^-S{_²¦µ·¸¤j Æoý¬ç(Ê/téÂN[¥++.ç=M©Ûm|£Ä­Û \>¤“SºÿýÁ×Y9F—+¯&&ãb’~QÚn%Hã¥M^mrN1ÓÔ‹Iç»jc±”7€==ÝÓ1)­;Œs.ì¬ñö嚆…§)å°Ž„µ[”©Fí Ö_Jq”R®Oc„vÕ`ãú6ô“Y cКi4Ó1©¥¯¦ŒþžIéEv°vÁëÊÜ¡öê½Ð隌-R’Ûèí$šÊG(KWmR|1Ö)(¤¸9j}ÓQþÙÛ^Î0{ÝJÔ¢B³õ*y_}UÉÍe¸¯ Noz«¼†«Ü¡%L¨ãêhÉÒmˆj)¬sà¶äï+£-ÇR;âêIÕ‘cºï %©+“£šÕ”1¨¿(ÒÒ„å½ýß!Xú³ž4á,¾‹–u—£½Q0cš[RJ4Ž–üñàÒ·àÚÁª'ÐQŸŸHŸ ¬š°ìŸ,’f¾F¬ 4ü‚ºäÝzÀ¿#Ÿ%ÀSnÈ\ä#. ”ì«Ù Dªjبîå°nÆ%ÔŠ‘JØíD¹bH©x! a¤X2Kk3§OI(ޝúmœÿOA_%>œTܶå™Ó©Ji¥ÁѼQæZ²SšŠ¶ÄGXÂâ²9†xpgI§¦’“R‚š§mgV§ÕUöuLójN:_O):g¥F¸ LÖqÁ¦¯³)U¢¢ *Ã.t]‹‚ò„(@å?õgŸî`¾MMV´ûË–B¤þá–”'Ê$•ú:•çzKì›KÃ1­¦í-Ñ=O€…UZoÑS†¾æ“\¿àé%|ž”'Õ?(ÇÐköͯÈ=tŒ+/“G¡%Ƥ¿‘úS|É¿ÿC­¨£ŠÏF4©¼ø:CFžé=ÌgwÃ*´’扵¹>G€ÕŽý7AÍ~§M¾×Ê:5»M¯(ó'²;¿&ô媡KM? ¬~›í›ƒàõmG›ïZÑ”á·=ºaÝy9ëC|SX’Ê;K‚ âµê­7ç­J;—îxA«§-Ûàóà$·¸(ôò©'-«„sœm-MÔÒÅ&¥i7‡ÉÎÓÖÛ–«†T¬îœ¤þž<šÓ”a§(ÉgÀ¸Êå8ª®=™…kênj¶€ÃORqÌ© tõ4$Únqðw]”¤—-+"ã0ÕŒð? ÙÆkJwþQ˜kì{d÷.šAuÝp¬×Á…(¸§i£aH2ì@KžB‹wàÒî,Ñ.@PØ"ºYÈ Zòì‚’ÀU”¤©ä”€x ÀnL±AD¹L}“~I0óЮ Š`)e‰‡—àpPÚò[¼/ä-"¿@Jë$ ã¿@rÖ“UË6ÕG8ïú“OcTkRSª‡òüRÕŠn1w3+A·móÊòoJ)+Qç³£nžÌTžÕKÑ­ß}]«¡wáaiéÓŠUðuå4íÎGkè/oÈfÝ¿Á|ºä²ø ,Ñ$ü¤Ÿ Ó¾H†˜·Œ}+ìÖç?õ§Ïîd¹iQj­'í”emàŠUîäèr«gAÛxXöeiEåóädë„”—³Hb¶ÿskØÚ±2ïrðÀÕ“–;"³=¼3|˜µmdшËïq§æèè¿%ðQxàAp€Æ´\ã…“jéZÉ  ˜Ën‹>Kœø9Î.÷Åg¿gR Ž2Ý©µÓ(éÍIIµh5>¦œ÷E)DÒ“šÝ g´ÊŽzº³‡Û_» „Ä¥§É­7õu›’ý¸Híµ%I`‡D~쬣ŒâŸê*JÓ4¿£7þÇÿF5ç¶qiÑJéô#OX½'vÚöz#«—ÝäεOIå0Xç-5(©iÉdtµ%jÚ^NzRŽÛ㣴ô\£JN½„uYÍÚÁáƒÔÑžÝÉ«ìïÿ—ï‹_öE×£ù¾L­H>$¿‘Ü—÷ §j*É)'Ù^Bš ¾Š¼ˆÔ rh“äн 2Ò¢ü %À@͇Ð/tj\ $Šý³.Jù9OVoSnšUÛ`z#Íös‚æƒRçö¬.Ø«$ àlpeç ~» ]6¼œÿo¹×G ½’‹MÑÖ ¸[U‚£qx3 ©Ú¦³ÙN[ci*­w’+UýM×è§*Wü ¼Å_, iþÓLÌ^*¬/,Ť٦ýþç€7cf2 YY›}’• Á]•’ç€'ð8 kŠeÆy:ú³ùfc—òkUÿV_,ÊÃ"—i£¢ÁΓ’:ÐÝNÒèÂÓšxkäè•JÑ®M"ÖrÄUy4à)J÷az(©&íã£Iý¨@ŒöÇr]˜sŠ•X 0å–·%8ß³¤^ä˜ . ‚eò ã¡£-\ŠeX –qÔƒ…êCòŽï”T˜K?NãôñÍäìyÜe£©¹Sƒèï)+]‚8~¢ÚPK-‚„`öO+¦kZPSRÝ•Ò/«¥ª¶Ý7ä¨ãZqÕq§øâ©p–m„#·õ*2_ÉßUFm¥ÀG4ã®ÒÊhõ.4a6–¤]6¸:ÇRk÷E5å0±ŸÔAVêàÞÈÎ ÕYmÓIE=·–uI(¬ðAü}>“¡íÄékÉnL.G'úxnµiúf¶}Ö¤ÍÚ&Õ c;u?Ü™7©á1¼ò[¼Ú—ûòQ«¸3{&­-Hù¯“Iß ÃŒ_1³J+ö¹ ;4 „s½D¿Ü[jû Ð5Ø,ÂÕŒ¸ôË€YL›Á—»k¥o¬ªôq–œT­sò ’Ôr^(ÚÑí»^xé·Yü,‚Oƒ)M¦ž¹ÍÆŠNrnúàÜ¿R— ¿Zj’i4kbð‚9¯Ôaý’4õƒn5òRj7)RG9?«*â( É,Icÿ“¼Zبç*›«U^LÎ/N.Zrþ{½ZÏhÌ`¡Âü˜„äãn «Jö>F+³t›|áòÞí.‘ÇSRzA&•öz#I(®‡é. ¼Š_$l+îlÕk,¬1KÐ$4^I%F~ |¬ðN€¥FSÈàbr½i¯ä.äÇR–¼¾XAýÄV¶½ÊŽŠ×F3¹3§B JÜ~2”n8fÁ*T!È;ð$ø óà\o m&ì·ÆûÛéÕ|#RÅÓ§Ó9iBqt÷cøiYºuÐEW“@ µÚ%o²i>I †ÌÍí£VgoõŸ  *{rk>J|ZDš È~Fý… ed«Û&øqM;ÉåSú2œmtÏY—%MXK}éÊÝ_ÉÒZ0’­§' h7-<¦í£¶ž¬u‡á•&<Óû5jÔxbµ–¬¤z5T\ø<úšqÓÓŠŽ$ù f:CJ2ÓÞW’úkM¦¸ñfô䥦«¢œã½Aå‘]]’® uI•(…]f’2õ´Ö/ø<îSr½× 7©Klb•°šém9:RVo³Ë 8n{å÷{-9lÖýÏkÆA¯_àHƒ@äÑ.X  Y^MP.Ä´àÞ`¿^ûg$vì¨&<ïNkÿ¹kàÃZÑî=RX ·Éty~®¤_Ý zgHëBN­§ìêãj°ržŠ}Uø'ƒwoícü–”bÒ§F\UÁÉÙÚöcê7—ö¥Û3«%Vÿ%ÒîÌäÛëÐWú‰µýˆí ×&´á±Rá(Z¯:ÓQÔKÑÒQºÍ/Ûýfýþ£“\$Šzrpû^N±òÍ W•i?ª›Ê£³Š¬ÜÞµ.ÉÕô(ÍÓDÈ3´rm¼™º`J8$’ìS€ËH•ÈZ]& ùX4ª€Á8ddü çÕÿZ_,£‰!ÔMêKþLÇi"+³W%LßG<ãl¢"Dà”e·uµ´-4±1ÔJî-gÁÑ;à 7DÞF‚²Ÿ²d„ ײ\~D’y^Å~@›Á'Dê¹$Õr¬¬Êi ¯ O”6 ¬d·/ 9"܃z¬³œôSX¤ÎŠjÿ¹{ñÊ:¶”Ûq¾ŽÒ†œâ¾ì#®äsÔ„&²²5#ôèË¢Qvµ.Û7‰' *kÁ…éÏ)´ûðTz÷/(ç­$ÒIÓ}‚Q¥û&£á¡Bn+ÈÅÃ|›qÛÖLý87ûìÊŽ”›‚Tè#Z‹OoÛW|˜ÖÔƒŠŠYþ FNQjèèã5ö¯ÉQ½=XÊ )?ã[ÓFe _jQ~‚:s_ßÿD_^ƒ†¤¶êŧ˦‹d¯3f~Ý{² ¯HJJ*Û¤q­H¬NþLOQÉmŸÛå…צüx2¶O Iü¥«8I¤¯J*<ß[RU³kôÍÆZÛ’j5æÆ+¬¸‚M×,-ût'5yËý.¬i¸h R+Hà ¦”²Æü»6#'õ%uFîÞLA'n»äÐ#iªÍ ˜K  )%pjì#¨åæœ_Â3Ï<GKT[²bšXf^´SÚÓoà›•òO=NøöÈëàwÑšè­.B©Oä“Iñ’ŠÍ¾J¬!ÝèËíÀ8þëÁ­þU"à Õýò¯÷3 žMj/¾òf`žÿDWWš5ÐO…ѤНcäB3ù ,r-¤³Á˜­Ù‚‰=©&˜ÔdjŠq®2Ûí@|ˆýÜÛU]ÖG,’»…,° …°Òµð cn(á|XhM€®‚Hh "Hˆ²)e—Æ Ó|›ª*Ï=&óL(«Û8µj¬õ¥ÈKN2åœqÓ{_Ó—áZÁÆQÛöˇÃðoN|Â_¹6ãi®KNMΕû=5ƒË¨¶Nõ#mðÓJI~¡5˜¾ìõbÑá[^ÅýÉÙëÓ–øF@Ž…BÑf‰Enfƒ¶HbùB@rzy¨Õ˜†œ Ü¿wG¡„xñÎ1–ç'¶Kƒ_¥Z7)Z|YèœùG-ººOíû¢^KR Uyð1œdðÎjqsÝ8íc¨´¡¶i[é!ƒªÔÖTâsžž§öê7ÉŠÜåõŒ-ya-),ÜLéÊIÖÄ’í‡Ö•µ¶ËƒÑÊ3-HŤÞ_Ftå' ¦ÙF­:ªî‰ƒq•·J—³2Õ‚_¾ýœÞp÷gª éB)F¹=i(¢–¤#Ì—òyµ“rQ‹n¹IŒ4šÌ’I/‘ƒY?Ø›®þ©w#ZSr‹õÃ*nm:~«‚Z°Ÿ_“whá²*t6øwƒqÒœUÆv†Õè¶õF#)Á­ñµåã'I¦ûDÀ(íf–^|nðe«•&FÒïø3ºÝÐ(€É6@ˆz p̤ìÓª.è S÷Éy“$©¡—ú²ùfUîÁ©õFÓµÁ™<¤)0/‚ì•IóL™YX ~ÊÀ™–òŠÓäo‚FßhÒ@žy5xì—adž_ hý1¿L „xA~‰7Kjˆ-ø~$°4ë‚¶º¦ý?@÷ Ý»¡IPçÈìhÛÈçÈœãLâ®IÇûáÿgz~N3¸k&¿» %n‰Ç<®QÎ{uSMÕ®“”w'žýœ4£Ú§ðVjpzZŠ8û±“ÓúxKN*ýØ<ÓÑÕ•&ïÙ늤­äÒËkÙQ!Ø`«, Y¤[PÀ* ¤K€6XòfÿöŠiôu#,¤Î5²Uw“;K°œ7B¸~Š9êkÆ8ôµ¢ù5N¦³äëI Ž N¦åù--MÒ’å.ÒpOºø =5¥Ï‘ª#q\ßà-ÊjUƒµ`(ƒ+–ÙÎ-ÎnM:\Ôýy(­‘ÈF6¶×žÃV3ž¥èëÿbÕsÓŠ„A§_Vn³äuŒ/¶z{#ݼ°5(§«2¢àî8ôtlË@eë¥-¯“+EoútÙ·Ë÷$ÌKFIÞœ«ÑGXî¬Õ–l"¥_zVk–A}Þ‰[ð5.ŸòI5Î@’}’O9 òUØ5ìlˆ2þJ©Ý“/ €?õ§òÍVR3+z³¯,y’"–¸6ŒIxí~"¢ì¨­—@IY. *@ë LµÁB²k/“+L;cL+,„€p=à†ƒ€&k “/ä¿ ˆ‚|¢/îBÊ3C’OÑ~fa±8þ£O´Î¶sýCKOòñµûNÓžä¾×Ï£¼?b¾hšRUÈ,I¤Ð³ŠFuk:·`j‰’& \‡,ˆ, ‚àAÙß$ÀSOƒ R©&™…=”¤ÿ&ŸÌÍ+IòÀÛ{ª†ë£)%]æ£ì Y&f)Ó¾ÉÚ Î«OíulÒ¶²qIÏõ ·ˆª=²¤ `&ÜU¼#yôp×Ö«Œq™7=X«ÂÉÔ碟ÓMòtHQ]üŒ– ‚|.HR±ZÍ $E\šËªB•‘Z š,PYZiIV,ªžÉÿV_, ðm<Ýòø4³òA¢È•> Ë>—Ešà²QQ>Šß‚m.M·coÐË,ú ÛT’Ï \ù2·V^$TÞ,iù—¬r5}€$’òÈ+V…g“.+r¨£VrT—D¹e`’¶4€›8þ£* ÙÚ’èå®’‚~KÆ“X²µ|†œ£8áeÙØœc%R9FnÛ.:g£jðšjQ +E¸Î›q{%Ê:›+ɧƒ=…[¼•¯f¹@ðw%È)7x·eð<„ò[¯¡Û|äš®³|àß d¥'t–F0¥î¹•òù­«\(ÌžÕ…o¢+mV-ø(E§me›Q¬¾|›¢£ 6¢ìéG-imƒ®ðËôÿro˼UݾƒJ?jè5c)êE/Ú²JsÔ{tñ÷ÒQƒó\Ò¤ cªå¢ŸÒTtI˜ý?ìøgj!8Í? Ó®M™`B—¶\ŠTPW¶ +F¿ÞP#A@d?¨;` Òàºà˜7DT³È§ä:²\2_Ö—Ë©¢ëKåš’@e»Ã5UðàVP"¢"ž ø©Â(B]Aßl rjŒ®MXvÆÌöè[é@e*À‚jÑU"" â$ðH£]ƒ]“`ì ò‡ƒ-SF²Li¹fŒâØ¢„Ƭ7i¸£dŸôî·Eò™è³Ï/éëF]K ì5a'€'ÀQ©5O¦ŒÂm=²þN”cR _!ɈIÞÙr¾B¥Å™­Ï<BAP%–$¹emÞØóþ¶þØóþ F*+€ŒÆ +Ù¤°Fwb—!Ku…–I%žÁß’ ¤ÆÌK„(v2[µv»:»èäÿÖŠ¾‚WHÝš.ÿUðú²AËô؃ù;YÃôøŒ•ÿqÖ½•' û'TʉñÈUc“)¯&· 'Ê@ÚÆ@D͡܀,±´ÂÕâÀŸ6Ž—óü’ôÉUŽ> /û5Yâˆ75ýWòÅñÀMÿVUå“oÁBÿk^<*)g("ñD%Ÿ%BIQB¸Te,âò¾^/í·dé®ÀRÉ£{¡üº3ÞI$~à6¨›3´”m OŸÚeG›vVŒít[@[ÃÕÛ‚Û€5»Ùn^AĶ€ni¬šÞ«hvКÈ{-  üšÝèÍdhwÉnô[J€ç©÷i´0Ô¸.MV:Ý '×}Þ¼J‚ÞŠý"¡ 15»+ pfmÓäëHƦӎÚ¿Etfܽš¯AE¿F%:µÙÒŒCM©IÉÛl!‚¥íòi·ä¨Ëvê, ÊðžATcvýš¬”T”cÓäkA¿Ýüà>ºm¤¥òjZQ”vÒ4¢¢« zÊ’”pß&¯«1U,G–kV–2sM½wŒQ¶sÒ“–¤º· -x`Ý1Jù ­xÀÒ±†•\Òòuü´©kj'ÞNÖH¿ëÀnWÈÚh(OaxEyd }w&l?"Ë .J²+ýÀèUXMð諯2$¾´¾XË€Ÿú¯þL¤gVç’tÌñhbÞ0A²DEDDÁ€®’àÑFcÆXµ‚¬‹à Örjƒ±îþî@ÑŸ‘²]c}xxD¸DÖ U ""ôVµT -òÊ×’Lª‹È÷ ›û²X l€ŸI`ã£þ®§ÉÖÒìå¤Ò”ë.ʕڂ\·Ý’Q¼…nÄÍ•i‡h,»@†wÇ”jRð')}’ܸ|•8ì°NÕ¦sœêT¿smÞäç=U§ˆÆë³qMCÙÏKMÅÜù@0×R‹rûk%x:VbZ{õ)ñß³oJ<ÚéÑ5ftÖØÓvº)N1«t‚™"£Œµ«QÆÕbŽ«QtÓivpý?2~^š²¸×~‰(Æ* c€4¿uÝ‹i+g'¥ ûn,Ì"¥'¿-p wRO††ÎONÛkàÕº÷þ@çÇêòލå7ZÑmsƒ¦LãÁ5à>þ¥…Ⱥàsà‚K$ð‡>߀+^ÊßI–|ÝÐmsüÝ&ü Mx*{Šf[f©™ÍäOS¼XÓo³9s·«%ÿ¹‹ì&ëV^70“¼ØSX>ÐXG ëÙeƒHˆ¨+ÐùÁ$4€­X6«‘&±Ðܬ\±ŽK±¯eîvX³Wé“¶Õ ÿ&­{. ^<¼3TÈ –ïEµhs¾<,²\ &߀møÀ“xÁ¥`×f’° Þ‹<¡tZm—ÝÛî@g>A¦ûa VA…g-/¯4øy= šÙúù"¥t§ä+œš¤ RaU{*ù4¨€Îßl«Œšh;¥ìš\fð'ý&îÜKN9Ý%—ÑÕÅIS9Á¸ÍÂ^0±Ià$ßYix(Çc\»~E5Œ,œ§ 8·&«š£µû9NRßÌ_(æØ§5MÕ[;½(EpÛZRJªÎ±uwÈIþågDsMïx:&—dX©ZWuŸ'-]héµvþ CUMagÃ(Û¤I6ü„{§Ï…ѶEqÕ¥OšhéO›1¯ûàÝ©b/%CD(«ÈVR´4)à~±2ÀÕ¯ÀZaÀ¾8Âû¸Á¼”hËY²ÜgwDVí£œ·7m¿äÖêÇ%¹vê:Ô—ü˜9f’²ÕÿRUÔ˜0­ªq\÷™‹¾²+÷t"Á •!Ø”]àAðÀÉÖ±¹yD÷Zû„Ÿ(ú(Ð.X‡l ü žI04Â+`¸@h,´“tO‚MùÀ;È•û&À?¸rPUpD@*vrÖ\Igk:Õ¶ÑJ¥½sÖlÓàå¡OMgŒ_€.€UH›AH4‘6!kÉZ18oãžnEjÀæ¤ÚÛýÇEü˜œRûãÊÍIXCÙ™AÉ4›Fí Rù á-?Ý&qÔÒzmTgxLç©8ÐfÇ()iÇ9LïÒWT c×Ti7^Ç8Å6Ûÿ&“[«^/¹×º7Ž@µc»ö¤ß°Vž‹}”õ¶ã 窫ì¦ÂWª2kϳvyôõûnä¹5)µŠÈ]:Ò[d»h¿OKM>ÚɘŦï-ò{£q}0}w´É´Ì}ÁoÈV×a7\–|»2Þ¾¬Ì®¹R Ì?,«Ø|hº*ÈECJ‰D€XF«Iê;Ôž?¹ŒS¢iý]Lsÿ$ž×¶I…1ô-Ô­”·C%œjÊÉQYZ/Àà£)¬••r<_¢—uÈ·à×=€ m¶°5búWà­Žä »f˜sMðTîÍgÈGŽEðÈϧäH µŽJ½š—Xå…&k(¶¡|¢oeÒt;Q…Ÿ“\Eåšq@Ÿ45ä¨ã¥%IAü£¶<PšJqY‰ÓNjqL¤•"¥DžØQH2Àh¨ˆ?¸Cû¹9Já4Ò´ù:ƒ¦²°'i4ee´Œ^×·£¢ì „*¼¾I°¿¶Â»Y3)EMªXFáûLʤšÅsì>šŒµ’¥ÅXé¨E·Ý3Rý?õo…Ñ·§ôàÔeŸŽJÈ„×Ô›\ºäè¥þæ·3„twÛnÛ÷f´ÔwÉ®#‚ÿÝø1/¶jK‡†QÔ¹eUð3JQh4×Aa nš Éÿä€ð$ø`T4K^€(;F¼°·|Fo"_t_¾~w?ògRídSþ¤ïýÌÌ©ÈUj XËY(º‘I«DÈaù*/ä]ÈR¼`‹% hl, ô é $¡È0+ÁX—cfoîL8ବ‚ä¢ðX@š}”jÀÍän»| —$Ó'%\«&grò[—Ê <’´V€"ª™¿ÁÍÈÒ’])«f¬ç½Yo(ÛÎZ_nèvï8êOn¤d¯8 ]âð¬O:Öi¥(U÷fÞ´b鼃]I¼z‰+a½5h+¥•˜ßÑnh/&˜Ju—H¦nÝWê Ý)#¢–1T¦“Tb Åí—á‹“1/ºÓµ£-¤rúb\š¼¾A­VmòcUÔ>M[òrÔm¸Å+òhZŠVjÎ{©dã/ÔõÛòyÍÞØ¬Š[nÙåSÖËØ¿&þ¦ªÌ¡L©®É(ÝvgM%•5fT÷«Li¥€¦IK G>hh ?n¤£ÓÉ»8É¥«vŽ€iK’³ ò4EjɵLÅ;ô4ÀÕà¬ÊN…&kÉ6­`ÊVŠÐQ4ü€Ù›ä{ « Ô›Z³®70y–MÉ7©*òÌNã$·ÇÈ´ŒFyn¾MFrÈ7ÒÈä3À•þƼ…|”ö;’†€/ÃÉ;òMWAð€Íã‘·äôiD åäù$‰ðOÉSò(Z`ck*ûäÌ’ì¯aFТQ4°²T„€ËXÁ>Š1ºi`hË”ºJ…JðÕ0  3Þ9/»äk%R¿18ï7ðnнyÒS¨IÔ¢MïJ+ ÑÝé©g°R”q5%LrzRµ¹ÚòÍ=XA4“Ç££’]á™p¼Ç(ê'©ºv¼`ô&šÇ9ÕRI²úMÁGs^@è߳޳MR5ÿå¿‘”v‚¸­5%¿!SŒ·AºîÕ4aöîm¬ðot]¥Âä& )ïµÉ§Û9oŒ%q¯få4ÒÏ!VÝÿw}‹¼Ý‡°9ËA«p•?4¶­“…û=8}„×Úû1¥Òwݘĵöôm鹯Ӧ±“œ"ÓÛ'yê¥+‹À=>¨›K …sÜ·9+ögOQJVsœ'Õ2Š’ml¸öVuê”c,5a±Áaߣ1œžù5%¬ÿj ¢nmã2ô£,ÞSÁ§ F–çD¿Mtܘ†¥ª–'«Å·è_éãîËN?MÔ’¿ õ–ç.Ha¥ºRm_B¢´8%èŠË5~вľ >@ÂXà«Ñ¥Àœø'fŒÈ !›7AY.üdÓ3Ù¦¯RXí™›I¯BÝjÏþOü„ÐÂðj€#ò J,WÁpJ“ª^¬h ü ¦ÞpiºxEŸe/)3I*èÍøò4€Ò]Ð5è¸ìËv˜ k(Iò€«…aÈðÅú/‚Í–oì‚É P.8Á¢\‘|D튺"$eÏ¢µæ…ô/ ü!KÉ9x.È Ë&‹û˜”h˜g¤¦—LÏõ!V·#²X Ž_V/œµVŒê(.VNI¿¹6½ÒRÛ›H̵mRM›Zq^ 6ÞqÂÇÔ¬<_6“R]sƒ{UÜ—ò* {OwíãÉ´½™ŒvÚèßA\ä¾ålÒI¦ëZ)á–r²Q|G¾ ™^y“Nr1XÃFø®M8ÄÒ~86øàÃŽcÇ‹…n\ã¡r$¹" 3Ñ_±\ÍsÀµ‚±|tD@ ;g7É«ú“ÿ“ÿ!5’_êêÉÿ’“Ê]!ûDÀØ@ư •”?²²´Ù6|,W† œßäoo8%ðÀm{ Åp9&ý®Ì[®߀5€í|¿V íx `ieÎàFU–|<V9ò ?%|Ž Óò5í—銷ËDâ« 6ºÌ€Ñ¯l«ä ]2yä È,§è©ö€Õ䂕޵è0M~Éz ªƒ~€ã{š”—îg^J6ß‚dþƒ ±ìKƒ@øäŠÈ¸¢&QÀ¯,˜Y~H/Á' }•‡DP‘eÿ`ùB°¨L•äƒUEÑ›(qàì¬U<ª±BÒDD]“Àp)±°]…’`$E`O2Ú^@щ-ÉÅðü ÙZž× PϦanŠiÁË6wµk&V¤[tÂ`ÑÓp¹>Y¨AAWä¥8Ç–*K+°,²¿­ r±9©â äš2åØÖÏêÿÜΛRVcWÿS/–2uüŠ;®Ä^Ø|tQQ2ìž8²ù t+€4‰³>… 2ùüPÈ 6p]  èº€qH­yí @ÚÐH Z+F{bºÜ’h)&· Ý’¬‚]€©y%.p\™k5¼·ŠcYr´ÁKд *Ýèw|  '!Ü£U‹r¼·Ú²‡–nü¾Â¨@®».Hšð†Ép\°+Ï$ØÕd9@Vû.ÀÉv7÷Pÿu•e^ HÛØ 2Ñ(±eØkÊD¤õ¥òqÓŽ«rÕrzeÊ’“}„ÆŠNä÷vâ‘aXÛ–[k³]° hÚàËà ¥h\hWˆ3´šBàÿÙtherion/samples/morphing/sample1/cave1.th0000644000076400010400000000143410566717270021467 0ustar userAdministratorsencoding iso8859-2 centerline calibrate clino 90 units clino compass degrees data normal from to length backcompass clino 1 2 11.94 306 128 2 3 4.54 200 133.5 3 4 10.91 319 140 4 5 6.32 10 95.5 5 6 15.84 97 87.5 6 7 4.09 137 139 7 8 7.35 105 75 8 9 12.91 23 117.5 9 10 29.53 133 60 10 11 14.54 44 125 11 12 16.01 89 105 7 13 18.78 257 117.5 13 14 11.32 342 88 14 15 15.05 270 95 15 16 6.95 150 75 16 17 3.87 94 80 15 18 2.6 0 95 18 19 2.86 278 120 19 20 2.9 326 100 20 21 4.71 57 78 21 22 8.41 332 114 22 23 8.69 347 67 23 24 5.05 24 94 endcenterline therion/samples/morphing/sample1/cave1.th20000644000076400010400000000102110566717270021541 0ustar userAdministratorsencoding utf-8 ##XTHERION## xth_me_area_adjust -128 -860 736 132.0 ##XTHERION## xth_me_area_zoom_to 100 ##XTHERION## xth_me_image_insert {0 1 1.0} {0 {}} cave1.jpg 0 {} scrap hlinena_s1 -scale [-128 -860 736 -860 0.0 0.0 21.9456 0.0 m] -sketch cave1.jpg 0 -732 point 347.0 -170.0 station -name 13 point 360.0 -40.0 station -name 14 point 21.0 -301.0 station -name 11 point 134.0 -298.0 station -name 10 point 424.0 -629.0 station -name 9 point 471.0 -374.0 station -name 8 point 533.0 -301.0 station -name 7 endscrap therion/samples/morphing/sample1/cave2.th20000644000076400010400000000662310566717270021557 0ustar userAdministratorsencoding utf-8 ##XTHERION## xth_me_area_adjust -128 -860 736 132.0 ##XTHERION## xth_me_area_zoom_to 100 ##XTHERION## xth_me_image_insert {0 1 1.0} {0 {}} cave1.jpg 0 {} scrap hlinena_s1 -scale [-128 -860 736 -860 0.0 0.0 21.9456 0.0 m] -sketch cave1.jpg 0 -732 line wall 279.0 -25.0 292.0 -35.0 309.0 -48.0 315.0 -57.0 321.0 -66.0 331.0 -78.0 337.0 -81.0 343.0 -84.0 354.0 -96.0 346.0 -103.0 338.0 -110.0 341.0 -120.0 344.0 -127.0 347.0 -134.0 344.0 -142.0 344.0 -150.0 344.0 -158.0 344.43 -160.14 347.0 -170.0 353.0 -193.0 351.0 -208.0 366.0 -217.0 381.0 -226.0 400.0 -225.0 417.0 -234.0 434.0 -243.0 449.0 -257.0 459.0 -269.0 469.0 -281.0 482.0 -308.0 482.0 -308.0 smooth off 482.0 -308.0 470.0 -328.0 472.0 -340.0 474.0 -352.0 470.0 -366.0 466.0 -377.0 462.0 -388.0 458.0 -403.0 450.0 -406.0 442.0 -409.0 433.0 -411.0 410.0 -407.0 387.0 -403.0 353.0 -397.0 338.0 -392.0 323.0 -387.0 270.0 -386.0 256.0 -378.0 242.0 -370.0 212.0 -352.0 206.0 -346.0 200.0 -340.0 191.0 -320.0 177.0 -316.0 163.0 -312.0 153.0 -298.0 134.0 -298.0 115.0 -298.0 111.0 -299.0 104.0 -306.0 97.0 -313.0 90.0 -321.0 80.0 -309.0 70.0 -297.0 66.0 -284.0 52.0 -284.0 38.0 -284.0 30.0 -294.0 21.0 -296.0 smooth off endline line wall 554.0 -231.0 550.0 -241.0 549.0 -249.0 540.0 -250.0 531.0 -251.0 519.0 -257.0 508.0 -252.0 497.0 -247.0 464.0 -212.0 450.0 -207.0 436.0 -202.0 419.0 -193.0 410.0 -189.0 401.0 -185.0 395.0 -182.0 391.0 -169.0 387.0 -156.0 374.0 -142.0 374.0 -130.0 374.0 -118.0 377.0 -119.0 379.0 -111.0 381.0 -103.0 381.0 -95.0 381.0 -95.0 smooth off 394.0 -84.0 394.0 -84.0 425.0 -87.0 438.0 -86.0 451.0 -85.0 463.0 -78.0 466.0 -68.0 469.0 -58.0 469.0 -37.0 445.0 -37.0 421.0 -37.0 408.0 -46.0 392.0 -42.0 376.0 -38.0 354.0 -41.0 343.0 -32.0 332.0 -23.0 316.0 -1.0 316.0 -1.0 smooth off endline line wall 529.0 -431.0 499.0 -417.0 499.0 -417.0 493.0 -412.0 503.0 -396.0 513.0 -380.0 515.0 -373.0 518.0 -356.0 521.0 -339.0 517.0 -320.0 526.0 -314.0 535.0 -308.0 530.0 -307.0 533.0 -301.0 536.0 -295.0 539.0 -295.0 551.0 -292.0 563.0 -289.0 572.0 -287.0 577.0 -276.0 582.0 -265.0 595.0 -256.0 595.0 -243.0 smooth off endline line wall 17.0 -345.0 42.0 -358.0 47.0 -361.0 66.0 -362.0 85.0 -363.0 97.0 -351.0 106.0 -346.0 115.0 -341.0 125.0 -326.0 130.0 -331.0 135.0 -336.0 151.0 -341.0 157.0 -351.0 163.0 -361.0 181.0 -378.0 189.0 -386.0 197.0 -394.0 208.0 -411.0 229.0 -421.0 250.0 -431.0 270.0 -450.0 270.0 -468.0 270.0 -486.0 268.0 -497.0 277.0 -510.0 286.0 -523.0 277.0 -545.0 282.0 -560.0 287.0 -575.0 294.0 -596.0 301.0 -606.0 308.0 -616.0 318.0 -617.0 331.0 -629.0 344.0 -641.0 366.0 -652.0 366.0 -652.0 smooth off 366.0 -652.0 343.0 -655.0 350.0 -672.0 357.0 -689.0 374.0 -705.0 392.0 -701.0 410.0 -697.0 423.0 -694.0 422.0 -676.0 421.0 -658.0 421.0 -639.0 421.0 -639.0 smooth off 421.0 -639.0 449.0 -635.0 467.0 -634.0 485.0 -633.0 507.0 -624.0 499.0 -599.0 491.0 -574.0 480.0 -517.0 480.0 -506.0 480.0 -495.0 476.0 -480.0 480.0 -475.0 484.0 -470.0 491.0 -444.0 491.0 -444.0 smooth off 491.0 -444.0 514.0 -453.0 526.0 -458.0 smooth off endline point 347.0 -170.0 station -name 13 point 360.0 -40.0 station -name 14 point 21.0 -301.0 station -name 11 point 134.0 -298.0 station -name 10 point 424.0 -629.0 station -name 9 point 471.0 -374.0 station -name 8 point 533.0 -301.0 station -name 7 endscrap therion/samples/morphing/sample1/thconfig.10000755000076400010400000000042611245530352022006 0ustar userAdministrators#!PROCESS #!FILE ../1 #!TITLE 10 Sketch morphing #! #! Original survey sketch: #!IMAGE cave1.jpg source cave1.th source cave1.th2 input ../thconfig.layout export map -o cave1.pdf -layout clean -layout-scale 1 300 #! Image after morphing: #!IMAGE cave1.pdf #!CLEAN cave1.pdftherion/samples/morphing/sample1/thconfig.20000755000076400010400000000031511224410742022001 0ustar userAdministrators#!PROCESS #!FILE ../1.5 source cave1.th source cave2.th2 input ../thconfig.layout export map -o cave2.pdf -layout clean -layout-scale 1 300 #! Walls after morphing: #!IMAGE cave2.pdf #!CLEAN cave2.pdftherion/samples/morphing/sample2/0000755000076400010400000000000012270034352020115 5ustar userAdministratorstherion/samples/morphing/sample2/cave.png0000644000076400010400000003140410564732310021546 0ustar userAdministrators‰PNG  IHDRQ8 w¼PLTE FHEÿ‰‹ˆ½¿¼ÎÐÌýÿüˆš>dtRNS@æØfbKGDˆH pHYs"¥"¥/dntIME×*L-¼ IDATxÚí}ÉwâÌÞž³Èñ·m®-ƒ‚¶‰s’»…O míƒËk–—m¥TòVºÐ®?;5JURiÂÜݪó¾nƒ¤z~óTýêW¿úÕ¯~õ«_ýêW¿úÕ¯~õ«_ýêW¿úÕ/iÅ‹8ŽöûpFøêwâ\ë2î1ø6ôÂèÌr¨á0A/Œ¾ô|ð è18Ðî183÷œ™ \4ê…Ñyu@E>8—=¢­–‰·h…ÐÎY}`†0|¦à‘}¿Ï5k‰7Z¥ÆQ ‚(ã0íýS¥ÀB;¼ývÀbNøäÇNñ§D;üc3£ÿ÷;Ý(.^,4pŽF¸—1p@°Â?Â]¯ÚŒ……FÁqT²,…¢^µß­­‹Á1øà2Ö­~¯Ûl×JìÏ3‚øÈÍa5?ëMÓûµÌö|3DƒÙ'i—#"+¹ëÙ qÈ*´ U#tÞ¸KŸ½oÄšõlÐH³syË_Lkpç,.ÁÓÂØ×0ï<ÓÈù ‡ µêX†«œÐ|È p¢¿ÂN/‰Z†²µ4¹< •ð_Ð}üÂw~ÇPô†X'=!Àn²[0ŽÚ€pGßm7ýEƒë‚ÎÄ1Žîü¸ädÕÖ“AÅÏ%£á•aŽH{eÐfíä˜Å»_Ï ôü.¦û]¼âïÆšÙï!èæÈæÆQ*1BÔªæKn‹î(Ý;ñ4¯baíz‚參2B}Ä> Zè3–<`œ9ØGè!è.‡8?)ŒP‚3ÄjaÃ(†iLþáÚÀéõñÔ1ÂOí'QG€ÚE–3ÜÅB\÷$‡2F˜UüMóI8Ä”úŸoÄ?ùÌl¢~ö!$J% ÒùØ¢Š¦PøÅ€)ƒ~Ã…›F‰9‹·í^ ÄF`q›2Tú ¯PÅr:­·l ‘1nÍPê¯Wi¦ Æ=5\µØØ‰Ð¾­ÔšTƒ$’赇 Vùm©{ä4½hK|‚ÿ ¯´æ<:„=ƒë‚O¨‘¢täÕã5±©"FJ­á½›}¼ë!8Ì+PÍS¬ªœ¾V<$Gãq”®…$ê!8 XÎoVÃ˜Š£15cB2Á€º²!q—m‡3Hý€„hÐ ¿6s‡T–ö4)dª°aä^‰øÚäV´¿aX¬[Jõ#^ÄÅÒeá/¥ÒˆH}žKÞâ§(2Kr–Í8ûÒê6 ™FR°"È겜¬Õo&  ¹š?ŒFcV.n™ è3ÂÇ" Âd†O]„~¿›  †Ñ¬]œNŸÕ'æO Ó5a€#_×F¯ðïÿê7¼AÑÈ)ºû\ˆz¥Óåkäoz“¨Pá rÆ}¯ ZÃaköûì ûcµ:€€„ÄoH‡‘Õ˜4SÂG,ÕCÐ`4ä½RÏ,ѵ[í%Qõ øˆ1°©×œ°É`»ï!è È)N..”9£)ŸBT²a7A]!pA[+ËvQ94%“ˆŠìbÕœYχZ©nÉ?ˆn5“ˆÜRß *R=ttÖ°>8¬ÒnT8Îõ§wcƒ:>æâñÒÞ0m³5åŸkØç1ÀƒÖa£ÕÑÙàªÏžu Áã³AŸ=ë¹;6D¨Ïžu„¢ã²Á3gƒ^µ… ^í>Møz6è1h§ŽI¿˜äû‚v,¡¶"ƒ{-ô¢¨-yý¡м¥Ì}‰o'9Äj$º­­¡ÖmÐ×—vC@ _ï ûú Ǭ²gƒVHEÑ-6ŸæŒlTF÷AϪÞbß~FmmšEP•A4Ó³Áëw»~ï©X_ öŽÈÏ0(Àf¸bß³AK 9’ }×9Ѓ,á\Ìô²­×53À’ ‘šAÜvlQˆôëúeÔ6ë¶gƒFØ™‰­îy½_°R6~dO³ƒ^Q¡Hò¹gƒZ¢%?È,EèÀm= É$"#•ëñ=ò 3ƒ·¾§}h0ï6è!(Cm›S¶³íºpO”EÓ íÈ‘ß~¼rÜB/¹ÍN}ÑÌ Á /Üî7^…`ëQY’šfc„úùÌÑ Ol=³\@Œd,¦Ë²‡ä箇 ´˜ ocñÁŒîNmÈ÷#Ñ+çJYc%Œ”ö’¨`“FXq¶žEáþ¢Ä|«*ƒìí««’ÅZ®HÚ÷6Q8í0 äÎ¥S;ï%Ûs=nŸ"ޑܳAÁ3kB’Q Œ_ظ-V,1tõÃc á¾çÛÞ&jž¨ƒ€pÀÅé,×dNû•ƒ¡oØ)‚@Yÿù€v¥8º%6­všÅ³ú¬ÑCðiþ9.Í(B©‘H+Š¢v\K¿õŸ‚ TR’:kPÁj¼TH¢^— °[Œ9ÀBÚ²‹µ£ —ö{0ÿx³9vÍhÛ¾>u©²Ák_IñIJ_Œ‚À16„KøÈE6PÕóÕ¼—DŸ‚à;Q!C™Eöžµ>(ĉö=!ˆÙ ªtŠœêÙ9¹ƒ¼ï%QgÞ%\·STÍÒ‚jœfBO Ó.•×jâó¹7KPäÂüW½OöMú$qÖYjú7{SÇï¿Dí\Yó’ž|Ûvl›¥mÛJ-3ÀfŠR9‡ü—Ÿ=zùi¿@Ðò ÿý…ä0SóîÙ4RÓ\›C“¬Ñ&= åp8äÖ‚OBÀ&?14~˜”®G: Š;ËE/µ>.Ý÷å'0ð‹µ\ã6Úä/‡àò˜d‡ }9£Þ{Ã,q“ü­\êîû3äü`(©¯¿xVbJa3¾´Ñ‡@ÐxrG´õ– Þ™<˜Ïÿ[MÏC x÷?Ï)ò`ðö¯ƒ ®† •IAXÉA ø—ê tþéPiM»_kfÙýUïþ !0Û÷åü=&Ñ%Š› ¸<vK‘Ä«¿¥ŸxA§„€­i“8 ÅoÉiàûó@À܃ LîXðzTLÛÐ&џΗs©vís„Œeîõ#ã9ýÛjê¨Úk† >~?ÊX–Èȯfÿ7t<]‚ãœF*õ!'àîÏgƒcBÐìÌãn‰¯žþQÄìo§‚cèc+ ¥*M äÏE¬ŒùT ûxu¿lÿw”Èÿü³!@- 8†$rQ²1Fy¹ã<¿óóOV'ƒ "›E±4yíφ > ±ûï‡vDQð&‘Ç,‡@+š•As°hº*?½ÐÈÖ~þ©øºøÄA4§l"M×A¥5ÄìÑUR{U„ÚÇá® ÇD+ AÛG>õX·Ò“?ÿHnòL_õï„®Z«YÒ¿<òèç¦ m ú—@Ð(ž Ô1Ž¡é‹úùgAŸ‚”޲¸êhFé0û»!ð¥úÐÊR¡Î'OZOâç§ïû; ÊËéÁÛ­¹ x~`Š-*’~¤ZŒò²D»Ü¼D‹T@çóWÞô¢ë˜Û6.ã*ç¸v¼îH¤hð/à- Þ}@eÌûmÖðŽRƒËòé3ФجH# ¤‡WÅG.³Ï柣÷Š‚£íX-Ø?Ï$‡:BPeÀ¼¿ È\4æÿ*$T¿3ÈÆß hÅiÿ£hàüàÿåý˜ü¨ŠŒ¡æŸÙ²&ŽûytÎñAêøíÐó$H»+e gB ó ÖA!ª?n¿ìE8åÕÉÿëÈœQE~$à§Ì¥L-3Ÿ€üCã%}Îý ¬Ø :m˜Ã6 ëÍâß‚®+l°F幦mTÞĉ>Ø ¢œb—<ðé䑈ú௓›¼¸û_'…`ÿœœ ‚UbÚæˆÑL,õG5VQz ä˜ í3Cšj‚Åoÿ‡€€Ú„oiVo‰?%¾ûë¤ÀŒœ94‡CÇB(!gk“4EmìáÎ[ ëyUcÕ:q‚ö*ø`d0%HÙ·ó?P#Ì€±ö'…@=ŒÂ8ò¼¥¬Gà6ŽÉ,Ô à$ß D;^œ¶§íÎþÇZü 6)€V‹à{„ô>§ÎשãhÔæUŽYªþm8çúç!Ùî×*=ƒË4903·`sÃL>6¦or“ þÊE¦t¶6'[ EÔ2tÞ^°Â9&ß’E€Àõã¯]–†ÜÃp÷°¾¡+ik–ýl©[€j#0- €ãé¨câò³šÜ*NZÖÖ@iß*«¦æP"o¶±?»C u j!ˆ<1½P‘ç±IÇ^oº çÝyÁ!DÂì‹¶dòvj!35Å=ì½öüÛìgu‡à1éÁÔ4M‹^5[ qijÕl§â9ù}¢ß²@ÌOø«rËhNƒO] ˜Z”zÆà‹Þmvý©Ùá:äÃÏ®nA¬?­µ 0‹ìvi³CÓÐ;ñ<©­5Z³ÛSèÖjGµaUð:+ð+–Ÿ%—”^ÁñÜHÄ2óÁ‚@2sâ [Ú4b u’K±G~H|B”ðM=ò_£aX¹±À£W…ÀvìYl¼œÎ¼1Jíš±”ÈvNÁàÙäl0ÑÚv&IáÒ2_Ï©‰Eù›ó˜$€ïÅð>`û”ûc@ô‚5f p50½V´Ë6j·ƒ ‡ ¤—RládiÓtº1CžÞ«ä€^N Á9nÚ½ÖÄê"›Þ)!œ½#­8QnXhnëÒ ëbÞ°`~–Ú³à2ú=E.#í}[É”‡íòâÂ[bÛ8à7Z93”¹¡Ê&ý2.±y¹bw™{Z˜öÌa:l=zOX¶× Š0‚% €6³èà P['ôþ¼_Y˜3€Y¼“þÑÄÆ Û›ÝT6~ã ç†Âe¹§†à‚&1°ïްÝ0SšŒ›ÃÃ÷ÅK±wOéûiÂL 0wo'µæ%ÔÆK[¶ËR= 69Òj c©Ê ú:ˆFv0{3§å<@ÙáµDÕÄ.B•3§êI*z­àÖÆK[¶ËY@ÀÏ“P`ÑUãä\ä›*úfœ‚ßÀÉ¿xŽ5eñ¾G‘!iʪgƒA¥)sœaŸÅóƒs³«þíþä\’&ÝX±E/…¤\„Ý `ðQŽP¦©µž ¦üY«B輡ôH«jŸóƒPÒÎÉ!¸È“»f½sƉòŽ‹Ò¢»ïH"Çvweá%6~”pê~eéœ(­ò—wîî8”@I ,¨­tz.`l@écU¦VÝ×q®‘+Öh+¨?TFŒHlð~‰(h´¢5®o`³6Dãú$&©©JÊ;4æ¦Y³„…/ÝZíÏ­ÇUþ‘ô %íÀ}ŸÄî7„•[„“T¼ãý#ÊOTƒÔûÐb GÄk5Z­É{üHHh%ÿ· \º‘K›Ñ}蜂 j¾“½µÊ€^òÝ<¨wb˜dÔ妊¾Í 6ÿNÅFÍ Ù7¹Ó+tâL-Kd2†é5 †F7Dq)'è9瀻u§ÌÑ.x¥ûYrx3-ž¶ ‚õ1ñ4C~à›E9±7’þ³Lu›öõQ ºÆñê*õê§ÌTš¿)û~ÀRºØ 1ú'‡ w Üš\°bªèLôq“¥_‹G½ãMLßù’+]ïs½îùœ²?¿}´Š‚ë4­MVé} d›-Ê›¨fCC„‚u çøkGaP6pª•An»JG0YM÷õ>“C$£F’VÝå™…F¦ 9Mµï°5“«ˆYþíX“Ù2+…ÿĬñœÅ²ögàRˆÙ†Ø6´Ñà-ÅwÄÜ$eP(zñ]öi5’ ZiðÆ?®´>‚Ö;Æ‚ÝÐDÁNzŠD¥äõÿ{xÀ× sTª¯/‡`Öx|Çnô 4Ù; ©Q'BªŠ\™?ÍIWTç~ RˆŸm‘}¥ùrm¤ô•¹YJj¡+KiXÿ¿{ê 7GQ¾|þûî×:"7ií'ÔÒ÷ABo@N NQºJZÆr“w»ÚçdþÔÖW&9âs ‰ â<<$*ëgƒ ¶®kRg$8•: ¿CÆõ‹8ׯO¾,ZíòaUzí1QªF|éúï7ÊŽS] QIõL‡‹/—DL~'Õw”Å!ªÃ—P=ÀšV‰OeÁK,š aƒæžša®Hh·  jë1c‚Ý“b“û3AÀ$QM´4´-±·Ö¾f0MÉ®Ä^M=<ü“ì<)‘kN\bWÀ6С­M¿¬-žÿÍd¿ìËSêê_+øz6x¥†—÷úØ·/d)C"ÕÑÁ-(ܶ€À"ö‡í>ýp%±÷ȉ å= 9LÈ]ç\ ePÐ]åÔ±ªÙbâù*IqoŸŒÇ†ê‡‰übZíÀêr£c¤ hÞi5Â6’5({È{)íW9­ð°3Rô YòŠ£Ûznäp V¼õ“Zøn“[©Óúd®Ü¿cáѾLÖhTö#§Õb‹ aM°±ùebŸ ñ¾£àH¹3}¹á›£•–`ÃU"Kv’ñÎr+æ]²Ö×ÿc×-­¥T‘˜?PúY³2øú ø‹H"1,ûZÁ[w‚ ­ð õ±>'K™—$ï”Ñ1SÂüqïów 0DS¬ …L"ÂU3e§hùOZ;Ëêç4I7ü7VN4²›r'`1o¢ˆ– ÷ŽÁu …@( ¢í®Id“A°+œÜ 0ëŠmî†Tî I÷ðíƒZ•îÆ z4d:È“/4½,†—ìZ µ:"P åÈböû³ ¬ynlÊë. ù$.ÊL+2VAMò ä)°E¦;Gå,4T>ã&ç,­mM[Ö)]œB‰0¦ûL÷IôC®*Ã"Éìóh<£`ÚÛ´ £RE"GXæw±H¶AÚ•–=~øŸÖQj‰¤Êj±nZ"< k¾G¼˜ecÉU «Ìq*<ýrÇ}ÌHñ¤Ý{ŪZ““Hd/Ûº‘»o²ˆšÍßmætÅŒ¦ û(<#B3+Ìe¬ Xcš«†,é·æÛÊ7©XGĪ’ïðƒä¥)Svi±"©MÖLãã/ø›A )VضRDþL„JË“m²×É;‡~¡QÈõØ~µ«â $SðÎ Ÿ¸B PÓcvà‚fÀ9!Ê€:Táêu=2{¿4ê&/ ‘1£å?J ‹R¹öNðWg r â‘ÌšùK;i.:ôuyüþiÇ™VIDAT霬SÅv‘×ÄÝfPN•ñW‡$)Æ×«Ž²‘¥9´ª }j ½gçG¼§ƒcUV+ñPÕ9.K#û,ePžðòârY¢WBô RAøÓ¸ÐåNƨFPcˆCðLÚ€_ŽŒ@üŠÊÁ-ÍrN͈‘…²k¤§åX’ų— P,ŽPVï;¿_"ThøÇF ìØ„ØF’ãµ¶®Äúâ4lð*êuTk¼5±9‡g©ÅÃ!€Wjêc.÷ÛdŠ- xKŽ@YÀÌÓ}˜[Ï+žÖs"2% fR [¹Q%Ëû)ç±EÜ&’¤¿¬ êÊèÞ“@rŽßwLJ@)™‹ò„'} &;O *DÞè¶‹8ˆ×å¬ÿB)´†Åü›"ýßj!HeçØýø^™?–¢H§à^xz.sÏ@êy¼Â€(Etçè ì‚óáß•"‡Vé¢Z“iAtŒàPf÷dñ.T"<¹’¼åGÿ\F©âŒP~¹l†d»S* ´ZÈxBRºX#Ù†Æ/Mz”ÛOS´“J²ßÐä1rá)D|)£•`|V@JcÉë4³‰Dù½Å³bÙb/`´N<¹ù÷É/”+e'~Y ¹›Š–“8sÑŽ³žrº9€·.N$‰ 2H±ËvP¤´#)ÊœÜ\%þäÜ¢]œö©Œ_Ū lë¿qÙóN ÈvÞmÁ´N9y7÷)œ “ì8¦WS ­Ê'e¹ðÙ ù\+‡ˆüTÆzíŠÝÏrNà]—£ŒÁ‡”¶´ZÙ¤‹µs“”g[øg„àQ_÷*&âŸhÒÛG“É‚(;@ÌÓõ= —bCOèN›N8àí¤tˆ¡ÂÔaEökëdDÛñ;Íú§Âzý^“×$Ye¯xpNþ+•÷È!g}Í6”þK³_h΄èó +%ÑkVoE[;D%A<ä<ÞÓ¦ RTýH˜c1%óx§ˆT‚|ç “Íâ²$Ï í è¬/VšPœš3¸BrãB䇯™CNŽ#ÏŒ¼‹ ÑÚõG‡ã‚{:Î9®Ò&=‚àžJtìnÑ+‘0—6SljßvÄ Gê¾â¯‰ÔJíã- §®à{èVMtcýûáZSÙ7…8)@þã\¡Ô&7Ó̸eÕtKç,/MKéÈç@›¥’»!Ä ©9Š!`‘º qÔhœ(ô¹§F“—0hDç=RÑFš63n °ÑŒý_ l“Iћ﨎)¼&ÑÃÃÿ‰Ë­£Rh òè§!#ö ªuúJ’„ZŸÒáùÛ¶3Ë`$?63òxF‘ŽS0.X]; ßÞ@¸›d´ ¹)b‘t3îãtªÂ¨§Chƒ˜wÑÅÉ$DW¬ãu¬ZŸcMÐ7“>J"8Ü»ªSrïÔÚ)V/G¹/–ä>1D¨6D´ÆæKqzWë`¨ZÅä _ƒ[Åw1g‡&—h¹8â¼>Ó0µDHfôt`9ùïRþ§*ƒ,'›(¹½"5c¸ØÔQsíJÖjw5wPž¶$R©¼,.ÖèjZ,TltN¤ôg#™W1W¯w“;±=÷í»gÕDaÚN]"bÔãÀwÙË e¿ ]œþ¡fß´6Ž‘ËèÞMÄkK!¢(?ÍXiŸ |jthx¹LæñL4¹Þuñ¬5%?,t³>;t¸ñ;hòlœ¼Q^jz¶(„{L-eC•„“Úc©/é:Z‘—ùÄJ£¸ø~CT¹4$²1®åÏÝmÈåO¥2™ ²Yðj‚hà·òè/s2²Ï Ma05Žä¬—$ë§’Z´¸xrÇ[™âÔåHnS*ËQ¼wWç™­°âbQ`·VÙŠbi„o!‘üÓ|2Ñ.€ì3EãHÁ;Xz„ôU§´‰ˆ½-‘Ô $5ÜÄùT;¤x ª‹ÿ¨dµÙš,E7 ×Ò:ÇÀØMS#¯Du[€t’ :÷HÒ$«l¤)‘TäÌTY–dgµ¦þy ¸ˆyi4¢ä>ס·ù=*­ÒTÐÉwä¦H°ŽlTå‚ì%’6ñ‰9&w0§Ekm1 ³2ÀIö‡ˆ‰ü%“Fia¤Lav U×¥‘â”ðfd^DVt,W›’yÎ %úÌ‚J¨}iTT¤”"h'„áˆjãCU=bc?·kÝ]U!ŠeÉð»S AƶR(yqJIÄO&òÒ4._ò Ó–"f… å2”7¾ÙjÀDØ.lL VÞò­Á-Ⱦ¡ ¨…Y0J9sÜèg)•Öö<‚ˆ¹lC¤[“fòªRƨœÊT ]±PÅá4J¼:7™˜6¦n´I³e+ª¬V–Ýì«'SŸ=F”R°\˜dʶ=µÄ9Ð(Ö8NГ¯X‰;ùÁ¯¢Y%±5T|b’ùÌÜDíÎÃ+Ÿæ P¶‰f~lž‚Ë®÷X›@ DD/óv¨3>¥\Ê£Ö‘åƒ<Þ¹7È$øªR‘ò6ù§©š.X8ñfS3°‚5Ö¦ÍægwÍÄ“$›ÅbŽZÅÕн{#i‚@ËR&Ⱥ&¿È"k’èÊ[ •.ÓoG‚§Í<+%òÄlá#âj¯õâLl7^ÚºùzÀ/ÛëÒfå$þ¨µn&X%cõCs¶£0øCÂE2·PÉÖÌéòc7F‚ÞäÆÐó@€]õ\‡.4áѰvxåz—3ÁUP&ÈHauÒú[JbZòÞz^·LeîQˈ“^9ù³ôÁÈ#=ì›#uÎé ¸çdòQðQ ëÒZÒyN%M`³m£( (æuèÎ>¸¦Ø“«Ê€/ýûYÇò% ´'Ó ·ä¸³RÁ š™SÅ—MXn8{Áx]ò•üø+× Ý{^Õxj’O¶ÉÌà3CpÉãll÷h›ÒYh’’lëœó@1»++‡çTÊ3ü}R.±³Ÿr­:—P\œ‹ à©HãÞ“i’¼ÖÓpƈ»˜Ò,ù¿6J²Û½ö&d:õÂ4ïhh.·EÈÆï!ðÕVÞЙ¥hS`ƒð^ʆq8"+õKj"ïÍÄújÇ»fìlz鮯ÿ!¸ä¦Jª!Èhtç™ tm6È˪åÃgx™ t•:ÿ¾9便Cù1Àˆ9¼»ËC—Øü·íñÂó–-"¦¹•ßø oKÃUÆû.uú*f'(=iôy!#RŽÏ¿ \MÐ@ÃP`p5IjæA)Xc]k;}Ëí¹+àÙSá_6¦ÊÆ ±ø±yU¿ ÅEBŽÐ‡¾¼²N7{öâœ`+9Õú¶yZ·eµ$iõè-@Ž8À¢©´= &¯ÑSq¨‘?MûY íÅžmNÒIŠý4NV:Ñ{..…ö4=M´²<˶(‹&5(ÖfÍ=sh™æÌk$/Wº˜î½<}¿6‡¦†¦:‘<2gþ÷DBD–nú¿:À^öc#}ClóTÍg„ŒdëÍQÊ #™´1¢Èôeg'໘ËE,d$ÆFòÈÚ¾ƒAÑTwѽ4Èd@û¯¶E¯R ï< ‘V»o½ÜPR8 n¥ô®Ï™Á4‘y·,(¸Ì>k*>+Å„ÏâQø9ƒ×J&ª©#2<­krq^IÄjêîy0E 2¤¦i²`´8rÊÔŸQiò#?΃ΠšÈ‚bÇ„éÁg©Ä {z5§;y¹¨òU›œìò3‰Òùw€@ðA¸{²h`Q" RF]¡ È9K”vžˆ½Z“°cF¨ÛéŒR!¦Ar\dœDäõm—/\#ŒFöÄÌäìšö¡Åd{Àj&JãvSùÛ•/ã0$÷UÓW,q"Ôhë¸Ut+‡i>÷Ÿ ®avQZØz>{¸°Ô3²0÷†…x‡Dˆ'¶ƒ½ëôìL!u*è§Åí¯s#@ÖPpeëþjKÇÚÅß&Œíb¢·8â➉®‰qïiíLß­S3ÛÅL–­S.³…Äž ²ÁnÞqo«ó_[á— ž¼‡xÙêÆ÷aeÙ‚'ú;[Ê?í›A)eÅ‘- +Å’scר0Lþ'¾ŽÞ,AþrlO9ð¬ÑĘyd ”vrŸ6c&­o ¶G,fYŒ< 9V¢/rQ,šeI&/½¥˜â•}Þ."%SÊ4ÌJFïûY¾üF¦ù Ë5¥lh]™h.ο.u⥈›)€¤9òÓ‚&6–î|oýÛ/‹/^(œËP®3º¸ø^ ÀÜ´ØÉæó¶Qt`úr9¼m¢Ü–ŒVH~ÖÞCí*{ðßcäiÙ|vÈz!Œ—Ä>hÛµWuù¨f æextra points insertion: #!IMAGE cave2.pdf #!CLEAN cave2.pdf therion/samples/morphing/sample2/thconfig.30000644000076400010400000000036310566717270022021 0ustar userAdministratorsencoding utf-8 #!PROCESS #!FILE ../2.4 source cave.th source cave3.th2 input ../thconfig.layout export map -o cave3.pdf -layout clean -layout-scale 1 500 -layout-overlap 2 cm #! And the morphed walls: #!IMAGE cave3.pdf #!CLEAN cave3.pdf therion/samples/morphing/thconfig.layout0000644000076400010400000000042212267525104021616 0ustar userAdministratorsencoding utf-8 layout clean # line survey code metapost def l_survey_cave_SKBB (expr P) = T:=identity; pickup PenC; thdraw P; enddef; endcode symbol-set SKBB map-header 0 0 off sketches on color map-fg [100 100 80] endlayout therion/samples/pocket-topo/0000755000076400010400000000000012050456026017175 5ustar userAdministratorstherion/samples/pocket-topo/demo.th0000644000076400010400000000326111106227306020456 0ustar userAdministratorsencoding utf-8 centreline fix 503.0 600123.000 200456.000 777.770 endcentreline centreline date 2008.01.01 data normal from to compass clino tape extend right 503.0 - 301.86 2.25 1.800 503.0 - 206.82 8.10 0.870 503.0 - 263.70 25.47 1.050 extend left 503.0 503.1 263.23 -26.10 5.380 503.1 - 32.78 -3.78 1.280 503.1 - 44.47 66.36 2.580 503.1 - 57.92 77.87 2.990 503.1 - 116.02 -18.81 1.700 503.1 503.2 67.41 -69.35 3.120 503.2 503.3 323.53 -25.66 4.200 extend right 503.3 - 160.14 -81.12 0.380 503.3 - 211.90 2.02 0.990 503.3 - 74.27 -13.62 0.210 503.3 - 142.73 65.83 0.640 503.2 504.0 0.00 0.00 0.000 504.0 - 252.33 -18.28 0.500 504.0 - 36.91 1.67 0.880 504.0 - 332.75 -69.96 0.750 504.0 - 167.43 1.85 0.570 504.0 504.1 182.20 -35.77 1.530 504.1 - 34.89 21.36 0.990 504.1 - 193.36 61.35 0.370 504.1 - 56.25 -70.93 1.140 504.1 - 82.62 78.13 0.740 504.1 504.2 62.58 -21.09 3.470 504.2 - 154.51 -0.79 0.860 504.2 - 150.03 -73.74 0.580 504.2 - 161.72 71.89 0.510 504.2 504.3 68.91 -7.91 3.870 504.3 - 214.98 14.15 0.880 504.3 - 189.67 18.19 0.360 504.3 - 170.95 -78.40 0.210 504.3 - 345.85 83.58 1.240 504.3 504.4 168.66 2.46 2.460 504.4 - 346.90 1.05 0.520 504.4 - 56.69 0.35 0.690 504.4 - 64.95 4.13 0.690 504.4 - 65.83 5.10 0.690 504.4 - 63.63 4.39 0.680 504.4 - 58.10 7.12 0.680 504.4 - 222.19 43.68 0.280 504.4 - 67.76 -71.19 0.390 504.4 - 37.88 45.26 2.310 504.4 504.5 47.55 -0.53 3.360 504.5 - 150.64 84.46 0.980 504.5 - 143.00 7.91 0.720 504.5 - 212.26 -75.06 0.220 504.5 504.6 69.08 53.79 2.880 504.6 - 329.24 0.88 0.890 504.6 - 233.09 46.41 0.530 504.6 - 356.13 -54.32 0.550 endcentreline therion/samples/pocket-topo/demo.th20000644000076400010400000000047311106241220020531 0ustar userAdministratorsencoding utf-8 ##XTHERION## xth_me_area_adjust -128.0 -128.0 955.771653544 825.551181103 ##XTHERION## xth_me_area_zoom_to 100 ##XTHERION## xth_me_image_insert {277.322834646 1 1.0} {94.0157480316 503.0} Demo_p.xvi 0 {} ##XTHERION## xth_me_image_insert {434.307086615 1 1.0} {655.188976378 503.0} Demo_e.xvi 0 {} therion/samples/pocket-topo/Demo.txt0000644000076400010400000020045311055267576020644 0ustar userAdministratorsFIX 503.0 600123.000 200456.000 777.770 TRIP DATE 2008-01-01 DECLINATION 0.00 DATA 503.0 301.86 2.25 1.800 > 503.0 206.82 8.10 0.870 > 503.0 263.70 25.47 1.050 > 503.0 503.1 263.23 -26.10 5.380 < 503.1 32.78 -3.78 1.280 < 503.1 44.47 66.36 2.580 < 503.1 57.92 77.87 2.990 < 503.1 116.02 -18.81 1.700 < 503.1 503.2 67.41 -69.35 3.120 < 503.2 503.3 323.53 -25.66 4.200 < 503.3 160.14 -81.12 0.380 > 503.3 211.90 2.02 0.990 > 503.3 74.27 -13.62 0.210 > 503.3 142.73 65.83 0.640 > 503.2 504.0 0.00 0.00 0.000 > 504.0 252.33 -18.28 0.500 > 504.0 36.91 1.67 0.880 > 504.0 332.75 -69.96 0.750 > 504.0 167.43 1.85 0.570 > 504.0 504.1 182.20 -35.77 1.530 > 504.1 34.89 21.36 0.990 > 504.1 193.36 61.35 0.370 > 504.1 56.25 -70.93 1.140 > 504.1 82.62 78.13 0.740 > 504.1 504.2 62.58 -21.09 3.470 > 504.2 154.51 -0.79 0.860 > 504.2 150.03 -73.74 0.580 > 504.2 161.72 71.89 0.510 > 504.2 504.3 68.91 -7.91 3.870 > 504.3 214.98 14.15 0.880 > 504.3 189.67 18.19 0.360 > 504.3 170.95 -78.40 0.210 > 504.3 345.85 83.58 1.240 > 504.3 504.4 168.66 2.46 2.460 > 504.4 346.90 1.05 0.520 > 504.4 56.69 0.35 0.690 > 504.4 64.95 4.13 0.690 > 504.4 65.83 5.10 0.690 > 504.4 63.63 4.39 0.680 > 504.4 58.10 7.12 0.680 > 504.4 222.19 43.68 0.280 > 504.4 67.76 -71.19 0.390 > 504.4 37.88 45.26 2.310 > 504.4 504.5 47.55 -0.53 3.360 > 504.5 150.64 84.46 0.980 > 504.5 143.00 7.91 0.720 > 504.5 212.26 -75.06 0.220 > 504.5 504.6 69.08 53.79 2.880 > 504.6 329.24 0.88 0.890 > 504.6 233.09 46.41 0.530 > 504.6 356.13 -54.32 0.550 > PLAN STATIONS 0.000 0.000 503.0 -4.803 -0.582 503.1 -3.784 -0.163 503.2 -6.021 2.882 503.3 -3.784 -0.163 504.0 -3.831 -1.405 504.1 -0.958 0.090 504.2 2.616 1.462 504.3 3.096 -0.953 504.4 5.565 1.305 504.5 7.155 1.906 504.6 SHOTS 5.565 1.305 7.155 1.906 7.155 1.906 6.700 2.671 7.155 1.906 6.863 1.687 7.155 1.906 7.133 2.226 3.096 -0.953 5.565 1.305 5.565 1.305 5.612 1.222 5.565 1.305 5.994 0.736 5.565 1.305 5.535 1.257 2.616 1.462 3.096 -0.953 3.096 -0.953 2.978 -0.447 3.096 -0.953 3.673 -0.574 3.096 -0.953 3.719 -0.662 3.096 -0.953 3.723 -0.672 3.096 -0.953 3.703 -0.652 3.096 -0.953 3.669 -0.596 3.096 -0.953 2.960 -1.103 3.096 -0.953 3.213 -0.905 3.096 -0.953 4.094 0.330 -0.958 0.090 2.616 1.462 2.616 1.462 2.127 0.763 2.616 1.462 2.559 1.125 2.616 1.462 2.623 1.421 2.616 1.462 2.582 1.597 -3.831 -1.405 -0.958 0.090 -0.958 0.090 -0.588 -0.686 -0.958 0.090 -0.877 -0.050 -0.958 0.090 -0.908 -0.060 -3.784 -0.163 -3.831 -1.405 -3.831 -1.405 -3.304 -0.649 -3.831 -1.405 -3.872 -1.577 -3.831 -1.405 -3.521 -1.198 -3.831 -1.405 -3.680 -1.385 -3.784 -0.163 -3.784 -0.163 -3.784 -0.163 -4.237 -0.307 -3.784 -0.163 -3.255 0.541 -3.784 -0.163 -3.902 0.065 -3.784 -0.163 -3.660 -0.719 -3.784 -0.163 -6.021 2.882 -6.021 2.882 -6.001 2.827 -6.021 2.882 -6.544 2.042 -6.021 2.882 -5.825 2.937 -6.021 2.882 -5.862 2.673 -4.803 -0.582 -3.784 -0.163 0.000 0.000 -4.803 -0.582 -4.803 -0.582 -4.112 0.492 -4.803 -0.582 -4.078 0.157 -4.803 -0.582 -4.271 -0.248 -4.803 -0.582 -3.357 -1.288 0.000 0.000 -1.528 0.950 0.000 0.000 -0.388 -0.768 0.000 0.000 -0.942 -0.104 POLYLINE BLUE -6.164 2.222 -6.124 2.242 -6.084 2.262 -6.004 2.342 -6.004 2.282 -6.024 2.242 -6.024 2.202 -6.024 2.122 POLYLINE BLUE -6.504 1.782 -6.404 1.982 -6.324 2.062 -6.284 2.042 -6.244 2.042 -6.204 2.062 -6.164 2.062 -6.104 2.102 -6.064 2.162 -6.044 2.202 -5.984 2.302 POLYLINE BLUE -4.804 -1.528 -4.744 -1.498 -4.684 -1.498 -4.624 -1.468 -4.504 -1.528 -4.534 -1.588 -4.534 -1.528 -4.624 -1.648 -4.684 -1.678 POLYLINE BLUE -5.044 -1.888 -5.044 -1.828 -5.044 -1.768 -5.014 -1.708 -4.954 -1.648 -4.864 -1.648 -4.804 -1.648 -4.744 -1.618 -4.684 -1.588 -4.624 -1.588 -4.594 -1.528 POLYLINE BLACK 6.806 2.035 6.786 1.995 6.766 1.935 6.786 1.995 6.786 2.035 6.806 2.095 6.826 2.135 6.846 2.175 6.886 2.195 6.926 2.215 6.966 2.235 7.026 2.215 7.066 2.195 7.066 2.155 7.066 2.095 7.066 2.055 7.066 2.015 7.006 1.975 6.966 1.955 6.926 1.935 6.886 1.955 6.826 1.935 6.786 1.915 6.806 1.975 6.826 2.035 6.866 2.135 POLYLINE BLACK 6.166 1.495 6.206 1.515 6.246 1.535 6.306 1.555 6.346 1.575 6.386 1.575 6.426 1.595 6.466 1.575 6.506 1.555 6.486 1.515 6.446 1.455 6.406 1.435 6.366 1.415 6.326 1.415 6.286 1.415 6.246 1.415 6.206 1.455 6.206 1.495 POLYLINE BLACK 6.566 1.895 6.526 1.855 6.506 1.795 6.506 1.755 6.486 1.715 6.466 1.675 6.446 1.615 6.486 1.615 6.526 1.595 6.566 1.595 6.586 1.635 6.586 1.695 6.606 1.735 6.626 1.775 6.586 1.815 POLYLINE BLACK 6.506 1.815 6.486 1.855 6.486 1.895 6.466 1.935 6.466 1.975 6.466 2.015 6.526 2.015 6.566 2.015 6.606 2.015 6.666 2.015 6.726 1.995 6.726 1.955 6.706 1.895 6.666 1.855 6.646 1.815 6.606 1.815 6.546 1.815 6.506 1.835 6.506 1.875 POLYLINE BLACK 6.966 2.435 7.006 2.475 7.046 2.515 7.086 2.555 7.046 2.535 7.006 2.475 POLYLINE BLACK 7.186 2.035 7.246 2.015 7.286 2.015 7.326 1.995 POLYLINE BLACK 7.146 2.015 POLYLINE BLACK 7.126 2.275 7.126 2.215 7.126 2.175 7.126 2.135 7.126 2.075 7.146 2.035 POLYLINE BLACK 6.906 2.375 6.946 2.395 6.986 2.395 7.026 2.415 7.066 2.435 POLYLINE BLACK 6.386 1.975 6.426 2.015 6.466 2.035 6.526 2.055 6.566 2.075 6.626 2.095 6.666 2.115 6.706 2.115 6.766 2.135 6.806 2.155 6.826 2.195 6.846 2.255 6.866 2.295 6.906 2.335 6.946 2.355 POLYLINE BLACK 6.126 1.795 6.146 1.835 6.186 1.875 6.226 1.915 6.266 1.935 6.306 1.955 6.366 1.975 6.406 2.015 POLYLINE BLACK 6.406 1.215 POLYLINE BLACK 6.426 1.175 6.426 1.115 6.426 1.075 6.386 1.115 6.386 1.175 6.366 1.235 6.346 1.275 6.406 1.295 6.506 1.335 6.546 1.335 6.586 1.355 6.626 1.355 6.686 1.335 6.706 1.295 6.706 1.255 6.686 1.195 6.666 1.155 6.646 1.115 6.606 1.075 6.566 1.075 6.526 1.055 6.486 1.075 6.446 1.075 6.406 1.115 6.386 1.175 6.406 1.215 POLYLINE BLACK 6.226 1.195 6.206 1.235 6.226 1.275 6.266 1.315 6.306 1.335 6.346 1.355 6.366 1.315 6.346 1.275 6.306 1.235 6.266 1.195 6.226 1.155 6.186 1.155 6.146 1.195 6.146 1.235 6.166 1.275 6.186 1.315 6.226 1.355 6.266 1.375 6.306 1.415 6.346 1.435 6.386 1.455 6.426 1.455 6.426 1.415 6.406 1.375 6.386 1.335 6.346 1.315 6.306 1.355 6.326 1.395 6.366 1.435 6.406 1.455 POLYLINE BLACK 5.926 1.615 5.966 1.675 6.026 1.715 6.066 1.715 6.106 1.715 6.146 1.715 6.146 1.675 6.106 1.635 6.066 1.595 6.046 1.555 6.026 1.515 5.986 1.475 5.946 1.495 5.906 1.535 5.886 1.575 5.906 1.615 5.966 1.655 6.026 1.695 6.106 1.735 6.166 1.755 6.206 1.755 6.246 1.715 6.266 1.675 6.246 1.635 6.246 1.595 6.206 1.555 6.186 1.515 6.146 1.475 6.086 1.455 6.046 1.495 POLYLINE BLACK 6.066 1.875 6.026 1.835 6.006 1.775 5.966 1.735 POLYLINE BLACK 5.946 1.715 5.966 1.755 5.986 1.815 5.986 1.855 6.006 1.895 6.006 1.935 6.006 1.975 6.006 2.015 6.026 2.055 6.046 2.095 6.086 2.155 6.126 2.195 6.166 2.235 6.206 2.275 6.246 2.335 6.266 2.375 6.286 2.415 6.306 2.455 6.346 2.495 6.346 2.535 6.386 2.595 POLYLINE BLACK 6.066 0.855 6.106 0.875 6.146 0.895 6.186 0.915 6.246 0.935 6.286 0.955 POLYLINE BLACK 6.766 2.815 6.726 2.835 6.666 2.835 6.626 2.815 6.586 2.795 6.526 2.775 6.486 2.735 6.446 2.695 6.406 2.655 6.366 2.615 6.326 2.575 6.286 2.535 6.246 2.515 6.206 2.495 6.146 2.475 6.066 2.455 6.026 2.435 5.906 2.415 POLYLINE BLACK 6.726 2.715 6.666 2.695 POLYLINE BLACK 6.626 2.635 POLYLINE BLACK 7.126 2.255 7.066 2.315 7.046 2.355 7.006 2.395 6.966 2.435 6.926 2.475 6.906 2.515 6.866 2.575 6.826 2.615 6.786 2.655 6.746 2.715 6.686 2.755 6.646 2.795 POLYLINE BLACK 5.566 1.335 5.586 1.395 5.646 1.475 5.686 1.495 5.726 1.515 5.766 1.535 5.806 1.575 5.846 1.595 5.886 1.615 POLYLINE BLACK 6.166 1.115 6.226 1.115 6.266 1.095 6.306 1.075 6.286 1.035 6.266 0.975 6.226 0.935 6.186 0.935 6.146 0.915 6.106 0.935 6.086 0.975 6.106 1.015 6.146 1.055 POLYLINE BLACK 5.706 1.295 5.746 1.335 5.806 1.355 5.866 1.375 5.906 1.375 5.886 1.335 5.886 1.275 5.886 1.235 5.866 1.195 5.826 1.155 5.786 1.135 5.746 1.115 5.706 1.175 5.706 1.215 5.766 1.275 POLYLINE BLACK 5.726 1.275 POLYLINE BLACK 5.946 1.395 5.946 1.335 5.946 1.295 5.966 1.255 5.966 1.215 5.966 1.175 5.946 1.215 5.946 1.275 5.946 1.315 5.946 1.355 5.986 1.395 6.026 1.415 6.066 1.375 6.106 1.335 6.146 1.295 6.146 1.255 6.106 1.215 6.066 1.175 6.026 1.135 5.986 1.135 5.946 1.135 POLYLINE BLACK 6.046 1.195 6.086 1.175 6.126 1.175 6.146 1.135 6.146 1.075 6.126 1.035 6.086 0.995 6.026 0.955 5.986 0.935 5.946 0.935 5.926 0.995 5.926 1.035 5.946 1.075 5.966 1.115 6.006 1.155 6.046 1.155 6.106 1.135 6.106 1.075 6.106 1.035 6.066 0.995 6.046 0.955 6.006 0.935 5.966 0.915 5.926 0.935 5.926 0.995 5.946 1.035 5.966 1.075 POLYLINE BLACK 6.146 0.915 6.186 0.935 6.226 0.935 6.286 0.955 6.326 0.955 6.366 0.975 6.406 0.975 6.446 1.015 6.506 1.035 6.546 1.055 POLYLINE BLACK 5.326 1.035 5.366 1.055 5.406 1.075 5.446 1.055 5.486 1.015 5.486 0.975 5.466 0.935 5.426 0.895 5.386 0.895 5.346 0.875 5.326 0.915 5.346 0.975 5.386 1.015 5.426 1.055 5.446 1.095 5.386 1.055 5.346 0.995 POLYLINE BLACK 5.666 0.955 5.666 1.035 5.686 1.095 5.706 1.135 5.726 1.175 5.706 1.135 5.686 1.075 5.666 1.015 5.626 0.975 5.606 0.915 5.566 0.875 5.586 0.915 5.606 0.955 5.646 1.015 5.666 1.055 5.686 1.115 5.746 1.135 5.786 1.135 5.826 1.075 5.846 1.035 5.826 0.995 5.786 0.955 5.746 0.915 5.706 0.895 5.666 0.895 5.626 0.895 5.586 0.895 5.586 0.935 5.586 0.975 5.586 1.015 POLYLINE BLACK 5.686 1.095 POLYLINE BLACK 5.246 0.715 5.266 0.755 5.346 0.795 5.386 0.835 5.426 0.855 5.466 0.855 5.526 0.855 5.566 0.855 5.606 0.855 5.646 0.855 5.686 0.855 5.726 0.855 5.766 0.855 5.806 0.835 5.866 0.815 5.906 0.815 5.946 0.815 5.986 0.815 6.026 0.835 6.066 0.835 6.106 0.855 POLYLINE BLACK 4.986 1.095 5.046 1.095 5.086 1.115 5.126 1.115 5.166 1.115 5.206 1.135 5.246 1.155 5.286 1.175 5.326 1.195 5.366 1.215 5.426 1.235 5.466 1.275 5.506 1.295 5.546 1.315 5.586 1.355 5.626 1.375 POLYLINE BLACK 4.366 0.215 4.426 0.255 4.466 0.275 4.506 0.315 4.526 0.255 4.526 0.215 4.526 0.175 4.506 0.135 4.466 0.075 4.426 0.075 4.386 0.115 4.366 0.155 4.386 0.195 4.406 0.235 4.446 0.275 POLYLINE BLACK 4.406 0.375 4.406 0.415 4.426 0.475 4.446 0.515 4.466 0.575 4.506 0.595 4.566 0.615 4.606 0.635 4.586 0.575 4.566 0.535 4.546 0.495 4.526 0.455 4.486 0.415 4.446 0.415 4.406 0.415 POLYLINE BLACK 4.466 0.575 4.506 0.595 4.546 0.635 4.606 0.675 4.646 0.715 4.646 0.655 4.666 0.615 4.646 0.575 4.606 0.555 4.566 0.535 4.526 0.495 4.546 0.555 4.586 0.595 4.646 0.635 POLYLINE BLACK 4.566 0.315 4.606 0.355 4.646 0.415 4.686 0.475 4.726 0.495 4.786 0.475 4.826 0.475 4.806 0.435 4.766 0.375 4.726 0.335 4.706 0.295 4.646 0.255 4.606 0.275 4.586 0.335 POLYLINE BLACK 4.926 0.755 4.906 0.715 4.886 0.635 4.846 0.575 4.846 0.535 4.866 0.595 4.886 0.635 4.906 0.695 4.906 0.735 4.926 0.775 4.966 0.815 5.026 0.815 5.066 0.835 5.126 0.835 5.126 0.775 5.126 0.735 5.106 0.695 5.046 0.655 5.006 0.615 4.966 0.575 4.926 0.555 4.886 0.495 4.866 0.555 POLYLINE BLACK 4.506 -0.005 4.546 0.055 4.586 0.075 4.626 0.095 4.666 0.115 4.706 0.155 4.766 0.195 4.826 0.255 4.846 0.315 4.866 0.355 4.926 0.415 4.986 0.455 5.026 0.495 5.066 0.495 5.126 0.535 5.166 0.575 5.186 0.615 5.206 0.655 5.226 0.695 5.266 0.775 5.306 0.815 POLYLINE BLACK 4.186 0.415 4.226 0.455 4.266 0.475 4.306 0.515 4.346 0.555 4.386 0.595 4.426 0.635 4.466 0.675 4.506 0.715 4.546 0.735 4.586 0.755 4.626 0.795 4.666 0.835 4.686 0.875 4.726 0.895 4.766 0.915 4.806 0.935 4.846 0.975 4.886 0.995 4.926 1.035 4.986 1.055 POLYLINE BLACK 3.746 -0.645 3.786 -0.665 3.826 -0.705 3.866 -0.745 3.886 -0.785 POLYLINE BLACK 3.866 -0.565 3.866 -0.625 3.886 -0.665 3.906 -0.705 3.926 -0.745 3.966 -0.785 POLYLINE BLACK 3.966 -0.445 4.006 -0.405 4.046 -0.385 4.086 -0.365 4.126 -0.345 POLYLINE BLACK 3.186 -1.105 3.146 -1.145 3.106 -1.165 3.086 -1.205 POLYLINE BLACK 3.066 -1.085 3.026 -1.125 POLYLINE BLACK 3.046 -1.065 3.026 -1.105 3.006 -1.165 POLYLINE BLACK 3.286 -0.385 POLYLINE BLACK 3.286 -0.365 3.266 -0.405 3.286 -0.445 3.326 -0.465 3.366 -0.425 3.346 -0.385 POLYLINE BLACK 3.266 -0.385 3.306 -0.385 POLYLINE BLACK 3.206 -0.385 3.266 -0.365 3.306 -0.365 3.346 -0.365 3.366 -0.405 POLYLINE BLACK 3.606 -0.165 3.586 -0.125 3.566 -0.085 3.586 -0.045 3.626 -0.025 POLYLINE BLACK 3.646 -0.045 3.686 -0.105 3.666 -0.145 3.626 -0.185 POLYLINE BLACK 3.666 -0.065 3.686 -0.105 3.666 -0.145 3.626 -0.165 3.586 -0.145 POLYLINE BLACK 3.626 -0.085 3.666 -0.105 3.666 -0.145 POLYLINE BLACK 3.626 -0.085 POLYLINE BLACK 3.786 0.195 3.826 0.215 3.866 0.195 3.886 0.135 3.846 0.115 3.786 0.095 3.746 0.095 POLYLINE BLACK 3.686 0.015 3.726 0.055 3.766 0.055 POLYLINE BLACK 3.746 0.075 3.786 0.055 3.826 0.015 3.766 -0.025 3.726 -0.025 3.686 -0.045 POLYLINE BLACK 3.806 0.175 3.846 0.195 POLYLINE BLACK 3.826 0.135 POLYLINE BLACK 3.726 0.135 3.766 0.155 3.806 0.195 3.846 0.175 POLYLINE BLACK 4.226 -0.185 4.166 -0.185 4.126 -0.205 4.086 -0.205 4.026 -0.205 3.986 -0.205 3.986 -0.165 4.006 -0.125 POLYLINE BLACK 3.986 -0.105 4.026 -0.105 4.066 -0.105 4.126 -0.105 4.166 -0.105 4.206 -0.105 4.226 -0.145 4.246 -0.185 POLYLINE BLACK 4.146 0.295 4.126 0.255 4.086 0.215 4.066 0.175 4.046 0.135 4.066 0.175 4.106 0.235 4.146 0.235 4.186 0.235 4.226 0.215 4.206 0.175 4.186 0.135 4.166 0.095 4.126 0.075 4.086 0.095 4.046 0.075 4.046 0.115 4.066 0.155 4.106 0.215 POLYLINE BLACK 4.046 -0.385 4.086 -0.385 4.126 -0.365 4.166 -0.325 4.206 -0.285 4.246 -0.245 4.286 -0.205 4.366 -0.145 4.406 -0.105 4.446 -0.065 4.486 -0.045 4.526 -0.005 POLYLINE BLACK 3.786 -0.685 3.826 -0.705 3.866 -0.725 3.826 -0.685 3.806 -0.645 3.806 -0.605 3.826 -0.545 3.866 -0.525 3.906 -0.485 3.946 -0.465 POLYLINE BLACK 3.126 -1.145 3.166 -1.105 3.206 -1.085 3.266 -1.045 3.286 -1.005 3.326 -0.965 3.366 -0.925 3.406 -0.905 3.446 -0.865 3.486 -0.845 3.526 -0.805 3.546 -0.765 3.586 -0.725 3.626 -0.685 3.666 -0.665 3.706 -0.665 3.746 -0.705 POLYLINE BLACK 3.146 -0.925 3.146 -0.965 3.126 -1.025 3.086 -1.065 3.046 -1.085 POLYLINE BLACK 4.126 0.375 4.086 0.375 4.046 0.375 4.006 0.375 3.966 0.375 3.926 0.375 3.886 0.375 3.806 0.375 3.766 0.375 3.726 0.355 3.686 0.375 3.646 0.415 3.606 0.455 3.586 0.495 3.546 0.535 3.506 0.555 3.466 0.595 3.426 0.615 3.386 0.655 3.346 0.675 3.286 0.695 3.246 0.735 3.206 0.755 3.166 0.795 3.126 0.815 3.086 0.835 3.046 0.875 POLYLINE BLACK 3.266 -0.205 POLYLINE BLACK 2.946 0.415 POLYLINE BLACK 2.966 0.635 POLYLINE BLACK 2.926 0.875 POLYLINE BLACK 2.946 0.815 POLYLINE BLACK 3.046 0.715 POLYLINE BLACK 3.286 0.475 3.286 0.435 3.286 0.375 3.266 0.335 3.226 0.315 3.186 0.355 3.166 0.395 3.166 0.455 3.166 0.495 3.226 0.515 3.266 0.475 POLYLINE BLACK 3.446 -0.085 3.466 -0.125 3.446 -0.165 3.426 -0.125 3.386 -0.085 3.426 -0.085 POLYLINE BLACK 3.486 0.035 3.506 -0.005 3.486 -0.045 3.426 -0.025 3.406 0.015 3.426 0.075 3.466 0.075 POLYLINE BLACK 3.346 0.175 3.406 0.215 3.446 0.215 3.466 0.175 3.466 0.115 3.406 0.115 3.386 0.155 3.386 0.215 POLYLINE BLACK 3.426 0.095 POLYLINE BLACK 2.966 0.115 2.926 0.155 2.866 0.215 2.826 0.235 2.786 0.275 2.746 0.315 2.806 0.275 2.866 0.255 2.906 0.215 2.946 0.195 2.946 0.135 2.946 0.075 2.946 0.015 2.926 -0.025 2.886 0.015 2.826 0.035 2.786 0.075 2.766 0.115 2.746 0.155 2.766 0.195 2.766 0.255 2.766 0.295 2.766 0.335 POLYLINE BLACK 3.126 0.355 3.146 0.315 3.146 0.255 3.166 0.215 3.166 0.155 3.126 0.115 3.066 0.095 3.046 0.135 3.046 0.195 3.006 0.275 3.006 0.315 2.986 0.355 3.046 0.395 3.106 0.395 POLYLINE BLACK 3.186 -0.125 3.206 -0.165 3.186 -0.205 3.186 -0.265 3.126 -0.225 3.066 -0.185 3.026 -0.145 2.986 -0.085 2.986 -0.025 2.986 0.015 3.026 0.015 3.086 0.015 3.146 0.035 3.186 0.035 3.226 -0.005 3.246 -0.065 3.246 -0.125 POLYLINE BLACK 2.546 0.755 2.566 0.715 2.586 0.655 2.586 0.615 2.606 0.555 2.606 0.515 2.626 0.475 2.626 0.435 2.626 0.375 2.646 0.335 2.646 0.295 2.666 0.255 2.686 0.215 2.666 0.175 2.666 0.135 2.666 0.095 2.686 0.055 2.686 -0.005 2.686 -0.045 2.686 -0.085 2.686 -0.125 2.686 -0.165 2.686 -0.205 2.686 -0.245 2.706 -0.285 2.706 -0.325 2.726 -0.365 2.726 -0.425 2.766 -0.465 2.786 -0.505 2.786 -0.545 2.826 -0.585 2.866 -0.625 2.906 -0.665 2.926 -0.705 2.946 -0.745 2.966 -0.805 3.006 -0.825 3.046 -0.865 3.086 -0.905 3.126 -0.945 3.146 -0.985 3.166 -1.025 POLYLINE BLACK 2.406 0.875 2.466 0.855 POLYLINE BLACK 2.446 1.035 POLYLINE BLACK 2.506 1.215 POLYLINE BLACK 2.826 1.135 POLYLINE BLACK 2.646 1.035 POLYLINE BLACK 2.786 1.215 POLYLINE BLACK 2.926 1.015 POLYLINE BLACK 2.906 1.095 POLYLINE BLACK 2.746 1.315 POLYLINE BLACK 2.646 1.015 POLYLINE BLACK 2.466 1.095 POLYLINE BLACK 2.606 1.075 POLYLINE BLACK 2.446 1.415 POLYLINE BLACK 2.446 1.375 POLYLINE BLACK 2.306 1.215 POLYLINE BLACK 2.126 1.095 POLYLINE BLACK 2.066 1.075 POLYLINE BLACK 2.086 1.215 POLYLINE BLACK 1.806 1.315 POLYLINE BLACK 1.906 1.315 POLYLINE BLACK 2.046 1.435 POLYLINE BLACK 2.206 1.215 POLYLINE BLACK 2.306 1.355 POLYLINE BLACK 2.786 1.415 2.826 1.375 POLYLINE BLACK 2.946 1.295 POLYLINE BLACK 2.906 1.335 2.946 1.295 POLYLINE BLACK 2.946 1.235 2.946 1.195 2.966 1.155 2.966 1.115 2.986 1.075 3.006 1.035 3.026 0.975 3.046 0.935 3.066 0.895 3.086 0.855 3.106 0.815 3.146 0.775 POLYLINE BLACK 2.706 1.415 2.746 1.375 2.786 1.355 2.826 1.315 POLYLINE BLACK 2.586 1.655 POLYLINE BLACK 2.586 1.695 2.626 1.655 2.646 1.615 2.666 1.575 2.686 1.535 2.686 1.475 2.706 1.435 2.726 1.395 POLYLINE BLACK 2.206 0.935 2.246 0.915 2.286 0.915 2.326 0.895 2.366 0.875 2.406 0.875 POLYLINE BLACK 1.426 0.735 1.466 0.775 1.506 0.795 1.546 0.835 1.606 0.875 1.646 0.895 1.686 0.895 1.726 0.915 1.766 0.935 1.806 0.955 1.846 0.955 1.886 0.955 1.926 0.955 1.966 0.935 2.006 0.935 2.066 0.935 2.106 0.935 2.146 0.935 2.186 0.935 2.226 0.935 2.266 0.935 POLYLINE BLACK 0.846 0.555 0.806 0.555 0.766 0.555 POLYLINE BLACK 0.886 0.555 POLYLINE BLACK 1.566 1.095 1.566 1.135 1.606 1.155 1.646 1.175 1.686 1.175 1.726 1.195 1.766 1.155 1.746 1.115 1.746 1.055 1.726 1.015 1.686 0.995 1.646 0.955 1.606 0.935 1.566 0.935 1.506 0.935 1.506 0.995 1.526 1.035 1.546 1.095 1.566 1.135 1.606 1.155 POLYLINE BLACK 1.106 0.875 POLYLINE BLACK 1.306 1.175 POLYLINE BLACK 1.206 1.155 POLYLINE BLACK 0.946 0.695 POLYLINE BLACK 1.086 0.615 POLYLINE BLACK 1.166 0.755 POLYLINE BLACK 1.006 1.075 POLYLINE BLACK 0.946 1.035 POLYLINE BLACK 0.646 0.855 POLYLINE BLACK 0.746 0.955 POLYLINE BLACK 0.386 0.955 0.446 0.995 0.546 1.055 0.586 1.075 0.626 1.075 0.606 1.015 0.586 0.975 0.546 0.935 0.506 0.915 0.466 0.935 0.426 0.975 0.466 1.015 0.506 1.055 0.546 1.055 POLYLINE BLACK 0.426 0.995 POLYLINE BLACK 0.946 0.575 0.906 0.555 0.866 0.535 0.826 0.515 0.786 0.495 POLYLINE BLACK 0.746 0.555 0.786 0.575 0.846 0.595 0.886 0.615 0.926 0.595 POLYLINE BLACK 0.506 0.555 0.546 0.575 0.626 0.595 0.686 0.595 0.726 0.615 0.766 0.595 0.706 0.575 0.666 0.535 0.626 0.515 0.586 0.495 0.546 0.535 POLYLINE BLACK 0.266 0.675 0.326 0.675 0.466 0.695 0.586 0.695 0.606 0.655 0.606 0.615 0.566 0.575 0.526 0.575 0.486 0.555 0.426 0.555 0.386 0.575 0.346 0.595 0.366 0.635 0.406 0.675 0.526 0.715 0.566 0.735 POLYLINE BLACK 0.086 0.735 0.146 0.755 0.186 0.795 0.246 0.815 0.246 0.775 0.246 0.735 0.206 0.695 0.146 0.655 0.106 0.635 0.066 0.635 0.066 0.675 0.086 0.715 0.126 0.735 POLYLINE BLACK 0.186 0.495 0.246 0.515 0.286 0.535 0.326 0.555 0.346 0.515 0.326 0.475 0.286 0.435 0.246 0.435 0.206 0.435 0.166 0.435 0.146 0.475 POLYLINE BLACK 0.026 0.475 0.086 0.495 0.126 0.515 0.086 0.475 0.066 0.435 0.026 0.395 -0.014 0.355 -0.054 0.335 -0.074 0.375 -0.034 0.415 0.026 0.455 0.066 0.495 0.106 0.515 POLYLINE BLACK -0.214 0.435 -0.154 0.455 -0.074 0.495 -0.034 0.435 -0.074 0.415 -0.114 0.415 -0.154 0.415 -0.214 0.395 -0.174 0.435 POLYLINE BLACK -0.454 0.495 -0.414 0.515 -0.374 0.535 -0.314 0.555 -0.354 0.515 -0.354 0.475 -0.394 0.435 -0.434 0.395 -0.474 0.415 -0.434 0.455 -0.394 0.475 POLYLINE BLACK -0.194 0.655 -0.154 0.655 -0.094 0.655 -0.114 0.615 -0.134 0.575 -0.174 0.535 -0.214 0.535 -0.234 0.575 -0.254 0.615 -0.214 0.655 -0.154 0.675 POLYLINE BLACK 1.366 0.715 1.346 0.675 1.326 0.635 1.306 0.595 1.266 0.555 1.206 0.495 1.166 0.475 1.126 0.435 1.066 0.415 1.026 0.395 0.986 0.375 0.926 0.355 0.846 0.355 0.806 0.335 0.766 0.335 0.706 0.335 0.666 0.355 0.626 0.355 0.566 0.355 0.526 0.355 0.486 0.355 0.446 0.355 0.406 0.355 0.346 0.375 0.306 0.355 0.266 0.355 0.226 0.335 0.146 0.315 0.106 0.315 0.066 0.275 POLYLINE BLACK -0.034 0.815 0.006 0.855 0.046 0.895 0.086 0.915 0.126 0.955 0.186 0.995 0.246 1.035 0.286 1.055 0.326 1.095 0.366 1.115 0.426 1.135 0.466 1.135 0.526 1.155 0.566 1.175 0.606 1.195 0.666 1.215 0.706 1.215 0.746 1.215 0.786 1.235 0.826 1.235 0.866 1.255 0.906 1.255 0.946 1.255 0.986 1.275 1.026 1.295 1.086 1.315 1.126 1.335 1.166 1.335 1.206 1.355 1.246 1.355 1.286 1.355 1.326 1.375 1.366 1.375 1.426 1.375 1.466 1.375 1.506 1.395 1.546 1.395 1.586 1.395 1.626 1.395 1.666 1.395 1.706 1.395 1.746 1.395 1.786 1.395 1.826 1.395 1.866 1.375 1.906 1.395 1.966 1.395 2.026 1.395 2.066 1.395 2.106 1.415 2.146 1.415 2.186 1.435 2.226 1.435 2.266 1.455 2.306 1.455 2.346 1.475 2.386 1.495 2.426 1.515 2.466 1.535 2.506 1.555 2.546 1.575 POLYLINE BLACK -0.754 0.355 -0.714 0.395 -0.674 0.435 -0.614 0.475 -0.574 0.495 -0.534 0.515 -0.474 0.535 -0.434 0.555 -0.394 0.575 -0.334 0.615 -0.294 0.655 -0.254 0.675 -0.214 0.695 -0.174 0.715 -0.114 0.755 -0.054 0.775 -0.014 0.795 0.026 0.815 POLYLINE BLACK -0.054 0.075 -0.014 0.075 0.026 0.095 0.066 0.135 0.086 0.175 0.106 0.215 0.146 0.255 0.186 0.295 0.226 0.335 POLYLINE BLACK -1.574 -0.305 -1.614 -0.345 POLYLINE BLACK -1.434 -0.265 -1.434 -0.225 -1.414 -0.185 POLYLINE BLACK -1.394 -0.165 -1.334 -0.165 -1.294 -0.165 -1.254 -0.185 -1.254 -0.225 -1.274 -0.265 -1.314 -0.305 -1.354 -0.325 -1.394 -0.325 -1.414 -0.285 -1.414 -0.245 POLYLINE BLACK -1.554 -0.105 -1.474 -0.105 -1.434 -0.085 -1.394 -0.125 -1.434 -0.165 -1.534 -0.205 -1.614 -0.225 -1.634 -0.165 -1.554 -0.105 POLYLINE BLACK -1.414 -0.285 -1.394 -0.325 -1.414 -0.385 -1.454 -0.425 -1.534 -0.465 -1.654 -0.465 -1.674 -0.425 -1.674 -0.385 -1.634 -0.345 -1.594 -0.345 POLYLINE BLACK -1.594 -0.345 POLYLINE BLACK -1.874 -0.505 -1.814 -0.485 -1.694 -0.445 -1.694 -0.505 -1.714 -0.545 -1.794 -0.565 -1.834 -0.585 -1.874 -0.585 -1.874 -0.545 POLYLINE BLACK -1.934 -0.325 -1.854 -0.265 -1.814 -0.245 -1.754 -0.265 -1.734 -0.305 -1.754 -0.345 -1.794 -0.385 -1.834 -0.385 -1.914 -0.365 -1.874 -0.325 POLYLINE BLACK -2.214 -0.525 -2.174 -0.505 -2.094 -0.485 -2.054 -0.465 -1.994 -0.505 -1.974 -0.545 -2.014 -0.585 -2.034 -0.625 -2.074 -0.625 -2.194 -0.605 -2.254 -0.605 -2.234 -0.545 -2.214 -0.505 POLYLINE BLACK -2.734 -0.565 -2.674 -0.565 -2.574 -0.545 -2.554 -0.585 -2.574 -0.645 -2.654 -0.665 -2.694 -0.665 -2.734 -0.625 -2.694 -0.585 POLYLINE BLACK -2.634 -0.745 -2.554 -0.705 -2.414 -0.665 -2.374 -0.645 -2.374 -0.685 -2.374 -0.725 -2.414 -0.765 -2.454 -0.785 -2.554 -0.825 -2.594 -0.825 -2.574 -0.725 POLYLINE BLACK -2.994 -0.765 -2.834 -0.725 -2.794 -0.725 -2.774 -0.785 -2.754 -0.825 -2.814 -0.845 -2.854 -0.845 -2.934 -0.885 -2.974 -0.885 -2.994 -0.845 -2.994 -0.805 -2.974 -0.745 POLYLINE BLACK -3.134 -0.625 -3.094 -0.605 -2.954 -0.545 -2.914 -0.565 -2.794 -0.585 -2.854 -0.625 -2.894 -0.665 -2.954 -0.685 -2.994 -0.685 -3.074 -0.685 -3.114 -0.665 -3.074 -0.605 -3.034 -0.585 POLYLINE BLACK -3.554 -0.625 -3.514 -0.605 -3.434 -0.585 -3.394 -0.625 -3.374 -0.665 -3.394 -0.705 -3.474 -0.705 -3.514 -0.685 -3.514 -0.625 POLYLINE BLACK -3.374 -0.785 -3.334 -0.765 -3.294 -0.765 -3.254 -0.745 -3.194 -0.785 -3.154 -0.825 -3.294 -0.885 -3.334 -0.905 -3.374 -0.905 -3.394 -0.865 -3.414 -0.825 -3.434 -0.785 POLYLINE BLACK -0.914 0.155 -0.974 0.155 -1.014 0.135 -1.054 0.135 -1.094 0.135 -1.134 0.135 -1.174 0.115 -1.214 0.115 -1.274 0.095 -1.314 0.095 -1.354 0.095 -1.394 0.095 -1.434 0.095 -1.474 0.075 -1.514 0.055 -1.574 0.035 -1.614 0.015 -1.654 -0.005 -1.694 -0.045 -1.734 -0.085 -1.774 -0.105 -1.834 -0.145 -1.894 -0.185 -1.934 -0.225 -1.974 -0.245 -2.014 -0.265 -2.054 -0.285 -2.094 -0.325 -2.134 -0.345 -2.174 -0.365 -2.214 -0.365 -2.254 -0.385 -2.294 -0.405 -2.334 -0.425 -2.374 -0.425 -2.414 -0.445 -2.454 -0.465 -2.494 -0.465 -2.534 -0.485 -2.574 -0.485 -2.614 -0.505 -2.654 -0.485 -2.674 -0.445 -2.714 -0.425 -2.754 -0.445 -2.814 -0.445 -2.854 -0.465 -2.894 -0.485 -2.934 -0.485 -2.974 -0.485 -3.014 -0.485 -3.054 -0.485 -3.094 -0.465 -3.134 -0.465 -3.174 -0.485 POLYLINE BLACK -4.134 -1.325 -4.174 -1.365 -4.234 -1.405 -4.274 -1.445 -4.314 -1.485 -4.354 -1.505 -4.394 -1.565 -4.354 -1.505 -4.314 -1.465 -4.274 -1.425 -4.234 -1.385 -4.194 -1.345 -4.154 -1.345 -4.094 -1.365 -4.094 -1.405 -4.134 -1.465 -4.154 -1.505 -4.214 -1.525 -4.254 -1.525 -4.294 -1.525 -4.334 -1.525 POLYLINE BLACK -4.234 -1.305 -4.154 -1.305 -4.114 -1.305 -4.074 -1.285 POLYLINE BLACK -4.254 -1.305 -4.294 -1.285 -4.274 -1.245 -4.234 -1.205 -4.194 -1.165 POLYLINE BLACK -4.234 -1.185 -4.194 -1.185 -4.154 -1.185 -4.094 -1.165 -4.054 -1.205 -4.014 -1.245 -3.994 -1.285 POLYLINE BLACK -3.554 -0.345 -3.554 -0.385 -3.514 -0.445 -3.494 -0.485 -3.454 -0.525 -3.414 -0.565 -3.374 -0.585 -3.334 -0.605 -3.294 -0.585 -3.254 -0.565 -3.234 -0.525 -3.194 -0.505 POLYLINE BLACK -3.534 -0.765 -3.514 -0.805 -3.534 -0.865 -3.554 -0.905 -3.574 -0.945 -3.614 -0.985 -3.594 -1.025 -3.554 -1.065 -3.514 -1.065 -3.474 -1.065 -3.414 -1.065 -3.374 -1.065 -3.334 -1.065 -3.294 -1.085 -3.254 -1.085 -3.214 -1.085 -3.174 -1.105 POLYLINE BLACK -4.354 0.435 -4.314 0.395 -4.294 0.355 -4.254 0.295 -4.234 0.255 -4.214 0.215 -4.194 0.175 -4.174 0.135 -4.154 0.095 -4.134 0.055 -4.114 0.015 -4.094 -0.025 -4.074 -0.065 -4.054 -0.125 -4.034 -0.165 -4.034 -0.205 -4.014 -0.245 -3.994 -0.285 -3.974 -0.325 -3.954 -0.365 -3.914 -0.405 -3.874 -0.445 -3.854 -0.485 -3.834 -0.525 -3.814 -0.565 -3.814 -0.625 -3.814 -0.665 -3.814 -0.705 -3.854 -0.745 -3.874 -0.805 -3.894 -0.845 -3.934 -0.885 -3.974 -0.905 -4.014 -0.945 -4.054 -0.985 -4.094 -1.005 -4.134 -1.045 POLYLINE BLACK -4.614 -1.745 -4.574 -1.725 -4.514 -1.705 -4.474 -1.685 -4.434 -1.665 -4.394 -1.665 -4.354 -1.645 -4.314 -1.625 -4.274 -1.605 -4.214 -1.585 -4.174 -1.565 -4.134 -1.545 -4.074 -1.525 -4.034 -1.505 -3.994 -1.485 -3.954 -1.445 -3.914 -1.425 -3.854 -1.405 -3.814 -1.385 -3.754 -1.365 -3.714 -1.365 -3.674 -1.345 -3.634 -1.345 -3.594 -1.325 -3.514 -1.305 -3.454 -1.285 -3.414 -1.265 -3.374 -1.265 -3.334 -1.245 -3.294 -1.225 -3.254 -1.205 -3.214 -1.205 -3.174 -1.185 -3.134 -1.165 -3.094 -1.165 -3.034 -1.145 -2.994 -1.125 -2.934 -1.125 -2.894 -1.105 -2.854 -1.085 -2.814 -1.065 -2.774 -1.045 -2.734 -1.025 -2.674 -1.005 -2.614 -0.985 -2.574 -0.965 -2.534 -0.945 -2.474 -0.945 -2.434 -0.925 -2.394 -0.905 -2.354 -0.885 -2.314 -0.885 -2.274 -0.865 -2.234 -0.865 -2.194 -0.845 -2.154 -0.845 -2.114 -0.825 -2.054 -0.825 -2.014 -0.805 -1.974 -0.805 -1.934 -0.785 -1.894 -0.765 -1.854 -0.745 -1.814 -0.725 -1.774 -0.705 -1.714 -0.685 -1.674 -0.665 -1.634 -0.645 -1.594 -0.625 -1.554 -0.625 -1.514 -0.625 -1.474 -0.605 -1.434 -0.585 -1.394 -0.545 -1.354 -0.525 -1.314 -0.505 -1.274 -0.485 -1.234 -0.445 -1.194 -0.425 -1.154 -0.405 -1.114 -0.385 -1.074 -0.365 -1.034 -0.325 -0.994 -0.285 POLYLINE BLACK -4.694 -1.445 -4.654 -1.425 -4.614 -1.385 -4.574 -1.365 -4.514 -1.325 -4.474 -1.305 -4.434 -1.265 -4.374 -1.225 -4.334 -1.205 -4.294 -1.185 -4.234 -1.165 -4.194 -1.145 -4.134 -1.105 -4.154 -1.065 -4.194 -1.045 -4.254 -1.025 -4.294 -0.985 -4.334 -0.945 -4.374 -0.925 -4.414 -0.885 -4.454 -0.845 -4.494 -0.805 -4.534 -0.785 -4.574 -0.745 -4.594 -0.705 -4.634 -0.665 -4.674 -0.645 -4.714 -0.585 -4.734 -0.545 POLYLINE BLACK -3.934 -0.085 -3.974 -0.085 -4.014 -0.045 POLYLINE BLACK -5.614 2.175 POLYLINE BLACK -5.734 2.335 POLYLINE BLACK -4.574 1.475 POLYLINE BLACK -4.714 1.435 POLYLINE BLACK -4.314 1.195 POLYLINE BLACK -4.774 1.975 POLYLINE BLACK -5.234 2.055 POLYLINE BLACK -4.934 2.055 POLYLINE BLACK -3.754 0.535 -3.794 0.555 -3.834 0.555 -3.874 0.575 POLYLINE BLACK -5.034 2.175 POLYLINE BLACK -4.434 1.275 POLYLINE BLACK -4.474 1.415 POLYLINE BLACK -5.654 2.775 POLYLINE BLACK -5.774 2.795 POLYLINE BLACK -5.914 2.575 POLYLINE BLACK -5.954 2.635 POLYLINE BLACK -5.874 2.475 POLYLINE BLACK -5.974 2.675 POLYLINE BLACK -6.074 2.495 -6.114 2.455 -6.154 2.435 -6.194 2.415 -6.214 2.375 -6.254 2.315 -6.274 2.275 -6.314 2.255 -6.354 2.215 -6.394 2.175 POLYLINE BLACK -6.314 2.375 -6.334 2.335 -6.354 2.295 -6.394 2.255 -6.434 2.215 -6.454 2.175 POLYLINE BLACK -5.974 2.975 -6.014 2.935 -6.054 2.895 -6.074 2.835 -6.114 2.795 -6.134 2.755 -6.174 2.715 -6.194 2.675 -6.234 2.635 -6.274 2.575 -6.274 2.535 -6.294 2.495 -6.314 2.455 -6.314 2.415 -6.314 2.375 POLYLINE BLACK -4.554 1.495 POLYLINE BLACK -4.754 1.455 POLYLINE BLACK -4.934 2.195 POLYLINE BLACK -5.214 2.015 POLYLINE BLACK -5.174 2.235 POLYLINE BLACK -5.234 2.175 POLYLINE BLACK -5.414 2.135 POLYLINE BLACK -5.494 2.095 POLYLINE BLACK -5.354 1.915 POLYLINE BLACK -5.174 1.715 POLYLINE BLACK -5.114 1.555 POLYLINE BLACK -5.074 1.475 POLYLINE BLACK -4.894 1.375 POLYLINE BLACK -4.854 1.555 POLYLINE BLACK -5.094 1.615 POLYLINE BLACK -5.254 1.675 POLYLINE BLACK -5.354 1.855 POLYLINE BLACK -3.934 0.675 -3.974 0.735 -3.994 0.775 -4.014 0.815 -4.034 0.855 -4.054 0.895 -4.074 0.935 -4.094 0.995 -4.114 1.035 -4.114 1.075 -4.134 1.135 -4.114 1.075 -4.094 1.035 -4.074 0.975 -4.054 0.935 -4.034 0.895 -4.014 0.835 -3.994 0.795 -3.974 0.755 -3.954 0.695 -3.954 0.655 -3.934 0.615 POLYLINE BLACK -5.464 2.085 POLYLINE BLACK -5.584 2.385 -5.614 2.475 -5.614 2.535 -5.614 2.625 -5.614 2.685 -5.554 2.685 -5.494 2.655 -5.434 2.625 -5.374 2.595 -5.314 2.535 -5.314 2.445 -5.284 2.385 -5.284 2.325 -5.314 2.265 -5.374 2.235 -5.434 2.295 -5.494 2.355 -5.554 2.415 -5.584 2.475 POLYLINE BLACK -5.164 1.695 -5.074 1.665 -5.014 1.665 -4.954 1.635 -4.894 1.605 -4.804 1.605 -4.744 1.575 -4.684 1.545 -4.624 1.545 -4.564 1.515 -4.504 1.485 -4.474 1.575 -4.504 1.635 -4.504 1.695 -4.534 1.755 -4.594 1.815 -4.654 1.845 -4.714 1.845 -4.774 1.845 -4.834 1.845 -4.894 1.875 -4.954 1.875 -5.014 1.905 -5.104 1.935 -5.104 1.875 -5.134 1.785 -5.044 1.725 POLYLINE BLACK -6.064 2.475 -5.974 2.385 -5.884 2.295 -5.824 2.235 -5.734 2.145 -5.704 2.085 -5.644 2.025 -5.584 1.935 -5.494 1.845 -5.374 1.665 -5.314 1.605 -5.254 1.545 -5.194 1.485 -5.134 1.425 -5.074 1.365 -5.014 1.335 -4.924 1.245 -4.864 1.215 -4.834 1.155 POLYLINE BLACK -6.124 2.445 POLYLINE BLACK -5.974 2.955 -5.854 2.895 -5.794 2.895 -5.734 2.865 -5.644 2.835 -5.584 2.805 -5.524 2.745 -5.464 2.685 -5.404 2.625 -5.314 2.595 -5.254 2.535 -5.164 2.445 -5.074 2.385 -5.014 2.325 -4.954 2.295 -4.894 2.205 -4.834 2.145 -4.774 2.115 -4.684 2.025 -4.594 1.935 -4.564 1.875 -4.504 1.815 -4.444 1.755 -4.414 1.695 -4.384 1.605 -4.324 1.545 -4.294 1.485 -4.294 1.425 POLYLINE BLACK -4.234 1.335 -4.264 1.395 -4.294 1.455 -4.294 1.515 -4.324 1.575 -4.384 1.665 -4.414 1.725 POLYLINE BLACK -4.024 0.855 -4.084 0.915 -4.114 0.975 -4.174 1.065 -4.174 1.125 -4.234 1.185 -4.264 1.245 -4.294 1.305 -4.324 1.365 -4.324 1.455 -4.354 1.515 -4.384 1.575 -4.354 1.515 POLYLINE BLACK -4.264 0.375 -4.264 0.465 -4.294 0.525 -4.294 0.585 -4.234 0.585 -4.144 0.555 -4.114 0.495 -4.084 0.405 -4.114 0.345 -4.204 0.375 -4.264 0.465 -4.294 0.525 POLYLINE BLACK -3.964 0.285 -3.934 0.345 -3.904 0.405 -3.844 0.405 -3.844 0.285 -3.814 0.225 -3.904 0.225 -3.964 0.285 -3.994 0.345 POLYLINE BLACK -4.114 0.105 -4.144 0.165 -4.174 0.225 -4.204 0.315 -4.144 0.345 -4.084 0.345 -4.024 0.375 -4.024 0.315 -3.994 0.225 -3.964 0.165 -3.964 0.105 -4.024 0.075 -4.084 0.105 -4.144 0.165 -4.144 0.225 POLYLINE BLACK -4.024 -0.135 -4.024 -0.075 -4.024 0.015 -3.964 0.075 -3.904 0.105 -3.844 0.045 -3.784 -0.015 -3.814 -0.075 -3.874 -0.135 -3.934 -0.105 POLYLINE BLACK -3.844 -0.405 -3.814 -0.315 -3.784 -0.195 -3.724 -0.195 -3.634 -0.225 -3.574 -0.345 -3.574 -0.405 -3.694 -0.405 -3.784 -0.435 -3.814 -0.315 POLYLINE BLACK -3.754 -0.525 -3.694 -0.585 -3.634 -0.645 -3.604 -0.735 -3.574 -0.795 -3.544 -0.855 POLYLINE BLACK -4.384 0.495 -4.354 0.345 -4.324 0.285 -4.294 0.195 -4.264 0.135 -4.204 0.015 -4.174 -0.045 -4.114 -0.105 -4.054 -0.195 -4.024 -0.255 -3.964 -0.315 -3.934 -0.375 -3.904 -0.435 -3.844 -0.495 -3.814 -0.585 -3.754 -0.615 -3.664 -0.675 -3.604 -0.735 POLYLINE BLACK -3.694 -0.105 -3.694 -0.165 -3.664 -0.225 -3.634 -0.285 -3.604 -0.375 -3.574 -0.435 POLYLINE BLACK -4.144 0.885 -4.084 0.795 -4.024 0.735 -3.994 0.645 -3.934 0.585 -3.904 0.525 -3.874 0.465 -3.814 0.315 -3.784 0.255 -3.784 0.195 -3.784 0.135 -3.754 0.045 -3.754 -0.015 -3.754 -0.075 -3.724 -0.165 -3.694 -0.225 -3.694 -0.285 POLYLINE BLACK -3.784 0.495 -3.694 0.465 -3.634 0.405 -3.604 0.345 -3.544 0.255 -3.514 0.195 -3.454 0.135 -3.394 0.045 -3.304 -0.075 -3.154 -0.075 -3.094 -0.075 -3.034 -0.105 -2.974 -0.105 -2.914 -0.075 -2.854 -0.045 -2.794 -0.045 -2.734 -0.045 -2.674 -0.045 -2.614 -0.045 -2.554 -0.045 -2.494 -0.045 -2.464 -0.135 -2.434 -0.045 -2.404 0.015 -2.344 0.075 -2.314 0.135 -2.284 0.195 -2.254 0.255 POLYLINE BLACK -1.324 0.435 -1.234 0.465 -1.174 0.495 -1.114 0.525 -1.054 0.495 -0.994 0.435 -0.994 0.375 -1.024 0.285 -1.054 0.225 -1.114 0.225 -1.174 0.225 -1.234 0.255 -1.264 0.345 -1.264 0.405 -1.264 0.465 POLYLINE BLACK -1.204 1.275 -1.084 1.335 -1.024 1.365 -0.934 1.395 POLYLINE BLACK -1.324 1.095 -1.294 1.185 -1.294 1.245 -1.264 1.305 -1.324 1.185 -1.354 1.125 -1.384 1.065 -1.384 1.005 POLYLINE BLACK -1.294 1.065 -1.234 1.005 -1.174 0.945 -1.114 0.885 -1.054 0.825 -0.994 0.765 -0.934 0.705 -0.904 0.645 -0.844 0.555 -0.814 0.495 -0.784 0.435 -0.634 0.525 -0.604 0.585 -0.514 0.645 -0.454 0.705 POLYLINE BLACK -1.444 0.585 -1.384 0.705 -1.354 0.765 -1.264 0.765 -1.204 0.765 -1.144 0.675 -1.114 0.615 -1.114 0.555 -1.234 0.525 -1.354 0.495 -1.354 0.615 POLYLINE BLACK -0.994 0.135 -0.994 0.225 -0.964 0.285 -0.964 0.345 -0.904 0.375 -0.844 0.375 -0.784 0.375 -0.754 0.255 -0.784 0.165 -0.784 0.105 -0.784 0.045 -0.754 -0.015 -0.904 0.015 -0.964 0.045 -0.964 0.135 -0.934 0.195 -0.904 0.255 POLYLINE BLACK -0.784 -0.345 -0.784 -0.435 -0.814 -0.585 -0.814 -0.645 -0.814 -0.705 -0.814 -0.645 -0.784 -0.495 -0.634 -0.405 -0.574 -0.375 -0.514 -0.345 -0.424 -0.345 -0.364 -0.405 -0.334 -0.495 -0.364 -0.555 -0.334 -0.615 -0.514 -0.705 -0.604 -0.735 -0.664 -0.735 -0.724 -0.765 -0.724 -0.645 -0.724 -0.495 -0.724 -0.435 POLYLINE BLACK -0.544 -0.075 -0.604 -0.105 POLYLINE BLACK -0.694 -0.135 -0.664 -0.195 -0.634 -0.255 -0.544 -0.285 -0.454 -0.255 -0.394 -0.255 -0.334 -0.255 -0.364 -0.135 -0.364 -0.075 -0.514 -0.075 -0.574 -0.105 POLYLINE BLACK -0.454 0.255 -0.514 0.225 -0.604 0.165 -0.664 0.105 -0.634 0.045 -0.604 -0.045 -0.574 -0.105 -0.484 0.015 -0.424 0.075 -0.454 0.135 -0.454 0.195 POLYLINE BLACK -0.244 -0.075 -0.304 -0.015 -0.364 0.015 -0.364 0.075 -0.364 0.135 -0.334 0.195 -0.334 0.285 -0.304 0.345 -0.244 0.285 -0.184 0.285 -0.124 0.255 -0.124 0.195 -0.124 0.135 -0.094 0.075 -0.094 0.015 -0.124 -0.045 -0.184 -0.045 -0.244 -0.045 POLYLINE BLACK -0.274 -0.735 -0.334 -0.765 -0.424 -0.795 -0.514 -0.825 -0.574 -0.855 -0.664 -0.885 -0.754 -0.915 -0.814 -0.945 -0.934 -1.005 -0.994 -1.065 -1.054 -1.065 -1.204 -1.155 -1.294 -1.155 -1.354 -1.185 -1.474 -1.245 -1.534 -1.275 -1.594 -1.305 POLYLINE BLACK -4.114 0.765 -4.174 0.855 -4.234 0.945 -4.294 1.005 -4.414 1.065 -4.474 1.125 -4.534 1.185 -4.594 1.245 -4.654 1.305 -4.744 1.245 -4.804 1.215 -4.864 1.155 -4.744 1.065 -4.654 0.975 POLYLINE BLACK -4.384 0.375 -4.384 0.435 -4.384 0.495 -4.414 0.555 -4.474 0.615 -4.504 0.705 -4.594 0.795 -4.624 0.855 -4.684 0.945 -4.714 1.005 -4.654 0.975 -4.504 0.765 -4.414 0.705 -4.504 0.765 -4.594 0.915 -4.624 0.975 POLYLINE BLACK -4.714 -0.465 -4.684 -0.405 -4.654 -0.315 -4.624 -0.255 -4.594 -0.195 -4.564 -0.135 -4.534 -0.075 -4.534 0.015 -4.504 0.075 -4.474 0.135 -4.474 0.195 -4.444 0.285 -4.444 0.345 -4.414 0.405 POLYLINE BLACK -3.574 -1.275 -3.484 -1.215 -3.424 -1.215 -3.274 -1.155 -3.214 -1.155 -3.124 -1.125 -3.064 -1.095 -3.004 -1.065 -2.944 -1.065 -2.854 -1.035 -2.794 -1.005 -2.734 -1.005 -2.674 -0.975 -2.614 -0.975 -2.554 -0.945 -2.494 -0.915 -2.404 -0.915 -2.344 -0.885 -2.284 -0.885 -2.224 -0.885 -2.164 -0.855 -2.104 -0.825 -2.044 -0.825 -1.984 -0.795 -1.924 -0.765 -1.864 -0.765 -1.804 -0.735 -1.714 -0.735 -1.654 -0.705 -1.594 -0.705 -1.534 -0.675 -1.474 -0.645 -1.414 -0.615 -1.354 -0.585 -1.294 -0.525 -1.234 -0.495 -1.174 -0.435 -1.114 -0.435 -1.054 -0.375 -0.994 -0.345 -0.934 -0.315 POLYLINE BLACK -0.964 -0.165 -0.934 -0.225 -0.904 -0.285 -0.874 -0.345 -0.844 -0.405 -0.814 -0.465 POLYLINE BLACK -3.484 0.375 -3.364 0.375 -3.304 0.345 -3.244 0.315 -3.184 0.315 -3.124 0.315 -3.034 0.315 -2.914 0.285 -2.824 0.285 -2.764 0.255 -2.704 0.255 -2.644 0.255 -2.584 0.285 -2.524 0.255 -2.464 0.225 -2.404 0.225 -2.314 0.195 -2.254 0.195 -2.194 0.195 -2.134 0.195 -2.074 0.195 -2.014 0.225 -1.954 0.225 -1.894 0.225 -1.834 0.225 -1.774 0.225 -1.714 0.225 -1.654 0.225 -1.594 0.225 -1.504 0.225 -1.444 0.225 -1.384 0.225 -1.324 0.195 -1.234 0.195 -1.174 0.165 -1.114 0.135 -1.054 0.075 -1.024 0.015 -0.994 -0.045 -0.994 -0.105 -0.994 -0.165 -0.994 -0.225 -0.994 -0.285 POLYLINE BLACK -4.264 0.765 -4.204 0.765 -4.174 0.705 -4.114 0.615 -4.054 0.585 -3.994 0.555 -3.934 0.495 -3.874 0.465 -3.814 0.405 -3.754 0.375 -3.664 0.315 -3.604 0.315 -3.544 0.315 -3.484 0.315 -3.424 0.315 -3.364 0.315 -3.304 0.315 -3.244 0.345 -3.184 0.375 -3.124 0.405 -3.004 0.405 -2.944 0.435 -2.884 0.435 -2.824 0.465 -2.764 0.465 -2.674 0.465 -2.614 0.525 -2.554 0.585 -2.494 0.585 -2.434 0.615 -2.374 0.645 -2.314 0.675 -2.254 0.675 -2.164 0.705 -2.104 0.735 -2.044 0.765 -1.984 0.795 -1.924 0.795 -1.864 0.825 -1.804 0.855 -1.744 0.885 -1.654 0.915 POLYLINE BLACK -1.444 1.185 -1.384 1.125 -1.354 1.065 -1.354 1.005 -1.444 0.945 -1.504 0.915 -1.564 0.945 -1.624 0.945 -1.684 0.945 ELEVATION STATIONS 0.000 0.000 503.0 -4.838 -2.383 503.1 -5.940 -5.284 503.2 -9.719 -7.102 503.3 -5.940 -5.284 504.0 -4.697 -6.180 504.1 -1.458 -7.424 504.2 2.370 -7.964 504.3 4.833 -7.856 504.4 8.179 -7.893 504.5 9.879 -5.569 504.6 SHOTS 8.179 -7.893 9.879 -5.569 9.879 -5.569 9.726 -5.555 9.879 -5.569 9.528 -5.185 9.879 -5.569 9.973 -6.016 4.833 -7.856 8.179 -7.893 8.179 -7.893 8.174 -6.918 8.179 -7.893 8.258 -7.794 8.179 -7.893 8.124 -8.106 2.370 -7.964 4.833 -7.856 4.833 -7.856 4.313 -7.846 4.833 -7.856 5.514 -7.852 4.833 -7.856 5.379 -7.806 4.833 -7.856 5.339 -7.795 4.833 -7.856 5.429 -7.804 4.833 -7.856 5.496 -7.772 4.833 -7.856 5.595 -7.663 4.833 -7.856 4.909 -8.225 4.833 -7.856 6.435 -6.215 -1.458 -7.424 2.370 -7.964 2.370 -7.964 2.117 -7.749 2.370 -7.964 2.676 -7.852 2.370 -7.964 2.411 -8.170 2.370 -7.964 2.386 -6.732 -4.697 -6.180 -1.458 -7.424 -1.458 -7.424 -1.439 -7.436 -1.458 -7.424 -1.441 -7.981 -1.458 -7.424 -1.476 -6.939 -5.940 -5.284 -4.697 -6.180 -4.697 -6.180 -3.881 -5.819 -4.697 -6.180 -5.342 -5.855 -4.697 -6.180 -4.327 -7.257 -4.697 -6.180 -4.598 -5.456 -5.940 -5.284 -5.940 -5.284 -5.940 -5.284 -5.779 -5.441 -5.940 -5.284 -6.664 -5.258 -5.940 -5.284 -6.164 -5.989 -5.940 -5.284 -5.389 -5.266 -5.940 -5.284 -9.719 -7.102 -9.719 -7.102 -9.662 -7.477 -9.719 -7.102 -9.354 -7.067 -9.719 -7.102 -9.646 -7.151 -9.719 -7.102 -9.457 -6.518 -4.838 -2.383 -5.940 -5.284 0.000 0.000 -4.838 -2.383 -4.838 -2.383 -5.888 -2.467 -4.838 -2.383 -5.791 -0.020 -4.838 -2.383 -5.457 0.540 -4.838 -2.383 -3.485 -2.931 0.000 0.000 -1.405 0.071 0.000 0.000 -0.476 0.123 0.000 0.000 -0.947 0.452 POLYLINE BLACK 1.874 -5.924 1.844 -6.014 1.784 -6.074 1.694 -6.134 1.604 -6.254 1.484 -6.374 1.454 -6.464 1.394 -6.494 1.334 -6.614 1.274 -6.674 1.244 -6.794 1.244 -7.124 1.214 -7.214 1.214 -7.274 1.184 -7.334 1.184 -7.394 1.154 -7.454 1.154 -7.514 1.124 -7.604 1.094 -7.664 1.124 -7.724 0.974 -8.024 POLYLINE BLACK 2.084 -6.044 1.964 -6.284 1.934 -6.374 1.934 -6.434 1.904 -6.494 1.904 -6.644 1.844 -6.764 1.844 -6.824 1.904 -6.944 1.934 -7.034 2.054 -7.094 2.144 -7.154 2.264 -7.214 2.414 -7.274 2.474 -7.304 2.504 -7.364 2.504 -7.604 2.534 -7.664 2.534 -7.754 2.504 -7.814 POLYLINE BLACK 0.164 -7.094 0.134 -7.154 0.104 -7.244 0.044 -7.304 0.014 -7.364 -0.046 -7.424 -0.076 -7.514 -0.106 -7.574 -0.136 -7.664 -0.136 -7.784 -0.166 -7.844 -0.166 -8.084 POLYLINE BLACK 8.014 -8.184 8.174 -8.104 8.254 -7.984 8.334 -7.944 8.574 -7.704 8.654 -7.704 8.814 -7.624 POLYLINE BLACK 10.214 -6.024 10.134 -6.064 10.054 -6.224 10.174 -6.304 10.254 -6.304 10.334 -6.264 10.414 -6.184 10.374 -6.104 10.414 -6.024 10.294 -5.944 POLYLINE BLACK 9.934 -5.944 9.854 -5.984 9.774 -6.064 9.734 -6.144 9.734 -6.304 9.814 -6.304 10.014 -6.224 10.094 -6.144 10.054 -6.064 9.974 -6.064 POLYLINE BLACK 9.574 -5.984 9.454 -6.024 9.374 -6.104 9.374 -6.304 9.454 -6.384 9.654 -6.304 9.734 -6.224 9.774 -6.144 9.734 -6.064 9.614 -6.024 9.534 -6.104 POLYLINE BLACK 9.214 -6.224 9.174 -6.304 9.094 -6.384 9.014 -6.504 9.054 -6.584 9.134 -6.624 9.334 -6.584 9.414 -6.464 9.414 -6.384 9.334 -6.344 9.214 -6.384 POLYLINE BLACK 8.974 -6.704 8.894 -6.824 8.854 -6.904 8.854 -6.984 8.894 -7.064 8.974 -7.064 9.094 -6.984 9.174 -6.784 9.094 -6.584 8.974 -6.584 8.894 -6.664 POLYLINE BLACK 9.094 -7.064 9.014 -7.104 8.974 -7.224 8.894 -7.384 8.894 -7.464 8.974 -7.544 9.174 -7.424 9.334 -7.224 9.334 -7.104 9.174 -7.064 9.054 -7.064 POLYLINE BLACK 9.334 -7.464 9.254 -7.504 9.174 -7.544 9.134 -7.624 9.134 -7.704 9.254 -7.784 9.374 -7.824 9.494 -7.744 9.574 -7.664 9.614 -7.584 9.534 -7.504 9.414 -7.464 POLYLINE BLACK 8.934 -7.624 8.854 -7.624 8.774 -7.664 8.734 -7.744 8.774 -7.824 8.974 -7.824 9.094 -7.744 9.174 -7.664 9.094 -7.624 9.054 -7.544 POLYLINE BLACK 7.894 -6.464 7.774 -6.544 7.694 -6.584 7.654 -6.664 7.734 -6.704 7.814 -6.704 7.894 -6.664 8.014 -6.624 8.014 -6.544 POLYLINE BLACK 6.774 -7.304 6.734 -7.424 6.654 -7.624 6.654 -8.144 POLYLINE BLACK 6.214 -7.264 6.134 -7.384 6.094 -7.464 6.054 -7.704 6.014 -7.784 6.014 -8.064 POLYLINE BLACK 5.614 -7.144 5.534 -7.224 5.454 -7.384 5.454 -7.504 5.414 -7.584 5.414 -7.824 5.454 -7.944 5.454 -8.024 POLYLINE BLACK 3.654 -6.184 3.734 -6.224 3.814 -6.224 3.934 -6.304 4.014 -6.344 4.134 -6.344 POLYLINE BLACK 4.134 -7.504 4.094 -7.624 4.014 -7.744 4.014 -7.864 POLYLINE BLACK 3.414 -6.544 3.414 -6.624 3.494 -6.784 3.494 -6.984 3.534 -7.064 3.574 -7.184 3.654 -7.264 3.654 -7.584 3.574 -7.744 3.574 -7.864 POLYLINE BLACK 2.814 -6.304 2.774 -6.384 2.774 -6.464 2.814 -6.544 2.854 -6.664 2.854 -6.744 2.934 -6.864 2.974 -6.944 3.054 -7.064 3.134 -7.144 3.134 -7.224 3.174 -7.304 3.174 -7.584 3.134 -7.704 3.134 -7.784 POLYLINE BLACK 4.414 -7.344 4.494 -7.304 4.574 -7.304 4.694 -7.344 4.774 -7.344 4.854 -7.384 4.934 -7.384 POLYLINE BLACK 2.614 -7.344 2.694 -7.344 2.774 -7.384 2.854 -7.384 2.974 -7.424 3.054 -7.384 3.134 -7.384 3.254 -7.304 3.494 -7.304 3.614 -7.264 3.774 -7.344 3.854 -7.344 POLYLINE BLACK 6.414 -5.384 6.494 -5.384 6.614 -5.464 POLYLINE BLACK 6.454 -5.424 POLYLINE BLACK 5.694 -5.504 5.774 -5.464 5.854 -5.464 POLYLINE BLACK 5.054 -5.624 4.974 -5.704 4.974 -5.784 4.934 -5.864 4.934 -6.424 4.894 -6.504 4.894 -6.664 POLYLINE BLACK 8.454 -5.824 8.414 -5.904 8.334 -5.984 8.374 -6.104 8.494 -6.064 8.574 -6.024 8.614 -5.944 8.574 -5.864 8.494 -5.784 8.414 -5.744 POLYLINE BLACK 8.214 -5.744 8.134 -5.824 8.134 -6.024 8.214 -6.024 8.294 -5.944 8.334 -5.864 8.334 -5.784 POLYLINE BLACK 7.534 -5.384 7.534 -5.664 7.694 -5.504 7.614 -5.424 7.414 -5.424 POLYLINE BLACK 7.054 -5.464 7.094 -5.384 7.014 -5.384 6.974 -5.464 6.894 -5.544 6.934 -5.624 7.014 -5.664 7.134 -5.704 7.254 -5.624 7.294 -5.464 7.214 -5.384 7.134 -5.384 7.094 -5.464 POLYLINE BLACK 7.974 -5.344 7.894 -5.424 7.814 -5.664 7.854 -5.744 7.934 -5.784 7.974 -5.704 8.014 -5.544 7.934 -5.424 7.814 -5.464 POLYLINE BLACK 8.054 -5.704 7.974 -5.744 7.854 -5.984 7.974 -6.024 8.134 -5.864 8.134 -5.744 8.014 -5.704 7.934 -5.744 POLYLINE BLACK 8.094 -6.064 8.014 -6.104 7.974 -6.184 7.934 -6.304 7.934 -6.424 8.014 -6.504 8.094 -6.544 8.134 -6.424 8.214 -6.144 8.214 -6.064 8.094 -6.024 POLYLINE BLACK 8.134 -6.624 8.054 -6.664 8.014 -6.744 7.974 -6.904 8.094 -6.864 8.174 -6.864 8.254 -6.744 8.254 -6.624 8.214 -6.544 8.134 -6.504 8.054 -6.464 POLYLINE BLACK 6.854 -5.504 6.774 -5.504 6.694 -5.584 6.654 -5.664 6.654 -5.744 6.734 -5.744 6.894 -5.584 6.894 -5.384 6.734 -5.344 6.654 -5.384 POLYLINE BLACK 6.254 -5.624 6.214 -5.744 6.294 -5.784 6.374 -5.744 6.494 -5.664 6.534 -5.544 6.494 -5.464 6.414 -5.464 6.294 -5.504 POLYLINE BLACK 6.054 -5.464 5.974 -5.424 5.894 -5.504 5.854 -5.584 5.854 -5.744 5.974 -5.704 6.054 -5.624 6.134 -5.504 6.054 -5.504 5.934 -5.584 POLYLINE BLACK 5.574 -5.504 5.454 -5.584 5.414 -5.664 5.454 -5.744 5.574 -5.744 5.654 -5.624 5.574 -5.464 POLYLINE BLACK 5.134 -5.464 5.054 -5.544 5.054 -5.624 5.014 -5.704 5.134 -5.784 5.294 -5.704 5.374 -5.624 5.334 -5.544 5.254 -5.504 5.134 -5.504 POLYLINE BLACK 4.814 -6.744 4.814 -6.864 4.854 -6.944 5.014 -6.544 4.814 -6.544 4.774 -6.704 POLYLINE BLACK 4.774 -6.464 4.694 -6.544 4.694 -6.704 4.774 -6.624 4.774 -6.544 4.774 -6.464 POLYLINE BLACK 4.614 -6.304 4.574 -6.424 4.574 -6.504 4.654 -6.544 4.694 -6.464 4.694 -6.344 4.654 -6.264 POLYLINE BLACK 3.534 -6.184 3.454 -6.264 3.454 -6.384 3.494 -6.464 3.574 -6.504 3.774 -6.424 3.814 -6.304 3.734 -6.144 POLYLINE BLACK 3.134 -5.984 3.094 -6.104 3.094 -6.304 3.174 -6.384 3.254 -6.424 3.334 -6.384 3.414 -6.304 3.414 -6.184 3.374 -6.104 POLYLINE BLACK 2.654 -5.944 2.574 -5.904 2.534 -6.024 2.534 -6.184 2.654 -6.264 2.734 -6.264 2.854 -6.224 2.934 -6.184 2.974 -6.104 2.934 -6.024 2.854 -5.904 2.774 -5.824 POLYLINE BLACK 2.254 -5.784 2.174 -5.824 2.094 -5.864 2.014 -5.904 1.974 -5.984 2.054 -6.024 2.174 -6.064 2.294 -6.064 2.334 -6.224 2.414 -6.144 2.494 -5.984 2.534 -5.864 2.494 -5.784 2.414 -5.784 POLYLINE BLACK 4.014 -7.024 4.014 -7.104 3.974 -7.224 3.974 -7.344 3.934 -7.424 4.014 -7.504 4.134 -7.464 4.214 -7.504 4.334 -7.464 4.414 -7.424 4.414 -7.344 4.374 -7.264 4.414 -7.184 4.414 -7.064 4.334 -6.984 4.254 -6.944 4.134 -6.984 4.054 -7.024 POLYLINE BLACK 5.174 -7.024 5.254 -7.064 5.374 -7.064 5.534 -7.144 5.734 -7.144 5.814 -7.184 6.094 -7.184 6.254 -7.224 6.334 -7.184 6.414 -7.184 6.534 -7.224 6.694 -7.304 6.934 -7.304 7.054 -7.264 7.134 -7.224 7.214 -7.224 7.294 -7.144 7.294 -7.024 7.334 -6.944 7.334 -6.824 7.334 -6.744 7.294 -6.664 7.294 -6.584 7.254 -6.504 7.214 -6.384 7.174 -6.304 7.094 -6.224 7.014 -6.144 6.894 -6.064 6.814 -6.064 6.734 -6.064 6.654 -6.024 6.534 -6.024 6.454 -6.024 6.374 -6.024 6.254 -6.024 6.174 -6.024 6.054 -5.984 5.974 -5.984 5.854 -5.984 5.734 -5.984 5.654 -6.064 5.574 -6.104 5.494 -6.184 5.374 -6.224 5.294 -6.264 5.214 -6.344 5.174 -6.424 5.174 -6.704 5.094 -6.784 5.094 -6.864 5.134 -6.944 POLYLINE BLACK 7.934 -8.144 7.854 -8.064 7.774 -8.144 7.734 -8.224 7.734 -8.304 7.854 -8.344 8.014 -8.264 8.014 -8.184 8.014 -8.104 POLYLINE BLACK 7.574 -8.144 7.494 -8.184 7.454 -8.264 7.534 -8.344 7.614 -8.344 7.694 -8.304 7.694 -8.224 7.614 -8.144 POLYLINE BLACK 7.374 -8.104 7.294 -8.144 7.214 -8.184 7.174 -8.264 7.214 -8.344 7.294 -8.344 7.374 -8.304 7.454 -8.224 7.414 -8.104 7.334 -8.144 POLYLINE BLACK 7.094 -8.144 6.974 -8.144 6.894 -8.224 6.894 -8.304 6.974 -8.344 7.094 -8.264 7.134 -8.184 7.054 -8.144 POLYLINE BLACK 6.774 -8.104 6.694 -8.104 6.614 -8.104 6.574 -8.224 6.614 -8.304 6.694 -8.344 6.774 -8.304 6.854 -8.224 6.814 -8.144 POLYLINE BLACK 6.494 -8.104 6.414 -8.144 6.294 -8.184 6.214 -8.224 6.294 -8.304 6.374 -8.344 6.454 -8.344 6.574 -8.264 6.574 -8.184 POLYLINE BLACK 6.174 -8.144 6.094 -8.144 6.054 -8.264 6.054 -8.344 6.134 -8.304 6.214 -8.224 6.294 -8.104 6.214 -8.024 POLYLINE BLACK 5.934 -8.104 5.854 -8.104 5.774 -8.184 5.694 -8.344 5.814 -8.344 5.974 -8.224 5.894 -8.184 POLYLINE BLACK 5.534 -8.184 5.494 -8.344 5.614 -8.304 5.694 -8.264 5.774 -8.184 5.694 -8.064 5.614 -8.064 POLYLINE BLACK 5.334 -8.184 5.374 -8.104 5.294 -8.064 5.214 -8.104 5.134 -8.184 5.094 -8.304 5.174 -8.344 5.294 -8.264 5.374 -8.184 5.454 -8.144 5.374 -8.104 5.294 -8.144 POLYLINE BLACK 5.014 -8.104 4.854 -8.184 4.814 -8.304 4.894 -8.344 5.134 -8.264 5.214 -8.144 5.094 -8.104 POLYLINE BLACK 4.734 -8.144 4.654 -8.184 4.574 -8.264 4.534 -8.344 4.614 -8.384 4.854 -8.304 4.894 -8.224 4.774 -8.144 POLYLINE BLACK 4.414 -8.104 4.334 -8.144 4.254 -8.224 4.294 -8.304 4.374 -8.384 4.454 -8.304 4.494 -8.184 4.494 -8.104 4.414 -8.144 POLYLINE BLACK 4.214 -8.144 4.174 -8.064 4.094 -8.144 4.054 -8.264 4.014 -8.344 4.134 -8.304 4.214 -8.264 4.294 -8.184 4.294 -8.104 4.174 -8.144 POLYLINE BLACK 3.894 -8.104 3.774 -8.144 3.694 -8.184 3.654 -8.304 3.734 -8.384 3.814 -8.424 3.934 -8.384 3.974 -8.304 4.014 -8.184 3.974 -8.104 POLYLINE BLACK 3.454 -8.144 3.374 -8.184 3.334 -8.264 3.334 -8.384 3.574 -8.384 3.654 -8.304 3.694 -8.224 3.654 -8.144 POLYLINE BLACK 3.294 -8.184 3.214 -8.144 3.134 -8.104 3.054 -8.104 2.974 -8.184 3.054 -8.264 3.134 -8.264 3.214 -8.304 3.294 -8.224 3.334 -8.144 3.214 -8.184 POLYLINE BLACK 2.814 -8.104 2.734 -8.144 2.694 -8.224 2.734 -8.304 2.774 -8.224 2.774 -8.304 2.854 -8.304 2.934 -8.224 2.974 -8.144 2.894 -8.104 2.814 -8.104 POLYLINE BLACK 2.494 -8.184 2.374 -8.184 2.294 -8.224 2.294 -8.304 2.414 -8.384 2.574 -8.304 2.614 -8.224 POLYLINE BLUE -10.186 -6.064 -10.226 -6.144 -10.186 -6.224 -10.226 -6.304 -10.226 -6.464 POLYLINE BLUE -10.506 -6.464 -10.426 -6.464 -10.306 -6.464 -10.226 -6.464 POLYLINE BLUE -10.346 -5.544 -10.266 -5.584 -10.186 -5.664 -10.186 -5.744 -10.146 -5.824 -10.226 -5.944 -10.306 -6.104 -10.306 -6.184 -10.346 -6.264 -10.266 -6.424 -10.146 -6.504 POLYLINE BLACK 0.014 -8.064 -0.066 -8.064 -0.106 -8.144 -0.106 -8.224 -0.026 -8.224 0.094 -8.224 0.174 -8.184 0.134 -8.104 0.014 -8.064 POLYLINE BLACK -1.186 -5.344 -1.306 -5.384 -1.346 -5.464 -1.426 -5.584 -1.466 -5.664 -1.546 -5.744 -1.546 -5.904 -1.586 -5.984 -1.586 -6.184 -1.626 -6.344 -1.666 -6.584 -1.666 -6.744 POLYLINE BLACK -1.826 -5.104 -1.986 -5.264 -2.066 -5.464 -2.146 -5.624 -2.146 -5.704 -2.186 -5.784 -2.186 -6.104 -2.266 -6.344 POLYLINE BLACK -2.506 -4.864 -2.586 -4.904 -2.666 -4.984 -2.706 -5.064 -2.866 -5.224 -2.986 -5.304 -3.106 -5.544 -3.106 -5.704 -3.146 -5.824 -3.146 -5.904 -3.186 -6.064 -3.186 -6.144 POLYLINE BLACK -0.946 -4.744 -1.026 -4.744 -1.146 -4.824 -1.186 -4.904 -1.226 -5.064 -1.226 -5.144 -1.066 -5.304 -0.986 -5.344 -0.866 -5.424 -0.786 -5.424 -0.706 -5.424 -0.626 -5.384 -0.546 -5.344 -0.506 -5.264 -0.506 -5.184 -0.546 -5.104 -0.626 -4.944 -0.666 -4.864 POLYLINE BLACK -1.506 -4.544 -1.546 -4.464 -1.666 -4.544 -1.746 -4.624 -1.786 -4.704 -1.746 -4.984 -1.666 -5.024 -1.546 -5.024 -1.426 -5.024 -1.346 -4.984 -1.266 -5.024 -1.186 -4.944 -1.146 -4.864 -1.186 -4.784 -1.186 -4.664 -1.266 -4.584 -1.346 -4.544 -1.426 -4.544 POLYLINE BLACK -2.026 -4.424 -2.106 -4.424 -2.266 -4.504 -2.386 -4.584 -2.466 -4.624 -2.466 -4.824 -2.426 -4.904 -2.346 -4.944 -2.266 -4.984 -2.186 -4.984 -2.106 -4.944 -1.986 -4.864 -1.906 -4.864 -1.826 -4.784 -1.826 -4.664 -1.866 -4.584 -1.906 -4.504 -1.986 -4.424 POLYLINE BLACK -0.466 -5.424 -0.506 -5.584 -0.546 -5.504 -0.626 -5.624 -0.626 -5.704 -0.706 -5.864 -0.626 -5.904 -0.546 -5.904 -0.426 -5.904 -0.346 -5.824 -0.306 -5.744 -0.306 -5.664 -0.306 -5.584 -0.346 -5.504 -0.426 -5.504 POLYLINE BLACK -0.746 -5.984 -0.826 -6.024 -0.866 -6.144 -0.906 -6.224 -0.986 -6.304 -1.026 -6.384 -1.026 -6.384 -1.026 -6.464 -0.946 -6.464 -0.826 -6.424 -0.746 -6.384 -0.706 -6.264 -0.706 -6.184 -0.746 -6.104 -0.746 -6.024 POLYLINE BLACK -0.426 -7.304 -0.626 -7.504 -0.746 -7.744 -0.786 -7.864 -0.786 -8.024 -0.826 -8.144 -0.786 -8.224 POLYLINE BLACK -1.026 -7.224 -1.106 -7.304 -1.186 -7.424 -1.226 -7.504 -1.266 -7.624 -1.306 -7.864 -1.306 -8.064 POLYLINE BLACK -1.466 -7.104 -1.386 -7.064 -1.306 -7.064 -1.226 -7.064 -1.146 -7.064 -1.066 -7.064 -0.946 -7.064 -0.866 -7.064 -0.666 -7.104 -0.586 -7.144 -0.506 -7.144 -0.426 -7.184 -0.306 -7.184 -0.226 -7.264 -0.146 -7.384 -0.066 -7.344 0.014 -7.384 POLYLINE BLACK -0.866 -6.664 -0.746 -6.704 -0.746 -6.624 -0.666 -6.624 -0.586 -6.584 -0.506 -6.584 -0.426 -6.584 -0.226 -6.624 -0.146 -6.664 -0.106 -6.744 -0.106 -6.824 -0.026 -6.904 0.014 -6.984 0.094 -7.104 0.174 -7.104 POLYLINE BLACK -1.586 -6.744 -1.586 -6.824 -1.626 -6.904 -1.546 -6.984 -1.426 -7.024 -1.346 -6.984 -1.146 -6.944 -0.986 -6.944 -0.906 -6.904 -0.826 -6.864 -0.826 -6.784 -0.906 -6.744 -0.946 -6.664 -1.026 -6.624 -1.186 -6.624 -1.426 -6.744 -1.546 -6.704 -1.666 -6.744 POLYLINE BLACK -3.226 -5.984 -3.306 -6.144 -3.466 -6.344 -3.506 -6.424 -3.626 -6.584 -3.706 -6.824 -3.786 -7.104 -3.786 -7.304 -3.826 -7.384 POLYLINE BLACK -2.306 -6.424 -2.386 -6.504 -2.426 -6.584 -2.546 -6.744 -2.786 -6.984 -2.866 -7.144 -2.906 -7.344 -2.906 -7.424 -2.946 -7.624 POLYLINE BLACK -1.546 -7.064 -1.666 -7.144 -1.746 -7.264 -1.826 -7.504 -1.906 -7.584 -1.946 -7.664 -2.026 -7.744 -2.026 -7.824 POLYLINE BLACK -4.066 -5.864 -4.146 -5.944 -4.306 -6.064 -4.386 -6.144 -4.426 -6.304 -4.466 -6.504 -4.506 -6.584 -4.586 -6.784 -4.626 -6.864 -4.626 -6.944 POLYLINE BLACK -4.986 -6.024 -4.906 -6.024 -4.826 -6.024 -4.746 -6.064 -4.666 -6.104 -4.546 -6.104 -4.466 -6.144 -4.386 -6.224 -4.306 -6.224 -4.226 -6.344 -4.146 -6.384 -4.066 -6.424 -3.986 -6.424 -3.906 -6.424 -3.786 -6.464 -3.706 -6.544 -3.626 -6.584 -3.466 -6.664 -3.306 -6.824 -3.106 -6.784 -3.026 -6.864 -2.946 -6.904 -2.786 -7.064 -2.706 -7.064 -2.586 -7.104 -2.426 -7.184 -2.226 -7.184 -2.146 -7.264 -2.026 -7.304 -1.946 -7.304 -1.866 -7.304 -1.786 -7.304 -1.666 -7.344 POLYLINE BLACK -4.586 -5.144 -4.546 -5.224 -4.546 -5.304 -4.346 -5.504 -4.266 -5.544 -4.186 -5.624 -4.106 -5.664 -4.026 -5.744 -3.946 -5.784 -3.866 -5.864 -3.786 -5.864 -3.706 -5.864 -3.626 -5.864 -3.546 -5.864 -3.426 -5.904 -3.346 -5.944 -3.266 -5.984 -3.186 -5.984 -3.186 -5.944 -3.106 -5.984 -3.026 -6.024 -2.906 -6.024 -2.826 -6.104 -2.746 -6.104 -2.666 -6.144 -2.546 -6.184 -2.466 -6.264 -2.386 -6.264 -2.306 -6.224 -2.226 -6.344 -2.146 -6.344 -2.106 -6.424 -1.946 -6.584 -1.866 -6.624 -1.786 -6.664 -1.626 -6.824 -1.546 -6.864 -1.506 -7.024 POLYLINE BLUE 0.494 -6.624 0.454 -6.704 0.454 -6.784 0.494 -6.944 0.534 -7.024 0.614 -6.984 0.654 -6.904 0.694 -6.824 0.774 -6.744 POLYLINE BLUE 0.814 -6.064 0.814 -6.144 0.734 -6.304 0.694 -6.424 0.694 -6.504 0.654 -6.584 0.654 -6.704 0.614 -6.784 0.614 -7.024 POLYLINE BLACK -0.106 -8.064 -0.226 -8.104 -0.226 -8.184 -0.106 -8.144 -0.106 -8.064 -0.226 -8.064 POLYLINE BLACK -0.386 -8.064 -0.506 -8.024 -0.426 -8.144 -0.346 -8.144 -0.306 -8.024 POLYLINE BLACK -1.146 -8.264 -1.066 -8.264 -0.946 -8.264 -0.866 -8.264 -0.786 -8.224 -0.706 -8.224 -0.626 -8.224 -0.506 -8.224 -0.426 -8.184 -0.346 -8.184 -0.226 -8.224 -0.146 -8.224 -0.066 -8.224 0.014 -8.264 0.134 -8.304 0.294 -8.304 0.374 -8.384 0.414 -8.304 0.694 -8.304 0.854 -8.384 POLYLINE BLACK 2.094 -8.184 2.014 -8.224 1.934 -8.304 1.934 -8.424 2.014 -8.424 2.134 -8.384 2.254 -8.224 2.214 -8.144 2.094 -8.144 POLYLINE BLACK 1.854 -8.064 1.734 -8.104 1.694 -8.184 1.614 -8.264 1.574 -8.344 1.694 -8.424 1.814 -8.304 1.934 -8.224 1.974 -8.144 1.854 -8.104 1.654 -8.144 POLYLINE BLACK 1.494 -8.104 1.374 -8.144 1.294 -8.184 1.254 -8.264 1.334 -8.384 1.454 -8.384 1.614 -8.184 1.494 -8.064 POLYLINE BLACK 1.174 -8.104 1.094 -8.104 1.014 -8.184 0.974 -8.264 1.014 -8.344 1.094 -8.344 1.174 -8.304 1.254 -8.224 1.254 -8.144 1.174 -8.104 POLYLINE BLACK -0.666 -8.024 -0.746 -8.104 -0.746 -8.184 -0.666 -8.144 -0.546 -8.144 -0.546 -8.024 -0.586 -7.904 POLYLINE BLACK -0.906 -8.024 -1.026 -8.104 -1.026 -8.224 -0.826 -8.184 -0.746 -8.104 -0.826 -8.144 POLYLINE BLACK -1.146 -7.984 -1.226 -8.024 -1.266 -8.104 -1.186 -8.144 -1.106 -8.144 -1.026 -8.104 -1.106 -8.024 POLYLINE BLACK -1.426 -7.984 -1.546 -8.104 -1.546 -8.184 -1.426 -8.184 -1.306 -8.144 -1.426 -8.104 -1.506 -8.104 POLYLINE BLACK -1.626 -7.984 -1.706 -7.984 -1.826 -8.064 -1.866 -8.144 -1.706 -8.144 -1.626 -8.064 -1.546 -8.024 -1.666 -7.984 -1.786 -8.064 POLYLINE BLACK -1.946 -7.864 -2.066 -7.904 -2.146 -8.024 -2.106 -8.104 -1.946 -8.024 -1.866 -7.944 -1.986 -7.904 POLYLINE BLACK -2.226 -7.864 -2.306 -7.864 -2.386 -7.904 -2.466 -7.984 -2.226 -8.024 -2.066 -7.864 -2.106 -7.784 -2.226 -7.784 POLYLINE BLACK -2.546 -7.744 -2.706 -7.904 -2.586 -7.944 -2.506 -7.984 -2.426 -7.904 -2.426 -7.824 -2.506 -7.864 POLYLINE BLACK -2.906 -7.744 -2.986 -7.784 -3.026 -7.864 -2.906 -7.944 -2.786 -7.904 -2.706 -7.824 -2.826 -7.744 -2.946 -7.824 POLYLINE BLACK -3.266 -7.544 -3.386 -7.624 -3.346 -7.744 -3.226 -7.824 -3.146 -7.824 -3.066 -7.744 -3.026 -7.664 -3.146 -7.584 -3.266 -7.624 POLYLINE BLACK -3.546 -7.424 -3.666 -7.424 -3.706 -7.504 -3.586 -7.584 -3.466 -7.584 -3.386 -7.544 -3.306 -7.464 -3.506 -7.424 -3.586 -7.464 POLYLINE BLACK -3.946 -7.264 -4.026 -7.344 -4.026 -7.424 -3.866 -7.504 -3.746 -7.424 -3.666 -7.344 -3.786 -7.304 -3.866 -7.344 POLYLINE BLACK -4.346 -7.064 -4.346 -7.144 -4.386 -7.264 -4.306 -7.384 -4.106 -7.464 -4.026 -7.344 -3.986 -7.224 -4.066 -7.144 -4.146 -7.144 POLYLINE BLACK -4.666 -7.064 -4.746 -7.184 -4.546 -7.184 -4.466 -7.144 -4.546 -6.984 -4.666 -7.024 POLYLINE BLACK -4.826 -6.784 -4.906 -6.784 -4.986 -6.944 -4.986 -7.064 -4.906 -7.104 -4.826 -7.104 -4.626 -6.944 -4.626 -6.864 -4.826 -6.864 -4.906 -6.984 POLYLINE BLACK -5.066 -6.664 -5.106 -6.744 -5.066 -6.824 -4.986 -6.824 -4.826 -6.704 -4.826 -6.624 -4.946 -6.624 -5.026 -6.664 POLYLINE BLACK -3.346 -2.544 -3.506 -2.704 -3.546 -2.784 -3.626 -2.824 -3.666 -2.904 -3.746 -2.984 -3.786 -3.064 -3.906 -3.104 -3.946 -3.224 -3.986 -3.304 -4.066 -3.384 -4.106 -3.464 -4.186 -3.544 -4.186 -3.624 -4.266 -3.704 -4.266 -3.824 -4.346 -3.944 -4.346 -4.024 -4.386 -4.104 -4.426 -4.384 -4.426 -4.624 -4.466 -4.704 -4.466 -4.784 -4.506 -4.904 -4.546 -4.984 -4.546 -5.144 POLYLINE BLACK -6.826 -2.904 -6.906 -2.984 -6.906 -3.064 -6.946 -3.144 -6.946 -3.224 -7.026 -3.384 -7.186 -3.624 -7.226 -3.704 -7.266 -3.824 -7.266 -4.224 -7.226 -4.424 -7.226 -4.504 -7.186 -4.624 -7.186 -4.784 -7.146 -4.864 -7.146 -5.024 -7.106 -5.104 -7.106 -5.784 -7.146 -5.864 -7.106 -5.944 -7.106 -6.024 -7.026 -6.184 -6.946 -6.264 -6.946 -6.384 -6.866 -6.464 POLYLINE BLACK -9.706 -6.384 -9.746 -6.504 -9.746 -6.704 -9.786 -6.784 -9.786 -6.864 -9.746 -6.944 -9.666 -7.184 -9.506 -7.384 POLYLINE BLACK -9.066 -5.624 -9.106 -5.704 -9.106 -5.784 -9.146 -5.904 -9.226 -5.984 -9.306 -6.184 -9.306 -6.424 -9.266 -6.584 -9.186 -6.664 -9.146 -6.744 -9.026 -6.944 -8.906 -7.024 -8.826 -7.024 POLYLINE BLACK -8.226 -2.984 -8.266 -3.064 -8.266 -3.144 -8.346 -3.304 -8.386 -3.424 -8.386 -3.824 -8.346 -3.984 -8.346 -3.944 -8.306 -4.024 -8.226 -4.104 -8.226 -4.184 -8.186 -4.304 -8.186 -4.384 -8.106 -4.544 -8.106 -4.584 -8.066 -4.664 -8.066 -4.784 -8.026 -4.784 -8.026 -5.184 -7.986 -5.264 -7.986 -5.464 -8.106 -5.704 -8.106 -6.024 -8.146 -6.144 -8.146 -6.424 -7.986 -6.744 -7.906 -6.824 POLYLINE BLACK -6.626 -2.144 -6.706 -2.224 -6.746 -2.304 -6.706 -2.384 -6.706 -2.544 -6.666 -2.624 -6.586 -2.824 -6.506 -2.784 -6.426 -2.824 -6.346 -2.824 -6.266 -2.824 -6.146 -2.824 -6.066 -2.824 -6.026 -2.704 -5.986 -2.624 -5.986 -2.544 -6.106 -2.344 -6.186 -2.344 -6.186 -2.224 -6.266 -2.104 -6.466 -1.984 -6.626 -2.024 POLYLINE BLACK -7.186 -2.264 -7.306 -2.264 -7.386 -2.344 -7.426 -2.424 -7.386 -2.504 -7.346 -2.624 -7.346 -2.704 -7.266 -2.784 -7.186 -2.784 -7.106 -2.824 -7.026 -2.864 -6.906 -2.864 -6.826 -2.784 -6.746 -2.784 -6.706 -2.704 -6.706 -2.624 -6.706 -2.504 -6.786 -2.344 -6.946 -2.224 POLYLINE BLACK -7.946 -2.264 -8.026 -2.264 -8.146 -2.344 -8.186 -2.464 -8.186 -2.544 -8.066 -2.544 -8.026 -2.744 -7.946 -2.824 -7.906 -2.904 -7.826 -2.944 -7.706 -2.904 -7.626 -2.864 -7.546 -2.864 -7.466 -2.864 -7.386 -2.904 -7.346 -2.824 -7.386 -2.744 -7.466 -2.624 -7.506 -2.504 -7.706 -2.304 -7.866 -2.224 -7.986 -2.184 POLYLINE BLACK -8.906 -2.424 -8.946 -2.504 -8.986 -2.624 -8.986 -2.704 -8.906 -2.864 -8.826 -2.824 -8.706 -2.864 -8.626 -2.904 -8.466 -2.944 -8.346 -2.944 -8.226 -2.904 -8.146 -2.904 -8.066 -2.944 -7.986 -2.824 -7.986 -2.744 -8.066 -2.664 -8.106 -2.544 -8.186 -2.504 -8.306 -2.424 -8.746 -2.424 POLYLINE BLACK -9.026 -3.864 -8.946 -3.824 -8.826 -3.784 -8.746 -3.784 -8.706 -3.704 -8.626 -3.704 -8.506 -3.584 -8.386 -3.624 -8.266 -3.544 -8.186 -3.544 -7.986 -3.504 -7.866 -3.464 -7.786 -3.464 -7.666 -3.424 -7.586 -3.464 -7.466 -3.464 -7.266 -3.464 -7.146 -3.464 -7.066 -3.424 -6.986 -3.384 -6.866 -3.424 -6.706 -3.384 -6.466 -3.384 -6.266 -3.384 -5.986 -3.384 -5.866 -3.384 -5.666 -3.384 POLYLINE BLACK -9.146 -5.624 -9.066 -5.544 -8.986 -5.504 -8.906 -5.424 -8.786 -5.384 -8.706 -5.344 -8.546 -5.304 -8.386 -5.224 -8.266 -5.184 -8.186 -5.144 -7.986 -5.064 -7.866 -5.024 -7.666 -4.984 -7.586 -4.944 -7.506 -4.944 -7.306 -4.904 -7.066 -4.824 -6.946 -4.784 -6.706 -4.744 -6.506 -4.704 -6.266 -4.624 -6.066 -4.584 POLYLINE BLACK -9.626 -6.144 -9.546 -6.144 -9.466 -6.064 -9.386 -6.024 -9.306 -5.944 -9.266 -5.864 -9.226 -5.784 -9.186 -5.704 -9.186 -5.584 -9.146 -5.504 -9.146 -5.424 -9.146 -5.344 -9.106 -5.224 -9.106 -5.144 -9.106 -5.024 -9.106 -4.904 -9.066 -4.784 -9.066 -4.704 -9.066 -4.624 -9.066 -4.504 -9.026 -4.424 -9.026 -4.344 -9.026 -4.144 -9.026 -4.064 -9.026 -3.984 -8.986 -3.784 -8.986 -3.704 -8.946 -3.624 -8.946 -3.504 -8.946 -3.424 -8.946 -3.344 -8.906 -3.264 -8.946 -3.184 -8.986 -3.104 POLYLINE BLACK -9.586 -6.264 -9.746 -6.344 -9.986 -6.624 -10.066 -6.704 -10.106 -6.784 -10.106 -6.864 -10.146 -7.024 -10.186 -7.104 -10.186 -7.224 -10.066 -7.304 -10.066 -7.384 -9.946 -7.464 -9.866 -7.464 -9.826 -7.544 -9.746 -7.544 -9.626 -7.504 POLYLINE BLACK -9.666 -7.504 -9.546 -7.424 -9.466 -7.344 -9.386 -7.304 -9.306 -7.224 -9.226 -7.184 -9.106 -7.144 -9.026 -7.104 -8.946 -7.064 -8.826 -7.064 -8.746 -7.024 -8.626 -6.984 -8.546 -6.984 -8.466 -6.984 -8.346 -6.944 -8.226 -6.904 -8.066 -6.864 -7.986 -6.824 -7.906 -6.784 -7.826 -6.784 -7.706 -6.744 -7.546 -6.664 -7.386 -6.624 -7.306 -6.584 -7.026 -6.544 -6.946 -6.504 -6.826 -6.464 -6.746 -6.424 -6.626 -6.384 POLYLINE BLACK -6.786 -0.984 -6.706 -0.944 -6.586 -0.984 -6.506 -1.064 -6.426 -1.104 -6.226 -1.104 -6.106 -1.144 -6.026 -1.144 -5.866 -1.184 -5.706 -1.224 -5.546 -1.304 -5.426 -1.344 -5.346 -1.344 -5.266 -1.424 -5.186 -1.544 -5.106 -1.584 -5.026 -1.744 -4.986 -1.904 -4.986 -1.984 -5.026 -2.104 -5.026 -2.424 -5.106 -2.584 -5.106 -2.664 -5.186 -2.744 -5.226 -2.824 -5.306 -2.904 -5.346 -2.984 -5.386 -3.104 -5.466 -3.184 -5.506 -3.304 -5.546 -3.384 -5.626 -3.464 -5.666 -3.584 -5.706 -3.664 -5.706 -3.744 -5.746 -3.864 -5.826 -4.024 -5.866 -4.144 -5.906 -4.224 -5.906 -4.384 -5.946 -4.464 -5.946 -4.544 -5.986 -4.624 -6.026 -4.744 -6.066 -4.824 -6.066 -4.904 -6.106 -4.984 -6.106 -5.104 -6.146 -5.184 -6.146 -5.344 -6.186 -5.424 -6.186 -5.504 POLYLINE BLACK -7.986 0.896 -7.866 0.856 -7.786 0.776 -7.706 0.776 -7.626 0.776 -7.586 0.696 -7.386 0.656 -7.226 0.656 -7.026 0.616 -6.746 0.536 -6.426 0.536 -6.306 0.496 -6.226 0.496 -6.106 0.496 -6.026 0.496 -5.946 0.496 -5.826 0.496 -5.746 0.536 -5.666 0.576 -5.506 0.576 -5.306 0.576 -5.266 0.696 -5.186 0.736 -5.026 0.936 -5.026 1.136 POLYLINE BLACK -2.786 1.016 -2.786 0.856 -2.746 0.736 -2.706 0.656 -2.626 0.536 -2.546 0.456 -2.466 0.376 -2.386 0.296 -2.266 0.256 -2.186 0.216 -2.106 0.216 -2.026 0.176 -1.946 0.176 -1.826 0.136 -1.746 0.136 -1.666 0.176 -1.586 0.176 -1.466 0.216 -1.386 0.256 -1.266 0.336 -1.106 0.496 -1.026 0.496 -0.906 0.536 -0.746 0.616 -0.506 0.696 -0.386 0.736 -0.106 0.816 POLYLINE BLACK -6.506 -5.744 -6.426 -5.704 -6.306 -5.744 -6.226 -5.784 -6.146 -5.904 -6.066 -5.904 -6.026 -6.024 -5.986 -6.104 -5.986 -6.184 -5.946 -6.144 -5.946 -6.264 -6.026 -6.344 -6.146 -6.384 -6.226 -6.424 -6.306 -6.424 -6.466 -6.344 -6.626 -6.184 -6.746 -6.104 -6.786 -6.024 -6.786 -5.944 -6.706 -5.864 -6.626 -5.784 -6.546 -5.744 -6.506 -5.664 POLYLINE BLACK -5.666 -6.064 -5.586 -6.144 -5.506 -6.184 -5.426 -6.184 -5.346 -6.224 -5.226 -6.264 -5.186 -6.344 -5.106 -6.344 -5.026 -6.464 -5.026 -6.544 -5.186 -6.624 -5.546 -6.624 -5.626 -6.504 -5.626 -6.424 -5.746 -6.424 -5.826 -6.344 -5.866 -6.264 -5.826 -6.144 -5.786 -6.064 -5.786 -5.984 POLYLINE BLACK -5.306 -4.824 -5.386 -4.864 -5.466 -5.024 -5.466 -5.184 -5.426 -5.264 -5.426 -5.384 -5.346 -5.424 -5.226 -5.464 -5.146 -5.504 -5.066 -5.504 -4.906 -5.464 -4.826 -5.464 -4.746 -5.384 -4.706 -5.304 -4.706 -5.224 -4.706 -5.104 -4.706 -5.024 -4.746 -4.944 -4.786 -4.864 -4.866 -4.784 POLYLINE BLACK -5.386 -4.544 -5.306 -4.504 -5.226 -4.424 -5.146 -4.384 -5.066 -4.384 -4.986 -4.384 -4.866 -4.424 -4.786 -4.424 -4.706 -4.504 -4.666 -4.584 -4.746 -4.624 -4.826 -4.744 -4.866 -4.664 -4.906 -4.744 -4.986 -4.824 -4.986 -4.904 -5.066 -4.984 -5.146 -4.984 -5.146 -4.904 -5.226 -4.784 -5.226 -4.704 -5.346 -4.664 -5.426 -4.624 POLYLINE BLACK -0.386 -0.344 -0.506 -0.384 -0.546 -0.464 -0.546 -0.544 -0.466 -0.704 -0.386 -0.704 -0.266 -0.664 -0.186 -0.584 -0.146 -0.504 -0.106 -0.384 -0.186 -0.304 POLYLINE BLACK -0.706 -0.584 -0.786 -0.624 -0.906 -0.704 -0.946 -0.784 -0.946 -0.864 -0.906 -0.944 -0.826 -1.024 -0.746 -1.024 -0.666 -0.944 -0.546 -0.824 -0.506 -0.744 -0.506 -0.624 -0.546 -0.544 -0.626 -0.504 -0.706 -0.544 -0.746 -0.664 POLYLINE BLACK -1.066 -0.904 -1.146 -0.904 -1.226 -0.984 -1.266 -1.064 -1.266 -1.144 -1.226 -1.224 -1.146 -1.304 -1.066 -1.304 -0.946 -1.184 -0.866 -1.104 -0.866 -1.024 -0.906 -0.944 -0.946 -0.824 -0.986 -0.744 POLYLINE BLACK -1.506 -1.184 -1.586 -1.184 -1.626 -1.304 -1.706 -1.304 -1.786 -1.424 -1.786 -1.504 -1.386 -1.504 -1.306 -1.424 -1.266 -1.344 -1.266 -1.264 -1.346 -1.184 -1.466 -1.104 POLYLINE BLACK -1.906 -1.424 -1.986 -1.424 -2.026 -1.544 -2.106 -1.504 -2.186 -1.664 -2.106 -1.824 -2.026 -1.864 -1.906 -1.864 -1.826 -1.864 -1.746 -1.864 -1.666 -1.824 -1.626 -1.704 -1.666 -1.624 -1.706 -1.504 -1.706 -1.424 -1.786 -1.384 -1.946 -1.504 POLYLINE BLACK -2.226 -1.944 -2.386 -1.944 -2.466 -2.024 -2.426 -2.144 -2.426 -2.224 -2.346 -2.224 -2.266 -2.224 -2.186 -2.224 -2.106 -2.184 -1.986 -2.144 -1.946 -2.024 -1.946 -1.944 -1.906 -1.864 -1.946 -1.744 -2.066 -1.704 -2.146 -1.744 POLYLINE BLACK -2.666 -2.144 -2.746 -2.104 -2.826 -2.184 -2.906 -2.344 -2.866 -2.464 -2.746 -2.504 -2.666 -2.504 -2.586 -2.504 -2.506 -2.464 -2.426 -2.384 -2.426 -2.304 -2.466 -2.224 -2.506 -2.104 -2.546 -2.024 -2.626 -2.104 POLYLINE BLACK -3.226 -2.424 -3.306 -2.584 -3.306 -2.784 -3.226 -2.824 -3.106 -2.864 -3.026 -2.864 -2.906 -2.784 -2.866 -2.704 -2.786 -2.544 -2.826 -2.464 -2.866 -2.344 -2.986 -2.304 -3.066 -2.344 -3.146 -2.224 -3.226 -2.224 POLYLINE BLACK 0.088 0.154 -0.092 -0.026 -0.212 -0.086 -0.332 -0.206 -0.212 -0.266 -0.032 -0.386 0.088 -0.446 0.268 -0.266 0.328 -0.146 0.388 -0.026 0.268 0.094 0.148 0.094 POLYLINE BLACK -0.092 0.034 therion/samples/pocket-topo/Demo_e.xvi0000644000076400010400000010023011133067024021106 0ustar userAdministratorsset XVIgrids {1.0 m} set XVIstations { {0.00 0.00 503.0} {-190.47 -93.82 503.1} {-233.86 -208.03 503.2} {-382.64 -279.61 503.3} {-233.86 -208.03 504.0} {-184.92 -243.31 504.1} {-57.40 -292.28 504.2} {93.31 -313.54 504.3} {190.28 -309.29 504.4} {322.01 -310.75 504.5} {388.94 -219.25 504.6} } set XVIshots { {322.01 -310.75 388.94 -219.25} {388.94 -219.25 382.91 -218.70} {388.94 -219.25 375.12 -204.13} {388.94 -219.25 392.64 -236.85} {190.28 -309.29 322.01 -310.75} {322.01 -310.75 321.81 -272.36} {322.01 -310.75 325.12 -306.85} {322.01 -310.75 319.84 -319.13} {93.31 -313.54 190.28 -309.29} {190.28 -309.29 169.80 -308.90} {190.28 -309.29 217.09 -309.13} {190.28 -309.29 211.77 -307.32} {190.28 -309.29 210.20 -306.89} {190.28 -309.29 213.74 -307.24} {190.28 -309.29 216.38 -305.98} {190.28 -309.29 220.28 -301.69} {190.28 -309.29 193.27 -323.82} {190.28 -309.29 253.35 -244.69} {-57.40 -292.28 93.31 -313.54} {93.31 -313.54 83.35 -305.08} {93.31 -313.54 105.35 -309.13} {93.31 -313.54 94.92 -321.65} {93.31 -313.54 93.94 -265.04} {-184.92 -243.31 -57.40 -292.28} {-57.40 -292.28 -56.65 -292.76} {-57.40 -292.28 -56.73 -314.21} {-57.40 -292.28 -58.11 -273.19} {-233.86 -208.03 -184.92 -243.31} {-184.92 -243.31 -152.80 -229.09} {-184.92 -243.31 -210.31 -230.51} {-184.92 -243.31 -170.35 -285.71} {-184.92 -243.31 -181.02 -214.80} {-233.86 -208.03 -233.86 -208.03} {-233.86 -208.03 -227.52 -214.21} {-233.86 -208.03 -262.36 -207.01} {-233.86 -208.03 -242.68 -235.79} {-233.86 -208.03 -212.17 -207.32} {-233.86 -208.03 -382.64 -279.61} {-382.64 -279.61 -380.39 -294.37} {-382.64 -279.61 -368.27 -278.23} {-382.64 -279.61 -379.76 -281.54} {-382.64 -279.61 -372.32 -256.61} {-190.47 -93.82 -233.86 -208.03} {0.00 0.00 -190.47 -93.82} {-190.47 -93.82 -231.81 -97.13} {-190.47 -93.82 -227.99 -0.79} {-190.47 -93.82 -214.84 21.26} {-190.47 -93.82 -137.20 -115.39} {0.00 0.00 -55.31 2.80} {0.00 0.00 -18.74 4.84} {0.00 0.00 -37.28 17.80} } set XVIsketchlines { {black 73.78 -233.23 72.60 -236.77 70.24 -239.13 66.69 -241.50 63.15 -246.22 58.43 -250.94 57.24 -254.49 54.88 -255.67 52.52 -260.39 50.16 -262.76 48.98 -267.48 48.98 -280.47 47.80 -284.02 47.80 -286.38 46.61 -288.74 46.61 -291.10 45.43 -293.46 45.43 -295.83 44.25 -299.37 43.07 -301.73 44.25 -304.09 38.35 -315.91} {black 82.05 -237.95 77.32 -247.40 76.14 -250.94 76.14 -253.31 74.96 -255.67 74.96 -261.57 72.60 -266.30 72.60 -268.66 74.96 -273.39 76.14 -276.93 80.87 -279.29 84.41 -281.65 89.13 -284.02 95.04 -286.38 97.40 -287.56 98.58 -289.92 98.58 -299.37 99.76 -301.73 99.76 -305.28 98.58 -307.64} {black 6.46 -279.29 5.28 -281.65 4.09 -285.20 1.73 -287.56 0.55 -289.92 -1.81 -292.28 -2.99 -295.83 -4.17 -298.19 -5.35 -301.73 -5.35 -306.46 -6.54 -308.82 -6.54 -318.27} {black 315.51 -322.20 321.81 -319.06 324.96 -314.33 328.11 -312.76 337.56 -303.31 340.71 -303.31 347.01 -300.16} {black 402.13 -237.17 398.98 -238.74 395.83 -245.04 400.55 -248.19 403.70 -248.19 406.85 -246.61 410.00 -243.46 408.43 -240.31 410.00 -237.17 405.28 -234.02} {black 391.10 -234.02 387.95 -235.59 384.80 -238.74 383.23 -241.89 383.23 -248.19 386.38 -248.19 394.25 -245.04 397.40 -241.89 395.83 -238.74 392.68 -238.74} {black 376.93 -235.59 372.20 -237.17 369.06 -240.31 369.06 -248.19 372.20 -251.34 380.08 -248.19 383.23 -245.04 384.80 -241.89 383.23 -238.74 378.50 -237.17 375.35 -240.31} {black 362.76 -245.04 361.18 -248.19 358.03 -251.34 354.88 -256.06 356.46 -259.21 359.61 -260.79 367.48 -259.21 370.63 -254.49 370.63 -251.34 367.48 -249.76 362.76 -251.34} {black 353.31 -263.94 350.16 -268.66 348.58 -271.81 348.58 -274.96 350.16 -278.11 353.31 -278.11 358.03 -274.96 361.18 -267.09 358.03 -259.21 353.31 -259.21 350.16 -262.36} {black 358.03 -278.11 354.88 -279.69 353.31 -284.41 350.16 -290.71 350.16 -293.86 353.31 -297.01 361.18 -292.28 367.48 -284.41 367.48 -279.69 361.18 -278.11 356.46 -278.11} {black 367.48 -293.86 364.33 -295.43 361.18 -297.01 359.61 -300.16 359.61 -303.31 364.33 -306.46 369.06 -308.03 373.78 -304.88 376.93 -301.73 378.50 -298.58 375.35 -295.43 370.63 -293.86} {black 351.73 -300.16 348.58 -300.16 345.43 -301.73 343.86 -304.88 345.43 -308.03 353.31 -308.03 358.03 -304.88 361.18 -301.73 358.03 -300.16 356.46 -297.01} {black 310.79 -254.49 306.06 -257.64 302.91 -259.21 301.34 -262.36 304.49 -263.94 307.64 -263.94 310.79 -262.36 315.51 -260.79 315.51 -257.64} {black 266.69 -287.56 265.12 -292.28 261.97 -300.16 261.97 -320.63} {black 244.65 -285.98 241.50 -290.71 239.92 -293.86 238.35 -303.31 236.77 -306.46 236.77 -317.48} {black 221.02 -281.26 217.87 -284.41 214.72 -290.71 214.72 -295.43 213.15 -298.58 213.15 -308.03 214.72 -312.76 214.72 -315.91} {black 143.86 -243.46 147.01 -245.04 150.16 -245.04 154.88 -248.19 158.03 -249.76 162.76 -249.76} {black 162.76 -295.43 161.18 -300.16 158.03 -304.88 158.03 -309.61} {black 134.41 -257.64 134.41 -260.79 137.56 -267.09 137.56 -274.96 139.13 -278.11 140.71 -282.83 143.86 -285.98 143.86 -298.58 140.71 -304.88 140.71 -309.61} {black 110.79 -248.19 109.21 -251.34 109.21 -254.49 110.79 -257.64 112.36 -262.36 112.36 -265.51 115.51 -270.24 117.09 -273.39 120.24 -278.11 123.39 -281.26 123.39 -284.41 124.96 -287.56 124.96 -298.58 123.39 -303.31 123.39 -306.46} {black 173.78 -289.13 176.93 -287.56 180.08 -287.56 184.80 -289.13 187.95 -289.13 191.10 -290.71 194.25 -290.71} {black 102.91 -289.13 106.06 -289.13 109.21 -290.71 112.36 -290.71 117.09 -292.28 120.24 -290.71 123.39 -290.71 128.11 -287.56 137.56 -287.56 142.28 -285.98 148.58 -289.13 151.73 -289.13} {black 252.52 -211.97 255.67 -211.97 260.39 -215.12} {black 254.09 -213.54} {black 224.17 -216.69 227.32 -215.12 230.47 -215.12} {black 198.98 -221.42 195.83 -224.57 195.83 -227.72 194.25 -230.87 194.25 -252.91 192.68 -256.06 192.68 -262.36} {black 332.83 -229.29 331.26 -232.44 328.11 -235.59 329.69 -240.31 334.41 -238.74 337.56 -237.17 339.13 -234.02 337.56 -230.87 334.41 -227.72 331.26 -226.14} {black 323.39 -226.14 320.24 -229.29 320.24 -237.17 323.39 -237.17 326.54 -234.02 328.11 -230.87 328.11 -227.72} {black 296.61 -211.97 296.61 -222.99 302.91 -216.69 299.76 -213.54 291.89 -213.54} {black 277.72 -215.12 279.29 -211.97 276.14 -211.97 274.57 -215.12 271.42 -218.27 272.99 -221.42 276.14 -222.99 280.87 -224.57 285.59 -221.42 287.17 -215.12 284.02 -211.97 280.87 -211.97 279.29 -215.12} {black 313.94 -210.39 310.79 -213.54 307.64 -222.99 309.21 -226.14 312.36 -227.72 313.94 -224.57 315.51 -218.27 312.36 -213.54 307.64 -215.12} {black 317.09 -224.57 313.94 -226.14 309.21 -235.59 313.94 -237.17 320.24 -230.87 320.24 -226.14 315.51 -224.57 312.36 -226.14} {black 318.66 -238.74 315.51 -240.31 313.94 -243.46 312.36 -248.19 312.36 -252.91 315.51 -256.06 318.66 -257.64 320.24 -252.91 323.39 -241.89 323.39 -238.74 318.66 -237.17} {black 320.24 -260.79 317.09 -262.36 315.51 -265.51 313.94 -271.81 318.66 -270.24 321.81 -270.24 324.96 -265.51 324.96 -260.79 323.39 -257.64 320.24 -256.06 317.09 -254.49} {black 269.84 -216.69 266.69 -216.69 263.54 -219.84 261.97 -222.99 261.97 -226.14 265.12 -226.14 271.42 -219.84 271.42 -211.97 265.12 -210.39 261.97 -211.97} {black 246.22 -221.42 244.65 -226.14 247.80 -227.72 250.94 -226.14 255.67 -222.99 257.24 -218.27 255.67 -215.12 252.52 -215.12 247.80 -216.69} {black 238.35 -215.12 235.20 -213.54 232.05 -216.69 230.47 -219.84 230.47 -226.14 235.20 -224.57 238.35 -221.42 241.50 -216.69 238.35 -216.69 233.62 -219.84} {black 219.45 -216.69 214.72 -219.84 213.15 -222.99 214.72 -226.14 219.45 -226.14 222.60 -221.42 219.45 -215.12} {black 202.13 -215.12 198.98 -218.27 198.98 -221.42 197.40 -224.57 202.13 -227.72 208.43 -224.57 211.57 -221.42 210.00 -218.27 206.85 -216.69 202.13 -216.69} {black 189.53 -265.51 189.53 -270.24 191.10 -273.39 197.40 -257.64 189.53 -257.64 187.95 -263.94} {black 187.95 -254.49 184.80 -257.64 184.80 -263.94 187.95 -260.79 187.95 -257.64 187.95 -254.49} {black 181.65 -248.19 180.08 -252.91 180.08 -256.06 183.23 -257.64 184.80 -254.49 184.80 -249.76 183.23 -246.61} {black 139.13 -243.46 135.98 -246.61 135.98 -251.34 137.56 -254.49 140.71 -256.06 148.58 -252.91 150.16 -248.19 147.01 -241.89} {black 123.39 -235.59 121.81 -240.31 121.81 -248.19 124.96 -251.34 128.11 -252.91 131.26 -251.34 134.41 -248.19 134.41 -243.46 132.83 -240.31} {black 104.49 -234.02 101.34 -232.44 99.76 -237.17 99.76 -243.46 104.49 -246.61 107.64 -246.61 112.36 -245.04 115.51 -243.46 117.09 -240.31 115.51 -237.17 112.36 -232.44 109.21 -229.29} {black 88.74 -227.72 85.59 -229.29 82.44 -230.87 79.29 -232.44 77.72 -235.59 80.87 -237.17 85.59 -238.74 90.31 -238.74 91.89 -245.04 95.04 -241.89 98.19 -235.59 99.76 -230.87 98.19 -227.72 95.04 -227.72} {black 158.03 -276.54 158.03 -279.69 156.46 -284.41 156.46 -289.13 154.88 -292.28 158.03 -295.43 162.76 -293.86 165.91 -295.43 170.63 -293.86 173.78 -292.28 173.78 -289.13 172.20 -285.98 173.78 -282.83 173.78 -278.11 170.63 -274.96 167.48 -273.39 162.76 -274.96 159.61 -276.54} {black 203.70 -276.54 206.85 -278.11 211.57 -278.11 217.87 -281.26 225.75 -281.26 228.90 -282.83 239.92 -282.83 246.22 -284.41 249.37 -282.83 252.52 -282.83 257.24 -284.41 263.54 -287.56 272.99 -287.56 277.72 -285.98 280.87 -284.41 284.02 -284.41 287.17 -281.26 287.17 -276.54 288.74 -273.39 288.74 -268.66 288.74 -265.51 287.17 -262.36 287.17 -259.21 285.59 -256.06 284.02 -251.34 282.44 -248.19 279.29 -245.04 276.14 -241.89 271.42 -238.74 268.27 -238.74 265.12 -238.74 261.97 -237.17 257.24 -237.17 254.09 -237.17 250.94 -237.17 246.22 -237.17 243.07 -237.17 238.35 -235.59 235.20 -235.59 230.47 -235.59 225.75 -235.59 222.60 -238.74 219.45 -240.31 216.30 -243.46 211.57 -245.04 208.43 -246.61 205.28 -249.76 203.70 -252.91 203.70 -263.94 200.55 -267.09 200.55 -270.24 202.13 -273.39} {black 312.36 -320.63 309.21 -317.48 306.06 -320.63 304.49 -323.78 304.49 -326.93 309.21 -328.50 315.51 -325.35 315.51 -322.20 315.51 -319.06} {black 298.19 -320.63 295.04 -322.20 293.46 -325.35 296.61 -328.50 299.76 -328.50 302.91 -326.93 302.91 -323.78 299.76 -320.63} {black 290.31 -319.06 287.17 -320.63 284.02 -322.20 282.44 -325.35 284.02 -328.50 287.17 -328.50 290.31 -326.93 293.46 -323.78 291.89 -319.06 288.74 -320.63} {black 279.29 -320.63 274.57 -320.63 271.42 -323.78 271.42 -326.93 274.57 -328.50 279.29 -325.35 280.87 -322.20 277.72 -320.63} {black 266.69 -319.06 263.54 -319.06 260.39 -319.06 258.82 -323.78 260.39 -326.93 263.54 -328.50 266.69 -326.93 269.84 -323.78 268.27 -320.63} {black 255.67 -319.06 252.52 -320.63 247.80 -322.20 244.65 -323.78 247.80 -326.93 250.94 -328.50 254.09 -328.50 258.82 -325.35 258.82 -322.20} {black 243.07 -320.63 239.92 -320.63 238.35 -325.35 238.35 -328.50 241.50 -326.93 244.65 -323.78 247.80 -319.06 244.65 -315.91} {black 233.62 -319.06 230.47 -319.06 227.32 -322.20 224.17 -328.50 228.90 -328.50 235.20 -323.78 232.05 -322.20} {black 217.87 -322.20 216.30 -328.50 221.02 -326.93 224.17 -325.35 227.32 -322.20 224.17 -317.48 221.02 -317.48} {black 210.00 -322.20 211.57 -319.06 208.43 -317.48 205.28 -319.06 202.13 -322.20 200.55 -326.93 203.70 -328.50 208.43 -325.35 211.57 -322.20 214.72 -320.63 211.57 -319.06 208.43 -320.63} {black 197.40 -319.06 191.10 -322.20 189.53 -326.93 192.68 -328.50 202.13 -325.35 205.28 -320.63 200.55 -319.06} {black 186.38 -320.63 183.23 -322.20 180.08 -325.35 178.50 -328.50 181.65 -330.08 191.10 -326.93 192.68 -323.78 187.95 -320.63} {black 173.78 -319.06 170.63 -320.63 167.48 -323.78 169.06 -326.93 172.20 -330.08 175.35 -326.93 176.93 -322.20 176.93 -319.06 173.78 -320.63} {black 165.91 -320.63 164.33 -317.48 161.18 -320.63 159.61 -325.35 158.03 -328.50 162.76 -326.93 165.91 -325.35 169.06 -322.20 169.06 -319.06 164.33 -320.63} {black 153.31 -319.06 148.58 -320.63 145.43 -322.20 143.86 -326.93 147.01 -330.08 150.16 -331.65 154.88 -330.08 156.46 -326.93 158.03 -322.20 156.46 -319.06} {black 135.98 -320.63 132.83 -322.20 131.26 -325.35 131.26 -330.08 140.71 -330.08 143.86 -326.93 145.43 -323.78 143.86 -320.63} {black 129.69 -322.20 126.54 -320.63 123.39 -319.06 120.24 -319.06 117.09 -322.20 120.24 -325.35 123.39 -325.35 126.54 -326.93 129.69 -323.78 131.26 -320.63 126.54 -322.20} {black 110.79 -319.06 107.64 -320.63 106.06 -323.78 107.64 -326.93 109.21 -323.78 109.21 -326.93 112.36 -326.93 115.51 -323.78 117.09 -320.63 113.94 -319.06 110.79 -319.06} {black 98.19 -322.20 93.46 -322.20 90.31 -323.78 90.31 -326.93 95.04 -330.08 101.34 -326.93 102.91 -323.78} {blue -401.02 -238.74 -402.60 -241.89 -401.02 -245.04 -402.60 -248.19 -402.60 -254.49} {blue -413.62 -254.49 -410.47 -254.49 -405.75 -254.49 -402.60 -254.49} {blue -407.32 -218.27 -404.17 -219.84 -401.02 -222.99 -401.02 -226.14 -399.45 -229.29 -402.60 -234.02 -405.75 -240.31 -405.75 -243.46 -407.32 -246.61 -404.17 -252.91 -399.45 -256.06} {black 0.55 -317.48 -2.60 -317.48 -4.17 -320.63 -4.17 -323.78 -1.02 -323.78 3.70 -323.78 6.85 -322.20 5.28 -319.06 0.55 -317.48} {black -46.69 -210.39 -51.42 -211.97 -52.99 -215.12 -56.14 -219.84 -57.72 -222.99 -60.87 -226.14 -60.87 -232.44 -62.44 -235.59 -62.44 -243.46 -64.02 -249.76 -65.59 -259.21 -65.59 -265.51} {black -71.89 -200.94 -78.19 -207.24 -81.34 -215.12 -84.49 -221.42 -84.49 -224.57 -86.06 -227.72 -86.06 -240.31 -89.21 -249.76} {black -98.66 -191.50 -101.81 -193.07 -104.96 -196.22 -106.54 -199.37 -112.83 -205.67 -117.56 -208.82 -122.28 -218.27 -122.28 -224.57 -123.86 -229.29 -123.86 -232.44 -125.43 -238.74 -125.43 -241.89} {black -37.24 -186.77 -40.39 -186.77 -45.12 -189.92 -46.69 -193.07 -48.27 -199.37 -48.27 -202.52 -41.97 -208.82 -38.82 -210.39 -34.09 -213.54 -30.94 -213.54 -27.80 -213.54 -24.65 -211.97 -21.50 -210.39 -19.92 -207.24 -19.92 -204.09 -21.50 -200.94 -24.65 -194.65 -26.22 -191.50} {black -59.29 -178.90 -60.87 -175.75 -65.59 -178.90 -68.74 -182.05 -70.31 -185.20 -68.74 -196.22 -65.59 -197.80 -60.87 -197.80 -56.14 -197.80 -52.99 -196.22 -49.84 -197.80 -46.69 -194.65 -45.12 -191.50 -46.69 -188.35 -46.69 -183.62 -49.84 -180.47 -52.99 -178.90 -56.14 -178.90} {black -79.76 -174.17 -82.91 -174.17 -89.21 -177.32 -93.94 -180.47 -97.09 -182.05 -97.09 -189.92 -95.51 -193.07 -92.36 -194.65 -89.21 -196.22 -86.06 -196.22 -82.91 -194.65 -78.19 -191.50 -75.04 -191.50 -71.89 -188.35 -71.89 -183.62 -73.46 -180.47 -75.04 -177.32 -78.19 -174.17} {black -18.35 -213.54 -19.92 -219.84 -21.50 -216.69 -24.65 -221.42 -24.65 -224.57 -27.80 -230.87 -24.65 -232.44 -21.50 -232.44 -16.77 -232.44 -13.62 -229.29 -12.05 -226.14 -12.05 -222.99 -12.05 -219.84 -13.62 -216.69 -16.77 -216.69} {black -29.37 -235.59 -32.52 -237.17 -34.09 -241.89 -35.67 -245.04 -38.82 -248.19 -40.39 -251.34 -40.39 -251.34 -40.39 -254.49 -37.24 -254.49 -32.52 -252.91 -29.37 -251.34 -27.80 -246.61 -27.80 -243.46 -29.37 -240.31 -29.37 -237.17} {black -16.77 -287.56 -24.65 -295.43 -29.37 -304.88 -30.94 -309.61 -30.94 -315.91 -32.52 -320.63 -30.94 -323.78} {black -40.39 -284.41 -43.54 -287.56 -46.69 -292.28 -48.27 -295.43 -49.84 -300.16 -51.42 -309.61 -51.42 -317.48} {black -57.72 -279.69 -54.57 -278.11 -51.42 -278.11 -48.27 -278.11 -45.12 -278.11 -41.97 -278.11 -37.24 -278.11 -34.09 -278.11 -26.22 -279.69 -23.07 -281.26 -19.92 -281.26 -16.77 -282.83 -12.05 -282.83 -8.90 -285.98 -5.75 -290.71 -2.60 -289.13 0.55 -290.71} {black -34.09 -262.36 -29.37 -263.94 -29.37 -260.79 -26.22 -260.79 -23.07 -259.21 -19.92 -259.21 -16.77 -259.21 -8.90 -260.79 -5.75 -262.36 -4.17 -265.51 -4.17 -268.66 -1.02 -271.81 0.55 -274.96 3.70 -279.69 6.85 -279.69} {black -62.44 -265.51 -62.44 -268.66 -64.02 -271.81 -60.87 -274.96 -56.14 -276.54 -52.99 -274.96 -45.12 -273.39 -38.82 -273.39 -35.67 -271.81 -32.52 -270.24 -32.52 -267.09 -35.67 -265.51 -37.24 -262.36 -40.39 -260.79 -46.69 -260.79 -56.14 -265.51 -60.87 -263.94 -65.59 -265.51} {black -127.01 -235.59 -130.16 -241.89 -136.46 -249.76 -138.03 -252.91 -142.76 -259.21 -145.91 -268.66 -149.06 -279.69 -149.06 -287.56 -150.63 -290.71} {black -90.79 -252.91 -93.94 -256.06 -95.51 -259.21 -100.24 -265.51 -109.69 -274.96 -112.83 -281.26 -114.41 -289.13 -114.41 -292.28 -115.98 -300.16} {black -60.87 -278.11 -65.59 -281.26 -68.74 -285.98 -71.89 -295.43 -75.04 -298.58 -76.61 -301.73 -79.76 -304.88 -79.76 -308.03} {black -160.08 -230.87 -163.23 -234.02 -169.53 -238.74 -172.68 -241.89 -174.25 -248.19 -175.83 -256.06 -177.40 -259.21 -180.55 -267.09 -182.13 -270.24 -182.13 -273.39} {black -196.30 -237.17 -193.15 -237.17 -190.00 -237.17 -186.85 -238.74 -183.70 -240.31 -178.98 -240.31 -175.83 -241.89 -172.68 -245.04 -169.53 -245.04 -166.38 -249.76 -163.23 -251.34 -160.08 -252.91 -156.93 -252.91 -153.78 -252.91 -149.06 -254.49 -145.91 -257.64 -142.76 -259.21 -136.46 -262.36 -130.16 -268.66 -122.28 -267.09 -119.13 -270.24 -115.98 -271.81 -109.69 -278.11 -106.54 -278.11 -101.81 -279.69 -95.51 -282.83 -87.64 -282.83 -84.49 -285.98 -79.76 -287.56 -76.61 -287.56 -73.46 -287.56 -70.31 -287.56 -65.59 -289.13} {black -180.55 -202.52 -178.98 -205.67 -178.98 -208.82 -171.10 -216.69 -167.95 -218.27 -164.80 -221.42 -161.65 -222.99 -158.50 -226.14 -155.35 -227.72 -152.20 -230.87 -149.06 -230.87 -145.91 -230.87 -142.76 -230.87 -139.61 -230.87 -134.88 -232.44 -131.73 -234.02 -128.58 -235.59 -125.43 -235.59 -125.43 -234.02 -122.28 -235.59 -119.13 -237.17 -114.41 -237.17 -111.26 -240.31 -108.11 -240.31 -104.96 -241.89 -100.24 -243.46 -97.09 -246.61 -93.94 -246.61 -90.79 -245.04 -87.64 -249.76 -84.49 -249.76 -82.91 -252.91 -76.61 -259.21 -73.46 -260.79 -70.31 -262.36 -64.02 -268.66 -60.87 -270.24 -59.29 -276.54} {blue 19.45 -260.79 17.87 -263.94 17.87 -267.09 19.45 -273.39 21.02 -276.54 24.17 -274.96 25.75 -271.81 27.32 -268.66 30.47 -265.51} {blue 32.05 -238.74 32.05 -241.89 28.90 -248.19 27.32 -252.91 27.32 -256.06 25.75 -259.21 25.75 -263.94 24.17 -267.09 24.17 -276.54} {black -4.17 -317.48 -8.90 -319.06 -8.90 -322.20 -4.17 -320.63 -4.17 -317.48 -8.90 -317.48} {black -15.20 -317.48 -19.92 -315.91 -16.77 -320.63 -13.62 -320.63 -12.05 -315.91} {black -45.12 -325.35 -41.97 -325.35 -37.24 -325.35 -34.09 -325.35 -30.94 -323.78 -27.80 -323.78 -24.65 -323.78 -19.92 -323.78 -16.77 -322.20 -13.62 -322.20 -8.90 -323.78 -5.75 -323.78 -2.60 -323.78 0.55 -325.35 5.28 -326.93 11.57 -326.93 14.72 -330.08 16.30 -326.93 27.32 -326.93 33.62 -330.08} {black 82.44 -322.20 79.29 -323.78 76.14 -326.93 76.14 -331.65 79.29 -331.65 84.02 -330.08 88.74 -323.78 87.17 -320.63 82.44 -320.63} {black 72.99 -317.48 68.27 -319.06 66.69 -322.20 63.54 -325.35 61.97 -328.50 66.69 -331.65 71.42 -326.93 76.14 -323.78 77.72 -320.63 72.99 -319.06 65.12 -320.63} {black 58.82 -319.06 54.09 -320.63 50.94 -322.20 49.37 -325.35 52.52 -330.08 57.24 -330.08 63.54 -322.20 58.82 -317.48} {black 46.22 -319.06 43.07 -319.06 39.92 -322.20 38.35 -325.35 39.92 -328.50 43.07 -328.50 46.22 -326.93 49.37 -323.78 49.37 -320.63 46.22 -319.06} {black -26.22 -315.91 -29.37 -319.06 -29.37 -322.20 -26.22 -320.63 -21.50 -320.63 -21.50 -315.91 -23.07 -311.18} {black -35.67 -315.91 -40.39 -319.06 -40.39 -323.78 -32.52 -322.20 -29.37 -319.06 -32.52 -320.63} {black -45.12 -314.33 -48.27 -315.91 -49.84 -319.06 -46.69 -320.63 -43.54 -320.63 -40.39 -319.06 -43.54 -315.91} {black -56.14 -314.33 -60.87 -319.06 -60.87 -322.20 -56.14 -322.20 -51.42 -320.63 -56.14 -319.06 -59.29 -319.06} {black -64.02 -314.33 -67.17 -314.33 -71.89 -317.48 -73.46 -320.63 -67.17 -320.63 -64.02 -317.48 -60.87 -315.91 -65.59 -314.33 -70.31 -317.48} {black -76.61 -309.61 -81.34 -311.18 -84.49 -315.91 -82.91 -319.06 -76.61 -315.91 -73.46 -312.76 -78.19 -311.18} {black -87.64 -309.61 -90.79 -309.61 -93.94 -311.18 -97.09 -314.33 -87.64 -315.91 -81.34 -309.61 -82.91 -306.46 -87.64 -306.46} {black -100.24 -304.88 -106.54 -311.18 -101.81 -312.76 -98.66 -314.33 -95.51 -311.18 -95.51 -308.03 -98.66 -309.61} {black -114.41 -304.88 -117.56 -306.46 -119.13 -309.61 -114.41 -312.76 -109.69 -311.18 -106.54 -308.03 -111.26 -304.88 -115.98 -308.03} {black -128.58 -297.01 -133.31 -300.16 -131.73 -304.88 -127.01 -308.03 -123.86 -308.03 -120.71 -304.88 -119.13 -301.73 -123.86 -298.58 -128.58 -300.16} {black -139.61 -292.28 -144.33 -292.28 -145.91 -295.43 -141.18 -298.58 -136.46 -298.58 -133.31 -297.01 -130.16 -293.86 -138.03 -292.28 -141.18 -293.86} {black -155.35 -285.98 -158.50 -289.13 -158.50 -292.28 -152.20 -295.43 -147.48 -292.28 -144.33 -289.13 -149.06 -287.56 -152.20 -289.13} {black -171.10 -278.11 -171.10 -281.26 -172.68 -285.98 -169.53 -290.71 -161.65 -293.86 -158.50 -289.13 -156.93 -284.41 -160.08 -281.26 -163.23 -281.26} {black -183.70 -278.11 -186.85 -282.83 -178.98 -282.83 -175.83 -281.26 -178.98 -274.96 -183.70 -276.54} {black -190.00 -267.09 -193.15 -267.09 -196.30 -273.39 -196.30 -278.11 -193.15 -279.69 -190.00 -279.69 -182.13 -273.39 -182.13 -270.24 -190.00 -270.24 -193.15 -274.96} {black -199.45 -262.36 -201.02 -265.51 -199.45 -268.66 -196.30 -268.66 -190.00 -263.94 -190.00 -260.79 -194.72 -260.79 -197.87 -262.36} {black -131.73 -100.16 -138.03 -106.46 -139.61 -109.61 -142.76 -111.18 -144.33 -114.33 -147.48 -117.48 -149.06 -120.63 -153.78 -122.20 -155.35 -126.93 -156.93 -130.08 -160.08 -133.23 -161.65 -136.38 -164.80 -139.53 -164.80 -142.68 -167.95 -145.83 -167.95 -150.55 -171.10 -155.28 -171.10 -158.43 -172.68 -161.57 -174.25 -172.60 -174.25 -182.05 -175.83 -185.20 -175.83 -188.35 -177.40 -193.07 -178.98 -196.22 -178.98 -202.52} {black -268.74 -114.33 -271.89 -117.48 -271.89 -120.63 -273.46 -123.78 -273.46 -126.93 -276.61 -133.23 -282.91 -142.68 -284.49 -145.83 -286.06 -150.55 -286.06 -166.30 -284.49 -174.17 -284.49 -177.32 -282.91 -182.05 -282.91 -188.35 -281.34 -191.50 -281.34 -197.80 -279.76 -200.94 -279.76 -227.72 -281.34 -230.87 -279.76 -234.02 -279.76 -237.17 -276.61 -243.46 -273.46 -246.61 -273.46 -251.34 -270.31 -254.49} {black -382.13 -251.34 -383.70 -256.06 -383.70 -263.94 -385.28 -267.09 -385.28 -270.24 -383.70 -273.39 -380.55 -282.83 -374.25 -290.71} {black -356.93 -221.42 -358.50 -224.57 -358.50 -227.72 -360.08 -232.44 -363.23 -235.59 -366.38 -243.46 -366.38 -252.91 -364.80 -259.21 -361.65 -262.36 -360.08 -265.51 -355.35 -273.39 -350.63 -276.54 -347.48 -276.54} {black -323.86 -117.48 -325.43 -120.63 -325.43 -123.78 -328.58 -130.08 -330.16 -134.80 -330.16 -150.55 -328.58 -156.85 -328.58 -155.28 -327.01 -158.43 -323.86 -161.57 -323.86 -164.72 -322.28 -169.45 -322.28 -172.60 -319.13 -178.90 -319.13 -180.47 -317.56 -183.62 -317.56 -188.35 -315.98 -188.35 -315.98 -204.09 -314.41 -207.24 -314.41 -215.12 -319.13 -224.57 -319.13 -237.17 -320.71 -241.89 -320.71 -252.91 -314.41 -265.51 -311.26 -268.66} {black -260.87 -84.41 -264.02 -87.56 -265.59 -90.71 -264.02 -93.86 -264.02 -100.16 -262.44 -103.31 -259.29 -111.18 -256.14 -109.61 -252.99 -111.18 -249.84 -111.18 -246.69 -111.18 -241.97 -111.18 -238.82 -111.18 -237.24 -106.46 -235.67 -103.31 -235.67 -100.16 -240.39 -92.28 -243.54 -92.28 -243.54 -87.56 -246.69 -82.83 -254.57 -78.11 -260.87 -79.69} {black -282.91 -89.13 -287.64 -89.13 -290.79 -92.28 -292.36 -95.43 -290.79 -98.58 -289.21 -103.31 -289.21 -106.46 -286.06 -109.61 -282.91 -109.61 -279.76 -111.18 -276.61 -112.76 -271.89 -112.76 -268.74 -109.61 -265.59 -109.61 -264.02 -106.46 -264.02 -103.31 -264.02 -98.58 -267.17 -92.28 -273.46 -87.56} {black -312.83 -89.13 -315.98 -89.13 -320.71 -92.28 -322.28 -97.01 -322.28 -100.16 -317.56 -100.16 -315.98 -108.03 -312.83 -111.18 -311.26 -114.33 -308.11 -115.91 -303.39 -114.33 -300.24 -112.76 -297.09 -112.76 -293.94 -112.76 -290.79 -114.33 -289.21 -111.18 -290.79 -108.03 -293.94 -103.31 -295.51 -98.58 -303.39 -90.71 -309.69 -87.56 -314.41 -85.98} {black -350.63 -95.43 -352.20 -98.58 -353.78 -103.31 -353.78 -106.46 -350.63 -112.76 -347.48 -111.18 -342.76 -112.76 -339.61 -114.33 -333.31 -115.91 -328.58 -115.91 -323.86 -114.33 -320.71 -114.33 -317.56 -115.91 -314.41 -111.18 -314.41 -108.03 -317.56 -104.88 -319.13 -100.16 -322.28 -98.58 -327.01 -95.43 -344.33 -95.43} {black -355.35 -152.13 -352.20 -150.55 -347.48 -148.98 -344.33 -148.98 -342.76 -145.83 -339.61 -145.83 -334.88 -141.10 -330.16 -142.68 -325.43 -139.53 -322.28 -139.53 -314.41 -137.95 -309.69 -136.38 -306.54 -136.38 -301.81 -134.80 -298.66 -136.38 -293.94 -136.38 -286.06 -136.38 -281.34 -136.38 -278.19 -134.80 -275.04 -133.23 -270.31 -134.80 -264.02 -133.23 -254.57 -133.23 -246.69 -133.23 -235.67 -133.23 -230.94 -133.23 -223.07 -133.23} {black -360.08 -221.42 -356.93 -218.27 -353.78 -216.69 -350.63 -213.54 -345.91 -211.97 -342.76 -210.39 -336.46 -208.82 -330.16 -205.67 -325.43 -204.09 -322.28 -202.52 -314.41 -199.37 -309.69 -197.80 -301.81 -196.22 -298.66 -194.65 -295.51 -194.65 -287.64 -193.07 -278.19 -189.92 -273.46 -188.35 -264.02 -186.77 -256.14 -185.20 -246.69 -182.05 -238.82 -180.47} {black -378.98 -241.89 -375.83 -241.89 -372.68 -238.74 -369.53 -237.17 -366.38 -234.02 -364.80 -230.87 -363.23 -227.72 -361.65 -224.57 -361.65 -219.84 -360.08 -216.69 -360.08 -213.54 -360.08 -210.39 -358.50 -205.67 -358.50 -202.52 -358.50 -197.80 -358.50 -193.07 -356.93 -188.35 -356.93 -185.20 -356.93 -182.05 -356.93 -177.32 -355.35 -174.17 -355.35 -171.02 -355.35 -163.15 -355.35 -160.00 -355.35 -156.85 -353.78 -148.98 -353.78 -145.83 -352.20 -142.68 -352.20 -137.95 -352.20 -134.80 -352.20 -131.65 -350.63 -128.50 -352.20 -125.35 -353.78 -122.20} {black -377.40 -246.61 -383.70 -249.76 -393.15 -260.79 -396.30 -263.94 -397.87 -267.09 -397.87 -270.24 -399.45 -276.54 -401.02 -279.69 -401.02 -284.41 -396.30 -287.56 -396.30 -290.71 -391.57 -293.86 -388.43 -293.86 -386.85 -297.01 -383.70 -297.01 -378.98 -295.43} {black -380.55 -295.43 -375.83 -292.28 -372.68 -289.13 -369.53 -287.56 -366.38 -284.41 -363.23 -282.83 -358.50 -281.26 -355.35 -279.69 -352.20 -278.11 -347.48 -278.11 -344.33 -276.54 -339.61 -274.96 -336.46 -274.96 -333.31 -274.96 -328.58 -273.39 -323.86 -271.81 -317.56 -270.24 -314.41 -268.66 -311.26 -267.09 -308.11 -267.09 -303.39 -265.51 -297.09 -262.36 -290.79 -260.79 -287.64 -259.21 -276.61 -257.64 -273.46 -256.06 -268.74 -254.49 -265.59 -252.91 -260.87 -251.34} {black -267.17 -38.74 -264.02 -37.17 -259.29 -38.74 -256.14 -41.89 -252.99 -43.46 -245.12 -43.46 -240.39 -45.04 -237.24 -45.04 -230.94 -46.61 -224.65 -48.19 -218.35 -51.34 -213.62 -52.91 -210.47 -52.91 -207.32 -56.06 -204.17 -60.79 -201.02 -62.36 -197.87 -68.66 -196.30 -74.96 -196.30 -78.11 -197.87 -82.83 -197.87 -95.43 -201.02 -101.73 -201.02 -104.88 -204.17 -108.03 -205.75 -111.18 -208.90 -114.33 -210.47 -117.48 -212.05 -122.20 -215.20 -125.35 -216.77 -130.08 -218.35 -133.23 -221.50 -136.38 -223.07 -141.10 -224.65 -144.25 -224.65 -147.40 -226.22 -152.13 -229.37 -158.43 -230.94 -163.15 -232.52 -166.30 -232.52 -172.60 -234.09 -175.75 -234.09 -178.90 -235.67 -182.05 -237.24 -186.77 -238.82 -189.92 -238.82 -193.07 -240.39 -196.22 -240.39 -200.94 -241.97 -204.09 -241.97 -210.39 -243.54 -213.54 -243.54 -216.69} {black -314.41 35.28 -309.69 33.70 -306.54 30.55 -303.39 30.55 -300.24 30.55 -298.66 27.40 -290.79 25.83 -284.49 25.83 -276.61 24.25 -265.59 21.10 -252.99 21.10 -248.27 19.53 -245.12 19.53 -240.39 19.53 -237.24 19.53 -234.09 19.53 -229.37 19.53 -226.22 21.10 -223.07 22.68 -216.77 22.68 -208.90 22.68 -207.32 27.40 -204.17 28.98 -197.87 36.85 -197.87 44.72} {black -109.69 40.00 -109.69 33.70 -108.11 28.98 -106.54 25.83 -103.39 21.10 -100.24 17.95 -97.09 14.80 -93.94 11.65 -89.21 10.08 -86.06 8.50 -82.91 8.50 -79.76 6.93 -76.61 6.93 -71.89 5.35 -68.74 5.35 -65.59 6.93 -62.44 6.93 -57.72 8.50 -54.57 10.08 -49.84 13.23 -43.54 19.53 -40.39 19.53 -35.67 21.10 -29.37 24.25 -19.92 27.40 -15.20 28.98 -4.17 32.13} {black -256.14 -226.14 -252.99 -224.57 -248.27 -226.14 -245.12 -227.72 -241.97 -232.44 -238.82 -232.44 -237.24 -237.17 -235.67 -240.31 -235.67 -243.46 -234.09 -241.89 -234.09 -246.61 -237.24 -249.76 -241.97 -251.34 -245.12 -252.91 -248.27 -252.91 -254.57 -249.76 -260.87 -243.46 -265.59 -240.31 -267.17 -237.17 -267.17 -234.02 -264.02 -230.87 -260.87 -227.72 -257.72 -226.14 -256.14 -222.99} {black -223.07 -238.74 -219.92 -241.89 -216.77 -243.46 -213.62 -243.46 -210.47 -245.04 -205.75 -246.61 -204.17 -249.76 -201.02 -249.76 -197.87 -254.49 -197.87 -257.64 -204.17 -260.79 -218.35 -260.79 -221.50 -256.06 -221.50 -252.91 -226.22 -252.91 -229.37 -249.76 -230.94 -246.61 -229.37 -241.89 -227.80 -238.74 -227.80 -235.59} {black -208.90 -189.92 -212.05 -191.50 -215.20 -197.80 -215.20 -204.09 -213.62 -207.24 -213.62 -211.97 -210.47 -213.54 -205.75 -215.12 -202.60 -216.69 -199.45 -216.69 -193.15 -215.12 -190.00 -215.12 -186.85 -211.97 -185.28 -208.82 -185.28 -205.67 -185.28 -200.94 -185.28 -197.80 -186.85 -194.65 -188.43 -191.50 -191.57 -188.35} {black -212.05 -178.90 -208.90 -177.32 -205.75 -174.17 -202.60 -172.60 -199.45 -172.60 -196.30 -172.60 -191.57 -174.17 -188.43 -174.17 -185.28 -177.32 -183.70 -180.47 -186.85 -182.05 -190.00 -186.77 -191.57 -183.62 -193.15 -186.77 -196.30 -189.92 -196.30 -193.07 -199.45 -196.22 -202.60 -196.22 -202.60 -193.07 -205.75 -188.35 -205.75 -185.20 -210.47 -183.62 -213.62 -182.05} {black -15.20 -13.54 -19.92 -15.12 -21.50 -18.27 -21.50 -21.42 -18.35 -27.72 -15.20 -27.72 -10.47 -26.14 -7.32 -22.99 -5.75 -19.84 -4.17 -15.12 -7.32 -11.97} {black -27.80 -22.99 -30.94 -24.57 -35.67 -27.72 -37.24 -30.87 -37.24 -34.02 -35.67 -37.17 -32.52 -40.31 -29.37 -40.31 -26.22 -37.17 -21.50 -32.44 -19.92 -29.29 -19.92 -24.57 -21.50 -21.42 -24.65 -19.84 -27.80 -21.42 -29.37 -26.14} {black -41.97 -35.59 -45.12 -35.59 -48.27 -38.74 -49.84 -41.89 -49.84 -45.04 -48.27 -48.19 -45.12 -51.34 -41.97 -51.34 -37.24 -46.61 -34.09 -43.46 -34.09 -40.31 -35.67 -37.17 -37.24 -32.44 -38.82 -29.29} {black -59.29 -46.61 -62.44 -46.61 -64.02 -51.34 -67.17 -51.34 -70.31 -56.06 -70.31 -59.21 -54.57 -59.21 -51.42 -56.06 -49.84 -52.91 -49.84 -49.76 -52.99 -46.61 -57.72 -43.46} {black -75.04 -56.06 -78.19 -56.06 -79.76 -60.79 -82.91 -59.21 -86.06 -65.51 -82.91 -71.81 -79.76 -73.39 -75.04 -73.39 -71.89 -73.39 -68.74 -73.39 -65.59 -71.81 -64.02 -67.09 -65.59 -63.94 -67.17 -59.21 -67.17 -56.06 -70.31 -54.49 -76.61 -59.21} {black -87.64 -76.54 -93.94 -76.54 -97.09 -79.69 -95.51 -84.41 -95.51 -87.56 -92.36 -87.56 -89.21 -87.56 -86.06 -87.56 -82.91 -85.98 -78.19 -84.41 -76.61 -79.69 -76.61 -76.54 -75.04 -73.39 -76.61 -68.66 -81.34 -67.09 -84.49 -68.66} {black -104.96 -84.41 -108.11 -82.83 -111.26 -85.98 -114.41 -92.28 -112.83 -97.01 -108.11 -98.58 -104.96 -98.58 -101.81 -98.58 -98.66 -97.01 -95.51 -93.86 -95.51 -90.71 -97.09 -87.56 -98.66 -82.83 -100.24 -79.69 -103.39 -82.83} {black -127.01 -95.43 -130.16 -101.73 -130.16 -109.61 -127.01 -111.18 -122.28 -112.76 -119.13 -112.76 -114.41 -109.61 -112.83 -106.46 -109.69 -100.16 -111.26 -97.01 -112.83 -92.28 -117.56 -90.71 -120.71 -92.28 -123.86 -87.56 -127.01 -87.56} {black 3.46 6.06 -3.62 -1.02 -8.35 -3.39 -13.07 -8.11 -8.35 -10.47 -1.26 -15.20 3.46 -17.56 10.55 -10.47 12.91 -5.75 15.28 -1.02 10.55 3.70 5.83 3.70} {black -3.62 1.34} } set XVIgrid {-433.307086615 -351.338582677 39.3700787402 0.0 0.0 39.3700787402 22 11} therion/samples/pocket-topo/Demo_p.xvi0000644000076400010400000011314411133067010021124 0ustar userAdministratorsset XVIgrids {1.0 m} set XVIstations { {0.00 0.00 503.0} {-189.09 -22.91 503.1} {-148.98 -6.42 503.2} {-237.05 113.46 503.3} {-148.98 -6.42 504.0} {-150.83 -55.31 504.1} {-37.72 3.54 504.2} {102.99 57.56 504.3} {121.89 -37.52 504.4} {219.09 51.38 504.5} {281.69 75.04 504.6} } set XVIshots { {219.09 51.38 281.69 75.04} {281.69 75.04 263.78 105.16} {281.69 75.04 270.20 66.42} {281.69 75.04 280.83 87.64} {121.89 -37.52 219.09 51.38} {219.09 51.38 220.94 48.11} {219.09 51.38 235.98 28.98} {219.09 51.38 217.91 49.49} {102.99 57.56 121.89 -37.52} {121.89 -37.52 117.24 -17.60} {121.89 -37.52 144.61 -22.60} {121.89 -37.52 146.42 -26.06} {121.89 -37.52 146.57 -26.46} {121.89 -37.52 145.79 -25.67} {121.89 -37.52 144.45 -23.46} {121.89 -37.52 116.54 -43.43} {121.89 -37.52 126.50 -35.63} {121.89 -37.52 161.18 12.99} {-37.72 3.54 102.99 57.56} {102.99 57.56 83.74 30.04} {102.99 57.56 100.75 44.29} {102.99 57.56 103.27 55.94} {102.99 57.56 101.65 62.87} {-150.83 -55.31 -37.72 3.54} {-37.72 3.54 -23.15 -27.01} {-37.72 3.54 -34.53 -1.97} {-37.72 3.54 -35.75 -2.36} {-148.98 -6.42 -150.83 -55.31} {-150.83 -55.31 -130.08 -25.55} {-150.83 -55.31 -152.44 -62.09} {-150.83 -55.31 -138.62 -47.17} {-150.83 -55.31 -144.88 -54.53} {-148.98 -6.42 -148.98 -6.42} {-148.98 -6.42 -166.81 -12.09} {-148.98 -6.42 -128.15 21.30} {-148.98 -6.42 -153.62 2.56} {-148.98 -6.42 -144.09 -28.31} {-148.98 -6.42 -237.05 113.46} {-237.05 113.46 -236.26 111.30} {-237.05 113.46 -257.64 80.39} {-237.05 113.46 -229.33 115.63} {-237.05 113.46 -230.79 105.24} {-189.09 -22.91 -148.98 -6.42} {0.00 0.00 -189.09 -22.91} {-189.09 -22.91 -161.89 19.37} {-189.09 -22.91 -160.55 6.18} {-189.09 -22.91 -168.15 -9.76} {-189.09 -22.91 -132.17 -50.71} {0.00 0.00 -60.16 37.40} {0.00 0.00 -15.28 -30.24} {0.00 0.00 -37.09 -4.09} } set XVIsketchlines { {blue -242.68 87.48 -241.10 88.27 -239.53 89.06 -236.38 92.20 -236.38 89.84 -237.17 88.27 -237.17 86.69 -237.17 83.54} {blue -256.06 70.16 -252.13 78.03 -248.98 81.18 -247.40 80.39 -245.83 80.39 -244.25 81.18 -242.68 81.18 -240.31 82.76 -238.74 85.12 -237.95 86.69 -235.59 90.63} {blue -189.13 -60.16 -186.77 -58.98 -184.41 -58.98 -182.05 -57.80 -177.32 -60.16 -178.50 -62.52 -178.50 -60.16 -182.05 -64.88 -184.41 -66.06} {blue -198.58 -74.33 -198.58 -71.97 -198.58 -69.61 -197.40 -67.24 -195.04 -64.88 -191.50 -64.88 -189.13 -64.88 -186.77 -63.70 -184.41 -62.52 -182.05 -62.52 -180.87 -60.16} {black 267.95 80.12 267.17 78.54 266.38 76.18 267.17 78.54 267.17 80.12 267.95 82.48 268.74 84.06 269.53 85.63 271.10 86.42 272.68 87.20 274.25 87.99 276.61 87.20 278.19 86.42 278.19 84.84 278.19 82.48 278.19 80.91 278.19 79.33 275.83 77.76 274.25 76.97 272.68 76.18 271.10 76.97 268.74 76.18 267.17 75.39 267.95 77.76 268.74 80.12 270.31 84.06} {black 242.76 58.86 244.33 59.65 245.91 60.43 248.27 61.22 249.84 62.01 251.42 62.01 252.99 62.80 254.57 62.01 256.14 61.22 255.35 59.65 253.78 57.28 252.20 56.50 250.63 55.71 249.06 55.71 247.48 55.71 245.91 55.71 244.33 57.28 244.33 58.86} {black 258.50 74.61 256.93 73.03 256.14 70.67 256.14 69.09 255.35 67.52 254.57 65.94 253.78 63.58 255.35 63.58 256.93 62.80 258.50 62.80 259.29 64.37 259.29 66.73 260.08 68.31 260.87 69.88 259.29 71.46} {black 256.14 71.46 255.35 73.03 255.35 74.61 254.57 76.18 254.57 77.76 254.57 79.33 256.93 79.33 258.50 79.33 260.08 79.33 262.44 79.33 264.80 78.54 264.80 76.97 264.02 74.61 262.44 73.03 261.65 71.46 260.08 71.46 257.72 71.46 256.14 72.24 256.14 73.82} {black 274.25 95.87 275.83 97.44 277.40 99.02 278.98 100.59 277.40 99.80 275.83 97.44} {black 282.91 80.12 285.28 79.33 286.85 79.33 288.43 78.54} {black 281.34 79.33} {black 280.55 89.57 280.55 87.20 280.55 85.63 280.55 84.06 280.55 81.69 281.34 80.12} {black 271.89 93.50 273.46 94.29 275.04 94.29 276.61 95.08 278.19 95.87} {black 251.42 77.76 252.99 79.33 254.57 80.12 256.93 80.91 258.50 81.69 260.87 82.48 262.44 83.27 264.02 83.27 266.38 84.06 267.95 84.84 268.74 86.42 269.53 88.78 270.31 90.35 271.89 91.93 273.46 92.72} {black 241.18 70.67 241.97 72.24 243.54 73.82 245.12 75.39 246.69 76.18 248.27 76.97 250.63 77.76 252.20 79.33} {black 252.20 47.83} {black 252.99 46.26 252.99 43.90 252.99 42.32 251.42 43.90 251.42 46.26 250.63 48.62 249.84 50.20 252.20 50.98 256.14 52.56 257.72 52.56 259.29 53.35 260.87 53.35 263.23 52.56 264.02 50.98 264.02 49.41 263.23 47.05 262.44 45.47 261.65 43.90 260.08 42.32 258.50 42.32 256.93 41.54 255.35 42.32 253.78 42.32 252.20 43.90 251.42 46.26 252.20 47.83} {black 245.12 47.05 244.33 48.62 245.12 50.20 246.69 51.77 248.27 52.56 249.84 53.35 250.63 51.77 249.84 50.20 248.27 48.62 246.69 47.05 245.12 45.47 243.54 45.47 241.97 47.05 241.97 48.62 242.76 50.20 243.54 51.77 245.12 53.35 246.69 54.13 248.27 55.71 249.84 56.50 251.42 57.28 252.99 57.28 252.99 55.71 252.20 54.13 251.42 52.56 249.84 51.77 248.27 53.35 249.06 54.92 250.63 56.50 252.20 57.28} {black 233.31 63.58 234.88 65.94 237.24 67.52 238.82 67.52 240.39 67.52 241.97 67.52 241.97 65.94 240.39 64.37 238.82 62.80 238.03 61.22 237.24 59.65 235.67 58.07 234.09 58.86 232.52 60.43 231.73 62.01 232.52 63.58 234.88 65.16 237.24 66.73 240.39 68.31 242.76 69.09 244.33 69.09 245.91 67.52 246.69 65.94 245.91 64.37 245.91 62.80 244.33 61.22 243.54 59.65 241.97 58.07 239.61 57.28 238.03 58.86} {black 238.82 73.82 237.24 72.24 236.46 69.88 234.88 68.31} {black 234.09 67.52 234.88 69.09 235.67 71.46 235.67 73.03 236.46 74.61 236.46 76.18 236.46 77.76 236.46 79.33 237.24 80.91 238.03 82.48 239.61 84.84 241.18 86.42 242.76 87.99 244.33 89.57 245.91 91.93 246.69 93.50 247.48 95.08 248.27 96.65 249.84 98.23 249.84 99.80 251.42 102.17} {black 238.82 33.66 240.39 34.45 241.97 35.24 243.54 36.02 245.91 36.81 247.48 37.60} {black 266.38 110.83 264.80 111.61 262.44 111.61 260.87 110.83 259.29 110.04 256.93 109.25 255.35 107.68 253.78 106.10 252.20 104.53 250.63 102.95 249.06 101.38 247.48 99.80 245.91 99.02 244.33 98.23 241.97 97.44 238.82 96.65 237.24 95.87 232.52 95.08} {black 264.80 106.89 262.44 106.10} {black 260.87 103.74} {black 280.55 88.78 278.19 91.14 277.40 92.72 275.83 94.29 274.25 95.87 272.68 97.44 271.89 99.02 270.31 101.38 268.74 102.95 267.17 104.53 265.59 106.89 263.23 108.46 261.65 110.04} {black 219.13 52.56 219.92 54.92 222.28 58.07 223.86 58.86 225.43 59.65 227.01 60.43 228.58 62.01 230.16 62.80 231.73 63.58} {black 242.76 43.90 245.12 43.90 246.69 43.11 248.27 42.32 247.48 40.75 246.69 38.39 245.12 36.81 243.54 36.81 241.97 36.02 240.39 36.81 239.61 38.39 240.39 39.96 241.97 41.54} {black 224.65 50.98 226.22 52.56 228.58 53.35 230.94 54.13 232.52 54.13 231.73 52.56 231.73 50.20 231.73 48.62 230.94 47.05 229.37 45.47 227.80 44.69 226.22 43.90 224.65 46.26 224.65 47.83 227.01 50.20} {black 225.43 50.20} {black 234.09 54.92 234.09 52.56 234.09 50.98 234.88 49.41 234.88 47.83 234.88 46.26 234.09 47.83 234.09 50.20 234.09 51.77 234.09 53.35 235.67 54.92 237.24 55.71 238.82 54.13 240.39 52.56 241.97 50.98 241.97 49.41 240.39 47.83 238.82 46.26 237.24 44.69 235.67 44.69 234.09 44.69} {black 238.03 47.05 239.61 46.26 241.18 46.26 241.97 44.69 241.97 42.32 241.18 40.75 239.61 39.17 237.24 37.60 235.67 36.81 234.09 36.81 233.31 39.17 233.31 40.75 234.09 42.32 234.88 43.90 236.46 45.47 238.03 45.47 240.39 44.69 240.39 42.32 240.39 40.75 238.82 39.17 238.03 37.60 236.46 36.81 234.88 36.02 233.31 36.81 233.31 39.17 234.09 40.75 234.88 42.32} {black 241.97 36.02 243.54 36.81 245.12 36.81 247.48 37.60 249.06 37.60 250.63 38.39 252.20 38.39 253.78 39.96 256.14 40.75 257.72 41.54} {black 209.69 40.75 211.26 41.54 212.83 42.32 214.41 41.54 215.98 39.96 215.98 38.39 215.20 36.81 213.62 35.24 212.05 35.24 210.47 34.45 209.69 36.02 210.47 38.39 212.05 39.96 213.62 41.54 214.41 43.11 212.05 41.54 210.47 39.17} {black 223.07 37.60 223.07 40.75 223.86 43.11 224.65 44.69 225.43 46.26 224.65 44.69 223.86 42.32 223.07 39.96 221.50 38.39 220.71 36.02 219.13 34.45 219.92 36.02 220.71 37.60 222.28 39.96 223.07 41.54 223.86 43.90 226.22 44.69 227.80 44.69 229.37 42.32 230.16 40.75 229.37 39.17 227.80 37.60 226.22 36.02 224.65 35.24 223.07 35.24 221.50 35.24 219.92 35.24 219.92 36.81 219.92 38.39 219.92 39.96} {black 223.86 43.11} {black 206.54 28.15 207.32 29.72 210.47 31.30 212.05 32.87 213.62 33.66 215.20 33.66 217.56 33.66 219.13 33.66 220.71 33.66 222.28 33.66 223.86 33.66 225.43 33.66 227.01 33.66 228.58 32.87 230.94 32.09 232.52 32.09 234.09 32.09 235.67 32.09 237.24 32.87 238.82 32.87 240.39 33.66} {black 196.30 43.11 198.66 43.11 200.24 43.90 201.81 43.90 203.39 43.90 204.96 44.69 206.54 45.47 208.11 46.26 209.69 47.05 211.26 47.83 213.62 48.62 215.20 50.20 216.77 50.98 218.35 51.77 219.92 53.35 221.50 54.13} {black 171.89 8.46 174.25 10.04 175.83 10.83 177.40 12.40 178.19 10.04 178.19 8.46 178.19 6.89 177.40 5.31 175.83 2.95 174.25 2.95 172.68 4.53 171.89 6.10 172.68 7.68 173.46 9.25 175.04 10.83} {black 173.46 14.76 173.46 16.34 174.25 18.70 175.04 20.28 175.83 22.64 177.40 23.43 179.76 24.21 181.34 25.00 180.55 22.64 179.76 21.06 178.98 19.49 178.19 17.91 176.61 16.34 175.04 16.34 173.46 16.34} {black 175.83 22.64 177.40 23.43 178.98 25.00 181.34 26.57 182.91 28.15 182.91 25.79 183.70 24.21 182.91 22.64 181.34 21.85 179.76 21.06 178.19 19.49 178.98 21.85 180.55 23.43 182.91 25.00} {black 179.76 12.40 181.34 13.98 182.91 16.34 184.49 18.70 186.06 19.49 188.43 18.70 190.00 18.70 189.21 17.13 187.64 14.76 186.06 13.19 185.28 11.61 182.91 10.04 181.34 10.83 180.55 13.19} {black 193.94 29.72 193.15 28.15 192.36 25.00 190.79 22.64 190.79 21.06 191.57 23.43 192.36 25.00 193.15 27.36 193.15 28.94 193.94 30.51 195.51 32.09 197.87 32.09 199.45 32.87 201.81 32.87 201.81 30.51 201.81 28.94 201.02 27.36 198.66 25.79 197.09 24.21 195.51 22.64 193.94 21.85 192.36 19.49 191.57 21.85} {black 177.40 -0.20 178.98 2.17 180.55 2.95 182.13 3.74 183.70 4.53 185.28 6.10 187.64 7.68 190.00 10.04 190.79 12.40 191.57 13.98 193.94 16.34 196.30 17.91 197.87 19.49 199.45 19.49 201.81 21.06 203.39 22.64 204.17 24.21 204.96 25.79 205.75 27.36 207.32 30.51 208.90 32.09} {black 164.80 16.34 166.38 17.91 167.95 18.70 169.53 20.28 171.10 21.85 172.68 23.43 174.25 25.00 175.83 26.57 177.40 28.15 178.98 28.94 180.55 29.72 182.13 31.30 183.70 32.87 184.49 34.45 186.06 35.24 187.64 36.02 189.21 36.81 190.79 38.39 192.36 39.17 193.94 40.75 196.30 41.54} {black 147.48 -25.39 149.06 -26.18 150.63 -27.76 152.20 -29.33 152.99 -30.91} {black 152.20 -22.24 152.20 -24.61 152.99 -26.18 153.78 -27.76 154.57 -29.33 156.14 -30.91} {black 156.14 -17.52 157.72 -15.94 159.29 -15.16 160.87 -14.37 162.44 -13.58} {black 125.43 -43.50 123.86 -45.08 122.28 -45.87 121.50 -47.44} {black 120.71 -42.72 119.13 -44.29} {black 119.92 -41.93 119.13 -43.50 118.35 -45.87} {black 129.37 -15.16} {black 129.37 -14.37 128.58 -15.94 129.37 -17.52 130.94 -18.31 132.52 -16.73 131.73 -15.16} {black 128.58 -15.16 130.16 -15.16} {black 126.22 -15.16 128.58 -14.37 130.16 -14.37 131.73 -14.37 132.52 -15.94} {black 141.97 -6.50 141.18 -4.92 140.39 -3.35 141.18 -1.77 142.76 -0.98} {black 143.54 -1.77 145.12 -4.13 144.33 -5.71 142.76 -7.28} {black 144.33 -2.56 145.12 -4.13 144.33 -5.71 142.76 -6.50 141.18 -5.71} {black 142.76 -3.35 144.33 -4.13 144.33 -5.71} {black 142.76 -3.35} {black 149.06 7.68 150.63 8.46 152.20 7.68 152.99 5.31 151.42 4.53 149.06 3.74 147.48 3.74} {black 145.12 0.59 146.69 2.17 148.27 2.17} {black 147.48 2.95 149.06 2.17 150.63 0.59 148.27 -0.98 146.69 -0.98 145.12 -1.77} {black 149.84 6.89 151.42 7.68} {black 150.63 5.31} {black 146.69 5.31 148.27 6.10 149.84 7.68 151.42 6.89} {black 166.38 -7.28 164.02 -7.28 162.44 -8.07 160.87 -8.07 158.50 -8.07 156.93 -8.07 156.93 -6.50 157.72 -4.92} {black 156.93 -4.13 158.50 -4.13 160.08 -4.13 162.44 -4.13 164.02 -4.13 165.59 -4.13 166.38 -5.71 167.17 -7.28} {black 163.23 11.61 162.44 10.04 160.87 8.46 160.08 6.89 159.29 5.31 160.08 6.89 161.65 9.25 163.23 9.25 164.80 9.25 166.38 8.46 165.59 6.89 164.80 5.31 164.02 3.74 162.44 2.95 160.87 3.74 159.29 2.95 159.29 4.53 160.08 6.10 161.65 8.46} {black 159.29 -15.16 160.87 -15.16 162.44 -14.37 164.02 -12.80 165.59 -11.22 167.17 -9.65 168.74 -8.07 171.89 -5.71 173.46 -4.13 175.04 -2.56 176.61 -1.77 178.19 -0.20} {black 149.06 -26.97 150.63 -27.76 152.20 -28.54 150.63 -26.97 149.84 -25.39 149.84 -23.82 150.63 -21.46 152.20 -20.67 153.78 -19.09 155.35 -18.31} {black 123.07 -45.08 124.65 -43.50 126.22 -42.72 128.58 -41.14 129.37 -39.57 130.94 -37.99 132.52 -36.42 134.09 -35.63 135.67 -34.06 137.24 -33.27 138.82 -31.69 139.61 -30.12 141.18 -28.54 142.76 -26.97 144.33 -26.18 145.91 -26.18 147.48 -27.76} {black 123.86 -36.42 123.86 -37.99 123.07 -40.35 121.50 -41.93 119.92 -42.72} {black 162.44 14.76 160.87 14.76 159.29 14.76 157.72 14.76 156.14 14.76 154.57 14.76 152.99 14.76 149.84 14.76 148.27 14.76 146.69 13.98 145.12 14.76 143.54 16.34 141.97 17.91 141.18 19.49 139.61 21.06 138.03 21.85 136.46 23.43 134.88 24.21 133.31 25.79 131.73 26.57 129.37 27.36 127.80 28.94 126.22 29.72 124.65 31.30 123.07 32.09 121.50 32.87 119.92 34.45} {black 128.58 -8.07} {black 115.98 16.34} {black 116.77 25.00} {black 115.20 34.45} {black 115.98 32.09} {black 119.92 28.15} {black 129.37 18.70 129.37 17.13 129.37 14.76 128.58 13.19 127.01 12.40 125.43 13.98 124.65 15.55 124.65 17.91 124.65 19.49 127.01 20.28 128.58 18.70} {black 135.67 -3.35 136.46 -4.92 135.67 -6.50 134.88 -4.92 133.31 -3.35 134.88 -3.35} {black 137.24 1.38 138.03 -0.20 137.24 -1.77 134.88 -0.98 134.09 0.59 134.88 2.95 136.46 2.95} {black 131.73 6.89 134.09 8.46 135.67 8.46 136.46 6.89 136.46 4.53 134.09 4.53 133.31 6.10 133.31 8.46} {black 134.88 3.74} {black 116.77 4.53 115.20 6.10 112.83 8.46 111.26 9.25 109.69 10.83 108.11 12.40 110.47 10.83 112.83 10.04 114.41 8.46 115.98 7.68 115.98 5.31 115.98 2.95 115.98 0.59 115.20 -0.98 113.62 0.59 111.26 1.38 109.69 2.95 108.90 4.53 108.11 6.10 108.90 7.68 108.90 10.04 108.90 11.61 108.90 13.19} {black 123.07 13.98 123.86 12.40 123.86 10.04 124.65 8.46 124.65 6.10 123.07 4.53 120.71 3.74 119.92 5.31 119.92 7.68 118.35 10.83 118.35 12.40 117.56 13.98 119.92 15.55 122.28 15.55} {black 125.43 -4.92 126.22 -6.50 125.43 -8.07 125.43 -10.43 123.07 -8.86 120.71 -7.28 119.13 -5.71 117.56 -3.35 117.56 -0.98 117.56 0.59 119.13 0.59 121.50 0.59 123.86 1.38 125.43 1.38 127.01 -0.20 127.80 -2.56 127.80 -4.92} {black 100.24 29.72 101.02 28.15 101.81 25.79 101.81 24.21 102.60 21.85 102.60 20.28 103.39 18.70 103.39 17.13 103.39 14.76 104.17 13.19 104.17 11.61 104.96 10.04 105.75 8.46 104.96 6.89 104.96 5.31 104.96 3.74 105.75 2.17 105.75 -0.20 105.75 -1.77 105.75 -3.35 105.75 -4.92 105.75 -6.50 105.75 -8.07 105.75 -9.65 106.54 -11.22 106.54 -12.80 107.32 -14.37 107.32 -16.73 108.90 -18.31 109.69 -19.88 109.69 -21.46 111.26 -23.03 112.83 -24.61 114.41 -26.18 115.20 -27.76 115.98 -29.33 116.77 -31.69 118.35 -32.48 119.92 -34.06 121.50 -35.63 123.07 -37.20 123.86 -38.78 124.65 -40.35} {black 94.72 34.45 97.09 33.66} {black 96.30 40.75} {black 98.66 47.83} {black 111.26 44.69} {black 104.17 40.75} {black 109.69 47.83} {black 115.20 39.96} {black 114.41 43.11} {black 108.11 51.77} {black 104.17 39.96} {black 97.09 43.11} {black 102.60 42.32} {black 96.30 55.71} {black 96.30 54.13} {black 90.79 47.83} {black 83.70 43.11} {black 81.34 42.32} {black 82.13 47.83} {black 71.10 51.77} {black 75.04 51.77} {black 80.55 56.50} {black 86.85 47.83} {black 90.79 53.35} {black 109.69 55.71 111.26 54.13} {black 115.98 50.98} {black 114.41 52.56 115.98 50.98} {black 115.98 48.62 115.98 47.05 116.77 45.47 116.77 43.90 117.56 42.32 118.35 40.75 119.13 38.39 119.92 36.81 120.71 35.24 121.50 33.66 122.28 32.09 123.86 30.51} {black 106.54 55.71 108.11 54.13 109.69 53.35 111.26 51.77} {black 101.81 65.16} {black 101.81 66.73 103.39 65.16 104.17 63.58 104.96 62.01 105.75 60.43 105.75 58.07 106.54 56.50 107.32 54.92} {black 86.85 36.81 88.43 36.02 90.00 36.02 91.57 35.24 93.15 34.45 94.72 34.45} {black 56.14 28.94 57.72 30.51 59.29 31.30 60.87 32.87 63.23 34.45 64.80 35.24 66.38 35.24 67.95 36.02 69.53 36.81 71.10 37.60 72.68 37.60 74.25 37.60 75.83 37.60 77.40 36.81 78.98 36.81 81.34 36.81 82.91 36.81 84.49 36.81 86.06 36.81 87.64 36.81 89.21 36.81} {black 33.31 21.85 31.73 21.85 30.16 21.85} {black 34.88 21.85} {black 61.65 43.11 61.65 44.69 63.23 45.47 64.80 46.26 66.38 46.26 67.95 47.05 69.53 45.47 68.74 43.90 68.74 41.54 67.95 39.96 66.38 39.17 64.80 37.60 63.23 36.81 61.65 36.81 59.29 36.81 59.29 39.17 60.08 40.75 60.87 43.11 61.65 44.69 63.23 45.47} {black 43.54 34.45} {black 51.42 46.26} {black 47.48 45.47} {black 37.24 27.36} {black 42.76 24.21} {black 45.91 29.72} {black 39.61 42.32} {black 37.24 40.75} {black 25.43 33.66} {black 29.37 37.60} {black 15.20 37.60 17.56 39.17 21.50 41.54 23.07 42.32 24.65 42.32 23.86 39.96 23.07 38.39 21.50 36.81 19.92 36.02 18.35 36.81 16.77 38.39 18.35 39.96 19.92 41.54 21.50 41.54} {black 16.77 39.17} {black 37.24 22.64 35.67 21.85 34.09 21.06 32.52 20.28 30.94 19.49} {black 29.37 21.85 30.94 22.64 33.31 23.43 34.88 24.21 36.46 23.43} {black 19.92 21.85 21.50 22.64 24.65 23.43 27.01 23.43 28.58 24.21 30.16 23.43 27.80 22.64 26.22 21.06 24.65 20.28 23.07 19.49 21.50 21.06} {black 10.47 26.57 12.83 26.57 18.35 27.36 23.07 27.36 23.86 25.79 23.86 24.21 22.28 22.64 20.71 22.64 19.13 21.85 16.77 21.85 15.20 22.64 13.62 23.43 14.41 25.00 15.98 26.57 20.71 28.15 22.28 28.94} {black 3.39 28.94 5.75 29.72 7.32 31.30 9.69 32.09 9.69 30.51 9.69 28.94 8.11 27.36 5.75 25.79 4.17 25.00 2.60 25.00 2.60 26.57 3.39 28.15 4.96 28.94} {black 7.32 19.49 9.69 20.28 11.26 21.06 12.83 21.85 13.62 20.28 12.83 18.70 11.26 17.13 9.69 17.13 8.11 17.13 6.54 17.13 5.75 18.70} {black 1.02 18.70 3.39 19.49 4.96 20.28 3.39 18.70 2.60 17.13 1.02 15.55 -0.55 13.98 -2.13 13.19 -2.91 14.76 -1.34 16.34 1.02 17.91 2.60 19.49 4.17 20.28} {black -8.43 17.13 -6.06 17.91 -2.91 19.49 -1.34 17.13 -2.91 16.34 -4.49 16.34 -6.06 16.34 -8.43 15.55 -6.85 17.13} {black -17.87 19.49 -16.30 20.28 -14.72 21.06 -12.36 21.85 -13.94 20.28 -13.94 18.70 -15.51 17.13 -17.09 15.55 -18.66 16.34 -17.09 17.91 -15.51 18.70} {black -7.64 25.79 -6.06 25.79 -3.70 25.79 -4.49 24.21 -5.28 22.64 -6.85 21.06 -8.43 21.06 -9.21 22.64 -10.00 24.21 -8.43 25.79 -6.06 26.57} {black 53.78 28.15 52.99 26.57 52.20 25.00 51.42 23.43 49.84 21.85 47.48 19.49 45.91 18.70 44.33 17.13 41.97 16.34 40.39 15.55 38.82 14.76 36.46 13.98 33.31 13.98 31.73 13.19 30.16 13.19 27.80 13.19 26.22 13.98 24.65 13.98 22.28 13.98 20.71 13.98 19.13 13.98 17.56 13.98 15.98 13.98 13.62 14.76 12.05 13.98 10.47 13.98 8.90 13.19 5.75 12.40 4.17 12.40 2.60 10.83} {black -1.34 32.09 0.24 33.66 1.81 35.24 3.39 36.02 4.96 37.60 7.32 39.17 9.69 40.75 11.26 41.54 12.83 43.11 14.41 43.90 16.77 44.69 18.35 44.69 20.71 45.47 22.28 46.26 23.86 47.05 26.22 47.83 27.80 47.83 29.37 47.83 30.94 48.62 32.52 48.62 34.09 49.41 35.67 49.41 37.24 49.41 38.82 50.20 40.39 50.98 42.76 51.77 44.33 52.56 45.91 52.56 47.48 53.35 49.06 53.35 50.63 53.35 52.20 54.13 53.78 54.13 56.14 54.13 57.72 54.13 59.29 54.92 60.87 54.92 62.44 54.92 64.02 54.92 65.59 54.92 67.17 54.92 68.74 54.92 70.31 54.92 71.89 54.92 73.46 54.13 75.04 54.92 77.40 54.92 79.76 54.92 81.34 54.92 82.91 55.71 84.49 55.71 86.06 56.50 87.64 56.50 89.21 57.28 90.79 57.28 92.36 58.07 93.94 58.86 95.51 59.65 97.09 60.43 98.66 61.22 100.24 62.01} {black -29.69 13.98 -28.11 15.55 -26.54 17.13 -24.17 18.70 -22.60 19.49 -21.02 20.28 -18.66 21.06 -17.09 21.85 -15.51 22.64 -13.15 24.21 -11.57 25.79 -10.00 26.57 -8.43 27.36 -6.85 28.15 -4.49 29.72 -2.13 30.51 -0.55 31.30 1.02 32.09} {black -2.13 2.95 -0.55 2.95 1.02 3.74 2.60 5.31 3.39 6.89 4.17 8.46 5.75 10.04 7.32 11.61 8.90 13.19} {black -61.97 -12.01 -63.54 -13.58} {black -56.46 -10.43 -56.46 -8.86 -55.67 -7.28} {black -54.88 -6.50 -52.52 -6.50 -50.94 -6.50 -49.37 -7.28 -49.37 -8.86 -50.16 -10.43 -51.73 -12.01 -53.31 -12.80 -54.88 -12.80 -55.67 -11.22 -55.67 -9.65} {black -61.18 -4.13 -58.03 -4.13 -56.46 -3.35 -54.88 -4.92 -56.46 -6.50 -60.39 -8.07 -63.54 -8.86 -64.33 -6.50 -61.18 -4.13} {black -55.67 -11.22 -54.88 -12.80 -55.67 -15.16 -57.24 -16.73 -60.39 -18.31 -65.12 -18.31 -65.91 -16.73 -65.91 -15.16 -64.33 -13.58 -62.76 -13.58} {black -62.76 -13.58} {black -73.78 -19.88 -71.42 -19.09 -66.69 -17.52 -66.69 -19.88 -67.48 -21.46 -70.63 -22.24 -72.20 -23.03 -73.78 -23.03 -73.78 -21.46} {black -76.14 -12.80 -72.99 -10.43 -71.42 -9.65 -69.06 -10.43 -68.27 -12.01 -69.06 -13.58 -70.63 -15.16 -72.20 -15.16 -75.35 -14.37 -73.78 -12.80} {black -87.17 -20.67 -85.59 -19.88 -82.44 -19.09 -80.87 -18.31 -78.50 -19.88 -77.72 -21.46 -79.29 -23.03 -80.08 -24.61 -81.65 -24.61 -86.38 -23.82 -88.74 -23.82 -87.95 -21.46 -87.17 -19.88} {black -107.64 -22.24 -105.28 -22.24 -101.34 -21.46 -100.55 -23.03 -101.34 -25.39 -104.49 -26.18 -106.06 -26.18 -107.64 -24.61 -106.06 -23.03} {black -103.70 -29.33 -100.55 -27.76 -95.04 -26.18 -93.46 -25.39 -93.46 -26.97 -93.46 -28.54 -95.04 -30.12 -96.61 -30.91 -100.55 -32.48 -102.13 -32.48 -101.34 -28.54} {black -117.87 -30.12 -111.57 -28.54 -110.00 -28.54 -109.21 -30.91 -108.43 -32.48 -110.79 -33.27 -112.36 -33.27 -115.51 -34.84 -117.09 -34.84 -117.87 -33.27 -117.87 -31.69 -117.09 -29.33} {black -123.39 -24.61 -121.81 -23.82 -116.30 -21.46 -114.72 -22.24 -110.00 -23.03 -112.36 -24.61 -113.94 -26.18 -116.30 -26.97 -117.87 -26.97 -121.02 -26.97 -122.60 -26.18 -121.02 -23.82 -119.45 -23.03} {black -139.92 -24.61 -138.35 -23.82 -135.20 -23.03 -133.62 -24.61 -132.83 -26.18 -133.62 -27.76 -136.77 -27.76 -138.35 -26.97 -138.35 -24.61} {black -132.83 -30.91 -131.26 -30.12 -129.69 -30.12 -128.11 -29.33 -125.75 -30.91 -124.17 -32.48 -129.69 -34.84 -131.26 -35.63 -132.83 -35.63 -133.62 -34.06 -134.41 -32.48 -135.20 -30.91} {black -35.98 6.10 -38.35 6.10 -39.92 5.31 -41.50 5.31 -43.07 5.31 -44.65 5.31 -46.22 4.53 -47.80 4.53 -50.16 3.74 -51.73 3.74 -53.31 3.74 -54.88 3.74 -56.46 3.74 -58.03 2.95 -59.61 2.17 -61.97 1.38 -63.54 0.59 -65.12 -0.20 -66.69 -1.77 -68.27 -3.35 -69.84 -4.13 -72.20 -5.71 -74.57 -7.28 -76.14 -8.86 -77.72 -9.65 -79.29 -10.43 -80.87 -11.22 -82.44 -12.80 -84.02 -13.58 -85.59 -14.37 -87.17 -14.37 -88.74 -15.16 -90.31 -15.94 -91.89 -16.73 -93.46 -16.73 -95.04 -17.52 -96.61 -18.31 -98.19 -18.31 -99.76 -19.09 -101.34 -19.09 -102.91 -19.88 -104.49 -19.09 -105.28 -17.52 -106.85 -16.73 -108.43 -17.52 -110.79 -17.52 -112.36 -18.31 -113.94 -19.09 -115.51 -19.09 -117.09 -19.09 -118.66 -19.09 -120.24 -19.09 -121.81 -18.31 -123.39 -18.31 -124.96 -19.09} {black -162.76 -52.17 -164.33 -53.74 -166.69 -55.31 -168.27 -56.89 -169.84 -58.46 -171.42 -59.25 -172.99 -61.61 -171.42 -59.25 -169.84 -57.68 -168.27 -56.10 -166.69 -54.53 -165.12 -52.95 -163.54 -52.95 -161.18 -53.74 -161.18 -55.31 -162.76 -57.68 -163.54 -59.25 -165.91 -60.04 -167.48 -60.04 -169.06 -60.04 -170.63 -60.04} {black -166.69 -51.38 -163.54 -51.38 -161.97 -51.38 -160.39 -50.59} {black -167.48 -51.38 -169.06 -50.59 -168.27 -49.02 -166.69 -47.44 -165.12 -45.87} {black -166.69 -46.65 -165.12 -46.65 -163.54 -46.65 -161.18 -45.87 -159.61 -47.44 -158.03 -49.02 -157.24 -50.59} {black -139.92 -13.58 -139.92 -15.16 -138.35 -17.52 -137.56 -19.09 -135.98 -20.67 -134.41 -22.24 -132.83 -23.03 -131.26 -23.82 -129.69 -23.03 -128.11 -22.24 -127.32 -20.67 -125.75 -19.88} {black -139.13 -30.12 -138.35 -31.69 -139.13 -34.06 -139.92 -35.63 -140.71 -37.20 -142.28 -38.78 -141.50 -40.35 -139.92 -41.93 -138.35 -41.93 -136.77 -41.93 -134.41 -41.93 -132.83 -41.93 -131.26 -41.93 -129.69 -42.72 -128.11 -42.72 -126.54 -42.72 -124.96 -43.50} {black -171.42 17.13 -169.84 15.55 -169.06 13.98 -167.48 11.61 -166.69 10.04 -165.91 8.46 -165.12 6.89 -164.33 5.31 -163.54 3.74 -162.76 2.17 -161.97 0.59 -161.18 -0.98 -160.39 -2.56 -159.61 -4.92 -158.82 -6.50 -158.82 -8.07 -158.03 -9.65 -157.24 -11.22 -156.46 -12.80 -155.67 -14.37 -154.09 -15.94 -152.52 -17.52 -151.73 -19.09 -150.94 -20.67 -150.16 -22.24 -150.16 -24.61 -150.16 -26.18 -150.16 -27.76 -151.73 -29.33 -152.52 -31.69 -153.31 -33.27 -154.88 -34.84 -156.46 -35.63 -158.03 -37.20 -159.61 -38.78 -161.18 -39.57 -162.76 -41.14} {black -181.65 -68.70 -180.08 -67.91 -177.72 -67.13 -176.14 -66.34 -174.57 -65.55 -172.99 -65.55 -171.42 -64.76 -169.84 -63.98 -168.27 -63.19 -165.91 -62.40 -164.33 -61.61 -162.76 -60.83 -160.39 -60.04 -158.82 -59.25 -157.24 -58.46 -155.67 -56.89 -154.09 -56.10 -151.73 -55.31 -150.16 -54.53 -147.80 -53.74 -146.22 -53.74 -144.65 -52.95 -143.07 -52.95 -141.50 -52.17 -138.35 -51.38 -135.98 -50.59 -134.41 -49.80 -132.83 -49.80 -131.26 -49.02 -129.69 -48.23 -128.11 -47.44 -126.54 -47.44 -124.96 -46.65 -123.39 -45.87 -121.81 -45.87 -119.45 -45.08 -117.87 -44.29 -115.51 -44.29 -113.94 -43.50 -112.36 -42.72 -110.79 -41.93 -109.21 -41.14 -107.64 -40.35 -105.28 -39.57 -102.91 -38.78 -101.34 -37.99 -99.76 -37.20 -97.40 -37.20 -95.83 -36.42 -94.25 -35.63 -92.68 -34.84 -91.10 -34.84 -89.53 -34.06 -87.95 -34.06 -86.38 -33.27 -84.80 -33.27 -83.23 -32.48 -80.87 -32.48 -79.29 -31.69 -77.72 -31.69 -76.14 -30.91 -74.57 -30.12 -72.99 -29.33 -71.42 -28.54 -69.84 -27.76 -67.48 -26.97 -65.91 -26.18 -64.33 -25.39 -62.76 -24.61 -61.18 -24.61 -59.61 -24.61 -58.03 -23.82 -56.46 -23.03 -54.88 -21.46 -53.31 -20.67 -51.73 -19.88 -50.16 -19.09 -48.58 -17.52 -47.01 -16.73 -45.43 -15.94 -43.86 -15.16 -42.28 -14.37 -40.71 -12.80 -39.13 -11.22} {black -184.80 -56.89 -183.23 -56.10 -181.65 -54.53 -180.08 -53.74 -177.72 -52.17 -176.14 -51.38 -174.57 -49.80 -172.20 -48.23 -170.63 -47.44 -169.06 -46.65 -166.69 -45.87 -165.12 -45.08 -162.76 -43.50 -163.54 -41.93 -165.12 -41.14 -167.48 -40.35 -169.06 -38.78 -170.63 -37.20 -172.20 -36.42 -173.78 -34.84 -175.35 -33.27 -176.93 -31.69 -178.50 -30.91 -180.08 -29.33 -180.87 -27.76 -182.44 -26.18 -184.02 -25.39 -185.59 -23.03 -186.38 -21.46} {black -154.88 -3.35 -156.46 -3.35 -158.03 -1.77} {black -221.02 85.63} {black -225.75 91.93} {black -180.08 58.07} {black -185.59 56.50} {black -169.84 47.05} {black -187.95 77.76} {black -206.06 80.91} {black -194.25 80.91} {black -147.80 21.06 -149.37 21.85 -150.94 21.85 -152.52 22.64} {black -198.19 85.63} {black -174.57 50.20} {black -176.14 55.71} {black -222.60 109.25} {black -227.32 110.04} {black -232.83 101.38} {black -234.41 103.74} {black -231.26 97.44} {black -235.20 105.31} {black -239.13 98.23 -240.71 96.65 -242.28 95.87 -243.86 95.08 -244.65 93.50 -246.22 91.14 -247.01 89.57 -248.58 88.78 -250.16 87.20 -251.73 85.63} {black -248.58 93.50 -249.37 91.93 -250.16 90.35 -251.73 88.78 -253.31 87.20 -254.09 85.63} {black -235.20 117.13 -236.77 115.55 -238.35 113.98 -239.13 111.61 -240.71 110.04 -241.50 108.46 -243.07 106.89 -243.86 105.31 -245.43 103.74 -247.01 101.38 -247.01 99.80 -247.80 98.23 -248.58 96.65 -248.58 95.08 -248.58 93.50} {black -179.29 58.86} {black -187.17 57.28} {black -194.25 86.42} {black -205.28 79.33} {black -203.70 87.99} {black -206.06 85.63} {black -213.15 84.06} {black -216.30 82.48} {black -210.79 75.39} {black -203.70 67.52} {black -201.34 61.22} {black -199.76 58.07} {black -192.68 54.13} {black -191.10 61.22} {black -200.55 63.58} {black -206.85 65.94} {black -210.79 73.03} {black -154.88 26.57 -156.46 28.94 -157.24 30.51 -158.03 32.09 -158.82 33.66 -159.61 35.24 -160.39 36.81 -161.18 39.17 -161.97 40.75 -161.97 42.32 -162.76 44.69 -161.97 42.32 -161.18 40.75 -160.39 38.39 -159.61 36.81 -158.82 35.24 -158.03 32.87 -157.24 31.30 -156.46 29.72 -155.67 27.36 -155.67 25.79 -154.88 24.21} {black -215.12 82.09} {black -219.84 93.90 -221.02 97.44 -221.02 99.80 -221.02 103.35 -221.02 105.71 -218.66 105.71 -216.30 104.53 -213.94 103.35 -211.57 102.17 -209.21 99.80 -209.21 96.26 -208.03 93.90 -208.03 91.54 -209.21 89.17 -211.57 87.99 -213.94 90.35 -216.30 92.72 -218.66 95.08 -219.84 97.44} {black -203.31 66.73 -199.76 65.55 -197.40 65.55 -195.04 64.37 -192.68 63.19 -189.13 63.19 -186.77 62.01 -184.41 60.83 -182.05 60.83 -179.69 59.65 -177.32 58.46 -176.14 62.01 -177.32 64.37 -177.32 66.73 -178.50 69.09 -180.87 71.46 -183.23 72.64 -185.59 72.64 -187.95 72.64 -190.31 72.64 -192.68 73.82 -195.04 73.82 -197.40 75.00 -200.94 76.18 -200.94 73.82 -202.13 70.28 -198.58 67.91} {black -238.74 97.44 -235.20 93.90 -231.65 90.35 -229.29 87.99 -225.75 84.45 -224.57 82.09 -222.20 79.72 -219.84 76.18 -216.30 72.64 -211.57 65.55 -209.21 63.19 -206.85 60.83 -204.49 58.46 -202.13 56.10 -199.76 53.74 -197.40 52.56 -193.86 49.02 -191.50 47.83 -190.31 45.47} {black -241.10 96.26} {black -235.20 116.34 -230.47 113.98 -228.11 113.98 -225.75 112.80 -222.20 111.61 -219.84 110.43 -217.48 108.07 -215.12 105.71 -212.76 103.35 -209.21 102.17 -206.85 99.80 -203.31 96.26 -199.76 93.90 -197.40 91.54 -195.04 90.35 -192.68 86.81 -190.31 84.45 -187.95 83.27 -184.41 79.72 -180.87 76.18 -179.69 73.82 -177.32 71.46 -174.96 69.09 -173.78 66.73 -172.60 63.19 -170.24 60.83 -169.06 58.46 -169.06 56.10} {black -166.69 52.56 -167.87 54.92 -169.06 57.28 -169.06 59.65 -170.24 62.01 -172.60 65.55 -173.78 67.91} {black -158.43 33.66 -160.79 36.02 -161.97 38.39 -164.33 41.93 -164.33 44.29 -166.69 46.65 -167.87 49.02 -169.06 51.38 -170.24 53.74 -170.24 57.28 -171.42 59.65 -172.60 62.01 -171.42 59.65} {black -167.87 14.76 -167.87 18.31 -169.06 20.67 -169.06 23.03 -166.69 23.03 -163.15 21.85 -161.97 19.49 -160.79 15.94 -161.97 13.58 -165.51 14.76 -167.87 18.31 -169.06 20.67} {black -156.06 11.22 -154.88 13.58 -153.70 15.94 -151.34 15.94 -151.34 11.22 -150.16 8.86 -153.70 8.86 -156.06 11.22 -157.24 13.58} {black -161.97 4.13 -163.15 6.50 -164.33 8.86 -165.51 12.40 -163.15 13.58 -160.79 13.58 -158.43 14.76 -158.43 12.40 -157.24 8.86 -156.06 6.50 -156.06 4.13 -158.43 2.95 -160.79 4.13 -163.15 6.50 -163.15 8.86} {black -158.43 -5.31 -158.43 -2.95 -158.43 0.59 -156.06 2.95 -153.70 4.13 -151.34 1.77 -148.98 -0.59 -150.16 -2.95 -152.52 -5.31 -154.88 -4.13} {black -151.34 -15.94 -150.16 -12.40 -148.98 -7.68 -146.61 -7.68 -143.07 -8.86 -140.71 -13.58 -140.71 -15.94 -145.43 -15.94 -148.98 -17.13 -150.16 -12.40} {black -147.80 -20.67 -145.43 -23.03 -143.07 -25.39 -141.89 -28.94 -140.71 -31.30 -139.53 -33.66} {black -172.60 19.49 -171.42 13.58 -170.24 11.22 -169.06 7.68 -167.87 5.31 -165.51 0.59 -164.33 -1.77 -161.97 -4.13 -159.61 -7.68 -158.43 -10.04 -156.06 -12.40 -154.88 -14.76 -153.70 -17.13 -151.34 -19.49 -150.16 -23.03 -147.80 -24.21 -144.25 -26.57 -141.89 -28.94} {black -145.43 -4.13 -145.43 -6.50 -144.25 -8.86 -143.07 -11.22 -141.89 -14.76 -140.71 -17.13} {black -163.15 34.84 -160.79 31.30 -158.43 28.94 -157.24 25.39 -154.88 23.03 -153.70 20.67 -152.52 18.31 -150.16 12.40 -148.98 10.04 -148.98 7.68 -148.98 5.31 -147.80 1.77 -147.80 -0.59 -147.80 -2.95 -146.61 -6.50 -145.43 -8.86 -145.43 -11.22} {black -148.98 19.49 -145.43 18.31 -143.07 15.94 -141.89 13.58 -139.53 10.04 -138.35 7.68 -135.98 5.31 -133.62 1.77 -130.08 -2.95 -124.17 -2.95 -121.81 -2.95 -119.45 -4.13 -117.09 -4.13 -114.72 -2.95 -112.36 -1.77 -110.00 -1.77 -107.64 -1.77 -105.28 -1.77 -102.91 -1.77 -100.55 -1.77 -98.19 -1.77 -97.01 -5.31 -95.83 -1.77 -94.65 0.59 -92.28 2.95 -91.10 5.31 -89.92 7.68 -88.74 10.04} {black -52.13 17.13 -48.58 18.31 -46.22 19.49 -43.86 20.67 -41.50 19.49 -39.13 17.13 -39.13 14.76 -40.31 11.22 -41.50 8.86 -43.86 8.86 -46.22 8.86 -48.58 10.04 -49.76 13.58 -49.76 15.94 -49.76 18.31} {black -47.40 50.20 -42.68 52.56 -40.31 53.74 -36.77 54.92} {black -52.13 43.11 -50.94 46.65 -50.94 49.02 -49.76 51.38 -52.13 46.65 -53.31 44.29 -54.49 41.93 -54.49 39.57} {black -50.94 41.93 -48.58 39.57 -46.22 37.20 -43.86 34.84 -41.50 32.48 -39.13 30.12 -36.77 27.76 -35.59 25.39 -33.23 21.85 -32.05 19.49 -30.87 17.13 -24.96 20.67 -23.78 23.03 -20.24 25.39 -17.87 27.76} {black -56.85 23.03 -54.49 27.76 -53.31 30.12 -49.76 30.12 -47.40 30.12 -45.04 26.57 -43.86 24.21 -43.86 21.85 -48.58 20.67 -53.31 19.49 -53.31 24.21} {black -39.13 5.31 -39.13 8.86 -37.95 11.22 -37.95 13.58 -35.59 14.76 -33.23 14.76 -30.87 14.76 -29.69 10.04 -30.87 6.50 -30.87 4.13 -30.87 1.77 -29.69 -0.59 -35.59 0.59 -37.95 1.77 -37.95 5.31 -36.77 7.68 -35.59 10.04} {black -30.87 -13.58 -30.87 -17.13 -32.05 -23.03 -32.05 -25.39 -32.05 -27.76 -32.05 -25.39 -30.87 -19.49 -24.96 -15.94 -22.60 -14.76 -20.24 -13.58 -16.69 -13.58 -14.33 -15.94 -13.15 -19.49 -14.33 -21.85 -13.15 -24.21 -20.24 -27.76 -23.78 -28.94 -26.14 -28.94 -28.50 -30.12 -28.50 -25.39 -28.50 -19.49 -28.50 -17.13} {black -21.42 -2.95 -23.78 -4.13} {black -27.32 -5.31 -26.14 -7.68 -24.96 -10.04 -21.42 -11.22 -17.87 -10.04 -15.51 -10.04 -13.15 -10.04 -14.33 -5.31 -14.33 -2.95 -20.24 -2.95 -22.60 -4.13} {black -17.87 10.04 -20.24 8.86 -23.78 6.50 -26.14 4.13 -24.96 1.77 -23.78 -1.77 -22.60 -4.13 -19.06 0.59 -16.69 2.95 -17.87 5.31 -17.87 7.68} {black -9.61 -2.95 -11.97 -0.59 -14.33 0.59 -14.33 2.95 -14.33 5.31 -13.15 7.68 -13.15 11.22 -11.97 13.58 -9.61 11.22 -7.24 11.22 -4.88 10.04 -4.88 7.68 -4.88 5.31 -3.70 2.95 -3.70 0.59 -4.88 -1.77 -7.24 -1.77 -9.61 -1.77} {black -10.79 -28.94 -13.15 -30.12 -16.69 -31.30 -20.24 -32.48 -22.60 -33.66 -26.14 -34.84 -29.69 -36.02 -32.05 -37.20 -36.77 -39.57 -39.13 -41.93 -41.50 -41.93 -47.40 -45.47 -50.94 -45.47 -53.31 -46.65 -58.03 -49.02 -60.39 -50.20 -62.76 -51.38} {black -161.97 30.12 -164.33 33.66 -166.69 37.20 -169.06 39.57 -173.78 41.93 -176.14 44.29 -178.50 46.65 -180.87 49.02 -183.23 51.38 -186.77 49.02 -189.13 47.83 -191.50 45.47 -186.77 41.93 -183.23 38.39} {black -172.60 14.76 -172.60 17.13 -172.60 19.49 -173.78 21.85 -176.14 24.21 -177.32 27.76 -180.87 31.30 -182.05 33.66 -184.41 37.20 -185.59 39.57 -183.23 38.39 -177.32 30.12 -173.78 27.76 -177.32 30.12 -180.87 36.02 -182.05 38.39} {black -185.59 -18.31 -184.41 -15.94 -183.23 -12.40 -182.05 -10.04 -180.87 -7.68 -179.69 -5.31 -178.50 -2.95 -178.50 0.59 -177.32 2.95 -176.14 5.31 -176.14 7.68 -174.96 11.22 -174.96 13.58 -173.78 15.94} {black -140.71 -50.20 -137.17 -47.83 -134.80 -47.83 -128.90 -45.47 -126.54 -45.47 -122.99 -44.29 -120.63 -43.11 -118.27 -41.93 -115.91 -41.93 -112.36 -40.75 -110.00 -39.57 -107.64 -39.57 -105.28 -38.39 -102.91 -38.39 -100.55 -37.20 -98.19 -36.02 -94.65 -36.02 -92.28 -34.84 -89.92 -34.84 -87.56 -34.84 -85.20 -33.66 -82.83 -32.48 -80.47 -32.48 -78.11 -31.30 -75.75 -30.12 -73.39 -30.12 -71.02 -28.94 -67.48 -28.94 -65.12 -27.76 -62.76 -27.76 -60.39 -26.57 -58.03 -25.39 -55.67 -24.21 -53.31 -23.03 -50.94 -20.67 -48.58 -19.49 -46.22 -17.13 -43.86 -17.13 -41.50 -14.76 -39.13 -13.58 -36.77 -12.40} {black -37.95 -6.50 -36.77 -8.86 -35.59 -11.22 -34.41 -13.58 -33.23 -15.94 -32.05 -18.31} {black -137.17 14.76 -132.44 14.76 -130.08 13.58 -127.72 12.40 -125.35 12.40 -122.99 12.40 -119.45 12.40 -114.72 11.22 -111.18 11.22 -108.82 10.04 -106.46 10.04 -104.09 10.04 -101.73 11.22 -99.37 10.04 -97.01 8.86 -94.65 8.86 -91.10 7.68 -88.74 7.68 -86.38 7.68 -84.02 7.68 -81.65 7.68 -79.29 8.86 -76.93 8.86 -74.57 8.86 -72.20 8.86 -69.84 8.86 -67.48 8.86 -65.12 8.86 -62.76 8.86 -59.21 8.86 -56.85 8.86 -54.49 8.86 -52.13 7.68 -48.58 7.68 -46.22 6.50 -43.86 5.31 -41.50 2.95 -40.31 0.59 -39.13 -1.77 -39.13 -4.13 -39.13 -6.50 -39.13 -8.86 -39.13 -11.22} {black -167.87 30.12 -165.51 30.12 -164.33 27.76 -161.97 24.21 -159.61 23.03 -157.24 21.85 -154.88 19.49 -152.52 18.31 -150.16 15.94 -147.80 14.76 -144.25 12.40 -141.89 12.40 -139.53 12.40 -137.17 12.40 -134.80 12.40 -132.44 12.40 -130.08 12.40 -127.72 13.58 -125.35 14.76 -122.99 15.94 -118.27 15.94 -115.91 17.13 -113.54 17.13 -111.18 18.31 -108.82 18.31 -105.28 18.31 -102.91 20.67 -100.55 23.03 -98.19 23.03 -95.83 24.21 -93.46 25.39 -91.10 26.57 -88.74 26.57 -85.20 27.76 -82.83 28.94 -80.47 30.12 -78.11 31.30 -75.75 31.30 -73.39 32.48 -71.02 33.66 -68.66 34.84 -65.12 36.02} {black -56.85 46.65 -54.49 44.29 -53.31 41.93 -53.31 39.57 -56.85 37.20 -59.21 36.02 -61.57 37.20 -63.94 37.20 -66.30 37.20} } set XVIgrid {-277.322834646 -94.0157480316 39.3700787402 0.0 0.0 39.3700787402 15 6} therion/samples/pocket-topo/thconfig0000644000076400010400000000030011106250404020703 0ustar userAdministratorsencoding utf-8 source demo.th export model -o cave.3d export model -o cave.plt export model -o cave.lox export map -o cave.xvi -layout-scale 1 100 #!CLEAN cave.3d cave.plt cave.lox cave.xvi therion/samples/q-marks/0000755000076400010400000000000012270034352016302 5ustar userAdministratorstherion/samples/q-marks/centerline.th0000644000076400010400000000105711003704040020761 0ustar userAdministratorsencoding utf-8 #!FILE 2 centerline data normal from to compass clino tape 0 1 10 8 8.4 1 2 43 24 6.1 2 3 334 16 9.1 1 4 267 11 6.9 4 5 288 7 8.7 2 6 69 8 11.8 6 7 25 23 8.3 #!SUBTITLE Question marks in centerline #! In the centerline object, you may add a special flags to the station, #! where continuation is possible. Just use following syntax #!CODE station 5 "pit" continuation attr Code V explored 20m #!ENDCODE endcenterline therion/samples/q-marks/map.th20000644000076400010400000000501311004075550017474 0ustar userAdministratorsencoding utf-8 ##XTHERION## xth_me_area_adjust -128.0 -128.0 953.0 816.0 ##XTHERION## xth_me_area_zoom_to 100 ##XTHERION## xth_me_image_insert {354.329 1 1.0} {98.423 0} map.xvi 0 {} scrap scrap.1 -scale [-128.0 -128.0 935.085 -128.0 0.0 0.0 27.002359 0.0 m] #!FILE 4 #!SUBTITLE Question marks in maps #! In the scrap (.th2 file), you can use -text, -code #! and -explored options to continuation symbol. #!CODE point 796.0 676.0 continuation -attr Code A -explored 50m \ -text "water too cold to continue survey" #!ENDCODE line pit 134.0 257.0 148.0 276.0 150.0 329.0 150.0 329.0 smooth off endline point 87.989 305.313 station -name 5 point 249.609 252.753 station -name 4 point 735.829 558.663 station -name 7 point 672.239 422.443 station -name 6 point 382.089 494.683 station -name 3 point 457.479 339.963 station -name 2 point 382.679 259.643 station -name 1 point 354.329 98.423 station -name 0 line wall 432.0 347.0 432.0 347.0 418.0 312.0 386.0 295.0 354.0 278.0 321.0 274.0 301.0 277.0 281.0 280.0 243.0 268.0 203.0 287.0 163.0 306.0 150.0 326.0 125.0 340.0 100.0 354.0 56.0 377.0 48.0 344.0 40.0 311.0 -9.0 248.0 61.0 242.0 131.0 236.0 109.0 273.0 153.0 260.0 197.0 247.0 230.0 231.0 290.0 233.0 350.0 235.0 388.0 270.0 349.0 217.0 310.0 164.0 343.0 132.0 295.0 97.0 smooth off endline point 362.0 507.0 continuation -align tl -attr Code B \ -text "strong wind from breakdown" point 407.0 516.0 air-draught -orientation 155.4 line wall:debris 383.0 507.0 324.0 408.0 383.0 452.0 432.0 347.0 smooth off endline line wall 729.0 603.0 713.0 574.0 676.0 492.0 667.0 478.0 658.0 464.0 673.0 431.0 637.0 421.0 601.0 411.0 513.0 377.0 491.0 367.0 469.0 357.0 470.0 345.0 459.0 371.0 448.0 397.0 425.0 437.0 420.0 451.0 415.0 465.0 394.0 504.0 394.0 504.0 smooth off endline area water l22-793-660 endarea line border -id l22-793-660 -close on 711.0 588.0 737.0 568.0 759.95 527.0 771.0 527.0 785.0 527.0 820.0 638.0 820.0 638.0 smooth off 760.0 683.0 760.0 683.0 685.0 608.0 711.0 588.0 endline line wall:presumed 729.0 603.0 760.0 660.0 endline line wall:presumed 768.0 557.0 783.0 598.0 807.0 636.0 807.0 636.0 smooth off endline line wall 378.0 85.0 383.0 142.0 388.0 225.0 402.0 247.0 416.0 269.0 433.0 305.0 448.0 310.0 463.0 315.0 466.0 329.0 523.0 352.0 580.0 375.0 614.0 388.0 648.0 399.0 682.0 410.0 693.0 413.0 709.0 428.0 725.0 443.0 751.0 521.0 768.0 557.0 smooth off endline endscrap therion/samples/q-marks/thconfig.10000644000076400010400000000103212267525026020172 0ustar userAdministratorsencoding utf-8 #!PROCESS #!TITLE 60 Question marks handling #!FILE 1 #! #! Possible continuations are treated special way in therion #! in both centerline and map files. You may associate text #! description, explored length (behind this continuation) #! or any other atribute to it (like Code if you have your #! own coding standard for continuations). input thconfig.1.layout source centerline.th export map -o map1.pdf -layout normal export map -o map2.pdf -layout show-cont export map -o map.xvi #!CLEAN map1.pdf map2.pdf map.xvi therion/samples/q-marks/thconfig.1.layout0000644000076400010400000000231611025756356021517 0ustar userAdministratorsencoding utf-8 #!FILE 3 layout common scale 1 500 map-header 0 0 off #! When you export map and use #!CODE symbol-show point flag:continuation #!ENDCODE #! in your layout, station with continuation flag specified #! is marked by question mark (continuation #! symbol is shown above the station). #!IMAGE map1.pdf endlayout layout normal copy common endlayout layout show-cont copy common #! You may redefine continuation symbol to show also #! continuation description (stored in _text #! attribute) using following layout code #!CODE code metapost def p_continuation(expr pos,theta,sc,al) = % draw default continuation symbol p_continuation_UIS(pos,theta,sc,al); % if text attribute is set if known(ATTR__text) and picture(ATTR__text): % set labeling color to light orange push_label_fill_color(1.0, 0.9, 0.8); % draw filled label with text next to ? p_label.urt(ATTR__text,(.5u,-.25u) transformed T,0.0,8); % restore original labeling color pop_label_fill_color; fi; enddef; endcode #!ENDCODE #! Then also continuation description is displayed in the map. #!IMAGE map2.pdf endlayout therion/samples/q-marks/thconfig.20000644000076400010400000000142611025756564020206 0ustar userAdministratorsencoding utf-8 #!PROCESS #!FILE 5 #! #! In the map, also the question marks only are displayed by default. #! #!IMAGE map3.pdf #! #! When you redefine continuation symbol as mentioned above, #! you can show also continuation codes and descriptions. #! #!IMAGE map4.pdf input thconfig.1.layout source survey sample -title "Sample cave" input centerline.th input map.th2 endsurvey endsource export map -o map3.pdf -layout normal export map -o map4.pdf -layout show-cont #!SUBTITLE Exporting question mark lists #! You may also export a list of all continuations from your project #! project using #!CODE export continuation-list -o questions.html #!ENDCODE #! File questions.html then contains following list: #!HTML questions.html #!CLEAN map3.pdf map4.pdf questions.html therion/samples/samples.tcl0000755000076400010400000003735212267532530017123 0ustar userAdministrators#! /usr/bin/tclsh # Test all therion features and generate features HTML pages. # # Usage: samples.tcl # samples.tcl clean set outd "../samples.doc" set flog [open samples.log w] proc log_msg {msg} { global flog puts -nonewline $msg puts -nonewline $flog $msg } set dirnum 0 set dirlist {} set filelist {} proc scan_files {dir} { global filelist dirnum farray cleanlist dirlist set subdirs {} catch { set subdirs [glob -directory $dir -types d *] } foreach sd $subdirs { scan_files $sd } lappend dirlist $dir incr dirnum log_msg "Scanning directory: $dir\n" set flist {} catch { set flist [glob -directory $dir *.th *.th2 *.tc thconfig*] } foreach fn $flist { set fn [file tail $fn] lappend filelist [list $fn $dir [llength $filelist] $dirnum] log_msg " $fn\n" } } set thcmd [file normalize [file join [pwd] "../therion"]] set processlist {} proc scan_lists {} { global dirnum farray dirlist global filelist farray cleanlist processlist thcmd foreach fr $filelist { set fnum [lindex $fr 2] set farray($fnum,FILE) 0 set farray($fnum,CLEAN) {} set farray($fnum,PROCESS) {} set fid [open [file join [lindex $fr 1] [lindex $fr 0]] r] while {![eof $fid]} { gets $fid ln if {[regexp -nocase {^\s*\#\!(FILE|PROCESS|CLEAN)(.*)} $ln dum cmnd rest]} { regsub {^\s+} $rest {} rest regsub {\s+$} $rest {} rest switch [string toupper $cmnd] { FILE { if {[string length $rest] > 0} { set farray($fnum,FILE) $rest } } PROCESS { lappend farray($fnum,PROCESS) $rest } CLEAN { if {[llength $rest] > 0} { foreach fn $rest { lappend farray($fnum,CLEAN) $fn } } } } } } close $fid } foreach dn $dirlist { set clist {} catch { set clist [glob -directory $dn *.log *~ .xth_* .xtherion.dat] } foreach cf $clist { lappend cleanlist $cf } } set sortl {} set fxmax {} set fxmin {} foreach fr $filelist { set fnum [lindex $fr 2] set fdir [lindex $fr 1] set dnum [lindex $fr 3] set ftxt $farray($fnum,FILE) while {[regexp {^\s*\.\.\/} $ftxt]} { set fdir [file dirname $fdir] set dnum [expr [lsearch $dirlist $fdir] + 1] regsub {^\s*\.\.\/} $ftxt {} ftxt } set fxval [expr double($ftxt)] if {[llength $fxmax] == 0} { set fxmax $fxval set fxmin $fxmax } else { if {$fxmax < $fxval} {set fxmax $fxval} if {$fxmin > $fxval} {set fxmin $fxval} } lappend sortl [list $fnum $dnum $fxval] } set ddist [expr $fxmax - $fxmin + 1.0] foreach litem $sortl { set fnum [lindex $litem 0] set dnum [lindex $litem 1] set fxval [lindex $litem 2] set fsort([expr double($dnum) * $ddist + $fxval]) [list $fnum $dnum] } set newfilelist {} set xlist [lsort -real [array names fsort]] foreach x $xlist { set newitem [lindex $filelist [lindex $fsort($x) 0]] lset newitem 3 [lindex $fsort($x) 1] lappend newfilelist $newitem } set filelist $newfilelist foreach fr $filelist { set fnum [lindex $fr 2] foreach item $farray($fnum,CLEAN) { lappend cleanlist [file join [lindex $fr 1] $item] } foreach item $farray($fnum,PROCESS) { set nitem $item if {[string length $nitem] == 0} { set nitem "$thcmd [lindex $fr 0]" } lappend processlist [list $nitem [lindex $fr 1]] } } } proc clean_files {} { global cleanlist log_msg "\nDeleting files:\n" foreach fn $cleanlist { log_msg "$fn " if {[catch { file delete -force -- $fn }]} { log_msg "\[ERROR\]\n" } else { log_msg "\[OK\]\n" } } } proc process_files {} { global processlist set cdir [pwd] log_msg "\nProcessing files:\n" foreach ps $processlist { set p [lindex $ps 0] set d [lindex $ps 1] cd $d log_msg "$d: $p\n" catch { eval "exec $p >&@ stdout" # eval exec "cmd /c $p" } log_msg "\n\n" cd $cdir } } proc get_html_body {fn} { set fid [open $fn "r"] set ftext [read $fid] close $fid regexp -nocase {\<\s*body[^\>]*\>\s*(.*)\<\/\s*body[^\>]*\>} $ftext dum ftext regsub -nocase -all {\<\s*table} $ftext {]*\>\s*(.*)\<\/\s*body[^\>]*\>} $ftext dum ftext regsub -nocase -all {\<\s*table[^\>]*>} $ftext "\\bigskip\\begingroup\\input etc/TXSruled.tex \\LeftJustifyTables\\ruledtable" ftext regsub -nocase -all {[\n\s]*[\n\s]*
} $ftext "\\endruledtable\\endgroup\\bigskip" ftext regsub -nocase -all {\]*>} $ftext {} ftext regsub -nocase {[\n\s]*} $ftext "\}\\cr" ftext regsub -nocase -all {[\n\s]*\} $ftext "\\nr" ftext regsub -nocase -all {\]*>} $ftext "" ftext regsub -nocase -all {\} $ftext {\&} ftext regsub -nocase -all {\]*>} $ftext "\{\\bf " ftext regsub -nocase -all {\} $ftext "\}\\&" ftext regsub -all {\_} $ftext {\\_} ftext regsub -all {\ } $ftext { } ftext regsub {\s*$} $ftext {} ftext return $ftext } proc create_docs {} { global filelist tcl_platform outd set cdir {} set chid 0 set imid 0 set chapters {} set imagelist {} array set data {} array set texdata {} # scan chapters and subchapters log_msg "\nScanning texts:\n" set inparagraph 0 set incode 0 foreach fr $filelist { set fnum [lindex $fr 2] if {[lindex $fr 3] != $cdir} { if {$inparagraph} { append data($chid,TEXT) "

\n" append texdata($chid,TEXT) "\n\n" set inparagraph 0 } incr chid lappend chapters [list $chid 0] set data($chid,TITLE) [file tail [lindex $fr 1]] set texdata($chid,TITLE) [file tail [lindex $fr 1]] set data($chid,TEXT) {} set texdata($chid,TEXT) {} set csub 0 set data($chid,SUBS) {} set texdata($chid,SUBS) {} set cdir [lindex $fr 3] } log_msg "[file join [lindex $fr 1] [lindex $fr 0]]\n" set fid [open [file join [lindex $fr 1] [lindex $fr 0]] r] while {![eof $fid]} { gets $fid ln if {[regexp {^\s*encoding\s+(\S+)} $ln dum enc]} { switch $enc { default {set fenc $enc} } fconfigure $fid -encoding $fenc } if {[regexp -nocase {^\s*\#\!title\s+(\S+)\s+(\S.*)} $ln dum cn ct]} { if {$inparagraph} { append data($chid,TEXT) "

\n" append texdata($chid,TEXT) "\n\n" set inparagraph 0 } incr chid lappend chapters [list $chid $cn] set data($chid,TITLE) $ct set texdata($chid,TITLE) $ct set data($chid,TEXT) {} set texdata($chid,TEXT) {} set csub 0 set data($chid,SUBS) {} set texdata($chid,SUBS) {} } elseif {[regexp -nocase {^\s*\#\!subtitle\s+(\S.*)$} $ln dum ct]} { if {$inparagraph} { append data($chid,TEXT) "

\n" append texdata($chid,TEXT) "\n\n" set inparagraph 0 } lappend data($chid,SUBS) $ct lappend texdata($chid,SUBS) $ct append data($chid,TEXT) "

$ct

\n" append texdata($chid,TEXT) "\\subsubchapter {$ct}.\n" incr csub } elseif {[regexp {^\s*\#\!\s*$} $ln dum ct]} { if {$inparagraph} { append data($chid,TEXT) "

\n" append texdata($chid,TEXT) "\n\n" set inparagraph 0 } } elseif {[regexp -nocase {^\s*\#\!image\s+(\S.*)$} $ln dum ii]} { set iisrc [file join [lindex $fr 1] $ii] set iifnm [format "%06d-%s" $imid [file tail $iisrc]] set iiimg [format "%06d.png" $imid [file tail $iisrc]] lappend imagelist [list $imid $iisrc $iifnm $iiimg] if {$inparagraph} { append data($chid,TEXT) "

\n" append texdata($chid,TEXT) "\n\n" set inparagraph 0 } append data($chid,TEXT) "

\n\n

\n" append texdata($chid,TEXT) "\n\n\\fitpic{../samples.doc/$iifnm}\n\n" incr imid } elseif {[regexp -nocase {^\s*\#\!HTML\s+(\S.*)$} $ln dum ii]} { set html_src [file join [lindex $fr 1] $ii] if {$inparagraph} { append data($chid,TEXT) "

\n" append texdata($chid,TEXT) "\n\n" set inparagraph 0 } append data($chid,TEXT) [get_html_body $html_src] append texdata($chid,TEXT) [get_html_body_for_tex $html_src] } elseif {[regexp -nocase {^\s*\#\!code\s*$} $ln dum ct]} { if {$inparagraph} { append data($chid,TEXT) "

\n" append texdata($chid,TEXT) "\n\n" set inparagraph 0 } append data($chid,TEXT) "
\n"
	append texdata($chid,TEXT) "|"
	set incode 1
      } elseif {[regexp -nocase {^\s*\#\!endcode\s*$} $ln dum ct]} {
	append data($chid,TEXT) "
\n" append texdata($chid,TEXT) "|\n" set incode 0 } elseif {[regexp -nocase {^\s*\#\!(process|clean|file)} $ln dum cmd]} { } elseif {$incode} { append data($chid,TEXT) "$ln\n" append texdata($chid,TEXT) "$ln\n" } elseif {[regexp {^\s*\#\!(.*\S.*)$} $ln dum ct]} { if {!$inparagraph} { append data($chid,TEXT) "

\n" append texdata($chid,TEXT) "\n\n" set inparagraph 1 } append data($chid,TEXT) "$ct\n" regsub -nocase -all {\} $ct {|} ct regsub -nocase -all {\} $ct "\{\\it " ct regsub -nocase -all {\} $ct "\}" ct regsub -nocase -all {MetaPost} $ct "\\MP{}" ct append texdata($chid,TEXT) "$ct\n" } } close $fid } if {[string compare $tcl_platform(platform) windows] == 0} { set convpath [file normalize "C:/Program files/Therion/bin/convert.exe"] } else { set convpath convert } # create output directory file mkdir $outd log_msg "\nConverting images:\n" foreach img $imagelist { set iiimg [lindex $img 3] set iifnm [lindex $img 2] set iisrc [lindex $img 1] log_msg "$iisrc\n" set dpi 300 while {[catch { eval "exec \"$convpath\" -density $dpi $iisrc $outd/tmp.png" }] && ($dpi > 10)} { log_msg "error at $dpi dpi processing $iisrc\n" set dpi [expr int(double($dpi) * 0.9)] } eval "exec \"$convpath\" -resize 419x419 $outd/tmp.png $outd/$iiimg" file delete -force $outd/tmp.png file copy -force -- $iisrc "$outd/$iifnm" } set fid [open "$outd/index.css" w] puts $fid { body,td,.headerlinks {font-family: Verdana, Helvetica, Arial, sans-serif; line-height: 1.5;} body { background-color:white;} .headerlinks {font-weight: 500;} p,h1,h2,h3 {margin-left: 16px; margin-right: 16px;} h1 {font-size: 150%} h2 {font-size: 125%} .footer {margin-left: 16px;} a {text-decoration: none} a:active {color: blue; text-decoration: none;} a:visited {color: blue; text-decoration: none;} a:hover {color: red; text-decoration: none; } ol { list-style-type: lower-greek } ul { list-style-type: circle } code { font-family: Courier; font-weight: bold; line-height: 1.5; } pre.code { padding:0.5em; border:1px solid #000; font-weight:bold; color:#000; background-color:#f7f9fa; overflow:auto; line-height:140%; margin-left: 16px; margin-right: 16px; } font.nav {font-size: 75%;} table.htmlinput { font-size:80%; margin-left: 16px; margin-right: 16px; border-spacing: 0px; } th.htmlinput { border-bottom:2px solid #a7a9aa; padding-left:8px; padding-right:8px; padding-top:0px; padding-bottom:1px } td.htmlinput { border-bottom:1px solid #a7a9aa; padding-left:8px; padding-right:8px; padding-top:0px; padding-bottom:0px } } # END OF CSS close $fid # export html pages set fidx [open "$outd/index.html" w] fconfigure $fidx -encoding utf-8 set texfidx [open "$outd/index.tex" w] foreach ch $chapters { set csort([expr double([lindex $ch 1])]) $ch } set xlist [lsort -real [array names csort]] set chapters {} foreach xch $xlist { set ch $csort($xch) if {[string length $data([lindex $ch 0],TEXT)] > 0} { lappend chapters $ch } } set nchapters [llength $chapters] puts $fidx "\n\nTherion features.\n\n\n" puts $fidx "

\n\n\n\n\n
\n" puts $fidx "\n" puts $fidx "" puts $fidx "\n
|Start|
" puts $fidx "
" puts $fidx "

Therion features:

\n

\n

    " set chx 0 foreach ch $chapters { set chid [lindex $ch 0] set chfn "[lindex $ch 1].html" puts $fidx "
  • $data($chid,TITLE)
  • " puts $texfidx "\\subchapter {$texdata($chid,TITLE)}." puts $texfidx $texdata($chid,TEXT) set fout [open "$outd/$chfn" w] fconfigure $fout -encoding utf-8 puts $fout "\n\n$data($chid,TITLE)\n\n\n" puts $fout "
    \n\n\n\n\n
    \n" puts $fout "\n" puts $fout "" puts $fout "" puts $fout "" puts $fout "\n
    " if {$chx > 0} { puts $fout "|Previous|" } puts $fout "|Contents|" if {($chx + 1) < $nchapters} { puts $fout "|Next|" } puts $fout "
    " puts $fout "
    " puts $fout "

    $data($chid,TITLE)

    " puts -nonewline $fout $data($chid,TEXT) puts $fout "

    \n"; puts $fout "
    " puts $fout "\n" puts $fout "" puts $fout "" puts $fout "" puts $fout "\n
    " if {$chx > 0} { puts $fout "|Previous|" } puts $fout "|Contents|" if {($chx + 1) < $nchapters} { puts $fout "|Next|" } puts $fout "
    " puts $fout "
    \n
    \n" close $fout incr chx } puts $fidx "
\n

" puts $fidx "
" puts $fidx "\n" puts $fidx "" puts $fidx "\n
|Start|
" puts $fidx "
\n
\n" puts $fidx "" } if {([llength $argv] > 0) && [regexp -nocase {^clean$} [lindex $argv 0]]} { scan_files "" scan_lists clean_files } else { if {[llength $argv] == 0} { scan_files "" } else { foreach d $argv { scan_files $d } } scan_lists process_files create_docs } close $flog exittherion/samples/survex/0000755000076400010400000000000012270034352016263 5ustar userAdministratorstherion/samples/survex/cave.3d0000644000076400010400000000124011253630022017422 0ustar userAdministratorsSurvex 3D Image File v6 cave Tue,2009.09.15 07:11:28 Central Europe Daylight Time Œ ¤ˆ€cave.use)lE€=°€òë)lE€.subÇEÐèÄ €createYmö €‡s- €·  €.suböÿÿÿ  èè€ignoreòNðÿÿÿ€¢ÙSÿÿÿ€^Ç ­ÿÿÿ¢ÙSÿÿÿ€.subT>SÿÿÿB.1T>SÿÿÿJ0¢ÙSÿÿÿB3^Ç ­ÿÿÿB2¢ÙSÿÿÿB1òNðÿÿÿB create.sub.1öÿÿÿ  J0·  B3·  B2‡s- B1Ymö B use.sub.1ÇEJ0)lEB3òëB2=°B1)lEZ0Œ ¤ˆZcreate.0ÐèÄ Zignore.0èètherion/samples/survex/cave.svx0000644000076400010400000000024710564775240017762 0ustar userAdministrators*begin cave *include use/use.svx *include create/create.svx *include ignore/ignore.svx *fix use.0 27 17 50 *fix create.0 20 10 25 *fix ignore.0 10 10 0 *end cave therion/samples/survex/cave1.th0000644000076400010400000000064211025755730017630 0ustar userAdministratorsencoding utf-8 #!FILE 5 #!SUBTITLE Managing large projects #! Assume a situation when you want to join these three small maps #! within single large project. Assume that coordinates of cave #! entrances are specified in the top-level cave.3d file. If your #! joining code will be #!CODE import cave.3d -surveys use survey cave input use/use.th input create/create.th input ignore/ignore.th endsurvey #!ENDCODEtherion/samples/survex/cave2.th0000644000076400010400000000030310565223144017620 0ustar userAdministratorsencoding utf-8 #!FILE 7 #!CODE import cave.3d -surveys use import cave.3d -surveys create survey cave input use/use.th input create/create.th input ignore/ignore.th endsurvey #!ENDCODEtherion/samples/survex/create/0000755000076400010400000000000012270034352017526 5ustar userAdministratorstherion/samples/survex/create/create.3d0000644000076400010400000000040511253630014021215 0ustar userAdministratorsSurvex 3D Image File v6 create Tue,2009.09.15 07:11:23 Central Europe Daylight Time €create‰ÿÿÿ…2€·üÿÿ‹i€çúÿÿ"M€.sub&øÿÿ5MB.1&øÿÿ5MJ0çúÿÿ"MB3çúÿÿ"MB2·üÿÿ‹iB1‰ÿÿÿ…2J0therion/samples/survex/create/create.svx0000644000076400010400000000027410565230170021537 0ustar userAdministrators*begin create *export 0 *data normal from to bearing clino length 0 1 343 7 4.1 1 2 317 3 10.6 2 3 325 -2 8.1 *begin sub *export 0 0 1 235 0 8.6 *end sub *equate 3 sub.0 *end createtherion/samples/survex/create/create.th0000644000076400010400000000070610565272540021341 0ustar userAdministratorsencoding utf-8 #!FILE ../2.9 #!SUBTITLE Creating non-existing surveys #! If you import your .3d file using #!CODE import create.3d -surveys create #!ENDCODE #! all survex prefixes are taken into account and if surveys with #! corresponding names do not exist, they are created. In this case, #! if you do #!CODE input create.th2 #!ENDCODE #! right after import command, you refer to stations in .th2 #! file with names shown on the map. therion/samples/survex/create/create.th20000644000076400010400000000155310565263614021426 0ustar userAdministratorsencoding utf-8 ##XTHERION## xth_me_area_adjust -124.498 -126.88 623.627 623.0 ##XTHERION## xth_me_area_zoom_to 100 ##XTHERION## xth_me_image_insert {456.253 1 1.0} {60.18 0@create.} create.xvi 0 {} scrap create.s -scale [-128.0 -128.0 620.125 -128.0 0.0 0.0 19.002375 0.0 m] line wall 437.0 56.0 426.0 98.0 396.0 123.0 370.0 158.0 344.0 193.0 265.0 239.0 240.0 281.0 215.0 323.0 218.0 344.0 164.0 333.0 110.0 322.0 78.0 227.0 55.0 319.0 32.0 411.0 215.0 393.0 150.0 481.0 smooth off endline point 60.842 321.52 station -name 1@sub.create point 199.612 418.56 station -name 0@sub.create point 290.952 288.05 station -name 2@create point 433.082 135.69 station -name 1@create point 456.502 59.12 station -name 0@create line wall 470.0 62.0 460.71 184.57 359.0 236.0 309.0 289.0 259.0 342.0 175.0 473.0 165.0 490.0 smooth off endline endscrap therion/samples/survex/create/create.xvi0000644000076400010400000000111610565262010021517 0ustar userAdministratorsset XVIgrids {1.0 m} set XVIstations { { 197.83 -179.72 0@create.} { 174.41 -103.15 1@create.} { 32.28 49.21 2@create.} { -59.06 179.72 3@create.} { -197.83 82.68 1@sub.create.} { -59.06 179.72 0@sub.create.} } set XVIshots { { 197.83 -179.72 174.41 -103.15} { 174.41 -103.15 32.28 49.21} { 32.28 49.21 -59.06 179.72} { -59.06 179.72 -197.83 82.68} } set XVIgrid {-254.921 -238.78 19.685 0.0 0.0 19.685 26 24} therion/samples/survex/create/thconfig0000644000076400010400000000033510625630120021250 0ustar userAdministratorsencoding utf-8 #!FILE ../3 #!IMAGE create.pdf #!PROCESS cavern create.svx #!PROCESS #!CLEAN create.err create.pdf source create.th input ../thconfig.layout #export map -o create.xvi export map -o create.pdf -layout cl therion/samples/survex/ignore/0000755000076400010400000000000012270034352017546 5ustar userAdministratorstherion/samples/survex/ignore/ignore.3d0000644000076400010400000000042211253630016021256 0ustar userAdministratorsSurvex 3D Image File v6 ignore Tue,2009.09.15 07:11:26 Central Europe Daylight Time €ignore fðÿÿÿ€ºñSÿÿÿ€vß­ÿÿÿºñSÿÿÿ€.sublVSÿÿÿB.1lVSÿÿÿJ0ºñSÿÿÿB3vß­ÿÿÿB2ºñSÿÿÿB1 fðÿÿÿJ0therion/samples/survex/ignore/ignore.svx0000644000076400010400000000027410565230170021577 0ustar userAdministrators*begin ignore *export 0 *data normal from to bearing clino length 0 1 17 -1 9.1 1 2 24 -20 4.6 2 3 43 5 10.3 *begin sub *export 0 0 1 134 0 9.6 *end sub *equate 2 sub.0 *end ignoretherion/samples/survex/ignore/ignore.th0000644000076400010400000000046010565272730021377 0ustar userAdministratorsencoding utf-8 #!FILE ../3.9 #!SUBTITLE Ignoring station prefixes #! Last possibility is to import your .3d file using #!CODE import ignore.3d -surveys ignore #!ENDCODE input ignore.th2 #! Also in this case, station references in corresponding .th2 file #! are same as station names on the next map. therion/samples/survex/ignore/ignore.th20000644000076400010400000000154510565263614021467 0ustar userAdministratorsencoding utf-8 ##XTHERION## xth_me_area_adjust -128.0 -128.0 442.96 620.125 ##XTHERION## xth_me_area_zoom_to 100 ##XTHERION## xth_me_image_insert {59.057 1 1.0} {59.052 ignore.0} ignore.xvi 0 {} scrap ignore.s -scale [-128.0 -128.0 620.125 -128.0 0.0 0.0 19.002375 0.0 m] line wall 45.0 68.0 87.0 235.0 92.0 326.0 274.0 469.0 endline line wall 299.0 191.0 269.0 224.0 194.0 261.0 215.0 283.0 236.0 305.0 296.0 330.0 274.0 351.0 252.0 372.0 210.0 363.0 290.0 444.0 endline line wall 74.0 53.0 95.0 124.0 114.0 213.0 147.0 272.0 smooth off 147.0 272.0 211.0 215.0 271.0 155.0 smooth off endline point 281.887 176.772 station -name ignore.sub.1 point 283.857 455.712 station -name ignore.3 point 146.067 308.072 station -name ignore.sub.0 point 111.417 230.312 station -name ignore.1 point 59.057 59.052 station -name ignore.0 endscrap therion/samples/survex/ignore/ignore.xvi0000644000076400010400000000111110565262274021566 0ustar userAdministratorsset XVIgrids {1.0 m} set XVIstations { { -112.40 -198.33 ignore.0} { -60.04 -27.07 ignore.1} { -25.39 50.69 ignore.2} { 112.40 198.33 ignore.3} { 110.43 -80.61 ignore.sub.1} { -25.39 50.69 ignore.sub.0} } set XVIshots { { -112.40 -198.33 -60.04 -27.07} { -60.04 -27.07 -25.39 50.69} { -25.39 50.69 112.40 198.33} { -25.39 50.69 110.43 -80.61} } set XVIgrid {-171.457 -257.382 19.685 0.0 0.0 19.685 17 26} therion/samples/survex/ignore/thconfig0000644000076400010400000000051111025755616021301 0ustar userAdministratorsencoding utf-8 #!FILE ../4 #!IMAGE ignore.pdf #! Note that no surveys are created in this case. Station names #! are taken from .3d files without change. #!PROCESS cavern ignore.svx #!PROCESS #!CLEAN ignore.err ignore.pdf source ignore.th input ../thconfig.layout #export map -o ignore.xvi export map -o ignore.pdf -layout cl therion/samples/survex/thconfig.10000644000076400010400000000140710625630024020150 0ustar userAdministratorsencoding utf-8 #!FILE 6 #!PROCESS cavern cave.svx #!PROCESS source cave1.th input thconfig.layout export map -o cave1.pdf -layout cl -layout-color map-fg altitude #! not all stations are replaced correctly. The "created" series #! is placed wrong on the map. #!IMAGE cave1.pdf #!CLEAN cave1.pdf cave.err #! This is because in top level import command, survey create is #! imported from file create/create.3d with wrong coordinates, #! and we import top-level .3d file with -surveys use switch. #! This means, cave.create.1 will be imported here as create.1@cave and not #! 1@create.cave. #! #! To solve this problem, we need to re-import stations #! from top-level cave.3d file once more with -surveys create #! switch. therion/samples/survex/thconfig.20000644000076400010400000000113411025756070020153 0ustar userAdministratorsencoding utf-8 #!FILE 8 #!PROCESS source cave2.th input thconfig.layout export map -o cave2.pdf -layout cl -layout-color map-fg altitude #! After this additional import final looks as expected. #!IMAGE cave2.pdf #!CLEAN cave2.pdf #!SUBTITLE Conclusion #!Even if there are several possibilities how to map survex prefix structure #!to therion survey structure, the most clean solution is to create #!survey structure to desired depth in .th files using empty #!survey/endsurvey pairs and allways use #!-surveys use switch when importing .3d files.therion/samples/survex/thconfig.layout0000644000076400010400000000124511025755112021326 0ustar userAdministratorsencoding utf-8 #!TITLE 40 Importing survex .3d files #!FILE 1 #! #! Therion surveys nearly correspond to station prefixes defined by #! *begin/*end pairs in survex source files. Usually there #! does not exist one-to-one mapping between them. So if you want #! to keep your centerline in survex files you need to solve the #! problem how to match survex and therion data structures. This #! sample shows three different ways, how to deal with station prefixes #! when importing survex .3d files to therion. layout cl symbol-set SKBB map-header 0 0 off color map-fg [100 100 80] debug station-names survey-level all scale 1 250 endlayout therion/samples/survex/use/0000755000076400010400000000000012270034352017057 5ustar userAdministratorstherion/samples/survex/use/thconfig0000644000076400010400000000051210625630120020576 0ustar userAdministratorsencoding utf-8 #!FILE ../2 #! Map with station names in this case looks like this: #!IMAGE use.pdf #! Station names are before '@' symbol, survey names follow this symbol. #!PROCESS cavern use.svx #!PROCESS #!CLEAN use.err use.pdf source use.th input ../thconfig.layout #export map -o use.xvi export map -o use.pdf -layout cl therion/samples/survex/use/use-in.th20000644000076400010400000000141210565270734020707 0ustar userAdministratorsencoding utf-8 ##XTHERION## xth_me_area_adjust -128.0 -128.0 659.495 414.0 ##XTHERION## xth_me_area_zoom_to 100 ##XTHERION## xth_me_image_insert {492.124 1 1.0} {196.85 0} use.xvi 0 {} #!FILE ../1.92 scrap use-in.s -scale [-128.0 -128.0 620.125 -128.0 0.0 0.0 19.002375 0.0 m] line wall 420.0 26.0 401.0 79.0 342.0 218.0 342.0 218.0 smooth off 342.0 218.0 422.0 222.0 490.0 183.0 smooth off endline line wall 255.0 190.0 278.0 198.0 317.0 214.0 317.0 214.0 smooth off 317.0 214.0 362.0 106.0 390.0 16.0 smooth off endline line wall 496.0 209.0 421.0 236.0 504.0 349.0 238.0 229.0 smooth off endline point 391.934 52.56 station -name sub.1 #!CODE point 321.454 236.22 station -name 1 #!ENDCODE point 492.124 196.85 station -name 0 endscrap therion/samples/survex/use/use-out.th20000644000076400010400000000110111025755470021100 0ustar userAdministratorsencoding utf-8 ##XTHERION## xth_me_area_adjust -128.0 -128.0 659.495 403.59 ##XTHERION## xth_me_area_zoom_to 100 ##XTHERION## xth_me_image_insert {492.124 1 1.0} {196.85 0} use.xvi 0 {} #!FILE ../1.91 scrap use-out.s -scale [-128.0 -128.0 620.125 -128.0 0.0 0.0 19.002375 0.0 m] line wall 227.0 220.0 138.0 189.0 175.0 188.0 44.0 189.0 endline line wall 50.0 156.0 99.0 160.0 142.0 139.0 242.0 189.0 endline #!CODE point 165.744 176.58 station -name 2@use #!ENDCODE #! but in the use-in.th file using point 58.664 169.09 station -name 3@use endscrap therion/samples/survex/use/use.3d0000644000076400010400000000041411253630012020075 0ustar userAdministratorsSurvex 3D Image File v6 use Tue,2009.09.15 07:11:21 Central Europe Daylight Time €useüÿÿȽ€†ùÿÿ™ÿÿÿ(€f÷ÿÿsÿÿÿcüÿÿȽ€.subþÿÿ#ýÿÿ½B.1þÿÿ#ýÿÿ½J0üÿÿȽB3f÷ÿÿsÿÿÿcB2†ùÿÿ™ÿÿÿ(B1üÿÿȽJ0therion/samples/survex/use/use.svx0000644000076400010400000000027310565230170020420 0ustar userAdministrators*begin use *export 0 *data normal from to bearing clino length 0 1 283 12 9.1 1 2 249 -10 8.6 2 3 266 30 6.3 *begin sub *export 0 0 1 159 0 10.0 *end sub *equate 1 sub.0 *end usetherion/samples/survex/use/use.th0000644000076400010400000000125411025755416020222 0ustar userAdministratorsencoding utf-8 #!FILE ../1.9 #!SUBTITLE Using surveys specified in .th files #! If you will import .3d file with -surveys use switch, #! then therion tries to find the match between survex prefix #! and therion survey name. If this match is found, stations #! are inserted into survey found. Otherwise prefix is left with #! station names. Example code: #!CODE import use.3d -surveys use input use-out.th2 survey use input use-in.th2 endsurvey #!ENDCODE #! In this case you should take care where you input your .th2 files #! containing scraps. In use-out.th2 file you should refer to station names #! using: join use-in.s@use use-out.s therion/samples/survex/use/use.xvi0000644000076400010400000000103610565260754020417 0ustar userAdministratorsset XVIgrids {1.0 m} set XVIstations { { 216.73 52.46 0} { 46.06 91.83 1} { -109.65 32.19 2} { -216.73 24.70 3} { 116.54 -91.83 sub.1} { 46.06 91.83 sub.0} } set XVIshots { { 216.73 52.46 46.06 91.83} { 46.06 91.83 -109.65 32.19} { -109.65 32.19 -216.73 24.70} { 46.06 91.83 116.54 -91.83} } set XVIgrid {-275.394 -144.39 19.685 0.0 0.0 19.685 28 15} therion/samples/sym-colors/0000755000076400010400000000000012050456026017040 5ustar userAdministratorstherion/samples/sym-colors/thconfig0000644000076400010400000000052311226614262020566 0ustar userAdministratorssource ../basics/rabbit.th source map x -title "Test XHovadina X" pdp@rabbit endmap endsource select x layout colors map-header 105 50 w language sk legend on symbol-color group centerline [100 0 0] symbol-color group water [0 20 100] endlayout export map -o cave.pdf -layout colors #!CLEAN cave.pdf therion/samples/u-symbols/0000755000076400010400000000000012270034352016661 5ustar userAdministratorstherion/samples/u-symbols/map.th20000644000076400010400000000234311025757150020064 0ustar userAdministratorsencoding utf-8 ##XTHERION## xth_me_area_adjust 146.0 241.0 749.0 656.0 ##XTHERION## xth_me_area_zoom_to 100 #!FILE 1 #!TITLE 80 Using user defined symbol types #! If therion does not offer any appropriate symbol for the feature #! you want to draw to the map, you can use user defined symbol type #! (type u, valid for point, line and area objects). #! #! The syntax is very simple. Assume you want to create "bat" point, line #! and area. You just use u:bat as a type (bat is in fact subtype) #! of u type. So your code will be like this: scrap x -scale [250.0 421.0 710.0 421.0 0.0 0.0 20 0.0 m] line border -id l7-455-492 -close on 292.0 485.0 287.0 466.0 334.96 364.11 371.0 375.0 407.33 385.98 419.87 488.52 333.0 503.0 303.0 508.0 297.0 504.0 292.0 485.0 endline #!CODE point 555.0 480.0 u:bat #!ENDCODE #! or #!CODE line u:bat #!ENDCODE 524.0 458.0 480.0 447.0 483.0 501.0 407.0 472.0 endline #! or #!CODE area u:bat #!ENDCODE l7-455-492 endarea line wall 279.0 449.0 306.0 465.0 353.0 505.0 426.0 509.0 499.0 513.0 529.0 502.0 564.0 523.0 endline line wall 307.0 375.0 357.0 396.0 409.0 469.0 472.0 436.0 535.0 403.0 585.0 433.0 616.0 462.0 endline endscrap map xx x endmap therion/samples/u-symbols/thconfig.10000644000076400010400000000043611025757240020554 0ustar userAdministratorsencoding utf-8 #!PROCESS #!FILE 2 source map.th2 export map -o map1.pdf -layout-map-header 0 0 off #! When you export map without defining the symbols in MetaPost, user defined symbols are highlighted #! in red without any graphical representation. #!IMAGE map1.pdf #!CLEAN map1.pdf therion/samples/u-symbols/thconfig.20000644000076400010400000001226311025757762020567 0ustar userAdministratorsencoding utf-8 #!PROCESS #!FILE 3 source map.th2 #! To display them correctly you need to define symbols for them in #! MetaPost languge the same way as ordinary symbols are usually redefined. #! #! Firstly point symbol. In the layout m #!CODE code metapost #!ENDCODE path bat_path_x; bat_path_x := (160.43589,619.76148) .. controls (200.83034,598.56215) and (225.01974,599.82632) .. (242.33709,601.15842) .. controls (250.91988,585.02142) and (280.12279,545.7622) .. (328.92385,566.52372) .. controls (343.18917,529.89929) and (387.77695,513.04018) .. (453.54702,518.36185) .. controls (456.6654,525.97557) and (466.09064,533.43257) .. (471.27843,523.05007) .. controls (463.85291,520.67657) and (466.71891,517.42483) .. (471.63814,522.23522) .. controls (472.87859,519.83044) and (472.11254,517.25674) .. (467.00984,516.24193) .. controls (498.08181,494.38071) and (518.37927,488.7935) .. (554.08261,484.34703) .. controls (536.23968,468.87122) and (526.7451,451.32142) .. (536.0878,433.78585) .. controls (539.04313,428.23891) and (549.65293,437.81051) .. (550.08905,431.99134) .. controls (543.35122,428.68782) and (547.16851,429.31755) .. (550.93619,430.90592) .. controls (555.01514,419.20795) and (542.29889,420.82043) .. (539.21019,422.32967) .. controls (526.80565,412.03922) and (538.14174,362.22955) .. (562.04206,325.41289) .. controls (560.70416,305.4475) and (552.94665,275.48765) .. (596.42383,240.15823) .. controls (586.13796,214.86512) and (584.21841,176.344) .. (618.88684,158.99293) .. controls (600.38363,161.42082) and (571.90452,163.00167) .. (555.87287,173.29962) .. controls (533.80922,180.31406) and (511.7587,189.77279) .. (494.76462,217.75852) .. controls (469.02274,260.15007) and (465.60841,280.08537) .. (466.27659,287.73284) .. controls (467.27295,299.13663) and (456.20597,295.4343) .. (455.42733,284.84646) .. controls (447.034,297.47822) and (465.71846,292.96944) .. (457.40227,311.17742) .. controls (451.51715,333.88534) and (454.55183,344.68208) .. (455.22274,365.27634) .. controls (445.59186,380.66207) and (438.52169,394.98144) .. (432.56329,406.97544) .. controls (421.27321,411.75599) and (411.86904,413.85884) .. (403.92838,423.33244) .. controls (391.19793,418.79449) and (380.875,414.46152) .. (373.6673,409.41976) .. controls (365.11095,413.84661) and (372.76761,437.1554) .. (372.88328,437.30963) -- (360.72573,447.88215) .. controls (360.72573,447.88215) and (348.36583,439.38367) .. (342.32921,440.26049) .. controls (340.52016,451.25937) and (343.58923,463.9528) .. (354.67087,475.2679) .. controls (341.63825,482.57642) and (339.10347,494.24676) .. (313.80723,490.57484) .. controls (304.61922,489.24114) and (282.31298,490.61764) .. (258.32359,496.84657) .. controls (246.18809,499.99759) and (248.48311,482.8706) .. (236.36849,493.22467) .. controls (239.32461,491.85429) and (242.55704,492.01948) .. (245.59044,495.64662) .. controls (248.83726,499.52895) and (249.4495,502.08244) .. (244.59097,503.87878) .. controls (221.93401,514.80409) and (190.83965,541.85436) .. (178.69512,574.11392) .. controls (176.80431,577.00681) and (162.4873,600.33708) .. cycle; path bat_path_bb; bat_path_bb = bbox bat_path_x; path bat_path; bat_path = bat_path_x shifted (-(llcorner bat_path_bb) - (urcorner bat_path_bb - llcorner bat_path_bb) / 2.0) scaled (1u / ((xpart urcorner bat_path_bb) - (xpart llcorner bat_path_bb))) rotated 210; #! section of your layout define point u:bat symbol like this #!CODE def p_u_bat(expr pos, theta, sc, al) = T := identity shifted pos; thfill (bat_path scaled 2.0) withcolor black; enddef; #!ENDCODE #! similarly the line u:bat symbol #!CODE def l_u_bat(expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, 1.0u); pickup PenD; forever: t := arctime cas of P; thfill bat_path scaled 0.5 shifted (point t of P) withcolor black; cas := cas + mojkrok; exitif cas > dlzka + (mojkrok / 3); % for rounding errors endfor; enddef; #!ENDCODE #! and finally the area u:bat symbol (pattern in this case) #!CODE % bat pattern beginpattern(pattern_bat); fill bat_path withcolor black; endpattern; % bat area symbol def a_u_bat (expr Path) = T:=identity; thclean Path; thfill Path withpattern pattern_bat; enddef; #!ENDCODE #! These symbols will be included also in the legend. To #! change the way how they are drawn there just define appropriate #! macro. Its name should be symbol macro name with _legend #! suffix. #!CODE def l_u_bat_legend = l_u_bat(((.2,.2) -- (.8,.8)) inscale) enddef; #!ENDCODE code tex-map \legendcontent={% \hsize=\legendwidth \color[0 0 0]\the\legendtextcolor \formattedlegend \color[0 0 0] } legend-width 8 cm endcode endlayout #! Finally, add description of your new symbols that will be shown #! in the legend using text command anywhere #! in the configuration file. #!CODE text en "point u:bat" "bat" text en "line u:bat" "bat path" text en "area u:bat" "lot of bats" #!ENDCODE #! After all these definitions you receive bat point, line and area symbols #! with proper graphical representation and legend boxes. export map -o map2.pdf -layout m -layout-map-header 0 0 nw -layout-legend on #!IMAGE map2.pdf #!CLEAN map2.pdf therion/samples/xelevation/0000755000076400010400000000000012270034352017105 5ustar userAdministratorstherion/samples/xelevation/cave1.th0000644000076400010400000000052310623332440020440 0ustar userAdministratorsencoding utf-8 input cave1.th2 centerline data normal from to compass clino tape 0 1 170 -10 4.7 # first loop branch 1 2 230 -60 12.3 2 3 166 -18 6.3 3 4 130 -12 5.1 # second loop branch 1 5 133 +4 8.9 5 4 220 -62 16.1 5 5' 12 65 4 4 6 107 -23 9.1 endcenterline therion/samples/xelevation/cave1.th20000644000076400010400000000333310623333114020523 0ustar userAdministratorsencoding utf-8 ##XTHERION## xth_me_area_adjust -147.692 -108.312 482.323 620.128 ##XTHERION## xth_me_area_zoom_to 100 ##XTHERION## xth_me_image_insert {118.107 1 1.0} {452.754 0} cave1.xvi 0 {} scrap scrap1 -scale [-128.0 -128.0 423.275 -128.0 0.0 0.0 14.002385 0.0 m] line floor-step -reverse on 94.0 382.0 115.0 373.0 134.0 340.0 134.0 320.0 smooth off endline line floor-step 273.0 210.0 253.0 231.0 237.0 232.0 221.0 229.0 smooth off endline point 341.0 60.0 entrance -orientation 288.7 line wall -close on -outline in 154.0 158.0 209.16 203.43 247.0 224.0 221.0 246.0 195.0 268.0 156.0 337.0 139.0 332.0 122.0 327.0 99.0 301.0 79.0 290.0 59.0 279.0 97.0 208.0 104.0 187.0 111.0 166.0 137.0 144.0 154.0 158.0 endline line wall 103.0 454.0 110.0 418.0 117.0 402.0 111.0 385.0 105.0 368.0 80.0 335.0 36.0 309.0 -8.0 283.0 10.0 285.0 39.0 217.0 68.0 149.0 76.0 130.0 98.0 125.0 120.0 120.0 180.0 87.0 310.0 44.0 smooth off endline line wall 323.0 93.0 200.0 114.0 182.0 119.0 201.0 140.0 220.0 161.0 254.0 197.0 265.0 226.0 272.31 245.28 273.0 251.0 282.0 280.0 smooth off endline point 274.0 297.0 continuation -align tr point 264.557 271.854 station -name 5' line chimney 241.0 273.0 241.69 248.93 276.0 248.0 276.0 248.0 smooth off endline line wall 263.0 293.0 241.0 241.0 225.74 283.76 212.0 300.0 190.0 326.0 164.0 335.0 151.0 367.0 138.0 399.0 129.0 458.0 129.0 458.0 smooth off endline point 312.087 69.434 station -name 6 point 257.677 239.374 station -name 5 point 154.137 116.534 station -name 4 point 77.367 177.754 station -name 3 point 46.457 290.154 station -name 2 point 133.857 362.994 station -name 1 point 118.107 452.754 station -name 0 endscrap therion/samples/xelevation/cave1.xvi0000644000076400010400000000147010623332534020641 0ustar userAdministratorsset XVIgrids {1.0 m} set XVIstations { { -61.02 192.22 0} { -45.28 102.46 1} { -132.68 29.63 2} { -101.77 -82.78 3} { -25.00 -144.00 4} { 78.54 -21.16 5} { 85.43 11.32 5'} { 132.68 -192.22 6} } set XVIshots { { -61.02 192.22 -45.28 102.46} { -45.28 102.46 -132.68 29.63} { -132.68 29.63 -101.77 -82.78} { -101.77 -82.78 -25.00 -144.00} { -45.28 102.46 78.54 -21.16} { 78.54 -21.16 -25.00 -144.00} { 78.54 -21.16 85.43 11.32} { -25.00 -144.00 132.68 -192.22} } set XVIgrid {-198.819 -240.846 19.685 0.0 0.0 19.685 20 25} therion/samples/xelevation/cave2.th0000755000076400010400000000127311025753410020450 0ustar userAdministrators#!FILE 2 #! This is obviously not what we would like to get. #! #! To control process of extended elevation, there is a special #! extend option in centerline command. centerline data normal from to compass clino tape 0 1 170 -10 4.7 # first loop branch 1 2 230 -60 12.3 2 3 166 -18 6.3 3 4 130 -12 5.1 # second loop branch 1 5 133 +4 8.9 5 4 220 -62 16.1 5 5' 12 65 4 4 6 107 -23 9.1 #! #! First of all, we would like to start our extended elevation #! at station 6 (where the entrance is). This can be done by specifying #!CODE extend start 6 #!ENDCODE #! in the centerline. Now it looks better, endcenterline therion/samples/xelevation/cave3.th0000644000076400010400000000146110623332440020444 0ustar userAdministratorscenterline data normal from to compass clino tape 0 1 170 -10 4.7 # first loop branch 1 2 230 -60 12.3 2 3 166 -18 6.3 3 4 130 -12 5.1 # second loop branch 1 5 133 +4 8.9 5 4 220 -62 16.1 5 5' 12 65 4 4 6 107 -23 9.1 extend start 6 #!FILE 4 #! #! If we would like to start this branch from station 4, we need #! to forbid therion to extend station 5 from 1. This can be done #! by specifying #!CODE extend ignore 1 5 #!ENDCODE #! This means, that shot from 1 to 5 will be ignored, when extended #! elevation is generated. #! #! If we would like to extend branch starting #! with station 5 to the left, we need to specify also #!CODE extend left 5 #!ENDCODE #! #! This will extend all stations from station 5 to the left. endcenterline therion/samples/xelevation/cave3.th20000644000076400010400000000341310623334530020527 0ustar userAdministratorsencoding utf-8 ##XTHERION## xth_me_area_adjust -138.296 -187.056 1042.899 600.439 ##XTHERION## xth_me_area_zoom_to 100 ##XTHERION## xth_me_image_insert {838.825 1 1.0} {393.697 0} cave3.xvi 0 {} scrap s1 -projection extended -scale [-128.0 -128.0 1033.51 -128.0 0.0 0.0 29.502354 0.0 m] point 838.825 393.697 station -name 0 point 747.715 377.557 station -name 1 point 626.645 166.927 station -name 2 point 508.705 130.117 station -name 3 point 410.505 110.437 station -name 4 point 246.335 39.617 station -name 6 line wall 841.0 412.0 803.0 407.0 673.0 384.0 651.0 374.0 629.0 364.0 638.0 188.0 623.0 175.0 608.0 162.0 479.0 168.0 452.0 167.0 425.0 166.0 245.0 140.0 228.0 156.0 smooth off endline line wall 728.0 106.0 723.0 239.0 747.0 340.0 761.0 356.0 775.0 372.0 826.0 378.0 843.0 381.0 smooth off endline line wall:debris 251.0 28.0 274.0 40.0 392.0 93.0 415.0 92.0 438.0 91.0 497.0 110.0 542.0 110.0 587.0 110.0 621.0 113.0 652.0 111.0 683.0 109.0 728.0 106.0 728.0 106.0 smooth off endline endscrap scrap s2 -projection extended -scale [-128.0 -128.0 1033.51 -128.0 0.0 0.0 29.502354 0.0 m] line wall 246.0 374.0 251.0 385.0 263.0 395.0 264.0 356.0 265.0 317.0 303.0 249.0 310.0 93.0 smooth off endline line wall:debris 415.0 92.0 310.0 93.0 endline line wall:debris 89.0 362.0 158.0 365.0 246.0 374.0 246.0 374.0 smooth off endline line wall 452.0 167.0 392.0 269.0 318.0 342.0 297.0 395.0 286.05 422.64 287.0 424.0 285.0 461.0 endline line wall 246.0 459.0 245.0 414.0 259.0 401.0 85.0 397.0 smooth off endline point 86.945 377.557 station -name 1 point 264.0 460.0 continuation point 261.715 387.007 station -name 5 point 410.505 110.437 station -name 4 endscrap map m break s1 break s2 endmap therion/samples/xelevation/cave3.xvi0000644000076400010400000000167710566717364020672 0ustar userAdministratorsset XVIgrids {1.0 m} set XVIstations { { 375.94 176.67 0} { 284.83 160.53 1} { 284.83 160.53 1} { 163.76 -50.10 2} { 163.76 -50.10 2} { 45.82 -86.91 3} { 45.82 -86.91 3} { -52.38 -106.59 4} { -375.94 160.53 1} { -201.17 169.98 5} { -201.17 169.98 5} { -52.38 -106.59 4} { -52.38 -106.59 4} { -217.28 -176.67 6} } set XVIshots { { 375.94 176.67 284.83 160.53} { 284.83 160.53 163.76 -50.10} { 163.76 -50.10 45.82 -86.91} { 45.82 -86.91 -52.38 -106.59} { -375.94 160.53 -201.17 169.98} { -201.17 169.98 -52.38 -106.59} { -52.38 -106.59 -217.28 -176.67} } set XVIgrid {-473.181 -276.083 19.685 0.0 0.0 19.685 48 28} therion/samples/xelevation/thconfig.10000644000076400010400000000115511025753316020777 0ustar userAdministratorsencoding utf-8 #!PROCESS #!FILE 1 #!TITLE 25 Extended elevation control #! #! Assume following situation (in plan view), #! when there is a loop in centerline between stations 1 and 4, #! small chimney near station 5 #! and entrance to the cave is at station 6. #!IMAGE map1p.pdf #! By default, centerline extended elevation of this situation looks like this: #!IMAGE map1x.pdf source cave1.th input thconfig.layout #export map -proj plan -o cave1.xvi export map -proj plan -o map1p.pdf -layout l -layout-scale 1 300 export map -proj extended -o map1x.pdf -layout l -layout-scale 1 500 #!CLEAN map1p.pdf map1x.pdf therion/samples/xelevation/thconfig.20000644000076400010400000000036411025753672021006 0ustar userAdministratorsencoding utf-8 #!PROCESS #!FILE 3 #!IMAGE map2.pdf #!but there is still a problem with a branch containing station 5. source cave2.th input thconfig.layout export map -proj extended -o map2.pdf -layout l -layout-scale 1 500 #!CLEAN map2.pdf therion/samples/xelevation/thconfig.30000644000076400010400000000034110623333474020777 0ustar userAdministratorsencoding utf-8 #!PROCESS #!FILE 4.1 #! #!IMAGE map3.pdf #! source cave3.th input thconfig.layout #export map -proj extended -o cave3.xvi export map -proj extended -o map3.pdf -layout l -layout-scale 1 500 #!CLEAN map3.pdf therion/samples/xelevation/thconfig.40000644000076400010400000000076611025754156021014 0ustar userAdministratorsencoding utf-8 #!PROCESS #!FILE 6 #!SUBTITLE Stations in extended elevation scraps #! #! Even if the station 1 is present more then one time in the map, #! therion automatically #! detects correct position of this station in each scrap and they are #! usually drawn correctly. #!IMAGE map4.pdf source cave3.th source cave3.th2 source centerline extend hide 5 5' endcenterline endsource input thconfig.layout export map -proj extended -o map4.pdf -layout l -layout-scale 1 500 #!CLEAN map4.pdf therion/samples/xelevation/thconfig.50000644000076400010400000000207311025754416021005 0ustar userAdministratorsencoding utf-8 #!PROCESS #!FILE 7 #! The only thing that is missing is connection line between stations 1 #! in these two branches. source cave3.th source cave3.th2 #! Therion does not automatically generate these lines because their #! shape usually depends on particilar map. #! #! To draw such a line all you need to do is to create a simple scrap #! with this line. Here is an example: source centerline extend hide 5 5' endcenterline #!CODE scrap sc -proj extended point 0 0 station -name 1 -from 5 -visibility off point 100 0 station -name 1 -from 2 -visibility off line map-connection 0 5 0 15 100 15 100 5 endline endscrap #!ENDCODE #! As you can see, even there are two stations with same name, they #! are distinguished by -from option, which specifies #! previous station in extended elevation. Using this scrap you receive the #! final map: map mc sc endmap endsource select mc select m #!IMAGE map5.pdf input thconfig.layout export map -proj extended -o map5.pdf -layout l -layout-scale 1 500 #!CLEAN map5.pdf therion/samples/xelevation/thconfig.60000644000076400010400000000072010623333760021001 0ustar userAdministratorsencoding utf-8 #!PROCESS #!FILE 4.5 #! #! As we have mentioned before, there is a small chimney above station 5. #! In this case, it is much more natural to draw this shot as vertical #! (because it is a chimney). To specify this, use source cave3.th source centerline #!CODE extend vertical 5 5' #!ENDCODE endcenterline endsource #!IMAGE map6.pdf input thconfig.layout export map -proj extended -o map6.pdf -layout l -layout-scale 1 500 #!CLEAN map6.pdf therion/samples/xelevation/thconfig.70000644000076400010400000000054710623333760021011 0ustar userAdministratorsencoding utf-8 #!PROCESS #!FILE 4.6 #! #! Or you can completely hide this leg from extended centerline using: source cave3.th source centerline #!CODE extend hide 5 5' #!ENDCODE endcenterline endsource #!IMAGE map7.pdf input thconfig.layout export map -proj extended -o map7.pdf -layout l -layout-scale 1 500 -layout-transparency off #!CLEAN map7.pdf therion/samples/xelevation/thconfig.layout0000644000076400010400000000040710566717364022167 0ustar userAdministratorslayout l # line survey code metapost def l_survey_cave_SKBB (expr P) = T:=identity; pickup PenC; thdraw P; enddef; endcode symbol-set SKBB map-header 0 0 off color map-fg [100 100 80] debug station-names endlayout therion/SVG.problems0000644000076400010400000000044710231467712015501 0ustar userAdministratorsAdobe viewer 3 on Linux: * ignores fractional part of numbers when LC_NUMERIC=sk_SK or others with comma as decimal separator (zero width lines, singular matrices) Sodipodi on Linux: * doesn't inherit linecap &c. from the parent group Batik 1.6 on Linux: * fails to load large filestherion/SYMBOLS.txt0000644000076400010400000000515012255660056015166 0ustar userAdministrators [Special symbols] hgrid: SM northarrow: SKBB scalebar: SKBB SM vgrid: SM [Point symbols] airdraught: AUT UIS airdraught_summer: UIS airdraught_winter: UIS anastomosis: UIS anchor: SKBB aragonite: NSS archeomaterial: UIS bedrock: ASF blocks: AUT UIS breakdownchoke: AUT NSS bridge: SKBB camp: SKBB cavepearl: SKBB clay: AUT SKBB claychoke: AUT claytree: AUT continuation: UIS crystal: AUT UIS curtain: UIS debris: AUT UIS dig: UIS disk: UIS entrance: AUT UIS fixedladder: SKBB flowstone: UIS flowstonechoke: NSS flute: UIS gradient: AUT BCRA NSS SKBB UIS guano: UIS gypsum: NSS gypsumflower: NSS handrail: SKBB helictite: UIS ice: AUT UIS icepillar: AUT icestalactite: AUT icestalagmite: AUT karren: UIS lowend: NSS UIS moonmilk: UIS narrowend: UIS noequipment: SKBB paleomaterial: UIS pebbles: AUT UIS pillar: AUT UIS pillars: UIS popcorn: UIS raft: NSS raftcone: NSS rimstonedam: ASF rimstonepool: ASF root: ASF rope: SKBB ropeladder: SKBB sand: AUT UIS scallop: UIS sink: AUT SKBB snow: SKBB sodastraw: UIS spring: AUT SKBB stalactite: AUT UIS stalactites: UIS stalagmite: AUT UIS stalagmites: UIS station: SKBB station_fixed: ASF AUT station_natural: ASF station_painted: AUT SKBB station_temporary: ASF AUT SKBB steps: SKBB traverse: SKBB vegetabledebris: ASF viaferrata: SKBB wallcalcite: UIS water: AUT UIS waterflow_intermittent: UIS waterflow_paleo: UIS waterflow_permanent: UIS [Line symbols] arrow: SKBB border_presumed: SKBB border_temporary: SKBB border_visible: SKBB ceilingmeander: NZSS SKBB UIS ceilingstep: NZSS SKBB UIS chimney: NZSS UIS contour: AUT SKBB UIS fixedladder: SKBB floormeander: SKBB floorstep: AUT UIS flowstone: AUT UIS gradient: BCRA UIS handrail: SKBB mapconnection: SKBB moonmilk: UIS overhang: AUT SKBB pit: AUT UIS rockborder: UIS rockedge: UIS rope: SKBB ropeladder: SKBB section: SKBB slope: BCRA SKBB steps: SKBB survey_cave: AUT SKBB UIS survey_surface: SKBB viaferrata: SKBB wall_bedrock: UIS wall_blocks: AUT SKBB wall_clay: AUT SKBB wall_debris: AUT SKBB wall_flowstone: AUT wall_ice: AUT SKBB wall_moonmilk: AUT wall_overlying: AUT wall_pebbles: AUT SKBB wall_pit: AUT wall_presumed: NZSS UIS wall_sand: AUT SKBB wall_underlying: AUT UIS wall_unsurveyed: SKBB waterflow_conjectural: SKBB waterflow_intermittent: SKBB waterflow_permanent: UIS [Area symbols] bedrock: SKBB blocks: AUT SKBB clay: AUT SKBB debris: AUT SKBB UIS dimensions: SKBB flowstone: ASF ice: AUT SKBB moonmilk: SKBB pebbles: AUT SKBB sand: AUT UIS snow: AUT SKBB sump: AUT SKBB UIS water: AUT SKBB UIS therion/tex/0000755000076400010400000000000012050456026014065 5ustar userAdministratorstherion/tex/gentex.pl0000755000076400010400000000177411131615272015727 0ustar userAdministrators#!/usr/bin/perl sub encodecxx { $str = shift; $str =~ s/\x0D//g; $str =~ s/\x0C//g; $str =~ s/\x0A//g; $str =~ s/\\/\\\\/g; $str =~ s/\n/\\n/g; $str =~ s/\t/\\t/g; $str =~ s/\"/\\"/g; return $str; } print "reading therion.tex\n"; $thtex_library = ""; open(INPT,"therion.tex"); while ($ln = ) { $thtex_library .= "\n\"" . encodecxx($ln) . "\\n\""; } close(INPT); open(OUTPT,">../thtex.h"); print OUTPT <../thtex.cxx"); print OUTPT <}% \newbox\xxx \newbox\mapbox \newbox\navbox \newcount\pointerE \newcount\pointerW \newcount\pointerN \newcount\pointerS \newtoks\pointerU \newtoks\pointerD \newcount\pagenum \newtoks\pagename \newtoks\pagelabel \newtoks\opacity \opacity{0.7} \newtoks\surfaceopacity \surfaceopacity{0.7} \newif\ifpagenumbering \pagenumberingfalse \newtoks\bgcolor \newif\iflegendbgfill \let\ne\noexpand \def\notdef{notdef} % hyperlinks \def\flatlink#1#2#3#4#5{% \setbox\xxx=\hbox{}\wd\xxx=#3bp\ht\xxx=#4bp% \rlap{\kern#1bp\raise#2bp\hbox{% \vbox to0bp{\vss\hbox to 0bp{% \pdfstartlink attr {/Border [0 0 0]} goto name {#5}% \box\xxx\pdfendlink\hss}}}}}% \def\textlink#1#2{% \pdfstartlink attr {/Border [0 0 0]} goto name {#2}#1\pdfendlink}% \def\includechars#1:#2\endinclude{\pdfincludechars#1{#2}} \newbox\tmpboxa \newbox\tmpboxb \newdimen\legendsymbolwd \newdimen\legendsymbolht \legendsymbolht=12pt \newdimen\tmpdimen \def\legendsymbolbox#1#2{% \setbox\tmpboxa=\hbox{\pdfrefxform#1}% \setbox\tmpboxb=\hbox{\the\legendtextsize(}% \legendsymbolwd=\wd\tmpboxa \legendsymbolht=\ht\tmpboxa \advance\legendsymbolht by -\ht\tmpboxb \advance\legendsymbolht by -1dd \tmpdimen=\hsize \advance\tmpdimen by 10pt \divide\tmpdimen by\legendcolumns \advance\tmpdimen by-10pt \hbox to \tmpdimen{% \box\tmpboxa\kern10pt\raise\legendsymbolht\vtop{% \advance\tmpdimen by -\legendsymbolwd \advance\tmpdimen by -10pt \hsize=\tmpdimen\rightskip=0pt plus \tmpdimen minus 0pt\relax\the\legendtextsize #2\vskip1dd}\hss}% } \def\colorlegendbox#1#2#3{% \setbox\xxx=\hbox to 36bp{\PL{q #1 #2 #3 rg 0 0 36 24 re f Q}\hfil}% \ht\xxx=25bp\dp\xxx=0bp \immediate\pdfxform\xxx } \let\PL\pdfliteral \newdimen\xcorr \newdimen\ycorr \def\PB#1#2#3{\rlap{\kern#1bp\raise#2bp\hbox{\pdfrefxform#3}}} %placebox \def\gridcoord#1#2{\hbox to0pt{% \ifnum#1=1\hss\fi \ifnum#1=4\hss\fi \ifnum#1=7\hss\fi \ifnum#1=8\hss\fi \ifnum#1=2\hss\fi \vbox to0pt{% \ifnum#1>3\vss\fi \kern2pt% \hbox{\kern2pt#2\kern2pt}% \kern2pt% \ifnum#1<7\vss\fi }% \ifnum#1=3\hss\fi \ifnum#1=6\hss\fi \ifnum#1=9\hss\fi \ifnum#1=8\hss\fi \ifnum#1=2\hss\fi }% } \def\PBcorr#1#2#3{% \xcorr=#1bp\advance\xcorr by\extraW\advance\xcorr by\overlap% \ycorr=#2bp\advance\ycorr by\extraS\advance\ycorr by\overlap% \rlap{\kern\xcorr\raise\ycorr\hbox{\pdfrefxform#3}}} %placebox \def\bitmap#1#2#3#4#5#6#7{% \pdfliteral{q #1 #2 #3 #4 #5 #6 cm}% \rlap{\pdfrefximage#7}% \pdfliteral{Q}% } \def\bitmapcorr#1#2#3#4#5#6#7{% \xcorr=0bp\advance\xcorr by\extraW\advance\xcorr by\overlap \ycorr=0bp\advance\ycorr by\extraS\advance\ycorr by\overlap \dimtobp{\xcorr}\edef\wdth{\tmpdef}% \dimtobp{\ycorr}\edef\hght{\tmpdef}% \pdfliteral{q 1 0 0 1 \wdth\space\hght\space cm #1 #2 #3 #4 #5 #6 cm}% two-step transformation to avoid overflow \rlap{\pdfrefximage#7}% \pdfliteral{Q}% } \newdimen\tmpdimenX \newdimen\tmpdimenY \def\calibrX#1{\tmpdimen=#1\advance\tmpdimen by\overlap\advance\tmpdimen by\extraW} \def\calibrY#1{\tmpdimen=#1\advance\tmpdimen by\overlap\advance\tmpdimen by\extraS} \def\TITLE#1{\eject\hbox{}\vskip5cm\centerline{\size[24]#1}\vfil\eject} % processing of the E-W-N-S references \def\showpointer#1{\ifnum\the#1=0\else\the#1\fi} % processing of the up and down references \def\showpointerlist#1{\edef\test{\the#1}\ifx\test\notdef\else \expandafter\process\the#1\endarg\fi} \def\process#1||#2\endarg{ \expandafter\processpointeritem#1\endarg% \if@#2@\def\next##1\endarg{} \else\let\next=\process\fi \next#2\endarg} \def\processpointeritem#1|#2|#3\endarg{\hbox{\textlink{\arr\ #2 (#1)}{#3}}} \def\arr{} % to be redefined in the \dopage macro \def\pagesetup#1#2#3#4#5#6{ \pdfpagewidth#1 \pdfpageheight#2 \hsize#3 \vsize#4 \pdfhorigin#5 \pdfvorigin#6 \hoffset0pt \voffset0pt\relax } \def\linestyle{1 J 1 j 1.5 w} \def\framed#1{% \dimtobp{\wd#1}\edef\wdth{\tmpdef}% \dimtobp{\ht#1}\edef\hght{\tmpdef}% \hbox to \wd#1{\rlap{\box#1}\PL{q \linestyle\space 0 0 \wdth\space\hght\space re S Q}\hfill}% } {\catcode`\p=12\catcode`\t=12\gdef\SKIPPT#1pt{#1}} \def\dimtobp#1{% \tmpdimen=#1% \tmpdimen=0.996264\tmpdimen \edef\tmpdef{\the\tmpdimen}% \edef\tmpdef{\expandafter\SKIPPT\tmpdef}% } \def\color[#1 #2 #3]{% \tmpdimen=#1pt% \divide\tmpdimen100 \edef\tmpdef{\the\tmpdimen}% \edef\tmpdef{\expandafter\SKIPPT\tmpdef}% \pdfliteral{\tmpdef}% \tmpdimen=#2pt% \divide\tmpdimen100 \edef\tmpdef{\the\tmpdimen}% \edef\tmpdef{\expandafter\SKIPPT\tmpdef}% \pdfliteral{\tmpdef}% \tmpdimen=#3pt% \divide\tmpdimen100 \edef\tmpdef{\the\tmpdimen}% \edef\tmpdef{\expandafter\SKIPPT\tmpdef}% \pdfliteral{\tmpdef}% \pdfliteral{rg} } % actual placing of the page elements \def\dopage{% \vbox{\centerline{\framed{\mapbox}} \bigskip \line{% \vbox to \ht\navbox{ \hbox{\size[20]\the\pagelabel \ifpagenumbering\space(\the\pagenum)\fi \space\size[16]\the\pagename} \ifpagenumbering \medskip \hbox{\qquad\qquad \vtop{% \hbox to 0pt{\hss\showpointer\pointerN\hss} \hbox to 0pt{\llap{\showpointer\pointerW\hskip0.7em}% \raise1pt\hbox to 0pt{\hss$\updownarrow$\hss}% \raise1pt\hbox to 0pt{\hss$\leftrightarrow$\hss}% \rlap{\hskip0.7em\showpointer\pointerE}} \hbox to 0pt{\hss\showpointer\pointerS\hss} }\qquad\qquad \vtop{ \def\arr{$\uparrow$} \showpointerlist\pointerU \def\arr{$\downarrow$} \showpointerlist\pointerD } } \fi \vss } \hss \vbox to \ht\navbox{ \ifnortharrow\hbox to 0pt{\hss\northarrow\qquad}\fi \vss \ifscalebar\hbox to 0pt{\hss\scalebar\qquad}\fi } \box\navbox } } } \newif\iflegend \newif\ifcolorlegend \newtoks\legendcontent \newtoks\cavename \newtoks\comment \newtoks\legendtitle \newtoks\colorlegendtitle \newif\ifnortharrow \newif\ifscalebar \newtoks\explotitle \newtoks\explodate \newtoks\exploteam \newtoks\topotitle \newtoks\topodate \newtoks\topoteam \newtoks\cartotitle \newtoks\cartodate \newtoks\cartoteam \newtoks\copyrights \newtoks\cavelength \newtoks\cavedepth \newtoks\cavelengthtitle \newtoks\cavedepthtitle \newtoks\legendtextcolor\legendtextcolor={\color[0 0 0]} \newtoks\legendtextsize\legendtextsize={\size[12]} \newtoks\legendtextheadersize\legendtextheadersize={\size[26]} \newtoks\legendtextsectionsize\legendtextsectionsize={\size[14]} \def\scalebar{\pdfrefxform\THWscalebar} \def\northarrow{\pdfrefxform\THWnortharrow} \newdimen\legendwidth %\legendwidth=14cm \newcount\legendcolumns \legendcolumns=2 \legendcontent={% \hsize=\legendwidth \color[0 0 0]\the\legendtextcolor \ifnortharrow\vbox to 0pt{\line{\hfil\northarrow}\vss}\fi \edef\tmp{\the\cavename} \ifx\tmp\empty \else {\the\legendtextheadersize\the\cavename}\vskip1cm \fi \ifscalebar\scalebar\vskip1cm\fi {\rightskip=0pt plus 3em\parskip=3bp \edef\tmp{\the\comment} \ifx\tmp\empty \else {\the\legendtextsize\the\comment} \par\medskip \fi \everypar{\hangindent=2em\hangafter=1} \edef\tmp{\the\cavelength} \ifx\tmp\empty \else {\the\legendtextsize\si\the\cavelengthtitle: \ss\the\cavelength\par} \fi \edef\tmp{\the\cavedepth} \ifx\tmp\empty \else {\the\legendtextsize\si\the\cavedepthtitle: \ss\the\cavedepth\par} \fi \edef\tmp{\the\exploteam} \ifx\tmp\empty \else {\the\legendtextsize\si\the\explotitle: \ss\the\exploteam\quad\si\the\explodate\par} \fi \edef\tmp{\the\topoteam} \ifx\tmp\empty \else {\the\legendtextsize\si\the\topotitle: \ss\the\topoteam\quad\si\the\topodate\par} \fi \edef\tmp{\the\cartoteam} \ifx\tmp\empty \else {\the\legendtextsize\si\the\cartotitle: \ss\the\cartoteam\quad\si\the\cartodate\par} \fi \edef\tmp{\the\copyrights} \ifx\tmp\empty \else {\the\legendtextsize\ss\the\copyrights\par} \fi } \formattedlegend \color[0 0 0] } \def\maplayout{ \legendbox{NW}{\the\legendcontent} \legendbox{NE}{\northarrow} } \def\formattedlegend{% \ifcolorlegend \vskip1cm{\the\legendtextsectionsize\the\colorlegendtitle}\bigskip \insertcolorlegend \fi \iflegend \vskip1cm{\the\legendtextsectionsize\the\legendtitle}\bigskip \insertlegend \fi} \let\atlaslegend=\formattedlegend \def\atlastitlepages{ \edef\tmp{\the\cavename} \ifx\tmp\empty \else \TITLE{\the\cavename} \fi {\rightskip=0pt plus 3em\parskip=3bp \edef\tmp{\the\comment} \ifx\tmp\empty \else {\size[12]\the\comment} \par\medskip \fi \everypar{\hangindent=2em\hangafter=1} \edef\tmp{\the\exploteam} \ifx\tmp\empty \else {\size[12]\si\the\explotitle: \ss\the\exploteam\par} \fi \edef\tmp{\the\topoteam} \ifx\tmp\empty \else {\size[12]\si\the\topotitle: \ss\the\topoteam\par} \fi \edef\tmp{\the\cartoteam} \ifx\tmp\empty \else {\size[12]\si\the\cartotitle: \ss\the\cartoteam\par} \fi \edef\tmp{\the\copyrights} \ifx\tmp\empty \else {\size[12]\ss\the\copyrights\par} \fi \edef\tmp{\the\cavelength} \ifx\tmp\empty \else {\the\legendtextsize\si\the\cavelengthtitle: \ss\the\cavelength\par} \fi \edef\tmp{\the\cavedepth} \ifx\tmp\empty \else {\the\legendtextsize\si\the\cavedepthtitle: \ss\the\cavedepth\par} \fi } } \newdimen\sx \newdimen\sy \newdimen\sxd \newdimen\syd \def\LEGN{N} \def\LEGE{E} \def\LEGW{W} \def\LEGS{S} \def\LEGNE{NE} \def\LEGNW{NW} \def\LEGSE{SE} \def\LEGSW{SW} \def\LEGC{C} \newdimen\extraN \extraN=0mm \newdimen\extraS \extraS=0mm \newdimen\extraE \extraE=0mm \newdimen\extraW \extraW=0mm \newdimen\adjustedHS \newdimen\adjustedVS \newdimen\adjustedX \newdimen\adjustedY \newdimen\framethickness\framethickness=0cm \def\legendbox#1#2#3#4{% \unskip \setbox\tmpboxa=\vbox{#4}% \sx=\wd\tmpboxa \sy=\ht\tmpboxa \advance\sy by \dp\tmpboxa \sxd=\hsize \divide\sxd by 100 \sxd=#1\sxd \syd=\vsize \divide\syd by 100 \syd=#2\syd \edef\test{#3}% \ifx\test\LEGN \divide\sx by 2 \advance\sxd by -\sx \advance\syd by -\sy \else\ifx\test\LEGW \divide\sy by 2 \advance\syd by -\sy \else\ifx\test\LEGE \advance\sxd by -\sx \divide\sy by 2 \advance\syd by -\sy \else\ifx\test\LEGS \divide\sx by 2 \advance\sxd by -\sx \else\ifx\test\LEGNW \advance\syd by -\sy \else\ifx\test\LEGNE \advance\sxd by -\sx \advance\syd by -\sy \else\ifx\test\LEGSW \else\ifx\test\LEGSE \advance\sxd by -\sx \else\ifx\test\LEGC \divide\sx by 2 \advance\sxd by -\sx \divide\sy by 2 \advance\syd by -\sy \fi\fi\fi\fi\fi\fi\fi\fi\fi % \ifdim\sxd<-\extraW \global\extraW=-\sxd\fi \ifdim\syd<-\extraS \global\extraS=-\syd\fi \sx=\wd\tmpboxa \sy=\ht\tmpboxa \advance\sy by \dp\tmpboxa \advance\sx by \sxd \advance\sx by -\hsize \advance\sy by \syd \advance\sy by -\vsize \ifdim\sx>\extraE \global\extraE=\sx \fi \ifdim\sy>\extraN \global\extraN=\sy \fi % \unskip % \advance\sxd by \extraW -- presunute do thpdf.cxx % \advance\syd by \extraS % vypln pod legendou \iflegendbgfill \begingroup \advance\sxd-1cm \advance\syd-1cm \sx=\wd\tmpboxa \advance\sx by 2cm \dimtobp{\sxd}\edef\shiftx{\tmpdef}% \dimtobp{\syd}\edef\shifty{\tmpdef}% % \dimtobp{\wd\tmpboxa}\edef\wdth{\tmpdef}% \dimtobp{\sx}\edef\wdth{\tmpdef}% \sy=\ht\tmpboxa \advance\sy by \dp\tmpboxa \advance\sy by 2 cm \dimtobp{\sy}\edef\hght{\tmpdef}% \rlap{\PL{q \the\bgcolor\space rg \shiftx\space \shifty\space \wdth\space \hght\space re f Q}}% \endgroup \fi % \advance\syd by \dp\tmpboxa \rlap{\kern\sxd\raise\syd\box\tmpboxa}% \ignorespaces } \def\loadpicture#1{\pdfximage{#1}\pdfrefximage\pdflastximage} \def\insertmaps{% \color[0 0 0] \input th_formdef \input th_pagedef \input th_pages \immediate\write-1{ \the\count10 \space numeric registers used out of \ifx\eTeXversion\undefined256\else32768\fi} } \def\insertlegend{% \input th_legend } \def\insertcolorlegend{% \input th_legendcolor } \def\insertkeyplan#1#2{% \tmpdimen=#1 \tmpdimen=2\tmpdimen \setbox0=\hbox{\pdfximage width \tmpdimen {#2}\pdfrefximage\pdflastximage} % \pdfxform0\keyplan=\pdflastxform \setbox1=\hbox to #1 {\copy0\hss} \setbox2=\hbox to #1 {\hss\box0} \eject \ifodd\pageno\hbox{}\vfil\eject\fi \line{\hss\pdfxform1\pdfrefxform\pdflastxform} \vfil \eject \line{\pdfxform2\pdfrefxform\pdflastxform\hss} \vfil \eject } \newcount\stopcount \newcount\stoprow \newcount\rows \newcount\rowstmp \newcount\i \newcount\j \def\placemaps{ \message{ [Warning: \string\placemaps\space is deprecated; use \string\insertmaps] } \insertmaps } %% Petr Olsak's multicolumn macros (slightly modified) \newdimen\colsep \colsep=1em % horiz. mezera mezi sloupci \newcount\tempnum % pracovní promìnná \splittopskip=\baselineskip \def\roundtolines #1{%% zaokrouhlí na celé násobky vel. øádku \divide #1 by\baselineskip \multiply #1 by\baselineskip} \def\corrsize #1{%% #1 := #1 + \splittopskip - \topskip \advance #1 by \splittopskip \advance #1 by-\topskip} \def\begmulti#1{\par\bigskip\penalty0 \def\Ncols{#1} \setbox0=\vbox\bgroup\penalty0 %% \hsize := ¹íøka sloupce = (\hsize+\colsep) / n - \colsep \advance\hsize by\colsep \divide\hsize by\Ncols \advance\hsize by-\colsep} \def\endmulti{\vfil\egroup \setbox1=\vsplit0 to0pt %% \dimen1 := velikost zbylého místa na stránce \ifdim\pagegoal=\maxdimen \dimen1=\vsize \corrsize{\dimen1} \else \dimen1=\pagegoal \advance\dimen1 by-\pagetotal \fi \ifdim \dimen1<2\baselineskip \vfil\break \dimen1=\vsize \corrsize{\dimen1} \fi %% \dimen0 := vý¹ka n sloupcové sazby po rozdìlení do sloupcù %% = (\ht0 + (n-1)\baselineskip) / n, zaokruhleno na øádky \dimen0=\Ncols\baselineskip \advance\dimen0 by-\baselineskip \advance\dimen0 by \ht0 \divide\dimen0 by\Ncols \roundtolines{\dimen0} %% Rozdìlit sazbu n sloupcù do stránek nebo nerozdìlit ? \ifdim \dimen0>\dimen1 \splitpart \else \makecolumns{\dimen0} \fi \ifvoid0 \else \errmessage{Lost text in multiple columns?} \fi \bigskip} \def\makecolumns#1{\setbox1=\hbox{}\tempnum=0 \loop \ifnum\Ncols>\tempnum \setbox1=\hbox{\unhbox1 \vsplit0 to#1 \hss} \advance\tempnum by1 \repeat \hbox{}\nobreak\vskip-\splittopskip \nointerlineskip \line{\unhbox1\unskip}} \def\splitpart{\roundtolines{\dimen1} \makecolumns{\dimen1} \advance\dimen0 by-\dimen1 %% \dimen0 := vý¹ka _zbylé_ n sloupcové sazby %% \dimen1 := prázdné místo na stránce = (cca) \vsize \vfil\break \dimen1=\vsize \corrsize{\dimen1} %% Rozdìlit zbylou sazbu n sloupcù do více stránek ? \ifvoid0 \else \ifdim \dimen0>\dimen1 \splitpart \else \makecolumns{\dimen0} \fi \fi} %% end of multicolumn macros \input th_enc \input th_texts \input th_resources \input th_fontdef \nonstopmode therion/texenc/0000755000076400010400000000000012050456026014553 5ustar userAdministratorstherion/texenc/afm2enc.pl0000755000076400010400000000123507674103574016444 0ustar userAdministrators#!/usr/bin/perl -w if (scalar @ARGV != 1) {die "Run with .afm file as an argument!";} $infile = $ARGV[0]; if ($infile =~ /\.afm$/) { $infile = $`; } else { die "Is the file $infile really an AFM file?"; } open(IN, "$infile.afm") or die "Can't open file $infile.afm: $!"; while() { chomp; if (/C\s+(\d+)\s*;.*;\s*N\s+(\w+)\s*;/) { if ($1>=0) { $CHAR[$1] = $2; } } } close(IN); open(OUT, ">$infile.enc") or die "Can't write file $infile.enc: $!"; print OUT "/$infile [\n"; for ($i=0; $i<256; $i++) { if (defined $CHAR[$i]) { print OUT "/$CHAR[$i]\n"; } else { print OUT "/.notdef\n"; } } print OUT "] def\n"; close(OUT); therion/texenc/basechars.txt0000644000076400010400000004433710071010724017252 0ustar userAdministrators00C0 0041 0300 00C1 0041 0301 00C2 0041 0302 00C3 0041 0303 00C4 0041 0308 00C5 0041 030A 00C7 0043 0327 00C8 0045 0300 00C9 0045 0301 00CA 0045 0302 00CB 0045 0308 00CC 0049 0300 00CD 0049 0301 00CE 0049 0302 00CF 0049 0308 00D1 004E 0303 00D2 004F 0300 00D3 004F 0301 00D4 004F 0302 00D5 004F 0303 00D6 004F 0308 00D9 0055 0300 00DA 0055 0301 00DB 0055 0302 00DC 0055 0308 00DD 0059 0301 00E0 0061 0300 00E1 0061 0301 00E2 0061 0302 00E3 0061 0303 00E4 0061 0308 00E5 0061 030A 00E7 0063 0327 00E8 0065 0300 00E9 0065 0301 00EA 0065 0302 00EB 0065 0308 00EC 0069 0300 00ED 0069 0301 00EE 0069 0302 00EF 0069 0308 00F1 006E 0303 00F2 006F 0300 00F3 006F 0301 00F4 006F 0302 00F5 006F 0303 00F6 006F 0308 00F9 0075 0300 00FA 0075 0301 00FB 0075 0302 00FC 0075 0308 00FD 0079 0301 00FF 0079 0308 0100 0041 0304 0101 0061 0304 0102 0041 0306 0103 0061 0306 0104 0041 0328 0105 0061 0328 0106 0043 0301 0107 0063 0301 0108 0043 0302 0109 0063 0302 010A 0043 0307 010B 0063 0307 010C 0043 030C 010D 0063 030C 010E 0044 030C 010F 0064 030C 0112 0045 0304 0113 0065 0304 0114 0045 0306 0115 0065 0306 0116 0045 0307 0117 0065 0307 0118 0045 0328 0119 0065 0328 011A 0045 030C 011B 0065 030C 011C 0047 0302 011D 0067 0302 011E 0047 0306 011F 0067 0306 0120 0047 0307 0121 0067 0307 0122 0047 0327 0123 0067 0327 0124 0048 0302 0125 0068 0302 0128 0049 0303 0129 0069 0303 012A 0049 0304 012B 0069 0304 012C 0049 0306 012D 0069 0306 012E 0049 0328 012F 0069 0328 0130 0049 0307 0134 004A 0302 0135 006A 0302 0136 004B 0327 0137 006B 0327 0139 004C 0301 013A 006C 0301 013B 004C 0327 013C 006C 0327 013D 004C 030C 013E 006C 030C 0143 004E 0301 0144 006E 0301 0145 004E 0327 0146 006E 0327 0147 004E 030C 0148 006E 030C 014C 004F 0304 014D 006F 0304 014E 004F 0306 014F 006F 0306 0150 004F 030B 0151 006F 030B 0154 0052 0301 0155 0072 0301 0156 0052 0327 0157 0072 0327 0158 0052 030C 0159 0072 030C 015A 0053 0301 015B 0073 0301 015C 0053 0302 015D 0073 0302 015E 0053 0327 015F 0073 0327 0160 0053 030C 0161 0073 030C 0162 0054 0327 0163 0074 0327 0164 0054 030C 0165 0074 030C 0168 0055 0303 0169 0075 0303 016A 0055 0304 016B 0075 0304 016C 0055 0306 016D 0075 0306 016E 0055 030A 016F 0075 030A 0170 0055 030B 0171 0075 030B 0172 0055 0328 0173 0075 0328 0174 0057 0302 0175 0077 0302 0176 0059 0302 0177 0079 0302 0178 0059 0308 0179 005A 0301 017A 007A 0301 017B 005A 0307 017C 007A 0307 017D 005A 030C 017E 007A 030C 01A0 004F 031B 01A1 006F 031B 01AF 0055 031B 01B0 0075 031B 01CD 0041 030C 01CE 0061 030C 01CF 0049 030C 01D0 0069 030C 01D1 004F 030C 01D2 006F 030C 01D3 0055 030C 01D4 0075 030C 01D5 00DC 0304 01D6 00FC 0304 01D7 00DC 0301 01D8 00FC 0301 01D9 00DC 030C 01DA 00FC 030C 01DB 00DC 0300 01DC 00FC 0300 01DE 00C4 0304 01DF 00E4 0304 01E0 0226 0304 01E1 0227 0304 01E2 00C6 0304 01E3 00E6 0304 01E6 0047 030C 01E7 0067 030C 01E8 004B 030C 01E9 006B 030C 01EA 004F 0328 01EB 006F 0328 01EC 01EA 0304 01ED 01EB 0304 01EE 01B7 030C 01EF 0292 030C 01F0 006A 030C 01F4 0047 0301 01F5 0067 0301 01F8 004E 0300 01F9 006E 0300 01FA 00C5 0301 01FB 00E5 0301 01FC 00C6 0301 01FD 00E6 0301 01FE 00D8 0301 01FF 00F8 0301 0200 0041 030F 0201 0061 030F 0202 0041 0311 0203 0061 0311 0204 0045 030F 0205 0065 030F 0206 0045 0311 0207 0065 0311 0208 0049 030F 0209 0069 030F 020A 0049 0311 020B 0069 0311 020C 004F 030F 020D 006F 030F 020E 004F 0311 020F 006F 0311 0210 0052 030F 0211 0072 030F 0212 0052 0311 0213 0072 0311 0214 0055 030F 0215 0075 030F 0216 0055 0311 0217 0075 0311 0218 0053 0326 0219 0073 0326 021A 0054 0326 021B 0074 0326 021E 0048 030C 021F 0068 030C 0226 0041 0307 0227 0061 0307 0228 0045 0327 0229 0065 0327 022A 00D6 0304 022B 00F6 0304 022C 00D5 0304 022D 00F5 0304 022E 004F 0307 022F 006F 0307 0230 022E 0304 0231 022F 0304 0232 0059 0304 0233 0079 0304 0340 0300 0341 0301 0343 0313 0344 0308 0301 0374 02B9 037E 003B 0385 00A8 0301 0386 0391 0301 0387 00B7 0388 0395 0301 0389 0397 0301 038A 0399 0301 038C 039F 0301 038E 03A5 0301 038F 03A9 0301 0390 03CA 0301 03AA 0399 0308 03AB 03A5 0308 03AC 03B1 0301 03AD 03B5 0301 03AE 03B7 0301 03AF 03B9 0301 03B0 03CB 0301 03CA 03B9 0308 03CB 03C5 0308 03CC 03BF 0301 03CD 03C5 0301 03CE 03C9 0301 03D3 03D2 0301 03D4 03D2 0308 0400 0415 0300 0401 0415 0308 0403 0413 0301 0407 0406 0308 040C 041A 0301 040D 0418 0300 040E 0423 0306 0419 0418 0306 0439 0438 0306 0450 0435 0300 0451 0435 0308 0453 0433 0301 0457 0456 0308 045C 043A 0301 045D 0438 0300 045E 0443 0306 0476 0474 030F 0477 0475 030F 04C1 0416 0306 04C2 0436 0306 04D0 0410 0306 04D1 0430 0306 04D2 0410 0308 04D3 0430 0308 04D6 0415 0306 04D7 0435 0306 04DA 04D8 0308 04DB 04D9 0308 04DC 0416 0308 04DD 0436 0308 04DE 0417 0308 04DF 0437 0308 04E2 0418 0304 04E3 0438 0304 04E4 0418 0308 04E5 0438 0308 04E6 041E 0308 04E7 043E 0308 04EA 04E8 0308 04EB 04E9 0308 04EC 042D 0308 04ED 044D 0308 04EE 0423 0304 04EF 0443 0304 04F0 0423 0308 04F1 0443 0308 04F2 0423 030B 04F3 0443 030B 04F4 0427 0308 04F5 0447 0308 04F8 042B 0308 04F9 044B 0308 0622 0627 0653 0623 0627 0654 0624 0648 0654 0625 0627 0655 0626 064A 0654 06C0 06D5 0654 06C2 06C1 0654 06D3 06D2 0654 0929 0928 093C 0931 0930 093C 0934 0933 093C 0958 0915 093C 0959 0916 093C 095A 0917 093C 095B 091C 093C 095C 0921 093C 095D 0922 093C 095E 092B 093C 095F 092F 093C 09CB 09C7 09BE 09CC 09C7 09D7 09DC 09A1 09BC 09DD 09A2 09BC 09DF 09AF 09BC 0A33 0A32 0A3C 0A36 0A38 0A3C 0A59 0A16 0A3C 0A5A 0A17 0A3C 0A5B 0A1C 0A3C 0A5E 0A2B 0A3C 0B48 0B47 0B56 0B4B 0B47 0B3E 0B4C 0B47 0B57 0B5C 0B21 0B3C 0B5D 0B22 0B3C 0B94 0B92 0BD7 0BCA 0BC6 0BBE 0BCB 0BC7 0BBE 0BCC 0BC6 0BD7 0C48 0C46 0C56 0CC0 0CBF 0CD5 0CC7 0CC6 0CD5 0CC8 0CC6 0CD6 0CCA 0CC6 0CC2 0CCB 0CCA 0CD5 0D4A 0D46 0D3E 0D4B 0D47 0D3E 0D4C 0D46 0D57 0DDA 0DD9 0DCA 0DDC 0DD9 0DCF 0DDD 0DDC 0DCA 0DDE 0DD9 0DDF 0F43 0F42 0FB7 0F4D 0F4C 0FB7 0F52 0F51 0FB7 0F57 0F56 0FB7 0F5C 0F5B 0FB7 0F69 0F40 0FB5 0F73 0F71 0F72 0F75 0F71 0F74 0F76 0FB2 0F80 0F78 0FB3 0F80 0F81 0F71 0F80 0F93 0F92 0FB7 0F9D 0F9C 0FB7 0FA2 0FA1 0FB7 0FA7 0FA6 0FB7 0FAC 0FAB 0FB7 0FB9 0F90 0FB5 1026 1025 102E 1E00 0041 0325 1E01 0061 0325 1E02 0042 0307 1E03 0062 0307 1E04 0042 0323 1E05 0062 0323 1E06 0042 0331 1E07 0062 0331 1E08 00C7 0301 1E09 00E7 0301 1E0A 0044 0307 1E0B 0064 0307 1E0C 0044 0323 1E0D 0064 0323 1E0E 0044 0331 1E0F 0064 0331 1E10 0044 0327 1E11 0064 0327 1E12 0044 032D 1E13 0064 032D 1E14 0112 0300 1E15 0113 0300 1E16 0112 0301 1E17 0113 0301 1E18 0045 032D 1E19 0065 032D 1E1A 0045 0330 1E1B 0065 0330 1E1C 0228 0306 1E1D 0229 0306 1E1E 0046 0307 1E1F 0066 0307 1E20 0047 0304 1E21 0067 0304 1E22 0048 0307 1E23 0068 0307 1E24 0048 0323 1E25 0068 0323 1E26 0048 0308 1E27 0068 0308 1E28 0048 0327 1E29 0068 0327 1E2A 0048 032E 1E2B 0068 032E 1E2C 0049 0330 1E2D 0069 0330 1E2E 00CF 0301 1E2F 00EF 0301 1E30 004B 0301 1E31 006B 0301 1E32 004B 0323 1E33 006B 0323 1E34 004B 0331 1E35 006B 0331 1E36 004C 0323 1E37 006C 0323 1E38 1E36 0304 1E39 1E37 0304 1E3A 004C 0331 1E3B 006C 0331 1E3C 004C 032D 1E3D 006C 032D 1E3E 004D 0301 1E3F 006D 0301 1E40 004D 0307 1E41 006D 0307 1E42 004D 0323 1E43 006D 0323 1E44 004E 0307 1E45 006E 0307 1E46 004E 0323 1E47 006E 0323 1E48 004E 0331 1E49 006E 0331 1E4A 004E 032D 1E4B 006E 032D 1E4C 00D5 0301 1E4D 00F5 0301 1E4E 00D5 0308 1E4F 00F5 0308 1E50 014C 0300 1E51 014D 0300 1E52 014C 0301 1E53 014D 0301 1E54 0050 0301 1E55 0070 0301 1E56 0050 0307 1E57 0070 0307 1E58 0052 0307 1E59 0072 0307 1E5A 0052 0323 1E5B 0072 0323 1E5C 1E5A 0304 1E5D 1E5B 0304 1E5E 0052 0331 1E5F 0072 0331 1E60 0053 0307 1E61 0073 0307 1E62 0053 0323 1E63 0073 0323 1E64 015A 0307 1E65 015B 0307 1E66 0160 0307 1E67 0161 0307 1E68 1E62 0307 1E69 1E63 0307 1E6A 0054 0307 1E6B 0074 0307 1E6C 0054 0323 1E6D 0074 0323 1E6E 0054 0331 1E6F 0074 0331 1E70 0054 032D 1E71 0074 032D 1E72 0055 0324 1E73 0075 0324 1E74 0055 0330 1E75 0075 0330 1E76 0055 032D 1E77 0075 032D 1E78 0168 0301 1E79 0169 0301 1E7A 016A 0308 1E7B 016B 0308 1E7C 0056 0303 1E7D 0076 0303 1E7E 0056 0323 1E7F 0076 0323 1E80 0057 0300 1E81 0077 0300 1E82 0057 0301 1E83 0077 0301 1E84 0057 0308 1E85 0077 0308 1E86 0057 0307 1E87 0077 0307 1E88 0057 0323 1E89 0077 0323 1E8A 0058 0307 1E8B 0078 0307 1E8C 0058 0308 1E8D 0078 0308 1E8E 0059 0307 1E8F 0079 0307 1E90 005A 0302 1E91 007A 0302 1E92 005A 0323 1E93 007A 0323 1E94 005A 0331 1E95 007A 0331 1E96 0068 0331 1E97 0074 0308 1E98 0077 030A 1E99 0079 030A 1E9B 017F 0307 1EA0 0041 0323 1EA1 0061 0323 1EA2 0041 0309 1EA3 0061 0309 1EA4 00C2 0301 1EA5 00E2 0301 1EA6 00C2 0300 1EA7 00E2 0300 1EA8 00C2 0309 1EA9 00E2 0309 1EAA 00C2 0303 1EAB 00E2 0303 1EAC 1EA0 0302 1EAD 1EA1 0302 1EAE 0102 0301 1EAF 0103 0301 1EB0 0102 0300 1EB1 0103 0300 1EB2 0102 0309 1EB3 0103 0309 1EB4 0102 0303 1EB5 0103 0303 1EB6 1EA0 0306 1EB7 1EA1 0306 1EB8 0045 0323 1EB9 0065 0323 1EBA 0045 0309 1EBB 0065 0309 1EBC 0045 0303 1EBD 0065 0303 1EBE 00CA 0301 1EBF 00EA 0301 1EC0 00CA 0300 1EC1 00EA 0300 1EC2 00CA 0309 1EC3 00EA 0309 1EC4 00CA 0303 1EC5 00EA 0303 1EC6 1EB8 0302 1EC7 1EB9 0302 1EC8 0049 0309 1EC9 0069 0309 1ECA 0049 0323 1ECB 0069 0323 1ECC 004F 0323 1ECD 006F 0323 1ECE 004F 0309 1ECF 006F 0309 1ED0 00D4 0301 1ED1 00F4 0301 1ED2 00D4 0300 1ED3 00F4 0300 1ED4 00D4 0309 1ED5 00F4 0309 1ED6 00D4 0303 1ED7 00F4 0303 1ED8 1ECC 0302 1ED9 1ECD 0302 1EDA 01A0 0301 1EDB 01A1 0301 1EDC 01A0 0300 1EDD 01A1 0300 1EDE 01A0 0309 1EDF 01A1 0309 1EE0 01A0 0303 1EE1 01A1 0303 1EE2 01A0 0323 1EE3 01A1 0323 1EE4 0055 0323 1EE5 0075 0323 1EE6 0055 0309 1EE7 0075 0309 1EE8 01AF 0301 1EE9 01B0 0301 1EEA 01AF 0300 1EEB 01B0 0300 1EEC 01AF 0309 1EED 01B0 0309 1EEE 01AF 0303 1EEF 01B0 0303 1EF0 01AF 0323 1EF1 01B0 0323 1EF2 0059 0300 1EF3 0079 0300 1EF4 0059 0323 1EF5 0079 0323 1EF6 0059 0309 1EF7 0079 0309 1EF8 0059 0303 1EF9 0079 0303 1F00 03B1 0313 1F01 03B1 0314 1F02 1F00 0300 1F03 1F01 0300 1F04 1F00 0301 1F05 1F01 0301 1F06 1F00 0342 1F07 1F01 0342 1F08 0391 0313 1F09 0391 0314 1F0A 1F08 0300 1F0B 1F09 0300 1F0C 1F08 0301 1F0D 1F09 0301 1F0E 1F08 0342 1F0F 1F09 0342 1F10 03B5 0313 1F11 03B5 0314 1F12 1F10 0300 1F13 1F11 0300 1F14 1F10 0301 1F15 1F11 0301 1F18 0395 0313 1F19 0395 0314 1F1A 1F18 0300 1F1B 1F19 0300 1F1C 1F18 0301 1F1D 1F19 0301 1F20 03B7 0313 1F21 03B7 0314 1F22 1F20 0300 1F23 1F21 0300 1F24 1F20 0301 1F25 1F21 0301 1F26 1F20 0342 1F27 1F21 0342 1F28 0397 0313 1F29 0397 0314 1F2A 1F28 0300 1F2B 1F29 0300 1F2C 1F28 0301 1F2D 1F29 0301 1F2E 1F28 0342 1F2F 1F29 0342 1F30 03B9 0313 1F31 03B9 0314 1F32 1F30 0300 1F33 1F31 0300 1F34 1F30 0301 1F35 1F31 0301 1F36 1F30 0342 1F37 1F31 0342 1F38 0399 0313 1F39 0399 0314 1F3A 1F38 0300 1F3B 1F39 0300 1F3C 1F38 0301 1F3D 1F39 0301 1F3E 1F38 0342 1F3F 1F39 0342 1F40 03BF 0313 1F41 03BF 0314 1F42 1F40 0300 1F43 1F41 0300 1F44 1F40 0301 1F45 1F41 0301 1F48 039F 0313 1F49 039F 0314 1F4A 1F48 0300 1F4B 1F49 0300 1F4C 1F48 0301 1F4D 1F49 0301 1F50 03C5 0313 1F51 03C5 0314 1F52 1F50 0300 1F53 1F51 0300 1F54 1F50 0301 1F55 1F51 0301 1F56 1F50 0342 1F57 1F51 0342 1F59 03A5 0314 1F5B 1F59 0300 1F5D 1F59 0301 1F5F 1F59 0342 1F60 03C9 0313 1F61 03C9 0314 1F62 1F60 0300 1F63 1F61 0300 1F64 1F60 0301 1F65 1F61 0301 1F66 1F60 0342 1F67 1F61 0342 1F68 03A9 0313 1F69 03A9 0314 1F6A 1F68 0300 1F6B 1F69 0300 1F6C 1F68 0301 1F6D 1F69 0301 1F6E 1F68 0342 1F6F 1F69 0342 1F70 03B1 0300 1F71 03AC 1F72 03B5 0300 1F73 03AD 1F74 03B7 0300 1F75 03AE 1F76 03B9 0300 1F77 03AF 1F78 03BF 0300 1F79 03CC 1F7A 03C5 0300 1F7B 03CD 1F7C 03C9 0300 1F7D 03CE 1F80 1F00 0345 1F81 1F01 0345 1F82 1F02 0345 1F83 1F03 0345 1F84 1F04 0345 1F85 1F05 0345 1F86 1F06 0345 1F87 1F07 0345 1F88 1F08 0345 1F89 1F09 0345 1F8A 1F0A 0345 1F8B 1F0B 0345 1F8C 1F0C 0345 1F8D 1F0D 0345 1F8E 1F0E 0345 1F8F 1F0F 0345 1F90 1F20 0345 1F91 1F21 0345 1F92 1F22 0345 1F93 1F23 0345 1F94 1F24 0345 1F95 1F25 0345 1F96 1F26 0345 1F97 1F27 0345 1F98 1F28 0345 1F99 1F29 0345 1F9A 1F2A 0345 1F9B 1F2B 0345 1F9C 1F2C 0345 1F9D 1F2D 0345 1F9E 1F2E 0345 1F9F 1F2F 0345 1FA0 1F60 0345 1FA1 1F61 0345 1FA2 1F62 0345 1FA3 1F63 0345 1FA4 1F64 0345 1FA5 1F65 0345 1FA6 1F66 0345 1FA7 1F67 0345 1FA8 1F68 0345 1FA9 1F69 0345 1FAA 1F6A 0345 1FAB 1F6B 0345 1FAC 1F6C 0345 1FAD 1F6D 0345 1FAE 1F6E 0345 1FAF 1F6F 0345 1FB0 03B1 0306 1FB1 03B1 0304 1FB2 1F70 0345 1FB3 03B1 0345 1FB4 03AC 0345 1FB6 03B1 0342 1FB7 1FB6 0345 1FB8 0391 0306 1FB9 0391 0304 1FBA 0391 0300 1FBB 0386 1FBC 0391 0345 1FBE 03B9 1FC1 00A8 0342 1FC2 1F74 0345 1FC3 03B7 0345 1FC4 03AE 0345 1FC6 03B7 0342 1FC7 1FC6 0345 1FC8 0395 0300 1FC9 0388 1FCA 0397 0300 1FCB 0389 1FCC 0397 0345 1FCD 1FBF 0300 1FCE 1FBF 0301 1FCF 1FBF 0342 1FD0 03B9 0306 1FD1 03B9 0304 1FD2 03CA 0300 1FD3 0390 1FD6 03B9 0342 1FD7 03CA 0342 1FD8 0399 0306 1FD9 0399 0304 1FDA 0399 0300 1FDB 038A 1FDD 1FFE 0300 1FDE 1FFE 0301 1FDF 1FFE 0342 1FE0 03C5 0306 1FE1 03C5 0304 1FE2 03CB 0300 1FE3 03B0 1FE4 03C1 0313 1FE5 03C1 0314 1FE6 03C5 0342 1FE7 03CB 0342 1FE8 03A5 0306 1FE9 03A5 0304 1FEA 03A5 0300 1FEB 038E 1FEC 03A1 0314 1FED 00A8 0300 1FEE 0385 1FEF 0060 1FF2 1F7C 0345 1FF3 03C9 0345 1FF4 03CE 0345 1FF6 03C9 0342 1FF7 1FF6 0345 1FF8 039F 0300 1FF9 038C 1FFA 03A9 0300 1FFB 038F 1FFC 03A9 0345 1FFD 00B4 2000 2002 2001 2003 2126 03A9 212A 004B 212B 00C5 219A 2190 0338 219B 2192 0338 21AE 2194 0338 21CD 21D0 0338 21CE 21D4 0338 21CF 21D2 0338 2204 2203 0338 2209 2208 0338 220C 220B 0338 2224 2223 0338 2226 2225 0338 2241 223C 0338 2244 2243 0338 2247 2245 0338 2249 2248 0338 2260 003D 0338 2262 2261 0338 226D 224D 0338 226E 003C 0338 226F 003E 0338 2270 2264 0338 2271 2265 0338 2274 2272 0338 2275 2273 0338 2278 2276 0338 2279 2277 0338 2280 227A 0338 2281 227B 0338 2284 2282 0338 2285 2283 0338 2288 2286 0338 2289 2287 0338 22AC 22A2 0338 22AD 22A8 0338 22AE 22A9 0338 22AF 22AB 0338 22E0 227C 0338 22E1 227D 0338 22E2 2291 0338 22E3 2292 0338 22EA 22B2 0338 22EB 22B3 0338 22EC 22B4 0338 22ED 22B5 0338 2329 3008 232A 3009 2ADC 2ADD 0338 304C 304B 3099 304E 304D 3099 3050 304F 3099 3052 3051 3099 3054 3053 3099 3056 3055 3099 3058 3057 3099 305A 3059 3099 305C 305B 3099 305E 305D 3099 3060 305F 3099 3062 3061 3099 3065 3064 3099 3067 3066 3099 3069 3068 3099 3070 306F 3099 3071 306F 309A 3073 3072 3099 3074 3072 309A 3076 3075 3099 3077 3075 309A 3079 3078 3099 307A 3078 309A 307C 307B 3099 307D 307B 309A 3094 3046 3099 309E 309D 3099 30AC 30AB 3099 30AE 30AD 3099 30B0 30AF 3099 30B2 30B1 3099 30B4 30B3 3099 30B6 30B5 3099 30B8 30B7 3099 30BA 30B9 3099 30BC 30BB 3099 30BE 30BD 3099 30C0 30BF 3099 30C2 30C1 3099 30C5 30C4 3099 30C7 30C6 3099 30C9 30C8 3099 30D0 30CF 3099 30D1 30CF 309A 30D3 30D2 3099 30D4 30D2 309A 30D6 30D5 3099 30D7 30D5 309A 30D9 30D8 3099 30DA 30D8 309A 30DC 30DB 3099 30DD 30DB 309A 30F4 30A6 3099 30F7 30EF 3099 30F8 30F0 3099 30F9 30F1 3099 30FA 30F2 3099 30FE 30FD 3099 F900 8C48 F901 66F4 F902 8ECA F903 8CC8 F904 6ED1 F905 4E32 F906 53E5 F907 9F9C F908 9F9C F909 5951 F90A 91D1 F90B 5587 F90C 5948 F90D 61F6 F90E 7669 F90F 7F85 F910 863F F911 87BA F912 88F8 F913 908F F914 6A02 F915 6D1B F916 70D9 F917 73DE F918 843D F919 916A F91A 99F1 F91B 4E82 F91C 5375 F91D 6B04 F91E 721B F91F 862D F920 9E1E F921 5D50 F922 6FEB F923 85CD F924 8964 F925 62C9 F926 81D8 F927 881F F928 5ECA F929 6717 F92A 6D6A F92B 72FC F92C 90CE F92D 4F86 F92E 51B7 F92F 52DE F930 64C4 F931 6AD3 F932 7210 F933 76E7 F934 8001 F935 8606 F936 865C F937 8DEF F938 9732 F939 9B6F F93A 9DFA F93B 788C F93C 797F F93D 7DA0 F93E 83C9 F93F 9304 F940 9E7F F941 8AD6 F942 58DF F943 5F04 F944 7C60 F945 807E F946 7262 F947 78CA F948 8CC2 F949 96F7 F94A 58D8 F94B 5C62 F94C 6A13 F94D 6DDA F94E 6F0F F94F 7D2F F950 7E37 F951 964B F952 52D2 F953 808B F954 51DC F955 51CC F956 7A1C F957 7DBE F958 83F1 F959 9675 F95A 8B80 F95B 62CF F95C 6A02 F95D 8AFE F95E 4E39 F95F 5BE7 F960 6012 F961 7387 F962 7570 F963 5317 F964 78FB F965 4FBF F966 5FA9 F967 4E0D F968 6CCC F969 6578 F96A 7D22 F96B 53C3 F96C 585E F96D 7701 F96E 8449 F96F 8AAA F970 6BBA F971 8FB0 F972 6C88 F973 62FE F974 82E5 F975 63A0 F976 7565 F977 4EAE F978 5169 F979 51C9 F97A 6881 F97B 7CE7 F97C 826F F97D 8AD2 F97E 91CF F97F 52F5 F980 5442 F981 5973 F982 5EEC F983 65C5 F984 6FFE F985 792A F986 95AD F987 9A6A F988 9E97 F989 9ECE F98A 529B F98B 66C6 F98C 6B77 F98D 8F62 F98E 5E74 F98F 6190 F990 6200 F991 649A F992 6F23 F993 7149 F994 7489 F995 79CA F996 7DF4 F997 806F F998 8F26 F999 84EE F99A 9023 F99B 934A F99C 5217 F99D 52A3 F99E 54BD F99F 70C8 F9A0 88C2 F9A1 8AAA F9A2 5EC9 F9A3 5FF5 F9A4 637B F9A5 6BAE F9A6 7C3E F9A7 7375 F9A8 4EE4 F9A9 56F9 F9AA 5BE7 F9AB 5DBA F9AC 601C F9AD 73B2 F9AE 7469 F9AF 7F9A F9B0 8046 F9B1 9234 F9B2 96F6 F9B3 9748 F9B4 9818 F9B5 4F8B F9B6 79AE F9B7 91B4 F9B8 96B8 F9B9 60E1 F9BA 4E86 F9BB 50DA F9BC 5BEE F9BD 5C3F F9BE 6599 F9BF 6A02 F9C0 71CE F9C1 7642 F9C2 84FC F9C3 907C F9C4 9F8D F9C5 6688 F9C6 962E F9C7 5289 F9C8 677B F9C9 67F3 F9CA 6D41 F9CB 6E9C F9CC 7409 F9CD 7559 F9CE 786B F9CF 7D10 F9D0 985E F9D1 516D F9D2 622E F9D3 9678 F9D4 502B F9D5 5D19 F9D6 6DEA F9D7 8F2A F9D8 5F8B F9D9 6144 F9DA 6817 F9DB 7387 F9DC 9686 F9DD 5229 F9DE 540F F9DF 5C65 F9E0 6613 F9E1 674E F9E2 68A8 F9E3 6CE5 F9E4 7406 F9E5 75E2 F9E6 7F79 F9E7 88CF F9E8 88E1 F9E9 91CC F9EA 96E2 F9EB 533F F9EC 6EBA F9ED 541D F9EE 71D0 F9EF 7498 F9F0 85FA F9F1 96A3 F9F2 9C57 F9F3 9E9F F9F4 6797 F9F5 6DCB F9F6 81E8 F9F7 7ACB F9F8 7B20 F9F9 7C92 F9FA 72C0 F9FB 7099 F9FC 8B58 F9FD 4EC0 F9FE 8336 F9FF 523A FA00 5207 FA01 5EA6 FA02 62D3 FA03 7CD6 FA04 5B85 FA05 6D1E FA06 66B4 FA07 8F3B FA08 884C FA09 964D FA0A 898B FA0B 5ED3 FA0C 5140 FA0D 55C0 FA10 585A FA12 6674 FA15 51DE FA16 732A FA17 76CA FA18 793C FA19 795E FA1A 7965 FA1B 798F FA1C 9756 FA1D 7CBE FA1E 7FBD FA20 8612 FA22 8AF8 FA25 9038 FA26 90FD FA2A 98EF FA2B 98FC FA2C 9928 FA2D 9DB4 FA30 4FAE FA31 50E7 FA32 514D FA33 52C9 FA34 52E4 FA35 5351 FA36 559D FA37 5606 FA38 5668 FA39 5840 FA3A 58A8 FA3B 5C64 FA3C 5C6E FA3D 6094 FA3E 6168 FA3F 618E FA40 61F2 FA41 654F FA42 65E2 FA43 6691 FA44 6885 FA45 6D77 FA46 6E1A FA47 6F22 FA48 716E FA49 722B FA4A 7422 FA4B 7891 FA4C 793E FA4D 7949 FA4E 7948 FA4F 7950 FA50 7956 FA51 795D FA52 798D FA53 798E FA54 7A40 FA55 7A81 FA56 7BC0 FA57 7DF4 FA58 7E09 FA59 7E41 FA5A 7F72 FA5B 8005 FA5C 81ED FA5D 8279 FA5E 8279 FA5F 8457 FA60 8910 FA61 8996 FA62 8B01 FA63 8B39 FA64 8CD3 FA65 8D08 FA66 8FB6 FA67 9038 FA68 96E3 FA69 97FF FA6A 983B FB1D 05D9 05B4 FB1F 05F2 05B7 FB2A 05E9 05C1 FB2B 05E9 05C2 FB2C FB49 05C1 FB2D FB49 05C2 FB2E 05D0 05B7 FB2F 05D0 05B8 FB30 05D0 05BC FB31 05D1 05BC FB32 05D2 05BC FB33 05D3 05BC FB34 05D4 05BC FB35 05D5 05BC FB36 05D6 05BC FB38 05D8 05BC FB39 05D9 05BC FB3A 05DA 05BC FB3B 05DB 05BC FB3C 05DC 05BC FB3E 05DE 05BC FB40 05E0 05BC FB41 05E1 05BC FB43 05E3 05BC FB44 05E4 05BC FB46 05E6 05BC FB47 05E7 05BC FB48 05E8 05BC FB49 05E9 05BC FB4A 05EA 05BC FB4B 05D5 05B9 FB4C 05D1 05BF FB4D 05DB 05BF FB4E 05E4 05BF therion/texenc/encodings/0000755000076400010400000000000012050456026016524 5ustar userAdministratorstherion/texenc/encodings/cmcyr.enc0000644000076400010400000000464210716043364020342 0ustar userAdministrators/cmcyr [ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /afii10071 /.notdef /afii10023 /.notdef /afii10096 /afii10065 /afii10066 /afii10088 /afii10069 /afii10070 /afii10086 /afii10068 /afii10087 /afii10074 /afii10075 /afii10076 /afii10077 /afii10078 /afii10079 /afii10080 /afii10081 /afii10097 /afii10082 /afii10083 /afii10084 /afii10085 /afii10072 /afii10067 /afii10094 /afii10093 /afii10073 /afii10090 /afii10095 /afii10091 /afii10089 /afii10092 /afii10048 /afii10017 /afii10018 /afii10040 /afii10021 /afii10022 /afii10038 /afii10020 /afii10039 /afii10026 /afii10027 /afii10028 /afii10029 /afii10030 /afii10031 /afii10032 /afii10033 /afii10049 /afii10034 /afii10035 /afii10036 /afii10037 /afii10024 /afii10019 /afii10046 /afii10045 /afii10025 /afii10042 /afii10047 /afii10043 /afii10041 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /afii61352 /.notdef /.notdef /.notdef /guillemotleft /guillemotright /.notdef /.notdef /afii10044 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef ] def therion/texenc/encodings/raw.enc0000644000076400010400000000635307673600742020026 0ustar userAdministrators/TeXraw [ %%%%% '000 = "00 /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon %%%%% '010 = "08 /Phi /Psi /Omega /ff /fi /fl /ffi /ffl %%%%% '020 = "10 /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring %%%%% '030 = "18 /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash %%%%% '040 = "20 /.notdef /exclam /quotedblright /numbersign /dollar /percent /ampersand /quoteright %%%%% '050 = "28 /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash %%%%% '060 = "30 /zero /one /two /three /four /five /six /seven %%%%% '070 = "38 /eight /nine /colon /semicolon /exclamdown /equal /questiondown /question %%%%% '100 = "40 /at /A /B /C /D /E /F /G %%%%% '110 = "48 /H /I /J /K /L /M /N /O %%%%% '120 = "50 /P /Q /R /S /T /U /V /W %%%%% '130 = "58 /X /Y /Z /bracketleft /quotedblleft /bracketright /circumflex /dotaccent %%%%% '140 = "60 /quoteleft /a /b /c /d /e /f /g %%%%% '150 = "68 /h /i /j /k /l /m /n /o %%%%% '160 = "70 /p /q /r /s /t /u /v /w %%%%% '170 = "78 /x /y /z /endash /emdash /hungarumlaut /tilde /dieresis %%%%% '200 = "80 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '210 = "88 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '220 = "90 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '230 = "98 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '240 = "A0 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '250 = "A8 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '260 = "B0 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '270 = "B8 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '300 = "C0 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '310 = "C8 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '320 = "D0 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '330 = "D8 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '340 = "E0 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '350 = "E8 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '360 = "F0 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '370 = "F8 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef ] def therion/texenc/encodings/xl2.enc0000644000076400010400000000772710071305510017725 0ustar userAdministrators/XL2encoding [ %%%%% '000 = "00 /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon %%%%% '010 = "08 /Phi /Psi /Omega /ff /fi /fl /ffi /ffl %%%%% '020 = "10 /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring %%%%% '030 = "18 /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash %%%%% '040 = "20 /.notdef /exclam /quotedblright /numbersign /dollar /percent /ampersand /quoteright %%%%% '050 = "28 /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash %%%%% '060 = "30 /zero /one /two /three /four /five /six /seven %%%%% '070 = "38 /eight /nine /colon /semicolon /exclamdown /equal /questiondown /question %%%%% '100 = "40 /at /A /B /C /D /E /F /G %%%%% '110 = "48 /H /I /J /K /L /M /N /O %%%%% '120 = "50 /P /Q /R /S /T /U /V /W %%%%% '130 = "58 /X /Y /Z /bracketleft /quotedblleft /bracketright /circumflex /dotaccent %%%%% '140 = "60 /quoteleft /a /b /c /d /e /f /g %%%%% '150 = "68 /h /i /j /k /l /m /n /o %%%%% '160 = "70 /p /q /r /s /t /u /v /w %%%%% '170 = "78 /x /y /z /endash /emdash /hungarumlaut /tilde /dieresis %%%%% '200 = "80 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '210 = "88 /.notdef /.notdef /.notdef /.notdef /.notdef /perthousand /.notdef /.notdef %%%%% '220 = "90 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '230 = "98 /Agrave /.notdef /.notdef /.notdef /hyphen /ogonek /guillemotleft /guillemotright %%%%% '240 = "A0 /.notdef /.notdef /.notdef /.notdef /.notdef /Lcaron /.notdef /.notdef %%%%% '250 = "A8 /.notdef /Scaron /.notdef /Tcaron /.notdef /.notdef /Zcaron /.notdef %%%%% '260 = "B0 /.notdef /.notdef /.notdef /.notdef /.notdef /lcaron /.notdef /.notdef %%%%% '270 = "B8 /agrave /scaron /.notdef /tcaron /.notdef /.notdef /zcaron /.notdef %%%%% '300 = "C0 /Racute /Aacute /.notdef /.notdef /Adieresis /Lacute /.notdef /.notdef %%%%% '310 = "C8 /Ccaron /Eacute /.notdef /.notdef /Ecaron /Iacute /.notdef /Dcaron %%%%% '320 = "D0 /.notdef /.notdef /Ncaron /Oacute /Ocircumflex /.notdef /Odieresis /.notdef %%%%% '330 = "D8 /Rcaron /Uring /Uacute /.notdef /Udieresis /Yacute /.notdef /.notdef %%%%% '340 = "E0 /racute /aacute /.notdef /.notdef /adieresis /lacute /.notdef /.notdef %%%%% '350 = "E8 /ccaron /eacute /.notdef /.notdef /ecaron /iacute /.notdef /dcaron %%%%% '360 = "F0 /.notdef /.notdef /ncaron /oacute /ocircumflex /.notdef /odieresis /.notdef %%%%% '370 = "F8 /rcaron /uring /uacute /.notdef /udieresis /yacute /quotedblbase /quotedblleft ] def % LIGKERN hyphen hyphen =: endash ; endash hyphen =: emdash ; % LIGKERN quoteleft quoteleft =: quotedblleft ; % LIGKERN quoteright quoteright =: quotedblright ; % LIGKERN exclamdown exclamdown =: guillemotleft ; % frenchdblquotes % LIGKERN questiondown questiondown =: guillemotright ; % csquoteleft % LIGKERN comma comma =: quotedblbase ; % LIGKERN space {} * ; * {} space ; zero {} * ; * {} zero ; % LIGKERN one {} * ; * {} one ; two {} * ; * {} two ; % LIGKERN three {} * ; * {} three ; four {} * ; * {} four ; % LIGKERN five {} * ; * {} five ; six {} * ; * {} six ; % LIGKERN seven {} * ; * {} seven ; eight {} * ; * {} eight ; % LIGKERN nine {} * ; * {} nine ; % LIGKERN question {} quoteleft ; exclam {} quoteleft ; therion/texenc/glyphlist.txt0000644000076400010400000022512507671076434017360 0ustar userAdministrators# Name: Adobe Glyph List # Table version: 2.0 # Date: September 20, 2002 # # See http://partners.adobe.com/asn/developer/typeforum/unicodegn.html # # Format: Semicolon-delimited fields: # (1) glyph name # (2) Unicode scalar value A;0041 AE;00C6 AEacute;01FC AEmacron;01E2 AEsmall;F7E6 Aacute;00C1 Aacutesmall;F7E1 Abreve;0102 Abreveacute;1EAE Abrevecyrillic;04D0 Abrevedotbelow;1EB6 Abrevegrave;1EB0 Abrevehookabove;1EB2 Abrevetilde;1EB4 Acaron;01CD Acircle;24B6 Acircumflex;00C2 Acircumflexacute;1EA4 Acircumflexdotbelow;1EAC Acircumflexgrave;1EA6 Acircumflexhookabove;1EA8 Acircumflexsmall;F7E2 Acircumflextilde;1EAA Acute;F6C9 Acutesmall;F7B4 Acyrillic;0410 Adblgrave;0200 Adieresis;00C4 Adieresiscyrillic;04D2 Adieresismacron;01DE Adieresissmall;F7E4 Adotbelow;1EA0 Adotmacron;01E0 Agrave;00C0 Agravesmall;F7E0 Ahookabove;1EA2 Aiecyrillic;04D4 Ainvertedbreve;0202 Alpha;0391 Alphatonos;0386 Amacron;0100 Amonospace;FF21 Aogonek;0104 Aring;00C5 Aringacute;01FA Aringbelow;1E00 Aringsmall;F7E5 Asmall;F761 Atilde;00C3 Atildesmall;F7E3 Aybarmenian;0531 B;0042 Bcircle;24B7 Bdotaccent;1E02 Bdotbelow;1E04 Becyrillic;0411 Benarmenian;0532 Beta;0392 Bhook;0181 Blinebelow;1E06 Bmonospace;FF22 Brevesmall;F6F4 Bsmall;F762 Btopbar;0182 C;0043 Caarmenian;053E Cacute;0106 Caron;F6CA Caronsmall;F6F5 Ccaron;010C Ccedilla;00C7 Ccedillaacute;1E08 Ccedillasmall;F7E7 Ccircle;24B8 Ccircumflex;0108 Cdot;010A Cdotaccent;010A Cedillasmall;F7B8 Chaarmenian;0549 Cheabkhasiancyrillic;04BC Checyrillic;0427 Chedescenderabkhasiancyrillic;04BE Chedescendercyrillic;04B6 Chedieresiscyrillic;04F4 Cheharmenian;0543 Chekhakassiancyrillic;04CB Cheverticalstrokecyrillic;04B8 Chi;03A7 Chook;0187 Circumflexsmall;F6F6 Cmonospace;FF23 Coarmenian;0551 Csmall;F763 D;0044 DZ;01F1 DZcaron;01C4 Daarmenian;0534 Dafrican;0189 Dcaron;010E Dcedilla;1E10 Dcircle;24B9 Dcircumflexbelow;1E12 Dcroat;0110 Ddotaccent;1E0A Ddotbelow;1E0C Decyrillic;0414 Deicoptic;03EE Delta;2206 Deltagreek;0394 Dhook;018A Dieresis;F6CB DieresisAcute;F6CC DieresisGrave;F6CD Dieresissmall;F7A8 Digammagreek;03DC Djecyrillic;0402 Dlinebelow;1E0E Dmonospace;FF24 Dotaccentsmall;F6F7 Dslash;0110 Dsmall;F764 Dtopbar;018B Dz;01F2 Dzcaron;01C5 Dzeabkhasiancyrillic;04E0 Dzecyrillic;0405 Dzhecyrillic;040F E;0045 Eacute;00C9 Eacutesmall;F7E9 Ebreve;0114 Ecaron;011A Ecedillabreve;1E1C Echarmenian;0535 Ecircle;24BA Ecircumflex;00CA Ecircumflexacute;1EBE Ecircumflexbelow;1E18 Ecircumflexdotbelow;1EC6 Ecircumflexgrave;1EC0 Ecircumflexhookabove;1EC2 Ecircumflexsmall;F7EA Ecircumflextilde;1EC4 Ecyrillic;0404 Edblgrave;0204 Edieresis;00CB Edieresissmall;F7EB Edot;0116 Edotaccent;0116 Edotbelow;1EB8 Efcyrillic;0424 Egrave;00C8 Egravesmall;F7E8 Eharmenian;0537 Ehookabove;1EBA Eightroman;2167 Einvertedbreve;0206 Eiotifiedcyrillic;0464 Elcyrillic;041B Elevenroman;216A Emacron;0112 Emacronacute;1E16 Emacrongrave;1E14 Emcyrillic;041C Emonospace;FF25 Encyrillic;041D Endescendercyrillic;04A2 Eng;014A Enghecyrillic;04A4 Enhookcyrillic;04C7 Eogonek;0118 Eopen;0190 Epsilon;0395 Epsilontonos;0388 Ercyrillic;0420 Ereversed;018E Ereversedcyrillic;042D Escyrillic;0421 Esdescendercyrillic;04AA Esh;01A9 Esmall;F765 Eta;0397 Etarmenian;0538 Etatonos;0389 Eth;00D0 Ethsmall;F7F0 Etilde;1EBC Etildebelow;1E1A Euro;20AC Ezh;01B7 Ezhcaron;01EE Ezhreversed;01B8 F;0046 Fcircle;24BB Fdotaccent;1E1E Feharmenian;0556 Feicoptic;03E4 Fhook;0191 Fitacyrillic;0472 Fiveroman;2164 Fmonospace;FF26 Fourroman;2163 Fsmall;F766 G;0047 GBsquare;3387 Gacute;01F4 Gamma;0393 Gammaafrican;0194 Gangiacoptic;03EA Gbreve;011E Gcaron;01E6 Gcedilla;0122 Gcircle;24BC Gcircumflex;011C Gcommaaccent;0122 Gdot;0120 Gdotaccent;0120 Gecyrillic;0413 Ghadarmenian;0542 Ghemiddlehookcyrillic;0494 Ghestrokecyrillic;0492 Gheupturncyrillic;0490 Ghook;0193 Gimarmenian;0533 Gjecyrillic;0403 Gmacron;1E20 Gmonospace;FF27 Grave;F6CE Gravesmall;F760 Gsmall;F767 Gsmallhook;029B Gstroke;01E4 H;0048 H18533;25CF H18543;25AA H18551;25AB H22073;25A1 HPsquare;33CB Haabkhasiancyrillic;04A8 Hadescendercyrillic;04B2 Hardsigncyrillic;042A Hbar;0126 Hbrevebelow;1E2A Hcedilla;1E28 Hcircle;24BD Hcircumflex;0124 Hdieresis;1E26 Hdotaccent;1E22 Hdotbelow;1E24 Hmonospace;FF28 Hoarmenian;0540 Horicoptic;03E8 Hsmall;F768 Hungarumlaut;F6CF Hungarumlautsmall;F6F8 Hzsquare;3390 I;0049 IAcyrillic;042F IJ;0132 IUcyrillic;042E Iacute;00CD Iacutesmall;F7ED Ibreve;012C Icaron;01CF Icircle;24BE Icircumflex;00CE Icircumflexsmall;F7EE Icyrillic;0406 Idblgrave;0208 Idieresis;00CF Idieresisacute;1E2E Idieresiscyrillic;04E4 Idieresissmall;F7EF Idot;0130 Idotaccent;0130 Idotbelow;1ECA Iebrevecyrillic;04D6 Iecyrillic;0415 Ifraktur;2111 Igrave;00CC Igravesmall;F7EC Ihookabove;1EC8 Iicyrillic;0418 Iinvertedbreve;020A Iishortcyrillic;0419 Imacron;012A Imacroncyrillic;04E2 Imonospace;FF29 Iniarmenian;053B Iocyrillic;0401 Iogonek;012E Iota;0399 Iotaafrican;0196 Iotadieresis;03AA Iotatonos;038A Ismall;F769 Istroke;0197 Itilde;0128 Itildebelow;1E2C Izhitsacyrillic;0474 Izhitsadblgravecyrillic;0476 J;004A Jaarmenian;0541 Jcircle;24BF Jcircumflex;0134 Jecyrillic;0408 Jheharmenian;054B Jmonospace;FF2A Jsmall;F76A K;004B KBsquare;3385 KKsquare;33CD Kabashkircyrillic;04A0 Kacute;1E30 Kacyrillic;041A Kadescendercyrillic;049A Kahookcyrillic;04C3 Kappa;039A Kastrokecyrillic;049E Kaverticalstrokecyrillic;049C Kcaron;01E8 Kcedilla;0136 Kcircle;24C0 Kcommaaccent;0136 Kdotbelow;1E32 Keharmenian;0554 Kenarmenian;053F Khacyrillic;0425 Kheicoptic;03E6 Khook;0198 Kjecyrillic;040C Klinebelow;1E34 Kmonospace;FF2B Koppacyrillic;0480 Koppagreek;03DE Ksicyrillic;046E Ksmall;F76B L;004C LJ;01C7 LL;F6BF Lacute;0139 Lambda;039B Lcaron;013D Lcedilla;013B Lcircle;24C1 Lcircumflexbelow;1E3C Lcommaaccent;013B Ldot;013F Ldotaccent;013F Ldotbelow;1E36 Ldotbelowmacron;1E38 Liwnarmenian;053C Lj;01C8 Ljecyrillic;0409 Llinebelow;1E3A Lmonospace;FF2C Lslash;0141 Lslashsmall;F6F9 Lsmall;F76C M;004D MBsquare;3386 Macron;F6D0 Macronsmall;F7AF Macute;1E3E Mcircle;24C2 Mdotaccent;1E40 Mdotbelow;1E42 Menarmenian;0544 Mmonospace;FF2D Msmall;F76D Mturned;019C Mu;039C N;004E NJ;01CA Nacute;0143 Ncaron;0147 Ncedilla;0145 Ncircle;24C3 Ncircumflexbelow;1E4A Ncommaaccent;0145 Ndotaccent;1E44 Ndotbelow;1E46 Nhookleft;019D Nineroman;2168 Nj;01CB Njecyrillic;040A Nlinebelow;1E48 Nmonospace;FF2E Nowarmenian;0546 Nsmall;F76E Ntilde;00D1 Ntildesmall;F7F1 Nu;039D O;004F OE;0152 OEsmall;F6FA Oacute;00D3 Oacutesmall;F7F3 Obarredcyrillic;04E8 Obarreddieresiscyrillic;04EA Obreve;014E Ocaron;01D1 Ocenteredtilde;019F Ocircle;24C4 Ocircumflex;00D4 Ocircumflexacute;1ED0 Ocircumflexdotbelow;1ED8 Ocircumflexgrave;1ED2 Ocircumflexhookabove;1ED4 Ocircumflexsmall;F7F4 Ocircumflextilde;1ED6 Ocyrillic;041E Odblacute;0150 Odblgrave;020C Odieresis;00D6 Odieresiscyrillic;04E6 Odieresissmall;F7F6 Odotbelow;1ECC Ogoneksmall;F6FB Ograve;00D2 Ogravesmall;F7F2 Oharmenian;0555 Ohm;2126 Ohookabove;1ECE Ohorn;01A0 Ohornacute;1EDA Ohorndotbelow;1EE2 Ohorngrave;1EDC Ohornhookabove;1EDE Ohorntilde;1EE0 Ohungarumlaut;0150 Oi;01A2 Oinvertedbreve;020E Omacron;014C Omacronacute;1E52 Omacrongrave;1E50 Omega;2126 Omegacyrillic;0460 Omegagreek;03A9 Omegaroundcyrillic;047A Omegatitlocyrillic;047C Omegatonos;038F Omicron;039F Omicrontonos;038C Omonospace;FF2F Oneroman;2160 Oogonek;01EA Oogonekmacron;01EC Oopen;0186 Oslash;00D8 Oslashacute;01FE Oslashsmall;F7F8 Osmall;F76F Ostrokeacute;01FE Otcyrillic;047E Otilde;00D5 Otildeacute;1E4C Otildedieresis;1E4E Otildesmall;F7F5 P;0050 Pacute;1E54 Pcircle;24C5 Pdotaccent;1E56 Pecyrillic;041F Peharmenian;054A Pemiddlehookcyrillic;04A6 Phi;03A6 Phook;01A4 Pi;03A0 Piwrarmenian;0553 Pmonospace;FF30 Psi;03A8 Psicyrillic;0470 Psmall;F770 Q;0051 Qcircle;24C6 Qmonospace;FF31 Qsmall;F771 R;0052 Raarmenian;054C Racute;0154 Rcaron;0158 Rcedilla;0156 Rcircle;24C7 Rcommaaccent;0156 Rdblgrave;0210 Rdotaccent;1E58 Rdotbelow;1E5A Rdotbelowmacron;1E5C Reharmenian;0550 Rfraktur;211C Rho;03A1 Ringsmall;F6FC Rinvertedbreve;0212 Rlinebelow;1E5E Rmonospace;FF32 Rsmall;F772 Rsmallinverted;0281 Rsmallinvertedsuperior;02B6 S;0053 SF010000;250C SF020000;2514 SF030000;2510 SF040000;2518 SF050000;253C SF060000;252C SF070000;2534 SF080000;251C SF090000;2524 SF100000;2500 SF110000;2502 SF190000;2561 SF200000;2562 SF210000;2556 SF220000;2555 SF230000;2563 SF240000;2551 SF250000;2557 SF260000;255D SF270000;255C SF280000;255B SF360000;255E SF370000;255F SF380000;255A SF390000;2554 SF400000;2569 SF410000;2566 SF420000;2560 SF430000;2550 SF440000;256C SF450000;2567 SF460000;2568 SF470000;2564 SF480000;2565 SF490000;2559 SF500000;2558 SF510000;2552 SF520000;2553 SF530000;256B SF540000;256A Sacute;015A Sacutedotaccent;1E64 Sampigreek;03E0 Scaron;0160 Scarondotaccent;1E66 Scaronsmall;F6FD Scedilla;015E Schwa;018F Schwacyrillic;04D8 Schwadieresiscyrillic;04DA Scircle;24C8 Scircumflex;015C Scommaaccent;0218 Sdotaccent;1E60 Sdotbelow;1E62 Sdotbelowdotaccent;1E68 Seharmenian;054D Sevenroman;2166 Shaarmenian;0547 Shacyrillic;0428 Shchacyrillic;0429 Sheicoptic;03E2 Shhacyrillic;04BA Shimacoptic;03EC Sigma;03A3 Sixroman;2165 Smonospace;FF33 Softsigncyrillic;042C Ssmall;F773 Stigmagreek;03DA T;0054 Tau;03A4 Tbar;0166 Tcaron;0164 Tcedilla;0162 Tcircle;24C9 Tcircumflexbelow;1E70 Tcommaaccent;0162 Tdotaccent;1E6A Tdotbelow;1E6C Tecyrillic;0422 Tedescendercyrillic;04AC Tenroman;2169 Tetsecyrillic;04B4 Theta;0398 Thook;01AC Thorn;00DE Thornsmall;F7FE Threeroman;2162 Tildesmall;F6FE Tiwnarmenian;054F Tlinebelow;1E6E Tmonospace;FF34 Toarmenian;0539 Tonefive;01BC Tonesix;0184 Tonetwo;01A7 Tretroflexhook;01AE Tsecyrillic;0426 Tshecyrillic;040B Tsmall;F774 Twelveroman;216B Tworoman;2161 U;0055 Uacute;00DA Uacutesmall;F7FA Ubreve;016C Ucaron;01D3 Ucircle;24CA Ucircumflex;00DB Ucircumflexbelow;1E76 Ucircumflexsmall;F7FB Ucyrillic;0423 Udblacute;0170 Udblgrave;0214 Udieresis;00DC Udieresisacute;01D7 Udieresisbelow;1E72 Udieresiscaron;01D9 Udieresiscyrillic;04F0 Udieresisgrave;01DB Udieresismacron;01D5 Udieresissmall;F7FC Udotbelow;1EE4 Ugrave;00D9 Ugravesmall;F7F9 Uhookabove;1EE6 Uhorn;01AF Uhornacute;1EE8 Uhorndotbelow;1EF0 Uhorngrave;1EEA Uhornhookabove;1EEC Uhorntilde;1EEE Uhungarumlaut;0170 Uhungarumlautcyrillic;04F2 Uinvertedbreve;0216 Ukcyrillic;0478 Umacron;016A Umacroncyrillic;04EE Umacrondieresis;1E7A Umonospace;FF35 Uogonek;0172 Upsilon;03A5 Upsilon1;03D2 Upsilonacutehooksymbolgreek;03D3 Upsilonafrican;01B1 Upsilondieresis;03AB Upsilondieresishooksymbolgreek;03D4 Upsilonhooksymbol;03D2 Upsilontonos;038E Uring;016E Ushortcyrillic;040E Usmall;F775 Ustraightcyrillic;04AE Ustraightstrokecyrillic;04B0 Utilde;0168 Utildeacute;1E78 Utildebelow;1E74 V;0056 Vcircle;24CB Vdotbelow;1E7E Vecyrillic;0412 Vewarmenian;054E Vhook;01B2 Vmonospace;FF36 Voarmenian;0548 Vsmall;F776 Vtilde;1E7C W;0057 Wacute;1E82 Wcircle;24CC Wcircumflex;0174 Wdieresis;1E84 Wdotaccent;1E86 Wdotbelow;1E88 Wgrave;1E80 Wmonospace;FF37 Wsmall;F777 X;0058 Xcircle;24CD Xdieresis;1E8C Xdotaccent;1E8A Xeharmenian;053D Xi;039E Xmonospace;FF38 Xsmall;F778 Y;0059 Yacute;00DD Yacutesmall;F7FD Yatcyrillic;0462 Ycircle;24CE Ycircumflex;0176 Ydieresis;0178 Ydieresissmall;F7FF Ydotaccent;1E8E Ydotbelow;1EF4 Yericyrillic;042B Yerudieresiscyrillic;04F8 Ygrave;1EF2 Yhook;01B3 Yhookabove;1EF6 Yiarmenian;0545 Yicyrillic;0407 Yiwnarmenian;0552 Ymonospace;FF39 Ysmall;F779 Ytilde;1EF8 Yusbigcyrillic;046A Yusbigiotifiedcyrillic;046C Yuslittlecyrillic;0466 Yuslittleiotifiedcyrillic;0468 Z;005A Zaarmenian;0536 Zacute;0179 Zcaron;017D Zcaronsmall;F6FF Zcircle;24CF Zcircumflex;1E90 Zdot;017B Zdotaccent;017B Zdotbelow;1E92 Zecyrillic;0417 Zedescendercyrillic;0498 Zedieresiscyrillic;04DE Zeta;0396 Zhearmenian;053A Zhebrevecyrillic;04C1 Zhecyrillic;0416 Zhedescendercyrillic;0496 Zhedieresiscyrillic;04DC Zlinebelow;1E94 Zmonospace;FF3A Zsmall;F77A Zstroke;01B5 a;0061 aabengali;0986 aacute;00E1 aadeva;0906 aagujarati;0A86 aagurmukhi;0A06 aamatragurmukhi;0A3E aarusquare;3303 aavowelsignbengali;09BE aavowelsigndeva;093E aavowelsigngujarati;0ABE abbreviationmarkarmenian;055F abbreviationsigndeva;0970 abengali;0985 abopomofo;311A abreve;0103 abreveacute;1EAF abrevecyrillic;04D1 abrevedotbelow;1EB7 abrevegrave;1EB1 abrevehookabove;1EB3 abrevetilde;1EB5 acaron;01CE acircle;24D0 acircumflex;00E2 acircumflexacute;1EA5 acircumflexdotbelow;1EAD acircumflexgrave;1EA7 acircumflexhookabove;1EA9 acircumflextilde;1EAB acute;00B4 acutebelowcmb;0317 acutecmb;0301 acutecomb;0301 acutedeva;0954 acutelowmod;02CF acutetonecmb;0341 acyrillic;0430 adblgrave;0201 addakgurmukhi;0A71 adeva;0905 adieresis;00E4 adieresiscyrillic;04D3 adieresismacron;01DF adotbelow;1EA1 adotmacron;01E1 ae;00E6 aeacute;01FD aekorean;3150 aemacron;01E3 afii00208;2015 afii08941;20A4 afii10017;0410 afii10018;0411 afii10019;0412 afii10020;0413 afii10021;0414 afii10022;0415 afii10023;0401 afii10024;0416 afii10025;0417 afii10026;0418 afii10027;0419 afii10028;041A afii10029;041B afii10030;041C afii10031;041D afii10032;041E afii10033;041F afii10034;0420 afii10035;0421 afii10036;0422 afii10037;0423 afii10038;0424 afii10039;0425 afii10040;0426 afii10041;0427 afii10042;0428 afii10043;0429 afii10044;042A afii10045;042B afii10046;042C afii10047;042D afii10048;042E afii10049;042F afii10050;0490 afii10051;0402 afii10052;0403 afii10053;0404 afii10054;0405 afii10055;0406 afii10056;0407 afii10057;0408 afii10058;0409 afii10059;040A afii10060;040B afii10061;040C afii10062;040E afii10063;F6C4 afii10064;F6C5 afii10065;0430 afii10066;0431 afii10067;0432 afii10068;0433 afii10069;0434 afii10070;0435 afii10071;0451 afii10072;0436 afii10073;0437 afii10074;0438 afii10075;0439 afii10076;043A afii10077;043B afii10078;043C afii10079;043D afii10080;043E afii10081;043F afii10082;0440 afii10083;0441 afii10084;0442 afii10085;0443 afii10086;0444 afii10087;0445 afii10088;0446 afii10089;0447 afii10090;0448 afii10091;0449 afii10092;044A afii10093;044B afii10094;044C afii10095;044D afii10096;044E afii10097;044F afii10098;0491 afii10099;0452 afii10100;0453 afii10101;0454 afii10102;0455 afii10103;0456 afii10104;0457 afii10105;0458 afii10106;0459 afii10107;045A afii10108;045B afii10109;045C afii10110;045E afii10145;040F afii10146;0462 afii10147;0472 afii10148;0474 afii10192;F6C6 afii10193;045F afii10194;0463 afii10195;0473 afii10196;0475 afii10831;F6C7 afii10832;F6C8 afii10846;04D9 afii299;200E afii300;200F afii301;200D afii57381;066A afii57388;060C afii57392;0660 afii57393;0661 afii57394;0662 afii57395;0663 afii57396;0664 afii57397;0665 afii57398;0666 afii57399;0667 afii57400;0668 afii57401;0669 afii57403;061B afii57407;061F afii57409;0621 afii57410;0622 afii57411;0623 afii57412;0624 afii57413;0625 afii57414;0626 afii57415;0627 afii57416;0628 afii57417;0629 afii57418;062A afii57419;062B afii57420;062C afii57421;062D afii57422;062E afii57423;062F afii57424;0630 afii57425;0631 afii57426;0632 afii57427;0633 afii57428;0634 afii57429;0635 afii57430;0636 afii57431;0637 afii57432;0638 afii57433;0639 afii57434;063A afii57440;0640 afii57441;0641 afii57442;0642 afii57443;0643 afii57444;0644 afii57445;0645 afii57446;0646 afii57448;0648 afii57449;0649 afii57450;064A afii57451;064B afii57452;064C afii57453;064D afii57454;064E afii57455;064F afii57456;0650 afii57457;0651 afii57458;0652 afii57470;0647 afii57505;06A4 afii57506;067E afii57507;0686 afii57508;0698 afii57509;06AF afii57511;0679 afii57512;0688 afii57513;0691 afii57514;06BA afii57519;06D2 afii57534;06D5 afii57636;20AA afii57645;05BE afii57658;05C3 afii57664;05D0 afii57665;05D1 afii57666;05D2 afii57667;05D3 afii57668;05D4 afii57669;05D5 afii57670;05D6 afii57671;05D7 afii57672;05D8 afii57673;05D9 afii57674;05DA afii57675;05DB afii57676;05DC afii57677;05DD afii57678;05DE afii57679;05DF afii57680;05E0 afii57681;05E1 afii57682;05E2 afii57683;05E3 afii57684;05E4 afii57685;05E5 afii57686;05E6 afii57687;05E7 afii57688;05E8 afii57689;05E9 afii57690;05EA afii57694;FB2A afii57695;FB2B afii57700;FB4B afii57705;FB1F afii57716;05F0 afii57717;05F1 afii57718;05F2 afii57723;FB35 afii57793;05B4 afii57794;05B5 afii57795;05B6 afii57796;05BB afii57797;05B8 afii57798;05B7 afii57799;05B0 afii57800;05B2 afii57801;05B1 afii57802;05B3 afii57803;05C2 afii57804;05C1 afii57806;05B9 afii57807;05BC afii57839;05BD afii57841;05BF afii57842;05C0 afii57929;02BC afii61248;2105 afii61289;2113 afii61352;2116 afii61573;202C afii61574;202D afii61575;202E afii61664;200C afii63167;066D afii64937;02BD agrave;00E0 agujarati;0A85 agurmukhi;0A05 ahiragana;3042 ahookabove;1EA3 aibengali;0990 aibopomofo;311E aideva;0910 aiecyrillic;04D5 aigujarati;0A90 aigurmukhi;0A10 aimatragurmukhi;0A48 ainarabic;0639 ainfinalarabic;FECA aininitialarabic;FECB ainmedialarabic;FECC ainvertedbreve;0203 aivowelsignbengali;09C8 aivowelsigndeva;0948 aivowelsigngujarati;0AC8 akatakana;30A2 akatakanahalfwidth;FF71 akorean;314F alef;05D0 alefarabic;0627 alefdageshhebrew;FB30 aleffinalarabic;FE8E alefhamzaabovearabic;0623 alefhamzaabovefinalarabic;FE84 alefhamzabelowarabic;0625 alefhamzabelowfinalarabic;FE88 alefhebrew;05D0 aleflamedhebrew;FB4F alefmaddaabovearabic;0622 alefmaddaabovefinalarabic;FE82 alefmaksuraarabic;0649 alefmaksurafinalarabic;FEF0 alefmaksurainitialarabic;FEF3 alefmaksuramedialarabic;FEF4 alefpatahhebrew;FB2E alefqamatshebrew;FB2F aleph;2135 allequal;224C alpha;03B1 alphatonos;03AC amacron;0101 amonospace;FF41 ampersand;0026 ampersandmonospace;FF06 ampersandsmall;F726 amsquare;33C2 anbopomofo;3122 angbopomofo;3124 angkhankhuthai;0E5A angle;2220 anglebracketleft;3008 anglebracketleftvertical;FE3F anglebracketright;3009 anglebracketrightvertical;FE40 angleleft;2329 angleright;232A angstrom;212B anoteleia;0387 anudattadeva;0952 anusvarabengali;0982 anusvaradeva;0902 anusvaragujarati;0A82 aogonek;0105 apaatosquare;3300 aparen;249C apostrophearmenian;055A apostrophemod;02BC apple;F8FF approaches;2250 approxequal;2248 approxequalorimage;2252 approximatelyequal;2245 araeaekorean;318E araeakorean;318D arc;2312 arighthalfring;1E9A aring;00E5 aringacute;01FB aringbelow;1E01 arrowboth;2194 arrowdashdown;21E3 arrowdashleft;21E0 arrowdashright;21E2 arrowdashup;21E1 arrowdblboth;21D4 arrowdbldown;21D3 arrowdblleft;21D0 arrowdblright;21D2 arrowdblup;21D1 arrowdown;2193 arrowdownleft;2199 arrowdownright;2198 arrowdownwhite;21E9 arrowheaddownmod;02C5 arrowheadleftmod;02C2 arrowheadrightmod;02C3 arrowheadupmod;02C4 arrowhorizex;F8E7 arrowleft;2190 arrowleftdbl;21D0 arrowleftdblstroke;21CD arrowleftoverright;21C6 arrowleftwhite;21E6 arrowright;2192 arrowrightdblstroke;21CF arrowrightheavy;279E arrowrightoverleft;21C4 arrowrightwhite;21E8 arrowtableft;21E4 arrowtabright;21E5 arrowup;2191 arrowupdn;2195 arrowupdnbse;21A8 arrowupdownbase;21A8 arrowupleft;2196 arrowupleftofdown;21C5 arrowupright;2197 arrowupwhite;21E7 arrowvertex;F8E6 asciicircum;005E asciicircummonospace;FF3E asciitilde;007E asciitildemonospace;FF5E ascript;0251 ascriptturned;0252 asmallhiragana;3041 asmallkatakana;30A1 asmallkatakanahalfwidth;FF67 asterisk;002A asteriskaltonearabic;066D asteriskarabic;066D asteriskmath;2217 asteriskmonospace;FF0A asterisksmall;FE61 asterism;2042 asuperior;F6E9 asymptoticallyequal;2243 at;0040 atilde;00E3 atmonospace;FF20 atsmall;FE6B aturned;0250 aubengali;0994 aubopomofo;3120 audeva;0914 augujarati;0A94 augurmukhi;0A14 aulengthmarkbengali;09D7 aumatragurmukhi;0A4C auvowelsignbengali;09CC auvowelsigndeva;094C auvowelsigngujarati;0ACC avagrahadeva;093D aybarmenian;0561 ayin;05E2 ayinaltonehebrew;FB20 ayinhebrew;05E2 b;0062 babengali;09AC backslash;005C backslashmonospace;FF3C badeva;092C bagujarati;0AAC bagurmukhi;0A2C bahiragana;3070 bahtthai;0E3F bakatakana;30D0 bar;007C barmonospace;FF5C bbopomofo;3105 bcircle;24D1 bdotaccent;1E03 bdotbelow;1E05 beamedsixteenthnotes;266C because;2235 becyrillic;0431 beharabic;0628 behfinalarabic;FE90 behinitialarabic;FE91 behiragana;3079 behmedialarabic;FE92 behmeeminitialarabic;FC9F behmeemisolatedarabic;FC08 behnoonfinalarabic;FC6D bekatakana;30D9 benarmenian;0562 bet;05D1 beta;03B2 betasymbolgreek;03D0 betdagesh;FB31 betdageshhebrew;FB31 bethebrew;05D1 betrafehebrew;FB4C bhabengali;09AD bhadeva;092D bhagujarati;0AAD bhagurmukhi;0A2D bhook;0253 bihiragana;3073 bikatakana;30D3 bilabialclick;0298 bindigurmukhi;0A02 birusquare;3331 blackcircle;25CF blackdiamond;25C6 blackdownpointingtriangle;25BC blackleftpointingpointer;25C4 blackleftpointingtriangle;25C0 blacklenticularbracketleft;3010 blacklenticularbracketleftvertical;FE3B blacklenticularbracketright;3011 blacklenticularbracketrightvertical;FE3C blacklowerlefttriangle;25E3 blacklowerrighttriangle;25E2 blackrectangle;25AC blackrightpointingpointer;25BA blackrightpointingtriangle;25B6 blacksmallsquare;25AA blacksmilingface;263B blacksquare;25A0 blackstar;2605 blackupperlefttriangle;25E4 blackupperrighttriangle;25E5 blackuppointingsmalltriangle;25B4 blackuppointingtriangle;25B2 blank;2423 blinebelow;1E07 block;2588 bmonospace;FF42 bobaimaithai;0E1A bohiragana;307C bokatakana;30DC bparen;249D bqsquare;33C3 braceex;F8F4 braceleft;007B braceleftbt;F8F3 braceleftmid;F8F2 braceleftmonospace;FF5B braceleftsmall;FE5B bracelefttp;F8F1 braceleftvertical;FE37 braceright;007D bracerightbt;F8FE bracerightmid;F8FD bracerightmonospace;FF5D bracerightsmall;FE5C bracerighttp;F8FC bracerightvertical;FE38 bracketleft;005B bracketleftbt;F8F0 bracketleftex;F8EF bracketleftmonospace;FF3B bracketlefttp;F8EE bracketright;005D bracketrightbt;F8FB bracketrightex;F8FA bracketrightmonospace;FF3D bracketrighttp;F8F9 breve;02D8 brevebelowcmb;032E brevecmb;0306 breveinvertedbelowcmb;032F breveinvertedcmb;0311 breveinverteddoublecmb;0361 bridgebelowcmb;032A bridgeinvertedbelowcmb;033A brokenbar;00A6 bstroke;0180 bsuperior;F6EA btopbar;0183 buhiragana;3076 bukatakana;30D6 bullet;2022 bulletinverse;25D8 bulletoperator;2219 bullseye;25CE c;0063 caarmenian;056E cabengali;099A cacute;0107 cadeva;091A cagujarati;0A9A cagurmukhi;0A1A calsquare;3388 candrabindubengali;0981 candrabinducmb;0310 candrabindudeva;0901 candrabindugujarati;0A81 capslock;21EA careof;2105 caron;02C7 caronbelowcmb;032C caroncmb;030C carriagereturn;21B5 cbopomofo;3118 ccaron;010D ccedilla;00E7 ccedillaacute;1E09 ccircle;24D2 ccircumflex;0109 ccurl;0255 cdot;010B cdotaccent;010B cdsquare;33C5 cedilla;00B8 cedillacmb;0327 cent;00A2 centigrade;2103 centinferior;F6DF centmonospace;FFE0 centoldstyle;F7A2 centsuperior;F6E0 chaarmenian;0579 chabengali;099B chadeva;091B chagujarati;0A9B chagurmukhi;0A1B chbopomofo;3114 cheabkhasiancyrillic;04BD checkmark;2713 checyrillic;0447 chedescenderabkhasiancyrillic;04BF chedescendercyrillic;04B7 chedieresiscyrillic;04F5 cheharmenian;0573 chekhakassiancyrillic;04CC cheverticalstrokecyrillic;04B9 chi;03C7 chieuchacirclekorean;3277 chieuchaparenkorean;3217 chieuchcirclekorean;3269 chieuchkorean;314A chieuchparenkorean;3209 chochangthai;0E0A chochanthai;0E08 chochingthai;0E09 chochoethai;0E0C chook;0188 cieucacirclekorean;3276 cieucaparenkorean;3216 cieuccirclekorean;3268 cieuckorean;3148 cieucparenkorean;3208 cieucuparenkorean;321C circle;25CB circlemultiply;2297 circleot;2299 circleplus;2295 circlepostalmark;3036 circlewithlefthalfblack;25D0 circlewithrighthalfblack;25D1 circumflex;02C6 circumflexbelowcmb;032D circumflexcmb;0302 clear;2327 clickalveolar;01C2 clickdental;01C0 clicklateral;01C1 clickretroflex;01C3 club;2663 clubsuitblack;2663 clubsuitwhite;2667 cmcubedsquare;33A4 cmonospace;FF43 cmsquaredsquare;33A0 coarmenian;0581 colon;003A colonmonetary;20A1 colonmonospace;FF1A colonsign;20A1 colonsmall;FE55 colontriangularhalfmod;02D1 colontriangularmod;02D0 comma;002C commaabovecmb;0313 commaaboverightcmb;0315 commaaccent;F6C3 commaarabic;060C commaarmenian;055D commainferior;F6E1 commamonospace;FF0C commareversedabovecmb;0314 commareversedmod;02BD commasmall;FE50 commasuperior;F6E2 commaturnedabovecmb;0312 commaturnedmod;02BB compass;263C congruent;2245 contourintegral;222E control;2303 controlACK;0006 controlBEL;0007 controlBS;0008 controlCAN;0018 controlCR;000D controlDC1;0011 controlDC2;0012 controlDC3;0013 controlDC4;0014 controlDEL;007F controlDLE;0010 controlEM;0019 controlENQ;0005 controlEOT;0004 controlESC;001B controlETB;0017 controlETX;0003 controlFF;000C controlFS;001C controlGS;001D controlHT;0009 controlLF;000A controlNAK;0015 controlRS;001E controlSI;000F controlSO;000E controlSOT;0002 controlSTX;0001 controlSUB;001A controlSYN;0016 controlUS;001F controlVT;000B copyright;00A9 copyrightsans;F8E9 copyrightserif;F6D9 cornerbracketleft;300C cornerbracketlefthalfwidth;FF62 cornerbracketleftvertical;FE41 cornerbracketright;300D cornerbracketrighthalfwidth;FF63 cornerbracketrightvertical;FE42 corporationsquare;337F cosquare;33C7 coverkgsquare;33C6 cparen;249E cruzeiro;20A2 cstretched;0297 curlyand;22CF curlyor;22CE currency;00A4 cyrBreve;F6D1 cyrFlex;F6D2 cyrbreve;F6D4 cyrflex;F6D5 d;0064 daarmenian;0564 dabengali;09A6 dadarabic;0636 dadeva;0926 dadfinalarabic;FEBE dadinitialarabic;FEBF dadmedialarabic;FEC0 dagesh;05BC dageshhebrew;05BC dagger;2020 daggerdbl;2021 dagujarati;0AA6 dagurmukhi;0A26 dahiragana;3060 dakatakana;30C0 dalarabic;062F dalet;05D3 daletdagesh;FB33 daletdageshhebrew;FB33 dalethatafpatah;05D3 05B2 dalethatafpatahhebrew;05D3 05B2 dalethatafsegol;05D3 05B1 dalethatafsegolhebrew;05D3 05B1 dalethebrew;05D3 dalethiriq;05D3 05B4 dalethiriqhebrew;05D3 05B4 daletholam;05D3 05B9 daletholamhebrew;05D3 05B9 daletpatah;05D3 05B7 daletpatahhebrew;05D3 05B7 daletqamats;05D3 05B8 daletqamatshebrew;05D3 05B8 daletqubuts;05D3 05BB daletqubutshebrew;05D3 05BB daletsegol;05D3 05B6 daletsegolhebrew;05D3 05B6 daletsheva;05D3 05B0 daletshevahebrew;05D3 05B0 dalettsere;05D3 05B5 dalettserehebrew;05D3 05B5 dalfinalarabic;FEAA dammaarabic;064F dammalowarabic;064F dammatanaltonearabic;064C dammatanarabic;064C danda;0964 dargahebrew;05A7 dargalefthebrew;05A7 dasiapneumatacyrilliccmb;0485 dblGrave;F6D3 dblanglebracketleft;300A dblanglebracketleftvertical;FE3D dblanglebracketright;300B dblanglebracketrightvertical;FE3E dblarchinvertedbelowcmb;032B dblarrowleft;21D4 dblarrowright;21D2 dbldanda;0965 dblgrave;F6D6 dblgravecmb;030F dblintegral;222C dbllowline;2017 dbllowlinecmb;0333 dbloverlinecmb;033F dblprimemod;02BA dblverticalbar;2016 dblverticallineabovecmb;030E dbopomofo;3109 dbsquare;33C8 dcaron;010F dcedilla;1E11 dcircle;24D3 dcircumflexbelow;1E13 dcroat;0111 ddabengali;09A1 ddadeva;0921 ddagujarati;0AA1 ddagurmukhi;0A21 ddalarabic;0688 ddalfinalarabic;FB89 dddhadeva;095C ddhabengali;09A2 ddhadeva;0922 ddhagujarati;0AA2 ddhagurmukhi;0A22 ddotaccent;1E0B ddotbelow;1E0D decimalseparatorarabic;066B decimalseparatorpersian;066B decyrillic;0434 degree;00B0 dehihebrew;05AD dehiragana;3067 deicoptic;03EF dekatakana;30C7 deleteleft;232B deleteright;2326 delta;03B4 deltaturned;018D denominatorminusonenumeratorbengali;09F8 dezh;02A4 dhabengali;09A7 dhadeva;0927 dhagujarati;0AA7 dhagurmukhi;0A27 dhook;0257 dialytikatonos;0385 dialytikatonoscmb;0344 diamond;2666 diamondsuitwhite;2662 dieresis;00A8 dieresisacute;F6D7 dieresisbelowcmb;0324 dieresiscmb;0308 dieresisgrave;F6D8 dieresistonos;0385 dihiragana;3062 dikatakana;30C2 dittomark;3003 divide;00F7 divides;2223 divisionslash;2215 djecyrillic;0452 dkshade;2593 dlinebelow;1E0F dlsquare;3397 dmacron;0111 dmonospace;FF44 dnblock;2584 dochadathai;0E0E dodekthai;0E14 dohiragana;3069 dokatakana;30C9 dollar;0024 dollarinferior;F6E3 dollarmonospace;FF04 dollaroldstyle;F724 dollarsmall;FE69 dollarsuperior;F6E4 dong;20AB dorusquare;3326 dotaccent;02D9 dotaccentcmb;0307 dotbelowcmb;0323 dotbelowcomb;0323 dotkatakana;30FB dotlessi;0131 dotlessj;F6BE dotlessjstrokehook;0284 dotmath;22C5 dottedcircle;25CC doubleyodpatah;FB1F doubleyodpatahhebrew;FB1F downtackbelowcmb;031E downtackmod;02D5 dparen;249F dsuperior;F6EB dtail;0256 dtopbar;018C duhiragana;3065 dukatakana;30C5 dz;01F3 dzaltone;02A3 dzcaron;01C6 dzcurl;02A5 dzeabkhasiancyrillic;04E1 dzecyrillic;0455 dzhecyrillic;045F e;0065 eacute;00E9 earth;2641 ebengali;098F ebopomofo;311C ebreve;0115 ecandradeva;090D ecandragujarati;0A8D ecandravowelsigndeva;0945 ecandravowelsigngujarati;0AC5 ecaron;011B ecedillabreve;1E1D echarmenian;0565 echyiwnarmenian;0587 ecircle;24D4 ecircumflex;00EA ecircumflexacute;1EBF ecircumflexbelow;1E19 ecircumflexdotbelow;1EC7 ecircumflexgrave;1EC1 ecircumflexhookabove;1EC3 ecircumflextilde;1EC5 ecyrillic;0454 edblgrave;0205 edeva;090F edieresis;00EB edot;0117 edotaccent;0117 edotbelow;1EB9 eegurmukhi;0A0F eematragurmukhi;0A47 efcyrillic;0444 egrave;00E8 egujarati;0A8F eharmenian;0567 ehbopomofo;311D ehiragana;3048 ehookabove;1EBB eibopomofo;311F eight;0038 eightarabic;0668 eightbengali;09EE eightcircle;2467 eightcircleinversesansserif;2791 eightdeva;096E eighteencircle;2471 eighteenparen;2485 eighteenperiod;2499 eightgujarati;0AEE eightgurmukhi;0A6E eighthackarabic;0668 eighthangzhou;3028 eighthnotebeamed;266B eightideographicparen;3227 eightinferior;2088 eightmonospace;FF18 eightoldstyle;F738 eightparen;247B eightperiod;248F eightpersian;06F8 eightroman;2177 eightsuperior;2078 eightthai;0E58 einvertedbreve;0207 eiotifiedcyrillic;0465 ekatakana;30A8 ekatakanahalfwidth;FF74 ekonkargurmukhi;0A74 ekorean;3154 elcyrillic;043B element;2208 elevencircle;246A elevenparen;247E elevenperiod;2492 elevenroman;217A ellipsis;2026 ellipsisvertical;22EE emacron;0113 emacronacute;1E17 emacrongrave;1E15 emcyrillic;043C emdash;2014 emdashvertical;FE31 emonospace;FF45 emphasismarkarmenian;055B emptyset;2205 enbopomofo;3123 encyrillic;043D endash;2013 endashvertical;FE32 endescendercyrillic;04A3 eng;014B engbopomofo;3125 enghecyrillic;04A5 enhookcyrillic;04C8 enspace;2002 eogonek;0119 eokorean;3153 eopen;025B eopenclosed;029A eopenreversed;025C eopenreversedclosed;025E eopenreversedhook;025D eparen;24A0 epsilon;03B5 epsilontonos;03AD equal;003D equalmonospace;FF1D equalsmall;FE66 equalsuperior;207C equivalence;2261 erbopomofo;3126 ercyrillic;0440 ereversed;0258 ereversedcyrillic;044D escyrillic;0441 esdescendercyrillic;04AB esh;0283 eshcurl;0286 eshortdeva;090E eshortvowelsigndeva;0946 eshreversedloop;01AA eshsquatreversed;0285 esmallhiragana;3047 esmallkatakana;30A7 esmallkatakanahalfwidth;FF6A estimated;212E esuperior;F6EC eta;03B7 etarmenian;0568 etatonos;03AE eth;00F0 etilde;1EBD etildebelow;1E1B etnahtafoukhhebrew;0591 etnahtafoukhlefthebrew;0591 etnahtahebrew;0591 etnahtalefthebrew;0591 eturned;01DD eukorean;3161 euro;20AC evowelsignbengali;09C7 evowelsigndeva;0947 evowelsigngujarati;0AC7 exclam;0021 exclamarmenian;055C exclamdbl;203C exclamdown;00A1 exclamdownsmall;F7A1 exclammonospace;FF01 exclamsmall;F721 existential;2203 ezh;0292 ezhcaron;01EF ezhcurl;0293 ezhreversed;01B9 ezhtail;01BA f;0066 fadeva;095E fagurmukhi;0A5E fahrenheit;2109 fathaarabic;064E fathalowarabic;064E fathatanarabic;064B fbopomofo;3108 fcircle;24D5 fdotaccent;1E1F feharabic;0641 feharmenian;0586 fehfinalarabic;FED2 fehinitialarabic;FED3 fehmedialarabic;FED4 feicoptic;03E5 female;2640 ff;FB00 ffi;FB03 ffl;FB04 fi;FB01 fifteencircle;246E fifteenparen;2482 fifteenperiod;2496 figuredash;2012 filledbox;25A0 filledrect;25AC finalkaf;05DA finalkafdagesh;FB3A finalkafdageshhebrew;FB3A finalkafhebrew;05DA finalkafqamats;05DA 05B8 finalkafqamatshebrew;05DA 05B8 finalkafsheva;05DA 05B0 finalkafshevahebrew;05DA 05B0 finalmem;05DD finalmemhebrew;05DD finalnun;05DF finalnunhebrew;05DF finalpe;05E3 finalpehebrew;05E3 finaltsadi;05E5 finaltsadihebrew;05E5 firsttonechinese;02C9 fisheye;25C9 fitacyrillic;0473 five;0035 fivearabic;0665 fivebengali;09EB fivecircle;2464 fivecircleinversesansserif;278E fivedeva;096B fiveeighths;215D fivegujarati;0AEB fivegurmukhi;0A6B fivehackarabic;0665 fivehangzhou;3025 fiveideographicparen;3224 fiveinferior;2085 fivemonospace;FF15 fiveoldstyle;F735 fiveparen;2478 fiveperiod;248C fivepersian;06F5 fiveroman;2174 fivesuperior;2075 fivethai;0E55 fl;FB02 florin;0192 fmonospace;FF46 fmsquare;3399 fofanthai;0E1F fofathai;0E1D fongmanthai;0E4F forall;2200 four;0034 fourarabic;0664 fourbengali;09EA fourcircle;2463 fourcircleinversesansserif;278D fourdeva;096A fourgujarati;0AEA fourgurmukhi;0A6A fourhackarabic;0664 fourhangzhou;3024 fourideographicparen;3223 fourinferior;2084 fourmonospace;FF14 fournumeratorbengali;09F7 fouroldstyle;F734 fourparen;2477 fourperiod;248B fourpersian;06F4 fourroman;2173 foursuperior;2074 fourteencircle;246D fourteenparen;2481 fourteenperiod;2495 fourthai;0E54 fourthtonechinese;02CB fparen;24A1 fraction;2044 franc;20A3 g;0067 gabengali;0997 gacute;01F5 gadeva;0917 gafarabic;06AF gaffinalarabic;FB93 gafinitialarabic;FB94 gafmedialarabic;FB95 gagujarati;0A97 gagurmukhi;0A17 gahiragana;304C gakatakana;30AC gamma;03B3 gammalatinsmall;0263 gammasuperior;02E0 gangiacoptic;03EB gbopomofo;310D gbreve;011F gcaron;01E7 gcedilla;0123 gcircle;24D6 gcircumflex;011D gcommaaccent;0123 gdot;0121 gdotaccent;0121 gecyrillic;0433 gehiragana;3052 gekatakana;30B2 geometricallyequal;2251 gereshaccenthebrew;059C gereshhebrew;05F3 gereshmuqdamhebrew;059D germandbls;00DF gershayimaccenthebrew;059E gershayimhebrew;05F4 getamark;3013 ghabengali;0998 ghadarmenian;0572 ghadeva;0918 ghagujarati;0A98 ghagurmukhi;0A18 ghainarabic;063A ghainfinalarabic;FECE ghaininitialarabic;FECF ghainmedialarabic;FED0 ghemiddlehookcyrillic;0495 ghestrokecyrillic;0493 gheupturncyrillic;0491 ghhadeva;095A ghhagurmukhi;0A5A ghook;0260 ghzsquare;3393 gihiragana;304E gikatakana;30AE gimarmenian;0563 gimel;05D2 gimeldagesh;FB32 gimeldageshhebrew;FB32 gimelhebrew;05D2 gjecyrillic;0453 glottalinvertedstroke;01BE glottalstop;0294 glottalstopinverted;0296 glottalstopmod;02C0 glottalstopreversed;0295 glottalstopreversedmod;02C1 glottalstopreversedsuperior;02E4 glottalstopstroke;02A1 glottalstopstrokereversed;02A2 gmacron;1E21 gmonospace;FF47 gohiragana;3054 gokatakana;30B4 gparen;24A2 gpasquare;33AC gradient;2207 grave;0060 gravebelowcmb;0316 gravecmb;0300 gravecomb;0300 gravedeva;0953 gravelowmod;02CE gravemonospace;FF40 gravetonecmb;0340 greater;003E greaterequal;2265 greaterequalorless;22DB greatermonospace;FF1E greaterorequivalent;2273 greaterorless;2277 greateroverequal;2267 greatersmall;FE65 gscript;0261 gstroke;01E5 guhiragana;3050 guillemotleft;00AB guillemotright;00BB guilsinglleft;2039 guilsinglright;203A gukatakana;30B0 guramusquare;3318 gysquare;33C9 h;0068 haabkhasiancyrillic;04A9 haaltonearabic;06C1 habengali;09B9 hadescendercyrillic;04B3 hadeva;0939 hagujarati;0AB9 hagurmukhi;0A39 haharabic;062D hahfinalarabic;FEA2 hahinitialarabic;FEA3 hahiragana;306F hahmedialarabic;FEA4 haitusquare;332A hakatakana;30CF hakatakanahalfwidth;FF8A halantgurmukhi;0A4D hamzaarabic;0621 hamzadammaarabic;0621 064F hamzadammatanarabic;0621 064C hamzafathaarabic;0621 064E hamzafathatanarabic;0621 064B hamzalowarabic;0621 hamzalowkasraarabic;0621 0650 hamzalowkasratanarabic;0621 064D hamzasukunarabic;0621 0652 hangulfiller;3164 hardsigncyrillic;044A harpoonleftbarbup;21BC harpoonrightbarbup;21C0 hasquare;33CA hatafpatah;05B2 hatafpatah16;05B2 hatafpatah23;05B2 hatafpatah2f;05B2 hatafpatahhebrew;05B2 hatafpatahnarrowhebrew;05B2 hatafpatahquarterhebrew;05B2 hatafpatahwidehebrew;05B2 hatafqamats;05B3 hatafqamats1b;05B3 hatafqamats28;05B3 hatafqamats34;05B3 hatafqamatshebrew;05B3 hatafqamatsnarrowhebrew;05B3 hatafqamatsquarterhebrew;05B3 hatafqamatswidehebrew;05B3 hatafsegol;05B1 hatafsegol17;05B1 hatafsegol24;05B1 hatafsegol30;05B1 hatafsegolhebrew;05B1 hatafsegolnarrowhebrew;05B1 hatafsegolquarterhebrew;05B1 hatafsegolwidehebrew;05B1 hbar;0127 hbopomofo;310F hbrevebelow;1E2B hcedilla;1E29 hcircle;24D7 hcircumflex;0125 hdieresis;1E27 hdotaccent;1E23 hdotbelow;1E25 he;05D4 heart;2665 heartsuitblack;2665 heartsuitwhite;2661 hedagesh;FB34 hedageshhebrew;FB34 hehaltonearabic;06C1 heharabic;0647 hehebrew;05D4 hehfinalaltonearabic;FBA7 hehfinalalttwoarabic;FEEA hehfinalarabic;FEEA hehhamzaabovefinalarabic;FBA5 hehhamzaaboveisolatedarabic;FBA4 hehinitialaltonearabic;FBA8 hehinitialarabic;FEEB hehiragana;3078 hehmedialaltonearabic;FBA9 hehmedialarabic;FEEC heiseierasquare;337B hekatakana;30D8 hekatakanahalfwidth;FF8D hekutaarusquare;3336 henghook;0267 herutusquare;3339 het;05D7 hethebrew;05D7 hhook;0266 hhooksuperior;02B1 hieuhacirclekorean;327B hieuhaparenkorean;321B hieuhcirclekorean;326D hieuhkorean;314E hieuhparenkorean;320D hihiragana;3072 hikatakana;30D2 hikatakanahalfwidth;FF8B hiriq;05B4 hiriq14;05B4 hiriq21;05B4 hiriq2d;05B4 hiriqhebrew;05B4 hiriqnarrowhebrew;05B4 hiriqquarterhebrew;05B4 hiriqwidehebrew;05B4 hlinebelow;1E96 hmonospace;FF48 hoarmenian;0570 hohipthai;0E2B hohiragana;307B hokatakana;30DB hokatakanahalfwidth;FF8E holam;05B9 holam19;05B9 holam26;05B9 holam32;05B9 holamhebrew;05B9 holamnarrowhebrew;05B9 holamquarterhebrew;05B9 holamwidehebrew;05B9 honokhukthai;0E2E hookabovecomb;0309 hookcmb;0309 hookpalatalizedbelowcmb;0321 hookretroflexbelowcmb;0322 hoonsquare;3342 horicoptic;03E9 horizontalbar;2015 horncmb;031B hotsprings;2668 house;2302 hparen;24A3 hsuperior;02B0 hturned;0265 huhiragana;3075 huiitosquare;3333 hukatakana;30D5 hukatakanahalfwidth;FF8C hungarumlaut;02DD hungarumlautcmb;030B hv;0195 hyphen;002D hypheninferior;F6E5 hyphenmonospace;FF0D hyphensmall;FE63 hyphensuperior;F6E6 hyphentwo;2010 i;0069 iacute;00ED iacyrillic;044F ibengali;0987 ibopomofo;3127 ibreve;012D icaron;01D0 icircle;24D8 icircumflex;00EE icyrillic;0456 idblgrave;0209 ideographearthcircle;328F ideographfirecircle;328B ideographicallianceparen;323F ideographiccallparen;323A ideographiccentrecircle;32A5 ideographicclose;3006 ideographiccomma;3001 ideographiccommaleft;FF64 ideographiccongratulationparen;3237 ideographiccorrectcircle;32A3 ideographicearthparen;322F ideographicenterpriseparen;323D ideographicexcellentcircle;329D ideographicfestivalparen;3240 ideographicfinancialcircle;3296 ideographicfinancialparen;3236 ideographicfireparen;322B ideographichaveparen;3232 ideographichighcircle;32A4 ideographiciterationmark;3005 ideographiclaborcircle;3298 ideographiclaborparen;3238 ideographicleftcircle;32A7 ideographiclowcircle;32A6 ideographicmedicinecircle;32A9 ideographicmetalparen;322E ideographicmoonparen;322A ideographicnameparen;3234 ideographicperiod;3002 ideographicprintcircle;329E ideographicreachparen;3243 ideographicrepresentparen;3239 ideographicresourceparen;323E ideographicrightcircle;32A8 ideographicsecretcircle;3299 ideographicselfparen;3242 ideographicsocietyparen;3233 ideographicspace;3000 ideographicspecialparen;3235 ideographicstockparen;3231 ideographicstudyparen;323B ideographicsunparen;3230 ideographicsuperviseparen;323C ideographicwaterparen;322C ideographicwoodparen;322D ideographiczero;3007 ideographmetalcircle;328E ideographmooncircle;328A ideographnamecircle;3294 ideographsuncircle;3290 ideographwatercircle;328C ideographwoodcircle;328D ideva;0907 idieresis;00EF idieresisacute;1E2F idieresiscyrillic;04E5 idotbelow;1ECB iebrevecyrillic;04D7 iecyrillic;0435 ieungacirclekorean;3275 ieungaparenkorean;3215 ieungcirclekorean;3267 ieungkorean;3147 ieungparenkorean;3207 igrave;00EC igujarati;0A87 igurmukhi;0A07 ihiragana;3044 ihookabove;1EC9 iibengali;0988 iicyrillic;0438 iideva;0908 iigujarati;0A88 iigurmukhi;0A08 iimatragurmukhi;0A40 iinvertedbreve;020B iishortcyrillic;0439 iivowelsignbengali;09C0 iivowelsigndeva;0940 iivowelsigngujarati;0AC0 ij;0133 ikatakana;30A4 ikatakanahalfwidth;FF72 ikorean;3163 ilde;02DC iluyhebrew;05AC imacron;012B imacroncyrillic;04E3 imageorapproximatelyequal;2253 imatragurmukhi;0A3F imonospace;FF49 increment;2206 infinity;221E iniarmenian;056B integral;222B integralbottom;2321 integralbt;2321 integralex;F8F5 integraltop;2320 integraltp;2320 intersection;2229 intisquare;3305 invbullet;25D8 invcircle;25D9 invsmileface;263B iocyrillic;0451 iogonek;012F iota;03B9 iotadieresis;03CA iotadieresistonos;0390 iotalatin;0269 iotatonos;03AF iparen;24A4 irigurmukhi;0A72 ismallhiragana;3043 ismallkatakana;30A3 ismallkatakanahalfwidth;FF68 issharbengali;09FA istroke;0268 isuperior;F6ED iterationhiragana;309D iterationkatakana;30FD itilde;0129 itildebelow;1E2D iubopomofo;3129 iucyrillic;044E ivowelsignbengali;09BF ivowelsigndeva;093F ivowelsigngujarati;0ABF izhitsacyrillic;0475 izhitsadblgravecyrillic;0477 j;006A jaarmenian;0571 jabengali;099C jadeva;091C jagujarati;0A9C jagurmukhi;0A1C jbopomofo;3110 jcaron;01F0 jcircle;24D9 jcircumflex;0135 jcrossedtail;029D jdotlessstroke;025F jecyrillic;0458 jeemarabic;062C jeemfinalarabic;FE9E jeeminitialarabic;FE9F jeemmedialarabic;FEA0 jeharabic;0698 jehfinalarabic;FB8B jhabengali;099D jhadeva;091D jhagujarati;0A9D jhagurmukhi;0A1D jheharmenian;057B jis;3004 jmonospace;FF4A jparen;24A5 jsuperior;02B2 k;006B kabashkircyrillic;04A1 kabengali;0995 kacute;1E31 kacyrillic;043A kadescendercyrillic;049B kadeva;0915 kaf;05DB kafarabic;0643 kafdagesh;FB3B kafdageshhebrew;FB3B kaffinalarabic;FEDA kafhebrew;05DB kafinitialarabic;FEDB kafmedialarabic;FEDC kafrafehebrew;FB4D kagujarati;0A95 kagurmukhi;0A15 kahiragana;304B kahookcyrillic;04C4 kakatakana;30AB kakatakanahalfwidth;FF76 kappa;03BA kappasymbolgreek;03F0 kapyeounmieumkorean;3171 kapyeounphieuphkorean;3184 kapyeounpieupkorean;3178 kapyeounssangpieupkorean;3179 karoriisquare;330D kashidaautoarabic;0640 kashidaautonosidebearingarabic;0640 kasmallkatakana;30F5 kasquare;3384 kasraarabic;0650 kasratanarabic;064D kastrokecyrillic;049F katahiraprolongmarkhalfwidth;FF70 kaverticalstrokecyrillic;049D kbopomofo;310E kcalsquare;3389 kcaron;01E9 kcedilla;0137 kcircle;24DA kcommaaccent;0137 kdotbelow;1E33 keharmenian;0584 kehiragana;3051 kekatakana;30B1 kekatakanahalfwidth;FF79 kenarmenian;056F kesmallkatakana;30F6 kgreenlandic;0138 khabengali;0996 khacyrillic;0445 khadeva;0916 khagujarati;0A96 khagurmukhi;0A16 khaharabic;062E khahfinalarabic;FEA6 khahinitialarabic;FEA7 khahmedialarabic;FEA8 kheicoptic;03E7 khhadeva;0959 khhagurmukhi;0A59 khieukhacirclekorean;3278 khieukhaparenkorean;3218 khieukhcirclekorean;326A khieukhkorean;314B khieukhparenkorean;320A khokhaithai;0E02 khokhonthai;0E05 khokhuatthai;0E03 khokhwaithai;0E04 khomutthai;0E5B khook;0199 khorakhangthai;0E06 khzsquare;3391 kihiragana;304D kikatakana;30AD kikatakanahalfwidth;FF77 kiroguramusquare;3315 kiromeetorusquare;3316 kirosquare;3314 kiyeokacirclekorean;326E kiyeokaparenkorean;320E kiyeokcirclekorean;3260 kiyeokkorean;3131 kiyeokparenkorean;3200 kiyeoksioskorean;3133 kjecyrillic;045C klinebelow;1E35 klsquare;3398 kmcubedsquare;33A6 kmonospace;FF4B kmsquaredsquare;33A2 kohiragana;3053 kohmsquare;33C0 kokaithai;0E01 kokatakana;30B3 kokatakanahalfwidth;FF7A kooposquare;331E koppacyrillic;0481 koreanstandardsymbol;327F koroniscmb;0343 kparen;24A6 kpasquare;33AA ksicyrillic;046F ktsquare;33CF kturned;029E kuhiragana;304F kukatakana;30AF kukatakanahalfwidth;FF78 kvsquare;33B8 kwsquare;33BE l;006C labengali;09B2 lacute;013A ladeva;0932 lagujarati;0AB2 lagurmukhi;0A32 lakkhangyaothai;0E45 lamaleffinalarabic;FEFC lamalefhamzaabovefinalarabic;FEF8 lamalefhamzaaboveisolatedarabic;FEF7 lamalefhamzabelowfinalarabic;FEFA lamalefhamzabelowisolatedarabic;FEF9 lamalefisolatedarabic;FEFB lamalefmaddaabovefinalarabic;FEF6 lamalefmaddaaboveisolatedarabic;FEF5 lamarabic;0644 lambda;03BB lambdastroke;019B lamed;05DC lameddagesh;FB3C lameddageshhebrew;FB3C lamedhebrew;05DC lamedholam;05DC 05B9 lamedholamdagesh;05DC 05B9 05BC lamedholamdageshhebrew;05DC 05B9 05BC lamedholamhebrew;05DC 05B9 lamfinalarabic;FEDE lamhahinitialarabic;FCCA laminitialarabic;FEDF lamjeeminitialarabic;FCC9 lamkhahinitialarabic;FCCB lamlamhehisolatedarabic;FDF2 lammedialarabic;FEE0 lammeemhahinitialarabic;FD88 lammeeminitialarabic;FCCC lammeemjeeminitialarabic;FEDF FEE4 FEA0 lammeemkhahinitialarabic;FEDF FEE4 FEA8 largecircle;25EF lbar;019A lbelt;026C lbopomofo;310C lcaron;013E lcedilla;013C lcircle;24DB lcircumflexbelow;1E3D lcommaaccent;013C ldot;0140 ldotaccent;0140 ldotbelow;1E37 ldotbelowmacron;1E39 leftangleabovecmb;031A lefttackbelowcmb;0318 less;003C lessequal;2264 lessequalorgreater;22DA lessmonospace;FF1C lessorequivalent;2272 lessorgreater;2276 lessoverequal;2266 lesssmall;FE64 lezh;026E lfblock;258C lhookretroflex;026D lira;20A4 liwnarmenian;056C lj;01C9 ljecyrillic;0459 ll;F6C0 lladeva;0933 llagujarati;0AB3 llinebelow;1E3B llladeva;0934 llvocalicbengali;09E1 llvocalicdeva;0961 llvocalicvowelsignbengali;09E3 llvocalicvowelsigndeva;0963 lmiddletilde;026B lmonospace;FF4C lmsquare;33D0 lochulathai;0E2C logicaland;2227 logicalnot;00AC logicalnotreversed;2310 logicalor;2228 lolingthai;0E25 longs;017F lowlinecenterline;FE4E lowlinecmb;0332 lowlinedashed;FE4D lozenge;25CA lparen;24A7 lslash;0142 lsquare;2113 lsuperior;F6EE ltshade;2591 luthai;0E26 lvocalicbengali;098C lvocalicdeva;090C lvocalicvowelsignbengali;09E2 lvocalicvowelsigndeva;0962 lxsquare;33D3 m;006D mabengali;09AE macron;00AF macronbelowcmb;0331 macroncmb;0304 macronlowmod;02CD macronmonospace;FFE3 macute;1E3F madeva;092E magujarati;0AAE magurmukhi;0A2E mahapakhhebrew;05A4 mahapakhlefthebrew;05A4 mahiragana;307E maichattawalowleftthai;F895 maichattawalowrightthai;F894 maichattawathai;0E4B maichattawaupperleftthai;F893 maieklowleftthai;F88C maieklowrightthai;F88B maiekthai;0E48 maiekupperleftthai;F88A maihanakatleftthai;F884 maihanakatthai;0E31 maitaikhuleftthai;F889 maitaikhuthai;0E47 maitholowleftthai;F88F maitholowrightthai;F88E maithothai;0E49 maithoupperleftthai;F88D maitrilowleftthai;F892 maitrilowrightthai;F891 maitrithai;0E4A maitriupperleftthai;F890 maiyamokthai;0E46 makatakana;30DE makatakanahalfwidth;FF8F male;2642 mansyonsquare;3347 maqafhebrew;05BE mars;2642 masoracirclehebrew;05AF masquare;3383 mbopomofo;3107 mbsquare;33D4 mcircle;24DC mcubedsquare;33A5 mdotaccent;1E41 mdotbelow;1E43 meemarabic;0645 meemfinalarabic;FEE2 meeminitialarabic;FEE3 meemmedialarabic;FEE4 meemmeeminitialarabic;FCD1 meemmeemisolatedarabic;FC48 meetorusquare;334D mehiragana;3081 meizierasquare;337E mekatakana;30E1 mekatakanahalfwidth;FF92 mem;05DE memdagesh;FB3E memdageshhebrew;FB3E memhebrew;05DE menarmenian;0574 merkhahebrew;05A5 merkhakefulahebrew;05A6 merkhakefulalefthebrew;05A6 merkhalefthebrew;05A5 mhook;0271 mhzsquare;3392 middledotkatakanahalfwidth;FF65 middot;00B7 mieumacirclekorean;3272 mieumaparenkorean;3212 mieumcirclekorean;3264 mieumkorean;3141 mieumpansioskorean;3170 mieumparenkorean;3204 mieumpieupkorean;316E mieumsioskorean;316F mihiragana;307F mikatakana;30DF mikatakanahalfwidth;FF90 minus;2212 minusbelowcmb;0320 minuscircle;2296 minusmod;02D7 minusplus;2213 minute;2032 miribaarusquare;334A mirisquare;3349 mlonglegturned;0270 mlsquare;3396 mmcubedsquare;33A3 mmonospace;FF4D mmsquaredsquare;339F mohiragana;3082 mohmsquare;33C1 mokatakana;30E2 mokatakanahalfwidth;FF93 molsquare;33D6 momathai;0E21 moverssquare;33A7 moverssquaredsquare;33A8 mparen;24A8 mpasquare;33AB mssquare;33B3 msuperior;F6EF mturned;026F mu;00B5 mu1;00B5 muasquare;3382 muchgreater;226B muchless;226A mufsquare;338C mugreek;03BC mugsquare;338D muhiragana;3080 mukatakana;30E0 mukatakanahalfwidth;FF91 mulsquare;3395 multiply;00D7 mumsquare;339B munahhebrew;05A3 munahlefthebrew;05A3 musicalnote;266A musicalnotedbl;266B musicflatsign;266D musicsharpsign;266F mussquare;33B2 muvsquare;33B6 muwsquare;33BC mvmegasquare;33B9 mvsquare;33B7 mwmegasquare;33BF mwsquare;33BD n;006E nabengali;09A8 nabla;2207 nacute;0144 nadeva;0928 nagujarati;0AA8 nagurmukhi;0A28 nahiragana;306A nakatakana;30CA nakatakanahalfwidth;FF85 napostrophe;0149 nasquare;3381 nbopomofo;310B nbspace;00A0 ncaron;0148 ncedilla;0146 ncircle;24DD ncircumflexbelow;1E4B ncommaaccent;0146 ndotaccent;1E45 ndotbelow;1E47 nehiragana;306D nekatakana;30CD nekatakanahalfwidth;FF88 newsheqelsign;20AA nfsquare;338B ngabengali;0999 ngadeva;0919 ngagujarati;0A99 ngagurmukhi;0A19 ngonguthai;0E07 nhiragana;3093 nhookleft;0272 nhookretroflex;0273 nieunacirclekorean;326F nieunaparenkorean;320F nieuncieuckorean;3135 nieuncirclekorean;3261 nieunhieuhkorean;3136 nieunkorean;3134 nieunpansioskorean;3168 nieunparenkorean;3201 nieunsioskorean;3167 nieuntikeutkorean;3166 nihiragana;306B nikatakana;30CB nikatakanahalfwidth;FF86 nikhahitleftthai;F899 nikhahitthai;0E4D nine;0039 ninearabic;0669 ninebengali;09EF ninecircle;2468 ninecircleinversesansserif;2792 ninedeva;096F ninegujarati;0AEF ninegurmukhi;0A6F ninehackarabic;0669 ninehangzhou;3029 nineideographicparen;3228 nineinferior;2089 ninemonospace;FF19 nineoldstyle;F739 nineparen;247C nineperiod;2490 ninepersian;06F9 nineroman;2178 ninesuperior;2079 nineteencircle;2472 nineteenparen;2486 nineteenperiod;249A ninethai;0E59 nj;01CC njecyrillic;045A nkatakana;30F3 nkatakanahalfwidth;FF9D nlegrightlong;019E nlinebelow;1E49 nmonospace;FF4E nmsquare;339A nnabengali;09A3 nnadeva;0923 nnagujarati;0AA3 nnagurmukhi;0A23 nnnadeva;0929 nohiragana;306E nokatakana;30CE nokatakanahalfwidth;FF89 nonbreakingspace;00A0 nonenthai;0E13 nonuthai;0E19 noonarabic;0646 noonfinalarabic;FEE6 noonghunnaarabic;06BA noonghunnafinalarabic;FB9F noonhehinitialarabic;FEE7 FEEC nooninitialarabic;FEE7 noonjeeminitialarabic;FCD2 noonjeemisolatedarabic;FC4B noonmedialarabic;FEE8 noonmeeminitialarabic;FCD5 noonmeemisolatedarabic;FC4E noonnoonfinalarabic;FC8D notcontains;220C notelement;2209 notelementof;2209 notequal;2260 notgreater;226F notgreaternorequal;2271 notgreaternorless;2279 notidentical;2262 notless;226E notlessnorequal;2270 notparallel;2226 notprecedes;2280 notsubset;2284 notsucceeds;2281 notsuperset;2285 nowarmenian;0576 nparen;24A9 nssquare;33B1 nsuperior;207F ntilde;00F1 nu;03BD nuhiragana;306C nukatakana;30CC nukatakanahalfwidth;FF87 nuktabengali;09BC nuktadeva;093C nuktagujarati;0ABC nuktagurmukhi;0A3C numbersign;0023 numbersignmonospace;FF03 numbersignsmall;FE5F numeralsigngreek;0374 numeralsignlowergreek;0375 numero;2116 nun;05E0 nundagesh;FB40 nundageshhebrew;FB40 nunhebrew;05E0 nvsquare;33B5 nwsquare;33BB nyabengali;099E nyadeva;091E nyagujarati;0A9E nyagurmukhi;0A1E o;006F oacute;00F3 oangthai;0E2D obarred;0275 obarredcyrillic;04E9 obarreddieresiscyrillic;04EB obengali;0993 obopomofo;311B obreve;014F ocandradeva;0911 ocandragujarati;0A91 ocandravowelsigndeva;0949 ocandravowelsigngujarati;0AC9 ocaron;01D2 ocircle;24DE ocircumflex;00F4 ocircumflexacute;1ED1 ocircumflexdotbelow;1ED9 ocircumflexgrave;1ED3 ocircumflexhookabove;1ED5 ocircumflextilde;1ED7 ocyrillic;043E odblacute;0151 odblgrave;020D odeva;0913 odieresis;00F6 odieresiscyrillic;04E7 odotbelow;1ECD oe;0153 oekorean;315A ogonek;02DB ogonekcmb;0328 ograve;00F2 ogujarati;0A93 oharmenian;0585 ohiragana;304A ohookabove;1ECF ohorn;01A1 ohornacute;1EDB ohorndotbelow;1EE3 ohorngrave;1EDD ohornhookabove;1EDF ohorntilde;1EE1 ohungarumlaut;0151 oi;01A3 oinvertedbreve;020F okatakana;30AA okatakanahalfwidth;FF75 okorean;3157 olehebrew;05AB omacron;014D omacronacute;1E53 omacrongrave;1E51 omdeva;0950 omega;03C9 omega1;03D6 omegacyrillic;0461 omegalatinclosed;0277 omegaroundcyrillic;047B omegatitlocyrillic;047D omegatonos;03CE omgujarati;0AD0 omicron;03BF omicrontonos;03CC omonospace;FF4F one;0031 onearabic;0661 onebengali;09E7 onecircle;2460 onecircleinversesansserif;278A onedeva;0967 onedotenleader;2024 oneeighth;215B onefitted;F6DC onegujarati;0AE7 onegurmukhi;0A67 onehackarabic;0661 onehalf;00BD onehangzhou;3021 oneideographicparen;3220 oneinferior;2081 onemonospace;FF11 onenumeratorbengali;09F4 oneoldstyle;F731 oneparen;2474 oneperiod;2488 onepersian;06F1 onequarter;00BC oneroman;2170 onesuperior;00B9 onethai;0E51 onethird;2153 oogonek;01EB oogonekmacron;01ED oogurmukhi;0A13 oomatragurmukhi;0A4B oopen;0254 oparen;24AA openbullet;25E6 option;2325 ordfeminine;00AA ordmasculine;00BA orthogonal;221F oshortdeva;0912 oshortvowelsigndeva;094A oslash;00F8 oslashacute;01FF osmallhiragana;3049 osmallkatakana;30A9 osmallkatakanahalfwidth;FF6B ostrokeacute;01FF osuperior;F6F0 otcyrillic;047F otilde;00F5 otildeacute;1E4D otildedieresis;1E4F oubopomofo;3121 overline;203E overlinecenterline;FE4A overlinecmb;0305 overlinedashed;FE49 overlinedblwavy;FE4C overlinewavy;FE4B overscore;00AF ovowelsignbengali;09CB ovowelsigndeva;094B ovowelsigngujarati;0ACB p;0070 paampssquare;3380 paasentosquare;332B pabengali;09AA pacute;1E55 padeva;092A pagedown;21DF pageup;21DE pagujarati;0AAA pagurmukhi;0A2A pahiragana;3071 paiyannoithai;0E2F pakatakana;30D1 palatalizationcyrilliccmb;0484 palochkacyrillic;04C0 pansioskorean;317F paragraph;00B6 parallel;2225 parenleft;0028 parenleftaltonearabic;FD3E parenleftbt;F8ED parenleftex;F8EC parenleftinferior;208D parenleftmonospace;FF08 parenleftsmall;FE59 parenleftsuperior;207D parenlefttp;F8EB parenleftvertical;FE35 parenright;0029 parenrightaltonearabic;FD3F parenrightbt;F8F8 parenrightex;F8F7 parenrightinferior;208E parenrightmonospace;FF09 parenrightsmall;FE5A parenrightsuperior;207E parenrighttp;F8F6 parenrightvertical;FE36 partialdiff;2202 paseqhebrew;05C0 pashtahebrew;0599 pasquare;33A9 patah;05B7 patah11;05B7 patah1d;05B7 patah2a;05B7 patahhebrew;05B7 patahnarrowhebrew;05B7 patahquarterhebrew;05B7 patahwidehebrew;05B7 pazerhebrew;05A1 pbopomofo;3106 pcircle;24DF pdotaccent;1E57 pe;05E4 pecyrillic;043F pedagesh;FB44 pedageshhebrew;FB44 peezisquare;333B pefinaldageshhebrew;FB43 peharabic;067E peharmenian;057A pehebrew;05E4 pehfinalarabic;FB57 pehinitialarabic;FB58 pehiragana;307A pehmedialarabic;FB59 pekatakana;30DA pemiddlehookcyrillic;04A7 perafehebrew;FB4E percent;0025 percentarabic;066A percentmonospace;FF05 percentsmall;FE6A period;002E periodarmenian;0589 periodcentered;00B7 periodhalfwidth;FF61 periodinferior;F6E7 periodmonospace;FF0E periodsmall;FE52 periodsuperior;F6E8 perispomenigreekcmb;0342 perpendicular;22A5 perthousand;2030 peseta;20A7 pfsquare;338A phabengali;09AB phadeva;092B phagujarati;0AAB phagurmukhi;0A2B phi;03C6 phi1;03D5 phieuphacirclekorean;327A phieuphaparenkorean;321A phieuphcirclekorean;326C phieuphkorean;314D phieuphparenkorean;320C philatin;0278 phinthuthai;0E3A phisymbolgreek;03D5 phook;01A5 phophanthai;0E1E phophungthai;0E1C phosamphaothai;0E20 pi;03C0 pieupacirclekorean;3273 pieupaparenkorean;3213 pieupcieuckorean;3176 pieupcirclekorean;3265 pieupkiyeokkorean;3172 pieupkorean;3142 pieupparenkorean;3205 pieupsioskiyeokkorean;3174 pieupsioskorean;3144 pieupsiostikeutkorean;3175 pieupthieuthkorean;3177 pieuptikeutkorean;3173 pihiragana;3074 pikatakana;30D4 pisymbolgreek;03D6 piwrarmenian;0583 plus;002B plusbelowcmb;031F pluscircle;2295 plusminus;00B1 plusmod;02D6 plusmonospace;FF0B plussmall;FE62 plussuperior;207A pmonospace;FF50 pmsquare;33D8 pohiragana;307D pointingindexdownwhite;261F pointingindexleftwhite;261C pointingindexrightwhite;261E pointingindexupwhite;261D pokatakana;30DD poplathai;0E1B postalmark;3012 postalmarkface;3020 pparen;24AB precedes;227A prescription;211E primemod;02B9 primereversed;2035 product;220F projective;2305 prolongedkana;30FC propellor;2318 propersubset;2282 propersuperset;2283 proportion;2237 proportional;221D psi;03C8 psicyrillic;0471 psilipneumatacyrilliccmb;0486 pssquare;33B0 puhiragana;3077 pukatakana;30D7 pvsquare;33B4 pwsquare;33BA q;0071 qadeva;0958 qadmahebrew;05A8 qafarabic;0642 qaffinalarabic;FED6 qafinitialarabic;FED7 qafmedialarabic;FED8 qamats;05B8 qamats10;05B8 qamats1a;05B8 qamats1c;05B8 qamats27;05B8 qamats29;05B8 qamats33;05B8 qamatsde;05B8 qamatshebrew;05B8 qamatsnarrowhebrew;05B8 qamatsqatanhebrew;05B8 qamatsqatannarrowhebrew;05B8 qamatsqatanquarterhebrew;05B8 qamatsqatanwidehebrew;05B8 qamatsquarterhebrew;05B8 qamatswidehebrew;05B8 qarneyparahebrew;059F qbopomofo;3111 qcircle;24E0 qhook;02A0 qmonospace;FF51 qof;05E7 qofdagesh;FB47 qofdageshhebrew;FB47 qofhatafpatah;05E7 05B2 qofhatafpatahhebrew;05E7 05B2 qofhatafsegol;05E7 05B1 qofhatafsegolhebrew;05E7 05B1 qofhebrew;05E7 qofhiriq;05E7 05B4 qofhiriqhebrew;05E7 05B4 qofholam;05E7 05B9 qofholamhebrew;05E7 05B9 qofpatah;05E7 05B7 qofpatahhebrew;05E7 05B7 qofqamats;05E7 05B8 qofqamatshebrew;05E7 05B8 qofqubuts;05E7 05BB qofqubutshebrew;05E7 05BB qofsegol;05E7 05B6 qofsegolhebrew;05E7 05B6 qofsheva;05E7 05B0 qofshevahebrew;05E7 05B0 qoftsere;05E7 05B5 qoftserehebrew;05E7 05B5 qparen;24AC quarternote;2669 qubuts;05BB qubuts18;05BB qubuts25;05BB qubuts31;05BB qubutshebrew;05BB qubutsnarrowhebrew;05BB qubutsquarterhebrew;05BB qubutswidehebrew;05BB question;003F questionarabic;061F questionarmenian;055E questiondown;00BF questiondownsmall;F7BF questiongreek;037E questionmonospace;FF1F questionsmall;F73F quotedbl;0022 quotedblbase;201E quotedblleft;201C quotedblmonospace;FF02 quotedblprime;301E quotedblprimereversed;301D quotedblright;201D quoteleft;2018 quoteleftreversed;201B quotereversed;201B quoteright;2019 quoterightn;0149 quotesinglbase;201A quotesingle;0027 quotesinglemonospace;FF07 r;0072 raarmenian;057C rabengali;09B0 racute;0155 radeva;0930 radical;221A radicalex;F8E5 radoverssquare;33AE radoverssquaredsquare;33AF radsquare;33AD rafe;05BF rafehebrew;05BF ragujarati;0AB0 ragurmukhi;0A30 rahiragana;3089 rakatakana;30E9 rakatakanahalfwidth;FF97 ralowerdiagonalbengali;09F1 ramiddlediagonalbengali;09F0 ramshorn;0264 ratio;2236 rbopomofo;3116 rcaron;0159 rcedilla;0157 rcircle;24E1 rcommaaccent;0157 rdblgrave;0211 rdotaccent;1E59 rdotbelow;1E5B rdotbelowmacron;1E5D referencemark;203B reflexsubset;2286 reflexsuperset;2287 registered;00AE registersans;F8E8 registerserif;F6DA reharabic;0631 reharmenian;0580 rehfinalarabic;FEAE rehiragana;308C rehyehaleflamarabic;0631 FEF3 FE8E 0644 rekatakana;30EC rekatakanahalfwidth;FF9A resh;05E8 reshdageshhebrew;FB48 reshhatafpatah;05E8 05B2 reshhatafpatahhebrew;05E8 05B2 reshhatafsegol;05E8 05B1 reshhatafsegolhebrew;05E8 05B1 reshhebrew;05E8 reshhiriq;05E8 05B4 reshhiriqhebrew;05E8 05B4 reshholam;05E8 05B9 reshholamhebrew;05E8 05B9 reshpatah;05E8 05B7 reshpatahhebrew;05E8 05B7 reshqamats;05E8 05B8 reshqamatshebrew;05E8 05B8 reshqubuts;05E8 05BB reshqubutshebrew;05E8 05BB reshsegol;05E8 05B6 reshsegolhebrew;05E8 05B6 reshsheva;05E8 05B0 reshshevahebrew;05E8 05B0 reshtsere;05E8 05B5 reshtserehebrew;05E8 05B5 reversedtilde;223D reviahebrew;0597 reviamugrashhebrew;0597 revlogicalnot;2310 rfishhook;027E rfishhookreversed;027F rhabengali;09DD rhadeva;095D rho;03C1 rhook;027D rhookturned;027B rhookturnedsuperior;02B5 rhosymbolgreek;03F1 rhotichookmod;02DE rieulacirclekorean;3271 rieulaparenkorean;3211 rieulcirclekorean;3263 rieulhieuhkorean;3140 rieulkiyeokkorean;313A rieulkiyeoksioskorean;3169 rieulkorean;3139 rieulmieumkorean;313B rieulpansioskorean;316C rieulparenkorean;3203 rieulphieuphkorean;313F rieulpieupkorean;313C rieulpieupsioskorean;316B rieulsioskorean;313D rieulthieuthkorean;313E rieultikeutkorean;316A rieulyeorinhieuhkorean;316D rightangle;221F righttackbelowcmb;0319 righttriangle;22BF rihiragana;308A rikatakana;30EA rikatakanahalfwidth;FF98 ring;02DA ringbelowcmb;0325 ringcmb;030A ringhalfleft;02BF ringhalfleftarmenian;0559 ringhalfleftbelowcmb;031C ringhalfleftcentered;02D3 ringhalfright;02BE ringhalfrightbelowcmb;0339 ringhalfrightcentered;02D2 rinvertedbreve;0213 rittorusquare;3351 rlinebelow;1E5F rlongleg;027C rlonglegturned;027A rmonospace;FF52 rohiragana;308D rokatakana;30ED rokatakanahalfwidth;FF9B roruathai;0E23 rparen;24AD rrabengali;09DC rradeva;0931 rragurmukhi;0A5C rreharabic;0691 rrehfinalarabic;FB8D rrvocalicbengali;09E0 rrvocalicdeva;0960 rrvocalicgujarati;0AE0 rrvocalicvowelsignbengali;09C4 rrvocalicvowelsigndeva;0944 rrvocalicvowelsigngujarati;0AC4 rsuperior;F6F1 rtblock;2590 rturned;0279 rturnedsuperior;02B4 ruhiragana;308B rukatakana;30EB rukatakanahalfwidth;FF99 rupeemarkbengali;09F2 rupeesignbengali;09F3 rupiah;F6DD ruthai;0E24 rvocalicbengali;098B rvocalicdeva;090B rvocalicgujarati;0A8B rvocalicvowelsignbengali;09C3 rvocalicvowelsigndeva;0943 rvocalicvowelsigngujarati;0AC3 s;0073 sabengali;09B8 sacute;015B sacutedotaccent;1E65 sadarabic;0635 sadeva;0938 sadfinalarabic;FEBA sadinitialarabic;FEBB sadmedialarabic;FEBC sagujarati;0AB8 sagurmukhi;0A38 sahiragana;3055 sakatakana;30B5 sakatakanahalfwidth;FF7B sallallahoualayhewasallamarabic;FDFA samekh;05E1 samekhdagesh;FB41 samekhdageshhebrew;FB41 samekhhebrew;05E1 saraaathai;0E32 saraaethai;0E41 saraaimaimalaithai;0E44 saraaimaimuanthai;0E43 saraamthai;0E33 saraathai;0E30 saraethai;0E40 saraiileftthai;F886 saraiithai;0E35 saraileftthai;F885 saraithai;0E34 saraothai;0E42 saraueeleftthai;F888 saraueethai;0E37 saraueleftthai;F887 sarauethai;0E36 sarauthai;0E38 sarauuthai;0E39 sbopomofo;3119 scaron;0161 scarondotaccent;1E67 scedilla;015F schwa;0259 schwacyrillic;04D9 schwadieresiscyrillic;04DB schwahook;025A scircle;24E2 scircumflex;015D scommaaccent;0219 sdotaccent;1E61 sdotbelow;1E63 sdotbelowdotaccent;1E69 seagullbelowcmb;033C second;2033 secondtonechinese;02CA section;00A7 seenarabic;0633 seenfinalarabic;FEB2 seeninitialarabic;FEB3 seenmedialarabic;FEB4 segol;05B6 segol13;05B6 segol1f;05B6 segol2c;05B6 segolhebrew;05B6 segolnarrowhebrew;05B6 segolquarterhebrew;05B6 segoltahebrew;0592 segolwidehebrew;05B6 seharmenian;057D sehiragana;305B sekatakana;30BB sekatakanahalfwidth;FF7E semicolon;003B semicolonarabic;061B semicolonmonospace;FF1B semicolonsmall;FE54 semivoicedmarkkana;309C semivoicedmarkkanahalfwidth;FF9F sentisquare;3322 sentosquare;3323 seven;0037 sevenarabic;0667 sevenbengali;09ED sevencircle;2466 sevencircleinversesansserif;2790 sevendeva;096D seveneighths;215E sevengujarati;0AED sevengurmukhi;0A6D sevenhackarabic;0667 sevenhangzhou;3027 sevenideographicparen;3226 seveninferior;2087 sevenmonospace;FF17 sevenoldstyle;F737 sevenparen;247A sevenperiod;248E sevenpersian;06F7 sevenroman;2176 sevensuperior;2077 seventeencircle;2470 seventeenparen;2484 seventeenperiod;2498 seventhai;0E57 sfthyphen;00AD shaarmenian;0577 shabengali;09B6 shacyrillic;0448 shaddaarabic;0651 shaddadammaarabic;FC61 shaddadammatanarabic;FC5E shaddafathaarabic;FC60 shaddafathatanarabic;0651 064B shaddakasraarabic;FC62 shaddakasratanarabic;FC5F shade;2592 shadedark;2593 shadelight;2591 shademedium;2592 shadeva;0936 shagujarati;0AB6 shagurmukhi;0A36 shalshelethebrew;0593 shbopomofo;3115 shchacyrillic;0449 sheenarabic;0634 sheenfinalarabic;FEB6 sheeninitialarabic;FEB7 sheenmedialarabic;FEB8 sheicoptic;03E3 sheqel;20AA sheqelhebrew;20AA sheva;05B0 sheva115;05B0 sheva15;05B0 sheva22;05B0 sheva2e;05B0 shevahebrew;05B0 shevanarrowhebrew;05B0 shevaquarterhebrew;05B0 shevawidehebrew;05B0 shhacyrillic;04BB shimacoptic;03ED shin;05E9 shindagesh;FB49 shindageshhebrew;FB49 shindageshshindot;FB2C shindageshshindothebrew;FB2C shindageshsindot;FB2D shindageshsindothebrew;FB2D shindothebrew;05C1 shinhebrew;05E9 shinshindot;FB2A shinshindothebrew;FB2A shinsindot;FB2B shinsindothebrew;FB2B shook;0282 sigma;03C3 sigma1;03C2 sigmafinal;03C2 sigmalunatesymbolgreek;03F2 sihiragana;3057 sikatakana;30B7 sikatakanahalfwidth;FF7C siluqhebrew;05BD siluqlefthebrew;05BD similar;223C sindothebrew;05C2 siosacirclekorean;3274 siosaparenkorean;3214 sioscieuckorean;317E sioscirclekorean;3266 sioskiyeokkorean;317A sioskorean;3145 siosnieunkorean;317B siosparenkorean;3206 siospieupkorean;317D siostikeutkorean;317C six;0036 sixarabic;0666 sixbengali;09EC sixcircle;2465 sixcircleinversesansserif;278F sixdeva;096C sixgujarati;0AEC sixgurmukhi;0A6C sixhackarabic;0666 sixhangzhou;3026 sixideographicparen;3225 sixinferior;2086 sixmonospace;FF16 sixoldstyle;F736 sixparen;2479 sixperiod;248D sixpersian;06F6 sixroman;2175 sixsuperior;2076 sixteencircle;246F sixteencurrencydenominatorbengali;09F9 sixteenparen;2483 sixteenperiod;2497 sixthai;0E56 slash;002F slashmonospace;FF0F slong;017F slongdotaccent;1E9B smileface;263A smonospace;FF53 sofpasuqhebrew;05C3 softhyphen;00AD softsigncyrillic;044C sohiragana;305D sokatakana;30BD sokatakanahalfwidth;FF7F soliduslongoverlaycmb;0338 solidusshortoverlaycmb;0337 sorusithai;0E29 sosalathai;0E28 sosothai;0E0B sosuathai;0E2A space;0020 spacehackarabic;0020 spade;2660 spadesuitblack;2660 spadesuitwhite;2664 sparen;24AE squarebelowcmb;033B squarecc;33C4 squarecm;339D squarediagonalcrosshatchfill;25A9 squarehorizontalfill;25A4 squarekg;338F squarekm;339E squarekmcapital;33CE squareln;33D1 squarelog;33D2 squaremg;338E squaremil;33D5 squaremm;339C squaremsquared;33A1 squareorthogonalcrosshatchfill;25A6 squareupperlefttolowerrightfill;25A7 squareupperrighttolowerleftfill;25A8 squareverticalfill;25A5 squarewhitewithsmallblack;25A3 srsquare;33DB ssabengali;09B7 ssadeva;0937 ssagujarati;0AB7 ssangcieuckorean;3149 ssanghieuhkorean;3185 ssangieungkorean;3180 ssangkiyeokkorean;3132 ssangnieunkorean;3165 ssangpieupkorean;3143 ssangsioskorean;3146 ssangtikeutkorean;3138 ssuperior;F6F2 sterling;00A3 sterlingmonospace;FFE1 strokelongoverlaycmb;0336 strokeshortoverlaycmb;0335 subset;2282 subsetnotequal;228A subsetorequal;2286 succeeds;227B suchthat;220B suhiragana;3059 sukatakana;30B9 sukatakanahalfwidth;FF7D sukunarabic;0652 summation;2211 sun;263C superset;2283 supersetnotequal;228B supersetorequal;2287 svsquare;33DC syouwaerasquare;337C t;0074 tabengali;09A4 tackdown;22A4 tackleft;22A3 tadeva;0924 tagujarati;0AA4 tagurmukhi;0A24 taharabic;0637 tahfinalarabic;FEC2 tahinitialarabic;FEC3 tahiragana;305F tahmedialarabic;FEC4 taisyouerasquare;337D takatakana;30BF takatakanahalfwidth;FF80 tatweelarabic;0640 tau;03C4 tav;05EA tavdages;FB4A tavdagesh;FB4A tavdageshhebrew;FB4A tavhebrew;05EA tbar;0167 tbopomofo;310A tcaron;0165 tccurl;02A8 tcedilla;0163 tcheharabic;0686 tchehfinalarabic;FB7B tchehinitialarabic;FB7C tchehmedialarabic;FB7D tchehmeeminitialarabic;FB7C FEE4 tcircle;24E3 tcircumflexbelow;1E71 tcommaaccent;0163 tdieresis;1E97 tdotaccent;1E6B tdotbelow;1E6D tecyrillic;0442 tedescendercyrillic;04AD teharabic;062A tehfinalarabic;FE96 tehhahinitialarabic;FCA2 tehhahisolatedarabic;FC0C tehinitialarabic;FE97 tehiragana;3066 tehjeeminitialarabic;FCA1 tehjeemisolatedarabic;FC0B tehmarbutaarabic;0629 tehmarbutafinalarabic;FE94 tehmedialarabic;FE98 tehmeeminitialarabic;FCA4 tehmeemisolatedarabic;FC0E tehnoonfinalarabic;FC73 tekatakana;30C6 tekatakanahalfwidth;FF83 telephone;2121 telephoneblack;260E telishagedolahebrew;05A0 telishaqetanahebrew;05A9 tencircle;2469 tenideographicparen;3229 tenparen;247D tenperiod;2491 tenroman;2179 tesh;02A7 tet;05D8 tetdagesh;FB38 tetdageshhebrew;FB38 tethebrew;05D8 tetsecyrillic;04B5 tevirhebrew;059B tevirlefthebrew;059B thabengali;09A5 thadeva;0925 thagujarati;0AA5 thagurmukhi;0A25 thalarabic;0630 thalfinalarabic;FEAC thanthakhatlowleftthai;F898 thanthakhatlowrightthai;F897 thanthakhatthai;0E4C thanthakhatupperleftthai;F896 theharabic;062B thehfinalarabic;FE9A thehinitialarabic;FE9B thehmedialarabic;FE9C thereexists;2203 therefore;2234 theta;03B8 theta1;03D1 thetasymbolgreek;03D1 thieuthacirclekorean;3279 thieuthaparenkorean;3219 thieuthcirclekorean;326B thieuthkorean;314C thieuthparenkorean;320B thirteencircle;246C thirteenparen;2480 thirteenperiod;2494 thonangmonthothai;0E11 thook;01AD thophuthaothai;0E12 thorn;00FE thothahanthai;0E17 thothanthai;0E10 thothongthai;0E18 thothungthai;0E16 thousandcyrillic;0482 thousandsseparatorarabic;066C thousandsseparatorpersian;066C three;0033 threearabic;0663 threebengali;09E9 threecircle;2462 threecircleinversesansserif;278C threedeva;0969 threeeighths;215C threegujarati;0AE9 threegurmukhi;0A69 threehackarabic;0663 threehangzhou;3023 threeideographicparen;3222 threeinferior;2083 threemonospace;FF13 threenumeratorbengali;09F6 threeoldstyle;F733 threeparen;2476 threeperiod;248A threepersian;06F3 threequarters;00BE threequartersemdash;F6DE threeroman;2172 threesuperior;00B3 threethai;0E53 thzsquare;3394 tihiragana;3061 tikatakana;30C1 tikatakanahalfwidth;FF81 tikeutacirclekorean;3270 tikeutaparenkorean;3210 tikeutcirclekorean;3262 tikeutkorean;3137 tikeutparenkorean;3202 tilde;02DC tildebelowcmb;0330 tildecmb;0303 tildecomb;0303 tildedoublecmb;0360 tildeoperator;223C tildeoverlaycmb;0334 tildeverticalcmb;033E timescircle;2297 tipehahebrew;0596 tipehalefthebrew;0596 tippigurmukhi;0A70 titlocyrilliccmb;0483 tiwnarmenian;057F tlinebelow;1E6F tmonospace;FF54 toarmenian;0569 tohiragana;3068 tokatakana;30C8 tokatakanahalfwidth;FF84 tonebarextrahighmod;02E5 tonebarextralowmod;02E9 tonebarhighmod;02E6 tonebarlowmod;02E8 tonebarmidmod;02E7 tonefive;01BD tonesix;0185 tonetwo;01A8 tonos;0384 tonsquare;3327 topatakthai;0E0F tortoiseshellbracketleft;3014 tortoiseshellbracketleftsmall;FE5D tortoiseshellbracketleftvertical;FE39 tortoiseshellbracketright;3015 tortoiseshellbracketrightsmall;FE5E tortoiseshellbracketrightvertical;FE3A totaothai;0E15 tpalatalhook;01AB tparen;24AF trademark;2122 trademarksans;F8EA trademarkserif;F6DB tretroflexhook;0288 triagdn;25BC triaglf;25C4 triagrt;25BA triagup;25B2 ts;02A6 tsadi;05E6 tsadidagesh;FB46 tsadidageshhebrew;FB46 tsadihebrew;05E6 tsecyrillic;0446 tsere;05B5 tsere12;05B5 tsere1e;05B5 tsere2b;05B5 tserehebrew;05B5 tserenarrowhebrew;05B5 tserequarterhebrew;05B5 tserewidehebrew;05B5 tshecyrillic;045B tsuperior;F6F3 ttabengali;099F ttadeva;091F ttagujarati;0A9F ttagurmukhi;0A1F tteharabic;0679 ttehfinalarabic;FB67 ttehinitialarabic;FB68 ttehmedialarabic;FB69 tthabengali;09A0 tthadeva;0920 tthagujarati;0AA0 tthagurmukhi;0A20 tturned;0287 tuhiragana;3064 tukatakana;30C4 tukatakanahalfwidth;FF82 tusmallhiragana;3063 tusmallkatakana;30C3 tusmallkatakanahalfwidth;FF6F twelvecircle;246B twelveparen;247F twelveperiod;2493 twelveroman;217B twentycircle;2473 twentyhangzhou;5344 twentyparen;2487 twentyperiod;249B two;0032 twoarabic;0662 twobengali;09E8 twocircle;2461 twocircleinversesansserif;278B twodeva;0968 twodotenleader;2025 twodotleader;2025 twodotleadervertical;FE30 twogujarati;0AE8 twogurmukhi;0A68 twohackarabic;0662 twohangzhou;3022 twoideographicparen;3221 twoinferior;2082 twomonospace;FF12 twonumeratorbengali;09F5 twooldstyle;F732 twoparen;2475 twoperiod;2489 twopersian;06F2 tworoman;2171 twostroke;01BB twosuperior;00B2 twothai;0E52 twothirds;2154 u;0075 uacute;00FA ubar;0289 ubengali;0989 ubopomofo;3128 ubreve;016D ucaron;01D4 ucircle;24E4 ucircumflex;00FB ucircumflexbelow;1E77 ucyrillic;0443 udattadeva;0951 udblacute;0171 udblgrave;0215 udeva;0909 udieresis;00FC udieresisacute;01D8 udieresisbelow;1E73 udieresiscaron;01DA udieresiscyrillic;04F1 udieresisgrave;01DC udieresismacron;01D6 udotbelow;1EE5 ugrave;00F9 ugujarati;0A89 ugurmukhi;0A09 uhiragana;3046 uhookabove;1EE7 uhorn;01B0 uhornacute;1EE9 uhorndotbelow;1EF1 uhorngrave;1EEB uhornhookabove;1EED uhorntilde;1EEF uhungarumlaut;0171 uhungarumlautcyrillic;04F3 uinvertedbreve;0217 ukatakana;30A6 ukatakanahalfwidth;FF73 ukcyrillic;0479 ukorean;315C umacron;016B umacroncyrillic;04EF umacrondieresis;1E7B umatragurmukhi;0A41 umonospace;FF55 underscore;005F underscoredbl;2017 underscoremonospace;FF3F underscorevertical;FE33 underscorewavy;FE4F union;222A universal;2200 uogonek;0173 uparen;24B0 upblock;2580 upperdothebrew;05C4 upsilon;03C5 upsilondieresis;03CB upsilondieresistonos;03B0 upsilonlatin;028A upsilontonos;03CD uptackbelowcmb;031D uptackmod;02D4 uragurmukhi;0A73 uring;016F ushortcyrillic;045E usmallhiragana;3045 usmallkatakana;30A5 usmallkatakanahalfwidth;FF69 ustraightcyrillic;04AF ustraightstrokecyrillic;04B1 utilde;0169 utildeacute;1E79 utildebelow;1E75 uubengali;098A uudeva;090A uugujarati;0A8A uugurmukhi;0A0A uumatragurmukhi;0A42 uuvowelsignbengali;09C2 uuvowelsigndeva;0942 uuvowelsigngujarati;0AC2 uvowelsignbengali;09C1 uvowelsigndeva;0941 uvowelsigngujarati;0AC1 v;0076 vadeva;0935 vagujarati;0AB5 vagurmukhi;0A35 vakatakana;30F7 vav;05D5 vavdagesh;FB35 vavdagesh65;FB35 vavdageshhebrew;FB35 vavhebrew;05D5 vavholam;FB4B vavholamhebrew;FB4B vavvavhebrew;05F0 vavyodhebrew;05F1 vcircle;24E5 vdotbelow;1E7F vecyrillic;0432 veharabic;06A4 vehfinalarabic;FB6B vehinitialarabic;FB6C vehmedialarabic;FB6D vekatakana;30F9 venus;2640 verticalbar;007C verticallineabovecmb;030D verticallinebelowcmb;0329 verticallinelowmod;02CC verticallinemod;02C8 vewarmenian;057E vhook;028B vikatakana;30F8 viramabengali;09CD viramadeva;094D viramagujarati;0ACD visargabengali;0983 visargadeva;0903 visargagujarati;0A83 vmonospace;FF56 voarmenian;0578 voicediterationhiragana;309E voicediterationkatakana;30FE voicedmarkkana;309B voicedmarkkanahalfwidth;FF9E vokatakana;30FA vparen;24B1 vtilde;1E7D vturned;028C vuhiragana;3094 vukatakana;30F4 w;0077 wacute;1E83 waekorean;3159 wahiragana;308F wakatakana;30EF wakatakanahalfwidth;FF9C wakorean;3158 wasmallhiragana;308E wasmallkatakana;30EE wattosquare;3357 wavedash;301C wavyunderscorevertical;FE34 wawarabic;0648 wawfinalarabic;FEEE wawhamzaabovearabic;0624 wawhamzaabovefinalarabic;FE86 wbsquare;33DD wcircle;24E6 wcircumflex;0175 wdieresis;1E85 wdotaccent;1E87 wdotbelow;1E89 wehiragana;3091 weierstrass;2118 wekatakana;30F1 wekorean;315E weokorean;315D wgrave;1E81 whitebullet;25E6 whitecircle;25CB whitecircleinverse;25D9 whitecornerbracketleft;300E whitecornerbracketleftvertical;FE43 whitecornerbracketright;300F whitecornerbracketrightvertical;FE44 whitediamond;25C7 whitediamondcontainingblacksmalldiamond;25C8 whitedownpointingsmalltriangle;25BF whitedownpointingtriangle;25BD whiteleftpointingsmalltriangle;25C3 whiteleftpointingtriangle;25C1 whitelenticularbracketleft;3016 whitelenticularbracketright;3017 whiterightpointingsmalltriangle;25B9 whiterightpointingtriangle;25B7 whitesmallsquare;25AB whitesmilingface;263A whitesquare;25A1 whitestar;2606 whitetelephone;260F whitetortoiseshellbracketleft;3018 whitetortoiseshellbracketright;3019 whiteuppointingsmalltriangle;25B5 whiteuppointingtriangle;25B3 wihiragana;3090 wikatakana;30F0 wikorean;315F wmonospace;FF57 wohiragana;3092 wokatakana;30F2 wokatakanahalfwidth;FF66 won;20A9 wonmonospace;FFE6 wowaenthai;0E27 wparen;24B2 wring;1E98 wsuperior;02B7 wturned;028D wynn;01BF x;0078 xabovecmb;033D xbopomofo;3112 xcircle;24E7 xdieresis;1E8D xdotaccent;1E8B xeharmenian;056D xi;03BE xmonospace;FF58 xparen;24B3 xsuperior;02E3 y;0079 yaadosquare;334E yabengali;09AF yacute;00FD yadeva;092F yaekorean;3152 yagujarati;0AAF yagurmukhi;0A2F yahiragana;3084 yakatakana;30E4 yakatakanahalfwidth;FF94 yakorean;3151 yamakkanthai;0E4E yasmallhiragana;3083 yasmallkatakana;30E3 yasmallkatakanahalfwidth;FF6C yatcyrillic;0463 ycircle;24E8 ycircumflex;0177 ydieresis;00FF ydotaccent;1E8F ydotbelow;1EF5 yeharabic;064A yehbarreearabic;06D2 yehbarreefinalarabic;FBAF yehfinalarabic;FEF2 yehhamzaabovearabic;0626 yehhamzaabovefinalarabic;FE8A yehhamzaaboveinitialarabic;FE8B yehhamzaabovemedialarabic;FE8C yehinitialarabic;FEF3 yehmedialarabic;FEF4 yehmeeminitialarabic;FCDD yehmeemisolatedarabic;FC58 yehnoonfinalarabic;FC94 yehthreedotsbelowarabic;06D1 yekorean;3156 yen;00A5 yenmonospace;FFE5 yeokorean;3155 yeorinhieuhkorean;3186 yerahbenyomohebrew;05AA yerahbenyomolefthebrew;05AA yericyrillic;044B yerudieresiscyrillic;04F9 yesieungkorean;3181 yesieungpansioskorean;3183 yesieungsioskorean;3182 yetivhebrew;059A ygrave;1EF3 yhook;01B4 yhookabove;1EF7 yiarmenian;0575 yicyrillic;0457 yikorean;3162 yinyang;262F yiwnarmenian;0582 ymonospace;FF59 yod;05D9 yoddagesh;FB39 yoddageshhebrew;FB39 yodhebrew;05D9 yodyodhebrew;05F2 yodyodpatahhebrew;FB1F yohiragana;3088 yoikorean;3189 yokatakana;30E8 yokatakanahalfwidth;FF96 yokorean;315B yosmallhiragana;3087 yosmallkatakana;30E7 yosmallkatakanahalfwidth;FF6E yotgreek;03F3 yoyaekorean;3188 yoyakorean;3187 yoyakthai;0E22 yoyingthai;0E0D yparen;24B4 ypogegrammeni;037A ypogegrammenigreekcmb;0345 yr;01A6 yring;1E99 ysuperior;02B8 ytilde;1EF9 yturned;028E yuhiragana;3086 yuikorean;318C yukatakana;30E6 yukatakanahalfwidth;FF95 yukorean;3160 yusbigcyrillic;046B yusbigiotifiedcyrillic;046D yuslittlecyrillic;0467 yuslittleiotifiedcyrillic;0469 yusmallhiragana;3085 yusmallkatakana;30E5 yusmallkatakanahalfwidth;FF6D yuyekorean;318B yuyeokorean;318A yyabengali;09DF yyadeva;095F z;007A zaarmenian;0566 zacute;017A zadeva;095B zagurmukhi;0A5B zaharabic;0638 zahfinalarabic;FEC6 zahinitialarabic;FEC7 zahiragana;3056 zahmedialarabic;FEC8 zainarabic;0632 zainfinalarabic;FEB0 zakatakana;30B6 zaqefgadolhebrew;0595 zaqefqatanhebrew;0594 zarqahebrew;0598 zayin;05D6 zayindagesh;FB36 zayindageshhebrew;FB36 zayinhebrew;05D6 zbopomofo;3117 zcaron;017E zcircle;24E9 zcircumflex;1E91 zcurl;0291 zdot;017C zdotaccent;017C zdotbelow;1E93 zecyrillic;0437 zedescendercyrillic;0499 zedieresiscyrillic;04DF zehiragana;305C zekatakana;30BC zero;0030 zeroarabic;0660 zerobengali;09E6 zerodeva;0966 zerogujarati;0AE6 zerogurmukhi;0A66 zerohackarabic;0660 zeroinferior;2080 zeromonospace;FF10 zerooldstyle;F730 zeropersian;06F0 zerosuperior;2070 zerothai;0E50 zerowidthjoiner;FEFF zerowidthnonjoiner;200C zerowidthspace;200B zeta;03B6 zhbopomofo;3113 zhearmenian;056A zhebrevecyrillic;04C2 zhecyrillic;0436 zhedescendercyrillic;0497 zhedieresiscyrillic;04DD zihiragana;3058 zikatakana;30B8 zinorhebrew;05AE zlinebelow;1E95 zmonospace;FF5A zohiragana;305E zokatakana;30BE zparen;24B5 zretroflexhook;0290 zstroke;01B6 zuhiragana;305A zukatakana;30BA #--end therion/texenc/glyphlist.usr0000644000076400010400000000047407673674000017343 0ustar userAdministrators# Define custom PostScriptGlyphName to Unicode mappings here (i.e. for glyph # names which are neither included in AGL nor in the form /uniXXXX or /uXXXX). # # This file also overrides the AGL mappings so it's possible to change it here. # # Syntax: ; Omega;03A9 therion/texenc/mktexenc.pl0000755000076400010400000000654610071012340016730 0ustar userAdministrators#!/usr/bin/perl -w # This script generates C++ files and headers containing encoding vectors # with Unicode values # # Copyright (C) 2003 Martin Budaj sub find_unicode_value { my $str = shift; my $ch; $str = substr ($str,1); # leading slash is removed $str =~ s/\..*//; # Adobe step 1 $str =~ s/_//; # a little bit odd handling of ligatures -- cf. Adobe step 2 # simplified Adobe step 3 follows if (exists $AGL{$str}) {$ch = $AGL{$str};} elsif ($str =~ /^uni([0-9a-fA-F]{4})/) {$ch = $1;} # simplified again elsif ($str =~ /^u([0-9a-fA-F]{4,6})$/) {$ch = $1;} else {$ch = "0000";} $USED_CHARS{$ch} = 1; return $ch; } # we read Adobe Glyph List first open(IN, "glyphlist.txt") or die "Can't open AGL: $!"; while() { next if /^#/; chomp; next if /^$/; ($n,$u) = split /;/; if (length($u) > 4) {$u = substr($u,0,4)} # we consider only base character $AGL{$n} = $u; } close(IN); # read User's Glyph List open(IN, "glyphlist.usr") or die "Can't open UGL: $!"; while() { next if /^#/; chomp; next if /^$/; ($n,$u) = split /;/; if (length($u) > 4) {$u = substr($u,0,4)} # this shouldn't be used $AGL{$n} = $u; } close(IN); # we read the preprocessed Unicode database open(IN, "basechars.txt") or die "Can't open basechars.txt: $!"; while() { chomp; ($n,$u,$a) = split / /; $UNI{$n}{"base"} = $u; $UNI{$n}{"acc"} = ($a ? $a : "0000"); } close(IN); # read and parse all files with .enc extension in the directory `encodings' @files = glob("encodings/*.enc"); foreach $f (@files) { open (IN, "$f") or die "This can't happen!"; $i = 0; $f =~ /encodings\/(\w+)\./; $enc = $1; $ENCODINGS{$enc} = 1; while() { next if /^%/; s/%.*$//; s/^\s+//; s/\s+$//; @toks = split /\s+/; foreach $tok (@toks) { if ($i>1 && $i<258) { ${$enc}[$i-2] = find_unicode_value($tok); } $i++; } } if ($i != 260) {die "Can't parse file $f!"}; close(IN); } # find relevant base characters (base character is in some encoding(s)) foreach $composite (keys %UNI) { $ch = $composite; # if (!exists $USED_CHARS{$ch}) { # we don't need decompose characters # # already present in one of the fonts TRY: while(exists $UNI{$ch}{"base"}) { $ch = $UNI{$ch}{"base"}; if (exists $USED_CHARS{$ch}) { $UNI2{$composite}{"base"} = $ch; $UNI2{$composite}{"acc"} = $UNI{$composite}{"acc"}; last TRY; } } # } } # finally write C++ files $maxenc = keys %ENCODINGS; $maxbase = keys %UNI2; $banner = "// This file is generated automatically; don't modify it\n\n"; open(OUT, ">../thtexenc.cxx") or die; print OUT $banner; print OUT "static const int max_enc = $maxenc;\n"; print OUT "static const int max_base = $maxbase;\n\n"; print OUT "static const char* encodings[$maxenc] = {\n"; foreach $enc (sort keys %ENCODINGS) { print OUT " \"$enc\",\n"; } print OUT "};\n\n"; print OUT "static const int texenc[256][$maxenc] = {\n"; for ($i=0; $i < 256; $i++) { @tmp = (); foreach $enc (sort keys %ENCODINGS) { push(@tmp,"0x${$enc}[$i]"); } print OUT " {", join(", ",@tmp), "},\n"; } print OUT "};\n\n"; print OUT "static const int unibase[$maxbase][3] = {\n"; foreach $ch (sort keys %UNI2) { print OUT " {0x$ch, 0x$UNI2{$ch}{base}, 0x$UNI2{$ch}{acc}},\n"; } print OUT "};\n"; close OUT; therion/texenc/unidata.pl0000755000076400010400000000145410071010716016535 0ustar userAdministrators#!/usr/bin/perl -w # Parsing and simplification of the Unicode database (character decomposition). # The file `UnicodeData.txt' is not distributed with Therion. # Download it from http://www.unicode.org or don't use this program at all. # The output is basechars.txt file. # # Copyright (C) 2003 Martin Budaj open(IN, "UnicodeData.txt") or die "Can't open UnicodeData.txt: $!"; open (OUT, ">basechars.txt") or die; while() { chomp; ($n1,$n,$n,$n,$n,$n6) = split /;/; last if (length($n1)>4); # Therion doesn't support # higher Unicode values if ($n6 && !(/<.+> /)) { $n6 =~ s/<\w+> //; # if (length($n6) > 4) {$n6 = substr($n6,0,4)} # we take only the base char. print OUT "$n1 $n6\n"; } } close(IN); close(OUT); therion/th2ddataobject.cxx0000644000076400010400000001261512043471426016703 0ustar userAdministrators/** * @file th2ddataobject.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "th2ddataobject.h" #include "thexception.h" #include "thsymbolset.h" #include "thchenc.h" th2ddataobject::th2ddataobject() { this->pscrapoptr = NULL; this->nscrapoptr = NULL; this->fscrapptr = NULL; this->scale = TT_2DOBJ_SCALE_M; this->tags = TT_2DOBJ_TAG_CLIP_AUTO | TT_2DOBJ_TAG_VISIBILITY_ON; this->place = TT_2DOBJ_PLACE_DEFAULT; this->context = -1; this->m_subtype_str = NULL; } th2ddataobject::~th2ddataobject() { } int th2ddataobject::get_class_id() { return TT_2DDATAOBJECT_CMD; } bool th2ddataobject::is(int class_id) { if (class_id == TT_2DDATAOBJECT_CMD) return true; else return thdataobject::is(class_id); } thcmd_option_desc th2ddataobject::get_cmd_option_desc(const char * opts) { int id = thmatch_token(opts, thtt_2ddataobject_opt); if (id == TT_2DOBJ_UNKNOWN) return thdataobject::get_cmd_option_desc(opts); else switch(id) { case TT_2DOBJ_CONTEXT: return thcmd_option_desc(id,2); default: return thcmd_option_desc(id); } } void th2ddataobject::set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline) { int i; switch (cod.id) { case TT_2DOBJ_SCALE: this->scale = thmatch_token(*args, thtt_2dobj_scales); if (this->scale == TT_2DOBJ_SCALE_UNKNOWN) ththrow(("invalid scale -- %s",*args)) if (this->get_class_id() == TT_AREA_CMD) ththrow(("scale specification for area not allowed")) break; case TT_2DOBJ_CLIP: i = thmatch_token(*args, thtt_onoffauto); this->tags &= ~(TT_2DOBJ_TAG_CLIP_ON | TT_2DOBJ_TAG_CLIP_AUTO); switch (i) { case TT_TRUE: this->tags |= TT_2DOBJ_TAG_CLIP_ON; break; case TT_FALSE: break; case TT_AUTO: this->tags |= TT_2DOBJ_TAG_CLIP_AUTO; break; default: ththrow(("invalid clip -- %s",*args)) } break; case TT_2DOBJ_VISIBILITY: i = thmatch_token(*args, thtt_bool); this->tags &= ~TT_2DOBJ_TAG_VISIBILITY_ON; switch (i) { case TT_TRUE: this->tags |= TT_2DOBJ_TAG_VISIBILITY_ON; break; case TT_FALSE: break; default: ththrow(("invalid visibility switch -- %s",*args)) } break; case TT_2DOBJ_PLACE: this->place = thmatch_token(*args, thtt_2ddataobject_place); if (this->place == TT_2DOBJ_PLACE_UNKNOWN) ththrow(("invalid place value -- %s",*args)) break; case TT_2DOBJ_CONTEXT: this->context = thsymbolset__get_id(args[0], args[1]); if (this->context < 0) ththrow(("invalid object context -- %s %s", args[0], args[1])) if ((this->context > SYMP_ZZZ) && (this->context != SYMX_POINT_AIRDRAUGHT) && (this->context != SYMX_POINT_HEIGHT) && (this->context != SYMX_POINT_PASSAGEHEIGHT) && (this->context != SYMX_POINT_STATION) && (this->context != SYMX_POINT_WATERFLOW) && (this->context != SYMX_LINE_BORDER) && (this->context != SYMX_LINE_SURVEY) && (this->context != SYMX_LINE_WALL) && (this->context != SYMX_LINE_WATERFLOW)) ththrow(("object context not allowed -- %s %s", args[0], args[1])) break; default: thdataobject::set(cod, args, argenc, indataline); } } int th2ddataobject::get_context() { return THCTX_SCRAP; } void th2ddataobject::self_print_properties(FILE * outf) { thdataobject::self_print_properties(outf); fprintf(outf,"th2ddataobject:\n"); fprintf(outf,"\tscale: %d\n",this->scale); fprintf(outf,"\ttags: %d\n",this->tags); // insert intended print of object properties here } thbuffer sTTtype, sTTsubtype; void th2dsplitTT(char * src, char ** type, char ** subtype) { size_t sl, x, tl, stl; char * t, * st; sl = strlen(src); sTTtype.guarantee(sl+1); sTTsubtype.guarantee(sl+1); t = sTTtype.get_buffer(); st = sTTsubtype.get_buffer(); t[0] = 0; st[0] = 0; tl = 0; stl = 0; bool inst = false; for(x = 0; x < sl; x++) { if (src[x] == ':') { inst = true; } else if (inst) { st[stl] = src[x]; stl++; st[stl] = 0; } else { t[tl] = src[x]; tl++; t[tl] = 0; } } *type = t; *subtype = st; } void th2ddataobject::parse_u_subtype(const char * subtype) { if (th_is_keyword(subtype)) { this->m_subtype_str = this->db->strstore(subtype, true); } else ththrow(("invalid subtype name -- %s", subtype)) } therion/th2ddataobject.h0000644000076400010400000001123011113706714016316 0ustar userAdministrators/** * @file th2ddataobject.h * 2ddataobject module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef th2ddataobject_h #define th2ddataobject_h #include "thdataobject.h" /** * Point scale tokens. */ enum { TT_2DOBJ_SCALE_UNKNOWN, TT_2DOBJ_SCALE_XS, TT_2DOBJ_SCALE_S, TT_2DOBJ_SCALE_M, TT_2DOBJ_SCALE_L, TT_2DOBJ_SCALE_XL, }; /** * Point scale parsing table. */ static const thstok thtt_2dobj_scales[] = { {"L", TT_2DOBJ_SCALE_L}, {"M", TT_2DOBJ_SCALE_M}, {"S", TT_2DOBJ_SCALE_S}, {"XL", TT_2DOBJ_SCALE_XL}, {"XS", TT_2DOBJ_SCALE_XS}, {"huge", TT_2DOBJ_SCALE_XL}, {"l", TT_2DOBJ_SCALE_L}, {"large", TT_2DOBJ_SCALE_L}, {"m", TT_2DOBJ_SCALE_M}, {"normal", TT_2DOBJ_SCALE_M}, {"s", TT_2DOBJ_SCALE_S}, {"small", TT_2DOBJ_SCALE_S}, {"tiny", TT_2DOBJ_SCALE_XS}, {"xl", TT_2DOBJ_SCALE_XL}, {"xs", TT_2DOBJ_SCALE_XS}, {NULL, TT_2DOBJ_SCALE_UNKNOWN}, }; /** * 2ddataobject command options tokens. */ enum { TT_2DOBJ_UNKNOWN = 2000, TT_2DOBJ_SCALE = 2001, TT_2DOBJ_CLIP = 2002, TT_2DOBJ_PLACE = 2003, TT_2DOBJ_VISIBILITY = 2004, TT_2DOBJ_CONTEXT = 2005, }; /** * Default 2D object tags. */ enum { TT_2DOBJ_TAG_NONE = 0, TT_2DOBJ_TAG_CLIP_AUTO = 1024, TT_2DOBJ_TAG_CLIP_ON = 2048, TT_2DOBJ_TAG_VISIBILITY_ON = 4096, }; enum { TT_2DOBJ_PLACE_BOTTOM = 0, TT_2DOBJ_PLACE_DEFAULT_BOTTOM = 1, TT_2DOBJ_PLACE_DEFAULT = 3, TT_2DOBJ_PLACE_DEFAULT_TOP = 4, TT_2DOBJ_PLACE_TOP = 5, TT_2DOBJ_PLACE_UNKNOWN = 6, }; /** * 2ddataobject command options parsing table. */ static const thstok thtt_2ddataobject_opt[] = { {"clip", TT_2DOBJ_CLIP}, {"context", TT_2DOBJ_CONTEXT}, {"place", TT_2DOBJ_PLACE}, {"scale", TT_2DOBJ_SCALE}, {"visibility", TT_2DOBJ_VISIBILITY}, {"visible", TT_2DOBJ_VISIBILITY}, {NULL, TT_2DOBJ_UNKNOWN}, }; /** * 2ddataobject place options. */ static const thstok thtt_2ddataobject_place[] = { {"bottom", TT_2DOBJ_PLACE_BOTTOM}, {"default", TT_2DOBJ_PLACE_DEFAULT}, {"top", TT_2DOBJ_PLACE_TOP}, {NULL, TT_2DOBJ_PLACE_UNKNOWN}, }; /** * 2ddataobject class. */ class th2ddataobject : public thdataobject { public: const char * m_subtype_str; th2ddataobject * pscrapoptr, ///< Previos object in the scrap. * nscrapoptr; ///< Next object in the scrap. class thscrap * fscrapptr; ///< Father scrap pointer. int scale; ///< 2D map object scaling. unsigned tags; ///< 2D map object tags. int place, context; /** * Standard constructor. */ th2ddataobject(); /** * Standard destructor. */ ~th2ddataobject(); /** * Return class identifier. */ virtual int get_class_id(); /** * Return class name. */ virtual const char * get_class_name() {return "th2ddataobject";}; /** * Return true, if son of given class. */ virtual bool is(int class_id); /** * Return option description. */ virtual thcmd_option_desc get_cmd_option_desc(const char * opts); /** * Set command option. * * @param cod Command option description. * @param args Option arguments arry. * @param argenc Arguments encoding. */ virtual void set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline); /** * Print object properties. */ virtual void self_print_properties(FILE * outf); /** * Get context for object. */ virtual int get_context(); /** * Export object to metapost file. */ virtual bool export_mp(class thexpmapmpxs * out); /** * Export object to metapost file. */ virtual bool export_mp_end(class thexpmapmpxs * out); /** * Parse user defined subtype. */ void parse_u_subtype(const char * subtype); }; void th2dsplitTT(char * src, char ** type, char ** subtype); #endif therion/tharea.cxx0000644000076400010400000001533512043475722015272 0ustar userAdministrators/* * @file tharea.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "tharea.h" #include "thexception.h" #include "thobjectname.h" #include "thchenc.h" #include "thexpmap.h" #include "thline.h" tharea::tharea() { this->type = TT_AREA_TYPE_UNKNOWN; this->place = TT_2DOBJ_PLACE_DEFAULT_BOTTOM; this->first_line = NULL; this->last_line = NULL; this->m_outline_line = NULL; } tharea::~tharea() { if (this->m_outline_line != NULL) delete this->m_outline_line; } void tharea::start_insert() { if (this->type == TT_AREA_TYPE_U) { if (this->m_subtype_str == NULL) ththrow(("missing subtype specification for area of user defined type")) this->db->db2d.register_u_symbol(this->get_class_id(), this->m_subtype_str); } } int tharea::get_class_id() { return TT_AREA_CMD; } bool tharea::is(int class_id) { if (class_id == TT_AREA_CMD) return true; else return th2ddataobject::is(class_id); } int tharea::get_cmd_nargs() { return 1; } const char * tharea::get_cmd_end() { return "endarea"; } const char * tharea::get_cmd_name() { return "area"; } thcmd_option_desc tharea::get_cmd_option_desc(const char * opts) { // int id = thmatch_token(opts, thtt_area_opt); // if (id == TT_AREA_UNKNOWN) return th2ddataobject::get_cmd_option_desc(opts); // else // return thcmd_option_desc(id); } void tharea::set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline) { char * type, * subtype; if (cod.id == 1) cod.id = TT_AREA_TYPE; switch (cod.id) { case 0: thsplit_args(& this->db->db2d.mbf, *args); this->insert_border_line(this->db->db2d.mbf.get_size(), this->db->db2d.mbf.get_buffer()); break; case TT_AREA_TYPE: th2dsplitTT(*args, &type, &subtype); this->parse_type(type); if (strlen(subtype) > 0) this->parse_subtype(subtype); break; default: th2ddataobject::set(cod, args, argenc, indataline); } } void tharea::parse_type(char * tstr) { this->type = thmatch_token(tstr, thtt_area_types); if (this->type == TT_AREA_TYPE_UNKNOWN) ththrow(("unknown area type -- %s", tstr)) if (this->type == TT_AREA_TYPE_DIMENSIONS) ththrow(("area dimensions is not supported as ordinary type")) } void tharea::parse_subtype(char * ststr) { if (this->type == TT_AREA_TYPE_UNKNOWN) ththrow(("area type must be specified before subtype")) if (this->type == TT_AREA_TYPE_U) { this->parse_u_subtype(ststr); return; } else ththrow(("invalid type - subtype combination")) } void tharea::self_delete() { delete this; } void tharea::self_print_properties(FILE * outf) { th2ddataobject::self_print_properties(outf); fprintf(outf,"tharea:\n"); fprintf(outf,"\ttype: %d\n",this->type); if (this->first_line != NULL) { fprintf(outf,"\tborder lines:\n"); thdb2dab * cbl = this->first_line; while (cbl != NULL) { fprintf(outf,"\t\t"); fprintf(outf,cbl->name); fprintf(outf,"\n"); cbl = cbl->next_line; } } } void tharea::insert_border_line(int npars, char ** pars) { thdb2dab * bl; if (npars != 1) ththrow(("one line name per line allowed")) bl = this->db->db2d.insert_border_line(); bl->source = this->db->csrc; thparse_objectname(bl->name,& this->db->buff_stations,*pars); if (this->last_line == NULL) { this->first_line = bl; this->last_line = bl; bl->next_line = NULL; bl->prev_line = NULL; } else { this->last_line->next_line = bl; bl->prev_line = this->last_line; this->last_line = bl; } } bool tharea::export_mp(class thexpmapmpxs * out) { int macroid = SYMA_WATER, omacroid; #define tharea_type_export_mp(type,mid) case type: \ macroid = mid; \ break; switch (this->type) { tharea_type_export_mp(TT_AREA_TYPE_SAND, SYMA_SAND) tharea_type_export_mp(TT_AREA_TYPE_DEBRIS, SYMA_DEBRIS) tharea_type_export_mp(TT_AREA_TYPE_SUMP, SYMA_SUMP) tharea_type_export_mp(TT_AREA_TYPE_WATER, SYMA_WATER) tharea_type_export_mp(TT_AREA_TYPE_BLOCKS, SYMA_BLOCKS) tharea_type_export_mp(TT_AREA_TYPE_SNOW, SYMA_SNOW) tharea_type_export_mp(TT_AREA_TYPE_ICE, SYMA_ICE) tharea_type_export_mp(TT_AREA_TYPE_CLAY, SYMA_CLAY) tharea_type_export_mp(TT_AREA_TYPE_PEBBLES, SYMA_PEBBLES) tharea_type_export_mp(TT_AREA_TYPE_BEDROCK, SYMA_BEDROCK) tharea_type_export_mp(TT_AREA_TYPE_FLOWSTONE, SYMA_FLOWSTONE) tharea_type_export_mp(TT_AREA_TYPE_MOONMILK, SYMA_MOONMILK) tharea_type_export_mp(TT_AREA_TYPE_U, SYMA_U) } omacroid = macroid; if (this->context >= 0) macroid = this->context; if (!out->symset->is_assigned(macroid)) return(false); if (this->first_line == NULL) return(false); if (out->file == NULL) return(true); th2ddataobject::export_mp(out); thdb_revision_set_type::iterator ri = this->db->revision_set.find(threvision(this->id, 0)); fprintf(out->file,"current_src := \"%s [%ld]\";\n", ri->srcf.name, ri->srcf.line); fprintf(out->file,"string area_border[];\n"); thdb2dab * bl = this->first_line; int blnum = 1; while (bl != NULL) { fprintf(out->file,"area_border[%d] := \"%s\";\n", blnum, bl->line->name); bl = bl->next_line; blnum++; } if (this->type == TT_AREA_TYPE_U) { out->symset->export_mp_symbol_options(out->file, -1); fprintf(out->file,"a_u_%s(buildcycle(",this->m_subtype_str); this->db->db2d.use_u_symbol(this->get_class_id(), this->m_subtype_str); } else { out->symset->export_mp_symbol_options(out->file, omacroid); fprintf(out->file,"%s(buildcycle(",out->symset->get_mp_macro(omacroid)); } this->first_line->line->export_path_mp(out); bl = this->first_line->next_line; while (bl != NULL) { fprintf(out->file,",\n"); bl->line->export_path_mp(out); bl = bl->next_line; } fprintf(out->file,"));\n"); th2ddataobject::export_mp_end(out); return(false); } therion/tharea.h0000644000076400010400000001014110721450266014702 0ustar userAdministrators/** * @file tharea.h * Area module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef tharea_h #define tharea_h #include "th2ddataobject.h" #include "thdb2dab.h" /** * Area command options tokens. */ enum { TT_AREA_UNKNOWN = 3000, TT_AREA_TYPE = 3001, }; /** * Area command options parsing table. */ static const thstok thtt_area_opt[] = { {NULL, TT_AREA_UNKNOWN}, }; /** * Area type tokens. */ enum { TT_AREA_TYPE_UNKNOWN, TT_AREA_TYPE_U, TT_AREA_TYPE_WATER, TT_AREA_TYPE_SUMP, TT_AREA_TYPE_SAND, TT_AREA_TYPE_DEBRIS, TT_AREA_TYPE_BLOCKS, TT_AREA_TYPE_SNOW, TT_AREA_TYPE_ICE, TT_AREA_TYPE_CLAY, TT_AREA_TYPE_PEBBLES, TT_AREA_TYPE_BEDROCK, TT_AREA_TYPE_FLOWSTONE, TT_AREA_TYPE_MOONMILK, TT_AREA_TYPE_DIMENSIONS, }; /** * Area types parsing table. */ static const thstok thtt_area_types[] = { {"bedrock", TT_AREA_TYPE_BEDROCK}, {"blocks", TT_AREA_TYPE_BLOCKS}, {"clay", TT_AREA_TYPE_CLAY}, {"debris", TT_AREA_TYPE_DEBRIS}, {"dimensions", TT_AREA_TYPE_DIMENSIONS}, {"flowstone", TT_AREA_TYPE_FLOWSTONE}, {"ice", TT_AREA_TYPE_ICE}, {"moonmilk", TT_AREA_TYPE_MOONMILK}, {"pebbles", TT_AREA_TYPE_PEBBLES}, {"sand", TT_AREA_TYPE_SAND}, {"snow", TT_AREA_TYPE_SNOW}, {"sump", TT_AREA_TYPE_SUMP}, {"u",TT_AREA_TYPE_U}, {"water", TT_AREA_TYPE_WATER}, {NULL, TT_AREA_TYPE_UNKNOWN}, }; /** * Area class. */ class tharea : public th2ddataobject { public: friend class thdb2d; int type; ///< Area type. thdb2dab * first_line, ///< First border line. * last_line; ///< Last border line. class thline * m_outline_line; void insert_border_line(int npars, char ** pars); ///< Insert border line. public: /** * Standard constructor. */ tharea(); /** * Standard destructor. */ ~tharea(); /** * Return class identifier. */ virtual int get_class_id(); /** * Return class name. */ virtual const char * get_class_name() {return "tharea";}; /** * Return true, if son of given class. */ virtual bool is(int class_id); /** * Return number of command arguments. */ virtual int get_cmd_nargs(); /** * Return command name. */ virtual const char * get_cmd_name(); /** * Return command end option. */ virtual const char * get_cmd_end(); /** * Return option description. */ virtual thcmd_option_desc get_cmd_option_desc(const char * opts); /** * Set command option. * * @param cod Command option description. * @param args Option arguments arry. * @param argenc Arguments encoding. */ virtual void set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline); /** * Delete this object. * * @warn Always use this methos instead of delete function. */ virtual void self_delete(); /** * Print object properties. */ virtual void self_print_properties(FILE * outf); /** * Export to metapost file. */ virtual bool export_mp(class thexpmapmpxs * out); void parse_type(char * tstr); ///< Parse area type. void parse_subtype(char * ststr); ///< Parse area subtype. virtual void start_insert(); }; #endif therion/thattr.cxx0000644000076400010400000005145512065355776015351 0ustar userAdministrators/** * @file thattr.cxx */ /* Copyright (C) 2007 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thattr.h" #include "extern/shapefil.h" #include "thexception.h" #include "thchenc.h" #include #include #include #ifdef THMSVC #define snprintf _snprintf #define strcasecmp _stricmp #endif thattr::thattr() { this->m_num_fields = 0; this->m_num_objects = 0; this->m_obj_last = NULL; } bool thattr_attr::has_flag(unsigned long flag) { return ((this->m_flags & flag) != 0); } void thattr_attr::set_flag(unsigned long flag, bool value) { if (value) this->m_flags |= flag; else this->m_flags &= (~flag); } void thattr_obj::set_tree_level(size_t level) { m_tree_level = level; } thattr_field * thattr::insert_field(const char * name) { thattr_field tmp, * r; tmp.m_id = this->m_num_fields++; tmp.m_name = name; tmp.m_parent = this; r = &(*this->m_field_list.insert(this->m_field_list.end(), tmp)); for(size_t i = 0; i < tmp.m_name.size(); ++i) tmp.m_name[i] = tolower(tmp.m_name[i]); this->m_field_map[tmp.m_name] = r; return r; } thattr_field * thattr::get_field(const char * name, bool ins) { thattr_name2field_map::iterator it; std::string str(name); for(size_t i = 0; i < str.size(); ++i) str[i] = tolower(str[i]); it = this->m_field_map.find(str); if (it == this->m_field_map.end()) { if (!ins) return NULL; else { return this->insert_field(name); } } else return it->second; } thattr_obj * thattr::get_object() { return this->m_obj_last; } thattr_obj * thattr::get_object(long user_id) { if ((this->m_obj_last != NULL) && (this->m_obj_last->m_user_id == user_id)) return this->m_obj_last; thattr_usrid2obj_map::iterator it; it = this->m_obj_usrmap.find(user_id); if (it == this->m_obj_usrmap.end()) return NULL; else return it->second; } thattr_obj * thattr::insert_object(void * data, long user_id) { thattr_obj tmp, * r; r = NULL; if (user_id >= 0) { r = this->get_object(user_id); } if (r == NULL) { tmp.m_id = this->m_num_objects++; tmp.m_data = data; tmp.m_parent = this; r = &(*this->m_obj_list.insert(this->m_obj_list.end(), tmp)); this->m_obj_map[tmp.m_id] = r; if (user_id > -1) { r->m_user_id = user_id; this->m_obj_usrmap[user_id] = r; } } this->m_obj_last = r; return r; } void thattr::insert_attribute(const char * name, thattr_attr & attr, long user_id) { // Find object. thattr_obj * o; if (user_id < 0) o = this->m_obj_last; else o = this->get_object(user_id); if (o == NULL) return; // Find field. thattr_field * f = this->get_field(name, true); // Insert attribute. if ((attr.m_type == THATTR_STRING) && (attr.m_val_string.length() == 0)) { o->m_attributes.erase(f->m_id); } else { attr.m_field = f; attr.m_obj = o; o->m_attributes[f->m_id] = attr; o->m_last_attribute = &(o->m_attributes[f->m_id]); } } thattr_attr * thattr::get_attribute() { thattr_obj * o = this->m_obj_last; if (o == NULL) return NULL; thattr_attr * a = o->m_last_attribute; return a; } void thattr::insert_attribute(const char * name, const char * value, long user_id) { int sv(0); long lv(0); double d(0.0); thattr_attr a; a.m_type = THATTR_STRING; // cast value type if ((value != NULL) && (strlen(value) > 0)) { thparse_double(sv, d, value); if (sv == TT_SV_NUMBER) { a.m_type = THATTR_DOUBLE; lv = long(d); if (double(lv) == d) { a.m_type = THATTR_INTEGER; } } } // insert attribute switch (a.m_type) { case THATTR_INTEGER: a.m_val_long = lv; break; case THATTR_DOUBLE: a.m_val_double = d; break; case THATTR_STRING: if (value != NULL) a.m_val_string = std::string(value); else a.m_val_string = std::string(""); break; } this->insert_attribute(name, a, user_id); } void thattr::insert_attribute(const char * name, double value, long user_id) { thattr_attr a; a.m_type = THATTR_DOUBLE; a.m_val_double = value; this->insert_attribute(name, a, user_id); } void thattr::insert_attribute(const char * name, long value, long user_id) { thattr_attr a; a.m_type = THATTR_INTEGER; a.m_val_long = value; this->insert_attribute(name, a, user_id); } void thattr::copy_attributes(thattr_obj * object, long user_id) { if (object == NULL) return; thattr_id2attr_map::iterator it; it = object->m_attributes.begin(); thattr_attr tmp; while (it != object->m_attributes.end()) { tmp = it->second; this->insert_attribute(it->second.m_field->m_name.c_str(), tmp, user_id); ++it; } } std::string expdbf_field_name(std::string name, std::set & fset) { std::string nn; nn = name; int i; char x[20]; if (nn.length() > 11) { do { i = 0; sprintf(x, "%d", i); nn = name.substr(0, 10 - strlen(x)); nn += "_"; nn += x; i++; } while (fset.find(nn) != fset.end()); } fset.insert(nn); return nn; } void thattr::analyze_fields() { // modify record names to match DBF format size_t i; std::set fnset; thattr_field * cf; thattr_field_list::iterator fli; for(fli = this->m_field_list.begin(); fli != this->m_field_list.end(); ++fli) { cf = &(*fli); cf->m_type = THATTR_INTEGER; cf->m_present = false; cf->m_xdbf_decimals = 0; cf->m_xdbf_width = 1; cf->m_xdbf_name = expdbf_field_name(cf->m_name, fnset); if (cf->m_double_format.empty()) cf->m_double_format = "%.1f"; cf->m_xmp_name = "ATTR_"; cf->m_xmp_name += cf->m_name; for(i = 5; i < cf->m_xmp_name.size(); ++i) { if (cf->m_xmp_name[i] <= '9') cf->m_xmp_name[i] = cf->m_xmp_name[i] + 8; else if ((cf->m_xmp_name[i] < 'a')) cf->m_xmp_name[i] = tolower(cf->m_xmp_name[i]); } cf->m_maxs = 0; } // check record types and limits long cvall; double cvald; size_t cslen; int ctype; char b[64]; thattr_attr * ca; thattr_obj_list::iterator oi; thattr_id2attr_map::iterator ai; for(oi = this->m_obj_list.begin(); oi != this->m_obj_list.end(); ++oi) { for(ai = oi->m_attributes.begin(); ai != oi->m_attributes.end(); ai++) { ca = &(ai->second); cf = ca->m_field; ctype = ca->m_type; switch (ctype) { case THATTR_INTEGER: cvall = ca->m_val_long; ca->m_val_double = double(cvall); sprintf(b,"%ld", cvall); ca->m_val_string = b; break; case THATTR_DOUBLE: cvald = ai->second.m_val_double; ca->m_val_long = long(cvald); sprintf(b,"%f", cvald); ca->m_val_string = b; if (cf->m_type == THATTR_INTEGER) cf->m_type = THATTR_DOUBLE; break; case THATTR_STRING: if ((cf->m_type == THATTR_INTEGER) || (cf->m_type == THATTR_DOUBLE)) cf->m_type = THATTR_STRING; break; } cslen = ca->m_val_string.length(); if ((!cf->m_present) && ((ctype == THATTR_INTEGER) || (ctype == THATTR_DOUBLE))) { cf->m_maxd = ca->m_val_double; cf->m_mind = ca->m_val_double; cf->m_maxi = ca->m_val_long; cf->m_mini = ca->m_val_long; } cf->m_present = true; if (cslen > cf->m_maxs) cf->m_maxs = cslen; if ((ctype == THATTR_INTEGER) || (ctype == THATTR_DOUBLE)) { if (cf->m_maxd < ca->m_val_double) cf->m_maxd = ca->m_val_double; if (cf->m_mind > ca->m_val_double) cf->m_mind = ca->m_val_double; if (cf->m_maxi < ca->m_val_long) cf->m_maxi = ca->m_val_long; if (cf->m_mini > ca->m_val_long) cf->m_mini = ca->m_val_long; } } } // postprocess fields #define myabs(x) ((x) > 0 ? (x) : ((x) < 0 ? -(x) : 1)) int w2; for(fli = this->m_field_list.begin(); fli != this->m_field_list.end(); ++fli) { cf = &(*fli); switch (cf->m_type) { case THATTR_INTEGER: cf->m_xdbf_decimals = 0; cf->m_xdbf_width = (int) log10(double(myabs(cf->m_maxi))); w2 = (int) log10(double(myabs(cf->m_mini))); if (cf->m_xdbf_width < w2) cf->m_xdbf_width = w2; ++cf->m_xdbf_width; break; case THATTR_DOUBLE: cf->m_xdbf_width = (int) log10(myabs(cf->m_maxd)); w2 = (int) log10(myabs(cf->m_mind)); if (cf->m_xdbf_width < w2) cf->m_xdbf_width = w2; ++cf->m_xdbf_width; cf->m_xdbf_decimals = 0; if (cf->m_xdbf_width < 12) { cf->m_xdbf_decimals = 12 - cf->m_xdbf_width; cf->m_xdbf_width = 12; } break; case THATTR_STRING: cf->m_xdbf_width = int(cf->m_maxs + 1); break; } } } void thattr::export_dbf(const char * fname, int encoding) { // Create file. DBFHandle h; thattr_attr * ca; thattr_field * cf; thattr_obj_list::iterator oi; thattr_id2attr_map::iterator ai; thattr_field_list::iterator fli; thbuffer enc; this->analyze_fields(); h = DBFCreate(fname); if (h == NULL) { thwarning(("unable to open file for output -- %s", fname)); return; } // Create fields. DBFFieldType ftype(FTInvalid); for(fli = this->m_field_list.begin(); fli != this->m_field_list.end(); ++fli) { cf = &(*fli); switch (cf->m_type) { case THATTR_INTEGER: ftype = FTInteger; break; case THATTR_DOUBLE: ftype = FTDouble; break; case THATTR_STRING: ftype = FTString; break; } cf->m_xdbf_field = DBFAddField(h, cf->m_xdbf_name.c_str(), ftype, cf->m_xdbf_width, cf->m_xdbf_decimals); if (cf->m_xdbf_field == -1) { thwarning(("error writing to %s", fname)) goto EXPORT_DBF_EXIT; } } // Insert objects and write fields. for(oi = this->m_obj_list.begin(); oi != this->m_obj_list.end(); ++oi) { for(fli = this->m_field_list.begin(); fli != this->m_field_list.end(); ++fli) { cf = &(*fli); ai = oi->m_attributes.find(cf->m_id); if (ai == oi->m_attributes.end()) { DBFWriteNULLAttribute(h, (int) oi->m_id, cf->m_xdbf_field); } else { ca = &(ai->second); switch (cf->m_type) { case THATTR_INTEGER: DBFWriteIntegerAttribute(h, (int) oi->m_id, cf->m_xdbf_field, (int) ca->m_val_long); break; case THATTR_DOUBLE: DBFWriteDoubleAttribute(h, (int) oi->m_id, cf->m_xdbf_field, ca->m_val_double); break; case THATTR_STRING: thdecode(&enc, encoding, ca->m_val_string.c_str()); DBFWriteStringAttribute(h, (int) oi->m_id, cf->m_xdbf_field, enc.get_buffer()); //DBFWriteStringAttribute(h, (int) oi->m_id, cf->m_xdbf_field, ca->m_val_string.c_str()); break; } } } } // Close DBF file. EXPORT_DBF_EXIT: DBFClose(h); } void thattr::export_mp_header(FILE * f) { if (this->m_num_fields == 0) return; this->analyze_fields(); } void thattr::export_mp_object_begin(FILE * f, long user_id) { if (this->m_num_fields == 0) return; thattr_obj * o = this->get_object(user_id); if (o == NULL) return; if (f == NULL) return; thattr_attr * ca; thattr_field * cf; thattr_id2attr_map::iterator ai; thattr_field_list::iterator fli; thbuffer enc; std::string news; for(fli = this->m_field_list.begin(); fli != this->m_field_list.end(); ++fli) { cf = &(*fli); ai = o->m_attributes.find(cf->m_id); if (ai != o->m_attributes.end()) { ca = &(ai->second); news = ca->m_val_string; thdecode_mp(&enc, news.c_str()); fprintf(f,"string %s;\n", cf->m_xmp_name.c_str()); fprintf(f,"%s := \"%s\";\n", cf->m_xmp_name.c_str(), enc.get_buffer()); } } } void thattr::export_mp_object_end(FILE * f, long user_id) { if (this->m_num_fields == 0) return; thattr_obj * o = this->get_object(user_id); if (o == NULL) return; if (f == NULL) return; thattr_field * cf; thattr_id2attr_map::iterator ai; thattr_field_list::iterator fli; for(fli = this->m_field_list.begin(); fli != this->m_field_list.end(); ++fli) { cf = &(*fli); ai = o->m_attributes.find(cf->m_id); if (ai != o->m_attributes.end()) { fprintf(f,"save %s;\n", cf->m_xmp_name.c_str()); } } } void thattr::export_txt(const char * fname, int encoding) { // Create file. FILE * f; unsigned i; thattr_attr * ca; thattr_field * cf; thattr_obj_list::iterator oi; thattr_id2attr_map::iterator ai; thattr_field_list::iterator fli; thbuffer enc; this->analyze_fields(); f = fopen(fname, "w"); if (f == NULL) { thwarning(("unable to open file for output -- %s", fname)); return; } // Create fields. bool hasone = false; for(fli = this->m_field_list.begin(); fli != this->m_field_list.end(); ++fli) { cf = &(*fli); fprintf(f,"%s%s",hasone ? "\t" : "",fli->m_name.c_str()); hasone = true; } fprintf(f,"\n"); // Insert objects and write fields. const char * value; for(oi = this->m_obj_list.begin(); oi != this->m_obj_list.end(); ++oi) { hasone = false; for(fli = this->m_field_list.begin(); fli != this->m_field_list.end(); ++fli) { cf = &(*fli); ai = oi->m_attributes.find(cf->m_id); if (ai == oi->m_attributes.end()) { value = ""; } else { ca = &(ai->second); value = ca->m_val_string.c_str(); } if (m_tree && (!hasone)) { for(i = 0; i < oi->m_tree_level; i++) fprintf(f," "); } fprintf(f,"%s%s",hasone ? "\t" : "",value); hasone = true; } fprintf(f,"\n"); } fclose(f); } void thattr::export_kml(const char * fname, const char * name_field) { // Create file. FILE * f; thattr_attr * ca; thattr_field * cf; thattr_obj_list::iterator oi, oinext; thattr_id2attr_map::iterator ai; thattr_field_list::iterator fli; thbuffer enc; this->analyze_fields(); thattr_field * lat = get_field("Latitude", false), * lon = get_field("Longitude", false), * alt = get_field("Altitude", false), * namef = get_field(name_field, false); double dlon, dlat, dalt; if ((lat == NULL) || (lon == NULL)) { thwarning(("geographical reference is not associated with table")); return; } f = fopen(fname, "w"); if (f == NULL) { thwarning(("unable to open file for output -- %s", fname)); return; } fprintf(f,"\n\n\n"); fprintf(f,"Therion KML export\nTherion KML export.\n"); // Insert objects and write fields. const char * value; bool hasone; int clevel, nlevel; clevel = 0; for(oi = this->m_obj_list.begin(); oi != this->m_obj_list.end();) { oinext = oi; oinext ++; if ((oinext != this->m_obj_list.end()) && (oinext->m_tree_level > oi->m_tree_level)) { ai = oi->m_attributes.find(namef->m_id); fprintf(f,"\n%s\n",ai->second.m_val_string.c_str()); clevel++; } else { ai = oi->m_attributes.find(lat->m_id); dlat = ai->second.m_val_double; ai = oi->m_attributes.find(lon->m_id); dlon = ai->second.m_val_double; ai = oi->m_attributes.find(alt->m_id); dalt = ai->second.m_val_double; if (namef != NULL) ai = oi->m_attributes.find(namef->m_id); fprintf(f,"\n%s\n\n%.14f,%.14f,%.14f\n\n\n", (namef != NULL) ? ai->second.m_val_string.c_str() : "", dlon, dlat, dalt); } //for(fli = this->m_field_list.begin(); fli != this->m_field_list.end(); ++fli) { // cf = &(*fli); // ai = oi->m_attributes.find(cf->m_id); // if (ai == oi->m_attributes.end()) { // value = ""; // } else { // ca = &(ai->second); // value = ca->m_val_string.c_str(); // } // fprintf(f,"%s%s",hasone ? "\t" : "",value); //} oi++; nlevel = 0; if (oi != this->m_obj_list.end()) nlevel = oi->m_tree_level; while (nlevel < clevel) { fprintf(f,"\n"); clevel--; } } fprintf(f,"\n\n"); fclose(f); } void thattr::export_html(const char * fname, int encoding) { // Create file. FILE * f; thattr_attr * ca; thattr_field * cf; thattr_obj_list::iterator oi, oinext; thattr_id2attr_map::iterator ai; thattr_field_list::iterator fli; thbuffer enc; const char * alstr; this->analyze_fields(); f = fopen(fname, "w"); if (f == NULL) { thwarning(("unable to open file for output -- %s", fname)); return; } // Create fields. fprintf(f,"\n\ntherion table output\n" "\n" "\n" "\n" "\n\n"); fprintf(f,"\n"); for(fli = this->m_field_list.begin(); fli != this->m_field_list.end(); ++fli) { cf = &(*fli); if ((cf->m_type == THATTR_DOUBLE) || (cf->m_type == THATTR_INTEGER)) { alstr = "right"; } else { alstr = "left"; } fprintf(f,"", alstr, fli->m_name.c_str()); } fprintf(f,"\n"); // Insert objects and write fields. const char * value; bool header_value; thbuffer valb; valb.guarantee(128); std::string value_plus; for(oi = this->m_obj_list.begin(); oi != this->m_obj_list.end(); ++oi) { fprintf(f,"", oi->m_tree_node_id); header_value = true; for(fli = this->m_field_list.begin(); fli != this->m_field_list.end(); ++fli) { cf = &(*fli); if ((cf->m_type == THATTR_DOUBLE) || (cf->m_type == THATTR_INTEGER)) { alstr = "right"; } else { alstr = "left"; } ai = oi->m_attributes.find(cf->m_id); ca = NULL; if (ai == oi->m_attributes.end()) { value = " "; } else { ca = &(ai->second); if (ca->m_type == THATTR_DOUBLE) { snprintf(valb.get_buffer(), 127, cf->m_double_format.c_str(), ca->m_val_double); value = valb.get_buffer(); } else value = ca->m_val_string.c_str(); } fprintf(f,"", value); header_value = false; } fprintf(f,"\n"); } fprintf(f,"
%s
m_tree_level); oinext = oi; oinext++; if ((oinext != this->m_obj_list.end()) && (oinext->m_tree_level > oi->m_tree_level)) { value_plus = "m_tree_node_id; value_plus += "')\">"; value_plus += value; value_plus += ""; value = value_plus.c_str(); } } if ((ca != NULL) && (ca->has_flag(THATTRFLAG_HIDDEN))) fprintf(f," style=\"color:#808080\""); fprintf(f,">%s
\n"); fprintf(f,"\n\n"); fclose(f); } therion/thattr.h0000644000076400010400000001243412050464474014756 0ustar userAdministrators/** * @file thattr.h * Generic object attribute structure. */ /* Copyright (C) 2007 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thattr_h #define thattr_h #include #include #include #include #include "thmbuffer.h" #include "thchenc.h" enum { THATTR_NA, THATTR_STRING, THATTR_DOUBLE, THATTR_INTEGER, }; /** * Single attribute structure. */ enum { THATTRFLAG_NONE = 0, THATTRFLAG_HIDDEN = 1, }; struct thattr_attr { std::string m_val_string; ///< String value. unsigned long m_flags; ///< Value flags. double m_val_double; ///< Double value. long m_val_long; ///< Integer value. int m_type; ///< Attribute type. thattr_attr() : m_flags(THATTRFLAG_NONE) {} bool has_flag(unsigned long flag); void set_flag(unsigned long flag, bool value); struct thattr_field * m_field; ///< Attribute's field. struct thattr_obj * m_obj; ///< Attribute's object. }; typedef std::map thattr_id2attr_map; /** * Field structure. */ struct thattr_field { std::string m_name; ///< Field name. size_t m_id; ///< Internal field identifier. struct thattr * m_parent; ///< Parent attribute class. int m_type; ///< Generic export type. bool m_present; ///< Whether there is any value present. long m_mini, ///< Minimum integer value. m_maxi; ///< Maximum integer value. double m_mind, ///< Minimum double value. m_maxd; ///< Maximum double value. size_t m_maxs; ///< Maximum string length. int m_xdbf_width, ///< DBF field width. m_xdbf_decimals, ///< DBF field decimals. m_xdbf_field; ///< DBF field identifier. std::string m_xdbf_name; ///< DBF field name. std::string m_xmp_name; ///< Metapost field name. // m_xmp_last; ///< Last string value exported for given field. std::string m_double_format; ///< Double format. }; typedef std::map thattr_name2field_map; typedef std::list thattr_field_list; /** * Object structure. */ struct thattr_obj { long m_user_id; ///< User defined ID. size_t m_id, ///< Internal ID. m_tree_level; ///< Tree level of object, if table has tree structure. const char * m_tree_node_id; ///< Tree node id. void * m_data; ///< User defined data. thattr_id2attr_map m_attributes; ///< Map of attributes. thattr_attr * m_last_attribute; ///< Last attribute set for given object. struct thattr * m_parent; ///< Parent attribute class. thattr_obj() : m_user_id(-1), m_tree_level(0), m_tree_node_id(""), m_data(NULL), m_last_attribute(NULL) {} void set_tree_level(size_t level); }; typedef std::map thattr_id2obj_map; typedef std::map thattr_usrid2obj_map; typedef std::list thattr_obj_list; /** * Generic object attribute structure. */ struct thattr { size_t m_num_fields, ///< Number of fields. m_num_objects; ///< Number of objects. bool m_tree; ///< Whether table has a tree structure. thattr_obj_list m_obj_list; ///< List of objects. thattr_id2obj_map m_obj_map; ///< ID -> Object map. thattr_usrid2obj_map m_obj_usrmap; ///< User ID -> Object map. thattr_field_list m_field_list; ///< List of all fields. thattr_name2field_map m_field_map; ///< Name -> Field map. thattr(); thattr_field * insert_field(const char * name); thattr_field * get_field(const char * name, bool ins = false); thattr_obj * m_obj_last; ///< Last inserted object. thattr_obj * insert_object(void * data, long user_id = -1); thattr_obj * get_object(); ///< Return last inserted object. thattr_obj * get_object(long user_id); void insert_attribute(const char * name, thattr_attr & attr, long user_id = -1); void insert_attribute(const char * name, const char * value, long user_id = -1); void insert_attribute(const char * name, double value, long user_id = -1); void insert_attribute(const char * name, long value, long user_id = -1); thattr_attr * get_attribute(); void copy_attributes(thattr_obj * object, long user_id = -1); void analyze_fields(); void export_dbf(const char * fname, int encoding = TT_UTF_8); void export_txt(const char * fname, int encoding = TT_UTF_8); void export_html(const char * fname, int encoding = TT_UTF_8); void export_kml(const char * fname, const char * name_field); void export_mp_header(FILE * f); void export_mp_object_begin(FILE * f, long user_id); void export_mp_object_end(FILE * f, long user_id); }; #endif therion/thbezier.cxx0000644000076400010400000013107211576361176015646 0ustar userAdministrators/** * @file thbezier.cxx */ /* * Bezier interpolation for inkscape drawing code. * Original code published in: * An Algorithm for Automatically Fitting Digitized Curves * by Philip J. Schneider * "Graphics Gems", Academic Press, 1990 * * Authors: * Philip J. Schneider * Lauris Kaplinski * Peter Moulder * * Copyright (C) 1990 Philip J. Schneider * Copyright (C) 2001 Lauris Kaplinski * Copyright (C) 2001 Ximian, Inc. * Copyright (C) 2003,2004 Monash University * */ /* Copyright (C) 2007 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thbezier.h" #include #include #include #define __SP_BEZIER_UTILS_C__ #define SP_HUGE 1e5 #define noBEZIER_DEBUG #ifdef HAVE_CONFIG_H # include #endif #ifdef HAVE_IEEEFP_H # include #endif //#include //#include //#include //#include //#include #include #ifdef THMSVC #include #define hypot _hypot #endif #define g_return_val_if_fail(C,V) if (!(C)) return (V); #define g_return_if_fail(C) if (!(C)) return; #define g_new(T,L) new T [L]; #define g_free(V) if (V != NULL) delete [] V #define g_assert(X) assert(X) /* You might try changing the above to if you have problems. * Whether you use math.h or cmath, you may need to edit the .cpp file * and/or other .h files to use the same header file. */ #if defined(__isnan) # define isNaN(_a) (__isnan(_a)) /* MacOSX/Darwin definition < 10.4 */ #elif defined(WIN32) || defined(_isnan) # define isNaN(_a) (_isnan(_a)) /* Win32 definition */ #elif defined(isnan) || defined(__FreeBSD__) || defined(__osf__) # define isNaN(_a) (isnan(_a)) /* GNU definition */ #else # define isNaN(_a) (std::isnan(_a)) #endif /* If the above doesn't work, then try (a != a). * Also, please report a bug as per http://www.inkscape.org/report_bugs.php, * giving information about what platform and compiler version you're using. */ #if defined(__isfinite) # define isFinite(_a) (__isfinite(_a)) /* MacOSX/Darwin definition < 10.4 */ #elif defined(__sgi) # define isFinite(_a) (_isfinite(_a)) #elif defined(isfinite) # define isFinite(_a) (isfinite(_a)) #elif defined(__osf__) # define isFinite(_a) (finite(_a) && !isNaN(_a)) #elif defined(THMSVC) # define isFinite(_a) (_finite(_a) && !isNaN(_a)) #else # define isFinite(_a) (std::isfinite(_a)) #endif /* If the above doesn't work, then try (finite(_a) && !isNaN(_a)) or (!isNaN((_a) - (_a))). * Also, please report a bug as per http://www.inkscape.org/report_bugs.php, * giving information about what platform and compiler version you're using. */ class NR_Point { private: double _pt[2]; public: inline NR_Point() { _pt[0] = _pt[1] = 0; } inline NR_Point(double x, double y) { _pt[0] = x; _pt[1] = y; } inline NR_Point(NR_Point const &p) { for (unsigned i = 0; i < 2; ++i) { _pt[i] = p._pt[i]; } } inline NR_Point &operator=(NR_Point const &p) { for (unsigned i = 0; i < 2; ++i) { _pt[i] = p._pt[i]; } return *this; } inline double operator[](unsigned i) const { return _pt[i]; } inline double &operator[](unsigned i) { return _pt[i]; } //double operator[](size_t d) const throw() { return _pt[d]; } //double &operator[](size_t d) throw() { return _pt[d]; } /** Return a point like this point but rotated -90 degrees. (If the y axis grows downwards and the x axis grows to the right, then this is 90 degrees counter-clockwise.) **/ NR_Point ccw() const { return NR_Point(_pt[1], -_pt[0]); } /** Return a point like this point but rotated +90 degrees. (If the y axis grows downwards and the x axis grows to the right, then this is 90 degrees clockwise.) **/ NR_Point cw() const { return NR_Point(-_pt[1], _pt[0]); } void normalize(); inline NR_Point &operator+=(NR_Point const &o) { for ( unsigned i = 0 ; i < 2 ; ++i ) { _pt[i] += o._pt[i]; } return *this; } inline NR_Point &operator-=(NR_Point const &o) { for ( unsigned i = 0 ; i < 2 ; ++i ) { _pt[i] -= o._pt[i]; } return *this; } inline NR_Point &operator/=(double const s) { for ( unsigned i = 0 ; i < 2 ; ++i ) { _pt[i] /= s; } return *this; } inline NR_Point &operator*=(double const s) { for ( unsigned i = 0 ; i < 2 ; ++i ) { _pt[i] *= s; } return *this; } //inline bool operator == (const NR_Point &in_pnt) const { // return ((_pt[0] == in_pnt[0]) && (_pt[1] == in_pnt[1])); //} }; inline NR_Point rot90(NR_Point const &p) { return NR_Point(-p[1], p[0]); } inline NR_Point operator+(NR_Point const &a, NR_Point const &b) { NR_Point ret; for (int i = 0; i < 2; i++) { ret[i] = a[i] + b[i]; } return ret; } inline double dot(NR_Point const &a, NR_Point const &b) { double ret = 0; for ( int i = 0 ; i < 2 ; i++ ) { ret += a[i] * b[i]; } return ret; } void NR_Point::normalize() { double len = hypot(_pt[0], _pt[1]); g_return_if_fail(len != 0); g_return_if_fail(!isNaN(len)); static double const inf = 1e300; if(len != inf) { *this /= len; } else { unsigned n_inf_coords = 0; /* Delay updating pt in case neither coord is infinite. */ NR_Point tmp; for ( unsigned i = 0 ; i < 2 ; ++i ) { if ( _pt[i] == inf ) { ++n_inf_coords; tmp[i] = 1.0; } else if ( _pt[i] == -inf ) { ++n_inf_coords; tmp[i] = -1.0; } else { tmp[i] = 0.0; } } switch (n_inf_coords) { case 0: /* Can happen if both coords are near +/-DBL_MAX. */ *this /= 4.0; len = hypot(_pt[0], _pt[1]); g_assert(len != inf); *this /= len; break; case 1: *this = tmp; break; case 2: *this = NR_Point(sqrt(0.5) * tmp[0], sqrt(0.5) * tmp[1]); break; } } } inline NR_Point operator-(NR_Point const &a, NR_Point const &b) { NR_Point ret; for (int i = 0; i < 2; i++) { ret[i] = a[i] - b[i]; } return ret; } /** This is a rotation (sort of). */ inline NR_Point operator^(NR_Point const &a, NR_Point const &b) { NR_Point const ret(a[0] * b[0] - a[1] * b[1], a[1] * b[0] + a[0] * b[1]); return ret; } inline NR_Point operator-(NR_Point const &a) { NR_Point ret; for(unsigned i = 0; i < 2; i++) { ret[i] = -a[i]; } return ret; } inline NR_Point operator*(double const s, NR_Point const &b) { NR_Point ret; for(int i = 0; i < 2; i++) { ret[i] = s * b[i]; } return ret; } inline NR_Point operator/(NR_Point const &b, double const d) { NR_Point ret; for(int i = 0; i < 2; i++) { ret[i] = b[i] / d; } return ret; } inline bool operator==(NR_Point const &a, NR_Point const &b) { return ( ( a[0] == b[0] ) && ( a[1] == b[1] ) ); } inline bool operator!=(NR_Point const &a, NR_Point const &b) { return ( ( a[0] != b[0] ) || ( a[1] != b[1] ) ); } inline double L2(NR_Point const &p) { return hypot(p[0], p[1]); } bool is_zero(NR_Point const &p) { return ( p[0] == 0 && p[1] == 0 ); } NR_Point unit_vector(NR_Point const &a) { NR_Point ret(a); ret.normalize(); return ret; } NR_Point bezier_pt(unsigned degree, NR_Point const V[], double t); long sp_bezier_fit_cubic(NR_Point bezier[], NR_Point const data[], long len, double error); long sp_bezier_fit_cubic_r(NR_Point bezier[], NR_Point const data[], long len, double error, unsigned max_beziers); long sp_bezier_fit_cubic_full(NR_Point bezier[], int split_points[], NR_Point const data[], long len, NR_Point const &tHat1, NR_Point const &tHat2, double error, unsigned max_beziers); NR_Point sp_darray_left_tangent(NR_Point const d[], unsigned const len); NR_Point sp_darray_left_tangent(NR_Point const d[], unsigned const len, double const tolerance_sq); NR_Point sp_darray_right_tangent(NR_Point const d[], unsigned const length, double const tolerance_sq); /* * Temporary fix for various misdefinitions of isnan(). * isnan() is becoming undef'd in some .h files. * #include this last in your .cpp file to get it right. * * The problem is that isnan and isfinite are part of C99 but aren't part of * the C++ standard (which predates C99). * * Authors: * Inkscape groupies and obsessive-compulsives * * Copyright (C) 2004 authors * * Released under GNU GPL, read the file 'COPYING' for more information * * 2005 modification hereby placed in public domain. Probably supercedes the 2004 copyright * for the code itself. */ typedef NR_Point BezierCurve[]; /* Forward declarations */ static void generate_bezier(NR_Point b[], NR_Point const d[], double const u[], unsigned len, NR_Point const &tHat1, NR_Point const &tHat2, double tolerance_sq); static void estimate_lengths(NR_Point bezier[], NR_Point const data[], double const u[], unsigned len, NR_Point const &tHat1, NR_Point const &tHat2); static void estimate_bi(NR_Point b[4], unsigned ei, NR_Point const data[], double const u[], unsigned len); static void reparameterize(NR_Point const d[], unsigned len, double u[], BezierCurve const bezCurve); static double NewtonRaphsonRootFind(BezierCurve const Q, NR_Point const &P, double u); static NR_Point sp_darray_center_tangent(NR_Point const d[], unsigned center, unsigned length); static NR_Point sp_darray_right_tangent(NR_Point const d[], unsigned const len); static unsigned copy_without_nans_or_adjacent_duplicates(NR_Point const src[], unsigned src_len, NR_Point dest[]); static void chord_length_parameterize(NR_Point const d[], double u[], unsigned len); static double compute_max_error_ratio(NR_Point const d[], double const u[], unsigned len, BezierCurve const bezCurve, double tolerance, unsigned *splitPoint); static double compute_hook(NR_Point const &a, NR_Point const &b, double const u, BezierCurve const bezCurve, double const tolerance); static NR_Point const unconstrained_tangent(0, 0); /* * B0, B1, B2, B3 : Bezier multipliers */ #define B0(u) ( ( 1.0 - u ) * ( 1.0 - u ) * ( 1.0 - u ) ) #define B1(u) ( 3 * u * ( 1.0 - u ) * ( 1.0 - u ) ) #define B2(u) ( 3 * u * u * ( 1.0 - u ) ) #define B3(u) ( u * u * u ) #ifdef BEZIER_DEBUG # define DOUBLE_ASSERT(x) g_assert( ( (x) > -SP_HUGE ) && ( (x) < SP_HUGE ) ) # define BEZIER_ASSERT(b) do { \ DOUBLE_ASSERT((b)[0][0]); DOUBLE_ASSERT((b)[0][1]); \ DOUBLE_ASSERT((b)[1][0]); DOUBLE_ASSERT((b)[1][1]); \ DOUBLE_ASSERT((b)[2][0]); DOUBLE_ASSERT((b)[2][1]); \ DOUBLE_ASSERT((b)[3][0]); DOUBLE_ASSERT((b)[3][1]); \ } while(0) #else # define DOUBLE_ASSERT(x) do { } while(0) # define BEZIER_ASSERT(b) do { } while(0) #endif /** * Fit a single-segment Bezier curve to a set of digitized points. * * \return Number of segments generated, or -1 on error. */ long sp_bezier_fit_cubic(NR_Point *bezier, NR_Point const *data, long len, double error) { return sp_bezier_fit_cubic_r(bezier, data, len, error, 1); } /** * Fit a multi-segment Bezier curve to a set of digitized points, with * possible weedout of identical points and NaNs. * * \param max_beziers Maximum number of generated segments * \param Result array, must be large enough for n. segments * 4 elements. * * \return Number of segments generated, or -1 on error. */ long sp_bezier_fit_cubic_r(NR_Point bezier[], NR_Point const data[], long const len, double const error, unsigned const max_beziers) { g_return_val_if_fail(bezier != NULL, -1); g_return_val_if_fail(data != NULL, -1); g_return_val_if_fail(len > 0, -1); g_return_val_if_fail(max_beziers < (1ul << (31 - 2 - 1 - 3)), -1); NR_Point *uniqued_data = g_new(NR_Point, len); unsigned uniqued_len = copy_without_nans_or_adjacent_duplicates(data, len, uniqued_data); if ( uniqued_len < 2 ) { g_free(uniqued_data); return 0; } /* Call fit-cubic function with recursion. */ long const ret = sp_bezier_fit_cubic_full(bezier, NULL, uniqued_data, uniqued_len, unconstrained_tangent, unconstrained_tangent, error, max_beziers); g_free(uniqued_data); return ret; } /** * Copy points from src to dest, filter out points containing NaN and * adjacent points with equal x and y. * \return length of dest */ static unsigned copy_without_nans_or_adjacent_duplicates(NR_Point const src[], unsigned src_len, NR_Point dest[]) { unsigned si = 0; for (;;) { if ( si == src_len ) { return 0; } if (!isNaN(src[si][0]) && !isNaN(src[si][1])) { dest[0] = NR_Point(src[si]); ++si; break; } } unsigned di = 0; for (; si < src_len; ++si) { NR_Point const src_pt = NR_Point(src[si]); if ( src_pt != dest[di] && !isNaN(src_pt[0]) && !isNaN(src_pt[1])) { dest[++di] = src_pt; } } unsigned dest_len = di + 1; g_assert( dest_len <= src_len ); return dest_len; } /** * Fit a multi-segment Bezier curve to a set of digitized points, without * possible weedout of identical points and NaNs. * * \pre data is uniqued, i.e. not exist i: data[i] == data[i + 1]. * \param max_beziers Maximum number of generated segments * \param Result array, must be large enough for n. segments * 4 elements. */ long sp_bezier_fit_cubic_full(NR_Point bezier[], int split_points[], NR_Point const data[], long const len, NR_Point const &tHat1, NR_Point const &tHat2, double const error, unsigned const max_beziers) { int const maxIterations = 4; /* Max times to try iterating */ g_return_val_if_fail(bezier != NULL, -1); g_return_val_if_fail(data != NULL, -1); g_return_val_if_fail(len > 0, -1); g_return_val_if_fail(max_beziers >= 1, -1); g_return_val_if_fail(error >= 0.0, -1); if ( len < 2 ) return 0; if ( len == 2 ) { /* We have 2 points, which can be fitted trivially. */ bezier[0] = data[0]; bezier[3] = data[len - 1]; double const dist = ( L2( data[len - 1] - data[0] ) / 3.0 ); if (isNaN(dist)) { /* Numerical problem, fall back to straight line segment. */ bezier[1] = bezier[0]; bezier[2] = bezier[3]; } else { bezier[1] = ( is_zero(tHat1) ? ( 2 * bezier[0] + bezier[3] ) / 3. : bezier[0] + dist * tHat1 ); bezier[2] = ( is_zero(tHat2) ? ( bezier[0] + 2 * bezier[3] ) / 3. : bezier[3] + dist * tHat2 ); } BEZIER_ASSERT(bezier); return 1; } /* Parameterize points, and attempt to fit curve */ unsigned splitPoint; /* Point to split point set at. */ bool is_corner; { double *u = g_new(double, len); chord_length_parameterize(data, u, len); if ( u[len - 1] == 0.0 ) { /* Zero-length path: every point in data[] is the same. * * (Clients aren't allowed to pass such data; handling the case is defensive * programming.) */ g_free(u); return 0; } generate_bezier(bezier, data, u, len, tHat1, tHat2, error); reparameterize(data, len, u, bezier); /* Find max deviation of points to fitted curve. */ double const tolerance = sqrt(error + 1e-9); double maxErrorRatio = compute_max_error_ratio(data, u, len, bezier, tolerance, &splitPoint); if ( fabs(maxErrorRatio) <= 1.0 ) { BEZIER_ASSERT(bezier); g_free(u); return 1; } /* If error not too large, then try some reparameterization and iteration. */ if ( 0.0 <= maxErrorRatio && maxErrorRatio <= 3.0 ) { for (int i = 0; i < maxIterations; i++) { generate_bezier(bezier, data, u, len, tHat1, tHat2, error); reparameterize(data, len, u, bezier); maxErrorRatio = compute_max_error_ratio(data, u, len, bezier, tolerance, &splitPoint); if ( fabs(maxErrorRatio) <= 1.0 ) { BEZIER_ASSERT(bezier); g_free(u); return 1; } } } g_free(u); is_corner = (maxErrorRatio < 0); } if (is_corner) { g_assert(splitPoint < unsigned(len)); if (splitPoint == 0) { if (is_zero(tHat1)) { /* Got spike even with unconstrained initial tangent. */ ++splitPoint; } else { return sp_bezier_fit_cubic_full(bezier, split_points, data, len, unconstrained_tangent, tHat2, error, max_beziers); } } else if (splitPoint == unsigned(len - 1)) { if (is_zero(tHat2)) { /* Got spike even with unconstrained final tangent. */ --splitPoint; } else { return sp_bezier_fit_cubic_full(bezier, split_points, data, len, tHat1, unconstrained_tangent, error, max_beziers); } } } if ( 1 < max_beziers ) { /* * Fitting failed -- split at max error point and fit recursively */ unsigned const rec_max_beziers1 = max_beziers - 1; NR_Point recTHat2, recTHat1; if (is_corner) { g_return_val_if_fail(0 < splitPoint && splitPoint < unsigned(len - 1), -1); recTHat1 = recTHat2 = unconstrained_tangent; } else { /* Unit tangent vector at splitPoint. */ recTHat2 = sp_darray_center_tangent(data, splitPoint, len); recTHat1 = -recTHat2; } long const nsegs1 = sp_bezier_fit_cubic_full(bezier, split_points, data, splitPoint + 1, tHat1, recTHat2, error, rec_max_beziers1); if ( nsegs1 < 0 ) { #ifdef BEZIER_DEBUG g_print("fit_cubic[1]: recursive call failed\n"); #endif return -1; } g_assert( nsegs1 != 0 ); if (split_points != NULL) { split_points[nsegs1 - 1] = splitPoint; } unsigned const rec_max_beziers2 = max_beziers - nsegs1; long const nsegs2 = sp_bezier_fit_cubic_full(bezier + nsegs1*4, ( split_points == NULL ? NULL : split_points + nsegs1 ), data + splitPoint, len - splitPoint, recTHat1, tHat2, error, rec_max_beziers2); if ( nsegs2 < 0 ) { #ifdef BEZIER_DEBUG g_print("fit_cubic[2]: recursive call failed\n"); #endif return -1; } #ifdef BEZIER_DEBUG g_print("fit_cubic: success[nsegs: %d+%d=%d] on max_beziers:%u\n", nsegs1, nsegs2, nsegs1 + nsegs2, max_beziers); #endif return nsegs1 + nsegs2; } else { return -1; } } /** * Fill in \a bezier[] based on the given data and tangent requirements, using * a least-squares fit. * * Each of tHat1 and tHat2 should be either a zero vector or a unit vector. * If it is zero, then bezier[1 or 2] is estimated without constraint; otherwise, * it bezier[1 or 2] is placed in the specified direction from bezier[0 or 3]. * * \param tolerance_sq Used only for an initial guess as to tangent directions * when \a tHat1 or \a tHat2 is zero. */ static void generate_bezier(NR_Point bezier[], NR_Point const data[], double const u[], unsigned const len, NR_Point const &tHat1, NR_Point const &tHat2, double const tolerance_sq) { bool const est1 = is_zero(tHat1); bool const est2 = is_zero(tHat2); NR_Point est_tHat1( est1 ? sp_darray_left_tangent(data, len, tolerance_sq) : tHat1 ); NR_Point est_tHat2( est2 ? sp_darray_right_tangent(data, len, tolerance_sq) : tHat2 ); estimate_lengths(bezier, data, u, len, est_tHat1, est_tHat2); /* We find that sp_darray_right_tangent tends to produce better results for our current freehand tool than full estimation. */ if (est1) { estimate_bi(bezier, 1, data, u, len); if (bezier[1] != bezier[0]) { est_tHat1 = unit_vector(bezier[1] - bezier[0]); } estimate_lengths(bezier, data, u, len, est_tHat1, est_tHat2); } } static void estimate_lengths(NR_Point bezier[], NR_Point const data[], double const uPrime[], unsigned const len, NR_Point const &tHat1, NR_Point const &tHat2) { double C[2][2]; /* Matrix C. */ double X[2]; /* Matrix X. */ /* Create the C and X matrices. */ C[0][0] = 0.0; C[0][1] = 0.0; C[1][0] = 0.0; C[1][1] = 0.0; X[0] = 0.0; X[1] = 0.0; /* First and last control points of the Bezier curve are positioned exactly at the first and last data points. */ bezier[0] = data[0]; bezier[3] = data[len - 1]; for (unsigned i = 0; i < len; i++) { /* Bezier control point coefficients. */ double const b0 = B0(uPrime[i]); double const b1 = B1(uPrime[i]); double const b2 = B2(uPrime[i]); double const b3 = B3(uPrime[i]); /* rhs for eqn */ NR_Point const a1 = b1 * tHat1; NR_Point const a2 = b2 * tHat2; C[0][0] += dot(a1, a1); C[0][1] += dot(a1, a2); C[1][0] = C[0][1]; C[1][1] += dot(a2, a2); /* Additional offset to the data point from the predicted point if we were to set bezier[1] to bezier[0] and bezier[2] to bezier[3]. */ NR_Point const shortfall = ( data[i] - ( ( b0 + b1 ) * bezier[0] ) - ( ( b2 + b3 ) * bezier[3] ) ); X[0] += dot(a1, shortfall); X[1] += dot(a2, shortfall); } /* We've constructed a pair of equations in the form of a matrix product C * alpha = X. Now solve for alpha. */ double alpha_l, alpha_r; /* Compute the determinants of C and X. */ double const det_C0_C1 = C[0][0] * C[1][1] - C[1][0] * C[0][1]; if ( det_C0_C1 != 0 ) { /* Apparently Kramer's rule. */ double const det_C0_X = C[0][0] * X[1] - C[0][1] * X[0]; double const det_X_C1 = X[0] * C[1][1] - X[1] * C[0][1]; alpha_l = det_X_C1 / det_C0_C1; alpha_r = det_C0_X / det_C0_C1; } else { /* The matrix is under-determined. Try requiring alpha_l == alpha_r. * * One way of implementing the constraint alpha_l == alpha_r is to treat them as the same * variable in the equations. We can do this by adding the columns of C to form a single * column, to be multiplied by alpha to give the column vector X. * * We try each row in turn. */ double const c0 = C[0][0] + C[0][1]; if (c0 != 0) { alpha_l = alpha_r = X[0] / c0; } else { double const c1 = C[1][0] + C[1][1]; if (c1 != 0) { alpha_l = alpha_r = X[1] / c1; } else { /* Let the below code handle this. */ alpha_l = alpha_r = 0.; } } } /* If alpha negative, use the Wu/Barsky heuristic (see text). (If alpha is 0, you get coincident control points that lead to divide by zero in any subsequent NewtonRaphsonRootFind() call.) */ /// \todo Check whether this special-casing is necessary now that /// NewtonRaphsonRootFind handles non-positive denominator. if ( alpha_l < 1.0e-6 || alpha_r < 1.0e-6 ) { alpha_l = alpha_r = ( L2( data[len - 1] - data[0] ) / 3.0 ); } /* Control points 1 and 2 are positioned an alpha distance out on the tangent vectors, left and right, respectively. */ bezier[1] = alpha_l * tHat1 + bezier[0]; bezier[2] = alpha_r * tHat2 + bezier[3]; return; } static double lensq(NR_Point const p) { return dot(p, p); } static void estimate_bi(NR_Point bezier[4], unsigned const ei, NR_Point const data[], double const u[], unsigned const len) { g_return_if_fail(1 <= ei && ei <= 2); unsigned const oi = 3 - ei; double num[2] = {0., 0.}; double den = 0.; for (unsigned i = 0; i < len; ++i) { double const ui = u[i]; double const b[4] = { B0(ui), B1(ui), B2(ui), B3(ui) }; for (unsigned d = 0; d < 2; ++d) { num[d] += b[ei] * (b[0] * bezier[0][d] + b[oi] * bezier[oi][d] + b[3] * bezier[3][d] + - data[i][d]); } den -= b[ei] * b[ei]; } if (den != 0.) { for (unsigned d = 0; d < 2; ++d) { bezier[ei][d] = num[d] / den; } } else { bezier[ei] = ( oi * bezier[0] + ei * bezier[3] ) / 3.; } } /** * Given set of points and their parameterization, try to find a better assignment of parameter * values for the points. * * \param d Array of digitized points. * \param u Current parameter values. * \param bezCurve Current fitted curve. * \param len Number of values in both d and u arrays. * Also the size of the array that is allocated for return. */ static void reparameterize(NR_Point const d[], unsigned const len, double u[], BezierCurve const bezCurve) { g_assert( 2 <= len ); unsigned const last = len - 1; g_assert( bezCurve[0] == d[0] ); g_assert( bezCurve[3] == d[last] ); g_assert( u[0] == 0.0 ); g_assert( u[last] == 1.0 ); /* Otherwise, consider including 0 and last in the below loop. */ for (unsigned i = 1; i < last; i++) { u[i] = NewtonRaphsonRootFind(bezCurve, d[i], u[i]); } } /** * Use Newton-Raphson iteration to find better root. * * \param Q Current fitted curve * \param P Digitized point * \param u Parameter value for "P" * * \return Improved u */ static double NewtonRaphsonRootFind(BezierCurve const Q, NR_Point const &P, double const u) { g_assert( 0.0 <= u ); g_assert( u <= 1.0 ); /* Generate control vertices for Q'. */ NR_Point Q1[3]; for (unsigned i = 0; i < 3; i++) { Q1[i] = 3.0 * ( Q[i+1] - Q[i] ); } /* Generate control vertices for Q''. */ NR_Point Q2[2]; for (unsigned i = 0; i < 2; i++) { Q2[i] = 2.0 * ( Q1[i+1] - Q1[i] ); } /* Compute Q(u), Q'(u) and Q''(u). */ NR_Point const Q_u = bezier_pt(3, Q, u); NR_Point const Q1_u = bezier_pt(2, Q1, u); NR_Point const Q2_u = bezier_pt(1, Q2, u); /* Compute f(u)/f'(u), where f is the derivative wrt u of distsq(u) = 0.5 * the square of the distance from P to Q(u). Here we're using Newton-Raphson to find a stationary point in the distsq(u), hopefully corresponding to a local minimum in distsq (and hence a local minimum distance from P to Q(u)). */ NR_Point const diff = Q_u - P; double numerator = dot(diff, Q1_u); double denominator = dot(Q1_u, Q1_u) + dot(diff, Q2_u); double improved_u; if ( denominator > 0. ) { /* One iteration of Newton-Raphson: improved_u = u - f(u)/f'(u) */ improved_u = u - ( numerator / denominator ); } else { /* Using Newton-Raphson would move in the wrong direction (towards a local maximum rather than local minimum), so we move an arbitrary amount in the right direction. */ if ( numerator > 0. ) { improved_u = u * .98 - .01; } else if ( numerator < 0. ) { /* Deliberately asymmetrical, to reduce the chance of cycling. */ improved_u = .031 + u * .98; } else { improved_u = u; } } if (!isFinite(improved_u)) { improved_u = u; } else if ( improved_u < 0.0 ) { improved_u = 0.0; } else if ( improved_u > 1.0 ) { improved_u = 1.0; } /* Ensure that improved_u isn't actually worse. */ { double const diff_lensq = lensq(diff); for (double proportion = .125; ; proportion += .125) { if ( lensq( bezier_pt(3, Q, improved_u) - P ) > diff_lensq ) { if ( proportion > 1.0 ) { //g_warning("found proportion %g", proportion); improved_u = u; break; } improved_u = ( ( 1 - proportion ) * improved_u + proportion * u ); } else { break; } } } DOUBLE_ASSERT(improved_u); return improved_u; } /** * Evaluate a Bezier curve at parameter value \a t. * * \param degree The degree of the Bezier curve: 3 for cubic, 2 for quadratic etc. * \param V The control points for the Bezier curve. Must have (\a degree+1) * elements. * \param t The "parameter" value, specifying whereabouts along the curve to * evaluate. Typically in the range [0.0, 1.0]. * * Let s = 1 - t. * BezierII(1, V) gives (s, t) * V, i.e. t of the way * from V[0] to V[1]. * BezierII(2, V) gives (s**2, 2*s*t, t**2) * V. * BezierII(3, V) gives (s**3, 3 s**2 t, 3s t**2, t**3) * V. * * The derivative of BezierII(i, V) with respect to t * is i * BezierII(i-1, V'), where for all j, V'[j] = * V[j + 1] - V[j]. */ NR_Point bezier_pt(unsigned const degree, NR_Point const V[], double const t) { /** Pascal's triangle. */ static int const pascal[4][4] = {{1}, {1, 1}, {1, 2, 1}, {1, 3, 3, 1}}; //g_assert( degree < G_N_ELEMENTS(pascal) ); g_assert( degree < 5 ); double const s = 1.0 - t; /* Calculate powers of t and s. */ double spow[4]; double tpow[4]; spow[0] = 1.0; spow[1] = s; tpow[0] = 1.0; tpow[1] = t; for (unsigned i = 1; i < degree; ++i) { spow[i + 1] = spow[i] * s; tpow[i + 1] = tpow[i] * t; } NR_Point ret = spow[degree] * V[0]; for (unsigned i = 1; i <= degree; ++i) { ret += pascal[degree][i] * spow[degree - i] * tpow[i] * V[i]; } return ret; } /* * ComputeLeftTangent, ComputeRightTangent, ComputeCenterTangent : * Approximate unit tangents at endpoints and "center" of digitized curve */ /** * Estimate the (forward) tangent at point d[first + 0.5]. * * Unlike the center and right versions, this calculates the tangent in * the way one might expect, i.e., wrt increasing index into d. * \pre (2 \<= len) and (d[0] != d[1]). **/ NR_Point sp_darray_left_tangent(NR_Point const d[], unsigned const len) { g_assert( len >= 2 ); g_assert( d[0] != d[1] ); return unit_vector( d[1] - d[0] ); } /** * Estimates the (backward) tangent at d[last - 0.5]. * * \note The tangent is "backwards", i.e. it is with respect to * decreasing index rather than increasing index. * * \pre 2 \<= len. * \pre d[len - 1] != d[len - 2]. * \pre all[p in d] in_svg_plane(p). */ static NR_Point sp_darray_right_tangent(NR_Point const d[], unsigned const len) { g_assert( 2 <= len ); unsigned const last = len - 1; unsigned const prev = last - 1; g_assert( d[last] != d[prev] ); return unit_vector( d[prev] - d[last] ); } /** * Estimate the (forward) tangent at point d[0]. * * Unlike the center and right versions, this calculates the tangent in * the way one might expect, i.e., wrt increasing index into d. * * \pre 2 \<= len. * \pre d[0] != d[1]. * \pre all[p in d] in_svg_plane(p). * \post is_unit_vector(ret). **/ NR_Point sp_darray_left_tangent(NR_Point const d[], unsigned const len, double const tolerance_sq) { g_assert( 2 <= len ); g_assert( 0 <= tolerance_sq ); for (unsigned i = 1;;) { NR_Point const pi(d[i]); NR_Point const t(pi - d[0]); double const distsq = dot(t, t); if ( tolerance_sq < distsq ) { return unit_vector(t); } ++i; if (i == len) { return ( distsq == 0 ? sp_darray_left_tangent(d, len) : unit_vector(t) ); } } } /** * Estimates the (backward) tangent at d[last]. * * \note The tangent is "backwards", i.e. it is with respect to * decreasing index rather than increasing index. * * \pre 2 \<= len. * \pre d[len - 1] != d[len - 2]. * \pre all[p in d] in_svg_plane(p). */ NR_Point sp_darray_right_tangent(NR_Point const d[], unsigned const len, double const tolerance_sq) { g_assert( 2 <= len ); g_assert( 0 <= tolerance_sq ); unsigned const last = len - 1; for (unsigned i = last - 1;; i--) { NR_Point const pi(d[i]); NR_Point const t(pi - d[last]); double const distsq = dot(t, t); if ( tolerance_sq < distsq ) { return unit_vector(t); } if (i == 0) { return ( distsq == 0 ? sp_darray_right_tangent(d, len) : unit_vector(t) ); } } } /** * Estimates the (backward) tangent at d[center], by averaging the two * segments connected to d[center] (and then normalizing the result). * * \note The tangent is "backwards", i.e. it is with respect to * decreasing index rather than increasing index. * * \pre (0 \< center \< len - 1) and d is uniqued (at least in * the immediate vicinity of \a center). */ static NR_Point sp_darray_center_tangent(NR_Point const d[], unsigned const center, unsigned const len) { g_assert( center != 0 ); g_assert( center < len - 1 ); NR_Point ret; if ( d[center + 1] == d[center - 1] ) { /* Rotate 90 degrees in an arbitrary direction. */ NR_Point const diff = d[center] - d[center - 1]; ret = rot90(diff); } else { ret = d[center - 1] - d[center + 1]; } ret.normalize(); return ret; } /** * Assign parameter values to digitized points using relative distances between points. * * \pre Parameter array u must have space for \a len items. */ static void chord_length_parameterize(NR_Point const d[], double u[], unsigned const len) { g_return_if_fail( 2 <= len ); /* First let u[i] equal the distance travelled along the path from d[0] to d[i]. */ u[0] = 0.0; for (unsigned i = 1; i < len; i++) { double const dist = L2( d[i] - d[i-1] ); u[i] = u[i-1] + dist; } /* Then scale to [0.0 .. 1.0]. */ double tot_len = u[len - 1]; g_return_if_fail( tot_len != 0 ); if (isFinite(tot_len)) { for (unsigned i = 1; i < len; ++i) { u[i] /= tot_len; } } else { /* We could do better, but this probably never happens anyway. */ for (unsigned i = 1; i < len; ++i) { u[i] = i / (double) ( len - 1 ); } } /** \todo * It's been reported that u[len - 1] can differ from 1.0 on some * systems (amd64), despite it having been calculated as x / x where x * is isFinite and non-zero. */ if (u[len - 1] != 1) { double const diff = u[len - 1] - 1; if (fabs(diff) > 1e-13) { fprintf(stderr,"u[len - 1] = %19g (= 1 + %19g), expecting exactly 1", u[len - 1], diff); } u[len - 1] = 1; } #ifdef BEZIER_DEBUG g_assert( u[0] == 0.0 && u[len - 1] == 1.0 ); for (unsigned i = 1; i < len; i++) { g_assert( u[i] >= u[i-1] ); } #endif } /** * Find the maximum squared distance of digitized points to fitted curve, and (if this maximum * error is non-zero) set \a *splitPoint to the corresponding index. * * \pre 2 \<= len. * \pre u[0] == 0. * \pre u[len - 1] == 1.0. * \post ((ret == 0.0) * || ((*splitPoint \< len - 1) * \&\& (*splitPoint != 0 || ret \< 0.0))). */ static double compute_max_error_ratio(NR_Point const d[], double const u[], unsigned const len, BezierCurve const bezCurve, double const tolerance, unsigned *const splitPoint) { g_assert( 2 <= len ); unsigned const last = len - 1; g_assert( bezCurve[0] == d[0] ); g_assert( bezCurve[3] == d[last] ); g_assert( u[0] == 0.0 ); g_assert( u[last] == 1.0 ); /* I.e. assert that the error for the first & last points is zero. * Otherwise we should include those points in the below loop. * The assertion is also necessary to ensure 0 < splitPoint < last. */ double maxDistsq = 0.0; /* Maximum error */ double max_hook_ratio = 0.0; unsigned snap_end = 0; NR_Point prev = bezCurve[0]; for (unsigned i = 1; i <= last; i++) { NR_Point const curr = bezier_pt(3, bezCurve, u[i]); double const distsq = lensq( curr - d[i] ); if ( distsq > maxDistsq ) { maxDistsq = distsq; *splitPoint = i; } double const hook_ratio = compute_hook(prev, curr, .5 * (u[i - 1] + u[i]), bezCurve, tolerance); if (max_hook_ratio < hook_ratio) { max_hook_ratio = hook_ratio; snap_end = i; } prev = curr; } double const dist_ratio = sqrt(maxDistsq) / tolerance; double ret; if (max_hook_ratio <= dist_ratio) { ret = dist_ratio; } else { g_assert(0 < snap_end); ret = -max_hook_ratio; *splitPoint = snap_end - 1; } g_assert( ret == 0.0 || ( ( *splitPoint < last ) && ( *splitPoint != 0 || ret < 0. ) ) ); return ret; } /** * Whereas compute_max_error_ratio() checks for itself that each data point * is near some point on the curve, this function checks that each point on * the curve is near some data point (or near some point on the polyline * defined by the data points, or something like that: we allow for a * "reasonable curviness" from such a polyline). "Reasonable curviness" * means we draw a circle centred at the midpoint of a..b, of radius * proportional to the length |a - b|, and require that each point on the * segment of bezCurve between the parameters of a and b be within that circle. * If any point P on the bezCurve segment is outside of that allowable * region (circle), then we return some metric that increases with the * distance from P to the circle. * * Given that this is a fairly arbitrary criterion for finding appropriate * places for sharp corners, we test only one point on bezCurve, namely * the point on bezCurve with parameter halfway between our estimated * parameters for a and b. (Alternatives are taking the farthest of a * few parameters between those of a and b, or even using a variant of * NewtonRaphsonFindRoot() for finding the maximum rather than minimum * distance.) */ static double compute_hook(NR_Point const &a, NR_Point const &b, double const u, BezierCurve const bezCurve, double const tolerance) { NR_Point const P = bezier_pt(3, bezCurve, u); NR_Point const diff = .5 * (a + b) - P; double const dist = L2(diff); if (dist < tolerance) { return 0; } double const allowed = L2(b - a) + tolerance; return dist / allowed; /** \todo * effic: Hooks are very rare. We could start by comparing * distsq, only resorting to the more expensive L2 in cases of * uncertainty. */ } void thbezier_curve::clear() { this->m_segments.clear(); this->m_current_segment = this->m_segments.end(); } thbezier_segment * thbezier_curve::insert_segment() { return &(*this->m_segments.insert(this->m_segments.end(), thbezier_segment())); } thbezier_segment * thbezier_curve::get_first_segment() { this->m_current_segment = this->m_segments.begin(); return this->get_current_segment(); } thbezier_segment * thbezier_curve::get_current_segment() { if (this->m_current_segment != this->m_segments.end()) return &(*this->m_current_segment); else return NULL; } thbezier_segment * thbezier_curve::get_next_segment() { this->m_current_segment++; return this->get_current_segment(); } void thbezier_curve::copy_polyline(struct thbezier_polyline * line, double err) { this->clear(); size_t i, max = line->get_length(); long nbp; if (max < 3) return; NR_Point * poly, * bezier; poly = new NR_Point[max]; bezier = new NR_Point[4 * max]; thbezier_point * p; for(i = 0, p = line->get_first_point(); p != NULL; p = line->get_next_point(), i++) { poly[i][0] = p->m_x; poly[i][1] = p->m_y; } NR_Point stan(0, 0), etan(0,0); if ((poly[0][0] == poly[max-1][0]) && (poly[0][1] == poly[max-1][1])) { stan = NR_Point(poly[1][0] - poly[0][0], poly[1][1] - poly[0][1]); stan.normalize(); etan = NR_Point(poly[max-1][0] - poly[max-2][0], poly[max-1][1] - poly[max-2][1]); etan.normalize(); stan += etan; if (is_zero(stan)) stan = etan; else stan.normalize(); } //nbp = (long) sp_bezier_fit_cubic_r(bezier, poly, (long) max, err, (unsigned int)max); nbp = (long) sp_bezier_fit_cubic_full(bezier, NULL, poly, (long) max, stan, -stan, err, (unsigned int)max); thbezier_segment * s; s = this->insert_segment(); s->m_p = thbezier_point(bezier[0][0], bezier[0][1]); for(i = 0; i < (size_t) nbp; i++) { s = this->insert_segment(); s->m_cp1 = thbezier_point(bezier[4*i+1][0],bezier[4*i+1][1]); s->m_cp2 = thbezier_point(bezier[4*i+2][0],bezier[4*i+2][1]); s->m_p = thbezier_point(bezier[4*i+3][0],bezier[4*i+3][1]); } } void thbezier_polyline::clear() { this->m_points.clear(); this->m_current_point = this->m_points.end(); } thbezier_point * thbezier_polyline::insert_point() { return &(*this->m_points.insert(this->m_points.end(), thbezier_point())); } thbezier_point * thbezier_polyline::get_first_point() { this->m_current_point = this->m_points.begin(); return this->get_current_point(); } thbezier_point * thbezier_polyline::get_current_point() { if (this->m_current_point != this->m_points.end()) return &(*this->m_current_point); else return NULL; } thbezier_point * thbezier_polyline::get_next_point() { this->m_current_point++; return this->get_current_point(); } void thbezier_polyline::copy_curve(struct thbezier_curve * curve, double err) { this->clear(); // TODO: bezier 2 polyline conversion } void thbezier_main() { FILE * fin, * fout; fin = fopen("therion.bci","r"); double x, y, px(0.0), py(0.0); bool xfirst(true); thbezier_polyline line; thbezier_curve curve; thbezier_point * pt; while (fscanf(fin,"%lf%lf",&x,&y) == 2) { if ((xfirst) || (x != px) || (y != py)) { pt = line.insert_point(); pt->m_x = px = x; pt->m_y = py = y; pt->m_valid = true; } xfirst = false; } fclose(fin); if (line.m_points.size() < 3) return; curve.copy_polyline(&line, 2.0); thbezier_segment *s; fout = fopen("therion.bco","w"); s = curve.get_first_segment(); fprintf(fout, "%.2lf %.2lf\n", s->m_p.m_x, s->m_p.m_y); for(s = curve.get_next_segment(); s != NULL; s = curve.get_next_segment()) { fprintf(fout, "%.2lf %.2lf %.2lf %.2lf %.2lf %.2lf\n",s->m_cp1.m_x, s->m_cp1.m_y, s->m_cp2.m_x, s->m_cp2.m_y, s->m_p.m_x, s->m_p.m_y); } fclose(fout); } therion/thbezier.h0000644000076400010400000000433511575403650015265 0ustar userAdministrators/** * @file thbezier.h * Bezier curve manipulation class. */ /* Copyright (C) 2007 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thbezier_h #define thbezier_h #include #include #include struct thbezier_point { double m_x, m_y, m_z; bool m_valid; thbezier_point() : m_x(0.0), m_y(0.0), m_z(0.0), m_valid(false) {} thbezier_point(double x, double y, double z = 0.0) : m_x(x), m_y(y), m_z(z), m_valid(true) {} }; struct thbezier_segment { thbezier_point m_cp1, m_cp2, m_p; }; struct thbezier_curve { std::list m_segments; std::list::iterator m_current_segment; void clear(); size_t get_length() {return this->m_segments.size();} thbezier_segment * insert_segment(); thbezier_segment * get_first_segment(); thbezier_segment * get_current_segment(); thbezier_segment * get_next_segment(); void copy_polyline(struct thbezier_polyline * line, double err); }; struct thbezier_polyline { std::list m_points; std::list::iterator m_current_point; void clear(); size_t get_length() {return this->m_points.size();} thbezier_point * insert_point(); thbezier_point * get_first_point(); thbezier_point * get_current_point(); thbezier_point * get_next_point(); void copy_curve(struct thbezier_curve * curve, double err); }; void thbezier_main(); #endif therion/thbook/0000755000076400010400000000000012270034353014552 5ustar userAdministratorstherion/thbook/ch00.tex0000644000076400010400000000637712064676334016057 0ustar userAdministrators\vbox to 0pt{\kern-1in\kern-10pt\hbox to 0pt{\kern-1in \pic{thbook.jpg}\hss}\vss} {\footline={} \hbox{} \vskip0pt \font\tit=cmssdc10 at 36pt \font\subtit=cmssdc10 at 24pt \rightline{\tit The Therion Book\hskip0pt} \vskip365pt \rightline{\subtit Stacho Mudr\'ak\hskip0pt} \vskip20pt \rightline{\subtit Martin Budaj\hskip0pt} \vfill \eject Therion is copyrighted software. Distributed under the GNU General Public License. Copyright \copyright\ 1999--2012 Stacho Mudr\'ak, Martin Budaj This book describes Therion \input version \vskip1.2cm Code contributions by {\it Marco Corvi}, {\it Georg Pacher} and {\it Dimitrios Zachariadis}. \bigskip \leftline{We owe thanks to} %\leftline{{\it Martin Sluka\/}} % for his support concerning not only Therion,} %\leftline{{\it Martin Heller\/}} % for criticism on first implementation of scrap distortion,} %\leftline{{\it Olly Betts\/}} % for idea of importing processed centreline instead of raw survey data,} %\leftline{{\it Wookey\/}} % for improving the documentation.} \leftline{{\it Martin Sluka}, {\it Ladislav Bla\v zek}, {\it Martin Heller}, {\it Wookey}, {\it Olly Betts}} \leftline{and all users for their feedback, support and suggestions.} \vskip1.2cm \leftline{Translations (\%):} \medskip \leavevmode\kern1em\vbox{\halign{#\hfil\quad&\hfil#\hfil\quad&\hfil#\hfil\quad&\hfil#\hfil\quad&#\hfil\cr {\it Language}&{\it XTherion}&{\it Map header}&{\it Loch}&{\it Translated by}\cr\noalign{\smallskip\hrule\smallskip} bg & 100 & 94 & 100 & Alexander Yanev, Ivo Tachev\cr cz & 94 &100 & -- & Ladislav Bla\v zek\cr de & 95 &100 & -- & Roger Schuster, Georg Pacher\cr el & 98 &100 & -- & Stelios Zacharias\cr en[\_UK$\mid$\_US] & 87 & 95 &100 & \cr es & 87 & 96 & -- & Roman Mu\~noz\cr fr & -- &100 & -- & Eric Madelaine, Gilbert Fernandes\cr it & 99 &100 & -- & Marco Corvi\cr mi & -- & 98 & -- & Kyle Davis, Bruce Mutton\cr pl & -- &100 & -- & Krzysztof Dudzi\'nski\cr pt[\_BR$\mid$\_PT] & -- & 96 & -- & Toni Cavalheiro\cr ru & 94 & 99 & -- & Vasily V. Suhachev\cr sk & 99 &100 & 96 & Stacho Mudr\'ak\cr sq & 99 &100 & -- & Fatos Katallozi\cr }} \vfill The cover picture shows survey sketch of {\it Hrozn\'y kame\v nolom} Chamber in the Cave of Dead Bats in Slovakia and the map of it produced by Therion. \eject \def\write#1#2{} %\vbox to0pt{\line{\hss\pdfximage width 93.2mm {pic/agrippa.jpg}\pdfrefximage\pdflastximage\hskip-2mm}\vss}\kern-2pt %{\let\eject=\relax \eightit\baselineskip16.3pt\leftskip7cm\parindent4.05cm %Only for you, children of doctrine and learning, have we written this work. %Examine this book, ponder the meaning we have dispersed in various places %and gathered again; %what we have concealed in one place we have disclosed in another, %that it may be understood by your wisdom. % %\leftskip0cm %\rightline{\eightrm ---Henricus C. Agrippa ab Nettesheym, \eightmit 1533} %\vskip.5cm \chapter Table of Contents. %} \bgroup \font\bf=cmbx10 \font\rm=cmr10\rm \baselineskip=12.5pt \def\Line#1{\line{\hskip2cm#1\hskip2cm}} \input etc/contents \egroup \vfil\eject \ifodd\pageno\else\hbox{}\eject\fi } \immediate\openout1=etc/contents \endinput therion/thbook/ch01.tex0000644000076400010400000002456411462102344016040 0ustar userAdministrators\eject \ifodd\pageno\else\hbox{}\eject\fi {\baselineskip=12pt \setbox1=\hbox{\eightit LET NO ONE IGNORANT OF GEOMETRY ENTER HERE} \copy1 \vskip4pt \line{\pic[\wd1]{ageom.pdf}\hss} \hbox to \wd1{\hfil\eightrm ---alleged inscription over the entrance} \hbox to \wd1{\hfil\eightrm of Plato's Academy, {\eightmit 4}th century BC} } \chapter Introduction. Therion is a tool for cave surveying. Its purpose is to help \list * archive survey data on computer in a form as close to the original notes and sketches as possible and retrieve them in a flexible and efficient way; * draw a nice up-to-date plan or elevation map; * create a realistic 3D model of the cave. \endlist It runs on Unix, Linux, MacOS\,X and Win32 operating systems. Source code and Windows installer are available on the Therion web page (\www{http://therion.speleo.sk}). Therion is distributed under the \www[GNU General Public License] {http://www.gnu.org/}. \subchapter Why Therion?. In the 1990s we've done a lot of caving and cave surveying. Some computer programs existed which displayed survey shots and stations after loop closure and error elimination. These were a great help, especially for large and complicated cave systems. We used the output of one of them---TJIKPR---as a background layer with survey stations for hand\discretionary{-}{-}{-}drawn maps. After finishing a huge 166-page Atlas of the Cave of Dead Bats, we soon had a problem: we found new passages connecting between known passages and surveyed them. After processing in TJIKPR, the new loops influenced the position of the old surveys; most survey stations now had a slightly different position from before due to the changed error distribution. So we could either draw the whole Atlas again, or accept that the location of some places was not accurate---in the case of loops with a length of approximately 1\,km there were sometimes errors of about 10\,m---and try to distort the new passages to fit to old ones. These problems remained when we tried to draw maps using some CAD programs. It was always hard to add new surveys without adapting the old ones to the newly calculated positions of survey stations in the whole cave. We found no program that was able to draw an up-to-date complex map (i.e.~not just survey shots with LRUD envelope), in which the old parts are modified according to the most recent known coordinates of survey stations. In 1999 we begun to think about creating own program for map drawing. We knew about programs which were perfectly suited for particular sub-tasks. There was \MP, a high level programming language for vector graphics description, Survex for excellent processing of survey shots, and \TeX\ for typesetting the results. We had only to glue them together. By Xmas 1999 we had a minimalistic version of Therion working for the first time. This consisted only of about 32\,kB of Perl scripts and \MP\ macros but served the purpose of showing that our ideas were implementable. During 2000--2001 we searched for the optimal format of the input data, programming language, concept of interactive map editor and internal algorithms with the help of Martin Sluka (Prague) and Martin Heller (Z\"urich). In 2002 we were able to introduce the first really usable version of Therion, which met our requirements. \subchapter Features. Therion is a command-line application. It processes input files, which are---including 2D maps---in text format, and creates files with 2D maps or 3D model as the output. The syntax of input files is described in detail in later chapters. You may create these files in an arbitrary plain text editor like {\it ed} or {\it vi}. They contain instructions for Therion like |point 1303 1004 pillar| where {\tt point} is a keyword for point symbol followed by its coordinates and a symbol type specification. Hand-editing of such files is not easy---especially when you draw maps, you need to think in spatial (Cartesian coordinate) terms. Thus there is a special GUI for Therion called XTherion. XTherion works as an advanced text editor, map editor (where maps are drawn fully interactively) and compiler (which runs Therion on the data). It may look quite complicated, but this approach has a lot of advantages: \list * There is strict separation of data and visualization. The data files specify only what is where, not what it looks like. The visual representation is added by \MP\ in later phases of data processing. (It's very similar concept to XML data representation.) This makes it possible to change map symbols used without changing the input data, or merge more maps created by different persons in different styles into one map with unified map symbols set. 2D maps are adapted for particular output scale (level of abstraction, non-linear scaling of symbols and texts) * All data are relative to survey station positions. If the coordinates of survey stations are changed in the process of loop closure, then all relevant data is moved correspondingly, so the map is always up-to-date. * Therion is not dependent on particular operating system, character encoding or input files editor; input files will remain human readable * It's possible to add new output formats * 3D model is generated from 2D maps to get a realistic 3D model without entering too much data * although the support for WYSIWYG is limited, you get what you want \endlist \subchapter Software requirements. ``A program should do one thing, and do it well.'' (Ken Thompson) Therefore we use some valuable external programs, which are related to the problems of typesetting and data visualization. Therion can then do its task much better than if it was a standalone application in which you could calibrate your printer or scanner and with one click send e-mail with your data. Therion needs: \list * \TeX\ distribution. Necessary only if you want to create 2D maps in PDF or SVG format. * Tcl/Tk with {\it BWidget} and optionally {\it tkImg} extension. It is only required for XTherion. * LCDF Typetools if you want to use easy setup for custom fonts in PDF maps * {\it convert} and {\it identify} utilities from ImageMagick distribution, if you want to use warping of survey sketches. * {\it ghostscript} if you want to create calibrated images from georeferenced PDF maps. \endlist Windows installer includes all required packages with the exception of {ghostscript}. Read the {\it Appendix} if you want to compile Therion yourself. For displaying of maps and models you may use any of the following programs: \list * any PDF or SVG viewer displaying 2D maps; * any GIS supporting DXF or {\it shapefile} formats for analyzing the maps; * appropriate 3D viewer for models exported in other than default format; * any SQL database client to process exported database. \endlist \subchapter Installation. {\bf Installation from sources (therion-5.*.tar.gz package):} The source code is a primary Therion distribution. It needs to be compiled and installed according to instructions in the {\it Appendix}. {\bf Installation on Windows:} Run the setup program and follow instructions. It installs all the required stuff and creates shortcuts to XTherion and Therion Book. \subsubchapter Setting-up environment. Therion reads settings from the initialization file. Default settings should work fine for users using just latin characters\[In the PDF map Therion renders most of the accented characters as a combination of accent and a base character. Some obscure accents might be omitted. Precomposed accented letters are included for Slovak and Czech languages.], standard \TeX\ and \MP. If you want to use own fonts for latin or non-latin characters in PDF maps, edit initialization file. Instructions on how to do this are in the {\it Appendix}. \subchapter How does it work?. So, now it's clear what Therion needs, let's have a look at the way it interacts with all these programs: \par\penalty-200 \midinsert \centerline{\MPpic{schema.1}} \endinsert DON'T PANIC! When your system is set-up right the majority of this is hidden from the user and all necessary programs are run automatically by Therion. For working with Therion it is enough to know that you have to create input data (best done with XTherion), run Therion, and display output files (3D model, map, log file) in the appropriate program. For those who want to understand more about it, here is a brief explanation of the above flowchart. Program names are in roman font, data files in italics. Arrows show data flow between programs. Temporary data files are not shown. Meaning of colors: \list * black---Therion programs and macros (XTherion is written in Tcl/Tk, so it needs this interpreter to run) * red---\TeX\ package * green---input files created by the user and output files created by Therion \endlist Therion itself does the main task. It reads the input files, interprets them, finds closed loops and distributes errors. Next it transforms all other data (e.g.~2D maps) according to new stations position. Therion exports data for 2D maps in \MP\ format. \MP\ gives the actual shape to abstract map symbols according to map symbol definitions; it creates a lot of PostScript files with small fragments of the cave. These are read back and converted to a PDF-like format, which forms input data for pdf\TeX. Pdf\TeX\ does all the typesetting and creates a PDF file of the cave map. Therion also exports 3D model (full or centreline) in various formats. Centreline may be exported for further processing in any SQL database. \subchapter First run. After explaining the basic principles of Therion it's a good idea to try it on the example data. \list * Download the sample data from Therion web page and unpack it somewhere on your computer's hard drive. * Run XTherion (under Unix and MacOS\,X by typing `xtherion' in the command line, under Windows there is a shortcut in the {\it Start} menu). * Open the file `thconfig' from the sample data directory in the `Compiler' window of XTherion * Press `F9' or `compile' in the menu to run Therion on the data---you'll get some messages from Therion, \MP\ and \TeX. * PDF maps and 3D model are created in the data directory. \endlist Additionally, you may open survey data files (*.th) in the `Text editor' window and map data files (*.th2) in the `Map editor' window of XTherion. Although the data format may look confusing for the first time, it will be explained in the following chapters. \endinput therion/thbook/ch02.tex0000644000076400010400000022622112007554334016041 0ustar userAdministrators\eject \vbox{\pic[93.2mm]{agrippa.jpg} \kern-3.48cm \eightit\baselineskip16.3pt\leftskip2mm\rightskip6.8cm\parindent4.05cm Only for you, children of doctrine and learning, have we written this work. Examine this book, ponder the meaning we have dispersed in various places and gathered again; what we have concealed in one place we have disclosed in another, that it may be understood by your wisdom.\par \hbox to 91.2mm{\hfil\eightrm ---Henricus C. Agrippa ab Nettesheym, \eightmit 1533} } \chapter Creating data files. \subchapter Basics. The input files for Therion are in text format. There are a few rules about how such a file should look: \list * There are two kinds of commands. One-line commands and multi-line commands. * A one-line command is terminated by an end of line character. The syntax of these is |command arg1 ... argN [-option1 value1 -option2 value2 ...]| where {\it arg1 ... argN} are obligatory arguments, and pairs {\it -option value} are options, which you may freely omit. Which arguments and options are available depends on the particular command. An example may be |point 643.5 505.0 gradient -orientation 144.7| with three obligatory arguments and one optional option/value pair. Sometimes options have no or multiple values. * Multi-line commands begin similarly to one line commands, but continue on subsequent lines until explicit command termination. These lines may contain either data or options, which are applied to subsequent data. If a data line starts with a word reserved for an option, you have to insert `|!|' in front of it. The syntax is |command arg1 ... argN [-option1 value1 -option2 value2 ...] ... optionX valueX data ... endcommand| Again, for better illustration, a real example follows: |line wall -id walltobereferenced 1174.0 744.5 1194.0 756.5 1192.5 757.5 1176.0 791.0 smooth off 1205.5 788.0 1195.5 832.5 1173.5 879.0 endline| This command |line| has one obligatory argument, a line type (passage wall in this case), followed by one option. The next two lines contain data (coordinates of B\'ezier curves to be drawn). The next line (``|smooth off|'') specifies an option which applies to subsequent data (i.e. not for the whole line, unlike the option |-id| in the first line) and the last line contains some more data. * if the value of an option or argument contains spaces, you should enclose this value in \hbox{|" "|} or \hbox{|[ ]|}. If you want to put a double-quote |"| into text in \hbox{|" "|} you need to insert it twice. Quotes are used for strings; brackets for numerical values and keywords. * each line ending with a backslash (|\|) is considered to continue on the next line, as if there was neither line-break nor backlash. * everything that follows |#|, until the end of line---even inside a command---is considered to be a comment, and is ignored. \endlist \subchapter Data types. Therion uses following data types: \list * {\it keyword} = a sequence of |A-Z|, |a-z|, |0-9| and |_-/| characters (not starting with `|-|'). * {\it ext\_keyword} = keyword that can also contain |+*.,'| characters, but not on the first position. * {\it date} = a date (or a time interval) specification in a format\hfil\break |YYYY.MM.DD@HH:MM:SS.SS - YYYY.MM.DD@HH:MM:SS.SS| or `|-|' to leave a date unspecified. * {\it person} = a person's first name and surname separated by whitespace characters. Use `|/|' to separate first name and surname if there are more names. * {\it string} = a sequence of any characters. \NEW{5.3}Strings may contain special tag || to separate translations. In multilingual strings only the text between || (where |XX| is the language selected in initialization or configuration file) and the next || tag is displayed on the output. If no match is found, everything before any occurence of || tag is displayed. * {\it units} = length units supported: meter[s], centimeter[s], inch[es], feet[s], yard[s] (also m, cm, in, ft, yd). Angle units supported: degree[s], minute[s] (also deg, min), grad[s], mil[s], percent[age] (clino only). A degree value may be entered in decimal notation ($x.y$) or in a special notation for degrees, minutes and seconds ($deg[{:}min[{:}sec]]$). \endlist \subchapter Coordinate systems. Therion supports coordinate transformations in geodetic coordinate systems. You can specify |cs| option in |centreline|, |surface|, |import| and |layout| objects and then enter XY data in given system. You can also specify output |cs| in configuration file. If you do not specify any |cs| in your dataset, it is assumed you are working in |local| coordinate system, and no conversions are done. If you specify |cs| anywhere in the data, you have to specify it for all location data (|fix|, |origin| in |layout| etc.). |cs| applies to all subsequent location data until other |cs| is specified or until the end of the current object, whichever comes first. Following coordinate systems are supported: \list * |UTM1| -- |UTM60| = universal transverse Mercator in northern hemisphere and given zone, WGS84 datum. * |UTM1S| -- |UTM60S| = UTM in southern hemisphere, WGS84 datum. * |lat-long|, |long-lat| = latitude (N positive, S negative) and longitude (E positive, W negative) in given order in degrees ($deg[{:}min[{:}sec]]$ allowed), WGS84 datum. By default, not supported on output. * |EPSG:| = Most of EPSG coordinate systems. Almost every coordinate system used worldwide has its own EPSG number. To find number of your system, see |extern/proj4/nad/epsg| file in the therion source distribution. * |ESRI:| = Similar to EPSG, but ESRI standard. * |JTSK|, |iJTSK| = Czechoslovak S-JTSK system with south and west axis (JTSK) and its modified version with axis pointing east and north and negative numbers (iJTSK). JTSK is not supported on output (iJTSK is). \endlist \subchapter Magnetic declination. Therion contains built-in IGRF\[See \www{http://www.ngdc.noaa.gov/IAGA/vmod/}] Earth geomagnetic field model valid for period 1900--2015\NEW{5.3}. It is automatically used if the cave is located in space using any of supported geodetic coordinate systems and no declination is specified by user. The computed declination is listed in the LOG file for information. \subchapter Data format. The syntax of input files is explained in the description of individual commands. Studying the example files distributed with Therion will help you understand. See also an example in the {\it Appendix}. Each of the following sections describes one Therion command using the following structure: {\it Description:} notes concerning this command. {\it Syntax:} schematic syntax description. {\it Context:} specifies the context in which is this command allowed. The {\it survey} context means that the command must be enclosed by |survey ... endsurvey| pair. The {\it scrap} context means that the command must be enclosed within |scrap ... endscrap| pair. Context {\it all} means that the command may be used anywhere. {\it Arguments:} a list of the obligatory arguments with explanations. {\it Options:} a list of the available options. {\it Command-like options:} options for multi-line commands, which can be specified among the data lines. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubchapter `encoding'. \description sets the encoding of input file. This allows the use of non-ASCII characters in input files. \enddescription \syntax |encoding | \endsyntax \context It should be the very first command in the file. \endcontext \arguments * || = to see a list of all the supported encoding names, run Therion with |--print-encodings| option. `UTF-8' (Unicode) and `ASCII' (7\,bit) encodings are always supported. \endarguments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubchapter `input'. \description inserts the contents of a file in place of the command. Default extension is `.th' and may be omitted. For greatest portability use relative paths and Unix slashes `|/|', not Windows backslashes `|\|', as directory separators. \enddescription \syntax |input | \endsyntax \context all \endcontext \arguments * || \endarguments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubchapter `survey'. \description Survey is the main data structure. % Each data object must belong to a survey. Surveys may be nested---this allows a hierarchical structure to be built. Usually some level of this hierarchical structure survey represents caves, higher levels karst areas and lower levels e.g.~passages. Each survey has its own namespace specified by its || argument. Objects (like survey stations or scraps; see below) which belong to a subsurvey of the current survey are referenced as |@|, or, if there are more nesting levels |@.|.\[Note: it's not possible to reference any object from the higher-level surveys.] This means, that object identifiers must be unique only in the scope of one survey. For instance, survey stations names can be the same if they are in different surveys. This allows stations to be numbered from 0 in each survey or the joining of two caves into one cave system without renaming survey stations. \enddescription \syntax |survey [OPTIONS] ... other therion objects ... endsurvey []| \endsyntax \context none, survey \endcontext \arguments *|| = survey identifier \endarguments \options * |namespace | = specify whether survey creates namespace (|on| by default) * |declination | = set the default declination for all data objects in this survey (which can be overridden by declination definitions in subsurveys). The || has three forms: 1. |[]| an empty string. This will reset the declination definition. 2. |[ ]| will set a single value (also for undated surveys). 3. |[ [ ... ] ]| will set declination for several dates. Then the declination of each shot will be set according to the date specification of the data object. If you want to explicitly set the declination for undated survey data, use `|-|' instead of date. If no declination is specified and some geodetic coordinate system is defined, the declination is automatically computed using built-in geomagnetic model. N.B.: The declination is positive when the magnetic north is east of true north. * |person-rename | = rename a person whose name has been changed * |title | = description of the object * |entrance | = specifies the main entrance to the cave represented by this survey. If not specified and there is exactly one station marked entrance in this survey, it is considered to represent a cave also. This information is used for |cave-list| export. \endoptions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubchapter `centreline'. \description Survey data (centreline) specification. The syntax is borrowed from Survex with minor modifications; the Survex manual may be useful as an additional reference for the user. A synonym term `centerline' may be used. \enddescription \syntax |centreline [OPTIONS] date team [] explo-date explo-team instrument calibrate [] units [] sd grade declination infer mark flags station [] cs fix [ [ ]] equate data \n"); fprintf(out,"\n"); numst = 0; for(i = 0; i < nlegs; i++, tlegs++) { if (this->is_leg_exported(*tlegs) && (((*tlegs)->leg->flags & TT_LEGFLAG_SURFACE) == 0)) { cur_st = dbp->db1d.station_vec[((*tlegs)->reverse ? (*tlegs)->leg->to.id : (*tlegs)->leg->from.id) - 1].uid - 1; if (cur_st != last_st) { if (numst > 0) fprintf(out,"\n\n"); fprintf(out,"\n\n"); thcs2cs(thcs_get_data(thcfg.outcs)->params, thcs_get_data(TTCS_LONG_LAT)->params, dbp->db1d.station_vec[cur_st].x, dbp->db1d.station_vec[cur_st].y, dbp->db1d.station_vec[cur_st].z, x, y, z); fprintf(out, "\t%.14f,%.14f,%.14f\n", x / THPI * 180.0, y / THPI * 180.0, z); numst = 1; } last_st = dbp->db1d.station_vec[((*tlegs)->reverse ? (*tlegs)->leg->from.id : (*tlegs)->leg->to.id) - 1].uid - 1; thcs2cs(thcs_get_data(thcfg.outcs)->params, thcs_get_data(TTCS_LONG_LAT)->params, dbp->db1d.station_vec[last_st].x, dbp->db1d.station_vec[last_st].y, dbp->db1d.station_vec[last_st].z, x, y, z); fprintf(out, "\t%.14f,%.14f,%.14f\n", x / THPI * 180.0, y / THPI * 180.0, z); numst++; } } if (numst > 0) fprintf(out,"\n\n"); fprintf(out,"\n"); fprintf(out,"\n\n\n"); fclose(out); #ifdef THDEBUG #else thprintf("done\n"); thtext_inline = false; #endif } therion/thexpmodel.h0000644000076400010400000001265012255646604015625 0ustar userAdministrators/** * @file thexpmodel.h * Export class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thexpmodel_h #define thexpmodel_h #include "thexport.h" /** * Model export options. */ enum { TT_EXPMODEL_OPT_UNKNOWN = 0, ///< Unknown option TT_EXPMODEL_OPT_FORMAT, ///< Output option. TT_EXPMODEL_OPT_ENABLE, ///< Output option. TT_EXPMODEL_OPT_DISABLE, ///< Output option. TT_EXPMODEL_OPT_WALLSRC, ///< Output option. TT_EXPMODEL_OPT_ENCODING, ///< Output encoding. }; /** * Options parsing table. */ static const thstok thtt_expmodel_opt[] = { {"-disable", TT_EXPMODEL_OPT_DISABLE}, {"-enable", TT_EXPMODEL_OPT_ENABLE}, {"-enc", TT_EXPMODEL_OPT_ENCODING}, {"-encoding", TT_EXPMODEL_OPT_ENCODING}, {"-fmt", TT_EXPMODEL_OPT_FORMAT}, {"-format", TT_EXPMODEL_OPT_FORMAT}, {"-wall-source", TT_EXPMODEL_OPT_WALLSRC}, {NULL, TT_EXPMODEL_OPT_UNKNOWN} }; /** * Model export item options. */ enum { TT_EXPMODEL_ITEM_UNKNOWN = 0, TT_EXPMODEL_ITEM_WALLS = 1, TT_EXPMODEL_ITEM_CAVECENTERLINE = 2, TT_EXPMODEL_ITEM_SURFACECENTERLINE = 4, TT_EXPMODEL_ITEM_CENTERLINE = 6, TT_EXPMODEL_ITEM_SURFACE = 8, TT_EXPMODEL_ITEM_SPLAYSHOTS = 16, TT_EXPMODEL_ITEM_ALL = 255, }; /** * Options parsing table. */ static const thstok thtt_expmodel_items[] = { {"all", TT_EXPMODEL_ITEM_ALL}, {"cave-centerline", TT_EXPMODEL_ITEM_CAVECENTERLINE}, {"cave-centreline", TT_EXPMODEL_ITEM_CAVECENTERLINE}, {"centerline", TT_EXPMODEL_ITEM_CENTERLINE}, {"centreline", TT_EXPMODEL_ITEM_CENTERLINE}, {"splay-shots", TT_EXPMODEL_ITEM_SPLAYSHOTS}, {"surface", TT_EXPMODEL_ITEM_SURFACE}, {"surface-centerline", TT_EXPMODEL_ITEM_SURFACECENTERLINE}, {"surface-centreline", TT_EXPMODEL_ITEM_SURFACECENTERLINE}, {"walls", TT_EXPMODEL_ITEM_WALLS}, {NULL, TT_EXPMODEL_ITEM_UNKNOWN} }; /** * Model export formats. */ enum { TT_EXPMODEL_FMT_UNKNOWN = 0, ///< Unknown option TT_EXPMODEL_FMT_SURVEX, ///< survex TT_EXPMODEL_FMT_COMPASS, ///< compass TT_EXPMODEL_FMT_THERION, ///< therion TT_EXPMODEL_FMT_LOCH, ///< loch TT_EXPMODEL_FMT_3DMF, ///< 3dmf TT_EXPMODEL_FMT_VRML, ///< vrml TT_EXPMODEL_FMT_DXF, ///< dxf TT_EXPMODEL_FMT_SHP, ///< esri shapefile TT_EXPMODEL_FMT_KML, ///< google earth format }; /** * Format parsing table. */ static const thstok thtt_expmodel_fmt[] = { {"3d", TT_EXPMODEL_FMT_SURVEX}, {"3dmf", TT_EXPMODEL_FMT_3DMF}, {"compass", TT_EXPMODEL_FMT_COMPASS}, {"dxf", TT_EXPMODEL_FMT_DXF}, {"esri", TT_EXPMODEL_FMT_SHP}, {"kml", TT_EXPMODEL_FMT_KML}, {"loch", TT_EXPMODEL_FMT_LOCH}, {"shapefile", TT_EXPMODEL_FMT_SHP}, {"shapefiles", TT_EXPMODEL_FMT_SHP}, {"shp", TT_EXPMODEL_FMT_SHP}, {"survex", TT_EXPMODEL_FMT_SURVEX}, {"vrml", TT_EXPMODEL_FMT_VRML}, // {"xtherion", TT_EXPMODEL_FMT_THERION}, {NULL, TT_EXPMODEL_FMT_UNKNOWN} }; /** * Model wall sources. */ enum { TT_WSRC_UNKNOWN = 0, TT_WSRC_CENTERLINE = 1, TT_WSRC_MAPS = 2, TT_WSRC_ALL = 3, }; /** * Options parsing table. */ static const thstok thtt_expmodel_wallsrc[] = { {"all", TT_WSRC_ALL}, {"centerline", TT_WSRC_CENTERLINE}, {"centreline", TT_WSRC_CENTERLINE}, {"maps", TT_WSRC_MAPS}, {NULL, TT_WSRC_UNKNOWN} }; /** * Main export class. */ class thexpmodel : public thexport { public: int format, ///< Output format. encoding; ///< Output encoding. unsigned items, wallsrc; bool is_leg_exported(class thdb1dl * l); ///< Whether to export leg. void export_3d_file(class thdatabase * dbp); ///< Export survex 3d file. void export_plt_file(class thdatabase * dbp); ///< Export compass plt file. //void export_thm_file(class thdatabase * dbp); ///< Export therion model file. void export_vrml_file(class thdatabase * dbp); ///< Export vrml file. void export_3dmf_file(class thdatabase * dbp); ///< Export 3dmf file. void export_dxf_file(class thdatabase * dbp); ///< Export compass plt file. void export_lox_file(class thdatabase * dbp); ///< Export lox file. void export_shp_file(class thdatabase * dbp); ///< Export shp file. void export_kml_file(class thdatabase * dbp); ///< Export kml file. public: thexpmodel(); ///< Default constructor. /** * Parse model export options. */ virtual void parse_options(int & argx, int nargs, char ** args); /** * Dump object into file. */ virtual void dump_body(FILE * xf); /** * Dump object into file. */ virtual void dump_header(FILE * xf); /** * Make export. */ virtual void process_db(class thdatabase * dbp); }; #endif therion/thexport.cxx0000644000076400010400000000676712042467130015705 0ustar userAdministrators/** * @file thexport.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thexport.h" #include "thexception.h" #include "thconfig.h" #include "thdatabase.h" #include "thexporter.h" #include "thcs.h" #include thexport::thexport() { this->outpt = ""; this->outpt_def = false; this->export_mode = 0; this->cs = TTCS_LOCAL; } thexport::~thexport() {} void thexport::assign_config(class thconfig * cptr) { this->cfgptr = cptr; this->cfgpath = cptr->cfg_file.get_cif_path(); } void thexport::parse(int nargs, char ** args) { int ax = 0, oax; this->parse_arguments(ax, nargs, args); while (ax < nargs) { oax = ax; this->parse_options(ax, nargs, args); if (oax == ax) ththrow(("unknown option -- \"%s\"", args[ax])) } } void thexport::parse_arguments(int & argx, int nargs, char ** args) { } void thexport::parse_options(int & argx, int nargs, char ** args) { int optid = thmatch_token(args[argx], thtt_exp_opt); int optx = argx; switch (optid) { case TT_EXP_OPT_OUTPUT: argx++; if (argx >= nargs) ththrow(("missing output file name -- \"%s\"",args[optx])) if (strlen(args[argx]) > 0) { this->outpt = this->cfgptr->get_db()->strstore(args[argx]); outpt_def = true; } else ththrow(("empty file name not allowed -- \"%s\"",args[optx])) argx++; break; case TT_EXP_OPT_CS: argx++; if (argx >= nargs) ththrow(("missing coordiate system -- \"%s\"",args[optx])) { int id = thcs_parse(args[argx]); if (id == TTCS_UNKNOWN) { ththrow(("unknown coordinate system -- %s", args[argx])); } if ((thcfg.outcs != id) && (id == TTCS_LOCAL)) ththrow(("mixing local and global coordinate system -- %s", args[argx])); this->cs = id; } argx++; break; default: break; } } void thexport::dump(FILE * xf) { this->dump_header(xf); this->dump_body(xf); fprintf(xf,"\n"); } void thexport::dump_header(FILE * xf) { fprintf(xf,"export %s", thmatch_string(this->export_mode, thtt_exporter)); } void thexport::dump_body(FILE * xf) { if (this->outpt_def) { thdecode_arg(&(this->cfgptr->bf1), this->outpt); fprintf(xf," -output %s",this->cfgptr->bf1.get_buffer()); } } const char * thexport::get_output(const char * defname) { static thbuffer outptfname; outptfname = this->cfgpath.get_buffer(); if (this->outpt_def) { if (thpath_is_absolute(this->outpt)) return this->outpt; else outptfname += this->outpt; } else { outptfname += defname; } return outptfname.get_buffer(); } therion/thexport.h0000644000076400010400000000620712042444006015314 0ustar userAdministrators/** * @file thexport.h * Export class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thexport_h #define thexport_h #include #ifndef THMSVC #include #endif #include "thparse.h" #include "thobjectsrc.h" /** * General export options. */ enum { TT_EXP_OPT_UNKNOWN = 0, ///< Unknown option TT_EXP_OPT_OUTPUT, ///< Output option. TT_EXP_OPT_CS, ///< Output coordinate system. }; /** * Options parsing table. */ static const thstok thtt_exp_opt[] = { {"-cs", TT_EXP_OPT_CS}, {"-o", TT_EXP_OPT_OUTPUT}, {"-output", TT_EXP_OPT_OUTPUT}, {NULL, TT_EXP_OPT_UNKNOWN} }; /** * Main export class. */ class thexport { public: friend class thexporter; class thconfig * cfgptr; ///< Current config pointer. int export_mode; ///< Export mode. thobjectsrc src; ///< Export source. class thdatabase * db; ///< Exported database. const char * outpt; ///< Output file name. thbuffer cfgpath; ///< Config path. bool outpt_def; ///< Whether output file defined. int cs; ///< Output coordinate system. public: thexport(); ///< Default constructor. virtual ~thexport(); void assign_config(class thconfig * cptr); ///< ??? /** * Parse format and options. */ virtual void parse(int nargs, char ** args); /** * Parse export arguments. */ virtual void parse_arguments(int & argx, int nargs, char ** args); /** * Parse export options. */ virtual void parse_options(int & argx, int nargs, char ** args); /** * Dump object into file. */ virtual void dump(FILE * xf); /** * Dump object into file. */ virtual void dump_body(FILE * xf); /** * Dump object into file. */ virtual void dump_header(FILE * xf); /** * Make export. */ virtual void process_db(class thdatabase * dbp) = 0; /** * Return path to output file. */ virtual const char * get_output(const char * defname); }; #ifdef THMSVC #define strcasecmp _stricmp #endif #define thexp_set_ext_fmt(extension,cformat) { \ if (strlen(this->outpt) > strlen(extension)) { \ if (strcasecmp(&(this->outpt[strlen(this->outpt) - strlen(extension)]), extension) == 0) { \ this->format = cformat; \ } \ } \ } #endif therion/thexporter.cxx0000644000076400010400000001007510751762774016240 0ustar userAdministrators/** * @file thexporter.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thexporter.h" #include "thexception.h" #include "thconfig.h" #include "thdatabase.h" #include "thexpmodel.h" #include "thexpmap.h" #include "thexpdb.h" #include "thexpsys.h" #include "thexptable.h" #include thexporter::thexporter() { this->cfgptr = NULL; } thexporter::~thexporter() { thexporter_list::iterator ii; for(ii = this->xlist.begin(); ii != this->xlist.end(); ii++) { delete (*ii); } } void thexporter::assign_config(class thconfig * cptr) { this->cfgptr = cptr; } void thexporter::parse_system(char * system_cmd) { if (strlen(system_cmd) == 0) ththrow(("empty system command not allowed")) thexpsys * xp; xp = new thexpsys; xp->src.name = thdb.strstore(thcfg.get_cfg_file()->get_cif_name(),true); xp->src.line = thcfg.get_cfg_file()->get_cif_line_number(); xp->assign_config(this->cfgptr); xp->cmd = thdb.strstore(system_cmd, false); this->xlist.push_back(xp); } void thexporter::parse_export(int nargs, char ** args) { thexport * xp; int expmode; if (nargs < 1) ththrow(("not enough export arguments")) expmode = thmatch_token(args[0], thtt_exporter); switch (expmode) { case TT_EXP_MODEL: xp = new thexpmodel; xp->export_mode = expmode; break; case TT_EXP_DATABASE: xp = new thexpdb; xp->export_mode = expmode; break; case TT_EXP_CONTLIST: case TT_EXP_SURVEYLIST: case TT_EXP_CAVELIST: xp = new thexptable; xp->export_mode = expmode; break; case TT_EXP_MAP: case TT_EXP_ATLAS: xp = new thexpmap; xp->export_mode = expmode; break; default: ththrow(("unsupported export type -- %s", args[0])) } xp->src.name = thdb.strstore(thcfg.get_cfg_file()->get_cif_name(),true); xp->src.line = thcfg.get_cfg_file()->get_cif_line_number(); // take care of layout revision switch (expmode) { case TT_EXP_MAP: case TT_EXP_ATLAS: thdb.revision_set.insert(threvision(thdb.objid,0,xp->src)); break; } nargs--; args++; xp->assign_config(this->cfgptr); xp->parse(nargs, args); this->xlist.push_back(xp); } void thexporter::dump_export(FILE * xf) { thexporter_list::iterator ii; if ((!this->xlist.empty()) && (!this->cfgptr->get_comments_skip())) fprintf(xf,"# Export settings.\n"); for(ii = this->xlist.begin(); ii != this->xlist.end(); ii++) { (*ii)->dump(xf); } if (!this->xlist.empty()) fprintf(xf,"\n"); } void thexporter::export_db(class thdatabase * dp) { thexporter_list::iterator ii; // najprv spracujeme projekcie for(ii = this->xlist.begin(); ii != this->xlist.end(); ii++) { switch ((*ii)->export_mode) { case TT_EXP_MAP: case TT_EXP_ATLAS: ((thexpmap*)(*ii))->parse_projection(dp); } } // exportujeme for(ii = this->xlist.begin(); ii != this->xlist.end(); ii++) { switch ((*ii)->export_mode) { case TT_EXP_MAP: case TT_EXP_ATLAS: thexporter_quick_map_export = false; (*ii)->process_db(dp); break; default: (*ii)->process_db(dp); break; } } } bool thexporter_quick_map_export; therion/thexporter.h0000644000076400010400000000511310751762772015660 0ustar userAdministrators/** * @file thexporter.h * Exporter class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thexporter_h #define thexporter_h #include "thexport.h" #include "thparse.h" #include #include /** * Export types. */ enum { TT_EXP_UNKNOWN = 0, ///< Not match. TT_EXP_MODEL, ///< 3D model. TT_EXP_MAP, ///< 2D map. TT_EXP_ATLAS, ///< 2D atlas. TT_EXP_DATABASE, ///< Database export. TT_EXP_CONTLIST, ///< Table with specified data. TT_EXP_SURVEYLIST, ///< Table with specified data. TT_EXP_CAVELIST, ///< Export entrance list. }; /** * Export token table. */ static const thstok thtt_exporter[] = { {"atlas", TT_EXP_ATLAS}, {"cave-list", TT_EXP_CAVELIST}, {"continuation-list", TT_EXP_CONTLIST}, {"database", TT_EXP_DATABASE}, {"map", TT_EXP_MAP}, {"model", TT_EXP_MODEL}, {"survey-list", TT_EXP_SURVEYLIST}, {NULL, TT_EXP_UNKNOWN} }; /** * Export list. */ typedef std::list thexporter_list; /** * Data exporter class. */ class thexporter { class thconfig * cfgptr; ///< Current config pointer. thexporter_list xlist; ///< Export list. public: thexporter(); ///< Default constructor. ~thexporter(); ///< Default deconstructor. void assign_config(class thconfig * cptr); ///< ?? /** * Parse export option. */ void parse_export(int nargs, char ** args); /** * Parse export option. */ void parse_system(char * system_cmd); /** * Export database. */ void export_db(class thdatabase * dp); /** * Dump export into file. */ void dump_export(FILE * xf); }; /** * Quick map export indicator. */ extern bool thexporter_quick_map_export; #endif therion/thexpshp.cxx0000644000076400010400000005557412010660372015671 0ustar userAdministrators/** * @file thexpshp.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thexpmap.h" #include "thexporter.h" #include "thexception.h" #include "thdatabase.h" #include "thdb2d.h" #include "thdb2dmi.h" #include "thlayout.h" #include "thmap.h" #include "thsketch.h" #include "thconfig.h" #include #include "thtmpdir.h" #ifndef THMSVC #include #include #else #include #define mkdir _mkdir #define getcwd _getcwd #define chdir _chdir #define putenv _putenv #define hypot _hypot #define S_ISDIR(v) (((v) | _S_IFDIR) != 0) #endif #include "thchenc.h" #include "thdb1d.h" #include "thinit.h" #include "thlogfile.h" #include "thcmdline.h" #include "thsurvey.h" #include "thchenc.h" #include #include "thmapstat.h" #include "thsurface.h" #include #include "loch/lxMath.h" #include "extern/shapefil.h" #include "thexpmodel.h" #include "thcsdata.h" #include #include #include #include #include "thcs.h" #ifdef THMSVC #define snprintf _snprintf #define strcasecmp _stricmp #endif #include "thexpshp.h" thexpshpf::thexpshpf() { this->m_fnm = "default"; this->m_fpath = NULL; this->m_is_open = false; this->m_xshp = NULL; this->m_type = SHPT_NULL; this->m_object_id = -1; this->m_num_objects = 0; } bool thexpshpf::open() { if (this->m_is_open) return true; // set file path this->m_is_open = false; thbuffer fp; fp = this->m_xshp->m_dirname; fp += "/"; fp += this->m_fnm; this->m_fpath = thdb.strstore(fp); this->m_hndl = SHPCreate(this->m_fpath, this->m_type); if (this->m_hndl == NULL) return false; this->m_is_open = true; return true; } void thexpshpf::close() { if (this->m_is_open) { SHPClose(this->m_hndl); std::string dbfname(this->m_fpath); dbfname += ".dbf"; int enc = TT_UTF_8; if (this->m_xshp != NULL) { if (this->m_xshp->m_expmap != NULL) enc = this->m_xshp->m_expmap->encoding; if (this->m_xshp->m_expmodel != NULL) enc = this->m_xshp->m_expmodel->encoding; } this->m_attributes.export_dbf(dbfname.c_str(), enc); if ((thcfg.outcs != TTCS_LOCAL) && (strlen(thcs_get_data(thcfg.outcs)->prjspec) > 0)) { FILE * prjf; std::string prjname(this->m_fpath); prjname += ".prj"; prjf = fopen(prjname.c_str(), "w"); fprintf(prjf, "%s", thcs_get_data(thcfg.outcs)->prjspec); fclose(prjf); } } } void thexpshpf::init(thexpshp * xshp, const char * fnm, int type) { this->m_fnm = fnm; this->m_fpath = NULL; this->m_xshp = xshp; this->m_type = type; } thexpshp::thexpshp() { this->m_dirname = NULL; this->m_xproj = NULL; this->m_expmap = NULL; this->m_expmodel = NULL; this->m_fscrap.init(this, "outline2d", SHPT_POLYGONZ); this->m_fpoints.init(this, "points2d", SHPT_POINTZ); this->m_flines.init(this, "lines2d", SHPT_ARCZ); this->m_fareas.init(this, "areas2d", SHPT_POLYGONZ); this->m_fstations3D.init(this, "stations3d", SHPT_POINTZ); this->m_fshots3D.init(this, "shots3d", SHPT_ARCZ); this->m_fwalls3D.init(this, "walls3d", SHPT_MULTIPATCH); } bool thexpshp::open(const char * dirname) { // create directory #ifdef THWIN32 if (mkdir(dirname) != 0) { #else if (mkdir(dirname,0046750) != 0) { #endif struct #ifdef THMSVC _stat #else stat #endif buf; #ifdef THMSVC _stat #else stat #endif (dirname,&buf); if ((errno == EEXIST) && (S_ISDIR(buf.st_mode))) { // directory already exists } else { return false; } } // save dir name this->m_dirname = dirname; return true; } void thexpshp::close() { this->m_fscrap.close(); this->m_fstations3D.close(); this->m_fshots3D.close(); this->m_fwalls3D.close(); this->m_fpoints.close(); this->m_flines.close(); this->m_fareas.close(); } void thexpshpf::object_clear() { this->m_point_list.clear(); this->m_part_list.clear(); } void thexpshpf::object_insert() { this->m_object_id = -1; if (!this->open()) return; size_t l = this->m_point_list.size(); if (l == 0) return; size_t lp = this->m_part_list.size(); int * apstart, * aptype; double * ax, * ay, * az, * am; ax = new double [l]; ay = new double [l]; az = new double [l]; am = new double [l]; size_t i; std::list::iterator ipoint; std::list::iterator ipart; for (i = 0, ipoint = this->m_point_list.begin(); ipoint != this->m_point_list.end(); ipoint++, i++) { ax[i] = ipoint->m_x; ay[i] = ipoint->m_y; az[i] = ipoint->m_z; am[i] = ipoint->m_m; } if (lp > 0) { apstart = new int [lp]; aptype = new int [lp]; for (i = 0, ipart = this->m_part_list.begin(); ipart != this->m_part_list.end(); ipart++, i++) { apstart[i] = ipart->m_start; aptype[i] = ipart->m_type; } } else { apstart = NULL; aptype = NULL; } SHPObject * obj; obj = SHPCreateObject( this->m_type, -1, (int) lp, apstart, aptype, (int) l, ax, ay, az, am); this->m_object_id = SHPWriteObject(this->m_hndl, -1, obj); if (this->m_object_id > -1) this->m_attributes.insert_object(NULL, this->m_object_id); SHPDestroyObject(obj); if (lp > 0) { delete [] apstart; delete [] aptype; } delete [] ax; delete [] ay; delete [] az; delete [] am; this->m_num_objects++; this->object_clear(); } void thexpshpf::polygon_start_ring(bool outer) { this->m_ring_list.clear(); this->m_ring_outer = outer; thexpshpf_part p; p.m_start = (int) this->m_point_list.size(); if (outer) p.m_type = SHPP_OUTERRING; else p.m_type = SHPP_INNERRING; this->m_part_list.push_back(p); } void thexpshpf::tristrip_start() { this->m_ring_list.clear(); thexpshpf_part p; p.m_start = (int) this->m_point_list.size(); p.m_type = SHPP_TRISTRIP; this->m_part_list.push_back(p); } // insert points from bezier curve void insert_line_segment(thline * ln, bool reverse, std::list & lst, long startp = 0, long endp = -1) { thdb2dlp * cpt, * prevpt; thdb2dpt * cp1, * cp2; double t, tt, ttt, t_, tt_, ttt_, nx, ny, nz, na, px, py; long pnum; prevpt = NULL; if (reverse) cpt = ln->last_point; else cpt = ln->first_point; pnum = 0; while (cpt != NULL) { // insert bezier curve if (pnum == startp) prevpt = NULL; if ((pnum >= startp) && ((endp < 0) || (pnum <= endp))) { if (prevpt != NULL) { px = prevpt->point->xt; py = prevpt->point->yt; if (reverse) { cp1 = prevpt->cp2; cp2 = prevpt->cp1; } else { cp1 = cpt->cp1; cp2 = cpt->cp2; } if ((cp1 != NULL) && (cp2 == NULL)) cp2 = cp1; if ((cp1 == NULL) && (cp2 != NULL)) cp1 = cp2; if ((cp1 != NULL) && (cp2 != NULL)) { for(t = 0.05; t < 1.0; t += 0.05) { tt = t * t; ttt = tt * t; t_ = 1.0 - t; tt_ = t_ * t_; ttt_ = tt_ * t_; nx = ttt_ * prevpt->point->xt + 3.0 * t * tt_ * cp1->xt + 3.0 * tt * t_ * cp2->xt + ttt * cpt->point->xt; ny = ttt_ * prevpt->point->yt + 3.0 * t * tt_ * cp1->yt + 3.0 * tt * t_ * cp2->yt + ttt * cpt->point->yt; nz = t_ * cpt->point->zt + t * prevpt->point->zt; na = t_ * cpt->point->at + t * prevpt->point->at; // resolution 0.1 m if (hypot(nx - px, ny - py) > 0.1) { lst.push_back(thexpshpf_data(nx + ln->fscrapptr->proj->rshift_x, ny + ln->fscrapptr->proj->rshift_y, nz + ln->fscrapptr->proj->rshift_z, na)); px = nx; py = ny; } } } } } // insert point it self if ((pnum >= startp) && ((endp < 0) || (pnum <= endp))) lst.push_back(thexpshpf_data(cpt->point->xt + ln->fscrapptr->proj->rshift_x, cpt->point->yt + ln->fscrapptr->proj->rshift_y, cpt->point->zt + ln->fscrapptr->proj->rshift_z, cpt->point->at)); // next point prevpt = cpt; if (reverse) cpt = cpt->prevlp; else cpt = cpt->nextlp; pnum++; } } void thexpshpf::polygon_insert_line(thline * ln, bool reverse) { insert_line_segment(ln, reverse, this->m_ring_list); } void thexpshpf::point_insert(double x, double y, double z, double m) { this->m_point_list.push_back(thexpshpf_data(x,y,z,m)); } void thexpshpf::polygon_close_ring() { // check polygon orientation double area; std::list::iterator i, iprev; if (this->m_ring_list.size() < 2) return; iprev = this->m_ring_list.end(); iprev--; area = 0.0; for (i = this->m_ring_list.begin(); i != this->m_ring_list.end(); i++) { area += iprev->m_x * i->m_y - iprev->m_y * i->m_x; iprev = i; } area *= 0.5; bool reverse = ((area > 0) && m_ring_outer) || ((area < 0) && (!m_ring_outer)); // according to orientation, insert points to point list if (reverse) { for(i = this->m_ring_list.end(); i != this->m_ring_list.begin(); ) { i--; this->m_point_list.push_back(*i); } } else { for(i = this->m_ring_list.begin(); i != this->m_ring_list.end(); i++) { this->m_point_list.push_back(*i); } } } void thexpshp::xscrap2d(thscrap * scrap, thdb2dxm * xmap, thdb2dxs * xbasic) { thbuffer stnbuff; // export scrap outline this->m_fscrap.object_clear(); thscraplo * lo = scrap->get_outline(), * lo2; while (lo != NULL) { if (lo->line->outline != TT_LINE_OUTLINE_NONE) { lo2 = lo; this->m_fscrap.polygon_start_ring(lo->line->outline == TT_LINE_OUTLINE_OUT); while (lo2 != NULL) { this->m_fscrap.polygon_insert_line(lo2->line, lo2->mode == TT_OUTLINE_REVERSED); lo2 = lo2->next_line; } this->m_fscrap.polygon_close_ring(); } lo = lo->next_outline; } this->m_fscrap.object_insert(); if (this->m_fscrap.m_object_id > -1) { // system attributes this->m_fscrap.m_attributes.insert_attribute("_ID", (long) scrap->id); this->m_fscrap.m_attributes.insert_attribute("_NAME", scrap->name); this->m_fscrap.m_attributes.insert_attribute("_TITLE", scrap->title); this->m_fscrap.m_attributes.insert_attribute("_MAP_ID", (long) xmap->map->id); this->m_fscrap.m_attributes.insert_attribute("_MAP_LEVEL", (long) xmap->output_number); this->m_fscrap.m_attributes.insert_attribute("_MAP_TITLE", xmap->map->title); this->m_fscrap.m_attributes.insert_attribute("_SURVEY", scrap->fsptr->get_full_name()); if (this->m_xproj->type == TT_2DPROJ_PLAN) this->m_fscrap.m_attributes.insert_attribute("_Z", scrap->z + this->m_xproj->shift_z); // user defined attributes this->m_fscrap.m_attributes.copy_attributes(thdb.attr.get_object(scrap->id)); } // export centerline thscraplp * slp; slp = scrap->get_polygon(); while (slp != NULL) { if (slp->lnio) { this->m_flines.point_insert(slp->lnx1 + scrap->proj->rshift_x, slp->lny1 + scrap->proj->rshift_y, slp->lnz1 + scrap->proj->rshift_z); this->m_flines.point_insert(slp->lnx2 + scrap->proj->rshift_x, slp->lny2 + scrap->proj->rshift_y, slp->lnz2 + scrap->proj->rshift_z); this->m_flines.object_insert(); this->m_flines.m_attributes.insert_attribute("_SCRAP_ID",(long) scrap->id); this->m_flines.m_attributes.insert_attribute("_TYPE","centerline"); } else { this->m_fpoints.point_insert(slp->stx + scrap->proj->rshift_x, slp->sty + scrap->proj->rshift_y, slp->stz + scrap->proj->rshift_z); this->m_fpoints.object_insert(); this->m_fpoints.m_attributes.insert_attribute("_SCRAP_ID",(long) scrap->id); this->m_fpoints.m_attributes.insert_attribute("_TYPE","station"); this->m_fpoints.m_attributes.insert_attribute("_NAME",slp->station->name); this->m_fpoints.m_attributes.insert_attribute("_COMMENT",slp->station->comment); } slp = slp->next_item; } // export objects th2ddataobject * obj; thpoint * ppt; thline * pln; tharea * parea; obj = scrap->ls2doptr; long sp, cp, symid; int csubtype; thdb2dlp * lp; char typefc[2]; typefc[1] = 0; std::string tststr, tstr; const char * ststr; while (obj != NULL) { switch (obj->get_class_id()) { case TT_POINT_CMD: ppt = ((thpoint*)obj); this->m_fpoints.point_insert(ppt->point->xt + scrap->proj->rshift_x, ppt->point->yt + scrap->proj->rshift_y, ppt->point->zt + scrap->proj->rshift_z, ppt->point->at); this->m_fpoints.object_insert(); this->m_fpoints.m_attributes.insert_attribute("_SCRAP_ID",(long) ppt->fscrapptr->id); this->m_fpoints.m_attributes.insert_attribute("_TYPE",thmatch_string(ppt->type, thtt_point_types)); tstr = thmatch_string(ppt->type, thtt_point_types); tststr = tstr; ststr = thmatch_string(ppt->subtype, thtt_point_subtypes); if ((ppt->type != TT_POINT_TYPE_U) && (ststr != NULL)) { tststr += ":"; tststr += ststr; } symid = thsymbolset__get_id("point", tststr.c_str()); if (symid < 0) symid = thsymbolset__get_id("point", tstr.c_str()); if (symid < 0) symid = 0; typefc[0] = thsymbolset__fontchar[symid]; this->m_fpoints.m_attributes.insert_attribute("_TYPEFC",(const char *)typefc); this->m_fpoints.m_attributes.insert_attribute("_TYPEFCR", thisnan(ppt->orient) ? 0.0 : 360.0 - ppt->orient); this->m_fpoints.m_attributes.insert_attribute("_SUBTYPE", ppt->type != TT_POINT_TYPE_U ? (thmatch_string(ppt->subtype, thtt_point_subtypes)) : ppt->m_subtype_str); this->m_fpoints.m_attributes.copy_attributes(thdb.attr.get_object(ppt->id)); switch (ppt->type) { case TT_POINT_TYPE_LABEL: case TT_POINT_TYPE_REMARK: if ((ppt->text != NULL) && (strlen(ppt->text) > 0)) this->m_fpoints.m_attributes.insert_attribute("_TEXT",ppt->text); break; case TT_POINT_TYPE_STATION: if (ppt->station_name.id > 0) { thdb1ds * st = &(thdb.db1d.station_vec[ppt->station_name.id - 1]); this->m_fpoints.m_attributes.insert_attribute("_STNAME",st->name); this->m_fpoints.m_attributes.insert_attribute("_STSURVEY",st->survey->get_full_name()); } break; } break; case TT_LINE_CMD: pln = ((thline*)obj); sp = 0; cp = 1; lp = pln->first_point; if (lp == NULL) break; csubtype = lp->subtype; lp = lp->nextlp; while (lp != NULL) { if ((lp->subtype != csubtype) || (lp->nextlp == NULL)) { insert_line_segment(pln, false, this->m_flines.m_point_list, sp, cp); this->m_flines.object_insert(); this->m_flines.m_attributes.insert_attribute("_SCRAP_ID",(long) pln->fscrapptr->id); this->m_flines.m_attributes.insert_attribute("_TYPE",thmatch_string(pln->type, thtt_line_types)); this->m_flines.m_attributes.insert_attribute("_SUBTYPE", pln->type != TT_LINE_TYPE_U ? (thmatch_string(csubtype, thtt_line_subtypes)) : pln->m_subtype_str); this->m_flines.m_attributes.copy_attributes(thdb.attr.get_object(pln->id)); switch (pln->type) { case TT_LINE_TYPE_LABEL: if ((pln->text != NULL) && (strlen(pln->text) > 0)) this->m_flines.m_attributes.insert_attribute("_TEXT",pln->text); break; } csubtype = lp->subtype; sp = cp; } lp = lp->nextlp; cp++; } break; case TT_AREA_CMD: parea = ((tharea*)obj); if (parea->m_outline_line == NULL) break; this->m_fareas.object_clear(); this->m_fareas.polygon_start_ring(true); this->m_fareas.polygon_insert_line(parea->m_outline_line, false); this->m_fareas.polygon_close_ring(); this->m_fareas.object_insert(); if (this->m_fareas.m_object_id > -1) { // system attributes this->m_fareas.m_attributes.insert_attribute("_SCRAP_ID",(long) parea->fscrapptr->id); this->m_fareas.m_attributes.insert_attribute("_TYPE",thmatch_string(parea->type, thtt_area_types)); this->m_fareas.m_attributes.insert_attribute("_SUBTYPE",parea->m_subtype_str); this->m_fareas.m_attributes.copy_attributes(thdb.attr.get_object(parea->id)); } break; } obj = obj->pscrapoptr; } } void thexpmap::export_shp(class thdb2dxm * maps, class thdb2dprj * prj) { if (maps == NULL) { thwarning(("%s [%d] -- no selected projection data -- %s", this->src.name, this->src.line, this->projstr)) return; } thdb.db2d.process_areas_in_projection(prj); const char * fnm = this->get_output("cave.shp"); thexpshp xs; xs.m_xproj = prj; xs.m_expmap = this; if (!xs.open(fnm)) { thwarning(("can't open %s for output",fnm)) return; } #ifdef THDEBUG thprintf("\n\nwriting %s\n", fnm); #else thprintf("writing %s ... ", fnm); thtext_inline = true; #endif thdb2dxm * cmap = maps; thdb2dxs * cbm; thdb2dmi * cmi; while (cmap != NULL) { cbm = cmap->first_bm; while (cbm != NULL) { cmi = cbm->bm->last_item; if (cbm->mode == TT_MAPITEM_NORMAL) { while (cmi != NULL) { if (cmi->type == TT_MAPITEM_NORMAL) xs.xscrap2d((thscrap *) cmi->object, cmap, cbm); cmi = cmi->prev_item; } } cbm = cbm->next_item; } cmap = cmap->next_item; } xs.close(); #ifdef THDEBUG #else thprintf("done\n"); thtext_inline = false; #endif } void thexpmodel::export_shp_file(class thdatabase * dbp) { const char * fnm = this->get_output("cave.shp"); thexpshp xs; xs.m_expmodel = this; if (!xs.open(fnm)) { thwarning(("can't open %s for output",fnm)) return; } #ifdef THDEBUG thprintf("\n\nwriting %s\n", fnm); #else thprintf("writing %s ... ", fnm); thtext_inline = true; #endif // stations thdb1ds * st; size_t nst = dbp->db1d.station_vec.size(), i; for(i = 0; i < nst; i++) { st = &(dbp->db1d.station_vec[i]); xs.m_fstations3D.point_insert(st->x, st->y, st->z); xs.m_fstations3D.object_insert(); xs.m_fstations3D.m_attributes.insert_attribute("_ID", (long) (i+1)); xs.m_fstations3D.m_attributes.insert_attribute("_UID", (long) st->uid); xs.m_fstations3D.m_attributes.insert_attribute("_NAME", st->name); xs.m_fstations3D.m_attributes.insert_attribute("_SURVEY", st->survey->get_full_name()); xs.m_fstations3D.m_attributes.insert_attribute("_SURFACE", long(((st->flags | TT_STATIONFLAG_UNDERGROUND) == 0) ? 1 : 0)); xs.m_fstations3D.m_attributes.insert_attribute("_FIXED", long(((st->flags | TT_STATIONFLAG_FIXED) != 0) ? 1 : 0)); xs.m_fstations3D.m_attributes.insert_attribute("_ENTRANCE", long(((st->flags | TT_STATIONFLAG_ENTRANCE) != 0) ? 1 : 0)); xs.m_fstations3D.m_attributes.insert_attribute("_CONTINUATION", long(((st->flags | TT_STATIONFLAG_CONT) != 0) ? 1 : 0)); if ((st->comment != NULL) && (strlen(st->comment) > 0)) xs.m_fstations3D.m_attributes.insert_attribute("_COMMENT", st->comment); xs.m_fstations3D.m_attributes.copy_attributes(dbp->db1d.m_station_attr.get_object(i+1)); } // shots thdb1dl * lg; thdb1ds * st2; // stations size_t nleg = dbp->db1d.leg_vec.size(); for(i = 0; i < nleg; i++) { lg = &(dbp->db1d.leg_vec[i]); st = &(dbp->db1d.station_vec[lg->leg->from.id - 1]); st2 = &(dbp->db1d.station_vec[lg->leg->to.id - 1]); xs.m_fshots3D.point_insert(st->x, st->y, st->z); xs.m_fshots3D.point_insert(st2->x, st2->y, st2->z); xs.m_fshots3D.object_insert(); xs.m_fshots3D.m_attributes.insert_attribute("_FROM", (long) lg->leg->from.id); xs.m_fshots3D.m_attributes.insert_attribute("_TO", (long) lg->leg->to.id); xs.m_fshots3D.m_attributes.insert_attribute("_SURVEY", lg->leg->psurvey->get_full_name()); xs.m_fshots3D.m_attributes.insert_attribute("_SURFACE", long(((lg->leg->flags | TT_LEGFLAG_SURFACE) != 0) ? 1 : 0)); xs.m_fshots3D.m_attributes.insert_attribute("_DUPLICATE", long(((lg->leg->flags | TT_LEGFLAG_DUPLICATE) != 0) ? 1 : 0)); xs.m_fshots3D.m_attributes.insert_attribute("_APPROXIMATE", long(((lg->leg->flags | TT_LEGFLAG_APPROXIMATE) != 0) ? 1 : 0)); xs.m_fshots3D.m_attributes.insert_attribute("_SPLAY", long(((lg->leg->flags | TT_LEGFLAG_SPLAY) != 0) ? 1 : 0)); } // walls if (((this->items & TT_EXPMODEL_ITEM_WALLS) != 0) && ((this->wallsrc & TT_WSRC_MAPS) != 0)) { // 3D DATA thdb2dprjpr prjid = dbp->db2d.parse_projection("plan",false); thscrap * cs; thdb3ddata * d3d; if (!prjid.newprj) { thdb.db2d.process_projection(prjid.prj); cs = prjid.prj->first_scrap; while(cs != NULL) { if (cs->fsptr->is_selected()) { d3d = cs->get_3d_outline(); if ((d3d != NULL) && (d3d->nfaces > 0)) { thdb3dfc * fcp; thdb3dfx * fxp; for(i = 0, fcp = d3d->firstfc; fcp != NULL; fcp = fcp->next, i++) { switch (fcp->type) { case THDB3DFC_TRIANGLE_STRIP: xs.m_fwalls3D.tristrip_start(); for(fxp = fcp->firstfx; fxp->next != NULL; fxp = fxp->next) { xs.m_fwalls3D.point_insert(fxp->vertex->x,fxp->vertex->y,fxp->vertex->z); } break; case THDB3DFC_TRIANGLES: for(fxp = fcp->firstfx; fxp != NULL; fxp = fxp->next->next->next) { xs.m_fwalls3D.tristrip_start(); xs.m_fwalls3D.point_insert(fxp->vertex->x,fxp->vertex->y,fxp->vertex->z); xs.m_fwalls3D.point_insert(fxp->next->vertex->x,fxp->next->vertex->y,fxp->next->vertex->z); xs.m_fwalls3D.point_insert(fxp->next->next->vertex->x,fxp->next->next->vertex->y,fxp->next->next->vertex->z); } break; } } xs.m_fwalls3D.object_insert(); xs.m_fwalls3D.m_attributes.insert_attribute("_ID",(long)cs->id); xs.m_fwalls3D.m_attributes.insert_attribute("_NAME",cs->name); xs.m_fwalls3D.m_attributes.insert_attribute("_SURVEY",cs->fsptr->get_full_name()); } } cs = cs->proj_next_scrap; } } } // WALLS xs.close(); #ifdef THDEBUG #else thprintf("done\n"); thtext_inline = false; #endif } therion/thexpshp.h0000644000076400010400000000475610721230752015314 0ustar userAdministrators/** * @file thexpshp.h * Shapefile export classes. */ /* Copyright (C) 2007 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thexpshp_h #define thexpshp_h #include #include "thscrap.h" #include "thpoint.h" #include "thline.h" #include "tharea.h" #include "thattr.h" #include "thdb2d.h" struct thexpshpf_data { double m_x, m_y, m_z, m_m; thexpshpf_data(double x, double y, double z, double m) : m_x(x), m_y(y), m_z(z), m_m(m) {} }; struct thexpshpf_part { int m_type, m_start; }; // Shapefile module struct thexpshpf { const char * m_fnm, * m_fpath; struct thexpshp * m_xshp; bool m_is_open; int m_type; size_t m_num_objects; SHPHandle m_hndl; thattr m_attributes; thexpshpf(); void init(struct thexpshp * xshp, const char * fnm, int type); bool open(); void close(); std::list m_point_list; std::list m_part_list; int m_object_id; void object_clear(); void object_insert(); bool m_ring_outer; std::list m_ring_list; void point_insert(double x, double y, double z, double m = 0.0); void polygon_start_ring(bool outer); void polygon_insert_line(thline * ln, bool reverse); void polygon_close_ring(); void tristrip_start(); }; // Shapefile export structure. struct thexpshp { const char * m_dirname; thdb2dprj * m_xproj; thexpshpf m_fscrap, m_fpoints, m_flines, m_fareas; thexpshpf m_fstations3D, m_fshots3D, m_fwalls3D; class thexpmap * m_expmap; class thexpmodel * m_expmodel; thexpshp(); bool open(const char * dirname); void xscrap2d(thscrap * scrap, thdb2dxm * xmap, thdb2dxs * xbasic); void close(); }; #endif therion/thexpsys.cxx0000644000076400010400000000241710625655142015712 0ustar userAdministrators/** * @file thexpsys.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thexpsys.h" #include "thexception.h" #include "thdatabase.h" thexpsys::thexpsys() { this->cmd = ""; } void thexpsys::process_db(class thdatabase * dbp) { thprintf("system: %s\n", this->cmd); int retcode = system(this->cmd); if (retcode != EXIT_SUCCESS) thwarning(("system exit code -- %d", retcode)) } therion/thexpsys.h0000644000076400010400000000240310721206034015317 0ustar userAdministrators/** * @file thexpsys.h * Export class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thexpsys_h #define thexpsys_h #include "thexport.h" class thexpsys : public thexport { public: const char * cmd; ///< System command. thexpsys(); ///< Default constructor. /** * Make export. */ virtual void process_db(class thdatabase * dbp); }; #endif therion/thexptable.cxx0000644000076400010400000004154312065357116016166 0ustar userAdministrators/** * @file thexptable.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thexptable.h" #include "thexception.h" #include "thdatabase.h" #include "thdb1d.h" #include "thdata.h" #include "thexporter.h" #include "thinit.h" #include "thsurvey.h" #include "thscrap.h" #include "thdb1d.h" #include "thpoint.h" #include #include "thchenc.h" #include #include "thinfnan.h" #include "thcsdata.h" #include "thproj.h" #include "thconfig.h" #include "thcs.h" thexptable::thexptable() { this->format = TT_EXPTABLE_FMT_UNKNOWN; this->encoding = TT_UTF_8; this->expattr = true; this->exploc = false; this->filter = true; this->surveys = true; } void thexptable::parse_options(int & argx, int nargs, char ** args) { int sv; int optid = thmatch_token(args[argx], thtt_exptable_opt); int optx = argx; switch (optid) { case TT_EXPTABLE_OPT_ATTRIBUTES: argx++; if (argx >= nargs) ththrow(("missing attributes switch -- \"%s\"",args[optx])) sv = thmatch_token(args[argx], thtt_bool); if (sv == TT_UNKNOWN_BOOL) ththrow(("invalid attributes switch -- \"%s\"", args[argx])) this->expattr = (sv == TT_TRUE); argx++; break; case TT_EXPTABLE_OPT_LOCATION: argx++; if (argx >= nargs) ththrow(("missing location switch -- \"%s\"",args[optx])) sv = thmatch_token(args[argx], thtt_bool); if (sv == TT_UNKNOWN_BOOL) ththrow(("invalid location switch -- \"%s\"", args[argx])) this->exploc = (sv == TT_TRUE); argx++; break; case TT_EXPTABLE_OPT_FILTER: argx++; if (argx >= nargs) ththrow(("missing filter switch -- \"%s\"",args[optx])) sv = thmatch_token(args[argx], thtt_bool); if (sv == TT_UNKNOWN_BOOL) ththrow(("invalid filter switch -- \"%s\"", args[argx])) this->filter = (sv == TT_TRUE); argx++; break; case TT_EXPTABLE_OPT_SURVEYS: argx++; if (argx >= nargs) ththrow(("missing surveys switch -- \"%s\"",args[optx])) sv = thmatch_token(args[argx], thtt_bool); if (sv == TT_UNKNOWN_BOOL) ththrow(("invalid surveys switch -- \"%s\"", args[argx])) this->surveys = (sv == TT_TRUE); argx++; break; case TT_EXPTABLE_OPT_FORMAT: argx++; if (argx >= nargs) ththrow(("missing format -- \"%s\"",args[optx])) this->format = thmatch_token(args[argx], thtt_exptable_fmt); if (this->format == TT_EXPTABLE_FMT_UNKNOWN) ththrow(("unknown format -- \"%s\"", args[argx])) argx++; break; case TT_EXPTABLE_OPT_ENCODING: argx++; if (argx >= nargs) ththrow(("missing encoding -- \"%s\"",args[optx])) this->encoding = thmatch_token(args[argx], thtt_encoding); if (this->encoding == TT_UNKNOWN_ENCODING) ththrow(("unknown encoding -- \"%s\"", args[argx])) argx++; break; default: thexport::parse_options(argx, nargs, args); break; } } void thexptable::dump_header(FILE * xf) { thexport::dump_header(xf); } void thexptable::dump_body(FILE * xf) { thexport::dump_body(xf); if (this->format != TT_EXPTABLE_FMT_UNKNOWN) fprintf(xf," -format %s", thmatch_string(this->format, thtt_exptable_fmt)); if (this->encoding != TT_UNKNOWN_ENCODING) fprintf(xf," -encoding %s", thmatch_string(this->encoding, thtt_encoding)); } void thexptable::export_survey_entraces(thsurvey * survey) { thdataobject * obj; thdb1ds * st; double tmpd; const char * xl = NULL; const char * yl = NULL; if (this->exploc) { xl = ""; yl = ""; } bool is_cave = (survey->entrance.id != 0); if (!survey->is_selected()) return; if (survey->stat.num_entrances == 0) return; // insert survey attributes if ((survey->level > 1) && (this->surveys || is_cave)) { this->m_table.insert_object(NULL); this->m_table.get_object()->m_tree_level = (this->surveys ? (size_t)(survey->level - 2) : 0); this->m_table.get_object()->m_tree_node_id = (this->surveys ? survey->get_reverse_full_name() : ""); this->m_table.insert_attribute("Title", ths2txt((strlen(survey->title) > 0) ? survey->title : survey->name).c_str()); this->m_table.insert_attribute("Length",(long)(survey->stat.length + 0.5)); if (!is_cave) this->m_table.get_attribute()->set_flag(THATTRFLAG_HIDDEN, true); if (survey->stat.station_top != NULL) { tmpd = survey->stat.station_top->z - survey->stat.station_bottom->z; if (tmpd > survey->stat.length) tmpd = survey->stat.length; this->m_table.insert_attribute("Depth",(long)(tmpd + 0.5)); } else { this->m_table.insert_attribute("Depth",""); } if (survey->stat.length_explored > 0.0) { this->m_table.insert_attribute("Explored", (long)(survey->stat.length_explored + 0.5)); if (!is_cave) this->m_table.get_attribute()->set_flag(THATTRFLAG_HIDDEN, true); } else { this->m_table.insert_attribute("Explored", ""); } if (((survey->stat.num_entrances > 0) && ((!exploc) || (survey->stat.num_entrances == 1) || (!this->surveys))) && (survey->entrance.id > 0)) { st = &(this->db->db1d.station_vec[survey->entrance.id - 1]); this->add_coordinates(st->x, st->y, st->z, xl, yl, ""); } else { this->add_coordinates(thnan, thnan, thnan, xl, yl, ""); } if (this->expattr) this->m_table.copy_attributes(this->db->attr.get_object(survey->id)); } if (!is_cave) { for(obj = survey->foptr; obj != NULL; obj = obj->nsptr) { if (obj->get_class_id() == TT_SURVEY_CMD) { this->export_survey_entraces((thsurvey *) obj); } } } // insert entrances within this survey size_t nstat = this->db->db1d.station_vec.size(), i; if (this->surveys || (!is_cave)) { for(i = 0; i < nstat; i++) { st = &(this->db->db1d.station_vec[i]); if ((st->flags & TT_STATIONFLAG_ENTRANCE) != 0) { if (((exploc) && (survey->entrance.id > 0) && (survey->stat.num_entrances > 1) && (st->survey->is_in_survey(survey))) || ((survey->entrance.id == 0) && (st->survey->id == survey->id))) { this->m_table.insert_object(NULL); this->m_table.get_object()->m_tree_level = (this->surveys ? (size_t)(survey->level - 1) : 0); std::string * tmps = get_tmp_string(); *tmps = survey->get_reverse_full_name(); *tmps += "."; this->m_table.get_object()->m_tree_node_id = (this->surveys ? tmps->c_str() : ""); this->m_table.insert_attribute("Title", ths2txt(st->comment).c_str()); this->m_table.insert_attribute("Length",""); this->m_table.insert_attribute("Depth",""); if (st->explored > 0.0) { this->m_table.insert_attribute("Explored", (long)(st->explored + 0.5)); } else { this->m_table.insert_attribute("Explored", ""); } this->add_coordinates(st->x, st->y, st->z, xl, yl, ""); if (this->expattr) this->m_table.copy_attributes(this->db->db1d.m_station_attr.get_object((long)i+1)); } } } } } void thexptable::process_db(class thdatabase * dbp) { this->db = dbp; if (this->format == TT_EXPTABLE_FMT_UNKNOWN) { this->format = TT_EXPTABLE_FMT_HTML; thexp_set_ext_fmt(".txt", TT_EXPTABLE_FMT_TXT) thexp_set_ext_fmt(".html", TT_EXPTABLE_FMT_HTML) thexp_set_ext_fmt(".htm", TT_EXPTABLE_FMT_HTML) thexp_set_ext_fmt(".dbf", TT_EXPTABLE_FMT_DBF) thexp_set_ext_fmt(".kml", TT_EXPTABLE_FMT_KML) } const char * fname; if ((this->cs == TTCS_LOCAL) && (thcfg.outcs != TTCS_LOCAL)) this->cs = thcfg.outcs; switch (this->format) { case TT_EXPTABLE_FMT_DBF: fname = this->get_output("table.dbf"); break; case TT_EXPTABLE_FMT_HTML: fname = this->get_output("table.html"); break; case TT_EXPTABLE_FMT_KML: this->cs = TTCS_LONG_LAT; this->exploc = true; fname = this->get_output("table.kml"); break; default: fname = this->get_output("table.txt"); } #ifdef THDEBUG thprintf("\n\nwriting %s\n", fname); #else thprintf("writing %s ... ", fname); thtext_inline = true; #endif const char * survey = NULL; thsurvey * srv; thdb1ds * st; thdb_object_list_type::iterator oi; thpoint * pt; double tmpd; switch (this->export_mode) { case TT_EXP_CAVELIST: this->export_survey_entraces(this->db->fsurveyptr); this->m_table.m_tree = true; break; case TT_EXP_CONTLIST: { // check all stations and points unsigned long nstat = (unsigned long)dbp->db1d.station_vec.size(), i; for(oi = this->db->object_list.begin(); oi != this->db->object_list.end(); oi++) { if ((*oi)->get_class_id() == TT_POINT_CMD) { pt = (thpoint*)(*oi); if ((pt->type == TT_POINT_TYPE_CONTINUATION) && ((pt->text != NULL) || (!this->filter)) && (pt->fsptr->is_selected())) { this->db->db2d.process_projection(pt->fscrapptr->proj); this->m_table.insert_object(NULL); this->m_table.insert_attribute("Comment",ths2txt(pt->text).c_str()); if (!thisnan(pt->xsize)) this->m_table.insert_attribute("Explored",pt->xsize); else this->m_table.insert_attribute("Explored",(const char *)NULL); if (pt->station_name.id != 0) { st = &(dbp->db1d.station_vec[pt->station_name.id - 1]); } else { st = pt->fscrapptr->get_nearest_station(pt->point); } if (st != NULL) { srv = st->survey; } else { srv = pt->fsptr; } if (strlen(srv->get_title()) > 0) { survey = st->survey->get_title(); } else { survey = st->survey->get_full_name(); if (strlen(survey) == 0) survey = NULL; } this->m_table.insert_attribute("Survey", ths2txt(survey).c_str()); this->m_table.insert_attribute("Station", st != NULL ? st->name : NULL); if (this->format == TT_EXPTABLE_FMT_KML) { this->add_coordinates(pt->point->xt + pt->fscrapptr->proj->rshift_x, pt->point->yt + pt->fscrapptr->proj->rshift_y, pt->point->at); } if (this->expattr) this->m_table.copy_attributes(this->db->attr.get_object(pt->id)); } } } for(i = 0; i < nstat; i++) { st = &(dbp->db1d.station_vec[i]); if (((st->flags & TT_STATIONFLAG_CONT) != 0) && ((st->comment != NULL) || (!this->filter)) && (st->survey->is_selected())) { this->m_table.insert_object(NULL); this->m_table.insert_attribute("Comment",ths2txt(st->comment).c_str()); if (!thisnan(st->explored)) this->m_table.insert_attribute("Explored",st->explored); else this->m_table.insert_attribute("Explored",(const char *)NULL); if (strlen(st->survey->get_title()) > 0) { survey = st->survey->get_title(); } else { survey = st->survey->get_full_name(); if (strlen(survey) == 0) survey = NULL; } this->m_table.insert_attribute("Survey", ths2txt(survey).c_str()); this->m_table.insert_attribute("Station", st->name); if (this->format == TT_EXPTABLE_FMT_KML) { this->add_coordinates(st->x, st->y, st->z); } if (this->expattr) this->m_table.copy_attributes(this->db->db1d.m_station_attr.get_object(i+1)); } } } break; case TT_EXP_SURVEYLIST: // todo add survey data //title //explored length //id //approx. //surface //duplicate for(oi = this->db->object_list.begin(); oi != this->db->object_list.end(); oi++) { if (((*oi)->get_class_id() == TT_SURVEY_CMD) && (strlen((*oi)->name) > 0)) { srv = (thsurvey*)(*oi); if (srv->is_selected()) { this->m_table.insert_object(NULL); this->m_table.get_object()->m_tree_level = (size_t)(srv->level - 2); this->m_table.get_object()->m_tree_node_id = srv->get_reverse_full_name(); this->m_table.insert_attribute("Title", ths2txt((strlen(srv->title) > 0) ? srv->title : srv->name).c_str()); this->m_table.insert_attribute("Length",(long)(srv->stat.length + 0.5)); if (srv->stat.station_top != NULL) { tmpd = srv->stat.station_top->z - srv->stat.station_bottom->z; if (tmpd > srv->stat.length) tmpd = srv->stat.length; this->m_table.insert_attribute("Depth",(long)(tmpd + 0.5)); } else { this->m_table.insert_attribute("Depth",0.0); } this->m_table.insert_attribute("Explored", (long)(srv->stat.length_explored + 0.5)); this->m_table.insert_attribute("Approx.", (long)(srv->stat.length_approx + 0.5)); this->m_table.insert_attribute("Duplicate", (long)(srv->stat.length_duplicate + 0.5)); this->m_table.insert_attribute("Surface", (long)(srv->stat.length_surface + 0.5)); this->m_table.insert_attribute("Shots", (long)(srv->stat.num_shots)); this->m_table.insert_attribute("Stations", (long)(srv->stat.num_stations)); //this->m_table.insert_attribute("ID", srv->get_full_name()); if (this->expattr) this->m_table.copy_attributes(this->db->attr.get_object(srv->id)); } } } this->m_table.m_tree = true; break; } switch (this->format) { case TT_EXPTABLE_FMT_TXT: this->m_table.export_txt(fname, this->encoding); break; case TT_EXPTABLE_FMT_HTML: this->m_table.export_html(fname, this->encoding); break; case TT_EXPTABLE_FMT_DBF: this->m_table.export_dbf(fname, this->encoding); break; case TT_EXPTABLE_FMT_KML: this->m_table.export_kml(fname, (this->export_mode == TT_EXP_CONTLIST) ? "Comment" : "Title"); break; } #ifdef THDEBUG #else thprintf("done\n"); thtext_inline = false; #endif } std::string * thexptable::get_tmp_string() { return &(* this->m_str_list.insert(this->m_str_list.end(),std::string(""))); } void thexptable::add_coordinates(double x, double y, double z, const char * xlabel, const char * ylabel, const char * zlabel) { double tx(thnan), ty(thnan), tz(thnan); if (!(thisnan(x) || thisnan(y) || thisnan(z))) { if (thcfg.outcs == TTCS_LOCAL) { tx = x; ty = y; tz = z; } else { thcs2cs(thcs_get_data(thcfg.outcs)->params, thcs_get_data(this->cs)->params, x, y, z, tx, ty, tz); if (thcs_get_data(this->cs)->dms) { tx = tx / THPI * 180.0; ty = ty / THPI * 180.0; } } } if (xlabel != NULL) { if (strlen(xlabel) == 0) { xlabel = "X"; if (thcs_get_data(this->cs)->dms) { if (thcs_get_data(this->cs)->swap) xlabel = "Latitude"; else xlabel = "Longitude"; } } if (thisnan(tx)) this->m_table.insert_attribute(xlabel, ""); else { this->m_table.insert_attribute(xlabel, tx); if (thcs_get_data(this->cs)->dms) this->m_table.get_field(xlabel)->m_double_format = "%.8f"; } } if (ylabel != NULL) { if (strlen(ylabel) == 0) { ylabel = "Y"; if (thcs_get_data(this->cs)->dms) { if (thcs_get_data(this->cs)->swap) ylabel = "Longitude"; else ylabel = "Latitude"; } } if (thisnan(ty)) this->m_table.insert_attribute(ylabel, ""); else { this->m_table.insert_attribute(ylabel, ty); if (thcs_get_data(this->cs)->dms) this->m_table.get_field(ylabel)->m_double_format = "%.8f"; } } if (zlabel != NULL) { if (strlen(zlabel) == 0) { zlabel = "Altitude"; } if (thisnan(tz)) this->m_table.insert_attribute(zlabel, ""); else this->m_table.insert_attribute(zlabel, tz); } } therion/thexptable.h0000644000076400010400000000662712042446002015603 0ustar userAdministrators/** * @file thexptable.h * Export class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thexptable_h #define thexptable_h #include "thexport.h" #include "thattr.h" #include #include /** * Model export options. */ enum { TT_EXPTABLE_OPT_UNKNOWN = 0, ///< Unknown option TT_EXPTABLE_OPT_FORMAT, ///< Output option. TT_EXPTABLE_OPT_ENCODING, ///< Output option. TT_EXPTABLE_OPT_ATTRIBUTES, ///< Output option. TT_EXPTABLE_OPT_LOCATION, TT_EXPTABLE_OPT_FILTER, TT_EXPTABLE_OPT_SURVEYS, }; /** * Options parsing table. */ static const thstok thtt_exptable_opt[] = { {"-attr", TT_EXPTABLE_OPT_ATTRIBUTES}, {"-attributes", TT_EXPTABLE_OPT_ATTRIBUTES}, {"-enc", TT_EXPTABLE_OPT_ENCODING}, {"-encoding", TT_EXPTABLE_OPT_ENCODING}, {"-filter", TT_EXPTABLE_OPT_FILTER}, {"-fmt", TT_EXPTABLE_OPT_FORMAT}, {"-format", TT_EXPTABLE_OPT_FORMAT}, {"-location", TT_EXPTABLE_OPT_LOCATION}, {"-surveys", TT_EXPTABLE_OPT_SURVEYS}, {NULL, TT_EXPTABLE_OPT_UNKNOWN} }; /** * Model export formats. */ enum { TT_EXPTABLE_FMT_UNKNOWN = 0, ///< Unknown option TT_EXPTABLE_FMT_DBF, TT_EXPTABLE_FMT_TXT, TT_EXPTABLE_FMT_HTML, TT_EXPTABLE_FMT_KML, }; /** * Format parsing table. */ static const thstok thtt_exptable_fmt[] = { {"dbf", TT_EXPTABLE_FMT_DBF}, {"html", TT_EXPTABLE_FMT_HTML}, {"kml", TT_EXPTABLE_FMT_KML}, {"text", TT_EXPTABLE_FMT_TXT}, {"txt", TT_EXPTABLE_FMT_TXT}, {NULL, TT_EXPTABLE_FMT_UNKNOWN} }; /** * Main export class. */ class thexptable : public thexport { public: bool expattr, exploc, filter, surveys; ///< Whether to export user defined attributes. int format, ///< Output format. encoding; thattr m_table; std::list m_str_list; thexptable(); ///< Default constructor. /** * Parse model export options. */ virtual void parse_options(int & argx, int nargs, char ** args); /** * Dump object into file. */ virtual void dump_body(FILE * xf); /** * Dump object into file. */ virtual void dump_header(FILE * xf); /** * Make export. */ virtual void process_db(class thdatabase * dbp); /** * Export entraces from survey. */ void export_survey_entraces(class thsurvey * survey); /** * Return string for temporary use. */ std::string * get_tmp_string(); /** * Add coordinates to table. */ void add_coordinates(double x, double y, double z, const char * xlabel = "", const char * ylabel = "", const char * zlabel = ""); }; #endif therion/thexpuni.cxx0000644000076400010400000006352511705762452015701 0ustar userAdministrators/** * @file thexpuni.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thexpmap.h" #include "thexporter.h" #include "thexception.h" #include "thdatabase.h" #include "thdb2d.h" #include "thdb2dmi.h" #include "thlayout.h" #include "thmap.h" #include "thsketch.h" #include "thconfig.h" #include #include "thtmpdir.h" #include "thcsdata.h" #include "thdb3d.h" #ifdef THMSVC #define hypot _hypot #define snprintf _snprintf #define strcasecmp _stricmp #endif #include "thchenc.h" #include "thdb1d.h" #include "thinit.h" #include "thlogfile.h" #include "thcmdline.h" #include "thsurvey.h" #include "thchenc.h" #include #include "thmapstat.h" #include "thsurface.h" #include #include "loch/lxMath.h" #include "extern/shapefil.h" #include "thexpmodel.h" #include #include #include #include #include "thexpuni.h" #include "thproj.h" #include "thcs.h" static const char * DXFpre = " 0\nSECTION\n 2\nHEADER\n 9\n$ACADVER\n 1\nAC1014\n 9\n$ACADMAINTVER\n" " 70\n 0\n 9\n$DWGCODEPAGE\n 3\nANSI_1252\n 9\n$INSBASE\n" " 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$EXTMIN\n 10\n%.3f\n 20\n" "%.3f\n 30\n0.0\n 9\n$EXTMAX\n 10\n%.3f\n 20\n%.3f\n" " 30\n0.0\n 9\n$ORTHOMODE\n 70\n 1\n 9\n$REGENMODE\n" " 70\n 1\n 9\n$FILLMODE\n 70\n 1\n 9\n$QTEXTMODE\n 70\n" " 0\n 9\n$MIRRTEXT\n 70\n 1\n 9\n$DRAGMODE\n 70\n 2\n" " 9\n$LTSCALE\n 40\n1.0\n 9\n$OSMODE\n 70\n 0\n 9\n$ATTMODE\n" " 70\n 1\n 9\n$TEXTSIZE\n 40\n2.5\n 9\n$TRACEWID\n 40\n1.0\n" " 9\n$TEXTSTYLE\n 7\nSTANDARD\n 9\n$CLAYER\n 8\n0\n 9\n$CELTYPE\n" " 6\nBYLAYER\n 9\n$CECOLOR\n 62\n 256\n 9\n$CELTSCALE\n 40\n" "1.0\n 9\n$DELOBJ\n 70\n 1\n 9\n$DISPSILH\n 70\n 0\n" " 9\n$DIMSCALE\n 40\n1.0\n 9\n$DIMASZ\n 40\n2.5\n 9\n$DIMEXO\n" " 40\n0.625\n 9\n$DIMDLI\n 40\n3.75\n 9\n$DIMRND\n 40\n0.0\n" " 9\n$DIMDLE\n 40\n0.0\n 9\n$DIMEXE\n 40\n1.25\n 9\n$DIMTP\n" " 40\n0.0\n 9\n$DIMTM\n 40\n0.0\n 9\n$DIMTXT\n 40\n2.5\n 9\n" "$DIMCEN\n 40\n2.5\n 9\n$DIMTSZ\n 40\n0.0\n 9\n$DIMTOL\n 70\n" " 0\n 9\n$DIMLIM\n 70\n 0\n 9\n$DIMTIH\n 70\n 0\n" " 9\n$DIMTOH\n 70\n 0\n 9\n$DIMSE1\n 70\n 0\n 9\n$DIMSE2\n" " 70\n 0\n 9\n$DIMTAD\n 70\n 1\n 9\n$DIMZIN\n 70\n 8\n" " 9\n$DIMBLK\n 1\n\n 9\n$DIMASO\n 70\n 1\n 9\n$DIMSHO\n" " 70\n 1\n 9\n$DIMPOST\n 1\n\n 9\n$DIMAPOST\n 1\n\n 9\n" "$DIMALT\n 70\n 0\n 9\n$DIMALTD\n 70\n 4\n 9\n$DIMALTF\n" " 40\n0.0394\n 9\n$DIMLFAC\n 40\n1.0\n 9\n$DIMTOFL\n 70\n 1\n" " 9\n$DIMTVP\n 40\n0.0\n 9\n$DIMTIX\n 70\n 0\n 9\n$DIMSOXD\n" " 70\n 0\n 9\n$DIMSAH\n 70\n 0\n 9\n$DIMBLK1\n 1\n\n" " 9\n$DIMBLK2\n 1\n\n 9\n$DIMSTYLE\n 2\nSTANDARD\n 9\n$DIMCLRD\n" " 70\n 0\n 9\n$DIMCLRE\n 70\n 0\n 9\n$DIMCLRT\n 70\n" " 0\n 9\n$DIMTFAC\n 40\n1.0\n 9\n$DIMGAP\n 40\n0.625\n 9\n" "$DIMJUST\n 70\n 0\n 9\n$DIMSD1\n 70\n 0\n 9\n$DIMSD2\n" " 70\n 0\n 9\n$DIMTOLJ\n 70\n 1\n 9\n$DIMTZIN\n 70\n" " 0\n 9\n$DIMALTZ\n 70\n 0\n 9\n$DIMALTTZ\n 70\n 0\n" " 9\n$DIMFIT\n 70\n 3\n 9\n$DIMUPT\n 70\n 0\n 9\n$DIMUNIT\n" " 70\n 8\n 9\n$DIMDEC\n 70\n 4\n 9\n$DIMTDEC\n 70\n 4\n" " 9\n$DIMALTU\n 70\n 8\n 9\n$DIMALTTD\n 70\n 4\n 9\n" "$DIMTXSTY\n 7\nSTANDARD\n 9\n$DIMAUNIT\n 70\n 0\n 9\n$LUNITS\n" " 70\n 2\n 9\n$LUPREC\n 70\n 4\n 9\n$SKETCHINC\n 40\n" "1.0\n 9\n$FILLETRAD\n 40\n10.0\n 9\n$AUNITS\n 70\n 0\n 9\n" "$AUPREC\n 70\n 0\n 9\n$MENU\n 1\n.\n 9\n$ELEVATION\n 40\n" "0.0\n 9\n$PELEVATION\n 40\n0.0\n 9\n$THICKNESS\n 40\n0.0\n 9\n" "$LIMCHECK\n 70\n 0\n 9\n$BLIPMODE\n 70\n 0\n 9\n$CHAMFERA\n" " 40\n10.0\n 9\n$CHAMFERB\n 40\n10.0\n 9\n$CHAMFERC\n 40\n20.0\n" " 9\n$CHAMFERD\n 40\n0.0\n 9\n$SKPOLY\n 70\n 0\n 9\n$TDCREATE\n" " 40\n2454180.933710197\n 9\n$TDUPDATE\n 40\n2454180.933710197\n" " 9\n$TDINDWG\n 40\n0.0000000000\n 9\n$TDUSRTIMER\n 40\n0.0000000000\n" " 9\n$USRTIMER\n 70\n 1\n 9\n$ANGBASE\n 50\n0.0\n 9\n$ANGDIR\n" " 70\n 0\n 9\n$PDMODE\n 70\n 0\n 9\n$PDSIZE\n 40\n0.0\n" " 9\n$PLINEWID\n 40\n0.0\n 9\n$COORDS\n 70\n 1\n 9\n$SPLFRAME\n" " 70\n 0\n 9\n$SPLINETYPE\n 70\n 6\n 9\n$SPLINESEGS\n" " 70\n 8\n 9\n$ATTDIA\n 70\n 0\n 9\n$ATTREQ\n 70\n 1\n" " 9\n$HANDLING\n 70\n 1\n 9\n$HANDSEED\n 5\n3A\n 9\n$SURFTAB1\n" " 70\n 6\n 9\n$SURFTAB2\n 70\n 6\n 9\n$SURFTYPE\n 70\n" " 6\n 9\n$SURFU\n 70\n 6\n 9\n$SURFV\n 70\n 6\n 9\n" "$UCSNAME\n 2\n\n 9\n$UCSORG\n 10\n0.0\n 20\n0.0\n 30\n0.0\n" " 9\n$UCSXDIR\n 10\n1.0\n 20\n0.0\n 30\n0.0\n 9\n$UCSYDIR\n 10\n" "0.0\n 20\n1.0\n 30\n0.0\n 9\n$PUCSNAME\n 2\n\n 9\n$PUCSORG\n" " 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$PUCSXDIR\n 10\n1.0\n 20\n" "0.0\n 30\n0.0\n 9\n$PUCSYDIR\n 10\n0.0\n 20\n1.0\n 30\n0.0\n" " 9\n$USERI1\n 70\n 0\n 9\n$USERI2\n 70\n 0\n 9\n$USERI3\n" " 70\n 0\n 9\n$USERI4\n 70\n 0\n 9\n$USERI5\n 70\n 0\n" " 9\n$USERR1\n 40\n0.0\n 9\n$USERR2\n 40\n0.0\n 9\n$USERR3\n" " 40\n0.0\n 9\n$USERR4\n 40\n0.0\n 9\n$USERR5\n 40\n0.0\n 9\n" "$WORLDVIEW\n 70\n 1\n 9\n$SHADEDGE\n 70\n 3\n 9\n$SHADEDIF\n" " 70\n 70\n 9\n$TILEMODE\n 70\n 1\n 9\n$MAXACTVP\n 70\n" " 48\n 9\n$PINSBASE\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$PLIMCHECK\n" " 70\n 0\n 9\n$PEXTMIN\n 10\n1.000000E+20\n 20\n1.000000E+20\n" " 30\n1.000000E+20\n 9\n$PEXTMAX\n 10\n-1.000000E+20\n 20\n-1.000000E+20\n" " 30\n-1.000000E+20\n 9\n$PLIMMIN\n 10\n0.0\n 20\n0.0\n 9\n$PLIMMAX\n" " 10\n420.0\n 20\n297.0\n 9\n$UNITMODE\n 70\n 0\n 9\n$VISRETAIN\n" " 70\n 1\n 9\n$PLINEGEN\n 70\n 0\n 9\n$PSLTSCALE\n 70\n" " 1\n 9\n$TREEDEPTH\n 70\n 3020\n 9\n$PICKSTYLE\n 70\n 1\n" " 9\n$CMLSTYLE\n 2\nSTANDARD\n 9\n$CMLJUST\n 70\n 0\n 9\n" "$CMLSCALE\n 40\n20.0\n 9\n$PROXYGRAPHICS\n 70\n 1\n 9\n" "$MEASUREMENT\n 70\n 1\n 0\nENDSEC\n 0\nSECTION\n 2\nCLASSES\n" " 0\nCLASS\n 1\nLWPOLYLINE\n 2\nAcDbPolyline\n 3\n\"AutoCAD\"\n" " 90\n 0\n280\n 0\n281\n 1\n 0\nCLASS\n 1\nDICTIONARYVAR\n" " 2\nAcDbDictionaryVar\n 3\n\"AutoCAD\"\n 90\n 0\n280\n" " 0\n281\n 0\n 0\nCLASS\n 1\nHATCH\n 2\nAcDbHatch\n" " 3\n\"ACAD_SEDONA\"\n 90\n 0\n280\n 0\n281\n 1\n" " 0\nENDSEC\n 0\nSECTION\n 2\nTABLES\n 0\nTABLE\n 2\nVPORT\n" " 5\n8\n100\nAcDbSymbolTable\n 70\n 5\n 0\nVPORT\n 5\n39\n" "100\nAcDbSymbolTableRecord\n100\nAcDbViewportTableRecord\n 2\n" "*ACTIVE\n 70\n 0\n 10\n0.0\n 20\n0.0\n 11\n1.0\n 21\n1.0\n" " 12\n298.941176\n 22\n148.5\n 13\n0.0\n 23\n0.0\n 14\n10.0\n 24\n" "10.0\n 15\n10.0\n 25\n10.0\n 16\n0.0\n 26\n0.0\n 36\n1.0\n 17\n" "0.0\n 27\n0.0\n 37\n0.0\n 40\n297.0\n 41\n2.013072\n 42\n50.0\n" " 43\n0.0\n 44\n0.0\n 50\n0.0\n 51\n0.0\n 71\n 0\n 72\n 100\n" " 73\n 1\n 74\n 1\n 75\n 0\n 76\n 0\n 77\n 0\n" " 78\n 0\n 0\nENDTAB\n 0\nTABLE\n 2\nLTYPE\n 5\n5\n100\n" "AcDbSymbolTable\n 70\n 1\n 0\nLTYPE\n 5\n12\n100\nAcDbSymbolTableRecord\n" "100\nAcDbLinetypeTableRecord\n 2\nBYBLOCK\n 70\n 0\n 3\n" "\n 72\n 65\n 73\n 0\n 40\n0.0\n 0\nLTYPE\n 5\n13\n100\n" "AcDbSymbolTableRecord\n100\nAcDbLinetypeTableRecord\n 2\nBYLAYER\n" " 70\n 0\n 3\n\n 72\n 65\n 73\n 0\n 40\n0.0\n 0\n" "LTYPE\n 5\n14\n100\nAcDbSymbolTableRecord\n100\nAcDbLinetypeTableRecord\n" " 2\nCONTINUOUS\n 70\n 0\n 3\nSolid line\n 72\n 65\n 73\n" " 0\n 40\n0.0\n 0\nENDTAB\n 0\nTABLE\n 2\nLAYER\n 5\n2\n" "100\nAcDbSymbolTable\n 70\n 1\n 0\nLAYER\n 5\nE\n100\nAcDbSymbolTableRecord\n" "100\nAcDbLayerTableRecord\n 2\n0\n 70\n 0\n 62\n 7\n" " 6\nCONTINUOUS\n 0\nENDTAB\n 0\nTABLE\n 2\nSTYLE\n 5\n3\n" "100\nAcDbSymbolTable\n 70\n 1\n 0\nSTYLE\n 5\nF\n100\nAcDbSymbolTableRecord\n" "100\nAcDbTextStyleTableRecord\n 2\nSTANDARD\n 70\n 0\n 40\n" "0.0\n 41\n1.0\n 50\n0.0\n 71\n 0\n 42\n2.5\n 3\ntxt\n 4\n" "\n 0\nENDTAB\n 0\nTABLE\n 2\nVIEW\n 5\n6\n100\nAcDbSymbolTable\n" " 70\n 0\n 0\nENDTAB\n 0\nTABLE\n 2\nUCS\n 5\n7\n100\n" "AcDbSymbolTable\n 70\n 0\n 0\nENDTAB\n 0\nTABLE\n 2\nAPPID\n" " 5\n9\n100\nAcDbSymbolTable\n 70\n 1\n 0\nAPPID\n 5\n10\n" "100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\n" "ACAD\n 70\n 0\n 0\nENDTAB\n 0\nTABLE\n 2\nDIMSTYLE\n 5\n" "A\n100\nAcDbSymbolTable\n 70\n 1\n 0\nDIMSTYLE\n105\n1D\n" "100\nAcDbSymbolTableRecord\n100\nAcDbDimStyleTableRecord\n 2\n" "STANDARD\n 70\n 0\n 3\n\n 4\n\n 5\n\n 6\n\n 7\n\n 40\n" "1.0\n 41\n0.18\n 42\n0.0625\n 43\n0.38\n 44\n0.18\n 45\n0.0\n" " 46\n0.0\n 47\n0.0\n 48\n0.0\n140\n0.18\n141\n0.09\n142\n0.0\n" "143\n25.4\n144\n1.0\n145\n0.0\n146\n1.0\n147\n0.09\n 71\n 0\n" " 72\n 0\n 73\n 1\n 74\n 1\n 75\n 0\n 76\n 0\n" " 77\n 0\n 78\n 0\n170\n 0\n171\n 2\n172\n 0\n" "173\n 0\n174\n 0\n175\n 0\n176\n 0\n177\n 0\n" "178\n 0\n270\n 2\n271\n 4\n272\n 4\n273\n 2\n" "274\n 2\n340\nF\n275\n 0\n280\n 0\n281\n 0\n282\n" " 0\n283\n 1\n284\n 0\n285\n 0\n286\n 0\n287\n" " 3\n288\n 0\n 0\nENDTAB\n 0\nTABLE\n 2\nBLOCK_RECORD\n" " 5\n1\n100\nAcDbSymbolTable\n 70\n 0\n 0\nBLOCK_RECORD\n" " 5\n18\n100\nAcDbSymbolTableRecord\n100\nAcDbBlockTableRecord\n" " 2\n*MODEL_SPACE\n 0\nBLOCK_RECORD\n 5\n15\n100\nAcDbSymbolTableRecord\n" "100\nAcDbBlockTableRecord\n 2\n*PAPER_SPACE\n 0\nENDTAB\n 0\n" "ENDSEC\n 0\nSECTION\n 2\nBLOCKS\n 0\nBLOCK\n 5\n19\n100\n" "AcDbEntity\n 8\n0\n100\nAcDbBlockBegin\n 2\n*MODEL_SPACE\n 70\n" " 0\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 3\n*MODEL_SPACE\n 1\n" "\n 0\nENDBLK\n 5\n1A\n100\nAcDbEntity\n 8\n0\n100\nAcDbBlockEnd\n" " 0\nBLOCK\n 5\n16\n100\nAcDbEntity\n 67\n 1\n 8\n0\n100\n" "AcDbBlockBegin\n 2\n*PAPER_SPACE\n 70\n 0\n 10\n0.0\n 20\n" "0.0\n 30\n0.0\n 3\n*PAPER_SPACE\n 1\n\n 0\nENDBLK\n 5\n17\n" "100\nAcDbEntity\n 67\n 1\n 8\n0\n100\nAcDbBlockEnd\n 0\n" "ENDSEC\n 0\nSECTION\n 2\nENTITIES\n"; static const char * DXFpost = " 0\nENDSEC\n 0\nSECTION\n" " 2\nOBJECTS\n 0\nDICTIONARY\n 5\nC\n100\nAcDbDictionary\n 3\n" "ACAD_GROUP\n350\nD\n 3\nACAD_MLINESTYLE\n350\n1B\n 3\nACDBVARIABLEDICTIONARY\n" "350\n32\n 0\nDICTIONARY\n 5\nD\n102\n{ACAD_REACTORS\n330\nC\n" "102\n}\n100\nAcDbDictionary\n 0\nDICTIONARY\n 5\n1B\n102\n{ACAD_REACTORS\n" "330\nC\n102\n}\n100\nAcDbDictionary\n 3\nSTANDARD\n350\n1C\n" " 0\nDICTIONARY\n 5\n32\n102\n{ACAD_REACTORS\n330\nC\n102\n}\n" "100\nAcDbDictionary\n 3\nSORTENTS\n350\n33\n 0\nMLINESTYLE\n" " 5\n1C\n102\n{ACAD_REACTORS\n330\n1B\n102\n}\n100\nAcDbMlineStyle\n" " 2\nSTANDARD\n 70\n 0\n 3\n\n 62\n 256\n 51\n90.0\n 52\n" "90.0\n 71\n 2\n 49\n0.5\n 62\n 256\n 6\nBYLAYER\n 49\n" "-0.5\n 62\n 256\n 6\nBYLAYER\n 0\nDICTIONARYVAR\n 5\n33\n" "102\n{ACAD_REACTORS\n330\n32\n102\n}\n100\nDictionaryVariables\n" "280\n 0\n 1\n96\n 0\nENDSEC\n 0\nEOF\n\n"; thexpuni::thexpuni() { this->resol = 0.304; this->clear(); } void thexpuni::clear() { this->m_cpart = NULL; this->m_part_list.clear(); } void thexpuni::polygon_start_ring(bool outer) { this->m_ring_list.clear(); thexpuni_part p; p.m_outer = outer; this->m_cpart = &(*this->m_part_list.insert(this->m_part_list.end(), p)); } // insert points from bezier curve void insert_line_segment(double resolution, thline * ln, bool reverse, std::list & lst, long startp = 0, long endp = -1) { thdb2dlp * cpt, * prevpt; thdb2dpt * cp1, * cp2; double t, tt, ttt, t_, tt_, ttt_, nx, ny, nz, na, px, py; long pnum; prevpt = NULL; if (reverse) cpt = ln->last_point; else cpt = ln->first_point; pnum = 0; while (cpt != NULL) { // insert bezier curve if (pnum == startp) prevpt = NULL; if ((pnum >= startp) && ((endp < 0) || (pnum <= endp))) { if (prevpt != NULL) { px = prevpt->point->xt; py = prevpt->point->yt; if (reverse) { cp1 = prevpt->cp2; cp2 = prevpt->cp1; } else { cp1 = cpt->cp1; cp2 = cpt->cp2; } if ((cp1 != NULL) && (cp2 == NULL)) cp2 = cp1; if ((cp1 == NULL) && (cp2 != NULL)) cp1 = cp2; if ((cp1 != NULL) && (cp2 != NULL)) { for(t = 0.05; t < 1.0; t += 0.05) { tt = t * t; ttt = tt * t; t_ = 1.0 - t; tt_ = t_ * t_; ttt_ = tt_ * t_; nx = ttt_ * prevpt->point->xt + 3.0 * t * tt_ * cp1->xt + 3.0 * tt * t_ * cp2->xt + ttt * cpt->point->xt; ny = ttt_ * prevpt->point->yt + 3.0 * t * tt_ * cp1->yt + 3.0 * tt * t_ * cp2->yt + ttt * cpt->point->yt; nz = t_ * cpt->point->zt + t * prevpt->point->zt; na = t_ * cpt->point->at + t * prevpt->point->at; // resolution 0.1 m if (hypot(nx - px, ny - py) > resolution) { lst.push_back(thexpuni_data(nx + ln->fscrapptr->proj->rshift_x, ny + ln->fscrapptr->proj->rshift_y, nz + ln->fscrapptr->proj->rshift_z, na)); px = nx; py = ny; } } } } } // insert point it self if ((pnum >= startp) && ((endp < 0) || (pnum <= endp))) lst.push_back(thexpuni_data(cpt->point->xt + ln->fscrapptr->proj->rshift_x, cpt->point->yt + ln->fscrapptr->proj->rshift_y, cpt->point->zt + ln->fscrapptr->proj->rshift_z, cpt->point->at)); // next point prevpt = cpt; if (reverse) cpt = cpt->prevlp; else cpt = cpt->nextlp; pnum++; } } void thexpuni::polygon_insert_line(thline * ln, bool reverse) { insert_line_segment(this->resol, ln, reverse, this->m_ring_list); } void thexpuni::polygon_close_ring() { // check polygon orientation double area; std::list::iterator i, iprev; if (this->m_ring_list.size() < 2) return; iprev = this->m_ring_list.end(); iprev--; area = 0.0; for (i = this->m_ring_list.begin(); i != this->m_ring_list.end(); i++) { area += iprev->m_x * i->m_y - iprev->m_y * i->m_x; iprev = i; } area *= 0.5; bool reverse = ((area > 0) && (this->m_cpart->m_outer)) || ((area < 0) && (!this->m_cpart->m_outer)); // according to orientation, insert points to point list if (reverse) { for(i = this->m_ring_list.end(); i != this->m_ring_list.begin(); ) { i--; this->m_cpart->m_point_list.push_back(*i); } } else { for(i = this->m_ring_list.begin(); i != this->m_ring_list.end(); i++) { this->m_cpart->m_point_list.push_back(*i); } } } void thexpuni::parse_scrap(thscrap * scrap) { thbuffer stnbuff; // export scrap outline this->clear(); thscraplo * lo = scrap->get_outline(), * lo2; while (lo != NULL) { if (lo->line->outline != TT_LINE_OUTLINE_NONE) { lo2 = lo; this->polygon_start_ring(lo->line->outline == TT_LINE_OUTLINE_OUT); this->m_cpart->m_lo = lo; while (lo2 != NULL) { this->polygon_insert_line(lo2->line, lo2->mode == TT_OUTLINE_REVERSED); lo2 = lo2->next_line; } this->polygon_close_ring(); } lo = lo->next_outline; } } void thexpuni::parse_line(thline * line) { long sp = 0, cp = 1; int csubtype; this->clear(); thdb2dlp * lp = line->first_point, * slp; if (lp == NULL) return; csubtype = lp->subtype; slp = lp; lp = lp->nextlp; while (lp != NULL) { if ((lp->subtype != csubtype) || (lp->nextlp == NULL)) { thexpuni_part p; this->m_cpart = &(*this->m_part_list.insert(this->m_part_list.end(), p)); this->m_cpart->m_lp = slp; insert_line_segment(this->resol, line, false, this->m_cpart->m_point_list, sp, cp); csubtype = lp->subtype; sp = cp; slp = lp; } lp = lp->nextlp; cp++; } } void thexpmap::export_kml(class thdb2dxm * maps, class thdb2dprj * prj) { if (prj->type != TT_2DPROJ_PLAN) { thwarning(("unable to export KML from non plan projection")); return; } if (thcfg.outcs == TTCS_LOCAL) { thwarning(("data not georeferenced -- unable to export KML file")); return; } if (maps == NULL) { thwarning(("%s [%d] -- no selected projection data -- %s", this->src.name, this->src.line, this->projstr)) return; } FILE * out; const char * fnm = this->get_output("cave.kml"); out = fopen(fnm, "w"); if (out == NULL) { thwarning(("can't open %s for output",fnm)) return; } #ifdef THDEBUG thprintf("\n\nwriting %s\n", fnm); #else thprintf("writing %s ... ", fnm); thtext_inline = true; #endif thdb2dxm * cmap = maps; thdb2dxs * cbm; thdb2dmi * cmi; thscrap * scrap; thexpuni xu; fprintf(out,"\n\n\n"); fprintf(out,"Therion KML export\nTherion KML export.\n"); int cA, cR, cG, cB; cR = int (255.0 * this->layout->color_map_fg.R + 0.5); cG = int (255.0 * this->layout->color_map_fg.G + 0.5); cB = int (255.0 * this->layout->color_map_fg.B + 0.5); if (this->layout->transparency) { cA = int (255.0 * this->layout->opacity + 0.5); } else { cA = 255; } #define checkc(c) if (c < 0) c = 0; if (c > 255) c = 255; checkc(cA); checkc(cR); checkc(cG); checkc(cB); fprintf(out,"\n"); fprintf(out,"\n"); fprintf(out,"\n"); while (cmap != NULL) { cbm = cmap->first_bm; while (cbm != NULL) { cmi = cbm->bm->last_item; if (cbm->mode == TT_MAPITEM_NORMAL) { while (cmi != NULL) { if (cmi->type == TT_MAPITEM_NORMAL) { scrap = (thscrap*) cmi->object; xu.parse_scrap(scrap); if (xu.m_part_list.size() > 0) { fprintf(out,"\n"); std::list::iterator it; std::list::iterator ip; double x,y,z; for(it = xu.m_part_list.begin(); it != xu.m_part_list.end(); it++) { if (it->m_outer) fprintf(out,"\n"); else fprintf(out,"\n"); fprintf(out,"\n\n"); for(ip = it->m_point_list.begin(); ip != it->m_point_list.end(); ip++) { thcs2cs(thcs_get_data(thcfg.outcs)->params, thcs_get_data(TTCS_LONG_LAT)->params, ip->m_x, ip->m_y, scrap->z, x, y, z); fprintf(out, "\t%.14f,%.14f,%.14f\n", x / THPI * 180.0, y / THPI * 180.0, 0.0); } fprintf(out,"\n\n"); if (it->m_outer) fprintf(out,"\n"); else fprintf(out,"\n"); } fprintf(out,"\n"); } } cmi = cmi->prev_item; } } cbm = cbm->next_item; } cmap = cmap->next_item; } fprintf(out,"\n\n"); fprintf(out,"\n\n"); fclose(out); #ifdef THDEBUG #else thprintf("done\n"); thtext_inline = false; #endif } void thexpmap::export_bbox(class thdb2dxm * maps, class thdb2dprj * prj) { if (prj->type != TT_2DPROJ_PLAN) { thwarning(("unable to export bounding box of non plan projection")); return; } if (thcfg.outcs == TTCS_LOCAL) { thwarning(("data not georeferenced -- unable to export bounding box file")); return; } if (maps == NULL) { thwarning(("%s [%d] -- no selected projection data -- %s", this->src.name, this->src.line, this->projstr)) return; } FILE * out; const char * fnm = this->get_output("cave.bbox"); out = fopen(fnm, "w"); if (out == NULL) { thwarning(("can't open %s for output",fnm)) return; } #ifdef THDEBUG thprintf("\n\nwriting %s\n", fnm); #else thprintf("writing %s ... ", fnm); thtext_inline = true; #endif thdb2dxm * cmap = maps; thdb2dxs * cbm; thdb2dmi * cmi; double cx, cy, cz; bool has_scrap = false; thscrap * scrap; thexpuni xu; lxVecLimits lim; while (cmap != NULL) { cbm = cmap->first_bm; while (cbm != NULL) { cmi = cbm->bm->last_item; if (cbm->mode == TT_MAPITEM_NORMAL) { while (cmi != NULL) { if (cmi->type == TT_MAPITEM_NORMAL) { scrap = (thscrap*) cmi->object; if (!thisnan(scrap->lxmin)) { thcs2cs(thcs_get_data(thcfg.outcs)->params, thcs_get_data(TTCS_LONG_LAT)->params, scrap->lxmin + prj->rshift_x, scrap->lymin + prj->rshift_y, scrap->z + prj->rshift_z, cx, cy, cz); lim.Add(cx / THPI * 180.0, cy / THPI * 180.0, cz); thcs2cs(thcs_get_data(thcfg.outcs)->params, thcs_get_data(TTCS_LONG_LAT)->params, scrap->lxmin + prj->rshift_x, scrap->lymax + prj->rshift_y, scrap->z + prj->rshift_z, cx, cy, cz); lim.Add(cx / THPI * 180.0, cy / THPI * 180.0, cz); thcs2cs(thcs_get_data(thcfg.outcs)->params, thcs_get_data(TTCS_LONG_LAT)->params, scrap->lxmax + prj->rshift_x, scrap->lymin + prj->rshift_y, scrap->z + prj->rshift_z, cx, cy, cz); lim.Add(cx / THPI * 180.0, cy / THPI * 180.0, cz); thcs2cs(thcs_get_data(thcfg.outcs)->params, thcs_get_data(TTCS_LONG_LAT)->params, scrap->lxmax + prj->rshift_x, scrap->lymax + prj->rshift_y, scrap->z + prj->rshift_z, cx, cy, cz); lim.Add(cx / THPI * 180.0, cy / THPI * 180.0, cz); has_scrap = true; } } cmi = cmi->prev_item; } } cbm = cbm->next_item; } cmap = cmap->next_item; } if (has_scrap) { fprintf(out,"%.14f\n",lim.min.x); fprintf(out,"%.14f\n",lim.min.y); fprintf(out,"%.14f\n",lim.max.x); fprintf(out,"%.14f\n",lim.max.y); } fclose(out); #ifdef THDEBUG #else thprintf("done\n"); thtext_inline = false; #endif } void thexpmap::export_dxf(class thdb2dxm * maps, class thdb2dprj * prj) { if (maps == NULL) { thwarning(("%s [%d] -- no selected projection data -- %s", this->src.name, this->src.line, this->projstr)) return; } FILE * out; const char * fnm = this->get_output("cave.dxf"); out = fopen(fnm, "w"); if (out == NULL) { thwarning(("can't open %s for output",fnm)) return; } #ifdef THDEBUG thprintf("\n\nwriting %s\n", fnm); #else thprintf("writing %s ... ", fnm); thtext_inline = true; #endif thdb2dxm * cmap = maps; thdb2dxs * cbm; thdb2dmi * cmi; thdb3dlim limits; thscrap * scrap; thexpuni xu; xu.resol = 0.1; fprintf(out,DXFpre,limits.minx, limits.miny, limits.maxx, limits.maxy); while (cmap != NULL) { cbm = cmap->first_bm; while (cbm != NULL) { cmi = cbm->bm->last_item; if (cbm->mode == TT_MAPITEM_NORMAL) { while (cmi != NULL) { if (cmi->type == TT_MAPITEM_NORMAL) { scrap = (thscrap*) cmi->object; xu.parse_scrap(scrap); if (xu.m_part_list.size() > 0) { double x(0.0), y(0.0), z(0.0), px(0.0), py(0.0), pz(0.0); bool inside; std::list::iterator it; std::list::iterator ip; fprintf(out, " 0\nHATCH\n 100\nAcDbEntity\n 8\n0\n 100\nAcDbHatch\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 210\n0.0\n 220\n0.0\n 230\n1.0\n 2\nSOLID\n 70\n1\n 71\n0\n"); fprintf(out, " 91\n%ld\n", (long) xu.m_part_list.size()); for(it = xu.m_part_list.begin(); it != xu.m_part_list.end(); it++) { fprintf(out, " 92\n0\n 93\n%ld\n", (long)it->m_point_list.size()); inside = false; for(ip = it->m_point_list.begin(); ip != it->m_point_list.end(); ip++) { x = ip->m_x; y = ip->m_y; z = scrap->z + scrap->proj->rshift_z; limits.update(x,y,z); if (inside) { fprintf(out, " 72\n1\n"); fprintf(out, " 10\n%.3f\n 20\n%.3f\n", px, py); fprintf(out, " 11\n%.3f\n 21\n%.3f\n", x, y); } inside = true; px = x; py = y; pz = z; } if (inside) { ip = it->m_point_list.begin(); x = ip->m_x; y = ip->m_y; z = scrap->z + scrap->proj->rshift_z; fprintf(out, " 72\n1\n"); fprintf(out, " 10\n%.3f\n 20\n%.3f\n", px, py); fprintf(out, " 11\n%.3f\n 21\n%.3f\n", x, y); } fprintf(out, " 97\n0\n"); } fprintf(out, " 75\n0\n 76\n1\n 98\n1\n 10\n0.0\n 20\n0.0\n"); } } cmi = cmi->prev_item; } } cbm = cbm->next_item; } cmap = cmap->next_item; } fprintf(out,"%s", DXFpost); fclose(out); #ifdef THDEBUG #else thprintf("done\n"); thtext_inline = false; #endif } therion/thexpuni.h0000644000076400010400000000356710625655142015323 0ustar userAdministrators/** * @file thexpuni.h * Shapefile export classes. */ /* Copyright (C) 2007 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thexpuni_h #define thexpuni_h #include #include "thscrap.h" #include "thpoint.h" #include "thline.h" #include "tharea.h" #include "thattr.h" #include "thdb2d.h" struct thexpuni_data { double m_x, m_y, m_z, m_a; thexpuni_data(double x, double y, double z, double a) : m_x(x), m_y(y), m_z(z), m_a(a) {} }; struct thexpuni_part { bool m_outer; thdb2dlp * m_lp; thscraplo * m_lo; std::list m_point_list; thexpuni_part() : m_outer(true), m_lp(NULL), m_lo(NULL) {} }; // Universal module struct thexpuni { std::list m_part_list; double resol; thexpuni(); void clear(); thexpuni_part * m_cpart; std::list m_ring_list; void polygon_start_ring(bool outer); void polygon_insert_line(thline * ln, bool reverse); void polygon_close_ring(); void parse_line(thline * line); void parse_scrap(thscrap * scrap); }; #endif therion/thgeomag.cxx0000644000076400010400000001336210625655142015617 0ustar userAdministrators/** * @file thgeomag.cxx */ /* Copyright (C) 2006 Martin Budaj * * based on GPL-licensed code by * Copyright (C) 2000 Edward A Williams * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ // #include #include #include "thgeomagdata.h" #define max(a,b) (((a) > (b)) ? (a) : (b)) /*struct magfield_ { double X, Y, Z; }; magfield_ magfield;*/ #define nmax thgeomag_maxdeg #define nmaxl thgeomag_maxdeg #define pi 3.14159265358979 #define a 6378.137 #define b 6356.7523142 #define r_0 6371.2 double thgeomag(double lat, double lon, double h, double dat) { int n,m; static double P[nmax+1][nmax+1]; static double DP[nmax+1][nmax+1]; static double gnm[nmax+1][nmax+1]; static double hnm[nmax+1][nmax+1]; static double sm[nmax+1]; static double cm[nmax+1]; static double root[nmax+1]; static double roots[nmax+1][nmax+1][2]; double yearfrac,sr,r,theta,c,s,psi,fn,fn_0,B_r,B_theta,B_phi,X,Y,Z; double sinpsi, cospsi, inv_s; static int been_here = 0; double sinlat = sin(lat); double coslat = cos(lat); h = h / 1000; /* convert to geocentric */ sr = sqrt(a*a*coslat*coslat + b*b*sinlat*sinlat); /* sr is effective radius */ theta = atan2(coslat * (h*sr + a*a), sinlat * (h*sr + b*b)); /* theta is geocentric co-latitude */ r = h*h + 2.0*h * sr + (a*a*a*a - ( a*a*a*a - b*b*b*b ) * sinlat*sinlat ) / (a*a - (a*a - b*b) * sinlat*sinlat ); r = sqrt(r); /* r is geocentric radial distance */ c = cos(theta); s = sin(theta); /* protect against zero divide at geographic poles */ inv_s = 1.0 / (s + (s == 0.)*1.0e-8); /*zero out arrays */ for ( n = 0; n <= nmax; n++ ) { for ( m = 0; m <= n; m++ ) { P[n][m] = 0; DP[n][m] = 0; } } /* diagonal elements */ P[0][0] = 1; P[1][1] = s; DP[0][0] = 0; DP[1][1] = c; P[1][0] = c ; DP[1][0] = -s; /* these values will not change for subsequent function calls */ if( !been_here ) { for ( n = 2; n <= nmax; n++ ) { root[n] = sqrt((2.0*n-1) / (2.0*n)); } for ( m = 0; m <= nmax; m++ ) { double mm = m*m; for ( n = max(m + 1, 2); n <= nmax; n++ ) { roots[m][n][0] = sqrt((n-1)*(n-1) - mm); roots[m][n][1] = 1.0 / sqrt( n*n - mm); } } been_here = 1; } for ( n=2; n <= nmax; n++ ) { /* double root = sqrt((2.0*n-1) / (2.0*n)); */ P[n][n] = P[n-1][n-1] * s * root[n]; DP[n][n] = (DP[n-1][n-1] * s + P[n-1][n-1] * c) * root[n]; } /* lower triangle */ for ( m = 0; m <= nmax; m++ ) { /* double mm = m*m; */ for ( n = max(m + 1, 2); n <= nmax; n++ ) { /* double root1 = sqrt((n-1)*(n-1) - mm); */ /* double root2 = 1.0 / sqrt( n*n - mm); */ P[n][m] = (P[n-1][m] * c * (2.0*n-1) - P[n-2][m] * roots[m][n][0]) * roots[m][n][1]; DP[n][m] = ((DP[n-1][m] * c - P[n-1][m] * s) * (2.0*n-1) - DP[n-2][m] * roots[m][n][0]) * roots[m][n][1]; } } /* compute gnm, hnm at dat */ int mindex = int((dat - thgeomag_minyear) / thgeomag_step); if (mindex < 0) mindex = 0; if (mindex > thgeomag_maxmindex) mindex = thgeomag_maxmindex; yearfrac = dat - thgeomag_step*mindex - thgeomag_minyear; for (n=1;n<=nmaxl;n++) { for (m = 0;m<=nmaxl;m++) { if (mindex == thgeomag_maxmindex) { gnm[n][m] = thgeomag_GNM[mindex][n][m] + yearfrac * thgeomag_GNMD[n][m]; hnm[n][m] = thgeomag_HNM[mindex][n][m] + yearfrac * thgeomag_HNMD[n][m]; } else { gnm[n][m] = thgeomag_GNM[mindex][n][m] + yearfrac / thgeomag_step * (thgeomag_GNM[mindex+1][n][m] - thgeomag_GNM[mindex][n][m]); hnm[n][m] = thgeomag_HNM[mindex][n][m] + yearfrac / thgeomag_step * (thgeomag_HNM[mindex+1][n][m] - thgeomag_HNM[mindex][n][m]); } } } /* compute sm (sin(m lon) and cm (cos(m lon)) */ for (m = 0;m<=nmaxl;m++) { sm[m] = sin(m * lon); cm[m] = cos(m * lon); } /* compute B fields */ B_r = 0.0; B_theta = 0.0; B_phi = 0.0; fn_0 = r_0/r; fn = fn_0 * fn_0; for ( n = 1; n <= nmaxl; n++ ) { double c1_n=0; double c2_n=0; double c3_n=0; for ( m = 0; m <= n; m++ ) { double tmp = (gnm[n][m] * cm[m] + hnm[n][m] * sm[m]); c1_n += tmp * P[n][m]; c2_n += tmp * DP[n][m]; c3_n += m * (gnm[n][m] * sm[m] - hnm[n][m] * cm[m]) * P[n][m]; } /* fn=pow(r_0/r,n+2.0); */ fn *= fn_0; B_r += (n + 1) * c1_n * fn; B_theta -= c2_n * fn; B_phi += c3_n * fn * inv_s; } /* Find geodetic field components: */ psi = theta - (pi / 2.0 - lat); sinpsi = sin(psi); cospsi = cos(psi); X = -B_theta * cospsi - B_r * sinpsi; Y = B_phi; Z = B_theta * sinpsi - B_r * cospsi; /* field[0]=B_r; field[1]=B_theta; field[2]=B_phi; field[3]=X; field[4]=Y; field[5]=Z;*/ /* output fields */ /* find variation in radians */ /* return zero variation at magnetic pole X=Y=0. */ /* E is positive */ /* magfield.X = X; magfield.Y = Y; magfield.Z = Z; */ return (X != 0. || Y != 0.) ? atan2(Y, X) * 180 / pi : (double) 0.; } therion/thgeomag.h0000644000076400010400000000226310625655142015242 0ustar userAdministrators/* * Copyright (C) 2006 Martin Budaj * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thgeomag_h #define thgeomag_h double thgeomag(double lat, double lon, double h, double dat); // lat, long in radians, // h = height above ellipsoid in metres, // dat decimal year // output declination in degrees #endif therion/thgeomagdata.h0000644000076400010400000011251011331206300016050 0ustar userAdministrators// generated by geomag/cof2c.pl #ifndef thgeomagdata_h #define thgeomagdata_h static const double thgeomag_GNM[23][14][14] = { { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-31543, -2298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-677, 2905, 924, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1022, -1469, 1256, 572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {876, 628, 660, -361, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-184, 328, 264, 5, -86, -16, 0, 0, 0, 0, 0, 0, 0, 0, }, {63, 61, -11, -217, -58, 59, -90, 0, 0, 0, 0, 0, 0, 0, }, {70, -55, 0, 34, -41, -21, 18, 6, 0, 0, 0, 0, 0, 0, }, {11, 8, -4, -9, 1, 2, -9, 5, 8, 0, 0, 0, 0, 0, }, {8, 10, 1, -11, 12, 1, -2, 2, -1, -1, 0, 0, 0, 0, }, {-3, -4, 2, -5, -2, 6, 4, 0, 2, 2, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-31464, -2298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-728, 2928, 1041, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1037, -1494, 1239, 635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {880, 643, 653, -380, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-192, 328, 259, -1, -93, -26, 0, 0, 0, 0, 0, 0, 0, 0, }, {62, 60, -11, -221, -57, 57, -92, 0, 0, 0, 0, 0, 0, 0, }, {70, -54, 0, 33, -41, -20, 18, 6, 0, 0, 0, 0, 0, 0, }, {11, 8, -4, -9, 1, 2, -8, 5, 8, 0, 0, 0, 0, 0, }, {8, 10, 1, -11, 12, 1, -2, 2, 0, -1, 0, 0, 0, 0, }, {-3, -4, 2, -5, -2, 6, 4, 0, 2, 2, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-31354, -2297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-769, 2948, 1176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1058, -1524, 1223, 705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {884, 660, 644, -400, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-201, 327, 253, -9, -102, -38, 0, 0, 0, 0, 0, 0, 0, 0, }, {62, 58, -11, -224, -54, 54, -95, 0, 0, 0, 0, 0, 0, 0, }, {71, -54, 1, 32, -40, -19, 18, 6, 0, 0, 0, 0, 0, 0, }, {11, 8, -4, -9, 1, 2, -8, 5, 8, 0, 0, 0, 0, 0, }, {8, 10, 1, -11, 12, 1, -2, 2, 0, -1, 0, 0, 0, 0, }, {-3, -4, 2, -5, -2, 6, 4, 0, 2, 2, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-31212, -2306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-802, 2956, 1309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1084, -1559, 1212, 778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {887, 678, 631, -416, 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-211, 327, 245, -16, -111, -51, 0, 0, 0, 0, 0, 0, 0, 0, }, {61, 57, -10, -228, -51, 49, -98, 0, 0, 0, 0, 0, 0, 0, }, {72, -54, 2, 31, -38, -18, 19, 6, 0, 0, 0, 0, 0, 0, }, {11, 8, -4, -9, 2, 3, -8, 6, 8, 0, 0, 0, 0, 0, }, {8, 10, 1, -11, 12, 1, -2, 2, 0, -1, 0, 0, 0, 0, }, {-3, -4, 2, -5, -2, 6, 4, 0, 1, 2, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-31060, -2317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-839, 2959, 1407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1111, -1600, 1205, 839, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {889, 695, 616, -424, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-221, 326, 236, -23, -119, -62, 0, 0, 0, 0, 0, 0, 0, 0, }, {61, 55, -10, -233, -46, 44, -101, 0, 0, 0, 0, 0, 0, 0, }, {73, -54, 2, 29, -37, -16, 19, 6, 0, 0, 0, 0, 0, 0, }, {11, 7, -3, -9, 2, 4, -7, 6, 8, 0, 0, 0, 0, 0, }, {8, 10, 1, -11, 12, 1, -2, 2, 0, -1, 0, 0, 0, 0, }, {-3, -4, 2, -5, -2, 6, 4, 0, 1, 3, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-30926, -2318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-893, 2969, 1471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1140, -1645, 1202, 881, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {891, 711, 601, -426, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-230, 326, 226, -28, -125, -69, 0, 0, 0, 0, 0, 0, 0, 0, }, {61, 54, -9, -238, -40, 39, -103, 0, 0, 0, 0, 0, 0, 0, }, {73, -54, 3, 27, -35, -14, 19, 6, 0, 0, 0, 0, 0, 0, }, {11, 7, -3, -9, 2, 4, -7, 7, 8, 0, 0, 0, 0, 0, }, {8, 10, 1, -11, 12, 1, -2, 2, 0, -1, 0, 0, 0, 0, }, {-3, -4, 2, -5, -2, 6, 4, 0, 1, 3, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-30805, -2316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-951, 2980, 1517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1172, -1692, 1205, 907, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {896, 727, 584, -422, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-237, 327, 218, -32, -131, -74, 0, 0, 0, 0, 0, 0, 0, 0, }, {60, 53, -9, -242, -32, 32, -104, 0, 0, 0, 0, 0, 0, 0, }, {74, -54, 4, 25, -34, -12, 18, 6, 0, 0, 0, 0, 0, 0, }, {11, 7, -3, -9, 2, 5, -6, 8, 8, 0, 0, 0, 0, 0, }, {8, 10, 1, -12, 12, 1, -2, 3, 0, -2, 0, 0, 0, 0, }, {-3, -4, 2, -5, -2, 6, 4, 0, 1, 3, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-30715, -2306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1018, 2984, 1550, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1206, -1740, 1215, 918, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {903, 744, 565, -415, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-241, 329, 211, -33, -136, -76, 0, 0, 0, 0, 0, 0, 0, 0, }, {59, 53, -8, -246, -25, 25, -106, 0, 0, 0, 0, 0, 0, 0, }, {74, -53, 4, 23, -33, -11, 18, 6, 0, 0, 0, 0, 0, 0, }, {11, 7, -3, -9, 1, 6, -6, 8, 7, 0, 0, 0, 0, 0, }, {8, 10, 1, -12, 11, 1, -2, 3, 0, -2, 0, 0, 0, 0, }, {-3, -4, 2, -5, -2, 6, 4, 0, 2, 3, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-30654, -2292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1106, 2981, 1566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1240, -1790, 1232, 916, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {914, 762, 550, -405, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-241, 334, 208, -33, -141, -76, 0, 0, 0, 0, 0, 0, 0, 0, }, {57, 54, -7, -249, -18, 18, -107, 0, 0, 0, 0, 0, 0, 0, }, {74, -53, 4, 20, -31, -9, 17, 5, 0, 0, 0, 0, 0, 0, }, {11, 7, -3, -10, 1, 6, -5, 9, 7, 0, 0, 0, 0, 0, }, {8, 10, 1, -12, 11, 1, -2, 3, 1, -2, 0, 0, 0, 0, }, {-3, -4, 2, -5, -2, 6, 4, 0, 2, 3, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-30594, -2285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1244, 2990, 1578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1282, -1834, 1255, 913, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {944, 776, 544, -421, 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-253, 346, 194, -20, -142, -82, 0, 0, 0, 0, 0, 0, 0, 0, }, {59, 57, 6, -246, -25, 21, -104, 0, 0, 0, 0, 0, 0, 0, }, {70, -40, 0, 0, -29, -10, 15, 29, 0, 0, 0, 0, 0, 0, }, {13, 7, -8, -5, 9, 7, -10, 7, 2, 0, 0, 0, 0, 0, }, {5, -21, 1, -11, 3, 16, -3, -4, -3, -4, 0, 0, 0, 0, }, {-3, 11, 1, 2, -5, -1, 8, -1, -3, 5, -2, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-30554, -2250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1341, 2998, 1576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1297, -1889, 1274, 896, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {954, 792, 528, -408, 303, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-240, 349, 211, -20, -147, -76, 0, 0, 0, 0, 0, 0, 0, 0, }, {54, 57, 4, -247, -16, 12, -105, 0, 0, 0, 0, 0, 0, 0, }, {65, -55, 2, 1, -40, -7, 5, 19, 0, 0, 0, 0, 0, 0, }, {22, 15, -4, -1, 11, 15, -13, 5, -1, 0, 0, 0, 0, 0, }, {3, -7, -1, -25, 10, 5, -5, -2, 3, 8, 0, 0, 0, 0, }, {-8, 4, -1, 13, -4, 4, 12, 3, 2, 10, 3, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-30500, -2215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1440, 3003, 1581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1302, -1944, 1288, 882, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {958, 796, 510, -397, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-229, 360, 230, -23, -152, -69, 0, 0, 0, 0, 0, 0, 0, 0, }, {47, 57, 3, -247, -8, 7, -107, 0, 0, 0, 0, 0, 0, 0, }, {65, -56, 2, 10, -32, -11, 9, 18, 0, 0, 0, 0, 0, 0, }, {11, 9, -6, -14, 6, 10, -7, 6, 9, 0, 0, 0, 0, 0, }, {4, 9, -4, -5, 2, 4, 1, 2, 2, 5, 0, 0, 0, 0, }, {-3, -5, -1, 2, -3, 7, 4, -2, 6, -2, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-30421, -2169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1555, 3002, 1590, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1302, -1992, 1289, 878, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {957, 800, 504, -394, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-222, 362, 242, -26, -156, -63, 0, 0, 0, 0, 0, 0, 0, 0, }, {46, 58, 1, -237, -1, -2, -113, 0, 0, 0, 0, 0, 0, 0, }, {67, -56, 5, 15, -32, -7, 17, 8, 0, 0, 0, 0, 0, 0, }, {15, 6, -4, -11, 2, 10, -5, 10, 8, 0, 0, 0, 0, 0, }, {4, 6, 0, -9, 1, 4, -1, -2, 3, -1, 0, 0, 0, 0, }, {1, -3, 4, 0, -1, 4, 6, 1, -1, 2, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-30334, -2119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1662, 2997, 1594, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1297, -2038, 1292, 856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {957, 804, 479, -390, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-219, 358, 254, -31, -157, -62, 0, 0, 0, 0, 0, 0, 0, 0, }, {45, 61, 8, -228, 4, 1, -111, 0, 0, 0, 0, 0, 0, 0, }, {75, -57, 4, 13, -26, -6, 13, 1, 0, 0, 0, 0, 0, 0, }, {13, 5, -4, -14, 0, 8, -1, 11, 4, 0, 0, 0, 0, 0, }, {8, 10, 2, -13, 10, -1, -1, 5, 1, -2, 0, 0, 0, 0, }, {-2, -3, 2, -5, -2, 4, 4, 0, 2, 2, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-30220, -2068, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1781, 3000, 1611, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1287, -2091, 1278, 838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {952, 800, 461, -395, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-216, 359, 262, -42, -160, -56, 0, 0, 0, 0, 0, 0, 0, 0, }, {43, 64, 15, -212, 2, 3, -112, 0, 0, 0, 0, 0, 0, 0, }, {72, -57, 1, 14, -22, -2, 13, -2, 0, 0, 0, 0, 0, 0, }, {14, 6, -2, -13, -3, 5, 0, 11, 3, 0, 0, 0, 0, 0, }, {8, 10, 2, -12, 10, -1, 0, 3, 1, -1, 0, 0, 0, 0, }, {-3, -3, 2, -5, -1, 6, 4, 1, 0, 3, -1, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-30100, -2013, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1902, 3010, 1632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1276, -2144, 1260, 830, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {946, 791, 438, -405, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-218, 356, 264, -59, -159, -49, 0, 0, 0, 0, 0, 0, 0, 0, }, {45, 66, 28, -198, 1, 6, -111, 0, 0, 0, 0, 0, 0, 0, }, {71, -56, 1, 16, -14, 0, 12, -5, 0, 0, 0, 0, 0, 0, }, {14, 6, -1, -12, -8, 4, 0, 10, 1, 0, 0, 0, 0, 0, }, {7, 10, 2, -12, 10, -1, -1, 4, 1, -2, 0, 0, 0, 0, }, {-3, -3, 2, -5, -2, 5, 4, 1, 0, 3, -1, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-29992, -1956, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1997, 3027, 1663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1281, -2180, 1251, 833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {938, 782, 398, -419, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-218, 357, 261, -74, -162, -48, 0, 0, 0, 0, 0, 0, 0, 0, }, {48, 66, 42, -192, 4, 14, -108, 0, 0, 0, 0, 0, 0, 0, }, {72, -59, 2, 21, -12, 1, 11, -2, 0, 0, 0, 0, 0, 0, }, {18, 6, 0, -11, -7, 4, 3, 6, -1, 0, 0, 0, 0, 0, }, {5, 10, 1, -12, 9, -3, -1, 7, 2, -5, 0, 0, 0, 0, }, {-4, -4, 2, -5, -2, 5, 3, 1, 2, 3, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-29873, -1905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-2072, 3044, 1687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1296, -2208, 1247, 829, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {936, 780, 361, -424, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-214, 355, 253, -93, -164, -46, 0, 0, 0, 0, 0, 0, 0, 0, }, {53, 65, 51, -185, 4, 16, -102, 0, 0, 0, 0, 0, 0, 0, }, {74, -62, 3, 24, -6, 4, 10, 0, 0, 0, 0, 0, 0, 0, }, {21, 6, 0, -11, -9, 4, 4, 4, -4, 0, 0, 0, 0, 0, }, {5, 10, 1, -12, 9, -3, -1, 7, 1, -5, 0, 0, 0, 0, }, {-4, -4, 3, -5, -2, 5, 3, 1, 2, 3, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-29775, -1848, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-2131, 3059, 1686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1314, -2239, 1248, 802, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {939, 780, 325, -423, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-214, 353, 245, -109, -165, -36, 0, 0, 0, 0, 0, 0, 0, 0, }, {61, 65, 59, -178, 3, 18, -96, 0, 0, 0, 0, 0, 0, 0, }, {77, -64, 2, 26, -1, 5, 9, 0, 0, 0, 0, 0, 0, 0, }, {23, 5, -1, -10, -12, 3, 4, 2, -6, 0, 0, 0, 0, 0, }, {4, 9, 1, -12, 9, -4, -2, 7, 1, -6, 0, 0, 0, 0, }, {-3, -4, 2, -5, -2, 4, 3, 1, 3, 3, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-29692, -1784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-2200, 3070, 1681, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1335, -2267, 1249, 759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {940, 780, 290, -418, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-214, 352, 235, -118, -166, -17, 0, 0, 0, 0, 0, 0, 0, 0, }, {68, 67, 68, -170, -1, 19, -93, 0, 0, 0, 0, 0, 0, 0, }, {77, -72, 1, 28, 5, 4, 8, -2, 0, 0, 0, 0, 0, 0, }, {25, 6, -6, -9, -14, 9, 6, -5, -7, 0, 0, 0, 0, 0, }, {4, 9, 3, -10, 8, -8, -1, 10, -2, -8, 0, 0, 0, 0, }, {-3, -6, 2, -4, -1, 4, 2, 2, 5, 1, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-29619.4, -1728.2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-2267.7, 3068.4, 1670.9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1339.6, -2288, 1252.1, 714.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {932.3, 786.8, 250, -403, 111.3, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-218.8, 351.4, 222.3, -130.4, -168.6, -12.9, 0, 0, 0, 0, 0, 0, 0, 0, }, {72.3, 68.2, 74.2, -160.9, -5.9, 16.9, -90.4, 0, 0, 0, 0, 0, 0, 0, }, {79, -74, 0, 33.3, 9.1, 6.9, 7.3, -1.2, 0, 0, 0, 0, 0, 0, }, {24.4, 6.6, -9.2, -7.9, -16.6, 9.1, 7, -7.9, -7, 0, 0, 0, 0, 0, }, {5, 9.4, 3, -8.4, 6.3, -8.9, -1.5, 9.3, -4.3, -8.2, 0, 0, 0, 0, }, {-2.6, -6, 1.7, -3.1, -0.5, 3.7, 1, 2, 4.2, 0.3, -1.1, 0, 0, 0, }, {2.7, -1.7, -1.9, 1.5, -0.1, 0.1, -0.7, 0.7, 1.7, 0.1, 1.2, 4, 0, 0, }, {-2.2, -0.3, 0.2, 0.9, -0.2, 0.9, -0.5, 0.3, -0.3, -0.4, -0.1, -0.2, -0.4, 0, }, {-0.2, -0.9, 0.3, 0.1, -0.4, 1.3, -0.4, 0.7, -0.4, 0.3, -0.1, 0.4, 0, 0.1, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-29554.63, -1669.05, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-2337.24, 3047.69, 1657.76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1336.3, -2305.83, 1246.39, 672.51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {920.55, 797.96, 210.65, -379.86, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-227, 354.41, 208.95, -136.54, -168.05, -13.55, 0, 0, 0, 0, 0, 0, 0, 0, }, {73.6, 69.56, 76.74, -151.34, -14.58, 14.58, -86.36, 0, 0, 0, 0, 0, 0, 0, }, {79.88, -74.46, -1.65, 38.73, 12.3, 9.37, 5.42, 1.94, 0, 0, 0, 0, 0, 0, }, {24.8, 7.62, -11.73, -6.88, -18.11, 10.17, 9.36, -11.25, -4.87, 0, 0, 0, 0, 0, }, {5.58, 9.76, 3.58, -6.94, 5.01, -10.76, -1.25, 8.76, -6.66, -9.22, 0, 0, 0, 0, }, {-2.17, -6.12, 1.42, -2.35, -0.15, 3.06, 0.29, 2.06, 3.77, -0.21, -2.09, 0, 0, 0, }, {2.95, -1.6, -1.88, 1.44, -0.31, 0.29, -0.79, 0.53, 1.8, 0.16, 0.96, 3.99, 0, 0, }, {-2.15, -0.29, 0.21, 0.89, -0.38, 0.96, -0.3, 0.46, -0.35, -0.36, 0.08, -0.49, -0.08, 0, }, {-0.16, -0.88, 0.3, 0.28, -0.43, 1.18, -0.37, 0.75, -0.26, 0.35, -0.05, 0.41, -0.1, -0.18, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-29496.5, -1585.9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-2396.6, 3026, 1668.6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1339.7, -2326.3, 1231.7, 634.2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {912.6, 809, 166.6, -357.1, 89.7, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-231.1, 357.2, 200.3, -141.2, -163.1, -7.7, 0, 0, 0, 0, 0, 0, 0, 0, }, {72.8, 68.6, 76, -141.4, -22.9, 13.1, -77.9, 0, 0, 0, 0, 0, 0, 0, }, {80.4, -75, -4.7, 45.3, 14, 10.4, 1.6, 4.9, 0, 0, 0, 0, 0, 0, }, {24.3, 8.2, -14.5, -5.7, -19.3, 11.6, 10.9, -14.1, -3.7, 0, 0, 0, 0, 0, }, {5.4, 9.4, 3.4, -5.3, 3.1, -12.4, -0.8, 8.4, -8.4, -10.1, 0, 0, 0, 0, }, {-2, -6.3, 0.9, -1.1, -0.2, 2.5, -0.3, 2.2, 3.1, -1, -2.8, 0, 0, 0, }, {3, -1.5, -2.1, 1.6, -0.5, 0.5, -0.8, 0.4, 1.8, 0.2, 0.8, 3.8, 0, 0, }, {-2.1, -0.2, 0.3, 1, -0.7, 0.9, -0.1, 0.5, -0.4, -0.4, 0.2, -0.8, 0, 0, }, {-0.2, -0.9, 0.3, 0.4, -0.4, 1.1, -0.3, 0.8, -0.2, 0.4, 0, 0.4, -0.3, -0.3, }, }, }; static const double thgeomag_HNM[23][14][14] = { { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5922, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1061, 1121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -330, 3, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 195, -69, -210, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -210, 53, -33, -124, 3, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -9, 83, 2, -35, 36, -69, 0, 0, 0, 0, 0, 0, 0, }, {0, -45, -13, -10, -1, 28, -12, -22, 0, 0, 0, 0, 0, 0, }, {0, 8, -14, 7, -13, 5, 16, -5, -18, 0, 0, 0, 0, 0, }, {0, -20, 14, 5, -3, -2, 8, 10, -2, 2, 0, 0, 0, 0, }, {0, 2, 1, 2, 6, -4, 0, -2, 4, 0, -6, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5909, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1086, 1065, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -357, 34, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 203, -77, -201, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -193, 56, -32, -125, 11, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -7, 86, 4, -32, 32, -67, 0, 0, 0, 0, 0, 0, 0, }, {0, -46, -14, -11, 0, 28, -12, -22, 0, 0, 0, 0, 0, 0, }, {0, 8, -15, 7, -13, 5, 16, -5, -18, 0, 0, 0, 0, 0, }, {0, -20, 14, 5, -3, -2, 8, 10, -2, 2, 0, 0, 0, 0, }, {0, 2, 1, 2, 6, -4, 0, -2, 4, 0, -6, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5898, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1128, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -389, 62, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 211, -90, -189, -55, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -172, 57, -33, -126, 21, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -5, 89, 5, -29, 28, -65, 0, 0, 0, 0, 0, 0, 0, }, {0, -47, -14, -12, 1, 28, -13, -22, 0, 0, 0, 0, 0, 0, }, {0, 8, -15, 6, -13, 5, 16, -5, -18, 0, 0, 0, 0, 0, }, {0, -20, 14, 5, -3, -2, 8, 10, -2, 2, 0, 0, 0, 0, }, {0, 2, 1, 2, 6, -4, 0, -2, 4, 0, -6, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5875, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1191, 917, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -421, 84, 360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 218, -109, -173, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -148, 58, -34, -126, 32, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2, 93, 8, -26, 23, -62, 0, 0, 0, 0, 0, 0, 0, }, {0, -48, -14, -12, 2, 28, -15, -22, 0, 0, 0, 0, 0, 0, }, {0, 8, -15, 6, -13, 5, 16, -5, -18, 0, 0, 0, 0, 0, }, {0, -20, 14, 5, -3, -2, 8, 10, -2, 2, 0, 0, 0, 0, }, {0, 2, 1, 2, 6, -4, 0, -2, 4, 0, -6, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5845, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1259, 823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -445, 103, 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 220, -134, -153, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -122, 58, -38, -125, 43, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 96, 11, -22, 18, -57, 0, 0, 0, 0, 0, 0, 0, }, {0, -49, -14, -13, 4, 28, -16, -22, 0, 0, 0, 0, 0, 0, }, {0, 8, -15, 6, -14, 5, 17, -5, -19, 0, 0, 0, 0, 0, }, {0, -20, 14, 5, -3, -2, 9, 10, -2, 2, 0, 0, 0, 0, }, {0, 2, 1, 2, 6, -4, 0, -2, 4, 0, -6, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5817, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1334, 728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -462, 119, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 216, -163, -130, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -96, 58, -44, -122, 51, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 3, 99, 14, -18, 13, -52, 0, 0, 0, 0, 0, 0, 0, }, {0, -50, -14, -14, 5, 29, -17, -21, 0, 0, 0, 0, 0, 0, }, {0, 8, -15, 6, -14, 5, 17, -5, -19, 0, 0, 0, 0, 0, }, {0, -20, 14, 5, -3, -2, 9, 10, -2, 2, 0, 0, 0, 0, }, {0, 2, 1, 2, 6, -4, 0, -2, 4, 0, -6, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5808, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1424, 644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -480, 133, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 205, -195, -109, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -72, 60, -53, -118, 58, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 4, 102, 19, -16, 8, -46, 0, 0, 0, 0, 0, 0, 0, }, {0, -51, -15, -14, 6, 29, -18, -20, 0, 0, 0, 0, 0, 0, }, {0, 8, -15, 5, -14, 5, 18, -5, -19, 0, 0, 0, 0, 0, }, {0, -20, 14, 5, -3, -2, 9, 10, -2, 2, 0, 0, 0, 0, }, {0, 2, 1, 2, 6, -4, 0, -2, 4, 0, -6, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5812, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1520, 586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -494, 146, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 188, -226, -90, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -51, 64, -64, -115, 64, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 4, 104, 25, -15, 4, -40, 0, 0, 0, 0, 0, 0, 0, }, {0, -52, -17, -14, 7, 29, -19, -19, 0, 0, 0, 0, 0, 0, }, {0, 8, -15, 5, -15, 5, 18, -5, -19, 0, 0, 0, 0, 0, }, {0, -20, 15, 5, -3, -3, 9, 11, -2, 2, 0, 0, 0, 0, }, {0, 2, 1, 2, 6, -4, 0, -1, 4, 0, -6, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5821, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1614, 528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -499, 163, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 169, -252, -72, -141, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -33, 71, -75, -113, 69, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 4, 105, 33, -15, 0, -33, 0, 0, 0, 0, 0, 0, 0, }, {0, -52, -18, -14, 7, 29, -20, -19, 0, 0, 0, 0, 0, 0, }, {0, 8, -14, 5, -15, 5, 19, -5, -19, 0, 0, 0, 0, 0, }, {0, -21, 15, 5, -3, -3, 9, 11, -2, 2, 0, 0, 0, 0, }, {0, 2, 1, 2, 6, -4, 0, -1, 4, 0, -6, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5810, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1702, 477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -499, 186, -11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 144, -276, -55, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -12, 95, -67, -119, 82, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 6, 100, 16, -9, -16, -39, 0, 0, 0, 0, 0, 0, 0, }, {0, -45, -18, 2, 6, 28, -17, -22, 0, 0, 0, 0, 0, 0, }, {0, 12, -21, -12, -7, 2, 18, 3, -11, 0, 0, 0, 0, 0, }, {0, -27, 17, 29, -9, 4, 9, 6, 1, 8, 0, 0, 0, 0, }, {0, 5, 1, -20, -1, -6, 6, -4, -2, 0, -2, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5815, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1810, 381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -476, 206, -46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 136, -278, -37, -210, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 3, 103, -87, -122, 80, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1, 99, 33, -12, -12, -30, 0, 0, 0, 0, 0, 0, 0, }, {0, -35, -17, 0, 10, 36, -18, -16, 0, 0, 0, 0, 0, 0, }, {0, 5, -22, 0, -21, -8, 17, -4, -17, 0, 0, 0, 0, 0, }, {0, -24, 19, 12, 2, 2, 8, 8, -11, -7, 0, 0, 0, 0, }, {0, 13, -2, -10, 2, -3, 6, -3, 6, 11, 8, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5820, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1898, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -462, 216, -83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 133, -274, -23, -230, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 15, 110, -98, -121, 78, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -9, 96, 48, -16, -12, -24, 0, 0, 0, 0, 0, 0, 0, }, {0, -50, -24, -4, 8, 28, -20, -18, 0, 0, 0, 0, 0, 0, }, {0, 10, -15, 5, -23, 3, 23, -4, -13, 0, 0, 0, 0, 0, }, {0, -11, 12, 7, 6, -2, 10, 7, -6, 5, 0, 0, 0, 0, }, {0, -4, 0, -8, -2, -4, 1, -3, 7, -1, -3, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1967, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -414, 224, -130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 135, -278, 3, -255, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 16, 125, -117, -114, 81, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -10, 99, 60, -20, -11, -17, 0, 0, 0, 0, 0, 0, 0, }, {0, -55, -28, -6, 7, 23, -18, -17, 0, 0, 0, 0, 0, 0, }, {0, 11, -14, 7, -18, 4, 23, 1, -20, 0, 0, 0, 0, 0, }, {0, -18, 12, 2, 0, -3, 9, 8, 0, 5, 0, 0, 0, 0, }, {0, 4, 1, 0, 2, -5, 1, -1, 6, 0, -7, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5776, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2016, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -404, 240, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 148, -269, 13, -269, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 19, 128, -126, -97, 81, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -11, 100, 68, -32, -8, -7, 0, 0, 0, 0, 0, 0, 0, }, {0, -61, -27, -2, 6, 26, -23, -12, 0, 0, 0, 0, 0, 0, }, {0, 7, -12, 9, -16, 4, 24, -3, -17, 0, 0, 0, 0, 0, }, {0, -22, 15, 7, -4, -5, 10, 10, -4, 1, 0, 0, 0, 0, }, {0, 2, 1, 2, 6, -4, 0, -2, 3, 0, -6, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5737, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2047, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -366, 251, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 167, -266, 26, -279, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 26, 139, -139, -91, 83, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -12, 100, 72, -37, -6, 1, 0, 0, 0, 0, 0, 0, 0, }, {0, -70, -27, -4, 8, 23, -23, -11, 0, 0, 0, 0, 0, 0, }, {0, 7, -15, 6, -17, 6, 21, -6, -16, 0, 0, 0, 0, 0, }, {0, -21, 16, 6, -4, -5, 10, 11, -2, 1, 0, 0, 0, 0, }, {0, 1, 1, 3, 4, -4, 0, -1, 3, 1, -4, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5675, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2067, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -333, 262, -223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 191, -265, 39, -288, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 31, 148, -152, -83, 88, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -13, 99, 75, -41, -4, 11, 0, 0, 0, 0, 0, 0, 0, }, {0, -77, -26, -5, 10, 22, -23, -12, 0, 0, 0, 0, 0, 0, }, {0, 6, -16, 4, -19, 6, 18, -10, -17, 0, 0, 0, 0, 0, }, {0, -21, 16, 7, -4, -5, 10, 11, -3, 1, 0, 0, 0, 0, }, {0, 1, 1, 3, 4, -4, -1, -1, 3, 1, -5, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2129, -200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -336, 271, -252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 212, -257, 53, -297, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 46, 150, -151, -78, 92, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -15, 93, 71, -43, -2, 17, 0, 0, 0, 0, 0, 0, 0, }, {0, -82, -27, -5, 16, 18, -23, -10, 0, 0, 0, 0, 0, 0, }, {0, 7, -18, 4, -22, 9, 16, -13, -15, 0, 0, 0, 0, 0, }, {0, -21, 16, 9, -5, -6, 9, 10, -6, 2, 0, 0, 0, 0, }, {0, 1, 0, 3, 6, -4, 0, -1, 4, 0, -6, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2197, -306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -310, 284, -297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 232, -249, 69, -297, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 47, 150, -154, -75, 95, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -16, 88, 69, -48, -1, 21, 0, 0, 0, 0, 0, 0, 0, }, {0, -83, -27, -2, 20, 17, -23, -7, 0, 0, 0, 0, 0, 0, }, {0, 8, -19, 5, -23, 11, 14, -15, -11, 0, 0, 0, 0, 0, }, {0, -21, 15, 9, -6, -6, 9, 9, -7, 2, 0, 0, 0, 0, }, {0, 1, 0, 3, 6, -4, 0, -1, 4, 0, -6, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2279, -373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -284, 293, -352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 247, -240, 84, -299, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 46, 154, -153, -69, 97, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -16, 82, 69, -52, 1, 24, 0, 0, 0, 0, 0, 0, 0, }, {0, -80, -26, 0, 21, 17, -23, -4, 0, 0, 0, 0, 0, 0, }, {0, 10, -19, 6, -22, 12, 12, -16, -10, 0, 0, 0, 0, 0, }, {0, -20, 15, 11, -7, -7, 9, 8, -7, 2, 0, 0, 0, 0, }, {0, 2, 1, 3, 6, -4, 0, -2, 3, -1, -6, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2366, -413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -262, 302, -427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 262, -236, 97, -306, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 46, 165, -143, -55, 107, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -17, 72, 67, -58, 1, 36, 0, 0, 0, 0, 0, 0, 0, }, {0, -69, -25, 4, 24, 17, -24, -6, 0, 0, 0, 0, 0, 0, }, {0, 11, -21, 8, -23, 15, 11, -16, -4, 0, 0, 0, 0, 0, }, {0, -20, 15, 12, -6, -8, 8, 5, -8, 3, 0, 0, 0, 0, }, {0, 1, 0, 4, 5, -5, -1, -2, 1, -2, -7, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5186.1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2481.6, -458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -227.6, 293.4, -491.1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 272.6, -231.9, 119.8, -303.8, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 43.8, 171.9, -133.1, -39.3, 106.3, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -17.4, 63.7, 65.1, -61.2, 0.7, 43.8, 0, 0, 0, 0, 0, 0, 0, }, {0, -64.6, -24.2, 6.2, 24, 14.8, -25.4, -5.8, 0, 0, 0, 0, 0, 0, }, {0, 11.9, -21.5, 8.5, -21.5, 15.5, 8.9, -14.9, -2.1, 0, 0, 0, 0, 0, }, {0, -19.7, 13.4, 12.5, -6.2, -8.4, 8.4, 3.8, -8.2, 4.8, 0, 0, 0, 0, }, {0, 1.7, 0, 4, 4.9, -5.9, -1.2, -2.9, 0.2, -2.2, -7.4, 0, 0, 0, }, {0, 0.1, 1.3, -0.9, -2.6, 0.9, -0.7, -2.8, -0.9, -1.2, -1.9, -0.9, 0, 0, }, {0, -0.4, 0.3, 2.5, -2.6, 0.7, 0.3, 0, 0, 0.3, -0.9, -0.4, 0.8, 0, }, {0, -0.9, 0.2, 1.8, -0.4, -1, -0.1, 0.7, 0.3, 0.6, 0.3, -0.2, -0.5, -0.9, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5077.99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2594.5, -515.43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -198.86, 269.72, -524.72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 282.07, -225.23, 145.15, -305.36, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 42.72, 180.25, -123.45, -19.57, 103.85, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -20.33, 54.75, 63.63, -63.53, 0.24, 50.94, 0, 0, 0, 0, 0, 0, 0, }, {0, -61.14, -22.57, 6.82, 25.35, 10.93, -26.32, -4.64, 0, 0, 0, 0, 0, 0, }, {0, 11.2, -20.88, 9.83, -19.71, 16.22, 7.61, -12.76, -0.06, 0, 0, 0, 0, 0, }, {0, -20.11, 12.69, 12.67, -6.72, -8.16, 8.1, 2.92, -7.73, 6.01, 0, 0, 0, 0, }, {0, 2.19, 0.1, 4.46, 4.76, -6.58, -1.01, -3.47, -0.86, -2.31, -7.93, 0, 0, 0, }, {0, 0.26, 1.44, -0.77, -2.27, 0.9, -0.58, -2.69, -1.08, -1.58, -1.9, -1.39, 0, 0, }, {0, -0.55, 0.23, 2.38, -2.63, 0.61, 0.4, 0.01, 0.02, 0.28, -0.87, -0.34, 0.88, 0, }, {0, -0.76, 0.33, 1.72, -0.54, -1.07, -0.04, 0.63, 0.21, 0.53, 0.38, -0.22, -0.57, -0.82, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 4945.1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2707.7, -575.4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -160.5, 251.7, -536.8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 286.4, -211.2, 164.4, -309.2, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 44.7, 188.9, -118.1, 0.1, 100.9, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -20.8, 44.2, 61.5, -66.3, 3.1, 54.9, 0, 0, 0, 0, 0, 0, 0, }, {0, -57.8, -21.2, 6.6, 24.9, 7, -27.7, -3.4, 0, 0, 0, 0, 0, 0, }, {0, 10.9, -20, 11.9, -17.4, 16.7, 7.1, -10.8, 1.7, 0, 0, 0, 0, 0, }, {0, -20.5, 11.6, 12.8, -7.2, -7.4, 8, 2.2, -6.1, 7, 0, 0, 0, 0, }, {0, 2.8, -0.1, 4.7, 4.4, -7.2, -1, -4, -2, -2, -8.3, 0, 0, 0, }, {0, 0.1, 1.7, -0.6, -1.8, 0.9, -0.4, -2.5, -1.3, -2.1, -1.9, -1.8, 0, 0, }, {0, -0.8, 0.3, 2.2, -2.5, 0.5, 0.6, 0, 0.1, 0.3, -0.9, -0.2, 0.8, 0, }, {0, -0.8, 0.3, 1.7, -0.6, -1.2, -0.1, 0.5, 0.1, 0.5, 0.4, -0.2, -0.5, -0.8, }, }, }; static const double thgeomag_GNMD[14][14] = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {11.4, 16.7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-11.3, -3.9, 2.7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1.3, -3.9, -2.9, -8.1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1.4, 2, -8.9, 4.4, -2.3, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-0.5, 0.5, -1.5, -0.7, 1.3, 1.4, 0, 0, 0, 0, 0, 0, 0, 0, }, {-0.3, -0.3, -0.3, 1.9, -1.6, -0.2, 1.8, 0, 0, 0, 0, 0, 0, 0, }, {0.2, -0.1, -0.6, 1.4, 0.3, 0.1, -0.8, 0.4, 0, 0, 0, 0, 0, 0, }, {-0.1, 0.1, -0.5, 0.3, -0.3, 0.3, 0.2, -0.5, 0.2, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }; static const double thgeomag_HNMD[14][14] = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -28.8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -23, -12.9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 8.6, -2.9, -2.1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0.4, 3.2, 3.6, -0.8, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0.5, 1.5, 0.9, 3.7, -0.6, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -0.1, -2.1, -0.4, -0.5, 0.8, 0.5, 0, 0, 0, 0, 0, 0, 0, }, {0, 0.6, 0.3, -0.2, -0.1, -0.8, -0.3, 0.2, 0, 0, 0, 0, 0, 0, }, {0, 0, 0.2, 0.5, 0.4, 0.1, -0.1, 0.4, 0.4, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }; #define thgeomag_maxmindex 22 #define thgeomag_step 5 #define thgeomag_minyear 1900 #define thgeomag_maxdeg 13 #endif therion/thgrade.cxx0000644000076400010400000001437010722035302015426 0ustar userAdministrators/** * @file thgrade.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thgrade.h" #include "thexception.h" #include "thchenc.h" #include "thdata.h" #include "thparse.h" thgrade::thgrade() { this->data.reset_data_sd(); this->update_sd_from_data(true); } thgrade::~thgrade() { } int thgrade::get_class_id() { return TT_GRADE_CMD; } bool thgrade::is(int class_id) { if (class_id == TT_GRADE_CMD) return true; else return thdataobject::is(class_id); } int thgrade::get_cmd_nargs() { return 1; } const char * thgrade::get_cmd_end() { return "endgrade"; } const char * thgrade::get_cmd_name() { // insert command name here return "grade"; } thcmd_option_desc thgrade::get_cmd_option_desc(const char * opts) { // no options allowed // int id = thmatch_token(opts, thtt_grade_opt); // if (id == TT_GRADE_UNKNOWN) return thdataobject::get_cmd_option_desc(opts); // else // return thcmd_option_desc(id); } void thgrade::set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline) { switch (cod.id) { case 0: thsplit_args(& this->db->mbuff_tmp, *args); this->set_sd(this->db->mbuff_tmp.get_size(), this->db->mbuff_tmp.get_buffer()); break; case 1: cod.id = TT_DATAOBJECT_NAME; default: thdataobject::set(cod, args, argenc, indataline); } } void thgrade::self_delete() { delete this; } void thgrade::self_print_properties(FILE * outf) { thdataobject::self_print_properties(outf); fprintf(outf,"thgrade:\n"); fprintf(outf,"\tlength sd: %f metres\n",thinn(this->dls_length)); fprintf(outf,"\tbrearing sd: %f degrees\n",thinn(this->dls_bearing)); fprintf(outf,"\tgradient sd: %f degrees\n",thinn(this->dls_gradient)); fprintf(outf,"\tcounter sd: %f metres\n",thinn(this->dls_counter)); fprintf(outf,"\tdepth sd: %f metres\n",thinn(this->dls_depth)); fprintf(outf,"\tdx sd: %f metres\n",thinn(this->dls_dx)); fprintf(outf,"\tdy sd: %f metres\n",thinn(this->dls_dy)); fprintf(outf,"\tdz sd: %f metres\n",thinn(this->dls_dz)); fprintf(outf,"\tx sd: %f metres\n",thinn(this->dls_x)); fprintf(outf,"\ty sd: %f metres\n",thinn(this->dls_y)); fprintf(outf,"\tz sd: %f metres\n",thinn(this->dls_z)); } void thgrade::set_sd(int nargs, char ** args) { this->data.set_data_sd(nargs, args); } int thgrade::get_context() { return (THCTX_SURVEY | THCTX_NONE | THCTX_SCRAP); } void thgrade::update_sd_from_data(bool alsonan) { if (alsonan) { this->dls_length = this->data.dls_length; this->dls_gradient = this->data.dls_gradient; this->dls_bearing = this->data.dls_bearing; this->dls_counter = this->data.dls_counter; this->dls_depth = this->data.dls_depth; this->dls_dx = this->data.dls_dx; this->dls_dy = this->data.dls_dy; this->dls_dz = this->data.dls_dz; this->dls_x = this->data.dls_x; this->dls_y = this->data.dls_y; this->dls_z = this->data.dls_z; } else { thupdate_double(this->dls_length, this->data.dls_length); thupdate_double(this->dls_gradient, this->data.dls_gradient); thupdate_double(this->dls_bearing, this->data.dls_bearing); thupdate_double(this->dls_counter, this->data.dls_counter); thupdate_double(this->dls_depth, this->data.dls_depth); thupdate_double(this->dls_dx, this->data.dls_dx); thupdate_double(this->dls_dy, this->data.dls_dy); thupdate_double(this->dls_dz, this->data.dls_dz); thupdate_double(this->dls_x, this->data.dls_x); thupdate_double(this->dls_y, this->data.dls_y); thupdate_double(this->dls_z, this->data.dls_z); } } void thgrade::update_data_sd(thdata * dp) { thupdate_double(dp->dls_length, this->dls_length); thupdate_double(dp->dls_gradient, this->dls_gradient); thupdate_double(dp->dls_bearing, this->dls_bearing); thupdate_double(dp->dls_counter, this->dls_counter); thupdate_double(dp->dls_depth, this->dls_depth); thupdate_double(dp->dls_dx, this->dls_dx); thupdate_double(dp->dls_dy, this->dls_dy); thupdate_double(dp->dls_dz, this->dls_dz); thupdate_double(dp->dls_x, this->dls_x); thupdate_double(dp->dls_y, this->dls_y); thupdate_double(dp->dls_z, this->dls_z); } void thgrade::start_insert() { this->update_sd_from_data(); } void thgrade::self_print_library() { thprintf("\toname = \"%s\";\n", this->get_name()); thprintf("\tpgrade->set(thcmd_option_desc(TT_DATAOBJECT_NAME,1),oname,0,0);\n"); thdecode_c(&(this->db->buff_enc), this->get_title()); thprintf("\toname = \"%s\";\n", this->db->buff_enc.get_buffer()); thprintf("\tpgrade->set(thcmd_option_desc(TT_DATAOBJECT_TITLE,1),oname,TT_UTF_8,0);\n"); thprintf("\tpgrade->dls_length = "); thprintinfnan(this->dls_length); thprintf(";\n\tpgrade->dls_bearing = "); thprintinfnan(this->dls_bearing); thprintf(";\n\tpgrade->dls_gradient = "); thprintinfnan(this->dls_gradient); thprintf(";\n\tpgrade->dls_counter = "); thprintinfnan(this->dls_counter); thprintf(";\n\tpgrade->dls_depth = "); thprintinfnan(this->dls_depth); thprintf(";\n\tpgrade->dls_dx = "); thprintinfnan(this->dls_dx); thprintf(";\n\tpgrade->dls_dy = "); thprintinfnan(this->dls_dy); thprintf(";\n\tpgrade->dls_dz = "); thprintinfnan(this->dls_dz); thprintf(";\n\tpgrade->dls_x = "); thprintinfnan(this->dls_x); thprintf(";\n\tpgrade->dls_y = "); thprintinfnan(this->dls_y); thprintf(";\n\tpgrade->dls_z = "); thprintinfnan(this->dls_z); thprintf(";\n"); } thdata thgrade::data; therion/thgrade.h0000644000076400010400000000637110721450274015065 0ustar userAdministrators/** * @file thgrade.h * Survey grade module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thgrade_h #define thgrade_h #include "thdataobject.h" #include "thdata.h" /** * grade command options tokens. */ enum { TT_GRADE_UNKNOWN = 2000, TT_GRADE_OPTION = 2001, }; /** * grade command options parsing table. */ static const thstok thtt_grade_opt[] = { {NULL, TT_GRADE_UNKNOWN}, }; /** * grade class. */ class thgrade : public thdataobject { static thdata data; void update_sd_from_data(bool alsonan = false); ///< Update these data. public: void set_sd(int nargs, char ** args); ///< Set SD. public: double dls_length, dls_gradient, dls_bearing, dls_counter, dls_depth, dls_dx, dls_dy, dls_dz, dls_x, dls_y, dls_z; /** * Standard constructor. */ thgrade(); /** * Standard destructor. */ virtual ~thgrade(); /** * Return class identifier. */ virtual int get_class_id(); /** * Return class name. */ virtual const char * get_class_name() {return "thgrade";}; /** * Return true, if son of given class. */ virtual bool is(int class_id); /** * Return number of command arguments. */ virtual int get_cmd_nargs(); /** * Return command name. */ virtual const char * get_cmd_name(); /** * Return command end option. */ virtual const char * get_cmd_end(); /** * Return option description. */ virtual thcmd_option_desc get_cmd_option_desc(const char * opts); /** * Set command option. * * @param cod Command option description. * @param args Option arguments arry. * @param argenc Arguments encoding. */ virtual void set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline); /** * Delete this object. * * @warn Always use this methos instead of delete function. */ virtual void self_delete(); /** * Print object properties. */ virtual void self_print_properties(FILE * outf); /** * Print object in C++ format. */ void self_print_library(); /** * Get context for object. */ virtual int get_context(); /** * Update data SD. */ void update_data_sd(thdata * dp); /** * Start insertion into database. */ void start_insert(); }; #endif therion/thimport.cxx0000644000076400010400000004507412267532700015675 0ustar userAdministrators/** * @file thimport.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thimport.h" #include "thexception.h" #include "thchenc.h" #include "thdata.h" #include "thsurvey.h" #include "thendsurvey.h" #include "extern/img.h" #include #include #include #include #ifndef THMSVC #include #else #include #define getcwd _getcwd #define strcasecmp _stricmp #endif struct thsst { std::string name, fullname; thsurvey * survey; }; thimport::thimport() { this->format = 0; this->fname = NULL; this->surveys = TT_IMPORT_SURVEYS_CREATE; this->filter = NULL; this->calib_x = 0.0; this->calib_y = 0.0; this->calib_z = 0.0; } thimport::~thimport() { } int thimport::get_class_id() { return TT_IMPORT_CMD; } int thimport::get_context() { return (THCTX_SURVEY | THCTX_NONE); } bool thimport::is(int class_id) { if (class_id == TT_IMPORT_CMD) return true; else return thdataobject::is(class_id); } int thimport::get_cmd_nargs() { // replace by real number of arguments return 1; } const char * thimport::get_cmd_end() { // insert endcommand if multiline command return NULL; } const char * thimport::get_cmd_name() { // insert command name here return "import"; } thcmd_option_desc thimport::get_cmd_option_desc(const char * opts) { int id = thmatch_token(opts, thtt_import_opt); if (id == TT_IMPORT_UNKNOWN) return thdataobject::get_cmd_option_desc(opts); else return thcmd_option_desc(id); } void thimport::set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline) { switch (cod.id) { // replace this by real properties setting case 1: this->set_file_name(*args); break; case TT_IMPORT_FORMAT: this->format = thmatch_token(args[0], thtt_import_fmts); if (this->format == TT_IMPORT_FMT_UNKNOWN) ththrow(("unknown import format -- %s", args[0])) break; case TT_IMPORT_CALIB: this->parse_calib(args[0], argenc); break; case TT_IMPORT_SURVEYS: this->surveys = thmatch_token(args[0], thtt_import_surveys); if (this->surveys == TT_IMPORT_SURVEYS_UNKNOWN) ththrow(("unknown survey structure policy -- %s", args[0])) break; case TT_IMPORT_FILTER: if (strlen(args[0]) > 0) this->filter = this->db->strstore(args[0]); else this->filter = NULL; break; // if not found, try to set fathers properties default: thdataobject::set(cod, args, argenc, indataline); } } void thimport::self_delete() { delete this; } void thimport::self_print_properties(FILE * outf) { thdataobject::self_print_properties(outf); fprintf(outf,"thimport:\n"); // insert intended print of object properties here } void thimport::set_file_name(char * fnm) { thbuffer impf_path; impf_path.guarantee(1024); getcwd(impf_path.get_buffer(),1024); this->mysrc = this->db->csrc; long i; if (strlen(fnm) == 0) ththrow(("file not specified")) impf_path += "/"; impf_path += thdb.csrc.name; char * pp = impf_path.get_buffer(); for(i = (long)strlen(pp); i >= 0; i--) { if ((pp[i] == '/') || (pp[i] == '\\')) { break; } else pp[i] = 0; } if (strlen(pp) == 0) impf_path = "/"; impf_path += fnm; pp = impf_path.get_buffer(); for(i = (long)strlen(pp); i >= 0; i--) { if (pp[i] == '\\') pp[i] = '/'; } this->fname = this->db->strstore(pp); FILE * tmp; tmp = fopen(this->fname,"r"); if (tmp == NULL) ththrow(("unable to open file for import -- %s", this->fname)) else fclose(tmp); // let's determine input type #define check_ext(str) (strlen(this->fname) > strlen(str)) && \ (strcasecmp(&(this->fname[strlen(this->fname) - strlen(str)]), str) == 0) if (check_ext(".3d")) this->format = TT_IMPORT_FMT_3D; else if (check_ext(".plt")) this->format = TT_IMPORT_FMT_PLT; else if (check_ext(".xyz")) this->format = TT_IMPORT_FMT_XYZ; } void thimport::import_file() { thobjectsrc tmpsrc; thsurvey * tmpsv; thdataobject * tmpobj; tmpsv = this->db->csurveyptr; tmpobj = this->db->lcsobjectptr; this->db->csurveyptr = this->fsptr; if (this->fsptr == NULL) { this->db->lcsobjectptr = this; while (this->db->lcsobjectptr->nsptr != NULL) this->db->lcsobjectptr = this->db->lcsobjectptr->nsptr; } else this->db->lcsobjectptr = this->db->csurveyptr->loptr; tmpsrc = this->db->csrc; this->db->csrc = this->mysrc; this->db->csrc.context = this; switch (this->format) { case TT_IMPORT_FMT_3D: case TT_IMPORT_FMT_PLT: case TT_IMPORT_FMT_XYZ: this->import_file_img(); break; default: ththrow(("unknown file format -- %s", this->fname)) } this->db->lcsobjectptr = tmpobj; this->db->csurveyptr = tmpsv; this->db->csrc = tmpsrc; } const char * thimport::station_name(const char * sn, const char separator, struct thsst * sst) { sst->survey = NULL; sst->name = sn; if (separator == 0) return sn; static thbuffer bx, prevsurvey; static thmbuffer psurv, csurv; static long active_survey; static thsurvey * prevpsurvey; thdataobject * prevobjptr; long i, l; bx = sn; char * buff = bx.get_buffer(), * rv; switch (this->format) { case TT_IMPORT_FMT_3D: { // splitne current na podstringy thsplit_strings(&csurv, sn, separator); char ** pbf = psurv.get_buffer(), ** cbf = csurv.get_buffer(); long nps = psurv.get_size(), ncs = csurv.get_size(); if (nps == 0) { prevpsurvey = NULL; } if (nps == 0) active_survey = 0; if ((ncs == 1) || (this->surveys == TT_IMPORT_SURVEYS_IGNORE)) return sn; // skusi porovnat s existujucim bool is_ident = true; if (nps != ncs) is_ident = false; for(i = 0; is_ident && (i < (ncs - 1)); i++) { is_ident = is_ident && (strcmp(pbf[i], cbf[i]) == 0); } if (!is_ident) { prevpsurvey = NULL; thsplit_strings(&psurv, sn, separator); prevsurvey = ""; int prevctx; thsurvey * csurvey = this->fsptr, * nsurvey, * prevcsptr = this->db->csurveyptr; // thendsurvey * nendsurvey; for (active_survey = 0; active_survey < (ncs - 1); active_survey++) { nsurvey = NULL; nsurvey = this->db->get_survey_noexc(cbf[active_survey], csurvey); // if nsurvey not found, try if there is no other object // with this name if ((nsurvey == NULL) && (this->surveys == TT_IMPORT_SURVEYS_CREATE) && (this->db->object_map.find(thobjectid(cbf[active_survey],(csurvey == NULL) ? 0 : csurvey->id)) == this->db->object_map.end())) { // if not, create this survey prevcsptr = this->db->csurveyptr; prevctx = this->db->ccontext; prevobjptr = this->db->csurveyptr = csurvey; if (csurvey == NULL) { this->db->lcsobjectptr = this; while (this->db->lcsobjectptr->nsptr != NULL) this->db->lcsobjectptr = this->db->lcsobjectptr->nsptr; } else this->db->lcsobjectptr = this->db->csurveyptr->loptr; this->db->ccontext = THCTX_SURVEY; nsurvey = (thsurvey*) this->db->create("survey", this->mysrc); // TODO - nastavit mu meno cez set nsurvey->name = this->db->strstore(cbf[active_survey]); this->db->insert(nsurvey); this->db->csrc.context = this; this->db->csurveylevel--; // nendsurvey = (thendsurvey*) this->db->create("endsurvey", this->mysrc); // this->db->insert(nendsurvey); this->db->csurveyptr = prevcsptr; if (prevcsptr == NULL) { this->db->lcsobjectptr = this; while (this->db->lcsobjectptr->nsptr != NULL) this->db->lcsobjectptr = this->db->lcsobjectptr->nsptr; } else this->db->lcsobjectptr = this->db->csurveyptr->loptr; this->db->ccontext = prevctx; nsurvey = this->db->get_survey_noexc(cbf[active_survey], csurvey); } if (nsurvey != NULL) { if (strlen(prevsurvey.get_buffer()) == 0) { prevsurvey = cbf[active_survey]; } else { bx = prevsurvey.get_buffer(); prevsurvey = cbf[active_survey]; prevsurvey += "."; prevsurvey += bx.get_buffer(); } csurvey = nsurvey; prevpsurvey = csurvey; } else break; } // } // poskladame meno bodu bx = ""; for(i = active_survey; i < ncs; i++) { if (i > active_survey) bx += "."; bx += cbf[i]; } sst->survey = prevpsurvey; sst->name = bx.get_buffer(); if (strlen(prevsurvey.get_buffer()) > 0) { bx += "@"; bx += prevsurvey; } return bx.get_buffer(); } break; default: l = (long)strlen(bx); rv = buff; for(i = 0; i < l; i++) { if ((buff[i] == separator) && ((i + 1) < l)) { rv = &(buff[i+1]); } } sst->name = rv; return rv; break; } } struct thimg_shot { double fx, fy, fz, tx, ty, tz; long flags; }; struct thimg_stpos { double x, y, z; }; bool operator < (const thimg_stpos & p1, const thimg_stpos & p2) { if (p1.x < p2.x) return true; if (p1.x > p2.x) return false; if (p1.y < p2.y) return true; if (p1.y > p2.y) return false; if (p1.z < p2.z) return true; return false; } typedef std::map str2strmap; typedef std::map pos2strmap; typedef std::list thimgshotlist; void thimport::import_file_img() { // potrebujeme: // funkciu ktora premeni ass.sss.1 na 1@sds.sds, ale // iba ak survey existuje // hash: ass.ass.1 -> 1@sds.sds // hash: x,y,z -> 1@sds.sds // list: xyz->xyz + flags thimg_stpos tmppos; thimg_shot tmpshot; str2strmap svxs2ths; thsst tmpsst; thdata * tmpdata; thsurvey * tmpsurvey; pos2strmap svxpos2ths; pos2strmap::iterator p2si; thimgshotlist shotlist; thimgshotlist::iterator sli; unsigned long notimpst = 0, notimpsh = 0; // postup - prebehneme subor, vytvorime zoznam shotov, // popridavame fixne body spolu s atributmi ak existuju a vytvarame // oba heshe // nakoniec pridame shots // thprintf("\n\n"); img_point imgpt; img_errcode imgerr; int result; char * args [4], * stnm, a0[32], a1[32], a2[32], a3[32]; args[0] = a0; args[1] = a1; args[2] = a2; args[3] = a3; size_t filterl = 0; if (this->filter != NULL) filterl = strlen(this->filter); thbuffer n1, n2; thbuffer xb, yb, zb; xb.guarantee(128); yb.guarantee(128); zb.guarantee(128); std::string orig_name, new_name; img* pimg = img_open(this->fname); if (pimg == NULL) { imgerr = img_error(); ththrow(("unable to open file %s, error code: %u", this->fname, imgerr)) } do { result = img_read_item(pimg, &imgpt); switch (result) { case img_MOVE: tmpshot.fx = imgpt.x; tmpshot.fy = imgpt.y; tmpshot.fz = imgpt.z; break; case img_LINE: tmpshot.tx = imgpt.x; tmpshot.ty = imgpt.y; tmpshot.tz = imgpt.z; tmpshot.flags = pimg->flags; shotlist.insert(shotlist.end(), tmpshot); tmpshot.fx = tmpshot.tx; tmpshot.fy = tmpshot.ty; tmpshot.fz = tmpshot.tz; break; case img_LABEL: // vlozime fix station stnm = pimg->label; if ((filterl > 0) && (strncmp(stnm, this->filter, filterl) == 0)) { stnm = &stnm[filterl]; while ((*stnm != 0) && (*stnm == pimg->separator)) { stnm++; } } orig_name = stnm; if (strlen(stnm) < 1) break; if (svxs2ths.find(orig_name) == svxs2ths.end()) { sprintf(xb.get_buffer(), "%.16g", imgpt.x + this->calib_x); sprintf(yb.get_buffer(), "%.16g", imgpt.y + this->calib_y); sprintf(zb.get_buffer(), "%.16g", imgpt.z + this->calib_z); tmpsurvey = this->db->csurveyptr; new_name = this->station_name(stnm, pimg->separator, &tmpsst); // thprintf("%s -> %s\n", pimg->label, new_name.c_str()); tmpdata = NULL; if (tmpsst.survey != NULL) { n1 = tmpsst.name.c_str(); n2 = tmpsst.name.c_str(); tmpdata = tmpsst.survey->data; this->db->csurveyptr = tmpsst.survey; } else { n1 = new_name.c_str(); n2 = new_name.c_str(); if (this->fsptr != NULL) tmpdata = this->fsptr->data; else { notimpst++; // do not import station break; } } tmppos.x = imgpt.x; tmppos.y = imgpt.y; tmppos.z = imgpt.z; tmpsst.fullname = new_name; svxpos2ths[tmppos] = tmpsst; svxs2ths[orig_name] = new_name; args[1] = xb.get_buffer(); args[2] = yb.get_buffer(); args[3] = zb.get_buffer(); args[0] = n1.get_buffer(); tmpdata->cs = this->cs; tmpdata->set_data_fix(4, args); // ak bude entrance, vlozi aj station if ((pimg->flags & img_SFLAG_ENTRANCE) != 0) { args[0] = n2.get_buffer(); args[1] = strcpy(a1, ""); args[2] = strcpy(a2, "entrance"); tmpdata->set_data_station(3, args, TT_UTF_8); } if ((pimg->flags & img_SFLAG_FIXED) == 0) { args[0] = n2.get_buffer(); args[1] = strcpy(a1, ""); args[2] = strcpy(a2, "not"); args[3] = strcpy(a3, "fixed"); tmpdata->set_data_station(4, args, TT_UTF_8); } this->db->csurveyptr = tmpsurvey; } break; case img_BAD: img_close(pimg); ththrow(("invalid file format")) break; } } while (result != img_STOP); img_close(pimg); if (notimpst > 0) { thwarning(("unable to import %d stations outside survey", notimpst)); } thsurvey * s1survey, * s2survey; long s1slevel, s2slevel, maxlevel, i, j; thsst s1s, s2s; // nakoniec povklada shoty for(sli = shotlist.begin(); sli != shotlist.end(); sli++) { tmppos.x = sli->fx; tmppos.y = sli->fy; tmppos.z = sli->fz; p2si = svxpos2ths.find(tmppos); if (p2si == svxpos2ths.end()) continue; s1s = p2si->second; tmppos.x = sli->tx; tmppos.y = sli->ty; tmppos.z = sli->tz; p2si = svxpos2ths.find(tmppos); if (p2si == svxpos2ths.end()) continue; s2s = p2si->second; tmpsurvey = this->db->csurveyptr; tmpdata = NULL; // find survey levels s1slevel = 0; s1survey = s1s.survey; while (s1survey != NULL) { s1survey = s1survey->fsptr; s1slevel++; } s2slevel = 0; s2survey = s2s.survey; while (s2survey != NULL) { s2survey = s2survey->fsptr; s2slevel++; } maxlevel = s1slevel; if (s2slevel < maxlevel) maxlevel = s2slevel; // try from max to min level for (i = maxlevel; i > 0; i--) { // find survey at i s1survey = s1s.survey; n1 = s1s.name.c_str(); for (j = s1slevel; j > i; j--) { if (j == s1slevel) n1 += "@"; else n1 += "."; n1 += s1survey->name; s1survey = s1survey->fsptr; } s2survey = s2s.survey; n2 = s2s.name.c_str(); for (j = s2slevel; j > i; j--) { if (j == s2slevel) n2 += "@"; else n2 += "."; n2 += s2survey->name; s2survey = s2survey->fsptr; } if (s1survey->id == s2survey->id) { this->db->csurveyptr = s1survey; tmpdata = s1survey->data; break; } } if (tmpdata == NULL) { if (this->fsptr != NULL) tmpdata = this->fsptr->data; else { notimpsh++; // do not import continue; } // tmpdata = this->data; n1 = s1s.fullname.c_str(); n2 = s2s.fullname.c_str(); } // thprintf("%s - %s = %s - %s in %s\n", s1s.fullname.c_str(), s2s.fullname.c_str(), n1.get_buffer(), n2.get_buffer(), tmpdata->fsptr->full_name); args[0] = strcpy(a0, "nosurvey"); args[1] = strcpy(a1, "from"); args[2] = strcpy(a2, "to"); tmpdata->set_data_data(3,args); args[0] = n1.get_buffer(); args[1] = n2.get_buffer(); tmpdata->d_flags = TT_LEGFLAG_NONE; if ((sli->flags & img_FLAG_SURFACE) != 0) { tmpdata->d_flags |= TT_LEGFLAG_SURFACE; } if ((sli->flags & img_FLAG_DUPLICATE) != 0) { tmpdata->d_flags |= TT_LEGFLAG_DUPLICATE; } tmpdata->insert_data_leg(2, args); this->db->csurveyptr = tmpsurvey; } if (notimpsh > 0) { thwarning(("unable to import %d shots outside survey", notimpsh)); } } void thimport::parse_calib(char * spec, int enc) { thmbuffer * mb; char ** args; mb = &this->db->mbuff_tmp; thsplit_args(mb, spec); args = mb->get_buffer(); double v[6]; int sv, i; if (mb->get_size() != 6) ththrow(("invalid import calibration -- \"%s\"", spec)); for(i = 0; i < 6; i++) { thparse_double(sv, v[i], args[i]); if (sv != TT_SV_NUMBER) ththrow(("invalid number -- %s", args[i])) } this->calib_x = v[3] - v[0]; this->calib_y = v[4] - v[1]; this->calib_z = v[5] - v[2]; } therion/thimport.h0000644000076400010400000000773710721450262015321 0ustar userAdministrators/** * @file thimport.h * import module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thimport_h #define thimport_h #include "thdataobject.h" /** * import command options tokens. */ enum { TT_IMPORT_UNKNOWN = 2000, TT_IMPORT_FORMAT = 2001, TT_IMPORT_FILTER = 2002, TT_IMPORT_SURVEYS = 2003, TT_IMPORT_CALIB = 2004, }; /** * import command options parsing table. */ static const thstok thtt_import_opt[] = { {"calibrate", TT_IMPORT_CALIB}, {"filter", TT_IMPORT_FILTER}, {"fmt", TT_IMPORT_FORMAT}, {"format", TT_IMPORT_FORMAT}, {"surveys", TT_IMPORT_SURVEYS}, {NULL, TT_IMPORT_UNKNOWN}, }; enum { TT_IMPORT_FMT_UNKNOWN, TT_IMPORT_FMT_3D, TT_IMPORT_FMT_PLT, TT_IMPORT_FMT_XYZ, }; /** * import types parsing table. */ static const thstok thtt_import_fmts[] = { {"3d", TT_IMPORT_FMT_3D}, {"plt", TT_IMPORT_FMT_PLT}, {"xyz", TT_IMPORT_FMT_XYZ}, {NULL, TT_IMPORT_FMT_UNKNOWN}, }; enum { TT_IMPORT_SURVEYS_UNKNOWN, TT_IMPORT_SURVEYS_CREATE, TT_IMPORT_SURVEYS_USE, TT_IMPORT_SURVEYS_IGNORE, }; /** * import types parsing table. */ static const thstok thtt_import_surveys[] = { {"create", TT_IMPORT_SURVEYS_CREATE}, {"ignore", TT_IMPORT_SURVEYS_IGNORE}, {"use", TT_IMPORT_SURVEYS_USE}, {NULL, TT_IMPORT_SURVEYS_UNKNOWN}, }; /** * import class. */ class thimport : public thdataobject { public: // insert here real properties int format, surveys; const char * fname, * filter; thobjectsrc mysrc; double calib_x, calib_y, calib_z; /** * Standard constructor. */ thimport(); /** * Standard destructor. */ virtual ~thimport(); /** * Return class identifier. */ virtual int get_class_id(); /** * Return class name. */ virtual const char * get_class_name() {return "thimport";}; /** * Return true, if son of given class. */ virtual bool is(int class_id); /** * Return number of command arguments. */ virtual int get_cmd_nargs(); /** * Return command name. */ virtual const char * get_cmd_name(); /** * Return command end option. */ virtual const char * get_cmd_end(); /** * Return option description. */ virtual thcmd_option_desc get_cmd_option_desc(const char * opts); /** * Set command option. * * @param cod Command option description. * @param args Option arguments arry. * @param argenc Arguments encoding. */ virtual void set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline); /** * Delete this object. * * @warn Always use this methos instead of delete function. */ virtual void self_delete(); /** * Get context for object. */ virtual int get_context(); /** * Print object properties. */ virtual void self_print_properties(FILE * outf); void set_file_name(char * fnm); void import_file(); void import_file_img(); void parse_calib(char * spec, int enc); const char * station_name(const char * sn, const char separator, struct thsst * sst); }; #endif therion/thinfnan.cxx0000644000076400010400000000206610625655142015630 0ustar userAdministrators/** * @file thinfnan.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thinfnan.h" void thnan_update(double & oval, double uval) { if (thisnan(oval)) oval = uval; } therion/thinfnan.h0000644000076400010400000000535010625655142015254 0ustar userAdministrators/** * @file thinfnan.h * Therion number constants. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thinfnan_h #define thinfnan_h #include // nan handling #ifdef NAN #ifdef THLINUX #define thnan NAN #define thisnan isnan #else #define thnan -9e99 #define thisnan(number) (number == thnan) #endif #else #define thnan -9e99 #define thisnan(number) (number == thnan) #endif // infinity handling #ifdef INFINITY #ifdef THLINUX #define thinf INFINITY #define thisinf isinf #else #define thinf 1e100 #define thisinf(number) (number >= thinf ? 1 : (number <= -thinf ? -1 : 0)) #endif #else #define thinf 1e100 #define thisinf(number) (number >= thinf ? 1 : (number <= -thinf ? -1 : 0)) #endif /** * Update double variable if nan. * * @param oval Original value * @param uval Update value */ void thnan_update(double & oval, double uval); /** * A inf nan printing macro. * * -Inf -> -999.999 * Inf -> 999.999 * NaN -> 1000.0001 */ #define thinn(cislo) (thisnan(cislo) ? 1000.0001 : \ (thisinf(cislo) == 1 ? 999.999 : \ (thisinf(cislo) == -1 ? -999.999 : cislo))) // infnan.h #endif /** * Print number in nan format. */ #define thprintinfnan(cislo) {\ if (thisnan(cislo)) \ thprintf("thnan"); \ else if (thisinf(cislo) == 1) \ thprintf("thinf"); \ else if (thisinf(cislo) == -1) \ thprintf("-thinf"); \ else \ thprintf("%lg",cislo);} #define THPI 3.1415926535898 #define thnanpow2(cislo) ((thisnan(cislo) ? 0.0 : cislo) * (thisnan(cislo) ? 0.0 : cislo)) #define thdxyz2length(dx,dy,dz) (sqrt(thnanpow2(dx) + thnanpow2(dy) + thnanpow2(dz))) #define thdxyz2b(dx,dy,dz) (270 - (atan2(dy,dx) / THPI * 180.0 + 180)) #define thdxyz2bearing(dx,dy,dz) (thdxyz2b(dx,dy,dz) < 0.0 ? thdxyz2b(dx,dy,dz) + 360.0 : thdxyz2b(dx,dy,dz)) #define thdxyz2clino(dx,dy,dz) (atan2(dz,sqrt(thnanpow2(dx) + thnanpow2(dy))) / THPI * 180.0) therion/thinit.cxx0000644000076400010400000004076411547602522015327 0ustar userAdministrators/** * @file thinit.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thinit.h" #include "thparse.h" #include "thchenc.h" #include "therion.h" #include "thconfig.h" #include "thexception.h" #include "thtexfonts.h" #include "thlang.h" #include "thlocale.h" #include "thtmpdir.h" #include "thcs.h" #ifdef THWIN32 #include #endif #ifdef THMSVC #define snprintf _snprintf #define strcasecmp _stricmp #endif const char * THCCC_INIT_FILE = "### Output character encodings ###\n" "# encoding-default ASCII\n" "# encoding-sql ASCII\n\n" "### Default regional settings ###\n" "# language en_UK\n" "# units metric\n\n" "### Prefered loop closure method\n" "# loop-closure survex\n\n" "### Paths to called executable files ###\n" "# mpost-path \"mpost\"\n" "# mpost-options \"-tex=etex\"\n" "# pdftex-path \"pdfetex\"\n" "# cavern-path \"cavern\"\n" "# convert-path \"convert\"\n" "# identify-path \"identify\"\n\n" "### Search paths for source and configuration files ###\n" "# source-path \"\"\n\n" "### Tex initialization ###\n" "# tex-env off\n" "# tex-fonts \n" "# tex-fonts raw cmr10 cmti10 cmbx10 cmss10 cmssi10\n" "# tex-fonts xl2 csr10 csti10 csbx10 csss10 csssi10\n\n" "### PDF fonts initialization\n" "# otf2pfb off\n" "# pdf-fonts \n\n" "### Path to temporary directory ###\n" "# tmp-path \"\"\n\n" "### User defined coordinate system ###\n" "# cs-def [other options]\n\n" "### Command to remove temporary directory ###\n" "# tmp-remove \"\"\n\n"; thinit::thinit() { this->fonts_ok = false; this->tex_env = false; this->lang = THLANG_UNKNOWN; this->loopc = THINIT_LOOPC_UNKNOWN; } thinit::~thinit() { } enum { TTIC_ENCODING_DEFAULT, TTIC_ENCODING_SQL, TTIC_PATH_CAVERN, // TTIC_PATH_3DTOPOS, TTIC_PATH_CONVERT, TTIC_PATH_IDENTIFY, TTIC_PATH_MPOST, TTIC_OPT_MPOST, TTIC_PATH_PDFTEX, TTIC_PATH_SOURCE, TTIC_TMP_PATH, TTIC_TMP_REMOVE_SCRIPT, TTIC_LANG, TTIC_TEX_FONTS, TTIC_TEX_ENV, TTIC_UNITS, TTIC_LOOPC, TTIC_TEXT, TTIC_PDF_FONTS, TTIC_OTF2PFB, TTIC_CS_DEF, TTIC_UNKNOWN, }; /** * Data types parsing table. */ static const thstok thtt_initcmd[] = { {"cavern-path", TTIC_PATH_CAVERN}, {"convert-path", TTIC_PATH_CONVERT}, {"cs-def", TTIC_CS_DEF}, {"encoding-default", TTIC_ENCODING_DEFAULT}, {"encoding-sql", TTIC_ENCODING_SQL}, // {"encoding_default", TTIC_ENCODING_DEFAULT}, // {"path_3dtopos", TTIC_PATH_3DTOPOS}, {"identify-path", TTIC_PATH_IDENTIFY}, {"language", TTIC_LANG}, {"loop-closure", TTIC_LOOPC}, {"mpost-options", TTIC_OPT_MPOST}, {"mpost-path", TTIC_PATH_MPOST}, {"otf2pfb", TTIC_OTF2PFB}, {"pdf-fonts", TTIC_PDF_FONTS}, {"pdftex-path", TTIC_PATH_PDFTEX}, {"source-path", TTIC_PATH_SOURCE}, {"tex-env",TTIC_TEX_ENV}, {"tex-fonts",TTIC_TEX_FONTS}, {"text",TTIC_TEXT}, {"tmp-path",TTIC_TMP_PATH}, {"tmp-remove",TTIC_TMP_REMOVE_SCRIPT}, {"units",TTIC_UNITS}, {NULL, TTIC_UNKNOWN}, }; void thinit__print_open(char * s) { #ifdef THDEBUG thprintf("\ninitialization file: %s\nreading\n", s); #else thprintf("initialization file: %s\n", s); thprintf("reading ..."); thtext_inline = true; #endif } static const thstok thtt_loopc[] = { {"survex", THINIT_LOOPC_SURVEX}, {"therion", THINIT_LOOPC_THERION}, {NULL, THINIT_LOOPC_UNKNOWN}, }; #ifdef THWIN32 thbuffer short_path_buffer; void thinit__make_short_path(thbuffer * bf) { DWORD rv; size_t sl; sl = strlen(bf->get_buffer()); if (sl == 0) return; short_path_buffer.guarantee(2 * sl); rv = GetShortPathName(bf->get_buffer(), short_path_buffer.get_buffer(), (DWORD) short_path_buffer.size); if ((rv > 0) && (rv < (DWORD) short_path_buffer.size)) { bf->strcpy(short_path_buffer.get_buffer()); } } #endif void thinit::copy_fonts() { if (ENC_NEW.NFSS == 0) return; static thbuffer tmpb; int retcode; if (fonts_ok) return; thprintf("copying_fonts ...\n"); for(int index = 0; index < 5; index++) { thprintf("%s\n", font_dst[index].c_str()); // skopiruje font subor #ifdef THWIN32 tmpb = "copy \""; #else tmpb = "cp \""; #endif tmpb += font_src[index].c_str(); tmpb += "\" \""; tmpb += thtmp.get_file_name(font_dst[index].c_str()); tmpb += "\""; #ifdef THWIN32 char * cpcmd; size_t cpch; cpcmd = tmpb.get_buffer(); for(cpch = 0; cpch < strlen(cpcmd); cpch++) { if (cpcmd[cpch] == '/') { cpcmd[cpch] = '\\'; } } #endif #ifdef THDEBUG thprintf("copying font\n"); #endif retcode = system(tmpb.get_buffer()); if (retcode != EXIT_SUCCESS) ththrow(("unable to copy font file -- %s", font_src[index].c_str())) } #ifdef THWIN32 FILE * f = fopen(thtmp.get_file_name("pltotf.bat"),"w"); fprintf(f,"@\"%s\\bin\\win32\\pltotf.exe\" %%1 %%2\n",thcfg.install_path.get_buffer()); fclose(f); f = fopen(thtmp.get_file_name("cfftot1.bat"),"w"); fprintf(f,"@\"%s\\bin\\win32\\cfftot1.exe\" %%1 %%2 %%3 %%4 %%5 %%6 %%7 %%8 %%9\n",thcfg.install_path.get_buffer()); fclose(f); #endif thprintf("done.\n"); fonts_ok = true; } int thinit::get_lang() { return thlang_getlang(this->lang); } void thinit::check_font_path(const char * fname, int index) { static thbuffer pfull, pshort, tmpb; pshort.strcpy(""); pfull.strcpy(""); long i, l; tmpb = fname; char * buff = tmpb.get_buffer(); l = (long) strlen(buff); bool search_sn = true; if (l == 0) ththrow(("missing font file name")); for(i = (l-1); i >= 0; i--) { if ((buff[i] == '/') || (buff[i] == '\\')) { if (search_sn) { pshort.strcpy(&(buff[i+1])); search_sn = false; } buff[i] = '/'; } } if (strlen(pshort.get_buffer()) == 0) ththrow(("invalid font name -- %s", fname)) if ( #ifdef THWIN32 ((l > 1) && (buff[1] == ':')) || #endif (buff[0] == '/')) { pfull.strcpy(buff); } else { if (strlen(this->ini_file.get_cif_path()) > 0) { pfull.strcpy(this->ini_file.get_cif_path()); pfull += "/"; } else { pfull = ""; } pfull += buff; } // checkne ci TTF if ((l > 3) && (strcasecmp(&(buff[l-4]), ".ttf")) == 0) ENC_NEW.t1_convert = 0; font_src[index] = pfull.get_buffer(); font_dst[index] = pshort.get_buffer(); ENC_NEW.otf_file[index] = pshort.get_buffer(); } void thinit::load() { // set encodings this->encoding_default = TT_ASCII; this->encoding_sql = TT_UNKNOWN_ENCODING; ENC_NEW.NFSS = 0; ENC_NEW.t1_convert = 1; this->opt_mpost = ""; // set programs paths this->path_cavern = "cavern"; #ifdef THWIN32 // set cavern path according to Windows registers this->path_cavern.guarantee(1024); thmbuffer mbf; thbuffer bf; DWORD type(0), length = 1024; HKEY key; bool loaded_ok = true; if (RegOpenKey(HKEY_CLASSES_ROOT,"survex.source\\shell\\Process\\command",&key) != ERROR_SUCCESS) loaded_ok = false; if (!loaded_ok || (RegQueryValueEx(key,NULL,NULL,&type,(BYTE *)this->path_cavern.get_buffer(),&length) != ERROR_SUCCESS)) { loaded_ok = false; RegCloseKey(key); } if (loaded_ok) RegCloseKey(key); if (type != REG_SZ) loaded_ok = false; if (loaded_ok) { thsplit_args(&mbf,this->path_cavern.get_buffer()); this->path_cavern = *(mbf.get_buffer()); } else { this->path_cavern = "cavern"; } #endif // try running survex if (this->loopc == THINIT_LOOPC_UNKNOWN) { thbuffer svxcom; svxcom = "\""; svxcom += thini.get_path_cavern(); svxcom += "\" --version"; #ifdef THDEBUG thprintf("testing cavern\n"); #endif if (system(svxcom.get_buffer()) == EXIT_SUCCESS) { this->loopc = THINIT_LOOPC_SURVEX; } else { this->loopc = THINIT_LOOPC_THERION; } } // this->path_3dtopos = "3dtopos"; #ifdef THWIN32 if (thcfg.install_tex) { this->path_mpost = thcfg.install_path.get_buffer(); this->path_pdftex = thcfg.install_path.get_buffer(); this->path_otftotfm = thcfg.install_path.get_buffer(); this->path_mpost += "\\bin\\win32\\mpost.exe"; this->path_pdftex += "\\bin\\win32\\pdfetex.exe"; this->path_otftotfm += "\\bin\\win32\\otftotfm.exe"; } else { #endif this->path_mpost = "mpost"; this->path_pdftex = "pdfetex"; this->path_otftotfm = "otftotfm"; #ifdef THWIN32 } #endif #ifdef THWIN32 if (thcfg.install_im) { this->path_convert = thcfg.install_path.get_buffer(); this->path_convert += "\\bin\\convert.exe"; this->path_identify = thcfg.install_path.get_buffer(); this->path_identify += "\\bin\\identify.exe"; } else { #endif this->path_convert = "convert"; this->path_identify = "identify"; #ifdef THWIN32 } #endif this->tmp_path = ""; this->tmp_remove_script = ""; this->lang = THLANG_UNKNOWN; char * cmdln; char ** args; int nargs, argid, sv; //, argid2; fontrecord frec; bool some_tex_fonts = false, started = false; this->ini_file.set_search_path(thcfg.get_initialization_path()); this->ini_file.set_file_name("therion.ini"); this->ini_file.sp_scan_on(); this->ini_file.cmd_sensitivity_off(); this->ini_file.print_if_opened(thinit__print_open, &started); this->ini_file.reset(); try { while((cmdln = this->ini_file.read_line()) != NULL) { thsplit_args(& this->cmb, cmdln); args = this->cmb.get_buffer(); nargs = this->cmb.get_size(); argid = thmatch_token(args[0], thtt_initcmd); // check number of arguments: switch (argid) { case TTIC_ENCODING_DEFAULT: case TTIC_PATH_CAVERN: case TTIC_PATH_CONVERT: case TTIC_PATH_IDENTIFY: case TTIC_LOOPC: case TTIC_TMP_PATH: case TTIC_LANG: case TTIC_UNITS: case TTIC_TMP_REMOVE_SCRIPT: case TTIC_PATH_MPOST: case TTIC_OPT_MPOST: case TTIC_PATH_PDFTEX: case TTIC_PATH_SOURCE: case TTIC_OTF2PFB: case TTIC_TEX_ENV: if (nargs != 2) ththrow(("invalid number of command arguments")); break; case TTIC_TEXT: if (nargs != 4) ththrow(("invalid text syntax -- should be: text ")) break; case TTIC_PDF_FONTS: if (nargs != 6) ththrow(("invalid number of command arguments")); break; case TTIC_TEX_FONTS: if (nargs != 7) ththrow(("invalid number of command arguments")); break; case TTIC_CS_DEF: if (nargs < 2) ththrow(("invalid cs-def syntax -- should be: cs-def [other options]")) break; default: ththrow(("invalid initialization command -- %s", args[0])) } switch(argid) { case TTIC_CS_DEF: thcs_add_cs(args[1], args[2], nargs - 2, &(args[3])); break; case TTIC_ENCODING_DEFAULT: this->encoding_default = thparse_encoding(args[1]); break; case TTIC_ENCODING_SQL: this->encoding_sql = thparse_encoding(args[1]); break; case TTIC_PATH_CAVERN: if (strlen(args[1]) < 1) ththrow(("invalid path")) this->path_cavern.strcpy(args[1]); break; case TTIC_PATH_CONVERT: if (strlen(args[1]) < 1) ththrow(("invalid path")) this->path_convert.strcpy(args[1]); break; case TTIC_PATH_IDENTIFY: if (strlen(args[1]) < 1) ththrow(("invalid path")) this->path_identify.strcpy(args[1]); break; case TTIC_TMP_PATH: this->tmp_path.strcpy(args[1]); break; case TTIC_LANG: this->lang = thlang_parse(args[1]); if (this->lang == THLANG_UNKNOWN) ththrow(("language not supported -- %s",args[1])) break; case TTIC_UNITS: thdeflocale.parse_units(args[1]); break; case TTIC_OTF2PFB: sv = thmatch_token(args[1], thtt_bool); if (sv == TT_UNKNOWN_BOOL) ththrow(("invalid otf2pfb switch -- %s", args[1])) ENC_NEW.t1_convert = (sv == TT_TRUE); break; case TTIC_TEXT: thlang_set_translation(args[1], args[2], args[3]); break; case TTIC_TMP_REMOVE_SCRIPT: this->tmp_remove_script.strcpy(args[1]); break; case TTIC_PATH_MPOST: if (strlen(args[1]) < 1) ththrow(("invalid path")) this->path_mpost.strcpy(args[1]); break; case TTIC_OPT_MPOST: this->opt_mpost.strcpy(args[1]); break; case TTIC_PATH_PDFTEX: if (strlen(args[1]) < 1) ththrow(("invalid path")) this->path_pdftex.strcpy(args[1]); break; case TTIC_PATH_SOURCE: thcfg.set_search_path(args[1]); break; case TTIC_TEX_FONTS: frec.id = get_enc_id(args[1]); if (frec.id < 0) ththrow(("tex encoding not supported -- %s", args[1])) frec.rm = args[2]; frec.it = args[3]; frec.bf = args[4]; frec.ss = args[5]; frec.si = args[6]; FONTS.push_back(frec); some_tex_fonts = true; break; case TTIC_PDF_FONTS: // TODO: parsne nazvy suborov, nastavi t1_convert, ENC_NEW.NFSS = 1; check_font_path(args[1], 0); check_font_path(args[2], 1); check_font_path(args[3], 2); check_font_path(args[4], 3); check_font_path(args[5], 4); break; case TTIC_TEX_ENV: sv = thmatch_token(args[1], thtt_bool); if (sv == TT_UNKNOWN_BOOL) ththrow(("invalid tex-env switch -- %s", args[1])) this->tex_env = (sv == TT_TRUE); break; case TTIC_LOOPC: sv = thmatch_token(args[1], thtt_loopc); if (sv == THINIT_LOOPC_UNKNOWN) ththrow(("invalid loop-closure switch -- %s", args[1])) this->loopc = sv; break; default: ththrow(("invalid initialization command -- %s", args[0])) } } } catch (...) threthrow(("%s [%d]", this->ini_file.get_cif_name(), this->ini_file.get_cif_line_number())) if (started) { #ifdef THDEBUG thprintf("\n"); #else thprintf(" done\n"); thtext_inline = false; #endif } if (!some_tex_fonts) init_encodings(); #ifdef THWIN32 thinit__make_short_path(&this->path_cavern); thinit__make_short_path(&this->path_convert); thinit__make_short_path(&this->path_identify); thinit__make_short_path(&this->path_mpost); thinit__make_short_path(&this->path_pdftex); #endif } char * thinit::get_path_cavern() { return this->path_cavern.get_buffer(); } char * thinit::get_path_convert() { return this->path_convert.get_buffer(); } char * thinit::get_path_identify() { return this->path_identify.get_buffer(); } //char * thinit::get_path_3dtopos() //{ // return this->path_3dtopos.get_buffer(); //} char * thinit::get_path_mpost() { return this->path_mpost.get_buffer(); } char * thinit::get_opt_mpost() { return this->opt_mpost.get_buffer(); } char * thinit::get_path_pdftex() { return this->path_pdftex.get_buffer(); } char * thinit::get_path_otftotfm() { return this->path_otftotfm.get_buffer(); } void thprint_init_file() { thprintf(THCCC_INIT_FILE); } int thinit::get_encoding(int type) { int res; switch (type) { case THINIT_ENCODING_SQL: res = this->encoding_sql; break; default: res = this->encoding_default; break; } if (res == TT_UNKNOWN_ENCODING) res = this->encoding_default; return res; } thinit thini; therion/thinit.h0000644000076400010400000000562711211745324014747 0ustar userAdministrators/** * @file thinit.h * Initialization class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thinit_h #define thinit_h #include #include "thbuffer.h" #include "thmbuffer.h" #include "thinput.h" /** * Therion system dependend properties initializer. */ enum { THINIT_ENCODING_DEFAULT, THINIT_ENCODING_SQL, }; enum { THINIT_LOOPC_UNKNOWN = 0, THINIT_LOOPC_THERION, THINIT_LOOPC_SURVEX, }; class thinit { public: int encoding_default, encoding_sql; ///< Default encoding. thbuffer path_cavern, ///< Survex executable full path. path_pdftex, path_mpost, ///< PDF tex and metapost path opt_mpost, path_otftotfm, path_convert, path_identify, ///< Path to ImageMagick convert and identify executables. tmp_path, tmp_remove_script; //path_3dtopos, std::string font_src[5], font_dst[5]; bool tex_env, fonts_ok; int lang, loopc; thmbuffer cmb; ///< Command parsing mbuffer. thinput ini_file; ///< Initialization file. /** * Standard constructor. */ thinit(); /** * Destructor. */ ~thinit(); /** * Load initialization file. */ void load(); /** * Copy fonts to temporary folder. */ void copy_fonts(); /** * Return cavern executable path. */ char * get_path_cavern(); /** * Return ImageMagick convert executable path. */ char * get_path_convert(); /** * Return ImageMagick identify executable path. */ char * get_path_identify(); /** * Return metapost options. */ char * get_opt_mpost(); /** * Return metapost executable path. */ char * get_path_mpost(); char * get_path_otftotfm(); /** * Return pdftex executable path. */ char * get_path_pdftex(); int get_lang(); void check_font_path(const char * fname, int index); int get_encoding(int type = THINIT_ENCODING_DEFAULT); }; /** * Print initialization file. */ void thprint_init_file(); /** * Initialization module. */ extern thinit thini; #endif therion/thinput.cxx0000644000076400010400000002766110750024754015524 0ustar userAdministrators/** * @file thinput.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thinput.h" #include "thparse.h" #include "thchenc.h" #include "therion.h" #include "thexception.h" #define THMAXFREC 64 const long thinput::max_line_size = 8128; enum {TT_UNKNOWN_INPUT, TT_INPUT, TT_ENCODING}; static const thstok thtt_input[] = { {"encoding", TT_ENCODING}, {"input", TT_INPUT}, {NULL, TT_UNKNOWN_INPUT} }; thinput::ifile::ifile(ifile * fp) { this->lnumber = 0; this->encoding = TT_UTF_8; this->prev_ptr = fp; this->next_ptr = NULL; } thinput::ifile::~ifile() { this->close(); if (this->next_ptr != NULL) delete this->next_ptr; } void thinput::ifile::close() { if (this->sh.is_open()) { this->sh.close(); this->sh.clear(); this->lnumber = 0; } } bool thinput::ifile::is_equal( #ifdef THMSVC struct _stat #else struct stat #endif * buf) { if ((this->st.st_ino == buf->st_ino) && \ (this->st.st_dev == buf->st_dev)) return true; else return false; } thinput::thinput() { this->cmd_sensitivity = true; this->input_sensitivity = true; this->scan_search_path = false; this->first_ptr = new ifile(NULL); this->last_ptr = this->first_ptr; this->lnbuffer = new char [thinput::max_line_size]; this->pifo = false; this->pifoid = NULL; this->pifoproc = NULL; this->report_missing = false; } thinput::~thinput() { delete this->first_ptr; delete this->lnbuffer; } void thinput::set_cmd_sensitivity(bool cs) { this->cmd_sensitivity = cs; if (!cs) { this->cmdbf = ""; this->valuebf = ""; } } void thinput::cmd_sensitivity_on() { this->cmd_sensitivity = true; } void thinput::cmd_sensitivity_off() { this->cmd_sensitivity = false; this->cmdbf = ""; this->valuebf = ""; } bool thinput::get_cmd_sensitivity() { return this->cmd_sensitivity; } void thinput::set_sp_scan(bool spss) { this->scan_search_path = spss; } void thinput::sp_scan_on() { this->scan_search_path = true; } void thinput::sp_scan_off() { this->scan_search_path = false; } bool thinput::get_sp_scan() { return this->scan_search_path; } void thinput::set_file_name(const char * fname) { this->file_name = fname; } char * thinput::get_file_name() { return this->file_name; } void thinput::set_search_path(const char * spath) { this->search_path.clear(); #ifdef THWIN32 thsplit_paths(& this->search_path, spath, ';'); #else thsplit_paths(& this->search_path, spath, ':'); #endif } void thinput::set_file_suffix(const char * fsx) { this->file_suffix.clear(); thsplit_strings(& this->file_suffix, fsx, ':'); } void thinput::open_file(char * fname) { char * srcfile = NULL; if (this->last_ptr->sh.is_open()) srcfile = this->last_ptr->name; // as first, let's find appropriate ifile ifile * ifptr; ifptr = this->last_ptr; while (ifptr->sh.is_open() && (ifptr->next_ptr != NULL)) ifptr = ifptr->next_ptr; if (ifptr->sh.is_open() && (ifptr->next_ptr == NULL)) { ifptr->next_ptr = new ifile(ifptr); ifptr = ifptr->next_ptr; } // now, let's open the file // first let's set the path to source file path if (srcfile != NULL) thsplit_fpath(&ifptr->path, srcfile); else ifptr->path = ""; int ix = -1; long paths = this->search_path.get_size(), sfxid, sfxs = this->file_suffix.get_size(); char ** sfx = this->file_suffix.get_buffer(); char ** pths = this->search_path.get_buffer(); size_t ifptr_psz; char ifptr_plc; while ((!ifptr->sh.is_open()) && (ix < paths)) { // let's try the name without suffixes ifptr_psz = strlen(ifptr->path.get_buffer()); ifptr_plc = (ifptr_psz > 0 ? ifptr->path.get_buffer()[ifptr_psz-1] : 0); if (ifptr_psz > 0) { ifptr->name = ifptr->path; if (ifptr_plc != '/') ifptr->name += "/"; ifptr->name += fname; } else ifptr->name = fname; ifptr->sh.clear(); ifptr->sh.open(ifptr->name); //, ios::in | ios::nocreate // if not successful, try with suffixes sfxid = 0; while ((!ifptr->sh.is_open()) && (sfxid < sfxs)) { if (ifptr_psz > 0) { ifptr->name = ifptr->path; if (ifptr_plc != '/') ifptr->name += "/"; ifptr->name += fname; } else ifptr->name = fname; ifptr->name += sfx[sfxid]; ifptr->sh.clear(); ifptr->sh.open(ifptr->name); //, ios::in | ios::nocreate sfxid++; } // if still no success, try with search path ix++; if (ix < paths) ifptr->path = pths[ix]; } // if file was open, now let's try if not recursive inclusion ifile * tmptr; bool is_rec = false; unsigned int n_rec = 0; if (!ifptr->sh.is_open()) { if ((srcfile != NULL) || (this->report_missing)) { ththrow(("can't open file for input -- %s", \ fname)); } } else { #ifdef THMSVC _stat #else stat #endif (ifptr->name.get_buffer(), &ifptr->st); tmptr = ifptr->prev_ptr; #ifdef THWIN32 while ((tmptr != NULL) && (n_rec < THMAXFREC)) { #else while ((tmptr != NULL) && !is_rec) { #endif is_rec = is_rec || tmptr->is_equal(&ifptr->st); tmptr = tmptr->prev_ptr; n_rec++; } #ifdef THWIN32 if (n_rec == THMAXFREC) { therror(("%s [%d] -- too many file inclusions -- probably input recursion -- %s", \ this->get_cif_name(), this->get_cif_line_number(), fname)); } #else if (is_rec) { therror(("%s [%d] -- recursive file inclusion -- %s", \ this->get_cif_name(), this->get_cif_line_number(), fname)); } #endif else { this->last_ptr = ifptr; if (this->pifo) { if (this->pifoproc != NULL) this->pifoproc(ifptr->name.get_buffer()); if (this->pifoid != NULL) *(this->pifoid) = true; this->pifo = false; this->pifoid = NULL; this->pifoproc = NULL; } #ifdef THDEBUG thprintf("open file -- %s\n", this->last_ptr->name.get_buffer()); #endif } } } void thinput::close_file() { if (this->last_ptr->sh.is_open()) { #ifdef THDEBUG thprintf("close file -- %s\n", this->last_ptr->name.get_buffer()); #endif this->last_ptr->close(); if (this->last_ptr->prev_ptr != NULL) { this->last_ptr = this->last_ptr->prev_ptr; // Is next cmd it really like this ????? this->last_ptr->next_ptr = NULL; } } } void thinput::reset() { // first, let's close all open files ifile * iptr = this->first_ptr; while(iptr != NULL) { iptr->close(); iptr = iptr->next_ptr; } // set pointer to the first ifile this->last_ptr = this->first_ptr; this->open_file(this->file_name); } char * thinput::read_line() { int ln_state = 0; bool mline = false; long lnlen; //, idx; char * idxptr; while (ln_state == 0) { // first, check if any input available if (!this->last_ptr->sh.is_open()) { ln_state = -1; break; } // check eof state of last open file if (this->last_ptr->sh.eof()) { this->close_file(); continue; } // OK, we can read the line this->last_ptr->sh.getline(this->lnbuffer, thinput::max_line_size); this->last_ptr->lnumber++; // Check, if reading was OK. if (this->last_ptr->sh.fail() && (!(this->last_ptr->sh.eof()))) { therror(("%s [%d] -- line too long", \ this->get_cif_name(), this->get_cif_line_number())); } // now let's find last non white character lnlen = (long)strlen(this->lnbuffer); idxptr = this->lnbuffer + lnlen - 1; while ((lnlen > 0) && (*idxptr < 33)) { idxptr--; lnlen--; } // empty line read if ((lnlen == 0) && !mline) continue; // join backslash ended lines together if (*idxptr == '\\') { if (mline) { this->linebf.strncat(this->lnbuffer, lnlen - 1); } else { this->linebf.strncpy(this->lnbuffer, lnlen - 1); mline = true; } continue; } else { if (mline) this->linebf.strncat(this->lnbuffer, lnlen); else this->linebf.strncpy(this->lnbuffer, lnlen); } mline = false; // we've something regular in the linebf // split into cmd & value & interpret commands if (this->cmd_sensitivity) { thsplit_word(&this->cmdbf, &this->valuebf, this->linebf.get_buffer()); thsplit_args(&this->tmpmb, this->valuebf.get_buffer()); // check if comment if (*(this->cmdbf.get_buffer()) == '#') continue; // interpret commands switch (thmatch_token(this->cmdbf.get_buffer(), thtt_input)) { case TT_INPUT: if (this->input_sensitivity) { if (this->tmpmb.get_size() != 1) therror(("%s [%d] -- one input file name expected -- %s", \ this->get_cif_name(), this->get_cif_line_number(), \ this->valuebf.get_buffer())) else this->open_file(*(this->tmpmb.get_buffer())); } continue; case TT_ENCODING: if (this->tmpmb.get_size() != 1) therror(("%s [%d] -- encoding name expected -- %s", \ this->get_cif_name(), this->get_cif_line_number(), \ this->valuebf.get_buffer())); this->last_ptr->encoding = \ thmatch_token(*(this->tmpmb.get_buffer()), thtt_encoding); if (this->last_ptr->encoding == TT_UNKNOWN_ENCODING) { therror(("%s [%d] -- unknown encoding -- %s", \ this->get_cif_name(), this->get_cif_line_number(), \ this->valuebf.get_buffer())); this->last_ptr->encoding = TT_UTF_8; } continue; } // interpret commands } // otherwise check if comment else { idxptr = this->linebf.get_buffer(); lnlen = (long)strlen(idxptr); while ((lnlen > 0) && (*idxptr < 33)) { lnlen--; idxptr++; } if (*idxptr == '#') continue; } // no comment, no command ln_state = 1; } if (ln_state == 1) return this->linebf.get_buffer(); else return NULL; } char * thinput::get_cmd() { return this->cmdbf.get_buffer(); } char * thinput::get_line() { return this->linebf.get_buffer(); } char * thinput::get_value() { return this->valuebf.get_buffer(); } char * thinput::get_cif_name() { return this->last_ptr->name.get_buffer(); } char * thinput::get_cif_path() { static thbuffer cifpath; thsplit_fpath(&cifpath, this->last_ptr->name.get_buffer()); return cifpath.get_buffer(); } unsigned long thinput::get_cif_line_number() { return this->last_ptr->lnumber; } int thinput::get_cif_encoding() { return this->last_ptr->encoding; } void thinput::print_if_opened(void (* pifop)(char *), bool * printed) { this->pifo = true; if (printed != NULL) this->pifoid = printed; this->pifoproc = pifop; } void thinput::set_input_sensitivity(bool s) { this->input_sensitivity = s; } bool thinput::get_input_sensitivity() { return this->input_sensitivity; } bool thinput::is_first_file() { return ((this->first_ptr == NULL) || (this->first_ptr->next_ptr == NULL)); } therion/thinput.h0000644000076400010400000001346210721231100015122 0ustar userAdministrators/** * @file thinput.h * Input file processing class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thinput_h #define thinput_h #ifndef THMSVC #include #endif #include #include "thbuffer.h" #include "thmbuffer.h" #include "thparse.h" #include /** * Input file processing class. * * This class provides standard functions, that work with therion input * and configuration files. */ class thinput { public: bool cmd_sensitivity, ///< Command sensitivity ID. input_sensitivity, /// < Whether dive into subfiles. scan_search_path, ///< Whether to scan also search path for input files. pifo, ///< Print if open. * pifoid, ///< Identifier. report_missing; thbuffer file_name; ///< Main input file name. thmbuffer search_path, ///< Search paths. file_suffix, ///< File suffixes. tmpmb; ///< Temporary multi buffer. void (* pifoproc)(char *); ///< Function to call if file was opened. thbuffer linebf, ///< Line buffer. cmdbf, ///< Command buffer. valuebf; ///< Value buffer. static const long max_line_size; char * lnbuffer; /** * Therion input file structure. */ class ifile { public: std::ifstream sh; ///< file stream. thbuffer name, ///< Input file name buffer. path; ///< Input file path buffer. unsigned long lnumber; /// Position at the file. int encoding; /// Current file encoding. ifile * prev_ptr, /// Pointer to the upper file. * next_ptr; /// Pointer to the lower file. #ifdef THMSVC struct _stat st; #else struct stat st; #endif /** * Standard constructor. */ ifile(ifile * fp); /** * Standard destructor. * * Also release next files. */ ~ifile(); /** * Close file if it's open. */ void close(); /** * Check if file statistics are equal. */ bool is_equal( #ifdef THMSVC struct _stat #else struct stat #endif * buf); }; ifile * first_ptr, ///< Pointer to the first file. * last_ptr; ///< Pointer to the last file. bool is_first_file(); /** * Open new file for input. */ void open_file(char * fname); /** * Close file open for input. */ void close_file(); public: /** * Standard constructor. */ thinput(); /** * Destructor. */ ~thinput(); /** * Set command sensitivity state. */ void set_cmd_sensitivity(bool cs); /** * Turn on command sensitivity. */ void cmd_sensitivity_on(); /** * Turn off command sensitivity. */ void cmd_sensitivity_off(); /** * Retrieve command sensitivity. */ bool get_cmd_sensitivity(); /** * Set search path scanning state. */ void set_sp_scan(bool spss); /** * Turn on search path scanning for input files. */ void sp_scan_on(); /** * Turn off search path scanning for input files. */ void sp_scan_off(); /** * Retrieve search path scanning state. */ bool get_sp_scan(); /** * Set main input file name. */ void set_file_name(const char * fname); /** * Retrieve main input file name. */ char * get_file_name(); /** * Set search path. */ void set_search_path(const char * spath); /** * Set possible file suffixes. * * Used, when unable to open input file. */ void set_file_suffix(const char * fsx); bool get_input_sensitivity(); void set_input_sensitivity(bool s); /** * Reset input. */ void reset(); /** * Reads line from input and return pointer to it. * * In fact, it does following: * - ignore comment lines (starting with #) * - join lines ended with backslash * - if command sensitivity is on, process also input and * encoding commands. * - if also serach path is enabled, program search input files * also there * - if some suffixes are set, program tries to find files * by adding these suffixes. */ char * read_line(); /** * Return command string. * * Applicable only in when cmd_sensitivity is on. */ char * get_cmd(); /** * Return line string. */ char * get_line(); /** * Return value string. * * Applicable only in when cmd_sensitivity is on. */ char * get_value(); /** * Return full current input file name. */ char * get_cif_name(); /** * Return current input file path. */ char * get_cif_path(); /** * Return current input line number. */ unsigned long get_cif_line_number(); /** * Return current input encoding. */ int get_cif_encoding(); /** * Text to print some file was opened. */ void print_if_opened(void (* pifop)(char *), bool * printed); }; #endif therion/thjoin.cxx0000644000076400010400000000720510721450474015314 0ustar userAdministrators/** * @file thjoin.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thjoin.h" #include "thexception.h" #include "thchenc.h" #include "thparse.h" thjoin::thjoin() { this->smooth = TT_TRUE; this->count = 1; this->proj = NULL; this->proj_next_join = NULL; this->proj_prev_join = NULL; this->first_item = NULL; this->last_item = NULL; } thjoin::~thjoin() { } int thjoin::get_class_id() { return TT_JOIN_CMD; } bool thjoin::is(int class_id) { if (class_id == TT_JOIN_CMD) return true; else return thdataobject::is(class_id); } int thjoin::get_cmd_nargs() { return 2; } const char * thjoin::get_cmd_end() { return NULL; } const char * thjoin::get_cmd_name() { return "join"; } thcmd_option_desc thjoin::get_cmd_option_desc(const char * opts) { int id = thmatch_token(opts, thtt_join_opt); if (id == TT_JOIN_UNKNOWN) return thdataobject::get_cmd_option_desc(opts); else return thcmd_option_desc(id); } void thjoin::set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline) { double dv; int sv; switch (cod.id) { // replace this by real properties setting case TT_JOIN_SMOOTH: this->smooth = thmatch_token(*args, thtt_bool); if (this->smooth == TT_UNKNOWN_BOOL) ththrow(("invalid switch -- %s",*args)) break; case TT_JOIN_COUNT: thparse_double(sv,dv,*args); if ((sv != TT_SV_NUMBER) || (dv <= 1.0) || (dv != double(int(dv)))) ththrow(("invalid join count -- %s",*args)) this->count = int(dv); break; // if not found, try to set fathers properties default: if (cod.id < 1000) this->parse_item(*args); else thdataobject::set(cod, args, argenc, indataline); } } void thjoin::self_delete() { delete this; } void thjoin::self_print_properties(FILE * outf) { thdataobject::self_print_properties(outf); fprintf(outf,"thjoin:\n"); fprintf(outf,"\tsmooth: %d\n",this->smooth); if (this->first_item != NULL) { fprintf(outf,"\tjoined items:\n"); thdb2dji * cbl = this->first_item; while (cbl != NULL) { fprintf(outf,"\t\t"); fprintf(outf,cbl->name); if (cbl->mark != NULL) fprintf(outf,":%s",cbl->mark); fprintf(outf,"\n"); cbl = cbl->next_item; } } // insert intended print of object properties here } void thjoin::parse_item(char * istr) { thdb2dji * citem = this->db->db2d.insert_join_item(); citem->parse_item(istr); if (this->last_item == NULL) { this->first_item = citem; this->last_item = citem; } else { this->last_item->next_item = citem; citem->prev_item = this->last_item; this->last_item = citem; } } int thjoin::get_context() { return (THCTX_SURVEY | THCTX_NONE | THCTX_SCRAP); } therion/thjoin.h0000644000076400010400000000605510721450310014730 0ustar userAdministrators/** * @file thjoin.h * join module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thjoin_h #define thjoin_h #include "thdataobject.h" /** * join command options tokens. */ enum { TT_JOIN_UNKNOWN = 2000, TT_JOIN_SMOOTH = 2001, TT_JOIN_COUNT = 2002, }; /** * join command options parsing table. */ static const thstok thtt_join_opt[] = { {"count", TT_JOIN_COUNT}, {"smooth", TT_JOIN_SMOOTH}, {NULL, TT_JOIN_UNKNOWN}, }; /** * join class. */ class thjoin : public thdataobject { public: friend class thdb2d; class thdb2dji * first_item, * last_item; class thdb2dprj * proj; thjoin * proj_next_join, * proj_prev_join; int smooth, ///< Smooth option. count; ///< Number of joins. void parse_item(char * istr); ///< Parse join item. public: /** * Standard constructor. */ thjoin(); /** * Standard destructor. */ ~thjoin(); /** * Return class identifier. */ virtual int get_class_id(); /** * Return class name. */ virtual const char * get_class_name() {return "thjoin";}; /** * Return true, if son of given class. */ virtual bool is(int class_id); /** * Return number of command arguments. */ virtual int get_cmd_nargs(); /** * Return command name. */ virtual const char * get_cmd_name(); /** * Return command end option. */ virtual const char * get_cmd_end(); /** * Return option description. */ virtual thcmd_option_desc get_cmd_option_desc(const char * opts); /** * Set command option. * * @param cod Command option description. * @param args Option arguments arry. * @param argenc Arguments encoding. */ virtual void set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline); /** * Get context for object. */ virtual int get_context(); /** * Delete this object. * * @warn Always use this methos instead of delete function. */ virtual void self_delete(); /** * Print object properties. */ virtual void self_print_properties(FILE * outf); }; #endif therion/thlang/0000755000076400010400000000000012065343050014540 5ustar userAdministratorstherion/thlang/Makefile0000644000076400010400000000007107771720506016213 0ustar userAdministratorsall: perl process.pl update: perl process.pl update therion/thlang/process.pl0000755000076400010400000002131112065342776016572 0ustar userAdministrators#!/usr/bin/perl ## usage: ## ./process.pl - generate .cxx,.h sources from texts.txt ## ./process.pl update - find new strings to translate and load all ## texts_xy.txt into texts.txt ## ./process.pl export[-empty] xy - export texts_xy.txt with texts ## for translation. If export-empty is used, only untranslated strings ## are exported @trans_sources = ( "../thsymbolset.cxx", "../thexpmap.cxx", "../thlocale.cxx", "../thmapstat.cxx", "../thpdf.cxx", ); sub read_lang_file { # nacita subor do hashu a vrati na neho referenciu my $fn = shift; my $lcode = shift; my $src = shift; open(INP,"$fn") || die("error: can't open $fn for input\n"); if (defined($lcode)) { $lcode = check_language($lcode); } else { $lcode = ""; } my %res; if (defined($src)) { %res = %{$src}; } else { %res = (); } my $itm = ""; my $lnum = 0; my $cmnt = ""; while ($ln = ) { $lnum++; # print "LINE: $ln"; if ($ln =~ /^\s*(\#.*)/) { $cmnt .= "$1\n"; # print "COMMENT\n"; next; } elsif ($ln =~ /^\s*therion\:\s*(.*\S)\s*$/) { $itm = $1; $res{$itm}{therion} = $lnum; $res{$itm}{"therion-cmnt"} = $cmnt; $cmnt = ""; # print "THERION: $itm\n"; } elsif (($ln =~ /^\s*(\w+)\:\s*(.*\S)\s*$/) && (length($itm) > 0)) { ($lng, $trn) = ($1, $2); $clng = check_language($lng); if (length($lng) == 0) { warn("warning: invalid language \"$lng\" ($fn:$lnum)\n"); } if ((length($lcode) == 0) || (substr($clng,0,2) eq $lcode)) { $res{$itm}{$clng} = $trn; $res{$itm}{"$clng-cmnt"} = $cmnt; } $cmnt = ""; # print "LANGUAGE: $clng => $trn\n"; } elsif ($ln !~ /^\s*$/) { warn("warning: error parsing $fn:$lnum\n"); } } close(INP); return \%res; } sub check_language { my $lng = shift; if ($lng =~ /^([A-Za-z]{2})([\_\-]{1}([A-Za-z]{2})){0,1}$/) { if (length($3) > 0) { return (lc($1) . "_" . uc($3)) } else { return (lc($1)) } } else { return ""; } } sub write_lang_file { my $fn = shift; my $href = shift; my %hr = %{$href}; open(OUT,">$fn") || die("error: can't open $fn for output\n"); my %sh = (); for $key (keys %hr) { # print "SORTING: $key -> $hr{$key}{therion}\n"; $sh{$hr{$key}{therion}} = $key; } @nkeys = sort {$a <=> $b} (keys %sh); for $key (@nkeys) { print OUT $hr{$sh{$key}}{"therion-cmnt"}; print OUT "therion: $sh{$key}\n"; for $lkey (sort keys %{$hr{$sh{$key}}}) { if (($lkey !~ /^the/) && ($lkey !~ /\-cmnt/)) { print OUT $hr{$sh{$key}}{"$lkey-cmnt"}; print OUT "$lkey: ". $hr{$sh{$key}}{$lkey} ."\n"; } } print OUT "\n"; } close(OUT); } sub write_sources { my $href = shift; my %hr = %{$href}; # vytvorime si zoznam jazykov a ich alternativ my %lngs = (); my $key; my $lkey; foreach $key (keys %hr) { foreach $lkey (keys %{$hr{$key}}) { if (($lkey !~ /^the/) && ($lkey !~ /\-cmnt/)) { $lngs{$lkey} = $lkey; if (length($lkey) > 2) { $nlkey = substr($lkey,0,2); $lngs{$nlkey} = $nlkey; } } } } my @langs = (sort keys %lngs); my $i; my $lcode; $languages = "enum {\n THLANG_SYSTEM = -2,\n THLANG_UNKNOWN = -1,\n"; $langcxxid = "static const thlang_pchar thlang__cxxids [] = {\n"; $langparse = "static const thstok thtt_lang [] = {\n"; for ($i = 0; $i <= $#langs; $i++) { $lcode = "THLANG_" . uc($langs[$i]); $langcxxid .= " \"$lcode\",\n"; $langparse .= " {\"$langs[$i]\", $lcode},\n"; $languages .= " $lcode = $i,\n"; $lngs{$langs[$i]} = $lcode; } $languages .= "};\n"; $langcxxid .= "};\n"; $langparse .= " {NULL, THLANG_UNKNOWN},\n};\n"; my $alternatives = "static const int thlang__alternatives [] = {\n"; for ($i = 0; $i <= $#langs; $i++) { $lkey = $langs[$i]; if ((length($lkey) > 2) && (defined($lngs{substr($lkey,0,2)}))) { $alternatives .= " " . $lngs{substr($lkey,0,2)} . ",\n"; } else { $alternatives .= " THLANG_UNKNOWN,\n"; } } $alternatives .= "};\n"; @texts = sort keys %hr; $textparse = "static const thstok thtt__texts [" . ($#texts + 2) . "] = {\n"; $texttable = "static thlang_pchar thlang__translations [" . ($#texts + 1) . "][" . ($#langs + 1) . "] = {\n"; $i = 0; my $nlkey; foreach $key (@texts) { $textparse .= " {\"$key\",$i},\n"; $texttable .= " {\n"; # priradi ll_LL -> ll ak ll neni definovane foreach $lkey (@langs) { if (length($lkey) > 2) { $nlkey = substr($lkey,0,2); if (!defined($hr{$key}{$nlkey})) { $hr{$key}{$nlkey} = $hr{$key}{$lkey}; } } } foreach $lkey (@langs) { if (defined($hr{$key}{$lkey})) { $texttable .= " \"$hr{$key}{$lkey}\",\n"; } else { $texttable .= " NULL,\n"; } } $texttable .= " },\n"; $i++; } $textparse .= " {NULL, -1},\n};\n"; $texttable .= "};\n"; # exportujeme h subor open(OUT,">../thlangdata.h") || die("error: can't open thlangdata.h for output\n"); print OUT <../thlangdata.cxx") || die("error: can't open thlangdata.cxx for output\n"); print OUT < $maxnm) { $maxnm = $hr{$key}{therion}; } } $maxnm = -1 - $maxnm; foreach $key (keys %hr) { $hr{$key}{therion} += $maxnm; } my $i = 0; foreach $fn (@trans_sources) { print "updating definitions from $fn ..."; open(INP,"$fn") || die("error: can't open $fn for input\n"); my @lines = ; close(INP); my $ln = join('',@lines); $ln =~ s/thT\(/\nthT\(/sg; @lines = split(/\n/,$ln); foreach $ln (@lines) { $i++; if ($ln =~ /^thT\(\"([^"]+)\"/) { $hr{$1}{therion} = $i; } } print " done\n"; } #vypise warningy foreach $key (keys %hr) { if ($hr{$key}{therion} < 0) { warn("warning: expression \"$key\" doesn't need to be translated\n"); } } return \%hr; } sub backup_file { my $fn = shift; open(INP,"$fn") || die("error: can't open $fn for input\n"); my @lines = ; close(INP); open(OUT,">$fn~") || die("error: can't open $fn~ for output\n"); print OUT @lines; close(OUT); } sub export_language { (my $fn, my $lng, my $href, my $onlyempty) = (shift, shift, shift, shift); my %hr = %{$href}; open(OUT,">$fn") || die("error: can't open $fn for output\n"); my %sh = (); for $key (keys %hr) { $sh{$hr{$key}{therion}} = $key; } my @nkeys = sort {$a <=> $b} (keys %sh); for $key (@nkeys) { my $toexp = 1; if ($onlyempty) { for $lkey (sort keys %{$hr{$sh{$key}}}) { if ((substr($lkey,0,2) eq $lng) && ($lkey !~ /^the/) && ($lkey !~ /\-cmnt/)) { $toexp = 0; } } } if ($toexp) { print OUT $hr{$sh{$key}}{"therion-cmnt"}; print OUT "therion: $sh{$key}\n"; my $posc = "$lng:\n"; for $lkey (sort keys %{$hr{$sh{$key}}}) { if ((substr($lkey,0,2) eq $lng) && ($lkey !~ /^the/) && ($lkey !~ /\-cmnt/)) { print OUT $hr{$sh{$key}}{"$lkey-cmnt"}; print OUT "$lkey: ". $hr{$sh{$key}}{$lkey} ."\n"; $posc = ""; } } print OUT $posc; print OUT "\n"; } } close(OUT); } $rf = read_lang_file("texts.txt"); # ak update if ($ARGV[0] =~ /^update$/i) { opendir(CDR,"."); @updfiles = grep /^texts\_[a-z]{2}\.txt$/, readdir(CDR); foreach $ufn (@updfiles) { my $lcode = substr($ufn,6,2); print "updating $lcode translations ..."; $rf = read_lang_file($ufn,$lcode,$rf); backup_file("$ufn"); unlink($ufn) || $quietdel || warn("warning: can't delete $ufn\n"); print " done\n"; } closedir(CDR); backup_file("texts.txt"); $rf = update_todo_list($rf); write_lang_file("texts.txt",$rf); write_sources($rf); } elsif ($ARGV[0] =~ /^export(\-empty)?$/i) { my $onlyempty = $1; my $lng = check_language($ARGV[1]); if (length($lng) != 2) { die("error: invalid language \"$ARGV[1]\"\n"); } export_language("texts_$lng.txt",$lng,$rf,$onlyempty); } else { write_sources($rf); } therion/thlang/texts.txt0000644000076400010400000014175412065351634016473 0ustar userAdministratorstherion: point station bg: реперна точка cz: měřiÄský bod de: Messpunkt el: σημείο χαÏτογÏάφησης en: survey station es: estación fr: station topo it: caposaldo mi: kaimataara pl: punkt pomiarowy pt: base ru: пикет sk: meraÄský bod sq: stacioni I matjes therion: point station:temporary bg: временна реперна точка cz: měřiÄský bod (nestabilizovaný) de: unmarkierter Messpunkt el: Ï€ÏοσωÏινό σημείο χαÏτογÏάφησης en: temporary survey station es: estación topográfica fr: station topo temporaire it: caposaldo termporaneo mi: kaimataara mo te wÄ pl: punkt pomiarowy (niezastabilizowany) pt: base temporária ru: временный пикет sk: meraÄský bod (nestabilizovaný) sq: stacion mates I perkohshem therion: point station:painted bg: реперна точка (боÑдиÑана) cz: měřiÄský bod (zabarvený) de: farbig markierter Messpunkt el: σημείο χαÏτογÏάφησης (βαμμένο) en: painted survey station es: estación (pintada) fr: station topo, peinte it: caposaldo verniciato mi: kaimataara tohi pl: punkt pomiarowy (oznaczony farbÄ…) pt: base pintada ru: нариÑованный пикет sk: meraÄský bod (zafarbený) sq: stacion mates I ngjyrosur therion: point station:natural bg: реперна точка (еÑтеÑтвена) cz: měřiÄský bod (přírodní) de: natürlicher Messpunkt el: σημείο χαÏτογÏάφησης (φυσικό) en: natural survey station es: estación (natural) fr: station topo, naturelle it: caposaldo naturale mi: kaimataara a papa pl: punkt pomiarowy naturalny pt: base natural ru: еÑтеÑÑ‚Ð²ÐµÐ½Ð½Ð°Ñ Ñ‚Ð¾Ñ‡ÐºÐ° привÑзки sk: meraÄský bod (prírodný) sq: stacion mates natyral therion: point station:fixed bg: реперна точка (Ñтабилизирана) cz: měřiÄský bod (stabilizovaný) de: dauerhafter Messpunkt el: μόνιμο σημείο χαÏτογÏάφησης en: fixed survey station es: estación (fija) fr: station topo, fixe it: caposaldo fisso mi: kaimataara whakakÅhatu pl: punkt pomiarowy (zastabilizowany) pt: base fixa ru: репер sk: meraÄský bod (stabilizovaný) sq: stacion mates I palevizshem therion: point flag:entrance bg: вход cz: vchod de: Eingang el: είσοδος en: entrance es: boca fr: entrée it: ingresso mi: ana ngutu pl: wejÅ›cie pt: entrada ru: вход sk: vchod sq: hyrja therion: point flag:sink bg: понор cz: ponor de: Schluckloch el: καταβόθÏα en: sink es: sumidero fr: perte it: perdita mi: tapoko pl: ponor pt: sumidouro ru: Ñток sk: ponor sq: pus therion: point flag:spring bg: извор cz: vývÄ›r de: Quelle el: πηγή en: spring es: surgencia fr: source it: sorgente mi: waipuna pl: wywierzysko pt: nascente ru: иÑток sk: výver sq: burim therion: point flag:doline cz: závrt en: doline sk: závrt therion: point flag:dig bg: изкоп cz: sonda de: Grabung el: διάνοιξη en: dig fr: désobstruction it: disostruzione mi: kari pl: wykop sk: sonda sq: mihje therion: point flag:continuation bg: възможно продължение cz: možné pokraÄování de: Fortsetzung el: πιθανή συνέχεια en: possible continuation es: continuación fr: suite possible it: possibile prosecuzione mi: roanga taea pl: możliwa kontynuacja pt: possível continuação ru: возможное продолжение sk: možné pokraÄovanie sq: vazhdim I mundshem therion: point flag:air-draught bg: въздушно течение cz: průvan de: Luftzug el: Ïοή αέÏα en: air draught es: corriente aire fr: courant d’air it: corrente d'aria mi: tawhiri pl: przewiew pt: presença de vento ru: ток воздуха sk: prievan sq: rrymim i ajrit therion: point flag:arch en: arch sk: skalný oblúk therion: point flag:overhang bg: Ñкална площадка cz: pÅ™evis de: Überhang el: Ï€Ïοέκταση οÏοφής en: overhang es: extraplomo fr: surplomb it: sporgenza mi: tauwharenga pl: przewieszka pt_BR: projeção pt_PT: projecção ru: навиÑание потолка sk: previs sq: varese therion: line survey bg: антена cz: polygonový tah de: Messzug el: γÏαμμή χαÏτογÏάφησης en: survey lines es: poligonal fr: visée topo it: poligonale mi: ruri rÄrangi pl: ciÄ…g pomiarowy pt: linha de topografia ru: нитка хода sk: polygónový Å¥ah sq: vijat matese-vrojtuese therion: point station-name bg: име на реперна точка cz: Äíslo měřiÄského bodu de: Messpunktname el: όνομα σημείου χαÏτογÏάφησης en: survey station name es: nombre estacion fr: station topo, nom it: node del caposaldo mi: kaimatara ingoa pl: numer punktu pomiarowego pt: nome de base ru: номер пикета sk: Äíslo meraÄského bodu sq: emri I stacionit-mates therion: point entrance bg: вход cz: vchod de: Eingang el: είσοδος en: entrance es: boca fr: entrée it: ingresso mi: ana ngutu pl: wejÅ›cie pt: entrada ru: вход sk: vchod sq: hyrja therion: line map-connection bg: Ñвързване на карти cz: spojení map de: zusammenhängende Pläne el: ένωση χαÏτών en: map connection fr: jonction de carte it: riporto di mappa mi: mahere whenua ki te hui pl: połączenie map ru: Ð»Ð¸Ð½Ð¸Ñ Ð²Ñ‹Ð½Ð¾Ñа sk: prepojenie máp sq: lidhjet ne harta therion: line wall bg: Ñтена cz: stÄ›na de: Wand el: τοίχος en: wall es: pared fr: mur it: parete mi: tarÄ pl: Å›ciana pt: parede ru: Ñтена sk: stena sq: muri therion: line wall:bedrock bg: Ñтена (оÑновна Ñкала) cz: stÄ›na de: Wand zum Deckgebirge el: τοίχος en: wall es: pared fr: mur it: roccia mi: tarÄ pl: Å›ciana pt: parede ru: Ñтена sk: stena sq: shkembi-muri therion: line wall:underlying bg: по-ниÑко разположена Ñтена cz: stÄ›na nižší úrovnÄ› de: Wand unterlagernder Gang el: υποκείμενος τοίχος en: underlying wall es: pared subyacente fr: mur sousjacent it: parete:sottostante mi: tÄra ki raro pl: Å›ciana poÅ‚ożona niżej pt: parede subjacente ru: нижераÑÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð½Ð°Ñ Ñтена sk: stena nižšej úrovne sq: muri I shtrire therion: line wall:overlying de: überlagerter Wandverlauf en: overlying wall it: parete:sovrastante mi: tÄra ki runga pl: Å›ciana poÅ‚ożona wyżej sk: stena vyššej úrovne therion: line wall:unsurveyed bg: окомерна Ñкица на Ñтените cz: nezaměřená stÄ›na de: Wand unvermessen el: τοίχος (μη χαÏτογÏαφημένος) en: unsurveyed wall es: pared no topografiada fr: mur non topographié it: parete:stimata mi: ka rÅ«ri tÄra pl: Å›ciana nie pomierzona pt: parede não-topografada ru: Ð³Ð»Ð°Ð·Ð¾Ð¼ÐµÑ€Ð½Ð°Ñ Ñъемка Ñтен sk: nezameraná stena sq: muri I pamatur therion: line wall:presumed bg: предполагаема Ñтена cz: pÅ™edpokládaná stÄ›na de: Wand geschätzt el: τοίχος υποθετικός en: presumed wall es: pared supuesta fr: mur supposé it: parete:presunta mi: tÄra whakaaro pl: niewidoczna Å›ciana pt: parede presumida ru: Ð¿Ñ€ÐµÐ´Ð¿Ð¾Ð»Ð¾Ð³Ð°ÐµÐ¼Ð°Ñ Ñтена sk: predpokladaná stena sq: muri I supozuar therion: line wall:pit de: Eingangsschacht en: entrance pit it: parete:pozzo mi: rua pl: studnia wstÄ™pna sk: vstupná priepasÅ¥ therion: line wall:blocks bg: Ñтена - блокаж cz: zával de: Wand aus Versturz el: ογκόλιθοι en: blocks, breakdown es: bloques fr: effrondrement it: massi mi: pakaru pl: Å›ciana utworzona przez zawalisko pt: desmoronamento ru: глыбы sk: stena tvorená závalom sq: blloqe therion: line wall:debris bg: чакъл cz: Å¡tÄ›rk de: Wand aus Schutt el: χαλάσματα en: debris es: derrubios fr: débris de roche it: detriti mi: otaota pl: Å›ciana utworzona przez żwir pt: escombros ru: щебень sk: stena tvorená suÅ¥ou sq: depozitime/mbetje gurresh therion: line wall:pebbles bg: камъчета cz: valouny de: Wand aus Kies el: χαλίκια en: pebbles es: cantos rodados fr: cailloux it: ciotoli mi: nga kÅhatu iti pl: Å›ciana utworzona przez okrÄ™glaki pt: seixos ru: галька sk: stena tvorená okruhliakmi sq: gurralece therion: line wall:sand bg: пÑÑък cz: písek de: Wand aus Sand el: άμμος en: sand es: arena fr: sable it: sabbia mi: onepÅ« pl: Å›ciana utworzona przez piasek pt: areia ru: пеÑок sk: stena tvorená pieskom sq: rane therion: line wall:clay bg: глина cz: bahno de: Wand aus Lehm el: άÏγιλος en: clay es: arcilla fr: argile it: argilla mi: oneuku pl: Å›ciana z gliny pt: lama ru: глина sk: stena tvorená ílom sq: argjil therion: line wall:ice bg: лед/фирн cz: led de: Wand aus Eis el: πάγος en: ice es: hielo fr: glace it: ghiaccio mi: kÅpaka pl: Å›ciana z lodu pt: gelo ru: лед, фирн sk: stena tvorená ľadom sq: akull therion: line wall:flowstone de: Wand aus Sinter en: flowstone wall it: colata mi: tÄra a pari kÅhatu pl: Å›ciana z nacieków sk: stena tvorená sintrom therion: line wall:moonmilk de: Wand aus Bergmilch en: moonmilk wall it: moonmilk mi: tÄra a mirika marama pl: Å›ciana z miÄ™kkich nacieków sk: stena tvorená mäkkým sintrom therion: point wall-altitude bg: виÑочинна отметка на Ñтената cz: nadmoÅ™ská výška bodu na stÄ›nÄ› de: Höhe über Koordinatenursprung el: Ïψος τοίχου en: altitude es: altura pared fr: altitude it: altezza mi: teitei, tiketike pl: wysokość punktu pomiarowego npm pt: altura ru: выÑÐ¾Ñ‚Ð½Ð°Ñ Ð¾Ñ‚Ð¼ÐµÑ‚ÐºÐ° Ñтены sk: nadmorská výška bodu na stene sq: lartesia mbidetare e murit therion: point altitude bg: н.м. виÑочина cz: nadmoÅ™ská výška bodu v chodbÄ› de: Höhe über Koordinatenursprung el: Ïψος en: altitude es: altura fr: altitude it: quota mi: teitei, tiketike pl: wysokość punktu pomiarowego npm pt: altura ru: выÑÐ¾Ñ‚Ð½Ð°Ñ Ð¾Ñ‚Ð¼ÐµÑ‚ÐºÐ° sk: nadmorská výška bodu v chodbe sq: lartesia mbidetare therion: point section bg: мÑÑто на Ñечение cz: příÄný Å™ez de: Schnitt el: τομή en: section es: sección fr: section it: sezione mi: roherohenga pl: przkrój pt_BR: seção pt_PT: secção ru: Ñечение sk: prieÄny rez sq: pike-ndarje therion: line section bg: напречно Ñечение cz: příÄný Å™ez de: Schnittlinie el: τομή en: cross-section es: sección fr: section it: sezione trasversale mi: taha papahanga pl: przekrój pt: corte ru: выноÑÐ½Ð°Ñ Ð»Ð¸Ð½Ð¸Ñ ÑÐµÑ‡ÐµÐ½Ð¸Ñ sk: prieÄny rez sq: kryq-ndarje therion: point passage-height bg: виÑочина на галериÑта cz: výška chodby de: Raumhöhe el: Ïψος στοάς en: passage height es: altura galería fr: hauteur du passage it: altezza galleria mi: ara teitei pl: wysokość korytarza pt: altura da galeria ru: выÑота хода sk: výška chodby sq: lartesia e kalimit therion: point passage-height:unsigned bg: виÑочина на галериÑта cz: výška chodby de: Raumhöhe el: Ïψος στοάς en: passage height es: altura galería fr: hauteur du passage it: altezza galleria mi: ara teitei pl: wysokość korytarza pt: altura da galeria ru: выÑота хода sk: výška chodby sq: lartesia e kalimit-e pashenuar therion: point passage-height:positive bg: виÑочина на галериÑта над водата cz: výška chodby nad hladinou de: Raumhöhe nach oben el: Ïψος στοάς πάνω από νεÏÏŒ en: height above water level es: altura sobre nivel del mar fr: hauteur au-dessus de l’eau it: altezza sopra il livello dell'acqua mi: te teitei a karewa ki runga pl: wysokość korytarza nad powierzchniÄ… wody pt: altura acima do nível da água ru: выÑота над уровнем воды sk: výška nad hladinou sq: lartesia mbi nivelin e ujit therion: point passage-height:negative bg: дълбочина на галериÑта под водата cz: výška chodby pod hladinou de: Raumhöhe nach unten el: βάθος στοάς κάτω από νεÏÏŒ en: depth below water level es: profundidad bajo nivel del mar fr: hauteur en dessous de l’eau it: profondità sotto il livello dell'acqua mi: te hÅhunu a karewa ki raro pl: wysokość korytarza pod powierzchniÄ… wody pt: profundidade abaixo do nível da água ru: глубина ниже ÑƒÑ€Ð¾Ð²Ð½Ñ Ð²Ð¾Ð´Ñ‹ sk: hĺbka pod hladinou sq: thellesia nen nivelin e ujit therion: point passage-height:both bg: виÑочина над и дълбочина под водата cz: výška nad i pod hladinou de: Raumhöhe gesamt el: Ïψος και βάθος στοάς πάνω και κάτω από νεÏÏŒ en: height above, depth below water es: altura y profundidad respecto nivel del mar fr: hauteur au dessous et au dessus de l’eau it: altezza sopra e sotto il livello dell'acqua mi: karewa ki runga ki raro pl: wysokość korytarza nad powierzchniÄ… wody i głębokość poniżej poziomu wody pt: altura acima e profundidade abaixo do nível da água ru: выÑота над и глубина ниже ÑƒÑ€Ð¾Ð²Ð½Ñ Ð²Ð¾Ð´Ñ‹ sk: výška nad a hĺbka pod hladinou sq: lartesia mbi dhe nen nivelin e ujit therion: point air-draught bg: въздушно течение cz: průvan de: Luftzug el: Ïοή αέÏα en: air draught es: corriente aire fr: courant d’air it: corrente d'aria mi: tawhiri pl: przewiew pt: presença de vento ru: ток воздуха sk: prievan sq: rrymim i ajrit therion: point air-draught:winter bg: зимен въздушно течение cz: zimní průvan de: Luftzug im Winter el: χειμεÏινή Ïοή αέÏα en: winter air draught fr: courant d’air d’hiver it: circolazione invernale mi: tawhiri a takurua pl: przewiew w zimie ru: ток воздуха зимний sk: zimný prievan sq: rrymim ajri-dimeror therion: point air-draught:summer bg: летен въздушно течение cz: letní průvan de: Luftzug im Sommer el: θεÏινή Ïοή αέÏα en: summer air draught fr: courant d’air d’été it: circolazione estiva mi: tawhiri a raumati pl: przewiew w lecie ru: ток воздуха летний sk: letný prievan sq: rrymim ajri-veror therion: point date bg: дата на наблюдението cz: datum pozorování de: Datum el: ημεÏομηνία en: date of observation es: fecha fr: date it: data d'osservazione mi: rÄ o te titiro pl: data obserwacji pt: data de observação ru: дата Ð½Ð°Ð±Ð»ÑŽÐ´ÐµÐ½Ð¸Ñ sk: dátum pozorovania sq: data e vrojtimit therion: point dig bg: изкоп cz: sonda de: Grabung el: διάνοιξη en: dig fr: désobstruction it: disostruzione mi: kari pl: wykop sk: sonda sq: mihje therion: point continuation bg: възможно продължение cz: možné pokraÄování de: Fortsetzung el: πιθανή συνέχεια en: possible continuation es: continuación fr: suite possible it: possibile prosecuzione mi: roanga taea pl: możliwa kontynuacja pt: possível continuação ru: возможное продолжение sk: možné pokraÄovanie sq: vazhdim I mundshem therion: point narrow-end bg: непроходимо Ñнижаване cz: neprůlezné zúžení de: Engstelle, zu schmal el: κλείσιμο στοάς λόγω στενώματος en: passage end, narrow es: final estrecho fr: passage impénétrable it: chiude su strettoia mi: putanga kuiti mutunga pl: zwężenie nie do przejÅ›cia pt: passagem com final estreito ru: Ð²ÐµÑ€Ñ‚Ð¸ÐºÐ°Ð»ÑŒÐ½Ð°Ñ ÑƒÐ·Ð¾Ñть sk: neprielezné zúženie sq: kalim I ngushte-fund therion: point low-end bg: хоризонтално ÑтеÑнение cz: neprůlezné snížení de: Engstelle, zu flach el: κλείσιμο στοάς λόγω χαμηλής οÏοφής en: passage end, low es: final bajo fr: passage bas it: chiude su laminatoio mi: putanga pÄpaku mutunga pl: obniżenie nie do przejÅ›cia pt: passagem com final baixo ru: Ð³Ð¾Ñ€Ð¸Ð·Ð¾Ð½Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ ÑƒÐ·Ð¾Ñть sk: neprielezné zníženie sq: kalim I poshtem-fund therion: point flowstone-choke bg: блокирано от натеци cz: zasintrovaný konec de: Fortsetzung zugesintert el: κλείσιμο στοάς λόγο ÏƒÏ„Î±Î»Î±Î³Î¼Î¹Ï„Î¹ÎºÎ¿Ï Î±Ï€Î¿Î¸Î­Î¼Î±Ï„Î¿Ï‚ en: flowstone choke es: colmatado por concreción fr: trémie calcifiée it: chiude su colata mi: nati pari kÅhatu pl: koniec zamkniÄ™ty naciekami pt: obstrução por escorrimento ru: блокировано натеками sk: zasintrený koniec sq: mbyllje me gurre-rrjedhes therion: point breakdown-choke bg: затворено от Ñрутище cz: zavalený konec de: Fortsetzung verstürzt el: κλείσιμο στοάς λόγο χαλάσματος en: breakdown choke es: colmatado por derrumbe fr: trémie it: chiude su frana mi: nati pakaru pl: koniec zawalony pt: obstrução por desmoronamento ru: блокировано обвалом sk: zavalený koniec sq: gurre rrjedhes-fund therion: point clay-choke de: Fortsetzung verlehmt en: clay choke it: chiude su riempimento mi: uku pari pl: koniec zamkniÄ™ty glinÄ… sk: koniec uzavretý ílom therion: line floor-step bg: праг cz: stupeň de: Bodenstufe el: σκαλοπάτι en: floor step es: resalte fr: marche it: gradino mi: tapuae pl: próg pt: degrau ru: уÑтуп пола sk: stupeň sq: shkalle ne dysheme therion: line overhang bg: Ñкална площадка cz: pÅ™evis de: Überhang el: Ï€Ïοέκταση οÏοφής en: overhang es: extraplomo fr: surplomb it: sporgenza mi: tauwharenga pl: przewieszka pt_BR: projeção pt_PT: projecção ru: навиÑание потолка sk: previs sq: varese therion: line floor-meander bg: меандър, канал в пода cz: meandr ve dnÄ› de: Bodenmäander el: μαίανδÏος δαπέδου en: floor meander es: meandro fr: méandre au sol it: meandro mi: kopiko pl: meander w dnie pt: meandro no piso ru: меандр, канал в полу sk: meander v dne sq: rrjedhe uji gjarperore therion: line pit bg: кладенец cz: propast de: Schacht el: πηγάδι en_UK: pitch en_US: pit es: pozo fr: puits it: pozzo mi: tupari pl: studnia pt: desnível ru: колодец sk: priepasÅ¥ sq: ngjitje therion: line ceiling-step bg: ниша в тавана cz: zmÄ›na výšky stropu de: Deckenstufe el: σκαλοπάτι οÏοφής en: ceiling step es: resalte inverso fr: marche de plafond it: gradino a soffitto mi: tapuae ki te tuanui pl: zmiana wysokoÅ›ci stropu pt_BR: degrau no teto pt_PT: degrau no tecto ru: уÑтуп потолка sk: zmena výšky stropu sq: shkalle ne tavan therion: line ceiling-meander bg: меандър, канал в тавана cz: stropní meandr de: Deckenmäander el: μαίανδÏος οÏοφής en: ceiling meander es: meandro inverso fr: méandre de plafond it: canale di volta mi: kopiko tuanui pl: meander w stropie pt_BR: meandro no teto pt_PT: meandro no tecto ru: меандр, канал в потолке sk: stropný meander sq: rrjedhe uji gjarperore ne tavan therion: line chimney bg: комин cz: komín de: Schlot el: καμινάδα en: chimney es: chimenea fr: cheminée it: camino mi: tumera pl: komin pt: chaminé ru: труба sk: komín sq: oxhak therion: line gradient bg: наклон на галериÑта cz: sklon chodby de: Gefälle el: κλίση στοάς en: passage gradient es: gradiente fr: pente it: scivolo mi: heke pl: nachylenie korytarza pt: declividade da galeria ru: уклон хода sk: sklon chodby sq: pjertesia e kalimit therion: point gradient bg: наклон на галериÑта cz: sklon chodby de: Gefälle el: κλίση στοάς en: passage gradient es: gradiente fr: pente it: scivolo mi: harapaki putanga pl: nachylenie korytarza pt: declividade da galeria ru: уклон хода sk: sklon chodby sq: pjertesia e kalimit therion: point height bg: виÑочина на праг/комин/кладенец cz: výška stupnÄ›/komínu/hloubka propasti de: Höhe der Stufe oder des Schlotes oder Tiefe des Schachts el: Ïψος σκαλοπατιοÏ/καμινάδας ή βάθος Ï€Î·Î³Î±Î´Î¹Î¿Ï en: floor step/chimney/pit height/depth es: altura resalte/chimenea/profundidad pozo fr: hauteur d’une marche/d’une cheminée/profondeur it: altezza mi: papa tapuae/tumera/teitei rua/hÅhonu pl: wysokość progu/komina/głębokość studni pt: altura do chão para degrau/chaminé/desnível ru: выÑота уÑтупа/трубы/колодца sk: výška/hĺbka stupňa/komína sq: lartesia e shkalles ne dysheme/oxhaku/thellesia e leshimit therion: point dimensions bg: размери на галериÑта cz: rozmÄ›ry de: Ausdehnung el: διαστάσεις en: dimensions es: dimensiones fr: proportions it: dimensione mi: rahinga, meiha pl: rozmiary pt: dimensões ru: размеры хода sk: rozmery sq: dimenzionet therion: point height:unsigned bg: виÑочина на ниша в тавана cz: výška stupnÄ› de: Höhe der Bodenstufe el: Ïψος ÏƒÎºÎ±Î»Î¿Ï€Î±Ï„Î¹Î¿Ï en: floor step height es: altura resalte fr: hauteur d’une marche it: altezza camino mi: teitei papa tapuae pl: wysokość progu pt: altura do degrau no chão ru: выÑота уÑтупа sk: výška stupňa sq: lartesia e shkalles se dyshemes therion: point height:positive bg: виÑочина на комин cz: výška komínu de: Höhe des Schlotes el: Ïψος καμινάδας en: chimney height es: altura chimenea fr: hauteur d’une cheminée it: altezza camino mi: teitei tumera pl: wysokość komina pt: altura da chaminé ru: выÑота трубы sk: výška komína sq: lartesia e oxhakut therion: point height:negative bg: Дълбочина на кладенец cz: hloubka propasti de: Tiefe des Schachts el: βάθος Ï€Î·Î³Î±Î´Î¹Î¿Ï en: pit depth es: profundidad pozo fr: profondeur it: prodondità pozzo mi: rua hÅhonu pl: głębokosc studni pt: profundidade do desnível ru: выÑота колодца sk: hĺbka priepasti sq: thellesia e leshimit therion: line contour bg: контур cz: vrstevnice de: Höhenlinie el: ισοϋψής en: contour es: contorno fr: contour it: contorno mi: koru pl: poziomica pt: contorno ru: контур sk: vrstevnica sq: kontura therion: line slope bg: Ñклон cz: svah de: Hangform el: κλίση en: slope es: pendiente fr: pente it: scivolo mi: tupari pl: pochyÅ‚a powierzchnia pt: declive ru: Ñклон sk: Å¡ikmá plocha sq: breg therion: line rock-border bg: външен ръб на камък cz: kameny de: Umriss eines Felsens el: πεÏίγÏαμμα βÏάχου en: rock border es: contorno bloque fr: bord d’un rocher it: bordo masso mi: rohe kÅhatu pl: obrys kamienia pt: lateral da rocha ru: внешний кромка глыбы sk: obrys kameňa sq: kufij shkembinjsh therion: line rock-edge bg: вътрешен ръб на камък cz: hrany kamenů de: Struktur eines Felsens el: άκÏη βÏάχου en: rock edges es: arista bloque fr: arête d’un rocher it: spigolo masso mi: mata kohatu pl: krawÄ™dzie kamienia pt: bordas da rocha ru: внутреннÑÑ ÐºÑ€Ð¾Ð¼ÐºÐ° глыбы sk: hrany kameňa sq: skaji I shkembit therion: point bedrock bg: оÑновна Ñкала cz: pevná skála de: Deckgebirge el: πέτÏωμα en: bedrock es: roca madre fr: roche it: roccia mi: koiwi a papa pl: lita skaÅ‚a pt: rocha encaixante ru: ÐºÐ¾Ñ€ÐµÐ½Ð½Ð°Ñ Ð¿Ð¾Ñ€Ð¾Ð´Ð° sk: pevná skala sq: shtrat shkembi therion: point blocks bg: камъни, блокаж cz: kamenné bloky de: Blöcke el: ογκόλιθοι en: blocks, breakdown es: bloques fr: blocs it: massi mi: pakaru pl: kamienne bloki pt: blocos, desmoronamento ru: глыбы, завал sk: kamenné bloky sq: blloqe, shembje therion: point debris bg: чакъл cz: Å¡tÄ›rk de: Schutt el: χαλάσματα en: debris es: derrubios fr: débris it: detriti mi: otaota pl: żwir pt: escombros ru: щебень sk: sutina sq: mbetje-mbeturina therion: point sand bg: пÑÑък cz: písek de: Sand el: άμμος en: sand es: arena fr: sable it: sabbia mi: onepÅ« pl: piasek pt: areia ru: пеÑок sk: piesok sq: rane therion: point clay bg: глина cz: bahno de: Lehm el: άÏγιλος en: clay es: arcilla fr: argile it: argilla mi: oneuku pl: glina pt: lama ru: глина sk: íl sq: argjil therion: point water bg: вода cz: voda de: Wasser el: νεÏÏŒ en: water es: agua fr: eau it: acqua mi: wai pl: woda pt: água ru: вода sk: voda sq: uje therion: point ice bg: лед cz: led de: Eis el: πάγος en: ice es: hielo fr: glace it: ghiaccio mi: kÅpaka pl: lód pt: gelo ru: лёд sk: ľad sq: akull therion: point snow bg: ÑнÑг cz: sníh de: Schnee el: χιώνι en: snow es: nieve fr: neige it: neve mi: huka pl: Å›nieg pt: neve ru: Ñнег sk: sneh sq: bore therion: point pebbles bg: камъчета cz: valouny de: Kies el: χαλίκια en: pebbles es: cantos rodados fr: galets it: ciotoli mi: nga kÅhatu iti pl: okrÄ™glaki pt: seixos ru: галька sk: okruhliaky sq: gurralece therion: point raft bg: наÑип cz: náplav de: schwimmendes Kalkhäutchen el: σταλαγμιτικό υλικό που επιπλέει en: calcite raft es: calcita flotante fr: calcite flottante it: calcite flottante mi: mÅkihi o kÅhatu hÅhonu pl: nanios pt: jangada ru: выÑыпка sk: náplav sq: trap-skele therion: point guano bg: гуано cz: guano de: Guano el: γκουανό (πεÏιττώματα νυχτεÏίδων) en: guano es: guano fr: guano it: guano mi: tutae pl: guano pt: guano ru: гуано sk: guáno sq: jashteqitje e lakuriqeve-guano therion: point clay-tree de: Lehmbäumchen en: clay tree it: pini d'argilla mi: rakau oneuku therion: line border bg: граница cz: ohraniÄení de: Begrenzung el: άκÏη en: border es: límite fr: bord it: bordo mi: rohe pl: granica pt: borda ru: граница sk: ohraniÄenie sq: kufiri therion: line border:visible bg: видима граница cz: ohraniÄení de: sichtbare Begrenzung el: άκÏη en: border es: límite fr: bord it: bordo mi: rohe pl: granica pt: borda ru: Ð²Ð¸Ð´Ð¸Ð¼Ð°Ñ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ð° sk: ohraniÄenie sq: vije kufiri-e dukshme therion: line border:temporary bg: временна граница cz: nestálé ohraniÄení de: vorübergehende Begrenzung el: Ï€ÏοσωÏινή άκÏη en: temporary border es: límite temporal fr: bord, temporaire it: bordo temporaneo mi: rohe mo te wÄ pl: tymczasowa granica pt: borda temporária ru: Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ð° sk: nestále ohraniÄenie sq: kufij i perkohshem therion: line border:presumed bg: предполагаема граница cz: pÅ™edpokládané ohraniÄení de: geschätzte Begrenzung el: υποθετική άκÏη en: presumed border es: límite supuesto fr: bord, supposé it: bordo presunto mi: rohe whakaaringa whakaaro pl: niewidoczna granica pt: borda presumida ru: Ð¿Ñ€ÐµÐ´Ð¿Ð¾Ð»Ð°Ð³Ð°ÐµÐ¼Ð°Ñ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ð° sk: predpokladané ohraniÄenie sq: kufij I supozuar therion: area water bg: вода cz: vodní plocha de: Wasserfläche el: νεÏÏŒ en: water es: agua fr: eau it: acqua mi: wai pl: powierzchnia wody pt: água ru: вода sk: vodná plocha sq: uje therion: area sump bg: Ñифон cz: sifon de: Siphonfläche el: σιφόνι en: sump es: sifón fr: siphon it: sifone mi: kari a wai pl: syfon pt: sifão ru: Ñифон sk: zatopená plocha (sifón) sq: sifoni therion: area snow bg: ÑнÑг cz: sníh de: Schneefläche el: χιόνι en: snow es: nieve fr: neige it: neve mi: huka pl: Å›nieg pt: neve ru: Ñнег sk: sneh sq: bore therion: area ice bg: лед cz: led de: Eisfläche el: πάγος en: ice es: hielo fr: glace it: ghiaccio mi: kÅpaka pl: lód pt: gelo ru: лёд sk: ľad sq: akull therion: area sand bg: пÑÑък cz: písek de: Sandfläche el: άμμος en: sand es: arena fr: sable it: sabbia mi: onepÅ« pl: piasek pt: areia ru: пеÑок sk: piesok sq: rane therion: area clay bg: глина cz: bahno de: Lehmfläche el: άÏγιλος en: clay es: arcilla fr: argile it: argilla mi: oneuku pl: glina pt: lama ru: глина sk: íl sq: argjil therion: area pebbles bg: камъчета cz: valouny de: Kiesfläche el: χαλίκια en: pebbles es: cantos rodados fr: galets/pierres it: ciotoli mi: nga kÅhatu iti pl: okrÄ™glaki pt: seixos ru: галька sk: okrúhliaky sq: gurralece therion: area debris bg: чакъл cz: Å¡tÄ›rk de: Schuttfläche el: χαλάσματα en: debris es: derrubios fr: débris it: detriti mi: otaota pl: żwir pt: escombros ru: щебень sk: Å¡trk sq: mbetje-gurresh therion: area flowstone bg: каменен водопад cz: sintrové náteky de: flächiger Sinter el: σταλαγμιτικό υλικό δαπέδου en: flowstone es: concreción fr: concrétion it: concrezione pt: escorrimento ru: натечный каÑкад sk: sintrové náteky sq: gurre-rrjedhes therion: area moonmilk bg: пещерно млÑко cz: nickamínek de: Bergmilch el: γάλα σπηλαίου en: moonmilk fr: mondmilch it: moonmilk ru: лунное молоко sk: náteky mäkkého sintra sq: qumesht-hena therion: area blocks bg: блокаж cz: skalní bloky de: Fläche mit Blöcken el: ογκόλιθοι en: blocks, breakdown es: bloques fr: blocs it: massi mi: pakaru a kÅhatunui pl: bloki skalne pt: blocos ru: навал глыб sk: skalné bloky sq: blloqe therion: area bedrock bg: оÑновна Ñкала cz: pevná skála de: Deckgebirge el: πέτÏωμα en: bedrock es: roca madre fr: roche it: roccia pt: rocha encaixante ru: ÐºÐ¾Ñ€ÐµÐ½Ð½Ð°Ñ Ð¿Ð¾Ñ€Ð¾Ð´Ð° sk: pevná skala sq: shtrat shkembi therion: line water-flow bg: водно течение cz: vodní tok de: Gerinne el: υδÏοÏÏοή en: water flow es: curso agua fr: rivière it: corso d'acqua mi: wairere pl: ciek wodny pt: fluxo de água ru: водоток sk: vodný tok sq: rrjedhe uji therion: point water-flow bg: водно течение cz: vodní tok de: Gerinne el: υδÏοÏÏοή en: water flow es: curso agua fr: rivière it: corso d'acqua mi: wairere pl: ciek wodny pt: fluxo de água ru: водоток sk: vodný tok sq: rrjedhe uji therion: line water-flow:permanent bg: поÑтоÑнно водно течение cz: vodní tok de: ständiges Gerinne el: μόνιμη υδÏοÏÏοή en: water flow es: curso agua fr: rivière, permanente it: corso d'acqua permanente mi: wairere pl: ciek wodny pt: fluxo de água permanente ru: поÑтоÑнный водоток sk: vodný tok sq: rrjedhe uji e perhershme therion: point water-flow:permanent bg: поÑтоÑнно водно течение cz: vodní tok de: ständiges Gerinne el: μόνιμη υδÏοÏÏοή en: water flow es: curso agua fr: rivière, permanente it: corso d'acqua permanente mi: wairere pl: ciek wodny pt: fluxo de água permanente ru: поÑтоÑнный водоток sk: vodný tok sq: rrjedhe uji e perhershme therion: line water-flow:intermittent bg: периодично водно течение cz: obÄasný vodní tok de: zeitweises Gerinne el: διακοπτόμενη υδÏοÏÏοή en: intermittent water flow es: curso agua intermitente fr: rivière, intermittente it: corso d'acqua temporaneo mi: wairere taumutumutu pl: okresowy ciek wodny pt: fluxo de água intermitente ru: непоÑтоÑнный водоток sk: obÄasný vodný tok sq: rrjedhe uji me force therion: point water-flow:intermittent bg: непоÑтоÑнно водно течение cz: obÄasný vodní tok de: zeitweises Gerinne el: διακοπτόμενη υδÏοÏÏοή en: intermittent water flow es: curso agua intermitente fr: rivière, intermittente it: corso d'acqua temporaneo mi: wairere taumutumutu pl: okresowy ciek wodny pt: fluxo de água intermitente ru: непоÑтоÑнный водоток sk: obÄasný vodný tok sq: rrjedhe uji me force therion: line water-flow:conjectural bg: предполагаемо водно течение cz: pÅ™edpokládaný vodní tok de: vermutetes Gerinne el: υποτιθέμενη υδÏοÏÏοή en: conjectural water flow es: curso agua supuesto fr: rivière, conjoncturelle it: corso d'acqua presunto mi: wairere a pÄtai pl: przewidywany ciek wodny pt: fluxo de água suposto ru: предполагаемый водоток sk: predpokladaný vodný tok sq: rrjedhe uji e supozuar therion: point water-flow:paleo bg: палео речно легло cz: paleoÅ™eÄiÅ¡tÄ› de: ehemaliges Gerinne el: παλαιουδÏοÏÏοή en: paleo water flow (scallops) es: paleocurso agua fr: rivière fossile it: paleocorso d'acqua mi: wairere nehera pl: stary ciek wodny pt: paleo-fluxo de água ru: палео-поток sk: paleorieÄisko sq: rrjedhe uji e vjeter therion: point spring bg: извор cz: vývÄ›r de: Quelle el: πηγή en: spring es: surgencia fr: source it: sorgente mi: waipuna pl: wywierzysko pt: nascente ru: иÑток sk: výver sq: burim therion: point sink bg: понор cz: ponor de: Schluckloch el: καταβόθÏα en: sink es: sumidero fr: perte it: perdita mi: tapoko pl: ponor pt: sumidouro ru: Ñток sk: ponor sq: pus therion: point flowstone bg: натек cz: sintr de: flächiger Sinter el: σταλαγμιτικό υλικό δαπέδου en: flowstone es: concreción fr: concrétions it: concrezione mi: pari kÅhatu pl: nacieki pt: escorrimento ru: натек sk: sinter sq: gurre-rrjedhes therion: line flowstone bg: каменен водопад cz: sintrové náteky de: flächiger Sinter el: σταλαγμιτικό υλικό δαπέδου en: flowstone es: concreción fr: concrétion it: concrezione mi: pari kÅhatu pl: nacieki pt: escorrimento ru: натечный каÑкад sk: sintrové náteky sq: gurre-rrjedhes therion: point moonmilk bg: пещерно млÑко cz: nickamínek de: Bergmilch el: γάλα σπηλαίου en: moonmilk es: mondmilch fr: mondmilch it: moonmilk mi: mirika marama pl: miÄ™kkie nacieki pt: leite-de-lua ru: лунное молоко sk: mäkký sinter sq: qumesht-hena therion: line moonmilk bg: пещерно млÑко cz: nickamínek de: Bergmilch el: γάλα σπηλαίου en: moonmilk fr: mondmilch it: moonmilk mi: mirika marama pl: miÄ™kkie nacieki ru: лунное молоко sk: náteky mäkkého sintra sq: qumesht-hena therion: point stalactite bg: Ñталактит cz: stalaktit de: Stalaktit el: σταλακτίτης en: stalactite es: estalactita fr: stalactite it: stalattite mi: kÅhatu ki te haere ki runga pl: stalaktyt pt: estalactite ru: Ñталактит sk: stalaktit sq: stalaktit therion: point stalactites therion: point stalagmite bg: Ñталагмит cz: stalagmit de: Stalagmit el: σταλαγμίτης en: stalagmite es: estalagmita fr: stalagmite it: stalagmite mi: kÅhatu ki te haere ki raro pl: stalagmit pt: estalagmite ru: Ñталагмит sk: stalagmit sq: stalagmit therion: point stalagmites therion: point pillar bg: Ñталактон cz: stalagnát de: Säule el: κολόνα en: pillar es: pilar fr: pillier it: colonna mi: pou pl: stalagnat pt: coluna ru: колонна sk: stalagnát sq: shtylle therion: point pillars therion: point ice-stalactite de: Eisstalaktit en: ice stalactite it: stalattite di ghiaccio mi: kÅpaka ki te haere ki runga pl: lodowy stalaktyt sk: ľadový stalaktit therion: point ice-stalagmite de: Eisstalagmit en: ice stalagmite it: stalagmite di ghiaccio mi: kÅpaka ki te haere ki raro pl: lodowy stalagmit sk: ľadový stalagmit therion: point ice-pillar de: Eissäule en: ice pillar it: colonna di ghiaccio mi: pou KÅpaka pl: lodowy stalagnat sk: ľadový stalagnát therion: point curtain bg: Ð´Ñ€Ð°Ð¿ÐµÑ€Ð¸Ñ cz: sintrové záclony de: Sinterfahne el: κουÏτίνα en: curtain es: cortina fr: rideau it: cortina mi: araia pl: draperie naciekowe pt: cortina ru: натечный Ð·Ð°Ð½Ð°Ð²ÐµÑ sk: sintrové záclony sq: perde therion: point soda-straw bg: цевичен Ñталактит cz: brÄka de: Makkaroni el: μακαÏόνια en: soda straw es: fistulosa fr: fistuleuse it: tubolare mi: pÅ« ngote pl: nacieki pt: canudos pt_PT: tubulares ru: Ñталактиты-Ñоломины sk: brÄká sq: shkopinje sode therion: point popcorn bg: коралити cz: pizolity de: Blumenkohlsinter el: μανιτάÏια από σταλαγμιτικό υλικό en: popcorn es: coliflor fr: choux-fleur it: cavolfiore mi: kanga pÄhuuhuu pl: pizolity pt: couve-flor ru: коралиты sk: pizolity sq: palagaqa-kokorroshka therion: point cave-pearl bg: пещерен биÑер cz: jeskynní perly de: Höhlenperle el: μαÏγαÏιτάÏι των σπηλαίων en: cave pearl es: perla de caverna fr: perle des cavernes it: pisolite mi: ana kahurangi pl: perÅ‚y jaskiniowe pt_BR: pérolas pt_PT: pérolas de Gruta ru: пещерный жемчуг sk: jaskynné perly sq: margaritar te shpelles therion: point disk bg: диÑк cz: disk de: Diskus el: δίσκος en: disk es: disco fr: disque it: disco mi: kiwhi pl: dysk pt: disco ru: диÑк sk: disk sq: pllake therion: point helictite bg: хеликтити cz: heliktit de: Excentrique el: ελικτίτης en: helictite es: excéntrica fr: excentrique/hélictite it: eccentrica mi: pÄkeho torotoro pl: heliktyt pt_BR: helictite pt_PT: excêntrica ru: геликтиты sk: heliktit sq: heliktite therion: point aragonite bg: арагонит cz: aragonit de: Aragonit el: αÏαγονίτης en: aragonite es: aragonito fr: aragonite it: aragonite mi: pÄkeho tuarua pl: aragonit pt_BR: aragonita pt_PT: aragonite ru: арагонит sk: aragonit sq: aragonite therion: point crystal bg: криÑтал cz: krystal de: Kristall el: κÏÏσταλλο en: crystal es: cristal fr: cristaux it: cristallo mi: kohatu piata pl: krysztaÅ‚ pt: cristal ru: криÑталлы sk: kryÅ¡tál sq: kristale therion: point wall-calcite bg: повлек cz: vápencový povlak de: Wandsinter el: ασβεστίτης τοιχώματος en: wall calcite es: calcita fr: mur, calcite it: calcite mi: tÄra a nga roimata a pakeho pl: wapienna powÅ‚oka pt_BR: parede de calcita pt_PT: parede de calcite ru: наÑтенный кальцит sk: vápencový povlak sq: kalcit-muri therion: point gypsum bg: Ð³Ð¸Ð¿Ñ cz: sádrovec de: Gips el: γÏψος en: gypsum es: yeso fr: gypse it: gesso mi: tote pl: gips pt: gipsita ru: Ð³Ð¸Ð¿Ñ sk: sádrovec sq: gjips therion: point gypsum-flower bg: гипÑово цвете cz: sádrovcový kvÄ›t de: Gipsblume el: άνθος γÏψου en: gypsum flower es: flor yeso fr: fleur de gypse it: fiore di gesso mi: putiputi tote pl: gipsowy kwiat pt: flor de gipsita ru: гипÑовые цветы sk: sádrovcový kvet sq: lule gjipsi therion: point rimstone-dam bg: Ñухо Ñинтрово езеро cz: sintrová hrázka de: Sinterbarriere el: Î³ÎºÎ¿Ï…Ï (λιθωματικό φÏάγμα) en: rimstone dam es: gour-presa fr: gours it: gour mi: kÅhatu matatara pl: naciekowa przegroda pt: travertino ru: гуры без воды sk: sintrová hrádza sq: penda guri therion: point rimstone-pool bg: Ñинтрово езеро cz: sintrové jezírko de: Sinterbecken el: Î³ÎºÎ¿Ï…Ï (λιθωματική λεκάνη) en: rimstone pool es: gour-poza fr: gour it: vasca mi: kÅhatu kopua wai pl: jeziorko naciekowe pt: lago travertino ru: гуры Ñ Ð²Ð¾Ð´Ð¾Ð¹ sk: sintrové jazierko sq: vaska uji therion: point anastomosis bg: анаÑтомоза cz: anastomóza de: Anastomose el: αναστόμωση en: anastomosis es: anastomosis fr: anastomose it: anastomosi mi: peka hono pl: anastomoza pt: anastomose ru: анаÑÑ‚Ð¾Ð¼Ð¾Ð·Ð¸Ñ sk: anastomóza sq: anastomosa(kuartz) therion: point karren bg: кари cz: Å¡krapy de: Karren el: κάÏÏεν - γυμνός καÏστικοποιημένος βÏάχος en: karren es: lapiaz fr: lapiez it: karren mi: awaawa pl: żłobki krasowe pt: lapiás ru: карры sk: Å¡krapy sq: karreni therion: point scallop bg: фаÑетки cz: erozní útvary de: Fließfacette el: σκάλοπ (κενά διάβÏωσης) en: scallop es: cavitaciones fr: vagues d’érosion (coups de gouge) it: scallop mi: anatipa pl: formy erozyjne pt: marcas de fluxo ru: фаÑетки sk: lastúrovité jamky sq: guacat therion: point flute bg: карни жлебове cz: píšťaly de: Kolk el: αυλάκι διάβÏωσης en: flute es: canaleta fr: marmites it: scanalatura mi: koauau pl: marmity pt: marcas de fluxo ru: канавки sk: píšťaly sq: flauta therion: point raft-cone bg: наÑипен ÐºÐ¾Ð½ÑƒÑ cz: náplavový kužel de: schwimmendes Kalkhäutchen el: σταλαγμιτικός κώνος που επιπλέει en: raft cone es: conos fr: cone it: calcite flottante mi: korere a mÅkihi kÅhatu hÅhonu pl: nanios pt: cone de jangada ru: выÑыпной ÐºÐ¾Ð½ÑƒÑ sk: náplavový kužeľ sq: rrjedhe uji konike therion: point archeo-material bg: археологичеÑка находка cz: archeologické nálezy de: archäologischer Fund el: αÏχαιολογικό εÏÏημα en: archaeological material es: yacimiento (arq) fr: matériel archéo it: materiale archeologico mi: taonga o nehe pl: znaleziska archeologiczne pt: material arqueológico ru: археологичеÑÐºÐ°Ñ Ð½Ð°Ñ…Ð¾Ð´ÐºÐ° sk: archeologické nálezy sq: material arkeologjik therion: point paleo-material bg: палеонтологична находка cz: paleontologické nálezy de: paläontologischer Fund el: παλαιοντολογικό εÏÏημα en: paleo material es: yacimiento (pal) fr: matériel paléo it: materiale paleologico mi: taiao taonga o nehe pl: znaleziska paleontologiczne pt: material paleontológico ru: палео-находка sk: paleontologické nálezy sq: paleo-material therion: point vegetable-debris bg: оÑтанки от раÑтителноÑÑ‚ cz: zbytky rostlin de: Pflanzenreste el: φυτικά κατάλοιπα en: vegetable debris es: detritus vegetales fr: débris végétaux it: detriti vegetali mi: otaota a hua whenua pl: szczÄ…tki roÅ›linne pt: restos vegetais ru: оÑтанки раÑтительноÑти sk: zvyÅ¡ky rastlín sq: mbetje perimesh therion: point root bg: корени cz: koÅ™eny de: Holzreste el: Ïίζες en: root es: raíz fr: racine it: radice mi: pakiaka pl: korzenie pt: raiz ru: корни раÑтений sk: korene sq: rrenje therion: point no-equipment bg: липÑва екипировка! cz: nevystrojené místo de: keine Ausrüstung el: χωÏίς υλικά en: no equipment! es: sin equipar fr: pas d’équipement it: senza armo mi: wahi a taonga mahi kore pl: miejsce bez punktu asekuracyjnego pt: local sem equipamento ru: ÑнарÑжение отутÑтвует! sk: nevystrojené miesto sq: vend pa pajisje therion: point anchor bg: закрепване cz: kotvení de: Seilbefestigung el: αγκÏÏωση en: anchor es: anclaje fr: ancrage it: ancoraggio mi: punga pl: punkt asekuracyjny pt: ancoragem ru: ИТО sk: kotvenie sq: pike-sigurimi therion: point rope bg: въже cz: lano de: Seil el: σχοινί en: rope es: cuerda fr: corde it: corda mi: taura pl: lina pt: corda ru: Ð»Ð¸Ð½ÐµÐ¹Ð½Ð°Ñ Ð¾Ð¿Ð¾Ñ€Ð° sk: lano sq: litar therion: line rope therion: point rope-ladder bg: пещерна Ñтълба cz: lanový žebřík de: Drahtseilleiter el: ανεμόσκαλα en: rope ladder es: escala fr: échelle de corde it: scala di corda mi: arawhata taura pl: drabinka linowa pt: escada de corda ru: Ð³Ð¸Ð±ÐºÐ°Ñ Ð»ÐµÑтница sk: lanový rebrík sq: shkalle litari therion: line rope-ladder therion: point fixed-ladder bg: Ñтационарна Ñтълба cz: pevný žebřík de: feste Leiter el: μόνιμη σκάλα en: fixed ladder es: escala fija fr: échelle fixe it: scala fissa mi: arawhata pl: sztywna drabinka pt: escada fixa ru: жеÑÑ‚ÐºÐ°Ñ Ð»ÐµÑтница sk: fixný rebrík sq: shkalle fikse therion: line fixed-ladder therion: point steps bg: Ñтъпала cz: schody de: Stufen el: σκαλοπάτια en: steps es: escalones fr: marches it: scalini mi: nga tapuae pl: schody pt: degraus ru: Ñтупени sk: schody sq: shkalle therion: line steps therion: point via-ferrata therion: line via-ferrata therion: point traverse bg: Ñ‚Ñ€Ð°Ð²ÐµÑ€Ñ cz: traverz de: Querung el: Ï„ÏαβέÏσα en: traverse es: pasamanos fr: traversée it: traverso mi: hikoi a tupari pl: trawers pt: travessia ru: троллей sk: traverz sq: kalim anesore therion: point bridge bg: моÑÑ‚ cz: most de: Brücke el: γέφυÏα en: bridge es: puente roca fr: pont it: ponte di roccia mi: piriti pl: most pt: ponte ru: моÑÑ‚ sk: most sq: ure therion: point handrail therion: line handrail therion: point camp bg: лагер cz: bivak de: Biwak el: κατασκήνωση en: camp es: campamento fr: camp it: campo mi: topuni pl: biwak pt: acampamento ru: ПБЛ sk: bivak sq: vend-pushim therion: point remark bg: забележка cz: poznámka de: Bemerkung el: σχόλιο en: remark es: nota fr: remarque it: nota mi: korero pl: uwaga pt: anotação ru: заметка sk: poznámka sq: shenim therion: point label bg: етикет cz: pojmenování de: Beschriftung el: πεÏιγÏαφή en: label es: etiqueta fr: libellé it: etichetta mi: ingoa pl: nazwa pt: indicação ru: текÑÑ‚Ð¾Ð²Ð°Ñ Ð¼ÐµÑ‚ÐºÐ° sk: pomenovanie sq: mbishkrim-etiket therion: line label bg: етикет cz: pojmenování de: Beschriftung el: πεÏιγÏαφή en: label es: etiqueta fr: libellé it: etichetta mi: ingoa pl: nazwa pt: indicação ru: текÑÑ‚Ð¾Ð²Ð°Ñ Ð¼ÐµÑ‚ÐºÐ° sk: pomenovanie sq: mbishkrim therion: title legend bg: Легенда cz: Legenda de: Legende el: Τίτλος en: Legend es: Leyenda fr: Légende it: Legenda mi: Kaiwhakaatu pl: legenda pt: Legenda ru: УÑловные Ð¾Ð±Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ sk: Legenda sq: permbajtja therion: title color-legend-altitude bg: ВиÑочинна Ñкала cz: NadmoÅ™ské výšky de: Höhe des Titelfeldes el: ΥψομετÏικά en: Altitudes es: color (altitud) fr: Altitudes it: Profondità mi: Teitei, Tiketike pl: wysokoÅ›ci npm pt: Altitudes ru: Ð’Ñ‹ÑÐ¾Ñ‚Ð½Ð°Ñ ÑˆÐºÐ°Ð»Ð° sk: Nadmorské výšky sq: titulli ngjyra-permbajtja-lartesia mbidetare therion: title color-legend-map bg: Карти cz: Mapy de: Karten el: ΧάÏτες en: Maps es: color (mapa) fr: Cartes it: Mappa mi: Mahere whenua pl: mapy pt: Mapas ru: Карты sk: Mapy sq: hartat therion: units ft bg: футове cz: ft de: ft el: πόδια en: ft es: ft fr: ft it: ft mi: whÄ«ti pl: ft (stopy) pt: pés ru: футов sk: ft sq: njesia matese-kembe therion: title cave length bg: Дължина cz: Délka de: Gesamtlänge el: Μήκος en: Length es: Desarrollo fr: Longueur it: Sviluppo mi: Roa a ana pl: dÅ‚ugość pt: Extensão ru: Длина sk: Dĺžka sq: gjatesia therion: units m bg: м cz: m de: m el: μ en: m es: m fr: m it: m mi: mehua pl: m (metry) pt: m ru: м sk: m sq: njesia matese-metri therion: title cave depth bg: Ð”ÐµÐ½Ð¸Ð²ÐµÐ»Ð°Ñ†Ð¸Ñ cz: PÅ™evýšení de: Niveaudifferenz el: Βάθος en: Depth es: Desnivel fr: Profondeur it: Profondità mi: HÅhonu a ana, RÄ“tÅtanga pl: przewyższenie pt: Desnível ru: Глубина sk: Prevýšenie sq: thellesia therion: title explo (plural) bg: ИзÑледване cz: Objevili de: Entdeckung el: ΕξεÏευνητές en: Explored by es: Exploración fr: Explorateurs it: Esplorazione mi: Kaipokai whenua pl: odkryli pt: Exploradas por ru: ИÑÑледование sk: Objavili sq: hulumtuar nga therion: title explo bg: ИзÑледване cz: Objevil de: Entdeckung el: ΕξεÏευνητής en: Explored by es: Exploración fr: Explorateur it: Esplorazione mi: Kaipokai whenua pl: odkryÅ‚ pt: Explorada por ru: ИÑÑледование sk: Objavil sq: hulumtuar nga therion: title topo (plural) bg: Картирали cz: Měřili de: Vermessung el: ΧαÏτογÏαφήθηκε από τους en: Surveyed by es: Espeleometría fr: Topographes it: Topografia mi: KairÅ«ri pl: pomierzyli pt: Topografadas por ru: Съемка sk: Zamerali sq: matur nga therion: title topo bg: Картирал cz: Měřil de: Vermessung el: ΧαÏτογÏαφήθηκε από τον en: Surveyed by es: Topografía fr: Topographe it: Topografia mi: KairÅ«ri pl: mierzyÅ‚ pt: Topografada por ru: Съемка sk: Zameral sq: matur nga therion: title carto (plural) bg: Гл. картировачи cz: Kreslili de: Zeichnung el: ΣκαÏίφημα en: Drawn by es: Cartografía fr: Dessinateurs it: Cartografia mi: Kaituhi pl: rysowali pt: Desenhadas por ru: ÐšÐ°Ð¼ÐµÑ€Ð°Ð»ÑŒÐ½Ð°Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ° sk: Kreslili sq: vizatuar nga therion: title carto bg: Гл. картировач cz: Kreslil de: Zeichnung el: ΣκαÏίφημα en: Drawn by es: Cartografía fr: Dessinateur it: Cartografia mi: Kaituhi pl: rysowaÅ‚ pt: Desenhada por ru: ÐšÐ°Ð¼ÐµÑ€Ð°Ð»ÑŒÐ½Ð°Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ° sk: Kreslil sq: vizatuar nga therion: title preview above bg: Изглед от горе cz: [Náhled horních vrstev] de: Vorschau oben el: [Ï€Ïοεπισκόπηση πάνω] en: [Preview above] es: Vista previa superior fr: [Prévisualisation au-dessus] it: Anteprima sopra mi: Tuhi a ana ki runga pl: widok z góry pt: [Visualização acima] ru: [Вид выше] sk: [Náhľad horných vrstiev] sq: parashiqimi lart therion: title preview below bg: Изглед от долу cz: [Náhled dolních vrstev] de: Vorschau unten el: [Ï€Ïοεπισκόπηση κάτω] en: [Preview below] es: Vista previa inferior fr: [Prévisualisation au-dessous] it: Anteprima sotto mi: Tuhi a ana ki raro pl: widok z doÅ‚u pt: [Visualização abaixo] ru: [Вид ниже] sk: [Náhľad spodných vrstiev] sq: parashiqimi perfundi therion: title surface bitmap bg: Карта на повърхноÑтта cz: [Povrchová mapa] de: Erdoberfläche el: [χάÏτης επιφάνειας] en: [Surface Image] es: Mapa superficie fr: [Carte extérieure] it: Mappa superficie mi: Konohi o te whenua pl: mapa powierzchni pt: [Mapa de superfície] ru: [Карта поверхноÑти] sk: [Povrchová mapa] sq: harta e siperfaqes therion/thlang/thlang_stats.pl0000755000076400010400000000062211127142032017566 0ustar userAdministrators#!/usr/bin/perl -w open (IN, $ARGV[0]) or die; while () { chomp; if (/^\W*therion:/) { foreach $l (keys %LOC) { $GLOB{$l} += 1; } $GLOB{"therion"} += 1; %LOC = (); } elsif (/^\W*([a-z]{2})(_[A-Z]{2})?:/) { $LOC{$1} = 1; } } foreach $l (keys %LOC) { $GLOB{$l} += 1; } foreach $l (keys %GLOB) { print "$l: " . int(100*$GLOB{$l}/$GLOB{"therion"}) . "\n"; } therion/thlang.cxx0000644000076400010400000000740211225372614015274 0ustar userAdministrators/** * @file thlang.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thlang.h" #include "thparse.h" #include "thlangdata.cxx" #include "thinit.h" #include "thconfig.h" #include "thdatabase.h" #include "thexception.h" #include struct thlang_str { int m_lang; const char * m_text; thlang_str(int lang, const char * text) : m_lang(lang), m_text(text) {} }; bool operator < (const struct thlang_str & s1, const struct thlang_str & s2) { if (s1.m_lang < s2.m_lang) return true; if (s1.m_lang > s2.m_lang) return false; if (strcmp(s1.m_text, s2.m_text) < 0) return true; return false; } bool operator == (const struct thlang_str & s1, const struct thlang_str & s2) { if ((s1.m_lang == s2.m_lang) && (strcmp(s1.m_text, s2.m_text) == 0)) return true; return false; } typedef std::map thlang_str_map; thlang_str_map ulang_map; int thlang_parse(char * str) { return thmatch_token(str, thtt_lang); } const char * thlang_getid(int id) { const char * rv = thmatch_string(thlang_getlang(id), thtt_lang); return rv; } const char * thlang_getcxxid(int id) { if (id < 0) return "THLANG_UNKNOWN"; else return thlang__cxxids[id]; } const thstok * thlang_get_text_table() { return &(thtt__texts[0]); } void thlang_set_translation(char * lang, char * text, char * translation) { int lang_id; lang_id = thlang_parse(lang); if (lang_id == THLANG_UNKNOWN) ththrow(("unknown language -- %s", lang)); int text_id; text_id = thmatch_token(text, thtt__texts); if (text_id == -1) { if ( (strncmp(text,"point u:",8) == 0) || (strncmp(text,"line u:",7) == 0) || (strncmp(text,"area u:",7) == 0)) { ulang_map[thlang_str(lang_id, thdb.strstore(text, true))] = thdb.strstore(translation); } else ththrow(("unknown text -- %s", text)) } else { thlang__translations[text_id][lang_id] = thdb.strstore(translation); } } const char * thT(const char * txt, int lng) { if (lng == THLANG_SYSTEM) return txt; int sv = thmatch_token(txt,thtt__texts); const char * trans; lng = thlang_getlang(lng); // najde ci ho mame v danom jazyku if (sv == -1) { thlang_str_map::iterator it = ulang_map.find(thlang_str(lng, txt)); if ((it == ulang_map.end()) && (thlang__alternatives[lng] != THLANG_UNKNOWN)) it = ulang_map.find(thlang_str(thlang__alternatives[lng], txt)); if (it == ulang_map.end()) return txt; else return it->second; } trans = thlang__translations[sv][lng]; if ((trans == NULL) && (thlang__alternatives[lng] != THLANG_UNKNOWN)) { trans = thlang__translations[sv][thlang__alternatives[lng]]; } if (trans != NULL) return trans; else return txt; } int thlang_getlang(int lng) { if (lng == THLANG_UNKNOWN) lng = thcfg.lang; if (lng == THLANG_UNKNOWN) lng = thini.lang; if (lng == THLANG_UNKNOWN) lng = THLANG_EN; return lng; } therion/thlang.h0000644000076400010400000000260110721227366014720 0ustar userAdministrators/** * @file thlang.h * Therion language translation module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thlang_h #define thlang_h #include "thlangdata.h" #include "thparse.h" const char * thT(const char * txt, int lng = THLANG_UNKNOWN); int thlang_parse(char * str); const char * thlang_getid(int id); const char * thlang_getcxxid(int id); int thlang_getlang(int lng); const thstok * thlang_get_text_table(); void thlang_set_translation(char * lang, char * text, char * translation); #endif therion/thlangdata.cxx0000644000076400010400000021044712065354312016131 0ustar userAdministrators/** * @file thlangdata.cxx * Therion language translations module. * * THIS FILE IS GENERATED AUTOMATICALLY, DO NOT MODIFY IT !!! */ typedef const char * thlang_pchar; static const thstok thtt_lang [] = { {"bg", THLANG_BG}, {"cz", THLANG_CZ}, {"de", THLANG_DE}, {"el", THLANG_EL}, {"en", THLANG_EN}, {"en_UK", THLANG_EN_UK}, {"en_US", THLANG_EN_US}, {"es", THLANG_ES}, {"fr", THLANG_FR}, {"it", THLANG_IT}, {"mi", THLANG_MI}, {"pl", THLANG_PL}, {"pt", THLANG_PT}, {"pt_BR", THLANG_PT_BR}, {"pt_PT", THLANG_PT_PT}, {"ru", THLANG_RU}, {"sk", THLANG_SK}, {"sq", THLANG_SQ}, {NULL, THLANG_UNKNOWN}, }; static const thlang_pchar thlang__cxxids [] = { "THLANG_BG", "THLANG_CZ", "THLANG_DE", "THLANG_EL", "THLANG_EN", "THLANG_EN_UK", "THLANG_EN_US", "THLANG_ES", "THLANG_FR", "THLANG_IT", "THLANG_MI", "THLANG_PL", "THLANG_PT", "THLANG_PT_BR", "THLANG_PT_PT", "THLANG_RU", "THLANG_SK", "THLANG_SQ", }; static const int thlang__alternatives [] = { THLANG_UNKNOWN, THLANG_UNKNOWN, THLANG_UNKNOWN, THLANG_UNKNOWN, THLANG_UNKNOWN, THLANG_EN, THLANG_EN, THLANG_UNKNOWN, THLANG_UNKNOWN, THLANG_UNKNOWN, THLANG_UNKNOWN, THLANG_UNKNOWN, THLANG_UNKNOWN, THLANG_PT, THLANG_PT, THLANG_UNKNOWN, THLANG_UNKNOWN, THLANG_UNKNOWN, }; static const thstok thtt__texts [181] = { {"area bedrock",0}, {"area blocks",1}, {"area clay",2}, {"area debris",3}, {"area flowstone",4}, {"area ice",5}, {"area moonmilk",6}, {"area pebbles",7}, {"area sand",8}, {"area snow",9}, {"area sump",10}, {"area water",11}, {"line border",12}, {"line border:presumed",13}, {"line border:temporary",14}, {"line border:visible",15}, {"line ceiling-meander",16}, {"line ceiling-step",17}, {"line chimney",18}, {"line contour",19}, {"line fixed-ladder",20}, {"line floor-meander",21}, {"line floor-step",22}, {"line flowstone",23}, {"line gradient",24}, {"line handrail",25}, {"line label",26}, {"line map-connection",27}, {"line moonmilk",28}, {"line overhang",29}, {"line pit",30}, {"line rock-border",31}, {"line rock-edge",32}, {"line rope",33}, {"line rope-ladder",34}, {"line section",35}, {"line slope",36}, {"line steps",37}, {"line survey",38}, {"line via-ferrata",39}, {"line wall",40}, {"line wall:bedrock",41}, {"line wall:blocks",42}, {"line wall:clay",43}, {"line wall:debris",44}, {"line wall:flowstone",45}, {"line wall:ice",46}, {"line wall:moonmilk",47}, {"line wall:overlying",48}, {"line wall:pebbles",49}, {"line wall:pit",50}, {"line wall:presumed",51}, {"line wall:sand",52}, {"line wall:underlying",53}, {"line wall:unsurveyed",54}, {"line water-flow",55}, {"line water-flow:conjectural",56}, {"line water-flow:intermittent",57}, {"line water-flow:permanent",58}, {"point air-draught",59}, {"point air-draught:summer",60}, {"point air-draught:winter",61}, {"point altitude",62}, {"point anastomosis",63}, {"point anchor",64}, {"point aragonite",65}, {"point archeo-material",66}, {"point bedrock",67}, {"point blocks",68}, {"point breakdown-choke",69}, {"point bridge",70}, {"point camp",71}, {"point cave-pearl",72}, {"point clay",73}, {"point clay-choke",74}, {"point clay-tree",75}, {"point continuation",76}, {"point crystal",77}, {"point curtain",78}, {"point date",79}, {"point debris",80}, {"point dig",81}, {"point dimensions",82}, {"point disk",83}, {"point entrance",84}, {"point fixed-ladder",85}, {"point flag:air-draught",86}, {"point flag:arch",87}, {"point flag:continuation",88}, {"point flag:dig",89}, {"point flag:doline",90}, {"point flag:entrance",91}, {"point flag:overhang",92}, {"point flag:sink",93}, {"point flag:spring",94}, {"point flowstone",95}, {"point flowstone-choke",96}, {"point flute",97}, {"point gradient",98}, {"point guano",99}, {"point gypsum",100}, {"point gypsum-flower",101}, {"point handrail",102}, {"point height",103}, {"point height:negative",104}, {"point height:positive",105}, {"point height:unsigned",106}, {"point helictite",107}, {"point ice",108}, {"point ice-pillar",109}, {"point ice-stalactite",110}, {"point ice-stalagmite",111}, {"point karren",112}, {"point label",113}, {"point low-end",114}, {"point moonmilk",115}, {"point narrow-end",116}, {"point no-equipment",117}, {"point paleo-material",118}, {"point passage-height",119}, {"point passage-height:both",120}, {"point passage-height:negative",121}, {"point passage-height:positive",122}, {"point passage-height:unsigned",123}, {"point pebbles",124}, {"point pillar",125}, {"point pillars",126}, {"point popcorn",127}, {"point raft",128}, {"point raft-cone",129}, {"point remark",130}, {"point rimstone-dam",131}, {"point rimstone-pool",132}, {"point root",133}, {"point rope",134}, {"point rope-ladder",135}, {"point sand",136}, {"point scallop",137}, {"point section",138}, {"point sink",139}, {"point snow",140}, {"point soda-straw",141}, {"point spring",142}, {"point stalactite",143}, {"point stalactites",144}, {"point stalagmite",145}, {"point stalagmites",146}, {"point station",147}, {"point station-name",148}, {"point station:fixed",149}, {"point station:natural",150}, {"point station:painted",151}, {"point station:temporary",152}, {"point steps",153}, {"point traverse",154}, {"point vegetable-debris",155}, {"point via-ferrata",156}, {"point wall-altitude",157}, {"point wall-calcite",158}, {"point water",159}, {"point water-flow",160}, {"point water-flow:intermittent",161}, {"point water-flow:paleo",162}, {"point water-flow:permanent",163}, {"title carto",164}, {"title carto (plural)",165}, {"title cave depth",166}, {"title cave length",167}, {"title color-legend-altitude",168}, {"title color-legend-map",169}, {"title explo",170}, {"title explo (plural)",171}, {"title legend",172}, {"title preview above",173}, {"title preview below",174}, {"title surface bitmap",175}, {"title topo",176}, {"title topo (plural)",177}, {"units ft",178}, {"units m",179}, {NULL, -1}, }; static thlang_pchar thlang__translations [180][18] = { { "оÑновна Ñкала", "pevná skála", "Deckgebirge", "πέτÏωμα", "bedrock", NULL, NULL, "roca madre", "roche", "roccia", NULL, NULL, "rocha encaixante", NULL, NULL, "ÐºÐ¾Ñ€ÐµÐ½Ð½Ð°Ñ Ð¿Ð¾Ñ€Ð¾Ð´Ð°", "pevná skala", "shtrat shkembi", }, { "блокаж", "skalní bloky", "Fläche mit Blöcken", "ογκόλιθοι", "blocks, breakdown", NULL, NULL, "bloques", "blocs", "massi", "pakaru a kÅhatunui", "bloki skalne", "blocos", NULL, NULL, "навал глыб", "skalné bloky", "blloqe", }, { "глина", "bahno", "Lehmfläche", "άÏγιλος", "clay", NULL, NULL, "arcilla", "argile", "argilla", "oneuku", "glina", "lama", NULL, NULL, "глина", "íl", "argjil", }, { "чакъл", "Å¡tÄ›rk", "Schuttfläche", "χαλάσματα", "debris", NULL, NULL, "derrubios", "débris", "detriti", "otaota", "żwir", "escombros", NULL, NULL, "щебень", "Å¡trk", "mbetje-gurresh", }, { "каменен водопад", "sintrové náteky", "flächiger Sinter", "σταλαγμιτικό υλικό δαπέδου", "flowstone", NULL, NULL, "concreción", "concrétion", "concrezione", NULL, NULL, "escorrimento", NULL, NULL, "натечный каÑкад", "sintrové náteky", "gurre-rrjedhes", }, { "лед", "led", "Eisfläche", "πάγος", "ice", NULL, NULL, "hielo", "glace", "ghiaccio", "kÅpaka", "lód", "gelo", NULL, NULL, "лёд", "ľad", "akull", }, { "пещерно млÑко", "nickamínek", "Bergmilch", "γάλα σπηλαίου", "moonmilk", NULL, NULL, NULL, "mondmilch", "moonmilk", NULL, NULL, NULL, NULL, NULL, "лунное молоко", "náteky mäkkého sintra", "qumesht-hena", }, { "камъчета", "valouny", "Kiesfläche", "χαλίκια", "pebbles", NULL, NULL, "cantos rodados", "galets/pierres", "ciotoli", "nga kÅhatu iti", "okrÄ™glaki", "seixos", NULL, NULL, "галька", "okrúhliaky", "gurralece", }, { "пÑÑък", "písek", "Sandfläche", "άμμος", "sand", NULL, NULL, "arena", "sable", "sabbia", "onepÅ«", "piasek", "areia", NULL, NULL, "пеÑок", "piesok", "rane", }, { "ÑнÑг", "sníh", "Schneefläche", "χιόνι", "snow", NULL, NULL, "nieve", "neige", "neve", "huka", "Å›nieg", "neve", NULL, NULL, "Ñнег", "sneh", "bore", }, { "Ñифон", "sifon", "Siphonfläche", "σιφόνι", "sump", NULL, NULL, "sifón", "siphon", "sifone", "kari a wai", "syfon", "sifão", NULL, NULL, "Ñифон", "zatopená plocha (sifón)", "sifoni", }, { "вода", "vodní plocha", "Wasserfläche", "νεÏÏŒ", "water", NULL, NULL, "agua", "eau", "acqua", "wai", "powierzchnia wody", "água", NULL, NULL, "вода", "vodná plocha", "uje", }, { "граница", "ohraniÄení", "Begrenzung", "άκÏη", "border", NULL, NULL, "límite", "bord", "bordo", "rohe", "granica", "borda", NULL, NULL, "граница", "ohraniÄenie", "kufiri", }, { "предполагаема граница", "pÅ™edpokládané ohraniÄení", "geschätzte Begrenzung", "υποθετική άκÏη", "presumed border", NULL, NULL, "límite supuesto", "bord, supposé", "bordo presunto", "rohe whakaaringa whakaaro", "niewidoczna granica", "borda presumida", NULL, NULL, "Ð¿Ñ€ÐµÐ´Ð¿Ð¾Ð»Ð°Ð³Ð°ÐµÐ¼Ð°Ñ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ð°", "predpokladané ohraniÄenie", "kufij I supozuar", }, { "временна граница", "nestálé ohraniÄení", "vorübergehende Begrenzung", "Ï€ÏοσωÏινή άκÏη", "temporary border", NULL, NULL, "límite temporal", "bord, temporaire", "bordo temporaneo", "rohe mo te wÄ", "tymczasowa granica", "borda temporária", NULL, NULL, "Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ð°", "nestále ohraniÄenie", "kufij i perkohshem", }, { "видима граница", "ohraniÄení", "sichtbare Begrenzung", "άκÏη", "border", NULL, NULL, "límite", "bord", "bordo", "rohe", "granica", "borda", NULL, NULL, "Ð²Ð¸Ð´Ð¸Ð¼Ð°Ñ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ð°", "ohraniÄenie", "vije kufiri-e dukshme", }, { "меандър, канал в тавана", "stropní meandr", "Deckenmäander", "μαίανδÏος οÏοφής", "ceiling meander", NULL, NULL, "meandro inverso", "méandre de plafond", "canale di volta", "kopiko tuanui", "meander w stropie", "meandro no teto", "meandro no teto", "meandro no tecto", "меандр, канал в потолке", "stropný meander", "rrjedhe uji gjarperore ne tavan", }, { "ниша в тавана", "zmÄ›na výšky stropu", "Deckenstufe", "σκαλοπάτι οÏοφής", "ceiling step", NULL, NULL, "resalte inverso", "marche de plafond", "gradino a soffitto", "tapuae ki te tuanui", "zmiana wysokoÅ›ci stropu", "degrau no teto", "degrau no teto", "degrau no tecto", "уÑтуп потолка", "zmena výšky stropu", "shkalle ne tavan", }, { "комин", "komín", "Schlot", "καμινάδα", "chimney", NULL, NULL, "chimenea", "cheminée", "camino", "tumera", "komin", "chaminé", NULL, NULL, "труба", "komín", "oxhak", }, { "контур", "vrstevnice", "Höhenlinie", "ισοϋψής", "contour", NULL, NULL, "contorno", "contour", "contorno", "koru", "poziomica", "contorno", NULL, NULL, "контур", "vrstevnica", "kontura", }, { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, }, { "меандър, канал в пода", "meandr ve dnÄ›", "Bodenmäander", "μαίανδÏος δαπέδου", "floor meander", NULL, NULL, "meandro", "méandre au sol", "meandro", "kopiko", "meander w dnie", "meandro no piso", NULL, NULL, "меандр, канал в полу", "meander v dne", "rrjedhe uji gjarperore", }, { "праг", "stupeň", "Bodenstufe", "σκαλοπάτι", "floor step", NULL, NULL, "resalte", "marche", "gradino", "tapuae", "próg", "degrau", NULL, NULL, "уÑтуп пола", "stupeň", "shkalle ne dysheme", }, { "каменен водопад", "sintrové náteky", "flächiger Sinter", "σταλαγμιτικό υλικό δαπέδου", "flowstone", NULL, NULL, "concreción", "concrétion", "concrezione", "pari kÅhatu", "nacieki", "escorrimento", NULL, NULL, "натечный каÑкад", "sintrové náteky", "gurre-rrjedhes", }, { "наклон на галериÑта", "sklon chodby", "Gefälle", "κλίση στοάς", "passage gradient", NULL, NULL, "gradiente", "pente", "scivolo", "heke", "nachylenie korytarza", "declividade da galeria", NULL, NULL, "уклон хода", "sklon chodby", "pjertesia e kalimit", }, { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, }, { "етикет", "pojmenování", "Beschriftung", "πεÏιγÏαφή", "label", NULL, NULL, "etiqueta", "libellé", "etichetta", "ingoa", "nazwa", "indicação", NULL, NULL, "текÑÑ‚Ð¾Ð²Ð°Ñ Ð¼ÐµÑ‚ÐºÐ°", "pomenovanie", "mbishkrim", }, { "Ñвързване на карти", "spojení map", "zusammenhängende Pläne", "ένωση χαÏτών", "map connection", NULL, NULL, NULL, "jonction de carte", "riporto di mappa", "mahere whenua ki te hui", "połączenie map", NULL, NULL, NULL, "Ð»Ð¸Ð½Ð¸Ñ Ð²Ñ‹Ð½Ð¾Ñа", "prepojenie máp", "lidhjet ne harta", }, { "пещерно млÑко", "nickamínek", "Bergmilch", "γάλα σπηλαίου", "moonmilk", NULL, NULL, NULL, "mondmilch", "moonmilk", "mirika marama", "miÄ™kkie nacieki", NULL, NULL, NULL, "лунное молоко", "náteky mäkkého sintra", "qumesht-hena", }, { "Ñкална площадка", "pÅ™evis", "Überhang", "Ï€Ïοέκταση οÏοφής", "overhang", NULL, NULL, "extraplomo", "surplomb", "sporgenza", "tauwharenga", "przewieszka", "projeção", "projeção", "projecção", "навиÑание потолка", "previs", "varese", }, { "кладенец", "propast", "Schacht", "πηγάδι", "pitch", "pitch", "pit", "pozo", "puits", "pozzo", "tupari", "studnia", "desnível", NULL, NULL, "колодец", "priepasÅ¥", "ngjitje", }, { "външен ръб на камък", "kameny", "Umriss eines Felsens", "πεÏίγÏαμμα βÏάχου", "rock border", NULL, NULL, "contorno bloque", "bord d’un rocher", "bordo masso", "rohe kÅhatu", "obrys kamienia", "lateral da rocha", NULL, NULL, "внешний кромка глыбы", "obrys kameňa", "kufij shkembinjsh", }, { "вътрешен ръб на камък", "hrany kamenů", "Struktur eines Felsens", "άκÏη βÏάχου", "rock edges", NULL, NULL, "arista bloque", "arête d’un rocher", "spigolo masso", "mata kohatu", "krawÄ™dzie kamienia", "bordas da rocha", NULL, NULL, "внутреннÑÑ ÐºÑ€Ð¾Ð¼ÐºÐ° глыбы", "hrany kameňa", "skaji I shkembit", }, { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, }, { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, }, { "напречно Ñечение", "příÄný Å™ez", "Schnittlinie", "τομή", "cross-section", NULL, NULL, "sección", "section", "sezione trasversale", "taha papahanga", "przekrój", "corte", NULL, NULL, "выноÑÐ½Ð°Ñ Ð»Ð¸Ð½Ð¸Ñ ÑечениÑ", "prieÄny rez", "kryq-ndarje", }, { "Ñклон", "svah", "Hangform", "κλίση", "slope", NULL, NULL, "pendiente", "pente", "scivolo", "tupari", "pochyÅ‚a powierzchnia", "declive", NULL, NULL, "Ñклон", "Å¡ikmá plocha", "breg", }, { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, }, { "антена", "polygonový tah", "Messzug", "γÏαμμή χαÏτογÏάφησης", "survey lines", NULL, NULL, "poligonal", "visée topo", "poligonale", "ruri rÄrangi", "ciÄ…g pomiarowy", "linha de topografia", NULL, NULL, "нитка хода", "polygónový Å¥ah", "vijat matese-vrojtuese", }, { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, }, { "Ñтена", "stÄ›na", "Wand", "τοίχος", "wall", NULL, NULL, "pared", "mur", "parete", "tarÄ", "Å›ciana", "parede", NULL, NULL, "Ñтена", "stena", "muri", }, { "Ñтена (оÑновна Ñкала)", "stÄ›na", "Wand zum Deckgebirge", "τοίχος", "wall", NULL, NULL, "pared", "mur", "roccia", "tarÄ", "Å›ciana", "parede", NULL, NULL, "Ñтена", "stena", "shkembi-muri", }, { "Ñтена - блокаж", "zával", "Wand aus Versturz", "ογκόλιθοι", "blocks, breakdown", NULL, NULL, "bloques", "effrondrement", "massi", "pakaru", "Å›ciana utworzona przez zawalisko", "desmoronamento", NULL, NULL, "глыбы", "stena tvorená závalom", "blloqe", }, { "глина", "bahno", "Wand aus Lehm", "άÏγιλος", "clay", NULL, NULL, "arcilla", "argile", "argilla", "oneuku", "Å›ciana z gliny", "lama", NULL, NULL, "глина", "stena tvorená ílom", "argjil", }, { "чакъл", "Å¡tÄ›rk", "Wand aus Schutt", "χαλάσματα", "debris", NULL, NULL, "derrubios", "débris de roche", "detriti", "otaota", "Å›ciana utworzona przez żwir", "escombros", NULL, NULL, "щебень", "stena tvorená suÅ¥ou", "depozitime/mbetje gurresh", }, { NULL, NULL, "Wand aus Sinter", NULL, "flowstone wall", NULL, NULL, NULL, NULL, "colata", "tÄra a pari kÅhatu", "Å›ciana z nacieków", NULL, NULL, NULL, NULL, "stena tvorená sintrom", NULL, }, { "лед/фирн", "led", "Wand aus Eis", "πάγος", "ice", NULL, NULL, "hielo", "glace", "ghiaccio", "kÅpaka", "Å›ciana z lodu", "gelo", NULL, NULL, "лед, фирн", "stena tvorená ľadom", "akull", }, { NULL, NULL, "Wand aus Bergmilch", NULL, "moonmilk wall", NULL, NULL, NULL, NULL, "moonmilk", "tÄra a mirika marama", "Å›ciana z miÄ™kkich nacieków", NULL, NULL, NULL, NULL, "stena tvorená mäkkým sintrom", NULL, }, { NULL, NULL, "überlagerter Wandverlauf", NULL, "overlying wall", NULL, NULL, NULL, NULL, "parete:sovrastante", "tÄra ki runga", "Å›ciana poÅ‚ożona wyżej", NULL, NULL, NULL, NULL, "stena vyššej úrovne", NULL, }, { "камъчета", "valouny", "Wand aus Kies", "χαλίκια", "pebbles", NULL, NULL, "cantos rodados", "cailloux", "ciotoli", "nga kÅhatu iti", "Å›ciana utworzona przez okrÄ™glaki", "seixos", NULL, NULL, "галька", "stena tvorená okruhliakmi", "gurralece", }, { NULL, NULL, "Eingangsschacht", NULL, "entrance pit", NULL, NULL, NULL, NULL, "parete:pozzo", "rua", "studnia wstÄ™pna", NULL, NULL, NULL, NULL, "vstupná priepasÅ¥", NULL, }, { "предполагаема Ñтена", "pÅ™edpokládaná stÄ›na", "Wand geschätzt", "τοίχος υποθετικός", "presumed wall", NULL, NULL, "pared supuesta", "mur supposé", "parete:presunta", "tÄra whakaaro", "niewidoczna Å›ciana", "parede presumida", NULL, NULL, "Ð¿Ñ€ÐµÐ´Ð¿Ð¾Ð»Ð¾Ð³Ð°ÐµÐ¼Ð°Ñ Ñтена", "predpokladaná stena", "muri I supozuar", }, { "пÑÑък", "písek", "Wand aus Sand", "άμμος", "sand", NULL, NULL, "arena", "sable", "sabbia", "onepÅ«", "Å›ciana utworzona przez piasek", "areia", NULL, NULL, "пеÑок", "stena tvorená pieskom", "rane", }, { "по-ниÑко разположена Ñтена", "stÄ›na nižší úrovnÄ›", "Wand unterlagernder Gang", "υποκείμενος τοίχος", "underlying wall", NULL, NULL, "pared subyacente", "mur sousjacent", "parete:sottostante", "tÄra ki raro", "Å›ciana poÅ‚ożona niżej", "parede subjacente", NULL, NULL, "нижераÑÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð½Ð°Ñ Ñтена", "stena nižšej úrovne", "muri I shtrire", }, { "окомерна Ñкица на Ñтените", "nezaměřená stÄ›na", "Wand unvermessen", "τοίχος (μη χαÏτογÏαφημένος)", "unsurveyed wall", NULL, NULL, "pared no topografiada", "mur non topographié", "parete:stimata", "ka rÅ«ri tÄra", "Å›ciana nie pomierzona", "parede não-topografada", NULL, NULL, "Ð³Ð»Ð°Ð·Ð¾Ð¼ÐµÑ€Ð½Ð°Ñ Ñъемка Ñтен", "nezameraná stena", "muri I pamatur", }, { "водно течение", "vodní tok", "Gerinne", "υδÏοÏÏοή", "water flow", NULL, NULL, "curso agua", "rivière", "corso d'acqua", "wairere", "ciek wodny", "fluxo de água", NULL, NULL, "водоток", "vodný tok", "rrjedhe uji", }, { "предполагаемо водно течение", "pÅ™edpokládaný vodní tok", "vermutetes Gerinne", "υποτιθέμενη υδÏοÏÏοή", "conjectural water flow", NULL, NULL, "curso agua supuesto", "rivière, conjoncturelle", "corso d'acqua presunto", "wairere a pÄtai", "przewidywany ciek wodny", "fluxo de água suposto", NULL, NULL, "предполагаемый водоток", "predpokladaný vodný tok", "rrjedhe uji e supozuar", }, { "периодично водно течение", "obÄasný vodní tok", "zeitweises Gerinne", "διακοπτόμενη υδÏοÏÏοή", "intermittent water flow", NULL, NULL, "curso agua intermitente", "rivière, intermittente", "corso d'acqua temporaneo", "wairere taumutumutu", "okresowy ciek wodny", "fluxo de água intermitente", NULL, NULL, "непоÑтоÑнный водоток", "obÄasný vodný tok", "rrjedhe uji me force", }, { "поÑтоÑнно водно течение", "vodní tok", "ständiges Gerinne", "μόνιμη υδÏοÏÏοή", "water flow", NULL, NULL, "curso agua", "rivière, permanente", "corso d'acqua permanente", "wairere", "ciek wodny", "fluxo de água permanente", NULL, NULL, "поÑтоÑнный водоток", "vodný tok", "rrjedhe uji e perhershme", }, { "въздушно течение", "průvan", "Luftzug", "Ïοή αέÏα", "air draught", NULL, NULL, "corriente aire", "courant d’air", "corrente d'aria", "tawhiri", "przewiew", "presença de vento", NULL, NULL, "ток воздуха", "prievan", "rrymim i ajrit", }, { "летен въздушно течение", "letní průvan", "Luftzug im Sommer", "θεÏινή Ïοή αέÏα", "summer air draught", NULL, NULL, NULL, "courant d’air d’été", "circolazione estiva", "tawhiri a raumati", "przewiew w lecie", NULL, NULL, NULL, "ток воздуха летний", "letný prievan", "rrymim ajri-veror", }, { "зимен въздушно течение", "zimní průvan", "Luftzug im Winter", "χειμεÏινή Ïοή αέÏα", "winter air draught", NULL, NULL, NULL, "courant d’air d’hiver", "circolazione invernale", "tawhiri a takurua", "przewiew w zimie", NULL, NULL, NULL, "ток воздуха зимний", "zimný prievan", "rrymim ajri-dimeror", }, { "н.м. виÑочина", "nadmoÅ™ská výška bodu v chodbÄ›", "Höhe über Koordinatenursprung", "Ïψος", "altitude", NULL, NULL, "altura", "altitude", "quota", "teitei, tiketike", "wysokość punktu pomiarowego npm", "altura", NULL, NULL, "выÑÐ¾Ñ‚Ð½Ð°Ñ Ð¾Ñ‚Ð¼ÐµÑ‚ÐºÐ°", "nadmorská výška bodu v chodbe", "lartesia mbidetare", }, { "анаÑтомоза", "anastomóza", "Anastomose", "αναστόμωση", "anastomosis", NULL, NULL, "anastomosis", "anastomose", "anastomosi", "peka hono", "anastomoza", "anastomose", NULL, NULL, "анаÑтомозиÑ", "anastomóza", "anastomosa(kuartz)", }, { "закрепване", "kotvení", "Seilbefestigung", "αγκÏÏωση", "anchor", NULL, NULL, "anclaje", "ancrage", "ancoraggio", "punga", "punkt asekuracyjny", "ancoragem", NULL, NULL, "ИТО", "kotvenie", "pike-sigurimi", }, { "арагонит", "aragonit", "Aragonit", "αÏαγονίτης", "aragonite", NULL, NULL, "aragonito", "aragonite", "aragonite", "pÄkeho tuarua", "aragonit", "aragonita", "aragonita", "aragonite", "арагонит", "aragonit", "aragonite", }, { "археологичеÑка находка", "archeologické nálezy", "archäologischer Fund", "αÏχαιολογικό εÏÏημα", "archaeological material", NULL, NULL, "yacimiento (arq)", "matériel archéo", "materiale archeologico", "taonga o nehe", "znaleziska archeologiczne", "material arqueológico", NULL, NULL, "археологичеÑÐºÐ°Ñ Ð½Ð°Ñ…Ð¾Ð´ÐºÐ°", "archeologické nálezy", "material arkeologjik", }, { "оÑновна Ñкала", "pevná skála", "Deckgebirge", "πέτÏωμα", "bedrock", NULL, NULL, "roca madre", "roche", "roccia", "koiwi a papa", "lita skaÅ‚a", "rocha encaixante", NULL, NULL, "ÐºÐ¾Ñ€ÐµÐ½Ð½Ð°Ñ Ð¿Ð¾Ñ€Ð¾Ð´Ð°", "pevná skala", "shtrat shkembi", }, { "камъни, блокаж", "kamenné bloky", "Blöcke", "ογκόλιθοι", "blocks, breakdown", NULL, NULL, "bloques", "blocs", "massi", "pakaru", "kamienne bloki", "blocos, desmoronamento", NULL, NULL, "глыбы, завал", "kamenné bloky", "blloqe, shembje", }, { "затворено от Ñрутище", "zavalený konec", "Fortsetzung verstürzt", "κλείσιμο στοάς λόγο χαλάσματος", "breakdown choke", NULL, NULL, "colmatado por derrumbe", "trémie", "chiude su frana", "nati pakaru", "koniec zawalony", "obstrução por desmoronamento", NULL, NULL, "блокировано обвалом", "zavalený koniec", "gurre rrjedhes-fund", }, { "моÑÑ‚", "most", "Brücke", "γέφυÏα", "bridge", NULL, NULL, "puente roca", "pont", "ponte di roccia", "piriti", "most", "ponte", NULL, NULL, "моÑÑ‚", "most", "ure", }, { "лагер", "bivak", "Biwak", "κατασκήνωση", "camp", NULL, NULL, "campamento", "camp", "campo", "topuni", "biwak", "acampamento", NULL, NULL, "ПБЛ", "bivak", "vend-pushim", }, { "пещерен биÑер", "jeskynní perly", "Höhlenperle", "μαÏγαÏιτάÏι των σπηλαίων", "cave pearl", NULL, NULL, "perla de caverna", "perle des cavernes", "pisolite", "ana kahurangi", "perÅ‚y jaskiniowe", "pérolas", "pérolas", "pérolas de Gruta", "пещерный жемчуг", "jaskynné perly", "margaritar te shpelles", }, { "глина", "bahno", "Lehm", "άÏγιλος", "clay", NULL, NULL, "arcilla", "argile", "argilla", "oneuku", "glina", "lama", NULL, NULL, "глина", "íl", "argjil", }, { NULL, NULL, "Fortsetzung verlehmt", NULL, "clay choke", NULL, NULL, NULL, NULL, "chiude su riempimento", "uku pari", "koniec zamkniÄ™ty glinÄ…", NULL, NULL, NULL, NULL, "koniec uzavretý ílom", NULL, }, { NULL, NULL, "Lehmbäumchen", NULL, "clay tree", NULL, NULL, NULL, NULL, "pini d'argilla", "rakau oneuku", NULL, NULL, NULL, NULL, NULL, NULL, NULL, }, { "възможно продължение", "možné pokraÄování", "Fortsetzung", "πιθανή συνέχεια", "possible continuation", NULL, NULL, "continuación", "suite possible", "possibile prosecuzione", "roanga taea", "możliwa kontynuacja", "possível continuação", NULL, NULL, "возможное продолжение", "možné pokraÄovanie", "vazhdim I mundshem", }, { "криÑтал", "krystal", "Kristall", "κÏÏσταλλο", "crystal", NULL, NULL, "cristal", "cristaux", "cristallo", "kohatu piata", "krysztaÅ‚", "cristal", NULL, NULL, "криÑталлы", "kryÅ¡tál", "kristale", }, { "драпериÑ", "sintrové záclony", "Sinterfahne", "κουÏτίνα", "curtain", NULL, NULL, "cortina", "rideau", "cortina", "araia", "draperie naciekowe", "cortina", NULL, NULL, "натечный занавеÑ", "sintrové záclony", "perde", }, { "дата на наблюдението", "datum pozorování", "Datum", "ημεÏομηνία", "date of observation", NULL, NULL, "fecha", "date", "data d'osservazione", "rÄ o te titiro", "data obserwacji", "data de observação", NULL, NULL, "дата наблюдениÑ", "dátum pozorovania", "data e vrojtimit", }, { "чакъл", "Å¡tÄ›rk", "Schutt", "χαλάσματα", "debris", NULL, NULL, "derrubios", "débris", "detriti", "otaota", "żwir", "escombros", NULL, NULL, "щебень", "sutina", "mbetje-mbeturina", }, { "изкоп", "sonda", "Grabung", "διάνοιξη", "dig", NULL, NULL, NULL, "désobstruction", "disostruzione", "kari", "wykop", NULL, NULL, NULL, NULL, "sonda", "mihje", }, { "размери на галериÑта", "rozmÄ›ry", "Ausdehnung", "διαστάσεις", "dimensions", NULL, NULL, "dimensiones", "proportions", "dimensione", "rahinga, meiha", "rozmiary", "dimensões", NULL, NULL, "размеры хода", "rozmery", "dimenzionet", }, { "диÑк", "disk", "Diskus", "δίσκος", "disk", NULL, NULL, "disco", "disque", "disco", "kiwhi", "dysk", "disco", NULL, NULL, "диÑк", "disk", "pllake", }, { "вход", "vchod", "Eingang", "είσοδος", "entrance", NULL, NULL, "boca", "entrée", "ingresso", "ana ngutu", "wejÅ›cie", "entrada", NULL, NULL, "вход", "vchod", "hyrja", }, { "Ñтационарна Ñтълба", "pevný žebřík", "feste Leiter", "μόνιμη σκάλα", "fixed ladder", NULL, NULL, "escala fija", "échelle fixe", "scala fissa", "arawhata", "sztywna drabinka", "escada fixa", NULL, NULL, "жеÑÑ‚ÐºÐ°Ñ Ð»ÐµÑтница", "fixný rebrík", "shkalle fikse", }, { "въздушно течение", "průvan", "Luftzug", "Ïοή αέÏα", "air draught", NULL, NULL, "corriente aire", "courant d’air", "corrente d'aria", "tawhiri", "przewiew", "presença de vento", NULL, NULL, "ток воздуха", "prievan", "rrymim i ajrit", }, { NULL, NULL, NULL, NULL, "arch", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "skalný oblúk", NULL, }, { "възможно продължение", "možné pokraÄování", "Fortsetzung", "πιθανή συνέχεια", "possible continuation", NULL, NULL, "continuación", "suite possible", "possibile prosecuzione", "roanga taea", "możliwa kontynuacja", "possível continuação", NULL, NULL, "возможное продолжение", "možné pokraÄovanie", "vazhdim I mundshem", }, { "изкоп", "sonda", "Grabung", "διάνοιξη", "dig", NULL, NULL, NULL, "désobstruction", "disostruzione", "kari", "wykop", NULL, NULL, NULL, NULL, "sonda", "mihje", }, { NULL, "závrt", NULL, NULL, "doline", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "závrt", NULL, }, { "вход", "vchod", "Eingang", "είσοδος", "entrance", NULL, NULL, "boca", "entrée", "ingresso", "ana ngutu", "wejÅ›cie", "entrada", NULL, NULL, "вход", "vchod", "hyrja", }, { "Ñкална площадка", "pÅ™evis", "Überhang", "Ï€Ïοέκταση οÏοφής", "overhang", NULL, NULL, "extraplomo", "surplomb", "sporgenza", "tauwharenga", "przewieszka", "projeção", "projeção", "projecção", "навиÑание потолка", "previs", "varese", }, { "понор", "ponor", "Schluckloch", "καταβόθÏα", "sink", NULL, NULL, "sumidero", "perte", "perdita", "tapoko", "ponor", "sumidouro", NULL, NULL, "Ñток", "ponor", "pus", }, { "извор", "vývÄ›r", "Quelle", "πηγή", "spring", NULL, NULL, "surgencia", "source", "sorgente", "waipuna", "wywierzysko", "nascente", NULL, NULL, "иÑток", "výver", "burim", }, { "натек", "sintr", "flächiger Sinter", "σταλαγμιτικό υλικό δαπέδου", "flowstone", NULL, NULL, "concreción", "concrétions", "concrezione", "pari kÅhatu", "nacieki", "escorrimento", NULL, NULL, "натек", "sinter", "gurre-rrjedhes", }, { "блокирано от натеци", "zasintrovaný konec", "Fortsetzung zugesintert", "κλείσιμο στοάς λόγο ÏƒÏ„Î±Î»Î±Î³Î¼Î¹Ï„Î¹ÎºÎ¿Ï Î±Ï€Î¿Î¸Î­Î¼Î±Ï„Î¿Ï‚", "flowstone choke", NULL, NULL, "colmatado por concreción", "trémie calcifiée", "chiude su colata", "nati pari kÅhatu", "koniec zamkniÄ™ty naciekami", "obstrução por escorrimento", NULL, NULL, "блокировано натеками", "zasintrený koniec", "mbyllje me gurre-rrjedhes", }, { "карни жлебове", "píšťaly", "Kolk", "αυλάκι διάβÏωσης", "flute", NULL, NULL, "canaleta", "marmites", "scanalatura", "koauau", "marmity", "marcas de fluxo", NULL, NULL, "канавки", "píšťaly", "flauta", }, { "наклон на галериÑта", "sklon chodby", "Gefälle", "κλίση στοάς", "passage gradient", NULL, NULL, "gradiente", "pente", "scivolo", "harapaki putanga", "nachylenie korytarza", "declividade da galeria", NULL, NULL, "уклон хода", "sklon chodby", "pjertesia e kalimit", }, { "гуано", "guano", "Guano", "γκουανό (πεÏιττώματα νυχτεÏίδων)", "guano", NULL, NULL, "guano", "guano", "guano", "tutae", "guano", "guano", NULL, NULL, "гуано", "guáno", "jashteqitje e lakuriqeve-guano", }, { "гипÑ", "sádrovec", "Gips", "γÏψος", "gypsum", NULL, NULL, "yeso", "gypse", "gesso", "tote", "gips", "gipsita", NULL, NULL, "гипÑ", "sádrovec", "gjips", }, { "гипÑово цвете", "sádrovcový kvÄ›t", "Gipsblume", "άνθος γÏψου", "gypsum flower", NULL, NULL, "flor yeso", "fleur de gypse", "fiore di gesso", "putiputi tote", "gipsowy kwiat", "flor de gipsita", NULL, NULL, "гипÑовые цветы", "sádrovcový kvet", "lule gjipsi", }, { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, }, { "виÑочина на праг/комин/кладенец", "výška stupnÄ›/komínu/hloubka propasti", "Höhe der Stufe oder des Schlotes oder Tiefe des Schachts", "Ïψος σκαλοπατιοÏ/καμινάδας ή βάθος πηγαδιοÏ", "floor step/chimney/pit height/depth", NULL, NULL, "altura resalte/chimenea/profundidad pozo", "hauteur d’une marche/d’une cheminée/profondeur", "altezza", "papa tapuae/tumera/teitei rua/hÅhonu", "wysokość progu/komina/głębokość studni", "altura do chão para degrau/chaminé/desnível", NULL, NULL, "выÑота уÑтупа/трубы/колодца", "výška/hĺbka stupňa/komína", "lartesia e shkalles ne dysheme/oxhaku/thellesia e leshimit", }, { "Дълбочина на кладенец", "hloubka propasti", "Tiefe des Schachts", "βάθος πηγαδιοÏ", "pit depth", NULL, NULL, "profundidad pozo", "profondeur", "prodondità pozzo", "rua hÅhonu", "głębokosc studni", "profundidade do desnível", NULL, NULL, "выÑота колодца", "hĺbka priepasti", "thellesia e leshimit", }, { "виÑочина на комин", "výška komínu", "Höhe des Schlotes", "Ïψος καμινάδας", "chimney height", NULL, NULL, "altura chimenea", "hauteur d’une cheminée", "altezza camino", "teitei tumera", "wysokość komina", "altura da chaminé", NULL, NULL, "выÑота трубы", "výška komína", "lartesia e oxhakut", }, { "виÑочина на ниша в тавана", "výška stupnÄ›", "Höhe der Bodenstufe", "Ïψος σκαλοπατιοÏ", "floor step height", NULL, NULL, "altura resalte", "hauteur d’une marche", "altezza camino", "teitei papa tapuae", "wysokość progu", "altura do degrau no chão", NULL, NULL, "выÑота уÑтупа", "výška stupňa", "lartesia e shkalles se dyshemes", }, { "хеликтити", "heliktit", "Excentrique", "ελικτίτης", "helictite", NULL, NULL, "excéntrica", "excentrique/hélictite", "eccentrica", "pÄkeho torotoro", "heliktyt", "helictite", "helictite", "excêntrica", "геликтиты", "heliktit", "heliktite", }, { "лед", "led", "Eis", "πάγος", "ice", NULL, NULL, "hielo", "glace", "ghiaccio", "kÅpaka", "lód", "gelo", NULL, NULL, "лёд", "ľad", "akull", }, { NULL, NULL, "Eissäule", NULL, "ice pillar", NULL, NULL, NULL, NULL, "colonna di ghiaccio", "pou KÅpaka", "lodowy stalagnat", NULL, NULL, NULL, NULL, "ľadový stalagnát", NULL, }, { NULL, NULL, "Eisstalaktit", NULL, "ice stalactite", NULL, NULL, NULL, NULL, "stalattite di ghiaccio", "kÅpaka ki te haere ki runga", "lodowy stalaktyt", NULL, NULL, NULL, NULL, "ľadový stalaktit", NULL, }, { NULL, NULL, "Eisstalagmit", NULL, "ice stalagmite", NULL, NULL, NULL, NULL, "stalagmite di ghiaccio", "kÅpaka ki te haere ki raro", "lodowy stalagmit", NULL, NULL, NULL, NULL, "ľadový stalagmit", NULL, }, { "кари", "Å¡krapy", "Karren", "κάÏÏεν - γυμνός καÏστικοποιημένος βÏάχος", "karren", NULL, NULL, "lapiaz", "lapiez", "karren", "awaawa", "żłobki krasowe", "lapiás", NULL, NULL, "карры", "Å¡krapy", "karreni", }, { "етикет", "pojmenování", "Beschriftung", "πεÏιγÏαφή", "label", NULL, NULL, "etiqueta", "libellé", "etichetta", "ingoa", "nazwa", "indicação", NULL, NULL, "текÑÑ‚Ð¾Ð²Ð°Ñ Ð¼ÐµÑ‚ÐºÐ°", "pomenovanie", "mbishkrim-etiket", }, { "хоризонтално ÑтеÑнение", "neprůlezné snížení", "Engstelle, zu flach", "κλείσιμο στοάς λόγω χαμηλής οÏοφής", "passage end, low", NULL, NULL, "final bajo", "passage bas", "chiude su laminatoio", "putanga pÄpaku mutunga", "obniżenie nie do przejÅ›cia", "passagem com final baixo", NULL, NULL, "Ð³Ð¾Ñ€Ð¸Ð·Ð¾Ð½Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ ÑƒÐ·Ð¾Ñть", "neprielezné zníženie", "kalim I poshtem-fund", }, { "пещерно млÑко", "nickamínek", "Bergmilch", "γάλα σπηλαίου", "moonmilk", NULL, NULL, "mondmilch", "mondmilch", "moonmilk", "mirika marama", "miÄ™kkie nacieki", "leite-de-lua", NULL, NULL, "лунное молоко", "mäkký sinter", "qumesht-hena", }, { "непроходимо Ñнижаване", "neprůlezné zúžení", "Engstelle, zu schmal", "κλείσιμο στοάς λόγω στενώματος", "passage end, narrow", NULL, NULL, "final estrecho", "passage impénétrable", "chiude su strettoia", "putanga kuiti mutunga", "zwężenie nie do przejÅ›cia", "passagem com final estreito", NULL, NULL, "Ð²ÐµÑ€Ñ‚Ð¸ÐºÐ°Ð»ÑŒÐ½Ð°Ñ ÑƒÐ·Ð¾Ñть", "neprielezné zúženie", "kalim I ngushte-fund", }, { "липÑва екипировка!", "nevystrojené místo", "keine Ausrüstung", "χωÏίς υλικά", "no equipment!", NULL, NULL, "sin equipar", "pas d’équipement", "senza armo", "wahi a taonga mahi kore", "miejsce bez punktu asekuracyjnego", "local sem equipamento", NULL, NULL, "ÑнарÑжение отутÑтвует!", "nevystrojené miesto", "vend pa pajisje", }, { "палеонтологична находка", "paleontologické nálezy", "paläontologischer Fund", "παλαιοντολογικό εÏÏημα", "paleo material", NULL, NULL, "yacimiento (pal)", "matériel paléo", "materiale paleologico", "taiao taonga o nehe", "znaleziska paleontologiczne", "material paleontológico", NULL, NULL, "палео-находка", "paleontologické nálezy", "paleo-material", }, { "виÑочина на галериÑта", "výška chodby", "Raumhöhe", "Ïψος στοάς", "passage height", NULL, NULL, "altura galería", "hauteur du passage", "altezza galleria", "ara teitei", "wysokość korytarza", "altura da galeria", NULL, NULL, "выÑота хода", "výška chodby", "lartesia e kalimit", }, { "виÑочина над и дълбочина под водата", "výška nad i pod hladinou", "Raumhöhe gesamt", "Ïψος και βάθος στοάς πάνω και κάτω από νεÏÏŒ", "height above, depth below water", NULL, NULL, "altura y profundidad respecto nivel del mar", "hauteur au dessous et au dessus de l’eau", "altezza sopra e sotto il livello dell'acqua", "karewa ki runga ki raro", "wysokość korytarza nad powierzchniÄ… wody i głębokość poniżej poziomu wody", "altura acima e profundidade abaixo do nível da água", NULL, NULL, "выÑота над и глубина ниже ÑƒÑ€Ð¾Ð²Ð½Ñ Ð²Ð¾Ð´Ñ‹", "výška nad a hĺbka pod hladinou", "lartesia mbi dhe nen nivelin e ujit", }, { "дълбочина на галериÑта под водата", "výška chodby pod hladinou", "Raumhöhe nach unten", "βάθος στοάς κάτω από νεÏÏŒ", "depth below water level", NULL, NULL, "profundidad bajo nivel del mar", "hauteur en dessous de l’eau", "profondità sotto il livello dell'acqua", "te hÅhunu a karewa ki raro", "wysokość korytarza pod powierzchniÄ… wody", "profundidade abaixo do nível da água", NULL, NULL, "глубина ниже ÑƒÑ€Ð¾Ð²Ð½Ñ Ð²Ð¾Ð´Ñ‹", "hĺbka pod hladinou", "thellesia nen nivelin e ujit", }, { "виÑочина на галериÑта над водата", "výška chodby nad hladinou", "Raumhöhe nach oben", "Ïψος στοάς πάνω από νεÏÏŒ", "height above water level", NULL, NULL, "altura sobre nivel del mar", "hauteur au-dessus de l’eau", "altezza sopra il livello dell'acqua", "te teitei a karewa ki runga", "wysokość korytarza nad powierzchniÄ… wody", "altura acima do nível da água", NULL, NULL, "выÑота над уровнем воды", "výška nad hladinou", "lartesia mbi nivelin e ujit", }, { "виÑочина на галериÑта", "výška chodby", "Raumhöhe", "Ïψος στοάς", "passage height", NULL, NULL, "altura galería", "hauteur du passage", "altezza galleria", "ara teitei", "wysokość korytarza", "altura da galeria", NULL, NULL, "выÑота хода", "výška chodby", "lartesia e kalimit-e pashenuar", }, { "камъчета", "valouny", "Kies", "χαλίκια", "pebbles", NULL, NULL, "cantos rodados", "galets", "ciotoli", "nga kÅhatu iti", "okrÄ™glaki", "seixos", NULL, NULL, "галька", "okruhliaky", "gurralece", }, { "Ñталактон", "stalagnát", "Säule", "κολόνα", "pillar", NULL, NULL, "pilar", "pillier", "colonna", "pou", "stalagnat", "coluna", NULL, NULL, "колонна", "stalagnát", "shtylle", }, { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, }, { "коралити", "pizolity", "Blumenkohlsinter", "μανιτάÏια από σταλαγμιτικό υλικό", "popcorn", NULL, NULL, "coliflor", "choux-fleur", "cavolfiore", "kanga pÄhuuhuu", "pizolity", "couve-flor", NULL, NULL, "коралиты", "pizolity", "palagaqa-kokorroshka", }, { "наÑип", "náplav", "schwimmendes Kalkhäutchen", "σταλαγμιτικό υλικό που επιπλέει", "calcite raft", NULL, NULL, "calcita flotante", "calcite flottante", "calcite flottante", "mÅkihi o kÅhatu hÅhonu", "nanios", "jangada", NULL, NULL, "выÑыпка", "náplav", "trap-skele", }, { "наÑипен конуÑ", "náplavový kužel", "schwimmendes Kalkhäutchen", "σταλαγμιτικός κώνος που επιπλέει", "raft cone", NULL, NULL, "conos", "cone", "calcite flottante", "korere a mÅkihi kÅhatu hÅhonu", "nanios", "cone de jangada", NULL, NULL, "выÑыпной конуÑ", "náplavový kužeľ", "rrjedhe uji konike", }, { "забележка", "poznámka", "Bemerkung", "σχόλιο", "remark", NULL, NULL, "nota", "remarque", "nota", "korero", "uwaga", "anotação", NULL, NULL, "заметка", "poznámka", "shenim", }, { "Ñухо Ñинтрово езеро", "sintrová hrázka", "Sinterbarriere", "Î³ÎºÎ¿Ï…Ï (λιθωματικό φÏάγμα)", "rimstone dam", NULL, NULL, "gour-presa", "gours", "gour", "kÅhatu matatara", "naciekowa przegroda", "travertino", NULL, NULL, "гуры без воды", "sintrová hrádza", "penda guri", }, { "Ñинтрово езеро", "sintrové jezírko", "Sinterbecken", "Î³ÎºÎ¿Ï…Ï (λιθωματική λεκάνη)", "rimstone pool", NULL, NULL, "gour-poza", "gour", "vasca", "kÅhatu kopua wai", "jeziorko naciekowe", "lago travertino", NULL, NULL, "гуры Ñ Ð²Ð¾Ð´Ð¾Ð¹", "sintrové jazierko", "vaska uji", }, { "корени", "koÅ™eny", "Holzreste", "Ïίζες", "root", NULL, NULL, "raíz", "racine", "radice", "pakiaka", "korzenie", "raiz", NULL, NULL, "корни раÑтений", "korene", "rrenje", }, { "въже", "lano", "Seil", "σχοινί", "rope", NULL, NULL, "cuerda", "corde", "corda", "taura", "lina", "corda", NULL, NULL, "Ð»Ð¸Ð½ÐµÐ¹Ð½Ð°Ñ Ð¾Ð¿Ð¾Ñ€Ð°", "lano", "litar", }, { "пещерна Ñтълба", "lanový žebřík", "Drahtseilleiter", "ανεμόσκαλα", "rope ladder", NULL, NULL, "escala", "échelle de corde", "scala di corda", "arawhata taura", "drabinka linowa", "escada de corda", NULL, NULL, "Ð³Ð¸Ð±ÐºÐ°Ñ Ð»ÐµÑтница", "lanový rebrík", "shkalle litari", }, { "пÑÑък", "písek", "Sand", "άμμος", "sand", NULL, NULL, "arena", "sable", "sabbia", "onepÅ«", "piasek", "areia", NULL, NULL, "пеÑок", "piesok", "rane", }, { "фаÑетки", "erozní útvary", "Fließfacette", "σκάλοπ (κενά διάβÏωσης)", "scallop", NULL, NULL, "cavitaciones", "vagues d’érosion (coups de gouge)", "scallop", "anatipa", "formy erozyjne", "marcas de fluxo", NULL, NULL, "фаÑетки", "lastúrovité jamky", "guacat", }, { "мÑÑто на Ñечение", "příÄný Å™ez", "Schnitt", "τομή", "section", NULL, NULL, "sección", "section", "sezione", "roherohenga", "przkrój", "seção", "seção", "secção", "Ñечение", "prieÄny rez", "pike-ndarje", }, { "понор", "ponor", "Schluckloch", "καταβόθÏα", "sink", NULL, NULL, "sumidero", "perte", "perdita", "tapoko", "ponor", "sumidouro", NULL, NULL, "Ñток", "ponor", "pus", }, { "ÑнÑг", "sníh", "Schnee", "χιώνι", "snow", NULL, NULL, "nieve", "neige", "neve", "huka", "Å›nieg", "neve", NULL, NULL, "Ñнег", "sneh", "bore", }, { "цевичен Ñталактит", "brÄka", "Makkaroni", "μακαÏόνια", "soda straw", NULL, NULL, "fistulosa", "fistuleuse", "tubolare", "pÅ« ngote", "nacieki", "canudos", NULL, "tubulares", "Ñталактиты-Ñоломины", "brÄká", "shkopinje sode", }, { "извор", "vývÄ›r", "Quelle", "πηγή", "spring", NULL, NULL, "surgencia", "source", "sorgente", "waipuna", "wywierzysko", "nascente", NULL, NULL, "иÑток", "výver", "burim", }, { "Ñталактит", "stalaktit", "Stalaktit", "σταλακτίτης", "stalactite", NULL, NULL, "estalactita", "stalactite", "stalattite", "kÅhatu ki te haere ki runga", "stalaktyt", "estalactite", NULL, NULL, "Ñталактит", "stalaktit", "stalaktit", }, { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, }, { "Ñталагмит", "stalagmit", "Stalagmit", "σταλαγμίτης", "stalagmite", NULL, NULL, "estalagmita", "stalagmite", "stalagmite", "kÅhatu ki te haere ki raro", "stalagmit", "estalagmite", NULL, NULL, "Ñталагмит", "stalagmit", "stalagmit", }, { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, }, { "реперна точка", "měřiÄský bod", "Messpunkt", "σημείο χαÏτογÏάφησης", "survey station", NULL, NULL, "estación", "station topo", "caposaldo", "kaimataara", "punkt pomiarowy", "base", NULL, NULL, "пикет", "meraÄský bod", "stacioni I matjes", }, { "име на реперна точка", "Äíslo měřiÄského bodu", "Messpunktname", "όνομα σημείου χαÏτογÏάφησης", "survey station name", NULL, NULL, "nombre estacion", "station topo, nom", "node del caposaldo", "kaimatara ingoa", "numer punktu pomiarowego", "nome de base", NULL, NULL, "номер пикета", "Äíslo meraÄského bodu", "emri I stacionit-mates", }, { "реперна точка (Ñтабилизирана)", "měřiÄský bod (stabilizovaný)", "dauerhafter Messpunkt", "μόνιμο σημείο χαÏτογÏάφησης", "fixed survey station", NULL, NULL, "estación (fija)", "station topo, fixe", "caposaldo fisso", "kaimataara whakakÅhatu", "punkt pomiarowy (zastabilizowany)", "base fixa", NULL, NULL, "репер", "meraÄský bod (stabilizovaný)", "stacion mates I palevizshem", }, { "реперна точка (еÑтеÑтвена)", "měřiÄský bod (přírodní)", "natürlicher Messpunkt", "σημείο χαÏτογÏάφησης (φυσικό)", "natural survey station", NULL, NULL, "estación (natural)", "station topo, naturelle", "caposaldo naturale", "kaimataara a papa", "punkt pomiarowy naturalny", "base natural", NULL, NULL, "еÑтеÑÑ‚Ð²ÐµÐ½Ð½Ð°Ñ Ñ‚Ð¾Ñ‡ÐºÐ° привÑзки", "meraÄský bod (prírodný)", "stacion mates natyral", }, { "реперна точка (боÑдиÑана)", "měřiÄský bod (zabarvený)", "farbig markierter Messpunkt", "σημείο χαÏτογÏάφησης (βαμμένο)", "painted survey station", NULL, NULL, "estación (pintada)", "station topo, peinte", "caposaldo verniciato", "kaimataara tohi", "punkt pomiarowy (oznaczony farbÄ…)", "base pintada", NULL, NULL, "нариÑованный пикет", "meraÄský bod (zafarbený)", "stacion mates I ngjyrosur", }, { "временна реперна точка", "měřiÄský bod (nestabilizovaný)", "unmarkierter Messpunkt", "Ï€ÏοσωÏινό σημείο χαÏτογÏάφησης", "temporary survey station", NULL, NULL, "estación topográfica", "station topo temporaire", "caposaldo termporaneo", "kaimataara mo te wÄ", "punkt pomiarowy (niezastabilizowany)", "base temporária", NULL, NULL, "временный пикет", "meraÄský bod (nestabilizovaný)", "stacion mates I perkohshem", }, { "Ñтъпала", "schody", "Stufen", "σκαλοπάτια", "steps", NULL, NULL, "escalones", "marches", "scalini", "nga tapuae", "schody", "degraus", NULL, NULL, "Ñтупени", "schody", "shkalle", }, { "траверÑ", "traverz", "Querung", "Ï„ÏαβέÏσα", "traverse", NULL, NULL, "pasamanos", "traversée", "traverso", "hikoi a tupari", "trawers", "travessia", NULL, NULL, "троллей", "traverz", "kalim anesore", }, { "оÑтанки от раÑтителноÑÑ‚", "zbytky rostlin", "Pflanzenreste", "φυτικά κατάλοιπα", "vegetable debris", NULL, NULL, "detritus vegetales", "débris végétaux", "detriti vegetali", "otaota a hua whenua", "szczÄ…tki roÅ›linne", "restos vegetais", NULL, NULL, "оÑтанки раÑтительноÑти", "zvyÅ¡ky rastlín", "mbetje perimesh", }, { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, }, { "виÑочинна отметка на Ñтената", "nadmoÅ™ská výška bodu na stÄ›nÄ›", "Höhe über Koordinatenursprung", "Ïψος τοίχου", "altitude", NULL, NULL, "altura pared", "altitude", "altezza", "teitei, tiketike", "wysokość punktu pomiarowego npm", "altura", NULL, NULL, "выÑÐ¾Ñ‚Ð½Ð°Ñ Ð¾Ñ‚Ð¼ÐµÑ‚ÐºÐ° Ñтены", "nadmorská výška bodu na stene", "lartesia mbidetare e murit", }, { "повлек", "vápencový povlak", "Wandsinter", "ασβεστίτης τοιχώματος", "wall calcite", NULL, NULL, "calcita", "mur, calcite", "calcite", "tÄra a nga roimata a pakeho", "wapienna powÅ‚oka", "parede de calcita", "parede de calcita", "parede de calcite", "наÑтенный кальцит", "vápencový povlak", "kalcit-muri", }, { "вода", "voda", "Wasser", "νεÏÏŒ", "water", NULL, NULL, "agua", "eau", "acqua", "wai", "woda", "água", NULL, NULL, "вода", "voda", "uje", }, { "водно течение", "vodní tok", "Gerinne", "υδÏοÏÏοή", "water flow", NULL, NULL, "curso agua", "rivière", "corso d'acqua", "wairere", "ciek wodny", "fluxo de água", NULL, NULL, "водоток", "vodný tok", "rrjedhe uji", }, { "непоÑтоÑнно водно течение", "obÄasný vodní tok", "zeitweises Gerinne", "διακοπτόμενη υδÏοÏÏοή", "intermittent water flow", NULL, NULL, "curso agua intermitente", "rivière, intermittente", "corso d'acqua temporaneo", "wairere taumutumutu", "okresowy ciek wodny", "fluxo de água intermitente", NULL, NULL, "непоÑтоÑнный водоток", "obÄasný vodný tok", "rrjedhe uji me force", }, { "палео речно легло", "paleoÅ™eÄiÅ¡tÄ›", "ehemaliges Gerinne", "παλαιουδÏοÏÏοή", "paleo water flow (scallops)", NULL, NULL, "paleocurso agua", "rivière fossile", "paleocorso d'acqua", "wairere nehera", "stary ciek wodny", "paleo-fluxo de água", NULL, NULL, "палео-поток", "paleorieÄisko", "rrjedhe uji e vjeter", }, { "поÑтоÑнно водно течение", "vodní tok", "ständiges Gerinne", "μόνιμη υδÏοÏÏοή", "water flow", NULL, NULL, "curso agua", "rivière, permanente", "corso d'acqua permanente", "wairere", "ciek wodny", "fluxo de água permanente", NULL, NULL, "поÑтоÑнный водоток", "vodný tok", "rrjedhe uji e perhershme", }, { "Гл. картировач", "Kreslil", "Zeichnung", "ΣκαÏίφημα", "Drawn by", NULL, NULL, "Cartografía", "Dessinateur", "Cartografia", "Kaituhi", "rysowaÅ‚", "Desenhada por", NULL, NULL, "ÐšÐ°Ð¼ÐµÑ€Ð°Ð»ÑŒÐ½Ð°Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ°", "Kreslil", "vizatuar nga", }, { "Гл. картировачи", "Kreslili", "Zeichnung", "ΣκαÏίφημα", "Drawn by", NULL, NULL, "Cartografía", "Dessinateurs", "Cartografia", "Kaituhi", "rysowali", "Desenhadas por", NULL, NULL, "ÐšÐ°Ð¼ÐµÑ€Ð°Ð»ÑŒÐ½Ð°Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ°", "Kreslili", "vizatuar nga", }, { "ДенивелациÑ", "PÅ™evýšení", "Niveaudifferenz", "Βάθος", "Depth", NULL, NULL, "Desnivel", "Profondeur", "Profondità", "HÅhonu a ana, RÄ“tÅtanga", "przewyższenie", "Desnível", NULL, NULL, "Глубина", "Prevýšenie", "thellesia", }, { "Дължина", "Délka", "Gesamtlänge", "Μήκος", "Length", NULL, NULL, "Desarrollo", "Longueur", "Sviluppo", "Roa a ana", "dÅ‚ugość", "Extensão", NULL, NULL, "Длина", "Dĺžka", "gjatesia", }, { "ВиÑочинна Ñкала", "NadmoÅ™ské výšky", "Höhe des Titelfeldes", "ΥψομετÏικά", "Altitudes", NULL, NULL, "color (altitud)", "Altitudes", "Profondità", "Teitei, Tiketike", "wysokoÅ›ci npm", "Altitudes", NULL, NULL, "Ð’Ñ‹ÑÐ¾Ñ‚Ð½Ð°Ñ ÑˆÐºÐ°Ð»Ð°", "Nadmorské výšky", "titulli ngjyra-permbajtja-lartesia mbidetare", }, { "Карти", "Mapy", "Karten", "ΧάÏτες", "Maps", NULL, NULL, "color (mapa)", "Cartes", "Mappa", "Mahere whenua", "mapy", "Mapas", NULL, NULL, "Карты", "Mapy", "hartat", }, { "ИзÑледване", "Objevil", "Entdeckung", "ΕξεÏευνητής", "Explored by", NULL, NULL, "Exploración", "Explorateur", "Esplorazione", "Kaipokai whenua", "odkryÅ‚", "Explorada por", NULL, NULL, "ИÑÑледование", "Objavil", "hulumtuar nga", }, { "ИзÑледване", "Objevili", "Entdeckung", "ΕξεÏευνητές", "Explored by", NULL, NULL, "Exploración", "Explorateurs", "Esplorazione", "Kaipokai whenua", "odkryli", "Exploradas por", NULL, NULL, "ИÑÑледование", "Objavili", "hulumtuar nga", }, { "Легенда", "Legenda", "Legende", "Τίτλος", "Legend", NULL, NULL, "Leyenda", "Légende", "Legenda", "Kaiwhakaatu", "legenda", "Legenda", NULL, NULL, "УÑловные обозначениÑ", "Legenda", "permbajtja", }, { "Изглед от горе", "[Náhled horních vrstev]", "Vorschau oben", "[Ï€Ïοεπισκόπηση πάνω]", "[Preview above]", NULL, NULL, "Vista previa superior", "[Prévisualisation au-dessus]", "Anteprima sopra", "Tuhi a ana ki runga", "widok z góry", "[Visualização acima]", NULL, NULL, "[Вид выше]", "[Náhľad horných vrstiev]", "parashiqimi lart", }, { "Изглед от долу", "[Náhled dolních vrstev]", "Vorschau unten", "[Ï€Ïοεπισκόπηση κάτω]", "[Preview below]", NULL, NULL, "Vista previa inferior", "[Prévisualisation au-dessous]", "Anteprima sotto", "Tuhi a ana ki raro", "widok z doÅ‚u", "[Visualização abaixo]", NULL, NULL, "[Вид ниже]", "[Náhľad spodných vrstiev]", "parashiqimi perfundi", }, { "Карта на повърхноÑтта", "[Povrchová mapa]", "Erdoberfläche", "[χάÏτης επιφάνειας]", "[Surface Image]", NULL, NULL, "Mapa superficie", "[Carte extérieure]", "Mappa superficie", "Konohi o te whenua", "mapa powierzchni", "[Mapa de superfície]", NULL, NULL, "[Карта поверхноÑти]", "[Povrchová mapa]", "harta e siperfaqes", }, { "Картирал", "Měřil", "Vermessung", "ΧαÏτογÏαφήθηκε από τον", "Surveyed by", NULL, NULL, "Topografía", "Topographe", "Topografia", "KairÅ«ri", "mierzyÅ‚", "Topografada por", NULL, NULL, "Съемка", "Zameral", "matur nga", }, { "Картирали", "Měřili", "Vermessung", "ΧαÏτογÏαφήθηκε από τους", "Surveyed by", NULL, NULL, "Espeleometría", "Topographes", "Topografia", "KairÅ«ri", "pomierzyli", "Topografadas por", NULL, NULL, "Съемка", "Zamerali", "matur nga", }, { "футове", "ft", "ft", "πόδια", "ft", NULL, NULL, "ft", "ft", "ft", "whÄ«ti", "ft (stopy)", "pés", NULL, NULL, "футов", "ft", "njesia matese-kembe", }, { "м", "m", "m", "μ", "m", NULL, NULL, "m", "m", "m", "mehua", "m (metry)", "m", NULL, NULL, "м", "m", "njesia matese-metri", }, }; therion/thlangdata.h0000644000076400010400000000101712065354312015545 0ustar userAdministrators/** * @file thlangdata.h * Therion language translations module. * * THIS FILE IS GENERATED AUTOMATICALLY, DO NOT MODIFY IT !!! */ enum { THLANG_SYSTEM = -2, THLANG_UNKNOWN = -1, THLANG_BG = 0, THLANG_CZ = 1, THLANG_DE = 2, THLANG_EL = 3, THLANG_EN = 4, THLANG_EN_UK = 5, THLANG_EN_US = 6, THLANG_ES = 7, THLANG_FR = 8, THLANG_IT = 9, THLANG_MI = 10, THLANG_PL = 11, THLANG_PT = 12, THLANG_PT_BR = 13, THLANG_PT_PT = 14, THLANG_RU = 15, THLANG_SK = 16, THLANG_SQ = 17, }; therion/thlayout.cxx0000644000076400010400000020040312043763736015674 0ustar userAdministrators/** * @file thlayout.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thlayout.h" #include "thexception.h" #include "thchenc.h" #include "thdata.h" #include "thparse.h" #include "thinfnan.h" #include "thpdfdata.h" #include "thsymbolset.h" #include "thtflength.h" #include "thlang.h" #include "thcsdata.h" #include "thconfig.h" #include #ifdef THMSVC #include #define getcwd _getcwd #endif enum { TTLDBG_JOINS = 1, TTLDBG_STATIONS = 2, TTLDBG_SCRAPNAMES = 4, TTLDBG_STATIONNAMES = 8, }; thlayout::thlayout() { this->ccode = TT_LAYOUT_CODE_UNKNOWN; this->m_pconfig = NULL; this->def_scale = 0; this->scale = 0.005; this->def_base_scale = 0; this->base_scale = 0.005; this->def_rotate = 0; this->rotate = 0.0; this->def_origin = 0; this->ox = thnan; this->oy = thnan; this->oz = thnan; this->def_size = 0; this->hsize = 0.18; this->vsize = 0.222; this->def_page_setup = 0; this->paphs = 0.21; this->papvs = 0.297; this->paghs = 0.20; this->pagvs = 0.287; this->marls = 0.005; this->marts = 0.005; this->def_overlap = 0; this->overlap = 0.01; this->def_grid_origin = 0; this->gox = thnan; this->goy = thnan; this->goz = thnan; this->def_grid_size = 0; this->gxs = thnan; this->gys = thnan; this->gzs = thnan; this->def_origin_label = 0; this->olx = "0"; this->oly = "0"; this->def_nav_factor = 0; this->navf = 30.0; this->def_nav_size = 0; this->navsx = 2; this->navsy = 2; this->def_own_pages = 0; this->ownp = 0; this->def_title_pages = 0; this->titlep = false; this->def_doc_title = 0; this->doc_title = ""; this->def_doc_comment = 0; this->doc_comment = ""; this->def_doc_author = 0; this->doc_author = ""; this->def_doc_keywords = 0; this->doc_keywords = ""; this->def_doc_subject = 0; this->doc_subject = ""; this->def_excl_pages = 0; this->excl_pages = false; this->excl_list = NULL; this->def_opacity = 0; this->opacity = 0.75; this->def_map_header_bg = 0; this->map_header_bg = false; this->def_grid_coords = 0; this->grid_coords = TT_LAYOUT_GRIDCOORDS_OFF; this->def_surface = 0; this->surface = TT_LAYOUT_SURFACE_OFF; this->def_surface_opacity = 0; this->surface_opacity = 0.75; this->def_north = 0; this->north = TT_LAYOUT_NORTH_TRUE; this->def_transparency = 0; this->transparency = true; this->def_sketches = 0; this->sketches = false; this->def_legend = 0; this->legend = TT_LAYOUT_LEGEND_OFF; this->def_legend_width = 0; this->legend_width = 0.14; this->def_legend_columns = 0; this->legend_columns = 2; this->def_color_legend = 0; this->color_legend = TT_TRUE; this->def_scale_bar = 0; this->scale_bar = -1.0; this->def_map_header = 0; this->map_header = TT_LAYOUT_MAP_HEADER_NE; this->map_header_x = 100.0; this->map_header_y = 0.0; this->def_debug = 0; this->debug = 0; this->def_survey_level = 0; this->survey_level = 0; this->def_max_explos = 0; this->max_explos = -1; this->def_max_topos = 0; this->max_topos = -1; this->def_max_cartos = 0; this->max_cartos = -1; this->def_max_copys = 0; this->max_copys = -1; this->def_explo_lens = 0; this->explo_lens = TT_LAYOUT_LENSTAT_HIDE; this->def_topo_lens = 0; this->topo_lens = TT_LAYOUT_LENSTAT_HIDE; this->def_lang = 0; this->lang = thcfg.get_lang(); this->def_units = 0; this->units = thdeflocale; this->def_layers = 0; this->layers = true; this->def_grid = 0; this->grid = TT_LAYOUT_GRID_OFF; this->def_page_grid = 0; this->page_grid = false; this->def_page_numbers = 0; this->pgsnum = true; this->def_color_labels = 0; this->color_labels = false; this->def_tex_lines = 0; this->first_line = NULL; this->last_line = NULL; this->lock = false; this->first_copy_src = NULL; this->last_copy_src = NULL; this->color_preview_below.R = 0.5; this->color_preview_below.G = 0.5; this->color_preview_below.B = 0.5; this->color_preview_above.R = 0; this->color_preview_above.G = 0; this->color_preview_above.B = 0; this->color_crit = TT_LAYOUT_CCRIT_UNKNOWN; this->color_mode = TT_LAYOUT_CMODE_AUTO; this->color_table = TT_LAYOUT_CTABLE_HSV; } thlayout::~thlayout() { } int thlayout::get_class_id() { return TT_LAYOUT_CMD; } bool thlayout::is(int class_id) { if (class_id == TT_LAYOUT_CMD) return true; else return thdataobject::is(class_id); } int thlayout::get_cmd_nargs() { return 1; } const char * thlayout::get_cmd_end() { return "endlayout"; } const char * thlayout::get_cmd_name() { // insert command name here return "layout"; } thcmd_option_desc thlayout::get_default_cod(int id) { switch (id) { case TT_LAYOUT_ENDCODE: return thcmd_option_desc(id,0); case TT_LAYOUT_NAV_SIZE: case TT_LAYOUT_OVERLAP: case TT_LAYOUT_SCALE: case TT_LAYOUT_SCALE_BAR: case TT_LAYOUT_BASE_SCALE: case TT_LAYOUT_EXCLUDE_PAGES: case TT_LAYOUT_ORIGIN_LABEL: case TT_LAYOUT_SYMBOL_HIDE: case TT_LAYOUT_SYMBOL_SHOW: case TT_LAYOUT_MAP_ITEM: case TT_LAYOUT_COLOR: case TT_LAYOUT_LEGEND_WIDTH: return thcmd_option_desc(id,2); case TT_LAYOUT_SYMBOL_ASSIGN: case TT_LAYOUT_SIZE: case TT_LAYOUT_MAP_HEADER: case TT_LAYOUT_SYMBOL_COLOR: return thcmd_option_desc(id,3); case TT_LAYOUT_ORIGIN: case TT_LAYOUT_MAP_IMAGE: case TT_LAYOUT_GRID_SIZE: case TT_LAYOUT_GRID_ORIGIN: return thcmd_option_desc(id,4); case TT_LAYOUT_PAGE_SETUP: return thcmd_option_desc(id,7); default: return thcmd_option_desc(id); } } thcmd_option_desc thlayout::get_cmd_option_desc(const char * opts) { int id = thmatch_token(opts, thtt_layout_opt); if (id == TT_LAYOUT_UNKNOWN) return thdataobject::get_cmd_option_desc(opts); else return this->get_default_cod(id); } void thlayout_parse_scale(double * scale,char ** args) { double dv; int sv; thparse_double(sv,dv,args[0]); if (sv != TT_SV_NUMBER) ththrow(("invalid number -- %s",args[0])) if (dv <= 0.0) ththrow(("positive number expected -- %s",args[0])) *scale = dv; thparse_double(sv,dv,args[1]); if (sv != TT_SV_NUMBER) ththrow(("invalid number -- %s",args[1])) if (dv <= 0.0) ththrow(("positive number expected -- %s",args[1])) *scale /= dv; if ((*scale > 2.000001e-2) || (*scale < 9.99999e-6)) ththrow(("scale out of range -- %s %s",args[0], args[1])) } void thlayout_parse_rotate(double & rotate, char * rotstr) { thsplit_words(&(thdb.mbuff_tmp), rotstr); int nargs = thdb.mbuff_tmp.get_size(), sv; char ** args = thdb.mbuff_tmp.get_buffer(); thtfangle atf; switch (nargs) { case 2: atf.parse_units(args[1]); case 1: thparse_double(sv, rotate, args[0]); if (sv != TT_SV_NUMBER) ththrow(("invalid rotate specification -- %s", rotstr)) rotate = atf.transform(rotate); break; default: ththrow(("invalid rotate specification -- %s", rotstr)) } } enum { TTL_MAPITEM_CARTO, TTL_MAPITEM_COPYRIGHT, TTL_MAPITEM_EXPLO, TTL_MAPITEM_TOPO, TTL_MAPITEM_EXPLO_LENS, TTL_MAPITEM_TOPO_LENS, TTL_MAPITEM_SORT, TTL_MAPITEM_UNKNOWN, }; static const thstok thlayout__mapitems[] = { {"carto", TTL_MAPITEM_CARTO}, {"copyright", TTL_MAPITEM_COPYRIGHT}, {"explo", TTL_MAPITEM_EXPLO}, {"explo-length", TTL_MAPITEM_EXPLO_LENS}, {"topo", TTL_MAPITEM_TOPO}, {"topo-length", TTL_MAPITEM_TOPO_LENS}, {NULL, TTL_MAPITEM_UNKNOWN}, }; void thlayout::set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline) { double dum; thlayout_copy_src dumm; int sv, sv2, dum_int; //bool parsed; thlayout_copy_src * lcp; thcmd_option_desc defcod = this->get_default_cod(cod.id); switch (cod.id) { case TT_DATAOBJECT_AUTHOR: case TT_DATAOBJECT_COPYRIGHT: defcod.nargs = 2; default: if (cod.nargs > defcod.nargs) ththrow(("too many arguments -- %s", args[defcod.nargs])) } switch (cod.id) { case 0: case TT_LAYOUT_SYMBOL_DEFAULTS: case TT_LAYOUT_SYMBOL_ASSIGN: case TT_LAYOUT_SYMBOL_HIDE: case TT_LAYOUT_SYMBOL_SHOW: case TT_LAYOUT_SYMBOL_COLOR: if (this->def_tex_lines < 2) { this->first_line = this->db->db2d.insert_layoutln(); this->last_line = this->first_line; this->def_tex_lines = 2; } else { this->last_line->next_line = this->db->db2d.insert_layoutln(); this->last_line = this->last_line->next_line; } switch(cod.id) { case 0: if (this->ccode == TT_LAYOUT_CODE_UNKNOWN) { ththrow(("unknown option -- %s", *args)); } thencode(&(this->db->buff_enc), *args, argenc); this->last_line->line = this->db->strstore(this->db->buff_enc.get_buffer()); this->last_line->code = this->ccode; break; case TT_LAYOUT_SYMBOL_DEFAULTS: if (args != NULL) { if (!th_is_keyword(*args)) ththrow(("invalid keyword -- %s", args[0])) thencode(&(this->db->buff_enc), *args, argenc); this->last_line->line = this->db->strstore(this->db->buff_enc.get_buffer()); } this->last_line->code = TT_LAYOUT_CODE_SYMBOL_DEFAULTS; break; case TT_LAYOUT_SYMBOL_ASSIGN: this->last_line->smid = thsymbolset__get_id(args[0],args[1]); if (this->last_line->smid == -1) ththrow(("unknown symbol specification -- %s %s", args[0], args[1])) if (!thsymbolset__assign[this->last_line->smid]) ththrow(("symbol can not be assigned -- %s %s", args[0], args[1])) if (!th_is_keyword(args[2])) ththrow(("invalid keyword -- %s", args[2])) thencode(&(this->db->buff_enc), args[2], argenc); this->last_line->line = this->db->strstore(this->db->buff_enc.get_buffer()); this->last_line->code = TT_LAYOUT_CODE_SYMBOL_ASSIGN; break; // case TT_LAYOUT_MAP_ITEM: // this->last_line->smid = thmatch_token(args[0],thtt_layout_mapitem); // if (this->last_line->smid == SYMS_ZZZ) // ththrow(("unknown map-item specification -- %s", args[0])) // if (!th_is_keyword(args[1])) // ththrow(("invalid keyword -- %s", args[1])) // thencode(&(this->db->buff_enc), args[1], argenc); // this->last_line->line = this->db->strstore(this->db->buff_enc.get_buffer()); // this->last_line->code = TT_LAYOUT_CODE_MAP_ITEM; // break; case TT_LAYOUT_SYMBOL_HIDE: this->last_line->smid = thsymbolset__get_id(args[0],args[1]); if (this->last_line->smid == -1) ththrow(("unknown symbol specification -- %s %s", args[0], args[1])) this->last_line->code = TT_LAYOUT_CODE_SYMBOL_HIDE; break; case TT_LAYOUT_SYMBOL_SHOW: this->last_line->smid = thsymbolset__get_id(args[0],args[1]); if (this->last_line->smid == -1) ththrow(("unknown symbol specification -- %s %s", args[0], args[1])) this->last_line->code = TT_LAYOUT_CODE_SYMBOL_SHOW; break; case TT_LAYOUT_SYMBOL_COLOR: this->last_line->smid = thsymbolset__get_id(args[0],args[1]); if (this->last_line->smid == -1) ththrow(("unknown symbol specification -- %s %s", args[0], args[1])) this->last_line->sclr.parse(args[2]); this->last_line->code = TT_LAYOUT_CODE_SYMBOL_COLOR; break; } break; case TT_LAYOUT_SURVEY_LEVEL: thparse_double(sv,dum,args[0]); switch (sv) { case TT_SV_NUMBER: dum_int = int(dum); if ((double(dum_int) != dum) || (dum_int < 0)) ththrow(("not an integer -- %s", args[1])) break; case TT_SV_ALL: dum_int = -1; break; case TT_SV_OFF: dum_int = 0; break; default: ththrow(("invalid number or switch -- %s", args[1])) } this->survey_level = dum_int; this->def_survey_level = 2; break; case TT_LAYOUT_MAP_ITEM: sv2 = thmatch_token(args[0],thlayout__mapitems); switch (sv2) { case TTL_MAPITEM_EXPLO_LENS: sv = thmatch_token(args[1],thtt_layout_lenstat); if (sv == TT_LAYOUT_LENSTAT_UNKNOWN) ththrow(("invalid map-item explo-length switch -- %s",args[1])) this->explo_lens = sv; this->def_explo_lens = 2; break; case TTL_MAPITEM_TOPO_LENS: sv = thmatch_token(args[1],thtt_layout_lenstat); if (sv == TT_LAYOUT_LENSTAT_UNKNOWN) ththrow(("invalid map-item topo-length switch -- %s",args[1])) this->topo_lens = sv; this->def_topo_lens = 2; break; case TTL_MAPITEM_EXPLO: case TTL_MAPITEM_TOPO: case TTL_MAPITEM_CARTO: case TTL_MAPITEM_COPYRIGHT: thparse_double(sv,dum,args[1]); switch (sv) { case TT_SV_NUMBER: dum_int = int(dum); if ((double(dum_int) != dum) || (dum_int < 0)) ththrow(("not a non-negative integer -- %s", args[1])) break; case TT_SV_ALL: dum_int = -1; break; case TT_SV_OFF: dum_int = 0; break; default: ththrow(("invalid number or switch -- %s", args[1])) } switch (sv2) { case TTL_MAPITEM_EXPLO: this->max_explos = dum_int; this->def_max_explos = 2; break; case TTL_MAPITEM_TOPO: this->max_topos = dum_int; this->def_max_topos = 2; break; case TTL_MAPITEM_CARTO: this->max_cartos = dum_int; this->def_max_cartos = 2; break; case TTL_MAPITEM_COPYRIGHT: this->max_copys = dum_int; this->def_max_copys = 2; break; } break; default: ththrow(("unknown statistics -- %s", args[0])) } break; case TT_LAYOUT_SCALE: thlayout_parse_scale(&(this->scale),args); this->def_scale = 2; break; case TT_LAYOUT_ROTATE: thlayout_parse_rotate(this->rotate,args[0]); this->def_rotate = 2; break; case TT_LAYOUT_BASE_SCALE: thlayout_parse_scale(&(this->base_scale),args); this->def_base_scale = 2; break; case TT_LAYOUT_OVERLAP: this->parse_len(this->overlap, dum, dum, 1, args, 0); this->def_overlap = 2; break; case TT_LAYOUT_LEGEND_WIDTH: this->parse_len(this->legend_width, dum, dum, 1, args, 0); this->def_legend_width = 2; break; case TT_LAYOUT_LEGEND_COLUMNS: thparse_double(sv,dum,args[0]); switch (sv) { case TT_SV_NUMBER: dum_int = int(dum); if ((double(dum_int) != dum) || (dum_int < 0)) ththrow(("not a non-negative integer -- %s", args[0])) break; default: ththrow(("invalid number -- %s", args[0])) } this->legend_columns = (unsigned) dum_int; this->def_legend_columns = 2; break; case TT_LAYOUT_SIZE: this->parse_len(this->hsize, this->vsize, dum, 2, args, 1); this->def_size = 2; break; case TT_LAYOUT_PAGE_SETUP: this->parse_len6(this->paphs, this->papvs, this->paghs, this->pagvs, this->marls, this->marts, 6, args, 1); this->def_page_setup = 2; break; case TT_LAYOUT_ORIGIN: //this->parse_len(this->ox, this->oy, this->oz, 3, args, -1); this->convert_cs(args[0], args[1], this->ox, this->oy); if (this->cs == TTCS_LOCAL) { this->parse_len(this->ox, this->oy, this->oz, 3, args, -1); } else { this->parse_len(this->oz, dum, dum, 1, &(args[2]), -1); } this->def_origin = 2; break; case TT_LAYOUT_GRID_SIZE: this->parse_len(this->gxs, this->gys, this->gzs, 3, args, 1); this->def_grid_size = 2; break; case TT_LAYOUT_COLOR: sv = thmatch_token(args[0],thtt_layout_color); switch (sv) { case TT_LAYOUT_COLOR_LABELS: sv2 = thmatch_token(args[1], thtt_bool); if (sv2 == TT_UNKNOWN_BOOL) ththrow(("invalid color labels switch (on|off expected) -- %s",args[1])) else { this->color_labels = (sv2 == TT_TRUE); this->def_color_labels = 2; } break; case TT_LAYOUT_COLOR_MAP_FG: this->color_crit = thmatch_token(args[1], thtt_layout_ccrit); if (this->color_crit == TT_LAYOUT_CCRIT_UNKNOWN) this->color_map_fg.parse(args[1]); else this->color_map_fg.defined = 2; break; case TT_LAYOUT_COLOR_MAP_BG: this->color_map_bg.parse(args[1], true); break; case TT_LAYOUT_COLOR_PREVIEW_BELOW: this->color_preview_below.parse(args[1]); break; case TT_LAYOUT_COLOR_PREVIEW_ABOVE: this->color_preview_above.parse(args[1]); break; default: ththrow(("unknown color -- %s",args[0])) } break; case TT_LAYOUT_GRID_ORIGIN: this->convert_cs(args[0], args[1], this->gox, this->goy); if (this->cs == TTCS_LOCAL) { this->parse_len(this->gox, this->goy, this->goz, 3, args, -1); } else { this->parse_len(this->goz, dum, dum, 1, &(args[2]), -1); } this->def_grid_origin = 2; break; case TT_LAYOUT_TRANSPARENCY: sv = thmatch_token(args[0],thtt_bool); if (sv == TT_UNKNOWN_BOOL) ththrow(("invalid transparency switch -- %s",args[0])) this->transparency = (sv == TT_TRUE); this->def_transparency = 2; break; case TT_LAYOUT_SKETCHES: sv = thmatch_token(args[0],thtt_bool); if (sv == TT_UNKNOWN_BOOL) ththrow(("invalid sketches switch -- %s",args[0])) this->sketches = (sv == TT_TRUE); this->def_sketches = 2; break; case TT_LAYOUT_LEGEND: sv = thmatch_token(args[0],thtt_layout_legend); if (sv == TT_LAYOUT_LEGEND_UNKNOWN) ththrow(("invalid legend switch -- %s",args[0])) this->legend = sv; this->def_legend = 2; break; case TT_LAYOUT_COLOR_LEGEND: sv = thmatch_token(args[0],thtt_bool); if (sv == TT_UNKNOWN_BOOL) ththrow(("invalid color-legend switch -- %s",args[0])) this->color_legend = sv; this->def_color_legend = 2; break; case TT_LAYOUT_SCALE_BAR: this->parse_len(this->scale_bar, dum, dum, 1, args, 1); this->def_scale_bar = 2; break; case TT_LAYOUT_MAP_HEADER: thparse_double(sv,this->map_header_x,args[0]); if (sv != TT_SV_NUMBER) ththrow(("invalid number -- %s",args[0])) if ((this->map_header_x < -100.0) || (this->map_header_x > 200.0)) ththrow(("number between 0.0 - 100.0 expected -- %s",args[0])) thparse_double(sv,this->map_header_y,args[1]); if (sv != TT_SV_NUMBER) ththrow(("invalid number -- %s",args[1])) if ((this->map_header_y < -100.0) || (this->map_header_y > 200.0)) ththrow(("number between 0.0 - 100.0 expected -- %s",args[1])) sv = thmatch_token(args[2],thtt_layout_map_header); if (sv == TT_LAYOUT_MAP_HEADER_UNKNOWN) ththrow(("invalid map-header switch -- %s",args[2])) this->map_header = sv; this->def_map_header = 2; break; case TT_LAYOUT_MAP_IMAGE: { thlayout_map_image tmpi; tmpi.parse(args, (this->m_pconfig == NULL) ? "" : this->m_pconfig->cfg_file.get_cif_path()); this->map_image_list.push_back(tmpi); } break; case TT_LAYOUT_DEBUG: sv = thmatch_token(args[0],thtt_layout_debug); if (sv == TT_LAYOUT_DEBUG_UNKNOWN) ththrow(("invalid debug switch -- %s",args[0])) switch (sv) { case TT_LAYOUT_DEBUG_ALL: this->debug = TTLDBG_JOINS | TTLDBG_STATIONS | TTLDBG_SCRAPNAMES | TTLDBG_STATIONNAMES; break; case TT_LAYOUT_DEBUG_OFF: this->debug = 0; break; case TT_LAYOUT_DEBUG_STATIONS: this->debug |= TTLDBG_STATIONS; break; case TT_LAYOUT_DEBUG_JOINS: this->debug |= TTLDBG_JOINS; break; case TT_LAYOUT_DEBUG_SCRAPNAMES: this->debug |= TTLDBG_SCRAPNAMES; break; case TT_LAYOUT_DEBUG_STATIONNAMES: this->debug |= TTLDBG_STATIONNAMES; break; } this->def_debug = 2; break; case TT_LAYOUT_LANG: sv = thlang_parse(args[0]); if (sv == THLANG_UNKNOWN) ththrow(("language not supported -- %s",args[0])) this->lang = sv; this->def_lang = 2; break; case TT_LAYOUT_UNITS: this->units.parse_units(args[0]); this->def_units = 2; break; case TT_LAYOUT_LAYERS: sv = thmatch_token(args[0],thtt_bool); if (sv == TT_UNKNOWN_BOOL) ththrow(("invalid layers switch -- %s",args[0])) this->layers = (sv == TT_TRUE); this->def_layers = 2; break; case TT_LAYOUT_MAP_HEADER_BG: sv = thmatch_token(args[0],thtt_bool); if (sv == TT_UNKNOWN_BOOL) ththrow(("invalid map-header-bg switch -- %s",args[0])) this->map_header_bg = (sv == TT_TRUE); this->def_map_header_bg = 2; break; case TT_LAYOUT_OPACITY: thparse_double(sv,dum,args[0]); if ((sv != TT_SV_NUMBER) || (dum < 0.0) || (dum > 100.0)) ththrow(("invalid opacity value -- %s", args[0])) this->opacity = dum / 100.0; this->def_opacity = 2; break; case TT_LAYOUT_SURFACE_OPACITY: thparse_double(sv,dum,args[0]); if ((sv != TT_SV_NUMBER) || (dum < 0.0) || (dum > 100.0)) ththrow(("invalid opacity value -- %s", args[0])) this->surface_opacity = dum / 100.0; this->def_surface_opacity = 2; break; case TT_LAYOUT_SURFACE: sv = thmatch_token(args[0],thtt_layout_surface); if (sv == TT_LAYOUT_SURFACE_UNKNOWN) ththrow(("invalid surface switch -- %s",args[0])) this->surface = sv; this->def_surface = 2; break; case TT_LAYOUT_GRID_COORDS: sv = thmatch_token(args[0],thtt_layout_gridcoords); if (sv == TT_LAYOUT_GRIDCOORDS_UNKNOWN) ththrow(("invalid grid-coords switch -- %s",args[0])) this->grid_coords = sv; this->def_grid_coords = 2; break; case TT_LAYOUT_NORTH: sv = thmatch_token(args[0],thtt_layout_north); if (sv == TT_LAYOUT_NORTH_UNKNOWN) ththrow(("invalid north switch -- %s",args[0])) this->north = sv; this->def_north = 2; break; case TT_LAYOUT_GRID: sv = thmatch_token(args[0],thtt_layout_grid); if (sv == TT_LAYOUT_GRID_UNKNOWN) ththrow(("invalid grid switch -- %s",args[0])) this->grid = (char) sv; this->def_grid = 2; break; case TT_LAYOUT_ENDCODE: this->ccode = TT_LAYOUT_CODE_UNKNOWN; break; case TT_LAYOUT_CODE: sv = thmatch_token(args[0],thtt_layout_code); if (sv == TT_LAYOUT_CODE_UNKNOWN) ththrow(("invalid code switch -- %s",args[0])) this->ccode = (char) sv; break; case TT_LAYOUT_PAGE_GRID: sv = thmatch_token(args[0],thtt_bool); if (sv == TT_UNKNOWN_BOOL) ththrow(("invalid page-grid switch -- %s",args[0])) this->page_grid = (sv == TT_TRUE); this->def_page_grid = 2; break; case TT_LAYOUT_EXCLUDE_PAGES: sv = thmatch_token(args[0],thtt_bool); if (sv == TT_UNKNOWN_BOOL) ththrow(("invalid pages exclusion switch -- %s",args[0])) this->excl_pages = (sv == TT_TRUE); if (strlen(args[1]) > 0) this->excl_list = this->db->strstore(args[1]); else if (this->excl_pages) ththrow(("invalid pages exclusion list -- %s",args[1])); this->def_excl_pages = 2; break; case TT_LAYOUT_PAGE_NUMBERS: sv = thmatch_token(*args,thtt_bool); if (sv == TT_UNKNOWN_BOOL) ththrow(("invalid page numbers switch -- %s",*args)) this->pgsnum = (sv == TT_TRUE); this->def_page_numbers = 2; break; case TT_LAYOUT_TITLE_PAGES: sv = thmatch_token(*args,thtt_bool); if (sv == TT_UNKNOWN_BOOL) ththrow(("invalid title-pages switch -- %s",*args)) this->titlep = (sv == TT_TRUE); this->def_title_pages = 2; break; case TT_LAYOUT_DOC_TITLE: if (strlen(args[0]) > 0) { thencode(&(this->db->buff_enc), args[0], argenc); this->doc_title = this->db->strstore(this->db->buff_enc.get_buffer()); } else this->doc_title = ""; this->def_doc_title = 2; break; case TT_LAYOUT_DOC_COMMENT: if (strlen(args[0]) > 0) { thencode(&(this->db->buff_enc), args[0], argenc); this->doc_comment = this->db->strstore(this->db->buff_enc.get_buffer()); } else this->doc_comment = ""; this->def_doc_comment = 2; break; case TT_LAYOUT_DOC_AUTHOR: if (strlen(args[0]) > 0) { thencode(&(this->db->buff_enc), args[0], argenc); this->doc_author = this->db->strstore(this->db->buff_enc.get_buffer()); } else this->doc_author = ""; this->def_doc_author = 2; break; case TT_LAYOUT_DOC_SUBJECT: if (strlen(args[0]) > 0) { thencode(&(this->db->buff_enc), args[0], argenc); this->doc_subject = this->db->strstore(this->db->buff_enc.get_buffer()); } else this->doc_subject = ""; this->def_doc_subject = 2; break; case TT_LAYOUT_DOC_KEYWORDS: if (strlen(args[0]) > 0) { thencode(&(this->db->buff_enc), args[0], argenc); this->doc_keywords = this->db->strstore(this->db->buff_enc.get_buffer()); } else this->doc_keywords = ""; this->def_doc_keywords = 2; break; case TT_LAYOUT_ORIGIN_LABEL: if (strlen(args[0]) > 0) { //thencode(&(this->db->buff_enc), args[0], argenc); this->olx = this->db->strstore(args[0]); } else ththrow(("invalid label -- %s",args[0])); if (strlen(args[1]) > 0) { //thencode(&(this->db->buff_enc), args[1], argenc); this->oly = this->db->strstore(args[1]); } else ththrow(("invalid label -- %s",args[1])); this->def_origin_label = 2; break; case TT_LAYOUT_NAV_SIZE: thparse_double(sv,dum,args[0]); if ((sv != TT_SV_NUMBER) || (dum <= 0)) ththrow(("invalid navigator size -- %s", *args)) if (double(int(dum)) != dum) ththrow(("invalid navigator size -- %s", *args)) this->navsx = unsigned(dum); thparse_double(sv,dum,args[1]); if ((sv != TT_SV_NUMBER) || (dum <= 0)) ththrow(("invalid navigator size -- %s", *args)) if (double(int(dum)) != dum) ththrow(("invalid navigator size -- %s", *args)) this->navsy = unsigned(dum); this->def_nav_size = 2; break; case TT_LAYOUT_COPY: if (th_is_extkeyword(*args)) { lcp = & ( * thlayout_copy_src_list.insert(thlayout_copy_src_list.end(),dumm)); if (this->first_copy_src == NULL) { this->first_copy_src = lcp; this->last_copy_src = lcp; } else { this->last_copy_src->next_src = lcp; this->last_copy_src = lcp; } lcp->srcn = this->db->strstore(*args); } else ththrow(("invalid keyword -- %s", *args)); break; case TT_LAYOUT_NAV_FACTOR: thparse_double(sv,this->navf,*args); if (sv != TT_SV_NUMBER) ththrow(("invalid factor -- %s", *args)) if (this->navf <= 0.0) ththrow(("negative factor not allowed -- %s", *args)) this->def_nav_factor = 2; break; case TT_LAYOUT_OWN_PAGES: thparse_double(sv,dum,*args); if ((sv != TT_SV_NUMBER) || (dum <= 0)) ththrow(("invalid number of own pages -- %s", *args)) if (double(int(dum)) != dum) ththrow(("invalid number of own pages -- %s", *args)) this->ownp = unsigned(dum); this->def_own_pages = 2; break; case 1: cod.id = TT_DATAOBJECT_NAME; default: thdataobject::set(cod, args, argenc, indataline); break; } } void thlayout::self_delete() { delete this; } void thlayout::self_print_properties(FILE * outf) { thdataobject::self_print_properties(outf); fprintf(outf,"thlayout:\n"); fprintf(outf,"\tscale: %f\n",this->scale); fprintf(outf,"\trotate: %f\n",this->rotate); } int thlayout::get_context() { return (THCTX_SURVEY | THCTX_NONE | THCTX_SCRAP); } void thlayout::self_print_library() { thprintf("\toname = \"%s\";\n", this->get_name()); thprintf("\tplayout->set(thcmd_option_desc(TT_DATAOBJECT_NAME,1),oname,TT_UTF_8,0);\n"); // decode title thdecode_c(&(this->db->buff_enc), this->get_title()); thprintf("\toname = \"%s\";\n", this->db->buff_enc.get_buffer()); thprintf("\tplayout->set(thcmd_option_desc(TT_DATAOBJECT_TITLE,1),oname,TT_UTF_8,0);\n"); thprintf("\tplayout->def_scale = %d;\n", this->def_scale); thprintf("\tplayout->scale = %lg;\n",this->scale); thprintf("\tplayout->def_base_scale = %d;\n", this->def_base_scale); thprintf("\tplayout->base_scale = %lg;\n",this->base_scale); thprintf("\tplayout->def_rotate = %d;\n", this->def_rotate); thprintf("\tplayout->rotate = %lg;\n",this->rotate); thprintf("\tplayout->def_page_setup = %d;\n", this->def_page_setup); thprintf("\tplayout->hsize = %lg;\n",this->hsize); thprintf("\tplayout->vsize = %lg;\n",this->vsize); thprintf("\tplayout->paphs = %lg;\n",this->paphs); thprintf("\tplayout->papvs = %lg;\n",this->papvs); thprintf("\tplayout->paghs = %lg;\n",this->paghs); thprintf("\tplayout->pagvs = %lg;\n",this->pagvs); thprintf("\tplayout->marts = %lg;\n",this->marts); thprintf("\tplayout->marls = %lg;\n",this->marls); thprintf("\tplayout->color_map_bg.defined = %d;\n", this->color_map_bg.defined); thprintf("\tplayout->color_map_bg.R = %lg;\n",this->color_map_bg.R); thprintf("\tplayout->color_map_bg.G = %lg;\n",this->color_map_bg.G); thprintf("\tplayout->color_map_bg.B = %lg;\n",this->color_map_bg.B); thprintf("\tplayout->color_map_bg.A = %lg;\n",this->color_map_bg.A); thprintf("\tplayout->color_map_fg.defined = %d;\n", this->color_map_fg.defined); thprintf("\tplayout->color_crit = %d;\n", this->color_crit); thprintf("\tplayout->color_map_fg.R = %lg;\n",this->color_map_fg.R); thprintf("\tplayout->color_map_fg.G = %lg;\n",this->color_map_fg.G); thprintf("\tplayout->color_map_fg.B = %lg;\n",this->color_map_fg.B); thprintf("\tplayout->color_map_fg.A = %lg;\n",this->color_map_fg.A); thprintf("\tplayout->color_preview_below.defined = %d;\n", this->color_preview_below.defined); thprintf("\tplayout->color_preview_below.R = %lg;\n",this->color_preview_below.R); thprintf("\tplayout->color_preview_below.G = %lg;\n",this->color_preview_below.G); thprintf("\tplayout->color_preview_below.B = %lg;\n",this->color_preview_below.B); thprintf("\tplayout->color_preview_below.A = %lg;\n",this->color_preview_below.A); thprintf("\tplayout->color_preview_above.defined = %d;\n", this->color_preview_above.defined); thprintf("\tplayout->color_preview_above.R = %lg;\n",this->color_preview_above.R); thprintf("\tplayout->color_preview_above.G = %lg;\n",this->color_preview_above.G); thprintf("\tplayout->color_preview_above.B = %lg;\n",this->color_preview_above.B); thprintf("\tplayout->color_preview_above.A = %lg;\n",this->color_preview_above.A); thprintf("\tplayout->def_overlap = %d;\n", this->def_overlap); thprintf("\tplayout->overlap = %lg;\n",this->overlap); thprintf("\tplayout->def_scale_bar = %d;\n", this->def_scale_bar); thprintf("\tplayout->scale_bar = %lg;\n",this->scale_bar); thprintf("\tplayout->def_transparency = %d;\n", this->def_transparency); thprintf("\tplayout->transparency = %s;\n",(this->transparency ? "true" : "false")); thprintf("\tplayout->def_sketches = %d;\n", this->def_sketches); thprintf("\tplayout->sketches = %s;\n",(this->sketches ? "true" : "false")); thprintf("\tplayout->def_legend = %d;\n", this->def_legend); thprintf("\tplayout->legend = %s;\n",( this->legend == TT_LAYOUT_LEGEND_OFF ? "TT_LAYOUT_LEGEND_OFF" : ( this->legend == TT_LAYOUT_LEGEND_ON ? "TT_LAYOUT_LEGEND_ON" : "TT_LAYOUT_LEGEND_ALL" ))); thprintf("\tplayout->def_survey_level = %d;\n", this->def_survey_level); thprintf("\tplayout->survey_level = %d;\n", this->survey_level); thprintf("\tplayout->def_color_legend = %d;\n", this->def_color_legend); thprintf("\tplayout->legend = %d;\n", this->color_legend); thprintf("\tplayout->def_legend_width = %d;\n", this->def_legend_width); thprintf("\tplayout->legend_width = %lg;\n",this->legend_width); thprintf("\tplayout->def_legend_columns = %d;\n", this->def_legend_columns); thprintf("\tplayout->legend_columns = %d;\n",this->legend_columns); thprintf("\tplayout->def_map_header = %d;\n", this->def_map_header); thprintf("\tplayout->map_header = %d;\n",this->map_header); thprintf("\tplayout->map_header_x = %lg;\n",this->map_header_x); thprintf("\tplayout->map_header_y = %lg;\n",this->map_header_y); thprintf("\tplayout->def_debug = %d;\n", this->def_debug); thprintf("\tplayout->debug = %d;\n",this->debug); thprintf("\tplayout->def_max_explos = %d;\n", this->def_max_explos); thprintf("\tplayout->max_explos = %d;\n",this->max_explos); thprintf("\tplayout->def_max_topos = %d;\n", this->def_max_topos); thprintf("\tplayout->max_topos = %d;\n",this->max_topos); thprintf("\tplayout->def_max_cartos = %d;\n", this->def_max_cartos); thprintf("\tplayout->max_cartos = %d;\n",this->max_cartos); thprintf("\tplayout->def_max_copys = %d;\n", this->def_max_copys); thprintf("\tplayout->max_copys = %d;\n",this->max_copys); thprintf("\tplayout->def_explo_lens = %d;\n",this->def_explo_lens); thprintf("\tplayout->explo_lens = %d;\n",this->explo_lens); thprintf("\tplayout->def_topo_lens = %d;\n",this->def_topo_lens); thprintf("\tplayout->topo_lens = %d;\n",this->topo_lens); thprintf("\tplayout->def_lang = %d;\n", this->def_lang); thprintf("\tplayout->lang = %s;\n",thlang_getcxxid(this->lang)); thprintf("\tplayout->def_units = %d;\n", this->def_units); thprintf("\tplayout->units.units = %d;\n",this->units.units); thprintf("\tplayout->def_layers = %d;\n", this->def_layers); thprintf("\tplayout->layers = %s;\n",(this->layers ? "true" : "false")); thprintf("\tplayout->def_map_header_bg = %d;\n", this->def_map_header_bg); thprintf("\tplayout->map_header_bg = %s;\n",(this->map_header_bg ? "true" : "false")); thprintf("\tplayout->def_opacity = %d;\n", this->def_opacity); thprintf("\tplayout->opacity = %lg;\n",this->opacity); thprintf("\tplayout->def_surface_opacity = %d;\n", this->def_surface_opacity); thprintf("\tplayout->surface_opacity = %lg;\n", this->surface_opacity); thprintf("\tplayout->def_surface= %d;\n", this->def_surface); thprintf("\tplayout->surface = %d;\n", this->surface); thprintf("\tplayout->def_color_labels= %d;\n", this->def_color_labels); thprintf("\tplayout->color_labels = %s;\n", (this->color_labels ? "true" : "false")); thprintf("\tplayout->def_grid_coords = %d;\n", this->def_grid_coords); thprintf("\tplayout->grid_coords = %d;\n", this->grid_coords); thprintf("\tplayout->def_north= %d;\n", this->def_north); thprintf("\tplayout->north = %d;\n", this->north); thprintf("\tplayout->def_grid = %d;\n", this->def_grid); thprintf("\tplayout->grid = %d;\n",this->grid); thprintf("\tplayout->def_page_grid = %d;\n", this->def_page_grid); thprintf("\tplayout->page_grid = %s;\n",(this->page_grid ? "true" : "false")); thprintf("\tplayout->def_origin = %d;\n", this->def_origin); if (!thisnan(this->ox)) thprintf("\tplayout->ox = %lg;\n",this->ox); if (!thisnan(this->oy)) thprintf("\tplayout->oy = %lg;\n",this->oy); if (!thisnan(this->oz)) thprintf("\tplayout->oz = %lg;\n",this->oz); thprintf("\tplayout->def_origin_label = %d;\n", this->def_origin_label); thdecode_c(&(this->db->buff_enc), this->olx); thprintf("\tplayout->olx = \"%s\";\n", this->db->buff_enc.get_buffer()); thdecode_c(&(this->db->buff_enc), this->oly); thprintf("\tplayout->oly = \"%s\";\n", this->db->buff_enc.get_buffer()); thprintf("\tplayout->def_doc_title = %d;\n", this->def_doc_title); thdecode_c(&(this->db->buff_enc), this->doc_title); thprintf("\tplayout->doc_title = \"%s\";\n", this->db->buff_enc.get_buffer()); thprintf("\tplayout->def_doc_comment = %d;\n", this->def_doc_comment); thdecode_c(&(this->db->buff_enc), this->doc_comment); thprintf("\tplayout->doc_comment = \"%s\";\n", this->db->buff_enc.get_buffer()); thprintf("\tplayout->def_doc_author = %d;\n", this->def_doc_author); thdecode_c(&(this->db->buff_enc), this->doc_author); thprintf("\tplayout->doc_author = \"%s\";\n", this->db->buff_enc.get_buffer()); thprintf("\tplayout->def_doc_subject = %d;\n", this->def_doc_author); thdecode_c(&(this->db->buff_enc), this->doc_subject); thprintf("\tplayout->doc_subject = \"%s\";\n", this->db->buff_enc.get_buffer()); thprintf("\tplayout->def_doc_keywords = %d;\n", this->def_doc_keywords); thdecode_c(&(this->db->buff_enc), this->doc_keywords); thprintf("\tplayout->doc_keywords = \"%s\";\n", this->db->buff_enc.get_buffer()); thprintf("\tplayout->def_excl_pages = %d;\n", this->def_excl_pages); thprintf("\tplayout->excl_pages = %s;\n",(this->excl_pages ? "true" : "false")); if (this->excl_list == NULL) { thprintf("\tplayout->excl_list = NULL;\n"); } else { thdecode_c(&(this->db->buff_enc), this->excl_list); thprintf("\tplayout->excl_list = \"%s\";\n", this->db->buff_enc.get_buffer()); } thprintf("\tplayout->def_grid_size = %d;\n", this->def_grid_size); if (!thisnan(this->gxs)) { thprintf("\tplayout->gxs = %lg;\n",this->gxs); thprintf("\tplayout->gys = %lg;\n",this->gys); thprintf("\tplayout->gzs = %lg;\n",this->gzs); } thprintf("\tplayout->def_grid_origin = %d;\n", this->def_grid_origin); if (!thisnan(this->gox)) thprintf("\tplayout->gox = %lg;\n",this->gox); if (!thisnan(this->goy)) thprintf("\tplayout->goy = %lg;\n",this->goy); if (!thisnan(this->goz)) thprintf("\tplayout->goz = %lg;\n",this->goz); thprintf("\tplayout->def_nav_factor = %d;\n", this->def_nav_factor); thprintf("\tplayout->navf = %lg;\n",this->navf); thprintf("\tplayout->def_nav_size = %d;\n", this->def_nav_size); thprintf("\tplayout->navsx = %d;\n",this->navsx); thprintf("\tplayout->navsy = %d;\n",this->navsy); thprintf("\tplayout->def_own_pages = %d;\n", this->def_own_pages); thprintf("\tplayout->ownp = %d;\n",this->ownp); thprintf("\tplayout->def_title_pages = %d;\n", this->def_title_pages); thprintf("\tplayout->titlep = %s;\n",(this->titlep ? "true" : "false")); thprintf("\tplayout->def_page_numbers = %d;\n", this->def_page_numbers); thprintf("\tplayout->pgsnum = %s;\n",(this->pgsnum ? "true" : "false")); thlayoutln * ln = this->first_line; char last_code = TT_LAYOUT_CODE_UNKNOWN; while(ln != NULL) { switch (ln->code) { case TT_LAYOUT_CODE_METAPOST: case TT_LAYOUT_CODE_TEX_MAP: case TT_LAYOUT_CODE_TEX_ATLAS: thdecode_c(&(this->db->buff_enc), ln->line); if (ln->code != last_code) { thprintf("\tplayout->ccode = "); switch (ln->code) { case TT_LAYOUT_CODE_METAPOST: thprintf("TT_LAYOUT_CODE_METAPOST"); break; case TT_LAYOUT_CODE_TEX_MAP: thprintf("TT_LAYOUT_CODE_TEX_MAP"); break; default: thprintf("TT_LAYOUT_CODE_TEX_ATLAS"); break; } thprintf(";\n"); } thprintf("\toname = \"%s\";\n", this->db->buff_enc.get_buffer()); thprintf("\tplayout->set(thcmd_option_desc(0,1),oname,TT_UTF_8,0);\n"); break; case TT_LAYOUT_CODE_SYMBOL_ASSIGN: case TT_LAYOUT_CODE_MAP_ITEM: case TT_LAYOUT_CODE_SYMBOL_DEFAULTS: case TT_LAYOUT_CODE_SYMBOL_HIDE: case TT_LAYOUT_CODE_SYMBOL_SHOW: case TT_LAYOUT_CODE_SYMBOL_COLOR: if (ln->line != NULL) { thdecode_c(&(this->db->buff_enc), ln->line); thprintf("\toname = \"%s\";\n", this->db->buff_enc.get_buffer()); } if (ln->code != TT_LAYOUT_CODE_SYMBOL_DEFAULTS) thprintf("\tplayout->set(thcmd_option_desc(TT_LAYOUT_SYMBOL_DEFAULTS,0),NULL,TT_UTF_8,0);\n"); else thprintf("\tplayout->set(thcmd_option_desc(TT_LAYOUT_SYMBOL_DEFAULTS,1),oname,TT_UTF_8,0);\n"); if (ln->code != TT_LAYOUT_CODE_SYMBOL_DEFAULTS) { switch (ln->code) { case TT_LAYOUT_CODE_SYMBOL_HIDE: thprintf("\tplayout->last_line->code = TT_LAYOUT_CODE_SYMBOL_HIDE;\n"); thprintf("\tplayout->last_line->smid = %s;\n", thsymbolset__src[ln->smid]); break; case TT_LAYOUT_CODE_SYMBOL_SHOW: thprintf("\tplayout->last_line->code = TT_LAYOUT_CODE_SYMBOL_SHOW;\n"); thprintf("\tplayout->last_line->smid = %s;\n", thsymbolset__src[ln->smid]); break; case TT_LAYOUT_CODE_MAP_ITEM: thprintf("\tplayout->last_line->code = TT_LAYOUT_CODE_MAP_ITEM;\n"); thprintf("\tplayout->last_line->smid = %s;\n", thsymbolset__src[ln->smid]); break; case TT_LAYOUT_CODE_SYMBOL_ASSIGN: thprintf("\tplayout->last_line->code = TT_LAYOUT_CODE_SYMBOL_ASSIGN;\n"); thprintf("\tplayout->last_line->smid = %s;\n", thsymbolset__src[ln->smid]); break; case TT_LAYOUT_CODE_SYMBOL_COLOR: thprintf("\tplayout->last_line->code = TT_LAYOUT_CODE_SYMBOL_COLOR;\n"); thprintf("\tplayout->last_line->smid = %s;\n", thsymbolset__src[ln->smid]); thprintf("\tplayout->last_line->sclr = thlayout_color(%.6f,%.6f,%.6f);\n", ln->sclr.R, ln->sclr.G, ln->sclr.B); break; } } break; } ln = ln->next_line; } thprintf("\tplayout->def_tex_lines = %d;\n", this->def_tex_lines); } void check_num(double num, int nonneg) { if (nonneg == 0) { if (num < 0) { ththrow(("not a non-negative number -- %g", num)); } } else if (nonneg > 0) { if (num <= 0) { ththrow(("not a positive number -- %g", num)); } } } void thlayout::parse_len(double & d1, double & d2, double & d3, int nargs, char ** args, int nonneg) { int sv; thtflength lentf; lentf.parse_units(args[nargs]); switch (nargs) { case 3: thparse_double(sv,d3,args[2]); if ((sv != TT_SV_NUMBER)) ththrow(("invalid number -- %s", args[2])); d3 = lentf.transform(d3); check_num(d3,nonneg); case 2: thparse_double(sv,d2,args[1]); if ((sv != TT_SV_NUMBER)) ththrow(("invalid number -- %s", args[1])); d2 = lentf.transform(d2); check_num(d2,nonneg); case 1: thparse_double(sv,d1,args[0]); if ((sv != TT_SV_NUMBER)) ththrow(("invalid number -- %s", args[0])); d1 = lentf.transform(d1); check_num(d1,nonneg); } } void thlayout::parse_len6(double & d1, double & d2, double & d3, double & d4, double & d5, double & d6, int nargs, char ** args, int nonneg) { int sv; thtflength lentf; lentf.parse_units(args[nargs]); switch (nargs) { case 6: thparse_double(sv,d6,args[5]); if ((sv != TT_SV_NUMBER)) ththrow(("invalid number -- %s", args[5])); d6 = lentf.transform(d6); check_num(d6,nonneg); case 5: thparse_double(sv,d5,args[4]); if ((sv != TT_SV_NUMBER)) ththrow(("invalid number -- %s", args[4])); d5 = lentf.transform(d5); check_num(d5,nonneg); case 4: thparse_double(sv,d4,args[3]); if ((sv != TT_SV_NUMBER)) ththrow(("invalid number -- %s", args[3])); d4 = lentf.transform(d4); check_num(d4,nonneg); case 3: thparse_double(sv,d3,args[2]); if ((sv != TT_SV_NUMBER)) ththrow(("invalid number -- %s", args[2])); d3 = lentf.transform(d3); check_num(d3,nonneg); case 2: thparse_double(sv,d2,args[1]); if ((sv != TT_SV_NUMBER)) ththrow(("invalid number -- %s", args[1])); d2 = lentf.transform(d2); check_num(d2,nonneg); case 1: thparse_double(sv,d1,args[0]); if ((sv != TT_SV_NUMBER)) ththrow(("invalid number -- %s", args[0])); d1 = lentf.transform(d1); check_num(d1,nonneg); } } #define THM2PT 2834.64566929 void thlayout::export_config(FILE * o, thdb2dprj * prj, double x_scale, double x_origin_shx, double x_origin_shy) { double pgox, pgoy; double ghs, gvs; fprintf(o,"Configuration file\n"); fprintf(o,"hsize: %.2fmm\nvsize: %.2fmm\n",this->hsize * 1000.0,this->vsize * 1000.0); fprintf(o,"Overlap: %.2fmm\n",this->overlap * 1000.0); //fprintf(o,"Hoffset: %.2fmm\nVoffset: %.2fmm\n",this->hsize * 500.0,this->vsize * 500.0); switch (prj->type) { case TT_2DPROJ_EXTEND: case TT_2DPROJ_ELEV: pgox = (this->gox - prj->shift_x) * x_scale + x_origin_shx; pgoy = (this->goz - prj->shift_z) * x_scale + x_origin_shy; ghs = this->gxs; gvs = this->gzs; break; default: pgox = (this->gox - prj->shift_x) * x_scale + x_origin_shx; pgoy = (this->goy - prj->shift_y) * x_scale + x_origin_shy; ghs = this->gxs; gvs = this->gys; break; } fprintf(o,"HGrid: %.2fmm\nVGrid: %.2fmm\n",ghs * this->scale * 1000.0, gvs * this->scale * 1000.0); pgox = pgox - (THM2PT * ghs * (double)(long)(pgox / ghs / THM2PT)); pgoy = pgoy - (THM2PT * gvs * (double)(long)(pgoy / gvs / THM2PT)); fprintf(o,"HGridOffset: %.2fmm\nVGridOffset: %.2fmm\n",pgox / THM2PT * 1000.0,pgoy / THM2PT * 1000.0); fprintf(o,"Background: 0\n"); fprintf(o,"StartX: %s\nStartY: %s\nStartZ: 0\n", this->olx, this->oly); fprintf(o,"NavRight: %d\nNavUp: %d\n", this->navsx, this->navsy); fprintf(o,"NavFactor: %.2f\n", this->navf); fprintf(o,"OwnPages: %d\n", this->ownp); fprintf(o,"TitlePages: %d\n", (this->titlep ? 1 : 0)); fprintf(o,"PageNumbering: %d\n", (this->pgsnum ? 1 : 0)); fprintf(o,"Transparency: %d\n", (this->transparency ? 1 : 0)); fprintf(o,"ExclPages: %d\n", (this->excl_pages ? 1 : 0)); if (this->excl_pages) { fprintf(o,"ExclList: %s\n", this->excl_list); } fprintf(o,"MapGrid: %d\n", (this->page_grid ? 1 : 0)); } void thlayout_print_header_align(FILE * o, int a) { switch (a) { case TT_LAYOUT_MAP_HEADER_CENTER: fprintf(o,"C"); break; case TT_LAYOUT_MAP_HEADER_N: fprintf(o,"N"); break; case TT_LAYOUT_MAP_HEADER_NE: fprintf(o,"NE"); break; case TT_LAYOUT_MAP_HEADER_E: fprintf(o,"E"); break; case TT_LAYOUT_MAP_HEADER_W: fprintf(o,"W"); break; case TT_LAYOUT_MAP_HEADER_S: fprintf(o,"S"); break; case TT_LAYOUT_MAP_HEADER_SW: fprintf(o,"SW"); break; case TT_LAYOUT_MAP_HEADER_SE: fprintf(o,"SE"); break; default: fprintf(o,"NW"); } } void thlayout::export_pdftex(FILE * o, thdb2dprj * prj, char mode) { fprintf(o,"\\opacity{%.2f}\n",this->opacity); fprintf(o,"\\def\\scale{%lu}\n",(unsigned long)(1.0 / this->scale + 0.5)); fprintf(o,"\\pagesetup{%.4fcm}{%.4fcm}{%.4fcm}{%.4fcm}{%.4fcm}{%.4fcm}\n", this->paphs*100.0, this->papvs*100.0, this->paghs*100.0, this->pagvs*100.0, this->marls*100.0, this->marts*100.0); fprintf(o,"\\def\\maplayout{"); thlayout_map_image_list::iterator mit; size_t nami = 0; for(mit = this->map_image_list.begin(); mit != this->map_image_list.end(); mit++) { if (mit->defined() && (mit->m_align != TT_LAYOUT_MAP_HEADER_OFF)) nami++; } thbuffer pict_path, pn; size_t pl; char * pp; long i; pict_path.guarantee(1024); getcwd(pict_path.get_buffer(),1024); pp = pict_path.get_buffer(); pl = strlen(pp); if ((pl > 0) && ((pp[pl-1] == '/') || (pp[pl-1] == '\\'))) { pp[pl-1] = 0; } if (this->map_header != TT_LAYOUT_MAP_HEADER_OFF) { fprintf(o,"\\legendbox{%.0f}{%.0f}{", this->map_header_x, this->map_header_y); thlayout_print_header_align(o, this->map_header); fprintf(o,"}"); fprintf(o,"{\\the\\legendcontent}"); } if (nami > 0) { for(mit = this->map_image_list.begin(); mit != this->map_image_list.end(); mit++) { if (mit->defined() && (mit->m_align != TT_LAYOUT_MAP_HEADER_OFF)) { pn = pict_path; pn += "/"; pn += mit->m_fn; pp = pn.get_buffer(); for(i = (long)strlen(pp); i >= 0; i--) { if (pp[i] == '\\') pp[i] = '/'; } fprintf(o,"\\legendbox{%.0f}{%.0f}{", mit->m_x, mit->m_y); thlayout_print_header_align(o, mit->m_align); fprintf(o,"}{\\loadpicture{%s}}",pp); } } } fprintf(o,"}\n"); bool anyline = false; bool anylegend = false; if (this->first_line != NULL) { thlayoutln * ln = this->first_line; while(ln != NULL) { if (ln->code == mode) { // ak najde \\formattedlegend v \\insertmaps tak anyline bude // true if ((!anyline) && (strstr(ln->line, "\\insertmaps") != NULL)) anyline = true; if ((!anylegend) && (strstr(ln->line, "\\formattedlegend") != NULL)) anylegend = true; thdecode_utf2tex(&(this->db->buff_enc), ln->line); fprintf(o, "%s\n", this->db->buff_enc.get_buffer()); } ln = ln->next_line; } } if (!anyline) { fprintf(o,"\\insertmaps\n"); if (mode == TT_LAYOUT_CODE_TEX_ATLAS) { if ((!anylegend) && (this->legend != TT_LAYOUT_LEGEND_OFF)) { fprintf(o,"\\formattedlegend\n"); } } } } void thlayout::export_mpost(FILE * o) { bool anyline = false; if (this->first_line != NULL) { thlayoutln * ln = this->first_line; while(ln != NULL) { if (ln->code == TT_LAYOUT_CODE_METAPOST) { anyline = true; thdecode(&(this->db->buff_enc), TT_ISO8859_2, ln->line); fprintf(o, "%s\n", this->db->buff_enc.get_buffer()); } ln = ln->next_line; } } if (!anyline) { } } void thlayout::export_mpost_symbols(FILE * o, thsymbolset * symset) { thlayoutln * ln = this->first_line; while(ln != NULL) { switch (ln->code) { case TT_LAYOUT_CODE_SYMBOL_DEFAULTS: symset->export_symbol_defaults(o,ln->line); break; case TT_LAYOUT_CODE_SYMBOL_ASSIGN: symset->export_symbol_assign(o,ln->smid,ln->line); break; case TT_LAYOUT_CODE_SYMBOL_HIDE: symset->export_symbol_hide(o,ln->smid); break; case TT_LAYOUT_CODE_SYMBOL_SHOW: symset->export_symbol_show(o,ln->smid); break; case TT_LAYOUT_CODE_SYMBOL_COLOR: symset->export_symbol_color(o,ln->smid,&(ln->sclr)); break; case TT_LAYOUT_CODE_MAP_ITEM: symset->export_symbol_assign(o,ln->smid,ln->line); break; } ln = ln->next_line; } } void thlayout::process_copy() { thlayout_copy_src * csp; thlayout * srcl; // ak je locknuty -> tak warning a koniec if (this->lock) { this->throw_source(); threwarning2(("recursive layout copying")) return; } this->lock = true; this->last_copy_src = this->first_copy_src; while (this->first_copy_src != NULL) { csp = this->first_copy_src; // najdeme si layout podla mena csp->srcptr = this->db->get_layout(csp->srcn); if (csp->srcptr == NULL) { this->throw_source(); threwarning2(("source layout not found -- %s", csp->srcn)) } else { srcl = csp->srcptr; // ak ma este nevyriesene zavislosti if (srcl->first_copy_src != NULL) srcl->process_copy(); // teraz skopirujme co nemame a on ma #define begcopy(whatx) if ((this->whatx < 2) && (srcl->whatx > 0)) { \ this->whatx = 1; #define endcopy } begcopy(def_scale) this->scale = srcl->scale; endcopy begcopy(def_rotate) this->rotate = srcl->rotate; endcopy begcopy(def_base_scale) this->base_scale = srcl->base_scale; endcopy begcopy(def_origin) this->ox = srcl->ox; this->oy = srcl->oy; this->oz = srcl->oz; endcopy begcopy(def_size) this->hsize = srcl->hsize; this->vsize = srcl->vsize; endcopy begcopy(def_page_setup) this->paphs = srcl->paphs; this->papvs = srcl->papvs; this->paghs = srcl->paghs; this->pagvs = srcl->pagvs; this->marls = srcl->marls; this->marts = srcl->marts; endcopy begcopy(def_overlap) this->overlap = srcl->overlap; endcopy begcopy(def_scale_bar) this->scale_bar = srcl->scale_bar; endcopy begcopy(def_grid_origin) this->gox = srcl->gox; this->goy = srcl->goy; this->goz = srcl->goz; endcopy begcopy(def_excl_pages) this->excl_pages = srcl->excl_pages; this->excl_list = srcl->excl_list; endcopy begcopy(color_map_fg.defined) this->color_crit = srcl->color_crit; this->color_map_fg.R = srcl->color_map_fg.R; this->color_map_fg.G = srcl->color_map_fg.G; this->color_map_fg.B = srcl->color_map_fg.B; this->color_map_fg.A = srcl->color_map_fg.A; endcopy begcopy(color_preview_below.defined) this->color_preview_below.R = srcl->color_preview_below.R; this->color_preview_below.G = srcl->color_preview_below.G; this->color_preview_below.B = srcl->color_preview_below.B; this->color_preview_below.A = srcl->color_preview_below.A; endcopy begcopy(color_preview_above.defined) this->color_preview_above.R = srcl->color_preview_above.R; this->color_preview_above.G = srcl->color_preview_above.G; this->color_preview_above.B = srcl->color_preview_above.B; this->color_preview_above.A = srcl->color_preview_above.A; endcopy begcopy(color_map_bg.defined) this->color_map_bg.R = srcl->color_map_bg.R; this->color_map_bg.G = srcl->color_map_bg.G; this->color_map_bg.B = srcl->color_map_bg.B; this->color_map_bg.A = srcl->color_map_bg.A; endcopy begcopy(def_doc_title) this->doc_title = srcl->doc_title; endcopy if ((this->def_doc_comment > 0) && (strlen(this->doc_comment) > 0) && (srcl->def_doc_comment > 0)) { std::string tmpstr(this->doc_comment); tmpstr += "
"; tmpstr += srcl->doc_comment; this->doc_comment = this->db->strstore(tmpstr.c_str()); } else { begcopy(def_doc_comment) this->doc_comment = srcl->doc_comment; endcopy } begcopy(def_doc_author) this->doc_author = srcl->doc_author; endcopy begcopy(def_doc_subject) this->doc_subject = srcl->doc_subject; endcopy begcopy(def_doc_keywords) this->doc_keywords = srcl->doc_keywords; endcopy begcopy(def_grid_size) this->gxs = srcl->gxs; this->gys = srcl->gys; this->gzs = srcl->gzs; endcopy begcopy(def_origin_label) this->olx = srcl->olx; this->oly = srcl->oly; endcopy begcopy(def_nav_factor) this->navf = srcl->navf; endcopy begcopy(def_nav_size) this->navsx = srcl->navsx; this->navsy = srcl->navsy; endcopy begcopy(def_own_pages) this->ownp = srcl->ownp; endcopy begcopy(def_title_pages) this->titlep = srcl->titlep; endcopy begcopy(def_opacity) this->opacity = srcl->opacity; endcopy begcopy(def_surface) this->surface = srcl->surface; endcopy begcopy(def_color_labels) this->color_labels = srcl->color_labels; endcopy begcopy(def_grid_coords) this->grid_coords = srcl->grid_coords; endcopy begcopy(def_north) this->north = srcl->north; endcopy begcopy(def_surface_opacity) this->surface_opacity = srcl->surface_opacity; endcopy begcopy(def_transparency) this->transparency = srcl->transparency; endcopy begcopy(def_sketches) this->sketches = srcl->sketches; endcopy begcopy(def_legend) this->legend = srcl->legend; endcopy begcopy(def_survey_level) this->survey_level = srcl->survey_level; endcopy begcopy(def_color_legend) this->color_legend = srcl->color_legend; endcopy begcopy(def_legend_width) this->legend_width = srcl->legend_width; endcopy begcopy(def_legend_columns) this->legend_columns = srcl->legend_columns; endcopy begcopy(def_map_header) this->map_header = srcl->map_header; this->map_header_x = srcl->map_header_x; this->map_header_y = srcl->map_header_y; endcopy begcopy(def_debug) this->debug = srcl->debug; endcopy begcopy(def_max_explos) this->max_explos = srcl->max_explos; endcopy begcopy(def_max_topos) this->max_topos = srcl->max_topos; endcopy begcopy(def_max_cartos) this->max_cartos = srcl->max_cartos; endcopy begcopy(def_max_copys) this->max_copys = srcl->max_copys; endcopy begcopy(def_explo_lens) this->explo_lens = srcl->explo_lens; endcopy begcopy(def_topo_lens) this->topo_lens = srcl->topo_lens; endcopy begcopy(def_lang) this->lang = srcl->lang; endcopy begcopy(def_units) this->units = srcl->units; endcopy begcopy(def_layers) this->layers = srcl->layers; endcopy begcopy(def_map_header_bg) this->map_header_bg = srcl->map_header_bg; endcopy begcopy(def_grid) this->grid = srcl->grid; endcopy begcopy(def_page_grid) this->page_grid = srcl->page_grid; endcopy begcopy(def_page_numbers) this->pgsnum = srcl->pgsnum; endcopy if (srcl->first_line != NULL) { // musime ich nakopirovat pred nase thlayoutln * cl, * nl, * newfl = NULL, * newll = NULL; cl = srcl->first_line; while (cl != NULL) { nl = this->db->db2d.insert_layoutln(); *nl = *cl; if (newll == NULL) { newfl = nl; newll = nl; newll->next_line = NULL; } else { newll->next_line = nl; newll = nl; } cl = cl->next_line; } if (this->last_line == NULL) { this->last_line = newll; newll->next_line = NULL; } else { newll->next_line = this->first_line; } this->first_line = newfl; } // copy map images thlayout_map_image_list::iterator mit, mits; mits = this->map_image_list.begin(); for (mit = srcl->map_image_list.begin(); mit != srcl->map_image_list.end(); mit++) { this->map_image_list.insert(mits, *mit); } } // pokracujeme v cykle this->first_copy_src = this->first_copy_src->next_src; } this->lock = false; } void thlayout::set_thpdf_layout(thdb2dprj * prj, double x_scale, double x_origin_shx, double x_origin_shy) { //string excl_list,labelx,labely; //bool excl_pages,background,title_pages,page_numbering, // transparency,map_grid; //float hsize,vsize,overlap, // hgrid,vgrid,hgridoffset,vgridoffset, //nav_factor; //int nav_right,nav_up,own_pages; LAYOUT.excl_list = (this->excl_list != NULL ? this->excl_list : ""); LAYOUT.labelx = this->olx; LAYOUT.labely = this->oly; LAYOUT.excl_pages = this->excl_pages; LAYOUT.title_pages = this->titlep; LAYOUT.page_numbering = this->pgsnum; LAYOUT.transparency = this->transparency; LAYOUT.OCG = this->layers; LAYOUT.map_header_bg = this->map_header_bg; LAYOUT.transparent_map_bg = (this->color_map_bg.A < 1.0); //TODO LAYOUT.map_grid = this->page_grid; LAYOUT.hsize = this->hsize * THM2PT; LAYOUT.vsize = this->vsize * THM2PT; LAYOUT.legend_width = this->legend_width * THM2PT; LAYOUT.legend_columns = (int) this->legend_columns; LAYOUT.overlap = this->overlap * THM2PT; switch (this->grid_coords) { case TT_LAYOUT_GRIDCOORDS_OFF: LAYOUT.grid_coord_freq = 0; break; case TT_LAYOUT_GRIDCOORDS_ALL: LAYOUT.grid_coord_freq = 2; break; default: LAYOUT.grid_coord_freq = 1; break; } switch (this->surface) { case TT_LAYOUT_SURFACE_OFF: LAYOUT.surface = 0; break; case TT_LAYOUT_SURFACE_TOP: LAYOUT.surface = 2; break; default: LAYOUT.surface = 1; break; } // TODO: sketches into layer if (this->sketches) { LAYOUT.surface = 1; } LAYOUT.surface_opacity = this->surface_opacity; LAYOUT.nav_factor = this->navf; LAYOUT.nav_right = this->navsx; LAYOUT.nav_up = this->navsy; LAYOUT.own_pages = this->ownp; if (strlen(this->doc_title) > 0) LAYOUT.doc_title = this->doc_title; if (strlen(this->doc_comment) > 0) LAYOUT.doc_comment = this->doc_comment; if (strlen(this->doc_author) > 0) LAYOUT.doc_author = this->doc_author; if (strlen(this->doc_subject) > 0) LAYOUT.doc_subject = this->doc_subject; if (strlen(this->doc_keywords) > 0) LAYOUT.doc_keywords = this->doc_keywords; LAYOUT.opacity = this->opacity; LAYOUT.colored_text = this->color_labels; LAYOUT.background_r = this->color_map_bg.R; LAYOUT.background_g = this->color_map_bg.G; LAYOUT.background_b = this->color_map_bg.B; LAYOUT.foreground_r = this->color_map_fg.R; LAYOUT.foreground_g = this->color_map_fg.G; LAYOUT.foreground_b = this->color_map_fg.B; LAYOUT.preview_above_r = this->color_preview_above.R; LAYOUT.preview_above_g = this->color_preview_above.G; LAYOUT.preview_above_b = this->color_preview_above.B; LAYOUT.preview_below_r = this->color_preview_below.R; LAYOUT.preview_below_g = this->color_preview_below.G; LAYOUT.preview_below_b = this->color_preview_below.B; LAYOUT.lang = this->lang; LAYOUT.langstr = thlang_getid(this->lang); } bool thlayout::is_debug_stations() { return ((this->debug & TTLDBG_STATIONS) != 0); } bool thlayout::is_debug_joins() { return ((this->debug & TTLDBG_JOINS) != 0); } bool thlayout::is_debug_scrapnames() { return ((this->debug & TTLDBG_SCRAPNAMES) != 0); } bool thlayout::is_debug_stationnames() { return ((this->debug & TTLDBG_STATIONNAMES) != 0); } std::list thlayout_copy_src_list; bool thlayout_map_image::defined() { return (strlen(this->m_fn) > 0); } void thlayout_map_image::parse(char ** args, const char * cpath) { int sv; thparse_double(sv,this->m_x,args[0]); if (sv != TT_SV_NUMBER) ththrow(("invalid number -- %s",args[0])) if ((this->m_x < -100.0) || (this->m_x > 200.0)) ththrow(("number between -100.0 - 200.0 expected -- %s",args[0])) thparse_double(sv,this->m_y,args[1]); if (sv != TT_SV_NUMBER) ththrow(("invalid number -- %s",args[1])) if ((this->m_y < -100.0) || (this->m_y > 200.0)) ththrow(("number between -100.0 - 200.0 expected -- %s",args[1])) sv = thmatch_token(args[2],thtt_layout_map_header); if (sv == TT_LAYOUT_MAP_HEADER_UNKNOWN) ththrow(("invalid map-image align switch -- %s",args[2])) this->m_align = sv; if (strlen(args[3]) == 0) ththrow(("empty image file name not allowed")) std::string fpath; fpath = cpath; if (thpath_is_absolute(args[3])) fpath = args[3]; else fpath += args[3]; this->m_fn = thdb.strstore(fpath.c_str()); } therion/thlayout.h0000644000076400010400000003764512043757510015332 0ustar userAdministrators/** * @file thlayout.h * Map layout module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thlayout_h #define thlayout_h #include "thdataobject.h" #include "thlayoutln.h" #include "thsymbolset.h" #include "thlocale.h" #include "thlayoutclr.h" #include /** * layout command options tokens. */ enum { TT_LAYOUT_UNKNOWN = 2000, TT_LAYOUT_SCALE = 2001, TT_LAYOUT_ORIGIN = 2002, TT_LAYOUT_SIZE = 2003, TT_LAYOUT_GRID_SIZE = 2004, TT_LAYOUT_GRID_ORIGIN = 2005, TT_LAYOUT_ORIGIN_LABEL = 2006, TT_LAYOUT_NAV_SIZE = 2007, TT_LAYOUT_NAV_FACTOR = 2008, TT_LAYOUT_OWN_PAGES = 2009, TT_LAYOUT_TITLE_PAGES = 2010, TT_LAYOUT_OPACITY = 2011, TT_LAYOUT_OVERLAP = 2012, TT_LAYOUT_PAGE_NUMBERS = 2013, TT_LAYOUT_PAGE_SETUP = 2014, TT_LAYOUT_COPY = 2015, TT_LAYOUT_DOC_TITLE = 2016, TT_LAYOUT_DOC_AUTHOR = 2017, TT_LAYOUT_DOC_SUBJECT = 2018, TT_LAYOUT_DOC_KEYWORDS = 2019, TT_LAYOUT_EXCLUDE_PAGES = 2020, TT_LAYOUT_GRID = 2021, TT_LAYOUT_PAGE_GRID = 2022, TT_LAYOUT_TRANSPARENCY = 2023, TT_LAYOUT_LAYERS = 2024, TT_LAYOUT_CODE = 2025, TT_LAYOUT_BASE_SCALE = 2026, TT_LAYOUT_SYMBOL_DEFAULTS = 2027, TT_LAYOUT_SYMBOL_ASSIGN = 2028, TT_LAYOUT_SYMBOL_HIDE = 2029, TT_LAYOUT_COLOR = 2030, TT_LAYOUT_SYMBOL_SHOW = 2031, TT_LAYOUT_LEGEND = 2032, TT_LAYOUT_DOC_COMMENT = 2033, TT_LAYOUT_MAP_HEADER = 2034, TT_LAYOUT_LANG = 2035, TT_LAYOUT_MAP_ITEM = 2036, TT_LAYOUT_SCALE_BAR = 2037, TT_LAYOUT_DEBUG = 2038, TT_LAYOUT_LEGEND_WIDTH = 2039, TT_LAYOUT_LEGEND_COLUMNS = 2040, TT_LAYOUT_SURFACE = 2041, TT_LAYOUT_SURFACE_OPACITY = 2042, TT_LAYOUT_ROTATE = 2043, TT_LAYOUT_ENDCODE = 2044, TT_LAYOUT_COLOR_LEGEND = 2045, TT_LAYOUT_MAP_HEADER_BG = 2046, TT_LAYOUT_UNITS = 2047, TT_LAYOUT_SURVEY_LEVEL = 2048, TT_LAYOUT_SKETCHES = 2049, TT_LAYOUT_NORTH = 2050, TT_LAYOUT_MAP_IMAGE = 2051, TT_LAYOUT_GRID_COORDS = 2052, TT_LAYOUT_SYMBOL_COLOR = 2053, }; /** * Layout grid tokens. */ enum { TT_LAYOUT_GRID_UNKNOWN = 0, TT_LAYOUT_GRID_OFF, TT_LAYOUT_GRID_TOP, TT_LAYOUT_GRID_BOTTOM, }; /** * Layout grid token table. */ static const thstok thtt_layout_grid[] = { {"bottom", TT_LAYOUT_GRID_BOTTOM}, {"off", TT_LAYOUT_GRID_OFF}, {"top", TT_LAYOUT_GRID_TOP}, {NULL, TT_LAYOUT_GRID_UNKNOWN} }; /** * Layout grid tokens. */ enum { TT_LAYOUT_GRIDCOORDS_UNKNOWN = 0, TT_LAYOUT_GRIDCOORDS_OFF, TT_LAYOUT_GRIDCOORDS_BORDER, TT_LAYOUT_GRIDCOORDS_ALL, }; /** * Layout grid token table. */ static const thstok thtt_layout_gridcoords[] = { {"all", TT_LAYOUT_GRIDCOORDS_ALL}, {"border", TT_LAYOUT_GRIDCOORDS_BORDER}, {"off", TT_LAYOUT_GRIDCOORDS_OFF}, {NULL, TT_LAYOUT_GRIDCOORDS_UNKNOWN} }; /** * Layout map-item token table. */ //static const thstok thtt_layout_mapitem[] = { // {"north-arrow", SYMS_NORTHARROW}, // {"scale-bar", SYMS_SCALEBAR}, // {NULL, SYMS_ZZZ} //}; /** * Layout legend tokens. */ enum { TT_LAYOUT_LEGEND_UNKNOWN = 0, TT_LAYOUT_LEGEND_OFF, TT_LAYOUT_LEGEND_ON, TT_LAYOUT_LEGEND_ALL, }; /** * Layout legend token table. */ static const thstok thtt_layout_legend[] = { {"all", TT_LAYOUT_LEGEND_ALL}, {"off", TT_LAYOUT_LEGEND_OFF}, {"on", TT_LAYOUT_LEGEND_ON}, {NULL, TT_LAYOUT_LEGEND_UNKNOWN}, }; /** * Layout debug tokens. */ enum { TT_LAYOUT_DEBUG_OFF, TT_LAYOUT_DEBUG_STATIONS, TT_LAYOUT_DEBUG_JOINS, TT_LAYOUT_DEBUG_SCRAPNAMES, TT_LAYOUT_DEBUG_STATIONNAMES, TT_LAYOUT_DEBUG_ALL, TT_LAYOUT_DEBUG_UNKNOWN, }; /** * Layout legend token table. */ static const thstok thtt_layout_debug[] = { {"all", TT_LAYOUT_DEBUG_ALL}, {"first", TT_LAYOUT_DEBUG_STATIONS}, {"off", TT_LAYOUT_DEBUG_OFF}, {"on", TT_LAYOUT_DEBUG_ALL}, {"scrap-names", TT_LAYOUT_DEBUG_SCRAPNAMES}, {"second", TT_LAYOUT_DEBUG_JOINS}, {"station-names", TT_LAYOUT_DEBUG_STATIONNAMES}, {NULL, TT_LAYOUT_DEBUG_UNKNOWN}, }; /** * Layout surface tokens. */ enum { TT_LAYOUT_SURFACE_OFF, TT_LAYOUT_SURFACE_TOP, TT_LAYOUT_SURFACE_BOTTOM, TT_LAYOUT_SURFACE_UNKNOWN, }; /** * Layout legend token table. */ static const thstok thtt_layout_surface[] = { {"bottom", TT_LAYOUT_SURFACE_BOTTOM}, {"off", TT_LAYOUT_SURFACE_OFF}, {"top", TT_LAYOUT_SURFACE_TOP}, {NULL, TT_LAYOUT_SURFACE_UNKNOWN}, }; /** * Layout legend tokens. */ enum { TT_LAYOUT_MAP_HEADER_UNKNOWN = 0, TT_LAYOUT_MAP_HEADER_N, TT_LAYOUT_MAP_HEADER_NW, TT_LAYOUT_MAP_HEADER_NE, TT_LAYOUT_MAP_HEADER_E, TT_LAYOUT_MAP_HEADER_W, TT_LAYOUT_MAP_HEADER_S, TT_LAYOUT_MAP_HEADER_SW, TT_LAYOUT_MAP_HEADER_SE, TT_LAYOUT_MAP_HEADER_OFF, TT_LAYOUT_MAP_HEADER_CENTER, }; /** * Layout legend token table. */ static const thstok thtt_layout_map_header[] = { {"c", TT_LAYOUT_MAP_HEADER_CENTER}, {"center", TT_LAYOUT_MAP_HEADER_CENTER}, {"e", TT_LAYOUT_MAP_HEADER_E}, {"n", TT_LAYOUT_MAP_HEADER_N}, {"ne", TT_LAYOUT_MAP_HEADER_NE}, {"nw", TT_LAYOUT_MAP_HEADER_NW}, {"off", TT_LAYOUT_MAP_HEADER_OFF}, {"s", TT_LAYOUT_MAP_HEADER_S}, {"se", TT_LAYOUT_MAP_HEADER_SE}, {"sw", TT_LAYOUT_MAP_HEADER_SW}, {"w", TT_LAYOUT_MAP_HEADER_W}, {NULL, TT_LAYOUT_MAP_HEADER_UNKNOWN}, }; /** * Layout code tokens. */ enum { TT_LAYOUT_CODE_UNKNOWN = 0, TT_LAYOUT_CODE_TEX_ATLAS, TT_LAYOUT_CODE_TEX_MAP, TT_LAYOUT_CODE_METAPOST, TT_LAYOUT_CODE_SYMBOL_DEFAULTS, TT_LAYOUT_CODE_SYMBOL_ASSIGN, TT_LAYOUT_CODE_SYMBOL_HIDE, TT_LAYOUT_CODE_SYMBOL_SHOW, TT_LAYOUT_CODE_SYMBOL_COLOR, TT_LAYOUT_CODE_MAP_ITEM, }; /** * Layout grid token table. */ static const thstok thtt_layout_code[] = { {"metapost", TT_LAYOUT_CODE_METAPOST}, {"mpost", TT_LAYOUT_CODE_METAPOST}, {"tex-atlas", TT_LAYOUT_CODE_TEX_ATLAS}, {"tex-map", TT_LAYOUT_CODE_TEX_MAP}, {NULL, TT_LAYOUT_CODE_UNKNOWN} }; /** * Layout north tokens. */ enum { TT_LAYOUT_NORTH_UNKNOWN = 0, TT_LAYOUT_NORTH_TRUE, TT_LAYOUT_NORTH_GRID, }; /** * Layout color token table. */ static const thstok thtt_layout_north[] = { {"grid", TT_LAYOUT_NORTH_GRID}, {"true", TT_LAYOUT_NORTH_TRUE}, {NULL, TT_LAYOUT_NORTH_UNKNOWN} }; /** * Layout length statistics tokens. */ enum { TT_LAYOUT_LENSTAT_UNKNOWN = 0, TT_LAYOUT_LENSTAT_OFF, TT_LAYOUT_LENSTAT_HIDE, TT_LAYOUT_LENSTAT_ON, }; /** * Layout color token table. */ static const thstok thtt_layout_lenstat[] = { {"hide", TT_LAYOUT_LENSTAT_HIDE}, {"off", TT_LAYOUT_LENSTAT_OFF}, {"on", TT_LAYOUT_LENSTAT_ON}, {NULL, TT_LAYOUT_LENSTAT_UNKNOWN} }; /** * Layout color tokens. */ enum { TT_LAYOUT_COLOR_UNKNOWN = 0, TT_LAYOUT_COLOR_MAP_BG, TT_LAYOUT_COLOR_MAP_FG, TT_LAYOUT_COLOR_PREVIEW_BELOW, TT_LAYOUT_COLOR_PREVIEW_ABOVE, TT_LAYOUT_COLOR_LABELS, }; /** * Layout color token table. */ static const thstok thtt_layout_color[] = { {"labels", TT_LAYOUT_COLOR_LABELS}, {"map-bg", TT_LAYOUT_COLOR_MAP_BG}, {"map-fg", TT_LAYOUT_COLOR_MAP_FG}, {"preview-above", TT_LAYOUT_COLOR_PREVIEW_ABOVE}, {"preview-below", TT_LAYOUT_COLOR_PREVIEW_BELOW}, {NULL, TT_LAYOUT_COLOR_UNKNOWN} }; /** * Layout color criterion tokens. */ enum { TT_LAYOUT_CCRIT_UNKNOWN = 0, TT_LAYOUT_CCRIT_ALTITUDE, TT_LAYOUT_CCRIT_TOPODATE, TT_LAYOUT_CCRIT_EXPLODATE, TT_LAYOUT_CCRIT_MAP, TT_LAYOUT_CCRIT_SCRAP, }; static const thstok thtt_layout_ccrit[] = { {"altitude", TT_LAYOUT_CCRIT_ALTITUDE}, {"altitudes", TT_LAYOUT_CCRIT_ALTITUDE}, // {"topo-date", TT_LAYOUT_CCRIT_TOPODATE}, // {"explo-date", TT_LAYOUT_CCRIT_EXPLODATE}, {"map", TT_LAYOUT_CCRIT_MAP}, {"maps", TT_LAYOUT_CCRIT_MAP}, {"scrap", TT_LAYOUT_CCRIT_SCRAP}, {"scraps", TT_LAYOUT_CCRIT_SCRAP}, {NULL, TT_LAYOUT_CCRIT_UNKNOWN} }; /** * Layout color tables. */ enum { TT_LAYOUT_CTABLE_UNKNOWN = 0, TT_LAYOUT_CTABLE_HSV, }; static const thstok thtt_layout_ctable[] = { {"hsv", TT_LAYOUT_CTABLE_HSV}, {NULL, TT_LAYOUT_CTABLE_UNKNOWN} }; enum { TT_LAYOUT_CMODE_AUTO, TT_LAYOUT_CMODE_TABLE, TT_LAYOUT_CMODE_MANUAL, }; class thlayout_copy_src { public: const char * srcn; thlayout * srcptr; class thlayout_copy_src * next_src; thlayout_copy_src () : srcn(NULL), srcptr(NULL), next_src(NULL) {}; }; /** * layout command options parsing table. */ static const thstok thtt_layout_opt[] = { {"base-scale",TT_LAYOUT_BASE_SCALE}, {"code",TT_LAYOUT_CODE}, {"color",TT_LAYOUT_COLOR}, {"color-legend",TT_LAYOUT_COLOR_LEGEND}, {"colour",TT_LAYOUT_COLOR}, {"colour-legend",TT_LAYOUT_COLOR_LEGEND}, {"copy",TT_LAYOUT_COPY}, {"debug",TT_LAYOUT_DEBUG}, {"doc-author",TT_LAYOUT_DOC_AUTHOR}, {"doc-keywords",TT_LAYOUT_DOC_KEYWORDS}, {"doc-subject",TT_LAYOUT_DOC_SUBJECT}, {"doc-title",TT_LAYOUT_DOC_TITLE}, {"endcode",TT_LAYOUT_ENDCODE}, {"exclude-pages",TT_LAYOUT_EXCLUDE_PAGES}, {"grid",TT_LAYOUT_GRID}, {"grid-coords",TT_LAYOUT_GRID_COORDS}, {"grid-origin",TT_LAYOUT_GRID_ORIGIN}, {"grid-size",TT_LAYOUT_GRID_SIZE}, {"language",TT_LAYOUT_LANG}, {"layers",TT_LAYOUT_LAYERS}, {"legend",TT_LAYOUT_LEGEND}, {"legend-columns",TT_LAYOUT_LEGEND_COLUMNS}, {"legend-width",TT_LAYOUT_LEGEND_WIDTH}, {"map-comment",TT_LAYOUT_DOC_COMMENT}, {"map-header",TT_LAYOUT_MAP_HEADER}, {"map-header-bg",TT_LAYOUT_MAP_HEADER_BG}, {"map-image",TT_LAYOUT_MAP_IMAGE}, {"nav-factor",TT_LAYOUT_NAV_FACTOR}, {"nav-size",TT_LAYOUT_NAV_SIZE}, {"north",TT_LAYOUT_NORTH}, {"opacity",TT_LAYOUT_OPACITY}, {"origin",TT_LAYOUT_ORIGIN}, {"origin-label",TT_LAYOUT_ORIGIN_LABEL}, {"overlap",TT_LAYOUT_OVERLAP}, {"own-pages",TT_LAYOUT_OWN_PAGES}, {"page-grid",TT_LAYOUT_PAGE_GRID}, {"page-numbers",TT_LAYOUT_PAGE_NUMBERS}, {"page-setup",TT_LAYOUT_PAGE_SETUP}, {"rotate",TT_LAYOUT_ROTATE}, {"scale", TT_LAYOUT_SCALE}, {"scale-bar", TT_LAYOUT_SCALE_BAR}, {"size", TT_LAYOUT_SIZE}, {"sketches", TT_LAYOUT_SKETCHES}, {"statistics",TT_LAYOUT_MAP_ITEM}, {"surface",TT_LAYOUT_SURFACE}, {"surface-opacity",TT_LAYOUT_SURFACE_OPACITY}, {"survey-level",TT_LAYOUT_SURVEY_LEVEL}, {"symbol-assign", TT_LAYOUT_SYMBOL_ASSIGN}, {"symbol-color", TT_LAYOUT_SYMBOL_COLOR}, {"symbol-colour", TT_LAYOUT_SYMBOL_COLOR}, {"symbol-hide", TT_LAYOUT_SYMBOL_HIDE}, {"symbol-set", TT_LAYOUT_SYMBOL_DEFAULTS}, {"symbol-show", TT_LAYOUT_SYMBOL_SHOW}, {"title-pages",TT_LAYOUT_TITLE_PAGES}, {"transparency",TT_LAYOUT_TRANSPARENCY}, {"units",TT_LAYOUT_UNITS}, {NULL, TT_LAYOUT_UNKNOWN}, }; struct thlayout_map_image { double m_x, m_y; const char * m_fn; int m_align; thlayout_map_image() : m_x(0.0), m_y(0.0), m_fn(""), m_align(TT_LAYOUT_MAP_HEADER_OFF) {} bool defined(); void parse(char ** args, const char * cpath); }; typedef std::list thlayout_map_image_list; /** * layout class. */ class thlayout : public thdataobject { public: class thconfig * m_pconfig; double scale, scale_bar, base_scale, ox, oy, oz, hsize, vsize, paphs, papvs, paghs, pagvs, marls, marts, gxs, gys, gzs, gox, goy, goz, navf, overlap, opacity, map_header_x, map_header_y, legend_width, surface_opacity, rotate; const char * olx, * oly, * doc_title, * doc_comment, * doc_author, * doc_subject, * doc_keywords, * excl_list; unsigned navsx, navsy, ownp, legend_columns; char grid, ccode; int legend, color_legend, map_header, lang, north, max_explos, max_topos, max_cartos, max_copys, debug, survey_level, surface, grid_coords; thlayout_color color_map_bg, color_map_fg, color_preview_below, color_preview_above; int color_crit, // none, altitude, ... color_mode, // auto - values and colors, table - colors, manual color_table; // hsv, cool, hot ... thlayoutln * first_line, * last_line; bool titlep, transparency, layers, pgsnum, lock, excl_pages, page_grid, map_header_bg, sketches, color_labels; int explo_lens, topo_lens; thlocale units; thlayout_map_image_list map_image_list; int def_grid_size, def_grid_origin, def_nav_factor, def_nav_size, def_opacity, def_transparency, def_layers, def_base_scale, def_rotate, def_sketches, def_north, def_origin, def_origin_label, def_overlap, def_own_pages, def_page_numbers, def_page_setup, def_scale, def_size, def_title_pages, def_tex_lines, def_doc_title, def_doc_comment, def_doc_author, def_doc_subject, def_doc_keywords, def_excl_pages, def_grid, def_page_grid, def_legend, def_color_legend, def_legend_width, def_legend_columns, def_map_header, def_lang, def_scale_bar, def_map_header_bg, def_max_explos, def_max_topos, def_max_cartos, def_max_copys, def_explo_lens, def_topo_lens, def_debug, def_survey_level, def_surface, def_surface_opacity, def_units, def_grid_coords, def_color_labels; thlayout_copy_src * first_copy_src, * last_copy_src; /** * Standard constructor. */ thlayout(); /** * Standard destructor. */ ~thlayout(); /** * Return class identifier. */ virtual int get_class_id(); /** * Return class name. */ virtual const char * get_class_name() {return "thlayout";}; /** * Return true, if son of given class. */ virtual bool is(int class_id); /** * Return number of command arguments. */ virtual int get_cmd_nargs(); /** * Return command name. */ virtual const char * get_cmd_name(); /** * Return command end option. */ virtual const char * get_cmd_end(); /** * Return option description. */ virtual thcmd_option_desc get_cmd_option_desc(const char * opts); thcmd_option_desc get_default_cod(int id); /** * Set command option. * * @param cod Command option description. * @param args Option arguments arry. * @param argenc Arguments encoding. */ virtual void set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline); /** * Delete this object. * * @warn Always use this methos instead of delete function. */ virtual void self_delete(); /** * Print object properties. */ virtual void self_print_properties(FILE * outf); /** * Print object in C++ format. */ void self_print_library(); /** * Get context for object. */ virtual int get_context(); /** * Parse option with 3 or 2 or 1 numbers and units. */ void parse_len(double & d1, double & d2, double & d3, int nargs, char ** args, int nonneg = -1); void parse_len6(double & d1, double & d2, double & d3, double & d4, double & d5, double & d6, int nargs, char ** args, int nonneg = -1); /** * Export configuration file. */ void export_config(FILE * o, thdb2dprj * prj, double x_scale, double x_origin_shx, double x_origin_shy); /** * Export main tex file. */ void export_pdftex(FILE * o, thdb2dprj * prj, char mode); void export_mpost(FILE * o); void export_mpost_symbols(FILE * o, struct thsymbolset * symset); /** * Process copy. */ void process_copy(); bool is_debug_stations(); bool is_debug_joins(); bool is_debug_scrapnames(); bool is_debug_stationnames(); /** * set LAYOUT variable. */ void set_thpdf_layout(thdb2dprj * prj, double x_scale, double x_origin_shx, double x_origin_shy); }; /** * Copy src list. */ extern std::list thlayout_copy_src_list; #endif therion/thlayoutclr.cxx0000644000076400010400000000422711656730250016375 0ustar userAdministrators/** * @file thlayoutclr.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thlayoutclr.h" #include "thparse.h" #include "thdatabase.h" #include "thexception.h" void thlayout_color::parse(char * str, bool aalpha) { thsplit_words(&(thdb.mbuff_tmp), str); int nargs = thdb.mbuff_tmp.get_size(), sv; char ** args = thdb.mbuff_tmp.get_buffer(); #define invalid_color_spec ththrow(("invalid color specification -- %s", str)) switch (nargs) { case 3: thparse_double(sv,this->B,args[2]); if ((sv != TT_SV_NUMBER) || (this->B < 0.0) || (this->B > 100.0)) invalid_color_spec; this->B /= 100.0; thparse_double(sv,this->G,args[1]); if ((sv != TT_SV_NUMBER) || (this->G < 0.0) || (this->G > 100.0)) invalid_color_spec; this->G /= 100.0; case 1: if (aalpha && (strcmp(args[0],"transparent") == 0)) { this->A = 0.0; this->defined = 2; break; } thparse_double(sv,this->R,args[0]); if ((sv != TT_SV_NUMBER) || (this->R < 0.0) || (this->R > 100.0)) invalid_color_spec; this->R /= 100.0; if (nargs == 1) { this->B = this->R; this->G = this->R; } this->defined = 2; break; default: invalid_color_spec; } } therion/thlayoutclr.h0000644000076400010400000000261411446627620016023 0ustar userAdministrators/** * @file thlayoutclr.h * Scrap outline line class. */ /* Copyright (C) 2009 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thlayoutclr_h #define thlayoutclr_h /** * layout color class. */ struct thlayout_color { double R, G, B, A; int defined; void parse(char * str, bool aalpha = false); thlayout_color() : R(1.0), G(1.0), B(1.0), A(1.0), defined(0) {} thlayout_color(double v) : R(v), G(v), B(v), A(1.0), defined(0) {} thlayout_color(double r, double g, double b) : R(r), G(g), B(b), A(1.0), defined(0) {} }; #endif therion/thlayoutln.cxx0000644000076400010400000000220210625655142016216 0ustar userAdministrators/** * @file thlayoutln.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thlayoutln.h" #include "thlayout.h" thlayoutln::thlayoutln() { this->next_line = NULL; this->line = NULL; this->smid = 0; this->code = TT_LAYOUT_CODE_TEX_ATLAS; } therion/thlayoutln.h0000644000076400010400000000261311225631452015644 0ustar userAdministrators/** * @file thlayoutln.h * Scrap outline line class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thlayoutln_h #define thlayoutln_h #include #include "thlayoutclr.h" /** * Layout line class. */ class thlayoutln { public: char code; thlayoutln * next_line; const char * line; thlayout_color sclr; ///< Symbol color. int smid; ///< Symbol macro ID thlayoutln(); ///< Default constructor }; typedef std::list thlayoutln_list; ///< Points list. #endif therion/thlegenddata.cxx0000644000076400010400000000322610625655142016446 0ustar userAdministrators/** * @file thpdfdata.cxx */ /* Copyright (C) 2003 Martin Budaj * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include #include #include #include #include "thlegenddata.h" using namespace std; legenddata::legenddata() { legendtitle = "Legenda"; colorlegendtitle = "Legenda hlbok"; cavename = "Jaskyna MN"; comment = "komentar"; copyrights = "(c) ja"; cavelengthtitle = "Dlzka"; cavelength = "124324"; cavedepthtitle = "Hlbka"; cavedepth = "3243"; explotitle = "Objavili"; explodate = "2004"; exploteam = "A B C"; topotitle = "Zamerali"; topodate = "2005"; topoteam = "D E F"; cartotitle = "Kreslil"; cartodate = "2006"; cartoteam = "G"; northarrow = true; scalebar = true; } //void legenddata::print_tex() { //} //void legenddata::print_svg() { //} therion/thlegenddata.h0000644000076400010400000000255010625655142016072 0ustar userAdministrators/* * Copyright (C) 2003 Martin Budaj * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thlegenddata_h #define thlegenddata_h #include struct legenddata { std::string legendtitle, colorlegendtitle, cavename, comment, copyrights, cavelengthtitle, cavelength, cavedepthtitle, cavedepth, explotitle, explodate, exploteam, topotitle, topodate, topoteam, cartotitle, cartodate, cartoteam; bool northarrow, scalebar; legenddata(); }; #endif therion/thlibrary.cxx0000644000076400010400000000212110625655142016013 0ustar userAdministrators/** * @file thlibrary.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thlibrary.h" #include "thlibrarydata.cxx" void thlibrary_init() { thlibrary_init_grades(); thlibrary_init_layouts(); } therion/thlibrary.h0000644000076400010400000000206310625655142015445 0ustar userAdministrators/** * @file thlibrary.h * Therion library initialization. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thlibrary_h #define thlibrary_h void thlibrary_init(); #endif therion/thlibrarydata.cxx0000644000076400010400000002526612065354202016655 0ustar userAdministrators/** * @file librarydata.cxx * * THIS FILE IS GENERATED AUTOMATICALLY, DO NOT MODIFY IT !!! */ #include "thdatabase.h" #include "thobjectsrc.h" #include "thinfnan.h" #include "thchencdata.h" #include "thlayout.h" #include "thlang.h" #include "thgrade.h" void thlibrary_init_grades() { thgrade * pgrade; thbuffer oname; pgrade = (thgrade *) thdb.create("grade", thobjectsrc("therion",0)); oname = "BCRA3"; pgrade->set(thcmd_option_desc(TT_DATAOBJECT_NAME,1),oname,0,0); oname = "BCRA grade 3"; pgrade->set(thcmd_option_desc(TT_DATAOBJECT_TITLE,1),oname,TT_UTF_8,0); pgrade->dls_length = 0.25; pgrade->dls_bearing = 1.25; pgrade->dls_gradient = 1.25; pgrade->dls_counter = thnan; pgrade->dls_depth = thnan; pgrade->dls_dx = thnan; pgrade->dls_dy = thnan; pgrade->dls_dz = thnan; pgrade->dls_x = 0.25; pgrade->dls_y = 0.25; pgrade->dls_z = 0.25; thdb.insert(pgrade); pgrade = (thgrade *) thdb.create("grade", thobjectsrc("therion",0)); oname = "BCRA5"; pgrade->set(thcmd_option_desc(TT_DATAOBJECT_NAME,1),oname,0,0); oname = "BCRA grade 5"; pgrade->set(thcmd_option_desc(TT_DATAOBJECT_TITLE,1),oname,TT_UTF_8,0); pgrade->dls_length = 0.05; pgrade->dls_bearing = 0.5; pgrade->dls_gradient = 0.5; pgrade->dls_counter = thnan; pgrade->dls_depth = thnan; pgrade->dls_dx = thnan; pgrade->dls_dy = thnan; pgrade->dls_dz = thnan; pgrade->dls_x = 0.05; pgrade->dls_y = 0.05; pgrade->dls_z = 0.05; thdb.insert(pgrade); } void thlibrary_init_layouts() { thlayout * playout; thbuffer oname; playout = (thlayout *) thdb.create("layout", thobjectsrc("therion",0)); oname = "AUT"; playout->set(thcmd_option_desc(TT_DATAOBJECT_NAME,1),oname,TT_UTF_8,0); oname = "Austrian symbol set"; playout->set(thcmd_option_desc(TT_DATAOBJECT_TITLE,1),oname,TT_UTF_8,0); playout->def_scale = 0; playout->scale = 0.005; playout->def_base_scale = 0; playout->base_scale = 0.005; playout->def_rotate = 0; playout->rotate = 0; playout->def_page_setup = 0; playout->hsize = 0.18; playout->vsize = 0.222; playout->paphs = 0.21; playout->papvs = 0.297; playout->paghs = 0.2; playout->pagvs = 0.287; playout->marts = 0.005; playout->marls = 0.005; playout->color_map_bg.defined = 0; playout->color_map_bg.R = 1; playout->color_map_bg.G = 1; playout->color_map_bg.B = 1; playout->color_map_bg.A = 1; playout->color_map_fg.defined = 0; playout->color_crit = 0; playout->color_map_fg.R = 1; playout->color_map_fg.G = 1; playout->color_map_fg.B = 1; playout->color_map_fg.A = 1; playout->color_preview_below.defined = 0; playout->color_preview_below.R = 0.5; playout->color_preview_below.G = 0.5; playout->color_preview_below.B = 0.5; playout->color_preview_below.A = 1; playout->color_preview_above.defined = 0; playout->color_preview_above.R = 0; playout->color_preview_above.G = 0; playout->color_preview_above.B = 0; playout->color_preview_above.A = 1; playout->def_overlap = 0; playout->overlap = 0.01; playout->def_scale_bar = 0; playout->scale_bar = -1; playout->def_transparency = 0; playout->transparency = true; playout->def_sketches = 0; playout->sketches = false; playout->def_legend = 0; playout->legend = TT_LAYOUT_LEGEND_OFF; playout->def_survey_level = 0; playout->survey_level = 0; playout->def_color_legend = 0; playout->legend = 1; playout->def_legend_width = 0; playout->legend_width = 0.14; playout->def_legend_columns = 0; playout->legend_columns = 2; playout->def_map_header = 0; playout->map_header = 3; playout->map_header_x = 100; playout->map_header_y = 0; playout->def_debug = 0; playout->debug = 0; playout->def_max_explos = 0; playout->max_explos = -1; playout->def_max_topos = 0; playout->max_topos = -1; playout->def_max_cartos = 0; playout->max_cartos = -1; playout->def_max_copys = 0; playout->max_copys = -1; playout->def_explo_lens = 0; playout->explo_lens = 2; playout->def_topo_lens = 0; playout->topo_lens = 2; playout->def_lang = 0; playout->lang = THLANG_EN; playout->def_units = 0; playout->units.units = 1; playout->def_layers = 0; playout->layers = true; playout->def_map_header_bg = 0; playout->map_header_bg = false; playout->def_opacity = 0; playout->opacity = 0.75; playout->def_surface_opacity = 0; playout->surface_opacity = 0.75; playout->def_surface= 0; playout->surface = 0; playout->def_color_labels= 0; playout->color_labels = false; playout->def_grid_coords = 0; playout->grid_coords = 1; playout->def_north= 0; playout->north = 1; playout->def_grid = 0; playout->grid = 1; playout->def_page_grid = 0; playout->page_grid = false; playout->def_origin = 0; playout->def_origin_label = 0; playout->olx = "0"; playout->oly = "0"; playout->def_doc_title = 0; playout->doc_title = ""; playout->def_doc_comment = 0; playout->doc_comment = ""; playout->def_doc_author = 0; playout->doc_author = ""; playout->def_doc_subject = 0; playout->doc_subject = ""; playout->def_doc_keywords = 0; playout->doc_keywords = ""; playout->def_excl_pages = 0; playout->excl_pages = false; playout->excl_list = NULL; playout->def_grid_size = 0; playout->def_grid_origin = 0; playout->def_nav_factor = 0; playout->navf = 30; playout->def_nav_size = 0; playout->navsx = 2; playout->navsy = 2; playout->def_own_pages = 0; playout->ownp = 0; playout->def_title_pages = 0; playout->titlep = false; playout->def_page_numbers = 0; playout->pgsnum = true; oname = "AUT"; playout->set(thcmd_option_desc(TT_LAYOUT_SYMBOL_DEFAULTS,1),oname,TT_UTF_8,0); playout->set(thcmd_option_desc(TT_LAYOUT_SYMBOL_DEFAULTS,0),NULL,TT_UTF_8,0); playout->last_line->code = TT_LAYOUT_CODE_SYMBOL_COLOR; playout->last_line->smid = SYMX_WATER; playout->last_line->sclr = thlayout_color(0.180000,0.190000,0.570000); playout->set(thcmd_option_desc(TT_LAYOUT_SYMBOL_DEFAULTS,0),NULL,TT_UTF_8,0); playout->last_line->code = TT_LAYOUT_CODE_SYMBOL_COLOR; playout->last_line->smid = SYMX_SPELEOTHEMS; playout->last_line->sclr = thlayout_color(0.870000,0.390000,0.230000); playout->set(thcmd_option_desc(TT_LAYOUT_SYMBOL_DEFAULTS,0),NULL,TT_UTF_8,0); playout->last_line->code = TT_LAYOUT_CODE_SYMBOL_COLOR; playout->last_line->smid = SYMX_SEDIMENTS; playout->last_line->sclr = thlayout_color(0.500000,0.420000,0.390000); playout->set(thcmd_option_desc(TT_LAYOUT_SYMBOL_DEFAULTS,0),NULL,TT_UTF_8,0); playout->last_line->code = TT_LAYOUT_CODE_SYMBOL_COLOR; playout->last_line->smid = SYMX_CENTERLINE; playout->last_line->sclr = thlayout_color(0.950000,0.000000,0.000000); playout->set(thcmd_option_desc(TT_LAYOUT_SYMBOL_DEFAULTS,0),NULL,TT_UTF_8,0); playout->last_line->code = TT_LAYOUT_CODE_SYMBOL_COLOR; playout->last_line->smid = SYMX_ICE; playout->last_line->sclr = thlayout_color(0.000000,0.680000,0.940000); playout->def_tex_lines = 2; thdb.insert(playout); playout = (thlayout *) thdb.create("layout", thobjectsrc("therion",0)); oname = "SCR200"; playout->set(thcmd_option_desc(TT_DATAOBJECT_NAME,1),oname,TT_UTF_8,0); oname = "Computer screen layout"; playout->set(thcmd_option_desc(TT_DATAOBJECT_TITLE,1),oname,TT_UTF_8,0); playout->def_scale = 2; playout->scale = 0.005; playout->def_base_scale = 0; playout->base_scale = 0.005; playout->def_rotate = 0; playout->rotate = 0; playout->def_page_setup = 2; playout->hsize = 0.24; playout->vsize = 0.1399; playout->paphs = 0.27; playout->papvs = 0.2025; playout->paghs = 0.26; playout->pagvs = 0.1925; playout->marts = 0.005; playout->marls = 0.005; playout->color_map_bg.defined = 0; playout->color_map_bg.R = 1; playout->color_map_bg.G = 1; playout->color_map_bg.B = 1; playout->color_map_bg.A = 1; playout->color_map_fg.defined = 0; playout->color_crit = 0; playout->color_map_fg.R = 1; playout->color_map_fg.G = 1; playout->color_map_fg.B = 1; playout->color_map_fg.A = 1; playout->color_preview_below.defined = 0; playout->color_preview_below.R = 0.5; playout->color_preview_below.G = 0.5; playout->color_preview_below.B = 0.5; playout->color_preview_below.A = 1; playout->color_preview_above.defined = 0; playout->color_preview_above.R = 0; playout->color_preview_above.G = 0; playout->color_preview_above.B = 0; playout->color_preview_above.A = 1; playout->def_overlap = 2; playout->overlap = 0.01; playout->def_scale_bar = 0; playout->scale_bar = -1; playout->def_transparency = 0; playout->transparency = true; playout->def_sketches = 0; playout->sketches = false; playout->def_legend = 0; playout->legend = TT_LAYOUT_LEGEND_OFF; playout->def_survey_level = 0; playout->survey_level = 0; playout->def_color_legend = 0; playout->legend = 1; playout->def_legend_width = 0; playout->legend_width = 0.14; playout->def_legend_columns = 0; playout->legend_columns = 2; playout->def_map_header = 0; playout->map_header = 3; playout->map_header_x = 100; playout->map_header_y = 0; playout->def_debug = 0; playout->debug = 0; playout->def_max_explos = 0; playout->max_explos = -1; playout->def_max_topos = 0; playout->max_topos = -1; playout->def_max_cartos = 0; playout->max_cartos = -1; playout->def_max_copys = 0; playout->max_copys = -1; playout->def_explo_lens = 0; playout->explo_lens = 2; playout->def_topo_lens = 0; playout->topo_lens = 2; playout->def_lang = 0; playout->lang = THLANG_EN; playout->def_units = 0; playout->units.units = 1; playout->def_layers = 0; playout->layers = true; playout->def_map_header_bg = 0; playout->map_header_bg = false; playout->def_opacity = 0; playout->opacity = 0.75; playout->def_surface_opacity = 0; playout->surface_opacity = 0.75; playout->def_surface= 0; playout->surface = 0; playout->def_color_labels= 0; playout->color_labels = false; playout->def_grid_coords = 0; playout->grid_coords = 1; playout->def_north= 0; playout->north = 1; playout->def_grid = 0; playout->grid = 1; playout->def_page_grid = 0; playout->page_grid = false; playout->def_origin = 0; playout->def_origin_label = 2; playout->olx = "100"; playout->oly = "100"; playout->def_doc_title = 0; playout->doc_title = ""; playout->def_doc_comment = 0; playout->doc_comment = ""; playout->def_doc_author = 0; playout->doc_author = ""; playout->def_doc_subject = 0; playout->doc_subject = ""; playout->def_doc_keywords = 0; playout->doc_keywords = ""; playout->def_excl_pages = 0; playout->excl_pages = false; playout->excl_list = NULL; playout->def_grid_size = 2; playout->gxs = 10; playout->gys = 10; playout->gzs = 10; playout->def_grid_origin = 0; playout->def_nav_factor = 2; playout->navf = 25; playout->def_nav_size = 2; playout->navsx = 2; playout->navsy = 2; playout->def_own_pages = 0; playout->ownp = 0; playout->def_title_pages = 0; playout->titlep = false; playout->def_page_numbers = 0; playout->pgsnum = true; oname = "SKBB"; playout->set(thcmd_option_desc(TT_LAYOUT_SYMBOL_DEFAULTS,1),oname,TT_UTF_8,0); playout->def_tex_lines = 2; thdb.insert(playout); } therion/thlibrarydata.thcfg0000644000076400010400000000005707777756224017165 0ustar userAdministratorsinput lib/layouts.thcfg source lib/therion.th therion/thline.cxx0000644000076400010400000012345612047243356015315 0ustar userAdministrators/** * @file thline.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thline.h" #include "thexception.h" #include "thparse.h" #include "thchenc.h" #include "thdb2dlp.h" #include "thexpmap.h" #include "thtflength.h" #include "thtexfonts.h" #include "thscrap.h" #ifdef THMSVC #define hypot _hypot #endif thline::thline() { this->type = TT_LINE_TYPE_UNKNOWN; this->outline = TT_LINE_OUTLINE_NONE; this->closed = TT_AUTO; this->reverse = false; this->is_closed = false; this->csubtype = TT_LINE_SUBTYPE_UNKNOWN; this->first_point = NULL; this->last_point = NULL; this->text = NULL; this->m_height = thnan; } thline::~thline() { } int thline::get_class_id() { return TT_LINE_CMD; } bool thline::is(int class_id) { if (class_id == TT_LINE_CMD) return true; else return th2ddataobject::is(class_id); } int thline::get_cmd_nargs() { return 1; } const char * thline::get_cmd_end() { return "endline"; } const char * thline::get_cmd_name() { return "line"; } thcmd_option_desc thline::get_cmd_option_desc(const char * opts) { int id = thmatch_token(opts, thtt_line_opt); if (id == TT_LINE_UNKNOWN) return th2ddataobject::get_cmd_option_desc(opts); else return thcmd_option_desc(id); } void thline::set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline) { int reversion, csmooth, sv; char * type, * subtype; if (cod.id == 1) cod.id = TT_LINE_TYPE; switch (cod.id) { case 0: thsplit_args(& this->db->db2d.mbf, *args); this->insert_line_point(this->db->db2d.mbf.get_size(), this->db->db2d.mbf.get_buffer()); break; case TT_LINE_TYPE: th2dsplitTT(*args, &type, &subtype); this->parse_type(type); if (strlen(subtype) > 0) this->parse_subtype(subtype); break; case TT_LINE_OUTLINE: this->outline = thmatch_token(*args,thtt_line_outlines); if (this->outline == TT_LINE_OUTLINE_UNKNOWN) ththrow(("unknown line outline -- %s",*args)) break; case TT_LINE_CLOSED: this->closed = thmatch_token(*args,thtt_onoffauto); if (this->closed == TT_UNKNOWN_BOOL) ththrow(("invalid closure switch -- %s",*args)) break; case TT_LINE_REVERSE: reversion = thmatch_token(*args,thtt_bool); if (reversion == TT_UNKNOWN_BOOL) ththrow(("invalid reversion switch -- %s",*args)) this->reverse = (reversion == TT_TRUE); break; case TT_LINE_SUBTYPE: this->parse_subtype(*args); break; case TT_LINE_HEIGHT: this->parse_height(*args); break; case TT_LINE_BORDER: this->parse_border(*args); break; case TT_LINE_GRADIENT: this->parse_gradient(*args); break; case TT_LINE_DIRECTION: this->parse_direction(*args); break; case TT_LINE_HEAD: this->parse_head(*args); break; case TT_LINE_ADJUST: this->parse_adjust(*args); break; case TT_LINE_ALTITUDE: this->parse_altitude(*args); break; case TT_LINE_TEXT: thencode(&(this->db->buff_enc), *args, argenc); this->parse_text(this->db->buff_enc.get_buffer()); break; case TT_LINE_SMOOTH: csmooth = thmatch_token(*args,thtt_onoffauto); if (csmooth == TT_UNKNOWN_BOOL) ththrow(("invalid smooth switch -- %s",*args)) if (this->last_point != NULL) { this->last_point->smooth = csmooth; this->last_point->smooth_orig = csmooth; } else ththrow(("no line point specified")) break; case TT_LINE_ORIENT: if (this->last_point != NULL) { if (this->type != TT_LINE_TYPE_SLOPE) ththrow(("orientation not valid with type %s", thmatch_string(this->type,thtt_line_types))) thparse_double(sv,this->last_point->orient,*args); if ((sv != TT_SV_NUMBER) && (sv != TT_SV_NAN)) ththrow(("invalid number -- %s",*args)) if ((this->last_point->orient < 0.0) || (this->last_point->orient >= 360.0)) ththrow(("orientation out of range -- %s",*args)) this->last_point->tags |= TT_LINEPT_TAG_ORIENT; } else ththrow(("no line point specified")) break; case TT_LINE_SIZE: case TT_LINE_RSIZE: case TT_LINE_LSIZE: this->parse_size(cod.id,*args); break; case TT_LINE_MARK: this->insert_point_mark(*args); break; // if not found, try to set fathers properties default: th2ddataobject::set(cod, args, argenc, indataline); } } void thline::self_delete() { delete this; } void thline::self_print_properties(FILE * outf) { th2ddataobject::self_print_properties(outf); fprintf(outf,"thline:\n"); fprintf(outf,"\ttype: %d\n", this->type); fprintf(outf,"\toutline: %d\n", this->outline); fprintf(outf,"\tclosed: %d\n", this->closed); fprintf(outf,"\treverse: %d\n", this->reverse); if (this->last_point != NULL) { fprintf(outf,"\tpoints:\n"); thdb2dlp * cpt = this->first_point; while(cpt != NULL) { fprintf(outf,"\t"); if (cpt->cp1 != NULL) fprintf(outf,"\t -- %f,%f (%f,%f,%f,%f)\n\t",cpt->cp1->x, cpt->cp1->y, cpt->cp1->xt, cpt->cp1->yt, cpt->cp1->zt, cpt->cp1->at); if (cpt->cp2 != NULL) fprintf(outf,"\t -- %f,%f (%f,%f,%f,%f)\n\t",cpt->cp2->x, cpt->cp2->y, cpt->cp2->xt, cpt->cp2->yt, cpt->cp2->zt, cpt->cp2->at); fprintf(outf,"\t%f,%f (%f,%f,%f,%f)",cpt->point->x, cpt->point->y, cpt->point->xt, cpt->point->yt, cpt->point->zt, cpt->point->at); fprintf(outf,"\t(subtype:%d smooth:%d orient:%f r-size:%f l-size:%f)\n",cpt->subtype,cpt->smooth, cpt->orient, cpt->rsize, cpt->lsize); cpt = cpt->nextlp; } } // insert intended print of object properties here } void thline::parse_type(char * ss) { this->type = thmatch_token(ss,thtt_line_types); switch (this->type) { case TT_LINE_TYPE_UNKNOWN: ththrow(("unknown line type -- %s",ss)) break; case TT_LINE_TYPE_WALL: this->csubtype = TT_LINE_SUBTYPE_BEDROCK; this->outline = TT_LINE_OUTLINE_OUT; break; case TT_LINE_TYPE_BORDER: this->csubtype = TT_LINE_SUBTYPE_VISIBLE; break; case TT_LINE_TYPE_WATER_FLOW: this->csubtype = TT_LINE_SUBTYPE_PERMANENT; break; case TT_LINE_TYPE_SURVEY: this->csubtype = TT_LINE_SUBTYPE_CAVE; break; case TT_LINE_TYPE_ARROW: this->tags |= TT_LINE_TAG_HEAD_END; break; case TT_LINE_TYPE_CHIMNEY: this->place = TT_2DOBJ_PLACE_DEFAULT_TOP; break; case TT_LINE_TYPE_CEILING_STEP: this->place = TT_2DOBJ_PLACE_DEFAULT_TOP; break; case TT_LINE_TYPE_CEILING_MEANDER: this->place = TT_2DOBJ_PLACE_DEFAULT_TOP; break; } } void thline::parse_subtype(char * ss) { // int prevcsubtype = this->csubtype; if (this->type == TT_LINE_TYPE_U) { if (this->last_point != NULL) ththrow(("subtype specification not allowed here")) this->parse_u_subtype(ss); return; } this->csubtype = thmatch_token(ss,thtt_line_subtypes); if (this->csubtype == TT_LINE_SUBTYPE_UNKNOWN) ththrow(("invalid line subtype -- %s",ss)) // if ((this->last_point != NULL) && (prevcsubtype != TT_LINE_SUBTYPE_UNKNOWN) // && (this->csubtype != prevcsubtype)) { // this->throw_source(); // threwarning2(("multiple subtypes per line are deprecated")) // } bool tsok = false; switch (this->type) { case TT_LINE_TYPE_WALL: switch (this->csubtype) { case TT_LINE_SUBTYPE_INVISIBLE: case TT_LINE_SUBTYPE_BEDROCK: case TT_LINE_SUBTYPE_SAND: case TT_LINE_SUBTYPE_CLAY: case TT_LINE_SUBTYPE_PEBBLES: case TT_LINE_SUBTYPE_DEBRIS: case TT_LINE_SUBTYPE_BLOCKS: case TT_LINE_SUBTYPE_ICE: case TT_LINE_SUBTYPE_UNDERLYING: case TT_LINE_SUBTYPE_UNSURVEYED: case TT_LINE_SUBTYPE_PRESUMED: case TT_LINE_SUBTYPE_OVERLYING: case TT_LINE_SUBTYPE_PIT: case TT_LINE_SUBTYPE_MOONMILK: case TT_LINE_SUBTYPE_FLOWSTONE: tsok = true; } break; case TT_LINE_TYPE_BORDER: switch (this->csubtype) { case TT_LINE_SUBTYPE_INVISIBLE: case TT_LINE_SUBTYPE_TEMPORARY: case TT_LINE_SUBTYPE_VISIBLE: case TT_LINE_SUBTYPE_PRESUMED: tsok = true; } break; case TT_LINE_TYPE_SURVEY: switch (this->csubtype) { case TT_LINE_SUBTYPE_CAVE: case TT_LINE_SUBTYPE_SURFACE: tsok = true; } break; case TT_LINE_TYPE_WATER_FLOW: switch (this->csubtype) { case TT_LINE_SUBTYPE_PERMANENT: case TT_LINE_SUBTYPE_INTERMITTENT: case TT_LINE_SUBTYPE_CONJECTURAL: tsok = true; } break; } if (!tsok) ththrow(("invalid line type - subtype combination")) if (this->last_point != NULL) this->last_point->subtype = this->csubtype; } void thline::insert_line_point(int nargs, char ** args, double * nums) { // check number of parameters if ((nargs != 6) && (nargs != 2)) ththrow(("invalid number of coordinates -- %d", nargs)) double cp1x, cp1y, cp2x, cp2y, x, y; int pidx = 0, sv; char * invs = NULL; bool invnum = false; if (nargs == 6) { pidx = 4; if (args != NULL) { thparse_double(sv, cp1x, args[0]); if (sv != TT_SV_NUMBER) { invs = args[0]; invnum = true; } thparse_double(sv, cp1y, args[1]); if (sv != TT_SV_NUMBER) { invs = args[1]; invnum = true; } thparse_double(sv, cp2x, args[2]); if (sv != TT_SV_NUMBER) { invs = args[2]; invnum = true; } thparse_double(sv, cp2y, args[3]); if (sv != TT_SV_NUMBER) { invs = args[3]; invnum = true; } } else { cp1x = nums[0]; cp1y = nums[1]; cp2x = nums[2]; cp2y = nums[3]; } } if (args != NULL) { thparse_double(sv, x, args[pidx]); if (sv != TT_SV_NUMBER) { invs = args[pidx]; invnum = true; } thparse_double(sv, y, args[pidx+1]); if (sv != TT_SV_NUMBER) { invs = args[pidx+1]; invnum = true; } } else { x = nums[pidx]; y = nums[pidx+1]; } if (invnum) ththrow(("invalid number -- %s",invs)) // let's insert point into database thdb2dlp * plp = this->db->db2d.insert_line_point(); plp->subtype = this->csubtype; plp->smooth = TT_AUTO; plp->smooth_orig = TT_AUTO; if (this->last_point == NULL) { this->last_point = plp; this->first_point = plp; plp->nextlp = NULL; plp->prevlp = NULL; } else { this->last_point->nextlp = plp; plp->prevlp = this->last_point; plp->nextlp = NULL; this->last_point = plp; } thdb2dpt * cp1, * cp2, * pt; pt = this->db->db2d.insert_point(); pt->x = x; pt->y = y; pt->pscrap = this->db->get_current_scrap(); plp->point = pt; if (nargs == 6) { cp1 = this->db->db2d.insert_point(); cp1->x = cp1x; cp1->y = cp1y; cp1->pscrap = this->db->get_current_scrap(); cp2 = this->db->db2d.insert_point(); cp2->x = cp2x; cp2->y = cp2y; cp2->pscrap = this->db->get_current_scrap(); plp->cp1 = cp1; plp->cp2 = cp2; } else { plp->cp1 = NULL; plp->cp2 = NULL; } } void thline::insert_point_mark(char * ss) { if (!th_is_keyword(ss)) ththrow(("mark not a key word -- %s",ss)) if (this->last_point == NULL) ththrow(("no line point specified")) this->last_point->mark = this->db->strstore(ss,true); } thdb2dlp * thline::get_marked_station(const char * mark) { if (strcmp(mark,"end") == 0) { if (this->reverse) return this->first_point; else return this->last_point; } thdb2dlp * cpt = (this->reverse ? this->last_point : this->first_point); if (th_is_index(mark)) { int index = -1, cidx; sscanf(mark,"%d",&index); cidx = 0; while(cpt != NULL) { if (cidx == index) return cpt; cidx++; cpt = (this->reverse ? cpt->prevlp : cpt->nextlp); } } cpt = (this->reverse ? this->last_point : this->first_point); while (cpt != NULL) { if (cpt->mark != NULL) if (strcmp(mark,cpt->mark) == 0) return cpt; cpt = (this->reverse ? cpt->prevlp : cpt->nextlp); } return NULL; } void thline::preprocess() { if (this->first_point == NULL) return; // check closure this->is_closed = ((this->closed == TT_TRUE) || ((this->closed == TT_AUTO) && (this->first_point->point->x == this->last_point->point->x) && (this->first_point->point->y == this->last_point->point->y))); if (this->is_closed) { this->last_point->point->x = this->first_point->point->x; this->last_point->point->y = this->first_point->point->y; } // check reversion thdb2dlp * c_item, * n_item, * t_item; thdb2dpt * t_point; int t_tags, t_subtype, t_smooth, t_smooth_orig; double t_rsize, t_lsize, t_orient; bool tmpreverse = this->reverse; if (this->fscrapptr->flip != TT_SCRAP_FLIP_NONE) tmpreverse = !tmpreverse; if (tmpreverse && (this->first_point->nextlp != NULL)) { // najprv prehodi podtypy c_item = this->first_point; while (c_item != NULL) { n_item = c_item->nextlp; // switch next - prev t_item = c_item->nextlp; c_item->nextlp = c_item->prevlp; c_item->prevlp = t_item; // switch control points t_point = c_item->cp1; c_item->cp1 = c_item->cp2; c_item->cp2 = t_point; c_item = n_item; } t_item = this->first_point; this->first_point = this->last_point; this->last_point = t_item; t_point = this->first_point->point; t_tags = this->first_point->tags; t_rsize = this->first_point->rsize; t_lsize = this->first_point->lsize; t_orient = this->first_point->orient; t_smooth = this->first_point->smooth; t_smooth_orig = this->first_point->smooth_orig; t_subtype = this->last_point->subtype; c_item = this->first_point; while (c_item != NULL) { if (c_item->nextlp != NULL) { c_item->point = c_item->nextlp->point; c_item->tags = c_item->nextlp->tags; c_item->lsize = c_item->nextlp->lsize; c_item->rsize = c_item->nextlp->rsize; c_item->orient = c_item->nextlp->orient; c_item->smooth = c_item->nextlp->smooth; c_item->smooth_orig = c_item->nextlp->smooth_orig; c_item->subtype = c_item->nextlp->subtype; } else { c_item->point = t_point; c_item->tags = t_tags; c_item->lsize = t_lsize; c_item->rsize = t_rsize; c_item->orient = t_orient; c_item->smooth = t_smooth; c_item->smooth_orig = t_smooth_orig; c_item->subtype = t_subtype; } c_item = c_item->nextlp; } t_item = this->last_point; this->last_point = t_item->prevlp; this->last_point->nextlp = NULL; t_item->prevlp = NULL; t_item->nextlp = this->first_point; this->first_point->prevlp = t_item; this->first_point = t_item; t_subtype = this->first_point->subtype; c_item = this->first_point; while (c_item != NULL) { if (c_item->nextlp != NULL) { c_item->subtype = c_item->nextlp->subtype; } else { c_item->subtype = t_subtype; } c_item = c_item->nextlp; } } // check smoothness c_item = this->first_point; double d1, d2, a1, a2; while (c_item != NULL) { if (c_item->smooth == TT_AUTO) { c_item->smooth = TT_TRUE; if ((c_item->nextlp != NULL) && (c_item->cp2 != NULL) && (c_item->nextlp->cp1 != NULL)) { d1 = hypot(c_item->cp2->x - c_item->point->x, c_item->cp2->y - c_item->point->y); d2 = hypot(c_item->nextlp->cp1->x - c_item->point->x, c_item->nextlp->cp1->y - c_item->point->y); if ((d2 > 0) && (d1 > 0)) { a1 = atan2(c_item->cp2->y - c_item->point->y, c_item->cp2->x - c_item->point->x) / 3.14159265358979323338 * 180.0; a2 = atan2(c_item->point->y - c_item->nextlp->cp1->y, c_item->point->x - c_item->nextlp->cp1->x) / 3.14159265358979323338 * 180.0; if (a2 - a1 > 180.0) a2 -= 360; if (a2 - a1 < -180.0) a2 += 360; if ((a2 > a1 + 5.0) || (a2 < a1 - 5.0)) c_item->smooth = TT_FALSE; } } } c_item = c_item->nextlp; } } #define thline_type_export_mp(type,mid) case type: \ macroid = mid; \ break; bool thline::export_mp(class thexpmapmpxs * out) { if (this->first_point == NULL) return(false); bool postprocess = true, todraw, fsize, frot, anypt; //, first int from, to, cs, macroid = -1, omacroid = -1; double s1, r1; thdb2dlp * lp; th2ddataobject::export_mp(out); if (out->file != NULL) { if (thisnan(this->m_height)) { fprintf(out->file,"ATTR__height := -1;\n"); } else { fprintf(out->file,"ATTR__height := %.2f;\n", this->m_height); } } switch (this->type) { case TT_LINE_TYPE_WALL: from = 0; to = 0; lp = this->first_point; while (lp != NULL) { cs = lp->subtype; todraw = (lp->nextlp != NULL); while ((lp != NULL) && (lp->subtype == cs)) { to++; lp = lp->nextlp; } if (todraw) { macroid = SYML_UNDEFINED; switch (cs) { thline_type_export_mp(TT_LINE_SUBTYPE_INVISIBLE, SYML_WALL_INVISIBLE) thline_type_export_mp(TT_LINE_SUBTYPE_BEDROCK, SYML_WALL_BEDROCK) thline_type_export_mp(TT_LINE_SUBTYPE_SAND, SYML_WALL_SAND) thline_type_export_mp(TT_LINE_SUBTYPE_CLAY, SYML_WALL_CLAY) thline_type_export_mp(TT_LINE_SUBTYPE_PEBBLES, SYML_WALL_PEBBLES) thline_type_export_mp(TT_LINE_SUBTYPE_DEBRIS, SYML_WALL_DEBRIS) thline_type_export_mp(TT_LINE_SUBTYPE_BLOCKS, SYML_WALL_BLOCKS) thline_type_export_mp(TT_LINE_SUBTYPE_ICE, SYML_WALL_ICE) thline_type_export_mp(TT_LINE_SUBTYPE_FLOWSTONE, SYML_WALL_FLOWSTONE) thline_type_export_mp(TT_LINE_SUBTYPE_MOONMILK, SYML_WALL_MOONMILK) thline_type_export_mp(TT_LINE_SUBTYPE_UNDERLYING, SYML_WALL_UNDERLYING) thline_type_export_mp(TT_LINE_SUBTYPE_OVERLYING, SYML_WALL_OVERLYING) thline_type_export_mp(TT_LINE_SUBTYPE_UNSURVEYED, SYML_WALL_UNSURVEYED) thline_type_export_mp(TT_LINE_SUBTYPE_PRESUMED, SYML_WALL_PRESUMED) thline_type_export_mp(TT_LINE_SUBTYPE_PIT, SYML_WALL_PIT) } omacroid = macroid; if (this->context >= 0) macroid = this->context; if (out->symset->is_assigned(macroid)) { if (out->file == NULL) return(true); out->symset->export_mp_symbol_options(out->file, omacroid); fprintf(out->file,"%s(",out->symset->get_mp_macro(omacroid)); this->export_path_mp(out,from,to); fprintf(out->file,");\n"); if (out->layout->is_debug_joins()) { fprintf(out->file,"l_debug(1,1,"); this->export_path_mp(out,from,to,1); fprintf(out->file,");\n"); } if (out->layout->is_debug_stations()) { fprintf(out->file,"l_debug(0,1,"); this->export_path_mp(out,from,to,0); fprintf(out->file,");\n"); } } } from = to; } postprocess = false; break; case TT_LINE_TYPE_LABEL: macroid = SYML_LABEL; omacroid = macroid; if (this->context >= 0) macroid = this->context; if ((this->text == NULL) || (!out->symset->is_assigned(macroid))) { postprocess = false; break; } if (out->file == NULL) return(true); out->symset->export_mp_symbol_options(out->file, omacroid); fprintf(out->file,"l_label(btex "); switch (this->scale) { case TT_2DOBJ_SCALE_XL: fprintf(out->file,"\\thhugesize "); break; case TT_2DOBJ_SCALE_L: fprintf(out->file,"\\thlargesize "); break; case TT_2DOBJ_SCALE_S: fprintf(out->file,"\\thsmallsize "); break; case TT_2DOBJ_SCALE_XS: fprintf(out->file,"\\thtinysize "); break; default: fprintf(out->file,"\\thnormalsize "); } //thdecode(&(this->db->buff_enc),TT_ISO8859_2,this->text); fprintf(out->file,"%s etex,",ths2tex(this->text, out->layout->lang, true).c_str()); this->export_path_mp(out); fprintf(out->file,");\n"); postprocess = false; break; case TT_LINE_TYPE_CONTOUR: macroid = SYML_CONTOUR; if (this->context >= 0) macroid = this->context; if (!out->symset->is_assigned(macroid)) { postprocess = false; break; } if (out->file == NULL) return(true); out->symset->export_mp_symbol_options(out->file, SYML_CONTOUR); fprintf(out->file,"%s(",out->symset->get_mp_macro(SYML_CONTOUR)); this->export_path_mp(out); from = 0; if ((this->tags & TT_LINE_TAG_GRADIENT_NONE) > 0) { fprintf(out->file,",-3"); } else if ((this->tags & TT_LINE_TAG_GRADIENT_CENTER) > 0) { fprintf(out->file,",-2"); } else if ((this->tags & TT_LINE_TAG_GRADIENT_POINT) > 0) { lp = this->first_point; while (lp != NULL) { if ((lp->tags & TT_LINEPT_TAG_GRADIENT) > 0) fprintf(out->file,",%d",from); lp = lp->nextlp; from++; } } else { fprintf(out->file,",-1"); } fprintf(out->file,");\n"); postprocess = false; break; case TT_LINE_TYPE_SLOPE: macroid = SYML_SLOPE; if (this->context >= 0) macroid = this->context; if (!out->symset->is_assigned(macroid)) { postprocess = false; break; } s1 = 0.0; r1 = -1.0; // najde prvu rotaciu a velkost lp = this->first_point; fsize = true; frot = true; while ((lp != NULL) && (fsize || frot)) { if ((lp->tags & TT_LINEPT_TAG_SIZE) > 0) if (fsize) { s1 = lp->lsize; fsize = false; } if ((lp->tags & TT_LINEPT_TAG_ORIENT) > 0) if (frot) { r1 = lp->orient + out->rr; frot = false; } lp = lp->nextlp; } if (out->file == NULL) return(true); out->symset->export_mp_symbol_options(out->file, SYML_SLOPE); fprintf(out->file,"%s(",out->symset->get_mp_macro(SYML_SLOPE)); this->export_path_mp(out); fprintf(out->file,",%d", ((this->tags & TT_LINE_TAG_BORDER) > 0 ? 1 : 0)); // vypise prvy bod fprintf(out->file,",(0,%g,%g)",(r1 < 0.0 ? -1 : r1),s1 * out->ms); // vypise ostatne body lp = this->first_point->nextlp; from = 1; while (lp != NULL) { if ((lp->tags & (TT_LINEPT_TAG_SIZE | TT_LINEPT_TAG_ORIENT)) > 0) { // cislo bodu fprintf(out->file,",(%d,",from); // orientacia if ((lp->tags & TT_LINEPT_TAG_ORIENT) > 0) { r1 = lp->orient + out->rr; fprintf(out->file,"%g,",lp->orient + out->rr); } else { if (lp->nextlp != NULL) fprintf(out->file,"-1,"); else fprintf(out->file,"%g,",(r1 < 0.0 ? -1.0 : r1)); } // velkost if ((lp->tags & TT_LINEPT_TAG_SIZE) > 0) { s1 = lp->lsize; fprintf(out->file,"%g)",lp->lsize * out->ms); } else { if (lp->nextlp != NULL) fprintf(out->file,"-1)"); else fprintf(out->file,"%g)",s1 * out->ms); } } else if (lp->nextlp == NULL) { // vypise posledny bod fprintf(out->file,",(%d,%g,%g)",from,(r1 < 0.0 ? -1.0 : r1),s1 * out->ms); } lp = lp->nextlp; from++; } // vypise prvy bod fprintf(out->file,");\n"); postprocess = false; break; thline_type_export_mp(TT_LINE_TYPE_PIT, SYML_PIT) thline_type_export_mp(TT_LINE_TYPE_MAP_CONNECTION, SYML_MAPCONNECTION) thline_type_export_mp(TT_LINE_TYPE_CEILING_STEP, SYML_CEILINGSTEP) thline_type_export_mp(TT_LINE_TYPE_CEILING_MEANDER, SYML_CEILINGMEANDER) thline_type_export_mp(TT_LINE_TYPE_FLOOR_STEP, SYML_FLOORSTEP) thline_type_export_mp(TT_LINE_TYPE_FLOOR_MEANDER, SYML_FLOORMEANDER) thline_type_export_mp(TT_LINE_TYPE_OVERHANG, SYML_OVERHANG) thline_type_export_mp(TT_LINE_TYPE_CHIMNEY, SYML_CHIMNEY) thline_type_export_mp(TT_LINE_TYPE_FLOWSTONE, SYML_FLOWSTONE) thline_type_export_mp(TT_LINE_TYPE_MOONMILK, SYML_MOONMILK) thline_type_export_mp(TT_LINE_TYPE_ROCK_BORDER, SYML_ROCKBORDER) thline_type_export_mp(TT_LINE_TYPE_ROCK_EDGE, SYML_ROCKEDGE) thline_type_export_mp(TT_LINE_TYPE_GRADIENT, SYML_GRADIENT) thline_type_export_mp(TT_LINE_TYPE_U, SYML_U) thline_type_export_mp(TT_LINE_TYPE_HANDRAIL, SYML_HANDRAIL) thline_type_export_mp(TT_LINE_TYPE_ROPE, SYML_ROPE) thline_type_export_mp(TT_LINE_TYPE_ROPE_LADDER, SYML_ROPELADDER) thline_type_export_mp(TT_LINE_TYPE_FIXED_LADDER, SYML_FIXEDLADDER) thline_type_export_mp(TT_LINE_TYPE_STEPS, SYML_STEPS) thline_type_export_mp(TT_LINE_TYPE_VIA_FERRATA, SYML_VIAFERRATA) case TT_LINE_TYPE_ARROW: macroid = SYML_ARROW; if (this->context >= 0) macroid = this->context; if (!out->symset->is_assigned(macroid)) { postprocess = false; break; } if (out->file == NULL) return(true); out->symset->export_mp_symbol_options(out->file, SYML_ARROW); fprintf(out->file,"%s(",out->symset->get_mp_macro(SYML_ARROW)); this->export_path_mp(out); from = 0; if ((this->tags & TT_LINE_TAG_HEAD_BEGIN) > 0) from += 1; if ((this->tags & TT_LINE_TAG_HEAD_END) > 0) from += 2; fprintf(out->file,",%d);\n",from); postprocess = false; break; case TT_LINE_TYPE_SECTION: macroid = SYML_SECTION; if (this->context >= 0) macroid = this->context; if (!out->symset->is_assigned(macroid)) { postprocess = false; break; } if (out->file == NULL) return(true); out->symset->export_mp_symbol_options(out->file, SYML_SECTION); fprintf(out->file,"%s(",out->symset->get_mp_macro(SYML_SECTION)); this->export_path_mp(out); anypt = false; if ((this->tags & TT_LINE_TAG_DIRECTION_BEGIN) > 0) { fprintf(out->file,",0"); anypt = true; }; from = 0; lp = this->first_point; while (lp != NULL) { if (((lp->tags & TT_LINEPT_TAG_DIRECTION) > 0) && ((this->tags & TT_LINE_TAG_DIRECTION_POINT) > 0)) { fprintf(out->file,",%d",from); anypt = true; } lp = lp->nextlp; from++; } if ((this->tags & TT_LINE_TAG_DIRECTION_END) > 0) { fprintf(out->file,",%d",(from - 1)); anypt = true; }; if (!anypt) fprintf(out->file,","); fprintf(out->file,");\n"); postprocess = false; break; case TT_LINE_TYPE_BORDER: from = 0; to = 0; lp = this->first_point; while (lp != NULL) { cs = lp->subtype; todraw = (lp->nextlp != NULL); while ((lp != NULL) && (lp->subtype == cs)) { to++; lp = lp->nextlp; } if (todraw) { macroid = SYML_BORDER_VISIBLE; switch (cs) { thline_type_export_mp(TT_LINE_SUBTYPE_TEMPORARY, SYML_BORDER_TEMPORARY) thline_type_export_mp(TT_LINE_SUBTYPE_PRESUMED, SYML_BORDER_PRESUMED) thline_type_export_mp(TT_LINE_SUBTYPE_INVISIBLE, SYML_BORDER_INVISIBLE) } omacroid = macroid; if (this->context >= 0) macroid = this->context; if (out->symset->is_assigned(macroid)) { if (out->file == NULL) return(true); out->symset->export_mp_symbol_options(out->file, omacroid); fprintf(out->file,"%s(",out->symset->get_mp_macro(omacroid)); this->export_path_mp(out,from,to); fprintf(out->file,");\n"); if (out->layout->is_debug_joins()) { fprintf(out->file,"l_debug(1,0,"); this->export_path_mp(out,from,to,1); fprintf(out->file,");\n"); } if (out->layout->is_debug_stations()) { fprintf(out->file,"l_debug(0,0,"); this->export_path_mp(out,from,to,0); fprintf(out->file,");\n"); } } } from = to; } postprocess = false; break; case TT_LINE_TYPE_WATER_FLOW: from = 0; to = 0; lp = this->first_point; while (lp != NULL) { cs = lp->subtype; todraw = (lp->nextlp != NULL); while ((lp != NULL) && (lp->subtype == cs)) { to++; lp = lp->nextlp; } if (todraw) { macroid = SYML_WATERFLOW_PERMANENT; switch (cs) { thline_type_export_mp(TT_LINE_SUBTYPE_INTERMITTENT, SYML_WATERFLOW_INTERMITTENT) thline_type_export_mp(TT_LINE_SUBTYPE_CONJECTURAL, SYML_WATERFLOW_CONJECTURAL) } omacroid = macroid; if (this->context >= 0) macroid = this->context; if (out->symset->is_assigned(macroid)) { if (out->file == NULL) return(true); out->symset->export_mp_symbol_options(out->file, omacroid); fprintf(out->file,"%s(",out->symset->get_mp_macro(omacroid)); this->export_path_mp(out,from,to); fprintf(out->file,");\n"); } } from = to; } postprocess = false; break; case TT_LINE_TYPE_SURVEY: from = 0; to = 0; lp = this->first_point; while (lp != NULL) { cs = lp->subtype; todraw = (lp->nextlp != NULL); while ((lp != NULL) && (lp->subtype == cs)) { to++; lp = lp->nextlp; } if (todraw) { macroid = SYML_SURVEY_CAVE; switch (cs) { thline_type_export_mp(TT_LINE_SUBTYPE_SURFACE, SYML_SURVEY_SURFACE) } omacroid = macroid; if (this->context >= 0) macroid = this->context; if (out->symset->is_assigned(macroid)) { if (out->file == NULL) return(true); out->symset->export_mp_symbol_options(out->file, omacroid); fprintf(out->file,"%s(",out->symset->get_mp_macro(omacroid)); this->export_path_mp(out,from,to); fprintf(out->file,");\n"); } } from = to; } postprocess = false; break; default: macroid = SYML_UNDEFINED; break; } if (postprocess) { if (macroid < 0) { this->export_path_mp(out); fprintf(out->file,");\n"); } else { omacroid = macroid; if (this->context >= 0) macroid = this->context; if (out->symset->is_assigned(macroid)) { if (out->file == NULL) return(true); if (this->type == TT_LINE_TYPE_U) { out->symset->export_mp_symbol_options(out->file, -1); fprintf(out->file,"l_u_%s(", this->m_subtype_str); this->db->db2d.use_u_symbol(this->get_class_id(), this->m_subtype_str); } else { out->symset->export_mp_symbol_options(out->file, omacroid); fprintf(out->file,"%s(",out->symset->get_mp_macro(omacroid)); } this->export_path_mp(out); fprintf(out->file,");\n"); if (out->layout->is_debug_joins()) { fprintf(out->file,"l_debug(1,0,"); this->export_path_mp(out,0,-1,1); fprintf(out->file,");\n"); } if (out->layout->is_debug_stations()) { fprintf(out->file,"l_debug(0,0,"); this->export_path_mp(out,0,-1,0); fprintf(out->file,");\n"); } } } } th2ddataobject::export_mp_end(out); return(false); } unsigned thline::export_path_mp(class thexpmapmpxs * out, int from, int to, int dbglevel) { thdb2dlp * lp = this->first_point; thdb2dpt * prev_pt = NULL; // double xt, yt, d; unsigned last = 0; bool dnu = false; while ((lp != NULL) && ((long(last) <= long(to)) || (to < 0))) { if (long(last) == long(from)) { dnu = true; fprintf(out->file,"("); lp->point->export_mp(out,dbglevel); fprintf(out->file,"\n"); if (long(last) == long(to)) { fprintf(out->file," -- "); lp->point->export_mp(out,dbglevel); } prev_pt = lp->point; } else if (dnu) { if ((lp->cp1 != NULL) && (lp->cp2 != NULL)) { fprintf(out->file," .. controls "); lp->cp1->export_mp(out,dbglevel); fprintf(out->file," and "); lp->cp2->export_mp(out,dbglevel); fprintf(out->file," .. "); } else { fprintf(out->file," -- "); } if ((from == 0) && (lp->nextlp == NULL) && (this->is_closed)) fprintf(out->file,"cycle"); else lp->point->export_mp(out,dbglevel); fprintf(out->file,"\n"); } prev_pt = lp->point; lp = lp->nextlp; last++; } if (long(last) > long(from)) { fprintf(out->file,")"); return (last - from); } else { return 0; } } void thline::parse_border(char * ss) { int bd; if (this->type != TT_LINE_TYPE_SLOPE) ththrow(("-border not valid with type %s", thmatch_string(this->type,thtt_line_types))) bd = thmatch_token(ss,thtt_bool); if (bd == TT_UNKNOWN_BOOL) ththrow(("logical value expected -- %s",ss)) if (bd == TT_TRUE) this->tags |= TT_LINE_TAG_BORDER; else this->tags &= ~TT_LINE_TAG_BORDER; } enum { TT_LINE_GRADIENT_UNKNOWN, TT_LINE_GRADIENT_BEGIN, TT_LINE_GRADIENT_END, TT_LINE_GRADIENT_NONE, TT_LINE_GRADIENT_CENTER, TT_LINE_GRADIENT_POINT, TT_LINE_GRADIENT_BOTH, }; static const thstok thtt_line_gradient[] = { {"begin", TT_LINE_GRADIENT_BEGIN}, {"both", TT_LINE_GRADIENT_BOTH}, {"center", TT_LINE_GRADIENT_CENTER}, {"end", TT_LINE_GRADIENT_END}, {"none", TT_LINE_GRADIENT_NONE}, {"point", TT_LINE_GRADIENT_POINT}, {NULL, TT_LINE_GRADIENT_UNKNOWN} }; void thline::parse_gradient(char * ss) { int gd; if (this->type != TT_LINE_TYPE_CONTOUR) ththrow(("-gradient not valid with type %s", thmatch_string(this->type,thtt_line_types))) gd = thmatch_token(ss,thtt_line_gradient); switch (gd) { case TT_LINE_GRADIENT_NONE: this->tags &= ~(TT_LINE_TAG_GRADIENT_NONE | TT_LINE_TAG_GRADIENT_CENTER | TT_LINE_TAG_GRADIENT_POINT); this->tags |= TT_LINE_TAG_GRADIENT_NONE; break; case TT_LINE_GRADIENT_CENTER: this->tags &= ~(TT_LINE_TAG_GRADIENT_NONE | TT_LINE_TAG_GRADIENT_CENTER | TT_LINE_TAG_GRADIENT_POINT); this->tags |= TT_LINE_TAG_GRADIENT_CENTER; break; case TT_LINE_GRADIENT_POINT: if (this->last_point == NULL) ththrow(("no line point specified")) this->tags &= ~(TT_LINE_TAG_GRADIENT_NONE | TT_LINE_TAG_GRADIENT_CENTER | TT_LINE_TAG_GRADIENT_POINT); this->tags |= TT_LINE_TAG_GRADIENT_POINT; this->last_point->tags |= TT_LINEPT_TAG_GRADIENT; break; default: ththrow(("invalid gradient specification -- %s",ss)) break; } } void thline::parse_direction(char * ss) { int gd; if (this->type != TT_LINE_TYPE_SECTION) ththrow(("-direction not valid with type %s", thmatch_string(this->type,thtt_line_types))) gd = thmatch_token(ss,thtt_line_gradient); switch (gd) { case TT_LINE_GRADIENT_NONE: this->tags &= ~(TT_LINE_TAG_DIRECTION_BEGIN | TT_LINE_TAG_DIRECTION_END | TT_LINE_TAG_DIRECTION_POINT); break; case TT_LINE_GRADIENT_BEGIN: this->tags &= ~(TT_LINE_TAG_DIRECTION_END | TT_LINE_TAG_DIRECTION_POINT); this->tags |= TT_LINE_TAG_DIRECTION_BEGIN; break; case TT_LINE_GRADIENT_END: this->tags &= ~(TT_LINE_TAG_DIRECTION_BEGIN | TT_LINE_TAG_DIRECTION_POINT); this->tags |= TT_LINE_TAG_DIRECTION_END; break; case TT_LINE_GRADIENT_BOTH: this->tags &= ~TT_LINE_TAG_DIRECTION_POINT; this->tags |= TT_LINE_TAG_DIRECTION_END | TT_LINE_TAG_DIRECTION_BEGIN; break; case TT_LINE_GRADIENT_POINT: if (this->last_point == NULL) ththrow(("no line point specified")) this->tags &= ~(TT_LINE_TAG_DIRECTION_BEGIN | TT_LINE_TAG_DIRECTION_END); this->tags |= TT_LINE_TAG_DIRECTION_POINT; this->last_point->tags |= TT_LINEPT_TAG_DIRECTION; break; default: ththrow(("invalid direction specification -- %s",ss)) break; } } void thline::parse_head(char * ss) { int gd; if (this->type != TT_LINE_TYPE_ARROW) ththrow(("-direction not valid with type %s", thmatch_string(this->type,thtt_line_types))) gd = thmatch_token(ss,thtt_line_gradient); this->tags &= ~(TT_LINE_TAG_HEAD_BEGIN | TT_LINE_TAG_HEAD_END); switch (gd) { case TT_LINE_GRADIENT_NONE: break; case TT_LINE_GRADIENT_BEGIN: this->tags |= TT_LINE_TAG_HEAD_BEGIN; break; case TT_LINE_GRADIENT_END: this->tags |= TT_LINE_TAG_HEAD_END; break; case TT_LINE_GRADIENT_BOTH: this->tags |= TT_LINE_TAG_HEAD_END | TT_LINE_TAG_HEAD_BEGIN; break; default: ththrow(("invalid head specification -- %s",ss)) break; } } void thline::parse_adjust(char * ss) { if (this->last_point != NULL) this->last_point->adjust = thmatch_token(ss,thtt_line_adjusts); else ththrow(("no line point specified")) if (this->last_point->adjust == TT_LINE_ADJUST_UNKNOWN) ththrow(("invalid adjust specification -- %s",ss)) if ((thdb.cscrapptr->proj->type == TT_2DPROJ_PLAN) && (this->last_point->adjust != TT_LINE_ADJUST_NONE)) ththrow(("adjustment and projection not compatible -- %s",ss)) } void thline::parse_size(int w, char * ss) { int sv; double sz; if (this->last_point == NULL) ththrow(("no line point specified")) const char * sizestr = NULL; switch (w) { case TT_LINE_SIZE: sizestr = "size"; break; case TT_LINE_LSIZE: sizestr = "l-size"; break; case TT_LINE_RSIZE: sizestr = "r-size"; break; } bool ok = false; switch (this->type) { case TT_LINE_TYPE_SLOPE: if ((w == TT_LINE_SIZE) || (w == TT_LINE_LSIZE)) ok = true; break; } if (!ok) ththrow(("%s not valid with type %s", sizestr, thmatch_string(this->type,thtt_line_types))) thparse_double(sv,sz,ss); if (sv != TT_SV_NUMBER) ththrow(("invalid number -- %s",ss)) if (sz < 0.0) ththrow(("negative size -- %s",ss)) switch (this->type) { case TT_LINE_TYPE_SLOPE: this->last_point->lsize = sz; this->last_point->tags |= TT_LINEPT_TAG_SIZE; break; } } void thline::parse_altitude(char * ss) { if (this->type != TT_LINE_TYPE_WALL) ththrow(("-altitude not valid with type %s", thmatch_string(this->type,thtt_line_types))) if (this->last_point == NULL) ththrow(("no line point specified")) thparse_altitude(ss, this->last_point->rsize, this->last_point->lsize); this->last_point->tags |= TT_LINEPT_TAG_ALTITUDE; } void thline::parse_text(char * ss) { if (this->type != TT_LINE_TYPE_LABEL) ththrow(("-text not valid with type %s", thmatch_string(this->type,thtt_line_types))) if (strlen(ss) > 0) this->text = this->db->strstore(ss); } void thline::start_insert() { thdb2dlp * lp; bool fsize; switch (this->type) { case TT_LINE_TYPE_U: if (this->m_subtype_str == NULL) ththrow(("missing subtype specification for line of user defined type")) this->db->db2d.register_u_symbol(this->get_class_id(), this->m_subtype_str); break; case TT_LINE_TYPE_SLOPE: lp = this->first_point; fsize = true; while ((lp != NULL) && fsize) { if ((lp->tags & TT_LINEPT_TAG_SIZE) > 0) if (fsize) { fsize = false; } lp = lp->nextlp; } if (fsize) ththrow(("no slope size specification at any line point")) break; } } void thline::parse_height(char * ss) { switch (this->type) { case TT_LINE_TYPE_PIT: break; case TT_LINE_TYPE_WALL: if (this->csubtype == TT_LINE_SUBTYPE_PIT) break; default: ththrow(("-height not valid with type %s", thmatch_string(this->type,thtt_line_types))) break; } thsplit_words(& this->db->db2d.mbf,ss); int npar = this->db->db2d.mbf.get_size(); char ** pars = this->db->db2d.mbf.get_buffer(); int sv, ux; double dv; thtflength lentf; ux = 0; switch (npar) { case 1: break; case 2: ux = 1; break; default: ththrow(("invalid distance -- %s",ss)) } this->m_height = thnan; thparse_double(sv,dv,pars[0]); if (sv != TT_SV_NUMBER) ththrow(("not a number -- %s", pars[0])) if (dv <= 0.0) ththrow(("nor a positivie number -- %s", pars[0])) if (ux > 0) { lentf.parse_units(pars[ux]); dv = lentf.transform(dv); } this->m_height = dv; } therion/thline.h0000644000076400010400000002406112047265066014734 0ustar userAdministrators/** * @file thline.h * line module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thline_h #define thline_h #include "th2ddataobject.h" /** * line command options tokens. */ enum { TT_LINE_UNKNOWN = 3000, TT_LINE_TYPE = 3001, TT_LINE_SUBTYPE = 3002, TT_LINE_REVERSE = 3003, TT_LINE_CLOSED = 3004, TT_LINE_SMOOTH = 3005, TT_LINE_OUTLINE = 3006, TT_LINE_MARK = 3007, TT_LINE_RSIZE = 3008, TT_LINE_LSIZE = 3009, TT_LINE_ORIENT = 3010, TT_LINE_SIZE = 3011, TT_LINE_GRADIENT = 3012, TT_LINE_BORDER = 3013, TT_LINE_ALTITUDE = 3014, TT_LINE_DIRECTION = 3015, TT_LINE_HEAD = 3016, TT_LINE_TEXT = 3017, TT_LINE_ADJUST = 3018, TT_LINE_HEIGHT = 3019, }; enum { // tags pre slope TT_LINE_TAG_BORDER = 1, // tags pre contour TT_LINE_TAG_GRADIENT_CENTER = 1, TT_LINE_TAG_GRADIENT_POINT = 2, TT_LINE_TAG_GRADIENT_NONE = 4, // tags pre section TT_LINE_TAG_DIRECTION_BEGIN = 1, TT_LINE_TAG_DIRECTION_END = 2, TT_LINE_TAG_DIRECTION_POINT = 4, // tags pre arrow TT_LINE_TAG_HEAD_BEGIN = 1, TT_LINE_TAG_HEAD_END = 2, }; /** * line command options parsing table. */ static const thstok thtt_line_opt[] = { {"adjust", TT_LINE_ADJUST}, {"altitude", TT_LINE_ALTITUDE}, {"border", TT_LINE_BORDER}, {"close", TT_LINE_CLOSED}, {"direction", TT_LINE_DIRECTION}, {"gradient", TT_LINE_GRADIENT}, {"head", TT_LINE_HEAD}, {"height", TT_LINE_HEIGHT}, {"l-size",TT_LINE_LSIZE}, {"mark", TT_LINE_MARK}, {"orient", TT_LINE_ORIENT}, {"orientation", TT_LINE_ORIENT}, {"outline", TT_LINE_OUTLINE}, {"r-size",TT_LINE_RSIZE}, {"reverse", TT_LINE_REVERSE}, {"size",TT_LINE_SIZE}, {"smooth",TT_LINE_SMOOTH}, {"subtype", TT_LINE_SUBTYPE}, {"text",TT_LINE_TEXT}, {NULL, TT_LINE_UNKNOWN}, }; /** * Line outlines. */ enum { TT_LINE_OUTLINE_UNKNOWN, TT_LINE_OUTLINE_IN, TT_LINE_OUTLINE_OUT, TT_LINE_OUTLINE_NONE, }; /** * line outlines parsing table. */ static const thstok thtt_line_outlines[] = { {"in", TT_LINE_OUTLINE_IN}, {"none", TT_LINE_OUTLINE_NONE}, {"out", TT_LINE_OUTLINE_OUT}, {NULL, TT_LINE_OUTLINE_UNKNOWN}, }; /** * Line point adjustments. */ enum { TT_LINE_ADJUST_UNKNOWN, TT_LINE_ADJUST_HORIZONTAL, TT_LINE_ADJUST_VERTICAL, TT_LINE_ADJUST_NONE, }; /** * line adjusts parsing table. */ static const thstok thtt_line_adjusts[] = { {"horizontal", TT_LINE_ADJUST_HORIZONTAL}, {"none", TT_LINE_ADJUST_NONE}, {"vertical", TT_LINE_ADJUST_VERTICAL}, {NULL, TT_LINE_ADJUST_UNKNOWN}, }; /** * Line types. */ enum { TT_LINE_TYPE_UNKNOWN, TT_LINE_TYPE_U, TT_LINE_TYPE_WALL, TT_LINE_TYPE_PIT, TT_LINE_TYPE_CHIMNEY, TT_LINE_TYPE_ROCK_BORDER, TT_LINE_TYPE_SURVEY, TT_LINE_TYPE_ROCK_EDGE, TT_LINE_TYPE_FLOWSTONE, TT_LINE_TYPE_MOONMILK, TT_LINE_TYPE_BORDER, TT_LINE_TYPE_SLOPE, TT_LINE_TYPE_CONTOUR, TT_LINE_TYPE_OVERHANG, TT_LINE_TYPE_SECTION, TT_LINE_TYPE_ARROW, TT_LINE_TYPE_LABEL, TT_LINE_TYPE_CEILING_STEP, TT_LINE_TYPE_FLOOR_STEP, TT_LINE_TYPE_WATER_FLOW, TT_LINE_TYPE_GRADIENT, TT_LINE_TYPE_CEILING_MEANDER, TT_LINE_TYPE_FLOOR_MEANDER, TT_LINE_TYPE_MAP_CONNECTION, TT_LINE_TYPE_HANDRAIL, TT_LINE_TYPE_FIXED_LADDER, TT_LINE_TYPE_ROPE_LADDER, TT_LINE_TYPE_VIA_FERRATA, TT_LINE_TYPE_ROPE, TT_LINE_TYPE_STEPS, }; /** * Line types parsing table. */ static const thstok thtt_line_types[] = { {"arrow", TT_LINE_TYPE_ARROW}, {"border", TT_LINE_TYPE_BORDER}, {"ceiling-meander", TT_LINE_TYPE_CEILING_MEANDER}, {"ceiling-step", TT_LINE_TYPE_CEILING_STEP}, {"chimney", TT_LINE_TYPE_CHIMNEY}, {"contour", TT_LINE_TYPE_CONTOUR}, {"fixed-ladder", TT_LINE_TYPE_FIXED_LADDER}, {"floor-meander", TT_LINE_TYPE_FLOOR_MEANDER}, {"floor-step", TT_LINE_TYPE_FLOOR_STEP}, {"flowstone", TT_LINE_TYPE_FLOWSTONE}, {"gradient", TT_LINE_TYPE_GRADIENT}, {"handrail", TT_LINE_TYPE_HANDRAIL}, {"label", TT_LINE_TYPE_LABEL}, {"map-connection", TT_LINE_TYPE_MAP_CONNECTION}, {"moonmilk", TT_LINE_TYPE_MOONMILK}, {"overhang", TT_LINE_TYPE_OVERHANG}, {"pit", TT_LINE_TYPE_PIT}, {"pitch", TT_LINE_TYPE_PIT}, {"rock-border", TT_LINE_TYPE_ROCK_BORDER}, {"rock-edge", TT_LINE_TYPE_ROCK_EDGE}, {"rope", TT_LINE_TYPE_ROPE}, {"rope-ladder", TT_LINE_TYPE_ROPE_LADDER}, {"section", TT_LINE_TYPE_SECTION}, {"slope", TT_LINE_TYPE_SLOPE}, {"steps", TT_LINE_TYPE_STEPS}, {"survey", TT_LINE_TYPE_SURVEY}, {"u",TT_LINE_TYPE_U}, {"via-ferrata",TT_LINE_TYPE_VIA_FERRATA}, {"wall", TT_LINE_TYPE_WALL}, {"water-flow", TT_LINE_TYPE_WATER_FLOW}, {NULL, TT_LINE_TYPE_UNKNOWN}, }; /** * Line subtypes. */ enum { TT_LINE_SUBTYPE_UNKNOWN, TT_LINE_SUBTYPE_TEMPORARY, TT_LINE_SUBTYPE_INVISIBLE, TT_LINE_SUBTYPE_VISIBLE, TT_LINE_SUBTYPE_BEDROCK, TT_LINE_SUBTYPE_SAND, TT_LINE_SUBTYPE_CLAY, TT_LINE_SUBTYPE_PEBBLES, TT_LINE_SUBTYPE_DEBRIS, TT_LINE_SUBTYPE_BLOCKS, TT_LINE_SUBTYPE_ICE, TT_LINE_SUBTYPE_UNDERLYING, TT_LINE_SUBTYPE_UNSURVEYED, TT_LINE_SUBTYPE_PRESUMED, TT_LINE_SUBTYPE_PERMANENT, TT_LINE_SUBTYPE_INTERMITTENT, TT_LINE_SUBTYPE_CONJECTURAL, TT_LINE_SUBTYPE_CAVE, TT_LINE_SUBTYPE_SURFACE, TT_LINE_SUBTYPE_OVERLYING, TT_LINE_SUBTYPE_PIT, TT_LINE_SUBTYPE_MOONMILK, TT_LINE_SUBTYPE_FLOWSTONE, }; /** * Line subtypes parsing table. */ static const thstok thtt_line_subtypes[] = { {"bedrock", TT_LINE_SUBTYPE_BEDROCK}, {"blocks",TT_LINE_SUBTYPE_BLOCKS}, {"cave",TT_LINE_SUBTYPE_CAVE}, {"clay",TT_LINE_SUBTYPE_CLAY}, {"conjectural",TT_LINE_SUBTYPE_CONJECTURAL}, {"debris",TT_LINE_SUBTYPE_DEBRIS}, {"flowstone",TT_LINE_SUBTYPE_FLOWSTONE}, {"ice",TT_LINE_SUBTYPE_ICE}, {"intermittent",TT_LINE_SUBTYPE_INTERMITTENT}, {"invisible", TT_LINE_SUBTYPE_INVISIBLE}, {"moonmilk",TT_LINE_SUBTYPE_MOONMILK}, {"overlying",TT_LINE_SUBTYPE_OVERLYING}, {"pebbles",TT_LINE_SUBTYPE_PEBBLES}, {"permanent",TT_LINE_SUBTYPE_PERMANENT}, {"pit",TT_LINE_SUBTYPE_PIT}, {"presumed",TT_LINE_SUBTYPE_PRESUMED}, {"sand",TT_LINE_SUBTYPE_SAND}, {"surface",TT_LINE_SUBTYPE_SURFACE}, {"temporary",TT_LINE_SUBTYPE_TEMPORARY}, {"underlying",TT_LINE_SUBTYPE_UNDERLYING}, {"unsurveyed",TT_LINE_SUBTYPE_UNSURVEYED}, {"visible", TT_LINE_SUBTYPE_VISIBLE}, {NULL, TT_LINE_SUBTYPE_UNKNOWN}, }; /** * line class. */ class thline : public th2ddataobject { public: friend class thdb2d; int type, ///< Line type. outline, ///< Line outline. closed, ///< How line is closed. csubtype; ///< Current subtype. const char * text; ///< Label text. bool reverse; ///< Whether line should be reversed. bool is_closed; ///< Whether line is closed. double m_height; ///< Height of a pit. class thdb2dlp * first_point, ///< First line point. * last_point; ///< Last line point. void parse_type(char * ss); ///< Parse line type. void parse_subtype(char * ss); ///< Parse line subtype. void parse_border(char * ss); ///< Parse line type. void parse_size(int w, char * ss); ///< Parse line size. void parse_gradient(char * ss); ///< Parse line subtype. void parse_direction(char * ss); ///< Parse line direction. void parse_altitude(char * ss); ///< Parse wall altitude void parse_head(char * ss); ///< Parse line head. void parse_adjust(char * ss); ///< Parse line head. void parse_height(char * ss); ///< Parse pit/chimney height. void parse_text(char * ss); ///< Parse line text. void insert_line_point(int nargs, char ** args, double * nums = NULL); ///< Insert line point. void insert_point_mark(char * ss); ///< Insert line point mark. void preprocess(); ///< Reverse if necessary and close. /** * Standard constructor. */ thline(); /** * Standard destructor. */ ~thline(); /** * Return class identifier. */ virtual int get_class_id(); /** * Return class name. */ virtual const char * get_class_name() {return "thline";}; /** * Return true, if son of given class. */ virtual bool is(int class_id); /** * Return number of command arguments. */ virtual int get_cmd_nargs(); /** * Return command name. */ virtual const char * get_cmd_name(); /** * Return command end option. */ virtual const char * get_cmd_end(); /** * Return option description. */ virtual thcmd_option_desc get_cmd_option_desc(const char * opts); /** * Set command option. * * @param cod Command option description. * @param args Option arguments arry. * @param argenc Arguments encoding. */ virtual void set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline); /** * Delete this object. * * @warn Always use this methos instead of delete function. */ virtual void self_delete(); /** * Print object properties. */ virtual void self_print_properties(FILE * outf); /** * Return marked line station. */ class thdb2dlp * get_marked_station(const char * mark); /** * Export to metapost file. */ virtual bool export_mp(class thexpmapmpxs * out); /** * Export only path to metapost file. */ virtual unsigned export_path_mp(class thexpmapmpxs * out, int from = 0, int to = -1, int dbglevel = -1); virtual void start_insert(); }; #endif therion/thlocale.cxx0000644000076400010400000000453511211747214015613 0ustar userAdministrators#include "thlocale.h" #include "thparse.h" #include "thbuffer.h" #include "thexception.h" #include "thlang.h" #include "thinit.h" #ifdef THMSVC #define snprintf _snprintf #endif #define LCBUFFNUM 10 #define LCBUFFLEN 1024 char lcbuffmain [LCBUFFNUM * LCBUFFLEN]; size_t lcbuffcurr = 0; char * lcbuff; char lcfmt1 [] = {37, 49, 46, 49, 102, 0}; // "%1.1f"; char lcfmt2 [] = {37, 49, 48, 46, 49, 102, 0}; // "%10.1f"; void init_lcbuff() { lcbuffcurr++; lcbuffcurr = lcbuffcurr % LCBUFFNUM; lcbuff = &(lcbuffmain[LCBUFFLEN * lcbuffcurr]); } thlocale::thlocale() { this->units = TTLC_UNITS_METRIC; this->lang = thini.get_lang(); } static const thstok thtt_locale_units[] = { {"imperial", TTLC_UNITS_IMPERIAL}, {"metric", TTLC_UNITS_METRIC}, {NULL, TTLC_UNKNOWN} }; void thlocale::parse_units(char * cc) { this->units = thmatch_token(cc, thtt_locale_units); if (this->units == TTLC_UNKNOWN) ththrow(("unknown units -- %s", cc)) } char * thlocale::format_length(double length, int prec, int total) { init_lcbuff(); switch (this->units) { case TTLC_UNITS_IMPERIAL: length /= 0.3048; break; } if (total < 10) { lcfmt1[1] = total + 48; lcfmt1[3] = prec + 48; snprintf(lcbuff, LCBUFFLEN, lcfmt1, length); } else { lcfmt2[1] = total % 10 + 48; lcfmt2[2] = total / 10 + 48; lcfmt2[4] = prec + 48; snprintf(lcbuff, LCBUFFLEN, lcfmt2, length); } lcbuff[LCBUFFLEN - 1] = 0; return lcbuff; } char * thlocale::format_human_length(double length) { int prec = 0; double clength = length; switch (this->units) { case TTLC_UNITS_IMPERIAL: clength = length / 0.3048; break; default: if (length <= 5.0) prec = 1; else prec = 0; break; }; if ((prec == 1) && ((double)(int)clength == clength)) prec = 0; return this->format_length(length, prec); } const char * thlocale::format_length_units() { switch (this->units) { case TTLC_UNITS_IMPERIAL: return "ft"; default: return "m"; } } const char * thlocale::format_i18n_length_units() { switch (this->units) { case TTLC_UNITS_IMPERIAL: return thT("units ft", this->lang); default: return thT("units m", this->lang); } } double thlocale::convert_length(double length) { switch (this->units) { case TTLC_UNITS_IMPERIAL: length /= 0.3048; break; } return length; } thlocale thdeflocale; therion/thlocale.h0000644000076400010400000000072611211746160015235 0ustar userAdministrators#ifndef thlocale_h #define thlocale_h enum { TTLC_UNKNOWN = 0, TTLC_UNITS_METRIC, TTLC_UNITS_IMPERIAL, }; struct thlocale { int units, lang; thlocale(); void parse_units(char * cc); double convert_length(double); char * format_length(double length, int prec = 0, int total = 1); char * format_human_length(double length); const char * format_length_units(); const char * format_i18n_length_units(); }; extern thlocale thdeflocale; #endif therion/thlogfile.cxx0000644000076400010400000000602310625655142015775 0ustar userAdministrators/** * @file thfiles.cxx * File processing module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thlogfile.h" #include "therion.h" #include thlogfile::thlogfile() { this->file_name = "therion.log"; this->fileh = NULL; this->is_open = false; this->is_warned = false; this->is_logging = true; } thlogfile::~thlogfile() { this->close_file(); } void thlogfile::open_file() { bool should_warn = false; if ((!this->is_open) && (!this->is_warned)) { this->fileh = fopen(this->get_file_name(),"w"); if (this->fileh == NULL) { if (!this->is_warned) { should_warn = true; this->is_warned = true; } } else { this->is_open = true; this->is_warned = false; } } if (should_warn) thwarning(("can't open log file for output -- %s",this->get_file_name())); } void thlogfile::close_file() { if (this->is_open) { fclose(this->fileh); this->is_open = false; this->is_warned = false; } } void thlogfile::vprintf(const char *format, va_list *args) { if (this->is_logging) { if (!this->is_open) this->open_file(); if (this->is_open) { if (vfprintf(this->fileh, format, *args) < 0) this->log_error(); } } } void thlogfile::set_file_name(char *fname) { size_t fnl = strlen(fname); if ((!this->is_open) && (fnl > 0)) this->file_name = fname; } const char* thlogfile::get_file_name() { return this->file_name; } void thlogfile::set_logging(bool log_io) { this->is_logging = log_io; } bool thlogfile::get_logging() { return(this->is_logging); } void thlogfile::logging_on() { this->is_logging = true; } void thlogfile::logging_off() { this->is_logging = false; } FILE * thlogfile::get_fileh() { if (!this->is_open) this->open_file(); return this->fileh; } void thlogfile::printf(const char * format, ...) { va_list args; va_start(args, format); this->vprintf(format, &args); va_end(args); } void thlogfile::log_error() { this->close_file(); this->open_file(); this->logging_off(); fprintf(this->fileh,"error -- unable to write to log file (disk full?, insuficient permisions?)"); } thlogfile thlog; therion/thlogfile.h0000644000076400010400000000474510625655142015433 0ustar userAdministrators/** * @file thlogfile.h * Log file module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thlogfile_h #define thlogfile_h #include "thbuffer.h" #include #include /** * Log file module. * * Provides work with log file. */ class thlogfile { thbuffer file_name; ///< Name of log file. FILE* fileh; ///< File handler. bool is_open; ///< File is open ID. bool is_warned; ///< File couldn't be opened ID. bool is_logging; ///< Loggind ID. /** * Open log file for output. */ void open_file(); /** * Close log file. */ void close_file(); public: /** * Standard constructor. */ thlogfile(); /** * Standard destructor. */ ~thlogfile(); /** * Print formatted into log file. */ void vprintf(const char *format, va_list *args); /** * Print formatted into log file. */ void printf(const char * format, ...); /** * Set log file name. * * @param fname File name. */ void set_file_name(char *fname); /** * Retrieve log file name. */ const char* get_file_name(); /** * Set logging state. */ void set_logging(bool log_io); /** * Retrieve logging state. */ bool get_logging(); /** * Turn on logging. */ void logging_on(); /** * Turn off logging. */ void logging_off(); /** * Logging error. */ void log_error(); /** * Return log file handler. */ FILE * get_fileh(); }; /** * Log file module. */ extern thlogfile thlog; #endif therion/thlookup.cxx0000644000076400010400000000651611706255260015672 0ustar userAdministrators/** * @file thlookup.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thlookup.h" #include "thexception.h" #include "thchenc.h" #include "thdata.h" #include "thparse.h" #include "thinfnan.h" #include "thpdfdata.h" #include "thsymbolset.h" #include "thtflength.h" #include "thlang.h" #include "thcsdata.h" #include "thconfig.h" #include #ifdef THMSVC #include #define getcwd _getcwd #endif enum { TTLDBG_JOINS = 1, TTLDBG_STATIONS = 2, TTLDBG_SCRAPNAMES = 4, TTLDBG_STATIONNAMES = 8, }; thlookup::thlookup() { this->m_type = TT_LOOKUP_TYPE_UNKNOWN; this->m_scale = TT_LOOKUP_SCALE_UNKNOWN; this->m_title = ""; } thlookup::~thlookup() { } int thlookup::get_class_id() { return TT_LOOKUP_CMD; } bool thlookup::is(int class_id) { if (class_id == TT_LOOKUP_CMD) return true; else return thdataobject::is(class_id); } int thlookup::get_cmd_nargs() { return 1; } const char * thlookup::get_cmd_end() { return "endlookup"; } const char * thlookup::get_cmd_name() { // insert command name here return "lookup"; } thcmd_option_desc thlookup::get_default_cod(int id) { return thcmd_option_desc(id); } thcmd_option_desc thlookup::get_cmd_option_desc(const char * opts) { int id = thmatch_token(opts, thtt_lookup_opt); if (id == TT_LOOKUP_UNKNOWN) return thdataobject::get_cmd_option_desc(opts); else return this->get_default_cod(id); } void thlookup::set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline) { double dum; int sv, sv2, dum_int; thcmd_option_desc defcod = this->get_default_cod(cod.id); switch (cod.id) { case TT_DATAOBJECT_AUTHOR: case TT_DATAOBJECT_COPYRIGHT: defcod.nargs = 2; default: if (cod.nargs > defcod.nargs) ththrow(("too many arguments -- %s", args[defcod.nargs])) } switch (cod.id) { case 0: // add table row break; case TT_LOOKUP_TITLE: if (strlen(args[0]) > 0) { thencode(&(this->db->buff_enc), args[0], argenc); this->m_title = this->db->strstore(this->db->buff_enc.get_buffer()); } else this->m_title = ""; break; case 1: cod.id = TT_DATAOBJECT_NAME; default: thdataobject::set(cod, args, argenc, indataline); break; } } void thlookup::self_delete() { delete this; } int thlookup::get_context() { return (THCTX_SURVEY | THCTX_NONE | THCTX_SCRAP); } void thlookup_table_row::parse(char ** args) { } therion/thlookup.h0000644000076400010400000001031011712222206015271 0ustar userAdministrators/** * @file thlookup.h * Map / model color lookup module. */ /* Copyright (C) 2012 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thlookup_h #define thlookup_h #include "thdataobject.h" #include "thlocale.h" #include /** * lookup command options tokens. */ enum { TT_LOOKUP_UNKNOWN = 2000, TT_LOOKUP_TYPE = 2001, TT_LOOKUP_SCALE = 2001, TT_LOOKUP_TITLE = 2002, }; /** * Lookup command options parsing table. */ static const thstok thtt_lookup_opt[] = { {"scale", TT_LOOKUP_SCALE}, {"title", TT_LOOKUP_TITLE}, {"type", TT_LOOKUP_TYPE}, {NULL, TT_LOOKUP_UNKNOWN}, }; /** * lookup scale tokens. */ enum { TT_LOOKUP_SCALE_UNKNOWN = 0, TT_LOOKUP_SCALE_CONTINUOUS, TT_LOOKUP_SCALE_DISCRETE, }; /** * lookup scale token table. */ static const thstok thtt_lookup_scale[] = { {"continuous", TT_LOOKUP_SCALE_CONTINUOUS}, {"discrete", TT_LOOKUP_SCALE_DISCRETE}, {NULL, TT_LOOKUP_SCALE_UNKNOWN} }; /** * lookup type tokens. */ enum { TT_LOOKUP_TYPE_UNKNOWN = 0, TT_LOOKUP_TYPE_ALTITUDE, TT_LOOKUP_TYPE_DEPTH, TT_LOOKUP_TYPE_MAP, TT_LOOKUP_TYPE_SURVEY, TT_LOOKUP_TYPE_EXPLODATE, TT_LOOKUP_TYPE_TOPODATE, }; /** * lookup grid token table. */ static const thstok thtt_lookup_gridcoords[] = { {"altitude", TT_LOOKUP_TYPE_ALTITUDE}, {"depth", TT_LOOKUP_TYPE_DEPTH}, {"explo-date", TT_LOOKUP_TYPE_EXPLODATE}, {"map", TT_LOOKUP_TYPE_MAP}, {"survey", TT_LOOKUP_TYPE_SURVEY}, {"topo-date", TT_LOOKUP_TYPE_TOPODATE}, {NULL, TT_LOOKUP_TYPE_UNKNOWN} }; /** * Lookup table row. */ struct thlookup_table_row { double m_valueDbl, m_valueDblFrom; thdate m_valueDate; const char * m_valueString; const char * m_label; thlayout_color m_color; thlookup_table_row() : m_valueDbl(thnan), m_valueDblFrom(thnan), m_valueString(""), m_label("") {} void parse(char ** args); }; typedef std::list thlookup_table_list; /** * lookup class. */ class thlookup : public thdataobject { public: int m_type, m_scale; thlookup_table_list m_table; const char * m_title; /** * Standard constructor. */ thlookup(); /** * Standard destructor. */ ~thlookup(); /** * Return class identifier. */ virtual int get_class_id(); /** * Return class name. */ virtual const char * get_class_name() {return "thlookup";}; /** * Return true, if son of given class. */ virtual bool is(int class_id); /** * Return number of command arguments. */ virtual int get_cmd_nargs(); /** * Return command name. */ virtual const char * get_cmd_name(); /** * Return command end option. */ virtual const char * get_cmd_end(); /** * Return option description. */ virtual thcmd_option_desc get_cmd_option_desc(const char * opts); thcmd_option_desc get_default_cod(int id); /** * Set command option. * * @param cod Command option description. * @param args Option arguments arry. * @param argenc Arguments encoding. */ virtual void set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline); /** * Delete this object. * * @warn Always use this methos instead of delete function. */ virtual void self_delete(); /** * Get context for object. */ virtual int get_context(); }; #endif therion/thmap.cxx0000644000076400010400000001530412046531540015125 0ustar userAdministrators/** * @file thmap.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thmap.h" #include "thexception.h" #include "thdb2dmi.h" #include "thchenc.h" #include "thscrap.h" #include "thobjectname.h" #include "thdb2dmi.h" #include "thtflength.h" thmap::thmap() { this->first_item = NULL; this->last_item = NULL; this->expl_projection = NULL; this->projection_id = 0; this->last_level = 1; this->is_basic = true; this->selection_mode = TT_MAPITEM_UNKNOWN; this->selection_xs = NULL; this->z = thnan; this->nz = -1; } thmap::~thmap() { } int thmap::get_class_id() { return TT_MAP_CMD; } bool thmap::is(int class_id) { if (class_id == TT_MAP_CMD) return true; else return thdataobject::is(class_id); } int thmap::get_cmd_nargs() { return 1; } const char * thmap::get_cmd_end() { return "endmap"; } const char * thmap::get_cmd_name() { return "map"; } thcmd_option_desc thmap::get_cmd_option_desc(const char * opts) { int id = thmatch_token(opts, thtt_map_opt); if (id == TT_MAP_UNKNOWN) return thdataobject::get_cmd_option_desc(opts); else { switch (id) { case TT_MAP_PREVIEW: return thcmd_option_desc(id,2); case TT_MAP_BREAK: return thcmd_option_desc(id,0); default: return thcmd_option_desc(id); } } } void thmap::set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline) { thdb2dprjpr projection; if (cod.id == 1) cod.id = TT_DATAOBJECT_NAME; switch (cod.id) { case 0: thsplit_args(& this->db->db2d.mbf, *args); this->parse_item(this->db->db2d.mbf.get_size(), this->db->db2d.mbf.get_buffer()); break; case TT_MAP_PROJECTION: projection = this->db->db2d.parse_projection(*args); if (!projection.parok) ththrow(("invalid parameters of projection")); this->expl_projection = projection.prj; break; case TT_MAP_BREAK: this->last_level++; break; case TT_MAP_SURVEY: thparse_objectname(this->asoc_survey, &(this->db->buff_stations), args[0], this); break; case TT_MAP_PREVIEW: this->parse_preview(args); break; // if not found, try to set fathers properties default: thdataobject::set(cod, args, argenc, indataline); } } void thmap::self_delete() { delete this; } void thmap::self_print_properties(FILE * outf) { thdataobject::self_print_properties(outf); fprintf(outf,"thmap:\n"); fprintf(outf,"\tz: %f\n",this->z); fprintf(outf,"\tprojection id: %d\n",this->projection_id); if (this->first_item != NULL) { fprintf(outf,"\tmap items:\n"); thdb2dmi * cbl = this->first_item; while (cbl != NULL) { fprintf(outf,"\t\t"); fprintf(outf,cbl->name); fprintf(outf," type:%d\n",cbl->type); cbl = cbl->next_item; } } } thmbuffer mapitmmb; void thmap::parse_item(int npar, char ** pars) { if ((npar != 1) && (npar != 3)) ththrow(("invalid map item")) thdb2dmi * citem = this->db->db2d.insert_map_item(); citem->itm_level = this->last_level; citem->source = this->db->csrc; citem->psurvey = this->db->get_current_survey(); citem->type = TT_MAPITEM_NORMAL; thparse_objectname(citem->name,& this->db->buff_stations, *pars); if (this->last_item == NULL) { this->first_item = citem; this->last_item = citem; } else { this->last_item->next_item = citem; citem->prev_item = this->last_item; this->last_item = citem; } if (npar == 3) { thsplit_words(&mapitmmb, pars[1]); char ** ss; size_t nw; int sv; nw = mapitmmb.get_size(); ss = mapitmmb.get_buffer(); if ((nw < 2) || (nw > 3)) ththrow(("invalid map shift specification -- %s", pars[1])) thtflength l; thparse_double(sv, citem->m_shift.m_x, ss[0]); if (sv != TT_SV_NUMBER) ththrow(("not a number -- %s", ss[0])); thparse_double(sv, citem->m_shift.m_y, ss[1]); if (sv != TT_SV_NUMBER) ththrow(("not a number -- %s", ss[1])); if (nw > 2) l.parse_units(ss[2]); citem->m_shift.m_x = l.transform(citem->m_shift.m_x); citem->m_shift.m_y = l.transform(citem->m_shift.m_y); citem->m_shift.m_preview = thmatch_token(pars[2],thtt_2dmi); if ((citem->m_shift.m_preview == TT_MAPITEM_UNKNOWN) || (citem->m_shift.m_preview == TT_MAPITEM_NORMAL)) ththrow(("unsupported preview type -- %s", pars[2])) } } void thmap::parse_preview(char ** pars) { thdb2dmi * citem = this->db->db2d.insert_map_item(); citem->source = this->db->csrc; citem->psurvey = this->db->get_current_survey(); citem->type = thmatch_token(*pars,thtt_2dmi); switch (citem->type) { case TT_MAPITEM_ABOVE: case TT_MAPITEM_BELOW: break; default: ththrow(("unsupported preview type -- %s", *pars)) } thparse_objectname(citem->name,& this->db->buff_stations, pars[1]); if (this->last_item == NULL) { this->first_item = citem; this->last_item = citem; } else { this->last_item->next_item = citem; citem->prev_item = this->last_item; this->last_item = citem; } } void thmap::calc_z() { thdb2dmi * mi; if (this->nz > -1) return; this->z = 0.0; this->nz = 0; mi = this->first_item; while (mi != NULL) { if (mi->type == TT_MAPITEM_NORMAL) { switch (mi->object->get_class_id()) { case TT_MAP_CMD: ((thmap*)mi->object)->calc_z(); if (((thmap*)mi->object)->nz > 0) { this->z += ((thmap*)mi->object)->z; this->nz++; } break; case TT_SCRAP_CMD: if (!thisnan(((thscrap*)mi->object)->z)) { this->z += ((thscrap*)mi->object)->z; this->nz++; } break; } } mi = mi->next_item; } if (this->nz > 0) { this->z /= double(this->nz); } else { this->z = thnan; } } int thmap::get_context() { return (THCTX_SURVEY); } therion/thmap.h0000644000076400010400000000700712046523402014551 0ustar userAdministrators/** * @file thmap.h * 2D map module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thmap_h #define thmap_h #include "thdataobject.h" #include "thmapstat.h" /** * map command options tokens. */ enum { TT_MAP_UNKNOWN = 2000, TT_MAP_PREVIEW = 2001, TT_MAP_BREAK = 2002, TT_MAP_PROJECTION = 2003, TT_MAP_SURVEY = 2004, }; /** * map command options parsing table. */ static const thstok thtt_map_opt[] = { {"break", TT_MAP_BREAK}, {"preview", TT_MAP_PREVIEW}, {"proj", TT_MAP_PROJECTION}, {"projection", TT_MAP_PROJECTION}, {"survey", TT_MAP_SURVEY}, {NULL, TT_MAP_UNKNOWN}, }; /** * map class. */ class thmap : public thdataobject { public: class thdb2dmi * first_item, ///< First map item. * last_item; ///< Last map item. class thdb2dprj * expl_projection; int projection_id; ///< ID of map projection. bool is_basic; ///< Whether map is basic. int selection_mode; ///< How map is maximally selected. class thdb2dxs * selection_xs; ///< Maximal .... thobjectname asoc_survey; ///< Associated survey. void parse_item(int npar, char ** pars); ///< Parse map item. void parse_preview(char ** pars); ///< Parse preview. void calc_z(); double z; long nz; unsigned last_level; thmapstat stat; /** * Standard constructor. */ thmap(); /** * Standard destructor. */ virtual ~thmap(); /** * Return class identifier. */ virtual int get_class_id(); /** * Return class name. */ virtual const char * get_class_name() {return "thmap";}; /** * Return true, if son of given class. */ virtual bool is(int class_id); /** * Return number of command arguments. */ virtual int get_cmd_nargs(); /** * Return command name. */ virtual const char * get_cmd_name(); /** * Return command end option. */ virtual const char * get_cmd_end(); /** * Return option description. */ virtual thcmd_option_desc get_cmd_option_desc(const char * opts); /** * Set command option. * * @param cod Command option description. * @param args Option arguments arry. * @param argenc Arguments encoding. */ virtual void set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline); /** * Get context for object. */ virtual int get_context(); /** * Delete this object. * * @warn Always use this methos instead of delete function. */ virtual void self_delete(); /** * Print object properties. */ virtual void self_print_properties(FILE * outf); }; #endif therion/thmapstat.cxx0000644000076400010400000003405712046531242016026 0ustar userAdministrators/** * @file thmapstat.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thmapstat.h" #include "thscrap.h" #include "thdata.h" #include "thmap.h" #include "thdataobject.h" #include "thlayout.h" #include "thlang.h" #include "thtexfonts.h" #include "thsurvey.h" #include "thdb1d.h" #include bool operator < (const thmapstat_data & c1, const thmapstat_data & c2) { return (c1.crit < c2.crit); } bool operator < (const thmapstat_copyright & c1, const thmapstat_copyright & c2) { return (strcmp(c1.str,c2.str) < 0); } bool operator < (const thmapstat_dataptr & c1, const thmapstat_dataptr & c2) { return (c1.ptr->id < c2.ptr->id); } thmapstat_data::thmapstat_data() { this->crit = 0.0; } thmapstat_dataptr::thmapstat_dataptr() { this->ptr = NULL; } thmapstat::thmapstat() { scanned = false; } void thmapstat::resetdata() { this->data.clear(); this->surveyed_by.clear(); this->discovered_by.clear(); this->surveyed_date.reset(); this->discovered_date.reset(); } void thmapstat::adddata(thmapstat_datamap * dm) { // prejde vsetky data, prida si ich a ak ich nema, prida // si z nich meracov a objavitelov thmapstat_datamap::iterator ii; #ifdef THDEBUG double sumsum = 0.0; thprintf("\nBEFORE:\n"); for(ii = this->data.begin(); ii != this->data.end(); ii++) { sumsum += ii->first.ptr->stat_length + ii->first.ptr->stat_dlength; thprintf(" %d (+ %.0f = %.0f) [%s]\n",ii->first.ptr->id, ii->first.ptr->stat_length + ii->first.ptr->stat_dlength, sumsum, ii->first.ptr->fsptr->full_name); } thprintf("\n"); #endif ii = dm->begin(); while (ii != dm->end()) { if (this->data.find(ii->first) == this->data.end()) { this->data[ii->first] = 2; #ifdef THDEBUG sumsum += ii->first.ptr->stat_length + ii->first.ptr->stat_dlength; thprintf(" + %d (+ %.0f = %.0f) [%s]\n",ii->first.ptr->id, ii->first.ptr->stat_length + ii->first.ptr->stat_dlength, sumsum, ii->first.ptr->fsptr->full_name); #endif thdata_team_set_type::iterator ti; for(ti = ii->first.ptr->team_set.begin(); ti != ii->first.ptr->team_set.end(); ti++) { this->surveyed_by[*ti].crit += ii->first.ptr->stat_length + ii->first.ptr->stat_dlength; this->surveyed_by[*ti].date.join(ii->first.ptr->date); } this->surveyed_date.join(ii->first.ptr->date); for(ti = ii->first.ptr->discovery_team_set.begin(); ti != ii->first.ptr->discovery_team_set.end(); ti++) { this->discovered_by[*ti].crit += ii->first.ptr->stat_length + ii->first.ptr->stat_dlength; this->discovered_by[*ti].date.join(ii->first.ptr->discovery_date); } this->discovered_date.join(ii->first.ptr->discovery_date); } ii++; } } void thmapstat::addstat(thmapstat * source) { // prejde vsetkych zdrojovych autorov a copyrighty a prida // si ich thmapstat_personmap::iterator aii; for (aii = source->drawn_by.begin(); aii != source->drawn_by.end(); aii++) { this->drawn_by[aii->first].crit += aii->second.crit; this->drawn_by[aii->first].date.join(aii->second.date); } this->drawn_date.join(source->drawn_date); thmapstat_copyrightmap::iterator cii; for (cii = source->copyright.begin(); cii != source->copyright.end(); cii++) { this->copyright[cii->first].crit += cii->second.crit; this->copyright[cii->first].date.join(cii->second.date); } this->adddata(&(source->data)); } void thmapstat::addobj(thdataobject * obj) { // prejde vsetkych zdrojovych autorov a copyrighty a prida // si ich thdo_author_map_type::iterator aii; for (aii = obj->author_map.begin(); aii != obj->author_map.end(); aii++) { this->drawn_by[aii->first.name].crit += 1.0; this->drawn_by[aii->first.name].date.join(aii->second); this->drawn_date.join(aii->second); } thdo_copyright_map_type::iterator cii; thmapstat_copyright tmpc; for (cii = obj->copyright_map.begin(); cii != obj->copyright_map.end(); cii++) { tmpc.str = cii->first.name; this->copyright[tmpc].crit += 1.0; this->copyright[tmpc].date.join(cii->second); } } void thmapstat::scanmap(class thmap * map) { // upravi mape mapstat (rekurzivne), ak nebola scanovana if (map->stat.scanned) return; // prejde najprv podmapy - // ak mapy - tak zavola scanmap z ich statu a prida ich do map->statu // ak scrapy - tak prida do map->statu manualne autorov, copyrighty a // data, ktore maju viac ako 2 body thdb2dmi * mi = map->first_item; thmap * mapp; thscrap * scrapp; while (mi != NULL) { if (mi->type == TT_MAPITEM_NORMAL) { switch (mi->object->get_class_id()) { case TT_MAP_CMD: mapp = (thmap *) mi->object; mapp->stat.scanmap(mapp); map->stat.addstat(&(mapp->stat)); break; case TT_SCRAP_CMD: scrapp = (thscrap *) mi->object; scrapp->get_polygon(); map->stat.addobj(scrapp); map->stat.adddata(&(scrapp->adata)); break; } } mi = mi->next_item; } if (map->asoc_survey.psurvey != NULL) { map->stat.resetdata(); thmapstat_datamap dm; thmapstat_dataptr dp; thdataobject * obj; for(thdb_object_list_type::iterator it = thdb.object_list.begin(); it != thdb.object_list.end(); it++) { obj = *it; if ((obj->get_class_id() == TT_DATA_CMD) && (obj->is_in_survey(map->asoc_survey.psurvey))) { dp.ptr = (thdata*)obj; dm[dp] = 1; } } map->stat.adddata(&dm); } // potom prida do map->statu autorov a copyrighty z map // map->stat.addobj(map); // nakoniec nastavi ze uz bola scanovana map->stat.scanned = true; } struct thmapstat_person_data { thperson person; double crit; }; int thmapstat_person_data_compar(const void * d1, const void * d2) { thmapstat_person_data * p1 = (thmapstat_person_data *) d1, * p2 = (thmapstat_person_data *) d2; if (p1->crit < p2->crit) return 1; else if (p1->crit > p2->crit) return -1; else if (p1->person < p2->person) return -1; else if (p1->person == p2->person) return 0; else return 1; } #define thmapstat_print_team(team_map, team_name, max_items, alphasort, teamstr) \ fprintf(f,"\\" team_name "={"); \ pd = new thmapstat_person_data [team_map.size()]; \ i = 0; \ for (pi = team_map.begin(); \ pi != team_map.end(); pi++) { \ pd[i].person = pi->first; \ if (alphasort) \ pd[i].crit = 0.0; \ else \ pd[i].crit = pi->second.crit; \ i++; \ } \ qsort(pd,cnt,sizeof(thmapstat_person_data),thmapstat_person_data_compar); \ if (max_items >= 0) \ tcnt = (unsigned long)(max_items); \ else \ tcnt = cnt; \ for (i = 0; i < tcnt; i++) { \ b = pd[i].person.get_n1(); \ b += " "; \ b += pd[i].person.get_n2(); \ if (show_lengths) { \ b += " ("; \ b += layout->units.format_length(pd[i].crit); \ b += ""; \ b += layout->units.format_i18n_length_units(); \ b += ")"; \ } \ if (i < (tcnt-1)) \ b += ","; \ fprintf(f,"%s%s",utf2tex(b.get_buffer()),(i < (tcnt-1) ? "\n" : "")); \ teamstr += thutf82xhtml(b.get_buffer()); \ } \ fprintf(f,"}\n"); // snprintf(c.get_buffer(),127,"%.0f",pd[i].crit); // b += c.get_buffer(); // b += thT("units m",layout->lang); double thmapstat::get_length() { double clen = 0.0; thmapstat_datamap::iterator ii; for(ii = this->data.begin(); ii != this->data.end(); ii++) { clen += ii->first.ptr->stat_length; } return clen; } #define check_z(st) { \ if (st != NULL) { \ if (!z_any) { \ z_top = st->z; \ z_bot = st->z; \ z_any = true; \ } else { \ if (z_top < st->z) z_top = st->z; \ if (z_bot > st->z) z_bot = st->z; \ } \ } \ } double thmapstat::get_depth() { double z_top = 0.0, z_bot = 0.0; bool z_any = false; thmapstat_datamap::iterator ii; for(ii = this->data.begin(); ii != this->data.end(); ii++) { check_z(ii->first.ptr->stat_st_top); check_z(ii->first.ptr->stat_st_bottom); } return (z_top - z_bot); } void thmapstat::export_pdftex(FILE * f, class thlayout * layout, legenddata * ldata) { thbuffer b,c; unsigned long i, cnt, tcnt; thmapstat_personmap::iterator pi; thmapstat_copyrightmap::iterator ci; thmapstat_datamap::iterator ii; thmapstat_person_data * pd; bool show_lengths, z_any = false; double clen = 0.0, z_top = 0.0, z_bot = 0.0; c.guarantee(256); b.guarantee(256); for(ii = this->data.begin(); ii != this->data.end(); ii++) { check_z(ii->first.ptr->stat_st_top); check_z(ii->first.ptr->stat_st_bottom); clen += ii->first.ptr->stat_length; } ldata->cavelength = ""; ldata->cavelengthtitle = ""; if (clen > 0) { //b = ""; //snprintf(b.get_buffer(),255,"%.0f",clen); b = layout->units.format_length(clen); b += ""; //b += thT("units m",layout->lang); b += layout->units.format_i18n_length_units(); fprintf(f,"\\cavelengthtitle={%s}\n",utf2tex(thT("title cave length",layout->lang))); fprintf(f,"\\cavelength={%s}\n",utf2tex(b.get_buffer())); ldata->cavelength = thutf82xhtml(b.get_buffer()); ldata->cavelengthtitle = thT("title cave length",layout->lang); } ldata->cavedepth = ""; ldata->cavedepthtitle = ""; if (z_top > z_bot) { //b = ""; //snprintf(b.get_buffer(),255,"%.0f",z_top-z_bot); b = layout->units.format_length(z_top-z_bot); b += ""; //b += thT("units m",layout->lang); b += layout->units.format_i18n_length_units(); fprintf(f,"\\cavedepthtitle={%s}\n",utf2tex(thT("title cave depth",layout->lang))); fprintf(f,"\\cavedepth={%s}\n",utf2tex(b.get_buffer())); ldata->cavedepth = thutf82xhtml(b.get_buffer()); ldata->cavedepthtitle = thT("title cave depth",layout->lang); } show_lengths = (layout->explo_lens == TT_LAYOUT_LENSTAT_ON); ldata->explodate = ""; ldata->exploteam = ""; ldata->explotitle = ""; if ((this->discovered_by.size() > 0) && (layout->max_explos != 0)) { cnt = this->discovered_by.size(); if (cnt > 1) { fprintf(f,"\\explotitle={%s}\n", utf2tex(thT("title explo (plural)",layout->lang))); ldata->explotitle = thT("title explo (plural)",layout->lang); } else { fprintf(f,"\\explotitle={%s}\n", utf2tex(thT("title explo",layout->lang))); ldata->explotitle = thT("title explo",layout->lang); } if (discovered_date.is_defined()) { fprintf(f,"\\explodate={%s}\n", utf2tex(discovered_date.get_str(TT_DATE_FMT_UTF8_Y))); ldata->explodate = discovered_date.get_str(TT_DATE_FMT_UTF8_Y); } thmapstat_print_team(this->discovered_by,"exploteam", layout->max_explos, (layout->explo_lens == TT_LAYOUT_LENSTAT_OFF) ,ldata->exploteam); } ldata->topodate = ""; ldata->topoteam = ""; ldata->topotitle = ""; show_lengths = (layout->topo_lens == TT_LAYOUT_LENSTAT_ON); if ((this->surveyed_by.size() > 0) && (layout->max_topos != 0)) { cnt = this->surveyed_by.size(); if (cnt > 1) { fprintf(f,"\\topotitle={%s}\n", utf2tex(thT("title topo (plural)",layout->lang))); ldata->topotitle = thT("title topo (plural)",layout->lang); } else { fprintf(f,"\\topotitle={%s}\n", utf2tex(thT("title topo",layout->lang))); ldata->topotitle = thT("title topo",layout->lang); } if (surveyed_date.is_defined()) { fprintf(f,"\\topodate={%s}\n", utf2tex(surveyed_date.get_str(TT_DATE_FMT_UTF8_Y))); ldata->topodate = surveyed_date.get_str(TT_DATE_FMT_UTF8_Y); } thmapstat_print_team(this->surveyed_by,"topoteam", layout->max_topos, (layout->topo_lens == TT_LAYOUT_LENSTAT_OFF), ldata->topoteam); } ldata->cartodate = ""; ldata->cartoteam = ""; ldata->cartotitle = ""; show_lengths = false; if ((this->drawn_by.size() > 0) && (layout->max_cartos != 0)) { cnt = this->drawn_by.size(); if (cnt > 1) { fprintf(f,"\\cartotitle={%s}\n", utf2tex(thT("title carto (plural)",layout->lang))); ldata->cartotitle = thT("title carto (plural)",layout->lang); } else { fprintf(f,"\\cartotitle={%s}\n", utf2tex(thT("title carto",layout->lang))); ldata->cartotitle = thT("title carto",layout->lang); } if (drawn_date.is_defined()) { fprintf(f,"\\cartodate={%s}\n", utf2tex(drawn_date.get_str(TT_DATE_FMT_UTF8_Y))); ldata->cartodate = drawn_date.get_str(TT_DATE_FMT_UTF8_Y); } thmapstat_print_team(this->drawn_by,"cartoteam", layout->max_cartos, true, ldata->cartoteam); } ldata->copyrights = ""; if ((this->copyright.size() > 0) && (layout->max_copys != 0)) { cnt = this->copyright.size(); fprintf(f,"\\copyrights={%s",utf2tex("(c) ")); ldata->copyrights = "(c) "; i = 0; for (ci = this->copyright.begin(); (ci != this->copyright.end()) && ((layout->max_copys < 0) || (i < ((unsigned long)layout->max_copys))); ci++) { i++; b = ci->first.str; b += " "; b += ci->second.date.get_str(TT_DATE_FMT_UTF8_Y); if (i < cnt) b += ", "; ldata->copyrights += thutf82xhtml(b.get_buffer()); fprintf(f,"%s%s",utf2tex(b.get_buffer()),(i < cnt ? "\n" : "")); } fprintf(f,"}\n"); } } therion/thmapstat.h0000644000076400010400000000534012046526432015451 0ustar userAdministrators/** * @file thmapstat.h * Multiple string buffer class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thmapstat_h #define thmapstat_h #include #include #include #include "thdate.h" #include "thperson.h" #include "thlegenddata.h" class thmapstat_data { public: friend bool operator < (const thmapstat_data & c1, const thmapstat_data & c2); thdate date; double crit; thmapstat_data(); }; class thmapstat_copyright { public: friend bool operator < (const thmapstat_copyright & c1, const thmapstat_copyright & c2); const char * str; }; class thmapstat_dataptr { public: friend bool operator < (const thmapstat_dataptr & c1, const thmapstat_dataptr & c2); class thdata * ptr; thmapstat_dataptr(); }; // person map type /person, datum, kriterium/ // copyright map type /copyright, datum, kriterium/ // data map type /dataid/ typedef std::map thmapstat_personmap; typedef std::map thmapstat_copyrightmap; typedef std::map thmapstat_datamap; class thmapstat { public: bool scanned; thmapstat_personmap discovered_by, surveyed_by, drawn_by; thdate drawn_date, surveyed_date, discovered_date; thmapstat_copyrightmap copyright; thmapstat_datamap data; /** * Standard constructor. */ thmapstat(); /** * Scan authors and copyrights and data. */ void scanmap(class thmap * map); /** * Add data from another objects. */ void addobj(class thdataobject * obj); void addstat(thmapstat * source); void adddata(thmapstat_datamap * dm); void resetdata(); void export_pdftex(FILE * f, class thlayout * layout, legenddata * ldata); double get_length(); double get_depth(); }; #endif therion/thmbuffer.cxx0000644000076400010400000000561710721205226016001 0ustar userAdministrators/** * @file thmbuffer.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thmbuffer.h" thmbuffer::mblock::mblock(size_t min_size, size_t last_size) { this->next_ptr = NULL; this->size = 4 * last_size; while (this->size <= min_size) this->size *= 4; this->data = new char [this->size]; } thmbuffer::mblock::~mblock() { if (this->data) delete [] this->data; if (this->next_ptr != NULL) delete this->next_ptr; } thmbuffer::thmbuffer() { this->max_size = 4; this->size = 0; this->buf = new char* [this->max_size]; this->first_ptr = new mblock(1000, 256); this->last_ptr = this->first_ptr; this->free_size = this->last_ptr->size; this->free_ptr = this->last_ptr->data; } thmbuffer::~thmbuffer() { if (this->buf) delete [] this->buf; if (this->first_ptr) delete this->first_ptr; } char * thmbuffer::appendn(const char * src, size_t n) { char * dest; while (this->free_size <= long(n)) { if (this->last_ptr->next_ptr != NULL) this->last_ptr = this->last_ptr->next_ptr; else { this->last_ptr->next_ptr = new mblock(n, this->last_ptr->size); this->last_ptr = this->last_ptr->next_ptr; } this->free_size = this->last_ptr->size; this->free_ptr = this->last_ptr->data; } dest = strncpy(this->free_ptr, src, n); dest[n] = 0; this->free_ptr += n + 1; this->free_size -= n + 1; if (this->size == this->max_size) { char ** new_buf; this->max_size *= 4; new_buf = new char* [this->max_size]; memcpy(new_buf, this->buf, this->size * sizeof(char*)); delete [] this->buf; this->buf = new_buf; } this->buf[this->size] = dest; this->size++; return dest; } char * thmbuffer::append(const char * src) { return this->appendn(src, strlen(src)); } void thmbuffer::clear() { this->last_ptr = this->first_ptr; this->free_size = this->last_ptr->size; this->free_ptr = this->last_ptr->data; this->size = 0; } long thmbuffer::get_size() { return this->size; } char ** thmbuffer::get_buffer() { return this->buf; } therion/thmbuffer.h0000644000076400010400000000514510721205226015422 0ustar userAdministrators/** * @file thmbuffer.h * Multiple string buffer class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thmbuffer_h #define thmbuffer_h #include /** * Multiple string buffer class. */ class thmbuffer { long size, ///< Number of items in buffer. max_size, ///< Maximal number of items in buffer. free_size; char * free_ptr; ///< Pointer to the free string position. char ** buf; ///< Access array. /** * Memory allocation class. */ class mblock { public: char * data; ///< Pointer to the memory block. size_t size; ///< Size of the block. mblock * next_ptr; ///< Pointer to the next block. /** * Constructor. * * Allocates also necessary memory. */ mblock(size_t min_size, size_t last_size); /** * Destructor. * * Dealocates data memory. */ ~mblock(); }; mblock * first_ptr, ///< Pointer to the first memory block. * last_ptr; ///< Pointer to the last memory block. public: /** * Standard constructor. */ thmbuffer(); /** * Destructor. */ ~thmbuffer(); /** * Clear the buffer contents. */ void clear(); /** * Append new string to the buffer. * * @param src Source string. */ char * append(const char * src); /** * Append n characters from string as a new string to the buffer. * * @param src Source string. * @param n Source size. */ char * appendn(const char * src, size_t n); /** * Return number of items in buffer. */ long get_size(); /** * Return pointer to the array of items. */ char ** get_buffer(); }; #endif therion/thmpost.cxx0000644000076400010400000047746112255660056015541 0ustar userAdministrators/** * @file thmpost.cxx * * THIS FILE IS GENERATED AUTOMATICALLY, DO NOT MODIFY IT !!! */ #include "thmpost.h" #ifndef THMSVC const char * thmpost_library = "%% therion source code\n" "%%\n" "%% therion.mp\n" "%%\n" "%% This file defines low-level MetaPost macros and variables required\n" "%% for generation of map symbols\n" "%%\n" "%% $Date: 2003/07/01 09:06:44 $\n" "%% $RCSfile: therion.mp,v $\n" "%% $Revision: 1.3 $\n" "%%\n" "%% Copyright (C) 2000-2003 Martin Budaj\n" "%%\n" "%% Some macros are adapted from MPATTERN package of P. Bolek\n" "%%\n" "%% Some macros are used from MetaFun package of H. Hagen\n" "%%\n" "%% -------------------------------------------------------------------- \n" "%% This program is free software; you can redistribute it and/or modify\n" "%% it under the terms of the GNU General Public License as published by\n" "%% the Free Software Foundation; either version 2 of the License, or\n" "%% any later version.\n" "%%\n" "%% This program is distributed in the hope that it will be useful,\n" "%% but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" "%% GNU General Public License for more details.\n" "%% \n" "%% You should have received a copy of the GNU General Public License\n" "%% along with this program; if not, write to the Free Software\n" "%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" "%% --------------------------------------------------------------------\n" "\n" "% This file defines low level macros used for map signatures in Therion.\n" "% Before loading this file set `Scale' variable to numeric value\n" "% representing denominator of the scale ratio. Internal variable \n" "% `prologues' is set to 1 by this file. This module loads also \n" "% symbol libraries.\n" "\n" "\n" "tracingstats:=1;\n" "prologues:=0;\n" "\n" "if known Background: background:=Background fi;\n" "%TrueScale:=Scale;\n" "\n" "% @VARIABLE\n" "% symbol_scale --\n" "%\n" "% internal numeric; in map symbol definitions used for scaling\n" "% in T transformation; recommended\n" "% values are 1 or 2.\n" "\n" "%newinternal symbol_scale;\n" "%symbol_scale := 1;\n" "\n" "% @VARIABLE\n" "% fill_only --\n" "%\n" "% boolean, used in thdraw and\n" "% thpattfill commands. When set to false, it has \n" "% no effect, when it is true, it supresses all drawing \n" "% commands with exception of thpermanentfill, so that only filled \n" "% areas are drawn\n" "\n" "boolean fill_only, horiz_labels, transparency;\n" "fill_only := false;\n" "horiz_labels:=true;\n" "transparency:=false;\n" "\n" "string ATTR__id, ATTR__survey, ATTR__scrap;\n" "boolean ATTR__scrap_centerline;\n" "picture ATTR__text;\n" "numeric ATTR__height;\n" "boolean ATTR__elevation;\n" "ATTR__scrap_centerline := false;\n" "ATTR__height:=0;\n" "ATTR__elevation:=false;\n" "\n" "boolean ATTR__shotflag_splay;\n" "ATTR__shotflag_splay:=false;\n" "boolean ATTR__shotflag_duplicate;\n" "ATTR__shotflag_duplicate:=false;\n" "boolean ATTR__shotflag_approx;\n" "ATTR__shotflag_approx:=false;\n" "boolean ATTR__stationflag_splay;\n" "ATTR__stationflag_splay:=false;\n" "\n" "\n" "color label_fill_color, label_fill_color_tmp;\n" "label_fill_color := (1.0, 1.0, 1.0);\n" "def push_label_fill_color(expr r,g,b) =\n" " label_fill_color_tmp := label_fill_color;\n" " label_fill_color := (r,g,b);\n" "enddef;\n" "def pop_label_fill_color =\n" " label_fill_color := label_fill_color_tmp;\n" "enddef;\n" "def process_filledlabel(expr cent, rot) =\n" " begingroup;\n" " interim bboxmargin:=2.0bp;\n" " q:=((bbox lab) smoothed 2) rotatedaround (cent, rot);\n" " fill q withcolor label_fill_color;\n" " draw lab rotatedaround (cent, rot);\n" " write_circ_bbox(q); % without corners smoothing it was enough to use\n" " % write_bbox(q);\n" " endgroup;\n" "enddef;\n" "\n" "\n" "\n" "\n" "numeric area_border_errors;\n" "area_border_errors = 0;\n" "\n" "% @VARIABLE\n" "% last_write --\n" "%\n" "% numeric; charcode of last figure which contained \n" "% write_bbox macro; this value is used by\n" "% close_file macro. Initially set to -1.\n" "\n" "numeric last_write;\n" "last_write = -1;\n" "\n" "% @VARIABLE\n" "% strut_string --\n" "%\n" "% string containing combination of the \"highest\" and \"lowest\" character\n" "% in used font; it's used by free_text macro.\n" "\n" "%string strut_string;\n" "%strut_string = \"(È\";\n" "\n" "% @VARIABLE\n" "% file_name --\n" "%\n" "% string, name of file, where write_bbox macro writes\n" "% text clipping path\n" "\n" "% @VARIABLE\n" "% s ch --\n" "%\n" "% string, temporary string/char variables\n" "\n" "string s, ch, file_name, bg_name, clip_name, lang, diff_pos, diff_neg,\n" " current_scrap, current_src;\n" "\n" "% @VARIABLE\n" "% u v w --\n" "%\n" "% internal numeric variables used as basic length units for drawing;\n" "% they are set by initialize macro.\n" "%
  • u -- normal unit decreasing with increasing scale\n" "%
  • v -- like u, but can increase drammaticaly\n" "% when some limit is encountered (to get effects like logarithmic\n" "% scale)\n" "%
  • w -- nearly constant at all scales\n" "%
\n" "\n" "% @VARIABLE\n" "% legend_scale --\n" "%\n" "% numeric, length of the longer side of signatures' legend box\n" "\n" "newinternal legend_scale, u,v,w;\n" "\n" "% @VARIABLE\n" "% lab Lab --\n" "%\n" "% picture, in which are saved typeset labels\n" "\n" "picture lab, Lab;\n" "\n" "% @VARIABLE\n" "% T --\n" "%\n" "% transformation, defines transformation function for transforming \n" "% every argument of thdraw and thfill\n" "% macros\n" "\n" "transform T;\n" "\n" "% @VARIABLE\n" "% p,q --\n" "%\n" "% path, for saving temporary paths\n" "\n" "path p,q;\n" "\n" "% @MACRO\n" "% initialize --\n" "%\n" "% initializes basic length units (u,v,w) and pens used \n" "% in map symbols according to scale. Five circular pens are defined:\n" "%
  • PenA -- thick; for outlines\n" "%
  • PenB, PenC -- thinner; for pits, symbols etc.\n" "%
  • PenD -- thinnest; for fine details\n" "%
  • PenX -- extra thick; not recommended for use\n" "%
\n" "\n" "def fonts_setup (expr t,s,m,l,h) =\n" " write \"\\def\\updown#1#2{\\vbox{\" &\n" " \"\\offinterlineskip\" &\n" " \"\\setbox100=\\hbox{#1}\" &\n" " \"\\setbox101=\\hbox{#2}\" &\n" " \"\\ifnum\\wd100>\\wd101\\hsize=\\wd100\\else\\hsize=\\wd101\\fi\" &\n" " \"\\centerline{\\box100}\\vskip4pt\" &\n" " \"\\centerline{\\box101}}}\" &\n" " \"\\def\\thlabel{\\thnormalsize}\" &\n" " \"\\def\\thremark{\\thsmallsize\\si}\" &\n" " \"\\def\\thcomment{\\thsmallsize}\" &\n" " \"\\def\\thentrance{\\thsmallsize}\" &\n" " \"\\def\\thaltitude{\\thsmallsize}\" &\n" " \"\\def\\thstationname{\\thsmallsize}\" &\n" " \"\\def\\thdate{\\thsmallsize}\" &\n" " \"\\def\\thheight{\\thsmallsize}\" &\n" " \"\\def\\thheightpos{+\\ignorespaces}\" &\n" " \"\\def\\thheightneg{-\\ignorespaces}\" &\n" " \"\\def\\thframed{\\thsmallsize}\" &\n" " \"\\def\\thwallaltitude{\\thtinysize}\"\n" " to \"mptexpre.tex\";\n" " write \"\\def\\thtinysize{\\size[\" & decimal max(optical_zoom*t,0) & \"]}\" & \n" " \"\\def\\thsmallsize{\\size[\" & decimal max(optical_zoom*s,0) & \"]}\" & \n" " \"\\def\\thnormalsize{\\size[\" & decimal max(optical_zoom*m,0) & \"]}\" & \n" " \"\\def\\thlargesize{\\size[\" & decimal max(optical_zoom*l,0) & \"]}\" & \n" " \"\\def\\thhugesize{\\size[\" & decimal max(optical_zoom*h,0) & \"]}\" \n" " to \"mptexpre.tex\";\n" " write EOF to \"mptexpre.tex\";\n" "enddef;\n" "\n" "def initialize (expr sc) =\n" "\n" " if unknown BaseScale: BaseScale = sc; fi;\n" " optical_zoom := BaseScale/sc;\n" "\n" " if BaseScale <= 1: % 1:100\n" " u:=14bp; v:=14bp; w:=12bp;\n" " fonts_setup(8,10,12,16,24);\n" " elseif BaseScale <= 2: % 1:200\n" " u:=12bp; v:=12bp; w:=12bp;\n" " fonts_setup(7,8,10,14,20);\n" " elseif BaseScale <= 5: % 1:500\n" " u:=10bp; v:=10bp; w:=12bp;\n" " fonts_setup(6,7,8,10,14);\n" " else:\n" " u:=7bp; v:=14bp; w:=10bp;\n" " fonts_setup(5,6,7,8,10);\n" " fi;\n" " \n" " u := optical_zoom * u;\n" " v := optical_zoom * v;\n" " w := optical_zoom * w;\n" "\n" " defaultscale := 0.8 * optical_zoom;\n" "\n" " def PenA = pencircle scaled (u/10) enddef;\n" " def PenB = pencircle scaled (0.7*u/10) enddef;\n" " def PenC = pencircle scaled (0.5*u/10) enddef;\n" " def PenD = pencircle scaled (0.35*u/10) enddef;\n" " def PenX = pencircle scaled (1.2*u/10) enddef;\n" " \n" " legend_scale := 3.14*u;\n" "enddef;\n" "\n" "% macro is expanded, we have to know all dimensions and pens before reading\n" "% mpattern macros\n" "\n" "initialize(Scale);\n" "\n" "vardef thTEX primary s =\n" " write \"verbatimtex \\input th_enc.tex etex\" to \"mptextmp.mp\";\n" " write \"btex \\mainfont \"&s&\" etex\" to \"mptextmp.mp\";\n" " write EOF to \"mptextmp.mp\";\n" " scantokens \"input mptextmp\"\n" "enddef;\n" "\n" "% @MACRO\n" "% inscale --\n" "%\n" "% zooms objects to scale specified in legend_scale variable (used in legend\n" "% typesetting)\n" "\n" "def inscale = \n" " xscaled legend_scale yscaled (0.618*legend_scale)\n" "enddef;\n" "\n" "% @MACRO\n" "% draw_legend_box --\n" "%\n" "% draws a legend bounding box and resets drawoptions() options \n" "\n" "def draw_legend_box =\n" " clip currentpicture to unitsquare inscale;\n" " drawoptions();\n" " pickup PenB;\n" " draw unitsquare inscale;\n" "enddef;\n" "\n" "def clean_legend_box =\n" " unfill unitsquare inscale;\n" "enddef;\n" "\n" "def legend_point (expr name) =\n" "% if substring (2,9) of name = \"station\":\n" "% scantokens(name)((0.5,0.5) inscale);\n" "% else:\n" " scantokens(name)((0.5,0.5) inscale,0,1,(0,0));\n" "% fi;\n" " draw_legend_box;\n" "enddef;\n" "\n" "def legend_line (expr name) =\n" " scantokens(name)((((-0.3,.5)..(.3,.7)..(.5,.3)..{dir 80}(1.3,.9)) inscale) \n" " randomized 3mm);\n" " draw_legend_box;\n" "enddef;\n" "\n" "% legend_label\n" "% legend_area\n" "% legend_random\n" "\n" "% @MACRO\n" "% roundone --\n" "%\n" "% rounds numeric value to one decimal point\n" "\n" "vardef roundone(expr n) =\n" "% round(10*n)/10\n" " n\n" "enddef;\n" "\n" "% @MACRO\n" "% process_label --\n" "%\n" "% draws a label saved in lab picture variable and calls \n" "% write_bbox macro.\n" "\n" "\n" "def process_label (expr cent, rot) =\n" " begingroup;\n" " interim bboxmargin:=0.8bp;\n" " q:=((bbox lab) smoothed 2) rotatedaround (cent, rot);\n" " draw lab rotatedaround (cent, rot);\n" " write_circ_bbox(q); % without corners smoothing it was enough to use\n" " % write_bbox(q);\n" " endgroup;\n" "enddef;\n" "\n" "% @MACRO\n" "% process_uplabel --\n" "%\n" "% draws a label into semicircular box and writes clipping path to a file\n" "\n" "def process_uplabel =\n" " begingroup;\n" " interim bboxmargin := 0.8 bp;\n" " q:=bbox lab;\n" " endgroup;\n" " alef:=.8-.02*(xpart lrcorner q - xpart llcorner q);\n" "% show alef;\n" " q:=alef[llcorner q,ulcorner q]{up} .. {down}alef[lrcorner q, urcorner q] --\n" " lrcorner q -- llcorner q -- cycle;\n" " draw lab;\n" " draw q;\n" " q:=reverse q;\n" " write_circ_bbox(q);\n" "enddef;\n" "\n" "% @MACRO\n" "% process_downlabel --\n" "%\n" "% draws a label into down oriented semicircular box and writes\n" "% clipping path to a file\n" "\n" "def process_downlabel =\n" " begingroup;\n" " interim bboxmargin := 0.8 bp;\n" " q:=bbox lab;\n" " endgroup;\n" " alef:=1-(.8-.02*(xpart lrcorner q - xpart llcorner q));\n" " q:=alef[llcorner q,ulcorner q]{down} .. \n" " {up}alef[lrcorner q, urcorner q] --\n" " urcorner q -- ulcorner q -- cycle;\n" " draw lab;\n" " draw q;\n" " write_circ_bbox(q);\n" "enddef;\n" "\n" "% @MACRO\n" "% process_updownlabel --\n" "%\n" "% draws a label splitted into down and up oriented semicircular boxes and \n" "% writes clipping path to a file\n" "\n" "def process_updownlabel =\n" " begingroup;\n" " interim bboxmargin := 0.8 bp;\n" " p:=bbox lab;\n" " endgroup;\n" " leftside:=xpart llcorner p;\n" " rightside:=xpart lrcorner p;\n" " draw (xpart llcorner p,.5[ypart llcorner p,ypart ulcorner p]) -- \n" " (xpart lrcorner p,.5[ypart llcorner p,ypart ulcorner p]);\n" " alef:=1.05-.02*(xpart lrcorner p - xpart llcorner p);\n" "% alef:=.8-.02*(rightside-leftside);\n" " p:=alef[(leftside, ypart llcorner p),(leftside, ypart ulcorner p)]{up} .. \n" " {down}alef[(rightside, ypart lrcorner p), (rightside, ypart urcorner p)]\n" " -- alef[(rightside, ypart urcorner p), (rightside, ypart lrcorner p)]{down}\n" " .. {up}alef[(leftside, ypart ulcorner p),(leftside, ypart llcorner p)]\n" " -- cycle;\n" "% p:=alef[llcorner p,ulcorner p]{up} .. {down}alef[lrcorner p, urcorner p] --\n" "% aleff[llcorner p,ulcorner p]{down} .. \n" "% {up}aleff[lrcorner p, urcorner p] -- cycle;\n" " draw lab;\n" " draw p;\n" " p:=reverse p;\n" " write_circ_bbox(p);\n" "enddef;\n" "\n" "def process_updownlabel_OLD =\n" " p:=bbox lab;\n" " q:=bbox Lab;\n" " leftside:=min(xpart llcorner p, xpart ulcorner q);\n" " rightside:=max(xpart lrcorner p, xpart urcorner q);\n" " draw .5[(leftside, ypart llcorner p),(leftside, ypart ulcorner q)] -- \n" " .5[(rightside,ypart lrcorner p),(rightside,ypart urcorner q)];\n" " alef:=.8-.02*(rightside-leftside);\n" " q:=alef[(leftside, ypart llcorner p),(leftside, ypart ulcorner p)]{up} .. \n" " {down}alef[(rightside, ypart lrcorner p), (rightside, ypart urcorner p)]\n" " -- alef[(rightside, ypart urcorner q), (rightside, ypart lrcorner q)]{down}\n" " .. {up}alef[(leftside, ypart ulcorner q),(leftside, ypart llcorner q)]\n" " -- cycle;\n" " draw lab;\n" " draw Lab;\n" " draw q;\n" " q:=reverse q;\n" " write_circ_bbox(q);\n" "enddef;\n" "\n" "% @MACRO\n" "% process_boxedlabel --\n" "%\n" "% draws a label into circular box and writes\n" "% clipping path to a file\n" "\n" "def process_boxedlabel =\n" " q:=bbox lab;\n" " draw lab;\n" " draw q;\n" " write_bbox(q);\n" "enddef;\n" "\n" "% @MACRO\n" "% process_circledlabel --\n" "%\n" "% draws a label into circular box and writes\n" "% clipping path to a file\n" "\n" "def process_circledlabel =\n" " begingroup;\n" " interim bboxmargin := 0.4 bp;\n" " q:=bbox lab;\n" " endgroup;\n" " q:=point 0 of q .. point 1 of q .. point 2 of q .. point 3 of q .. cycle;\n" " draw lab;\n" " draw q;\n" " write_circ_bbox(q);\n" "enddef;\n" "\n" "\n" "% @MACRO\n" "% write_bbox --\n" "%\n" "% Arguments:\n" "% path variable -- rectangular bounding box of a label;\n" "% assumptions: path is cyclic, counterclockwise oriented, with four points,\n" "% composed from linear segments;\n" "% see general write_circ_bbox macro\n" "% Results:\n" "% one file per figure which uses labels with a clipping path in pseudo-pdf \n" "% format\n" "\n" "def write_bbox (expr q) =\n" " file_name := jobname & \".\" & decimal(charcode) & \"bbox\";\n" " for i:=4 downto 0:\n" " s := decimal(roundone(xpart point i of q)) & \" \" \n" " & decimal(roundone(ypart point i of q)) \n" " & if i=4: \" m \" else: \" l\" fi;\n" " write s to file_name;\n" " endfor;\n" " last_write := charcode;\n" "enddef;\n" "\n" "% @MACRO\n" "% write_circ_bbox --\n" "%\n" "% Arguments:\n" "% path variable, only assumption is that path is cyclic\n" "% and counterclockwise oriented.\n" "% Results:\n" "% one file per figure which uses labels with a clipping path in pseudo-pdf \n" "% format\n" "\n" "def write_circ_bbox expr q =\n" " file_name := jobname & \".\" & decimal(charcode) & \"bbox\";\n" " tmp:=length q;\n" " s := decimal(roundone(xpart point tmp of q)) & \" \" \n" " & decimal(roundone(ypart point tmp of q)) & \" m\";\n" " write s to file_name;\n" " for i:=tmp downto 1:\n" " s := decimal(roundone(xpart precontrol i of q)) & \" \" \n" " & decimal(roundone(ypart precontrol i of q)) & \" \"\n" " & decimal(roundone(xpart postcontrol i-1 of q)) & \" \" \n" " & decimal(roundone(ypart postcontrol i-1 of q)) & \" \"\n" " & decimal(roundone(xpart point i-1 of q)) & \" \" \n" " & decimal(roundone(ypart point i-1 of q)) & \" c\";\n" " write s to file_name;\n" " endfor;\n" " last_write := charcode;\n" "enddef;\n" "\n" "% @MACRO\n" "% close_file --\n" "%\n" "% closes file with a clipping path; it's invoked by endchar macro\n" "\n" "def close_file =\n" " if last_write=charcode:\n" " write EOF to jobname & \".\" & decimal(charcode) & \"bbox\";\n" " fi;\n" "enddef;\n" "\n" "% endchar should run close_file macro\n" "\n" "extra_endfig := \"close_file;\";\n" "\n" "% @MACRO\n" "% thdraw --\n" "%\n" "% like plain MetaPost's draw, but draws a path transformed\n" "% (rotated, scaled, shifted) to scrap's coordinates according T variable.\n" "% (If fill_only=false)\n" "\n" "def thdrawoptions(text t) =\n" " def _thop_ = t enddef\n" "enddef;\n" "thdrawoptions();\n" "\n" "def thdraw expr p = \n" " if not fill_only:\n" " addto currentpicture \n" " if picture p: \n" " also (p transformed T)\n" " else:\n" " doublepath (p transformed T) withpen currentpen \n" " fi \n" " _thop_ _op_\n" " else:\n" " addto currentpicture also nullpicture\n" " fi\n" "enddef;\n" "\n" "% @MACRO\n" "% thfill --\n" "%\n" "% fills a path transformed\n" "% (rotated, scaled, shifted) to scrap's coordinates according T variable.\n" "% Filled areas are clipped (like most \n" "% other lines and points) with a clipping path around text labels.\n" "\n" "\n" "def thfill expr c = \n" " addto currentpicture contour (c transformed T) _thop_ _op_ \n" "enddef;\n" "\n" "def thfilldraw expr c =\n" " if not fill_only:\n" " addto currentpicture contour (c transformed T) withpen currentpen _thop_ _op_ \n" " else:\n" " addto currentpicture contour (c transformed T) _thop_ _op_ \n" " fi\n" "enddef;\n" "\n" "def thunfill expr c = \n" " thfill c withcolor background \n" "enddef;\n" "\n" "def thundraw expr p = \n" " thdraw p withcolor background \n" "enddef;\n" "\n" "def thunfilldraw expr c = \n" " thfilldraw c withcolor background \n" "enddef;\n" "\n" "def thclean expr c =\n" " if transparency:\n" " thfill c withtransparentcolor tr_bg\n" " else:\n" " thunfill c\n" " fi;\n" "enddef;\n" "\n" "def thPatternFill (expr Path, Pattern) =\n" " T:=identity;\n" " thclean Path;\n" " thfill Path withpattern Pattern;\n" "enddef;\n" "\n" "%def thLegendPatternFill (expr Path, Pattern) =\n" "% T:=identity;\n" "% thfill Path withpattern Pattern;\n" "%enddef;\n" "\n" "% for drawarrow:\n" "\n" "def _finarr text t =\n" " thdraw _apth t;\n" " thfilldraw arrowhead _apth t\n" "enddef;\n" "\n" "% @MACRO\n" "% thpermanentfill --\n" "%\n" "% Fills specified area with a solid color; this area is not affected by \n" "% text clipping path\n" "\n" "%def thpermanentfill expr c = \n" "% addto currentpicture contour (c transformed T) _thop_ _op_\n" "%enddef;\n" "\n" "let thpermanentfill = thfill;\n" "\n" "\n" "primarydef p aligned al=\n" " p shifted (xpart al * xpart U, ypart al * ypart U)\n" "enddef;\n" "\n" "% macros for drawing scraps in upper and lower levels; filled lower scraps \n" "% require special treatment (MetaPost doesn't support non-continuous paths).\n" "% We can't use one file for both, while PDF XObject has to be explicitely \n" "% filled or stroked. Second macro writes also pseudo-pdf code of a clipping \n" "% path for given scrap\n" "\n" "boolean drawnext;\n" "drawnext:=true;\n" "\n" "def draw_upscrap (expr isout)(text t) =\n" " path q;\n" " for i=t:\n" " if (numeric i):\n" " if (i=1): drawnext:=true; else: drawnext:=false; fi;\n" " else:\n" " if drawnext: draw i withpen PenD; fi;\n" " if not known q: q:=i; else: q:=q -- i; fi;\n" " fi;\n" " endfor;\n" " if not cycle q: q:=q -- cycle; fi;\n" " if turningnumber q = 0: \n" " thwarning(\"scrap outline intersects itself\"); \n" " fi;\n" " if isout=1:\n" " if turningnumber q > 0: q := reverse q; fi;\n" " else:\n" " if turningnumber q < 0: q := reverse q; fi;\n" " fi;\n" " addto bgfill contour q;\n" "enddef;\n" "\n" "% following macro writes noncontinuous PostScript path directly to EPS file\n" "% (filled background and clipping path)\n" "\n" "picture bgfill;\n" "bgfill:=nullpicture;\n" "\n" "def draw_downscrap =\n" " bg_name := jobname & \".\" & decimal(charcode) & \"bg\";\n" " clip_name := jobname & \".\" & decimal(charcode) & \"clip\";\n" " write \"%!PS\" to bg_name;\n" " write \"%%BoundingBox: \" & \n" " decimal floor xpart llcorner bgfill & \" \" &\n" " decimal floor ypart llcorner bgfill & \" \" &\n" " decimal ceiling xpart urcorner bgfill & \" \" &\n" " decimal ceiling ypart urcorner bgfill \n" " to bg_name;\n" " write \"%%Page: 1 1\" to bg_name;\n" " write \"newpath\" to bg_name;\n" " for qq within bgfill:\n" " q := pathpart qq;\n" " tmp:=length q;\n" " s := decimal(roundone(xpart point tmp of q)) & \" \" \n" " & decimal(roundone(ypart point tmp of q)) & \" m\";\n" " write s & \"oveto\" to bg_name;\n" " write s to clip_name;\n" " for i:=tmp downto 1:\n" " s := decimal(roundone(xpart precontrol i of q)) & \" \" \n" " & decimal(roundone(ypart precontrol i of q)) & \" \"\n" " & decimal(roundone(xpart postcontrol i-1 of q)) & \" \" \n" " & decimal(roundone(ypart postcontrol i-1 of q)) & \" \"\n" " & decimal(roundone(xpart point i-1 of q)) & \" \" \n" " & decimal(roundone(ypart point i-1 of q)) & \" c\";\n" " write s & \"urveto\" to bg_name;\n" " write s to clip_name;\n" " endfor;\n" " endfor;\n" " write \"closepath fill\" to bg_name;\n" " write \"showpage\" to bg_name;\n" " write \"%%EOF\" to bg_name;\n" " write EOF to bg_name;\n" " write EOF to clip_name;\n" " bgfill:=nullpicture;\n" "enddef;\n" "\n" "\n" "\n" "vardef buildcycle(text ll) =\n" " save ta_, tb_, k_, i_, pp_; path pp_[];\n" " k_=0;\n" " for q=ll: pp_[incr k_]=q; endfor\n" " i_=k_;\n" " for i=1 upto k_:\n" " (ta_[i], length pp_[i_]-tb_[i_]) =\n" " pp_[i] intersectiontimes reverse pp_[i_];\n" " if ta_[i]<0:\n" " message(\"[Error: area borders \"& area_border[i] &\" and \"& \n" " area_border[i_] &\" don't intersect in scrap \" & current_scrap &\n" " \" (file \" & current_src & \")]\");\n" " area_border_errors := area_border_errors + 1;\n" " fi\n" " i_ := i;\n" " endfor\n" " for i=1 upto k_: subpath (ta_[i],tb_[i]) of pp_[i] .. endfor\n" " cycle\n" "enddef;\n" "\n" "vardef unitvector primary z = \n" " if (z<>(0,0)):\n" " z/abs z \n" " else:\n" " hide(thwarning(\"strange path\"))\n" " (0,epsilon)\n" " fi\n" "enddef;\n" "\n" "def thwarning (expr m) = \n" " message(\"[Warning: \" & m & \" in scrap \" & current_scrap & \"]\");\n" "enddef;\n" "\n" "def check_area_borders = \n" " if area_border_errors > 0:\n" " fi;\n" "enddef;\n" "\n" "%%%%%%%%%%%% Map symbols management %%%%%%%%%%%%%%%%%%%\n" "\n" "def mapsymbol (expr name, set, warning) = \n" " string s, stype, lname, ID;\n" " stype = substring (0,1) of name;\n" " lname = name & \"_\" & set;\n" " ID := \"ID_\" & lname;\n" " if (known scantokens ID):\n" " if stype = \"a\":\n" " s = \"def \" & name & \" = scantokens(\" & ditto & lname & ditto & \") enddef;\";\n" " else:\n" " s = \"let \" & name & \" = \" & lname & \";\";\n" " fi;\n" " scantokens s;\n" " elseif warning: \n" " message(\"[Warning: undefined symbol `\" & lname & \"']\");\n" " fi;\n" "enddef;\n" "\n" "%def hidesymbol (expr name) =\n" "% string s, stype;\n" "% stype = substring (0,1) of name;\n" "% if stype = \"a\":\n" "% s = \"def \" & name & \" = scantokens(\" & ditto & \"a_empty\" & ditto & \") enddef;\";\n" "% else:\n" "% s = \"vardef \" & name & \"@# (text t) = enddef;\";\n" "% fi;\n" "% scantokens s;\n" "% write name to \"missed.dat\";\n" "%enddef;\n" "\n" "def initsymbol (expr name) =\n" " s := \"ID_\" & name & \" = 1\";\n" " scantokens s;\n" "enddef;\n" "\n" "%%%\n" "\n" "% comment out groups in order to use 'save ATTR_*' appropriately\n" "\n" "def beginfig(expr c) =\n" "% begingroup\n" " charcode:=c;\n" " clearxy; clearit; clearpen;\n" " pickup defaultpen;\n" " drawoptions();\n" " scantokens extra_beginfig;\n" " \n" " save smartll, smartur; \n" " pair smartll[], smartur[]; \n" " smart_count := 0;\n" "enddef;\n" "\n" "def endfig =\n" " scantokens extra_endfig;\n" " shipit;\n" "% endgroup\n" "enddef;\n" "\n" "\n" "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n" "% P. Bolek's MPATTERN package adapted and simplified for Therion\n" "% (with the same user interface except of patterncolor)\n" "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n" "\n" "string Pname_, PXYsteps_;\n" "string Pmatrix_;\n" "\n" "numeric Pnum_; Pnum_=0;\n" "\n" "def PmakeBB_=\n" " PBBox_ := \"[\" & decimal Plft_ & \" \" & decimal Plow_ & \" \"\n" " & decimal Prt_ & \" \" & decimal Pup_ & \"]\";\n" "enddef;\n" "\n" "def Psteps_=\n" " PXYsteps_ := decimal\n" " if unknown PXStep_: (Prt_-Plft_) else: PXStep_ fi \n" " & \":\" & decimal\n" " if unknown PYStep_: (Pup_-Plow_) else: PYStep_ fi;\n" "enddef;\n" " \n" "vardef Pfindbounds_=\n" " Plow_ = ypart (llcorner currentpicture);\n" " Plft_ = xpart (llcorner currentpicture);\n" " Pup_ = ypart (urcorner currentpicture);\n" " Prt_ = xpart (urcorner currentpicture);\n" " PmakeBB_;\n" "enddef;\n" "\n" "def PmakePattern_(expr name)=\n" " write decimal (Pnum_*epsilon) & \":\"\n" " & jobname & \".\" & decimal charcode & \":\"\n" " & PBBox_ & \":\"\n" " & PXYsteps_ & \":\"\n" " & Pmatrix_ \n" " to \"patterns.dat\"\n" "enddef;\n" "\n" "% User interface macros\n" "\n" "vardef patternbbox(expr a)(text b)=\n" " save Pi_, Pz_;\n" " numeric Pi_, Pz_[];\n" " if pair a:\n" " Plft_:=min(xpart(a),xpart(b)); Plow_:=min(ypart(a),ypart(b));\n" " Prt_:=max(xpart(a),xpart(b)); Pup_:=max(ypart(a),ypart(b));\n" " else:\n" " Pi_=1;\n" " for t=b:\n" "\t Pz_[Pi_]=t;\n" "\t Pi_:=Pi_+1;\n" " endfor;\n" " Plft_:=min(a,Pz_2); Plow_:=min(Pz_1,Pz_3);\n" " Prt_:=max(a,Pz_2); Pup_:=max(Pz_1,Pz_3);\n" " fi;\n" " PmakeBB_;\n" "enddef;\n" "\n" "def beginpattern(suffix name)=\n" " numeric PXStep_, PYStep_;\n" " numeric Plow_, Plft_, Pup_, Prt_;\n" " string PBBox_;\n" " Pmatrix_:=\"[1 0 0 1 0 0]\";\n" " Pname_:=str name;\n" " Pnum_:=Pnum_+1;\n" " beginfig(Pnum_+4000);\n" "enddef;\n" "\n" "def endpattern=\n" " if unknown PBBox_:\n" " Pfindbounds_;\n" " fi;\n" " endfig;\n" " Psteps_;\n" " PmakePattern_(Pname_);\n" " scantokens(Pname_ & \"=Pnum_;\");\n" "enddef;\n" "\n" "picture pattpict;\n" "color patterncolor_;\n" "patterncolor_ := black;\n" "\n" "primarydef p withpattern s=\n" " if known s:\n" "\n" " hide(pattpict := image(draw (0,0)--(10,10));\n" " for i within pattpict:\n" " patterncolor_ := (redpart i, greenpart i, bluepart i);\n" " endfor;)\n" "\n" " p withcolor (epsilon, 10*epsilon, s*epsilon)\n" " if known mpversion:\n" " if scantokens(mpversion)>=1.000: \n" " withprescript(decimal redpart patterncolor_ & \" \" &\n" " decimal greenpart patterncolor_ & \" \" &\n" " decimal bluepart patterncolor_ & \" THsetpatterncolor\")\n" " fi;\n" " fi;\n" " else:\n" " p withcolor (1,0,0);\n" " message(\"Warning: undefined pattern ignored\");\n" " fi; \n" "enddef;\n" " \n" "def patterntransform expr t=\n" " Pmatrix_ := \"[\" & decimal xxpart t\n" " & \" \" & decimal yxpart t\n" " & \" \" & decimal xypart t\n" " & \" \" & decimal yypart t\n" " & \" \" & decimal xpart t\n" " & \" \" & decimal ypart t & \"]\";\n" "enddef;\n" "\n" "def patternxstep expr t=\n" " PXStep_ = t;\n" "enddef;\n" "\n" "def patternystep expr t=\n" " PYStep_ = t;\n" "enddef;\n" "\n" "def patternstep text t=\n" " if pair t:\n" " PXStep_ = xpart t;\n" " PYStep_ = ypart t;\n" " else:\n" " (PXStep_,PYStep_)=t;\n" " fi;\n" "enddef;\n" "\n" "def patterncolor expr t=\n" " message(\"Warning: patterncolor not supported in Therion\");\n" "enddef;\n" "\n" "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n" "% end of pattern macros\n" "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n" "\n" "% transparent rgb colors\n" "\n" "numeric RGBnum; RGBnum=0;\n" "string RGBname;\n" "\n" "def def_transparent_rgb (suffix name)(expr r, g, b) =\n" " RGBnum := RGBnum+1;\n" " RGBname := str name;\n" " write decimal (RGBnum*epsilon) & \":\"\n" " & decimal r & \" \"\n" " & decimal g & \" \"\n" " & decimal b \n" " to \"rgbcolors.dat\";\n" " scantokens(RGBname & \":=RGBnum;\");\n" "enddef;\n" "\n" "primarydef p withtransparentcolor s=\n" " p withcolor (epsilon, 12*epsilon, s*epsilon);\n" "enddef;\n" "\n" "def_transparent_rgb(tr_white, 1, 1, 1);\n" "def_transparent_rgb(tr_blue, 0, 0, 1);\n" "def_transparent_rgb(tr_black, 0, 0, 0);\n" "def_transparent_rgb(tr_bg, \n" " redpart background, greenpart background, bluepart background);\n" "\n" "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n" "% some useful macros from H. Hagen's MetaFun package\n" "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n" "\n" "vardef paired (expr d) =\n" " if pair d : d else : (d,d) fi\n" "enddef ;\n" "\n" "primarydef p randomshifted s = \n" " begingroup ; save ss ; pair ss ; ss := paired(s) ; \n" " p shifted (-.5xpart ss + uniformdeviate xpart ss,\n" " -.5ypart ss + uniformdeviate ypart ss) \n" " endgroup \n" "enddef ; \n" "\n" "primarydef p randomized s =\n" " (if path p : \n" " for i=0 upto length(p)-1 :\n" " ((point i of p) randomshifted s) .. controls \n" " ((postcontrol i of p) randomshifted s) and \n" " ((precontrol (i+1) of p) randomshifted s) .. \n" " endfor \n" " if cycle p : \n" " cycle \n" " else :\n" " ((point length(p) of p) randomshifted s) \n" " fi\n" " elseif pair p :\n" " p randomshifted s \n" " elseif color p :\n" " if color s : \n" " (uniformdeviate redpart s * redpart p,\n" " uniformdeviate greenpart s * greenpart p,\n" " uniformdeviate bluepart s * bluepart p) \n" " elseif pair s : \n" " ((xpart s + uniformdeviate (ypart s - xpart s)) * p) \n" " else : \n" " (uniformdeviate s * p) \n" " fi \n" " else :\n" " p + uniformdeviate s \n" " fi) \n" "enddef ; \n" "\n" "primarydef p llmoved d =\n" " ((llcorner p) shifted (-xpart paired(d),-ypart paired(d)))\n" "enddef ;\n" "\n" "primarydef p lrmoved d =\n" " ((lrcorner p) shifted (+xpart paired(d),-ypart paired(d)))\n" "enddef ;\n" "\n" "primarydef p urmoved d =\n" " ((urcorner p) shifted (+xpart paired(d),+ypart paired(d)))\n" "enddef ;\n" "\n" "primarydef p ulmoved d =\n" " ((ulcorner p) shifted (-xpart paired(d),+ypart paired(d)))\n" "enddef ;\n" "\n" "primarydef p smoothed d =\n" " (p llmoved (-xpart paired(d),0) -- p lrmoved (-xpart paired(d),0) {right} .. \n" " p lrmoved (0,-ypart paired(d)) -- p urmoved (0,-ypart paired(d)) {up} .. \n" " p urmoved (-xpart paired(d),0) -- p ulmoved (-xpart paired(d),0) {left} ..\n" " p ulmoved (0,-ypart paired(d)) -- p llmoved (0,-ypart paired(d)) {down} .. cycle) \n" "enddef ;\n" "\n" "vardef punked primary p = \n" " (point 0 of p for i=1 upto length(p)-1 : -- point i of p endfor \n" " if cycle p : -- cycle else : -- point length(p) of p fi) \n" "enddef ; \n" "\n" "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n" "% end of MetaFun macros\n" "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n" "\n" "% we input map symbol definitions\n" "\n" "\n\n\n%%%%% INPUT thPoint %%%%%\n\n\n" "%% therion source code\n" "%%\n" "%% This file defines macros for point map symbols\n" "%%\n" "%% $Date: 2003/07/01 09:06:44 $\n" "%% $RCSfile: thPoint.mp,v $\n" "%% $Revision: 1.8 $\n" "%%\n" "%% Copyright (C) 2000-2004 Martin Budaj\n" "%%\n" "%% -------------------------------------------------------------------- \n" "%% This program is free software; you can redistribute it and/or modify\n" "%% it under the terms of the GNU General Public License as published by\n" "%% the Free Software Foundation; either version 2 of the License, or\n" "%% any later version.\n" "%%\n" "%% This program is distributed in the hope that it will be useful,\n" "%% but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" "%% GNU General Public License for more details.\n" "%% \n" "%% You should have received a copy of the GNU General Public License\n" "%% along with this program; if not, write to the Free Software\n" "%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" "%% --------------------------------------------------------------------\n" "\n" "pair U;\n" "\n" "def p_stalactite_UIS(expr pos,theta,sc,al) =\n" " U:=(.15u, .4u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (0,-.4u) -- (0,.15u) -- (-.15u,.4u);\n" " thdraw (0,.15u) -- (.15u,.4u);\n" "enddef;\n" "\n" "def p_stalagmite_UIS(expr pos,theta,sc,al) =\n" " U:=(.15u,.4u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (0,.4u) -- (0,-.15u) -- (-.15u,-.4u);\n" " thdraw (0,-.15u) -- (.15u,-.4u);\n" "enddef;\n" "\n" "def p_pillar_UIS(expr pos,theta,sc,al) =\n" " U:=(.15u,.4u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (0,.15u)--(0,-.15u);\n" " thdraw (-.15u,-.4u)--(0,-.15u)--(.15u,-.4u);\n" " thdraw (-.15u,.4u)--(0,.15u)--(.15u,.4u);\n" "enddef;\n" "\n" "def p_curtain_UIS(expr pos,theta,sc,al) =\n" " U:=(.15u,.4u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (-.15u,.4u)--(0,.15u)--(.15u,.4u);\n" " thdraw (0,.15u)--(0,0){dir 180}..(-.12u,-.11u)..{dir 0}(0,-.22u)--(0,-.4u);\n" "enddef;\n" "\n" "def p_helictite_UIS(expr pos,theta,sc,al) =\n" " U:=(.2u,.4u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (0,.4u)--(0,-.4u);\n" " p := (-.2u,.4u)---(-.2u,.1u){down}..{dir -10}(-.1u,0.02u)---origin;\n" " thdraw p;\n" " thdraw p reflectedabout (origin,(0,u)) reflectedabout (origin,(u,0));\n" "enddef;\n" "\n" "def p_sodastraw_UIS(expr pos,theta,sc,al) =\n" " U:=(.5u,.25u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (-.5u,.2u)--(.5u,.2u);\n" " pickup PenD;\n" " thdraw (-.4u,.2u)--(-.4u,0);\n" " thdraw (-.12u,.2u)--(-.12u,-.25u);\n" " thdraw (.02u,.2u)--(.02u,-.1u);\n" " thdraw (.23u,.2u)--(.23u,-.19u);\n" " thdraw (.35u,.2u)--(.35u,-.15u);\n" "enddef;\n" "\n" "def p_crystal_UIS (expr pos,theta,sc,al)=\n" " U:=(.35u,.35u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " p := ((-.35*u,0)--(.35*u,0));\n" " thdraw p;\n" " thdraw p rotated (60);\n" " thdraw p rotated (120);\n" "enddef;\n" "\n" "def p_flowstone_UIS (expr pos,theta,sc,al)=\n" " U:=(.45u,.1u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " p := ((-.15*u,0)--(.15*u,0));\n" " thdraw p shifted (.3u,-.1u);\n" " thdraw p shifted (-.3u,-.1u);\n" " thdraw p shifted (0,.1u);\n" "enddef;\n" "\n" "def p_moonmilk_UIS (expr pos,theta,sc,al)=\n" " U:=(.5u,.2u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (-.5u,-.2u){up}..{dir -60}(-.18u,-.105u){dir 80}..\n" " {dir-80}(.18u,-.105u){dir 60}..{down}(.5u,-.2u);\n" "enddef;\n" "\n" "def p_wallcalcite_UIS (expr pos,theta,sc,al)=\n" " U:=(.2u,.2u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (-.2u,-.2u)--(0,.1u)--(.2u,-.2u);\n" "enddef;\n" "\n" "def p_popcorn_UIS (expr pos,theta,sc,al)=\n" " U:=(.5u,.2u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (-.5u,-.2u)--(.5u,-.2u);\n" " pickup PenD;\n" " thdraw (-.3u,-.2u)--(-.3u,.1u);\n" " thdraw (0,-.2u)--(0,.1u);\n" " thdraw (.3u,-.2u)--(.3u,.1u);\n" " thfill fullcircle scaled .2u shifted (-.3u,.1u);\n" " thfill fullcircle scaled .2u shifted (0,.1u);\n" " thfill fullcircle scaled .2u shifted (.3u,.1u);\n" "enddef;\n" "\n" "def p_disk_UIS (expr pos,theta,sc,al)=\n" " U:=(.2u,.3u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (-.2u,-.3u)--origin--(.2u,-.3u);\n" " p:=fullcircle scaled .3u shifted (0,.15u);\n" " thclean p;\n" " thdraw p;\n" "enddef;\n" "\n" "def p_gypsum_NSS (expr pos,theta,sc,al)=\n" " U:=(.25u,.25u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (-.25u,0)--(.25u,0);\n" " thdraw (0,-.25u)--(0,.25u);\n" "enddef;\n" "\n" "def p_aragonite_NSS (expr pos,theta,sc,al)=\n" " U:=(.3u,.4u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (0,-.4u)--(0,.3u);\n" " thdraw (0,-.1u){dir 40}..{dir 5}(.3u,.08u);\n" " thdraw (0,-.1u){dir 140}..{dir 175}(-.3u,.08u);\n" " thdraw (0,.2u){dir 30}..{dir 5}(.25u,.3u);\n" " thdraw (0,.2u){dir 150}..{dir 175}(-.25u,.3u);\n" "enddef;\n" "\n" "\n" "def p_cavepearl_SKBB (expr pos,theta,sc,al)=\n" " U:=(.25u,.25u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " p:=fullcircle scaled .25u shifted (0,.16u);\n" " thdraw p;\n" " thdraw p rotated 120;\n" " thdraw p rotated 240;\n" "enddef;\n" "\n" "def p_gypsumflower_NSS (expr pos,theta,sc,al)=\n" " U:=(.4u,.3u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" "% thdraw (.2u,0){left}..(0,.2u)..(.25u,.35u)..(.5u,0)..\n" "% (.1u,-.3u)..{dir 125}(-.5u,.2u);\n" " thdraw (.18u,0){left}..(0,.15u)..(.2u,.3u)..(.4u,0)..\n" " (.15u,-.28u)..{dir 120}(-.4u,.15u);\n" "enddef;\n" "\n" "def p_rimstonepool_ASF (expr pos,theta,sc,al)=\n" " U:=(.4u,.2u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " p := (-.4u,.2u){dir -70}..{dir 70}(.4u,.2u);\n" " thfill buildcycle(p,((.5u,.1u)--(-.5u,.1u)));\n" " thdraw p;\n" "enddef;\n" "\n" "def p_rimstonedam_ASF (expr pos,theta,sc,al)=\n" " U:=(.4u,.2u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (-.4u,.2u){dir -70}..{dir 70}(.4u,.2u);\n" "enddef;\n" "\n" "def p_anastomosis_UIS (expr pos,theta,sc,al)=\n" " U:=(.4u,.3u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " p:=(-.4u,-.2u)--(-.3u,-.3u)--(0,.3u)--(.1u,.2u);\n" " thdraw p;\n" " thdraw p shifted (.3u,0);\n" "enddef;\n" "\n" "def p_karren_UIS (expr pos,theta,sc,al)=\n" " U:=(.5u,.4u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (-.5u,-.3u){dir -85}..{dir 85}(-.32u,-.3u)..(-.28u,.3u){dir 85}..\n" " {dir -85}(-.12u,.3u)..(-.08u,-.3u){dir-85}..{dir 85}(.08u,-.3u)..\n" " {dir85}(.12u,.3u)..(.28u,.3u){dir -85}..(.32u,-.3u){dir -85}..\n" " {dir 85}(.5u,-.3u);\n" "enddef;\n" "\n" "def p_scallop_UIS (expr pos,theta,sc,al)=\n" " U:=(.2u,.4u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (0,-.4u){dir 125}..{dir 105}(-.2u,.1u){up}..\n" " {down}(.2u,.1u){dir -105}...{dir -125}(0,-.4u);\n" "enddef;\n" "\n" "def p_flute_UIS (expr pos,theta,sc,al)=\n" " U:=(.5u,.2u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (-.5u,.2u)--(.5u,.2u);\n" " thdraw (-.3u,.2u){dir -70}..{dir 70}(.3u,.2u);\n" "enddef;\n" "\n" "def p_raft_NSS (expr pos,theta,sc,al)=\n" " U:=(.5u,.2u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (-.5u,.2u){dir -80}..(-.3u,-.2u)..origin..(.3u,.2u)..\n" " {dir -80}(.5u,-.2u);\n" "enddef;\n" "\n" "def p_raftcone_NSS (expr pos,theta,sc,al)=\n" " U:=(.3u,.4u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (-.3u,-.4u)--(0,.4u)--(.3u,-.4u);\n" "enddef;\n" "\n" "def p_spring_SKBB (expr pos,theta,sc,al)=\n" " U:=(.3u,.2u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (-.3u,.2u){down}..(0,-.2u)..{up}(.3u,.2u);\n" "enddef;\n" "\n" "def p_sink_SKBB (expr pos,theta,sc,al)=\n" " U:=(.3u,.2u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (-.3u,-.2u){up}..(0,.2u)..{down}(.3u,-.2u);\n" "enddef;\n" "\n" "def p_narrowend_UIS (expr pos,theta,sc,al)=\n" " U:=(.1u,.4u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (-.1u,-.4u)--(-.1u,.4u);\n" " thdraw (.1u,-.4u)--(.1u,.4u);\n" "enddef;\n" "\n" "def p_lowend_UIS (expr pos,theta,sc,al)=\n" " U:=(.4u,.1u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (-.4u,-.1u)--(.4u,-.1u);\n" " thdraw (-.4u,.1u)--(.4u,.1u);\n" "enddef;\n" "\n" "def p_lowend_NSS (expr pos,theta,sc,al)=\n" " U:=(.4u,0);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (-.4u,0)--(.4u,0);\n" "enddef;\n" "\n" "def p_flowstonechoke_NSS (expr pos,theta,sc,al)=\n" " U:=(.4u,.3u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " p:=(-.4u,-.4u){right}..{dir120}(-.2u,-.2u){dir -20}..{up}(0,0);\n" " thdraw p;\n" " thdraw p shifted (0,.2u);\n" " thdraw p reflectedabout (origin,down);\n" " thdraw p reflectedabout (origin,down) shifted (0,.2u);\n" "enddef;\n" "\n" "def p_breakdownchoke_NSS (expr pos,theta,sc,al)=\n" " U:=(.5u,.2u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (-.5u,-.1u)--(-.15u,.05u)--(-.48u,.2u)--cycle;\n" " thdraw (-.2u,-.2u)--(.15u,-.18u)--(-.08u,.14u)--cycle;\n" " thdraw (.1u,0)--(.4u,-.1u)--(.5u,.2u)--(.1u,.2u)--cycle;\n" "enddef;\n" "\n" "def p_bedrock_ASF (expr pos,theta,sc,al)=\n" " U:=(.5u,.2u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (-.5u,0)--(.5u,0);\n" " thdraw (-.3u,0)--(-.3u,.2u);\n" " thdraw (.3u,0)--(.3u,-.2u);\n" "enddef;\n" "\n" "def p_sand_UIS (expr pos,theta,sc,al)=\n" " U:=(.2u,.2u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenB;\n" " thdraw (0,.2u);\n" " thdraw (0,.2u) rotated 120;\n" " thdraw (0,.2u) rotated 240;\n" "enddef;\n" "\n" "def p_clay_SKBB (expr pos,theta,sc,al) =\n" " U:=(.3u,.3u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (-.3u,0){up}..origin{down}..{up}(0.3u,0);\n" "enddef;\n" "\n" "def p_pebbles_UIS (expr pos,theta,sc,al)=\n" " U:=(.45u,.35u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " p:=superellipse((.2u,0),(0,.1u),(-.2u,0),(0,.-.1u),.75);\n" " thdraw p rotated 20 shifted (0,.25u);\n" " thdraw p rotated -37 shifted (.25u,-.25u);\n" " thdraw p rotated -62 shifted (-.25u,-.25u);\n" "enddef;\n" "\n" "def p_debris_UIS (expr pos,theta,sc,al)=\n" " U:=(.4u,.4u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (-.3u,-.4u)--(0,-.22u)--(-.4u,-.1u)--cycle;\n" " thdraw (.2u,-.4u)--(.4u,-.1u)--(.1u,-.1u)--cycle;\n" " thdraw (-.1u,0)--(.2u,.3u)--(-.2u,.3u)--cycle;\n" "enddef;\n" "\n" "def p_blocks_UIS (expr pos,theta,sc,al)=\n" " U:=(.5u,.5u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (-.5u,-.5u)--(.3u,-.4u)--(-.17u,.2u)--cycle;\n" " thdraw (.25u,-.25u)--(.5u,-.15u)--(.3u,.5u)--(-.1u,.5u)--cycle;\n" " thdraw (-.27u,0)--(-.1u,.3u)--(-.5u,.35u)--cycle;\n" " pickup PenD;\n" " thdraw (-.5u,-.5u)--(-.1u,-.2u)--(-.17u,.2u);\n" " thdraw (-.1u,-.2u)--(.3u,-.4u);\n" " thdraw (.25u,-.25u)--(.3u,0)--(.2u,.2u)--(-.1u,.5u);\n" " thdraw (.3u,.5u)--(.2u,.2u);\n" " thdraw (.5u,-.15u)--(.3u,0);\n" "enddef;\n" "\n" "def p_water_UIS (expr pos,theta,sc,al)=\n" " U:=(.425u,.3u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenD;\n" " p:=fullcircle xscaled (.85u) yscaled (.6u);\n" " thfill p withpattern pattern_water_UIS;\n" " thdraw p;\n" "enddef;\n" "\n" "def p_ice_UIS (expr pos,theta,sc,al)=\n" " U:=(.4u,.35u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " p := (0,.05u)--(0,.35u);\n" " thdraw p;\n" " thdraw p shifted (-.25u,-.3u);\n" " thdraw p shifted (.25u,-.3u);\n" " p := (-0.15u,.2u)--(0.15u,.2u);\n" " thdraw p;\n" " thdraw p shifted (-.25u,-.3u);\n" " thdraw p shifted (.25u,-.3u);\n" "enddef;\n" "\n" "def p_snow_SKBB (expr pos,theta,sc,al)=\n" " U:=(.35u,.35u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " p := origin--(0,.25*u);\n" " q := ((0,.35u)--(0,0.25u)--(0.1u,0.25u)) rotatedaround ((0,0.25u),45);\n" " thdraw p;\n" " thdraw p rotated (60);\n" " thdraw p rotated (120);\n" " thdraw p rotated (180);\n" " thdraw p rotated (240);\n" " thdraw p rotated (300);\n" " thdraw q;\n" " thdraw q rotated (60);\n" " thdraw q rotated (120);\n" " thdraw q rotated (180);\n" " thdraw q rotated (240);\n" " thdraw q rotated (300);\n" "enddef;\n" "\n" "\n" "def p_archeomaterial_UIS (expr pos,theta,sc,al)=\n" " U:=(.4u,.4u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " p := fullcircle scaled .8u; \n" " thdraw (-.5u,-.5u)--origin cutbefore p;\n" " thdraw (-.5u,.5u)--origin cutbefore p;\n" " thdraw origin--(.4u,0);\n" " thdraw p;\n" "enddef;\n" "\n" "def p_paleomaterial_UIS (expr pos,theta,sc,al)=\n" " U:=(.4u,.4u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " thfill (-.4u,-.2u)..(-.2u,-.08u)---(-.1u,.05u)---(0,.2u)..(-.03u,.4u)..\n" " (.2u,.3u)..(.35u,.25u)..(.2u,.2u)---origin---(-.1u,-.17u)..\n" " (-.08u,-.25u){dir -120}..(-.3u,-.23u)\n" " ..cycle;\n" "enddef;\n" "\n" "def p_guano_UIS (expr pos,theta,sc,al)=\n" " U:=(.4u,.35u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (-.4u,.2u){dir 40}..{down}(0,-.35u){up}..{dir-40}(.4u,.2u);\n" "enddef;\n" "\n" "def p_vegetabledebris_ASF (expr pos,theta,sc,al)=\n" " U:=(.38u,.3u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (-.3u,-.3u)--(0,.3u);\n" " thdraw (0,-.3u)--(.3u,.3u);\n" " thdraw (-.25u,.13u)--(.38u,.13u);\n" " thdraw (-.38u,-.13u)--(.25u,-.13u);\n" "enddef;\n" "\n" "def p_root_ASF (expr pos,theta,sc,al)=\n" " U:=(.1u,.5u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (-.1u,-.5u)--(-.1u,.5u);\n" " p:=(-.1u,-.3u)--(.1u,-.5u);\n" " thdraw p;\n" " thdraw p shifted (0,.2u);\n" " thdraw p shifted (0,.4u);\n" "enddef;\n" "\n" "def p_entrance_UIS (expr pos,theta,sc,al)=\n" " U:=(.2u,.5u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " thfill (-.2u,-.5u)--(0,.5u)--(.2u,-.5u)--cycle;\n" "enddef;\n" "\n" "def p_waterflow_paleo_UIS (expr pos,theta,sc,al)=\n" " U:=(.2u,u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (0,-u)--(0,u);\n" " thdraw halfcircle scaled .4u shifted (0,-.4u);\n" " p:=(-.15u,.6u)--(0,u)--(.15u,.6u)--cycle;\n" " thfill p;\n" " thdraw p;\n" "enddef;\n" "\n" "def p_gradient_UIS (expr pos,theta,sc,al)=\n" " U:=(.15u,u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (0,-u)--(0,u);\n" " p:=(-.15u,.6u)--(0,u)--(.15u,.6u)--cycle;\n" " thfill p;\n" " thdraw p;\n" "enddef;\n" "\n" "def p_gradient_BCRA (expr pos,theta,sc,al)=\n" " U:=(.25u,0.7u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " thfill (-.25u,-0.7u)--(0,.7u)--(.25u,-.7u)--cycle;\n" "enddef;\n" "\n" "% by Philip Schuchardt\n" "def p_gradient_NSS (expr pos,theta,sc,al) =\n" " U:=(.7u, .6u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" "\n" " thdraw (-.3u, -.5u) -- (-.7u, -.2u);\n" " thdraw (-.2u, -.4u) -- (-.4u, .3u);\n" " thdraw (0u, -.3u) -- (0u, .6u);\n" " thdraw (.3u, -.5u) -- (.7u, -.2u);\n" " thdraw (.2u, -.4u) -- (.4u, .3u);\n" "enddef;\n" "\n" "def p_waterflow_permanent_UIS (expr pos,theta,sc,al)=\n" " U:=(.15u,.5u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " p:=(0,.5u){down}..(.12u,.3u)..(-.15u,.15u)..(.13u,0)..\n" " (-.08u,-.2u)..{down}(0,-.5u);\n" " p:=p rotated 180;\n" " thdraw p;\n" " thdrawoptions();\n" " oldahlength:=ahlength; ahlength:=2.5pt*optical_zoom;\n" " thdraw arrowhead p;\n" " thfill arrowhead p;\n" " ahlength:=oldahlength;\n" "enddef;\n" "\n" "def p_waterflow_intermittent_UIS (expr pos,theta,sc,al)=\n" " thdrawoptions(dashed evenly scaled (.5 * optical_zoom));\n" " p_waterflow_permanent_UIS (pos,theta,sc,al);\n" " thdrawoptions();\n" "enddef;\n" "\n" "def p_airdraught_UIS (expr pos,theta,sc,al)=\n" " U:=(.2u,u);\n" " T:=identity aligned al rotated theta scaled 1 shifted pos;\n" " pickup PenC;\n" " thdraw (0,u)--(0,-0.8u);\n" "\tp:=(-.2u,.65u){dir 20}..{dir 90}(0,u);\n" "\tthdraw p;\n" "\tthdraw p reflectedabout (origin,(0,u));\n" "\tfor i:=1 upto round(3+2*mlog(sc)/mlog 2):\n" "\t thdraw (0,-(1-0.2i)*u)--(.2u,-(1-0.2(i-1))*u);\n" "\tendfor;\n" "enddef;\n" "\n" "def p_airdraught_winter_UIS (expr pos,theta,sc,al)=\n" " U:=(.2u,u);\n" " T:=identity aligned al rotated theta scaled 1 shifted pos;\n" " pickup PenC;\n" " thdraw (0,u)--(0,-0.8u);\n" " p:=(-.2u,.65u){dir 20}..{dir 90}(0,u);\n" " thdraw p;\n" " thdraw p reflectedabout (origin,(0,u));\n" " for i:=1 upto round(3+2*mlog(sc)/mlog 2):\n" " thdraw (0,-(1-0.2i)*u)--(.2u,-(1-0.2(i-1))*u);\n" " endfor;\n" " thclean fullcircle scaled 0.6u shifted (0,0.05u);\n" " thdraw (-0.1732u,-0.05u) -- (0.1732u,0.15u);\n" " thdraw (0.1732u,-0.05u) -- (-0.1732u,0.15u);\n" " thdraw (0,-0.15u) -- (0,0.25u);\n" "enddef;\n" "\n" "def p_airdraught_summer_UIS (expr pos,theta,sc,al)=\n" " U:=(.2u,u);\n" " T:=identity aligned al rotated theta scaled 1 shifted pos;\n" " pickup PenC;\n" " thdraw (0,u)--(0,-0.8u);\n" " p:=(-.2u,.65u){dir 20}..{dir 90}(0,u);\n" " thdraw p;\n" " thdraw p reflectedabout (origin,(0,u));\n" " for i:=1 upto round(3+2*mlog(sc)/mlog 2):\n" " thdraw (0,-(1-0.2i)*u)--(.2u,-(1-0.2(i-1))*u);\n" " endfor;\n" " thclean fullcircle scaled 0.6u shifted (0,0.05u);\n" " thdraw (-0.1732u,-0.05u) -- (0.1732u,0.15u);\n" " thdraw (0.1732u,-0.05u) -- (-0.1732u,0.15u);\n" " thdraw (0,-0.15u) -- (0,0.25u);\n" " thclean fullcircle scaled 0.3u shifted (0,0.05u);\n" " thdraw fullcircle scaled 0.2u shifted (0,0.05u);\n" "enddef;\n" "\n" "\n" "def p_station_fixed_ASF (expr pos)=\n" " T:=identity shifted pos;\n" " pickup PenD;\n" " pair z;\n" " z:=(0,.2u);\n" " thclean z -- (z rotated 120) -- (z rotated 240) -- cycle;\n" " thdraw z -- (z rotated 120) -- (z rotated 240) -- cycle;\n" " thdraw origin;\n" "enddef;\n" "\n" "def p_station_painted_SKBB (expr pos)=\n" " T:=identity shifted pos;\n" " pickup PenC;\n" " thclean fullcircle scaled 0.25u;\n" " thdraw fullcircle scaled 0.25u;\n" "enddef;\n" "\n" "def p_station_natural_ASF (expr pos)=\n" " T:=identity shifted pos;\n" " pickup PenD;\n" " thclean fullcircle scaled .3u;\n" " thdraw fullcircle scaled .3u;\n" " thdraw origin;\n" "enddef;\n" "\n" "def p_station_temporary_ASF (expr pos)=\n" " T:=identity shifted pos;\n" " pickup PenD;\n" " p:=(-.2u,0)--(.2u,0);\n" " thdraw p;\n" " thdraw p rotated 90;\n" " thclean fullcircle scaled .16u;\n" " pickup PenC;\n" " thdraw origin;\n" "enddef;\n" "\n" "let p_station_temporary_SKBB = p_station_painted_SKBB;\n" "\n" "def p_steps_SKBB (expr pos,r,s,al) = \n" " U:=(.4u, .4u);\n" " T:=identity aligned al shifted pos;\n" " thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD;\n" " pickup PenC;\n" " thdraw (-.3u,.3u)--(-.3u,.1u)--(-.1u,.1u)--(-.1u,-.1u)--\n" " (.1u,-.1u)--(.1u,-.3u)--(.3u,-.3u);\n" "enddef;\n" "\n" "def p_fixedladder_SKBB (expr pos,r,s,al) = \n" " U:=(.4u, .4u);\n" " T:=identity aligned al shifted pos;\n" " thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD;\n" " pickup PenC;\n" " thdraw (-.15u,-.4u)--(-.15u,.4u);\n" " thdraw (.15u,-.4u)--(.15u,.4u);\n" " thdraw (-.15u,0)--(.15u,0);\n" " thdraw (-.15u,.2u)--(.15u,.2u);\n" " thdraw (-.15u,-.2u)--(.15u,-.2u);\n" "enddef;\n" "\n" "def p_ropeladder_SKBB (expr pos,r,s,al) = \n" " U:=(.4u, .4u);\n" " T:=identity aligned al shifted pos;\n" " thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD;\n" " pickup PenC;\n" " thdraw (.1u,-.4u)..(.2u,-.2u)..(.1u,.2u)..(.2u,.4u);\n" " thdraw (-.2u,-.4u)..(-.1u,-.2u)..(-.2u,.2u)..(-.1u,.4u);\n" " thdraw (-.2u,.2u)--(.1u,.2u);\n" " thdraw (-.15u,0)--(.15u,0);\n" " thdraw (-.1u,-.2u)--(.2u,-.2u);\n" "enddef;\n" "\n" "def p_bridge_SKBB (expr pos,r,s,al) = \n" " U:=(.4u, .4u);\n" " T:=identity aligned al shifted pos;\n" " thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD;\n" " pickup PenC;\n" " thdraw (-.3u,.2u)--(-.2u,.1u)--(.2u,.1u)--(.3u,.2u);\n" " thdraw (-.3u,-.2u)--(-.2u,-.1u)--(.2u,-.1u)--(.3u,-.2u);\n" "enddef;\n" "\n" "def p_noequipment_SKBB (expr pos,r,s,al) = \n" " U:=(.4u, .4u);\n" " T:=identity aligned al shifted pos;\n" " thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD;\n" " thfill (0,-.1u)--(-.05u,.3u)--(.05u,.3u)--cycle;\n" " thdraw (0,-.2u) withpen PenX;\n" "enddef;\n" "\n" "def p_anchor_SKBB (expr pos,r,s,al) = \n" " U:=(.4u, .4u);\n" " T:=identity aligned al shifted pos;\n" " thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD;\n" " thdraw fullcircle scaled .2u shifted (0.2u,0) withpen PenC;\n" " begingroup;\n" " interim linecap:=butt;\n" " thdraw (-.3u,0)--(.1u,0) withpen PenA;\n" " endgroup;\n" " thdraw (.1u,-.4u)--(.1u,.4u) withpen PenD;\n" "enddef;\n" "\n" "def p_traverse_SKBB (expr pos,r,s,al) = \n" " U:=(.4u, .4u);\n" " T:=identity aligned al shifted pos;\n" " thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD;\n" " pickup PenC;\n" " thdraw (-.25u,.05u)..(0,-.08u)..(.25u,.05u);\n" " pickup pencircle scaled .18u;\n" " thdraw (-.25u,.05u);\n" " thdraw (.25u,.05u);\n" "enddef;\n" "\n" "def p_rope_SKBB (expr pos,r,s,al) = \n" " U:=(.4u, .4u);\n" " T:=identity aligned al shifted pos;\n" " thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD;\n" " pickup PenC;\n" " thdraw (-.2u,.2u)..origin..(.1u,.1u)--(.1u,-.4u);\n" " pickup pencircle scaled .18u;\n" " thdraw (-.2u,.2u);\n" " thdraw (.1u,.1u);\n" "enddef;\n" "\n" "def p_camp_SKBB (expr pos,r,s,al) = \n" " U:=(.4u, .5u);\n" " T:=identity aligned al shifted pos;\n" " pickup PenC;\n" " thdraw (-.4u,-.4u)--(0,.5u)--(.4u,-.4u)--cycle;\n" " pickup PenD;\n" " thdraw (0,-.4u)--(0,.5u);\n" "enddef;\n" "\n" "\n" "def p_dig_UIS (expr pos,r,s,al) = \n" " U:=(.4u, .5u);\n" " T:=identity aligned al shifted pos;\n" " thfill ((-.075u,-.5u){down} .. {up}(0.075u, -.5u) -- (0.075u, .15u) -- (0.3u, 0.15u) -- (0.3u, 0.5u) --\n" " (-.3u, .5u) -- (-.3u, .15u) -- (-.075u, .15u) -- cycle) rotated 45;\n" "enddef;\n" "\n" "def p_continuation_UIS(expr pos,theta,sc,al) =\n" " U:=(.15u,.3u);\n" " T:=identity aligned al shifted pos;\n" " pickup PenC;\n" " thdraw (-.1u,.2u){up}..{down}(.1u,.2u)..{down}(0,-.05u);\n" " pickup PenX;\n" " thdraw (0,-.2u);\n" "enddef;\n" "\n" "def p_station_SKBB(expr pos,mark,txt)(text flags) =\n" " T:=identity shifted pos;\n" "\n" " if mark=4: p_station_fixed(pos)\n" " elseif mark=3: p_station_natural(pos)\n" " elseif mark=2: p_station_painted(pos)\n" " elseif mark=1: p_station_temporary(pos)\n" " fi;\n" " \n" " path path_cave;\n" " path_cave = (-.3u,-.25u) -- (-.2u,-.25u){dir 135} .. (0, .25u) .. {dir 225}(.2u,-.25u) -- (.3u,-.25u);\n" " for i=flags:\n" " pickup PenX;\n" " if i=\"entrance\":\n" "% thfill fullcircle scaled 1 cm withtransparentcolor tr_blue;\n" " thdraw path_cave;\n" "% p_label.urt(txt,pos+(0.4u,0),0,0);\n" " if not numeric txt:\n" " p_smartlabel(txt,pos);\n" " fi;\n" " elseif i=\"sink\":\n" " thdraw path_cave cutbefore ((-u,0)--(u,0)) cutafter ((-u,0)--(u,0));\n" " pickup PenA;\n" " thdraw (0,-.45u) -- (0,.05u) withcolor blue;\n" " thdraw (-.15u,-.02u) -- (0,.05u) -- (.15u,-.02u) withcolor blue;\n" " elseif i=\"spring\":\n" " thdraw path_cave cutbefore ((-u,0)--(u,0)) cutafter ((-u,0)--(u,0));\n" " pickup PenA;\n" " thdraw (0,-.45u) -- (0,.05u) withcolor blue;\n" " thdraw (-.15u,-.38u) -- (0,-.45u) -- (.15u,-.38u) withcolor blue;\n" " elseif i=\"doline\":\n" " thdraw (-.5u,.05u){down}..(0,-0.6u)..{up}(.5u,.05u);\n" " elseif i=\"dig\":\n" " thdraw (-.5u,.25u) -- (-.35u,.25u)--(-.23u,-.25u)--(.23u,-.25u)--(.35u,.25u)--(.5u,.25u);\n" " elseif substring(0,11) of i = \"air-draught\":\n" " pickup PenB;\n" " thdraw ((0,.11u){dir-120} ..{dir-70}(0,0) .. {dir-120}(0,-.11u));\n" " thdraw ((0,.11u){dir-120} ..{dir-70}(0,0) .. {dir-120}(0,-.11u)) shifted (.11u,0);\n" " thdraw ((0,.11u){dir-120} ..{dir-70}(0,0) .. {dir-120}(0,-.11u)) shifted (-.11u,0);\n" " elseif i=\"continuation\":\n" " if picture(txt):\n" " picture ATTR__text;\n" " ATTR__text := txt;\n" " fi;\n" " begingroup;\n" " save T; transform T;\n" " p_continuation(pos+(0,.25u),0,1,(0,1));\n" " endgroup;\n" " if picture(txt):\n" " save ATTR__text;\n" " fi;\n" " elseif i=\"arch\":\n" " thdraw (-.5u,-.25u)--(-.5u,.25u)--(.5u,.25u)--(.5u,-.25u)..(0,.2u)..cycle;\n" " thfill (-.5u,-.25u)--(-.5u,.25u)--(.5u,.25u)--(.5u,-.25u)..(0,.2u)..cycle;\n" " elseif i=\"overhang\":\n" " thdraw (.2u,-.25u)--(-.2u,-.25u){up}..{right}(.2u,.25u);\n" " fi;\n" " endfor;\n" "% thdraw (0,0) withpen PenX withcolor red;\n" "enddef;\n" "\n" "def p_debug (expr col, pen, pos)=\n" " T:=identity shifted pos;\n" " thdraw origin withpen pencircle \n" " scaled if pen=0: 2pt \n" " else: 4pt fi \n" " withcolor if col=-2: (1,.85,0)\n" " elseif col=-1: black \n" " elseif col=0: red \n" " else: blue fi;\n" "enddef;\n" "\n" "\n" "def p_u(expr pos,theta,sc,al) =\n" " T:=identity shifted pos;\n" " thdraw origin withpen pencircle scaled 4pt withcolor red;\n" "enddef;\n" "\n" "def p_handrail_SKBB(expr pos,theta,sc,al) =\n" " tmph := 1 / Scale * 72 / 2.54; % 1 m height\n" " U:=(.1u, tmph);\n" " pickup PenC;\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " thdraw (0,0) -- (0,tmph);\n" " thdraw (0,tmph) withpen pencircle scaled .25u; \n" "enddef;\n" "\n" "def p_viaferrata_SKBB(expr pos,r,s,al) = \n" " U:=(.4u, .4u);\n" " T:=identity aligned al shifted pos;\n" " thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD;\n" " pickup PenC;\n" " thdraw (-.15u,.15u)--(-.15u,.1u)--(.15u,.1u)--(.15u,.15u);\n" " thdraw (-.15u,-.05u)--(-.15u,-.1u)--(.15u,-.1u)--(.15u,-.05u);\n" "enddef;\n" "\n" "def p_stalagmites_UIS(expr pos,theta,sc,al) =\n" " U:=(.3u, .2u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " for i=-1 upto 1:\n" " T:=identity aligned al rotated theta scaled (sc * 0.7) shifted (pos + (i * .3u, 0));\n" " thdraw (0,.4u) -- (0,-.15u) -- (-.15u,-.4u);\n" " thdraw (0,-.15u) -- (.15u,-.4u);\n" " endfor;\n" "enddef;\n" "\n" "def p_stalactites_UIS(expr pos,theta,sc,al) =\n" " U:=(.3u, .2u);\n" " pickup PenC;\n" " for i=-1 upto 1:\n" " T:=identity aligned al rotated theta scaled (sc * 0.7) shifted (pos + (i * .3u, 0));\n" " thdraw (0,-.4u) -- (0,.15u) -- (-.15u,.4u);\n" " thdraw (0,.15u) -- (.15u,.4u);\n" " endfor;\n" "enddef;\n" "\n" "def p_gradient_SKBB (expr pos,theta,sc,al)=\n" " U:=(.3u,.6u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (-.3u,-.6u)--(-.3u,.6u);\n" " thdraw (0,-.6u)--(0,-0.2u);\n" " thdraw (.3u,-.6u)--(.3u,.6u);\n" "enddef;\n" "\n" "def p_pillars_UIS(expr pos,theta,sc,al) =\n" " U:=(.3u, .2u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " for i=-1 upto 1:\n" " T:=identity aligned al rotated theta scaled (sc * 0.7) shifted (pos + (i * .3u, 0));\n" " thdraw (0,.15u)--(0,-.15u);\n" " thdraw (-.15u,-.4u)--(0,-.15u)--(.15u,-.4u);\n" " thdraw (-.15u,.4u)--(0,.15u)--(.15u,.4u);\n" " endfor;\n" "enddef;\n" "\n" "\n" "\n\n\n%%%%% ENDINPUT thPoint %%%%%\n\n\n" "\n\n\n%%%%% INPUT thLine %%%%%\n\n\n" "%% therion source code\n" "%%\n" "%% This file defines macros for line symbols\n" "%%\n" "%% $Date: 2003/07/01 09:06:44 $\n" "%% $RCSfile: thLine.mp,v $\n" "%% $Revision: 1.4 $\n" "%%\n" "%% Copyright (C) 2000 Martin Budaj\n" "%%\n" "%% -------------------------------------------------------------------- \n" "%% This program is free software; you can redistribute it and/or modify\n" "%% it under the terms of the GNU General Public License as published by\n" "%% the Free Software Foundation; either version 2 of the License, or\n" "%% any later version.\n" "%%\n" "%% This program is distributed in the hope that it will be useful,\n" "%% but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" "%% GNU General Public License for more details.\n" "%% \n" "%% You should have received a copy of the GNU General Public License\n" "%% along with this program; if not, write to the Free Software\n" "%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" "%% --------------------------------------------------------------------\n" "\n" "% some definitions\n" "\n" "% adjust step according to the length of the path; return at least two steps\n" "\n" "vardef adjust_step (expr len, s) =\n" " if s <= len/2: len / (floor(len / s))\n" " else: len/2 fi\n" "enddef;\n" "\n" "def mark_(expr p,t,l) =\n" " thdraw (point t of p) --\n" " ((point t of p) + l * unitvector(thdir(p,t) rotated 90));\n" "enddef;\n" "\n" "vardef thdir (expr p,t) = % 1 * epsilon caused problems in scales < 1:1000\n" " % n * epsilon is enough for scale 1:(n*1000)\n" " if arclength(p)=0:\n" " hide(thwarning(\"unable to determine direction on zero-length path\"))\n" " (0,1)\n" " else:\n" "% ((direction t-100*epsilon of p) + (direction t+100*epsilon of p)) / 2\n" " postcontrol (t+1000*epsilon) of p - precontrol (t-1000*epsilon) of p\n" "% direction t of p\n" " fi\n" "enddef;\n" "\n" "% walls:\n" "\n" "def l_wall_bedrock_UIS (expr P) = \n" " T:=identity;\n" " pickup PenA;\n" " thdraw P;\n" "enddef;\n" "\n" "def l_wall_sand_SKBB (expr P) = \n" " T:=identity;\n" " cas := 0;\n" " dlzka := arclength P;\n" " mojkrok:=adjust_step(dlzka, 0.1u);\n" " pickup PenB; \n" " forever:\n" " t := arctime cas of P;\n" " thdraw ((point t of P) + (uniformdeviate 1) * .4u \n" " * unitvector(thdir(P,t) rotated -90));\n" " cas := cas + mojkrok;\n" " exitif cas > dlzka + (mojkrok / 3); % for rounding errors\n" " endfor;\n" " pickup PenA; \n" " thdraw P;\n" "enddef;\n" "\n" "def l_wall_pebbles_SKBB (expr P) = \n" " T:=identity;\n" " cas := 0;\n" " dlzka := arclength P;\n" " mojkrok:=adjust_step(dlzka, .35u);\n" " pickup PenC;\n" " q:=superellipse((.2u,0),(0,.1u),(-.2u,0),(0,.-.1u),.75);\n" " forever:\n" " t := arctime (cas + mojkrok/2) of P;\n" " thdraw q randomized (u/20) rotated (angle(thdir(P,t)) + (normaldeviate*40)) shifted point t of P;\n" " cas := cas + mojkrok;\n" " exitif cas > dlzka - (2*mojkrok/3); % for rounding errors\n" " endfor;\n" "enddef;\n" "\n" "def l_wall_clay_SKBB (expr P) = \n" " T:=identity;\n" " cas := 0;\n" " dlzka := arclength P;\n" " mojkrok:=adjust_step(dlzka, .5u);\n" " pickup PenC;\n" " q := (-0.15u,0){up}..{down}origin..{up}(0.15u,0);\n" " forever:\n" " t := arctime (cas + mojkrok/2) of P;\n" " thdraw q shifted (point t of P + .25u * unitvector(thdir(P,t) rotated -90));\n" " cas := cas + mojkrok;\n" " exitif cas > dlzka - (2*mojkrok/3); % for rounding errors\n" " endfor;\n" " pickup PenA; \n" " thdraw P;\n" "enddef;\n" "\n" "def l_wall_debris_SKBB (expr P) = \n" " T:=identity;\n" " cas := 0;\n" " dlzka := arclength P;\n" " mojkrok:=adjust_step(dlzka, .4u);\n" " pickup PenC;\n" "% q := ((-.1u,-.15u)--(.2,.03u)--(-.2u,.15u)--cycle) scaled 1.5;\n" " q := ((-.2u,-.1u)--(.2u,-.1u)--(0,.2u)--cycle) scaled 1.1;\n" " forever:\n" " t := arctime (cas + mojkrok/2) of P;\n" " thdraw q randomized (u/10) rotated uniformdeviate (360) shifted point t of P;\n" " cas := cas + mojkrok;\n" " exitif cas > dlzka - (2*mojkrok/3); % for rounding errors\n" " endfor;\n" "enddef;\n" "\n" "def l_wall_blocks_SKBB (expr P) = \n" "% pickup PenD;\n" "% draw P withcolor red;\n" "\n" " T:=identity;\n" " cas := 0;\n" " dlzka := arclength P;\n" "if dlzka > 0:\n" " mojkrok:=adjust_step(dlzka, 1.5u);\n" " pickup PenA;\n" " forever:\n" " t1 := arctime (cas + mojkrok*1/10) of P;\n" " t2 := arctime (cas + mojkrok*9/10) of P;\n" " q := ((point t1 of P) + .4u * unitvector(thdir(P,t1) rotated -90)) --\n" " (subpath (t1,t2) of P) --\n" " ((point t2 of P) + .4u * unitvector(thdir(P,t2) rotated -90));\n" " thdraw q randomized (u/6);\n" " cas := cas + mojkrok;\n" " exitif cas > dlzka - (2*mojkrok/3); % for rounding errors\n" " endfor;\n" "fi;\n" "enddef;\n" "\n" "def l_wall_ice_SKBB (expr P) = \n" " T:=identity;\n" " cas := 0;\n" " dlzka := arclength P;\n" " mojkrok:=adjust_step(dlzka, .5u);\n" " pickup PenC;\n" " p := (-.1u,0)--(.1u,0);\n" " q := (0,-.1u)--(0,.1u);\n" " forever:\n" " t := arctime (cas + mojkrok/2) of P;\n" " thdraw p shifted (point t of P + .25u * unitvector(thdir(P,t) rotated -90));\n" " thdraw q shifted (point t of P + .25u * unitvector(thdir(P,t) rotated -90));\n" " cas := cas + mojkrok;\n" " exitif cas > dlzka - (2*mojkrok/3); % for rounding errors\n" " endfor;\n" " pickup PenA; \n" " thdraw P;\n" "enddef;\n" "\n" "def l_wall_underlying_UIS (expr P) = \n" " T:=identity;\n" " pickup PenA;\n" " thdraw P dashed evenly scaled optical_zoom;\n" "enddef;\n" "\n" "def l_wall_unsurveyed_SKBB (expr P) = \n" " T:=identity;\n" " pickup PenC;\n" " thdraw P;\n" "enddef;\n" "\n" "def l_wall_presumed_UIS (expr P) = \n" " T:=identity;\n" " pickup PenA;\n" " thdraw P dashed evenly scaled (2*optical_zoom);\n" "enddef;\n" "\n" "% other line symbols\n" "\n" "def l_pit_UIS (expr P) = \n" " T:=identity;\n" " cas := 0;\n" " dlzka := arclength P;\n" " mojkrok:=adjust_step(dlzka, 0.25u);\n" " pickup PenD; \n" " forever:\n" " t := arctime cas of P;\n" " mark_ (P,t,0.2u);\n" " cas := cas + mojkrok;\n" " exitif cas > dlzka + (mojkrok / 3); % for rounding errors\n" " endfor;\n" " pickup PenC; \n" " thdraw P;\n" "enddef;\n" "\n" "let l_floorstep_UIS = l_pit_UIS;\n" "\n" "def l_overhang_SKBB (expr P) =\n" " T:=identity;\n" " cas := 0;\n" " dlzka := arclength P;\n" " mojkrok:=adjust_step(dlzka, 0.3u);\n" " pickup PenC;\n" " t1:=0;\n" " forever:\n" " t := arctime (cas + mojkrok/2) of P;\n" " t2 := arctime (cas + mojkrok) of P;\n" " thfill (subpath (t1,t2) of P) -- \n" " ((point t of P) + .3u * unitvector(thdir(P,t) rotated 90)) -- \n" " cycle;\n" " cas := cas + mojkrok;\n" " exitif cas > dlzka - (2*mojkrok/3); % for rounding errors\n" " t1:=t2;\n" " endfor;\n" " thdraw P;\n" "enddef;\n" "\n" "\n" "def l_chimney_UIS (expr P) = \n" " T:=identity;\n" " pickup PenC;\n" " thdraw P dashed evenly scaled optical_zoom;\n" "enddef;\n" "\n" "def l_ceilingstep_SKBB (expr P) =\n" " T:=identity;\n" " cas := 0;\n" " dlzka := arclength P;\n" " mojkrok:=adjust_step(dlzka, 0.8u);\n" " pickup PenC;\n" " forever:\n" " t1 := arctime (cas + mojkrok*1/5) of P;\n" " t := arctime (cas + mojkrok/2) of P;\n" " t2 := arctime (cas + mojkrok*4/5) of P;\n" " thdraw (subpath (t1,t2) of P);\n" " mark_ (P,t,0.2u);\n" " cas := cas + mojkrok;\n" " exitif cas > dlzka - (2*mojkrok/3); % for rounding errors\n" " endfor;\n" "enddef;\n" "\n" "def l_ceilingmeander_SKBB (expr P) =\n" " pair Pp;\n" " pair Pd;\n" " pair Pv;\n" " T:=identity;\n" " cas := 0;\n" " dlzka := arclength P;\n" " mojkrok:=adjust_step(dlzka, 0.8u);\n" " pickup PenC;\n" " forever:\n" " t := arctime (cas + mojkrok/2) of P;\n" " Pp := (point t of P);\n" " Pd := unitvector(thdir(P,t));\n" " Pv := Pd rotated 90;\n" " thdraw (Pp + 0.1u * Pv) --\n" " (Pp + 0.2u * Pv);\n" " thdraw (Pp + 0.2u * Pv + 0.2u * Pd) --\n" " (Pp + 0.2u * Pv - 0.2u * Pd);\n" " thdraw (Pp - 0.1u * Pv) --\n" " (Pp - 0.2u * Pv);\n" " thdraw (Pp - 0.2u * Pv + 0.2u * Pd) --\n" " (Pp - 0.2u * Pv - 0.2u * Pd);\n" " cas := cas + mojkrok;\n" " exitif cas > dlzka - (2*mojkrok/3); % for rounding errors\n" " endfor;\n" "enddef;\n" "\n" "\n" "%Bruce Mutton 2012.06.16 uses general code for l_ceilingmeander_SKBB defined in therion source code by Martin Budaj 5.3.9\n" "% but ticks on outside (rock) side of lines \n" "def l_ceilingmeander_UIS (expr P) =\n" " pair Pp;\n" " pair Pd;\n" " pair Pv;\n" " T:=identity;\n" " cas := 0; % cursor to step along path\n" " dlzka := arclength P;\n" " mojkrok:=adjust_step(dlzka, 0.8u); % symbol length nudged to be multiple of path length\n" " pickup PenC;\n" " forever:\n" " t := arctime (cas + mojkrok/2) of P;\n" " Pp := (point t of P);\n" " Pd := unitvector(thdir(P,t));\n" " Pv := Pd rotated 90;\n" " thdraw (Pp + 0.2u * Pv) --\n" " (Pp + 0.3u * Pv); % add 0.1u to each moves ticks outside\n" " thdraw (Pp + 0.2u * Pv + 0.2u * Pd) --\n" " (Pp + 0.2u * Pv - 0.2u * Pd); \n" " thdraw (Pp - 0.2u * Pv) --\n" " (Pp - 0.3u * Pv); % subtract 0.1u to each moves ticks outside\n" " thdraw (Pp - 0.2u * Pv + 0.2u * Pd) --\n" " (Pp - 0.2u * Pv - 0.2u * Pd); \n" " cas := cas + mojkrok;\n" " exitif cas > dlzka - (2*mojkrok/3); % for rounding errors\n" " endfor;\n" "enddef;\n" "\n" "let l_ceilingmeander_NZSS = l_ceilingmeander_UIS;\n" "\n" "%Bruce Mutton 2012.06.16 uses general code for l_ceilingstep_SKBB defined in therion source code by Martin Budaj 5.3.9\n" "% but ticks on righthand (rock) side of line \n" "def l_ceilingstep_UIS (expr P) =\n" " T:=identity;\n" " cas := 0; % cursor to step along path\n" " dlzka := arclength P;\n" " mojkrok:=adjust_step(dlzka, 0.8u); % symbol length nudged to be multiple of path length\n" " pickup PenC;\n" " forever:\n" " t1 := arctime (cas + mojkrok*1/5) of P;\n" " t := arctime (cas + mojkrok/2) of P;\n" " t2 := arctime (cas + mojkrok*4/5) of P;\n" " thdraw (subpath (t1,t2) of P);\n" " mark_ (P,t,-0.2u); % change sign to -0.2u\n" " cas := cas + mojkrok;\n" " exitif cas > dlzka - (2*mojkrok/3); % for rounding errors\n" " endfor;\n" "enddef;\n" "\n" "let l_ceilingstep_NZSS = l_ceilingstep_UIS;\n" "\n" "%Bruce Mutton 2012.06.10 uses general code for l_pit_UIS defined in therion source code by Martin Budaj 5.3.9\n" "% dots on righthand (rock) side of line spaced 0.2u, 0.2u same as floor-step ticks\n" "def l_chimney_NZSS (expr P) = \n" "\tT:=identity;\n" "\tcas := 0; % cursor to step along path\n" "\tdlzka := arclength P;\n" "\tmojkrok:=adjust_step(dlzka, 0.25u); % symbol length nudged to be multiple of path length\n" "\tq:= (0.20u,-0.20u) -- (0.21u,-0.21u); % dot\n" "\n" "\tpickup PenC; %2nd thinnest pen\n" "\tforever:\n" "\t t := arctime cas of P;\n" "\tthdraw q rotated angle(thdir(P,t)) shifted (point t of P ); % draw dots\n" "\tcas := cas + mojkrok;\n" "\t exitif cas > dlzka + (mojkrok / 3); % for rounding errors\n" "\tendfor;\n" "\tpickup PenB; %2nd thickest pen\n" "\tthdraw P; %continuous line\n" "enddef;\n" "\n" "%Bruce Mutton 2010.06.20 uses general code and adjust_step defined in therion source code by Martin Budaj\n" "%for Therion 5.3.8\n" "def l_wall_presumed_NZSS (expr P) =\n" "\tT:=identity;\n" "\tcas := 0; % cursor to step along path\n" "\tdlzka := arclength P;\n" "\tmojkrok:=adjust_step(dlzka, 1.5u); % symbol length nudged to be multiple of path length\n" "\tq := (-0.2u,-0.4u)--(0,0)--(0.2u,-0.4u); % define v shape \n" "\tforever:\n" "\t t1 := arctime (cas + mojkrok*1/5) of P;\n" "\t t := arctime (cas + mojkrok/2) of P;\n" "\t t2 := arctime (cas + mojkrok*4/5) of P;\n" "\t\tpickup PenA; % thick\n" "\tthdraw (subpath (t1,t2) of P); % dash\n" "\t pickup PenC; % thin\n" "\t thdraw q rotated angle(thdir(P,t)) shifted (point t of P ); % v shape\n" "\n" "\t cas := cas + mojkrok;\n" "\t exitif cas > dlzka - (2*mojkrok/3); % for rounding errors\n" "\tendfor;\n" "enddef;\n" "\n" "def l_floormeander_SKBB (expr P) =\n" " pair Pp;\n" " pair Pd;\n" " pair Pv;\n" " pair PPp;\n" " pair PPd;\n" " pair PPv;\n" "\n" " T:=identity;\n" " cas := 0;\n" " dlzka := arclength P;\n" " mojkrok:=adjust_step(dlzka, 0.25u);\n" " pickup PenC;\n" " forever:\n" " t := arctime cas of P;\n" " Pp := (point t of P);\n" " Pd := unitvector(thdir(P,t));\n" " Pv := Pd rotated 90;\n" " thdraw (Pp + 0.1u * Pv) --\n" " (Pp + 0.2u * Pv);\n" " thdraw (Pp - 0.1u * Pv) --\n" " (Pp - 0.2u * Pv);\n" " if cas > 0:\n" " thdraw (PPp + 0.2u * PPv) --\n" " (Pp + 0.2u * Pv);\n" " thdraw (PPp - 0.2u * PPv) --\n" " (Pp - 0.2u * Pv);\n" " fi;\n" " PPp := Pp;\n" " PPd := Pd;\n" " PPv := Pv;\n" " cas := cas + mojkrok;\n" " exitif cas > dlzka + (mojkrok / 3); % for rounding errors\n" " endfor;\n" "enddef; \n" "\n" "boolean alw_perpendicular;\n" "\n" "def l_slope_SKBB (expr P,S)(text Q) = \n" "%show Q;\n" " T:=identity;\n" " numeric dirs[];\n" " numeric lengths[];\n" " for i=Q:\n" " dirs[redpart i]:=greenpart i;\n" " lengths[redpart i]:=bluepart i;\n" " endfor; \n" "\n" "\n" " li:=length(P); % last\n" "\n" " alw_perpendicular:=true;\n" "\n" " for i=0 upto li:\n" " if unknown dirs[i]: dirs[i]:=-1; \n" " else: \n" " if dirs[i]>-1:\n" " dirs[i]:=((90-dirs[i]) - angle(thdir(P,i))) mod 360; \n" " alw_perpendicular:=false;\n" " fi;\n" " fi;\n" " if unknown lengths[i]: lengths[i]:=-1; fi;\n" " endfor;\n" "\n" "%for i=0 upto li: show dirs[i]; endfor;\n" "\n" " ni:=0; % next\n" " pi:=0; % previous\n" "\n" " for i=0 upto li:\n" " d:=dirs[i];\n" " if d=-1:\n" " if (i=0) or (i=li):\n" " dirs[i] := angle(thdir(P,i) rotated 90) mod 360;\n" "\tpi:=i;\n" " else:\n" " if ni<=i:\n" "\t for j=i upto li:\n" " ni:=j;\n" "\t exitif dirs[j]>-1;\n" "\t endfor;\n" "\tfi;\n" "\tw:=arclength(subpath(pi,i) of P) / \n" "\t arclength(subpath(pi,ni) of P);\n" "\tdirs[i]:=w[dirs[pi],dirs[ni]];\n" "% if (dirs[i]-angle(thdir(P,i))) mod 360>180:\n" "% dirs[i]:=w[dirs[ni],dirs[pi]];\n" "%\t message(\"*******\");\n" "% fi;\n" " fi;\n" " else:\n" " pi:=i;\n" " fi;\n" " endfor;\n" "\n" "%for i=0 upto li: show dirs[i]; endfor;\n" "\n" " ni:=0; % next\n" " pi:=0; % previous\n" "\n" " for i=0 upto li:\n" " l:=lengths[i];\n" " if l=-1:\n" " if (i=0) or (i=li):\n" " lengths[i] := 1cm; % should never happen!\n" "\tthwarning(\"slope width at the end point not specified\");\n" "\tpi:=i;\n" " else:\n" " if ni<=i:\n" "\t for j=i+1 upto li:\n" " ni:=j;\n" "\t exitif lengths[j]>-1;\n" "\t endfor;\n" "\tfi;\n" "\tw:=arclength(subpath(pi,i) of P) / \n" "\t arclength(subpath(pi,ni) of P);\n" "\tlengths[i]:=w[lengths[pi],lengths[ni]];\n" "\tpi:=i;\n" " fi;\n" " else:\n" " pi:=i;\n" " fi;\n" " endfor;\n" "\n" "% for i=0 upto li: show lengths[i]; endfor;\n" "\n" " T:=identity;\n" " boolean par;\n" " offset:=0;\n" " dlzka := (arclength P);\n" " if dlzka>3u: \n" " offset := 0.3u;\n" " elseif dlzka>u:\n" " offset := 0.1u;\n" " fi;\n" " dlzka:=dlzka-2offset;\n" " cas := offset;\n" " mojkrok:=adjust_step(dlzka,1.4u) / 2;\n" " pickup PenD;\n" " par := false; \n" " forever:\n" " t := arctime cas of P;\n" " if t mod 1>0: % not a key point\n" " w := (arclength(subpath(floor t,t) of P) / \n" " arclength(subpath(floor t,ceiling t) of P));\n" " if alw_perpendicular:\n" " a := 90;\n" " else:\n" " a := w[dirs[floor t],dirs[ceiling t]];\n" " fi;\n" " l := w[lengths[floor t],lengths[ceiling t]];\n" " else:\n" " if alw_perpendicular:\n" " a := 90;\n" " else:\n" " a:= dirs[t];\n" " fi; \n" " l:=lengths[t];\n" " fi;\n" " \n" " a := a + angle(thdir(P,t));\n" " \n" " thdraw (point t of P) -- \n" " ((point t of P) + if par: 0.333 * fi l * unitvector(dir(a)));\n" " cas := cas + mojkrok;\n" " par := not par;\n" " exitif cas > dlzka + offset + 0.1mm; % for rounding errors\n" " endfor;\n" " if S = 1: pickup PenC; draw P fi;\n" "%pickup pencircle scaled 3pt;\n" "%for i=0 upto li: draw point i of P; endfor;\n" "enddef;\n" "\n" "\n" "def l_slope_BCRA (expr P,S)(text Q) = \n" "%show Q;\n" " T:=identity;\n" " numeric dirs[];\n" " numeric lengths[];\n" " for i=Q:\n" " dirs[redpart i]:=greenpart i;\n" " lengths[redpart i]:=bluepart i;\n" " endfor; \n" "\n" "\n" " li:=length(P); % last\n" "\n" " alw_perpendicular:=true;\n" "\n" " for i=0 upto li:\n" " if unknown dirs[i]: dirs[i]:=-1; \n" " else: \n" " if dirs[i]>-1:\n" " dirs[i]:=((90-dirs[i]) - angle(thdir(P,i))) mod 360; \n" " alw_perpendicular:=false;\n" " fi;\n" " fi;\n" " if unknown lengths[i]: lengths[i]:=-1; fi;\n" " endfor;\n" "\n" "%for i=0 upto li: show dirs[i]; endfor;\n" "\n" " ni:=0; % next\n" " pi:=0; % previous\n" "\n" " for i=0 upto li:\n" " d:=dirs[i];\n" " if d=-1:\n" " if (i=0) or (i=li):\n" " dirs[i] := angle(thdir(P,i) rotated 90) mod 360;\n" "\tpi:=i;\n" " else:\n" " if ni<=i:\n" "\t for j=i upto li:\n" " ni:=j;\n" "\t exitif dirs[j]>-1;\n" "\t endfor;\n" "\tfi;\n" "\tw:=arclength(subpath(pi,i) of P) / \n" "\t arclength(subpath(pi,ni) of P);\n" "\tdirs[i]:=w[dirs[pi],dirs[ni]];\n" "% if (dirs[i]-angle(thdir(P,i))) mod 360>180:\n" "% dirs[i]:=w[dirs[ni],dirs[pi]];\n" "%\t message(\"*******\");\n" "% fi;\n" " fi;\n" " else:\n" " pi:=i;\n" " fi;\n" " endfor;\n" "\n" "%for i=0 upto li: show dirs[i]; endfor;\n" "\n" " ni:=0; % next\n" " pi:=0; % previous\n" "\n" " for i=0 upto li:\n" " l:=lengths[i];\n" " if l=-1:\n" " if (i=0) or (i=li):\n" " lengths[i] := 1cm; % should never happen!\n" "\tthwarning(\"slope width at the end point not specified\");\n" "\tpi:=i;\n" " else:\n" " if ni<=i:\n" "\t for j=i+1 upto li:\n" " ni:=j;\n" "\t exitif lengths[j]>-1;\n" "\t endfor;\n" "\tfi;\n" "\tw:=arclength(subpath(pi,i) of P) / \n" "\t arclength(subpath(pi,ni) of P);\n" "\tlengths[i]:=w[lengths[pi],lengths[ni]];\n" "\tpi:=i;\n" " fi;\n" " else:\n" " pi:=i;\n" " fi;\n" " endfor;\n" "\n" "% for i=0 upto li: show lengths[i]; endfor;\n" "\n" " T:=identity;\n" " boolean par;\n" " offset:=0;\n" " dlzka := (arclength P);\n" " if dlzka>3u: \n" " offset := 0.3u;\n" " elseif dlzka>u:\n" " offset := 0.1u;\n" " fi;\n" " dlzka:=dlzka-2offset;\n" " cas := offset;\n" " mojkrok:=adjust_step(dlzka,1.4u) / 2;\n" " pickup PenD;\n" " par := false; \n" " forever:\n" " t := arctime cas of P;\n" " if t mod 1>0: % not a key point\n" " w := (arclength(subpath(floor t,t) of P) / \n" " arclength(subpath(floor t,ceiling t) of P));\n" " if alw_perpendicular:\n" " a := 90;\n" " else:\n" " a := w[dirs[floor t],dirs[ceiling t]];\n" " fi;\n" " l := w[lengths[floor t],lengths[ceiling t]];\n" " else:\n" " if alw_perpendicular:\n" " a := 90;\n" " else:\n" " a:= dirs[t];\n" " fi; \n" " l:=lengths[t];\n" " fi;\n" " \n" " a := a + angle(thdir(P,t));\n" " \n" " if par:\n" " thfill (point t of P) + mojkrok/2.5 * unitvector(dir(a+90))-- \n" " ((point t of P) + l * unitvector(dir(a))) --\n" " (point t of P) + mojkrok/2.5 * unitvector(dir(a-90)) -- cycle;\n" " fi;\n" " cas := cas + mojkrok;\n" " par := not par;\n" " exitif cas > dlzka + offset + 0.1mm; % for rounding errors\n" " endfor;\n" "enddef;\n" "\n" "\n" "def l_contour_UIS(expr P)(text txt) =\n" " T:=identity;\n" " pickup PenD;\n" " thdraw P;\n" " for pnt=txt:\n" " if pnt=-2:\n" " mark_(P,arctime(arclength(P)/2) of P, 0.2u);\n" " elseif pnt>=0:\n" " mark_(P,pnt,0.2*u);\n" " fi;\n" " exitif pnt<0;\n" " endfor;\n" "enddef;\n" "\n" "def l_contour_SKBB(expr P)(text txt) =\n" " T:=identity;\n" " pickup PenD;\n" " thdraw P;\n" " for pnt=txt:\n" " if (pnt=-2) or (pnt=-1):\n" " mark_(P,arctime(arclength(P)/2) of P, 0.2u);\n" " elseif pnt>=0:\n" " mark_(P,pnt,0.2*u);\n" " fi;\n" " exitif pnt<0;\n" " endfor;\n" "enddef;\n" "\n" "def l_rockborder_UIS (expr P) = \n" " T:=identity;\n" " pickup PenC;\n" " if cycle P: thclean P fi;\n" " thdraw P;\n" "enddef;\n" "\n" "def l_rockedge_UIS (expr P) = \n" " T:=identity;\n" " pickup PenD;\n" " thdraw P;\n" "enddef;\n" "\n" "def l_border_visible_SKBB (expr Path) =\n" " T:=identity;\n" " pickup PenC;\n" " draw Path;\n" "enddef;\n" "\n" "def l_border_temporary_SKBB (expr Path) =\n" " T:=identity;\n" " pickup PenC;\n" " draw Path dashed evenly scaled optical_zoom;\n" "enddef;\n" "\n" "def l_flowstone_UIS (expr P) = \n" " T:=identity;\n" " cas := 0;\n" " dlzka := arclength P;\n" " mojkrok:=adjust_step(dlzka, .7u);\n" " if (cycle P) and (dlzka < 3.5u): % make at least 5 curls on a cyclic path\n" " mojkrok := dlzka/5;\n" " fi;\n" " pickup PenC; \n" " t1:=0;\n" " forever:\n" " t2 := arctime (cas + mojkrok) of P;\n" " thdraw (point t1 of P){dir (angle(thdir(P,t1)) + 60)} ..\n" " {dir (angle(thdir(P,t2)) - 60)}(point t2 of P);\n" " cas := cas + mojkrok;\n" " exitif cas > dlzka + (mojkrok / 3); % for rounding errors\n" " t1:=t2;\n" " endfor;\n" "enddef;\n" "\n" "\n" "def l_moonmilk_UIS (expr P) = \n" " T:=identity;\n" " cas := 0;\n" " dlzka := arclength P;\n" " mojkrok:=adjust_step(dlzka, .3u);\n" " pickup PenC; \n" " t1:=0;\n" " forever:\n" " t2 := arctime (cas + mojkrok) of P;\n" " thdraw (point t1 of P){dir (angle(thdir(P,t1)) + 80)} ..\n" " {dir (angle(thdir(P,t2)) - 80)}(point t2 of P);\n" " cas := cas + mojkrok;\n" " exitif cas > dlzka + (mojkrok / 3); % for rounding errors\n" " t1:=t2;\n" " endfor;\n" "enddef;\n" "\n" "\n" "def l_survey_surface_SKBB (expr P) =\n" " T:=identity;\n" " thdrawoptions(dashed withdots scaled (0.2 * optical_zoom) withpen PenC);\n" " thdraw P;\n" " thdrawoptions();\n" "enddef;\n" "\n" "def l_survey_cave_SKBB (expr P) =\n" " T:=identity;\n" " pickup PenC;\n" " if ATTR__scrap_centerline:\n" " thdraw P;\n" " else:\n" " PolygonLine:=.8u;\n" " pair zz[];\n" " for t = 0 upto length P - 1:\n" " zz1 := point t of P;\n" " zz2 := point t+1 of P;\n" " if length (zz2-zz1) > 2*PolygonLine:\n" " thdraw zz1 -- zz1 + PolygonLine * unitvector(zz2 - zz1);\n" " thdraw zz2 -- zz2 + PolygonLine * unitvector(zz1 - zz2);\n" " else:\n" " thdraw zz1 -- zz2;\n" " fi;\n" " endfor;\n" " fi;\n" "enddef;\n" "\n" "def l_survey_cave_UIS (expr P) =\n" " T:=identity;\n" " pair zz[];\n" " pickup PenC;\n" " for t = 0 upto length P - 1:\n" " zz1 := point t of P;\n" " zz2 := point t+1 of P;\n" " draw zz1 -- zz2;\n" " endfor;\n" "enddef;\n" "\n" "def l_waterflow_permanent_UIS (expr Path) =\n" " path ppp;\n" " T:=identity;\n" " cas := 0;\n" " dlzka := arclength Path;\n" " mojkrok:=adjust_step(dlzka, 0.5u);\n" " pickup PenD; \n" " vardef azim = 50 + 15*normaldeviate enddef;\n" " az1 := azim;\n" " sgn := 1;\n" " ppp := point 0 of Path;\n" " forever:\n" " t1 := arctime cas of Path;\n" " t2 := arctime (cas+mojkrok) of Path;\n" " if cas+1.1*mojkrok > dlzka:\n" " az2 := 0;\n" " else:\n" " az2 := azim;\n" " fi;\n" " d1 := angle(thdir(Path,t1)) + sgn * az1;\n" " d2 := angle(thdir(Path,t2)) - sgn * az2;\n" " ppp := ppp & (point t1 of Path){dir d1} .. {dir d2}(point t2 of Path);\n" " az1 := az2;\n" " sgn := -1 * sgn;\n" " cas := cas + mojkrok;\n" " exitif cas > dlzka + mojkrok/3; % for rounding errors\n" " endfor;\n" "% drawarrow ppp;\n" " thdraw ppp;\n" " thdrawoptions();\n" " oldahlength:=ahlength;\n" " ahlength:=ahlength*optical_zoom;\n" " thdraw arrowhead ppp;\n" " thfill arrowhead ppp;\n" " ahlength:=oldahlength;\n" "enddef;\n" "\n" "def l_waterflow_intermittent_SKBB (expr Path) =\n" " thdrawoptions(dashed evenly scaled optical_zoom);\n" " l_waterflow_permanent_UIS (Path);\n" " thdrawoptions();\n" "enddef;\n" "\n" "def l_waterflow_conjectural_SKBB (expr Path) =\n" " thdrawoptions(dashed withdots scaled (0.5 * optical_zoom) withpen PenB);\n" " l_waterflow_permanent_UIS (Path);\n" " thdrawoptions();\n" "enddef;\n" "\n" "def l_invisible (expr P) = \n" "enddef;\n" "\n" "def l_undefined (expr P) = \n" " T:=identity;\n" " pickup PenC;\n" " thdraw P withcolor red;\n" " thwarning(\"undefined line symbol used\");\n" "enddef;\n" "\n" "% Q = 0 -- no arrows\n" "% 1 -- end\n" "% 2 -- begin\n" "% 3 -- both\n" "\n" "def l_arrow_SKBB (expr P, Q) =\n" " T:=identity;\n" " pickup PenC;\n" " thdraw P;\n" " p := (-.1u,-.25u)--(0,0)--(.1u,-.25u);\n" " if odd Q:\n" " draw p rotated (angle(thdir(P,0))+90) shifted (point 0 of P);\n" " fi;\n" " if Q>1:\n" " draw p rotated (angle(thdir(P,length P))-90) \n" " shifted (point infinity of P);\n" " fi;\n" "enddef;\n" "\n" "def l_mapconnection_SKBB (expr P) =\n" " thdrawoptions(dashed withdots scaled (0.5 * optical_zoom) withpen PenB);\n" " l_arrow_SKBB(P,3);\n" " thdrawoptions();\n" "enddef;\n" "\n" "\n" "def l_section_SKBB (expr P)(text txt) =\n" " T:=identity;\n" " path Q; Q = punked P;\n" " pickup PenC;\n" " for t = 0 upto length P - 1:\n" " pair zz[];\n" " zz1 := point t of P;\n" " zz2 := point t+1 of P;\n" " zz3 := postcontrol t of P;\n" " zz4 := precontrol t+1 of P;\n" " if (length(zz3-1/3[zz1,zz2]) > 0.1pt) or\n" " (length(zz4-2/3[zz1,zz2]) > 0.1pt):\n" " zz5 = whatever[zz1,zz2];\n" " (zz3-zz5) = whatever * (zz1-zz2) rotated 90;\n" " draw zz1--zz5;\n" " zz6 = whatever[zz1,zz2];\n" " (zz4-zz6) = whatever * (zz1-zz2) rotated 90;\n" " draw zz2--zz6;\n" " else:\n" " draw zz1--zz2;\n" " fi;\n" " endfor;\n" " for pnt=txt:\n" " if pnt=-1:\n" " else:\n" " T:=identity rotated angle(thdir(Q,pnt)) shifted (point pnt of Q);\n" " pickup PenC;\n" " thdraw (0,0)--(0,.8u);\n" " thdraw (-.1u,.55u)--(0,.8u)--(.1u,.55u);\n" " fi;\n" " exitif pnt=-1;\n" " endfor;\n" "enddef;\n" "\n" "let l_border_invisible = l_invisible;\n" "let l_wall_invisible = l_invisible;\n" "\n" "def l_debug (expr col, pen, P) =\n" " T:=identity;\n" " pickup if pen=0: PenD else: PenB fi;\n" " thdraw P \n" " withcolor if col=-2: (1,.85,0)\n" " elseif col=-1: black \n" " elseif col=0: red \n" " else: blue fi;\n" "enddef;\n" "\n" "\n" "def l_u (expr P) =\n" " T:=identity;\n" " pickup PenA;\n" " thdraw P withcolor red;\n" "enddef;\n" "\n" "\n" "def l_gradient_UIS (expr P) =\n" " T:=identity;\n" " pickup PenC;\n" " thdraw P;\n" " p:=(-.15u,-.4u)--(0,0)--(.15u,-.4u)--cycle;\n" " thfill (p rotated (angle(thdir(P,length P))-90) \n" " shifted (point infinity of P));\n" " thdraw (p rotated (angle(thdir(P,length P))-90) \n" " shifted (point infinity of P));\n" "enddef;\n" "\n" "def l_gradient_BCRA (expr P) =\n" " T:=identity;\n" " pickup PenC;\n" " for t = 0 upto length P - 1:\n" " pair zz[];\n" " zz1 := point t of P;\n" " zz2 := point t+1 of P;\n" " zz3 := unitvector(zz2 - zz1);\n" " thfill zz1 + u/3 * zz3 + .25u * (zz3 rotated 90) --\n" " zz2 - u/3 * zz3 --\n" "\t zz1 + u/3 * zz3 + .25u * (zz3 rotated -90) -- cycle;\n" " endfor;\n" "enddef;\n" "\n" "\n" "def l_rope_SKBB (expr P,exact) =\n" " T:=identity;\n" " pickup PenC;\n" " if exact:\n" " draw P;\n" " else:\n" " d:=0.5u;\n" " for i:=0 upto (length P - 2):\n" " x1 := xpart point i of P;\n" " y1 := ypart point i of P;\n" " x2 := xpart point i+1 of P;\n" " y2 := ypart point i+1 of P;\n" " \n" " dx1:=x1; dy1:=y1; x1:=0; y1:=0; x2:=x2-dx1; y2:=y2-dy1;\n" " if y2 > y1:\n" " y3 := y1 - d;\n" " x3 := x1 + (x2-x1)*sqrt(d)/(sqrt(d)+sqrt(y2-y1+d));\n" " else:\n" " y3 := y2 - d;\n" " x3 := x1 + (x2-x1)*sqrt(y1-y2+d)/(sqrt(d)+sqrt(y1-y2+d));\n" " fi;\n" " numeric a,b,c;\n" " a*x1/10*x1 + b/10*x1 + c/10 = y1/10;\n" " a*x2/10*x2 + b/10*x2 + c/10 = y2/10;\n" " a*x3/10*x3 + b/10*x3 + c/10 = y3/10;\n" " draw (x1+dx1,y1+dy1)\n" " for t = x1 step (x2-x1)/20 until x2+10*epsilon:\n" " -- (t+dx1,a*t*t+b*t+c+dy1)\n" " endfor;\n" " endfor;\n" " pair x;\n" " x = point (length P)-1 of P + whatewer * down;\n" " x = point (length P) of P + whatever * right;\n" " draw point (length P)-1 of P -- x;\n" "% thdraw point length P of P withpen pencircle scaled 0.3u withcolor red;\n" " fi;\n" " for i:=0 upto length P if not exact: -1 fi:\n" " thdraw point i of P withpen pencircle scaled 0.3u;\n" " endfor;\n" "enddef;\n" "\n" "def l_border_presumed_SKBB (expr Path) =\n" " T:=identity;\n" " pickup PenC;\n" " draw Path dashed evenly scaled (0.25 * optical_zoom);\n" "enddef;\n" "\n" "def l_steps_SKBB (expr P) =\n" " if known ATTR_c: c := scantokens ATTR_c; else: c := 2; fi;\n" " if ATTR__elevation:\n" " if (c < 2):\n" " thwarning(\"Invalid stairs definition (c<2)\");\n" " pickup PenA;\n" " draw P withcolor red;\n" " else:\n" " path PP;\n" " if (ypart point 0 of P) < (ypart point length P of P):\n" " PP := P;\n" " else:\n" " PP := reverse P;\n" " fi;\n" " path p; \n" " for j:=0 upto ((length PP) - 1):\n" " p := (point j of PP) -- (point (j + 1) of PP);\n" " c := ceiling(abs((ypart point 0 of p) - (ypart point length p of p)) / (0.2 / Scale * 72 / 2.54)); % 20 cm height\n" " if (c < 2): c:=2 fi;\n" " pair cp;\n" " cp = point length p of p - point 0 of p;\n" " dx := (xpart cp) / c;\n" " dy := (ypart cp) / c;\n" " cp := point 0 of p;\n" " for i:= 0 upto c - 1:\n" " l_border_visible(cp -- cp + (0,dy) -- cp + (dx,dy));\n" " cp := cp + (dx, dy);\n" " endfor;\n" " %draw P;\n" " endfor;\n" " fi;\n" " else:\n" " if known ATTR_l: l := scantokens ATTR_l; else: l := (length(P)-2)/2; fi;\n" " if ((length(P) < 4) or (c < 2)) or ((odd length P) and (not known ATTR_l)):\n" " thwarning(\"Invalid stairs definition\" if c<2: &\" (c<2)\" fi);\n" " pickup PenA;\n" " draw P withcolor red;\n" " else:\n" " path p, q;\n" " p = subpath (1, 1+l) of P;\n" " q = reverse subpath (l+2, length(P)) of P;\n" " lp := arclength(p);\n" " lq := arclength(q);\n" " for i=1 upto c:\n" " l_border_visible(point(arctime ((i-1)/(c-1)*lp) of p) of p -- point(arctime ((i-1)/(c-1)*lq) of q) of q);\n" " endfor;\n" " l_border_visible(p);\n" " l_border_visible(q);\n" " drawoptions(withcolor 0.3*white);\n" " %p_label(decimal c, point 0.5 of P, 0, 6);\n" " drawoptions();\n" " fi;\n" " fi;\n" "enddef;\n" "\n" "def l_handrail_SKBB (expr P) = \n" " if ATTR__elevation:\n" " T:=identity;\n" " cas := 0;\n" " dlzka := arclength P;\n" " mojkrok:=adjust_step(dlzka, 1u);\n" " pickup PenD; \n" " pair tmppoint;\n" " tmph := 1 / Scale * 72 / 2.54; % 1 m height\n" " tmppoint:=(point 0 of P) +(0,tmph);\n" " forever:\n" " t := arctime cas of P;\n" " draw point t of P -- (point t of P)+(0,tmph) withpen PenD;\n" " if cas > 0:\n" " draw tmppoint -- (point t of P)+(0,tmph) withpen PenC;\n" " tmppoint := (point t of P)+(0,tmph);\n" " fi;\n" " cas := cas + mojkrok;\n" " exitif cas > dlzka + (mojkrok / 3); % for rounding errors\n" " endfor;\n" " else:\n" " T:=identity;\n" " cas := 0;\n" " dlzka := arclength P;\n" " mojkrok:=adjust_step(dlzka, u);\n" " pickup PenD; \n" " forever:\n" " t := arctime cas of P;\n" " thdraw point t of P withpen pencircle scaled .25u;\n" " cas := cas + mojkrok;\n" " exitif cas > dlzka + (mojkrok / 3); % for rounding errors\n" " endfor;\n" " pickup PenC; \n" " thdraw P;\n" " fi;\n" "enddef;\n" "\n" "def l_fixedladder_SKBB (expr P) = \n" " pickup PenD;\n" " draw P withcolor red;\n" "enddef;\n" "\n" "def l_ropeladder_SKBB (expr P) = \n" " pickup PenD;\n" " draw P withcolor red;\n" "enddef;\n" "\n" "def l_viaferrata_SKBB (expr P) = \n" " pickup PenD;\n" " draw P withcolor red;\n" "enddef;\n" "\n" "\n\n\n%%%%% ENDINPUT thLine %%%%%\n\n\n" "\n\n\n%%%%% INPUT thArea %%%%%\n\n\n" "%% therion source code\n" "%%\n" "%% This file defines tiling patterns\n" "%%\n" "%% $Date: 2003/07/01 09:06:44 $\n" "%% $RCSfile: thPatterns.mp,v $\n" "%% $Revision: 1.6 $\n" "%%\n" "%% Copyright (C) 2000-2004 Martin Budaj\n" "%%\n" "%% -------------------------------------------------------------------- \n" "%% This program is free software; you can redistribute it and/or modify\n" "%% it under the terms of the GNU General Public License as published by\n" "%% the Free Software Foundation; either version 2 of the License, or\n" "%% any later version.\n" "%%\n" "%% This program is distributed in the hope that it will be useful,\n" "%% but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" "%% GNU General Public License for more details.\n" "%% \n" "%% You should have received a copy of the GNU General Public License\n" "%% along with this program; if not, write to the Free Software\n" "%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" "%% --------------------------------------------------------------------\n" "\n" "if unknown a_water_UIS: else: endinput fi;\n" "\n" "% patterns\n" "\n" "beginpattern(pattern_water_UIS);\n" " draw origin--10up withpen pensquare scaled (0.02u);\n" " patternxstep(.18u);\n" " patterntransform(identity rotated 45);\n" "endpattern;\n" "\n" "beginpattern(pattern_sump_UIS);\n" " draw origin--(0,.25u) withpen pensquare scaled (0.02u);\n" " draw origin--(.25u,0) withpen pensquare scaled (0.02u);\n" " patterntransform(identity rotated 45);\n" "endpattern;\n" "\n" "beginpattern(pattern_sand_UIS);\n" " pickup PenC;\n" " draw (0.2u,.3u);\n" " draw (0.35u,.7u);\n" " draw (0.6u,.5u);\n" " draw (0.8u,.1u); \n" "endpattern;\n" "\n" "beginpattern(pattern_debris_SKBB);\n" " pickup PenC;\n" " p:=(-.15u,0)--(.15u,0);\n" " draw p rotated -40 shifted (.2u,.3u);\n" " draw p rotated 70 shifted (.9u,1.5u);\n" " draw p rotated 20 shifted (1.5u,.8u);\n" "% draw p rotated 95 shifted (.9u,.8u);\n" "endpattern;\n" "\n" "\n" "beginpattern(pattern_moonmilk_SKBB);\n" " pickup PenC;\n" " p:=(-.5u,0){down} .. {up}(-.1666u,0){down}..\n" " {up}(.1666u,0){down} .. {up}(.5u,0);\n" " draw p;\n" " draw p shifted (0.5u,0.3u);\n" " patternxstep(1.0u);\n" " patternystep(0.6u);\n" "endpattern;\n" "\n" "\n" "beginpattern(pattern_flowstone_ASF);\n" " pickup PenC;\n" " p:=(-.35u,0){dir -60} .. {dir 60}(0.35u,0);\n" " draw p;\n" " draw p shifted (0.35u,0.4u);\n" " patternxstep(u);\n" " patternystep(0.8u);\n" "endpattern;\n" "\n" "\n" "beginpattern(pattern_empty);\n" " patternbbox(0,0,10,10);\n" " patternstep(10,10);\n" "endpattern;\n" "\n" "% symbols\n" "\n" "def a_water_UIS (expr Path) =\n" " T:=identity;\n" " thclean Path;\n" " thfill Path withpattern pattern_water_UIS;\n" "enddef;\n" "\n" "def a_sump_UIS (expr Path) =\n" " T:=identity;\n" " thclean Path;\n" " thfill Path withpattern pattern_sump_UIS;\n" "enddef;\n" "\n" "\n" "def a_flowstone_ASF (expr Path) =\n" " T:=identity;\n" " thclean Path;\n" " thfill Path withpattern pattern_flowstone_ASF;\n" "enddef;\n" "\n" "\n" "def a_moonmilk_SKBB (expr Path) =\n" " T:=identity;\n" " thclean Path;\n" " thfill Path withpattern pattern_moonmilk_SKBB;\n" "enddef;\n" "\n" "\n" "\n" "def a_sand_UIS (expr p) =\n" " T:=identity;\n" "% thclean p;\n" " pickup PenC;\n" " path q; q = bbox p;\n" " picture tmp_pic; \n" " tmp_pic := image(\n" " for i = xpart llcorner q step 1u until xpart urcorner q:\n" " for j = ypart llcorner q step 1u until ypart urcorner q:\n" " draw origin shifted ((i,j) randomized 0.7u) withpen PenC;\n" " endfor; \n" " endfor;\n" " );\n" " clip tmp_pic to p;\n" " drawoptions();\n" " draw tmp_pic;\n" "enddef;\n" "\n" "def a_debris_UIS (expr Path) =\n" " T:=identity;\n" "% thclean Path;\n" " thfill Path withpattern pattern_debris_SKBB;\n" "enddef;\n" "\n" "\n" "def a_bedrock_SKBB (expr Path) =\n" " T:=identity;\n" " thclean Path;\n" "enddef;\n" "\n" "\n" "% used to export centerline LRUD envelope for maps created from surveys\n" "\n" "def a_dimensions_SKBB (expr Path) =\n" " T:=identity;\n" " thclean Path;\n" "enddef;\n" "\n" "\n" "def a_debris_SKBB (expr p) =\n" " T:=identity;\n" "% thclean p;\n" " pickup PenC;\n" " path q; q = bbox p;\n" " picture tmp_pic; \n" " tmp_pic := image(\n" " for i = xpart llcorner q step 1u until xpart urcorner q:\n" " for j = ypart llcorner q step 1u until ypart urcorner q:\n" " draw ((-.2u,0)--(.2u,0)) \n" " rotated uniformdeviate(360) \n" " shifted ((i,j) randomized 0.6u) withpen PenC;\n" " endfor; \n" " endfor;\n" " );\n" " clip tmp_pic to p;\n" " drawoptions();\n" " draw tmp_pic;\n" "enddef;\n" "\n" "def a_clay_SKBB (expr p) =\n" " T:=identity;\n" " pickup PenC;\n" " path q, qq; q = bbox p;\n" " picture tmp_pic; \n" " tmp_pic := image(\n" " for i = xpart llcorner q step 1.5u until xpart urcorner q:\n" " for j = ypart llcorner q step 1.5u until ypart urcorner q:\n" " qq := ((-.25u,0){up}..origin{down}..{up}(0.25u,0)) randomized (u/15)\n" " shifted ((i,j) randomized 1.3u);\n" "\tif xpart (p intersectiontimes qq) < 0:\n" "\t thdraw qq;\n" "\tfi;\n" " endfor; \n" " endfor;\n" " );\n" " clip tmp_pic to p;\n" " drawoptions();\n" " draw tmp_pic;\n" "enddef;\n" "\n" "def a_ice_SKBB (expr p) =\n" " T:=identity;\n" " pickup PenC;\n" " path q; q = bbox p;\n" " picture tmp_pic, tmp_ice; \n" " pair z;\n" " tmp_ice := image (\n" " draw (-.2u,0)--(.2u,0);\n" " draw (0,-.2u)--(0,.2u);\n" " );\n" " tmp_pic := image(\n" " for i = xpart llcorner q step 1.5u until xpart urcorner q:\n" " for j = ypart llcorner q step 1.5u until ypart urcorner q:\n" " z := ((i,j) randomized 1.3u);\n" "\tif xpart (p intersectiontimes ((bbox tmp_ice) shifted z)) < 0:\n" "\t draw tmp_ice shifted z;\n" "\tfi;\n" " endfor; \n" " endfor;\n" " );\n" " clip tmp_pic to p;\n" " drawoptions();\n" " draw tmp_pic;\n" "enddef;\n" "\n" "\n" "def a_snow_SKBB (expr P) =\n" " T:=identity;\n" " pickup PenC;\n" " path q; q = bbox P;\n" " picture tmp_pic, tmp_sn; \n" " pair z;\n" " tmp_sn := image(\n" " pickup PenC;\n" " p := origin--(0,.2*u);\n" " draw p; draw p rotated (60); draw p rotated (120);\n" " draw p rotated (180); draw p rotated (240); draw p rotated (300);\n" " p := ((0,.3u)--(0,0.2u)--(0.1u,0.2u)) rotatedaround ((0,0.2u),45);\n" " draw p; draw p rotated (60); draw p rotated (120);\n" " draw p rotated (180); draw p rotated (240);\n" " draw p rotated (300);\n" " );\n" " tmp_pic := image(\n" " for i = xpart llcorner q step 1.5u until xpart urcorner q:\n" " for j = ypart llcorner q step 1.5u until ypart urcorner q:\n" " z:=((i,j) randomized 1.3u);\n" "\tif xpart (P intersectiontimes ((bbox tmp_sn) shifted z)) < 0:\n" " draw tmp_sn shifted z;\n" "\tfi;\n" " endfor; \n" " endfor;\n" " );\n" " clip tmp_pic to P;\n" " drawoptions();\n" " draw tmp_pic;\n" "enddef;\n" "\n" "def a_blocks_SKBB (expr p) =\n" " T:=identity;\n" " pickup PenC;\n" " path q, qq; q = bbox p;\n" " picture tmp_pic; \n" " uu := max(u, (xpart urcorner q - xpart llcorner q)/100, (ypart urcorner q - ypart llcorner q)/100);\n" " tmp_pic := image(\n" " for i = xpart llcorner q step 2uu until xpart urcorner q:\n" " for j = ypart llcorner q step 2uu until ypart urcorner q:\n" " qq := punked (((-.5uu,-.5uu)--(.5uu,-.5uu)--(.5uu,.5uu)--(-.5uu,.5uu)--cycle) \n" "\t randomized (uu/2))\n" " rotated uniformdeviate(360) \n" " shifted ((i,j) randomized 1.6uu);\n" "\tif xpart (p intersectiontimes qq) < 0:\n" "\t thclean qq;\n" "\t thdraw qq;\n" "\tfi;\n" " endfor; \n" " endfor;\n" " );\n" " clip tmp_pic to p;\n" " drawoptions();\n" " draw tmp_pic;\n" "enddef;\n" "\n" "def a_blocks_SKBB_ (expr p,o,s_beg,s_end,d_beg,d_end) =\n" " T:=identity;\n" " orient = 90-o;\n" " pickup PenC;\n" " path q[], qq; q1 = bbox p;\n" " draw q1; draw p;\n" " q2 = llcorner q1 .. lrcorner q1 .. urcorner q1 .. ulcorner q1 .. cycle;\n" " draw q2;\n" " pair zz[];\n" " radius := .5*length(llcorner q1 - urcorner q1);\n" " zz1 := .5[llcorner q1,urcorner q1];\n" " zz2 := zz1 - dir(orient)*radius;\n" " zz3 = zz1 rotatedaround (zz2,90);\n" " draw zz1 withpen pencircle scaled 2mm;\n" " draw zz2 withpen pencircle scaled 2mm;\n" " draw zz3 withpen pencircle scaled 2mm;\n" " picture tmp_pic; \n" " tmp_pic := image(\n" " j := 0;\n" " forever:\n" " i := 0;\n" " forever:\n" " qq := punked (((-.5,-.5)--(.5,-.5)--(.5,.5)--(-.5,.5)--cycle) \n" " scaled (0.7(5u-(j/(2*radius))[u*s_beg,u*s_end]))\n" "\t randomized (u/2))\n" " rotated uniformdeviate(360) \n" " shifted (((zz3 + (i,j)) rotatedaround (zz3,-o)) randomized 1.6u);\n" " draw ((zz3 + (i,j)) rotatedaround (zz3,-o)) withpen pencircle scaled 1mm withcolor red;\n" "\tif xpart (p intersectiontimes qq) < 0:\n" "\t thclean qq;\n" "\t thdraw qq;\n" "\tfi;\n" " i := i + (j/(2*radius))[u*d_beg,u*d_end];\n" " exitif i > 2*radius;\n" " endfor; \n" " j := j + (j/(2*radius))[u*d_beg,u*d_end];\n" " exitif j > 2*radius;\n" " endfor;\n" " );\n" "% clip tmp_pic to p;\n" " drawoptions();\n" " draw tmp_pic;\n" "enddef;\n" "\n" "\n" "def a_pebbles_SKBB (expr p) =\n" " T:=identity;\n" " pickup PenC;\n" " path q, qq; q = bbox p;\n" " picture tmp_pic; \n" " tmp_pic := image(\n" " for i = xpart llcorner q step 1.5u until xpart urcorner q:\n" " for j = ypart llcorner q step 1.5u until ypart urcorner q:\n" " qq := (superellipse((.2u,0),(0,.1u),(-.2u,0),(0,.-.1u),.75))\n" "% randomized (u/25)\n" " rotated uniformdeviate(360) \n" " shifted ((i,j) randomized 0.8u);\n" "\tif xpart (p intersectiontimes qq) < 0:\n" "\t thdraw qq;\n" "\tfi;\n" " endfor; \n" " endfor;\n" " );\n" " clip tmp_pic to p;\n" " drawoptions();\n" " draw tmp_pic;\n" "enddef;\n" "\n" "def a_water_SKBB (expr Path) =\n" " T:=identity;\n" " thfill Path;\n" "enddef;\n" "\n" "let a_sump_SKBB = a_water_SKBB;\n" "\n" "def a_u (expr p) =\n" " T:=identity;\n" " thfill p withcolor red;\n" "enddef;\n" "\n" "\n\n\n%%%%% ENDINPUT thArea %%%%%\n\n\n" "\n\n\n%%%%% INPUT thText %%%%%\n\n\n" "%% therion source code\n" "%%\n" "%% This file defines macros for labels\n" "%%\n" "%% $Date: 2003/07/01 09:06:44 $\n" "%% $RCSfile: thText.mp,v $\n" "%% $Revision: 1.6 $\n" "%%\n" "%% Copyright (C) 2000-2004 Martin Budaj\n" "%%\n" "%% -------------------------------------------------------------------- \n" "%% This program is free software; you can redistribute it and/or modify\n" "%% it under the terms of the GNU General Public License as published by\n" "%% the Free Software Foundation; either version 2 of the License, or\n" "%% any later version.\n" "%%\n" "%% This program is distributed in the hope that it will be useful,\n" "%% but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" "%% GNU General Public License for more details.\n" "%% \n" "%% You should have received a copy of the GNU General Public License\n" "%% along with this program; if not, write to the Free Software\n" "%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" "%% --------------------------------------------------------------------\n" "\n" "labeloffset:=0bp;\n" "\n" "def l_label(expr txt,path) =\n" " picture pict,pic;\n" " pair pos;\n" " numeric dx[],dy[],ptime;\n" " string ss,ch;\n" "\n" " pic := thelabel(txt,(0,0));\n" " strl := xpart(lrcorner pic - llcorner pic);\n" " pathl := arclength (path);\n" " dx0 := xpart(llcorner pic);\n" "% dy0 := ypart(llcorner pic);\n" "\n" " if strl>pathl:\n" " txtzoom := pathl / strl;\n" " thwarning(\"text scaled down to fit the path\");\n" " else:\n" " txtzoom := 1;\n" " fi;\n" " zoom := pathl / strl;\n" "\n" " for p within pic:\n" " if textual p: \n" " ss := textpart p;\n" " dx1 := xpart p;\n" " dy1 := ypart p;\n" " dx2 := dx1;\n" "\n" " if xxpart p / yypart p <> 1: message(\"Error: distorted text!\") fi;\n" " txtscale := txtzoom * xxpart p;\n" "\n" " l := length(ss);\n" " ptime := 0;\n" " for i=0 upto (l - 1):\n" " ch := substring(i,i+1) of ss;\n" " pict := ch infont fontpart p scaled txtscale;\n" " charwidth := xpart (lrcorner pict - llcorner pict) / txtzoom;\n" " dy2 := ypart lrcorner pict / txtzoom;\n" " ptime := (dx2 - dx0 + 0.5*charwidth) * zoom;\n" " t := arctime ptime of (path);\n" " pos := point t of path + \n" " (dy1+dy2)*txtzoom*unitvector((direction t of path) rotated 90);\n" " begingroup\n" "% interim labeloffset:=0bp;\n" " lab:=thelabel.top(pict,pos);\n" " process_label(pos,angle direction t of path);\n" " endgroup;\n" " dx2 := dx2 + charwidth;\n" " endfor;\n" "\n" " else: message(\"Strange component of line label!\");\n" " fi;\n" " endfor;\n" " % draw path;\n" "enddef;\n" "\n" "vardef p_label@#(expr txt,pos,rot,mode) =\n" " if (mode=1) or (mode=7): interim labeloffset:=(u/8) fi;\n" " lab:=thelabel@#(txt, pos);\n" " if mode>1: pickup PenD fi;\n" " if mode=1:\n" " pickup pencircle scaled (u/6);\n" " drawdot(pos);\n" " process_label(pos,0);\n" " elseif mode=2: process_uplabel; \n" " elseif mode=3: process_downlabel;\n" " elseif mode=4: process_updownlabel;\n" " elseif mode=5: process_circledlabel;\n" " elseif mode=6: process_boxedlabel;\n" " elseif mode=7: process_label(pos,rot); % station name\n" " elseif mode=8: process_filledlabel(pos, rot);\n" " else: process_label(pos,rot); fi;\n" "enddef;\n" "\n" "\n" "% at beginfig: save smartll[], smartur[]; pair smartll[], smartur[]; smart_count=0;\n" "numeric smart_count, smart_D;\n" "boolean smart_quit, smart_inner_quit;\n" "\n" "def p_smartlabel (expr txt, pos) =\n" " begingroup;\n" " interim bboxmargin:=0.2pt;\n" " lab:=thelabel.rt(txt,pos+(0.4u,0));\n" " q:=bbox lab;\n" " smart_D := 0;\n" " forever:\n" " smart_quit := true;\n" " smart_inner_quit := false;\n" " for i=1 upto smart_count:\n" " if smart_overlap(((point 0 of q) shifted (0,smart_D)), \n" " ((point 2 of q) shifted (0,smart_D)),\n" " smartll[i], smartur[i]) = 1:\n" " smart_quit := false;\n" " smart_D := smart_D - 3pt;\n" " smart_inner_quit := true;\n" " fi;\n" " exitif smart_inner_quit;\n" " endfor;\n" " exitif smart_quit;\n" " endfor;\n" " smart_U := 0;\n" " forever:\n" " smart_quit := true;\n" " smart_inner_quit := false;\n" " for i=1 upto smart_count:\n" " if smart_overlap(((point 0 of q) shifted (0,smart_U)), \n" " ((point 2 of q) shifted (0,smart_U)),\n" " smartll[i], smartur[i]) = 1:\n" " smart_quit := false;\n" " smart_U := smart_U + 3pt;\n" " smart_inner_quit := true;\n" " fi;\n" " exitif smart_inner_quit;\n" " endfor;\n" " exitif smart_quit;\n" " endfor;\n" " if (smart_U < -smart_D): smart_D := smart_U; fi;\n" " draw lab shifted (0,smart_D);\n" " if (abs(smart_D)>3pt):\n" " pickup PenB;\n" " draw pos{left}..{right}(pos shifted (.4u, smart_D)) dashed withdots scaled 0.2;\n" " pickup PenA;\n" " drawdot pos;\n" " fi;\n" " smart_count := smart_count + 1;\n" " smartll[smart_count] := point 0 of (q shifted (0,smart_D));\n" " smartur[smart_count] := point 2 of (q shifted (0,smart_D));\n" " endgroup;\n" "enddef;\n" "\n" "def smart_overlap (expr llA, urA, llB, urB) =\n" " if ((xpart llA < xpart urB) and (xpart urA > xpart llB)) and\n" " ((ypart llA < ypart urB) and (ypart urA > ypart llB)):\n" " 1\n" " else:\n" " 0 \n" " fi\n" "enddef;\n" "\n" "\n" "\n" "\n" "def p_wallaltitude (expr pprev,pos,pnext,txt) =\n" " rot:=angle(unitvector(pnext-pos)+unitvector(pos-pprev)) - 90;\n" " pickup PenD;\n" " pair zz;\n" "% zz:=(pos + 3*unitvector(dir rot));\n" " zz:=(pos + (u/4)*unitvector(dir rot));\n" " draw (pos)--zz;\n" " begingroup \n" "% interim labeloffset:=2pt;\n" " interim labeloffset:=(u/12);\n" " if horiz_labels:\n" " rot:=rot mod 360;\n" " if rot<=22.5: lab:=thelabel.rt(txt, zz);\n" " elseif rot<=67.5: lab:=thelabel.urt(txt, zz);\n" " elseif rot<=112.5: lab:=thelabel.top(txt, zz);\n" " elseif rot<=157.5: lab:=thelabel.ulft(txt, zz);\n" " elseif rot<=202.5: lab:=thelabel.lft(txt, zz);\n" " elseif rot<=247.5: lab:=thelabel.llft(txt, zz);\n" " elseif rot<=292.5: lab:=thelabel.bot(txt, zz);\n" " elseif rot<=337.5: lab:=thelabel.lrt(txt, zz);\n" " else: lab:=thelabel.rt(txt, zz);\n" " fi;\n" " else:\n" " if (abs rot>90) and (abs rot <=270):\n" " rot:=rot-180;\n" " lab:=thelabel.lft(txt, pos);\n" " else:\n" " lab:=thelabel.rt(txt, pos);\n" " fi;\n" " fi;\n" " process_label(pos, if horiz_labels: 0 else: rot fi);\n" " endgroup;\n" "enddef;\n" "\n" "\n\n\n%%%%% ENDINPUT thText %%%%%\n\n\n" "\n\n\n%%%%% INPUT thSpecial %%%%%\n\n\n" "%% therion source code\n" "%%\n" "%% This file defines macros for special symbols\n" "%%\n" "%% $Date: $\n" "%% $RCSfile: $\n" "%% $Revision: $\n" "%%\n" "%% Copyright (C) 2004 Martin Budaj\n" "%%\n" "%% -------------------------------------------------------------------- \n" "%% This program is free software; you can redistribute it and/or modify\n" "%% it under the terms of the GNU General Public License as published by\n" "%% the Free Software Foundation; either version 2 of the License, or\n" "%% any later version.\n" "%%\n" "%% This program is distributed in the hope that it will be useful,\n" "%% but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" "%% GNU General Public License for more details.\n" "%% \n" "%% You should have received a copy of the GNU General Public License\n" "%% along with this program; if not, write to the Free Software\n" "%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" "%% --------------------------------------------------------------------\n" "\n" "def s_northarrow_SKBB_old (expr rot) = \n" " T:=identity;\n" " picture tmp_pic;\n" " tmp_pic = image (\n" " begingroup\n" " interim defaultscale:=3;\n" " label(if (lang=\"sk\") or (lang=\"cz\"): \"S\" else: \"N\" fi, origin);\n" " endgroup;\n" " drawarrow (0,-1cm)--(0,1cm);\n" " );\n" " draw tmp_pic rotatedaround(origin, -rot);\n" "enddef;\n" "\n" "def s_northarrow_SKBB (expr rot) =\n" " T:=identity scaled 0.7 rotated -rot;\n" " thdraw (-.5cm,-1cm)--(0,1.5cm)--(.5cm,-1cm)--(0,-.5cm)--cycle;\n" " thfill (-.5cm,-1cm)--(0,1.5cm)--(0,-.5cm)--cycle;\n" "enddef;\n" "\n" "def s_scalebar_SKBB (expr l, units, txt) = \n" " begingroup\n" " interim warningcheck:=0;\n" " tmpl:=l / Scale * cm * units / 2;\n" " endgroup;\n" " pickup PenC;\n" " draw (-tmpl,0)--(tmpl,0);\n" " draw (-tmpl,0)--(-tmpl,2bp);\n" " draw (tmpl,0)--(tmpl,2bp);\n" " begingroup\n" " interim labeloffset:=2bp;\n" " label.top(thTEX(decimal (l) & \"\\thinspace\" & txt),origin);\n" " endgroup\n" "enddef;\n" "\n" "def s_scalebar_SM (expr l, units, txt) = \n" " begingroup\n" " interim warningcheck:=0;\n" " tmpl:=l / Scale * cm * units / 2;\n" " endgroup;\n" " pickup PenC;\n" " draw (-tmpl,0)--(tmpl,0);\n" " draw (-tmpl,0)--(-tmpl,2bp);\n" " draw (tmpl,0)--(tmpl,2bp);\n" " draw (0,0)--(0,2bp);\n" " begingroup\n" " interim labeloffset:=3.5bp;\n" " label.top(thTEX(decimal (0)),(-tmpl,0));\n" " label.top(thTEX(decimal (l/2)),origin);\n" " label.top(thTEX(decimal (l) & \"\\thinspace\" & txt),(tmpl,0));\n" " endgroup\n" "enddef;\n" "\n" "\n" "def s_hgrid_SM (expr xpos, ypos, xsize, ysize) =\n" " pickup PenD;\n" " draw (\n" " if xpos < 0: 0 else: -5mm fi, 0\n" " ) -- (\n" " if xpos > 0: 0 else: 5mm fi, 0\n" " );\n" " draw (\n" " 0, if ypos < 0: 0 else: -5mm fi\n" " ) -- (\n" " 0, if ypos > 0: 0 else: 5mm fi\n" " );\n" "enddef;\n" "\n" "\n" "def s_vgrid_SM (expr xpos, ypos, xsize, ysize) =\n" " pickup PenD;\n" " draw (\n" " if xpos < 0: 0 else: -xsize/2 fi, 0\n" " ) -- (\n" " if xpos > 0: 0 else: xsize/2 fi, 0\n" " ) dashed evenly;\n" "enddef;\n" "\n" "\n\n\n%%%%% ENDINPUT thSpecial %%%%%\n\n\n" "\n\n\n%%%%% INPUT uAUT %%%%%\n\n\n" "% Austrian Symbol Set, author Georg Pacher\n" "\n" "% color (for Austrian symbol-set)\n" "\n" "color col_water_bg;\n" "col_water_bg :=(226/255,244/255,253/255);\n" "\n" "%%%%%%%%%%%%%%%%%%%%%%%\n" "\n" "\n" "%% areas\n" "\n" "% returns true if pair point lies within path q. \n" "% outside_point is any pair outside of path q (needed for reference).\n" "vardef pointinside(expr pt,q,outside_point)=\n" " T:=identity;\n" " path test;\n" " test:= outside_point--pt;\n" " %thdraw test;\n" " boolean isinside;\n" " isinside:=false;\n" " numintersections:=recgetnumintersections(test,q,0);\n" " if (numintersections <0):\n" " isinside:=true;\n" " elseif odd(numintersections):\n" " isinside:=true;\n" " else:\n" " isinside:=false;\n" " fi;\n" " isinside\n" "enddef;\n" "\n" "% get number of intersection between paths p (length 1!) and q\n" "% recnum is needed for limitation of recursions. \n" "% If the number of allowed recursions is reached, a negativ number of intersections is returned\n" "vardef recgetnumintersections(expr p,q,recnum)=\n" " \n" " pair inter;\n" " save preinter;\n" " save postinter;\n" " save numintersections;\n" " path preinter, postinter;\n" " inter:=p intersectiontimes q;\n" " %show recnum;\n" " if recnum >25:\n" " numintersections:=-100;\n" " else: \n" " if xpart(inter)>0 :\n" " %show (xpart inter);\n" " % split p into two paths and call yourself again\n" " \n" " preinter:=subpath (0,xpart(inter)-2eps) of p;\n" " \n" " postinter:=subpath (xpart(inter)+2eps,1) of p;\n" " \n" " numintersections:= recgetnumintersections(preinter,q,recnum+1)\n" " + recgetnumintersections(postinter,q,recnum+1)\n" " + 1;\n" " else:\n" " numintersections:=0;\n" " fi;\n" " fi;\n" " numintersections\n" " \n" "enddef;\n" "\n" "beginpattern(pattern_water_AUT);\n" " draw origin--10up withpen pensquare scaled (0.02u);\n" " patternxstep(.18u);\n" " patterntransform(identity rotated 90);\n" "endpattern;\n" "\n" "beginpattern(pattern_sump_AUT);\n" " draw origin--(0,.25u) withpen pensquare scaled (0.02u);\n" " draw origin--(.25u,0) withpen pensquare scaled (0.02u);\n" "endpattern;\n" "\n" "beginpattern(pattern_sand_AUT);\n" " pickup PenC;\n" " p:= origin -- (0.01u,0.01u);\n" " for i=0.0u step 0.2u until 2.4u:\n" " for j=0.0u step 0.2u until 2.4u:\n" " draw p rotated uniformdeviate(360) \n" " shifted ((i,j) randomized 0.09u);\n" " endfor;\n" " endfor;\n" " if BaseScale<=2.5:\n" " my_step:=2.4u;\n" " else:\n" " my_step:=2.6u;\n" " fi;\n" " patternstep(my_step,my_step); \n" "endpattern;\n" "\n" "beginpattern(pattern_pebbles_AUT);\n" " pickup PenC;\n" " path qq;\n" " for i=0.0u step 0.3u until 5.1u:\n" " for j=0.0u step 0.3u until 5.1u:\n" " qq := (superellipse((.1u,0),(0,.05u),(-.1u,0),(0,.-.05u),.75))\n" " randomized (u/45)\n" " scaled (uniformdeviate(0.4)+.55)\n" " rotated uniformdeviate(360) \n" " shifted ((i,j) randomized 0.15u);\n" " draw qq;\n" " endfor;\n" " endfor;\n" " patternstep(5.1u,5.1u);\n" "endpattern;\n" "\n" "beginpattern(pattern_ice_AUT);\n" " pickup PenC;\n" " p:=(-.15u,.0u) -- (0.15u,.0u);\n" " draw p;\n" " draw p shifted (0.25u,.0u) rotated (90);\n" " draw p shifted (0.45u,0.25u);\n" " draw p shifted (0.0u,0.45u) rotated (90);\n" " patternxstep(.9u);\n" " patternystep(0.5u);\n" "endpattern;\n" "\n" "def a_water_AUT (expr Path) =\n" " T:=identity;\n" " thclean Path;\n" " pickup PenC;\n" " thfill Path withcolor col_water_bg;\n" " thfill Path withpattern pattern_water_AUT;\n" " thdraw Path;\n" "enddef;\n" "\n" "def a_sump_AUT (expr Path) =\n" " T:=identity;\n" " thclean Path;\n" " pickup PenC;\n" " thfill Path withcolor col_water_bg;\n" " thfill Path withpattern pattern_sump_AUT;\n" " thdraw Path;\n" "enddef;\n" "\n" "def a_sand_AUT (expr Path) =\n" " T:=identity;\n" "% thclean Path;\n" " thfill Path withpattern pattern_sand_AUT ;\n" "enddef;\n" "\n" "let a_clay_AUT = a_sand_AUT;\n" "\n" "\n" "def a_pebbles_AUT (expr p) =\n" " T:=identity;\n" " thfill p withpattern pattern_pebbles_AUT;\n" "enddef;\n" "\n" "\n" "\n" "def a_debris_AUT (expr p) =\n" " T:=identity;\n" " \n" " symbol_distance:=1.0;\n" " scale_factor:= 0.3;\n" " pickup PenC;\n" " path q, qq; q = bbox p;\n" " pair outside;\n" " outside:= ulcorner q + up;\n" " picture tmp_pic; \n" " uu := max(u, (xpart urcorner q - xpart llcorner q)/100, (ypart urcorner q - ypart llcorner q)/100);\n" " tmp_pic := image(\n" " for i = xpart llcorner q step symbol_distance*uu until xpart urcorner q:\n" " for j = ypart llcorner q step symbol_distance*uu until ypart urcorner q:\n" " qq := punked (((-.5uu,-.5uu)--(.5uu,-.5uu)--(1.05uu,0.01uu)--(.5uu,.5uu)--(-.5uu,.5uu)--cycle) \n" " randomized (uu/2))\n" " scaled (uniformdeviate(0.4)+scale_factor )\n" " rotated uniformdeviate(360) \n" " shifted ((i,j) randomized 0.5uu);\n" " if xpart (p intersectiontimes qq) < 0:\n" " if pointinside((i,j),p,outside):\n" " thclean qq;\n" " thdraw qq;\n" " fi;\n" " else:\n" " qq:= qq scaled (uniformdeviate(.2)+.5 )\n" " if xpart (p intersectiontimes qq) < 0:\n" " if pointinside((i,j),p,outside):\n" " thclean qq;\n" " thdraw qq;\n" " fi;\n" " fi;\n" " fi;\n" " endfor; \n" " endfor;\n" " );\n" " clip tmp_pic to p;\n" " drawoptions();\n" " draw tmp_pic;\n" "enddef; \n" "\n" "def a_ice_AUT (expr p) =\n" " T:=identity;\n" " thclean p;\n" " thfill p withpattern pattern_ice_AUT;\n" " pickup PenC;\n" " thdraw p;\n" "enddef;\n" "\n" "def a_snow_AUT (expr P) =\n" " T:=identity;\n" " pickup PenC;\n" " path q; q = bbox P;\n" " picture tmp_pic, tmp_sn; \n" " pair z;\n" " tmp_sn := image(\n" " pickup PenC;\n" " p := origin--(0,.2*u);\n" " draw p; draw p rotated (60); draw p rotated (120);\n" " draw p rotated (180); draw p rotated (240); draw p rotated (300);\n" " p := ((0,.3u)--(0,0.2u)--(0.1u,0.2u)) rotatedaround ((0,0.2u),45);\n" " draw p; draw p rotated (60); draw p rotated (120);\n" " draw p rotated (180); draw p rotated (240);\n" " draw p rotated (300);\n" " );\n" " tmp_pic := image(\n" " for i = xpart llcorner q step 1.0u until xpart urcorner q:\n" " for j = ypart llcorner q step 1.0u until ypart urcorner q:\n" " z:=((i,j) randomized 0.5u);\n" "\tif xpart (P intersectiontimes ((bbox tmp_sn) shifted z)) < 0:\n" " draw tmp_sn shifted z;\n" "\tfi;\n" " endfor; \n" " endfor;\n" " );\n" " clip tmp_pic to P;\n" " draw tmp_pic;\n" " thdraw P;\n" "enddef;\n" "\n" "def a_blocks_AUT (expr p) =\n" " T:=identity;\n" " symbol_distance:=1.6;\n" " scale_factor:= 0.8;\n" " pickup PenC;\n" " path q, qq; q = bbox p;\n" " pair outside;\n" " outside:= ulcorner q + up;\n" " picture tmp_pic; \n" " uu := max(u, (xpart urcorner q - xpart llcorner q)/100, (ypart urcorner q - ypart llcorner q)/100);\n" " tmp_pic := image(\n" " for i = xpart llcorner q step symbol_distance*uu until xpart urcorner q:\n" " for j = ypart llcorner q step symbol_distance*uu until ypart urcorner q:\n" " qq := punked (((-.5uu,-.5uu)--(.5uu,-.5uu)--(1.05uu,0.01uu)--(.5uu,.5uu)--(-.5uu,.5uu)--cycle) \n" " randomized (uu/2))\n" " scaled (uniformdeviate(0.7)+scale_factor )\n" " rotated uniformdeviate(360) \n" " shifted ((i,j) randomized 0.75uu);\n" " if xpart (p intersectiontimes qq) < 0:\n" " if pointinside((i,j),p,outside):\n" " thclean qq;\n" " thdraw qq;\n" " fi;\n" " else:\n" " qq:= qq scaled (uniformdeviate(.2)+.5 )\n" " if xpart (p intersectiontimes qq) < 0:\n" " if pointinside((i,j),p,outside):\n" " thclean qq;\n" " thdraw qq;\n" " fi;\n" " fi;\n" " fi;\n" " endfor; \n" " endfor;\n" " );\n" " clip tmp_pic to p;\n" " drawoptions();\n" " draw tmp_pic;\n" "enddef; \n" "\n" "\n" "%% lines\n" "\n" "def l_wall_pit_AUT (expr P) = \n" " T:=identity;\n" " % draw outer path\n" " pickup PenA;\n" " thdraw P;\n" "\n" " laenge:= arclength P;\n" "\n" " pair inner[],innerdir[], inter;\n" " pair test;\n" " \n" " samplingdistance:=max(0.15u,laenge/1500);\n" " \n" " path testcircle;\n" " % testcircle, used to test, whether the path makes a 'v'-like bend, \n" " % where normal sampling and offsetting gives poor results for the parallel line\n" " % size of testcircle= size PenA/2 + 2* (distance between outer and inner line)\n" " % + PenC (inner line)\n" " testcircle := halfcircle scaled (.5*u/10+2*.125u+.5*u/10) shifted (0,.5*u/10);\n" " cur:=samplingdistance/2;\n" " count:=0;\n" " forever:\n" " t:= arctime cur of P;\n" " inter:=P intersectiontimes (testcircle rotated (angle thdir(P,t)) shifted (point t of P));\n" " \n" " %thdraw testcircle rotated (angle thdir(P,t)) shifted (point t of P) withpen (pencircle scaled 0.01u) ;\n" " if (xpart inter) >=0:\n" " % we are at a 'sharp bend', so set next point to intersectionpoint\n" " cur:=cur+samplingdistance;\n" " t := max( xpart inter, arctime cur of P);\n" " %thdraw point t of P withcolor 0.7*green;\n" " forever:\n" " t:= arctime cur of P;\n" " inter:=P intersectiontimes (testcircle rotated (angle thdir(P,t)) shifted (point t of P));\n" " exitif (xpart inter <0);\n" " cur := cur + samplingdistance;\n" " exitif (cur >=laenge); \n" " endfor;\n" " if (cur =laenge);\n" " endfor;\n" " if count>2:\n" " % draw inner path\n" " pickup PenC;\n" " path innerpath;\n" " innerpath =\n" " for i=0 upto count-2:\n" " inner[i]{(innerdir[i])} ..\n" " endfor\n" " if cycle P: cycle;\n" " else: inner[count-1];\n" " fi;\n" " thdraw innerpath;\n" " \n" " % draw the triangles\n" "\n" " path draw_triangle;\n" " pair l_triangle;\n" " \n" " laenge:= arclength innerpath;\n" " symsize:= adjust_step(laenge,0.5u);\n" " triangle_width:=symsize/2;\n" " cur:=(symsize/2);\n" " t := arctime (cur) of innerpath;\n" " t1:= arctime (cur-triangle_width/2) of innerpath;\n" " t2:= arctime (cur+triangle_width/2) of innerpath; \n" " l_triangle := (point t of innerpath);\n" " if ATTR__height >= 10: thfill else: thdraw fi (subpath (t1,t2) of innerpath) -- \n" " ((point t of innerpath) + symsize/2 * unitvector(thdir(innerpath,t) rotated 90))\n" " -- cycle;\n" "\n" " for cur=(symsize/2) step symsize until laenge:\n" " t := arctime (cur) of innerpath;\n" " test := (point t of innerpath);\n" " my_dist := length(test-l_triangle);\n" " if (abs(my_dist-symsize) < 0.05u) or (my_dist>symsize):\n" " t1:= arctime (cur-triangle_width/2) of innerpath;\n" " t2:= arctime (cur+triangle_width/2) of innerpath; \n" "\t draw_triangle:=(subpath (t1,t2) of innerpath) -- \n" " ((point t of innerpath) + symsize/2 * unitvector(thdir(innerpath,t) rotated 90))\n" " -- cycle;\n" "\t if xpart (draw_triangle intersectiontimes P) < 0:\n" "\t if ATTR__height >= 10: \n" "\t thfill draw_triangle;\n" "\t else:\n" "\t thclean draw_triangle;\n" "\t thdraw draw_triangle;\n" "\t fi;\n" "\t l_triangle:= test;\n" "\t fi;\n" " fi;\n" " endfor;\n" " \n" " fi;\n" "enddef;\n" "\n" "\n" "def l_wall_sand_AUT (expr P) = \n" " T:=identity;\n" " cas := 0;\n" " dlzka := arclength P;\n" " mojkrok:=adjust_step(dlzka, 0.1u);\n" " pickup PenC; \n" " forever:\n" " t := arctime cas of P;\n" " thdraw (((0.01u,0.01u)--origin) rotated uniformdeviate(360) shifted ((point t of P) + (uniformdeviate 1) * .4u \n" " * unitvector(thdir(P,t) rotated -90)));\n" " cas := cas + mojkrok;\n" " exitif cas > dlzka + (mojkrok / 3); % for rounding errors\n" " endfor;\n" " pickup PenC; \n" " thdraw P;\n" "\n" "enddef;\n" "\n" "def l_wall_pebbles_AUT (expr P) = \n" " T:=identity;\n" " cas := 0;\n" " dlzka := arclength P;\n" " mojkrok:=adjust_step(dlzka, .18u);\n" " pickup PenC;\n" " q:=superellipse((.1u,0),(0,.05u),(-.1u,0),(0,.-.05u),.75);\n" " forever:\n" " t := arctime (cas + mojkrok/2) of P;\n" " thdraw q randomized (u/45) rotated (angle(thdir(P,t)) + (normaldeviate*40)) shifted point t of P;\n" " cas := cas + mojkrok;\n" " exitif cas > dlzka - (2*mojkrok/3); % for rounding errors\n" " endfor;\n" "enddef;\n" "\n" "\n" "let l_wall_clay_AUT = l_wall_sand_AUT;\n" "\n" "\n" "def l_wall_debris_AUT (expr P) = \n" " T:=identity;\n" " pickup PenC;\n" " laenge := arclength P;\n" " path block;\n" " path old_block;\n" " \n" " cur := 0;\n" " t:= arctime cur of P;\n" " % draw first block\n" " old_block := (((-.0u,-.0u)--(.25u,-.15u)--(.45u,0.01u)--(.2u,.25u)--(.05u,.15u)--cycle));\n" " block_width := (xpart urcorner old_block - xpart ulcorner old_block);\n" " old_block:=old_block rotated angle(thdir(P,0)) shifted point t of P;\n" " thclean old_block;\n" " thdraw old_block;\n" " \n" " cur := cur + 0.9*block_width;\n" " t:= arctime cur of P;\n" "\t% proceed with path\n" " forever:\n" "\t % generate random block\n" " block := punked (((-.25u,-.25u)--(0.25.u,-.25u)--(0.50u,0.01u)--(0.25u,.25u)--(-.25u,.25u)--cycle) \n" " randomized (u/4))\n" " scaled (uniformdeviate(0.3)+.4)\n" " rotated uniformdeviate(360);\n" "\t % check width of block\n" " block_width := (xpart urcorner block - xpart ulcorner block);\n" " exitif cur > (laenge- 2.5*block_width/2);\n" " % find next position where the block fits in without intersecting the previous one\n" "\t forever: \n" "\t exitif xpart ( (block rotated angle(-direction t of P) shifted point t of P) intersectiontimes old_block) < 0;\n" " cur:=cur+0.01u;\n" " t:= arctime cur of P;\n" " exitif cur > (laenge- 2.5*block_width/2);\n" " endfor;\n" " exitif cur > (laenge- 2.5*block_width/2);\n" "\n" " old_block:= block rotated angle(-direction t of P) shifted point t of P;\n" " thclean old_block;\n" " thdraw old_block;\n" " cur := cur + block_width/2;\n" " t:= arctime cur of P;\n" " endfor;\n" "\tt:= arctime laenge-eps of P;\n" "\n" "\t% generate last block\n" " block := (((-.0u,-.0u)--(.25u,-.15u)--(.45u,0.01u)--(.2u,.25u)--(.1u,.15u)--cycle));\n" " block_width := (xpart urcorner block - xpart ulcorner block);\n" " \n" "\t% scale last block to fit in the remaining gap\n" " scale_factor:=1.5*(laenge-cur)/block_width;\n" " forever:\n" " exitif scale_factor < 0; % bruces stab at preventing endless loop at large scales\n" " exitif xpart ( (block rotated angle(-direction t of P) scaled scale_factor shifted (point t of P)) intersectiontimes old_block) < 0;\n" " scale_factor:=scale_factor-0.01;\n" " endfor;\n" " if scale_factor > 0:\n" " thclean block rotated angle(-direction t of P) scaled scale_factor shifted (point t of P);\n" " thdraw block rotated angle(-direction t of P) scaled scale_factor shifted (point t of P);\n" " fi;\n" "enddef;\n" "\n" "\n" "def l_wall_blocks_AUT (expr P) = \n" "\n" " T:=identity;\n" " pickup PenC;\n" " laenge := arclength P;\n" "\n" " path block;\n" " path old_block;\n" " \n" " cur := 0;\n" " t:= arctime cur of P;\n" " \n" " % draw first block\n" " old_block := ( (.7u,-.35u)--(.85u,0.01u)--(.4u,.5u)--(.1u,.3u)--(-.0u,-.0u) );\n" " block_width := (xpart urcorner old_block - xpart ulcorner old_block);\n" " old_block:=old_block rotated angle( thdir(P,0) ) shifted point t of P;\n" " thclean (old_block--cycle);\n" " thdraw old_block;\n" " \n" " \n" " cur := cur + block_width/2;\n" " t:= arctime cur of P;\n" " forever:\n" " % generate random block\n" " block := punked ( ( (.8u,-.35u)--(.85u,0.01u)--(.6u,.4u)--(.1u,.1u)--(-.0u,-.3u) )\n" " randomized (0.3u) )\n" " scaled (uniformdeviate(0.3)+.65)\n" " rotated (uniformdeviate(45)-15);\n" " % check width of block\n" " block_width := (xpart urcorner block - xpart ulcorner block);\n" " \n" " exitif cur > (laenge- 3.5*block_width/2);\n" " % find next position where the block fits in without intersecting the previous one\n" " forever: \n" " exitif xpart ( ((block--cycle) rotated angle(direction t of P) shifted point t of P) intersectiontimes old_block) < 0;\n" " cur:=cur+0.01u;\n" " t:= arctime cur of P;\n" " exitif cur > (laenge- 3.5*block_width/2);\n" " endfor;\n" " exitif cur > (laenge- 3.5*block_width/2);\n" " \n" " old_block:= block rotated angle(direction t of P) shifted point t of P;\n" " thclean (old_block--cycle);\n" " thdraw old_block;\n" " \n" " \n" " cur := cur + block_width/2;\n" " t:= arctime cur of P;\n" " endfor;\n" " \n" " % generate last block\n" " t:= arctime laenge-eps of P;\n" " block := (( (-.15u,-.35u)--(.0u,.0u)--(-.45u,.5u)--(-.75u,.3u)--(-.85u,-.0u)) );\n" " block_width := (xpart urcorner block - xpart ulcorner block);\n" " % scale last block to fit in the remaining gap\n" " scale_factor:=(laenge-cur)/block_width;\n" " forever:\n" "\t exitif scale_factor < 0;\n" " exitif xpart ( ( (block) rotated angle (direction t of P) scaled scale_factor shifted (point t of P) ) intersectiontimes old_block) < 0;\n" " scale_factor:=scale_factor-0.001;\n" " endfor;\n" " if scale_factor > 0:\n" " thclean (block--cycle) rotated angle (direction t of P) scaled scale_factor shifted (point t of P);\n" " thdraw (block) rotated angle (direction t of P) scaled scale_factor shifted (point t of P);\n" " fi;\n" "enddef;\n" "\n" "\n" "\n" "def l_wall_ice_AUT (expr P) = \n" " T:=identity;\n" " cas := 0;\n" " dlzka := arclength P;\n" " mojkrok:=adjust_step(dlzka, .6u);\n" " pickup PenC;\n" " p := (-.15u,0)--(.15u,0);\n" " q := p rotated 90 shifted (.25u,.0u);\n" " picture symbol,test_symbol;\n" " symbol:= image (\n" " thdraw p;\n" " thdraw q;\n" " );\n" " path bound,old_bound,test_bound;\n" " begingroup;\n" " interim bboxmargin:=0;\n" " bound := bbox (symbol);\n" " endgroup;\n" " t := arctime (cas + mojkrok/2) of P;\n" " thdraw symbol rotated angle(thdir(P,t)) shifted (point t of P + .25u * unitvector(thdir(P,t) rotated -90));\n" " old_bound:=bound rotated angle(thdir(P,t)) shifted (point t of P + .25u * unitvector(thdir(P,t) rotated -90));\n" "\n" " forever:\n" " t := arctime (cas + mojkrok/2) of P;\n" " test_bound:= bound rotated angle(thdir(P,t)) shifted (point t of P + .25u * unitvector(thdir(P,t) rotated -90));\n" " if xpart ((old_bound) intersectiontimes (test_bound))<0:\n" " if xpart (P intersectiontimes (test_bound))<0:\n" " thdraw symbol rotated angle(thdir(P,t)) shifted (point t of P + .25u * unitvector(thdir(P,t) rotated -90));\n" " old_bound:=bound rotated angle(thdir(P,t)) shifted (point t of P + .25u * unitvector(thdir(P,t) rotated -90));\n" " fi;\n" " fi;\n" " cas := cas + mojkrok;\n" " exitif cas > dlzka - (2*mojkrok/3); % for rounding errors\n" " endfor;\n" " thdraw P;\n" "enddef;\n" "\n" "\n" "def l_wall_underlying_AUT (expr P) = \n" " T:=identity;\n" " pickup PenA;\n" " laenge:= arclength P;\n" " t1 := arctime (0.5u) of P;\n" " t2 := arctime (laenge-.5u) of P;\n" " thdraw (subpath (t1,t2) of P) dashed evenly scaled optical_zoom;\n" "enddef;\n" "\n" "\n" "def l_wall_overlying_AUT (expr P) = \n" " T:=identity;\n" " laenge:= arclength P;\n" " t1 := arctime (0.25u) of P;\n" " t2 := arctime (laenge-.25u) of P;\n" " t3 :=arctime (laenge) of P;\n" " pickup pensquare scaled (3.5*u/10);\n" " thdraw (subpath (t1,t2) of P) withcolor background;\n" " pickup PenA;\n" " thdraw subpath(0,t1) of P; \n" " thdraw subpath(t2,t3) of P;\n" " thdraw (subpath (t1,t2) of P) dashed dashpattern(on 2bp off 2bp on .5bp off 2bp on 2bp) scaled optical_zoom;\n" "enddef;\n" "\n" "def l_wall_moonmilk_AUT (expr P) = \n" " T:=identity;\n" " laenge:= arclength P;\n" " symsize:=adjust_step(laenge,0.8u);\n" " circle_width:=symsize/2;\n" " cur:=(symsize-circle_width)/2;\n" " pickup PenC;\n" " forever:\n" " t1 := arctime (cur) of P;\n" " t2 := arctime (cur + circle_width) of P;\n" " thdraw (point t1 of P){dir (angle(thdir(P,t1)) + 90)} ..\n" " {dir (angle(thdir(P,t2)) - 90)}(point t2 of P);\n" " cur := cur + symsize;\n" " exitif cur > laenge + (symsize / 3); % for rounding errors\n" " endfor;\n" " pickup PenA;\n" " thdraw P;\n" "enddef;\n" "\n" "def l_wall_flowstone_AUT (expr P) = \n" " T:=identity;\n" " laenge:= arclength P;\n" " symsize:=adjust_step(laenge,0.8u);\n" " circle_width:=symsize/2;\n" " cur:=(symsize-circle_width)/2;\n" " pickup PenC;\n" " forever:\n" " t1 := arctime (cur) of P;\n" " t2 := arctime (cur + circle_width) of P;\n" " thdraw (point t1 of P){dir (angle(thdir(P,t1)) + 90)} ..\n" " {dir (angle(thdir(P,t2)) - 90)}(point t2 of P);\n" " thfill (point t1 of P){dir (angle(thdir(P,t1)) + 90)} ..\n" " {dir (angle(thdir(P,t2)) - 90)}(point t2 of P) --\n" " (point t1 of P)--cycle;\n" " cur := cur + symsize;\n" " exitif cur > laenge + (symsize / 3); % for rounding errors\n" " endfor;\n" " pickup PenA;\n" " thdraw P;\n" "enddef;\n" "\n" "def l_pit_AUT (expr P) =\n" " T:=identity;\n" " laenge:= arclength P;\n" " symsize:=adjust_step(laenge,0.5u);\n" " triangle_width:=symsize/2;\n" " cur:=(symsize-triangle_width)/2;\n" " pickup PenC;\n" " forever:\n" " t1 := arctime (cur) of P;\n" " t := arctime (cur + triangle_width/2) of P;\n" " t2 := arctime (cur + triangle_width) of P;\n" " if ATTR__height >= 10:\n" " thfill (subpath (t1,t2) of P) -- \n" " ((point t of P) + symsize/2 * unitvector(thdir(P,t) rotated 90)) -- \n" " cycle;\n" " else:\n" " thclean (subpath (t1,t2) of P) -- \n" " ((point t of P) + symsize/2 * unitvector(thdir(P,t) rotated 90)) -- \n" " cycle;\n" " thdraw (point t2 of P) --((point t of P) + symsize/2 * unitvector(thdir(P,t) rotated 90)) -- \n" " (point t1 of P);\n" " fi;\n" " cur := cur + symsize;\n" " exitif cur > laenge - (1*symsize/3); % for rounding errors\n" " t1:=arctime (cur) of P;\n" " endfor;\n" " thdraw P;\n" "enddef;\n" "\n" "\n" "let l_overhang_AUT = l_pit_AUT;\n" "\n" "let l_floorstep_AUT = l_floorstep_UIS;\n" "\n" "let l_contour_AUT =l_contour_SKBB;\n" "\n" "def l_flowstone_AUT (expr P) = \n" " T:=identity;\n" " pickup PenC;\n" " thdraw P dashed evenly scaled optical_zoom;\n" "enddef;\n" "\n" "def l_survey_cave_AUT (expr P) =\n" " T:=identity;\n" " pair zz[];\n" " pickup PenD;\n" " thdraw P;\n" "enddef;\n" "\n" "%% points\n" "\n" "def p_stalactite_AUT(expr pos,theta,sc,al) =\n" " pickup PenC;\n" " if ATTR__elevation:\n" " U:=(.15u, .4u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " thdraw (0,-.4u) -- (0,.15u) -- (-.15u,.4u);\n" " thdraw (0,.15u) -- (.15u,.4u);\n" " else:\n" " U:=(.175u, .175u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " thclean fullcircle scaled 0.35u;\n" " thdraw fullcircle scaled 0.35u;\n" " fi;\n" "enddef;\n" "\n" "let p_icestalactite_AUT = p_stalactite_AUT;\n" "\n" "def p_stalagmite_AUT(expr pos,theta,sc,al) =\n" " pickup PenC;\n" " if ATTR__elevation:\n" " U:=(.15u,.4u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " thdraw (0,.4u) -- (0,-.15u) -- (-.15u,-.4u);\n" " thdraw (0,-.15u) -- (.15u,-.4u);\n" " else:\n" " U:=(.15u,.15u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " thfill fullcircle scaled 0.3u;\n" " fi;\n" "enddef;\n" "\n" "let p_icestalagmite_AUT = p_stalagmite_AUT;\n" "\n" "def p_pillar_AUT(expr pos,theta,sc,al) =\n" " pickup PenC;\n" " if ATTR__elevation:\n" " U:=(.15u,.4u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " thdraw (0,.15u)--(0,-.15u);\n" " thdraw (-.15u,-.4u)--(0,-.15u)--(.15u,-.4u);\n" " thdraw (-.15u,.4u)--(0,.15u)--(.15u,.4u);\n" " else:\n" " U:=(.225u,.225u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " thclean fullcircle scaled 0.45u;\n" " thdraw fullcircle scaled 0.45u;\n" " thfill fullcircle scaled 0.3u;\n" " fi;\n" "enddef;\n" "\n" "let p_icepillar_AUT = p_pillar_AUT;\n" "\n" "def p_crystal_AUT (expr pos,theta,sc,al)=\n" " U:=(.35u,.35u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " \n" " pickup PenC;\n" " p := ((-.35*u,0)--(.35*u,0));\n" " thdraw p;\n" " thdraw p rotated (45);\n" " thdraw p rotated (90);\n" " thdraw p rotated (135);\n" " \n" " thdrawoptions();\n" "\n" "enddef;\n" "\n" "def p_spring_AUT (expr pos,theta,sc,al)=\n" " U:=(.3u,.2u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (-.3u,.1u)..(0,-.1u)..(.3u,.1u);\n" "enddef;\n" "\n" "\n" "def p_sink_AUT (expr pos,theta,sc,al)=\n" " U:=(.3u,.2u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (-.3u,-.1u)..(0,.1u)..(.3u,-.1u);\n" "enddef;\n" "\n" "def p_breakdownchoke_AUT (expr pos,theta,sc,al)=\n" " U:=(.4u,.4u);\n" " T:=identity rotated -theta aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thclean (-.4u,-.4u)--(.4u,-.4u)--(.4u,.4u)--(-.4u,.4u)--cycle;\n" " thdraw (-.4u,-.4u)--(.4u,-.4u)--(.4u,.4u)--(-.4u,.4u)--cycle;\n" " thdraw (-.21u,.305u)--(.0u,-.305u)--(.21u,.305u);\n" "enddef;\n" "\n" "def p_sand_AUT (expr pos,theta,sc,al)=\n" " U:=(.2u,.2u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " p:= origin -- (0.01u,0.01u);\n" " for i=-0.1u step 0.2u until .15u:\n" " for j=-0.1u step 0.2u until .15u:\n" " thdraw p rotated uniformdeviate(360) \n" " shifted ((i,j) randomized 0.09u);\n" " endfor;\n" " endfor;\n" " thdrawoptions();\n" "enddef;\n" "\n" "let p_clay_AUT = p_sand_AUT;\n" "\n" "def p_pebbles_AUT (expr pos,theta,sc,al)=\n" " U:=(.4u,.4u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " path qq;\n" " for i=-0.15u step 0.3u until .2u:\n" " for j=-0.15u step 0.3u until .2u:\n" " qq := (superellipse((.1u,0),(0,.05u),(-.1u,0),(0,.-.05u),.75))\n" " randomized (u/45)\n" " scaled (uniformdeviate(0.4)+.55)\n" " rotated uniformdeviate(360) \n" " shifted ((i,j) randomized 0.15u);\n" " thdraw qq;\n" " endfor;\n" " endfor;\n" "enddef;\n" "\n" "def p_debris_AUT (expr pos,theta,sc,al)=\n" " U:=(.5u,.5u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " path block,q;\n" " block := ((-.15u,-.15u)--(.15u,-.15u)--(.3u,0.01u)--(.15u,.15u)--(-.15u,.15u)--cycle) ;\n" " \n" " q:= (punked (block randomized (0.15u))) rotated uniformdeviate(360) scaled (uniformdeviate(0.3)+0.3) shifted (0.0u,0.15u);\n" " thclean q; thdraw q;\n" " \n" " q:= (punked (block randomized (0.15u))) rotated uniformdeviate(360) scaled (uniformdeviate(0.5)+0.7) shifted (-0.15u,-0.15u);\n" " thclean q; thdraw q;\n" "\n" " q:= (punked (block randomized (0.15u))) rotated uniformdeviate(360) shifted (0.15u,-0.15u);\n" " thclean q; thdraw q;\n" " \n" "enddef;\n" "\n" "def p_blocks_AUT (expr pos,theta,sc,al)=\n" " U:=(u,u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" "\n" " path block,q;\n" " block := ((-.25u,-.25u)--(.25u,-.25u)--(.5u,0.01u)--(.25u,.25u)--(-.25u,.25u)--cycle) ;\n" " \n" " q:= (punked (block randomized (0.3u))) rotated uniformdeviate(360) scaled (uniformdeviate(0.3)+0.3) shifted (0.0u,0.25u);\n" " thclean q; thdraw q;\n" " \n" " q:= (punked (block randomized (0.3u))) rotated uniformdeviate(360) scaled (uniformdeviate(0.5)+0.7) shifted (-0.25u,-0.25u);\n" " thclean q; thdraw q;\n" "\n" " q:= (punked (block randomized (0.3u))) rotated uniformdeviate(360) shifted (0.25u,-0.25u);\n" " thclean q; thdraw q;\n" " \n" "enddef;\n" "\n" "def p_water_AUT (expr pos,theta,sc,al)=\n" " U:=(.425u,.3u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenD;\n" " p:=fullcircle xscaled (.85u) yscaled (.6u);\n" " thfill p withcolor col_water_bg;\n" " thfill p withpattern pattern_water_AUT;\n" " thdraw p;\n" "enddef;\n" "\n" "def p_ice_AUT (expr pos,theta,sc,al)=\n" " U:=(.6u,.4u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " p:=(-.15u,.0u) -- (0.15u,.0u);\n" " thdraw p rotated 90;\n" " thdraw p shifted (0.45u,.0u);\n" " thdraw p shifted (-0.45u,.0u);\n" " \n" " thdraw p rotated 90 shifted (-0.45u,0.25u);\n" " thdraw p shifted (0u,0.25u);\n" " thdraw p rotated 90 shifted (0.45u,.25u);\n" "enddef;\n" "\n" "def p_entrance_AUT (expr pos,theta,sc,al)=\n" " U:=(.3u,.75u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " path slice;\n" " for i= -0.5 step 0.01 until 0.5:\n" " slice:= (-.3u*(0.5-i),1.5*i*u)--(0,.75u)--(.3u*(0.5-i),1.5i*u)--cycle;\n" " thfill slice withcolor (min(0.95,0.5-1.75i),min(0.95,.5-1.75i),min(0.95,.5-1.75i));\n" " endfor;\n" " thdraw ((-.3u,-0.75u)--(0,.75u)--(.3u,-0.75u)--cycle);\n" "enddef;\n" " \n" "def p_gradient_AUT (expr pos,theta,sc,al)=\n" " U:=(.15u,u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thdraw (0,-0.5u)--(0,0.5u);\n" " p:=(-.15u,.3u)--(0,0.7u)--(.15u,.3u)--cycle;\n" " thfill p;\n" " thdraw p;\n" "enddef;\n" "\n" "def p_airdraught_AUT (expr pos,theta,sc,al)=\n" " U:=(.2u,u);\n" " T:=identity aligned al rotated theta scaled 1 shifted pos;\n" " pickup PenC;\n" " thdraw (0,.5u)--(0,-0.8u);\n" "\tp:=(-.2u,.2u)--(0,.55u)--(.2u,.2u)--cycle;\n" "\tthfill p;\n" "\tfor i:=1 upto round(3+2*mlog(sc)/mlog 2):\n" "\t thdraw (0,-(1-0.2i)*u)--(.2u,-(1-0.2(i-1))*u);\n" "\t thdraw (0,-(1-0.2i)*u)--(-.2u,-(1-0.2(i-1))*u);\n" "\tendfor;\n" "enddef;\n" "\n" "def p_station_temporary_AUT (expr pos)=\n" " T:=identity shifted pos;\n" " pickup PenD;\n" " thclean fullcircle scaled 0.15u;\n" " thdraw fullcircle scaled 0.15u;\n" "enddef;\n" "\n" "let p_station_painted_AUT = p_station_temporary_AUT ;\n" "let p_station_fixed_AUT = p_station_temporary_AUT ;\n" "\n" "def p_claychoke_AUT (expr pos,theta,sc,al)=\n" " U:=(.4u,.4u);\n" " T:=identity rotated -theta aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " thclean (-.4u,-.4u)--(.4u,-.4u)--(.4u,.4u)--(-.4u,.4u)--cycle;\n" " thdraw (-.4u,-.4u)--(.4u,-.4u)--(.4u,.4u)--(-.4u,.4u)--cycle;\n" " thdraw (-.15u,.3u)--(-.15u,-.25u)--(.15u,-.25u);\n" "enddef;\n" "\n" "def p_claytree_AUT (expr pos,theta,sc,al)=\n" " U:=(.55u,.6u);\n" " T:=identity aligned al rotated theta scaled sc shifted pos;\n" " pickup PenC;\n" " p:= (-.15u,.15u)--(.0u,.6u)--(.15u,.15u);\n" " thdraw p ;\n" " thdraw p shifted (-.4u,-.3u);\n" " thdraw p shifted (.4u,-.2u) ;\n" "enddef;\n" "\n" "\n\n\n%%%%% ENDINPUT uAUT %%%%%\n\n\n" "\n" "\n\n\n%%%%% INPUT thTrans %%%%%\n\n\n" "% default translations\n" "\n" "let p_station_fixed = p_station_fixed_ASF;\n" "let p_station_painted = p_station_painted_SKBB;\n" "let p_station_natural = p_station_natural_ASF; \n" "let p_station_temporary = p_station_temporary_ASF;\n" "\n" "let p_waterflow_paleo = p_waterflow_paleo_UIS;\n" "let p_waterflow_permanent = p_waterflow_permanent_UIS;\n" "let p_waterflow_intermittent = p_waterflow_intermittent_UIS;\n" "\n" "let p_stalactite = p_stalactite_UIS;\n" "let p_stalagmite = p_stalagmite_UIS;\n" "let p_pillar = p_pillar_UIS;\n" "let p_icestalactite = p_icestalactite_AUT;\n" "let p_icestalagmite = p_icestalagmite_AUT;\n" "let p_icepillar = p_icepillar_AUT;\n" "let p_curtain = p_curtain_UIS;\n" "let p_helictite = p_helictite_UIS;\n" "let p_sodastraw = p_sodastraw_UIS;\n" "let p_crystal = p_crystal_UIS;\n" "let p_flowstone = p_flowstone_UIS;\n" "let p_moonmilk = p_moonmilk_UIS;\n" "let p_wallcalcite = p_wallcalcite_UIS;\n" "let p_popcorn = p_popcorn_UIS;\n" "let p_disk = p_disk_UIS;\n" "let p_gypsum = p_gypsum_NSS;\n" "let p_aragonite = p_aragonite_NSS;\n" "let p_cavepearl = p_cavepearl_SKBB;\n" "let p_gypsumflower = p_gypsumflower_NSS;\n" "let p_rimstonepool = p_rimstonepool_ASF;\n" "let p_rimstonedam = p_rimstonedam_ASF;\n" "let p_anastomosis = p_anastomosis_UIS;\n" "let p_karren = p_karren_UIS;\n" "let p_scallop = p_scallop_UIS;\n" "let p_flute = p_flute_UIS;\n" "let p_raft = p_raft_NSS;\n" "let p_raftcone = p_raftcone_NSS;\n" "let p_spring = p_spring_SKBB;\n" "let p_sink = p_sink_SKBB;\n" "let p_narrowend = p_narrowend_UIS;\n" "let p_lowend = p_lowend_UIS;\n" "let p_flowstonechoke = p_flowstonechoke_NSS;\n" "let p_breakdownchoke = p_breakdownchoke_NSS;\n" "let p_claychoke = p_claychoke_AUT;\n" "let p_claytree = p_claytree_AUT;\n" "let p_bedrock = p_bedrock_ASF;\n" "let p_clay = p_clay_SKBB; \n" "let p_sand = p_sand_UIS;\n" "let p_pebbles = p_pebbles_UIS;\n" "let p_debris = p_debris_UIS;\n" "let p_blocks = p_blocks_UIS;\n" "let p_water = p_water_UIS;\n" "let p_ice = p_ice_UIS;\n" "let p_snow = p_snow_SKBB;\n" "let p_archeomaterial = p_archeomaterial_UIS;\n" "let p_paleomaterial = p_paleomaterial_UIS;\n" "let p_guano = p_guano_UIS;\n" "let p_vegetabledebris = p_vegetabledebris_ASF;\n" "let p_root = p_root_ASF;\n" "let p_entrance = p_entrance_UIS;\n" "let p_gradient = p_gradient_UIS;\n" "let p_rope = p_rope_SKBB; \n" "let p_fixedladder = p_fixedladder_SKBB; \n" "let p_ropeladder = p_ropeladder_SKBB; \n" "let p_steps = p_steps_SKBB; \n" "let p_bridge = p_bridge_SKBB; \n" "let p_traverse = p_traverse_SKBB;\n" "let p_anchor = p_anchor_SKBB;\n" "let p_camp = p_camp_SKBB;\n" "let p_dig = p_dig_UIS;\n" "let p_noequipment = p_noequipment_SKBB;\n" "let p_sectionarrow = p_sectionarrow_SKBB;\n" "let p_continuation = p_continuation_UIS;\n" "let p_airdraught = p_airdraught_UIS;\n" "let p_airdraught_winter = p_airdraught_winter_UIS;\n" "let p_airdraught_summer = p_airdraught_summer_UIS;\n" "let p_station = p_station_SKBB;\n" "let p_handrail = p_handrail_SKBB;\n" "let p_viaferrata = p_viaferrata_SKBB;\n" "let p_stalactites = p_stalactites_UIS;\n" "let p_stalagmites = p_stalagmites_UIS;\n" "let p_pillars = p_pillars_UIS;\n" "\n" "let l_wall_bedrock = l_wall_bedrock_UIS;\n" "let l_wall_sand = l_wall_sand_SKBB;\n" "let l_wall_clay = l_wall_clay_SKBB;\n" "let l_wall_pebbles = l_wall_pebbles_SKBB;\n" "let l_wall_debris = l_wall_debris_SKBB;\n" "let l_wall_blocks = l_wall_blocks_SKBB;\n" "let l_wall_ice = l_wall_ice_SKBB;\n" "let l_wall_underlying = l_wall_underlying_UIS;\n" "let l_wall_unsurveyed = l_wall_unsurveyed_SKBB;\n" "let l_wall_presumed = l_wall_presumed_UIS;\n" "%let l_wall_invisible = l_wall_invisible;\n" "let l_wall_pit = l_wall_pit_AUT;\n" "let l_wall_overlying = l_wall_overlying_AUT;\n" "let l_wall_flowstone = l_wall_flowstone_AUT;\n" "let l_wall_moonmilk = l_wall_moonmilk_AUT;\n" "\n" "let l_waterflow_permanent = l_waterflow_permanent_UIS;\n" "let l_waterflow_intermittent = l_waterflow_intermittent_SKBB;\n" "let l_waterflow_conjectural = l_waterflow_conjectural_SKBB;\n" "\n" "let l_border_visible = l_border_visible_SKBB;\n" "let l_border_temporary = l_border_temporary_SKBB;\n" "let l_border_presumed = l_border_presumed_SKBB;\n" "%let l_border_invisible = l_border_invisible;\n" "\n" "let l_floorstep = l_floorstep_UIS;\n" "let l_pit = l_pit_UIS;\n" "let l_ceilingstep = l_ceilingstep_SKBB;\n" "let l_chimney = l_chimney_UIS;\n" "let l_overhang = l_overhang_SKBB;\n" "let l_slope = l_slope_SKBB;\n" "let l_ceilingmeander = l_ceilingmeander_SKBB;\n" "let l_floormeander = l_floormeander_SKBB;\n" "let l_contour = l_contour_SKBB;\n" "let l_rockborder = l_rockborder_UIS;\n" "let l_rockedge = l_rockedge_UIS;\n" "let l_flowstone = l_flowstone_UIS;\n" "let l_moonmilk = l_moonmilk_UIS;\n" "let l_section = l_section_SKBB;\n" "let l_survey_cave = l_survey_cave_SKBB;\n" "let l_survey_surface = l_survey_surface_SKBB;\n" "let l_arrow = l_arrow_SKBB;\n" "let l_gradient = l_gradient_UIS;\n" "let l_mapconnection = l_mapconnection_SKBB;\n" "let l_handrail = l_handrail_SKBB;\n" "let l_steps = l_steps_SKBB;\n" "let l_fixedladder = l_fixedladder_SKBB;\n" "let l_ropeladder = l_ropeladder_SKBB;\n" "let l_rope = l_rope_SKBB;\n" "let l_viaferrata = l_viaferrata_SKBB;\n" "\n" "let a_water = a_water_UIS;\n" "let a_sump = a_sump_UIS;\n" "let a_sand = a_sand_UIS;\n" "let a_debris = a_debris_SKBB;\n" "let a_blocks = a_blocks_SKBB;\n" "let a_snow = a_snow_SKBB;\n" "let a_ice = a_ice_SKBB;\n" "let a_pebbles = a_pebbles_SKBB;\n" "let a_clay = a_clay_SKBB;\n" "let a_bedrock = a_bedrock_SKBB;\n" "let a_flowstone = a_flowstone_ASF;\n" "let a_moonmilk = a_moonmilk_SKBB;\n" "let a_dimensions = a_dimensions_SKBB;\n" "\n" "let s_northarrow = s_northarrow_SKBB;\n" "let s_scalebar = s_scalebar_SKBB;\n" "let s_hgrid = s_hgrid_SM;\n" "let s_vgrid = s_vgrid_SM;\n" "\n\n\n%%%%% ENDINPUT thTrans %%%%%\n\n\n" "\n" "nonstopmode;\n" "initsymbol(\"s_hgrid_SM\");\n" "initsymbol(\"s_northarrow_SKBB\");\n" "initsymbol(\"s_scalebar_SKBB\");\n" "initsymbol(\"s_scalebar_SM\");\n" "initsymbol(\"s_vgrid_SM\");\n" "initsymbol(\"p_airdraught_AUT\");\n" "initsymbol(\"p_airdraught_UIS\");\n" "initsymbol(\"p_airdraught_summer_UIS\");\n" "initsymbol(\"p_airdraught_winter_UIS\");\n" "initsymbol(\"p_anastomosis_UIS\");\n" "initsymbol(\"p_anchor_SKBB\");\n" "initsymbol(\"p_aragonite_NSS\");\n" "initsymbol(\"p_archeomaterial_UIS\");\n" "initsymbol(\"p_bedrock_ASF\");\n" "initsymbol(\"p_blocks_AUT\");\n" "initsymbol(\"p_blocks_UIS\");\n" "initsymbol(\"p_breakdownchoke_AUT\");\n" "initsymbol(\"p_breakdownchoke_NSS\");\n" "initsymbol(\"p_bridge_SKBB\");\n" "initsymbol(\"p_camp_SKBB\");\n" "initsymbol(\"p_cavepearl_SKBB\");\n" "initsymbol(\"p_clay_AUT\");\n" "initsymbol(\"p_clay_SKBB\");\n" "initsymbol(\"p_claychoke_AUT\");\n" "initsymbol(\"p_claytree_AUT\");\n" "initsymbol(\"p_continuation_UIS\");\n" "initsymbol(\"p_crystal_AUT\");\n" "initsymbol(\"p_crystal_UIS\");\n" "initsymbol(\"p_curtain_UIS\");\n" "initsymbol(\"p_debris_AUT\");\n" "initsymbol(\"p_debris_UIS\");\n" "initsymbol(\"p_dig_UIS\");\n" "initsymbol(\"p_disk_UIS\");\n" "initsymbol(\"p_entrance_AUT\");\n" "initsymbol(\"p_entrance_UIS\");\n" "initsymbol(\"p_fixedladder_SKBB\");\n" "initsymbol(\"p_flowstone_UIS\");\n" "initsymbol(\"p_flowstonechoke_NSS\");\n" "initsymbol(\"p_flute_UIS\");\n" "initsymbol(\"p_gradient_AUT\");\n" "initsymbol(\"p_gradient_BCRA\");\n" "initsymbol(\"p_gradient_NSS\");\n" "initsymbol(\"p_gradient_SKBB\");\n" "initsymbol(\"p_gradient_UIS\");\n" "initsymbol(\"p_guano_UIS\");\n" "initsymbol(\"p_gypsum_NSS\");\n" "initsymbol(\"p_gypsumflower_NSS\");\n" "initsymbol(\"p_handrail_SKBB\");\n" "initsymbol(\"p_helictite_UIS\");\n" "initsymbol(\"p_ice_AUT\");\n" "initsymbol(\"p_ice_UIS\");\n" "initsymbol(\"p_icepillar_AUT\");\n" "initsymbol(\"p_icestalactite_AUT\");\n" "initsymbol(\"p_icestalagmite_AUT\");\n" "initsymbol(\"p_karren_UIS\");\n" "initsymbol(\"p_lowend_NSS\");\n" "initsymbol(\"p_lowend_UIS\");\n" "initsymbol(\"p_moonmilk_UIS\");\n" "initsymbol(\"p_narrowend_UIS\");\n" "initsymbol(\"p_noequipment_SKBB\");\n" "initsymbol(\"p_paleomaterial_UIS\");\n" "initsymbol(\"p_pebbles_AUT\");\n" "initsymbol(\"p_pebbles_UIS\");\n" "initsymbol(\"p_pillar_AUT\");\n" "initsymbol(\"p_pillar_UIS\");\n" "initsymbol(\"p_pillars_UIS\");\n" "initsymbol(\"p_popcorn_UIS\");\n" "initsymbol(\"p_raft_NSS\");\n" "initsymbol(\"p_raftcone_NSS\");\n" "initsymbol(\"p_rimstonedam_ASF\");\n" "initsymbol(\"p_rimstonepool_ASF\");\n" "initsymbol(\"p_root_ASF\");\n" "initsymbol(\"p_rope_SKBB\");\n" "initsymbol(\"p_ropeladder_SKBB\");\n" "initsymbol(\"p_sand_AUT\");\n" "initsymbol(\"p_sand_UIS\");\n" "initsymbol(\"p_scallop_UIS\");\n" "initsymbol(\"p_sink_AUT\");\n" "initsymbol(\"p_sink_SKBB\");\n" "initsymbol(\"p_snow_SKBB\");\n" "initsymbol(\"p_sodastraw_UIS\");\n" "initsymbol(\"p_spring_AUT\");\n" "initsymbol(\"p_spring_SKBB\");\n" "initsymbol(\"p_stalactite_AUT\");\n" "initsymbol(\"p_stalactite_UIS\");\n" "initsymbol(\"p_stalactites_UIS\");\n" "initsymbol(\"p_stalagmite_AUT\");\n" "initsymbol(\"p_stalagmite_UIS\");\n" "initsymbol(\"p_stalagmites_UIS\");\n" "initsymbol(\"p_station_SKBB\");\n" "initsymbol(\"p_station_fixed_ASF\");\n" "initsymbol(\"p_station_fixed_AUT\");\n" "initsymbol(\"p_station_natural_ASF\");\n" "initsymbol(\"p_station_painted_AUT\");\n" "initsymbol(\"p_station_painted_SKBB\");\n" "initsymbol(\"p_station_temporary_ASF\");\n" "initsymbol(\"p_station_temporary_AUT\");\n" "initsymbol(\"p_station_temporary_SKBB\");\n" "initsymbol(\"p_steps_SKBB\");\n" "initsymbol(\"p_traverse_SKBB\");\n" "initsymbol(\"p_vegetabledebris_ASF\");\n" "initsymbol(\"p_viaferrata_SKBB\");\n" "initsymbol(\"p_wallcalcite_UIS\");\n" "initsymbol(\"p_water_AUT\");\n" "initsymbol(\"p_water_UIS\");\n" "initsymbol(\"p_waterflow_intermittent_UIS\");\n" "initsymbol(\"p_waterflow_paleo_UIS\");\n" "initsymbol(\"p_waterflow_permanent_UIS\");\n" "initsymbol(\"l_arrow_SKBB\");\n" "initsymbol(\"l_border_presumed_SKBB\");\n" "initsymbol(\"l_border_temporary_SKBB\");\n" "initsymbol(\"l_border_visible_SKBB\");\n" "initsymbol(\"l_ceilingmeander_NZSS\");\n" "initsymbol(\"l_ceilingmeander_SKBB\");\n" "initsymbol(\"l_ceilingmeander_UIS\");\n" "initsymbol(\"l_ceilingstep_NZSS\");\n" "initsymbol(\"l_ceilingstep_SKBB\");\n" "initsymbol(\"l_ceilingstep_UIS\");\n" "initsymbol(\"l_chimney_NZSS\");\n" "initsymbol(\"l_chimney_UIS\");\n" "initsymbol(\"l_contour_AUT\");\n" "initsymbol(\"l_contour_SKBB\");\n" "initsymbol(\"l_contour_UIS\");\n" "initsymbol(\"l_fixedladder_SKBB\");\n" "initsymbol(\"l_floormeander_SKBB\");\n" "initsymbol(\"l_floorstep_AUT\");\n" "initsymbol(\"l_floorstep_UIS\");\n" "initsymbol(\"l_flowstone_AUT\");\n" "initsymbol(\"l_flowstone_UIS\");\n" "initsymbol(\"l_gradient_BCRA\");\n" "initsymbol(\"l_gradient_UIS\");\n" "initsymbol(\"l_handrail_SKBB\");\n" "initsymbol(\"l_mapconnection_SKBB\");\n" "initsymbol(\"l_moonmilk_UIS\");\n" "initsymbol(\"l_overhang_AUT\");\n" "initsymbol(\"l_overhang_SKBB\");\n" "initsymbol(\"l_pit_AUT\");\n" "initsymbol(\"l_pit_UIS\");\n" "initsymbol(\"l_rockborder_UIS\");\n" "initsymbol(\"l_rockedge_UIS\");\n" "initsymbol(\"l_rope_SKBB\");\n" "initsymbol(\"l_ropeladder_SKBB\");\n" "initsymbol(\"l_section_SKBB\");\n" "initsymbol(\"l_slope_BCRA\");\n" "initsymbol(\"l_slope_SKBB\");\n" "initsymbol(\"l_steps_SKBB\");\n" "initsymbol(\"l_survey_cave_AUT\");\n" "initsymbol(\"l_survey_cave_SKBB\");\n" "initsymbol(\"l_survey_cave_UIS\");\n" "initsymbol(\"l_survey_surface_SKBB\");\n" "initsymbol(\"l_viaferrata_SKBB\");\n" "initsymbol(\"l_wall_bedrock_UIS\");\n" "initsymbol(\"l_wall_blocks_AUT\");\n" "initsymbol(\"l_wall_blocks_SKBB\");\n" "initsymbol(\"l_wall_clay_AUT\");\n" "initsymbol(\"l_wall_clay_SKBB\");\n" "initsymbol(\"l_wall_debris_AUT\");\n" "initsymbol(\"l_wall_debris_SKBB\");\n" "initsymbol(\"l_wall_flowstone_AUT\");\n" "initsymbol(\"l_wall_ice_AUT\");\n" "initsymbol(\"l_wall_ice_SKBB\");\n" "initsymbol(\"l_wall_moonmilk_AUT\");\n" "initsymbol(\"l_wall_overlying_AUT\");\n" "initsymbol(\"l_wall_pebbles_AUT\");\n" "initsymbol(\"l_wall_pebbles_SKBB\");\n" "initsymbol(\"l_wall_pit_AUT\");\n" "initsymbol(\"l_wall_presumed_NZSS\");\n" "initsymbol(\"l_wall_presumed_UIS\");\n" "initsymbol(\"l_wall_sand_AUT\");\n" "initsymbol(\"l_wall_sand_SKBB\");\n" "initsymbol(\"l_wall_underlying_AUT\");\n" "initsymbol(\"l_wall_underlying_UIS\");\n" "initsymbol(\"l_wall_unsurveyed_SKBB\");\n" "initsymbol(\"l_waterflow_conjectural_SKBB\");\n" "initsymbol(\"l_waterflow_intermittent_SKBB\");\n" "initsymbol(\"l_waterflow_permanent_UIS\");\n" "initsymbol(\"a_bedrock_SKBB\");\n" "initsymbol(\"a_blocks_AUT\");\n" "initsymbol(\"a_blocks_SKBB\");\n" "initsymbol(\"a_clay_AUT\");\n" "initsymbol(\"a_clay_SKBB\");\n" "initsymbol(\"a_debris_AUT\");\n" "initsymbol(\"a_debris_SKBB\");\n" "initsymbol(\"a_debris_UIS\");\n" "initsymbol(\"a_dimensions_SKBB\");\n" "initsymbol(\"a_flowstone_ASF\");\n" "initsymbol(\"a_ice_AUT\");\n" "initsymbol(\"a_ice_SKBB\");\n" "initsymbol(\"a_moonmilk_SKBB\");\n" "initsymbol(\"a_pebbles_AUT\");\n" "initsymbol(\"a_pebbles_SKBB\");\n" "initsymbol(\"a_sand_AUT\");\n" "initsymbol(\"a_sand_UIS\");\n" "initsymbol(\"a_snow_AUT\");\n" "initsymbol(\"a_snow_SKBB\");\n" "initsymbol(\"a_sump_AUT\");\n" "initsymbol(\"a_sump_SKBB\");\n" "initsymbol(\"a_sump_UIS\");\n" "initsymbol(\"a_water_AUT\");\n" "initsymbol(\"a_water_SKBB\");\n" "initsymbol(\"a_water_UIS\");\n" ; #else const char * thmpost_library = "input therion;"; #endif therion/thmpost.h0000644000076400010400000000032712255660056015145 0ustar userAdministrators/** * @file thmpost.h * * THIS FILE IS GENERATED AUTOMATICALLY, DO NOT MODIFY IT !!! */ #ifndef thmpost_h #define thmpost_h /** * Metapost source file. */ extern const char * thmpost_library; #endif therion/thobjectid.cxx0000644000076400010400000000232010625655142016133 0ustar userAdministrators/** * @file thobjectid.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thobjectid.h" #include bool operator < (const thobjectid & o1, const thobjectid & o2) { if (o1.sid < o2.sid) return true; else if ((o1.sid == o2.sid) && (strcmp(o1.name,o2.name) < 0)) return true; else return false; } therion/thobjectid.h0000644000076400010400000000306610721176276015573 0ustar userAdministrators/** * @file thobjectid.h * Object identifier. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thobjectid_h #define thobjectid_h /** * Therion object identifier. */ class thobjectid { public: const char * name; ///< Object name. unsigned long sid; ///< Survey id. thobjectid() : name(""), sid(0) {}; ///< Standard constructor. /** * Default contructor. * * @param n Object name. * @param svid Survey identifier. */ thobjectid(const char * n, unsigned long svid) : name(n), sid(svid) {}; /** * Comparison operator. */ friend bool operator < (const class thobjectid & o1, const class thobjectid &o2); }; #endif therion/thobjectname.cxx0000644000076400010400000001011710721225140016446 0ustar userAdministrators/** * @file thobjectname.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thobjectname.h" #include "thexception.h" #include "thparse.h" #include "thdatabase.h" #include "thdataobject.h" #include "thsurvey.h" thobjectname::thobjectname() { this->clear(); } void thobjectname::clear() { this->name = NULL; this->survey = NULL; this->psurvey = NULL; this->id = 0; } bool thobjectname::is_empty() { return (this->name == NULL); } void thparse_objectname(thobjectname & ds, thmbuffer * sstore, char * src, thdataobject * psobj) { if ((psobj != NULL) && ((psobj->stnsuff != NULL) || (psobj->stnpref != NULL))) { if (psobj->stnpref != NULL) thdb.buff_tmp = psobj->stnpref; else thdb.buff_tmp = ""; thdb.buff_tmp += src; if (psobj->stnsuff != NULL) thdb.buff_tmp += psobj->stnsuff; src = thdb.buff_tmp.get_buffer(); } ds.name = src; size_t snl = strlen(src), sni; for(sni = 0; sni < snl; sni++, src++) if (*src == '@') { *src = 0; ds.survey = src + 1; break; } if (!th_is_extkeyword(ds.name)) ththrow(("invalid object name -- %s", ds.name)) if (ds.survey != NULL) if (!th_is_keyword_list(ds.survey, '.')) ththrow(("invalid survey name -- %s", ds.survey)); ds.name = sstore->append(ds.name); if (ds.survey != NULL) ds.survey = sstore->append(ds.survey); ds.psurvey = thdb.get_current_survey(); } void fprintf(FILE * fh, thobjectname & ds) { if (ds.name != NULL) fprintf(fh, "%s", ds.name); else fprintf(fh, "-"); if (ds.survey != NULL) fprintf(fh, "@%s", ds.survey); if (ds.id > 0) fprintf(fh, ":%ld", ds.id); } char * thobjectname::print_name() { static thbuffer pname; size_t plen, slen; char * rv; plen = (this->name != NULL ? strlen(this->name) : 0); slen = (this->survey != NULL ? strlen(this->survey) : 0); pname.guarantee(plen + slen + 1); rv = pname.get_buffer(); rv[0] = 0; if ((plen > 0) && (slen > 0)) { sprintf(rv, "%s@%s", this->name, this->survey); } else if (plen > 0) { sprintf(rv, "%s", this->name); } else if (slen > 0) { sprintf(rv, "%s", this->survey); } return rv; } char * thobjectname__print_full_name(const char * oname, thsurvey * psrv, int slevel) { static thbuffer pname; size_t plen, slen, start, cx, tx; int clevel; char * rv; const char * sname; sname = NULL; if (psrv != NULL) sname = psrv->get_full_name(); plen = (oname != NULL ? strlen(oname) : 0); slen = (sname != NULL ? strlen(sname) : 0); pname.guarantee(plen + slen + 1); rv = pname.get_buffer(); rv[0] = 0; if ((plen > 0) && (slen > 0) && (slevel != 0)) { sprintf(rv, "%s@%s", oname, sname); } else if (plen > 0) { sprintf(rv, "%s", oname); } else if ((slen > 0) && (slevel != 0)) { sprintf(rv, "%s", sname); } if ((slen > 0) && (slevel > 0)) { start = (plen > 0 ? plen + 1 : 0); clevel = 0; tx = strlen(rv); for(cx = start; cx < tx; cx++) { if (rv[cx] == '.') { clevel++; if (clevel == slevel) { rv[cx] = 0; break; } } } } return rv; } char * thobjectname::print_full_name(int slevel) { return thobjectname__print_full_name(this->name, this->psurvey, slevel); } therion/thobjectname.h0000644000076400010400000000410410721226670016103 0ustar userAdministrators/** * @file thobjectname.h * Object name class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thobjectname_h #define thobjectname_h #include "thmbuffer.h" #include "therion.h" /** * Survey station class. */ class thobjectname { public: const char * name, ///< Object name. * survey; ///< Survey name. class thsurvey * psurvey; ///< Parent survey. unsigned long id; ///< Object identifier. /** * Standard constructor. */ thobjectname(); /** * Two argument contructor. */ thobjectname(char * n, char * s) : name(n), survey(s), id(0) {} /** * Clear station. */ void clear(); /** * Return true if empty. */ bool is_empty(); /** * Print object name with survey into str. */ char * print_name(); /** * Print object name with survey up to given level into str. */ char * print_full_name(int slevel = -1); }; void thparse_objectname(thobjectname & ds, thmbuffer * sstore, char * src, class thdataobject * psobj = NULL); char * thobjectname__print_full_name(const char * oname, class thsurvey * psrv, int slevel = -1); void fprintf(FILE * fh, thobjectname & ds); #endif therion/thobjectsrc.cxx0000644000076400010400000000207610625655142016336 0ustar userAdministrators/** * @file thobjectsrc.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include #include "thobjectsrc.h" bool thobjectsrc::is_valid() { return (strlen(this->name) > 0); } therion/thobjectsrc.h0000644000076400010400000000277110721175560015763 0ustar userAdministrators/** * @file thobjectsrc.h * Object source class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thobjectsrc_h #define thobjectsrc_h #include /** * Object source class. */ class thobjectsrc { public: const char * name; ///< File name. unsigned long line; ///< File line. class thdataobject * context; ///< Source context. /** * Standard constructor. */ thobjectsrc() : name(""), line(0), context(NULL) {} /** * Parametric constructor. */ thobjectsrc(const char * n, unsigned long ln) : name(n), line(ln), context(NULL) {} bool is_valid(); }; #endif therion/thparse.cxx0000644000076400010400000007077711253633150015500 0ustar userAdministrators/** * @file thparse.cxx * Parsing module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thparse.h" #include "therion.h" #include "thlang.h" #include "thtexfonts.h" #include #include "thinfnan.h" #include "thdatabase.h" #include "thtflength.h" #include "thexception.h" #include "thtexfonts.h" #include #include #include #ifdef THMSVC #define strcasecmp _stricmp #endif #ifdef HAVE_ROUND extern double round(double); /* prototype is often missing... */ # define thround round #else static double thround(double x) { if (x >= 0.0) return floor(x + 0.5); return ceil(x - 0.5); } #endif thmbuffer thparse_mbuff; int thmatch_stok(const char *buffer, const thstok *tab, int tab_size) { int a = 0, b = tab_size - 1, c, r; while (a <= b) { c = unsigned((a + b) / 2); r = strcmp(tab[c].s, buffer); if (r == 0) return tab[c].tok; if (r < 0) a = c + 1; else b = c - 1; } return tab[tab_size].tok; /* no match */ } int thcasematch_stok(const char *buffer, const thstok *tab, int tab_size) { int a = 0, b = tab_size - 1, c, r; while (a <= b) { c = unsigned((a + b) / 2); r = strcasecmp(tab[c].s, buffer); if (r == 0) return tab[c].tok; if (r < 0) a = c + 1; else b = c - 1; } return tab[tab_size].tok; /* no match */ } const char * thmatch_tstring(int token, const thstok *tab, int tab_size) { int i = 0; while ((i < tab_size) && (tab[i].tok != token)) i++; if (tab[i].tok == token) return tab[i].s; else return ""; /* no match */ } void thsplit_word(thbuffer * dword, thbuffer * drest, const char * src) { long srcl = strlen(src), idx = 0, idx0 = 0; short state = -1; // -1 before, 0 in, 1 out, 2 on the rest, 3 out unsigned char * s1 = NULL, * s2 = (unsigned char *) src; while ((state < 2) && (idx < srcl)) { switch (state) { case -1: if (*s2 > 32) { state = 0; s1 = s2; idx0 = idx; } break; case 0: if (*s2 < 33) { state = 1; dword->strncpy((char *)s1, idx - idx0); } break; case 1: if (*s2 > 32) { state = 2; s1 = s2; idx0 = idx; } } idx++; s2++; } switch (state) { case -1: dword->strcpy(""); drest->strcpy(""); break; case 0: dword->strcpy((char *)s1); drest->strcpy(""); break; case 1: drest->strcpy(""); break; default: idx = srcl; s2 = (unsigned char *) src + idx; while ((idx >= idx0) && (*s2 < 33)) { s2--; idx--; } drest->strncpy((char *) s1, idx - idx0 + 1); } } void thsplit_words(thmbuffer * dest, const char * src) { long srcl = strlen(src), idx = 0, idx0 = 0; dest->clear(); short state = 0; // 0 before, 1 in unsigned char * s1 = NULL, * s2 = (unsigned char *) src; while (idx < srcl) { switch (state) { case 0: if (*s2 > 32) { state = 1; s1 = s2; idx0 = idx; } break; case 1: if (*s2 < 33) { state = 0; dest->appendn((char *) s1, idx - idx0); } } idx++; s2++; } if (state == 1) { dest->append((char *) s1); } } void thsplit_strings(thmbuffer * dest, const char * src, const char separator) { long srcl = strlen(src), idx = 0, idx0 = 0; dest->clear(); short state = 0; // 0 before, 1 in unsigned char * s1 = NULL, * s2 = (unsigned char *) src; while (idx < srcl) { switch (state) { case 0: if (*s2 != separator) { state = 1; s1 = s2; idx0 = idx; } break; case 1: if (*s2 == separator) { state = 0; dest->appendn((char *)s1, idx - idx0); } } idx++; s2++; } if (state == 1) dest->append((char *)s1); } void thsplit_paths(thmbuffer * dest, const char * src, char separator) { long srcl = strlen(src), idx = 0, idx0 = 0; dest->clear(); short state = 0; // 0 before, 1 in unsigned char * s1 = NULL, * s2 = (unsigned char *) src; while (idx < srcl) { switch (state) { case 0: if (*s2 != separator) { state = 1; s1 = s2; idx0 = idx; } break; case 1: if (*s2 == separator) { #ifdef THWIN32 if ((idx - idx0 == 1) && (((src[idx0] >= 'A') && (src[idx0] <= 'Z')) || ((src[idx0] >= 'a') && (src[idx0] <= 'z')))) break; #endif state = 0; dest->appendn((char *)s1, idx - idx0); } } idx++; s2++; } if (state == 1) dest->append((char *)s1); } void thsplit_args_postp_quotes(char * buf) { long bl = strlen(buf), idx = 0; while (idx < bl) { if (*buf == '"') { strcpy(buf, buf+1); bl--; } buf++; idx++; } } void thsplit_args(thmbuffer * dest, const char * src) { long srcl = strlen(src), idx = 0, idx0 = 0; dest->clear(); short state = 0, qlevel = 0; // 0 before, 1 in word, 2 in "", 3 in [] unsigned char * s1 = NULL, * s2 = (unsigned char *) src; bool postp_quotes = false; char * postp_ptr = NULL; while (idx < srcl) { switch (state) { case 0: if (*s2 > 32) { switch (*s2) { case '#': idx = srcl; break; case '"': state = 2; postp_quotes = false; break; case '[': state = 3; qlevel = 1; break; default: state = 1; } s1 = s2; idx0 = idx; } break; case 1: if (*s2 < 33) { state = 0; dest->appendn((char *) s1, idx - idx0); } break; case 3: switch (*s2) { case ']': qlevel--; if (qlevel <= 0) { state = 0; if (idx > (idx0 + 1)) dest->appendn((char *) s1 + 1, idx - idx0 - 1); else dest->appendn("",0); } break; case '[': qlevel++; break; } break; case 2: if (*s2 == '"') { if ((idx + 1 < srcl) && (s2[1] == '"')) { postp_quotes = true; idx++; s2++; break; } else { state = 0; if (idx > (idx0 + 1)) { postp_ptr = dest->appendn((char *) s1 + 1, idx - idx0 - 1); if (postp_quotes) thsplit_args_postp_quotes(postp_ptr); } else dest->appendn("",0); } } } idx++; s2++; } switch (state) { case 1: dest->append((char *) s1); break; case 2: if (idx > (idx0 + 1)) dest->appendn((char *) s1 + 1, idx - idx0 - 1); else dest->appendn("",0); break; case 3: if (idx > (idx0 + 1)) postp_ptr = dest->appendn((char *) s1 + 1, idx - idx0 - 1); if (postp_quotes) thsplit_args_postp_quotes(postp_ptr); else dest->appendn("",0); break; } } void thsplit_fpath(thbuffer * dest, const char * src) { long len = strlen(src); const char * s = src + len++; while ((len > 0) && (*s != '/')) { s--; len--; } dest->strncpy(src, len); } bool th_is_keyword(const char * str) { size_t sl = strlen(str), i; unsigned char * s = (unsigned char *) str; if (sl == 0) return false; else for(i = 0; i < sl; i++, s++) { if ((*s > 96) && (*s < 123)) continue; if ((*s > 64) && (*s < 91)) continue; if ((*s > 46) && (*s < 58)) continue; if (*s == 95) continue; if ((*s == 45) && (i > 0)) continue; return false; } return true; } bool th_is_attr_name(const char * str) { size_t sl = strlen(str), i; unsigned char * s = (unsigned char *) str; if (sl == 0) return false; else for(i = 0; i < sl; i++, s++) { if ((*s > 47) && (*s < 58)) continue; if ((*s > 64) && (*s < 91)) continue; if ((*s > 96) && (*s < 123)) continue; if ((*s == 95) && (i > 0)) continue; return false; } return true; } bool th_is_index(const char * str) { size_t sl = strlen(str), i; unsigned char * s = (unsigned char *) str; if (sl == 0) return false; else for(i = 0; i < sl; i++, s++) { if ((*s > 47) && (*s < 58)) continue; return false; } return true; } bool th_is_keyword_list(const char * str, char sep) { size_t sl = strlen(str), i; unsigned char * s = (unsigned char *) str; if (sl == 0) return false; else for(i = 0; i < sl; i++, s++) { if ((*s > 96) && (*s < 123)) continue; if ((*s > 64) && (*s < 91)) continue; if ((*s > 46) && (*s < 58)) continue; if ((*s == 95) || (*s == 45)) continue; if (*s == sep) continue; return false; } return true; } bool th_is_extkeyword(const char * str) { size_t sl = strlen(str), i; unsigned char * s = (unsigned char *) str; if (sl == 0) return false; else for(i = 0; i < sl; i++, s++) { if ((*s > 96) && (*s < 123)) continue; if ((*s > 64) && (*s < 91)) continue; if ((*s > 46) && (*s < 58)) continue; if ((*s == 95) || (*s == 45)) continue; if (i > 0) { if (*s == 39) continue; if ((*s > 41) && (*s < 48)) continue; } return false; } return true; } void thparse_double(int & sv, double & dv, const char * src) { char * endptr; sv = thmatch_token(src, thtt_special_val); switch (sv) { case TT_SV_NAN: dv = thnan; break; case TT_SV_UP: case TT_SV_PINF: dv = thinf; break; case TT_SV_DOWN: case TT_SV_NINF: dv = - thinf; break; default: errno = 0; dv = strtod(src,&endptr); if ((*endptr == 0) && (errno == 0)) sv = TT_SV_NUMBER; else dv = 0.0; } } void thparse_double_dms(int & sv, double & dv, const char * src) { int ssv; double dms; thsplit_strings(&thparse_mbuff,src,':'); if (thparse_mbuff.get_size() > 0) { thparse_double(sv, dv, thparse_mbuff.get_buffer()[0]); // thprintf("DEG:%lf\n", dv); if (sv == TT_SV_NUMBER) { // ok, mame stupne if (thparse_mbuff.get_size() > 1) { thparse_double(ssv, dms, thparse_mbuff.get_buffer()[1]); // thprintf("MIN:%lf\n", dms); if ((ssv == TT_SV_NUMBER) && (dms >= 0.0) && (dv == double(int(dv)))) { // ok, mame minuty if (dv > 0.0) { dv += dms / 60.0; } else { dv -= dms / 60.0; } if ((dms == double(int(dms))) && (thparse_mbuff.get_size() == 3)) { thparse_double(ssv, dms, thparse_mbuff.get_buffer()[2]); // thprintf("SEC:%lf\n", dms); if ((ssv == TT_SV_NUMBER) && (dms >= 0.0)) { if (dv > 0.0) { dv += dms / 3600.0; } else { dv -= dms / 3600.0; } } else { // error sv = TT_SV_UNKNOWN; } } else if (thparse_mbuff.get_size() >= 3) { // error sv = TT_SV_UNKNOWN; } } else { // nemame nic sv = TT_SV_UNKNOWN; } } } } else { sv = TT_SV_UNKNOWN; dv = 0.0; } // thprintf("\n%s -> %lf\n", src, dv); } void thdecode_c(thbuffer * dest, const char * src) { size_t srcln = strlen(src), srcx = 0; unsigned char * srcp, * dstp; unsigned num; dest->guarantee(srcln * 8 + 1); // check buffer size srcp = (unsigned char*) src; dstp = (unsigned char*) dest->get_buffer(); while (srcx < srcln) { if ((*srcp < 32) || (*srcp > 127)) { *dstp = '"'; dstp++; *dstp = '"'; dstp++; *dstp = '\\'; dstp++; *dstp = 'x'; dstp++; num = *srcp / 16; if (num < 10) *dstp = '0' + num; else *dstp = 'A' + (num - 10); dstp++; num = *srcp % 16; if (num < 10) *dstp = '0' + num; else *dstp = 'A' + (num - 10); dstp++; *dstp = '"'; dstp++; *dstp = '"'; } else { if ((*srcp == '\\') || (*srcp == '"')) { *dstp = '\\'; dstp++; } *dstp = *srcp; } srcx++; srcp++; dstp++; } // end destination string with 0 *dstp = 0; } void thdecode_tcl(thbuffer * dest, const char * src) { size_t srcln = strlen(src), srcx = 0; unsigned char * srcp, * dstp; unsigned num; dest->guarantee(srcln * 8 + 1); // check buffer size srcp = (unsigned char*) src; dstp = (unsigned char*) dest->get_buffer(); while (srcx < srcln) { if ((*srcp < 32) || (*srcp > 127) || (*srcp == '[') || (*srcp == '[') || (*srcp == '"')) { *dstp = '\\'; dstp++; num = *srcp / 64; *dstp = '0' + num; dstp++; num = *srcp % 64; *dstp = '0' + (num/8); dstp++; *dstp = '0' + (num % 8); } else { if ((*srcp == '\\') || (*srcp == '"')) { *dstp = '\\'; dstp++; } *dstp = *srcp; } srcx++; srcp++; dstp++; } // end destination string with 0 *dstp = 0; } void thdecode_mp(thbuffer * dest, const char * src) { size_t srcln = strlen(src), srcx = 0; unsigned char * srcp, * dstp; dest->guarantee(srcln * 8 + 1); // check buffer size srcp = (unsigned char*) src; dstp = (unsigned char*) dest->get_buffer(); while (srcx < srcln) { if (*srcp < 32) { *dstp = ' '; } else { if (*srcp == '"') { *dstp = '"'; dstp++; *dstp = '&'; dstp++; *dstp = 'd'; dstp++; *dstp = 't'; dstp++; *dstp = 't'; dstp++; *dstp = 'o'; dstp++; *dstp = '&'; dstp++; } *dstp = *srcp; } srcx++; srcp++; dstp++; } // end destination string with 0 *dstp = 0; } void thdecode_tex(thbuffer * dest, const char * src) { size_t srcln = strlen(src), srcx = 0; unsigned char * srcp, * dstp; // unsigned num; dest->guarantee(srcln * 8 + 1); // check buffer size srcp = (unsigned char*) src; dstp = (unsigned char*) dest->get_buffer(); while (srcx < srcln) { switch (*srcp) { case '%': case '_': case '&': case '$': case '#': case '@': case '~': case '`': case '^': case '*': case '\\': case '{': case '}': case '|': case '"': *dstp = '\\'; dstp++; *dstp = *srcp; break; default: *dstp = *srcp; break; } srcx++; srcp++; dstp++; } // end destination string with 0 *dstp = 0; } void thdecode_utf2tex(thbuffer * dest, const char * src) { static thbuffer tmpb; tmpb = src; size_t srcln = strlen(src), srcx = 0, tmpl; unsigned char * srcp, * dstp, * wsrcp, *tmpp; dest->strcpy(""); // check buffer size srcp = (unsigned char*) src; dstp = (unsigned char*) tmpb.get_buffer(); while (srcx < srcln) { switch (*srcp) { case '%': case '_': case '(': case ')': case '[': case ']': case '&': case '$': case '#': case '@': case '~': case '`': case '^': case '*': case '\\': case '{': case '}': case '|': case '"': case ' ': case 9: case 12: *dstp = 0; break; default: *dstp = *srcp; break; } srcx++; srcp++; dstp++; } // end destination string with 0 srcx = 0; srcp = (unsigned char*) src; wsrcp = (unsigned char*) tmpb.get_buffer(); unsigned char single[2]; bool isutf8; dstp = &(single[0]); single[1] = 0; // copy word by word while(srcx < srcln) { if (*wsrcp == 0) { single[0] = *srcp; dest->strcat((char*) dstp); srcx++; srcp++; wsrcp++; } else { isutf8 = false; tmpl = 0; // check if there is some character > 127 for(tmpp = wsrcp; *tmpp != 0; tmpp++) { tmpl++; isutf8 = isutf8 || (*tmpp > 127); } if (isutf8) { dest->strcat(utf2tex((char*) wsrcp)); } else { dest->strcat((char*) wsrcp); } srcx+=tmpl; srcp+=tmpl; wsrcp+=tmpl; } } } void thdecode_sql(thbuffer * dest, const char * src) { size_t srcln = strlen(src), srcx = 0; unsigned char * srcp, * dstp; // unsigned num; if ((src == NULL) || (srcln == 0)) { *dest = "NULL"; return; } dest->guarantee(srcln * 8 + 3); // check buffer size srcp = (unsigned char*) src; dstp = (unsigned char*) dest->get_buffer(); *dstp = '\''; dstp++; while (srcx < srcln) { switch (*srcp) { case '\'': *dstp = '\''; dstp++; *dstp = *srcp; break; default: *dstp = *srcp; break; } srcx++; srcp++; dstp++; } // end destination string with 0 *dstp = '\''; dstp++; *dstp = 0; } void thdecode_arg(thbuffer * dest, const char * src) { size_t srcln = strlen(src), srcx; unsigned char * srcp, * dstp; // unsigned num; srcx = 0; srcp = (unsigned char*) src; // rychlo prescanuje, an nenajde whitespace, tak len skopiruje bool quickcpy = true; while (srcx < srcln) { if (*srcp <= 32) { quickcpy = false; break; } srcp++; srcx++; } if (quickcpy) { dest->strcpy(src); return; } // zaciatocna uvodzovka dest->guarantee(srcln * 8 + 3); // check buffer size srcx = 0; srcp = (unsigned char*) src; dstp = (unsigned char*) dest->get_buffer(); *dstp = '"'; dstp++; while (srcx < srcln) { if (*srcp == '"') { *dstp = '"'; dstp++; } *dstp = *srcp; srcx++; srcp++; dstp++; } // end destination string with 0 *dstp = '"'; dstp++; *dstp = 0; } void thparse_altitude(const char * src, double & altv, double & fixv) { thsplit_args(& thdb.db2d.mbf, src); int npar = thdb.db2d.mbf.get_size(); char ** pars = thdb.db2d.mbf.get_buffer(); int sv, ux = 0; bool parsev = true; thtflength lentf; altv = 0.0; fixv = 1.0; if ((npar > 1) && (strcmp(pars[0],"fix") == 0)) { fixv = 0.0; npar--; pars++; } switch (npar) { case 0: parsev = false; break; case 1: break; case 2: ux = 1; break; default: ththrow(("invalid altitude specification -- %s",src)) } if (parsev) { thparse_double(sv,altv,pars[0]); if ((sv != TT_SV_NUMBER) && (sv != TT_SV_NAN)) ththrow(("invalid altitude value -- %s", pars[0])); if (sv == TT_SV_NAN) altv = 0.0; } if ((ux > 0) && (sv != TT_SV_NAN)) { lentf.parse_units(pars[ux]); altv = lentf.transform(altv); } } void thparse_image(const char * fname, double & width, double & height, double & dpi, int & type) { type = TT_IMG_TYPE_UNKNOWN; FILE * pictf = fopen(fname, "rb"); #define picths 2048 size_t phsize; double xdpi, ydpi; unsigned char picth [picths], * scan; size_t sx; width = 0.0; height = 0.0; dpi = 300.0; if (pictf != NULL) { phsize = fread(&(picth[0]), 1, picths, pictf); fclose(pictf); // najde si format a vytiahne informacie if ((picth[0] == 0xFF) && (picth[1] == 0xD8) && (picth[2] == 0xFF) && (picth[3] == 0xE0)) { // JPEG type = TT_IMG_TYPE_JPEG; xdpi = 300.0; ydpi = 300.0; switch (picth[13]) { case 1: xdpi = thround(double(picth[14] * 256.0 + picth[15])); ydpi = thround(double(picth[16] * 256.0 + picth[17])); break; case 2: xdpi = thround(double(picth[14] * 256 + picth[15]) * 2.54); ydpi = thround(double(picth[16] * 256 + picth[17]) * 2.54); break; } if (xdpi != ydpi) { ththrow(("X and Y image resolution not equal -- %s", fname)); } dpi = xdpi; if (dpi < 1.0) { dpi = 300.0; } //for(sx = 0, scan = &(picth[0]); sx < (phsize - 10); sx++, scan++) { // if ((scan[0] == 0xFF) && ((scan[1] == 0xC0) || (scan[1] == 0xC1))) { // height = thround(double(scan[5]) * 256.0 + double(scan[6])); // width = thround(double(scan[7]) * 256.0 + double(scan[8])); // } //} sx = 0; int marker; size_t len; pictf = fopen(fname, "rb"); fread(&(picth[0]), 1, 2, pictf); height = -1.0; width = -1.0; while(getc(pictf) == 255) { marker = getc(pictf); len = 256 * (size_t) getc(pictf) + (size_t) getc(pictf); if ((marker == 0xC0) || (marker == 0xC1)) { getc(pictf); height = thround(double(getc(pictf)) * 256.0 + double(getc(pictf))); width = thround(double(getc(pictf)) * 256.0 + double(getc(pictf))); break; } fseek(pictf, len - 2, SEEK_CUR); } fclose(pictf); if ((height < 0.0) || (width < 0.0)) ththrow(("unable to determine image size -- %s", fname)); } else if ( (picth[0] == 0x89) && (picth[1] == 0x50) && (picth[2] == 0x4E) && (picth[3] == 0x47) && (picth[4] == 0x0D) && (picth[5] == 0x0A) && (picth[6] == 0x1A) && (picth[7] == 0x0A)) { // PNG type = TT_IMG_TYPE_PNG; // najde pHYs za nim 4(x), 4(y), 1(units) = 01-meters, 00-unspec for(sx = 0, scan = &(picth[0]); sx < (phsize - 12); sx++, scan++) { if (strncmp((char *) scan,"pHYs",4) == 0) { xdpi = double(scan[4] * 0x1000000 + scan[5] * 0x10000 + scan[6] * 0x100 + scan[7]); ydpi = double(scan[8] * 0x1000000 + scan[9] * 0x10000 + scan[10] * 0x100 + scan[11]); if (xdpi != ydpi) { ththrow(("X and Y image resolution not equal -- %s", fname)); } switch (scan[12]) { case 1: xdpi = thround(xdpi * 0.0254); break; default: xdpi = 300.0; break; } dpi = xdpi; break; } } width = thround(double(picth[16] * 0x1000000 + picth[17] * 0x10000 + picth[18] * 0x100 + picth[19])); height = thround(double(picth[20] * 0x1000000 + picth[21] * 0x10000 + picth[22] * 0x100 + picth[23])); } else { ththrow(("file format not supported -- %s", fname)) } } else { ththrow(("file not found -- %s", fname)) } #ifdef THDEBUG thprintf("\nIMAGE FILE:%s\n", fname); thprintf( " DPI:%.0f\n", dpi); thprintf( " SIZE:%.0f x %.0f\n\n", width, height); #endif } void thHSV2RGB(double H, double S, double V, double & R, double & G, double & B) { if (S == 0.0) { R = V; G = V; B = V; } else { double var_h = H * 6; int var_i = (int) floor( var_h ); double var_1 = V * ( 1 - S ); double var_2 = V * ( 1 - S * ( var_h - var_i ) ); double var_3 = V * ( 1 - S * ( 1 - ( var_h - var_i ) ) ); switch (var_i) { case 0: R = V ; G = var_3 ; B = var_1 ; break; case 1: R = var_2 ; G = V ; B = var_1 ; break; case 2: R = var_1 ; G = V ; B = var_3 ; break; case 3: R = var_1 ; G = var_2 ; B = V ; break; case 4: R = var_3 ; G = var_1 ; B = V ; break; default: R = V ; G = var_1 ; B = var_2 ; break; } } } void thset_color(int color_map, double index, double total, double & R, double & G, double & B) { switch (color_map) { default: if (total > 0) thHSV2RGB(index / total * 0.833333, 1.0, 1.0, R, G, B); else { R = 1.0; G = 1.0; B = 1.0; } } R = double(int(100 * R)) / 100.0; G = double(int(100 * G)) / 100.0; B = double(int(100 * B)) / 100.0; } void thset_grid( double gorigin, double gsize, double min, double max, double & qstart, long & nquads) { // treba nam najst origin start a quads aby if (min < gorigin) qstart = gorigin - gsize * ceil((gorigin - min) / gsize); else qstart = gorigin + gsize * floor((min - gorigin) / gsize); nquads = long(ceil(max - qstart) / gsize); } const char * thutf82xhtml(const char * src) { static thbuffer tmp; if (src == NULL) return ""; size_t sx, dx, sl = strlen(src); bool inspec; char * res; tmp.guarantee(sl); res = tmp.get_buffer(); inspec = false; for(sx = 0, dx = 0; sx < sl; sx++) { if ((!inspec) && (src[sx] == '<')) { inspec = true; } else if ((inspec) && (src[sx] == '>')) { inspec = false; } else if (!inspec) { res[dx] = src[sx]; dx++; } } res[dx] = 0; return res; } static const char base64_tab[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; void thbase64_encode(const char * fname, FILE * fout) { int llength = 0; char in_buffer[3]; unsigned char out_buffer[5]; out_buffer[4] = 0; FILE * fin; fin = fopen(fname, "rb"); size_t count; do { for (int i = 0; i < 3; i++) in_buffer[i] = '\x0'; for (int i = 0; i < 4; i++) out_buffer[i] = '='; if (fin != NULL) count = fread(in_buffer, 1, 3, fin); else count = 0; unsigned long value = ((unsigned char)in_buffer[0]) << 16 | ((unsigned char)in_buffer[1]) << 8 | ((unsigned char)in_buffer[2]) << 0; out_buffer[0] = base64_tab[(value >> 18) & 0x3F]; out_buffer[1] = base64_tab[(value >> 12) & 0x3F]; if (count > 1) out_buffer[2] = base64_tab[(value >> 6) & 0x3F]; if (count > 2) out_buffer[3] = base64_tab[(value >> 0) & 0x3F]; if (llength >= 76) { fprintf(fout,"\n"); llength = 0; } fprintf(fout,"%s",out_buffer); llength += 4; } while ((fin != NULL) && (!feof(fin))); if (fin != NULL) fclose(fin); } bool thpath_is_absolute(const char * fname) { #ifdef THWIN32 return ((strlen(fname) > 3) && (fname[1] == ':')); #else return ((strlen(fname) > 2) && (fname[0] == '/')); #endif } void thparse_length(int & sv, double & dv, const char * src) { sv = thmatch_token(src, thtt_special_val); if (sv == TT_SV_NAN) { dv = thnan; return; } else { sv = TT_SV_UNKNOWN; } char * units; size_t strl, cx; strl = strlen(src); thtflength lt; static thbuffer plb; char * srcb; plb.strcpy(src); srcb = plb.get_buffer(); // first let's find units index bool has_units = false; units = NULL; for(cx = strl - 1; cx > 0; cx--) { if (has_units) { if (srcb[cx] < 33) srcb[cx] = 0; else break; } else { if ((cx < strl - 1) && (!( ((srcb[cx] >= 'a') && (srcb[cx] <= 'z')) || ((srcb[cx] >= 'A') && (srcb[cx] <= 'Z')) )) ) { units = &(srcb[cx+1]); if (((*units >= 'a') && (*units <= 'z')) || ((*units >= 'A') && (*units <= 'Z'))) { has_units = true; } else { units = NULL; } } if (srcb[cx] < 33) srcb[cx] = 0; } } // parse units if applicable if (units != NULL) { lt.parse_units(units); *units = 0; } // parse double value errno = 0; char * endptr; dv = strtod(srcb,&endptr); if ((*endptr == 0) && (errno == 0)) sv = TT_SV_NUMBER; else dv = thnan; dv = lt.transform(dv); } std::string ths2tex(std::string original, int lang, bool remove_kerning) { return utf2tex(select_lang(original, thlang_getid(lang)), remove_kerning); } std::string ths2txt(const char * original, int lang, int encoding) { return ths2txt(std::string(original == NULL ? "" : original), lang, encoding); } std::string ths2txt(std::string original, int lang, int encoding) { // TODO: encoding conversion & al. return select_lang(original, thlang_getid(lang)); } therion/thparse.h0000644000076400010400000001753111253631700015111 0ustar userAdministrators/** * @file thparse.h * Parsing module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thparse_h #define thparse_h #include #include #include "thbuffer.h" #include "thmbuffer.h" enum { TT_IMG_TYPE_UNKNOWN, TT_IMG_TYPE_JPEG, TT_IMG_TYPE_PNG, }; /** * Token definition structure. */ typedef struct { const char * s; ///< String. int tok; ///< Token. } thstok; /** * Match string token. * * Scan array of token definitions (stok) for given string. If not found, * last element of array is returned. This array should allways be * alphabetically sorted and last element should be set to * like TT_UNKNOWN. * * @param buffer String buffer. * @param tab Array of token definitions. * @param tab_size Size of token array (ID of last element). * * @sa thmatch_token */ int thmatch_stok(const char *buffer, const thstok *tab, int tab_size); int thcasematch_stok(const char *buffer, const thstok *tab, int tab_size); /** * Match string token macro. */ #define thmatch_token(buffer, table) thmatch_stok(buffer, table,\ ((sizeof(table)/sizeof(thstok)) - 1)) #define thcasematch_token(buffer, table) thcasematch_stok(buffer, table,\ ((sizeof(table)/sizeof(thstok)) - 1)) /** * Match token string. * * Inverse function to thmatch_stok(). */ const char * thmatch_tstring(int token, const thstok *tab, int tab_size); /** * Match token string macro. */ #define thmatch_string(token, table) thmatch_tstring(token, table,\ ((sizeof(table)/sizeof(thstok)) - 1)) /** * Boolean tokens. */ enum { TT_UNKNOWN_BOOL = 0, ///< Not match. TT_TRUE, ///< yes, on, 1, true. TT_FALSE, ///< no, off, 0, false. TT_AUTO, ///< automatical setting }; /** * Boolean token table. * * Defines following: * - 1, on, yes, true = TT_TRUE * - 0, off, no, false = TT_FALSE * - TT_UNKNOWN_BOOL otherwise */ static const thstok thtt_bool[] = { // {"0", TT_FALSE}, // {"1", TT_TRUE}, // {"false", TT_FALSE}, // {"no", TT_FALSE}, {"off", TT_FALSE}, {"on", TT_TRUE}, // {"true", TT_TRUE}, // {"yes", TT_TRUE}, {NULL, TT_UNKNOWN_BOOL} }; /** * ON/OFF/AUTO token table. */ static const thstok thtt_onoffauto[] = { {"auto", TT_AUTO}, {"off", TT_FALSE}, {"on", TT_TRUE}, {NULL, TT_UNKNOWN_BOOL} }; /** * Special values tokens. */ enum { TT_SV_UNKNOWN, ///< Unknown special value TT_SV_NUMBER, ///< A real number. TT_SV_NAN, ///< Not a number. TT_SV_PINF, ///< Positive infinity. TT_SV_NINF, ///< Negative infinity. TT_SV_UP, ///< Up direction. TT_SV_DOWN, ///< Down direction. TT_SV_ALL, ///< All TT_SV_OFF, ///< Off }; /** * Special values token table. * * Defines following: * - "-", ".", "nan", "NAN", "NaN" = TT_SV_NAN * - "Inf", "inf", "INF" = TT_SV_PINF * - "-Inf", "-inf", "-INF" = TT_SV_NINF * - "up", "Up", "UP" = TT_SV_UP * - "down", "Down", "DOWN" = TT_SV_DOWN * - TT_SV_UNKNOWN otherwise */ static const thstok thtt_special_val[] = { {"-", TT_SV_NAN}, {"-INF", TT_SV_NINF}, {"-Inf", TT_SV_NINF}, {"-inf", TT_SV_NINF}, {".", TT_SV_NAN}, {"DOWN", TT_SV_DOWN}, {"Down", TT_SV_DOWN}, {"INF", TT_SV_PINF}, {"Inf", TT_SV_PINF}, {"NAN", TT_SV_NAN}, {"NaN", TT_SV_NAN}, {"UP", TT_SV_UP}, {"Up", TT_SV_UP}, {"all", TT_SV_ALL}, {"down", TT_SV_DOWN}, {"inf", TT_SV_PINF}, {"nan", TT_SV_NAN}, {"off", TT_SV_OFF}, {"up", TT_SV_UP}, {NULL, TT_SV_UNKNOWN} }; /** * Parse double value (with check for special values). */ void thparse_double(int & sv, double & dv, const char * src); /** * Parse length value. */ void thparse_length(int & sv, double & dv, const char * src); /** * Parse double value given in DMS (with check for special values). */ void thparse_double_dms(int & sv, double & dv, const char * src); /** * Update double value (with check for special values). */ #define thupdate_double(ov, uv) if (!(thisnan(uv))) ov = uv /** * Split given string into first word and the rest. */ void thsplit_word(thbuffer * dword, thbuffer * drest, const char * src); /** * Split given string into words (separated by white spaces). */ void thsplit_words(thmbuffer * dest, const char * src); /** * Split given string into substrings. * * In the source, they're separated by given character separator. */ void thsplit_strings(thmbuffer * dest, const char * src, const char separator); /** * Split given string into paths. * * Take care of C:\.... */ void thsplit_paths(thmbuffer * dest, const char * src, char separator); /** * Separate given argument string. * * Arguments are separated by white spaces. Strings could be quoted * ("" = ") or given in [] brackets. */ void thsplit_args(thmbuffer * dest, const char * src); /** * Separate path part from full file name. */ void thsplit_fpath(thbuffer * dest, const char * src); /** * Check if given string is keyword. * * Valid keyword characters are A-Z, a-z, 0-9,'_' and '-'. */ bool th_is_keyword(const char * str); /** * Check if given string is index (positive integer). */ bool th_is_index(const char * str); /** * Check if given string is keyword list. * * Valid keyword characters are A-Z, a-z, 0-9,'_' and '-'. * * @param str Input string. * @param sep Keyword separator. */ bool th_is_keyword_list(const char * str, char sep); /** * Check if given string is extended keyword. * * A-Z, a-z, 0-9 and [_.,-/+*'] */ bool th_is_extkeyword(const char * str); /** * Decode string into C format. */ void thdecode_c(thbuffer * dest, const char * src); void thdecode_tcl(thbuffer * dest, const char * src); /** * Decode string into TeX format. */ void thdecode_tex(thbuffer * dest, const char * src); void thdecode_utf2tex(thbuffer * dest, const char * src); void thdecode_sql(thbuffer * dest, const char * src); void thdecode_mp(thbuffer * dest, const char * src); /** * Decode into argument string. */ void thdecode_arg(thbuffer * dest, const char * src); /** * Parse altitude value */ void thparse_altitude(const char * src, double & altv, double & fixv); /** * Check image. */ void thparse_image(const char * fname, double & width, double & height, double & dpi, int & type); /** * Set color according to color map (TODO). */ void thset_color(int color_map, double index, double total, double & R, double & G, double & B); /** * Set grid origin and size. */ void thset_grid(double gorigin, double gsize, double min, double max, double & qstart, long & nquads); /** * Convert therion string to xhtml. */ const char * thutf82xhtml(const char * src); /** * Base 64 file encoder. */ void thbase64_encode(const char * fname, FILE * fout); /** * Check if path is absolute. */ bool thpath_is_absolute(const char * fname); /** * Check on attribute name. */ bool th_is_attr_name(const char * str); std::string ths2tex(std::string original, int lang = -1, bool remove_kerning = false); std::string ths2txt(const char * original, int lang = -1, int encoding = -1); std::string ths2txt(std::string original, int lang = -1, int encoding = -1); #endif therion/thpdf.cxx0000644000076400010400000020423412047254054015126 0ustar userAdministrators/** * @file thpdf.cxx */ /* Copyright (C) 2003 Martin Budaj * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include #include // #include #include #include #include // #ifdef NOTHERION // #include // I don't know why // #endif #include "thpdfdbg.h" #include "thpdfdata.h" #include "thtexfonts.h" #include "thlang.h" #include "thversion.h" #ifdef THMSVC #define round(x) floor((x) + 0.5) #endif #ifndef NOTHERION #include "thchenc.h" #include "thbuffer.h" #endif using namespace std; #define IOerr(F) ((string)"Can't open file "+F+"!\n").c_str() /////////// // extern list SCRAPLIST; // extern map LAYERHASH; // extern set MAP_PREVIEW_UP, MAP_PREVIEW_DOWN; /////////// typedef struct { int id; int namex,namey,layer; bool dest,bookmark,title_before; map< int,set > scraps; int jumpE,jumpW,jumpN,jumpS; set jumpU,jumpD; // map< int,set > preview; // set preview; } sheetrecord; map > preview; map::iterator> SHEET_JMP; bool operator < (sheetrecord a, sheetrecord b) { return a.id < b.id; } bool operator == (sheetrecord a, sheetrecord b) { return a.id == b.id; } list SHEET; ////////// int mode; const int ATLAS = 0, MAP = 1; double MINX, MINY, MAXX, MAXY; double HS,VS; ////////// string tex_Sname(string s) {return("THS"+s);} string tex_Nname(string s) {return("THN"+s);} string tex_BMPname(string s) {return("THBMP"+s);} // bitmap void read_settings() { ifstream F("scraps.dat"); if(!F) therror(("Can't open file `scraps.dat'!")); char buf[101],ctok[100]; string tok; int context = 0; // 0=scrap, 1=layer, 2=map preview, 3=legend int i; double llx,lly,urx,ury; scraprecord SCR; layerrecord LH; list::iterator I; map::iterator J; while(F.getline(buf,100,'\n')) { // istrstream S(buf); istringstream S(buf); S >> ctok; tok = ctok; if (tok == "[SCRAP]") context = 0; else if (tok == "[LAYER]") context = 1; else if (tok == "[MAP]") context = 2; else if (tok == "[LEGEND]") context = 3; else if (tok == "N") { switch (context) { case 0: S >> ctok; SCRAPLIST.push_front(SCR); I = SCRAPLIST.begin(); I->name = ctok; break; case 1: S >> ctok; ((*J).second).N = ctok; while(S >> ctok) { ((*J).second).N = ((*J).second).N + " " + string(ctok); } break; } } else if (tok == "F") { S >> llx >> lly >> urx >> ury; I->F = " "; I->F1 = llx; I->F2 = lly; I->F3 = urx; I->F4 = ury; } else if (tok == "G") { S >> llx >> lly >> urx >> ury; I->G = " "; I->G1 = llx; I->G2 = lly; I->G3 = urx; I->G4 = ury; } else if (tok == "B") { S >> llx >> lly >> urx >> ury; I->B = " "; I->B1 = llx; I->B2 = lly; I->B3 = urx; I->B4 = ury; } else if (tok == "I") { S >> llx >> lly >> urx >> ury; I->I = " "; I->I1 = llx; I->I2 = lly; I->I3 = urx; I->I4 = ury; } else if (tok == "E") { S >> llx >> lly >> urx >> ury; I->E = " "; I->E1 = llx; I->E2 = lly; I->E3 = urx; I->E4 = ury; } else if (tok == "X") { S >> llx >> lly >> urx >> ury; I->X = " "; I->X1 = llx; I->X2 = lly; I->X3 = urx; I->X4 = ury; } else if (tok == "P") { S >> ctok; I->P = ctok; S >> llx >> lly; I->S1 = llx; I->S2 = lly; } else if (tok == "Y") { S >> i; I->layer = i; } else if (tok == "V") { S >> i; I->level = i; } else if (tok == "R") { S >> i; LAYERHASH.insert(make_pair(i,LH)); J = LAYERHASH.find(i); ((*J).second).Z = 0; } else if (tok == "U") { switch (context) { case 1: while(S >> i) { (((*J).second).U).insert(i); } break; case 2: while(S >> i) { MAP_PREVIEW_UP.insert(i); } break; } } else if (tok == "D") { switch (context) { case 1: while(S >> i) { (((*J).second).D).insert(i); } break; case 2: while(S >> i) { MAP_PREVIEW_DOWN.insert(i); } break; } } else if (tok == "T") { S >> ctok; ((*J).second).T = ctok; while(S >> ctok) { ((*J).second).T = ((*J).second).T + " " + string(ctok); } } else if (tok == "Z") { switch (context) { case 0: S >> i; I->sect = i; break; case 1: ((*J).second).Z = 1; break; } } } F.close(); SCRAPLIST.reverse(); } string xyz2str(int x, int y, int z) { char buf[50]; sprintf(buf,"%d.%d.%d",x,y,z); return (string) buf; } list::iterator find_sheet(int x, int y, int z) { // list::iterator I; // for (I = SHEET.begin(); I != SHEET.end(); I++) { // if (I->layer == x && I->namex == y && I->namey == z) break; // } // return (I); if (SHEET_JMP.count(xyz2str(x,y,z)) > 0) return SHEET_JMP.find(xyz2str(x,y,z))->second; else return SHEET.end(); } void make_sheets() { double llx = 0, lly = 0, urx = 0, ury = 0; double a,b,w,h; sheetrecord SHREC; if (mode == ATLAS) { for (map::iterator I = LAYERHASH.begin(); I != LAYERHASH.end(); I++) { I->second.minx = INT_MAX; I->second.miny = INT_MAX; I->second.maxx = INT_MIN; I->second.maxy = INT_MIN; } } for (list::iterator I = SCRAPLIST.begin(); I != SCRAPLIST.end(); I++) { llx = DBL_MAX; lly = DBL_MAX; urx = -DBL_MAX; ury = -DBL_MAX; if (I->F != "" && I->E == "" && I->G == "" && I->B == "" && I->X == "") { // clipped symbols shouldn't affect map size if (I->F1 < llx) llx = I->F1; if (I->F2 < lly) lly = I->F2; if (I->F3 > urx) urx = I->F3; if (I->F4 > ury) ury = I->F4; } if (I->E != "") { if (I->E1 < llx) llx = I->E1; if (I->E2 < lly) lly = I->E2; if (I->E3 > urx) urx = I->E3; if (I->E4 > ury) ury = I->E4; } if (I->G != "") { if (I->G1 < llx) llx = I->G1; if (I->G2 < lly) lly = I->G2; if (I->G3 > urx) urx = I->G3; if (I->G4 > ury) ury = I->G4; } if (I->B != "") { if (I->B1 < llx) llx = I->B1; if (I->B2 < lly) lly = I->B2; if (I->B3 > urx) urx = I->B3; if (I->B4 > ury) ury = I->B4; } if (I->I != "") { if (I->I1 < llx) llx = I->I1; if (I->I2 < lly) lly = I->I2; if (I->I3 > urx) urx = I->I3; if (I->I4 > ury) ury = I->I4; } if (I->X != "") { if (I->X1 < llx) llx = I->X1; if (I->X2 < lly) lly = I->X2; if (I->X3 > urx) urx = I->X3; if (I->X4 > ury) ury = I->X4; } for (list::iterator I_sk = I->SKETCHLIST.begin(); I_sk != I->SKETCHLIST.end(); I_sk++) { for (int i = 0; i<=1; i++) { for (int j = 0; j<=1; j++) { w = i * I_sk->width; h = j * I_sk->height; a = I_sk->xx*w + I_sk->xy*h + I_sk->dx; b = I_sk->yx*w + I_sk->yy*h + I_sk->dy; if (a < llx) llx = a; if (b < lly) lly = b; if (a > urx) urx = a; if (b > ury) ury = b; } } }; if (llx == DBL_MAX || lly == DBL_MAX || urx == -DBL_MAX || ury == -DBL_MAX) therror(("This can't happen -- no data for a scrap!")); map::iterator J = LAYERHASH.find(I->layer); if (J == LAYERHASH.end()) therror (("This can't happen!")); if (mode == ATLAS) { int Llx = (int) floor((llx-LAYOUT.overlap-LAYOUT.hoffset) / LAYOUT.hsize); int Lly = (int) floor((lly-LAYOUT.overlap-LAYOUT.voffset) / LAYOUT.vsize); int Urx = (int) floor((urx+LAYOUT.overlap-LAYOUT.hoffset) / LAYOUT.hsize); int Ury = (int) floor((ury+LAYOUT.overlap-LAYOUT.voffset) / LAYOUT.vsize); for (int i = Llx; i <= Urx; i++) { for (int j = Lly; j <= Ury; j++) { if (J->second.Z == 0) { // Z layers don't create new sheets list::iterator sheet_it = find_sheet(I->layer,i,j); if (sheet_it == SHEET.end()) { sheet_it = SHEET.insert(SHEET.end(),SHREC); SHEET_JMP.insert(make_pair(xyz2str(I->layer,i,j),sheet_it)); } sheet_it->layer = I->layer; sheet_it->namex = i; sheet_it->namey = j; map >::iterator K = sheet_it->scraps.find(I->level); if (K == sheet_it->scraps.end()) { set SCRP; sheet_it->scraps.insert(make_pair(I->level,SCRP)); K = sheet_it->scraps.find(I->level); } ((*K).second).insert(I->name); if (J->second.minx > Llx) J->second.minx = Llx; if (J->second.miny > Lly) J->second.miny = Lly; if (J->second.maxx < Urx) J->second.maxx = Urx; if (J->second.maxy < Ury) J->second.maxy = Ury; } // we add scrap to preview set tmpset; string tmpstr; tmpstr = xyz2str(I->layer,i,j); map >::iterator pr_it = preview.find(tmpstr); if (pr_it == preview.end()) { preview.insert(make_pair(tmpstr,tmpset)); pr_it = preview.find(tmpstr); } pr_it->second.insert(I->name); } } } else { map >::iterator K = (((*J).second).scraps).find(I->level); if (K == (((*J).second).scraps).end()) { set SCRP; (((*J).second).scraps).insert(make_pair(I->level,SCRP)); K = (((*J).second).scraps).find(I->level); } ((*K).second).insert(I->name); (((*J).second).allscraps).insert(I->name); if (((*J).second).Z == 0) { if (MINX > llx) MINX = llx; if (MINY > lly) MINY = lly; if (MAXX < urx) MAXX = urx; if (MAXY < ury) MAXY = ury; } } } // cout << "MINMAX " << MINX << " " << MINY << " " << MAXX << " " << MAXY << endl; } void find_jumps() { for (list::iterator sheet_it = SHEET.begin(); sheet_it != SHEET.end(); sheet_it++) { sheet_it->jumpW = 0; sheet_it->jumpE = 0; sheet_it->jumpN = 0; sheet_it->jumpS = 0; list::iterator I; int jump; string W = xyz2str(sheet_it->layer,sheet_it->namex-1,sheet_it->namey); string E = xyz2str(sheet_it->layer,sheet_it->namex+1,sheet_it->namey); string N = xyz2str(sheet_it->layer,sheet_it->namex,sheet_it->namey+1); string S = xyz2str(sheet_it->layer,sheet_it->namex,sheet_it->namey-1); if (SHEET_JMP.count(W) > 0) { I = SHEET_JMP.find(W)->second; sheet_it->jumpW = I->id; I->dest = true; } if (SHEET_JMP.count(E) > 0) { I = SHEET_JMP.find(E)->second; sheet_it->jumpE = I->id; I->dest = true; } if (SHEET_JMP.count(N) > 0) { I = SHEET_JMP.find(N)->second; sheet_it->jumpN = I->id; I->dest = true; } if (SHEET_JMP.count(S) > 0) { I = SHEET_JMP.find(S)->second; sheet_it->jumpS = I->id; I->dest = true; } map::iterator lay_it = LAYERHASH.find(sheet_it->layer); if (lay_it == LAYERHASH.end()) therror (("This can't happen!")); if (!lay_it->second.U.empty()) { for (set::iterator l_it = lay_it->second.U.begin(); l_it != lay_it->second.U.end(); l_it++) { map::iterator alt_lay_it = LAYERHASH.find(*l_it); if (alt_lay_it == LAYERHASH.end()) therror(("This can't happen!")); jump = (alt_lay_it->second.Z == 0) ? *l_it : alt_lay_it->second.AltJump; string U = xyz2str(jump,sheet_it->namex,sheet_it->namey); if (SHEET_JMP.count(U) > 0) { I = SHEET_JMP.find(U)->second; sheet_it->jumpU.insert(jump); I->dest = true; } } } if (!lay_it->second.D.empty()) { for (set::iterator l_it = lay_it->second.D.begin(); l_it != lay_it->second.D.end(); l_it++) { map::iterator alt_lay_it = LAYERHASH.find(*l_it); if (alt_lay_it == LAYERHASH.end()) therror(("This can't happen!")); jump = (alt_lay_it->second.Z == 0) ? *l_it : alt_lay_it->second.AltJump; string D = xyz2str(jump,sheet_it->namex,sheet_it->namey); if (SHEET_JMP.count(D) > 0) { I = SHEET_JMP.find(D)->second; sheet_it->jumpD.insert(jump); I->dest = true; } } } } } string grid_name(string s, int offset) { unsigned char c; bool is_num = true; for (unsigned i=0; i= 65 && c <= 90 && (c+offset) >= 65 && (c+offset) <= 90) || (c >= 97 && c <=122 && (c+offset) >= 97 && (c+offset) <=122)) { char buf[10]; sprintf(buf,"%c",c+offset); return (string) buf; } else return "?"; } else return "?"; } set find_excluded_pages(string s) { set excl; int i,j; char c; // istrstream S(s.c_str()); istringstream S(s); c = ','; while (S >> i) { S >> c; if (c == ',') excl.insert(i); else if (c == '-') { S >> j; for (int k=i; k<=j; k++) excl.insert(k); S >> c; // punctuation character } else therror(("Invalid character in the exclusion list!")); } //cout << endl; //cout << "Excl.list: " << s << endl; //cout << "Excl. set: "; //for (set::iterator I = excl.begin(); I != excl.end(); I++) // cout << *I << " "; //cout << endl; return excl; } void sort_sheets() { int pageid = 1 + LAYOUT.own_pages, tmppagenum = 1; set excluded; bool wait_for_title; if (LAYOUT.excl_pages) excluded = find_excluded_pages(LAYOUT.excl_list); for (map::reverse_iterator I = LAYERHASH.rbegin(); I != LAYERHASH.rend(); I++) { // I->second.minid = pageid; I->second.bookmark = false; wait_for_title = (I->second.T !="" && LAYOUT.title_pages) ? true : false; for (int j = I->second.maxy; j >= I->second.miny; j--) { for (int i = I->second.minx; i <= I->second.maxx; i++) { list::iterator sheet_it = find_sheet(I->first,i,j); if (sheet_it != SHEET.end()) { // if (wait_for_title && excluded.count(tmppagenum) > 0) { // wait_for_title = false; // } if (excluded.count(tmppagenum) == 0) { sheet_it->dest = false; sheet_it->title_before = false; sheet_it->bookmark = false; if (!I->second.bookmark) { sheet_it->bookmark = true; sheet_it->dest = true; I->second.bookmark = true; } if (wait_for_title) { sheet_it->title_before = true; pageid++; wait_for_title = false; } sheet_it->id = pageid; pageid++; } else { SHEET.erase(sheet_it); SHEET_JMP.erase(xyz2str(sheet_it->layer, sheet_it->namex,sheet_it->namey)); //cout << "Should erase sheet " << tmppagenum << endl; } tmppagenum++; } } } // I->second.maxid = pageid - 1; } SHEET.sort(); //cout << "sheets: " << SHEET.size() << endl; } void print_preview(int up,ofstream& PAGEDEF,double HSHIFT,double VSHIFT, list::iterator sheet_it = list::iterator()) { set used_layers; set used_scraps; double xc = 0, yc = 0; if (LAYOUT.OCG) { if (mode == MAP) PAGEDEF << "\\setbox\\xxx=\\hbox to \\adjustedHS{%" << endl; else PAGEDEF << "\\setbox\\xxx=\\hbox to " << HS << "bp{%" << endl; } // PAGEDEF << (up ? "\\PL{q .1 w}%" : "\\PL{q .8 g}%") << endl; if (up) { PAGEDEF << "\\PL{q .1 w " << LAYOUT.preview_above_r << " " << LAYOUT.preview_above_g << " " << LAYOUT.preview_above_b << " " << " RG}%" << endl; } else { PAGEDEF << "\\PL{q " << LAYOUT.preview_below_r << " " << LAYOUT.preview_below_g << " " << LAYOUT.preview_below_b << " " << " rg}%" << endl; } if (mode == ATLAS) { map::iterator lay_it = LAYERHASH.find(sheet_it->layer); if (lay_it == LAYERHASH.end()) therror(("This can't happen!")); used_layers = (up ? lay_it->second.U : lay_it->second.D); } else { used_layers = (up ? MAP_PREVIEW_UP : MAP_PREVIEW_DOWN); } for (set::iterator I=used_layers.begin(); I != used_layers.end(); I++) { if (mode == ATLAS) { map >::iterator pr_it = preview.find(xyz2str(*I,sheet_it->namex,sheet_it->namey)); if (pr_it != preview.end()) used_scraps = pr_it->second; } else { map::iterator J = LAYERHASH.find(*I); if (J == LAYERHASH.end()) therror(("This can't happen!")); used_scraps = J->second.allscraps; } if (!used_scraps.empty()) { for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0) { if (up) { if (K->B != "" && K->sect == 0) { xc = K->B1; yc = K->B2; xc -= HSHIFT; yc -= VSHIFT; PAGEDEF << (mode == MAP && LAYOUT.OCG ? "\\PBcorr{" : "\\PB{") << xc << "}{" << yc << "}{\\" << tex_Xname("B"+(K->name)) << "}%" << endl; } } else { if (K->I != "" && K->sect == 0) { xc = K->I1; yc = K->I2; xc -= HSHIFT; yc -= VSHIFT; PAGEDEF << (mode == MAP && LAYOUT.OCG ? "\\PBcorr{" : "\\PB{") << xc << "}{" << yc << "}{\\" << tex_Xname("I"+(K->name)) << "}%" << endl; } } } } } } PAGEDEF << "\\PL{Q}%" << endl; if (LAYOUT.OCG) { if (mode==MAP) PAGEDEF << "\\hfill}\\ht\\xxx=\\adjustedVS\\dp\\xxx=0bp" << endl; else PAGEDEF << "\\hfill}\\ht\\xxx=" << VS << "bp\\dp\\xxx=0bp" << endl; PAGEDEF << "\\immediate\\pdfxform "; PAGEDEF << "attr{/OC \\the\\" << (up ? "ocU" : "ocD") << "\\space 0 R} "; if (mode == MAP) PAGEDEF << "\\xxx\\PB{-\\adjustedX}{-\\adjustedY}{\\pdflastxform}%" << endl; else PAGEDEF << "\\xxx\\PB{0}{0}{\\pdflastxform}%" << endl; } } void compose_page(list::iterator sheet_it, ofstream& PAGE) { map::iterator lay_it = LAYERHASH.find(sheet_it->layer); if (lay_it == LAYERHASH.end()) therror (("This can't happen!")); if (sheet_it->title_before) { PAGE << "\\TITLE{" << utf2tex(lay_it->second.T) << "}\n"; } PAGE << "%\n% Page: " << u2str(sheet_it->id) << endl << "%\n"; if (sheet_it->dest) PAGE << "\\pdfdest name {" << u2str(sheet_it->id) << "} xyz" << endl; if (sheet_it->bookmark) { PAGE << "\\pdfoutline goto name {" << u2str(sheet_it->id) << "} count 0 {\\ne\\376\\ne\\377" << utf2texoctal(lay_it->second.N) << "}%" << endl; } PAGE.precision(6); PAGE << "\\setbox\\mapbox=\\hbox to " << HS << "bp{%" << endl; PAGE.precision(2); PAGE << "\\rlap{\\pdfrefxform\\" << tex_Sname(u2str(sheet_it->id)) << "}%" << endl; // map hyperlinks int lw = 25; double lhy = VS - 2*lw; double lhx = HS - 2*lw; if (sheet_it->jumpW) PAGE << "\\flatlink{0}{" << lw << "}{" << lw << "}{" << lhy << "}{" << u2str(sheet_it->jumpW) << "}%\n"; if (sheet_it->jumpE) PAGE << "\\flatlink{" << HS-lw << "}{" << lw << "}{" << lw << "}{" << lhy << "}{" << u2str(sheet_it->jumpE) << "}%\n"; if (sheet_it->jumpN) PAGE << "\\flatlink{" << lw << "}{" << VS-lw << "}{" << lhx << "}{" << lw << "}{" << u2str(sheet_it->jumpN)<< "}%\n"; if (sheet_it->jumpS) PAGE << "\\flatlink{" << lw << "}{0}{" << lhx << "}{" << lw << "}{" << u2str(sheet_it->jumpS) << "}%\n"; PAGE.precision(6); PAGE << "\\hfil}\\ht\\mapbox=" << VS << "bp%" << endl; PAGE.precision(2); PAGE << "\\pagelabel={" << grid_name(LAYOUT.labely,-sheet_it->namey) << " " << grid_name(LAYOUT.labelx,sheet_it->namex) << "}%" << endl; if (LAYOUT.page_numbering) PAGE << "\\pagenum=" << sheet_it->id << "%" << endl; // up and down links if (!sheet_it->jumpU.empty()) { PAGE << "\\pointerU={%\n"; for (set::reverse_iterator l_it = sheet_it->jumpU.rbegin(); l_it != sheet_it->jumpU.rend(); l_it++) { list::iterator s_it = find_sheet(*l_it,sheet_it->namex,sheet_it->namey); if (s_it == SHEET.end()) therror (("This can't happen!")); PAGE << utf2tex(LAYERHASH.find(*l_it)->second.N) << "|" << s_it->id << "|" << u2str(s_it->id) << "||%" << endl; } PAGE << "}%\n"; } else PAGE << "\\pointerU={notdef}%" << endl; if (!sheet_it->jumpD.empty()) { PAGE << "\\pointerD={%\n"; for (set::reverse_iterator l_it = sheet_it->jumpD.rbegin(); l_it != sheet_it->jumpD.rend(); l_it++) { list::iterator s_it = find_sheet(*l_it,sheet_it->namex,sheet_it->namey); if (s_it == SHEET.end()) therror (("This can't happen!")); PAGE << utf2tex(LAYERHASH.find(*l_it)->second.N) << "|" << s_it->id << "|" << u2str(s_it->id) << "||%" << endl; } PAGE << "}%\n"; } else PAGE << "\\pointerD={notdef}%" << endl; PAGE << "\\pagename={" << utf2tex(lay_it->second.N) << "}%" << endl; // pointers to neighbouring pages if (LAYOUT.page_numbering) { if (sheet_it->jumpW) PAGE << "\\pointerW=" << sheet_it->jumpW << "%\n"; else PAGE << "\\pointerW=0%\n"; if (sheet_it->jumpE) PAGE << "\\pointerE=" << sheet_it->jumpE << "%\n"; else PAGE << "\\pointerE=0%\n"; if (sheet_it->jumpN) PAGE << "\\pointerN=" << sheet_it->jumpN << "%\n"; else PAGE << "\\pointerN=0%\n"; if (sheet_it->jumpS) PAGE << "\\pointerS=" << sheet_it->jumpS << "%\n"; else PAGE << "\\pointerS=0%\n"; } PAGE << "\\setbox\\navbox=\\hbox{%" << endl; // navigator hyperlinks int nav_x = 2*LAYOUT.nav_right+1; int nav_y = 2*LAYOUT.nav_up+1; double HSN = LAYOUT.hsize / LAYOUT.nav_factor * nav_x; double VSN = LAYOUT.vsize / LAYOUT.nav_factor * nav_y; for (int i=-LAYOUT.nav_right; i <= LAYOUT.nav_right; i++) { for (int j=-LAYOUT.nav_up; j <= LAYOUT.nav_up; j++) { if (i!=0 || j!=0) { string tmp = xyz2str(sheet_it->layer, sheet_it->namex+i,sheet_it->namey+j); if (SHEET_JMP.count(tmp) > 0) { PAGE << "\\flatlink{" << HSN*(i+LAYOUT.nav_right)/nav_x << "}{" << VSN*(j+LAYOUT.nav_up)/nav_y << "}{" << HSN/nav_x << "}{" << VSN/nav_y << "}{" << u2str(SHEET_JMP.find(tmp)->second->id) << "}%\n"; } } } } PAGE << "\\pdfrefxform\\" << tex_Nname(u2str(sheet_it->id)) << "}%" << endl; PAGE << "\\dopage\\eject" << endl; } void print_page_bg(ofstream& PAGEDEF) { /* if ((LAYOUT.background_r != 1) || (LAYOUT.background_g != 1) || (LAYOUT.background_b != 1)) { */ if (! LAYOUT.transparent_map_bg) { // bg rectangle PAGEDEF << "\\PL{q " << LAYOUT.background_r << " " << LAYOUT.background_g << " " << LAYOUT.background_b << " rg 0 0 " << HS << " " << VS << " re f Q}%" << endl; } } void print_page_bg_scraps(int layer, ofstream& PAGEDEF, list::iterator sheet_it = list::iterator()) { // if transparency is used, all scraps should be filled white // on the coloured background, just before preview_down is displayed // and transparency is turned on /* if (LAYOUT.transparency && ((LAYOUT.background_r != 1) || (LAYOUT.background_g != 1) || (LAYOUT.background_b != 1))) { */ // even if bg is white, pdf might // be included in other pdf with // non-white bg; we should avoid // overoptimization if (LAYOUT.transparency ) { double HSHIFT=0, VSHIFT=0, xc = 0, yc = 0; map < int,set > LEVEL; set used_scraps; if (mode == ATLAS) { HSHIFT = LAYOUT.hsize * sheet_it->namex + LAYOUT.hoffset - LAYOUT.overlap; VSHIFT = LAYOUT.vsize * sheet_it->namey + LAYOUT.voffset - LAYOUT.overlap; LEVEL = sheet_it->scraps; } else { HSHIFT = MINX; VSHIFT = MINY; LEVEL = ((*(LAYERHASH.find(layer))).second).scraps; } PAGEDEF << "\\PL{q 1 g}%" << endl; // white background of the scrap for (map < int,set >::iterator I = LEVEL.begin(); I != LEVEL.end(); I++) { used_scraps = (*I).second; // scrap backgrounds for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0 && K->I != "") { xc = K->I1; yc = K->I2; xc -= HSHIFT; yc -= VSHIFT; PAGEDEF << "\\PB{" << xc << "}{" << yc << "}{\\" << tex_Xname("I"+(K->name)) << "}%" << endl; } } } PAGEDEF << "\\PL{Q}%" << endl; // end of white color for filled bg } } void print_surface_bitmaps (ofstream &PAGEDEF, double shiftx, double shifty) { if (LAYOUT.transparency || LAYOUT.OCG) { if (mode == MAP) PAGEDEF << "\\setbox\\xxx=\\hbox to\\adjustedHS{%" << endl; else PAGEDEF << "\\setbox\\xxx=\\hbox to" << HS << "bp{%" << endl; PAGEDEF << "\\PL{/GS2 gs}%" << endl; } int i = 1; PAGEDEF.precision(6); for (list::iterator I = SURFPICTLIST.begin(); I != SURFPICTLIST.end(); I++) { if (mode == MAP && (LAYOUT.transparency || LAYOUT.OCG)) { PAGEDEF << "\\bitmapcorr{"; } else { PAGEDEF << "\\bitmap{"; } PAGEDEF << I->xx << "}{" << I->yx << "}{" << I->xy << "}{" << I->yy << "}{" << I->dx - shiftx << "}{" << I->dy - shifty << "}{\\" << tex_BMPname(u2str(i)) << "}%" << endl; i++; }; PAGEDEF.precision(2); if (LAYOUT.transparency || LAYOUT.OCG) { if (mode == MAP) PAGEDEF << "\\hfill}\\ht\\xxx=\\adjustedVS\\dp\\xxx=0bp" << endl; else PAGEDEF << "\\hfill}\\ht\\xxx="<< VS << "bp\\dp\\xxx=0bp" << endl; PAGEDEF << "\\immediate\\pdfxform "; PAGEDEF << "attr{"; if (LAYOUT.transparency) PAGEDEF << "/Group \\the\\attrid\\space 0 R "; if (LAYOUT.OCG) PAGEDEF << "/OC \\the\\ocSUR\\space 0 R "; PAGEDEF << "} "; PAGEDEF << "resources{/ExtGState \\the\\resid\\space 0 R}"; if (mode == MAP) PAGEDEF << "\\xxx\\PB{-\\adjustedX}{-\\adjustedY}{\\pdflastxform}%" << endl; else PAGEDEF << "\\xxx\\PB{0}{0}{\\pdflastxform}%" << endl; } } paired rotatedaround(paired x,paired o, double th) { double theta = -th * 3.14159265358979 / 180; paired z, tmp; tmp.x = x.x - o.x; tmp.y = x.y - o.y; z.x = tmp.x * cos(theta) - tmp.y * sin(theta) + o.x; z.y = tmp.x * sin(theta) + tmp.y * cos(theta) + o.y; return z; } void print_grid_pdf(ofstream& PAGEDEF, double LLX, double LLY, double origMINX,double origMINY,double origMAXX, double origMAXY) { if (LAYOUT.grid == 0) return; PAGEDEF << "\\PL{q}"; paired ll, ur, lr, ul, llrot, urrot, ulrot, lrrot, llnew, urnew, origin; /* ll.x = LLX; ll.y = LLY; ur.x = LLX + HS; ur.y = LLY + VS; */ ll.x = origMINX; ll.y = origMINY; ur.x = origMAXX; ur.y = origMAXY; lr.x = ur.x; lr.y = ll.y; ul.x = ll.x; ul.y = ur.y; origin.x = LAYOUT.hgridorigin; origin.y = LAYOUT.vgridorigin; llrot = rotatedaround(ll,origin,-LAYOUT.gridrot); urrot = rotatedaround(ur,origin,-LAYOUT.gridrot); lrrot = rotatedaround(lr,origin,-LAYOUT.gridrot); ulrot = rotatedaround(ul,origin,-LAYOUT.gridrot); llnew.x = min(min(llrot.x, urrot.x), min(lrrot.x, ulrot.x)); llnew.y = min(min(llrot.y, urrot.y), min(lrrot.y, ulrot.y)); urnew.x = max(max(llrot.x, urrot.x), max(lrrot.x, ulrot.x)); urnew.y = max(max(llrot.y, urrot.y), max(lrrot.y, ulrot.y)); /* na odladenie PAGEDEF << "\\PL{ " << llrot.x-LLX << " " << llrot.y-LLY << " m " << lrrot.x-LLX << " " << lrrot.y-LLY << " l S}"; PAGEDEF << "\\PL{ " << ulrot.x-LLX << " " << ulrot.y-LLY << " m " << urrot.x-LLX << " " << urrot.y-LLY << " l S}"; PAGEDEF << "\\PL{2 w " << ll.x-LLX << " " << ll.y-LLY << " m " << lr.x-LLX << " " << lr.y-LLY << " l S}"; PAGEDEF << "\\PL{ " << ul.x-LLX << " " << ul.y-LLY << " m " << ur.x-LLX << " " << ur.y-LLY << " l S}"; PAGEDEF << "\\PL{10 w 1 J " << llnew.x-LLX << " " << llnew.y-LLY << " m " << llnew.x-LLX << " " << llnew.y-LLY << " l S}"; PAGEDEF << "\\PL{ " << urnew.x-LLX << " " << urnew.y-LLY << " m " << urnew.x-LLX << " " << urnew.y-LLY << " l S}"; PAGEDEF << "\\PL{20 w 1 J " << origin.x-LLX << " " << origin.y-LLY << " m " << origin.x-LLX << " " << origin.y-LLY << " l S}"; PAGEDEF << "\\PL{15 w 1 J " << rotatedaround(llnew,origin,LAYOUT.gridrot).x-LLX << " " << rotatedaround(llnew,origin,LAYOUT.gridrot).y-LLY << " m " << rotatedaround(llnew,origin,LAYOUT.gridrot).x-LLX << " " << rotatedaround(llnew,origin,LAYOUT.gridrot).y-LLY << " l S}"; PAGEDEF << "\\PL{ " << rotatedaround(urnew,origin,LAYOUT.gridrot).x-LLX << " " << rotatedaround(urnew,origin,LAYOUT.gridrot).y-LLY << " m " << rotatedaround(urnew,origin,LAYOUT.gridrot).x-LLX << " " << rotatedaround(urnew,origin,LAYOUT.gridrot).y-LLY << " l S}"; */ //cout << "***" << LAYOUT.hgridsize << endl; double grid_init_x = LAYOUT.hgridsize * floor ((llnew.x-origin.x)/LAYOUT.hgridsize) + origin.x; double grid_init_y = LAYOUT.vgridsize * floor ((llnew.y-origin.y)/LAYOUT.vgridsize) + origin.y; double G_real_init_x = LAYOUT.XO + LAYOUT.XS * floor ((llnew.x-origin.x)/LAYOUT.hgridsize); double G_real_init_y = LAYOUT.YO + LAYOUT.YS * floor ((llnew.y-origin.y)/LAYOUT.vgridsize); double cosr = cos(-LAYOUT.gridrot * 3.14159265 / 180); double sinr = sin(-LAYOUT.gridrot * 3.14159265 / 180); int row, col, elem; if (LAYOUT.proj == 0) { paired out,tmp; int ii,jj; double i, j; for (i = grid_init_x, ii=0; i < urnew.x + LAYOUT.hgridsize - 0.05; i += LAYOUT.hgridsize, ii++) { for (j = grid_init_y, jj=0; j < urnew.y + LAYOUT.vgridsize - 0.05; j += LAYOUT.vgridsize, jj++) { col = (i == grid_init_x ? 0 : (i >= urnew.x ? 2 : 1)); row = (j == grid_init_y ? 0 : (j >= urnew.y ? 2 : 1)); elem = col + 3*row; /* tmp.x = i; tmp.y = j; out = rotatedaround(tmp,origin,LAYOUT.gridrot); out.x -= LLX; out.y -= LLY; PAGEDEF << "\\PL{q 5 w 1 J 0 0 1 RG " << out.x << " " << out.y << " m " << out.x << " " << out.y << " l S Q}"; */ tmp.x = i+LAYOUT.gridcell[elem].x; tmp.y = j+LAYOUT.gridcell[elem].y; out = rotatedaround(tmp,origin,LAYOUT.gridrot); out.x -= LLX; out.y -= LLY; PAGEDEF << "\\PL{q}"; PAGEDEF << "\\PL{" << cosr << " " << sinr << " " << -sinr << " " << cosr << " " << out.x << " " << out.y << " cm}"; PAGEDEF << "\\PB{0}{0}{\\" << tex_Wname("grid") << u2str(elem+1) << "}"; PAGEDEF << "\\PL{Q}%" << endl; if (LAYOUT.grid_coord_freq==2 || (LAYOUT.grid_coord_freq==1 && elem!=4)) { tmp.x = i; tmp.y = j; out = rotatedaround(tmp,origin,LAYOUT.gridrot); out.x -= LLX; out.y -= LLY; PAGEDEF << "\\PL{q}"; PAGEDEF << "\\PL{" << cosr << " " << sinr << " " << -sinr << " " << cosr << " " << out.x << " " << out.y << " cm}"; PAGEDEF << "\\gridcoord{" << (row == 2 ? (col == 2 ? 1 : 3) : (col == 2 ? 7 : 9)) << "}{$(" << setprecision(0) << G_real_init_x+ii*LAYOUT.XS << "," << G_real_init_y+jj*LAYOUT.YS << setprecision(2) << ")$}%" << endl; PAGEDEF << "\\PL{Q}"; } } } } else { grid_init_x = LLX; int jj; double j; for (j = grid_init_y,jj=0; j < urnew.y + LAYOUT.vgridsize - 0.05; j += LAYOUT.vgridsize,jj++) { // PAGEDEF << "\\PL{q 3 w 0 0 1 RG 0 " << j-LLY << " m " << HS << " " << j-LLY << " l S Q}"; for (double i = grid_init_x; i < urnew.x + LAYOUT.hgridsize - 0.05; i += LAYOUT.hgridsize) { col = (i == grid_init_x ? 0 : (i >= urnew.x ? 2 : 1)); row = (j == grid_init_y ? 0 : (j >= urnew.y ? 2 : 1)); elem = col + 3*row; PAGEDEF << "\\PB{" << i-LLX+LAYOUT.gridcell[elem].x << "}{" << j-LLY+LAYOUT.gridcell[elem].y << "}{\\" << tex_Wname("grid") << u2str(elem+1) << "}%" << endl; if (col == 0 && LAYOUT.grid_coord_freq > 0) { PAGEDEF << "\\PL{q}"; PAGEDEF << "\\PL{1 0 0 1 " << i-LLX << " " << j-LLY << " cm}"; PAGEDEF << "\\gridcoord{" << (row==2?3:9) << "}{$" << setprecision(0) << G_real_init_y+jj*LAYOUT.YS << setprecision(2)<< "$}"; PAGEDEF << "\\PL{Q}%" << endl; } if (col == 2 && LAYOUT.grid_coord_freq == 2) { PAGEDEF << "\\PL{q}"; PAGEDEF << "\\PL{1 0 0 1 " << i-LLX << " " << j-LLY << " cm}"; PAGEDEF << "\\gridcoord{" << (row==2?1:7) << "}{$" << setprecision(0) << G_real_init_y+jj*LAYOUT.YS << setprecision(2)<< "$}"; PAGEDEF << "\\PL{Q}%" << endl; } } } } PAGEDEF << "\\PL{Q}%" << endl; } void print_map(int layer, ofstream& PAGEDEF, list::iterator sheet_it = list::iterator()){ double HSHIFT=0, VSHIFT=0, xc = 0, yc = 0; map < int,set > LEVEL; set page_text_scraps,used_scraps; string buffer; deque thstack; if (mode == ATLAS) { HSHIFT = LAYOUT.hsize * sheet_it->namex + LAYOUT.hoffset - LAYOUT.overlap; VSHIFT = LAYOUT.vsize * sheet_it->namey + LAYOUT.voffset - LAYOUT.overlap; LEVEL = sheet_it->scraps; } else { HSHIFT = MINX; VSHIFT = MINY; LEVEL = ((*(LAYERHASH.find(layer))).second).scraps; } for (map < int,set >::iterator I = LEVEL.begin(); I != LEVEL.end(); I++) { used_scraps = (*I).second; for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0 && K->P != "") page_text_scraps.insert(K->name); } } if (mode == ATLAS) { print_page_bg(PAGEDEF); if (LAYOUT.surface == 1) print_surface_bitmaps(PAGEDEF,HSHIFT,VSHIFT); print_page_bg_scraps(layer, PAGEDEF, sheet_it); if (LAYOUT.grid == 1) print_grid_pdf(PAGEDEF,HSHIFT,VSHIFT,HSHIFT,VSHIFT,HSHIFT+HS,VSHIFT+VS); } if (mode == ATLAS && !LAYERHASH.find(layer)->second.D.empty()) { print_preview(0,PAGEDEF,HSHIFT,VSHIFT,sheet_it); } for (map < int,set >::iterator I = LEVEL.begin(); I != LEVEL.end(); I++) { used_scraps = (*I).second; if (LAYOUT.transparency) { // transparency group beginning PAGEDEF << "\\setbox\\xxx=\\hbox to " << HS << "bp{%" << endl; PAGEDEF << "\\PL{/GS1 gs}%" << endl; // beginning of transparency } // PAGEDEF << "\\PL{q 1 g}%" << endl; // white background of the scrap for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0 && K->I != "") { PAGEDEF << "\\PL{q "; if (K->r < 0 || K->g < 0 || K->b < 0) { PAGEDEF << LAYOUT.foreground_r << " " << // background of the scrap LAYOUT.foreground_g << " " << LAYOUT.foreground_b << " rg}%" << endl; } else { PAGEDEF << K->r << " " << // background of the scrap K->g << " " << K->b << " rg}%" << endl; } xc = K->I1; yc = K->I2; xc -= HSHIFT; yc -= VSHIFT; PAGEDEF << "\\PB{" << xc << "}{" << yc << "}{\\" << tex_Xname("I"+(K->name)) << "}%" << endl; PAGEDEF << "\\PL{Q}%" << endl; // end of white color for filled bg } } // sketches PAGEDEF.precision(6); for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0) { for (list::iterator I_sk = K->SKETCHLIST.begin(); I_sk != K->SKETCHLIST.end(); I_sk++) { PAGEDEF << "\\pdfximage{" << (string) I_sk->filename << "}%" << endl; PAGEDEF << "\\bitmap{" << I_sk->xx << "}{" << I_sk->yx << "}{" << I_sk->xy << "}{" << I_sk->yy << "}{" << I_sk->dx - HSHIFT << "}{" << I_sk->dy - VSHIFT << "}{\\pdflastximage}%" << endl; }; }; } PAGEDEF.precision(2); // end of sketches for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0 && K->G != "") { xc = K->G1; yc = K->G2; xc -= HSHIFT; yc -= VSHIFT; PAGEDEF << "\\PB{" << xc << "}{" << yc << "}{\\" << tex_Xname("G"+(K->name)) << "}%" << endl; }; } if (LAYOUT.transparency) { PAGEDEF << "\\PL{/GS0 gs}%" << endl; // end of default transparency } PAGEDEF << "\\PL{q 0 0 m " << HS << " 0 l " << HS << " " << VS << " l 0 " << VS << " l 0 0 l}"; // beginning of the text clipping path definition for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (page_text_scraps.count(K->name) > 0 && K->P != "" && K->level >= (I->first)) { xc = HSHIFT - K->S1; yc = VSHIFT - K->S2; ifstream G((K->P).c_str()); if(!G) therror((IOerr(K->P))); while(G >> buffer) { if ((buffer == "m") || (buffer == "l") || (buffer == "c")) { PAGEDEF << "\\PL{"; for(unsigned i=0; i::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0 && K->F != "") { xc = K->F1; yc = K->F2; xc -= HSHIFT; yc -= VSHIFT; PAGEDEF << "\\PB{" << xc << "}{" << yc << "}{\\" << tex_Xname(K->name) << "}%" << endl; }; } for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0 && K->E != "") { xc = K->E1; yc = K->E2; xc -= HSHIFT; yc -= VSHIFT; PAGEDEF << "\\PB{" << xc << "}{" << yc << "}{\\" << tex_Xname("E"+(K->name)) << "}%" << endl; }; } PAGEDEF << "\\PL{Q}"; // end of clipping by text for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0 && K->X != "") { xc = K->X1; yc = K->X2; xc -= HSHIFT; yc -= VSHIFT; PAGEDEF << "\\PB{" << xc << "}{" << yc << "}{\\" << tex_Xname("X"+(K->name)) << "}%" << endl; }; } if (LAYOUT.transparency) { PAGEDEF << "\\hfill}\\ht\\xxx=" << VS << "bp\\dp\\xxx=0bp" << endl; PAGEDEF << "\\immediate\\pdfxform "; PAGEDEF << "attr{/Group \\the\\attrid\\space 0 R} "; PAGEDEF << "resources{/ExtGState \\the\\resid\\space 0 R}"; PAGEDEF << "\\xxx\\PB{0}{0}{\\pdflastxform}%" << endl; } } if (mode == ATLAS && !LAYERHASH.find(layer)->second.U.empty()) { print_preview(1,PAGEDEF,HSHIFT,VSHIFT,sheet_it); } if (mode == ATLAS) { if (LAYOUT.surface == 2) print_surface_bitmaps(PAGEDEF,HSHIFT,VSHIFT); if (LAYOUT.grid == 2) print_grid_pdf(PAGEDEF,HSHIFT,VSHIFT,HSHIFT,VSHIFT,HSHIFT+HS,VSHIFT+VS); } } void print_navigator(ofstream& P, list::iterator sheet_it) { set NAV_SCRAPS; set used_layers; set used_scraps; int nav_x = 2*LAYOUT.nav_right+1; int nav_y = 2*LAYOUT.nav_up+1; double HSN = LAYOUT.hsize / LAYOUT.nav_factor * nav_x; double VSN = LAYOUT.vsize / LAYOUT.nav_factor * nav_y; double xc = 0, yc = 0; P << "%\n\\setbox\\xxx=\\hbox to " << HSN << "bp{%\n\\PL{q "; P.precision(6); P << 1/LAYOUT.nav_factor << " 0 0 " << 1/LAYOUT.nav_factor << " 0 0 cm}%\n"; P.precision(2); map::iterator lay_it = LAYERHASH.find(sheet_it->layer); if (lay_it == LAYERHASH.end()) therror (("This can't happen!")); NAV_SCRAPS.clear(); if (!lay_it->second.D.empty()) { P << "\\PL{.8 g}%\n"; used_layers = lay_it->second.D; for (set::iterator I=used_layers.begin(); I != used_layers.end(); I++) { for (int i = sheet_it->namex-LAYOUT.nav_right; i <= sheet_it->namex+LAYOUT.nav_right; i++) { for (int j = sheet_it->namey-LAYOUT.nav_up; j <= sheet_it->namey+LAYOUT.nav_up; j++) { used_scraps.clear(); map >::iterator pr_it = preview.find(xyz2str(*I,i,j)); if (pr_it != preview.end()) used_scraps = pr_it->second; if (!used_scraps.empty()) { for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0 && NAV_SCRAPS.count(K->name) == 0 && K->I != "" && K->sect == 0) { xc = K->I1; yc = K->I2; xc -= LAYOUT.hsize * (sheet_it->namex - LAYOUT.nav_right) + LAYOUT.hoffset; yc -= LAYOUT.vsize * (sheet_it->namey - LAYOUT.nav_up) + LAYOUT.voffset; P << "\\PB{" << xc << "}{" << yc << "}{\\" << tex_Xname("I"+(K->name)) << "}%" << endl; NAV_SCRAPS.insert(K->name); } } } } } } } NAV_SCRAPS.clear(); P << "\\PL{0 g}%\n"; for (int i = sheet_it->namex-LAYOUT.nav_right; i <= sheet_it->namex+LAYOUT.nav_right; i++) { for (int j = sheet_it->namey-LAYOUT.nav_up; j <= sheet_it->namey+LAYOUT.nav_up; j++) { used_scraps.clear(); map >::iterator pr_it = preview.find(xyz2str(sheet_it->layer,i,j)); if (pr_it != preview.end()) used_scraps = pr_it->second; if (!used_scraps.empty()) { for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0 && NAV_SCRAPS.count(K->name) == 0 && K->I != "" && K->sect == 0) { xc = K->I1; yc = K->I2; xc -= LAYOUT.hsize * (sheet_it->namex - LAYOUT.nav_right) + LAYOUT.hoffset; yc -= LAYOUT.vsize * (sheet_it->namey - LAYOUT.nav_up) + LAYOUT.voffset; P << "\\PB{" << xc << "}{" << yc << "}{\\" << tex_Xname("I"+(K->name)) << "}%" << endl; NAV_SCRAPS.insert(K->name); } } } } } NAV_SCRAPS.clear(); if (!lay_it->second.U.empty()) { P << "\\PL{0.2 w}%\n"; used_layers = lay_it->second.U; for (set::iterator I=used_layers.begin(); I != used_layers.end(); I++) { for (int i = sheet_it->namex-LAYOUT.nav_right; i <= sheet_it->namex+LAYOUT.nav_right; i++) { for (int j = sheet_it->namey-LAYOUT.nav_up; j <= sheet_it->namey+LAYOUT.nav_up; j++) { used_scraps.clear(); map >::iterator pr_it = preview.find(xyz2str(*I,i,j)); if (pr_it != preview.end()) used_scraps = pr_it->second; if (!used_scraps.empty()) { for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0 && NAV_SCRAPS.count(K->name) == 0 && K->B != "" && K->sect == 0) { xc = K->B1; yc = K->B2; xc -= LAYOUT.hsize * (sheet_it->namex - LAYOUT.nav_right) + LAYOUT.hoffset; yc -= LAYOUT.vsize * (sheet_it->namey - LAYOUT.nav_up) + LAYOUT.voffset; P << "\\PB{" << xc << "}{" << yc << "}{\\" << tex_Xname("B"+(K->name)) << "}%" << endl; NAV_SCRAPS.insert(K->name); } } } } } } } // navigator grid P << "\\PL{Q}" << "\\PL{0 0 " << HSN << " " << VSN << " re S 0.1 w}"; for (int i = 1; i < nav_x; i++) P << "\\PL{" << HSN*i/nav_x << " 0 m " << HSN*i/nav_x << " " << VSN << " l S}%\n"; for (int i = 1; i < nav_y; i++) P << "\\PL{0 " << VSN*i/nav_y << " m " << HSN << " " << VSN*i/nav_y << " l S}%\n"; P << "\\PL{0.4 w " << HSN*LAYOUT.nav_right/nav_x << " " << VSN*LAYOUT.nav_up/nav_y << " " << HSN/nav_x << " " << VSN/nav_y << " " << " re S}"; // XObject definition P << "\\hfill}\\ht\\xxx=" << VSN << "bp\\dp\\xxx=0bp\n"; P << "\\immediate\\pdfxform\\xxx\\newcount\\" << tex_Nname(u2str(sheet_it->id)) << " \\" << tex_Nname(u2str(sheet_it->id)) << "=\\pdflastxform" << endl; } void print_margins(ofstream& PAGEDEF) { PAGEDEF << "\\PL{q}"; // PAGEDEF << "\\PL{3 w 0 0 " << HS << " " << VS << " re S}"; if (LAYOUT.overlap > 0) { double i = LAYOUT.hsize + LAYOUT.overlap; double j = LAYOUT.vsize + LAYOUT.overlap; PAGEDEF << "\\PL{0.5 w}"; PAGEDEF << "\\PL{0 " << LAYOUT.overlap << " m " << HS << " " << LAYOUT.overlap << " l S}"; PAGEDEF << "\\PL{0 " << j << " m " << HS << " " << j << " l S}"; PAGEDEF << "\\PL{" << LAYOUT.overlap << " 0 m " << LAYOUT.overlap << " " << VS << " l S}"; PAGEDEF << "\\PL{" << i << " 0 m " << i << " " << VS << " l S}"; } PAGEDEF << "\\PL{Q}%" << endl; } void build_pages() { ofstream PAGEDEF("th_pagedef.tex"); if(!PAGEDEF) therror(("Can't write file th_pagedef.tex")); PAGEDEF.setf(ios::fixed, ios::floatfield); PAGEDEF.precision(2); ofstream PAGE("th_pages.tex"); if(!PAGE) therror(("Can't write file th_pages.tex")); PAGE.setf(ios::fixed, ios::floatfield); PAGE.precision(2); ofstream PDFRES("th_resources.tex"); if(!PDFRES) therror(("Can't write file th_resources.tex")); if (LAYOUT.transparency || LAYOUT.OCG) { PDFRES << "\\ifnum\\pdftexversion<110\\pdfcatalog{ /Version /" << (LAYOUT.OCG ? "1.5" : "1.4") << " }" << (LAYOUT.OCG ? "\\else\\pdfoptionpdfminorversion=5" : "") << "\\fi" << endl; } PDFRES << "\\pdfinfo{/Creator (Therion " << THVERSION << ", MetaPost, TeX)}%" << endl; PDFRES << "\\pdfcatalog{ /ViewerPreferences << /DisplayDocTitle true /PrintScaling /None >> }" << endl; if(ENC_NEW.NFSS != 0) PDFRES << "\\input thfonts.map" << endl; PDFRES << "\\ifnum\\pdftexversion>139" << endl; PDFRES << " \\newread\\testin" << endl; PDFRES << " \\openin\\testin=glyphtounicode.tex" << endl; PDFRES << " \\ifeof\\testin\\message{No glyph to unicode mapping found!}\\else\\closein\\testin\\input glyphtounicode.tex\\pdfgentounicode=1\\fi" << endl; PDFRES << "\\fi" << endl; if (LAYOUT.transparency) { PDFRES << "\\opacity{" << LAYOUT.opacity << "}%" << endl; PDFRES << "\\surfaceopacity{" << LAYOUT.surface_opacity << "}%" << endl; PDFRES << "\\immediate\\pdfobj{ << /GS0 " << "<< /Type /ExtGState /ca 1 /BM /Normal >> " << " /GS1 << /Type /ExtGState /ca \\the\\opacity\\space /BM /Normal >> " << " /GS2 << /Type /ExtGState /ca \\the\\surfaceopacity\\space /BM /Normal >> >> }" << endl; PDFRES << "\\newcount\\resid\\resid=\\pdflastobj" << endl; PDFRES << "\\immediate\\pdfobj{ << /S /Transparency /K true >> }" << endl; PDFRES << "\\newcount\\attrid\\attrid=\\pdflastobj" << endl; } else { PDFRES << "\\immediate\\pdfobj{ << /GS0 " << "<< /Type /ExtGState >> " << " /GS1 << /Type /ExtGState >> " << " /GS2 << /Type /ExtGState >> >> }" << endl; PDFRES << "\\newcount\\resid\\resid=\\pdflastobj" << endl; } if (LAYOUT.OCG) { PDFRES << "\\immediate\\pdfobj{ << /Type /OCG /Name >> }" << endl; PDFRES << "\\newcount\\ocU\\ocU=\\pdflastobj" << endl; PDFRES << "\\immediate\\pdfobj{ << /Type /OCG /Name >> }" << endl; PDFRES << "\\newcount\\ocD\\ocD=\\pdflastobj" << endl; PDFRES << "\\immediate\\pdfobj{ << /Type /OCG /Name >> }" << endl; PDFRES << "\\newcount\\ocSUR\\ocSUR=\\pdflastobj" << endl; if (mode == MAP) { for (map::iterator I = LAYERHASH.begin(); I != LAYERHASH.end(); I++) { if (I->second.Z == 0) { PDFRES << "\\immediate\\pdfobj{ << /Type /OCG /Name second.N) << "> >> }" << endl; PDFRES << "\\newcount\\oc" << u2str(I->first) << "\\oc" << u2str(I->first) << "=\\pdflastobj" << endl; } } } PDFRES << "\\pdfcatalog{ /OCProperties <<" << endl << " /OCGs ["; if (LAYOUT.surface == 2) PDFRES << "\\the\\ocSUR\\space0 R "; PDFRES << "\\the\\ocU\\space0 R "; if (mode == MAP) { for (map::iterator I = LAYERHASH.begin(); I != LAYERHASH.end(); I++) { if (I->second.Z == 0) PDFRES << "\\the\\oc" << u2str(I->first) << "\\space 0 R "; } } PDFRES << "\\the\\ocD\\space0 R "; if (LAYOUT.surface == 1) PDFRES << "\\the\\ocSUR\\space0 R "; PDFRES << "]" << endl << " /D << /Name (Map layers) /ListMode /VisiblePages" << " /Order ["; if (LAYOUT.surface == 2) PDFRES << "\\the\\ocSUR\\space0 R "; PDFRES << "\\the\\ocU\\space0 R "; if (mode == MAP) { for (map::reverse_iterator I = LAYERHASH.rbegin(); I != LAYERHASH.rend(); I++) { if (I->second.Z == 0) PDFRES << "\\the\\oc" << u2str(I->first) << "\\space 0 R "; } } PDFRES << "\\the\\ocD\\space0 R "; if (LAYOUT.surface == 1) PDFRES << "\\the\\ocSUR\\space0 R "; PDFRES << "] >>" << endl << ">> }" << endl; } if (LAYOUT.doc_author != "") PDFRES << "\\pdfinfo{ /Author }" << endl; if (LAYOUT.doc_subject != "") PDFRES << "\\pdfinfo{ /Subject }" << endl; if (LAYOUT.doc_keywords != "") PDFRES << "\\pdfinfo{ /Keywords }" << endl; if (LAYOUT.doc_title != "") { PDFRES << "\\pdfinfo{ /Title }" << endl; // PDFRES << "\\legendcavename={" << utf2tex(LAYOUT.doc_title) << "}" << endl; } // if (LAYOUT.doc_comment != "") { // PDFRES << "\\legendcomment={" << utf2tex(LAYOUT.doc_comment) << "}" << endl; // } if (!LEGENDLIST.empty()) { // zmenit test na LAYOUT.legend??? PDFRES << "\\legendtrue" << endl; } else { PDFRES << "\\legendfalse" << endl; } if (!COLORLEGENDLIST.empty()) { PDFRES << "\\colorlegendtrue" << endl; } else { PDFRES << "\\colorlegendfalse" << endl; } PDFRES << "\\legendwidth=" << LAYOUT.legend_width << "bp" << endl; if (LAYOUT.map_header_bg) { PDFRES << "\\bgcolor={" << LAYOUT.background_r << " " << LAYOUT.background_g << " " << LAYOUT.background_b << "}" << endl; PDFRES << "\\legendbgfilltrue" << endl; } else PDFRES << "\\legendbgfillfalse" << endl; PDFRES.close(); // jednorazove vlozenie povrchovych obrazkov int i = 1; for (list::iterator I = SURFPICTLIST.begin(); I != SURFPICTLIST.end(); I++) { PAGEDEF << "\\pdfximage{" << (string) I->filename << "}%" << endl; PAGEDEF << "\\newcount\\" << tex_BMPname(u2str(i)) << "\\" << tex_BMPname(u2str(i)) << "=\\pdflastximage%" << endl; i++; } double origMINX=0, origMINY=0, origMAXX=0, origMAXY=0; if (mode == ATLAS) { HS = LAYOUT.hsize + 2*LAYOUT.overlap; VS = LAYOUT.vsize + 2*LAYOUT.overlap; if (LAYOUT.page_numbering) { PAGE << "\\pagenumberingtrue" << endl; } } else { if (LAYOUT.proj > 0 && LAYOUT.grid > 0) { // natiahnutie vysky aby sa zobrazil grid pod aj nad jaskynou MINY = LAYOUT.vgridsize * floor ((MINY-LAYOUT.vgridorigin)/LAYOUT.vgridsize) + LAYOUT.vgridorigin; MAXY = LAYOUT.vgridsize * ceil ((MAXY-LAYOUT.vgridorigin)/LAYOUT.vgridsize) + LAYOUT.vgridorigin; } origMINX = MINX; origMINY = MINY; origMAXX = MAXX; origMAXY = MAXY; if (LAYOUT.map_grid) { // origMINX = MINX; origMINY = MINY; origMAXX = MAXX; origMAXY = MAXY; MINX = LAYOUT.hsize * floor (MINX/LAYOUT.hsize); MINY = LAYOUT.vsize * floor (MINY/LAYOUT.vsize); MAXX = LAYOUT.hsize * ceil (MAXX/LAYOUT.hsize); MAXY = LAYOUT.vsize * ceil (MAXY/LAYOUT.vsize); } HS = MAXX - MINX; VS = MAXY - MINY; if (HS>14000 || VS>14000) therror(("Map is too large for PDF format. Try smaller scale!")); PAGEDEF << "\\eject" << endl; PAGEDEF << "\\hsize=" << HS << "bp" << endl; PAGEDEF << "\\vsize=" << VS << "bp" << endl; PAGEDEF << "\\pdfpagewidth=\\hsize\\advance\\pdfpagewidth by " << 2*LAYOUT.overlap << "bp" << endl; PAGEDEF << "\\pdfpageheight=\\vsize\\advance\\pdfpageheight by " << 2*LAYOUT.overlap << "bp" << endl; PAGEDEF << "\\hoffset=0cm" << endl; PAGEDEF << "\\voffset=0cm" << endl; PAGEDEF << "\\pdfhorigin=" << LAYOUT.overlap << "bp" << endl; PAGEDEF << "\\pdfvorigin=" << LAYOUT.overlap << "bp" << endl; } if (mode == ATLAS) { PAGEDEF << "\\newdimen\\overlap\\overlap=" << LAYOUT.overlap << "bp" << endl; for (list::iterator I = SHEET.begin(); I != SHEET.end(); I++) { // cout << "ID: " << I->id << " Layer: " << I->layer << " X: " << // I->namex << " Y: " << I->namey << endl; // cout << "*" << flush; PAGEDEF << "\\setbox\\xxx=\\hbox to "<< HS << "bp{%" << endl; print_map(I->layer, PAGEDEF, I); print_margins(PAGEDEF); PAGEDEF << "\\hfill}\\ht\\xxx=" << VS << "bp\\dp\\xxx=0bp" << endl; PAGEDEF << "\\immediate\\pdfxform"; PAGEDEF << "\\xxx\\newcount\\" << tex_Sname(u2str(I->id)) << " \\" << tex_Sname(u2str(I->id)) << "=\\pdflastxform" << endl; print_navigator(PAGEDEF,I); compose_page(I, PAGE); } } else { PAGEDEF << "\\newdimen\\x \\x=" << HS << "bp" << endl; PAGEDEF << "\\newdimen\\y \\y=" << VS << "bp" << endl; PAGEDEF << "\\setbox\\xxx=\\hbox to \\x{\\maplayout\\hfill}%\\dp\\xxx=0bp" << endl; PAGEDEF << "\\advance\\x by \\extraE" << endl; PAGEDEF << "\\advance\\x by \\extraW" << endl; PAGEDEF << "\\advance\\y by \\extraN" << endl; PAGEDEF << "\\advance\\y by \\extraS" << endl; PAGEDEF << "\\newbox\\xxxx\\setbox\\xxxx=\\hbox to \\x{\\kern\\extraW\\raise\\extraS\\box\\xxx\\hss}%\\dp\\xxx=0bp" << endl; PAGEDEF << "\\wd\\xxxx=\\x" << endl; PAGEDEF << "\\ht\\xxxx=\\y" << endl; PAGEDEF << "\\immediate\\pdfxform\\xxxx" << endl; PAGEDEF << "\\newcount\\THmaplegend\\THmaplegend=\\pdflastxform" << endl; PAGEDEF << "\\advance\\pdfhorigin by \\extraW" << endl; PAGEDEF << "\\advance\\pdfvorigin by \\extraN" << endl; PAGEDEF << "\\advance\\pdfpagewidth by \\extraW" << endl; PAGEDEF << "\\advance\\pdfpagewidth by \\extraE" << endl; PAGEDEF << "\\advance\\pdfpageheight by \\extraN" << endl; PAGEDEF << "\\advance\\pdfpageheight by \\extraS" << endl; PAGEDEF << "\\newdimen\\overlap\\overlap=" << LAYOUT.overlap << "bp" << endl; PAGEDEF << "\\dimtobp{\\the\\pdfpagewidth}\\edef\\xsize{\\tmpdef}%" << endl; PAGEDEF << "\\dimtobp{\\the\\pdfpageheight}\\edef\\ysize{\\tmpdef}%" << endl; PAGEDEF << "\\advance\\y by -\\extraN\\advance\\y by \\overlap" << endl; PAGEDEF << "\\dimtobp{\\the\\y}\\edef\\nsize{\\tmpdef}%" << endl; PAGEDEF << "\\x=\\extraW\\advance\\x by \\overlap" << endl; PAGEDEF << "\\dimtobp{\\the\\x}\\edef\\wsize{\\tmpdef}%" << endl; PAGEDEF << "\\newdimen\\overlaphalf\\overlaphalf=\\overlap\\divide\\overlaphalf by 2%" << endl; PAGEDEF << "\\newdimen\\framew\\framew=\\pdfpagewidth\\advance\\framew by -\\overlap" << endl; PAGEDEF << "\\newdimen\\frameh\\frameh=\\pdfpageheight\\advance\\frameh by -\\overlap" << endl; PAGEDEF << "\\newdimen\\framex\\framex=\\extraW\\advance\\framex by \\overlaphalf" << endl; PAGEDEF << "\\newdimen\\framey\\framey=\\extraN\\advance\\framey by \\overlaphalf" << endl; PAGEDEF << "\\dimtobp{\\framew}\\edef\\Framew{\\tmpdef}%" << endl; PAGEDEF << "\\dimtobp{\\frameh}\\edef\\Frameh{\\tmpdef}%" << endl; PAGEDEF << "\\dimtobp{\\framex}\\edef\\Framex{\\tmpdef}%" << endl; PAGEDEF << "\\dimtobp{\\framey}\\edef\\Framey{\\tmpdef}%" << endl; PAGEDEF << "\\adjustedHS=" << HS << "bp" << "\\advance\\adjustedHS by \\extraE" << "\\advance\\adjustedHS by \\extraW" << "\\advance\\adjustedHS by \\overlap" << "\\advance\\adjustedHS by \\overlap" << endl; PAGEDEF << "\\adjustedVS=" << VS << "bp" << "\\advance\\adjustedVS by \\extraN" << "\\advance\\adjustedVS by \\extraS" << "\\advance\\adjustedVS by \\overlap" << "\\advance\\adjustedVS by \\overlap" << endl; //calibration PAGEDEF.precision(10); for (int i=0; i<9; i++) { PAGEDEF << "\\calibrX{" << LAYOUT.calibration_local[i].x - MINX << "bp}\\tmpdimenX=\\tmpdimen" << endl; PAGEDEF << "\\calibrY{" << LAYOUT.calibration_local[i].y - MINY << "bp}\\tmpdimenY=\\tmpdimen" << endl; PAGEDEF << "\\pdfcatalog { /thCalibrate" << i << " (X=\\the\\tmpdimenX, Y=\\the\\tmpdimenY, L=" << LAYOUT.calibration_latlong[i].x << ", F=" << LAYOUT.calibration_latlong[i].y << ")}" << endl; } PAGEDEF << "\\pdfcatalog { /thCalibrate (HS=\\the\\adjustedHS, VS=\\the\\adjustedVS, HD=" << LAYOUT.calibration_hdist << ")}"; PAGEDEF.precision(2); PAGEDEF << "\\tmpdimen=\\extraW\\advance\\tmpdimen by \\overlap" << endl; PAGEDEF << "\\dimtobp{\\tmpdimen}\\edef\\adjustedX{\\tmpdef}%" << endl; PAGEDEF << "\\tmpdimen=\\extraS\\advance\\tmpdimen by \\overlap" << endl; PAGEDEF << "\\dimtobp{\\tmpdimen}\\edef\\adjustedY{\\tmpdef}%" << endl; /* if ((LAYOUT.background_r != 1) || (LAYOUT.background_g != 1) || (LAYOUT.background_b != 1)) { */ if (! LAYOUT.transparent_map_bg) { PAGEDEF << "\\PL{q " << LAYOUT.background_r << " " << LAYOUT.background_g << " " << LAYOUT.background_b << " rg -" << "\\wsize\\space" << "-" << "\\nsize\\space" << "\\xsize\\space" << "\\ysize\\space" << " re f Q}%" << endl; } PAGEDEF << "\\ifdim\\framethickness>0mm\\dimtobp{\\framethickness}\\edef\\Framethickness{\\tmpdef}" << "\\PL{q 0 0 0 RG 1 J 1 j \\Framethickness\\space w " << "-\\Framex\\space\\Framey\\space\\Framew\\space-\\Frameh\\space" << " re s Q}\\fi" << endl; // PAGEDEF << "\\leavevmode\\setbox\\xxx=\\hbox to " << HS << "bp{%" << endl; PAGEDEF << "\\leavevmode\\setbox\\xxx=\\hbox to 0bp{%" << endl; if (LAYOUT.surface == 1) print_surface_bitmaps(PAGEDEF,MINX,MINY); // print_page_bg(PAGEDEF); for (map::iterator I = LAYERHASH.begin(); I != LAYERHASH.end(); I++) { if (I->second.Z == 0) { if (LAYOUT.OCG && LAYOUT.transparency) { PAGEDEF << "\\PL{/OC /oc\\the\\oc" << u2str(I->first) << "\\space BDC}%" << endl; } print_page_bg_scraps(I->first,PAGEDEF); if (LAYOUT.OCG && LAYOUT.transparency) { PAGEDEF << "\\PL{EMC}%" << endl; } } } if (LAYOUT.grid == 1) print_grid_pdf(PAGEDEF,MINX,MINY,origMINX,origMINY,origMAXX,origMAXY); if (!MAP_PREVIEW_DOWN.empty()) print_preview(0,PAGEDEF,MINX,MINY); for (map::iterator I = LAYERHASH.begin(); I != LAYERHASH.end(); I++) { if (I->second.Z == 0) { PAGEDEF << "\\setbox\\xxx=\\hbox to " << HS << "bp{%" << endl; // we need flush layer data using XObject // (the text clipping path may become too large) print_map((*I).first,PAGEDEF); PAGEDEF << "\\hfill}\\ht\\xxx=" << VS << "bp\\dp\\xxx=0bp" << endl; PAGEDEF << "\\immediate\\pdfxform "; if (LAYOUT.OCG) { PAGEDEF << "attr{/OC \\the\\oc" << u2str(I->first) << "\\space 0 R} "; } PAGEDEF << "\\xxx\\PB{0}{0}{\\pdflastxform}%" << endl; } } if (!MAP_PREVIEW_UP.empty()) print_preview(1,PAGEDEF,MINX,MINY); if (LAYOUT.surface == 2) print_surface_bitmaps(PAGEDEF,MINX,MINY); if (LAYOUT.grid == 2) print_grid_pdf(PAGEDEF,MINX,MINY,origMINX,origMINY,origMAXX,origMAXY); if (LAYOUT.map_grid) { PAGEDEF << "\\PL{q .4 w 0.6 g 0.6 G }%" << endl; PAGEDEF << "\\PL{0 0 " << HS << " " << VS << " re S}%" << endl; for (double i=0; i <= HS; i += LAYOUT.hsize) { PAGEDEF << "\\PL{" << i << " 0 m " << i << " " << VS << " l S}%" << endl; if (i::iterator I = LAYERHASH.begin(); I != LAYERHASH.end(); I++) { if (I->second.Z == 0) PAGEDEF << "/oc\\the\\oc" << u2str(I->first) << "\\space\\the\\oc" << u2str(I->first) << "\\space0 R "; } PAGEDEF << " >> }\\pdfpageresources\\expandafter{\\thpdfpageres}" << endl; } } PAGEDEF.close(); PAGE.close(); } int thpdf(int m) { mode = m; #ifdef NOTHERION init_encodings(); print_fonts_setup(); cout << "making " << ((mode == ATLAS) ? "atlas" : "map") << " ... " << flush; #else thprintf("making %s ... ", (mode == ATLAS) ? "atlas" : "map"); #endif SHEET.clear(); SHEET_JMP.clear(); MINX=DBL_MAX, MINY=DBL_MAX, MAXX=-DBL_MAX, MAXY=-DBL_MAX; #ifdef NOTHERION read_settings(); // change to the quick mode only #endif make_sheets(); if (mode == ATLAS) { sort_sheets(); find_jumps(); } build_pages(); #ifdef NOTHERION cout << "done" << endl; #else thprintf("done\n"); #endif return(0); } #ifdef NOTHERION int main() { thpdf(0); } #endif therion/thpdf.h0000644000076400010400000000177410625655142014562 0ustar userAdministrators/* * Copyright (C) 2003 Martin Budaj * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thpdf_h #define thpdf_h int thpdf(int mode); // 0=atlas, 1=mapa #endif therion/thpdfdata.cxx0000644000076400010400000000510011446630400015742 0ustar userAdministrators/** * @file thpdfdata.cxx */ /* Copyright (C) 2003 Martin Budaj * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include #include #include #include #include "thpdfdata.h" #include "thlang.h" using namespace std; list SCRAPLIST; list LEGENDLIST; list COLORLEGENDLIST; map LAYERHASH; set MAP_PREVIEW_UP, MAP_PREVIEW_DOWN; layout LAYOUT; list SURFPICTLIST; scraprecord::scraprecord() { S1=0.0; S2=0.0; layer=0; level=0; sect=0; F1=0.0; F2=0.0; F3=0.0; F4=0.0; G1=0.0; G2=0.0; G3=0.0; G4=0.0; B1=0.0; B2=0.0; B3=0.0; B4=0.0; I1=0.0; I2=0.0; I3=0.0; I4=0.0; E1=0.0; E2=0.0; E3=0.0; E4=0.0; X1=0.0; X2=0.0; X3=0.0; X4=0.0; r=-1; g=-1; b=-1; } layerrecord::layerrecord() { Z=0; AltJump = 0; minx=0; maxx=0; miny=0; maxy=0; bookmark = false; } layout::layout() { transparency = true; overlap = 20; hsize = 400; vsize = 600; map_grid = false; hoffset = 0; voffset = 0; excl_pages = false; labelx = "0"; labely = "0"; page_numbering = true; nav_right = 2; nav_up = 2; nav_factor = 30; title_pages = false; background_r = 1; background_g = 1; background_b = 1; foreground_r = 1; foreground_g = 1; foreground_b = 1; preview_below_r = .8; preview_below_g = .8; preview_below_b = .8; preview_above_r = 0; preview_above_g = 0; preview_above_b = 0; own_pages = 0; OCG = true; lang = THLANG_UNKNOWN; legend_width = 200; legend_columns = 2; surface = 0; surface_opacity = 0.7; hgridorigin = 0; vgridorigin = 0; map_header_bg = false; transparent_map_bg = false; colored_text = true; grid_coord_freq = 2; } paired::paired() { x = 0; y = 0; } therion/thpdfdata.h0000644000076400010400000000702711446630326015410 0ustar userAdministrators/* * Copyright (C) 2003 Martin Budaj * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thpdfdata_h #define thpdfdata_h #include #include #include #include #include "thepsparse.h" using namespace std; struct surfpictrecord { const char * filename, * type; double dx, dy, xx, xy, yx, yy, width, height; }; struct scraprecord { string name,F,B,I,E,X,G,C,P; // name + files converted_data Fc, Bc, Ic, Ec, Xc, Gc; double S1,S2; // shift int layer,level,sect; // Y, V, Z double F1,F2,F3,F4, // bounding boxes G1,G2,G3,G4, B1,B2,B3,B4, I1,I2,I3,I4, E1,E2,E3,E4, X1,X2,X3,X4; double r,g,b; list SKETCHLIST; scraprecord(); }; struct layerrecord { set U,D; string N,T; int Z; int AltJump; int minx, maxx, miny, maxy; bool bookmark; map< int,set > scraps; set allscraps; layerrecord(); }; struct legendrecord { string name, fname, descr; converted_data ldata; unsigned idsym, idfig, idnum; }; struct colorlegendrecord { double R, G, B; string texname, name; }; struct paired { double x,y; paired(); }; paired rotatedaround(paired x,paired o, double th); struct layout { string excl_list,labelx,labely, doc_author,doc_keywords,doc_subject,doc_title,doc_comment, northarrow, scalebar,langstr; bool excl_pages,title_pages,page_numbering, transparency,map_grid,OCG,map_header_bg,colored_text,transparent_map_bg; double hsize,vsize,overlap, hgridsize, vgridsize, hgridorigin, vgridorigin, gridrot, nav_factor, XS,YS,XO,YO; int nav_right,nav_up,own_pages,lang,legend_columns; double hoffset, voffset, opacity, legend_width; double background_r, background_g, background_b; double foreground_r, foreground_g, foreground_b; double preview_below_r, preview_below_g, preview_below_b; double preview_above_r, preview_above_g, preview_above_b; int surface, grid, proj, grid_coord_freq; // freq 0 no, 1 border, 2 all string gridAA, gridAB, gridAC, gridBA, gridBB, gridBC, gridCA, gridCB, gridCC; paired gridcell[9]; double surface_opacity; paired calibration_local[9], calibration_latlong[9]; double calibration_hdist; layout(); }; extern map LAYERHASH; extern set MAP_PREVIEW_UP, MAP_PREVIEW_DOWN; extern list SCRAPLIST; extern list LEGENDLIST; extern list COLORLEGENDLIST; extern layout LAYOUT; extern list PATTERNLIST; extern list GRIDLIST; extern converted_data NArrow, ScBar; extern list SURFPICTLIST; #endif therion/thpdfdbg.cxx0000644000076400010400000001051310737424264015604 0ustar userAdministrators/** * @file thpdfdbg.cxx */ /* Copyright (C) 2003 Martin Budaj * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include "thpdfdbg.h" #include "thpdfdata.h" #ifndef NOTHERION #include "thexception.h" #endif using namespace std; string tex_Xname(string s) {return("THX"+s);} string tex_Wname(string s) {return("THW"+s);} // special = northarrow &c. string u2str(unsigned u) { unsigned i=u; char c; string s=""; while (i>0) { c = 'a' + ((i-1) % 26); s = c + s; i = (i-1) / 26; }; return (s); } string rgb2svg(double r, double g, double b) { char ch[8]; sprintf(ch,"#%02x%02x%02x",int(255*r) % 256, int(255*g) % 256, int(255*b) % 256); return (string) ch; } void print_hash(){ ofstream F("scraps.dat"); if(!F) therror(("Can't open file `scraps.dat'")); F << "[SCRAP]" << endl; for (list::iterator I = SCRAPLIST.begin(); I != SCRAPLIST.end(); I++) { F << "N " << I->name << endl; if (I->F != "") { F << "F " << I->F1 << " " << I->F2 << " " << I->F3 << " " << I->F4 << endl; } if (I->G != "") { F << "G " << I->G1 << " " << I->G2 << " " << I->G3 << " " << I->G4 << endl; } if (I->B != "") { F << "B " << I->B1 << " " << I->B2 << " " << I->B3 << " " << I->B4 << endl; } if (I->I != "") { F << "I " << I->I1 << " " << I->I2 << " " << I->I3 << " " << I->I4 << endl; } if (I->E != "") { F << "E " << I->E1 << " " << I->E2 << " " << I->E3 << " " << I->E4 << endl; } if (I->X != "") { F << "X " << I->X1 << " " << I->X2 << " " << I->X3 << " " << I->X4 << endl; } if (I->P != "") { F << "P " << I->P << " " << I->S1 << " " << I->S2 << endl; } F << "Y " << I->layer << endl; F << "V " << I->level << endl; if (I->sect != 0) { F << "Z 1" << endl; } } F << "[LAYER]" << endl; for (map::iterator I = LAYERHASH.begin(); I != LAYERHASH.end(); I++) { F << "R " << (*I).first << endl; if (!(((*I).second).U).empty()) { F << "U"; for (set::iterator J = (((*I).second).U).begin(); J != (((*I).second).U).end(); J++) { F << " " << *J; } F << endl; } if (!(((*I).second).D).empty()) { F << "D"; for (set::iterator J = (((*I).second).D).begin(); J != (((*I).second).D).end(); J++) { F << " " << *J; } F << endl; } if (((*I).second).N != "") { F << "N " << ((*I).second).N << endl; } if (((*I).second).T != "") { F << "T " << ((*I).second).T << endl; } if (I->second.Z != 0) { F << "Z 1" << endl; } } F << "[MAP]" << endl; if (!MAP_PREVIEW_UP.empty()) { F << "U"; for (set::iterator J = MAP_PREVIEW_UP.begin(); J != MAP_PREVIEW_UP.end(); J++) { F << " " << *J; } F << endl; } if (!MAP_PREVIEW_DOWN.empty()) { F << "D"; for (set::iterator J = MAP_PREVIEW_DOWN.begin(); J != MAP_PREVIEW_DOWN.end(); J++) { F << " " << *J; } F << endl; } F.close(); } void thpdfdbg() { print_hash(); } therion/thpdfdbg.h0000644000076400010400000000254410625655142015233 0ustar userAdministrators/* * Copyright (C) 2003 Martin Budaj * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thpdfdbg_h #define thpdfdbg_h #include #include #ifndef NOTHERION #include "thexception.h" #endif using namespace std; #ifdef NOTHERION #define therror(P) {\ cerr << P << endl;\ exit(0);\ } #endif void thpdfdbg(); // volat len v debugovacom mode string u2str(unsigned u); string tex_Xname(string s); string tex_Wname(string s); string pdf_info(void); string rgb2svg(double r, double g, double b); #endif therion/thperson.cxx0000644000076400010400000000573610721203310015653 0ustar userAdministrators/** * @file thperson.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thperson.h" #include "thdatabase.h" #include "thparse.h" #include "thexception.h" #include void thperson::reset() { this->n1 = ""; this->n2 = ""; this->nn = "/"; } void thperson::identify(thdatabase * dbp) { dbp->buff_tmp = this->n2; dbp->buff_tmp += "/"; dbp->buff_tmp += this->n1; this->nn = dbp->strstore(dbp->buff_tmp.get_buffer(), true); } thperson::thperson() { this->reset(); } #ifdef THWIN32 char * index(char * str, char znk) { size_t sln = strlen(str), idx; for(idx = 0; idx < sln; idx++, str++) if(*str == znk) return str; return NULL; } #endif void thperson::parse(thdatabase * dbp, char * src) { this->reset(); bool has_sep = (index(src,'/') != NULL); thsplit_strings(&(dbp->mbuff_tmp), src, '/'); if (has_sep) { if (dbp->mbuff_tmp.get_size() == 1) { this->n2 = dbp->strstore((dbp->mbuff_tmp.get_buffer())[0], true); } else if (dbp->mbuff_tmp.get_size() == 2) { this->n1 = dbp->strstore((dbp->mbuff_tmp.get_buffer())[0], true); this->n2 = dbp->strstore((dbp->mbuff_tmp.get_buffer())[1], true); } else ththrow(("invalid name format -- \"%s\"", src)) } else { thsplit_args(&(dbp->mbuff_tmp), src); if (dbp->mbuff_tmp.get_size() == 1) { this->n2 = dbp->strstore((dbp->mbuff_tmp.get_buffer())[0], true); } else if (dbp->mbuff_tmp.get_size() == 2) { this->n1 = dbp->strstore((dbp->mbuff_tmp.get_buffer())[0], true); this->n2 = dbp->strstore((dbp->mbuff_tmp.get_buffer())[1], true); } else ththrow(("invalid name format -- \"%s\"", src)) } this->identify(dbp); } bool operator < (const class thperson & p1, const class thperson & p2) { if (strcmp(p1.nn, p2.nn) < 0) return true; else return false; } bool operator == (const class thperson & p1, const class thperson & p2) { if (strcmp(p1.nn, p2.nn) == 0) return true; else return false; } const char * thperson::get_n1() const { return this->n1; } const char * thperson::get_n2() const { return this->n2; } therion/thperson.h0000644000076400010400000000337310721203330015275 0ustar userAdministrators/** * @file thperson.h * Person class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thperson_h #define thperson_h /** * Person class. */ class thperson { const char * n1, ///< First name. * n2, ///< Second name. * nn; ///< Identification string. void reset(); ///< Reset person names. void identify(class thdatabase * dbp); ///< Make identification string. friend bool operator < (const class thperson &, const class thperson &); friend bool operator == (const class thperson &, const class thperson &); public: /** * Standard constructor. */ thperson(); /** * Parse the person name. */ void parse(thdatabase * dbp, char * src); /** * Return first name. */ const char * get_n1() const; /** * Return second name. */ const char * get_n2() const; }; #endif therion/thpic.cxx0000644000076400010400000002373312047265472015141 0ustar userAdministrators/** * @file thpic.cxx * Picture manipulation structure. */ /* Copyright (C) 2006 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thpic.h" #include "thbuffer.h" #include "thdatabase.h" #include "thinit.h" #include "thtmpdir.h" #include "thexception.h" #include #ifdef THMSVC #include #define getcwd _getcwd #endif long thpic__convert_number(1); const char * thpic__tmp(NULL); thpic::thpic() { this->fname = NULL; this->texfname = NULL; this->rgba = NULL; this->rgbafn = NULL; this->width = -1; this->height = -1; this->x = 0.0; this->y = 0.0; this->scale = 1.0; if (thpic__tmp == NULL) { thdb.buff_tmp = thtmp.get_file_name("pic0000.txt"); thpic__tmp = thdb.strstore(thdb.buff_tmp); } } bool thpic::exists() { return ((this->width > 0) && (this->height > 0)); } void thpic::init(const char * pfname, const char * incfnm) { long i; thbuffer pict_path; pict_path.guarantee(1024); getcwd(pict_path.get_buffer(),1024); if (strlen(pfname) == 0) ththrow(("picture file name not specified")); pict_path += "/"; if (incfnm != NULL) pict_path += incfnm; char * pp = pict_path.get_buffer(); for(i = (long)strlen(pp); i >= 0; i--) { if ((pp[i] == '/') || (pp[i] == '\\')) { break; } else pp[i] = 0; } if (strlen(pp) == 0) pict_path = "/"; pict_path += pfname; pp = pict_path.get_buffer(); for(i = (long)strlen(pp); i >= 0; i--) { if (pp[i] == '\\') pp[i] = '/'; } this->fname = thdb.strstore(pp); // thprintf("\npict name: %s\n", this->fname); thbuffer ccom; int retcode; bool isspc; // program path isspc = (strcspn(thini.get_path_identify()," \t") < strlen(thini.get_path_identify())); ccom = ""; if (isspc) ccom += "\""; ccom += thini.get_path_identify(); if (isspc) ccom += "\""; // format ccom += " -format \"%w\\n%h\\n\" "; // filename isspc = (strcspn(this->fname," \t") < strlen(this->fname)); if (isspc) ccom += "\""; ccom += this->fname; if (isspc) ccom += "\""; // write into ccom += " > "; isspc = (strcspn(thpic__tmp," \t") < strlen(thpic__tmp)); if (isspc) ccom += "\""; ccom += thpic__tmp; if (isspc) ccom += "\""; #ifdef THDEBUG thprintf("running convert\n"); #endif retcode = system(ccom.get_buffer()); if (retcode == EXIT_SUCCESS) { FILE * tmp; tmp = fopen(thpic__tmp,"r"); if (tmp == NULL) retcode = EXIT_FAILURE; else { if (fscanf(tmp,"%ld",&this->width) != 1) retcode = EXIT_FAILURE; if (fscanf(tmp,"%ld",&this->height) != 1) retcode = EXIT_FAILURE; fclose(tmp); } } if ((retcode != EXIT_SUCCESS) || (!this->exists())) { thwarning(("unable to read \"%s\"", this->fname)) this->height = -1; this->width = -1; } } const char * thpic::convert(const char * type, const char * ext, const char * optfmt, ...) { if (!this->exists()) return NULL; thbuffer ccom; int retcode; bool isspc; char tmpfn[255]; const char * tmpf; char options[1024]; va_list args; va_start(args, optfmt); vsprintf(options, optfmt, args); va_end(args); sprintf(tmpfn, "pic%04ld.%s", thpic__convert_number++, ext); isspc = (strcspn(thini.get_path_convert()," \t") < strlen(thini.get_path_convert())); ccom = ""; if (isspc) ccom += "\""; ccom += thini.get_path_convert(); if (isspc) ccom += "\""; ccom += " "; ccom += options; ccom += " "; isspc = (strcspn(this->fname," \t") < strlen(this->fname)); if (isspc) ccom += "\""; ccom += this->fname; if (isspc) ccom += "\""; ccom += " "; tmpf = thtmp.get_file_name(tmpfn); isspc = (strcspn(tmpf," \t") < strlen(tmpf)); if (isspc) ccom += "\""; ccom += type; ccom += ":"; ccom += tmpf; if (isspc) ccom += "\""; retcode = system(ccom.get_buffer()); if (retcode == EXIT_SUCCESS) { ccom = thtmp.get_file_name(tmpfn); size_t x, l; l = strlen(ccom); for (x = 0; x < l; x++) if (ccom.get_buffer()[x] == '\\') ccom.get_buffer()[x] = '/'; return (thdb.strstore(ccom)); } else { return NULL; } } void thpic::rgba_load() { if (!this->exists()) return; if (this->rgbafn == NULL) { this->rgbafn = this->convert("RGBA","rgba","-depth 8"); } if (this->rgbafn == NULL) return; FILE * f; f = fopen(this->rgbafn,"rb"); if (f != NULL) { size_t rawsize, readsize; rawsize = (size_t)(this->width * this->height * 4); this->rgba = new char [rawsize]; readsize = fread(this->rgba, 1, rawsize, f); if (readsize < rawsize) { this->rgba_free(); } fclose(f); } } void thpic::rgba_free() { if (this->rgba != NULL) { delete [] this->rgba; this->rgba = NULL; } } void thpic::rgba_init(long w, long h) { this->width = w; this->height = h; long i, s; s = 4 * w * h; this->rgba = new char [s]; for(i = 0; i < s; i++) this->rgba[i] = 0; } void thpic::rgba_save(const char * type, const char * ext, int colors) { if (this->rgba == NULL) { this->width = -1; this->height = -1; this->fname = NULL; return; } thpic tmp; tmp.width = this->width; tmp.height = this->height; char tmpfn[255]; sprintf(tmpfn, "pic%04ld.rgba", thpic__convert_number++); tmp.fname = thdb.strstore(thtmp.get_file_name(tmpfn)); this->rgbafn = tmp.fname; FILE * f; f = fopen(tmp.fname,"wb"); fwrite(this->rgba,1,4 * this->width * this->height,f); fclose(f); if (colors > 1) this->fname = tmp.convert(type, ext, "-depth 8 -size %dx%d -density 300 +dither -colors %d", this->width, this->height, colors); else this->fname = tmp.convert(type, ext, "-depth 8 -size %dx%d -density 300", this->width, this->height); sprintf(tmpfn, "pic%04ld.%s", thpic__convert_number - 1, ext); this->texfname = thdb.strstore(tmpfn); } void thpic::rgba_set_pixel(long x, long y, char * data) { char * dst; if ((this->rgba == NULL) || (x < 0) || (x >= this->width) || (y < 0) || (y >= this->height)) return; dst = &(this->rgba[4 * ((this->height - y - 1) * this->width + x)]); dst[0] = data[0]; dst[1] = data[1]; dst[2] = data[2]; dst[3] = data[3]; } char * thpic::rgba_get_pixel(long x, long y) { static unsigned char data[4], * src; if (this->rgba == NULL) return NULL; if ((x < 0) || (x >= this->width) || (y < 0) || (y >= this->height)) { data[0] = 255; data[1] = 255; data[2] = 255; data[3] = 0; } else { src = (unsigned char *) &(this->rgba[4 * ((this->height - y - 1) * this->width + x)]); data[0] = src[0]; data[1] = src[1]; data[2] = src[2]; data[3] = src[3]; } return (char *) data; } double R(double x) { double P2, P1, P0, P_1; #define P(c) (x > -c ? x + c : 0.0); #define P_(c) (x > c ? x - c : 0.0); P2 = P(2.0); P1 = P(1.0); P0 = P(0.0); P_1 = P_(1.0); return (0.16666666666666666666666666666667 * (P2*P2*P2 - 4.0 * P1*P1*P1 + 6.0 * P0*P0*P0 - 4 * P_1*P_1*P_1)); } char * thpic::rgba_interpolate_pixel(double x, double y) { // nearest #define PIC_INT_BSPLINE #ifdef PIC_INT_NEAREST return this->rgba_get_pixel(long(x + 0.5), long(y + 0.5)); #endif #ifdef PIC_INT_BILINEAR static unsigned char data[4]; unsigned char * src00, * src10, * src01, * src11; int m, i, j; double dx, dy, w00, w10, w01, w11, d; i = int(x); j = int(y); if ((i < -2) || (i > this->width + 2) || (j < -2) || (j > this->height + 2)) { data[0] = 255; data[1] = 255; data[2] = 255; data[3] = 0; return (char *) data; } dx = x - double(i); dy = y - double(j); w00 = (1 - dx) * (1 - dy); w10 = dx * (1 - dy); w01 = (1 - dx) * dy; w11 = dx * dy; src00 = (unsigned char *) this->rgba_get_pixel(i,j); src10 = (unsigned char *) this->rgba_get_pixel(i+1,j); src01 = (unsigned char *) this->rgba_get_pixel(i,j+1); src11 = (unsigned char *) this->rgba_get_pixel(i+1,j+1); for (m = 0; m < 4; m++) { d = w00 * double(src00[m]) + w10 * double(src10[m]) + w01 * double(src01[m]) + w11 * double(src11[m]); i = int(d + 0.5); if (i < 0) i = 0; if (i > 255) i = 255; data[m] = (unsigned char) i; } return (char *) data; #endif #ifdef PIC_INT_BSPLINE static unsigned char data[4]; unsigned char * src; int m, n, i, j; double dx, dy, w, ddata[4]; i = int(x); j = int(y); if ((i < -2) || (i > this->width + 2) || (j < -2) || (j > this->height + 2)) { data[0] = 255; data[1] = 255; data[2] = 255; data[3] = 0; return (char *) data; } dx = x - double(i); dy = y - double(j); ddata[0] = 0.0; ddata[1] = 0.0; ddata[2] = 0.0; ddata[3] = 0.0; for (m = -1; m < 3; m++) { for (n = -1; n < 3; n++) { src = (unsigned char *) this->rgba_get_pixel(i + m, j + n); w = R(double(m) - dx) * R(dy - double(n)); ddata[0] += w * double(src[0]); ddata[1] += w * double(src[1]); ddata[2] += w * double(src[2]); ddata[3] += w * double(src[3]); } } i = int(ddata[0] + 0.5); if (i < 0) i = 0; if (i > 255) i = 255; data[0] = (unsigned char) i; i = int(ddata[1] + 0.5); if (i < 0) i = 0; if (i > 255) i = 255; data[1] = (unsigned char) i; i = int(ddata[2] + 0.5); if (i < 0) i = 0; if (i > 255) i = 255; data[2] = (unsigned char) i; i = int(ddata[3] + 0.5); if (i < 0) i = 0; if (i > 255) i = 255; data[3] = (unsigned char) i; return (char *) data; #endif } therion/thpic.h0000644000076400010400000000325712046704242014555 0ustar userAdministrators/** * @file thpic.h * Picture manipulation structure. */ /* Copyright (C) 2006 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thpic_h #define thpic_h struct thpic { const char * fname, * texfname, * rgbafn; char * rgba; long width, height; double x, y, ///< Coordinates of upper left corner scale; ///< Image scale. thpic(); bool exists(); void init(const char * fname, const char * incfnm); const char * convert(const char * type, const char * ext, const char * optfmt, ...); void rgba_load(); void rgba_free(); void rgba_init(long width, long height); void rgba_save(const char * type, const char * ext, int colors = -1); char * rgba_get_pixel(long x, long y); char * rgba_interpolate_pixel(double x, double y); void rgba_set_pixel(long x, long y, char * data); }; #endif therion/thpoint.cxx0000644000076400010400000013033012267532374015511 0ustar userAdministrators/** * @file thpoint.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thpoint.h" #include "thexception.h" #include "thchenc.h" #include "thdatabase.h" #include "thinfnan.h" #include "thexpmap.h" #include "thtflength.h" #include "thtexfonts.h" #include "thdate.h" #include "thscrap.h" #include thpoint::thpoint() { // replace this by setting real properties initialization this->type = TT_POINT_TYPE_UNKNOWN; this->subtype = TT_POINT_SUBTYPE_UNKNOWN; this->point = thdb.db2d.insert_point(); this->cpoint = NULL; this->point->pscrap = thdb.get_current_scrap(); this->station_name.clear(); this->from_name.clear(); this->orient = thnan; this->xsize = thnan; this->ysize = thnan; this->align = TT_POINT_ALIGN_C; this->text = NULL; } thpoint::~thpoint() { if (this->type == TT_POINT_TYPE_DATE) { thdate * dp = (thdate *) this->text; if (dp != NULL) delete dp; this->text = NULL; } } int thpoint::get_class_id() { return TT_POINT_CMD; } bool thpoint::is(int class_id) { if (class_id == TT_POINT_CMD) return true; else return th2ddataobject::is(class_id); } int thpoint::get_cmd_nargs() { // replace by real number of arguments return 3; } const char * thpoint::get_cmd_end() { // insert endcommand if multiline command return NULL; } const char * thpoint::get_cmd_name() { // insert command name here return "point"; } thcmd_option_desc thpoint::get_cmd_option_desc(const char * opts) { int id = thmatch_token(opts, thtt_point_opt); if (id == TT_POINT_UNKNOWN) return th2ddataobject::get_cmd_option_desc(opts); else return thcmd_option_desc(id); } void thpoint::start_insert() { if (this->type == TT_POINT_TYPE_U) { if (this->m_subtype_str == NULL) ththrow(("missing subtype specification for point of user defined type")) this->db->db2d.register_u_symbol(this->get_class_id(), this->m_subtype_str); } } void thpoint::set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline) { double dv; int sv; char * type, * subtype; if (cod.id == 3) cod.id = TT_POINT_TYPE; switch (cod.id) { case 1: case 2: thparse_double(sv,dv,*args); if (sv != TT_SV_NUMBER) ththrow(("invalid number -- %s",*args)) if (cod.id == 1) this->point->x = dv; else this->point->y = dv; break; case TT_POINT_TYPE: th2dsplitTT(*args, &type, &subtype); this->parse_type(type); if (strlen(subtype) > 0) this->parse_subtype(subtype); break; case TT_POINT_VALUE: this->parse_value(*args); break; case TT_POINT_DIST: this->parse_value(*args); break; case TT_POINT_TEXT: thencode(&(this->db->buff_enc), *args, argenc); this->parse_text(this->db->buff_enc.get_buffer()); break; case TT_POINT_EXPLORED: this->parse_explored(*args); break; case TT_POINT_ALIGN: this->parse_align(*args); break; case TT_POINT_SCRAP: if (this->type != TT_POINT_TYPE_SECTION) ththrow(("point not section -- -scrap")) thparse_objectname(this->station_name, & this->db->buff_stations, *args); break; case TT_POINT_XSIZE: ththrow(("-x-size not valid with type %s", thmatch_string(this->type,thtt_point_types))) thparse_double(sv,this->xsize,*args); if (sv != TT_SV_NUMBER) ththrow(("invalid number -- %s",*args)) if (this->xsize <= 0.0) ththrow(("size not positive -- %s",*args)) break; case TT_POINT_SIZE: ththrow(("-size not valid with type %s", thmatch_string(this->type,thtt_point_types))) thparse_double(sv,this->xsize,*args); if (sv != TT_SV_NUMBER) ththrow(("invalid number -- %s",*args)) if (this->xsize <= 0.0) ththrow(("size not positive -- %s",*args)) this->ysize = this->xsize; break; case TT_POINT_YSIZE: ththrow(("-y-size not valid with type %s", thmatch_string(this->type,thtt_point_types))) thparse_double(sv,this->ysize,*args); if (sv != TT_SV_NUMBER) ththrow(("invalid number -- %s",*args)) if (this->ysize <= 0.0) ththrow(("size not positive -- %s",*args)) break; case TT_POINT_ORIENT: switch (this->type) { case TT_POINT_TYPE_STATION: ththrow(("-orientation not valid with type %s", thmatch_string(this->type,thtt_point_types))) } thparse_double(sv,this->orient,*args); if ((sv != TT_SV_NUMBER) && (sv != TT_SV_NAN)) ththrow(("invalid number -- %s",*args)) if ((this->orient < 0.0) || (this->orient >= 360.0)) ththrow(("orientation out of range -- %s",*args)) break; case TT_POINT_SUBTYPE: this->parse_subtype(*args); break; case TT_POINT_STATION: switch (this->type) { case TT_POINT_TYPE_STATION: case TT_POINT_TYPE_CONTINUATION: thparse_objectname(this->station_name, & this->db->buff_stations, *args, thdb.cscrapptr); break; default: ththrow(("station reference not allowed with this point type")) } break; case TT_POINT_FROM: this->parse_from(*args); break; // if not found, try to set fathers properties default: if (cod.id == TT_2DOBJ_CLIP) { switch (this->type) { case TT_POINT_TYPE_STATION_NAME: case TT_POINT_TYPE_LABEL: case TT_POINT_TYPE_REMARK: case TT_POINT_TYPE_DATE: case TT_POINT_TYPE_ALTITUDE: case TT_POINT_TYPE_HEIGHT: case TT_POINT_TYPE_DIMENSIONS: case TT_POINT_TYPE_MAP_CONNECTION: case TT_POINT_TYPE_PASSAGE_HEIGHT: ththrow(("-clip not valid with type %s", thmatch_string(this->type,thtt_point_types))) break; } } th2ddataobject::set(cod, args, argenc, indataline); } } void thpoint::self_delete() { delete this; } void thpoint::self_print_properties(FILE * outf) { th2ddataobject::self_print_properties(outf); fprintf(outf,"thpoint:\n"); fprintf(outf,"\ttype: %d\n",this->type); fprintf(outf,"\tsubtype: %d\n",this->subtype); fprintf(outf,"\talign: %d\n",this->align); fprintf(outf,"\tpoint: %f,%f (%f,%f,%f,%f)\n",this->point->x, this->point->y, this->point->xt,this->point->yt,this->point->zt,this->point->at); fprintf(outf,"\torientation: %f\n", this->orient); fprintf(outf,"\tx-size: %f\n", this->xsize); fprintf(outf,"\ty-size: %f\n", this->ysize); if (this->type == TT_POINT_TYPE_STATION) { fprintf(outf,"\tstation: "); fprintf(outf,this->station_name); fprintf(outf,"\n\tfrom station: "); fprintf(outf,this->from_name); } // insert intended print of object properties here } void thpoint::parse_type(char * tstr) { this->type = thmatch_token(tstr, thtt_point_types); if (this->type == TT_POINT_TYPE_UNKNOWN) ththrow(("unknown point type -- %s", tstr)) this->xsize = thnan; this->ysize = thnan; switch (this->type) { case TT_POINT_TYPE_DATE: if (this->type == TT_POINT_TYPE_DATE) this->text = (char *) new thdate; break; case TT_POINT_TYPE_ALTITUDE: this->xsize = 0.0; this->ysize = 1.0; break; } } void thpoint::parse_subtype(char * ststr) { if (this->type == TT_POINT_TYPE_UNKNOWN) ththrow(("point type must be specified before subtype")) if (this->type == TT_POINT_TYPE_U) { this->parse_u_subtype(ststr); return; } this->subtype = thmatch_token(ststr, thtt_point_subtypes); if (this->subtype == TT_POINT_SUBTYPE_UNKNOWN) ththrow(("unknown point subtype -- %s", ststr)) // let's check type - subtype bool combok = false; switch (this->type) { case TT_POINT_TYPE_STATION: switch (this->subtype) { case TT_POINT_SUBTYPE_TEMP: case TT_POINT_SUBTYPE_FIXED: case TT_POINT_SUBTYPE_PAINTED: case TT_POINT_SUBTYPE_NATURAL: combok = true; break; } break; case TT_POINT_TYPE_AIR_DRAUGHT: switch (this->subtype) { case TT_POINT_SUBTYPE_UNDEF: case TT_POINT_SUBTYPE_WINTER: case TT_POINT_SUBTYPE_SUMMER: combok = true; break; } break; case TT_POINT_TYPE_WATER_FLOW: switch (this->subtype) { case TT_POINT_SUBTYPE_PERMANENT: case TT_POINT_SUBTYPE_INTERMITTENT: case TT_POINT_SUBTYPE_PALEO: combok = true; break; } break; } if (!combok) ththrow(("invalid point type - subtype combination")) } void thpoint::parse_from(char * estr) { thsplit_words(& this->db->db2d.mbf, estr); int npar = this->db->db2d.mbf.get_size(); char ** pars = this->db->db2d.mbf.get_buffer(); if (npar != 1) ththrow(("invalid from station reference -- %s", estr)) thparse_objectname(this->from_name,& this->db->buff_stations,pars[0],this->fscrapptr); } const char * thpoint_export_mp_align2mp(int a) { switch (a) { case TT_POINT_ALIGN_R: return ".rt"; case TT_POINT_ALIGN_L: return ".lft"; case TT_POINT_ALIGN_T: return ".top"; case TT_POINT_ALIGN_B: return ".bot"; case TT_POINT_ALIGN_BR: return ".lrt"; case TT_POINT_ALIGN_BL: return ".llft"; case TT_POINT_ALIGN_TR: return ".urt"; case TT_POINT_ALIGN_TL: return ".ulft"; default: return ""; } } bool thpoint::export_mp(class thexpmapmpxs * out) { th2ddataobject::export_mp(out); thattr * station_attr = NULL; long station_attr_id = 0; bool postprocess = true, expsym = false; std::string attr_text; int macroid = -1, omacroid = -1, cmark; int postprocess_label = -1; this->db->buff_enc.guarantee(8128); // char * buff = this->db->buff_enc.get_buffer(); double xrr = (thisnan(this->orient) ? out->rr : 0.0); switch(this->type) { case TT_POINT_TYPE_DIMENSIONS: case TT_POINT_TYPE_EXTRA: case TT_POINT_TYPE_MAP_CONNECTION: postprocess = false; break; case TT_POINT_TYPE_LABEL: case TT_POINT_TYPE_REMARK: case TT_POINT_TYPE_STATION_NAME: if (this->text != NULL) { switch (this->type) { case TT_POINT_TYPE_LABEL: macroid = SYMP_LABEL; break; case TT_POINT_TYPE_REMARK: macroid = SYMP_REMARK; break; default: macroid = SYMP_STATIONNAME; break; } omacroid = macroid; if (this->context >= 0) macroid = this->context; if (!out->symset->is_assigned(macroid)) return(false); if (out->file == NULL) return(true); out->symset->get_mp_macro(omacroid); out->symset->export_mp_symbol_options(out->file, omacroid); fprintf(out->file,"p_label%s(btex ",thpoint_export_mp_align2mp(thdb2d_rotate_align(this->align, xrr))); switch (this->type) { case TT_POINT_TYPE_STATION_NAME: fprintf(out->file,"\\thstationname "); break; case TT_POINT_TYPE_LABEL: fprintf(out->file,"\\thlabel"); break; case TT_POINT_TYPE_REMARK: fprintf(out->file,"\\thremark "); break; } switch (this->scale) { case TT_2DOBJ_SCALE_XL: fprintf(out->file,"\\thhugesize "); break; case TT_2DOBJ_SCALE_L: fprintf(out->file,"\\thlargesize "); break; case TT_2DOBJ_SCALE_S: fprintf(out->file,"\\thsmallsize "); break; case TT_2DOBJ_SCALE_XS: fprintf(out->file,"\\thtinysize "); break; default: fprintf(out->file,"\\thnormalsize "); } fprintf(out->file,"%s etex,", ((this->type == TT_POINT_TYPE_STATION_NAME) && (!this->station_name.is_empty())) ? (const char *) utf2tex(thobjectname__print_full_name(this->station_name.name, this->station_name.psurvey, out->layout->survey_level)) : ths2tex(this->text, out->layout->lang).c_str()); if (this->type == TT_POINT_TYPE_STATION_NAME) postprocess_label = 7; else postprocess_label = 0; } postprocess = false; break; case TT_POINT_TYPE_STATION: switch (this->subtype) { case TT_POINT_SUBTYPE_FIXED: macroid = SYMP_STATION_FIXED; cmark = TT_DATAMARK_FIXED; break; case TT_POINT_SUBTYPE_NATURAL: macroid = SYMP_STATION_NATURAL; cmark = TT_DATAMARK_NATURAL; break; case TT_POINT_SUBTYPE_PAINTED: macroid = SYMP_STATION_PAINTED; cmark = TT_DATAMARK_PAINTED; break; default: macroid = SYMP_STATION_TEMPORARY; cmark = TT_DATAMARK_TEMP; } omacroid = macroid; if (this->context >= 0) macroid = this->context; expsym = out->symset->is_assigned(macroid); if (expsym) out->symset->get_mp_macro(omacroid); { thdb1ds * pst = NULL; std::string commentstr("0"); if (this->station_name.id != 0) { pst = &(this->db->db1d.station_vec[this->station_name.id - 1]); station_attr_id = this->station_name.id; station_attr = &(thdb.db1d.m_station_attr); station_attr->export_mp_object_begin(out->file, station_attr_id); } if (pst != NULL) { #define thexpmatselected_stationflag(flag,mid) if (((pst->flags & flag) == flag) && out->symset->is_assigned(mid)) expsym = true; thexpmatselected_stationflag(TT_STATIONFLAG_ENTRANCE, SYMP_FLAG_ENTRANCE) thexpmatselected_stationflag(TT_STATIONFLAG_SINK, SYMP_FLAG_SINK) thexpmatselected_stationflag(TT_STATIONFLAG_SPRING, SYMP_FLAG_SPRING) thexpmatselected_stationflag(TT_STATIONFLAG_DOLINE, SYMP_FLAG_DOLINE) thexpmatselected_stationflag(TT_STATIONFLAG_DIG, SYMP_FLAG_DIG) thexpmatselected_stationflag(TT_STATIONFLAG_ARCH, SYMP_FLAG_ARCH) thexpmatselected_stationflag(TT_STATIONFLAG_OVERHANG, SYMP_FLAG_OVERHANG) thexpmatselected_stationflag(TT_STATIONFLAG_CONT, SYMP_FLAG_CONTINUATION) thexpmatselected_stationflag(TT_STATIONFLAG_AIRDRAUGHT, SYMP_FLAG_AIRDRAUGHT) thexpmatselected_stationflag(TT_STATIONFLAG_AIRDRAUGHT_SUMMER, SYMP_FLAG_AIRDRAUGHT) thexpmatselected_stationflag(TT_STATIONFLAG_AIRDRAUGHT_WINTER, SYMP_FLAG_AIRDRAUGHT) } if (out->file == NULL) return(expsym); if ((pst != NULL) && (pst->comment != NULL) && (strlen(pst->comment) > 0)) { commentstr = "btex \\thcomment "; commentstr += ths2tex(pst->comment, out->layout->lang); commentstr += " etex"; } if (out->symset->is_assigned(macroid)) out->symset->export_mp_symbol_options(out->file, omacroid); fprintf(out->file,"p_station("); this->point->export_mp(out); fprintf(out->file,",%d,%s,\"\"", out->symset->is_assigned(macroid) ? cmark : 0, commentstr.c_str() ); #define thexpmat_stationflag(flag,mid,str) if (((pst->flags & flag) == flag) && out->symset->is_assigned(mid)) fprintf(out->file,",\"%s\"", str); if (pst != NULL) { thexpmat_stationflag(TT_STATIONFLAG_ENTRANCE, SYMP_FLAG_ENTRANCE, "entrance") thexpmat_stationflag(TT_STATIONFLAG_SINK, SYMP_FLAG_SINK, "sink") thexpmat_stationflag(TT_STATIONFLAG_SPRING, SYMP_FLAG_SPRING, "spring") thexpmat_stationflag(TT_STATIONFLAG_DOLINE, SYMP_FLAG_DOLINE, "doline") thexpmat_stationflag(TT_STATIONFLAG_DIG, SYMP_FLAG_DIG, "dig") thexpmat_stationflag(TT_STATIONFLAG_ARCH, SYMP_FLAG_ARCH, "arch") thexpmat_stationflag(TT_STATIONFLAG_OVERHANG, SYMP_FLAG_OVERHANG, "overhang") thexpmat_stationflag(TT_STATIONFLAG_CONT, SYMP_FLAG_CONTINUATION, "continuation") thexpmat_stationflag(TT_STATIONFLAG_AIRDRAUGHT, SYMP_FLAG_AIRDRAUGHT, "air-draught") thexpmat_stationflag(TT_STATIONFLAG_AIRDRAUGHT_SUMMER, SYMP_FLAG_AIRDRAUGHT, "air-draught:summer") thexpmat_stationflag(TT_STATIONFLAG_AIRDRAUGHT_WINTER, SYMP_FLAG_AIRDRAUGHT, "air-draught:winter") } fprintf(out->file,");\n"); } if (out->symset->is_assigned(macroid) && out->layout->is_debug_stations()) { fprintf(out->file,"p_debug(0,1,"); this->point->export_mp(out,0); fprintf(out->file,");\n"); } postprocess = false; break; case TT_POINT_TYPE_ALTITUDE: macroid = SYMP_ALTITUDE; if (this->context >= 0) macroid = this->context; if ((!thisnan(this->xsize)) && (out->symset->is_assigned(macroid))) { //sprintf(buff,"%.0f",this->xsize - out->layout->goz); if (out->file == NULL) return(true); out->symset->get_mp_macro(SYMP_ALTITUDE); out->symset->export_mp_symbol_options(out->file, SYMP_ALTITUDE); fprintf(out->file,"p_label%s(btex \\thaltitude ", thpoint_export_mp_align2mp(thdb2d_rotate_align(this->align, xrr))); switch (this->scale) { case TT_2DOBJ_SCALE_XL: fprintf(out->file,"\\thhugesize "); break; case TT_2DOBJ_SCALE_L: fprintf(out->file,"\\thlargesize "); break; case TT_2DOBJ_SCALE_S: fprintf(out->file,"\\thsmallsize "); break; case TT_2DOBJ_SCALE_XS: fprintf(out->file,"\\thtinysize "); break; } fprintf(out->file,"%s etex,", utf2tex(out->layout->units.format_length(this->xsize - out->layout->goz))); postprocess_label = 1; } postprocess = false; break; case TT_POINT_TYPE_HEIGHT: if ((this->tags & (TT_POINT_TAG_HEIGHT_P | TT_POINT_TAG_HEIGHT_N | TT_POINT_TAG_HEIGHT_U)) != 0) { switch (this->tags & (TT_POINT_TAG_HEIGHT_P | TT_POINT_TAG_HEIGHT_N | TT_POINT_TAG_HEIGHT_U)) { case TT_POINT_TAG_HEIGHT_P: macroid = SYMP_HEIGHT_POSITIVE; break; case TT_POINT_TAG_HEIGHT_N: macroid = SYMP_HEIGHT_NEGATIVE; break; case TT_POINT_TAG_HEIGHT_U: macroid = SYMP_HEIGHT_UNSIGNED; break; default: return(false); } omacroid = macroid; if (this->context >= 0) macroid = this->context; if (!out->symset->is_assigned(macroid)) return(false); if (out->file == NULL) return(true); out->symset->get_mp_macro(omacroid); out->symset->export_mp_symbol_options(out->file, omacroid); fprintf(out->file,"p_label%s(btex \\thheight ",thpoint_export_mp_align2mp(thdb2d_rotate_align(this->align, xrr))); switch (this->scale) { case TT_2DOBJ_SCALE_XL: fprintf(out->file,"\\thhugesize "); break; case TT_2DOBJ_SCALE_L: fprintf(out->file,"\\thlargesize "); break; case TT_2DOBJ_SCALE_S: fprintf(out->file,"\\thsmallsize "); break; case TT_2DOBJ_SCALE_XS: fprintf(out->file,"\\thtinysize "); break; } if ((this->tags & TT_POINT_TAG_HEIGHT_P) != 0) fprintf(out->file,"\\thheightpos "); else if ((this->tags & TT_POINT_TAG_HEIGHT_N) != 0) fprintf(out->file,"\\thheightneg "); if (!thisnan(this->xsize)) { //if (double(int(this->xsize)) != this->xsize) // sprintf(buff,"%.1f",this->xsize); //else // sprintf(buff,"%.0f",this->xsize); fprintf(out->file,"%s",utf2tex(out->layout->units.format_human_length(this->xsize))); } this->db->buff_enc.strcpy((this->tags & (TT_POINT_TAG_HEIGHT_PQ | TT_POINT_TAG_HEIGHT_NQ | TT_POINT_TAG_HEIGHT_UQ)) != 0 ? "?" : "" ); fprintf(out->file,"%s etex,",utf2tex(this->db->buff_enc.get_buffer())); postprocess_label = 7; } postprocess = false; break; case TT_POINT_TYPE_DATE: macroid = SYMP_DATE; if (this->context >= 0) macroid = this->context; if ((out->symset->is_assigned(macroid)) && ((this->tags & TT_POINT_TAG_DATE) > 0)) { // ((thdate *)this->text)->print_export_str(); // fprintf(out->file,"Datelabel%s(\"%s\",", // thpoint_export_mp_align2mp(this->align), // ((thdate *)this->text)->get_str()); if (out->file == NULL) return(true); out->symset->get_mp_macro(SYMP_DATE); out->symset->export_mp_symbol_options(out->file, SYMP_DATE); fprintf(out->file,"p_label%s(btex \\thdate ", thpoint_export_mp_align2mp(thdb2d_rotate_align(this->align, xrr))); switch (this->scale) { case TT_2DOBJ_SCALE_XL: fprintf(out->file,"\\thhugesize "); break; case TT_2DOBJ_SCALE_L: fprintf(out->file,"\\thlargesize "); break; case TT_2DOBJ_SCALE_S: fprintf(out->file,"\\thsmallsize "); break; case TT_2DOBJ_SCALE_XS: fprintf(out->file,"\\thtinysize "); break; } fprintf(out->file,"%s etex,", utf2tex(((thdate *)this->text)->get_str(TT_DATE_FMT_LOCALE))); postprocess_label = 0; } postprocess = false; break; case TT_POINT_TYPE_PASSAGE_HEIGHT: if ((this->tags & (TT_POINT_TAG_HEIGHT_P | TT_POINT_TAG_HEIGHT_N | TT_POINT_TAG_HEIGHT_U)) != 0) { switch (this->tags & (TT_POINT_TAG_HEIGHT_P | TT_POINT_TAG_HEIGHT_N | TT_POINT_TAG_HEIGHT_U)) { case (TT_POINT_TAG_HEIGHT_P | TT_POINT_TAG_HEIGHT_N): macroid = SYMP_PASSAGEHEIGHT_BOTH; break; case TT_POINT_TAG_HEIGHT_P: macroid = SYMP_PASSAGEHEIGHT_POSITIVE; break; case TT_POINT_TAG_HEIGHT_N: macroid = SYMP_PASSAGEHEIGHT_NEGATIVE; break; case TT_POINT_TAG_HEIGHT_U: macroid = SYMP_PASSAGEHEIGHT_UNSIGNED; break; default: return(false); } omacroid = macroid; if (this->context >= 0) macroid = this->context; if (!out->symset->is_assigned(macroid)) return(false); if (out->file == NULL) return(true); out->symset->get_mp_macro(omacroid); out->symset->export_mp_symbol_options(out->file, omacroid); fprintf(out->file,"p_label%s(btex ",thpoint_export_mp_align2mp(thdb2d_rotate_align(this->align, xrr))); switch (this->tags & (TT_POINT_TAG_HEIGHT_P | TT_POINT_TAG_HEIGHT_N | TT_POINT_TAG_HEIGHT_U)) { case (TT_POINT_TAG_HEIGHT_P | TT_POINT_TAG_HEIGHT_N): fprintf(out->file,"\\thframed \\updown"); postprocess_label = 4; break; case TT_POINT_TAG_HEIGHT_P: fprintf(out->file,"\\thframed "); postprocess_label = 2; break; case TT_POINT_TAG_HEIGHT_N: fprintf(out->file,"\\thframed "); postprocess_label = 3; break; default: fprintf(out->file,"\\thframed "); postprocess_label = 5; break; } if (!thisnan(this->xsize)) { fprintf(out->file,"{"); switch (this->scale) { case TT_2DOBJ_SCALE_XL: fprintf(out->file,"\\thhugesize "); break; case TT_2DOBJ_SCALE_L: fprintf(out->file,"\\thlargesize "); break; case TT_2DOBJ_SCALE_S: fprintf(out->file,"\\thsmallsize "); break; case TT_2DOBJ_SCALE_XS: fprintf(out->file,"\\thtinysize "); break; } fprintf(out->file,"%s}", utf2tex(out->layout->units.format_human_length(this->xsize))); } if (!thisnan(this->ysize)) { fprintf(out->file,"{"); switch (this->scale) { case TT_2DOBJ_SCALE_XL: fprintf(out->file,"\\thhugesize "); break; case TT_2DOBJ_SCALE_L: fprintf(out->file,"\\thlargesize "); break; case TT_2DOBJ_SCALE_S: fprintf(out->file,"\\thsmallsize "); break; case TT_2DOBJ_SCALE_XS: fprintf(out->file,"\\thtinysize "); break; } fprintf(out->file,"%s}", utf2tex(out->layout->units.format_human_length(this->ysize))); } fprintf(out->file," etex,"); } postprocess = false; break; case TT_POINT_TYPE_SECTION: postprocess = false; break; #define thpoint_type_export_mp(type,mid) case type: \ macroid = mid; \ break; // ostatne typy case TT_POINT_TYPE_WATER_FLOW: switch (this->subtype) { thpoint_type_export_mp(TT_POINT_SUBTYPE_PALEO,SYMP_WATERFLOW_PALEO); thpoint_type_export_mp(TT_POINT_SUBTYPE_INTERMITTENT,SYMP_WATERFLOW_INTERMITTENT); default: macroid = SYMP_WATERFLOW_PERMANENT; } break; case TT_POINT_TYPE_AIR_DRAUGHT: switch (this->subtype) { thpoint_type_export_mp(TT_POINT_SUBTYPE_WINTER,SYMP_AIRDRAUGHT_WINTER); thpoint_type_export_mp(TT_POINT_SUBTYPE_SUMMER,SYMP_AIRDRAUGHT_SUMMER); default: macroid = SYMP_AIRDRAUGHT; } break; case TT_POINT_TYPE_CONTINUATION: macroid = SYMP_CONTINUATION; { std::string tmp; if ((this->text != NULL) && (strlen(this->text) > 0)) { if (tmp.length() > 0) tmp += " -- "; tmp += this->text; } if (tmp.length() > 0) { attr_text = "btex \\thcomment "; attr_text += ths2tex(tmp, out->layout->lang); attr_text += "etex"; } } break; // specialne symboly thpoint_type_export_mp(TT_POINT_TYPE_SPRING,SYMP_SPRING) thpoint_type_export_mp(TT_POINT_TYPE_SINK,SYMP_SINK) thpoint_type_export_mp(TT_POINT_TYPE_ENTRANCE,SYMP_ENTRANCE) thpoint_type_export_mp(TT_POINT_TYPE_GRADIENT,SYMP_GRADIENT) // vystroj thpoint_type_export_mp(TT_POINT_TYPE_ROPE,SYMP_ROPE) thpoint_type_export_mp(TT_POINT_TYPE_FIXED_LADDER,SYMP_FIXEDLADDER) thpoint_type_export_mp(TT_POINT_TYPE_ROPE_LADDER,SYMP_ROPELADDER) thpoint_type_export_mp(TT_POINT_TYPE_STEPS,SYMP_STEPS) thpoint_type_export_mp(TT_POINT_TYPE_BRIDGE,SYMP_BRIDGE) thpoint_type_export_mp(TT_POINT_TYPE_TRAVERSE,SYMP_TRAVERSE) thpoint_type_export_mp(TT_POINT_TYPE_NO_EQUIPMENT,SYMP_NOEQUIPMENT) thpoint_type_export_mp(TT_POINT_TYPE_ANCHOR,SYMP_ANCHOR) thpoint_type_export_mp(TT_POINT_TYPE_CAMP,SYMP_CAMP) thpoint_type_export_mp(TT_POINT_TYPE_DIG,SYMP_DIG) thpoint_type_export_mp(TT_POINT_TYPE_HANDRAIL,SYMP_HANDRAIL) thpoint_type_export_mp(TT_POINT_TYPE_VIA_FERRATA,SYMP_VIAFERRATA) // ukoncenia chodby thpoint_type_export_mp(TT_POINT_TYPE_NARROW_END,SYMP_NARROWEND) thpoint_type_export_mp(TT_POINT_TYPE_LOW_END,SYMP_LOWEND) thpoint_type_export_mp(TT_POINT_TYPE_FLOWSTONE_CHOKE,SYMP_FLOWSTONECHOKE) thpoint_type_export_mp(TT_POINT_TYPE_BREAKDOWN_CHOKE,SYMP_BREAKDOWNCHOKE) thpoint_type_export_mp(TT_POINT_TYPE_CLAY_CHOKE,SYMP_CLAYCHOKE) // vypln thpoint_type_export_mp(TT_POINT_TYPE_FLOWSTONE,SYMP_FLOWSTONE) thpoint_type_export_mp(TT_POINT_TYPE_MOONMILK,SYMP_MOONMILK) thpoint_type_export_mp(TT_POINT_TYPE_STALACTITE,SYMP_STALACTITE) thpoint_type_export_mp(TT_POINT_TYPE_STALAGMITE,SYMP_STALAGMITE) thpoint_type_export_mp(TT_POINT_TYPE_PILLAR,SYMP_PILLAR) thpoint_type_export_mp(TT_POINT_TYPE_STALACTITES,SYMP_STALACTITES) thpoint_type_export_mp(TT_POINT_TYPE_STALAGMITES,SYMP_STALAGMITES) thpoint_type_export_mp(TT_POINT_TYPE_PILLARS,SYMP_PILLARS) thpoint_type_export_mp(TT_POINT_TYPE_ICE_STALACTITE,SYMP_ICESTALACTITE) thpoint_type_export_mp(TT_POINT_TYPE_ICE_STALAGMITE,SYMP_ICESTALAGMITE) thpoint_type_export_mp(TT_POINT_TYPE_ICE_PILLAR,SYMP_ICEPILLAR) thpoint_type_export_mp(TT_POINT_TYPE_CURTAIN,SYMP_CURTAIN) thpoint_type_export_mp(TT_POINT_TYPE_HELICTITE,SYMP_HELICTITE) thpoint_type_export_mp(TT_POINT_TYPE_SODA_STRAW,SYMP_SODASTRAW) thpoint_type_export_mp(TT_POINT_TYPE_CRYSTAL,SYMP_CRYSTAL) thpoint_type_export_mp(TT_POINT_TYPE_WALL_CALCITE,SYMP_WALLCALCITE) thpoint_type_export_mp(TT_POINT_TYPE_POPCORN,SYMP_POPCORN) thpoint_type_export_mp(TT_POINT_TYPE_DISK,SYMP_DISK) thpoint_type_export_mp(TT_POINT_TYPE_GYPSUM,SYMP_GYPSUM) thpoint_type_export_mp(TT_POINT_TYPE_GYPSUM_FLOWER,SYMP_GYPSUMFLOWER) thpoint_type_export_mp(TT_POINT_TYPE_ARAGONITE,SYMP_ARAGONITE) thpoint_type_export_mp(TT_POINT_TYPE_CAVE_PEARL,SYMP_CAVEPEARL) thpoint_type_export_mp(TT_POINT_TYPE_RIMSTONE_POOL,SYMP_RIMSTONEPOOL) thpoint_type_export_mp(TT_POINT_TYPE_RIMSTONE_DAM,SYMP_RIMSTONEDAM) thpoint_type_export_mp(TT_POINT_TYPE_ANASTOMOSIS,SYMP_ANASTOMOSIS) thpoint_type_export_mp(TT_POINT_TYPE_KARREN,SYMP_KARREN) thpoint_type_export_mp(TT_POINT_TYPE_SCALLOP,SYMP_SCALLOP) thpoint_type_export_mp(TT_POINT_TYPE_FLUTE,SYMP_FLUTE) thpoint_type_export_mp(TT_POINT_TYPE_RAFT_CONE,SYMP_RAFT) thpoint_type_export_mp(TT_POINT_TYPE_CLAY_TREE,SYMP_CLAYTREE) // plosne vyplne thpoint_type_export_mp(TT_POINT_TYPE_BEDROCK,SYMP_BEDROCK) thpoint_type_export_mp(TT_POINT_TYPE_SAND,SYMP_SAND) thpoint_type_export_mp(TT_POINT_TYPE_RAFT,SYMP_RAFT) thpoint_type_export_mp(TT_POINT_TYPE_CLAY,SYMP_CLAY) thpoint_type_export_mp(TT_POINT_TYPE_PEBBLES,SYMP_PEBBLES) thpoint_type_export_mp(TT_POINT_TYPE_DEBRIS,SYMP_DEBRIS) thpoint_type_export_mp(TT_POINT_TYPE_BLOCKS,SYMP_BLOCKS) thpoint_type_export_mp(TT_POINT_TYPE_WATER,SYMP_WATER) thpoint_type_export_mp(TT_POINT_TYPE_ICE,SYMP_ICE) thpoint_type_export_mp(TT_POINT_TYPE_SNOW,SYMP_SNOW) thpoint_type_export_mp(TT_POINT_TYPE_GUANO,SYMP_GUANO) // ina vypln thpoint_type_export_mp(TT_POINT_TYPE_ARCHEO_MATERIAL,SYMP_ARCHEOMATERIAL) thpoint_type_export_mp(TT_POINT_TYPE_PALEO_MATERIAL,SYMP_PALEOMATERIAL) thpoint_type_export_mp(TT_POINT_TYPE_VEGETABLE_DEBRIS,SYMP_VEGETABLEDEBRIS) thpoint_type_export_mp(TT_POINT_TYPE_ROOT,SYMP_ROOT) thpoint_type_export_mp(TT_POINT_TYPE_U,SYMP_U) default: macroid = SYMP_UNDEFINED; break; } if (postprocess_label >= 0) { this->point->export_mp(out); fprintf(out->file,",%.1f,%d);\n",(thisnan(this->orient) ? 0 : 360.0 - this->orient - out->rr), postprocess_label); } omacroid = macroid; if (this->context >= 0) macroid = this->context; if ((macroid > 0) && postprocess) { if (out->symset->is_assigned(macroid)) { if (out->file == NULL) return(true); if (attr_text.length() > 0) { fprintf(out->file, "picture ATTR__text;\nATTR__text := %s;\n", attr_text.c_str()); } if (this->type == TT_POINT_TYPE_U) { out->symset->export_mp_symbol_options(out->file, -1); fprintf(out->file,"p_u_%s(",this->m_subtype_str); this->db->db2d.use_u_symbol(this->get_class_id(), this->m_subtype_str); } else { out->symset->export_mp_symbol_options(out->file, omacroid); fprintf(out->file,"%s(",out->symset->get_mp_macro(omacroid)); } } else postprocess = false; } if (postprocess) { this->point->export_mp(out); double scl = 1.0; switch (this->scale) { case TT_2DOBJ_SCALE_L: scl = 1.414; break; case TT_2DOBJ_SCALE_XL: scl = 2.0; break; case TT_2DOBJ_SCALE_S: scl = 0.707; break; case TT_2DOBJ_SCALE_XS: scl = 0.5; break; } const char * al = "(0,0)"; switch (thdb2d_rotate_align(this->align, xrr)) { case TT_POINT_ALIGN_B: al = "(0,-1)"; break; case TT_POINT_ALIGN_T: al = "(0,1)"; break; case TT_POINT_ALIGN_L: al = "(-1,0)"; break; case TT_POINT_ALIGN_R: al = "(1,0)"; break; case TT_POINT_ALIGN_BL: al = "(-1,-1)"; break; case TT_POINT_ALIGN_TL: al = "(-1,1)"; break; case TT_POINT_ALIGN_BR: al = "(1,-1)"; break; case TT_POINT_ALIGN_TR: al = "(1,1)"; break; } fprintf(out->file,",%.1f,%.2f,%s", (thisnan(this->orient) ? 0 : 360 - this->orient - out->rr),scl,al); fprintf(out->file, ");\n"); if (out->layout->is_debug_stations() || out->layout->is_debug_joins()) { fprintf(out->file,"p_debug(-1,0,"); this->point->export_mp(out); fprintf(out->file,");\n"); } if (out->layout->is_debug_joins()) { fprintf(out->file,"p_debug(1,0,"); this->point->export_mp(out,1); fprintf(out->file,");\n"); } if (out->layout->is_debug_stations()) { fprintf(out->file,"p_debug(0,0,"); this->point->export_mp(out,0); fprintf(out->file,");\n"); } if (attr_text.length() > 0) { fprintf(out->file, "save ATTR__text;\n"); } } if (station_attr != NULL) { station_attr->export_mp_object_end(out->file, station_attr_id); } th2ddataobject::export_mp_end(out); return(false); } void thpoint::parse_align(char * tstr) { switch (this->type) { case TT_POINT_TYPE_STATION: ththrow(("-align not valid with type %s", thmatch_string(this->type,thtt_point_types))) break; } this->align = thmatch_token(tstr, thtt_point_aligns); if (this->align == TT_POINT_ALIGN_UNKNOWN) ththrow(("unknown alignment -- %s", tstr)) } void thpoint::parse_text(char * ss) { switch (this->type) { case TT_POINT_TYPE_LABEL: case TT_POINT_TYPE_REMARK: case TT_POINT_TYPE_STATION_NAME: case TT_POINT_TYPE_CONTINUATION: break; default: ththrow(("-text not valid with type %s", thmatch_string(this->type,thtt_point_types))) break; } if (strlen(ss) > 0) this->text = this->db->strstore(ss); else this->text = NULL; } void thpoint::parse_explored(char * ss) { switch (this->type) { case TT_POINT_TYPE_CONTINUATION: break; default: ththrow(("-explored not valid with type %s", thmatch_string(this->type,thtt_point_types))) break; } int sv; thparse_length(sv, this->xsize, ss); if (sv == TT_SV_UNKNOWN) ththrow(("ivalid explored length -- %s", ss)); } void thpoint_parse_value(int & sv, double & dv, bool & qw, int & sign, char * str) { // odstrani znamienka a nastavi sign sign = 0; qw = false; bool error = false; sv = TT_SV_NAN; dv = thnan; if (strlen(str) > 0) { switch (str[0]) { case '+': sign = 1; str++; break; case '-': sign = -1; str++; break; } } else error = true; // skusi odstranit otaznik size_t strl = strlen(str); if ((strl > 0) && (!error)) { if (str[strl-1] == '?') { str[strl-1] = 0; qw = true; } } // parsne cislo if (strlen(str)) { thparse_double(sv,dv,str); if ((sv != TT_SV_NAN) && (sv != TT_SV_NUMBER)) error = true; else if ((sv != TT_SV_NAN) && (dv < 0.0)) error = true; } if ((sv == TT_SV_NAN) && (sign == 0)) error = true; if (error) ththrow(("invalid value -- %s",str)) } void thpoint::parse_value(char * ss) { switch (this->type) { case TT_POINT_TYPE_ALTITUDE: case TT_POINT_TYPE_HEIGHT: case TT_POINT_TYPE_PASSAGE_HEIGHT: case TT_POINT_TYPE_DIMENSIONS: case TT_POINT_TYPE_DATE: case TT_POINT_TYPE_EXTRA: break; default: ththrow(("-value not valid with type %s", thmatch_string(this->type,thtt_point_types))) break; } thsplit_words(& this->db->db2d.mbf,ss); int npar = this->db->db2d.mbf.get_size(); char ** pars = this->db->db2d.mbf.get_buffer(); int sv, ux, vx, sv2; bool parsev, quest, quest2; double dv, dv2; int sign, sign2; thtflength lentf; thdate * dp; switch (this->type) { case TT_POINT_TYPE_EXTRA: ux = 0; parsev = false; switch (npar) { case 1: break; case 2: ux = 1; break; default: ththrow(("invalid distance -- %s",ss)) } this->xsize = thnan; thparse_double(sv,dv,pars[0]); if (sv != TT_SV_NUMBER) ththrow(("not a number -- %s", pars[0])) if (ux > 0) { lentf.parse_units(pars[ux]); dv = lentf.transform(dv); } this->xsize = dv; break; // let's parse altitude case TT_POINT_TYPE_ALTITUDE: thparse_altitude(ss, this->xsize, this->ysize); break; case TT_POINT_TYPE_HEIGHT: ux = 0; parsev = false; switch (npar) { case 1: break; case 2: ux = 1; break; default: ththrow(("invalid value -- %s",ss)) } this->xsize = thnan; this->tags &= ~(TT_POINT_TAG_HEIGHT_ALL); thpoint_parse_value(sv,dv,quest,sign,pars[0]); if ((ux > 0) && (!thisnan(dv))) { lentf.parse_units(pars[ux]); dv = lentf.transform(dv); } if (sign < 0) { this->tags |= TT_POINT_TAG_HEIGHT_N; if (quest) this->tags |= TT_POINT_TAG_HEIGHT_NQ; } else if (sign > 0) { this->tags |= TT_POINT_TAG_HEIGHT_P; if (quest) this->tags |= TT_POINT_TAG_HEIGHT_PQ; } else { this->tags |= TT_POINT_TAG_HEIGHT_U; if (quest) this->tags |= TT_POINT_TAG_HEIGHT_UQ; } this->xsize = dv; break; case TT_POINT_TYPE_DIMENSIONS: this->xsize = thnan; this->ysize = thnan; switch (npar) { case 3: // parse units lentf.parse_units(pars[2]); case 2: thparse_double(sv,dv,pars[0]); if (sv != TT_SV_NUMBER) { ththrow(("invalid above dimension -- %s",pars[0])) } this->xsize = lentf.transform(dv); if (this->xsize < 0.0) ththrow(("negative above dimension -- %s",pars[0])) thparse_double(sv,dv,pars[1]); if (sv != TT_SV_NUMBER) { ththrow(("invalid below dimension -- %s",pars[1])) } this->ysize = lentf.transform(dv); if (this->ysize < 0.0) ththrow(("negative below dimension -- %s",pars[1])) break; default: ththrow(("invalid value -- %s",ss)) } break; case TT_POINT_TYPE_PASSAGE_HEIGHT: ux = 0; vx = 0; parsev = false; switch (npar) { case 1: break; case 2: ux = 1; try { lentf.parse_units(pars[ux]); } catch (...) { ux = 0; vx = 1; } break; case 3: ux = 2; vx = 1; break; default: ththrow(("invalid value -- %s",ss)) } this->xsize = thnan; this->ysize = thnan; this->tags &= ~(TT_POINT_TAG_HEIGHT_ALL); thpoint_parse_value(sv,dv,quest,sign,pars[0]); if (sv != TT_SV_NUMBER) ththrow(("invalid value -- %s",pars[0])) if (vx > 0) { thpoint_parse_value(sv2,dv2,quest2,sign2,pars[vx]); if (sv2 != TT_SV_NUMBER) ththrow(("invalid value -- %s",pars[vx])) if ((sign == 0) || (sign2 == 0) || (sign == sign2)) ththrow(("invalid combination of values -- %s",ss)) } if ((ux > 0) && (!thisnan(dv))) { lentf.parse_units(pars[ux]); dv = lentf.transform(dv); if (vx > 0) dv2 = lentf.transform(dv2); } if (sign < 0) { this->tags |= TT_POINT_TAG_HEIGHT_N; this->ysize = dv; if (quest) this->tags |= TT_POINT_TAG_HEIGHT_NQ; } else if (sign > 0) { this->tags |= TT_POINT_TAG_HEIGHT_P; this->xsize = dv; if (quest) this->tags |= TT_POINT_TAG_HEIGHT_PQ; } else { this->tags |= TT_POINT_TAG_HEIGHT_U; this->xsize = dv; if (quest) this->tags |= TT_POINT_TAG_HEIGHT_UQ; } if (vx > 0) { if (sign2 < 0) { this->tags |= TT_POINT_TAG_HEIGHT_N; this->ysize = dv2; if (quest) this->tags |= TT_POINT_TAG_HEIGHT_NQ; } else if (sign2 > 0) { this->tags |= TT_POINT_TAG_HEIGHT_P; this->xsize = dv2; if (quest) this->tags |= TT_POINT_TAG_HEIGHT_PQ; } } break; case TT_POINT_TYPE_DATE: if (npar != 1) ththrow(("invalid date -- %s",ss)) dp = (thdate *) this->text; dp->parse(pars[0]); this->tags |= TT_POINT_TAG_DATE; break; } } void thpoint::check_extra() { thdb2dcp * cp; if (this->from_name.id == 0) { double mind = -1.0, cd; cp = this->fscrapptr->fcpp; while (cp != NULL) { if (cp->st != NULL) { cd = thvec2(this->point->x - cp->pt->x, this->point->y - cp->pt->y).length(); if (mind < 0.0) { this->from_name.id = cp->st->uid; mind = cd; } else if (cd < mind) { this->from_name.id = cp->st->uid; mind = cd; } } cp = cp->nextcp; } } if (thisnan(this->xsize) && (this->from_name.id > 0)) { size_t myuid; thdb2dcp * mycp; myuid = thdb.db1d.station_vec[this->from_name.id - 1].uid; cp = this->fscrapptr->fcpp; mycp = NULL; double cdist(0.0); size_t ccount(0); while (cp != NULL) { if ((cp->st != NULL) && (cp->st->uid == myuid)) { mycp = cp; break; } cp = cp->nextcp; } if (mycp == NULL) return; thdb1d_tree_node * nodes = thdb.db1d.get_tree_nodes(); thdb1d_tree_arrow * carrow; cp = this->fscrapptr->fcpp; while (cp != NULL) { if ((cp->st != NULL) && (cp->st->uid != myuid)) { carrow = nodes[myuid - 1].first_arrow; while (carrow != NULL) { if (carrow->end_node->uid == cp->st->uid) { bool reverse = false; if (carrow->is_reversed) reverse = !reverse; if (carrow->leg->reverse) reverse = !reverse; thdataleg * cl = carrow->leg->leg; thline2 xl; if (reverse) { xl = thline2( thvec2(mycp->pt->x, mycp->pt->y), thvec2(cp->pt->x, cp->pt->y)); } else { xl = thline2( thvec2(cp->pt->x, cp->pt->y), thvec2(mycp->pt->x, mycp->pt->y)); } ccount++; switch (this->fscrapptr->proj->type) { case TT_2DPROJ_ELEV: case TT_2DPROJ_EXTEND: if (this->point->y > mycp->pt->y) { if (!reverse) cdist += cl->from_up; else cdist += cl->to_up; } else { if (!reverse) cdist += cl->from_down; else cdist += cl->to_down; } break; default: if (xl.eval(thvec2(this->point->x, this->point->y)) < 0.0) { if (!reverse) cdist += cl->from_left; else cdist += cl->to_left; } else { if (!reverse) cdist += cl->from_right; else cdist += cl->to_right; } } } carrow = carrow->next_arrow; } } cp = cp->nextcp; } if (ccount > 0) this->xsize = cdist / double(ccount); } } therion/thpoint.h0000644000076400010400000003076012047251564015137 0ustar userAdministrators/** * @file thpoint.h * point module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thpoint_h #define thpoint_h #include "th2ddataobject.h" #include "thparse.h" #include "thdb2dpt.h" /** * point command options tokens. */ enum { TT_POINT_UNKNOWN = 3000, TT_POINT_TYPE = 3001, TT_POINT_SUBTYPE = 3002, TT_POINT_STATION = 3003, TT_POINT_FROM = 3004, TT_POINT_ORIENT = 3005, TT_POINT_XSIZE = 3006, TT_POINT_YSIZE = 3007, TT_POINT_SIZE = 3008, TT_POINT_ALIGN = 3009, TT_POINT_VALUE = 3010, TT_POINT_TEXT = 3011, TT_POINT_SCRAP = 3012, TT_POINT_DIST = 3013, TT_POINT_EXPLORED = 3014, }; /** * point command options parsing table. */ static const thstok thtt_point_opt[] = { {"align", TT_POINT_ALIGN}, {"dist", TT_POINT_DIST}, {"explored", TT_POINT_EXPLORED}, {"from", TT_POINT_FROM}, {"name", TT_POINT_STATION}, {"orient", TT_POINT_ORIENT}, {"orientation", TT_POINT_ORIENT}, {"scrap", TT_POINT_SCRAP}, {"size", TT_POINT_SIZE}, {"station", TT_POINT_STATION}, {"subtype", TT_POINT_SUBTYPE}, {"text", TT_POINT_TEXT}, {"value", TT_POINT_VALUE}, {"x-size", TT_POINT_XSIZE}, {"y-size", TT_POINT_YSIZE}, {NULL, TT_POINT_UNKNOWN}, }; /** * Special point tags. */ enum { // height (passage) tags TT_POINT_TAG_HEIGHT_U = 1, TT_POINT_TAG_HEIGHT_P = 2, TT_POINT_TAG_HEIGHT_N = 4, TT_POINT_TAG_HEIGHT_UQ = 8, TT_POINT_TAG_HEIGHT_PQ = 16, TT_POINT_TAG_HEIGHT_NQ = 32, TT_POINT_TAG_HEIGHT_ALL = TT_POINT_TAG_HEIGHT_U | TT_POINT_TAG_HEIGHT_P | TT_POINT_TAG_HEIGHT_N | TT_POINT_TAG_HEIGHT_UQ | TT_POINT_TAG_HEIGHT_PQ | TT_POINT_TAG_HEIGHT_NQ, // date TT_POINT_TAG_DATE = 1, }; /** * Point types tokens. */ enum { TT_POINT_TYPE_UNKNOWN, // specialne typy TT_POINT_TYPE_U, TT_POINT_TYPE_STATION, TT_POINT_TYPE_SECTION, TT_POINT_TYPE_WATER_FLOW, TT_POINT_TYPE_SPRING, TT_POINT_TYPE_SINK, TT_POINT_TYPE_LABEL, TT_POINT_TYPE_REMARK, TT_POINT_TYPE_ALTITUDE, TT_POINT_TYPE_HEIGHT, TT_POINT_TYPE_PASSAGE_HEIGHT, TT_POINT_TYPE_STATION_NAME, TT_POINT_TYPE_DATE, TT_POINT_TYPE_AIR_DRAUGHT, TT_POINT_TYPE_ENTRANCE, TT_POINT_TYPE_GRADIENT, TT_POINT_TYPE_DIMENSIONS, TT_POINT_TYPE_MAP_CONNECTION, TT_POINT_TYPE_EXTRA, // vystroj TT_POINT_TYPE_NO_EQUIPMENT, TT_POINT_TYPE_ANCHOR, TT_POINT_TYPE_ROPE, TT_POINT_TYPE_FIXED_LADDER, TT_POINT_TYPE_ROPE_LADDER, TT_POINT_TYPE_STEPS, TT_POINT_TYPE_BRIDGE, TT_POINT_TYPE_TRAVERSE, TT_POINT_TYPE_VIA_FERRATA, TT_POINT_TYPE_CAMP, TT_POINT_TYPE_DIG, TT_POINT_TYPE_HANDRAIL, // ukoncenia chodby TT_POINT_TYPE_CONTINUATION, TT_POINT_TYPE_NARROW_END, TT_POINT_TYPE_LOW_END, TT_POINT_TYPE_FLOWSTONE_CHOKE, TT_POINT_TYPE_BREAKDOWN_CHOKE, TT_POINT_TYPE_CLAY_CHOKE, // vypln TT_POINT_TYPE_FLOWSTONE, TT_POINT_TYPE_MOONMILK, TT_POINT_TYPE_STALACTITE, TT_POINT_TYPE_STALAGMITE, TT_POINT_TYPE_PILLAR, TT_POINT_TYPE_CURTAIN, TT_POINT_TYPE_HELICTITE, TT_POINT_TYPE_SODA_STRAW, TT_POINT_TYPE_CRYSTAL, TT_POINT_TYPE_WALL_CALCITE, TT_POINT_TYPE_POPCORN, TT_POINT_TYPE_DISK, TT_POINT_TYPE_GYPSUM, TT_POINT_TYPE_GYPSUM_FLOWER, TT_POINT_TYPE_ARAGONITE, TT_POINT_TYPE_CAVE_PEARL, TT_POINT_TYPE_RIMSTONE_POOL, TT_POINT_TYPE_RIMSTONE_DAM, TT_POINT_TYPE_ANASTOMOSIS, TT_POINT_TYPE_KARREN, TT_POINT_TYPE_SCALLOP, TT_POINT_TYPE_FLUTE, TT_POINT_TYPE_RAFT_CONE, TT_POINT_TYPE_ICE_STALACTITE, TT_POINT_TYPE_ICE_STALAGMITE, TT_POINT_TYPE_ICE_PILLAR, TT_POINT_TYPE_STALACTITES, TT_POINT_TYPE_STALAGMITES, TT_POINT_TYPE_PILLARS, // plosne vyplne TT_POINT_TYPE_BEDROCK, TT_POINT_TYPE_SAND, TT_POINT_TYPE_RAFT, TT_POINT_TYPE_CLAY, TT_POINT_TYPE_PEBBLES, TT_POINT_TYPE_DEBRIS, TT_POINT_TYPE_BLOCKS, TT_POINT_TYPE_WATER, TT_POINT_TYPE_ICE, TT_POINT_TYPE_SNOW, TT_POINT_TYPE_GUANO, TT_POINT_TYPE_CLAY_TREE, // ina vypln TT_POINT_TYPE_ARCHEO_MATERIAL, TT_POINT_TYPE_PALEO_MATERIAL, TT_POINT_TYPE_VEGETABLE_DEBRIS, TT_POINT_TYPE_ROOT, }; /** * Point types parsing table. */ static const thstok thtt_point_types[] = { {"air-draught",TT_POINT_TYPE_AIR_DRAUGHT}, {"altitude",TT_POINT_TYPE_ALTITUDE}, {"anastomosis",TT_POINT_TYPE_ANASTOMOSIS}, {"anchor",TT_POINT_TYPE_ANCHOR}, {"aragonite",TT_POINT_TYPE_ARAGONITE}, {"archeo-material",TT_POINT_TYPE_ARCHEO_MATERIAL}, {"bedrock",TT_POINT_TYPE_BEDROCK}, {"blocks",TT_POINT_TYPE_BLOCKS}, {"breakdown-choke",TT_POINT_TYPE_BREAKDOWN_CHOKE}, {"bridge",TT_POINT_TYPE_BRIDGE}, {"camp",TT_POINT_TYPE_CAMP}, {"cave-pearl",TT_POINT_TYPE_CAVE_PEARL}, {"clay",TT_POINT_TYPE_CLAY}, {"clay-choke",TT_POINT_TYPE_CLAY_CHOKE}, {"clay-tree",TT_POINT_TYPE_CLAY_TREE}, {"continuation",TT_POINT_TYPE_CONTINUATION}, {"crystal",TT_POINT_TYPE_CRYSTAL}, {"curtain",TT_POINT_TYPE_CURTAIN}, {"date",TT_POINT_TYPE_DATE}, {"debris",TT_POINT_TYPE_DEBRIS}, {"dig",TT_POINT_TYPE_DIG}, {"dimensions",TT_POINT_TYPE_DIMENSIONS}, {"disk",TT_POINT_TYPE_DISK}, {"entrance",TT_POINT_TYPE_ENTRANCE}, {"extra",TT_POINT_TYPE_EXTRA}, {"fixed-ladder",TT_POINT_TYPE_FIXED_LADDER}, {"flowstone",TT_POINT_TYPE_FLOWSTONE}, {"flowstone-choke",TT_POINT_TYPE_FLOWSTONE_CHOKE}, {"flute",TT_POINT_TYPE_FLUTE}, {"gradient",TT_POINT_TYPE_GRADIENT}, {"guano",TT_POINT_TYPE_GUANO}, {"gypsum",TT_POINT_TYPE_GYPSUM}, {"gypsum-flower",TT_POINT_TYPE_GYPSUM_FLOWER}, {"handrail",TT_POINT_TYPE_HANDRAIL}, {"height",TT_POINT_TYPE_HEIGHT}, {"helictite",TT_POINT_TYPE_HELICTITE}, {"ice",TT_POINT_TYPE_ICE}, {"ice-pillar",TT_POINT_TYPE_ICE_PILLAR}, {"ice-stalactite",TT_POINT_TYPE_ICE_STALACTITE}, {"ice-stalagmite",TT_POINT_TYPE_ICE_STALAGMITE}, {"karren",TT_POINT_TYPE_KARREN}, {"label",TT_POINT_TYPE_LABEL}, {"low-end",TT_POINT_TYPE_LOW_END}, {"map-connection",TT_POINT_TYPE_MAP_CONNECTION}, {"moonmilk",TT_POINT_TYPE_MOONMILK}, {"narrow-end",TT_POINT_TYPE_NARROW_END}, {"no-equipment",TT_POINT_TYPE_NO_EQUIPMENT}, {"paleo-material",TT_POINT_TYPE_PALEO_MATERIAL}, {"passage-height",TT_POINT_TYPE_PASSAGE_HEIGHT}, {"pebbles",TT_POINT_TYPE_PEBBLES}, {"pillar",TT_POINT_TYPE_PILLAR}, {"pillars",TT_POINT_TYPE_PILLARS}, {"popcorn",TT_POINT_TYPE_POPCORN}, {"raft",TT_POINT_TYPE_RAFT}, {"raft-cone",TT_POINT_TYPE_RAFT_CONE}, {"remark",TT_POINT_TYPE_REMARK}, {"rimstone-dam",TT_POINT_TYPE_RIMSTONE_DAM}, {"rimstone-pool",TT_POINT_TYPE_RIMSTONE_POOL}, {"root",TT_POINT_TYPE_ROOT}, {"rope",TT_POINT_TYPE_ROPE}, {"rope-ladder",TT_POINT_TYPE_ROPE_LADDER}, {"sand",TT_POINT_TYPE_SAND}, {"scallop",TT_POINT_TYPE_SCALLOP}, {"section",TT_POINT_TYPE_SECTION}, {"sink",TT_POINT_TYPE_SINK}, {"snow",TT_POINT_TYPE_SNOW}, {"soda-straw",TT_POINT_TYPE_SODA_STRAW}, {"spring",TT_POINT_TYPE_SPRING}, {"stalactite",TT_POINT_TYPE_STALACTITE}, {"stalactites",TT_POINT_TYPE_STALACTITES}, {"stalagmite",TT_POINT_TYPE_STALAGMITE}, {"stalagmites",TT_POINT_TYPE_STALAGMITES}, {"station", TT_POINT_TYPE_STATION}, {"station-name", TT_POINT_TYPE_STATION_NAME}, {"steps",TT_POINT_TYPE_STEPS}, {"traverse",TT_POINT_TYPE_TRAVERSE}, {"u",TT_POINT_TYPE_U}, {"vegetable-debris",TT_POINT_TYPE_VEGETABLE_DEBRIS}, {"via-ferrata",TT_POINT_TYPE_VIA_FERRATA}, {"wall-calcite",TT_POINT_TYPE_WALL_CALCITE}, {"water",TT_POINT_TYPE_WATER}, {"water-flow",TT_POINT_TYPE_WATER_FLOW}, {NULL, TT_POINT_TYPE_UNKNOWN}, }; /** * Point align tokens. */ enum { TT_POINT_ALIGN_UNKNOWN, TT_POINT_ALIGN_T, TT_POINT_ALIGN_B, TT_POINT_ALIGN_L, TT_POINT_ALIGN_R, TT_POINT_ALIGN_TL, TT_POINT_ALIGN_BL, TT_POINT_ALIGN_TR, TT_POINT_ALIGN_BR, TT_POINT_ALIGN_C, }; /** * Point align parsing table. */ static const thstok thtt_point_aligns[] = { {"b", TT_POINT_ALIGN_B}, {"bl", TT_POINT_ALIGN_BL}, {"bottom", TT_POINT_ALIGN_B}, {"bottom-left", TT_POINT_ALIGN_BL}, {"bottom-right", TT_POINT_ALIGN_BR}, {"br", TT_POINT_ALIGN_BR}, {"c", TT_POINT_ALIGN_C}, {"center", TT_POINT_ALIGN_C}, {"l", TT_POINT_ALIGN_L}, {"left", TT_POINT_ALIGN_L}, {"r", TT_POINT_ALIGN_R}, {"right", TT_POINT_ALIGN_R}, {"t", TT_POINT_ALIGN_T}, {"tl", TT_POINT_ALIGN_TL}, {"top", TT_POINT_ALIGN_T}, {"top-left", TT_POINT_ALIGN_TL}, {"top-right", TT_POINT_ALIGN_TR}, {"tr", TT_POINT_ALIGN_TR}, {NULL, TT_POINT_ALIGN_UNKNOWN}, }; /** * Point subtypes tokens. */ enum { TT_POINT_SUBTYPE_UNKNOWN, TT_POINT_SUBTYPE_TEMP, TT_POINT_SUBTYPE_PAINTED, TT_POINT_SUBTYPE_FIXED, TT_POINT_SUBTYPE_NATURAL, TT_POINT_SUBTYPE_PALEO, TT_POINT_SUBTYPE_PERMANENT, TT_POINT_SUBTYPE_INTERMITTENT, TT_POINT_SUBTYPE_POSITIVE, TT_POINT_SUBTYPE_NEGATIVE, TT_POINT_SUBTYPE_BOTH, TT_POINT_SUBTYPE_UNSIGNED, TT_POINT_SUBTYPE_WINTER, TT_POINT_SUBTYPE_SUMMER, TT_POINT_SUBTYPE_UNDEF, }; /** * Point types parsing table. */ static const thstok thtt_point_subtypes[] = { {"both", TT_POINT_SUBTYPE_BOTH}, {"fixed", TT_POINT_SUBTYPE_FIXED}, {"intermittent", TT_POINT_SUBTYPE_INTERMITTENT}, {"natural", TT_POINT_SUBTYPE_NATURAL}, {"negative", TT_POINT_SUBTYPE_NEGATIVE}, {"painted", TT_POINT_SUBTYPE_PAINTED}, {"paleo", TT_POINT_SUBTYPE_PALEO}, {"permanent", TT_POINT_SUBTYPE_PERMANENT}, {"positive", TT_POINT_SUBTYPE_POSITIVE}, {"summer", TT_POINT_SUBTYPE_SUMMER}, {"temporary", TT_POINT_SUBTYPE_TEMP}, {"undefined", TT_POINT_SUBTYPE_UNDEF}, {"unsigned", TT_POINT_SUBTYPE_UNSIGNED}, {"winter", TT_POINT_SUBTYPE_WINTER}, {NULL, TT_POINT_SUBTYPE_UNKNOWN}, }; /** * point class. */ class thpoint : public th2ddataobject { public: friend class thdb2d; int type, ///< Point type. subtype, ///< Point subtype. align; ///< Point align. double orient, xsize, ysize; ///<... const char * text; ///< Point text. thdb2dpt * point; ///< Point coordinates. class thdb2dcp * cpoint; ///< Control point. thobjectname station_name, ///< Station name. from_name; ///< Extend name. char extend_opts; ///< Extend options. virtual void start_insert(); void parse_type(char * tstr); ///< Parse point type. void parse_align(char * tstr); ///< Parse point align. void parse_subtype(char * ststr); ///< Parse point subtype. void parse_from(char * estr); ///< Parse station extend. void parse_text(char * ss); ///< Parse point text. void parse_explored(char * ss); ///< Parse explored length. void parse_value(char * ss); ///< Parse point value. void check_extra(); /** * Standard constructor. */ thpoint(); /** * Standard destructor. */ ~thpoint(); /** * Return class identifier. */ virtual int get_class_id(); /** * Return class name. */ virtual const char * get_class_name() {return "thpoint";}; /** * Return true, if son of given class. */ virtual bool is(int class_id); /** * Return number of command arguments. */ virtual int get_cmd_nargs(); /** * Return command name. */ virtual const char * get_cmd_name(); /** * Return command end option. */ virtual const char * get_cmd_end(); /** * Return option description. */ virtual thcmd_option_desc get_cmd_option_desc(const char * opts); /** * Set command option. * * @param cod Command option description. * @param args Option arguments arry. * @param argenc Arguments encoding. */ virtual void set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline); /** * Delete this object. * * @warn Always use this methos instead of delete function. */ virtual void self_delete(); /** * Print object properties. */ virtual void self_print_properties(FILE * outf); /** * Export to metapost file. */ virtual bool export_mp(class thexpmapmpxs * out); }; #endif therion/thproj.cxx0000644000076400010400000000673010625655142015333 0ustar userAdministrators/** * @file proj.cxx */ /* Copyright (C) 2006 Martin Budaj * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thexception.h" #include "extern/proj4/proj_api.h" #include #include using namespace std; void thcs2utm(string s, signed int zone, double a, double b, double c, double &x, double &y, double &z) { projPJ P1, P2; if ((P1 = pj_init_plus(s.c_str()))==NULL) therror(("Can't initialize input projection!")); char ch[50]; sprintf(ch, "+proj=utm +datum=WGS84 +zone=%d", zone); if ((P2 = pj_init_plus(ch))==NULL) therror(("Can't initialize default projection!")); // if (s.find("+proj=latlong") != s.npos) { // // prepocet na radiany tu alebo skoor? // } if (pj_transform(P1,P2,1,0,&a,&b,&c) != 0) therror(("Can't transform projections!")); x = a; y = b; z = c; pj_free(P1); pj_free(P2); } void thcs2cs(string s, string t, double a, double b, double c, double &x, double &y, double &z) { projPJ P1, P2; if ((P1 = pj_init_plus(s.c_str()))==NULL) therror(("Can't initialize input projection!")); if ((P2 = pj_init_plus(t.c_str()))==NULL) therror(("Can't initialize output projection!")); // if (s.find("+proj=latlong") != s.npos) { // // prepocet na radiany tu alebo skoor? // } // assert (t.find("+proj=latlong") == t.npos); if (pj_transform(P1,P2,1,0,&a,&b,&c) != 0) therror(("Can't transform projections!")); x = a; y = b; z = c; pj_free(P1); pj_free(P2); } signed int thcs2zone(string s, double a, double b, double c) { projPJ P1, P2; if ((P1 = pj_init_plus(s.c_str()))==NULL) therror(("Can't initialize input projection!")); if ((P2 = pj_init_plus("+proj=latlong +datum=WGS84"))==NULL) therror(("Can't initialize default projection!")); if (pj_transform(P1,P2,1,0,&a,&b,&c) != 0) therror(("Can't transform projections!")); pj_free(P1); pj_free(P2); return (int) (a*180/3.1415926536+180)/6 + 1; } double thcsconverg(string s, double a, double b) { projPJ P1, P2; double c = 0; double x = a, y = b; assert (s.find("+proj=latlong") == s.npos); if ((P1 = pj_init_plus(s.c_str()))==NULL) therror(("Can't initialize input projection!")); if ((P2 = pj_init_plus("+proj=latlong +datum=WGS84"))==NULL) therror(("Can't initialize default projection!")); //cout << a << " " << b << endl; if (pj_transform(P1,P2,1,0,&a,&b,&c) != 0) therror(("Can't transform projections!")); b += 1e-6; if (pj_transform(P2,P1,1,0,&a,&b,&c) != 0) therror(("Can't transform projections!")); //cout << a << " " << b << endl; pj_free(P1); pj_free(P2); return atan2(a-x,b-y)/3.1415926536*180; } therion/thproj.h0000644000076400010400000000241710625655142014756 0ustar userAdministrators/* * Copyright (C) 2006 Martin Budaj * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thproj_h #define thproj_h #include void thcs2utm(std::string, signed int, double, double, double, double &, double &, double &); void thcs2cs(std::string, std::string, double, double, double, double &, double &, double &); signed int thcs2zone(std::string, double, double, double); double thcsconverg(std::string, double, double); #endif therion/threpair-files0000755000076400010400000000105407777756224016160 0ustar userAdministrators#!/usr/bin/tclsh proc repair_file {fnm} { puts "repairing file $fnm" set fid [open $fnm r] set fdt [read $fid] close $fid set fid [open $fnm w] fconfigure $fid -translation {auto lf} puts -nonewline $fid $fdt close $fid } proc scan_directory {dnm} { puts "scanning directory $dnm" set files [glob -nocomplain -directory $dnm *.th *.th2 *.th3 *.thcfg thconfig*] set dirs [glob -nocomplain -directory $dnm -type d *] foreach sfl $files { repair_file $sfl } foreach sdr $dirs { scan_directory $sdr } } scan_directory .therion/thscrap.cxx0000644000076400010400000013155512255633624015477 0ustar userAdministrators/** * @file thscrap.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thscrap.h" #include "thexception.h" #include "thchenc.h" #include "thtflength.h" #include "thinfnan.h" #include "thdb1d.h" #include "thdb2d.h" #include "thdb2dmi.h" #include "th2ddataobject.h" #include "thline.h" #include "thpoint.h" #include "thscrapis.h" #include "thsurvey.h" #include "thsymbolset.h" #include "thsketch.h" #include "thcsdata.h" #ifdef THMSVC #define hypot _hypot #endif #define EXPORT3D_INVISIBLE true thscrap::thscrap() { this->fs2doptr = NULL; this->ls2doptr = NULL; this->fcpp = NULL; this->lcpp = NULL; this->ncp = 0; this->proj = thdb.db2d.get_default_projection(); this->proj_next_scrap = NULL; this->proj_prev_scrap = NULL; this->xscrap = NULL; this->R = 1.0; this->G = 1.0; this->B = 1.0; this->z = 0.0; this->a = 0.0; this->flip = TT_SCRAP_FLIP_NONE; this->scale = 1.0; this->scale_r1x = 0.0; this->scale_r1y = 0.0; this->scale_r2x = 1.0; this->scale_r2y = 0.0; this->scale_p1x = 0.0; this->scale_p1y = 0.0; this->scale_p2x = 1.0; this->scale_p2y = 0.0; this->scale_p9 = false; this->reset_limits(); this->reset_transformation(); this->outline_parsed = false; this->outline_first = NULL; this->ends_parsed = false; this->exported = false; this->ends_first = NULL; this->polygon_parsed = false; this->polygon_first = NULL; this->polygon_last = NULL; this->d3 = TT_AUTO; this->d3_parsed = false; this->maxdist = 0.0; this->avdist = 0.0; this->maxdistp1 = NULL; this->maxdistp2 = NULL; this->centerline_survey = NULL; this->centerline_io = false; } thscrap::~thscrap() { } int thscrap::get_class_id() { return TT_SCRAP_CMD; } bool thscrap::is(int class_id) { if (class_id == TT_SCRAP_CMD) return true; else return thdataobject::is(class_id); } int thscrap::get_cmd_nargs() { return 1; } const char * thscrap::get_cmd_end() { // insert endcommand if multiline command return NULL; } const char * thscrap::get_cmd_name() { // insert command name here return "scrap"; } thcmd_option_desc thscrap::get_cmd_option_desc(const char * opts) { int id = thmatch_token(opts, thtt_scrap_opt); if (id == TT_SCRAP_UNKNOWN) return thdataobject::get_cmd_option_desc(opts); else switch (id) { case TT_SCRAP_SKETCH: return thcmd_option_desc(id,3); default: return thcmd_option_desc(id); } } static const thstok thtt_scrap_flips[] = { {"horiz", TT_SCRAP_FLIP_HORIZ}, {"horizontal", TT_SCRAP_FLIP_HORIZ}, {"none", TT_SCRAP_FLIP_NONE}, {"vert", TT_SCRAP_FLIP_VERT}, {"vertical", TT_SCRAP_FLIP_VERT}, {NULL, TT_SCRAP_FLIP_UNKNOWN}, }; void thscrap::set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline) { thdb2dprjpr projection; if (cod.id == 1) cod.id = TT_DATAOBJECT_NAME; switch (cod.id) { // case TT_DATAOBJECT_NAME: // if (th_is_keyword(*args)) // this->name = this->db->strstore(*args); // else // ththrow(("invalid keyword -- %s", *args)); // break; case TT_SCRAP_PROJECTION: projection = this->db->db2d.parse_projection(*args); if (!projection.parok) ththrow(("invalid parameters of projection")); this->proj = projection.prj; break; case TT_SCRAP_SCALE: this->parse_scale(*args); break; case TT_SCRAP_STATIONS: this->parse_stations(*args); break; case TT_SCRAP_3D: this->d3 = thmatch_token(*args, thtt_onoffauto); if (this->d3 == TT_UNKNOWN_BOOL) ththrow(("invalid -3d switch -- %s", *args)); break; case TT_SCRAP_FLIP: this->flip = thmatch_token(*args, thtt_scrap_flips); if (this->flip == TT_SCRAP_FLIP_UNKNOWN) ththrow(("invalid -flip switch -- %s", *args)); break; case TT_SCRAP_SKETCH: this->parse_sketch(args, argenc); break; // if not found, try to set fathers properties default: thdataobject::set(cod, args, argenc, indataline); } } void thscrap::self_delete() { delete this; } void thscrap::self_print_properties(FILE * outf) { thdataobject::self_print_properties(outf); fprintf(outf,"thscrap:\n"); fprintf(outf,"\tprojection: %d\n",this->proj->id); fprintf(outf,"\tscale: %f\n",this->scale); fprintf(outf,"\tz: %f\n",this->z); fprintf(outf,"\ta: %f\n",this->a); // insert intended print of object properties here } void thscrap::parse_scale(char * ss) { thsplit_words(& this->db->db2d.mbf,ss); int npar = this->db->db2d.mbf.get_size(); char ** pars = this->db->db2d.mbf.get_buffer(); if ((npar < 1) || ((npar > 3) && (npar != 8) && (npar != 9))) ththrow(("invalid number of scale arguments -- %d",npar)) double n1 = 1.0, n2 = 1.0; bool p9 = false; int sv, ux = 0, n2x = 0; thtflength lentf; switch (npar) { case 2: ux = 1; break; case 3: ux = 2; n2x = 1; break; case 9: ux = 8; case 8: p9 = true; break; } this->scale_p9 = p9; #define parse_scalep9(var,parn) \ thparse_double(sv,var,pars[parn]); \ if (sv != TT_SV_NUMBER) \ ththrow(("real number required -- %s", pars[parn])); if (ux > 0) { lentf.parse_units(pars[ux]); } if (p9) { // thparse_double(sv,this->scale_r1x,pars[0]); // if ((sv != TT_SV_NUMBER) || (n1 <= 0.0)) // ththrow(("real positive number required -- %s", pars[0])); parse_scalep9(this->scale_p1x,0) parse_scalep9(this->scale_p1y,1) parse_scalep9(this->scale_p2x,2) parse_scalep9(this->scale_p2y,3) if (this->cs == TTCS_LOCAL) { parse_scalep9(this->scale_r1x,4) parse_scalep9(this->scale_r1y,5) parse_scalep9(this->scale_r2x,6) parse_scalep9(this->scale_r2y,7) if (ux > 0) { this->scale_r1x = lentf.transform(this->scale_r1x); this->scale_r1y = lentf.transform(this->scale_r1y); this->scale_r2x = lentf.transform(this->scale_r2x); this->scale_r2y = lentf.transform(this->scale_r2y); } } else { this->convert_cs(pars[4], pars[5], this->scale_r1x, this->scale_r1y); this->convert_cs(pars[6], pars[7], this->scale_r2x, this->scale_r2y); } if (hypot(this->scale_r1x - this->scale_r2x, this->scale_r1y - this->scale_r2y) == 0.0) ththrow(("zero scale real length")); if (hypot(this->scale_p1x - this->scale_p2x, this->scale_p1y - this->scale_p2y) == 0.0) ththrow(("zero scale picture length")); } else { // let's parse first number thparse_double(sv,n1,pars[0]); if ((sv != TT_SV_NUMBER) || (n1 <= 0.0)) ththrow(("real positive number required -- %s", pars[0])); // let's parse second number if (n2x > 0) { thparse_double(sv,n2,pars[n2x]); if ((sv != TT_SV_NUMBER) || (n2 <= 0.0)) ththrow(("real positive number required -- %s", pars[0])); n1 = n2 / n1; if (ux > 0) n1 = lentf.transform(n1); } this->scale = n1; } } thdb2dcp * thscrap::insert_control_point() { thdb2dcp * cp = this->db->db2d.insert_control_point(); if (this->fcpp == NULL) { this->fcpp = cp; this->lcpp = cp; this->ncp = 1; } else { cp->prevcp = this->lcpp; this->lcpp->nextcp = cp; this->lcpp = cp; this->ncp++; } return cp; } void thscrap::reset_limits() { this->lxmin = thnan; this->lxmax = thnan; this->lymin = thnan; this->lymax = thnan; } void thscrap::reset_transformation() { this->mx = 0.0; this->my = 0.0; this->mxx = 1.0; this->mxy = 0.0; this->myx = 0.0; this->myy = 1.0; this->mr = 0.0; this->ms = 1.0; } thscraplo * thscrap::get_outline() { if (this->outline_parsed) return this->outline_first; //if (!this->proj->processed) // this->db->db2d.process_projection(this->proj); this->outline_parsed = true; #ifdef THDEBUG thprintf("\n\nscanning outline: scrap %s\n",this->name); #endif th2ddataobject * obj = this->fs2doptr; // thline * pln; thscraplo * co, * co2, * co3, * co3last, * lo = NULL, ** pco3; double cdist, mindist; while (obj != NULL) { #ifdef THDEBUG if (obj->get_class_id() == TT_LINE_CMD) thprintf("%d [%s]\n", obj->id, obj->name); #endif if ((obj->get_class_id() == TT_LINE_CMD) && (((thline *)obj)->first_point != NULL) && ((((thline *)obj)->outline == TT_LINE_OUTLINE_IN) || (((thline *)obj)->outline == TT_LINE_OUTLINE_OUT))) { #ifdef THDEBUG thprintf("inserting line - %d [%s]\n", obj->id, obj->name); #endif co = this->db->db2d.insert_scraplo(); co->line = (thline *) obj; if (this->outline_first == NULL) { this->outline_first = co; lo = co; } else { // vzdialenost moojho konca od zaciatku mindist = hypot(co->line->last_point->point->x - co->line->first_point->point->x, co->line->last_point->point->y - co->line->first_point->point->y); if ((this->outline_first->line->outline == TT_LINE_OUTLINE_IN) && (((thline *)obj)->outline == TT_LINE_OUTLINE_OUT)) { co->next_scrap_line = this->outline_first; this->outline_first = co; } else { // poojdeme odpredu co3 = this->outline_first; pco3 = &(this->outline_first); while (co3 != NULL) { if ((co3->line->outline == co->line->outline) && (hypot(co3->line->last_point->point->x - co3->line->first_point->point->x, co3->line->last_point->point->y - co3->line->first_point->point->y) < mindist)) { co->next_scrap_line = co3; *pco3 = co; break; } pco3 = &(co3->next_scrap_line); co3 = co3->next_scrap_line; if (co3 == NULL) { lo->next_scrap_line = co; lo = co; } } } } } obj = obj->nscrapoptr; } co = this->outline_first; while (co != NULL) { if (co->line->is_closed) { co->lfreefirst = false; co->lfreelast = false; } co2 = co->next_scrap_line; while (co2 != NULL && (co->lfreefirst || co->lfreelast)) { if ((co2->line->outline == co->line->outline) && (co2->lfreefirst || co2->lfreelast)) { if (co->lfreefirst && co2->lfreefirst && (co->line->first_point->point->x == co2->line->first_point->point->x) && (co->line->first_point->point->y == co2->line->first_point->point->y)) { co->lfreefirst = false; co2->lfreefirst = false; #ifdef THDEBUG thprintf("\tJOIN F-F: %.2f,%.2f\n", co->line->first_point->point->x, co->line->first_point->point->y); thprintf("\t%d -- %d\n", co->line->id, co2->line->id); #endif } if (co->lfreefirst && co2->lfreelast && (co->line->first_point->point->x == co2->line->last_point->point->x) && (co->line->first_point->point->y == co2->line->last_point->point->y)) { co->lfreefirst = false; co2->lfreelast = false; #ifdef THDEBUG thprintf("\tJOIN F-L: %.2f,%.2f\n", co->line->first_point->point->x, co->line->first_point->point->y); thprintf("\t%d -- %d\n", co->line->id, co2->line->id); #endif } if (co->lfreelast && co2->lfreefirst && (co->line->last_point->point->x == co2->line->first_point->point->x) && (co->line->last_point->point->y == co2->line->first_point->point->y)) { co->lfreelast = false; co2->lfreefirst = false; #ifdef THDEBUG thprintf("\tJOIN L-F: %.2f,%.2f\n", co->line->last_point->point->x, co->line->last_point->point->y); thprintf("\t%d -- %d\n", co->line->id, co2->line->id); #endif } if (co->lfreelast && co2->lfreelast && (co->line->last_point->point->x == co2->line->last_point->point->x) && (co->line->last_point->point->y == co2->line->last_point->point->y)) { co->lfreelast = false; co2->lfreelast = false; #ifdef THDEBUG thprintf("\tJOIN L-L: %.2f,%.2f\n", co->line->last_point->point->x, co->line->last_point->point->y); thprintf("\t%d -- %d\n", co->line->id, co2->line->id); #endif } } co2 = co2->next_scrap_line; } co = co->next_scrap_line; } bool still_in_line, co3_normal = false; thdb2dpt * first_pt, * last_pt; if (this->outline_first != NULL) { co = this->outline_first; while (co != NULL) { first_pt = co->line->first_point->point; last_pt = co->line->last_point->point; co->mode = TT_OUTLINE_NORMAL; #ifdef THDEBUG thprintf("\tfirst line: %d [%s] - mode %d\n",co->line->id, co->line->name, co->line->outline); #endif still_in_line = !(co->line->is_closed); co3 = co; bool search_all; while (still_in_line) { mindist = hypot(last_pt->x - first_pt->x, last_pt->y - first_pt->y); co2 = co->next_scrap_line; search_all = false; co3last = co3; co3 = NULL; while (co2 != NULL) { if ((co2->mode == TT_OUTLINE_NO) && (co2->line->outline == co->line->outline)) { if ((co2->line->last_point->point->x == last_pt->x) && (co2->line->last_point->point->y == last_pt->y)) { co3_normal = false; co3 = co2; mindist = 0.0; } if (search_all || co2->lfreelast) { cdist = hypot(co2->line->last_point->point->x - last_pt->x, co2->line->last_point->point->y - last_pt->y); if (cdist <= mindist) { co3_normal = false; co3 = co2; mindist = cdist; } } if ((co2->line->first_point->point->x == last_pt->x) && (co2->line->first_point->point->y == last_pt->y)) { co3_normal = true; co3 = co2; mindist = 0.0; } if (search_all || co2->lfreefirst) { cdist = hypot(co2->line->first_point->point->x - last_pt->x, co2->line->first_point->point->y - last_pt->y); if (cdist <= mindist) { co3_normal = true; co3 = co2; mindist = cdist; } } } co2 = co2->next_scrap_line; if ((co2 == NULL) && (!search_all) && (co3 == NULL)) { co2 = co->next_scrap_line; search_all = true; #ifdef THDEBUG thprintf("\tsearch all\n"); #endif } } if (co3 == NULL) still_in_line = false; else { co3last->next_line = co3; #ifdef THDEBUG thprintf("\tnext line: %d [%s] %s\n", co3->line->id, co3->line->name, (co3_normal ? "normal" : "reversed")); #endif if (co3_normal) { co3->mode = TT_OUTLINE_NORMAL; last_pt = co3->line->last_point->point; } else { co3->mode = TT_OUTLINE_REVERSED; last_pt = co3->line->first_point->point; } } } // podme na dalsi co2 = co->next_scrap_line; while ((co2 != NULL) && (co2->mode != TT_OUTLINE_NO)) co2 = co2->next_scrap_line; co->next_outline = co2; co = co2; } } return this->outline_first; } // get_outline thscraplp * thscrap::polygon_insert(thscraplp * before) { thscraplp * rv = this->db->db2d.insert_scraplp(); if (before == NULL) { if (this->polygon_last == NULL) { this->polygon_first = rv; this->polygon_last = rv; } else { this->polygon_last->next_item = rv; rv->prev_item = this->polygon_last; this->polygon_last = rv; } } else { if (before->prev_item == NULL) this->polygon_first = rv; else before->prev_item->next_item = rv; rv->prev_item = before->prev_item; before->prev_item = rv; rv->next_item = before; } return rv; } void thscrap::parse_stations(char * ss) { thsplit_words(& this->db->db2d.mbf,ss); int npar = this->db->db2d.mbf.get_size(), ipar = 0; char ** pars = this->db->db2d.mbf.get_buffer(); thscraplp * lp; while (ipar < npar) { lp = this->polygon_insert(); thparse_objectname(lp->station_name,&(this->db->buff_stations),*pars); pars++; ipar++; } } thscraplp * thscrap::get_polygon() { if (this->polygon_parsed) return this->polygon_first; if (!this->proj->processed) this->db->db2d.process_projection(this->proj); double sina = 0.0, cosa = 0.0; switch (this->proj->type) { case TT_2DPROJ_ELEV: sina = sin(this->proj->pp1 / 180.0 * 3.14159265358); cosa = cos(this->proj->pp1 / 180.0 * 3.14159265358); break; } bool incp; thdb2dcp * cp; thscraplp * lp, * nlp; thdb1ds * st, * st1, * st2; size_t i, ni = this->db->db1d.station_vec.size(), nlegs = this->db->db1d.leg_vec.size(); thdataleg * cl; bool ffselect, ttselect; thdb1ds * ffst, * ttst; thdb1d_tree_arrow * arrow; double newx; thdb1d_tree_node * nodes = this->db->db1d.get_tree_nodes(), * cnode; for(i = 0; i < ni; i++) { this->db->db1d.station_vec[i].tmpselect = false; } if (this->centerline_io) { // povkladame vsetky meracske body if (this->proj->type == TT_2DPROJ_EXTEND) { // scan all shots and add stations for each shot for (i = 0; i < nlegs; i++) { cl = this->db->db1d.leg_vec[i].leg; #define set_ffst_ttst { \ ffst = &(this->db->db1d.station_vec[cl->from.id - 1]); \ ttst = &(this->db->db1d.station_vec[cl->to.id - 1]); \ } set_ffst_ttst; ffselect = ((this->centerline_survey == NULL) && (ffst->survey->selected)); ttselect = ((this->centerline_survey == NULL) && (ttst->survey->selected)); ffselect = ffselect || ((this->centerline_survey != NULL) && (ffst->survey->is_in_survey(this->centerline_survey))); ttselect = ttselect || ((this->centerline_survey != NULL) && (ttst->survey->is_in_survey(this->centerline_survey))); if ((cl->extend & TT_EXTENDFLAG_HIDE) == 0) { if ((ffselect && ttselect) || (cl->psurvey->is_in_survey(this->centerline_survey))) { ffst->tmpselect = true; ttst->tmpselect = true; } } } } else { for(i = 0; i < ni; i++) { st = &(this->db->db1d.station_vec[i]); if (((this->centerline_survey != NULL) && (st->survey->is_in_survey(this->centerline_survey))) || ((this->centerline_survey == NULL) && (st->survey->selected))) { st->tmpselect = true; } } for (i = 0; i < nlegs; i++) { cl = this->db->db1d.leg_vec[i].leg; //if (((cl->extend & TT_EXTENDFLAG_HIDE) == 0) && (cl->psurvey->is_in_survey(this->centerline_survey))) { if ((cl->psurvey->is_in_survey(this->centerline_survey))) { this->db->db1d.station_vec[cl->from.id - 1].tmpselect = true; this->db->db1d.station_vec[cl->to.id - 1].tmpselect = true; } } } // other projections // enter selected stations for(i = 0; i < ni; i++) { st = &(this->db->db1d.station_vec[i]); if (st->tmpselect && !st->is_temporary()) { lp = this->polygon_insert(); lp->station = st; lp->ustation = st; lp->station_name.id = (unsigned long)i+1; lp->station_name.name = st->name; lp->station_name.psurvey = st->survey; this->insert_adata(st); } } } switch (this->proj->type) { case TT_2DPROJ_PLAN: case TT_2DPROJ_ELEV: case TT_2DPROJ_EXTEND: incp = true; lp = NULL; cp = this->fcpp; while (incp || (lp != NULL)) { if (incp && (cp == NULL)) { incp = false; lp = this->polygon_first; } if ((cp != NULL) || (lp != NULL)) { if (lp != NULL) { st = lp->ustation; if (st != NULL) { switch (this->proj->type) { case TT_2DPROJ_EXTEND: cnode = &(nodes[st->uid - 1]); lp->stx = cnode->extendx - this->proj->shift_x; lp->sty = st->z - this->proj->shift_z; lp->stz = 0.0; arrow = cnode->first_arrow; while (arrow != NULL) { newx = (arrow->is_reversed ? arrow->leg->leg->txx : arrow->leg->leg->fxx) - this->proj->shift_x; if (((arrow->leg->leg->extend & TT_EXTENDFLAG_HIDE) == 0) && (newx != lp->stx)) { nlp = this->polygon_insert(lp); nlp->station = st; nlp->ustation = st; nlp->station_name.id = st->uid; nlp->station_name.name = st->name; nlp->station_name.psurvey = st->survey; nlp->stx = newx - this->proj->shift_x; nlp->sty = st->z - this->proj->shift_z; nlp->stz = 0.0; thscraplp * olp; olp = nlp; nlp = this->polygon_insert(lp); nlp->lnio = true; nlp->type = SYML_MAPCONNECTION; nlp->lnx1 = lp->stx; nlp->lny1 = lp->sty; nlp->lnz1 = lp->stz; nlp->lnx2 = olp->stx; nlp->lny2 = olp->sty; nlp->lnz2 = olp->stz; } arrow = arrow->next_arrow; } break; case TT_2DPROJ_PLAN: lp->stx = st->x - this->proj->shift_x; lp->sty = st->y - this->proj->shift_y; lp->stz = st->z - this->proj->shift_z; break; case TT_2DPROJ_ELEV: lp->stx = cosa * (st->x - this->proj->shift_x) - sina * (st->y - this->proj->shift_y); lp->sty = st->z - this->proj->shift_z; lp->stz = sina * (st->x - this->proj->shift_x) + cosa * (st->y - this->proj->shift_y); break; } lp->station_name.name = st->name; this->update_limits(lp->stx, lp->sty); } } else st = cp->st; if ((st != NULL) && (nodes != NULL)) { // let's process each arrow from this point arrow = nodes[st->uid - 1].first_arrow; while (arrow != NULL) { // if ((((this->centerline_survey != NULL) && (arrow->leg->survey->is_in_survey(this->centerline_survey))) || // ((this->centerline_survey == NULL) && (arrow->leg->survey->selected))) && // ((this->proj->type != TT_2DPROJ_EXTEND) || ((arrow->leg->leg->extend & TT_EXTENDFLAG_IGNORE) == 0))) { if (((((this->centerline_survey != NULL) && (arrow->leg->survey->is_in_survey(this->centerline_survey))) || ((this->centerline_survey == NULL) && (arrow->leg->survey->selected)))) && ((this->proj->type != TT_2DPROJ_EXTEND) || ((arrow->leg->leg->extend & TT_EXTENDFLAG_HIDE) == 0))) { // process arrow here nlp = this->polygon_insert(); nlp->lnio = true; nlp->arrow = arrow; nlp->type = (((arrow->leg->leg->flags & TT_LEGFLAG_SURFACE) != 0) ? SYML_SURVEY_SURFACE : SYML_SURVEY_CAVE); st1 = &(this->db->db1d.station_vec[arrow->start_node->uid - 1]); st2 = &(this->db->db1d.station_vec[arrow->end_node->uid - 1]); switch (this->proj->type) { case TT_2DPROJ_EXTEND: nlp->lnx1 = (arrow->is_reversed ? arrow->leg->leg->txx : arrow->leg->leg->fxx) - this->proj->shift_x; nlp->lny1 = st1->z - this->proj->shift_z; nlp->lnz1 = 0.0; nlp->lnx2 = (arrow->is_reversed ? arrow->leg->leg->fxx : arrow->leg->leg->txx) - this->proj->shift_x; nlp->lny2 = st2->z - this->proj->shift_z; nlp->lnz2 = 0.0; break; case TT_2DPROJ_PLAN: nlp->lnx1 = st1->x - this->proj->shift_x; nlp->lny1 = st1->y - this->proj->shift_y; nlp->lnz1 = st1->z - this->proj->shift_z; nlp->lnx2 = st2->x - this->proj->shift_x; nlp->lny2 = st2->y - this->proj->shift_y; nlp->lnz2 = st2->z - this->proj->shift_z; break; case TT_2DPROJ_ELEV: nlp->lnx1 = cosa * (st1->x - this->proj->shift_x) - sina * (st1->y - this->proj->shift_y); nlp->lny1 = st1->z - this->proj->shift_z; nlp->lnz1 = sina * (st1->x - this->proj->shift_x) + cosa * (st1->y - this->proj->shift_y); nlp->lnx2 = cosa * (st2->x - this->proj->shift_x) - sina * (st2->y - this->proj->shift_y); nlp->lny2 = st2->z - this->proj->shift_z; nlp->lnz2 = sina * (st2->x - this->proj->shift_x) + cosa * (st2->y - this->proj->shift_y); break; } } arrow = arrow->next_arrow; } } } if (cp != NULL) { cp = cp->nextcp; } if (lp != NULL) { lp = lp->next_item; } } break; // case TT_2DPROJ_EXTEND: // cp = this->fcpp; // while (cp != NULL) { // if (cp->used_in_attachement) { // nlp = this->polygon_insert(); // nlp->lnio = true; // nlp->lnx1 = cp->tx; // nlp->lny1 = cp->ty; // nlp->lnz1 = 0.0; // nlp->lnx2 = cp->point->extend_point->cpoint->tx; // nlp->lny2 = cp->point->extend_point->cpoint->ty; // nlp->lnz2 = 0.0; // } // cp = cp->nextcp; // } // break; } this->polygon_parsed = true; return this->polygon_first; } void thscrap::calc_z() { thdb2dcp * cp = this->fcpp; this->z = 0.0; this->a = 0.0; unsigned long numcp = 0; while(cp != NULL) { if (cp->st != NULL) { this->z += cp->tz; this->a += cp->ta; numcp++; } cp = cp->nextcp; } if (numcp > 0) { this->z /= double(numcp); this->a /= double(numcp); } else { this->z = thnan; this->a = thnan; } } thdb1ds * thscrap::get_nearest_station(thdb2dpt * pt) { double mindist, cdist; thdb1ds * res = NULL; mindist = -1.0; // skusi kontrolne body thdb2dcp * cp = this->fcpp; while(cp != NULL) { if (cp->st != NULL) { cdist = hypot(cp->pt->xt - pt->xt,cp->pt->yt - pt->yt); if ((cdist < mindist) || (mindist < 0.0)) { res = cp->st; mindist = cdist; } } cp = cp->nextcp; } // skusi pridany polygon thscraplp * lp = this->polygon_first; while(lp != NULL) { if (lp->station != NULL) { cdist = hypot(lp->stx - pt->xt,lp->sty - pt->yt); if ((cdist < mindist) || (mindist < 0.0)) { res = lp->station; mindist = cdist; } } lp = lp->next_item; } return res; } thscrapen * thscrap::get_ends() { if (this->ends_parsed) return this->ends_first; bool search_inv, cont, rev, lastvis, cvis = false, try_next_line; thdb2dlp * first_point, * clp; thscrapen * res = NULL, * cres; thscraplo * lo = this->get_outline(), * lo2, * nextlo; #ifdef THDEBUG thprintf("\nscaning ends: %s\n", this->name); #endif while (lo != NULL) { if (lo->line->outline != TT_LINE_OUTLINE_NONE) { lo2 = lo; #ifdef THDEBUG thprintf("\toutline from: %d -- mode %d\n", lo->line->id, lo->line->outline); #endif search_inv = true; cont = true; first_point = NULL; lastvis = (lo->mode == TT_OUTLINE_REVERSED ? ((lo->line->last_point->subtype != TT_LINE_SUBTYPE_INVISIBLE) && (lo->line->type == TT_LINE_TYPE_WALL)) : ((lo->line->first_point->subtype != TT_LINE_SUBTYPE_INVISIBLE) && (lo->line->type == TT_LINE_TYPE_WALL))); while (cont) { if ((lo2 == NULL) && (first_point != NULL)) lo2 = lo; if (lo2 == NULL) break; // teraz podme po bodoch krivky rev = (lo2->mode == TT_OUTLINE_REVERSED); if (rev) clp = lo2->line->last_point; else clp = lo2->line->first_point; while (cont && (clp != NULL)) { // urcime sucanu viditelnost try_next_line = false; if (rev) { if (clp->prevlp != NULL) cvis = ((clp->prevlp->subtype != TT_LINE_SUBTYPE_INVISIBLE) && (lo2->line->type == TT_LINE_TYPE_WALL)); else try_next_line = true; } else { if (clp->nextlp != NULL) cvis = ((clp->subtype != TT_LINE_SUBTYPE_INVISIBLE) && (lo2->line->type == TT_LINE_TYPE_WALL)); else try_next_line = true; } // skusi nasledovnu ciaru if (try_next_line) { cvis = true; if (lo2->next_line != NULL) nextlo = lo2->next_line; else nextlo = lo; // ak je dalsia normalne natocena if (nextlo->mode == TT_OUTLINE_REVERSED) { if ((nextlo->line->last_point->point->x != clp->point->x) || (nextlo->line->last_point->point->y != clp->point->y)) cvis = false; else if ((nextlo->line->last_point->prevlp != NULL) && ((nextlo->line->last_point->prevlp->subtype == TT_LINE_SUBTYPE_INVISIBLE) || (nextlo->line->type != TT_LINE_TYPE_WALL))) cvis = false; } else { if ((nextlo->line->first_point->point->x != clp->point->x) || (nextlo->line->first_point->point->y != clp->point->y)) cvis = false; else if ((nextlo->line->first_point->subtype == TT_LINE_SUBTYPE_INVISIBLE) || (nextlo->line->type != TT_LINE_TYPE_WALL)) cvis = false; } } // zistime ci mame bod if ((cvis != lastvis) && (search_inv != cvis)) { // mame bod, teraz ho priradime if (search_inv) { cres = this->db->db2d.insert_scrapen(); if (first_point != clp) { if (res == NULL) res = cres; else { cres->next_end = res; res = cres; } res->l1 = lo2->line; res->lp1 = clp; } else cont = false; if (first_point == NULL) first_point = clp; } else { res->l2 = lo2->line; res->lp2 = clp; } search_inv = !search_inv; } // podme na dalsi bod if (rev) clp = clp->prevlp; else clp = clp->nextlp; lastvis = cvis; } lo2 = lo2->next_line; } } lo = lo->next_outline; } this->ends_parsed = true; this->ends_first = res; return res; } void thscrap::insert_adata(class thdb1ds * as) { // najde ci dane data uz mame if (as->data.empty()) return; thmapstat_dataptr temp; for(std::list::iterator it = as->data.begin(); it != as->data.end(); it++) { temp.ptr = *it; thmapstat_datamap::iterator di = this->adata.find(temp); if (di == adata.end()) { this->adata[temp] = 1; } else { di->second++; } } } void thscrap::process_3d() { if (this->d3_parsed) return; this->d3_parsed = true; thprintf("."); thscrapis is(this); #ifndef THSCRAPIS_NEW3D thscraplp * slp; th2ddataobject * o2; thpoint * pp; // vlozi vsetky meracske body (body + body z polygonu) slp = this->get_polygon(); while (slp != NULL) { if (!slp->lnio) { is.insert_bp(slp->stx, slp->sty, slp->stz); } slp = slp->next_item; } o2 = this->fs2doptr; while (o2 != NULL) { if (o2->get_class_id() == TT_POINT_CMD) { pp = (thpoint *) o2; if (pp->station_name.id != 0) { is.insert_bp(pp->point->xt, pp->point->yt, pp->point->zt); } } o2 = o2->nscrapoptr; } // koniec vkladania is.end_bp(); // vlozi vsetky smerniky na zaklade shotov slp = this->get_polygon(); while (slp != NULL) { if (slp->lnio) { is.insert_bp_direction(slp->lnx1, slp->lny1, slp->lnz1, slp->lnx2, slp->lny2, slp->lnz2, slp); } slp = slp->next_item; } // koniec vkladania is.end_bp_direction(); // povklada medzibody na shotoch slp = this->get_polygon(); while (slp != NULL) { if (slp->lnio) { is.insert_bp_shot(slp->lnx1, slp->lny1, slp->lnz1, slp->lnx2, slp->lny2, slp->lnz2); } slp = slp->next_item; } #endif is.outline_scan(this->get_outline()); #ifndef THSCRAPIS_NEW3D // prejde vsetky objekty a nasackuje passage-heights o2 = this->fs2doptr; double cup, cdown; while (o2 != NULL) { if (o2->get_class_id() == TT_POINT_CMD) { pp = (thpoint *) o2; if ((pp->type == TT_POINT_TYPE_PASSAGE_HEIGHT) && ((pp->tags & TT_POINT_TAG_HEIGHT_U) != 0) && (!thisnan(pp->xsize))) { cdown = pp->xsize / 1.618; if (cdown > 1.618) cdown = 1.618; cup = pp->xsize - cdown; is.insert_dim(pp->point->xt, pp->point->yt, cup, cdown); } else if ((pp->type == TT_POINT_TYPE_DIMENSIONS) && (!thisnan(pp->xsize)) && (!thisnan(pp->ysize))) { is.insert_dim(pp->point->xt, pp->point->yt, pp->xsize, pp->ysize); } } o2 = o2->nscrapoptr; } is.insert_bp_dim(); is.outline_interpolate_dims(); #endif thscrapisolpt * oline, * olineln, * prevolineln = NULL; bool started = false; #ifndef THSCRAPIS_NEW3D double normx, normy, norml; // povkladame vsetky body na outlineoch for(oline = is.firstolseg; oline != NULL; oline = oline->next_segment) { for(olineln = oline; olineln != NULL; olineln = olineln->next) { olineln->vx3dup = this->d3_outline.insert_vertex( olineln->x + this->proj->shift_x, olineln->y + this->proj->shift_y, olineln->zu + this->proj->shift_z); olineln->vx3ddn = this->d3_outline.insert_vertex( olineln->x + this->proj->shift_x, olineln->y + this->proj->shift_y, olineln->zd + this->proj->shift_z); } } oline = is.firstolseg; thdb3dfc * cfc = NULL; thdb3dfx * cfx, * cfx2; while (oline != NULL) { started = false; olineln = oline->next; while (olineln != NULL) { if (EXPORT3D_INVISIBLE || olineln->visible) { normx = olineln->y - olineln->prev->y; normy = olineln->prev->x - olineln->x; norml = hypot(normx, normy); if (!started) { cfc = this->d3_outline.insert_face(THDB3DFC_TRIANGLE_STRIP); cfx = cfc->insert_vertex(olineln->prev->vx3dup); cfx2 = cfc->insert_vertex(olineln->prev->vx3ddn); if (norml > 0.0) { cfx->insert_normal(normx / norml, normy / norml, 0.0); cfx->vertex->insert_normal(normx / norml, normy / norml, 0.0); cfx->vertex->insert_normal(normx / norml, normy / norml, 0.0); cfx2->vertex->insert_normal(normx / norml, normy / norml, 0.0); cfx2->vertex->insert_normal(normx / norml, normy / norml, 0.0); } started = true; } cfx = cfc->insert_vertex(olineln->vx3dup); cfx2 = cfc->insert_vertex(olineln->vx3ddn); if (norml > 0.0) { cfx->insert_normal(normx / norml, normy / norml, 0.0); cfx->vertex->insert_normal(normx / norml, normy / norml, 0.0); cfx->vertex->insert_normal(normx / norml, normy / norml, 0.0); cfx2->vertex->insert_normal(normx / norml, normy / norml, 0.0); cfx2->vertex->insert_normal(normx / norml, normy / norml, 0.0); } } else { if (started) { started = false; } } prevolineln = olineln; olineln = olineln->next; } if ((oline->next != NULL) && (EXPORT3D_INVISIBLE || oline->visible)) { if (!started && (prevolineln != NULL)) { cfc = this->d3_outline.insert_face(THDB3DFC_TRIANGLE_STRIP); } if (prevolineln != NULL) { normx = oline->y - prevolineln->y; normy = prevolineln->x - oline->x; norml = hypot(normx, normy); } else { normx = 1.0; normy = 1.0; norml = sqrt(2.0); } if (!started && (prevolineln != NULL)) { cfx = cfc->insert_vertex(prevolineln->vx3dup); cfx2 = cfc->insert_vertex(prevolineln->vx3ddn); if (norml > 0) { cfx->insert_normal(normx / norml, normy / norml, 0.0); cfx->vertex->insert_normal(normx / norml, normy / norml, 0.0); cfx->vertex->insert_normal(normx / norml, normy / norml, 0.0); cfx2->vertex->insert_normal(normx / norml, normy / norml, 0.0); cfx2->vertex->insert_normal(normx / norml, normy / norml, 0.0); } started = true; } cfx = cfc->insert_vertex(oline->vx3dup); cfx2 = cfc->insert_vertex(oline->vx3ddn); if (norml > 0) { cfx->insert_normal(normx / norml, normy / norml, 0.0); cfx->vertex->insert_normal(normx / norml, normy / norml, 0.0); cfx->vertex->insert_normal(normx / norml, normy / norml, 0.0); cfx2->vertex->insert_normal(normx / norml, normy / norml, 0.0); cfx2->vertex->insert_normal(normx / norml, normy / norml, 0.0); } } oline = oline->next_segment; } int i, j; double vx, vy, vz, wx, wy, wz, nx, ny, nz, nl; if (is.tri_num > 0) { cfc = this->d3_outline.insert_face(THDB3DFC_TRIANGLES); for(i = 0; i < is.tri_num; i++) { oline = is.tri_triangles[i][0]; olineln = is.tri_triangles[i][1]; vx = olineln->x - oline->x; vy = olineln->y - oline->y; vz = olineln->zd - oline->zd; oline = is.tri_triangles[i][1]; olineln = is.tri_triangles[i][2]; wx = olineln->x - oline->x; wy = olineln->y - oline->y; wz = olineln->zd - oline->zd; nx = - (vy * wz - wy * vz); ny = - (wx * vz - vx * wz); nz = - (vx * wy - wx * vy); nl = hypot(hypot(nx, ny), nz); for(j = 2; j >= 0; j--) { oline = is.tri_triangles[i][j]; cfx = cfc->insert_vertex(oline->vx3ddn); if (nl > 0.0) { if (j == 2) cfx->insert_normal(nx / nl, ny / nl, nz / nl); cfx->vertex->insert_normal(nx / nl, ny / nl, nz / nl); } } oline = is.tri_triangles[i][0]; olineln = is.tri_triangles[i][1]; vx = olineln->x - oline->x; vy = olineln->y - oline->y; vz = olineln->zu - oline->zu; oline = is.tri_triangles[i][1]; olineln = is.tri_triangles[i][2]; wx = olineln->x - oline->x; wy = olineln->y - oline->y; wz = olineln->zu - oline->zu; nx = (vy * wz - wy * vz); ny = (wx * vz - vx * wz); nz = (vx * wy - wx * vy); nl = hypot(hypot(nx, ny), nz); for(j = 0; j < 3; j++) { oline = is.tri_triangles[i][j]; cfx = cfc->insert_vertex(oline->vx3dup); if (nl > 0.0) { if (j == 0) cfx->insert_normal(nx / nl, ny / nl, nz / nl); cfx->vertex->insert_normal(nx / nl, ny / nl, nz / nl); } } } } #endif #ifdef THSCRAPIS_NEW3D lxVec norm; double norml; // povkladame horne a spodne body for(oline = is.firstolseg; oline != NULL; oline = oline->next_segment) { for(olineln = oline; olineln != NULL; olineln = olineln->next) { olineln->vx3dup = this->d3_outline.insert_vertex(olineln->pt + olineln->d_up * olineln->dir); olineln->vx3ddn = this->d3_outline.insert_vertex(olineln->pt - olineln->d_dn * olineln->dir); } } // vlozime triangle strip dookola oline = is.firstolseg; thdb3dfc * cfc = NULL; thdb3dfx * cfx, * cfx2; while (oline != NULL) { started = false; // najdeme posledny bod prevolineln = NULL; olineln = oline->next; while (olineln != NULL) { prevolineln = olineln; olineln = olineln->next; } // nemame ani 2 body - nerobime outline if (prevolineln == NULL) break; olineln = oline; while (olineln != NULL) { if (EXPORT3D_INVISIBLE || olineln->visible) { norm = (olineln->pt - prevolineln->pt) ^ (olineln->dir); norml = norm.Length(); if (!started) { cfc = this->d3_outline.insert_face(THDB3DFC_TRIANGLE_STRIP); cfx = cfc->insert_vertex(prevolineln->vx3dup); cfx2 = cfc->insert_vertex(prevolineln->vx3ddn); if (norml > 0.0) { norm /= norml; cfx->insert_normal(norm); cfx->vertex->insert_normal(2.0 * norm); cfx2->vertex->insert_normal(2.0 * norm); } started = true; } cfx = cfc->insert_vertex(olineln->vx3dup); cfx2 = cfc->insert_vertex(olineln->vx3ddn); if (norml > 0.0) { cfx->insert_normal(norm); cfx->vertex->insert_normal(2.0 * norm); cfx2->vertex->insert_normal(2.0 * norm); } } else { if (started) { started = false; } } prevolineln = olineln; olineln = olineln->next; } // prejdeme dalsi segment oline = oline->next_segment; } int i, j; lxVec v, w; if (is.tri_num > 0) { cfc = this->d3_outline.insert_face(THDB3DFC_TRIANGLES); for(i = 0; i < is.tri_num; i++) { // spodne trojuholniky v = is.tri_triangles[i][1]->vx3ddn->get_vector() - is.tri_triangles[i][0]->vx3ddn->get_vector(); w = is.tri_triangles[i][2]->vx3ddn->get_vector() - is.tri_triangles[i][1]->vx3ddn->get_vector(); norm = -1.0 * (v ^ w); norml = norm.Length(); if (norml > 0.0) norm /= norml; for(j = 2; j >= 0; j--) { oline = is.tri_triangles[i][j]; cfx = cfc->insert_vertex(oline->vx3ddn); if (norml > 0.0) { if (j == 2) cfx->insert_normal(norm); cfx->vertex->insert_normal(norm); } } // horne trojuholniky v = is.tri_triangles[i][1]->vx3dup->get_vector() - is.tri_triangles[i][0]->vx3dup->get_vector(); w = is.tri_triangles[i][2]->vx3dup->get_vector() - is.tri_triangles[i][1]->vx3dup->get_vector(); norm = (v ^ w); norml = norm.Length(); if (norml > 0.0) norm /= norml; for(j = 0; j < 3; j++) { oline = is.tri_triangles[i][j]; cfx = cfc->insert_vertex(oline->vx3dup); if (norml > 0.0) { if (j == 0) cfx->insert_normal(norm); cfx->vertex->insert_normal(norm); } } } } #endif this->d3_outline.postprocess(); } thdb3ddata * thscrap::get_3d_outline() { this->process_3d(); return &(this->d3_outline); } void thscrap::update_limits(double x, double y) { if (thisnan(this->lxmin)) { this->lxmin = x; this->lxmax = x; } else { if (x < this->lxmin) this->lxmin = x; if (x > this->lxmax) this->lxmax = x; } if (thisnan(this->lymin)) { this->lymin = y; this->lymax = y; } else { if (y < this->lymin) this->lymin = y; if (y > this->lymax) this->lymax = y; } } void thscrap::parse_sketch(char ** args, int argenc) { int sv; thsketch sk; sk.m_scrap = this; sk.m_pic.init(args[0], thdb.csrc.name); // X thparse_double(sv,sk.m_x,args[1]); if ((sv != TT_SV_NUMBER) && (sv != TT_SV_NAN)) ththrow(("invalid number -- %s", args[1])) // Y thparse_double(sv,sk.m_y,args[2]); if ((sv != TT_SV_NUMBER) && (sv != TT_SV_NAN)) ththrow(("invalid number -- %s", args[2])) this->sketch_list.push_back(sk); } void thscrap::start_insert() { if (this->cs != TTCS_LOCAL) { if (this->proj->type != TT_2DPROJ_PLAN) ththrow(("coordinate system specification valid only for plan projection")) if (!this->scale_p9) ththrow(("scrap scaling not valid in this coordinate system")) } } therion/thscrap.h0000644000076400010400000001335612255633370015120 0ustar userAdministrators/** * @file thscrap.h * Basic unit of 2D map. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thscrap_h #define thscrap_h #include "thdataobject.h" #include "thdb2dpt.h" #include "thdb2dcp.h" #include "thscraplo.h" #include "thscraplp.h" #include "thscrapen.h" #include "thmapstat.h" #include "thdb3d.h" #include "thsketch.h" #include "thtrans.h" /** * scrap command options tokens. */ enum { TT_SCRAP_UNKNOWN = 2000, TT_SCRAP_PROJECTION = 2001, TT_SCRAP_SCALE = 2002, TT_SCRAP_STATIONS = 2003, TT_SCRAP_3D = 2004, TT_SCRAP_FLIP = 2005, TT_SCRAP_SKETCH = 2006, }; enum { TT_SCRAP_FLIP_UNKNOWN, TT_SCRAP_FLIP_NONE, TT_SCRAP_FLIP_HORIZ, TT_SCRAP_FLIP_VERT, }; /** * scrap command options parsing table. */ static const thstok thtt_scrap_opt[] = { {"flip", TT_SCRAP_FLIP}, {"proj", TT_SCRAP_PROJECTION}, {"projection", TT_SCRAP_PROJECTION}, {"scale", TT_SCRAP_SCALE}, {"sketch", TT_SCRAP_SKETCH}, {"stations", TT_SCRAP_STATIONS}, {"walls", TT_SCRAP_3D}, {NULL, TT_SCRAP_UNKNOWN}, }; /** * scrap class. */ class thscrap : public thdataobject { public: friend class thdatabase; friend class thdb2d; class th2ddataobject * fs2doptr, ///< First scrap 2D object. * ls2doptr; ///< Last scrap 2D object. double lxmin, lxmax, lymin, lymax, ///< Coordinate limits. R, G, B; ///< Scrap color. thdb2dcp * fcpp, * lcpp; ///< Scrap control points. unsigned int ncp; ///< Number of control points. class thsurvey * centerline_survey; bool centerline_io; thdb2dprj * proj; ///< Scrap projection. class thprjx_scrap * xscrap; ///< Extended scrap link. thscrap * proj_next_scrap, ///< Next scrap in projection. * proj_prev_scrap; ///< Prev next projection. double scale, scale_r1x, scale_r1y, scale_p1x, scale_p1y, scale_r2x, scale_r2y, scale_p2x, scale_p2y; ///< Scrap scale. bool scale_p9; ///< 9 parameters scaling double mx, my, mxx, mxy, myx, myy, mr, ms; ///< Calibration coeficients. double maxdist, avdist; thdb2dpt * maxdistp1, * maxdistp2; thscraplo * outline_first; bool outline_parsed, polygon_parsed, ends_parsed, d3_parsed, exported; thscraplp * polygon_first, * polygon_last; thscrapen * ends_first; thmapstat_datamap adata; thmorph2trans morph; int d3, flip; thdb3ddata d3_outline; void parse_scale(char * ss); void parse_stations(char * ss); void process_3d(); thscraplp * polygon_insert(thscraplp * before = NULL); thdb1ds * get_nearest_station(thdb2dpt * pt); thsketch_list sketch_list; double z, a; public: /** * Standard constructor. */ thscrap(); /** * Standard destructor. */ ~thscrap(); /** * Return class identifier. */ virtual int get_class_id(); /** * Return class name. */ virtual const char * get_class_name() {return "thscrap";}; /** * Return true, if son of given class. */ virtual bool is(int class_id); /** * Return number of command arguments. */ virtual int get_cmd_nargs(); /** * Return command name. */ virtual const char * get_cmd_name(); /** * Return command end option. */ virtual const char * get_cmd_end(); /** * Return option description. */ virtual thcmd_option_desc get_cmd_option_desc(const char * opts); /** * Set command option. * * @param cod Command option description. * @param args Option arguments arry. * @param argenc Arguments encoding. */ virtual void set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline); /** * Parse sketch option. */ void parse_sketch(char ** args, int argenc); /** * Delete this object. * * @warn Always use this methos instead of delete function. */ virtual void self_delete(); /** * Create a sketch linked to current scrap. */ void insert_sketch(char ** args); /** * Print object properties. */ virtual void self_print_properties(FILE * outf); /** * Insert control point to scrap. */ thdb2dcp * insert_control_point(); /** * Reset coordinates limits. */ void reset_limits(); /** * Reset transformation. */ void reset_transformation(); /** * Return outline. Process if necessary. */ thscraplo * get_outline(); /** * Return polygon. Process if necessary. */ thscraplp * get_polygon(); /** * Return polygon. Process if necessary. */ thscrapen * get_ends(); /** * Calculate scrap z. */ void calc_z(); /** * Insert associated data from given station. */ void insert_adata(class thdb1ds * as); /** * Return 3D data. Process if necessary. */ thdb3ddata * get_3d_outline(); void update_limits(double x, double y); virtual void start_insert(); }; #endif therion/thscrapen.cxx0000644000076400010400000000217110625655142016007 0ustar userAdministrators/** * @file thscrapen.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thscrapen.h" thscrapen::thscrapen() { this->next_end = NULL; this->l1 = NULL; this->lp1 = NULL; this->l2 = NULL; this->lp2 = NULL; } therion/thscrapen.h0000644000076400010400000000257511575360736015453 0ustar userAdministrators/** * @file thscrapen.h * Scrap end class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thscrapen_h #define thscrapen_h #include #include /** * Scrap end class. */ class thscrapen { public: thscrapen * next_end; class thline * l1; class thdb2dlp * lp1; class thline * l2; class thdb2dlp * lp2; double cxt, cyt; bool active; thscrapen(); ///< Default constructor }; typedef std::list thscrapen_list; ///< Points list. #endif therion/thscrapis.cxx0000644000076400010400000013057411705756234016035 0ustar userAdministrators/** * @file thscrapis.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thscrapis.h" #include "thscrap.h" #include "thpoint.h" #include "therion.h" #include "thdb2dlp.h" #include "thdb1d.h" #include "thscraplo.h" #include "thline.h" #include "thconfig.h" #include "thtrans.h" #include "thscraplp.h" #include "extern/poly2tri/poly2tri.h" #include "thscrap.h" #include "thsurvey.h" #include #ifdef THMSVC #define hypot _hypot #endif struct pt2d { double x, y; pt2d(double x_, double y_) : x(x_), y(y_) {} }; bool operator < (const struct pt2d & p1, const struct pt2d & p2) { if (p1.x < p2.x) return true; else if (p1.x == p2.x) return (p1.y < p2.y); return false; } typedef std::map pt2d2olptmap; #define ONLY_INVISIBLE_LINE 1 #define THSCRAPISSMP thcfg.tmp3dSMP #define THSCRAPISWALLSMP 0.1 //thcfg.tmp3dWALLSMP #define THSCRAPISMAXDIMD thcfg.tmp3dMAXDIMD thscrapis::thscrapis(class thscrap * scrap) { #ifndef THSCRAPIS_NEW3D this->firstbp = NULL; this->firstbbp = NULL; this->firstdim = NULL; #endif this->m_scrap = scrap; this->firstolseg = NULL; this->lastolseg = NULL; this->tri_triangles = NULL; this->tri_num = 0; } thscrapis::~thscrapis() { if (this->tri_triangles != NULL) delete [] this->tri_triangles; } struct thscrapislns { double x, y; thscrapislns(double xx, double yy) : x(xx), y(yy) {} }; void thscrapis::insert_outline_lnsegment(bool newsegment, thline * line, bool outer, bool reverse, bool visible, long from, long to) { if (from == to) return; thdb2dlp * lp = line->first_point; thdb2dpt * prev_pt = NULL; std::list tmplist; tmplist.clear(); double t,t2,t3,t_,t_2,t_3,x1,y1,c1x,c1y,c2x,c2y,x2,y2; long last = 0,i,nb = 20; bool dnu = false; while ((lp != NULL) && ((long(last) <= long(to)) || (to < 0))) { if (last == from) { dnu = true; tmplist.push_back(thscrapislns(lp->point->xt, lp->point->yt)); prev_pt = lp->point; } else if (dnu) { if ((lp->cp1 != NULL) && (lp->cp2 != NULL)) { x1 = prev_pt->xt; y1 = prev_pt->yt; c1x = lp->cp1->xt; c1y = lp->cp1->yt; c2x = lp->cp2->xt; c2y = lp->cp2->yt; x2 = lp->point->xt; y2 = lp->point->yt; for(i = 1; i < nb; i++) { t = double(i) / double(nb); t2 = t * t; t3 = t * t * t; t_ = 1.0 - t; t_2 = t_ * t_; t_3 = t_ * t_ * t_; tmplist.push_back(thscrapislns( t_3 * x1 + 3.0 * t * t_2 * c1x + 3 * t2 * t_ * c2x + t3 * x2 , t_3 * y1 + 3.0 * t * t_2 * c1y + 3 * t2 * t_ * c2y + t3 * y2 )); } } tmplist.push_back(thscrapislns(lp->point->xt, lp->point->yt)); } prev_pt = lp->point; lp = lp->nextlp; last++; } // vlozi tmplist do zoznamu bool first_point = true; std::list :: iterator it; thscrapisolpt * cpt; if (tmplist.size() == 0) return; if (reverse) { it = tmplist.end(); it--; } else { it = tmplist.begin(); } while (it != tmplist.end()) { // vlozime bod - osobitne prvy cpt = &(*(this->ol_list.insert(this->ol_list.end(),thscrapisolpt()))); if (newsegment && first_point) { if (this->firstolseg == NULL) { this->firstolseg = cpt; this->lastolseg = cpt; } else { if (outer) { cpt->next_segment = this->firstolseg; this->firstolseg = cpt; } else { this->lastolseg->next_segment = cpt; this->lastolseg = cpt; } } } else { // pokracovanie segmentu this->lastolcseg->next = cpt; } if (first_point) { cpt->visible = false; } else { cpt->visible = visible; } cpt->x = it->x; cpt->y = it->y; cpt->outer = outer; this->lastolcseg = cpt; first_point = false; if (reverse) { if (it == tmplist.begin()) it = tmplist.end(); else it--; } else { it++; } } } void simplify_outline(thscrapisolpt * start, thscrapisolpt * end) { if (start == end) return; if (start->next == end) return; thscrapisolpt * pt, * maxpt; double dx, dy, dd, maxw; dx = end->x - start->x, dy = end->y - start->y; dd = sqrt(dx*dx + dy*dy); pt = start->next; maxpt = NULL; maxw = 0; // prejde vsetky body, najde ten s najvacsou vzdialenostou od start/end //printf("\n\n\nA %6.2f %6.2f B %6.2f %6.2f\n", start->x, start->y, end->x, end->y); while (pt != end) { if (dd > 0.0) { pt->w = fabs(dx * (start->y - pt->y) - (start->x - pt->x) * dy)/dd; } else { pt->w = sqrt((pt->x - start->x) * (pt->x - start->x) + (pt->y - start->y) * (pt->y - start->y)); } //printf("%.2f ->X %6.2f %6.2f\n", pt->w, pt->x, pt->y); if (pt->w >= maxw) { maxw = pt->w; maxpt = pt; } pt = pt->next; } if (maxw > THSCRAPISWALLSMP) { // ak vzdialenost > limit -> spusti este raz od zaciatku po ten bod a od toho po koniec simplify_outline(start, maxpt); simplify_outline(maxpt, end); } else { // ak mensia ako limit -> vsetky body medzi start/end vymaze start->next = end; end->prev = start; } } #ifdef THSCRAPIS_NEW3D struct int3df { bool m_single, m_dim, m_pos, m_dir, m_setdim; thvec2 m_pf, m_pt; thline2 m_lf, m_lt, m_ln; double m_lnl; lxVec m_posf, m_post, m_direction; double m_upf, m_upt, m_dnf, m_dnt; int3df() : m_single(true), m_dim(false), m_pos(false), m_dir(false), m_setdim(false) {} void init_ln(thvec2 f, thvec2 t); void init_pt(thvec2 p); void interp(thvec2 src, double & w, double & p, thvec2 & pos); }; void int3df::init_ln(thvec2 f, thvec2 t) { m_single = false; m_pf = f; m_pt = t; m_ln = thline2(f, t); m_lf = thline2(f, f + thvec2(-m_ln.m_a, -m_ln.m_b)); m_lt = thline2(t, t + thvec2(m_ln.m_a, m_ln.m_b)); m_lnl = (m_pt - m_pf).length(); } void int3df::init_pt(thvec2 p) { m_single = true; m_pf = p; } void int3df::interp(thvec2 src, double & w, double & p, thvec2 & pos) { if (m_single) { p = 0.0; pos = m_pf; w = (src - m_pf).length2(); } else { double lnfd, lntd; lnfd = m_lf.eval(src); lntd = m_lt.eval(src); if (lnfd < 0) { w = (src - m_pf).length2(); p = 0.0; pos = m_pf; } else if (lntd < 0) { w = (src - m_pt).length2(); p = 1.0; pos = m_pt; } else { w = m_ln.eval(src); w *= w; pos = thvec2(src.m_x - (m_ln.m_a * src.m_x + m_ln.m_b * src.m_y + m_ln.m_c) / (m_ln.m_a * m_ln.m_a + m_ln.m_b * m_ln.m_b) * m_ln.m_a, src.m_y - (m_ln.m_a * src.m_x + m_ln.m_b * src.m_y + m_ln.m_c)/(m_ln.m_a * m_ln.m_a + m_ln.m_b * m_ln.m_b) * m_ln.m_b); p = (pos - m_pf).length() / m_lnl; } } } typedef std::list int3dl; bool operator < (const struct thvec2 & l1, const struct thvec2 & l2) { if (l1.m_x < l2.m_x) return true; if (l1.m_x > l2.m_x) return false; if (l1.m_y < l2.m_y) return true; return false; } bool operator > (const struct thvec2 & l1, const struct thvec2 & l2) { return (l2 < l1); } bool operator == (const struct thvec2 & l1, const struct thvec2 & l2) { return ((l1.m_x == l2.m_x) && (l1.m_y == l2.m_y)); } struct int3dshot { thvec2 m_f, m_t; int3dshot(thvec2 f, thvec2 t) : m_f(f), m_t(t) {} }; bool operator < (const struct int3dshot & f1, const struct int3dshot & f2) { if (f1.m_f < f2.m_f) return true; if (f1.m_f > f2.m_f) return false; if (f1.m_t < f2.m_t) return true; return false; } typedef std::map int3dpoint_map; typedef std::map int3dshot_map; struct int3di { thscrap * m_scrap; int3dpoint_map m_map_points; int3dshot_map m_map_shots; int3dl m_features; int3di(thscrap * scrap) {m_scrap = scrap;} void post_process(); void insert_slp(thscraplp * slp); void insert_point(thvec2 p2, long id); void insert_dim(thvec2 p2, double up, double dn); void interpolate(thscrapisolpt * oline); }; void setudlr(double asl, double & udlr, int index) { if (!thisnan(udlr)) return; if (!thisnan(asl)) { udlr = asl * 0.38; switch (index) { case 0: udlr *= 0.75; break; case 1: udlr *= 0.25; if (udlr > 1.618) udlr = 1.618; break; default: udlr *= .5; } } else { switch (index) { case 0: udlr = 1.618; break; case 1: udlr = 0.618; break; default: udlr = (1.618 + 0.618) / 2.0; } } } void int3di::insert_slp(thscraplp *slp) { thvec2 p1, p2; int3df f; int3dpoint_map::iterator pmi; int3dl::iterator fi; // ak pridavame bod if (!slp->lnio) { // skontroluje ci dany bod mame, ak ano, tak odideme p1 = thvec2(slp->stx, slp->sty); if (m_map_points.find(p1) != m_map_points.end()) return; // ak nemame, tak pridame f.init_pt(p1); f.m_dim = false; f.m_pos = true; f.m_dir = false; f.m_posf = lxVec(slp->station->x, slp->station->y, slp->station->z); m_map_points[p1] = m_features.insert(m_features.end(), f); } else { p1 = thvec2(slp->lnx1, slp->lny1); p2 = thvec2(slp->lnx2, slp->lny2); lxVec pos1, pos2; thdb1ds * s1, * s2, * stmp; double udlr1[4], udlr2[4], udlrt; int i; s1 = &(thdb.db1d.station_vec[slp->arrow->leg->leg->from.id - 1]); s1 = &(thdb.db1d.station_vec[s1->uid - 1]); s2 = &(thdb.db1d.station_vec[slp->arrow->leg->leg->to.id - 1]); s2 = &(thdb.db1d.station_vec[s2->uid - 1]); udlr1[0] = slp->arrow->leg->leg->from_up; udlr1[1] = slp->arrow->leg->leg->from_down; udlr1[2] = slp->arrow->leg->leg->from_left; udlr1[3] = slp->arrow->leg->leg->from_right; udlr2[0] = slp->arrow->leg->leg->to_up; udlr2[1] = slp->arrow->leg->leg->to_down; udlr2[2] = slp->arrow->leg->leg->to_left; udlr2[3] = slp->arrow->leg->leg->to_right; if (slp->arrow->is_reversed) { stmp = s1; s1 = s2; s2 = stmp; for(i = 0; i < 4; i++) { udlrt = udlr1[i]; udlr1[i] = udlr2[i]; udlr2[i] = udlrt; } } pos1 = lxVec(s1->x, s1->y, s1->z); pos2 = lxVec(s2->x, s2->y, s2->z); // skontroluje, ci dany shot mame, ak ano, tak odideme if (m_map_shots.find(int3dshot(p1,p2)) != m_map_shots.end()) return; // ak mame nejake body tam, kde je shot, tak ich odstranime pmi = m_map_points.find(p1); if (pmi != m_map_points.end()) { if (pmi->second->m_single) { m_features.erase(pmi->second); m_map_points.erase(pmi); pmi = m_map_points.end(); } } pmi = m_map_points.find(p2); if (pmi != m_map_points.end()) { if (pmi->second->m_single) { m_features.erase(pmi->second); m_map_points.erase(pmi); pmi = m_map_points.end(); } } if (p1 == p2) { if (pmi == m_map_points.end()) { // vlozime ako bod f.init_pt(p1); f.m_dim = false; f.m_pos = true; f.m_dir = false; f.m_posf = 0.5 * pos1 + 0.5 * pos2; m_map_points[p1] = m_features.insert(m_features.end(), f); } } else { // ak nemame, vytvorime shot f.init_ln(p1, p2); f.m_pos = true; f.m_posf = pos1; f.m_post = pos2; // dimensions podla lrud double coef, pa; coef = 1.0; f.m_dim = true; switch (this->m_scrap->proj->type) { case TT_2DPROJ_PLAN: for(i = 0; i < 2; i++) { f.m_dim = f.m_dim && ((!thisnan(udlr1[i])) && (!thisnan(udlr2[i]))); setudlr(s1->asl, udlr1[i], i); setudlr(s2->asl, udlr2[i], i); } if (fabs(slp->arrow->leg->leg->total_gradient) > slp->arrow->leg->leg->vtresh) { coef = fabs(slp->arrow->leg->leg->total_gradient); if (coef > 60) coef = 60; coef = 1 / cos(coef / 180.0 * THPI); } f.m_upf = coef * udlr1[0]; f.m_dnf = coef * udlr1[1]; f.m_upt = coef * udlr2[0]; f.m_dnt = coef * udlr2[1]; break; case TT_2DPROJ_ELEV: coef = slp->arrow->leg->leg->total_bearing; if (coef < 0.0) coef += 180.0; if (coef > 180.0) coef -= 180.0; pa = this->m_scrap->proj->pp1; if (pa < 0.0) pa += 180.0; if (pa > 180.0) pa -= 180.0; coef = fabs(coef - pa); if (coef > 90.0) coef = 90 - (coef - 90); coef = 90 - coef; if (coef > 60) coef = 60; coef = 1 / cos(coef / 180.0 * THPI); case TT_2DPROJ_EXTEND: for(i = 2; i < 4; i++) { f.m_dim = f.m_dim && ((!thisnan(udlr1[i])) && (!thisnan(udlr2[i]))); setudlr(s1->asl, udlr1[i], i); setudlr(s2->asl, udlr2[i], i); } if (p2.m_x > p1.m_x) { f.m_upf = coef * udlr1[3]; f.m_dnf = coef * udlr1[2]; f.m_upt = coef * udlr2[3]; f.m_dnt = coef * udlr2[2]; } else { f.m_upf = coef * udlr1[2]; f.m_dnf = coef * udlr1[3]; f.m_upt = coef * udlr2[2]; f.m_dnt = coef * udlr2[3]; } break; } // direction podla projekcie if ((this->m_scrap->proj->type == TT_2DPROJ_EXTEND) && (p1.m_x != p2.m_x)) { f.m_dir = true; f.m_direction = lxVec(pos1.y - pos2.y, pos2.x - pos1.x, 0.0); f.m_direction.Normalize(); if (p1.m_x > p2.m_x) f.m_direction = -1.0 * f.m_direction; } else { f.m_dir = false; } fi = m_features.insert(m_features.end(), f); m_map_points[p1] = fi; m_map_points[p2] = fi; m_map_shots[int3dshot(p1,p2)] = fi; m_map_shots[int3dshot(p2,p1)] = fi; } } } void int3di::insert_point(thvec2 p2, long id) { // skontroluje ci dany bod mame, ak ano, tak odideme if (m_map_points.find(p2) != m_map_points.end()) return; // ak nemame, tak pridame int3df f; thdb1ds * s = &(thdb.db1d.station_vec[id - 1]); f.init_pt(p2); f.m_dim = false; f.m_pos = true; f.m_dir = false; f.m_posf = lxVec(s->x, s->y, s->z); m_map_points[p2] = m_features.insert(m_features.end(), f); } void int3di::insert_dim(thvec2 p2, double up, double dn) { int3dpoint_map::iterator mi; mi = m_map_points.find(p2); // skontroluje ci dany bod mame, ak ano, tak prepiseme ud if (mi != m_map_points.end()) { mi->second->m_dim = true; if (mi->second->m_single || (mi->second->m_pf == p2)) { mi->second->m_upf = up; mi->second->m_dnf = dn; } else { mi->second->m_upt = up; mi->second->m_dnt = dn; } return; } // ak nemame, tak pridame int3df f; f.init_pt(p2); f.m_dim = true; f.m_pos = false; f.m_dir = false; f.m_dnf = dn; f.m_upf = up; m_map_points[p2] = m_features.insert(m_features.end(), f); } void int3di::post_process() { int3dl::iterator i, ii; // if no dimension interpolator - use asl lxVecLimits vl; for(i = this->m_features.begin(); i != this->m_features.end(); i++) { i->m_setdim = false; vl.Add(i->m_pf.m_x, i->m_pf.m_y, 0.0); if (!i->m_single) vl.Add(i->m_pt.m_x, i->m_pt.m_y, 0.0); } if (vl.valid) { double diam = (vl.max - vl.min).Length() * 0.25; for(i = this->m_features.begin(); i != this->m_features.end(); i++) { if ((!i->m_dim) && (!i->m_single)) { bool nsetdim = true; for(ii = this->m_features.begin(); ii != this->m_features.end(); ii++) { if (ii->m_dim) { thvec2 dp = ii->m_pf, tmpv; double w, p; if (!ii->m_single) dp = 0.5 * dp + 0.5 * ii->m_pt; i->interp(dp, w, p, tmpv); w = sqrt(w); if (w < diam) nsetdim = false; } } i->m_setdim = nsetdim; } } for(i = this->m_features.begin(); i != this->m_features.end(); i++) { if (i->m_setdim) i->m_dim = true; } } } void thscrapis::int3d() { // inicializuje 3d interpolovacie struktury thscraplp * slp; th2ddataobject * o2; thpoint * pp; int3di i3(this->m_scrap); bool xelev = (this->m_scrap->proj->type == TT_2DPROJ_EXTEND); // vlozi vsetky meracske body zo scrapu o2 = this->m_scrap->fs2doptr; while (o2 != NULL) { if (o2->get_class_id() == TT_POINT_CMD) { pp = (thpoint *) o2; if (pp->station_name.id != 0) { i3.insert_point(thvec2(pp->point->xt, pp->point->yt), pp->station_name.id); } } o2 = o2->nscrapoptr; } // vlozi vsetok polygon zo scrapu (ciary vklada len tie, co maju oba body v scrape!) slp = this->m_scrap->get_polygon(); while (slp != NULL) { i3.insert_slp(slp); slp = slp->next_item; } // prejde vsetky objekty a nasackuje passage-heights o2 = this->m_scrap->fs2doptr; double cup, cdown; while (o2 != NULL) { if (o2->get_class_id() == TT_POINT_CMD) { pp = (thpoint *) o2; if ((pp->type == TT_POINT_TYPE_PASSAGE_HEIGHT) && ((pp->tags & TT_POINT_TAG_HEIGHT_U) != 0) && (!thisnan(pp->xsize))) { cdown = pp->xsize / 1.618; if (cdown > 1.618) cdown = 1.618; cup = pp->xsize - cdown; i3.insert_dim(thvec2(pp->point->xt, pp->point->yt), cup, cdown); } else if ((pp->type == TT_POINT_TYPE_DIMENSIONS) && (!thisnan(pp->xsize)) && (!thisnan(pp->ysize))) { i3.insert_dim(thvec2(pp->point->xt, pp->point->yt), pp->xsize, pp->ysize); } } o2 = o2->nscrapoptr; } i3.post_process(); // interpoluje lxVec ddir, udir, rdir; switch (this->m_scrap->proj->type) { case TT_2DPROJ_PLAN: ddir = lxVec(0.0, 0.0, 1.0); udir = lxVec(0.0, 1.0, 0.0); rdir = lxVec(1.0, 0.0, 0.0); break; case TT_2DPROJ_ELEV: ddir = lxVec(-sin(this->m_scrap->proj->pp1 / 180.0 * THPI), -cos(this->m_scrap->proj->pp1 / 180.0 * THPI), 0.0); udir = lxVec(0.0, 0.0, 1.0); rdir = lxVec(-ddir.y, ddir.x, 0.0); break; case TT_2DPROJ_EXTEND: ddir = lxVec(0.0, -1.0, 0.0); udir = lxVec(0.0, 0.0, 1.0); rdir = lxVec(-ddir.y, ddir.x, 0.0); break; } thscrapisolpt * oline, * olineln; int3dl::iterator ii, iii; lxVec sumv, pos, sumupv, sumdnv; thvec2 v2, pt; double sumw, sumdw, w, p, cw, sup, sdn; oline = this->firstolseg; while (oline != NULL) { olineln = oline; while (olineln != NULL) { pt = thvec2(olineln->x, olineln->y); // interpolate direction if neeeded if (xelev) { ii = i3.m_features.begin(); sumw = 0.0; sumv = lxVec(0.0, 0.0, 0.0); while (ii != i3.m_features.end()) { if (ii->m_dir) { ii->interp(pt, w, p, v2); if (w < 1e-6) w = 1e-6; cw = 1 / (w * w); sumv += cw * ii->m_direction; sumw += cw; } ii++; } if (sumv.Norm() > 0.0) { sumv.Normalize(); olineln->dir = sumv; } else { olineln->dir = ddir; } } else { olineln->dir = ddir; } // interpolujeme position & direction pre dimension points iii = i3.m_features.begin(); while (iii != i3.m_features.end()) { if (!iii->m_dir) iii->m_direction = ddir; if ((!iii->m_pos) && (iii->m_dim)) { sumw = 0.0; ii = i3.m_features.begin(); sumv = lxVec(0.0, 0.0, 0.0); sumdw = 0.0; sumupv = lxVec(0.0, 0.0, 0.0); while (ii != i3.m_features.end()) { if (ii->m_pos) { ii->interp(iii->m_pf, w, p, v2); if (w < 1e-6) w = 1e-6; cw = 1.0 / (w * w); if (ii->m_pos) { sumw += cw; pos = ((1.0 - p) * ii->m_posf + p * ii->m_post); if (xelev) rdir = lxVec(-olineln->dir.y, olineln->dir.x, 0.0); v2 = pt - v2; pos = pos + v2.m_x * rdir + v2.m_y * udir; sumv += cw * pos; } if (ii->m_dir) { sumupv += cw * ii->m_direction; sumdw += cw; } } ii++; } iii->m_posf = (1 / sumw) * sumv; if (!iii->m_dir) { if (sumupv.Norm() > 0.0) { iii->m_direction = (1 / sumdw) * sumupv; } else { iii->m_direction = ddir; } } } iii++; } // interpolujeme position & dimensions sumdw = 0.0; sumw = 0.0; ii = i3.m_features.begin(); sumv = lxVec(0.0, 0.0, 0.0); sumupv = sumv; sumdnv = sumv; sup = 0.0; sdn = 0.0; while (ii != i3.m_features.end()) { if (ii->m_pos || ii->m_dim) { if (this->m_scrap->proj->type == TT_2DPROJ_EXTEND) rdir = lxVec(-olineln->dir.y, olineln->dir.x, 0.0); ii->interp(pt, w, p, v2); if (w < 1e-6) w = 1e-6; cw = 1.0 / (w * w); if (ii->m_dim) { sumdw += cw; // interpolate up dimension sup += cw * ((1.0 - p) * ii->m_upf + p * ii->m_upt); // interpolate dn dimension sdn += cw * ((1.0 - p) * ii->m_dnf + p * ii->m_dnt); } if (ii->m_pos) { sumw += cw; v2 = pt - v2; pos = (1.0 - p) * ii->m_posf + p * ii->m_post; pos = pos + v2.m_x * rdir + v2.m_y * udir; sumv += cw * pos; } } ii++; } sumv = (1 / sumw) * sumv; if (sumdw == 0.0) { sup = 1.618; sdn = 0.618; } else { sup /= sumdw; sdn /= sumdw; } olineln->pt = sumv; olineln->d_up = sup; olineln->d_dn = sdn; olineln = olineln->next; } oline = oline->next_segment; } } #endif void thscrapis::outline_scan(class thscraplo * outln) { // nacita bool first, outer, vis; long from, to; thdb2dlp * lp; thscraplo * lo = outln, * lo2; while (lo != NULL) { outer = (lo->line->outline == TT_LINE_OUTLINE_OUT); // prejde celu krivku a rozlozi ju na viditelne a neviditelne casti first = true; lo2 = lo; while (lo2 != NULL) { if (lo2->mode == TT_OUTLINE_REVERSED) { lp = lo2->line->first_point; from = 0; while (lp != NULL) { lp = lp->nextlp; from++; } from = from - 1; lp = lo2->line->last_point; to = from; } else { lp = lo2->line->first_point; from = 0; to = from; } bool cvis = false; while (lp != NULL) { // najde viditelnost prveho bodu if (lo2->mode == TT_OUTLINE_REVERSED) { if (lp->prevlp != NULL) { #ifdef ONLY_INVISIBLE_LINE vis = (lp->prevlp->subtype != TT_LINE_SUBTYPE_INVISIBLE); #else vis = (lo2->line->type == TT_LINE_TYPE_WALL) && (lp->prevlp->subtype != TT_LINE_SUBTYPE_INVISIBLE); #endif } else vis = cvis; } else { #ifdef ONLY_INVISIBLE_LINE vis = (lp->subtype != TT_LINE_SUBTYPE_INVISIBLE); #else vis = (lo2->line->type == TT_LINE_TYPE_WALL) && (lp->subtype != TT_LINE_SUBTYPE_INVISIBLE); #endif } cvis = vis; // pokracuje pokial nemame bod z inou viditelnostou while (lp != NULL) { if (lo2->mode == TT_OUTLINE_REVERSED) { if (lp->prevlp != NULL) { #ifdef ONLY_INVISIBLE_LINE vis = (lp->prevlp->subtype != TT_LINE_SUBTYPE_INVISIBLE); #else vis = (lo2->line->type == TT_LINE_TYPE_WALL) && (lp->prevlp->subtype != TT_LINE_SUBTYPE_INVISIBLE); #endif } else vis = cvis; } else { #ifdef ONLY_INVISIBLE_LINE vis = (lp->subtype != TT_LINE_SUBTYPE_INVISIBLE); #else vis = (lo2->line->type == TT_LINE_TYPE_WALL) && (lp->subtype != TT_LINE_SUBTYPE_INVISIBLE); #endif } if (vis != cvis) break; if (lo2->mode == TT_OUTLINE_REVERSED) { lp = lp->prevlp; if (lp != NULL) from--; } else { lp = lp->nextlp; if (lp != NULL) to++; } } this->insert_outline_lnsegment(first, lo2->line, outer, (lo2->mode == TT_OUTLINE_REVERSED), cvis, from, to); first = false; if (lo2->mode == TT_OUTLINE_REVERSED) to = from; else from = to; } lo2 = lo2->next_line; } lo = lo->next_outline; } // ZJEDNODUSENIE #define print_outline(ARG) \ oline = this->firstolseg; \ thprintf("\n" ARG ":\n"); \ while (oline != NULL) { \ thprintf("------------------\n"); \ olineln = oline; \ while (olineln != NULL) { \ thprintf("%s %6.2f %6.2f\n", olineln->visible ? "SHOW" : "HIDE", olineln->x, olineln->y); \ olineln = olineln->next; \ } \ oline = oline->next_segment; \ } // vyplni prev thscrapisolpt * oline, * olineln, * prevolln, * rlnode, * lastolln; // print_outline("BEFORE ALL"); oline = this->firstolseg; while (oline != NULL) { oline->deletable = false; prevolln = oline; olineln = prevolln->next; while (olineln != NULL) { olineln->prev = prevolln; prevolln = olineln; olineln = olineln->next; } oline = oline->next_segment; } // odstrani duplikaty oline = this->firstolseg; while (oline != NULL) { olineln = oline->next; prevolln = NULL; while (olineln != NULL) { if (hypot(olineln->x - olineln->prev->x, olineln->y - olineln->prev->y) < THSCRAPISRES) { olineln->prev->next = olineln->next; if (olineln->next != NULL) { olineln->next->prev = olineln->prev; } } else { prevolln = olineln; } olineln = olineln->next; } // odstrani duplikat z konca if ((prevolln != NULL) && (hypot(oline->x - prevolln->x, oline->y - prevolln->y) < THSCRAPISRES)) { if (prevolln->prev != NULL) { prevolln->prev->next = NULL; oline->visible = prevolln->visible; } } oline = oline->next_segment; } // print_outline("AFTER DUPLICATES REMOVAL"); // nastavi tie co sa nebudu mazat oline = this->firstolseg; while (oline != NULL) { olineln = oline->next; while (olineln != NULL) { if ((olineln->prev != NULL) && (olineln->visible != olineln->prev->visible)) { olineln->prev->deletable = false; } if (olineln->next == NULL) olineln->deletable = false; olineln = olineln->next; } oline = oline->next_segment; } // zjednodusi thscrapisolpt * simplstart; oline = this->firstolseg; while (oline != NULL) { simplstart = oline; olineln = oline->next; while (olineln != NULL) { if (!olineln->deletable) { simplify_outline(simplstart, olineln); simplstart = olineln; } olineln = olineln->next; } oline = oline->next_segment; } // print_outline("BEFORE REORIENT"); #define orient_number(v1,v2,v3) ((v2->x - v1->x)*(v3->y - v1->y) \ - (v3->x - v1->x)*(v2->y - v1->y)) // preorientuje bool reorient = false, tmpvis, tmptmpvis; double orientnum, tmpx, tmpy; #ifndef THSCRAPIS_NEW3D double tmpz; #endif long nnodes, inode; long numpts = 0; oline = this->firstolseg; while (oline != NULL) { lastolln = oline; rlnode = oline; nnodes = 1; olineln = oline->next; numpts++; while (olineln != NULL) { if ((olineln->y < rlnode->y) || ((olineln->y == rlnode->y) && (olineln->x > rlnode->x))) { rlnode = olineln; } lastolln = olineln; nnodes++; numpts++; olineln = olineln->next; } // usporiadame vrcholy - prevolln, rlnode, olineln if (rlnode->prev != NULL) prevolln = rlnode->prev; else prevolln = lastolln; if (rlnode->next != NULL) olineln = rlnode->next; else olineln = oline; // zistime ci je orientacia OK if ((prevolln != NULL) && (olineln != NULL)) { orientnum = orient_number(prevolln, rlnode, olineln); // orientnum = (rlnode->x - prevolln->x) * (olineln->y - prevolln->y) - // (olineln->x - prevolln->x) * (rlnode->y - prevolln->y); reorient = (oline->outer != (orientnum > 0)); // outer == anti-clockwise } if (reorient) { // finta FEE - pointre nechame tak a vymenime data olineln = oline; prevolln = lastolln; nnodes = nnodes/2; inode = 0; while ((olineln != NULL) && (inode < nnodes)) { inode++; tmpx = olineln->x; tmpy = olineln->y; #ifndef THSCRAPIS_NEW3D tmpz = olineln->z; #endif tmpvis = olineln->visible; olineln->x = prevolln->x; olineln->y = prevolln->y; #ifndef THSCRAPIS_NEW3D olineln->z = prevolln->z; #endif olineln->visible = prevolln->visible; prevolln->x = tmpx; prevolln->y = tmpy; #ifndef THSCRAPIS_NEW3D prevolln->z = tmpz; #endif prevolln->visible = tmpvis; olineln = olineln->next; prevolln = prevolln->prev; } tmpvis = lastolln->visible; olineln = oline; while (olineln != NULL) { tmptmpvis = tmpvis; tmpvis = olineln->visible; olineln->visible = tmptmpvis; olineln = olineln->next; } } oline = oline->next_segment; } // print_outline("AFTER ALL"); // TRIANGULACIA PO NOVOM if (numpts > 2) { p2t::CDT * cdt = NULL; std::vector polyline; pt2d2olptmap ptmap; bool mult_outer = false; //FILE * f = fopen("data.dat","w"); double xx, yy; bool duplpts = false; oline = this->firstolseg; while (oline != NULL) { olineln = oline; while (olineln != NULL) { xx = olineln->x; yy = olineln->y; while (ptmap.find(pt2d(xx, yy)) != ptmap.end()) { xx = xx + 0.0001; duplpts = true; } ptmap[pt2d(xx, yy)] = olineln; //fprintf(f,"%.6f\t%.6f\n", xx, yy); polyline.push_back(new p2t::Point(xx, yy)); olineln = olineln->next; numpts++; } if (cdt == NULL) { cdt = new p2t::CDT(polyline); polyline.clear(); } else { if (oline->outer) { mult_outer = true; break; } cdt->AddHole(polyline); polyline.clear(); } oline = oline->next_segment; } //fclose(f); std::vector triangles; try { cdt->Triangulate(); // set triangulation output triangles = cdt->GetTriangles(); this->tri_num = (long)triangles.size(); } catch (...) { const char * errscrap = this->m_scrap->name; const char * errdot = ""; const char * errsurv = ""; if (strlen(this->m_scrap->fsptr->full_name) > 0) { errdot = "@"; errsurv = this->m_scrap->fsptr->full_name; } thwarning(("%s%s%s -- scrap 3D reconstruction failed", errscrap, errdot, errsurv)); thtext_inline = false; this->tri_num = 0; } long trix, newnum; if (this->tri_num > 0) { this->tri_triangles = new pthscrapisolpt[this->tri_num][3]; for (trix = 0, newnum = 0; trix < this->tri_num; trix++) { p2t::Triangle& t = *triangles[trix]; p2t::Point& b = *t.GetPoint(1); p2t::Point& a = *t.PointCCW(b); p2t::Point& c = *t.PointCW(b); pt2d2olptmap::iterator i = ptmap.find(pt2d(a.x, a.y)); if (i == ptmap.end()) continue; else this->tri_triangles[newnum][0] = i->second; i = ptmap.find(pt2d(b.x, b.y)); if (i == ptmap.end()) continue; else this->tri_triangles[newnum][1] = i->second; i = ptmap.find(pt2d(c.x, c.y)); if (i == ptmap.end()) continue; else this->tri_triangles[newnum][2] = i->second; newnum++; } bool old_thtext_inline = thtext_inline; if (mult_outer || (this->tri_num > newnum) || duplpts) { const char * errscrap = this->m_scrap->name; const char * errdot = ""; const char * errsurv = ""; if (strlen(this->m_scrap->fsptr->full_name) > 0) { errdot = "@"; errsurv = this->m_scrap->fsptr->full_name; } if (mult_outer) { thwarning(("%s%s%s -- multiple scrap outer outlines not supported yet", errscrap, errdot, errsurv)); thtext_inline = false; } if ((this->tri_num > newnum) || duplpts) { thwarning(("%s%s%s -- invalid scrap outline", errscrap, errdot, errsurv)); thtext_inline = false; } } thtext_inline = old_thtext_inline; this->tri_num = newnum; } else { this->tri_triangles = NULL; } delete cdt; } #ifdef THSCRAPIS_NEW3D this->int3d(); #endif #ifndef THSCRAPIS_NEW3D // interpoluje Z double dum; oline = this->firstolseg; while (oline != NULL) { olineln = oline; while (olineln != NULL) { this->bp_interpolate(olineln->x, olineln->y, olineln->z, dum, dum, dum); olineln->zu = olineln->z + 1.618 * 1.618; olineln->zd = olineln->z - 1.618; olineln = olineln->next; } oline = oline->next_segment; } #endif } /* Input: * shoty s LRUD * meracske body bez LRUD * point dimenstions s UD Ako na to: * zoberieme outline - HOTOVO * zjednodusime - HOTOVO * triangulacia - HOTOVO * potrebujeme interpolovat -> x/y/z outlajnu direction vector up/down * mame fixne: PLAN - x/y + direction fixed ELEV - z + direction fixed XELEV - z * mame v shotoch: PLAN - z + up/down (treba spocitat) ELEV - x/y + up/down (treba spocitat) XELEV - x/y + direction (treba spocitat) + up/down (treba spocitat) * pre kazdy bod outlajnu mame ciary, ktore z neho idu interpolacia prebieha nasledovne: 1. pripravime si zoznam features (shoty, body, dimensions) 2. spocitame co treba pre features spocitat (up/down/direction) 3. v1: + pre kazdy bod spocitame 1/d^4 k features a vyvazime, separatne up/down a separatne x/y/z/dir + v2 - selektovat features sa budu iba podla triangulacie a zvysok sa interpoluje po outlajne */ // DELETE FROM HERE ON #ifndef THSCRAPIS_NEW3D bool operator < (const struct thscrapisloc & l1, const struct thscrapisloc & l2) { if (l1.x + THSCRAPISRES < l2.x) return true; else if (l2.x + THSCRAPISRES < l1.x) return false; else if (l1.y + THSCRAPISRES < l2.y) return true; else return false; } void thscrapis::insert_bp(double x, double y, double z) { thscrapisbp * mi = &(this->bp_map[thscrapisloc(x,y)]); if (mi->sums < 0) { mi->x = x; mi->y = y; mi->z = z; mi->sums = 0.0; } else { if (z < mi->z) { mi->z = z; } } } void thscrapis::end_bp() { // vytvori odkazy std::map ::iterator it = this->bp_map.begin(); this->firstbp = NULL; if (it == this->bp_map.end()) return; thscrapisbp * cbp = &(it->second); this->firstbp = cbp; it++; while (it != this->bp_map.end()) { // thprintf("BP: %.2f %.2f %.2f\n", cbp->x, cbp->y, cbp->z); cbp->next = &(it->second); cbp = cbp->next; it++; } } void thscrapis::insert_bp_direction(double x, double y, double z, double tx, double ty, double tz, thscraplp * slp) { // ak najde (x,y), tak prida direction std::map ::iterator it = this->bp_map.find(thscrapisloc(x,y)); if (it == this->bp_map.end()) return; double dx = tx - x, dy = ty - y, dz = tz - z, dl = hypot(dx, dy), d, tmpup, tmpdown; it->second.suml += hypot(dl,dz); it->second.sumsl += 1.0; if (dl < THSCRAPISRES) { if ((dz > 1.618) && (dz > it->second.up)) it->second.up = dz; if ((dz < -1.618) && (dz < -(it->second.down))) it->second.down = -dz; return; } if (slp->arrow != NULL) { tmpup = (slp->arrow->is_reversed ? slp->arrow->leg->leg->to_up : slp->arrow->leg->leg->from_up); tmpdown = (slp->arrow->is_reversed ? slp->arrow->leg->leg->to_down : slp->arrow->leg->leg->from_down); if (fabs(slp->arrow->leg->leg->total_gradient) >= slp->arrow->leg->leg->vtresh) { d = cos(slp->arrow->leg->leg->total_gradient / 180.0 * THPI); } else { d = 1.0; } if (!thisnan(tmpup)) { tmpup *= d; if (tmpup > it->second.up) it->second.up = tmpup; } if (!thisnan(tmpdown)) { tmpdown *= d; if (tmpdown > it->second.down) it->second.down = tmpdown; } } if (dy < 0) { dx *= -1.0; dy *= -1.0; } d = atan2(dx, dy); it->second.sumd += d; it->second.sums += 1.0; } void thscrapis::end_bp_direction() { // predeli directions this->firstbbp = this->firstbp; thscrapisbp * cbp = this->firstbp; while (cbp != NULL) { if (cbp->sums > 0.0) { cbp->sumd /= cbp->sums; cbp->dx = sin(cbp->sumd); cbp->dy = cos(cbp->sumd); cbp->dd = true; } else { cbp->dx = 0.0; cbp->dy = 0.0; } if (cbp->sumsl > 0.0) { cbp->suml /= cbp->sumsl; cbp->suml *= 0.618; if ((cbp->up < 0.0) && (cbp->down < 0.0)) { cbp->down = cbp->suml / 1.618; if (cbp->down > 0.618) cbp->down = 0.618; cbp->up = cbp->suml - cbp->down; if (cbp->up > 1.618) cbp->up = 1.618; } else if (cbp->up < 0.0) { cbp->up = 1.618; } else if (cbp->down < 0.0) { cbp->down = 1.618; } } if (cbp->up < 0.0) { cbp->up *= -1.0; if (cbp->up > 1.618) cbp->up = 1.618; } if (cbp->down < 0.0) { cbp->down *= -1.0; if (cbp->down > 0.618) cbp->down = 0.618; } cbp = cbp->next; } } void thscrapis::bp_interpolate(double x, double y, double & iz, double & id, double & idx, double & idy) { // prejde vsetky body a spocita interpolovane z a direction double sumw = 0.0, sumdw = 0.0, cw, dx, dy, dd; bool anyd = false; iz = 0.0; id = 0.0; thscrapisbp * cbp = this->firstbp; // thprintf("interpolation %.2f %.2f\n", x, y); while (cbp != NULL) { dx = x - cbp->x; dy = y - cbp->y; cw = hypot(dx, dy); if (cw < THSCRAPISRES) { iz = cbp->z; id = cbp->sumd; idx = cbp->dx; idy = cbp->dy; return; } //cw = pow(cw,-2.0) * exp(-2.0 * pow(dx * cbp->dx + dy * cbp->dy, 2.0)); dd = dx * cbp->dx + dy * cbp->dy; cw = 1 / (cw * cw) * exp(-2.0 * dd * dd); if (cbp->dd) { id += cw * cbp->sumd; sumdw += cw; anyd = true; } // thprintf("inserting z: %.2f %.2f -> %.2f x %.2f\n", cbp->x, cbp->y, cw, cbp->z); iz += cw * cbp->z; sumw += cw; cbp = cbp->next; } if (sumw == 0.0) return; iz /= sumw; if (anyd) { id /= sumdw; idx = sin(id); idy = cos(id); } else { id = 0.0; idx = 0.0; idy = 0.0; } } void thscrapis::insert_bp_shot(double fx, double fy, double fz, double tx, double ty, double tz) { // spocita dlzku double dx = tx - fx, dy = ty - fy, dz = tz - fz, dl = hypot(dx, ty), ddx, ddy, dirf, dirt, smp, frc, cx, cy; long i, n; if (dl < THSCRAPISRES) return; if (dy < 0.0) { ddx = -1.0 * dx / dl; ddy = -1.0 * dy / dl; } else { ddx = dx / dl; ddy = dy / dl; } // skusi najst from shot a to shot a ich smery std::map ::iterator fit = this->bp_map.find(thscrapisloc(fx,fy)), tit = this->bp_map.find(thscrapisloc(tx,ty)); thscrapisbp * cbp; if ((fit == this->bp_map.end()) && (tit == this->bp_map.end())) { dirf = atan2(ddx, ddy); dirt = dirf; } else if (fit == this->bp_map.end()) { dirt = tit->second.sumd; dirf = dirt; } else if (tit == this->bp_map.end()) { dirf = fit->second.sumd; dirt = dirf; } else { dirf = fit->second.sumd; dirt = tit->second.sumd; } // zacne vkladat body (na zaciatok), ale iba ak ich nemame n = long(dl / THSCRAPISSMP); smp = dl / (n + 1); for (i = 1; i <= n; i++) { frc = double(i) * smp / dl; cx = fx + frc * dx; cy = fy + frc * dy; cbp = &(this->bp_map[thscrapisloc(cx, cy)]); if (cbp->sums < 0.0) { cbp->x = cx; cbp->y = cy; cbp->z = fz + frc * dz; cbp->sumd = dirf + (dirt - dirf) * frc; cbp->dx = sin(cbp->sumd); cbp->dy = cos(cbp->sumd); cbp->sums = 0.0; cbp->next = this->firstbp; this->firstbp = cbp; } } } void thscrapis::insert_dim(double x, double y, double up, double down) { thscrapisdim * cd = &(*(this->dim_list.insert(this->dim_list.end(),thscrapisdim()))); this->bp_interpolate(x, y, cd->z, cd->dd, cd->dx, cd->dy); cd->x = x; cd->y = y; cd->up = up; cd->down = down; cd->zup = cd->z + up; cd->zdown = cd->z - down; if (this->firstdim == NULL) { this->firstdim = cd; } else { cd->next = this->firstdim; this->firstdim = cd; } } void thscrapis::insert_bp_dim() { // prejde vsetky existujuce, // ak je minimum vzdialenosti > THSCRAPISMAXDIMD // prida ho do listu // prejde list este raz a nastavi nexty thscrapisbp * bp = this->firstbbp; thscrapisdim * cd; double mindist, cdist; bool toinsert; while (bp != NULL) { cd = this->firstdim; toinsert = true; if (cd != NULL) { mindist = hypot(cd->x - bp->x, cd->y - bp->y); toinsert = false; cd = cd->next; while (cd != NULL) { cdist = hypot(cd->x - bp->x, cd->y - bp->y); if (cdist < mindist) mindist = cdist; cd = cd->next; } if (mindist > THSCRAPISMAXDIMD) toinsert = true; } if (toinsert) { cd = &(*(this->dim_list.insert(this->dim_list.end(),thscrapisdim()))); cd->x = bp->x; cd->y = bp->y; cd->z = bp->z; cd->dd = bp->sumd; cd->dx = bp->dx; cd->dy = bp->dy; cd->up = bp->up; cd->down = bp->down; cd->zup = cd->z + cd->up; cd->zdown = cd->z - cd->down; } bp = bp->next; } std::list :: iterator it = this->dim_list.begin(); if (it != this->dim_list.end()) { this->firstdim = &(*it); this->firstdim->next = NULL; it++; while (it != this->dim_list.end()) { cd = &(*it); cd->next = this->firstdim; this->firstdim = cd; it++; } } } void thscrapis::outline_interpolate_dims() { // poojde bod za bodom a spravi interpolaciu thscrapisolpt * oline, * olineln; oline = this->firstolseg; while (oline != NULL) { olineln = oline; while (olineln != NULL) { this->dim_interpolate(olineln->x, olineln->y, olineln->z, olineln->zu, olineln->zd); olineln = olineln->next; } oline = oline->next_segment; } } void thscrapis::dim_interpolate(double x, double y, double z, double & zu, double & zd) { thscrapisdim * cd = this->firstdim; if (cd == NULL) return; // prejde vsetky body a spocita interpolovane up, down, zup, zdown double sumw = 0.0, up = 0.0, down = 0.0, zup = 0.0, zdown = 0.0, dx, dy, cw; while (cd != NULL) { dx = x - cd->x; dy = y - cd->y; cw = hypot(dx, dy); if (cw < THSCRAPISRES) { zup = cd->zup; zdown = cd->zdown; up = cd->up; down = cd->down; sumw = 1.0; break; } cw = 1.0 / (cw * cw); //pow(cw,-2.0); // * exp(-2.0 * pow(dx * cd->dx + dy * cd->dy, 2.0)); zup += cw * cd->zup; zdown += cw * cd->zdown; up += cw * cd->up; down += cw * cd->down; sumw += cw; cd = cd->next; } if (sumw == 0.0) { zu = z + 1.0; zd = z - 1.0; return; } if (sumw > 0) { zup /= sumw; zdown /= sumw; up /= sumw; down /= sumw; } if (zup < z + up) zu = z + up; else zu = zup; if (zdown > z - down) zd = z - down; else zd = zdown; } #endif therion/thscrapis.h0000644000076400010400000001032211577053710015442 0ustar userAdministrators/** * @file thscrapis.h * Scrap interpolation structure. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thscrapis_h #define thscrapis_h #include #include #include #include "thdb3d.h" #include "loch/lxMath.h" #define THSCRAPISRES 0.001 //#define THSCRAPIS_NEW3D 1 #ifndef THSCRAPIS_NEW3D struct thscrapisloc { double x, y; thscrapisloc(double xx, double yy) : x(xx), y(yy) {} }; bool operator < (const struct thscrapisloc & l1, const struct thscrapisloc & l2); struct thscrapisbp { double x, y, z, ///< 3D coordinates dd, dx, dy, ///< direction unit vector sumd, ///< sum of directions sums, ///< sum of direction weights. suml, sumsl, up, down; thscrapisbp * next; thscrapisbp() : x(0.0), y(0.0), z(0.0), dd(false), dx(0.0), dy(0.0), sumd(0.0), sums(-1.0), suml(0.0), sumsl(0.0), up(-1.6), down(-1.0), next(NULL) {}; }; struct thscrapisdim { double x, y, z, up, down, zup, zdown, dd, dx, dy; thscrapisdim * next; thscrapisdim() : x(0.0), y(0.0), z(0.0), up(0.0), down(0.0), zup(0.0), zdown(0.0), dd(0.0), dx(0.0), dy(0.0), next(NULL) {} }; #endif struct thscrapisolpt { double x, y, w; #ifndef THSCRAPIS_NEW3D double z, zd, zu; #else lxVec pt, dir; double d_up, d_dn; #endif bool visible, deletable, outer; thscrapisolpt * next, * prev, * next_segment; thdb3dvx * vx3dup, * vx3ddn; thscrapisolpt() : x(0.0), y(0.0), w(0.0), #ifndef THSCRAPIS_NEW3D z(0.0), zd(0.0), zu(0.0), #else d_up(0.0), d_dn(0.0), #endif visible(true), deletable(true), outer(true), next(NULL), prev(NULL), next_segment(NULL), vx3dup(NULL), vx3ddn(NULL) {} }; typedef thscrapisolpt * pthscrapisolpt; #ifdef THSCRAPIS_NEW3D struct thscrapis3line { pthscrapisolpt m_pA, m_pD; lxVec m_ptB, m_ptC, m_dirB, m_dirC; double m_dBup, m_dBdn, m_dCup, dCdn; thdb3dvx *m_A, * m_Aup, * m_Adn, * m_Bup, * m_Bdn, * m_Cup, * m_Cdn, * m_D, * m_Dup, * m_Ddn; }; #endif /** * Scrap polygon outline class. */ struct thscrapis { #ifndef THSCRAPIS_NEW3D thscrapisbp * firstbp, * firstbbp; std::map bp_map; thscrapisdim * firstdim; std::list dim_list; void insert_bp(double x, double y, double z); void end_bp(); void insert_bp_direction(double x, double y, double z, double tx, double ty, double tz, class thscraplp * slp); void end_bp_direction(); void insert_bp_shot(double fx, double fy, double fz, double tx, double ty, double tz); void bp_interpolate(double x, double y, double & iz, double & id, double & idx, double & idy); void insert_dim(double x, double y, double up, double down); void insert_bp_dim(); void outline_interpolate_dims(); void dim_interpolate(double x, double y, double z, double & zu, double & zd); #endif pthscrapisolpt (*tri_triangles) [3]; int tri_num; class thscrap * m_scrap; thscrapisolpt * firstolseg, * lastolseg, * lastolcseg; std::list ol_list; thscrapis(class thscrap * scrap); ///< Default constructor ~thscrapis(); ///< Default destructor #ifdef THSCRAPIS_NEW3D void int3d(); #endif void insert_outline_lnsegment(bool newsegment, class thline * line, bool outer, bool reverse, bool visible, long from, long to); void outline_scan(class thscraplo * outln); }; #endif therion/thscraplo.cxx0000644000076400010400000000230311534132162016004 0ustar userAdministrators/** * @file thscraplo.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thscraplo.h" thscraplo::thscraplo() { this->next_line = NULL; this->next_outline = NULL; this->next_scrap_line = NULL; this->line = NULL; this->mode = TT_OUTLINE_NO; this->lfreefirst = true; this->lfreelast = true; } therion/thscraplo.h0000644000076400010400000000271111575361532015446 0ustar userAdministrators/** * @file thscraplo.h * Scrap outline line class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thscraplo_h #define thscraplo_h #include #include enum { TT_OUTLINE_NO, TT_OUTLINE_NORMAL, TT_OUTLINE_REVERSED, }; /** * Scrap outline line class. */ class thscraplo { public: bool lfreefirst, lfreelast; thscraplo * next_line, * next_outline, * next_scrap_line; class thline * line; int mode; thscraplo(); ///< Default constructor }; typedef std::list thscraplo_list; ///< Points list. #endif therion/thscraplp.cxx0000644000076400010400000001133712255662062016024 0ustar userAdministrators/** * @file thscraplp.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thscraplp.h" #include "thscrap.h" #include "thexpmap.h" #include "loch/lxMath.h" thscraplp::thscraplp() { this->next_item = NULL; this->prev_item = NULL; this->station_name.clear(); this->station = NULL; this->ustation = NULL; this->arrow = NULL; this->lnio = false; this->type = 0; } void thscraplp::export_mp(thexpmapmpxs * out, thscrap * scrap, bool background) { if ((this->arrow != NULL) && (scrap->get_outline() == NULL) && (out->symset->is_assigned(SYMA_DIMENSIONS)) && background) { lxVec vff, vf1, vf2, vtt, vt1, vt2, rvec; double fl, fr, tl, tr; bool vertical; lxVecLimits vlim; bool reverse = (thdb.db1d.station_vec[this->arrow->leg->leg->from.id - 1].uid != arrow->start_node->uid); //bool reverse = false; //if (this->arrow->is_reversed) reverse = !reverse; //if (this->arrow->leg->reverse) reverse = !reverse; thdataleg * cl = this->arrow->leg->leg; if (reverse) { vff = lxVec(this->lnx2, this->lny2, this->lnz2); vtt = lxVec(this->lnx1, this->lny1, this->lnz1); } else { vff = lxVec(this->lnx1, this->lny1, this->lnz1); vtt = lxVec(this->lnx2, this->lny2, this->lnz2); } if (cl->walls != TT_FALSE) { if ((vff.x == vtt.x) && (vff.y == vtt.y)) { vlim.valid = false; vlim.Add(-cl->from_left,-cl->from_down,0.0); vlim.Add(cl->from_right,cl->from_up ,0.0); vlim.Add(-cl->to_left,-cl->to_down,0.0); vlim.Add(cl->to_right,cl->to_up ,0.0); vf1 = vff + vlim.min; vf2 = vff + lxVec(vlim.min.x, vlim.max.y, 0.0); vt2 = vff + vlim.max; vt1 = vff + lxVec(vlim.max.x, vlim.min.y, 0.0); } else { vertical = false; switch (out->proj->type) { case TT_2DPROJ_ELEV: case TT_2DPROJ_EXTEND: if (fabs(cl->total_gradient) < cl->vtresh) vertical = true; if ((vertical) || (vff.x < vtt.x) || ((vff.x == vtt.x) && (vff.y < vtt.y))) { fl = cl->from_up; fr = cl->from_down; tl = cl->to_up; tr = cl->to_down; } else { fl = cl->from_down; fr = cl->from_up; tl = cl->to_down; tr = cl->to_up; } break; default: fl = cl->from_left; fr = cl->from_right; tl = cl->to_left; tr = cl->to_right; } if (vertical) { rvec = lxVec(0.0, 1.0, 0.0); } else { rvec = lxVec(vtt.x - vff.x, vtt.y - vff.y, 0.0); rvec = rvec.Rotated(90.0,0.0); rvec.Normalize(); } vf1 = vff + (fl * rvec); vf2 = vff - (fr * rvec); vt1 = vtt + (tl * rvec); vt2 = vtt - (tr * rvec); } out->symset->export_mp_symbol_options(out->file, SYMA_DIMENSIONS); fprintf(out->file,"%s(((%.2f,%.2f) -- (%.2f,%.2f) -- (%.2f,%.2f) -- (%.2f,%.2f) -- cycle));\n", out->symset->get_mp_macro(SYMA_DIMENSIONS), thxmmxst(out, vf1.x, vf1.y), thxmmxst(out, vt1.x, vt1.y), thxmmxst(out, vt2.x, vt2.y), thxmmxst(out, vf2.x, vf2.y)); } } // export line if (!background) { bool export_shot = true; if (this->arrow != NULL) { thdataleg * cl = this->arrow->leg->leg; export_shot = ((cl->flags & TT_LEGFLAG_SPLAY) == 0) || scrap->centerline_io; } if (export_shot) { if (this->arrow != NULL) this->arrow->leg->leg->export_mp_flags(out->file); out->symset->export_mp_symbol_options(out->file, this->type); fprintf(out->file,"%s(((%.2f,%.2f) -- (%.2f,%.2f)));\n", out->symset->get_mp_macro(this->type), thxmmxst(out, this->lnx1, this->lny1), thxmmxst(out, this->lnx2, this->lny2)); } } } therion/thscraplp.h0000644000076400010400000000310711656736364015460 0ustar userAdministrators/** * @file thscraplp.h * Scrap polygon line class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thscraplp_h #define thscraplp_h #include #include "thdb1d.h" #include /** * Scrap polygon line class. */ class thscraplp { public: thscraplp * next_item, * prev_item; thobjectname station_name; thdb1ds * station, * ustation; class thdb1d_tree_arrow * arrow; thscraplp(); ///< Default constructor double stx, sty, stz, lnx1, lnx2, lny1, lny2, lnz1, lnz2; bool lnio; int type; void export_mp(class thexpmapmpxs * out, class thscrap * scrap, bool background); }; typedef std::list thscraplp_list; ///< Points list. #endif therion/thselector.cxx0000644000076400010400000003743110721206126016172 0ustar userAdministrators/** * @file thselector.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thselector.h" #include "thexception.h" #include "thconfig.h" #include #include #include "thparse.h" #include "thdatabase.h" #include "thdataobject.h" #include "thsurvey.h" #include "th2ddataobject.h" #include "thscrap.h" #include #include "thchenc.h" #include #include "thmap.h" thselector::thselector() { this->number = 0; this->cfgptr = NULL; } void thselector::assign_config(class thconfig * cptr) { this->cfgptr = cptr; } enum { TT_SELECTOR_RECURSIVE, TT_SELECTOR_MAP_LEVEL, TT_SELECTOR_CHAPTER_LEVEL, TT_SELECTOR_UNKNOWN, }; static const thstok thtt_selector_opts[] = { {"-chapter-level", TT_SELECTOR_CHAPTER_LEVEL}, {"-map-level", TT_SELECTOR_MAP_LEVEL}, {"-recursive", TT_SELECTOR_RECURSIVE}, {NULL, TT_SELECTOR_UNKNOWN} }; void thselector::parse_selection (bool usid, int nargs, char ** args) { double dum; int sv; thselector_item itm; itm.unselect = usid; if (nargs < 1) ththrow(("not enough command arguments")) // set object name if (strlen(*args) == 0) ththrow(("empty object name not allowed")) itm.name = this->cfgptr->get_str_buff()->append(*args); itm.src_name = this->cfgptr->get_db()->strstore(this->cfgptr->get_cfg_file()->get_cif_name(), true); itm.src_ln = this->cfgptr->get_cfg_file()->get_cif_line_number(); itm.number = ++this->number; // set recursive option int aid; for(aid = 1; aid < nargs; aid++) { switch (thmatch_token(args[aid],thtt_selector_opts)) { case TT_SELECTOR_RECURSIVE: aid++; switch (thmatch_token(args[aid],thtt_bool)) { case TT_FALSE: itm.recursive = false; break; case TT_TRUE: itm.recursive = true; break; case TT_UNKNOWN_BOOL: ththrow(("logical value expected -- %s", args[aid])) } break; case TT_SELECTOR_MAP_LEVEL: aid++; thparse_double(sv,dum,args[aid]); if ((sv != TT_SV_NUMBER) && (strcmp(args[aid],"basic") == 0)) { itm.map_level = -1; break; } if ((sv != TT_SV_NUMBER) || (dum < 0)) ththrow(("invalid map level -- %s", *args)) if (double(int(dum)) != dum) ththrow(("invalid map level -- %s", *args)) itm.map_level = long(dum); break; case TT_SELECTOR_CHAPTER_LEVEL: aid++; thparse_double(sv,dum,args[aid]); if (sv == TT_SV_NAN) { itm.chapter_level = -1; break; } if ((sv != TT_SV_NUMBER) || (dum <= 0)) ththrow(("invalid chapter level -- %s", *args)) if (double(int(dum)) != dum) ththrow(("invalid chapter level -- %s", *args)) itm.chapter_level = long(dum); break; default: ththrow(("unknown option -- %s", args[aid])) } } this->data.push_back(itm); } class thselector_select_item { public: thdataobject * objp; const char * n1, * n2, * n3; void clear(); thselector_select_item() {this->clear();} void parse (thdataobject * op); bool operator < (const thselector_select_item & ii) const; }; void thselector_select_item::clear() { this->n1 = ""; this->n2 = this->n1; this->n3 = this->n1; this->objp = NULL; } bool thselector_select_item::operator < (const thselector_select_item & ii) const { int cmp1 = strcmp(this->n2, ii.n2); if (cmp1 < 0) return true; else if (cmp1 == 0) { size_t l1 = strlen(this->n1); size_t l2 = strlen(ii.n1); if ((l1 == 0) && (l2 > 0)) return true; if ((l1 > 0) && (l2 == 0)) return false; int cmp2 = strcmp(this->n1, ii.n1); if (cmp2 < 0) return true; else return false; } else return false; } void thselector_select_item::parse (thdataobject * op) { this->clear(); thsurvey * sp; switch (op->get_class_id()) { case TT_GRADE_CMD: case TT_LAYOUT_CMD: return; case TT_SURVEY_CMD: sp = (thsurvey *) op; this->n1 = ""; this->n2 = sp->get_reverse_full_name(); this->n3 = sp->get_full_name(); break; default: this->n1 = op->get_name(); this->n2 = op->get_father_survey()->get_reverse_full_name(); this->n3 = op->get_father_survey()->get_full_name(); } this->objp = op; } typedef std::vector thselector_siv; void thselector__export_survey_tree_node (FILE * cf, unsigned long level, thdataobject * optr) { thsurvey * ss; while (optr != NULL) { if (optr->get_class_id() == TT_SURVEY_CMD) { ss = (thsurvey *) optr; fprintf(cf,"xth_cp_data_tree_insert %lu", ss->id); if (ss->fsptr != NULL) fprintf(cf," %lu %lu", ss->fsptr->id, level); else fprintf(cf," {} %lu",level); fprintf(cf," %s %s",ss->get_name(),ss->full_name); if (strlen(ss->get_title()) > 0) { thdecode_tex(&(thdb.buff_enc), ss->get_title()); fprintf(cf," \"%s\"",thdb.buff_enc.get_buffer()); thdecode(&(thdb.buff_enc),TT_ASCII,ss->get_title()); thdecode_tex(&(thdb.buff_tmp), thdb.buff_enc.get_buffer()); fprintf(cf," \"%s\"",thdb.buff_tmp.get_buffer()); } else fprintf(cf," \"\" \"\""); // nakoniec statistika fprintf(cf, " \"length: %.2fm (surface %.2fm, duplicated %.2fm)" ,ss->stat.length,ss->stat.length_surface,ss->stat.length_duplicate); if (ss->stat.station_top != NULL) { fprintf(cf,"\\n" "vertical range: %.2fm (from %s@%s at %.2fm to %s@%s at %.2fm)\\n" "north-south range: %.2fm (from %s@%s at %.2fm to %s@%s at %.2fm)\\n" "east-west range: %.2fm (from %s@%s at %.2fm to %s@%s at %.2fm)\\n" "number of shots: %lu\\n" "number of stations: %lu" "\"\n", ss->stat.station_top->z - ss->stat.station_bottom->z, ss->stat.station_top->name, ss->stat.station_top->survey->full_name, ss->stat.station_top->z, ss->stat.station_bottom->name, ss->stat.station_bottom->survey->full_name, ss->stat.station_bottom->z, ss->stat.station_north->y - ss->stat.station_south->y, ss->stat.station_north->name, ss->stat.station_north->survey->full_name, ss->stat.station_north->y, ss->stat.station_south->name, ss->stat.station_south->survey->full_name, ss->stat.station_south->y, ss->stat.station_east->x - ss->stat.station_west->x, ss->stat.station_east->name, ss->stat.station_east->survey->full_name, ss->stat.station_east->x, ss->stat.station_west->name, ss->stat.station_west->survey->full_name, ss->stat.station_west->x, ss->stat.num_shots, ss->stat.num_stations ); } else { fprintf(cf,"\"\n"); } if (ss->foptr != NULL) thselector__export_survey_tree_node(cf,level+1,ss->foptr); } optr = optr->nsptr; } } void thselector__prepare_map_tree_export (thdatabase * db) { // prejde vsetky mapy a surveye a nastavi tmp_bool na true a tmp_ulong na 0 thdb_object_list_type::iterator obi = db->object_list.begin(); while (obi != db->object_list.end()) { (*obi)->tmp_bool = true; (*obi)->tmp_ulong = 0; obi++; } // prejde vsetky mapy a objektom v nich nastavi (tmp_bool) na false thdb2dmi * mi; obi = db->object_list.begin(); while (obi != db->object_list.end()) { if (((*obi)->fsptr != NULL) && ((*obi)->get_class_id() == TT_MAP_CMD)) { mi = ((thmap*)(*obi))->first_item; while (mi != NULL) { if (mi->type == TT_MAPITEM_NORMAL) { mi->object->tmp_bool = false; } mi = mi->next_item; } } obi++; } } void thselector__export_map_tree_node (FILE * cf, unsigned long level, unsigned long pass, thdataobject * optr, thmap * fmap) { if (optr->tmp_ulong == pass) return; if (optr->fsptr == NULL) return; optr->tmp_ulong = pass; thmap * mptr = NULL; int subtype = 0; const char * types = NULL; switch (optr->get_class_id()) { case TT_MAP_CMD: mptr = (thmap*) optr; //id fid level types = "map"; if (mptr->is_basic) subtype = 1; break; default: //case TT_SCRAP_CMD: //types = "scrap"; //do not export scraps return; break; //default: // break; } ((thmap*)optr)->nz++; fprintf(cf,"xth_cp_map_tree_insert %s %d %luX%lu",types,subtype,optr->id,((thmap*)optr)->nz); if (fmap == NULL) fprintf(cf," p%d %lu",((thmap*)optr)->projection_id,level); else fprintf(cf," %luX%lu %lu",fmap->id,fmap->nz,level); fprintf(cf," %s %s%s%s",optr->get_name(),optr->get_name(), (strlen(optr->fsptr->full_name) > 0 ? "@" : ""), optr->fsptr->full_name); if (strlen(optr->get_title()) > 0) { thdecode_tex(&(thdb.buff_enc), optr->get_title()); fprintf(cf," \"%s\"",thdb.buff_enc.get_buffer()); thdecode(&(thdb.buff_enc),TT_ASCII,optr->get_title()); thdecode_tex(&(thdb.buff_tmp), thdb.buff_enc.get_buffer()); fprintf(cf," \"%s\"\n",thdb.buff_tmp.get_buffer()); } else fprintf(cf," \"\" \"\"\n"); thdb2dmi * mi; if (mptr != NULL) { mi = mptr->first_item; while (mi != NULL) { if (mi->type == TT_MAPITEM_NORMAL) { thselector__export_map_tree_node(cf, level+1, pass, mi->object, mptr); } mi = mi->next_item; } } } void thselector::dump_selection_db (FILE * cf, thdatabase * db) { // exportuje strom surveyov fprintf(cf,"set xth(ctrl,cp,datlist) {}\n"); if (db->fsurveyptr != NULL) thselector__export_survey_tree_node(cf,0,db->fsurveyptr); fprintf(cf,"xth_cp_data_tree_create\n"); // exportuje strom map po vsetkych projekciach fprintf(cf,"set xth(ctrl,cp,maplist) {}\n"); // exportuje vsetky projekcie thdb2dprj_list::iterator prjli = db->db2d.prj_list.begin(); while (prjli != db->db2d.prj_list.end()) { fprintf(cf,"xth_cp_map_tree_insert projection 0 p%d {} 0",prjli->id); if (strlen(prjli->index) > 0) fprintf(cf," %s:%s",thmatch_string(prjli->type,thtt_2dproj),prjli->index); else fprintf(cf," %s",thmatch_string(prjli->type,thtt_2dproj)); fprintf(cf," {} {} {}\n"); prjli++; } // exportuje vsetky mapy a scrapy thselector__prepare_map_tree_export(db); thdb_object_list_type::iterator obi = db->object_list.begin(); while (obi != db->object_list.end()) { if ((*obi)->get_class_id() == TT_MAP_CMD) ((thmap*)(*obi))->nz = 0; obi++; } obi = db->object_list.begin(); while (obi != db->object_list.end()) { if (((*obi)->fsptr != NULL) && ((*obi)->get_class_id() == TT_MAP_CMD) && (((thmap*)(*obi))->tmp_bool)) thselector__export_map_tree_node(cf,1,(*obi)->id,(*obi),NULL); obi++; } fprintf(cf,"xth_cp_map_tree_create\n"); } void thselector::dump_selection (FILE * cf) { thselector_list::iterator ii = this->data.begin(); if ((ii != this->data.end()) && (!this->cfgptr->get_comments_skip())) fprintf(cf,"# Objects selected for output.\n"); while (ii != this->data.end()) { if (ii->unselect) fprintf(cf,"unselect"); else fprintf(cf,"select"); fprintf(cf," %s", ii->name); if (ii->recursive == false) fprintf(cf," -recursive off"); if (ii->map_level != 0) { if (ii->map_level < 0) fprintf(cf," -map-level basic"); else fprintf(cf," -map-level %ld", ii->map_level); } if (ii->chapter_level != 0) { if (ii->chapter_level < 0) fprintf(cf," -chapter-level -"); else fprintf(cf," -chapter-level %ld", ii->chapter_level); } fprintf(cf,"\n"); ii++; } ii = this->data.begin(); if (ii != this->data.end()) fprintf(cf,"\n"); } void thselector::select_db(class thdatabase * db) { thmbuffer mbf; char ** nms, * nobj = NULL, * nsrv = NULL; int nn = 0; //thsurvey * objsrv; thdataobject * objptr = NULL; bool to_cont = false, select_all = false, has_selected_survey = false; thselector_list::iterator ii = this->data.begin(); if (this->data.empty()) { thselector_item xitm; xitm.unselect = false; this->select_all(&xitm, db); return; } while (ii != this->data.end()) { if (ii->unselect && (ii == this->data.begin())) { thselector_item xitm; xitm.unselect = false; this->select_all(&xitm, db); has_selected_survey = true; } // let's separate name & survey to_cont = true; select_all = false; thsplit_strings(& mbf, ii->name, '@'); nms = mbf.get_buffer(); nn = mbf.get_size(); switch (nn) { case 1: nobj = *nms; nsrv = NULL; break; case 2: nobj = nms[0]; nsrv = nms[1]; break; default: thwarning(("%s [%d] -- invalid object specification", ii->src_name, ii->src_ln)) to_cont = false; } if (!to_cont) { ii++; continue; } if ((nsrv == NULL) && ((strlen(nobj) == 0) || (strcmp(nobj,"*") == 0))) { select_all = true; } if ((!select_all)) { try { objptr = db->get_object(thobjectname(nobj,nsrv),NULL); } catch(...) { objptr = NULL; } if (objptr == NULL) { thwarning(("%s [%d] -- object not found -- \"%s\"", ii->src_name, ii->src_ln, nobj)) to_cont = false; } } if (!to_cont) { ii++; continue; } if (select_all) { this->select_all(&(*ii), db); has_selected_survey = true; } else { ii->optr = objptr; switch (objptr->get_class_id()) { case TT_SURVEY_CMD: this->select_survey(&(*ii), (thsurvey *) objptr); has_selected_survey = true; break; default: this->select_object(&(*ii), objptr); break; } } ii++; } // cycle of select and unselect options if (!has_selected_survey) { thselector_item xitm; xitm.unselect = false; this->select_all(&xitm, db); } } void thselector::select_object(thselector_item * pitm, class thdataobject * optr) { if (pitm->unselect) { optr->selected = false; optr->selected_number = pitm->number; } else { optr->selected = true; optr->selected_number = pitm->number; } } void thselector::select_all(thselector_item * pitm, class thdatabase * db) { thdb_object_list_type::iterator ii = db->object_list.begin(); while (ii != db->object_list.end()) { switch((*ii)->get_class_id()) { case TT_SURVEY_CMD: this->select_object(pitm,*ii); default: break; } ii++; } } void thselector::select_survey(thselector_item * pitm, class thsurvey * srv) { // oznaci vsety pod nim thdataobject * cptr = srv->get_first_survey_object(); while (cptr != NULL) { if ((cptr->get_class_id() == TT_SURVEY_CMD) && pitm->recursive) this->select_survey(pitm, (thsurvey *) cptr); //else { // this->select_object(pitm, cptr); //} cptr = cptr->nsptr; } // oznaci samotne survey this->select_object(pitm, (thdataobject *) srv); } therion/thselector.h0000644000076400010400000000502410721175032015611 0ustar userAdministrators/** * @file thselector.h * Database selector class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thselector_h #define thselector_h #include #include /** * Selection. */ class thselector_item { public: const char * name, *src_name; unsigned long src_ln; unsigned long number; bool unselect, recursive; long map_level, chapter_level; class thdataobject * optr; thselector_item () : name(""), src_name(""), src_ln(0), unselect(false), recursive(true), map_level(0), chapter_level(0), optr(NULL) {} }; typedef std::list thselector_list; /** * Selector class. */ class thselector { public: thselector(); ///< Default constructor. class thconfig * cfgptr; ///< Current config pointer. thselector_list data; ///< Selection data. void select_object(thselector_item * pitm, class thdataobject * optr); ///< Select object. void select_all(thselector_item * pitm, class thdatabase * db); ///< Select all objects in db. void select_survey(thselector_item * pitm, class thsurvey * srv); ///< Select survey. unsigned long number; void assign_config(class thconfig * cptr); ///< Assign configuration object. /** * Parse select option from config file. */ void parse_selection (bool usid, int nargs, char ** args); /** * Dump selection into file. */ void dump_selection (FILE * cf); /** * Dump database selection options into file. */ void dump_selection_db (FILE * cf, class thdatabase * db); /** * Select objects in database. */ void select_db(class thdatabase * db); }; #endif therion/thsketch.cxx0000644000076400010400000000333510625655142015640 0ustar userAdministrators/** * @file thsketch.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "therion.h" #include "thsketch.h" #include "thscrap.h" #include "thwarpp.h" #include "thconfig.h" thsketch::thsketch() { this->m_x = 0.0; this->m_y = 0.0; this->m_warp = NULL; } thsketch::~thsketch() { if (this->m_warp != NULL) this->m_warp->self_delete(); } thpic * thsketch::morph(double scale) { if (this->m_warp == NULL) { switch (thcfg.sketch_warp) { case THSKETCH_WARP_LINEAR: this->m_warp = new thwarplin; break; case THSKETCH_WARP_IDPOINT: this->m_warp = new thwarpinvdist; break; case THSKETCH_WARP_IDLINE: //this->m_warp = new thwarpinvdistln; this->m_warp = new thwarpfastinvdistln; break; default: this->m_warp = new thwarpp; } } return this->m_warp->morph(this, scale); } therion/thsketch.h0000644000076400010400000000306610625655142015266 0ustar userAdministrators/** * @file thsketch.h * sketch module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thsketch_h #define thsketch_h #include #include #include "thpic.h" enum { THSKETCH_WARP_UNKNOWN, THSKETCH_WARP_LINEAR, THSKETCH_WARP_IDPOINT, THSKETCH_WARP_IDLINE, THSKETCH_WARP_PLAQUETTE, }; /** * Sketch class. */ struct thsketch { thpic m_pic; ///< Picture. double m_x; //!< sketch points X offset double m_y; //!< sketch points Y offset class thwarp * m_warp; ///< Warping class. class thscrap * m_scrap; ///< Sketch scrap. thsketch(); ~thsketch(); thpic * morph(double scale); }; typedef std::list thsketch_list; #endif therion/thsurface.cxx0000644000076400010400000003637010721450410016000 0ustar userAdministrators/** * @file thsurface.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thsurface.h" #include "thexception.h" #include "thchenc.h" #include "thmbuffer.h" #include "thtflength.h" #include "thdatabase.h" #include "thcsdata.h" #include #ifdef THMSVC #define hypot _hypot #endif #include "thdatareader.h" #include "thparse.h" #include "thdb1d.h" #include "thinfnan.h" #ifdef THMSVC #include #define getcwd _getcwd #endif enum { TT_SURFACE_GFLIP_UNKNOWN, TT_SURFACE_GFLIP_VERTICAL, TT_SURFACE_GFLIP_HORIZONTAL, TT_SURFACE_GFLIP_NONE, }; static const thstok thtt_surface_gflip[] = { {"horiz", TT_SURFACE_GFLIP_HORIZONTAL}, {"horizontal", TT_SURFACE_GFLIP_HORIZONTAL}, {"none", TT_SURFACE_GFLIP_NONE}, {"vert", TT_SURFACE_GFLIP_VERTICAL}, {"vertical", TT_SURFACE_GFLIP_VERTICAL}, {NULL, TT_SURFACE_GFLIP_UNKNOWN}, }; thsurface::thsurface() { // replace this by setting real properties initialization this->pict_name = NULL; this->pict_type = TT_IMG_TYPE_UNKNOWN; this->pict_stations = false; this->pict_X1 = thnan; this->pict_Y1 = thnan; this->pict_X2 = thnan; this->pict_Y2 = thnan; this->pict_x1 = thnan; this->pict_y1 = thnan; this->pict_x2 = thnan; this->pict_y2 = thnan; this->grid_ox = thnan; this->grid_oy = thnan; this->grid_dx = thnan; this->grid_dy = thnan; this->grid_nx = 0; this->grid_ny = 0; this->grid_size = 0; this->grid_counter = 0; this->calib_x = thnan; this->calib_y = thnan; this->calib_xx = thnan; this->calib_xy = thnan; this->calib_yx = thnan; this->calib_yy = thnan; this->calib_r = thnan; this->calib_s = thnan; this->grid = NULL; this->grid_flip = TT_SURFACE_GFLIP_NONE; this->s1.clear(); this->s2.clear(); this->d3dok = false; } thsurface::~thsurface() { if (this->grid != NULL) delete [] this->grid; } int thsurface::get_class_id() { return TT_SURFACE_CMD; } bool thsurface::is(int class_id) { if (class_id == TT_SURFACE_CMD) return true; else return thdataobject::is(class_id); } int thsurface::get_cmd_nargs() { // replace by real number of arguments return 0; } const char * thsurface::get_cmd_end() { // insert endcommand if multiline command return "endsurface"; } const char * thsurface::get_cmd_name() { // insert command name here return "surface"; } thcmd_option_desc thsurface::get_cmd_option_desc(const char * opts) { int id = thmatch_token(opts, thtt_surface_opt); if (id == TT_SURFACE_UNKNOWN) return thdataobject::get_cmd_option_desc(opts); else switch(id) { case TT_SURFACE_PICTURE: return thcmd_option_desc(id,2); break; case TT_SURFACE_GRID: return thcmd_option_desc(id,6); break; default: return thcmd_option_desc(id); } } void thsurface::set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline) { switch (cod.id) { // replace this by real properties setting case 0: this->parse_grid(args[0]); break; case TT_SURFACE_GRID: this->parse_grid_setup(args); break; case TT_SURFACE_GRID_UNITS: this->grid_units.parse_units(args[0]); break; case TT_SURFACE_GRID_FLIP: if (this->grid != NULL) ththrow(("grid-flip specification after grid data not allowed")); this->grid_flip = thmatch_token(args[0], thtt_surface_gflip); if (this->grid_flip == TT_SURFACE_GFLIP_UNKNOWN) ththrow(("unknown surface flip mode -- %s", args[0])) break; case TT_SURFACE_PICTURE: this->parse_picture(args); break; // if not found, try to set fathers properties default: thdataobject::set(cod, args, argenc, indataline); } } void thsurface::self_delete() { delete this; } void thsurface::self_print_properties(FILE * outf) { thdataobject::self_print_properties(outf); fprintf(outf,"thsurface:\n"); if (this->pict_name != NULL) { fprintf(outf,"\tpict_name:\t%s\n", this->pict_name); } } void thsurface::parse_picture(char ** args) { thbuffer pict_path; pict_path.guarantee(1024); getcwd(pict_path.get_buffer(),1024); long i; if (strlen(args[0]) == 0) ththrow(("picture name not specified")) pict_path += "/"; pict_path += thdb.csrc.name; char * pp = pict_path.get_buffer(); for(i = (long)strlen(pp); i >= 0; i--) { if ((pp[i] == '/') || (pp[i] == '\\')) { break; } else pp[i] = 0; } if (strlen(pp) == 0) pict_path = "/"; pict_path += args[0]; pp = pict_path.get_buffer(); for(i = (long)strlen(pp); i >= 0; i--) { if (pp[i] == '\\') pp[i] = '/'; } this->pict_name = thdb.strstore(pp); // thprintf("\npict name: %s\n", this->pict_name); this->pict_dpi = 300.0; this->pict_width = 1000; this->pict_height = 1000; // potom obrazok skontroluje, vytiahne jeho rozmery a DPI try { thparse_image(this->pict_name, this->pict_width, this->pict_height, this->pict_dpi, this->pict_type); } catch (...) { this->pict_name = NULL; threwarning(("%s [%d] -- error reading bitmap", thdbreader.get_cinf()->get_cif_name(), thdbreader.get_cinf()->get_cif_line_number())); } // potom parsne kalibraciu thmbuffer calib; thsplit_words(&calib, args[1]); thtflength ltr; int sv; long ncals = calib.get_size(); char ** cals = calib.get_buffer(); switch (ncals) { case 9: ltr.parse_units(cals[8]); ncals--; case 8: // parsne jednotlive cisla #define surfpiccaldbl(XXX,YYY) \ thparse_double(sv, this->XXX, cals[YYY]); \ if (sv != TT_SV_NUMBER) \ ththrow(("number expected -- %s", cals[YYY])) surfpiccaldbl(pict_X1,0); surfpiccaldbl(pict_Y1,1); this->convert_cs(cals[2], cals[3], this->pict_x1, this->pict_y1); if (this->cs == TTCS_LOCAL) { this->pict_x1 = ltr.transform(this->pict_x1); this->pict_y1 = ltr.transform(this->pict_y1); } surfpiccaldbl(pict_X2,4); surfpiccaldbl(pict_Y2,5); this->convert_cs(cals[6], cals[7], this->pict_x2, this->pict_y2); if (this->cs == TTCS_LOCAL) { this->pict_x2 = ltr.transform(this->pict_x2); this->pict_y2 = ltr.transform(this->pict_y2); } if (((this->pict_X1 == this->pict_X2) && (this->pict_Y1 == this->pict_Y2)) || ((this->pict_x1 == this->pict_x2) && (this->pict_y1 == this->pict_y2))) { ththrow(("duplicate points in picture calibration")); } break; case 6: surfpiccaldbl(pict_X1,0); surfpiccaldbl(pict_Y1,1); surfpiccaldbl(pict_X2,3); surfpiccaldbl(pict_Y2,4); thparse_objectname(this->s1, &(thdb.buff_stations), cals[2]); thparse_objectname(this->s2, &(thdb.buff_stations), cals[5]); this->ssurvey = thdb.get_current_survey(); if ((this->pict_X1 == this->pict_X2) && (this->pict_Y1 == this->pict_Y2)) { ththrow(("duplicate points in picture calibration")); } break; default: ththrow(("invalid number of picture calibration arguments -- %d", ncals)) } } void thsurface::calibrate() { // spocita origin, scale (pri 300 dpi) a rotaciu double olen, nlen, scale, ang, tang; olen = hypot(this->pict_X2 - this->pict_X1, this->pict_Y2 - this->pict_Y1); nlen = hypot(this->pict_x2 - this->pict_x1, this->pict_y2 - this->pict_y1); ang = atan2(this->pict_Y2 - this->pict_Y1, this->pict_X2 - this->pict_X1); tang = atan2(this->pict_y2 - this->pict_y1, this->pict_x2 - this->pict_x1); tang -= ang; this->calib_xx = cos(tang); this->calib_xy = -sin(tang); this->calib_yx = sin(tang); this->calib_yy = cos(tang); scale = nlen / olen; this->calib_s = scale; this->calib_r = - tang / 3.14159265358 * 180.0; this->calib_xx *= scale; this->calib_yy *= scale; this->calib_xy *= scale; this->calib_yx *= scale; this->calib_x = this->pict_x1 - this->calib_xx * pict_X1 - this->calib_xy * pict_Y1; this->calib_y = this->pict_y1 - this->calib_yx * pict_X1 - this->calib_yy * pict_Y1; } void thsurface::check_stations() { if (!this->s1.is_empty()) { thdb1ds * ds1, * ds2; // najde stations, error ak nie this->s1.id = thdb.db1d.get_station_id(this->s1, this->ssurvey); if (this->s1.id == 0) { this->throw_source(); if (this->s1.survey == NULL) threthrow2(("station doesn't exist -- %s", this->s1.name)) else threthrow2(("station doesn't exist -- %s@%s", this->s1.name, this->s1.survey)) } this->s2.id = thdb.db1d.get_station_id(this->s2, this->ssurvey); if (this->s2.id == 0) { this->throw_source(); if (this->s2.survey == NULL) threthrow2(("station doesn't exist -- %s", this->s2.name)) else threthrow2(("station doesn't exist -- %s@%s", this->s2.name, this->s2.survey)) } // priradi si x a y a skontroluje ci su roozne ds1 = &(thdb.db1d.station_vec[this->s1.id - 1]); ds2 = &(thdb.db1d.station_vec[this->s2.id - 1]); this->pict_x1 = ds1->x; this->pict_y1 = ds1->y; this->pict_x2 = ds2->x; this->pict_y2 = ds2->y; if ((this->pict_x1 == this->pict_x2) && (this->pict_y1 == this->pict_y2)) { this->throw_source(); threthrow2(("duplicate points in picture calibration")); } } } void thsurface::parse_grid_setup(char ** args) { if (this->grid != NULL) ththrow(("grid specification after grid data not allowed")); // nacitame vsetky premenne ktore treba double dblv; int sv; #define parsedbl(XXX,YYY) \ thparse_double(sv, dblv, args[YYY]); \ if (sv != TT_SV_NUMBER) \ ththrow(("number expected -- %s", args[YYY])) \ XXX = this->grid_units.transform(dblv); #define parsenum(XXX,YYY) \ thparse_double(sv, dblv, args[YYY]); \ if (sv != TT_SV_NUMBER) \ ththrow(("number expected -- %s", args[YYY])) \ if (dblv <= 0) \ ththrow(("positive number expected -- %s", args[YYY])) \ if (dblv != double(long(dblv))) \ ththrow(("integer expected -- %s", args[YYY])) \ XXX = long(dblv); this->convert_cs(args[0], args[1], this->grid_ox, this->grid_oy); if (this->cs == TTCS_LOCAL) { this->grid_ox = this->grid_units.transform(this->grid_ox); this->grid_oy = this->grid_units.transform(this->grid_oy); } parsedbl(this->grid_dx,2); if (this->grid_dx == 0.0) ththrow(("non-zero number expected -- %s", args[2])); parsedbl(this->grid_dy,3); if (this->grid_dy == 0.0) ththrow(("non-zero number expected -- %s", args[3])); parsenum(this->grid_nx,4); if (this->grid_nx < 2) ththrow(("number > 1 expected -- %s", args[4])); parsenum(this->grid_ny,5); if (this->grid_ny < 2) ththrow(("number > 1 expected -- %s", args[5])); } void thsurface::parse_grid(char * spec) { if (this->grid_nx == 0) ththrow(("grid dimensions not specified")); if (this->grid == NULL) { this->grid_counter = 0; this->grid_size = this->grid_nx * this->grid_ny; this->grid = new double [this->grid_size]; } // rozdelime na argumenty thsplit_args(&thdb.mbuff_tmp, spec); // kazdy parsneme ako cislo a zapiseme do pola long i, ni = thdb.mbuff_tmp.get_size(); long x, y; int sv; double alt; char ** heights = thdb.mbuff_tmp.get_buffer(); for(i = 0; i < ni; i++) { thparse_double(sv, alt, heights[i]); if (sv != TT_SV_NUMBER) ththrow(("number expected -- %s", heights[i])) if (this->grid_counter == this->grid_size) ththrow(("too many grid data")) x = this->grid_counter % this->grid_nx; y = this->grid_ny - (this->grid_counter / this->grid_nx) - 1; switch (this->grid_flip) { case TT_SURFACE_GFLIP_VERTICAL: y = this->grid_ny - y - 1; break; case TT_SURFACE_GFLIP_HORIZONTAL: x = this->grid_nx - x - 1; break; } this->grid[y * this->grid_nx + x] = this->grid_units.transform(alt); this->grid_counter++; } } void thsurface::start_insert() { if (this->grid_counter < this->grid_size) ththrow(("missing grid data")) } thdb3ddata * thsurface::get_3d() { if (this->grid_size == 0) return NULL; if (this->d3dok) return &(this->d3d); // vytvorime 3d data long i, j; double nx, ny, nz, nl, nt; thdb3dvx ** surfvx = new thdb3dvx* [this->grid_size], * pvx, * cvx; #define grd(I, J) (this->grid_nx * (J) + (I)) for(i = 0; i < this->grid_nx; i++) for(j = 0; j < this->grid_ny; j++) surfvx[grd(i,j)] = this->d3d.insert_vertex( this->grid_ox + i * this->grid_dx, this->grid_oy + j * this->grid_dy, this->grid[grd(i,j)] ); // zratame normaly for(i = 0; i < this->grid_nx; i++) for(j = 0; j < this->grid_ny; j++) { // TODO - vlozit vsetky prilahle if (i > 0) { pvx = surfvx[grd(i-1,j)]; cvx = surfvx[grd(i,j)]; nx = pvx->x - cvx->x; ny = pvx->y - cvx->y; nz = pvx->z - cvx->z; nl = hypot(nz, hypot(nx, ny)); nx /= nl; ny /= nl; nz /= nl; nt = nx; nx = nz; nz = -nt; cvx->insert_normal(nx, ny, nz); } if (i < (this->grid_nx - 1)) { pvx = surfvx[grd(i+1,j)]; cvx = surfvx[grd(i,j)]; nx = - pvx->x + cvx->x; ny = - pvx->y + cvx->y; nz = - pvx->z + cvx->z; nl = hypot(nz, hypot(nx, ny)); nx /= nl; ny /= nl; nz /= nl; nt = nx; nx = nz; nz = -nt; cvx->insert_normal(nx, ny, nz); } if (j > 0) { pvx = surfvx[grd(i,j-1)]; cvx = surfvx[grd(i,j)]; nx = pvx->x - cvx->x; ny = pvx->y - cvx->y; nz = pvx->z - cvx->z; nl = hypot(nz, hypot(nx, ny)); nx /= nl; ny /= nl; nz /= nl; nt = ny; ny = nz; nz = -nt; cvx->insert_normal(nx, ny, nz); } if (j < (this->grid_ny - 1)) { pvx = surfvx[grd(i,j+1)]; cvx = surfvx[grd(i,j)]; nx = - pvx->x + cvx->x; ny = - pvx->y + cvx->y; nz = - pvx->z + cvx->z; nl = hypot(nz, hypot(nx, ny)); nx /= nl; ny /= nl; nz /= nl; nt = ny; ny = nz; nz = -nt; cvx->insert_normal(nx, ny, nz); } } // povklada trojuholniky thdb3dfc * fc; for(i = 0; i < (this->grid_nx - 1); i++) { fc = this->d3d.insert_face(THDB3DFC_TRIANGLE_STRIP); for(j = 0; j < this->grid_ny; j++) { fc->insert_vertex(surfvx[grd(i,j)]); fc->insert_vertex(surfvx[grd(i+1,j)]); } } delete [] surfvx; this->d3dok = true; this->d3d.postprocess(); return &(this->d3d); } therion/thsurface.h0000644000076400010400000000732610721450216015430 0ustar userAdministrators/** * @file thsurface.h * surface module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thsurface_h #define thsurface_h #include "thdb3d.h" #include "thdataobject.h" #include "thobjectname.h" #include "thtflength.h" /** * surface command options tokens. */ enum { TT_SURFACE_UNKNOWN = 2000, TT_SURFACE_PICTURE = 2001, TT_SURFACE_GRID = 2002, TT_SURFACE_GRID_UNITS = 2003, TT_SURFACE_GRID_FLIP = 2004, }; /** * surface command options parsing table. */ static const thstok thtt_surface_opt[] = { {"bitmap", TT_SURFACE_PICTURE}, {"grid", TT_SURFACE_GRID}, {"grid-flip", TT_SURFACE_GRID_FLIP}, {"grid-units", TT_SURFACE_GRID_UNITS}, {NULL, TT_SURFACE_UNKNOWN}, }; /** * surface class. */ class thsurface : public thdataobject { public: // insert here real properties const char * pict_name; bool pict_stations; thobjectname s1, s2; class thsurvey * ssurvey; double pict_X1, pict_Y1, pict_X2, pict_Y2, pict_x1, pict_y1, pict_x2, pict_y2, grid_ox, grid_oy, grid_dx, grid_dy, calib_x, calib_y, calib_s, calib_r, calib_xx, calib_yy, calib_xy, calib_yx, pict_dpi, pict_height, pict_width; long grid_nx, grid_ny, grid_counter, grid_size; int grid_flip, pict_type; thtflength grid_units; double * grid; thdb3ddata d3d; bool d3dok; void parse_grid(char * spec); void parse_grid_setup(char ** args); void parse_picture(char ** args); void calibrate(); /** * Standard constructor. */ thsurface(); /** * Standard destructor. */ virtual ~thsurface(); /** * Return class identifier. */ virtual int get_class_id(); /** * Return class name. */ virtual const char * get_class_name() {return "thsurface";}; /** * Return true, if son of given class. */ virtual bool is(int class_id); /** * Return number of command arguments. */ virtual int get_cmd_nargs(); /** * Return command name. */ virtual const char * get_cmd_name(); /** * Return command end option. */ virtual const char * get_cmd_end(); /** * Return option description. */ virtual thcmd_option_desc get_cmd_option_desc(const char * opts); /** * Set command option. * * @param cod Command option description. * @param args Option arguments arry. * @param argenc Arguments encoding. */ virtual void set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline); /** * Delete this object. * * @warn Always use this methos instead of delete function. */ virtual void self_delete(); /** * Print object properties. */ virtual void self_print_properties(FILE * outf); /** * check stations. */ void check_stations(); virtual void start_insert(); thdb3ddata * get_3d(); }; #endif therion/thsurvey.cxx0000644000076400010400000001726510751741532015722 0ustar userAdministrators/** * @file thsurvey.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thsurvey.h" #include "thexception.h" #include "thchenc.h" #include "thdate.h" #include "thtfangle.h" #include "thinfnan.h" #include "thdata.h" thsurvey::thsurvey() { this->full_name = ""; this->reverse_full_name = this->full_name; this->foptr = NULL; this->loptr = NULL; this->decdef = false; this->decuds = thnan; this->num1 = 0; this->level = 0; this->person_renames.clear(); this->entrance.clear(); this->data = NULL; this->privatens = true; this->surveyns = NULL; } thsurvey * thsurvey::get_nss() { if (this->surveyns == NULL) { this->surveyns = this; if (!this->privatens) { while ((!this->surveyns->privatens) && (this->surveyns->fsptr != NULL)) { this->surveyns = this->surveyns->fsptr; } } } return this->surveyns; } thsurvey::~thsurvey() { } int thsurvey::get_class_id() { return TT_SURVEY_CMD; } bool thsurvey::is(int class_id) { if (class_id == TT_SURVEY_CMD) return true; else return thdataobject::is(class_id); } int thsurvey::get_cmd_nargs() { return 1; } const char * thsurvey::get_cmd_end() { // insert endcommand if multiline command return NULL; } const char * thsurvey::get_cmd_name() { // insert endcommand if multiline command return "survey"; } thcmd_option_desc thsurvey::get_cmd_option_desc(const char * opts) { int id = thmatch_token(opts, thtt_survey_opt); if (id == TT_SURVEY_UNKNOWN) return thdataobject::get_cmd_option_desc(opts); else switch (id) { case TT_SURVEY_PERSON_RENAME: return thcmd_option_desc(id,2); default: return thcmd_option_desc(id); } } enum { TT_SNS_EXPORT, TT_SNS_PRIVATE, TT_SNS_UNKNOWN, }; static const thstok thtt_sns[] = { {"off",TT_SNS_EXPORT}, {"on",TT_SNS_PRIVATE}, {NULL, TT_SNS_UNKNOWN}, }; void thsurvey::set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline) { thperson tmpp1, tmpp2; if (cod.id == 1) cod.id = TT_DATAOBJECT_NAME; switch (cod.id) { case TT_SURVEY_NAMESPACE: switch (thmatch_token(*args, thtt_sns)) { case TT_SNS_PRIVATE: this->privatens = false; break; case TT_SNS_EXPORT: this->privatens = false; break; default: ththrow(("invalid -namespace switch -- %s", *args)) } break; case TT_SURVEY_DECLINATION: this->parse_declination(*args); break; case TT_SURVEY_PERSON_RENAME: thencode(&(this->db->buff_enc), args[0], argenc); tmpp1.parse(this->db, this->db->buff_enc.get_buffer()); thencode(&(this->db->buff_enc), args[1], argenc); tmpp2.parse(this->db, this->db->buff_enc.get_buffer()); this->person_renames[tmpp1] = tmpp2; break; case TT_SURVEY_ENTRANCE: thparse_objectname(this->entrance, & this->db->buff_stations, *args); break; case TT_DATAOBJECT_NAME: if (th_is_keyword(*args)) this->name = this->db->strstore(*args); else ththrow(("invalid keyword -- %s", *args)); break; default: thdataobject::set(cod, args, argenc, indataline); } } void thsurvey::self_delete() { delete this; } void thsurvey::self_print_properties(FILE * outf) { size_t nval, idx; thtfpwfxy * vals; thdataobject::self_print_properties(outf); fprintf(outf,"thsurvey:\n"); fprintf(outf,"\tfull name: \"%s\" (\"%s\")\n", this->full_name, this->reverse_full_name.get_buffer()); if (this->decdef) { fprintf(outf,"\tdeclination:\n"); nval = this->declin.get_size(); vals = this->declin.get_values(); for(idx = 0; idx < nval; idx++) { fprintf(outf,"\t\t%0.2f -> %8.5f deg\n",vals[idx].x,vals[idx].y); } } else fprintf(outf,"\tdeclination: none\n"); fprintf(outf,"\tlength: %g\n",this->stat.length); } int thsurvey::get_context() { return (THCTX_SURVEY | THCTX_NONE); } const char * thsurvey::get_full_name() { return this->full_name; } void thsurvey::parse_declination(char * str) { // splitne input string thtfangle du; thdate dd; double decl, //year, dumdt; double * all_data = NULL; double data2 [2]; int nid, idx, dateidx, typedt; thsplit_args(& this->db->mbuff_tmp, str); long nargs = this->db->mbuff_tmp.get_size(); char ** args = this->db->mbuff_tmp.get_buffer(); // ak 1 4 6 ... error if ((nargs == 1) || (((nargs % 2) == 0) && (nargs > 3))) ththrow(("invalid declination specification -- \"%s\"",str)) // ak 0 tak resetuje a nastavi na 0 if (nargs == 0) { this->decdef = false; return; } // ak nie, tak parsne jednotky nargs--; du.parse_units(args[nargs]); // ak 2 tak nastavi pausalne s rokom 0 if (nargs == 1) { thparse_double(nid, decl, args[0]); if (nid != TT_SV_NUMBER) ththrow(("invalid declination -- %s", args[0])) decl = du.transform(decl); data2[0] = 0.0; data2[1] = decl; this->decuds = decl; this->declin.set(1,data2); this->decdef = true; return; } all_data = new double [nargs]; nargs = nargs/2; dateidx = 0; for(idx = 0; idx < nargs; idx++) { // let's try if undated declination specification thparse_double(typedt, dumdt, args[2 * idx]); if (typedt == TT_SV_NAN) { thparse_double(nid, decl, args[2 * idx + 1]); if (nid != TT_SV_NUMBER) { delete [] all_data; ththrow(("invalid declination -- %s", args[2 * idx + 1])) } this->decuds = decl; } // if not, try dated declination specification else { try { dd.parse(args[2 * idx]); } catch (...) { delete [] all_data; threthrow(("invalid declination specification")) } all_data[2 * dateidx] = dd.get_start_year(); // parse declination thparse_double(nid, decl, args[2 * idx + 1]); if (nid != TT_SV_NUMBER) { delete [] all_data; ththrow(("invalid declination -- %s", args[2 * idx + 1])) } all_data[2 * dateidx + 1] = du.transform(decl); dateidx++; } } // set declination if (dateidx == 0) { data2[0] = 0.0; data2[1] = this->decuds; this->declin.set(1,data2); } else this->declin.set(dateidx,all_data); this->decdef = true; delete [] all_data; } void thsurvey::full_name_reverse() { size_t fnln = strlen(this->full_name), i1, i2, si; //, ei; const char * c1, *c3; char * c2; c1 = this->full_name; si = 0; bool has_dot = false; for(i1 = 0; i1 <= fnln; i1++, c1++) { if ((*c1 == '.') || ((i1 == fnln) && has_dot)) { has_dot = true; c3 = this->full_name + si; c2 = this->reverse_full_name.get_buffer() + fnln - i1; if (i1 < fnln) { c2--; *c2 = '.'; c2++; } for(i2 = si; i2 < i1; i2++, c2++, c3++) *c2 = *c3; si = i1 + 1; } } } therion/thsurvey.h0000644000076400010400000001310710776207044015340 0ustar userAdministrators/** * @file thsurvey.h * Survey module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thsurvey_h #define thsurvey_h #include "thdataobject.h" #include "thtfpwf.h" #include "thperson.h" #include /** * survey command options tokens. */ enum { TT_SURVEY_UNKNOWN = 2000, TT_SURVEY_DECLINATION = 2001, TT_SURVEY_PERSON_RENAME = 2002, TT_SURVEY_NAMESPACE = 2003, TT_SURVEY_ENTRANCE = 2004, }; /** * survey command options parsing table. */ static const thstok thtt_survey_opt[] = { {"declination", TT_SURVEY_DECLINATION}, {"entrance", TT_SURVEY_ENTRANCE}, {"namespace", TT_SURVEY_NAMESPACE}, {"person-rename", TT_SURVEY_PERSON_RENAME}, {NULL, TT_SURVEY_UNKNOWN}, }; typedef std::map thsurveyp2pmap; /** * Survey statistics class. */ class thsurveystat { public: double length, length_duplicate, length_splay, length_surface, length_approx, length_explored; class thdb1ds * station_top, * station_bottom, * station_east, * station_west, * station_north, * station_south; int station_state; ///< 0 - undefined, 1 - surface, 2 - underground unsigned long num_stations, num_shots, num_entrances; thsurveystat() : length(0.0), length_duplicate(0.0), length_splay(0.0), length_surface(0.0), length_approx(0.0), length_explored(0.0), station_top(NULL), station_bottom(NULL), station_east(NULL), station_west(NULL), station_north(NULL), station_south(NULL), station_state(0), num_stations(0), num_shots(0), num_entrances(0) {} }; /** * Survey class. * * Main data structure object. */ class thsurvey : public thdataobject { public: friend class thdatabase; friend class thdataobject; friend class thdb1d; const char * full_name; ///< Full survey name. thbuffer reverse_full_name; ///< Reverse full name - for sorting. thdataobject * foptr, ///< First object in survey. * loptr; ///< Last object in survey. unsigned level; class thdata * data; void parse_declination(char * str); void full_name_reverse(); bool decdef; ///< Check whether declination is defined. thtfpwf declin; ///< Return the declination pwf function. double decuds; ///< Declination for undated surveys. long num1; ///< Number of something. thsurveystat stat; ///< Survey statistics. thsurveyp2pmap person_renames; thobjectname entrance; ///< Entrance station name. bool privatens; thsurvey * surveyns; public: /** * Standard constructor. */ thsurvey(); /** * Standard destructor. */ virtual ~thsurvey(); /** * Return class identifier. */ virtual int get_class_id(); /** * Return true, if son of given class. */ virtual bool is(int class_id); /** * Return number of command arguments. */ virtual int get_cmd_nargs(); /** * Return command end option. */ virtual const char * get_cmd_end(); /** * Return command name. */ virtual const char * get_cmd_name(); /** * Return option description. */ virtual thcmd_option_desc get_cmd_option_desc(const char * opts); /** * Set command option. * * @param cod Command option description. * @param args Option arguments arry. * @param argenc Arguments encoding. */ virtual void set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline); /** * Delete this object. * * @warn Always use this methos instead of delete function. */ virtual void self_delete(); /** * Get context for object. */ virtual int get_context(); /** * Return class name. */ virtual const char * get_class_name() {return "thsurvey";}; /** * Return full survey name. */ virtual const char * get_full_name(); /** * Return reverse full survey name. */ virtual const char * get_reverse_full_name() {return this->reverse_full_name;} /** * Print object contents into file. */ virtual void self_print_properties(FILE * outf); /** * Return true, if declination was specified. */ bool get_decdef() { return this->decdef; } /** * Return the declination pwf function. */ thtfpwf * get_declin() { return &(this->declin); } /** * Return true, if declination was specified. */ double get_decuds() { return this->decuds; } /** * Get first object in survey. */ thdataobject * get_first_survey_object() {return this->foptr;} /** * Get last object in survey. */ thdataobject * get_last_survey_object() {return this->loptr;} /** * Return namespace survey. */ thsurvey * get_nss(); }; #endif therion/thsvg.cxx0000644000076400010400000006271711371347522015166 0ustar userAdministrators/** * @file thconvert.cxx */ /* Copyright (C) 2005 Martin Budaj * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include #include #include #include //#include #include #include //#include #include #include #include #include #include #include #include "thepsparse.h" #include "thpdfdbg.h" #include "thpdfdata.h" //#include "thtexfonts.h" #include "therion.h" #include "thversion.h" #include "thlegenddata.h" using namespace std; //////////////////////////////////////////////////////////////////////////////// static const char base64_tab[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; void base64_encode(const char * fname, ofstream & fout) { int llength = 0; char in_buffer[3]; unsigned char out_buffer[4]; ifstream fin(fname, ios::binary); if (!fin) therror((((string)"Can't read file "+fname+"!\n").c_str())); do { for (int i = 0; i < 3; i++) in_buffer[i] = '\x0'; for (int i = 0; i < 4; i++) out_buffer[i] = '='; fin.read(in_buffer, 3); unsigned long value = ((unsigned char)in_buffer[0]) << 16 | ((unsigned char)in_buffer[1]) << 8 | ((unsigned char)in_buffer[2]) << 0; out_buffer[0] = base64_tab[(value >> 18) & 0x3F]; out_buffer[1] = base64_tab[(value >> 12) & 0x3F]; if (fin.gcount() > 1) out_buffer[2] = base64_tab[(value >> 6) & 0x3F]; if (fin.gcount() > 2) out_buffer[3] = base64_tab[(value >> 0) & 0x3F]; if (llength >= 76) { fout << endl; llength = 0; } fout << out_buffer[0] << out_buffer[1] << out_buffer[2] << out_buffer[3]; llength += 4; } while (fin); fin.close(); } void find_dimensions(double & MINX,double & MINY,double & MAXX,double & MAXY) { double llx = 0, lly = 0, urx = 0, ury = 0; double a,b,w,h; MINX=DBL_MAX, MINY=DBL_MAX, MAXX=-DBL_MAX, MAXY=-DBL_MAX; for (list::iterator I = SCRAPLIST.begin(); I != SCRAPLIST.end(); I++) { llx = DBL_MAX; lly = DBL_MAX; urx = -DBL_MAX; ury = -DBL_MAX; if (I->F != "" && I->E == "" && I->G == "" && I->B == "" && I->X == "") { // clipped symbols shouldn't affect map size if (I->F1 < llx) llx = I->F1; if (I->F2 < lly) lly = I->F2; if (I->F3 > urx) urx = I->F3; if (I->F4 > ury) ury = I->F4; } if (I->E != "") { if (I->E1 < llx) llx = I->E1; if (I->E2 < lly) lly = I->E2; if (I->E3 > urx) urx = I->E3; if (I->E4 > ury) ury = I->E4; } if (I->G != "") { if (I->G1 < llx) llx = I->G1; if (I->G2 < lly) lly = I->G2; if (I->G3 > urx) urx = I->G3; if (I->G4 > ury) ury = I->G4; } if (I->B != "") { if (I->B1 < llx) llx = I->B1; if (I->B2 < lly) lly = I->B2; if (I->B3 > urx) urx = I->B3; if (I->B4 > ury) ury = I->B4; } if (I->I != "") { if (I->I1 < llx) llx = I->I1; if (I->I2 < lly) lly = I->I2; if (I->I3 > urx) urx = I->I3; if (I->I4 > ury) ury = I->I4; } if (I->X != "") { if (I->X1 < llx) llx = I->X1; if (I->X2 < lly) lly = I->X2; if (I->X3 > urx) urx = I->X3; if (I->X4 > ury) ury = I->X4; } for (list::iterator I_sk = I->SKETCHLIST.begin(); I_sk != I->SKETCHLIST.end(); I_sk++) { for (int i = 0; i<=1; i++) { for (int j = 0; j<=1; j++) { w = i * I_sk->width; h = j * I_sk->height; a = I_sk->xx*w + I_sk->xy*h + I_sk->dx; b = I_sk->yx*w + I_sk->yy*h + I_sk->dy; if (a < llx) llx = a; if (b < lly) lly = b; if (a > urx) urx = a; if (b > ury) ury = b; } } }; if (llx == DBL_MAX || lly == DBL_MAX || urx == -DBL_MAX || ury == -DBL_MAX) therror(("This can't happen -- no data for a scrap!")); map::iterator J = LAYERHASH.find(I->layer); assert(J != LAYERHASH.end()); map >::iterator K = (((*J).second).scraps).find(I->level); if (K == (((*J).second).scraps).end()) { set SCRP; (((*J).second).scraps).insert(make_pair(I->level,SCRP)); K = (((*J).second).scraps).find(I->level); } ((*K).second).insert(I->name); (((*J).second).allscraps).insert(I->name); if (((*J).second).Z == 0) { if (MINX > llx) MINX = llx; if (MINY > lly) MINY = lly; if (MAXX < urx) MAXX = urx; if (MAXY < ury) MAXY = ury; } } } void print_preview(int up,ofstream& F, string unique_prefix) { set used_layers; set used_scraps; if (up) { F << "" << endl; } else { F << "" << endl; } used_layers = (up ? MAP_PREVIEW_UP : MAP_PREVIEW_DOWN); for (set::iterator I=used_layers.begin(); I != used_layers.end(); I++) { map::iterator J = LAYERHASH.find(*I); assert (J != LAYERHASH.end()); used_scraps = J->second.allscraps; if (!used_scraps.empty()) { for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0) { if (up) { if (K->B != "" && K->sect == 0) { F << "B1 << "\" y=\"" << K->B2 << "\" xlink:href=\"#B_" << K->name << "_" << unique_prefix << "\" />" << endl; } } else { if (K->I != "" && K->sect == 0) { F << "I1 << "\" y=\"" << K->I2 << "\" xlink:href=\"#I_" << K->name << "_" << unique_prefix << "\" />" << endl; } } } } } } F << "" << endl; } void print_grid(ofstream& PAGEDEF, double LLX,double LLY,double URX,double URY, string unique_prefix) { if (LAYOUT.grid == 0) return; PAGEDEF << "" << endl; paired ll, ur, lr, ul, llrot, urrot, ulrot, lrrot, llnew, urnew, origin; ll.x = LLX; ll.y = LLY; ur.x = URX; ur.y = URY; lr.x = ur.x; lr.y = ll.y; ul.x = ll.x; ul.y = ur.y; origin.x = LAYOUT.hgridorigin; origin.y = LAYOUT.vgridorigin; //cout << endl << origin.x << " " << origin.y << endl; llrot = rotatedaround(ll,origin,-LAYOUT.gridrot); urrot = rotatedaround(ur,origin,-LAYOUT.gridrot); lrrot = rotatedaround(lr,origin,-LAYOUT.gridrot); ulrot = rotatedaround(ul,origin,-LAYOUT.gridrot); llnew.x = min(min(llrot.x, urrot.x), min(lrrot.x, ulrot.x)); llnew.y = min(min(llrot.y, urrot.y), min(lrrot.y, ulrot.y)); urnew.x = max(max(llrot.x, urrot.x), max(lrrot.x, ulrot.x)); urnew.y = max(max(llrot.y, urrot.y), max(lrrot.y, ulrot.y)); double grid_init_x = LAYOUT.hgridsize * floor ((llnew.x-origin.x)/LAYOUT.hgridsize) + origin.x; double grid_init_y = LAYOUT.vgridsize * floor ((llnew.y-origin.y)/LAYOUT.vgridsize) + origin.y; double G_real_init_x = LAYOUT.XO + LAYOUT.XS * floor ((llnew.x-origin.x)/LAYOUT.hgridsize); double G_real_init_y = LAYOUT.YO + LAYOUT.YS * floor ((llnew.y-origin.y)/LAYOUT.vgridsize); double cosr = cos(-LAYOUT.gridrot * 3.14159265 / 180); double sinr = sin(-LAYOUT.gridrot * 3.14159265 / 180); int row, col, elem; if (LAYOUT.proj == 0) { paired out,tmp; int ii,jj; double i, j; for (i = grid_init_x, ii=0; i < urnew.x + LAYOUT.hgridsize - 0.05; i += LAYOUT.hgridsize, ii++) { for (j = grid_init_y, jj=0; j < urnew.y + LAYOUT.vgridsize - 0.05; j += LAYOUT.vgridsize, jj++) { col = (i == grid_init_x ? 0 : (i >= urnew.x ? 2 : 1)); row = (j == grid_init_y ? 0 : (j >= urnew.y ? 2 : 1)); elem = col + 3*row; tmp.x = i+LAYOUT.gridcell[elem].x; tmp.y = j+LAYOUT.gridcell[elem].y; out = rotatedaround(tmp,origin,LAYOUT.gridrot); // out.x -= LLX; // out.y -= LLY; PAGEDEF << ""; PAGEDEF << ""; PAGEDEF << "" << endl; if (LAYOUT.grid_coord_freq==2 || (LAYOUT.grid_coord_freq==1 && elem!=4)) { tmp.x = i+ (col==2 ? -2 : 2); tmp.y = j+ (row==2 ? -9 : 2); out = rotatedaround(tmp,origin,LAYOUT.gridrot); PAGEDEF << "(" << setprecision(0) << G_real_init_x+ii*LAYOUT.XS << "," << G_real_init_y+jj*LAYOUT.YS << setprecision(3) << ")" << endl; } /* PAGEDEF << ""; PAGEDEF << i/72*2.54/100*200 << " " << j/72*2.54/100*200; PAGEDEF << "" << endl;*/ } } } else { grid_init_x = LLX; int jj; double i, j; for (j = grid_init_y, jj=0; j < urnew.y + LAYOUT.vgridsize - 0.05; j += LAYOUT.vgridsize, jj++) { for (i = grid_init_x; i < urnew.x + LAYOUT.hgridsize - 0.05; i += LAYOUT.hgridsize) { col = (i == grid_init_x ? 0 : (i >= urnew.x ? 2 : 1)); row = (j == grid_init_y ? 0 : (j >= urnew.y ? 2 : 1)); elem = col + 3*row; PAGEDEF << "" << endl; if (col == 0 && LAYOUT.grid_coord_freq > 0) { PAGEDEF << "" << setprecision(0) << G_real_init_y+jj*LAYOUT.YS << "" << endl; } if (col == 2 && LAYOUT.grid_coord_freq == 2) { PAGEDEF << "" << setprecision(0) << G_real_init_y+jj*LAYOUT.YS << "" << endl; } } } } PAGEDEF << "" << endl; } void print_surface_bitmaps (ofstream &F) { if (LAYOUT.transparency) F << "" << endl; F.precision(8); for (list::iterator I = SURFPICTLIST.begin(); I != SURFPICTLIST.end(); I++) { F << "xx << " " << I->yx << " " << -I->xy << " " << -I->yy << " " << I->dx << " " << I->dy << ")\">"; F << "height << "\" width=\"" << I->width << "\" height=\"" << I->height << "\" xlink:href=\"data:image/" << I->type << ";base64," << endl; base64_encode(I->filename, F); F << "\" />"; F << "" << endl; }; F.precision(3); if (LAYOUT.transparency) F << "" << endl; } #define ginit(ID) F << "" << endl; #define gend F << "" << endl; void thsvg(const char * fname, int fmt, legenddata ldata) { if (fmt == 0) thprintf("making svg map ... "); else thprintf("making svg (xhtml) map ... "); string bgcol; string unique_prefix = fname; ofstream F(fname); F.setf(ios::fixed, ios::floatfield); // dolezite pre velke suradnice F.precision(3); double llx=0, lly=0, urx=0, ury=0; find_dimensions(llx, lly, urx, ury); if (LAYOUT.proj > 0 && LAYOUT.grid > 0) { // natiahnutie vysky aby sa zobrazil grid pod aj nad jaskynou lly = LAYOUT.vgridsize * floor ((lly-LAYOUT.vgridorigin)/LAYOUT.vgridsize) + LAYOUT.vgridorigin; ury = LAYOUT.vgridsize * ceil ((ury-LAYOUT.vgridorigin)/LAYOUT.vgridsize) + LAYOUT.vgridorigin; } if (LAYOUT.map_grid) { llx = LAYOUT.hsize * floor (llx/LAYOUT.hsize); lly = LAYOUT.vsize * floor (lly/LAYOUT.vsize); urx = LAYOUT.hsize * ceil (urx/LAYOUT.hsize); ury = LAYOUT.vsize * ceil (ury/LAYOUT.vsize); } double llxo(llx), llyo(lly), urxo(urx), uryo(ury); // rozmery mapy bez overlapu llx -= LAYOUT.overlap; urx += LAYOUT.overlap; lly -= LAYOUT.overlap; ury += LAYOUT.overlap; F << "" << endl; F << "" << endl; if (LAYOUT.doc_author != "") F << "" << endl; if (LAYOUT.doc_title != "") F << "" << endl; if (LAYOUT.doc_subject != "") F << "" << endl; if (LAYOUT.doc_keywords != "") F << "" << endl; if (fmt == 0) F << "" << endl; else { F << "" << endl; F << "" << endl; F << "" << endl; // title if (!ldata.cavename.empty()) F << "

" << ldata.cavename << "

" << endl; if (!ldata.comment.empty()) F << "

" << ldata.comment << "

" << endl; // north, scale // ... if (!ldata.cavelength.empty()) F << "

" << ldata.cavelengthtitle << ": " << ldata.cavelength << "

" << endl; if (!ldata.cavedepth.empty()) F << "

" << ldata.cavedepthtitle << ": " << ldata.cavedepth << "

" << endl; if (!ldata.copyrights.empty()) F << "

" << ldata.copyrights << "

" << endl; if (LAYOUT.scalebar != "") { F << "

" << endl; ScBar.print_svg(F,unique_prefix); F << "

" << endl; } if (LAYOUT.northarrow != "") { F << "

" << endl; NArrow.print_svg(F,unique_prefix); F << "

" << endl; } } F << "" << endl; F << "" << endl; // patterns: // pattern is clipped according to width and height attributes; // it's not possible to specify clipping area independently // like using BBox in PDF -- may produce some strange results // if the pattern definition exceeds the BBox in MetaPost for (list::iterator I = PATTERNLIST.begin(); I != PATTERNLIST.end(); I++) { if (I->used) { F << "name << "_" << unique_prefix << "\" patternUnits=\"userSpaceOnUse\"" << " width=\"" << I->xstep << "\" height=\"" << I->ystep << "\" patternTransform=\"matrix(" << I->xx << " " << I->xy << " " << I->yx << " " << I->yy << " " << I->x << " " << I->y << ")\">" << endl; F << "llx1-I->llx << " " << I->lly1-I->lly << ")\">" << endl; I->data.MP.print_svg(F,unique_prefix); F << "" << endl; F << "" << endl; } } // scraps: for(list::iterator I = SCRAPLIST.begin(); I != SCRAPLIST.end(); I++) { ginit("F_" + I->name); I->Fc.MP.print_svg(F,unique_prefix); gend; ginit("G_" + I->name); I->Gc.MP.print_svg(F,unique_prefix); gend; ginit("B_" + I->name); I->Bc.MP.print_svg(F,unique_prefix); gend; ginit("I_" + I->name); I->Ic.MP.print_svg(F,unique_prefix); gend; ginit("E_" + I->name); I->Ec.MP.print_svg(F,unique_prefix); gend; ginit("X_" + I->name); I->Xc.MP.print_svg(F,unique_prefix); gend; } // grid: int i=0; for (list::iterator I = GRIDLIST.begin(); I != GRIDLIST.end(); I++) { ginit("grid_" + u2str(++i)); I->MP.print_svg(F,unique_prefix); gend; } // clip to initial viewBox // (browsers mostly ignore clip="auto" overflow="hidden" root svg attributes) F << "" << endl; F << "" << endl; F << "" << endl; F << "" << endl; // --- end of definitions --- F << "" << endl; // page background: if ((LAYOUT.background_r != 1) || (LAYOUT.background_g != 1) || (LAYOUT.background_b != 1)) { bgcol=rgb2svg(LAYOUT.background_r, LAYOUT.background_g, LAYOUT.background_b); F << "" << endl; } // surface: if (LAYOUT.surface == 1) print_surface_bitmaps(F); // white scrap backgrounds (when transparency added): // grid: if (LAYOUT.grid == 1) print_grid(F,llxo,llyo,urxo,uryo,unique_prefix); // preview down: if (!MAP_PREVIEW_DOWN.empty()) print_preview(0,F,unique_prefix); // map export: for (map::iterator J = LAYERHASH.begin(); J != LAYERHASH.end(); J++) { if (J->second.Z == 0) { map < int,set > LEVEL; set page_text_scraps,used_scraps; LEVEL = J->second.scraps; /*for (map < int,set >::iterator I_l = LEVEL.begin(); I_l != LEVEL.end(); I_l++) { used_scraps = I_l->second; for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0 && K->P != "") page_text_scraps.insert(K->name); } }*/ for (map < int,set >::iterator I = LEVEL.begin(); I != LEVEL.end(); I++) { used_scraps = I->second; // background for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (K->r < 0 || K->g < 0 || K->b < 0) { bgcol=rgb2svg(LAYOUT.foreground_r, LAYOUT.foreground_g, LAYOUT.foreground_b); } else { bgcol=rgb2svg(K->r, K->g, K->b); } if (used_scraps.count(K->name) > 0 && K->I != "") { F << "" << endl; F << "I1 << "\" y=\"" << K->I2 << "\" xlink:href=\"#I_" << K->name << "_" << unique_prefix << "\" />" << endl; F << "" << endl; } } // F << "G1 << "\" y=\"" << -I->G2 << "\" xlink:href=\"#G_" << I->name << "_" << unique_prefix << "\" />" << endl; // sketches F.precision(8); for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { for (list::iterator I_sk = K->SKETCHLIST.begin(); I_sk != K->SKETCHLIST.end(); I_sk++) { F << "xx << " " << I_sk->yx << " " << -I_sk->xy << " " << -I_sk->yy << " " << I_sk->dx << " " << I_sk->dy << ")\">"; F << "height << "\" width=\"" << I_sk->width << "\" height=\"" << I_sk->height << "\" xlink:href=\"data:image/" << I_sk->type << ";base64," << endl; base64_encode(I_sk->filename, F); F << "\" />"; F << "" << endl; }; } F.precision(3); // end of sketches for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0 && K->F != "") { F << "F1 << "\" y=\"" << K->F2 << "\" xlink:href=\"#F_" << K->name << "_" << unique_prefix << "\" />" << endl; } } for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0 && K->E != "") { F << "E1 << "\" y=\"" << K->E2 << "\" xlink:href=\"#E_" << K->name << "_" << unique_prefix << "\" />" << endl; } } for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0 && K->X != "") { F << "X1 << "\" y=\"" << K->X2 << "\" xlink:href=\"#X_" << K->name << "_" << unique_prefix << "\" />" << endl; } } } } } // preview up: if (!MAP_PREVIEW_UP.empty()) print_preview(1,F,unique_prefix); // surface: if (LAYOUT.surface == 2) print_surface_bitmaps(F); // grid: if (LAYOUT.grid == 2) print_grid(F,llxo,llyo,urxo,uryo,unique_prefix); // map grid: if (LAYOUT.map_grid) { F << "" << endl; F << "" << endl; for (double i=llxo; i <= urxo; i += LAYOUT.hsize) { F << "" << endl; } for (double i=llyo; i <= uryo; i += LAYOUT.vsize) { F << "" << endl; } F << "" << endl; } F << "" << endl; F << "" << endl; // end of main SVG data block if (fmt > 0) { // legend in xhtml // title if (!ldata.exploteam.empty()) F << "

" << ldata.explotitle << ": " << ldata.exploteam << " " << ldata.explodate << "

" << endl; if (!ldata.topoteam.empty()) F << "

" << ldata.topotitle << ": " << ldata.topoteam << " " << ldata.topodate << "

" << endl; if (!ldata.cartoteam.empty()) F << "

" << ldata.cartotitle << ": " << ldata.cartoteam << " " << ldata.cartodate << "

" << endl; // color legend if (!COLORLEGENDLIST.empty()) { F << "

" << ldata.colorlegendtitle << "

" << endl; F << "" << endl; for(list::iterator I = COLORLEGENDLIST.begin(); I != COLORLEGENDLIST.end(); I++) { F << "" << endl; F << "" << endl; F << "" << endl; } F << "
R,I->G,I->B) << "; height: 24px; width: 36px;\">" << endl; F << "" << I->name << "
" << endl; } // map symbols if (!LEGENDLIST.empty()) { F << "

" << ldata.legendtitle << "

" << endl; vector L; for(list::iterator I = LEGENDLIST.begin(); I != LEGENDLIST.end(); I++) { L.push_back(*I); } int legendbox_num = LEGENDLIST.size(); int columns = LAYOUT.legend_columns; int rows = (int) ceil(double(legendbox_num) / columns); int pos = 0; F << "" << endl; for (int i = 0; i < rows; i++) { F << "" << endl; for (int j = 0; j < columns; j++) { F << "" << endl; } F << "" << endl; } F << "
" << endl; pos = i + j * rows; if (pos < legendbox_num) { L[pos].ldata.print_svg(F,unique_prefix); F << L[pos].descr; // F << "

" << endl; } F << "
" << endl; } F << "" << endl << "" << endl; } F.close(); thprintf("done\n"); } therion/thsvg.h0000644000076400010400000000176511324124136014577 0ustar userAdministrators/* * Copyright (C) 2005 Martin Budaj * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thsvg_h #define thsvg_h #include "thlegenddata.h" void thsvg(const char * fname, int, legenddata ldata); #endif therion/thsvxctrl.cxx0000644000076400010400000004673112042433266016067 0ustar userAdministrators/** * @file thsvxctrl.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thsvxctrl.h" #include "thdatabase.h" #include "thdataleg.h" #include "thtmpdir.h" #include "thdata.h" #include "thexception.h" #include "thdatabase.h" #include "thinfnan.h" #include "thinit.h" #include "thconfig.h" #include #include #include "thsurvey.h" #include "thcs.h" #include "thlogfile.h" #include "extern/img.h" #include #ifdef THMSVC #include #define getcwd _getcwd #endif #define THPI 3.1415926535898 thsvxctrl::thsvxctrl() { this->pdl.clear(); this->svxf_ln = 1; } thsvxctrl::~thsvxctrl() { } void thsvxctrl::write_double(double dd) { if (thisnan(dd)) { fprintf(this->svxf,"\t-"); return; } switch (thisinf(dd)) { case -1: fprintf(this->svxf,"\tdown"); break; case 1: fprintf(this->svxf,"\tup"); break; default: fprintf(this->svxf,"\t%f",dd); break; } } void thsvxctrl::write_survey_leg(thdataleg * legp) { // first let's check infer if (this->pdl.infer_plumbs != legp->infer_plumbs) { fprintf(this->svxf,"*infer plumbs %s\n",(legp->infer_plumbs ? "on" : "off")); this->svxf_ln++; } if (this->pdl.infer_equates != legp->infer_equates) { fprintf(this->svxf,"*infer equates %s\n",(legp->infer_equates ? "on" : "off")); this->svxf_ln++; } // let's check standard deviations if ( (((!thisnan(this->pdl.length_sd)) || (!thisnan(legp->length_sd))) && (this->pdl.length_sd != legp->length_sd)) || // (((!thisnan(this->pdl.counter_sd)) || (!thisnan(legp->counter_sd))) && // (this->pdl.counter_sd != legp->counter_sd)) // || (((!thisnan(this->pdl.depth_sd)) || (!thisnan(legp->depth_sd))) && (this->pdl.depth_sd != legp->depth_sd)) || (((!thisnan(this->pdl.bearing_sd)) || (!thisnan(legp->bearing_sd))) && (this->pdl.bearing_sd != legp->bearing_sd)) || (((!thisnan(this->pdl.gradient_sd)) || (!thisnan(legp->gradient_sd))) && (this->pdl.gradient_sd != legp->gradient_sd)) || (((!thisnan(this->pdl.dx_sd)) || (!thisnan(legp->dx_sd))) && (this->pdl.dx_sd != legp->dx_sd)) || (((!thisnan(this->pdl.dy_sd)) || (!thisnan(legp->dy_sd))) && (this->pdl.dy_sd != legp->dy_sd)) || (((!thisnan(this->pdl.dz_sd)) || (!thisnan(legp->dz_sd))) && (this->pdl.dz_sd != legp->dz_sd)) ) { fprintf(this->svxf,"*sd default\n"); this->svxf_ln++; if (!(thisnan(legp->length_sd))) { fprintf(this->svxf,"*sd tape %f metres\n", legp->length_sd); this->svxf_ln++; } // if (!(thisnan(legp->counter_sd))) { // fprintf(this->svxf,"*sd counter %f metres\n", legp->counter_sd); // this->svxf_ln++; // } if (!(thisnan(legp->depth_sd))) { fprintf(this->svxf,"*sd depth %f metres\n", legp->depth_sd); this->svxf_ln++; } if (!(thisnan(legp->bearing_sd))) { fprintf(this->svxf,"*sd compass %f degrees\n", legp->bearing_sd); this->svxf_ln++; } if (!(thisnan(legp->gradient_sd))) { fprintf(this->svxf,"*sd clino %f degrees\n", legp->gradient_sd); this->svxf_ln++; } if (!(thisnan(legp->dx_sd))) { fprintf(this->svxf,"*sd dx %f metres\n", legp->dx_sd); this->svxf_ln++; } if (!(thisnan(legp->dy_sd))) { fprintf(this->svxf,"*sd dy %f metres\n", legp->dy_sd); this->svxf_ln++; } if (!(thisnan(legp->dz_sd))) { fprintf(this->svxf,"*sd dz %f metres\n", legp->dz_sd); this->svxf_ln++; } } if (this->pdl.data_type != legp->data_type) { switch (legp->data_type) { case TT_DATATYPE_NORMAL: fprintf(this->svxf,"*data\tnormal\tfrom\tto\ttape\tcompass\tclino\n"); this->svxf_ln++; break; case TT_DATATYPE_DIVING: fprintf(this->svxf,"*data\tdiving"); case TT_DATATYPE_CYLPOLAR: if (legp->data_type != TT_DATATYPE_DIVING) fprintf(this->svxf,"*data\tcylpolar"); fprintf(this->svxf,"\tfrom\tto\ttape\tcompass\tdepthchange\n"); this->svxf_ln++; break; case TT_DATATYPE_CARTESIAN: fprintf(this->svxf,"*data\tcartesian\tfrom\tto\tnorthing\teasting\taltitude\n"); this->svxf_ln++; break; case TT_DATATYPE_NOSURVEY: fprintf(this->svxf,"*data\tnosurvey\tfrom\tto\n"); this->svxf_ln++; break; } } double leggridmc; leggridmc = 0.0; if (legp->gridcs != TTCS_LOCAL) { if (legp->gridcs != this->lastleggridmccs) { if (legp->gridcs == thcfg.outcs) { this->lastleggridmc = this->meridian_convergence; } else { this->lastleggridmc = thcfg.get_cs_convergence(legp->gridcs); } this->lastleggridmccs = legp->gridcs; } leggridmc = this->lastleggridmc; } // recalculate declination if necessary double legp_bearing = legp->bearing; double legp_dx = legp->dx; double legp_dy = legp->dy; double legp_declin = (this->meridian_convergence - leggridmc + (!thisnan(legp->declination) ? legp->declination : legp->implicit_declination)); if (legp_declin != 0.0) { switch (legp->data_type) { case TT_DATATYPE_NORMAL: case TT_DATATYPE_DIVING: case TT_DATATYPE_CYLPOLAR: if (!thisnan(legp_bearing)) { legp_bearing += legp_declin; if (legp_bearing >= 360.0) legp_bearing -= 360.0; if (legp_bearing < 0.0) legp_bearing += 360.0; } break; case TT_DATATYPE_CARTESIAN: double cosdecl = cos(legp_declin/180*THPI), sindecl = sin(legp_declin/180*THPI); legp_dx = (cosdecl * legp->dx) + (sindecl * legp->dy); legp_dy = (cosdecl * legp->dy) - (sindecl * legp->dx); break; } } // now print the data // first stations if (legp->direction) fprintf(this->svxf, "\t%ld\t%ld", legp->from.id, legp->to.id); else fprintf(this->svxf, "\t%ld\t%ld", legp->to.id, legp->from.id); // then data switch (legp->data_type) { case TT_DATATYPE_NORMAL: this->write_double(legp->length); if (legp->infer_plumbs && ((legp->gradient == 90.0) || (legp->gradient == -90.0)) && (!thisnan(legp_bearing))) fprintf(this->svxf,"\t-"); else this->write_double(legp_bearing); this->write_double(legp->gradient); break; case TT_DATATYPE_DIVING: case TT_DATATYPE_CYLPOLAR: this->write_double(legp->length); this->write_double(legp_bearing); if (!thisnan(legp->depthchange)) this->write_double(legp->depthchange); else this->write_double(legp->todepth - legp->fromdepth); break; case TT_DATATYPE_CARTESIAN: this->write_double(legp_dy); this->write_double(legp_dx); this->write_double(legp->dz); break; } this->src_map[this->svxf_ln] = &(legp->srcf); fprintf(this->svxf, "\n"); this->svxf_ln++; this->pdl = *legp; } void thsvxctrl::write_survey_fix(thdatafix * fixp) { if (!(thisnan(fixp->x))) { fprintf(this->svxf,"*fix\t%ld\t%f\t%f\t%f",fixp->station.id, fixp->x,fixp->y,fixp->z); if (!(thisnan(fixp->sdx))) { fprintf(this->svxf,"\t%f\t%f\t%f",fixp->sdx,fixp->sdy,fixp->sdz); if (!(thisnan(fixp->cxy))) fprintf(this->svxf,"\t%f\t%f\t%f",fixp->cxy,fixp->cyz,fixp->cxz); } this->src_map[this->svxf_ln] = &(fixp->srcf); fprintf(this->svxf,"\n"); this->svxf_ln++; } } void thsvxctrl::process_survey_data(class thdatabase * dbp) { #ifdef THDEBUG thprintf("\n\nprocessing survey data\n"); #else thprintf("processing survey data ... "); thtext_inline = true; #endif // first check if any survey data if (dbp->db1d.station_vec.size() == 0) { #ifdef THDEBUG thprintf("no survey data\n"); #else thprintf("no data.\n"); thtext_inline = false; #endif return; } // first create survex file #ifdef THDEBUG #else // thprintf("writing ... "); #endif const char * svxfn = thtmp.get_file_name("data.svx"); this->svxf = fopen(svxfn,"w"); if (svxf == NULL) ththrow(("can't open survex file for output -- %s", svxfn)) this->meridian_convergence = thcfg.get_outcs_convergence(); this->lastleggridmccs = TTCS_LOCAL; this->lastleggridmc = 0.0; fprintf(this->svxf,"*units declination clino compass degrees\n"); fprintf(this->svxf,"*units tape depth counter northing easting altitude metres\n"); fprintf(this->svxf,"*infer plumbs off\n"); fprintf(this->svxf,"*infer equates off\n"); this->svxf_ln += 4; // write data to file thdb_object_list_type::iterator obi = dbp->object_list.begin(); thdataleg_list::iterator lei; thdatafix_list::iterator fii; //thdatass_list::iterator ssi; thdataequate_list::iterator eqi; thdata * dp; thdataobject * cx1, * cx2; thdb1ds * tmps; while (obi != dbp->object_list.end()) { if ((*obi)->get_class_id() == TT_DATA_CMD) { dp = (thdata *)(*obi); // scan data shots lei = dp->leg_list.begin(); while(lei != dp->leg_list.end()) { if (lei->is_valid) this->write_survey_leg(&(*lei)); lei++; } // scan data fixes fii = dp->fix_list.begin(); while(fii != dp->fix_list.end()) { tmps = &(dbp->db1d.station_vec[fii->station.id - 1]); cx1 = tmps->fixcontext; cx2 = fii->srcf.context; if (((cx1 == NULL) && (cx2 == NULL)) || ((cx1 != NULL) && (cx2 != NULL) && (cx1->id == cx2->id))) { this->write_survey_fix(&(*fii)); } fii++; } // export data equates int last_e = 0; for(eqi = dp->equate_list.begin(); eqi != dp->equate_list.end(); eqi++) { if (last_e != eqi->eqid) { if (last_e > 0) { fprintf(this->svxf,"\n"); this->svxf_ln++; } fprintf(this->svxf,"*equate"); this->src_map[this->svxf_ln] = &(eqi->srcf); last_e = eqi->eqid; } fprintf(this->svxf,"\t%ld",eqi->station.id); } if (last_e > 0) { fprintf(this->svxf,"\n"); this->svxf_ln++; } } obi++; } fclose(svxf); // run survex thbuffer svxcom, wdir; wdir.guarantee(1024); getcwd(wdir.get_buffer(),1024); int retcode; svxcom = "\""; svxcom += thini.get_path_cavern(); svxcom += "\" --quiet --log --output="; svxcom += thtmp.get_dir_name(); svxcom += " "; svxcom += svxfn; #ifdef THDEBUG thprintf("running cavern\n"); #else // thprintf("processing ... "); #endif retcode = system(svxcom.get_buffer()); this->transcript_log_file(dbp, thtmp.get_file_name("data.log")); if (retcode != EXIT_SUCCESS) ththrow(("cavern exit code -- %d", retcode)) // read coordinates from 3D file img_point imgpt; int result; unsigned long ss; thdb1ds * stp; img* pimg = img_open(thtmp.get_file_name("data.3d")); if (pimg == NULL) ththrow(("can't open cavern output")) do { result = img_read_item(pimg, &imgpt); switch (result) { case img_MOVE: case img_LINE: break; case img_LABEL: if (sscanf(pimg->label,"%lu",&ss) != 0) { stp = & (dbp->db1d.station_vec[ss-1]); stp->x = imgpt.x; stp->y = imgpt.y; stp->z = imgpt.z; } break; case img_BAD: img_close(pimg); ththrow(("error reading cavern output")) break; } } while (result != img_STOP); img_close(pimg); // svxcom = "\""; // svxcom += thini.get_path_3dtopos(); // svxcom += "\" "; // svxcom += thtmp.get_file_name("data.3d"); // svxcom += " "; // svxcom += thtmp.get_file_name("data.pos"); // // #ifdef THDEBUG // thprintf("running 3dtopos\n"); // #endif // retcode = system(svxcom.get_buffer()); // // if (retcode != EXIT_SUCCESS) // ththrow(("3dtopos exit code -- %d", retcode)) // // // Let's copy results and log-file to working directory // // #ifdef THWIN32 // // svxcom = "copy "; // // #else // // svxcom = "cp "; // // #endif // // svxcom += thtmp.get_file_name("data.*"); // // svxcom += " "; // // svxcom += wdir.get_buffer(); // // #ifdef THDEBUG // // thprintf("copying results\n"); // // #endif // // // // retcode = system(svxcom.get_buffer()); // // // // if (retcode != EXIT_SUCCESS) // // ththrow(("cp exit code -- %d", retcode)) // // // #ifdef THDEBUG // #else // // thprintf("reading ... "); // #endif // // import survex export // std::ifstream posf; // thdb1ds * stp; // double sx, sy, sz; // unsigned long ss; // size_t lnsize = 4096, pix = 0, ppx = 0, clns; // svxcom.guarantee(lnsize); // char * lnbuff = svxcom.get_buffer(), // * p[4], * cps = lnbuff; // posf.open(thtmp.get_file_name("data.pos")); // if (!posf.is_open()) // ththrow(("can't open survex output")) // while (!posf.eof()) { // posf.getline(lnbuff, lnsize); // clns = strlen(lnbuff); // ppx = 0; // pix = 0; // cps = lnbuff; // bool scan_num = true; // while ((pix < clns) && (ppx < 4)) { // if (scan_num && // (((((unsigned char) *cps) > 47) && // (((unsigned char) *cps) < 58)) || (*cps == 46) || // (*cps == 45) || (*cps == 43))) { // p[ppx] = cps; // ppx++; // scan_num = false; // } // if (((unsigned char)*cps) < 33) // scan_num = true; // if ((*cps == ',') || (((unsigned char)*cps) < 33)) // *cps = 0; // cps++; // pix++; // } // if (ppx == 4) { // if (sscanf(p[0],"%lf",&sx) == 0) // ppx = 0; // if (sscanf(p[1],"%lf",&sy) == 0) // ppx = 0; // if (sscanf(p[2],"%lf",&sz) == 0) // ppx = 0; // if (sscanf(p[3],"%lu",&ss) == 0) // ppx = 0; // // if inport OK, write coordinates into database // if (ppx == 4) { // stp = & (dbp->db1d.station_vec[ss-1]); // stp->x = sx; // stp->y = sy; // stp->z = sz; // } // } // } // posf.close(); // #ifdef THDEBUG #else thprintf("done\n"); thtext_inline = false; #endif // FILE * ptsf; // ptsf = fopen("data.pts","w"); // if (ptsf == NULL) // ththrow(("can't open data.pts for output")) // unsigned int sid, lsid; // lsid = dbp->db1d.station_vec.size(); // for (sid = 0; sid < lsid; sid++) { // stp = & (dbp->db1d.station_vec[sid]); // fprintf(ptsf,"%6d -> %s@%s\n",sid+1,stp->name,stp->survey->get_full_name()); // } // fclose(ptsf); } enum {THSVXLOGNUM_NONE, THSVXLOGNUM_LINE, THSVXLOGNUM_STATION}; void thsvxctrl::transcript_log_file(class thdatabase * dbp, const char * lfnm) { thbuffer tsbuff; thdb1ds * stp; char * lnbuff = new char [4097]; char * numbuff = &(lnbuff[2049]); unsigned long lnum = 0; thlog.printf("\n####################### cavern log file ########################\n"); std::ifstream clf(lfnm); if (!(clf.is_open())) ththrow(("can't open cavern log file for input")) // let's read line by line and print to log file size_t chidx, nchs; char * chch; bool onnum, ondig, fonline; long csn; size_t lsid; lsid = dbp->db1d.station_vec.size(); while (!(clf.eof())) { lnum++; clf.getline(lnbuff,2048); thlog.printf("%2d> %s\n",lnum,lnbuff); // let's scan the line chch = lnbuff; nchs = strlen(chch); onnum = false; fonline = true; csn = 0; chidx = 0; char * start_ch = NULL; //, * test_ch; int num_type; thsvxctrl_src_maptype::iterator srcmi; // if (*lnbuff == 13) lnbuff++; // if (strncmp(lnbuff,"There were",10) == 0) // chidx = 2049; // else if (strncmp(lnbuff,"There are",9) == 0) // chidx = 2049; // else if (strncmp(lnbuff,"Survey has",10) == 0) // chidx = 2049; // else if (strncmp(lnbuff,"Survey contains",15) == 0) // chidx = 2049; // else if (nchs > 6) { // if (strcmp(&(lnbuff[nchs-6]),"nodes.") == 0) // chidx = 2049; // else if (strcmp(&(lnbuff[nchs-5]),"node.") == 0) // chidx = 2049; // } while ((chidx <= nchs) && (chidx <= 2048)) { if ((chidx < nchs) && (chidx < 2048) && (((unsigned char) *chch) > 47) && (((unsigned char) *chch) < 58)) { if (!onnum) start_ch = chch; ondig = true; onnum = true; } else ondig = false; if (onnum) { if (ondig) { csn *= 10; csn += ((unsigned char) *chch) - 48; } else { num_type = THSVXLOGNUM_STATION; if ((chidx > 0) && (chidx <= nchs)) { if ((start_ch[-1] == ':') && (*chch == ':')) num_type = THSVXLOGNUM_LINE; } if (num_type == THSVXLOGNUM_STATION) { if ((chidx > 0) && (chidx <= nchs)) { if ((*chch == '.') || (*chch == ',') || (*chch == ')') || (*chch == 'm') || (*chch == '-') || (*chch == '/')) num_type = THSVXLOGNUM_NONE; if ((start_ch[-1] == '.') || (start_ch[-1] == '-')) num_type = THSVXLOGNUM_NONE; } } switch (num_type) { case THSVXLOGNUM_LINE: srcmi = this->src_map.find((unsigned long)csn); if (srcmi != this->src_map.end()) { if (!fonline) { fonline = true; tsbuff.strcat("\n"); } sprintf(numbuff,"%2ld> input:%ld -- %s [%ld]\n",lnum,csn,srcmi->second->name,srcmi->second->line); tsbuff.strcat(numbuff); } break; case THSVXLOGNUM_STATION: csn--; if ((csn >= 0) && (csn < long(lsid))) { if (fonline) { sprintf(numbuff,"%2ld> ",lnum); tsbuff.strcat(numbuff); fonline = false; } else { tsbuff.strcat(" -- "); } sprintf(numbuff,"%ld : ",(csn+1)); stp = & (dbp->db1d.station_vec[(unsigned int)csn]); tsbuff.strcat(numbuff); tsbuff.strcat(stp->name); tsbuff.strcat("@"); tsbuff.strcat(stp->survey->get_full_name()); } break; default: break; } // end of switch onnum = false; csn = 0; } } chch++; chidx++; } if (!fonline) tsbuff.strcat("\n"); } clf.close(); thlog.printf("######################### transcription ########################\n%s",tsbuff.get_buffer()); thlog.printf("#################### end of cavern log file ####################\n"); delete [] lnbuff; } therion/thsvxctrl.h0000644000076400010400000000353712042433106015502 0ustar userAdministrators/** * @file thsvxctrl.h * Survex controler. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thsvxctrl_h #define thsvxctrl_h #include #include "thdataleg.h" #include "thobjectsrc.h" #include typedef std::map < unsigned long, thobjectsrc * > thsvxctrl_src_maptype; ///< Source map type. /** * Survex controler. */ class thsvxctrl { thdataleg pdl; double meridian_convergence, lastleggridmc; int lastleggridmccs; unsigned long svxf_ln; thsvxctrl_src_maptype src_map; FILE * svxf; void write_survey_leg(thdataleg * legp); void write_survey_fix(thdatafix * fixp); void write_double(double dd); void transcript_log_file(class thdatabase * dbp, const char * lfnm); public: /** * Standard constructor. */ thsvxctrl(); /** * Destructor. */ ~thsvxctrl(); /** * Process survey data in given database. */ void process_survey_data(class thdatabase * dbp); }; #endif therion/thsymbolset.cxx0000644000076400010400000016132512065344276016407 0ustar userAdministrators/** * @file thdb2dxs.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thsymbolset.h" #include "thparse.h" #include "thpoint.h" #include "thline.h" #include "tharea.h" #include "thexception.h" #include "thpdfdata.h" #include "thlayout.h" #include "thtexfonts.h" #include "thdate.h" #include "thlang.h" #include "thtmpdir.h" #include "thcmdline.h" #include "thmpost.h" #include "thinit.h" #include "thsymbolsets.h" #include "thlogfile.h" #include "thepsparse.h" #ifndef THMSVC #include #else #include #define getcwd _getcwd #define chdir _chdir #define putenv _putenv #define hypot _hypot #define mkdir _mkdir #endif thsymbolset::thsymbolset() { for(int i = 0; i < thsymbolset_size; i++) { this->assigned[i] = !(thsymbolset__hidden[i]); this->used[i] = false; } this->group_symbols = true; } void thsymbolset_log_log_file(const char * logfpath, const char * on_title, const char * off_title, bool mpbug = false) { char * lnbuff = new char [4097]; // unsigned long lnum = 0; thlog.printf("%s",on_title); std::ifstream lf(logfpath); if (!(lf.is_open())) {{ thwarning(("can't open %s file for input", logfpath)); } thlog.printf("can't open %s file for input",logfpath); thlog.printf("%s",off_title); delete [] lnbuff; return; } // let's read line by line and print to log file bool skip_next = false, skip_this = false, peoln = false; while (!(lf.eof())) { lf.getline(lnbuff,4096); if (mpbug && (!skip_this)) { if (strncmp(lnbuff,"write",5) == 0) { skip_next = true; skip_this = true; peoln = false; } } if (!skip_this) { if (!skip_next) { thlog.printf("%s%s", (peoln ? "\n" : ""), lnbuff); peoln = true; } else { skip_next = false; } } else { skip_this = false; } } if (peoln) thlog.printf("\n"); lf.close(); delete [] lnbuff; thlog.printf("%s",off_title); } char * thlegend_u2string(unsigned u) { static char a [5]; a[4] = 0; unsigned v = 1; for(int i = 3; i >= 0; i--) { a[i] = 'a' + ((u / v) % 10); v *= 10; } return (&(a[0])); } const char * thsymbolset::get_mp_macro(int id) { this->used[id] = true; return thsymbolset__mp[id]; } enum { TT_SYMBOL_POINT, TT_SYMBOL_LINE, TT_SYMBOL_AREA, TT_SYMBOL_GROUP, TT_SYMBOL_UNKNOWN, TT_SYMBOL_SPECIAL, }; static const thstok thtt_symbol_class[] = { {"area", TT_SYMBOL_AREA}, {"group", TT_SYMBOL_GROUP}, {"line", TT_SYMBOL_LINE}, {"point", TT_SYMBOL_POINT}, {"special", TT_SYMBOL_SPECIAL}, {NULL, TT_SYMBOL_UNKNOWN} }; static const thstok thtt_symbol_group[] = { {"all", SYMX_ALL}, {"cave-centerline", SYMX_CAVECENTERLINE}, {"cave-centreline", SYMX_CAVECENTERLINE}, {"centerline", SYMX_CENTERLINE}, {"centreline", SYMX_CENTERLINE}, {"equipment", SYMX_EQUIPMENT}, {"ice", SYMX_ICE}, {"passage-fills", SYMX_PASSAGEFILLS}, {"sections", SYMX_SECTIONS}, {"sediments", SYMX_SEDIMENTS}, {"speleothems", SYMX_SPELEOTHEMS}, {"surface-centerline", SYMX_SURFACECENTERLINE}, {"surface-centreline", SYMX_SURFACECENTERLINE}, {"text", SYMX_TEXT}, {"water", SYMX_WATER}, {NULL, SYMX_} }; static const thstok thtt_symbol_point_spec[] = { {"cave-station", SYMP_CAVESTATION}, {"flag", SYMX_POINT_FLAG}, {"flag:air-draught", SYMP_FLAG_AIRDRAUGHT}, {"flag:arch", SYMP_FLAG_ARCH}, {"flag:continuation", SYMP_FLAG_CONTINUATION}, {"flag:dig", SYMP_FLAG_DIG}, {"flag:doline", SYMP_FLAG_DOLINE}, {"flag:entrance", SYMP_FLAG_ENTRANCE}, {"flag:overhang", SYMP_FLAG_OVERHANG}, {"flag:sink", SYMP_FLAG_SINK}, {"flag:spring", SYMP_FLAG_SPRING}, {"surface-station", SYMP_SURFACESTATION}, {"wall-altitude", SYMP_WALLALTITUDE}, {NULL, SYMX_} }; static const thstok thtt_symbol_special[] = { {"north-arrow", SYMS_NORTHARROW}, {"scale-bar", SYMS_SCALEBAR}, {NULL, SYMX_} }; #define c2(TH,MP) case TH: rv = MP; break; #define cl3(TH,MP) case TH: \ if (subtype != TT_LINE_SUBTYPE_UNKNOWN) break; \ rv = MP; \ break; #define cp3(TH,MP) case TH: \ if (subtype != TT_POINT_SUBTYPE_UNKNOWN) break; \ rv = MP; \ break; #define sgroup(MP) if (strlen(subtypes) == 0) { \ rv = MP; \ break; \ } int thsymbolset__get_id(const char * symclass, const char * symbol) { int type, subtype, rv; char types[128], subtypes[128]; types[127] = 0; subtypes[127] = 0; int ci = 0, slen = (int)strlen(symbol); while((ci < slen) && (symbol[ci] != ':')) ci++; if (symbol[ci] == ':') { strncpy(&(types[0]),symbol,ci); types[ci] = 0; strncpy(&(subtypes[0]),&(symbol[ci+1]),127); } else { strncpy(&(types[0]),symbol,127); subtypes[0] = 0; } rv = -1; switch (thmatch_token(symclass,thtt_symbol_class)) { case TT_SYMBOL_GROUP: type = thmatch_token(types,thtt_symbol_group); if (strlen(subtypes) > 0) break; if (type != SYMX_) rv = type; break; case TT_SYMBOL_SPECIAL: type = thmatch_token(types,thtt_symbol_special); if (strlen(subtypes) > 0) break; if (type != SYMX_) rv = type; break; case TT_SYMBOL_AREA: type = thmatch_token(types,thtt_area_types); if (strlen(subtypes) > 0) break; switch (type) { c2(TT_AREA_TYPE_DEBRIS, SYMA_DEBRIS); c2(TT_AREA_TYPE_SAND, SYMA_SAND); c2(TT_AREA_TYPE_SUMP, SYMA_SUMP); c2(TT_AREA_TYPE_WATER, SYMA_WATER); c2(TT_AREA_TYPE_ICE, SYMA_ICE); c2(TT_AREA_TYPE_SNOW, SYMA_SNOW); c2(TT_AREA_TYPE_BLOCKS, SYMA_BLOCKS); c2(TT_AREA_TYPE_CLAY, SYMA_CLAY); c2(TT_AREA_TYPE_PEBBLES, SYMA_PEBBLES); c2(TT_AREA_TYPE_DIMENSIONS, SYMA_DIMENSIONS); c2(TT_AREA_TYPE_FLOWSTONE, SYMA_FLOWSTONE); c2(TT_AREA_TYPE_MOONMILK, SYMA_MOONMILK); } break; case TT_SYMBOL_LINE: type = thmatch_token(types,thtt_line_types); subtype = thmatch_token(subtypes,thtt_line_subtypes); switch (type) { case TT_LINE_TYPE_WALL: sgroup(SYMX_LINE_WALL) switch (subtype) { c2(TT_LINE_SUBTYPE_BEDROCK,SYML_WALL_BEDROCK) c2(TT_LINE_SUBTYPE_BLOCKS,SYML_WALL_BLOCKS) c2(TT_LINE_SUBTYPE_CLAY,SYML_WALL_CLAY) c2(TT_LINE_SUBTYPE_DEBRIS,SYML_WALL_DEBRIS) c2(TT_LINE_SUBTYPE_ICE,SYML_WALL_ICE) c2(TT_LINE_SUBTYPE_INVISIBLE,SYML_WALL_INVISIBLE) c2(TT_LINE_SUBTYPE_PEBBLES,SYML_WALL_PEBBLES) c2(TT_LINE_SUBTYPE_PRESUMED,SYML_WALL_PRESUMED) c2(TT_LINE_SUBTYPE_SAND,SYML_WALL_SAND) c2(TT_LINE_SUBTYPE_UNDERLYING,SYML_WALL_UNDERLYING) c2(TT_LINE_SUBTYPE_UNSURVEYED,SYML_WALL_UNSURVEYED) c2(TT_LINE_SUBTYPE_FLOWSTONE,SYML_WALL_FLOWSTONE) c2(TT_LINE_SUBTYPE_MOONMILK,SYML_WALL_MOONMILK) c2(TT_LINE_SUBTYPE_PIT,SYML_WALL_PIT) c2(TT_LINE_SUBTYPE_OVERLYING,SYML_WALL_OVERLYING) } break; case TT_LINE_TYPE_BORDER: sgroup(SYMX_LINE_BORDER) switch (subtype) { c2(TT_LINE_SUBTYPE_TEMPORARY,SYML_BORDER_TEMPORARY) c2(TT_LINE_SUBTYPE_INVISIBLE,SYML_BORDER_INVISIBLE) c2(TT_LINE_SUBTYPE_VISIBLE,SYML_BORDER_VISIBLE) } break; case TT_LINE_TYPE_SURVEY: sgroup(SYMX_LINE_SURVEY) switch (subtype) { c2(TT_LINE_SUBTYPE_CAVE,SYML_SURVEY_CAVE) c2(TT_LINE_SUBTYPE_SURFACE,SYML_SURVEY_SURFACE) } break; case TT_LINE_TYPE_WATER_FLOW: sgroup(SYMX_LINE_WATERFLOW) switch (subtype) { c2(TT_LINE_SUBTYPE_PERMANENT,SYML_WATERFLOW_PERMANENT) c2(TT_LINE_SUBTYPE_INTERMITTENT,SYML_WATERFLOW_INTERMITTENT) c2(TT_LINE_SUBTYPE_CONJECTURAL,SYML_WATERFLOW_CONJECTURAL) } break; cl3(TT_LINE_TYPE_ARROW,SYML_ARROW); cl3(TT_LINE_TYPE_GRADIENT,SYML_GRADIENT); cl3(TT_LINE_TYPE_CEILING_STEP,SYML_CEILINGSTEP); cl3(TT_LINE_TYPE_CEILING_MEANDER,SYML_CEILINGMEANDER); cl3(TT_LINE_TYPE_CHIMNEY,SYML_CHIMNEY); cl3(TT_LINE_TYPE_CONTOUR,SYML_CONTOUR); cl3(TT_LINE_TYPE_FLOOR_STEP,SYML_FLOORSTEP); cl3(TT_LINE_TYPE_FLOOR_MEANDER,SYML_FLOORMEANDER); cl3(TT_LINE_TYPE_FLOWSTONE,SYML_FLOWSTONE); cl3(TT_LINE_TYPE_MOONMILK,SYML_MOONMILK); cl3(TT_LINE_TYPE_LABEL,SYML_LABEL); cl3(TT_LINE_TYPE_MAP_CONNECTION,SYML_MAPCONNECTION); cl3(TT_LINE_TYPE_OVERHANG,SYML_OVERHANG); cl3(TT_LINE_TYPE_PIT,SYML_PIT); cl3(TT_LINE_TYPE_ROCK_BORDER,SYML_ROCKBORDER); cl3(TT_LINE_TYPE_ROCK_EDGE,SYML_ROCKEDGE); cl3(TT_LINE_TYPE_SECTION,SYML_SECTION); cl3(TT_LINE_TYPE_SLOPE,SYML_SLOPE); cl3(TT_LINE_TYPE_HANDRAIL,SYML_HANDRAIL); cl3(TT_LINE_TYPE_STEPS,SYML_STEPS); cl3(TT_LINE_TYPE_ROPE,SYML_ROPE); cl3(TT_LINE_TYPE_ROPE_LADDER,SYML_ROPELADDER); cl3(TT_LINE_TYPE_FIXED_LADDER,SYML_FIXEDLADDER); cl3(TT_LINE_TYPE_VIA_FERRATA,SYML_VIAFERRATA); } break; case TT_SYMBOL_POINT: type = thmatch_token(types,thtt_point_types); subtype = thmatch_token(subtypes,thtt_point_subtypes); if ((type == TT_POINT_TYPE_UNKNOWN) && (strlen(subtypes) == 0)) { type = thmatch_token(types,thtt_symbol_point_spec); if (type != SYMX_) rv = type; type = TT_POINT_TYPE_UNKNOWN; } if ((type == TT_POINT_TYPE_UNKNOWN) && (strlen(subtypes) > 0)) { type = thmatch_token(symbol,thtt_symbol_point_spec); if (type != SYMX_) rv = type; type = TT_POINT_TYPE_UNKNOWN; } switch (type) { case TT_POINT_TYPE_PASSAGE_HEIGHT: sgroup(SYMX_POINT_PASSAGEHEIGHT) switch (subtype) { c2(TT_POINT_SUBTYPE_POSITIVE,SYMP_PASSAGEHEIGHT_POSITIVE); c2(TT_POINT_SUBTYPE_NEGATIVE,SYMP_PASSAGEHEIGHT_NEGATIVE); c2(TT_POINT_SUBTYPE_BOTH,SYMP_PASSAGEHEIGHT_BOTH); c2(TT_POINT_SUBTYPE_UNSIGNED,SYMP_PASSAGEHEIGHT_UNSIGNED); } break; case TT_POINT_TYPE_HEIGHT: sgroup(SYMX_POINT_HEIGHT) switch (subtype) { c2(TT_POINT_SUBTYPE_POSITIVE,SYMP_HEIGHT_POSITIVE); c2(TT_POINT_SUBTYPE_NEGATIVE,SYMP_HEIGHT_NEGATIVE); c2(TT_POINT_SUBTYPE_UNSIGNED,SYMP_HEIGHT_UNSIGNED); } break; case TT_POINT_TYPE_WATER_FLOW: sgroup(SYMX_POINT_WATERFLOW) switch (subtype) { c2(TT_POINT_SUBTYPE_INTERMITTENT,SYMP_WATERFLOW_INTERMITTENT) c2(TT_POINT_SUBTYPE_PERMANENT,SYMP_WATERFLOW_PERMANENT) c2(TT_POINT_SUBTYPE_PALEO,SYMP_WATERFLOW_PALEO) } break; case TT_POINT_TYPE_STATION: sgroup(SYMX_POINT_STATION) switch (subtype) { c2(TT_POINT_SUBTYPE_FIXED,SYMP_STATION_FIXED) c2(TT_POINT_SUBTYPE_PAINTED,SYMP_STATION_PAINTED) c2(TT_POINT_SUBTYPE_NATURAL,SYMP_STATION_NATURAL) c2(TT_POINT_SUBTYPE_TEMP,SYMP_STATION_TEMPORARY) } break; case TT_POINT_TYPE_AIR_DRAUGHT: sgroup(SYMX_POINT_AIRDRAUGHT) switch (subtype) { c2(TT_POINT_SUBTYPE_UNDEF,SYMP_AIRDRAUGHT) c2(TT_POINT_SUBTYPE_SUMMER,SYMP_AIRDRAUGHT_SUMMER) c2(TT_POINT_SUBTYPE_WINTER,SYMP_AIRDRAUGHT_WINTER) } break; cp3(TT_POINT_TYPE_ALTITUDE,SYMP_ALTITUDE); cp3(TT_POINT_TYPE_ANASTOMOSIS,SYMP_ANASTOMOSIS); cp3(TT_POINT_TYPE_ANCHOR,SYMP_ANCHOR); cp3(TT_POINT_TYPE_ARAGONITE,SYMP_ARAGONITE); cp3(TT_POINT_TYPE_ARCHEO_MATERIAL,SYMP_ARCHEOMATERIAL); cp3(TT_POINT_TYPE_BEDROCK,SYMP_BEDROCK); cp3(TT_POINT_TYPE_BLOCKS,SYMP_BLOCKS); cp3(TT_POINT_TYPE_BREAKDOWN_CHOKE,SYMP_BREAKDOWNCHOKE); cp3(TT_POINT_TYPE_BRIDGE,SYMP_BRIDGE); cp3(TT_POINT_TYPE_CAMP,SYMP_CAMP); cp3(TT_POINT_TYPE_CAVE_PEARL,SYMP_CAVEPEARL); cp3(TT_POINT_TYPE_CLAY,SYMP_CLAY); cp3(TT_POINT_TYPE_CONTINUATION,SYMP_CONTINUATION); cp3(TT_POINT_TYPE_CRYSTAL,SYMP_CRYSTAL); cp3(TT_POINT_TYPE_CURTAIN,SYMP_CURTAIN); cp3(TT_POINT_TYPE_DATE,SYMP_DATE); cp3(TT_POINT_TYPE_DEBRIS,SYMP_DEBRIS); cp3(TT_POINT_TYPE_DIG,SYMP_DIG); cp3(TT_POINT_TYPE_DISK,SYMP_DISK); cp3(TT_POINT_TYPE_ENTRANCE,SYMP_ENTRANCE); cp3(TT_POINT_TYPE_FIXED_LADDER,SYMP_FIXEDLADDER); cp3(TT_POINT_TYPE_FLOWSTONE,SYMP_FLOWSTONE); cp3(TT_POINT_TYPE_FLOWSTONE_CHOKE,SYMP_FLOWSTONECHOKE); cp3(TT_POINT_TYPE_CLAY_CHOKE,SYMP_CLAYCHOKE); cp3(TT_POINT_TYPE_FLUTE,SYMP_FLUTE); cp3(TT_POINT_TYPE_GRADIENT,SYMP_GRADIENT); cp3(TT_POINT_TYPE_GUANO,SYMP_GUANO); cp3(TT_POINT_TYPE_GYPSUM,SYMP_GYPSUM); cp3(TT_POINT_TYPE_GYPSUM_FLOWER,SYMP_GYPSUMFLOWER); cp3(TT_POINT_TYPE_HELICTITE,SYMP_HELICTITE); cp3(TT_POINT_TYPE_ICE,SYMP_ICE); cp3(TT_POINT_TYPE_SNOW,SYMP_SNOW); cp3(TT_POINT_TYPE_KARREN,SYMP_KARREN); cp3(TT_POINT_TYPE_LABEL,SYMP_LABEL); cp3(TT_POINT_TYPE_LOW_END,SYMP_LOWEND); cp3(TT_POINT_TYPE_MOONMILK,SYMP_MOONMILK); cp3(TT_POINT_TYPE_NARROW_END,SYMP_NARROWEND); cp3(TT_POINT_TYPE_NO_EQUIPMENT,SYMP_NOEQUIPMENT); cp3(TT_POINT_TYPE_PALEO_MATERIAL,SYMP_PALEOMATERIAL); cp3(TT_POINT_TYPE_PEBBLES,SYMP_PEBBLES); cp3(TT_POINT_TYPE_PILLAR,SYMP_PILLAR); cp3(TT_POINT_TYPE_POPCORN,SYMP_POPCORN); cp3(TT_POINT_TYPE_RAFT,SYMP_RAFT); cp3(TT_POINT_TYPE_RAFT_CONE,SYMP_RAFTCONE); cp3(TT_POINT_TYPE_REMARK,SYMP_REMARK); cp3(TT_POINT_TYPE_RIMSTONE_DAM,SYMP_RIMSTONEDAM); cp3(TT_POINT_TYPE_RIMSTONE_POOL,SYMP_RIMSTONEPOOL); cp3(TT_POINT_TYPE_ROOT,SYMP_ROOT); cp3(TT_POINT_TYPE_ROPE,SYMP_ROPE); cp3(TT_POINT_TYPE_ROPE_LADDER,SYMP_ROPELADDER); cp3(TT_POINT_TYPE_SAND,SYMP_SAND); cp3(TT_POINT_TYPE_SECTION,SYMP_SECTION); cp3(TT_POINT_TYPE_SCALLOP,SYMP_SCALLOP); cp3(TT_POINT_TYPE_SINK,SYMP_SINK); cp3(TT_POINT_TYPE_SODA_STRAW,SYMP_SODASTRAW); cp3(TT_POINT_TYPE_SPRING,SYMP_SPRING); cp3(TT_POINT_TYPE_STALACTITE,SYMP_STALACTITE); cp3(TT_POINT_TYPE_STALAGMITE,SYMP_STALAGMITE); cp3(TT_POINT_TYPE_STATION_NAME,SYMP_STATIONNAME); cp3(TT_POINT_TYPE_STEPS,SYMP_STEPS); cp3(TT_POINT_TYPE_TRAVERSE,SYMP_TRAVERSE); cp3(TT_POINT_TYPE_VEGETABLE_DEBRIS,SYMP_VEGETABLEDEBRIS); cp3(TT_POINT_TYPE_WALL_CALCITE,SYMP_WALLCALCITE); cp3(TT_POINT_TYPE_WATER,SYMP_WATER); cp3(TT_POINT_TYPE_ICE_STALACTITE,SYMP_ICESTALACTITE); cp3(TT_POINT_TYPE_ICE_STALAGMITE,SYMP_ICESTALAGMITE); cp3(TT_POINT_TYPE_ICE_PILLAR,SYMP_ICEPILLAR); cp3(TT_POINT_TYPE_HANDRAIL,SYMP_HANDRAIL); cp3(TT_POINT_TYPE_VIA_FERRATA,SYMP_VIAFERRATA); cp3(TT_POINT_TYPE_STALACTITES,SYMP_STALACTITES); cp3(TT_POINT_TYPE_STALAGMITES,SYMP_STALAGMITES); cp3(TT_POINT_TYPE_PILLARS,SYMP_PILLARS); } break; } return rv; } void thsymbolset::export_symbol_defaults(FILE * mpf, const char * symset) { fprintf(mpf,"\n\n\n%% %s symbol set.\n",symset); for(int id = 0; id < SYMX_; id++) { if (thsymbolset__assign[id]) { this->assigned[id] = true; fprintf(mpf,"mapsymbol(\"%s\",\"%s\",false);\n",thsymbolset__mp[id],symset); } } } void thsymbolset::export_symbol_assign(FILE * mpf, int sym_id, const char * symset) { if (sym_id > SYMX_) export_symbol_assign_group(mpf, sym_id, symset); else if (thsymbolset__assign[sym_id]) { fprintf(mpf,"mapsymbol(\"%s\",\"%s\",true);\n",thsymbolset__mp[sym_id],symset); } } void thsymbolset::export_symbol_hide(FILE * mpf, int sym_id) { if (sym_id > SYMX_) export_symbol_hide_group(mpf, sym_id); else this->assigned[sym_id] = false; } void thsymbolset::export_symbol_show(FILE * mpf, int sym_id) { if (sym_id > SYMX_) export_symbol_show_group(mpf, sym_id); else this->assigned[sym_id] = true; } void thsymbolset::export_symbol_color(FILE * mpf, int sym_id, thlayout_color * clr) { if (sym_id > SYMX_) export_symbol_color_group(mpf, sym_id, clr); else { this->color[sym_id] = *clr; this->color[sym_id].defined = true; } } void thsymbolset::export_symbol_color_group(FILE * mpf, int sym_id, thlayout_color * clr) { int id = 0; int cid = thsymbolset__get_group(sym_id,id++); while (cid >= 0) { this->export_symbol_color(mpf, cid, clr); cid = thsymbolset__get_group(sym_id,id++); } } void thsymbolset::export_symbol_assign_group(FILE * mpf, int sym_id, const char * symset) { int id = 0; int cid = thsymbolset__get_group(sym_id,id++); while (cid >= 0) { this->export_symbol_assign(mpf, cid, symset); cid = thsymbolset__get_group(sym_id,id++); } } void thsymbolset::export_symbol_hide_group(FILE * mpf, int sym_id) { int id = 0; int cid = thsymbolset__get_group(sym_id,id++); while (cid >= 0) { this->export_symbol_hide(mpf, cid); cid = thsymbolset__get_group(sym_id,id++); } } void thsymbolset::export_symbol_show_group(FILE * mpf, int sym_id) { int id = 0; int cid = thsymbolset__get_group(sym_id,id++); while (cid >= 0) { this->export_symbol_show(mpf, cid); cid = thsymbolset__get_group(sym_id,id++); } } #define bgroup(gid) case gid: \ switch (cid) { #define group(id,mid) case id: rv = mid; break; #define egroup } break; int thsymbolset__get_group(int group_id, int cid) { int rv = -1; switch (group_id) { case SYMX_ALL: if (cid < SYMS_) rv = cid; break; bgroup(SYMX_SECTIONS) group(0,SYMP_SECTION) group(1,SYML_SECTION) egroup bgroup(SYMX_CENTERLINE) group(0,SYMX_POINT_STATION) group(1,SYML_SURVEY_SURFACE) group(2,SYML_SURVEY_CAVE) group(3,SYMP_STATIONNAME) egroup bgroup(SYMX_TEXT) group(0,SYMP_LABEL) group(1,SYMP_REMARK) group(2,SYMP_DATE) group(3,SYML_LABEL) egroup bgroup(SYMX_WATER) group(0,SYMX_LINE_WATERFLOW) group(1,SYMX_POINT_WATERFLOW) group(2,SYMP_WATER) group(3,SYMA_WATER) group(4,SYMA_SUMP) group(5,SYMP_SPRING) group(6,SYMP_SINK) egroup bgroup(SYMX_EQUIPMENT) group( 0,SYMP_ANCHOR); group( 1,SYMP_ROPE); group( 2,SYMP_FIXEDLADDER); group( 3,SYMP_ROPELADDER); group( 4,SYMP_STEPS); group( 5,SYMP_BRIDGE); group( 6,SYMP_TRAVERSE); group( 7,SYMP_CAMP); group( 8,SYMP_NOEQUIPMENT); group( 9,SYML_ROPE); group(10,SYML_HANDRAIL); group(11,SYMP_HANDRAIL); group(12,SYML_FIXEDLADDER); group(13,SYML_ROPELADDER); group(14,SYMP_VIAFERRATA); group(15,SYML_VIAFERRATA); group(16,SYML_STEPS); egroup bgroup(SYMX_SPELEOTHEMS) group( 0,SYMP_FLOWSTONE); group( 1,SYMP_MOONMILK); group( 2,SYMP_STALACTITE); group( 3,SYMP_STALAGMITE); group( 4,SYMP_PILLAR); group( 5,SYMP_CURTAIN); group( 6,SYMP_HELICTITE); group( 7,SYMP_SODASTRAW); group( 8,SYMP_CRYSTAL); group( 9,SYMP_WALLCALCITE); group(10,SYMP_POPCORN); group(11,SYMP_DISK); group(12,SYMP_GYPSUM); group(13,SYMP_GYPSUMFLOWER); group(14,SYMP_ARAGONITE); group(15,SYMP_CAVEPEARL); group(16,SYMP_RIMSTONEPOOL); group(17,SYMP_RIMSTONEDAM); group(19,SYML_FLOWSTONE); group(20,SYML_MOONMILK); group(21,SYMA_FLOWSTONE) group(22,SYMA_MOONMILK) egroup bgroup(SYMX_ICE) group(0,SYML_WALL_ICE); group(1,SYMP_ICE); group(2,SYMP_ICESTALACTITE); group(3,SYMP_ICESTALAGMITE); group(4,SYMP_ICEPILLAR); group(5,SYMP_SNOW); group(6,SYMA_ICE); group(7,SYMA_SNOW); egroup bgroup(SYMX_SEDIMENTS) group(0,SYML_WALL_SAND); group(1,SYML_WALL_CLAY); group(2,SYMP_SAND); group(3,SYMP_CLAY); group(4,SYMA_SAND); group(5,SYMA_CLAY); group(6,SYMP_CLAYTREE); group(7,SYMP_RAFT); group(8,SYMP_RAFTCONE); group(9,SYMP_GUANO); egroup bgroup(SYMX_PASSAGEFILLS) group(0,SYMX_POINT_WATERFLOW) group(1,SYMP_BEDROCK); group(2,SYMP_SAND); group(3,SYMP_RAFT); group(4,SYMP_CLAY); group(5,SYMP_PEBBLES); group(6,SYMP_DEBRIS); group(7,SYMP_BLOCKS); group(8,SYMP_WATER); group(9,SYMP_ICE); group(10,SYMP_GUANO); group(11,SYMP_SNOW); group(12,SYML_ROCKBORDER); group(13,SYML_ROCKEDGE); group(14,SYMX_LINE_WATERFLOW) group(15,SYMA_WATER) group(16,SYMA_SUMP) group(17,SYMA_BEDROCK) group(18,SYMA_BLOCKS) group(19,SYMA_CLAY) group(20,SYMA_DEBRIS) group(21,SYMA_ICE) group(22,SYMA_PEBBLES) group(23,SYMA_SAND) group(24,SYMA_SNOW) egroup bgroup(SYMX_SURFACECENTERLINE) group(0,SYMP_SURFACESTATION) group(1,SYML_SURVEY_SURFACE) egroup bgroup(SYMX_POINT_FLAG) group(0,SYMP_FLAG_ENTRANCE) group(1,SYMP_FLAG_CONTINUATION) group(2,SYMP_FLAG_SINK) group(3,SYMP_FLAG_SPRING) group(4,SYMP_FLAG_DOLINE) group(5,SYMP_FLAG_DIG) group(6,SYMP_FLAG_AIRDRAUGHT) group(7,SYMP_FLAG_ARCH) group(8,SYMP_FLAG_OVERHANG) egroup bgroup(SYMX_CAVECENTERLINE) group(0,SYMP_CAVESTATION) group(1,SYML_SURVEY_CAVE) egroup bgroup(SYMX_LINE_WALL) group(0,SYML_WALL_BEDROCK) group(1,SYML_WALL_BLOCKS) group(2,SYML_WALL_CLAY) group(3,SYML_WALL_DEBRIS) group(4,SYML_WALL_ICE) group(5,SYML_WALL_PEBBLES) group(6,SYML_WALL_PRESUMED) group(7,SYML_WALL_SAND) group(8,SYML_WALL_UNDERLYING) group(9,SYML_WALL_UNSURVEYED) group(10,SYML_WALL_PIT) group(11,SYML_WALL_OVERLYING) group(12,SYML_WALL_MOONMILK) group(13,SYML_WALL_FLOWSTONE) egroup bgroup(SYMX_LINE_WATERFLOW) group(0,SYML_WATERFLOW_CONJECTURAL) group(1,SYML_WATERFLOW_INTERMITTENT) group(2,SYML_WATERFLOW_PERMANENT) egroup bgroup(SYMX_LINE_BORDER) group(0,SYML_BORDER_TEMPORARY) group(1,SYML_BORDER_VISIBLE) egroup bgroup(SYMX_LINE_SURVEY) group(0,SYML_SURVEY_CAVE) group(1,SYML_SURVEY_SURFACE) egroup bgroup(SYMX_POINT_STATION) group(0,SYMP_STATION_FIXED) group(1,SYMP_STATION_NATURAL) group(2,SYMP_STATION_PAINTED) group(3,SYMP_STATION_TEMPORARY) group(4,SYMP_SURFACESTATION) group(5,SYMP_CAVESTATION) egroup bgroup(SYMX_POINT_AIRDRAUGHT) group(0,SYMP_AIRDRAUGHT) group(1,SYMP_AIRDRAUGHT_SUMMER) group(2,SYMP_AIRDRAUGHT_WINTER) egroup bgroup(SYMX_POINT_WATERFLOW) group(0,SYMP_WATERFLOW_INTERMITTENT) group(1,SYMP_WATERFLOW_PALEO) group(2,SYMP_WATERFLOW_PERMANENT) egroup bgroup(SYMX_POINT_PASSAGEHEIGHT) group(0,SYMP_PASSAGEHEIGHT_POSITIVE) group(1,SYMP_PASSAGEHEIGHT_NEGATIVE) group(2,SYMP_PASSAGEHEIGHT_BOTH) group(3,SYMP_PASSAGEHEIGHT_UNSIGNED) egroup bgroup(SYMX_POINT_HEIGHT) group(0,SYMP_HEIGHT_POSITIVE) group(1,SYMP_HEIGHT_NEGATIVE) group(2,SYMP_HEIGHT_UNSIGNED) egroup } return rv; } void thsymbolset::export_pdf(class thlayout * layout, FILE * mpf, unsigned & sfig) { list::iterator LEGENDITEM; legendrecord dummlr; LEGENDLIST.clear(); thbuffer texb; texb.guarantee(128); unsigned symn = 0; bool isin[thsymbolset_size]; for(int i = 0; i < thsymbolset_size; i++) isin[i] = true; if (layout->legend == TT_LAYOUT_LEGEND_ALL) { this->export_symbol_show_group(mpf, SYMX_POINT_FLAG); } // TODO: // + section point (rez), line (ciara), arrow (sipocka) // + wall:pebbles, wall:clay, wall:ice // + point: passase-height (p,n,pn,u), height (p,n,u), date, label, remark // + line: label #define helpsymbol fprintf(mpf,"drawoptions(withcolor HelpSymbolColor);\n"); #define endhelpsymbol fprintf(mpf,"drawoptions();\n"); #define isused(mid) \ (this->assigned[mid] && \ (this->used[mid] || (layout->legend == TT_LAYOUT_LEGEND_ALL))) // vlozi figure do metapostu #define insfig(mid,txt) \ if (((mid == 0) || (isused(mid))) && (strlen(txt) > 0)) {\ isin[mid] = false;\ LEGENDITEM = LEGENDLIST.insert(LEGENDLIST.end(),dummlr); \ fprintf(mpf,"beginfig(%d);\n",sfig); \ fprintf(mpf,"clean_legend_box;\n"); \ sprintf(texb.get_buffer(),"data.%d",sfig); \ LEGENDITEM->idfig = (unsigned) sfig; \ LEGENDITEM->idsym = (unsigned) mid; \ LEGENDITEM->idnum = (unsigned) symn; \ LEGENDITEM->fname = texb.get_buffer(); \ LEGENDITEM->name = thlegend_u2string(unsigned(symn++)); \ LEGENDITEM->descr = txt; \ sfig++; #define endfig \ fprintf(mpf,"draw_legend_box;\nendfig;\n"); \ } #define legend_point(mid,txt) \ insfig(mid,txt); \ this->export_mp_symbol_options(mpf, mid); \ fprintf(mpf,"%s((0.5,0.5) inscale,0.0,1.0,(0,0));\n",thsymbolset__mp[mid]); \ endfig; #define legend_hpoint(mid,txt) \ insfig(mid,txt); \ this->export_mp_symbol_options(mpf, mid); \ fprintf(mpf,"%s((0.5,0.5) inscale,270.0,1.0,(0,0));\n",thsymbolset__mp[mid]); \ endfig; // meracie body + polygon + station-name #define legend_station(mid,txt) \ insfig(mid,txt); \ this->export_mp_symbol_options(mpf, mid); \ fprintf(mpf,"%s((0.5,0.5) inscale);\n",thsymbolset__mp[mid]); \ endfig; // thT("point station") legend_station(SYMP_STATION_TEMPORARY,thT("point station:temporary",layout->lang)); legend_station(SYMP_STATION_PAINTED,thT("point station:painted",layout->lang)); legend_station(SYMP_STATION_NATURAL,thT("point station:natural",layout->lang)); legend_station(SYMP_STATION_FIXED,thT("point station:fixed",layout->lang)); #define legend_station_flag(mid,txt,flag) \ insfig(mid,txt); \ this->export_mp_symbol_options(mpf, mid); \ fprintf(mpf,"p_station((0.5,0.5) inscale, 0, \"\", \"%s\");\n",flag); \ endfig; legend_station_flag(SYMP_FLAG_ENTRANCE,thT("point flag:entrance",layout->lang),"entrance"); legend_station_flag(SYMP_FLAG_SINK,thT("point flag:sink",layout->lang),"sink"); legend_station_flag(SYMP_FLAG_SPRING,thT("point flag:spring",layout->lang),"spring"); legend_station_flag(SYMP_FLAG_DOLINE,thT("point flag:doline",layout->lang),"doline"); legend_station_flag(SYMP_FLAG_DIG,thT("point flag:dig",layout->lang),"dig"); legend_station_flag(SYMP_FLAG_CONTINUATION,thT("point flag:continuation",layout->lang),"continuation"); legend_station_flag(SYMP_FLAG_AIRDRAUGHT,thT("point flag:air-draught",layout->lang),"airdraught"); legend_station_flag(SYMP_FLAG_ARCH,thT("point flag:arch",layout->lang),"arch"); legend_station_flag(SYMP_FLAG_OVERHANG,thT("point flag:overhang",layout->lang),"overhang"); #define insert_station(x,y) \ helpsymbol \ if (true || isused(SYMP_STATION_TEMPORARY)) \ fprintf(mpf,"%s((%g,%g) inscale);\n",thsymbolset__mp[SYMP_STATION_TEMPORARY],x,y); \ else \ if isused(SYMP_STATION_PAINTED) \ fprintf(mpf,"%s((%g,%g) inscale);\n",thsymbolset__mp[SYMP_STATION_PAINTED],x,y); \ else \ if isused(SYMP_STATION_NATURAL) \ fprintf(mpf,"%s((%g,%g) inscale);\n",thsymbolset__mp[SYMP_STATION_NATURAL],x,y); \ else \ if isused(SYMP_STATION_FIXED) \ fprintf(mpf,"%s((%g,%g) inscale);\n",thsymbolset__mp[SYMP_STATION_FIXED],x,y); \ endhelpsymbol; insfig(SYML_SURVEY_CAVE,thT("line survey",layout->lang)); this->export_mp_symbol_options(mpf, SYML_SURVEY_CAVE); fprintf(mpf,"%s(((-1,1) -- (0.8,0.6) -- (0,-1)) inscale);\n", thsymbolset__mp[SYML_SURVEY_CAVE]); insert_station(0.8,0.6); endfig; insfig(SYMP_STATIONNAME,thT("point station-name",layout->lang)); this->export_mp_symbol_options(mpf, SYMP_STATIONNAME); fprintf(mpf,"p_label.urt(btex \\thstationname %s etex,((0.3,0.3) inscale),0,7);\n",utf2tex("173")); insert_station(0.3,0.3); endfig; legend_hpoint(SYMP_ENTRANCE,thT("point entrance",layout->lang)); insfig(SYML_MAPCONNECTION,thT("line map-connection",layout->lang)); this->export_mp_symbol_options(mpf, SYML_MAPCONNECTION); fprintf(mpf,"%s(((0.2,0.8) -- (0.8,0.2)) inscale)",thsymbolset__mp[SYML_MAPCONNECTION]); endfig; // steny + wall-altitude + altitude #define legend_wall(mid,txt) \ insfig(mid,txt); \ this->export_mp_symbol_options(mpf, mid); \ fprintf(mpf,"%s(((-.3,0.5) .. (.3,.3) .. (.7,.7) .. (1.3,.5)) inscale);\n",thsymbolset__mp[mid]); \ endfig; // thT("line wall") legend_wall(SYML_WALL_BEDROCK,thT("line wall:bedrock",layout->lang)); legend_wall(SYML_WALL_UNDERLYING,thT("line wall:underlying",layout->lang)); legend_wall(SYML_WALL_OVERLYING,thT("line wall:overlying",layout->lang)); legend_wall(SYML_WALL_UNSURVEYED,thT("line wall:unsurveyed",layout->lang)); legend_wall(SYML_WALL_PRESUMED,thT("line wall:presumed",layout->lang)); legend_wall(SYML_WALL_PIT,thT("line wall:pit",layout->lang)); legend_wall(SYML_WALL_BLOCKS,thT("line wall:blocks",layout->lang)); legend_wall(SYML_WALL_DEBRIS,thT("line wall:debris",layout->lang)); legend_wall(SYML_WALL_PEBBLES,thT("line wall:pebbles",layout->lang)); legend_wall(SYML_WALL_SAND,thT("line wall:sand",layout->lang)); legend_wall(SYML_WALL_CLAY,thT("line wall:clay",layout->lang)); legend_wall(SYML_WALL_ICE,thT("line wall:ice",layout->lang)); legend_wall(SYML_WALL_FLOWSTONE,thT("line wall:flowstone",layout->lang)); legend_wall(SYML_WALL_MOONMILK,thT("line wall:moonmilk",layout->lang)); insfig(SYMP_WALLALTITUDE,thT("point wall-altitude",layout->lang)); helpsymbol; if (true || isused(SYML_WALL_BEDROCK)) fprintf(mpf,"%s(((-.3,0.5) .. controls (.2,.6) and (.2,.6) .. (.3,.7) .. controls (.4,.8) and (.4,.8) .. (.5,1.4)) inscale);\n",thsymbolset__mp[SYML_WALL_BEDROCK]); endhelpsymbol; this->export_mp_symbol_options(mpf, SYMP_WALLALTITUDE); fprintf(mpf,"%s((0.2,0.6) inscale,(0.3,0.7) inscale,(0.4,0.8) inscale,btex \\thwallaltitude %s etex);\n",thsymbolset__mp[SYMP_WALLALTITUDE],utf2tex("1510")); endfig; insfig(SYMP_ALTITUDE,thT("point altitude",layout->lang)); this->export_mp_symbol_options(mpf, SYMP_ALTITUDE); fprintf(mpf,"p_label.rt(btex \\thaltitude %s etex,((0.3,0.5) inscale),0,1);\n",utf2tex("1510")); endfig; // thT("point section") insfig(SYML_SECTION,thT("line section",layout->lang)); helpsymbol; if (true || (true || isused(SYML_WALL_BEDROCK))) { fprintf(mpf,"%s(((.25,1.0) .. (.2,.5){dir 270} .. (.15,0.0)) inscale);\n",thsymbolset__mp[SYML_WALL_BEDROCK]); fprintf(mpf,"%s(((.3,0.0) .. (.4,.5){dir 90} .. (.5,1.0)) inscale);\n",thsymbolset__mp[SYML_WALL_BEDROCK]); if (true || isused(SYMP_SECTION)) { fprintf(mpf,"%s(((.7,.5){dir 90} .. (.9,.75){dir 270} .. (.8,.15){dir 235} .. cycle) inscale);\n",thsymbolset__mp[SYML_WALL_BEDROCK]); } } endhelpsymbol; this->export_mp_symbol_options(mpf, SYML_SECTION); fprintf(mpf,"%s(((0,.5) .. controls (.195,.5) and (.405,.5) .. (.6,.5)) inscale,1);\n",thsymbolset__mp[SYML_SECTION]); endfig; // vysky chodby #define insert_big_passage \ helpsymbol; \ if (true || isused(SYML_WALL_BEDROCK)) { \ fprintf(mpf,"%s(((.35,1.0) .. (.3,.5){dir 270} .. (.25,0.0)) inscale);\n",thsymbolset__mp[SYML_WALL_BEDROCK]); \ fprintf(mpf,"%s(((.6,0.0) .. (.7,.5){dir 90} .. (.8,1.0)) inscale);\n",thsymbolset__mp[SYML_WALL_BEDROCK]); \ } \ endhelpsymbol; #define insert_big_water_passage \ helpsymbol; \ if (true || isused(SYML_WALL_BEDROCK)) { \ fprintf(mpf,"%s(((.35,1.0) .. (.3,.5){dir 270} .. (.25,0.0)) inscale);\n",thsymbolset__mp[SYML_WALL_BEDROCK]); \ fprintf(mpf,"%s(((.6,0.0) .. (.7,.5){dir 90} .. (.8,1.0)) inscale);\n",thsymbolset__mp[SYML_WALL_BEDROCK]); \ } \ endhelpsymbol; // thT("point passage-height") insfig(SYMP_PASSAGEHEIGHT_UNSIGNED,thT("point passage-height:unsigned",layout->lang)); //insert_big_passage this->export_mp_symbol_options(mpf, SYMP_PASSAGEHEIGHT_UNSIGNED); fprintf(mpf,"p_label(btex \\thframed %s etex,((0.5,0.5) inscale),0,5);\n",utf2tex("5")); endfig; insfig(SYMP_PASSAGEHEIGHT_POSITIVE,thT("point passage-height:positive",layout->lang)); //insert_big_water_passage this->export_mp_symbol_options(mpf, SYMP_PASSAGEHEIGHT_POSITIVE); fprintf(mpf,"p_label(btex \\thframed %s etex,((0.5,0.5) inscale),0,2);\n",utf2tex("3")); endfig; insfig(SYMP_PASSAGEHEIGHT_NEGATIVE,thT("point passage-height:negative",layout->lang)); //insert_big_water_passage this->export_mp_symbol_options(mpf, SYMP_PASSAGEHEIGHT_NEGATIVE); fprintf(mpf,"p_label(btex \\thframed %s etex,((0.5,0.5) inscale),0,3);\n",utf2tex("2")); endfig; insfig(SYMP_PASSAGEHEIGHT_BOTH,thT("point passage-height:both",layout->lang)); //insert_big_water_passage this->export_mp_symbol_options(mpf, SYMP_PASSAGEHEIGHT_BOTH); fprintf(mpf,"p_label(btex \\thframed \\updown{%s}",utf2tex("3")); fprintf(mpf,"{%s} etex,((0.5,0.5) inscale),0,4);\n",utf2tex("2")); endfig; legend_hpoint(SYMP_AIRDRAUGHT,thT("point air-draught",layout->lang)); legend_hpoint(SYMP_AIRDRAUGHT_WINTER,thT("point air-draught:winter",layout->lang)); legend_hpoint(SYMP_AIRDRAUGHT_SUMMER,thT("point air-draught:summer",layout->lang)); thdate d; d.parse("1999.12.31"); insfig(SYMP_DATE,thT("point date",layout->lang)); //insert_big_water_passage this->export_mp_symbol_options(mpf, SYMP_DATE); fprintf(mpf,"p_label(btex \\thdate %s etex,((0.5,0.5) inscale),0,0);\n",utf2tex(d.get_str(TT_DATE_FMT_UTF8_ISO))); endfig; // ukoncenia #define legend_end(mid,txt) \ insfig(mid,txt); \ helpsymbol; \ if (true || isused(SYML_WALL_BEDROCK)) {\ fprintf(mpf,"%s(((0,.2){dir 30} .. {dir 0}(.5,.4)) inscale);\n",thsymbolset__mp[SYML_WALL_BEDROCK]); \ fprintf(mpf,"%s(((.5,.6){dir 180} .. {dir 210}(0,.8)) inscale);\n",thsymbolset__mp[SYML_WALL_BEDROCK]); \ } \ endhelpsymbol; \ this->export_mp_symbol_options(mpf, mid); \ fprintf(mpf,"%s((.6,.5) inscale,270.0,1.0,(0,1));\n",thsymbolset__mp[mid]); \ endfig; legend_point(SYMP_DIG,thT("point dig",layout->lang)) legend_end(SYMP_CONTINUATION,thT("point continuation",layout->lang)) legend_end(SYMP_NARROWEND,thT("point narrow-end",layout->lang)) legend_end(SYMP_LOWEND,thT("point low-end",layout->lang)) legend_end(SYMP_FLOWSTONECHOKE,thT("point flowstone-choke",layout->lang)) legend_end(SYMP_BREAKDOWNCHOKE,thT("point breakdown-choke",layout->lang)) legend_end(SYMP_CLAYCHOKE,thT("point clay-choke",layout->lang)) #define legend_iuline "(((.1,.6) .. (.5,.4) .. (.9,.6)) inscale)" #define legend_cline "(((.85,.5){dir 90} .. (.5,.85){dir 180} .. (.4,.15){dir 0} .. cycle) inscale)" #define legend_scline "(((.5,.5){dir 90} .. (.3,.75){dir 180} .. (.15,.5) .. (.2,.25){dir 0} .. cycle) inscale)" #define legend_step(mid,txt) \ insfig(mid,txt); \ this->export_mp_symbol_options(mpf, mid); \ fprintf(mpf,"%s(%s);\n",thsymbolset__mp[mid],legend_iuline); \ endfig; #define legend_cycle(mid,txt) \ insfig(mid,txt); \ this->export_mp_symbol_options(mpf, mid); \ fprintf(mpf,"%s(%s);\n",thsymbolset__mp[mid],legend_cline); \ endfig; #define insert_small_passage \ helpsymbol; \ if (true || isused(SYML_WALL_BEDROCK)) { \ fprintf(mpf,"%s(((.2,1.0) .. (.15,.5){dir 270} .. (.1,0.0)) inscale);\n",thsymbolset__mp[SYML_WALL_BEDROCK]); \ fprintf(mpf,"%s(((.4,0.0) .. (.5,.5){dir 90} .. (.6,1.0)) inscale);\n",thsymbolset__mp[SYML_WALL_BEDROCK]); \ } \ endhelpsymbol; // zrazy + kominy + priepasti + gradient legend_step(SYML_FLOORSTEP,thT("line floor-step",layout->lang)); legend_step(SYML_OVERHANG,thT("line overhang",layout->lang)); legend_step(SYML_FLOORMEANDER,thT("line floor-meander",layout->lang)); legend_cycle(SYML_PIT,thT("line pit",layout->lang)); legend_step(SYML_CEILINGSTEP,thT("line ceiling-step",layout->lang)); legend_step(SYML_CEILINGMEANDER,thT("line ceiling-meander",layout->lang)); legend_cycle(SYML_CHIMNEY,thT("line chimney",layout->lang)); if isused(SYML_GRADIENT) { insfig(SYML_GRADIENT,thT("line gradient",layout->lang)); this->export_mp_symbol_options(mpf, SYML_GRADIENT); fprintf(mpf,"%s(((0.2,0.5) -- (0.8,0.5)) inscale);\n",thsymbolset__mp[SYML_GRADIENT]); endfig; } if ((!(isused(SYML_GRADIENT)) || (!(this->group_symbols)))) { this->export_mp_symbol_options(mpf, SYMP_GRADIENT); legend_hpoint(SYMP_GRADIENT,thT("point gradient",layout->lang)); } // thT("point height") // thT("point dimensions") insfig(SYMP_HEIGHT_UNSIGNED,thT("point height:unsigned",layout->lang)); helpsymbol; if isused(SYML_FLOORSTEP) { fprintf(mpf,"%s(((.15,.5){dir 340} .. (.5,.5)) inscale);\n",thsymbolset__mp[SYML_FLOORSTEP]); insert_small_passage } else if isused(SYML_PIT) { fprintf(mpf,"%s(((.15,.5){dir 340} .. (.5,.5)) inscale);\n",thsymbolset__mp[SYML_PIT]); insert_small_passage } endhelpsymbol; this->export_mp_symbol_options(mpf, SYMP_HEIGHT_UNSIGNED); fprintf(mpf,"p_label.rt(btex \\thheight %s etex,((0.5,0.5) inscale),0,7);\n",utf2tex("4")); endfig; insfig(SYMP_HEIGHT_POSITIVE,thT("point height:positive",layout->lang)); helpsymbol; if isused(SYML_CHIMNEY) fprintf(mpf,"%s(%s);\n",thsymbolset__mp[SYML_CHIMNEY],legend_scline); endhelpsymbol; this->export_mp_symbol_options(mpf, SYMP_HEIGHT_POSITIVE); fprintf(mpf,"p_label.rt(btex \\thheightpos %s etex,((0.5,0.5) inscale),0,7);\n",utf2tex("15")); endfig; insfig(SYMP_HEIGHT_NEGATIVE,thT("point height:negative",layout->lang)); helpsymbol; if isused(SYML_PIT) fprintf(mpf,"%s(%s);\n",thsymbolset__mp[SYML_PIT],legend_scline); endhelpsymbol; this->export_mp_symbol_options(mpf, SYMP_HEIGHT_NEGATIVE); fprintf(mpf,"p_label.rt(btex \\thheightneg %s etex,((0.5,0.5) inscale),0,7);\n",utf2tex("30")); endfig; insfig(SYML_CONTOUR,thT("line contour",layout->lang)); this->export_mp_symbol_options(mpf, SYML_CONTOUR); fprintf(mpf,"%s(%s,-1);\n",thsymbolset__mp[SYML_CONTOUR],legend_iuline); endfig; insfig(SYML_SLOPE,thT("line slope",layout->lang)); this->export_mp_symbol_options(mpf, SYML_SLOPE); fprintf(mpf,"%s((((.1,.35) .. (.5,.25) .. (.9,.35)) inscale),1,(0,-1,1u),(2,-1,1u));\n",thsymbolset__mp[SYML_SLOPE]); endfig; // kamene insfig(SYML_ROCKBORDER,thT("line rock-border",layout->lang)); this->export_mp_symbol_options(mpf, SYML_ROCKBORDER); fprintf(mpf,"%s(((.16,.36) -- (.61,.21) -- (.91,.46) -- (.84,.78) -- (.38,.86) -- (.20,.55) -- cycle) inscale)",thsymbolset__mp[SYML_ROCKBORDER]); endfig; insfig(SYML_ROCKEDGE,thT("line rock-edge",layout->lang)); helpsymbol; if isused(SYML_ROCKBORDER) fprintf(mpf,"%s(((.16,.36) -- (.61,.21) -- (.91,.46) -- (.84,.78) -- (.38,.86) -- (.20,.55) -- cycle) inscale)",thsymbolset__mp[SYML_ROCKBORDER]); endhelpsymbol; this->export_mp_symbol_options(mpf, SYML_ROCKEDGE); fprintf(mpf,"%s(((.16,.36) -- (.42,.62) -- (.38,.86) -- (.42,.62) -- (.6,.55) -- (.61,.21) -- (.6,.55) -- (.84,.78)) inscale)",thsymbolset__mp[SYML_ROCKEDGE]); endfig; // vypln bodova legend_point(SYMP_BEDROCK,thT("point bedrock",layout->lang)); legend_point(SYMP_BLOCKS,thT("point blocks",layout->lang)); legend_point(SYMP_DEBRIS,thT("point debris",layout->lang)); legend_point(SYMP_SAND,thT("point sand",layout->lang)); legend_point(SYMP_CLAY,thT("point clay",layout->lang)); legend_point(SYMP_WATER,thT("point water",layout->lang)); legend_point(SYMP_ICE,thT("point ice",layout->lang)); legend_point(SYMP_SNOW,thT("point snow",layout->lang)); legend_point(SYMP_PEBBLES,thT("point pebbles",layout->lang)); legend_point(SYMP_RAFT,thT("point raft",layout->lang)); legend_point(SYMP_GUANO,thT("point guano",layout->lang)); legend_point(SYMP_CLAYTREE,thT("point clay-tree",layout->lang)); // okraje // thT("line border") legend_cycle(SYML_BORDER_VISIBLE,thT("line border:visible",layout->lang)); legend_cycle(SYML_BORDER_TEMPORARY,thT("line border:temporary",layout->lang)); legend_cycle(SYML_BORDER_PRESUMED,thT("line border:presumed",layout->lang)); // vypln plosna #define legend_area(mid,txt) \ insfig(mid,txt); \ this->export_mp_symbol_options(mpf, mid); \ fprintf(mpf,"%s(buildcycle((((-1,0) -- (1,0) -- (1,1) -- (0,1) -- (0,-1)) inscale)));\n",thsymbolset__mp[mid]); \ endfig; #define legend_nocliparea(mid,txt) \ insfig(mid,txt); \ this->export_mp_symbol_options(mpf, mid); \ fprintf(mpf,"%s(buildcycle((((-4,-4) -- (4,-4) -- (4,4) -- (-4,4) -- (-4,-4)) inscale)));\n",thsymbolset__mp[mid]); \ endfig; legend_area(SYMA_WATER,thT("area water",layout->lang)); legend_area(SYMA_SUMP,thT("area sump",layout->lang)); legend_area(SYMA_SNOW,thT("area snow",layout->lang)); legend_area(SYMA_ICE,thT("area ice",layout->lang)); legend_area(SYMA_SAND,thT("area sand",layout->lang)); legend_area(SYMA_CLAY,thT("area clay",layout->lang)); legend_area(SYMA_PEBBLES,thT("area pebbles",layout->lang)); legend_area(SYMA_DEBRIS,thT("area debris",layout->lang)); legend_area(SYMA_FLOWSTONE,thT("area flowstone",layout->lang)); legend_area(SYMA_MOONMILK,thT("area moonmilk",layout->lang)); legend_nocliparea(SYMA_BLOCKS,thT("area blocks",layout->lang)); legend_nocliparea(SYMA_BEDROCK,thT("area bedrock",layout->lang)); // vodne toky (ciary, body) #define legend_waterflow(mid,txt) \ insfig(mid,txt); \ this->export_mp_symbol_options(mpf, mid); \ fprintf(mpf,"%s(((0.2,0.8) -- (0.8,0.2)) inscale);\n",thsymbolset__mp[mid]); \ endfig; // thT("line water-flow") // thT("point water-flow") if (isused(SYML_WATERFLOW_PERMANENT) && isused(SYMP_WATERFLOW_PERMANENT) && this->group_symbols) { insfig(SYML_WATERFLOW_PERMANENT,thT("line water-flow:permanent",layout->lang)); this->export_mp_symbol_options(mpf, SYML_WATERFLOW_PERMANENT); fprintf(mpf,"%s(((0.1,0.3) -- (0.9,0.3)) inscale);\n",thsymbolset__mp[SYML_WATERFLOW_PERMANENT]); this->export_mp_symbol_options(mpf, SYMP_WATERFLOW_PERMANENT); fprintf(mpf,"%s((0.5,0.7) inscale,270.0,1.0,(0,0));\n",thsymbolset__mp[SYMP_WATERFLOW_PERMANENT]); endfig; } else { legend_waterflow(SYML_WATERFLOW_PERMANENT,thT("line water-flow:permanent",layout->lang)); legend_hpoint(SYMP_WATERFLOW_PERMANENT,thT("point water-flow:permanent",layout->lang)); } if (isused(SYML_WATERFLOW_INTERMITTENT) && isused(SYMP_WATERFLOW_INTERMITTENT) && this->group_symbols) { insfig(SYML_WATERFLOW_INTERMITTENT,thT("line water-flow:intermittent",layout->lang)); this->export_mp_symbol_options(mpf, SYML_WATERFLOW_INTERMITTENT); fprintf(mpf,"%s(((0.1,0.3) -- (0.9,0.3)) inscale);\n",thsymbolset__mp[SYML_WATERFLOW_INTERMITTENT]); this->export_mp_symbol_options(mpf, SYML_WATERFLOW_INTERMITTENT); fprintf(mpf,"%s((0.5,0.7) inscale,270.0,1.0,(0,0));\n",thsymbolset__mp[SYMP_WATERFLOW_INTERMITTENT]); endfig; } else { legend_waterflow(SYML_WATERFLOW_INTERMITTENT,thT("line water-flow:intermittent",layout->lang)); legend_hpoint(SYMP_WATERFLOW_INTERMITTENT,thT("point water-flow:intermittent",layout->lang)); } legend_waterflow(SYML_WATERFLOW_CONJECTURAL,thT("line water-flow:conjectural",layout->lang)); legend_hpoint(SYMP_WATERFLOW_PALEO,thT("point water-flow:paleo",layout->lang)); insfig(SYMP_SPRING,thT("point spring",layout->lang)); helpsymbol; fprintf(mpf,"%s(((0.3,0.5) -- (0.9,0.5)) inscale);\n",thsymbolset__mp[SYML_WATERFLOW_PERMANENT]); endhelpsymbol; this->export_mp_symbol_options(mpf, SYMP_SPRING); fprintf(mpf,"%s((0.3,0.5) inscale,270,1.0,(0,-1));\n",thsymbolset__mp[SYMP_SPRING]); endfig; insfig(SYMP_SINK,thT("point sink",layout->lang)); helpsymbol; fprintf(mpf,"%s(((0.1,0.5) -- (0.7,0.5)) inscale);\n",thsymbolset__mp[SYML_WATERFLOW_PERMANENT]); endhelpsymbol; this->export_mp_symbol_options(mpf, SYMP_SINK); fprintf(mpf,"%s((0.7,0.5) inscale,270,1.0,(0,1));\n",thsymbolset__mp[SYMP_SINK]); endfig; // vyzdoba if (isused(SYMP_FLOWSTONE) && isused(SYML_FLOWSTONE) && this->group_symbols) { insfig(SYMP_FLOWSTONE,thT("point flowstone",layout->lang)); this->export_mp_symbol_options(mpf, SYML_FLOWSTONE); fprintf(mpf,"%s(((.1,.4) .. (.5,.2) .. (.9,.4)) inscale);\n",thsymbolset__mp[SYML_FLOWSTONE]); this->export_mp_symbol_options(mpf, SYMP_FLOWSTONE); fprintf(mpf,"%s((0.5,0.7) inscale,0.0,1.0,(0,0));\n",thsymbolset__mp[SYMP_FLOWSTONE]); endfig; } else { legend_point(SYMP_FLOWSTONE,thT("point flowstone",layout->lang)); legend_step(SYML_FLOWSTONE,thT("line flowstone",layout->lang)); } if (isused(SYMP_MOONMILK) && isused(SYML_MOONMILK) && this->group_symbols) { insfig(SYMP_MOONMILK,thT("point moonmilk",layout->lang)); this->export_mp_symbol_options(mpf, SYML_MOONMILK); fprintf(mpf,"%s(((.1,.4) .. (.5,.2) .. (.9,.4)) inscale);\n",thsymbolset__mp[SYML_MOONMILK]); this->export_mp_symbol_options(mpf, SYMP_MOONMILK); fprintf(mpf,"%s((0.5,0.7) inscale,0.0,1.0,(0,0));\n",thsymbolset__mp[SYMP_MOONMILK]); endfig; } else { legend_point(SYMP_MOONMILK,thT("point moonmilk",layout->lang)); legend_step(SYML_MOONMILK,thT("line moonmilk",layout->lang)); } legend_point(SYMP_STALACTITE,thT("point stalactite",layout->lang)); legend_point(SYMP_STALACTITES,thT("point stalactites",layout->lang)); legend_point(SYMP_STALAGMITE,thT("point stalagmite",layout->lang)); legend_point(SYMP_STALAGMITES,thT("point stalagmites",layout->lang)); legend_point(SYMP_PILLAR,thT("point pillar",layout->lang)); legend_point(SYMP_PILLARS,thT("point pillars",layout->lang)); legend_point(SYMP_ICESTALACTITE,thT("point ice-stalactite",layout->lang)); legend_point(SYMP_ICESTALAGMITE,thT("point ice-stalagmite",layout->lang)); legend_point(SYMP_ICEPILLAR,thT("point ice-pillar",layout->lang)); legend_point(SYMP_CURTAIN,thT("point curtain",layout->lang)); legend_point(SYMP_SODASTRAW,thT("point soda-straw",layout->lang)); legend_point(SYMP_POPCORN,thT("point popcorn",layout->lang)); legend_point(SYMP_CAVEPEARL,thT("point cave-pearl",layout->lang)); legend_point(SYMP_DISK,thT("point disk",layout->lang)); legend_point(SYMP_HELICTITE,thT("point helictite",layout->lang)); legend_point(SYMP_ARAGONITE,thT("point aragonite",layout->lang)); legend_point(SYMP_CRYSTAL,thT("point crystal",layout->lang)); legend_point(SYMP_WALLCALCITE,thT("point wall-calcite",layout->lang)); legend_point(SYMP_GYPSUM,thT("point gypsum",layout->lang)); legend_point(SYMP_GYPSUMFLOWER,thT("point gypsum-flower",layout->lang)); legend_point(SYMP_RIMSTONEDAM,thT("point rimstone-dam",layout->lang)); legend_point(SYMP_RIMSTONEPOOL,thT("point rimstone-pool",layout->lang)); legend_point(SYMP_ANASTOMOSIS,thT("point anastomosis",layout->lang)); legend_point(SYMP_KARREN,thT("point karren",layout->lang)); legend_point(SYMP_SCALLOP,thT("point scallop",layout->lang)); legend_point(SYMP_FLUTE,thT("point flute",layout->lang)); legend_point(SYMP_RAFTCONE,thT("point raft-cone",layout->lang)); // ostatne materialy legend_point(SYMP_ARCHEOMATERIAL,thT("point archeo-material",layout->lang)); legend_point(SYMP_PALEOMATERIAL,thT("point paleo-material",layout->lang)); legend_point(SYMP_VEGETABLEDEBRIS,thT("point vegetable-debris",layout->lang)); legend_point(SYMP_ROOT,thT("point root",layout->lang)); #define legend_eqline(mid,txt) \ insfig(mid,txt); \ this->export_mp_symbol_options(mpf, mid); \ fprintf(mpf,"%s(((0.1,0.5) .. (0.9,.5)) inscale);\n",thsymbolset__mp[mid]); \ endfig; // vystroj legend_point(SYMP_NOEQUIPMENT,thT("point no-equipment",layout->lang)); legend_point(SYMP_ANCHOR,thT("point anchor",layout->lang)); legend_point(SYMP_ROPE,thT("point rope",layout->lang)); legend_eqline(SYML_ROPE,thT("line rope",layout->lang)); legend_point(SYMP_ROPELADDER,thT("point rope-ladder",layout->lang)); legend_eqline(SYML_ROPELADDER,thT("line rope-ladder",layout->lang)); legend_point(SYMP_FIXEDLADDER,thT("point fixed-ladder",layout->lang)); legend_eqline(SYML_FIXEDLADDER,thT("line fixed-ladder",layout->lang)); legend_point(SYMP_STEPS,thT("point steps",layout->lang)); insfig(SYML_STEPS,thT("line steps",layout->lang)); this->export_mp_symbol_options(mpf, SYML_STEPS); fprintf(mpf,"%s(((0.1,0.3) -- (0.9,.3) -- (0.9,0.7) -- (0.1,0.7) -- cycle) inscale);\n",thsymbolset__mp[SYML_STEPS]); endfig; legend_point(SYMP_VIAFERRATA,thT("point via-ferrata",layout->lang)); legend_eqline(SYML_VIAFERRATA,thT("line via-ferrata",layout->lang)); legend_point(SYMP_TRAVERSE,thT("point traverse",layout->lang)); legend_point(SYMP_BRIDGE,thT("point bridge",layout->lang)); legend_point(SYMP_HANDRAIL,thT("point handrail",layout->lang)); legend_eqline(SYML_HANDRAIL,thT("line handrail",layout->lang)); legend_point(SYMP_CAMP,thT("point camp",layout->lang)); // thT("point remark") // thT("point label") // thT("line label") // nakoniec prejde uzivatelsky definovane symboly thdb2d_udef_map::iterator it; std::string udef_desc; int mid = SYMX_; if (layout->db != NULL) { for(it = layout->db->db2d.m_udef_map.begin(); it != layout->db->db2d.m_udef_map.end(); it++) { if (it->second->m_assigned && (it->second->m_used || (layout->legend == TT_LAYOUT_LEGEND_ALL))) { switch (it->first.m_command) { case TT_POINT_CMD: udef_desc = "point"; break; case TT_LINE_CMD: udef_desc = "line"; break; case TT_AREA_CMD: udef_desc = "area"; break; } udef_desc += " u:"; udef_desc += it->first.m_type; if (strlen(thT(udef_desc.c_str(), layout->lang)) > 0) { insfig(0,thsymbolset__mp[0]); switch (it->first.m_command) { case TT_POINT_CMD: fprintf(mpf,"p_u_%s_legend;\n",it->first.m_type); break; case TT_LINE_CMD: fprintf(mpf,"l_u_%s_legend;\n",it->first.m_type); break; case TT_AREA_CMD: fprintf(mpf,"a_u_%s_legend;\n",it->first.m_type); break; } LEGENDITEM->descr = thT(udef_desc.c_str(), layout->lang); LEGENDITEM->idsym = (unsigned) mid++; endfig; } } } } } void export_all_symbols() { // vytvori si temporary MP subor FILE * mpf; thlayout tmplayout; tmplayout.lang = THLANG_SYSTEM; mpf = fopen(thtmp.get_file_name("data.mp"),"w"); // spusti metapost a nasledne pdftex // fprintf(mpf,"Scale:=%.2f;\n",0.01 / tmplayout.scale); // if (tmplayout.def_base_scale || tmplayout.redef_base_scale) // fprintf(mpf,"BaseScale:=%.2f;\n",0.01 / tmplayout.base_scale); fprintf(mpf,"Scale:=0.8;\n"); fprintf(mpf,"BaseScale:=2;\n"); fprintf(mpf,"color HelpSymbolColor;\nHelpSymbolColor := (0.8, 0.8, 0.8);\n"); fprintf(mpf,"background:=(1.0, 1.0, 1.0);\n"); fprintf(mpf,"verbatimtex \\input th_enc.tex etex;\n"); if (thcmdln.extern_libs) fprintf(mpf,"input therion;\n"); else fprintf(mpf,"%s\n",thmpost_library); fprintf(mpf,"lang:=\"%s\";\n",thlang_getid(tmplayout.lang)); if (ENC_NEW.NFSS==0) fprintf(mpf,"defaultfont:=\"%s\";\n",FONTS.begin()->ss.c_str()); else fprintf(mpf,"defaultfont:=\"thss00\";\n"); tmplayout.export_mpost(mpf); fprintf(mpf,"background:=white;\n"); fprintf(mpf,"transparency:=false;\n"); // vyexportuje secky znacky size_t iset, isym; unsigned figi = 1; thsymbolset symset; thsymsets_symbols_init(); list::iterator li; // najprv exportujeme secky defaultne tmplayout.legend = TT_LAYOUT_LEGEND_ALL; LEGENDLIST.clear(); symset.group_symbols = false; symset.export_pdf(&tmplayout, mpf, figi); for(isym = 0; isym < thsymbolset_size; isym++) { thsymsets_figure[isym][thsymsets_size] = 0; thsymsets_order[isym] = 0; } for(li = LEGENDLIST.begin(); li != LEGENDLIST.end(); li++) { thsymsets_figure[li->idsym][thsymsets_size] = li->idfig; thsymsets_comment[li->idsym] = li->descr; thsymsets_order[li->idnum] = li->idsym; } tmplayout.legend = TT_LAYOUT_LEGEND_ON; for (iset = 0; iset < thsymsets_size; iset++) { LEGENDLIST.clear(); symset.export_symbol_defaults(mpf, thsymsets[iset]); for(isym = 0; isym < thsymbolset_size; isym++) { if (thsymsets_symbols[isym][iset] > 0) symset.used[isym] = true; else symset.used[isym] = false; } symset.export_pdf(&tmplayout, mpf, figi); for(isym = 0; isym < thsymbolset_size; isym++) { thsymsets_figure[isym][iset] = 0; } thsymsets_count[iset] = 0; for(li = LEGENDLIST.begin(); li != LEGENDLIST.end(); li++) { thsymsets_figure[li->idsym][iset] = li->idfig; thsymsets_count[iset]++; } } fprintf(mpf,"end;\n"); fclose(mpf); // run MP thbuffer com, wdir; wdir.guarantee(1024); getcwd(wdir.get_buffer(),1024); chdir(thtmp.get_dir_name()); // vypise kodovania print_fonts_setup(); int retcode; #ifdef THWIN32 if (!thini.tex_env) { putenv("TEXMFCNF="); putenv("DVIPSHEADERS="); putenv("GFFONTS="); putenv("GLYPHFONTS="); putenv("MFBASES="); putenv("MFINPUTS="); putenv("MFPOOL="); #ifdef THMSVC putenv("MPINPUTS=../mpost;."); #else putenv("MPINPUTS="); #endif putenv("MPMEMS="); putenv("MPPOOL="); putenv("MPSUPPORT="); putenv("PKFONTS="); putenv("PSHEADERS="); putenv("T1FONTS="); putenv("T1INPUTS="); putenv("T42FONTS="); putenv("TEXCONFIG="); putenv("TEXDOCS="); putenv("TEXFONTMAPS="); putenv("TEXFONTS="); putenv("TEXFORMATS="); putenv("TEXINPUTS="); putenv("TEXMFDBS="); putenv("TEXMFINI="); putenv("TEXPICTS="); putenv("TEXPKS="); putenv("TEXPOOL="); putenv("TEXPSHEADERS="); putenv("TEXSOURCES="); putenv("TFMFONTS="); putenv("TTFONTS="); putenv("VFFONTS="); putenv("WEB2C="); } #endif // exportuje com = "\""; com += thini.get_path_mpost(); com += "\" "; com += thini.get_opt_mpost(); // com += " --interaction nonstopmode data.mp"; com += " data.mp"; #ifdef THDEBUG thprintf("running metapost\n"); #endif retcode = system(com.get_buffer()); thsymbolset_log_log_file("data.log", "####################### metapost log file ########################\n", "#################### end of metapost log file ####################\n",true); if (retcode != EXIT_SUCCESS) { chdir(wdir.get_buffer()); ththrow(("metapost exit code -- %d", retcode)) } thconvert_new(); chdir(wdir.get_buffer()); ofstream hf ("symbols.xhtml"); hf << "\n"; hf << "Therion symbols\n\n"; hf << "\n\n\n"; for(iset = 0; iset < thsymsets_size; iset++) { if (thsymsets_count[iset] > 0) { hf << "\n"; } } hf << "\n"; unsigned sx, fx; char fname[100]; converted_data svgpict; double a,b,c,d; for(isym = 0; isym < thsymbolset_size; isym++) { if(thsymsets_order[isym] > 0) { sx = thsymsets_order[isym]; hf << "\n\n"; fx = 0; for(iset = 0; iset < thsymsets_size; iset++) { fx += thsymsets_figure[sx][iset]; } if (fx > 0) { for(iset = 0; iset < thsymsets_size; iset++) { if (thsymsets_count[iset] > 0) { fx = thsymsets_figure[sx][iset]; if (fx > 0) { sprintf(fname, "%s/data.%d", thtmp.get_dir_name(),fx); parse_eps(fname,"",0,0,a,b,c,d,svgpict); hf << "\n"; } else { hf << "\n"; } } } } else { sprintf(fname, "%s/data.%d", thtmp.get_dir_name(),thsymsets_figure[sx][thsymsets_size]); parse_eps(fname,"",0,0,a,b,c,d,svgpict); hf << "\n"; } hf << "\n"; } } hf << "
Symbol set" << thsymsets[iset] << "
" << thsymsets_comment[sx].c_str() << "\n"; svgpict.print_svg(hf); hf << ""; svgpict.print_svg(hf); hf << "
\n"; hf << "" << endl; hf.close(); } void thsymbolset::export_mp_symbol_options(FILE * mpf, int sym_id) { if ((sym_id >= 0) && (this->color[sym_id].defined)) { fprintf(mpf,"drawoptions(withcolor (%.6f,%.6f,%.6f));\n", this->color[sym_id].R, this->color[sym_id].G, this->color[sym_id].B); } else { fprintf(mpf,"drawoptions();\n"); } } bool thsymbolset::is_assigned(int symbol) { if (symbol < SYMX_) return this->assigned[symbol]; if (symbol > SYMX_) { int id = 0; int cid = thsymbolset__get_group(symbol,id++); while (cid >= 0) { if (this->assigned[cid]) return true; cid = thsymbolset__get_group(symbol,id++); } } return false; } therion/thsymbolset.h0000644000076400010400000000614412043473772016031 0ustar userAdministrators/** * @file thsymbolset.h * Symbol set class. */ /* Copyright (C) 2003 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thsymbolset_h #define thsymbolset_h #include "thsymbolsetlist.h" #include "thlayoutclr.h" #include /** * Symbol set class. */ struct thsymbolset { bool assigned[thsymbolset_size], ///< definovane symboly used[thsymbolset_size]; ///< pouzite symboly thlayout_color color[thsymbolset_size]; ///< Symbol colors. bool group_symbols; ///< Ci zgrupuje podobne symboly alebo nie. thsymbolset(); /** * Vrati macro a zaragistruje ho ako pouzite. */ const char * get_mp_macro(int id); /** * Return whether symbol is assigned. */ bool is_assigned(int symbol); /** * Do MP suboru zapise mapsymbol() makro. */ void export_symbol_defaults(FILE * mpf, const char * symset); /** * Do MP suboru zapise mapsymbol() makro + zmeni hidden value. */ void export_symbol_assign(FILE * mpf, int sym_id, const char * symset); /** * Skryje symbol. */ void export_symbol_hide(FILE * mpf, int sym_id); /** * Zobrazi symbol. */ void export_symbol_show(FILE * mpf, int sym_id); /** * Set symbol color. */ void export_symbol_color(FILE * mpf, int sym_id, thlayout_color * clr); /** * Do MP suboru zapise mapsymbol() makro + zmeni hidden value. */ void export_symbol_assign_group(FILE * mpf, int sym_id, const char * symset); /** * Skryje symbol. */ void export_symbol_hide_group(FILE * mpf, int sym_id); /** * Zobrazi symbol. */ void export_symbol_show_group(FILE * mpf, int sym_id); /** * Set symbol color. */ void export_symbol_color_group(FILE * mpf, int sym_id, thlayout_color * clr); /** * Exportuje znackovy kluc do pdfka. */ void export_pdf(class thlayout * layout, FILE * mpf, unsigned & sfig); /** * Export symbol options to metapost. */ void export_mp_symbol_options(FILE * mpf, int sym_id); }; /** * Vrati ID z popisu classu a symbolu. */ int thsymbolset__get_id(const char * symclass, const char * symbol); /** * Vrati ID itemu z groupy. */ int thsymbolset__get_group(int group_id, int cid); /** * Export all symbols. */ void export_all_symbols(); #endif therion/thsymbolsetfont.txt0000644000076400010400000000214412000602626017265 0ustar userAdministratorsCHAR CODE SYMBOL ! 33 airdraught " 34 airdraught_summer # 35 airdraught_winter $ 36 anastomosis % 37 anchor & 38 aragonite ' 39 archeomaterial ( 40 bedrock ) 41 blocks * 42 breakdownchoke + 43 bridge , 44 camp - 45 cavepearl . 46 clay / 47 claychoke 0 48 claytree 1 49 continuation 2 50 crystal 3 51 curtain 4 52 debris 5 53 dig 6 54 disk 7 55 entrance 8 56 fixedladder 9 57 flowstone : 58 flowstonechoke ; 59 flute < 60 gradient = 61 guano > 62 gypsum ? 63 gypsumflower @ 64 helictite A 65 ice B 66 icepillar C 67 icestalactite D 68 icestalagmite E 69 karren F 70 lowend G 71 moonmilk H 72 narrowend I 73 noequipment J 74 paleomaterial K 75 pebbles L 76 pillar M 77 popcorn N 78 raft O 79 raftcone P 80 rimstonedam Q 81 rimstonepool R 82 root S 83 rope T 84 ropeladder U 85 sand V 86 scallop W 87 sink X 88 snow Y 89 sodastraw Z 90 spring [ 91 stalactite \ 92 stalagmite ] 93 station ^ 94 station_fixed _ 95 station_natural ` 96 station_painted a 97 station_temporary b 98 steps c 99 traverse d 100 vegetabledebris e 101 wallcalcite f 102 water g 103 waterflow_intermittent h 104 waterflow_paleo i 105 waterflow_permanent therion/thsymbolsetlist.h0000644000076400010400000004267212047251762016730 0ustar userAdministrators/** * thsymbolsetlist.h * * THIS FILE IS GENERATED AUTOMATICALLY, DO NOT MODIFY IT !!! */ #ifndef thsymbolsetlist_h #define thsymbolsetlist_h #define thsymbolset_size 206 enum { SYMA_ = 0, SYMA_BEDROCK = 1, SYMA_BLOCKS = 2, SYMA_CLAY = 3, SYMA_DEBRIS = 4, SYMA_DIMENSIONS = 5, SYMA_FLOWSTONE = 6, SYMA_ICE = 7, SYMA_MOONMILK = 8, SYMA_PEBBLES = 9, SYMA_SAND = 10, SYMA_SNOW = 11, SYMA_SUMP = 12, SYMA_U = 13, SYMA_WATER = 14, SYMA_ZZZ = 15, SYML_ = 16, SYML_ARROW = 17, SYML_BORDER_INVISIBLE = 18, SYML_BORDER_PRESUMED = 19, SYML_BORDER_TEMPORARY = 20, SYML_BORDER_VISIBLE = 21, SYML_CEILINGMEANDER = 22, SYML_CEILINGSTEP = 23, SYML_CHIMNEY = 24, SYML_CONTOUR = 25, SYML_FIXEDLADDER = 26, SYML_FLOORMEANDER = 27, SYML_FLOORSTEP = 28, SYML_FLOWSTONE = 29, SYML_GRADIENT = 30, SYML_HANDRAIL = 31, SYML_LABEL = 32, SYML_MAPCONNECTION = 33, SYML_MOONMILK = 34, SYML_OVERHANG = 35, SYML_PIT = 36, SYML_ROCKBORDER = 37, SYML_ROCKEDGE = 38, SYML_ROPE = 39, SYML_ROPELADDER = 40, SYML_SECTION = 41, SYML_SLOPE = 42, SYML_STEPS = 43, SYML_SURVEY_CAVE = 44, SYML_SURVEY_SURFACE = 45, SYML_U = 46, SYML_UNDEFINED = 47, SYML_VIAFERRATA = 48, SYML_WALL_BEDROCK = 49, SYML_WALL_BLOCKS = 50, SYML_WALL_CLAY = 51, SYML_WALL_DEBRIS = 52, SYML_WALL_FLOWSTONE = 53, SYML_WALL_ICE = 54, SYML_WALL_INVISIBLE = 55, SYML_WALL_MOONMILK = 56, SYML_WALL_OVERLYING = 57, SYML_WALL_PEBBLES = 58, SYML_WALL_PIT = 59, SYML_WALL_PRESUMED = 60, SYML_WALL_SAND = 61, SYML_WALL_UNDERLYING = 62, SYML_WALL_UNSURVEYED = 63, SYML_WATERFLOW_CONJECTURAL = 64, SYML_WATERFLOW_INTERMITTENT = 65, SYML_WATERFLOW_PERMANENT = 66, SYML_ZZZ = 67, SYMP_ = 68, SYMP_AIRDRAUGHT = 69, SYMP_AIRDRAUGHT_SUMMER = 70, SYMP_AIRDRAUGHT_WINTER = 71, SYMP_ALTITUDE = 72, SYMP_ANASTOMOSIS = 73, SYMP_ANCHOR = 74, SYMP_ARAGONITE = 75, SYMP_ARCHEOMATERIAL = 76, SYMP_BEDROCK = 77, SYMP_BLOCKS = 78, SYMP_BREAKDOWNCHOKE = 79, SYMP_BRIDGE = 80, SYMP_CAMP = 81, SYMP_CAVEPEARL = 82, SYMP_CAVESTATION = 83, SYMP_CLAY = 84, SYMP_CLAYCHOKE = 85, SYMP_CLAYTREE = 86, SYMP_CONTINUATION = 87, SYMP_CRYSTAL = 88, SYMP_CURTAIN = 89, SYMP_DATE = 90, SYMP_DEBRIS = 91, SYMP_DIG = 92, SYMP_DISK = 93, SYMP_ENTRANCE = 94, SYMP_FIXEDLADDER = 95, SYMP_FLAG_AIRDRAUGHT = 96, SYMP_FLAG_ARCH = 97, SYMP_FLAG_CONTINUATION = 98, SYMP_FLAG_DIG = 99, SYMP_FLAG_DOLINE = 100, SYMP_FLAG_ENTRANCE = 101, SYMP_FLAG_OVERHANG = 102, SYMP_FLAG_SINK = 103, SYMP_FLAG_SPRING = 104, SYMP_FLOWSTONE = 105, SYMP_FLOWSTONECHOKE = 106, SYMP_FLUTE = 107, SYMP_GRADIENT = 108, SYMP_GUANO = 109, SYMP_GYPSUM = 110, SYMP_GYPSUMFLOWER = 111, SYMP_HANDRAIL = 112, SYMP_HEIGHT_NEGATIVE = 113, SYMP_HEIGHT_POSITIVE = 114, SYMP_HEIGHT_UNSIGNED = 115, SYMP_HELICTITE = 116, SYMP_ICE = 117, SYMP_ICEPILLAR = 118, SYMP_ICESTALACTITE = 119, SYMP_ICESTALAGMITE = 120, SYMP_KARREN = 121, SYMP_LABEL = 122, SYMP_LOWEND = 123, SYMP_MAPCONNECTION = 124, SYMP_MOONMILK = 125, SYMP_NARROWEND = 126, SYMP_NOEQUIPMENT = 127, SYMP_PALEOMATERIAL = 128, SYMP_PASSAGEHEIGHT_BOTH = 129, SYMP_PASSAGEHEIGHT_NEGATIVE = 130, SYMP_PASSAGEHEIGHT_POSITIVE = 131, SYMP_PASSAGEHEIGHT_UNSIGNED = 132, SYMP_PEBBLES = 133, SYMP_PILLAR = 134, SYMP_PILLARS = 135, SYMP_POPCORN = 136, SYMP_RAFT = 137, SYMP_RAFTCONE = 138, SYMP_REMARK = 139, SYMP_RIMSTONEDAM = 140, SYMP_RIMSTONEPOOL = 141, SYMP_ROOT = 142, SYMP_ROPE = 143, SYMP_ROPELADDER = 144, SYMP_SAND = 145, SYMP_SCALLOP = 146, SYMP_SECTION = 147, SYMP_SECTIONARROW = 148, SYMP_SINK = 149, SYMP_SNOW = 150, SYMP_SODASTRAW = 151, SYMP_SPRING = 152, SYMP_STALACTITE = 153, SYMP_STALACTITES = 154, SYMP_STALAGMITE = 155, SYMP_STALAGMITES = 156, SYMP_STATION = 157, SYMP_STATION_FIXED = 158, SYMP_STATION_NATURAL = 159, SYMP_STATION_PAINTED = 160, SYMP_STATION_TEMPORARY = 161, SYMP_STATIONNAME = 162, SYMP_STEPS = 163, SYMP_SURFACESTATION = 164, SYMP_TRAVERSE = 165, SYMP_U = 166, SYMP_UNDEFINED = 167, SYMP_VEGETABLEDEBRIS = 168, SYMP_VIAFERRATA = 169, SYMP_WALLALTITUDE = 170, SYMP_WALLCALCITE = 171, SYMP_WATER = 172, SYMP_WATERFLOW_INTERMITTENT = 173, SYMP_WATERFLOW_PALEO = 174, SYMP_WATERFLOW_PERMANENT = 175, SYMP_ZZZ = 176, SYMS_ = 177, SYMS_HGRID = 178, SYMS_NORTHARROW = 179, SYMS_SCALEBAR = 180, SYMS_VGRID = 181, SYMS_ZZZ = 182, SYMX_ = 183, SYMX_ALL = 184, SYMX_CAVECENTERLINE = 185, SYMX_CENTERLINE = 186, SYMX_EQUIPMENT = 187, SYMX_ICE = 188, SYMX_LINE_BORDER = 189, SYMX_LINE_SURVEY = 190, SYMX_LINE_WALL = 191, SYMX_LINE_WATERFLOW = 192, SYMX_PASSAGEFILLS = 193, SYMX_POINT_AIRDRAUGHT = 194, SYMX_POINT_FLAG = 195, SYMX_POINT_HEIGHT = 196, SYMX_POINT_PASSAGEHEIGHT = 197, SYMX_POINT_STATION = 198, SYMX_POINT_WATERFLOW = 199, SYMX_SECTIONS = 200, SYMX_SEDIMENTS = 201, SYMX_SPELEOTHEMS = 202, SYMX_SURFACECENTERLINE = 203, SYMX_TEXT = 204, SYMX_WATER = 205, }; typedef const char * thsymbolset__char_ptr; static const thsymbolset__char_ptr thsymbolset__mp [] = { "a_", "a_bedrock", "a_blocks", "a_clay", "a_debris", "a_dimensions", "a_flowstone", "a_ice", "a_moonmilk", "a_pebbles", "a_sand", "a_snow", "a_sump", "a_u", "a_water", "a_zzz", "l_", "l_arrow", "l_border_invisible", "l_border_presumed", "l_border_temporary", "l_border_visible", "l_ceilingmeander", "l_ceilingstep", "l_chimney", "l_contour", "l_fixedladder", "l_floormeander", "l_floorstep", "l_flowstone", "l_gradient", "l_handrail", "l_label", "l_mapconnection", "l_moonmilk", "l_overhang", "l_pit", "l_rockborder", "l_rockedge", "l_rope", "l_ropeladder", "l_section", "l_slope", "l_steps", "l_survey_cave", "l_survey_surface", "l_u", "l_undefined", "l_viaferrata", "l_wall_bedrock", "l_wall_blocks", "l_wall_clay", "l_wall_debris", "l_wall_flowstone", "l_wall_ice", "l_wall_invisible", "l_wall_moonmilk", "l_wall_overlying", "l_wall_pebbles", "l_wall_pit", "l_wall_presumed", "l_wall_sand", "l_wall_underlying", "l_wall_unsurveyed", "l_waterflow_conjectural", "l_waterflow_intermittent", "l_waterflow_permanent", "l_zzz", "p_", "p_airdraught", "p_airdraught_summer", "p_airdraught_winter", "p_altitude", "p_anastomosis", "p_anchor", "p_aragonite", "p_archeomaterial", "p_bedrock", "p_blocks", "p_breakdownchoke", "p_bridge", "p_camp", "p_cavepearl", "p_cavestation", "p_clay", "p_claychoke", "p_claytree", "p_continuation", "p_crystal", "p_curtain", "p_date", "p_debris", "p_dig", "p_disk", "p_entrance", "p_fixedladder", "p_flag_airdraught", "p_flag_arch", "p_flag_continuation", "p_flag_dig", "p_flag_doline", "p_flag_entrance", "p_flag_overhang", "p_flag_sink", "p_flag_spring", "p_flowstone", "p_flowstonechoke", "p_flute", "p_gradient", "p_guano", "p_gypsum", "p_gypsumflower", "p_handrail", "p_height_negative", "p_height_positive", "p_height_unsigned", "p_helictite", "p_ice", "p_icepillar", "p_icestalactite", "p_icestalagmite", "p_karren", "p_label", "p_lowend", "p_mapconnection", "p_moonmilk", "p_narrowend", "p_noequipment", "p_paleomaterial", "p_passageheight_both", "p_passageheight_negative", "p_passageheight_positive", "p_passageheight_unsigned", "p_pebbles", "p_pillar", "p_pillars", "p_popcorn", "p_raft", "p_raftcone", "p_remark", "p_rimstonedam", "p_rimstonepool", "p_root", "p_rope", "p_ropeladder", "p_sand", "p_scallop", "p_section", "p_sectionarrow", "p_sink", "p_snow", "p_sodastraw", "p_spring", "p_stalactite", "p_stalactites", "p_stalagmite", "p_stalagmites", "p_station", "p_station_fixed", "p_station_natural", "p_station_painted", "p_station_temporary", "p_stationname", "p_steps", "p_surfacestation", "p_traverse", "p_u", "p_undefined", "p_vegetabledebris", "p_viaferrata", "p_wallaltitude", "p_wallcalcite", "p_water", "p_waterflow_intermittent", "p_waterflow_paleo", "p_waterflow_permanent", "p_zzz", "s_", "s_hgrid", "s_northarrow", "s_scalebar", "s_vgrid", "s_zzz", "x_", "x_all", "x_cavecenterline", "x_centerline", "x_equipment", "x_ice", "x_line_border", "x_line_survey", "x_line_wall", "x_line_waterflow", "x_passagefills", "x_point_airdraught", "x_point_flag", "x_point_height", "x_point_passageheight", "x_point_station", "x_point_waterflow", "x_sections", "x_sediments", "x_speleothems", "x_surfacecenterline", "x_text", "x_water", }; static const bool thsymbolset__assign [] = { false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, true, false, true, true, true, true, true, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, true, true, true, false, true, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, true, false, true, true, true, true, true, false, false, false, false, false, false, false, false, false, true, true, true, true, true, true, true, true, false, false, false, true, true, true, true, true, true, false, true, false, true, true, true, true, false, false, false, false, true, true, true, true, true, true, false, true, true, true, true, true, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, true, false, true, true, false, true, true, false, true, true, true, true, true, false, false, true, true, true, true, false, false, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, }; static const bool thsymbolset__hidden [] = { true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, }; static const thsymbolset__char_ptr thsymbolset__src [] = { "SYMA_", "SYMA_BEDROCK", "SYMA_BLOCKS", "SYMA_CLAY", "SYMA_DEBRIS", "SYMA_DIMENSIONS", "SYMA_FLOWSTONE", "SYMA_ICE", "SYMA_MOONMILK", "SYMA_PEBBLES", "SYMA_SAND", "SYMA_SNOW", "SYMA_SUMP", "SYMA_U", "SYMA_WATER", "SYMA_ZZZ", "SYML_", "SYML_ARROW", "SYML_BORDER_INVISIBLE", "SYML_BORDER_PRESUMED", "SYML_BORDER_TEMPORARY", "SYML_BORDER_VISIBLE", "SYML_CEILINGMEANDER", "SYML_CEILINGSTEP", "SYML_CHIMNEY", "SYML_CONTOUR", "SYML_FIXEDLADDER", "SYML_FLOORMEANDER", "SYML_FLOORSTEP", "SYML_FLOWSTONE", "SYML_GRADIENT", "SYML_HANDRAIL", "SYML_LABEL", "SYML_MAPCONNECTION", "SYML_MOONMILK", "SYML_OVERHANG", "SYML_PIT", "SYML_ROCKBORDER", "SYML_ROCKEDGE", "SYML_ROPE", "SYML_ROPELADDER", "SYML_SECTION", "SYML_SLOPE", "SYML_STEPS", "SYML_SURVEY_CAVE", "SYML_SURVEY_SURFACE", "SYML_U", "SYML_UNDEFINED", "SYML_VIAFERRATA", "SYML_WALL_BEDROCK", "SYML_WALL_BLOCKS", "SYML_WALL_CLAY", "SYML_WALL_DEBRIS", "SYML_WALL_FLOWSTONE", "SYML_WALL_ICE", "SYML_WALL_INVISIBLE", "SYML_WALL_MOONMILK", "SYML_WALL_OVERLYING", "SYML_WALL_PEBBLES", "SYML_WALL_PIT", "SYML_WALL_PRESUMED", "SYML_WALL_SAND", "SYML_WALL_UNDERLYING", "SYML_WALL_UNSURVEYED", "SYML_WATERFLOW_CONJECTURAL", "SYML_WATERFLOW_INTERMITTENT", "SYML_WATERFLOW_PERMANENT", "SYML_ZZZ", "SYMP_", "SYMP_AIRDRAUGHT", "SYMP_AIRDRAUGHT_SUMMER", "SYMP_AIRDRAUGHT_WINTER", "SYMP_ALTITUDE", "SYMP_ANASTOMOSIS", "SYMP_ANCHOR", "SYMP_ARAGONITE", "SYMP_ARCHEOMATERIAL", "SYMP_BEDROCK", "SYMP_BLOCKS", "SYMP_BREAKDOWNCHOKE", "SYMP_BRIDGE", "SYMP_CAMP", "SYMP_CAVEPEARL", "SYMP_CAVESTATION", "SYMP_CLAY", "SYMP_CLAYCHOKE", "SYMP_CLAYTREE", "SYMP_CONTINUATION", "SYMP_CRYSTAL", "SYMP_CURTAIN", "SYMP_DATE", "SYMP_DEBRIS", "SYMP_DIG", "SYMP_DISK", "SYMP_ENTRANCE", "SYMP_FIXEDLADDER", "SYMP_FLAG_AIRDRAUGHT", "SYMP_FLAG_ARCH", "SYMP_FLAG_CONTINUATION", "SYMP_FLAG_DIG", "SYMP_FLAG_DOLINE", "SYMP_FLAG_ENTRANCE", "SYMP_FLAG_OVERHANG", "SYMP_FLAG_SINK", "SYMP_FLAG_SPRING", "SYMP_FLOWSTONE", "SYMP_FLOWSTONECHOKE", "SYMP_FLUTE", "SYMP_GRADIENT", "SYMP_GUANO", "SYMP_GYPSUM", "SYMP_GYPSUMFLOWER", "SYMP_HANDRAIL", "SYMP_HEIGHT_NEGATIVE", "SYMP_HEIGHT_POSITIVE", "SYMP_HEIGHT_UNSIGNED", "SYMP_HELICTITE", "SYMP_ICE", "SYMP_ICEPILLAR", "SYMP_ICESTALACTITE", "SYMP_ICESTALAGMITE", "SYMP_KARREN", "SYMP_LABEL", "SYMP_LOWEND", "SYMP_MAPCONNECTION", "SYMP_MOONMILK", "SYMP_NARROWEND", "SYMP_NOEQUIPMENT", "SYMP_PALEOMATERIAL", "SYMP_PASSAGEHEIGHT_BOTH", "SYMP_PASSAGEHEIGHT_NEGATIVE", "SYMP_PASSAGEHEIGHT_POSITIVE", "SYMP_PASSAGEHEIGHT_UNSIGNED", "SYMP_PEBBLES", "SYMP_PILLAR", "SYMP_PILLARS", "SYMP_POPCORN", "SYMP_RAFT", "SYMP_RAFTCONE", "SYMP_REMARK", "SYMP_RIMSTONEDAM", "SYMP_RIMSTONEPOOL", "SYMP_ROOT", "SYMP_ROPE", "SYMP_ROPELADDER", "SYMP_SAND", "SYMP_SCALLOP", "SYMP_SECTION", "SYMP_SECTIONARROW", "SYMP_SINK", "SYMP_SNOW", "SYMP_SODASTRAW", "SYMP_SPRING", "SYMP_STALACTITE", "SYMP_STALACTITES", "SYMP_STALAGMITE", "SYMP_STALAGMITES", "SYMP_STATION", "SYMP_STATION_FIXED", "SYMP_STATION_NATURAL", "SYMP_STATION_PAINTED", "SYMP_STATION_TEMPORARY", "SYMP_STATIONNAME", "SYMP_STEPS", "SYMP_SURFACESTATION", "SYMP_TRAVERSE", "SYMP_U", "SYMP_UNDEFINED", "SYMP_VEGETABLEDEBRIS", "SYMP_VIAFERRATA", "SYMP_WALLALTITUDE", "SYMP_WALLCALCITE", "SYMP_WATER", "SYMP_WATERFLOW_INTERMITTENT", "SYMP_WATERFLOW_PALEO", "SYMP_WATERFLOW_PERMANENT", "SYMP_ZZZ", "SYMS_", "SYMS_HGRID", "SYMS_NORTHARROW", "SYMS_SCALEBAR", "SYMS_VGRID", "SYMS_ZZZ", "SYMX_", "SYMX_ALL", "SYMX_CAVECENTERLINE", "SYMX_CENTERLINE", "SYMX_EQUIPMENT", "SYMX_ICE", "SYMX_LINE_BORDER", "SYMX_LINE_SURVEY", "SYMX_LINE_WALL", "SYMX_LINE_WATERFLOW", "SYMX_PASSAGEFILLS", "SYMX_POINT_AIRDRAUGHT", "SYMX_POINT_FLAG", "SYMX_POINT_HEIGHT", "SYMX_POINT_PASSAGEHEIGHT", "SYMX_POINT_STATION", "SYMX_POINT_WATERFLOW", "SYMX_SECTIONS", "SYMX_SEDIMENTS", "SYMX_SPELEOTHEMS", "SYMX_SURFACECENTERLINE", "SYMX_TEXT", "SYMX_WATER", }; static const char thsymbolset__fontchar [] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 34, 35, 0, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 0, 46, 47, 48, 49, 50, 51, 0, 52, 53, 54, 55, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 58, 59, 60, 61, 62, 63, 0, 0, 0, 0, 64, 65, 66, 67, 68, 69, 0, 70, 0, 71, 72, 73, 74, 0, 0, 0, 0, 75, 76, 0, 77, 78, 79, 0, 80, 81, 82, 83, 84, 85, 86, 0, 0, 87, 88, 89, 90, 91, 0, 92, 0, 93, 94, 95, 96, 97, 0, 98, 0, 99, 0, 0, 100, 0, 0, 101, 102, 103, 104, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif therion/thsymbolsetlist.pl0000755000076400010400000000733012042160420017070 0ustar userAdministrators#!/usr/bin/perl open(I,"mpost/thTrans.mp"); while () { if (/^\s*(\S+)\s+([plas]{1}[a-z_]+)/) { $SYMHASH{$2} = ""; } } close(I); open(I,"thsymbolsetfont.txt"); while () { if (/^\s*(\S+)\s+(\S+)\s+([a-z_]+)/) { $FNTHASH{"p_$3"} = $2; } } close(I); $SYMHASH{a_} = "noassign hidden"; $SYMHASH{a_u} = ""; $SYMHASH{a_zzz} = "noassign hidden"; $SYMHASH{l_border_invisible} = "hidden"; $SYMHASH{l_wall_invisible} = "hidden"; # ??? $SYMHASH{l_survey} = "noassign"; $SYMHASH{l_undefined} = "noassign"; $SYMHASH{l_label} = "noassign"; $SYMHASH{l_rope} = "noassign hidden"; $SYMHASH{l_u} = ""; $SYMHASH{l_} = "noassign hidden"; $SYMHASH{l_zzz} = "noassign hidden"; $SYMHASH{p_undefined} = "noassign"; $SYMHASH{p_section} = "noassign"; $SYMHASH{p_label} = "noassign"; $SYMHASH{p_remark} = "noassign"; $SYMHASH{p_mapconnection} = "noassign"; $SYMHASH{p_stationname} = "noassign"; $SYMHASH{p_date} = "noassign"; $SYMHASH{p_altitude} = "noassign"; $SYMHASH{p_wallaltitude} = "noassign"; $SYMHASH{p_height_positive} = "noassign"; $SYMHASH{p_height_negative} = "noassign"; $SYMHASH{p_height_unsigned} = "noassign"; $SYMHASH{p_passageheight_positive} = "noassign"; $SYMHASH{p_passageheight_negative} = "noassign"; $SYMHASH{p_passageheight_both} = "noassign"; $SYMHASH{p_passageheight_unsigned} = "noassign"; $SYMHASH{p_surfacestation} = "noassign"; $SYMHASH{p_cavestation} = "noassign"; $SYMHASH{p_flag_entrance} = "noassign hidden"; $SYMHASH{p_flag_spring} = "noassign hidden"; $SYMHASH{p_flag_sink} = "noassign hidden"; $SYMHASH{p_flag_doline} = "noassign hidden"; $SYMHASH{p_flag_airdraught} = "noassign hidden"; $SYMHASH{p_flag_continuation} = "noassign hidden"; $SYMHASH{p_flag_dig} = "noassign hidden"; $SYMHASH{p_flag_arch} = "noassign hidden"; $SYMHASH{p_flag_overhang} = "noassign hidden"; $SYMHASH{p_station} = "hidden"; $SYMHASH{p_u} = ""; $SYMHASH{p_} = "noassign hidden"; $SYMHASH{p_zzz} = "noassign hidden"; $SYMHASH{s_} = "noassign hidden"; $SYMHASH{s_zzz} = "noassign hidden"; $SYMHASH{x_} = "noassign hidden"; $SYMHASH{x_all} = "hidden"; $SYMHASH{x_ice} = "hidden"; $SYMHASH{x_sediments} = "hidden"; $SYMHASH{x_centerline} = "hidden"; $SYMHASH{x_water} = "hidden"; $SYMHASH{x_speleothems} = "hidden"; $SYMHASH{x_passagefills} = "hidden"; $SYMHASH{x_equipment} = "hidden"; $SYMHASH{x_sections} = "hidden"; $SYMHASH{x_text} = "hidden"; $SYMHASH{x_surfacecenterline} = "noassign hidden"; $SYMHASH{x_cavecenterline} = "noassign hidden"; $SYMHASH{x_line_wall} = "hidden"; $SYMHASH{x_line_border} = "hidden"; $SYMHASH{x_line_waterflow} = "hidden"; $SYMHASH{x_line_survey} = "hidden"; $SYMHASH{x_point_waterflow} = "hidden"; $SYMHASH{x_point_station} = "hidden"; $SYMHASH{x_point_flag} = "hidden"; $SYMHASH{x_point_height} = "hidden"; $SYMHASH{x_point_passageheight} = "hidden"; $SYMHASH{x_point_airdraught} = "hidden"; $i = 0; foreach $k (sort keys(%SYMHASH)) { $TK .= " SYM" . uc($k). " = $i,\n"; $TS .= " \"SYM" . uc($k). "\",\n"; $MP .= " \"$k\",\n"; $EX .= ($SYMHASH{$k} =~ /noassign/ ? " false,\n" : " true,\n"); $HN .= ($SYMHASH{$k} =~ /hidden/ ? " true,\n" : " false,\n"); $FC .= ($FNTHASH{$k} =~ /\S+/ ? " $FNTHASH{$k},\n" : " 0,\n"); $i++; } open(O,">thsymbolsetlist.h"); print O < thsymsets_comment; void thsymsets_symbols_init() { size_t i, j; for(i = 0; i <= thsymbolset_size; i++) for(j = 0; j < thsymsets_size; j++) thsymsets_symbols[i][j] = 0; thsymsets_symbols[SYMP_AIRDRAUGHT][1] = 1; thsymsets_symbols[SYMP_AIRDRAUGHT][7] = 1; thsymsets_symbols[SYMP_AIRDRAUGHT_SUMMER][7] = 1; thsymsets_symbols[SYMP_AIRDRAUGHT_WINTER][7] = 1; thsymsets_symbols[SYMP_ANASTOMOSIS][7] = 1; thsymsets_symbols[SYMP_ANCHOR][5] = 1; thsymsets_symbols[SYMP_ARAGONITE][3] = 1; thsymsets_symbols[SYMP_ARCHEOMATERIAL][7] = 1; thsymsets_symbols[SYMP_BEDROCK][0] = 1; thsymsets_symbols[SYMP_BLOCKS][1] = 1; thsymsets_symbols[SYMP_BLOCKS][7] = 1; thsymsets_symbols[SYMP_BREAKDOWNCHOKE][1] = 1; thsymsets_symbols[SYMP_BREAKDOWNCHOKE][3] = 1; thsymsets_symbols[SYMP_BRIDGE][5] = 1; thsymsets_symbols[SYMP_CAMP][5] = 1; thsymsets_symbols[SYMP_CAVEPEARL][5] = 1; thsymsets_symbols[SYMP_CLAY][1] = 1; thsymsets_symbols[SYMP_CLAY][5] = 1; thsymsets_symbols[SYMP_CLAYCHOKE][1] = 1; thsymsets_symbols[SYMP_CLAYTREE][1] = 1; thsymsets_symbols[SYMP_CONTINUATION][7] = 1; thsymsets_symbols[SYMP_CRYSTAL][1] = 1; thsymsets_symbols[SYMP_CRYSTAL][7] = 1; thsymsets_symbols[SYMP_CURTAIN][7] = 1; thsymsets_symbols[SYMP_DEBRIS][1] = 1; thsymsets_symbols[SYMP_DEBRIS][7] = 1; thsymsets_symbols[SYMP_DIG][7] = 1; thsymsets_symbols[SYMP_DISK][7] = 1; thsymsets_symbols[SYMP_ENTRANCE][1] = 1; thsymsets_symbols[SYMP_ENTRANCE][7] = 1; thsymsets_symbols[SYMP_FIXEDLADDER][5] = 1; thsymsets_symbols[SYMP_FLOWSTONE][7] = 1; thsymsets_symbols[SYMP_FLOWSTONECHOKE][3] = 1; thsymsets_symbols[SYMP_FLUTE][7] = 1; thsymsets_symbols[SYMP_GRADIENT][1] = 1; thsymsets_symbols[SYMP_GRADIENT][2] = 1; thsymsets_symbols[SYMP_GRADIENT][3] = 1; thsymsets_symbols[SYMP_GRADIENT][5] = 1; thsymsets_symbols[SYMP_GRADIENT][7] = 1; thsymsets_symbols[SYMP_GUANO][7] = 1; thsymsets_symbols[SYMP_GYPSUM][3] = 1; thsymsets_symbols[SYMP_GYPSUMFLOWER][3] = 1; thsymsets_symbols[SYMP_HANDRAIL][5] = 1; thsymsets_symbols[SYMP_HELICTITE][7] = 1; thsymsets_symbols[SYMP_ICE][1] = 1; thsymsets_symbols[SYMP_ICE][7] = 1; thsymsets_symbols[SYMP_ICEPILLAR][1] = 1; thsymsets_symbols[SYMP_ICESTALACTITE][1] = 1; thsymsets_symbols[SYMP_ICESTALAGMITE][1] = 1; thsymsets_symbols[SYMP_KARREN][7] = 1; thsymsets_symbols[SYMP_LOWEND][3] = 1; thsymsets_symbols[SYMP_LOWEND][7] = 1; thsymsets_symbols[SYMP_MOONMILK][7] = 1; thsymsets_symbols[SYMP_NARROWEND][7] = 1; thsymsets_symbols[SYMP_NOEQUIPMENT][5] = 1; thsymsets_symbols[SYMP_PALEOMATERIAL][7] = 1; thsymsets_symbols[SYMP_PEBBLES][1] = 1; thsymsets_symbols[SYMP_PEBBLES][7] = 1; thsymsets_symbols[SYMP_PILLAR][1] = 1; thsymsets_symbols[SYMP_PILLAR][7] = 1; thsymsets_symbols[SYMP_PILLARS][7] = 1; thsymsets_symbols[SYMP_POPCORN][7] = 1; thsymsets_symbols[SYMP_RAFT][3] = 1; thsymsets_symbols[SYMP_RAFTCONE][3] = 1; thsymsets_symbols[SYMP_RIMSTONEDAM][0] = 1; thsymsets_symbols[SYMP_RIMSTONEPOOL][0] = 1; thsymsets_symbols[SYMP_ROOT][0] = 1; thsymsets_symbols[SYMP_ROPE][5] = 1; thsymsets_symbols[SYMP_ROPELADDER][5] = 1; thsymsets_symbols[SYMP_SAND][1] = 1; thsymsets_symbols[SYMP_SAND][7] = 1; thsymsets_symbols[SYMP_SCALLOP][7] = 1; thsymsets_symbols[SYMP_SINK][1] = 1; thsymsets_symbols[SYMP_SINK][5] = 1; thsymsets_symbols[SYMP_SNOW][5] = 1; thsymsets_symbols[SYMP_SODASTRAW][7] = 1; thsymsets_symbols[SYMP_SPRING][1] = 1; thsymsets_symbols[SYMP_SPRING][5] = 1; thsymsets_symbols[SYMP_STALACTITE][1] = 1; thsymsets_symbols[SYMP_STALACTITE][7] = 1; thsymsets_symbols[SYMP_STALACTITES][7] = 1; thsymsets_symbols[SYMP_STALAGMITE][1] = 1; thsymsets_symbols[SYMP_STALAGMITE][7] = 1; thsymsets_symbols[SYMP_STALAGMITES][7] = 1; thsymsets_symbols[SYMP_STATION][5] = 1; thsymsets_symbols[SYMP_STATION_FIXED][0] = 1; thsymsets_symbols[SYMP_STATION_FIXED][1] = 1; thsymsets_symbols[SYMP_STATION_NATURAL][0] = 1; thsymsets_symbols[SYMP_STATION_PAINTED][1] = 1; thsymsets_symbols[SYMP_STATION_PAINTED][5] = 1; thsymsets_symbols[SYMP_STATION_TEMPORARY][0] = 1; thsymsets_symbols[SYMP_STATION_TEMPORARY][1] = 1; thsymsets_symbols[SYMP_STATION_TEMPORARY][5] = 1; thsymsets_symbols[SYMP_STEPS][5] = 1; thsymsets_symbols[SYMP_TRAVERSE][5] = 1; thsymsets_symbols[SYMP_VEGETABLEDEBRIS][0] = 1; thsymsets_symbols[SYMP_VIAFERRATA][5] = 1; thsymsets_symbols[SYMP_WALLCALCITE][7] = 1; thsymsets_symbols[SYMP_WATER][1] = 1; thsymsets_symbols[SYMP_WATER][7] = 1; thsymsets_symbols[SYMP_WATERFLOW_INTERMITTENT][7] = 1; thsymsets_symbols[SYMP_WATERFLOW_PALEO][7] = 1; thsymsets_symbols[SYMP_WATERFLOW_PERMANENT][7] = 1; thsymsets_symbols[SYML_ARROW][5] = 1; thsymsets_symbols[SYML_BORDER_PRESUMED][5] = 1; thsymsets_symbols[SYML_BORDER_TEMPORARY][5] = 1; thsymsets_symbols[SYML_BORDER_VISIBLE][5] = 1; thsymsets_symbols[SYML_CEILINGMEANDER][4] = 1; thsymsets_symbols[SYML_CEILINGMEANDER][5] = 1; thsymsets_symbols[SYML_CEILINGMEANDER][7] = 1; thsymsets_symbols[SYML_CEILINGSTEP][4] = 1; thsymsets_symbols[SYML_CEILINGSTEP][5] = 1; thsymsets_symbols[SYML_CEILINGSTEP][7] = 1; thsymsets_symbols[SYML_CHIMNEY][4] = 1; thsymsets_symbols[SYML_CHIMNEY][7] = 1; thsymsets_symbols[SYML_CONTOUR][1] = 1; thsymsets_symbols[SYML_CONTOUR][5] = 1; thsymsets_symbols[SYML_CONTOUR][7] = 1; thsymsets_symbols[SYML_FIXEDLADDER][5] = 1; thsymsets_symbols[SYML_FLOORMEANDER][5] = 1; thsymsets_symbols[SYML_FLOORSTEP][1] = 1; thsymsets_symbols[SYML_FLOORSTEP][7] = 1; thsymsets_symbols[SYML_FLOWSTONE][1] = 1; thsymsets_symbols[SYML_FLOWSTONE][7] = 1; thsymsets_symbols[SYML_GRADIENT][2] = 1; thsymsets_symbols[SYML_GRADIENT][7] = 1; thsymsets_symbols[SYML_HANDRAIL][5] = 1; thsymsets_symbols[SYML_MAPCONNECTION][5] = 1; thsymsets_symbols[SYML_MOONMILK][7] = 1; thsymsets_symbols[SYML_OVERHANG][1] = 1; thsymsets_symbols[SYML_OVERHANG][5] = 1; thsymsets_symbols[SYML_PIT][1] = 1; thsymsets_symbols[SYML_PIT][7] = 1; thsymsets_symbols[SYML_ROCKBORDER][7] = 1; thsymsets_symbols[SYML_ROCKEDGE][7] = 1; thsymsets_symbols[SYML_ROPE][5] = 1; thsymsets_symbols[SYML_ROPELADDER][5] = 1; thsymsets_symbols[SYML_SECTION][5] = 1; thsymsets_symbols[SYML_SLOPE][2] = 1; thsymsets_symbols[SYML_SLOPE][5] = 1; thsymsets_symbols[SYML_STEPS][5] = 1; thsymsets_symbols[SYML_SURVEY_CAVE][1] = 1; thsymsets_symbols[SYML_SURVEY_CAVE][5] = 1; thsymsets_symbols[SYML_SURVEY_CAVE][7] = 1; thsymsets_symbols[SYML_SURVEY_SURFACE][5] = 1; thsymsets_symbols[SYML_VIAFERRATA][5] = 1; thsymsets_symbols[SYML_WALL_BEDROCK][7] = 1; thsymsets_symbols[SYML_WALL_BLOCKS][1] = 1; thsymsets_symbols[SYML_WALL_BLOCKS][5] = 1; thsymsets_symbols[SYML_WALL_CLAY][1] = 1; thsymsets_symbols[SYML_WALL_CLAY][5] = 1; thsymsets_symbols[SYML_WALL_DEBRIS][1] = 1; thsymsets_symbols[SYML_WALL_DEBRIS][5] = 1; thsymsets_symbols[SYML_WALL_FLOWSTONE][1] = 1; thsymsets_symbols[SYML_WALL_ICE][1] = 1; thsymsets_symbols[SYML_WALL_ICE][5] = 1; thsymsets_symbols[SYML_WALL_MOONMILK][1] = 1; thsymsets_symbols[SYML_WALL_OVERLYING][1] = 1; thsymsets_symbols[SYML_WALL_PEBBLES][1] = 1; thsymsets_symbols[SYML_WALL_PEBBLES][5] = 1; thsymsets_symbols[SYML_WALL_PIT][1] = 1; thsymsets_symbols[SYML_WALL_PRESUMED][4] = 1; thsymsets_symbols[SYML_WALL_PRESUMED][7] = 1; thsymsets_symbols[SYML_WALL_SAND][1] = 1; thsymsets_symbols[SYML_WALL_SAND][5] = 1; thsymsets_symbols[SYML_WALL_UNDERLYING][1] = 1; thsymsets_symbols[SYML_WALL_UNDERLYING][7] = 1; thsymsets_symbols[SYML_WALL_UNSURVEYED][5] = 1; thsymsets_symbols[SYML_WATERFLOW_CONJECTURAL][5] = 1; thsymsets_symbols[SYML_WATERFLOW_INTERMITTENT][5] = 1; thsymsets_symbols[SYML_WATERFLOW_PERMANENT][7] = 1; thsymsets_symbols[SYMA_BEDROCK][5] = 1; thsymsets_symbols[SYMA_BLOCKS][1] = 1; thsymsets_symbols[SYMA_BLOCKS][5] = 1; thsymsets_symbols[SYMA_CLAY][1] = 1; thsymsets_symbols[SYMA_CLAY][5] = 1; thsymsets_symbols[SYMA_DEBRIS][1] = 1; thsymsets_symbols[SYMA_DEBRIS][5] = 1; thsymsets_symbols[SYMA_DEBRIS][7] = 1; thsymsets_symbols[SYMA_DIMENSIONS][5] = 1; thsymsets_symbols[SYMA_FLOWSTONE][0] = 1; thsymsets_symbols[SYMA_ICE][1] = 1; thsymsets_symbols[SYMA_ICE][5] = 1; thsymsets_symbols[SYMA_MOONMILK][5] = 1; thsymsets_symbols[SYMA_PEBBLES][1] = 1; thsymsets_symbols[SYMA_PEBBLES][5] = 1; thsymsets_symbols[SYMA_SAND][1] = 1; thsymsets_symbols[SYMA_SAND][7] = 1; thsymsets_symbols[SYMA_SNOW][1] = 1; thsymsets_symbols[SYMA_SNOW][5] = 1; thsymsets_symbols[SYMA_SUMP][1] = 1; thsymsets_symbols[SYMA_SUMP][5] = 1; thsymsets_symbols[SYMA_SUMP][7] = 1; thsymsets_symbols[SYMA_WATER][1] = 1; thsymsets_symbols[SYMA_WATER][5] = 1; thsymsets_symbols[SYMA_WATER][7] = 1; } therion/thsymbolsets.h0000644000076400010400000000110112255660056016176 0ustar userAdministrators#ifndef thsymbolsets_h #define thsymbolsets_h #include "thsymbolsetlist.h" #include #include #define thsymsets_size 8 extern int thsymsets_symbols [thsymbolset_size][thsymsets_size]; extern int thsymsets_figure [thsymbolset_size][thsymsets_size+1]; extern int thsymsets_order[thsymbolset_size]; extern int thsymsets_count[thsymsets_size]; extern std::map thsymsets_comment; static const thsymbolset__char_ptr thsymsets [] = { "ASF", "AUT", "BCRA", "NSS", "NZSS", "SKBB", "SM", "UIS", }; void thsymsets_symbols_init(); #endif therion/thtex.cxx0000644000076400010400000005076011446664142015165 0ustar userAdministrators/** * @file thtex.cxx * * THIS FILE IS GENERATED AUTOMATICALLY, DO NOT MODIFY IT !!! */ #include "thtex.h" #ifndef THMSVC const char * thtex_library = "%% \n" "%% therion.tex\n" "%%\n" "%% Copyright (C) 2001-2004 Martin Budaj\n" "%%\n" "%% -------------------------------------------------------------------- \n" "%% This program is free software; you can redistribute it and/or modify\n" "%% it under the terms of the GNU General Public License as published by\n" "%% the Free Software Foundation; either version 2 of the License, or\n" "%% any later version.\n" "%%\n" "%% This program is distributed in the hope that it will be useful,\n" "%% but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" "%% GNU General Public License for more details.\n" "%% \n" "%% You should have received a copy of the GNU General Public License\n" "%% along with this program; if not, write to the Free Software\n" "%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" "%% -------------------------------------------------------------------- \n" "\n" "\\ifx\\pdfoutput\\undefined\n" " \\newlinechar`\\^^J\n" " \\immediate\\write16{^^J^^JProcess me with pdfTeX, please!^^J^^J}\n" " \\expandafter\\end\n" "\\fi\n" "\n" "\\def\\requiredformat{plain}\n" "\\ifx\\requiredformat\\fmtname\\else\n" " \\newlinechar`\\^^J\n" " \\immediate\\write16{^^J^^JTherion works only with plain TeX format!^^J}\n" " \\immediate\\write16{Your format is: \\fmtname^^J^^J}\n" " \\expandafter\\end\n" "\\fi\n" "\n" "\\def\\wlog#1{}\n" "\n" "\n" "\\parindent=0pt\n" "\\raggedbottom\n" "\\nopagenumbers\n" "\\tracingstats=1\n" "\\pdfimageresolution=300\n" "\n" "%\\pdfinfo{/Creator }%\n" "\n" "\\newbox\\xxx\n" "\\newbox\\mapbox\n" "\\newbox\\navbox\n" "\\newcount\\pointerE\n" "\\newcount\\pointerW\n" "\\newcount\\pointerN\n" "\\newcount\\pointerS\n" "\\newtoks\\pointerU\n" "\\newtoks\\pointerD\n" "\\newcount\\pagenum\n" "\\newtoks\\pagename\n" "\\newtoks\\pagelabel\n" "\\newtoks\\opacity \\opacity{0.7}\n" "\\newtoks\\surfaceopacity \\surfaceopacity{0.7}\n" "\\newif\\ifpagenumbering \\pagenumberingfalse\n" "\\newtoks\\bgcolor\n" "\\newif\\iflegendbgfill\n" "\n" "\\let\\ne\\noexpand\n" "\\def\\notdef{notdef}\n" "\n" "% hyperlinks\n" "\n" "\\def\\flatlink#1#2#3#4#5{%\n" " \\setbox\\xxx=\\hbox{}\\wd\\xxx=#3bp\\ht\\xxx=#4bp%\n" " \\rlap{\\kern#1bp\\raise#2bp\\hbox{%\n" " \\vbox to0bp{\\vss\\hbox to 0bp{%\n" " \\pdfstartlink attr {/Border [0 0 0]} goto name {#5}%\n" " \\box\\xxx\\pdfendlink\\hss}}}}}%\n" "\n" "\\def\\textlink#1#2{%\n" " \\pdfstartlink attr {/Border [0 0 0]} goto name {#2}#1\\pdfendlink}%\n" "\n" "\n" "\\def\\includechars#1:#2\\endinclude{\\pdfincludechars#1{#2}}\n" "\n" "\\newbox\\tmpboxa\n" "\\newbox\\tmpboxb\n" "\n" "\\newdimen\\legendsymbolwd\n" "\\newdimen\\legendsymbolht \\legendsymbolht=12pt\n" "\\newdimen\\tmpdimen\n" "\n" "\\def\\legendsymbolbox#1#2{%\n" " \\setbox\\tmpboxa=\\hbox{\\pdfrefxform#1}%\n" " \\setbox\\tmpboxb=\\hbox{\\the\\legendtextsize(}%\n" " \\legendsymbolwd=\\wd\\tmpboxa\n" " \\legendsymbolht=\\ht\\tmpboxa\n" " \\advance\\legendsymbolht by -\\ht\\tmpboxb\n" " \\advance\\legendsymbolht by -1dd\n" " \\tmpdimen=\\hsize\n" " \\advance\\tmpdimen by 10pt \n" " \\divide\\tmpdimen by\\legendcolumns \n" " \\advance\\tmpdimen by-10pt\n" " \\hbox to \\tmpdimen{%\n" " \\box\\tmpboxa\\kern10pt\\raise\\legendsymbolht\\vtop{%\n" " \\advance\\tmpdimen by -\\legendsymbolwd\n" " \\advance\\tmpdimen by -10pt\n" " \\hsize=\\tmpdimen\\rightskip=0pt plus \\tmpdimen minus 0pt\\relax\\the\\legendtextsize #2\\vskip1dd}\\hss}%\n" "}\n" "\n" "\\def\\colorlegendbox#1#2#3{%\n" " \\setbox\\xxx=\\hbox to 36bp{\\PL{q #1 #2 #3 rg 0 0 36 24 re f Q}\\hfil}%\n" " \\ht\\xxx=25bp\\dp\\xxx=0bp\n" " \\immediate\\pdfxform\\xxx\n" "}\n" "\n" "\n" "\\let\\PL\\pdfliteral\n" "\n" "\\newdimen\\xcorr\n" "\\newdimen\\ycorr\n" "\n" "\\def\\PB#1#2#3{\\rlap{\\kern#1bp\\raise#2bp\\hbox{\\pdfrefxform#3}}} %placebox\n" "\n" "\\def\\gridcoord#1#2{\\hbox to0pt{%\n" " \\ifnum#1=1\\hss\\fi\n" " \\ifnum#1=4\\hss\\fi\n" " \\ifnum#1=7\\hss\\fi\n" " \\ifnum#1=8\\hss\\fi\n" " \\ifnum#1=2\\hss\\fi\n" " \\vbox to0pt{%\n" " \\ifnum#1>3\\vss\\fi\n" " \\kern2pt%\n" " \\hbox{\\kern2pt#2\\kern2pt}%\n" " \\kern2pt%\n" " \\ifnum#1<7\\vss\\fi\n" " }%\n" " \\ifnum#1=3\\hss\\fi\n" " \\ifnum#1=6\\hss\\fi\n" " \\ifnum#1=9\\hss\\fi\n" " \\ifnum#1=8\\hss\\fi\n" " \\ifnum#1=2\\hss\\fi\n" " }%\n" "} \n" "\n" "\\def\\PBcorr#1#2#3{%\n" " \\xcorr=#1bp\\advance\\xcorr by\\extraW\\advance\\xcorr by\\overlap%\n" " \\ycorr=#2bp\\advance\\ycorr by\\extraS\\advance\\ycorr by\\overlap%\n" " \\rlap{\\kern\\xcorr\\raise\\ycorr\\hbox{\\pdfrefxform#3}}} %placebox\n" "\n" "\\def\\bitmap#1#2#3#4#5#6#7{%\n" " \\pdfliteral{q #1 #2 #3 #4 #5 #6 cm}%\n" " \\rlap{\\pdfrefximage#7}%\n" " \\pdfliteral{Q}%\n" "}\n" "\n" "\\def\\bitmapcorr#1#2#3#4#5#6#7{%\n" " \\xcorr=0bp\\advance\\xcorr by\\extraW\\advance\\xcorr by\\overlap\n" " \\ycorr=0bp\\advance\\ycorr by\\extraS\\advance\\ycorr by\\overlap\n" " \\dimtobp{\\xcorr}\\edef\\wdth{\\tmpdef}%\n" " \\dimtobp{\\ycorr}\\edef\\hght{\\tmpdef}%\n" " \\pdfliteral{q 1 0 0 1 \\wdth\\space\\hght\\space cm #1 #2 #3 #4 #5 #6 cm}% two-step transformation to avoid overflow\n" " \\rlap{\\pdfrefximage#7}%\n" " \\pdfliteral{Q}%\n" "}\n" "\n" "\\newdimen\\tmpdimenX\n" "\\newdimen\\tmpdimenY\n" "\\def\\calibrX#1{\\tmpdimen=#1\\advance\\tmpdimen by\\overlap\\advance\\tmpdimen by\\extraW}\n" "\\def\\calibrY#1{\\tmpdimen=#1\\advance\\tmpdimen by\\overlap\\advance\\tmpdimen by\\extraS}\n" "\n" "\\def\\TITLE#1{\\eject\\hbox{}\\vskip5cm\\centerline{\\size[24]#1}\\vfil\\eject}\n" "\n" "% processing of the E-W-N-S references\n" "\n" "\\def\\showpointer#1{\\ifnum\\the#1=0\\else\\the#1\\fi}\n" "\n" "% processing of the up and down references\n" "\n" "\\def\\showpointerlist#1{\\edef\\test{\\the#1}\\ifx\\test\\notdef\\else\n" " \\expandafter\\process\\the#1\\endarg\\fi}\n" "\n" "\\def\\process#1||#2\\endarg{\n" " \\expandafter\\processpointeritem#1\\endarg%\n" " \\if@#2@\\def\\next##1\\endarg{}\n" " \\else\\let\\next=\\process\\fi\n" " \\next#2\\endarg}\n" "\n" "\\def\\processpointeritem#1|#2|#3\\endarg{\\hbox{\\textlink{\\arr\\ #2 (#1)}{#3}}}\n" "\n" "\\def\\arr{} % to be redefined in the \\dopage macro\n" "\n" "\n" "\\def\\pagesetup#1#2#3#4#5#6{\n" " \\pdfpagewidth#1\n" " \\pdfpageheight#2\n" " \\hsize#3\n" " \\vsize#4\n" " \\pdfhorigin#5\n" " \\pdfvorigin#6\n" " \\hoffset0pt\n" " \\voffset0pt\\relax\n" "}\n" "\n" "\\def\\linestyle{1 J 1 j 1.5 w}\n" "\n" "\\def\\framed#1{% \n" " \\dimtobp{\\wd#1}\\edef\\wdth{\\tmpdef}%\n" " \\dimtobp{\\ht#1}\\edef\\hght{\\tmpdef}%\n" " \\hbox to \\wd#1{\\rlap{\\box#1}\\PL{q \\linestyle\\space 0 0 \\wdth\\space\\hght\\space re S Q}\\hfill}%\n" "}\n" "\n" "{\\catcode`\\p=12\\catcode`\\t=12\\gdef\\SKIPPT#1pt{#1}}\n" "\n" "\\def\\dimtobp#1{%\n" " \\tmpdimen=#1%\n" " \\tmpdimen=0.996264\\tmpdimen\n" " \\edef\\tmpdef{\\the\\tmpdimen}%\n" " \\edef\\tmpdef{\\expandafter\\SKIPPT\\tmpdef}%\n" "}\n" "\n" "\\def\\color[#1 #2 #3]{%\n" " \\tmpdimen=#1pt%\n" " \\divide\\tmpdimen100\n" " \\edef\\tmpdef{\\the\\tmpdimen}%\n" " \\edef\\tmpdef{\\expandafter\\SKIPPT\\tmpdef}%\n" " \\pdfliteral{\\tmpdef}%\n" " \\tmpdimen=#2pt%\n" " \\divide\\tmpdimen100\n" " \\edef\\tmpdef{\\the\\tmpdimen}%\n" " \\edef\\tmpdef{\\expandafter\\SKIPPT\\tmpdef}%\n" " \\pdfliteral{\\tmpdef}%\n" " \\tmpdimen=#3pt%\n" " \\divide\\tmpdimen100\n" " \\edef\\tmpdef{\\the\\tmpdimen}%\n" " \\edef\\tmpdef{\\expandafter\\SKIPPT\\tmpdef}%\n" " \\pdfliteral{\\tmpdef}%\n" " \\pdfliteral{rg}\n" "}\n" "\n" "% actual placing of the page elements\n" "\n" "\\def\\dopage{%\n" " \\vbox{\\centerline{\\framed{\\mapbox}}\n" " \\bigskip\n" " \\line{%\n" " \\vbox to \\ht\\navbox{\n" " \\hbox{\\size[20]\\the\\pagelabel\n" " \\ifpagenumbering\\space(\\the\\pagenum)\\fi\n" " \\space\\size[16]\\the\\pagename}\n" " \\ifpagenumbering\n" " \\medskip\n" " \\hbox{\\qquad\\qquad\n" " \\vtop{%\n" " \\hbox to 0pt{\\hss\\showpointer\\pointerN\\hss}\n" " \\hbox to 0pt{\\llap{\\showpointer\\pointerW\\hskip0.7em}%\n" " \\raise1pt\\hbox to 0pt{\\hss$\\updownarrow$\\hss}%\n" " \\raise1pt\\hbox to 0pt{\\hss$\\leftrightarrow$\\hss}%\n" " \\rlap{\\hskip0.7em\\showpointer\\pointerE}}\n" " \\hbox to 0pt{\\hss\\showpointer\\pointerS\\hss}\n" " }\\qquad\\qquad\n" " \\vtop{\n" " \\def\\arr{$\\uparrow$}\n" " \\showpointerlist\\pointerU\n" " \\def\\arr{$\\downarrow$}\n" " \\showpointerlist\\pointerD\n" " }\n" " }\n" " \\fi\n" " \\vss\n" " }\n" " \\hss\n" " \\vbox to \\ht\\navbox{\n" " \\ifnortharrow\\hbox to 0pt{\\hss\\northarrow\\qquad}\\fi\n" " \\vss\n" " \\ifscalebar\\hbox to 0pt{\\hss\\scalebar\\qquad}\\fi\n" " }\n" " \\box\\navbox\n" " }\n" " }\n" "}\n" "\n" "\\newif\\iflegend\n" "\\newif\\ifcolorlegend\n" "\\newtoks\\legendcontent\n" "\n" "\\newtoks\\cavename\n" "\\newtoks\\comment\n" "\\newtoks\\legendtitle\n" "\\newtoks\\colorlegendtitle\n" "\\newif\\ifnortharrow\n" "\\newif\\ifscalebar\n" "\\newtoks\\explotitle\n" "\\newtoks\\explodate\n" "\\newtoks\\exploteam\n" "\\newtoks\\topotitle\n" "\\newtoks\\topodate\n" "\\newtoks\\topoteam\n" "\\newtoks\\cartotitle\n" "\\newtoks\\cartodate\n" "\\newtoks\\cartoteam\n" "\\newtoks\\copyrights\n" "\\newtoks\\cavelength\n" "\\newtoks\\cavedepth\n" "\\newtoks\\cavelengthtitle\n" "\\newtoks\\cavedepthtitle\n" "\\newtoks\\legendtextcolor\\legendtextcolor={\\color[0 0 0]}\n" "\\newtoks\\legendtextsize\\legendtextsize={\\size[12]}\n" "\\newtoks\\legendtextheadersize\\legendtextheadersize={\\size[26]}\n" "\\newtoks\\legendtextsectionsize\\legendtextsectionsize={\\size[14]}\n" "\n" "\\def\\scalebar{\\pdfrefxform\\THWscalebar}\n" "\\def\\northarrow{\\pdfrefxform\\THWnortharrow}\n" "\\newdimen\\legendwidth %\\legendwidth=14cm\n" "\\newcount\\legendcolumns \\legendcolumns=2\n" "\n" "\\legendcontent={%\n" " \\hsize=\\legendwidth\n" " \\color[0 0 0]\\the\\legendtextcolor \n" " \\ifnortharrow\\vbox to 0pt{\\line{\\hfil\\northarrow}\\vss}\\fi\n" " \\edef\\tmp{\\the\\cavename} \\ifx\\tmp\\empty \\else\n" " {\\the\\legendtextheadersize\\the\\cavename}\\vskip1cm\n" " \\fi\n" " \\ifscalebar\\scalebar\\vskip1cm\\fi\n" " {\\rightskip=0pt plus 3em\\parskip=3bp\n" " \\edef\\tmp{\\the\\comment} \\ifx\\tmp\\empty \\else\n" " {\\the\\legendtextsize\\the\\comment} \\par\\medskip\n" " \\fi\n" " \\everypar{\\hangindent=2em\\hangafter=1}\n" " \\edef\\tmp{\\the\\cavelength} \\ifx\\tmp\\empty \\else\n" " {\\the\\legendtextsize\\si\\the\\cavelengthtitle: \\ss\\the\\cavelength\\par}\n" " \\fi\n" " \\edef\\tmp{\\the\\cavedepth} \\ifx\\tmp\\empty \\else\n" " {\\the\\legendtextsize\\si\\the\\cavedepthtitle: \\ss\\the\\cavedepth\\par}\n" " \\fi\n" " \\edef\\tmp{\\the\\exploteam} \\ifx\\tmp\\empty \\else\n" " {\\the\\legendtextsize\\si\\the\\explotitle: \\ss\\the\\exploteam\\quad\\si\\the\\explodate\\par}\n" " \\fi\n" " \\edef\\tmp{\\the\\topoteam} \\ifx\\tmp\\empty \\else\n" " {\\the\\legendtextsize\\si\\the\\topotitle: \\ss\\the\\topoteam\\quad\\si\\the\\topodate\\par}\n" " \\fi\n" " \\edef\\tmp{\\the\\cartoteam} \\ifx\\tmp\\empty \\else\n" " {\\the\\legendtextsize\\si\\the\\cartotitle: \\ss\\the\\cartoteam\\quad\\si\\the\\cartodate\\par}\n" " \\fi\n" " \\edef\\tmp{\\the\\copyrights} \\ifx\\tmp\\empty \\else\n" " {\\the\\legendtextsize\\ss\\the\\copyrights\\par}\n" " \\fi\n" " }\n" " \\formattedlegend\n" " \\color[0 0 0]\n" "}\n" "\n" "\\def\\maplayout{\n" " \\legendbox{NW}{\\the\\legendcontent}\n" " \\legendbox{NE}{\\northarrow}\n" "}\n" "\n" "\n" "\\def\\formattedlegend{%\n" " \\ifcolorlegend\n" " \\vskip1cm{\\the\\legendtextsectionsize\\the\\colorlegendtitle}\\bigskip\n" " \\insertcolorlegend\n" " \\fi\n" " \\iflegend\n" " \\vskip1cm{\\the\\legendtextsectionsize\\the\\legendtitle}\\bigskip\n" " \\insertlegend\n" " \\fi}\n" "\n" "\\let\\atlaslegend=\\formattedlegend\n" "\n" "\\def\\atlastitlepages{\n" " \\edef\\tmp{\\the\\cavename} \\ifx\\tmp\\empty \\else\n" " \\TITLE{\\the\\cavename}\n" " \\fi\n" " {\\rightskip=0pt plus 3em\\parskip=3bp\n" " \\edef\\tmp{\\the\\comment} \\ifx\\tmp\\empty \\else\n" " {\\size[12]\\the\\comment} \\par\\medskip\n" " \\fi\n" " \\everypar{\\hangindent=2em\\hangafter=1}\n" " \\edef\\tmp{\\the\\exploteam} \\ifx\\tmp\\empty \\else\n" " {\\size[12]\\si\\the\\explotitle: \\ss\\the\\exploteam\\par}\n" " \\fi\n" " \\edef\\tmp{\\the\\topoteam} \\ifx\\tmp\\empty \\else\n" " {\\size[12]\\si\\the\\topotitle: \\ss\\the\\topoteam\\par}\n" " \\fi\n" " \\edef\\tmp{\\the\\cartoteam} \\ifx\\tmp\\empty \\else\n" " {\\size[12]\\si\\the\\cartotitle: \\ss\\the\\cartoteam\\par}\n" " \\fi\n" " \\edef\\tmp{\\the\\copyrights} \\ifx\\tmp\\empty \\else\n" " {\\size[12]\\ss\\the\\copyrights\\par}\n" " \\fi\n" " \\edef\\tmp{\\the\\cavelength} \\ifx\\tmp\\empty \\else\n" " {\\the\\legendtextsize\\si\\the\\cavelengthtitle: \\ss\\the\\cavelength\\par}\n" " \\fi\n" " \\edef\\tmp{\\the\\cavedepth} \\ifx\\tmp\\empty \\else\n" " {\\the\\legendtextsize\\si\\the\\cavedepthtitle: \\ss\\the\\cavedepth\\par}\n" " \\fi\n" " }\n" "}\n" "\n" "\\newdimen\\sx\n" "\\newdimen\\sy\n" "\\newdimen\\sxd\n" "\\newdimen\\syd\n" "\n" "\\def\\LEGN{N}\n" "\\def\\LEGE{E}\n" "\\def\\LEGW{W}\n" "\\def\\LEGS{S}\n" "\\def\\LEGNE{NE}\n" "\\def\\LEGNW{NW}\n" "\\def\\LEGSE{SE}\n" "\\def\\LEGSW{SW}\n" "\\def\\LEGC{C}\n" "\n" "\n" "\\newdimen\\extraN \\extraN=0mm\n" "\\newdimen\\extraS \\extraS=0mm\n" "\\newdimen\\extraE \\extraE=0mm\n" "\\newdimen\\extraW \\extraW=0mm\n" "\\newdimen\\adjustedHS\n" "\\newdimen\\adjustedVS\n" "\\newdimen\\adjustedX\n" "\\newdimen\\adjustedY\n" "\\newdimen\\framethickness\\framethickness=0cm\n" "\n" "\\def\\legendbox#1#2#3#4{%\n" " \\unskip\n" " \\setbox\\tmpboxa=\\vbox{#4}%\n" " \\sx=\\wd\\tmpboxa\n" " \\sy=\\ht\\tmpboxa \\advance\\sy by \\dp\\tmpboxa\n" " \\sxd=\\hsize \\divide\\sxd by 100 \\sxd=#1\\sxd\n" " \\syd=\\vsize \\divide\\syd by 100 \\syd=#2\\syd\n" " \\edef\\test{#3}%\n" " \\ifx\\test\\LEGN\n" " \\divide\\sx by 2 \\advance\\sxd by -\\sx\n" " \\advance\\syd by -\\sy\n" " \\else\\ifx\\test\\LEGW\n" " \\divide\\sy by 2 \\advance\\syd by -\\sy \n" " \\else\\ifx\\test\\LEGE\n" " \\advance\\sxd by -\\sx\n" " \\divide\\sy by 2 \\advance\\syd by -\\sy \n" " \\else\\ifx\\test\\LEGS\n" " \\divide\\sx by 2 \\advance\\sxd by -\\sx\n" " \\else\\ifx\\test\\LEGNW\n" " \\advance\\syd by -\\sy \n" " \\else\\ifx\\test\\LEGNE\n" " \\advance\\sxd by -\\sx\n" " \\advance\\syd by -\\sy\n" " \\else\\ifx\\test\\LEGSW\n" " \\else\\ifx\\test\\LEGSE\n" " \\advance\\sxd by -\\sx\n" " \\else\\ifx\\test\\LEGC\n" " \\divide\\sx by 2 \\advance\\sxd by -\\sx\n" " \\divide\\sy by 2 \\advance\\syd by -\\sy \n" " \\fi\\fi\\fi\\fi\\fi\\fi\\fi\\fi\\fi\n" " %\n" " \\ifdim\\sxd<-\\extraW \\global\\extraW=-\\sxd\\fi\n" " \\ifdim\\syd<-\\extraS \\global\\extraS=-\\syd\\fi\n" " \\sx=\\wd\\tmpboxa\n" " \\sy=\\ht\\tmpboxa \\advance\\sy by \\dp\\tmpboxa\n" " \\advance\\sx by \\sxd \\advance\\sx by -\\hsize\n" " \\advance\\sy by \\syd \\advance\\sy by -\\vsize\n" " \\ifdim\\sx>\\extraE \\global\\extraE=\\sx \\fi\n" " \\ifdim\\sy>\\extraN \\global\\extraN=\\sy \\fi\n" " %\n" " \\unskip\n" "% \\advance\\sxd by \\extraW -- presunute do thpdf.cxx\n" "% \\advance\\syd by \\extraS\n" "\n" " % vypln pod legendou\n" " \\iflegendbgfill\n" " \\begingroup\n" " \\advance\\sxd-1cm\n" " \\advance\\syd-1cm\n" " \\sx=\\wd\\tmpboxa \\advance\\sx by 2cm\n" " \\dimtobp{\\sxd}\\edef\\shiftx{\\tmpdef}%\n" " \\dimtobp{\\syd}\\edef\\shifty{\\tmpdef}%\n" "% \\dimtobp{\\wd\\tmpboxa}\\edef\\wdth{\\tmpdef}%\n" " \\dimtobp{\\sx}\\edef\\wdth{\\tmpdef}%\n" " \\sy=\\ht\\tmpboxa \\advance\\sy by \\dp\\tmpboxa\n" " \\advance\\sy by 2 cm\n" " \\dimtobp{\\sy}\\edef\\hght{\\tmpdef}%\n" " \\rlap{\\PL{q \\the\\bgcolor\\space rg \\shiftx\\space \\shifty\\space \\wdth\\space \\hght\\space re f Q}}%\n" " \\endgroup \n" " \\fi\n" " %\n" " \\advance\\syd by \\dp\\tmpboxa\n" "\n" " \\rlap{\\kern\\sxd\\raise\\syd\\box\\tmpboxa}%\n" " \\ignorespaces\n" "}\n" "\n" "\\def\\loadpicture#1{\\pdfximage{#1}\\pdfrefximage\\pdflastximage}\n" "\n" "\\def\\insertmaps{%\n" " \\color[0 0 0]\n" " \\input th_formdef\n" " \\input th_pagedef\n" " \\input th_pages\n" " \\immediate\\write-1{ \\the\\count10 \\space numeric registers used out of \n" " \\ifx\\eTeXversion\\undefined256\\else32768\\fi}\n" "}\n" " \n" "\\def\\insertlegend{%\n" " \\input th_legend\n" "}\n" "\n" "\\def\\insertcolorlegend{%\n" " \\input th_legendcolor\n" "}\n" "\n" "\\def\\insertkeyplan#1#2{%\n" " \\tmpdimen=#1\n" " \\tmpdimen=2\\tmpdimen\n" " \\setbox0=\\hbox{\\pdfximage width \\tmpdimen {#2}\\pdfrefximage\\pdflastximage}\n" "% \\pdfxform0\\keyplan=\\pdflastxform\n" " \\setbox1=\\hbox to #1 {\\copy0\\hss}\n" " \\setbox2=\\hbox to #1 {\\hss\\box0}\n" " \\eject \n" " \\ifodd\\pageno\\hbox{}\\vfil\\eject\\fi\n" " \\line{\\hss\\pdfxform1\\pdfrefxform\\pdflastxform}\n" " \\vfil\n" " \\eject\n" " \\line{\\pdfxform2\\pdfrefxform\\pdflastxform\\hss}\n" " \\vfil\n" " \\eject\n" "}\n" "\n" "\n" "\\newcount\\stopcount\n" "\\newcount\\stoprow\n" "\\newcount\\rows\n" "\\newcount\\rowstmp\n" "\\newcount\\i\n" "\\newcount\\j\n" "\n" "\n" "\\def\\placemaps{\n" " \\message{ [Warning: \\string\\placemaps\\space is deprecated; \n" " use \\string\\insertmaps] }\n" " \\insertmaps\n" "}\n" "\n" "%% Petr Olsak's multicolumn macros (slightly modified)\n" "\n" "\\newdimen\\colsep \\colsep=1em % horiz. mezera mezi sloupci\n" "\\newcount\\tempnum % pracovní promìnná\n" "\\splittopskip=\\baselineskip\n" "\\def\\roundtolines #1{%% zaokrouhlí na celé násobky vel. øádku\n" " \\divide #1 by\\baselineskip \\multiply #1 by\\baselineskip}\n" "\\def\\corrsize #1{%% #1 := #1 + \\splittopskip - \\topskip\n" " \\advance #1 by \\splittopskip \\advance #1 by-\\topskip}\n" "\n" "\\def\\begmulti#1{\\par\\bigskip\\penalty0 \\def\\Ncols{#1}\n" " \\setbox0=\\vbox\\bgroup\\penalty0\n" " %% \\hsize := ¹íøka sloupce = (\\hsize+\\colsep) / n - \\colsep\n" " \\advance\\hsize by\\colsep\n" " \\divide\\hsize by\\Ncols \\advance\\hsize by-\\colsep}\n" "\\def\\endmulti{\\vfil\\egroup \\setbox1=\\vsplit0 to0pt\n" " %% \\dimen1 := velikost zbylého místa na stránce\n" " \\ifdim\\pagegoal=\\maxdimen \\dimen1=\\vsize \\corrsize{\\dimen1}\n" " \\else \\dimen1=\\pagegoal \\advance\\dimen1 by-\\pagetotal \\fi\n" " \\ifdim \\dimen1<2\\baselineskip\n" " \\vfil\\break \\dimen1=\\vsize \\corrsize{\\dimen1} \\fi\n" " %% \\dimen0 := vý¹ka n sloupcové sazby po rozdìlení do sloupcù\n" " %% = (\\ht0 + (n-1)\\baselineskip) / n, zaokruhleno na øádky\n" " \\dimen0=\\Ncols\\baselineskip \\advance\\dimen0 by-\\baselineskip\n" " \\advance\\dimen0 by \\ht0 \\divide\\dimen0 by\\Ncols\n" " \\roundtolines{\\dimen0}\n" " %% Rozdìlit sazbu n sloupcù do stránek nebo nerozdìlit ?\n" " \\ifdim \\dimen0>\\dimen1 \\splitpart\n" " \\else \\makecolumns{\\dimen0} \\fi\n" " \\ifvoid0 \\else \\errmessage{Lost text in multiple columns?} \\fi\n" " \\bigskip}\n" "\\def\\makecolumns#1{\\setbox1=\\hbox{}\\tempnum=0\n" " \\loop \\ifnum\\Ncols>\\tempnum\n" " \\setbox1=\\hbox{\\unhbox1 \\vsplit0 to#1 \\hss}\n" " \\advance\\tempnum by1\n" " \\repeat\n" " \\hbox{}\\nobreak\\vskip-\\splittopskip \\nointerlineskip\n" " \\line{\\unhbox1\\unskip}}\n" "\\def\\splitpart{\\roundtolines{\\dimen1}\n" " \\makecolumns{\\dimen1} \\advance\\dimen0 by-\\dimen1\n" " %% \\dimen0 := vý¹ka _zbylé_ n sloupcové sazby\n" " %% \\dimen1 := prázdné místo na stránce = (cca) \\vsize\n" " \\vfil\\break\n" " \\dimen1=\\vsize \\corrsize{\\dimen1}\n" " %% Rozdìlit zbylou sazbu n sloupcù do více stránek ?\n" " \\ifvoid0 \\else\n" " \\ifdim \\dimen0>\\dimen1 \\splitpart\n" " \\else \\makecolumns{\\dimen0} \\fi \\fi}\n" "\n" "%% end of multicolumn macros\n" "\n" "\\input th_enc\n" "\\input th_texts\n" "\\input th_resources\n" "\\input th_fontdef\n" "\n" "\\nonstopmode\n" "\n"; #else const char * thtex_library = "\\input therion.tex\n"; #endif therion/thtex.h0000644000076400010400000000032011446664142014575 0ustar userAdministrators/** * @file thmpost.h * * THIS FILE IS GENERATED AUTOMATICALLY, DO NOT MODIFY IT !!! */ #ifndef thtex_h #define thtex_h /** * Metapost source file. */ extern const char * thtex_library; #endif therion/thtexenc.cxx0000644000076400010400000005614310776452374015663 0ustar userAdministrators// This file is generated automatically; don't modify it static const int max_enc = 3; static const int max_base = 579; static const char* encodings[3] = { "cmcyr", "raw", "xl2", }; static const int texenc[256][3] = { {0x0000, 0x0393, 0x0393}, {0x0000, 0x2206, 0x2206}, {0x0000, 0x0398, 0x0398}, {0x0000, 0x039B, 0x039B}, {0x0000, 0x039E, 0x039E}, {0x0000, 0x03A0, 0x03A0}, {0x0000, 0x03A3, 0x03A3}, {0x0000, 0x03A5, 0x03A5}, {0x0000, 0x03A6, 0x03A6}, {0x0000, 0x03A8, 0x03A8}, {0x0000, 0x03A9, 0x03A9}, {0x0000, 0xFB00, 0xFB00}, {0x0000, 0xFB01, 0xFB01}, {0x0000, 0xFB02, 0xFB02}, {0x0000, 0xFB03, 0xFB03}, {0x0000, 0xFB04, 0xFB04}, {0x0000, 0x0131, 0x0131}, {0x0000, 0xF6BE, 0xF6BE}, {0x0000, 0x0060, 0x0060}, {0x0000, 0x00B4, 0x00B4}, {0x0000, 0x02C7, 0x02C7}, {0x0000, 0x02D8, 0x02D8}, {0x0000, 0x00AF, 0x00AF}, {0x0000, 0x02DA, 0x02DA}, {0x0000, 0x00B8, 0x00B8}, {0x0000, 0x00DF, 0x00DF}, {0x0000, 0x00E6, 0x00E6}, {0x0000, 0x0153, 0x0153}, {0x0000, 0x00F8, 0x00F8}, {0x0000, 0x00C6, 0x00C6}, {0x0000, 0x0152, 0x0152}, {0x0000, 0x00D8, 0x00D8}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0021, 0x0021}, {0x0000, 0x201D, 0x201D}, {0x0000, 0x0023, 0x0023}, {0x0000, 0x0024, 0x0024}, {0x0000, 0x0025, 0x0025}, {0x0000, 0x0026, 0x0026}, {0x0000, 0x2019, 0x2019}, {0x0000, 0x0028, 0x0028}, {0x0000, 0x0029, 0x0029}, {0x0000, 0x002A, 0x002A}, {0x0000, 0x002B, 0x002B}, {0x0000, 0x002C, 0x002C}, {0x0000, 0x002D, 0x002D}, {0x0000, 0x002E, 0x002E}, {0x0000, 0x002F, 0x002F}, {0x0000, 0x0030, 0x0030}, {0x0000, 0x0031, 0x0031}, {0x0000, 0x0032, 0x0032}, {0x0000, 0x0033, 0x0033}, {0x0000, 0x0034, 0x0034}, {0x0000, 0x0035, 0x0035}, {0x0000, 0x0036, 0x0036}, {0x0000, 0x0037, 0x0037}, {0x0000, 0x0038, 0x0038}, {0x0000, 0x0039, 0x0039}, {0x0000, 0x003A, 0x003A}, {0x0000, 0x003B, 0x003B}, {0x0451, 0x00A1, 0x00A1}, {0x0000, 0x003D, 0x003D}, {0x0401, 0x00BF, 0x00BF}, {0x0000, 0x003F, 0x003F}, {0x044E, 0x0040, 0x0040}, {0x0430, 0x0041, 0x0041}, {0x0431, 0x0042, 0x0042}, {0x0446, 0x0043, 0x0043}, {0x0434, 0x0044, 0x0044}, {0x0435, 0x0045, 0x0045}, {0x0444, 0x0046, 0x0046}, {0x0433, 0x0047, 0x0047}, {0x0445, 0x0048, 0x0048}, {0x0438, 0x0049, 0x0049}, {0x0439, 0x004A, 0x004A}, {0x043A, 0x004B, 0x004B}, {0x043B, 0x004C, 0x004C}, {0x043C, 0x004D, 0x004D}, {0x043D, 0x004E, 0x004E}, {0x043E, 0x004F, 0x004F}, {0x043F, 0x0050, 0x0050}, {0x044F, 0x0051, 0x0051}, {0x0440, 0x0052, 0x0052}, {0x0441, 0x0053, 0x0053}, {0x0442, 0x0054, 0x0054}, {0x0443, 0x0055, 0x0055}, {0x0436, 0x0056, 0x0056}, {0x0432, 0x0057, 0x0057}, {0x044C, 0x0058, 0x0058}, {0x044B, 0x0059, 0x0059}, {0x0437, 0x005A, 0x005A}, {0x0448, 0x005B, 0x005B}, {0x044D, 0x201C, 0x201C}, {0x0449, 0x005D, 0x005D}, {0x0447, 0x02C6, 0x02C6}, {0x044A, 0x02D9, 0x02D9}, {0x042E, 0x2018, 0x2018}, {0x0410, 0x0061, 0x0061}, {0x0411, 0x0062, 0x0062}, {0x0426, 0x0063, 0x0063}, {0x0414, 0x0064, 0x0064}, {0x0415, 0x0065, 0x0065}, {0x0424, 0x0066, 0x0066}, {0x0413, 0x0067, 0x0067}, {0x0425, 0x0068, 0x0068}, {0x0418, 0x0069, 0x0069}, {0x0419, 0x006A, 0x006A}, {0x041A, 0x006B, 0x006B}, {0x041B, 0x006C, 0x006C}, {0x041C, 0x006D, 0x006D}, {0x041D, 0x006E, 0x006E}, {0x041E, 0x006F, 0x006F}, {0x041F, 0x0070, 0x0070}, {0x042F, 0x0071, 0x0071}, {0x0420, 0x0072, 0x0072}, {0x0421, 0x0073, 0x0073}, {0x0422, 0x0074, 0x0074}, {0x0423, 0x0075, 0x0075}, {0x0416, 0x0076, 0x0076}, {0x0412, 0x0077, 0x0077}, {0x042C, 0x0078, 0x0078}, {0x042B, 0x0079, 0x0079}, {0x0417, 0x007A, 0x007A}, {0x0428, 0x2013, 0x2013}, {0x042D, 0x2014, 0x2014}, {0x0429, 0x02DD, 0x02DD}, {0x0427, 0x02DC, 0x02DC}, {0x0000, 0x00A8, 0x00A8}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x2030}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x00C0}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x002D}, {0x0000, 0x0000, 0x02DB}, {0x0000, 0x0000, 0x00AB}, {0x0000, 0x0000, 0x00BB}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x013D}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0160}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0164}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x017D}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x013E}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x00E0}, {0x0000, 0x0000, 0x0161}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0165}, {0x2116, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x017E}, {0x0000, 0x0000, 0x0000}, {0x00AB, 0x0000, 0x0154}, {0x00BB, 0x0000, 0x00C1}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x042A, 0x0000, 0x00C4}, {0x0000, 0x0000, 0x0139}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x010C}, {0x0000, 0x0000, 0x00C9}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x011A}, {0x0000, 0x0000, 0x00CD}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x010E}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0147}, {0x0000, 0x0000, 0x00D3}, {0x0000, 0x0000, 0x00D4}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x00D6}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0158}, {0x0000, 0x0000, 0x016E}, {0x0000, 0x0000, 0x00DA}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x00DC}, {0x0000, 0x0000, 0x00DD}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0155}, {0x0000, 0x0000, 0x00E1}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x00E4}, {0x0000, 0x0000, 0x013A}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x010D}, {0x0000, 0x0000, 0x00E9}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x011B}, {0x0000, 0x0000, 0x00ED}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x010F}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0148}, {0x0000, 0x0000, 0x00F3}, {0x0000, 0x0000, 0x00F4}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x00F6}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x0159}, {0x0000, 0x0000, 0x016F}, {0x0000, 0x0000, 0x00FA}, {0x0000, 0x0000, 0x0000}, {0x0000, 0x0000, 0x00FC}, {0x0000, 0x0000, 0x00FD}, {0x0000, 0x0000, 0x201E}, {0x0000, 0x0000, 0x201C}, }; static const int unibase[579][3] = { {0x00C0, 0x0041, 0x0300}, {0x00C1, 0x0041, 0x0301}, {0x00C2, 0x0041, 0x0302}, {0x00C3, 0x0041, 0x0303}, {0x00C4, 0x0041, 0x0308}, {0x00C5, 0x0041, 0x030A}, {0x00C7, 0x0043, 0x0327}, {0x00C8, 0x0045, 0x0300}, {0x00C9, 0x0045, 0x0301}, {0x00CA, 0x0045, 0x0302}, {0x00CB, 0x0045, 0x0308}, {0x00CC, 0x0049, 0x0300}, {0x00CD, 0x0049, 0x0301}, {0x00CE, 0x0049, 0x0302}, {0x00CF, 0x0049, 0x0308}, {0x00D1, 0x004E, 0x0303}, {0x00D2, 0x004F, 0x0300}, {0x00D3, 0x004F, 0x0301}, {0x00D4, 0x004F, 0x0302}, {0x00D5, 0x004F, 0x0303}, {0x00D6, 0x004F, 0x0308}, {0x00D9, 0x0055, 0x0300}, {0x00DA, 0x0055, 0x0301}, {0x00DB, 0x0055, 0x0302}, {0x00DC, 0x0055, 0x0308}, {0x00DD, 0x0059, 0x0301}, {0x00E0, 0x0061, 0x0300}, {0x00E1, 0x0061, 0x0301}, {0x00E2, 0x0061, 0x0302}, {0x00E3, 0x0061, 0x0303}, {0x00E4, 0x0061, 0x0308}, {0x00E5, 0x0061, 0x030A}, {0x00E7, 0x0063, 0x0327}, {0x00E8, 0x0065, 0x0300}, {0x00E9, 0x0065, 0x0301}, {0x00EA, 0x0065, 0x0302}, {0x00EB, 0x0065, 0x0308}, {0x00EC, 0x0069, 0x0300}, {0x00ED, 0x0069, 0x0301}, {0x00EE, 0x0069, 0x0302}, {0x00EF, 0x0069, 0x0308}, {0x00F1, 0x006E, 0x0303}, {0x00F2, 0x006F, 0x0300}, {0x00F3, 0x006F, 0x0301}, {0x00F4, 0x006F, 0x0302}, {0x00F5, 0x006F, 0x0303}, {0x00F6, 0x006F, 0x0308}, {0x00F9, 0x0075, 0x0300}, {0x00FA, 0x0075, 0x0301}, {0x00FB, 0x0075, 0x0302}, {0x00FC, 0x0075, 0x0308}, {0x00FD, 0x0079, 0x0301}, {0x00FF, 0x0079, 0x0308}, {0x0100, 0x0041, 0x0304}, {0x0101, 0x0061, 0x0304}, {0x0102, 0x0041, 0x0306}, {0x0103, 0x0061, 0x0306}, {0x0104, 0x0041, 0x0328}, {0x0105, 0x0061, 0x0328}, {0x0106, 0x0043, 0x0301}, {0x0107, 0x0063, 0x0301}, {0x0108, 0x0043, 0x0302}, {0x0109, 0x0063, 0x0302}, {0x010A, 0x0043, 0x0307}, {0x010B, 0x0063, 0x0307}, {0x010C, 0x0043, 0x030C}, {0x010D, 0x0063, 0x030C}, {0x010E, 0x0044, 0x030C}, {0x010F, 0x0064, 0x030C}, {0x0112, 0x0045, 0x0304}, {0x0113, 0x0065, 0x0304}, {0x0114, 0x0045, 0x0306}, {0x0115, 0x0065, 0x0306}, {0x0116, 0x0045, 0x0307}, {0x0117, 0x0065, 0x0307}, {0x0118, 0x0045, 0x0328}, {0x0119, 0x0065, 0x0328}, {0x011A, 0x0045, 0x030C}, {0x011B, 0x0065, 0x030C}, {0x011C, 0x0047, 0x0302}, {0x011D, 0x0067, 0x0302}, {0x011E, 0x0047, 0x0306}, {0x011F, 0x0067, 0x0306}, {0x0120, 0x0047, 0x0307}, {0x0121, 0x0067, 0x0307}, {0x0122, 0x0047, 0x0327}, {0x0123, 0x0067, 0x0327}, {0x0124, 0x0048, 0x0302}, {0x0125, 0x0068, 0x0302}, {0x0128, 0x0049, 0x0303}, {0x0129, 0x0069, 0x0303}, {0x012A, 0x0049, 0x0304}, {0x012B, 0x0069, 0x0304}, {0x012C, 0x0049, 0x0306}, {0x012D, 0x0069, 0x0306}, {0x012E, 0x0049, 0x0328}, {0x012F, 0x0069, 0x0328}, {0x0130, 0x0049, 0x0307}, {0x0134, 0x004A, 0x0302}, {0x0135, 0x006A, 0x0302}, {0x0136, 0x004B, 0x0327}, {0x0137, 0x006B, 0x0327}, {0x0139, 0x004C, 0x0301}, {0x013A, 0x006C, 0x0301}, {0x013B, 0x004C, 0x0327}, {0x013C, 0x006C, 0x0327}, {0x013D, 0x004C, 0x030C}, {0x013E, 0x006C, 0x030C}, {0x0143, 0x004E, 0x0301}, {0x0144, 0x006E, 0x0301}, {0x0145, 0x004E, 0x0327}, {0x0146, 0x006E, 0x0327}, {0x0147, 0x004E, 0x030C}, {0x0148, 0x006E, 0x030C}, {0x014C, 0x004F, 0x0304}, {0x014D, 0x006F, 0x0304}, {0x014E, 0x004F, 0x0306}, {0x014F, 0x006F, 0x0306}, {0x0150, 0x004F, 0x030B}, {0x0151, 0x006F, 0x030B}, {0x0154, 0x0052, 0x0301}, {0x0155, 0x0072, 0x0301}, {0x0156, 0x0052, 0x0327}, {0x0157, 0x0072, 0x0327}, {0x0158, 0x0052, 0x030C}, {0x0159, 0x0072, 0x030C}, {0x015A, 0x0053, 0x0301}, {0x015B, 0x0073, 0x0301}, {0x015C, 0x0053, 0x0302}, {0x015D, 0x0073, 0x0302}, {0x015E, 0x0053, 0x0327}, {0x015F, 0x0073, 0x0327}, {0x0160, 0x0053, 0x030C}, {0x0161, 0x0073, 0x030C}, {0x0162, 0x0054, 0x0327}, {0x0163, 0x0074, 0x0327}, {0x0164, 0x0054, 0x030C}, {0x0165, 0x0074, 0x030C}, {0x0168, 0x0055, 0x0303}, {0x0169, 0x0075, 0x0303}, {0x016A, 0x0055, 0x0304}, {0x016B, 0x0075, 0x0304}, {0x016C, 0x0055, 0x0306}, {0x016D, 0x0075, 0x0306}, {0x016E, 0x0055, 0x030A}, {0x016F, 0x0075, 0x030A}, {0x0170, 0x0055, 0x030B}, {0x0171, 0x0075, 0x030B}, {0x0172, 0x0055, 0x0328}, {0x0173, 0x0075, 0x0328}, {0x0174, 0x0057, 0x0302}, {0x0175, 0x0077, 0x0302}, {0x0176, 0x0059, 0x0302}, {0x0177, 0x0079, 0x0302}, {0x0178, 0x0059, 0x0308}, {0x0179, 0x005A, 0x0301}, {0x017A, 0x007A, 0x0301}, {0x017B, 0x005A, 0x0307}, {0x017C, 0x007A, 0x0307}, {0x017D, 0x005A, 0x030C}, {0x017E, 0x007A, 0x030C}, {0x01A0, 0x004F, 0x031B}, {0x01A1, 0x006F, 0x031B}, {0x01AF, 0x0055, 0x031B}, {0x01B0, 0x0075, 0x031B}, {0x01CD, 0x0041, 0x030C}, {0x01CE, 0x0061, 0x030C}, {0x01CF, 0x0049, 0x030C}, {0x01D0, 0x0069, 0x030C}, {0x01D1, 0x004F, 0x030C}, {0x01D2, 0x006F, 0x030C}, {0x01D3, 0x0055, 0x030C}, {0x01D4, 0x0075, 0x030C}, {0x01D5, 0x00DC, 0x0304}, {0x01D6, 0x00FC, 0x0304}, {0x01D7, 0x00DC, 0x0301}, {0x01D8, 0x00FC, 0x0301}, {0x01D9, 0x00DC, 0x030C}, {0x01DA, 0x00FC, 0x030C}, {0x01DB, 0x00DC, 0x0300}, {0x01DC, 0x00FC, 0x0300}, {0x01DE, 0x00C4, 0x0304}, {0x01DF, 0x00E4, 0x0304}, {0x01E0, 0x0041, 0x0304}, {0x01E1, 0x0061, 0x0304}, {0x01E2, 0x00C6, 0x0304}, {0x01E3, 0x00E6, 0x0304}, {0x01E6, 0x0047, 0x030C}, {0x01E7, 0x0067, 0x030C}, {0x01E8, 0x004B, 0x030C}, {0x01E9, 0x006B, 0x030C}, {0x01EA, 0x004F, 0x0328}, {0x01EB, 0x006F, 0x0328}, {0x01EC, 0x004F, 0x0304}, {0x01ED, 0x006F, 0x0304}, {0x01F0, 0x006A, 0x030C}, {0x01F4, 0x0047, 0x0301}, {0x01F5, 0x0067, 0x0301}, {0x01F8, 0x004E, 0x0300}, {0x01F9, 0x006E, 0x0300}, {0x01FA, 0x0041, 0x0301}, {0x01FB, 0x0061, 0x0301}, {0x01FC, 0x00C6, 0x0301}, {0x01FD, 0x00E6, 0x0301}, {0x01FE, 0x00D8, 0x0301}, {0x01FF, 0x00F8, 0x0301}, {0x0200, 0x0041, 0x030F}, {0x0201, 0x0061, 0x030F}, {0x0202, 0x0041, 0x0311}, {0x0203, 0x0061, 0x0311}, {0x0204, 0x0045, 0x030F}, {0x0205, 0x0065, 0x030F}, {0x0206, 0x0045, 0x0311}, {0x0207, 0x0065, 0x0311}, {0x0208, 0x0049, 0x030F}, {0x0209, 0x0069, 0x030F}, {0x020A, 0x0049, 0x0311}, {0x020B, 0x0069, 0x0311}, {0x020C, 0x004F, 0x030F}, {0x020D, 0x006F, 0x030F}, {0x020E, 0x004F, 0x0311}, {0x020F, 0x006F, 0x0311}, {0x0210, 0x0052, 0x030F}, {0x0211, 0x0072, 0x030F}, {0x0212, 0x0052, 0x0311}, {0x0213, 0x0072, 0x0311}, {0x0214, 0x0055, 0x030F}, {0x0215, 0x0075, 0x030F}, {0x0216, 0x0055, 0x0311}, {0x0217, 0x0075, 0x0311}, {0x0218, 0x0053, 0x0326}, {0x0219, 0x0073, 0x0326}, {0x021A, 0x0054, 0x0326}, {0x021B, 0x0074, 0x0326}, {0x021E, 0x0048, 0x030C}, {0x021F, 0x0068, 0x030C}, {0x0226, 0x0041, 0x0307}, {0x0227, 0x0061, 0x0307}, {0x0228, 0x0045, 0x0327}, {0x0229, 0x0065, 0x0327}, {0x022A, 0x00D6, 0x0304}, {0x022B, 0x00F6, 0x0304}, {0x022C, 0x004F, 0x0304}, {0x022D, 0x006F, 0x0304}, {0x022E, 0x004F, 0x0307}, {0x022F, 0x006F, 0x0307}, {0x0230, 0x004F, 0x0304}, {0x0231, 0x006F, 0x0304}, {0x0232, 0x0059, 0x0304}, {0x0233, 0x0079, 0x0304}, {0x037E, 0x003B, 0x0000}, {0x0385, 0x00A8, 0x0301}, {0x038E, 0x03A5, 0x0301}, {0x038F, 0x03A9, 0x0301}, {0x03AB, 0x03A5, 0x0308}, {0x0400, 0x0415, 0x0300}, {0x0401, 0x0415, 0x0308}, {0x0403, 0x0413, 0x0301}, {0x040C, 0x041A, 0x0301}, {0x040D, 0x0418, 0x0300}, {0x040E, 0x0423, 0x0306}, {0x0419, 0x0418, 0x0306}, {0x0439, 0x0438, 0x0306}, {0x0450, 0x0435, 0x0300}, {0x0451, 0x0435, 0x0308}, {0x0453, 0x0433, 0x0301}, {0x045C, 0x043A, 0x0301}, {0x045D, 0x0438, 0x0300}, {0x045E, 0x0443, 0x0306}, {0x04C1, 0x0416, 0x0306}, {0x04C2, 0x0436, 0x0306}, {0x04D0, 0x0410, 0x0306}, {0x04D1, 0x0430, 0x0306}, {0x04D2, 0x0410, 0x0308}, {0x04D3, 0x0430, 0x0308}, {0x04D6, 0x0415, 0x0306}, {0x04D7, 0x0435, 0x0306}, {0x04DC, 0x0416, 0x0308}, {0x04DD, 0x0436, 0x0308}, {0x04DE, 0x0417, 0x0308}, {0x04DF, 0x0437, 0x0308}, {0x04E2, 0x0418, 0x0304}, {0x04E3, 0x0438, 0x0304}, {0x04E4, 0x0418, 0x0308}, {0x04E5, 0x0438, 0x0308}, {0x04E6, 0x041E, 0x0308}, {0x04E7, 0x043E, 0x0308}, {0x04EC, 0x042D, 0x0308}, {0x04ED, 0x044D, 0x0308}, {0x04EE, 0x0423, 0x0304}, {0x04EF, 0x0443, 0x0304}, {0x04F0, 0x0423, 0x0308}, {0x04F1, 0x0443, 0x0308}, {0x04F2, 0x0423, 0x030B}, {0x04F3, 0x0443, 0x030B}, {0x04F4, 0x0427, 0x0308}, {0x04F5, 0x0447, 0x0308}, {0x04F8, 0x042B, 0x0308}, {0x04F9, 0x044B, 0x0308}, {0x1E00, 0x0041, 0x0325}, {0x1E01, 0x0061, 0x0325}, {0x1E02, 0x0042, 0x0307}, {0x1E03, 0x0062, 0x0307}, {0x1E04, 0x0042, 0x0323}, {0x1E05, 0x0062, 0x0323}, {0x1E06, 0x0042, 0x0331}, {0x1E07, 0x0062, 0x0331}, {0x1E08, 0x0043, 0x0301}, {0x1E09, 0x0063, 0x0301}, {0x1E0A, 0x0044, 0x0307}, {0x1E0B, 0x0064, 0x0307}, {0x1E0C, 0x0044, 0x0323}, {0x1E0D, 0x0064, 0x0323}, {0x1E0E, 0x0044, 0x0331}, {0x1E0F, 0x0064, 0x0331}, {0x1E10, 0x0044, 0x0327}, {0x1E11, 0x0064, 0x0327}, {0x1E12, 0x0044, 0x032D}, {0x1E13, 0x0064, 0x032D}, {0x1E14, 0x0045, 0x0300}, {0x1E15, 0x0065, 0x0300}, {0x1E16, 0x0045, 0x0301}, {0x1E17, 0x0065, 0x0301}, {0x1E18, 0x0045, 0x032D}, {0x1E19, 0x0065, 0x032D}, {0x1E1A, 0x0045, 0x0330}, {0x1E1B, 0x0065, 0x0330}, {0x1E1C, 0x0045, 0x0306}, {0x1E1D, 0x0065, 0x0306}, {0x1E1E, 0x0046, 0x0307}, {0x1E1F, 0x0066, 0x0307}, {0x1E20, 0x0047, 0x0304}, {0x1E21, 0x0067, 0x0304}, {0x1E22, 0x0048, 0x0307}, {0x1E23, 0x0068, 0x0307}, {0x1E24, 0x0048, 0x0323}, {0x1E25, 0x0068, 0x0323}, {0x1E26, 0x0048, 0x0308}, {0x1E27, 0x0068, 0x0308}, {0x1E28, 0x0048, 0x0327}, {0x1E29, 0x0068, 0x0327}, {0x1E2A, 0x0048, 0x032E}, {0x1E2B, 0x0068, 0x032E}, {0x1E2C, 0x0049, 0x0330}, {0x1E2D, 0x0069, 0x0330}, {0x1E2E, 0x0049, 0x0301}, {0x1E2F, 0x0069, 0x0301}, {0x1E30, 0x004B, 0x0301}, {0x1E31, 0x006B, 0x0301}, {0x1E32, 0x004B, 0x0323}, {0x1E33, 0x006B, 0x0323}, {0x1E34, 0x004B, 0x0331}, {0x1E35, 0x006B, 0x0331}, {0x1E36, 0x004C, 0x0323}, {0x1E37, 0x006C, 0x0323}, {0x1E38, 0x004C, 0x0304}, {0x1E39, 0x006C, 0x0304}, {0x1E3A, 0x004C, 0x0331}, {0x1E3B, 0x006C, 0x0331}, {0x1E3C, 0x004C, 0x032D}, {0x1E3D, 0x006C, 0x032D}, {0x1E3E, 0x004D, 0x0301}, {0x1E3F, 0x006D, 0x0301}, {0x1E40, 0x004D, 0x0307}, {0x1E41, 0x006D, 0x0307}, {0x1E42, 0x004D, 0x0323}, {0x1E43, 0x006D, 0x0323}, {0x1E44, 0x004E, 0x0307}, {0x1E45, 0x006E, 0x0307}, {0x1E46, 0x004E, 0x0323}, {0x1E47, 0x006E, 0x0323}, {0x1E48, 0x004E, 0x0331}, {0x1E49, 0x006E, 0x0331}, {0x1E4A, 0x004E, 0x032D}, {0x1E4B, 0x006E, 0x032D}, {0x1E4C, 0x004F, 0x0301}, {0x1E4D, 0x006F, 0x0301}, {0x1E4E, 0x004F, 0x0308}, {0x1E4F, 0x006F, 0x0308}, {0x1E50, 0x004F, 0x0300}, {0x1E51, 0x006F, 0x0300}, {0x1E52, 0x004F, 0x0301}, {0x1E53, 0x006F, 0x0301}, {0x1E54, 0x0050, 0x0301}, {0x1E55, 0x0070, 0x0301}, {0x1E56, 0x0050, 0x0307}, {0x1E57, 0x0070, 0x0307}, {0x1E58, 0x0052, 0x0307}, {0x1E59, 0x0072, 0x0307}, {0x1E5A, 0x0052, 0x0323}, {0x1E5B, 0x0072, 0x0323}, {0x1E5C, 0x0052, 0x0304}, {0x1E5D, 0x0072, 0x0304}, {0x1E5E, 0x0052, 0x0331}, {0x1E5F, 0x0072, 0x0331}, {0x1E60, 0x0053, 0x0307}, {0x1E61, 0x0073, 0x0307}, {0x1E62, 0x0053, 0x0323}, {0x1E63, 0x0073, 0x0323}, {0x1E64, 0x0053, 0x0307}, {0x1E65, 0x0073, 0x0307}, {0x1E66, 0x0160, 0x0307}, {0x1E67, 0x0161, 0x0307}, {0x1E68, 0x0053, 0x0307}, {0x1E69, 0x0073, 0x0307}, {0x1E6A, 0x0054, 0x0307}, {0x1E6B, 0x0074, 0x0307}, {0x1E6C, 0x0054, 0x0323}, {0x1E6D, 0x0074, 0x0323}, {0x1E6E, 0x0054, 0x0331}, {0x1E6F, 0x0074, 0x0331}, {0x1E70, 0x0054, 0x032D}, {0x1E71, 0x0074, 0x032D}, {0x1E72, 0x0055, 0x0324}, {0x1E73, 0x0075, 0x0324}, {0x1E74, 0x0055, 0x0330}, {0x1E75, 0x0075, 0x0330}, {0x1E76, 0x0055, 0x032D}, {0x1E77, 0x0075, 0x032D}, {0x1E78, 0x0055, 0x0301}, {0x1E79, 0x0075, 0x0301}, {0x1E7A, 0x0055, 0x0308}, {0x1E7B, 0x0075, 0x0308}, {0x1E7C, 0x0056, 0x0303}, {0x1E7D, 0x0076, 0x0303}, {0x1E7E, 0x0056, 0x0323}, {0x1E7F, 0x0076, 0x0323}, {0x1E80, 0x0057, 0x0300}, {0x1E81, 0x0077, 0x0300}, {0x1E82, 0x0057, 0x0301}, {0x1E83, 0x0077, 0x0301}, {0x1E84, 0x0057, 0x0308}, {0x1E85, 0x0077, 0x0308}, {0x1E86, 0x0057, 0x0307}, {0x1E87, 0x0077, 0x0307}, {0x1E88, 0x0057, 0x0323}, {0x1E89, 0x0077, 0x0323}, {0x1E8A, 0x0058, 0x0307}, {0x1E8B, 0x0078, 0x0307}, {0x1E8C, 0x0058, 0x0308}, {0x1E8D, 0x0078, 0x0308}, {0x1E8E, 0x0059, 0x0307}, {0x1E8F, 0x0079, 0x0307}, {0x1E90, 0x005A, 0x0302}, {0x1E91, 0x007A, 0x0302}, {0x1E92, 0x005A, 0x0323}, {0x1E93, 0x007A, 0x0323}, {0x1E94, 0x005A, 0x0331}, {0x1E95, 0x007A, 0x0331}, {0x1E96, 0x0068, 0x0331}, {0x1E97, 0x0074, 0x0308}, {0x1E98, 0x0077, 0x030A}, {0x1E99, 0x0079, 0x030A}, {0x1EA0, 0x0041, 0x0323}, {0x1EA1, 0x0061, 0x0323}, {0x1EA2, 0x0041, 0x0309}, {0x1EA3, 0x0061, 0x0309}, {0x1EA4, 0x0041, 0x0301}, {0x1EA5, 0x0061, 0x0301}, {0x1EA6, 0x0041, 0x0300}, {0x1EA7, 0x0061, 0x0300}, {0x1EA8, 0x0041, 0x0309}, {0x1EA9, 0x0061, 0x0309}, {0x1EAA, 0x0041, 0x0303}, {0x1EAB, 0x0061, 0x0303}, {0x1EAC, 0x0041, 0x0302}, {0x1EAD, 0x0061, 0x0302}, {0x1EAE, 0x0041, 0x0301}, {0x1EAF, 0x0061, 0x0301}, {0x1EB0, 0x0041, 0x0300}, {0x1EB1, 0x0061, 0x0300}, {0x1EB2, 0x0041, 0x0309}, {0x1EB3, 0x0061, 0x0309}, {0x1EB4, 0x0041, 0x0303}, {0x1EB5, 0x0061, 0x0303}, {0x1EB6, 0x0041, 0x0306}, {0x1EB7, 0x0061, 0x0306}, {0x1EB8, 0x0045, 0x0323}, {0x1EB9, 0x0065, 0x0323}, {0x1EBA, 0x0045, 0x0309}, {0x1EBB, 0x0065, 0x0309}, {0x1EBC, 0x0045, 0x0303}, {0x1EBD, 0x0065, 0x0303}, {0x1EBE, 0x0045, 0x0301}, {0x1EBF, 0x0065, 0x0301}, {0x1EC0, 0x0045, 0x0300}, {0x1EC1, 0x0065, 0x0300}, {0x1EC2, 0x0045, 0x0309}, {0x1EC3, 0x0065, 0x0309}, {0x1EC4, 0x0045, 0x0303}, {0x1EC5, 0x0065, 0x0303}, {0x1EC6, 0x0045, 0x0302}, {0x1EC7, 0x0065, 0x0302}, {0x1EC8, 0x0049, 0x0309}, {0x1EC9, 0x0069, 0x0309}, {0x1ECA, 0x0049, 0x0323}, {0x1ECB, 0x0069, 0x0323}, {0x1ECC, 0x004F, 0x0323}, {0x1ECD, 0x006F, 0x0323}, {0x1ECE, 0x004F, 0x0309}, {0x1ECF, 0x006F, 0x0309}, {0x1ED0, 0x00D4, 0x0301}, {0x1ED1, 0x00F4, 0x0301}, {0x1ED2, 0x00D4, 0x0300}, {0x1ED3, 0x00F4, 0x0300}, {0x1ED4, 0x00D4, 0x0309}, {0x1ED5, 0x00F4, 0x0309}, {0x1ED6, 0x00D4, 0x0303}, {0x1ED7, 0x00F4, 0x0303}, {0x1ED8, 0x004F, 0x0302}, {0x1ED9, 0x006F, 0x0302}, {0x1EDA, 0x004F, 0x0301}, {0x1EDB, 0x006F, 0x0301}, {0x1EDC, 0x004F, 0x0300}, {0x1EDD, 0x006F, 0x0300}, {0x1EDE, 0x004F, 0x0309}, {0x1EDF, 0x006F, 0x0309}, {0x1EE0, 0x004F, 0x0303}, {0x1EE1, 0x006F, 0x0303}, {0x1EE2, 0x004F, 0x0323}, {0x1EE3, 0x006F, 0x0323}, {0x1EE4, 0x0055, 0x0323}, {0x1EE5, 0x0075, 0x0323}, {0x1EE6, 0x0055, 0x0309}, {0x1EE7, 0x0075, 0x0309}, {0x1EE8, 0x0055, 0x0301}, {0x1EE9, 0x0075, 0x0301}, {0x1EEA, 0x0055, 0x0300}, {0x1EEB, 0x0075, 0x0300}, {0x1EEC, 0x0055, 0x0309}, {0x1EED, 0x0075, 0x0309}, {0x1EEE, 0x0055, 0x0303}, {0x1EEF, 0x0075, 0x0303}, {0x1EF0, 0x0055, 0x0323}, {0x1EF1, 0x0075, 0x0323}, {0x1EF2, 0x0059, 0x0300}, {0x1EF3, 0x0079, 0x0300}, {0x1EF4, 0x0059, 0x0323}, {0x1EF5, 0x0079, 0x0323}, {0x1EF6, 0x0059, 0x0309}, {0x1EF7, 0x0079, 0x0309}, {0x1EF8, 0x0059, 0x0303}, {0x1EF9, 0x0079, 0x0303}, {0x1F59, 0x03A5, 0x0314}, {0x1F5B, 0x03A5, 0x0300}, {0x1F5D, 0x03A5, 0x0301}, {0x1F5F, 0x03A5, 0x0342}, {0x1F68, 0x03A9, 0x0313}, {0x1F69, 0x03A9, 0x0314}, {0x1F6A, 0x03A9, 0x0300}, {0x1F6B, 0x03A9, 0x0300}, {0x1F6C, 0x03A9, 0x0301}, {0x1F6D, 0x03A9, 0x0301}, {0x1F6E, 0x03A9, 0x0342}, {0x1F6F, 0x03A9, 0x0342}, {0x1FA8, 0x03A9, 0x0345}, {0x1FA9, 0x03A9, 0x0345}, {0x1FAA, 0x03A9, 0x0345}, {0x1FAB, 0x03A9, 0x0345}, {0x1FAC, 0x03A9, 0x0345}, {0x1FAD, 0x03A9, 0x0345}, {0x1FAE, 0x03A9, 0x0345}, {0x1FAF, 0x03A9, 0x0345}, {0x1FC1, 0x00A8, 0x0342}, {0x1FE8, 0x03A5, 0x0306}, {0x1FE9, 0x03A5, 0x0304}, {0x1FEA, 0x03A5, 0x0300}, {0x1FEB, 0x03A5, 0x0000}, {0x1FED, 0x00A8, 0x0300}, {0x1FEE, 0x00A8, 0x0000}, {0x1FEF, 0x0060, 0x0000}, {0x1FFA, 0x03A9, 0x0300}, {0x1FFB, 0x03A9, 0x0000}, {0x1FFC, 0x03A9, 0x0345}, {0x1FFD, 0x00B4, 0x0000}, {0x2126, 0x03A9, 0x0000}, {0x212A, 0x004B, 0x0000}, {0x212B, 0x0041, 0x0000}, {0x2260, 0x003D, 0x0338}, }; therion/thtexfonts.cxx0000644000076400010400000005071011400301052016204 0ustar userAdministrators/** * @file thtexfonts.cxx */ /* Copyright (C) 2003-2008 Martin Budaj * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include #include #include #include "thtexfonts.h" #include "thtexenc.cxx" #include "thpdfdbg.h" #include "thinit.h" #include "thpdfdata.h" #ifndef NOTHERION #include "thbuffer.h" thbuffer thtexfontsbuff; #endif using namespace std; list FONTS; typedef list unistr; encodings_new::encodings_new () { v_fon.resize(134); // v_fon.resize(127); for (int i = 0; i < 33; i++) { v_fon[i] = 0; } for (int i = 33; i < 127; i++) { // printable ASCII v_fon[i] = i; m_fon[i] = i; } v_fon[127] = 0xFB00; m_fon[0xFB00] = 127; // ff v_fon[128] = 0xFB01; m_fon[0xFB01] = 128; // fi v_fon[129] = 0xFB02; m_fon[0xFB02] = 129; // fl v_fon[130] = 0xFB03; m_fon[0xFB03] = 130; // ffi v_fon[131] = 0xFB04; m_fon[0xFB04] = 131; // ffl v_fon[132] = 0x2013; m_fon[0x2013] = 132; // en dash v_fon[133] = 0x2014; m_fon[0x2014] = 133; // em dash i_fon = 0; NFSS = 0; t1_convert = 1; } int encodings_new::get_enc_pos (int ch) { if (m_fon.find(ch) == m_fon.end()) { if (i_fon < 33) { v_fon[i_fon] = ch; m_fon[ch] = i_fon; i_fon++; } else { v_fon.push_back(ch); m_fon[ch] = v_fon.size()-1; } } //cout << "==FP== " << m_fon[style][ch] << endl; return m_fon[ch]; }; void encodings_new::write_enc_files() { if (NFSS==0) return; thprintf("generating TeX metrics ... "); char fc[10]; string style[5] = {"rm", "it", "bf", "ss", "si"}; string s; ofstream H ("thfonts.map"); // delete previous file, we will append to it below if (!H) therror(("could not write font mapping data for pdfTeX\n")); H.close(); int fcount = get_enc_count(); for (int j = 0; j < fcount; j++) { sprintf(fc,"%02d", j); string fname_enc = string("th_enc")+fc+".enc"; ofstream F(fname_enc.c_str()); if (!F) therror(("could not write encoding file\n")); F << "% LIGKERN uni002D uni002D =: uni2013 ; uni2013 uni002D =: uni2014 ;" << endl; F << "% LIGKERN uni0066 uni0066 =: uniFB00 ; uni0066 uni006C =: uniFB02 ; uni0066 uni0069 =: uniFB01 ; uniFB00 uni0069 =: uniFB03 ; uniFB00 uni006C =: uniFB04 ;" << endl; F << "/" << fname_enc << "[" << endl; for (int k=0; k < 256; k++) { //cout << ccount << "** i:" << i << " j:" << j << " k:" << k << " " << v_fon[i][k] << endl; if ((v_fon.size() <= ((unsigned) 256*j + k)) || (v_fon[256*j + k] == 0)) F << "/.notdef" << endl; else F << "/uni" << setw(4) << setfill('0') << hex << noshowbase << uppercase << v_fon[256*j + k] << endl; } F << "] def" << endl; F.close(); for (int i=0; i<5; i++) { string fname_tfm = "th"+style[i]+fc; // convention used also in tex2uni // we don't use -fliga to turn ligatures on, beacause between // subsequent runs (metapost, pdftex) the meaning of ligatures // positioned at the end of the encoding would change // if more characters are present at the second run // -- a few ligatures are initialised in the constructor string type1 = (t1_convert==1) ? " " : " --no-type1 "; if (system(("\"" + string(thini.get_path_otftotfm()) + "\" -e " + fname_enc + " -fkern --no-default-ligkern --no-virtual --name " + fname_tfm + // " -fkern --no-default-ligkern --name " + fname_tfm + // type1 + " --warn-missing "+otf_file[i]+" > thotftfm.tmp").c_str()) > 0) type1 + otf_file[i]+" > thotftfm.tmp").c_str()) > 0) therror((("can't generate TFM file from "+otf_file[i]+" (LCDF typetools not installed?)").c_str())); ifstream G ("thotftfm.tmp"); if (!G) therror(("could not read font mapping data\n")); while (G) { getline(G,s); if (s.find("<") != string::npos) break; } if (s.substr(s.size()-3,3)=="otf" || s.substr(s.size()-3,3)=="OTF") { s.replace(s.rfind("<"), 1, "<<"); // OTF fonts must be fully embedded } G.close(); ofstream H ("thfonts.map", ios::app); if (!H) therror(("could not write font mapping data for pdfTeX\n")); H << "\\pdfmapline{+" << s << "}" << endl; H.close(); } } thprintf("done\n"); } int encodings_new::get_enc_count () { return v_fon.size() / 256 + 1; } int encodings_new::get_uni (int f, int ch) { return v_fon[256*f + ch]; } encodings_new ENC_NEW; // returns the index of given encoding (as used in predefined encoding arrays) // or -1 if such an encoding is not known int get_enc_id(const char * enc) { for (int i=0; i=192 && c<=223) { j = 64*(c-192); c = s[++i]; j += c-128; t.push_back(j); } else if (c>=224 && c<=239) { j = 4096*(c-224); c = s[++i]; j += 64*(c-128); c = s[++i]; j += c-128; t.push_back(j); } else therror (("Invalid utf-8 string!")); // we don't support higher // unicode characters } return t; } // converts utf8 to 2B Unicode in a special format for pdfTeX string utf2texoctal(string str) { unistr s = utf2uni(str); string t; char ch[10]; // t = "\\ne\\376\\ne\\377"; unsigned char c; for (unistr::iterator I = s.begin(); I != s.end(); I++) { c = (*I) / 256; sprintf(ch,"%o",c); t = t + "\\ne\\" + (string) ch; c = (*I) % 256; sprintf(ch,"%o",c); t = t + "\\ne\\" + (string) ch; } return t; } // converts utf8 to 2B Unicode in a special format for pdfTeX string utf2texhex(string str) { unistr s = utf2uni(str); string t; char ch[10]; unsigned char c; for (unistr::iterator I = s.begin(); I != s.end(); I++) { c = (*I) / 256; sprintf(ch,"%02x",c); t += (string) ch; c = (*I) % 256; sprintf(ch,"%02x",c); t += (string) ch; } return t; } string replace_all(string s, string f, string r) { size_t found = s.find(f); while(found != string::npos) { s.replace(found, f.length(), r); found = s.find(f); } return s; } // easier to use brute force than to link regex on all platforms :( string select_lang(string s, string lang) { size_t i,j; if (s.find(""); if (i != string::npos) { // precise match i = s.find(">",i); j = s.find(""); if (i != string::npos) { // match main language part i = s.find(">",i); j = s.find("",i); j = s.find("") != string::npos) align = 1; else if (str.find("") != string::npos) align = 1; else if (str.find("") != string::npos) align = 0; else if (str.find("") != string::npos) align = 2; if (str.find("
") != string::npos) is_multiline = true; str = replace_all(str,"
",""); str = replace_all(str,"",""); str = replace_all(str,"",""); str = replace_all(str,"",""); str = replace_all(str,"
","\033\1"); // \e not accepted in VC++ str = replace_all(str,"","\033\2"); str = replace_all(str,"","\033\3"); str = replace_all(str,"","\033\4"); str = replace_all(str,"","\033\5"); str = replace_all(str,"","\033\6"); str = replace_all(str,"","\033\7"); str = replace_all(str,"","\033\10"); str = replace_all(str,"","\033\11"); if (is_multiline) { T << "\\vbox{\\halign{"; if (align > 0) T << "\\hfil"; T << "#"; if (align < 2) T << "\\hfil"; T << "\\cr"; } unistr s = utf2uni(str); for (unistr::iterator I = s.begin(); I != s.end(); I++) { wc = *I; if (wc == 32) { // space requires special treatment T << "\\ "; // (it's not included in TeX fonts) continue; // so encodings search doesn't help } else if (wc == 27) { // escaped chars (special formatting) wc = *(++I); switch (wc) { case 1: if (rtl) T << "\\endR"; T << "\\cr"; if (rtl) T << "\\beginR"; switch (laststyle) { case 1: T << "\\rm"; break; case 2: T << "\\it"; break; case 3: T << "\\bf"; break; case 4: T << "\\ss"; break; case 5: T << "\\si"; break; } SELFONT; T << " "; break; case 2: T << "\\thinspace "; break; case 3: T << "\\rm "; laststyle = 1; SELFONT; break; case 4: T << "\\it "; laststyle = 2; SELFONT; break; case 5: T << "\\bf "; laststyle = 3; SELFONT; break; case 6: T << "\\ss "; laststyle = 4; SELFONT; break; case 7: T << "\\si "; laststyle = 5; SELFONT; break; case 8: T << "\\global\\TeXXeTstate=1\\beginR "; rtl = true; break; case 9: T << "\\endR "; rtl = false; break; } continue; } if (ENC_NEW.NFSS==0) { if (wc==39) wc = 8217; // apostrophe -> quoteright; bool local_exit = false; bool local_repeat = true; bool is_accent = false; bool bot_accent = false; int bc = 0, alt = 0; // base char, alternative char while(local_repeat) { local_repeat = false; for (list::iterator J = FONTS.begin(); J != FONTS.end(); J++) { int j = J->id; for (int i=0; i<256; i++) { if (texenc[i][j] == wc || (is_accent && (texenc[i][j] == alt))) { if (j != lastenc) { // do a better optimization // of the font changes in a string T << "\\thf" << u2str(j+1);//<< "{}"; lastenc = j; } if (!is_accent) { // some characters require special treatment in TeX // if (i==0 || i==127 || i==123 || i==125 || i==36 || i==38 || // i==10 || i==35 || i==95 || i==126 || i==13 || i==94 || // i==92 || i==37 || i < 32) { //original T << "\\char" << i << " "; T << "\\char" << i << " " << (remove_kerning ? "{}" : ""); // } // else { // T << char(i); //// if (bot_accent) T << " "; // } } else if (!bot_accent) { T << "\\accent" << i << " "; } else { T << "\\fixaccent{" << i << "}"; } local_exit = true; local_repeat = false; } if (local_exit) break; } if (local_exit) break; } if (!local_exit && !is_accent) { // current character is not included in any of the used encodings; // let's try to find an approximation based on Unicode // decomposition table int a = 0, b = max_base - 1, i, j; while (a<=b) { i = (int) (a+b)/2; j = unibase[i][0]; if (j == wc) { bc = unibase[i][1]; wc = unibase[i][2]; alt = -1; bot_accent = false; switch (wc) { case 768: alt = 96; break; // grave case 769: alt = 180; break; // acute case 770: alt = 710; break; // circumflex case 771: alt = 732; break; // tilde case 772: alt = 175; break; // macron case 774: alt = 728; break; // breve case 775: alt = 729; break; // dot above case 776: alt = 168; break; // diaeresis case 778: alt = 730; break; // ring above case 779: alt = 733; break; // double acute -- hungarian case 780: alt = 711; break; // caron case 807: alt = 184; bot_accent = true; break; // cedilla case 808: alt = 731; bot_accent = true; break; // ogonek } if (!bot_accent && bc == 105) bc = 305; // dotless i correction if (!bot_accent && bc == 106) bc = 63166; // dotless j correction is_accent = true; local_repeat = true; break; } if (j > wc) b = i - 1; else a = i + 1; } } else if (is_accent) { wc = bc; is_accent = false; local_repeat = true; local_exit = false; } } if (!local_exit) // we didn't find anything to display // it would be possible to add here various characters mapped // by plain TeX macros to mathematical fonts (backslash &c.) // This would require to make math fonts scalable with the \size[.] macro T << "."; } else { // NFSS == 1 int k = ENC_NEW.get_enc_pos(wc); int f_ind = k / 256; if (f_ind != lastenc) { T << "\\thf" << u2str(f_ind+1); lastenc = f_ind; } T << "\\char" << k % 256 << " " << (remove_kerning ? "{}" : ""); } } // endfor if (is_multiline) { T << "\\cr}}"; } T << "\\mainfont{}"; return T.str(); } int tex2uni(string font, int ch) { if (ENC_NEW.NFSS==0) { int id = -1; for (list::iterator J = FONTS.begin(); J != FONTS.end(); J++) if (J->rm == font || J->it == font || J->ss == font || J->si == font || J->bf == font) { id = J->id; break; } assert(id != -1); ch %= 256; if (ch < 0) ch += 256; // if string is based on signed char return texenc[ch][id]; } else { // NFSS string f_ind = font.substr(4,2); // basic check that we have a number assert(f_ind[0] >= '0' && f_ind[0] <= '9' && f_ind[1] >= '0' && f_ind[1] <= '9'); if (ch < 0) ch += 256; // if string is based on signed char return ENC_NEW.get_uni(atoi(f_ind.c_str()),ch); } } //const char * utf2tex (char * s) { // string t = utf2tex(string(s)); // return t.c_str(); //} #ifndef NOTHERION const char * utf2tex (const char * s, bool b) { string t = utf2tex(string(s),b); thtexfontsbuff.strcpy(t.c_str()); return thtexfontsbuff.get_buffer(); } #endif // For simlicity we suppose that all characters which are set by TeX macros // are included in the first encoding specified. This concerns especially // page numbers, labels, and scalebar legend. Therefore we switch to \thfa // after each size/style change void print_fonts_setup() { ofstream P("th_enc.tex"); // included also in MetaPost if(!P) therror(("Can't write file th_enc.tex")); P << "\\def\\rms{\\rm}" << endl; P << "\\def\\its{\\it}" << endl; P << "\\def\\bfs{\\bf}" << endl; P << "\\def\\sss{\\ss}" << endl; P << "\\def\\sis{\\si}" << endl; if (ENC_NEW.NFSS==0) { P << "\\def\\fixaccent#1#2 {{\\setbox0\\hbox{#2}\\ifdim\\ht0=1ex\\accent#1 #2%" << endl; P << " \\else\\ooalign{\\unhbox0\\crcr\\hidewidth\\char#1\\hidewidth}\\fi}}" << endl; P << "\\def\\size[#1]{%" << endl; P << " \\let\\prevstyle\\laststyle" << endl; P << " \\baselineskip#1pt" << endl; P << " \\baselineskip=1.2\\baselineskip" << endl; string firstfont = "\\thf" + u2str(FONTS.begin()->id+1); P << " \\def\\rm{"; for (list::iterator J = FONTS.begin(); J != FONTS.end(); J++) P << "\\font\\thf" << u2str(J->id+1) << "=" << J->rm << " at#1pt"; P << "\\let\\laststyle\\rms" << firstfont << "}%" << endl; P << " \\def\\it{"; for (list::iterator J = FONTS.begin(); J != FONTS.end(); J++) P << "\\font\\thf" << u2str(J->id+1) << "=" << J->it << " at#1pt"; P << "\\let\\laststyle\\its" << firstfont << "}%" << endl; P << " \\def\\bf{"; for (list::iterator J = FONTS.begin(); J != FONTS.end(); J++) P << "\\font\\thf" << u2str(J->id+1) << "=" << J->bf << " at#1pt"; P << "\\let\\laststyle\\bfs" << firstfont << "}%" << endl; P << " \\def\\ss{"; for (list::iterator J = FONTS.begin(); J != FONTS.end(); J++) P << "\\font\\thf" << u2str(J->id+1) << "=" << J->ss << " at#1pt"; P << "\\let\\laststyle\\sss" << firstfont << "}%" << endl; P << " \\def\\si{"; for (list::iterator J = FONTS.begin(); J != FONTS.end(); J++) P << "\\font\\thf" << u2str(J->id+1) << "=" << J->si << " at#1pt"; P << "\\let\\laststyle\\sis" << firstfont << "}%" << endl; P << " \\prevstyle" << endl; P << "}"; P << "\\let\\laststyle\\rms" << endl; P << "\\size[10]\\ss" << endl; P << "\\def\\mainfont{" << firstfont << "}" << endl; } else { string styledef[5] = {"rm", "it", "bf", "ss", "si"}; P << "\\def\\size[#1]{%" << endl; P << " \\let\\prevstyle\\laststyle" << endl; P << " \\baselineskip#1pt" << endl; P << " \\baselineskip=1.2\\baselineskip" << endl; for (int j=0; j<5; j++) { P << " \\def\\" << styledef[j] << "{"; for (int i = 0; i < ENC_NEW.get_enc_count(); i++) P << "\\font\\thf" << u2str(i+1) << "=th" << styledef[j] << setw(2) << setfill('0') << i << " at#1pt"; P << "\\let\\laststyle\\" << styledef[j] << "s\\thfa}%" << endl; } P << " \\prevstyle" << endl; P << "}"; P << "\\let\\laststyle\\rms" << endl; P << "\\size[10]\\ss" << endl; P << "\\def\\mainfont{\\thfa}" << endl; } P << "\\ifx\\TeXXeTstate\\undefined" << endl; P << " \\let\\beginR\\relax" << endl; P << " \\let\\endR\\relax" << endl; P << " \\def\\TeXXeTstate=#1{\\def\\blbost{}}" << endl; // for using \global\TeXXeTstate P << "\\fi" << endl; P.close(); } #ifdef NOTHERION #ifndef NOMAIN int main () { //cout << "xl2 " << get_enc_index("xl2") << endl; return(0); } #endif #endif // obsolete: // else if (wc == 60) { // special <.> string formatting // tmp = ""; // I++; // while (I != s.end() && (wc = *I) != 62 && wc < 128) { // tmp += char(wc); // I++; // } // if (tmp == "br") T << "\\cr "; // else if (tmp == "center" || tmp == "left" || tmp == "right") ; // else if (tmp == "thsp") T << "\\thinspace "; // else T << "?"; // if (I == s.end()) break; // incorrect input (no closing `>') // continue; // } therion/thtexfonts.h0000644000076400010400000000357711211165172015655 0ustar userAdministrators/* * Copyright (C) 2003 Martin Budaj * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thtexfonts_h #define thtexfonts_h #include #include #include #include using namespace std; string select_lang(string s, string lang); struct fontrecord { int id; string rm,it,bf,ss,si; }; extern list FONTS; int get_enc_id(const char* enc); void print_tex_encodings (void); void print_fonts_setup(void); void init_encodings(); string utf2texoctal(string s); string utf2texhex(string s); string utf2tex (string s, bool b=false); int tex2uni(string font, int ch); struct encodings_new { private: vector v_fon; // tex - unicode map m_fon; // unicode - tex int i_fon; // last position public: int NFSS, t1_convert; string otf_file[5]; encodings_new(); int get_enc_pos(int ch); int get_enc_count(); int get_uni (int f, int ch); void write_enc_files(); }; extern encodings_new ENC_NEW; #ifndef NOTHERION const char * utf2tex (const char * s, bool b = false); #endif #endif therion/thtf.cxx0000644000076400010400000000265410625655142014773 0ustar userAdministrators/** * @file thtf.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thtf.h" #include "thexception.h" #include "thparse.h" #include thtf::~thtf() {} void thtf::parse_scale(char * sstr) { int sv; thparse_double(sv,this->sfactor,sstr); if (sv != TT_SV_NUMBER) ththrow(("invalid scale factor -- %s", sstr)) if (this->sfactor == 0.0) ththrow(("invalid scale factor -- 0.0")) } double thtf::transform(double value) { return value * this->sfactor * this->ufactor; } int thtf::get_units() { return this->units; } therion/thtf.h0000644000076400010400000000324110625655142014411 0ustar userAdministrators/** * @file thtf.h * Units transformation class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thtf_h #define thtf_h /** * Transformation class. * * Parent class for all units transformations. */ class thtf { public: double ufactor, ///< Units factor. sfactor; ///< Scale factor. int units; public: /** * Standard constructor. */ thtf() : ufactor(1.0), sfactor(1.0) {} virtual ~thtf(); /** * Parse units factor. */ virtual void parse_units(char * ustr) = 0; /** * Return units. */ virtual int get_units(); /** * Parse scale factor. */ void parse_scale(char * sstr); /** * Make units transformation on number. */ virtual double transform(double value); }; #endif therion/thtfangle.cxx0000644000076400010400000000365210625655142016001 0ustar userAdministrators/** * @file thtfangle.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thparse.h" #include "thtfangle.h" #include "thexception.h" #include "thinfnan.h" #include thtfangle::thtfangle() { this->units = TT_TFU_DEG; this->allow_percentage = false; } void thtfangle::parse_units(char * ustr) { this->units = thmatch_token(ustr, thtt_tfunits_angle); switch (this->units) { case TT_TFU_DEG: case TT_TFU_DMS: this->ufactor = 1.0; break; case TT_TFU_MIN: this->ufactor = 0.0166666666666666666666666666666666666666666; break; case TT_TFU_GRAD: this->ufactor = 0.9; break; case TT_TFU_PERC: if (this->allow_percentage) { this->ufactor = 1.0; break; } case TT_TFU_UNKNOWN_ANGLE: ththrow(("unknown angle unit -- %s", ustr)) break; } } double thtfangle::transform(double value) { switch (this->units) { case TT_TFU_PERC: return (atan(thtf::transform(value) / 100.0) / THPI * 180.0); break; default: return thtf::transform(value); } } therion/thtfangle.h0000644000076400010400000000346210625655142015425 0ustar userAdministrators/** * @file thtfangle.h * Units transformation class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thtfangle_h #define thtfangle_h #include "thtf.h" #include "thparse.h" enum {TT_TFU_DEG, TT_TFU_DMS, TT_TFU_GRAD, TT_TFU_MIN, TT_TFU_PERC, TT_TFU_UNKNOWN_ANGLE}; static const thstok thtt_tfunits_angle[] = { {"deg", TT_TFU_DEG}, {"degree", TT_TFU_DEG}, {"degrees", TT_TFU_DEG}, {"grad", TT_TFU_GRAD}, {"grads", TT_TFU_GRAD}, {"mil",TT_TFU_GRAD}, {"mils", TT_TFU_GRAD}, {"min", TT_TFU_MIN}, {"minute", TT_TFU_MIN}, {"minutes", TT_TFU_MIN}, {"percent", TT_TFU_PERC}, {"percentage", TT_TFU_PERC}, {NULL, TT_TFU_UNKNOWN_ANGLE}, }; /** * Angle transformation class. */ class thtfangle : public thtf { public: bool allow_percentage; /** * Parse units factor. */ thtfangle(); virtual void parse_units(char * ustr); virtual double transform(double value); }; #endif therion/thtflength.cxx0000644000076400010400000000323110754774266016201 0ustar userAdministrators/** * @file thtflength.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thtflength.h" #include "thexception.h" thtflength::thtflength() { this->units = TT_TFU_M; } void thtflength::parse_units(char * ustr) { this->units = thmatch_token(ustr, thtt_tfunits_length); switch (this->units) { case TT_TFU_CM: this->ufactor = 0.01; break; case TT_TFU_MM: this->ufactor = 0.001; break; case TT_TFU_FT: this->ufactor = 0.3048; break; case TT_TFU_IN: this->ufactor = 0.0254; break; case TT_TFU_M: this->ufactor = 1.0; break; case TT_TFU_YD: this->ufactor = 0.9144; break; case TT_TFU_UNKNOWN_LENGTH: ththrow(("unknown length unit -- %s", ustr)) break; } } therion/thtflength.h0000644000076400010400000000402110754774250015615 0ustar userAdministrators/** * @file thtflength.h * Units transformation class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thtflength_h #define thtflength_h #include "thtf.h" #include "thparse.h" enum {TT_TFU_YD, TT_TFU_FT, TT_TFU_IN, TT_TFU_M, TT_TFU_CM, TT_TFU_MM, TT_TFU_UNKNOWN_LENGTH}; static const thstok thtt_tfunits_length[] = { {"centimeter", TT_TFU_CM}, {"centimeters", TT_TFU_CM}, {"centimetre", TT_TFU_CM}, {"centimetres", TT_TFU_CM}, {"cm", TT_TFU_CM}, {"feet", TT_TFU_FT}, {"feets", TT_TFU_FT}, {"ft", TT_TFU_FT}, {"in", TT_TFU_IN}, {"inch", TT_TFU_IN}, {"inches", TT_TFU_IN}, {"m", TT_TFU_M}, {"meter", TT_TFU_M}, {"meters", TT_TFU_M}, {"metres", TT_TFU_M}, {"metric", TT_TFU_M}, {"millimeter", TT_TFU_MM}, {"millimeters", TT_TFU_MM}, {"millimetre", TT_TFU_MM}, {"millimetres", TT_TFU_MM}, {"mm", TT_TFU_MM}, {"yard", TT_TFU_YD}, {"yards", TT_TFU_YD}, {"yd", TT_TFU_YD}, {NULL, TT_TFU_UNKNOWN_LENGTH}, }; /** * Length transformation class. */ class thtflength : public thtf { public: thtflength(); /** * Parse units factor. */ virtual void parse_units(char * ustr); }; #endif therion/thtfpwf.cxx0000644000076400010400000001107310625655142015503 0ustar userAdministrators/** * @file thtfpwf.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thtfpwf.h" #include "thexception.h" #include "thinfnan.h" #include "thparse.h" void thtfpwf::clear() { if (this->valn > 0) { delete [] this->valp; this->valn = 0; this->valp = NULL; } } thtfpwf::~thtfpwf() { this->clear(); } int thtfpwfxy_comp(const void * x1, const void * x2) { thtfpwfxy * p1 = (thtfpwfxy *) x1; thtfpwfxy * p2 = (thtfpwfxy *) x2; if (p1->x < p2->x) return -1; if (p1->x == p2->x) return 0; else return 1; } void thtfpwf::set(size_t nv, double * pv) { size_t idx; this->clear(); if (nv > 0) { this->valp = new thtfpwfxy [nv]; this->valn = nv; for(idx = 0; idx < nv; idx++) { this->valp[idx].x = *pv; pv++; this->valp[idx].y = *pv; pv++; } // now let's sort them qsort(this->valp,this->valn,sizeof(thtfpwfxy),thtfpwfxy_comp); // for(idx = 0; idx < nv; idx++) { // printf("PWF SETTING: %f -> %f\n", this->valp[idx].x, this->valp[idx].y); // } } } void thtfpwf::parse(int nfact, char ** sfact) { int sv; switch (nfact) { case 1: thparse_double(sv, this->b, *sfact); if (sv != TT_SV_NUMBER) ththrow(("invalid number -- %s", *sfact)) break; case 2: thparse_double(sv, this->b, sfact[0]); if (sv != TT_SV_NUMBER) ththrow(("invalid number -- %s", sfact[0])) thparse_double(sv, this->a, sfact[1]); if (sv != TT_SV_NUMBER) ththrow(("invalid number -- %s", sfact[1])) break; default: if ((nfact > 2) && ((nfact % 2) == 0)) { double * coefs = new double [nfact]; int cidx,spv; for(cidx = 0; cidx < nfact; cidx++) { thparse_double(spv,coefs[cidx],sfact[cidx]); if (spv == TT_SV_UNKNOWN) ththrow(("invalid number -- %s", sfact[cidx])) } this->set(nfact / 2, coefs); delete [] coefs; } else ththrow(("invalid number of transformation constants")) } if (this->a == 0.0) ththrow(("invalid scale factor -- %f", this->a)) } double thtfpwf::evaluate(double value) { switch (valn) { case 0: return (value - b) * a; case 1: return this->valp->y; default: // let's do a binary search int a = 0, b = (int) this->valn - 1, c, r, ret = -1; while (a <= b) { c = unsigned((a + b) / 2); if (this->valp[c].x < value) r = -1; else { if (c == 0) r = 0; else { if (this->valp[c - 1].x <= value) r = 0; else r = 1; } } if (r == 0) { ret = c; break; } if (r < 0) a = c + 1; else b = c - 1; } switch (ret) { case -1: return this->valp[this->valn - 1].y; case 0: return this->valp->y; default: double x1 = this->valp[ret - 1].x; double y1 = this->valp[ret - 1].y; double x2 = this->valp[ret].x; double y2 = this->valp[ret].y; if (thisnan(y1) || thisnan(y2)) return thnan; if ((thisinf(y1) != 0) || (thisinf(y2) != 0)) { if ((thisinf(y1) + thisinf(y2)) == 0) return thnan; if ((thisinf(y1) + thisinf(y2)) > 0) return thinf; if ((thisinf(y1) + thisinf(y2)) < 0) return -thinf; } if (x1 == x2) return y1; return (y1 + (value - x1) * (y2 - y1) / (x2 - x1)); } } } thtfpwfxy * thtfpwf::get_values() { return this->valp; } size_t thtfpwf::get_size() { return this->valn; } therion/thtfpwf.h0000644000076400010400000000377110625655142015136 0ustar userAdministrators/** * @file thtfpwf.h * Piece wise function. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thtfpwf_h #define thtfpwf_h #include #include /** * Piecewise function element. */ struct thtfpwfxy { double x, y; }; /** * Piecewise function class. * * If two elements are defined, makes makes (x - b) * a transformation. */ class thtfpwf { double a, ///< Multiplier. b; ///< Addition. size_t valn; thtfpwfxy * valp; void clear(); ///< Clear the value array. public: /** * Standard constructor. */ thtfpwf() : a(1.0), b(0.0), valn(0), valp(NULL) {} /** * Standard destructor. */ virtual ~thtfpwf(); /** * Parse function. */ virtual void parse(int nfact, char ** sfact); /** * Make units transformation on number. */ double evaluate(double value); /** * Set function values. */ void set(size_t nv, double * pv); /** * Return function values. */ thtfpwfxy * get_values(); /** * Return number of function values. */ size_t get_size(); }; #endif therion/thtmpdir.cxx0000644000076400010400000001370612071370274015656 0ustar userAdministrators/** * @file thtmpdir.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thtmpdir.h" #include "therion.h" #include "thinit.h" #include #include #ifndef THMSVC #include #include #else #include #define mkdir _mkdir #define S_ISDIR(v) (((v) | _S_IFDIR) != 0) #endif #include #include #include #include #ifdef THWIN32 #include #define snprintf _snprintf #define getpid _getpid #define THPATHSEPARATOR "\\" #else #define THPATHSEPARATOR "/" #endif thtmpdir::thtmpdir() { this->exist = false; this->tried = false; this->name.strcpy("."); #ifdef THDEBUG this->delete_all = false; this->debug = true; #else this->delete_all = true; this->debug = false; #endif } thtmpdir::~thtmpdir() { this->remove(); } void thtmpdir::create() { if ((!this->exist) && (!this->tried)) { thbuffer dir_path; this->tmp_remove_script = thini.tmp_remove_script.get_buffer(); #ifndef THMSVC #ifdef THDEBUG // the debugging temp directory dir_path = "thTMPDIR"; #else if (strlen(thini.tmp_path.get_buffer()) > 0) { dir_path.strcpy(thini.tmp_path.get_buffer()); } else { char dn[16]; char *envtmp; // release temp directory envtmp = getenv("TEMP"); if (envtmp != NULL) { dir_path = envtmp; } else { envtmp = getenv("TMP"); if (envtmp != NULL) { dir_path = envtmp; } else { #ifdef THWIN32 dir_path = "."; #else dir_path = "/tmp"; #endif } } dir_path += THPATHSEPARATOR; if (this->debug) { thbuffer wdir; wdir.guarantee(1024); getcwd(wdir.get_buffer(),1024); wdir += "/thTMPDIR"; dir_path = wdir; //dir_path += "thTMPDIR"; } else { dir_path += "th"; snprintf(&(dn[0]),16,"%d",getpid()); dir_path += &(dn[0]); } } #endif #else thbuffer wdir; wdir.guarantee(1024); getcwd(wdir.get_buffer(),1024); wdir += "\\thTMPDIR"; dir_path = wdir; #endif this->tried = true; #ifdef THWIN32 if (mkdir(dir_path) != 0) { #else if (mkdir(dir_path,0046750) != 0) { #endif struct #ifdef THMSVC _stat #else stat #endif buf; #ifdef THMSVC _stat #else stat #endif (dir_path,&buf); if ((errno == EEXIST) && (S_ISDIR(buf.st_mode))) { if (!this->debug) { thwarning(("temporary directory already exists")); } this->exist = true; this->name = dir_path; } else { therror(("can't create temporary directory -- %s", dir_path.get_buffer())); } } else { this->exist = true; this->name = dir_path; } } } void thtmpdir::remove() { if (this->exist && this->delete_all) { // remove directory contents if (strlen(this->tmp_remove_script.get_buffer()) > 0) { thbuffer tmpfname; tmpfname = this->tmp_remove_script.get_buffer(); tmpfname += " "; tmpfname += this->name; system(tmpfname.get_buffer()); #ifndef THMSVC DIR *tmpdir = opendir(this->name); if (tmpdir != NULL) { thwarning(("error deleting temporary directory -- %s",this->name.get_buffer())) closedir(tmpdir); } else { this->name = "."; this->tried = false; this->exist = false; } } else { #ifdef THMACOSX thbuffer tmpfname; tmpfname = "rm -f -R "; tmpfname += this->name; system(tmpfname.get_buffer()); DIR *tmpdir = opendir(this->name); if (tmpdir != NULL) { thwarning(("error deleting temporary directory -- %s",this->name.get_buffer())) closedir(tmpdir); } else { this->name = "."; this->tried = false; this->exist = false; } #else DIR *tmpdir = opendir(this->name); struct dirent *tmpf; thbuffer tmpfname; if (tmpdir != NULL) { tmpf = readdir(tmpdir); while (tmpf != NULL) { tmpfname = this->name; tmpfname += THPATHSEPARATOR; tmpfname += tmpf->d_name; unlink(tmpfname); tmpf = readdir(tmpdir); } closedir(tmpdir); } // remove directory if (rmdir(this->name) != 0) thwarning(("error deleting temporary directory -- %s",this->name.get_buffer())) else { this->name = "."; this->tried = false; this->exist = false; } #endif #endif } } } const char* thtmpdir::get_dir_name() { if (!this->exist) this->create(); return(this->name); } const char* thtmpdir::get_file_name(const char *fname) { if (!this->exist) this->create(); this->file_name = this->name; this->file_name += THPATHSEPARATOR; this->file_name += fname; return(this->file_name); } void thtmpdir::set_delete(bool delete_id) { this->delete_all = delete_id; } bool thtmpdir::get_delete() { return(this->delete_all); } void thtmpdir::delete_on() { this->delete_all = true; } void thtmpdir::delete_off() { this->delete_all = false; } thtmpdir thtmp; therion/thtmpdir.h0000644000076400010400000000450712071370220015271 0ustar userAdministrators/** * @file thtmpdir.h * Temporary directory module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thtmpdir_h #define thtmpdir_h #include "thbuffer.h" /** * Temporary directory module. * * Creates and remove temporary directory. */ class thtmpdir { public: bool exist; ///< ID whether temp directory exist. bool tried; ///< ID, if we've tried to create temp directory. bool delete_all; ///< ID whether to delete temporary directory. bool debug; ///< ID, whether debugging mode is on. thbuffer name, ///< Name of temp dir. file_name, ///< Name of temporary file. tmp_remove_script; /** * Creates temporary directory. */ void create(); /** * Removes temporaty directory. */ void remove(); /** * Standard constructor. */ thtmpdir(); /** * Standard destructor. */ ~thtmpdir(); /** * Retrieve temporary directory name. */ const char* get_dir_name(); /** * Form valid path from temporary directory name and given file name. */ const char* get_file_name(const char *fname); /** * Set deleting state. */ void set_delete(bool delete_id); /** * Retrieve deleting state. */ bool get_delete(); /** * Turn deleting temp directory on. */ void delete_on(); /** * Turn deleting temp directory off. */ void delete_off(); }; extern thtmpdir thtmp; #endif therion/thtrans.cxx0000644000076400010400000005342310625655142015511 0ustar userAdministrators/** * @file thtrans.cxx * Transformation structures. */ /* Copyright (C) 2006 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include #include #include #include "thtrans.h" #include "thdatabase.h" void thvec2::reset() { this->m_x = 0.0; this->m_y = 0.0; } void thmat2::reset() { this->m_xx = 1.0; this->m_xy = 0.0; this->m_yx = 0.0; this->m_yy = 1.0; } thlintrans::thlintrans() { this->reset(); } void thlintrans::reset() { this->m_scale = 1.0; this->m_rot = 0.0; this->m_initpts.clear(); this->m_shift.reset(); this->m_bmat.reset(); this->m_fmat.reset(); } thvec2 thvec2::operator += (const thvec2 & v) { this->m_x += v.m_x; this->m_y += v.m_y; return (*this); } thvec2 thvec2::operator -= (const thvec2 & v) { this->m_x -= v.m_x; this->m_y -= v.m_y; return (*this); } thvec2 thvec2::operator *= (const double & c) { this->m_x *= c; this->m_y *= c; return (*this); } thvec2 thvec2::operator /= (const double & c) { this->m_x /= c; this->m_y /= c; return (*this); } void thvec2::minimize(thvec2 v) { if (this->m_x > v.m_x) this->m_x = v.m_x; if (this->m_y > v.m_y) this->m_y = v.m_y; } void thvec2::maximize(thvec2 v) { if (this->m_x < v.m_x) this->m_x = v.m_x; if (this->m_y < v.m_y) this->m_y = v.m_y; } thmat2 thmat2::operator *= (const double & c) { this->m_xx *= c; this->m_xy *= c; this->m_yx *= c; this->m_yy *= c; return (*this); } thmat2 thmat2::operator /= (const double & c) { this->m_xx /= c; this->m_xy /= c; this->m_yx /= c; this->m_yy /= c; return (*this); } thmat2 thmat2::inverse() { double d; d = (this->m_xx * this->m_yy - this->m_xy * this->m_yx); return thmat2(this->m_yy / d, -1.0 * this->m_xy / d, -1.0 * this->m_yx / d, this->m_xx / d); } thvec2 operator - (const thvec2 & v) { return thvec2( - v.m_x, - v.m_y); } thvec2 operator + (const thvec2 & v1, const thvec2 & v2) { return thvec2(v1.m_x + v2.m_x, v1.m_y + v2.m_y); } thvec2 operator - (const thvec2 & v1, const thvec2 & v2) { return thvec2(v1.m_x - v2.m_x, v1.m_y - v2.m_y); } double operator * (const thvec2 & v1, const thvec2 & v2) { return (v1.m_x * v2.m_x + v1.m_y * v2.m_y); } double operator ^ (const thvec2 & v1, const thvec2 & v2) { return (v1.m_x * v2.m_y - v1.m_y * v2.m_x); } thvec2 operator * (const double & c, const thvec2 & v) { return thvec2(c * v.m_x, c * v.m_y); } thvec2 operator * (const thvec2 & v, const double & c) { return thvec2(v.m_x * c, v.m_y * c); } thvec2 operator / (const thvec2 & v, const double & c) { return thvec2(v.m_x / c, v.m_y / c); } thvec2 operator * (const thmat2 & m, const thvec2 & v) { return thvec2(m.m_xx * v.m_x + m.m_xy * v.m_y, m.m_yx * v.m_x + m.m_yy * v.m_y); } thmat2 operator * (const double & c, const thmat2 & m) { return thmat2(c * m.m_xx, c * m.m_xy, c * m.m_yx, c * m.m_yy); } thmat2 operator * (const thmat2 & m, const double & c) { return thmat2(c * m.m_xx, c * m.m_xy, c * m.m_yx, c * m.m_yy); } thmat2 operator / (const thmat2 & m, const double & c) { return thmat2(m.m_xx / c, m.m_xy / c, m.m_yx / c, m.m_yy / c); } void thvec2::normalize() { double l = this->length(); if (l > 0.0) *this /= this->length(); } thline2::thline2(thvec2 from, thvec2 to) { thvec2 norm; norm = to - from; norm.normalize(); this->m_a = - norm.m_y; this->m_b = norm.m_x; this->m_c = - (this->m_a * from.m_x + this->m_b * from.m_y); } thvec2::thvec2( thline2 & l1, thline2 & l2 ) { // | m_xx m_xy | * | x | = | -c1 | // | m_yx m_yy | | y | | -c2 | thmat2 m( l1.m_a, l1.m_b, l2.m_a, l2.m_b ); thmat2 m_1 = m.inverse(); m_x = - ( m_1.m_xx * l1.m_c + m_1.m_xy * l2.m_c ); m_y = - ( m_1.m_yx * l1.m_c + m_1.m_yy * l2.m_c ); } double thline2::eval(thvec2 p) { return (p.m_x * this->m_a + p.m_y * this->m_b + this->m_c); } void thmat3::reset() { m_xx = 1.0; m_xy = 0.0; m_xz = 0.0; m_yx = 0.0; m_yy = 1.0; m_yz = 0.0; m_zx = 0.0; m_zy = 0.0; m_zz = 1.0; } thmat3 thmat3::inverse() { thmat3 minor; minor.m_xx = m_yy * m_zz - m_yz * m_zy; minor.m_xy = m_yx * m_zz - m_yz * m_zx; minor.m_xz = m_yx * m_zy - m_yy * m_zx; minor.m_yx = m_xy * m_zz - m_xz * m_zy; minor.m_yy = m_xx * m_zz - m_xz * m_zx; minor.m_yz = m_xx * m_zy - m_xy * m_zx; minor.m_zx = m_xy * m_yz - m_xz * m_yy; minor.m_zy = m_xx * m_yz - m_xz * m_yx; minor.m_zz = m_xx * m_yy - m_xy * m_yx; double det = m_xx * minor.m_xx - m_xy * minor.m_xy + m_xz * minor.m_xz; return thmat3( minor.m_xx/det, -minor.m_yx/det, minor.m_zx/det, -minor.m_xy/det, minor.m_yy/det, -minor.m_zy/det, minor.m_xz/det, -minor.m_yz/det, minor.m_zz/det ); } void thlintrans::init(thmat2 A, thvec2 b) { this->m_fmat = A; this->m_shift = b; } void thlintrans::insert_point(thvec2 src, thvec2 dst) { this->m_initpts.push_back(thlintrans_pt(src, dst)); } void thlintrans::init_points() { // Initialize transformation using least squares. this->m_fmat.reset(); this->m_bmat.reset(); this->m_shift.reset(); this->m_scale = 1.0; this->m_rot = 0.0; size_t npt = this->m_initpts.size(); thlintrans_pt_list::iterator ipt; if (npt == 0) return; if (npt == 1) { ipt = this->m_initpts.begin(); this->m_shift = ipt->m_tgt - ipt->m_src; return; } // 1. najdeme transformaciu targetov for (ipt = this->m_initpts.begin(); ipt != this->m_initpts.end(); ipt++) { this->m_shift += ipt->m_tgt; } this->m_shift /= double(npt); double sumXx, sumYy, sumYx, sumXy, sumxx, sumyy, X, Y, a, b; sumXx = 0.0; sumYy = 0.0; sumYx = 0.0; sumXy = 0.0; sumxx = 0.0; sumyy = 0.0; for (ipt = this->m_initpts.begin(); ipt != this->m_initpts.end(); ipt++) { X = ipt->m_tgt.m_x - this->m_shift.m_x; Y = ipt->m_tgt.m_y - this->m_shift.m_y; sumXx += X * ipt->m_src.m_x; sumYy += Y * ipt->m_src.m_y; sumXy += X * ipt->m_src.m_y; sumYx += Y * ipt->m_src.m_x; sumxx += ipt->m_src.m_x * ipt->m_src.m_x; sumyy += ipt->m_src.m_y * ipt->m_src.m_y; } a = (sumXx + sumYy) / (sumxx + sumyy); b = (sumYx - sumXy) / (sumxx + sumyy); if (((sumxx + sumyy) > 0) && (hypot(a,b) > 0.0)) { this->m_fmat.m_xx = a; this->m_fmat.m_xy = -b; this->m_fmat.m_yx = b; this->m_fmat.m_yy = a; this->m_scale = hypot(a,b); this->m_rot = - atan2(b,a) / 3.14159265359 * 180.0; } } double thvec2::orientation() { double o = atan2(this->m_x, this->m_y) / 3.14159265359 * 180.0; if (o < 0.0) o += 360.0; return o; } void thlintrans::init(thvec2 src, thvec2 dst) { this->m_fmat.reset(); this->m_scale = 1.0; this->m_rot = 0.0; this->m_shift = dst - src; } void thlintrans::init(thvec2 srcF, thvec2 srcT, thvec2 dstF, thvec2 dstT) { thvec2 srcV, dstV; srcV = srcT - srcF; dstV = dstT - dstF; double r1, r2, rr, ss; r1 = atan2(srcV.m_y, srcV.m_x); r2 = atan2(dstV.m_y, dstV.m_x); rr = r2 - r1; ss = dstV.length() / srcV.length(); this->m_fmat = ss * thmat2(cos(rr), -sin(rr), sin(rr), cos(rr)); this->m_shift = dstF - this->m_fmat * srcF; this->m_scale = ss; this->m_rot = rr / 3.14159265358 * 180.0; } void thlintrans::init_backward() { this->m_bmat = this->m_fmat.inverse(); } thvec2 thlintrans::forward(thvec2 src) { return (this->m_fmat * src + this->m_shift); } thvec2 thlintrans::backward(thvec2 dst) { return (this->m_bmat * (dst - this->m_shift)); } double thvec2::length() { return hypot(this->m_x, this->m_y); } void thmorphtrans::insert_point(thvec2 src, thvec2 dst) { this->m_initpts.push_back(thlintrans_pt(src, dst - src)); } thvec2 thmorphtrans::forward(thvec2 src) { thlintrans_pt_list::iterator i; thvec2 sumv; double sumw(0.0), d, w; for(i = this->m_initpts.begin(); i != this->m_initpts.end(); i++) { d = (i->m_src - src).length(); if (d > 0.0) { w = 1.0 / (d * d); sumw += w; sumv += w * i->m_tgt; } else { return (src + i->m_tgt); } } sumv /= sumw; sumv += src; return sumv; } thvec2 thmorphtrans::backward(thvec2 dst, thvec2 ini) { #define EPS 0.01 #define FF(v) (dst - this->forward(v)).length() double F, a, b, d; thvec2 x(ini), dd; size_t counter(0); do { F = FF(x); if (F < EPS) break; a = (FF(x + thvec2(EPS, 0.0)) - F) / EPS; b = (FF(x + thvec2(0.0, EPS)) - F) / EPS; d = a * a + b * b; if (d == 0.0) break; dd = thvec2(a * F / d, b * F / d); x -= dd; } while (counter++ < 10); return x; } struct thm2t_point { thvec2 m_src, m_dst; bool m_used; long m_id; thm2t_point() : m_used(false), m_id(-1) {} thm2t_point(thvec2 src, thvec2 dst, long id) : m_src(src), m_dst(dst), m_used(false), m_id(id) {} }; typedef thm2t_point * thm2t_point_ptr; typedef std::map thm2t_point_ptr_map; typedef std::list thm2t_point_list; struct thm2t_line { long m_f, m_t; thm2t_line(long f, long t) { if (f < t) { this->m_f = f; this->m_t = t; } else { this->m_t = f; this->m_f = t; } } }; typedef thm2t_line * thm2t_line_ptr; bool operator < (const struct thm2t_line & l1, const struct thm2t_line & l2) { if (l1.m_f < l2.m_f) return true; if (l1.m_f > l2.m_f) return false; if (l1.m_t < l2.m_t) return true; return false; } typedef std::list thm2t_line_list; typedef std::map thm2t_line_map; struct thm2t_zoom_point { thvec2 m_src; double m_dst; long m_id; thm2t_zoom_point(thvec2 src, double dst, long id) : m_src(src), m_dst(dst), m_id(id) {} }; typedef std::list thm2t_zoom_point_list; struct thm2t_feature { bool m_single; thm2t_point_ptr m_fp, m_tp; thline2 m_ln, m_lnf, m_lnt; thlintrans m_lintrans; thlinzoomtrans m_zoomtrans; double calc_dist(thvec2 src); }; double thm2t_feature::calc_dist(thvec2 src) { double lnfd, lntd; if (this->m_single) { return (src - this->m_fp->m_src).length(); } else { lnfd = this->m_lnf.eval(src); lntd = this->m_lnt.eval(src); if (lnfd < 0) return (src - this->m_fp->m_src).length(); else if (lntd < 0) return (src - this->m_tp->m_src).length(); else return fabs(this->m_ln.eval(src)); } } typedef std::list thm2t_feature_list; struct thmorph2trans_members { thm2t_point_list m_points; thm2t_point_ptr_map m_point_map; thm2t_line_list m_lines; thm2t_line_map m_line_map; thm2t_point_ptr get_point(long id); thm2t_zoom_point_list m_zoom_points; thm2t_feature_list m_features; }; thm2t_point_ptr thmorph2trans_members::get_point(long id) { thm2t_point_ptr_map::iterator ii; ii = this->m_point_map.find(id); if (ii == this->m_point_map.end()) return NULL; else return ii->second; } thmorph2trans::thmorph2trans() { this->m = new thmorph2trans_members; this->reset(); } thmorph2trans::~thmorph2trans() { delete this->m; } void thmorph2trans::reset() { this->m_eps = 0.01; this->m->m_lines.clear(); this->m->m_points.clear(); this->m->m_point_map.clear(); this->m->m_zoom_points.clear(); this->m->m_features.clear(); } void thmorph2trans::insert_point(thvec2 src, thvec2 dst, long id) { thm2t_point_list::iterator i; i = this->m->m_points.insert(this->m->m_points.end(), thm2t_point(src, dst, id)); this->m->m_point_map[id] = &(*i); } void thmorph2trans::insert_zoom_point(thvec2 src, double dst, long id) { this->m->m_zoom_points.push_back(thm2t_zoom_point(src, dst, id)); } void thmorph2trans::insert_line(long from, long to) { thm2t_line tmp(from, to); thm2t_line_map::iterator mi; if (from == to) return; if ((this->m->get_point(from) == NULL) || (this->m->get_point(to) == NULL)) return; mi = this->m->m_line_map.find(tmp); if (mi == this->m->m_line_map.end()) { thm2t_line_ptr lp = &(*this->m->m_lines.insert(this->m->m_lines.end(), thm2t_line(from, to))); this->m->m_line_map[tmp] = lp; } } void thmorph2trans::init(double eps) { this->m->m_features.clear(); this->m_eps = eps; // initialize features thm2t_line_list::iterator iln; for(iln = this->m->m_lines.begin(); iln != this->m->m_lines.end(); iln++) { thm2t_feature tmpf; tmpf.m_fp = this->m->get_point(iln->m_f); tmpf.m_tp = this->m->get_point(iln->m_t); if ((tmpf.m_fp != NULL) && (tmpf.m_tp != NULL)) { if (((tmpf.m_fp->m_src - tmpf.m_tp->m_src).length() > 0.0) && ((tmpf.m_fp->m_dst - tmpf.m_tp->m_dst).length() > 0.0)) { tmpf.m_single = false; tmpf.m_ln = thline2(tmpf.m_fp->m_src, tmpf.m_tp->m_src); tmpf.m_lnf = thline2(tmpf.m_fp->m_src, tmpf.m_fp->m_src + thvec2(-tmpf.m_ln.m_a, -tmpf.m_ln.m_b)); tmpf.m_lnt = thline2(tmpf.m_tp->m_src, tmpf.m_tp->m_src + thvec2(tmpf.m_ln.m_a, tmpf.m_ln.m_b)); tmpf.m_lintrans.init(tmpf.m_fp->m_src, tmpf.m_tp->m_src, tmpf.m_fp->m_dst, tmpf.m_tp->m_dst); tmpf.m_fp->m_used = true; tmpf.m_tp->m_used = true; this->m->m_features.push_back(tmpf); } } } thm2t_point_list::iterator ipt, ipt2; for(ipt = this->m->m_points.begin(); ipt != this->m->m_points.end(); ipt++) { thm2t_feature tmpf; tmpf.m_fp = &(*ipt); tmpf.m_tp = NULL; if (!tmpf.m_fp->m_used) { // find nearest TP double md, cd; md = -1.0; for(ipt2 = this->m->m_points.begin(); ipt2 != this->m->m_points.end(); ipt2++) { if (ipt->m_id != ipt2->m_id) { cd = (ipt->m_dst - ipt2->m_dst).length(); if ((cd > 0.0) && ((ipt->m_src - ipt2->m_src).length() > 0.0)) { if (md < 0.0) { md = cd; tmpf.m_tp = &(*ipt2); } else if (cd < md) { md = cd; tmpf.m_tp = &(*ipt2); } } } } if (tmpf.m_tp == NULL) { tmpf.m_single = true; tmpf.m_lintrans.init(tmpf.m_fp->m_src, tmpf.m_fp->m_dst); } else { tmpf.m_single = false; tmpf.m_ln = thline2(tmpf.m_fp->m_src, tmpf.m_tp->m_src); tmpf.m_lnf = thline2(tmpf.m_fp->m_src, tmpf.m_fp->m_src + thvec2(-tmpf.m_ln.m_a, -tmpf.m_ln.m_b)); tmpf.m_lnt = thline2(tmpf.m_tp->m_src, tmpf.m_tp->m_src + thvec2(tmpf.m_ln.m_a, tmpf.m_ln.m_b)); tmpf.m_lintrans.init(tmpf.m_fp->m_src, tmpf.m_tp->m_src, tmpf.m_fp->m_dst, tmpf.m_tp->m_dst); tmpf.m_fp->m_used = true; tmpf.m_tp->m_used = true; } this->m->m_features.push_back(tmpf); } } // initialize zoom transformations thm2t_feature_list::iterator i; thm2t_zoom_point_list::iterator izp; for(i = this->m->m_features.begin(); i != this->m->m_features.end(); i++) { if (i->m_tp != NULL) i->m_zoomtrans.init_points(i->m_fp->m_dst, i->m_tp->m_dst); else i->m_zoomtrans.init_points(i->m_fp->m_dst, i->m_fp->m_dst); } for(izp = this->m->m_zoom_points.begin(); izp != this->m->m_zoom_points.end(); izp++) { for(i = this->m->m_features.begin(); i != this->m->m_features.end(); i++) { if (izp->m_id == i->m_fp->m_id) i->m_zoomtrans.init_from(this->forward(izp->m_src), izp->m_dst); if (i->m_tp != NULL) { if (izp->m_id == i->m_tp->m_id) i->m_zoomtrans.init_to(this->forward(izp->m_src), izp->m_dst); } } } for(i = this->m->m_features.begin(); i != this->m->m_features.end(); i++) { i->m_zoomtrans.init(); } } thvec2 thmorph2trans::forward(thvec2 src) { thm2t_feature_list::iterator i; thvec2 sumv, cdst; double sumw(0.0), d, w; for(i = this->m->m_features.begin(); i != this->m->m_features.end(); i++) { d = i->calc_dist(src); cdst = i->m_zoomtrans.forward(i->m_lintrans.forward(src)); if (d > 0.0) { w = 1.0 / (d * d * d * d); sumw += w; sumv += w * cdst; } else { return cdst; } } sumv /= sumw; return sumv; } thvec2 thmorph2trans::backward(thvec2 dst, thvec2 ini) { #define EPS 0.01 #define FF(v) (dst - this->forward(v)).length() double F, a, b, d; thvec2 x(ini), dd; size_t counter(0); do { F = FF(x); if (F < EPS) break; a = (FF(x + thvec2(EPS, 0.0)) - F) / EPS; b = (FF(x + thvec2(0.0, EPS)) - F) / EPS; d = a * a + b * b; if (d == 0.0) break; dd = thvec2(a * F / d, b * F / d); x -= dd; } while (counter++ < 10); return x; } void thmorph2trans::insert_lines_from_db() { long nst = (long) thdb.db1d.station_vec.size(); thdb1d_tree_node * nodes = thdb.db1d.get_tree_nodes(), * cnode; thdb1d_tree_arrow * carrow; // station by station and insert shots thm2t_point_list::iterator ipt; thdataleg * lg; long fid, tid; for(ipt = this->m->m_points.begin(); ipt != this->m->m_points.end(); ipt++) { if ((ipt->m_id > 0) && (ipt->m_id < nst)) { cnode = &(nodes[ipt->m_id - 1]); carrow = cnode->first_arrow; while (carrow != NULL) { lg = carrow->leg->leg; fid = thdb.db1d.station_vec[lg->from.id - 1].uid; tid = thdb.db1d.station_vec[lg->to.id - 1].uid; this->insert_line(fid, tid); carrow = carrow->next_arrow; } } } } thlinzoomtrans::thlinzoomtrans() { this->m_valid = false; this->m_single = true; this->m_fl = 0.0; this->m_fr = 0.0; this->m_tl = 0.0; this->m_tr = 0.0; this->m_flc = 0; this->m_frc = 0; this->m_tlc = 0; this->m_trc = 0; } void thlinzoomtrans::init_points(thvec2 from, thvec2 to) { this->m_from = from; this->m_to = to; thvec2 vec; vec = to - from; this->m_line_l = vec.length(); if (this->m_line_l > 0.0) { this->m_line = thline2(from, to); this->m_line_from = thline2(from, from + thvec2(vec.m_y, -vec.m_x)); this->m_orient_from = thvec2(vec.m_y, -vec.m_x).orientation(); this->m_line_to = thline2(to, to + thvec2(-vec.m_y, vec.m_x)); this->m_orient_to = thvec2(-vec.m_y, vec.m_x).orientation(); this->m_single = false; } else { this->m_single = true; } } void thlinzoomtrans::init_from(thvec2 src, double dst) { double l; l = (src - this->m_from).length(); if (l > 0.0) { if (this->m_single) { this->m_flc++; this->m_fl += (dst / l); } else { if (this->m_line.eval(src) > 0) { this->m_flc++; this->m_fl += (dst / l); } else { this->m_frc++; this->m_fr += (dst / l); } } } } void thlinzoomtrans::init_to(thvec2 src, double dst) { double l; l = (src - this->m_to).length(); if (l > 0.0) { if (this->m_single) { this->m_flc++; this->m_fl += (dst / l); } else { if (this->m_line.eval(src) > 0) { this->m_tlc++; this->m_tl += (dst / l); } else { this->m_trc++; this->m_tr += (dst / l); } } } } void thlinzoomtrans::init() { if ((this->m_flc > 0) || (this->m_frc > 0) || (this->m_tlc > 0) || (this->m_trc > 0)) { this->m_valid = true; if (this->m_flc > 0) this->m_fl /= double(this->m_flc); else this->m_fl = 1.0; if (this->m_frc > 0) this->m_fr /= double(this->m_frc); else this->m_fr = 1.0; if (this->m_tlc > 0) this->m_tl /= double(this->m_tlc); else this->m_tl = 1.0; if (this->m_trc > 0) this->m_tr /= double(this->m_trc); else this->m_tr = 1.0; //if ((this->m_flc == 0) && (this->m_frc == 0)) { // this->m_fl = 1.0; // this->m_fr = 1.0; //} else if ((this->m_flc == 0) && (this->m_frc > 0)) { // this->m_fl = this->m_fr; //} else if ((this->m_flc > 0) && (this->m_frc == 0)) { // this->m_fr = this->m_fl; //} //if ((this->m_tlc == 0) && (this->m_trc == 0)) { // this->m_tl = 1.0; // this->m_tr = 1.0; //} else if ((this->m_tlc == 0) && (this->m_trc > 0)) { // this->m_tl = this->m_tr; //} else if ((this->m_tlc > 0) && (this->m_trc == 0)) { // this->m_tr = this->m_tl; //} } } thvec2 thlinzoomtrans::forward(thvec2 src) { if (this->m_valid) { thvec2 vec; double vo; if (this->m_single) { vec = src - this->m_from; vec *= this->m_fl; return (src + vec); } else { double dl, dlf, dlt; dl = this->m_line.eval(src); dlf = this->m_line_from.eval(src); dlt = this->m_line_to.eval(src); if (dlf < 0.0) { vec = src - this->m_from; vo = vec.orientation() - this->m_orient_from; if (vo < 0.0) vo += 360.0; vo /= 180.0; vec *= (vo * this->m_fl + (1.0 - vo) * this->m_fr); return this->m_from + vec; } else if (dlt < 0.0) { vec = src - this->m_to; vo = this->m_orient_to - vec.orientation() - 180.0; if (vo < 0.0) vo += 360.0; vo /= 180.0; vec *= (vo * this->m_tl + (1.0 - vo) * this->m_tr); return this->m_to + vec; } else { thvec2 lp; double ln; ln = this->m_line.m_a * this->m_line.m_a + this->m_line.m_b * this->m_line.m_b; lp = thvec2(src.m_x - this->m_line.m_a * dl / ln, src.m_y - this->m_line.m_b * dl / ln); vo = this->m_line.eval(lp); vec = src - lp; vo = (lp - this->m_from).length() / this->m_line_l; if (dl > 0) { vec *= (vo * this->m_tl + (1.0 - vo) * this->m_fl); } else { vec *= (vo * this->m_tr + (1.0 - vo) * this->m_fr); } return lp + vec; } } } else { return src; } } therion/thtrans.h0000644000076400010400000001716310625655142015137 0ustar userAdministrators/** * @file thtrans.h * Transformation structures. */ /* Copyright (C) 2006-2007 Stacho Mudrak, Marco Corvi * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thtrans_2_h #define thtrans_2_h #include // sqrt #include "thinfnan.h" // NaN #include #include #include struct thline2; // forward declaration /** 2D vector * */ struct thvec2 { double m_x, m_y; //!< coordinates thvec2() : m_x(0.0), m_y(0.0) {} //!< default cstr thvec2(double x, double y) : m_x(x), m_y(y) {} //!< cstr thvec2( thline2 & l1, thline2 & l2 ); //!< intersection of two lines thvec2 operator += (const thvec2 & v); //!< vector addition thvec2 operator -= (const thvec2 & v); //!< vector difference thvec2 operator *= (const double & c); //!< multiplication by a scalar thvec2 operator /= (const double & c); //!< division by a scalar void minimize(thvec2 v); //!< min( this, v ) void maximize(thvec2 v); //!< max( this, v ) double length(); //!< |V| = sqrt( V * V ) double length2() const { return m_x*m_x + m_y*m_y; } //!< V * V double orientation(); //!< orientation in degrees void reset(); //!< V = 0 void normalize(); //!< V / |V| thvec2 orthogonal() { return thvec2( m_y, -m_x); } //!< V^ (anticlockwise orthogonal vector) bool is_nan() const { return thisnan(m_x) || thisnan(m_y); } }; /** 2 x 2 matrix with real coefficient *
 *       m_xx  m_xy
 *       m_yx  m_yy 
 * 
*/ struct thmat2 { double m_xx, m_xy, m_yx, m_yy; //!< matric coefficients thmat2() : m_xx(1.0), m_xy(0.0), m_yx(0.0), m_yy(1.0) {} //!< cstr thmat2(double xx, double xy, double yx, double yy) : m_xx(xx), m_xy(xy), m_yx(yx), m_yy(yy) {} thmat2 operator *= (const double & c); //!< multiplication by a scalar thmat2 operator /= (const double & c); //!< division by a scalar thmat2 inverse(); //!< inverse matrix double determinant() { return m_xx*m_yy - m_xy*m_yx; } //!< determinant double trace() { return m_xx + m_yy; } //!< trace void reset(); //!< M = Identity matrix }; /** line in the 2D plane, with equation *
 *     m_a * X + m_b * Y + m_c = 0
 * 
*/ struct thline2 { double m_a, m_b, m_c; //!< coefficients of the line thline2() : m_a(0.0), m_b(0.0), m_c(0.0) {} //!< cstr thline2(double a, double b, double c) : m_a(a), m_b(b), m_c(c) {} thline2(thvec2 from, thvec2 to); //!< cstr: line joining two vectors double eval(thvec2 p); //!< evalate the line eq. on the vector }; /** linear algebra operations */ thvec2 operator - (const thvec2 & v); // -V thvec2 operator + (const thvec2 & v1, const thvec2 & v2); // V1 + V2 thvec2 operator - (const thvec2 & v1, const thvec2 & v2); // V1 - V2 double operator * (const thvec2 & v1, const thvec2 & v2); // V1 * V2 double operator ^ (const thvec2 & v1, const thvec2 & v2); // V1 ^ V2 = V1 * (V2^) thvec2 operator * (const double & c, const thvec2 & v); // c * V1 thvec2 operator * (const thvec2 & v, const double & c); // V1 * c thvec2 operator / (const thvec2 & v, const double & c); // V1 / c thvec2 operator * (const thmat2 & m, const thvec2 & v); // M * V1 thmat2 operator * (const double & c, const thmat2 & m); // c * M thmat2 operator * (const thmat2 & m, const double & c); // M * c thmat2 operator / (const thmat2 & m, const double & c); // M / c /** * 3x3 matrix */ struct thmat3 { double m_xx, m_xy, m_xz; //!< first row double m_yx, m_yy, m_yz; //!< second row double m_zx, m_zy, m_zz; //!< second row /** default cstr: set the matrix to the identity */ thmat3() : m_xx(1.0), m_xy(0.0), m_xz(0.0) , m_yx(0.0), m_yy(1.0), m_yz(0.0) , m_zx(0.0), m_zy(0.0), m_zz(1.0) { } /** cstr with the nine matrix elements, row-wise */ thmat3(double xx, double xy, double xz, double yx, double yy, double yz, double zx, double zy, double zz) : m_xx(xx), m_xy(xy), m_xz(xz) , m_yx(yx), m_yy(yy), m_yz(yz) , m_zx(zx), m_zy(zy), m_zz(zz) { } /** set the matrix to the identity */ void reset(); /** compute the inverse matrix * @return the inverse matrix */ thmat3 inverse(); }; /** linear transformation point */ struct thlintrans_pt { thvec2 m_src; //!< point in the source domain thvec2 m_tgt; //!< point in the target domain thlintrans_pt() {} /** cstr */ thlintrans_pt(thvec2 src, thvec2 tgt) : m_src(src) , m_tgt(tgt) { } }; /** list of linear-transform points */ typedef std::list thlintrans_pt_list; /** * Linear transformation. Rotate, zoom, shift. */ struct thlintrans { thmat2 m_fmat; //!< forward matrix thmat2 m_bmat; //!< backward matrix thvec2 m_shift; double m_rot, m_scale; thlintrans_pt_list m_initpts; thlintrans(); void reset(); void init(thmat2 A, thvec2 b); void init(thvec2 src, thvec2 dst); void init(thvec2 srcX, thvec2 srcY, thvec2 dstX, thvec2 dstY); void insert_point(thvec2 src, thvec2 dst); void init_points(); void init_backward(); thvec2 forward(thvec2 src); thvec2 backward(thvec2 dst); }; /** * Linear zooming transformation. */ struct thlinzoomtrans { bool m_valid, m_single; thvec2 m_from, m_to; double m_fl, m_fr, m_tl, m_tr; int m_flc, m_frc, m_tlc, m_trc; thline2 m_line_from, m_line_to, m_line; double m_orient_from, m_orient_to, m_line_l; thlinzoomtrans(); void init_points(thvec2 from, thvec2 to); void init_from(thvec2 src, double dst); void init_to(thvec2 src, double dst); void init(); thvec2 forward(thvec2 src); }; /** * Morphing transformation. */ struct thmorphtrans { thlintrans_pt_list m_initpts; void reset(); void insert_point(thvec2 src, thvec2 dst); thvec2 forward(thvec2 src); thvec2 backward(thvec2 dst, thvec2 ini = thvec2(0,0)); }; /** * Advanced morphing transformation. */ struct thmorph2trans { struct thmorph2trans_members * m; double m_eps; thmorph2trans(); ~thmorph2trans(); void reset(); void insert_point(thvec2 src, thvec2 dst, long id); void insert_line(long from, long to); void insert_lines_from_db(); void insert_zoom_point(thvec2 src, double dst, long id); void init(double eps = 0.01); thvec2 forward(thvec2 src); thvec2 backward(thvec2 dst, thvec2 ini = thvec2(0,0)); }; #endif therion/thversion.h0000644000076400010400000000003312267474540015466 0ustar userAdministrators#define THVERSION "5.3.13" therion/thwarp.cxx0000644000076400010400000003433512047265472015337 0ustar userAdministrators/** * @file thexpsys.cxx */ /* Copyright (C) 2007 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thwarp.h" #include "thdb1d.h" #include "thscrap.h" #include "thtrans.h" #include "th2ddataobject.h" #include "thpoint.h" #include "thconfig.h" thwarp::~thwarp() {} thpic * thwarp::morph(thsketch * sketch, double scale) { this->m_sketch = sketch; return NULL; } void thwarp::self_delete() { delete this; } /** * Sketch station structure. */ struct thwarplinst { double x, y, tx, ty; thdb1ds * st; thwarplinst() : x(0.0), y(0.0), tx(0.0), ty(0.0), st(NULL) {} }; typedef std::list thwarplinst_list; thpic * thwarplin::morph(thsketch * sketch, double scale) { if (this->morphed && this->mpic.exists()) return &(this->mpic); if (!sketch->m_pic.exists()) return NULL; thwarplinst_list stations; thwarplinst tmpst; thdb2dcp * ccp; ccp = sketch->m_scrap->fcpp; while (ccp != NULL) { if ((ccp->point != NULL) && (ccp->st != NULL)) { tmpst.x = ccp->pt->x - sketch->m_x; tmpst.y = ccp->pt->y - sketch->m_y; tmpst.tx = ccp->tx + sketch->m_scrap->proj->rshift_x; tmpst.ty = ccp->ty + sketch->m_scrap->proj->rshift_y; tmpst.st = ccp->st; stations.push_back(tmpst); } ccp = ccp->nextcp; } if (stations.size() < 2) return NULL; this->morphed = true; // if linear transformation, use only two stations with maximal // distance on output if ((this->method == 0) && (stations.size() > 2)) { thwarplinst_list::iterator sti1, sti2; thwarplinst tmpst2; tmpst2.st = NULL; double maxdist, cdist; maxdist = 0.0; for(sti1 = stations.begin(); sti1 != stations.end(); sti1++) { sti2 = sti1; sti2++; while (sti2 != stations.end()) { cdist = thvec2(sti1->tx - sti2->tx, sti1->ty - sti2->ty).length(); if (cdist > maxdist) { tmpst = *sti1; tmpst2 = *sti2; maxdist = cdist; } sti2++; } } if (tmpst2.st != NULL) { stations.clear(); stations.push_back(tmpst); stations.push_back(tmpst2); } } thlintrans T1, T2, T3, TLIN; thwarplinst_list::iterator ii; // Calculate transformations. // T1 - shift // T2 - rotate from TLIN // T3 - scale and shift from TLIN const char * fn; size_t fnx, fnl; fn = sketch->m_pic.fname; fnl = strlen(sketch->m_pic.fname); for(fnx = 0; fnx < fnl; fnx++) { if (((sketch->m_pic.fname[fnx] == '/') || (sketch->m_pic.fname[fnx] == '\\')) && (fnx < fnl - 1)) { fn = &(sketch->m_pic.fname[fnx + 1]); } } if (thtext_inline) thprintf("\n"); thprintf("morphing %s ", fn); thtext_inline = true; for (ii = stations.begin(); ii != stations.end(); ii++) { T1.m_shift -= thvec2(ii->x, ii->y); } T1.m_shift /= double(stations.size()); T1.init_backward(); for (ii = stations.begin(); ii != stations.end(); ii++) { TLIN.insert_point(T1.forward(thvec2(ii->x, ii->y)), thvec2(ii->tx, ii->ty)); } TLIN.init_points(); // create T2 and T3 from TLIN T2.m_fmat = TLIN.m_fmat / TLIN.m_scale; T2.init_backward(); T3.m_fmat.reset(); T3.m_fmat *= TLIN.m_scale; T3.m_scale = TLIN.m_scale; T3.m_shift = TLIN.m_shift; T3.init_backward(); long mw, mh, x, y, yy,counter; thvec2 pmin, pmax, ptmp, mpic_origin; counter = 1; if (/*(stations.size() < 3) ||*/ (this->method == 0)) { pmin = pmax = T2.forward(T1.forward(thvec2(0.0, 0.0))); ptmp = T2.forward(T1.forward(thvec2(double(sketch->m_pic.width), 0.0))); pmin.minimize(ptmp); pmax.maximize(ptmp); ptmp = T2.forward(T1.forward(thvec2(0.0, double(sketch->m_pic.height)))); pmin.minimize(ptmp); pmax.maximize(ptmp); ptmp = T2.forward(T1.forward(thvec2(double(sketch->m_pic.width), double(sketch->m_pic.height)))); pmin.minimize(ptmp); pmax.maximize(ptmp); mpic_origin = thvec2(pmin.m_x, pmin.m_y); mw = long(pmax.m_x + 0.5) - long(pmin.m_x - 0.5); mh = long(pmax.m_y + 0.5) - long(pmin.m_y - 0.5); thprintf("(%.1f Mpix)", double(mw * mh) / 1000000.0); sketch->m_pic.rgba_load(); this->mpic.rgba_init(mw, mh); for (x = 0; x < mw; x++) { for (y = 0; y < mh; y++) { ptmp = T1.backward(T2.backward(mpic_origin + thvec2(double(x), double(y)))); this->mpic.rgba_set_pixel(x, y, sketch->m_pic.rgba_interpolate_pixel(ptmp.m_x, ptmp.m_y)); if ((counter++ % 20000) == 0) thprintf(" [%.0f%%]", double(counter) / double(mw * mh) * 100.0); } } } else if (this->method == 1) { thmorphtrans TM; for (ii = stations.begin(); ii != stations.end(); ii++) { TM.insert_point( T2.forward(T1.forward(thvec2(ii->x, ii->y))), T3.backward(thvec2(ii->tx, ii->ty))); } pmin = pmax = TM.forward(T2.forward(T1.forward(thvec2(0.0, 0.0)))); for(x = 0; x <= double(sketch->m_pic.width); x++) { ptmp = TM.forward(T2.forward(T1.forward(thvec2(double(x), 0.0)))); pmin.minimize(ptmp); pmax.maximize(ptmp); ptmp = TM.forward(T2.forward(T1.forward(thvec2(double(x), double(sketch->m_pic.height))))); pmin.minimize(ptmp); pmax.maximize(ptmp); } for(y = 0; y <= double(sketch->m_pic.height); y++) { ptmp = TM.forward(T2.forward(T1.forward(thvec2(0.0, double(y))))); pmin.minimize(ptmp); pmax.maximize(ptmp); ptmp = TM.forward(T2.forward(T1.forward(thvec2(double(sketch->m_pic.width), double(y))))); pmin.minimize(ptmp); pmax.maximize(ptmp); } thvec2 start; start = T2.forward(T1.forward(thvec2(0.0, 0.0))); mpic_origin = thvec2(pmin.m_x, pmin.m_y); mw = long(pmax.m_x + 0.5) - long(pmin.m_x - 0.5); mh = long(pmax.m_y + 0.5) - long(pmin.m_y - 0.5); thprintf("(%.1f Mpix)", double(mw * mh) / 1000000.0); sketch->m_pic.rgba_load(); this->mpic.rgba_init(mw, mh); for (x = 0; x < mw; x++) { for (yy = 0; yy < mh; yy++) { y = yy - mh/2; if (y < 0) y += mh; start = TM.backward(mpic_origin + thvec2(double(x), double(y)), start); ptmp = T1.backward(T2.backward(start)); this->mpic.rgba_set_pixel(x, y, sketch->m_pic.rgba_interpolate_pixel(ptmp.m_x, ptmp.m_y)); if ((counter++ % 20000) == 0) thprintf(" [%.0f%%]", double(counter) / double(mw * mh) * 100.0); } } } else if (method == 2) { thmorph2trans TM; for (ii = stations.begin(); ii != stations.end(); ii++) { TM.insert_point( T2.forward(T1.forward(thvec2(ii->x, ii->y))), T3.backward(thvec2(ii->tx, ii->ty)), ii->st->uid); } TM.insert_lines_from_db(); TM.init(); pmin = pmax = TM.forward(T2.forward(T1.forward(thvec2(0.0, 0.0)))); for(x = 0; x <= double(sketch->m_pic.width); x++) { ptmp = TM.forward(T2.forward(T1.forward(thvec2(double(x), 0.0)))); pmin.minimize(ptmp); pmax.maximize(ptmp); ptmp = TM.forward(T2.forward(T1.forward(thvec2(double(x), double(sketch->m_pic.height))))); pmin.minimize(ptmp); pmax.maximize(ptmp); } for(y = 0; y <= double(sketch->m_pic.height); y++) { ptmp = TM.forward(T2.forward(T1.forward(thvec2(0.0, double(y))))); pmin.minimize(ptmp); pmax.maximize(ptmp); ptmp = TM.forward(T2.forward(T1.forward(thvec2(double(sketch->m_pic.width), double(y))))); pmin.minimize(ptmp); pmax.maximize(ptmp); } thvec2 start, * ss(NULL); mpic_origin = thvec2(pmin.m_x, pmin.m_y); mw = long(pmax.m_x + 0.5) - long(pmin.m_x - 0.5); mh = long(pmax.m_y + 0.5) - long(pmin.m_y - 0.5); if (mh > 0) ss = new thvec2 [mh]; thprintf("(%.1f Mpix)", double(mw * mh) / 1000000.0); sketch->m_pic.rgba_load(); start = T2.forward(T1.forward(thvec2(0.0, double(mh/2.0)))); this->mpic.rgba_init(mw, mh); for (x = 0; x < mw; x++) { for (y = 0; y < mh; y++) { start = TM.backward(mpic_origin + thvec2(double(x), double(y)), x > 0 ? ss[y] : start); ss[y] = start; ptmp = T1.backward(T2.backward(start)); this->mpic.rgba_set_pixel(x, y, sketch->m_pic.rgba_interpolate_pixel(ptmp.m_x, ptmp.m_y)); if ((counter++ % 20000) == 0) thprintf(" [%.0f%%]", double(counter) / double(mw * mh) * 100.0); } } if (ss != NULL) delete [] ss; } else { thmorph2trans TM; for (ii = stations.begin(); ii != stations.end(); ii++) { TM.insert_point( T2.forward(T1.forward(thvec2(ii->x, ii->y))), T3.backward(thvec2(ii->tx, ii->ty)), ii->st->uid); } TM.insert_lines_from_db(); th2ddataobject * pobj; thpoint * pointp; pobj = sketch->m_scrap->fs2doptr; while (pobj != NULL) { if (pobj->get_class_id() == TT_POINT_CMD) { pointp = (thpoint *) pobj; if (pointp->type == TT_POINT_TYPE_EXTRA) { if ((T3.m_scale > 0.0) && (pointp->from_name.id > 0) && (!thisnan(pointp->xsize))) { TM.insert_zoom_point( T2.forward(T1.forward(thvec2( pointp->point->x - sketch->m_x, pointp->point->y - sketch->m_y))), pointp->xsize / T3.m_scale, thdb.db1d.station_vec[pointp->from_name.id - 1].uid); } } } pobj = pobj->nscrapoptr; } TM.init(); pmin = pmax = TM.forward(T2.forward(T1.forward(thvec2(0.0, 0.0)))); for(x = 0; x < sketch->m_pic.width; x++) { ptmp = TM.forward(T2.forward(T1.forward(thvec2(double(x), 0.0)))); pmin.minimize(ptmp); pmax.maximize(ptmp); ptmp = TM.forward(T2.forward(T1.forward(thvec2(double(x), double(sketch->m_pic.height))))); pmin.minimize(ptmp); pmax.maximize(ptmp); } for(y = 0; y < sketch->m_pic.height; y++) { ptmp = TM.forward(T2.forward(T1.forward(thvec2(0.0, double(y))))); pmin.minimize(ptmp); pmax.maximize(ptmp); ptmp = TM.forward(T2.forward(T1.forward(thvec2(double(sketch->m_pic.width), double(y))))); pmin.minimize(ptmp); pmax.maximize(ptmp); } thvec2 start, * ss(NULL); mpic_origin = thvec2(pmin.m_x, pmin.m_y); mw = long(pmax.m_x + 0.5) - long(pmin.m_x - 0.5); mh = long(pmax.m_y + 0.5) - long(pmin.m_y - 0.5); if (mh > 0) ss = new thvec2 [mh]; thprintf("(%.1f Mpix)", double(mw * mh) / 1000000.0); sketch->m_pic.rgba_load(); start = T2.forward(T1.forward(thvec2(0.0, double(mh/2.0)))); this->mpic.rgba_init(mw, mh); long ox, oy, x1, y1, x2, y2; thvec2 * pscan, * cscan, newp, newpmin, newpmax; thline2 lAB, lBC, lCD, lDA, lCA; double dAB, dBC, dCD, dDA, dCA; pscan = new thvec2 [sketch->m_pic.width]; cscan = new thvec2 [sketch->m_pic.width]; for(oy = 0; oy < sketch->m_pic.height; oy++) { for(ox = 0; ox < sketch->m_pic.width; ox++) { cscan[ox] = TM.forward(T2.forward(T1.forward(thvec2(double(ox), double(oy))))) - mpic_origin; if ((ox > 0) && (oy > 0)) { newpmax = newpmin = pscan[ox-1]; newpmax.maximize(pscan[ox]);newpmin.minimize(pscan[ox]); newpmax.maximize(cscan[ox-1]);newpmin.minimize(cscan[ox-1]); newpmax.maximize(cscan[ox]);newpmin.minimize(cscan[ox]); x1 = long(newpmin.m_x); x2 = long(newpmax.m_x) + 2; y1 = long(newpmin.m_y); y2 = long(newpmax.m_y) + 2; lAB = thline2(pscan[ox-1], cscan[ox-1]); lBC = thline2(cscan[ox-1], cscan[ox]); lCA = thline2(cscan[ox], pscan[ox-1]); lCD = thline2(cscan[ox], pscan[ox]); lDA = thline2(pscan[ox], pscan[ox-1]); // interpolate pixels within quadrilateral for (x = x1; x < x2; x++) { for (y = y1; y < y2; y++) { newp = thvec2(double(x), double(y)); dAB = lAB.eval(newp); dBC = lBC.eval(newp); dCD = lCD.eval(newp); dCA = lCA.eval(newp); dDA = lDA.eval(newp); if (((dAB <= 0.0) && (dBC <= 0.0) && (dCA <= 0.0)) || ((dCA >= 0) && (dCD <= 0.0) && (dDA <= 0.0))) { dCD = fabs(dCD); dDA = fabs(dDA); dAB = fabs(dAB) + dCD; dBC = fabs(dBC) + dDA; if (dAB > 0.0) dCD /= dAB; else dCD = 0.5; if (dBC > 0.0) dDA /= dBC; else dDA = 0.5; this->mpic.rgba_set_pixel(x, y, sketch->m_pic.rgba_interpolate_pixel(double(ox) - dCD, double(oy) - 1.0 + dDA)); } } } if ((counter++ % 20000) == 0) thprintf(" [%.0f%%]", double(counter) / double(sketch->m_pic.width * sketch->m_pic.height) * 100.0); } } for(ox = 0; ox < sketch->m_pic.width; ox++) pscan[ox] = cscan[ox]; } delete [] pscan; delete [] cscan; //for (x = 0; x < mw; x++) { // for (y = 0; y < mh; y++) { // start = TM.backward(mpic_origin + thvec2(double(x), double(y)), x > 0 ? ss[y] : start); // ss[y] = start; // ptmp = T1.backward(T2.backward(start)); // this->mpic.rgba_set_pixel(x, y, sketch->m_pic.rgba_interpolate_pixel(ptmp.m_x, ptmp.m_y)); // if ((counter++ % 20000) == 0) // thprintf(" [%.0f%%]", double(counter) / double(mw * mh) * 100.0); // } //} if (ss != NULL) delete [] ss; } this->mpic.rgba_save("PNG","png",thcfg.sketch_colors); this->mpic.rgba_free(); sketch->m_pic.rgba_free(); this->mpic.scale = T3.m_scale; ptmp = T3.forward(mpic_origin); this->mpic.x = ptmp.m_x; this->mpic.y = ptmp.m_y; thprintf(" done\n"); thtext_inline = false; return &(this->mpic); } void thwarplin::self_delete() { delete this; } void thwarpinvdist::self_delete() { delete this; } void thwarpinvdistln::self_delete() { delete this; } void thwarpfastinvdistln::self_delete() { delete this; } therion/thwarp.h0000644000076400010400000000434111575361636014762 0ustar userAdministrators/** * @file thwarp.h * Export class. */ /* Copyright (C) 2007 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thwarp_h #define thwarp_h #include #include "thpic.h" #include "thsketch.h" class thwarp { protected: thsketch * m_sketch; public: thwarp() : m_sketch(NULL) {} virtual ~thwarp(); /** * Morph given sketch. */ virtual thpic * morph(thsketch * sketch, double scale); /** * Delete warp object. */ virtual void self_delete(); }; /** * Only linear picture transformation. */ class thwarplin : public thwarp { protected: thpic mpic; bool morphed; int method; public: thwarplin() : morphed(false), method(0) {} virtual thpic * morph(thsketch * sketch, double scale); virtual void self_delete(); }; /** * Inverse distance transformation. */ class thwarpinvdist : public thwarplin { public: thwarpinvdist() { this->method = 1; } virtual void self_delete(); }; /** * Inverse distance line transformation. */ class thwarpinvdistln : public thwarplin { public: thwarpinvdistln() { this->method = 2; } virtual void self_delete(); }; /** * Inverse distance line transformation. */ class thwarpfastinvdistln : public thwarplin { public: thwarpfastinvdistln() { this->method = 3; } virtual void self_delete(); }; #endif therion/thwarpp.cxx0000644000076400010400000001454712047265472015522 0ustar userAdministrators/** * @file warpp.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thwarpp.h" #include "thscrap.h" #include "th2ddataobject.h" #include "thpoint.h" #include "thconfig.h" thwarpp::~thwarpp() {} void thwarpp::self_delete() { delete this; } thscrap * thwarpp::get_scrap() { if (this->m_sketch != NULL) return this->m_sketch->m_scrap; return NULL; } void thwarpp::process_station_vector( thwarptrans & tw, double ph ) { thsketchst_list::iterator ii; for (ii = this->stations.begin(); ii != this->stations.end(); ii++) { thdb1ds & st = thdb.db1d.station_vec[ii->station.id - 1]; std::string name( st.name ); tw.insert_point( ii->code, name, thvec2(ii->x, ph - ii->y), thvec2(st.x, - st.y) ); // thprintf("insert %s from %.2f %.2f to %.2f %.2f \n", // st.name, ii->x, ph - ii->y, st.x, - st.y ); } } void thwarpp::process_leg_vector( thwarptrans & tw ) { for ( thsketchlg_list::iterator jj = this->legs.begin(); jj != this->legs.end(); ++jj ) { // thprintf("insert line %s %s\n", jj->from.name, jj->to.name ); std::string f( jj->from.name ); std::string t( jj->to.name ); tw.insert_line( jj->code, f, t ); } } thpic * thwarpp::morph(thsketch * sketch, double scale) { thwarp::morph(sketch, scale); double sf = scale; if (!this->m_sketch->m_pic.exists()) return NULL; const char * fn; size_t fnx, fnl; fn = sketch->m_pic.fname; fnl = strlen(sketch->m_pic.fname); for(fnx = 0; fnx < fnl; fnx++) { if (((sketch->m_pic.fname[fnx] == '/') || (sketch->m_pic.fname[fnx] == '\\')) && (fnx < fnl - 1)) { fn = &(sketch->m_pic.fname[fnx + 1]); } } if (thtext_inline) thprintf("\n"); thprintf("morphing %s ...", fn); thtext_inline = true; this->m_sketch->m_pic.rgba_load(); long pw = this->m_sketch->m_pic.width; long ph = this->m_sketch->m_pic.height; // FIXME could use bounds (defaults 1.5 1.5 2.0) // thwarptrans TW( b2, b3, b4 ); thwarptrans TW; thscrap * scrap = this->get_scrap(); thdb2dcp *ccp; thbuffer n2sb, n2sb2; n2sb.guarantee(128); n2sb2.guarantee(128); std::string s, s2; std::map ssm; //std::map ::iterator ssmi; ccp = scrap->fcpp; while (ccp != NULL) { if ((ccp->point != NULL) && (ccp->st != NULL)) { sprintf(n2sb.get_buffer(),"%ld",ccp->st->uid); s = n2sb.get_buffer(); TW.insert_point( THMORPH_STATION, s, thvec2(ccp->pt->x - sketch->m_x, sketch->m_y + double(sketch->m_pic.height) - ccp->pt->y), thvec2(ccp->tx + sketch->m_scrap->proj->rshift_x,- (ccp->ty + sketch->m_scrap->proj->rshift_y))); ssm[ccp->st->uid] = &(thdb.db1d.station_vec[ccp->st->uid - 1]); } ccp = ccp->nextcp; } thdb1d_leg_vec_type::iterator lg = thdb.db1d.leg_vec.begin(); unsigned long fuid, tuid; while ( lg != thdb.db1d.leg_vec.end() ) { thdataleg * dlg = lg->leg; fuid = thdb.db1d.station_vec[dlg->from.id - 1].uid; tuid = thdb.db1d.station_vec[dlg->to.id - 1].uid; sprintf(n2sb.get_buffer(),"%ld",fuid); sprintf(n2sb2.get_buffer(),"%ld",tuid); s = n2sb.get_buffer(); s2 = n2sb2.get_buffer(); if ((ssm.find(fuid) != ssm.end()) && (ssm.find(tuid) != ssm.end())) { // thprintf("insert leg %s %s\n", dlg->from.name, dlg->to.name ); TW.insert_line( THMORPH_STATION, s, s2); } ++ lg; } th2ddataobject * pobj = scrap->fs2doptr; int n_extra = 0; while (pobj != NULL) { if (pobj->get_class_id() == TT_POINT_CMD) { thpoint * pointp = (thpoint *) pobj; if (pointp->type == TT_POINT_TYPE_EXTRA) { pointp->check_extra(); if ((pointp->from_name.id > 0) && (!thisnan(pointp->xsize))) { unsigned long fuid = thdb.db1d.station_vec[pointp->from_name.id - 1].uid; if ( ssm.find(fuid) == ssm.end() ) { thprintf("warning: extra point from %s but no station\n", pointp->from_name.name ); } else { sprintf(n2sb2.get_buffer(),"%ld",fuid); sprintf(n2sb.get_buffer(),"%ld_E_%d",fuid, ++n_extra); s = n2sb.get_buffer(); s2 = n2sb2.get_buffer(); thdb2dpt * pt = pointp->point; // assert( pt != NULL ); double x = pt->x - sketch->m_x; double y = sketch->m_y + double(sketch->m_pic.height) - pt->y; TW.insert_zoom_point( THMORPH_EXTRA, s, thvec2(x, y), s2, pointp->xsize ); // ssm[ccp->st->uid] = &(thdb.db1d.station_vec[ccp->st->uid - 1]); } } } } pobj = pobj->nscrapoptr; } TW.initialize(); // the factor of 4 is good compromise between quality and speed double myscale = 4.0 * TW.to_unit() / TW.from_unit(); long mw = (long)( pw * myscale * sf / 4.0 ); long mh = (long)( ph * myscale * sf / 4.0 ); this->mpic.rgba_init(mw, mh); thvec2 origin( mw/2.0, mh/2.0 ); double unit = TW.to_unit() * sf; TW.map_image( (const unsigned char*)this->m_sketch->m_pic.rgba, pw, ph, (unsigned char*)this->mpic.rgba, mw, mh, origin, unit, 4 ); this->mpic.rgba_save("PNG","png",thcfg.sketch_colors); this->mpic.rgba_free(); this->m_sketch->m_pic.rgba_free(); #if 0 this->mpic.scale = T3.m_scale; ptmp = T3.forward(mpic_origin); this->mpic.x = ptmp.m_x; this->mpic.y = ptmp.m_y; #else this->mpic.scale = TW.to_unit() / TW.warped_unit(); this->m_origin = TW.to_origin(); this->mpic.x = - origin.m_x * this->mpic.scale; this->mpic.y = - origin.m_y * this->mpic.scale; #endif this->mpic.x += this->m_origin.m_x; this->mpic.y -= this->m_origin.m_y; thprintf(" done\n"); thtext_inline = false; return &(this->mpic); } therion/thwarpp.h0000644000076400010400000000472710644734404015143 0ustar userAdministrators/** * @file thwarp.h * Plaquette morphing. */ /* Copyright (C) 2007 Marco Corvi, Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thwarpp_h #define thwarpp_h #define THERION #include "thwarp.h" #include "thwarppme.h" #include "thwarppt.h" #include "thdataobject.h" /** * Sketch station structure. */ struct thsketchst { thmorph_type code; //!< station code double x, y; //!< station image coords thobjectname station; //!< station survey name thobjectsrc source; }; /** * Sketch leg structure. */ struct thsketchlg { thmorph_type code; //!< leg code thobjectname from; //!< station survey name thobjectname to; //!< station survey name thobjectsrc source; }; typedef std::list thsketchst_list; typedef std::list thsketchlg_list; class thwarpp : public thwarp { private: thpic mpic, upic; ///< Morphed picture. thvec2 m_origin; //!< Survey origin thsketchst_list stations; //!< List of sketch stations. thsketchlg_list legs; //!< List of legs private: /** get the scrap (pointer) for this sketch * @return the scrap pointer (NULL on failure) */ thscrap * get_scrap(); /** process the points and insert them in the warp transform * @param tw the warp transform * @param ph this picture height */ void process_station_vector( thwarptrans & tw, double ph ); /** process the legs and insert them in the warp transform * @param tw the warp transform */ void process_leg_vector( thwarptrans & tw ); public: virtual ~thwarpp(); virtual thpic * morph(thsketch * sketch, double scale); virtual void self_delete(); }; #endif therion/thwarppdef.h0000644000076400010400000000501010644734350015604 0ustar userAdministrators/** @file thwarppdef.h * * @author marco corvi * @date mar 2007 * * @brief warping transformation definitions */ /* Copyright (C) 2007 marco corvi * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thwarppdef_h #define thwarppdef_h #define THERION // #define BOUND_SEGMENT 1.5 #define BOUND_TRIANGLE 1.5 #define BOUND_PLAQUETTE 2.0 #define MORPH_USE_BD #define MORPH_BD 0.5 /** whether or not to use rotation */ #define MORPH_ROTATE 1 /** a multiplicative factor for the angle differences */ #define MORPH_ANGLE_FACTOR 0.5 namespace therion { namespace warp { /** type of the warping control objects * overused for point-pairs and lines */ enum morph_type { THMORPH_STATION, /* station point | centerline shot */ THMORPH_LEFT, /* left point | left shot */ THMORPH_RIGHT, /* right point | right shot */ THMORPH_SEGMENT, /* - | straight end segment */ THMORPH_EXTRA, }; /** warping projection type */ enum warp_proj { THWARP_PLAN, /* plan */ THWARP_EXTENDED, /* extended elevation */ }; /** warping pair types */ enum warp_type { THWARP_NONE = 0, THWARP_POINT = 1, THWARP_SEGMENT = 2, THWARP_TRIANGLE = 3, THWARP_PLAQUETTE = 4 }; } // namespace warp } // namespace therion // ***************************************************************** // backward compatibility // #ifdef THERION typedef therion::warp::morph_type thmorph_type; typedef therion::warp::warp_proj thwarp_proj; using therion::warp::THMORPH_STATION; using therion::warp::THMORPH_EXTRA; #endif #endif // thwarppdef_h therion/thwarppme.cxx0000644000076400010400000011110110636303170016012 0ustar userAdministrators/** @file thwarppme.cxx * * @author marco corvi * @date nov 2006 - mar 2007 * * @brief Warping plaquette algo structures */ /* Copyright (C) 2006-2007 marco corvi * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include #include #include "thinfnan.h" #include "thwarppme.h" int therion::warp::basic_pair::basic_pair_nr = 0; namespace therion { namespace warp { /** compute vertical-ness * @param a X-coordinate factor * @param x X vector * @param u U vector * @return the min vertical-ness between X and U * * vertical-ness is * - positive if Y-coord is positive * - negative if Y-coord is negative * - the closer to 0 the more vertical is the vector */ double compute_vertical( double a, thvec2 & x, thvec2 & u ) { double vx = ( fabs(x.m_x * a) < fabs(x.m_y) )? 0.0 : ( (x.m_y > 0.0)? (1.0 - x.m_y/fabs( x.m_x * a )) : (x.m_y/fabs( x.m_x * a ) -1.0) ); double vu = ( fabs(u.m_x * a) < fabs(u.m_y) )? 0.0 : ( (u.m_y > 0.0)? (1.0 - u.m_y/fabs( u.m_x * a )) : (u.m_y/fabs( u.m_x * a ) - 1.0) ); return ( fabs(vx) < fabs(vu) )? vx : vu; } /** compute the squared distance from a segment * @param x input vector * @param b first endpoint of the segment * @param c second endpoint of the segment */ double compute_segment_distance2( const thvec2 & x, const thvec2 & b, const thvec2 & c ) { double xcb = c.m_x - b.m_x; double ycb = c.m_y - b.m_y; double x0b = x.m_x - b.m_x; double y0b = x.m_y - b.m_y; double xcb2 = xcb*xcb; double ycb2 = ycb*ycb; double cb2 = xcb2 + ycb2; double hx = (xcb2 * x.m_x + ycb2 * b.m_y + xcb * ycb * y0b)/cb2; double hy = (ycb2 * x.m_y + xcb2 * b.m_x + xcb * ycb * x0b)/cb2; bool inside = true; if (fabs(xcb) > fabs(ycb) ) { inside = ( c.m_x > b.m_x ) ? ( hx > b.m_x && hx < c.m_x ) : ( hx > c.m_x && hx < b.m_x ); } else { inside = ( c.m_y > b.m_y ) ? ( hy > b.m_y && hy < c.m_y ) : ( hy > c.m_y && hy < b.m_y ); } if ( inside ) { hx -= x.m_x; hy -= x.m_y; return hx*hx + hy*hy; } // else { hx = x.m_x - c.m_x; hy = x.m_y - c.m_y; double dc = hx*hx + hy*hy; double db = x0b*x0b + y0b*y0b; return ( dc < db )? dc : db; } } // namespace warp } // namespace therion void therion::warp::point_pair::add_line( line * line ) { // thprintf("%s add_line %s-%s\n", // m_name.c_str(), line->m_p1->m_name.c_str(), line->m_p2->m_name.c_str() ); if ( line->m_type == THMORPH_STATION ) m_legs ++; mLines.push_back( line ); } therion::warp::line::line( morph_type t, point_pair * p1, point_pair * p2 ) : m_type( t ) , m_p1( p1 ) , m_p2( p2 ) { // thprintf("New line: P1 %s P2 %s\n", p1->m_name.c_str(), p2->m_name.c_str() ); if ( p1 != NULL ) p1->add_line( this ); if ( p2 != NULL ) p2->add_line( this ); } void therion::warp::point_pair::update( thvec2 & x0, double xunit, thvec2 & u0, double uunit ) { z = ( x - x0 ) / xunit; w = ( u - u0 ) / uunit; } void therion::warp::point_pair::order_lines( inserter * warper, double x_u, warp_proj proj ) { size_t sz = mLines.size(); // thprintf("order_lines(): Point %s has %d/%d lines\n", m_name.c_str(), sz, m_legs ); if ( sz <= 1 ) { return; } bool repeat = true; while ( repeat ) { sz = mLines.size(); therion::warp::line * l1 = mLines[0]; thvec2 v1 = ( this == l1->m_p1 ) ? l1->vz : l1->vz * (-1); for ( size_t i=1; im_p1 ) ? l2->vz : l2->vz * (-1); double ct = v1 * v2; double st = v1 ^ v2; double theta = atan2( st, ct ); if ( theta < 0 ) theta += 2*THPI; if ( theta < theta_min ) { jmin = j; theta_min = theta; } } l1 = mLines[jmin]; if ( jmin > i ) { mLines[jmin] = mLines[i]; mLines[i] = l1; } v1 = ( this == l1->m_p1 ) ? l1->vz : l1->vz * (-1); } repeat = false; // now check that between any two STATION lines there is a non-STATION line // thprintf("Point %s: %6.2f %6.2f has %d lines\n", m_name.c_str(), x.m_x, x.m_y, sz ); for ( size_t i=0; i= 2 ) { therion::warp::line * l1 = mLines[i]; therion::warp::line * l2 = mLines[j]; if ( l1->m_type != THMORPH_STATION ) continue; if ( l2->m_type != THMORPH_STATION ) continue; therion::warp::point_pair * p1 = l1->other_end( this ); therion::warp::point_pair * p2 = l2->other_end( this ); // thprintf("point %s (%s - %s) sizes %d %d \n", // m_name.c_str(), p1->m_name.c_str(), p2->m_name.c_str(), p1->size(), p2->size() ); if ( p1->size() == 1 && p2->size() == 1 ) continue; } else if ( m_legs == 0 ) { continue; } else { // m_legs == 1 // angle between line[i] and line[j] therion::warp::line * l1 = mLines[i]; therion::warp::line * l2 = mLines[j]; therion::warp::point_pair * p1 = l1->other_end( this ); therion::warp::point_pair * p2 = l2->other_end( this ); // thprintf("point %s (%s - %s) legs 1 angle %6.2f\n", // m_name.c_str(), p1->m_name.c_str(), p2->m_name.c_str(), // (p2->u - u) ^ (p1->u -u ) ); if ( ((p2->u - u) ^ (p1->u -u )) < 0 ) continue; } repeat = true; // thprintf("Point %s: insert %d/%d lines (j=%d)\n", m_name.c_str(), i, sz, j ); therion::warp::line * l1 = mLines[i]; therion::warp::line * l2 = mLines[j]; therion::warp::point_pair * p1 = l1->other_end( this ); // ( this == l1->m_p1 ) ? l1->m_p2 : l1->m_p1; therion::warp::point_pair * p2 = l2->other_end( this ); // ( this == l2->m_p1 ) ? l2->m_p2 : l2->m_p1; thvec2 x1 = p1->x - x; thvec2 x2 = p2->x - x; thvec2 u1 = p1->u - u; thvec2 u2 = p2->u - u; // thprintf("must insert between %s %s at %s (m_legs %d) proj %s\n", // p1->m_name.c_str(), p2->m_name.c_str(), m_name.c_str(), m_legs, // (proj == THWARP_PLAN)? "plan" : "elev" ); // try a non-STATION line that reflected is between l1 and l2 size_t k = 0; if ( m_legs <= 2 ) { for ( ; km_type == THMORPH_STATION ) continue; therion::warp::point_pair * p0 = mLines[k]->other_end( this ); thvec2 x0 = x - p0->x; thvec2 u0 = u - p0->u; if ( (x2 ^ x0) < 0 && (x0 ^ x1) < 0 && (u2 ^ u0) < 0 && (u0 ^ u1) ) { // opposite is OK both for PLAN and for EXTENDED proj // thprintf("adding extra as opposite of %s\n", p0->m_name.c_str() ); thvec2 x3 = x + x0; thvec2 u3 = u + u0; warper->add_extra_line( this, i, x3, u3 ); break; } } } else { k = sz; // still need to insert } if ( k == sz ) { thvec2 x3, u3; if ( proj == THWARP_PLAN ) { // this is a wild guess. there is no generic way to guess // where the tranverse point(s) are ... double d1 = u1.length(); double d2 = u2.length(); double du = (u1 - u2).length(); thvec2 vu = u2/d2 - u1/d1; vu.normalize(); // thprintf("adding extra as bisector at %s [lengths %.2f %.2f %.2f]\n", // this->m_name.c_str(), du, d1, d2 ); if ( d1 < du ) du = d1; if ( d2 < du ) du = d2; u3.m_x = u.m_x + vu.m_y * du; u3.m_y = u.m_y - vu.m_x * du; thvec2 vx = x2/x2.length() - x1/x1.length(); vx.normalize(); /* double dx = (x1 - x2).length() / 2.0; double d1 = x1.length()/2.0; double d2 = x2.length()/2.0; if ( d1 < dx ) dx = d1; if ( d2 < dx ) dx = d2; */ double dx = du * x_u; x3.m_x = x.m_x + vx.m_y * dx; x3.m_y = x.m_y - vx.m_x * dx; } else /* if ( proj == THWARP_EXTENDED ) */ { #define TH_VERT_ALPHA 32.0 double v1 = compute_vertical( TH_VERT_ALPHA, x1, u1 ); double v2 = compute_vertical( TH_VERT_ALPHA, x2, u2 ); thvec2 vu = u2/u2.length() - u1/u1.length(); double du = (u1 - u2).length(); double d1 = u1.length(); double d2 = u2.length(); if ( d1 < du ) du = d1; if ( d2 < du ) du = d2; double dx = du * x_u; // thprintf("v1 %f v2 %f \n", v1, v2 ); if ( fabs(v1) < 0.5 || fabs(v2) < 0.5 ) { if ( fabs(v1) < 0.1 && fabs(v2) < 0.1 ) { if ( v1 * v2 < 0.0 ) { // vertical opposite // thprintf("horizontal\n"); u3.m_x = u.m_x + ((v2>0.0)? 1.0 : -1.0) * du; u3.m_y = u.m_y; x3.m_x = x.m_x + ((v2>0.0)? 1.0 : -1.0) * dx; x3.m_y = x.m_y; } else { thprintf("warning: closed up vertical angle\n"); u3.m_x = u.m_x; u3.m_y = (u1.m_y + u2.m_y)/2.0; x3.m_x = x.m_x; x3.m_y = (x1.m_y + x2.m_y)/2.0; } } else { // thprintf("bisector\n"); u3.m_x = u.m_x + vu.m_y * du; u3.m_y = u.m_y - vu.m_x * du; thvec2 vx = x2/x2.length() - x1/x1.length(); x3.m_x = x.m_x + vx.m_y * dx; x3.m_y = x.m_y - vx.m_x * dx; } } else { // thprintf("vertical\n"); u3.m_x = u.m_x; u3.m_y = u.m_y + ((v2>0.0)? 1.0 : -1.0) * du; x3.m_x = x.m_x; x3.m_y = x.m_y + ((v2>0.0)? 1.0 : -1.0) * dx; } } warper->add_extra_line( this, i, x3, u3 ); } } // for ( ...; iother_end( this ); thprintf("%s ", p2->m_name.c_str() ); } thprintf("\n"); */ // check that all the lines from this point that are not centerlines have a "single" // node at the other end // this check could be restricted to // if ( m_type == THMORPH_STATION ) for ( size_t i=0; im_type != THMORPH_STATION ) { point_pair * p2 = l2->other_end( this ); assert( p2->mLines.size() == 1 ); } } } therion::warp::line * therion::warp::point_pair::first_leg() { size_t sz = mLines.size(); for (size_t j=0; jm_type == THMORPH_STATION ) return mLines[j]; } return NULL; } void therion::warp::line::update() { // thprintf("Update line %s %s\n", m_p1->m_name.c_str(), m_p2->m_name.c_str() ); vz = m_p2->z - m_p1->z; vw = m_p2->w - m_p1->w; z.m_a = vz.m_y; z.m_b = - vz.m_x; z.m_c = - ( z.m_a * m_p1->z.m_x + z.m_b * m_p1->z.m_y); zab = sqrt(z.m_a*z.m_a + z.m_b*z.m_b); w.m_a = vw.m_y; w.m_b = - vw.m_x; w.m_c = - ( w.m_a * m_p1->w.m_x + w.m_b * m_p1->w.m_y); wab = sqrt(w.m_a*w.m_a + w.m_b*w.m_b); double dz = vz.length2(); // R.m_xx = R.m_yy = ( vw * vz ) / dz; // R.m_xy = ( vw ^ vz ) / dz; // R.m_yx = - R.m_xy; double dw = vw.length2(); // S.m_xx = S.m_yy = ( vz * vw ) / dw; // S.m_xy = ( vz ^ vw ) / dw; // S.m_yx = - S.m_xy; dz = sqrt( dz ); dw = sqrt( dw ); vz /= dz; vw /= dw; assert( fabs( vz.length() - 1.0 ) < 0.01 ); assert( fabs( vw.length() - 1.0 ) < 0.01 ); z_w = dz / dw; w_z = dw / dz; } // --------------------------------------------------------------- // therion::warp::triangle // // TOCHECK from .h double therion::warp::triangle::sm_map( const thvec2 & p, thvec2 & ret ) const { ret.m_x = p.m_x - m_A.m_x; ret.m_y = p.m_y - m_A.m_y; double d2 = ret.length2(); return d2*d2; } void therion::warp::triangle::inv_sm_map( const thvec2 & p, thvec2 & ret, double d4 ) const { ret.m_x = d4 * ( m_A.m_x + p.m_x ); ret.m_y = d4 * ( m_A.m_y + p.m_y ); } // --------------------------------------------------------------- // therion::warp::plaquette void therion::warp::plaquette::init() { m_AD = m_D - m_A; m_BC = m_C - m_B; m_AB = m_B - m_A; m_BA = m_A - m_B; m_AB_len = m_AB.length(); // length of AB (was m_abd) m_AD_len = m_AD.length(); // length of AD m_BC_len = m_BC.length(); // length of BC m_adn = m_AD; m_adn.normalize(); m_bcn = m_BC; m_bcn.normalize(); m_abn = m_AB; m_abn.normalize(); m_abh.m_x = m_abn.m_y; m_abh.m_y = - m_abn.m_x; m_a = m_A.m_x - m_B.m_x - m_D.m_x + m_C.m_x; m_b = - m_A.m_x + m_B.m_x; m_c = - m_A.m_x + m_D.m_x; m_d = m_A.m_x; m_e = m_A.m_y - m_B.m_y - m_D.m_y + m_C.m_y; m_f = - m_A.m_y + m_B.m_y; m_g = - m_A.m_y + m_D.m_y; m_h = m_A.m_y; m_A0 = m_a * m_f - m_b * m_e; m_B0 = m_a * m_h - m_d * m_e + m_c * m_f - m_b * m_g; m_C0 = m_c * m_h - m_d * m_g; m_D0 = m_a * m_g - m_c * m_e; m_E0 = m_a * m_h - m_d * m_e - m_c * m_f + m_b * m_g; m_F0 = m_b * m_h - m_d * m_f; // angles + "line" // thvec2 adn = m_AD; adn.normalize(); // m_theta_l = acos( m_abn * adn ); m_theta_l = angle( m_abn, m_adn ); // thvec2 bcn = m_BC; bcn.normalize(); // m_theta_r = acos( - m_abn * bcn ); m_theta_r = angle( m_bcn, - m_abn ); // thprintf("Plaquette theta L %.2f R %.2f \n", m_theta_l, m_theta_r ); // C1 is the projection (parallel to AB) of C on AD. // [1] line thru C parallel to AB: // y = C.y + ( x - C.x ) * AB.y / AB.x // [2] intersection with // y = A.y + ( x - A.x ) * AD.y / AD.x // // x ( AB.y AD.x - AB.x AD.y ) = AD.x AB.x ( A.y - C.y ) + AD.x AB.y C.x - AB.x AD.y A.x // i.e. // - adab * x = AB.x ( AD.x A.y - AD.y A.x ) - AD.x ( AB.x C.y - AB.y C.x ) // adab * x = AB.x * ( A ^ AD ) - AD.x * ( C ^ AB ) m_adab = - m_adn.m_x * m_abn.m_y + m_adn.m_y * m_abn.m_x; // abn ^ adn m_bcab = - m_bcn.m_x * m_abn.m_y + m_bcn.m_y * m_abn.m_x; // abn ^ bcn m_adA = - m_adn.m_x * m_A.m_y + m_adn.m_y * m_A.m_x; // A ^ adn m_bcB = - m_bcn.m_x * m_B.m_y + m_bcn.m_y * m_B.m_x; // B ^ bcn double cab = m_C.m_x * m_abn.m_y - m_C.m_y * m_abn.m_x; // C ^ abn m_C1 = ( m_abn * m_adA - m_adn * cab ) / m_adab; // check align A-D-C1 assert( fabs( m_A.m_x * m_D.m_y - m_A.m_y * m_D.m_x + m_D.m_x * m_C1.m_y - m_D.m_y * m_C1.m_x + m_C1.m_x * m_A.m_y - m_C1.m_y * m_A.m_x ) < 0.001 ); m_C1C = m_C - m_C1; // assert m_C1C || m_AB assert( fabs( m_C1C.m_x * m_AB.m_y - m_C1C.m_y * m_AB.m_x ) < 0.001 ); m_sin = m_AB.m_x / m_AB_len; m_cos = m_AB.m_y / m_AB_len; if ( fabs(m_AB.m_x) * 1.73 > fabs(m_AB.m_y) ) { // horizontal up to 60 deg. if ( fabs(m_AB.m_x) * 1.19 > fabs(m_AB.m_y) ) { // really horizontal m_sin = 0.0; m_cos = 1.0; } } else { if ( fabs(m_AB.m_y) * 0.58 > fabs(m_AB.m_x) ) { m_sin = 1.0; m_cos = 0.0; } } m_tan = m_sin/m_cos; m_ctg = m_cos/m_sin; } double therion::warp::plaquette::s_map_straight( const thvec2 & p ) const { double s; double ex_ay = m_e * p.m_x - m_a * p.m_y; double A = m_A0; double B = (ex_ay + m_B0)/2.0; double C = m_g * p.m_x - m_c * p.m_y + m_C0; double det = B*B - A * C; if ( det < 0.0 ) return thnan; if ( det > 0.0 ) det = sqrt( det ); if ( fabs(A) > 1.e-6 ) { s = (- B + det )/A; double s2 = (-B-det)/A; if ( s2 > 0.0 && fabs(s2) < fabs(s) ) s = s2; } else { s = ( B == 0.0 ) ? thinf : - C / (2*B); } return s; } double therion::warp::plaquette::s_map_slant( const thvec2 & p ) const { double x0 = p.m_x; double y0 = p.m_y; double pab = p.m_x * m_abn.m_y - p.m_y * m_abn.m_x; // P1 = [ (ad^A) ab + (P^ab) ad ] / [ad^ab] // P2 = [ (bc^B) ab + (P^ab) bc ] / [ad^bc] double x1 = ( m_abn.m_x * m_adA - m_adn.m_x * pab ) / m_adab; double y1 = ( m_abn.m_y * m_adA - m_adn.m_y * pab ) / m_adab; double x2 = ( m_abn.m_x * m_bcB - m_bcn.m_x * pab ) / m_bcab; double y2 = ( m_abn.m_y * m_bcB - m_bcn.m_y * pab ) / m_bcab; // check alignment // double align = (x1*y2 - x2*y1) + (x2*y0 - x0*y2) + (x0*y1 - x1*y0); // assert( fabs(align) < 0.001 ); double d12 = (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1); double d10 = (x0-x1)*(x0-x1) + (y0-y1)*(y0-y1); return sqrt( d10/d12 ); } double therion::warp::plaquette::t_map( const thvec2 & p ) const { double t; double ex_ay = m_e * p.m_x - m_a * p.m_y; // double A = m_A0; double D = m_D0; // double B = (ex_ay + m_B0)/2.0; double E = (ex_ay + m_E0)/2.0; // double C = m_g * p.m_x - m_c * p.m_y + m_C0; double F = m_f * p.m_x - m_b * p.m_y + m_F0; double det = E*E - D * F; if ( det < 0.0 ) return thnan; if ( det > 0.0 ) det = sqrt( det ); if ( fabs(D) > 1.e-6 ) { t = (- E + det )/D; double t2 = (-E-det)/D; if ( t2 > 0.0 && fabs(t2) < fabs(t) ) t = t2; } else { t = ( E == 0.0 ) ? thinf : - F / (2*E); } return t; } // -------------------------------------------------------------- // Horizontal + Vertical stuff // // X:horizontal - Y:vertical void therion::warp::plaquette::hv_map( const thvec2 & p, thvec2 & ret ) const { ret.m_x = ( p.m_x - m_A.m_x )/m_AB.m_x; // Qy = Ay + (By-Ay)/(Bx-Ax) * (Px - Ax) double yq = m_A.m_y + m_AB.m_y * ret.m_x; ret.m_y = p.m_y - yq; } void therion::warp::plaquette::inv_hv_map( const thvec2 & p, thvec2 & ret ) const { ret.m_x = m_A.m_x + p.m_x * m_AB.m_x; double yq = m_A.m_y + p.m_x * m_AB.m_y; ret.m_y = yq + p.m_y; } // X:vertical - Y:horizontal void therion::warp::plaquette::vh_map( const thvec2 & p, thvec2 & ret ) const { ret.m_x = ( p.m_y - m_A.m_y )/m_AB.m_y; // Qx = Ax + (Bx-Ax)/(By-Ay) * (Py - Ay) double xq = m_A.m_x + m_AB.m_x * ret.m_x; ret.m_y = p.m_x - xq; } void therion::warp::plaquette::inv_vh_map( const thvec2 & p, thvec2 & ret ) const { ret.m_y = m_A.m_y + p.m_x * m_AB.m_y; double xq = m_A.m_x + p.m_x * m_AB.m_x; ret.m_x = xq + p.m_y; } // horizontal-vertical at an angle (m1) // X = Px + m1 ( Y - Py ) // // X = Qx + t * cos // Y = Qy + t * sin // // t = ( Y - Qy ) / sin // X = Qx + cos/sin * ( Y - Qy ) // = Px + cos/sin * ( Y - Py ) // void therion::warp::plaquette::vhm_map( const thvec2 & p, thvec2 & ret ) const { double yq = ( m_AB.m_x * m_A.m_y + (p.m_x - m_A.m_x - m_ctg * p.m_y ) * m_AB.m_y ) / ( m_AB.m_x - m_ctg * m_AB.m_y ); ret.m_x = ( yq - m_A.m_y )/m_AB.m_y; double xq = m_A.m_x + ret.m_x * m_AB.m_x; double dx = p.m_x - xq; double dy = p.m_y - yq; ret.m_y = sqrt( dx*dx + dy*dy ); } void therion::warp::plaquette::inv_vhm_map( const thvec2 & p, thvec2 & ret ) const { double xq = m_A.m_x + p.m_x * m_AB.m_x; double yq = m_A.m_y + p.m_x * m_AB.m_y; ret.m_x = xq + m_cos * p.m_y; ret.m_y = yq + m_sin * p.m_y; } // Y = Py + m ( X - Px ) void therion::warp::plaquette::hvm_map( const thvec2 & p, thvec2 & ret ) const { double xq = ( m_AB.m_y * m_A.m_x + (p.m_y - m_A.m_y - m_tan * p.m_x ) * m_AB.m_x ) / ( m_AB.m_y - m_tan * m_AB.m_x ); ret.m_x = ( xq - m_A.m_x )/m_AB.m_x; double yq = m_A.m_y + ret.m_x * m_AB.m_y; double dx = p.m_x - xq; double dy = p.m_y - yq; ret.m_y = sqrt( dx*dx + dy*dy ); } void therion::warp::plaquette::inv_hvm_map( const thvec2 & p, thvec2 & ret ) const { double xq = m_A.m_x + p.m_x * m_AB.m_x; double yq = m_A.m_y + p.m_x * m_AB.m_y; ret.m_x = xq + m_cos * p.m_y; ret.m_y = yq + m_sin * p.m_y; } // -------------------------------------------------------------- /** solve the system * | A+t(D-A) B+t(C-B) P | = 0 */ void therion::warp::plaquette::st_map( const thvec2 & p, thvec2 & ret ) const { double s; double ex_ay = m_e * p.m_x - m_a * p.m_y; double A = m_A0; double B = (ex_ay + m_B0)/2.0; double C = m_g * p.m_x - m_c * p.m_y + m_C0; if ( fabs(A) > 1.e-6 ) { double det = B*B - A * C; if ( det < 0.0 ) { ret.m_x = ret.m_y = thnan; return; } if ( det > 0.0 ) det = sqrt( det ); s = (- B + det )/A; double s2 = (-B-det)/A; if ( s2 > 0.0 && fabs(s2) < fabs(s) ) s = s2; } else { s = ( B == 0.0 ) ? thinf : - C / (2*B); } ret.m_x = s; ret.m_y = ( p.m_x - m_b * s - m_d ) / ( m_a * s + m_c ); } void therion::warp::plaquette::inv_st_map( const thvec2 & v, thvec2 & ret ) const { ret.m_x = m_a * v.m_x * v.m_y + m_b * v.m_x + m_c * v.m_y + m_d; ret.m_y = m_e * v.m_x * v.m_y + m_f * v.m_x + m_g * v.m_y + m_h; } // this are Beier-Neely type maps // "Feature-based image metamorphosis" Computer Graphics, 26 35-42, 1992 // // TODO // Taking into account different end-size ratios can be done here // or by the caller. The plaquette does not have the ratios, // and the relative weight could be different from the return // X coordinate (ret.m_x) // straight BN map void therion::warp::plaquette::bn_map_straight( const thvec2 & p, thvec2 & ret ) const { thvec2 ap( p.m_x - m_A.m_x, p.m_y - m_A.m_y ); ret.m_x = ( ap * m_abn ) / m_AB_len; ret.m_y = ap * m_abh; } void therion::warp::plaquette::inv_bn_map_straight( const thvec2 & p, thvec2 & ret ) const { // ret = m_A + m_AB * p.m_x + m_abh * p.m_y; ret.m_x = m_A.m_x + m_AB.m_x * p.m_x + m_abh.m_x * p.m_y; ret.m_y = m_A.m_y + m_AB.m_y * p.m_x + m_abh.m_y * p.m_y; } // slanted BN map void therion::warp::plaquette::bn_map_slant( const thvec2 & p, thvec2 & ret ) const { double x0 = p.m_x; double y0 = p.m_y; double pab = p.m_x * m_abn.m_y - p.m_y * m_abn.m_x; // P ^ ab // P1 = [ (A^ad) ab - (P^ab) ad ] / [ab^ad] projection of P parallel to AB on AD // P2 = [ (B^bc) ab - (P^ab) bc ] / [ab^bc] projection of P parallel to AB on BC double x1 = ( m_abn.m_x * m_adA - m_adn.m_x * pab ) / m_adab; double y1 = ( m_abn.m_y * m_adA - m_adn.m_y * pab ) / m_adab; double x2 = ( m_abn.m_x * m_bcB - m_bcn.m_x * pab ) / m_bcab; double y2 = ( m_abn.m_y * m_bcB - m_bcn.m_y * pab ) / m_bcab; // check alignment // double align = (x1*y2 - x2*y1) + (x2*y0 - x0*y2) + (x0*y1 - x1*y0); // assert( fabs(align) < 0.001 ); double d12 = (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1); double d10 = (x0-x1)*(x0-x1) + (y0-y1)*(y0-y1); ret.m_x = sqrt( d10/d12 ); // slant distance // x1 = m_A.m_x + ret.m_x * m_AB.m_x; // y1 = m_A.m_y + ret.m_x * m_AB.m_y; // ret.m_y = sqrt( (x0-x1)*(x0-x1) + (y0-y1)*(y0-y1) ); // // straight distance ret.m_y = (p - m_A) * m_abh; } void therion::warp::plaquette::inv_bn_map_slant( const thvec2 & p, thvec2 & ret ) const { // slanted BN map /* thvec2 ps = m_A + p.m_x * m_AB; thvec2 p1 = m_C1 + p.m_x * m_C1C; double x = p1.m_x - ps.m_x; double y = p1.m_y - ps.m_y; ret = ps + (p1-ps)*(p.m_y /sqrt(x*x+y*y) ); */ double d1 = fabs(p.m_y/m_adab); double d2 = fabs(p.m_y/m_bcab); double x1 = 1.0 - p.m_x; ret.m_x = x1 * ( m_A.m_x + d1 * m_adn.m_x ) + p.m_x * ( m_B.m_x + d2 * m_bcn.m_x ); ret.m_y = x1 * ( m_A.m_y + d1 * m_adn.m_y ) + p.m_x * ( m_B.m_y + d2 * m_bcn.m_y ); } // TODO fix this double therion::warp::plaquette::sm_map( const thvec2 & p, thvec2 & ret ) const { thvec2 ap( p.m_x - m_A.m_x, p.m_y - m_A.m_y ); ret.m_x = (ap * m_abn) / m_AB_len; ret.m_y = ap * m_abh; double d2; if ( ret.m_x < 0.0 ) { // left point d2 = ap.length2(); } else if ( ret.m_x > 1.0 ) { // right point thvec2 bp( p.m_x - m_B.m_x, p.m_y - m_B.m_y ); d2 = bp.length2(); } else { // middle point d2 = ret.m_y * ret.m_y; } return d2*d2; } void therion::warp::plaquette::inv_sm_map( const thvec2 & p, thvec2 & ret, double d4 ) const { ret.m_x = d4 * ( m_A.m_x + p.m_x * m_AB.m_x + p.m_y * m_abh.m_x ); ret.m_y = d4 * ( m_A.m_y + p.m_x * m_AB.m_y + p.m_y * m_abh.m_y ); } // **************************************************************** // TRIANGLE PAIRS // namespace therion { namespace warp { /** cstr * @param a A-corner point pair ("vertex" of the triangle) * @param b B-corner point pair (right side) * @param c C-corner point pair (left side) * @param bound bound on "a" for is_inside test * @param cubic whether to use the cubic radial correction * @param border inner border */ template< > item_pair::item_pair( point_pair * a, point_pair * b, point_pair * c , double bound /* = BOUND_TRIANGLE */ ) : basic_pair( bound ) , from( a->z, b->z, c->z ) , to ( a->w, b->w, c->w ) { m_pair[0] = c; m_pair[1] = a; m_pair[2] = b; m_kl = ( from.theta_left() - to.theta_left() ) * MORPH_ANGLE_FACTOR; m_kr = ( from.theta_right() - to.theta_right() ) * MORPH_ANGLE_FACTOR; // m_kl = fabs(from.theta_left()-M_PI_2) - fabs(to.theta_left()-M_PI_2); // m_kr = fabs(from.theta_right()-M_PI_2) - fabs(to.theta_right()-M_PI_2); m_dl = from.m_ac / to.m_ac; m_dr = from.m_ab / to.m_ab; // thprintf("Triangle [%d] Theta L %.2f R %.2f Ratios L %.2f R %.2f \n", // nr(), m_kl, m_kr, m_dl, m_dr ); } /** type of this warping basic_pair * @return the number of points of the basic_pair */ template< > warp_type item_pair::type() const { return THWARP_TRIANGLE; } /** maximum number of neighbors * @return the maximum number of neighbors */ template< > int item_pair::ngbh_nr() const { return 2; } template< > void item_pair::set_projection( warp_proj proj ) { // thprintf("item_pair::set_projection(%d)\n", proj ); // TODO } template< > void item_pair::backward_normal_bd( const thvec2 & p, thvec2 & ret ) const { static thvec2 v0, r1, pa; to.bn_map( p, v0 ); v0.m_y *= v0.m_x * m_dr + (1.0-v0.m_x) * m_dl; from.inv_bn_map( v0, ret ); if ( v0.m_x < MORPH_BD ) { double x = v0.m_x/MORPH_BD; // x = 0 .. 1 // double x1 = 1.0 - 2*x + x*x; double x1 = 1 - x; /* #if MORPH_ROTATE != 0 double t = left_ngbh()->m_kr * x1; left_ngbh()->pto()->right_rotate( p, pa, cos(t), -sin(t) ); left_ngbh()->pto()->bn_map( pa, v0 ); #else left_ngbh()->pto()->bn_map( p, v0 ); #endif */ left_ngbh()->right_rotate_to( p, v0, x1 ); // double s = left_ngbh()->pto()->s_map( pa ); // v0.m_y *= s * left_ngbh()->m_dr + (1.0-s) * left_ngbh()->m_dl; v0.m_y *= v0.m_x * left_ngbh()->m_dr + (1.0-v0.m_x) * left_ngbh()->m_dl; left_ngbh()->pfrom()->inv_bn_map( v0, r1 ); // ret = ( ret + r1 * x1 ) / ( 1.0 + x1 ); ret.m_x = ( ret.m_x + x1 * r1.m_x ) / ( 1 + x1 ); ret.m_y = ( ret.m_y + x1 * r1.m_y ) / ( 1 + x1 ); } else if ( 1.0 - v0.m_x < MORPH_BD ) { double x = (1.0-v0.m_x)/MORPH_BD; // double x1 = 1.0 - 2*x + x*x; double x1 = 1 - x; /* #if MORPH_ROTATE != 0 double t = right_ngbh()->m_kl * x1; right_ngbh()->pto()->left_rotate( p, pa, cos(t), -sin(t) ); right_ngbh()->pto()->bn_map( pa, v0 ); #else right_ngbh()->pto()->bn_map( p, v0 ); #endif */ right_ngbh()->left_rotate_to( p, v0, x1 ); // s = right_ngbh()->pto()->s_map( pa ); // v0.m_y *= s * right_ngbh()->m_dr + (1.0-s) * right_ngbh()->m_dl; v0.m_y *= v0.m_x * right_ngbh()->m_dr + (1.0-v0.m_x) * right_ngbh()->m_dl; right_ngbh()->pfrom()->inv_bn_map( v0, r1 ); // ret = ( ret + r1 * x1 ) / ( 1.0 + x1 ); ret.m_x = ( ret.m_x + x1 * r1.m_x ) / ( 1 + x1 ); ret.m_y = ( ret.m_y + x1 * r1.m_y ) / ( 1 + x1 ); } else { /* nothing */ } } /* * as in therion template< > void item_pair::forward( const thvec2 & p, thvec2 & ret ) const { static thvec2 v0; from.bn_map( p, v0 ); v0.m_y /= v0.m_x * m_dr + (1.0-v0.m_x) * m_dl; to.inv_bn_map( v0, ret ); } */ #ifdef DEBUG /** debug: print */ template< > void item_pair::print() const { thprintf("[%d] Triangle A %6.2f %6.2f <-> %6.2f %6.2f\n", nr(), from.m_A.m_x, from.m_A.m_y, to.m_A.m_x, to.m_A.m_y ); thprintf(" B %6.2f %6.2f <-> %6.2f %6.2f\n", from.m_B.m_x, from.m_B.m_y, to.m_B.m_x, to.m_B.m_y ); thprintf(" C %6.2f %6.2f <-> %6.2f %6.2f\n", from.m_C.m_x, from.m_C.m_y, to.m_C.m_x, to.m_C.m_y ); print_ngbhs(); } #endif // **************************************************************** // PLAQUETTE PAIRS // // TODO FIXME template< > void item_pair::set_projection( warp_proj proj ) { // thprintf("item_pair::set_projection(%d)\n", proj ); #ifdef MORPH_EXPERIMENTAL if ( proj == THWARP_EXTENDED ) { // TODO if ( fabs(from.m_sin) > fabs(from.m_cos) ) { // horizontal if ( fabs(from.m_cos) > 0.0 ) { from.bn_map_impl = &therion::warp::plaquette::hvm_map; from.inv_bn_map_impl = &therion::warp::plaquette::inv_hvm_map; to.bn_map_impl = &therion::warp::plaquette::hvm_map; to.inv_bn_map_impl = &therion::warp::plaquette::inv_hvm_map; } else { from.bn_map_impl = &therion::warp::plaquette::hv_map; from.inv_bn_map_impl = &therion::warp::plaquette::inv_hv_map; to.bn_map_impl = &therion::warp::plaquette::hv_map; to.inv_bn_map_impl = &therion::warp::plaquette::inv_hv_map; } } else { if ( fabs(from.m_sin) > 0.0 ) { from.bn_map_impl = &therion::warp::plaquette::vhm_map; from.inv_bn_map_impl = &therion::warp::plaquette::inv_vhm_map; to.bn_map_impl = &therion::warp::plaquette::vhm_map; to.inv_bn_map_impl = &therion::warp::plaquette::inv_vhm_map; } else { from.bn_map_impl = &therion::warp::plaquette::vh_map; from.inv_bn_map_impl = &therion::warp::plaquette::inv_vh_map; to.bn_map_impl = &therion::warp::plaquette::vh_map; to.inv_bn_map_impl = &therion::warp::plaquette::inv_vh_map; } } } else #endif { if ( m_kl + m_kr < 0 ) { from.s_map_impl = &therion::warp::plaquette::s_map_slant; from.bn_map_impl = &therion::warp::plaquette::bn_map_slant; from.inv_bn_map_impl = &therion::warp::plaquette::inv_bn_map_slant; } else if ( false ) { to.s_map_impl = &therion::warp::plaquette::s_map_slant; to.bn_map_impl = &therion::warp::plaquette::bn_map_slant; to.inv_bn_map_impl = &therion::warp::plaquette::inv_bn_map_slant; } } } /** cstr * @param a A-corner point pair * @param b B-corner point pair * @param c C-corner point pair * @param d D-corner point pair * @param bound bound of "t" for the is_inside test * @param cubic whether to use the cubic correction * @param border inner border */ template< > item_pair::item_pair( point_pair * a, point_pair * b, point_pair * c, point_pair * d , double bound /* = BOUND_PLAQUETTE */ ) : basic_pair( bound ) , from( a->z, b->z, c->z, d->z ) , to ( a->w, b->w, c->w, d->w ) { m_pair[0] = d; m_pair[1] = a; m_pair[2] = b; m_pair[3] = c; m_kl = ( from.theta_left() - to.theta_left() ) * MORPH_ANGLE_FACTOR; m_kr = ( from.theta_right() - to.theta_right() ) * MORPH_ANGLE_FACTOR; // m_kl = fabs(from.theta_left()-M_PI_2) - fabs(to.theta_left()-M_PI_2); // m_kr = fabs(from.theta_right()-M_PI_2) - fabs(to.theta_right()-M_PI_2); m_dl = from.m_AD_len / to.m_AD_len; m_dr = from.m_BC_len / to.m_BC_len; // thprintf("Plaquette [%d] Theta L %.2f R %.2f Ratios L %.2f R %.2f \n", // nr(), m_kl, m_kr, m_dl, m_dr ); // } /** warp type * @return the warp type of the warping basic_pair */ template< > warp_type item_pair::type() const { return THWARP_PLAQUETTE; } /** maximum number of neighbors * @return the maximum number of neighbors */ template< > int item_pair::ngbh_nr() const { return 3; } template< > void item_pair::backward_normal_bd( const thvec2 & p, thvec2 & ret ) const { static thvec2 v0, r1, pa; double s = to.s_map( p ); // assert( s >= 0 && s <= 1.0 ); if ( s < MORPH_BD ) { double x = s/MORPH_BD; // x = 0 .. 1 double x1 = 1.0 - 2*x + x*x; // x1 = 1 .. 0 this->left_rotate_to( p, v0, x1 ); // v0.m_y *= s * m_dr + (1.0-s) * m_dl; v0.m_y *= v0.m_x * m_dr + (1.0-v0.m_x) * m_dl; from.inv_bn_map( v0, ret ); left_ngbh()->right_rotate_to( p, v0, x1 ); s = v0.m_x; v0.m_y *= s * left_ngbh()->m_dr + (1.0-s) * left_ngbh()->m_dl; left_ngbh()->pfrom()->inv_bn_map( v0, r1 ); // ret = ( ret + r1 * x1 ) / ( 1.0 + x1 ); ret.m_x = ( (2-x1)* ret.m_x + x1 * r1.m_x ) / 2; // ( 1 + x1 ); ret.m_y = ( (2-x1)* ret.m_y + x1 * r1.m_y ) / 2; // ( 1 + x1 ); } else if ( 1.0 - s < MORPH_BD ) { double x = (1.0-s)/MORPH_BD; // double x1 = 1.0 - x; double x1 = 1.0 - 2*x + x*x; this->right_rotate_to( p, v0, x1 ); // v0.m_y *= s * m_dr + (1.0-s) * m_dl; v0.m_y *= v0.m_x * m_dr + (1.0-v0.m_x) * m_dl; from.inv_bn_map( v0, ret ); right_ngbh()->left_rotate_to( p, v0, x1 ); s = v0.m_x; v0.m_y *= s * right_ngbh()->m_dr + (1.0-s) * right_ngbh()->m_dl; right_ngbh()->pfrom()->inv_bn_map( v0, r1 ); // ret = ( ret + r1 * x1 ) / ( 1.0 + x1 ); ret.m_x = ( (2-x1)* ret.m_x + x1 * r1.m_x ) / 2; // ( 1 + x1 ); ret.m_y = ( (2-x1)* ret.m_y + x1 * r1.m_y ) / 2; // ( 1 + x1 ); } else { to.bn_map( p, v0 ); // v0.m_y *= s * m_dr + (1.0-s) * m_dl; v0.m_y *= v0.m_x * m_dr + (1.0-v0.m_x) * m_dl; from.inv_bn_map( v0, ret ); // to.st_map( p, v0 ); // from.inv_st_map( v0, ret ); } } /** map p in the "from" image to a point in the "to" img * @param p 2D point in the "from" image * @param ret corresponding 2D point in the "to" image * * The backward() map is not invertibel in close form, therefore * the forward() map is carried out by guessing s first point and * searching around it for a point that satisfies the backward() map. * This way forward() takes 30-40 times longer than backward(). * * The forward() code must come after backward() has been instantiated. */ template< typename T > void item_pair::forward( const thvec2 & p, thvec2 & ret ) const { static thvec2 v0, r1; thvec2 p1; double d, d0, x, y; double dx = 0.1, dy=0.1; from.bn_map( p, v0 ); // v0.m_y *= s * m_dr + (1.0-s) * m_dl; v0.m_y *= v0.m_x * m_dr + (1.0-v0.m_x) * m_dl; to.inv_bn_map( v0, r1 ); this->backward( r1, p1 ); x = p.m_x - p1.m_x; y = p.m_y - p1.m_y; d0 = x*x + y*y; do { r1.m_x += dx; this->backward( r1, p1 ); x = p.m_x - p1.m_x; y = p.m_y - p1.m_y; d = x*x + y*y; if ( d < d0 ) { d0 = d; } else { r1.m_x -= dx; dx = -dx/2; } r1.m_y += dy; this->backward( r1, p1 ); x = p.m_x - p1.m_x; y = p.m_y - p1.m_y; d = x*x + y*y; if ( d < d0 ) { d0 = d; } else { r1.m_y -= dy; dy = -dy/2; } } while ( d0 > 1.e-6 && fabs(dx) > 1.e-3 && fabs(dy) > 1.e-3); ret = r1; } #ifdef DEBUG /** debug: print */ template< > void plaquette_pair::print() const { thprintf("[%d] Plaquette A %6.2f %6.2f <-> %6.2f %6.2f\n", nr(), from.m_A.m_x, from.m_A.m_y, to.m_A.m_x, to.m_A.m_y ); thprintf(" B %6.2f %6.2f <-> %6.2f %6.2f\n", from.m_B.m_x, from.m_B.m_y, to.m_B.m_x, to.m_B.m_y ); thprintf(" C %6.2f %6.2f <-> %6.2f %6.2f\n", from.m_C.m_x, from.m_C.m_y, to.m_C.m_x, to.m_C.m_y ); thprintf(" D %6.2f %6.2f <-> %6.2f %6.2f\n", from.m_D.m_x, from.m_D.m_y, to.m_D.m_x, to.m_D.m_y ); print_ngbhs(); } #endif } // namespace warp } // namespace therion therion/thwarppme.h0000644000076400010400000013020210644734356015457 0ustar userAdministrators/** * @file thwarppme.h * * @author marco corvi * @date mar 2007 * * Transformation structures for warping plaquette algorithm */ /* Copyright (C) 2007 marco corvi * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thwarppme_h #define thwarppme_h #define THERION #include "thwarppdef.h" #ifdef THERION #include "therion.h" // thprintf #else #define thprintf printf #endif #include "thtrans.h" #define THWARP_NGBH_DIM 3 #define THWARP_PAIR_DIM 4 // apparently it takes the same time ... // #define MORPH_USE_IS_INSIDE namespace therion { namespace warp { struct line; // forward declaration struct point_pair; // forward declaration #ifdef MORPH_USE_IS_INSIDE /** check if a vector is inside other two * @param sbp sign of the angle between the first vector and the given vector * @param scp sign of the angle between the second vector and the given vector * @param less_then_pi whether the angle between the two vectors is less than PI * @return true if the given vector is inside the angle of the two vectors *
  dots (false) and commas (true) for the position of C 

      ,,,,,P                      P ..... <-- less_then_pi
      ,,,,,|                      | .....
 [1]  -----+------ B    [2]  -----+------- B
      ,,,,,|                      | ,,,,, 
      ,,,,,|                      | ,,,,, <-- not lss_than_pi
 
      .....|                      | ..... <-- less_than_pi
      .....|                      | .....
 [3]  -----+------ B    [4]  -----+------- B
      .....|                      | ,,,,, 
      .....P                      P ,,,,, <-- not less_than_pi

*/ inline bool is_inside( double sbp, double scp, bool less_then_pi = true ) { if ( sbp > 0.0 ) { if ( scp <= 0.0 ) return true; // [1] return ! less_then_pi; // [2] } else { if ( scp > 0.0 ) return false; // [3] return ! less_then_pi; // [4] } return true; } #endif // MORPH_USE_IS_INSIDE /** compute the angle between two vectors * @param v1 first vector * @param v2 second vector * @return vector between v2 and v1 [radians] */ inline double angle( const thvec2 & v1, const thvec2 & v2 ) { double c = v1 * v2; double s = v2 ^ v1; return atan2( s, c ); } /** compute ... * @param a ... * @param x ... * @param u ... */ double compute_vertical( double a, thvec2 & x, thvec2 & u ); /** compute the squared distance from a segment * @param x input vector * @param b first endpoint of the segment * @param c second endpoint of the segment */ double compute_segment_distance2( const thvec2 & x, const thvec2 & b, const thvec2 & c ); /** extra point and line inserter */ class inserter { public: /** dstr */ virtual ~inserter() {} /** add and extra line * @param p1 first line endpoint * @param index ... * @param x3 "from" image coords of the second endpoint * @param u3 "to" image coords of the second endpoint * @return pointer to the new line */ virtual line * add_extra_line( point_pair * p1, size_t index, thvec2 & x3, thvec2 & u3 ) = 0; }; /** * a pair of points in the sketch and in the survey * into correspondence */ struct point_pair { morph_type m_type; //!< point pair type bool m_used; //!< whether this pair has been used in making the plaquettes std::string m_name; //!< station (or whatever) name thvec2 x; //!< sketch coords thvec2 u; //!< survey coords thvec2 z; //!< sketch reduced coords thvec2 w; //!< survey reduced coords private: std::vector< line * > mLines; //!< lines joining this point size_t m_legs; //!< number of legs public: /** cstr * @param t type of the point_pair * @param n name of the point_pair (naming must follow a strict convention) * @param x1 X coord in the sketch image * @param y1 Y coord in the sketch image * @param u1 X coord in the survey * @param v1 Y coord in the survey */ point_pair( morph_type t, std::string & n, double x1, double y1 , double u1, double v1 ) : m_type( t ) , m_name( n ) , x( x1, y1 ) , u( u1, v1 ) , m_legs( 0 ) { } /** cstr * @param t type of the point_pair * @param n name of the point_pair (naming must follow a strict convention) * @param x1 X coord in the sketch image * @param y1 Y coord in the sketch image * @param u1 X coord in the survey * @param v1 Y coord in the survey */ point_pair( morph_type t, const char * n, double x1, double y1 , double u1, double v1 ) : m_type( t ) , m_name( n ) , x( x1, y1 ) , u( u1, v1 ) , m_legs( 0 ) { } /** add a line (pointer) to the array of lines * @param line line (pointer) */ void add_line( line * line ); /** reorder (counter)clockwise the lines around the point * @param warper new point_pair/line inserter * @param x_u ratio X_unit / U_unit * @param proj projection type */ void order_lines( inserter * warper, double x_u, warp_proj proj ); /** update: compute scaled coordinates * @param ... */ void update( thvec2 & x0, double xunit, thvec2 & u0, double uunit ); /** get the index of the node (the number of lines) * @return the number of lines at this node */ size_t size() const { return mLines.size(); } /** get the number of centerline legs at the point * @return the number of centerline legs at this node */ size_t legs() const { return m_legs; } /** get the "first" leg line * return the first leg line (NULL if none) */ line * first_leg(); /** get the next line around the point * @param line given line (NULL to get the first line) * @return the line next to the given one (NULL if at the end of the lines) */ line * next_line( line * line ) { size_t sz = mLines.size(); if ( line == NULL ) { return ( sz > 0 ) ? mLines[0] : NULL; } for (size_t j=0; jP2) thvec2 vw; //!< unit vector in W double z_w; // dz / dw double w_z; // dw / dz // thmat2 R; //!< rotation matrix R(from->to) // thmat2 S; //!< rotation matrix R(to->from) /** cstr * @param t morph type of the line * @param p1 first point pair * @param p2 second point pair * * @note as a side effect this line (pointer) is added to the two points */ line( morph_type t, point_pair * p1, point_pair * p2 ); /** update reduced parameters of the line */ void update(); /** get the other end of the line * @param end one end of the line * @return the other end (NULL if end is not an end of this line) */ point_pair * other_end( point_pair * end ) { if ( end == m_p1 ) return m_p2; if ( end == m_p2 ) return m_p1; return NULL; } }; // -------------------------------------------------------------- /** base class for single-image warping items */ struct item { protected: double m_theta_l; //!< left angle double m_theta_r; //!< right angle public: /** default cstr is fine */ /** dstr must be virtual */ virtual ~item() { } /** get the value of the left angle * @return the left angle [radians] */ double theta_left() const { return m_theta_l; } /** get the value of the right angle * @return the right angle [radians] */ double theta_right() const { return m_theta_r; } /** check if a point is inside * @param p 2D point * @param bound boundary size * @return true if the point is inside */ virtual bool is_inside( const thvec2 & p, double bound ) const = 0; /** compute the distance of a point from the item * @param p 2D point * @return the distance */ virtual double distance( const thvec2 & p ) const = 0; /** B-N distance from the item * @param p 2D point * @return the B-N distance * virtual double bn_distance( const thvec2 & p ) const = 0; */ /** */ virtual double distance2( const thvec2 & p ) const = 0; /** bounding box for the item * @param t1 minimum values (output) * @param t2 maximum values (output) * @param bound item boundary size */ virtual void bounding_box( thvec2 & t1, thvec2 & t2, double bound ) const = 0; virtual double s_map( const thvec2 & p ) const = 0; /** S-T map * @param p input point * @return transformed coordinates */ virtual void st_map( const thvec2 & p, thvec2 & ret ) const = 0; /** inverse S-T map * @param coordinates in trasformed domain * @return 2D point */ virtual void inv_st_map( const thvec2 & p, thvec2 & ret ) const = 0; virtual double sm_map( const thvec2 & p, thvec2 & ret ) const = 0; virtual void inv_sm_map( const thvec2 & p, thvec2 & ret, double d4 ) const = 0; /** B-N map * @param p input point * @return transformed coordinates */ virtual void bn_map( const thvec2 & p, thvec2 & ret ) const = 0; /** inverse B-N map * @param coordinates in trasformed domain * @return 2D point */ virtual void inv_bn_map( const thvec2 & p, thvec2 & ret ) const = 0; /** rotate a point around the left corner * @param p input point * @param ret rotated point * @param c cosine of the rotation angle * @param s sine of the rotation angle */ virtual void left_rotate( const thvec2 & p, thvec2 & ret, double c, double s ) const = 0; /** rotate a point around the right corner * @param p input point * @param ret rotated point * @param c cosine of the rotation angle * @param s sine of the rotation angle */ virtual void right_rotate( const thvec2 & p, thvec2 & ret, double c, double s ) const = 0; }; // class item // -------------------------------------------------------------- // warping feature elements /** * abstract class of a warping feature basic_pair. * All warping basic_pair have one "missing" side and are * "extends" across that side by an amount specified be the * basic_pair's "bound" */ class basic_pair { private: int m_nr; //!< the basic_pair nr static int basic_pair_nr; //!< global counter for the basic_pairs protected: double m_bound; //!< this basic_pair bound public: basic_pair * m_ngbh[THWARP_NGBH_DIM]; //!< this basic_pair neighbors point_pair * m_pair[THWARP_PAIR_DIM]; //!< pointer to the point_pairs double m_ndist[THWARP_NGBH_DIM]; //!< neighbors distances double m_kl; //!< left angle differences (from - to) double m_kr; //!< right angle differences (from - to) double m_dl; //!< left end-size ratio (from/to) double m_dr; //!< right end-size ration (from/to) public: /** cstr * @param bound boundary size */ basic_pair( double bound ) : m_nr( ++basic_pair_nr ) , m_bound( bound ) , m_kl( 0.0 ) , m_kr( 0.0 ) , m_dl( 1.0 ) , m_dr( 1.0 ) { for (int k=0; knr() ); } thprintf("\n"); } #endif }; // class basic_pair // ---------------------------------------------------------------- /** a pair of items, one in the "from" image, one in the "to" image */ template< typename T > struct item_pair : public basic_pair { T from; //!< item in the "from" image T to; //!< item in the "to" image // double m_kl, m_kr; // of basic_pair /** cstr from three point pairs * @param a first point pair * @param b second point pair * @param c third point pair * @param bound boundary size (default TRIANGLE boundary size) */ item_pair( point_pair * a, point_pair * b, point_pair * c, double bound = BOUND_TRIANGLE ); /** cstr from four point pairs * @param a first point pair * @param b second point pair * @param c third point pair * @param d fourth point pair * @param bound boundary size (default PLAQUETTE boundary size) */ item_pair( point_pair * a, point_pair * b, point_pair * c, point_pair * d, double bound = BOUND_PLAQUETTE ); /** override basic_pair::pfrom() * @return pointer to the "from" item */ const item * pfrom() const { return dynamic_cast(&from); } item * pfrom() { return dynamic_cast(&from); } /** override basic_pair::pto() * @return pointer to the "to" item */ const item * pto() const { return dynamic_cast(&to); } item * pto() { return dynamic_cast(&to); } /** override basic_pair::type() * @return the warp type of this basic_pair */ warp_type type() const; /** override basic_pair::ngbh_nr() * @return the number of neighbors of this basic_pair */ int ngbh_nr() const; #ifdef DEBUG /** override basic_pair::print() */ void print() const; #endif /** set the projection info * @param proj projection type */ void set_projection( warp_proj proj ); /** compute the forward map of a point * @param p 2D point in the "from" image * @return point coords in the "to" image * * @note in VERSION 0.5.1: * for triangle: * from.bn_map() * to.inv_bn_map() * now it is an iterative process * for plaquette: an iterative process (same as now) */ void forward( const thvec2 & p, thvec2 & ret ) const; /** compute the backward map of a point * @param p 2D point in the "to" image * @param ret point coords in the "from" image * * @note in VERSION 0.5.1: * for triangle: * to.bn_map() * from.inv_bn_map() * the closest to this is backward_normal_no_bd * for plaquette: * backward_normal_bd() with MORPH_BD == 0.5 */ void backward( const thvec2 & p, thvec2 & ret ) const { backward_normal_bd( p, ret ); } /** backward() methods (0.5.2) */ void backward_normal_bd( const thvec2 & p, thvec2 & ret ) const; /** check if a point is inside this basic_pair in the "from" image * @param p 2D point in the "from" image * @return true if the point is in this basic_pair */ bool is_inside_from( const thvec2 & p ) const { return from.is_inside( p, m_bound ); } /** check if a point is inside this basic_pair in the "to" image * @param p 2D point in the "to" image * @return true if the point is in this basic_pair */ bool is_inside_to( const thvec2 & p ) const { return to.is_inside( p, m_bound ); } /** get the distance of a point in the "from" domain * @param p 2d point * @return distance of the point in the "from" domain */ double distance_from( const thvec2 & p ) const { return from.distance( p ); } /** get the distance of a point in the "to" domain * @param p 2d point * @return distance of the point in the "to" domain */ double distance_to( const thvec2 & p ) const { return to.distance( p ); } /** double bn_distance_from( const thvec2 & p ) const { return from.bn_distance( p ); } double bn_distance_to( const thvec2 & p ) const { return to.bn_distance( p ); } */ /** sqaured distance in the "to" image * @param p input 2D point * @return squared distance */ double distance2_to( const thvec2 & p ) const { return to.distance2( p ); } /** compute the bounding box in the "to" image * @param t1 upper left corner (output) * @param t2 lower right corner (output) */ void bounding_box_to( thvec2 & t1, thvec2 & t2 ) const { to.bounding_box( t1, t2, m_bound ); } /** left rotate in the "to" item (0.5.2) * @param p input 2D vector * @param ret return vector * @param x rotation angle */ void left_rotate_to( const thvec2 & p, thvec2 & ret, double x ) const { thvec2 pa; double t = m_kl * x; to.left_rotate( p, pa, cos(t), -sin(t) ); to.bn_map( pa, ret ); } /** right rotate in the "to" item (0.5.2) * @param p input 2D vector * @param ret return vector * @param x rotation angle */ void right_rotate_to( const thvec2 & p, thvec2 & ret, double x ) const { thvec2 pa; double t = m_kr * x; to.right_rotate( p, pa, cos(t), sin(t) ); to.bn_map( pa, ret ); } }; // class item_pair // --------------------------------------------------------------------- /** a triangle. * * The geometry is *
     *     + - - - - - +
     *      \         /
     *       C - - - B
     *        \     /
     *         \   /
     *          \ /
     *           A
     * 
* The bounds applies to the extension across the side CB. * C is the left vertex, B is the right vertex. * The order of the points is C-A-B * * A triangle is an "angle". The mapping is a linear map in polar * coordinates: *
     *   theta --> theta' = (theta/theta_0) * theta'_0
     *   rho   --> rho'   = (rho/rho_0) * rho'_0
     * 
* theta_0 and theta'_0 are the size of the two angles in the "from" and "to" * image, respectively. * rho_0 and rho'_0 are the radial dimensions of the angles. They depend on * theta, as they are linearly interpolated between the two angle sides. */ struct triangle : public item { thvec2 m_A, m_B, m_C; //!< corners of the triangle (vertex, right, left) double m_ab; //!< distance AB double m_ac; //!< distance AC double m_abc; //!< max between m_ab and m_ac double m_d; //!< distances difference: AB - AC double m_t; //!< theta = angle from AC to AB double m_ct; //!< cosine of theta double m_st; //!< sine of theta double m_dt; //!< m_d/m_t; thvec2 m_AB; //!< unit vector along AB thvec2 m_AC; //!< unit vector along AC thvec2 m_AB1; //!< unit vector orthogonal to AB thvec2 m_AC1; //!< unit vector orthogonal to AC bool m_ltpi; //!< "less than pi": whether theta is less than pi /** cstr * @note there is aproblem if the three points are aligned, * ie, A ^ (B-C) = 0, because the matrix M1 is not invertible. */ triangle( thvec2 & a, thvec2 & b, thvec2 & c ) : m_A( a ) , m_B( b ) , m_C( c ) , m_AB( b.m_x - a.m_x, b.m_y - a.m_y ) , m_AC( c.m_x - a.m_x, c.m_y - a.m_y ) { double xb = m_AB.m_x; double yb = m_AB.m_y; double xc = m_AC.m_x; double yc = m_AC.m_y; m_ab = sqrt(xb*xb + yb*yb); m_ac = sqrt(xc*xc + yc*yc); m_abc = (m_ab > m_ac)? m_ab : m_ac; m_d = m_ab - m_ac; m_st = yb * xc - xb * yc; m_ct = xb * xc + yb * yc; m_t = atan2( m_st, m_ct ); m_dt = m_d / m_t; m_AB.normalize(); m_AC.normalize(); m_AB1.m_x = m_AB.m_y; m_AB1.m_y = - m_AB.m_x; m_AC1.m_x = m_AC.m_y; m_AC1.m_y = - m_AC.m_x; m_ltpi = m_st > 0.0; m_theta_l = m_theta_r = m_t; // m_theta_l = m_theta_r = angle( m_AB, m_AC ); // thprintf("Triangle A %.2f %.2f B %.2f %.2f C %.2f %.2f\n", // a.m_x, a.m_y, b.m_x, b.m_y, c.m_x, c.m_y ); // thprintf(" AB %.2f AC %.2f Theta %.2f\n", m_ab, m_ac, m_t ); } /** map a point to polar coordinates (AB is the X-axis) * @param p input point * @return polar coords (theta, rho) * * rho is the normalized radial coordinate * theta is the normalized angular coordinate * * @note in VERSION 0.5.1: MORPH_USE_TRI_F */ void to_polar( const thvec2 & p, thvec2 & ret ) const { double xp = p.m_x - m_A.m_x; double yp = p.m_y - m_A.m_y; double st = m_AC.m_x * yp - m_AC.m_y * xp; double ct = m_AC.m_x * xp + m_AC.m_y * yp; ret.m_x = atan2(st,ct) / m_t; ret.m_y = sqrt(xp*xp + yp*yp); } /** compute a point from its polar coords * @param p input point (polar coords) * @return cartesiona coord of the point * * @note in VERSION 0.5.1: MORPH_USE_TRI_F */ void from_polar( const thvec2 & p, thvec2 & ret ) const { double r = p.m_y; // rho double t = m_t * p.m_x; // theta double c = r * cos(t); // along AB double s = r * sin(t); // across AB ret.m_x = m_A.m_x + m_AC.m_x * c - m_AC1.m_x * s; ret.m_y = m_A.m_y + m_AC.m_y * c - m_AC1.m_y * s; } /** check if a point is inside the triangle * @param p 2D point * @param bound size of the item * @return true if the point is inside * * @note in VERSION 0.5.1: not MORPH_USE_IS_INSIDE and MORPH_USE_TRI_F */ bool is_inside( const thvec2 & p, double bound ) const { #ifdef MORPH_USE_IS_INSIDE thvec2 ap( p.m_x - m_A.m_x, p.m_y - m_A.m_y ); double sbp = - m_AB.m_x * ap.m_y + m_AB.m_y * ap.m_x; double scp = - m_AC.m_x * ap.m_y + m_AC.m_y * ap.m_x; if ( ! therion::warp::is_inside( sbp, scp, m_ltpi ) ) return false; double t = ap.m_x*ap.m_x + ap.m_y*ap.m_y; #else // the following is adapted from to_polar() code // // thvec2 p1; // to_polar( p, p1 ); // return p1.m_x >= 0.0 && p1.m_x <= 1 && p1.m_y < bound; // double xp = p.m_x - m_A.m_x; double yp = p.m_y - m_A.m_y; double st = m_AC.m_x * yp - m_AC.m_y * xp; double ct = m_AC.m_x * xp + m_AC.m_y * yp; // double s = atan2(st,ct); // if ( s > m_t ) return false; if ( st < 0 ) return false; if ( m_st*ct < m_ct*st ) return false; double t = xp*xp + yp*yp; #endif double f = m_abc*bound; return ( t >= 0.0 && t < f*f ); } /** distance of a 2D point from the triangle * @param p 2D point * @return the distance */ double distance( const thvec2 & p ) const { thvec2 p1 = p - m_A; return p1.length(); } /** line distance of apoint from the triangle * @param p 2D point * @return the line distance * double bn_distance( const thvec2 & p ) const { double x = p.m_x - m_A.m_x; double y = p.m_y - m_A.m_y; return x*x + y*y; } */ /** square distance of a point * @param p input 2D point * @return square distance of the point from the vertex * * @note in VERSION 0.5.1: MORPH_USE_TRI_F */ double distance2( const thvec2 & p ) const { thvec2 p1; to_polar( p, p1 ); if ( p.m_x < 0.0 || p.m_x > 1.0 ) return 1.e+12; // INFINITY; double d = p.m_y; return d*d; } /** compute the bounding box of the triangle * @param t1 lower-left corner of the bounding box * @param t2 upper-right corner of the bounding box * @param bound "vertical" size of the bounding box */ void bounding_box( thvec2 & t1, thvec2 & t2, double bound ) const { #if 1 thvec2 b = m_B - bound * (m_A - m_B); thvec2 c = m_C - bound * (m_A - m_C); t1 = m_A; t1.minimize( b ); t1.minimize( c ); t2 = m_A; t2.maximize( b ); t2.maximize( c ); #else // TODO #endif } /** (0.5.2) * @param p input 2D point * @return S value in st_map */ double s_map( const thvec2 & p ) const { double xp = p.m_x - m_A.m_x; double yp = p.m_y - m_A.m_y; double st = m_AC.m_x * yp - m_AC.m_y * xp; double ct = m_AC.m_x * xp + m_AC.m_y * yp; return atan2(st,ct) / m_t; } /** s-t map for the triangle * @param p input 2D point * @param ret return s-t coordinates (polar coordinates) */ void st_map( const thvec2 & p, thvec2 & ret ) const { to_polar(p, ret); } /** inverse s-t map for the triangle * @param p input s-t (= polar) coordinates * @param ret return 2D point */ void inv_st_map( const thvec2 & p, thvec2 & ret ) const { from_polar(p, ret); } /** (0.5.2) */ double sm_map( const thvec2 & p, thvec2 & ret ) const; /** (0.5.2) */ void inv_sm_map( const thvec2 & p, thvec2 & ret, double d4 ) const; /** Beier-Neely map for the triangle * @param p input 2D point * @param ret return B-N coordinates (polar coordinates) */ void bn_map( const thvec2 & p, thvec2 & ret ) const { to_polar(p, ret); } /** inverse Beier-Neely map for the triangle * @param p input B-N (= polar) coordinates * @param ret return 2D point */ void inv_bn_map( const thvec2 & p, thvec2 & ret ) const { from_polar(p, ret); } /** rotate a point about the "left" corner * @param p input point * @param ret rotated point (actually p itself) * @param c cosine of the rotation angle * @param s sine of the rotation angle * * @note in VERSION 0.5.1: ret was return instead of param */ void left_rotate( const thvec2 & p, thvec2 & ret, double /* c */, double /* s */) const { ret = p; } /** rotate a point about the "right" corner * @param p input point * @param ret rotated point (actually p itself) * @param c cosine of the rotation angle * @param s sine of the rotation angle * * @note in VERSION 0.5.1: ret was return instead of param */ void right_rotate( const thvec2 & p, thvec2 & ret, double /* c */, double /* s */) const { ret = p; } }; // class triangle // ---------------------------------------------------------------------- /** four corners plaquette (quadrilater) * * The geometry is *
  
     *        + - - - - - - +
     *        |             |
     *     <- D - - - - - - C ->
     *        |             |
     *        A ----------- B
     * <\PRE>
     * The bound applies to the extension across the side CD
     * The order of the pairs is D-A-B-C
     *
     * @see P.S. Heckbert "Fundamentals of Texture Mapping and Image Warping"
     *      UCA Berkeley, 1989
     *
     * @note projective transform is not fine because it is not linear on the
     *       sides and this introduces 0-order discontinuities on the plaquette
     *       borders.
     */
    
    struct plaquette : public item
    {
      public:
        thvec2 m_A, m_B, m_C, m_D;  //!< vertices of the plaquette
    
        thvec2 m_AD;                //!< vector AD: A - D
        thvec2 m_BC;                //!< vector BC: B - C
	thvec2 m_adn;               //!< unit vector AD
	thvec2 m_bcn;               //!< unit vector BC
	thvec2 m_abn;               //!< unit vector from A to B
        thvec2 m_abh;               //!< unit orthogonal vector
        double m_AB_len;            //!< length of AB

        double m_a, m_b, m_c, m_d, m_e, m_f, m_g, m_h; 
        double m_A0, m_B0, m_C0;
        double m_D0, m_E0, m_F0;

        double m_adab;   //!< ad ^ ab
        double m_bcab;   //!< bc ^ ab
        double m_adA;    //!< ad ^ A
        double m_bcB;    //!< bc ^ B
        thvec2 m_AB;     //!< vector AB = B - A
	thvec2 m_BA;     //!< vector BA (= -m_AB)
        thvec2 m_C1;
        thvec2 m_C1C;

        double m_AD_len;  //!< length of AD
        double m_BC_len;  //!< length of BC

        double m_tan, m_ctg, m_cos, m_sin; // coeff for the "normal" direction

	double (plaquette::* s_map_impl)( const thvec2 & p ) const;
        void (plaquette::* bn_map_impl)( const thvec2 & p, thvec2 & ret ) const;
        void (plaquette::* inv_bn_map_impl)( const thvec2 & p, thvec2 & ret ) const;
   
      public:
        /** cstr
	 * @param a   A vertex
	 * @param b   B vertex
	 * @param c   C vertex
	 * @param d   D vertex
	 */
        plaquette( thvec2 & a, thvec2 & b, thvec2 & c, thvec2 & d )
          : m_A( a )
          , m_B( b )
          , m_C( c )
          , m_D( d )
        { 
	  s_map_impl = &therion::warp::plaquette::s_map_straight;
	  bn_map_impl = &therion::warp::plaquette::bn_map_straight;
	  inv_bn_map_impl = &therion::warp::plaquette::inv_bn_map_straight;

          init();
        }

	/** compute the S coordinate of the ST map
	 * @param p input 2d point
	 * @return s coordinate value
	 *
         * @pre the point should lie inside the plaquette
	 * @note in VERSION 0.5.1: s_map == s_map_straight
	 */
	double s_map( const thvec2 & p ) const
	{
	  return (this ->* s_map_impl)(p);
	}

        /** s-maps() (0.5.2)
	 */
	double s_map_straight( const thvec2 & p ) const;
	double s_map_slant( const thvec2 & p ) const;


	/** compute the T coordinate of the ST map
	 * @param p input 2d point
	 * @return t coordinate value
	 *
         * @pre the point should lie inside the plaquette
	 * @note in VERSION 0.5.1: unchanged
	 */
	double t_map( const thvec2 & p ) const;
    
        /** map a point to plaquette (s,t) coordinates
         * @param p 2D point
         * @return plaquette (s,t) coordinates of the point
         *
         * @pre the point should lie inside the plaquette
	 * @note in VERSION 0.5.1: unchanged
         */
        void st_map( const thvec2 & p, thvec2 & ret ) const;

        /** inverse map plaquette (s,t) coordinates to point
         * @param p plaquette (s,t) coordinates of the point
         * @return 2D point
	 *
	 * @note in VERSION 0.5.1: unchanged
         */
        void inv_st_map( const thvec2 & p, thvec2 & ret ) const;

        /** sm-maps (0.5.2)
         * @return fourth power of the distance
         */
        double sm_map( const thvec2 & p, thvec2 & ret ) const;
        void inv_sm_map( const thvec2 & p, thvec2 & ret, double d4 ) const;

        /** h-v map
         * @param  p 2D point
         * @param ret 2D return point (x: coord. along AB, y: vertical)
         */
        void hv_map( const thvec2 & p, thvec2 & ret ) const;
        void inv_hv_map( const thvec2 & p, thvec2 & ret ) const;

        void vh_map( const thvec2 & p, thvec2 & ret ) const;
        void inv_vh_map( const thvec2 & p, thvec2 & ret ) const;

        void hvm_map( const thvec2 & p, thvec2 & ret ) const;
        void inv_hvm_map( const thvec2 & p, thvec2 & ret ) const;

        void vhm_map( const thvec2 & p, thvec2 & ret ) const;
        void inv_vhm_map( const thvec2 & p, thvec2 & ret ) const;


        /** Beier-Neely map
	 * @param p input point
	 * @return B-N transformed point
	 *
	 * map a point P into 
	 * - x = normalized projection along AB (A=0, B=1)
	 * - y = un-normalized distance from the line AB
	 *
	 * @note in VERSION 0.5.1: bn_map == bn_map_straight
	 */
        void bn_map( const thvec2 & p, thvec2 & ret ) const
	{
	  (this->*bn_map_impl)( p, ret );
	}

        /** inverse Beier-Neely map
	 * @param p input point (B-N coordinates)
	 * @return 2D point
	 *
	 * @note in VERSION 0.5.1: inv_bn_map == inv_bn_map_straight
	 */
        void inv_bn_map( const thvec2 & p, thvec2 & ret ) const
	{
	  (this->*inv_bn_map_impl)( p, ret );
	}

        /** bn-maps() (0.5.2)
	 */
        void bn_map_straight( const thvec2 & p, thvec2 & ret ) const;
        void bn_map_slant( const thvec2 & p, thvec2 & ret ) const;

        void inv_bn_map_straight( const thvec2 & p, thvec2 & ret ) const;
        void inv_bn_map_slant( const thvec2 & p, thvec2 & ret ) const;

        /** rotate a point around the "left" (A) corner
	 * @param p input point
	 * @param ret rotated point
	 * @param c cosine of the rotation angle
	 * @param s sine of the rotation angle
	 */
	void left_rotate( const thvec2 & p, thvec2 & ret, double c, double s ) const
	{
	  double x = p.m_x - m_A.m_x;
	  double y = p.m_y - m_A.m_y;
	  ret.m_x = m_A.m_x + x * c - y * s;
	  ret.m_y = m_A.m_y + x * s + y * c;
	}

        /** rotate a point around the "right" (B) corner
	 * @param p input point
	 * @param ret rotated point
	 * @param c cosine of the rotation angle
	 * @param s sine of the rotation angle
	 */
	void right_rotate( const thvec2 & p, thvec2 & ret, double c, double s ) const
	{
	  double x = p.m_x - m_B.m_x;
	  double y = p.m_y - m_B.m_y;
	  ret.m_x = m_B.m_x + x * c - y * s;
	  ret.m_y = m_B.m_y + x * s + y * c;
	}
    
        /** check if a point is inside the plaquette
         * @param p   2D point
         * @param bound  size of the item
         * @return true if the point is inside
	 *
	 * @note in VERSION 0.5.1: st_map (ie not MORPH_USE_IS_INSIDE)
         */
        bool is_inside( const thvec2 & p, double bound ) const 
        {
          // thvec2 v;
	  // st_map( p, v );
          // if ( v.is_nan() ) return false;
          // return v.m_x >= 0.0 && v.m_x <= 1.0 && v.m_y >= 0.0 && v.m_y < bound;

#ifdef MORPH_USE_IS_INSIDE
          thvec2 ap( p.m_x - m_A.m_x, p.m_y - m_A.m_y );
          double sbp = - m_AB.m_x * ap.m_y + m_AB.m_y * ap.m_x;
          double scp = - m_AD.m_x * ap.m_y + m_AD.m_y * ap.m_x;
	  if ( ! therion::warp::is_inside( sbp, scp ) ) return false;
	  scp = - sbp;
	  thvec2 bp( p.m_x - m_B.m_x, p.m_y - m_B.m_y );
	  sbp = - m_BC.m_x * bp.m_y + m_BC.m_y * bp.m_x;
	  if ( ! therion::warp::is_inside( sbp, scp ) ) return false;
	  double c = ap * m_abn;
	  // ap -= c * m_abn;
	  ap.m_x -= c * m_abn.m_x;
	  ap.m_y -= c * m_abn.m_y;
	  bound *= m_AB_len;
	  double t = ap.m_x*ap.m_x + ap.m_y*ap.m_y - bound*bound;
          return ( t < 0.0 );
#else
          // the following is the st_map code
          double s;
          double ex_ay = m_e * p.m_x - m_a * p.m_y;
          double A = m_A0;
          double B = (ex_ay + m_B0)/2.0;
          double C = m_g * p.m_x - m_c * p.m_y + m_C0;
          if ( fabs(A) < 1.e-6 ) {
	    if ( B == 0.0 ) return false;
            s = - C / (2*B);
            if ( s < 0 || s > 1 ) return false;
	  } else {
	    if ( A < 0.0 ) { A=-A; B=-B; C=-C; }
	    // now A > 0
	    if ( C > 0 ) { // det < B
	      if ( B > 0 ) return false;     // neg. solutions
	      if ( B*B < A*C ) return false; // neg. det
	      // s = (-B-det)/A > 1
	      //     |B|-det > A
	      //     |B|-A > det
	      //     B*B - 2 |B| A + A*A > det^2 = B*B - A C
	      //     A * ( A + 2 B + C ) > 0
	      if ( A+2*B+C > 0 ) return false;
              s = (- B - sqrt(B*B-A*C) )/A;
	    } else { // det > B
	      // s = (det - B)/A > 0
	      if ( A + 2*B + C < 0 ) return false;
              s = (sqrt(B*B-A*C) - B)/A;
	    }
          }
          double t = ( p.m_x - m_b * s - m_d ) / ( m_a * s + m_c );
	  return ( t >= 0.0 && t < bound );
#endif
        }

        /** distance of a point from the plaquette
         * @param p 2D point
         * @return the distance
	 *
	 * @pre p is inside the plaquette
	 * this could be any reasonable distance function
         */
        double distance( const thvec2 & p ) const
        {
          return t_map( p );
        }

	/** Beier-Neely distance
	 * @param p 2D point
	 * @return the B-N distance
	 *
	double bn_distance( const thvec2 & p ) const
	{
	  thvec2 ap = p - m_A;
	  double d = ap * m_abn;
	  if ( d >= 0 ) {
	    if ( d < m_AB_len ) 
	      return ( ap.length2() - d*d );
	    double x = p.m_x - m_B.m_x;
	    double y = p.m_y - m_B.m_y;
	    return x*x + y*y;
	  }
	  double x = p.m_x - m_A.m_x;
	  double y = p.m_y - m_A.m_y;
	  return x*x + y*y;
	}
	 */
    
        double distance2( const thvec2 & p ) const
        {
          thvec2 v;
	  st_map( p, v );
          if ( v.m_y < 0.0 || v.m_x < 0.0 || v.m_x > 1.0 ) return 1.e+12; // INFINITY;
          if ( v.m_y < 1.0 ) return 0.0;
          return compute_segment_distance2( p, m_D, m_C );
        }
   
        /** compute the bounding box of the plaquette
	 * @param t1 lower-left corner of the bounding box
	 * @param t2 upper-right corner of the bounding box
	 * @param bound  "vertical" size of the bounding box
	 */
        void bounding_box( thvec2 & t1, thvec2 & t2, double bound ) const
	{
          thvec2 c = m_B + bound * m_BC;
          thvec2 d = m_A + bound * m_AD;
          t1 = m_A;
          t1.minimize( m_B );
          t1.minimize( c );
          t1.minimize( d );
          t2 = m_A;
          t2.maximize( m_B );
          t2.maximize( c );
          t2.maximize( d );
	}

      private:
        /** initialize the plaquette
         */
        void init();

    }; // class plaquette

// ****************************************************************
// PAIRS
//
    typedef item_pair< triangle > triangle_pair;
    typedef item_pair< plaquette > plaquette_pair;

    
  } // namespace warp

} // namespace therion

// *****************************************************************
// backward compatibility
//
#ifdef THERION
  typedef therion::warp::point_pair thmorph_pair;
  typedef therion::warp::line thmorph_line;
#endif


#endif
therion/thwarppt.cxx0000644000076400010400000006046510720741562015701 0ustar  userAdministrators/** @file thwarppt.cxx
 * 
 * @author marco corvi
 * @date   nov 2006 - mar 2007
 * 
 * @brief warping plaquette algorithm transform implementation
 */
/* Copyright (C) 2006-2007 marco corvi
 * 
 * $Date: $
 * $RCSfile: $
 * $Revision: $
 *
 * -------------------------------------------------------------------- 
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 * --------------------------------------------------------------------
 */
#include 
#include 
#include 
#include 

#include "thwarppt.h"

#ifndef M_PI
#define M_PI       3.14159265358979323846
#endif

typedef unsigned int warpp_t;
const warpp_t ngbh_mask = ((warpp_t)(0x7))<<(8*sizeof(warpp_t)-3);
const warpp_t indx_mask = ~ngbh_mask;


therion::warp::plaquette_algo::plaquette_algo( )
  : m_initialized( false )
  , m_bound3( BOUND_TRIANGLE )
  , m_bound4( BOUND_PLAQUETTE )
{ 
}

therion::warp::plaquette_algo::plaquette_algo( double bound3, double bound4 )
  : m_initialized( false )
  , m_bound3( bound3 )
  , m_bound4( bound4 )
{ 
}

therion::warp::plaquette_algo::~plaquette_algo( )
{
  reset();
}

void 
therion::warp::plaquette_algo::reset( )
{
  for (size_t i=0; im_name == from ) { p1 = mPairs[i]; if (p2) break; }
    if ( mPairs[i]->m_name == to   ) { p2 = mPairs[i]; if (p1) break; }
  }
  if ( p1 == NULL || p2 == NULL ) throw;
  mLines.push_back( new therion::warp::line( t, p1, p2 ) );
}

#ifdef DEBUG
void
therion::warp::plaquette_algo::print()
{
  printf("Plaquette algo: P.nr %d L.nr %d\n", mPairs.size(), mLines.size() );
  printf("  X origin %.2f %.2f units %.4f\n", mX0.m_x, mX0.m_y, mXUnit );
  printf("  U origin %.2f %.2f units %.4f\n", mU0.m_x, mU0.m_y, mUUnit );
  printf("  UC origin %.2f %.2f units %.2f\n", mUC.m_x, mUC.m_y, mUCUnit);

  for ( size_t i=0; im_name.c_str(), mPairs[i]->m_type, 
      mPairs[i]->u.m_x, mPairs[i]->u.m_y, mPairs[i]->x.m_x, mPairs[i]->x.m_y );
  }
  for ( size_t i=0; im_p1->m_name.c_str(),
      mLines[i]->m_p2->m_name.c_str(), mLines[i]->m_type );
  }
  for ( size_t i=0; iprint();
}
#endif

bool
therion::warp::plaquette_algo::initialize( warp_proj proj )
{
  if ( mPairs.size() < 2 )
    return false;

  if ( ! m_initialized ) {
    // thprintf("plaquette_algo::initialize() \n");
    size_t sz = mPairs.size();

    // bounding box
    thvec2 xmin( mPairs[0]->x );
    thvec2 xmax( xmin );
    thvec2 umin( mPairs[0]->u );
    thvec2 umax( umin );

    for ( size_t k=1; kx );
      xmax.maximize( mPairs[k]->x );
      umin.minimize( mPairs[k]->u );
      umax.maximize( mPairs[k]->u );
    }
    mX0 = (xmin + xmax) / 2.0;
    mU0 = (umin + umax) / 2.0;

    // units
    mXUnit = (xmax - xmin).length() / 2.0;
    mUUnit = (umax - umin).length() / 2.0;

    // scaled coordinates (relative to the centers)
    for ( size_t k=0; kz = ( mPairs[k]->x - mX0 ) / mXUnit;
        mPairs[k]->w = ( mPairs[k]->u - mU0 ) / mUUnit;
    }
    mUC = mU0;
    mUCUnit = mUUnit;

    update_lines();
    make_plaquettes( proj );

    make_neighbors( );

    /* print topology
    for (unsigned int k=0; knr(), mPlaquettes[k]->left_ngbh()->nr(),
        mPlaquettes[k]->right_ngbh()->nr() );
    }
    */
  
    m_initialized = true;
  }
  return m_initialized;
}

therion::warp::point_pair * 
therion::warp::plaquette_algo::insert_zoom_point(
  morph_type t, std::string & name, 
  const thvec2 src, std::string & from, double size )
{
  size_t k;
  size_t sz = mPairs.size();
  for (k=0; km_name == from ) break;
  }
  if ( k == sz ) {
    thprintf("warning insert_zoom_point() from point \"%s\" not found\n", 
      from.c_str() );
    return NULL;
  }
  double x0 = mPairs[k]->x.m_x;
  double y0 = mPairs[k]->x.m_y;
  thprintf("insert_zoom_point() %s (%.2f %.2f) from %s (%.2f %.2f) distance %.2f\n",
    name.c_str(), src.m_x, src.m_y, from.c_str(), x0, y0, size );

  double x1 = src.m_x - x0;
  double y1 = src.m_y - y0;
  double dd = sqrt( x1*x1 + y1*y1 );
  x1 /= dd;
  y1 /= dd;

  double a1=7.0, a2=7.0;
  point_pair * p1 = NULL; // to the left
  point_pair * p2 = NULL; // to the right
  size_t sl = mLines.size();
  double x2, y2;
  double sa, ca, a;
  for (size_t h=0; hm_type != THMORPH_STATION ) continue;
    point_pair * p;
    if ( mLines[h]->m_p1 == mPairs[k] ) {
      p = mLines[h]->m_p2;
    } else if ( mLines[h]->m_p2 == mPairs[k] ) {
      p = mLines[h]->m_p1;
    } else { 
      continue;
    }
    x2 = p->x.m_x - x0;
    y2 = p->x.m_y - x0;
    dd = sqrt(x2*x2 + y2*y2);
    x2 /= dd;
    y2 /= dd;
    sa = x2*y1 - y2*x1;
    ca = x1*x2 + y1*y2;
    a = atan2( sa, ca );
    if ( a < 0.0 ) a += 2*M_PI;
    if ( a < a1 ) { a1=a; p1=p; }
    a = 2*M_PI - a;
    if ( a < a2 ) { a2=a; p2=p; }
  }
  if ( p1 == NULL || p2 == NULL || p1 == p2 ) return NULL;
  x0 = mPairs[k]->u.m_x;
  y0 = mPairs[k]->u.m_y;

  x1 = p1->u.m_x - x0;
  y1 = p1->u.m_y - y0;
  dd = sqrt( x1*x1 + y1*y1 );
  x1 /= dd;
  y1 /= dd;

  x2 = p2->u.m_x - x0;
  y2 = p2->u.m_y - y0;
  double d2 = sqrt( x2*x2 + y2*y2 );
  x2 /= d2;
  y2 /= d2;
  if ( dd < d2 ) d2 = dd;
  if ( size < d2 / 10 ) return NULL;

  ca = x1*x2 + y1*y2;
  sa = sqrt( 1 - ca );
  ca = sqrt( 1 + ca );

  x0 += ( x2*ca + y2*sa) * size;
  y0 += (-x2*sa + y2*ca) * size;

  thprintf("left %s (%.2f %.2f)  right %s (%.2f %.2f) ==> %.2f %.2f\n",
    p1->m_name.c_str(), p1->u.m_x, p1->u.m_y, p2->m_name.c_str(), p2->u.m_x, p2->u.m_y, x0, y0 );

  point_pair * pair = new point_pair( t, name, src.m_x, src.m_y, x0, y0 );
  mPairs.push_back( pair );
  mLines.push_back( new therion::warp::line( t, mPairs[k], pair ) );
  return pair;
}
    

therion::warp::line *
therion::warp::plaquette_algo::add_extra_line( 
    point_pair * p1, 
    size_t index, 
    thvec2 & x3, 
    thvec2 & u3 )
{
  std::ostringstream ost;
  ost << p1->m_name << "_E_" << index;
  std::string name = ost.str();
  // thprintf("Extra line() point %s %6.2f %6.2f %6.2f %6.2f \n",
  //    name.c_str(), x3.m_x, x3.m_y, u3.m_x, u3.m_y );

  point_pair * p3 = insert_point( THMORPH_EXTRA, name, x3, u3 );
  p3->update( mX0, mXUnit, mU0, mUUnit );
  
  therion::warp::line * l3 = new therion::warp::line( THMORPH_EXTRA, p1, p3 );
  l3->update();
  mLines.push_back( l3 );
  return l3;
}

// ========================================================================

bool
therion::warp::plaquette_algo::forward( 
    const thvec2 & src, 
    thvec2 & dst, 
    const thvec2 & origin, 
    double unit )
{
  thvec2 z = ( src - mX0) / mXUnit;
  size_t szp = mPlaquettes.size();
  double dmin = -1.0;
  size_t imin = (size_t)(-1);
  for ( size_t i=0; iis_inside_from( z ) ) {
      double d = mPlaquettes[i]->distance_from( z );
      if ( thisnan( d ) ) continue;
      if ( imin == (size_t)(-1) || d < dmin ) {
        dmin = d;
        imin = i;
      }
    }
  }
  if ( imin == (size_t)(-1) ) 
    return false;
  thvec2 w;
  mPlaquettes[imin]->forward( z, w );
  if ( w.is_nan() )
    return false;
  dst = ( origin + w * unit );
  return true;
}

bool
therion::warp::plaquette_algo::backward(
    const thvec2 & dst, 
    thvec2 & src, 
    const thvec2 & origin, 
    double unit )
{
  thvec2 w = (dst - origin) / unit;
  size_t szp = mPlaquettes.size();
  double dmin = -1.0;
  size_t imin = (size_t)(-1);
  for ( size_t i=0; iis_inside_to( w ) ) {
      double d = mPlaquettes[i]->distance_to( w );
      if ( thisnan( d ) ) continue;
      if ( imin == (size_t)(-1) || d < dmin ) {
        dmin = d;
        imin = i;
      }
    }
  }
  if ( imin == (size_t)(-1) ) 
    return false;
    thvec2 z;
    mPlaquettes[imin]->backward( w, z );
    if ( z.is_nan( ) ) 
      return false;
    src = mX0 + z * mXUnit;
  return true;
}

void 
therion::warp::plaquette_algo::update_lines()
{
  for (size_t i=0; iupdate();
  }
}

void 
therion::warp::plaquette_algo::make_neighbors( )
{
  // thprintf("plaquette_algo::make_neighbors() plaquettes %d \n", mPlaquettes.size() );
  for (size_t k=0; kcompute_slopes();
  }
}

void
therion::warp::plaquette_algo::find_neighbors( therion::warp::basic_pair * me )
{
  
  switch ( me->type() ) {
    case THWARP_TRIANGLE:
    case THWARP_PLAQUETTE:
      for (int k=0; kngbh_nr(); ++k) 
        me->m_ngbh[k] = find_plaquette( me->m_pair[k+1], me->m_pair[k] );
      break;
    default:
      thprintf("plaquette_algo::make_neighbors() wrong pair warp-type %d\n",
        me->type() );
  }
}

therion::warp::basic_pair * 
therion::warp::plaquette_algo::find_plaquette( 
    point_pair * p1, 
    point_pair * p2 )
{
  // thprintf("find_plaquette() %s %s \n", p1->m_name.c_str(), p2->m_name.c_str() );
  for (size_t k=0; kngbh_nr();
    if ( i2 >= 1 && i2 < 4 ) {
      for (int i=0; im_pair[i] == p1 && mPlaquettes[k]->m_pair[i+1] == p2 ) {
	  // thprintf("found %d\n", mPlaquettes[k]->nr() );
	  return mPlaquettes[k];
	}
      }
    }
  }
  return NULL;
}



void 
therion::warp::plaquette_algo::make_plaquettes( warp_proj proj )
{
  for (size_t k=0; korder_lines( this, mXUnit/mUUnit, proj );
  }
  // print();

  szp = mPairs.size();
  for (size_t i=0; im_used = false;
  }

  for ( ; ; ) {
    therion::warp::point_pair * node1 = NULL;
    therion::warp::line * line = NULL;
    for (size_t i=0; ilegs() == 1 && ! mPairs[i]->m_used ) {
        node1 = mPairs[i];
        line  = node1->first_leg();
        for ( ++i; isize() == 1 ) {
            therion::warp::line * ln = mPairs[i]->next_line(NULL);
            if ( ln && ln->m_type == THMORPH_STATION ) 
              ln->m_type = THMORPH_EXTRA;
          }
        }
        break; // not really necessary
      }
      */
      if ( mPairs[i]->size() == 1 && ! mPairs[i]->m_used ) {
        node1 = mPairs[i];
        line  = node1->next_line(NULL);
        line->m_type = THMORPH_STATION; // make the line into a station line
        break;
      }
    }
    if ( node1 == NULL ) { 
      // thprintf("Error: cannot find a 1-leg node\n");
      return;
    }
  
    therion::warp::point_pair * node2 = line->other_end( node1 );
    therion::warp::point_pair * node10 = node1; // save starting nodes
    therion::warp::point_pair * node20 = node2;
    // thprintf("make_plaquettes()");
    // thprintf(" node1 %s node2 %s\n", node1->m_name.c_str(), node2->m_name.c_str() );
  
    do {
      therion::warp::point_pair * A = node1;
      therion::warp::point_pair * B = node2;
      if ( line->m_type == THMORPH_STATION ) {
        size_t iA = A->size();
        size_t iB = B->size();
        if ( iA == 1 ) // mark the node as used
          A->m_used = true;
        if ( iB == 1 ) 
          B->m_used = true;

        // thprintf("  A %s (%d)  B %s (%d) line type S\n", A->m_name.c_str(), iA, B->m_name.c_str(), iB );
        if ( iA == 1 && iB == 1 ) { 
	  thprintf("ERROR: segments are no longer supported\n");
        } else if ( iA == 1 ) {
          //                      /
          //           A ======= B ... 
          //                     | 
          //                     C
          //
          // do not do anything: B will do it
          therion::warp::line * line2 = B->next_line( line );
          therion::warp::point_pair * C = line2->other_end( B );
          if ( line2->m_type != THMORPH_STATION )
            add_triangle( A, B, C, proj );
          node1 = B;
          node2 = C;
          line = line2;
        } else if ( iB == 1 ) {
          //
          //           | 
          //       ... A ======= B  
          //          / 
          //         D
          therion::warp::line * line1 = A->prev_line( line );
          therion::warp::point_pair * D = line1->other_end( A );
          add_triangle( D, A, B, proj );
          node1 = B;
          node2 = A;
          // line = line;
        } else {
          //    ... A ========= B ...
          //        |           |
          //        D           C
          //
          therion::warp::line * line1 = A->prev_line( line );
          therion::warp::point_pair * D = line1->other_end( A );
          therion::warp::line * line2 = B->next_line( line );
          therion::warp::point_pair * C = line2->other_end( B );
          add_quadrilater( A, B, C, D, proj );
          node1 = B;
          node2 = C;
          line = line2;
        }
      } else { // line->m_type != THMORPH_STATION 
        size_t iA = A->size();
        size_t iB = B->size();
        if ( iA == 1 ) // mark the node as used
          A->m_used = true;
        if ( iB == 1 ) 
          B->m_used = true;

        // thprintf("  A %s B %s line type non-S\n", A->m_name.c_str(), B->m_name.c_str() );
        //      ?
        //      |
        //      A ======== B
        //
        therion::warp::line * line2 = A->next_line( line );
        if ( line2->m_type == THMORPH_STATION ) {
          //    node_2
          //      |
          //      A ======== B
          //
          line = line2;
          node2 = line->other_end( A );
          // insertion is handled at the next iteration
        } else {
          //      D
          //      |
          //      A ======== B
          //
          therion::warp::point_pair * D = line2->other_end( A );
          add_triangle( B, A, D, proj );
          node2 = D;
          line = line2;
        }
      }
    } while ( node1 != node10 );
    // back to start
    while ( node2 != node20 ) {
      therion::warp::line * line2 = node1->next_line( line );
      therion::warp::point_pair * C = line2->other_end( node1 );
      add_triangle( node2, node1, C, proj );
      node2 = C;
      line = line2;
    }
  } // end big for ( ; ; )
}


void
therion::warp::plaquette_algo::add_triangle( point_pair * A, point_pair * B, point_pair * C,
  warp_proj proj )
{
  // N.B. bad triangles are only warned; 
  // they are used anyways.
  if ( ((C->x - B->x) ^ (A->x - B->x)) >= 0.0 ) {
    thprintf("WARNING: bad triangle (%s %s %s) X-orientation\n",
      C->m_name.c_str(), B->m_name.c_str(), A->m_name.c_str() );
  } else if ( ((C->u - B->u) ^ (A->u - B->u)) >= 0.0 ) {
    thprintf("WARNING: bad triangle (%s %s %s) U-orientation\n",
      C->m_name.c_str(), B->m_name.c_str(), A->m_name.c_str() );
  } // else {
    therion::warp::triangle_pair * tri = new therion::warp::triangle_pair( B, C, A, this->m_bound3 );
    tri->set_projection( proj );
    mPlaquettes.push_back( tri );
  // }
}

void
therion::warp::plaquette_algo::add_quadrilater( 
     point_pair * A, point_pair * B, point_pair * C, point_pair * D,
     warp_proj proj )
{
  // thprintf("  ADD Plaquette: %s %s %s %s\n",
  //   A->m_name.c_str(), B->m_name.c_str(), C->m_name.c_str(), D->m_name.c_str() );
  // check orientation
  if ( ((B->x - A->x) ^ (D->x - A->x)) >= 0.0 ) {
    thprintf("WARNING: bad plaquette (%s %s %s) X-orientation\n",
      B->m_name.c_str(), A->m_name.c_str(), D->m_name.c_str() );
  } else if ( ((C->x - B->x) ^ (A->x - B->x)) >= 0.0 ) {
    thprintf( "WARNING: bad plaquette (%s %s %s) X-orientation\n",
      C->m_name.c_str(), B->m_name.c_str(), A->m_name.c_str() );
  } else if ( ((B->u - A->u) ^ (D->u - A->u)) >= 0.0 ) {
    thprintf("WARNING: bad plaquette (%s %s %s) U-orientation\n",
      B->m_name.c_str(), A->m_name.c_str(), D->m_name.c_str() );
  } else if ( ((C->u - B->u) ^ (A->u - B->u)) >= 0.0 ) {
    thprintf("WARNING: bad plaquette (%s %s %s) U-orientation\n",
      C->m_name.c_str(), B->m_name.c_str(), A->m_name.c_str() );
  } else {
    therion::warp::plaquette_pair * plaq = new therion::warp::plaquette_pair( A, B, C, D, this->m_bound4 );
    plaq->set_projection( proj );
    mPlaquettes.push_back( plaq );
  }
}




bool
therion::warp::plaquette_algo::map_backward_plaquette( size_t k, const thvec2 & w, thvec2 & z )
{
  if ( mPlaquettes[k]->is_inside_to( w ) ) {
    mPlaquettes[k]->backward( w, z );
    return true;
  }
  return false;
}


bool
therion::warp::plaquette_algo::map_image( const unsigned char * src, unsigned int ws, unsigned int hs,
                       unsigned char * dst, unsigned int wd, unsigned int hd,
		       thvec2 const & origin, double unit,
                       int depth, 
		       warp_proj proj )
{
  if ( ! initialize( proj ) ) return false;

  mUC     = origin;
  mUCUnit = unit;

  double res[4];
  assert( depth <= 4 ); // max 4 components
  unsigned int wsd = ws * depth;

  thvec2 z;

  // print();

  // thprintf("X origin %6.2f %6.2f units %6.2f\n", mX0.m_x, mX0.m_y, mXUnit);
  // thprintf("U origin %6.2f %6.2f units %6.2f\n", mU0.m_x, mU0.m_y, mUUnit);
  // thprintf("UC origin %6.2f %6.2f units %6.2f\n", mUC.m_x, mUC.m_y, mUCUnit);
  // new way
  warpp_t * pi = (warpp_t *)malloc( wd * hd * sizeof(warpp_t) );
  if ( pi != NULL ) {
    memset( pi, 0xff, wd*hd*sizeof(warpp_t) );
    double * pf = (double *)malloc( wd * hd * sizeof(double) );
    if ( pf == NULL ) 
      thprintf("warning: failed to allocate temporary distance image\n");

    for (size_t k=0; kbounding_box_to( t1, t2 );
      t1 = mUC + mUCUnit * t1;
      t2 = mUC + mUCUnit * t2;
      t1.maximize( thvec2(0,0) );
      t2.minimize( thvec2(wd, hd) );
      int i1 = (int)t1.m_x;
      int i2 = (int)t2.m_x;
      int j2 = (int)t2.m_y;
      for (int j=(int)t1.m_y; jis_inside_to( w ) ) {
	    // ++cnt;
            if ( ( piwd[i] & ngbh_mask ) == ngbh_mask ) {
              piwd[i] = (warpp_t)k;
	      if ( pf ) pfwd[i] = -1.0; // delay distance computation
	      // pfwd[i] = mPlaquettes[k]->distance2_to( w );
            } else {
              double d1 = mPlaquettes[k]->distance2_to( w );
	      if ( pf ) {
	        // delayed distance computation
	        if ( pfwd[i] < 0.0 ) pfwd[i] = mPlaquettes[piwd[i]]->distance2_to( w );
                double d0 = pfwd[i];
                if ( d1 < d0 ) { 
		  piwd[i] = (warpp_t)k;
		  pfwd[i] = d1; 
		}
	      } else {
	        double d0 = mPlaquettes[piwd[i]]->distance2_to( w );
		if ( d1 < d0 ) { 
		  piwd[i] = (warpp_t)k; 
		}
	      }
            }
          }
	  u.m_x += 1.0;
        }
      }
      // thprintf("plaquette %2d: points %d\n", k, cnt );
    }
    warpp_t * pij = pi;

    // not sure if it's better to random-access or scan-through
    // if the output image is dense a scan-through should be better
    // if it is "sparse" random-access should be better
    // in the following i opt for scan-through on the destination image
    // but random-access of the (i,j) vector
    //
    // unsigned int wdd = wd * depth;
    unsigned char * dst1 = dst;
    for (unsigned int j=0; j= 0 && ix2 < (int)ws ) {
            int iy1 = (int)x.m_y;
            int iy2 = iy1 + 1;
	    if ( iy1 >= 0 && iy2 < (int)hs ) {
	      // bilinear interpolation: does not cost much more than nearest-pixel
              double dx = x.m_x - ix1;  
              double dy = x.m_y - iy1;
	      double dx1dy1 = (1-dx) * (1-dy);
	      double dx1dy0 = (1-dx) * dy;
	      double dx0dy1 = dx * (1-dy);
	      double dx0dy0 = dx * dy;
              // unsigned char * dst1 = dst + (j * wdd + i * depth);
              const unsigned char * src00 = src + iy1*wsd + ix1 * depth;
              const unsigned char * src01 = src00 + wsd;
              const unsigned char * src10 = src00 + depth;
              const unsigned char * src11 = src01 + depth;
              for (int c=0; c= 255 ) ? 255 : res[c]);
              }
	    }
	  }
        }
	dst1 += depth;
      }
    }
    if ( pf ) free( pf );
    free( pi );
  } else { // old way (used if pi malloc failed ...
    thprintf("warning: failed to allocate temporary index image\n");
    for (size_t k=0; kbounding_box_to( t1, t2 );
      t1 = mUC + mUCUnit * t1;
      t2 = mUC + mUCUnit * t2;
      t1.maximize( thvec2(0,0) );
      t2.minimize( thvec2(wd, hd) );
      int i2 = (int)t2.m_x;
      int j2 = (int)t2.m_y;
      for (int j=(int)t1.m_y; j= 0 && ix2 < (int)ws && iy1 >= 0 && iy2 < (int)hs ) {
              double dx = x.m_x - ix1;  // bilinear interpolation
              double dy = x.m_y - iy1;
              unsigned char * dst1 = dst + depth * (j * wd + i);
              const unsigned char * src00 = src + depth * ( iy1*ws + ix1 );
              const unsigned char * src01 = src00 + depth * ws;
              const unsigned char * src10 = src00 + depth;
              const unsigned char * src11 = src01 + depth;
              for (int k=0; k= 255 ) ? 255 : res);
              }
            }
          }
        }
      }
    }
  }

  return true;
}
therion/thwarppt.h0000644000076400010400000002426710644734366015337 0ustar  userAdministrators/** @file thwarppt.h
 * 
 * @author marco corvi
 * @date   nov 2006 - mar 2007
 * 
 * @brief warping plaquette algorithm
 *
 * ---------------------------------------------------
 */
/* Copyright (C) 2006-2007 marco corvi
 * 
 * $Date: $
 * $RCSfile: $
 * $Revision: $
 *
 * -------------------------------------------------------------------- 
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 * --------------------------------------------------------------------
 */

#ifndef thwarppt_h
#define thwarppt_h
#define THERION

#include 

#include "thtrans.h"
#include "thwarppme.h"
#include "thwarppdef.h"


namespace therion
{
  namespace warp
  {

  /**
   * therion warping transformation.
   *
   * The "from" data are in the sketch image reference frame
   * The "to" data are in the survey reference frame
   * The "warped image" is scaled/translated with respect to the survey frame
   *
   * The X and U centers and units are computed when the mapping is
   * initialized.  The warped image center and units are computed when a
   * source image is mapped (before that point they have the same values as the
   * U center and units).  Until the map has been initialized the centers and
   * units have undefined values.
   */
    class plaquette_algo : public inserter
    {
      private:
        bool m_initialized;          //!< whether the map has been initialized
        std::vector< therion::warp::point_pair * > mPairs;         //!< vector of point pairs
        std::vector< therion::warp::line * > mLines;         //!< vector of legs (lines)
        std::vector< therion::warp::basic_pair * > mPlaquettes; //!< vector of 4-plaquettes
       
        double m_bound3;   //!< bound for triangles
        double m_bound4;   //!< bound for plaquettes
    
      public:
        thvec2 mX0;    //!< X-Y center
        thvec2 mU0;    //!< U-V center
        double mXUnit; //!< X-Y unit
        double mUUnit; //!< U-V unit
        thvec2 mUC;    //!< U-V center in the warped image
        double mUCUnit; //!< U-V unit in the warped image
        
      public:
        /** default cstr
         */
        plaquette_algo( );
    
    
        /** cstr
         * @param bound3   bound for triangles
         * @param bound4   bound for plaquettes
         */
        plaquette_algo( double bound3, double bound4 );
        
        /** dstr
         */
        ~plaquette_algo();
        
        /** clear internal mapping data
         */
        void reset( );
    
    
        /** accessor to the "from" origin 
         * @return origin in the "from" image
         */
        thvec2 from_origin() const { return mX0; }
        
        /** accessor to the "to" origin 
         * @return origin in the "to" image
         */
        thvec2 to_origin() const { return mU0; }
        
        /** accessor to the "from" unit 
         * @return unit in the "from" image
         */
        double from_unit() const { return mXUnit; }
        
        /** accessor to the "to" unit 
         * @return unit in the "to" image
         */
        double to_unit() const { return mUUnit; }
        
        /** accessor to the warped image origin 
         * @return origin in the warped image (zero at the upper-left corner)
         */
        thvec2 warped_origin() const { return mUC; }
        
        /** accessor to the warped image unit 
         * @return unit in the warped image
         */
        double warped_unit() const { return mUCUnit; }
    
    
        
        /** insert a point and a line of extra type
         * @param p1  first line point
         * @param index index used to make the new point name
         * @param x3    new point X (sketch frame)
         * @param u3    new point U (survey frame)
         */
        line * add_extra_line( point_pair * p1, size_t index, 
                                       thvec2 & x3, thvec2 & u3 );
    
    
        /** insert a point
         * @param t    point morph type
         * @param name point name
         * @param src  point coords in the source (from) frame (sketch)
         * @param dst  point coords in the destination (to) frame (survey)
         * @return pointer to the new point-pair
         */
        point_pair * insert_point( morph_type t, std::string & name, 
                                     const thvec2 & src, const thvec2 & dst );

	point_pair * insert_zoom_point( morph_type t, std::string & name, 
	                                const thvec2 src, std::string & from, double size );
    
        /** insert a line
         * @param t    line morph type
         * @param from name of the first line endpoint 
         * @param to   name of the second line endpoint 
         */
        void insert_line( morph_type t, std::string & from, std::string & to );
        
        /** initialize internal data for the mapping
         * @param proj  projection type
         * @return true if initialized successfully
         */
        bool initialize( warp_proj proj = THWARP_PLAN );
        
        /** map a 2D point forward 
         * @param src     point in the source ("from") frame
         * @param dst     point in the "to" frame
         * @return true if successful
         */
        bool forward( const thvec2 & src, thvec2 & dst )
        {
            return forward( src, dst, mU0, mUUnit );
        }
        
        /** map a 2D point backward 
         * @param dst     point in the "to" frame
         * @param src     point in the "from" frame
         * @return true if successful
         */
        bool backward( const thvec2 & dst, thvec2 & src )
        {
            return backward( dst, src, mU0, mUUnit );
        }
        
        /** map a 2D point backward 
         * @param dst     point in the "to" frame (survey)
         * @param src     point in the "from" frame (sketch)
         * @param origin  origin in the "to" frame
         * @param unit    unit in the "to" frame
         * @return true if successfulA
         */
        bool backward( const thvec2 & dst, thvec2 & src, const thvec2 & origin, double unit );
        
        /** map a 2D point forward
         * @param src     point in the "from" frame
         * @param dst     point in the "to" frame
         * @param origin  origin in the "to" frame
         * @param unit    unit in the "to" frame
         * @return true if successful
         */
        bool forward( const thvec2 & src, thvec2 & dst, const thvec2 & origin, double unit );
        
        /** map an image. The result is centered in the destination image
         * @param src  source image (RGB)
         * @param ws   source image width
         * @param hs   source image height 
         * @param dst  destination image (RGB) must be preallocaed by the caller
         * @param wd   destination image width
         * @param hd   destination image height
         * @param origin target origin in the warped image frame
         * @param unit   target units
         * @param depth image depth (bytes per pixel).
         * @param proj  sketch projection type
         * @return true if successful
         *
         * @note this method, as a side effect, sets the warped image origin and units
         */
        bool map_image( const unsigned char * src, unsigned int ws, unsigned int hs,
                    unsigned char * dst, unsigned int wd, unsigned int hd,
    		    thvec2 const & origin, double unit,
                    int depth = 3, 
    		    warp_proj proj = THWARP_PLAN );
    
        /** debug: print the content of this warptrans
         */
        void print();
    
      private:
        /** update line features - compute the lines' coeffs.
         */
        void update_lines();
        
        /** prepare the plaquettes
         * @param proj  projection type
         */
        void make_plaquettes( warp_proj proj );
        
        /** set up the neighbors
         */
        void make_neighbors( );
    
        /** find the neighbors of a warping pair
         * @param me warping basic_pair
         */
        void find_neighbors( basic_pair * me );
    
        /** fidn the warping pair with a given oriented side
         * @param p1 first side point
         * @param p2 second side point
         */
        basic_pair * find_plaquette( point_pair * p1, point_pair * p2 );
        
        /** map by the plaquette
         * @param k   plaquette index
         * @param w   from point
         * @param z   to point
         * @return true if successful
         */
        bool map_backward_plaquette( size_t k, const thvec2 & w, thvec2 & z );
    
        #ifdef USE_SEGMENT
        /** add a segment
         * @param A   first endpoint
         * @param B   second endpoint
         */
        void add_segment( point_pair * A, point_pair * B );
        #endif
    
        /** add a triangle
         * @param A   first point (left)
         * @param B   second point (vertex)
         * @param C   third point (right)
         * @param proj warp projection type
         */
        void add_triangle( point_pair * A, point_pair * B, point_pair * C,
          warp_proj proj = THWARP_PLAN );
        
        /** add a quadrilater
         * @param A   first point 
         * @param B   second point
         * @param C   third point 
         * @param D   fourth point 
         * @param proj warp projection type
         */
        void add_quadrilater( point_pair * A, point_pair * B, point_pair * C, point_pair * D,
          warp_proj proj = THWARP_PLAN );
    };

  } // namespace warp

} // name space therion

// *******************************************************************
// backward compatibility
//
#ifdef THERION
  typedef therion::warp::plaquette_algo thwarptrans;
#endif

#endif
therion/TODO.M0000644000076400010400000001055111465545200014154 0ustar  userAdministrators-------------------

nastavitelny okraj vyplne pod legendou (0 pre map-image!)

metapost: warningy len v debug mode; interaktivny mod pre -d (s vysvetlenim v thbooku, ktore premenne pouzit)

do thbooku vysvetlenie o debugovani MP (mail muttonovi 15.1.09 

zvacsovanie fontov v suradniciach

pri reze grid vpravo pretrca cez mapu (postupne skladanie)


v atlase nie je moznost pouzit mierku a sever pred vlozenim map (formdef vkladat uz v data.tex)
rozmery zrkadla sadzby zmenit len pre mapy, nie pre uvod a legendu


mapy vseobecne:
 * pri farebnych labeloch stmavit odtien farby

thpdf:

 * zoznam scrapov na danej strane v atlase -> z toho registre
   * register pouzitych nazvov - z blokov
                               - z vrstiev
   * zhrnutie udajov o listoch na konci
 * k vrstve: meno vo vertikalnom smere alebo udaj o vyske
 * zanorene OCG
 * cisla stran a odkazov cez utf2tex
 * skontrolovat ci nezapisujem nadbytocne xobjecty kvoli vrstvam
 * podmienene nacitavanie scrapov v TeXu
 * dvojstrankovy mod (Title vzdy na pravej strane), vtedy akceptovat:
   * vkladanie prazdnych stran (lepsie: atribut prava/lava pre stranu)
   * exclude pages a vkladanie prazdnych stran: mena namiesto cisel stran (?)
   * zrusit OwnPages option (jedine spolu s predch. -- problem s funkciou
     find_excluded_pages) -- namiesto cisla strany makro \getpage{.} zvacsi 
     argument o hodnotu \the\pageno na 1. strane s mapou
 * 2. sokolie oko
 * vrstvy pod aktualnou: odlisit hlbku odtienmi sedej (?)
 * mody pre preview (ziadne, linkovane, vsetky)
 * vrstva `pri' pre atlas
 * co s posunom stran v rychlom mode


thsvg:

 * pattern coloring using symbol-color
   - delete setgray and setrgbcolor when converting pattern body
   - extend structures to include pattcolor
   - use "inherit" color
 * uxivatelsky prefix pre ids
 * fonty - orezavacie cesty + vkladanie?
 * layers cez javascript
 * (priehladnost -> SVG 1.2)


thconvert:

 * (dorobit) CONCAT + konverzia rozdelenych textovych riadkov
 * optimalizacia zmien fontov + gsave & al.


thepsparse: 

 * grid do 2d struktur


thtexfonts:

 * upravit citanie glyphlistu aby podporovalo viac unicode hodnot
 * prepinanie fontov v makrach definovanych uzivatelom v TeXu a MP
   (equipment, continuation) aj pre cisla stran v atlase (tie cez utf2tex)
 * optimalizacia zmien fontov (delenie slov!)
 * doplnit kvazi HTML znackovanie vstupnych retazcov
 
 
tex:

 * sipka na sever je zbytocna pri priecnom a rozvinutom reze. V ich pripade
   by tam mal byt nejaky identifikator projekcie  
 * northarrow do atlasu?
 

mpost:

 * konfigurovatelna velkost textu v mierke a velkost sipky na sever
 * point stalctites,stalagmites, via-ferrata
 * gradientny prechod pre areas
 * poriesit odsadenie bodovych znaciek a najma labelov
 * dorobit aby fungovalo predefinovanie u,v,w - pri presumed wall, patternoch
 * initialize(Scale) nepomaha na lejble v legende -- prepisovanie mptexpre.tex?
 * color map-bg do legendboxov (hadam fg; co ak je fg farbene rozne?)

thbook:

 * varovania texu a metapostu
 * obrazky mapovych znaciek

----- prezitky dob minulych -----

 * mod pre _velke_ mapy (>10MB): scrapy vysadzat do samostatneho suboru a z 
   dalsieho na ne odkazovat pomocou Reference XObject forms -> nefunguje v AR5

---------------------------------
hotovo: 

* point snow
* line rope
* area snow, ice, clay
* opr. area debris, sand, line debris; dopln. ostatne nedef, equipment, sipka 
  na sever
 * ramik a stvorcova siet (kriziky): vylepsit alebo cez MetaPost 
   (do uvahy aj convergence)

 * vypnit miesto pod legendou bg farbou 

* text vo farbe scrapov
* suradnice ku gridu
* labels ku kladu listov
* velkost gridu (suradnic) urcit pred zvacsenim plochy podla page-gridu
* --print-symbols: nepodchyti vsetky patterny 
  (nie vsetky znacky v LEGENDLISTE? -- chybaju v ALL_PATTERNS)
* systemove farbenie znaciek
* fixed bug with missing patterns in symbols.xhtml
* fixed inaccurate clipping of coloured scrap background
* fixed placement of surface bitmaps with larger offset
* added white fill below cave passages in transparent PDFs if background
  colour is white (needed if the map is included into other map with non-white
  background)
* fixed alignment of some point symbols in AUT symbol set
* new layout option 'color map-bg transparent' to omit page background
* fixed incorrect line width conversion in some patterns
* hide white background of scraps when the PDF layer containing them is invisible
therion/TODO.MS0000644000076400010400000000726411371350360014303 0ustar  userAdministratorsextend left/right a backreadings problem

suradnice v cave-liste su v semilogaritmickom tvare

bug s izbicou a pevnymi bodmi

xth calibrate bitmap: zlucit filtre img/pdf

Makefile: make library pri zmene prekladov (neaktualne therion.tcl!)

Pacher: 
  * obrovske patterny
  * interim bboxmargin:=0 bez skupiny pri l_wall_ice

podpora NFSS pri --print-symbols (ENC_NEW.write_enc_files(); + skopirovat fonty)

do sql: ostatne flagy; commenty pre stations

(mutton) ATTR__scale pre vsetky znacky v MP

pri kresleni s xvi na pozadi: ak nad mer. bod v xvi vkladam dva mer. body, druhy
  ma nespravne meno

neumoznit shift 0 0 pre mapy

kontrola nulovych segmentov na ciare pre MP

stopy/palce pomocou '/"

pri ctrl-p aktivovat point dialog a po vlozeni bodu aplikovt zmeny

grades pre polygon aj fixne body

meno obrazku do uvodzoviek: -sketch [Sketches/Greenlink Plan J2 sketch 210707.jpg] 0 -784

sketche do samostatneho layera

map-comments v spravnom poradi


konvertor: 
  serie precislovat na jednoduche nazvy bodov
HEEB: 
+ chybajuci podorys vo vtacej2
  premenovat subor na pth (?)
  pri manipulacii s fix bodmi (pridanie; najprv fix potom pripojenie na koncovy
    pri merani od konca) thexport len "FIX\r\n"
/  chyba spojnica k priecnemu rezu
/  v priecnom reze chybaju shoty a mer. bod
/  preco sa vo vsetkych nacrtkoch opakuje bod 0 (fix?)
/  thexport dodrziavat uhlove jednotky, 
/  dat tam trip comment, 
/  opakovat 3 merania polygonu, 
/  problem s pripojenim roznych dist

neprebera sa attr do survey ... - entrance ...

ak je continuation s explored udajmi, nezobrazit otaznik ale dlzku

xtherion ma do scrapu doplnit autora + rok! (pokial tam nie je)

pridat margin option pre uvodne strany atlasu, potom dat pagesetup do
  1) data.tex za opacity a scale s normalnym okrajom
  2) do th_pagedef s overlapom
  3) do legendy s normalnym


altitude scaling

ak je label prazdny retazec, zhuci mp?

nejde naraz zadat mapy elev. v dvoch projekciach

LOG-subor: 
X m surveyed (of which Y approximate) + about Z unsurveyed but explored
(see the continuation-list and survey-list for details)

do xtherionu info o tom ktory ini precital, + warning ak nerozparsoval ini

xtherion linux -- delete nezmaze oznaceny blok textu, len znak na kurzore

label k line section

preco nepouzivame if else v Makefile namiesto komentovania casti?

pri centerline so zadanou deklinaciou alebo data nosurvey nepozadovat
datum na vypocet automatickej deklinacie

obvod scrapu a rozdelena stena 

spajanie ciar

*****************************************************************************
georeferencovanie bitmap aj pomocou jgw/pgw:

A world file file is a plain ASCII text file consisting of six values separated by newlines. The format is:

pixel X size
rotation about the Y axis (usually 0.0)
rotation about the X axis (usually 0.0)
negative pixel Y size
X coordinate of upper left pixel center
Y coordinate of upper left pixel center
      
************************************************
loch pada pri exporte

X Error of failed request:  GLXBadContext
Major opcode of failed request:  144 (GLX)
Minor opcode of failed request:  5 (X_GLXMakeCurrent)
Serial number of failed request:  70567
Current serial number in output stream:  70567
	
The program 'loch' received an X Window System error.
This probably reflects a bug in the program.
The error was 'GLXBadContext'.
(Details: serial 23 error_code 155 request_code 144 minor_code 5)
(Note to programmers: normally, X errors are reported asynchronously;
 that is, you will receive the error a while after causing it.
 To debug your program, run it with the --sync command line
 option to change this behavior. You can then get a meaningful
 backtrace from your debugger if you break on the gdk_x_error() function.)
		
therion/TODO.S0000644000076400010400000002154512011772622014165 0ustar  userAdministratorsHOT LIST:
+ survey level for station-name labels
+ hyperlink
+ KML description and name + bugfix
+ symbol show/hide group texts
+ do KML povrchove flagy sink/spring etc...
+ zobrazovat povrchove flagy v lochu
+ strike and dip
+ alphabetical team sorting
+ symbol hide/show user defined symbols
+ CCNP symbol set
+ team instrument bug
+ pridat strike & dip
+ fills orientation
+ pridat l:steps, l:rope, l:handrail
+ pridat do TeXu \northsouthrange a \eastwestrange
+ skontrolovat v xtherione stavovy riadok - kde je tam list
+ pridat ignore offsets
+ pridat topofil from-count/to-count/count(er) standardne namiesto dlzky
+ pridat inclination ako percetage
+ pridat ignoreall aj ked multiline
+ color map-fg survey-date, explo-date
  -pridat layout object lookup
  -criteria: altitude, depth, map, survey, eplo-date, topo-date
  - -type continuous / discrete ([x y] [- x] [x -] [- -])
  - -title text
  -data: value color (.,-) label
+ loch na debiane!!! -> checkovat opengl status + moznost vypnut off-screen, ak je problem tam
+ pozriet co by stalo data dimensions/passage
+ getline a macosx -> vyhodit ho z makefile, podla maximilianovho mailu
+ urobit dmg podla survexu
+ warning ked chces zmenit popis nejakej group

+ pridat strukturu na triangulation line
  - vypocitat typ: AB,BCDE,ABCDE,BCDEF,ABCDEF
+ do trojuholnika pridat pointer na t-line + info ci normal/reverse
+ vypocitat intersection-point-up/down alebo central-point-up/down,up,down
+ vypocitat potrebne body (ABCDEF)
+ vytriangulovat

+ vytvorit thcs.h & thcs.cxx:
	- vrati int cs podla mena alebo unknown
	- vrati meno podla int
	- vrati pointer na strukturu podla int
	- pridat custom CS alebo throwne exception
+ interpolovane LRUD na zaklade shotov
+ vylucit z interpolacie tie shoty, ktore nemaju 
  oba body explicitne zadane (cez stations uid)

+ layout pri exporte XHTML
+ priradenie farieb mapam
+ priame proj4 retazce do CS
+ calibracia surface v lochu
+ survey selection v loch-u
+ loch entrance/fix/station/label off-screen rendering
+ splayshoty previest na LRUD
+ jazyky parsovat na vystupe - odskusat
+ chybaju meracske body v legende

+ thbook: units up|down|left|right|dimensions
+ thbook: splay shots using "-" or "." as station name
+ thbook: in therion.ini otf2pfb on|off
+ thbook: in therion.ini pdf-fonts
+ thbook: -filter (on|off)
+ thbook: more join description
+ thbook: flags arch & overhang
+ thbook: export cave-list -surveys (on)|off
+ thbook: symbol-colour
+ thbook: new symbol groups

+ include maps with previews
+ loch surface handling
+ add options menu to xtherion
+ support iso date format YYYY-MM-DD
+ add lookup tables to configuration files
+ check label size switch and tex export
+ add grid-range to layout
+ fix bug with default layout size/page-setup etc...
+ KML table export
+ samples.doc: add coordinates of stations to cave list
+ create cave penetration distance calculation code + label
+ sort caves in export according to source position!
+ add shot type (leg flag) to attribute export
+ layout: default text orientation switch 
+ automatic label flip if they are up-side down according to given orientation
+ attributes sample
+ show/hide U symbols
+ add cave structure to continuation-list
+ add -source on|(off) to table export
+ user defined attributes to shots
+ scrap morphing algorithm setup to configuration file
+ 3D generation algorithm - do not remove join points
+ 3D generation algorithm - take xelevation data into account
+ scrap name with "_" exported with "." when debug scrap-names
+ fix hash export in AutoCAD DXF file format	
+ fix usage of extra morphing points (sometimes are ignored)
+ support cross sections (LRUD) in XVI
+ allow (direction + distance) instead of LRUD
+ polyline to bezier conversion mode
+ more complex attribute export
+ link same continuations within different projections
+ symbol show/hide of user defined symbols (using subtypes)
+ add shot/stations flags to attributes when exported in metapost
+ add -survey-lines on|off|auto option to scrap - auto by default -
  if there is some line survey, it will be off
+ add rotation of 3D surface into surface calibration
+ negative values to point-dimensions
+ add selections/unselections to export queue
+ redo database export
+ add gradient to area
+ add line moonmilk and flowstone areas surrounded by line flowstone or moonmilk
+ solve transparency of sketches
+ add more layers to DXF export (lines, points, areas?) with
  some symbols
+ add legends to SVG export
+ import of 3D and PLT via lxFile
+ LRUD envelope generation by lxFile
+ LRUD walls into 3D shapefiles
+ associate line section with section scrap
+ solve section names and sections far from passage
+ add links to NWES page numbers in atlas
+ point camera
+ point picture/hyperlink
+ not to use -walls off when PLT file is exported
+ NOT_LRUD flag to lox shots, when there exists shot point in some
  scrap with outline
+ warning if reading/backreading difference is big
+ no joins where starting/ending points are identical
+ new centerline station flags: spring, sink, lake, doline
+ special symbols centerline features: entrance, spring, sink, 
  lake, doline
+ new surface symbols:
  line dripline
  line cliff
  line landform
  line surface-contour (-altitude??)
+ individual coloring of previews
+ map coloring 
  - add user defined color tables into configuration files
  - chapter|explo-date|topo-date colormodes
  - saturation as color parameter
  - use grid settings in altitudes
+ add bookmarks to PDF files (maps?)
+ add user define map headers into layout (meta language simmilar
  to HTML)
+ 3d: fix bug with internal hole, where no part of it is wall
+ point rock or block
+ line rope 
  anchor on/off/auto (point option)
  line-adjust on/off/auto
+ line fixed-ladder, rope-ladder, via-ferrata
+ depth-bar [position| off ] - support for multiple depth-bars
+ grid-bar [position|off] [position|off] - support for multiple grid bars
  s_depthbar() - divide into pieces (to fit into figure size)
  s_gridbar() - divide into pieces (to fit into figure size)
+ add centerline flags for sink, spring and doline and map these
  flags to metapost symbols in export
+ add statistics survey 
+ add survey name under scrap name when debug scrap-names
+ therion --protractor 
+ MacOS X installator (e.g. http://s.sudre.free.fr/Software/Iceberg.html)
+ single temporary directory, change name if process file exists
+ remove temp-dir warning
  
xtherion:

+ vtopo import
+ generate error if therion is not found
+ search & replace toolbar to compiler
+ moving split bar in compiler window
+ commands for tabbing/commenting out blocks of texts
+ rightclick on map-item with changes of types and subtypes
+ multiselection for properties changing
+ fix file saving when drive/device have been unplugged
+ fix: the scrollbar does not appear automatically in
  compilation window after a compile. We must resize the window or go back
  in image window (and go back in compile window) to make it appear
+ save/load xtherion startup script to $HOME/.xtherion
+ edit line -> to bezier / to polyline option
+ simple line digitizer
+ add map editor import filter
+ SVG import into map editor (using tcldom)
+ do not save empty lines/areas/scraps
+ Ctrl+F binding in text/map editor - switch focus to Find 
  control panel and maximize it
+ add "Filter" and "Unfilter" button for search & select
+ add filter menus
+ warn if symbols are outside of scraps
+ autoincrease scrap names (not scrapN)
+ area indicator to map editor (type and rotation)
+ fix MacOS X key bindings
+ disable "new file" and "open" when one file is opened in map editor
+ multiplatform init files
+ shortcuts and macros for common actions
+ right click on line
+ undo/redo buttons
+ context sensitive controls for most commonly used options
  (subtype, text, name, visibility, align, scale, ...)
+ rebuild compiler (no more cp text editor)


WOULD BE NICE LIST:

therion:

+ navigation pane labeling
+ redo database export
+ morphing: add additional features (line extra, point extra:point|distance)
+ export rigging list + -text option to point anchor
+ add morphing features browsing code
+ add fast mode for xtherion - just to generate survey and map structures
+ surface selection according to coverage
  2D: all surfaces that covers current map sorted by size and coverage
  3D: make a surface selection and clipping
+ export all information database
+ add support for output units (date format, feets etc...)
+ preview beside
+ add support for multiple metapost files (more than 4096 scraps)
+ add -map-level scrap to select -> each scrap will be a separate map
+ multiple selections in thconfig file
+ error when 2 simmilar points in scrap

xtherion:

+ add endscrap name to the scrap
+ add join toolbar simmilar to area
+ select and move several points together
+ select and move several objects betweens scraps together
+ add encoding control of configuration file
+ solve splitting of curves with id
+ let xtherion compilation run without configuration file 
  (only with opened files)
therion/TODO.SM0000644000076400010400000000060710637054424014303 0ustar  userAdministrators+ global variables that define density and randomness of area fills
+ hierarchicky outline
+ pridat ,,,, do utf2tex
+ do thbook-u

Having done this you will probably want to install what you have  
built. This should be done as root:

$ su
password: ******
# make install
On the mac the process is slightly different:

$ sudo make install
password: ******

therion/xtherion/0000755000076400010400000000000012270034353015124 5ustar  userAdministratorstherion/xtherion/about.tcl0000644000076400010400000000543311656751162016762 0ustar  userAdministrators##
## about.tcl --
##
##     Application module.   
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## -------------------------------------------------------------------- 


set xth(about,image_id) [image create photo -data $xth(about,image_data)]
set xth(about,infotime) 2500

proc xth_about_status {str} {
    global xth
    set xth(about,status) "$str"
    update idletasks
}

proc xth_about_show {btnid} {
    global xth
    if {[winfo exists $xth(gui,about)]} xth_about_hide
    xth_about_status ""
    set w $xth(gui,about)
    toplevel $w -relief raised -bg black -bd 3 -cursor $xth(gui,cursor)
    wm transient $w
    wm withdraw $w
    set sw [winfo screenwidth .]
    set sh [winfo screenheight .]
    wm overrideredirect $w 1
    label $w.image -bd 0 -relief sunken -background black -fg white -image $xth(about,image_id)
    pack $w.image -side top -expand 1 -fill both
    label $w.status -relief flat -background black -foreground white \
    	-textvariable xth(about,status) -font $xth(gui,lfont) -anchor center
    pack $w.status -side top -expand 1 -fill both
    label $w.i1 -bd 0 -relief sunken -background black -fg white -text "xtherion\n$xth(about,ver)" \
      -font $xth(gui,lfont) -anchor center
    pack $w.i1 -side top -expand 1 -fill both -pady 5
    if {$btnid} {
      button $w.close -text "Close" -font $xth(gui,lfont) -anchor center \
        -command xth_about_hide -width 5
      pack $w.close -side top -fill none -anchor center -pady 5
      focus $w.close
    }
    wm geometry $xth(gui,about) -$sw-$sh
    wm deiconify $xth(gui,about)
    update idletasks
    set x [expr {($sw - [winfo width $xth(gui,about)])/2}]
    set y [expr {($sh - [winfo height $xth(gui,about)])/2}]
    wm geometry $xth(gui,about) +$x+$y
    $w configure -bg black
    $w.image configure -image $xth(about,image_id)
    $w.i1 configure -text "xtherion $xth(about,ver)\n\u00A9 2002-2011 Stacho Mudrak"
    update idletasks
}


proc xth_about_hide {} {
  global xth
  destroy $xth(gui,about)
  focus $xth(gui,main)
}

therion/xtherion/app.tcl0000644000076400010400000004216711057012052016414 0ustar  userAdministrators##
## app.tcl --
##
##     Application module.   
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## -------------------------------------------------------------------- 


proc xth_app_move_panel {aname xx} {
  global xth
  if {$xth(app,$aname,wpsw) == 1} {
    set xth(app,$aname,relw) [expr [winfo width $xth(gui,main)] - $xx + $xth(app,$aname,wrtx)]; 
  } else {
    set xth(app,$aname,relw) [expr $xx - $xth(app,$aname,wrtx)]; 
  }
  xth_app_place $aname
}


proc xth_app_create {aname title} {
  
  global xth
  
  set aw "$xth(gui,main).$aname"
  set xth(gui,$aname) $aw
  set xth(app,list) [concat $xth(app,list) $aname]
  if {![info exists xth(app,$aname,relw)]} {
    set xth(app,$aname,relw) $xth(app,all,relw)
  }
  if {![info exists xth(app,$aname,wpsw)]} {
    set xth(app,$aname,wpsw) $xth(app,all,wpsw)
  }
  if {![info exists xth(app,$aname,wmwd)]} {
    set xth(app,$aname,wmwd) $xth(app,all,wmwd)
  }
  
  # create and configure application frames
  frame $aw
  frame $aw.af
  frame $aw.af.apps
  frame $aw.af.ctrl
  frame $aw.af.lrhn -borderwidth 2 -relief raised -cursor sb_h_double_arrow
  xth_status_bar $aname $aw.af.lrhn [mc "Drag to resize control panel."]

  frame $aw.sf
  set sbar $aw.sf.sbar
  label $sbar -text "" -anchor w -relief sunken -font $xth(gui,lfont)
  pack $sbar -side left -fill both -expand 1
  
  bind $aw.af.lrhn  "set xth(app,$aname,wwid) \[winfo width $xth(gui,main)\]; set xth(app,$aname,wrtx) \[winfo rootx $xth(gui,main)]; xth_ctrl_reshape $aname"
  bind $aw.af.lrhn  "xth_app_move_panel $aname %X"
  
  set amn $aw.menu
  menu $amn -tearoff 0
  set xth($aname,menu) $amn
  
  set fmn $amn.file
  menu $fmn -tearoff 0 
  $amn add cascade -label [mc "File"] -menu $fmn -font $xth(gui,lfont) -underline 0
  set xth($aname,menu,file) $fmn
  
  set xth($aname,title) $title
  set xth($aname,wtitle) [string tolower $title]

  pack $aw.af -expand yes -fill both
  pack $aw.sf -side bottom -fill x

  set fr $xth(app,$aname,relw)
  set minfr $xth(app,$aname,wmwd)
  set lrhny [expr [winfo height $xth(gui,main)] - 64]
  if {$fr < $minfr} {
    set fr $minfr
  } elseif {$fr > ([winfo width $xth(gui,main)] - $xth(app,$aname,wmwd))} {
    set fr [expr {([winfo width $xth(gui,main)] - $xth(app,$aname,wmwd))}]
  }
  set xth(app,$aname,relw) $fr
  set fr [expr 1.0 - $fr / double([winfo width $xth(gui,main)])]
  
  if {$xth(app,$aname,wpsw) == 1} {
    place $aw.af.apps -relx 0 -rely 0 -relheight 1 -relwidth $fr
    place $aw.af.ctrl -relx $fr -rely 0 -relheight 1 -relwidth [expr 1.0 - $fr]
    place $aw.af.lrhn -relx $fr -y $lrhny -width 8 -height 8 -anchor center
  } else {
    place $aw.af.ctrl -relx 0 -rely 0 -relheight 1 -relwidth $fr
    place $aw.af.apps -relx $fr -rely 0 -relheight 1 -relwidth [expr 1.0 - $fr]
    place $aw.af.lrhn -relx $fr -y $lrhny -width 8 -height 8 -anchor center
  }
  
  xth_ctrl_create $aname
  
}


proc xth_app_clock {} {
  global xth
  set xth(gui,clock) [clock format [clock seconds] -format "%H:%M"]
  after 15000 xth_app_clock
}


proc xth_app_place {aname} {
  
  global xth
  set aw "$xth(gui,main).$aname"

  set fr $xth(app,$aname,relw)
  set minfr $xth(app,$aname,wmwd)
  if {$fr < $minfr} {
    set fr $minfr
  } elseif {$fr > ([winfo width $xth(gui,main)] - $xth(app,$aname,wmwd))} {
    set fr [expr {([winfo width $xth(gui,main)] - $xth(app,$aname,wmwd))}]
  }
  set xth(app,$aname,relw) $fr
  set fr [expr 1.0 - $fr / double([winfo width $xth(gui,main)])]

  set lrhny [expr [winfo height $xth(gui,main)] - 64]
  
  if {$xth(app,$aname,wpsw) == 1} {
    place configure $aw.af.apps -relx 0 -relwidth $fr
    place configure $aw.af.ctrl -relx $fr -relwidth [expr 1.0 - $fr]
    place configure $aw.af.lrhn -relx $fr -y $lrhny
  } else {
    place configure $aw.af.apps -relx [expr 1.0 - $fr] -relwidth $fr
    place configure $aw.af.ctrl -relx 0 -relwidth [expr 1.0 - $fr]
    place configure $aw.af.lrhn -relx [expr 1.0 - $fr] -y $lrhny
  }

  xth_ctrl_reshape $aname   
}

proc xth_app_switch {} {

  global xth
  
  set aname $xth(app,active)
  
  if {$xth(app,$aname,wpsw) == 1} {
    set xth(app,$aname,wpsw) 0
  } else {
    set xth(app,$aname,wpsw) 1
  }
  
  xth_app_place $aname
}


proc xth_app_finish {} {

  global xth
  
  # add Window menu to each menu
  set m "$xth(gui,main).wmenu"
  menu $m -tearoff 0
  set i 0
  
  set xth(gui,menu,window) $m

  foreach aname $xth(app,list) {

    if {[llength $xth(app,list)] > 1} {
      set i [expr $i + 1]
      $m add command -label $xth($aname,title) -accelerator "F$i" \
        -command "xth_app_show $aname" -font $xth(gui,lfont)
      bind $xth(gui,main)  "xth_app_show $aname"
    }
    
    # add clock to aname
    set clockbar $xth(gui,$aname).sf.clockbar
    label $clockbar -textvariable xth(gui,clock) -anchor center \
      -relief sunken -font $xth(gui,lfont) -width 5
    pack $clockbar -side left

  }
  if {[llength $xth(app,list)] > 1} {
    $m add separator
  }
  $m add command -label [mc "Maximize"] -underline 1 \
      -command "xth_app_maximize" -font $xth(gui,lfont)
  $m add command -label [mc "Normalize"] -underline 1 \
      -command "xth_app_normalize" -font $xth(gui,lfont)
  $m add command -label [mc "Switch panels"] -underline 1 \
      -command "xth_app_switch" -font $xth(gui,lfont)
  $m add separator

  $m add command -label [mc "Toggle toolbar"] -underline 1 \
      -command "xth_tools_toggle" -font $xth(gui,lfont)
  
  menu $m.kbes -tearoff 0
  set encnames [encoding names]
  set xth(encoding_system) [encoding system]
  foreach ecd [lsort $xth(kbencodings)] {
    if {[lsearch $encnames $ecd] >= 0} {
      $m.kbes add radiobutton -label $ecd \
        -command "encoding system $ecd\nset xth(encoding_system) \[encoding system\]" -font $xth(gui,lfont) \
        -variable xth(encoding_system) -value $ecd
    }
  }
  $m add cascade -label [mc "KBD encoding"] -menu $m.kbes
  

  if {$xth(debug)} {
    set dm "$xth(gui,main).dmenu"
    menu $dm -tearoff 0
  
    $dm add command -label "Refresh procs" -underline 0 -command {
      set idir $xth(gui,initdir)
      source global.tcl
      source sbar.tcl
      source cp_procs.tcl
      source te_sdata.tcl
      source me_imgs.tcl
      source me_cmds.tcl
      source me_cmds2.tcl
      source me_ss.tcl
      source te_import.tcl
      source me_import.tcl
      source bac.tcl
      set xth(gui,initdir) $idir
    } -font $xth(gui,lfont)
    $dm add command -label "Screen dump" -underline 0 -command {
      after 5000 {xwd -out screendump -frame}
    } -font $xth(gui,lfont)
    $dm add separator
    $dm add command -label "Show command console" -underline 1 \
      -command "wm deiconify $xth(gui,dbg); wm transient $xth(gui,dbg) $xth(gui,main)" -font $xth(gui,lfont)
    $dm add command -label "Hide command console" -underline 1 \
      -command "wm withdraw $xth(gui,dbg)" -font $xth(gui,lfont)
  }

  bind $xth(gui,main) <$xth(kb_control)-Key-q> "xth_exit"
  bind $xth(gui,main) <$xth(kb_control)-Key-o> xth_app_control_o 
  bind $xth(gui,main) <$xth(kb_control)-Key-r> xth_app_control_r 
  bind $xth(gui,main) <$xth(kb_control)-Key-w> xth_app_control_w
  bind $xth(gui,main) <$xth(kb_control)-Key-s> xth_app_control_s 
  bind $xth(gui,main) <$xth(kb_control)-Key-z> xth_app_control_z
  bind $xth(gui,main) <$xth(kb_control)-Key-y> xth_app_control_y 
  bind $xth(gui,main) <$xth(kb_control)-Key-p> xth_app_control_p 
  bind $xth(gui,main) <$xth(kb_control)-Key-l> xth_app_control_l 
  bind $xth(gui,main) <$xth(kb_control)-Key-d> xth_app_control_d
  bind $xth(gui,main) <$xth(kb_control)-Key-a> xth_app_control_a
  bind $xth(gui,main)  xth_app_pgup
  bind $xth(gui,main)  xth_app_pgdn
  bind $xth(gui,main)  xth_app_shift_pgup
  bind $xth(gui,main)  xth_app_shift_pgdn
  bind $xth(gui,main)  xth_app_escape 
  bind $xth(gui,main)  xth_app_make
  foreach aname $xth(app,list) {
    $xth($aname,menu) add cascade -label [mc "Window"] -menu $m -underline 0 \
      -font $xth(gui,lfont)
    if $xth(debug) {
      $xth($aname,menu) add cascade -label "Debug" -menu $dm -underline 0 \
        -font $xth(gui,lfont)
    }
    $xth($aname,menu,file) add separator
    $xth($aname,menu,file) add command -label [mc "Compile"] -underline 0 \
      -command "xth_app_make" -font $xth(gui,lfont) \
      -accelerator "F9"
    $xth($aname,menu,file) add command -label [mc "Quit"] -underline 0 \
      -command "xth_exit" -font $xth(gui,lfont) \
      -accelerator "$xth(gui,controlk)-q"
    $xth($aname,menu) add cascade -label [mc "Help"] -menu $xth(gui,menu,help) \
      -underline 0  -font $xth(gui,lfont)
  }  

}

proc xth_app_title {aname} {
  
  global xth
  
  # set the application menu
  set ofn ""
  if {[info exists xth($aname,open_file)]} {
    set ofn $xth($aname,open_file)
  }
  if {[string length $xth($aname,wtitle)] > 0} {
    set atit " $xth($aname,wtitle)"
  } else {
    set atit ""
  }
  if {[string equal $aname me] && ([string length $xth(me,curscrap)] > 0)} {
    set sname " - $xth(me,curscrap)"
  } else {
    set sname ""
  }
  if {[string length $ofn] > 0} {
    wm title $xth(gui,main) "$xth(prj,name)$atit - $xth($aname,open_file)$sname"
  } else {
    wm title $xth(gui,main) "$xth(prj,name)$atit$sname"
  }
}

proc xth_app_control_o {} {

  global xth

  # puts $xth(app,active)  
  switch $xth(app,active) {
    te  {xth_te_open_file 1 {} 0}
    me  {xth_me_open_file 1 {} 1}
    cp  {
      set xth(cp,updcf) 0
      xth_cp_open_file {}
    }
  }
}  


proc xth_app_pgup {} {
  global xth
  switch $xth(app,active) {
    te  {}
    me  {
      $xth(gui,main).me.af.ctrl.c yview scroll -1 pages
    }
    cp  {}
  }
}

proc xth_app_pgdn {} {
  global xth
  switch $xth(app,active) {
    te  {}
    me  {
      $xth(gui,main).me.af.ctrl.c yview scroll 1 pages
    }
    cp  {}
  }
}

proc xth_app_shift_pgup {} {
  global xth
  switch $xth(app,active) {
    te  {}
    me  {
      $xth(ctrl,me,cmds).cl.l yview scroll -1 pages
    }
    cp  {}
  }
}


proc xth_app_shift_pgdn {} {
  global xth
  switch $xth(app,active) {
    te  {}
    me  {
      $xth(ctrl,me,cmds).cl.l yview scroll 1 pages
    }
    cp  {}
  }
}


proc xth_app_control_a {} {

  global xth

  # puts $xth(app,active)  
  switch $xth(app,active) {
    te  {}
    me  {
      xth_me_cmds_create_area {} 1 "" "" ""
      xth_ctrl_scroll_to me ac
      xth_ctrl_maximize me ac
    }
    cp  {}
  }
}  


proc xth_app_control_r {} {

  global xth

  # puts $xth(app,active)  
  switch $xth(app,active) {
    te  {}
    me  {
      xth_me_cmds_create_scrap {} 1 "" ""
      xth_ctrl_scroll_to me scrap
      xth_ctrl_maximize me scrap
    }
    
    cp  {}
  }
}  


proc xth_app_control_w {} {

  global xth

  # puts $xth(app,active)  
  switch $xth(app,active) {
    me  {xth_me_close_file}
    cp  {xth_cp_close_file}
  }
}  

proc xth_app_control_s {} {

  global xth

  # puts $xth(app,active)  
  switch $xth(app,active) {
    me  {xth_me_save_file 0}
  }
}  


proc xth_app_control_z {} {

  global xth

  # puts $xth(app,active)  
  switch $xth(app,active) {
    me  {xth_me_unredo_undo}
  }
  
}  

proc xth_app_control_y {} {

  global xth

  # puts $xth(app,active)  
  switch $xth(app,active) {
    me  {xth_me_unredo_redo}
  }
}  

proc xth_app_control_p {} {
  global xth
  switch $xth(app,active) {
    me  {xth_me_cmds_set_mode 1}
  }
}  


proc xth_app_control_d {} {
  global xth
  switch $xth(app,active) {
    me  {xth_me_cmds_delete {}}
  }
}  


proc xth_app_control_l {} {
  global xth
  switch $xth(app,active) {
    me  {
      xth_me_cmds_create_line {} 1 "" "" ""
      xth_ctrl_scroll_to me line
      xth_ctrl_maximize me line
      xth_ctrl_maximize me linept
    }
  }
}  


proc xth_app_escape {} {
  global xth
  switch $xth(app,active) {
    me  {xth_me_cmds_set_mode 0}
  }
}


proc xth_app_show {aname} {

  global xth
  
  if {[string equal $xth(app,active) $aname]} {
    return;
  }
  
  if {![string equal $xth(app,active) ""]} {
    pack forget $xth(gui,$xth(app,active))
  }

  set xth(app,active) $aname
  pack $xth(gui,$aname) -expand yes -fill both

  xth_app_title $aname

  $xth(gui,main) configure -menu $xth($aname,menu)
  
  regexp {([0-9]+)x([0-9]+)} [winfo geometry $xth(gui,main)] geom xsize ysize

  if {($xsize < [lindex $xth(gui,minsize) 0]) || \
      ($ysize < [lindex $xth(gui,minsize) 1])} {
    if {($xsize < [lindex $xth(gui,minsize) 0])} {
      set xsize [lindex $xth(gui,minsize) 0]
    }
    if {($ysize < [lindex $xth(gui,minsize) 1])} {
      set ysize [lindex $xth(gui,minsize) 1]
    }
    set ogeom [winfo geometry $xth(gui,main)]
    regsub $geom $ogeom [format "%sx%s" $xsize $ysize] ngeom
    wm geometry $xth(gui,main) $ngeom
  }

  update idletasks  
  xth_ctrl_reshape $aname
  
  # toolbar changes
  # disable map editor tools
  catch {
    pack forget $xth(gui,tb).edif
    pack forget $xth(gui,tb).self
  }
  switch $aname {
    cp {
    }
    me {
      # enable map editor tools
      pack $xth(gui,tb).self -side right -anchor nw
      pack $xth(gui,tb).edif -side right
    }
  }
}


proc xth_exit {} {

  global xth

  catch {
    registry set $xth(win32registry) XTherionDir $xth(gui,initdir)
  }
  
  # save all open text editor files
  if {![info exists xth(te,flist)]} {
    set xth(te,flist) {}
  }
  
  foreach cfid $xth(te,flist) {
    if {[xth_te_before_close_file $cfid yesnocancel] == 0} {
      return
    }
  }
  
  if {[info exists xth(me,fopen)]} {
    if {$xth(me,fopen) == 1} {
      if {[xth_me_before_close_file yesnocancel] == 0} {
        return
      }
    }
  }

  if {[info exists xth(cp,fopen)]} {
    xth_cp_close_file
  }
  
  destroy $xth(gui,main)
  update
  destroy .    
  
}


proc xth_app_maximize {} {
  global xth
  set swd [winfo screenwidth $xth(gui,main)]
  set shg [winfo screenheight $xth(gui,main)]
  wm geometry $xth(gui,main) [format "%dx%d+0+0" $swd $shg]
  update idletasks
  regexp {([0-9]+)x([0-9]+)\+([0-9]+)\+([0-9]+)} [winfo geometry $xth(gui,main)] geom xsize ysize xshft yshft
  wm geometry $xth(gui,main) [format "%dx%d+0+0" [expr $swd - $xshft] [expr $shg - $yshft]]
  update idletasks
}

proc xth_app_normalize {} {
  global xth
  set twd [expr int(0.8 * [winfo screenwidth $xth(gui,main)])]
  if {$twd < [lindex $xth(gui,minsize) 0]} {
    set twd [lindex $xth(gui,minsize) 0]
  }
  set thg [expr int(0.8 * [winfo screenheight $xth(gui,main)])]
  if {$thg < [lindex $xth(gui,minsize) 1]} {
    set thg [lindex $xth(gui,minsize) 1]
  }
  set tpx [expr int(0.5 * ([winfo screenwidth $xth(gui,main)] - $twd))]
  set tpy [expr int(0.5 * ([winfo screenheight $xth(gui,main)] - $thg))]
  wm geometry $xth(gui,main) [format "%dx%d+%d+%d" $twd $thg $tpx $tpy]
  update idletasks
  regexp {([0-9]+)x([0-9]+)\+([0-9]+)\+([0-9]+)} [winfo geometry $xth(gui,main)] geom xsize ysize xshft yshft
  wm geometry $xth(gui,main) [format "%dx%d+%d+%d" [expr $twd - $xshft + $tpx] \
    [expr $thg - $yshft + $tpy] $tpx $tpy]
  update idletasks
}

proc xth_app_clipboard {ev} {
  global xth
  set w [focus -lastfor $xth(gui,main)]
  if {[winfo ismapped $w]} {
    switch $ev {
      cut {
         event generate $w <>
      }
      copy {
         event generate $w <>
      }
      paste {
         event generate $w <>
      }
      undo {
         event generate $w <>
      }
      redo {
         event generate $w <>
      }
    }
  }
}


proc xth_app_check_text_undo_redo {} {
  global xth
  catch {
    set w [focus -lastfor $xth(gui,main)]
    if {[winfo ismapped $w]} {
      catch {
        $w edit separator
      }
    }
  }
  after idle {after 1000 xth_app_check_text_undo_redo}
}

if {$xth(gui,text_undo)} {
  after idle {after 1000 xth_app_check_text_undo_redo}
}


proc xth_app_make {} {
  global xth
  set oactive $xth(app,active)
  if {[string length $oactive] == 0} {
    set oactive cp
  }
  xth_te_save_all
  xth_me_save_file 0
  switch $oactive {
    cp {}
    default {
      set xth(cp,updcf) 0
      xth_app_show cp
    }
  }
  if {!$xth(cp,fopen)} {
    xth_cp_open_file {}
  }
  update idletasks
  if {[xth_cp_compile]} {
    if {[string equal $xth(gui,platform) windows]} {
      xth_app_show te
      xth_app_show me
      xth_app_show cp
    }
    if {![string equal $oactive cp]} {
      xth_app_show $oactive
    }
  }
}


proc xth_app_autosave_schedule {} {
  global xth
  if $xth(gui,auto_save) {
    set xth(gui,auto_save,id) [after 60000 xth_app_autosave]
  } else {
    catch {
      after cancel $xth(gui,auto_save,id)
    }
  }
}

proc xth_app_autosave {} {
  global xth
  switch $xth(app,active) {
    me {xth_me_save_file 0}
    te {xth_te_save_all}
  }
  xth_app_autosave_schedule
}


therion/xtherion/bac.tcl0000755000076400010400000002151710627343136016374 0ustar  userAdministrators#! /usr/bin/wish

# TODO:
# vstup hodiny : minuty

proc xth_bac_check {number from to wgt} {

  set rw 0
  if [catch {expr double($number)}] {
    set rw 1
  } else {
    set num [expr double($number)]
    if {($num < $from) || ($num > $to)} {
      set rw 1
    }
  }
  
  if {$rw} {
    $wgt configure -fg red
    return 0
  } else {
    $wgt configure -fg black
    return 1
  }
  
}

proc xth_bac_hm2h {h} {
  if {[regexp {(.+)\:(.+)} $h dum hh mm]} {
    if {[catch {
      set h [expr double($hh) + double($mm) / 60.0]
      return $h
    }]} {
      return $h
    }
  } else {
    return $h
  }
}

proc xth_bac_h2hm {h} {
  catch {
    set hh [expr int(floor($h))]
    set mm [expr int($h*60.0) % 60]
    if {$mm != 0.0} {
      set h [format "%d:%02d" $hh $mm]  
    } else {
      set h $hh
    }
  }
  return $h
}

proc xth_bac_calculate {} {

  global xth

  set xth(bac,BAC) ""
  set xth(bac,ETA) ""
  set xth(bac,MRS) ""
  set f $xth(gui,bacw)
  $f.rdle configure -bg $xth(bac,bg) -fg black

  set gender xth(bac,gender)
  set nok 0
  if [xth_bac_check $xth(bac,age) 0 1e10 $f.bdal] {set age $xth(bac,age)} else {set nok 1}
  if [xth_bac_check $xth(bac,height) 0 1e10 $f.bdhl] {set height $xth(bac,height)} else {set nok 1}
  if [xth_bac_check $xth(bac,weight) 0 1e10 $f.bdwl] {set weight $xth(bac,weight)} else {set nok 1}
  if [xth_bac_check $xth(bac,volume) 0 1e10 $f.cdvl] {set volume $xth(bac,volume)} else {set nok 1}
  if [xth_bac_check $xth(bac,level) 0 100 $f.cdll] {set level $xth(bac,level)} else {set nok 1}
  set xth(bac,time) [xth_bac_hm2h $xth(bac,time)]
  if [xth_bac_check $xth(bac,time) 0 1e10 $f.cdtl] {set elapsedTime [expr double($xth(bac,time))]} else {set nok 1}
  set xth(bac,time) [xth_bac_h2hm $xth(bac,time)]
  if $nok return

  set ALCOHOL_DENSITY 0.79
  set ingested [expr double($volume) * double($level) * 0.01 * $ALCOHOL_DENSITY]

  # in g/hr
	set METABOLIC_REMOVAL_RATE 7.0
	set remaining [expr $ingested - ($METABOLIC_REMOVAL_RATE * $elapsedTime)]
  if {$remaining < 0.0} {set remaining 0}
  
  if $xth(bac,gender) {
	  set HEIGHT_FACTOR 0.1074
    set WEIGHT_FACTOR 0.3362
    set AGE_FACTOR 0.09516
    set BODY_WATER_CONST 2.447
  } else {
    set HEIGHT_FACTOR 0.1069
    set WEIGHT_FACTOR 0.2466
    set AGE_FACTOR 0
    set BODY_WATER_CONST 2.097
  }
	set h [expr $HEIGHT_FACTOR * $height]
	set w [expr $WEIGHT_FACTOR * $weight]
	set a [expr $AGE_FACTOR * $age]
	set bodyWater [expr ($h - $a + $w + $BODY_WATER_CONST) * 1000.0]
  
	set WATER_CONTENT_OF_BLOOD 0.8157
	set BAC [expr 100.0 * ($remaining / ($bodyWater / $WATER_CONTENT_OF_BLOOD))]
	set MRS [expr 100.0 * ($METABOLIC_REMOVAL_RATE / ($bodyWater / $WATER_CONTENT_OF_BLOOD))]
  set maxRemaining [expr ($bodyWater / $WATER_CONTENT_OF_BLOOD) * 0.0002]
  if {$maxRemaining < $remaining} {
    set ETA [expr ($remaining - $maxRemaining) / $METABOLIC_REMOVAL_RATE]
  } else {
    set ETA 0.0
  }
  
  
  set xth(bac,BAC) [format "%.3f" $BAC]
  set xth(bac,ETA) [format "%d:%02d" [expr int(floor($ETA))] [expr int($ETA*60.0) % 60]]
  set xth(bac,MRS) [format "%.3f" $MRS]
  
  if {$BAC < 0.02} {
    $f.rdle configure -bg green -fg black
  } else {
    $f.rdle configure -bg red -fg white
  }

}


proc xth_bac_init {} {

  global xth
  
  set f $xth(gui,bacw)
  toplevel $f
  wm transient $f $xth(gui,main)
  wm title $f [mc "BAC calculator"]
  
  Label $f.bdl -text [mc "Biometric data"] -anchor center -font $xth(gui,lfont)
  Label $f.bdal -text [mc "age"] -anchor e -font $xth(gui,lfont)
  Entry $f.bdae -font $xth(gui,lfont) -width 5 -textvariable xth(bac,age)
  Label $f.bdau -text [mc "years"] -anchor w -font $xth(gui,lfont)
  Label $f.bdgl -text [mc "gender"] -anchor e -font $xth(gui,lfont)
  radiobutton $f.bdgm -text [mc "male"] -anchor w \
  -font $xth(gui,lfont) -variable xth(bac,gender) -value 1
  radiobutton $f.bdgf -text [mc "female"] -anchor w \
  -font $xth(gui,lfont) -variable xth(bac,gender) -value 0
  Label $f.bdhl -text [mc "height"] -anchor e -font $xth(gui,lfont)
  Entry $f.bdhe -font $xth(gui,lfont) -width 5 -textvariable xth(bac,height)
  Label $f.bdhu -text "cm" -anchor w -font $xth(gui,lfont)
  Label $f.bdwl -text [mc "weight"] -anchor e -font $xth(gui,lfont)
  Entry $f.bdwe -font $xth(gui,lfont) -width 5 -textvariable xth(bac,weight)
  Label $f.bdwu -text "kg" -anchor w -font $xth(gui,lfont)
  Separator $f.s1 -orient horizontal

  Label $f.cdl -text [mc "Consumption data"] -anchor center -font $xth(gui,lfont)
  Label $f.cdvl -text [mc "volume"] -anchor e -font $xth(gui,lfont)
  Entry $f.cdve -font $xth(gui,lfont) -width 5 -textvariable xth(bac,volume)
  Label $f.cdvu -text "ml" -anchor w -font $xth(gui,lfont)

  Label $f.cdll -text [mc "alcohol level"] -anchor e -font $xth(gui,lfont)
  Entry $f.cdle -font $xth(gui,lfont) -width 5 -textvariable xth(bac,level)
  Label $f.cdlu -text "%" -anchor w -font $xth(gui,lfont)
  
  Label $f.cdtl -text [mc "time elapsed"] -anchor e -font $xth(gui,lfont)
  Entry $f.cdte -font $xth(gui,lfont) -width 5 -textvariable xth(bac,time)
  Label $f.cdtu -text [mc "hours"] -anchor w -font $xth(gui,lfont)

  Button $f.calc -text [mc "Calculate"] -anchor center -font $xth(gui,lfont) \
  -command xth_bac_calculate

  Label $f.rdll -text [mc "BAC"] -anchor e -font $xth(gui,lfont)
  Entry $f.rdle -font $xth(gui,lfont) -width 5 -textvariable xth(bac,BAC) \
    -editable 0
  Label $f.rdlu -text "%" -anchor w -font $xth(gui,lfont)
  
  Label $f.rdtl -text [mc "ETA"] -anchor e -font $xth(gui,lfont)
  Entry $f.rdte -font $xth(gui,lfont) -width 5 -textvariable xth(bac,ETA) \
    -editable 0
  Label $f.rdtu -text [mc "hours"] -anchor w -font $xth(gui,lfont)

  Label $f.rdml -text [mc "MRR"] -anchor e -font $xth(gui,lfont)
  Entry $f.rdme -font $xth(gui,lfont) -width 5 -textvariable xth(bac,MRS) \
    -editable 0
  Label $f.rdmu -text "%/h" -anchor w -font $xth(gui,lfont)

  Button $f.cls -text [mc "Close"] -anchor center -font $xth(gui,lfont) \
  -command "destroy $f"

  
  grid columnconf $f 0 -weight 0
  grid columnconf $f 1 -weight 1
  grid columnconf $f 2 -weight 0

  grid $f.bdl -column 0 -row 0 -columnspan 3 -sticky news 
  grid $f.cdl -column 0 -row 7 -columnspan 3 -sticky news 

  grid $f.bdal -column 0 -row 1 -columnspan 1 -sticky news 
  grid $f.bdgl -column 0 -row 2 -rowspan 2 -sticky news 
  grid $f.bdhl -column 0 -row 4 -columnspan 1 -sticky news 
  grid $f.bdwl -column 0 -row 5 -columnspan 1 -sticky news 
  grid $f.cdvl -column 0 -row 8 -columnspan 1 -sticky news 
  grid $f.cdll -column 0 -row 9 -columnspan 1 -sticky news 
  grid $f.cdtl -column 0 -row 10 -columnspan 1 -sticky news 
  grid $f.rdll -column 0 -row 12 -columnspan 1 -sticky news 
  grid $f.rdtl -column 0 -row 13 -columnspan 1 -sticky news 
  grid $f.rdml -column 0 -row 14 -columnspan 1 -sticky news 

  grid $f.bdae -column 1 -row 1 -columnspan 1 -sticky news 
  grid $f.bdgf -column 1 -row 3 -columnspan 2 -sticky news 
  grid $f.bdgm -column 1 -row 2 -columnspan 2 -sticky news 
  grid $f.bdhe -column 1 -row 4 -columnspan 1 -sticky news 
  grid $f.bdwe -column 1 -row 5 -columnspan 1 -sticky news 
  grid $f.cdve -column 1 -row 8 -columnspan 1 -sticky news 
  grid $f.cdle -column 1 -row 9 -columnspan 1 -sticky news 
  grid $f.cdte -column 1 -row 10 -columnspan 1 -sticky news 
  grid $f.rdle -column 1 -row 12 -columnspan 1 -sticky news 
  grid $f.rdte -column 1 -row 13 -columnspan 1 -sticky news 
  grid $f.rdme -column 1 -row 14 -columnspan 1 -sticky news 

  grid $f.bdau -column 2 -row 1 -columnspan 1 -sticky news 
  grid $f.bdhu -column 2 -row 4 -columnspan 1 -sticky news 
  grid $f.bdwu -column 2 -row 5 -columnspan 1 -sticky news 
  grid $f.cdvu -column 2 -row 8 -columnspan 1 -sticky news 
  grid $f.cdlu -column 2 -row 9 -columnspan 1 -sticky news 
  grid $f.cdtu -column 2 -row 10 -columnspan 1 -sticky news 
  grid $f.rdlu -column 2 -row 12 -columnspan 1 -sticky news 
  grid $f.rdtu -column 2 -row 13 -columnspan 1 -sticky news 
  grid $f.rdmu -column 2 -row 14 -columnspan 1 -sticky news 

  grid $f.s1 -row 6 -column 0 -columnspan 3 -sticky news -pady 3 -padx 3
  grid $f.calc -row 11 -column 0 -columnspan 3 -sticky news -pady 3 -padx 3
  grid $f.cls -row 15 -column 0 -columnspan 3 -sticky news -pady 3 -padx 3

  set xth(bac,bg) [$f.rdle cget -bg]

  set sw [winfo screenwidth .]
  set sh [winfo screenheight .]
  update idletasks
  wm geometry $f -$sw-$sh
  set x [expr {($sw - [winfo width $f])/2}]
  set y [expr {($sh - [winfo height $f])/2}]
  wm geometry $f +$x+$y
  update idletasks
  
}


if 0 {
  package require BWidget
  source ver.tcl
  source global.tcl
  wm withdraw .
  set xth(gui,bacw) .f
  xth_bac_init
} else {
  set xth(bac,age) ""
  set xth(bac,height) ""
  set xth(bac,weight) ""
  set xth(bac,volume) ""
  set xth(bac,level) ""
  set xth(bac,time) ""
}

set xth(bac,gender) 1
set xth(bac,BAC) ""
set xth(bac,ETA) ""
set xth(bac,MRS) ""
  
if 0 {
  set xth(bac,age) "25"
  set xth(bac,height) "193"
  set xth(bac,weight) "90"
  set xth(bac,volume) "500"
  set xth(bac,level) "5.5"
  set xth(bac,time) "0"
}

therion/xtherion/console.tcl0000644000076400010400000021216411221133516017274 0ustar  userAdministrators# console.tcl --
#
#	Console package for the plugin, based on Jeff Hobbs' TkCon work.
#	Copyright 1996-1997 Jeffrey Hobbs.
#
#	Additional copyright of modifications (c) 1995-1997
#	Sun Microsystems, Inc.
#
# This software is copyrighted by the Regents of the University of
# California, Sun Microsystems, Inc., and other parties.  The following
# terms apply to all files associated with the software unless explicitly
# disclaimed in individual files.
# 
# The authors hereby grant permission to use, copy, modify, distribute,
# and license this software and its documentation for any purpose, provided
# that existing copyright notices are retained in all copies and that this
# notice is included verbatim in any distributions. No written agreement,
# license, or royalty fee is required for any of the authorized uses.
# Modifications to this software may be copyrighted by their authors
# and need not follow the licensing terms described here, provided that
# the new terms are clearly indicated on the first page of each file where
# they apply.
# 
# IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY
# FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
# ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
# DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
# 
# THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.  THIS SOFTWARE
# IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
# NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
# MODIFICATIONS.
# 
# GOVERNMENT USE: If you are acquiring this software on behalf of the
# U.S. government, the Government shall have only "Restricted Rights"
# in the software and related documentation as defined in the Federal 
# Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2).  If you
# are acquiring the software on behalf of the Department of Defense, the
# software shall be classified as "Commercial Computer Software" and the
# Government shall have only "Restricted Rights" as defined in Clause
# 252.227-7013 (c) (1) of DFARs.  Notwithstanding the foregoing, the
# authors grant the U.S. Government and others acting in its behalf
# permission to use and distribute the software in accordance with the
# terms specified in this license.
#
# SCCS: @(#) console.tcl 1.14 97/10/16 18:58:44
#
##------------------------------------------------------------------------
## PROCEDURE
##	console
##
## DESCRIPTION
##	Implements a console mega-widget
##
## ARGUMENTS
##	console  
##
## OPTIONS
##	(Any frame widget option may be used in addition to these)
##
##  -blinkcolor color			DEFAULT: yellow
##	Specifies the background blink color for brace highlighting.
##	This doubles as the highlight color for the find box.
##
##  -blinkrange TCL_BOOLEAN		DEFAULT: 1
##	When doing electric brace matching, specifies whether to blink
##	the entire range or just the matching braces.
##
##  -blinktime delay			DEFAULT: 500
##	For electric brace matching, specifies the amount of time to
##	blink the background for.
##
##  -cols ##				DEFAULT: 80
##	Specifies the startup width of the console.
##
##  -grabputs TCL_BOOLEAN		DEFAULT: 1
##	Whether this console should grab the "puts" default output
##
##  -lightbrace TCL_BOOLEAN		DEFAULT: 1
##	Specifies whether to activate electric brace matching.
##
##  -lightcmd TCL_BOOLEAN		DEFAULT: 1
##	Specifies whether to highlight recognized commands.
##
##  -proccolor color			DEFAULT: darkgreen
##	Specifies the color to highlight recognized procs.
##
##  -promptcolor color			DEFAULT: brown
##	Specifies the prompt color.
##
##  -rows ##				DEFAULT: 20
##	Specifies the startup height of the console.
##
##  -stdincolor color			DEFAULT: black
##	Specifies the color for "stdin".
##	This doubles as the console foreground color.
##
##  -stdoutcolor color			DEFAULT: blue
##	Specifies the color for "stdout".
##
##  -stderrcolor color			DEFAULT: red
##	Specifies the color for "stderr".
##
##  -scrollypos left|right		DEFAULT: right
##	Specified position of the console scrollbar relative to the text.
##
##  -showmultiple TCL_BOOLEAN		DEFAULT: 1
##	For file/proc/var completion, specifies whether to display
##	completions when multiple choices are possible.
##
##  -showmenu TCL_BOOLEAN		DEFAULT: 1
##	Specifies whether to show the menubar.
##
##  -subhistory TCL_BOOLEAN		DEFAULT: 1
##	Specifies whether to allow substitution in the history.
##
## RETURNS: the window pathname
##
## BINDINGS (these are the bindings for Console, used in the text widget)
##
## <>	
## <>	
## <>	
## <>		
## <>		 
##
## <>		
## <>		
## <>	
## <>	
## <>	
##
## <>		
## <>		
## <>	
## <>	
## <>	
## <>	
##
## <>		
## <>		
## <>		
## <>		
## <>		
## <>		
##
## METHODS
##	These are the methods that the console megawidget recognizes.
##
## configure ?option? ?value option value ...?
## cget option
##	Standard tk widget routines.
##
## load ?filename?
##	Loads the named file into the current interpreter.
##	If no file is specified, it pops up the file requester.
##
## save ?filename?
##	Saves the console buffer to the named file.
##	If no file is specified, it pops up the file requester.
##
## clear ?percentage?
##	Clears a percentage of the console buffer (1-100).  If no
##	percentage is specified, the entire buffer is cleared.
##
## error
##	Displays the last error in the interpreter in a dialog box.
##
## hide
##	Withdraws the console from the screen
##
## history ?-newline?
##	Prints out the history without numbers (basically providing a
##	list of the commands you've used).
##
## show
##	Deiconifies and raises the console
##
## subwidget widget
##	Returns the true widget path of the specified widget.  Valid
##	widgets are console, scrolly, menubar.
##
## NAMESPACE & STATE
##	The megawidget creates a global array with the classname, and a
## global array which is the name of each megawidget created.  The latter
## array is deleted when the megawidget is destroyed.
##	The procedure console and those beginning with Console are
## used.  Also, when a widget is created, commands named .$widgetname
## and Console$widgetname are created.
##
## EXAMPLE USAGE:
##
## console .con -rows 24 -showmenu false
##
##------------------------------------------------------------------------

set xth(gui,dbg) .

package require Tk

proc megawidget {CLASS} {
  upvar \#0 $CLASS class

  foreach o [array names class -*] {
    foreach {name cname val} $class($o) {
      if [string match -* $name] continue
      option add *$CLASS.$name [uplevel \#0 [list subst $val]] widgetDefault
    }
  }
  set class(class) $CLASS

  bind $CLASS  "catch {${CLASS}_destroy %W}"

  ;proc $CLASS:eval {w method args} {
    upvar \#0 $w data
    set class [winfo class $w]
    if [string match {} [set arg [info command ${class}_$method]]] {
      set arg [info command ${class}_$method*]
    }
    set num [llength $arg]
    if {$num==1} {
      return [uplevel $arg [list $w] $args]
    } elseif {$num} {
      return -code error "ambiguous option \"$method\""
    } elseif {[catch {uplevel [list $data(cmd) $method] $args} err]} {
      return -code error $err
    } else {
      return $err
    }
  }

  ;proc ${CLASS}_destroy w {
    upvar \#0 $w data
    catch { [winfo class $w]:destroy $w }
    catch { rename $w {} }
    catch { rename $data(cmd) {} }
    catch { unset data }
  }

  ;proc ${CLASS}_cget {w args} {
    if {[llength $args] != 1} {
      return -code error "wrong \# args: should be \"$w cget option\""
    }
    upvar \#0 $w data [winfo class $w] class
    if {[info exists class($args)] && [string match -* $class($args)]} {
      set args $class($args)
    }
    if [string match {} [set arg [array names data $args]]] {
      set arg [array names data ${args}*]
    }
    set num [llength $arg]
    if {$num==1} {
      return $data($arg)
    } elseif {$num} {
      return -code error "ambiguous option \"$args\""
    } elseif {[catch {$data(cmd) cget $args} err]} {
      return -code error $err
    } else {
      return $err
    }
  }

  ;proc ${CLASS}_configure {w args} {
    upvar \#0 $w data [winfo class $w] class

    set num [llength $args]
    if {$num==1} {
      if {[info exists class($args)] && [string match -* $class($args)]} {
	set args $class($args)
      }
      if [string match {} [set arg [array names data $args]]] {
	set arg [array names data ${args}*]
      }
      set num [llength $arg]
      if {$num==1} {
	return [list $arg $class($arg) $data($arg)]
      } elseif {$num} {
	return -code error "ambiguous option \"$args\""
      } elseif {[catch {$data(cmd) config $args} err]} {
	return -code error $err
      } else {
	return $err
      }
    } elseif {$num} {
      for {set i 0} {$i<$num} {incr i} {
	set key [lindex $args $i]
	if {[info exists class($key)] && [string match -* $class($key)]} {
	  set key $class($key)
	}
	if [string match {} [set arg [array names data $key]]] {
	  set arg [array names data $key*]
	}
	set val [lindex $args [incr i]]
	set len [llength $arg]
	if {$len==1} {
	  $class(class):configure $w $arg $val
	} elseif {$len} {
	  return -code error "ambiguous option \"$args\""
	} elseif {[catch {$data(cmd) configure $key $val} err]} {
	  return -code error $err
	}
      }
      return
    } else {
      set conf [$data(cmd) config]
      foreach i [array names data -*] {
	lappend conf "$i $class($i) [list $data($i)]"
      }
      return [lsort $conf]
    }
  }

  ;proc $CLASS:configure {w key value}  {
    puts "$w: $key configured to [list $value]"
  }

  return $CLASS
}

foreach pkg [info loaded {}] {
  set file [lindex $pkg 0]
  set name [lindex $pkg 1]
  if {![catch {set version [package require $name]}]} {
    if {[string match {} [package ifneeded $name $version]]} {
      package ifneeded $name $version "load [list $file $name]"
    }
  }
}
catch {unset file name version}

set Console(WWW) [info exists embed_args]

array set Console {
  -blinkcolor	{blinkColor	BlinkColor	yellow}
  -proccolor	{procColor	ProcColor	darkgreen}
  -promptcolor	{promptColor	PromptColor	brown}
  -stdincolor	{stdinColor	StdinColor	black}
  -stdoutcolor	{stdoutColor	StdoutColor	blue}
  -stderrcolor	{stderrColor	StderrColor	red}

  -blinkrange	{blinkRange	BlinkRange	1}
  -blinktime	{blinkTime	BlinkTime	500}
  -cols		{columns	Columns		80}
  -grabputs	{grabPuts	GrabPuts	1}
  -lightbrace	{lightBrace	LightBrace	1}
  -lightcmd	{lightCmd	LightCmd	1}
  -rows		{rows		Rows		20}
  -scrollypos	{scrollYPos	ScrollYPos	right}
  -showmultiple	{showMultiple	ShowMultiple	1}
  -showmenu	{showMenu	ShowMenu	1}
  -subhistory	{subhistory	SubHistory	1}

  active	{}
  version	1.2
  release	{February 1997}
  contact	{jhobbs@cs.uoregon.edu}
  docs		{http://www.sunlabs.com/tcl/plugin/}
  slavealias	{ console }
  slaveprocs	{ alias dir dump lremove puts echo unknown tcl_unknown which }
}

if [string compare unix $tcl_platform(platform)] {
  set Console(-font) {font	Font	{Courier 14}}
} else {
  set Console(-font) {font	Font	fixed}
}

if $Console(WWW) {
  set Console(-prompt) {prompt	Prompt	{\[history nextid\] % }}
} else {
  set Console(-prompt) {prompt	Prompt	\
      {(\[file tail \[pwd\]\]) \[history nextid\] % }}
}

megawidget Console
set ConsoleDialog(version) $Console(version)
megawidget ConsoleDialog

proc console_dialog {w args} {
  set CLASS ConsoleDialog
  upvar \#0 $w data $CLASS class
  toplevel $w -class $CLASS
  wm withdraw $w
  wm title $w "Console $class(version)"

  ## User definable options
  foreach o [array names class -*] {
    if [string match -* $class($o)] continue
    set data($o) [option get $w [lindex $class($o) 0] $CLASS]
  }

  ## Private variables
  array set data [list class $CLASS cmd $CLASS$w \
      console	$w.con \
      ]

  pack [console $data(console)] -fill both -exp 1

  rename $w .$w
  rename $data(console) $data(cmd)
  if {[string comp {} $args] && \
      [catch {eval ConsoleDialog_configure $w $args} err]} {
    catch {destroy $w}
    catch {unset data}
    return -code error $err
  }
  ;proc $w		args "eval $CLASS:eval [list $w] \$args"
  ## FIX TEST!!!
  ;proc $data(console)	args "eval $CLASS:eval [list $w] \$args"

  return $w
}

;proc ConsoleDialog_subwidget {w widget} {
  upvar \#0 $w data
  switch -- $widget {
    console { return $data($widget) }
    default { return -code error "No $data(class) subwidget \"$widget\"" }
  }
}

;proc ConsoleDialog:configure {w key val} {
  upvar \#0 $w data
  set truth {^(1|yes|true|on)$}
  switch -- $key {
  }
}

;proc ConsoleDialog_hide w { if [winfo exists $w] {wm withdraw $w} }

;proc ConsoleDialog_show w { if [winfo exists $w] {wm deiconify $w; raise $w} }

## console -
# ARGS:	w	- widget pathname of the Console console
#	args
# Calls:	ConsoleInitUI
# Outputs:	errors found in Console resource file
##
proc console {W args} {
    global Console
  set CLASS Console
  upvar \#0 $W data $CLASS class
  frame $W -class $CLASS

  ## User definable options
  foreach o [array names class -*] {
    if [string match -* $class($o)] continue
    set data($o) [option get $W [lindex $class($o) 0] $CLASS]
  }

  global auto_path tcl_pkgPath tcl_interactive
  set tcl_interactive 1

  ## Private variables
  array set data {
    appname {} cmdbuf {} cmdsave {} errorInfo {}
    event 1 histid 0 find {} find,case 0 find,reg 0
  }
  array set data [list class $CLASS cmd $CLASS$W \
      menubar	$W.bar \
      console	$W.text \
      scrolly	$W.sy \
      ]

  rename $W $data(cmd)
  if {[string comp {} $args] && \
      [catch {eval ${CLASS}_configure $W $args} err]} {
    catch {destroy $W}
    catch {unset data}
    return -code error $err
  }
  ;proc $W args "eval $CLASS:eval [list $W] \$args"

  if {!$Console(WWW)} {
      if {![info exists tcl_pkgPath]} {
	  set dir [file join [file dirname [info nameofexec]] lib]
	  if [string comp {} [info commands @scope]] {
	      set dir [file join $dir itcl]
	  }
	  catch {source [file join $dir pkgIndex.tcl]}
      }
      catch {tclPkgUnknown dummy-name dummy-version}
  }

  ## Menus
  frame $data(menubar) -relief raised -bd 2
  set c [text $data(console) -font $data(-font) -wrap char -setgrid 1 \
      -yscrollcomm [list $W.sy set] -foreground $data(-stdincolor) \
      -width $data(-cols) -height $data(-rows)]
  bindtags $W [list $W all]
  bindtags $c [list $c PreCon Console PostCon $W all]
  scrollbar $data(scrolly) -takefocus 0 -bd 1 -command "$c yview"

  ConsoleInitMenus $W

  if $data(-showmenu) { pack $data(menubar) -fill x }
  pack $data(scrolly) -side $data(-scrollypos) -fill y
  pack $c -fill both -expand 1

  Console:prompt $W "console display active\n"

  foreach col {prompt stdout stderr stdin proc} {
    $c tag configure $col -foreground $data(-${col}color)
  }
  $c tag configure blink -background $data(-blinkcolor)
  $c tag configure find -background $data(-blinkcolor)

  bind $c  {
    set W [winfo toplevel %W]
    scan [wm geometry $W] "%%dx%%d" $W\(-cols\) $W\(-rows\)
  }

  if {$data(-grabputs) && [lsearch $class(active) $W] == -1} {
    set class(active) [linsert $class(active) 0 $W]
  }

  return $W
}

;proc Console:configure { W key val } {
  upvar \#0 $W data
  global Console

  set truth {^(1|yes|true|on)$}
  switch -- $key {
    -blinkcolor		{
      $data(console) tag config blink -background $val
      $data(console) tag config find -background $val
    }
    -proccolor		{ $data(console) tag config proc   -foreground $val }
    -promptcolor	{ $data(console) tag config prompt -foreground $val }
    -stdincolor		{
      $data(console) tag config stdin  -foreground $val
      $data(console) config -foreground $val
    }
    -stdoutcolor	{ $data(console) tag config stdout -foreground $val }
    -stderrcolor	{ $data(console) tag config stderr -foreground $val }

    -blinktime		{
      if ![regexp {[0-9]+} $val] {
	return -code error "$key option requires an integer value"
      }
    }
    -cols		{
      if [winfo exists $data(console)] { $data(console) config -width $val }
    }
    -font		{ $data(console) config -font $val }
    -grabputs		{
      set val [regexp -nocase $truth $val]
      if $val {
	set Console(active) [linsert $Console(active) 0 $W]
      } else {
	set Console(active) [lremove -all $Console(active) $W]
      }
    }
    -lightbrace		{ set val [regexp -nocase $truth $val] }
    -lightcmd		{ set val [regexp -nocase $truth $val] }
    -prompt		{
      if [catch {uplevel \#0 [list subst $val]} err] {
	return -code error "\"$val\" threw an error:\n$err"
      }
    }
    -rows		{
      if [winfo exists $data(console)] { $data(console) config -height $val }
    }
    -scrollypos		{
      if [regexp {^(left|right)$} $val junk val] {
	if [winfo exists $data(scrolly)] {
	  pack config $data(scrolly) -side $val
	}
      } else {
	return -code error "bad option \"$val\": must be left or right"
      }
    }
    -showmultiple	{ set val [regexp -nocase $truth $val] }
    -showmenu		{
      set val [regexp -nocase $truth $val]
      if [winfo exists $data(menubar)] {
	if $val {
	  pack $data(menubar) -fill x -before $data(console) \
	      -before $data(scrolly)
	} else { pack forget $data(menubar) }
      }
    }
    -subhistory		{ set val [regexp -nocase $truth $val] }
  }
  set data($key) $val
}

;proc Console:destroy W {
  global Console
  set Console(active) [lremove $Console(active) $W]
}

## ConsoleEval - evaluates commands input into console window
## This is the first stage of the evaluating commands in the console.
## They need to be broken up into consituent commands (by ConsoleCmdSep) in
## case a multiple commands were pasted in, then each is eval'ed (by
## ConsoleEvalCmd) in turn.  Any uncompleted command will not be eval'ed.
# ARGS:	w	- console text widget
# Calls:	ConsoleCmdGet, ConsoleCmdSep, ConsoleEvalCmd
## 
;proc ConsoleEval {w} {
  ConsoleCmdSep [ConsoleCmdGet $w] cmds cmd
  $w mark set insert end-1c
  $w insert end \n
  if [llength $cmds] {
    foreach c $cmds {ConsoleEvalCmd $w $c}
    $w insert insert $cmd {}
  } elseif {[info complete $cmd] && ![regexp {[^\\]\\$} $cmd]} {
    ConsoleEvalCmd $w $cmd
  }
  $w see insert
}

## ConsoleEvalCmd - evaluates a single command, adding it to history
# ARGS:	w	- console text widget
# 	cmd	- the command to evaluate
# Calls:	Console:prompt
# Outputs:	result of command to stdout (or stderr if error occured)
# Returns:	next event number
## 
;proc ConsoleEvalCmd {w cmd} {
  ## HACK to get $W as we need it
  set W [winfo parent $w]
  upvar \#0 $W data

  $w mark set output end
  if [string comp {} $cmd] {
    set err 0
    if $data(-subhistory) {
      set ev [ConsoleEvalSlave history nextid]
      incr ev -1
      if {[string match !! $cmd]} {
	set err [catch {ConsoleEvalSlave history event $ev} cmd]
	if !$err {$w insert output $cmd\n stdin}
      } elseif {[regexp {^!(.+)$} $cmd dummy event]} {
	## Check last event because history event is broken
	set err [catch {ConsoleEvalSlave history event $ev} cmd]
	if {!$err && ![string match ${event}* $cmd]} {
	  set err [catch {ConsoleEvalSlave history event $event} cmd]
	}
	if !$err {$w insert output $cmd\n stdin}
      } elseif {[regexp {^\^([^^]*)\^([^^]*)\^?$} $cmd dummy old new]} {
	if ![set err [catch {ConsoleEvalSlave history event $ev} cmd]] {
	  regsub -all -- $old $cmd $new cmd
	  $w insert output $cmd\n stdin
	}
      }
    }
    if $err {
      $w insert output $cmd\n stderr
    } else {
      if [string match {} $data(appname)] {
	if [catch {ConsoleEvalSlave eval $cmd} res] {
	  set data(errorInfo) [ConsoleEvalSlave set errorInfo]
	  set err 1
	}
      } else {
	if [catch [list ConsoleEvalAttached $cmd] res] {
	  if [catch {ConsoleEvalAttached set errorInfo} err] {
	    set data(errorInfo) {Error attempting to retrieve errorInfo}
	  } else {
	    set data(errorInfo) $err
	  }
	  set err 1
	}
      }
      ConsoleEvalSlave history add $cmd
      if $err {
	$w insert output $res\n stderr
      } elseif {[string comp {} $res]} {
	$w insert output $res\n stdout
      }
    }
  }
  Console:prompt $W
  set data(event) [ConsoleEvalSlave history nextid]
}

## ConsoleEvalSlave - evaluates the args in the associated slave
## args should be passed to this procedure like they would be at
## the command line (not like to 'eval').
# ARGS:	args	- the command and args to evaluate
##
;proc ConsoleEvalSlave {args} {
  uplevel \#0 $args
}

## ConsoleEvalAttached
##
;proc ConsoleEvalAttached {args} {
  eval uplevel \#0 $args
}

## ConsoleCmdGet - gets the current command from the console widget
# ARGS:	w	- console text widget
# Returns:	text which compromises current command line
## 
;proc ConsoleCmdGet w {
  if [string match {} [$w tag nextrange prompt limit end]] {
    $w tag add stdin limit end-1c
    return [$w get limit end-1c]
  }
}

## ConsoleCmdSep - separates multiple commands into a list and remainder
# ARGS:	cmd	- (possible) multiple command to separate
# 	list	- varname for the list of commands that were separated.
#	rmd	- varname of any remainder (like an incomplete final command).
#		If there is only one command, it's placed in this var.
# Returns:	constituent command info in varnames specified by list & rmd.
## 
;proc ConsoleCmdSep {cmd ls rmd} {
  upvar $ls cmds $rmd tmp

  set tmp {}
  set cmds {}
  foreach cmd [split [set cmd] \n] {
    if [string comp {} $tmp] {
      append tmp \n$cmd
    } else {
      append tmp $cmd
    }
    if {[info complete $tmp] && ![regexp {[^\\]\\$} $tmp]} {
      lappend cmds $tmp
      set tmp {}
    }
  }
  if {[string comp {} [lindex $cmds end]] && [string match {} $tmp]} {
    set tmp [lindex $cmds end]
    set cmds [lreplace $cmds end end]
  }
}

## Console:prompt - displays the prompt in the console widget
# ARGS:	w	- console text widget
# Outputs:	prompt (specified in data(-prompt)) to console
## 
;proc Console:prompt {W {pre {}} {post {}} {prompt {}}} {
  upvar \#0 $W data

  set w $data(console)
  if [string comp {} $pre] { $w insert end $pre stdout }
  set i [$w index end-1c]
  if [string comp {} $data(appname)] {
    $w insert end ">$data(appname)< " prompt
  }
  if [string comp {} $prompt] {
    $w insert end $prompt prompt
  } else {
    $w insert end [ConsoleEvalSlave subst $data(-prompt)] prompt
  }
  $w mark set output $i
  $w mark set insert end
  $w mark set limit insert
  $w mark gravity limit left
  if [string comp {} $post] { $w insert end $post stdin }
  $w see end
}

## ConsoleAbout - gives about info for Console
## 
;proc ConsoleAbout W {
  global Console

  set w $W.about
  if [winfo exists $w] {
    wm deiconify $w
  } else {
    global tk_patchLevel tcl_patchLevel tcl_platform
    toplevel $w
    wm title $w "About Console v$Console(version)"
    button $w.b -text Dismiss -command [list wm withdraw $w]
    text $w.text -height 9 -bd 1 -width 60
    pack $w.b -fill x -side bottom
    pack $w.text -fill both -side left -expand 1
    $w.text tag config center -justify center
    global tcl_platform
    if {[string comp unix $tcl_platform(platform)] || [info tclversion] >= 8} {
      $w.text tag config title -justify center -font {Courier 18 bold}
    } else {
      $w.text tag config title -justify center -font *Courier*Bold*18*
    }
    $w.text insert 1.0 "About Console v$Console(version)\n\n" title \
	"Copyright 1995-1997 Jeffrey Hobbs, $Console(contact)\
	\nhttp://www.cs.uoregon.edu/~jhobbs/\
	\nRelease Date: v$Console(version), $Console(release)\
	\nDocumentation available at:\n$Console(docs)\
	\nUsing: Tcl v$tcl_patchLevel / Tk v$tk_patchLevel" center
  }
}

## ConsoleInitMenus - inits the menubar and popup for the console
# ARGS:	W	- console
## 
;proc ConsoleInitMenus {W} {
  upvar \#0 $W data

  set w    $data(menubar)
  set text $data(console)

  if [catch {menu $w.pop -tearoff 0}] {
    label $w.label -text "Menus not available in plugin mode"
    pack $w.label
    return
  }
  bind [winfo toplevel $w]  "tk_popup $w.pop %X %Y"
  bind $text  "tk_popup $w.pop %X %Y"

  pack [menubutton $w.con  -text "Console"  -un 0 -menu $w.con.m] -side left
  $w.pop add cascade -label "Console" -un 0 -menu $w.pop.con

  pack [menubutton $w.edit -text "Edit"     -un 0 -menu $w.edit.m] -side left
  $w.pop add cascade -label "Edit"    -un 0 -menu $w.pop.edit

  pack [menubutton $w.pref -text "Prefs"    -un 0 -menu $w.pref.m] -side left
  $w.pop add cascade -label "Prefs"   -un 0 -menu $w.pop.pref

  pack [menubutton $w.hist -text "History"  -un 0 -menu $w.hist.m] -side left
  $w.pop add cascade -label "History"   -un 0 -menu $w.pop.hist

  pack [menubutton $w.help -text "Help"     -un 0 -menu $w.help.m] -side right
  $w.pop add cascade -label "Help"    -un 0 -menu $w.pop.help

  ## Console Menu
  ##
  foreach m [list [menu $w.con.m -disabledfore $data(-promptcolor)] \
		 [menu $w.pop.con -disabledfore $data(-promptcolor)]] {
    $m add command -label "Console $W" -state disabled
    $m add command -label "Close Console " -un 0 \
	-acc [event info <>] -command [list destroy $W]
    $m add command -label "Clear Console " -un 1 \
	-acc [event info <>] -command [list Console_clear $W]
    $m add separator
    $m add command -label "Quit" -un 0 -acc [event info <>] \
	-command exit
  }

  ## Edit Menu
  ##
  foreach m [list [menu $w.edit.m] [menu $w.pop.edit]] {
    $m add command -label "Cut"   -un 1 \
	-acc [lindex [event info <>] 0] \
	-command [list ConsoleCut $text]
    $m add command -label "Copy"  -un 1 \
	-acc [lindex [event info <>] 0] \
	-command [list ConsoleCopy $text]
    $m add command -label "Paste" -un 0 \
	-acc [lindex [event info <>] 0] \
	-command [list ConsolePaste $text]
    $m add separator
    $m add command -label "Find"  -un 0 -acc [event info <>] \
	-command [list ConsoleFindBox $W]
  }

  ## Prefs Menu
  ##
  foreach m [list [menu $w.pref.m] [menu $w.pop.pref]] {
    $m add checkbutton -label "Brace Highlighting"    -var $W\(-lightbrace\)
    $m add checkbutton -label "Command Highlighting"  -var $W\(-lightcmd\)
    $m add checkbutton -label "Grab Puts Output"      -var $W\(-grabputs\) \
	-command "Console:configure $W -grabputs \[set $W\(-grabputs\)\]"
    $m add checkbutton -label "History Substitution"  -var $W\(-subhistory\)
    $m add checkbutton -label "Show Multiple Matches" -var $W\(-showmultiple\)
    $m add checkbutton -label "Show Menubar"	      -var $W\(-showmenu\) \
	-command "Console:configure $W -showmenu \[set $W\(-showmenu\)\]"
    $m add cascade -label Scrollbar -un 0 -menu $m.scroll

    ## Scrollbar Menu
    ##
    set m [menu $m.scroll -tearoff 0]
    $m add radio -label "Left" -var $W\(-scrollypos\) -value left \
	-command [list Console:configure $W -scrollypos left]
    $m add radio -label "Right" -var $W\(-scrollypos\) -value right \
	-command [list Console:configure $W -scrollypos right]
  }

  ## History Menu
  ##
  foreach m [list $w.hist.m $w.pop.hist] {
    menu $m -disabledfore $data(-promptcolor) \
	-postcommand [list ConsoleHistoryMenu $W $m]
  }

  ## Help Menu
  ##
  foreach m [list [menu $w.help.m] [menu $w.pop.help]] {
    $m config -disabledfore $data(-promptcolor)
    $m add command -label "About " -un 0 -acc [event info <>] \
	-command [list ConsoleAbout $W]
  }

  bind $W <>	exit
  #bind $W <>	ConsoleNew
  bind $W <>	[list destroy $W]
  bind $W <>	[list ConsoleAbout $W]
  bind $W <>	[list ConsoleHelp $W]
  bind $W <>	[list ConsoleFindBox $W]

  ## Menu items need null PostCon bindings to avoid the TagProc
  ##
  foreach ev [bind $W] {
    bind PostCon $ev {
      # empty
    }
  }
}

## ConsoleHistoryMenu - dynamically build the menu for attached interpreters
##
# ARGS:	w	- menu widget
##
;proc ConsoleHistoryMenu {W w} {
  upvar \#0 $W data

  if ![winfo exists $w] return
  set id [ConsoleEvalSlave history nextid]
  if {$data(histid)==$id} return
  set data(histid) $id
  $w delete 0 end
  set con $data(console)
  while {($id>$data(histid)-10) && \
      ![catch {ConsoleEvalSlave history event [incr id -1]} tmp]} {
    set lbl [lindex [split $tmp "\n"] 0]
    if {[string len $lbl]>32} { set lbl [string range $tmp 0 30]... }
    $w add command -label "$id: $lbl" -command "
    $con delete limit end
    $con insert limit [list $tmp]
    $con see end
    ConsoleEval $con
    "
  }
}

## ConsoleFindBox - creates minimal dialog interface to ConsoleFind
# ARGS:	w	- text widget
#	str	- optional seed string for data(find)
##
;proc ConsoleFindBox {W {str {}}} {
  upvar \#0 $W data

  set t $data(console)
  set base $W.find
  if ![winfo exists $base] {
    toplevel $base
    wm withdraw $base
    wm title $base "Console Find"

    pack [frame $base.f] -fill x -expand 1
    label $base.f.l -text "Find:"
    entry $base.f.e -textvar $W\(find\)
    pack [frame $base.opt] -fill x
    checkbutton $base.opt.c -text "Case Sensitive" -variable $W\(find,case\)
    checkbutton $base.opt.r -text "Use Regexp" -variable $W\(find,reg\)
    pack $base.f.l -side left
    pack $base.f.e $base.opt.c $base.opt.r -side left -fill both -expand 1
    pack [frame $base.sep -bd 2 -relief sunken -height 4] -fill x
    pack [frame $base.btn] -fill both
    button $base.btn.fnd -text "Find" -width 6
    button $base.btn.clr -text "Clear" -width 6
    button $base.btn.dis -text "Dismiss" -width 6
    eval pack [winfo children $base.btn] -padx 4 -pady 2 -side left -fill both

    focus $base.f.e

    bind $base.f.e  [list $base.btn.fnd invoke]
    bind $base.f.e  [list $base.btn.dis invoke]
  }
  $base.btn.fnd config -command "Console_find $W \$data(find) \
      -case \$data(find,case) -reg \$data(find,reg)"
  $base.btn.clr config -command "
  $t tag remove find 1.0 end
  set data(find) {}
  "
  $base.btn.dis config -command "
  $t tag remove find 1.0 end
  wm withdraw $base
  "
  if [string comp {} $str] {
    set data(find) $str
    $base.btn.fnd invoke
  }

  if {[string comp normal [wm state $base]]} {
    wm deiconify $base
  } else { raise $base }
  $base.f.e select range 0 end
}

## Console_find - searches in text widget for $str and highlights it
## If $str is empty, it just deletes any highlighting
# ARGS: W	- console widget
#	str	- string to search for
#	-case	TCL_BOOLEAN	whether to be case sensitive	DEFAULT: 0
#	-regexp	TCL_BOOLEAN	whether to use $str as pattern	DEFAULT: 0
##
;proc ConsoleFind {W str args} {
  upvar \#0 $W data
  set t $data(console)
  $t tag remove find 1.0 end
  set truth {^(1|yes|true|on)$}
  set opts  {}
  foreach {key val} $args {
    switch -glob -- $key {
      -c* { if [regexp -nocase $truth $val] { set case 1 } }
      -r* { if [regexp -nocase $truth $val] { lappend opts -regexp } }
      default { return -code error "Unknown option $key" }
    }
  }
  if ![info exists case] { lappend opts -nocase }
  if [string match {} $str] return
  $t mark set findmark 1.0
  while {[string comp {} [set ix [eval $t search $opts -count numc -- \
      [list $str] findmark end]]]} {
    $t tag add find $ix ${ix}+${numc}c
    $t mark set findmark ${ix}+1c
  }
  catch {$t see find.first}
  return [expr [llength [$t tag ranges find]]/2]
}

## Console:savecommand - saves a command in a buffer for later retrieval
#
##
;proc Console:savecommand {w} {
  upvar \#0 [winfo parent $w] data

  set tmp $data(cmdsave)
  set data(cmdsave) [ConsoleCmdGet $w]
  if {[string match {} $data(cmdsave)]} {
    set data(cmdsave) $tmp
  } else {
    $w delete limit end-1c
  }
  $w insert limit $tmp
  $w see end
}

## Console_load - sources a file into the console
# ARGS:	fn	- (optional) filename to source in
# Returns:	selected filename ({} if nothing was selected)
## 
;proc Console_load {W {fn {}}} {
  if {[string match {} $fn] &&
      ([catch {tk_getOpenFile} fn] || [string match {} $fn])} return
  ConsoleEvalAttached [list source $fn]
}

## Console_save - saves the console buffer to a file
## This does not eval in a slave because it's not necessary
# ARGS:	w	- console text widget
# 	fn	- (optional) filename to save to
## 
;proc Console_save {W {fn {}}} {
  upvar \#0 $W data

  if {[string match {} $fn] &&
      ([catch {tk_getSaveFile} fn] || [string match {} $fn])} return
  if [catch {open $fn w} fid] {
    return -code error "Save Error: Unable to open '$fn' for writing\n$fid"
  }
  puts $fid [$data(console) get 1.0 end-1c]
  close $fid
}

## clear - clears the buffer of the console (not the history though)
## 
;proc Console_clear {W {pcnt 100}} {
  upvar \#0 $W data

  set data(tmp) [ConsoleCmdGet $data(console)]
  if {![regexp {^[0-9]*$} $pcnt] || $pcnt < 1 || $pcnt > 100} {
    return -code error \
	"invalid percentage to clear: must be 1-100 (100 default)"
  } elseif {$pcnt == 100} {
    $data(console) delete 1.0 end
  } else {
    set tmp [expr $pcnt/100.0*[$data(console) index end]]
    $data(console) delete 1.0 "$tmp linestart"
  }
  Console:prompt $W {} $data(tmp)
}

;proc Console_error {W} {
  ## Outputs stack caused by last error.
  upvar \#0 $W data
  set info $data(errorInfo)
  if [string match {} $info] { set info {errorInfo empty} }
  catch {destroy $W.error}
  set w [toplevel $W.error]
  wm title $w "Console Last Error"
  button $w.close -text Dismiss -command [list destroy $w]
  scrollbar $w.sy -takefocus 0 -bd 1 -command [list $w.text yview]
  text $w.text -font $data(-font) -yscrollcommand [list $w.sy set]
  pack $w.close -side bottom -fill x
  pack $w.sy -side right -fill y
  pack $w.text -fill both -expand 1
  $w.text insert 1.0 $info
  $w.text config -state disabled
}

## Console_event - searches for history based on a string
## Search forward (next) if $int>0, otherwise search back (prev)
# ARGS:	W	- console widget
##
;proc Console_event {W int {str {}}} {
  upvar \#0 $W data

  if !$int return
  set w $data(console)

  set nextid [ConsoleEvalSlave history nextid]
  if [string comp {} $str] {
    ## String is not empty, do an event search
    set event $data(event)
    if {$int < 0 && $event == $nextid} { set data(cmdbuf) $str }
    set len [string len $data(cmdbuf)]
    incr len -1
    if {$int > 0} {
      ## Search history forward
      while {$event < $nextid} {
	if {[incr event] == $nextid} {
	  $w delete limit end
	  $w insert limit $data(cmdbuf)
	  break
	} elseif {![catch {ConsoleEvalSlave history event $event} res] \
	    && ![string comp $data(cmdbuf) [string range $res 0 $len]]} {
	  $w delete limit end
	  $w insert limit $res
	  break
	}
      }
      set data(event) $event
    } else {
      ## Search history reverse
      while {![catch {ConsoleEvalSlave history event [incr event -1]} res]} {
	if {![string comp $data(cmdbuf) [string range $res 0 $len]]} {
	  $w delete limit end
	  $w insert limit $res
	  set data(event) $event
	  break
	}
      }
    } 
  } else {
    ## String is empty, just get next/prev event
    if {$int > 0} {
      ## Goto next command in history
      if {$data(event) < $nextid} {
	$w delete limit end
	if {[incr data(event)] == $nextid} {
	  $w insert limit $data(cmdbuf)
	} else {
	  $w insert limit [ConsoleEvalSlave history event $data(event)]
	}
      }
    } else {
      ## Goto previous command in history
      if {$data(event) == $nextid} { set data(cmdbuf) [ConsoleCmdGet $w] }
      if [catch {ConsoleEvalSlave history event [incr data(event) -1]} res] {
	incr data(event)
      } else {
	$w delete limit end
	$w insert limit $res
      }
    }
  }
  $w mark set insert end
  $w see end
}

;proc Console_history {W args} {
  set sub {\2}
  if [string match -n* $args] { append sub "\n" }
  set h [ConsoleEvalSlave history]
  regsub -all "( *\[0-9\]+  |\t)(\[^\n\]*\n?)" $h $sub h
  return $h
}

##
## Some procedures to make up for lack of built-in shell commands
##

## puts
## This allows me to capture all stdout/stderr to the console window
# ARGS:	same as usual	
# Outputs:	the string with a color-coded text tag
## 
if ![catch {rename puts tcl_puts}] {
  ;proc puts args {
    global Console
    set w [lindex $Console(active) 0].text
    if {[llength $Console(active)] && [winfo exists $w]} {
      set len [llength $args]
      if {$len==1} {
	eval $w insert output $args stdout {\n} stdout
	$w see output
      } elseif {$len==2 && \
	  [regexp {(stdout|stderr|-nonewline)} [lindex $args 0] junk tmp]} {
	if [string comp $tmp -nonewline] {
	  eval $w insert output [lreplace $args 0 0] $tmp {\n} $tmp
	} else {
	  eval $w insert output [lreplace $args 0 0] stdout
	}
	$w see output
      } elseif {$len==3 && \
	  [regexp {(stdout|stderr)} [lreplace $args 2 2] junk tmp]} {
	if [string comp [lreplace $args 1 2] -nonewline] {
	  eval $w insert output [lrange $args 1 1] $tmp
	} else {
	  eval $w insert output [lreplace $args 0 1] $tmp
	}
	$w see output
      } else {
	global errorCode errorInfo
	if [catch "tcl_puts $args" msg] {
	  regsub tcl_puts $msg puts msg
	  regsub -all tcl_puts $errorInfo puts errorInfo
	  error $msg
	}
	return $msg
      }
      if $len update
    } else {
      global errorCode errorInfo
      if [catch "tcl_puts $args" msg] {
	regsub tcl_puts $msg puts msg
	regsub -all tcl_puts $errorInfo puts errorInfo
	error $msg
      }
      return $msg
    }
  }
}

## echo
## Relaxes the one string restriction of 'puts'
# ARGS:	any number of strings to output to stdout
##
proc echo args { puts [concat $args] }

## alias - akin to the csh alias command
## If called with no args, then it dumps out all current aliases
## If called with one arg, returns the alias of that arg (or {} if none)
# ARGS:	newcmd	- (optional) command to bind alias to
# 	args	- command and args being aliased
## 
proc alias {{newcmd {}} args} {
  if [string match {} $newcmd] {
    set res {}
    foreach a [interp aliases] {
      lappend res [list $a -> [interp alias {} $a]]
    }
    return [join $res \n]
  } elseif {[string match {} $args]} {
    interp alias {} $newcmd
  } else {
    eval interp alias [list {} $newcmd {}] $args
  }
}

## dump - outputs variables/procedure/widget info in source'able form.
## Accepts glob style pattern matching for the names
# ARGS:	type	- type of thing to dump: must be variable, procedure, widget
# OPTS: -nocomplain
#		don't complain if no vars match something
#	-filter pattern
#		specifies a glob filter pattern to be used by the variable
#		method as an array filter pattern (it filters down for
#		nested elements) and in the widget method as a config
#		option filter pattern
#	--	forcibly ends options recognition
# Returns:	the values of the requested items in a 'source'able form
## 
proc dump {type args} {
  set whine 1
  set code  ok
  while {[string match -* $args]} {
    switch -glob -- [lindex $args 0] {
      -n* { set whine 0; set args [lreplace $args 0 0] }
      -f* { set fltr [lindex $args 1]; set args [lreplace $args 0 1] }
      --  { set args [lreplace $args 0 0]; break }
      default { return -code error "unknown option \"[lindex $args 0]\"" }
    }
  }
  if {$whine && [string match {} $args]} {
    return -code error "wrong \# args: [lindex [info level 0] 0]\
	?-nocomplain? ?-filter pattern? ?--? pattern ?pattern ...?"
  }
  set res {}
  switch -glob -- $type {
    c* {
      # command
      # outpus commands by figuring out, as well as possible, what it is
      # this does not attempt to auto-load anything
      foreach arg $args {
	if [string comp {} [set cmds [info comm $arg]]] {
	  foreach cmd [lsort $cmds] {
	    if {[lsearch -exact [interp aliases] $cmd] > -1} {
	      append res "\#\# ALIAS:   $cmd => [interp alias {} $cmd]\n"
	    } elseif {[string comp {} [info procs $cmd]]} {
	      if {[catch {dump p -- $cmd} msg] && $whine} { set code error }
	      append res $msg\n
	    } else {
	      append res "\#\# COMMAND: $cmd\n"
	    }
	  }
	} elseif $whine {
	  append res "\#\# No known command $arg\n"
	  set code error
	}
      }
    }
    v* {
      # variable
      # outputs variables value(s), whether array or simple.
      if ![info exists fltr] { set fltr * }
      foreach arg $args {
	if {[string match {} [set vars [uplevel info vars [list $arg]]]]} {
	  if {[uplevel info exists $arg]} {
	    set vars $arg
	  } elseif $whine {
	    append res "\#\# No known variable $arg\n"
	    set code error
	    continue
	  } else continue
	}
	foreach var [lsort $vars] {
	  upvar $var v
	  if {[array exists v]} {
	    set nest {}
	    append res "array set $var \{\n"
	    foreach i [lsort [array names v $fltr]] {
	      upvar 0 v\($i\) __ary
	      if {[array exists __ary]} {
		append nest "\#\# NESTED ARRAY ELEMENT: $i\n"
		append nest "upvar 0 [list $var\($i\)] __ary;\
		    [dump v -filter $fltr __ary]\n"
	      } else {
		append res "    [list $i]\t[list $v($i)]\n"
	      }
	    }
	    append res "\}\n$nest"
	  } else {
	    append res [list set $var $v]\n
	  }
	}
      }
    }
    p* {
      # procedure
      foreach arg $args {
	if {[string comp {} [set ps [info proc $arg]]] ||
	    ([auto_load $arg] &&
	     [string comp {} [set ps [info proc $arg]]])} {
	  foreach p [lsort $ps] {
	    set as {}
	    foreach a [info args $p] {
	      if {[info default $p $a tmp]} {
		lappend as [list $a $tmp]
	      } else {
		lappend as $a
	      }
	    }
	    append res [list proc $p $as [info body $p]]\n
	  }
	} elseif $whine {
	  append res "\#\# No known proc $arg\n"
	  set code error
	}
      }
    }
    w* {
      # widget
      ## The user should have Tk loaded
      if [string match {} [info command winfo]] {
	return -code error "winfo not present, cannot dump widgets"
      }
      if ![info exists fltr] { set fltr .* }
      foreach arg $args {
	if [string comp {} [set ws [info command $arg]]] {
	  foreach w [lsort $ws] {
	    if [winfo exists $w] {
	      if [catch {$w configure} cfg] {
		append res "\#\# Widget $w does not support configure method"
		set code error
	      } else {
		append res "\#\# [winfo class $w] $w\n$w configure"
		foreach c $cfg {
		  if {[llength $c] != 5} continue
		  if {[regexp -nocase -- $fltr $c]} {
		    append res " \\\n\t[list [lindex $c 0] [lindex $c 4]]"
		  }
		}
		append res \n
	      }
	    }
	  }
	} elseif $whine {
	  append res "\#\# No known widget $arg\n"
	  set code error
	}
      }
    }
    default {
      return -code error "bad [lindex [info level 0] 0] option\
	\"$type\":\ must be procedure, variable, widget"
    }
  }
  return -code $code [string trimr $res \n]
}

## which - tells you where a command is found
# ARGS:	cmd	- command name
# Returns:	where command is found (internal / external / unknown)
## 
proc which cmd {
  if {[string comp {} [info commands $cmd]] ||
      ([auto_load $cmd] && [string comp {} [info commands $cmd]])} {
    if {[lsearch -exact [interp aliases] $cmd] > -1} {
      return "$cmd:\taliased to [alias $cmd]"
    } elseif {[string comp {} [info procs $cmd]]} {
      return "$cmd:\tinternal proc"
    } else {
      return "$cmd:\tinternal command"
    }
  } elseif {[string comp {} [auto_execok $cmd]]} {
    return [auto_execok $cmd]
  } else {
    return -code error "$cmd:\tunknown command"
  }
}

## dir - directory list
# ARGS:	args	- names/glob patterns of directories to list
# OPTS:	-all	- list hidden files as well (Unix dot files)
#	-long	- list in full format "permissions size date filename"
#	-full	- displays / after directories and link paths for links
# Returns:	a directory listing
## 
proc dir {args} {
  array set s {
    all 0 full 0 long 0
    0 --- 1 --x 2 -w- 3 -wx 4 r-- 5 r-x 6 rw- 7 rwx
  }
  while {[string match \-* [lindex $args 0]]} {
    set str [lindex $args 0]
    set args [lreplace $args 0 0]
    switch -glob -- $str {
      -a* {set s(all) 1} -f* {set s(full) 1}
      -l* {set s(long) 1} -- break
      default {
	return -code error \
	    "unknown option \"$str\", should be one of: -all, -full, -long"
      }
    }
  }
  set sep [string trim [file join . .] .]
  if [string match {} $args] { set args . }
  foreach arg $args {
    if {[file isdir $arg]} {
      set arg [string trimr $arg $sep]$sep
      if $s(all) {
	lappend out [list $arg [lsort [glob -nocomplain -- $arg.* $arg*]]]
      } else {
	lappend out [list $arg [lsort [glob -nocomplain -- $arg*]]]
      }
    } else {
      lappend out [list [file dirname $arg]$sep \
		       [lsort [glob -nocomplain -- $arg]]]
    }
  }
  if $s(long) {
    set old [clock scan {1 year ago}]
    set fmt "%s%9d %s %s\n"
    foreach o $out {
      set d [lindex $o 0]
      append res $d:\n
      foreach f [lindex $o 1] {
	file lstat $f st
	set f [file tail $f]
	if $s(full) {
	  switch -glob $st(type) {
	    d* { append f $sep }
	    l* { append f "@ -> [file readlink $d$sep$f]" }
	    default { if [file exec $d$sep$f] { append f * } }
	  }
	}
	if [string match file $st(type)] {
	  set mode -
	} else {
	  set mode [string index $st(type) 0]
	}
	foreach j [split [format %o [expr $st(mode)&0777]] {}] {
	  append mode $s($j)
	}
	if {$st(mtime)>$old} {
	  set cfmt {%b %d %H:%M}
	} else {
	  set cfmt {%b %d  %Y}
	}
	append res [format $fmt $mode $st(size) \
			[clock format $st(mtime) -format $cfmt] $f]
      }
      append res \n
    }
  } else {
    foreach o $out {
      set d [lindex $o 0]
      append res $d:\n
      set i 0
      foreach f [lindex $o 1] {
	if {[string len [file tail $f]] > $i} {
	  set i [string len [file tail $f]]
	}
      }
      set i [expr $i+2+$s(full)]
      ## This gets the number of cols in the Console console widget
      set j [expr 64/$i]
      set k 0
      foreach f [lindex $o 1] {
	set f [file tail $f]
	if $s(full) {
	  switch -glob [file type $d$sep$f] {
	    d* { append f $sep }
	    l* { append f @ }
	    default { if [file exec $d$sep$f] { append f * } }
	  }
	}
	append res [format "%-${i}s" $f]
	if {[incr k]%$j == 0} {set res [string trimr $res]\n}
      }
      append res \n\n
    }
  }
  return [string trimr $res]
}
interp alias {} ls {} dir

## lremove - remove items from a list
# OPTS:	-all	remove all instances of each item
# ARGS:	l	a list to remove items from
#	args	items to remove
##
proc lremove {args} {
  set all 0
  if [string match \-a* [lindex $args 0]] {
    set all 1
    set args [lreplace $args 0 0]
  }
  set l [lindex $args 0]
  eval append is [lreplace $args 0 0]
  foreach i $is {
    if {[set ix [lsearch -exact $l $i]] == -1} continue
    set l [lreplace $l $ix $ix]
    if $all {
      while {[set ix [lsearch -exact $l $i]] != -1} {
	set l [lreplace $l $ix $ix]
      }
    }
  }
  return $l
}

## Unknown changed to get output into Console window
# unknown:
# Invoked automatically whenever an unknown command is encountered.
# Works through a list of "unknown handlers" that have been registered
# to deal with unknown commands.  Extensions can integrate their own
# handlers into the "unknown" facility via "unknown_handle".
#
# If a handler exists that recognizes the command, then it will
# take care of the command action and return a valid result or a
# Tcl error.  Otherwise, it should return "-code continue" (=2)
# and responsibility for the command is passed to the next handler.
#
# Arguments:
# args -	A list whose elements are the words of the original
#		command, including the command name.

#proc unknown args {
#    global unknown_handler_order unknown_handlers errorInfo errorCode
#
#    #
#    # Be careful to save error info now, and restore it later
#    # for each handler.  Some handlers generate their own errors
#    # and disrupt handling.
#    #
#    set savedErrorCode $errorCode
#    set savedErrorInfo $errorInfo
#
#    if {![info exists unknown_handler_order] || ![info exists unknown_handlers]} {
#	set unknown_handlers(tcl) tcl_unknown
#	set unknown_handler_order tcl
#    }
#
#    foreach handler $unknown_handler_order {
#        set status [catch {uplevel $unknown_handlers($handler) $args} result]
#
#        if {$status == 1} {
#            #
#            # Strip the last five lines off the error stack (they're
#            # from the "uplevel" command).
#            #
#            set new [split $errorInfo \n]
#            set new [join [lrange $new 0 [expr [llength $new] - 6]] \n]
#            return -code $status -errorcode $errorCode \
#                -errorinfo $new $result
#
#        } elseif {$status != 4} {
#            return -code $status $result
#        }
#
#        set errorCode $savedErrorCode
#        set errorInfo $savedErrorInfo
#    }
#
#    set name [lindex $args 0]
#    return -code error "invalid command name \"$name\""
#}
#
## tcl_unknown:
## Invoked when a Tcl command is invoked that doesn't exist in the
## interpreter:
##
##	1. See if the autoload facility can locate the command in a
##	   Tcl script file.  If so, load it and execute it.
##	2. If the command was invoked interactively at top-level:
##	    (a) see if the command exists as an executable UNIX program.
##		If so, "exec" the command.
##	    (b) see if the command requests csh-like history substitution
##		in one of the common forms !!, !, or ^old^new.  If
##		so, emulate csh's history substitution.
##	    (c) see if the command is a unique abbreviation for another
##		command.  If so, invoke the command.
##
## Arguments:
## args -	A list whose elements are the words of the original
##		command, including the command name.
#
#proc tcl_unknown args {
#  global auto_noexec auto_noload env unknown_pending tcl_interactive Console
#  global errorCode errorInfo
#
#  # Save the values of errorCode and errorInfo variables, since they
#  # may get modified if caught errors occur below.  The variables will
#  # be restored just before re-executing the missing command.
#
#  set savedErrorCode $errorCode
#  set savedErrorInfo $errorInfo
#  set name [lindex $args 0]
#  if ![info exists auto_noload] {
#    #
#    # Make sure we're not trying to load the same proc twice.
#    #
#    if [info exists unknown_pending($name)] {
#      unset unknown_pending($name)
#      if {[array size unknown_pending] == 0} {
#	unset unknown_pending
#      }
#      return -code error "self-referential recursion in \"unknown\" for command \"$name\"";
#    }
#    set unknown_pending($name) pending;
#    set ret [catch {auto_load $name} msg]
#    unset unknown_pending($name);
#    if $ret {
#      return -code $ret -errorcode $errorCode \
#	  "error while autoloading \"$name\": $msg"
#    }
#    if ![array size unknown_pending] {
#      unset unknown_pending
#    }
#    if $msg {
#      set errorCode $savedErrorCode
#      set errorInfo $savedErrorInfo
#      set code [catch {uplevel $args} msg]
#      if {$code ==  1} {
#	#
#	# Strip the last five lines off the error stack (they're
#	# from the "uplevel" command).
#	#
#
#	set new [split $errorInfo \n]
#	set new [join [lrange $new 0 [expr [llength $new] - 6]] \n]
#	return -code error -errorcode $errorCode \
#	    -errorinfo $new $msg
#      } else {
#	return -code $code $msg
#      }
#    }
#  }
#  if {[info level] == 1 && [string match {} [info script]] \
#	  && [info exists tcl_interactive] && $tcl_interactive} {
#    if ![info exists auto_noexec] {
#      set new [auto_execok $name]
#      if {$new != ""} {
#	set errorCode $savedErrorCode
#	set errorInfo $savedErrorInfo
#	return [uplevel exec [list $new] [lrange $args 1 end]]
#	#return [uplevel exec >&@stdout <@stdin $new [lrange $args 1 end]]
#      }
#    }
#    set errorCode $savedErrorCode
#    set errorInfo $savedErrorInfo
#    ##
#    ## History substitution moved into ConsoleEvalCmd
#    ##
#    set cmds [info commands $name*]
#    if {[llength $cmds] == 1} {
#      return [uplevel [lreplace $args 0 0 $cmds]]
#    }
#    if {[llength $cmds]} {
#      if {$name == ""} {
#	return -code error "empty command name \"\""
#      } else {
#	return -code error \
#	    "ambiguous command name \"$name\": [lsort $cmds]"
#      }
#    }
#  }
#  return -code continue
#}

switch -glob $tcl_platform(platform) {
  win* { set META Alt }
  mac* { set META Command }
  default { set META Meta }
}

# ConsoleClipboardKeysyms --
# This procedure is invoked to identify the keys that correspond to
# the "copy", "cut", and "paste" functions for the clipboard.
#
# Arguments:
# copy -	Name of the key (keysym name plus modifiers, if any,
#		such as "Meta-y") used for the copy operation.
# cut -		Name of the key used for the cut operation.
# paste -	Name of the key used for the paste operation.

;proc ConsoleClipboardKeysyms {copy cut paste} {
  bind Console <$copy>	{ConsoleCopy %W}
  bind Console <$cut>	{ConsoleCut %W}
  bind Console <$paste>	{ConsolePaste %W}
}

;proc ConsoleCut w {
  if [string match $w [selection own -displayof $w]] {
    clipboard clear -displayof $w
    catch {
      clipboard append -displayof $w [selection get -displayof $w]
      if [$w compare sel.first >= limit] {$w delete sel.first sel.last}
    }
  }
}
;proc ConsoleCopy w {
  if [string match $w [selection own -displayof $w]] {
    clipboard clear -displayof $w
    catch {clipboard append -displayof $w [selection get -displayof $w]}
  }
}

;proc ConsolePaste w {
  if ![catch {selection get -displayof $w -selection CLIPBOARD} tmp] {
    if [$w compare insert < limit] {$w mark set insert end}
    $w insert insert $tmp
    $w see insert
    if [string match *\n* $tmp] {ConsoleEval $w}
  }
}

## Get all Text bindings into Console except Unix cut/copy/paste
## and newline insertion
foreach ev [lremove [bind Text] {  \
        \
    }] {
  bind Console $ev [bind Text $ev]
}

foreach {ev key} {
  <>		
  <>		
  <>	
  <>	
  <>	
  <>	

  <>	
  <>	
  <>		
  <>		
  <>		
  <>		

  <>		
  <>		
  <>		
  <>		
  <>	

  <>	
  <>	
  <>	
  <>	
  <>	
  <>	
} {
  event add $ev $key
  bind Console $key {}
}
catch {unset ev key}

## Redefine for Console what we need
##
event delete <> 
ConsoleClipboardKeysyms   

bind Console  {catch {ConsoleInsert %W [selection get -displayof %W]}}

bind Console  {+
catch {
  eval %W tag remove sel [%W tag nextrange prompt sel.first sel.last]
  %W mark set insert sel.first
}
}

bind Console <> {
  if [%W compare insert > limit] {Console:expand %W path}
  break
}
bind Console <> {
  if [%W compare insert > limit] {Console:expand %W proc}
}
bind Console <> {
  if [%W compare insert > limit] {Console:expand %W var}
}
bind Console <> {
  if [%W compare insert >= limit] {
    ConsoleInsert %W \t
  }
}
bind Console <> {
  ConsoleEval %W
}
bind Console  {
  if {[string comp {} [%W tag nextrange sel 1.0 end]] \
      && [%W compare sel.first >= limit]} {
    %W delete sel.first sel.last
  } elseif {[%W compare insert >= limit]} {
    %W delete insert
    %W see insert
  }
}
bind Console  {
  if {[string comp {} [%W tag nextrange sel 1.0 end]] \
      && [%W compare sel.first >= limit]} {
    %W delete sel.first sel.last
  } elseif {[%W compare insert != 1.0] && [%W compare insert > limit]} {
    %W delete insert-1c
    %W see insert
  }
}
bind Console  [bind Console ]

bind Console  {
  ConsoleInsert %W %A
}

bind Console  {
  if [%W compare {limit linestart} == {insert linestart}] {
    tkTextSetCursor %W limit
  } else {
    tkTextSetCursor %W {insert linestart}
  }
}
bind Console  {
  if [%W compare insert < limit] break
  %W delete insert
}
bind Console <> {
  if [%W compare insert < limit] break
  if [%W compare insert == {insert lineend}] {
    %W delete insert
  } else {
    %W delete insert {insert lineend}
  }
}
bind Console <> {
  Console_clear [winfo parent %W]
}
bind Console <> {
  if [%W compare {insert linestart} != {limit linestart}] {
    tkTextSetCursor %W [tkTextUpDownLine %W -1]
  } else {
    Console_event [winfo parent %W] -1
  }
}
bind Console <> {
  if [%W compare {insert linestart} != {end-1c linestart}] {
    tkTextSetCursor %W [tkTextUpDownLine %W 1]
  } else {
    Console_event [winfo parent %W] 1
  }
}
bind Console <> {
  Console_event [winfo parent %W] 1
}
bind Console <> {
  Console_event [winfo parent %W] -1
}
bind Console <> {
  Console_event [winfo parent %W] -1 [ConsoleCmdGet %W]
}
bind Console <> {
  Console_event [winfo parent %W] 1 [ConsoleCmdGet %W]
}
bind Console <> {
  ## Transpose current and previous chars
  if [%W compare insert > limit] { tkTextTranspose %W }
}
bind Console <> {
  ## Clear command line (Unix shell staple)
  %W delete limit end
}
bind Console <> {
  ## Save command buffer (swaps with current command)
  Console:savecommand %W
}
catch {bind Console    { tkTextScrollPages %W -1 }}
catch {bind Console      { tkTextScrollPages %W -1 }}
catch {bind Console  { tkTextScrollPages %W 1 }}
catch {bind Console       { tkTextScrollPages %W 1 }}
bind Console <$META-d> {
  if [%W compare insert >= limit] {
    %W delete insert {insert wordend}
  }
}
bind Console <$META-BackSpace> {
  if [%W compare {insert -1c wordstart} >= limit] {
    %W delete {insert -1c wordstart} insert
  }
}
bind Console <$META-Delete> {
  if [%W compare insert >= limit] {
    %W delete insert {insert wordend}
  }
}
bind Console  {
  if {(!$tkPriv(mouseMoved) || $tk_strictMotif) \
      && ![catch {selection get -displayof %W} tkPriv(junk)]} {
    if [%W compare @%x,%y < limit] {
      %W insert end $tkPriv(junk)
    } else {
      %W insert @%x,%y $tkPriv(junk)
    }
    if [string match *\n* $tkPriv(junk)] {ConsoleEval %W}
  }
}

##
## End Console bindings
##

##
## Bindings for doing special things based on certain keys
##
bind PostCon  {
  if [string comp \\ [%W get insert-2c]] { ConsoleMatchPair %W \( \) limit }
}
bind PostCon  {
  if [string comp \\ [%W get insert-2c]] { ConsoleMatchPair %W \[ \] limit }
}
bind PostCon  {
  if [string comp \\ [%W get insert-2c]] { ConsoleMatchPair %W \{ \} limit }
}
bind PostCon  {
  if [string comp \\ [%W get insert-2c]] { ConsoleMatchQuote %W limit }
}

bind PostCon  {
  if [string comp {} %A] { ConsoleTagProc %W }
}


## ConsoleTagProc - tags a procedure in the console if it's recognized
## This procedure is not perfect.  However, making it perfect wastes
## too much CPU time...  Also it should check the existence of a command
## in whatever is the connected slave, not the master interpreter.
##
;proc ConsoleTagProc w {
  upvar \#0 [winfo parent $w] data
  if !$data(-lightcmd) return
  set i [$w index "insert-1c wordstart"]
  set j [$w index "insert-1c wordend"]
  if {[string comp {} \
	   [ConsoleEvalAttached info command [list [$w get $i $j]]]]} {
    $w tag add proc $i $j
  } else {
    $w tag remove proc $i $j
  }
}

## ConsoleMatchPair - blinks a matching pair of characters
## c2 is assumed to be at the text index 'insert'.
## This proc is really loopy and took me an hour to figure out given
## all possible combinations with escaping except for escaped \'s.
## It doesn't take into account possible commenting... Oh well.  If
## anyone has something better, I'd like to see/use it.  This is really
## only efficient for small contexts.
# ARGS:	w	- console text widget
# 	c1	- first char of pair
# 	c2	- second char of pair
# Calls:	Console:blink
## 
;proc ConsoleMatchPair {w c1 c2 {lim 1.0}} {
  upvar \#0 [winfo parent $w] data
  if {!$data(-lightbrace) || $data(-blinktime)<100} return
  if [string comp {} [set ix [$w search -back $c1 insert $lim]]] {
    while {[string match {\\} [$w get $ix-1c]] &&
	   [string comp {} [set ix [$w search -back $c1 $ix-1c $lim]]]} {}
    set i1 insert-1c
    while {[string comp {} $ix]} {
      set i0 $ix
      set j 0
      while {[string comp {} [set i0 [$w search $c2 $i0 $i1]]]} {
	append i0 +1c
	if {[string match {\\} [$w get $i0-2c]]} continue
	incr j
      }
      if {!$j} break
      set i1 $ix
      while {$j && [string comp {} [set ix [$w search -back $c1 $ix $lim]]]} {
	if {[string match {\\} [$w get $ix-1c]]} continue
	incr j -1
      }
    }
    if [string match {} $ix] { set ix [$w index $lim] }
  } else { set ix [$w index $lim] }
  if $data(-blinkrange) {
    Console:blink $w $data(-blinktime) $ix [$w index insert]
  } else {
    Console:blink $w $data(-blinktime) $ix $ix+1c \
	[$w index insert-1c] [$w index insert]
  }
}

## ConsoleMatchQuote - blinks between matching quotes.
## Blinks just the quote if it's unmatched, otherwise blinks quoted string
## The quote to match is assumed to be at the text index 'insert'.
# ARGS:	w	- console text widget
# Calls:	Console:blink
## 
;proc ConsoleMatchQuote {w {lim 1.0}} {
  upvar \#0 [winfo parent $w] data
  if {!$data(-lightbrace) || $data(-blinktime)<100} return
  set i insert-1c
  set j 0
  while {[string comp {} [set i [$w search -back \" $i $lim]]]} {
    if {[string match {\\} [$w get $i-1c]]} continue
    if {!$j} {set i0 $i}
    incr j
  }
  if [expr $j%2] {
    if $data(-blinkrange) {
      Console:blink $w $data(-blinktime) $i0 [$w index insert]
    } else {
      Console:blink $w $data(-blinktime) $i0 $i0+1c \
	  [$w index insert-1c] [$w index insert]
    }
  } else {
    Console:blink $w $data(-blinktime) [$w index insert-1c] [$w index insert]
  }
}

## Console:blink - blinks between 2 indices for a specified duration.
# ARGS:	w	- console text widget
#	delay	- millisecs to blink for
# 	args	- indices of regions to blink
# Outputs:	blinks selected characters in $w
## 
;proc Console:blink {w delay args} {
  eval $w tag add blink $args
  after $delay eval $w tag remove blink $args
  return
}


## ConsoleInsert
## Insert a string into a text console at the point of the insertion cursor.
## If there is a selection in the text, and it covers the point of the
## insertion cursor, then delete the selection before inserting.
# ARGS:	w	- text window in which to insert the string
# 	s	- string to insert (usually just a single char)
# Outputs:	$s to text widget
## 
;proc ConsoleInsert {w s} {
  if {[string match {} $s] || [string match disabled [$w cget -state]]} {
    return
  }
  if [$w comp insert < limit] {
    $w mark set insert end
  }
  catch {
    if {[$w comp sel.first <= insert] && [$w comp sel.last >= insert]} {
      $w delete sel.first sel.last
    }
  }
  $w insert insert $s
  $w see insert
}

## Console:expand - 
# ARGS:	w	- text widget in which to expand str
# 	type	- type of expansion (path / proc / variable)
# Calls:	ConsoleExpand(Pathname|Procname|Variable)
# Outputs:	The string to match is expanded to the longest possible match.
#		If data(-showmultiple) is non-zero and the user longest match
#		equaled the string to expand, then all possible matches are
#		output to stdout.  Triggers bell if no matches are found.
# Returns:	number of matches found
## 
;proc Console:expand {w type} {
  set exp "\[^\\]\[ \t\n\r\[\{\"\$]"
  set tmp [$w search -back -regexp $exp insert-1c limit-1c]
  if [string compare {} $tmp] {append tmp +2c} else {set tmp limit}
  if [$w compare $tmp >= insert] return
  set str [$w get $tmp insert]
  switch -glob $type {
    pa* { set res [ConsoleExpandPathname $str] }
    pr* { set res [ConsoleExpandProcname $str] }
    v*  { set res [ConsoleExpandVariable $str] }
    default {set res {}}
  }
  set len [llength $res]
  if $len {
    $w delete $tmp insert
    $w insert $tmp [lindex $res 0]
    if {$len > 1} {
      upvar \#0 [winfo parent $w] data
      if {$data(-showmultiple) && ![string comp [lindex $res 0] $str]} {
	puts stdout [lreplace $res 0 0]
      }
    }
  } else bell
  return [incr len -1]
}

## ConsoleExpandPathname - expand a file pathname based on $str
## This is based on UNIX file name conventions
# ARGS:	str	- partial file pathname to expand
# Calls:	ConsoleExpandBestMatch
# Returns:	list containing longest unique match followed by all the
#		possible further matches
## 
;proc ConsoleExpandPathname str {
  set pwd [ConsoleEvalAttached pwd]
  if [catch {ConsoleEvalAttached [list cd [file dirname $str]]} err] {
    return -code error $err
  }
  if [catch {lsort [ConsoleEvalAttached glob [file tail $str]*]} m] {
    set match {}
  } else {
    if {[llength $m] > 1} {
      global tcl_platform
      if [string match windows $tcl_platform(platform)] {
	## Windows is screwy because it's case insensitive
	set tmp [ConsoleExpandBestMatch [string tolower $m] \
	    [string tolower [file tail $str]]]
      } else {
	set tmp [ConsoleExpandBestMatch $m [file tail $str]]
      }
      if [string match ?*/* $str] {
	set tmp [file dirname $str]/$tmp
      } elseif {[string match /* $str]} {
	set tmp /$tmp
      }
      regsub -all { } $tmp {\\ } tmp
      set match [linsert $m 0 $tmp]
    } else {
      ## This may look goofy, but it handles spaces in path names
      eval append match $m
      if [file isdir $match] {append match /}
      if [string match ?*/* $str] {
	set match [file dirname $str]/$match
      } elseif {[string match /* $str]} {
	set match /$match
      }
      regsub -all { } $match {\\ } match
      ## Why is this one needed and the ones below aren't!!
      set match [list $match]
    }
  }
  ConsoleEvalAttached [list cd $pwd]
  return $match
}

## ConsoleExpandProcname - expand a tcl proc name based on $str
# ARGS:	str	- partial proc name to expand
# Calls:	ConsoleExpandBestMatch
# Returns:	list containing longest unique match followed by all the
#		possible further matches
## 
;proc ConsoleExpandProcname str {
  set match [ConsoleEvalAttached info commands $str*]
  if {[llength $match] > 1} {
    regsub -all { } [ConsoleExpandBestMatch $match $str] {\\ } str
    set match [linsert $match 0 $str]
  } else {
    regsub -all { } $match {\\ } match
  }
  return $match
}

## ConsoleExpandVariable - expand a tcl variable name based on $str
# ARGS:	str	- partial tcl var name to expand
# Calls:	ConsoleExpandBestMatch
# Returns:	list containing longest unique match followed by all the
#		possible further matches
## 
;proc ConsoleExpandVariable str {
  if [regexp {([^\(]*)\((.*)} $str junk ary str] {
    ## Looks like they're trying to expand an array.
    set match [ConsoleEvalAttached array names $ary $str*]
    if {[llength $match] > 1} {
      set vars $ary\([ConsoleExpandBestMatch $match $str]
      foreach var $match {lappend vars $ary\($var\)}
      return $vars
    } else {set match $ary\($match\)}
    ## Space transformation avoided for array names.
  } else {
    set match [ConsoleEvalAttached info vars $str*]
    if {[llength $match] > 1} {
      regsub -all { } [ConsoleExpandBestMatch $match $str] {\\ } str
      set match [linsert $match 0 $str]
    } else {
      regsub -all { } $match {\\ } match
    }
  }
  return $match
}

## ConsoleExpandBestMatch2 - finds the best unique match in a list of names
## Improves upon the speed of the below proc only when $l is small
## or $e is {}.  $e is extra for compatibility with proc below.
# ARGS:	l	- list to find best unique match in
# Returns:	longest unique match in the list
## 
;proc ConsoleExpandBestMatch2 {l {e {}}} {
  set s [lindex $l 0]
  if {[llength $l]>1} {
    set i [expr [string length $s]-1]
    foreach l $l {
      while {$i>=0 && [string first $s $l]} {
	set s [string range $s 0 [incr i -1]]
      }
    }
  }
  return $s
}

## ConsoleExpandBestMatch - finds the best unique match in a list of names
## The extra $e in this argument allows us to limit the innermost loop a
## little further.  This improves speed as $l becomes large or $e becomes long.
# ARGS:	l	- list to find best unique match in
# 	e	- currently best known unique match
# Returns:	longest unique match in the list
## 
;proc ConsoleExpandBestMatch {l {e {}}} {
  set ec [lindex $l 0]
  if {[llength $l]>1} {
    set e  [string length $e]; incr e -1
    set ei [string length $ec]; incr ei -1
    foreach l $l {
      while {$ei>=$e && [string first $ec $l]} {
	set ec [string range $ec 0 [incr ei -1]]
      }
    }
  }
  return $ec
}


## ConsoleResource - re'source's this script into current console
## Meant primarily for my development of this program.  It follows
## links until the ultimate source is found.
## 
set Console(SCRIPT) [info script]
if !$Console(WWW) {
  while {[string match link [file type $Console(SCRIPT)]]} {
    set link [file readlink $Console(SCRIPT)]
    if [string match relative [file pathtype $link]] {
      set Console(SCRIPT) [file join [file dirname $Console(SCRIPT)] $link]
    } else {
      set Console(SCRIPT) $link
    }
  }
  catch {unset link}
  if [string match relative [file pathtype $Console(SCRIPT)]] {
    set Console(SCRIPT) [file join [pwd] $Console(SCRIPT)]
  }
}

;proc Console:resource {} {
  global Console
  uplevel \#0 [list source $Console(SCRIPT)]
}

## This automatically starts a console
##
catch {destroy .c}
pack [console .c] -fill both -expand 1
if {[info exists ::Name]} {
    wm title . "Console: $::Name"
    wm iconify .
    #wm geometry . +10+10
}
if {$Console(WWW)} {
    . configure -width [getattr width] -height [getattr height]
}
therion/xtherion/controls.txt0000644000076400010400000001521610720735356017546 0ustar  userAdministratorsКЛÐВИÐТУРÐЫЕ СОКРÐЩЕÐИЯ И ОПЕРÐЦИИ Ð’ РЕДÐКТОРЕ КÐРТ

LeftClick         - щелчек левой кнопкой мыши
Double LeftClick  - двойной щелчек левой кнопкой мыши
RightClick        - щелчек правой кнопкой мыши
Double RightClick - двойной щелчек правой кнопкой мыши
drag              - перетаÑкивание: ÑƒÐ´ÐµÑ€Ð¶Ð¸Ð²Ð°Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½ÑƒÑŽ кнопку мыши
                    (и/или клавиатуры) перемещайте мышь

Общее
 * Ctrl+Z = отмена дейÑÑ‚Ð²Ð¸Ñ (undo)
 * Ctrl+Y = вернуть отмененное дейÑтвие (redo)
 * F9 = компилÑÑ†Ð¸Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ проекта
 * Ð”Ð»Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð° в ÑпиÑках:
    - перемеÑтитеÑÑŒ к нужному Ñлементу ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ "Tab";
    - выбирайте нужный Ñлемент ÑпиÑка (он подчеркнут) Ñтрелками;
    - подтвердите выбор нажатием "Enter"

ОблаÑть риÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ фоновые изображениÑ
 * RightClick + drag = Ñкроллинг облаÑти риÑованиÑ
 * Double RightClick на изображении + drag = перемещение изображениÑ

Ð’Ñтавка Ñкрапа
 * Ðажмите "Ctrl-r" или "ДейÑтвие" > "Ð’Ñтавить Ñкрап" на панели "Команды в файле"
 * новый Ñкрап вÑтавлÑетÑÑ Ð² поÑле текущего

Ð’Ñтавка точки
 * Ctrl+P = переключение в режим `вÑтавка точки'
 * LeftClick = вÑтавка точки в позицию курÑора
 * Ctrl+LeftClick = вÑтавка точки близко Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¹ точкой (без Ctrl
   точка "притÑгиваетÑÑ" к уже ÑущеÑтвующей точке)
 * Esc = выйти из режима `вÑтавка точки'

Редактирование точки
 * LeftClick + drag = перемещает точку
 * Ctrl+LeftClick + drag = перемещение точки близко от ÑущеÑтвующей
   точки (без Ctrl точка "притÑгиваетÑÑ" к уже ÑущеÑтвующей точке)
 * LeftClick + drag над Ñтрелкой = изменение ориентации точки
   (Ð¾Ñ€Ð¸ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° быть включена на панели "Точка")

Ð’Ñтавка линии
 * Crtl+L = Ð’Ñтавка новой линии и переход в режим `вÑтавка точек линии'
 * LeftClick = вÑтавка точки линии в позицию курÑора (без точек ÑглаживаниÑ)
 * Ctrl+LeftClick = вÑтавка точки линии близко от ÑущеÑтвующей (без Ctrl точка
   "притÑгиваетÑÑ" к уже ÑущеÑтвующей точке)
 * LeftClick + drag = вÑтавка точки линии (Ñ Ñ‚Ð¾Ñ‡ÐºÐ°Ð¼Ð¸ ÑглаживаниÑ)
 * ÑƒÐ´ÐµÑ€Ð¶Ð¸Ð²Ð°Ñ Ctrl во Ð²Ñ€ÐµÐ¼Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ñ‚Ð¾Ñ‡ÐºÐ¸ ÑÐ³Ð»Ð°Ð¶Ð¸Ð²Ð°Ð½Ð¸Ñ = перемещает только
   данную точку ÑглаживаниÑ
 * LeftClick + drag на точке ÑÐ³Ð»Ð°Ð¶Ð¸Ð²Ð°Ð½Ð¸Ñ = изменение ее позиции
 * RightClick на одной из предыдущих точек текущей линии в режиме `вÑтавка точек линии'
   = выбрать ÑущеÑтвующую точку, полезно Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ‚Ð¾Ñ‡ÐµÐº ÑглаживаниÑ
 * Esc или LeftClick на поÑледней точке = закончить вÑтавку точек линии
 * LeftClick на первой точке линии = замкнуть начало линии на конец и выйти из режима
   вÑтавки

Редактирование линии
 * LeftClick + drag = перемещение точки линии
 * Ctrl+LeftClick + drag = перемещение точки линии близко от ÑущеÑтвующей
   (без Ctrl точка "притÑгиваетÑÑ" к уже ÑущеÑтвующей точке)
 * LeftClick на точке ÑÐ³Ð»Ð°Ð¶Ð¸Ð²Ð°Ð½Ð¸Ñ + drag = перемещение точки ÑглаживаниÑ

Добавление точки к ÑущеÑтвующей линии
 * выбрать точку перед которой вы хотите вÑтавить новую точку;
    - перейдите в режим вÑтавки точки (панель "ЛиниÑ")
    - вÑтавьте точки (Ñм. Ð’Ñтавка линии);
    - Esc или LeftClick на точке Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¹ вы начинали = выход из режима вÑтавки

Удаление точки линии
 * выбрать точку линии которую нужно удалить;
    нажмите "Править линию" > "Удалить точку" на панели "ЛиниÑ"

Зазделение линии
 * выбрать точку в которой вы хотите разделить линию;
    нажмите "Править линию" > "Разделить линию" на панели "ЛиниÑ"

Ð’Ñтавка облаÑти
 * "Ctrl-a" или на панели "Команды в файле" нажмите "ДейÑтвие" > "Ð’Ñтавить облаÑть"
   чтобы переключитÑÑ Ð² режим "выбор границ облаÑти"
 * LeftClick на линии = Ð»Ð¸Ð½Ð¸Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÑетÑÑ Ðº ÑпиÑку границ облаÑти
 * Esc Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾ чтобы закончить выбор границ облаÑти

Редактировать облаÑть
 * Выбрать облаÑть Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ
 * неажать "Ð’Ñтавка" на панели "ОблаÑть" Ð´Ð»Ñ Ð²Ñтавки граничных линий в ÑпиÑок
   линий поÑле выбраной линии
 * нажать "Ð’Ñтавить по ИД" Ð´Ð»Ñ Ð²Ñтавки линии Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¼ идентификатором
 * нажать "Удалить" Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð¾Ð¹ линии из ÑпиÑка гранци облаÑти

Выбор ÑущеÑтвующего объекта
 * LeftClick = выбор верхнего объекта
 * RightClick = перебор объектов закрытых верхним объектом (например полезно, когда
   неÑколько точек раÑположены в одной позиции друг над другом)
therion/xtherion/cp.tcl0000644000076400010400000003613011037130406016231 0ustar  userAdministrators##
## cp.tcl --
##
##     The compiler module.   
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------


xth_app_create cp [mc "Compiler"]
xth_ctrl_add cp stp [mc "Settings"]
xth_ctrl_add cp dat [mc "Survey structure"]
xth_ctrl_add cp info [mc "Survey info"]
xth_ctrl_add cp ms [mc "Map structure"]
set xth(cp,preview) 0
set xth(cp,preview,acroread) 0
set xth(cp,preview,acroreadpath) {}
set xth(cp,preview,xpdf) 0
set xth(cp,preview,xpdfpath) {}
set xth(th_exit_number_last) 0
switch $xth(gui,platform) {
  windows {
    if {[string length $xth(gui,appctrlcmd)] > 0} {
      set xth(cp,preview) 1
      set xth(cp,preview,acroread) 1
    }
  }
  unix {
    set xth(cp,preview) 1
    set xth(cp,preview,xpdf) 1
  }
}
if {$xth(cp,preview)} {
  xth_ctrl_add cp pview [mc "Preview"]
}
xth_ctrl_finish cp



# create config editor
set xth(cp,editor) $xth(gui,cp).af.apps.ed
frame $xth(cp,editor)
set txb $xth(cp,editor)
text $txb.txt -wrap none -font $xth(gui,efont) \
  -bg $xth(gui,ecolorbg) \
  -fg $xth(gui,ecolorfg) -insertbackground $xth(gui,ecolorfg) \
  -relief sunken -state disabled \
  -selectbackground $xth(gui,ecolorselbg) \
  -selectforeground $xth(gui,ecolorselfg) \
  -selectborderwidth 0 \
  -yscrollcommand "$txb.sv set" \
  -xscrollcommand "$txb.sh set" 
if {$xth(gui,text_undo)} {
    $txb.txt configure -undo 1 -maxundo -1
}
scrollbar $txb.sv -orient vert  -command "$txb.txt yview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
scrollbar $txb.sh -orient horiz  -command "$txb.txt xview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
grid columnconf $txb 0 -weight 1
grid rowconf $txb 0 -weight 1
grid $txb.txt -column 0 -row 0 -sticky news
grid $txb.sv -column 1 -row 0 -sticky news
grid $txb.sh -column 0 -row 1 -sticky news
bind $txb.txt <$xth(kb_control)-Key-x> "tk_textCut $txb.txt"
bind $txb.txt <$xth(kb_control)-Key-c> "tk_textCopy $txb.txt"
bind $txb.txt <$xth(kb_control)-Key-v> "tk_textPaste $txb.txt"
bind $txb.txt <$xth(kb_control)-Key-z> "catch {$txb.txt edit undo}"
bind $txb.txt <$xth(kb_control)-Key-y> "catch {$txb.txt edit redo}"

if {$xth(gui,bindinsdel)} {
  bind $txb.txt  {
    %W delete insert
    %W see insert
  }
  bind $txb.txt  "tk_textCut $txb.txt"
  bind $txb.txt <$xth(kb_control)-Key-Insert> "tk_textCopy $txb.txt"
  bind $txb.txt  "tk_textPaste $txb.txt"
#  catch {
#    bind $txb.txt  "tk_textCut $txb.txt"
#    bind $txb.txt <$xth(kb_control)-Key-KP_Insert> "tk_textCopy $txb.txt"
#    bind $txb.txt  "tk_textPaste $txb.txt"
#  }
}

# nechame tab, return originalny
if {[info exists xth(gui,te)]} {
#  bind $txb.txt <$xth(kb_control)-Key-a> "xth_te_text_select_all %W"
#  bind $txb.txt <$xth(kb_control)-Key-i> "xth_te_text_auto_indent %W"
  bind $txb.txt  $xth(te,bind,text_tab)
  bind $txb.txt  $xth(te,bind,text_return)
} else {
  bind $txb.txt  $xth(gui,bind,text_tab)
  bind $txb.txt  $xth(gui,bind,text_return)
}


# create log window
set xth(cp,log) $xth(gui,cp).af.apps.log
frame $xth(cp,log)
set txb $xth(cp,log)
text $txb.txt -wrap none -font $xth(gui,efont) \
  -bg $xth(gui,ecolorbg) \
  -fg $xth(gui,ecolorfg) -insertbackground $xth(gui,ecolorfg) \
  -relief sunken -state disabled \
  -selectbackground $xth(gui,ecolorselbg) \
  -selectforeground $xth(gui,ecolorselfg) \
  -selectborderwidth 0 \
  -yscrollcommand "$txb.sv set" \
  -xscrollcommand "$txb.sh set" 
scrollbar $txb.sv -orient vert  -command "$txb.txt yview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
scrollbar $txb.sh -orient horiz  -command "$txb.txt xview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
grid columnconf $txb 0 -weight 1
grid rowconf $txb 0 -weight 1
grid $txb.txt -column 0 -row 0 -sticky news
grid $txb.sv -column 1 -row 0 -sticky news
grid $txb.sh -column 0 -row 1 -sticky news
bind $txb.txt <$xth(kb_control)-Key-x> "tk_textCut $txb.txt"
bind $txb.txt <$xth(kb_control)-Key-c> "tk_textCopy $txb.txt"
bind $txb.txt <$xth(kb_control)-Key-v> "tk_textPaste $txb.txt"

if {$xth(gui,bindinsdel)} {
  bind $txb.txt  {
    %W delete insert
    %W see insert
  }
  bind $txb.txt  "tk_textCut $txb.txt"
  bind $txb.txt <$xth(kb_control)-Key-Insert> "tk_textCopy $txb.txt"
  bind $txb.txt  "tk_textPaste $txb.txt"
#  catch {
#    bind $txb.txt  "tk_textCut $txb.txt"
#    bind $txb.txt <$xth(kb_control)-Key-KP_Insert> "tk_textCopy $txb.txt"
#    bind $txb.txt  "tk_textPaste $txb.txt"
#  }
}

xth_status_bar cp $txb.txt "Therion log file."


# pack editor and log widow
grid columnconf $xth(gui,cp).af.apps 0 -weight 1
grid rowconf $xth(gui,cp).af.apps 0 -weight 1
grid rowconf $xth(gui,cp).af.apps 1 -weight 1
grid $xth(cp,editor) -column 0 -row 0 -sticky news
grid $xth(cp,log) -column 0 -row 1 -sticky news

# create setup control
Label $xth(ctrl,cp,stp).wl -text [mc "Working directory"] -anchor w -font $xth(gui,lfont) -state disabled
xth_status_bar cp $xth(ctrl,cp,stp).wl [mc "Working directory path."]
Entry $xth(ctrl,cp,stp).we -font $xth(gui,lfont) -state disabled \
  -editable off -textvariable xth(cp,fpath)
xth_status_bar cp $xth(ctrl,cp,stp).we [mc "Working directory path."]

Label $xth(ctrl,cp,stp).fl -text [mc "Configuration file"] -anchor w -font $xth(gui,lfont) -state disabled
xth_status_bar cp $xth(ctrl,cp,stp).fl [mc "Configuration file name."]
Entry $xth(ctrl,cp,stp).fe -font $xth(gui,lfont) -state disabled \
  -editable off -textvariable xth(cp,fname)
xth_status_bar cp $xth(ctrl,cp,stp).fe [mc "Configuration file name."]

Label $xth(ctrl,cp,stp).optl -text [mc "Command line options"] -anchor w -font $xth(gui,lfont) -state disabled
xth_status_bar cp $xth(ctrl,cp,stp).optl [mc "Therion command line options."]
Entry $xth(ctrl,cp,stp).opte -font $xth(gui,lfont) -state disabled \
  -textvariable xth(cp,opts)
xth_status_bar cp $xth(ctrl,cp,stp).opte [mc "Therion command line options."]

Button $xth(ctrl,cp,stp).go -text [mc "Compile"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command {xth_cp_compile} -width 4
Label $xth(ctrl,cp,stp).gores -text "" -anchor center -font $xth(gui,lfont) \
  -state disabled -width 4 -relief sunken
set xth(cp,resfg) [$xth(ctrl,cp,stp).gores cget -fg]
set xth(cp,resbg) [$xth(ctrl,cp,stp).gores cget -bg]
xth_status_bar cp $xth(ctrl,cp,stp).go [mc "Run therion."]

grid columnconf $xth(ctrl,cp,stp) 0 -weight 1
grid columnconf $xth(ctrl,cp,stp) 1 -weight 1
grid $xth(ctrl,cp,stp).wl -row 0 -column 0 -columnspan 2 -sticky news
grid $xth(ctrl,cp,stp).we -row 1 -column 0 -columnspan 2 -sticky news
grid $xth(ctrl,cp,stp).fl -row 2 -column 0 -columnspan 2 -sticky news
grid $xth(ctrl,cp,stp).fe -row 3 -column 0 -columnspan 2 -sticky news
grid $xth(ctrl,cp,stp).optl -row 4 -column 0 -columnspan 2 -sticky news
grid $xth(ctrl,cp,stp).opte -row 5 -column 0 -columnspan 2 -sticky news
grid $xth(ctrl,cp,stp).go -row 6 -column 0 -sticky news
grid $xth(ctrl,cp,stp).gores -row 6 -column 1 -sticky ew

# create preview controls
if {$xth(cp,preview)} {
  set crow 0
  grid columnconf $xth(ctrl,cp,pview) 0 -weight 1
  grid columnconf $xth(ctrl,cp,pview) 1 -weight 1
  if {$xth(cp,preview,xpdf)} {
    Label $xth(ctrl,cp,pview).xpdfl -text [mc "Xpdf"] -anchor w -font $xth(gui,lfont) -state normal
    xth_status_bar cp $xth(ctrl,cp,pview).xpdfl [mc "PDF file path."]
    Entry $xth(ctrl,cp,pview).xpdfe -font $xth(gui,lfont) -state normal \
      -editable on -textvariable xth(cp,preview,xpdfpath)
    xth_status_bar cp $xth(ctrl,cp,pview).xpdfe [mc "PDF file path."]
    grid $xth(ctrl,cp,pview).xpdfl -row $crow -column 0 -columnspan 2 -sticky news
    incr crow
    grid $xth(ctrl,cp,pview).xpdfe -row $crow -column 0 -columnspan 2 -sticky news
    incr crow
  }
  if {$xth(cp,preview,acroread)} {
    Label $xth(ctrl,cp,pview).acroreadl -text [mc "Acrobat Reader"] -anchor w -font $xth(gui,lfont) -state normal
    xth_status_bar cp $xth(ctrl,cp,pview).acroreadl [mc "PDF file path."]
    Entry $xth(ctrl,cp,pview).acroreade -font $xth(gui,lfont) -state normal \
      -editable on -textvariable xth(cp,preview,acroreadpath)
    xth_status_bar cp $xth(ctrl,cp,pview).acroreade [mc "PDF file path."]
    grid $xth(ctrl,cp,pview).acroreadl -row $crow -column 0 -columnspan 2 -sticky news
    incr crow
    grid $xth(ctrl,cp,pview).acroreade -row $crow -column 0 -columnspan 2 -sticky news
    incr crow
  }
}


# create objects control
set clbox $xth(ctrl,cp,dat)
#### set sw [ScrolledWindow $clbox.sw -relief sunken -borderwidth 2]
scrollbar $clbox.sv -orient vert  -command "$clbox.t yview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
scrollbar $clbox.sh -orient horiz  -command "$clbox.t xview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
###set tr [Tree $sw.t -relief flat -height 16 -selectcommand xth_cp_data_tree_select]
set tr [Tree $clbox.t -relief flat -height 16 -selectcommand xth_cp_data_tree_select \
  -yscrollcommand "$clbox.sv set" \
  -xscrollcommand "$clbox.sh set"]
set xth(ctrl,cp,datrestore) {}
###$sw setwidget $tr
$tr bindText  xth_cp_data_tree_enter
$tr bindText  xth_cp_data_tree_leave
$tr bindText  xth_cp_data_tree_double_click
$tr bindImage  xth_cp_data_tree_enter
$tr bindImage  xth_cp_data_tree_leave
$tr bindImage  xth_cp_data_tree_double_click
### pack $sw -side top -expand yes -fill both

grid columnconf $clbox 0 -weight 1
grid rowconf $clbox 0 -weight 1
grid $tr -column 0 -row 0 -sticky news
grid $clbox.sv -column 1 -row 0 -sticky news
grid $clbox.sh -column 0 -row 1 -sticky news


# init survey info
set txb $xth(ctrl,cp,info)
text $txb.txt -height 4 -wrap none -font $xth(gui,efont) \
  -bg $xth(gui,ecolorbg) \
  -fg $xth(gui,ecolorfg) -insertbackground $xth(gui,ecolorfg) \
  -relief sunken -state disabled \
  -selectbackground $xth(gui,ecolorselbg) \
  -selectforeground $xth(gui,ecolorselfg) \
  -selectborderwidth 0 \
  -yscrollcommand "$txb.sv set" \
  -xscrollcommand "$txb.sh set" 
scrollbar $txb.sv -orient vert  -command "$txb.txt yview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
scrollbar $txb.sh -orient horiz  -command "$txb.txt xview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
grid columnconf $txb 0 -weight 1
grid rowconf $txb 0 -weight 1
grid $txb.txt -column 0 -row 0 -sticky news
grid $txb.sv -column 1 -row 0 -sticky news
grid $txb.sh -column 0 -row 1 -sticky news
xth_status_bar me $txb.txt [mc "Survey informations."]
bind $txb.txt <$xth(kb_control)-Key-x> "tk_textCut $txb.txt"
bind $txb.txt <$xth(kb_control)-Key-c> "tk_textCopy $txb.txt"
bind $txb.txt <$xth(kb_control)-Key-v> "tk_textPaste $txb.txt"

if {$xth(gui,bindinsdel)} {
  bind $txb.txt  {
    %W delete insert
    %W see insert
  }
  bind $txb.txt  "tk_textCut $txb.txt"
  bind $txb.txt <$xth(kb_control)-Key-Insert> "tk_textCopy $txb.txt"
  bind $txb.txt  "tk_textPaste $txb.txt"
#  catch {
#    bind $txb.txt  "tk_textCut $txb.txt"
#    bind $txb.txt <$xth(kb_control)-Key-KP_Insert> "tk_textCopy $txb.txt"
#    bind $txb.txt  "tk_textPaste $txb.txt"
#  }
}



# create map structure control
set clbox $xth(ctrl,cp,ms)
###set sw [ScrolledWindow $clbox.sw -relief sunken -borderwidth 2]
scrollbar $clbox.sv -orient vert  -command "$clbox.t yview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
scrollbar $clbox.sh -orient horiz  -command "$clbox.t xview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
set tr [Tree $clbox.t -relief flat -height 16 \
  -yscrollcommand "$clbox.sv set" \
  -xscrollcommand "$clbox.sh set"]
set xth(ctrl,cp,msrestore) {}
###$sw setwidget $tr
$tr bindText  xth_cp_map_tree_enter
$tr bindText  xth_cp_map_tree_leave
$tr bindText  xth_cp_map_tree_double_click
$tr bindImage  xth_cp_map_tree_enter
$tr bindImage  xth_cp_map_tree_leave
$tr bindImage  xth_cp_map_tree_double_click
###pack $sw -side top -expand yes -fill both
grid columnconf $clbox 0 -weight 1
grid rowconf $clbox 0 -weight 1
grid $tr -column 0 -row 0 -sticky news
grid $clbox.sv -column 1 -row 0 -sticky news
grid $clbox.sh -column 0 -row 1 -sticky news






# load menu
$xth(cp,menu,file) add command -label [mc "New"] -command {} \
  -font $xth(gui,lfont) -underline 0 -state normal -command {xth_cp_new_file}
$xth(cp,menu,file) add command -label [mc "Open"] -underline 0 \
  -accelerator "$xth(gui,controlk)-o" -state normal \
  -font $xth(gui,lfont) -command {
    xth_cp_open_file {}
  }
$xth(cp,menu,file) add command -label [mc "Save as"] -underline 5 \
  -state disabled -font $xth(gui,lfont) -command xth_cp_save_as
$xth(cp,menu,file) add command -label [mc "Close"] -underline 0 \
  -accelerator "$xth(gui,controlk)-w"  -state disabled \
  -font $xth(gui,lfont) \
  -command xth_cp_close_file

set xth(cp,menu,edit) $xth(cp,menu).edit
menu $xth(cp,menu,edit) -tearoff 0
$xth(cp,menu) add cascade -label [mc "Edit"] -state disabled \
  -font $xth(gui,lfont) -menu $xth(cp,menu,edit) -underline 0
if {$xth(gui,text_undo)} {
  $xth(cp,menu,edit) add command -label [mc "Undo"] -font $xth(gui,lfont) \
    -accelerator "$xth(gui,controlk)-z" -command "xth_app_clipboard undo"
  $xth(cp,menu,edit) add command -label [mc "Redo"] -font $xth(gui,lfont) \
    -accelerator "$xth(gui,controlk)-y" -command "xth_app_clipboard redo"
  $xth(cp,menu,edit) add separator
}
$xth(cp,menu,edit) add command -label [mc "Cut"] -font $xth(gui,lfont) \
  -accelerator "$xth(gui,controlk)-x" -command "xth_app_clipboard cut"
$xth(cp,menu,edit) add command -label [mc "Copy"] -font $xth(gui,lfont) \
  -accelerator "$xth(gui,controlk)-c" -command "xth_app_clipboard copy"
$xth(cp,menu,edit) add command -label [mc "Paste"] -font $xth(gui,lfont) \
  -accelerator "$xth(gui,controlk)-v" -command "xth_app_clipboard paste"

set xth(cp,fopen) 0
set xth(cp,cursor) 1.0
set xth(cp,fname) ""
set xth(cp,opts) ""
set xth(cp,fpath) ""

xth_ctrl_minimize cp dat
xth_ctrl_minimize cp info
xth_ctrl_minimize cp ms
if {$xth(cp,preview)} {
  xth_ctrl_minimize cp pview
}


set xth(ctrl,cp,datlist) {}
set xth(ctrl,cp,maplist) {}

xth_status_bar_status cp [mc "User interface is not active. To activate it, open existing file or create new one."]

therion/xtherion/cp_procs.tcl0000644000076400010400000005345412255644204017460 0ustar  userAdministrators##
## cp_procs.tcl --
##
##     Compiler procedures.   
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------


xth_about_status [mc "loading compiler..."]


proc xth_xcfg_fname {fpath} {
  return ".xtherion.dat"
}


proc xth_cp_new_file {} {
  global xth
  xth_status_bar_status cp ""
  if {$xth(cp,fopen)} {
    return
  }
  set xth(cp,fopen) 1
  set xth(cp,special) {}
  set xth(cp,ffull) [file join $xth(gui,initdir) "thconfig"]
  if {[xth_cp_save_as]} {
    set ff $xth(cp,ffull)
    set xth(cp,fopen) 0
    set xth(cp,fname) ""
    set xth(cp,open_file) ""
    set xth(cp,fpath) ""
    set xth(cp,ffull) ""
    xth_cp_open_file $ff
  } else {
    set xth(cp,fopen) 0
    set xth(cp,fname) ""
    set xth(cp,open_file) ""
    set xth(cp,fpath) ""
    set xth(cp,ffull) ""
  }
}

proc xth_cp_open_file {fpath} {
  global xth
  xth_status_bar_status cp ""
  
  if {$xth(cp,fopen)} {
    return
  }

  if {[string length $fpath] == 0} {
    set fpath [tk_getOpenFile -filetypes $xth(app,cp,filetypes) \
      -parent $xth(gui,main) -initialdir $xth(gui,initdir)]
  }
  
  if {[string length $fpath] == 0} {
    return 0
  } else {
    set xth(gui,initdir) [file dirname $fpath]
  }

  set is_config_file [xth_cp_is_config_file $fpath];
  if {[string length $is_config_file] > 0} {
    MessageDlg $xth(gui,message) -parent $xth(gui,main) \
      -icon info -type ok \
      -message  "$fpath\n-----\n$is_config_file" \
      -font $xth(gui,lfont)
    return 0;
  }
  

  # read the file
  xth_status_bar_push cp
  xth_status_bar_status cp [format [mc "Opening %s ..."] $fpath]

  set fdata [xth_me_read_file $fpath 0]
  if {[lindex $fdata 0] == 0} {
      MessageDlg $xth(gui,message) -parent $xth(gui,main) \
	-icon error -type ok \
	-message [lindex $fdata 1] \
	-font $xth(gui,lfont)
      xth_status_bar_pop cp
      return 0
  }
  
  # now let's show the file
  catch {
    set fid [open [file join [file dirname $fpath] [xth_xcfg_fname $fpath]] r]
    fconfigure $fid -encoding utf-8
    while {![eof $fid]} {
      catch {
	eval [gets $fid]
      }
    }
    close $fid
  }
  
  set xth(cp,fopen) 1
  set xth(cp,special) [lindex $fdata 2]
  set xth(cp,fname) [file tail $fpath]
  set xth(cp,open_file) [file tail $fpath]
  set xth(cp,fpath) [file dirname $fpath]
  set xth(cp,ffull) $fpath
  
  # enable controls
  $xth(cp,editor).txt configure -state normal
#  $xth(cp,editor).txt delete 1.0 end
  foreach ln [lindex $fdata 3] {
    $xth(cp,editor).txt insert end "$ln\n"
  }
  catch {
    $xth(cp,editor).txt edit reset
  }
  $xth(cp,editor).txt mark set insert $xth(cp,cursor)
  $xth(cp,editor).txt see $xth(cp,cursor)
  
  $xth(ctrl,cp,stp).wl configure -state normal
  $xth(ctrl,cp,stp).we configure -state normal
  $xth(ctrl,cp,stp).fl configure -state normal
  $xth(ctrl,cp,stp).fe configure -state normal
  $xth(ctrl,cp,stp).optl configure -state normal
  $xth(ctrl,cp,stp).opte configure -state normal
  $xth(ctrl,cp,stp).go configure -state normal
  $xth(ctrl,cp,stp).gores configure -state normal

  $xth(ctrl,cp,info).txt configure -state normal
  
  $xth(cp,menu,file) entryconfigure [mc "New"] -state disabled
  $xth(cp,menu,file) entryconfigure [mc "Open"] -state disabled
  $xth(cp,menu,file) entryconfigure [mc "Save as"] -state normal
  $xth(cp,menu,file) entryconfigure [mc "Close"] -state normal
  $xth(cp,menu) entryconfigure [mc "Edit"] -state normal
  
  xth_app_title cp
  xth_status_bar_pop cp
  update idletasks
  return 1
}


set xth(cps,n) 0
set xth(cps,mxs) 0
set xth(cps,mxl) 0
set xth(cps,ts) 0
set xth(cps,tl) 0

proc xth_cp_comp_stat {tlen tscrap} {
  global xth
  incr xth(cps,n)
  if {$tscrap > $xth(cps,mxs)} {
    set xth(cps,mxs) $tscrap
  }
  if {$tlen > $xth(cps,mxl)} {
    set xth(cps,mxl) $tlen
  }
  set xth(cps,ts) [expr $xth(cps,ts) + $tscrap]
  set xth(cps,tl) [expr $xth(cps,tl) + $tscrap]
  set xth(cps,as) [expr double($xth(cps,ts)) / double($xth(cps,n))]
  set xth(cps,al) [expr double($xth(cps,tl)) / double($xth(cps,n))]  
}



proc xth_cp_close_file {} {
  
  global xth

  xth_cp_data_tree_clear      

  if {!$xth(cp,fopen)} {
    return
  }
  
  xth_cp_write_file $xth(cp,ffull)

  # disable controls
  $xth(cp,editor).txt delete 1.0 end
  $xth(cp,editor).txt see 1.0
  $xth(cp,editor).txt configure -state disabled

  $xth(cp,log).txt configure -state normal
  $xth(cp,log).txt delete 1.0 end
  $xth(cp,log).txt see 1.0
  $xth(cp,log).txt configure -state disabled

  $xth(cp,menu,file) entryconfigure [mc "New"] -state normal
  $xth(cp,menu,file) entryconfigure [mc "Open"] -state normal
  $xth(cp,menu,file) entryconfigure [mc "Save as"] -state disabled
  $xth(cp,menu,file) entryconfigure [mc "Close"] -state disabled
  $xth(cp,menu) entryconfigure [mc "Edit"] -state disabled
  
  $xth(ctrl,cp,stp).wl configure -state disabled
  $xth(ctrl,cp,stp).we configure -state disabled
  $xth(ctrl,cp,stp).fl configure -state disabled
  $xth(ctrl,cp,stp).fe configure -state disabled
  $xth(ctrl,cp,stp).optl configure -state disabled
  $xth(ctrl,cp,stp).opte configure -state disabled
  $xth(ctrl,cp,stp).go configure -state disabled
  $xth(ctrl,cp,stp).gores configure -text "" -fg $xth(cp,resfg) -bg $xth(cp,resbg) \
    -state disabled

  $xth(ctrl,cp,info).txt configure -state disabled
  
  # set variables
  set xth(cp,fopen) 0
  set xth(cp,cursor) 1.0
  set xth(cp,fname) ""
  set xth(cp,open_file) ""
  set xth(cp,fpath) ""
  set xth(cp,opts) ""
  xth_app_title cp
  focus $xth(ctrl,cp,dat).t 
  
  set xth(ctrl,cp,datrestore) {}
  set xth(ctrl,cp,msrestore) {}

}


# xth_cp_write_file --
#
# return list containing
# {success name}

proc xth_cp_write_file {pth} {

  global errorInfo xth

  xth_status_bar_push cp
  xth_status_bar_status cp [format [mc "Saving %s ..."] $pth]

  if {[catch {set fid [open $pth w]}]} {
    MessageDlg $xth(gui,message) -parent $xth(gui,main) \
	-icon error -type ok \
	-message $errorInfo \
	-font $xth(gui,lfont)    
    xth_status_bar_pop cp
    return 0
  }

  fconfigure $fid -encoding utf-8 -translation {auto auto}
  puts $fid "encoding  utf-8"

  # let's put data
  set data [$xth(cp,editor).txt get 1.0 end]
  regsub {\s*$} $data {} data
  puts $fid $data
    
  # now let's put special commands
  foreach cmd $xth(cp,special) {
    puts $fid "##XTHERION## $cmd"
  }
  close $fid
  
  xth_status_bar_pop cp
  return 1
}

proc xth_cp_save_as {} {

  global xth

  if {!$xth(cp,fopen)} {
    return 0
  }

  set fname $xth(cp,ffull)
  set idir [file dirname $fname]
  if {[string length $idir] == 0} {
    set idir $xth(gui,initdir)
  }
  set fname [tk_getSaveFile -filetypes $xth(app,cp,filetypes) \
    -parent $xth(gui,main) \
    -initialfile [file tail $fname] \
    -initialdir [xth_getdir $fname]]

  if {[string length $fname] == 0} {
    return 0
  } else {
    set xth(gui,initdir) [file dirname $fname]
  }

  if {![xth_cp_write_file $fname]} {
    return 0
  }

  set xth(cp,fname) [file tail $fname]
  set xth(cp,open_file) [file tail $fname]
  set xth(cp,fpath) [file dirname $fname]
  set xth(cp,ffull) $fname
  xth_app_title cp
  update idletasks  
  return 1
}


# xth_cp_read_file --
#
# return success
# {success name cmds lns}

proc xth_cp_read_file {pth} {

  global errorInfo xth

  set curenc utf-8
  set nm [file tail $pth]
  set encspc 0
  set flnn 0
  set success 1
  set lastln ""
  set lns {}
  set cmds {}
  if {[catch {set fid [open $pth r]}]} {
    set success 0
    set nm $errorInfo
    return [list $success $nm {} {}]
  }
  fconfigure $fid -encoding $curenc
  while {![eof $fid]} {
    gets $fid fln
    if {$flnn == 0} {
        if {[scan [string index $fln 0] %c] == 65279} {
            set fln [string range $fln 1 end]
        }
    }
    incr flnn
    if {[regexp {^\s*encoding\s+(\S+)\s*$} $fln encln enc]} {
      set encspc 1
      set rxp "\\s+($enc)\\s+"
      set validenc [regexp -nocase $rxp $xth(encodings) dum curenc]
      if {$validenc == 0} {
	set success 0
	set nm "$pth \[$flnn\] -- unknown encoding -- $enc"
	break
      }
      fconfigure $fid -encoding $curenc
      set lastln ""
    } elseif {[regexp {^\s*\#\#XTHERION\#\#\s+(\S.*)\s*$} $fln cmmdln cmmd]} {
      lappend cmds $cmmd
      set lastln ""
    } else {
      if {[regexp {(.*)\\\s*$} $lastln dumln prevln]} {
	set fln "$prevln$fln"
	if {[llength $lns] > 1} {
	  set lns [lrange $lns 0 [expr [llength $lns] - 2]]
	} else {
	  set lns {}
	}
      }
      lappend lns $fln
      set lastln $fln
    }
  }
  close $fid
  return [list $success $nm $cmds $lns]
  
}  


proc xth_cp_is_config_file {fname} {
  set str {}
  return $str
}


proc xth_cp_compile {} {
  global xth errorInfo
  set xth(cp,compres) 0
  if {!$xth(cp,fopen)} {
    return 0;
  }
  set ret 1
  xth_cp_write_file $xth(cp,ffull)
  set cdir [pwd]
  cd $xth(cp,fpath)
  $xth(cp,log).txt configure -state normal
  $xth(cp,log).txt delete 1.0 end
  $xth(cp,log).txt configure -wrap word
  $xth(cp,editor).txt configure -state disabled
  xth_status_bar_push cp
  
  catch {
    set lid [open "therion.log" w]
    puts $lid "ERROR: Can not execute \"$xth(gui,compcmd) -x $xth(cp,opts) $xth(cp,fname)\"."
    close $lid
  }  

  set acroreadopen 1
  if {[llength $xth(cp,preview,acroreadpath)] > 0 } {
    catch {
      set acroreadopen [catch {
	exec $xth(gui,appctrlcmd) ARExists [file join $xth(cp,fpath) $xth(cp,preview,acroreadpath)]
      }]
    }
    if {!$acroreadopen} {
      catch {
	exec $xth(gui,appctrlcmd) AROpen [file join $xth(cp,fpath) $xth(cp,preview,acroreadpath)]
	exec $xth(gui,appctrlcmd) ARClose [file join $xth(cp,fpath) $xth(cp,preview,acroreadpath)]
      }
    }
  }

  
  xth_status_bar_status cp [mc "Running therion ..."]
  $xth(ctrl,cp,stp).gores configure -text [mc "RUNNING"] -fg black -bg yellow
  update idletasks
  catch {
    set thid [open "|$xth(gui,compcmd) -x $xth(cp,opts) $xth(cp,fname)" r]
    if $xth(gui,compshow) {
      while {![eof $thid]} {
	$xth(cp,log).txt insert end [read $thid 8]
	$xth(cp,log).txt see end
	update idletasks
      }
    } else {
      read $thid;
    }
    close $thid
  }
  
  set see_end 0
  
  #puts $err
  #global errorInfo
  #puts $errorInfo

  # update UI
  xth_cp_data_tree_clear      
  set xth(th_exit_state) 0
  set xth(th_exit_number) $xth(th_exit_number_last)
  set dat_loaded_err [catch {
    set fid [open [file join [file dirname $xth(cp,ffull)] [xth_xcfg_fname $xth(cp,ffull)]] r]
    fconfigure $fid -encoding utf-8
    while {![eof $fid]} {
      catch {eval [gets $fid]}
    }
    close $fid
  }]

  set err 0
  if {$dat_loaded_err} {
    set err 1
  }
  if {$xth(th_exit_number) == $xth(th_exit_number_last)} {
    set err 1
  } else {
    set xth(th_exit_number_last) $xth(th_exit_number)
  }
  if {$xth(th_exit_state) == 0} {
    set err 1
  }

  
  if {$err} {
    bell
    $xth(ctrl,cp,stp).gores configure -text [mc "ERROR"] -fg white -bg red
    set ret 0
    set see_end 1
  } else {
    set xth(cp,compres) 1
    if {$xth(gui,auto_backup)} {
      xth_cp_write_file "$xth(cp,ffull)$xth(gui,auto_backup_ext)"
    }

    if {$xth(th_exit_state) == 1} {
      bell
      $xth(ctrl,cp,stp).gores configure -text [mc "WARNING"] -fg black -bg orange
    } else {
      $xth(ctrl,cp,stp).gores configure -text [mc "OK"] -fg black -bg green
    }

    if { [llength $xth(cp,preview,xpdfpath)] > 0 } {
      catch {
	exec xpdf -remote thpdf [file join $xth(cp,fpath) $xth(cp,preview,xpdfpath)] &
      }
    }
    if { [llength $xth(cp,preview,acroreadpath)] > 0 } {
      catch {
	if {$acroreadopen} {
	  exec $xth(gui,appctrlcmd) AROpen [file join $xth(cp,fpath) $xth(cp,preview,acroreadpath)]
	} else {
	  exec $xth(gui,appctrlcmd) ARBack [file join $xth(cp,fpath) $xth(cp,preview,acroreadpath)]
	}
      }
    }

  }
  
  xth_status_bar_status cp [mc "Reading therion log file ..."]
  if {[catch {
    set lid [open "therion.log" r]
    $xth(cp,log).txt delete 1.0 end
    $xth(cp,log).txt configure -wrap none
    $xth(cp,log).txt insert end "[read $lid]\n"
    close $lid
    }]} {
      $xth(cp,log).txt insert end [mc "\nerror opening therion.log file\n"]
  }
  if ($see_end) {
    $xth(cp,log).txt see end
  } else {
    $xth(cp,log).txt see 1.0
  }
  xth_status_bar_pop cp
  update idletasks

  $xth(cp,log).txt configure -state normal
  $xth(cp,editor).txt configure -state normal
  xth_cp_show_errors
  
  # update configuration file if required
  set xth(cp,cursor) [$xth(cp,editor).txt index insert]
  if {0} {
    set fdata [xth_me_read_file $xth(cp,ffull) 0]
    if {[lindex $fdata 0] == 0} {
	MessageDlg $xth(gui,message) -parent $xth(gui,main) \
	  -icon error -type ok \
	  -message [lindex $fdata 1] \
	  -font $xth(gui,lfont)
    } else {
      ###xth_cp_data_tree_clear      


      set xth(cp,special) [lindex $fdata 2]
     
      $xth(cp,editor).txt configure -undo 0 
      
      $xth(cp,editor).txt delete 1.0 end
      foreach ln [lindex $fdata 3] {
	$xth(cp,editor).txt insert end "$ln\n"
      }
      
      $xth(cp,editor).txt mark set insert $xth(cp,cursor)
      $xth(cp,editor).txt see $xth(cp,cursor)
      
      $xth(cp,editor).txt configure -undo 1
      
    }
  }
  cd $cdir
  xth_me_xvi_refresh
  xth_me_save_file 0
  return $ret
}


proc xth_cp_data_tree_clear {} {
  global xth
  set tp $xth(ctrl,cp,dat).t 
  set xth(ctrl,cp,datrestore) {}
  foreach di $xth(ctrl,cp,datlist) {
    catch {
      append xth(ctrl,cp,datrestore) "catch \{$tp itemconfigure [lindex $di 1] -open [$tp itemcget [lindex $di 1] -open]\}\n";
    }
  }
  append xth(ctrl,cp,datrestore) "update idletasks\n"
  append xth(ctrl,cp,datrestore) "catch \{$tp xview moveto [lindex [$tp xview] 0]\}\n";
  append xth(ctrl,cp,datrestore) "catch \{$tp yview moveto [lindex [$tp yview] 0]\}\n";
  append xth(ctrl,cp,datrestore) "catch \{$tp selection set [$tp selection get]\}\n";
  append xth(ctrl,cp,datrestore) "update idletasks\n"
  catch {
    $tp delete [$tp nodes root]
  }
  set tp $xth(ctrl,cp,ms).t 
  set xth(ctrl,cp,msrestore) {}
  foreach di $xth(ctrl,cp,maplist) {
    catch {
      append xth(ctrl,cp,msrestore) "catch \{$tp itemconfigure [lindex $di 1] -open [$tp itemcget [lindex $di 1] -open]\}\n";
    }
  }
  append xth(ctrl,cp,msrestore) "update idletasks\n"
  append xth(ctrl,cp,msrestore) "catch \{$tp xview moveto [lindex [$tp xview] 0]\}\n";
  append xth(ctrl,cp,msrestore) "catch \{$tp yview moveto [lindex [$tp yview] 0]\}\n";
  append xth(ctrl,cp,msrestore) "catch \{$tp selection set [$tp selection get]\}\n";
  append xth(ctrl,cp,msrestore) "update idletasks\n"
  catch {
    $tp delete [$tp nodes root]
  }
  $xth(ctrl,cp,info).txt delete 1.0 end
  # prejde oba stromy a priradi rozvinutie/zvinutie do prikazov
  # plus ulozi poziciu
}

proc xth_cp_data_tree_insert {id parent level name fullname title stitle stat} {
  global xth
  if {[string length $title] < 1} {
    set title $name
    set stitle $name
  }
  lappend xth(ctrl,cp,datlist) [list $stitle $id $parent $level $name $fullname $title $stat]
}

proc xth_cp_data_tree_create {} {
  global xth
  if {[llength $xth(ctrl,cp,datlist)] == 0} {
    return
  }
  set nlist [lsort -dictionary -index 0 $xth(ctrl,cp,datlist)]
  set level 1
  set tocnt 1
  set copen 1
  set tp $xth(ctrl,cp,dat).t 
  while {$tocnt} {
    set tocnt 0
    foreach di $nlist {
      if {[lindex $di 3] == $level} {
	if {$level == 1} {
	  set parent root
	} else {
	  set parent [lindex $di 2]
	}
	catch {
	  $tp insert end $parent [lindex $di 1] -data [list survey [lindex $di 5] [lindex $di 6] [lindex $di 7]] \
	    -text [lindex $di 6] -image [Bitmap::get folder] -open $copen -font $xth(gui,lfont)
	}
      }
      if {[lindex $di 3] > $level} {
	set tocnt 1
      }
    }
    set copen 0
    incr level
  }
  catch {
    eval $xth(ctrl,cp,datrestore)
  }
}

proc xth_cp_map_tree_insert {type subtype id parent level name fullname title stitle} {
  global xth
  if {[string length $title] < 1} {
    set title $name
    set stitle $name
  }
  lappend xth(ctrl,cp,maplist) [list $stitle $id $parent $level $name $fullname $title $type $subtype]
}

proc xth_cp_map_tree_create {} {
  global xth
  if {[llength $xth(ctrl,cp,maplist)] == 0} {
    return
  }
  set nlist [lsort -dictionary -index 0 $xth(ctrl,cp,maplist)]
  set level 0
  set tocnt 1
  set copen 1
  set tp $xth(ctrl,cp,ms).t 
  while {$tocnt} {
    set tocnt 0
    foreach di $nlist {
      if {[lindex $di 3] == $level} {
	if {$level == 0} {
	  set parent root
	} else {
	  set parent [lindex $di 2]
	}
	set ccopen $copen
	switch [lindex $di 7] {
	  map {
	    if {[lindex $di 8]} {
	      set ii [Bitmap::get file]
	      set ccopen 0
	    } else {
	      set ii [Bitmap::get copy]
	    }
	  }
	  scrap {
	    set ii [Bitmap::get new]
	  }
	  default {
	    set ii [Bitmap::get folder]
	  } 
	}
	catch {
	  $tp insert end $parent [lindex $di 1] -data [list [lindex $di 7] [lindex $di 5] [lindex $di 6]] \
	    -text [lindex $di 6] -image $ii -open $ccopen -font $xth(gui,lfont)
	}
      }
      if {[lindex $di 3] > $level} {
	set tocnt 1
      }
    }
    set copen 0
    incr level
  }
  
  # odstrani projekcie bez map
  set prjs [$tp nodes root]
  foreach prj $prjs {
    set nds [$tp nodes $prj]
    switch [llength $nds] {
      0 {
	$tp delete $prj
      }
      1 {
	$tp itemconfigure $nds -open 1
      }
    }
  }

  catch {
    eval $xth(ctrl,cp,msrestore)
  }
}



proc xth_cp_data_tree_enter {node} {
  global xth
  set tp $xth(ctrl,cp,dat).t 
  xth_status_bar_push cp
  set d [$xth(ctrl,cp,dat).t itemcget $node -data]
  xth_status_bar_status cp [format "%s - %s (%s)" [lindex $d 0] [lindex $d 1] [lindex $d 2]]
}


proc xth_cp_data_tree_select {tpath node} {
  global xth
  set tp $tpath
  xth_status_bar_push cp
  set d [$tp itemcget $node -data]
  $xth(ctrl,cp,info).txt delete 1.0 end
  $xth(ctrl,cp,info).txt see 1.0
  $xth(ctrl,cp,info).txt insert 1.0 "name: [lindex $d 1]\ntitle: [lindex $d 2]\n[lindex $d 3]"
}



proc xth_cp_data_tree_leave {node} {
  xth_status_bar_pop cp
}

proc xth_cp_data_tree_double_click {node} {
  global xth
  set tp $xth(ctrl,cp,dat).t 
  set d [$tp itemcget $node -data]
  set i [$xth(cp,editor).txt index insert]  
  regexp {(\d+)\.} $i dum cln
  $xth(cp,editor).txt insert $cln.0 [format "select %s\n" [lindex $d 1]]
}

proc xth_cp_map_tree_enter {node} {
  global xth
  set tp $xth(ctrl,cp,ms).t 
  xth_status_bar_push cp
  set d [$xth(ctrl,cp,ms).t itemcget $node -data]
  xth_status_bar_status cp [format "%s - %s (%s)" [lindex $d 0] [lindex $d 1] [lindex $d 2]]
}

proc xth_cp_map_tree_leave {node} {
  xth_status_bar_pop cp
}

proc xth_cp_map_tree_double_click {node} {
  global xth
  set tp $xth(ctrl,cp,ms).t 
  set d [$tp itemcget $node -data]
  set i [$xth(cp,editor).txt index insert]  
  regexp {(\d+)\.} $i dum cln
  if {[string length [lindex $d 1]] > 0} {
    $xth(cp,editor).txt insert $cln.0 [format "select %s\n" [lindex $d 1]]
  }
}


proc xth_cp_show_errors {} {
  
  global xth
  
  set w $xth(cp,log).txt
  $w tag remove xtherr 1.0 end

  set rx {\S*[^\]\s]\s+\[\d+\]}
  set fnd [$w search -regexp -count cnt $rx 1.0 end]
  
  set i 0
  while {([string length $fnd] > 0) && ($i < 10000)} {
    
    set enx [$w index "$fnd + $cnt chars"]
    set ctext [$w get $fnd "$fnd lineend"]
    set cfnm {}
    regexp {\S+} $ctext cfnm
  
    if {![regexp {(\.mp|\.tex)\)?$} $cfnm]} {
      $w tag add xtherr $fnd $enx
    }

    set fnd [$w search -regexp -count cnt $rx $enx end]
    incr i    
    
  }
  
  $w tag configure xtherr -foreground red
  set prevcur [$xth(cp,log).txt cget -cursor]
  $w tag bind xtherr  "$w configure -cursor hand2"
  $w tag bind xtherr  "$w configure -cursor $prevcur"
  $w tag bind xtherr <1> "xth_cp_goto_error %x %y"
 
}



proc xth_cp_goto_error {x y} {
  global xth

  set epos [$xth(cp,log).txt get "@$x,$y wordstart" "@$x,$y lineend"]
  
  # skusime najst source error
  set fnm {}
  set fln {}
  if {(![regexp {\s*(\S+)\s+\[(\d+)\]} $epos dum fnm fln]) || [string equal $fnm "th"] || [string equal $fnm "th2"] || [string equal $fnm ".th"] || [string equal $fnm ".th2"]} {
    set epos [$xth(cp,log).txt get "@$x,$y linestart" "@$x,$y lineend"]
    regexp {\s*(\S+)\s+\[(\d+)\]} $epos dum fnm fln
  }
  
  if {([string length $fnm] == 0) || ([string length $fln] == 0)} {
    return
  }  
  
  if {[catch {set fln [expr $fln - 1]}]} {
    return
  }
  
  # potom sa pozrieme ci subor nemame otvoreny v kompilatore,
  # mapovom alebo textovom editore a skocime tam
  
  if $xth(cp,fopen) {
  
    set fullfnm [file join $xth(cp,fpath) $fnm]

    if {[string equal $fullfnm $xth(cp,ffull)]} {
      after idle "focus $xth(cp,editor).txt; $xth(cp,editor).txt see $fln.0; $xth(cp,editor).txt mark set insert $fln.0; $xth(cp,editor).txt tag remove sel 1.0 end; $xth(cp,editor).txt tag add sel $fln.0 \"$fln.0 lineend\""
      return
    }
    
    if {$xth(me,fopen) && [string equal $fullfnm $xth(me,ffull)]} {
      after idle "xth_app_show me; xth_me_goto_line [expr $fln + 1]"
      return
    }
  
    # skusime textovy editor, ci to mame otvorene
    foreach fx $xth(te,flist) {
      if {[string equal $fullfnm $xth(te,$fx,path)]} {
	after idle "xth_app_show te; xth_te_show_file $fx; $xth(te,$fx,frame).txt see $fln.0; $xth(te,$fx,frame).txt mark set insert $fln.0; $xth(te,$fx,frame).txt tag remove sel 1.0 end; $xth(te,$fx,frame).txt tag add sel $fln.0 \"$fln.0 lineend\""
	return
      }
    }
    
    after idle "xth_app_show te; xth_te_open_file 0 [list $fullfnm] $fln"
  
  }
  
  
}



therion/xtherion/ctrl.tcl0000644000076400010400000001232411221133502016565 0ustar  userAdministrators##
## ctrl.tcl --
##
##     Controler module.   
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------

set xth(ctrl,all,number) 0

proc xth_ctrl_create {aname} {

  global xth
  
  set cf $xth(gui,$aname).af.ctrl  
    
  canvas $cf.c -yscrollcommand "xth_scroll $cf.sv" \
    -highlightthickness 0
  scrollbar $cf.sv -orient vert  -command "$cf.c yview" -takefocus 0 \
    -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)

  grid columnconf $cf 0 -weight 1
  grid rowconf $cf 0 -weight 1
  xth_scroll_showcmd $cf.sv "grid $cf.sv -row 0 -column 1 -sticky nsew; update idletasks; xth_ctrl_reshape te"
  xth_scroll_hidecmd $cf.sv "grid forget $cf.sv; update idletasks; xth_ctrl_reshape te"
  grid $cf.c -row 0 -column 0 -sticky nsew
  
  set xth(ctrl,$aname,number) 0
  set xth(ctrl,$aname,list) {}
}

proc xth_ctrl_add {aname cname title} {
  
  global xth
  
  incr xth(ctrl,$aname,number)
  incr xth(ctrl,all,number)
  lappend xth(ctrl,$aname,list) $cname
  set cn $xth(ctrl,$aname,number)
  set cf $xth(gui,$aname).af.ctrl  
  
  set ccf $cf.cf$cn
  frame $ccf
  frame $ccf.f 
  set cid [$cf.c create window 0 0 -window $ccf -anchor nw]
  set xth(ctrl,$aname,$cname) $ccf.f
  set xth(ctrl,$aname,$cname,frm) $ccf
  set xth(ctrl,$aname,$cname,pos) $cn
  set xth(ctrl,$aname,$cname,max) 1
  set xth(ctrl,$aname,$cname,menu) .xth_popup$xth(ctrl,all,number)
  set xth(ctrl,$aname,$cn) $cid 
  
  menu .xth_popup$xth(ctrl,all,number) -tearoff 0
  button $ccf.rb -text "$title" -command "xth_ctrl_minmax $aname $cname" \
    -font $xth(gui,lfont) -bg #aaaaaa \
    -fg white -bg darkBlue -activebackground lightBlue \
    -anchor w -relief flat \
    -takefocus 0
  bind $ccf.rb  "tk_popup .xth_popup$xth(ctrl,all,number) %X %Y"
  xth_status_bar $aname $ccf.rb [mc "Show or hide this control panel"]
  
  pack $ccf.rb -side top -fill x -expand 1
  pack $ccf.f -expand yes -fill both

  xth_ctrl_reshape $aname
}


proc xth_ctrl_finish {aname} {

  global xth  

  foreach ct $xth(ctrl,$aname,list) {
    set cmn $xth(ctrl,$aname,$ct,menu)
    foreach oct $xth(ctrl,$aname,list) {
      if {[string compare $ct $oct] != 0} {
        $cmn add command -label [$xth(ctrl,$aname,$oct,frm).rb cget -text] \
          -command "xth_ctrl_replace $aname $ct $oct" -font $xth(gui,lfont)
      }
    }
  }

}


proc xth_ctrl_reshape {aname} {
  
  global xth
  set cn $xth(ctrl,$aname,number)
  set cnv $xth(gui,$aname).af.ctrl.c  
  
  # position the windows
  set height 0
  set width [winfo width $cnv]
  for {set i 1} {$i <= $cn} {incr i} {
    set cid $xth(ctrl,$aname,$i)
    set cw [$cnv itemcget $cid -window]
    $cnv coord $cid 0 $height
    $cnv itemconfigure $cid -width $width
    incr height [winfo height $cw]
  }

  $cnv configure -scrollregion "0 0 $width $height"
}

proc xth_ctrl_minmax {aname cname} {

  global xth

  set cmm $xth(ctrl,$aname,$cname,max)
  if {$cmm == 1} {
    pack forget $xth(ctrl,$aname,$cname)
    $xth(ctrl,$aname,$cname,frm).rb configure -relief raised
    set cmm 0
  } else {
    pack $xth(ctrl,$aname,$cname) -expand yes -fill both
    $xth(ctrl,$aname,$cname,frm).rb configure -relief flat
    set cmm 1
  }
  set xth(ctrl,$aname,$cname,max) $cmm
  
  update idletasks
  xth_ctrl_reshape $aname
}

proc xth_ctrl_replace {aname ccname dcname} {
  
  global xth

  set cnv $xth(gui,$aname).af.ctrl.c
  set p1 $xth(ctrl,$aname,$ccname,pos)
  set p2 $xth(ctrl,$aname,$dcname,pos)
  
  set xth(ctrl,$aname,$ccname,pos) $p2
  set xth(ctrl,$aname,$dcname,pos) $p1
  $cnv itemconfigure $xth(ctrl,$aname,$p1) \
    -window $xth(ctrl,$aname,$dcname,frm)
  $cnv itemconfigure $xth(ctrl,$aname,$p2) \
    -window $xth(ctrl,$aname,$ccname,frm)
    
  update idletasks
  xth_ctrl_reshape $aname
  
}

proc xth_ctrl_minimize {aname cname} {
  global xth
  set xth(ctrl,$aname,$cname,max) 1
  xth_ctrl_minmax $aname $cname
}

proc xth_ctrl_maximize {aname cname} {
  global xth
  set xth(ctrl,$aname,$cname,max) 0
  xth_ctrl_minmax $aname $cname
}

proc xth_ctrl_scroll_to {aname cname} {
  global xth
  set cf $xth(gui,$aname).af.ctrl
  set sr [$cf.c cget -scrollregion]
  set wp [$cf.c coord $xth(ctrl,$aname,[expr [lsearch $xth(ctrl,$aname,list) [lindex $xth(ctrl,$aname,list) [expr $xth(ctrl,$aname,$cname,pos) - 1]]] + 1])]
#  set wp [$cf.c coord $xth(ctrl,$aname,[expr [lsearch $xth(ctrl,$aname,list) $cname] + 1])]
  $cf.c yview moveto [expr [lindex $wp 1] / ([lindex $sr 3] - [lindex $sr 1])]   
}

therion/xtherion/dbg.tcl0000755000076400010400000000335510625665160016405 0ustar  userAdministrators#! /usr/bin/wish

proc xth_dbg_dbg {} {
  global xth
  set f $xth(gui,dbg)
  $f.cmd configure -values [linsert [$f.cmd cget -values] 0 $xth(ctrl,dbg,cmd)]
  set tmp {}
  if {[regexp {^\s*\$} $xth(ctrl,dbg,cmd)]} {
    set tmpcmd "set tmp $xth(ctrl,dbg,cmd)"
  } else {
    set tmpcmd "set tmp \[$xth(ctrl,dbg,cmd)\]"
  }
  $f.txt delete 1.0 end
  set xth(ctrl,dbg,cmd) {}
  eval $tmpcmd
  $f.txt insert 1.0 $tmp  
}

proc xth_dbg_init {} {

  global xth
  
  set f $xth(gui,dbg)
  toplevel $f
  wm title $f "Debug window"

  ComboBox $f.cmd -font $xth(gui,lfont) -height 8 \
    -textvariable xth(ctrl,dbg,cmd) -command xth_dbg_dbg

  # initialize text editor
  set txb $f
  text $txb.txt -height 12 -wrap none -font $xth(gui,efont) \
  -bg $xth(gui,ecolorbg) \
  -fg $xth(gui,ecolorfg) -insertbackground $xth(gui,ecolorfg) \
  -relief sunken -selectbackground $xth(gui,ecolorselbg) \
  -selectforeground $xth(gui,ecolorselfg) \
  -selectborderwidth 0 \
  -yscrollcommand "$txb.sv set" \
  -xscrollcommand "$txb.sh set" 
  scrollbar $txb.sv -orient vert  -command "$txb.txt yview" \
    -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
  scrollbar $txb.sh -orient horiz  -command "$txb.txt xview" \
    -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)

  grid columnconf $f 0 -weight 1
  grid columnconf $f 1 -weight 0
  grid rowconf $f 1 -weight 1
  grid $f.cmd -column 0 -row 0 -columnspan 2 -sticky news
  grid $f.txt -column 0 -row 1 -sticky news
  grid $f.sv -column 1 -row 1 -sticky news
  grid $f.sh -column 0 -row 2 -sticky news
      
  wm geometry $f 480x320+100+100
  update idletasks
  
}


if 0 {
  package require BWidget
  source ver.tcl
  source global.tcl
  wm withdraw .
  xth_dbg_init
} else {
  xth_dbg_init
}

therion/xtherion/err.log0000644000076400010400000000000011051114210016370 0ustar  userAdministratorstherion/xtherion/global.tcl0000644000076400010400000004137111660243264017103 0ustar  userAdministrators##
## global.tcl --
##
##     Global variables definition.   
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------

package require msgcat
catch {namespace import ::msgcat::mc}  

if {[string equal -nocase [::msgcat::mclocale] c]} {
  ::msgcat::mclocale en
}

set xth(destroyed) 0
set xth(prj,name) "therion"
set xth(prj,title) "therion user interface"
set xth(gui,main) ".xth"
set xth(gui,about) ".xth_about"
set xth(gui,bacw) ".xth_bac"
set xth(gui,dbg) ".xth_dbg"
set xth(gui,help) ".xth_help"
set xth(gui,message) ".xthmsg"
#set xth(gui,minsize) {480 300}
set xth(gui,minsize) {720 576}
set xth(gui,balloons) 0
set xth(gui,toolbar) 1
set xth(te,template) {}

set xth(kb_control) Control
set xth(kb_meta) Meta
set xth(gui,compshow) 0
set xth(gui,compcmd) "therion"
set xth(gui,appctrlcmd) {}
set xth(gui,auto_save) 0
set xth(gui,auto_backup) 0
set xth(gui,auto_backup_ext) "~"
set xth(gui,check_update) 1


set xth(encodings) { iso8859-1 iso8859-2 iso8859-5 iso8859-7 utf-8 cp1250 cp1251 cp1252 cp1253}
set xth(kbencodings) {utf-8 iso8859-1 iso8859-2 cp1250 cp1251 macCentEuro unicode}
if {[lsearch -exact $xth(kbencodings) [encoding system]] < 0} {
  lappend xth(kbencodings) [encoding system]
}

set xth(length_units) {m cm in ft yd}
set xth(angle_units) {deg min grad}
set xth(point_types) {}
set xth(line_types) {}
set xth(scrap_projections) {plan elevation extended none}
set xth(app,te,filetypes) {    
  {{Therion files}       {.th}}    
  {{2D therion files}       {.th2}}    
  {{All files}       {*}}    
}
set xth(app,te,fileext) {.th}

set xth(app,me,filetypes) {    
  {{Therion 2D files}       {.th2}}    
  {{Therion files}       {.th}}    
  {{All files}       {*}}    
}

set xth(app,cp,filetypes) {    
  {{Therion config files}       {thconfig*}}    
  {{Therion config files }       {.thcfg .thconfig}}    
  {{All files}       {*}}    
}

set xth(icmds) {survey}
set xth(cmds) {scrap centerline grade line area map layout surface}

set xth(datafmt,unknown) {4s}                    
set xth(datafmt,station) {4s}                    
set xth(datafmt,length) {6.2fx {-}}             
set xth(datafmt,counter) {6.2f {-}}            
set xth(datafmt,bearing) {5.1fx {-}}             
set xth(datafmt,gradient) {{5.1fx} {up down -}} 
set xth(datafmt,depth) {6.2fx {-}}            
set xth(datafmt,dimensions) {4.1fx {-}}             

set xth(gui,initdir) ""
set xth(app,active) ""
set xth(app,list) {}
set xth(app,all,tbwidth) 256
set xth(app,all,relw) 380
set xth(app,all,wmwd) 180
set xth(app,all,wpsw) 1

set xth(app,fencoding) utf-8
set xth(app,sencoding) utf-8

# autodetect some options
frame .def
scrollbar .def.scrollbar
text .def.text
if {[catch {.def.text configure -undo 1}]} {
  set xth(gui,text_undo) 0;
} else {
  set xth(gui,text_undo) 1;
}
label .def.label

set xth(gui,sbwidth) [.def.scrollbar cget -width]
set xth(gui,sbwidthb) [.def.scrollbar cget -borderwidth]
set xth(gui,lfont) [.def.label cget -font]
set xth(gui,efont) [.def.text cget -font]
set xth(gui,ecolorbg) black
set xth(gui,ecolorfg) green
set xth(gui,escolorbg) black
set xth(gui,escolorfg) red
set xth(gui,ecolorselbg) green
set xth(gui,ecolorselfg) black
set xth(gui,selfg) white
set xth(gui,selbg) darkBlue
set xth(gui,etabsize) 2
set xth(gui,controlk) Ctrl

set xth(import,size) 1024.0
set xth(import,mind) 8.0
set xth(import,dxf,scale) 1.0
set xth(import,dxf,cs) {}
set xth(import,svg,scale) 1.0
set xth(import,svg,cs) {}
set xth(import,default,scale) {}
set xth(import,default,cs) {}

set xth(gui,xvi_grid_clr) #00D0D0
set xth(gui,xvi_walls_fptn) gray12
set xth(gui,xvi_walls_fclr) gray80
set xth(gui,xvi_walls_oclr) gray60
set xth(gui,xvi_shot_clr) gray50
set xth(gui,xvi_station_fclr) black
set xth(gui,xvi_station_oclr) black
set xth(gui,xvi_station_size) 3.0
set xth(gui,xvi_sketch_line_width) 1

set xth(gui,me,nozoom) 1

destroy .def
# end of options autodetection

# map editor settings


#########################################
# SCRAP
# size of scrap scaling square
set xth(gui,me,scrap,psize) 4


#########################################
# POINT
# size of point
set xth(gui,me,point,psize) 4

#########################################
# LINE
# size of line point
set xth(gui,me,line,psize) 4
# line width
set xth(gui,me,line,width) 3
# size of line control point
set xth(gui,me,line,cpsize) 4
# width of line between point and control point
set xth(gui,me,line,clwidth) 2
# size of start line tick
set xth(gui,me,line,ticksize) 15
# width of start line tick
set xth(gui,me,line,tickwidth) 3

set xth(gui,me,activefill) red
set xth(gui,me,pasivefill) blue
set xth(gui,me,controlfill) blue
set xth(gui,me,highlightfill) cyan

set xth(gui,me,typelistwidth) 16
set xth(gui,rmb) 3

set xth(gui,bindinsdel) 1

# platform dependend settings
case $tcl_platform(platform) {
  unix {
    set xth(gui,sbwidth) 9
    set xth(gui,sbwidthb) 1
    set xth(gui,efont) {fixed -20}
    set xth(gui,platform) unix
    set xth(gui,cursor) top_left_arrow
    set xth(gui,compshow) 1
    if {[string equal $tcl_platform(os) Darwin]} {
        set xth(kb_meta) Meta
        set xth(kb_control) Alt
        set xth(gui,controlk) Cmd
        set xth(gui,platform) macintosh
        set xth(gui,cursor) arrow
        set xth(gui,bindinsdel) 0
    }
  }
  windows {
    package require registry
    set xth(win32registry) {HKEY_LOCAL_MACHINE\SOFTWARE\Therion}
    if {[catch {
      set xth(gui,compcmd) "\"[file join [registry get $xth(win32registry) InstallDir] therion.exe]\""
    }]} {
      set xth(win32registry) {HKEY_CURRENT_USER\SOFTWARE\Therion}
      catch {
	set xth(gui,compcmd) "\"[file join [registry get $xth(win32registry) InstallDir] therion.exe]\""
      }      
    }
    
    catch {
      if {[registry get {HKEY_LOCAL_MACHINE\SOFTWARE\Therion} AppCtrl]} {
	set xth(gui,appctrlcmd) "[file join [registry get $xth(win32registry) InstallDir] bin appctrl.exe]"
      }
    }
    regsub -all {\/} $xth(gui,compcmd) {\\\\} xth(gui,compcmd)
    set xth(gui,efont) "Courier 16 roman bold"
    set xth(gui,platform) windows
    set xth(gui,cursor) arrow
    set xth(app,sencoding) [encoding system]
    set xth(gui,bindinsdel) 0
    if {[catch {
      set fid [open "|cmd.exe /c" r]
      read $fid;
      close $fid
    }]} {
      set xth(gui,compcmd) "command.com /c $xth(gui,compcmd)"
    } else {
      set xth(gui,compcmd) "cmd.exe /c $xth(gui,compcmd)"
    }
  }
  macintosh {
    set xth(kb_meta) Meta
    set xth(kb_control) Alt
    set xth(gui,controlk) Cmd
    set xth(gui,platform) macintosh
    set xth(gui,cursor) arrow
    set xth(gui,bindinsdel) 0
    set xth(app,sencoding) utf-8
  }
}


case $tcl_platform(os) {
  Darwin {
    set xth(gui,rmb) 2
  }
}


# end of platform dependend settings

# words to translate
set tmp [mc "theme basic-symbols"]
set tmp [mc "theme passage-fills"]
set tmp [mc "theme speleothems"]
set tmp [mc "theme equipement"]

set xth(me,themes) {
  {theme basic-symbols}
    {point gradient}
    {point height}
    {point passage-height}
    {point entrance}
    {point label}
    {point station}
    {point continuation}
    {point water-flow}
    {point air-draught}
    {line wall}
    {line chimney}
    {line ceiling-step}
    {line floor-step}
    {line pit}
    {line wall:breakdown}
    {line floor-meander}
	  {line ceiling-meander}
    {line contour}
    {line label}
    {line overhang}
    {line water-flow}
    {area water}
    {area sump}
    {area bedrock}
  {theme passage-fills}
    {point blocks}
    {point archeo-material}
    {point clay}
    {point debris}
    {point breakdown-choke}
    {point flowstone-choke}
    {point low-end}
    {point narrow-end}
    {point guano}
    {point ice}
    {point paleo-material}
    {point pebbles}
    {point raft}
    {point raft-cone}
    {point root}
    {point sand}
    {point snow}
    {point vegetable-debris}
    {point water}
	  {line border}
	  {line border:invisible}
    {line rock-border}
    {line rock-edge}
    {area blocks}
    {area clay}
    {area debris}
    {area ice}
    {area pebbles}
    {area sand}
    {area snow}
  {theme speleothems}
    {point anastomosis}
    {point aragonite}
    {point cave-pearl}
    {point crystal}
    {point curtain}
    {point disk}
    {point flowstone}
    {point flute}
    {point gypsum}
    {point gypsum-flower}
    {point helictite}
    {point karren}
    {point moonmilk}
    {point pillar}
    {point popcorn}
    {point rimstone-dam}
    {point rimstone-pool}
    {point scallop}
    {point soda-straw}
    {point stalactite}
    {point stalagmite}
    {point wall-calcite}
    {line flowstone}
	  {line moonmilk}
    {area flowstone}
    {area moonmilk}
  {theme equipement}
    {point anchor}
    {point bridge}
    {point camp}
    {point fixed-ladder}
    {point no-equipment}
    {point rope}
    {point rope-ladder}
    {point steps}
    {point traverse}
}





set xth(about,image_data) {
R0lGODlhwACQAOcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH+CHh0aGVyaW9uACwAAAAAwACQAAAI/gABCBxI
sKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJ
sqXLjyRiloj5sqbNlDJJlJg586bPnxx1liiSpKjRJD2BKl0KUWfRNm0kQW1T
lCbTq1gL6kSSJI4kSbZsfaWaxGpWADFJoD1rk0SKJG7AapurS6wbpGrPOsWb
Ny9bnDvbOLKlbdu/bXPFIi3BtsTRpGv/ooyZJKotw/8yI7ZF1S/TvVOL7pzp
WXJHx5bDFtb2LbPrw9tsRSqblUTluF/dkC1b2jTHymB1bdu27zXmf/sQz+7t
U2iSSGHDSooUOilz3xOfgr083Hhh19rE/raB/FMm8NXRx3ZOq/Y69oW2K0cF
ixmha8RSyd/MCXy4YYH/jHUUUmXp915C8UHVyHaFCSSTQbBpI0sTBrbl2Hn/
DTTdXVJBZRRp7h0IgFHzbdfdQsOFJwleTJXAFVRz/WOQdtOFJppZ73n2FG6q
+ScJQaX9s5olbhAR4kt7JVHYNm0cVCBY6lXF2FU4akUQjWH5t81C2mgW3l1H
1uQcd0kglFds4lG1k1lhmrQXZOwBAIJAqEkiC2HbfJOhmSV4KV4RbMl0mTYM
babYYjrR1CZJSVaV00xzoiWfXMP5k5lCBJDgp5qSkaAaoe0d5MZm+ZHAlWNr
IplgG414KNpO/gAUAAABddoi3Gs/IlhcYdbkR4BpX3G3TSQLiXcUWUUsGhJq
uEXp6EC1XqZZsd5JVVYAps3HnYzFdqhbaL09mlZkHNUZnHQexhSpbaxaguel
C7nWmja6SNJEsr5Nyh1D0gUroH6NLpaqRjqlhp4turEYa63dwauQa8mFpeav
pkW75UJtRKdxwnBeGFUbbnxrVJUSsZvxZfvoGZu1UwLgWBpyyCJccf80Ga+f
kqSRgrLlAXfZQ4Ou3JlWwG2Xq40kO6RTE45YYs02ugh0i9BI0VlUXMI+dJ+x
LfvGLn0QwSYxbQRFS6iGkiRMdlNPZcmtQCqS9evXtjz9dkOH7ROe/iP38vxT
rWc75A9icZcJpM8NDqTNLVxHFJ+JewIgtJrsNuLuiVqTymmOTkUV3kNtaNb4
QHRHTrh4FR7UuYmZGS7QytY+ZZlw3zTykGHfaEPk2ti15zNmNjdEmCWbO4jh
3RFauyjdgx5UOInB2vKQJPcV7rdSpbsGkfWk/4682CvybmZRkdB3sUHGlrVj
WGG7pg/VFIvocmXv3l1o+uYdT5BmVIfp2FdLst9AGhefOMisfZlJzIqutxSG
Ra5QKxtQ25Z0pcOEhzPiMwjDtHcQWVhLICCwTSRkETy8ZUZPEhqa/Ixnmfrc
Dk1qKwrMZDacg1xGMalDSwnSYD4Ooi8O/uuJz0Tu078VDgRxDmuIoahToKIE
axv+QIjQUkcZzx1HgAKJnXMo4j6oWStSK4yJZb4TNlKxqHSBK4iQMNi1giDu
igiJHRIuxEXk6OkW1opfGJ+zLYi0AT93mVLBzIeQJESwQqhxm2tcVxAg8uYt
bZDDEP/Rmm30ajxG7B50pDWR6VRlfkmg1ELSlkGn9FB6CqGcpMZYQoZUazwM
bCBcCNMliqwICWlJJGEYUiqitTCJCOFUCH93PhPuql4qNKJj3NDHiahydYlT
CMv8YkpJfAeLbiRb6YrpSvCkMAlglN82sTnK4pWOX7HjiXa2xU0nWeeNEIkE
JcWWTHG+kZwH/mlDYjaXKcQxREWxuw19WANMJ5EgUoDDZ0IMo6KqKfOeEEmR
bIY2EwwVSoEbKt+2fJiQsoCAVuuMZkQKg7o25giiLwxLwvryu24aKjqIuaJC
R9Qej4HlaRRJji6I51B7WrGgCiFVIHvCMIYkIUIxvaalMoMEo/KEKPqay0Tk
qaJ76fE9y5TE1IC6UGvgr6ItRcluUHU1awJvImMzqW/qdM3tGQuX5hljO0fi
KhL8yoFcRWdnwmkap0CnrUDTIrTgiRLBWi1jdpupFI2VNL2UoA3QialiBSKW
8HlmmykRSxPWRjcyTsQNhcshVv4nrbwO5I+hJd38omK3zE6ThfQx/q3wWNa7
xzKzYa7UXNd2Ih88RREljD3oKmM7WYWIJwW9I6ZsAWBB2RSFdDZt5kkIWMXL
eWMfGFEpI/8COBcGlWq0AatlpvZAkozuQuYrr0Qi6LXH/nWpMz3M6EAKFeIK
CSXasBZcGebZiqRoRV7zHkftMxflda++tHzNPxiJBH44+MFNBdKDHxwmr7aq
KG9BXJeKW5DQNRfAndrggA+iOc4WDU8b5uiEJ1yQFT/4n4ciUCglkVgO749/
zq0Y+d7l3YUW8bBYC9prCOJiB7e4yPzaHWmIIGAbD6R6UiFCX+nH45pB0C5V
G2YS0lBfdxWGZndDB5IJImYXF4uxDnos/qUsNZHjxC2WK3mcLcibxniZ0XDx
kZ2JUkwQcPgZHyzu858DbRBNlTgvtGoCpdSbEA9nJjlf6mltEglYh4BvPRcq
ClfishqO+tnPhBbIp8ER6htv5i4o6Itt4mArzFnaO6iDM2DkymatkbRDEpyj
gCM36lL3+sUH8ROYBgICtkKRw4+m5KnLctWrkHZbrcSYkCa35dBARaMNuy8A
gPFpQD8YGwMBBwA+TQ4HXyeB2yBl17KHbCI6V7TN6W5j+WUXqkxlKk+8poL3
ve8EiNvSwwmuQPrJWlc3JGUSNTB3MSRpiUQJ3+VbNL8nvm+I5E5o+CJdEVpY
a4egUEWR0Blf/rFSOoWhNaDa6pFMKT7xiCqw4cWOCu04vA1vALSeeqFfuh1U
kYkmAZIGI05rWM7y7Rp3jSQUnym/Y/SEHMxD8C4PaqxEkfQJlD6oFImhp61Z
I2lFzbJ4yFEpqTc0B7iV8+5W7KCCtTqDxEuxSbpdvx6V9n1DH9qwhpJz9Ni0
Ay1N0PsZSbwUnjborDQBYFfWjXlrqhzIZG5QLUUyJgk5dMZniw8Jzp5FTZ+1
73QKX2vRciXrLJKlvmApyYcDGam7yjlqWlN2aEuvks7FpSNq01ZJTtcICnmm
2Fdz2lwTYseAW8vrfU0QWHiSEVc9J/UkOfSs6EQCorRw+PbZhzcs/mkJ5dG+
9lj6PgBYVl9ZWCL6DS2BHnkrh4E2nfgfJov4QeIec+Ep2g7vEMg0+inEvAb/
6xVplxUtE/ENehMbVJFxnJMaBld1XyEVEBg9KDZ0TuY8+TVsaZYEirZLBYh3
Zsc5JIBgnHQR/aJ/JdIjlWYR3EN9wCEcXFRi4lRF14d9DnEyAiIfbsB/2ZYR
nhJ6mDVEjZdB2BFd+uYaADhKKMd2YHELXVJLG0E5mUIUN8VoDOEPejI2OxNG
kqKDnbZccWQtuwEyXhZTHbEbIUUcXIRCGPR+yQUy24FiVKh2dYVgS0KDnQQV
aqAtKQgRxXFqaQAomeQUOSiBSeVMlUUd/vYWFe7CHW5nEf2yiP7nhcGWcA0n
Py5SGVc3KEbYSQ9YIm84F8PBhi4XFrqwJBRYR7fWBHOXSTrEFViib1VXWV8R
CY4QPYXRGhmRIgGkYFyUHPDDikCyOnjSY24lHZGAiAzYcRZxQsixchRRSVRT
AiPHiuN0GJ9lKPqlXBnRJxQnig+DY3chhKyIBHLVJWclEdIRSHDRQxxxDa9h
DRfRRYwlK8B4Jc83jIchiehTI5UxQsKhD9jFEUMWj1DmCEmggPW4WnsmWbEo
FRFXPx0xkMsoL4UzjYHoRLboH43IEG1QF7ZwJ1mCGXYYERJZEWMXIRg0f9iz
IxnZHUfoEN8B/l8LlhEleRHasA8RMzEJSTqgAVkMQowTQTMUWIEQMmLLaHxt
kIU7GYyBFyMj2U0VhxE1GY+584FLCSR4hRGONpUTwY1qVRGhgx/Fc5XZtIRx
OFJcCRRjo5I5dzJnSZJGqRQ8ZZFXqXgxIpBxqZZUQZc7WTCR9ZYIZI1YYSxk
eRBZuRET540hcZIK9l/jQQDYUpiDxUxbRZT20XIrQXHbd0nqJ5kHRin6aEL8
xhKakTd68g+Dg0NsuRRqsU6YoZgQwZhpORLmCBtJlRgYWJigEVmZ1xEpFpoY
cVQMRThzUZzoIo712DmbtJF4mZcfAXcXpDGy4EHr4ZkVdX2DN5sf/rEPg5MY
shgXIdMZX5mQcsaII6FgzOmbFhQ3riJ/q0klTpQlKcZIsjmTk7RvsJkdJ5Qn
KhKO7OF3fSliHIWZEkFxb0d4Y7M2BNBsnqlDcmUYkWMczvmNo/mcyIF3vWJZ
ZdOgCNFdoHg2vwmhiKGfFaqezXUo1EQuHIqVmBceHwqhq1GcSRVT3bENivmb
v3Ef3YlH1bmi8IEa9cV/cBidGqMx1lCHiqWdBQoxQmVyPooglCE7PKIa6ZEb
DxhxP/kNommZwZaPiLELlhAHn/SkStMoPtkvU9EE98ZlbmgivVmUCaQRG5Zw
OYOcZIogpEEj6WQbp7ITL6ItT1Oj9jkQ/iuXnzNyQtqHjWlgp3fKEKtyI2mW
KDqUYQw4HCpTEEM5ofCHoJLgSADaqHh6FFWCI3ElFy+KqaWpqfZhgOhhLcny
np4pFFFXNi1KpQO0ctq2PYQnIJ8Kqo6qojyHIC/ygMSakfqQmEaFqKvxFc+i
ELDqq8YjH/eGb1MIoVFJoQk3G0oJrS6RaZrGFS/Sdohxd0PZTYmqO42QBLjE
rTWRKeNCAB9VqrZwDf7Bi0H1aJthkLPKriWRNAVTqdugDwaITWNngGooFdvK
ry8Br+NzYviITcaxGUk3ngrbM7cxQnjiDRBLHNuXd5ZgkM9asRzhro6hpj3U
iOhmPSErsh0hfxNNIAchuSSMVHOWhD8se3af6B8EQSpMtDMMerMkBxwgWZwE
ETebta9AWx5/Gj1eRVnB9bNJS3JQpaYplx69h5BR21fq9BRYGgm6gbRZCxTj
Any3kaaVGLZsEUIMazVHMUe9irZZQbJCMS5wq4WlsbJ1m7d6u7d827d++7dk
GRAAOw==
====
}

proc xth_incr_station_name {oname iii} {
  if {[regexp {^(\S+)(\@\S+)$} $oname dumm stname svname]} {
    set oname $stname
  } else {
    set svname {}
  }
  if {[regexp {^0*(\d+)$} $oname dum s2]} {
    set numlen [string length $dum]
    incr s2 $iii
    if {[string length $s2] < $numlen} {
      set s2 [format [join [list "%0" $numlen d] ""] $s2]
    }
    return "$s2$svname"
  }
  if {[regexp {^(.*\D)(0*(\d+))$} $oname dumm s1 s3 s2]} {
    set numlen [string length $s3]
    incr s2 $iii
    if {[string length $s2] < $numlen} {
      set s2 [format [join [list "%0" $numlen d] ""] $s2]
    }
    return "$s1$s2$svname"
  } 
  if {[regexp {^(.*)(\D)$} $oname dumm s2 s1]} {
    set avs1 [scan $s1 %c]
    if {(($avs1 >= 65) && ($avs1 < 90)) || (($avs1 >= 97) && ($avs1 < 122))} {
      incr avs1
      return "$s2[format %c $avs1]$svname"
    }
  } 
  if {[regexp {^(0*(\d+))(\D.*)$} $oname dumm s3 s2 s1]} {
    set numlen [string length $s3]
    incr s2 $iii
    if {[string length $s2] < $numlen} {
      set s2 [format [join [list "%0" $numlen d] ""] $s2]
    }
    return "$s2$s1$svname"
  } 
  return "$oname$svname"
}


proc xth_getdir {fname} {
  set d [file dirname $fname]
  if {[file exists $d] && [file isdirectory $d]} {
    return $d
  } 
  return {}
}

therion/xtherion/help.tcl0000644000076400010400000001001511051022770016551 0ustar  userAdministrators##
## help.tcl --
##
##     Help menu and its functions.  
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------


set hm "$xth(gui,main).hmenu"
set xth(gui,menu,help) $hm

menu $hm -tearoff 0
$hm add command -label [mc "Control..."] -underline 0 -font $xth(gui,lfont) \
  -command xth_help_control_show
$hm add command -label [mc "BAC calculator..."] -underline 0 -font $xth(gui,lfont) \
  -command xth_bac_init
$hm add command -label [mc "Calibrate bitmap..."] -underline 0 -font $xth(gui,lfont) \
  -command xth_calibrate_bitmap
$hm add command -label [mc "About..."] -underline 0 -font $xth(gui,lfont) \
  -command {
    xth_about_show 1
    xth_about_status $xth(prj,title)
  }

proc xth_help_control_show {} {
  global xth
  if {[winfo exists $xth(gui,main).help_control]} {
    focus $xth(gui,main).help_control
  } else {
    xth_help_control_init
  }
}

proc xth_help_control_search {} {
}

proc xth_help_control_init {} {

  global xth
  
  set f $xth(gui,main).help_control
  toplevel $f
  wm transient $f $xth(gui,main)
  wm title $f "Xtherion control"

  set ff $f.lf
  frame $ff
  Entry $ff.se -font $xth(gui,lfont)
  Button $ff.sb -text [mc "Search"] -anchor center -font $xth(gui,lfont) \
  -command xth_help_control_search -width 8
  Button $ff.cb -text [mc "Close"] -anchor center -font $xth(gui,lfont) \
  -command "destroy $f" -width 8
  grid columnconf $ff 2 -weight 1
#  grid columnconf $ff 0 -weight 1
#  grid columnconf $ff 1 -weight 0
#  grid columnconf $ff 1 -weight 0
#  grid $ff.se -column 0 -row 0 -sticky news
#  grid $ff.sb -column 1 -row 0 -sticky news
  grid $ff.cb -column 2 -row 0 -sticky news


  set txb $f.tf
  frame $txb
  text $txb.txt -wrap none -font $xth(gui,lfont) \
    -relief sunken -state disabled \
    -selectbackground $xth(gui,ecolorselbg) \
    -selectforeground $xth(gui,ecolorselfg) \
    -selectborderwidth 0 \
    -yscrollcommand "$txb.sv set" \
    -xscrollcommand "$txb.sh set" 
  scrollbar $txb.sv -orient vert  -command "$txb.txt yview" \
    -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
  scrollbar $txb.sh -orient horiz  -command "$txb.txt xview" \
    -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
  grid columnconf $txb 0 -weight 1
  grid rowconf $txb 0 -weight 1
  grid $txb.txt -column 0 -row 0 -sticky news
  grid $txb.sv -column 1 -row 0 -sticky news
  grid $txb.sh -column 0 -row 1 -sticky news

  grid rowconf $f 0 -weight 1
  grid columnconf $f 0 -weight 1
  grid rowconf $f 1 -weight 0
  grid $txb -column 0 -row 0 -sticky news
  grid $ff -column 0 -row 1 -sticky news
  
 
  set sw [winfo screenwidth .]
  set sh [winfo screenheight .]
  update idletasks
  wm geometry $f +0+0
  wm geometry $f 640x480
  wm minsize $f 320 240
  set x [expr {($sw - [winfo width $f])/2}]
  set y [expr {($sh - [winfo height $f])/2}]
  wm geometry $f +$x+$y
  update idletasks
  
  $txb.txt configure -state normal
  set hlptxt [ mc "xtherion_help_control" ]  
  if {[string length $hlptxt] < 100} {
    set tmploc ::msgcat::mclocale
    ::msgcat::mclocale en
    set hlptxt [ mc "xtherion_help_control" ]  
    ::msgcat::mclocale $tmploc
  }
  $txb.txt insert end $hlptxt
    
     
  $txb.txt configure -state disabled
 
}



therion/xtherion/init.tcl0000644000076400010400000001363711102320752016577 0ustar  userAdministrators##
## init.tcl --
##
##     Initialization script.   
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------

package require BWidget

if {[catch {set imgver [package require Img]}]} {
  set xth(gui,imgfiletypes) {
	   { {Pictures} {.gif .pnm .ppm .xvi} }
	   { {PocketTopo therion export} {.txt} }
	   { {All Files}               * }
	 } 
} else {
  set xth(gui,imgfiletypes) {
	   { {Pictures} {.png .jpeg .jpg .gif .pnm .ppm .xvi} }
	   { {PocketTopo therion export} {.txt} }
	   { {All Files}                                               * }
	 } 
}

# read xtherion.ini file from THERION directory
set idir {}
if {[catch {set idir $env(THERION)}]} {
  if {![catch {set idir $env(HOME)}]} {
    append idir "/.therion"
    if {[string equal $xth(gui,platform) windows]} {
      append idir ";"
    } else {
      append idir ":"
    }
  }
  if {[string equal $xth(gui,platform) windows]} {
    if {[catch {
	append idir [registry get $xth(win32registry) InstallDir]
	}]} {
      append idir "C:/WINDOWS;C:/WINNT;C:/Program files/Therion"
    }
  } else {
    append idir "/etc:/usr/etc:/usr/local/etc"
  }
}
if {[string equal $xth(gui,platform) windows]} {
  set idirs [split $idir ";"]
} else {
  set idirs [split $idir ":"]
}

set xth(idirs) $idirs
foreach idir $xth(idirs) {
  catch {source [file join $idir xtherion.ini]}
}
catch {source xtherion.ini}

# create xth window
wm withdraw .
xth_about_show 0
toplevel $xth(gui,main)
wm withdraw $xth(gui,main)
wm protocol $xth(gui,main) WM_DELETE_WINDOW "xth_exit"
wm title $xth(gui,main) $xth(prj,name)
wm geometry $xth(gui,main) [format "%dx%d+0+0" [lindex $xth(gui,minsize) 0] \
  [lindex $xth(gui,minsize) 1]]
wm minsize $xth(gui,main) [lindex $xth(gui,minsize) 0] \
  [lindex $xth(gui,minsize) 1]
update idletasks
bind $xth(gui,main)  { 
  catch {xth_app_place $xth(app,active)}
}

set xth(gui,clock) "00:00"

# redefine some public key bindigs
if {$xth(gui,bindinsdel)} {
  bind Text  { }
}
bind Text <$xth(kb_control)-Key-o> "#"
bind Text <$xth(kb_control)-Key-a> "#"
bind Text <$xth(kb_control)-Key-i> "#"
bind Text <$xth(kb_control)-Key-s> "#"
bind Text <$xth(kb_control)-Key-w> "#"
bind Text <$xth(kb_control)-Key-q> "#"
bind Text <$xth(kb_control)-Key-x> "#"
bind Text <$xth(kb_control)-Key-n> "#"
bind Text <$xth(kb_control)-Key-p> "#"
bind Text <$xth(kb_control)-Key-c> "#"
bind Text <$xth(kb_control)-Key-v> "#"
bind Text <$xth(kb_control)-Key-f> "#"
bind Text <$xth(kb_control)-Key-h> "#"
bind Text <$xth(kb_control)-Key-z> "#"
bind Text <$xth(kb_control)-Key-y> "#"
bind Text <$xth(kb_control)-Key-d> "#"
bind Text <$xth(kb_control)-Key-k> "#"
bind Text <$xth(kb_control)-Key-r> "#"

bind Entry <$xth(kb_control)-Key-d> "#"
bind Entry <$xth(kb_control)-Key-k> "#"

set xth(gui,bind,text_tab) [bind Text ]
set xth(gui,bind,text_return) [bind Text ]
bind Text  "#"
bind Text  "#"

if {[string length $xth(gui,initdir)] == 0} {
  if {[catch {
    set xth(gui,initdir) [registry get $xth(win32registry) XTherionDir]
  }]} {
    set xth(gui,initdir) [pwd]
  }
}

proc thememc {tt} {
  set trans [mc $tt]
  if {[string equal $tt $trans]} {
    set trans [lindex $tt 1]
    regsub -all {[\-\:]} $trans { } trans
  }
  return $trans
}

set alllist {}
foreach type $xth(point_types) {
  lappend alllist [list point $type]
}
foreach type $xth(line_types) {
  lappend alllist [list line $type]
}
foreach type $xth(area_types) {
  lappend alllist [list area $type]
}
set tmp [mc "theme all-symbols"]
set alllist [linsert $alllist 0 {theme all-symbols}]
set xth(me,themes) "$alllist $xth(me,themes)"
set xth(me,themes,list) {}
set xth(me,themes,showlist) {}

# process themes
set acttheme all-symbols
foreach itm $xth(me,themes) {
  set key [lindex $itm 0]
  set value [lindex $itm 1]
  switch $key {
    theme {
      lappend xth(me,themes,list) $value
      lappend xth(me,themes,showlist) [thememc $itm]
      set xth(me,themes,$value,point,list) {}
      set xth(me,themes,$value,point,xlist) {}
      set xth(me,themes,$value,line,list) {}
      set xth(me,themes,$value,line,xlist) {}
      set xth(me,themes,$value,area,list) {}
      set xth(me,themes,$value,area,xlist) {}
      set acttheme $value
    }
    point {
      lappend xth(me,themes,$acttheme,point,list) $value
      lappend xth(me,themes,$acttheme,point,xlist) [list [thememc $itm] $value]
    }
    line {
      lappend xth(me,themes,$acttheme,line,list) $value
      lappend xth(me,themes,$acttheme,line,xlist) [list [thememc $itm] $value]
    }
    area {
      lappend xth(me,themes,$acttheme,area,list) $value
      lappend xth(me,themes,$acttheme,area,xlist) [list [thememc $itm] $value]
    }
  }
}

proc xth_me_sortxlist {cl} {
  set cl [lsort -index 0 $cl]
  set hl {}
  set sl {}
  foreach xl $cl {
    lappend sl [lindex $xl 0]
    lappend hl [lindex $xl 1]
  }
  return [list $sl $hl]
}

foreach tm $xth(me,themes,list) {
  foreach itm {point line area} {
    set lists [xth_me_sortxlist $xth(me,themes,$tm,$itm,xlist)]
    set xth(me,themes,$tm,$itm,showlist) [lindex $lists 0]
    set xth(me,themes,$tm,$itm,hidelist) [lindex $lists 1]
    unset xth(me,themes,$tm,$itm,xlist)
  }
}

therion/xtherion/lang/0000755000076400010400000000000012050456040016042 5ustar  userAdministratorstherion/xtherion/lang/Makefile0000644000076400010400000000007110625665302017511 0ustar  userAdministratorsall:
	perl process.pl
  
update:
	perl process.pl update
therion/xtherion/lang/process.pl0000755000076400010400000001543310720537200020066 0ustar  userAdministrators#!/usr/bin/perl
## usage: 
## ./process.pl - generate .tcl sources from xtexts.txt
## ./process.pl update - find new strings to translate and load all 
##   xtexts_xy.txt into xtexts.txt
## ./process.pl export[-empty] xy - export xtexts_xy.txt with texts
##   for translation. If export-empty is used, only untranslated strings
##   are exported

@trans_sources = (
  "../app.tcl",
  "../bac.tcl",
  "../cp.tcl",
  "../cp_procs.tcl",
  "../ctrl.tcl",
  "../me.tcl",
  "../me_cmds.tcl",
  "../me_imgs.tcl",
  "../me_cmds2.tcl",
  "../te.tcl",
  "../help.tcl",
  "../init.tcl",
  "../tools.tcl",
  "../global.tcl",
);

sub read_lang_file {
  # nacita subor do hashu a vrati na neho referenciu
  my $fn = shift;
  my $lcode = shift;
  my $src = shift;
  open(INP,"$fn") || die("error: can't open $fn for input\n");
  if (defined($lcode)) {
    $lcode = check_language($lcode);
  } else {
    $lcode = "";
  }
  my %res;
  if (defined($src)) {
    %res = %{$src};
  } else {
    %res = ();
  }
  my $itm = "";
  my $lnum = 0;
  my $cmnt = "";
  while ($ln = ) {
    $lnum++;
#    print "LINE: $ln";
    if ($ln =~ /^\s*(\#.*)/) {
      $cmnt .= "$1\n";
#      print "COMMENT\n";
      next;
    } elsif ($ln =~ /^\s*therion\:\s*(.*\S)\s*$/) {
      $itm = $1;
      $res{$itm}{therion} = $lnum;
      $res{$itm}{"therion-cmnt"} = $cmnt;
      $cmnt = "";
#      print "THERION: $itm\n";
    } elsif (($ln =~ /^\s*(\w+)\:\s*(.*\S)\s*$/) && (length($itm) > 0)) {
      ($lng, $trn) = ($1, $2);
      $clng = check_language($lng);
      if (length($lng) == 0) {
        warn("warning: invalid language \"$lng\" ($fn:$lnum)\n");
      }
      if ((length($lcode) == 0) || (substr($clng,0,2) eq $lcode)) {
        $res{$itm}{$clng} = $trn;
        $res{$itm}{"$clng-cmnt"} = $cmnt;
      }
      $cmnt = "";
#      print "LANGUAGE: $clng => $trn\n";
    } elsif ($ln !~ /^\s*$/) {
      warn("warning: error parsing $fn:$lnum\n");
    }
  }
  close(INP);
  return \%res;
}

sub check_language {
  my $lng = shift;
  if ($lng =~ /^([A-Za-z]{2})([\_\-]{1}([A-Za-z]{2})){0,1}$/) {
    if (length($3) > 0) {
      return (lc($1) . "_" . uc($3))
    } else {
      return (lc($1))
    }
  } else {
    return "";
  }
}

sub write_lang_file {
  my $fn = shift;
  my $href = shift;
  my %hr = %{$href};

  open(OUT,">$fn") || die("error: can't open $fn for output\n");
  
  my %sh = ();
  for $key (keys %hr) {
#    print "SORTING: $key -> $hr{$key}{therion}\n";
    $sh{$hr{$key}{therion}} = $key;
  }
  
  @nkeys = sort {$a <=> $b} (keys %sh);
  for $key (@nkeys) {
    print OUT $hr{$sh{$key}}{"therion-cmnt"};
    print OUT "therion: $sh{$key}\n";
    for $lkey (sort keys %{$hr{$sh{$key}}}) {
      if (($lkey !~ /^the/) && ($lkey !~ /\-cmnt/)) {
        print OUT $hr{$sh{$key}}{"$lkey-cmnt"};
        print OUT "$lkey: ". $hr{$sh{$key}}{$lkey} ."\n";
      }
    }
    print OUT "\n";
  }
  
  close(OUT);
  
}

sub str2esc {
  $str = shift;
  $ret = "";
  for($i = 0; $i < length($str); $i++) {
    $co = ord(substr($str,$i,1));
    if (($co > 31) && ($co < 128)) {
      $ret .= chr($co);
    } else {
      $ret .= sprintf("\\%o", $co);
    }
  }
  return $ret;
}


sub write_sources {
  my $href = shift;
  my %hr = %{$href};
  open(OUT,">../msgxth.tcl") || die("error: can't open ../msgxth.tcl for output\n");
  print OUT "# file generated automatically - do not modify!\n\n";

  my %sh = ();
  
  for $key (keys %hr) {
    $sh{$hr{$key}{therion}} = $key;
  }  
  my @nkeys = sort {$a <=> $b} (keys %sh);
  
  for $key (@nkeys) {
    for $lkey (sort keys %{$hr{$sh{$key}}}) {
      if (($lkey !~ /^the/) && ($lkey !~ /\-cmnt/)) {
        print OUT "  ::msgcat::mcset $lkey \"$sh{$key}\" [encoding convertfrom utf-8 \"". str2esc($hr{$sh{$key}}{$lkey}) ."\"]\n";
      }
    }
    print OUT "\n";
  }
  close(OUT);
  
}


sub update_todo_list {
  my $href = shift;
  my %hr = %{$href};
  
  # prejde vsetky kluce a priradi im vysoke cisla
  my $maxnm = -1;
  foreach $key (keys %hr) {
    if ($hr{$key}{therion} > $maxnm) {
      $maxnm = $hr{$key}{therion};
    }
  }
  $maxnm = -1 - $maxnm;
  
  foreach $key (keys %hr) {
    $hr{$key}{therion} += $maxnm;
  }
  
  my $i = 0;
  foreach $fn (@trans_sources) {
    print "updating definitions from $fn ...";
    open(INP,"$fn") || die("error: can't open $fn for input\n");
    my @lines = ;
    close(INP);
    my $ln = join('',@lines);
    $ln =~ s/\[mc\ /\n\[mc\ /sg;
    @lines = split(/\n/,$ln);
    foreach $ln (@lines) {
      $i++;
      if ($ln =~ /^\[mc\ \"(.*)\"/) {
        $hr{$1}{therion} = $i;
      }
    }
    print " done\n";
  }
  
  #vypise warningy
  foreach $key (keys %hr) {
    if ($hr{$key}{therion} < 0) {
      warn("warning: expression \"$key\" doesn't need to be translated\n");
    }
  }
  
  return \%hr;
}


sub backup_file {
  my $fn = shift;
  
  open(INP,"$fn") || die("error: can't open $fn for input\n");
  my @lines = ;
  close(INP);

  open(OUT,">$fn~") || die("error: can't open $fn~ for output\n");
  print OUT @lines;
  close(OUT);

}


sub export_language {
  (my $fn, my $lng, my $href, my $onlyempty) = (shift, shift, shift, shift);
  my %hr = %{$href};
  open(OUT,">$fn") || die("error: can't open $fn for output\n");

  my %sh = ();
  
  for $key (keys %hr) {
    $sh{$hr{$key}{therion}} = $key;
  }
  
  my @nkeys = sort {$a <=> $b} (keys %sh);
  for $key (@nkeys) {
    my $toexp = 1;
    if ($onlyempty) {
      for $lkey (sort keys %{$hr{$sh{$key}}}) {
        if ((substr($lkey,0,2) eq $lng) && ($lkey !~ /^the/) && ($lkey !~ /\-cmnt/)) {
          $toexp = 0;
        }
      }
    }
    if ($toexp) {
      print OUT $hr{$sh{$key}}{"therion-cmnt"};
      print OUT "therion: $sh{$key}\n";
      my $posc = "$lng:\n";
      for $lkey (sort keys %{$hr{$sh{$key}}}) {
        if ((substr($lkey,0,2) eq $lng) && ($lkey !~ /^the/) && ($lkey !~ /\-cmnt/)) {
          print OUT $hr{$sh{$key}}{"$lkey-cmnt"};
          print OUT "$lkey: ". $hr{$sh{$key}}{$lkey} ."\n";
          $posc = "";
        }
      }
      print OUT $posc;
      print OUT "\n";
    }
  }

  close(OUT);
  
}


$rf = read_lang_file("xtexts.txt");
# ak update
if ($ARGV[0] =~ /^update$/i) {
  opendir(CDR,".");
  @updfiles = grep /^xtexts\_[a-z]{2}\.txt$/, readdir(CDR);
  foreach $ufn (@updfiles) {
    my $lcode = substr($ufn,7,2);
    print "updating $lcode translations ...";
    $rf = read_lang_file($ufn,$lcode,$rf);
    backup_file("$ufn");
    unlink($ufn) || $quietdel || warn("warning: can't delete $ufn\n");
    print " done\n";
  }
  closedir(CDR);
  backup_file("xtexts.txt");
  $rf = update_todo_list($rf);
  write_lang_file("xtexts.txt",$rf);
  write_sources($rf);
} elsif ($ARGV[0] =~ /^export(\-empty)?$/i) {
  my $onlyempty = $1;
  my $lng = check_language($ARGV[1]);
  if (length($lng) != 2) {
    die("error: invalid language \"$ARGV[1]\"\n");
  }
  export_language("xtexts_$lng.txt",$lng,$rf,$onlyempty);
} else {
  write_sources($rf);
}

therion/xtherion/lang/xtexts.txt0000644000076400010400000043536111542657016020171 0ustar  userAdministratorstherion: Drag to resize control panel.
bg: Плъзнете, за да промените размера на ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ð½Ð¸Ñ Ð¿Ð°Ð½ÐµÐ»
cz: Změnit šířku panelu.
de: Ziehen um Größe zu ändern.
el: Drag για Ï€ÏοσαÏμογή μεγέθους πίνακα ελέγχου.
en: Drag to resize control panel.
es: Arrastar para cambiar el tamaño del panel de control.
it: Trascina per ridimensionare il pannello dei controlli
ru: ПеретаÑкивайте Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° панели
sk: Rozšíriť alebo zúžiť okno kontrolných panelov.
sq: levize per te rritur dritaren kontrolluese

therion: File
bg: Файл
cz: Soubor
de: Datei
el: ΑÏχείο
en: File
es: Archivo
it: File
ru: Файл
sk: Súbor
sq: fajlli

therion: Maximize
bg: Увеличаване
cz: Maximalizovat
de: Maximieren
el: Μεγιστοποίηση
en: Maximize
es: Maximizar
it: Massimizza
ru: Развернуть
sk: Maximalizovať
sq: rrite ne maksimum

therion: Normalize
bg: Ðормализиране
cz: Normální velikost
de: Normalgröße
el: Κανονικό μέγεθος
en: Normalize
es: Normalizar
it: Normalizza
ru: Свернуть
sk: Normálna veľkosť
sq: normalizo

therion: Switch panels
bg: Превключи панела
cz: PÅ™ehoÄ panely
de: Panel verschieben
el: Αλλαγή παÏάθυÏου
en: Switch panels
es: Alternar paneles
it: Cambia posto al pannello
ru: Переключить панели
sk: PrehoÄ panely
sq: nderro panelat

therion: Toggle toolbar
bg: Превключи панела Ñ Ð¸Ð½Ñтрументи
cz: Vypnout/zapnout lištu nástrojů
de: Werkzeugleiste anzeigen/verbergen
el: Εμφάνιση / μη-εμφάνιση γÏαμμής εÏγαλείων
it: Mostra/Nascondi la barra strumenti
ru: Переключить панель инÑтрументов
sk: Zapnúť/vypnúť panel
sq: dritarja aktivizuese

therion: KBD encoding
bg: Кодировка на клавиатурата
cz: Kódování klávesnice
de: Zeichensatz
el: Κωδικοποίηση πληκτÏολογίου
en: KBD encoding
es: Codificación teclado
it: Encoding della tastiera
ru: Кодировка клавиатуры
sk: Kódovanie klávesnice
sq: KBD-kodimi

therion: Window
bg: Прозорец
cz: Okno
de: Fenster
el: ΠαÏάθυÏο
en: Window
es: Ventana
it: Finestra
ru: Окно
sk: Okno
sq: dritarja

therion: Quit
bg: Изход
cz: Konec
de: Beenden
el: Έξοδος
en: Quit
es: Salir
it: Esci
ru: Выход
sk: UkonÄiÅ¥
sq: mbylle

therion: Help
bg: Помощ
cz: Nápověda
de: Hilfe
el: Βοήθεια
en: Help
es: Ayuda
it: Aiuto
ru: Помощь
sk: Pomoc
sq: ndihma

therion: BAC calculator
bg: Ðлкохолен калкулатор
cz: Alkohol tester
de: Blutalkoholrechner
el: Αλκοτέστ
en: BAC calculator
es: Borrachímetro
it: Calcolatore BAC
ru: КалькулÑтор алкоголÑ
sk: Alkohol tester
sq: llogaritesi I alkoolit

therion: Biometric data
bg: Биометрични данни
cz: Biometrické údaje
de: Persönliche Angaben
el: ΒιομετÏικά δεδομένα
en: Biometric data
es: Datos biométricos
it: Dati biometrici
ru: БиометричеÑкие данные
sk: Biometrické údaje
sq: shenimet biometrike

therion: age
bg: ВъзраÑÑ‚
cz: věk
de: Alter
el: ηλικία
en: age
es: edad
it: età
ru: ВозраÑÑ‚
sk: vek
sq: mosha

therion: years
bg: Години
cz: let
de: Jahre
el: έτη
en: years
es: años
it: anni
ru: лет
sk: rokov
sq: vitet

therion: gender
bg: Пол
cz: pohlaví
de: Geschlecht
el: φÏλο
en: gender
es: sexo
it: sesso
ru: Пол
sk: pohlavie
sq: gjinia

therion: male
bg: Мъж
cz: muž
de: männlich
el: αÏσενικό
en: male
es: hombre
it: maschio
ru: мужчина
sk: muž
sq: mashkull

therion: female
bg: Жена
cz: žena
de: weiblich
el: θυλικό
en: female
es: mujer
it: femmina
ru: женщина
sk: žena
sq: femer

therion: height
bg: РъÑÑ‚
cz: výška
de: Größe
el: Ïψος
en: height
es: altura
it: altezza
ru: РоÑÑ‚
sk: výška
sq: gjatesia

therion: weight
bg: Тегло
cz: váha
de: Gewicht
el: βάÏος
en: weight
es: peso
it: peso
ru: ВеÑ
sk: váha
sq: pesha

therion: Consumption data
bg: Какво Ñте пили
cz: Údaje o spotřebě
de: Alkoholkonsum
el: Δεδομένα κατανάλωσης
en: Consumption data
es: Datos de ingestión
it: Bevande assunte
ru: ХарактериÑтика принÑтого
sk: Údaje o spotrebe
sq: shenimet e hargjimeve

therion: volume
bg: КоличеÑтво
cz: objem
de: Menge
el: όγκος
en: volume
es: volumen
it: volume
ru: Объем
sk: objem
sq: volumi

therion: alcohol level
bg: КонцентрациÑ
cz: koncentrace alkoholu
de: Alkoholgehalt
el: πεÏιεκτικότητα σε αλκοόλ
en: alcohol level
es: contenido alcohólico
it: tasso alcolico
ru: КрепоÑть
sk: koncentrácia
sq: sasia e alkoolit

therion: time elapsed
bg: Минало време
cz: uplynulý Äas
de: vergangene Zeit
el: ÏŽÏα που πέÏασε
en: time elapsed
es: tiempo transcurrido
it: tempo trascorso
ru: Прошло времени
sk: uplynutý Äas
sq: koha e duhur

therion: Calculate
bg: ИзчиÑли
cz: VypoÄítat
de: Berechne
el: υπολογισμός
en: Calculate
es: Calcular
it: Calcola
ru: ПоÑчитать
sk: VypoÄítaÅ¥
sq: llogarit

therion: BAC
bg: Ðаличие на алкохол в кръвта
cz: Hladina alkoholu v krvi
de: Blutalkoholpegel
el: ΠεÏιεκτικότητα αίματος σε αλκοόλ
en: BAC
es: tasa alcoholemia
it: BAC
ru: BAC
sk: Hladina alkoholu
sq: perqindja e alkoolit ne gjak-BAC

therion: ETA
bg: Време до изтрезнÑване
cz: Čas do vystřízlivění
el: Αναμενόμενη ÏŽÏα άφιξης
en: ETA
es: TBE (Tiempo Bajada Estimado)
it: ETA
ru: ETA
sk: ÄŒas do vytriezvenia
sq: ETA

therion: hours
bg: чаÑове
cz: hodin
de: Stunden
el: ÏŽÏες
en: hours
es: horas
it: ore
ru: чаÑов
sk: hodín
sq: oret

therion: MRR
bg: MRR
cz: Rychlost odbourávání
el: MRR
en: MRR
es: tasa de descenso
it: MRR
ru: MRR
sk: Rýchlosť odburávania
sq: MRR

therion: Compiler
bg: Компилатор
cz: Kompilátor
de: Compiler
el: Συντάκτης
en: Compiler
es: Compilador
it: Compilatore
ru: КомпилÑтор
sk: Kompilátor
sq: kompilatori

therion: Settings
bg: ÐаÑтройки
cz: Nastavení
de: Einstellungen
el: Ρυθμίσεις
en: Settings
es: Ajustes
it: Impostazioni
ru: ÐаÑтройки
sk: Nastavenia
sq: setingu

therion: Survey structure
bg: Структура на картировката
cz: Struktura měření (survey)
de: Messdatenstruktur
el: Δομή χαÏτογÏάφησης
en: Survey structure
es: Estructura de la poligonal
it: Struttura rilievi
ru: Структура Ñъемки
sk: Štruktúra dát
sq: struktura e matjeve

therion: Survey info
bg: ИнформациÑ
cz: Info o měření (survey)
de: Infos zur Vermessung
el: ΠληÏοφοÏίες χαÏτογÏάφησης
en: Survey info
es: Información de la poligonal
it: Informazioni rilievi
ru: ИнформациÑ
sk: Informácie
sq: informatat e matjeve

therion: Map structure
bg: Структура на картата
cz: Mapová struktura
de: Planstruktur
el: Δομή αποτÏπωσης
en: Map structure
es: Estructura del mapa
it: Struttura mappe
ru: Структура карты
sk: Mapová štruktúra
sq: struktura e hartes

therion: Preview
bg: Предварителен изглед
cz: Náhled
de: Vorschau
el: ΠÏοεπισκόπηση
it: Anteprima
ru: ПредпроÑмотр
sk: Náhľad
sq: parashiqimi

therion: Working directory
bg: Работна директориÑ
cz: Pracovní adresář
de: Arbeitsverzeichnis
el: Φάκελος εÏγασίας
en: Working directory
es: Directorio actual
it: Cartella di lavoro
ru: Рабочий каталог
sk: Pracovný adresár
sq: direktorati i punes

therion: Working directory path.
bg: Път към работната директориÑ
cz: Cesta k pracovnímu adresáři.
de: Pfad zum Arbeitsverzeichnis.
el: Φάκελος εÏγασίας
en: Shows working directory path.
es: Muestra el directorio actual.
it: Path della cartella di lavoro
ru: Путь к рабочему каталогу.
sk: Cesta k pracovnému adresáru.
sq: tregon shtegun e direktoratit punues

therion: Configuration file
bg: Конфигурационен файл
cz: KonfiguraÄní soubor
de: Konfigurationsdatei
el: ΑÏχείο ÏƒÏ‡Î·Î¼Î±Ï„Î¹ÏƒÎ¼Î¿Ï (config)
en: Configuration file
es: Archivo configuración
it: File di configurazione
ru: Конфигурационный файл
sk: KonfiguraÄný súbor
sq: arkivi I konfiguracionit

therion: Configuration file name.
bg: Име на конфигурационниÑÑ‚ файл
cz: Jméno konfiguraÄního souboru.
de: Name der Konfigurationsdatei.
el: Εμφανίζει το όνομα του αÏχείου ÏƒÏ‡Î·Î¼Î±Ï„Î¹ÏƒÎ¼Î¿Ï (config)
en: Shows configuration file name.
es: Muestra el nombre del archivo de configuración.
it: Nome del file di configurazione
ru: Ð˜Ð¼Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð¾Ð³Ð¾ файла.
sk: Meno konfiguraÄného súboru.
sq: tregon emrin e arkivit te konfiguracionit

therion: Command line options
bg: Опции на командниÑÑ‚ ред
cz: Argumenty programu
de: Kommandozeilenoptionen
el: Επιλογές γÏαμμής εντολής
en: Command line options
es: Opciones de línea de comandos
it: Opzioni del comando
ru: Опции командной Ñтроки
sk: Argumenty programu
sq: opcionet e vijes komanduese

therion: Therion command line options.
bg: Опции на командниÑÑ‚ ред на Терион
cz: Argumenty therionu pro příkazovou řádku.
de: Therion Kommandozeilenoptionen.
el: Εδώ μποÏείτε να πεÏάσετε τις επιλογές γÏαμμής εντολής στο Therion
en: Here you can pass command line options to Therion.
es: Aquí se pueden pasar a therion opciones de línea de comandos
it: Opzioni del comando therion
ru: Опции командной Ñтроки Therion.
sk: Argumenty programu v príkazovom riadku.
sq: ketu ju mund te bartni vijen komanduese te arkivit tek Therion-i

therion: Run therion.
bg: ПуÑкане на therion
cz: Spustí therion.
de: Therion ausführen.
el: Εκτέλεση του Therion
en: Run therion.
es: Ejecutar therion.
it: Esegui therion
ru: ЗапуÑк therion.
sk: Spustiť therion.
sq: aktivizo Therion-in

therion: Xpdf
bg: Xpdf
cz: Xpdf
de: Xpdf
it: Xpdf
sk: Xpdf
sq: Xpdf

therion: Acrobat Reader
bg: Acrobat Reader
cz: Acrobat Reader
de: Acrobat Reader
it: Acrobat Reader
sk: Acrobat Reader
sq: lexuesi I programit-Akrobat

therion: PDF file path.
bg: Път към PDF файл
cz: Cesta k PDF souboru
de: Pfad zur PDF-Datei.
el: υποφάκελος του .pdf
it: File PDF
ru: PDF-файл Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра
sk: Cesta k PDF súboru.
sq: arkivi-PDF

therion: Survey informations.
bg: Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° картировката
cz: Informace o jednotlivých měřeních (survey).
de: Infos zur Vermessung.
el: Στοιχεία χαÏτογÏάφησης
en: Survey informations.
es: Estadísticas de la poligonal.
it: Informazioni del rilievo
ru: Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ Ñъемке.
sk: Informácie o Äastiach.
sq: informatat e matjeve

therion: User interface is not active. To activate it, open existing file or create new one.
bg: ПотребителÑкиÑÑ‚ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ðµ неактивен. За да го активирате отворете ÑъщеÑтвуващ файл или Ñъздайте нов.
cz: Uživatelské rozhraní není aktivní. Pro jeho aktivaci otevřete existující soubor nebo vytvořte nový.
de: Fenster nicht aktiv. Um es zu benutzen, öffne eine existierende Datei oder lege eine neue an.
el: ΔιασÏνδεση χÏήστη ανενεÏγή. Για να ενεÏγοποιηθεί, ανοίξτε υπάÏχον αÏχείο ή δημιουÏγήστε νέο.
en: User interface is not active. To activate it, open existing file or create new one.
es: El interfaz está inactivo. Para activarlo, abre un archivo existente o crea uno nuevo.
it: L'interfaccia utente non è attiva. Per attivarla apri un file o creane uno
ru: Ð˜Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð½ÐµÐ°ÐºÑ‚Ð¸Ð²ÐµÐ½. Ð”Ð»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ð¸Ð¸ откройте ÑущеÑтвующий файл или Ñоздайте новый.
sk: XTherion momentálne nie je aktívny. Otvorte existujúci konfiguraÄný súbor alebo vytvorte nový.
sq: interfejsi I perdoruesit nuk eshte aktiv. Ta aktivizosh, hape arkivin egzistues apo hape nje te ri.

therion: loading compiler...
bg: Зареждане на компилатора...
cz: nahrávám kompilátor...
de: Lade Compiler...
el: φόÏτιση συντάκτη...
en: loading compiler...
es: compilador...
it: compilatore ...
ru: загрузка компилÑтора...
sk: kompilátor...
sq: duke lexuar kompiluesin…

therion: Running therion ...
bg: Стартиране на therion ...
cz: Probíhá kompilace ...
de: Therion ausführen ...
el: Εκτελείται το Therion
en: Running therion ...
es: Ejecutando therion ...
it: esecuzione therion ...
ru: ЗапуÑк therion ...
sk: Prebieha výpoÄet...
sq: duke ve ne pune therion-in…

therion: RUNNING
bg: Обработка
cz: PRACUJI
de: ARBEITE
el: ΕΚΤΕΛΕΣΗ
en: RUNNING
es: EJECUTANDO
it: ESECUZIONE
ru: ОБРÐБОТКÐ
sk: VÃPOÄŒET
sq: ne punim e siper

therion: ERROR
bg: Грешка
cz: CHYBA
de: FEHLER
el: ΣΦΑΛΜΑ
en: ERROR
es: ERROR
it: ERRORE
ru: ОШИБКÐ
sk: CHYBA
sq: gabim

therion: WARNING
bg: Внимание!
de: WARNUNG

therion: OK
bg: ОК
cz: OK
de: OK
el: ΟΚ
en: OK
es: OK
it: OK
ru: УСПЕХ
sk: OK
sq: ne rregull-O.K.

therion: Reading therion log file ...
bg: Четене на лог-файла на therion ...
cz: NaÄítám LOG soubor therionu ...
de: Lese Therion Logdatei ...
el: Ανάγνωση του αÏχείου log therion
en: Reading therion log file ...
es: Leyendo archivo log ...
it: Lettura file di log di therion ...
ru: Чтение лог-файла therion...
sk: NaÄitávam LOG súbor.
sq: duke lexuar arkivin hyres te Therion-it

therion: \nerror opening therion.log file\n
bg: \nгрешка при отварÑнето на файла therion.log\n
cz: \nchyba při otevírání souboru therion.log\n
de: \nFehler beim Öffnen von therion.log\n
el: \nσφάλμα κατα το άνοιγμα του αÏχείου therion.log\n
en: \nerror opening therion.log file\n
es: \nerror abriendo el archivo therion.log\n
it: \nerrore in apertura del file therion.log
ru: \nошибка Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° therion.log\n
sk: \nchyba pri Äítaní súboru therion.log\n
sq: gabim gjate hapjes se Therion-it.arkivin hyres/n

therion: Show or hide this control panel
bg: Показване/Ñкриване на контролниÑÑ‚ панел
cz: Zobrazit/skrýt ovládací panel
de: Dieses Panel anzeigen oder verbergen
el: Κάντε κλικ για εμφάνιση ή μη-εμφάνιση του πίνακα ελέγχου
en: Click to show or hide this control panel.
es: Clicar para mostrar u ocultar este panel de control
it: Visualizza o nascondi questo pannello
ru: Показать или ÑпрÑтать панель
sk: StlaÄte ak chcete zobraziÅ¥ alebo skryÅ¥ tento panel
sq: kliko te hapesh ose te mbyllesh kete panel te kontrollit

therion: loading map editor ...
bg: Зареждане на редактора на карти ...
cz: nahrávám mapový editor...
de: Lade Karteneditor ...
el: φόÏτιση του επεξεÏγαστή αποτÏπωσης...
en: loading map editor ...
es: editor de mapas...
it: editor di mappa ...
ru: загрузка редактора карт...
sk: Mapový editor
sq: duke lexuar permiresuesin e hartave…

therion: Undo %s
bg: ОтмÑна
cz: Zpět - %s
de: Rückgängig %s
el: ΑναίÏεση %s
en: Undo %s
es: Deshacer %s
it: Indietro %s
ru: Отменить %s
sk: Späť - %s
sq: prishe %s

therion: Redo %s
bg: ВъзÑтановÑване
cz: Znovu - %s
de: Wiederholen %s
el: Επανάληψη %s
en: Redo %s
es: Rehacer %s
it: Rifai %s
ru: Вернуть %s
sk: Opakovať- %s
sq: beje perseri %s

therion: %s \[%s\] -- multiple encoding commands in file
bg: %s \[%s\] -- нÑколко команди encoding във файла
cz: %s \[%s\] -- vícenásobný výskyt příkazu encoding v jednom souboru
el: %s \[%s\] -- πολλαπλές εντολές κωδικοποίησης στο αÏχείο
en: %s \[%s\] -- multiple encoding commands in file
es: %s \[%s\] -- múltiples comandos de codificación en el archivo
it: %s \[%s\] -- encoding ripetuto nel file di comandi
ru: %s \[%s\] -- неÑколько команд encoding в файле
sk: %s \[%s\] -- viac encoding príkazov v jednom súbore
sq: %s \[%s\] –shumezo komandat te deshifrimit ne arkiv

therion: %s \[%s\] -- unknown encoding -- %s
bg: %s \[%s\] -- неизвеÑтна кодировка -- %s
cz: %s \[%s\] -- neznámé kódování znaků -- %s
el: %s \[%s\] -- άγνωστη κωδικοποίηση -- %s
en: %s \[%s\] -- unknown encoding -- %s
es: %s \[%s\] -- codificación desconocida -- %s
it: %s \[%s\] -- encoding non conosciuto -- %s
ru: %s \[%s\] -- неизвеÑÑ‚Ð½Ð°Ñ ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²ÐºÐ° -- %s
sk: %s \[%s\] -- neznáme kódovanie znakov -- %s
sq: %s \[%s\] – deshifrim I panjohur -- %s

therion: adjusting area
bg: регулиране на облаÑтта
cz: přizpůsobení pracovní plochy
de: Fläche anpassen
el: Ï€ÏοσαÏμογή επιφάνειας
en: adjusting area
es: ajustando área
it: aggiustamento area
ru: регулирование облаÑти
sk: prispôsobenie pracovnej plochy

therion: zooming
bg: мащабиране
cz: zoomování
de: Zoomen
el: μεγέθυνση
en: zooming
es: zooming
it: zooming
ru: маÑштабирование
sk: zoomovanie
sq: zmadhimi

therion: Zoom %d %%
bg: мащаб %d %%
cz: Zoom %d %%
de: Zoom %d %%
el: Μεγέθυνση %d %%
en: Zoom %d %%
es: Zoom %d %%
it: Zomm %d %%
ru: МаÑштаб %d %%
sk: Zoom %d %%
sq: zmadho %d %%

therion: Zooming objects ...
bg: Мащабиране на обекти ...
cz: Zoomování objektů ...
de: Zoome Objekte ...
el: Μεγέθυνση αντικειμένων...
en: Zooming objects ...
es: Zoom sobre objetos ...
it: Zoom degli oggetti ...
ru: МаÑштабирование объектов...
sk: Zoomovanie objektov ...
sq: objektet e zmadhimit…

therion: dragging image
bg: Плъзгане на изображение
cz: přesouvání obrázku
de: Bild verschieben
el: μετακίνηση εικόνας
en: dragging image
es: arrastrando imagen
it: trascinamento immagine
ru: перетаÑкивание изображениÑ
sk: Presúvanie obrázku
sq: imazhi per tu vizatuar

therion: Map Editor
bg: Редактор на карти
cz: Mapový editor
de: Karteneditor
el: ΕπεξεÏγαστής αποτÏπωσης
en: Map Editor
es: Editor de mapas
it: Editor di mappa
ru: Редактор карт
sk: Mapový Editor
sq: permiresuesi I hartave

therion: File commands
bg: Команди във файл
cz: Příkazy
de: Dateibefehle
el: Αντικείμενα
en: Objects
es: Objetos
it: Oggetti
ru: Команды в файле
sk: Príkazy v súbore
sq: objektet

therion: Search & Select
bg: ТърÑене и избиране
cz: Najít & Vybrat
de: Suchen & auswählen
el: Αναζήτηση και επιλογή
en: Search & Select
es: Buscar y Seleccionar
it: Cerca e seleziona
ru: ПоиÑк и Выделение
sk: Hľadaj a Vyber
sq: kerko dhe zgjidh

therion: Command preview
bg: Преглед на команда
cz: Náhled příkazu
de: Kommandovorschau
el: ΠÏοεπισκόπηση εντολής
en: Command preview
es: Ver comandos
it: Anteprima comando
ru: ПроÑмотр команды
sk: Náhľad príkazu
sq: komanda e parashiqimit

therion: Point control
bg: Точка
cz: Bod
de: Punkte bearbeiten
el: Σημεία
en: Points
es: Puntos
it: Punti
ru: Точка
sk: Bod
sq: pikat

therion: Line control
bg: ЛиниÑ
cz: Křivka
de: Linien bearbeiten
el: ΓÏαμμές
en: Lines
es: Líneas
it: Linee
ru: ЛиниÑ
sk: Krivka
sq: rjeshtat

therion: Line point control
bg: Точка на линиÑ
cz: Bod křivky
de: Linienpunkte bearbeiten
el: Σημεία γÏαμμών
en: Line points
es: Puntos de línea
it: Punti della linea
ru: Точка линии
sk: Bod krivky
sq: pikat e rjeshtit

therion: Area control
bg: ОблаÑÑ‚
cz: Oblast
de: Flächen bearbeiten
el: Επιφάνειες
en: Areas
es: Areas
it: Aree
ru: ОблаÑть
sk: Plocha
sq: fushat

therion: Scrap control
bg: Скрап
cz: Scrap
de: Skizze bearbeiten
el: ΣκÏαπ
en: Scraps
es: Croquis
it: Scrap
ru: Скрап
sk: Scrap
sq: mbeturinat

therion: Text editor
bg: ТекÑтов редактор
cz: Textový editor
de: Texteditor
el: ΕπεξεÏγαστής κειμένου
en: Text editor
es: Editor de texto
it: Editor di testo
ru: Редактор
sk: Textový editor
sq: permirsuesi I tekstit

therion: Drawing area
bg: Зона на чертане
cz: Kreslící plocha
de: Zeichenfläche
el: Επιφάνεια σχεδιασμοÏ
en: Drawing area
es: Area de dibujo
it: Area di disegno
ru: Зона риÑованиÑ
sk: Pracovná plocha
sq: fusha e vizatimit

therion: Background images
bg: Фоново изображение
cz: Podkladové obrázky
de: Hintergrundbilder
el: Εικόνες φόντου
en: Background images
es: Imágenes de fondo
it: Immagini di background
ru: Фоновые изображениÑ
sk: Obrázky pozadia
sq: imazhet ne prapavije

therion: Current drawing area.
bg: Текуща зона на чертане
cz: SouÄasná kreslící plocha.
de: Aktuelle Zeichenfläche
el: ΕνεÏγή επιφάνεια σχεδιασμοÏ
en: Current drawing area.
es: Area de dibujo actual.
it: Area di disegno attiva
ru: Ð¢ÐµÐºÑƒÑ‰Ð°Ñ Ð·Ð¾Ð½Ð° риÑованиÑ.
sk: SúÄasná pracovná plocha.
sq: fusha momentale e vizatimit

therion: X min.
bg: X min.
cz: X min.
el: Ελάχιστο Χ
en: X min.
es: X min
it: Minimo X
ru: X min.
sk: Minimum X.
sq: minimum X.

therion: Y min.
bg: Y min.
cz: Y min.
el: Ελάχιστο Υ
en: Y min.
es: Y min
it: Minimo Y
ru: Y min.
sk: Minimum Y.
sq: minimum Y.

therion: X max.
bg: X max.
cz: X max.
el: Μέγιστο Χ
en: X max.
es: X max
it: Massimo X
ru: X max.
sk: Maximum X.
sq: maksimum X.

therion: Y max.
bg: Y max.
cz: Y max.
el: Μέγιστο Υ
en: Y max.
es: Y max
it: Massimo Y
ru: Y max.
sk: Maximum Y.
sq: maksimum Y.

therion: Adjust
bg: Определи
cz: Přizpůsobit
de: Anpassen
el: ΠÏοσαÏμογή
en: Adjust
es: Ajustar
it: Ridimensiona
ru: УÑтановить
sk: Prispôsob
sq: permireso

therion: Adjust drawing area to given limits.
bg: Определи зоната за чертане в зададените граници
cz: Přizpůsobí kreslící plochu daným limitům.
de: Zeichenfläche an Begrenzung anpassen.
el: ΠÏοσαÏμογή επιφάνειας σχεδίου στα δεδομένα ÏŒÏια
en: Adjust drawing area to given limits.
es: Ajustar el área de dibujo a los límites indicados.
it: Ridimensiona l'area di disegno ai limiti dati
ru: УÑтановить зону риÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð² заданных границах.
sk: Prispôsobiť pracovnú plochu daným limitom.
sq: permireso fushen e vizatimit deri ne kufijt e dhene.

therion: Auto adjust
bg: Ðвтоматично определÑне
cz: Auto přizpůs.
de: Automatisch anpassen
el: Αυτόματη Ï€ÏοσαÏμογή
en: Auto adjust
es: Autoajustar
it: Auto-ridimensiona
ru: Ðвто
sk: Automaticky
sq: permiresimi automatik

therion: Adjust drawing area to automatically calculated limits.
bg: Определи автоматично зоната за чертане
cz: Automaticky přizpůsobí kreslící plochu všem objektům.
de: Zeichenfläche an berechnete Begrenzung anpassen.
el: ΠÏοσαÏμογή επιφάνειας σχεδίου στα ÏŒÏια που αυτομάτως οÏίστηκαν
en: Adjust drawing area to automatically calculated limits.
es: Ajustar área de dibujo automáticamente.
it: Ridimensiona l'area di disegno ai limiti calcolati
ru: ÐвтоматичеÑки уÑтановить зону риÑованиÑ.
sk: Automaticky prispôsobiť pracovnú plochu všetkým objektom.
sq: permireso fushen e vizatimit ne kufirin e llogaritur automatikisht.

therion: zoom
bg: мащаб
cz: zoom
de: Zoom
el: μεγέθυνση
en: zoom
es: zoom
it: zoom
ru: маÑштаб
sk: zoom
sq: zmadho

therion: Zoom drawing area.
bg: Мащабиране на зоната за чертане
cz: Zoom kreslící plochy.
de: Zeichenfläche zoomen.
el: Έλεγχος μεγέθυνσης. Κάντε κλικ στον οÏθογώνιο για να δείτε το μενοÏ.
en: Zoom control. Click on rectangle to see menu.
es: Control del zoom. Clic en rectángulo para ver menú.
it: Zoom area di disegno
ru: МаÑштабировать зону риÑованиÑ.
sk: Zoom pracovnej plochy.
sq: kontrolli I zmadhimit. Kliko ne gjashtekendesh te shohesh menyn

therion: loading commands module ...
bg: зареждане на модула за команди
cz: nahrávám příkazový modul ...
de: Lade Befehlsmodul ...
el: φόÏτιση ενότητα εντολών...
en: loading commands module ...
es: comandos ...
it: modulo comandi ...
ru: загрузка Ð¼Ð¾Ð´ÑƒÐ»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´...
sk: príkazový modul...
sq: duke lexuar modulin komandues…

therion: Select command.
bg: Изберете команда
cz: Výběr příkazu.
de: Wähle Befehl.
el: Κάντε κλικ σε μια γÏαμμή για να συλλέξετε το αντικείμενο στον καμβά και το αντίθετο.
en: Click a line to get corresponding object selected on canvas or vice versa.
es: Al clicar una de las líneas, se resaltará en la topo el objeto correspondiente, y viceversa.
it: Seleziona comando.
ru: Выберите команду.
sk: Vyber príkaz.
sq: kliko ne resht qe te fitosh objektin e deshiruar I zgjedhur ne pelhure ose anasjelltas.

therion: Action button.
bg: ДейÑтвие
cz: TlaÄítko Akce.
de: Aktionsknopf.
el: Πατώντας εδώ μποÏείτε να εισάγετε αντικείμενα με το ποντίκι. Πατήστε την εντολή να δείτε το μενοÏ.
en: After clicking this button, you can insert objects by mouse. Click on action to see menu.
es: Tras pulsar este botón, se pueden insertar con el ratón puntos, lineas, etc. Clic en acción para ver menú.
it: Bottone di azione.
ru: ДейÑтвиÑ.
sk: Gombík - akcia.
sq: pasi te klikoni kete buton, ju mund te futni objekte me mi. kliko ne aksion qe te shohesh menyn.

therion: Switch mouse mode to select objects.
bg: Преминете на мишка за да избирате обекти
cz: Přepnutí myši do výběrového módu.
de: Maus umschalten um Objekte auszuwählen.
el: Î‘Ï†Î¿Ï Ï€Î±Ï„Î®ÏƒÏ„Îµ εδώ μποÏείτε να συλλέξετε αντικείμενα στον καμβά με το ποντίκι.
en: After clicking this button, you can select objects on canvas by mouse.
es: Tras clicar aquí, podrás seleccionar cosas en la topo con el ratón.
it: Cambia la modalità del mouse per selezionare oggetti.
ru: ПереключитеÑÑŒ на мышь, чтобы выбирать объекты.
sk: Nastav mód myši na vyberanie objektov.
sq: pasi te klikosh kete buton, ju mund te zgjedhni objektet ne pelhure me mi.

therion: Action
bg: ДейÑтвие
cz: Akce
de: Aktion
el: Εντολή
en: Action
es: Acción
it: Azione
ru: ДейÑтвие
sk: Akcia
sq: aksion

therion: Configure action assigned to action button.
bg: ДейÑтвието, което изберете, ще бъде изпълнене, кликайки в/у бутона 'Вмъкни <обект>'
cz: Nastaví akci pro tlaÄítko akcí.
de: Dem Aktionsknopf zugewiesene Aktion konfigurieren.
el: ΟÏισμός εντολής που θα εκτελείται κάνοντας κλικ στο κουμπί Εισαγωγή <αντικείμενο>
en: Action you choose will be executed by clicking on Insert  button.
es: Clic para ver menú. La acción que escojas será la que ejecute el botón Insertar 
it: Configura l'azione assegnata al bottone d'azione.
ru: Выберите дейÑтвие, назначенное Ð´Ð»Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¸.
sk: Nakonfiguruj akciu pre gombík - akcia.
sq: aksionin qe e zgjedhni do te egzekutohet me klikimin ne butonin Fute 

therion: Move up
bg: Ðагоре
cz: Přesun výš
de: Schiebe nach oben
el: Μετακίνηση Ï€Ïος τα πάνω
en: Move up
es: Arriba
it: Sposta sù
ru: Вверх
sk: Presuň vyššie
sq: levize lart

therion: Move file command up in the list.
bg: ПремеÑти нагоре в ÑпиÑъка файла Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸
cz: Přesune příkaz výš v seznamu příkazů.
de: In der Liste nach oben schieben.
el: Μετακίνηση αντικειμένου ψηλότεÏα στην λίστα. ΧÏήσιμο σε πεÏίπτωση που είναι σε λάθος σκÏάπ το αντικείμενο.
en: Move object up in the list. Use if object is in wrong scrap.
es: Desplaza el objeto hacia arriba en la lista. Usar si el objeto está en lugar erróneo.
it: Sposta il comando in sù nella lista.
ru: ПеремеÑтить команду вверх по файлу.
sk: Presuň príkaz vyššie v zozname príkazov.
sq: levize objektin lart ne liste. Perdor nese objekti eshte ne deponi te gabuar.

therion: Move down
bg: Ðадолу
cz: Přesun níž
de: Schiebe nach unten
el: Μετακίνηση Ï€Ïος τα κάτω
en: Move down
es: Abajo
it: Sposta giù
ru: Вниз
sk: Presuň nižšie
sq: levize poshte

therion: Move file command down in the list.
bg: ПремеÑти надолу в ÑпиÑъка файла Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸
cz: Přesune příkaz níž v seznamu příkazů.
de: In der Liste nach unten schieben.
el: Μετακίνηση αντικειμένου χαμηλότεÏα στην λίστα. ΧÏήσιμο σε πεÏίπτωση που είναι σε λάθος σκÏάπ το αντικείμενο.
en: Move object down in the list. Use if object is in wrong scrap.
es: Desplaza el objeto hacia abajo en la lista. Usar si el objeto está en lugar erróneo.
it: Sposta il comando in giù nella lista.
ru: ПеремеÑтить команду вниз по файлу.
sk: Presuň príkaz nižšie v zozname príkazov.
sq: levize objektin poshte ne liste. Perdore nese objekti eshte ne deponi te gabuar.

therion: Move file command to given position.
bg: ПремеÑти файла Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ на указаната позициÑ
cz: Přesunout příkaz na danou pozici v seznamu.
de: Befehl an angegebene Position schieben.
el: Μετακίνηση αντικειμένου σε συγκεκÏιμένη θέση (θέση = αÏιθμός σε κάθε σειÏά).
en: Move object to given position (position = number on each line).
es: Mover el objeto a la posición indicada (número al principio de cada línea).
it: Sposta il comando nella posizione specificata.
ru: ПеремеÑтить команду в указанную позицию в файле.
sk: Presuň príkaz na danú pozíciu v zozname.
sq: levize objektin ne pozicion te dhanun( pozicioni = numri ne secilen rjesht).

therion: Select destination scrap and position in it.
bg: Изберете меÑтоназначението на Ñкрап и позициÑта в него
cz: Výběr cílového scrapu a pozice v něm.
de: Zielskizze auswählen und positionieren.
el: Επιλέξετε το σκÏαπ Ï€ÏοοÏÎ¹ÏƒÎ¼Î¿Ï ÎºÎ±Î¹ την θέση μέσα σε αυτό.
en: Select destination scrap and position in it.
es: Seleccionar croquis de destino y la posición en él.
it: Selezione lo scrap di destinazione e posizionati in esso.
ru: Укажите целевой Ñкрап и позицию в нем.
sk: Nastav cieľový scrap a pozíciu v ňom.
sq: zgjedhe destinacionin per deponi dhe poziciono ne te.

therion: Update text
bg: Обнови текÑта
cz: Aktualizovat
de: Text aktualisieren
el: Ανανέωση κειμένου
en: Update text
es: Actualizar texto
it: Aggiorna testo
ru: Сохранить текÑÑ‚
sk: Aktualizuj text
sq: aktualizo tekstin

therion: Press this button to save code you have written.
bg: ÐатиÑнете този бутон за да запазите напиÑаниÑÑ‚ код
cz: StisknÄ›te toto tlaÄítko pro uložení Vámi zapsaného kódu.
de: Diesen Knopf drücken, um Daten zu speichern.
el: Πατήστε το κουμπί να αποθηκευτεί ο κώδικας που γÏάψατε
en: Press this button to save code you have written.
es: Clicar aquí para guardar los cambios hechos en el código.
it: Premi questo bottone per salvare il codice che hai scritto.
ru: Ðажмите Ñту кнопку Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð½Ð°Ð¿Ð¸Ñанного кода.
sk: StlaÄte toto tlaÄítko pre uloženie Vami zapísaného kódu.
sq: shtype kete buton ta ruajsh kodin te cilin e ke shkru.

therion: Editor for free text in therion 2D file.
bg: Редактор за произволен текÑÑ‚ в 2D файла
cz: Editor pro text ve 2D souborech.
de: Editor für Freitext in Therion 2D Datei.
el: ΧÏησιμοποιείτε τον επεξεÏγαστή αυτό για επεξεÏγασία αÏχείων .th2
en: Use this editor window to modify .th2 files.
es: Usa este editor para modificar los archivos .th2. Otros editores darán problemas.
it: Editor di testo libero per il file 2D di therion.
ru: Редактор произвольного текÑта в 2D файле.
sk: Editor pre špeciálne príkazy v 2D súboroch.
sq: perdore kete dritare per permiresim qe te modofikosh. Th2 arkivin.

therion: expression
bg: израз
cz: výraz
de: Muster
el: αναζήτηση για
en: search for
es: buscar
it: testo
ru: выражение
sk: výraz
sq: kerko per

therion: Enter search expression.
bg: Въведете дума/и за търÑене
cz: Vložte hledaný výraz.
de: Suchmuster eingeben.
el: Εισαγωγή λέξεις για αναζήτηση
en: Enter word(s) to search for.
es: Introducir palabra(s) a buscar.
it: Scrivi il testo da cercare.
ru: Введите выражение поиÑка.
sk: Vložte hľadaný výraz.
sq: fute fjalin qe do ta kerkosh.

therion: regular expression
bg: регулÑрен израз
cz: regulární výraz
de: Regulärer Ausdruck
el: ΧÏήση μπαλαντέÏ
en: regular expression
es: patrón regular (kob.*)
it: espressione regolare
ru: регулÑрное выражение
sk: regulárny výraz
sq: shprehje e rregullt

therion: Search for regular expression.
bg: ТърÑене по регулÑрен израз
cz: Vyhledávání regulárního výrazu.
de: Suche nach regulärem Ausdruck.
el: ΧÏήση Î¼Ï€Î±Î»Î±Î½Ï„Î­Ï ÏƒÏ„Î·Î½ αναζήτηση (σπή.* θα βÏει σπήλαιο, σπήλαια, σπήκεÏ)
en: Use wildcards on search (cav.* will find cave, cavern, cavalier...)
es: Usar comodines en la búsqueda (kob.* encuentra koba, kobea, kobie, etc).
it: Cerca espressione regolare.
ru: ИÑкать по регулÑрному выражению.
sk: Vyhľadávanie regulárneho výrazu.
sq: kerko per shprehje te rregullt.

therion: case sensitive
bg: отчита Ñе региÑтъра
cz: rozlišovat velikost písmen
de: Groß- und Kleinschreibung berücksichtigen
el: case sensitive
en: case sensitive
es: distinguir mayúsculas
it: case-sensitive
ru: учитывать региÑтр
sk: rozlišovať veľkosť
sq: rast I ndjeshem-senzitiv

therion: Case sensitive search.
bg: ТърÑене Ñ Ð¾Ñ‚Ñ‡Ð¸Ñ‚Ð°Ð½Ðµ на региÑтъра
cz: Vyhledávání s rozlišením velikosti písmen.
de: Suche mit Groß- und Kleinbuchstaben.
el: Αναζήτηση case sensitive
en: Case sensitive search.
es: Búsqueda sensible a las mayúsculas.
it: Ricerca case-sensistive
ru: ПоиÑк Ñ ÑƒÑ‡ÐµÑ‚Ð¾Ð¼ региÑтра.
sk: Vyhľadávanie s rozlišovaním veľkých a malých písmen.
sq: kerko rast senzitiv

therion: Find next
bg: Ñледващ
cz: Najít další
de: Nächste Stelle finden
el: ΕÏÏεση επομένου
en: Find next
es: Siguiente
it: Prossimo
ru: Следующий
sk: Nasledujúci
sq: gjeje tjetren me radhe

therion: Select next object matching expression.
bg: Избери ÑледващиÑÑ‚ обект на търÑенето
cz: Vybere další objekt odpovídající výrazu.
de: Nächstes Objekt auswählen, das auf Muster passt.
el: Επιλογή επόμενου αντικείμενου που ταιÏιάζει στην αναζήτηση
en: Select next object matching expression.
es: Selecionar siguiente objeto encontrado.
it: Seleziona il prossimo oggetto trovato
ru: Выбрать Ñледующий объект, ÑоответÑтвующий выражению поиÑка.
sk: Nájdi Äalší objekt zodpovedajúci hľadanému výrazu.
sq: zgjedhe objektin tjeter me radhe te shprehjes qe pershtatet

therion: Find first
bg: Ðамвери първиÑÑ‚
cz: Najít první
de: Finde erstes
el: ΕÏÏεση Ï€Ïώτου
en: Search
es: Buscar
it: Cerca
ru: Первый
sk: Nájdi prvý
sq: kerko te parin

therion: Select first object matching expression.
bg: Избери първиÑÑ‚ обект на търÑенето
cz: Vybere první objekt odpovídající výrazu.
de: Erstes Objekt finden, das auf Muster passt.
el: Επιλογή Ï€Ïώτου αντικείμενου που ταιÏιάζει στην αναζήτηση
en: Selects first object matching expression.
es: Selecionar el primer objeto encontrado.
it: Seleziona il primo oggetto trovato
ru: Выбрать первый объект, ÑоответÑтвующий выражению поиÑка.
sk: Nájdi prvý objekt zodpovedajúci hľadanému výrazu.
sq: zgjedh objektin e pare te shprehjes qe pershtatet

therion: Show all
bg: Покажи вÑичко
cz: Zobrazit vše
de: Zeige alles
el: Εμφάνιση όλων
en: Show all
es: Mostrar todo
it: Tutti
ru: Показать вÑе
sk: OznaÄ vÅ¡etky
sq: tregoji te gjitha

therion: Highlight all objects matching expression.
bg: ОÑвети вÑички обекти, ÑъответÑтващи на търÑенето
cz: Zvýrazní všechny objekty odpovídající výrazu.
de: Alle Objekte hervorheben, die auf Muster passen.
el: Τόνωση όλων όσων ταιÏιάζουν στην αναζήτηση.
en: Highlight all objects matching expression.
es: Seleccionar todos los objetos encontrados.
it: Evidenzia tutti gli oggetti trovati
ru: ПодÑветить вÑе объекты, ÑоответÑтвующие выражению поиÑка.
sk: Zvýrazní všetky objekty zodpovedajúce hľadanému výrazu.
sq: zghedh te gjitha objektet qe pershtaten me shprehjen

therion: Clear all
bg: ИзчиÑти вÑичко
cz: Zruš výběr
de: Alles löschen
el: ΑναίÏεση όλων
en: Clear all
es: Deseleccionar
it: Cancella
ru: ОчиÑтить вÑе
sk: Zruš výber
sq: fshij krejt

therion: Clear highlighted objects.
bg: ИзчеÑти оÑветÑването на вÑички обекти
cz: Zruší zvýraznění vybraných objektů.
de: Hervorgehobene Objekte löschen.
el: ΑναίÏεση των τονισθέντων
en: Clear highlighted objects.
es: Deseleccionar todos los objetos resaltados.
it: Togli l'evidenziazione degli oggetti.
ru: СнÑть подÑветку Ñо вÑех объектов.
sk: Zruší zvýraznenie vybratých objektov.
sq: fshij objektet e zgjedhura-te hijezuara

therion: loading images module ...
bg: зареждане на модула за изображениÑ
cz: nahrávám obrázkový modul ...
de: Lade Bildmodul ...
el: φοÏτίζεται η ενότητα εικόνων...
en: loading images module ...
es: imágenes ...
it: modulo immagini ...
ru: загрузка Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ð¹...
sk: nahrávam obrázkový modul...
sq: duke lexuar modulin e imazhit…

therion: Select background image.
bg: Избери фоново изображение
cz: Výběr podkladového obrázku.
de: Wähle Hintergrundbild.
el: Κάντε κλικ στον κατάλογο να επιλέξετε την εικόνα που αντιστοιχεί.
en: Click on a line in the list to select correspondin image.
es: Al clicar un renglón, seleccionarás la imagen de fondo correspondiente.
it: Seleziona l'immagine di background.
ru: Выбор фонового изображениÑ.
sk: OznaÄ obrázok na pozadí.
sq: kliko rreshtin ne liste qe te zgjedhesh imazhin qe pershtatet.

therion: Insert new background image.
bg: Вмъкни ново фоново изображение
cz: Vložení nového podkladového obrázku.
de: Neues Hintergrundbild einfügen.
el: Εισαγωγή νέας εικόνας φόντου (Ï€.χ. αÏχείο .xvi ή ψηφιακό σχέδιο)
en: Insert new background image (e.g., .xvi image or scanned sketch).
es: Insertar nueva imagen de fondo (p. ej: un croquis escaneado de la libreta topo).
it: Inserisci una nuova immagine di background.
ru: Ð’Ñтавить новое фоновое изображение.
sk: Vloženie nového podkladového obrázku.
sq: fute imazhin e ri ne prapavije (p.sh., . xvi imazhin apo vizatimin e skanuar).

therion: Remove
bg: Премахни
cz: Odstranit
de: Entferne
el: ΔιαγÏαφή
en: Remove
es: Eliminar
it: Rimuovi
ru: Убрать
sk: Odstrániť
sq: hiqe

therion: Remove selected image.
bg: Премахни избраното изображение
cz: Odstraní vybraný obrázek.
de: Entferne ausgewähltes Bild.
el: ΔιαγÏαφή επιλεγμένης εικόνας
en: Remove selected image.
es: Eliminar imagen seleccionada.
it: Rimuovi l'immagine selezionata.
ru: Убрать вырбанное изображение.
sk: Odstráni oznaÄený obrázok.
sq: hiqe imazhin e zgjedhur.

therion: visibility
bg: Покажи
cz: viditelnost
de: Sichtbarkeit
el: οÏατότητα
en: visibility
es: visibilidad
it: visibilità
ru: показать
sk: viditeľnosť
sq: shiqueshmeria-vizibiliteti

therion: Switch image visibility.
bg: Покажи/Ñкрий изображение
cz: Přepíná viditelnost obrázku.
de: Bildsichtbarkeit umschalten.
el: Αλλαγή οÏατότητας εικόνας
en: Switch image visibility.
es: Cambiar visibilidad de la imagen.
it: Cambia la visibilità dell'immagine.
ru: Показать/ÑпрÑтать изображение.
sk: PrepínaÄ viditeľnosti obrázku.
sq: lesho shiqueshmerine-vizibilitetin e imazhit.

therion: Control gamma value.
bg: Управление на гамата
cz: Nastavení hodnoty gamma.
de: Gammawert einstellen.
el: Ρυθμίσεις τιμών gamma.
en: Control gamma value.
es: Controlar el valor gamma.
it: Controlla il valore di gamma.
ru: Управление гаммой.
sk: Nastavenie gamma korekcie obrázku (farebného podania).
sq: kontrollo vleren-gamma

therion: Reset
bg: Възобнови
cz: Reset
de: Zurücksetzen
el: ΕπαναφοÏά
en: Reset
es: Reajustar
it: Ripristina
ru: СброÑ
sk: Reset
sq: reseto

therion: Reset image gamma value.
bg: Възобнови наÑтойките на гамата
cz: Resetuje nastavenou hodnotu gamma.
de: Gammawert zurücksetzen.
el: ΕπαναφοÏά τιμής gamma της εικόνας.
en: Click here to go back to original gamma value.
es: Click aquí para volver a los ajustes de gamma iniciales.
it: Ripristina il valore di gamma dell'immagine.
ru: СброÑить значение гаммы Ð´Ð»Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ.
sk: Resetuje nastavenú gamma korekciu obrázku.
sq: kliko ketu qe te kthehesh prapa tek vlera origjinale-gamma.

therion: Set image gamma value.
bg: Определи гамата на изображението
cz: Nastavuje hodnotu gamma obrázku.
de: Setze Gammawert.
el: ΟÏισμός τιμής gamma της εικόνας.
en: Set image gamma value.
es: Ajustar valor gamma de la imagen.
it: Imposta il valore di gamma dell'immagine.
ru: УÑтановить гамму Ð´Ð»Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ.
sk: Nastavuje gamma korekciu obrázku.
sq: vendos vleren gamma te imazhit.

therion: Current position of selected image.
bg: Текуща Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ Ð½Ð° избраното изображение
cz: SouÄasná pozice vybraného obrázku.
de: Gegenwärtige Position des ausgewählten Bildes.
el: ΤÏέχουσα θέση επιλεγμένης εικόνας
en: Current position of selected image (pixels from canvas lower letf corner).
es: Posición actual de la imagen seleccionada (medida en pixels desde la esquina inf. izq del lienzo).
it: Posizione dell'immagine selezionata.
ru: Ð¢ÐµÐºÑƒÑ‰Ð°Ñ Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð¾Ð³Ð¾ изображениÑ.
sk: SúÄasná pozícia obrázku.
sq: pozicioni momental I imazhit te zgjedhur(pikat apo pikselat prej pelhures kendi I poshtem I majte).

therion: Move to
bg: ПремеÑти
cz: Přesunout
de: Verschiebe nach
el: Μετακίνηση Ï€Ïος
en: Move to
es: Mover a
it: Sposta a
ru: ПеремеÑтить
sk: Presuň na
sq: levize tek

therion: Move image to given position.
bg: ПремеÑти изображението на указаната позициÑ
cz: Přesune obrázek na zadanou pozici.
de: Verschiebe Bild an angegebene Position.
el: Μετακίνηση εικόνας στην Ï€ÏοσδιοÏισμένη θέση (η πάνω αÏιστεÏά γωνία θα είναι στο δεδομένο πίξελ)
en: Move image to given position (image's upper left corner will be on given pixel).
es: Mover imagen a la posición indicada (la esquina sup. izda de la imagen aparecerá en ese pixel).
it: Sposta l'immagine nella posizione specificata.
ru: ПеремеÑтить изображение к указанной позиции.
sk: Presunie obrázok na zadanú pozíciu.
sq: levize imazhin ne poziten e dhene(kendi I eperm I majte I imazhit do te jete ne pikselin e japur).

therion: New X coordinate of image.
bg: Ðова Ð¥ координата на изображението
cz: Nová souřadnice X obrázku.
de: Neue X-Koordinate des Bildes.
el: Îέα συντεταγμένη Χ εικόνας
en: New X coordinate of image.
es: Nueva coordenada X de la imagen.
it: Nuova coordinata X dell'immagine.
ru: ÐÐ¾Ð²Ð°Ñ ÐºÐ¾Ð¾Ñ€Ð´Ð¸Ð½Ð°Ñ‚Ð° X.
sk: Nová X súradnica obrázku.
sq: X-koordinata e re e imazhit

therion: New Y coordinate of image.
bg: Ðова Y координата на изображението
cz: Nová souřadnice Y obrázku.
de: Neue Y-Koordinate des Bildes.
el: Îέα συντεταγμένη Î¥ εικόνας
en: New Y coordinate of image.
es: Nueva coordenada Y de la imagen.
it: Nuova coordinata Y dell'immagine.
ru: ÐÐ¾Ð²Ð°Ñ ÐºÐ¾Ð¾Ñ€Ð´Ð¸Ð½Ð°Ñ‚Ð° Y.
sk: Nový Y súradnica obrázku.
sq: koordinata Y e re e imazhit.

therion: Move front
bg: ПремеÑти отпред
cz: Dopředu
de: Nach vorne verschieben
el: Μετακίνηση Ï€Ïος τα μπÏος
en: Move front
es: Delante
it: Davanti
ru: Поверх вÑех
sk: Navrch
sq: levize perpara

therion: Move image in front of all images.
bg: ПремеÑти изображението пред вÑички оÑтанали.
cz: Přesune obrázek nad všechny ostatní.
de: Bild ganz nach vorne verschieben.
el: Μετακίνηση εικόνας στην κοÏυφή
en: Move image in front of all images.
es: Trae la imagen al frente de todas las imágenes.
it: Sposta l'immagine davanti a tutte le immagini.
ru: ВывеÑти изображение поверх вÑех оÑтальных.
sk: Presunie obrázok nad všetky ostatné.
sq: levize imazhin para te gjitha imazheve.

therion: Move back
bg: ПремеÑти назад
cz: Dozadu
de: Nach hinten verschieben
el: Μετακίνηση Ï€Ïος τα πίσω
en: Move back
es: Detrás
it: Dietro
ru: Под вÑеми
sk: Naspodok
sq: levize prapa

therion: Move image behind all images.
bg: ПремеÑти изображението отзад оÑтаналите
cz: Přesune obrázek pod všechny ostatní.
de: Bild ganz nach hinten verschieben.
el: Μετακίνηση της εικόνας στο φόντο
en: Move image behind all images.
es: Enviar la imagen detrás de todas las demás.
it: Sposta l'immagine davanti a tutte le immagini.
ru: ВывеÑти изображение за вÑеми оÑтальными.
sk: Presunie obrázok pod všetky ostatné.
sq: levize imazhin prapa te gjitha imazheve.

therion: loading preview module ...
bg: зареждане на модула за предварителен преглед ...
cz: nahrávám zobrazovací modul ...
de: Lade Vorschaumodul ...
el: ΦοÏτίζεται η ενότητα Ï€Ïοεπισκόπισης...
en: loading preview module ...
es: ver comandos ...
it: modulo anteprima ...
ru: загрузка Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð¿Ñ€ÐµÐ´Ð¿Ñ€Ð¾Ñмотра...
sk: nahrávam náhľadový modul ...
sq: duke lexuar modulin e perkohshem…

therion: Update command
bg: Обнови командата
cz: Aktualizovat
de: Kommando aktualisieren
el: Ανανέωση
en: Update command
es: Actualizar
it: Aggiorna comando
ru: Обновить команду
sk: Aktualizovať
sq: urdheri-komanda e aktualizimit

therion: Press this button, if you have changed something and you can not see your changes here.
bg: ÐатиÑнете този бутон, ако Ñте направили промени и не ги виждате тук.
cz: StisknÄ›te toto tlaÄítko, pokud jste nÄ›co zmÄ›nili a zmÄ›ny nejsou v tomto oknÄ› viditelné.
de: Drücke diesen Knopf, falls du etwas geändert hast und die Änderungen nicht hier sehen kannst.
el: Πατήστε εδώ αν αλλάξατε κάτι και δεν εμφανίζονται εδώ οι αλλαγές.
en: Press this button, if you have changed something and you can not see your changes here.
es: Clicar aquí si has cambiado algo y no ves aquí los resultados del cambio
it: Premi questo bottone se hai fatto modifiche che non sono visualizzate.
ru: Ðажмите Ñту кнопку, еÑли вы что-то изменили, но не увидели здеÑÑŒ Ñвоих изменений.
sk: StlaÄte toto tlaÄítko, ak ste nieÄo zmenili a zmeny nie su v tomto okne viditeľné.
sq: shtype kete buton, nese ke ndryshuar diqka te cilin ndryshim nuk mund ta shohesh ketu.

therion: Command preview.
bg: Преглед на командата.
cz: Náhled příkazu.
de: Kommando Vorschau.
el: Εδώ βλέπετε ολοκληÏωμένες εντολές με εφαÏμογή επιλογών.
en: Here you can see complete commands with options applied.
es: Aquí se pueden ver los comandos completos, opciones incluídas.
it: Anteprima comando.
ru: ПроÑмотр команды.
sk: Náhľad príkazu.
sq: ketu mund te shohesh komandat komplete me opcionet e vendosura.

therion: loading scrap module ...
bg: Зареждане на Ñкрап модула ...
cz: nahrávám scrap modul ...
de: Lade Skizzenmodul ...
el: φοÏτίζεται η ενότητα των σκÏαπ...
en: loading scrap module ...
es: croquis ...
it: modulo scrap ...
ru: загрузка Ñкрап-модулÑ...
sk: nahrávam scrap modul ...
sq: duke lexuar modulin e deponise…

therion: Scrap name.
bg: Име на Ñкрап.
cz: Název scrapu.
de: Skizzenname.
el: Όνομα σκÏαπ
en: Scrap name.
es: Nombre del croquis.
it: Nome dello scrap.
ru: Ð˜Ð¼Ñ Ñкрапа.
sk: Identifikátor (meno) scrapu.
sq: emri I deponise.

therion: projection
bg: проекциÑ
cz: projekce
de: Projektion
el: Ï€Ïοβολή
en: projection
es: proyección
it: proiezione
ru: проекциÑ
sk: projekcia
sq: projekcioni

therion: Scrap projection.
bg: ÐŸÑ€Ð¾ÐµÐºÑ†Ð¸Ñ Ð½Ð° Ñкрапа.
cz: Projekce scrapu.
de: Skizzenprojektion
el: ΠÏοβολή σκÏαπ (κλικ στο Ï„Ïίγωνο για μενοÏ)
en: Scrap projection (clic on triangle to see menu).
es: Proyección del croquis (Clic en triángulo para ver el menú).
it: Proiezione dello scrap.
ru: ÐŸÑ€Ð¾ÐµÐºÑ†Ð¸Ñ Ñкрапа.
sk: Projekcia scrapu.
sq: projeksioni I deponise (kliko ne trekendesh te shohesh menyne).

therion: Other scrap options.
bg: Други опции на Ñкрапа.
cz: Další volby pro scrap.
de: Andere Skizzenoptionen.
el: Άλλες επιλογές των σκÏαπ - βλέπετε το thbook.pdf
en: Other scrap options (more on this on thbook.pdf)
es: Otras opciones del croquis. Consultar thbook.pdf
it: Altre opzioni dello scrap
ru: Другие опции Ñкрапа.
sk: Ostatné možnosti scrapu.
sq: opcionet tjera te deponise (me shume per kete ne librin e therion-it.pdf)

therion: Scale
bg: Мащаб
cz: Měřítko
de: Maßstab
el: Κλίμακας
it: Scala
ru: МаÑштаб
sk: Mierka
sq: matesi

therion: Scrap scaling - push to click picture calibration points.
bg: Мащабиране на Ñкрапа - натиÑнете този бутон и поÑтавете Ñ Ð¼Ð¸ÑˆÐºÐ°Ñ‚Ð° точка за мащабиране в/у Ñкрапа.
cz: Å kálování scrapu - stiskni pro výbÄ›r kalibraÄních bodů obrázku.
de: Skizze skalieren - drücken um Bildeinstellungspunkte zu klicken.
el: ΚαλιπÏάÏισμα σκÏαπ - κάντε κλικ για να επιλέξετε τα σημεία για καλιμπÏάÏισμα.
it: Rescalamento - premi per selezionare i punti di calibrazione.
ru: МаÑштабирование Ñкрапа - нажимте Ñту кнопку и выÑтавите точки маÑÑˆÑ‚Ð°Ð±Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ñ‹ÑˆÑŒÑŽ
sk: Å kálovanie scrapu - po stlaÄení klikni na Å¡kálovacie body.
sq: matja e deponise-shtyp te klikosh pikat kalibruese te fotos.

therion: Update scrap
bg: Обнови Ñкрапа
cz: Aktualizovat
de: Skizze aktualisieren
el: ΕνημέÏωση σκÏαπ
en: Update scrap
es: Actualizar
it: Aggiorna scrap
ru: Обновить Ñкрап
sk: Aktualizuj scrap
sq: aktualizo deponine

therion: Press this button to apply your changes to current scrap.
bg: ÐатиÑнете този бутон за да приложите промените в/у Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ Ñкрап.
cz: StisknÄ›te toto tlaÄítko po uplatnÄ›ní zmÄ›n aktuálního scrapu.
de: Drücke diesen Knopf, um deine Änderungen auf diese Skizze anzuwenden.
el: Πατήστε εδώ για να γίνει εφαÏμογή των αλλαγών σας στο Ï„Ïέχον σκÏαπ.
en: Press this button to apply your changes to current scrap.
es: Clicar aquí tras modificar las propiedades del croquis.
it: Premi questo bottone per applicare le tue modifiche allo scrap.
ru: Ðажмите Ñту кнопку Ð´Ð»Ñ Ð²Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð² дейÑтвие ваших изменений Ð´Ð»Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ Ñкрапа
sk: StlaÄte tento gombík, aby sa vaÅ¡e zmeny v scrape uložili.
sq: shtype kete buton qe te besh ndrimet ne deponine momentale.

therion: picture scale points
bg: мащабиращи точки за изображение
cz: body měřítka (obrázek)
de: Bildskalierungspunkte
el: σημεία για καλιμπÏάÏισμα (πίξελ)
en: picture scale points (pixels)
es: puntos de escala (pixels)
it: punti nella scala del disegno
ru: маÑштабирующие точки Ð´Ð»Ñ ÐºÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ¸
sk: kalibraÄné body (obrazovka)
sq: pikat matese te fotos-pikselat

therion: Calibration points on the picture (X1:Y1 - X2:Y2).
bg: Калибриращи точки на изображение (X1:Y1 - X2:Y2)
cz: KalibraÄní body na obrázku (X1:Y1 - X2:Y2).
de: Kalibrierungspunkte auf dem Bild (X1:Y1 - X2:Y2).
el: Σημεία καλιμπÏαÏίσματος στην εικόνα (Χ1:Î¥1 - Χ2:Î¥2).
en: Calibration points on the picture (X1:Y1 - X2:Y2).
es: Puntos de calibración en la imagen (X1:Y1 - X2:Y2).
it: Punti di calibrazione sul disegno (X1:Y1 - X2:Y2).
ru: Калибровочные точки на картинке (X1:Y1 - X2:Y2).
sk: Súradnice kalibraÄných bodov na obrazovke (X1:Y1 - X2:Y2)
sq: pikat e kalibrimit ne foto (X1:Y1 - X2:Y2)

therion: X1 picture.
bg: X1 на изображение
cz: X1 obrázek.
de: X1 Bild.
el: Χ1 εικόνας
en: X1 picture.
es: Punto de escala X1 en la imagen.
it: X1 del disegno.
ru: X1 картинки.
sk: X1 na obrázku.
sq: x1 fotoja

therion: Y1 picture.
bg: Y1 на изображение
cz: Y1 obrázek.
de: Y1 Bild.
el: Υ1 εικόνας
en: Y1 picture.
es: Punto de escala Y1 en la imagen.
it: Y1 del disegno.
ru: Y1 картинки.
sk: Y1 na obrázku.
sq: Y1 fotoja

therion: X2 picture.
bg: X2 на изображение
cz: X2 obrázek.
de: X2 Bild.
el: Χ2 εικόνας
en: X2 picture.
es: Punto de escala X2 en la imagen.
it: X2 del disegno.
ru: X2 картинки.
sk: X2 na obrázku.
sq: X2 fotoja

therion: Y2 picture.
bg: Y2 на изображение
cz: Y2 obrázek.
de: Y2 Bild.
el: Υ2 εικόνας
en: Y2 picture.
es: Punto de escala Y2 en la imagen.
it: Y2 del disegno.
ru: Y2 картинки.
sk: Y2 na obrázku.
sq: Y2 fotoja

therion: real scale points
bg: реални мащабиращи точки
cz: body měřítka (skuteÄné)
de: Punkte für Realmaßstab
el: Ï€Ïαγματικά σημεία για καλιμπÏάÏισμα
en: real scale points
es: puntos de escala (reales)
it: punti nella scala effettiva
ru: реальные маÑштабирующие точки
sk: kalibraÄné body (skutoÄné)
sq: pikat reale te matjes

therion: Real coordinates of calibration points (X1:Y1 - X2:Y2).
bg: Реални координати на калибриращите точки (X1:Y1 - X2:Y2).
cz: SkuteÄné souÅ™adnice kalibraÄních bodů (X1:Y1 - X2:Y2).
de: Realkoordinaten der Kalibrierungspunkte (X1:Y1 - X2:Y2).
el: ΠÏαγματικές συντεταγμένες σημείων καλιμπÏαÏίσματος (Χ1:Î¥1 - Χ2:Î¥2)
en: Real coordinates of calibration points (X1:Y1 - X2:Y2).
es: Coordenadas reales de los puntos de calibración (X1:Y1 - X2:Y2).
it: Coordinate reali dei punti di calibrazione (x1:y1 - x2:y2).
ru: Реальные координаты калибровочных точек (X1:Y1 - X2:Y2).
sk: SkutoÄné súradnice kalibraÄných bodov (X1:Y1 - X2:Y2).
sq: koordinatat reale te pikave te kalibrimit (X1:Y1 - X2:Y2).

therion: X1 real.
bg: X1 реално.
cz: X1 skuteÄný.
el: ΠÏαγματικό Χ1.
en: X1 real.
es: X1 real
it: x1 reale.
ru: X1 реальное.
sk: X1 skutoÄný
sq: X1 I vertet-real

therion: Y1 real.
bg: Y1 реално.
cz: Y1 skuteÄný.
el: ΠÏαγματικό Î¥1.
en: Y1 real.
es: Y1 real
it: y1 reale.
ru: Y1 реальное.
sk: Y1 skutoÄný
sq: Y1 I vertet-real

therion: X2 real.
bg: X2 реално.
cz: X2 skuteÄný.
el: ΠÏαγματικό Χ1.
en: X2 real.
es: X2 real
it: x2 reale.
ru: X2 реальное.
sk: X2 skutoÄný
sq: X2 I vertet-real

therion: Y2 real.
bg: Y2 реално.
cz: Y2 skuteÄný.
el: ΠÏαγματικό Î¥2
en: Y2 real.
es: Y2 real
it: y2 reale.
ru: Y2 реальное.
sk: Y2 skutoÄný
sq: Y2 I vertet-real

therion: units
bg: единици
cz: jednotky
de: Einheiten
el: μονάδες
en: units
es: unidades
it: unità
ru: единицы
sk: jednotky
sq: njesite

therion: Units of real coordinates.
bg: Единици на реалните координати.
cz: Jednotky reálných souřadnic.
de: Einheiten der Realkoordinaten.
el: Μονάδες Ï€Ïαγματικών συντεταγμένων.
en: Units of real coordinates.
es: Unidades de las coordenadas reales.
it: Unità delle coordinate reali.
ru: Единицы Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ñ€ÐµÐ°Ð»ÑŒÐ½Ñ‹Ñ… координат.
sk: Jednotky reálnych súradníc.
sq: njesite e koordinatave te verteta.

therion: background sketches
bg: Фонова Ñкица.
cz: náÄrtky na pozadí
de: Hintergrundskizzen
el: Σχέδια του φόντου
it: Immagini di background
ru: Фоновые изображениÑ
sk: náÄrtky na pozadí.
sq: skicat e prapavise.

therion: List of image files used as scrap background.
bg: СпиÑък на графични файлове, използвани за фонови Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° Ñкрапа.
cz: Seznam obrázků použitých jako pozadí scrapu
de: Liste der als Hintergrund verwendeten Bilder.
el: Κατάλογος αÏχείων εικόνων που χÏησιμοποιοÏνται ως φόντο του σκÏαπ
it: Files usati come background dello scrap
ru: СпиÑок графичеÑких файлов, иÑпользуемых в качеÑтве фоновых изображений Ñкрапа
sk: Zoznam obrázkov použitých ako pozadie.
sq: lista e foto-arkivit te perdorura si prapavije e deponise.

therion: Press this button to insert sketch by clicking on it.
bg: ÐатиÑнете този бутон, за да вмъкнете Ñкица, като кликнете върху неÑ.
cz: StisknÄ›te toto tlaÄítko a výbÄ›rem náÄrtku myší jej vložte do scrapu.
de: Diesen Knopf drücken um Skizze einzufügen.
el: Πατήστε εδώ για εισαγωγή σχεδίου με ποντίκι
it: Premi per inserire il disegno che scegli col mouse
ru: Эта кнопка вÑтавлÑет фон Ñкрапа в ÑпиÑок
sk: Po stlaÄení klikni na náÄrtok, ktorý treba vložiÅ¥ do scrapu.
sq: shtype kete buton te fusesh skicen duke klikuar ne te.

therion: Delete sketch from scrap.
bg: Изтрий Ñкица от Ñкрапа.
cz: Odstranit náÄrtek ze scrapu
de: Lösche Skizze.
el: ΔιαγÏαφή σχεδίου από σκÏαπ
it: Rimuovi un disegno dallo scrap
ru: Эта кнопка удалÑет фон Ñкрапа из ÑпиÑка
sk: Odstráň náÄrtok zo scrapu.
sq: fshije skicen nga deponia

therion: loading point module ...
bg: зареждане на модула за точки ...
cz: nahrávám point modul ...
de: Lade Punktmodul ...
el: φόÏτιση ενότητας σημείων…
en: loading point module ...
es: puntos ...
it: modolo punti ...
ru: загрузка Ð¼Ð¾Ð´ÑƒÐ»Ñ Ñ‚Ð¾Ñ‡ÐµÐº...
sk: nahrávam editor bodov ...
sq: duke lexuar modulin e pikes…

therion: Update point
bg: Обнови точка
cz: Aktualizovat
de: Punkt aktualisieren
el: ΕνημέÏωση σημείου
en: Update point
es: Actualizar
it: Aggiorna punto
ru: Обновить точку
sk: Akualizuj bod
sq: pika e aktualizimit

therion: Click this button to apply point changes.
bg: натиÑнете този бутон за прилагане на изменениÑта в/у точката.
cz: Aktualizuje data týkající se bodu.
de: Klicke diesen Knopf, um Änderungen am Punkt anzuwenden.
el: Κάντε κλικ για να γίνει εφαÏμογή των αλλαγών που κάνατε στα σημεία
en: Click this button to apply point changes.
es: Clicar aquí tras modificar las propiedades del punto.
it: Premi il bottone per fare modifiche al punto.
ru: Ðажмите Ñту кнопку Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ точки.
sk: StlaÄte aby sa aktualizovali zmenené údaje bodu.
sq: kliko kete buton te aktualizosh nderrimet e pikes.

therion: Point type.
bg: Тип на точката.
cz: Typ bodu.
de: Punkttyp.
el: Είδος σημείου
en: Point type (click on triangle to see menu).
es: Tipo de punto. Clic en triángulo para ver menú
it: Tipo di punto
ru: Тип точки.
sk: Typ bodu.
sq: lloji I pikave (kliko ne trekendesh te shohesh menun).

therion: Point identifier.
bg: Индетификатор на точката.
cz: Identifikátor bodu.
de: Punktbezeichner.
el: ID σημείου
en: Point identifier.
es: Nombre (ID) del punto.
it: Identificatore del punto.
ru: Идентификатор точки.
sk: Identifikátor bodu.
sq: identifikuesi I pikes.

therion: Other point options.
bg: Други опции на точката.
cz: Další volby pro bod.
de: Andere Punktoptionen.
el: Άλλες επιλογές για σημεία
en: Options allow giving special characteristics to points.
es: Las opciones permiten dar características especiales a los puntos.
it: Altre opzioni del punto.
ru: Другие опции точки.
sk: Ostatné špecifikácie bodu.
sq: opcionet tjera te pikes.

therion: I.e, if type is label, write here: -text \042this will be displayed (P100)\042
bg: Ðапример, ако типът на точката е label (етикет), тук можете да въведете: -text \042 , това ще изобрази: (P100)\042
cz: Příklad: pokud type je label, zadejte: -text \042this will be displayed (P100)\042
de: d.h., wenn der Typ Beschriftung ist, schreibe hier: -text \042das wird hier angezeigt (P100)\042
el: Δηλαδή, αν το είδος είναι ταμπέλα, εδώ γÏάφετε: -text \042αυτό εμφανίζεται (P100)\042
en: I.e, if type is label, write here: -text \042this will be displayed (P100)\042
es: P.ej, si el tipo es label, escribe: -text \042lo que se verá (P100)\042.
it: Cioé, se il tipo è etichetta, scrivi: -text \042questo sarà visualizzato (P100)\042
ru: Ðапример, еÑли тип точки label, здеÑÑŒ можно набрать: -text \042Ñто напечатаетÑÑ (P100)\042
sk: Príklad: ak je typ label, zadajte: -text \042tento text bude zobrazený\042
sq: p.sh. nese lloji eshte etikete, shkruaj ketu: -teksti \042 kjo do te lajmerohet (P100)\042

therion: Enter symbol orientation angle.
bg: Въведете Ð¾Ñ€Ð¸ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð½Ð° Ñимвола.
cz: Zadejte orientaci bodu.
de: Winkel der Symbolausrichtung angeben.
el: Εισαγωγή γωνίας Ï€ÏÎ¿ÏƒÎ±Î½Î±Ï„Î¿Î»Î¹ÏƒÎ¼Î¿Ï ÏƒÏμβολου.
en: Enter symbol orientation angle.
es: Introducir dirección en que debe apuntar el símbolo.
it: Scrivi l'angolo di orientazione del simbolo.
ru: Введите ориентацию Ñимвола.
sk: Zadajte orientáciu bodu.
sq: fute simbolin e kendit te orientimit.

therion: There are symbol types which must be orientated (i.e: gradients). Click here to giv'em orientation by mouse or keyboard.
bg: ÐÑкои типове Ñимволи трÑбва да бъдат ориентирани (например gradient). ÐатиÑнете тук за да им дадете направление Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰Ñ‚Ð° на мишката или клавиатурата.
cz: Jsou symboly, kterým musíte specifikovat orientaci (např. gradient). Zaklikněte tuto volbu a nastavte jim orientaci myší nebo z klávesnice.
de: Es gibt Symbole, die eine Ausrichtung haben müssen (z.B. Gefälle). Klicke hier, um sie mit der Maus oder der Tastatur auszurichten.
el: Κάποια είδη συμβόλων Ï€Ïέπει να Ï€ÏοσανατολιστοÏν (Ï€.χ. κλίσεις). Κάντε κλικ εδώ να οÏισθεί ο Ï€Ïοσανατολισμός είτε από το πληκτÏολόγιο είτε με το ποντίκι.
en: Some symbol types must be orientated (i.e: gradients). Click here to giv'em orientation by mouse or keyboard.
es: Hay tipos de símbolo que deben ser orientados (p.ej, pendientes). Haz clic aquí para orientarlos con ratón o teclado.
it: Ci sono tipi di simboli che sono orientati (per es. gradiente). Premi qui per orientarli col mouse o la tastiera
ru: Ðекоторые типы Ñимволов должны быть ориентированы (например gradient). Ðажмите здеÑÑŒ Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð´Ð°Ð½Ð¸Ñ Ð¸Ð¼ ориентации Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ мыши или клавиатуры.
sk: Sú symboly, ktorým treba zadaÅ¥ orientáciu (napr. gradiet). OznaÄte túto voľbu a nastavte orientáciu myÅ¡ou alebo z klávesnice.
sq: disa lloje te simboleve duhet te orientohen (p.sh.:gradienti). Kliko ketu qe ti orientosh me mi apo tastature.

therion: x-size
bg: х-размер
cz: x-rozsah
de: x-Größe
el: μέγεθος x
en: x-size
es: tamaño-x
it: dim. x
ru: x-size
sk: veľkosť-x
sq: madhesia-X

therion: Set point size in main direction.
bg: Укажете размера на точката в главното направление.
cz: Nastaví rozsah bodu v hlavním směru.
de: Setze Punktgröße in Hauptrichtung.
el: ΟÏισμός πλευÏÎ¹ÎºÎ¿Ï Î¼ÎµÎ³Î­Î¸Î¿Ï…Ï‚ σημείου
en: Set point size in main direction.
es: Ajustar tamaño del punto en dirección principal.
it: Imposta la dimensione del punto nella direzione principale.
ru: УÑтановить размер точки в главном направлении.
sk: Nastavte veľkosť bodu v hlavnom (X) smere.
sq: vene madhesine e pikes ne drejtimin kryesor.

therion: Enter point size in main direction.
bg: Въведете размера на точката в главното направление.
cz: Zadejte rozsah bodu v hlavním směru.
de: Punktgröße in Hauptrichtung eingeben.
el: Εισαγωγή πλευÏÎ¹ÎºÎ¿Ï Î¼ÎµÎ³Î­Î¸Î¿Ï…Ï‚ σημείου
en: Enter point size in main direction.
es: Introducir tamaño del punto en dirección principal.
it: Scrivi la dimensione del punto nella direzione principale.
ru: Введите размер точки в главном направлении.
sk: Zadajte veľkosť bodu v hlavnom (X) smere.
sq: fute madhesine e pikes ne drejtimin kryesor.

therion: y-size
bg: y-размер
cz: y-rozsah
de: y-Größe
el: μέγεθος y
en: y-size
es: tamaño-y
it: dim. y
ru: y-size
sk: veľkosť-y
sq: madhesia-Y

therion: Set point size in side direction.
bg: Укажете размера на точката в обратното направление.
cz: Nastaví rozsah bodu ve vedlejším směru.
de: Setze Punktgröße in seitlicher Richtung.
el: ΟÏισμός πλευÏÎ¹ÎºÎ¿Ï Î¼ÎµÎ³Î­Î¸Î¿Ï…Ï‚ σημείου
en: Set point size in side direction.
es: Ajustar tamaño del punto en dirección lateral.
it: Imposta la dimensione del punto nella direzione trasversale.
ru: УÑтановить размер точки в боковом направлении.
sk: Nastavte veľkosť bodu vo vedľajšom smere.
sq: vene madhesine e pikes ne drejtim anesore.

therion: Enter point size in side direction.
bg: Въведете размера на точката в обратното направление.
cz: Zadejte rozsah bodu ve vedlejším směru.
de: Punktgröße in seitlicher Richtung eingeben.
el: Εισαγωγή πλευÏÎ¹ÎºÎ¿Ï Î¼ÎµÎ³Î­Î¸Î¿Ï…Ï‚ σημείου
en: Enter point size in side direction.
es: Introducir tamaño del punto en dirección lateral.
it: Scrivi la dimensione del punto nella direzione trasversale.
ru: Введите размер точки в боковом направлении.
sk: Zadajte veľkosť bodu vo vedľajšom smere.
sq: fute madhesine e pikes ne drejtim anesore.

therion: loading line module ...
bg: зареждане на модула за линии ...
cz: nahrávám křivkový modul ...
de: Lade Linienmodul ...
el: φόÏτιση ενότητας γÏαμμών...
en: loading line module ...
es: líneas ...
it: modulo linee ...
ru: загрузка Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð»Ð¸Ð½Ð¸Ð¹ ...
sk: nahrávam modul kriviek ...
sq: duke lexuar modulin e rrjeshtit…

therion: Line type.
bg: Тип на линиÑ.
cz: Typ křivky.
de: Linientyp.
el: Είδος γÏαμμής
en: Line type (click on triangle to see menu).
es: Tipo de línea. Clic en triángulo para ver el menú.
it: Tipo di linea.
ru: Тип линии.
sk: Typ krivky.
sq: lloji I rrjeshtit.

therion: id
bg: id - индетификатор
cz: id
de: id
el: ID
en: id
es: ID
it: Identificativo
ru: Ид
sk: id
sq: ID-identifikimi

therion: Line identifier.
bg: Индетификатор на линиÑ
cz: Identifikátor křivky.
de: Linienbezeichner.
el: ID γÏαμμής.
en: Line identifier.
es: Nombre (ID) de la línea.
it: Identificativo della linea.
ru: Идентификатор линии
sk: Identifikátor krivky.
sq: identifikimi I rrjeshtit.

therion: Other line options.
bg: Други опции на линиÑта
cz: Další volby pro křivku.
de: Andere Linienoptionen.
el: Άλλες επιλογές γÏαμμής. Δηλαδή για μη-εμφάνιση γÏαμμής γÏάφετε εδώ: -subtype invisible. Βλέπετε το thbook.pdf
en: Other line options. I.e., to make line invisible, write here: -subtype invisible. See thbook.pdf
es: Otras opciones de línea. P. ej: para hacerla invisible, escribe: -subtype invisible (consultar thbook.pdf)
it: Altre opzioni della linea.
ru: Прочие опции линии
sk: Ďalšie možnosti pre krivku.
sq: opcionet tjera te rrjeshtit.

therion: reverse
bg: обратна
cz: obrátit
de: Umkehren
el: αναστÏοφή
en: reverse
es: invertir
it: inverti
ru: обратнаÑ
sk: otoÄiÅ¥
sq: ktheje pas

therion: Reverse line.
bg: Обърни линиÑта
cz: Obrátit křivku.
de: Linie umkehren.
el: ΑναστÏοφή γÏαμμής. Σε πεÏίπτωση που τα σημαδάκια είναι ανάποδα, κάντε κλικ εδώ.
en: Reverse line. If symbol's ticks are on bad side, click here.
es: Invertir línea. Si p.ej el símbolo de resalte aparece al revés, haz clic aquí.
it: Inverti la linea.
ru: Задать обратное направление Ð´Ð»Ñ Ð»Ð¸Ð½Ð¸Ð¸.
sk: OtoÄiÅ¥ krivku.
sq: rrjeshti I pasem-I kthyer

therion: close
bg: затвори
cz: zavřít
de: schließen
el: κλείσιμο
en: close
es: cerrar
it: chiudi
ru: замкнуть
sk: zavrieť
sq: mbylle

therion: Close line.
bg: Затвори линиÑта Ñ Ð½Ð°Ñ‡Ð°Ð»Ð¾Ñ‚Ð¾ и.
cz: Uzavřít křivku.
de: Linie schließen.
el: Κλείσιμο γÏαμμής
en: Close line.
es: Cerrar línea (o sea, unir último punto con el primero para definir un espacio cerrado).
it: Chiudi la linea.
ru: Замкнуть линию на её же начало.
sk: Uzavrieť krivku.
sq: mbylle rrjeshtin.

therion: Edit line
bg: Редактирай линиÑ
cz: Editovat
de: Linie bearbeiten
el: ΕπεξεÏγασία γÏαμμής
en: Edit line
es: Editar
it: Edita
ru: Править линию
sk: Upraviť
sq: permireso rrjeshtin

therion: Insert/delete line point. Split line.
bg: Вмъкване/триене на точка. РазделÑне на линиÑ.
cz: Vložení/smazání bodu křivky. Rozdělení křivky.
de: Punkt auf Linie eingeben/löschen. Linie teilen.
el: Εισαγωγή και διαγÏαφή σημείων γÏαμμής. ΔιαίÏεση γÏαμμής.
en: Insert/delete line point. Split line.
es: Permite añadir o borrar puntos de la línea, o cortar la línea en dos.
it: Inserisci/rimuovi un punto della linea. Dividi la linea.
ru: Ð’Ñтавка/удаление точки, разделение линии.
sk: Vloženie/odstránenie bodu krivky. Rozdelenie krivky.
sq: fute/fshije piken e rrjeshtit. Ndaje rrjeshtin.

therion: Click this button to apply line changes.
bg: ÐатиÑнете този бутон за да приложите изменениÑта на линиÑта.
cz: Aktualizuje křivku.
de: Klicke diesen Knopf, um Linienänderungen anzuwenden.
el: Κάντε κλικ για να γίνει εφαÏμογή των αλλαγών στην γÏαμμή.
en: Click this button to apply line changes.
es: Clicar aquí tras modificar las propiedades de la línea.
it: Primi questo bottone per fare modifiche alla linea.
ru: Ðажмите Ñту кнопку Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ линии.
sk: Aktualizuje krivku.
sq: kliko kete buton te aktualizosh nderrimet e rrjeshtit.

therion: Select line point.
bg: Избери една от точките на линиÑта.
cz: Výběr bodu křivky.
de: Punkt auf Linie auswählen.
el: Αυτά είναι τα επιλεγμένα σημεία γÏαμμών. Κάντε κλικ σε όποιο σας ενδιαφέÏει για να εμφανιστεί ως επιλεγμένο στον καμβά.
en: These are selected line points. Click on any to get it selected on canvas.
es: Lista de puntos que forman esta línea. Clic para resaltar el punto en la topo.
it: Seleziona un punto della linea.
ru: Выбрать одну из точек линии.
sk: Výber bodu krivky.
sq: selekto piken e rrjeshtit.

therion: loading line point module ...
bg: зареждане на модула линейни точки ...
cz: nahrávám modul pro body křivky ...
de: Lade Linienpunktmodul ...
el: φόÏτιση ενότητας σημείων γÏαμμών...
en: loading line point module ...
es: puntos de línea ...
it: caricando il modulo dei punti di linea ...
ru: загрузка Ð¼Ð¾Ð´ÑƒÐ»Ñ Ñ‚Ð¾Ñ‡ÐµÐº линии ...
sk: nahrávam modul pre body krivky ...
sq: duke lexuar modulin e pikes se rrjeshtit.

therion: position
bg: позициÑ
cz: pozice
de: Position
el: θέση
en: position
es: posición
it: posizione
ru: позициÑ
sk: poloha
sq: pozicioni

therion: Point position.
bg: ÐŸÐ¾Ð·Ð¸Ñ†Ð¸Ñ Ð½Ð° точката.
cz: Pozice bodu.
de: Punktposition.
el: Θέση σημείου
en: Point position.
es: Posición del punto.
it: Posizione del punto.
ru: ÐŸÐ¾Ð·Ð¸Ñ†Ð¸Ñ Ñ‚Ð¾Ñ‡ÐºÐ¸.
sk: Poloha bodu.
sq: pozicioni I pikes.

therion: Point X coordinate.
bg: X координата на точката.
cz: souřadnice X bodu.
de: Punkt X-Koordinate.
el: Συντεταγμένη Χ σημείου
en: Point X coordinate.
es: Coordenada X del punto.
it: Coordinata X del punto.
ru: X координата точки.
sk: X súradnica bodu.
sq: pika X e koordinates.

therion: Point Y coordinate.
bg: Y координата на точката.
cz: souřadnice Y bodu.
de: Punkt Y-Koordinate.
el: Συντεταγμένη Υ σημείου
en: Point Y coordinate.
es: coordenada Y del punto.
it: Coordinata Y del punto.
ru: Y координата точки.
sk: Y súradnica bodu.
sq: pika Y e koordinates.

therion: Previous control point X coordinate.
bg: X координата на предишната управлÑваща точка.
cz: Souřadnice X předchozího řídícího bodu.
de: Vorherige X-Koordinate eines Kontrollpunkts.
el: Συντεταγμένη Χ Ï€ÏοηγοÏμενου σημείου ελέγχου
en: Previous control point X coordinate.
es: Coordenada X del punto de control anterior.
it: Coordinata X del punto di controllo precedente.
ru: X координата предыдущей управлÑющей точки.
sk: X súradnica predchádzajúceho kontrolného bodu.
sq: pika e kontrollit te meparshem te koordinates X

therion: Previous control point Y coordinate.
bg: Y координата на предишната управлÑваща точка.
cz: Souřadnice Y předchozího řídícího bodu.
de: Vorherige Y-Koordinate eines Kontrollpunkts.
el: Συντεταγμένη Î¥ Ï€ÏοηγοÏμενου σημείου ελέγχου
en: Previous control point Y coordinate.
es: Coordenada Y del punto de control anterior.
it: Coordinata Y del punto di controllo precedente.
ru: Y координата предыдущей управлÑющей точки.
sk: Y súradnica predchádzajúceho kontrolného bodu.
sq: pika e kontrollit te meparshem te koordinates-Y

therion: Next control point X coordinate.
bg: X координата на Ñледващата управлÑваща точка.
cz: Souřadnice X následujícího řídícího bodu.
de: Nächste X-Koordinate eines Kontrollpunkts.
el: Συντεταγμένη Χ επόμενου σημείου ελέγχου
en: Next control point X coordinate.
es: Coordenada X del siguiente punto de control.
it: Coordinata X del prossimo punto.
ru: X координата Ñледующей управлÑющей точки.
sk: X súradnica nasledujúceho kontrolného bodu.
sq: pika e ardhshme kontrollit te coordinates X

therion: Next control point Y coordinate.
bg: Y координата на Ñледващата управлÑваща точка.
cz: Souřadnice Y následujícího řídícího bodu.
de: Nächste Y-Koordinate eines Kontrollpunkts.
el: Συντεταγμένη Υ επόμενου σημείου ελέγχου
en: Next control point Y coordinate.
es: Coordenada Y del siguiente punto de control.
it: Coordinata Y del prossimo punto.
ru: Y координата Ñледующей управлÑющей точки.
sk: Y súradnica nasledujúceho kontrolného bodu.
sq: pika e ardhshme kontrollit te coordinates Y

therion: Checkbox whether to use previous control point.
bg: ПоÑтавете отбелÑзка за използване на предишната управлÑваща точка.
cz: Zaškrtněte pokud chcete pro tvar křivky použít předchozí řídící bod.
de: Auswahl, ob vorheriger Kontrollpunkt benutzt wird.
el: Επιλογή για χÏήση Ï€ÏοηγοÏμενου σημείου ελέγχου
en: Checkbox whether to use previous control point.
es: Usar punto de control anterior.
it: Checkbox per usare il punto di controllo precedente.
ru: ПоÑтавьте галочку Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰ÐµÐ¹ управлÑющей точки.
sk: Použi predchádzajúci kontrolný bod.
sq: kutia-kontrollit a duhet te perdoret pika e kontrollit e meparshme

therion: smooth
bg: изглаждане
cz: uhladit
de: geglättet
el: απαλή
en: smooth
es: suavizar
it: regolarizza
ru: Ñгладить
sk: vyhladiť
sq: e bute

therion: Set line to be smooth in given point.
bg: УÑтановете за изглаждане на линиÑта в дадената точка.
cz: Nastaví hladkou křivku v daném bodě.
de: Setze Linie auf geglättet am gegebenen Punkt.
el: ΟÏισμός απαλής καμπÏλης στο επόμενο σημείο της γÏαμμής
en: Set line to be smooth in given point.
es: Suavizar la línea en el punto seleccionado.
it: Imposta la linea ad essere regolare nelpunto specificato.
ru: УÑтановите Ð´Ð»Ñ ÑÐ³Ð»Ð°Ð¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð»Ð¸Ð½Ð¸Ð¸ в данной точке.
sk: Nastaví kontrolné body tak, aby krivka bola v danom bode hladká.
sq: vene rrjeshtin per te qene I bute ne piken e dhanun

therion: Checkbox whether to use next control point.
bg: ПоÑтавете отбелÑзка за използване на Ñледващата управлÑваща точка.
cz: Zaškrtněte pokud chcete pro tvar křivky použít následující řídící bod.
de: Auswahl, ob nächster Kontrollpunkt benutzt wird.
el: Επιλογή για χÏήση επόμενου σημείου ελέγχου
en: Checkbox whether to use next control point.
es: Usar siguiente punto de control.
it: Checkbox per usare il prossimo punto di controllo.
ru: ПоÑтавьте галочку Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñледующей управлÑющей точки.
sk: Použi nasledujúci kontrolný bod.
sq: kutia-kontrollit a duhet te perdoret pika e kontrollit e ardhshme

therion: orientation
bg: ориентациÑ
cz: orientace
de: Ausrichtung
el: Ï€Ïοσανατολισμός
en: orientation
es: orientación
it: orientazione
ru: ориентациÑ
sk: orientácia
sq: orientimi

therion: Set line point orientation.
bg: Укажете ориентациÑта на точка на линиÑта.
cz: Nastaví orientaci bodu.
de: Setze Ausrichtung des Linienpunkts.
el: ΟÏισμός Ï€ÏÎ¿ÏƒÎ±Î½Î±Ï„Î¿Î»Î¹ÏƒÎ¼Î¿Ï ÏƒÎ·Î¼ÎµÎ¯Î¿Ï… γÏαμμής
en: Set line point orientation.
es: Ajustar dirección en que apunta un punto de la línea (p.ej una pendiente).
it: Imposta l'orientazione del punto della linea.
ru: УÑтановите ориентацию точки линии.
sk: Nastaví orientáciu symbolov v bode krivky.
sq: vene orientimin e pikes se rrjeshtit

therion: Enter line point orientation.
bg: Въведете ориентациÑта на точка на линиÑта.
cz: Zadejte orientaci bodu.
de: Ausrichtung des Linienpunkts eingeben.
el: Εισαγωγή Ï€ÏÎ¿ÏƒÎ±Î½Î±Ï„Î¿Î»Î¹ÏƒÎ¼Î¿Ï ÏƒÎ·Î¼ÎµÎ¯Î¿Ï… γÏαμμής
en: Enter line point orientation.
es: Introducir dirección señalada por el punto.
it: Scrivi l'orientazione del punto della linea.
ru: Введите ориентацию точки линии.
sk: Zadaj orientáciu symbolov v bode krivky.
sq: fute orientimin e pikes se rrjeshtit

therion: r-size
bg: r-размер
cz: p-rozsah
de: r-Größe
el: διάσταση (δ)
en: r-size
es: anchura-dcha
it: dim. destra
ru: r-size
sk: rozmer-p
sq: r-madhesia

therion: Set line size in right direction.
bg: Укажете размера на линиÑта в направление надÑÑно.
cz: Nastaví rozsah křivky v pravém směru.
de: Setze Liniengröße nach rechts.
el: ΟÏισμός διάστασης γÏαμμής Ï€Ïος τα δεξιά
en: Set line size in right direction.
es: Ajustar anchura de línea (lado derecho de la línea).
it: Imposta la dimensione della linea a destra.
ru: УÑтановите размер линии в правом направлении.
sk: Nastaví veľkosť symbolov napravo od krivky.
sq: cakto madhesine e rrjeshtit ne drejtim te djathte

therion: Enter line size in right direction.
bg: Въведете размера на линиÑта в направление надÑÑно.
cz: Zadejte rozsah křivky v pravém směru.
de: Liniengröße nach rechts eingeben.
el: Εισαγωγή διάσταση γÏαμμής Ï€Ïος τα δεξιά
en: Enter line size in right direction.
es: Introducir anchura de línea (lado derecho de la línea).
it: Scrivi la dimensione della linea a destra.
ru: Введите размер линии в правом направлении.
sk: Zadaj veľkosť symbolov napravo od krivky.
sq: fute madhesine e rjeshtit ne drejtim te djathte

therion: l-size
bg: l-размер
cz: l-rozsah
de: l-Größe
el: διάσταση (α)
en: l-size
es: anchura-izda
it: dim. sinistra
ru: l-size
sk: rozmer-ľ
sq: madhesia-l

therion: Set line size in left direction.
bg: Укажете размера на линиÑта в направление налÑво.
cz: Nastaví rozsah křivky v levém směru.
de: Setze Liniengröße nach links.
el: ΟÏισμός διάστασης γÏαμμής Ï€Ïος τα αÏιστεÏά
en: Set line size in left direction.
es: Ajustar anchura de línea (lado izquierdo de la línea). El tipo slope necesita este valor.
it: Imposta la dimensione della linea a sinistra.
ru: УÑтановите размер линии в левом направлении.
sk: Nastaví veľkosť symbolov naľavo od krivky.
sq: cakto madhesine e rjeshtit ne drejtim te majte

therion: Enter line size in left direction.
bg: Въведете размера на линиÑта в направление налÑво.
cz: Zadejte rozsah křivky v levém směru.
de: Liniengröße nach links eingeben.
el: Εισαγωγή διάσταση γÏαμμής Ï€Ïος τα αÏιστεÏά
en: Enter line size in left direction.
es: Introducir anchura de línea (lado izquierdo de la línea). El tipo slope necesita este valor.
it: Scrivi la dimensione della linea a sinistra.
ru: Введите размер линии в левом направлении.
sk: Zadaj veľkosť symbolov naľavo od krivky.
sq: fute madhesine e rjeshtit ne drejtim te majte

therion: Line point options editor.
bg: Редактор на опциите на точка на линиÑта.
cz: Volby bodu křivky.
de: Linienpunktoptionen bearbeiten.
el: ΕπεξεÏγαστής επιλογών σημείων γÏαμμών
en: Line point options editor.
es: Editor de puntos pertenecientes a la línea seleccionada. Consultar thbook.pdf
it: Editor delle opzioni del punto della linea.
ru: Редактор опций точки линии.
sk: Editor Äalších možností bodu krivky.
sq: opcioni I editimit te pikes se rjeshtit

therion: Click this button to apply line point changes.
bg: ÐатиÑмете този бутон за прилагане на промените в/у точка на линиÑта.
cz: Aktualizovat bod křivky.
de: Klicke diesen Knopf, um Änderungen am Linienpunkt anzuwenden.
el: Πατήστε εδώ για να γίνει εφαÏμογή των αλλαγών στο σημείο της γÏαμμής.
en: Click this button to apply line point changes.
es: Clicar tras modificar las propiedades de los puntos de una línea.
it: Premi questo bottone per fare modifiche ai punti della linea.
ru: Ðажмите Ñту кнопку Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ точки линии.
sk: Aktializácia bodu krivky.
sq: kliko kete buton per te bere ndrimet e pikes se rjeshtit

therion: Editor for line point options.
bg: Редактор за опциите на точка на линиÑта.
cz: Editor voleb bodu křivky.
de: Edditor für Linienpunktoptionen.
el: Εδώ μποÏείτε να εισάγετε επιλογές για τα σημεία των γÏαμμών.
en: Here you can enter options that will apply to line points.
es: Aquí se pueden meter opciones que afectarán a los puntos de esta línea.
it: Editor delle opzioni del punto della linea.
ru: Редактор опций точки линии.
sk: Editor Äalších možností bodu krivky.
sq: ketu mund te futni opcionet te cilat do te vlejne per pikat e rrjeshtit

therion: loading area module ...
bg: зареждане на модула за облаÑти ...
cz: nahrávám modul pro oblasti ...
de: Lade Flächenmodul ...
el: φοÏτίζεται η ενότητα επιφανειών...
en: oading area module ...
es: áreas...
it: modulo aree ...
ru: загрузка Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð¾Ð±Ð»Ð°Ñтей ...
sk: nahrávam modul pre plochy ...
sq: duke lexuar modulin e fushes…

therion: Actual symbol theme.
bg: Ðктуален набир на Ñимволи
cz: Aktuální téma symbolů.
de: Aktueller Symbolsatz.
el: ΣÏμβολο
it: Simboli.
ru: Фильтр группы Ñимволов.
sk: Aktuálna téma symbolov.
sq: tema aktuale e simbolit.

therion: type
bg: тип
cz: typ
de: Typ
el: είδος
en: type
es: tipo
it: tipo
ru: тип
sk: typ
sq: lloji

therion: Area type.
bg: Тип на облаÑтта
cz: Typ oblasti.
de: Flächentyp.
el: Είδος επιφάνειας
en: Area type (clic on triangle to see menu).
es: Tipo de área. Clic en triángulo para ver el menú.
it: Tipo dell'area
ru: Тип облаÑти.
sk: Typ plochy.
sq: lloji I fushes.

therion: options
bg: опции
cz: volby
de: Optionen
el: επιλογές
en: options
es: opciones
it: opzioni
ru: опции
sk: možnosti
sq: opcionet

therion: Other area options.
bg: Други опции на облаÑтта.
cz: Další volby pro oblast.
de: Andere Flächenoptionen.
el: Άλλες επιλογές επιφανειών. Βλ. thbook.pdf
en: Other area options. See thbook.pdf
es: Otras opciones de área. Consultar thbook.pdf
it: Altre opzioni dell'area.
ru: Другие опции облаÑти.
sk: Ďalšie možnosti plochy.
sq: opcionet tjera te fushes.

therion: Select lines
bg: Избор на линии
cz: Vyber křivky
de: Linien auswählen
el: Επιλογή γÏαμμών
en: Select lines
es: Seleccionar
it: Selezione linee
ru: Выбор линий.
sk: Vyber krivky
sq: selekto rjeshtat

therion: Switch to insert line into area mode.
bg: Превключи в режим поÑтавÑне на линии-граници в облаÑтта.
cz: VýbÄ›r ohraniÄujících kÅ™ivek oblasti.
el: Î‘Ï†Î¿Ï Ï€Î±Ï„Î®ÏƒÏ„Îµ εδώ, επιλέγετε με το ποντίκι τις γÏαμμές οÏίων της επιφάνειας (Ï€Ïέπει να τέμνονται)
en: After clicking here, select by mouse this area border lines (they must intersect).
es: Tras clicar aquí, con el ratón puedes seleccionar líneas que limiten un área (deben cortarse entre sí).
it: Cambia per inserire linee nell'area.
ru: ПереключитÑÑ Ð² режим вÑтавки линий-границ в облаÑть.
sk: Po stlaÄení môžete zaÄaÅ¥ vkladaÅ¥ krivky ohraniÄujúce plochu.
sq: pasi te klikoni ketu, selekto me mi rjeshtat e kufirit te fushes (ato duhet te nderlidhen)

therion: Delete ID from area.
bg: Изтрий Ð»Ð¸Ð½Ð¸Ñ Ð¿Ð¾ ID от облаÑтта.
cz: Odstranění objektu z oblasti.
de: Lösche ID aus Fläche.
el: ΔιαγÏαφή ID από επιφάνεια
en: Delete selected line from list (will not be part of area borders)
es: Borrar la línea seleccionada de la lista (dejará de limitar este área).
it: Rimuovi identificativo dall'area.
ru: Удалить линию по ИД из облаÑти.
sk: Odstrániť krivku z daným ID z plochy.
sq: fshije ID prej fushes

therion: Insert ID
bg: Вмъкни по ID
cz: Vlož ID
de: ID einfügen
el: Εισαγωγή ID
en: Insert ID
es: Insertar ID
it: Identificativo
ru: Ð’Ñтавить по ИД
sk: Vlož ID
sq: fute ID-ne

therion: Insert given id.
bg: Вмъкни линиÑ-граница по зададено ID.
cz: Vloží objekt s daným ID.
de: Angegebene ID einfügen.
el: Εισαγωγή ID άλλο από το Ï€ÏοκαθοÏισμένο του Xtherion
en: Insert given id instead of Xtherion default.
es: Insertar nombre (ID) indicado, no el nombre que therion crea automáticamente
it: Inserisci l'identificativo specificato
ru: Ð’Ñтавить линию-границу по заданному ИД.
sk: VložiÅ¥ ID krivky do zoznamu kriviek ohraniÄujúcich plochu.
sq: fute ID-n e dhene ne vend te X-therion

therion: ID to insert.
bg: ID за вмъкване
cz: ID objektu ke vložení.
de: einzufügende ID.
el: Εισαγωγή ID.
en: ID to insert.
es: Escribir el nombre (ID) a insertar.
it: Identificativo da inserire.
ru: ИД линии Ð´Ð»Ñ Ð²Ñтавки
sk: ID na vloženie.
sq: ID-ja per tu futur.

therion: Update
bg: Обнови
cz: Aktualizovat
de: Aktualisieren
el: ΕμημέÏωση
en: Update
es: Actualizar
it: Aggiorna
ru: Обновить
sk: Aktualizovať
sq: aktualizo

therion: Click this button to apply changes you made to area.
bg: ÐатиÑнете този бутон за да приложите промените, направени в облаÑтта.
cz: Aktualizace oblasti.
de: Klicke diesen Knopf, um Änderungen an einer Fläche anzuwenden.
el: Κάντε κλικ να γίνει εφαÏμογή των αλλαγών που κάνατε στην επιφάνεια.
en: Click this button to apply changes you made to area.
es: Clicar aquí después de modificar las propiedades de un área.
it: Premi questo bottone per fare modifiche all'area.
ru: Ðажмите Ñту кнопку Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ Ñделанных Ð´Ð»Ñ Ð¾Ð±Ð»Ð°Ñти.
sk: Aktualizovať plochu.
sq: kliko kete buton te aktualizosh ndrimet te cilat I ke bere ne fushe

therion: Show
bg: Покажи
cz: Zobrazit
de: Zeige
el: Εμφάνιση
en: Show
es: Mostrar
it: Mostra
ru: Показать
sk: Zobraziť
sq: trego

therion: Show area border lines.
bg: Покажи границите на облаÑтта.
cz: Zobrazí hranice oblasti.
de: Zeige Flächenbegrenzungen.
el: Εμφάνιση γÏαμμών οÏίων επιφάνειας
en: Show area border lines.
es: Mostrar líneas límite de área.
it: Mostra le linee del bordo dell'area.
ru: Показать линии-границы Ð´Ð»Ñ Ð¾Ð±Ð»Ð°Ñти.
sk: Zobraz hranice plochy.
sq: trego kufirin e vijave te fushes.

therion: Select line in area.
bg: Избери линиÑ.
cz: VýbÄ›r kÅ™ivky ohraniÄující oblast
de: Wähle Linie in Fläche.
el: Κάντε κλικ σε οποιαδήποτε γÏαμμή του καταλόγου για να επιλεχθεί η αντίστοιχη γÏαμμή οÏίου επιφάνειας στον καμβά.
en: Click on any list line to get corresponding area border line selected on canvas.
es: Cada renglón de la lista corresponde a una línea que limita esta área
it: Seleziona una linea nell'area.
ru: Выбор линии.
sk: Vyber hraniÄnú krivku.
sq: kliko ne cilindo rrjesht te listes qe te kesh rrjeshtin kufizues te fushes pershtatese, I zgjedhur ne pelhure

therion: loading main menu ...
bg: Зареждане на главното меню ...
cz: nahrávám hlavní menu ...
de: Lade Hauptmenü ...
el: φόÏτιση κÏÏιου μενοÏ
en: loading main menu ...
es: menú principal ...
it: menù principale ...
ru: загрузка главного меню ...
sk: nahrávam hlavné menu ...
sq: duke lexuar menyn kryesore…

therion: Open (no pics)
bg: Отвори (без изображениÑ)
cz: Otevřít (bez obrázků)
de: Öffne (keine Bilder)
el: Άνοιγμα (χωÏίς εικόνες)
en: Open (no pics)
es: Abrir (sin imágenes)
it: Apri (no pics)
ru: Открыть (без картинок)
sk: Otvoriť (bez obrázkov)
sq: hape (pa foto)

therion: Insert ...
bg: Вмъкни ...
cz: Vložit ...
de: Einfügen ...
el: Εισαγωγή...
en: Insert ...
es: Insertar ...
it: Inserisci ...
ru: Ð’Ñтавка
sk: Vložiť ...
sq: fute…

therion: point
bg: точка
cz: bod
de: Punkt
el: σημείο
en: point
es: punto
it: punto
ru: точка
sk: bod
sq: pika

therion: line
bg: линиÑ
cz: křivka
de: Linie
el: γÏαμμή
en: line
es: línea
it: linea
ru: линиÑ
sk: krivku
sq: vija apo rjeshti

therion: area
bg: облаÑÑ‚
cz: oblast
de: Fläche
el: επιφάνεια
en: area
es: área
it: area
ru: облаÑть
sk: plochu
sq: fusha

therion: scrap
bg: Ñкрап
cz: scrap
de: Skizze
el: σκÏαπ
en: scrap
es: croquis
it: scrap
ru: Ñкрап
sk: scrap
sq: deponia

therion: text
bg: текÑÑ‚
cz: text
de: Text
el: κείμενο
en: text
es: texto
it: testo
ru: текÑÑ‚
sk: text
sq: teksti

therion: Auto adjust area
bg: Ðвтоматична наÑтройка на облаÑÑ‚
cz: Auto přizpůsobit
de: Fläche automatisch anpassen
el: Αυτόματη ÏÏθμιση επιφάνειας
en: Auto adjust area
es: Autoajustar área
it: Auto-ridimensiona area
ru: Ðвтоподгонка границ зоны риÑованиÑ.
sk: Prispôsob plochu
sq: fusha automatikisht e pershtatur

therion: Insert image
bg: Вмъкни изображение
cz: Vložit obrázek
de: Bild einfügen
el: Εισαγωγή εικόνας
en: Insert image
es: Insertar imagen
it: Inserisci immagine
ru: Ð’Ñтавить изображение
sk: Vložiť obrázok
sq: fute imazhin

therion: Zoom 100 %
bg: Мащаб 100%
cz: Zoom na 100 %
el: Μεγέθυνση 100%
en: Zoom 100 %
es: Zoom 100%
it: Zoom 100 %
ru: МаÑштаб 100 %
sk: Zoom 100%
sq: zmadho 100%

therion: Mouse mode.
bg: Режим 'мишка'.
cz: Klikací režim.
de: Mausmodus.
el: ΛειτουÏγία ποντικιοÏ.
en: Mouse mode.
es: Modo ratón.
it: Modalità del mouse.
ru: Режим мыши.
sk: Mód myši.
sq: miu ne funkcion

therion: Current mouse position.
bg: Текуща Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ Ð½Ð° курÑора.
cz: Aktuální pozice ukazatele myši.
de: Aktuelle Mausposition.
el: ΤÏέχουσα θέση ποντικιοÏ.
en: Current mouse position.
es: Posición actual del ratón.
it: Posizione del mouse.
ru: Ð¢ÐµÐºÑƒÑ‰Ð°Ñ Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ Ð¼Ñ‹ÑˆÐ¸.
sk: Aktuálna poloha myši.
sq: pozicioni aktual I miut.

therion: loading line procs ...
bg: зареждане на процедурите за Ð»Ð¸Ð½Ð¸Ñ ...
cz: zpracovávám křivky ...
el: φόÏτιση γÏαμμικών διαδικασιών...
en: loading line procs ...
es: procesos de línea ...
it: procedure di linea ...
ru: загрузка процедур Ð´Ð»Ñ Ð»Ð¸Ð½Ð¸Ð¹ ...
sk: naÄitavam modul kriviek ...
sq: duke lexuar proceduren rjeshtit…

therion: Map editor is not active. To activate it, open existing file or create new one.
bg: Редактора на карти не е активен. За активиране отворете ÑъщеÑтвуващ файл или Ñъздайте нов.
cz: Mapový editor není aktivní. Pro jeho aktivaci otevřete existující soubor nebo vytvořte nový.
de: Karteneditor ist nicht aktiv. Um ihn zu aktivieren, lade eine existierende Datei oder lege eine neue an.
el: Ο επεξεÏγαστής σχεδίου δεν είναι ενεÏγός. Για να τον ενεÏγοποιήσετε, ανοίξτε ένα αÏχείο ή δημιουÏγήστε νέο.
en: Map editor is not active. To activate it, open existing file or create new one.
es: El editor de mapas está inactivo. Para activarlo, abre un archivo existente o crea uno nuevo.
it: L'editor di mappa non è attivo. Per attivarlo apri un file o creane uno.
ru: Редактор карты не активен. Ð”Ð»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ð¸Ð¸ откройте ÑущеÑтвующий файл или Ñоздайте новый.
sk: Mapový editor nie je aktívny. Otvorte existujúci súbor alebo vytvorte nový.
sq: permiresuesi I hartes nuk eshte aktiv. Qe ta aktivizosh, hape fajlin egzistues ose krijo nje te ri

therion: Insert line
bg: Вмъкни линиÑ
cz: Vložit křivku
de: Linie einfügen
el: Εισαγωγή γÏαμμής
en: Insert line
es: Insertar línea
it: Inserisci linea
ru: Ð’Ñтавить линию
sk: Vložiť krivku
sq: fute rjeshtin-vijen

therion: Insert scrap
bg: Вмъкни Ñкрап
cz: Vložit scrap
de: Skizze einfügen
el: Εισαγωγή σκÏαπ
en: Insert scrap
es: Insertar croquis
it: Inserisci scrap
ru: Ð’Ñтавить Ñкрап
sk: Vložiť scrap
sq: fute deponin

therion: Insert text
bg: Вмъкни текÑÑ‚
cz: Vložit text
de: Text einfügen
el: Εισαγωγή κειμένου
en: Insert text
es: Insertar texto
it: Inserisci testo
ru: Ð’Ñтавить текÑÑ‚
sk: Vložiť text
sq: fute tekstin

therion: Insert area
bg: Вмъкни облаÑÑ‚
cz: Vložit oblast
de: Fläche einfügen
el: Εισαγωγή επιφάνειας
en: Insert area
es: Insertar área
it: Inserisci area
ru: Ð’Ñтавить облаÑть
sk: Vložiť plochu
sq: fute fushen

therion: Delete
bg: Изтрий
cz: Smazat
de: Lösche
el: ΔιαγÏαφή
en: Delete
es: Borrar
it: Rimuovi
ru: Удалить
sk: Odstrániť
sq: fshije

therion: deleting
bg: изтриване
cz: mazání
de: lösche
el: διαγÏαφή
en: deleting
es: borrando
it: rimuovendo
ru: удаление
sk: mazanie
sq: duke fshire

therion: moving command
bg: премеÑтване на команда
cz: přesun příkazu
de: Verschiebebefehl
el: εντολή μετακίνησης
en: moving command
es: desplazando comando
it: comando di spostamento
ru: перемещение команд
sk: presun príkazu
sq: komanda e levizjes

therion: creating endscrap
bg: Ñъздаване край на Ñкрапа
cz: vytvoření konce scrapu
de: Erzeuge Skizzenende
el: δημιουÏγία τέλους σκÏαπ (endscrap)
en: creating endscrap
es: creando línea final de croquis (endscrap)
it: creazione endscrap
ru: Ñоздание конца Ñкрапа
sk: vytvorenie konca scrapu
sq: duke kriju fundin e deponise

therion: scrap changes
bg: промÑна на Ñкрапа
cz: změna parametrů scrapu
de: Skizzenänderung
el: αλλαγές σκÏαπ
en: scrap changes
es: cambios del croquis (scrap)
it: modifiche dello scrap
ru: изменение Ñкрапа
sk: zmena parametrov scrapu
sq: ndryshimet ne deponi

therion: creating scrap
bg: Ñъздаване на Ñкрап
cz: vytvoření scrapu
de: Erzeuge Skizze
el: δημιουÏγία σκÏαπ
en: creating scrap
es: creando croquis (scrap)
it: creazione scrap
ru: Ñоздание Ñкрапа
sk: vytvorenie scrapu
sq: duke kriju deponin

therion: creating text
bg: Ñъздаване на текÑÑ‚
cz: vytvoření textu
de: Erzeuge Text
el: δημιουÏγία δοκιμής
en: creating text
es: creando texto
it: creazione testo
ru: Ñоздание текÑта
sk: vytvorenie textu
sq: duke kriju tekstin

therion: text changes
bg: промÑна на текÑÑ‚
cz: změna textu
de: Textänderungen
el: αλλαγές κειμένου
en: text changes
es: cambios de texto
it: modifiche del testo
ru: изменение текÑта
sk: zmena textu
sq: ndrimet e tekstit

therion: end point insertion
bg: Ñлагане на точка за край
cz: konec vkládání bodů
de: Endpunkt eingefügt
el: εισαγωγή Ï„ÎµÎ»Î¹ÎºÎ¿Ï ÏƒÎ·Î¼ÎµÎ¯Î¿Ï…
en: end point insertion
es: final de inserción de punto
it: inserimento punto finale
ru: вÑтавка конечной точки
sk: koniec vkladania bodov
sq: perfundo futjet e pikave

therion: select object
bg: избор на обект
cz: oznaÄ objekt
de: Objekt auswählen
el: επιλογή αντικειμένου
it: seleziona oggetto
ru: выбор объекта
sk: oznaÄ objekt
sq: selekto objektin

therion: Insert
bg: Вмъкни
cz: Vložit
de: Einfügen
el: Εισαγωγή
en: Insert
es: Insertar
it: Inserisci
ru: Ð’Ñтавка
sk: Vložiť
sq: fute

therion: insert point
bg: вмъкни точка
cz: vlož bod
de: Punkt einfügen
el: εισαγωγή σημείου
it: inserisci punto
ru: вÑтавка точки
sk: vlož bod
sq: fute piken

therion: insert line point
bg: вмъкни точка от линиÑ
cz: vlož bod křivky
de: Linienpunkt einfügen
el: εισαγωγή σημείου γÏαμμής
it: inserisci punto di linea
ru: вÑтавка точки линии
sk: vlož bod krivky
sq: fute piken e rjeshtit

therion: insert area border
bg: вмъкни граница на облаÑÑ‚
cz: vlož hranici plochy
de: Flächenrand einfügen
el: εισαγωγή οÏίων επιφάνειας
it: inserisci bordo dell'area
ru: вÑтавка границы облаÑти
sk: vlož okraj plochy
sq: fute kufirin e fushes

therion: Select
bg: Избери
cz: Vyber
de: Auswählen
el: Επιλογή
en: Select
es: Seleccionar
it: Seleziona
ru: Выбор
sk: Vybrať
sq: selekto

therion: scale scrap
bg: мащабиране на Ñкрап
cz: měřítko scrapu
de: Skizze skalieren
el: αλλαγή κλίμακα σκÏαπ
it: riscala lo scrap
ru: маÑштабирование Ñкрапа
sk: mierka scrapu
sq: deponia e matjeve

therion: insert sketch
bg: вмъкване на Ñкица
cz: vlož náÄrtek
de: Skizze einfügen
el: εισαγωγή σχεδίου
it: inserisci disegno
ru: вÑтавка фона
sk: vlož náÄrtok
sq: fute skicen

therion: creating point
bg: Ñъздаване на точка
cz: vytvoření bodu
de: Punkt erzeugen
el: δημιουÏγία σημείου
en: creating point
es: creando punto
it: creazione punto
ru: Ñоздание точки
sk: vytvorenie bodu
sq: duke kriju piken

therion: area changes
bg: изменение на облаÑтта
cz: změna parametrů oblasti
de: Flächenänderungen
el: αλλαγές επιφανειών
en: area changes
es: cambios de área
it: modifiche di area
ru: изменение облаÑти
sk: zmena parametrov plochy
sq: ndrimet e fushes

therion: point changes
bg: изменение на точка
cz: změna parametrů bodu
de: Punktänderungen
el: αλλαγές σημείων
en: point changes
es: cambios de punto
it: modifiche di punto
ru: изменение точки
sk: zmena parametrov bodu
sq: ndrimet e pikes

therion: Scrap sketch not inserted.
bg: Ðе е вмъкната Ñкица в Ñкрапа.
cz: NáÄrtek nebyl vložen.
de: Skizze nicht eingefügt.
el: δεν εισήχθη σχέδιο σκÏαπ
it: Disegno non inerito.
ru: Фон Ñкрапа не вÑтавлен.
sk: NáÄrtok nebol vložený.
sq: skica e deponise nuk eshte futur

therion: inserting scrap sketch
bg: вмъкване на Ñкица в Ñкрапа
cz: vkládám náÄrtek
de: Füge Skizze ein
el: εισαγωγή σχεδίου σκÏαπ
it: inserimento disegno
ru: вÑтавка фона Ñкрапа
sk: vloženie náÄrtku
sq: duke future skicen e deponise

therion: deleting scrap sketch
bg: изтриване на Ñкица от Ñкрапа
cz: odstraňuji náÄrtek
de: Lösche Skizze
el: διαγÏαφή σχεδίου σκÏαπ
it: rimozione disegno
ru: удаление фона Ñкрапа
sk: odstránenie náÄrtku
sq: duke fshire skicen e deponise

therion: toggle image visibility
bg: превключване на видимоÑтта на изображение
cz: přepnutí viditelnosti obrázku
de: Bildsichtbarkeit umschalten
el: αλλαγή οÏατότητας εικόνας
en: toggle image visibility
es: Cambiar visibilidad de la imagen
it: cambia visibilità immagine
ru: переключение видимоÑти изображениÑ
sk: prepni viditeľnosť obrázku
sq: shikueshmeria e toggle-imazhit

therion: grid - spacing %s
bg: мрежа - Ñтъпка %s
cz: mřížka - odstup %s
de: Gitterweite - %s
el: πλέγμα - μέγεθος %s
en: grid - spacing %s
es: anchura cuadrícula %s
it: reticolato - passo %s
ru: Ñетка - шаг %s
sk: sieť - rozostupy %s
sq: %s hapesira e katroreve

therion: station - %s
bg: репер %s
cz: měřiÄský bod - %s
de: Messpunkt - %s
el: σημείο χαÏτογÏάφησης - %s
en: station - %s
es: estación %s
it: caposaldo - %s
ru: пикет - %s
sk: mÄ›raÄský bod - %s
sq: stacioni - %s

therion: New *.th2 file needs to be saved before inserting background image. Save it now?
bg: ÐовиÑÑ‚ *.th2 Ñе нуждае от ÑъхранÑване преди да Ñе вмъкне фоново изображение. Да Ñе Запиши Ñега?
cz: Nový *.th2 soubor musí být uložen před vložením podkladového obrázku. Uložit nyní?
de: Neue *.th2-Datei muss gespeichert werden, bevor ein Hintergrundbild eingefügt werden kann. Jetzt speichern?
el: Το νέο αÏχείο *.th2 Ï€Ïέπει να αποθηκευτεί Ï€Ïιν εισαχθεί εικόνα φόντου. Αποθήκευση τώÏα;
en: New *.th2 file needs to be saved before inserting background image. Save it now?
es: Hay que guardar el nuevo archivo .th2 antes de cargar una imagen de fondo. ¿Guardar ahora?
it: Il nuovo file *.th2 deve essere salvato prima di inserire immagini di background. Salvala ora?
ru: Ðовый *.th2 файл нуждаетÑÑ Ð² Ñохранении перед вÑтавкой фонового изображениÑ. ЗапиÑать ÑейчаÑ?
sk: Pred vložením obrázku musíte nový *.th2 súbor uložiť. Chcete tak urobiť?
sq: arkivi I ri *.th2 duhet te ruhet para se te futet imazhi I prapavise.Te ruhet tani?

therion: inserting image
bg: вмъкване на изображение
cz: vkládám obrázek
de: Bild einfügen
el: εισαγωγή εικόνας
en: inserting image
es: insertando imagen
it: inserimento immagine
ru: вÑтавка изображениÑ
sk: vkladám obrázok
sq: duke futur imazhin

therion: removing image
bg: махане на изображение
cz: odstraňuji obrázek
de: Bild entfernen
el: διαγÏαφή εικόνας
en: removing image
es: eliminando imagen
it: rimozione immagine
ru: удаление изображениÑ
sk: odstránenie obrázku
sq: duke hequr imazhin

therion: moving image
bg: премеÑтване на изображение
cz: přesunuji obrázek
de: Bild verschieben
el: μετακίνηση εικόνας
en: moving image
es: moviendo imagen
it: spostamento immagine
ru: перемещение изображениÑ
sk: posun obrázku
sq: duke levizur imazhin

therion: gamma correction
bg: ÐºÐ¾Ñ€ÐµÐºÑ†Ð¸Ñ Ð½Ð° гамата
cz: gamma korekce
de: Gammakorrektur
el: gamma correction
en: gamma correction
es: corección gamma
it: gamma
ru: ÐºÐ¾Ñ€Ñ€ÐµÐºÑ†Ð¸Ñ Ð³Ð°Ð¼Ð¼Ñ‹
sk: gamma korekcia
sq: korekcioni gamma

therion: Insert point
bg: Вмъкни точка
cz: Vložit bod
de: Punkt einfügen
el: Εισαγωγή σημείου
en: Insert point
es: Insertar punto
it: Inserisci punto
ru: Ð’Ñтавить точку
sk: Vložiť bod
sq: fute piken

therion: Delete point
bg: Изтрий точка
cz: Smazat bod
de: Punkt löschen
el: ΔιαγÏαφή σημείου
en: Delete point
es: Borrar punto
it: Rimuovi
ru: Удалить точку
sk: Odstrániť bod
sq: fshije piken

therion: Split line
bg: Раздели линиÑ
cz: Rozdělit křivku
de: Linie teilen
el: ΔιαίÏεση γÏαμμής
en: Split line
es: Cortar línea
it: Dividi
ru: Разделить линию
sk: Rozdeliť krivku
sq: ndaje rjeshtin-vijen

therion: deleting line point
bg: Изтрий точка от линиÑта
cz: mazaní bodu na křivce
de: Linienpunkt löschen
el: διαγÏαφή σημείου γÏαμμής
en: deleting line point
es: borrando punto de línea
it: rimozione punto di linea
ru: Удалить точку линии
sk: mazanie bodu na Äiare
sq: duke fshire piken e rjeshtit-vijes

therion: inserting area border
bg: Вмъкване на граница на облаÑÑ‚
cz: vložení hranice oblasti
de: Flächenrand einfügen
el: εισαγωγή οÏίου επιφάνειας
en: inserting area border
es: insertando límite de área
it: inserimento bordo area
ru: вÑтавка границы облаÑти
sk: vloženie okraja plochy
sq: duke future kufirin e fushes

therion: deleting area border
bg: изтриване на ганица на облаÑÑ‚
cz: mazaní hranice oblasti
de: Flächenrand löschen
el: ÏŒÏιο επιφάνειας
en: deleting area border
es: borrando límite de área
it: rimozione bordo area
ru: удаление границы облаÑти
sk: mazanie okraja plochy
sq: duke fshire kufirin e fushes

therion: creating area
bg: Ñъздаване на облаÑÑ‚
cz: vytvoření oblasti
de: Fläche erzeugen
el: δημιουÏγία επιφάνειας
en: creating area
es: creando área
it: creazione area
ru: Ñоздание облаÑти
sk: vytvorenie plochy
sq: duke kriju fushen

therion: creating line
bg: Ñъздаване на линиÑ
cz: vytvoření křivky
de: Linie erzeugen
el: δημιουÏγία γÏαμμής
en: creating line
es: creando línea
it: creazione linea
ru: Ñоздание линии
sk: vytvorenie krivky
sq: duke kriju vijen apo rrjeshtin

therion: line changes
bg: изменение на линиÑ
cz: změna parametrů křivky
de: Linienänderung
el: αλλαγές γÏαμμής
en: line changes
es: cambios de línea
it: modifiche di linea
ru: изменение линии
sk: zmena parametrov krivky
sq: ndrimet e vijes

therion: line closing
bg: затварÑне на линиÑ
cz: uzavření křivky
de: Linie schließen
el: κλείσιμο γÏαμμής
en: line closing
es: cerrando línea
it: chiusura linea
ru: замыкание линии
sk: uzavretie krivky
sq: mbyllja e vijes-rjeshtit

therion: line opening
bg: отварÑне (разделÑне) на линиÑ
cz: otevření křivky
de: Linie öffnen
el: άνοιγμα γÏαμμής
en: line opening
es: abriendo línea
it: apertura linea
ru: размыкание линии
sk: otvorenie krivky
sq: hapja e vijes-rjeshtit

therion: inserting line point
bg: вмъкване на точка в линиÑ
cz: vložení bodu křivky
de: Linienpunkt einfügen
el: εισαγωγή σημείο γÏαμμής
en: inserting line point
es: insertando punto en la línea
it: inserimento punto di linea
ru: вÑтавка точки в линию
sk: vloženie bodu krivky
sq: duke futur piken e vijes

therion: line ending
bg: завършване на линиÑ
cz: ukonÄení kÅ™ivky
de: Linienende
el: τέλος γÏαμμής
en: line ending
es: finalizando línea
it: fine linea
ru: завершение линии
sk: ukonÄenie krivky
sq: rjeshti ne perfundim

therion: moving control point
bg: премеÑтване на управлÑваща точка
cz: posun řídícího bodu
de: Verschiebe Kontrollpunkt
el: μεταβαλλόμενο σημείο ελέγχου
en: moving control point
es: moviendo punto de control
it: spostamento punto di controllo
ru: перемещение управлÑющей точки
sk: posun kontrolného bodu
sq: duke levize piken e kontrollit

therion: split line
bg: разделÑне на линиÑ
cz: rozdělit křivku
de: Linie teilen
el: διαίÏεση γÏαμμής
en: split line
es: cortar línea
it: dividi la linea
ru: разделение линии
sk: rozdelenie Äiary
sq: ndarja e pikes-rjeshtit

therion: loading text editor ...
bg: зареждане на текÑÑ‚Ð¾Ð²Ð¸Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€ ...
cz: nahrávám text editor ...
de: Lade Texteditor ...
el: Άνοιγμα επεξεÏγαστή κειμένου...
en: loading text editor ...
es: editor de texto ...
it: editor di testo ...
ru: загрузка текÑтового редактора ...
sk: naÄítavam textový editor
sq: duke lexuar editorin e tekstit…

therion: Text Editor
bg: ТекÑтов редактор
cz: Text editor
de: Texteditor
el: ΕπεξεÏγαστής κειμένου
en: Text Editor
es: Editor de texto
it: Editor di testo
ru: ТекÑтовой редактор
sk: Textový editor
sq: editori I tekstit

therion: Files
bg: Файлове
cz: Soubory
de: Dateien
el: ΑÏχεία
en: Files
es: Archivos
it: File
ru: Файлы
sk: Súbory
sq: fajlat-arkivi

therion: Data table
bg: Таблица Ñ Ð´Ð°Ð½Ð½Ð¸
cz: Datová tabulka
de: Datentabelle
el: Πίνακας δεδομένων
en: Data table
es: Tabla de datos
it: Tabella dei dati
ru: Таблица данных
sk: Dátová tabuľka
sq: tabela e te dhenave

therion: Search & Replace
bg: ТърÑене и замÑна
cz: Najít & Nahradit
de: Suchen & ersetzen
el: Αναζήτηση και αντικατάσταση
en: Search & Replace
es: Buscar y cambiar
it: Cerca e sostituisci
ru: ПоиÑк и Замена
sk: Nájdi a NahraÄ
sq: kerko dhe ndero vendin

therion: Switch open files.
bg: Превключи отворениÑÑ‚ файл
cz: PÅ™epínaÄ otevÅ™ených souborů.
de: Geöffnete Dateien wechseln.
el: Η λίστα δείχνει τα ανοικτά αÏχεία. Επιλέξετε αυτό που σας ενδιαφέÏει.
en: This list shows open files. Click on the one you are interested.
es: Esta lista muestra los archivos abiertos. Haz clic en el que te interese.
it: Cambia tra i file aperti.
ru: ПоменÑть открытый файл.
sk: PrepínaÄ medzi otvorenými súbormi.
sq: kjo liste tregon fajlat e hapura. Kliko ne ate te cilen je I interesuar.

therion: Encoding
bg: Кодировка
cz: Kódování
de: Zeichenkodierung
el: Κωδικοσελίδα
en: Encoding
es: Codificación
it: Encoding
ru: Кодировка
sk: Kódovanie
sq: de-kodimi

therion: Change to
bg: Промени на
cz: Změnit na
de: Ändern in
el: Αλλαγή σε
en: Change to
es: Cambiar a
it: Cambia a
ru: Изменить на
sk: Zmeniť na
sq: ndero ne

therion: To set file encoding, type encoding name and press  button.
bg: За задавне на кодираовката на файла, въведете името на кодировката и натиÑнете бутона <ПромÑна>
cz: Nastavení kódování - vyberte kódování a stisknÄ›te tlaÄítko .
de: Um Zeichenkodierung zu ändern, gebe den Namen der Kodierung ein und drücke den  Knopf.
el: Για ÏÏθμιση κωδικοσελίδας, εισάγετε όνομα και πατήστε το κουμπί <Αλλαγή>
en: To set file encoding, type encoding name and press  button.
es: Para ajustar la codificación, escoje la que quieras y pulsa .
it: Per impostare l'encoding, scrivi il nome dell'encoding e premi il bottone 
ru: Ð”Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²ÐºÐ¸ файла введите Ð¸Ð¼Ñ ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²ÐºÐ¸ и нажмите кнопку <Изменить>.
sk: Na nastavenie kódovania, vložte identifikátor kódovania a stlaÄte .
sq: per te vendos fajlin per dekodim, shtype emrin per dekodim dhe kliko butonin 

therion: Scan data format
bg: Определи формата на данните
cz: Skenovat formát dat
de: Datenformat einlesen
el: Έλεγχος μοÏφής δεδομένων
en: Scan data format
es: Escanear formato de datos
it: Imposta formato dati
ru: Определить формат данных
sk: Nájdi formát dát
sq: skano formatin e shenimeve

therion: Scan data format and rebuild centerline data insertion tool.
bg: Ðвтоматично определи формата на данните и преуÑтрой полетата за въвеждане.
cz: PÅ™eÄte formát dat v souboru a upraví pole pro vkládání měření.
de: Datenformat einlesen und Messdateneditor anpassen.
el: Ελέγχει την σειÏά των δεδομένων και ξανασυντάσσει αυτόματα τα textbox για εισαγωγή δεδομένων.
en: Scans data order and rebuilds data insertion textboxes accordingly.
es: Ajusta las casillas al orden en que has tomado tus datos.
it: Imposta il formato dati e ricostruisci la tabella inserimento dati.
ru: ÐвтоматичеÑки определить формат данных и переÑтроить Ð¿Ð¾Ð»Ñ Ð²Ð²Ð¾Ð´Ð°.
sk: NaÄíta formát dát z predchádzajúcich riadkov a prísluÅ¡ne zmení panel na vkladanie dát.
sq: skanon formatin e shenimeve dhe rinderton tekst-katroret per futjen e shenimeve net e njejten kohe

therion: Enter station names
bg: Въвеждане на името на репераната точка
cz: Zadávat názvy bodů
de: Messpunktnamen eingeben
el: Εισαγωγή ονομάτων σημείων χαÏτογÏάφησης
en: Enter station names
es: Nombrar estaciones
it: Scrivi nomi capisaldi
ru: Ввод номера Ñледующего пикета
sk: Zadávanie názvov bodov
sq: futi emrat e stacioneve

therion: Check if you want to insert station names for each shot.
bg: Сложете отбелÑзка, ако иÑкате Ñледващите имена на репери да Ñе въвеждат автоматично.
cz: ZaÅ¡krtnÄ›te pokud chcete zadávat název pro každý měřiÄský bod.
de: Ankreuzen, wenn du Messpunktnamen für jede Strecke eingeben willst.
el: Επιλέξτε για εισαγωγή των ονομάτων των σημείων χαÏτογÏάφησης για το κάθε διάνυσμα.
en: Check if you want to insert station names for each shot.
es: Marcar si se quiere dar un nombre a cada tirada topo.
it: Attiva per inserire i nomi dei capisaldi per ogni tratta.
ru: УÑтановите отметку, еÑли хотите, чтобы проиÑходил автоматичеÑкий ввод номера Ñледующего пикета.
sk: Zaškrtnite pokiaľ chcete vkladať aj mená bodov pre každú zámeru.
sq: kontrollo nese deshiron ti fusesh emrat e stacioneve per secilin foto

therion: Auto format selection
bg: Ðвтоматичен избор на формат.
cz: Auto formátování výběru
de: Auswahl formatieren
el: Αυτόματη μοÏφοποίηση επιλογής
en: Auto format selection
es: Autoformatear selección
it: Selezione formato automatico.
ru: ПереÑтроить выделенные данные
sk: Naformátuj výber
sq: zgjedhja automatike e formatit

therion: Format selection to given table.
bg: Избор на формат за определена таблица
cz: Naformátuje výběr do tabulky.
de: Formatiere Auswahl zur gegebenen Tabelle.
el: ΜοÏφοποίηση επιλογής σÏμφωνα με το δεδομένο πίνακα.
en: Format selection to given table.
es: Formatea la seleccion (ajusta tabuladores, etc).
it: Imposta selezione alla tabella specificata.
ru: ПривеÑти выделенные данные к заданному формату.
sk: Naformátuje výber do dátovej tabuľky.
sq: zgjedhja e formatit per tabelen e dhene

therion: search
bg: търÑене
cz: hledat
de: Suche
el: αναζήτηση
en: search
es: buscar
it: cerca
ru: поиÑк
sk: hľadaj
sq: kerko

therion: Search expression.
bg: Израз за търÑене
cz: Hledaný výraz.
de: Suche Muster.
el: ΠληκτÏολογήσετε τις λέξεις για αναζήτηση.
en: Enter word(s) to search for.
es: Introducir palabra(s) a buscar.
it: Testo da cercare.
ru: Выражение поиÑка.
sk: Hľadaný výraz.
sq: shkruaje fjalen per tu kerkuar

therion: replace
bg: замÑна
cz: nahradit
de: Ersetze
el: Αντικατάσταση
en: replace
es: cambiar
it: sostituisci
ru: замена
sk: nahradiť
sq: ndero vendin

therion: Check whether to replace found expression.
bg: Сложете отбелÑзка, ако иÑкате да Ñе извърши замÑна.
cz: Zaškrtněte pokud chcete nahradit nalezené výrazy.
el: Επιλέξτε για αντικατάσταση της ευÏεθείσας πεÏίπτωσης.
en: Check whether to replace found expression.
es: Marcar para cambiar los lo encontrado por lo que se escriba aquí.
it: Attiva per sostituire il testo trovato.
ru: УÑтановите отметку, еÑли хотите произвеÑти замену.
sk: Zaškrtnúť pokiaľ sa má nájdený výraz nahradiť iným.
sq: kontrollo a duhet te ndrohet fjalia e gjetur

therion: Replace expression.
bg: Израз за замÑна.
cz: Řetězec, kterým bude výraz nahrazen.
de: Ersetze Muster.
el: Τα αποτελέσματα αναζήτησης θα αντικατασταθοÏν από το συγκεκÏιμένο κείμενο.
en: Search results will be replaced by the string entered here.
es: Los resultados de la búsqueda serán cambiados por lo que escribas aquí.
it: Sostituisci testo.
ru: Выражение замены.
sk: Výraz na nahradenie.
sq: rezultatet e gjetura do te ndrohen nga fjalia e future ketu

therion: case sensitive search
bg: да Ñе отчита региÑтъра
cz: rozlišovat velikost písmen
de: Groß- und Kleinschreibung bei Suche berücksichtigen
el: case sensitive αναζήτηση
en: case sensitive search
es: sensible a mayúsculas
it: ricerca case-sensitive
ru: учитывать региÑтр
sk: rozlišovať malé a veľké
sq: kerkimi -rast sensitiv

therion: Check if search should be case sensitive.
bg: Сложете отбелÑзка за да Ñе извърши търÑене Ñ Ð¾Ñ‚Ñ‡Ð¸Ñ‚Ð°Ð½Ðµ на региÑтъра.
cz: Vyhledávání s rozlišením velikosti písmen.
de: Ankreuzen, wenn Suche Groß- und Kleinschreibung berücksichtigen soll.
el: Επιλέξετε αν η αναζήτηση Ï€Ïέπει να είναι case sensitive.
en: Check if search should be case sensitive.
es: Marcar para que la búsqueda distinga entre mayúsculas y minúsculas.
it: Attiva se la ricerca deve essere case-sensitive.
ru: УÑтановите отметку, чтобы поиÑк проиÑходил Ñ ÑƒÑ‡ÐµÑ‚Ð¾Ð¼ региÑтра.
sk: Zaškrtnite pokiaľ pri hľadaní chcete rozlišovať malé a veľké písmená.
sq: kontrollo nese kerkimi do te jete rast-sensitiv

therion: regular expressions
bg: регулÑрни изрази
cz: regulární výrazy
de: Regulärer Ausdruck.
el: κανονικό συντακτικό (χÏήση Î¼Ï€Î±Î»Î±Î½Ï„Î­Ï Î±Î½Î±Î¶Î®Ï„Î·ÏƒÎ·Ï‚)
en: regular expressions
es: patrón regular
it: esperssioni regolari
ru: регулÑрные выражениÑ
sk: regulárny výraz
sq: shprehje te rregullta

therion: Check whether to evaluate search and replace as regular expressions.
bg: Сложете отбелÑзка за да Ñе обработват регулÑрните изрази при търÑене и замÑна.
cz: Zaškrtněte pokud chcete vyhledávat nebo nahrazovat pomocí regulárních výrazů.
de: Ankreuzen, ob Suchen und Ersetzen regulären Ausdruck nutzen soll.
el: Επιλέξτε για αναζήτηση με κανονικό συντακτικό(χÏήση Î¼Ï€Î±Î»Î±Î½Ï„Î­Ï Î±Î½Î±Î¶Î®Ï„Î·ÏƒÎ·Ï‚)
en: Check whether to search using regular expressions.
es: Búsqueda usando comodines.
it: Attiva per ricerca e sostituzione con espressioni regolari.
ru: УÑтановите отметку, чтобы обрабатывать регулÑрные Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ поиÑке и замене.
sk: Zaškrtnite ak sa má hľadanie a nahradenie vykonávať v móde regulárnych výrazov.
sq: kontrollo a do te kerkosh duke perdor shprehje te zakonta-rregullta

therion: search selection only
bg: търÑене Ñамо в избраното
cz: pouze ve vybraném textu
de: Nur in Auwahl suchen
el: αναζήτηση μόνο σε επιλογή
en: search selection only
es: selección solo
it: cerca solo nella selezione
ru: иÑкать в выделенном
sk: iba vo vybratom texte
sq: kerko vetem selekcionet

therion: Check whether to do search only in selected text.
bg: Сложете отбелÑзка за да ае търÑи Ñамо в избраниÑÑ‚ текÑÑ‚.
cz: Zaškrtněte pokud chcete vyhledávat pouze ve vybraném textu.
de: Ankreuzen, wenn nur im ausgewählten Text gesucht werden soll.
el: Επιλέξετε για να γίνει η αναζήτηση μόνο στο επιλεγμένο κείμενο.
en: Check whether to do search only in selected text.
es: Marcar para buscar solo dentro del texto seleccionado.
it: Attiva per cercare solo nel testo selezionato.
ru: УÑтановите отметку, чтобы иÑкать только в выделенном текÑте.
sk: ZaÅ¡krtnite pokiaľ hladanie má prebehnúť len v oznaÄenom texte.
sq: kontrollo a do te perdoresh kerkimin vetem ne tekstin e selekcionuar

therion: First
bg: Първи
cz: První
de: Erstes
el: ΠÏώτο
en: First
es: Buscar
it: Primo
ru: Первый
sk: Prvý
sq: e para

therion: Search or replace first expression in the file.
bg: ТърÑене или замÑна на първиÑÑ‚ израз във файла.
cz: Najde nebo nahradí první výraz v souboru.
de: Suche oder ersetze erstes Muster in der Datei.
el: Αναζήτηση ή αντικατάσταση Ï€Ïώτης πεÏίπτωσης στο αÏχείο.
en: Search or replace first expression in the file.
es: Buscar o reemplazar el primer resultado.
it: Cerca o sostituisci la prima istanza del testo nel file.
ru: ПоиÑк или замена первого Ð²Ñ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð² файле.
sk: Nájte poprípade nahradí prvý výskyt hľadaného výrazu v súbore.
sq: kerko ose ndro shprehjet e para ne fajlla

therion: Search or replace next expression after the cursor in the file.
bg: ТърÑене или замÑна на ÑледващиÑÑ‚ израз Ñлед курÑора във файла.
cz: Najde nebo nahradí následující výraz v souboru.
de: Suche oder ersetze nächstes Muster nach dem Cursor in der Datei.
el: Αναζήτηση ή αντικατάσταση επόμενης πεÏίπτωσης μετά τον κοÏÏσοÏα.
en: Search or replace next expression after the cursor in the file.
es: Buscar o reemplazar el siguiente resultado.
it: Cerca o sostituisci la prossima istanza del testo nel file dopo il cursore.
ru: ПоиÑк или замена Ñледующего поÑле курÑора Ð²Ñ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð² файле.
sk: Nájdi alebo nahraÄ nasledujúci výraz v súbore.
sq: kerko ose ndroje shprehjen e ardhshme pas kursorit ne fajll

therion: All
bg: Ð’Ñичко
cz: Vše
de: Alles
el: Όλα
en: All
es: Todo
it: Tutti
ru: Ð’Ñе
sk: Všetko
sq: te gjithat

therion: Search or replace all expressions in the file.
bg: ТърÑене или замÑна на вÑички изрази във файла.
cz: Najde nebo nahradí všechny výrazy v souboru.
de: Suche oder ersetze alle Muster in der Datei.
el: Αναζήτηση ή αντικατάσταση όλων των πεÏιπτώσεων στο αÏχείο.
en: Search or replace all expressions in the file.
es: Buscar o reemplazar todos los resultados.
it: Cerca o sostituisci tuute le frasi nel file.
ru: ПоиÑк или замена вÑех вхождений в файле.
sk: Nájdi alebo nahraÄ vÅ¡etky výrazy v súbore.
sq: kerko ose ndroji te gjitha shprehjet ne fajlla

therion: Clear
bg: ИзчиÑване
cz: Zrušit
de: Löschen
el: ΑναίÏεση
en: Clear
es: Deseleccionar
it: Cancella
ru: ОчиÑтка
sk: VyÄisti
sq: e paster

therion: Clear all highlights in the file.
bg: ИзчиÑтване на вÑички оÑветени текÑтови учаÑтъци във файла.
cz: Zruší zvýraznění nalezených výrazů v souboru.
de: Lösche alle Hervorhebungen in der Datei.
el: ΑναίÏεση όλων των τονισθέντων.
en: Clear all highlights in the file.
es: Deseleccionar todo lo seleccionado.
it: Cancella tutte le evidenziazioni nel file.
ru: ОчиÑтка вÑех подÑвеченных учаÑтков текÑта.
sk: Zruší zvýraznenie nájdených výrazov v súbore.
sq: fshij te gjitha selekcionimet apo hijezimet ne fajlla

therion: Opening %s ...
bg: ОтварÑне %s ...
cz: Otevírám %s ...
de: Öffne %s ...
el: Άνοιγμα του %s ...
en: Opening %s ...
es: Abriendo %s ...
it: Apertura %s ...
ru: Открытие %s ...
sk: Oteváram %s ...
sq: duke hap %s …

therion: File %s is not saved. Save it now?
bg: Файлът %s не е Ñъхранен. Да го ÑÑŠÑ…Ñ€Ð°Ð½Ñ Ñега?
cz: Soubor %s není uložen. Uložit nyní?
de: datei %s nicht gespeichert. Speichere jetzt?
el: Το αÏχείο %s δεν έχει αποθηκευτεί. Αποθήκευση τώÏα;
en: File %s is not saved. Save it now?
es: El archivo %s no ha sido guardado. ¿Guardar ahora?
it: Il file %s non è salvato. Salva ora?
ru: Файл %s не Ñохранен. Сохранить его ÑейчаÑ?
sk: Súbor %s nie je uložený. Uložiť teraz?
sq: fajlli %s nuk eshte I ruajtur. Ta ruajm tani?

therion: File %s was modified outside xtherion. Save it anyway?
bg: Файлът %s е изменен от друго приложение. Да го ÑÑŠÑ…Ñ€Ð°Ð½Ñ Ð²ÑŠÐ¿Ñ€ÐµÐºÐ¸ това?
cz: Soubor %s byl modifikován mimo xtherion. Přesto uložit?
de: Datei %s wurde außerhalb von Xtherion geändert. Trotzdem speichern?
el: Το αÏχείο %s Ï„Ïοποποιήθηκε εκτός xtherion. Îα αποθηκευτεί όπως και να'ναι;
en: File %s was modified outside xtherion. Save it anyway?
es: El archivo %s ha sido modificado fuera de xtherion. ¿Guardar de todos modos?
it: Il file %s è stato modificato fuori da xtherion. Salva comunque?
ru: Файл %s был изменен другим приложением. Сохранить не ÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð° Ñто?
sk: Súbor %s bol modifikovaný mimo programu. Uložiť aj tak?
sq: fajlli %s eshte ndryshuar jashte x therion-it. Ta ruajm sido qe te jete?

therion: Saving %s ...
bg: Съхранение %s ...
cz: Ukládám %s ...
de: Speichere %s ...
el: Αποθήκευση του %s ...
en: Saving %s ...
es: Guardando %s ...
it: Salvataggio %s ...
ru: Сохранение %s ...
sk: Ukladám %s ...
sq: duke ruajtur %s. . .

therion: New
bg: Ðов
cz: Nový
de: Neu
el: Îέο
en: New
es: Nuevo
it: Nuovo
ru: Ðовый
sk: Nový
sq: e re

therion: Open
bg: Отвори
cz: Otevřít...
de: Öffnen
el: Άνοιγμα
en: Open
es: Abrir
it: Apri
ru: Открыть
sk: Otvoriť
sq: hape

therion: Save
bg: Запиши
cz: Uložit
de: Speichern
el: Αποθήκευση
en: Save
es: Guardar
it: Salva
ru: Сохранить
sk: Uložiť
sq: ruaje

therion: Save as
bg: Запиши като
cz: Uložit jako...
de: Speichern als
el: Αποθήκευση ως...
en: Save as
es: Guardar como
it: Salva come
ru: Сохранить как
sk: Uložiť ako
sq: ruaje si

therion: Save all
bg: Запиши вÑички
cz: Uložit vše
de: Speichere alles
el: Αποθήκευση όλων
en: Save all
es: Guardar todo
it: Salva tutti
ru: Сохранить вÑÑ‘
sk: Uložiť všetko
sq: ruaji te gjitha

therion: Auto save
bg: ÐвтоÑъхранение
cz: Automaticky ukládat
de: Automatisch speichern
el: Αυτόματη αποθήκευση
en: Auto save
es: Autoguardar
it: Auto salva
ru: ÐвтоÑохранение
sk: Ukladať automaticky
sq: ruajtja automatike

therion: Import
bg: ВнаÑÑне
cz: Import
de: Importieren
el: Εισαγωγή...
it: Importa
ru: Импорт
sk: Import
sq: importi

therion: Next
bg: Следващ
cz: Následující
de: Nächstes
el: Επόμενο
en: Next
es: Siguiente
it: Prossima
ru: Следующий
sk: Nasledujúci
sq: tjetra

therion: Previous
bg: Предишен
cz: Předchozí
de: Vorheriges
el: ΠÏοηγοÏμενο
en: Previous
es: Anterior
it: Precedente
ru: Предыдущий
sk: Predchádzajúci
sq: e perparmja

therion: Edit
bg: Редактиране
cz: Editovat
de: Bearbeiten
el: ΔιόÏθωση
en: Edit
es: Editar
it: Edita
ru: Редактировать
sk: Upraviť
sq: permireso

therion: Undo
bg: ОтмÑна
cz: Zpět
de: Rückgängig
el: ΑναίÏεση
en: Undo
es: Deshacer
it: Indietro
ru: Отменить
sk: Späť
sq: prishe-undo

therion: Redo
bg: ВъзÑтановÑване
cz: Opakovat
de: Wiederholen
el: Επανάληψη
en: Redo
es: Rehacer
it: Rifai
ru: Вернуть
sk: Opakovať
sq: beje prape-redo

therion: Cut
bg: Изрежи
cz: Vyjmout
de: Ausschneiden
el: Αποκοπή
en: Cut
es: Cortar
it: Taglia
ru: Вырезать
sk: Vystrihnúť
sq: preje

therion: Copy
bg: Копирай
cz: Kopírovat
de: Kopieren
el: ΑντιγÏαφή
en: Copy
es: Copiar
it: Copia
ru: Копировать
sk: Kopírovať
sq: kopjo

therion: Paste
bg: Вмъкни
cz: Vložit
de: Einfügen
el: Επικόλληση
en: Paste
es: Pegar
it: Incolla
ru: Ð’Ñтавить
sk: Vložiť
sq: vendose-paste

therion: Select all
bg: Избери вÑичко
cz: Vybrat vše
de: Alles auswählen
el: Επιλογή όλων
en: Select all
es: Seleccionar todo
it: Seleziona tutto
ru: Выделить вÑÑ‘
sk: Vyber všetko
sq: zghedhi-selekciono te gjitha

therion: Auto indent
bg: Ðвтоматичен отÑтъп
cz: Automaticky odsazovat
de: Automatisch einrücken
el: Αυτόματη παÏαγÏαφοποίηση
en: Auto indent
es: Autoindentar
it: Indentazione automatica
ru: ÐвтоотÑтуп
sk: Automatické odsadenie
sq: indenti automatik

therion: Processing line %s ...
bg: Обработване на ред %s ...
cz: Zpracovávám řádek %s ...
de: Verarbeite Zeile %s ...
el: ΕπεξεÏγασία γÏαμμής %s ...
en: Processing line %s ...
es: Procesando línea %s ...
it: Elaborazione linea %s ...
ru: Обработка Ñтроки %s ...
sk: Spracúvam riadok %s ...
sq: rrjeshti %s ne proces…

therion: Text editor is not active. To activate it, open existing file or create new one.
bg: ТекÑтовиÑÑ‚ редактор не е активен. За активиране отворете ÑъщеÑтвуващ файл или Ñъздайте нов.
cz: Textový editor není aktivní. Pro jeho aktivaci otevřete existující soubor nebo vytvořte nový.
de: Texteditor ist nicht aktiv. Um ihn zu aktivieren, öffne eine existierende Datei oder lege eine neue an.
el: Ο επεξεÏγαστής κειμένου δεν είναι ενεÏγός. Για να τον ενεÏγοποιήσετε, ανοίξτε αÏχείο, ή δημιουÏγήστε νέο.
en: Text editor is not active. To activate it, open existing file or create new one.
es: El editor de texto está inactivo. Para activarlo, abre un archivo existente o crea uno nuevo.
it: L'editor di testo non è attivo. Per attivarlo apri un file o creane uno.
ru: ТекÑтовый редактор неактивен. Ð”Ð»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ð¸Ð¸ откройте ÑущеÑтвующий файл или Ñоздайте новый.
sk: Textový editor nie je aktívny. Otvorte existujúci súbor alebo vytvorte nový.
sq: editori I tekstit nuk eshte aktiv. Qe ta aktivizosh, hape fajllin egzistues ose krijo nje tjeter.

therion: Control...
bg: Контрол ...
cz: Ovládání...
de: Kontrollfeld...
el: Έλεγχος...
en: Control...
es: Control
it: Controlli ...
ru: Управление...
sk: Ovládanie...
sq: kontrolli. . .

therion: BAC calculator...
bg: Калкулатор на алкохол ...
cz: Alkohol tester...
de: Blutalkoholrechner
el: Αλκοτέστ...
en: BAC calculator...
es: Borrachímetro
it: Calcolatore BAC ...
ru: КалькулÑтор алкоголÑ...
sk: Alkohol tester...
sq: matesi I alkoolit-BAC

therion: Calibrate bitmap...
bg: Калибриране на изображение ...
de: Bild kalibrieren...
it: Mappa georeferenziata...

therion: About...
bg: За програмата ...
cz: O programu...
de: Über...
el: Σχετικά...
en: About...
es: Acerca de...
it: Versione ...
ru: О программе...
sk: O programe...
sq: per programin…

therion: Search
bg: ТърÑене
cz: Hledat
de: Suche
el: Αναζήτηση
en: Search
es: Buscar
it: Cerca
ru: ПоиÑк
sk: Hľadať
sq: kerko

therion: Close
bg: Затвори
cz: Zavřít
de: Schließen
el: Κλείσιμο
en: Close
es: Cerrar
it: Chiudi
ru: Закрыть
sk: Zavrieť
sq: mbyll

therion: theme all-symbols
bg: вÑички Ñимволи
cz: všechny symboly
de: Alle Zeichen
el: όλα
it: tutti
ru: вÑе
sk: všetky symboly
sq: tematizo te gjitha simbolet-shenjat

therion: New file
bg: Ðов файл
de: Neue Datei
el: Îέο αÏχείο
it: Nuovo
sk: Nový súbor
sq: arkivi-fajlli I ri

therion: Open file
bg: Отвори файл
de: Datei öffnen
el: Άνοιγμα
it: Apri
sk: Otvoriť súbor
sq: hape fajllin

therion: Save file
bg: Запиши файл
de: Datei speichern
el: Αποθήκευση
it: Salva
sk: Uložiť súbor
sq: ruaje fajllin

therion: Save file as
bg: Запиши файл като
de: Datei speichern als
el: Αποθήκευση ως
it: Salva come
sk: Uložiť súbor ako
sq: ruaje fajllin si

therion: Close file
bg: Затвори файл
de: Datei schließen
el: Κλείσιμο αÏχείου
it: Chiudi
sk: Zatvoriť súbor
sq: mbylle fajllin

therion: Switch to text editor
bg: Превключи на текÑтов редактор
de: Zum Texteditor wechseln
el: Μετάβαση σε επεξεÏγαστή κειμένου
it: Editor di testi
sk: Prepnúť na textový editor
sq: kalo tek editori i tekstit

therion: Switch to map editor
bg: Превключи на редактор на карти
de: Zum Karteneditor wechseln
el: Μετάβαση σε επεξεÏγαστή σχεδίου
it: Editor di mappe
sk: Prepnúť na mapový editor
sq: kalo tek editori I hartes

therion: Switch to compiler
bg: Превключи на компилатор
de: Zum Compiler wechseln
el: Μετάβαση σε συντάκτη
it: Compilatore
sk: Prepnúť na kompilátor
sq: kalo tek kompilatori

therion: Compile
bg: Компилирай
cz: Kompilovat
de: Compilieren
el: ΣÏνταξη
en: Compile
es: Compilar
it: Compila
ru: Компилировать
sk: Kompilovať
sq: kompilo

therion: Switch to select mode
bg: Превключи на режим 'Избиране'
de: In Auswahlmodus wechseln
el: Μετάβαση σε λειτουÏγία επιλογής
it: Modalità di selezione
sk: Prepnúť do módu na výber objektu
sq: kalo tek moduli per selekcionim

therion: Select next scrap
bg: Избери ÑледващиÑÑ‚ Ñкрап
de: Nächste Skizze auswählen
el: Επιλογή επόμενου σκÏαπ
it: Seleziona il prossimo scrap
sk: Vyber nasledujúci scrap
sq: zgjedhe deponin e ardhshme

therion: Select next area
bg: Избери Ñледващата облаÑÑ‚
de: Nächste Fläche auswählen
el: Επιλογή επόμενης επιφάνειας
it: Seleziona la prossima area
sk: Vyber nasledujúcu plochu
sq: zgjedhe-selekto fushen e ardhshme

therion: Zoom in
bg: Приближи
de: Vergrößern
el: Μεγέθυνση
it: Zoom in
sk: ZväÄÅ¡iÅ¥
sq: zmadho

therion: Zoom out
bg: Отдалечи
de: Verkleinern
el: ΣμίκÏυνση
it: Zoom out
sk: Zmenšiť
sq: zvogelo

therion: Insert new scrap
bg: Вмъкни нов Ñкрап
de: Neue Skizze einfügen
el: Εισαγωγή νέου σκÏαπ
it: Inserisci un nuovo scrap
sk: Vložiť nový scrap
sq: fute deponin e re

therion: Insert new point
bg: Вмъкни нова точка
de: Neuen Punkt einfügen
el: Εισαγωγή νέου σημείου
it: Inserisci un nuovo punto
sk: Vložiť nový bod
sq: fute piken e re

therion: Insert new line
bg: Вмъкни нова линиÑ
de: Neue Linie einfügen
el: Εισαγωγή νέας γÏαμμής
it: Inserisci una nuova linea
sk: Vložiť novú krivku
sq: fute rrjeshtin e ri

therion: Insert new area
bg: Вмъкни нова облаÑÑ‚
de: Neue Fläche einfügen
el: Εισαγωγή νέας επιφάνειας
it: Inserisci una nuova area
sk: Vložiť novú plochu
sq: fute fushen e re

therion: Delete selected object
bg: Изтрий избраниÑÑ‚ обект
de: Ausgewähltes Objekt löschen
el: διαγÏαφή επιλεγμένου
it: Rimuovi l'oggetto selezionato
sk: Zmaž oznaÄené objekty
sq: fshije objektin e selektuar

therion: theme basic-symbols
bg: оÑновни Ñимволи
cz: základní symboly
de: Grundsymbole
el: βασικά σÏμβολα
it: base
ru: оÑновные
sk: základné symboly
sq: tema simbolet-baze

therion: theme passage-fills
bg: релеф на галериÑта
cz: výplň
de: Gangfüllungen
el: γέμισμα στοών
it: riempimenti
ru: рельеф хода
sk: výplň
sq: tema mbushjet e kalimeve

therion: theme speleothems
bg: Ñпелеоформи
cz: výzdoba
de: Sinter
el: σπηλαιοθέματα
it: speleotemi
ru: Ñпелео-формы
sk: výzdoba
sq: speleo-tema

therion: theme equipement
bg: екипиране
cz: vystrojení
de: Ausrüstung
el: εξοπλισμός
it: armo
ru: оборудование
sk: vystrojenie
sq: tema pajisjet

therion/xtherion/licence.tcl0000644000076400010400000000151310625665160017242 0ustar  userAdministrators## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## -------------------------------------------------------------------- 
therion/xtherion/main.tcl0000644000076400010400000000373710720737556016603 0ustar  userAdministrators##
## main.tcl --
##
##     Main script.   
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------

xth_app_finish
xth_app_clock

encoding system $xth(app,sencoding)
set xth(encoding_system) [encoding system]
xth_about_hide

wm deiconify $xth(gui,main)
xth_app_normalize

foreach xapp $xth(app,list) {
  catch {
    set xth(app,$xapp,relw) $xth(app,all,tbwidth)
    set xth(app,$xapp,relw) $xth(app,$xapp,tbwidth)
  } 
  catch {
    xth_app_show $xapp
  }
}

if {[llength $xth(app,list)] > 2} {
  xth_app_show [lindex $xth(app,list) 2]
} else {
  xth_app_show [lindex $xth(app,list) 0]
}


set th2open 1
set cfgopen 1

foreach fname $argv {
  if {$cfgopen && [regexp -nocase {thconfig|thcfg} $fname]} {
    set cfgopen 0
    xth_app_show cp
    update idletasks
    xth_cp_open_file $fname
  } elseif {$th2open && [regexp -nocase {\.th2$} $fname]} {
    set th2open 0
    xth_app_show me
    update idletasks
    xth_me_open_file 0 $fname 1
  } else {
    xth_app_show te
    update idletasks
    xth_te_open_file 0 $fname 0
  }
}

foreach idir $xth(idirs) {
  catch {source [file join $idir xtherion.ini]}
}
catch {source xtherion.ini}


therion/xtherion/Makefile0000644000076400010400000000073611560740144016575 0ustar  userAdministratorsall:	xtherion

xtherion: *.tcl
	tclsh mkall.tcl

survex:
	tclsh mkall.tcl survex
	tar -cvzf ../../../svxedit.tar.gz svxedit
	perl ../makefile.pl rm -q svxedit

clean:
	perl ../makefile.pl rm -q *~
	perl ../makefile.pl rm -q ../../bin/xtherion
	perl ../makefile.pl rm -q lang/*~
	perl ../makefile.pl rm -q svxedit
	perl ../makefile.pl rm -q xtherion.tar.gz
	perl ../makefile.pl rm -q svxedit.tar.gz

update:
	make -C ./lang update
  
msgxth.tcl: lang/xtexts.txt
	make -C ./lang

therion/xtherion/mapcal.tcl0000644000076400010400000001476211221135014017066 0ustar  userAdministratorsset xth(calib_dir) ""
set xth(calib_res) 96
set xth(calib_fmt) png
set xth(calib_msg) "Wait please"

proc xth_calibrate_bitmap {} {

  global xth tcl_platform
  if {[string length $xth(calib_dir)] == 0} {
    set xth(calib_dir) $xth(gui,initdir)
  }

  # identify image
  set ipath identify
  set cpath convert
  if {[string equal $tcl_platform(platform) windows]} {
    package require registry
    set win32registry {HKEY_LOCAL_MACHINE\SOFTWARE\Therion}
    if {[catch {
      set ipath "[file join [registry get $win32registry InstallDir] bin identify.exe]"
      set cpath "[file join [registry get $win32registry InstallDir] bin convert.exe]"
    }]} {
      set win32registry {HKEY_CURRENT_USER\SOFTWARE\Therion}
      catch {
	set ipath "[file join [registry get $win32registry InstallDir] bin identify.exe]"
	set cpath "[file join [registry get $win32registry InstallDir] bin convert.exe]"
      }
    }
  }


  # load bitmap and its size using identify
  set fname [tk_getOpenFile -filetypes {{{Images} {.png .jpg .jpeg .gif .pdf}} {{All files} {*}}} \
      -parent $xth(gui,main) \
      -initialdir $xth(calib_dir)]
  if {[string length $fname] == 0} return
  set xth(calib_dir) [file dirname $fname]

  if {[string equal -nocase .pdf [file extension $fname]]} {
     # create bitmap
     set pdfname $fname
     set dp $xth(gui,main).resoldlg
     Dialog $dp -title "Image resolution" -parent $xth(gui,main) -default 0
     set df [$dp getframe]
     Label $df.l -text "Resolution (dpi)"
     Entry $df.e -textvariable xth(calib_res)
     radiobutton $df.p -text "PNG" -variable xth(calib_fmt) -value png
     radiobutton $df.j -text "JPEG" -variable xth(calib_fmt) -value jpg
     pack $df.l $df.e $df.p $df.j -side left -fill both -expand yes -padx 4 -pady 4
     $dp add -name ok 
     $dp draw
     destroy $dp
     if {[catch {set xth(calib_res) [expr int($xth(calib_res))]}]} {
       set xth(calib_res) 96
     }
     xth_calibrate_prog_show "Rastering PDF image..."
     set fname "[file rootname $fname].$xth(calib_fmt)"
     catch {exec $cpath -density $xth(calib_res)x$xth(calib_res) $pdfname -quality 95 $fname}
     xth_calibrate_prog_hide
  } else {
    set pdfname "[file rootname $fname].pdf"
    if {![file exists $pdfname]} {
      set pdfname [tk_getOpenFile -filetypes {{{PDF files} {.pdf}} {{All files} {*}}} \
	  -parent $xth(gui,main) \
	  -initialdir $xth(calib_dir)]
    }
    if {[string length $pdfname] == 0} return
  }


  xth_calibrate_prog_show "Reading bitmap..."
  catch {exec $ipath -format {%w\n%h\n} $fname > $fname.tmp}
  xth_calibrate_prog_hide
  set fid [open $fname.tmp r]
  gets $fid imgw
  gets $fid imgh
  close $fid
  file delete -force -- $fname.tmp

  # load corresponding pdf file
  xth_calibrate_prog_show "Reading calibration data..."
  catch {
  set fid [open $pdfname r]
  fconfigure $fid -eofchar {}
  set goon 1
  while {(![eof $fid])} {
    gets $fid cln
    if {[regexp {\/thCalibrate0 \(} $cln]} {
      break
    }
  }
  close $fid
  xth_calibrate_prog_hide

  # find calibration points
  set HD -1.0
  xth_calibrate_prog_show "Writing map file..."
  for {set i 0} {$i < 9} {incr i} {
    set rx "\\/thCalibrate$i"
    set X($i) 0.0
    set Y($i) 0.0
    set L($i) 0.0
    set F($i) 0.0
    append rx {\s+\([^)]*X=([\+\-\.\d]+)[^)]*Y=([\+\-\.\d]+)[^)]*L=([\+\-\.\d]+)[^)]*F=([\+\-\.\d]+)}
    regexp $rx $cln dum X($i) Y($i) L($i) F($i)
  }
  regexp {\/thCalibrate\s+\([^)]*HS=([\+\-\.\d]+)[^)]*VS=([\+\-\.\d]+)[^)]*HD=([\+\-\.\d]+)} $cln dum HS VS HD

  set geo_err 1
  set fid [open err.log w]
  for {set i 0} {$i < 9} {incr i} {
    set geo_err [expr $geo_err && ($L($i) == 0.0) && ($F($i) == 0.0)]
  }
  set geo_err [expr $geo_err || ($HD <= 0.0)]
  if {$geo_err} {
    xth_calibrate_show_err "Georeferencing of map is not correct!"
    return
  }

  
  # write map file
  set fid [open "[file rootname $fname].map" w]
  puts $fid {OziExplorer Map Data File Version 2.2}
  puts $fid [file tail $fname]
  puts $fid $fname
  puts $fid {1 ,Map Code,}
  puts $fid {WGS 84,,   0.0000,   0.0000,WGS 84}
  puts $fid {Reserved 1}
  puts $fid {Reserved 2}
  puts $fid {Magnetic Variation,,,E}
  puts $fid {Map Projection,Mercator,PolyCal,No,AutoCalOnly,No,BSBUseWPX,No}
  for {set i 0} {$i < 9} {incr i} {
    set imgx [expr $imgw - int(double($imgw) * ($HS - $X($i)) / $HS)]
    set imgy [expr int(double($imgh) * ($VS - $Y($i)) / $VS)]
    puts $fid "Point0[expr $i + 1],xy,$imgx,$imgy,in, deg,[ll2ozi $F($i) $L($i)], grid,   ,           ,           ,N"
    set mmx($i) $imgx
    set mmy($i) $imgy
  }
  # Point01,xy,    0, 0,in, deg, 48, 12.39601,N, 17, 1.25473,E, grid,   ,           ,           ,N
  for {set i 10} {$i <= 30} {incr i} {
    puts $fid "Point$i,xy,     ,     ,in, deg,    ,        ,N,    ,        ,W, grid,   ,           ,           ,N"
  }
  puts $fid {Projection Setup,,,,,,,,,,}
  puts $fid {Map Feature = MF ; Map Comment = MC     These follow if they exist}
  puts $fid {Track File = TF      These follow if they exist}
  puts $fid {Moving Map Parameters = MM?    These follow if they exist}
  puts $fid {MM0,Yes}
  puts $fid {MMPNUM,4}
  puts $fid "MMPXY,1,$mmx(5),$mmy(5)"
  puts $fid "MMPXY,2,$mmx(7),$mmy(7)"
  puts $fid "MMPXY,3,$mmx(2),$mmy(2)"
  puts $fid "MMPXY,4,$mmx(0),$mmy(0)"
  puts $fid "MMPLL,1, $L(5), $F(5)"
  puts $fid "MMPLL,2, $L(7), $F(7)"
  puts $fid "MMPLL,3, $L(2), $F(2)"
  puts $fid "MMPLL,4, $L(0), $F(0)"
  puts $fid "MM1B,[expr $HD / abs(double($mmx(7)) - double($mmx(5)))]"
  puts $fid {MOP,Map Open Position,0,0}
  puts $fid "IWH,Map Image Width/Height,$imgw,$imgh"
  close $fid
  }
  xth_calibrate_prog_hide
  
}


proc xth_calibrate_show_err {msg} {
    global xth
    set dp $xth(gui,main).messagedlg
    MessageDlg $dp -parent $xth(gui,main) -message $msg -type ok -icon error
}


proc xth_calibrate_prog_show {msg} {
    global xth
    set dp $xth(gui,main).progdlg
    set xth(calib_msg) $msg
    ProgressDlg $dp -parent $xth(gui,main) -title "Wait..." \
	-type         infinite \
	-width        30 \
	-textvariable xth(calib_msg)
    update
    after 200
}

proc xth_calibrate_prog_hide {} {
    global xth
    set dp $xth(gui,main).progdlg
    destroy $dp
}

proc ll2ozi {lat lon} {
  set latD [expr int($lat)]
  set latM [expr 60.0 * ($lat - double($latD))]
  if {$lat >= 0.0} {set latH N} else {set latH S}
  set lonD [expr int($lon)]
  set lonM [expr 60.0 * ($lon - double($lonD))]
  if {$lon >= 0.0} {set lonH E} else {set lonE W}
  return "$latD,$latM,$latH,$lonD,$lonM,$lonH"
}


if 0 {
  package require BWidget
  set xth(gui,main) .x
  toplevel .x
  set xth(gui,initdir) .
  xth_calibrate_bitmap
  exit
}
therion/xtherion/me.tcl0000644000076400010400000030276312255643546016261 0ustar  userAdministrators##
## me.tcl --
##
##     The therion map editor.
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------

xth_about_status [mc "loading map editor ..."]

catch {package require Img}

set xth(me,dflt,scrap,scale) {}

proc xth_me_reset_defaults {} {
  global xth

  set xth(me,dflt,scrap,projection) {}
  set xth(me,dflt,scrap,options) {}

  set xth(me,dflt,point,type) {station}
  set xth(me,dflt,point,options) {}
  set xth(me,dflt,point,rotation) {}
  set xth(me,dflt,point,xsize) {}
  set xth(me,dflt,point,ysize) {}

  set xth(me,dflt,line,type) {wall}
  set xth(me,dflt,line,options) {}

  set xth(me,dflt,area,type) {water}
  set xth(me,dflt,area,options) {}
    
}

set xth(me,acttheme) 0
set xth(ctrl,me,acttheme) [lindex $xth(me,themes,showlist) 0]

xth_me_reset_defaults

proc xth_me_bind_entry_focusin {wlist} {
  foreach w $wlist {
    bind $w  "$w selection range 0 end"
  }
}

proc xth_me_bind_entry_return {wlist retcmd} {
  foreach w $wlist {
    bind $w  $retcmd
  }
}

proc xth_me_bind_entry_focus_return {wlist retcmd} {
  set llen [expr [llength $wlist] - 1]
  for {set i 0} {$i < $llen} {incr i} {
    bind [lindex $wlist $i]  "focus [lindex $wlist [expr $i + 1]]"
  }
  bind [lindex $wlist end]  "$retcmd\nfocus [lindex $wlist 0]"
}


proc xth_me_bind_typecbx_hint {pth smbl} {
  $pth _create_popup
  bind $pth.shell.listb  "xth_status_bar_push me\nevent generate $pth.shell.listb <> -when tail"
  bind $pth.shell.listb  "xth_status_bar_pop me"
  bind $pth.shell.listb <> [format {
    set vals [%s cget -values]
    xth_status_bar_status me [ mc "%s [lindex $vals [%s.shell.listb curselection]]"]
    } $pth $smbl $pth]
}


proc xth_me_unredo_reset {} {
  global xth
  set xth(me,undolist) {}
  set xth(me,redolist) {}
  set xth(me,unredook) 1
  xth_me_unredo_update
}


proc xth_me_real2canx {x} {
  global xth
  return [expr 0.01 * $xth(me,zoom) * $x]
}

proc xth_me_real2cany {y} {
  global xth
  return [expr -0.01 * $xth(me,zoom) * $y]
}

proc xth_me_can2realx {x} {
  global xth
  return [expr 100.0 / $xth(me,zoom) * $x]
}

proc xth_me_can2realy {y} {
  global xth
  return [expr -100.0 / $xth(me,zoom) * $y]
}

proc xth_me_unredo_update {} {
  
  global xth
  
  if {[llength $xth(me,undolist)] > 0} {
    $xth(me,menu,edit) entryconfigure $xth(me,menu,edit,undo) \
      -label [format [mc "Undo %s"] [lindex [lindex $xth(me,undolist) 0] 0]] -state normal
  } else {
    $xth(me,menu,edit) entryconfigure $xth(me,menu,edit,undo) \
      -label [mc "Undo"] -state disabled
  }

  if {[llength $xth(me,redolist)] > 0} {
    $xth(me,menu,edit) entryconfigure $xth(me,menu,edit,redo) \
      -label [format [mc "Redo %s"] [lindex [lindex $xth(me,redolist) 0] 0]] -state normal
  } else {
    $xth(me,menu,edit) entryconfigure $xth(me,menu,edit,redo) \
      -label [mc "Redo"] -state disabled
  }

}


proc xth_me_unredo_undo {} {

  global xth
  xth_me_cmds_update {}
  if {[llength $xth(me,undolist)] > 0} {
    set acmd [lindex $xth(me,undolist) 0]
    set xth(me,undolist) [lreplace $xth(me,undolist) 0 0]
    set xth(me,redolist) [linsert $xth(me,redolist) 0 $acmd]
    set xth(me,unredook) 0
    set xth(me,unredoshift) 1
    eval [lindex $acmd 3]
    set xth(me,unredook) 1
    if {$xth(me,unredoshift)} {
      $xth(me,can) xview moveto [lindex $acmd 1]
      $xth(me,can) yview moveto [lindex $acmd 2]
      xth_me_images_rescandraw
    }
    set xth(me,fsave) 1
    xth_me_unredo_update
  }  
}


proc xth_me_get_center {} {
  global xth
  set x [winfo x $xth(me,can)]
  set y [winfo y $xth(me,can)]
  set w [winfo width $xth(me,can)]
  set h [winfo height $xth(me,can)]
  return [list [xth_me_can2realx [$xth(me,can) canvasx [expr $x + $w / 2]]] \
    [xth_me_can2realy [$xth(me,can) canvasy [expr $y + $h / 2]]]]
}


proc xth_me_center_to {crds} {
  global xth
  set x [xth_me_real2canx [lindex $crds 0]]
  set y [xth_me_real2cany [lindex $crds 1]]
  set sr [$xth(me,can) cget -scrollregion]
  set xw [$xth(me,can) xview]
  set yw [$xth(me,can) yview]
  # adjust x
  set wf [expr [lindex $xw 1] - [lindex $xw 0]]
  set hf [expr [lindex $yw 1] - [lindex $yw 0]]
  set tw [expr [lindex $sr 2] - [lindex $sr 0]]
  set th [expr [lindex $sr 3] - [lindex $sr 1]]
  if {double($wf) < 1.0} {
    set pp [expr double($x) - [lindex $sr 0] - \
      0.5 * $wf * $tw]
    if {$pp < 0} {
      set pf 0.0
    } else {
      set pf [expr double($pp) / $tw]
    }
    $xth(me,can) xview moveto $pf
  }
  # adjust y
  if {double($hf) < 1.0} {
    set pp [expr double($y) - [lindex $sr 1] - \
      0.5 * $hf * $th]
    if {$pp < 0} {
      set pf 0.0
    } else {
      set pf [expr double($pp) / $th]
    }
    $xth(me,can) yview moveto $pf
  }
  xth_me_images_rescandraw
}



proc xth_me_unredo_redo {} {

  global xth

  if {[llength $xth(me,redolist)] > 0} {
    set acmd [lindex $xth(me,redolist) 0]
    set xth(me,redolist) [lreplace $xth(me,redolist) 0 0]
    set xth(me,undolist) [linsert $xth(me,undolist) 0 $acmd]
    $xth(me,can) xview moveto [lindex $acmd 1]
    $xth(me,can) yview moveto [lindex $acmd 2]
    xth_me_images_rescandraw
    set xth(me,unredook) 0
    eval [lindex $acmd 4]
    set xth(me,unredook) 1
    set xth(me,fsave) 1
    xth_me_unredo_update
  }  
  
}


proc xth_me_unredo_action {txt undocmd redocmd} {
  
  global xth
  if {$xth(me,unredook)} {
    set xth(me,redolist) {}
    if {[string length $xth(me,unredola)] > 0} {
      set txt $xth(me,unredola)
      set xth(me,unredola) {}
    }
    set xth(me,undolist) [linsert $xth(me,undolist) 0 [list \
      $txt [lindex [$xth(me,can) xview] 0] [lindex [$xth(me,can) yview] 0] $undocmd $redocmd]]
    set xth(me,fsave) 1
    xth_me_unredo_update
  }
  
}


# create new file
proc xth_me_create_file {} {

  global xth
  xth_status_bar_status me ""

  if {$xth(me,fopen) != 0} {
    return 0
  }
  
  # create file variables
  set xth(me,unredook) 0
  incr xth(me,fltid)
  set cfid $xth(me,fltid)
  #set xth(me,fname) [format "noname%02d.th2" $cfid]
  set xth(me,fname) [format "(new file)" $cfid]
  set xth(me,open_file) $xth(me,fname)
  set xth(me,fpath) $xth(gui,initdir)
  set xth(me,ffull) [file join $xth(gui,initdir) $xth(me,fname)]

  set xth(me,fnewf) 1
  set xth(me,fopen) 1
  set xth(me,fsave) 0
  set xth(me,mtime) 0

  set xth(me,nimgs) 0
  set xth(me,imgln) 0
  set xth(me,imgs,list) {}
  set xth(me,imgs,xlist) {}

  set xth(me,cmds,cmdln) 1
  set xth(me,cmds,list) {}
  set xth(me,cmds,xlist) {}
  set xth(me,cmds,action) {}
  set xth(me,cmds,selid) 0
  set xth(me,cmds,selpid) 0
  set xth(me,cmds,selx) 0
  set xth(me,cmds,mode) 0
  xth_me_cmds_create 0 0 0
  xth_me_cmds_update_buttons
  xth_me_cmds_set_mode 0
  xth_me_prev_cmd {}
  $xth(ctrl,me,cmds).cl.l selection set 0 0

  # enable all controls
  $xth(me,pbar) configure -state normal -text "0.0 : 0.0"
  
  $xth(ctrl,me,images).ic.insp configure -state normal
  $xth(ctrl,me,area).l configure -state normal
  $xth(ctrl,me,area).zl configure -state normal
  $xth(ctrl,me,area).zb configure -state normal
    
  $xth(me,menu,file) entryconfigure [mc "New"] -state disabled
  $xth(me,menu,file) entryconfigure [mc "Open"] -state disabled
  $xth(me,menu,file) entryconfigure [mc "Open (no pics)"] -state disabled
  $xth(me,menu,file) entryconfigure [mc "Save"] -state normal
  $xth(me,menu,file) entryconfigure [mc "Save as"] -state normal
  $xth(me,menu,file) entryconfigure [mc "Auto save"] -state normal
  $xth(me,menu,file) entryconfigure [mc "Close"] -state normal

  $xth(me,menu,file) entryconfigure [mc "Import"] -state normal
  
  $xth(me,menu) entryconfigure [mc "Edit"] -state normal

  $xth(ctrl,me,area).xmin configure -state normal
  $xth(ctrl,me,area).ymin configure -state normal
  $xth(ctrl,me,area).xmax configure -state normal
  $xth(ctrl,me,area).ymax configure -state normal
  $xth(ctrl,me,area).mab configure -state normal
  $xth(ctrl,me,area).aab configure -state normal

  xth_me_image_select 0
  xth_me_cmds_set_action 2

  # create working area
  grid $xth(me,canf) -column 0 -row 0 -sticky news
  xth_me_area_adjust 0 0 1600 1200

  xth_app_title me  

  xth_ctrl_maximize me area
  xth_ctrl_maximize me images
  set xth(me,fsave) 0
  xth_me_unredo_reset
  xth_me_reset_defaults  
  xth_tools_me_enable
}


proc xth_me_prev_cmd {cmd} {
  global xth
  $xth(ctrl,me,prev).txt configure -state normal
  $xth(ctrl,me,prev).txt delete 1.0 end
  $xth(ctrl,me,prev).txt insert 1.0 $cmd
  $xth(ctrl,me,prev).txt configure -state disabled
  $xth(ctrl,me,prev).txt see 1.0
  update idletasks
}


proc xth_me_destroy_file {} {

  global xth
  if {$xth(me,fopen)} {
  
    xth_me_cmds_unselect {}

    set xth(me,unredook) 0
    set xth(me,open_file) ""
    set xth(me,curscrap) {}
    set xth(me,fnewf) 0
    set xth(me,fopen) 0
    xth_me_image_destroy_all
    set xth(me,fsave) 0

    set xth(me,zoom) 100
    set xth(me,zoomv) 100
    $xth(ctrl,me,area).zb configure -text [format "%d %%" 100]
    $xth(me,menu,edit) entryconfigure $xth(me,menu,edit,zoom) -label [format "Zoom %d %%" 100]
  
    # disable all controls
    $xth(me,pbar) configure -text "" -state disabled

    set xth(ctrl,me,images,posx) ""
    set xth(ctrl,me,images,posy) ""
    set xth(ctrl,me,images,newposx) 0
    set xth(ctrl,me,images,newposy) 0
    set xth(ctrl,me,images,vis) 0
    $xth(ctrl,me,images).ic.insp configure -state disabled
    $xth(ctrl,me,area).l configure -state disabled -text ""
    set xth(ctrl,me,area,xmin) ""
    set xth(ctrl,me,area,ymin) ""
    set xth(ctrl,me,area,xmax) ""
    set xth(ctrl,me,area,ymax) ""
    $xth(ctrl,me,area).zl configure -state disabled
    $xth(ctrl,me,area).zb configure -state disabled
    $xth(me,menu,file) entryconfigure [mc "New"] -state normal
    $xth(me,menu,file) entryconfigure [mc "Open"] -state normal
    $xth(me,menu,file) entryconfigure [mc "Open (no pics)"] -state normal
    $xth(me,menu,file) entryconfigure [mc "Save"] -state disabled
    $xth(me,menu,file) entryconfigure [mc "Save as"] -state disabled
    $xth(me,menu,file) entryconfigure [mc "Auto save"] -state disabled
    $xth(me,menu,file) entryconfigure [mc "Close"] -state disabled

    $xth(me,menu,file) entryconfigure [mc "Import"] -state disabled

    $xth(me,menu) entryconfigure [mc "Edit"] -state disabled

    $xth(ctrl,me,area).xmin configure -state disabled
    $xth(ctrl,me,area).ymin configure -state disabled
    $xth(ctrl,me,area).xmax configure -state disabled
    $xth(ctrl,me,area).ymax configure -state disabled
    $xth(ctrl,me,area).mab configure -state disabled
    $xth(ctrl,me,area).aab configure -state disabled
    xth_me_image_select 0
    focus $xth(gui,main)

    $xth(me,can) delete command
    xth_me_cmds_update_buttons
    xth_me_prev_cmd {}
    
    set xth(me,cmds,list) {}
    set xth(me,cmds,xlist) {}
    grid forget $xth(me,canf) 
    
    xth_ctrl_minimize me cmds
    xth_ctrl_minimize me prev
    xth_ctrl_minimize me ss
    xth_ctrl_minimize me point
    xth_ctrl_minimize me line
    xth_ctrl_minimize me linept
    xth_ctrl_minimize me ac
    xth_ctrl_minimize me scrap
    xth_ctrl_minimize me text
    xth_ctrl_minimize me area
    xth_ctrl_minimize me images
    
    xth_me_unredo_reset
    xth_app_title me
    
  }
  xth_tools_me_enable
}



proc xth_me_before_close_file {btns} {

  global xth
  xth_me_cmds_update {}
  if {$xth(me,fsave)} {    
    set wtd [MessageDlg $xth(gui,message) -parent $xth(gui,main) \
      -icon question -type $btns\
      -message [format [mc "File %s is not saved. Save it now?"] $xth(me,ffull)] \
      -font $xth(gui,lfont)]
    switch $wtd {
      0 {
	if {[xth_me_save_file 0] == 0} {
	  return 0
	}
      }
      1 {}
      default {return 0}
    }
  }
  return 1
}



# xth_me_read_file --
#
# return success
# {success name cmds lns}

proc xth_me_read_file {pth changebs} {

  global errorInfo xth
  
  set curenc utf-8
  set nm [file tail $pth]
  set encspc 0
  set flnn 0
  set success 1
  set lastln ""
  set lns {}
  set cmds {}
  if {[catch {set fid [open $pth r]}]} {
    set success 0
    set nm $errorInfo
    return [list $success $nm {} {}]
  }
  fconfigure $fid -encoding $curenc
  while {![eof $fid]} {
    gets $fid fln
    if {$flnn == 0} {
        if {[scan [string index $fln 0] %c] == 65279} {
            set fln [string range $fln 1 end]
        }
    }    
    incr flnn
    if {[regexp {^\s*encoding\s+(\S+)\s*$} $fln encln enc]} {
      if {$encspc} {
	set success 0
	set nm [format [mc "%s \[%s\] -- multiple encoding commands in file"] $pth $flnn]
	break
      }
      set encspc 1
      set rxp "\\s+($enc)\\s+"
      set validenc [regexp -nocase $rxp $xth(encodings) dum curenc]
      if {$validenc == 0} {
	set success 0
	set nm [format [mc "%s \[%s\] -- unknown encoding -- %s"] $pth $flnn $enc]
	break
      }
      fconfigure $fid -encoding $curenc
      set lastln ""
    } elseif {[regexp {^\s*\#\#XTHERION\#\#\s+(\S.*)\s*$} $fln cmmdln cmmd]} {
      lappend cmds $cmmd
      set lastln ""
      if {[regexp {^\s*\#\#BEGIN\#\#\s*$} $cmmd]} {
	fconfigure $fid -encoding utf-8
      }
      if {[regexp {^\s*\#\#END\#\#\s*$} $cmmd]} {
	fconfigure $fid -encoding $curenc
      }
    } else {
      if {$changebs && [regexp {(.*)\\\s*$} $lastln dumln prevln]} {
	set fln "$prevln$fln"
	if {[llength $lns] > 1} {
	  set lns [lrange $lns 0 [expr [llength $lns] - 2]]
	} else {
	  set lns {}
	}
      }
      lappend lns $fln
      set lastln $fln
    }
  }
  close $fid
  return [list $success $nm $cmds $lns]
  
}  


# xth_me_write_file --
#
# return list containing
# {success name}

proc xth_me_write_file {pth} {

  global errorInfo xth

  set curenc utf-8
  set nm [file tail $pth]
  set success 1
  if {[catch {set fid [open $pth w]}]} {
    set success 0
    set nm $errorInfo
    return [list $success $nm]
  }
  fconfigure $fid -encoding utf-8 -translation {auto auto}
  puts $fid "encoding  utf-8"
  # now let's put special commands
  puts $fid "##XTHERION## xth_me_area_adjust $xth(me,area,xmin) $xth(me,area,ymin) $xth(me,area,xmax) $xth(me,area,ymax)"
  puts $fid "##XTHERION## xth_me_area_zoom_to $xth(me,zoom)"
  # images
  set xxlist {}
  foreach imgx $xth(me,imgs,xlist) {
    set xxlist [linsert $xxlist 0 $imgx]
  }
  foreach imgx $xxlist {
    if {$xth(me,imgs,$imgx,XVIimg)} continue
    set vsb $xth(me,imgs,$imgx,vsb)
    set gamma $xth(me,imgs,$imgx,gamma)
    if {$vsb < 0} {
      set vsb [expr $xth(me,imgs,$imgx,vsb) + 2]
    }
    set root [xth_me_imgs_get_root $imgx]
    set xpos [expr [lindex $xth(me,imgs,$imgx,position) 0]]
    set ypos [expr [lindex $xth(me,imgs,$imgx,position) 1]]
    switch [llength $root] {
      1 {
	set ypos [list $ypos [lindex $root 0]]
      }
      3 {
	set xpos [lindex $root 1]
	set ypos [list [lindex $root 2] [lindex $root 0]]
      }
      0 {}
    }
    puts $fid [format "##XTHERION## xth_me_image_insert %s %s %s 0 {}" \
      "{$xpos $vsb $gamma}" \
      "{$ypos}" \
      [list $xth(me,imgs,$imgx,name)]]
  }
  foreach id $xth(me,cmds,xlist) {
    if {$xth(me,cmds,$id,ct) == 4} {
      puts $fid "\n"
    }
    puts $fid "\n$xth(me,cmds,$id,data)"
  }
  close $fid
  return [list $success $nm]
}


proc xth_me_open_file {dialogid fname fline} {

  global xth

  if {$xth(me,fopen) != 0} {
    return 0
  }
  
  if {$dialogid} {
    set fname [tk_getOpenFile -filetypes $xth(app,me,filetypes) \
      -parent $xth(gui,main) \
      -initialdir $xth(gui,initdir) -defaultextension {.th2}]
  }
  
  if {[string length $fname] == 0} {
    return 0
  } else {
    set xth(gui,initdir) [file dirname $fname]
  }
  
  # now let's open file fname
  
  # read the file
  xth_status_bar_push me
  xth_status_bar_status me [format [mc "Opening %s ..."] $fname]
  
  set fdata [xth_me_read_file $fname 1]
  if {[lindex $fdata 0] == 0} {
      MessageDlg $xth(gui,message) -parent $xth(gui,main) \
	-icon error -type ok \
	-message [lindex $fdata 1] \
	-font $xth(gui,lfont)
      xth_status_bar_pop me
      return 0
  }
  
  # show the file
  xth_me_create_file
  set xth(me,unredook) 0

  set xth(me,fname) [file tail $fname]
  set xth(me,open_file) [lindex $fdata 1]
  set xth(me,fpath) [file dirname $fname]
  set xth(me,ffull) $fname
  set xth(me,mtime) [file mtime $fname]
  
  foreach cmd [lindex $fdata 2] {
    catch {eval $cmd}
  }
  xth_me_cmds_create_all [lindex $fdata 3]
  
  xth_ctrl_maximize me cmds
  xth_ctrl_maximize me point
  xth_ctrl_maximize me line
  xth_ctrl_maximize me linept
  xth_ctrl_maximize me ac
  xth_ctrl_maximize me scrap
  xth_ctrl_maximize me text
  xth_ctrl_maximize me area
  xth_ctrl_maximize me images
  
  set xth(me,fnewf) 0
  set xth(me,fopen) 1
  set xth(me,fsave) 0
  xth_app_title me
  xth_status_bar_pop me
  xth_me_cmds_select 0
  xth_me_unredo_reset
  xth_me_reset_defaults
  return 1
}


proc xth_me_save_file {dialogid} {

  global xth
  if {$xth(me,fopen) == 0} {
    return 0
  }

  xth_me_cmds_update {}
  
  # let's check if we need to save
  if {!($xth(me,fnewf) || $xth(me,fsave) || $dialogid)} {
    return 1
  }
  
  xth_status_bar_push me
  
  if {$xth(me,fnewf)} {
    set dialogid 1
  }

  set fname $xth(me,ffull)
  set ofname $fname
  if {$dialogid} {
    set fname [tk_getSaveFile -filetypes $xth(app,me,filetypes) \
      -parent $xth(gui,main) \
      -initialfile [file tail $fname] -defaultextension {.th2} \
      -initialdir [xth_getdir $fname]]
  }
  
  if {[string length $fname] == 0} {
    return 0
  } else {
    set xth(gui,initdir) [file dirname $fname]
  }

  if {($xth(me,mtime) > 0) && [file exists $fname] && \
    ([file mtime $fname] > $xth(me,mtime))} {
    set forcesave [MessageDlg $xth(gui,message) -parent $xth(gui,main) \
      -icon warning -type yesno -default 1 \
      -message [format [mc "File %s was modified outside xtherion. Save it anyway?"] $fname] \
      -font $xth(gui,lfont)]
    if {$forcesave != 0} {
      return 0
    }
  }
 
  # save the file
  xth_status_bar_status me [format [mc "Saving %s ..."] $fname]
  set fdata [xth_me_write_file $fname]
  if {[lindex $fdata 0] == 0} {
      MessageDlg $xth(gui,message) -parent $xth(gui,main) \
	-icon error -type ok \
	-message [lindex $fdata 1] \
	-font $xth(gui,lfont)
      xth_status_bar_pop me
      return 0
  }
  
  set xth(me,mtime) [file mtime $fname]
  set xth(me,fnewf) 0
  set xth(me,fsave) 0
  
  # if SaveAs, then redisplay the file
  if {$dialogid} {
    if {[string compare $ofname $fname] != 0} {
      set xth(me,fname) [file tail $fname]
      set xth(me,ffull) $fname
      set xth(me,fpath) [file dirname $fname]
      set xth(me,open_file) $xth(me,fname)
      xth_app_title me
    }
  }  

  after 250 {xth_status_bar_pop me}
  return 1
    
}



proc xth_me_close_file {} {

  global xth

  if {$xth(me,fopen) == 0} {
    return
  }

  xth_me_cmds_update {}
  
  if {[xth_me_before_close_file yesnocancel]} {
    xth_me_destroy_file
    return 1
  } else {
    return 0
  }
  
}


proc xth_me_area_redraw {} {
  global xth
  set x1 [xth_me_real2canx $xth(me,area,xmin)]
  set x2 [xth_me_real2canx $xth(me,area,xmax)]
  set y1 [xth_me_real2cany $xth(me,area,ymin)]
  set y2 [xth_me_real2cany $xth(me,area,ymax)]
  $xth(me,can) coords $xth(me,canid,area) $x1 $y1 $x1 $y2 $x2 $y2 $x2 $y1  
}


proc xth_me_limitize {limits x y} {
  set xmin $x
  set xmax $x
  set ymin $y
  set ymax $y
  if {[llength $limits] == 4} {
    if {[lindex $limits 0] < $x} {
      set xmin [lindex $limits 0]
    }
    if {[lindex $limits 1] < $y} {
      set ymin [lindex $limits 1]
    }
    if {[lindex $limits 2] > $x} {
      set xmax [lindex $limits 2]
    }
    if {[lindex $limits 3] > $y} {
      set ymax [lindex $limits 3]
    }
  }
  return [list $xmin $ymin $xmax $ymax]
}


proc xth_me_image_newpos {} {

  global xth 
  set limits {}

  # scan limits of pictures
  foreach imgx $xth(me,imgs,xlist) {
    set px [lindex $xth(me,imgs,$imgx,position) 0]
    set py [lindex $xth(me,imgs,$imgx,position) 1]
    set limits [xth_me_limitize $limits $px $py]
    if {$xth(me,imgs,$imgx,XVI)} {
      set gv $xth(me,imgs,$imgx,XVIgrid)
      set v1x [expr [lindex $gv 2] * ([lindex $gv 6] - 1.0)]
      set v1y [expr [lindex $gv 3] * ([lindex $gv 6] - 1.0)]
      set v2x [expr [lindex $gv 4] * ([lindex $gv 7] - 1.0)]
      set v2y [expr [lindex $gv 5] * ([lindex $gv 7] - 1.0)]
      set limits [xth_me_limitize $limits [expr $px + $v1x] [expr $py + $v1y]]
      set limits [xth_me_limitize $limits [expr $px + $v2x] [expr $py + $v2y]]
      set limits [xth_me_limitize $limits [expr $px + $v1x + $v2x] [expr $py + $v1y + $v2y]]
    } elseif {[string length $xth(me,imgs,$imgx,image)] > 0} {
      set sx [image width $xth(me,imgs,$imgx,image)]
      set sy [image height $xth(me,imgs,$imgx,image)]
      set limits [xth_me_limitize $limits [expr $px + $sx] [expr $py - $sy]]
    }
  }

  # scan limits of commands
  set cmdlim [$xth(me,can) bbox command]
  if {[llength $cmdlim] == 4} {
    set limits [xth_me_limitize $limits [xth_me_can2realx [lindex $cmdlim 0]] [xth_me_can2realy [lindex $cmdlim 1]]]
    set limits [xth_me_limitize $limits [xth_me_can2realx [lindex $cmdlim 2]] [xth_me_can2realy [lindex $cmdlim 3]]]
  }

  if {[llength $limits] > 0} {
    set xth(ctrl,me,images,newposx) [lindex $limits 0]
    set xth(ctrl,me,images,newposy) [expr 32.0 + [lindex $limits 3]]
  } else {
    set xth(ctrl,me,images,newposx) 0
    set xth(ctrl,me,images,newposy) 0
  }
    
}


proc xth_me_area_auto_adjust {} {
  
  global xth 
  set limits {}
  
  # scan limits of pictures
  foreach imgx $xth(me,imgs,xlist) {
    set px [lindex $xth(me,imgs,$imgx,position) 0]
    set py [lindex $xth(me,imgs,$imgx,position) 1]
    set limits [xth_me_limitize $limits $px $py]
    if {$xth(me,imgs,$imgx,XVI)} {
      set gv $xth(me,imgs,$imgx,XVIgrid)
      set v1x [expr [lindex $gv 2] * ([lindex $gv 6] - 1.0)]
      set v1y [expr [lindex $gv 3] * ([lindex $gv 6] - 1.0)]
      set v2x [expr [lindex $gv 4] * ([lindex $gv 7] - 1.0)]
      set v2y [expr [lindex $gv 5] * ([lindex $gv 7] - 1.0)]
      set limits [xth_me_limitize $limits [expr $px + $v1x] [expr $py + $v1y]]
      set limits [xth_me_limitize $limits [expr $px + $v2x] [expr $py + $v2y]]
      set limits [xth_me_limitize $limits [expr $px + $v1x + $v2x] [expr $py + $v1y + $v2y]]
    } elseif {[string length $xth(me,imgs,$imgx,image)] > 0} {
      set sx [image width $xth(me,imgs,$imgx,image)]
      set sy [image height $xth(me,imgs,$imgx,image)]
      set limits [xth_me_limitize $limits [expr $px + $sx] [expr $py - $sy]]
    }
  }

  # scan limits of commands
  set cmdlim [$xth(me,can) bbox command]
  if {[llength $cmdlim] == 4} {
    set limits [xth_me_limitize $limits [xth_me_can2realx [lindex $cmdlim 0]] [xth_me_can2realy [lindex $cmdlim 1]]]
    set limits [xth_me_limitize $limits [xth_me_can2realx [lindex $cmdlim 2]] [xth_me_can2realy [lindex $cmdlim 3]]]
  }
  
  # adjust area limits
  if {[llength $limits] < 4} {
    set limits {128 128 128 128}
  }  
  xth_me_area_adjust [expr [lindex $limits 0] - 128] [expr [lindex $limits 1] - 128] \
    [expr [lindex $limits 2] + 128] [expr [lindex $limits 3] + 128]

}

proc xth_me_area_adjust {x1 y1 x2 y2} {
  
  global xth
  
  xth_me_unredo_action [mc "adjusting area"] \
    "xth_me_area_adjust $xth(me,area,xmin) $xth(me,area,ymin) $xth(me,area,xmax) $xth(me,area,ymax)" \
    "xth_me_area_adjust $x1 $y1 $x2 $y2"

  # let's assign zeros to non numbers
  if {[catch {expr $x1}]} {
    set x1 0.0
  }
  if {[catch {expr $x2}]} {
    set x2 0.0
  }
  if {[catch {expr $y1}]} {
    set y1 0.0
  }
  if {[catch {expr $y2}]} {
    set y2 0.0
  }
  if {($x2 - $x1) < 256} {
    set x2 [expr $x1 + 256]
  }
  if {($y2 - $y1) < 256} {
    set y2 [expr $y1 + 256]
  }
  
  set xth(me,area,xmin) $x1
  set xth(me,area,xmax) $x2
  set xth(me,area,ymin) $y1
  set xth(me,area,ymax) $y2

  set xth(ctrl,me,area,xmin) $x1
  set xth(ctrl,me,area,xmax) $x2
  set xth(ctrl,me,area,ymin) $y1
  set xth(ctrl,me,area,ymax) $y2

  xth_me_area_redraw
  xth_me_area_scroll_adjust
  
  catch {$xth(ctrl,me,area).l configure -text [format "%.0f:%.0f - %.0f:%.0f" $x1 $y1 $x2 $y2]}

  set xth(ctrl,me,images,newposx) $x1
  set xth(ctrl,me,images,newposy) $y1
  
}


proc xth_me_area_scroll {wdg fir las} {
  xth_scroll $wdg $fir $las
  xth_me_area_scroll_adjust
}


proc xth_me_area_scroll_adjust {} {
  
  global xth
  set scw [winfo width $xth(me,canf)]
  set sch [winfo height $xth(me,canf)]
  set axmax [xth_me_real2canx $xth(me,area,xmax)]
  set axmin [xth_me_real2canx $xth(me,area,xmin)]
  set aymax [xth_me_real2cany $xth(me,area,ymin)]
  set aymin [xth_me_real2cany $xth(me,area,ymax)]
  set aw [expr $axmax - $axmin]
  set ah [expr $aymax - $aymin]
  if {$aw < ($scw - 3 * $xth(gui,sbwidth))} {
    set sx1 [expr $axmin - ($scw - $aw)/2.0 + $xth(gui,sbwidth)]
    set sx2 [expr $axmax + ($scw - $aw)/2.0 - $xth(gui,sbwidth)]
    # eval $xth(scroll,$xth(me,canf).sh,hide)
  } else {
    set sx1 [expr $axmin - $xth(gui,sbwidth)/2.0]
    set sx2 [expr $axmax + $xth(gui,sbwidth)/2.0]
  }
  if {$ah < ($sch - 3 * $xth(gui,sbwidth))} {
    set sy1 [expr $aymin - ($sch - $ah)/2.0 + $xth(gui,sbwidth)]
    set sy2 [expr $aymax + ($sch - $ah)/2.0 - $xth(gui,sbwidth)]
    # eval $xth(scroll,$xth(me,canf).sv,hide)
  } else {
    set sy1 [expr $aymin - $xth(gui,sbwidth)/2.0]
    set sy2 [expr $aymax + $xth(gui,sbwidth)/2.0]
  }
  
  set csr [$xth(me,can) cget -scrollregion]
  set nsr "$sx1 $sy1 $sx2 $sy2"
  if {[string compare $csr $nsr] != 0} {
    $xth(me,can) configure -scrollregion $nsr
  }
}


proc xth_me_area_zoom_to {zv} {
  global xth
  
  xth_me_cmds_update {}
  
  if {($xth(me,cmds,$xth(me,cmds,selid),ct) == 3) && 
      ($xth(me,cmds,selpid) > 0)} {
    set ccrds [list $xth(me,cmds,$xth(me,cmds,selid),$xth(me,cmds,selpid),x) \
      $xth(me,cmds,$xth(me,cmds,selid),$xth(me,cmds,selpid),y)]
  } elseif {$xth(me,cmds,$xth(me,cmds,selid),ct) == 2} {
    set ccrds [list $xth(me,cmds,$xth(me,cmds,selid),x) \
      $xth(me,cmds,$xth(me,cmds,selid),y)]
  } else {
    set ccrds [xth_me_get_center]
  }
  
  xth_me_unredo_action [mc "zooming"] \
    "xth_me_area_zoom_to $xth(me,zoom)" \
    "xth_me_area_zoom_to $zv"
    
  set xth(me,zoom) $zv
  set xth(me,zoomv) $zv
  $xth(ctrl,me,area).zb configure -text [format "%d %%" $zv]
  $xth(me,menu,edit) entryconfigure $xth(me,menu,edit,zoom) -label [format [mc "Zoom %d %%"] $zv]
  
  xth_me_area_redraw   
  xth_me_area_scroll_adjust
  
  foreach imgx $xth(me,imgs,xlist) {
    xth_me_image_rescan $imgx
    xth_me_image_redraw $imgx
  }
  
  xth_status_bar_push me
  xth_status_bar_status me [mc "Zooming objects ..."]
  set ncmds [llength $xth(me,cmds,xlist)]
  xth_me_progbar_show $ncmds
  set ccmd 0
  foreach id $xth(me,cmds,xlist) {
    incr ccmd
    xth_me_progbar_prog $ccmd
    switch $xth(me,cmds,$id,ct) {
      4 {
	if {$id == $xth(me,cmds,selid)} {
	  xth_me_cmds_move_scrap_xctrl 1 [lindex $xth(me,cmds,$id,scale) 0] \
	    [lindex $xth(me,cmds,$id,scale) 1] 
	  xth_me_cmds_move_scrap_xctrl 2 [lindex $xth(me,cmds,$id,scale) 2] \
	    [lindex $xth(me,cmds,$id,scale) 3]
	}
      }
      3 {
	xth_me_cmds_move_line $id
	if {$id == $xth(me,cmds,selid)} {
	  xth_me_cmds_show_line_xctrl $id
	  set pid $xth(me,cmds,selpid)
	  if {$pid != 0} {
	    xth_me_cmds_show_linept_xctrl $id $pid
	  }
	}
      }
      2 {
	$xth(me,can) coords pt$id [xth_me_cmds_calc_point_coords $id]
	if {$id == $xth(me,cmds,selid)} {
	  xth_me_cmds_move_point_xctrl $id
	  xth_me_cmds_move_point_fill_xctrl $id $xth(me,cmds,$id,rotation) $xth(me,cmds,$id,xsize) $xth(me,cmds,$id,ysize)
	}
      }
    }
  }
  
  xth_me_center_to $ccrds
  set xth(me,unredoshift) 0
  xth_me_progbar_hide
  xth_status_bar_pop me
  update idletasks
  
}

proc xth_me_image_choose {imgx} {
  global xth
  xth_me_image_select [lsearch $xth(me,imgs,xlist) $imgx]
}

proc xth_me_area_start_drag {tagOrId imgx x y} {
  global xth
  set hss [$xth(me,canf).sh get]
  set vss [$xth(me,canf).sv get]
  set srg [$xth(me,can) cget -scrollregion]
  set w [expr [lindex $srg 2] - [lindex $srg 0]]
  set h [expr [lindex $srg 3] - [lindex $srg 1]]
  set fx [expr (1 - [lindex $hss 1] + [lindex $hss 0]) * $w]
  set fy [expr (1 - [lindex $vss 1] + [lindex $vss 0]) * $h]     
  if {$fx > 0} {set fx [expr (1 - [lindex $hss 1] + [lindex $hss 0]) / $fx]}
  if {$fy > 0} {set fy [expr (1 - [lindex $vss 1] + [lindex $vss 0]) / $fy]}
  set xth(me,area,drag_fx) $fx
  set xth(me,area,drag_fy) $fy
  set xth(me,area,drag_ox) [lindex $hss 0]
  set xth(me,area,drag_oy) [lindex $vss 0]
  set xth(me,area,drag_mx) $x
  set xth(me,area,drag_my) $y
  $xth(me,can) configure -cursor plus
  $xth(me,can) bind $tagOrId  "xth_me_area_drag %x %y"
  $xth(me,can) bind $tagOrId  "xth_me_area_end_drag $tagOrId \"$imgx\" %x %y"
  $xth(me,can) bind $tagOrId  "xth_me_area_drag %x %y"
  $xth(me,can) bind $tagOrId  "xth_me_area_end_drag $tagOrId \"$imgx\" %x %y"
  update idletasks
}

proc xth_me_area_drag {x y} {
  global xth
  set xdelta [expr ($xth(me,area,drag_mx) - $x) * $xth(me,area,drag_fx)]
  set ydelta [expr ($xth(me,area,drag_my) - $y) * $xth(me,area,drag_fy)]
  $xth(me,can) xview moveto [expr $xth(me,area,drag_ox) + $xdelta]
  $xth(me,can) yview moveto [expr $xth(me,area,drag_oy) + $ydelta]
  update idletasks     
}


proc xth_me_area_end_drag {tagOrId imgx x y} {
  global xth
  xth_me_area_drag $x $y
  $xth(me,can) configure -cursor crosshair
  $xth(me,can) bind $tagOrId  ""
  $xth(me,can) bind $tagOrId  ""
  $xth(me,can) bind $tagOrId  ""
  $xth(me,can) bind $tagOrId  ""
  if {[string length $imgx] > 0} {
    xth_me_image_choose $imgx
  }
  xth_me_images_rescandraw
  update idletasks 
}


proc xth_me_area_motion {x y} {
  global xth
  $xth(me,pbar) configure -text [format "%.1f : %.1f" [xth_me_can2realx [$xth(me,can) canvasx $x]] [xth_me_can2realy [$xth(me,can) canvasy $y]]]
}


proc xth_me_bind_area_drag {tagOrId imgx} {
  global xth
  $xth(me,can) bind $tagOrId <1> "xth_me_cmds_click_area $tagOrId %x %y"
  $xth(me,can) bind $tagOrId <$xth(kb_control)-1> "xth_me_cmds_click_area $xth(me,canid,area) %x %y"
  $xth(me,can) bind $tagOrId  "xth_me_area_motion %x %y"
  $xth(me,can) bind $tagOrId  "xth_me_area_start_drag $tagOrId \"$imgx\" %x %y"
  $xth(me,can) bind $tagOrId <$xth(gui,rmb)> "xth_me_area_start_drag $tagOrId \"$imgx\" %x %y"
}

proc xth_me_bind_area_only_drag {tagOrId} {
  global xth
  $xth(me,can) bind $tagOrId  "xth_me_area_start_drag $tagOrId {} %x %y"
  $xth(me,can) bind $tagOrId <$xth(gui,rmb)> "xth_me_area_start_drag $tagOrId {} %x %y"
}




proc xth_me_image_start_drag {tagOrId imgx x y} {
  global xth
  set xth(me,imgs,drag_mx) $x
  set xth(me,imgs,drag_my) $y
  set xth(me,imgs,drag_px) [lindex $xth(me,imgs,$imgx,position) 0]
  set xth(me,imgs,drag_py) [lindex $xth(me,imgs,$imgx,position) 1]
  $xth(me,can) configure -cursor fleur
  $xth(me,can) bind $tagOrId  "xth_me_image_drag $imgx %x %y"
  $xth(me,can) bind $tagOrId  "xth_me_image_end_drag $tagOrId $imgx %x %y"
  $xth(me,can) bind $tagOrId  "xth_me_image_drag $imgx %x %y"
  $xth(me,can) bind $tagOrId  "xth_me_image_end_drag $tagOrId $imgx %x %y"
  update idletasks
}

proc xth_me_image_drag {imgx x y} {
  global xth
  set xth(me,imgs,$imgx,position) [list \
    [expr $xth(me,imgs,drag_px) - [expr double($xth(me,imgs,drag_mx) - $x) * 100.0 / $xth(me,zoom)]] \
    [expr $xth(me,imgs,drag_py) + [expr double($xth(me,imgs,drag_my) - $y) * 100.0 / $xth(me,zoom)]] \
  ]
  xth_me_image_redraw $imgx
}

proc xth_me_image_end_drag {tagOrId imgx x y} {
  global xth
  xth_me_image_drag $imgx $x $y
  $xth(me,can) configure -cursor crosshair
  $xth(me,can) bind $tagOrId  ""
  $xth(me,can) bind $tagOrId  ""
  $xth(me,can) bind $tagOrId  ""
  $xth(me,can) bind $tagOrId  ""
  xth_me_image_choose $imgx
  xth_me_unredo_action [mc "dragging image"] \
    "xth_me_image_move $imgx $xth(me,imgs,drag_px) $xth(me,imgs,drag_py)" \
    "xth_me_image_move $imgx $xth(me,imgs,$imgx,position)"
  update idletasks 
}


proc xth_me_bind_image_drag {tagOrId imgx} {
  global xth
  $xth(me,can) bind $tagOrId  "xth_me_image_start_drag $tagOrId $imgx %x %y"
  $xth(me,can) bind $tagOrId  "xth_me_image_start_drag $tagOrId $imgx %x %y"
}


xth_app_create me [mc "Map Editor"]

xth_ctrl_add me cmds [mc "File commands"]
xth_ctrl_add me ss [mc "Search & Select"]
xth_ctrl_add me prev [mc "Command preview"]
xth_ctrl_add me point [mc "Point control"]
xth_ctrl_add me line [mc "Line control"]
xth_ctrl_add me linept [mc "Line point control"]
xth_ctrl_add me ac [mc "Area control"]
xth_ctrl_add me scrap [mc "Scrap control"]
xth_ctrl_add me text [mc "Text editor"]
xth_ctrl_add me area [mc "Drawing area"]
xth_ctrl_add me images [mc "Background images"]
xth_ctrl_finish me

# global variables initialization
set xth(me,ffull) {}
set xth(me,fltid) 0
set xth(me,fnewf) 0
set xth(me,fopen) 0
set xth(me,fsave) 0
set xth(me,zoom) 100
set xth(me,zoomv) 100
set xth(me,area,xmin) 0
set xth(me,area,xmax) 1600
set xth(me,area,ymin) 0
set xth(me,area,ymax) 1200
set xth(me,undolist) {}
set xth(me,redolist) {}
set xth(me,unredook) 0
set xth(me,unredola) {}
set xth(me,curscrap) {}
set xth(me,snai) 1

set xth(ctrl,me,images,posx) ""
set xth(ctrl,me,images,posy) ""
set xth(ctrl,me,images,newposx) 0
set xth(ctrl,me,images,newposy) 0
set xth(ctrl,me,images,vis) 0
set xth(ctrl,me,images,gamma) 0.0
set xth(ctrl,me,area,xmin) ""
set xth(ctrl,me,area,xmax) ""
set xth(ctrl,me,area,ymin) ""
set xth(ctrl,me,area,ymax) ""

set xth(ctrl,me,cmds,moveto) ""

set xth(ctrl,me,scrap,name) ""
set xth(ctrl,me,scrap,projection) ""
set xth(ctrl,me,scrap,options) ""
set xth(ctrl,me,scrap,px1) ""
set xth(ctrl,me,scrap,py1) ""
set xth(ctrl,me,scrap,px2) ""
set xth(ctrl,me,scrap,py2) ""
set xth(ctrl,me,scrap,rx1) ""
set xth(ctrl,me,scrap,ry1) ""
set xth(ctrl,me,scrap,rx2) ""
set xth(ctrl,me,scrap,ry2) ""
set xth(ctrl,me,scrap,units) ""
set xth(ctrl,me,scrap,pp1) {}
set xth(ctrl,me,scrap,pp2) {}
set xth(ctrl,me,scrap,sklempty) {}


set xth(ctrl,me,point,x) {}
set xth(ctrl,me,point,y) {}
set xth(ctrl,me,point,type) {}
set xth(ctrl,me,point,name) {}
set xth(ctrl,me,point,opts) {}
set xth(ctrl,me,point,rot) {}
set xth(ctrl,me,point,xs) {}
set xth(ctrl,me,point,ys) {}
set xth(ctrl,me,point,rotid) 0
set xth(ctrl,me,point,xsid) 0
set xth(ctrl,me,point,ysid) 0

set xth(ctrl,me,line,type) {}
set xth(ctrl,me,line,name) {}
set xth(ctrl,me,line,opts) {}
set xth(ctrl,me,line,reverse) 0
set xth(ctrl,me,line,close) 0
set xth(ctrl,me,line,empty) {}
set xth(ctrl,me,linept,x) {}
set xth(ctrl,me,linept,y) {}
set xth(ctrl,me,linept,xp) {}
set xth(ctrl,me,linept,yp) {}
set xth(ctrl,me,linept,xn) {}
set xth(ctrl,me,linept,yn) {}
set xth(ctrl,me,linept,idp) 0
set xth(ctrl,me,linept,idn) 0
set xth(ctrl,me,linept,smooth) 0
set xth(ctrl,me,linept,rot) {}
set xth(ctrl,me,linept,rs) {}
set xth(ctrl,me,linept,ls) {}
set xth(ctrl,me,linept,rotid) 0
set xth(ctrl,me,linept,rsid) 0
set xth(ctrl,me,linept,lsid) 0

set xth(ctrl,me,ac,type) {}
set xth(ctrl,me,ac,opts) {}
set xth(ctrl,me,ac,empty) {}


set xth(ctrl,me,ss,expr) "station"
set xth(ctrl,me,ss,regexp) 0
set xth(ctrl,me,ss,cases) 0

# initialize drawing area

xth_about_status [mc "loading area module ..."]

$xth(gui,me).af.apps configure -bg black
set canfm $xth(gui,me).af.apps.cf 
set xth(me,canf) $canfm
grid columnconf $xth(gui,me).af.apps 0 -weight 1
grid rowconf $xth(gui,me).af.apps 0 -weight 1
frame $canfm
set xth(me,can) $canfm.c
scrollbar $canfm.sv -orient vertical -command "$xth(me,can) yview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)  
bind $canfm.sv  xth_me_images_rescandraw
scrollbar $canfm.sh -orient horizontal -command "$xth(me,can) xview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
bind $canfm.sh  xth_me_images_rescandraw
canvas $xth(me,can) -relief flat -borderwidth 0 -bg black \
	-xscrollcommand "xth_me_area_scroll $canfm.sh" \
	-yscrollcommand "xth_me_area_scroll $canfm.sv" \
	-cursor crosshair
bind $xth(me,can)  xth_me_images_rescandraw
  
set xth(me,canid,area) [$xth(me,can) create polygon 0 0 0 256 256 256 256 0 -fill LightYellow]
set xth(me,canid,scrap,scp1) [$xth(me,can) create rectangle 0 0 3 3 \
  -fill red -outline red -width 1 -state hidden -tags {cmd_ctrl}]
set xth(me,canid,scrap,scp2) [$xth(me,can) create rectangle 0 0 3 3 \
  -fill red -outline red -width 1 -state hidden -tags {cmd_ctrl}]
set xth(me,canid,scrap,scpA) [$xth(me,can) create line 0 0 3 3 \
  -fill red -width 5 -state hidden -arrow last -arrowshape {18 20 5} -tags {cmd_ctrl}]

set xth(me,canid,scrap,scp1,pos) {0 0}
set xth(me,canid,scrap,scp2,pos) {0 0}
set xth(me,cmds,scrap_scale) 0

xth_me_bind_area_drag $xth(me,canid,area) {}
xth_me_area_adjust 0 0 1600 1200

set xth(me,canid,point,selector) [$xth(me,can) create oval 0 0 10 10 \
  -fill {} -outline red -width 1 -state hidden -tags {cmd_ctrl}]
set xth(me,canid,point,fill) [$xth(me,can) create polygon 0 0 10 0 10 10 0 10 \
  -fill red -stipple gray12 -state hidden -smooth on -tags {ptfill cmd_ctrl} -width 1]
set xth(me,canid,point,fx) [$xth(me,can) create line 0 0 10 10 \
  -width 5 -fill red -arrow last -arrowshape {9 12 4} \
  -state hidden -tags {ptfill cmd_ctrl}]
set xth(me,canid,point,fy) [$xth(me,can) create line 0 0 10 10 \
  -width 5 -fill red -arrow last -arrowshape {9 12 4} \
  -state hidden -tags {ptfill cmd_ctrl}]
#set xth(me,canid,point,fxc) [$xth(me,can) create oval 0 0 10 10 \
#  -outline red -fill red  -width 1 -state hidden -tags {ptfill cmd_ctrl}]
#set xth(me,canid,point,fyc) [$xth(me,can) create oval 0 0 10 10 \
#  -outline red -fill red  -width 1 -state hidden -tags {ptfill cmd_ctrl}]

xth_me_bind_area_drag $xth(me,canid,point,fill) {}
xth_me_bind_area_drag $xth(me,canid,point,selector) {}
xth_me_bind_area_only_drag $xth(me,canid,point,fx)
xth_me_bind_area_only_drag $xth(me,canid,point,fy)

set xth(me,canid,linept,selector) [$xth(me,can) create oval 0 0 10 10 \
  -fill {} -outline red -width 1 -state hidden -tags {linectrl cmd_ctrl}]
set xth(me,canid,linept,fr) [$xth(me,can) create line 0 0 10 10 \
  -width 5 -fill red -arrow last -arrowshape {9 12 4} \
  -state hidden -tags {linectrl cmd_ctrl}]
set xth(me,canid,linept,fl) [$xth(me,can) create line 0 0 10 10 \
  -width 5 -fill red -arrow last -arrowshape {9 12 4} \
  -state hidden -tags {linectrl cmd_ctrl}]

set xth(me,canid,linept,ppcpl) [$xth(me,can) create line 0 0 10 10 \
  -width $xth(gui,me,line,clwidth) -fill magenta -state hidden -tags "linectrl lineptppcp cmd_ctrl"]
set xth(me,canid,linept,nncpl) [$xth(me,can) create line 0 0 10 10 \
  -width $xth(gui,me,line,clwidth) -fill magenta -state hidden -tags "linectrl lineptnncp cmd_ctrl"]
set xth(me,canid,linept,ppcp) [$xth(me,can) create rectangle 0 0 10 10 \
  -width 1 -fill magenta -outline magenta -state hidden -tags "linectrl lineptppcp cmd_ctrl"]
set xth(me,canid,linept,nncp) [$xth(me,can) create rectangle 0 0 10 10 \
  -width 1 -fill magenta -outline magenta -state hidden -tags "linectrl lineptnncp cmd_ctrl"]

set xth(me,canid,linept,pcpl) [$xth(me,can) create line 0 0 10 10 \
  -width $xth(gui,me,line,clwidth) -fill $xth(gui,me,controlfill) -state hidden -tags "linectrl lineptpcp cmd_ctrl"]
set xth(me,canid,linept,ncpl) [$xth(me,can) create line 0 0 10 10 \
  -width $xth(gui,me,line,clwidth) -fill $xth(gui,me,controlfill) -state hidden -tags "linectrl lineptncp cmd_ctrl"]
set xth(me,canid,linept,pcp) [$xth(me,can) create rectangle 0 0 10 10 \
  -width 1 -fill red -outline $xth(gui,me,controlfill) -state hidden -tags "linectrl lineptpcp cmd_ctrl"]
set xth(me,canid,linept,ncp) [$xth(me,can) create rectangle 0 0 10 10 \
  -width 1 -fill red -outline $xth(gui,me,controlfill) -state hidden -tags "linectrl lineptncp cmd_ctrl"]

set xth(me,canid,line,tick) [$xth(me,can) create line 0 0 10 10 \
  -width $xth(gui,me,line,tickwidth) -fill #ffda00 -state hidden -tags "entirelinectrl cmd_ctrl"]

  
xth_me_bind_area_only_drag $xth(me,canid,linept,fr)
xth_me_bind_area_only_drag $xth(me,canid,linept,fl)
xth_me_bind_area_drag $xth(me,canid,linept,pcpl) {}
xth_me_bind_area_drag $xth(me,canid,linept,ncpl) {}
xth_me_bind_area_drag $xth(me,canid,linept,ppcpl) {}
xth_me_bind_area_drag $xth(me,canid,linept,nncpl) {}
xth_me_bind_area_drag $xth(me,canid,linept,selector) {}
xth_me_bind_area_drag $xth(me,canid,line,tick) {}

grid columnconf $canfm 0 -weight 1
grid rowconf $canfm 0 -weight 1
grid $xth(me,can) -column 0 -row 0 -sticky news
xth_scroll_showcmd $canfm.sv "grid $canfm.sv -column 1 -row 0 -sticky news"
xth_scroll_hidecmd $canfm.sv "grid forget $canfm.sv"
xth_scroll_showcmd $canfm.sh "grid $canfm.sh -column 0 -row 1 -sticky news"
xth_scroll_hidecmd $canfm.sh "grid forget $canfm.sh"


Label $xth(ctrl,me,area).l -text "" -anchor center -font $xth(gui,lfont) -state disabled
xth_status_bar me $xth(ctrl,me,area).l [mc "Current drawing area."]
Entry $xth(ctrl,me,area).xmin -font $xth(gui,lfont) -state disabled -width 4 -textvariable xth(ctrl,me,area,xmin)
xth_status_bar me $xth(ctrl,me,area).xmin [mc "X min."]
Entry $xth(ctrl,me,area).ymin -font $xth(gui,lfont) -state disabled -width 4 -textvariable xth(ctrl,me,area,ymin)
xth_status_bar me $xth(ctrl,me,area).ymin [mc "Y min."]
Entry $xth(ctrl,me,area).xmax -font $xth(gui,lfont) -state disabled -width 4 -textvariable xth(ctrl,me,area,xmax)
xth_status_bar me $xth(ctrl,me,area).xmax [mc "X max."]
Entry $xth(ctrl,me,area).ymax -font $xth(gui,lfont) -state disabled -width 4 -textvariable xth(ctrl,me,area,ymax)
xth_status_bar me $xth(ctrl,me,area).ymax [mc "Y max."]
Button $xth(ctrl,me,area).mab -text [mc "Adjust"] -anchor center -font $xth(gui,lfont) -state disabled -width 12 \
  -command {
    xth_me_area_adjust $xth(ctrl,me,area,xmin) $xth(ctrl,me,area,ymin) \
      $xth(ctrl,me,area,xmax) $xth(ctrl,me,area,ymax) 
  }
xth_status_bar me $xth(ctrl,me,area).mab [mc "Adjust drawing area to given limits."]
Button $xth(ctrl,me,area).aab -text [mc "Auto adjust"] -anchor center -font $xth(gui,lfont) -state disabled -width 12 \
  -command xth_me_area_auto_adjust
xth_status_bar me $xth(ctrl,me,area).aab [mc "Adjust drawing area to automatically calculated limits."]
Label $xth(ctrl,me,area).zl -text [mc "zoom"] -anchor e -font $xth(gui,lfont) -state disabled
menubutton $xth(ctrl,me,area).zb -text "100 %" -anchor center -font $xth(gui,lfont) \
  -indicatoron true -menu $xth(ctrl,me,area).zb.m -state disabled
menu $xth(ctrl,me,area).zb.m -tearoff 0 -font $xth(gui,lfont)
$xth(ctrl,me,area).zb.m add radiobutton -label "25 %" -variable xth(me,zoomv) -value 25 -command "xth_me_area_zoom_to 25"
$xth(ctrl,me,area).zb.m add radiobutton -label "50 %" -variable xth(me,zoomv) -value 50 -command "xth_me_area_zoom_to 50"
$xth(ctrl,me,area).zb.m add radiobutton -label "100 %" -variable xth(me,zoomv) -value 100 -command "xth_me_area_zoom_to 100"
$xth(ctrl,me,area).zb.m add radiobutton -label "200 %" -variable xth(me,zoomv) -value 200 -command "xth_me_area_zoom_to 200"
$xth(ctrl,me,area).zb.m add radiobutton -label "400 %" -variable xth(me,zoomv) -value 400 -command "xth_me_area_zoom_to 400"
xth_status_bar me $xth(ctrl,me,area).zb [mc "Zoom drawing area."]
xth_status_bar me $xth(ctrl,me,area).zl [mc "Zoom drawing area."]

xth_me_bind_entry_focus_return "$xth(ctrl,me,area).xmin $xth(ctrl,me,area).ymin $xth(ctrl,me,area).xmax $xth(ctrl,me,area).ymax" {
    xth_me_area_adjust $xth(ctrl,me,area,xmin) $xth(ctrl,me,area,ymin) \
      $xth(ctrl,me,area,xmax) $xth(ctrl,me,area,ymax) 
}
xth_me_bind_entry_focusin "$xth(ctrl,me,area).xmin $xth(ctrl,me,area).ymin $xth(ctrl,me,area).xmax $xth(ctrl,me,area).ymax"


grid columnconf $xth(ctrl,me,area) 0 -weight 1
grid columnconf $xth(ctrl,me,area) 1 -weight 1
grid columnconf $xth(ctrl,me,area) 2 -weight 1
grid columnconf $xth(ctrl,me,area) 3 -weight 1
grid $xth(ctrl,me,area).l -column 0 -row 0 -columnspan 4 -sticky news
grid $xth(ctrl,me,area).xmin -column 0 -row 1 -sticky news -padx 1
grid $xth(ctrl,me,area).ymin -column 1 -row 1 -sticky news -padx 1
grid $xth(ctrl,me,area).xmax -column 2 -row 1 -sticky news -padx 1
grid $xth(ctrl,me,area).ymax -column 3 -row 1 -sticky news -padx 1
grid $xth(ctrl,me,area).mab -column 0 -row 2 -columnspan 2 -sticky news
grid $xth(ctrl,me,area).aab -column 2 -row 2 -columnspan 2 -sticky news
grid $xth(ctrl,me,area).zl -column 0 -row 3 -columnspan 2 -sticky news
grid $xth(ctrl,me,area).zb -column 2 -row 3 -columnspan 2 -sticky news


xth_about_status [mc "loading commands module ..."]

# initialize file commands
set clbox $xth(ctrl,me,cmds).cl
set ccbox $xth(ctrl,me,cmds).cc
frame $clbox
frame $ccbox
listbox $clbox.l -height 8 -selectmode single -takefocus 0 \
  -yscrollcommand "xth_scroll $clbox.sv" \
  -xscrollcommand "xth_scroll $clbox.sh" \
  -font $xth(gui,lfont) -exportselection no \
  -listvariable xth(me,cmds,list) -selectborderwidth 0
scrollbar $clbox.sv -orient vert  -command "$clbox.l yview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
scrollbar $clbox.sh -orient horiz  -command "$clbox.l xview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
bind $clbox.l <> {xth_me_cmds_select {}}
bind $clbox.l  "focus $clbox.l"

grid columnconf $clbox 0 -weight 1
grid rowconf $clbox 0 -weight 1
grid $clbox.l -column 0 -row 0 -sticky news
xth_scroll_showcmd $clbox.sv "grid $clbox.sv -column 1 -row 0 -sticky news"
xth_scroll_hidecmd $clbox.sv "grid forget $clbox.sv"
xth_scroll_showcmd $clbox.sh "grid $clbox.sh -column 0 -row 1 -sticky news"
xth_scroll_hidecmd $clbox.sh "grid forget $clbox.sh"
xth_status_bar me $clbox [mc "Select command."]

grid columnconf $xth(ctrl,me,cmds) 0 -weight 1
grid $clbox -column 0 -row 0 -sticky news
grid $ccbox -column 0 -row 1 -sticky news

Button $ccbox.go -text [mc "Insert scrap"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command xth_me_cmds_action
xth_status_bar me $ccbox.go [mc "Action button."]
Button $ccbox.sel -text [mc "Select"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command {xth_me_cmds_set_mode 0}
xth_status_bar me $ccbox.sel [mc "Switch mouse mode to select objects."]
menubutton $ccbox.cfg -text [mc "Action"] -anchor center -font $xth(gui,lfont) \
  -indicatoron true -menu $ccbox.cfg.m -state disabled
xth_status_bar me $ccbox.cfg [mc "Configure action assigned to action button."]
menu $ccbox.cfg.m -tearoff 0 -font $xth(gui,lfont)
$ccbox.cfg.m add command -label [mc "Insert point"] -command {xth_me_cmds_set_action 1}
$ccbox.cfg.m add command -label [mc "Insert line"] -command {xth_me_cmds_set_action 0}
$ccbox.cfg.m add command -label [mc "Insert area"] -command {xth_me_cmds_set_action 5}
$ccbox.cfg.m add command -label [mc "Insert scrap"] -command {xth_me_cmds_set_action 2}
$ccbox.cfg.m add command -label [mc "Insert text"] -command {xth_me_cmds_set_action 3}
$ccbox.cfg.m add separator
$ccbox.cfg.m add command -label [mc "Delete"] -command {xth_me_cmds_set_action 4}
Button $ccbox.mu -text [mc "Move up"] -anchor center -font $xth(gui,lfont) \
  -state disabled -width 8 -command "xth_me_cmds_move_up {}"
xth_status_bar me $ccbox.mu [mc "Move file command up in the list."]
Button $ccbox.md -text [mc "Move down"] -anchor center -font $xth(gui,lfont) \
  -state disabled -width 8 -command "xth_me_cmds_move_down {}"
xth_status_bar me $ccbox.md [mc "Move file command down in the list."]
Button $ccbox.mt -text [mc "Move to"] -anchor center -font $xth(gui,lfont) \
  -state disabled -width 8 -command "xth_me_cmds_move_to {} {}"
xth_status_bar me $ccbox.mt [mc "Move file command to given position."]
ComboBox $ccbox.tt -postcommand xth_me_cmds_set_move_to_list \
  -modifycmd xth_me_cmds_set_move_to \
  -font $xth(gui,lfont) -height 4 -state disabled -width 8 \
  -textvariable xth(ctrl,me,cmds,moveto)
xth_status_bar me $ccbox.tt [mc "Select destination scrap and position in it."]
grid columnconf $ccbox 0 -weight 1
grid columnconf $ccbox 1 -weight 1
grid $ccbox.go -column 0 -row 0 -columnspan 2 -sticky news
grid $ccbox.cfg $ccbox.sel -row 1 -sticky news
grid $ccbox.mu $ccbox.md -row 2 -sticky news
grid $ccbox.mt $ccbox.tt -row 3 -sticky news

# initialize text editor
set txb $xth(ctrl,me,text)
text $txb.txt -height 6 -wrap none -font $xth(gui,efont) \
  -bg $xth(gui,ecolorbg) \
  -fg $xth(gui,ecolorfg) -insertbackground $xth(gui,ecolorfg) \
  -relief sunken -state disabled \
  -selectbackground $xth(gui,ecolorselbg) \
  -selectforeground $xth(gui,ecolorselfg) \
  -selectborderwidth 0 \
  -yscrollcommand "$txb.sv set" \
  -xscrollcommand "$txb.sh set" 
scrollbar $txb.sv -orient vert  -command "$txb.txt yview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
scrollbar $txb.sh -orient horiz  -command "$txb.txt xview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
Button $txb.upd -text [mc "Update text"] -anchor center -font $xth(gui,lfont) \
  -state disabled \
  -command {xth_me_cmds_update {}}
xth_status_bar me $txb.upd [mc "Press this button to save code you have written."]

grid columnconf $txb 0 -weight 1
grid rowconf $txb 0 -weight 1
grid $txb.txt -column 0 -row 0 -sticky news
grid $txb.sv -column 1 -row 0 -sticky news
grid $txb.sh -column 0 -row 1 -sticky news
grid $txb.upd -column 0 -row 2 -columnspan 2 -sticky news
xth_status_bar me $txb.txt [mc "Editor for free text in therion 2D file."]
bind $txb.txt <$xth(kb_control)-Key-x> "tk_textCut $txb.txt"
bind $txb.txt <$xth(kb_control)-Key-c> "tk_textCopy $txb.txt"
bind $txb.txt <$xth(kb_control)-Key-v> "tk_textPaste $txb.txt"

if {$xth(gui,bindinsdel)} {
  bind $txb.txt  {
    %W delete insert
    %W see insert
  }
  bind $txb.txt  "tk_textCut $txb.txt"
  bind $txb.txt <$xth(kb_control)-Key-Insert> "tk_textCopy $txb.txt"
  bind $txb.txt  "tk_textPaste $txb.txt"
#  catch {
#    bind $txb.txt  "tk_textCut $txb.txt"
#    bind $txb.txt <$xth(kb_control)-Key-KP_Insert> "tk_textCopy $txb.txt"
#    bind $txb.txt  "tk_textPaste $txb.txt"
#  }
}

if {[info exists xth(gui,te)]} {
#  bind $txb.txt <$xth(kb_control)-Key-a> "xth_te_text_select_all %W"
#  bind $txb.txt <$xth(kb_control)-Key-i> "xth_te_text_auto_indent %W"
  bind $txb.txt  $xth(te,bind,text_tab)
  bind $txb.txt  $xth(te,bind,text_return)
} else {
  bind $txb.txt  $xth(gui,bind,text_tab)
  bind $txb.txt  $xth(gui,bind,text_return)
}



# initialize search & select tool
set ssbx $xth(ctrl,me,ss)

Label $ssbx.xl -text [mc "expression"] -anchor e -font $xth(gui,lfont) -state disabled
xth_status_bar me $ssbx.xl [mc "Enter search expression."]
Entry $ssbx.xe -font $xth(gui,lfont) -state disabled \
  -textvariable xth(ctrl,me,ss,expr) -width 3
bind $ssbx.xe  xth_me_ss_show
xth_status_bar me $ssbx.xe [mc "Enter search expression."]
checkbutton $ssbx.rx -text [mc "regular expression"] -anchor w -font $xth(gui,lfont) -state disabled \
  -variable xth(ctrl,me,ss,regexp) -command {}
xth_status_bar me $ssbx.rx [mc "Search for regular expression."]
checkbutton $ssbx.cs -text [mc "case sensitive"] -anchor w -font $xth(gui,lfont) -state disabled \
  -variable xth(ctrl,me,ss,cases) -command {}
xth_status_bar me $ssbx.cs [mc "Case sensitive search."]
Button $ssbx.sn -text [mc "Find next"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command xth_me_ss_next -width 10
xth_status_bar me $ssbx.sn [mc "Select next object matching expression."]
Button $ssbx.sf -text [mc "Find first"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command xth_me_ss_first -width 10
xth_status_bar me $ssbx.sf [mc "Select first object matching expression."]
Button $ssbx.sa -text [mc "Show all"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command xth_me_ss_show -width 9
xth_status_bar me $ssbx.sa [mc "Highlight all objects matching expression."]
Button $ssbx.ca -text [mc "Clear all"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command xth_me_cmds_set_colors -width 9
xth_status_bar me $ssbx.ca [mc "Clear highlighted objects."]

grid columnconf $ssbx 0 -weight 1
grid columnconf $ssbx 1 -weight 1
grid $ssbx.xl -column 0 -row 0 -sticky news
grid $ssbx.xe -column 1 -row 0 -sticky news
grid $ssbx.cs -column 0 -row 1 -sticky news -columnspan 2
grid $ssbx.rx -column 0 -row 2 -sticky news -columnspan 2
grid $ssbx.sf -column 0 -row 3 -sticky news
grid $ssbx.sn -column 1 -row 3 -sticky news
grid $ssbx.sa -column 0 -row 4 -sticky news
grid $ssbx.ca -column 1 -row 4 -sticky news


xth_about_status [mc "loading images module ..."]

# initialize images
frame $xth(ctrl,me,images).il
set ilbox $xth(ctrl,me,images).il.ilbox 
set xth(me,imgs,list) {}
listbox $ilbox -height 4 -selectmode single -takefocus 0 \
  -yscrollcommand "xth_scroll $xth(ctrl,me,images).il.sv" \
  -xscrollcommand "xth_scroll $xth(ctrl,me,images).il.sh" \
  -font $xth(gui,lfont) -exportselection no \
  -listvariable xth(me,imgs,list) -selectborderwidth 0
scrollbar $xth(ctrl,me,images).il.sv -orient vert  -command "$ilbox yview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
scrollbar $xth(ctrl,me,images).il.sh -orient horiz  -command "$ilbox xview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
frame $xth(ctrl,me,images).ic
bind $ilbox <> "xth_me_image_select \[lindex \[%W curselection\] 0\]"

grid columnconf $xth(ctrl,me,images).il 0 -weight 1
grid rowconf $xth(ctrl,me,images).il 0 -weight 1
grid $ilbox -column 0 -row 0 -sticky news
xth_scroll_showcmd $xth(ctrl,me,images).il.sv "grid $xth(ctrl,me,images).il.sv -column 1 -row 0 -sticky news"
xth_scroll_hidecmd $xth(ctrl,me,images).il.sv "grid forget $xth(ctrl,me,images).il.sv"
xth_scroll_showcmd $xth(ctrl,me,images).il.sh "grid $xth(ctrl,me,images).il.sh -column 0 -row 1 -sticky news"
xth_scroll_hidecmd $xth(ctrl,me,images).il.sh "grid forget $xth(ctrl,me,images).il.sh"
xth_status_bar me $ilbox [mc "Select background image."]
grid columnconf $xth(ctrl,me,images) 0 -weight 1
grid $xth(ctrl,me,images).il -column 0 -row 0 -sticky news
grid $xth(ctrl,me,images).ic -column 0 -row 1 -sticky news

Button $xth(ctrl,me,images).ic.insp -text [mc "Insert"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command {
		set nimgs [llength $xth(me,imgs,xlist)]
    xth_me_image_newpos
    xth_me_image_insert $xth(ctrl,me,images,newposx) $xth(ctrl,me,images,newposy) {} 0 {}
		set nnimgs [llength $xth(me,imgs,xlist)]
		if {$nnimgs > $nimgs} {
	    xth_me_area_auto_adjust
		}
  }
xth_status_bar me $xth(ctrl,me,images).ic.insp [mc "Insert new background image."]
Button $xth(ctrl,me,images).ic.remp -text [mc "Remove"] -anchor center -font $xth(gui,lfont) -state disabled \
  -command {xth_me_image_remove ""}
xth_status_bar me $xth(ctrl,me,images).ic.remp [mc "Remove selected image."]
Separator $xth(ctrl,me,images).ic.s1 -orient horizontal
checkbutton $xth(ctrl,me,images).ic.viscb -text [mc "visibility"] -anchor w -font $xth(gui,lfont) -state disabled \
  -variable xth(ctrl,me,images,vis) -command {xth_me_image_toggle_vsb ""}
xth_status_bar me $xth(ctrl,me,images).ic.viscb [mc "Switch image visibility."]

Label $xth(ctrl,me,images).ic.gl -text "gamma 1.00" -anchor w -font $xth(gui,lfont) -state disabled
xth_status_bar me $xth(ctrl,me,images).ic.gl [mc "Control gamma value."]
Button $xth(ctrl,me,images).ic.gr -text [mc "Reset"] -anchor center -font $xth(gui,lfont) \
  -state disabled -width 8 -command "set xth(ctrl,me,images,gamma) 0.0; xth_me_image_update_gamma"
xth_status_bar me $xth(ctrl,me,images).ic.gr [mc "Reset image gamma value."]
scale $xth(ctrl,me,images).ic.gs -from -1.0 -to 1.0 \
  -font $xth(gui,lfont) -state disabled -showvalue 0 -resolution 0.01 \
  -variable xth(ctrl,me,images,gamma) -orient horiz
bind $xth(ctrl,me,images).ic.gs  xth_me_image_update_gamma
xth_status_bar me $xth(ctrl,me,images).ic.gs [mc "Set image gamma value."]


Label $xth(ctrl,me,images).ic.posl -text [mc "position"] -anchor e -font $xth(gui,lfont) -state disabled
xth_status_bar me $xth(ctrl,me,images).ic.posl [mc "Current position of selected image."]
Label $xth(ctrl,me,images).ic.posln -text "" -anchor center -font $xth(gui,lfont) -state disabled
xth_status_bar me $xth(ctrl,me,images).ic.posln [mc "Current position of selected image."]
Button $xth(ctrl,me,images).ic.posch -text [mc "Move to"] -anchor center -font $xth(gui,lfont) \
  -state disabled -width 8 -command "xth_me_image_move_to"
xth_status_bar me $xth(ctrl,me,images).ic.posch [mc "Move image to given position."]
Entry $xth(ctrl,me,images).ic.posx -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,images,posx)
xth_status_bar me $xth(ctrl,me,images).ic.posx [mc "New X coordinate of image."]
Entry $xth(ctrl,me,images).ic.posy -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,images,posy)
xth_status_bar me $xth(ctrl,me,images).ic.posy [mc "New Y coordinate of image."]
Button $xth(ctrl,me,images).ic.mvf -text [mc "Move front"] -anchor center -font $xth(gui,lfont) -state disabled -width 10 \
  -command xth_me_image_move_front
xth_status_bar me $xth(ctrl,me,images).ic.mvf [mc "Move image in front of all images."]
Button $xth(ctrl,me,images).ic.mvb -text [mc "Move back"] -anchor center -font $xth(gui,lfont) -state disabled -width 10 \
  -command xth_me_image_move_back
xth_status_bar me $xth(ctrl,me,images).ic.mvb [mc "Move image behind all images."]

xth_me_bind_entry_focus_return "$xth(ctrl,me,images).ic.posx $xth(ctrl,me,images).ic.posy" "xth_me_image_move_to"
xth_me_bind_entry_focusin "$xth(ctrl,me,images).ic.posx $xth(ctrl,me,images).ic.posy"

grid columnconf $xth(ctrl,me,images).ic 0 -weight 1
grid columnconf $xth(ctrl,me,images).ic 1 -weight 1
grid columnconf $xth(ctrl,me,images).ic 2 -weight 1
grid columnconf $xth(ctrl,me,images).ic 3 -weight 1
grid $xth(ctrl,me,images).ic.insp -column 0 -row 0 -sticky news -columnspan 2
grid $xth(ctrl,me,images).ic.remp -column 2 -row 0 -sticky news -columnspan 2
grid $xth(ctrl,me,images).ic.s1 -column 0 -row 1 -sticky news -columnspan 4 -pady 3
grid $xth(ctrl,me,images).ic.posl -column 0 -row 2 -sticky news -columnspan 2
grid $xth(ctrl,me,images).ic.posln -column 2 -row 2 -sticky news -columnspan 2 -padx 1
grid $xth(ctrl,me,images).ic.posch -column 0 -row 3 -sticky news -columnspan 2
grid $xth(ctrl,me,images).ic.posx -column 2 -row 3 -sticky ew -padx 1
grid $xth(ctrl,me,images).ic.posy -column 3 -row 3 -sticky ew -padx 1
grid $xth(ctrl,me,images).ic.mvf -column 0 -row 4 -sticky news -columnspan 2
grid $xth(ctrl,me,images).ic.mvb -column 2 -row 4 -sticky news -columnspan 2
grid $xth(ctrl,me,images).ic.gl -column 0 -row 5 -sticky news -columnspan 2
grid $xth(ctrl,me,images).ic.gr -column 2 -row 5 -sticky news -columnspan 2
grid $xth(ctrl,me,images).ic.gs -column 0 -row 6 -sticky news -columnspan 4
grid $xth(ctrl,me,images).ic.viscb -column 0 -row 7 -sticky news -columnspan 4
# xth_status_bar me $xth(ctrl,me,images). "To set file encoding, type encoding name and press  button."


xth_about_status [mc "loading preview module ..."]

# init command preview
set txb $xth(ctrl,me,prev)
text $txb.txt -height 4 -wrap none -font $xth(gui,efont) \
  -bg $xth(gui,ecolorbg) \
  -fg $xth(gui,ecolorfg) -insertbackground $xth(gui,ecolorfg) \
  -relief sunken -state disabled \
  -selectbackground $xth(gui,ecolorselbg) \
  -selectforeground $xth(gui,ecolorselfg) \
  -selectborderwidth 0 \
  -yscrollcommand "$txb.sv set" \
  -xscrollcommand "$txb.sh set" 
scrollbar $txb.sv -orient vert  -command "$txb.txt yview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
scrollbar $txb.sh -orient horiz  -command "$txb.txt xview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
Button $txb.upd -text [mc "Update command"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command {xth_me_cmds_update {}}
xth_status_bar me $txb.upd [mc "Press this button, if you have changed something and you can not see your changes here."]  
grid columnconf $txb 0 -weight 1
grid rowconf $txb 0 -weight 1
grid $txb.txt -column 0 -row 0 -sticky news
grid $txb.sv -column 1 -row 0 -sticky news
grid $txb.sh -column 0 -row 1 -sticky news
grid $txb.upd -column 0 -row 2 -columnspan 2 -sticky news
xth_status_bar me $txb.txt [mc "Command preview."]

# init scrap control

xth_about_status [mc "loading scrap module ..."]

set sfm $xth(ctrl,me,scrap)

Label $sfm.namel -text id -anchor e -font $xth(gui,lfont) -state disabled
xth_status_bar me $sfm.namel [mc "Scrap name."]
Entry $sfm.name -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,scrap,name)
xth_status_bar me $sfm.name [mc "Scrap name."]

Label $sfm.projl -text [mc "projection"] -anchor e -font $xth(gui,lfont) -state disabled
xth_status_bar me $sfm.projl [mc "Scrap projection."]
ComboBox $sfm.proj -values $xth(scrap_projections) -autocomplete 1 \
  -font $xth(gui,lfont) -height 4 -state disabled -width 4 \
  -textvariable xth(ctrl,me,scrap,projection) -command {xth_me_cmds_update {}}

xth_status_bar me $sfm.proj [mc "Scrap projection."]
xth_me_bind_typecbx_hint $sfm.proj projection

Label $sfm.optl -text [mc "options"] -anchor e -font $xth(gui,lfont) -state disabled -width 8
xth_status_bar me $sfm.optl [mc "Other scrap options."]
Entry $sfm.opt -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,scrap,options)

xth_status_bar me $sfm.opt [mc "Other scrap options."] 

#Separator $sfm.s1 -orient horizontal
Button $sfm.scl -text [mc "Scale"] -anchor center -font $xth(gui,lfont) -state disabled -command xth_me_cmds_scrap_scale_start
xth_status_bar me $sfm.scl [mc "Scrap scaling - push to click picture calibration points."]
Button $sfm.scpb -text [mc "Update scrap"] -anchor center -font $xth(gui,lfont) \
  -state disabled -width 4 -command {xth_me_cmds_update {}}
xth_status_bar me $sfm.scpb [mc "Press this button to apply your changes to current scrap."]
Label $sfm.scpp -text [mc "picture scale points"] -anchor w -font $xth(gui,lfont) -state disabled
xth_status_bar me $sfm.scpp [mc "Calibration points on the picture (X1:Y1 - X2:Y2)."]
Entry $sfm.scx1p -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,scrap,px1)
xth_status_bar me $sfm.scx1p [mc "X1 picture."] 
Entry $sfm.scy1p -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,scrap,py1)
xth_status_bar me $sfm.scy1p [mc "Y1 picture."] 
Entry $sfm.scx2p -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,scrap,px2)
xth_status_bar me $sfm.scx2p [mc "X2 picture."]
Entry $sfm.scy2p -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,scrap,py2)
xth_status_bar me $sfm.scy2p [mc "Y2 picture."]
Label $sfm.scrp -text [mc "real scale points"] -anchor w -font $xth(gui,lfont) -state disabled
xth_status_bar me $sfm.scrp [mc "Real coordinates of calibration points (X1:Y1 - X2:Y2)."]
Entry $sfm.scx1r -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,scrap,rx1)
xth_status_bar me $sfm.scx1r [mc "X1 real."]
Entry $sfm.scy1r -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,scrap,ry1)
xth_status_bar me $sfm.scy1r [mc "Y1 real."]
Entry $sfm.scx2r -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,scrap,rx2)
xth_status_bar me $sfm.scx2r [mc "X2 real."]
Entry $sfm.scy2r -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,scrap,ry2)
xth_status_bar me $sfm.scy2r [mc "Y2 real."]
Label $sfm.scul -text [mc "units"] -anchor e -font $xth(gui,lfont) -state disabled
xth_status_bar me $sfm.scul [mc "Units of real coordinates."]
ComboBox $sfm.scu -values $xth(length_units) \
  -font $xth(gui,lfont) -height 5 -state disabled -width 4 \
  -textvariable xth(ctrl,me,scrap,units) -command {xth_me_cmds_update {}}
xth_status_bar me $sfm.scu [mc "Units of real coordinates."]

xth_me_bind_entry_focus_return "$sfm.scx1p $sfm.scy1p $sfm.scx2p $sfm.scy2p" {xth_me_cmds_update {}}
xth_me_bind_entry_focus_return "$sfm.scx1r $sfm.scy1r $sfm.scx2r $sfm.scy2r" {xth_me_cmds_update {}}
xth_me_bind_entry_return "$sfm.name $sfm.opt" {xth_me_cmds_update {}}
xth_me_bind_entry_focusin "$sfm.name $sfm.opt $sfm.scx1p $sfm.scy1p $sfm.scx2p $sfm.scy2p $sfm.scx1r $sfm.scy1r $sfm.scx2r $sfm.scy2r"


# scrap background sketches
Label $sfm.skl -text [mc "background sketches"] -anchor w -font $xth(gui,lfont) -state disabled
xth_status_bar me $sfm.skl [mc "List of image files used as scrap background."]


set plf $sfm.skll
frame $plf
listbox $plf.l -height 2 -selectmode single -takefocus 0 \
  -yscrollcommand "xth_scroll $plf.sv" \
  -xscrollcommand "xth_scroll $plf.sh" \
  -font $xth(gui,lfont) -exportselection no \
  -selectborderwidth 0
scrollbar $plf.sv -orient vert  -command "$plf.l yview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
scrollbar $plf.sh -orient horiz  -command "$plf.l xview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
bind $plf.l  "focus $plf.l"

Button $sfm.skins -text [mc "Insert"] -anchor center -font $xth(gui,lfont) \
  -state disabled -width 10 -command xth_me_cmds_scrap_sketch_start
xth_status_bar me $sfm.skins [mc "Press this button to insert sketch by clicking on it."]
Button $sfm.skdel -text [mc "Delete"] -anchor center -font $xth(gui,lfont) \
  -state disabled -width 10 -command {xth_me_cmds_delete_scrap_sketch {} {}}
xth_status_bar me $sfm.skdel [mc "Delete sketch from scrap."]

grid columnconf $plf 0 -weight 1
grid rowconf $plf 0 -weight 1
grid $plf.l -column 0 -row 0 -sticky news
xth_scroll_showcmd $plf.sv "grid $plf.sv -column 1 -row 0 -sticky news"
xth_scroll_hidecmd $plf.sv "grid forget $plf.sv"
xth_scroll_showcmd $plf.sh "grid $plf.sh -column 0 -row 1 -sticky news"
xth_scroll_hidecmd $plf.sh "grid forget $plf.sh"
xth_status_bar me $plf [mc "Select line in area."]


grid columnconf $sfm 0 -weight 1
grid columnconf $sfm 1 -weight 1
grid columnconf $sfm 2 -weight 1
grid columnconf $sfm 3 -weight 1
grid $sfm.namel -row 0 -column 0 -columnspan 2 -sticky news
grid $sfm.name  -row 0 -column 2 -columnspan 2 -sticky news -padx 1
grid $sfm.projl -row 1 -column 0 -columnspan 2 -sticky news
grid $sfm.proj  -row 1 -column 2 -columnspan 2 -sticky news -padx 2
grid $sfm.optl -row 2 -column 0 -columnspan 2 -sticky news
grid $sfm.opt  -row 2 -column 2 -columnspan 2 -sticky news -padx 1
#grid $sfm.s1 -column 0 -row 3 -sticky news -columnspan 4 -pady 3
grid $sfm.scl -row 3 -column 0 -columnspan 2 -sticky news
grid $sfm.scpb -row 3 -column 2 -columnspan 2 -sticky news
grid $sfm.scpp -column 0 -row 4 -sticky news -columnspan 4
grid $sfm.scx1p $sfm.scy1p $sfm.scx2p $sfm.scy2p -row 5 -sticky news -padx 1
grid $sfm.scrp -column 0 -row 6 -sticky news -columnspan 4
grid $sfm.scx1r $sfm.scy1r $sfm.scx2r $sfm.scy2r -row 7 -sticky news -padx 1
grid $sfm.scul -row 8 -column 0 -columnspan 2 -sticky news
grid $sfm.scu  -row 8 -column 2 -columnspan 2 -sticky news -padx 2

grid $sfm.skl -column 0 -row 9 -sticky news -columnspan 4
grid $sfm.skll -column 0 -row 10 -sticky news -columnspan 4
grid $sfm.skins -row 11 -column 0 -columnspan 2 -sticky news
grid $sfm.skdel -row 11 -column 2 -columnspan 2 -sticky news


# point control
xth_about_status [mc "loading point module ..."]

set ptc $xth(ctrl,me,point)

Label $ptc.posl -text [mc "position"] -anchor e -font $xth(gui,lfont) -state disabled -width 8
xth_status_bar me $ptc.posl [mc "Point position."]
Entry $ptc.posx -font $xth(gui,lfont) -state disabled -width 4 -textvariable xth(ctrl,me,point,x)
xth_status_bar me $ptc.posx [mc "Point X coordinate."]
Entry $ptc.posy -font $xth(gui,lfont) -state disabled -width 4 -textvariable xth(ctrl,me,point,y)
xth_status_bar me $ptc.posy [mc "Point Y coordinate."] 

Button $ptc.upd -text [mc "Update point"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command {xth_me_cmds_update {}}
xth_status_bar me $ptc.upd [mc "Click this button to apply point changes."] 

ComboBox $ptc.theme -values $xth(me,themes,showlist) -autocomplete 1 -editable 0 \
  -font $xth(gui,lfont) -height $xth(gui,me,typelistwidth) -state disabled -width 4 \
  -modifycmd "xth_me_set_theme \[$ptc.theme getvalue\]" -fg blue \
  -textvariable xth(ctrl,me,acttheme)
xth_status_bar me $ptc.theme [mc "Actual symbol theme."]
ComboBox $ptc.themetype -values $xth(me,themes,all-symbols,point,showlist) -autocomplete 1 -editable 0 \
  -font $xth(gui,lfont) -height $xth(gui,me,typelistwidth) -state disabled -width 4  -fg blue \
  -textvariable xth(ctrl,me,point,themetype) \
  -modifycmd xth_me_point_themetype_modified
xth_status_bar me $ptc.themetype [mc "Point type."]

Label $ptc.typl -text [mc "type"] -anchor e -font $xth(gui,lfont) -state disabled -width 8
xth_status_bar me $ptc.typl [mc "Point type."] 
ComboBox $ptc.typ -values $xth(point_types) -autocomplete 1 \
  -font $xth(gui,lfont) -height $xth(gui,me,typelistwidth) -state disabled -width 4 \
  -textvariable xth(ctrl,me,point,type) -command {xth_me_cmds_update {}} \
  -modifycmd {xth_me_cmds_update {}}
xth_status_bar me $ptc.typ [mc "Point type."]
xth_me_bind_typecbx_hint $ptc.typ point

Label $ptc.namel -text [mc "id"] -anchor e -font $xth(gui,lfont) -state disabled
xth_status_bar me $ptc.namel [mc "Point identifier."]
Entry $ptc.name -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,point,name)
xth_status_bar me $ptc.name [mc "Point identifier."] 

Label $ptc.optl -text [mc "options"] -anchor e -font $xth(gui,lfont) -state disabled
xth_status_bar me $ptc.optl [mc "Other point options."]
Entry $ptc.opt -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,point,opts)
xth_status_bar me $ptc.opt [mc "I.e, if type is label, write here: -text \042this will be displayed (P100)\042"]

Separator $ptc.s1 -orient horizontal

checkbutton $ptc.rotc -text [mc "orientation"] -anchor w -font $xth(gui,lfont) -state disabled \
  -variable xth(ctrl,me,point,rotid) -command xth_me_cmds_point_change_state
Entry $ptc.rot -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,point,rot)
xth_status_bar me $ptc.rot [mc "Enter symbol orientation angle."]
xth_status_bar me $ptc.rotc [mc "There are symbol types which must be orientated (i.e: gradients). Click here to giv'em orientation by mouse or keyboard."]

checkbutton $ptc.xszc -text [mc "x-size"] -anchor w -font $xth(gui,lfont) -state disabled \
  -variable xth(ctrl,me,point,xsid) -command xth_me_cmds_point_change_state
xth_status_bar me $ptc.xszc [mc "Set point size in main direction."]
Entry $ptc.xsz -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,point,xs)
xth_status_bar me $ptc.xsz [mc "Enter point size in main direction."]

checkbutton $ptc.yszc -text [mc "y-size"] -anchor w -font $xth(gui,lfont) -state disabled \
  -variable xth(ctrl,me,point,ysid) -command xth_me_cmds_point_change_state
xth_status_bar me $ptc.yszc [mc "Set point size in side direction."]
Entry $ptc.ysz -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,point,ys)
xth_status_bar me $ptc.ysz [mc "Enter point size in side direction."]

xth_me_bind_entry_focus_return "$ptc.posx $ptc.posy" {xth_me_cmds_update {}}
xth_me_bind_entry_return "$ptc.name $ptc.opt $ptc.rot $ptc.xsz $ptc.ysz" {xth_me_cmds_update {}}
xth_me_bind_entry_focusin "$ptc.posx $ptc.posy $ptc.name $ptc.opt $ptc.rot $ptc.xsz $ptc.ysz"


grid columnconf $ptc 0 -weight 1
grid columnconf $ptc 1 -weight 1
grid columnconf $ptc 2 -weight 1
grid columnconf $ptc 3 -weight 1

set crow 0
grid $ptc.theme -row $crow -column 0 -columnspan 2 -sticky news -padx 2 -pady 2
grid $ptc.themetype -row $crow -column 2 -columnspan 2 -sticky news -padx 2 -pady 2
incr crow
grid $ptc.typl -row $crow -column 0 -columnspan 2 -sticky news
grid $ptc.typ -row $crow -column 2 -columnspan 2 -sticky news -padx 2
incr crow
grid $ptc.s1 -row $crow -column 0 -columnspan 4 -sticky news -pady 2
incr crow
grid $ptc.posl -row $crow -column 0 -columnspan 2 -sticky news
grid $ptc.posx -row $crow -column 2 -sticky news -padx 2 -pady 1
grid $ptc.posy -row $crow -column 3 -sticky news -padx 2 -pady 1
incr crow
grid $ptc.namel -row $crow -column 0 -columnspan 2 -sticky news
grid $ptc.name -row $crow -column 2 -columnspan 2 -sticky news -padx 2 -pady 1
incr crow
grid $ptc.optl -row $crow -column 0 -columnspan 2 -sticky news
grid $ptc.opt -row $crow -column 2 -columnspan 2 -sticky news -padx 2 -pady 1
incr crow
grid $ptc.rotc -row $crow -column 0 -columnspan 2 -sticky news
grid $ptc.rot -row $crow -column 2 -columnspan 2 -sticky news -padx 2 -pady 1
incr crow
## DISABLED
#grid $ptc.xszc -row 6 -column 0 -columnspan 2 -sticky news
#grid $ptc.xsz -row 6 -column 2 -columnspan 2 -sticky news -padx 1
#grid $ptc.yszc -row 7 -column 0 -columnspan 2 -sticky news
#grid $ptc.ysz -row 7 -column 2 -columnspan 2 -sticky news -padx 1
grid $ptc.upd -row $crow -column 0 -columnspan 4 -sticky news
incr crow


# line control
xth_about_status [mc "loading line module ..."]

set lnc $xth(ctrl,me,line)

ComboBox $lnc.theme -values $xth(me,themes,showlist) -autocomplete 1 -editable 0 \
  -font $xth(gui,lfont) -height $xth(gui,me,typelistwidth) -state disabled -width 4 \
  -modifycmd "xth_me_set_theme \[$ptc.theme getvalue\]" -fg blue \
  -textvariable xth(ctrl,me,acttheme)
xth_status_bar me $lnc.theme [mc "Actual symbol theme."]
ComboBox $lnc.themetype -values $xth(me,themes,all-symbols,line,showlist) -autocomplete 1 -editable 0 \
  -font $xth(gui,lfont) -height $xth(gui,me,typelistwidth) -state disabled -width 4 -fg blue \
  -textvariable xth(ctrl,me,line,themetype) \
  -modifycmd xth_me_line_themetype_modified
xth_status_bar me $lnc.themetype [mc "Line type."]

Label $lnc.typl -text [mc "type"] -anchor e -font $xth(gui,lfont) -state disabled
xth_status_bar me $lnc.typl [mc "Line type."]
ComboBox $lnc.typ -values $xth(line_types) -autocomplete 1  \
  -font $xth(gui,lfont) -height $xth(gui,me,typelistwidth) -state disabled -width 4 \
  -textvariable xth(ctrl,me,line,type) -modifycmd {xth_me_cmds_update {}} \
  -command {xth_me_cmds_update {}}
xth_status_bar me $lnc.typ [mc "Line type."]
xth_me_bind_typecbx_hint $lnc.typ line

Separator $lnc.s1

Label $lnc.namel -text [mc "id"] -anchor e -font $xth(gui,lfont) -state disabled
xth_status_bar me $lnc.namel [mc "Line identifier."]
Entry $lnc.name -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,line,name)
xth_status_bar me $lnc.name [mc "Line identifier."]

Label $lnc.optl -text [mc "options"] -anchor e -font $xth(gui,lfont) -state disabled
xth_status_bar me $lnc.optl [mc "Other line options."]
Entry $lnc.opt -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,line,opts)
xth_status_bar me $lnc.opt [mc "Other line options."]

checkbutton $lnc.rev -text [mc "reverse"] -anchor w -font $xth(gui,lfont) \
  -state disabled \
  -variable xth(ctrl,me,line,reverse) \
  -command xth_me_cmds_toggle_line_reverse
xth_status_bar me $lnc.rev [mc "Reverse line."]
checkbutton $lnc.cls -text [mc "close"] -anchor w -font $xth(gui,lfont) \
  -state disabled \
  -variable xth(ctrl,me,line,close) \
  -command xth_me_cmds_toggle_line_close
xth_status_bar me $lnc.cls [mc "Close line."]

set plf $lnc.pl
frame $plf
listbox $plf.l -height 4 -selectmode single -takefocus 0 \
  -yscrollcommand "xth_scroll $plf.sv" \
  -xscrollcommand "xth_scroll $plf.sh" \
  -font $xth(gui,lfont) -exportselection no \
  -selectborderwidth 0
scrollbar $plf.sv -orient vert  -command "$plf.l yview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
scrollbar $plf.sh -orient horiz  -command "$plf.l xview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
bind $plf.l <> {
  if {$xth(me,fopen)} {
    xth_me_cmds_select_linept $xth(me,cmds,selid) \
    [lindex $xth(me,cmds,$xth(me,cmds,selid),xplist) \
    [lindex [%W curselection] 0]]
    if {$xth(me,cmds,selpid) > 0} {
      xth_me_center_to [list \
	$xth(me,cmds,$xth(me,cmds,selid),$xth(me,cmds,selpid),x) \
	$xth(me,cmds,$xth(me,cmds,selid),$xth(me,cmds,selpid),y)]
    }
  }
}
bind $plf.l  "focus $plf.l"

menubutton $lnc.lpa -text [mc "Edit line"] -anchor w -font $xth(gui,lfont) \
  -indicatoron true -menu $lnc.lpa.m -state disabled -width 10
xth_status_bar me $lnc.lpa [mc "Insert/delete line point. Split line."]
Button $lnc.upd -text [mc "Update"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command {xth_me_cmds_update {}} -width 10
Button $lnc.trace -text [mc "Continue tracing"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command {xth_me_cmds_line_trace} -width 10
Button $lnc.vector -text [mc "Convert to curve"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command {xth_me_cmds_line_poly2bezier} -width 10
xth_status_bar me $lnc.upd [mc "Click this button to apply line changes."]

menu $lnc.lpa.m -tearoff 0 -font $xth(gui,lfont)
$lnc.lpa.m add command -label [mc "Insert point"] -command {xth_me_cmds_start_linept_insert} -state disabled
$lnc.lpa.m add command -label [mc "Delete point"] -command {xth_me_cmds_delete_linept {} {}} -state disabled
$lnc.lpa.m add command -label [mc "Split line"] -command {xth_me_cmds_line_split} -state disabled
$lnc.lpa.m add command -label [mc "Trace line"] -command {xth_me_cmds_line_trace_start}
$lnc.lpa.m add command -label [mc "Convert to curve"] -command {xth_me_cmds_line_poly2bezier}

#Button $lnc.insp -text "Insert" -anchor center -font $xth(gui,lfont) \
#  -state disabled -width 10 -command {xth_me_cmds_start_linept_insert}
#Button $lnc.delp -text "Delete" -anchor center -font $xth(gui,lfont) \
#  -state disabled -width 10 -command {xth_me_cmds_delete_linept {} {}}

grid columnconf $plf 0 -weight 1
grid rowconf $plf 0 -weight 1
grid $plf.l -column 0 -row 0 -sticky news
xth_scroll_showcmd $plf.sv "grid $plf.sv -column 1 -row 0 -sticky news"
xth_scroll_hidecmd $plf.sv "grid forget $plf.sv"
xth_scroll_showcmd $plf.sh "grid $plf.sh -column 0 -row 1 -sticky news"
xth_scroll_hidecmd $plf.sh "grid forget $plf.sh"
xth_status_bar me $plf [mc "Select line point."]


grid columnconf $lnc 0 -weight 1
grid columnconf $lnc 1 -weight 1
set crow 0
grid $lnc.theme -row $crow -column 0 -sticky news -padx 2 -pady 2
grid $lnc.themetype -row $crow -column 1 -sticky news -padx 2 -pady 2
incr crow
grid $lnc.typl -row $crow -column 0 -sticky news
grid $lnc.typ -row $crow -column 1 -sticky news -padx 2
incr crow
grid $lnc.s1 -row $crow -column 0 -columnspan 2 -sticky news -padx 2 -pady 2
incr crow
grid $lnc.namel -row $crow -column 0 -sticky news
grid $lnc.name -row $crow -column 1 -sticky news -padx 2 -pady 1
incr crow
grid $lnc.optl -row $crow -column 0 -sticky news
grid $lnc.opt -row $crow -column 1 -sticky news -padx 2 -pady 1
incr crow
grid $lnc.rev -row $crow -column 0 -sticky news
grid $lnc.cls -row $crow -column 1 -sticky news
incr crow
grid $plf -row $crow -column 0 -columnspan 2 -sticky news
incr crow
set xth(ctrl,me,line,tracerow) $crow
incr crow
grid $lnc.lpa -row $crow -column 0 -sticky news
grid $lnc.upd -row $crow -column 1 -sticky news
incr crow

#grid $lnc.insp -row 5 -column 0 -sticky news
#grid $lnc.delp -row 5 -column 1 -sticky news

xth_me_bind_entry_return "$lnc.name $lnc.opt" {xth_me_cmds_update {}}
xth_me_bind_entry_focusin "$lnc.name $lnc.opt"

# line point control
xth_about_status [mc "loading line point module ..."]

set lpc $xth(ctrl,me,linept)

Label $lpc.posl -text [mc "position"] -anchor e -font $xth(gui,lfont) -state disabled -width 0
xth_status_bar me $lpc.posl [mc "Point position."]
Entry $lpc.posx -font $xth(gui,lfont) -state disabled \
  -textvariable xth(ctrl,me,linept,x) -width 0
xth_status_bar me $lpc.posx [mc "Point X coordinate."]
Entry $lpc.posy -font $xth(gui,lfont) -state disabled \
  -textvariable xth(ctrl,me,linept,y) -width 0
xth_status_bar me $lpc.posy [mc "Point Y coordinate."] 

Entry $lpc.xp -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,linept,xp)
xth_status_bar me $lpc.xp [mc "Previous control point X coordinate."] 
Entry $lpc.yp -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,linept,yp)
xth_status_bar me $lpc.yp [mc "Previous control point Y coordinate."] 
Entry $lpc.xn -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,linept,xn)
xth_status_bar me $lpc.xn [mc "Next control point X coordinate."] 
Entry $lpc.yn -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,linept,yn)
xth_status_bar me $lpc.yn [mc "Next control point Y coordinate."] 

checkbutton $lpc.cbp -text "<<" -anchor w -font $xth(gui,lfont) \
  -state disabled -width 0 \
  -variable xth(ctrl,me,linept,idp) \
  -command xth_me_cmds_toggle_linept
xth_status_bar me $lpc.cbp [mc "Checkbox whether to use previous control point."]
checkbutton $lpc.cbs -text [mc "smooth"] -anchor w -font $xth(gui,lfont) -state disabled \
  -variable xth(ctrl,me,linept,smooth) -width 0\
  -command xth_me_cmds_toggle_linept
xth_status_bar me $lpc.cbs [mc "Set line to be smooth in given point."]
checkbutton $lpc.cbn -text ">>" -anchor w -font $xth(gui,lfont) \
  -state disabled -width 0 \
  -variable xth(ctrl,me,linept,idn) \
  -command xth_me_cmds_toggle_linept
xth_status_bar me $lpc.cbn [mc "Checkbox whether to use next control point."]

checkbutton $lpc.rotc -text [mc "orientation"] -anchor w -font $xth(gui,lfont) -state disabled \
  -variable xth(ctrl,me,linept,rotid) -width 0 \
  -command xth_me_cmds_toggle_linept
xth_status_bar me $lpc.rotc [mc "Set line point orientation."]
Entry $lpc.rot -font $xth(gui,lfont) -state disabled -width 0 \
  -textvariable xth(ctrl,me,linept,rot)
xth_status_bar me $lpc.rot [mc "Enter line point orientation."]

checkbutton $lpc.rszc -text [mc "r-size"] -anchor w -font $xth(gui,lfont) -state disabled \
  -variable xth(ctrl,me,linept,rsid) -width 0 \
  -command xth_me_cmds_toggle_linept
xth_status_bar me $lpc.rszc [mc "Set line size in right direction."]
Entry $lpc.rsz -font $xth(gui,lfont) -state disabled -width 0 \
  -textvariable xth(ctrl,me,linept,rs)
xth_status_bar me $lpc.rsz [mc "Enter line size in right direction."]

checkbutton $lpc.lszc -text [mc "l-size"] -anchor w -font $xth(gui,lfont) -state disabled \
  -variable xth(ctrl,me,linept,lsid) -width 0  \
  -command xth_me_cmds_toggle_linept
xth_status_bar me $lpc.lszc [mc "Set line size in left direction."]
Entry $lpc.lsz -font $xth(gui,lfont) -state disabled -width 0 \
  -textvariable xth(ctrl,me,linept,ls)
xth_status_bar me $lpc.lsz [mc "Enter line size in left direction."]

Label $lpc.optl -text [mc "options"] -anchor sw -font $xth(gui,lfont) -state disabled \
 -width 0
xth_status_bar me $lpc.optl [mc "Line point options editor."]
Button $lpc.upd -text [mc "Update"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command {xth_me_cmds_update {}} -width 0
xth_status_bar me $lpc.upd [mc "Click this button to apply line point changes."]

set txb $lpc.oe
frame $txb
text $txb.txt -height 2 -wrap none -font $xth(gui,efont) \
  -bg $xth(gui,ecolorbg) \
  -fg $xth(gui,ecolorfg) -insertbackground $xth(gui,ecolorfg) \
  -relief sunken -state disabled \
  -selectbackground $xth(gui,ecolorselbg) \
  -selectforeground $xth(gui,ecolorselfg) \
  -yscrollcommand "$txb.sv set" \
  -selectborderwidth 0 \
  -xscrollcommand "$txb.sh set" 
scrollbar $txb.sv -orient vert  -command "$txb.txt yview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
scrollbar $txb.sh -orient horiz  -command "$txb.txt xview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
grid columnconf $txb 0 -weight 1
grid rowconf $txb 0 -weight 1
grid $txb.txt -column 0 -row 0 -sticky news
grid $txb.sv -column 1 -row 0 -sticky news
grid $txb.sh -column 0 -row 1 -sticky news
xth_status_bar me $txb [mc "Editor for line point options."]
bind $txb.txt <$xth(kb_control)-Key-x> "tk_textCut $txb.txt"
bind $txb.txt <$xth(kb_control)-Key-c> "tk_textCopy $txb.txt"
bind $txb.txt <$xth(kb_control)-Key-v> "tk_textPaste $txb.txt"

if {$xth(gui,bindinsdel)} {
  bind $txb.txt  {
    %W delete insert
    %W see insert
  }
  bind $txb.txt  "tk_textCut $txb.txt"
  bind $txb.txt <$xth(kb_control)-Key-Insert> "tk_textCopy $txb.txt"
  bind $txb.txt  "tk_textPaste $txb.txt"
#  catch {
#    bind $txb.txt  "tk_textCut $txb.txt"
#    bind $txb.txt <$xth(kb_control)-Key-KP_Insert> "tk_textCopy $txb.txt"
#    bind $txb.txt  "tk_textPaste $txb.txt"
#  }
}

if {[info exists xth(gui,te)]} {
  bind $txb.txt  $xth(te,bind,text_tab)
  bind $txb.txt  $xth(te,bind,text_return)
} else {
  bind $txb.txt  $xth(gui,bind,text_tab)
  bind $txb.txt  $xth(gui,bind,text_return)
}

grid columnconf $lpc 0 -weight 1
grid columnconf $lpc 1 -weight 1
grid columnconf $lpc 2 -weight 1
grid columnconf $lpc 3 -weight 1

grid $lpc.posl -row 0 -column 0 -columnspan 2 -sticky news
grid $lpc.posx -row 0 -column 2 -sticky news
grid $lpc.posy -row 0 -column 3 -sticky news

xth_me_bind_entry_focus_return "$lpc.posx $lpc.posy" {xth_me_cmds_update {}}

grid $lpc.xp -row 1 -column 0 -sticky news
grid $lpc.yp -row 1 -column 1 -sticky news
grid $lpc.xn -row 1 -column 2 -sticky news
grid $lpc.yn -row 1 -column 3 -sticky news

xth_me_bind_entry_focus_return "$lpc.xp $lpc.yp" {xth_me_cmds_update {}}
xth_me_bind_entry_focus_return "$lpc.xn $lpc.yn" {xth_me_cmds_update {}}
xth_me_bind_entry_focusin "$lpc.posx $lpc.posy $lpc.xp $lpc.yp $lpc.xn $lpc.yn"

grid $lpc.cbp -row 2 -column 0 -sticky news
grid $lpc.cbs -row 2 -column 1 -columnspan 2 -sticky news
grid $lpc.cbn -row 2 -column 3 -sticky news

grid $lpc.rotc -row 3 -column 0 -columnspan 2 -sticky news
grid $lpc.rot -row 3 -column 2 -columnspan 2 -sticky news

grid $lpc.lszc -row 4 -column 0 -columnspan 2 -sticky news
grid $lpc.lsz -row 4 -column 2 -columnspan 2 -sticky news

## DISABLED
#grid $lpc.rszc -row 5 -column 0 -columnspan 2 -sticky news
#grid $lpc.rsz -row 5 -column 2 -columnspan 2 -sticky news

grid $lpc.optl -row 6 -column 0 -columnspan 2 -sticky news
grid $lpc.upd -row 6 -column 2 -columnspan 2 -sticky news

grid $txb -row 7 -column 0 -columnspan 4 -sticky news

xth_me_bind_entry_focusin "$lpc.rot $lpc.lsz $lpc.rsz"
xth_me_bind_entry_return "$lpc.rot $lpc.lsz $lpc.rsz" {xth_me_cmds_update {}}





# area control
xth_about_status [mc "loading area module ..."]

set lnc $xth(ctrl,me,ac)

ComboBox $lnc.theme -values $xth(me,themes,showlist) -autocomplete 1 -editable 0 \
  -font $xth(gui,lfont) -height $xth(gui,me,typelistwidth) -state disabled -width 4 \
  -modifycmd "xth_me_set_theme \[$ptc.theme getvalue\]" -fg blue \
  -textvariable xth(ctrl,me,acttheme)
xth_status_bar me $lnc.theme [mc "Actual symbol theme."]
ComboBox $lnc.themetype -values $xth(me,themes,all-symbols,area,showlist) -autocomplete 1 -editable 0 \
  -font $xth(gui,lfont) -height $xth(gui,me,typelistwidth) -state disabled -width 4 -fg blue \
  -textvariable xth(ctrl,me,ac,themetype) \
  -modifycmd xth_me_area_themetype_modified
xth_status_bar me $lnc.themetype [mc "Area type."]
Separator $lnc.s1

Label $lnc.typl -text [mc "type"] -anchor e -font $xth(gui,lfont) -state disabled
xth_status_bar me $lnc.typl [mc "Area type."]
ComboBox $lnc.typ -values $xth(area_types) -autocomplete 1 \
  -font $xth(gui,lfont) -height $xth(gui,me,typelistwidth) -state disabled -width 4 \
  -textvariable xth(ctrl,me,ac,type) -modifycmd {xth_me_cmds_update {}} \
  -command {xth_me_cmds_update {}}
xth_status_bar me $lnc.typ [mc "Area type."] 
xth_me_bind_typecbx_hint $lnc.typ area

Label $lnc.optl -text [mc "options"] -anchor e -font $xth(gui,lfont) -state disabled
xth_status_bar me $lnc.optl [mc "Other area options."]
Entry $lnc.opt -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,ac,opts)
xth_status_bar me $lnc.opt [mc "Other area options."] 

set plf $lnc.ll
frame $plf
listbox $plf.l -height 4 -selectmode single -takefocus 0 \
  -yscrollcommand "xth_scroll $plf.sv" \
  -xscrollcommand "xth_scroll $plf.sh" \
  -font $xth(gui,lfont) -exportselection no \
  -selectborderwidth 0
scrollbar $plf.sv -orient vert  -command "$plf.l yview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
scrollbar $plf.sh -orient horiz  -command "$plf.l xview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
bind $plf.l <> {xth_me_cmds_show_current_area}
bind $plf.l  "focus $plf.l"

Button $lnc.ins -text [mc "Select lines"] -anchor center -font $xth(gui,lfont) \
  -state disabled -width 10 -command {xth_me_cmds_start_area_insert 1}
xth_status_bar me $lnc.ins [mc "Switch to insert line into area mode."]
Button $lnc.del -text [mc "Delete"] -anchor center -font $xth(gui,lfont) \
  -state disabled -width 10 -command {xth_me_cmds_delete_area_line {} {}}
xth_status_bar me $lnc.del [mc "Delete ID from area."]

Button $lnc.insid -text [mc "Insert ID"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command {xth_me_cmds_insert_area_line $xth(ctrl,me,ac,insid) {} {}} -width 10
xth_status_bar me $lnc.insid [mc "Insert given id."]
Entry $lnc.inside -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,ac,insid)
xth_status_bar me $lnc.inside [mc "ID to insert."] 

Button $lnc.upd -text [mc "Update"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command {xth_me_cmds_update {}} -width 10
xth_status_bar me $lnc.upd [mc "Click this button to apply changes you made to area."]
Button $lnc.shw -text [mc "Show"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command {xth_me_cmds_show_current_area} -width 10
xth_status_bar me $lnc.shw [mc "Show area border lines."]

grid columnconf $plf 0 -weight 1
grid rowconf $plf 0 -weight 1
grid $plf.l -column 0 -row 0 -sticky news
xth_scroll_showcmd $plf.sv "grid $plf.sv -column 1 -row 0 -sticky news"
xth_scroll_hidecmd $plf.sv "grid forget $plf.sv"
xth_scroll_showcmd $plf.sh "grid $plf.sh -column 0 -row 1 -sticky news"
xth_scroll_hidecmd $plf.sh "grid forget $plf.sh"
xth_status_bar me $plf [mc "Select line in area."]

grid columnconf $lnc 0 -weight 1
grid columnconf $lnc 1 -weight 1
set crow 0
grid $lnc.theme -row $crow -column 0 -sticky news -padx 2 -pady 2
grid $lnc.themetype -row $crow -column 1 -sticky news -padx 2 -pady 2
incr crow
grid $lnc.typl -row $crow -column 0 -sticky news
grid $lnc.typ -row $crow -column 1 -sticky news -padx 2 -pady 1
incr crow
grid $lnc.s1 -row $crow -column 0 -columnspan 2 -sticky news -padx 2 -pady 2
incr crow
grid $lnc.optl -row $crow -column 0 -sticky news
grid $lnc.opt -row $crow -column 1 -sticky news -padx 2 -pady 1
incr crow
grid $lnc.shw -row $crow -column 0 -sticky news
grid $lnc.upd -row $crow -column 1 -sticky news
incr crow
grid $plf -row $crow -column 0 -columnspan 2 -sticky news
incr crow
grid $lnc.ins -row $crow -column 0 -sticky news
grid $lnc.del -row $crow -column 1 -sticky news
incr crow
grid $lnc.insid -row $crow -column 0 -sticky news
grid $lnc.inside -row $crow -column 1 -sticky news
incr crow
xth_me_bind_entry_return "$lnc.opt" {xth_me_cmds_update {}}
xth_me_bind_entry_focusin "$lnc.opt"


# main menu
xth_about_status [mc "loading main menu ..."]


$xth(me,menu,file) add command -label [mc "New"] -command xth_me_create_file \
  -font $xth(gui,lfont) -underline 0 -state normal
$xth(me,menu,file) add command -label [mc "Open"] -underline 0 \
  -accelerator "$xth(gui,controlk)-o" -state normal \
  -font $xth(gui,lfont) -command {
		        set xth(gui,openxp) 0
		        xth_me_open_file 1 {} 1
	}
$xth(me,menu,file) add command -label [mc "Open (no pics)"] -underline 10 \
  -state normal -font $xth(gui,lfont) -command {
	    set xth(gui,openxp) 1
		        xth_me_open_file 1 {} 1
		        set xth(gui,openxp) 0
	}
$xth(me,menu,file) add command -label [mc "Save"] -underline 0 \
  -accelerator "$xth(gui,controlk)-s" -state disabled \
  -font $xth(gui,lfont) -command {xth_me_save_file 0}
$xth(me,menu,file) add command -label [mc "Save as"] -underline 5 \
  -font $xth(gui,lfont) -command {xth_me_save_file 1} -state disabled 
$xth(me,menu,file) add checkbutton -label [mc "Auto save"] -underline 1 \
  -variable xth(gui,auto_save) -font $xth(gui,lfont) \
  -state disabled -command xth_app_autosave_schedule
$xth(me,menu,file) add command -label [mc "Close"] -underline 0 \
  -accelerator "$xth(gui,controlk)-w"  -state disabled \
  -font $xth(gui,lfont) \
  -command xth_me_close_file

$xth(me,menu,file) add separator
$xth(me,menu,file) add command -label [mc "Import"] -underline 0 \
  -state disabled -font $xth(gui,lfont) -command {xth_me_import_file {} {}}

set xth(me,menu,edit) $xth(me,menu).edit
menu $xth(me,menu,edit) -tearoff 0
menu $xth(me,menu,edit).ins -tearoff 0
bind $xth(me,menu,edit)  {xth_me_cmds_update {}}
$xth(me,menu) add cascade -label [mc "Edit"] -state disabled \
  -font $xth(gui,lfont) -menu $xth(me,menu,edit) -underline 0
$xth(me,menu,edit) add command -label [mc "Undo"] -font $xth(gui,lfont) \
  -underline 0 -accelerator "$xth(gui,controlk)-z" -state disabled \
  -command xth_me_unredo_undo
$xth(me,menu,edit) add command -label [mc "Redo"] -font $xth(gui,lfont) \
  -underline 0 -accelerator "$xth(gui,controlk)-y" -state disabled \
  -command xth_me_unredo_redo
$xth(me,menu,edit) add separator
$xth(me,menu,edit) add command -label [mc "Cut"] -font $xth(gui,lfont) \
  -accelerator "$xth(gui,controlk)-x" -command "xth_app_clipboard cut"
$xth(me,menu,edit) add command -label [mc "Copy"] -font $xth(gui,lfont) \
  -accelerator "$xth(gui,controlk)-c" -command "xth_app_clipboard copy"
$xth(me,menu,edit) add command -label [mc "Paste"] -font $xth(gui,lfont) \
  -accelerator "$xth(gui,controlk)-v" -command "xth_app_clipboard paste"
$xth(me,menu,edit) add separator
$xth(me,menu,edit) add command -label [mc "Select"] \
  -accelerator "Esc" -underline 0 -font $xth(gui,lfont) -command {xth_me_cmds_set_mode 0}
$xth(me,menu,edit) add cascade -label [mc "Insert ..."] \
  -accelerator "$xth(gui,controlk)-i" -menu $xth(me,menu,edit).ins -underline 0 -font $xth(gui,lfont)
$xth(me,menu,edit).ins add command -label [mc "point"] \
  -accelerator "$xth(gui,controlk)-p" -underline 0 -font $xth(gui,lfont) -command {xth_me_cmds_set_mode 1}
$xth(me,menu,edit).ins add command -label [mc "line"] \
    -accelerator "$xth(gui,controlk)-l" -underline 0 -font $xth(gui,lfont) -command {
  xth_me_cmds_create_line {} 1 "" "" ""
  xth_ctrl_scroll_to me line
  xth_ctrl_maximize me line
  xth_ctrl_maximize me linept
}

$xth(me,menu,edit).ins add command -label [mc "area"] \
  -accelerator "$xth(gui,controlk)-a" -font $xth(gui,lfont) -underline 0 -command {
  xth_me_cmds_create_area {} 1 "" "" ""
  xth_ctrl_scroll_to me ac
  xth_ctrl_maximize me ac
}

$xth(me,menu,edit).ins add command -label [mc "scrap"] \
  -accelerator "$xth(gui,controlk)-r" -font $xth(gui,lfont) -underline 0 -command {
  xth_me_cmds_create_scrap {} 1 "" ""
  xth_ctrl_scroll_to me scrap
  xth_ctrl_maximize me scrap
}

$xth(me,menu,edit).ins add command -label [mc "text"] -font $xth(gui,lfont) -underline 0 -command {
  xth_me_cmds_create_text {} 1 "\n" "1.0"
  xth_ctrl_scroll_to me text
  xth_ctrl_maximize me text
  focus $xth(ctrl,me,text).txt
}

$xth(me,menu,edit) add command -label [mc "Delete"] \
  -accelerator "$xth(gui,controlk)-d" -underline 0 -font $xth(gui,lfont) -command {xth_me_cmds_delete {}}
$xth(me,menu,edit) add separator
$xth(me,menu,edit) add cascade -label [mc "Zoom 100 %"] -font $xth(gui,lfont) \
  -underline 0 -menu $xth(ctrl,me,area).zb.m
$xth(me,menu,edit) add command -label [mc "Auto adjust area"] \
  -font $xth(gui,lfont) -command xth_me_area_auto_adjust
$xth(me,menu,edit) add command -label [mc "Insert image"] \
  -font $xth(gui,lfont) \
  -command {
  set nimgs [llength $xth(me,imgs,xlist)]
  xth_me_image_newpos
  xth_me_image_insert $xth(ctrl,me,images,newposx) $xth(ctrl,me,images,newposy) {} 0 {}
  set nnimgs [llength $xth(me,imgs,xlist)]
  if {$nnimgs > $nimgs} {
    xth_me_area_auto_adjust
  }
}
set xth(me,menu,edit,undo) [$xth(me,menu,edit) index [mc "Undo"]]
set xth(me,menu,edit,redo) [$xth(me,menu,edit) index [mc "Redo"]]
set xth(me,menu,edit,zoom) [$xth(me,menu,edit) index [mc "Zoom 100 %"]]


# create mouse mode bar and progess bar
set barfm $xth(gui,me).sf.barfm
frame $barfm
pack $barfm -side left
grid columnconf $barfm 0 -weight 1
grid rowconf $barfm 0 -weight 1

set xth(me,mbar) $barfm.mbar
Label $xth(me,mbar) -text "" -width 20 -relief sunken -font $xth(gui,lfont) \
  -anchor center -state disabled
grid $xth(me,mbar) -column 0 -row 0 -sticky news
set xth(me,mbar,bg) [$xth(me,mbar) cget -bg]
set xth(me,mbar,fg) [$xth(me,mbar) cget -fg]
xth_status_bar me $xth(me,mbar) [mc "Mouse mode."]

set xth(me,progbar) $barfm.pbar
set xth(me,progbar,value) 0
ProgressBar $xth(me,progbar) -type normal -width 100 -variable xth(me,progbar,value) -fg darkBlue

proc xth_me_progbar_show {max} {
  global xth
  set pbw [winfo width $xth(me,mbar)]
  set pbh [winfo height $xth(me,mbar)]
  grid forget $xth(me,mbar)
  grid $xth(me,progbar) -column 0 -row 0 -sticky news
  $xth(me,progbar) configure -maximum $max -width $pbw -height $pbh
  update idletasks
}

proc xth_me_progbar_hide {} {
  global xth
  grid forget $xth(me,progbar)
  grid $xth(me,mbar) -column 0 -row 0 -sticky news
  update idletasks
}

proc xth_me_progbar_prog {val} {
  global xth
  set xth(me,progbar,value) $val
  update idletasks
}

# create position bar
set xth(me,pbar) $xth(gui,me).sf.pbar
Label $xth(me,pbar) -text "" -width 15 -relief sunken -font $xth(gui,lfont) \
  -anchor center -state disabled
pack $xth(me,pbar) -side left
xth_status_bar me $xth(me,pbar) [mc "Current mouse position."]

xth_ctrl_minimize me cmds
xth_ctrl_minimize me prev
xth_ctrl_minimize me ss
xth_ctrl_minimize me point
xth_ctrl_minimize me line
xth_ctrl_minimize me linept
xth_ctrl_minimize me ac
xth_ctrl_minimize me scrap
xth_ctrl_minimize me text
xth_ctrl_minimize me area
xth_ctrl_minimize me images
    
set xth(ctrl,me,area,xmin) ""
set xth(ctrl,me,area,ymin) ""
set xth(ctrl,me,area,xmax) ""
set xth(ctrl,me,area,ymax) ""

xth_me_set_theme 0
xth_about_status [mc "loading line procs ..."]
xth_status_bar_status me [mc "Map editor is not active. To activate it, open existing file or create new one."]

therion/xtherion/me_cmds.tcl0000644000076400010400000024446611574125374017271 0ustar  userAdministrators##
## me_cmds.tcl --
##
##     Map editor command processing.
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------


proc xth_me_set_theme {x} {
  global xth
  set xth(me,acttheme) $x
  set at [lindex $xth(me,themes,list) $x]
  $xth(ctrl,me,point).typ configure -values $xth(me,themes,$at,point,list)
  $xth(ctrl,me,line).typ configure -values $xth(me,themes,$at,line,list)
  $xth(ctrl,me,ac).typ configure -values $xth(me,themes,$at,area,list)
  $xth(ctrl,me,point).themetype configure -values $xth(me,themes,$at,point,showlist)
  $xth(ctrl,me,line).themetype configure -values $xth(me,themes,$at,line,showlist)
  $xth(ctrl,me,ac).themetype configure -values $xth(me,themes,$at,area,showlist)
  if {[info exists xth(me,cmds,selid)]} {
    xth_me_cmds_update {}
  }
}


proc xth_me_point_themetype_modified {} {
  global xth
  set tx [$xth(ctrl,me,point).themetype getvalue]
  set at [lindex $xth(me,themes,list) $xth(me,acttheme)]
  if {$tx > -1} {
    set xth(ctrl,me,point,type) [lindex $xth(me,themes,$at,point,hidelist) $tx]
    xth_me_cmds_update {}
  }
}

proc xth_me_line_themetype_modified {} {
  global xth
  set tx [$xth(ctrl,me,line).themetype getvalue]
  set at [lindex $xth(me,themes,list) $xth(me,acttheme)]
  if {$tx > -1} {
    set xth(ctrl,me,line,type) [lindex $xth(me,themes,$at,line,hidelist) $tx]
    xth_me_cmds_update {}
  }
}

proc xth_me_area_themetype_modified {} {
  global xth
  set tx [$xth(ctrl,me,ac).themetype getvalue]
  set at [lindex $xth(me,themes,list) $xth(me,acttheme)]
  if {$tx > -1} {
    set xth(ctrl,me,ac,type) [lindex $xth(me,themes,$at,area,hidelist) $tx]
    xth_me_cmds_update {}
  }
}

proc xth_me_cmds_get_line_option {ln opt} {
  set rxl [list [list "\\s*\\-$opt\\s+\\\[(\[^\\\]\]*)\\\]" "\["]\
    [list "\\s*\\-$opt\\s+\\\"((\\\"\\\"|\[^\\\"])+)\\\"" "\""]\
    [list "\\s*\\-$opt\\s+(\\S+)" {}]]
  set rln $ln
  set val {}
  set sep {}
  set res 0
  foreach rx $rxl {
    if {[regexp [lindex $rx 0] $ln dump val]} {
      regsub [lindex $rx 0] $ln {} rln
      set sep [lindex $rx 1]
      set res 1
      break
    }
  }
  return [list $val $rln $res]
}


proc xth_me_cmds_get_sketch_option {ln} {
  set rxl [list [list "\\s*\\-sketch\\s+\\\[((\[^\\\]\]*))\\\]\\s+(\\S+)\\s+(\\S+)" "\[" "\]"]\
    [list "\\s*\\-sketch\\s+\\\"((\\\"\\\"|\[^\\\"])+)\\\"\\s+(\\S+)\\s+(\\S+)" "\"" "\""]\
    [list "\\s*\\-sketch\\s+((\\S+))\\s+(\\S+)\\s+(\\S+)" {} {}]]
  set rln $ln
  set val {}
  set sep {}
  set res 0
  foreach rx $rxl {
    if {[regexp [lindex $rx 0] $ln dump v1 dum v2 v3]} {
      regsub [lindex $rx 0] $ln {} rln
      set val "[lindex $rx 1]$v1[lindex $rx 2] $v2 $v3"
      set res 1
      break
    }
  }
  return [list $val $rln $res]
}


proc xth_me_cmds_set_action {act} {

  global xth
  
  set xth(me,cmds,action) $act
  switch $act {
    0 {
      $xth(ctrl,me,cmds).cc.go configure -text [mc "Insert line"]
    }
    1 {
      $xth(ctrl,me,cmds).cc.go configure -text [mc "Insert point"]
    }
    2 {
      $xth(ctrl,me,cmds).cc.go configure -text [mc "Insert scrap"]
    }
    3 {
      $xth(ctrl,me,cmds).cc.go configure -text [mc "Insert text"]
    }
    4 {
      $xth(ctrl,me,cmds).cc.go configure -text [mc "Delete"]
    }
    5 {
      $xth(ctrl,me,cmds).cc.go configure -text [mc "Insert area"]
    }
  }

  update idletasks

}


proc xth_me_cmds_update_buttons {} {

  global xth
  set ccbox $xth(ctrl,me,cmds).cc
  set clbox $xth(ctrl,me,cmds).cl
  set ncmd [expr [llength $xth(me,cmds,xlist)] - 1]
  if {$xth(me,fopen)} {
    $ccbox.cfg configure -state normal
    $clbox.l configure -takefocus 1
    $ccbox.go configure -state normal
    $xth(me,mbar) configure -state normal
    if {$ncmd > 0} {
      $ccbox.sel configure -state normal
      $xth(me,menu,edit) entryconfigure [mc "Select"] -state normal
      $xth(ctrl,me,prev).upd  configure -state normal

      $xth(ctrl,me,ss).xl configure -state normal
      $xth(ctrl,me,ss).xe configure -state normal
      $xth(ctrl,me,ss).cs configure -state normal
      $xth(ctrl,me,ss).rx configure -state normal
      $xth(ctrl,me,ss).sn configure -state normal
      $xth(ctrl,me,ss).sa configure -state normal
      $xth(ctrl,me,ss).sf configure -state normal
      $xth(ctrl,me,ss).ca configure -state normal
      
      if {$ncmd > 1} {
	$ccbox.mu configure -state normal
	$ccbox.md configure -state normal
	$ccbox.mt configure -state normal
	$ccbox.tt configure -state normal
     } else {
	$ccbox.mu configure -state disabled
	$ccbox.md configure -state disabled
	$ccbox.mt configure -state disabled
	$ccbox.tt configure -state disabled
      }
      $ccbox.cfg.m entryconfigure [mc "Delete"] -state normal
      $xth(me,menu,edit) entryconfigure [mc "Delete"] -state normal
    } else {
      $xth(ctrl,me,prev).upd  configure -state disabled
      $ccbox.sel configure -state disabled
      $xth(me,menu,edit) entryconfigure [mc "Select"] -state disabled
      $ccbox.cfg.m entryconfigure [mc "Delete"] -state disabled
      $xth(me,menu,edit) entryconfigure [mc "Delete"] -state disabled
      $ccbox.mu configure -state disabled
      $ccbox.md configure -state disabled
      $ccbox.mt configure -state disabled
      $ccbox.tt configure -state disabled
      if {$xth(me,cmds,action) == 4} {
	xth_me_cmds_set_action 3
      }

      $xth(ctrl,me,ss).xl configure -state disabled
      $xth(ctrl,me,ss).xe configure -state disabled
      $xth(ctrl,me,ss).cs configure -state disabled
      $xth(ctrl,me,ss).rx configure -state disabled
      $xth(ctrl,me,ss).sn configure -state disabled
      $xth(ctrl,me,ss).sa configure -state disabled
      $xth(ctrl,me,ss).sf configure -state disabled
      $xth(ctrl,me,ss).ca configure -state disabled

    }
  } else {
    xth_me_cmds_set_action 3
    $ccbox.go configure -state disabled
    $ccbox.cfg configure -state disabled
    $clbox.l configure -takefocus 0
    $xth(me,mbar) configure -text "" -state disabled -bg $xth(me,mbar,bg) -fg $xth(me,mbar,fg)
    $ccbox.sel configure -state disabled
    $ccbox.mu configure -state disabled
    $ccbox.md configure -state disabled
    $ccbox.mt configure -state disabled
    $ccbox.tt configure -state disabled

    $xth(ctrl,me,ss).xl configure -state disabled
    $xth(ctrl,me,ss).xe configure -state disabled
    $xth(ctrl,me,ss).cs configure -state disabled
    $xth(ctrl,me,ss).rx configure -state disabled
    $xth(ctrl,me,ss).sn configure -state disabled
    $xth(ctrl,me,ss).sa configure -state disabled
    $xth(ctrl,me,ss).sf configure -state disabled
    $xth(ctrl,me,ss).ca configure -state disabled

  }
  
  update idletasks
  
}


# typy prikazov
# 0 eof
# 1 text
# 2 point
# 3 line
# 4 scrap
# 5 endscrap
# 6 area

proc xth_me_cmds_create {typ id ix} {
  global xth
  if {[string length $id] < 1} {
    set id $xth(me,cmds,cmdln)
    incr xth(me,cmds,cmdln)
  }
  set xth(me,cmds,$id,listix) -1
  set xth(me,cmds,$id,ct) $typ
  set xth(me,cmds,$id,type) {}
  set xth(me,cmds,$id,name) {}
  set xth(me,cmds,$id,data) {}
  set xth(me,cmds,$id,sbar) {}
  set ix [lsearch $xth(me,cmds,xlist) $xth(me,cmds,selid)]

	# ak sme v normalnom mode a na scrape a chceme vlozit
	# point, line, area alebo scrap
  if {$xth(me,unredook)} {
		set ccmdid $xth(me,cmds,selid)
		if {($xth(me,cmds,$ccmdid,ct) == 4) && (($typ == 2) || ($typ == 3) || ($typ == 6))} {
		    incr ix;
		}
	}
	
  set xth(me,cmds,list) [linsert $xth(me,cmds,list) $ix {}]
  set xth(me,cmds,xlist) [linsert $xth(me,cmds,xlist) $ix $id]
  if {$ix != -1} {
    xth_me_cmds_update_list_ft $ix {}
  }
  xth_me_cmds_update_buttons
  return $id
  
}


proc xth_me_cmds_update_list_ft {f t} {
  global xth
  if {[string length $f] == 0} {
    set f 0
  }
  if {[string length $t] == 0} {
    set t [llength $xth(me,cmds,xlist)]
  }
  for {set ii $f} {$ii < $t} {incr ii} {
    xth_me_cmds_update_list [lindex $xth(me,cmds,xlist) $ii]
  }
}

proc xth_me_cmds_update_list {id} {
  global xth
  set ix [lsearch $xth(me,cmds,xlist) $id]
  switch $xth(me,cmds,$id,ct) {
    0 {
      set cstr "end of file"
    }
    1 {
      set cstr "$ix: text"
    }
    2 {
      set cstr "$ix: point"
    }
    3 {
      set cstr "$ix: line"
    }
    4 {
      set cstr "$ix: scrap"
    }
    5 {
      set cstr "$ix: endscrap"
    }
    6 {
      set cstr "$ix: area"
    }
  }
  if {[string length $xth(me,cmds,$id,type)] > 0} {
    set cstr "$cstr $xth(me,cmds,$id,type)"
  }
  if {[string length $xth(me,cmds,$id,name)] > 0} {
    set cstr "$cstr - $xth(me,cmds,$id,name)"
  }
  set xth(me,cmds,list) [lreplace $xth(me,cmds,list) $ix $ix $cstr]
  set xth(me,cmds,$id,listix) $ix
  update idletasks
}


proc xth_me_cmds_draw {id} {
  global xth
  switch $xth(me,cmds,$id,ct) {
    2 {
      xth_me_cmds_draw_point $id
    }
    3 {
      xth_me_cmds_draw_line $id
    }
  }
}


proc xth_me_cmds_erase {id} {
  global xth
  switch $xth(me,cmds,$id,ct) {
    2 {
      $xth(me,can) delete pt$id
    }
    3 {
      $xth(me,can) delete ln$id
    }
  }
}


proc xth_me_cmds_undelete {id pid ix} {
  global xth
  xth_me_cmds_select 0
  set xth(me,cmds,list) [linsert $xth(me,cmds,list) $ix {}]
  set xth(me,cmds,xlist) [linsert $xth(me,cmds,xlist) $ix $id]
  xth_me_cmds_update_list_ft $ix {}
  #xth_me_cmds_update_list $id
  xth_me_cmds_draw $id
  xth_me_cmds_select "$id $pid"
  xth_me_cmds_update_buttons
}

proc xth_me_cmds_delete {id} {
  global xth
  if {[string length $id] < 1} {
    set id $xth(me,cmds,selid)
  }
  if {$xth(me,cmds,$id,ct) > 0} {
    set oldselid $xth(me,cmds,selid)
    set oldselpid $xth(me,cmds,selpid)
    xth_me_cmds_select 0
    set ix [lsearch $xth(me,cmds,xlist) $id]
    set xth(me,cmds,list) [lreplace $xth(me,cmds,list) $ix $ix]
    set xth(me,cmds,xlist) [lreplace $xth(me,cmds,xlist) $ix $ix]
    xth_me_cmds_update_list_ft $ix {}
    xth_me_cmds_erase $id
    if {$oldselid == $id} {
      set nwid [lindex $xth(me,cmds,xlist) $ix]
    } else {
      set nwid $oldselid
    }
    xth_me_cmds_select $nwid
    xth_me_unredo_action [mc "deleting"] \
      "xth_me_cmds_undelete $id $oldselpid $ix" \
      "xth_me_cmds_delete $id"
    xth_me_cmds_update_buttons
  }
}


proc xth_me_cmds_update {id} {
  global xth

  if {[llength $id] < 1} {
    update idletasks
    set id $xth(me,cmds,selid)
    set pid $xth(me,cmds,selpid)
  } elseif {[llength $id] < 2} {
    set id [lindex $id 0]
    set pid $xth(me,cmds,selpid)
  } else {
    set id [lindex $id 0]
    set pid [lindex $id 1]
  }
  
  if {[string length $id] < 1} {
    set id $xth(me,cmds,selid)
  }
  switch $xth(me,cmds,$id,ct) {
    1 {
      xth_me_cmds_update_text $id [$xth(ctrl,me,text).txt get 1.0 end] \
	[$xth(ctrl,me,text).txt index insert]
    }
    2 {
      xth_me_cmds_update_point $id $xth(ctrl,me,point,x) \
	$xth(ctrl,me,point,y) $xth(ctrl,me,point,type) \
	$xth(ctrl,me,point,name) $xth(ctrl,me,point,opts) \
	$xth(ctrl,me,point,rot) $xth(ctrl,me,point,xs) \
	$xth(ctrl,me,point,ys)
      xth_me_cmds_update_point_vars $id
    }
    3 {
      xth_me_cmds_update_line $id $pid $xth(ctrl,me,line,type) \
	$xth(ctrl,me,line,name) $xth(ctrl,me,line,opts) \
	$xth(ctrl,me,line,reverse) $xth(ctrl,me,linept,x) \
	$xth(ctrl,me,linept,y) $xth(ctrl,me,linept,xp) \
	$xth(ctrl,me,linept,yp) $xth(ctrl,me,linept,xn) \
	$xth(ctrl,me,linept,yn) $xth(ctrl,me,linept,smooth) \
	$xth(ctrl,me,linept,rot) $xth(ctrl,me,linept,rs) \
	$xth(ctrl,me,linept,ls) \
	[$xth(ctrl,me,linept).oe.txt get 1.0 end] \
	[$xth(ctrl,me,linept).oe.txt index insert]
      xth_me_cmds_update_line_vars $id $pid
    }    
    4 {
      xth_me_cmds_update_scrap $id $xth(ctrl,me,scrap,name) \
	$xth(ctrl,me,scrap,projection) $xth(ctrl,me,scrap,options) \
	 [list $xth(ctrl,me,scrap,px1) $xth(ctrl,me,scrap,py1) \
	  $xth(ctrl,me,scrap,px2) $xth(ctrl,me,scrap,py2) \
	  $xth(ctrl,me,scrap,rx1) $xth(ctrl,me,scrap,ry1) \
	  $xth(ctrl,me,scrap,rx2) $xth(ctrl,me,scrap,ry2) \
	  $xth(ctrl,me,scrap,units)]
      xth_me_cmds_update_scrap_vars $id
    }
    6 {
      xth_me_cmds_update_area $id $xth(ctrl,me,ac,type) \
	$xth(ctrl,me,ac,opts)
      xth_me_cmds_update_area_vars $id
    }
  }
  xth_me_cmds_update_list $id
  xth_me_prev_cmd $xth(me,cmds,$id,data)
  update idletasks
}

proc xth_me_cmds_update_text_ctrl {id} {

  global xth
  if {[string length $id] > 0} {
    $xth(ctrl,me,text).txt configure -state normal
    $xth(ctrl,me,text).txt delete 1.0 end
    $xth(ctrl,me,text).txt insert 1.0 $xth(me,cmds,$id,data)
    $xth(ctrl,me,text).txt mark set insert $xth(me,cmds,$id,cpos)
    $xth(ctrl,me,text).txt see $xth(me,cmds,$id,cpos)
    $xth(ctrl,me,text).upd configure -state normal
    xth_me_prev_cmd $xth(me,cmds,$id,data)
  } else {
    $xth(ctrl,me,text).txt configure -state normal
    $xth(ctrl,me,text).txt delete 1.0 end
    $xth(ctrl,me,text).txt see 1.0
    $xth(ctrl,me,text).txt configure -state disabled
    $xth(ctrl,me,text).upd configure -state disabled
  }
  
}



proc xth_me_cmds_unselect {id} {
  
  global xth
  if {[string length $id] < 1} {
    set id $xth(me,cmds,selid)
  }
  if {$xth(me,unredook)} {
    xth_me_cmds_update $id
  }
  switch $xth(me,cmds,$id,ct) {
    1 {xth_me_cmds_update_text_ctrl {}}
    2 {xth_me_cmds_update_point_ctrl {}}
    3 {
      xth_me_cmds_update_line_ctrl {}
      xth_me_cmds_update_linept_ctrl {} 0
      set xth(me,cmds,selpid) 0
      if {$xth(me,cmds,mode) == 2} {
	xth_me_cmds_set_mode 0
      }
    }
    4 {xth_me_cmds_update_scrap_ctrl {}}
    6 {
      xth_me_cmds_update_area_ctrl {}
      if {$xth(me,cmds,mode) == 3} {
	xth_me_cmds_set_mode 0
      }
    }
  }
  update idletasks
  
}


proc xth_me_cmds_select {id} {

  global xth
  
  if {!$xth(me,fopen)} {
    return
  }
  set center_to 0
  update idletasks
  if {[llength $id] < 1} {
    set id [lindex $xth(me,cmds,xlist) [lindex [$xth(ctrl,me,cmds).cl.l curselection] 0]]
    if {$xth(me,cmds,$id,ct) == 2} {
      set center_to 1
    }
    set pid -1
  } elseif {[llength $id] < 2} {
    set id [lindex $id 0]
    set pid -1
  } else {
    set pid [lindex $id 1]
    set id [lindex $id 0]
  }  

  if {$pid == -1} {
    set pid 0
    if {($xth(me,cmds,$id,ct) == 3) && ([llength $xth(me,cmds,$id,xplist)] > 1)} {
      set center_to [lindex $xth(me,cmds,$id,xplist) [expr [llength $xth(me,cmds,$id,xplist)] - 2]]
    }
  }
  
  set newx [lsearch $xth(me,cmds,xlist) $id]
  if {$xth(me,cmds,selid) == $id} {
    $xth(ctrl,me,cmds).cl.l selection clear 0 end  
    $xth(ctrl,me,cmds).cl.l selection set $newx $newx
    $xth(ctrl,me,cmds).cl.l see $newx
    if {($xth(me,cmds,$id,ct) == 3) && ($pid != $xth(me,cmds,selpid))} {
      xth_me_cmds_select_linept $id $pid
    }
    if {$xth(me,unredook)} {
      return
    }
  }
  if {$xth(me,cmds,$xth(me,cmds,selid),ct) != $xth(me,cmds,$id,ct)} {
    if {![string equal $xth(ctrl,me,cmds).cl.l [focus -lastfor $xth(gui,main)]]} {
      focus $xth(gui,main)
    }
  }
  
  if {$xth(me,cmds,selid) != $id} {
    xth_me_cmds_unselect $xth(me,cmds,selid)
  }

  set xth(me,cmds,selid) $id
  $xth(ctrl,me,cmds).cl.l selection clear 0 end  
  $xth(ctrl,me,cmds).cl.l selection set $newx $newx  
  $xth(ctrl,me,cmds).cl.l see $newx
  xth_me_cmds_set_colors  
  switch $xth(me,cmds,$id,ct) {
    1 {xth_me_cmds_update_text_ctrl $id}
    2 {xth_me_cmds_update_point_ctrl $id}
    3 {
      xth_me_cmds_update_line_ctrl $id
      xth_me_cmds_select_linept $id $pid
      $xth(me,can) itemconfigure lnln$id -fill $xth(gui,me,activefill)
      $xth(me,can) itemconfigure lnpt$id -fill $xth(gui,me,activefill)
    }
    4 {xth_me_cmds_update_scrap_ctrl $id}
    6 {
      xth_me_cmds_update_area_ctrl $id
      xth_me_cmds_show_current_area
    }
    default {xth_me_prev_cmd $xth(me,cmds,$id,data)}
  }
  
  if {$center_to > 0} {
    switch $xth(me,cmds,$id,ct) {
      2 { xth_me_center_to [list $xth(me,cmds,$id,x) $xth(me,cmds,$id,y)]
	}
      3 { xth_me_center_to [list \
	  $xth(me,cmds,$xth(me,cmds,selid),$center_to,x) \
	  $xth(me,cmds,$xth(me,cmds,selid),$center_to,y)]
	}
    }
  }
  update idletasks
}

proc xth_me_cmds_set_move_to_list {} {
  global xth
  # prejde vsetky prikazy a najde scrapy a endscrapy
  set xl [llength $xth(me,cmds,xlist)]
  set vls {}
  set lscrap {}
  for {set ii 0} {$ii < $xl} {incr ii} {
    set id [lindex $xth(me,cmds,xlist) $ii]
    switch $xth(me,cmds,$id,ct) {
      4 {
	set lscrap $xth(me,cmds,$id,name)
	lappend vls "$lscrap begin \[[expr $ii + 1]\]"
      }
      5 {
	lappend vls "$lscrap end \[$ii\]"
      }
    }
  }
  $xth(ctrl,me,cmds).cc.tt configure -values $vls
  update idletasks
}

proc xth_me_cmds_set_move_to {} {
  global xth
  set lnum {}
  regexp {\[(\d+)\]} $xth(ctrl,me,cmds,moveto) dum lnum
  set xth(ctrl,me,cmds,moveto) $lnum
  update idletasks
}


proc xth_me_cmds_move_to {id dx} {
  global xth
  xth_me_cmds_update {}
  if {[string length $dx] < 1} {
    set dx $xth(ctrl,me,cmds,moveto)
  }
  set dx [regexp -inline {\d*} $dx]
  if {[string length $dx] < 1} {
    return
  }
  if {[string length $id] < 1} {
    set id $xth(me,cmds,selid)
  }
  set sx [lsearch $xth(me,cmds,xlist) $id]
  set maxsdx [expr [llength $xth(me,cmds,xlist)] - 2]
  if {($dx == $sx) || ($sx > $maxsdx) || ($dx > $maxsdx)} {
    return;
  }

  # prehodi  
  set xth(me,cmds,list) [linsert $xth(me,cmds,list) $dx [lindex $xth(me,cmds,list) $sx]]
  set xth(me,cmds,xlist) [linsert $xth(me,cmds,xlist) $dx [lindex $xth(me,cmds,xlist) $sx]]
  if {$dx < $sx} {
    set xth(me,cmds,list) [lreplace $xth(me,cmds,list) [expr $sx + 1] [expr $sx + 1]]
    set xth(me,cmds,xlist) [lreplace $xth(me,cmds,xlist) [expr $sx + 1] [expr $sx + 1]]
  } else {
    set xth(me,cmds,list) [lreplace $xth(me,cmds,list) $sx $sx]
    set xth(me,cmds,xlist) [lreplace $xth(me,cmds,xlist) $sx $sx]
  }    

  if {$dx < $sx} {
    xth_me_cmds_update_list_ft $dx [expr $sx + 1]
  } else {
    xth_me_cmds_update_list_ft $sx [expr $dx + 1]
  }

  set nid [lindex $xth(me,cmds,xlist) $sx]
  if {$xth(me,unredook)} {
    xth_me_cmds_select $nid
  }
  

  # unredo
  xth_me_unredo_action [mc "moving command"] \
    "xth_me_cmds_move_to $id $sx\nxth_me_cmds_select $id" \
    "xth_me_cmds_move_to $id $dx\nxth_me_cmds_select $nid"
  update idletasks
  
}

proc xth_me_cmds_move_up {id} {
  global xth
  xth_me_cmds_update {}
  if {[string length $id] < 1} {
    set id $xth(me,cmds,selid)
  }
  if {$id < 1} {
    return
  }
  set ix [lsearch $xth(me,cmds,xlist) $id]
  if {$ix < 1} {
    return
  }
  set dix [expr $ix - 1]
  # vymenime v liste
  set xth(me,cmds,list) [lreplace $xth(me,cmds,list) $dix $ix \
    [lindex $xth(me,cmds,list) $ix] [lindex $xth(me,cmds,list) $dix]]
  # vymenime v xliste
  set xth(me,cmds,xlist) [lreplace $xth(me,cmds,xlist) $dix $ix \
    [lindex $xth(me,cmds,xlist) $ix] [lindex $xth(me,cmds,xlist) $dix]]
  # selection
  if {$id == $xth(me,cmds,selid)} {
    $xth(ctrl,me,cmds).cl.l selection clear 0 end  
    $xth(ctrl,me,cmds).cl.l selection set $dix $dix
    $xth(ctrl,me,cmds).cl.l see $dix
    set selcmd "\nxth_me_cmds_select $id"
  } else {
    set selcmd {}
  }
  xth_me_cmds_update_list [lindex $xth(me,cmds,xlist) $ix]
  xth_me_cmds_update_list [lindex $xth(me,cmds,xlist) $dix]
  # unredo
  xth_me_unredo_action [mc "moving command"] \
    "xth_me_cmds_move_down $id$selcmd" \
    "xth_me_cmds_move_up $id$selcmd"
  update idletasks
}


proc xth_me_cmds_move_down {id} {
  global xth
  xth_me_cmds_update {}
  if {[string length $id] < 1} {
    set id $xth(me,cmds,selid)
  }
  if {$id < 1} {
    return
  }
  set ix [lsearch $xth(me,cmds,xlist) $id]
  if {$ix > [expr [llength $xth(me,cmds,xlist)] - 3]} {
    return
  }
  set iix [expr $ix + 1]
  # vymenime v liste
  set xth(me,cmds,list) [lreplace $xth(me,cmds,list) $ix $iix \
    [lindex $xth(me,cmds,list) $iix] [lindex $xth(me,cmds,list) $ix]]
  # vymenime v xliste
  set xth(me,cmds,xlist) [lreplace $xth(me,cmds,xlist) $ix $iix \
    [lindex $xth(me,cmds,xlist) $iix] [lindex $xth(me,cmds,xlist) $ix]]
  # selection
  if {$id == $xth(me,cmds,selid)} {
    $xth(ctrl,me,cmds).cl.l selection clear 0 end  
    $xth(ctrl,me,cmds).cl.l selection set $iix $iix
    $xth(ctrl,me,cmds).cl.l see $iix
    set selcmd "\nxth_me_cmds_select $id"
  } else {
    set selcmd {}
  }
  # unredo
  xth_me_cmds_update_list [lindex $xth(me,cmds,xlist) $ix]
  xth_me_cmds_update_list [lindex $xth(me,cmds,xlist) $iix]
  xth_me_unredo_action [mc "moving command"] \
   "xth_me_cmds_move_up $id$selcmd" "xth_me_cmds_move_down $id$selcmd"
  update idletasks
}


proc xth_me_cmds_create_endscrap {ix mode name} {
  global xth
  xth_me_cmds_update {}
  set id [xth_me_cmds_create 5 {} $ix]
  set xth(me,cmds,$id,name) {}
  set xth(me,cmds,$id,data) "endscrap"
  if {[string length $name] > 0} {
    set xth(me,cmds,$id,data) "$xth(me,cmds,$id,data)\n# $name"
  }
  xth_me_cmds_update_list $id
  if {$mode} {
    xth_me_cmds_select $id
    xth_me_cmds_select [expr $id - 1]
    xth_me_unredo_action [mc "creating endscrap"] \
     "xth_me_cmds_delete $id" \
     "xth_me_cmds_undelete $id 0 [lsearch $xth(me,cmds,xlist) $id]"  
  }
}


proc xth_me_cmds_hide_scrap_xctrl {} {

  global xth

  $xth(me,can) itemconfigure $xth(me,canid,scrap,scp1) -state hidden
  $xth(me,can) bind $xth(me,canid,scrap,scp1)  ""
  $xth(me,can) bind $xth(me,canid,scrap,scp1)  ""

  $xth(me,can) itemconfigure $xth(me,canid,scrap,scp2) -state hidden
  $xth(me,can) bind $xth(me,canid,scrap,scp2)  ""
  $xth(me,can) bind $xth(me,canid,scrap,scp2)  ""

  $xth(me,can) itemconfigure $xth(me,canid,scrap,scpA) -state hidden
  
}


proc xth_me_cmds_move_scrap_xctrl {id x y} {
  global xth
  set xth(me,canid,scrap,scp$id,pos) [list $x $y]
  set x [xth_me_real2canx $x]
  set y [xth_me_real2cany $y]
  $xth(me,can) coords $xth(me,canid,scrap,scp$id) \
    [expr $x - $xth(gui,me,scrap,psize)] [expr $y - $xth(gui,me,scrap,psize)] \
    [expr $x + $xth(gui,me,scrap,psize)] [expr $y + $xth(gui,me,scrap,psize)]
  set x1 [xth_me_real2canx [lindex $xth(me,canid,scrap,scp1,pos) 0]]
  set y1 [xth_me_real2cany [lindex $xth(me,canid,scrap,scp1,pos) 1]]
  set x2 [xth_me_real2canx [lindex $xth(me,canid,scrap,scp2,pos) 0]]
  set y2 [xth_me_real2cany [lindex $xth(me,canid,scrap,scp2,pos) 1]]
  $xth(me,can) coords $xth(me,canid,scrap,scpA) $x1 $y1 $x2 $y2
}


proc xth_me_cmds_start_scrap_xctrl_drag {pid x y} {
  global xth
  xth_me_cmds_update {}
  set xth(me,scrap,xdrag_mx) $x
  set xth(me,scrap,xdrag_my) $y
  set xth(me,scrap,xdrag_px) $xth(ctrl,me,scrap,px$pid)
  set xth(me,scrap,xdrag_py) $xth(ctrl,me,scrap,py$pid)
  set xth(me,scrap,xdrag_benter) [$xth(me,can) bind $xth(me,canid,scrap,scp$pid) ]
  $xth(me,can) bind $xth(me,canid,scrap,scp$pid)  {}
  set xth(me,scrap,xdrag_bleave) [$xth(me,can) bind $xth(me,canid,scrap,scp$pid) ]
  $xth(me,can) bind $xth(me,canid,scrap,scp$pid)  {}
  $xth(me,can) itemconfigure $xth(me,canid,scrap,scp$pid) -fill {}
  $xth(me,can) bind $xth(me,canid,scrap,scp$pid)  "xth_me_cmds_scrap_xctrl_drag $pid %x %y"
  $xth(me,can) bind $xth(me,canid,scrap,scp$pid)  "xth_me_cmds_end_scrap_xctrl_drag $pid %x %y"
  $xth(me,can) configure -cursor {}
}


proc xth_me_cmds_scrap_xctrl_drag {pid x y} {
  global xth
  set nx [expr $xth(me,scrap,xdrag_px) - [expr double($xth(me,scrap,xdrag_mx) - $x) * 100.0 / $xth(me,zoom)]]
  set ny [expr $xth(me,scrap,xdrag_py) + [expr double($xth(me,scrap,xdrag_my) - $y) * 100.0 / $xth(me,zoom)]]
  xth_me_cmds_move_scrap_xctrl $pid $nx $ny
  set xth(ctrl,me,scrap,px$pid) $nx
  set xth(ctrl,me,scrap,py$pid) $ny
  update idletasks
}


proc xth_me_cmds_end_scrap_xctrl_drag {pid x y} {
  global xth
  xth_me_cmds_scrap_xctrl_drag $pid $x $y
  $xth(me,can) bind $xth(me,canid,scrap,scp$pid)  ""
  $xth(me,can) bind $xth(me,canid,scrap,scp$pid)  ""
  $xth(me,can) bind $xth(me,canid,scrap,scp$pid)  $xth(me,scrap,xdrag_benter)
  $xth(me,can) bind $xth(me,canid,scrap,scp$pid)  $xth(me,scrap,xdrag_bleave)
  $xth(me,can) itemconfigure $xth(me,canid,scrap,scp$pid) -fill yellow
  $xth(me,can) configure -cursor crosshair
  xth_me_cmds_update {}
}


proc xth_me_cmds_show_scrap_xctrl {x1 y1 x2 y2} {

  global xth
  
  xth_me_cmds_move_scrap_xctrl 1 $x1 $y1
  $xth(me,can) itemconfigure $xth(me,canid,scrap,scp1) -state normal
  $xth(me,can) raise $xth(me,canid,scrap,scp1)
  $xth(me,can) bind $xth(me,canid,scrap,scp1)  "xth_status_bar_push me; xth_status_bar_status me \"Scrap picture scale point 1.\"; $xth(me,can) itemconfigure $xth(me,canid,scrap,scp1) -fill yellow"
  $xth(me,can) bind $xth(me,canid,scrap,scp1)  "xth_status_bar_pop me; $xth(me,can) itemconfigure $xth(me,canid,scrap,scp1) -fill red"
  $xth(me,can) bind $xth(me,canid,scrap,scp1) <1> "xth_me_cmds_start_scrap_xctrl_drag 1 %x %y"

  xth_me_cmds_move_scrap_xctrl 2 $x2 $y2
  $xth(me,can) itemconfigure $xth(me,canid,scrap,scp2) -state normal
  $xth(me,can) raise $xth(me,canid,scrap,scp2)
  $xth(me,can) bind $xth(me,canid,scrap,scp2)  "xth_status_bar_push me; xth_status_bar_status me \"Scrap picture scale point 2.\"; $xth(me,can) itemconfigure $xth(me,canid,scrap,scp2) -fill yellow"
  $xth(me,can) bind $xth(me,canid,scrap,scp2)  "xth_status_bar_pop me; $xth(me,can) itemconfigure $xth(me,canid,scrap,scp2) -fill red"
  $xth(me,can) bind $xth(me,canid,scrap,scp2) <1> "xth_me_cmds_start_scrap_xctrl_drag 2 %x %y"

  $xth(me,can) itemconfigure $xth(me,canid,scrap,scpA) -state normal
  
}


proc xth_me_cmds_update_scrap_ctrl {id} {
  global xth
  if {[string length $id] > 0} {
    $xth(ctrl,me,scrap).namel configure -state normal
    $xth(ctrl,me,scrap).name configure -state normal
    $xth(ctrl,me,scrap).projl configure -state normal
    $xth(ctrl,me,scrap).proj configure -state normal
    $xth(ctrl,me,scrap).optl configure -state normal
    $xth(ctrl,me,scrap).opt configure -state normal
    $xth(ctrl,me,scrap).scl configure -state normal
    $xth(ctrl,me,scrap).scpb configure -state normal
    $xth(ctrl,me,scrap).scpp configure -state normal
    $xth(ctrl,me,scrap).scrp configure -state normal
    $xth(ctrl,me,scrap).scx1p configure -state normal
    $xth(ctrl,me,scrap).scy1p configure -state normal
    $xth(ctrl,me,scrap).scx2p configure -state normal
    $xth(ctrl,me,scrap).scy2p configure -state normal
    $xth(ctrl,me,scrap).scx1r configure -state normal
    $xth(ctrl,me,scrap).scy1r configure -state normal
    $xth(ctrl,me,scrap).scx2r configure -state normal
    $xth(ctrl,me,scrap).scy2r configure -state normal
    $xth(ctrl,me,scrap).scu configure -state normal
    $xth(ctrl,me,scrap).scul configure -state normal
    $xth(ctrl,me,scrap).skl configure -state normal
    $xth(ctrl,me,scrap).skll.l configure -takefocus 1 \
      -listvariable xth(me,cmds,$id,sklist)
    $xth(ctrl,me,scrap).skins configure -state normal
    $xth(ctrl,me,scrap).skdel configure -state normal
    set xth(ctrl,me,scrap,name) $xth(me,cmds,$id,name)
    set xth(ctrl,me,scrap,projection) $xth(me,cmds,$id,projection)
    set xth(ctrl,me,scrap,options) $xth(me,cmds,$id,options)
    set xth(ctrl,me,scrap,px1) [lindex $xth(me,cmds,$id,scale) 0]
    set xth(ctrl,me,scrap,py1) [lindex $xth(me,cmds,$id,scale) 1]
    set xth(ctrl,me,scrap,px2) [lindex $xth(me,cmds,$id,scale) 2]
    set xth(ctrl,me,scrap,py2) [lindex $xth(me,cmds,$id,scale) 3]
    set xth(ctrl,me,scrap,rx1) [lindex $xth(me,cmds,$id,scale) 4]
    set xth(ctrl,me,scrap,ry1) [lindex $xth(me,cmds,$id,scale) 5]
    set xth(ctrl,me,scrap,rx2) [lindex $xth(me,cmds,$id,scale) 6]
    set xth(ctrl,me,scrap,ry2) [lindex $xth(me,cmds,$id,scale) 7]
    set xth(ctrl,me,scrap,units) [lindex $xth(me,cmds,$id,scale) 8]
    xth_me_cmds_show_scrap_xctrl [lindex $xth(me,cmds,$id,scale) 0] \
      [lindex $xth(me,cmds,$id,scale) 1] [lindex $xth(me,cmds,$id,scale) 2] \
      [lindex $xth(me,cmds,$id,scale) 3]
    xth_me_prev_cmd $xth(me,cmds,$id,data)
  } else {
    set xth(ctrl,me,scrap,name) ""
    set xth(ctrl,me,scrap,projection) $xth(me,dflt,scrap,projection)
    set xth(ctrl,me,scrap,options) $xth(me,dflt,scrap,options)
    set xth(ctrl,me,scrap,px1) [lindex $xth(me,dflt,scrap,scale) 0]
    set xth(ctrl,me,scrap,py1) [lindex $xth(me,dflt,scrap,scale) 1]
    set xth(ctrl,me,scrap,px2) [lindex $xth(me,dflt,scrap,scale) 2]
    set xth(ctrl,me,scrap,py2) [lindex $xth(me,dflt,scrap,scale) 3]
    set xth(ctrl,me,scrap,rx1) [lindex $xth(me,dflt,scrap,scale) 4]
    set xth(ctrl,me,scrap,ry1) [lindex $xth(me,dflt,scrap,scale) 5]
    set xth(ctrl,me,scrap,rx2) [lindex $xth(me,dflt,scrap,scale) 6]
    set xth(ctrl,me,scrap,ry2) [lindex $xth(me,dflt,scrap,scale) 7]
    set xth(ctrl,me,scrap,units) [lindex $xth(me,dflt,scrap,scale) 8]
    $xth(ctrl,me,scrap).namel configure -state disabled
    $xth(ctrl,me,scrap).name configure -state disabled
    $xth(ctrl,me,scrap).projl configure -state disabled
    $xth(ctrl,me,scrap).proj configure -state disabled
    $xth(ctrl,me,scrap).optl configure -state disabled
    $xth(ctrl,me,scrap).opt configure -state disabled
    $xth(ctrl,me,scrap).scl configure -state disabled
    $xth(ctrl,me,scrap).scpb configure -state disabled
    $xth(ctrl,me,scrap).scpp configure -state disabled
    $xth(ctrl,me,scrap).scrp configure -state disabled
    $xth(ctrl,me,scrap).scx1p configure -state disabled
    $xth(ctrl,me,scrap).scy1p configure -state disabled
    $xth(ctrl,me,scrap).scx2p configure -state disabled
    $xth(ctrl,me,scrap).scy2p configure -state disabled
    $xth(ctrl,me,scrap).scx1r configure -state disabled
    $xth(ctrl,me,scrap).scy1r configure -state disabled
    $xth(ctrl,me,scrap).scx2r configure -state disabled
    $xth(ctrl,me,scrap).scy2r configure -state disabled
    $xth(ctrl,me,scrap).scu configure -state disabled
    $xth(ctrl,me,scrap).scul configure -state disabled
    $xth(ctrl,me,scrap).skl configure -state disabled
    $xth(ctrl,me,scrap).skll.l configure -takefocus 0 \
      -listvariable xth(ctrl,me,scrap,sklempty)
    $xth(ctrl,me,scrap).skins configure -state disabled
    $xth(ctrl,me,scrap).skdel configure -state disabled
    xth_me_cmds_hide_scrap_xctrl    
  }
}

proc xth_me_cmds_update_scrap_vars {id} {

  global xth
  set xth(ctrl,me,scrap,name) $xth(me,cmds,$id,name)
  set xth(ctrl,me,scrap,projection) $xth(me,cmds,$id,projection)
  set xth(ctrl,me,scrap,options) $xth(me,cmds,$id,options)
  set xth(ctrl,me,scrap,px1) [lindex $xth(me,cmds,$id,scale) 0]
  set xth(ctrl,me,scrap,py1) [lindex $xth(me,cmds,$id,scale) 1]
  set xth(ctrl,me,scrap,px2) [lindex $xth(me,cmds,$id,scale) 2]
  set xth(ctrl,me,scrap,py2) [lindex $xth(me,cmds,$id,scale) 3]
  set xth(ctrl,me,scrap,rx1) [lindex $xth(me,cmds,$id,scale) 4]
  set xth(ctrl,me,scrap,ry1) [lindex $xth(me,cmds,$id,scale) 5]
  set xth(ctrl,me,scrap,rx2) [lindex $xth(me,cmds,$id,scale) 6]
  set xth(ctrl,me,scrap,ry2) [lindex $xth(me,cmds,$id,scale) 7]
  set xth(ctrl,me,scrap,units) [lindex $xth(me,cmds,$id,scale) 8]
  xth_me_cmds_move_scrap_xctrl 1 [lindex $xth(me,cmds,$id,scale) 0] \
    [lindex $xth(me,cmds,$id,scale) 1] 
  xth_me_cmds_move_scrap_xctrl 2 [lindex $xth(me,cmds,$id,scale) 2] \
    [lindex $xth(me,cmds,$id,scale) 3]

}


proc xth_me_cmds_update_scrap {id nname nproj nopt nscale} {

  global xth
  
  set oname $xth(me,cmds,$id,name)
  set oproj $xth(me,cmds,$id,projection)
  set oopt $xth(me,cmds,$id,options)
  set oscale $xth(me,cmds,$id,scale)

  regsub {^\s*} $nopt "" nopt
  regsub {\s*$} $nopt "" nopt
  if {[string length $nname] < 1} {
    set nname $oname
  }  
  if {[llength $nscale] < 8} {
    set nscale oscale
  } else {
    for {set i 0} {$i < 8} {incr i} {
      if {[catch {expr [lindex $nscale $i]}]} {
	set nscale [lreplace $nscale $i $i [lindex $oscale $i]]
      }
    }
  }
  if {[llength $nscale] == 9} {
    if {[string length [lindex $nscale 8]] == 0} {
      set nscale [lreplace $nscale 8 8]
    }
  }
  
  if {![string equal "$oname $oproj $oopt $oscale" "$nname $nproj $nopt $nscale"]} {
    xth_me_unredo_action [mc "scrap changes"] \
      "xth_me_cmds_update_scrap $id $oname [list $oproj] [list $oopt] [list $oscale]; xth_me_cmds_select $id" \
      "xth_me_cmds_update_scrap $id $nname [list $nproj] [list $nopt] [list $nscale]; xth_me_cmds_select $id"
    set xth(me,cmds,$id,name) $nname
    set xth(me,cmds,$id,projection) $nproj
    set xth(me,cmds,$id,options) $nopt
    set xth(me,cmds,$id,scale) $nscale
    xth_me_cmds_update_scrap_data $id
    xth_me_cmds_update_list $id
  }
  
}


proc xth_me_cmds_update_scrap_data {id} {

  global xth

  set d "scrap $xth(me,cmds,$id,name)"

  if {[llength $xth(me,cmds,$id,projection)] > 1} {
    set d "$d -projection \[$xth(me,cmds,$id,projection)\]"
  } elseif {[llength $xth(me,cmds,$id,projection)] > 0} {
    set d "$d -projection $xth(me,cmds,$id,projection)"
  }
  set xth(me,dflt,scrap,projection) $xth(me,cmds,$id,projection)

  if {[string length $xth(me,cmds,$id,options)] > 0} {
    set d "$d $xth(me,cmds,$id,options)"
  }
  set xth(me,dflt,scrap,options) $xth(me,cmds,$id,options)

  set d "$d -scale \[$xth(me,cmds,$id,scale)\]"
  set xth(me,dflt,scrap,scale) $xth(me,cmds,$id,scale)
  
  foreach sk $xth(me,cmds,$id,sklist) {
    set d "$d -sketch $sk"
  }

  set xth(me,cmds,$id,data) "$d"
  
}


proc xth_me_cmds_create_scrap {ix mode name opts} {

  global xth
  xth_me_cmds_update {}

  set undoselect {}
  if {[string length $ix] == 0} {
    set undoselect "; xth_me_cmds_select $xth(me,cmds,selid)"

    #xth_me_cmds_select [lindex $xth(me,cmds,xlist) 0]
    set newselid 0
    set cx [lsearch -exact $xth(me,cmds,xlist) $xth(me,cmds,selid)]
    if {$cx > -1} {
      for {set cc [expr $cx + 1]} {$cc < [llength $xth(me,cmds,xlist)]} {incr cc} {
	set cselid [lindex $xth(me,cmds,xlist) $cc]
	if {$xth(me,cmds,$cselid,ct) == 4} {
	  set newselid $cselid
	  break
	}
      }
    }
    xth_me_cmds_select $newselid
    
  }
  
  set id [xth_me_cmds_create 4 {} $ix]

  if {[string length $name] > 0} {
    set xth(me,cmds,$id,name) $name
  } else {
    set xth(me,cmds,$id,name) "scrap$id"
  }

  if {$mode && ([string length $opts] < 1)} {
    set opts $xth(me,dflt,scrap,options)
  }
  
  # nastavit projekciu
  if {$mode} {
    set xth(me,cmds,$id,projection) $xth(me,dflt,scrap,projection)
  } else {
    set xth(me,cmds,$id,projection) {}
  }
  set optl [xth_me_cmds_get_line_option $opts projection]
  if {[lindex $optl 2]} {
    set xth(me,cmds,$id,projection) [lindex $optl 0]
    set opts [lindex $optl 1]
  }
  set optl [xth_me_cmds_get_line_option $opts proj]
  if {[lindex $optl 2]} {
    set xth(me,cmds,$id,projection) [lindex $optl 0]
    set opts [lindex $optl 1]
  }
  
  # nastavit scale
  set xth(me,cmds,$id,scale) {}
  if {[llength $xth(me,dflt,scrap,scale)] < 1} {
    set xth(me,dflt,scrap,scale) [list $xth(me,area,xmin) $xth(me,area,ymin) \
      $xth(me,area,xmax) $xth(me,area,ymin) 0.0 0.0 [expr 0.0254 * ($xth(me,area,xmax) - $xth(me,area,xmin))] 0.0 m]
  }
  set optl [xth_me_cmds_get_line_option $opts scale]
  set optv [lindex $optl 0]
  set opts [lindex $optl 1]
  switch [llength $optv] {
    1 {
      set xth(me,cmds,$id,scale) [list $xth(me,area,xmin) $xth(me,area,ymin) \
	$xth(me,area,xmax) $xth(me,area,ymin) 0.0 0.0 [expr 1.0 * $optv * ($xth(me,area,xmax) - $xth(me,area,xmin))] 0.0 m]
    }
    2 {
      set xth(me,cmds,$id,scale) [list $xth(me,area,xmin) $xth(me,area,ymin) \
	$xth(me,area,xmax) $xth(me,area,ymin) 0.0 0.0 [expr 1.0 * [lindex $optv 0] * ($xth(me,area,xmax) - $xth(me,area,xmin))] 0.0 [lindex $optv 1]]
    }
    3 {
      set xth(me,cmds,$id,scale) [list $xth(me,area,xmin) $xth(me,area,ymin) \
	$xth(me,area,xmax) $xth(me,area,ymin) 0.0 0.0 [expr 1.0 * [lindex $optv 1] / [lindex $optv 0] * ($xth(me,area,xmax) - $xth(me,area,xmin))] 0.0 [lindex $optv 2]]
    }
    8 {
      set xth(me,cmds,$id,scale) [list [lindex $optv 0] [lindex $optv 1] [lindex $optv 2] \
      [lindex $optv 3] [lindex $optv 4] [lindex $optv 5] [lindex $optv 6] [lindex $optv 7]]
    }
    9 {
      set xth(me,cmds,$id,scale) [list [lindex $optv 0] [lindex $optv 1] [lindex $optv 2] \
      [lindex $optv 3] [lindex $optv 4] [lindex $optv 5] [lindex $optv 6] [lindex $optv 7] [lindex $optv 8]]
    }
    default {
      set xth(me,cmds,$id,scale) $xth(me,dflt,scrap,scale)
    }
  }

  # set the list of sketches    
  set xth(me,cmds,$id,sklist) {}
  set optl [xth_me_cmds_get_sketch_option $opts]
  while {[lindex $optl 2]} {
    lappend xth(me,cmds,$id,sklist) [lindex $optl 0]
    set opts [lindex $optl 1]
    set optl [xth_me_cmds_get_sketch_option $opts]
  }
  
  # nastavit options
  regsub {^\s*} $opts "" opts
  regsub {\s*$} $opts "" opts
  set xth(me,cmds,$id,options) $opts
  
  xth_me_cmds_update_list $id
  xth_me_cmds_update_scrap_data $id
  if {$mode} {
    xth_me_unredo_action [mc "creating scrap"] \
      "xth_me_cmds_delete $id$undoselect" \
      "xth_me_cmds_undelete $id 0 [lsearch $xth(me,cmds,xlist) $id]"  
    xth_me_cmds_create_endscrap $ix $mode {}
  }
}


proc xth_me_cmds_create_text {ix mode data cpos} {
  global xth
  xth_me_cmds_update {}
  set id [xth_me_cmds_create 1 {} $ix]
  set xth(me,cmds,$id,data) $data
  set xth(me,cmds,$id,cpos) $cpos
  if {$mode} {
    xth_me_cmds_select $id
    xth_me_unredo_action [mc "creating text"] \
      "xth_me_cmds_delete $id" \
      "xth_me_cmds_undelete $id 0 [lsearch $xth(me,cmds,xlist) $id]"
  }
}


proc xth_me_cmds_update_text {id newdata newcpos} {
  global xth
  set olddata $xth(me,cmds,$id,data)
  set oldcpos $xth(me,cmds,$id,cpos)
  regsub {\s*$} $newdata {} newdata
  if {![string equal $xth(me,cmds,$id,data) $newdata]} {
    set newdata "$newdata\n"
    xth_me_unredo_action [mc "text changes"] \
      "xth_me_cmds_update_text $id [list $olddata] $oldcpos; xth_me_cmds_select $id" \
      "xth_me_cmds_update_text $id [list $newdata] $newcpos; xth_me_cmds_select $id"
    set xth(me,cmds,$id,data) $newdata
    set xth(me,cmds,$id,cpos) $newcpos    
  }
}


proc xth_me_cmds_action {} {
  global xth
  switch $xth(me,cmds,action) {
    0 {
      xth_me_cmds_create_line {} 1 "" "" ""
      xth_ctrl_scroll_to me line
      xth_ctrl_maximize me line
      xth_ctrl_maximize me linept
    }
    1 {
      xth_me_cmds_set_mode 1    
    }
    2 {
      xth_me_cmds_create_scrap {} 1 "" ""
      xth_ctrl_scroll_to me scrap
      xth_ctrl_maximize me scrap
    }
    3 {
      xth_me_cmds_create_text {} 1 "\n" "1.0"
      xth_ctrl_scroll_to me text
      xth_ctrl_maximize me text
      focus $xth(ctrl,me,text).txt
    }
    4 {
      xth_me_cmds_delete {}
    }
    5 {
      xth_me_cmds_create_area {} 1 "" "" ""
      xth_ctrl_scroll_to me ac
      xth_ctrl_maximize me ac
    }
  }
}


proc xth_me_cmds_create_all {lns} {
  global xth
  set ctext {}
  xth_status_bar_push me
  set ctext_push {
    regsub {^\s*} $ctext {} ctext
    regsub {\s*$} $ctext {} ctext
    if {[string length $ctext] > 0} {
      xth_me_cmds_create_text [expr [llength $xth(me,cmds,xlist)] - 1] 0 "$ctext\n" 1.0
      set ctext {}
    }
  }
  set line_lines {}
  set line_type {}
  set line_opts {}
  set inline 0
  set linenumber 0
  set totallns [llength $lns]
  xth_me_progbar_show $totallns
  xth_status_bar_status me "Processing commands ..."
  foreach ln $lns {
    incr linenumber
    xth_me_progbar_prog $linenumber
    # here take care of special commands
    if {[regexp {^\s*scrap\s+(\S+)\s*(.*)$} $ln dum name opts]} {
      eval $ctext_push
      xth_me_cmds_create_scrap [expr [llength $xth(me,cmds,xlist)] - 1] 0 $name $opts
    } elseif {[regexp {^\s*endscrap\s*(\S*)\s*$} $ln dum name]} {
      eval $ctext_push
      xth_me_cmds_create_endscrap [expr [llength $xth(me,cmds,xlist)] - 1] 0 $name
    } elseif {[regexp {^\s*point\s+(\S+)\s+(\S+)\s+(\S+)\s*(.*)$} $ln dum x y type opts]} {
      eval $ctext_push
      xth_me_cmds_create_point [expr [llength $xth(me,cmds,xlist)] - 1] 0 $x $y $type $opts
    } elseif {[regexp {^\s*line\s+(\S+)\s*(.*)$} $ln dum line_type line_opts]} {
      eval $ctext_push
      set line_lines {}
      set inline 1
    } elseif {($inline == 1) && [regexp {^\s*endline(\s|$)} $ln]} {
      xth_me_cmds_create_line [expr [llength $xth(me,cmds,xlist)] - 1] 0 $line_type $line_opts $line_lines
      set line_lines {}
      set line_type {}
      set line_opts {}
      set inline 0
    } elseif {[regexp {^\s*area\s+(\S+)\s*(.*)$} $ln dum line_type line_opts]} {
      eval $ctext_push
      set line_lines {}
      set inline 2
    } elseif {($inline == 2) && [regexp {^\s*endarea(\s|$)} $ln]} {
      xth_me_cmds_create_area [expr [llength $xth(me,cmds,xlist)] - 1] 0 $line_type $line_opts $line_lines
      set line_lines {}
      set line_type {}
      set line_opts {}
      set inarea 0
    } elseif {($inline > 0)} {
      lappend line_lines $ln
    } else {
      set ctext "$ctext\n$ln"
    }
  }
  if {$inline > 0} {
    foreach ln $line_lines {
      set ctext "$ctext\n$ln"
    }
  }
  eval $ctext_push
  xth_me_progbar_hide
  xth_status_bar_pop me
}


proc xth_me_cmds_click {id tagOrId x y mx my} {
  global xth
  xth_me_cmds_update {}
  if {[llength $id] == 2} {
    set pid [lindex $id 1]
    set id [lindex $id 0]
  } else {
    set pid 0
  }
  
  switch $xth(me,cmds,mode) {
    0 {
      if {[llength $id] > 0} {
	if {$id != $xth(me,cmds,selid)} {
	  xth_me_cmds_select "$id $pid"
	  if {$pid == 0} {
	    xth_ctrl_scroll_to me point
	    xth_ctrl_maximize me point
	  } else {
	    xth_ctrl_scroll_to me line
	    xth_ctrl_maximize me line
	    xth_ctrl_maximize me linept
	  }
	} else {
	  switch $xth(me,cmds,$id,ct) {
	    2 {xth_me_cmds_start_point_drag $id $mx $my}
	    3 {
	      if {$xth(me,cmds,selpid) != $pid} {
		xth_me_cmds_select_linept $id $pid
	      } else {
		xth_me_cmds_start_linecp_drag pt$id.$pid $id 0 $pid 0 x $mx $my
	      }
	    }
	  }
	}
      }
    }
    1 {
      xth_ctrl_scroll_to me point
      xth_ctrl_maximize me point
      # check, whether we clicked on XVI station
      set cptype {}
      set cpopts {}
      if {[regexp {XVIstI(\d+)S(\d+)} [$xth(me,can) itemcget $tagOrId -tags] dum imgx sti]} {
	set csname [lindex [lindex $xth(me,imgs,$imgx,XVIstations) $sti] 2]
	set x [lindex [lindex $xth(me,imgs,$imgx,XVIstationsX) $sti] 0]
	set y [lindex [lindex $xth(me,imgs,$imgx,XVIstationsX) $sti] 1]
	set cptype station
	set cpopts $xth(me,dflt,point,options)
	if {[regexp {\-name\s+(\S+)} $cpopts]} {
	  regsub {\-name\s+(\S+)} $cpopts "-name $csname" cpopts
	} else {
	  set cpopts "-name $csname"
	}
      }
      if {$id == ($xth(me,cmds,cmdln) - 1)} {
	xth_me_cmds_end_point 
      } else {
	xth_me_cmds_create_point {} 1 $x $y $cptype $cpopts
      }
    }
    2 {
      xth_ctrl_scroll_to me line
      xth_ctrl_maximize me line
      xth_ctrl_maximize me linept
      set fpid -1
      set lpid -1
      if {($id == $xth(me,cmds,selid)) && ([string length $id] > 0) && ($pid > 0)} {
	set xl $xth(me,cmds,$id,xplist)
	set lix [expr [llength $xl] - 2]
	if {$lix >= 0} {
	  set fpid [lindex $xl 0]
	  set lpid [lindex $xl $lix]
	}
      }
      if {($id == $xth(me,cmds,selid)) && ($pid != 0) && ($pid == $xth(me,cmds,inspid))} {
	xth_me_cmds_end_line
      } elseif {($id == $xth(me,cmds,selid)) && ($pid == $fpid) && ($xth(me,cmds,inspid) == 0)} {
	xth_me_cmds_close_line $id
      } elseif {($id == $xth(me,cmds,selid)) && ($pid == $lpid) && ($xth(me,cmds,inspid) == 0)} {
	xth_me_cmds_end_line
      } else {
	# vytvori novy bod
    # ak sme klikli na XVIbod, tak hodime presne tam
      if {[regexp {XVIstI(\d+)S(\d+)} [$xth(me,can) itemcget $tagOrId -tags] dum imgx sti]} {
        set x [lindex [lindex $xth(me,imgs,$imgx,XVIstationsX) $sti] 0]
        set y [lindex [lindex $xth(me,imgs,$imgx,XVIstationsX) $sti] 1]
      }    
	xth_me_cmds_start_create_linept $tagOrId $x $y $mx $my
      }      
    }
    3 {
      if {([string length $id] > 0) && ($xth(me,cmds,$id,ct) == 3)} {
	xth_me_cmds_insert_area_lineid $id $mx $my
      }
    }
    4 {
      xth_me_cmds_scrap_scale $x $y
    }
    5 {
      xth_me_cmds_scrap_sketch_insert $tagOrId
    }
  }
}


proc xth_me_cmds_end_point {} {
  set recmds "xth_me_cmds_set_mode 0"
  set uncmds "xth_me_cmds_set_mode 1"
  eval $recmds
  xth_me_unredo_action [mc "end point insertion"] $uncmds $recmds
}




proc xth_me_cmds_click_lineln {id tagOrId mx my} {
  global xth
  xth_me_cmds_update {}
  if {[llength $id] == 2} {
    set pid [lindex $id 1]
    set id [lindex $id 0]
  } else {
    set pid 0
  }

  switch $xth(me,cmds,mode) {
    3 {
      if {$xth(me,cmds,$id,ct) == 3} {
	xth_me_cmds_insert_area_lineid $id $mx $my
      }
    }
    4 {
      xth_me_cmds_scrap_scale
    }
    0 {
      xth_me_cmds_select "$id $pid"
    }
    default {
      xth_me_cmds_click_area ln$id.$pid $mx $my
    }
  }
}



proc xth_me_cmds_click_area {tagOrId x y} {
  global xth
  xth_me_cmds_click {} $tagOrId [xth_me_can2realx [$xth(me,can) canvasx $x]] [xth_me_can2realy [$xth(me,can) canvasy $y]] $x $y
}


proc xth_me_cmds_set_mode {nmode} {
  
  global xth
  
  if {!$xth(me,fopen)} {
    return
  }

  if {($nmode == 0) && ($xth(me,cmds,mode) == 0)} {
    xth_me_cmds_select_nopoint
  }

  set xth(me,cmds,mode) $nmode
  switch $nmode {
    0 {
      $xth(me,mbar) configure -text [mc "select object"] -bg green -fg black
      $xth(ctrl,me,ac).ins configure -text [mc "Insert"]
    }
    1 {
      $xth(me,mbar) configure -text [mc "insert point"] -bg red -fg white
    }
    2 {
      $xth(me,mbar) configure -text [mc "insert line point"] -bg red -fg white
    }
    3 {
      $xth(me,mbar) configure -text [mc "insert area border"] -bg red -fg white
      $xth(ctrl,me,ac).ins configure -text [mc "Select"]
    }
    4 {
      $xth(me,mbar) configure -text [mc "scale scrap"] -bg red -fg white
    }
    5 {
      $xth(me,mbar) configure -text [mc "insert sketch"] -bg red -fg white
    }
  }
  
  set xth(tb,me,action) $nmode
  
}


proc xth_me_cmds_create_point {ix mode x y type opts} {

  global xth
  xth_me_cmds_update {}
  set id [xth_me_cmds_create 2 {} $ix]

  set xth(me,cmds,$id,x) $x
  set xth(me,cmds,$id,y) $y
  
  if {$mode && ([string length $opts] < 1)} {
    if {([string length $type] < 1) && \
	[string equal $xth(me,dflt,point,type) station] && \
	[regexp {\-name\s+(\S+)} $xth(me,dflt,point,options) dum stname]} {
      regsub {\-name\s+(\S+)} $xth(me,dflt,point,options) "-name [xth_incr_station_name $stname $xth(me,snai)]" xth(me,dflt,point,options)
    }
    set opts $xth(me,dflt,point,options)
  }

  if {[string length $type] > 0} {
    set xth(me,cmds,$id,type) $type
  } else {
    set xth(me,cmds,$id,type) $xth(me,dflt,point,type)
  }
  
  # nastavit meno
  set optl [xth_me_cmds_get_line_option $opts id]
  if {[lindex $optl 2]} {
    set xth(me,cmds,$id,name) [lindex $optl 0]
    set opts [lindex $optl 1]
  }
  
  # nastavit rotation
  if {$mode} {
    set xth(me,cmds,$id,rotation) $xth(me,dflt,point,rotation)
  } else {
    set xth(me,cmds,$id,rotation) {}
  }
  set optl [xth_me_cmds_get_line_option $opts orientation]
  if {[lindex $optl 2]} {
    set xth(me,cmds,$id,rotation) [lindex $optl 0]
    set opts [lindex $optl 1]
  } else {
    set optl [xth_me_cmds_get_line_option $opts orient]
    if {[lindex $optl 2]} {
      set xth(me,cmds,$id,rotation) [lindex $optl 0]
      set opts [lindex $optl 1]
    }
  }

#  # nastavit xsize
#  if {$mode} {
#    set xth(me,cmds,$id,xsize) $xth(me,dflt,point,xsize)
#  } else {
    set xth(me,cmds,$id,xsize) {}
#  }
#  set optl [xth_me_cmds_get_line_option $opts size]
#  if {[lindex $optl 2]} {
#    set xth(me,cmds,$id,xsize) [lindex $optl 0]
#    set xth(me,cmds,$id,ysize) [lindex $optl 0]
#    set opts [lindex $optl 1]
#  }
#  set optl [xth_me_cmds_get_line_option $opts "x-size"]
#  if {[lindex $optl 2]} {
#    set xth(me,cmds,$id,xsize) [lindex $optl 0]
#    set opts [lindex $optl 1]
#  }
#
#  # nastavit ysize
#  if {$mode} {
#    set xth(me,cmds,$id,ysize) $xth(me,dflt,point,ysize)
#  } else {
    set xth(me,cmds,$id,ysize) {}
#  }
#  set optl [xth_me_cmds_get_line_option $opts "y-size"]
#  if {[lindex $optl 2]} {
#    set xth(me,cmds,$id,ysize) [lindex $optl 0]
#    set opts [lindex $optl 1]
#  }
#  
#  if {([string length $xth(me,cmds,$id,ysize)] > 0) &&
#      ([string length $xth(me,cmds,$id,xsize)] == 0)} {
#    set xth(me,cmds,$id,xsize) $xth(me,cmds,$id,ysize)
#    set xth(me,cmds,$id,ysize) {}
#  }

  # nastavit options
  regsub {^\s*} $opts "" opts
  regsub {\s*$} $opts "" opts
  set xth(me,cmds,$id,options) $opts
  
  xth_me_cmds_draw_point $id
  if {$mode} {
    $xth(me,can) itemconfigure pt$id -fill lightBlue
  }
  xth_me_cmds_update_list $id
  xth_me_cmds_update_point_data $id
  if {$mode} {
    xth_me_unredo_action [mc "creating point"] \
      "xth_me_cmds_delete $id" \
      "xth_me_cmds_undelete $id 0 [lsearch $xth(me,cmds,xlist) $id]"  
    xth_me_cmds_select $id
  }

}


proc xth_me_cmds_update_point_data {id} {

  global xth

  set d "point $xth(me,cmds,$id,x) $xth(me,cmds,$id,y) $xth(me,cmds,$id,type)"
  set xth(me,dflt,point,type) $xth(me,cmds,$id,type)

  if {[string length $xth(me,cmds,$id,name)] > 0} {
    set d "$d -id $xth(me,cmds,$id,name)"
  }
  
  if {[string length $xth(me,cmds,$id,rotation)] > 0} {
    set d "$d -orientation $xth(me,cmds,$id,rotation)"
  }
  set xth(me,dflt,point,rotation) $xth(me,cmds,$id,rotation)

  if {[string length $xth(me,cmds,$id,xsize)] > 0} {
    set d "$d -x-size $xth(me,cmds,$id,xsize)"
  }
  set xth(me,dflt,point,xsize) $xth(me,cmds,$id,xsize)

  if {[string length $xth(me,cmds,$id,ysize)] > 0} {
    set d "$d -y-size $xth(me,cmds,$id,ysize)"
  }
  set xth(me,dflt,point,ysize) $xth(me,cmds,$id,ysize)

  if {[string length $xth(me,cmds,$id,options)] > 0} {
    set d "$d $xth(me,cmds,$id,options)"
  }
  set xth(me,dflt,point,options) $xth(me,cmds,$id,options)

  catch {
  set ttype [lindex $d 3]
  set xth(me,cmds,$id,sbar) "$d"
  if {([string length $ttype] > 0)} {
    set ttyp [ mc "point $ttype"]
    if {![string equal $ttype $ttyp]} {
      set nd [lreplace $d 3 3 "$ttype:$ttyp"]
      set xth(me,cmds,$id,sbar) "$nd"
    }
  } 
  }

  set xth(me,cmds,$id,data) "$d"
  
}


proc xth_me_cmds_move_point_xctrl {id} {
  global xth
  set cx [xth_me_real2canx $xth(me,cmds,$id,x)]
  set cy [xth_me_real2cany $xth(me,cmds,$id,y)]
  set c1 [expr $cx - 3 * $xth(gui,me,point,psize)]
  set c2  [expr $cy - 3 * $xth(gui,me,point,psize)]
  set c3  [expr $cx + 3 * $xth(gui,me,point,psize)]
  set c4  [expr $cy + 3 * $xth(gui,me,point,psize)]
  $xth(me,can) coords $xth(me,canid,point,selector) [list $c1 $c2 $c3 $c4]
}

proc xth_me_cmds_show_point_xctrl {id} {
  global xth
  $xth(me,can) itemconfigure $xth(me,canid,point,selector) -state normal
  $xth(me,can) raise $xth(me,canid,point,selector)
  $xth(me,can) raise ptfill
  $xth(me,can) lower ptfill point
  xth_me_cmds_move_point_xctrl $id
  xth_me_cmds_show_point_fill_xctrl $id
  $xth(me,can) raise pt$id
}


proc xth_me_cmds_show_point_fill_xctrl {id} {
  global xth
  if {$xth(ctrl,me,point,xsid) || $xth(ctrl,me,point,ysid)} {
    xth_me_cmds_configure_point_fill_xctrl $id 1
    xth_me_cmds_move_point_fill_xctrl $id $xth(ctrl,me,point,rot) $xth(ctrl,me,point,xs) $xth(ctrl,me,point,ys)
  } elseif {$xth(ctrl,me,point,rotid)} {
    xth_me_cmds_configure_point_fill_xctrl $id 0
    xth_me_cmds_move_point_fill_xctrl $id $xth(ctrl,me,point,rot) $xth(ctrl,me,point,xs) $xth(ctrl,me,point,ys)
  } else {
    xth_me_cmds_configure_point_fill_xctrl {} 0
  }
}


proc xth_me_cmds_hide_point_xctrl {} {
  global xth
  $xth(me,can) itemconfigure $xth(me,canid,point,selector) -state hidden
  xth_me_cmds_configure_point_fill_xctrl {} {}
}


proc xth_me_cmds_update_point_ctrl {id} {
  global xth
  if {[string length $id] > 0} {

    $xth(ctrl,me,point).posl configure -state normal
    $xth(ctrl,me,point).posx configure -state normal
    $xth(ctrl,me,point).posy configure -state normal
    $xth(ctrl,me,point).upd configure -state normal
    $xth(ctrl,me,point).typl configure -state normal
    $xth(ctrl,me,point).typ configure -state normal
    $xth(ctrl,me,point).namel configure -state normal
    $xth(ctrl,me,point).name configure -state normal
    $xth(ctrl,me,point).optl configure -state normal
    $xth(ctrl,me,point).opt configure -state normal
    $xth(ctrl,me,point).rotc configure -state normal
    $xth(ctrl,me,point).rot configure -state normal
    $xth(ctrl,me,point).xszc configure -state normal
    $xth(ctrl,me,point).xsz configure -state normal
    $xth(ctrl,me,point).yszc configure -state normal
    $xth(ctrl,me,point).ysz configure -state normal
    $xth(ctrl,me,point).theme configure -state normal
    $xth(ctrl,me,point).themetype configure -state normal
    
    set xth(ctrl,me,point,x) $xth(me,cmds,$id,x)
    set xth(ctrl,me,point,y) $xth(me,cmds,$id,y)
    set xth(ctrl,me,point,type) $xth(me,cmds,$id,type)
    set xth(ctrl,me,point,name) $xth(me,cmds,$id,name)
    set xth(ctrl,me,point,opts) $xth(me,cmds,$id,options)
    set at [lindex $xth(me,themes,list) $xth(me,acttheme)]
    set tx [lsearch -exact $xth(me,themes,$at,point,hidelist) $xth(me,cmds,$id,type)]
    if {$tx < 0} {
      set xth(ctrl,me,point,themetype) {}
    } else {
      set xth(ctrl,me,point,themetype) [lindex $xth(me,themes,$at,point,showlist) $tx]
    }
    
    set xth(ctrl,me,point,rot) $xth(me,cmds,$id,rotation)
    if {[string length $xth(me,cmds,$id,rotation)] > 0} {
      set xth(ctrl,me,point,rotid) 1
    } else {
      set xth(ctrl,me,point,rotid) 0
    }

    set xth(ctrl,me,point,xs) $xth(me,cmds,$id,xsize)
    if {[string length $xth(me,cmds,$id,xsize)] > 0} {
      set xth(ctrl,me,point,xsid) 1
    } else {
      set xth(ctrl,me,point,xsid) 0
    }

    set xth(ctrl,me,point,ys) $xth(me,cmds,$id,ysize)
    if {[string length $xth(me,cmds,$id,ysize)] > 0} {
      set xth(ctrl,me,point,ysid) 1
    } else {
      set xth(ctrl,me,point,ysid) 0
    }
    
    xth_me_cmds_show_point_xctrl $id
    xth_me_prev_cmd $xth(me,cmds,$id,data)
    
  } else {
  
    set xth(ctrl,me,point,x) {}
    set xth(ctrl,me,point,y) {}
    set xth(ctrl,me,point,type) $xth(me,dflt,point,type)
    set xth(ctrl,me,point,name) {}
    set xth(ctrl,me,point,opts) $xth(me,dflt,point,options)

    set xth(ctrl,me,point,rot) $xth(me,dflt,point,rotation)
    if {[string length $xth(me,dflt,point,rotation)] > 0} {
      set xth(ctrl,me,point,rotid) 1
    } else {
      set xth(ctrl,me,point,rotid) 0
    }

    set xth(ctrl,me,point,xs) $xth(me,dflt,point,xsize)
    if {[string length $xth(me,dflt,point,xsize)] > 0} {
      set xth(ctrl,me,point,xsid) 1
    } else {
      set xth(ctrl,me,point,xsid) 0
    }

    set xth(ctrl,me,point,ys) $xth(me,dflt,point,ysize)
    if {[string length $xth(me,dflt,point,ysize)] > 0} {
      set xth(ctrl,me,point,ysid) 1
    } else {
      set xth(ctrl,me,point,ysid) 0
    }

    $xth(ctrl,me,point).posl configure -state disabled
    $xth(ctrl,me,point).posx configure -state disabled
    $xth(ctrl,me,point).posy configure -state disabled
    $xth(ctrl,me,point).upd configure -state disabled
    $xth(ctrl,me,point).typl configure -state disabled
    $xth(ctrl,me,point).theme configure -state disabled
    $xth(ctrl,me,point).themetype configure -state disabled
    $xth(ctrl,me,point).typ configure -state disabled
    $xth(ctrl,me,point).namel configure -state disabled
    $xth(ctrl,me,point).name configure -state disabled
    $xth(ctrl,me,point).optl configure -state disabled
    $xth(ctrl,me,point).opt configure -state disabled
    $xth(ctrl,me,point).rotc configure -state disabled
    $xth(ctrl,me,point).rot configure -state disabled
    $xth(ctrl,me,point).xszc configure -state disabled
    $xth(ctrl,me,point).xsz configure -state disabled
    $xth(ctrl,me,point).yszc configure -state disabled
    $xth(ctrl,me,point).ysz configure -state disabled
    
    xth_me_cmds_hide_point_xctrl  
  }
}


proc xth_me_cmds_update_point_vars {id} {

  global xth
  set xth(ctrl,me,point,x) $xth(me,cmds,$id,x)
  set xth(ctrl,me,point,y) $xth(me,cmds,$id,y)
  set xth(ctrl,me,point,type) $xth(me,cmds,$id,type)
  set xth(ctrl,me,point,name) $xth(me,cmds,$id,name)
  set xth(ctrl,me,point,opts) $xth(me,cmds,$id,options)
  set xth(ctrl,me,point,rot) $xth(me,cmds,$id,rotation)
  set at [lindex $xth(me,themes,list) $xth(me,acttheme)]
  set tx [lsearch -exact $xth(me,themes,$at,point,hidelist) $xth(me,cmds,$id,type)]
  if {$tx < 0} {
    set xth(ctrl,me,point,themetype) {}
  } else {
    set xth(ctrl,me,point,themetype) [lindex $xth(me,themes,$at,point,showlist) $tx]
  }
    
  if {[string length $xth(me,cmds,$id,rotation)] > 0} {
    set xth(ctrl,me,point,rotid) 1
  } else {
    set xth(ctrl,me,point,rotid) 0
  }
  
  set xth(ctrl,me,point,xs) $xth(me,cmds,$id,xsize)
  if {[string length $xth(me,cmds,$id,xsize)] > 0} {
    set xth(ctrl,me,point,xsid) 1
  } else {
    set xth(ctrl,me,point,xsid) 0
  }
  
  set xth(ctrl,me,point,ys) $xth(me,cmds,$id,ysize)
  if {[string length $xth(me,cmds,$id,ysize)] > 0} {
    set xth(ctrl,me,point,ysid) 1
  } else {
    set xth(ctrl,me,point,ysid) 0
  }

  xth_me_cmds_move_point_xctrl $id
  xth_me_cmds_show_point_fill_xctrl $id
  
}

proc xth_me_cmds_update_area {id ntype nopt} {

  global xth
  
  set otype $xth(me,cmds,$id,type)
  set oopt $xth(me,cmds,$id,options)

  regsub {^\s*} $nopt "" nopt
  regsub {\s*$} $nopt "" nopt

  if {[string length $ntype] < 1} {
    set ntype $otype
  }
  if {(![string equal $ntype $otype]) && [string equal $nopt $oopt]} {
    set nopt {}
  }
  
  if {![string equal "$ntype $nopt" "$otype $oopt"]} {
    xth_me_unredo_action [mc "area changes"] \
      "xth_me_cmds_update_area $id $otype [list $oopt]; xth_me_cmds_select $id" \
      "xth_me_cmds_update_area $id $ntype [list $nopt]; xth_me_cmds_select $id"
    set xth(me,cmds,$id,type) $ntype
    set xth(me,cmds,$id,options) $nopt
    xth_me_cmds_update_area_data $id
    xth_me_cmds_update_list $id
  }

}




proc xth_me_cmds_update_point {id nx ny ntype nname nopt nrot nxs nys} {

  global xth
  
  set ox $xth(me,cmds,$id,x)
  set oy $xth(me,cmds,$id,y)
  set otype $xth(me,cmds,$id,type)
  set oname $xth(me,cmds,$id,name)
  set oopt $xth(me,cmds,$id,options)
  set orot $xth(me,cmds,$id,rotation)
  set oxs $xth(me,cmds,$id,xsize)
  set oys $xth(me,cmds,$id,ysize)

  regsub {^\s*} $nopt "" nopt
  regsub {\s*$} $nopt "" nopt

  if {[string length $ntype] < 1} {
    set ntype $otype
  }
  if {(![string equal $ntype $otype]) && [string equal $nopt $oopt]} {
    set nopt {}
    set nrot {}
    set nxs {}
    set nys {}
  }
  
  if {[string length $nrot] > 0} {
    if {[catch {expr $nrot}]} {
      set nrot $orot
    } elseif {($nrot < 0.0) || ($nrot >= 360.0)} {
      set nrot $orot
    }
  }
  
  if {[catch {expr $nx}]} {
    set nx $ox
  }
  if {[catch {expr $ny}]} {
    set ny $oy
  }
  
  if {[string length $nxs] > 0} {
    if {[catch {expr $nxs}]} {
      set nxs $oxs
    } elseif {$nxs < 0.0} {
      set nxs $oxs
    }
  }
  if {[string length $nys] > 0} {
    if {[catch {expr $nys}]} {
      set nys $oys
    } elseif {$nys < 0.0} {
      set nys $oys
    }
  }
#  if {([string length $nys] > 0) && ([string length $nxs] == 0)} {
#    set nxs $nys
#    set nys {}
#  }
  
  if {![string equal "$nx $ny $ntype $nname $nopt $nrot $nxs $nys" "$ox $oy $otype $oname $oopt $orot $oxs $oys"]} {
    xth_me_unredo_action [mc "point changes"] \
      "xth_me_cmds_update_point $id $ox $oy $otype [list $oname] [list $oopt] [list $orot] [list $oxs] [list $oys]; xth_me_cmds_select $id" \
      "xth_me_cmds_update_point $id $nx $ny $ntype [list $nname] [list $nopt] [list $nrot] [list $nxs] [list $nys]; xth_me_cmds_select $id"
    set xth(me,cmds,$id,x) $nx
    set xth(me,cmds,$id,y) $ny
    set xth(me,cmds,$id,type) $ntype
    set xth(me,cmds,$id,name) $nname
    set xth(me,cmds,$id,options) $nopt
    set xth(me,cmds,$id,rotation) $nrot
    set xth(me,cmds,$id,xsize) $nxs
    set xth(me,cmds,$id,ysize) $nys
    $xth(me,can) coords pt$id [xth_me_cmds_calc_point_coords $id]
    xth_me_cmds_update_point_data $id
    xth_me_cmds_update_list $id
  }
  
}


proc xth_me_cmds_calc_point_coords {id} {
  global xth
  set x1 [expr [xth_me_real2canx $xth(me,cmds,$id,x)] - $xth(gui,me,point,psize)]
  set y1 [expr [xth_me_real2cany $xth(me,cmds,$id,y)] - $xth(gui,me,point,psize)]
  set x2 [expr [xth_me_real2canx $xth(me,cmds,$id,x)] + $xth(gui,me,point,psize)]
  set y2 [expr [xth_me_real2cany $xth(me,cmds,$id,y)] + $xth(gui,me,point,psize)]
  return [list $x1 $y1 $x2 $y2]
 # return [list \
 #   [expr [xth_me_real2canx $xth(me,cmds,$id,x)] - $xth(gui,me,point,psize)] \
 #   [expr [xth_me_real2cany $xth(me,cmds,$id,y)] - $xth(gui,me,point,psize)] \
 #   [expr [xth_me_real2canx $xth(me,cmds,$id,x)] + $xth(gui,me,point,psize)] \
 #   [expr [xth_me_real2cany $xth(me,cmds,$id,y)] + $xth(gui,me,point,psize)]
 # ]
}


proc xth_me_cmds_draw_point {id} {
  global xth
  $xth(me,can) create oval [xth_me_cmds_calc_point_coords $id] \
    -tags "command point pt$id" -width 1 -outline blue -fill blue
  $xth(me,can) bind pt$id  "$xth(me,can) itemconfigure pt$id -fill cyan; xth_status_bar_push me; xth_status_bar_status me \"\$xth(me,cmds,$id,listix): \$xth(me,cmds,$id,sbar)\""
  $xth(me,can) bind pt$id  "$xth(me,can) itemconfigure pt$id -fill \[$xth(me,can) itemcget pt$id -outline\]; xth_status_bar_pop me"
  $xth(me,can) bind pt$id <1> "xth_me_cmds_click $id pt$id \$xth(me,cmds,$id,x) \$xth(me,cmds,$id,y) %x %y"
  $xth(me,can) bind pt$id <$xth(gui,rmb)> "xth_me_cmds_special_select $id %x %y"  
  $xth(me,can) bind pt$id  "xth_me_cmds_special_select $id %x %y"  
  $xth(me,can) bind pt$id <$xth(kb_control)-1> "xth_me_cmds_click_area pt$id %x %y"
}


proc xth_me_cmds_special_select {id x y} {
  global xth
  if {[llength $id] == 2} {
    set pid [lindex $id 1]
    set id [lindex $id 0]
  } else {
    set pid 0
  }
  $xth(me,can) raise point
  if {$xth(me,cmds,selid) != $id} {
    xth_me_cmds_select "$id $pid"
    if {$pid != 0} {
      xth_ctrl_scroll_to me line
      xth_ctrl_maximize me line
      xth_ctrl_maximize me linept
    } else {
      xth_ctrl_scroll_to me point
      xth_ctrl_maximize me point

    }
  } elseif {($xth(me,cmds,$id,ct) == 3) && ($xth(me,cmds,selpid) != $pid)} {
    xth_me_cmds_select_linept $id $pid
    xth_ctrl_scroll_to me line
    xth_ctrl_maximize me line
    xth_ctrl_maximize me linept
  } else {
    $xth(me,can) dtag all nearest
    if {$pid != 0} {
      set utag pt$id.$pid
    } else {
      set utag pt$id
    }
    $xth(me,can) addtag nearest closest [$xth(me,can) canvasx $x] [$xth(me,can) canvasy $y] 0 $utag
    set tgs [$xth(me,can) itemcget nearest -tags]
    #puts $tgs
    if {[regexp "(^|\\s)pt(\\d+)($|\\s)" $tgs d1 d2 nid]} {
      #puts "select $nid"
      xth_me_cmds_select $nid
      xth_ctrl_scroll_to me point
      xth_ctrl_maximize me point
      catch {$xth(me,can) lower $utag point}
      catch {$xth(me,can) raise $utag line}
    } elseif {[regexp "(^|\\s)pt(\\d+)\.(\\d+)($|\\s)" $tgs d1 d2 nid npid]} {
      #puts "select $nid $npid"
      xth_me_cmds_select "$nid $npid"
      if {$npid != 0} {
	xth_ctrl_scroll_to me line
	xth_ctrl_maximize me line
	xth_ctrl_maximize me linept
      } else {
	xth_ctrl_scroll_to me point
	xth_ctrl_maximize me point
      }
      catch {$xth(me,can) lower $utag point}
      catch {$xth(me,can) raise $utag line}
    }
  }
}


proc xth_me_cmds_start_point_drag {id x y} {
  global xth
  xth_me_cmds_update {}
  xth_me_cmds_drag_point_config_xctrl $id
  set xth(me,point,drag_mx) $x
  set xth(me,point,drag_my) $y
  set xth(me,point,drag_px) $xth(me,cmds,$id,x)
  set xth(me,point,drag_py) $xth(me,cmds,$id,y)
  set xth(me,point,drag_benter) [$xth(me,can) bind pt$id ]
  set xth(me,point,drag_bleave) [$xth(me,can) bind pt$id ]
  $xth(me,can) bind pt$id  ""
  $xth(me,can) bind pt$id  ""
  $xth(me,can) itemconfigure pt$id -fill {}
  $xth(me,can) bind pt$id  "xth_me_cmds_point_drag $id %x %y 1"
  $xth(me,can) bind pt$id  "xth_me_cmds_end_point_drag $id %x %y 1"
  $xth(me,can) bind pt$id <$xth(kb_control)-B1-Motion> "xth_me_cmds_point_drag $id %x %y 0"
  $xth(me,can) bind pt$id <$xth(kb_control)-B1-ButtonRelease> "xth_me_cmds_end_point_drag $id %x %y 0"
  $xth(me,can) configure -cursor {}
}


proc xth_me_cmds_drag_to {id pid x y} {
  global xth
  $xth(me,can) dtag all nearest
  if {[string length $pid] > 0} {
    set stt pt$id.$pid
  } else {
    set stt pt$id
  }
  $xth(me,can) addtag nearest closest [$xth(me,can) canvasx $x] \
    [$xth(me,can) canvasy $y] 0 $stt
  set tgs [$xth(me,can) itemcget nearest -tags]
  if {[regexp "(^|\\s)pt(\\d+)($|\\s)" $tgs d1 d2 nid]} {
    # je vybraty bod, nastavime suradnice podla neho
    set nx $xth(me,cmds,$nid,x)
    set ny $xth(me,cmds,$nid,y)
    return [list 1 $nx $ny]
  } elseif {[regexp "(^|\\s)pt(\\d+)\.(\\d+)($|\\s)" $tgs d1 d2 nid npid]} {
    # je vybraty bod na ciare, nastavime suradnice podla neho
    set nx $xth(me,cmds,$nid,$npid,x)
    set ny $xth(me,cmds,$nid,$npid,y)
    return [list 1 $nx $ny]
  } elseif {[regexp {(^|\s)XVIstI(\d+)S(\d+)} $tgs d1 d2 imgx sti]} {
    set nx [lindex [lindex $xth(me,imgs,$imgx,XVIstationsX) $sti] 0]
    set ny [lindex [lindex $xth(me,imgs,$imgx,XVIstationsX) $sti] 1]
    return [list 1 $nx $ny]
  }
  return 0
}


proc xth_me_cmds_point_drag {id x y dragto} {
  global xth
  set nx [expr $xth(me,point,drag_px) - [expr double($xth(me,point,drag_mx) - $x) * 100.0 / $xth(me,zoom)]]
  set ny [expr $xth(me,point,drag_py) + [expr double($xth(me,point,drag_my) - $y) * 100.0 / $xth(me,zoom)]]
  set dts 0
  if $dragto {
    set dtl [xth_me_cmds_drag_to $id {} $x $y]
    if {[lindex $dtl 0]} {
      set nx [lindex $dtl 1]
      set ny [lindex $dtl 2]
      set dts 1
    }
  }
  if $dts {
    $xth(me,can) itemconfigure pt$id -fill cyan
  } else {
    $xth(me,can) itemconfigure pt$id -fill {}
  }
  set xth(me,cmds,$id,x) $nx
  set xth(me,cmds,$id,y) $ny
  set xth(ctrl,me,point,x) $nx
  set xth(ctrl,me,point,y) $ny
  xth_me_cmds_move_point_xctrl $id
  xth_me_cmds_move_point_fill_xctrl $id $xth(me,cmds,$id,rotation) $xth(me,cmds,$id,xsize) $xth(me,cmds,$id,ysize) 
  $xth(me,can) coords pt$id [xth_me_cmds_calc_point_coords $id]
  update idletasks
}


proc xth_me_cmds_end_point_drag {id x y dragto} {
  global xth
  xth_me_cmds_point_drag $id $x $y $dragto
  set xth(me,cmds,$id,x) $xth(me,point,drag_px)
  set xth(me,cmds,$id,y) $xth(me,point,drag_py)
  $xth(me,can) bind pt$id  ""
  $xth(me,can) bind pt$id  ""
  $xth(me,can) bind pt$id <$xth(kb_control)-B1-Motion> ""
  $xth(me,can) bind pt$id <$xth(kb_control)-B1-ButtonRelease> ""
  $xth(me,can) bind pt$id  $xth(me,point,drag_benter)
  $xth(me,can) bind pt$id  $xth(me,point,drag_bleave)
  $xth(me,can) itemconfigure pt$id -fill cyan
  $xth(me,can) configure -cursor crosshair
  set xth(me,unredola) "point dragging"
  xth_me_cmds_update {}
  xth_me_cmds_end_drag_point_config_xctrl $id
}


proc xth_me_cmds_configure_point_fill_xctrl {id sid} {
  global xth
  if {[string length $id] > 0} {
    ## DISABLED
    # $xth(me,can) itemconfigure $xth(me,canid,point,fx) -state normal
    $xth(me,can) bind $xth(me,canid,point,fx) <1> \
      "xth_me_cmds_start_point_fdrag $xth(me,canid,point,fx) $id x %x %y"
    $xth(me,can) bind $xth(me,canid,point,fx)  \
      "$xth(me,can) itemconfigure $xth(me,canid,point,fx) -fill #ffda00"
    $xth(me,can) bind $xth(me,canid,point,fx)  \
      "$xth(me,can) itemconfigure $xth(me,canid,point,fx) -fill red"
    $xth(me,can) itemconfigure $xth(me,canid,point,fy) -state normal
    $xth(me,can) bind $xth(me,canid,point,fy) <1> \
      "xth_me_cmds_start_point_fdrag $xth(me,canid,point,fy) $id y %x %y"
    $xth(me,can) bind $xth(me,canid,point,fy)  \
      "$xth(me,can) itemconfigure $xth(me,canid,point,fy) -fill #ffda00"
    $xth(me,can) bind $xth(me,canid,point,fy)  \
      "$xth(me,can) itemconfigure $xth(me,canid,point,fy) -fill red"
    #$xth(me,can) itemconfigure $xth(me,canid,point,fxc) -state normal
    #$xth(me,can) bind $xth(me,canid,point,fxc)  \
    #  "$xth(me,can) itemconfigure $xth(me,canid,point,fxc) -fill yellow"
    #$xth(me,can) bind $xth(me,canid,point,fxc)  \
    #  "$xth(me,can) itemconfigure $xth(me,canid,point,fxc) -fill red"
    #$xth(me,can) bind $xth(me,canid,point,fxc) <1> \
    #  "xth_me_cmds_start_point_fdrag $xth(me,canid,point,fxc) $id x %x %y"
    #$xth(me,can) itemconfigure $xth(me,canid,point,fyc) -state normal
    #$xth(me,can) bind $xth(me,canid,point,fyc)  \
    #  "$xth(me,can) itemconfigure $xth(me,canid,point,fyc) -fill yellow"
    #$xth(me,can) bind $xth(me,canid,point,fyc)  \
    #  "$xth(me,can) itemconfigure $xth(me,canid,point,fyc) -fill red"
    #$xth(me,can) bind $xth(me,canid,point,fyc) <1> \
    #  "xth_me_cmds_start_point_fdrag $xth(me,canid,point,fyc) $id y %x %y"
    if {$sid} {
      $xth(me,can) itemconfigure $xth(me,canid,point,fill) -state normal
      #$xth(me,can) bind $xth(me,canid,point,fill) <1> \
      #  "xth_me_cmds_start_point_fdrag $xth(me,canid,point,fill) $id z %x %y"
    } else {
      $xth(me,can) itemconfigure $xth(me,canid,point,fill) -state hidden
    }
  } else {
      # $xth(me,can) bind $xth(me,canid,point,fxc)  ""
      # $xth(me,can) bind $xth(me,canid,point,fxc)  ""
      # $xth(me,can) bind $xth(me,canid,point,fyc)  ""
      # $xth(me,can) bind $xth(me,canid,point,fyc)  ""
      $xth(me,can) bind $xth(me,canid,point,fx) <1> ""
      $xth(me,can) bind $xth(me,canid,point,fy) <1> ""
      $xth(me,can) bind $xth(me,canid,point,fx)  ""
      $xth(me,can) bind $xth(me,canid,point,fx)  ""
      $xth(me,can) bind $xth(me,canid,point,fy)  ""
      $xth(me,can) bind $xth(me,canid,point,fy)  ""
      #$xth(me,can) bind $xth(me,canid,point,fill) <1> ""
      $xth(me,can) itemconfigure ptfill -state hidden
  }
}


proc xth_me_cmds_move_point_fill_xctrl {id rot sx sy} {

  global xth
  
  if {[string length $rot] > 0} {
    set rot [expr double($rot) / 180 * 3.14159265359]
  } else {
    set rot 0.0
  }

  set setfsx 0
  if {[string length $sx] > 0} {
    set sx [expr $sx * 0.01 * $xth(me,zoom)]
    set fsx $sx
  } else {
    set sx 30.0
    set setfsx 1
  }

#  if {[string length $sy] > 0} {
#    set sy [expr $sy * 0.01 * $xth(me,zoom)]
#  } else {
#    if {[string length $sx] > 0} {
#      set sy $sx
#    } else {
#      set sy 30.0
#    }
#  }

  if {[string length $sy] > 0} {
    set sy [expr $sy * 0.01 * $xth(me,zoom)]
    set fsy $sy
  } else {
    set sy 30.0
    set fsy $sx
  }

  if {$setfsx} {
    set fsx $sy
  }

  set x [xth_me_real2canx $xth(me,cmds,$id,x)]
  set y [xth_me_real2cany $xth(me,cmds,$id,y)]
  set ca [expr cos($rot)]
  set sa [expr sin($rot)]
  
  set xvx [expr $ca * $sx]
  set xvy [expr $sa * $sx]
  set yvx [expr $sa * $sy]
  set yvy [expr - $ca * $sy]

  set fxvx [expr $ca * $fsx]
  set fxvy [expr $sa * $fsx]
  set fyvx [expr $sa * $fsy]
  set fyvy [expr - $ca * $fsy]
  
  
  $xth(me,can) coords $xth(me,canid,point,fx) $x $y [expr $x + $xvx] [expr $y + $xvy]
  set xth(me,canid,point,fx_tox) [expr $x + $xvx]
  set xth(me,canid,point,fx_toy) [expr $y + $xvy]
  #$xth(me,can) coords $xth(me,canid,point,fxc) [expr $x + $xvx - $xth(gui,me,point,cpsize)] [expr $y + $xvy - $xth(gui,me,point,cpsize)] [expr $x + $xvx + $xth(gui,me,point,cpsize)] [expr $y + $xvy + $xth(gui,me,point,cpsize)]
  $xth(me,can) coords $xth(me,canid,point,fy) $x $y [expr $x + $yvx] [expr $y + $yvy]
  set xth(me,canid,point,fy_tox) [expr $x + $yvx]
  set xth(me,canid,point,fy_toy) [expr $y + $yvy]
  #$xth(me,can) coords $xth(me,canid,point,fyc) [expr $x + $yvx - $xth(gui,me,point,cpsize)] [expr $y + $yvy - $xth(gui,me,point,cpsize)] [expr $x + $yvx + $xth(gui,me,point,cpsize)] [expr $y + $yvy + $xth(gui,me,point,cpsize)]
  $xth(me,can) coords $xth(me,canid,point,fill) [expr $x + $fxvx + $fyvx] [expr $y + $fxvy + $fyvy] \
    [expr $x + $fxvx - $fyvx] [expr $y + $fxvy - $fyvy] [expr $x - $fxvx - $fyvx] [expr $y - $fxvy - $fyvy] \
    [expr $x - $fxvx + $fyvx] [expr $y - $fxvy + $fyvy]

  update idletasks    
}


proc xth_me_cmds_point_change_state {} {

  global xth  
  set newrotid $xth(ctrl,me,point,rotid)
  set newxsid $xth(ctrl,me,point,xsid)
  set newysid $xth(ctrl,me,point,ysid)

  xth_me_cmds_update {}

  if {$newrotid && \
    ([string length $xth(ctrl,me,point,rot)] < 1)} {
    set xth(ctrl,me,point,rot) 0.0
  } elseif {(! $newrotid) && \
    ([string length $xth(ctrl,me,point,rot)] > 0)} {
    set xth(ctrl,me,point,rot) {}
  }

  if {$newxsid && \
    ([string length $xth(ctrl,me,point,xs)] < 1)} {
    set xth(ctrl,me,point,xs) 40.0
  } elseif {(! $newxsid) && \
    ([string length $xth(ctrl,me,point,xs)] > 0)} {
    set xth(ctrl,me,point,xs) {}
#    set xth(ctrl,me,point,ys) {}
#    set xth(ctrl,me,point,ysid) 0
  }

  if {$newysid && \
    ([string length $xth(ctrl,me,point,ys)] < 1)} {
    set xth(ctrl,me,point,ys) 40.0
  } elseif {(! $newysid) && \
    ([string length $xth(ctrl,me,point,ys)] > 0)} {
    set xth(ctrl,me,point,ys) {}
  }

#  if {$newysid && \
#      ([string length $xth(ctrl,me,point,ys)] < 1) && \
#      $newxsid} {
#    set xth(ctrl,me,point,ys) 40.0
#  } elseif {((! $newysid) && \
#      ([string length $xth(ctrl,me,point,ys)] > 0)) || \
#      (! $newxsid)} {
#    set xth(ctrl,me,point,ys) {}
#    set xth(ctrl,me,point,ysid) 0    
#  }
  
  xth_me_cmds_update {}
  
}


proc xth_me_cmds_start_point_fdrag {tagOrId id ax x y} {
  global xth
  xth_me_cmds_update {}
  #if {[string equal $ax z]} {
  #  set distx [expr hypot([$xth(me,can) canvasx $x] - $xth(me,canid,point,fx_tox), \
  #    [$xth(me,can) canvasy $y] - $xth(me,canid,point,fx_toy))]
  #  set disty [expr hypot([$xth(me,can) canvasx $x] - $xth(me,canid,point,fy_tox), \
  #    [$xth(me,can) canvasy $y] - $xth(me,canid,point,fy_toy))]
  #  if {$disty < $distx} {
  #    set ax y
  #  } else {
  #    set ax x
  #  }
  #}
  set dx [expr [xth_me_can2realx [$xth(me,can) canvasx $x]] - $xth(me,cmds,$id,x)]
  set dy [expr [xth_me_can2realy [$xth(me,can) canvasy $y]] - $xth(me,cmds,$id,y)] 
  if {[string length $xth(me,cmds,$id,rotation)] == 0} {
    set xth(me,point,fdrag_rot) 0
  } else {
    set xth(me,point,fdrag_rot) 1
    set xth(me,point,fdrag_orot) [expr atan2($dy,$dx)]
  }
  if {([string length $xth(me,cmds,$id,xsize)] == 0) && ([string length $xth(me,cmds,$id,ysize)] == 0)} {
    set xth(me,point,fdrag_size) 0
  } elseif {[string equal $ax y] && ([string length $xth(me,cmds,$id,ysize)] == 0)} {
    set xth(me,point,fdrag_size) 0
  } elseif {[string equal $ax x] && ([string length $xth(me,cmds,$id,xsize)] == 0)} {
    set xth(me,point,fdrag_size) 0
  } else {
    set xth(me,point,fdrag_ax) $ax
    set xth(me,point,fdrag_size) 1
    set xth(me,point,fdrag_osize) [expr hypot($dy,$dx)]
  }
  $xth(me,can) itemconfigure $tagOrId -fill #ffda00
  set xth(me,point,fdrag_benter) [$xth(me,can) bind $tagOrId ]
  set xth(me,point,fdrag_bleave) [$xth(me,can) bind $tagOrId ]
  $xth(me,can) bind $tagOrId  ""
  $xth(me,can) bind $tagOrId  ""
  $xth(me,can) bind $tagOrId  "xth_me_cmds_point_fdrag $id %x %y"
  $xth(me,can) bind $tagOrId  "xth_me_cmds_end_point_fdrag $tagOrId $id %x %y"
  $xth(me,can) configure -cursor {}
}

proc xth_me_cmds_point_fdrag {id x y} {
  global xth
  set dx [expr [xth_me_can2realx [$xth(me,can) canvasx $x]] - $xth(me,cmds,$id,x)]
  set dy [expr [xth_me_can2realy [$xth(me,can) canvasy $y]] - $xth(me,cmds,$id,y)] 
  if $xth(me,point,fdrag_rot) {
    set rot [expr double($xth(me,cmds,$id,rotation)) - 180.0 / 3.14159265359 * (atan2($dy,$dx) - $xth(me,point,fdrag_orot))]
    if {$rot < 0.0} {
      set rot [expr 360.0 + $rot]
    } elseif {$rot >= 360.0} {
      set rot [expr $rot - 360.0]
    }
    set rot [format "%.1f" $rot]
  } else {
    set rot $xth(me,cmds,$id,rotation)
  }
  set xth(ctrl,me,point,rot) $rot
  if {$xth(me,point,fdrag_size)} {
    set cs [expr hypot($dy,$dx)]
    switch $xth(me,point,fdrag_ax) {
      x {
	set ns [expr $xth(me,cmds,$id,xsize) - $xth(me,point,fdrag_osize) + $cs]
	if {$ns <= 0.0} {set ns 0.1}
	set ns [format "%.1f" $ns]
	set xth(ctrl,me,point,xs) $ns
      }
      y {
	set ns [expr $xth(me,cmds,$id,ysize) - $xth(me,point,fdrag_osize) + $cs]
	if {$ns <= 0.0} {set ns 0.1}
	set ns [format "%.1f" $ns]
	set xth(ctrl,me,point,ys) $ns
      }
    }
  }
  xth_me_cmds_move_point_fill_xctrl $id $xth(ctrl,me,point,rot) $xth(ctrl,me,point,xs) $xth(ctrl,me,point,ys)
}

proc xth_me_cmds_end_point_fdrag {tagOrId id x y} {
  global xth
  xth_me_cmds_point_fdrag $id $x $y
  $xth(me,can) configure -cursor crosshair
  if {$xth(me,point,fdrag_size)} {
    set xth(me,unredola) "point resizing"
  } else {
    set xth(me,unredola) "point rotation"
  }
  $xth(me,can) bind $tagOrId  ""
  $xth(me,can) bind $tagOrId  ""
  if {[lsearch [$xth(me,can) itemcget $tagOrId -tags] current] > -1} {
    $xth(me,can) itemconfigure $tagOrId -fill #ffda00
  }
  $xth(me,can) bind $tagOrId  $xth(me,point,fdrag_benter)
  $xth(me,can) bind $tagOrId  $xth(me,point,fdrag_bleave)
  xth_me_cmds_update {}
}

proc xth_me_cmds_drag_point_config_xctrl {id} {
  global xth
  set xth(me,point,drag_stsel) [$xth(me,can) itemcget $xth(me,canid,point,selector) -state]
  $xth(me,can) itemconfigure $xth(me,canid,point,selector) -state hidden
  set xth(me,point,drag_stfx) [$xth(me,can) itemcget $xth(me,canid,point,fx) -state]
  $xth(me,can) itemconfigure $xth(me,canid,point,fx) -width 1 -arrow none
  #$xth(me,can) itemconfigure $xth(me,canid,point,fxc) -state hidden
  set xth(me,point,drag_stfy) [$xth(me,can) itemcget $xth(me,canid,point,fy) -state]
  $xth(me,can) itemconfigure $xth(me,canid,point,fy) -width 1 -arrow none
  #$xth(me,can) itemconfigure $xth(me,canid,point,fyc) -state hidden
  $xth(me,can) itemconfigure $xth(me,canid,point,fill) -fill {} -outline red
}


proc xth_me_cmds_end_drag_point_config_xctrl {id} {
  global xth
  $xth(me,can) itemconfigure $xth(me,canid,point,selector) -state $xth(me,point,drag_stsel)
  $xth(me,can) itemconfigure $xth(me,canid,point,fx) -width 5 -arrow last
  #$xth(me,can) itemconfigure $xth(me,canid,point,fxc) -state $xth(me,point,drag_stfx)
  $xth(me,can) itemconfigure $xth(me,canid,point,fy) -width 5 -arrow last
  #$xth(me,can) itemconfigure $xth(me,canid,point,fyc) -state $xth(me,point,drag_stfy)
  $xth(me,can) itemconfigure $xth(me,canid,point,fill) -fill red -outline {}
}

proc xth_me_cmds_select_nopoint {} {
  global xth
  set id $xth(me,cmds,selid)
  set ix [lsearch $xth(me,cmds,xlist) $id]
  set xl [llength $xth(me,cmds,xlist)]
  for {set ii $ix} {$ii < $xl} {incr ii} {
    set nid [lindex $xth(me,cmds,xlist) $ii]
    switch $xth(me,cmds,$nid,ct) {
      3 {
	xth_me_cmds_select "$nid 0"
	break
      }
      2 {}
      default {
	xth_me_cmds_select $nid
	break
      }
    }
  }
}


proc xth_me_get_center {} {
  global xth
  set sr [$xth(me,can) cget -scrollregion]
  set xw [$xth(me,can) xview]
  set yw [$xth(me,can) yview]
  set xx [expr double([lindex $xw 1] + [lindex $xw 0]) / 2.0]
  set yy [expr double([lindex $yw 1] + [lindex $yw 0]) / 2.0]
  set tw [expr [lindex $sr 2] - [lindex $sr 0]]
  set th [expr [lindex $sr 3] - [lindex $sr 1]]        
  set x [xth_me_can2realx [expr [lindex $sr 0] + $xx * $tw]]
  set y [xth_me_can2realy [expr [lindex $sr 1] + $yy * $th]]
	return "$x $y"
}

proc xth_me_cmds_scrap_scale_start {} {
  global xth
  xth_me_cmds_update {}
  set xth(me,cmds,scrap_scale) 1
  xth_me_cmds_set_mode 4
}


proc xth_me_cmds_scrap_sketch_start {} {
  global xth
  xth_me_cmds_update {}
  xth_me_cmds_set_mode 5
}


proc xth_me_cmds_scrap_scale {x y} {
  global xth
  xth_me_cmds_update {}
  set rx $x
  set ry $y
  switch $xth(me,cmds,scrap_scale) {
    1 {
      set xth(ctrl,me,scrap,px1) $rx
      set xth(ctrl,me,scrap,py1) $ry
      incr xth(me,cmds,scrap_scale)
      xth_me_cmds_update {}
      focus $xth(ctrl,me,scrap).scx1r
    }
    2 {
      set xth(ctrl,me,scrap,px2) $rx
      set xth(ctrl,me,scrap,py2) $ry
      set xth(me,cmds,scrap_scale) 0
      xth_me_cmds_update {}
      focus $xth(ctrl,me,scrap).scx2r
      xth_me_cmds_set_mode 0
    }
  }
}


proc xth_me_cmds_scrap_sketch_insert {tagOrId} {
  global xth
  xth_me_cmds_set_mode 0 
  if {[string length $tagOrId] == 0} return
  xth_me_cmds_update {}
  set err 1
  set tags [$xth(me,can) itemcget $tagOrId -tags]
  foreach ix $xth(me,imgs,xlist) {
    if {[lsearch -exact $tags $xth(me,imgs,$ix,image)] > -1} {
      if {($xth(me,imgs,$ix,XVI) == 0) && ([string length $xth(me,imgs,$ix,ffname)] > 0)} {
	  set sk $xth(me,imgs,$ix,name)
	  if {[string first " " $sk] > -1} {
	    set sk "\[$sk\]"
	  }
	  set skpos $xth(me,imgs,$ix,position)
	  set imgh [image height $xth(me,imgs,$ix,image)]
	  set sk "$sk [lindex $skpos 0] [expr [lindex $skpos 1] - $imgh]"
	  xth_me_cmds_insert_scrap_sketch $sk
	  set err 0
      }
    }
  }
  if {$err} {
    MessageDlg $xth(gui,message) -parent $xth(gui,main) \
      -icon error -type ok \
      -message [mc "Scrap sketch not inserted."] \
      -font $xth(gui,lfont)
  }
}


proc xth_me_cmds_insert_scrap_sketch {sk} {

  global xth
  if {$xth(me,unredook)} {
    xth_me_cmds_update {}
  }
  if {[string length $sk] == 0} {
    return;
  }
  set id $xth(me,cmds,selid)
  set lid [lindex $xth(me,cmds,$id,sklist) [$xth(ctrl,me,scrap).skll.l curselection]]
  set ix [lsearch -exact $xth(me,cmds,$id,sklist) $lid]
  set xth(me,cmds,$id,sklist) [linsert $xth(me,cmds,$id,sklist) $ix $sk]
  xth_me_cmds_update_scrap_data $id
  xth_me_prev_cmd $xth(me,cmds,$id,data)
  $xth(ctrl,me,scrap).skll.l selection clear 0 end
  $xth(ctrl,me,scrap).skll.l selection set [expr $ix + 1] [expr $ix + 1]
  $xth(ctrl,me,scrap).skll.l see [expr $ix + 1]

  xth_me_unredo_action [mc "inserting scrap sketch"] \
    "xth_me_cmds_select $id\nxth_me_cmds_delete_scrap_sketch $id [list $sk]" \
    "xth_me_cmds_select $id\nxth_me_cmds_undelete_scrap_sketch 1 $id [list $sk] $ix"
      
}


proc xth_me_cmds_delete_scrap_sketch {id lid} {

  global xth
  
  if {[string length $id] < 1} {
    set id $xth(me,cmds,selid)
  }
  if {[string length $lid] == 0} {
    set lid [lindex $xth(me,cmds,$id,sklist) [$xth(ctrl,me,scrap).skll.l curselection]]
  }
  if {[string length $lid] == 0} {
    return
  }

  if {$xth(me,unredook)} {
    xth_me_cmds_update {}
  }
  
  # odstrani ho zo zoznamu
  set ix [lsearch -exact $xth(me,cmds,$id,sklist) $lid]
  set xth(me,cmds,$id,sklist) [lreplace $xth(me,cmds,$id,sklist) $ix $ix]
  xth_me_cmds_update_scrap_data $id
  xth_me_prev_cmd $xth(me,cmds,$id,data)
  $xth(ctrl,me,ac).ll.l selection clear 0 end
  $xth(ctrl,me,ac).ll.l selection set $ix $ix
  $xth(ctrl,me,ac).ll.l see $ix
    
  xth_me_unredo_action [mc "deleting scrap sketch"] \
    "xth_me_cmds_select $id\nxth_me_cmds_undelete_scrap_sketch 0 $id [list $lid] $ix" \
    "xth_me_cmds_select $id\nxth_me_cmds_delete_scrap_sketch $id [list $lid]"
  
}




proc xth_me_cmds_undelete_scrap_sketch {cr id lid ix} {

  global xth
  set xth(me,cmds,$id,sklist) [linsert $xth(me,cmds,$id,sklist) $ix $lid]
  xth_me_cmds_update_scrap_data $id
  xth_me_prev_cmd $xth(me,cmds,$id,data)
  $xth(ctrl,me,ac).ll.l selection clear 0 end
  $xth(ctrl,me,ac).ll.l selection set [expr $ix + $cr] [expr $ix + $cr]
  $xth(ctrl,me,ac).ll.l see [expr $ix + $cr]
  
}


therion/xtherion/me_cmds2.tcl0000644000076400010400000034433311576432022017336 0ustar  userAdministrators##
## me_cmds2.tcl --
##
##     Map editor command processing 2.
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------

proc xth_me_cmds_get_option {ln opt} {
  set rxl [list [list "^\\s*$opt\\s+\\\[(\[^\\\]\]*)\\\]" "\["]\
    [list "^\\s*$opt\\s+\\\"((\\\"\\\"|\[^\\\"])+)\\\"" "\""]\
    [list "^\\s*$opt\\s+(\\S+)" {}]]
  set rln $ln
  set val {}
  set sep {}
  set res 0
  foreach rx $rxl {
    if {[regexp [lindex $rx 0] $ln dump val]} {
      regsub [lindex $rx 0] $ln {} rln
      regsub {^\s*} $rln {} rln
      set sep [lindex $rx 1]
      set res 1
      break
    }
  }
  return [list $val $rln $res]
}


proc xth_me_cmds_get_onoffauto {opt} {
  switch $opt {
    on {return 1}
    off {return 0}
    default {return -1}
  }
}


proc xth_me_cmds_get_bool {opt} {
  if {[lsearch {on 1 true yes} $opt] > -1} {
    return 1
  } else {
    return 0
  }
}


proc xth_me_cmds_update_line_ctrl {id} {

  global xth
  
  if {[string length $id] > 0} {

    $xth(ctrl,me,line).typl configure -state normal    
    $xth(ctrl,me,line).typ configure -state normal    
    $xth(ctrl,me,line).namel configure -state normal    
    $xth(ctrl,me,line).name configure -state normal    
    $xth(ctrl,me,line).optl configure -state normal    
    $xth(ctrl,me,line).opt configure -state normal    
    $xth(ctrl,me,line).rev configure -state normal    
    $xth(ctrl,me,line).cls configure -state normal    
#    $xth(ctrl,me,line).insp configure -state normal    
#    $xth(ctrl,me,line).delp configure -state normal    
    $xth(ctrl,me,line).theme configure -state normal    
    $xth(ctrl,me,line).themetype configure -state normal    
    $xth(ctrl,me,line).lpa configure -state normal    
    $xth(ctrl,me,line).upd configure -state normal    
    $xth(ctrl,me,line).trace configure -state normal    
    $xth(ctrl,me,line).vector configure -state normal    
    $xth(ctrl,me,line).lpa.m entryconfigure [mc "Insert point"] -state normal    
    $xth(ctrl,me,line).lpa.m entryconfigure [mc "Delete point"] -state normal    
    $xth(ctrl,me,line).pl.l configure -takefocus 1 \
      -listvariable xth(me,cmds,$id,plist)

    set xth(ctrl,me,line,type) $xth(me,cmds,$id,type)
    set xth(ctrl,me,line,name) $xth(me,cmds,$id,name)
    set xth(ctrl,me,line,opts) $xth(me,cmds,$id,options)
    set xth(ctrl,me,line,reverse) $xth(me,cmds,$id,reverse)
    set xth(ctrl,me,line,close) $xth(me,cmds,$id,close)
    set at [lindex $xth(me,themes,list) $xth(me,acttheme)]
    set tx [lsearch -exact $xth(me,themes,$at,line,hidelist) $xth(me,cmds,$id,type)]
    if {$tx < 0} {
      set xth(ctrl,me,line,themetype) {}
    } else {
      set xth(ctrl,me,line,themetype) [lindex $xth(me,themes,$at,line,showlist) $tx]
    }

    xth_me_prev_cmd $xth(me,cmds,$id,data)

    catch {$xth(me,can) raise lnln$id line}
    catch {$xth(me,can) raise lnpt$id point}
    
  } else {
  
    set xth(ctrl,me,line,name) {}
    set xth(ctrl,me,line,reverse) 0
    set xth(ctrl,me,line,close) 0
    set xth(ctrl,me,line,type) $xth(me,dflt,line,type)
    set xth(ctrl,me,line,opts) $xth(me,dflt,line,options)

    $xth(ctrl,me,line).typl configure -state disabled    
    $xth(ctrl,me,line).typ configure -state disabled    
    $xth(ctrl,me,line).namel configure -state disabled    
    $xth(ctrl,me,line).name configure -state disabled    
    $xth(ctrl,me,line).optl configure -state disabled    
    $xth(ctrl,me,line).opt configure -state disabled    
    $xth(ctrl,me,line).rev configure -state disabled    
    $xth(ctrl,me,line).cls configure -state disabled    
#    $xth(ctrl,me,line).insp configure -state disabled    
#    $xth(ctrl,me,line).delp configure -state disabled    
    $xth(ctrl,me,line).theme configure -state disabled     
    $xth(ctrl,me,line).themetype configure -state disabled     
    $xth(ctrl,me,line).lpa configure -state disabled    
    $xth(ctrl,me,line).upd configure -state disabled
    $xth(ctrl,me,line).trace configure -state disabled
    $xth(ctrl,me,line).vector configure -state disabled
    $xth(ctrl,me,line).lpa.m entryconfigure [mc "Insert point"] -state disabled
    $xth(ctrl,me,line).lpa.m entryconfigure [mc "Delete point"] -state disabled   
    $xth(ctrl,me,line).pl.l configure -takefocus 0 \
      -listvariable xth(ctrl,me,line,empty)
    $xth(ctrl,me,line).pl.l selection clear 0 end
      
  }
  
}



proc xth_me_cmds_update_area_ctrl {id} {

  global xth
  
  if {[string length $id] > 0} {

    $xth(ctrl,me,ac).typl configure -state normal    
    $xth(ctrl,me,ac).typ configure -state normal    
    $xth(ctrl,me,ac).theme configure -state normal    
    $xth(ctrl,me,ac).themetype configure -state normal
    $xth(ctrl,me,ac).optl configure -state normal    
    $xth(ctrl,me,ac).opt configure -state normal    
    $xth(ctrl,me,ac).ins configure -state normal    
    $xth(ctrl,me,ac).del configure -state normal    
    $xth(ctrl,me,ac).insid configure -state normal    
    $xth(ctrl,me,ac).inside configure -state normal    
    $xth(ctrl,me,ac).upd configure -state normal    
    $xth(ctrl,me,ac).shw configure -state normal    
    $xth(ctrl,me,ac).ll.l configure -takefocus 1 \
      -listvariable xth(me,cmds,$id,llist)
    $xth(ctrl,me,ac).ll.l selection clear 0 end
    $xth(ctrl,me,ac).ll.l selection set end end
    $xth(ctrl,me,ac).ll.l see end
    
    set xth(ctrl,me,ac,type) $xth(me,cmds,$id,type)
    set xth(ctrl,me,ac,name) $xth(me,cmds,$id,name)
    set xth(ctrl,me,ac,opts) $xth(me,cmds,$id,options)

    set at [lindex $xth(me,themes,list) $xth(me,acttheme)]
    set tx [lsearch -exact $xth(me,themes,$at,area,hidelist) $xth(me,cmds,$id,type)]
    if {$tx < 0} {
      set xth(ctrl,me,ac,themetype) {}
    } else {
      set xth(ctrl,me,ac,themetype) [lindex $xth(me,themes,$at,area,showlist) $tx]
    }

    set xth(ctrl,me,ac,insid) {}
    xth_me_prev_cmd $xth(me,cmds,$id,data)

  } else {
  
    set xth(ctrl,me,ac,name) {}
    set xth(ctrl,me,ac,insid) {}
    set xth(ctrl,me,ac,type) $xth(me,dflt,area,type)
    set xth(ctrl,me,ac,opts) $xth(me,dflt,area,options)

    $xth(ctrl,me,ac).typl configure -state disabled    
    $xth(ctrl,me,ac).typ configure -state disabled    
    $xth(ctrl,me,ac).theme configure -state disabled    
    $xth(ctrl,me,ac).themetype configure -state disabled
    $xth(ctrl,me,ac).optl configure -state disabled    
    $xth(ctrl,me,ac).opt configure -state disabled    
    $xth(ctrl,me,ac).ins configure -state disabled    
    $xth(ctrl,me,ac).del configure -state disabled    
    $xth(ctrl,me,ac).insid configure -state disabled    
    $xth(ctrl,me,ac).inside configure -state disabled    
    $xth(ctrl,me,ac).upd configure -state disabled    
    $xth(ctrl,me,ac).shw configure -state disabled    
    $xth(ctrl,me,ac).ll.l configure -takefocus 0 \
      -listvariable xth(ctrl,me,ac,empty)
    $xth(ctrl,me,ac).ll.l selection clear 0 end
      
  }
  
}



proc xth_me_cmds_move_lineptcp_xctrl {id ppid pid npid} {
  global xth
  
  set px [xth_me_real2canx $xth(me,cmds,$id,$pid,x)]
  set py [xth_me_real2cany $xth(me,cmds,$id,$pid,y)]
  
  if {$xth(me,cmds,$id,$pid,idp)} {
    set x [xth_me_real2canx $xth(me,cmds,$id,$pid,xp)]
    set y [xth_me_real2cany $xth(me,cmds,$id,$pid,yp)]
    $xth(me,can) coords $xth(me,canid,linept,pcp) [list \
      [expr $x - $xth(gui,me,line,cpsize)] \
      [expr $y - $xth(gui,me,line,cpsize)] \
      [expr $x + $xth(gui,me,line,cpsize)] \
      [expr $y + $xth(gui,me,line,cpsize)]]
    $xth(me,can) coords $xth(me,canid,linept,pcpl) $px $py $x $y
  }
  
  if {$xth(me,cmds,$id,$pid,idn)} {
    set x [xth_me_real2canx $xth(me,cmds,$id,$pid,xn)]
    set y [xth_me_real2cany $xth(me,cmds,$id,$pid,yn)]
    $xth(me,can) coords $xth(me,canid,linept,ncp) [list \
      [expr $x - $xth(gui,me,line,cpsize)] \
      [expr $y - $xth(gui,me,line,cpsize)] \
      [expr $x + $xth(gui,me,line,cpsize)] \
      [expr $y + $xth(gui,me,line,cpsize)]]
    $xth(me,can) coords $xth(me,canid,linept,ncpl) $px $py $x $y
  }

  if {($npid > 0) && $xth(me,cmds,$id,$npid,idp)} {
    set px [xth_me_real2canx $xth(me,cmds,$id,$npid,x)]
    set py [xth_me_real2cany $xth(me,cmds,$id,$npid,y)]
    set x [xth_me_real2canx $xth(me,cmds,$id,$npid,xp)]
    set y [xth_me_real2cany $xth(me,cmds,$id,$npid,yp)]
    $xth(me,can) coords $xth(me,canid,linept,nncp) [list \
      [expr $x - $xth(gui,me,line,cpsize)] \
      [expr $y - $xth(gui,me,line,cpsize)] \
      [expr $x + $xth(gui,me,line,cpsize)] \
      [expr $y + $xth(gui,me,line,cpsize)]]
    $xth(me,can) coords $xth(me,canid,linept,nncpl) $px $py $x $y
  }

  if {($ppid > 0) && $xth(me,cmds,$id,$ppid,idn)} {
    set px [xth_me_real2canx $xth(me,cmds,$id,$ppid,x)]
    set py [xth_me_real2cany $xth(me,cmds,$id,$ppid,y)]
    set x [xth_me_real2canx $xth(me,cmds,$id,$ppid,xn)]
    set y [xth_me_real2cany $xth(me,cmds,$id,$ppid,yn)]
    $xth(me,can) coords $xth(me,canid,linept,ppcp) [list \
      [expr $x - $xth(gui,me,line,cpsize)] \
      [expr $y - $xth(gui,me,line,cpsize)] \
      [expr $x + $xth(gui,me,line,cpsize)] \
      [expr $y + $xth(gui,me,line,cpsize)]]
    $xth(me,can) coords $xth(me,canid,linept,ppcpl) $px $py $x $y
  }

  xth_me_cmds_move_linept_size_xctrl $id $pid $xth(me,cmds,$id,$pid,rotation) \
    $xth(me,cmds,$id,$pid,rs) $xth(me,cmds,$id,$pid,ls)
  xth_me_cmds_move_line_xctrl $id
}


proc xth_me_cmds_move_linept_xctrl {id pid} {
  global xth
  set x [xth_me_real2canx $xth(me,cmds,$id,$pid,x)]
  set y [xth_me_real2cany $xth(me,cmds,$id,$pid,y)]
  $xth(me,can) coords $xth(me,canid,linept,selector) [list \
    [expr $x - 3 * $xth(gui,me,line,psize)] \
    [expr $y - 3 * $xth(gui,me,line,psize)] \
    [expr $x + 3 * $xth(gui,me,line,psize)] \
    [expr $y + 3 * $xth(gui,me,line,psize)]]
}


proc xth_me_cmds_move_line_xctrl {id} {
  global xth
  set pid [lindex $xth(me,cmds,$id,xplist) 0]
  set rot [xth_me_cmds_get_default_rotation $id $pid]
  if {$xth(me,cmds,$id,reverse)} {
    set rot [expr $rot + 180.0]
  }
  set x [xth_me_real2canx $xth(me,cmds,$id,$pid,x)]
  set y [xth_me_real2cany $xth(me,cmds,$id,$pid,y)]
  $xth(me,can) coords $xth(me,canid,line,tick) [list $x $y \
      [expr $x + sin($rot/180.0*3.14159265259) * $xth(gui,me,line,ticksize)] \
      [expr $y - cos($rot/180.0*3.14159265259) * $xth(gui,me,line,ticksize)]]
}


proc xth_me_cmds_show_line_xctrl {id} {
  global xth
  if {[llength $xth(me,cmds,$id,xplist)] < 3} {
    xth_me_cmds_hide_line_xctrl    
    return
  }
  xth_me_cmds_move_line_xctrl $id
  $xth(me,can) itemconfigure entirelinectrl -state normal
  $xth(me,can) raise entirelinectrl
  $xth(me,can) lower entirelinectrl point
}

proc xth_me_cmds_hide_line_xctrl {} {
  global xth
  $xth(me,can) itemconfigure entirelinectrl -state hidden
}

proc xth_me_cmds_show_linept_xctrl {id pid} {
  global xth
  set x [xth_me_real2canx $xth(me,cmds,$id,$pid,x)]
  set y [xth_me_real2cany $xth(me,cmds,$id,$pid,y)]
  set xl $xth(me,cmds,$id,xplist)
  $xth(me,can) raise linectrl
  $xth(me,can) lower linectrl point

  $xth(me,can) itemconfigure $xth(me,canid,linept,selector) -state normal
  xth_me_cmds_move_linept_xctrl $id $pid

  if {$xth(me,cmds,$id,$pid,idp)} {
    $xth(me,can) itemconfigure $xth(me,canid,linept,pcpl) -state normal
    $xth(me,can) itemconfigure $xth(me,canid,linept,pcp) -state normal
  } else {
    $xth(me,can) itemconfigure $xth(me,canid,linept,pcpl) -state hidden
    $xth(me,can) itemconfigure $xth(me,canid,linept,pcp) -state hidden
  }
  if {$xth(me,cmds,$id,$pid,idn)} {
    $xth(me,can) itemconfigure $xth(me,canid,linept,ncpl) -state normal
    $xth(me,can) itemconfigure $xth(me,canid,linept,ncp) -state normal
  } else {
    $xth(me,can) itemconfigure $xth(me,canid,linept,ncpl) -state hidden
    $xth(me,can) itemconfigure $xth(me,canid,linept,ncp) -state hidden
  }
  set ix [lsearch $xl $pid]
  set lix [expr [llength $xl] - 2]
  if {$ix > 0} {
    set ppid [lindex $xl [expr $ix - 1]]
  } elseif {$xth(me,cmds,$id,close) && ($lix > 0)} {
    set ppid [lindex $xl [expr $lix - 1]]
  } else {
    set ppid 0
  }
  if {$ix < $lix} {
    set npid [lindex $xl [expr $ix + 1]]
  } elseif {$xth(me,cmds,$id,close) && ($lix > 0)} {
    set npid [lindex $xl 1]
  } else {
    set npid 0
  }
  if {($npid > 0) && $xth(me,cmds,$id,$npid,idp)} {
    $xth(me,can) itemconfigure $xth(me,canid,linept,nncpl) -state normal
    $xth(me,can) itemconfigure $xth(me,canid,linept,nncp) -state normal
  } else {
    $xth(me,can) itemconfigure $xth(me,canid,linept,nncpl) -state hidden
    $xth(me,can) itemconfigure $xth(me,canid,linept,nncp) -state hidden
  }
  if {($ppid > 0) && $xth(me,cmds,$id,$ppid,idn)} {
    $xth(me,can) itemconfigure $xth(me,canid,linept,ppcpl) -state normal
    $xth(me,can) itemconfigure $xth(me,canid,linept,ppcp) -state normal
  } else {
    $xth(me,can) itemconfigure $xth(me,canid,linept,ppcpl) -state hidden
    $xth(me,can) itemconfigure $xth(me,canid,linept,ppcp) -state hidden
  }
  xth_me_cmds_move_lineptcp_xctrl $id $ppid $pid $npid
  $xth(me,can) raise pt$id.$pid
  $xth(me,can) bind $xth(me,canid,linept,pcp)  \
    "$xth(me,can) itemconfigure $xth(me,canid,linept,pcp) -fill yellow"
  $xth(me,can) bind $xth(me,canid,linept,pcp)  \
    "$xth(me,can) itemconfigure $xth(me,canid,linept,pcp) -fill red"
  $xth(me,can) bind $xth(me,canid,linept,pcp) <1> \
    "xth_me_cmds_start_linecp_drag $xth(me,canid,linept,pcp) $id $ppid $pid $npid p %x %y"
  $xth(me,can) bind $xth(me,canid,linept,ncp)  \
    "$xth(me,can) itemconfigure $xth(me,canid,linept,ncp) -fill yellow"
  $xth(me,can) bind $xth(me,canid,linept,ncp)  \
    "$xth(me,can) itemconfigure $xth(me,canid,linept,ncp) -fill red"
  $xth(me,can) bind $xth(me,canid,linept,ncp) <1> \
    "xth_me_cmds_start_linecp_drag $xth(me,canid,linept,ncp) $id $ppid $pid $npid n %x %y"
  $xth(me,can) bind $xth(me,canid,linept,ppcp)  \
    "$xth(me,can) itemconfigure $xth(me,canid,linept,ppcp) -fill yellow"
  $xth(me,can) bind $xth(me,canid,linept,ppcp)  \
    "$xth(me,can) itemconfigure $xth(me,canid,linept,ppcp) -fill magenta"
  $xth(me,can) bind $xth(me,canid,linept,ppcp) <1> \
    "xth_me_cmds_start_linecp_drag $xth(me,canid,linept,ppcp) $id $ppid $pid $npid pp %x %y"
  $xth(me,can) bind $xth(me,canid,linept,nncp)  \
    "$xth(me,can) itemconfigure $xth(me,canid,linept,nncp) -fill yellow"
  $xth(me,can) bind $xth(me,canid,linept,nncp)  \
    "$xth(me,can) itemconfigure $xth(me,canid,linept,nncp) -fill magenta"
  $xth(me,can) bind $xth(me,canid,linept,nncp) <1> \
    "xth_me_cmds_start_linecp_drag $xth(me,canid,linept,nncp) $id $ppid $pid $npid nn %x %y"
    
  xth_me_cmds_configure_linept_size_xctrl $id $pid
  xth_me_cmds_move_linept_size_xctrl $id $pid $xth(me,cmds,$id,$pid,rotation) \
    $xth(me,cmds,$id,$pid,rs) $xth(me,cmds,$id,$pid,ls)
  xth_me_cmds_move_line_xctrl $id
    
}


proc xth_me_cmds_hide_linept_xctrl {} {
  global xth
  $xth(me,can) itemconfigure linectrl -state hidden
  $xth(me,can) bind $xth(me,canid,linept,pcp)  ""
  $xth(me,can) bind $xth(me,canid,linept,pcp)  ""
  $xth(me,can) bind $xth(me,canid,linept,ncp)  ""
  $xth(me,can) bind $xth(me,canid,linept,ncp)  ""
  $xth(me,can) bind $xth(me,canid,linept,ppcp)  ""
  $xth(me,can) bind $xth(me,canid,linept,ppcp)  ""
  $xth(me,can) bind $xth(me,canid,linept,nncp)  ""
  $xth(me,can) bind $xth(me,canid,linept,nncp)  ""
  $xth(me,can) bind $xth(me,canid,linept,pcp) <1> ""
  $xth(me,can) bind $xth(me,canid,linept,ncp) <1> ""
  $xth(me,can) bind $xth(me,canid,linept,ppcp) <1> ""
  $xth(me,can) bind $xth(me,canid,linept,nncp) <1> ""
  xth_me_cmds_configure_linept_size_xctrl {} 0
}

proc xth_me_cmds_update_linept_ctrl {id pid} {

  global xth
  
  if {[string length $id] > 0} {
    xth_me_cmds_show_line_xctrl $id
  } else {
    xth_me_cmds_hide_line_xctrl
  }

  if {([string length $id] > 0) && ($pid > 0)} {

    $xth(ctrl,me,linept).posl configure -state normal
    $xth(ctrl,me,linept).posx configure -state normal
    $xth(ctrl,me,linept).posy configure -state normal
    $xth(ctrl,me,linept).xp configure -state normal
    $xth(ctrl,me,linept).yp configure -state normal
    $xth(ctrl,me,linept).xn configure -state normal
    $xth(ctrl,me,linept).yn configure -state normal
    $xth(ctrl,me,linept).cbp configure -state normal
    $xth(ctrl,me,linept).cbn configure -state normal
    $xth(ctrl,me,linept).cbs configure -state normal
    $xth(ctrl,me,linept).rotc configure -state normal
    $xth(ctrl,me,linept).rot configure -state normal
    $xth(ctrl,me,linept).rszc configure -state normal
    $xth(ctrl,me,linept).rsz configure -state normal
    $xth(ctrl,me,linept).lszc configure -state normal
    $xth(ctrl,me,linept).lsz configure -state normal
    $xth(ctrl,me,linept).optl configure -state normal
    $xth(ctrl,me,linept).upd configure -state normal

    $xth(ctrl,me,line).lpa.m entryconfigure [mc "Delete point"] -state normal    
    set xpid [lsearch -exact $xth(me,cmds,$id,xplist) $pid]
    if {($xpid > 0) && ($xpid < ([llength $xth(me,cmds,$id,xplist)] - 2))} {
      $xth(ctrl,me,line).lpa.m entryconfigure [mc "Split line"] -state normal
    } else {
      $xth(ctrl,me,line).lpa.m entryconfigure [mc "Split line"] -state disabled
    }

    $xth(ctrl,me,linept).oe.txt configure -state normal
    $xth(ctrl,me,linept).oe.txt delete 1.0 end
    $xth(ctrl,me,linept).oe.txt insert 1.0 $xth(me,cmds,$id,$pid,options)
    $xth(ctrl,me,linept).oe.txt mark set insert $xth(me,cmds,$id,$pid,optpos)
    $xth(ctrl,me,linept).oe.txt see $xth(me,cmds,$id,$pid,optpos)
    
    set xth(ctrl,me,linept,x) $xth(me,cmds,$id,$pid,x)
    set xth(ctrl,me,linept,y) $xth(me,cmds,$id,$pid,y)
    set xth(ctrl,me,linept,idn) $xth(me,cmds,$id,$pid,idn)
    set xth(ctrl,me,linept,idp) $xth(me,cmds,$id,$pid,idp)
    
    if $xth(me,cmds,$id,$pid,idp) {
      set xth(ctrl,me,linept,xp) $xth(me,cmds,$id,$pid,xp)
      set xth(ctrl,me,linept,yp) $xth(me,cmds,$id,$pid,yp)
    } else {
      set xth(ctrl,me,linept,xp) {}
      set xth(ctrl,me,linept,yp) {}
    }
    if $xth(me,cmds,$id,$pid,idn) {
      set xth(ctrl,me,linept,xn) $xth(me,cmds,$id,$pid,xn)
      set xth(ctrl,me,linept,yn) $xth(me,cmds,$id,$pid,yn)
    } else {
      set xth(ctrl,me,linept,xn) {}
      set xth(ctrl,me,linept,yn) {}
    }    
    set xth(ctrl,me,linept,smooth) $xth(me,cmds,$id,$pid,smooth)
    set xth(ctrl,me,linept,rot) $xth(me,cmds,$id,$pid,rotation)
    if {[string length $xth(me,cmds,$id,$pid,rotation)] > 0} {
      set xth(ctrl,me,linept,rotid) 1
    } else {
      set xth(ctrl,me,linept,rotid) 0
    }

    set xth(ctrl,me,linept,rs) $xth(me,cmds,$id,$pid,rs)
    if {[string length $xth(me,cmds,$id,$pid,rs)] > 0} {
      set xth(ctrl,me,linept,rsid) 1
    } else {
      set xth(ctrl,me,linept,rsid) 0
    }

    set xth(ctrl,me,linept,ls) $xth(me,cmds,$id,$pid,ls)
    if {[string length $xth(me,cmds,$id,$pid,ls)] > 0} {
      set xth(ctrl,me,linept,lsid) 1
    } else {
      set xth(ctrl,me,linept,lsid) 0
    }
    
    xth_me_cmds_show_linept_xctrl $id $pid
    
  } else {

    set xth(ctrl,me,linept,x) {}
    set xth(ctrl,me,linept,y) {}
    set xth(ctrl,me,linept,xp) {}
    set xth(ctrl,me,linept,yp) {}
    set xth(ctrl,me,linept,xn) {}
    set xth(ctrl,me,linept,yn) {}
    set xth(ctrl,me,linept,idn) 0
    set xth(ctrl,me,linept,idp) 0
    set xth(ctrl,me,linept,smooth) 0
    set xth(ctrl,me,linept,rot) {}
    set xth(ctrl,me,linept,rotid) 0
    set xth(ctrl,me,linept,rs) {}
    set xth(ctrl,me,linept,rsid) 0
    set xth(ctrl,me,linept,ls) {}
    set xth(ctrl,me,linept,lsid) 0

    $xth(ctrl,me,linept).posl configure -state disabled
    $xth(ctrl,me,linept).posx configure -state disabled
    $xth(ctrl,me,linept).posy configure -state disabled
    $xth(ctrl,me,linept).xp configure -state disabled
    $xth(ctrl,me,linept).upd configure -state disabled
    $xth(ctrl,me,linept).yp configure -state disabled
    $xth(ctrl,me,linept).xn configure -state disabled
    $xth(ctrl,me,linept).yn configure -state disabled
    $xth(ctrl,me,linept).cbp configure -state disabled
    $xth(ctrl,me,linept).cbn configure -state disabled
    $xth(ctrl,me,linept).cbs configure -state disabled
    $xth(ctrl,me,linept).rotc configure -state disabled
    $xth(ctrl,me,linept).rot configure -state disabled
    $xth(ctrl,me,linept).rszc configure -state disabled
    $xth(ctrl,me,linept).rsz configure -state disabled
    $xth(ctrl,me,linept).lszc configure -state disabled
    $xth(ctrl,me,linept).lsz configure -state disabled
    $xth(ctrl,me,linept).optl configure -state disabled
    $xth(ctrl,me,linept).oe.txt configure -state normal
    $xth(ctrl,me,linept).oe.txt delete 1.0 end
    $xth(ctrl,me,linept).oe.txt see 1.0
    $xth(ctrl,me,linept).oe.txt configure -state disabled

    $xth(ctrl,me,line).lpa.m entryconfigure [mc "Delete point"] -state disabled
    $xth(ctrl,me,line).lpa.m entryconfigure [mc "Split line"] -state disabled
    
    xth_me_cmds_hide_linept_xctrl  
    
  }
  
}


proc xth_me_cmds_delete_linept {id pid} {

  global xth
  
  if {[string length $id] < 1} {
    set id $xth(me,cmds,selid)
  }
  if {[string length $pid] < 1} {
    set pid $xth(me,cmds,selpid)
  }
  if {$pid == 0} {
    return
  }

  set oldselpid $xth(me,cmds,selpid)
  if {$xth(me,unredook)} {
    xth_me_cmds_update {}
  }
  
  # ak mazeme prvy alebo posledny, tak zrusime close ak je nastaveny
  set closerem 0
  if {$xth(me,cmds,$id,close) && ([llength $xth(me,cmds,$id,xplist)] > 2)} {
    set fpid [lindex $xth(me,cmds,$id,xplist) 0]
    set lpid [lindex $xth(me,cmds,$id,xplist) [expr [llength $xth(me,cmds,$id,xplist)] - 2]]
    if {$pid == $fpid} {
      set closerem 1
    } elseif {$pid == $lpid} {
      set closerem 1
    }
  }
  
  if {$closerem} {
    set closeremstr "set xth(me,cmds,$id,close) 0\nxth_me_cmds_update_line_vars $id $pid"
    set closeaddstr "set xth(me,cmds,$id,close) 1\nxth_me_cmds_update_line_vars $id $pid"
  } else {
    set closeremstr {}
    set closeaddstr {}
  }
  
  eval $closeremstr
  
  # odstrani ho zo zoznamu
  set ix [lsearch $xth(me,cmds,$id,xplist) $pid]
  set xth(me,cmds,$id,xplist) [lreplace $xth(me,cmds,$id,xplist) $ix $ix]
  set xth(me,cmds,$id,plist) [lreplace $xth(me,cmds,$id,plist) $ix $ix]
  $xth(me,can) delete pt$id.$pid
  $xth(me,can) delete ln$id.$pid
  xth_me_cmds_move_line $id
  if {$oldselpid == $pid} {
    set nwpid [lindex $xth(me,cmds,$id,xplist) $ix]
  } else {
    set nwpid $oldselpid
  }
  xth_me_cmds_update_line_data $id
  xth_me_prev_cmd $xth(me,cmds,$id,data)
  
  # BUG FIX when deleting last point
  if {$nwpid == 0} {
    set xth(me,cmds,selpid) $nwpid
  }
  xth_me_cmds_select_linept $id $nwpid
    
  xth_me_unredo_action [mc "deleting line point"] \
    "xth_me_cmds_undelete_linept $id $pid $ix\n$closeaddstr" \
    "$closeremstr\nxth_me_cmds_delete_linept $id $pid"
  
}


proc xth_me_cmds_undelete_linept {id pid ix} {
  global xth
  set oldpid [lindex $xth(me,cmds,$id,xplist) $ix]
  set xth(me,cmds,$id,xplist) [linsert $xth(me,cmds,$id,xplist) $ix $pid]
  set xth(me,cmds,$id,plist) [linsert $xth(me,cmds,$id,plist) $ix {}]
  xth_me_cmds_update_linept_list $id $pid
  if {$ix > 0} {
    set ppid [lindex $xth(me,cmds,$id,xplist) [expr $ix - 1]]
  } else {
    set ppid 0
  }
  xth_me_cmds_draw_linept $id $pid
  xth_me_cmds_draw_lineln $id $ppid $pid 
  xth_me_cmds_move_line $id
  xth_me_cmds_update_line_data $id
  xth_me_prev_cmd $xth(me,cmds,$id,data)
  xth_me_cmds_select_linept $id $pid
  
}


proc xth_me_cmds_create_line_point {id ix mode x y xp yp xn yn smooth rot rs ls opts optpos} {

  global xth
  
  incr xth(me,cmds,$id,lpid)
  set pid $xth(me,cmds,$id,lpid)
  set xth(me,cmds,$id,$pid,x) [expr double($x)]
  set xth(me,cmds,$id,$pid,y) [expr double($y)]

  if {([string length $xp] > 0) && ((![string equal $xp $x]) || (![string equal $yp $y]))} {
    set xth(me,cmds,$id,$pid,xp) [expr double($xp)]
    set xth(me,cmds,$id,$pid,yp) [expr double($yp)]
    set xth(me,cmds,$id,$pid,idp) 1
  } else {
    set xth(me,cmds,$id,$pid,xp) {}
    set xth(me,cmds,$id,$pid,yp) {}
    set xth(me,cmds,$id,$pid,idp) 0
  }
  
  if {([string length $xn] > 0) && ((![string equal $xn $x]) || (![string equal $yn $y]))} {
    set xth(me,cmds,$id,$pid,xn) [expr double($xn)]
    set xth(me,cmds,$id,$pid,yn) [expr double($yn)]
    set xth(me,cmds,$id,$pid,idn) 1
  } else {
    set xth(me,cmds,$id,$pid,xn) {}
    set xth(me,cmds,$id,$pid,yn) {}
    set xth(me,cmds,$id,$pid,idn) 0
  }
  
  if {[string length $smooth] < 1} {
    set xth(me,cmds,$id,$pid,smooth) -1
  } else {
    set xth(me,cmds,$id,$pid,smooth) $smooth
  }
  
  if {[string length $rot] > 0} {
    set rot [expr double($rot)]
  }
  set xth(me,cmds,$id,$pid,rotation) $rot

  if {[string length $ls] > 0} {
    set ls [expr double($ls)]
  }
  set xth(me,cmds,$id,$pid,ls) $ls

  if {[string length $rs] > 0} {
    set rs [expr double($rs)]
  }
  set xth(me,cmds,$id,$pid,rs) $rs
  
  regsub {\s*$} $opts "" opts
  if {[string length $opts] > 0} {
    regsub {$} $opts "\n" opts
  }
  set xth(me,cmds,$id,$pid,options) $opts
  set xth(me,cmds,$id,$pid,optpos) $optpos
  
  # vlozi ho do zoznamu
  set xth(me,cmds,$id,plist) [linsert $xth(me,cmds,$id,plist) $ix {}]
  set xth(me,cmds,$id,xplist) [linsert $xth(me,cmds,$id,xplist) $ix $pid]
  xth_me_cmds_update_linept_list $id $pid
  
  # vytvori ho
  if {$ix > 0} {
    set ppid [lindex $xth(me,cmds,$id,xplist) [expr $ix - 1]]
  } else {
    set ppid 0
  }
  xth_me_cmds_draw_lineln $id $ppid $pid
  xth_me_cmds_draw_linept $id $pid
  
}



proc xth_me_cmds_create_area_line {id ix mode txt} {

  global xth
  incr xth(me,cmds,$id,llid)
  set lid $xth(me,cmds,$id,llid)
  regsub {\s*$} $txt "" txt
  regsub {^\s*} $txt "" txt
  set xth(me,cmds,$id,$lid,txt) $txt
  # vlozi ho do zoznamu
  set xth(me,cmds,$id,llist) [linsert $xth(me,cmds,$id,llist) $ix $txt]
  set xth(me,cmds,$id,xllist) [linsert $xth(me,cmds,$id,xllist) $ix $lid]
  
}


proc xth_me_cmds_insert_area_lineid {id mx my} {
  global xth
  if {$xth(me,unredook)} {
    xth_me_cmds_update {}
  }
  if {[string length $xth(me,cmds,$id,name)] == 0} {
    set nn [format "l%d-%.0f-%.0f" $id [xth_me_can2realx [$xth(me,can) canvasx $mx]] [xth_me_can2realy [$xth(me,can) canvasy $my]]]
    set unspec "set xth(me,cmds,$id,name) {}\nxth_me_cmds_update_line_data $id\nxth_me_cmds_update_list $id"
    set respec "set xth(me,cmds,$id,name) [list $nn]\nxth_me_cmds_update_line_data $id\nxth_me_cmds_update_list $id"
    eval $respec
  } else {
    set nn $xth(me,cmds,$id,name)
    set unspec {}
    set respec {}
  }    
  xth_me_cmds_insert_area_line $nn $unspec $respec
}


proc xth_me_cmds_insert_area_line {txt unspec respec} {

  global xth
  if {$xth(me,unredook)} {
    xth_me_cmds_update {}
  }
  regsub {\s*$} $txt "" txt
  regsub {^\s*} $txt "" txt  
  if {[string length $txt] == 0} {
    return;
  }
  set id $xth(me,cmds,selid)
  set lid [lindex $xth(me,cmds,$id,xllist) [$xth(ctrl,me,ac).ll.l curselection]]
  set ix [lsearch $xth(me,cmds,$id,xllist) $lid]
  xth_me_cmds_create_area_line $id $ix 1 $txt
  set lid $xth(me,cmds,$id,llid)
  xth_me_cmds_update_area_data $id
  xth_me_prev_cmd $xth(me,cmds,$id,data)
  $xth(ctrl,me,ac).ll.l selection clear 0 end
  $xth(ctrl,me,ac).ll.l selection set [expr $ix + 1] [expr $ix + 1]
  $xth(ctrl,me,ac).ll.l see [expr $ix + 1]

  xth_me_unredo_action [mc "inserting area border"] \
    "xth_me_cmds_select $id\nxth_me_cmds_delete_area_line $id $lid\n$unspec" \
    "xth_me_cmds_select $id\n$respec\nxth_me_cmds_undelete_area_line 1 $id $lid $ix"
      
}


proc xth_me_cmds_delete_area_line {id lid} {

  global xth
  
  if {[string length $id] < 1} {
    set id $xth(me,cmds,selid)
  }
  if {[string length $lid] < 1} {
    set lid [lindex $xth(me,cmds,$id,xllist) [$xth(ctrl,me,ac).ll.l curselection]]
  }
  if {$lid == 0} {
    return
  }

  if {$xth(me,unredook)} {
    xth_me_cmds_update {}
  }
  
  # odstrani ho zo zoznamu
  set ix [lsearch $xth(me,cmds,$id,xllist) $lid]
  set xth(me,cmds,$id,xllist) [lreplace $xth(me,cmds,$id,xllist) $ix $ix]
  set xth(me,cmds,$id,llist) [lreplace $xth(me,cmds,$id,llist) $ix $ix]
  xth_me_cmds_update_area_data $id
  xth_me_prev_cmd $xth(me,cmds,$id,data)
  $xth(ctrl,me,ac).ll.l selection clear 0 end
  $xth(ctrl,me,ac).ll.l selection set $ix $ix
  $xth(ctrl,me,ac).ll.l see $ix
    
  xth_me_unredo_action [mc "deleting area border"] \
    "xth_me_cmds_undelete_area_line 0 $id $lid $ix" \
    "xth_me_cmds_delete_area_line $id $lid"
  
}


proc xth_me_cmds_undelete_area_line {cr id lid ix} {

  global xth
  set xth(me,cmds,$id,xllist) [linsert $xth(me,cmds,$id,xllist) $ix $lid]
  set xth(me,cmds,$id,llist) [linsert $xth(me,cmds,$id,llist) $ix $xth(me,cmds,$id,$lid,txt)]
  xth_me_cmds_update_area_data $id
  xth_me_prev_cmd $xth(me,cmds,$id,data)
  $xth(ctrl,me,ac).ll.l selection clear 0 end
  $xth(ctrl,me,ac).ll.l selection set [expr $ix + $cr] [expr $ix + $cr]
  $xth(ctrl,me,ac).ll.l see [expr $ix + $cr]
  
}



proc xth_me_cmds_create_area {ix mode type opts lines} {

  global xth
  if {$mode} {
    xth_me_cmds_update {}
  }
  set id [xth_me_cmds_create 6 {} $ix]
  set xth(me,cmds,$id,llid) 0
  set xth(me,cmds,$id,llist) {"end of area"}
  set xth(me,cmds,$id,xllist) {0}

  if {$mode && ([string length $opts] < 1)} {
    set opts $xth(me,dflt,area,options)
  }

  if {[string length $type] > 0} {
    set xth(me,cmds,$id,type) $type
  } else {
    set xth(me,cmds,$id,type) $xth(me,dflt,area,type)
  }  

  foreach ln $lines {
    xth_me_cmds_create_area_line $id \
	  [expr [llength $xth(me,cmds,$id,xllist)] - 1] $mode $ln
  }
  
  # nastavit options
  regsub {^\s*} $opts "" opts
  regsub {\s*$} $opts "" opts
  set xth(me,cmds,$id,options) $opts

  xth_me_cmds_update_list $id
  xth_me_cmds_update_area_data $id
  if {$mode} {
    xth_me_unredo_action [mc "creating area"] \
      "xth_me_cmds_delete $id\nxth_me_cmds_set_mode 0" \
      "xth_me_cmds_undelete $id 0 [lsearch $xth(me,cmds,xlist) $id]\nxth_me_cmds_set_mode 3"  
    xth_me_cmds_select $id
    xth_me_cmds_start_area_insert 0
  }


}




proc xth_me_cmds_create_line {ix mode type opts lines} {

  global xth
  if {$mode} {
    xth_me_cmds_update {}
  }
  set id [xth_me_cmds_create 3 {} $ix]
  set xth(me,cmds,$id,lpid) 0
  set xth(me,cmds,$id,plist) {"end of line"}
  set xth(me,cmds,$id,xplist) {0}

  if {$mode && ([string length $opts] < 1)} {
    set opts $xth(me,dflt,line,options)
  }

  if {[string length $type] > 0} {
    set xth(me,cmds,$id,type) $type
  } else {
    set xth(me,cmds,$id,type) $xth(me,dflt,line,type)
  }
  
  # nastavit meno
  set optl [xth_me_cmds_get_line_option $opts id]
  if {[lindex $optl 2]} {
    set xth(me,cmds,$id,name) [lindex $optl 0]
    set opts [lindex $optl 1]
  }
  # prejde vsetky riadky a pohlada meno tam
  set newlines {}
  foreach ln $lines {
    set optl [xth_me_cmds_get_option $ln id]
    if {[lindex $optl 2]} {
      set xth(me,cmds,$id,name) [lindex $optl 0]
      set ln [lindex $optl 1]
      if {[string length $ln] > 0} {
	lappend newlines $ln
      }
    } else {
      lappend newlines $ln
    }
  }
  set lines $newlines
  
  # nastavit reversion
  set xth(me,cmds,$id,reverse) 0
  set optl [xth_me_cmds_get_line_option $opts reverse]
  if {[lindex $optl 2]} {
    #puts ">>$opts<< = >>$optl<<"
    set xth(me,cmds,$id,reverse) [xth_me_cmds_get_bool [lindex $optl 0]]
    set opts [lindex $optl 1]
    #puts "$xth(me,cmds,$id,reverse) >>$opts<<"
  }
  # prejde vsetky riadky a pohlada reverse tam
  set newlines {}
  foreach ln $lines {
    set optl [xth_me_cmds_get_option $ln reverse]
    if {[lindex $optl 2]} {
      set xth(me,cmds,$id,reverse) [xth_me_cmds_get_bool [lindex $optl 0]]
      set ln [lindex $optl 1]
      if {[string length $ln] > 0} {
	lappend newlines $ln
      }
    } else {
      lappend newlines $ln
    }
  }
  set lines $newlines
  
  # nastavit close
  set xth(me,cmds,$id,close) -1
  set optl [xth_me_cmds_get_line_option $opts close]
  if {[lindex $optl 2]} {
    set xth(me,cmds,$id,close) [xth_me_cmds_get_onoffauto [lindex $optl 0]]
    set opts [lindex $optl 1]
  }
  # prejde vsetky riadky a pohlada reverse tam
  set newlines {}
  foreach ln $lines {
    set optl [xth_me_cmds_get_option $ln close]
    if {[lindex $optl 2]} {
      set xth(me,cmds,$id,close) [xth_me_cmds_get_onoffauto [lindex $optl 0]]
      set ln [lindex $optl 1]
      if {[string length $ln] > 0} {
	lappend newlines $ln
      }
    } else {
      lappend newlines $ln
    }
  }
  set lines $newlines
  
  # nastavit options
  regsub {^\s*} $opts "" opts
  regsub {\s*$} $opts "" opts
  set xth(me,cmds,$id,options) $opts

  # vlozi body
  set has_some 0
  set opts {}
  set rsz {}
  set lsz {}
  set smth {}
  set rot {}
  foreach ln $lines {
    set what 0
    set cmt 0
    if {[regexp {^\s*\!?\s*(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s*(\#.*)?$} \
	  $ln dum x1 y1 x2 y2 x y cmt] && (![catch {expr $x * $y * $x1 * $y1 * $x2 * $y2}])} {
      set what 2
    } elseif {[regexp {^\s*\!?\s*(\S+)\s+(\S+)\s*(\#.*)?$} $ln dum x y cmt] && (![catch {expr $x * $y}])} {
      set x1 {}
      set y1 {}
      set x2 {}
      set y2 {}
      set what 1
    } elseif {$has_some} {
      # skusi jednotlive options rotation size r-size l-size smooth
      set cmt $ln
      set optl [xth_me_cmds_get_option $ln orientation]
      if {[lindex $optl 2]} {
	set rot [lindex $optl 0]
	set cmt [lindex $optl 1]
      } else {      
	set optl [xth_me_cmds_get_option $ln orient]
	if {[lindex $optl 2]} {
	  set rot [lindex $optl 0]
	  set cmt [lindex $optl 1]
	} else {
	  set optl [xth_me_cmds_get_option $ln smooth]
	  if {[lindex $optl 2]} {
	    set smth [xth_me_cmds_get_onoffauto [lindex $optl 0]]
	    set cmt [lindex $optl 1]
	  } else {
	    set optl [xth_me_cmds_get_option $ln size]
	    if {[lindex $optl 2]} {
	      switch $xth(me,cmds,$id,type) {
		slope {
		  set lsz [expr [lindex $optl 0]]
		}
		default {
		  set rsz [expr [lindex $optl 0] / 2.0]
		  set lsz [expr [lindex $optl 0] / 2.0]
		}
	      }
	      set cmt [lindex $optl 1]
	    } else {
	      set optl [xth_me_cmds_get_option $ln r-size]
	      if {[lindex $optl 2]} {
		set rsz [lindex $optl 0]
		set cmt [lindex $optl 1]
	      } else {
		set optl [xth_me_cmds_get_option $ln l-size]
		if {[lindex $optl 2]} {
		  set lsz [lindex $optl 0]
		  set cmt [lindex $optl 1]
		}
	      }
	    }
	  }
	}
      }
      regsub {^\s*} $cmt {} cmt
    } else {
      regsub {^\s*} $ln {} ln
      set cmt $ln
    }
    if {$what == 0} {
      if {[string length $cmt] > 0} {
	if {[string length $opts] > 0} {
	  set opts "$opts\n$cmt"
	} else {
	  set opts "$cmt"
	}
      }
    } else {
      if {$has_some} {
	xth_me_cmds_create_line_point $id \
	  [expr [llength $xth(me,cmds,$id,xplist)] - 1] $mode \
	  $px $py $px2 $py2 $x1 $y1 $smth $rot $rsz $lsz $opts 1.0
	set opts {}
	set rsz {}
	set lsz {}
	set smth {}
	set rot {}
      }
      set has_some 1
      set px $x
      set py $y
      set px1 $x1
      set py1 $y1
      set px2 $x2
      set py2 $y2
    }
  }
  if {$has_some} {
    xth_me_cmds_create_line_point $id \
      [expr [llength $xth(me,cmds,$id,xplist)] - 1] $mode \
      $px $py $px2 $py2 {} {} $smth $rot $rsz $lsz $opts 1.0
  }

  if {$mode == 1} {
    set xth(me,cmds,$id,close) 0
  } else {
    xth_me_cmds_postprocess_line $id
  }
  xth_me_cmds_update_list $id
  xth_me_cmds_update_line_data $id
  if {$mode} {
    xth_me_unredo_action [mc "creating line"] \
      "xth_me_cmds_delete $id\nxth_me_cmds_set_mode 0" \
      "xth_me_cmds_undelete $id 0 [lsearch $xth(me,cmds,xlist) $id]\nxth_me_cmds_set_mode 2"  
    xth_me_cmds_select $id
    xth_me_cmds_start_linept_insert
  }
}


proc xth_me_cmds_postprocess_line {id} {
  global xth
  set xl $xth(me,cmds,$id,xplist)
  set lix [expr [llength $xl] - 2]
  if {$lix < 0} {
    return
  }

  # overi uzavretie
  set postclose 0
  if {$xth(me,cmds,$id,close) != 0} {
      if {($xth(me,cmds,$id,[lindex $xl 0],x) == $xth(me,cmds,$id,[lindex $xl $lix],x)) && \
	($xth(me,cmds,$id,[lindex $xl 0],y) == $xth(me,cmds,$id,[lindex $xl $lix],y)) && \
	($lix > 0)} {
	set xth(me,cmds,$id,close) 1
      } else {
        if {$xth(me,cmds,$id,close) == 1} {
          set postclose 1
        }
        set xth(me,cmds,$id,close) 0
      }
  }
  
  if {$xth(me,cmds,$id,close)} {
    set fid [lindex $xl 0]
    set lid [lindex $xl $lix]
    if {$xth(me,cmds,$id,$fid,idn)} {
      set xth(me,cmds,$id,$lid,idn) $xth(me,cmds,$id,$fid,idn)
      set xth(me,cmds,$id,$lid,xn) $xth(me,cmds,$id,$fid,xn)
      set xth(me,cmds,$id,$lid,yn) $xth(me,cmds,$id,$fid,yn)
    }
    if {$xth(me,cmds,$id,$lid,idp)} {
      set xth(me,cmds,$id,$fid,idp) $xth(me,cmds,$id,$lid,idp)
      set xth(me,cmds,$id,$fid,xp) $xth(me,cmds,$id,$lid,xp)
      set xth(me,cmds,$id,$fid,yp) $xth(me,cmds,$id,$lid,yp)
    }
  }

  # overi smoothness
  if {$lix == 0} {
    set pid [lindex $xth(me,cmds,$id,xplist) 0]
    if {($xth(me,cmds,$id,$pid,smooth) == -1) && \
	$xth(me,cmds,$id,$pid,idp) && \
	$xth(me,cmds,$id,$pid,idn)} {
      set xth(me,cmds,$id,$pid,smooth) [xth_me_cmds_are_smooth \
	$xth(me,cmds,$id,$pid,xp) $xth(me,cmds,$id,$pid,yp) \
	$xth(me,cmds,$id,$pid,x) $xth(me,cmds,$id,$pid,y) \
	$xth(me,cmds,$id,$pid,xn) $xth(me,cmds,$id,$pid,yn)]
    } elseif {$xth(me,cmds,$id,$pid,smooth) == -1} {
      set xth(me,cmds,$id,$pid,smooth) 0
    }
    return
  }
  
  # prejde vsetky body
  set lid [lindex $xl $lix]
  set fid [lindex $xl 0]
  set cls $xth(me,cmds,$id,close)
  for {set ix 0} {$ix <= $lix} {incr ix} {
    set pid [lindex $xl $ix]
    if {($ix == 0) && $cls} {
      set idp $xth(me,cmds,$id,$lid,idp)
    } else {
      set idp $xth(me,cmds,$id,$pid,idp)
    }
    if {($ix == $lix) && $cls} {
      set idn $xth(me,cmds,$id,$fid,idn)
    } else {
      set idn $xth(me,cmds,$id,$pid,idn)
    }
    if {$idn && $idp && ($xth(me,cmds,$id,$pid,smooth) == -1)} {
      set x $xth(me,cmds,$id,$pid,x)
      set y $xth(me,cmds,$id,$pid,y)
      if {($ix == 0) && $cls} {
	set xp $xth(me,cmds,$id,$lid,xp)
	set yp $xth(me,cmds,$id,$lid,yp)
      } else {
	set xp $xth(me,cmds,$id,$pid,xp)
	set yp $xth(me,cmds,$id,$pid,yp)
      }
      if {($ix == $lix) && $cls} {
	set xn $xth(me,cmds,$id,$fid,xn)
	set yn $xth(me,cmds,$id,$fid,yn)
      } else {
	set xn $xth(me,cmds,$id,$pid,xn)
	set yn $xth(me,cmds,$id,$pid,yn)
      }
      set xth(me,cmds,$id,$pid,smooth) [xth_me_cmds_are_smooth $xp $yp $x $y $xn $yn]
    } elseif {$xth(me,cmds,$id,$pid,smooth) == -1} {
      set xth(me,cmds,$id,$pid,smooth) 0
    }
  }
  
  if {$postclose} {
    xth_me_cmds_close_line $id 0
  }
  
}


proc xth_me_cmds_update_area_data {id} {

  global xth
  set xl $xth(me,cmds,$id,xllist)
  set lix [expr [llength $xl] - 2]

  set d "area $xth(me,cmds,$id,type)"
  set xth(me,dflt,area,type) $xth(me,cmds,$id,type)

  # options
  if {[string length $xth(me,cmds,$id,options)] > 0} {
    set d "$d $xth(me,cmds,$id,options)"
  }
  set xth(me,dflt,area,options) $xth(me,cmds,$id,options)

  for {set ix 0} {$ix <= $lix} {incr ix} {
    set lid [lindex $xl $ix]
    set d "$d\n  $xth(me,cmds,$id,$lid,txt)"
  }

  set xth(me,cmds,$id,data) "$d\nendarea"
  
}



proc xth_me_cmds_update_line_data {id} {
  global xth
  set xl $xth(me,cmds,$id,xplist)
  set lix [expr [llength $xl] - 2]

  set d "line $xth(me,cmds,$id,type)"
  set xth(me,dflt,line,type) $xth(me,cmds,$id,type)

  # id
  if {[string length $xth(me,cmds,$id,name)] > 0} {
    set d "$d -id $xth(me,cmds,$id,name)"
  }
  
  if {$lix > -1} {
  
    # close
    if {$xth(me,cmds,$id,close)} {
      set d "$d -close on"
    } elseif {($xth(me,cmds,$id,[lindex $xl 0],x) == $xth(me,cmds,$id,[lindex $xl $lix],x)) && \
	($xth(me,cmds,$id,[lindex $xl 0],y) == $xth(me,cmds,$id,[lindex $xl $lix],y))} {
      set d "$d -close off"
    }

    # reverse
    if {$xth(me,cmds,$id,reverse)} {
      set d "$d -reverse on"
    }
    
  }
  
  if {[string length $xth(me,cmds,$id,options)] > 0} {
    set d "$d $xth(me,cmds,$id,options)"
  }
  set xth(me,dflt,line,options) $xth(me,cmds,$id,options)
  
  set csbar $d
  
  set xth(me,cmds,$id,data_ln) "$d\nendline"
  set xth(me,cmds,$id,data_pt) {}
  
  for {set ix 0} {$ix <= $lix} {incr ix} {
    set cto 0
    set pid [lindex $xl $ix]
    if {$ix == 0} {
      set crd [format "  %s %s" $xth(me,cmds,$id,$pid,x) $xth(me,cmds,$id,$pid,y)]
    } else {
      if {$xth(me,cmds,$id,$pid,idp) || $xth(me,cmds,$id,$ppid,idn)} {
	if {$xth(me,cmds,$id,$ppid,idn)} {
	  set x1 $xth(me,cmds,$id,$ppid,xn)
	  set y1 $xth(me,cmds,$id,$ppid,yn)
	} else {
	  set x1 $xth(me,cmds,$id,$ppid,x)
	  set y1 $xth(me,cmds,$id,$ppid,y)
	}
	if {$xth(me,cmds,$id,$pid,idp)} {
	  set x2 $xth(me,cmds,$id,$pid,xp)
	  set y2 $xth(me,cmds,$id,$pid,yp)
	} else {
	  set x2 $xth(me,cmds,$id,$pid,x)
	  set y2 $xth(me,cmds,$id,$pid,y)
	}
	set crd [format "  %s %s %s %s" $x1 $y1 $x2 $y2]
	set cto 1
      } else {
	set crd " "
      }
      set crd "$crd [format "%s %s" $xth(me,cmds,$id,$pid,x) $xth(me,cmds,$id,$pid,y)]"
    }
    set ptd "$crd"
    # rotation lsize rsize smooth options
    if {[string length $xth(me,cmds,$id,$pid,rotation)] > 0} {
      set ptd "$ptd\n  orientation $xth(me,cmds,$id,$pid,rotation)"
    }

    if {$cto && (! $xth(me,cmds,$id,$pid,smooth))} {
      set ptd "$ptd\n  smooth off"
    }
    
    if {[string length $xth(me,cmds,$id,$pid,ls)] > 0} {
      set ptd "$ptd\n  l-size $xth(me,cmds,$id,$pid,ls)"
    }

    if {[string length $xth(me,cmds,$id,$pid,rs)] > 0} {
      set ptd "$ptd\n  r-size $xth(me,cmds,$id,$pid,rs)"
    }
    
    if {[string length $xth(me,cmds,$id,$pid,options)] > 0} {
      set popts $xth(me,cmds,$id,$pid,options)
      regsub {\s*$} $popts {} popts
      if {[string length $popts] > 0} {
	regsub -all -line {^\s*} $popts {  } popts
      }
      set ptd "$ptd\n$popts"
    }
    
    lappend xth(me,cmds,$id,data_pt) $ptd
    
    set d "$d\n$ptd"
    set ppid $pid
  }

  set xth(me,cmds,$id,data) "$d\nendline"
  set xth(me,cmds,$id,sbar) $csbar
  catch {
  set ttype [lindex $csbar 1]
  if {([string length $ttype] > 0)} {
    set ttyp [ mc "line $ttype"]
    if {![string equal $ttype $ttyp]} {
      set nd [lreplace $csbar 1 1 "$ttype:$ttyp"]
      set xth(me,cmds,$id,sbar) "$nd"
    }
  }
  } 
  
}

proc xth_me_cmds_are_smooth {xp yp x y xn yn} {
  set rv 1
  set d1 [expr hypot($x - $xp,$y - $yp)]
  set d2 [expr hypot($xn - $x,$yn - $y)]
  if {($d2 > 0) && ($d1 > 0)} {
    set a1 [expr atan2($y - $yp, $x - $xp) / 3.14159265359 * 180.0];                        
    set a2 [expr atan2($yn - $y, $xn - $x) / 3.14159265359 * 180.0];
    if {($a2 - $a1) > 180.0} {
      set a2 [expr $a2 - 360.0]
    }
    if {($a2 - $a1) < -180.0} {
      set a2 [expr $a2 + 360.0]
    }
    if {($a2 > ($a1 + 5.0)) || ($a2 < ($a1 - 5.0))} {
      set rv 0
    }
  }        
  return $rv
}


proc xth_me_cmds_select_linept {id pid} {
  global xth
  if {$xth(me,unredook)} {
    xth_me_cmds_update {}
  }
  xth_me_cmds_update_linept_ctrl $id $pid
  set ix [lsearch $xth(me,cmds,$id,xplist) $pid]
  $xth(ctrl,me,line).pl.l selection clear 0 end
  $xth(ctrl,me,line).pl.l selection set $ix $ix
  $xth(ctrl,me,line).pl.l see $ix
  set xth(me,cmds,selpid) $pid
}


proc xth_me_cmds_toggle_line_close {} {
  global xth
  set id $xth(me,cmds,selid)
  set ncls $xth(ctrl,me,line,close)
  set xth(ctrl,me,line,close_tmp) $xth(ctrl,me,line,close)
  set xth(ctrl,me,line,close) $xth(me,cmds,$id,close)
  $xth(ctrl,me,line).cls configure -variable xth(ctrl,me,line,close_tmp)
  xth_me_cmds_update {}
  set xth(ctrl,me,line,close) $ncls
  if {$ncls && (!$xth(me,cmds,$id,close))} {
    xth_me_cmds_close_line $id
  } elseif {(!$ncls) && $xth(me,cmds,$id,close)} {
    xth_me_cmds_open_line $id
  }
  $xth(ctrl,me,line).cls configure -variable xth(ctrl,me,line,close)

}


proc xth_me_cmds_toggle_line_reverse {} {
  global xth
  set id $xth(me,cmds,selid)
  set nrev $xth(ctrl,me,line,reverse)
  set xth(ctrl,me,line,reverse_tmp) $xth(ctrl,me,line,reverse)
  set xth(ctrl,me,line,reverse) $xth(me,cmds,$id,reverse)
  $xth(ctrl,me,line).rev configure -variable xth(ctrl,me,line,reverse_tmp)
  xth_me_cmds_update {}
  set xth(ctrl,me,line,reverse) $nrev
  set xth(me,unredola) "line reversion"
  xth_me_cmds_update {}
  if {[llength $xth(me,cmds,$id,xplist)] > 1} {
    xth_me_cmds_move_lineln $id [lindex $xth(me,cmds,$id,xplist) 0] [lindex $xth(me,cmds,$id,xplist) 1]
  }
  $xth(ctrl,me,line).rev configure -variable xth(ctrl,me,line,reverse)
}


proc xth_me_cmds_toggle_linept {} {

  global xth

  set nidp $xth(ctrl,me,linept,idp)
  set xth(ctrl,me,linept,idp_tmp) $nidp
  set nidn $xth(ctrl,me,linept,idn)
  set xth(ctrl,me,linept,idn_tmp) $nidn
  set nsmooth $xth(ctrl,me,linept,smooth)
  set xth(ctrl,me,linept,smooth_tmp) $nsmooth
  set nrotid $xth(ctrl,me,linept,rotid)
  set xth(ctrl,me,linept,rotid_tmp) $nrotid
  set nrsid $xth(ctrl,me,linept,rsid)
  set xth(ctrl,me,linept,rsid_tmp) $nrsid
  set nlsid $xth(ctrl,me,linept,lsid)
  set xth(ctrl,me,linept,lsid_tmp) $nlsid

  set lpc $xth(ctrl,me,linept)
  $lpc.cbp configure -variable xth(ctrl,me,linept,idp_tmp)
  $lpc.cbn configure -variable xth(ctrl,me,linept,idn_tmp)
  $lpc.cbs configure -variable xth(ctrl,me,linept,smooth_tmp)
  $lpc.rotc configure -variable xth(ctrl,me,linept,rotid_tmp)
  $lpc.rszc configure -variable xth(ctrl,me,linept,rsid_tmp)
  $lpc.lszc configure -variable xth(ctrl,me,linept,lsid_tmp)

  update idletasks
  xth_me_cmds_update {}
  
  set id $xth(me,cmds,selid)
  set pid $xth(me,cmds,selpid)

  if {(!$nidp) && $xth(me,cmds,$id,$pid,idp)} {
    set xth(ctrl,me,linept,xp) {}
    set xth(ctrl,me,linept,yp) {}
    set xth(ctrl,me,linept,smooth) 0
  } elseif {$nidp && (!$xth(me,cmds,$id,$pid,idp))} {
    set crds [xth_me_cmds_get_default_linept_cp 1 $id $pid]
    set xth(ctrl,me,linept,xp) [lindex $crds 0]
    set xth(ctrl,me,linept,yp) [lindex $crds 1]
  }

  if {(!$nidn) && $xth(me,cmds,$id,$pid,idn)} {
    set xth(ctrl,me,linept,xn) {}
    set xth(ctrl,me,linept,yn) {}
    set xth(ctrl,me,linept,smooth) 0
  } elseif {$nidn && (!$xth(me,cmds,$id,$pid,idn))} {
    set crds [xth_me_cmds_get_default_linept_cp 0 $id $pid]
    set xth(ctrl,me,linept,xn) [lindex $crds 0]
    set xth(ctrl,me,linept,yn) [lindex $crds 1]
  }

  if {$nsmooth != $xth(me,cmds,$id,$pid,smooth)} {
    if {$nsmooth} {
      if {!$xth(me,cmds,$id,$pid,idp)} {
	set crds [xth_me_cmds_get_default_linept_cp 1 $id $pid]
	set xth(ctrl,me,linept,xp) [lindex $crds 0]
	set xth(ctrl,me,linept,yp) [lindex $crds 1]
      }
      if {!$xth(me,cmds,$id,$pid,idn)} {
	set crds [xth_me_cmds_get_default_linept_cp 0 $id $pid]
	set xth(ctrl,me,linept,xn) [lindex $crds 0]
	set xth(ctrl,me,linept,yn) [lindex $crds 1]
      }
    }
    set xth(ctrl,me,linept,smooth) $nsmooth
  }
  
  if {(!$nrotid) && ([string length $xth(me,cmds,$id,$pid,rotation)] > 0)} {
    set xth(ctrl,me,linept,rot) {}
  } elseif {$nrotid && ([string length $xth(me,cmds,$id,$pid,rotation)] < 1)} {
    set xth(ctrl,me,linept,rot) [xth_me_cmds_get_default_rotation $id $pid]
  }
  
  if {(!$nrsid) && ([string length $xth(me,cmds,$id,$pid,rs)] > 0)} {
    set xth(ctrl,me,linept,rs) {}
  } elseif {$nrsid && ([string length $xth(me,cmds,$id,$pid,rs)] < 1)} {
    set xth(ctrl,me,linept,rs) 40.0
  }
  
  if {(!$nlsid) && ([string length $xth(me,cmds,$id,$pid,ls)] > 0)} {
    set xth(ctrl,me,linept,ls) {}
  } elseif {$nlsid && ([string length $xth(me,cmds,$id,$pid,ls)] < 1)} {
    set xth(ctrl,me,linept,ls) 40.0
  }
  
  xth_me_cmds_update {}

  $lpc.cbp configure -variable xth(ctrl,me,linept,idp)
  $lpc.cbn configure -variable xth(ctrl,me,linept,idn)
  $lpc.cbs configure -variable xth(ctrl,me,linept,smooth)
  $lpc.rotc configure -variable xth(ctrl,me,linept,rotid)
  $lpc.rszc configure -variable xth(ctrl,me,linept,rsid)
  $lpc.lszc configure -variable xth(ctrl,me,linept,lsid)
  update idletasks
}

proc xth_me_cmds_update_line {id pid ntype nname nopts nrev nx ny nxp nyp \
  nxn nyn nsmth nrot nrs nls nptopts nptoptpos} {

  global xth
  
  set otype $xth(me,cmds,$id,type)
  set oname $xth(me,cmds,$id,name)
  set oopts $xth(me,cmds,$id,options)
  set orev $xth(me,cmds,$id,reverse)
  set oline "$otype $oname $oopts $orev"
  
  if {$pid > 0} {
    set ox $xth(me,cmds,$id,$pid,x)
    set oy $xth(me,cmds,$id,$pid,y)
    set oxp $xth(me,cmds,$id,$pid,xp)
    set oyp $xth(me,cmds,$id,$pid,yp)
    set oxn $xth(me,cmds,$id,$pid,xn)
    set oyn $xth(me,cmds,$id,$pid,yn)
    set osmth $xth(me,cmds,$id,$pid,smooth)
    set orot $xth(me,cmds,$id,$pid,rotation)
    set ors $xth(me,cmds,$id,$pid,rs)
    set ols $xth(me,cmds,$id,$pid,ls)
    set optopts $xth(me,cmds,$id,$pid,options)
    set optoptpos $xth(me,cmds,$id,$pid,optpos)
    set olinept "$ox $oy $oxp $oyp $oxn $oyn $osmth $orot $ors $ols $optopts"
  } else {
    set ox {}
    set oy {}
    set oxp {}
    set oyp {}
    set oxn {}
    set oyn {}
    set osmth {}
    set orot {}
    set ors {}
    set ols {}
    set optopts {}
    set optoptpos {}
    set olinept ""
  }


  if {[string length $ntype] < 1} {
    set ntype $otype
  }

  set optsredo {}
  set optsundo {}

  if {(![string equal $ntype $otype]) && [string equal $nopts $oopts]} {
    set nopts {}
    set nrs {}
    set nls {}
    set nrot {} 
    foreach xpid $xth(me,cmds,$id,xplist) {
      if {$xpid > 0} {
	foreach item {rs ls rotation} {
	  if {[string length $xth(me,cmds,$id,$xpid,$item)] > 0} {
	    set optsredo "$optsredo set xth(me,cmds,$id,$xpid,$item) {}; "
	    set optsundo "$optsundo set xth(me,cmds,$id,$xpid,$item) [list $xth(me,cmds,$id,$xpid,$item)]; "
	  }
	}
      }
    }
  }

  # uprav options
  regsub {^\s*} $nopts "" nopts
  regsub {\s*$} $nopts "" nopts
  
  set nline "$ntype $nname $nopts $nrev"
  
  if {$pid > 0} {
    
    if {[catch {expr $nx}]} {
      set nx $ox
    }
    set nx [expr double($nx)]
    if {[catch {expr $ny}]} {
      set ny $oy
    }
    set ny [expr double($ny)]

    if {[string length $nxp] > 0} {
      if {[catch {expr $nxp}]} {
	set nxp $oxp
      }
      set nxp [expr double($nxp)]
    }
    if {[string length $nyp] > 0} {
      if {[catch {expr $nyp}]} {
	set nyp $oyp
      }
      set nyp [expr double($nyp)]
    }    
    if {([string length $nxp] < 1) || ([string length $nyp] < 1)} {
      set nxp {}
      set nyp {}
      set nsmth 0
    }
    
    if {[string length $nxn] > 0} {
      if {[catch {expr $nxn}]} {
	set nxn $oxn
      }
      set nxn [expr double($nxn)]
    }
    if {[string length $nyn] > 0} {
      if {[catch {expr $nyn}]} {
	set nyn $oyn
      }
      set nyn [expr double($nyn)]
    }    
    if {([string length $nxn] < 1) || ([string length $nyn] < 1)} {
      set nxn {}
      set nyn {}
      set nsmth 0
    }
    
    if {$nsmth} {
      set crds [xth_me_cmds_get_smoothed_cp 0 $nxp $nyp $nx $ny $nxn $nyn]
      set nxp [lindex $crds 0]
      set nyp [lindex $crds 1]
      set nxn [lindex $crds 2]
      set nyn [lindex $crds 3]
    }
    
    if {[string length $nrot] > 0} {
      if {[catch {expr $nrot}]} {
	set nrot $orot
      } elseif {($nrot < 0.0) || ($nrot >= 360.0)} {
	set nrot $orot
      } else {
	set nrot [expr double($nrot)]
      }
    }

    if {[string length $nrs] > 0} {
      if {[catch {expr $nrs}]} {
	set nrs $ors
      } elseif {$nrs <= 0.0} {
	set nrs $ors
      } else {
	set nrs [expr double($nrs)]
      }
    }

    if {[string length $nls] > 0} {
      if {[catch {expr $nls}]} {
	set nls $ols
      } elseif {$nls <= 0.0} {
	set nls $ols
      } else {
	set nls [expr double($nls)]
      }
    }
    
    # uprav options
    regsub {\s*$} $nptopts "" nptopts
    if {[string length $nptopts] > 0} {
      regsub {$} $nptopts "\n" nptopts
    }

    set nlinept "$nx $ny $nxp $nyp $nxn $nyn $nsmth $nrot $nrs $nls $nptopts"
  } else {
    set nlinept ""
  }

  # ak je v niecom rozdiel, tak to updatni
  if {![string equal "$nline $nlinept" "$oline $olinept"]} {
    #puts "new\n{$nline}\n===\n{$nlinept}\n===\nold\n{$oline}\n===\n{$olinept}\n===\n"
    xth_me_unredo_action [mc "line changes"] \
      "xth_me_cmds_update_line $id $pid $otype [list $oname] [list $oopts] $orev {$ox} {$oy} {$oxp} {$oyp} {$oxn} {$oyn} {$osmth} {$orot} {$ors} {$ols} [list $optopts] {$optoptpos}; $optsundo xth_me_cmds_select {$id $pid}" \
      "xth_me_cmds_update_line $id $pid $ntype [list $nname] [list $nopts] $nrev {$nx} {$ny} {$nxp} {$nyp} {$nxn} {$nyn} {$nsmth} {$nrot} {$nrs} {$nls} [list $nptopts] {$nptoptpos}; $optsredo xth_me_cmds_select {$id $pid}"    

    set xth(me,cmds,$id,type) $ntype
    set xth(me,cmds,$id,name) $nname 
    set xth(me,cmds,$id,options) $nopts 
    set xth(me,cmds,$id,reverse) $nrev 
  
    if {[string length $optsredo] > 0} {
      eval $optsredo
    }
  
    if {$pid > 0} {
      set xth(me,cmds,$id,$pid,x) $nx
      set xth(me,cmds,$id,$pid,y) $ny
      set xth(me,cmds,$id,$pid,xp) $nxp
      set xth(me,cmds,$id,$pid,yp) $nyp
      if {[string length "$nxp$nyp"] > 0} {
	set xth(me,cmds,$id,$pid,idp) 1
      } else {
	set xth(me,cmds,$id,$pid,idp) 0
      }
      set xth(me,cmds,$id,$pid,xn) $nxn
      set xth(me,cmds,$id,$pid,yn) $nyn
      if {[string length "$nxn$nyn"] > 0} {
	set xth(me,cmds,$id,$pid,idn) 1
      } else {
	set xth(me,cmds,$id,$pid,idn) 0
      }
      set xth(me,cmds,$id,$pid,smooth) $nsmth 
      set xth(me,cmds,$id,$pid,rotation) $nrot
      set xth(me,cmds,$id,$pid,rs) $nrs
      set xth(me,cmds,$id,$pid,ls) $nls
      set xth(me,cmds,$id,$pid,options) $nptopts 
      set xth(me,cmds,$id,$pid,optpos) $nptoptpos 
      xth_me_cmds_update_linept_list $id $pid
      set cpid 0
      if {$xth(me,cmds,$id,close)} {
	set fpid [lindex $xth(me,cmds,$id,xplist) 0]
	set lpid [lindex $xth(me,cmds,$id,xplist) [expr [llength $xth(me,cmds,$id,xplist)] - 2]]
	if {$pid == $fpid} {
	  set cpid $lpid
	} elseif {$pid == $lpid} {
	  set cpid $fpid
	}
      }
      if {$cpid > 0} {
	set xth(me,cmds,$id,$cpid,x) $nx
	set xth(me,cmds,$id,$cpid,y) $ny
	xth_me_cmds_move_linept $id $cpid
	set xth(me,cmds,$id,$cpid,xp) $nxp
	set xth(me,cmds,$id,$cpid,yp) $nyp
	set xth(me,cmds,$id,$cpid,idp) $xth(me,cmds,$id,$pid,idp)
	set xth(me,cmds,$id,$cpid,xn) $nxn
	set xth(me,cmds,$id,$cpid,yn) $nyn
	set xth(me,cmds,$id,$cpid,idn) $xth(me,cmds,$id,$pid,idn)
	set xth(me,cmds,$id,$cpid,smooth) $nsmth 
	set ix [lsearch $xth(me,cmds,$id,xplist) $cpid]
	xth_me_cmds_update_linept_list $id $cpid
      }
      xth_me_cmds_move_linelnpt $id $pid
    }  
    xth_me_cmds_update_line_data $id
    xth_me_cmds_update_list $id    
  }
  
}


proc xth_me_cmds_update_line_vars {id pid} {

  global xth
  set xth(ctrl,me,line,type) $xth(me,cmds,$id,type)
  set xth(ctrl,me,line,name) $xth(me,cmds,$id,name)
  set xth(ctrl,me,line,opts) $xth(me,cmds,$id,options)
  set xth(ctrl,me,line,reverse) $xth(me,cmds,$id,reverse)
  set xth(ctrl,me,line,close) $xth(me,cmds,$id,close)

  set at [lindex $xth(me,themes,list) $xth(me,acttheme)]
  set tx [lsearch -exact $xth(me,themes,$at,line,hidelist) $xth(me,cmds,$id,type)]
  if {$tx < 0} {
    set xth(ctrl,me,line,themetype) {}
  } else {
    set xth(ctrl,me,line,themetype) [lindex $xth(me,themes,$at,line,showlist) $tx]
  }
  

  xth_me_cmds_update_linept_ctrl $id $pid
    
}

proc xth_me_cmds_update_area_vars {id} {

  global xth
  set xth(ctrl,me,ac,type) $xth(me,cmds,$id,type)
  set xth(ctrl,me,ac,opts) $xth(me,cmds,$id,options)

  set at [lindex $xth(me,themes,list) $xth(me,acttheme)]
  set tx [lsearch -exact $xth(me,themes,$at,area,hidelist) $xth(me,cmds,$id,type)]
  if {$tx < 0} {
    set xth(ctrl,me,ac,themetype) {}
  } else {
    set xth(ctrl,me,ac,themetype) [lindex $xth(me,themes,$at,area,showlist) $tx]
  }
  
}





proc xth_me_cmds_get_default_linept_cp {prv id pid} {
  global xth

  set x $xth(me,cmds,$id,$pid,x)
  set y $xth(me,cmds,$id,$pid,y)
  
  if {$prv} {
    if {$xth(me,cmds,$id,$pid,idn)} {
      set dx [expr $x - $xth(me,cmds,$id,$pid,xn)]
      set dy [expr $y - $xth(me,cmds,$id,$pid,yn)]
    } else {
      set dx 0.0
      set dy 0.0
    }
  } else {
    if {$xth(me,cmds,$id,$pid,idp)} {
      set dx [expr $x - $xth(me,cmds,$id,$pid,xp)]
      set dy [expr $y - $xth(me,cmds,$id,$pid,yp)]
    } else {
      set dx 0.0
      set dy 0.0
    }
  }
  set dd [expr hypot($dy, $dx)]
  set rd $dd

  if {$dd == 0.0} {

    set ppix [expr [lsearch $xth(me,cmds,$id,xplist) $pid] - 1]
    if {$ppix >= 0} {  
      set ppid [lindex $xth(me,cmds,$id,xplist) $ppix]
      set xp $xth(me,cmds,$id,$ppid,x)
      set yp $xth(me,cmds,$id,$ppid,y)
    } else {
      set xp $x
      set yp $y
    }
  
    set npix [expr [lsearch $xth(me,cmds,$id,xplist) $pid] + 1]
    set npid [lindex $xth(me,cmds,$id,xplist) $npix]
    if {$npid > 0} {
      set xn $xth(me,cmds,$id,$npid,x)
      set yn $xth(me,cmds,$id,$npid,y)
    } else {
      set xn $x
      set yn $y
    }

    if {$prv} {
      set dx [expr $xp - $xn]
      set dy [expr $yp - $yn]
    } else {
      set dx [expr $xn - $xp]
      set dy [expr $yn - $yp]
    }
    set dd [expr hypot($dy, $dx)]
 
  }
  
  if {$dd == 0.0} {
    set dx 0.0
    set dy 1.0
    set dd 1.0
    set rd 40.0
  }
  
  if {$rd == 0.0} {
    if {$prv} {
      set ppix [expr [lsearch $xth(me,cmds,$id,xplist) $pid] - 1]
      if {$ppix >= 0} {
	set ppid [lindex $xth(me,cmds,$id,xplist) $ppix]
	if {$xth(me,cmds,$id,$ppid,idn)} {
	  set rdx [expr $xth(me,cmds,$id,$ppid,xn) - $xth(me,cmds,$id,$ppid,x)]
	  set rdy [expr $xth(me,cmds,$id,$ppid,yn) - $xth(me,cmds,$id,$ppid,y)]
	  set rd [expr hypot($rdy,$rdx)]
	}
      }        
    } else {
      set npix [expr [lsearch $xth(me,cmds,$id,xplist) $pid] + 1]
      set npid [lindex $xth(me,cmds,$id,xplist) $npix]
      if {$npid > 0} {
	if {$xth(me,cmds,$id,$npid,idp)} {
	  set rdx [expr $xth(me,cmds,$id,$npid,xp) - $xth(me,cmds,$id,$npid,x)]
	  set rdy [expr $xth(me,cmds,$id,$npid,yp) - $xth(me,cmds,$id,$npid,y)]
	  set rd [expr hypot($rdy,$rdx)]
	}
      }        
    }
  }
  
  if {$rd == 0.0} {
    set rd 40.0
  }
  
  return [list [expr double([format "%.2f" [expr $x + $dx / $dd * $rd]])] \
    [expr double([format "%.2f" [expr $y + $dy / $dd * $rd]])]]
  
}


proc xth_me_cmds_get_smoothed_cp {which xp yp x y xn yn} {

  set dxp [expr $x - $xp]
  set dyp [expr $y - $yp]
  set dp [expr hypot($dxp,$dyp)]

  set dxn [expr $xn - $x]
  set dyn [expr $yn - $y]
  set dn [expr hypot($dxn,$dyn)]
  
  if {($dp == 0.0) || ($dn == 0.0)} {
    return [list $xp $yp $xn $yn]
  }
  
  if {$which < 0} {
    set xp [expr $x - $dxn / $dn * $dp]
    set yp [expr $y - $dyn / $dn * $dp]
  } elseif {$which > 0} {
    set xn [expr $x + $dxp / $dp * $dn]
    set yn [expr $y + $dyp / $dp * $dn]
  } else {
    set dx [expr $xn - $xp]
    set dy [expr $yn - $yp]
    set d [expr hypot($dx,$dy)]
    if {$d == 0.0} {
       set dx [expr -1.0 * $dyp]
       set dy $dxp
       set d $dp
    }
    set xp [expr $x - $dx / $d * $dp]
    set yp [expr $y - $dy / $d * $dp]      
    set xn [expr $x + $dx / $d * $dn]
    set yn [expr $y + $dy / $d * $dn]
  }

  return [list [expr double([format "%.2f" $xp])] \
     [expr double([format "%.2f" $yp])] [expr double([format "%.2f" $xn])] \
     [expr double([format "%.2f" $yn])]]
}


proc xth_me_cmds_get_default_rotation {id pid} {

  global xth

  set x $xth(me,cmds,$id,$pid,x)
  set y $xth(me,cmds,$id,$pid,y)
  set dp 0.0
  set dn 0.0

  if {$xth(me,cmds,$id,$pid,idp) || $xth(me,cmds,$id,$pid,idn)} {

    set xp $xth(me,cmds,$id,$pid,xp)
    set yp $xth(me,cmds,$id,$pid,yp)
    set dp [expr hypot($xp - $x, $yp - $y)]
    set xn $xth(me,cmds,$id,$pid,xn)
    set yn $xth(me,cmds,$id,$pid,yn)
    set dn [expr hypot($xn - $x, $yn - $y)]
    
  } else {

    set ppix [expr [lsearch $xth(me,cmds,$id,xplist) $pid] - 1]
    if {$ppix >= 0} {
      set ppid [lindex $xth(me,cmds,$id,xplist) $ppix]
      set xp $xth(me,cmds,$id,$ppid,x)
      set yp $xth(me,cmds,$id,$ppid,y)
      set dp [expr hypot($xp - $x, $yp - $y)]
    } else {
      set xp {}
      set yp {}
    }
    
    set npix [expr [lsearch $xth(me,cmds,$id,xplist) $pid] + 1]
    set npid [lindex $xth(me,cmds,$id,xplist) $npix]
    if {$npid > 0} {
      set xn $xth(me,cmds,$id,$npid,x)
      set yn $xth(me,cmds,$id,$npid,y)
      set dn [expr hypot($xn - $x, $yn - $y)]
    } else {
      set xn {}
      set yn {}
    }
  }
  
  if {($dp > 0.0) && ($dn > 0.0)} {
    if {$dp > $dn} {
      set xn [expr $x + ($xn - $x) / $dn * $dp]
      set yn [expr $y + ($yn - $y) / $dn * $dp]
    } else {
      set xp [expr $x + ($xp - $x) / $dp * $dn]
      set yp [expr $y + ($yp - $y) / $dp * $dn]
    }
  }

  if {[string length $xn] < 1} {
    set xn $x
    set yn $y
  } 

  if {[string length $xp] < 1} {
    set xp $x
    set yp $y
  } 

  set rr [expr 360.0 - atan2($yn - $yp,$xn - $xp) / 3.14159265359 * 180.0];
  while {$rr >= 360.0} {set rr [expr $rr - 360.0]};
  while {$rr < 0.0} {set rr [expr $rr + 360.0]};
  return [format "%.1f" $rr]
  
}


proc xth_me_cmds_update_linept_list {id pid} {
  global xth
  set ix [lsearch $xth(me,cmds,$id,xplist) $pid]
  set xth(me,cmds,$id,plist) \
    [lreplace $xth(me,cmds,$id,plist) $ix $ix [format "%7.2f %7.2f" $xth(me,cmds,$id,$pid,x) $xth(me,cmds,$id,$pid,y)]]
}


proc xth_me_cmds_close_line {id {unredo 1}} {
  global xth
  # prida bod ak treba, ak je novy, oznaci ho
  set xl $xth(me,cmds,$id,xplist)
  set lix [expr [llength $xl] - 2]
  set fpid [lindex $xl 0]
  set nwpid $xth(me,cmds,selpid)
  set olpid $xth(me,cmds,selpid)
  if {($lix < 2) || \
    ($xth(me,cmds,$id,$fpid,x) != $xth(me,cmds,$id,[lindex $xl $lix],x)) || \
    ($xth(me,cmds,$id,$fpid,y) != $xth(me,cmds,$id,[lindex $xl $lix],y))} {
    set oldurok $xth(me,unredook)
    set xth(me,unredook) 0
    set iix [expr $lix + 1]
    xth_me_cmds_create_line_point $id $iix 0 \
      $xth(me,cmds,$id,$fpid,x) $xth(me,cmds,$id,$fpid,y) $xth(me,cmds,$id,$fpid,xp) $xth(me,cmds,$id,$fpid,yp) \
      $xth(me,cmds,$id,$fpid,xn) $xth(me,cmds,$id,$fpid,yn) $xth(me,cmds,$id,$fpid,smooth) {} {} {} {} 1.0
    set xth(me,unredook) $oldurok
    set nwpid $xth(me,cmds,$id,lpid)
    xth_me_cmds_select_linept $id $nwpid
    set unpoint "xth_me_cmds_delete_linept $id $nwpid"
    set repoint "xth_me_cmds_undelete_linept $id $nwpid $iix"
  } else {
    set lpid [lindex $xl $lix]
    set unpoint "xth_me_cmds_select $id\nset xth(me,cmds,$id,$lpid,xp) {$xth(me,cmds,$id,$lpid,xp)}\nset xth(me,cmds,$id,$lpid,yp) {$xth(me,cmds,$id,$lpid,yp)}\nset xth(me,cmds,$id,$lpid,idp) {$xth(me,cmds,$id,$lpid,idp)}\nset xth(me,cmds,$id,$lpid,xn) {$xth(me,cmds,$id,$lpid,xn)}\nset xth(me,cmds,$id,$lpid,yn) {$xth(me,cmds,$id,$lpid,yn)}\nset xth(me,cmds,$id,$lpid,idn) {$xth(me,cmds,$id,$lpid,idn)}\nset xth(me,cmds,$id,$lpid,smooth) {$xth(me,cmds,$id,$lpid,smooth)}\nxth_me_cmds_move_linelnpt $id $lpid"
    set repoint "xth_me_cmds_select $id\nset xth(me,cmds,$id,$lpid,xp) {$xth(me,cmds,$id,$fpid,xp)}\nset xth(me,cmds,$id,$lpid,yp) {$xth(me,cmds,$id,$fpid,yp)}\nset xth(me,cmds,$id,$lpid,idp) {$xth(me,cmds,$id,$fpid,idp)}\nset xth(me,cmds,$id,$lpid,xn) {$xth(me,cmds,$id,$fpid,xn)}\nset xth(me,cmds,$id,$lpid,yn) {$xth(me,cmds,$id,$fpid,yn)}\nset xth(me,cmds,$id,$lpid,idn) {$xth(me,cmds,$id,$fpid,idn)}\nset xth(me,cmds,$id,$lpid,smooth) {$xth(me,cmds,$id,$fpid,smooth)}\nxth_me_cmds_move_linelnpt $id $lpid"
    eval $repoint
  }
  # nastavi close
  set xth(me,cmds,$id,close) 1
  # update vars
  xth_me_cmds_update_line_vars $id $nwpid
  xth_me_cmds_update_line_data $id
  xth_me_prev_cmd $xth(me,cmds,$id,data)
  if {$xth(me,cmds,mode) == 2} {
    set remode "xth_me_cmds_set_mode 0"
    set unmode "xth_me_cmds_set_mode 2"
    eval $remode
  } else {
    set remode ""
    set unmode ""
  }
  if {$unredo} {
    xth_me_unredo_action [mc "line closing"] \
    "$unpoint\nset xth(me,cmds,$id,close) 0\nxth_me_cmds_update_line_vars $id $olpid\nxth_me_cmds_update_line_data $id\nxth_me_prev_cmd \$xth(me,cmds,$id,data)\n$unmode" \
    "$repoint\nset xth(me,cmds,$id,close) 1\nxth_me_cmds_update_line_vars $id $nwpid\nxth_me_cmds_update_line_data $id\nxth_me_prev_cmd \$xth(me,cmds,$id,data)\n$remode"
  }
}


proc xth_me_cmds_open_line {id} {
  global xth
  set xth(me,cmds,$id,close) 0
  xth_me_cmds_update_line_vars $id $xth(me,cmds,selpid)
  xth_me_cmds_update_line_data $id
  xth_me_prev_cmd $xth(me,cmds,$id,data)
  xth_me_unredo_action [mc "line opening"] \
    "xth_me_cmds_reclose_line $id" \
    "xth_me_cmds_open_line $id"
}

proc xth_me_cmds_reclose_line {id} {
  global xth
  set xth(me,cmds,$id,close) 1
  xth_me_cmds_update_line_data $id
  xth_me_prev_cmd $xth(me,cmds,$id,data)
  xth_me_cmds_update_line_vars $id $xth(me,cmds,selpid)
}


proc xth_me_cmds_get_bezier_coords {x1 y1 c1x c1y c2x c2y x2 y2} {
#  if {[llength $x1] > 1} {
#    set tlen [lindex $x1 2]
#    set rotation [lindex $x1 1]
#    set x1 [lindex $x1 0]
#  } else {
#    set rotation {}
#  }
  if {[string length $c1x] < 1} {
    set c1x $x1
    set c1y $y1
  }
  if {[string length $c2x] < 1} {
    set c2x $x2
    set c2y $y2
  }
  set q 20
#  if {[string length $rotation] > 0} {    
#    set crds [list [expr $x1 + $tlen * sin(double($rotation)/180.0*3.14159265359)] \
#      [expr $y1 + $tlen * cos(double($rotation)/180.0*3.14159265359)]]
#  } else {
    set crds {}
#  }
  for {set i 0} {$i <= $q} {incr i} {
    set t [expr $i.0 / $q.0]
    set t2 [expr pow($t,2.0)]
    set t3 [expr pow($t,3.0)]
    set t_ [expr 1.0 - $t]
    set t_2 [expr pow($t_,2.0)]
    set t_3 [expr pow($t_,3.0)]
    lappend crds [expr $t_3 * $x1 + 3.0 * $t * $t_2 * $c1x + 3.0 * $t2 * $t_ * $c2x + $t3 * $x2] \
      [expr $t_3 * $y1 + 3.0 * $t * $t_2 * $c1y + 3.0 * $t2 * $t_ * $c2y + $t3 * $y2]
  }
  return $crds
}


proc xth_me_cmds_real2can_coords {crds} {
  set x 1
  set r {}
  foreach c $crds {
    if $x {
      lappend r [xth_me_real2canx $c]
      set x 0
    } else {
      lappend r [xth_me_real2cany $c]
      set x 1
    }
  }
  return $r
}


proc xth_me_cmds_get_crds2state {id ppid pid} {
  global xth
#  set tlen [expr 0.01 * $xth(me,zoom) * $xth(gui,me,line,ticksize)]

  if {$ppid > 0} {

#    if {[lsearch $xth(me,cmds,$id,xplist) $ppid] == 0} {
#      set rot [xth_me_cmds_get_default_rotation $id $ppid]
#      set x1 [list $xth(me,cmds,$id,$ppid,x) $rot $tlen]
#    } else {
#      set rot {}
      set x1 $xth(me,cmds,$id,$ppid,x)
#    }

    set st normal
    if {$xth(me,cmds,$id,$ppid,idn) || $xth(me,cmds,$id,$pid,idp)} {
      set crds [xth_me_cmds_get_bezier_coords $x1 \
	$xth(me,cmds,$id,$ppid,y) $xth(me,cmds,$id,$ppid,xn) \
	$xth(me,cmds,$id,$ppid,yn) $xth(me,cmds,$id,$pid,xp) \
	$xth(me,cmds,$id,$pid,yp) $xth(me,cmds,$id,$pid,x) \
	$xth(me,cmds,$id,$pid,y)]
    } else {
#      if {[string length $rot] > 0} {
#        set crds [list [expr $xth(me,cmds,$id,$ppid,x) + $tlen * sin(double($rot)/180.0*3.14159265359)] \
#          [expr $xth(me,cmds,$id,$ppid,y) + $tlen * cos(double($rot)/180.0*3.14159265359)]]
#      } else {
	set crds {}
#      }
      lappend crds $xth(me,cmds,$id,$ppid,x) $xth(me,cmds,$id,$ppid,y) \
	$xth(me,cmds,$id,$pid,x) $xth(me,cmds,$id,$pid,y)
    }
  } else {
    set crds {0 0 10 10}
    set st hidden
  }
  return [list $st $crds]
}



proc xth_me_cmds_draw_lineln {id ppid pid} {
  global xth
  set st2crds [xth_me_cmds_get_crds2state $id $ppid $pid]
  set st [lindex $st2crds 0]
  set crds [lindex $st2crds 1]
  $xth(me,can) create line [xth_me_cmds_real2can_coords $crds] -width $xth(gui,me,line,width) -fill $xth(gui,me,activefill) \
    -tags "line ln$id lnln$id ln$id.$pid command" -state $st
  xth_me_bind_area_drag ln$id.$pid {}
  $xth(me,can) bind ln$id.$pid <1> "xth_me_cmds_click_lineln {$id $pid} pt$id.$pid %x %y"
  set highlight_on "if {\$xth(me,cmds,selid) != $id} {\$xth(me,can) itemconfigure lnln$id -fill \$xth(gui,me,highlightfill)}"
  set highlight_off "if {\$xth(me,cmds,selid) != $id} {\$xth(me,can) itemconfigure lnln$id -fill \[$xth(me,can) itemcget pt$id.$pid -outline\]}"
  $xth(me,can) bind ln$id.$pid  "$highlight_on\nxth_status_bar_push me; xth_status_bar_status me \"\$xth(me,cmds,$id,listix): \$xth(me,cmds,$id,sbar)\""
  $xth(me,can) bind ln$id.$pid  "$highlight_off\nxth_status_bar_pop me"
  catch {$xth(me,can) lower ln$id.$pid point}
}


proc xth_me_cmds_move_lineln {id ppid pid} {
  global xth
  set st2crds [xth_me_cmds_get_crds2state $id $ppid $pid]
  set st [lindex $st2crds 0]
  set crds [lindex $st2crds 1]
  $xth(me,can) coords ln$id.$pid [xth_me_cmds_real2can_coords $crds]
  $xth(me,can) itemconfigure ln$id.$pid -state $st
}


proc xth_me_cmds_draw_linept {id pid} {
  global xth
  $xth(me,can) create oval [expr [xth_me_real2canx $xth(me,cmds,$id,$pid,x)] - $xth(gui,me,line,psize)] \
  [expr [xth_me_real2cany $xth(me,cmds,$id,$pid,y)] - $xth(gui,me,line,psize)] [expr [xth_me_real2canx $xth(me,cmds,$id,$pid,x)] + $xth(gui,me,line,psize)] \
  [expr [xth_me_real2cany $xth(me,cmds,$id,$pid,y)] + $xth(gui,me,line,psize)] -width 1 -outline blue -fill $xth(gui,me,activefill) \
  -tags "point ln$id lnpt$id pt$id.$pid command"
  set highlight_on "if {\$xth(me,cmds,selid) != $id} {\$xth(me,can) itemconfigure lnln$id -fill \$xth(gui,me,highlightfill)}"
  set highlight_off "if {\$xth(me,cmds,selid) != $id} {\$xth(me,can) itemconfigure lnln$id -fill \[$xth(me,can) itemcget pt$id.$pid -outline\]}"
  $xth(me,can) bind pt$id.$pid  "$highlight_on\n$xth(me,can) itemconfigure pt$id.$pid -fill cyan; xth_status_bar_push me; xth_status_bar_status me \"\$xth(me,cmds,$id,listix): \[lindex \[regexp -inline -- {^\[^\\n\]*} \$xth(me,cmds,$id,data)\] 0\]\""
  $xth(me,can) bind pt$id.$pid  "$highlight_off\n$xth(me,can) itemconfigure pt$id.$pid -fill \[$xth(me,can) itemcget ln$id.$pid -fill\]; xth_status_bar_pop me"
  $xth(me,can) bind pt$id.$pid <1> "xth_me_cmds_click {$id $pid} pt$id.$pid \$xth(me,cmds,$id,$pid,x) \$xth(me,cmds,$id,$pid,y) %x %y"
  $xth(me,can) bind pt$id.$pid <$xth(gui,rmb)> "xth_me_cmds_special_select {$id $pid} %x %y"  
  $xth(me,can) bind pt$id.$pid  "xth_me_cmds_special_select {$id $pid} %x %y"  
  $xth(me,can) bind pt$id.$pid <$xth(kb_control)-1> "xth_me_cmds_click_area pt$id.$pid %x %y"
}


proc xth_me_cmds_move_linept {id pid} {
  global xth
  $xth(me,can) coords pt$id.$pid [expr [xth_me_real2canx $xth(me,cmds,$id,$pid,x)] - $xth(gui,me,line,psize)] \
  [expr [xth_me_real2cany $xth(me,cmds,$id,$pid,y)] - $xth(gui,me,line,psize)] [expr [xth_me_real2canx $xth(me,cmds,$id,$pid,x)] + $xth(gui,me,line,psize)] \
  [expr [xth_me_real2cany $xth(me,cmds,$id,$pid,y)] + $xth(gui,me,line,psize)]
}


proc xth_me_cmds_draw_line {id} {
  global xth
  set ppid 0
  foreach pid $xth(me,cmds,$id,xplist) {
    if {($pid > 0)} {
      xth_me_cmds_draw_lineln $id $ppid $pid
      xth_me_cmds_draw_linept $id $pid
    }
    set ppid $pid
  }
  catch {$xth(me,can) raise lnpt$id point}
}


proc xth_me_cmds_move_line {id} {
  global xth
  set ppid 0
  foreach pid $xth(me,cmds,$id,xplist) {
    if {($pid > 0)} {
      xth_me_cmds_move_lineln $id $ppid $pid
      xth_me_cmds_move_linept $id $pid
    }
    set ppid $pid
  }
}


proc xth_me_cmds_move_linelnpt {id pid} {
  global xth
  set xl $xth(me,cmds,$id,xplist)
  set ix [lsearch $xl $pid]
  if {($ix < 0) || ($pid == 0)} {
    return
  }
  
  set pix [expr $ix - 1]
  set nix [expr $ix + 1]
    
  set fix 0
  set lix [expr [llength $xl] - 2]
  
  set cpid 0
  set mpix 0
  set mnix 0
  
  if {$xth(me,cmds,$id,close)} {
    if {$ix == $fix} {
      set cpid [lindex $xl $lix]
      set pix [expr $lix - 1]
      set mpix 1
    } elseif {$ix == $lix} {
      set cpid [lindex $xl $fix]
      set nix [expr $fix + 1]
      set mnix 1
    }
  }
  xth_me_cmds_move_linept $id $pid
  if {$cpid > 0} {
    xth_me_cmds_move_linept $id $cpid
  }
  
  if {($pix >= $fix) && ($pix <= $lix)} {
    set ppid [lindex $xl $pix]
  } else {
    set ppid 0
  }
  if {$mpix} {
    xth_me_cmds_move_lineln $id $ppid $cpid
  } else {
    xth_me_cmds_move_lineln $id $ppid $pid
  }


  if {($nix >= $fix) && ($nix <= $lix)} {
    set npid [lindex $xl $nix]
    if {$mnix} {
      xth_me_cmds_move_lineln $id $cpid $npid
    } else {
      xth_me_cmds_move_lineln $id $pid $npid
    }
  }
  
}

proc xth_me_cmds_start_create_linept {tagOrId x y mx my} {

  global xth

  set xth(me,lptc,id) $xth(me,cmds,selid)
  set id $xth(me,lptc,id)
  if {$xth(me,cmds,$id,ct) != 3} {
    return
  }
  set xl $xth(me,cmds,$id,xplist)
  set inspid $xth(me,cmds,inspid)
  set oldpid $xth(me,cmds,selpid)
  set ix [lsearch $xl $inspid]
  set xth(me,lptc,mx) $mx
  set xth(me,lptc,my) $my
  set xth(me,lptc,tagOrId) $tagOrId
  if {($ix == 0) && $xth(me,cmds,$id,close)} {
    set unclosecmd "xth_me_cmds_reclose_line $id"
    set reclosecmd "xth_me_cmds_open_line $id"
    set ook $xth(me,unredook)
    set xth(me,unredook) 0
    eval $reclosecmd
    set xth(me,unredook) $ook
  } else {
    set unclosecmd ""
    set reclosecmd ""
  }

  xth_me_cmds_create_line_point $id $ix 0 $x $y {} {} {} {} 0 {} {} {} {} 1.0
  xth_me_cmds_hide_linept_xctrl  
  set pid $xth(me,cmds,$id,lpid)
  set pnpid [xth_me_cmds_get_line_pnpid $id $pid]
  set xth(me,lptc,ppid) [lindex $pnpid 0]
  set ppid $xth(me,lptc,ppid)
  set xth(me,lptc,npid) [lindex $pnpid 1]
  set npid $xth(me,lptc,npid)
  set xth(me,lptc,pid) $pid
  set xth(me,lptc,oldm) [$xth(me,can) bind $tagOrId ]
  set xth(me,lptc,oldr) [$xth(me,can) bind $tagOrId ]
  $xth(me,can) itemconfigure $xth(me,canid,linept,ncp) -fill yellow
  $xth(me,can) bind $tagOrId  "xth_me_cmds_continue_linept_creation %x %y 1"
  $xth(me,can) bind $tagOrId <$xth(kb_control)-B1-Motion> "xth_me_cmds_continue_linept_creation %x %y 0"
  $xth(me,can) bind $tagOrId  "xth_me_cmds_end_create_linept %x %y 1"
  $xth(me,can) bind $tagOrId <$xth(kb_control)-B1-ButtonRelease> "xth_me_cmds_end_create_linept %x %y 0"
  xth_me_cmds_continue_linept_creation $mx $my 1
  xth_me_unredo_action [mc "inserting line point"] \
    "xth_me_cmds_delete_linept $id $pid\n$unclosecmd\nxth_me_cmds_select_linept $id $oldpid" \
    "$reclosecmd\nxth_me_cmds_undelete_linept $id $pid $ix"
  if {($ppid > 0) && $xth(me,cmds,$id,$ppid,idn)} {
    $xth(me,can) itemconfigure lineptppcp -state normal
  }
  if {($npid > 0) && $xth(me,cmds,$id,$npid,idp)} {
    $xth(me,can) itemconfigure lineptnncp -state normal
  }
  xth_me_cmds_continue_linept_creation $mx $my 1
}


proc xth_me_cmds_continue_linept_creation {x y motionID} {
  global xth
  set id $xth(me,lptc,id)
  set pid $xth(me,lptc,pid)
  set ppid $xth(me,lptc,ppid)
  set npid $xth(me,lptc,npid)
  set dx [expr $x - $xth(me,lptc,mx)]
  set dy [expr $y - $xth(me,lptc,my)]
  set dst [expr hypot($dy,$dx)]
  if {$dst > $xth(gui,me,line,psize)} {
    set xn [xth_me_can2realx [$xth(me,can) canvasx $x]]
    set yn [xth_me_can2realy [$xth(me,can) canvasy $y]]
    set xth(me,cmds,$id,$pid,idn) 1
    set xth(me,cmds,$id,$pid,xn) [expr double([format %.2f $xn])]
    set xth(me,cmds,$id,$pid,yn) [expr double([format %.2f $yn])]
    set xth(me,cmds,$id,$pid,idp) 1
    set x $xth(me,cmds,$id,$pid,x)
    set y $xth(me,cmds,$id,$pid,y)
    set dx [expr $xn - $x]
    set dy [expr $yn - $y]
    $xth(me,can) itemconfigure lineptpcp -state normal
    $xth(me,can) itemconfigure lineptncp -state normal
    if {($ppid > 0) && $xth(me,cmds,$id,$ppid,idn)} {
      $xth(me,can) itemconfigure lineptppcp -state normal
    }
    set d [expr hypot($dy,$dx)]
    if {$motionID} {
      set xd $d
      set xth(me,lptc,xd) $d
    } else {
      if {[info exist xth(me,lptc,xd)]} {
	set xd $xth(me,lptc,xd)
      } else {
	set xd $d
      }
    }
    if {(!$motionID)} {
      set dx [expr $dx / $d * $xd]
      set dy [expr $dy / $d * $xd]
    }
    set xth(me,cmds,$id,$pid,xp) [expr double([format %.2f [expr $x - $dx]])]
    set xth(me,cmds,$id,$pid,yp) [expr double([format %.2f [expr $y - $dy]])]
    set xth(me,cmds,$id,$pid,smooth) 1
  } else {
    set xth(me,cmds,$id,$pid,idn) 0
    set xth(me,cmds,$id,$pid,xn) {}
    set xth(me,cmds,$id,$pid,yn) {}
    set xth(me,cmds,$id,$pid,idp) 0
    set xth(me,cmds,$id,$pid,xp) {}
    set xth(me,cmds,$id,$pid,yp) {}
    $xth(me,can) itemconfigure lineptpcp -state hidden
    $xth(me,can) itemconfigure lineptncp -state hidden
  }
  xth_me_cmds_move_lineptcp_xctrl $id $ppid $pid $npid
  xth_me_cmds_move_line_xctrl $id
  xth_me_cmds_move_linelnpt $id $pid
  update idletasks
}


proc xth_me_cmds_end_create_linept {x y motionID} {
  global xth
  xth_me_cmds_continue_linept_creation $x $y $motionID
  set tagOrId $xth(me,lptc,tagOrId)
  set id $xth(me,lptc,id)
  set pid $xth(me,lptc,pid)
  $xth(me,can) bind $tagOrId  $xth(me,lptc,oldm)
  $xth(me,can) bind $tagOrId  $xth(me,lptc,oldr)
  $xth(me,can) bind $tagOrId <$xth(kb_control)-B1-Motion> ""
  $xth(me,can) bind $tagOrId <$xth(kb_control)-B1-ButtonRelease> ""
  xth_me_cmds_hide_linept_xctrl  
  set ook $xth(me,unredook)
  set xth(me,unredook) 0
  if {$xth(me,cmds,$id,$pid,idn)} {
    $xth(me,can) itemconfigure $xth(me,canid,linept,ncp) -fill yellow
  } else {
    $xth(me,can) itemconfigure $xth(me,canid,linept,ncp) -fill red
  }
  xth_me_cmds_select_linept $id $pid
  xth_me_cmds_update_line_data $id
  xth_me_prev_cmd $xth(me,cmds,$id,data)
  set xth(me,unredook) $ook
}


proc xth_me_cmds_end_line {} {
  set recmds "xth_me_cmds_set_mode 0"
  set uncmds "xth_me_cmds_set_mode 2"
  eval $recmds
  xth_me_unredo_action [mc "line ending"] $uncmds $recmds
}


proc xth_me_cmds_start_linept_insert {} {
  global xth
  set xth(me,cmds,inspid) $xth(me,cmds,selpid)
  xth_me_cmds_set_mode 2
}


proc xth_me_cmds_start_area_insert {btn} {
  global xth
  if {$btn && ($xth(me,cmds,mode) == 3)} {
    xth_me_cmds_set_mode 0
  } else {
    xth_me_cmds_set_mode 3
  }
}


proc xth_me_cmds_get_line_pnpid {id pid} {
  global xth
  set xl $xth(me,cmds,$id,xplist)
  set ix [lsearch $xl $pid]
  set lix [expr [llength $xl] - 2]
  if {$ix > 0} {
    set ppid [lindex $xl [expr $ix - 1]]
  } elseif {$xth(me,cmds,$id,close) && ($lix > 0)} {
    set ppid [lindex $xl [expr $lix - 1]]
  } else {
    set ppid 0
  }
  if {$ix < $lix} {
    set npid [lindex $xl [expr $ix + 1]]
  } elseif {$xth(me,cmds,$id,close) && ($lix > 0)} {
    set npid [lindex $xl 1]
  } else {
    set npid 0
  }
  return [list $ppid $npid]
}


proc xth_me_cmds_start_linecp_drag {tagOrId id ppid pid npid which x y} {

  global xth
  
  xth_me_cmds_update {}

  set xth(me,lcpd,tagOrId) $tagOrId
  set xth(me,lcpd,id) $id
  set xth(me,lcpd,pid) $pid
  set xth(me,lcpd,ppid) $ppid
  set xth(me,lcpd,npid) $npid
  set xth(me,lcpd,which) $which
  set xth(me,lcpd,mx) $x
  set xth(me,lcpd,my) $y
  
  set lix [expr [llength $xth(me,cmds,$id,xplist)] - 2]
  if {$lix > 0} {
    set fpid [lindex $xth(me,cmds,$id,xplist) 0]
    set lpid [lindex $xth(me,cmds,$id,xplist) $lix] 
  }
  set altpid 0
  set altppid 0
  set altnpid 0
  if {($lix > 0) && $xth(me,cmds,$id,close)} {
    if {$pid == $fpid} {
      set altpid $lpid
    } elseif {$pid == $lpid} {
      set altpid $fpid
    }
    if {$ppid == $fpid} {
      set altppid $lpid
    } elseif {$ppid == $lpid} {
      set altppid $fpid
    }
    if {$npid == $fpid} {
      set altnpid $lpid
    } elseif {$npid == $lpid} {
      set altnpid $fpid
    }
  }
  
  set xth(me,lcpd,altpid) $altpid
  set xth(me,lcpd,altppid) $altppid
  set xth(me,lcpd,altnpid) $altnpid

  set xth(me,lcpd,oldenter) [$xth(me,can) bind $tagOrId ]
  $xth(me,can) bind $tagOrId  ""
  set xth(me,lcpd,oldleave) [$xth(me,can) bind $tagOrId ]
  $xth(me,can) bind $tagOrId  ""
  set xth(me,lcpd,oldfill) [$xth(me,can) itemcget $tagOrId -fill]
  $xth(me,can) itemconfigure $tagOrId -fill {}
  $xth(me,can) bind $tagOrId  "xth_me_cmds_continue_linecp_drag %x %y 0"
  $xth(me,can) bind $tagOrId  "xth_me_cmds_end_linecp_drag %x %y 0"

  set dragto 0

  switch $which {
    x {
      set dragto 1
      $xth(me,can) bind $tagOrId  "xth_me_cmds_continue_linecp_drag %x %y 1"
      $xth(me,can) bind $tagOrId  "xth_me_cmds_end_linecp_drag %x %y 1"
      $xth(me,can) bind $tagOrId <$xth(kb_control)-B1-Motion> "xth_me_cmds_continue_linecp_drag %x %y 0"
      $xth(me,can) bind $tagOrId <$xth(kb_control)-B1-ButtonRelease> "xth_me_cmds_end_linecp_drag %x %y 0"
      set xth(me,lcpd,oldmove,pcplstate) [$xth(me,can) itemcget $xth(me,canid,linept,pcpl) -state]
      $xth(me,can) itemconfigure $xth(me,canid,linept,pcpl) -state hidden
      set xth(me,lcpd,oldmove,ncplstate) [$xth(me,can) itemcget $xth(me,canid,linept,ncpl) -state]
      $xth(me,can) itemconfigure $xth(me,canid,linept,ncpl) -state hidden
      set xth(me,lcpd,oldmove,selstate) [$xth(me,can) itemcget $xth(me,canid,linept,selector) -state]
      $xth(me,can) itemconfigure $xth(me,canid,linept,selector) -state hidden
      set xth(me,lcpd,oldmove,pcpfill) [$xth(me,can) itemcget $xth(me,canid,linept,pcp) -fill]
      $xth(me,can) itemconfigure $xth(me,canid,linept,pcp) -fill {}
      set xth(me,lcpd,oldmove,ncpfill) [$xth(me,can) itemcget $xth(me,canid,linept,ncp) -fill]
      $xth(me,can) itemconfigure $xth(me,canid,linept,ncp) -fill {}
      $xth(me,can) itemconfigure $xth(me,canid,linept,fr) -width 1 -arrow none
      $xth(me,can) itemconfigure $xth(me,canid,linept,fl) -width 1 -arrow none
      set xth(me,lcpd,oldx) $xth(me,cmds,$id,$pid,x)
      set xth(me,lcpd,oldy) $xth(me,cmds,$id,$pid,y)
      set xth(me,lcpd,oldxp) $xth(me,cmds,$id,$pid,xp)
      set xth(me,lcpd,oldyp) $xth(me,cmds,$id,$pid,yp)
      set xth(me,lcpd,oldxn) $xth(me,cmds,$id,$pid,xn)
      set xth(me,lcpd,oldyn) $xth(me,cmds,$id,$pid,yn)
    }
    p {
      set xth(me,lcpd,oldxp) $xth(me,cmds,$id,$pid,xp)
      set xth(me,lcpd,oldyp) $xth(me,cmds,$id,$pid,yp)
      set xth(me,lcpd,oldxn) $xth(me,cmds,$id,$pid,xn)
      set xth(me,lcpd,oldyn) $xth(me,cmds,$id,$pid,yn)
    }
    n {
      set xth(me,lcpd,oldxp) $xth(me,cmds,$id,$pid,xp)
      set xth(me,lcpd,oldyp) $xth(me,cmds,$id,$pid,yp)
      set xth(me,lcpd,oldxn) $xth(me,cmds,$id,$pid,xn)
      set xth(me,lcpd,oldyn) $xth(me,cmds,$id,$pid,yn)
    }
    pp {
      set xth(me,lcpd,oldxpp) $xth(me,cmds,$id,$ppid,xn)
      set xth(me,lcpd,oldypp) $xth(me,cmds,$id,$ppid,yn)
    }
    nn {
      set xth(me,lcpd,oldxnn) $xth(me,cmds,$id,$npid,xp)
      set xth(me,lcpd,oldynn) $xth(me,cmds,$id,$npid,yp)
    }
  }
  
  xth_me_cmds_continue_linecp_drag $x $y $dragto
  $xth(me,can) configure -cursor {}
  
}


proc xth_me_cmds_continue_linecp_drag {x y dragto} {
  global xth
  set id $xth(me,lcpd,id)
  set pid $xth(me,lcpd,pid)
  set ppid $xth(me,lcpd,ppid)
  set npid $xth(me,lcpd,npid)
  set tagOrId $xth(me,lcpd,tagOrId)
  set altpid $xth(me,lcpd,altpid)
  set altppid $xth(me,lcpd,altppid)
  set altnpid $xth(me,lcpd,altnpid)
  set nx [expr double([format %.2f [xth_me_can2realx [$xth(me,can) canvasx $x]]])]
  set ny [expr double([format %.2f [xth_me_can2realy [$xth(me,can) canvasy $y]]])]
  set dts 0
  if $dragto {
    set dtl [xth_me_cmds_drag_to $id $pid $x $y]
    if {[lindex $dtl 0]} {
      set nx [lindex $dtl 1]
      set ny [lindex $dtl 2]
      set dts 1
    }
  }
  if $dts {
    $xth(me,can) itemconfigure $tagOrId -fill cyan
  } else {
    $xth(me,can) itemconfigure $tagOrId -fill {}
  }
  switch $xth(me,lcpd,which) {
    x {
      set xth(ctrl,me,linept,x) $nx
      set xth(me,cmds,$id,$pid,x) $nx
      set xth(ctrl,me,linept,y) $ny
      set xth(me,cmds,$id,$pid,y) $ny
      if {$altpid > 0} {
	set xth(me,cmds,$id,$altpid,y) $ny
	set xth(me,cmds,$id,$altpid,x) $nx
      }
      
      if {$xth(me,cmds,$id,$pid,idp)} {
	set nxp [expr double([format %.2f [expr $nx + $xth(me,lcpd,oldxp) - $xth(me,lcpd,oldx)]])]
	set nyp [expr double([format %.2f [expr $ny + $xth(me,lcpd,oldyp) - $xth(me,lcpd,oldy)]])]
	set xth(ctrl,me,linept,xp) $nxp
	set xth(me,cmds,$id,$pid,xp) $nxp
	set xth(ctrl,me,linept,yp) $nyp
	set xth(me,cmds,$id,$pid,yp) $nyp
	if {$altpid > 0} {
	  set xth(me,cmds,$id,$altpid,xp) $nxp
	  set xth(me,cmds,$id,$altpid,yp) $nyp
	}
      }
      
      if {$xth(me,cmds,$id,$pid,idn)} {
	set nxn [expr double([format %.2f [expr $nx + $xth(me,lcpd,oldxn) - $xth(me,lcpd,oldx)]])]
	set nyn [expr double([format %.2f [expr $ny + $xth(me,lcpd,oldyn) - $xth(me,lcpd,oldy)]])]
	set xth(ctrl,me,linept,xn) $nxn
	set xth(me,cmds,$id,$pid,xn) $nxn
	set xth(ctrl,me,linept,yn) $nyn
	set xth(me,cmds,$id,$pid,yn) $nyn
	if {$altpid > 0} {
	  set xth(me,cmds,$id,$altpid,xn) $nxn
	  set xth(me,cmds,$id,$altpid,yn) $nyn
	}
      }
      xth_me_cmds_move_linept_xctrl $id $pid
      xth_me_cmds_move_line_xctrl $id
    }
    p {
      set xth(ctrl,me,linept,xp) $nx
      set xth(me,cmds,$id,$pid,xp) $nx
      set xth(ctrl,me,linept,yp) $ny
      set xth(me,cmds,$id,$pid,yp) $ny
      if {$altpid > 0} {
	set xth(me,cmds,$id,$altpid,xp) $nx
	set xth(me,cmds,$id,$altpid,yp) $ny
      }
      if {$xth(me,cmds,$id,$pid,idn) && $xth(me,cmds,$id,$pid,smooth)} {
	set ncn [xth_me_cmds_get_smoothed_cp 1 $nx $ny \
	  $xth(me,cmds,$id,$pid,x) $xth(me,cmds,$id,$pid,y) \
	  $xth(me,cmds,$id,$pid,xn) $xth(me,cmds,$id,$pid,yn)]
	set nxn [lindex $ncn 2]
	set nyn [lindex $ncn 3]
	set xth(ctrl,me,linept,xn) $nxn
	set xth(me,cmds,$id,$pid,xn) $nxn
	set xth(ctrl,me,linept,yn) $nyn
	set xth(me,cmds,$id,$pid,yn) $nyn
	if {$altpid > 0} {
	  set xth(me,cmds,$id,$altpid,xn) $nxn
	  set xth(me,cmds,$id,$altpid,yn) $nyn
	}
      }
    }
    n {
      set xth(ctrl,me,linept,xn) $nx
      set xth(me,cmds,$id,$pid,xn) $nx
      set xth(ctrl,me,linept,yn) $ny
      set xth(me,cmds,$id,$pid,yn) $ny
      if {$altpid > 0} {
	set xth(me,cmds,$id,$altpid,xn) $nx
	set xth(me,cmds,$id,$altpid,yn) $ny
      }
      if {$xth(me,cmds,$id,$pid,idp) && $xth(me,cmds,$id,$pid,smooth)} {
	set ncp [xth_me_cmds_get_smoothed_cp -1 \
	  $xth(me,cmds,$id,$pid,xp) $xth(me,cmds,$id,$pid,yp) \
	  $xth(me,cmds,$id,$pid,x) $xth(me,cmds,$id,$pid,y) \
	  $nx $ny]
	set nxp [lindex $ncp 0]
	set nyp [lindex $ncp 1]
	set xth(ctrl,me,linept,xp) $nxp
	set xth(me,cmds,$id,$pid,xp) $nxp
	set xth(ctrl,me,linept,yp) $nyp
	set xth(me,cmds,$id,$pid,yp) $nyp
	if {$altpid > 0} {
	  set xth(me,cmds,$id,$altpid,xp) $nxp
	  set xth(me,cmds,$id,$altpid,yp) $nyp
	}
      }
    }
    pp {
      if {$xth(me,cmds,$id,$ppid,smooth)} {
	set ncp [xth_me_cmds_get_smoothed_cp 1 \
	  $xth(me,cmds,$id,$ppid,xp) $xth(me,cmds,$id,$ppid,yp) \
	  $xth(me,cmds,$id,$ppid,x) $xth(me,cmds,$id,$ppid,y) \
	  $nx $ny]
	set xth(me,cmds,$id,$ppid,xn) [lindex $ncp 2]
	set xth(me,cmds,$id,$ppid,yn) [lindex $ncp 3]
      } else {
	set xth(me,cmds,$id,$ppid,xn) $nx
	set xth(me,cmds,$id,$ppid,yn) $ny
      }
      if {$altppid > 0} {
	set xth(me,cmds,$id,$altppid,xn) $xth(me,cmds,$id,$ppid,xn)
	set xth(me,cmds,$id,$altppid,yn) $xth(me,cmds,$id,$ppid,yn)
      }
    }
    nn {
      if {$xth(me,cmds,$id,$npid,smooth)} {
	set ncp [xth_me_cmds_get_smoothed_cp -1 \
	  $nx $ny \
	  $xth(me,cmds,$id,$npid,x) $xth(me,cmds,$id,$npid,y) \
	  $xth(me,cmds,$id,$npid,xn) $xth(me,cmds,$id,$npid,yn)]
	set xth(me,cmds,$id,$npid,xp) [lindex $ncp 0]
	set xth(me,cmds,$id,$npid,yp) [lindex $ncp 1]
      } else {
	set xth(me,cmds,$id,$npid,xp) $nx
	set xth(me,cmds,$id,$npid,yp) $ny
      }
      if {$altnpid > 0} {
	set xth(me,cmds,$id,$altnpid,xp) $xth(me,cmds,$id,$npid,xp)
	set xth(me,cmds,$id,$altnpid,yp) $xth(me,cmds,$id,$npid,yp)
      }
    }
  }
  xth_me_cmds_move_lineptcp_xctrl $id $ppid $pid $npid
  xth_me_cmds_move_linelnpt $id $pid
  update idletasks
}


proc xth_me_cmds_end_linecp_drag {x y dragto} {
  global xth

  xth_me_cmds_continue_linecp_drag $x $y $dragto
  set id $xth(me,lcpd,id)
  set pid $xth(me,lcpd,pid)
  set ppid $xth(me,lcpd,ppid)
  set npid $xth(me,lcpd,npid)
  set altpid $xth(me,lcpd,altpid)
  set altppid $xth(me,lcpd,altppid)
  set altnpid $xth(me,lcpd,altnpid)
  set tagOrId $xth(me,lcpd,tagOrId)

  set movecmd "xth_me_cmds_move_lineptcp_xctrl $id $ppid $pid $npid\nxth_me_cmds_move_linept_xctrl $id $pid\nxth_me_cmds_move_linelnpt $id $pid"

  switch $xth(me,lcpd,which) {
    x {
      set xth(me,cmds,$id,$pid,x) $xth(me,lcpd,oldx)
      set xth(me,cmds,$id,$pid,y) $xth(me,lcpd,oldy)
      set xth(me,cmds,$id,$pid,xp) $xth(me,lcpd,oldxp)
      set xth(me,cmds,$id,$pid,yp) $xth(me,lcpd,oldyp)
      set xth(me,cmds,$id,$pid,xn) $xth(me,lcpd,oldxn)
      set xth(me,cmds,$id,$pid,yn) $xth(me,lcpd,oldyn)
      if {$altpid > 0} {
	set xth(me,cmds,$id,$altpid,x) $xth(me,lcpd,oldx)
	set xth(me,cmds,$id,$altpid,y) $xth(me,lcpd,oldy)
	set xth(me,cmds,$id,$altpid,xp) $xth(me,lcpd,oldxp)
	set xth(me,cmds,$id,$altpid,yp) $xth(me,lcpd,oldyp)
	set xth(me,cmds,$id,$altpid,xn) $xth(me,lcpd,oldxn)
	set xth(me,cmds,$id,$altpid,yn) $xth(me,lcpd,oldyn)
      }
      set xth(me,unredola) "moving line point"
      $xth(me,can) itemconfigure $xth(me,canid,linept,pcpl) -state $xth(me,lcpd,oldmove,pcplstate)
      $xth(me,can) itemconfigure $xth(me,canid,linept,ncpl) -state $xth(me,lcpd,oldmove,ncplstate)
      $xth(me,can) itemconfigure $xth(me,canid,linept,selector) -state $xth(me,lcpd,oldmove,selstate)
      $xth(me,can) itemconfigure $xth(me,canid,linept,pcp) -fill $xth(me,lcpd,oldmove,pcpfill)
      $xth(me,can) itemconfigure $xth(me,canid,linept,ncp) -fill $xth(me,lcpd,oldmove,ncpfill)
      $xth(me,can) itemconfigure $xth(me,canid,linept,fr) -width 5 -arrow last
      $xth(me,can) itemconfigure $xth(me,canid,linept,fl) -width 5 -arrow last
    }
    p {
      set xth(me,cmds,$id,$pid,xp) $xth(me,lcpd,oldxp)
      set xth(me,cmds,$id,$pid,yp) $xth(me,lcpd,oldyp)
      set xth(me,cmds,$id,$pid,xn) $xth(me,lcpd,oldxn)
      set xth(me,cmds,$id,$pid,yn) $xth(me,lcpd,oldyn)
      if {$altpid > 0} {
	set xth(me,cmds,$id,$altpid,xp) $xth(me,lcpd,oldxp)
	set xth(me,cmds,$id,$altpid,yp) $xth(me,lcpd,oldyp)
	set xth(me,cmds,$id,$altpid,xn) $xth(me,lcpd,oldxn)
	set xth(me,cmds,$id,$altpid,yn) $xth(me,lcpd,oldyn)
      }
      set xth(me,unredola) "moving control pint"
    }
    n {
      set xth(me,cmds,$id,$pid,xp) $xth(me,lcpd,oldxp)
      set xth(me,cmds,$id,$pid,yp) $xth(me,lcpd,oldyp)
      set xth(me,cmds,$id,$pid,xn) $xth(me,lcpd,oldxn)
      set xth(me,cmds,$id,$pid,yn) $xth(me,lcpd,oldyn)
      if {$altpid > 0} {
	set xth(me,cmds,$id,$altpid,xp) $xth(me,lcpd,oldxp)
	set xth(me,cmds,$id,$altpid,yp) $xth(me,lcpd,oldyp)
	set xth(me,cmds,$id,$altpid,xn) $xth(me,lcpd,oldxn)
	set xth(me,cmds,$id,$altpid,yn) $xth(me,lcpd,oldyn)
      }
      set xth(me,unredola) "moving control pint"
    }
    pp {
      if {$altppid > 0} {
	set unaltcmd "set xth(me,cmds,$id,$altppid,xn) $xth(me,lcpd,oldxpp)\nset xth(me,cmds,$id,$altppid,yn) $xth(me,lcpd,oldypp)"
	set realtcmd "set xth(me,cmds,$id,$altppid,xn) $xth(me,cmds,$id,$ppid,xn)\nset xth(me,cmds,$id,$altppid,yn) $xth(me,cmds,$id,$ppid,yn)"
      } else {
	set unaltcmd ""
	set realtcmd ""
      }
      xth_me_unredo_action [mc "moving control point"] \
      "xth_me_cmds_select {$id $pid}\nset xth(me,cmds,$id,$ppid,xn) $xth(me,lcpd,oldxpp)\nset xth(me,cmds,$id,$ppid,yn) $xth(me,lcpd,oldypp)\n$unaltcmd\n$movecmd\nxth_me_cmds_update_line_data $id\nxth_me_prev_cmd [list $xth(me,cmds,$id,data)]" \
      "xth_me_cmds_select {$id $pid}\nset xth(me,cmds,$id,$ppid,xn) $xth(me,cmds,$id,$ppid,xn)\nset xth(me,cmds,$id,$ppid,yn) $xth(me,cmds,$id,$ppid,yn)\n$realtcmd\n$movecmd\nxth_me_cmds_update_line_data $id\nxth_me_prev_cmd [list $xth(me,cmds,$id,data)]"
    }
    nn {
      if {$altnpid > 0} {
	set unaltcmd "set xth(me,cmds,$id,$altnpid,xp) $xth(me,lcpd,oldxnn)\nset xth(me,cmds,$id,$altnpid,yp) $xth(me,lcpd,oldynn)"
	set realtcmd "set xth(me,cmds,$id,$altnpid,xp) $xth(me,cmds,$id,$npid,xp)\nset xth(me,cmds,$id,$altnpid,yp) $xth(me,cmds,$id,$npid,yp)"
      } else {
	set unaltcmd ""
	set realtcmd ""
      }
      xth_me_unredo_action [mc "moving control point"] \
      "xth_me_cmds_select {$id $pid}\nset xth(me,cmds,$id,$npid,xp) $xth(me,lcpd,oldxnn)\nset xth(me,cmds,$id,$npid,yp) $xth(me,lcpd,oldynn)\n$unaltcmd\n$movecmd\nxth_me_cmds_update_line_data $id\nxth_me_prev_cmd [list $xth(me,cmds,$id,data)]" \
      "xth_me_cmds_select {$id $pid}\nset xth(me,cmds,$id,$npid,xp) $xth(me,cmds,$id,$npid,xp)\nset xth(me,cmds,$id,$npid,yp) $xth(me,cmds,$id,$npid,yp)\n$realtcmd\n$movecmd\nxth_me_cmds_update_line_data $id\nxth_me_prev_cmd [list $xth(me,cmds,$id,data)]"
    }
  }

  $xth(me,can) bind $tagOrId  $xth(me,lcpd,oldenter)
  $xth(me,can) bind $tagOrId  $xth(me,lcpd,oldleave)
  $xth(me,can) itemconfigure $tagOrId -fill $xth(me,lcpd,oldfill)
  $xth(me,can) bind $tagOrId  ""
  $xth(me,can) bind $tagOrId  ""
  $xth(me,can) bind $tagOrId <$xth(kb_control)-B1-Motion> ""
  $xth(me,can) bind $tagOrId <$xth(kb_control)-B1-ButtonRelease> ""
  $xth(me,can) configure -cursor crosshair
  xth_me_cmds_update_line_data $id
  xth_me_prev_cmd $xth(me,cmds,$id,data)  
  xth_me_cmds_move_line_xctrl $id
  xth_me_cmds_update {}
  
}


proc xth_me_cmds_configure_linept_size_xctrl {id pid} {

  global xth
  
  if {([string length $id] > 0) && ($pid > 0)} {
    if {([string length $xth(me,cmds,$id,$pid,rs)] > 0)} {
      $xth(me,can) itemconfigure $xth(me,canid,linept,fr) -state normal
      $xth(me,can) bind $xth(me,canid,linept,fr) <1> \
	"xth_me_cmds_start_linept_fdrag $xth(me,canid,linept,fr) $id $pid r %x %y"
      $xth(me,can) bind $xth(me,canid,linept,fr)  \
	"$xth(me,can) itemconfigure $xth(me,canid,linept,fr) -fill #ffda00"
      $xth(me,can) bind $xth(me,canid,linept,fr)  \
	"$xth(me,can) itemconfigure $xth(me,canid,linept,fr) -fill red"
    } else {
      $xth(me,can) bind $xth(me,canid,linept,fr) <1> ""
      $xth(me,can) bind $xth(me,canid,linept,fr)  ""
      $xth(me,can) bind $xth(me,canid,linept,fr)  ""
      $xth(me,can) itemconfigure $xth(me,canid,linept,fr) -state hidden
    }
    if {([string length $xth(me,cmds,$id,$pid,ls)] > 0) || \
      (([string length $xth(me,cmds,$id,$pid,rotation)] > 0) && \
       ([string length $xth(me,cmds,$id,$pid,rs)] < 1))} {
      $xth(me,can) itemconfigure $xth(me,canid,linept,fl) -state normal
      $xth(me,can) bind $xth(me,canid,linept,fl) <1> \
	"xth_me_cmds_start_linept_fdrag $xth(me,canid,linept,fl) $id $pid l %x %y"
      $xth(me,can) bind $xth(me,canid,linept,fl)  \
	"$xth(me,can) itemconfigure $xth(me,canid,linept,fl) -fill #ffda00"
      $xth(me,can) bind $xth(me,canid,linept,fl)  \
	"$xth(me,can) itemconfigure $xth(me,canid,linept,fl) -fill red"
    } else {
      $xth(me,can) bind $xth(me,canid,linept,fl) <1> ""
      $xth(me,can) bind $xth(me,canid,linept,fl)  ""
      $xth(me,can) bind $xth(me,canid,linept,fl)  ""
      $xth(me,can) itemconfigure $xth(me,canid,linept,fl) -state hidden
    }
  } else {
      $xth(me,can) bind $xth(me,canid,linept,fr) <1> ""
      $xth(me,can) bind $xth(me,canid,linept,fr)  ""
      $xth(me,can) bind $xth(me,canid,linept,fr)  ""
      $xth(me,can) itemconfigure $xth(me,canid,linept,fr) -state hidden
      $xth(me,can) bind $xth(me,canid,linept,fl) <1> ""
      $xth(me,can) bind $xth(me,canid,linept,fl)  ""
      $xth(me,can) bind $xth(me,canid,linept,fl)  ""
      $xth(me,can) itemconfigure $xth(me,canid,linept,fl) -state hidden
  }
}


proc xth_me_cmds_move_linept_size_xctrl {id pid rot rs ls} {

  global xth
  
  set rotng 1
  if {[string length $rot] > 0} {
    set rot [expr double($rot) / 180.0 * 3.14159265359]
    set rotng 0
  } else {
    set rot [expr double([xth_me_cmds_get_default_rotation $id $pid]) / 180 * 3.14159265359]
  }

  if {[string length $rs] > 0} {
    set rs [expr 0.01 * $rs * $xth(me,zoom)]
  } else {
    set rs 30.0
  }

  if {[string length $ls] > 0} {
    set ls [expr 0.01 * $ls * $xth(me,zoom)]
  } else {
    set ls 30.0
  }


  set x [xth_me_real2canx $xth(me,cmds,$id,$pid,x)]
  set y [xth_me_real2cany $xth(me,cmds,$id,$pid,y)]
  set ca [expr cos($rot)]
  set sa [expr sin($rot)]
  
  set yvx [expr $sa * $ls]
  set yvy [expr - $ca * $ls]
  set xvx [expr - $sa * $rs]
  set xvy [expr $ca * $rs]
  
  if {$xth(me,cmds,$id,reverse) && $rotng} {
    set xvx [expr -1.0 * $xvx]
    set xvy [expr -1.0 * $xvy]
    set yvx [expr -1.0 * $yvx]
    set yvy [expr -1.0 * $yvy]
  }
  
  $xth(me,can) coords $xth(me,canid,linept,fr) $x $y [expr $x + $xvx] [expr $y + $xvy]
  $xth(me,can) coords $xth(me,canid,linept,fl) $x $y [expr $x + $yvx] [expr $y + $yvy]
  update idletasks    
}


proc xth_me_cmds_start_linept_fdrag {tagOrId id pid side x y} {
  global xth
  xth_me_cmds_update {}
  set xth(me,lptfd,tagOrId) $tagOrId
  set xth(me,lptfd,id) $id
  set xth(me,lptfd,pid) $pid
  set xth(me,lptfd,side) $side
  set dx [expr [xth_me_can2realx [$xth(me,can) canvasx $x]] - $xth(me,cmds,$id,$pid,x)]
  set dy [expr [xth_me_can2realy [$xth(me,can) canvasy $y]] - $xth(me,cmds,$id,$pid,y)] 

  if {[string length $xth(me,cmds,$id,$pid,rotation)] == 0} {
    set xth(me,lptfd,rot) 0
  } else {
    set xth(me,lptfd,rot) 1
    set xth(me,lptfd,orot) [expr atan2($dy,$dx)]
  }

  if {[string length $xth(me,cmds,$id,$pid,[format "%ss" $side])] == 0} {
    set xth(me,lptfd,size) 0
  } else {
    set xth(me,lptfd,size) 1
    set xth(me,lptfd,osize) [expr hypot($dy,$dx)]
  }

  $xth(me,can) itemconfigure $tagOrId -fill #ffda00
  set xth(me,lptfd,benter) [$xth(me,can) bind $tagOrId ]
  set xth(me,lptfd,bleave) [$xth(me,can) bind $tagOrId ]
  $xth(me,can) bind $tagOrId  ""
  $xth(me,can) bind $tagOrId  ""
  $xth(me,can) bind $tagOrId  "xth_me_cmds_linept_fdrag %x %y"
  $xth(me,can) bind $tagOrId  "xth_me_cmds_end_linept_fdrag %x %y"
  xth_me_cmds_linept_fdrag $x $y
  $xth(me,can) configure -cursor {}
}

proc xth_me_cmds_linept_fdrag {x y} {
  global xth
  set id $xth(me,lptfd,id)
  set pid $xth(me,lptfd,pid)
  set side $xth(me,lptfd,side)

  set dx [expr [xth_me_can2realx [$xth(me,can) canvasx $x]] - $xth(me,cmds,$id,$pid,x)]
  set dy [expr [xth_me_can2realy [$xth(me,can) canvasy $y]] - $xth(me,cmds,$id,$pid,y)]
  
  if $xth(me,lptfd,rot) {
    set rot [expr double($xth(me,cmds,$id,$pid,rotation)) - 180.0 / 3.14159265359 * (atan2($dy,$dx) - $xth(me,lptfd,orot))]
    if {$rot < 0.0} {
      set rot [expr 360.0 + $rot]
    } elseif {$rot >= 360.0} {
      set rot [expr $rot - 360.0]
    }
    set rot [format "%.1f" $rot]
    set xth(ctrl,me,linept,rot) $rot
  }
  
  if {$xth(me,lptfd,size)} {
    set cs [expr hypot($dy,$dx)]
    set ns [expr $xth(me,cmds,$id,$pid,[format "%ss" $side]) - $xth(me,lptfd,osize) + $cs]
    if {$ns <= 0.0} {set ns 0.1}
    set xth(ctrl,me,linept,[format "%ss" $side]) [format "%.1f" $ns]
  }

  xth_me_cmds_move_linept_size_xctrl $id $pid $xth(ctrl,me,linept,rot) $xth(ctrl,me,linept,rs) $xth(ctrl,me,linept,ls)
  xth_me_cmds_move_line_xctrl $id
}

proc xth_me_cmds_end_linept_fdrag {x y} {
  global xth

  xth_me_cmds_linept_fdrag $x $y

  set id $xth(me,lptfd,id)
  set pid $xth(me,lptfd,pid)
  set side $xth(me,lptfd,side)
  set tagOrId $xth(me,lptfd,tagOrId)

  $xth(me,can) configure -cursor crosshair
  if {$xth(me,lptfd,size)} {
    set xth(me,unredola) "line point resizing"
  } else {
    set xth(me,unredola) "line point rotation"
  }
  $xth(me,can) bind $tagOrId  ""
  $xth(me,can) bind $tagOrId  ""
  if {[lsearch [$xth(me,can) itemcget $tagOrId -tags] current] > -1} {
    $xth(me,can) itemconfigure $tagOrId -fill #ffda00
  }
  
  $xth(me,can) bind $tagOrId  $xth(me,lptfd,benter)
  $xth(me,can) bind $tagOrId  $xth(me,lptfd,bleave)
  xth_me_cmds_update {}
}


proc xth_me_cmds_set_colors {} {
  global xth
  # najde id zaciatku a konca sucasneho scrapu
  set xid [lsearch $xth(me,cmds,xlist) $xth(me,cmds,selid)]
  set llen [llength $xth(me,cmds,xlist)]
  set cid $xid
  
  set dcol #fff222
  set scol $xth(gui,me,pasivefill)
  if {$xth(me,cmds,$xth(me,cmds,selid),ct) == 4} {
    set col $dcol
    set ocol $scol
  } elseif {$xth(me,cmds,$xth(me,cmds,selid),ct) == 5} {
    set col $scol
    set ocol $dcol
  } else {
    set col $scol
    set ocol $scol
  }
  
  set xth(me,curscrap) {}
  set godown 1
  if {$cid < 0} {
    set cid [expr $xid + 1]
    set godown 0
  }
  while {(($cid >= 0) && ($cid < $llen)) || ($godown)} {
    set id [lindex $xth(me,cmds,xlist) $cid]
    switch $xth(me,cmds,$id,ct) {
      2 {
	$xth(me,can) itemconfigure pt$id -outline $col -fill $col
      }
      3 {
	$xth(me,can) itemconfigure lnpt$id -outline $col -fill $col
	$xth(me,can) itemconfigure lnln$id -fill $col
      }
      4 - 5 {
	if {(![string equal $col $dcol]) && ($xth(me,cmds,$id,ct) == 4)} {
	  set xth(me,curscrap) $xth(me,cmds,$id,name)
#          if {[string equal $xth(me,cmds,$id,projection) extended]} {
#            set xth(me,snai) -1
#          } else {
#            set xth(me,snai) 1
#          }
    set xth(me,snai) 1
	}
	if {$cid != $xid} {
	  set col $dcol
	}
      }
    }
    
    if {$godown} {
      incr cid -1      
      if {$cid < 0} {
	set cid [expr $xid + 1]
	set godown 0
	set col $ocol
      }
    } else {
      incr cid 1
    }
  }
  xth_app_title me
}


proc xth_me_cmds_show_current_area {} {

  global xth

  set id $xth(me,cmds,selid)
  if {$xth(me,cmds,$id,ct) != 6} {
    return
  }

  set xid [expr [lsearch $xth(me,cmds,xlist) $id] + 1]
  set llen [llength $xth(me,cmds,xlist)]
  set cid $xid

  
  set godown 1
  if {$cid < 0} {
    set cid [expr $xid - 1]
    set godown 0
  }

  set llist $xth(me,cmds,$id,llist)
  set llast [expr [llength $llist] - 1]
  set lcsel [$xth(ctrl,me,ac).ll.l curselection]
  set lsel {}
  if {([llength $lcsel] > 0) && ($lcsel < $llast)} {
    set lsel [lindex $llist $lcsel]
  }
  
  while {(($cid >= 0) && ($cid < $llen)) || ($godown)} {
    set oid [lindex $xth(me,cmds,xlist) $cid]
    switch $xth(me,cmds,$oid,ct) {
      3 {
	foreach lnid $llist {
	  if {[string equal $xth(me,cmds,$oid,name) $lnid]} {
	    if {([llength $lsel] == 0) || [string equal $lsel $lnid]} {
	      $xth(me,can) itemconfigure lnpt$oid -fill red
	      $xth(me,can) itemconfigure lnln$oid -fill red
	    } else {
	      $xth(me,can) itemconfigure lnpt$oid -fill $xth(gui,me,pasivefill)
	      $xth(me,can) itemconfigure lnln$oid -fill $xth(gui,me,pasivefill)
	    }
	  }
	}
      }
      4 {
	return
      }
      5 {
	if {$godown} {
	  if {$cid != $xid} {
	    set cid [expr $xid - 1]
	    set godown 0
	  }
	} else return
      }
    }
    
    if {$godown} {
      incr cid 1      
      if {$cid >= $llen} {
	set cid [expr $xid - 1]
	set godown 0
      }
    } else {
      incr cid -1
    }
    
  }
}




proc xth_me_cmds_line_split {} {

  global xth
  
  xth_me_cmds_update {}
  
  set id $xth(me,cmds,selid)
  set pid $xth(me,cmds,selpid)  
	
	set prev_center [xth_me_get_center]

  # najprv zisti ci mooze, ak nie tak exit
  if {$xth(me,cmds,$id,ct) != 3} {
    return
  }
  
  set px [lsearch -exact $xth(me,cmds,$id,xplist) $pid]
  set lpx [llength $xth(me,cmds,$id,xplist)]
  if {($px <= 0) || ($px >= ($lpx - 2))} {
    return
  }
  
  # vytvori dve nove ciary, close nastavene na false
  set xth(me,unredook) 0
  set ix [lsearch $xth(me,cmds,xlist) $id]
  
  set id1 [xth_me_cmds_create 3 {} {}]
  set xth(me,cmds,$id1,lpid) 0
  set xth(me,cmds,$id1,plist) {"end of line"}
  set xth(me,cmds,$id1,xplist) {0}
  set id2 [xth_me_cmds_create 3 {} {}]
  set xth(me,cmds,$id2,lpid) 0
  set xth(me,cmds,$id2,plist) {"end of line"}
  set xth(me,cmds,$id2,xplist) {0}
  
  set xth(me,cmds,$id1,type) $xth(me,cmds,$id,type)
  set xth(me,cmds,$id2,type) $xth(me,cmds,$id,type)
  set xth(me,cmds,$id1,name) {}
  set xth(me,cmds,$id2,name) {}
  set xth(me,cmds,$id1,reverse) $xth(me,cmds,$id,reverse)
  set xth(me,cmds,$id2,reverse) $xth(me,cmds,$id,reverse)
  set xth(me,cmds,$id1,close) 0
  set xth(me,cmds,$id2,close) 0
  set xth(me,cmds,$id1,options) $xth(me,cmds,$id,options)
  set xth(me,cmds,$id2,options) $xth(me,cmds,$id,options)

  xth_me_cmds_update_list $id1
  xth_me_cmds_update_list $id2
  
  # povklada body
  set ix1 0
  set ix2 0
  for {set cx 0} {$cx < ($lpx - 1)} {incr cx} {
    set opid [lindex $xth(me,cmds,$id,xplist) $cx]
    if {$cx <= $px} {
      #vlozi ho do prvej      
      xth_me_cmds_create_line_point $id1 $ix1 0 \
      $xth(me,cmds,$id,$opid,x) $xth(me,cmds,$id,$opid,y) \
      $xth(me,cmds,$id,$opid,xp) $xth(me,cmds,$id,$opid,yp) \
      $xth(me,cmds,$id,$opid,xn) $xth(me,cmds,$id,$opid,yn) \
      $xth(me,cmds,$id,$opid,smooth) $xth(me,cmds,$id,$opid,rotation) \
      $xth(me,cmds,$id,$opid,rs) $xth(me,cmds,$id,$opid,ls) \
      $xth(me,cmds,$id,$opid,options) 1.0
      incr ix1
    }
    if {$cx >= $px} {
      #vlozi ho do druhej
      xth_me_cmds_create_line_point $id2 $ix2 0 \
      $xth(me,cmds,$id,$opid,x) $xth(me,cmds,$id,$opid,y) \
      $xth(me,cmds,$id,$opid,xp) $xth(me,cmds,$id,$opid,yp) \
      $xth(me,cmds,$id,$opid,xn) $xth(me,cmds,$id,$opid,yn) \
      $xth(me,cmds,$id,$opid,smooth) $xth(me,cmds,$id,$opid,rotation) \
      $xth(me,cmds,$id,$opid,rs) $xth(me,cmds,$id,$opid,ls) \
      $xth(me,cmds,$id,$opid,options) 1.0
      incr ix2
    }
  }
  
  xth_me_cmds_update_line_data $id1
  xth_me_cmds_update_line_data $id2
  
  # zmaze originalnu
  set pid1 0
  set pid2 [lindex $xth(me,cmds,$id2,xplist) 0]
  xth_me_cmds_delete $id
  xth_me_cmds_select [list $id2 $pid2]
	
	# scrollne sa tam, odkial sme zacinali
	xth_me_center_to $prev_center

  set xth(me,unredook) 1
  
  # nastavi undo na zmazanie novych a undelete originalnej
  # a redo na undelete novych a zmazanie originalnej
  xth_me_unredo_action [mc "split line"] \
    "xth_me_cmds_delete $id1; xth_me_cmds_delete $id2; xth_me_cmds_undelete $id $pid $ix; xth_me_center_to {$prev_center}" \
    "xth_me_cmds_undelete $id1 $pid1 $ix; xth_me_cmds_undelete $id2 $pid2 $ix; xth_me_cmds_delete $id; xth_me_cmds_select {$id2 $pid2}; xth_me_center_to {$prev_center}"

}

# todo - zistovat, ci sme nad inymi, ako prave startovacimi pt a lnpt
# pridat button na tracovanie a stop
# pridat vytvorenie bezierovej krivky
proc xth_me_image_get_color {x y {include {}} {exclude {}}} {
  global xth
  # najde obrazok na ktory sme klikli - ak taky ma, spocita suradnice a vrati RGB
  set iid {}
  foreach id [$xth(me,can) find overlapping [xth_me_real2canx $x] [xth_me_real2cany $y] [xth_me_real2canx $x] [xth_me_real2cany $y]] {
    set tags [$xth(me,can) itemcget $id -tags]
    if {[regexp {bgimg.*imgx(\d+)} $tags dum tmpiid]} {
      set iid $tmpiid
    }
    if {[regexp {command} $tags]} {      
      if {([string length $include] > 0) && (!([regexp $include $tags])) && ([regexp $exclude $tags])} {
	return 1
      }
    }
  }
  if {[string length $iid] == 0} {
    return {}
  }
  # calculate color
  set img $xth(me,imgs,$iid,image)
  set iw [image width $img]
  set ih [image height $img]
  set ix [expr round($x - [lindex $xth(me,imgs,$iid,position) 0])]
  set iy [expr round([lindex $xth(me,imgs,$iid,position) 1] - $y)]
  if {$ix < 0} {set ix 0}
  if {$ix >= $iw} {set ix [expr $iw - 1]}
  if {$iy < 0} {set iy 0}
  if {$iy >= $ih} {set iy [expr $ih - 1]}
  return [$img get $ix $iy]
}

proc xth_me_cmds_line_trace_stop {} {
  global xth
  set xth(ctrl,me,line,tracecontinue) 0  
}

proc xth_me_cmds_line_trace_start {} {
  global xth
  set xth(ctrl,me,line,tracedist) 0.0
  xth_me_cmds_line_trace
}

proc xth_me_cmds_line_trace {} {
  global xth
  xth_me_cmds_update {}
  set xth(ctrl,me,line,tracecontinue) 1
  if {$xth(ctrl,me,line,tracerow) > 0} {
    grid $xth(ctrl,me,line).trace -row $xth(ctrl,me,line,tracerow) -column 0 -sticky news
    grid $xth(ctrl,me,line).vector -row $xth(ctrl,me,line,tracerow) -column 1 -sticky news
    set xth(ctrl,me,line,tracebtnfg) [$xth(ctrl,me,line).trace cget -fg]
    set xth(ctrl,me,line,tracebtnbg) [$xth(ctrl,me,line).trace cget -bg]
    set xth(ctrl,me,line,tracebtnafg) [$xth(ctrl,me,line).trace cget -activeforeground]
    set xth(ctrl,me,line,tracebtnabg) [$xth(ctrl,me,line).trace cget -activebackground]
    set xth(ctrl,me,line,tracerow) 0
  }
  set id $xth(me,cmds,selid)
  set npx [llength $xth(me,cmds,$id,xplist)]
  if {$npx < 3} {return}
  # zoberieme posledne 2 body na ciare
  set px0 [lindex $xth(me,cmds,$id,xplist) [expr $npx - 3]]
  set px1 [lindex $xth(me,cmds,$id,xplist) [expr $npx - 2]]
  set xth(me,cmds,selpid) 0
  # spocitame ich vzdialenost
  set x0 $xth(me,cmds,$id,$px0,x)
  set y0 $xth(me,cmds,$id,$px0,y)
  set x1 $xth(me,cmds,$id,$px1,x)
  set y1 $xth(me,cmds,$id,$px1,y)
  set dx [expr $x1 - $x0]
  set dy [expr $y1 - $y0]
  set l [expr hypot($dx, $dy)]
  if {($x0 == $x1) && ($y0 == $y1)} {
    return
  }
  if {$l < 1.0} {set l 1.0}
  set tcol [xth_me_image_get_color $x1 $y1]
  if {[llength $tcol] != 3} {return}
  if {$xth(ctrl,me,line,tracedist) == 0.0} {
    set xth(ctrl,me,line,tracedist) $l
    set xth(ctrl,me,line,tracecolor) $tcol
    set dist $l
  } else {
    set dist $xth(ctrl,me,line,tracedist)
    set tcol $xth(ctrl,me,line,tracecolor)
  }
  xth_me_cmds_line_trace_point_cycle $dist $tcol
  return
}

proc xth_me_cmds_line_trace_point_cycle {dist tcol} {
    global xth
    set next [xth_me_cmds_line_trace_point $dist $tcol]
    set cont [expr [llength $next] > 0]
    if {(!$cont) && ($dist > 2.0)} {
      set next [xth_me_cmds_line_trace_point [expr $dist / 2.0] $tcol]
      set cont [expr [llength $next] > 0]
    }
    if {(!$cont)} {
      set next [xth_me_cmds_line_trace_point [expr $dist * 2.0] $tcol]
      set cont [expr [llength $next] > 0]
    }
    if {$cont && $xth(ctrl,me,line,tracecontinue) && ([llength $next] == 2)} {
      $xth(ctrl,me,line).trace configure -command {xth_me_cmds_line_trace_stop} -text [mc "Stop tracing"] \
        -fg white -bg red -activeforeground white -activebackground red
      set lt 0
      set ld 100
      catch {
        set lt $xth(ctrl,me,line,traceltime)
        set ld $xth(ctrl,me,line,traceldelay)
      }
      set xth(ctrl,me,line,traceltime) [clock clicks -milliseconds]
      set cd [expr 100 - $xth(ctrl,me,line,traceltime) + $lt]
      if {$cd < 0} {
        set cd 0
      }
      if {$cd > 100} {
        set cd 100
      }
      set cd [expr int(0.95 * $ld + 0.05 * $cd)]
      set xth(ctrl,me,line,traceldelay) $cd
      after $cd "after idle \"xth_me_cmds_line_trace_point_cycle $dist [list $tcol]\""
    } else {
      $xth(ctrl,me,line).trace configure -command {xth_me_cmds_line_trace} -text [mc "Continue tracing"] \
        -fg $xth(ctrl,me,line,tracebtnfg) -bg $xth(ctrl,me,line,tracebtnbg) \
        -activeforeground $xth(ctrl,me,line,tracebtnafg) -activebackground $xth(ctrl,me,line,tracebtnabg)
    }
}


proc xth_me_cmds_line_trace_point {dist tcol} {

  global xth
  set id $xth(me,cmds,selid)
  if {$xth(me,cmds,$id,ct) != 3} {return}
  set npx [llength $xth(me,cmds,$id,xplist)]
  if {$npx < 3} {return}
  if {$xth(me,cmds,$id,close)} {return}

  # zoberieme posledne 2 body na ciare
  set pxs [lindex $xth(me,cmds,$id,xplist) 0]
  set px0 [lindex $xth(me,cmds,$id,xplist) [expr $npx - 3]]
  set px1 [lindex $xth(me,cmds,$id,xplist) [expr $npx - 2]]
  set xth(me,cmds,selpid) 0
  
  set itags "pt$id\\.$px1|ln$id\\.$px1"
  set etags "pt$id\\.\\d+|ln$id\\.\\d+"
  
  # spocitame ich vzdialenost
  set xs $xth(me,cmds,$id,$pxs,x)
  set ys $xth(me,cmds,$id,$pxs,y)
  set x0 $xth(me,cmds,$id,$px0,x)
  set y0 $xth(me,cmds,$id,$px0,y)
  set x1 $xth(me,cmds,$id,$px1,x)
  set y1 $xth(me,cmds,$id,$px1,y)
  set dx [expr $x1 - $x0]
  set dy [expr $y1 - $y0]
  set l [expr hypot($dx, $dy)]
  if {($x0 == $x1) && ($y0 == $y1)} {
    return
  }
  set dx [expr $dx / $l * $dist]
  set dy [expr $dy / $l * $dist]
  
  set resol 1.0
  xth_me_center_to [list $x1 $y1]
  set da [expr atan2($resol, $dist)]
  set maxta [expr $da * (2.0 * $dist / $resol)]
  set minta [expr -1.0 * $maxta]
  set tR [lindex $tcol 0]
  set tG [lindex $tcol 1]
  set tB [lindex $tcol 2]
  if {[llength $tcol] == 0} {
    return
  }
  
  # spocitame polkruznicu
  set mode 0
  set ta 0.0
  set sa {}
  set ea {}
  set cstep 0.0
  set goback 0
  while {$mode >= 0} {
    set tx [expr $x1 + $dx * cos($ta) + $dy * sin($ta)]
    set ty [expr $y1 - $dx * sin($ta) + $dy * cos($ta)]
    set ccol [xth_me_image_get_color $tx $ty $itags $etags]
    if {[llength $ccol] != 3} {
      set ceq 0
    } else {
      set dR [expr [lindex $ccol 0] - $tR]
      set dG [expr [lindex $ccol 1] - $tG]
      set dB [expr [lindex $ccol 2] - $tB]
      set ceq [expr [expr ($dR * $dR) + ($dG * $dG) + ($dB * $dB)] < 1600]
    }
    switch $mode {
      0 {
	if {$ceq} {
	  set sa $ta
	  set ea $ta
	  if {$ta == 0.0} {
	    set mode 1
	    set goback 1
	  } elseif {$ta < 0.0} {
	    set mode 1
	  } else {
	    set mode 2
	  }
	} else {
	  if {$ta == 0.0} {
	    set ta $da
	  } elseif {$ta < 0.0} {
	    set ta [expr -1.0 * $ta + $da]
	  } else {
	    set ta [expr -1.0 * $ta]
	  }
	}
      }
      1 {
	# odratavame
	if {$ceq} {
	  set sa $ta
	  set ta [expr $ta - $da]
	} else {
	  if $goback {
	    set ta [expr $ea + $da]
	    set mode 2
	    set goback 0
	  } else {
	    set mode -1
	  }
	}
      }
      2 {
	# priratavame
	if {$ceq} {
	  set ea $ta
	  set ta [expr $ta + $da]
	} else {
	  if $goback {
	    set ta [expr $sa - $da]
	    set mode 1
	    set goback 0
	  } else {
	    set mode -1
	  }
	}
      }
    }    
    if {($ta > $maxta) || ($ta < $minta)} {
      set mode -1
    }
  }
  if {[llength $sa] == 0} {
    return
  }
  
  # vypocitame bod
  set ta [expr 0.5 * ($sa + $ea)]
  set tx [expr $x1 + $dx * cos($ta) + $dy * sin($ta)]
  set ty [expr $y1 - $dx * sin($ta) + $dy * cos($ta)]
  
  set ok 0
  set tryclose [expr ($npx > 3) && (hypot($x1 - $xs, $y1 - $ys) < $dist)]
  if {$tryclose} {
    set ttx $tx
    set tty $ty
    set tx $xs
    set ty $ys
  }
  while {!$ok} {
    set nin 0
    set nto 0
    for {set t 0.0} {$t <= $dist} {set t [expr $t + 1.0]} {
      set lx [expr $x1 + ($tx - $x1) / $dist * $t]
      set ly [expr $y1 + ($ty - $y1) / $dist * $t]
      if {$tryclose} {
	set ccol [xth_me_image_get_color $lx $ly]
      } else {
	set ccol [xth_me_image_get_color $lx $ly $itags $etags]
      }
      if {[llength $ccol] == 1} {
	return
      } elseif {[llength $ccol] == 0} {
	set ceq 0
      } else {
	set dR [expr [lindex $ccol 0] - $tR]
	set dG [expr [lindex $ccol 1] - $tG]
	set dB [expr [lindex $ccol 2] - $tB]
	set ceq [expr [expr ($dR * $dR) + ($dG * $dG) + ($dB * $dB)] < 1600]
      }
      if {$ceq} {incr nin}
      incr nto
    }
    if {double($nin)/double($nto) < 0.5} {
      if {$tryclose} {
	set tryclose 0
	set tx $ttx
	set ty $tty
      } else {
	return
      }
    } else {
      set ok 1
    }
  }
  
  # vlozi bod na ciare
  if {$tryclose} {
    xth_me_cmds_close_line $id
    return 1
  } else {
    xth_me_cmds_start_create_linept {} [format "%.2f" $tx] [format "%.2f" $ty] 0 0
    xth_me_cmds_end_create_linept 0 0 0
    return [list $tx $ty]
  }

}

proc xth_me_cmds_line_poly2bezier {} {
  global xth
  set id $xth(me,cmds,selid)
  if {$xth(me,cmds,$id,ct) != 3} {return}
  set npx [llength $xth(me,cmds,$id,xplist)]
  if {$npx < 4} {return}
  foreach x $xth(me,cmds,$id,xplist) {
    if {($x != 0) && ($xth(me,cmds,$id,$x,idn) || $xth(me,cmds,$id,$x,idp))} return
  }
  set cdir [pwd]
  cd $xth(me,fpath)
  set f [open "therion.bci" w]
  foreach x $xth(me,cmds,$id,xplist) {
    if {$x != 0} {
      puts $f "$xth(me,cmds,$id,$x,x) $xth(me,cmds,$id,$x,y)"
    }
  }
  close $f
  set f [open "therion.bco" w]
  close $f
  update idletasks
  catch {
    set thid [open "|$xth(gui,compcmd) -b" r]
    read $thid
    close $thid
  } 
  set data {}
  catch {
    set f [open "therion.bco" r]
    while {![eof $f]} {
      set ln [gets $f]
      if {[regexp {\d+} $ln]} {
        lappend data $ln
      }
    }
    close $f
  }
  catch {
    file delete therion.bci
    file delete therion.bco
  }
  cd $cdir
  if {[llength $data] == 0} {return}
  set type $xth(me,cmds,$id,type)
  set opts " $xth(me,cmds,$id,options)"
  if {$xth(me,cmds,$id,reverse)} {
    set opts "$opts -reverse on"
  }
  if {$xth(me,cmds,$id,close)} {
    set opts "$opts -close on"
  }
  xth_me_cmds_delete $id
  xth_me_cmds_create_line 0 2 $type $opts $data
  xth_me_cmds_set_mode 0
  return
}
  therion/xtherion/me_imgs.tcl0000644000076400010400000011171012270034016017245 0ustar  userAdministrators##
## me_imgs.tcl --
##
##     Map editor images module.   
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## -------------------------------------------------------------------- 

set xth(gui,openxp) 0
set xth(me,imgs,xviid) 0

proc xth_me_image_update_position {} {
  global xth 
  set iidx [lindex [$xth(ctrl,me,images).il.ilbox curselection] 0]
  set imgx [lindex $xth(me,imgs,xlist) $iidx]
  $xth(ctrl,me,images).ic.posln configure -text [format "%.0f:%.0f" \
    [lindex $xth(me,imgs,$imgx,position) 0] \
    [lindex $xth(me,imgs,$imgx,position) 1]]
  set xth(ctrl,me,images,posx) [format "%.0f" [lindex $xth(me,imgs,$imgx,position) 0]]
  set xth(ctrl,me,images,posy) [format "%.0f" [lindex $xth(me,imgs,$imgx,position) 1]]
  update idletasks
}

proc xth_me_image_update_list {} {
  global xth
  set xth(me,imgs,list) {}
  foreach imgx $xth(me,imgs,xlist) {
    if {$xth(me,imgs,$imgx,XVI)} {
      set imgsize "(XVI)"
    } elseif {[string length $xth(me,imgs,$imgx,image)] > 0} {
      set imgw [image width $xth(me,imgs,$imgx,image)]
      set imgh [image height $xth(me,imgs,$imgx,image)]
      set imgsize "($imgw x $imgh)"
    } else {
      set imgsize "(unknown)"
    }
    lappend xth(me,imgs,list) "$xth(me,imgs,$imgx,name) $imgsize"
  }
}


proc xth_me_image_move_to {} {
  global xth
  xth_me_cmds_update {}
  if {$xth(me,nimgs) < 1} {
    return;
  }
  set iidx [lindex [$xth(ctrl,me,images).il.ilbox curselection] 0]
  set imgx [lindex $xth(me,imgs,xlist) $iidx]
  xth_me_unredo_action [mc "moving image"] \
    "xth_me_image_move $imgx $xth(me,imgs,$imgx,position); xth_me_image_update_position" \
    "xth_me_image_move $imgx $xth(ctrl,me,images,posx) $xth(ctrl,me,images,posy); xth_me_image_update_position"
  xth_me_image_move $imgx $xth(ctrl,me,images,posx) $xth(ctrl,me,images,posy)
  xth_me_image_update_position
}



proc xth_me_image_move {imgx xx yy} {
  # zisti si aktualne suradnice
  global xth
  if {[catch {expr $xx}]} {
    set xx [lindex $xth(me,imgs,$imgx,position) 0]
  }
  if {[catch {expr $yy}]} {
    set yy [lindex $xth(me,imgs,$imgx,position) 1]
  }
  set xth(me,imgs,$imgx,position) [list $xx $yy]
  xth_me_image_redraw $imgx
}


proc xth_me_image_toggle_vsb {iidx} {
  global xth
  if {$xth(me,nimgs) < 1} {
    return
  }
  set isel [$xth(ctrl,me,images).il.ilbox curselection]
  if {[llength $isel] < 1} {
    return
  }
  if {[string length $iidx] < 1} {
    set iidx [lindex $isel 0]
  }
  set imgx [lindex $xth(me,imgs,xlist) $iidx]

  xth_me_unredo_action [mc "toggle image visibility"] \
    "xth_me_image_toggle_vsb $iidx" "xth_me_image_toggle_vsb $iidx"

  switch $xth(me,imgs,$imgx,vsb) {
    0 {
      set xth(me,imgs,$imgx,vsb) 1
      $xth(me,can) itemconfigure $xth(me,imgs,$imgx,image) -state normal
      xth_me_image_rescan $imgx
      xth_me_image_redraw $imgx
      set xth(ctrl,me,images,vis) 1
    }
    1 {
      set xth(me,imgs,$imgx,vsb) 0
      $xth(me,can) itemconfigure $xth(me,imgs,$imgx,image) -state hidden
      set xth(ctrl,me,images,vis) 0
    }
    default {
      set xth(ctrl,me,images,vis) 0
    }
  }
}


proc xth_me_image_set_gamma {imgx} {
  global xth
  if {$xth(me,imgs,$imgx,vsb) <= 0} {
    return
  }
  if {$xth(me,imgs,$imgx,XVI)} {
    return
  }
  set ng $xth(me,imgs,$imgx,gamma)
  xth_status_bar_push me
  set totalsi [llength $xth(me,imgs,$imgx,subimgs)]
  set csi 0
  xth_status_bar_status me [format "Correcting image gamma (%s) ..." $xth(me,imgs,$imgx,name)]
  xth_me_progbar_show $totalsi
  $xth(me,imgs,$imgx,image) configure -gamma $ng
  foreach imgl $xth(me,imgs,$imgx,subimgs) {
    set dsti [lindex $imgl 0]
    incr csi
    xth_me_progbar_prog $csi
    $dsti configure -gamma $ng
  }
  xth_me_progbar_hide
  xth_status_bar_pop me
}

if {$xth(gui,me,nozoom)} {

proc xth_me_images_rescandraw {} {
  global xth
  if {($xth(me,zoom) > 100) && $xth(gui,me,nozoom)} {
    foreach imgx $xth(me,imgs,xlist) {
      xth_me_image_redraw $imgx
    }
  }
}

proc xth_me_image_redraw {imgx} {
  global xth
  if {$xth(me,imgs,$imgx,vsb) <= 0} {
    return
  }
  if {$xth(me,imgs,$imgx,XVI)} {
    xth_me_imgs_xvi_redraw $imgx
    return
  }
  set totalsi [llength $xth(me,imgs,$imgx,subimgs)]
  set csi 0
  set x [lindex $xth(me,imgs,$imgx,position) 0]
  set y [lindex $xth(me,imgs,$imgx,position) 1]
  set w [image width $xth(me,imgs,$imgx,image)]
  set h [image height $xth(me,imgs,$imgx,image)]
  # ak je zoom 100 - nastavi image na source image
  # a kasle na ostatne
  if {$xth(me,zoom) <= 100} {
    foreach imgl $xth(me,imgs,$imgx,subimgs) {
      incr csi
      $xth(me,can) coords [lindex $imgl 1] \
	[xth_me_real2canx [expr $x + [lindex $imgl 2]]] \
	[xth_me_real2cany [expr $y - [lindex $imgl 3]]]
    }
  } else {
    # najde si suradnice z obrazka, ktore su viditelne
    set imgl [lindex $xth(me,imgs,$imgx,subimgs) 0]
    set cminx [winfo x $xth(me,can)]
    set cminy [winfo y $xth(me,can)]
    set cmaxx [expr $cminx + [winfo width $xth(me,can)]]
    set cmaxy [expr $cminy + [winfo height $xth(me,can)]]
    set sx [xth_me_can2realx [$xth(me,can) canvasx $cminx]]
    set sw [expr [xth_me_can2realx [$xth(me,can) canvasx $cmaxx]] - $sx]
    set sy [xth_me_can2realy [$xth(me,can) canvasy $cminy]]
    set sh [expr $sy - [xth_me_can2realy [$xth(me,can) canvasy $cmaxy]]]

    # ak je nieco viditelne - tak to zobrazi
    set vfx [expr round($sx - $x)]
    set vfy [expr round($y - $sy)] 
    set vtx [expr round($vfx + $sw)] 
    set vty [expr round($vfy + $sh)]
    if {$vfx < 0} {set vfx 0}
    if {$vfy < 0} {set vfy 0}
    if {$vtx > $w} {set vtx $w}
    if {$vty > $h} {set vty $h}
    
    #puts "$vfx $vfy $vtx $vty"
    if {($vtx <= 0) || ($vty <= 0) || 
	($vfx >= $w) || ($vfy >= $h) ||
	($vtx <= $vfx) || ($vty <= $vfy)} {
      # nezobrazime nic
      $xth(me,can) itemconfigure [lindex $imgl 1] -image {}
    } else {
      # zobrazime vyrez
      set dsti [lindex $imgl 0]
      $dsti copy $xth(me,imgs,$imgx,image) -zoom [expr $xth(me,zoom) / 100] -shrink \
	-from $vfx $vfy $vtx $vty
      $xth(me,can) itemconfigure [lindex $imgl 1] -image $dsti
      $xth(me,can) coords [lindex $imgl 1] \
	[xth_me_real2canx [expr $x + $vfx]] \
	[xth_me_real2cany [expr $y - $vfy]]
    }
  }
  update idletasks
}

proc xth_me_image_rescan {imgx} {
  global xth
  if {$xth(me,imgs,$imgx,vsb) <= 0} {
    return
  }
  if {$xth(me,imgs,$imgx,XVI)} {
    return
  }
  set srci $xth(me,imgs,$imgx,image)
  xth_status_bar_push me
  set origgamma [$srci cget -gamma]
  $srci configure -gamma 1.0
  set totalsi [llength $xth(me,imgs,$imgx,subimgs)]
  set csi 0
  xth_status_bar_status me [format "Zooming image %s ..." $xth(me,imgs,$imgx,name)]
  xth_me_progbar_show $totalsi
  foreach imgl $xth(me,imgs,$imgx,subimgs) {
    set dsti [lindex $imgl 0]
    incr csi
    xth_me_progbar_prog $csi
    switch $xth(me,zoom) {
      100 {
	$xth(me,can) itemconfigure [lindex $imgl 1] -image $srci
      }
      default {
	$xth(me,can) itemconfigure [lindex $imgl 1] -image $dsti
      }
    }
    switch $xth(me,zoom) {
      25 {$dsti copy $srci -subsample 4 -shrink}
      50 {$dsti copy $srci -subsample 2 -shrink}
      200 {}
      400 {}
      default {}
    }
  }
  xth_me_progbar_hide
  $srci configure -gamma $origgamma
  xth_status_bar_pop me
}

# NOZOOMING
} else {

proc xth_me_images_rescandraw {} {
}

proc xth_me_image_redraw {imgx} {
  global xth
  if {$xth(me,imgs,$imgx,vsb) <= 0} {
    return
  }
  if {$xth(me,imgs,$imgx,XVI)} {
    xth_me_imgs_xvi_redraw $imgx
    return
  }
  set totalsi [llength $xth(me,imgs,$imgx,subimgs)]
  set csi 0
  set x [lindex $xth(me,imgs,$imgx,position) 0]
  set y [lindex $xth(me,imgs,$imgx,position) 1]
  foreach imgl $xth(me,imgs,$imgx,subimgs) {
    incr csi
    $xth(me,can) coords [lindex $imgl 1] \
      [xth_me_real2canx [expr $x + [lindex $imgl 2]]] \
      [xth_me_real2cany [expr $y - [lindex $imgl 3]]]
  }
  update idletasks
}

proc xth_me_image_rescan {imgx} {
  global xth
  if {$xth(me,imgs,$imgx,vsb) <= 0} {
    return
  }
  if {$xth(me,imgs,$imgx,XVI)} {
    return
  }
  set srci $xth(me,imgs,$imgx,image)
  xth_status_bar_push me
  set totalsi [llength $xth(me,imgs,$imgx,subimgs)]
  set csi 0
  xth_status_bar_status me [format "Zooming image %s ..." $xth(me,imgs,$imgx,name)]
  xth_me_progbar_show $totalsi
  foreach imgl $xth(me,imgs,$imgx,subimgs) {
    set dsti [lindex $imgl 0]
    incr csi
    xth_me_progbar_prog $csi
    $dsti blank
    switch $xth(me,zoom) {
      25 {$dsti copy $srci -subsample 4 -shrink -from \
	[lindex $imgl 2] [lindex $imgl 3] [lindex $imgl 4] [lindex $imgl 5]}
      50 {$dsti copy $srci -subsample 2 -shrink -from \
	[lindex $imgl 2] [lindex $imgl 3] [lindex $imgl 4] [lindex $imgl 5]}
      200 {$dsti copy $srci -zoom 2 -shrink -from \
	[lindex $imgl 2] [lindex $imgl 3] [lindex $imgl 4] [lindex $imgl 5]}
      400 {$dsti copy $srci -zoom 4 -shrink -from \
	[lindex $imgl 2] [lindex $imgl 3] [lindex $imgl 4] [lindex $imgl 5]}
      default {$dsti copy $srci -shrink -from \
	[lindex $imgl 2] [lindex $imgl 3] [lindex $imgl 4] [lindex $imgl 5]}
    }
  }
  xth_me_progbar_hide
  xth_status_bar_pop me
}

}
# END NO NOZOOM

proc xth_me_imgs_xvi_redraw {imgx} {
  global xth
  set id $xth(me,imgs,$imgx,image)  
  
  # calculate all coordinates
  # grid
  set px [lindex $xth(me,imgs,$imgx,position) 0]
  set py [lindex $xth(me,imgs,$imgx,position) 1]
  set gx [lindex $xth(me,imgs,$imgx,XVIgrid) 0]
  set gy [lindex $xth(me,imgs,$imgx,XVIgrid) 1]
  set gxx [lindex $xth(me,imgs,$imgx,XVIgrid) 2]
  set gxy [lindex $xth(me,imgs,$imgx,XVIgrid) 3]
  set gyx [lindex $xth(me,imgs,$imgx,XVIgrid) 4]
  set gyy [lindex $xth(me,imgs,$imgx,XVIgrid) 5]
  set ngx [lindex $xth(me,imgs,$imgx,XVIgrid) 6]
  set ngy [lindex $xth(me,imgs,$imgx,XVIgrid) 7]
  
  set shx [expr double($px) - double($gx)]
  set shy [expr double($py) - double($gy)]
  
  set odd 0
  set crd {}
  for {set i 0} {$i <= $ngy} {incr i} {
    set lvx [xth_me_real2canx [expr $shx + $gx + $i * $gyx]]
    set lvy [xth_me_real2cany [expr $shy + $gy + $i * $gyy]]
    set rvx [xth_me_real2canx [expr $shx + $gx + $i * $gyx + $ngx * $gxx]]
    set rvy [xth_me_real2cany [expr $shy + $gy + $i * $gyy + $ngx * $gxy]]
    if {$odd} {
      lappend crd $lvx $lvy $rvx $rvy
      set odd 0
    } else {
      lappend crd $rvx $rvy $lvx $lvy
      set odd 1
    }
  }
  $xth(me,can) coords [format "%sGH" $id] $crd
  set crd {}
  for {set i 0} {$i <= $ngx} {incr i} {
    set lvx [xth_me_real2canx [expr $shx + $gx + $i * $gxx]]
    set lvy [xth_me_real2cany [expr $shy + $gy + $i * $gxy]]
    set rvx [xth_me_real2canx [expr $shx + $gx + $i * $gxx + $ngy * $gyx]]
    set rvy [xth_me_real2cany [expr $shy + $gy + $i * $gxy + $ngy * $gyy]]
    if {$odd} {
      lappend crd $lvx $lvy $rvx $rvy
      set odd 0
    } else {
      lappend crd $rvx $rvy $lvx $lvy
      set odd 1
    }
  }
  $xth(me,can) coords [format "%sGV" $id] $crd

  # walls
  set shts $xth(me,imgs,$imgx,XVIshots)
  for {set i 0} {$i < [llength $shts]} {incr i} {
    if {[llength [lindex $shts $i]] >= 12} {
      set x0 [xth_me_real2canx [expr $shx + [lindex [lindex $shts $i] 4]]]
      set y0 [xth_me_real2cany [expr $shy + [lindex [lindex $shts $i] 5]]]
      set x1 [xth_me_real2canx [expr $shx + [lindex [lindex $shts $i] 6]]]
      set y1 [xth_me_real2cany [expr $shy + [lindex [lindex $shts $i] 7]]]
      set x2 [xth_me_real2canx [expr $shx + [lindex [lindex $shts $i] 8]]]
      set y2 [xth_me_real2cany [expr $shy + [lindex [lindex $shts $i] 9]]]
      set x3 [xth_me_real2canx [expr $shx + [lindex [lindex $shts $i] 10]]]
      set y3 [xth_me_real2cany [expr $shy + [lindex [lindex $shts $i] 11]]]
      $xth(me,can) coords [format "%sWLF%d" $id $i] $x0 $y0 $x1 $y1 $x2 $y2 $x3 $y3
      $xth(me,can) coords [format "%sWLO%d" $id $i] $x0 $y0 $x1 $y1 $x2 $y2 $x3 $y3 $x0 $y0
    }
  }

  # shots
  for {set i 0} {$i < [llength $shts]} {incr i} {
    set fx [xth_me_real2canx [expr $shx + [lindex [lindex $shts $i] 0]]]
    set fy [xth_me_real2cany [expr $shy + [lindex [lindex $shts $i] 1]]]
    set tx [xth_me_real2canx [expr $shx + [lindex [lindex $shts $i] 2]]]
    set ty [xth_me_real2cany [expr $shy + [lindex [lindex $shts $i] 3]]]
    $xth(me,can) coords [format "%sSH%d" $id $i] $fx $fy $tx $ty
  }
  
  # sketch lines
  set sklns $xth(me,imgs,$imgx,XVIsketchlines)
  for {set i 0} {$i < [llength $sklns]} {incr i} {
    set slcl [lrange [lindex $sklns $i] 1 end]
    set slcrds {}
    for {set j 0} {$j < [llength $slcl]} {set j [expr $j + 2]} {
      set xx [xth_me_real2canx [expr $shx + [lindex $slcl $j]]]
      set yy [xth_me_real2cany [expr $shy + [lindex $slcl [expr $j + 1]]]]
      append slcrds "$xx $yy "
    }
    if {[llength $slcrds] < 4} {
      set slcrds [list [expr $xx - 0.5] [expr $yy - 0.5] \
                 [expr $xx + 0.5] [expr $yy - 0.5] \
                 [expr $xx + 0.5] [expr $yy + 0.5] \
                 [expr $xx - 0.5] [expr $yy + 0.5] \
                 [expr $xx - 0.5] [expr $yy - 0.5]]
    }
    $xth(me,can) coords [format "%sSKLN%d" $id $i] $slcrds
  }

  # stations
  set stns $xth(me,imgs,$imgx,XVIstations)
  set xth(me,imgs,$imgx,XVIstationsX) {}
  for {set i 0} {$i < [llength $stns]} {incr i} {
    set cx [expr $shx + [lindex [lindex $stns $i] 0]]
    set cy [expr $shy + [lindex [lindex $stns $i] 1]]
    lappend xth(me,imgs,$imgx,XVIstationsX) [list $cx $cy]
    set cx [xth_me_real2canx $cx]
    set cy [xth_me_real2cany $cy]
    $xth(me,can) coords [format "%sST%d" $id $i] [expr $cx - $xth(gui,xvi_station_size)] [expr $cy - $xth(gui,xvi_station_size)] [expr $cx + $xth(gui,xvi_station_size)] [expr $cy + $xth(gui,xvi_station_size)]
  }
  
  if {$xth(me,imgs,$imgx,vsb) == 1} {
    $xth(me,can) itemconfigure $xth(me,imgs,$imgx,image) -state normal
  }
}

proc xth_me_imgs_xvi_create {imgx} {
  global xth

  # firstly delete all imgx items
  foreach silist $xth(me,imgs,$imgx,subimgs) {
    $xth(me,can) delete [lindex $silist 1]
  }
  set xth(me,imgs,$imgx,subimgs) {}
  set id $xth(me,imgs,$imgx,image)
  set stpref [format "XVIstI%sS" $imgx] 
  # now create them

  # walls fill
  set shts $xth(me,imgs,$imgx,XVIshots)
  for {set i 0} {$i < [llength $shts]} {incr i} {
    if {[llength [lindex $shts $i]] >= 12} {
      set cid [$xth(me,can) create polygon 0 0 1 0 1 1 -stipple $xth(gui,xvi_walls_fptn) -fill $xth(gui,xvi_walls_fclr) -width 1 -state hidden -tags [list $id [format "%sWLF%d" $id $i]]]
      xth_me_bind_area_drag $cid $imgx
      xth_me_bind_image_drag $cid $imgx
      lappend xth(me,imgs,$imgx,subimgs) [list {} $cid]
    }
  }

  # grid
  set grid_info_str [format [mc "grid - spacing %s"] $xth(me,imgs,$imgx,XVIgrids)]
  set cid [$xth(me,can) create line 0 0 1 1 -fill $xth(gui,xvi_grid_clr) -width 1 -state hidden -tags [list $id [format "%sGH" $id]]]
  xth_me_bind_area_drag $cid $imgx
  xth_me_bind_image_drag $cid $imgx
  $xth(me,can) bind $cid  "xth_status_bar_push me; xth_status_bar_status me [list $grid_info_str]"
  $xth(me,can) bind $cid  "xth_status_bar_pop me"
  lappend xth(me,imgs,$imgx,subimgs) [list {} $cid]
  set cid [$xth(me,can) create line 0 0 1 1 -fill $xth(gui,xvi_grid_clr) -width 1 -state hidden -tags [list $id [format "%sGV" $id]]]
  xth_me_bind_area_drag $cid $imgx
  xth_me_bind_image_drag $cid $imgx
  $xth(me,can) bind $cid  "xth_status_bar_push me; xth_status_bar_status me [list $grid_info_str]"
  $xth(me,can) bind $cid  "xth_status_bar_pop me"
  lappend xth(me,imgs,$imgx,subimgs) [list {} $cid]

  # walls outline
  set shts $xth(me,imgs,$imgx,XVIshots)
  for {set i 0} {$i < [llength $shts]} {incr i} {
    if {[llength [lindex $shts $i]] >= 12} {
      set cid [$xth(me,can) create line 0 0 1 1 -fill $xth(gui,xvi_walls_oclr) -width 1 -state hidden -tags [list $id [format "%sWLO%d" $id $i]]]
      xth_me_bind_area_drag $cid $imgx
      xth_me_bind_image_drag $cid $imgx
      lappend xth(me,imgs,$imgx,subimgs) [list {} $cid]
    }
  }

  # shots
  for {set i 0} {$i < [llength $shts]} {incr i} {
    set cid [$xth(me,can) create line 0 0 1 1 -fill $xth(gui,xvi_shot_clr) -width 3 -state hidden -tags [list $id [format "%sSH%d" $id $i]]]
    xth_me_bind_area_drag $cid $imgx
    xth_me_bind_image_drag $cid $imgx
    lappend xth(me,imgs,$imgx,subimgs) [list {} $cid]
  }


  # sketch lines
  set sklns $xth(me,imgs,$imgx,XVIsketchlines)
  for {set i 0} {$i < [llength $sklns]} {incr i} {
    set cclr [lindex [lindex $sklns $i] 0]
    set cdash {}
    if {[string equal $cclr connect]} {
      set cclr gray
      set cdash .
    }
    set cid [$xth(me,can) create line 0 0 1 1 -fill $cclr -dash $cdash -width $xth(gui,xvi_sketch_line_width) -state hidden -tags [list $id [format "%sSKLN%d" $id $i]]]
    xth_me_bind_area_drag $cid $imgx
    xth_me_bind_image_drag $cid $imgx
    lappend xth(me,imgs,$imgx,subimgs) [list {} $cid]
  }

  # stations
  set stns $xth(me,imgs,$imgx,XVIstations)
  for {set i 0} {$i < [llength $stns]} {incr i} {
    set cid [$xth(me,can) create oval 0 0 1 1 -fill $xth(gui,xvi_station_fclr) -outline $xth(gui,xvi_station_oclr) -width 1 -state hidden -tags [list $id [format "%sST%d" $id $i] "$stpref$i"]]
    xth_me_bind_area_drag $cid $imgx
    xth_me_bind_image_drag $cid $imgx
    set stinfo [format [mc "station - %s"] [lindex [lindex $stns $i] 2]]
    $xth(me,can) bind $cid  "xth_status_bar_push me; xth_status_bar_status me [list $stinfo]"
    $xth(me,can) bind $cid  "xth_status_bar_pop me"
    lappend xth(me,imgs,$imgx,subimgs) [list {} $cid]
  }

  # and change coordinates
  catch {$xth(me,can) lower $xth(me,imgs,$imgx,image) command}
  set iidx [lsearch -exact $xth(me,imgs,xlist) $imgx]
  if {$iidx > 0} {
    $xth(me,can) lower $xth(me,imgs,$imgx,image) $xth(me,imgs,[lindex $xth(me,imgs,xlist) [expr $iidx - 1]],image)
  }
  xth_me_imgs_xvi_redraw $imgx
}

proc xth_me_imgs_set_root {imgx} {
  global xth
  if {!$xth(me,imgs,$imgx,XVI)} {
    return
  }
  set rs $xth(me,imgs,$imgx,XVIroot)
  set xss $xth(me,imgs,$imgx,XVIstations)
  if {[string length $rs] < 1} {
    return
  }
  
  # prejde vsetky stations, a skusi najst tu s danym menom
  # ked ju najde, prerata position na grid origin a vynuluje
  for {set i 0} {$i < [llength $xss]} {incr i} {
    if {[string equal [lindex [lindex $xss $i] 2] $rs]} {
      set sx [lindex [lindex $xss $i] 0]
      set sy [lindex [lindex $xss $i] 1]
      set px [lindex $xth(me,imgs,$imgx,position) 0]
      set py [lindex $xth(me,imgs,$imgx,position) 1]
      set gx [lindex $xth(me,imgs,$imgx,XVIgrid) 0]
      set gy [lindex $xth(me,imgs,$imgx,XVIgrid) 1]
      set xth(me,imgs,$imgx,position) [list [expr double($gx) + double($px) - double($sx)] [expr double($gy) + double($py) - double($sy)]]
      set xth(me,imgs,$imgx,XVIroot) {}  
      break
    }
  }
}

proc xth_me_imgs_get_root {imgx} {
  global xth
  set xss $xth(me,imgs,$imgx,XVIstations)
  if {[llength $xss] > 0} {
    set i 0
    set sx [lindex [lindex $xss $i] 0]
    set sy [lindex [lindex $xss $i] 1]
    set px [lindex $xth(me,imgs,$imgx,position) 0]
    set py [lindex $xth(me,imgs,$imgx,position) 1]
    set gx [lindex $xth(me,imgs,$imgx,XVIgrid) 0]
    set gy [lindex $xth(me,imgs,$imgx,XVIgrid) 1]
    return [list [lindex $xss $i 2] [expr double($sx) + double($px) - double($gx)] [expr double($sy) + double($py) - double($gy)]]
  } else {
    return [list $xth(me,imgs,$imgx,XVIroot)]
  }
}


proc xth_me_image_insert {xx yy fname iidx imgx} {
  
  global xth
  
  if {! $xth(me,fopen)} {
    return
  }
  
  set vsb 1
  set igamma 1.0
  if {[llength $xx] > 1} {
    if {[llength $xx] > 2} {
      set igamma [lindex $xx 2]
    }
    set vsb [lindex $xx 1]
    set xx [lindex $xx 0]
  } 
  
  set xdata {}
  set ximage 0
  if {[llength $imgx] > 1} {
    set xdata [lindex $imgx 1]
    set ximage 1
    set imgx [lindex $imgx 0]
  }
  
  set XVIroot {}
  set isXVI 0
  if {[llength $yy] > 1} {
    set XVIroot [lindex $yy 1]
    set yy [lindex $yy 0]
  }
  
  set dial_id 0
  
  if {([string length $fname] < 1) && (!$ximage)} {
    
    if {$xth(me,fnewf)} {
      set wtd [MessageDlg $xth(gui,message) -parent $xth(gui,main) \
	  -icon question -type yesno \
	  -message [mc "New *.th2 file needs to be saved before inserting background image. Save it now?"] \
	  -font $xth(gui,lfont)]
      if {$wtd == 1} {
	return
      }
      xth_me_save_file 1
    }
    if {$xth(me,fnewf)} {
      return
    }
    
    set fname [tk_getOpenFile -parent $xth(gui,main) \
	-filetypes $xth(gui,imgfiletypes) \
	-initialdir $xth(me,fpath) -defaultextension ".gif"]
	
    if {[string length $fname] < 1} {
      return
    } else {    
      if {[string equal -nocase [file extension $fname] .txt]} {
	 set fname [xth_me_ptopo2xvi $fname]
	 if {[string length $fname] < 1} {
	   return
	 }
      }
      # overi ci cesta sedi
      if {![string equal -length [string length $xth(me,fpath)] \
	$xth(me,fpath) $fname]} {
	set cwpath [file split $xth(me,fpath)]
	set ifpath [file split $fname]
	set cmnpath [lindex $ifpath 0]
	if {![string equal [lindex $cwpath 0] $cmnpath]} {
	  MessageDlg $xth(gui,message) -parent $xth(gui,main) \
	    -icon error -type ok \
	    -message "Unable to create relative path to current file from $fname." \
	    -font $xth(gui,lfont)
	  return
	}
	for {set px 1} {$px < [llength $cwpath]} {incr px} {
	  if {![string equal [lindex $cwpath $px] [lindex $ifpath $px]]} {
	    break
	  } else {
	    append cmnpath [lindex $ifpath $px]
	  }
	}
	set cmnlevel $px
	set fname {}
	for {} {$px < [llength $ifpath]} {incr px} {
	  set fname [file join $fname [lindex $ifpath $px]]
	}
	set uplevel [expr [llength $cwpath] - $cmnlevel]
	for {set px 0} {$px < $uplevel} {incr px} {
	  set fname [file join ".." $fname]
	}
	set dial_id 1
      } else {
	set fname [string range $fname [expr [string length $xth(me,fpath)] + 1] end]
	set dial_id 1
      }
    }
  }
  
  
  xth_status_bar_push me
  xth_status_bar_status me "Loading image file $fname ..."
  set ffname {}
  if {!$ximage} {
    set ffname [file join $xth(me,fpath) $fname]
  }
  if {[string length $imgx] < 1} {
    set imgx $xth(me,imgln)
  }
  set imgid {}
  set XVIgrids {}
  set XVIgrid {}
  set XVIstations {}
  set XVIshots {}
  set XVIsketchlines {}
  set XVIimages {}
  if {!$xth(gui,openxp)} {
    catch {
      if {$ximage} {
	set imgid [image create photo -data $xdata]
      } else {
	set imgid [image create photo -file $ffname]
      }
    } errorinf
    if {[string length $imgid] < 1} {
      catch {
	source $ffname
      } errorinf
      if {[string length $XVIgrids] > 0} {
	set isXVI 1
	set imgid "XVI$xth(me,imgs,xviid)"
	incr xth(me,imgs,xviid)
      }
    }
  } else {
    set errorinf "excluded picture"
  }
  
  if {[string length $imgid] < 1} {
    if {$xth(me,unredook)} {
      MessageDlg $xth(gui,message) -parent $xth(gui,main) \
	-icon error -type ok \
	-message "$errorinf" \
	-font $xth(gui,lfont)
    }
    xth_status_bar_pop me
    if {$dial_id} {
      return
    } else {
      set vsb [expr $vsb - 2]
    }
  }
  
  set undocmd "xth_me_image_remove %d"
  set redocmd "xth_me_image_insert %s %s [list $fname] %d $imgx"
  
  if {[catch {expr $xx}]} {
    set xx $xth(me,area,xmin)
  }
  if {[catch {expr $yy}]} {
    set yy $xth(me,area,ymin)
  }
  
  xth_me_unredo_action [mc "inserting image"] \
    [format $undocmd $iidx] [format $redocmd "{$xx $vsb}" "{$yy $XVIroot}" $iidx]
  
  
  incr xth(me,nimgs)
  set xth(me,imgs,xlist) [linsert $xth(me,imgs,xlist) $iidx $imgx]
  set xth(me,imgs,$imgx,name) $fname
  set xth(me,imgs,$imgx,image) $imgid
  set xth(me,imgs,$imgx,position) [list $xx $yy]  
  set xth(me,imgs,$imgx,subimgs) {}
  set xth(me,imgs,$imgx,vsb) $vsb
  set xth(me,imgs,$imgx,gamma) $igamma
  set xth(me,imgs,$imgx,reload) [list $undocmd $redocmd]
  set xth(me,imgs,$imgx,ffname) $ffname
  set xth(me,imgs,$imgx,fmtime) 0
  catch {set xth(me,imgs,$imgx,fmtime) [file mtime $ffname]}
  set xth(me,imgs,$imgx,XVI) $isXVI
  set xth(me,imgs,$imgx,XVIbitmaps) {}
  set xth(me,imgs,$imgx,XVIimg) $ximage
  set xth(me,imgs,$imgx,XVIroot) $XVIroot
  set xth(me,imgs,$imgx,XVIgrids) $XVIgrids
  set xth(me,imgs,$imgx,XVIgrid) $XVIgrid
  set xth(me,imgs,$imgx,XVIshots) $XVIshots
  set xth(me,imgs,$imgx,XVIstations) $XVIstations
  set xth(me,imgs,$imgx,XVIsketchlines) $XVIsketchlines
  set xth(me,imgs,$imgx,XVIstationsX) {}

  xth_me_imgs_set_root $imgx

  if {$isXVI} {  
    set Xxx [lindex $XVIgrid 0]
    set Xyy [lindex $XVIgrid 1]
    set nxx [lindex $xth(me,imgs,$imgx,position) 0]
    set nyy [lindex $xth(me,imgs,$imgx,position) 1]
    set Xshx [expr double($nxx) - double($Xxx)]
    set Xshy [expr double($nyy) - double($Xyy)]
  }
  
  # let's create image subimages
  if {($vsb >= 0) && (!$xth(me,imgs,$imgx,XVI))} {
    if {$xth(gui,me,nozoom)} {
      set subimg [image create photo]
      set subcimg [$xth(me,can) create image 0 0 -image $subimg -anchor nw \
      -tags "$imgid bgimg imgx$imgx"]
      xth_me_bind_area_drag $subcimg $imgx
      xth_me_bind_image_drag $subcimg $imgx
      set iw [image width $imgid]
      set ih [image height $imgid]
      lappend xth(me,imgs,$imgx,subimgs) [list $subimg $subcimg 0 0 $iw $ih]
      catch {$xth(me,can) lower $xth(me,imgs,$imgx,image) command}
      if {$iidx > 0} {
        $xth(me,can) lower $xth(me,imgs,$imgx,image) $xth(me,imgs,[lindex $xth(me,imgs,xlist) [expr $iidx - 1]],image)
      }
    } else {
      set iw [image width $imgid]
      set ih [image height $imgid]
      set subisize 128
      for {set subx 0} {$subx < $iw} {incr subx $subisize} {
        for {set suby 0} {$suby < $ih} {incr suby $subisize} {
          set subxx [expr $subx + $subisize]
          set subyy [expr $suby + $subisize]
          if {$subxx > $iw} {
            set subxx $iw
          }
          if {$subyy > $ih} {
            set subyy $ih
          }
          set subimg [image create photo]
          set subcimg [$xth(me,can) create image 0 0 -image $subimg -anchor nw \
          -tags "$imgid bgimg imgx$imgx"]
          xth_me_bind_area_drag $subcimg $imgx
          xth_me_bind_image_drag $subcimg $imgx
          lappend xth(me,imgs,$imgx,subimgs) [list $subimg $subcimg $subx $suby $subxx $subyy]
        }
      }
      catch {$xth(me,can) lower $xth(me,imgs,$imgx,image) command}
      set iidx [lsearch -exact $xth(me,imgs,xlist) $imgx]
      if {$iidx > 0} {
        $xth(me,can) lower $xth(me,imgs,$imgx,image) $xth(me,imgs,[lindex $xth(me,imgs,xlist) [expr $iidx - 1]],image)
      }
    }  
  }
  if {($vsb >= 0) && ($xth(me,imgs,$imgx,XVI))} {
    xth_me_imgs_xvi_create $imgx
  }
  xth_me_image_rescan $imgx
  xth_me_image_redraw $imgx
  xth_me_image_set_gamma $imgx
  xth_me_image_update_list
  xth_me_image_select 0
  incr xth(me,imgln)
  catch {$xth(me,can) raise cmd_ctrl bgimg}  
  set ximg 1
  foreach xid $XVIimages {
    set llln $xth(me,imgln)
    xth_me_image_insert [expr double([lindex $xid 0]) + $Xshx] [expr double([lindex $xid 1]) + $Xshy] [format "%s - IMG%d" $fname $ximg] [expr $iidx + 1] [list {} [lindex $xid 2]]
    if {$xth(me,imgln) > $llln} {
      lappend xth(me,imgs,$imgx,XVIbitmaps) $llln
    }
    incr ximg
  }
  xth_status_bar_pop me
}


proc xth_me_image_destroy_all {} {
  global xth
  foreach imgx $xth(me,imgs,xlist) {
    unset xth(me,imgs,$imgx,name)
    unset xth(me,imgs,$imgx,position)
    if {[string length $xth(me,imgs,$imgx,image)] > 0} {
      catch {image delete $xth(me,imgs,$imgx,image)}
    }
    unset xth(me,imgs,$imgx,image)
    unset xth(me,imgs,$imgx,vsb)
    unset xth(me,imgs,$imgx,gamma)
    foreach silist $xth(me,imgs,$imgx,subimgs) {
      catch {image delete [lindex $silist 0]}
      $xth(me,can) delete [lindex $silist 1]
    }
    unset xth(me,imgs,$imgx,reload)
    unset xth(me,imgs,$imgx,ffname)
    unset xth(me,imgs,$imgx,fmtime)
    unset xth(me,imgs,$imgx,subimgs)
    unset xth(me,imgs,$imgx,XVI)
    unset xth(me,imgs,$imgx,XVIbitmaps)
    unset xth(me,imgs,$imgx,XVIroot)
    unset xth(me,imgs,$imgx,XVIgrids)
    unset xth(me,imgs,$imgx,XVIgrid)
    unset xth(me,imgs,$imgx,XVIshots)
    unset xth(me,imgs,$imgx,XVIstations)
    unset xth(me,imgs,$imgx,XVIstationsX)
    unset xth(me,imgs,$imgx,XVIsketchlines)
  }
  set xth(me,nimgs) 0
  set xth(me,imgln) 0
  set xth(me,imgs,list) {}
  set xth(me,imgs,xlist) {}
}

proc xth_me_image_remove {iidx} {
  global xth
  if {$xth(me,nimgs) < 1} {
    return
  }
  set isel [$xth(ctrl,me,images).il.ilbox curselection]
  if {[llength $isel] < 1} {
    return;
  }
  if {[string length $iidx] < 1} {
    set iidx [lindex $isel 0]
    set imgx [lindex $xth(me,imgs,xlist) $iidx]
    if {[string length $xth(me,imgs,$imgx,ffname)] == 0} return
  }
  set imgx [lindex $xth(me,imgs,xlist) $iidx]
  if {[llength $xth(me,imgs,$imgx,XVIbitmaps)] > 0} {
    foreach bx $xth(me,imgs,$imgx,XVIbitmaps) {
      set ccc [lsearch -exact $xth(me,imgs,xlist) $bx]
      catch {xth_me_image_remove $ccc}
    }
  }
  set iidx [lsearch -exact $xth(me,imgs,xlist) $imgx]
  xth_me_unredo_action [mc "removing image"] \
    "xth_me_image_insert {[lindex $xth(me,imgs,$imgx,position) 0] $xth(me,imgs,$imgx,vsb) $xth(me,imgs,$imgx,gamma)} [lindex $xth(me,imgs,$imgx,position) 1] [list $xth(me,imgs,$imgx,name)] $iidx $imgx" "xth_me_image_remove $iidx"
  unset xth(me,imgs,$imgx,name)
  unset xth(me,imgs,$imgx,position)
  if {[string length $xth(me,imgs,$imgx,image)] > 0} {
    catch {image delete $xth(me,imgs,$imgx,image)}
  }
  unset xth(me,imgs,$imgx,image)
  unset xth(me,imgs,$imgx,vsb)
  unset xth(me,imgs,$imgx,gamma)
  foreach silist $xth(me,imgs,$imgx,subimgs) {
    catch {image delete [lindex $silist 0]}
    $xth(me,can) delete [lindex $silist 1]
  }
  unset xth(me,imgs,$imgx,subimgs)
  unset xth(me,imgs,$imgx,reload)
  unset xth(me,imgs,$imgx,ffname)
  unset xth(me,imgs,$imgx,fmtime)
  unset xth(me,imgs,$imgx,XVI)
  unset xth(me,imgs,$imgx,XVIbitmaps)
  unset xth(me,imgs,$imgx,XVIroot)
  unset xth(me,imgs,$imgx,XVIgrids)
  unset xth(me,imgs,$imgx,XVIgrid)
  unset xth(me,imgs,$imgx,XVIshots)
  unset xth(me,imgs,$imgx,XVIstations)
  unset xth(me,imgs,$imgx,XVIstationsX)
  unset xth(me,imgs,$imgx,XVIsketchlines)
  set xth(me,nimgs) [expr $xth(me,nimgs) - 1]
  set xth(me,imgs,xlist) [lreplace $xth(me,imgs,xlist) $iidx $iidx]
  xth_me_image_update_list
  if {$iidx >= [llength $xth(me,imgs,xlist)]} {
    set iidx end
  }
  xth_me_image_select $iidx
}


proc xth_me_image_move_special {iidx newiidx} {

  global xth  

  if {$iidx == [expr $xth(me,nimgs) - 1]} {
    set iidx $xth(me,nimgs)
  }
  if {$iidx < $xth(me,nimgs)} {
    set iiidx $iidx
    set xiidx $iidx
  } else {
    set iiidx end
    set xiidx [expr $xth(me,nimgs) - 1]
  }
  set imgx [lindex $xth(me,imgs,xlist) $iiidx]

  if {$newiidx < $xth(me,nimgs)} {
    $xth(me,can) raise $xth(me,imgs,$imgx,image) $xth(me,imgs,[lindex $xth(me,imgs,xlist) $newiidx],image)
    set xth(me,imgs,xlist) [linsert [lreplace $xth(me,imgs,xlist) $iiidx $iiidx] $newiidx $imgx]
  } else {
    $xth(me,can) lower $xth(me,imgs,$imgx,image) $xth(me,imgs,[lindex $xth(me,imgs,xlist) end],image)
    set xth(me,imgs,xlist) [linsert [lreplace $xth(me,imgs,xlist) $iiidx $iiidx] end $imgx]
  }  

  xth_me_unredo_action [mc "moving image"] \
    "xth_me_image_move_special $newiidx $iidx" "xth_me_image_move_special $iidx $newiidx"
  xth_me_image_update_list
  xth_me_image_select $xiidx
  
}


proc xth_me_image_move_front {} {
  global xth
  xth_me_cmds_update {}
  if {$xth(me,nimgs) < 1} {
    return
  }
  set isel [$xth(ctrl,me,images).il.ilbox curselection]
  if {[llength $isel] < 1} {
    return;
  }
  set iidx [lindex $isel 0]
  if {$iidx == 0} {
    return
  }
  
  xth_me_image_move_special $iidx 0

}


proc xth_me_image_move_back {} {
  global xth
  xth_me_cmds_update {}
  if {$xth(me,nimgs) < 1} {
    return
  }
  set isel [$xth(ctrl,me,images).il.ilbox curselection]
  if {[llength $isel] < 1} {
    return;
  }
  set iidx [lindex $isel 0]
  if {$iidx == ($xth(me,nimgs) - 1)} {
    return
  }

  xth_me_image_move_special $iidx $xth(me,nimgs)
}


proc xth_me_image_select {iidx} {
  
  global xth

  if {!$xth(me,fopen)} {
    return
  }
  
  if {[string length $iidx] == 0} {
    set iidx 0
  }
  
  if {$xth(me,nimgs) > 0} {
    $xth(ctrl,me,images).ic.remp configure -state normal
    $xth(ctrl,me,images).ic.posl configure -state normal
    $xth(ctrl,me,images).ic.posln configure -state normal
    $xth(ctrl,me,images).ic.posch configure -state normal
    $xth(ctrl,me,images).ic.posx configure -state normal
    $xth(ctrl,me,images).ic.posy configure -state normal
    $xth(ctrl,me,images).ic.mvf configure -state normal
    $xth(ctrl,me,images).ic.mvb configure -state normal
#    $xth(ctrl,me,images).il.ilbox configure -state normal
    $xth(ctrl,me,images).il.ilbox selection clear 0 end
    $xth(ctrl,me,images).il.ilbox selection set $iidx
    set iidx [lindex [$xth(ctrl,me,images).il.ilbox curselection] 0]
    set imgx [lindex $xth(me,imgs,xlist) $iidx]
    if {$xth(me,imgs,$imgx,vsb) < 0} {
      $xth(ctrl,me,images).ic.viscb configure -state disabled
      $xth(ctrl,me,images).ic.gs configure -state disabled
      $xth(ctrl,me,images).ic.gr configure -state disabled
      $xth(ctrl,me,images).ic.gl configure -state disabled
      xth_me_image_update_gamma_scale
      set xth(ctrl,me,images,vis) 0
    } else {
      $xth(ctrl,me,images).ic.viscb configure -state normal
      $xth(ctrl,me,images).ic.gs configure -state normal
      $xth(ctrl,me,images).ic.gr configure -state normal
      $xth(ctrl,me,images).ic.gl configure -state normal
      xth_me_image_update_gamma_scale
      set xth(ctrl,me,images,vis) $xth(me,imgs,$imgx,vsb)
    }
    xth_me_image_update_position
    update idletasks
  } else {
    $xth(ctrl,me,images).ic.viscb configure -state disabled
    $xth(ctrl,me,images).ic.remp configure -state disabled
    $xth(ctrl,me,images).ic.posl configure -state disabled
    $xth(ctrl,me,images).ic.posln configure -state disabled -text ""
    set xth(ctrl,me,images,posx) ""
    set xth(ctrl,me,images,posy) ""
    $xth(ctrl,me,images).ic.posch configure -state disabled
    $xth(ctrl,me,images).ic.posx configure -state disabled
    $xth(ctrl,me,images).ic.posy configure -state disabled
    $xth(ctrl,me,images).ic.mvf configure -state disabled
    $xth(ctrl,me,images).ic.mvb configure -state disabled
    $xth(ctrl,me,images).ic.gs configure -state disabled
    $xth(ctrl,me,images).ic.gr configure -state disabled
    $xth(ctrl,me,images).ic.gl configure -state disabled -text "gamma 1.00"
#    $xth(ctrl,me,images).il.ilbox configure -state disabled
    focus $xth(gui,main)
    update idletasks
  }
  
}

proc xth_me_image_gamma {imgx gv} {
  global xth
  set og $xth(me,imgs,$imgx,gamma)
  set xth(me,imgs,$imgx,gamma) $gv
  xth_me_image_set_gamma $imgx
  xth_me_unredo_action [mc "gamma correction"] \
    "xth_me_image_gamma $imgx $og" \
    "xth_me_image_gamma $imgx $gv"
  xth_me_image_update_gamma_scale
}

proc xth_me_image_update_gamma {} {
  global xth
  catch { 
    set iidx [lindex [$xth(ctrl,me,images).il.ilbox curselection] 0]
    set imgx [lindex $xth(me,imgs,xlist) $iidx]
    if {[string length $imgx] > 0} {
      xth_me_image_gamma $imgx [expr pow(10.0,$xth(ctrl,me,images,gamma))]
    }
  }
}

proc xth_me_image_update_gamma_scale {} {
  global xth
  set iidx [lindex [$xth(ctrl,me,images).il.ilbox curselection] 0]
  set imgx [lindex $xth(me,imgs,xlist) $iidx]
  if {[string length $imgx] > 0} {
    set xth(ctrl,me,images,gamma) [expr log10($xth(me,imgs,$imgx,gamma))]
    $xth(ctrl,me,images).ic.gl configure -text [format "gamma %.2f" $xth(me,imgs,$imgx,gamma)]
  } else {
    $xth(ctrl,me,images).ic.gl configure -text "gamma 1.00"
    set xth(ctrl,me,images,gamma) 0
  }
}


proc xth_me_xvi_refresh {} {
  global xth
  if {[catch {
    set todolist $xth(me,imgs,xlist)
  }]} {
    return
  }
  foreach imgx $todolist {
    if {[lsearch -exact $xth(me,imgs,xlist) $imgx] < 0} continue
    if $xth(me,imgs,$imgx,XVI) {
      set fmtime 0
      if {![catch {set fmtime [file mtime $xth(me,imgs,$imgx,ffname)]}]} {
	if {$fmtime > $xth(me,imgs,$imgx,fmtime)} {
	  set cpos [lsearch -exact $xth(me,imgs,xlist) $imgx]
	  if {$cpos > -1} {
	    set vsb $xth(me,imgs,$imgx,vsb)
	    set gamma $xth(me,imgs,$imgx,gamma)
	    if {$vsb < 0} {
	      set vsb [expr $xth(me,imgs,$imgx,vsb) + 2]
	    }
	    set xpos [expr [lindex $xth(me,imgs,$imgx,position) 0]]
	    set ypos [expr [lindex $xth(me,imgs,$imgx,position) 1]]
	    set root [xth_me_imgs_get_root $imgx]
	    switch [llength $root] {
	      1 {
		set ypos [list $ypos [lindex $root 0]]
	      }
	      3 {
		set xpos [lindex $root 1]
		set ypos [list [lindex $root 2] [lindex $root 0]]
	      }
	      0 {}
	    }
	    set undocmd [format [lindex $xth(me,imgs,$imgx,reload) 0] $cpos]
	    set redocmd [format [lindex $xth(me,imgs,$imgx,reload) 1] "{$xpos $vsb $gamma}" "{$ypos}" $cpos]
	    set xth(me,unredook) 0
	    eval $undocmd
	    eval $redocmd
	    set xth(me,unredook) 1
	  }
	}
      }
    }
  }
  xth_me_area_auto_adjust
}






therion/xtherion/me_import.tcl0000644000076400010400000006673511133066726017652 0ustar  userAdministrators#TODO: + add more objects in DXF export
#      + add SVG import using tcldom library

set utldbg 0

set xth(ptopoxvi_resolution) 200
set xth(ptopoxvi_scale) 200
set xth(ptopoxvi_grid) 1.0
set xth(ptopoxvi_projection) PLAN


proc xth_me_pt2xvitrans {x y} {
  global xth
  upvar l_scale scale
  upvar l_minx minx
  upvar l_maxx maxx
  upvar l_miny miny
  upvar l_maxy maxy
  upvar l_def  ldef
  if {[catch {set x [expr double($x) * $scale]}]} return {}
  if {[catch {set y [expr double($y) * $scale]}]} return {}
  if {!$ldef} {
    set ldef 1
    set minx $x
    set miny $y
    set maxx $x
    set maxy $y
  } else {
    if {$minx > $x} {set minx $x}
    if {$maxx < $x} {set maxx $x}
    if {$miny > $y} {set miny $y}
    if {$maxy < $y} {set maxy $y}
  }
  return [list [format "%.2f" $x] [format "%.2f" $y]]
}


proc xth_me_ptopo2xvi {fname} {
  global xth

  # create bitmap
  set xviname $fname
  set dp $xth(gui,main).ptopoxvidlg
  Dialog $dp -title [mc "XVI properties"] -parent $xth(gui,main) -default 0
  set df [$dp getframe]
  Label $df.l1 -text [mc "Scale 1 : "]
  Entry $df.e1 -textvariable xth(ptopoxvi_scale) -width 8
  Label $df.l2 -text [mc "Resolution (dpi)"]
  Entry $df.e2 -textvariable xth(ptopoxvi_resolution) -width 8
  Label $df.l3 -text [mc "Grid spacing (m)"]
  Entry $df.e3 -textvariable xth(ptopoxvi_grid) -width 8
  radiobutton $df.p -text "Plan" -variable xth(ptopoxvi_projection) -value PLAN
  radiobutton $df.x -text "Extended elevation" -variable xth(ptopoxvi_projection) -value ELEVATION
  grid $df.l1 -column 0 -row 0 -sticky nes -padx 2 -pady 2
  grid $df.e1 -column 1 -row 0 -sticky news -padx 2 -pady 2
  grid $df.l2 -column 0 -row 1 -sticky nes -padx 2 -pady 2
  grid $df.e2 -column 1 -row 1 -sticky news -padx 2 -pady 2
  grid $df.l3 -column 0 -row 2 -sticky nes -padx 2 -pady 2
  grid $df.e3 -column 1 -row 2 -sticky news -padx 2 -pady 2
  grid $df.p -column 0 -columnspan 2 -row 3 -sticky nws -padx 2
  grid $df.x -column 0 -columnspan 2 -row 4 -sticky nws -padx 2
  $dp add -name ok
  $dp draw
  destroy $dp
  if {[catch {set xth(ptopoxvi_resolution) [expr int($xth(ptopoxvi_resolution))]}]} {
    set xth(ptopoxvi_resolution) 200
  }
  if {[catch {set xth(ptopoxvi_scale) [expr int($xth(ptopoxvi_scale))]}]} {
    set xth(ptopoxvi_scale) 200
  }
  if {[catch {set xth(ptopoxvi_grid) [expr double($xth(ptopoxvi_grid))]}]} {
    set xth(ptopoxvi_grid) 1
  }

  # read pocket topo file and write XVI file
  if {[string equal $xth(ptopoxvi_projection) PLAN]} {
    set projid p
  } else {
    set projid e
  }
  set xvifname "[file rootname $fname]_$projid.xvi"
  set xvifnum 0
  while {[file exists $xvifname]} {
    set xvifname "[file rootname $fname]_$projid$xvifnum.xvi"
    incr xvifnum
  }
  set fi [open $fname r]
  set indata 0
  set inpolyline 0
  set inshots 0
  set instations 0
  set XVIstations {}
  set XVIshots {}
  set XVIgrid {}
  set polylines {}
  set l_minx 0
  set l_maxx 0
  set l_miny 0
  set l_maxy 0
  set l_def 0
  set l_scale [expr 1.0 / double($xth(ptopoxvi_scale)) * 100.0 / 2.54 * double($xth(ptopoxvi_resolution))]
  while {![eof $fi]} {
    gets $fi ln
    if {[string equal $ln $xth(ptopoxvi_projection)]} {
      set indata 1
    } elseif {[string equal $ln PLAN] || [string equal $ln ELEVATION]} {
      set indata 0
    }
    if {$indata} {
      switch -- [lindex $ln 0] {
	STATIONS {
	  set inpolyline 0
	  set inshots 0
	  set instations 1
	}
	SHOTS {
	  set inpolyline 0
	  set inshots 1
	  set instations 0
	}
	POLYLINE {
	  set inpolyline 1
	  set inshots 0
	  set instations 0
	  append polylines "\n[string tolower [lindex $ln 1]]"
	}
      }

      if {$instations} {
	if {[llength $ln] == 3} {
	  set stc [xth_me_pt2xvitrans [lindex $ln 0] [lindex $ln 1]]
	  if {[llength $stc] == 2} {
	    append XVIstations "  {[list [lindex $stc 0] [lindex $stc 1] [lindex $ln 2]]}\n"
	  }
	}
      }

      if {$inshots} {
	if {[llength $ln] == 4} {
	  set stc1 [xth_me_pt2xvitrans [lindex $ln 0] [lindex $ln 1]]
	  set stc2 [xth_me_pt2xvitrans [lindex $ln 2] [lindex $ln 3]]
	  if {([llength $stc1] == 2) && ([llength $stc2] == 2)} {
	    append XVIshots "  {[list [lindex $stc1 0] [lindex $stc1 1] [lindex $stc2 0] [lindex $stc2 1]]}\n"
	  }
	}
      }

      if {$inpolyline} {
	if {[llength $ln] == 2} {
	  set stc [xth_me_pt2xvitrans [lindex $ln 0] [lindex $ln 1]]
	  if {[llength $stc] == 2} {
	    append polylines "  [list [lindex $stc 0] [lindex $stc 1]]"
	  }
	}
      }

    }
  }
  close $fi

  if {$l_def} {
    set gsize [expr $xth(ptopoxvi_grid) * $l_scale]
    set l_minx [expr $l_minx - 0.5 * $gsize]
    set l_maxx [expr $l_maxx]
    set l_miny [expr $l_miny - 0.5 * $gsize]
    set l_maxy [expr $l_maxy]
    
    set XVIsketchlines {}
    set pll [split $polylines "\n"]
    foreach pl $pll {
      if {[llength $pl] == 3} {
	append XVIsketchlines "  {[list [lindex $pl 0] [lindex $pl 1] [lindex $pl 2]]}\n"
      } elseif {[llength $pl] > 3} {
	append XVIsketchlines "  {$pl}\n"
      }
    }

    set fo [open $xvifname w]
    puts $fo "set XVIgrids {$xth(ptopoxvi_grid) m}"
    puts $fo "set XVIstations {\n$XVIstations}"
    puts $fo "set XVIshots {\n$XVIshots}"
    puts $fo "set XVIsketchlines {\n$XVIsketchlines}"
    puts $fo "set XVIgrid {[list $l_minx $l_miny $gsize 0.0 0.0 $gsize [expr int(($l_maxx - $l_minx) / $gsize) + 1] [expr int(($l_maxy - $l_miny) / $gsize) + 1]]}"
    close $fo
    return $xvifname
  }
  return {}
}



proc xth_me_import_check_outline {coutline pt} {
  set px [expr double([lindex $pt 0])]
  set py [expr double([lindex $pt 1])]
  if {[llength $coutline] == 4} {
    if {[lindex $coutline 0] > $px} {lset coutline 0 $px}
    if {[lindex $coutline 1] > $py} {lset coutline 1 $py}
    if {[lindex $coutline 2] < $px} {lset coutline 2 $px}
    if {[lindex $coutline 3] < $py} {lset coutline 3 $py}
  } else {
    set coutline [list $px $py $px $py]
  }
  return $coutline
}

set xthmeimpcdlp {}

proc xth_me_import_check_distance {cdist p2} {
  global xthmeimpcdlp
  if {[llength $xthmeimpcdlp] == 0} {
    set xthmeimpcdlp $p2
    return $cdist
  }
  set p1 $xthmeimpcdlp
  set ndist [expr hypot(double([lindex $p1 0]) - double([lindex $p2 0]),double([lindex $p1 1]) - double([lindex $p2 1]))]
  if {($ndist > 0.0) && (($ndist < $cdist) || ($cdist < 0.0))} {
    return $ndist
  } else {
    return $cdist
  }
}


proc xth_me_import_dxf {fnm} {
  global xth utldbg
  set rv(olist) {}
  set fid [open $fnm r]
  set cmd 0
  set val 0
  set curcmd {}
  set cursec {}
  set x0 0.0
  set x1 0.0
  set lastcmdn 0
  set lastcmd {}
  set curcmdn 0
  set outcmdn -1
  set outline {}
  set distance -1.0
  set curdat {}
  set curseq {}
  set polylinevx 0
  set nofitpoint 1
  
  set hasx0 0
  set hasx1 0

  incr outcmdn
  lappend rv(olist) $outcmdn
  set rv(odata,$outcmdn,type) scrap
  set rv(odata,$outcmdn,opts) {}
  set rv(odata,$outcmdn,data) {}

if $utldbg {
  puts -nonewline "reading $fnm ..."
} else {
  xth_status_bar_push me
  xth_status_bar_status me "reading $fnm ..."
}

  set line_number 0
  while {![eof $fid]} {
    set cmd $val
    gets $fid val
    incr line_number
    if {($line_number % 1000) == 0} {
if $utldbg {
      puts -nonewline "."
} else {
      xth_status_bar_status me "reading $fnm ... (line $line_number)"
}
    }
    regsub {^\s+} $val {} val
    regsub {\s+$} $val {} val
    if {([string length $cursec] == 0) && [string equal $cmd 0] && [string equal -nocase $val SECTION]} {
      set cursec UNKNOWN
      set curcmd {}
    } elseif {[string equal $cmd 2] && [string equal $cursec UNKNOWN] && [regexp {^([A-Z]+)$} $val dum newsec]} {
      set cursec [string toupper $newsec]
    } elseif {([string length $cursec] > 0) && [string equal $cmd 0] && [regexp {^((3D)?[A-Z]+)$} $val dum newcmd]} {
      set lastcmd $curcmd
      incr curcmdn
      set curcmd {}
      set curdat {}
      set newcmd [string toupper $newcmd]
      if {[string equal $newcmd ENDSEC]} {
	set curcmd {}
	set cursec {}
      } else {
	switch -- $newcmd {
	  POLYLINE {
	    set curseq $newcmd
	    set polylinevx 0
	  }
	  SEQEND {
	    set curseq {}
	  }
	}
	set curcmd $newcmd
      }
    }
    
    # parse entities
    if {[string equal $cursec ENTITIES]} {
      set postprocess 0
      switch -- $cmd {
	10 {set x0 [expr double($val)]; set hasx0 1}
	11 {set x1 [expr double($val)]; set hasx1 1}
	20 {set y0 [expr double($val)]; if {$hasx0} {set postprocess 1}; set hasx0 0}
	21 {set y1 [expr double($val)]; if {$hasx1} {set postprocess 1}; set hasx1 0}
	40 {set n40 [expr double($val)]}
	50 {set n50 [expr double($val)]}
	51 {set n51 [expr double($val)]; set postprocess 1}
      }
      set cmdinserted 0
      if {$postprocess} {
	switch -- $curcmd {
	  CIRCLE {
	    if {[string equal $cmd 20]} {
	      set cpoint [list $x0 $y0]
	      set distance [xth_me_import_check_distance $distance $cpoint]
	      set outline [xth_me_import_check_outline $outline $cpoint]              
	      incr outcmdn
	      lappend rv(olist) $outcmdn
	      lappend curdat $cpoint
	      set rv(odata,$outcmdn,type) point
	      set rv(odata,$outcmdn,opts) "#CIRCLE"
	      set rv(odata,$outcmdn,data) $curdat
	    }
	  }
	  POINT {
	    if {[string equal $cmd 20]} {
	      set cpoint [list $x0 $y0]
	      set distance [xth_me_import_check_distance $distance $cpoint]
	      set outline [xth_me_import_check_outline $outline $cpoint]              
	      incr outcmdn
	      lappend rv(olist) $outcmdn
	      lappend curdat $cpoint
	      set rv(odata,$outcmdn,type) point
	      set rv(odata,$outcmdn,opts) "#POINT"
	      set rv(odata,$outcmdn,data) $curdat
	    }
	  }
	  ARC {
	    #TODO: Fit arc with bezier curve, not line
	    if {[string equal $cmd 51]} {
	      if {$n50 > $n51} {set n51 [expr $n51 + 360.0]}
	      set rstep [expr ($n51 - $n50) / (round(($n51 - $n50) / 10.0) + 1)]
	      set curdat {}
	      for {set cr $n50} {$cr < $n51} {set cr [expr $cr + $rstep]} {
		set crr [expr $cr / 180.0 * 3.14159265359]
		set cpoint [list [expr $x0 + $n40 * cos($crr)] [expr $y0 + $n40 * sin($crr)]]
		set distance [xth_me_import_check_distance $distance $cpoint]
		set outline [xth_me_import_check_outline $outline $cpoint]              
		lappend curdat $cpoint
	      }
	      set cr $n51
	      set crr [expr $cr / 180.0 * 3.14159265359]
	      set cpoint [list [expr $x0 + $n40 * cos($crr)] [expr $y0 + $n40 * sin($crr)]]
	      set distance [xth_me_import_check_distance $distance $cpoint]
	      set outline [xth_me_import_check_outline $outline $cpoint]              
	      lappend curdat $cpoint

	      incr outcmdn
	      lappend rv(olist) $outcmdn
	      set rv(odata,$outcmdn,type) line
	      set rv(odata,$outcmdn,opts) "#ARC"
	      set rv(odata,$outcmdn,data) $curdat
	    }
	  }
	  VERTEX {
	    if {[string equal $cmd 20]} {
	      set cpoint [list $x0 $y0]
	      set distance [xth_me_import_check_distance $distance $cpoint]
	      set outline [xth_me_import_check_outline $outline $cpoint]              
	      if {[string equal $curseq POLYLINE]} {
		if {$polylinevx == 0} {
		  incr outcmdn
		  lappend rv(olist) $outcmdn
		  lappend curdat $cpoint
		  set rv(odata,$outcmdn,type) line
		  set rv(odata,$outcmdn,opts) "#POLYLINE"
		  set rv(odata,$outcmdn,data) $curdat
		}
		if {![string equal [lindex $rv(odata,$outcmdn,data) end] $cpoint]} {
		  lappend rv(odata,$outcmdn,data) $cpoint
		}
		incr polylinevx
	      } else {
		incr outcmdn
		lappend rv(olist) $outcmdn
		lappend curdat $cpoint
		set rv(odata,$outcmdn,type) point
		set rv(odata,$outcmdn,opts) "#VERTEX"
		set rv(odata,$outcmdn,data) $curdat
	      }
	    }
	  }
	  LWPOLYLINE {
	    if {[string equal $cmd 20]} {
	      set cpoint [list $x0 $y0]
	      set distance [xth_me_import_check_distance $distance $cpoint]
	      set outline [xth_me_import_check_outline $outline $cpoint]
	      lappend curdat $cpoint
	    }
	    if {[llength $curdat] == 2} {
	      incr outcmdn
	      lappend rv(olist) $outcmdn
	      lappend curdat $cpoint
	      set rv(odata,$outcmdn,type) line
	      set rv(odata,$outcmdn,opts) "#LWPOLYLINE"
	      set rv(odata,$outcmdn,data) $curdat
	    } elseif {[llength $curdat] > 2} {
	      set rv(odata,$outcmdn,data) $curdat
	    }
	  }
	  SPLINE {
	    if {[string equal $cmd 20] || [string equal $cmd 21]} {
	      if {[llength $curdat] == 0} {
		set nofitpoint 1
	      }
	      set cpoint {}
	      if {[string equal $cmd 20]} {
		if {$nofitpoint} {
		  set cpoint [list $x0 $y0]
		}
	      } else {
		if {$nofitpoint} {
		  if {[llength $curdat] >= 2} {
		    incr outcmdn -1
		    set rv(olist) [lrange $rv(olist) 0 end-1]
		  }
		  set curdat {}
		  set nofitpoint 0
		}
		set cpoint [list $x1 $y1]
	      }
	      if {([llength $cpoint] > 0) && (![string equal [lindex $curdat end] $cpoint])} {
		set distance [xth_me_import_check_distance $distance $cpoint]
		set outline [xth_me_import_check_outline $outline $cpoint]
		lappend curdat $cpoint
		if {[llength $curdat] == 2} {
		  incr outcmdn
		  lappend rv(olist) $outcmdn
		  set rv(odata,$outcmdn,type) line
		  set rv(odata,$outcmdn,opts) "#SPLINE"
		  set rv(odata,$outcmdn,data) $curdat
		} elseif {[llength $curdat] > 2} {
		  if {$nofitpoint && ([llength $curdat] > 3)} {
		    if {([llength [lindex $curdat end]] == 2) && ([llength [lindex $curdat end-1]] == 2) && ([llength [lindex $curdat end-2]] == 2)} {
		      set curdat [lreplace $curdat end-2 end "[lindex $curdat end-2] [lindex $curdat end-1] [lindex $curdat end]"]
		    }
		  }
		  if {(!$nofitpoint) && ([llength $curdat] > 2)} {
		    set pp0 [lindex $curdat end-2]
		    set pp1 [lindex $curdat end-1]
		    set pp2 [lindex $curdat end]
		    set p0x [lindex $pp0 end-1]
		    set p0y [lindex $pp0 end]
		    set p1x [lindex $pp1 end-1]
		    set p1y [lindex $pp1 end]
		    set p2x [lindex $pp2 end-1]
		    set p2y [lindex $pp2 end]
		    set l1 [expr hypot($p1x - $p0x, $p1y - $p0y)]
		    set l2 [expr hypot($p2x - $p1x, $p2y - $p1y)]
		    if {($l1 > 0.0) && ($l2 > 0.0)} {
		      set n1x [expr ($p1x - $p0x) / $l1]
		      set n1y [expr ($p1y - $p0y) / $l1]
		      set n2x [expr ($p2x - $p1x) / $l2]
		      set n2y [expr ($p2y - $p1y) / $l2]
		      set nx [expr $l2 * $n1x + $l1 * $n2x]
		      set ny [expr $l2 * $n1y + $l1 * $n2y]
		      set nl [expr hypot($nx, $ny)]
		      if {$nl > 0.0} {
		        set nx [expr $nx / $nl]
		        set ny [expr $ny / $nl]
		        set c1x [expr $p1x - 0.33 * $l1 * $nx]
		        set c1y [expr $p1y - 0.33 * $l1 * $ny]
		        set c2x [expr $p1x + 0.33 * $l2 * $nx]
		        set c2y [expr $p1y + 0.33 * $l2 * $ny]
		        set p1path [lindex $curdat end-1]
		        if {[llength $p1path] == 6} {
		          set p1path [list [lindex $p1path 0] [lindex $p1path 1] $c1x $c1y $p1x $p1y]
		        } else {
		          set p1path [list [expr 0.5 * ($c1x + $p0x)] [expr 0.5 * ($c1y + $p0y)] $c1x $c1y $p1x $p1y]
		        }
		        set p2path [list $c2x $c2y [expr 0.5 * ($c2x + $p2x)] [expr 0.5 * ($c2y + $p2y)] $p2x $p2y]
		        set curdat [lreplace $curdat end-1 end $p1path $p2path]
		      }
		    }
		  }
		  set rv(odata,$outcmdn,data) $curdat
		}
	      }
	    }
	  }
	  LINE {
	    if {[string equal $cmd 20]} {
	      set cpoint [list $x0 $y0]
	      set distance [xth_me_import_check_distance $distance $cpoint]
	      set outline [xth_me_import_check_outline $outline $cpoint]
	      lappend curdat $cpoint
	    } elseif {[string equal $cmd 21]}  {
	      set cpoint [list $x1 $y1]
	      set distance [xth_me_import_check_distance $distance $cpoint]
	      set outline [xth_me_import_check_outline $outline $cpoint]
	      if {($outcmdn >= 0) && [string equal $lastcmd LINE] && [string equal [lindex $rv(odata,$outcmdn,data) end] [lindex $curdat 0]]} {
		if {![string equal [lindex $rv(odata,$outcmdn,data) end] $cpoint]} {
		  lappend rv(odata,$outcmdn,data) $cpoint
		}
	      } else {
		incr outcmdn
		lappend rv(olist) $outcmdn
		lappend curdat $cpoint
		set rv(odata,$outcmdn,type) line
		set rv(odata,$outcmdn,opts) "#LINE"
		set rv(odata,$outcmdn,data) $curdat
	      }
	    }
	  }
	}
      }
    }
  }
  close $fid

if $utldbg {
  puts "done."
} else {
  xth_status_bar_pop me
}


  incr outcmdn
  lappend rv(olist) $outcmdn
  set rv(odata,$outcmdn,type) endscrap
  set rv(odata,$outcmdn,opts) {}
  set rv(odata,$outcmdn,data) {}
  
  set rv(dist) $distance
  set rv(bbox) $outline
  return [array get rv]
}


proc xth_xml_get_flag {flags flag} {
  if {[regexp "(^|\\s)\\s*$flag\\s*\\=\\s*\\\"(\[^\\\"\]*)\\\"" $flags dum dum1 data]} {
    return $data
  } elseif {[regexp "(^|\\s)\\s*$flag\\s*\\=\\s*\\\'(\[^\\\'\]*)\\\'" $flags dum dum1 data]} {
    return $data
  } else {
    return {}
  }
}

proc xth_xml_clear_flag {flagsVar flag} {
  upvar 1 $flagsVar flags
  regsub "(^|\\s)\\s*$flag\\s*\\=\\s*\\\"(\[^\\\"\]*)\\\"" $flags {} flags
  regsub "(^|\\s)\\s*$flag\\s*\\=\\s*\\\'(\[^\\\'\]*)\\\'" $flags {} flags
}



proc xth_me_impsvg_trans {xVar yVar distVar outVar matrix} {
  upvar 1 $xVar x $yVar y $distVar distance $outVar outline
  set nx [expr double($x) * [lindex $matrix 0] + double($y) * [lindex $matrix 2] + [lindex $matrix 4]]
  set ny [expr double($x) * [lindex $matrix 1] + double($y) * [lindex $matrix 3] + [lindex $matrix 5]]
  set x $nx
  set y [expr -1.0 * $ny]
  set distance [xth_me_import_check_distance $distance [list $x $y]]
  set outline [xth_me_import_check_outline $outline [list $x $y]]
}


proc xth_me_impsvg_mm {A B} {
  set m0 [expr [lindex $A 0] * [lindex $B 0] + [lindex $A 2] * [lindex $B 1]]
  set m1 [expr [lindex $A 1] * [lindex $B 0] + [lindex $A 3] * [lindex $B 1]]
  set m2 [expr [lindex $A 0] * [lindex $B 2] + [lindex $A 2] * [lindex $B 3]]
  set m3 [expr [lindex $A 1] * [lindex $B 2] + [lindex $A 3] * [lindex $B 3]]
  set m4 [expr [lindex $A 0] * [lindex $B 4] + [lindex $A 2] * [lindex $B 5] + [lindex $A 4]]
  set m5 [expr [lindex $A 1] * [lindex $B 4] + [lindex $A 3] * [lindex $B 5] + [lindex $A 5]]
  return [list $m0 $m1 $m2 $m3 $m4 $m5]
}

proc xth_me_impsvg_push_transform {cmatrixVar lmatrixVar transformStr} {
  upvar 1 $cmatrixVar cmatrix $lmatrixVar lmatrix
  set nmatrix $cmatrix
  regsub {\)} $transformStr ")\n" transformStr
  set tl [split $transformStr "\n"]
  foreach t $tl {
    if {[regexp -nocase {(\w+)\(([E\+\-\d\.\,]+)\)} $t dum type param]} {
      set paraml [split $param ","]
      set xmatrix {1.0 0.0 0.0 1.0 0.0 0.0}
      switch -- $type {
	translate {
	  if {[llength $paraml] == 2} {
	    set xmatrix [list 1.0 0.0 0.0 1.0 [expr double([lindex $paraml 0])] [expr double([lindex $paraml 1])]]
	  }
	}
	scale {
	  if {[llength $paraml] == 2} {
	    set xmatrix [list [expr double([lindex $paraml 0])] 0.0 0.0 [expr double([lindex $paraml 1])] 0.0 0.0]
	  }
	}
	rotate {
	}
	skewX {
	}
	skewY {
	}
	matrix {
	  if {[llength $paraml] == 6} {
	    set xmatrix [list [expr double([lindex $paraml 0])] [expr double([lindex $paraml 1])] [expr double([lindex $paraml 2])] [expr double([lindex $paraml 3])] [expr double([lindex $paraml 4])] [expr double([lindex $paraml 5])]]
	  }
	}
      }
      set nmatrix [xth_me_impsvg_mm $nmatrix $xmatrix]
    }
  }
  lappend lmatrix $cmatrix
  set cmatrix $nmatrix
}


proc xth_me_impsvg_pop_transform {cmatrixVar lmatrixVar} {
  upvar 1 $cmatrixVar cmatrix $lmatrixVar lmatrix
  if {[llength $lmatrix] > 0} {
    set cmatrix [lindex $lmatrix end]
    set lmatrix [lrange $lmatrix 0 end-1]
  }
}

proc xth_me_import_svg {fnm} {

  global xth utldbg
  set rv(olist) {}
  set outcmdn -1
  set outline {}
  set distance -1.0
  set cmatrix {1.0 0.0 0.0 1.0 0.0 0.0}
  set lmatrix {}

  incr outcmdn
  lappend rv(olist) $outcmdn
  set rv(odata,$outcmdn,type) scrap
  set rv(odata,$outcmdn,opts) {}
  set rv(odata,$outcmdn,data) {}

if $utldbg {
  puts -nonewline "reading $fnm ..."
} else {
  xth_status_bar_push me
  xth_status_bar_status me "reading $fnm ..."
}

  set fid [open $fnm r]
  set dat [read $fid]
  close $fid

if $utldbg {
  puts -nonewline " done.\nparsing $fnm ..."
} else {
  xth_status_bar_status me "parsing $fnm ..."
}

  regsub -all {\n} $dat {} dat
  regsub -all {\s*(\<[^\>]*\>)([^\<]*)} $dat "\\1\n\\2\n" dat
  set data [split $dat "\n"]
  
if !$utldbg {
  xth_me_progbar_show [llength $data]
}
  set cdn 0
  
  set insvg 0
  set indef 0
  foreach itm $data {
    incr cdn
    if {$cdn % 10 == 0} {
      if $utldbg {
	puts -nonewline "."
      } else {
	xth_me_progbar_prog $cdn
      }
    }
    
    # set tag type
    set tagtype data
    if {[regexp {^\s*\<\s*(\/?)(\w+)([^\>]*)\>\s*$} $itm dum slash1 tagid flags]} {
      if {[string length $slash1] > 0} {
	set tagtype end
      } elseif {[regexp {\/\>\s*$} $itm]} {
	set tagtype single
      } else {
	set tagtype start
      }
    }
    
    switch $tagtype {
      start {
	# parse start tag
	switch -- $tagid {
	  svg {
	    if {!$insvg} {set insvg 1}
	  }
	  defs {
	    if {!$indef} {set indef 1}
	  }
	  g {
	    xth_me_impsvg_push_transform cmatrix lmatrix [xth_xml_get_flag $flags transform]
	  }
	}
      }
      end {
	# parse end tag
	switch -- $tagid {
	  svg {
	    if {$insvg} {set insvg 0}
	  }
	  defs {
	    if {$indef} {set indef 0}
	  }
	  g {
	    xth_me_impsvg_pop_transform cmatrix lmatrix
	  }
	}
      }
      single {
	# parse single tag
	switch -- $tagid {
	  path {
	    if {$insvg && (!$indef)} {
	      set pdata [xth_xml_get_flag $flags d]
	      xth_xml_clear_flag flags d
	      regsub -nocase -all {([mlcz])} $pdata "\n\\1" pdata
	      set pdatal [split $pdata "\n"]
	      set curdat {}
	      foreach lni $pdatal {
		if {[regexp -nocase {^\s*(M|L)\s+([e\+\-\d\.]+),([e\+\-\d\.]+)\s*$} $lni dum dum1 x y]} {
		  xth_me_impsvg_trans x y distance outline $cmatrix
		  lappend curdat [list $x $y]
		} elseif {[regexp -nocase {^\s*C\s+([e\+\-\d\.]+),([e\+\-\d\.]+)\s+([e\+\-\d\.]+),([e\+\-\d\.]+)\s+([e\+\-\d\.]+),([e\+\-\d\.]+)\s*$} $lni dum c1x c1y c2x c2y x y]} {
		  xth_me_impsvg_trans c1x c1y distance outline $cmatrix
		  xth_me_impsvg_trans c2x c2y distance outline $cmatrix
		  xth_me_impsvg_trans x y distance outline $cmatrix
		  lappend curdat [list $c1x $c1y $c2x $c2y $x $y]
		}
	      }
	      if {[llength $curdat] > 1} {
		incr outcmdn
		lappend rv(olist) $outcmdn
		set rv(odata,$outcmdn,type) line
		regsub -all {\s+} $flags { } flags
		set rv(odata,$outcmdn,opts) "# $flags #"
		set rv(odata,$outcmdn,data) $curdat
	      }
	    }
	  }
	}
      }
      data {
      }
    }
    
    
  }

if $utldbg {
  puts " done."
} else {
  xth_status_bar_pop me
}


  incr outcmdn
  lappend rv(olist) $outcmdn
  set rv(odata,$outcmdn,type) endscrap
  set rv(odata,$outcmdn,opts) {}
  set rv(odata,$outcmdn,data) {}
  
  set rv(dist) $distance
  set rv(bbox) $outline
  return [array get rv]
}


proc xth_me_import_file_trans {data sc dx dy} {
  set next 0
  set res {}
  foreach pt $data {
    if $next {append res "\n"} 
    switch [llength $pt] {
      2 {
	append res "[expr $sc * ([lindex $pt 0] - $dx)]\t[expr $sc * ([lindex $pt 1] - $dy)]"
      }
      6 {
	append res "[expr $sc * ([lindex $pt 0] - $dx)]\t[expr $sc * ([lindex $pt 1] - $dy)]"
	append res "\t[expr $sc * ([lindex $pt 2] - $dx)]\t[expr $sc * ([lindex $pt 3] - $dy)]"
	append res "\t[expr $sc * ([lindex $pt 4] - $dx)]\t[expr $sc * ([lindex $pt 5] - $dy)]"
      }
    }
    set next 1
  }
  return $res
}


proc xth_me_import_file {fnm fmt} {

  global xth xthmeimpcdlp
  set xthmeimpcdlp {}

  # if file name not specified, load it from dialog  
  if {[string length $fnm] == 0} {
    set fnm [tk_getOpenFile -filetypes {{{SVG files} {*.svg}} {{DXF files} {*.dxf}} {{All files} *}} \
      -parent $xth(gui,main) \
      -initialdir $xth(gui,initdir) -defaultextension ".svg"]  
  }
  if {[string length $fnm] == 0} {
    return
  } else {
    set xth(gui,initdir) [file dirname $fnm]
  }

  # detect file format from file name if format not specified
  if {[string length $fmt] == 0} {
    if {[regexp -nocase {\.dxf} $fnm]} {
      set fmt dxf
    }
    if {[regexp -nocase {\.svg} $fnm]} {
      set fmt svg
    }
  }
  
  # import objects
  switch $fmt {
    dxf {set objects [xth_me_import_dxf $fnm]}
    svg {set objects [xth_me_import_svg $fnm]}
    default {
      set objects [xth_me_import_svg $fnm]
    }
  }
  array set objs $objects
  
  # calculate scrap transformation matrix
  set dx [expr [lindex $objs(bbox) 2] - [lindex $objs(bbox) 0]]
  set dy [expr [lindex $objs(bbox) 3] - [lindex $objs(bbox) 1]]
  set dd $dx
  set md $objs(dist)
  if {$dy > $dd} {set dd $dy}

  set sc [expr $xth(import,size) / $dd]
  if {($md * $sc) < $xth(import,mind)} {set sc [expr $xth(import,mind) / $md]}
  
  if {[info exists xth(import,sscl)]} {
    set sc $xth(import,sscl)]
  }

  set dx [lindex $objs(bbox) 0]
  set dy [lindex $objs(bbox) 1]


  # calculate scrap options (-scale and -cs if applicable)
  set sc0 [expr $sc * ([lindex $objs(bbox) 0] - $dx)]
  set sc1 [expr $sc * ([lindex $objs(bbox) 1] - $dy)]
  set sc2 [expr $sc * ([lindex $objs(bbox) 2] - $dx)]
  set sc3 [expr $sc * ([lindex $objs(bbox) 3] - $dy)]
  set scrapopts {}
  switch $fmt {
    dxf {
      set sc4 [expr [lindex $objs(bbox) 0] * $xth(import,dxf,scale)]
      set sc5 [expr [lindex $objs(bbox) 1] * $xth(import,dxf,scale)]
      set sc6 [expr [lindex $objs(bbox) 2] * $xth(import,dxf,scale)]
      set sc7 [expr [lindex $objs(bbox) 3] * $xth(import,dxf,scale)]
      if {[string length $xth(import,dxf,cs)] > 0} {
	append scrapopts "-cs $xth(import,dxf,cs) "
      }
    }
    svg {
      set sc4 [expr [lindex $objs(bbox) 0] * $xth(import,svg,scale)]
      set sc5 [expr [lindex $objs(bbox) 1] * $xth(import,svg,scale)]
      set sc6 [expr [lindex $objs(bbox) 2] * $xth(import,svg,scale)]
      set sc7 [expr [lindex $objs(bbox) 3] * $xth(import,svg,scale)]
      if {[string length $xth(import,svg,cs)] > 0} {
	append scrapopts "-cs $xth(import,svg,cs) "
      }
    }
    default {
      set sc4 [expr [lindex $objs(bbox) 0] * $xth(import,default,scale)]
      set sc5 [expr [lindex $objs(bbox) 1] * $xth(import,default,scale)]
      set sc6 [expr [lindex $objs(bbox) 2] * $xth(import,default,scale)]
      set sc7 [expr [lindex $objs(bbox) 3] * $xth(import,default,scale)]
      if {[string length $xth(import,default,cs)] > 0} {
	append scrapopts "-cs $xth(import,default,cs) "
      }
    }
  }
  append scrapopts "-scale \[$sc0 $sc1 $sc2 $sc3 $sc4 $sc5 $sc6 $sc7\] "
  
  
  # create objects
  global utldbg
if $utldbg {

  foreach obj $objs(olist) {
    switch $objs(odata,$obj,type) {
      scrap {
	puts "\nscrap import $scrapopts $objs(odata,$obj,opts)"
      }
      point {
	puts "\npoint [xth_me_import_file_trans $objs(odata,$obj,data) $sc $dx $dy] u:point $objs(odata,$obj,opts)"
      }
      line {
	puts "\nline u:line $objs(odata,$obj,opts)\n[xth_me_import_file_trans $objs(odata,$obj,data) $sc $dx $dy]\nendline"
      }
      endscrap {
	puts "\nendscrap"
      }
      default {
	puts ""
      }
    }
  }


} else {

  xth_status_bar_push me
  xth_status_bar_status me [mc "Importing objects ..."]
  xth_me_progbar_show [llength $objs(olist)]

  set scount 0
  set ocount 0
  set xth(me,unredook) 0
  foreach obj $objs(olist) {
    incr ocount
    xth_me_progbar_prog $ocount
    
    set pos [expr [llength $xth(me,cmds,xlist)] - 1]
    switch $objs(odata,$obj,type) {
      scrap {
	xth_me_cmds_create_scrap $pos 0 import$scount "$scrapopts $objs(odata,$obj,opts)"
	incr scount
      }
      point {
	set coords [xth_me_import_file_trans $objs(odata,$obj,data) $sc $dx $dy]
	xth_me_cmds_create_point $pos 0 [lindex $coords 0] [lindex $coords 1] "u:point" $objs(odata,$obj,opts)
      }
      line {
	set coords [xth_me_import_file_trans $objs(odata,$obj,data) $sc $dx $dy]
	xth_me_cmds_create_line $pos 0 "u:line" $objs(odata,$obj,opts) [split $coords "\n"]
      }
      endscrap {
	xth_me_cmds_create_endscrap $pos 0 {}
      }
    }
  }

  xth_me_cmds_select [lindex $xth(me,cmds,xlist) $pos]
  xth_me_area_auto_adjust
  xth_me_progbar_hide
  xth_status_bar_pop me
  set xth(me,unredook) 1

}  
}


if $utldbg {
  set xth(gui,main) .
  #xth_me_import_svg test.svg
  #xth_me_import_dxf map1.dxf
  xth_me_import_file map1.dxf {}
  exit
}
therion/xtherion/me_ss.tcl0000644000076400010400000002071010625665160016746 0ustar  userAdministrators##
## me_ss.tcl --
##
##     Map editor search & select tools.
##
## Copyright (C) 2003 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------


proc xth_me_ss_next {} {
  global xth
  xth_me_cmds_update {}
  set cselid $xth(me,cmds,selid)
  set cselpid $xth(me,cmds,selpid)
  set eofvalid [expr $cselid == 0]
  xth_status_bar_push me
  xth_status_bar_status me "Searching ..."
  if {$cselid == 0} {
    set totalcnt [llength $xth(me,cmds,xlist)]
  } else {
    set totalcnt [expr [llength $xth(me,cmds,xlist)] - [lsearch -exact $xth(me,cmds,xlist) $cselid] - 1]
  }
  set cnt 0
  xth_me_progbar_show $totalcnt
  while {($cselid != 0) || $eofvalid} {
    set eofvalid 0    
    # prejde na dalsi objekt
    if {$cselid == 0} {
      set cselid [lindex $xth(me,cmds,xlist) 0]
      if {$xth(me,cmds,$cselid,ct) == 3} {
	set cselpid [lindex $xth(me,cmds,$cselid,xplist) 0]
      } else {
	set cselpid 0
      }
      incr cnt
    } elseif {($xth(me,cmds,$cselid,ct) != 3) || ($cselpid == 0)} {
      set cselid [lindex $xth(me,cmds,xlist) \
	  [expr [lsearch -exact $xth(me,cmds,xlist) $cselid] + 1]]
      if {$xth(me,cmds,$cselid,ct) == 3} {
	set cselpid [lindex $xth(me,cmds,$cselid,xplist) 0]
      } else {
	set cselpid 0
      }
      incr cnt
    } else {
      set cselpid [lindex $xth(me,cmds,$cselid,xplist) \
	  [expr [lsearch -exact $xth(me,cmds,$cselid,xplist) $cselpid] + 1]]
    }
    xth_me_progbar_prog $cnt
    switch $xth(me,cmds,$cselid,ct) {
      0 {
	xth_me_cmds_select 0
	xth_me_progbar_hide
	xth_status_bar_pop me
	return
      }
      3 {
	if {$cselpid == 0} {
	  if {[xth_me_ss_match $xth(me,cmds,$cselid,data_ln)]} {
	    xth_me_cmds_select "$cselid 0"
	    xth_me_progbar_hide
	    xth_status_bar_pop me
	    return
	  }
	} else {
	  if {[xth_me_ss_match [lindex $xth(me,cmds,$cselid,data_pt) \
	      [lsearch -exact $xth(me,cmds,$cselid,xplist) $cselpid]]]} {
	    xth_me_cmds_select "$cselid $cselpid"
	    xth_me_progbar_hide
	    xth_status_bar_pop me
	    return
	  }
	}
      }
      default {
	if {[xth_me_ss_match $xth(me,cmds,$cselid,data)]} {
	  xth_me_cmds_select $cselid
	  xth_me_progbar_hide
	  xth_status_bar_pop me
	  return
	}
      }
    }
  }
  xth_me_progbar_hide
  xth_status_bar_pop me
}

proc xth_me_ss_first {} {
  global xth
  xth_me_cmds_update {}
  xth_me_cmds_select 0
  xth_me_ss_next
}


proc xth_me_ss_match {s} {
  global xth
  if $xth(ctrl,me,ss,regexp) {
    if $xth(ctrl,me,ss,cases) {
      return [regexp $xth(ctrl,me,ss,expr) $s]
    } else {
      return [regexp -nocase $xth(ctrl,me,ss,expr) $s]
    }
  } else {
    if $xth(ctrl,me,ss,cases) {
      if {[string first $xth(ctrl,me,ss,expr) $s] >= 0} {
	return 1
      } else {
	return 0
      }
    } else {
      if {[string first [string tolower $xth(ctrl,me,ss,expr)] [string tolower $s]] >= 0} {
	return 1
      } else {
	return 0
      }
    }
  }
}


proc xth_me_ss_show {} {
  global xth
  xth_me_cmds_update {}
  xth_me_cmds_set_colors
  set selcol red
  xth_status_bar_push me
  xth_status_bar_status me "Searching ..."
  xth_me_progbar_show [llength $xth(me,cmds,xlist)]
  set objcnt 0
  foreach id $xth(me,cmds,xlist) {
    incr objcnt
    xth_me_progbar_prog $objcnt
    switch $xth(me,cmds,$id,ct) {
      2 {
	if {[xth_me_ss_match $xth(me,cmds,$id,data)]} {
	  # oznaci bod
	  $xth(me,can) itemconfigure pt$id -fill $selcol
	}
      }
      3 {
	set pnm 0
	set trywhole 1
	foreach tx $xth(me,cmds,$id,data_pt) {
	  if {[xth_me_ss_match $tx]} {
	    set pid [lindex $xth(me,cmds,$id,xplist) $pnm]
	    # oznaci bod na ciare
	    set trywhole 0
	    $xth(me,can) itemconfigure pt$id.$pid -fill $selcol
	    set ppid [lindex $xth(me,cmds,$id,xplist) [expr $pnm + 1]]
	    if {[string length $ppid] > 0} {
	      $xth(me,can) itemconfigure ln$id.$ppid -fill $selcol
	    }
	  }
	  incr pnm 1
	}
	if {$trywhole && [xth_me_ss_match $xth(me,cmds,$id,data_ln)]} {
	  # oznaci ciaru
	  $xth(me,can) itemconfigure lnln$id -fill $selcol
	}
      }
    }
  }
  xth_status_bar_pop me
  xth_me_progbar_hide
}


proc xth_me_goto_line {ln} {

  global xth
  if {!$xth(me,fopen)} {
    return
  }
  
  # najprv preskoci zaciatocne prikazy
  set cln [expr [llength $xth(me,imgs,xlist)] + 4]
  
  # potom poojde prikaz za prikazom az najde taky,
  # ktory lezi na danej, alebo je mensi ako dana
  # pozicia a nasledujuci prikaz je uz zase vacsi
  set previd [lindex $xth(me,cmds,xlist) 0]
  set prevln $cln
  foreach cid $xth(me,cmds,xlist) {
    if {$xth(me,cmds,$cid,ct) == 4} {
      incr cln 2
    }
    incr cln 1
    
    # skontrolujeme ci to nebol predchadzajuci
    if {$cln > $ln} {
      xth_me_cmds_select $previd
      return
    }    
    # resp. ci to nie je tento
    set prevln $cln
    incr cln [expr 1 + [regexp -all {\n} $xth(me,cmds,$cid,data)]]
    #puts "$prevln - $cln:\n$xth(me,cmds,$cid,data)"

    if {($ln >= $prevln) && ($ln < $cln)} {
      set posttry 0
      switch $xth(me,cmds,$cid,ct) {
	1 {
	  xth_ctrl_scroll_to me text
	  set posttry 1
	}
	2 {xth_ctrl_scroll_to me point}
	3 {xth_ctrl_scroll_to me line}
	4 {xth_ctrl_scroll_to me scrap}
	6 {xth_ctrl_scroll_to me area}
      }
      xth_me_cmds_select $cid
      if {($ln > $prevln) || $posttry} {
	# skusime sa trafit presnejsie
	switch $xth(me,cmds,$cid,ct) {
	  1 {
	    set txln [expr $ln - $prevln + 1]
	    focus $xth(ctrl,me,text).txt
	    $xth(ctrl,me,text).txt mark set insert $txln.0
	    $xth(ctrl,me,text).txt tag remove sel 1.0 end
	    $xth(ctrl,me,text).txt tag add sel $txln.0 "$txln.0 lineend"
	  }
	  3 {
	    # skusime najst bod na ciare
	    set txln [expr $ln - $prevln + 1]
	    if {$txln > 1} {
	      set tmpxpl $xth(me,cmds,$cid,xplist)
	      #puts $tmpxpl
	      set cxpl {}
	      set cpix [lindex $tmpxpl]
	      foreach pix [lrange $tmpxpl 0 [expr [llength $tmpxpl] - 2]] {
		lappend cxpl $pix
		catch {
		  set xth(me,cmds,$cid,xplist) "$cxpl 0"
		  xth_me_cmds_update_line_data $cid
		}
		set clnln [regexp -all {\n} $xth(me,cmds,$cid,data)]
		set xth(me,cmds,$cid,xplist) $tmpxpl
		#puts "$clnln -> $txln:\n$xth(me,cmds,$cid,data)"
		if {$clnln >= $txln} {
		  set cpix $pix
		  #puts $pix
		  break
		}
	      }
	      set xth(me,cmds,$cid,xplist) $tmpxpl
	      xth_me_cmds_update_line_data $cid
	      xth_me_cmds_select "$cid $pix"
	      xth_ctrl_scroll_to me linept
	    }
	  }
	}
      }
      return
    }
    
    set previd $cid
    
  }
  
  xth_me_cmds_select [lindex $xth(me,cmds,xlist) 0]
  
}


proc xth_me_ss_next_cmd {type} {
  global xth
  set cselid $xth(me,cmds,selid)
  set cpos [lsearch -exact $xth(me,cmds,xlist) $cselid]
  if {$cpos < 0} {
    set cpos 0
    set ctyp -1
  } else {
    set ctyp $xth(me,cmds,$cselid,ct)
  }
  set tlen [llength $xth(me,cmds,xlist)]
  set nxlist [lrange $xth(me,cmds,xlist) [expr $cpos + 1] end]
  append nxlist " [lrange $xth(me,cmds,xlist) 0 $cpos]"
  if {($ctyp > 0) && ($ctyp != 4) && ($type == 4)} {
    # search for current scrap first
    set nlst {}
    foreach xx $nxlist {
      set nlst [linsert $nlst 0 $xx]
    }
    set nxlist $nlst
  }
  foreach xx $nxlist {
    if {$xth(me,cmds,$xx,ct) == $type} {
      xth_me_cmds_select $xx
      xth_me_ss_show_control $xx
      break
    }
  }
}


# 1 text
# 2 point
# 3 line
# 4 scrap
# 5 endscrap
# 6 area
proc xth_me_ss_show_control {id} {
  global xth
  if {[lsearch -exact $xth(me,cmds,xlist) $id] > -1} {
    switch $xth(me,cmds,$id,ct) {
      1 {
	xth_ctrl_scroll_to me text
	xth_ctrl_maximize me text
      }
      2 {
	xth_ctrl_scroll_to me point
	xth_ctrl_maximize me point
      }
      3 {
	xth_ctrl_scroll_to me point
	xth_ctrl_maximize me line
	xth_ctrl_maximize me linept
      }
      4 {
	xth_ctrl_scroll_to me scrap
	xth_ctrl_maximize me scrap
      }
      6 {
	xth_ctrl_scroll_to me ac
	xth_ctrl_maximize me ac
      }
    }
  }
}therion/xtherion/mkall.tcl0000644000076400010400000000364412071372120016733 0ustar  userAdministratorsproc append_file {fnm} {  
  global oid
  set fid [open $fnm r]
  while {![eof $fid]} {
    gets $fid ln
    if {![regexp {^\s*\#\#} $ln]} {
      puts $oid $ln
    }
  }
  puts $oid "\n\n\n\n"
  close $fid
}

proc append_all_file {fnm} {  
  global oid
  set fid [open $fnm r]
  fcopy $fid $oid
  puts $oid "\n\n\n\n"
  close $fid
}


set what [lindex $argv 0]
switch $what {
  survex {
    set oid [open "svxedit" w]
    puts $oid "#!/usr/bin/wish"
    puts $oid {##
## svxedit --
##
##     Survex svx files editor.
##
## Copyright (C) 2002 Stacho Mudrak
## 
##}
  }
  default {
    case $tcl_platform(platform) {
      windows {
        set oid [open "xtherion.tcl" w]
      }
      default {
        set oid [open "xtherion" w]
        puts $oid "#!/bin/sh"
        puts $oid "# the next line restarts with wish \\"
        puts $oid "exec wish \"\$0\" \"\$@\""
      }
    }
    puts $oid {##
## xtherion --
##
##     Therion user interface.
##
## Copyright (C) 2002 Stacho Mudrak
## 
##}
    set what xtherion
  }
}

append_all_file licence.tcl
puts $oid "\n\n\nset xth(debug) 0"

catch {
    set fid [open ../thversion.h r]
    gets $fid verl
    regexp {\d+\.\d+(\.\d+)?} $verl vver
    close $fid
    set fid [open ver.tcl w]
    fconfigure $fid -translation lf
    puts $fid "set xth(about,ver) $vver"
    close $fid
}

set fid [open source.tcl r]

set toappend 0
while {![eof $fid]} {
  gets $fid fl
  if {[regexp {^\s*\#\@(\S+)\s*$} $fl dum current]} {
    if {[string equal -nocase $what $current]} {
      set toappend 1
    } elseif {[string equal -nocase "ALL" $current]} {
      set toappend 1
    } else {
      set toappend 0
    }
  }
  if {![regexp {^\s*\#} $fl]} {
    if {[regexp {^\s*source\s+(\S+)} $fl dum afname] && $toappend} {
    	append_file $afname
    }
  }
}
close $fid
close $oid

case $tcl_platform(platform) {
  unix {
    catch {exec chmod 775 xtherion}
    catch {exec chmod 775 svxedit}
  }
  windows {
  }
}

exit 0therion/xtherion/msgusr.tcl0000644000076400010400000006110711542657122017163 0ustar  userAdministrators::msgcat::mcset en "xtherion_help_control" {

MAP EDITOR SHORTCUTS
  
General shortcuts
 * Ctrl+Z = undo
 * Ctrl+Y = redo
 * F9 = compile current project
 * to select object in the listbox using keyboard:
    switch using "Tab" into desired listbox;
    move with underlined cursor to desired object;
    press "Space"

Drawing area and background images
 * RightClick = scroll drawing area
 * Double RightClick on the image = move the image
 
Inserting scrap
 * press "Ctrl-r" or "Edit" > "Insert" > "scrap" to insert new scrap
 * new scrap is inserted just after the current one

Inserting point
 * Ctrl+P = switch to `insert point' mode
 * LeftClick = insert point at given position
 * Ctrl+LeftClick = insert point very close to existing point (normally it
    will be inserted right above the closest point)
 * Esc = escape from the `inset point' mode

Editing point
 * LeftClick + drag = move point
 * Ctrl+LeftClick + drag = move point close to the existing
    point (normally it is moved right above closest existing point)
 * LeftClick + drag on point arrows = change point orientation or
    sizes (according to given switches in Point cotrol panel)

Inserting line
 * Crtl+L = insert new line and enter an `insert line point' mode
 * LeftClick = insert line point (without control points)
 * Ctrl+LeftClick = insert line point very close to existing point 
    (normally it's inserted right above closest existing point)
 * LeftClick + drag = insert line point (with control points)
 * hold Ctrl while dragging = fix the distance of previous control point
 * LeftClick + drag on the control point = move its position
 * RightClick on one of the previous points = selects the previous point while 
    in insert mode (useful if you want to change also the direction of
    previous control point)
 * Esc or LeftClick on the last point = end the line insertion
 * LeftClick on the first line point = close the line and end line insertion

Editing line
 * LeftClick + drag = move line point
 * Ctrl+LeftClick + drag = move line point close to the existing
    point (normally it is moved right above closest existing point)
 * LeftClick on control point + drag = move control point

Adding line point
 * select the point before which you want to insert points;
    insert required points;
    press Esc or left-click on the point you selected at the begining
  
Deleting line point
 * select the point you want to delete;
    press "Edit line" > "Delete point" in the Line control panel
    
Splitting line
 * select the point at which you want to split the line;
    press "Edit line" > "Split line" in the Line control panel
    
Inserting area
 * press "Ctrl-a" or "Edit" > "Insert" > "area" to switch to 
    the "insert area border" mode
 * RightClick on the lines, that suround desired area
 * Esc to finish area border lines insertion

Editing area
 * select area you want to edit
 * pres "Insert" in the area control to insert other border lines
    at current cursor position
 * pres "Insert ID" to insert border with given ID at current cursor position
 * pres "Delete" to remove selected area border line
    
Selecting an existing object
 * LeftClick = select object on the top
 * RightClick = select object right below the top object (useful when several
    points lie above each other)
}

::msgcat::mcset es "xtherion_help_control" {

ATAJOS DE TECLADO PARA EDITAR MAPAS

Atajos generales
 * Ctrl+Z = Deshacer
 * Ctrl+Y = Rehacer
 * F9 = Compilar proyecto actual
 * para seleccionar en los menús usando el teclado:
   Pulsar "Tab" hasta seleccionar el menú deseado;
   Moverse con las flechas hasta el objeto deseado;
   pulsar "Espacio"
   
Area de dibujo e imáges de fondo
 * Click Dcho = desplazar área de dibujo
 * Doble click dcho en la imagen = mover la imagen

Insertar croquis
 * Pulsar "Ctrl-r" o "Editar" > "Insertar" > "Croquis" para insertar un croquis nuevo
 * el nuevo croquis se insertará justo detrás del actual

Insertar punto
 * CTRL+P = cambiar a modo 'insertar punto'
 * Click = insertar punto en esa posición
 * Ctrl+Click = insertar punto muy cerca de otro punto
   (normalmente se insertará justo encima del punto más cercano)
 * Esc = salir del modo 'insertar punto'

Editar punto
 * Click en punto + arrastrar = mover el punto
 * Ctrl + Click en punto + Arrastrar = mover el punto cerca de otro
 * normalmente es movido justo encima del punto más cercano
 * Click en la punta de una flecha + arrastrar = cambiar la orientación o
   el tamaño (segun lo indicado en el panel de control Punto)

Insertar línea
 * Ctrl+L = insertar nueva línea y pasar al modo "insertar puntos de línea"
 * Click = insertar punto de línea (sin puntos de control)
 * Ctrl+Click = Insertar punto de línea muy cerca de otro
   (Normalmente se inserta justo encima del punto más cercano)
 * Click + arrastrar = insertar punto de línea (con puntos de control)
 * Pulsar Ctrl mientras se arrastra = fijar la distancia al punto de control anterior
 * Arrastra punto de control = cambir su posición
 * Click dcho en uno de los puntos anteriores = seleccionar ese punto anterior cuando
   estamos en modo inserción (Util si se quiere cambiar también la dirección
   del punto de control anterior)
 * Esc o Click en último punto de la línea = finaliza la inserción de línea
 * Click en el primer punto de la línea = cierra la línea y finaliza la inserción de línea

Editar línea
 * Click en punto + arrastrar = mover punto de línea
 * Ctrl+Click+arrastrar = mover punto de línea cerca de otro punto)
   (normalmente se mueve justo encima del punto más cercano)
 * Click en punto de control + arrastrar = mover punto de control

Añadir puntos de línea
 * seleccionar el punto antes del cual se quieren insertar puntos
 * insertar los puntos que hagan falta
 * pulsar Esc o hacer click en el punto que se seleccionó al principio

Borrar puntos de línea
 * seleccionar el punto que se quiere borrar
 * pulsar "Editar" > "Borrar punto" en el panel de control Líneas

Partir líneas
 * seleccionar el punto en que se quiere cortar la línea
 * pulsar "Editar" > "Cortar línea" en el panel de control Líneas

Insertar áreas
 * pulsar Ctrl-a o "Editar" > "Insertar" > área en menú principal
 * para cambiar al modo "insertar límite de área"
 * Click dcho en las líneas que limitarán el área
 * pulsar Esc para teminar la inserción de líneas límite

Editar áreas
 * seleccionar el área que se quiere editar
 * pulsar "Insertar" en el control area para insertar otras líneas límite
   en la posición del cursor
 * pulsar "Insertar ID" para insertar un límite con el ID que se indique en l posición del cursor
 * Pulsar "Borrar" para eliminae la línea límite seleccionada

Seleccionar objetos
 * Click = seleccionar el objeto que está sobre los demás
 * Click dcho = seleccionar el objeto que está en segundo plano
   (útil cuando varios puntos están superpuestos)
}

::msgcat::mcset it "xtherion_help_control" {

SHORTCUT - EDITOR DI MAPPA
  
Shortcut generali
 * Ctrl+Z = torna indietro
 * Ctrl+Y = rifai
 * F9 = compila il progetto
 * per selezionare un oggetto in una lista con la tastiera:
   muovi con il tasto "Tab" nella lista desidearta;
   muovi il cursore sull'oggetto desiderato;
   premi il tasto "Spazio"

Area di disegno e immagini di background
 * Tasto destro = scrolla l'area di disegno
 * Doppio click col tasto destro su una immagine = muovi l'immagine
 
Inserimento scrap
 * premi "Ctrl-R" oppure "Edita" > "Inserisci" > "scrap" per inserire un nuovo scrap
 * il nuovo scrap viene inserito immediatamente dopo quello attivo

Inserimento punto
 * "Ctrl-P" = cambia alla modalità di inserimento punti
 * Tasto sinistro = inserisci un punto nella posizione del mouse
 * Ctrl + tasto sinistro = inserisci un punto vicino ad uno esistente
   (di solito esso viene inserito esattamente sopra quello esistente)
 * "Esc" = esci dalla modalità di inserimento punti

Editare punti
 * Trascina con tasto sinistro = muovi il punto
 * Trascina con Ctrl + tasto sinistro = muovi il punto vicino ad uno esistente
   (solitamente viene poszionato proprio sopra quello esistente)
 * Trascina con tasto sinistro per la punta delle freccie = cambia l'orientazione
   o la dimensione (dipendentemente dallo switch nel "Controllo Punti" del pannello)

Inserimento linee
 * "Ctrl-L" = entra in modalità inserimento linee ed inserisci una nuova linea
 * Tasto sinistro = inserisci un nuovo punto della linea (senza punti di controllo)
 * Ctrl + tasto sinistro = inserisci un nuovo punto della linea vicino ad uno
   esistente (normalmente sopra di esso)
 * Trascina con tasto sinistro = inserisci un nuovo punto della linea (con punti di
   controllo)
 * tieni premuto "Ctrl" durante in trascinamento = fissa la distanza del precedente 
   punto di controllo
 * Trascina con tasto sinistro su un punto di controllo = muovi la sua posizione
 * Tasto destro su uno dei punti precedenti = seleziona il punto precedente mentre
   sei in modaliatà di inserimento (utile se vuoi cambiare anche la direzione
   del precedente punto di controllo)
 * "Esc" oppure tasto sinistro sull'ultimo punto = fine inserimento linea
 * Tasto sinistro sul primo punto = chiudi la linea e fine inserimento

Editare linee
 * Tasto sinistro e trascina = sposta il punto della linea
 * Ctrl + tasto sinistro e trascina = sposta il punto dell alinea vicino ad un
   punto esistente (di solito proprio sopra di esso)
 * Tasto sinistro su un punto di controllo e trascina = sposta il punto di controllo

Aggiungere punti di linea
 * seleziona il punto prima del quale vuoi inserire dei punti;
   inserisci i punti desiderati;
   premi "Esc" o tasto sinstro sul punto selezionato all'inizio
  
Rimuovere un punto di linea
 * seleziona il punto che vuoi rimuovere;
   premi "Edita linea" > "Rimuovi punto" nel Controllo Linee del pannello
    
Dividere una linea
 * seleziona il punto dove vuoi dividere la linea;
   premi "Edita linea" > "Dividi linea"  nel Controllo Linee del pannello
    
Inserimento aree
 * premi "Ctrl-A" oppure "Edita" > "Inserisci" > "area" per passare alla
   modalità di inserimento bordo area
 * Tasto destro sulle linee, che contornano l'area desiderata
 * "Esc" per terminare l'inserimento dell'area

Editare aree
 * seleziona l'area che vuoi editare
 * premi "Inserisci" nel Controllo Aree per inserire altre linee di bordo
   nella posizione del cursore
 * premi "Inserisci ID" per inserire una linea con un dato ID nella 
   posizione del cursore
 * premi "Rimuovi" per rimuovere dal bordo dell'area la linea di bordo 
   selezionata
    
Selezionare un oggetto
 * Tasto sinistro = selezione l'oggetto che sta sopra
 * Tasto destro = seleziona l'oggetto appena sotto quello gia` selezionato
   (utile quando parecchi punti giaciono uno sopra l'altro)
}


::msgcat::mcset ru "xtherion_help_control" {
КЛÐВИÐТУРÐЫЕ СОКРÐЩЕÐИЯ И ОПЕРÐЦИИ Ð’ РЕДÐКТОРЕ КÐРТ

LeftClick         - щелчек левой кнопкой мыши
Double LeftClick  - двойной щелчек левой кнопкой мыши
RightClick        - щелчек правой кнопкой мыши
Double RightClick - двойной щелчек правой кнопкой мыши
drag              - перетаÑкивание: ÑƒÐ´ÐµÑ€Ð¶Ð¸Ð²Ð°Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½ÑƒÑŽ кнопку мыши
                    (и/или клавиатуры) перемещайте мышь

Общее
 * Ctrl+Z = отмена дейÑÑ‚Ð²Ð¸Ñ (undo)
 * Ctrl+Y = вернуть отмененное дейÑтвие (redo)
 * F9 = компилÑÑ†Ð¸Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ проекта
 * Ð”Ð»Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð° в ÑпиÑках:
    - перемеÑтитеÑÑŒ к нужному Ñлементу ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ "Tab";
    - выбирайте нужный Ñлемент ÑпиÑка (он подчеркнут) Ñтрелками;
    - подтвердите выбор нажатием "Enter"

ОблаÑть риÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ фоновые изображениÑ
 * RightClick + drag = Ñкроллинг облаÑти риÑованиÑ
 * Double RightClick на изображении + drag = перемещение изображениÑ

Ð’Ñтавка Ñкрапа
 * Ðажмите "Ctrl-r" или "ДейÑтвие" > "Ð’Ñтавить Ñкрап" на панели "Команды в файле"
 * новый Ñкрап вÑтавлÑетÑÑ Ð² поÑле текущего

Ð’Ñтавка точки
 * Ctrl+P = переключение в режим `вÑтавка точки'
 * LeftClick = вÑтавка точки в позицию курÑора
 * Ctrl+LeftClick = вÑтавка точки близко Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¹ точкой (без Ctrl
   точка "притÑгиваетÑÑ" к уже ÑущеÑтвующей точке)
 * Esc = выйти из режима `вÑтавка точки'

Редактирование точки
 * LeftClick + drag = перемещает точку
 * Ctrl+LeftClick + drag = перемещение точки близко от ÑущеÑтвующей
   точки (без Ctrl точка "притÑгиваетÑÑ" к уже ÑущеÑтвующей точке)
 * LeftClick + drag над Ñтрелкой = изменение ориентации точки
   (Ð¾Ñ€Ð¸ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° быть включена на панели "Точка")

Ð’Ñтавка линии
 * Crtl+L = Ð’Ñтавка новой линии и переход в режим `вÑтавка точек линии'
 * LeftClick = вÑтавка точки линии в позицию курÑора (без точек ÑглаживаниÑ)
 * Ctrl+LeftClick = вÑтавка точки линии близко от ÑущеÑтвующей (без Ctrl точка
   "притÑгиваетÑÑ" к уже ÑущеÑтвующей точке)
 * LeftClick + drag = вÑтавка точки линии (Ñ Ñ‚Ð¾Ñ‡ÐºÐ°Ð¼Ð¸ ÑглаживаниÑ)
 * ÑƒÐ´ÐµÑ€Ð¶Ð¸Ð²Ð°Ñ Ctrl во Ð²Ñ€ÐµÐ¼Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ñ‚Ð¾Ñ‡ÐºÐ¸ ÑÐ³Ð»Ð°Ð¶Ð¸Ð²Ð°Ð½Ð¸Ñ = перемещает только
   данную точку ÑглаживаниÑ
 * LeftClick + drag на точке ÑÐ³Ð»Ð°Ð¶Ð¸Ð²Ð°Ð½Ð¸Ñ = изменение ее позиции
 * RightClick на одной из предыдущих точек текущей линии в режиме `вÑтавка точек линии'
   = выбрать ÑущеÑтвующую точку, полезно Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ‚Ð¾Ñ‡ÐµÐº ÑглаживаниÑ
 * Esc или LeftClick на поÑледней точке = закончить вÑтавку точек линии
 * LeftClick на первой точке линии = замкнуть начало линии на конец и выйти из режима
   вÑтавки

Редактирование линии
 * LeftClick + drag = перемещение точки линии
 * Ctrl+LeftClick + drag = перемещение точки линии близко от ÑущеÑтвующей
   (без Ctrl точка "притÑгиваетÑÑ" к уже ÑущеÑтвующей точке)
 * LeftClick на точке ÑÐ³Ð»Ð°Ð¶Ð¸Ð²Ð°Ð½Ð¸Ñ + drag = перемещение точки ÑглаживаниÑ

Добавление точки к ÑущеÑтвующей линии
 * выбрать точку перед которой вы хотите вÑтавить новую точку;
    - перейдите в режим вÑтавки точки (панель "ЛиниÑ")
    - вÑтавьте точки (Ñм. Ð’Ñтавка линии);
    - Esc или LeftClick на точке Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¹ вы начинали = выход из режима вÑтавки

Удаление точки линии
 * выбрать точку линии которую нужно удалить;
    нажмите "Править линию" > "Удалить точку" на панели "ЛиниÑ"

Зазделение линии
 * выбрать точку в которой вы хотите разделить линию;
    нажмите "Править линию" > "Разделить линию" на панели "ЛиниÑ"

Ð’Ñтавка облаÑти
 * "Ctrl-a" или на панели "Команды в файле" нажмите "ДейÑтвие" > "Ð’Ñтавить облаÑть"
   чтобы переключитÑÑ Ð² режим "выбор границ облаÑти"
 * LeftClick на линии = Ð»Ð¸Ð½Ð¸Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÑетÑÑ Ðº ÑпиÑку границ облаÑти
 * Esc Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾ чтобы закончить выбор границ облаÑти

Редактировать облаÑть
 * Выбрать облаÑть Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ
 * неажать "Ð’Ñтавка" на панели "ОблаÑть" Ð´Ð»Ñ Ð²Ñтавки граничных линий в ÑпиÑок
   линий поÑле выбраной линии
 * нажать "Ð’Ñтавить по ИД" Ð´Ð»Ñ Ð²Ñтавки линии Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¼ идентификатором
 * нажать "Удалить" Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð¾Ð¹ линии из ÑпиÑка гранци облаÑти

Выбор ÑущеÑтвующего объекта
 * LeftClick = выбор верхнего объекта
 * RightClick = перебор объектов закрытых верхним объектом (например полезно, когда
   неÑколько точек раÑположены в одной позиции друг над другом)
}

::msgcat::mcset bg "xtherion_help_control" {
Клавишни комбинации и дейÑÑ‚Ð²Ð¸Ñ Ð² редактора на карти

LeftClick         - натиÑкане на Ð»ÐµÐ²Ð¸Ñ Ð±ÑƒÑ‚Ð¾Ð½ на мишката
Double LeftClick  - двойно натиÑкане на Ð»ÐµÐ²Ð¸Ñ Ð±ÑƒÑ‚Ð¾Ð½ на мишката
RightClick        - натиÑкане на деÑÐ½Ð¸Ñ Ð±ÑƒÑ‚Ð¾Ð½ на мишката
Double RightClick - двойно натиÑкане на деÑÐ½Ð¸Ñ Ð±ÑƒÑ‚Ð¾Ð½ на мишката
drag              - премеÑтване: задръжте натиÑнат ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð±ÑƒÑ‚Ð¾Ð½ на мишката
                    (и/или клавиатурата) и движете мишката

Общи
 * Ctrl+Z = отмÑна на дейÑтвие (undo)
 * Ctrl+Y = възÑтановÑване на отменено дейÑтвие (redo)
 * F9 = ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð°Ñ†Ð¸Ñ Ð½Ð° Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚
 * За избор в менюто:
    - премеÑтете към нужниÑÑ‚ елемент за ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÑ Ð¿Ð¾Ð¼Ð¾Ñ‰Ñ‚Ð° на бутона "Tab";
    - Изберете нужниÑÑ‚ елемент от менюто (той е подчертан) ÑÑŠÑ Ñтрелките;
    - потвърдете избора, натиÑкайки "Enter"

ОблаÑÑ‚ за риÑуване и фонови изображениÑ
 * RightClick + drag = Ñкролиране на облаÑтта за риÑуване
 * Double RightClick в/у изображение + drag = премеÑтване на изображението

Вмъкване на Ñкрап
 * ÐатиÑнете "Ctrl-r" или "ДейÑтвие" > "Вмъкни Ñкрап" на панела "Команди във файл"
или "Редактиране" > "Вмъкни" > "Скрап" от горното меню
 * новиÑÑ‚ Ñкрап Ñе вмъква Ñлед текущиÑ

Вмъкване на точка
 * Ctrl+P = превключване в режим "вмъкване на точка"
 * LeftClick = вмъкване на точка в позициÑта на курÑора
 * Ctrl+LeftClick = вмъкване на точка близко до друга точка (обикновено Ñе поÑвÑва
точно над вече ÑъщеÑтвуващата точка)
 * Esc = излизане от режима "вмъкване на точка"

Редактиране на точка
 * LeftClick + drag = премеÑтва точката
 * Ctrl+LeftClick + drag = премеÑтва точката близко до ÑъщеÑтвуваща точка (обикновено 
Ñе поÑвÑва точно над вече ÑъщеÑтвуващата точка)
 * LeftClick + drag на Ñтрелката на точката = изменение на ориентациÑта на точката
   (ориентациÑта трÑбва да бъде включена на панела "Точка")

Вмъкване на линиÑ
 * Crtl+L = Вмъкване на нова Ð»Ð¸Ð½Ð¸Ñ Ð¸ преход в режим "вмъкване на точка на линиÑ"
 * LeftClick = вмъкване на точка на Ð»Ð¸Ð½Ð¸Ñ Ð² позициÑта на курÑора (без контролна точка)
 * Ctrl+LeftClick = вмъкване на точка на Ð»Ð¸Ð½Ð¸Ñ Ð±Ð»Ð¸Ð·ÐºÐ¾ до ÑъщеÑтвуваща (обикновено 
Ñе поÑвÑва точно над вече ÑъщеÑтвуващата точка)
 * LeftClick + drag = вмъкване на точка на Ð»Ð¸Ð½Ð¸Ñ (Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ð½Ð° точка)
 * задържайки Ctrl по време на премеÑтването на точката = на определÑне на 
разÑтоÑнието до предишната контролна точка
 * LeftClick + drag в/у контролна точка = изменение на позициÑта и
 * RightClick на една от предишните точки на текущата Ð»Ð¸Ð½Ð¸Ñ Ð² режим "вмъкване на точка на линиÑ"
   = избиране на ÑъщеÑтвуваща точка, полезно за редактиране на предишна контролна точка
 * Esc или LeftClick на поÑледната точка = завършване на вмъкване на линиÑ
 * LeftClick на първата точка на Ð»Ð¸Ð½Ð¸Ñ = Ñвързване на началото на линиÑта Ñ ÐºÑ€Ð°Ñ Ð¸ и изход от режима на вмъкване

Редактиране на линии
 * LeftClick + drag = премеÑтване на точка на линиÑ
 * Ctrl+LeftClick + drag = премеÑтване на точка на Ð»Ð¸Ð½Ð¸Ñ Ð±Ð»Ð¸Ð·ÐºÐ¾ до ÑъщеÑтвуваща
 * LeftClick на контролна точка + drag = премеÑтване на контролната точка

ДобавÑне на точки към ÑъщеÑтвуваща линиÑ
 * изберете точка пред коÑто иÑкате да вмъкнете нова точка;
    - преминете в режим вмъкване на точка (панел "ЛиниÑ")
    - вмъкнете точка (виж вмъкване на линиÑ);
    - Esc или LeftClick в/у точката Ñ ÐºÐ¾Ñто започнахте = изход от режим вмъкване

Изтриване на точка на линиÑ
 * изберете точката, коÑто е нужно да Ñе изтрие;
    натиÑнете "Редактирай линиÑ" > "Изтрий точка" на панела "ЛиниÑ"

РазделÑне на линиÑ
 * изберете точка в коÑто иÑкате да разделите линиÑта;
    натиÑнете "Редактирай линиÑ" > "Раздели линиÑ" на панела "ЛиниÑ"

Вмъкване на облаÑÑ‚
 * "Ctrl-a" или на панел "Команди във файл" натиÑнете "ДейÑтвие" > "Вмъкване на облаÑÑ‚"
или "Редактиране" > "Вмъкни" > "ОблаÑÑ‚" от горното меню
   за да превключите в режим "избор на границите на облаÑтта"
 * LeftClick на Ð»Ð¸Ð½Ð¸Ñ = линиÑта Ñе Ð´Ð¾Ð±Ð°Ð²Ñ ÐºÑŠÐ¼ ÑпиÑъка Ñ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ð¸ на облаÑтта
 * Esc за да завършите избора на границите на облаÑтта

Редактиране на облаÑÑ‚
 * Изберете облаÑÑ‚ за редактиране
 * натиÑнете "Вмъкване" на панела "ОблаÑÑ‚" за да вмъкнете гранична линиÑ, коÑто
Ñте маркирали Ñ ÐºÑƒÑ€Ñора
 * натиÑнете "Вмъкнете по ИД" за вмъкване на линиÑта Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€
 * натиÑнете "Изтрий" за да изтриетеизбраната Ð»Ð¸Ð½Ð¸Ñ Ð¾Ñ‚ ÑпиÑъка Ñ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ð¸ на облаÑтта

Избор на ÑъщеÑтвуващ обект
 * LeftClick = избор на най-Ð³Ð¾Ñ€Ð½Ð¸Ñ Ð¾Ð±ÐµÐºÑ‚
 * RightClick = избор на обекти, закрити от горен обект (например е полезно, когато
   нÑколко точки Ñа разположени в една Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ ÐµÐ´Ð½Ð° над друга)
}

therion/xtherion/msgxth.tcl0000644000076400010400000207240511542657020017157 0ustar  userAdministrators# file generated automatically - do not modify!

  ::msgcat::mcset bg "Drag to resize control panel." [encoding convertfrom utf-8 "\320\237\320\273\321\212\320\267\320\275\320\265\321\202\320\265, \320\267\320\260 \320\264\320\260 \320\277\321\200\320\276\320\274\320\265\320\275\320\270\321\202\320\265 \321\200\320\260\320\267\320\274\320\265\321\200\320\260 \320\275\320\260 \320\272\320\276\320\275\321\202\321\200\320\276\320\273\320\275\320\270\321\217 \320\277\320\260\320\275\320\265\320\273"]
  ::msgcat::mcset cz "Drag to resize control panel." [encoding convertfrom utf-8 "Zm\304\233nit \305\241\303\255\305\231ku panelu."]
  ::msgcat::mcset de "Drag to resize control panel." [encoding convertfrom utf-8 "Ziehen um Gr\303\266\303\237e zu \303\244ndern."]
  ::msgcat::mcset el "Drag to resize control panel." [encoding convertfrom utf-8 "Drag \316\263\316\271\316\261 \317\200\317\201\316\277\317\203\316\261\317\201\316\274\316\277\316\263\316\256 \316\274\316\265\316\263\316\255\316\270\316\277\317\205\317\202 \317\200\316\257\316\275\316\261\316\272\316\261 \316\265\316\273\316\255\316\263\317\207\316\277\317\205."]
  ::msgcat::mcset en "Drag to resize control panel." [encoding convertfrom utf-8 "Drag to resize control panel."]
  ::msgcat::mcset es "Drag to resize control panel." [encoding convertfrom utf-8 "Arrastar para cambiar el tama\303\261o del panel de control."]
  ::msgcat::mcset it "Drag to resize control panel." [encoding convertfrom utf-8 "Trascina per ridimensionare il pannello dei controlli"]
  ::msgcat::mcset ru "Drag to resize control panel." [encoding convertfrom utf-8 "\320\237\320\265\321\200\320\265\321\202\320\260\321\201\320\272\320\270\320\262\320\260\320\271\321\202\320\265 \320\264\320\273\321\217 \320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \321\200\320\260\320\267\320\274\320\265\321\200\320\260 \320\277\320\260\320\275\320\265\320\273\320\270"]
  ::msgcat::mcset sk "Drag to resize control panel." [encoding convertfrom utf-8 "Roz\305\241\303\255ri\305\245 alebo z\303\272\305\276i\305\245 okno kontroln\303\275ch panelov."]
  ::msgcat::mcset sq "Drag to resize control panel." [encoding convertfrom utf-8 "levize per te rritur dritaren kontrolluese"]

  ::msgcat::mcset bg "File" [encoding convertfrom utf-8 "\320\244\320\260\320\271\320\273"]
  ::msgcat::mcset cz "File" [encoding convertfrom utf-8 "Soubor"]
  ::msgcat::mcset de "File" [encoding convertfrom utf-8 "Datei"]
  ::msgcat::mcset el "File" [encoding convertfrom utf-8 "\316\221\317\201\317\207\316\265\316\257\316\277"]
  ::msgcat::mcset en "File" [encoding convertfrom utf-8 "File"]
  ::msgcat::mcset es "File" [encoding convertfrom utf-8 "Archivo"]
  ::msgcat::mcset it "File" [encoding convertfrom utf-8 "File"]
  ::msgcat::mcset ru "File" [encoding convertfrom utf-8 "\320\244\320\260\320\271\320\273"]
  ::msgcat::mcset sk "File" [encoding convertfrom utf-8 "S\303\272bor"]
  ::msgcat::mcset sq "File" [encoding convertfrom utf-8 "fajlli"]

  ::msgcat::mcset bg "Maximize" [encoding convertfrom utf-8 "\320\243\320\262\320\265\320\273\320\270\321\207\320\260\320\262\320\260\320\275\320\265"]
  ::msgcat::mcset cz "Maximize" [encoding convertfrom utf-8 "Maximalizovat"]
  ::msgcat::mcset de "Maximize" [encoding convertfrom utf-8 "Maximieren"]
  ::msgcat::mcset el "Maximize" [encoding convertfrom utf-8 "\316\234\316\265\316\263\316\271\317\203\317\204\316\277\317\200\316\277\316\257\316\267\317\203\316\267"]
  ::msgcat::mcset en "Maximize" [encoding convertfrom utf-8 "Maximize"]
  ::msgcat::mcset es "Maximize" [encoding convertfrom utf-8 "Maximizar"]
  ::msgcat::mcset it "Maximize" [encoding convertfrom utf-8 "Massimizza"]
  ::msgcat::mcset ru "Maximize" [encoding convertfrom utf-8 "\320\240\320\260\320\267\320\262\320\265\321\200\320\275\321\203\321\202\321\214"]
  ::msgcat::mcset sk "Maximize" [encoding convertfrom utf-8 "Maximalizova\305\245"]
  ::msgcat::mcset sq "Maximize" [encoding convertfrom utf-8 "rrite ne maksimum"]

  ::msgcat::mcset bg "Normalize" [encoding convertfrom utf-8 "\320\235\320\276\321\200\320\274\320\260\320\273\320\270\320\267\320\270\321\200\320\260\320\275\320\265"]
  ::msgcat::mcset cz "Normalize" [encoding convertfrom utf-8 "Norm\303\241ln\303\255 velikost"]
  ::msgcat::mcset de "Normalize" [encoding convertfrom utf-8 "Normalgr\303\266\303\237e"]
  ::msgcat::mcset el "Normalize" [encoding convertfrom utf-8 "\316\232\316\261\316\275\316\277\316\275\316\271\316\272\317\214 \316\274\316\255\316\263\316\265\316\270\316\277\317\202"]
  ::msgcat::mcset en "Normalize" [encoding convertfrom utf-8 "Normalize"]
  ::msgcat::mcset es "Normalize" [encoding convertfrom utf-8 "Normalizar"]
  ::msgcat::mcset it "Normalize" [encoding convertfrom utf-8 "Normalizza"]
  ::msgcat::mcset ru "Normalize" [encoding convertfrom utf-8 "\320\241\320\262\320\265\321\200\320\275\321\203\321\202\321\214"]
  ::msgcat::mcset sk "Normalize" [encoding convertfrom utf-8 "Norm\303\241lna ve\304\276kos\305\245"]
  ::msgcat::mcset sq "Normalize" [encoding convertfrom utf-8 "normalizo"]

  ::msgcat::mcset bg "Switch panels" [encoding convertfrom utf-8 "\320\237\321\200\320\265\320\262\320\272\320\273\321\216\321\207\320\270 \320\277\320\260\320\275\320\265\320\273\320\260"]
  ::msgcat::mcset cz "Switch panels" [encoding convertfrom utf-8 "P\305\231eho\304\217 panely"]
  ::msgcat::mcset de "Switch panels" [encoding convertfrom utf-8 "Panel verschieben"]
  ::msgcat::mcset el "Switch panels" [encoding convertfrom utf-8 "\316\221\316\273\316\273\316\261\316\263\316\256 \317\200\316\261\317\201\316\254\316\270\317\205\317\201\316\277\317\205"]
  ::msgcat::mcset en "Switch panels" [encoding convertfrom utf-8 "Switch panels"]
  ::msgcat::mcset es "Switch panels" [encoding convertfrom utf-8 "Alternar paneles"]
  ::msgcat::mcset it "Switch panels" [encoding convertfrom utf-8 "Cambia posto al pannello"]
  ::msgcat::mcset ru "Switch panels" [encoding convertfrom utf-8 "\320\237\320\265\321\200\320\265\320\272\320\273\321\216\321\207\320\270\321\202\321\214 \320\277\320\260\320\275\320\265\320\273\320\270"]
  ::msgcat::mcset sk "Switch panels" [encoding convertfrom utf-8 "Preho\304\217 panely"]
  ::msgcat::mcset sq "Switch panels" [encoding convertfrom utf-8 "nderro panelat"]

  ::msgcat::mcset bg "Toggle toolbar" [encoding convertfrom utf-8 "\320\237\321\200\320\265\320\262\320\272\320\273\321\216\321\207\320\270 \320\277\320\260\320\275\320\265\320\273\320\260 \321\201 \320\270\320\275\321\201\321\202\321\200\321\203\320\274\320\265\320\275\321\202\320\270"]
  ::msgcat::mcset cz "Toggle toolbar" [encoding convertfrom utf-8 "Vypnout/zapnout li\305\241tu n\303\241stroj\305\257"]
  ::msgcat::mcset de "Toggle toolbar" [encoding convertfrom utf-8 "Werkzeugleiste anzeigen/verbergen"]
  ::msgcat::mcset el "Toggle toolbar" [encoding convertfrom utf-8 "\316\225\316\274\317\206\316\254\316\275\316\271\317\203\316\267 / \316\274\316\267-\316\265\316\274\317\206\316\254\316\275\316\271\317\203\316\267 \316\263\317\201\316\261\316\274\316\274\316\256\317\202 \316\265\317\201\316\263\316\261\316\273\316\265\316\257\317\211\316\275"]
  ::msgcat::mcset it "Toggle toolbar" [encoding convertfrom utf-8 "Mostra/Nascondi la barra strumenti"]
  ::msgcat::mcset ru "Toggle toolbar" [encoding convertfrom utf-8 "\320\237\320\265\321\200\320\265\320\272\320\273\321\216\321\207\320\270\321\202\321\214 \320\277\320\260\320\275\320\265\320\273\321\214 \320\270\320\275\321\201\321\202\321\200\321\203\320\274\320\265\320\275\321\202\320\276\320\262"]
  ::msgcat::mcset sk "Toggle toolbar" [encoding convertfrom utf-8 "Zapn\303\272\305\245/vypn\303\272\305\245 panel"]
  ::msgcat::mcset sq "Toggle toolbar" [encoding convertfrom utf-8 "dritarja aktivizuese"]

  ::msgcat::mcset bg "KBD encoding" [encoding convertfrom utf-8 "\320\232\320\276\320\264\320\270\321\200\320\276\320\262\320\272\320\260 \320\275\320\260 \320\272\320\273\320\260\320\262\320\270\320\260\321\202\321\203\321\200\320\260\321\202\320\260"]
  ::msgcat::mcset cz "KBD encoding" [encoding convertfrom utf-8 "K\303\263dov\303\241n\303\255 kl\303\241vesnice"]
  ::msgcat::mcset de "KBD encoding" [encoding convertfrom utf-8 "Zeichensatz"]
  ::msgcat::mcset el "KBD encoding" [encoding convertfrom utf-8 "\316\232\317\211\316\264\316\271\316\272\316\277\317\200\316\277\316\257\316\267\317\203\316\267 \317\200\316\273\316\267\316\272\317\204\317\201\316\277\316\273\316\277\316\263\316\257\316\277\317\205"]
  ::msgcat::mcset en "KBD encoding" [encoding convertfrom utf-8 "KBD encoding"]
  ::msgcat::mcset es "KBD encoding" [encoding convertfrom utf-8 "Codificaci\303\263n teclado"]
  ::msgcat::mcset it "KBD encoding" [encoding convertfrom utf-8 "Encoding della tastiera"]
  ::msgcat::mcset ru "KBD encoding" [encoding convertfrom utf-8 "\320\232\320\276\320\264\320\270\321\200\320\276\320\262\320\272\320\260 \320\272\320\273\320\260\320\262\320\270\320\260\321\202\321\203\321\200\321\213"]
  ::msgcat::mcset sk "KBD encoding" [encoding convertfrom utf-8 "K\303\263dovanie kl\303\241vesnice"]
  ::msgcat::mcset sq "KBD encoding" [encoding convertfrom utf-8 "KBD-kodimi"]

  ::msgcat::mcset bg "Window" [encoding convertfrom utf-8 "\320\237\321\200\320\276\320\267\320\276\321\200\320\265\321\206"]
  ::msgcat::mcset cz "Window" [encoding convertfrom utf-8 "Okno"]
  ::msgcat::mcset de "Window" [encoding convertfrom utf-8 "Fenster"]
  ::msgcat::mcset el "Window" [encoding convertfrom utf-8 "\316\240\316\261\317\201\316\254\316\270\317\205\317\201\316\277"]
  ::msgcat::mcset en "Window" [encoding convertfrom utf-8 "Window"]
  ::msgcat::mcset es "Window" [encoding convertfrom utf-8 "Ventana"]
  ::msgcat::mcset it "Window" [encoding convertfrom utf-8 "Finestra"]
  ::msgcat::mcset ru "Window" [encoding convertfrom utf-8 "\320\236\320\272\320\275\320\276"]
  ::msgcat::mcset sk "Window" [encoding convertfrom utf-8 "Okno"]
  ::msgcat::mcset sq "Window" [encoding convertfrom utf-8 "dritarja"]

  ::msgcat::mcset bg "Quit" [encoding convertfrom utf-8 "\320\230\320\267\321\205\320\276\320\264"]
  ::msgcat::mcset cz "Quit" [encoding convertfrom utf-8 "Konec"]
  ::msgcat::mcset de "Quit" [encoding convertfrom utf-8 "Beenden"]
  ::msgcat::mcset el "Quit" [encoding convertfrom utf-8 "\316\210\316\276\316\277\316\264\316\277\317\202"]
  ::msgcat::mcset en "Quit" [encoding convertfrom utf-8 "Quit"]
  ::msgcat::mcset es "Quit" [encoding convertfrom utf-8 "Salir"]
  ::msgcat::mcset it "Quit" [encoding convertfrom utf-8 "Esci"]
  ::msgcat::mcset ru "Quit" [encoding convertfrom utf-8 "\320\222\321\213\321\205\320\276\320\264"]
  ::msgcat::mcset sk "Quit" [encoding convertfrom utf-8 "Ukon\304\215i\305\245"]
  ::msgcat::mcset sq "Quit" [encoding convertfrom utf-8 "mbylle"]

  ::msgcat::mcset bg "Help" [encoding convertfrom utf-8 "\320\237\320\276\320\274\320\276\321\211"]
  ::msgcat::mcset cz "Help" [encoding convertfrom utf-8 "N\303\241pov\304\233da"]
  ::msgcat::mcset de "Help" [encoding convertfrom utf-8 "Hilfe"]
  ::msgcat::mcset el "Help" [encoding convertfrom utf-8 "\316\222\316\277\316\256\316\270\316\265\316\271\316\261"]
  ::msgcat::mcset en "Help" [encoding convertfrom utf-8 "Help"]
  ::msgcat::mcset es "Help" [encoding convertfrom utf-8 "Ayuda"]
  ::msgcat::mcset it "Help" [encoding convertfrom utf-8 "Aiuto"]
  ::msgcat::mcset ru "Help" [encoding convertfrom utf-8 "\320\237\320\276\320\274\320\276\321\211\321\214"]
  ::msgcat::mcset sk "Help" [encoding convertfrom utf-8 "Pomoc"]
  ::msgcat::mcset sq "Help" [encoding convertfrom utf-8 "ndihma"]

  ::msgcat::mcset bg "BAC calculator" [encoding convertfrom utf-8 "\320\220\320\273\320\272\320\276\321\205\320\276\320\273\320\265\320\275 \320\272\320\260\320\273\320\272\321\203\320\273\320\260\321\202\320\276\321\200"]
  ::msgcat::mcset cz "BAC calculator" [encoding convertfrom utf-8 "Alkohol tester"]
  ::msgcat::mcset de "BAC calculator" [encoding convertfrom utf-8 "Blutalkoholrechner"]
  ::msgcat::mcset el "BAC calculator" [encoding convertfrom utf-8 "\316\221\316\273\316\272\316\277\317\204\316\255\317\203\317\204"]
  ::msgcat::mcset en "BAC calculator" [encoding convertfrom utf-8 "BAC calculator"]
  ::msgcat::mcset es "BAC calculator" [encoding convertfrom utf-8 "Borrach\303\255metro"]
  ::msgcat::mcset it "BAC calculator" [encoding convertfrom utf-8 "Calcolatore BAC"]
  ::msgcat::mcset ru "BAC calculator" [encoding convertfrom utf-8 "\320\232\320\260\320\273\321\214\320\272\321\203\320\273\321\217\321\202\320\276\321\200 \320\260\320\273\320\272\320\276\320\263\320\276\320\273\321\217"]
  ::msgcat::mcset sk "BAC calculator" [encoding convertfrom utf-8 "Alkohol tester"]
  ::msgcat::mcset sq "BAC calculator" [encoding convertfrom utf-8 "llogaritesi I alkoolit"]

  ::msgcat::mcset bg "Biometric data" [encoding convertfrom utf-8 "\320\221\320\270\320\276\320\274\320\265\321\202\321\200\320\270\321\207\320\275\320\270 \320\264\320\260\320\275\320\275\320\270"]
  ::msgcat::mcset cz "Biometric data" [encoding convertfrom utf-8 "Biometrick\303\251 \303\272daje"]
  ::msgcat::mcset de "Biometric data" [encoding convertfrom utf-8 "Pers\303\266nliche Angaben"]
  ::msgcat::mcset el "Biometric data" [encoding convertfrom utf-8 "\316\222\316\271\316\277\316\274\316\265\317\204\317\201\316\271\316\272\316\254 \316\264\316\265\316\264\316\277\316\274\316\255\316\275\316\261"]
  ::msgcat::mcset en "Biometric data" [encoding convertfrom utf-8 "Biometric data"]
  ::msgcat::mcset es "Biometric data" [encoding convertfrom utf-8 "Datos biom\303\251tricos"]
  ::msgcat::mcset it "Biometric data" [encoding convertfrom utf-8 "Dati biometrici"]
  ::msgcat::mcset ru "Biometric data" [encoding convertfrom utf-8 "\320\221\320\270\320\276\320\274\320\265\321\202\321\200\320\270\321\207\320\265\321\201\320\272\320\270\320\265 \320\264\320\260\320\275\320\275\321\213\320\265"]
  ::msgcat::mcset sk "Biometric data" [encoding convertfrom utf-8 "Biometrick\303\251 \303\272daje"]
  ::msgcat::mcset sq "Biometric data" [encoding convertfrom utf-8 "shenimet biometrike"]

  ::msgcat::mcset bg "age" [encoding convertfrom utf-8 "\320\222\321\212\320\267\321\200\320\260\321\201\321\202"]
  ::msgcat::mcset cz "age" [encoding convertfrom utf-8 "v\304\233k"]
  ::msgcat::mcset de "age" [encoding convertfrom utf-8 "Alter"]
  ::msgcat::mcset el "age" [encoding convertfrom utf-8 "\316\267\316\273\316\271\316\272\316\257\316\261"]
  ::msgcat::mcset en "age" [encoding convertfrom utf-8 "age"]
  ::msgcat::mcset es "age" [encoding convertfrom utf-8 "edad"]
  ::msgcat::mcset it "age" [encoding convertfrom utf-8 "et\303\240"]
  ::msgcat::mcset ru "age" [encoding convertfrom utf-8 "\320\222\320\276\320\267\321\200\320\260\321\201\321\202"]
  ::msgcat::mcset sk "age" [encoding convertfrom utf-8 "vek"]
  ::msgcat::mcset sq "age" [encoding convertfrom utf-8 "mosha"]

  ::msgcat::mcset bg "years" [encoding convertfrom utf-8 "\320\223\320\276\320\264\320\270\320\275\320\270"]
  ::msgcat::mcset cz "years" [encoding convertfrom utf-8 "let"]
  ::msgcat::mcset de "years" [encoding convertfrom utf-8 "Jahre"]
  ::msgcat::mcset el "years" [encoding convertfrom utf-8 "\316\255\317\204\316\267"]
  ::msgcat::mcset en "years" [encoding convertfrom utf-8 "years"]
  ::msgcat::mcset es "years" [encoding convertfrom utf-8 "a\303\261os"]
  ::msgcat::mcset it "years" [encoding convertfrom utf-8 "anni"]
  ::msgcat::mcset ru "years" [encoding convertfrom utf-8 "\320\273\320\265\321\202"]
  ::msgcat::mcset sk "years" [encoding convertfrom utf-8 "rokov"]
  ::msgcat::mcset sq "years" [encoding convertfrom utf-8 "vitet"]

  ::msgcat::mcset bg "gender" [encoding convertfrom utf-8 "\320\237\320\276\320\273"]
  ::msgcat::mcset cz "gender" [encoding convertfrom utf-8 "pohlav\303\255"]
  ::msgcat::mcset de "gender" [encoding convertfrom utf-8 "Geschlecht"]
  ::msgcat::mcset el "gender" [encoding convertfrom utf-8 "\317\206\317\215\316\273\316\277"]
  ::msgcat::mcset en "gender" [encoding convertfrom utf-8 "gender"]
  ::msgcat::mcset es "gender" [encoding convertfrom utf-8 "sexo"]
  ::msgcat::mcset it "gender" [encoding convertfrom utf-8 "sesso"]
  ::msgcat::mcset ru "gender" [encoding convertfrom utf-8 "\320\237\320\276\320\273"]
  ::msgcat::mcset sk "gender" [encoding convertfrom utf-8 "pohlavie"]
  ::msgcat::mcset sq "gender" [encoding convertfrom utf-8 "gjinia"]

  ::msgcat::mcset bg "male" [encoding convertfrom utf-8 "\320\234\321\212\320\266"]
  ::msgcat::mcset cz "male" [encoding convertfrom utf-8 "mu\305\276"]
  ::msgcat::mcset de "male" [encoding convertfrom utf-8 "m\303\244nnlich"]
  ::msgcat::mcset el "male" [encoding convertfrom utf-8 "\316\261\317\201\317\203\316\265\316\275\316\271\316\272\317\214"]
  ::msgcat::mcset en "male" [encoding convertfrom utf-8 "male"]
  ::msgcat::mcset es "male" [encoding convertfrom utf-8 "hombre"]
  ::msgcat::mcset it "male" [encoding convertfrom utf-8 "maschio"]
  ::msgcat::mcset ru "male" [encoding convertfrom utf-8 "\320\274\321\203\320\266\321\207\320\270\320\275\320\260"]
  ::msgcat::mcset sk "male" [encoding convertfrom utf-8 "mu\305\276"]
  ::msgcat::mcset sq "male" [encoding convertfrom utf-8 "mashkull"]

  ::msgcat::mcset bg "female" [encoding convertfrom utf-8 "\320\226\320\265\320\275\320\260"]
  ::msgcat::mcset cz "female" [encoding convertfrom utf-8 "\305\276ena"]
  ::msgcat::mcset de "female" [encoding convertfrom utf-8 "weiblich"]
  ::msgcat::mcset el "female" [encoding convertfrom utf-8 "\316\270\317\205\316\273\316\271\316\272\317\214"]
  ::msgcat::mcset en "female" [encoding convertfrom utf-8 "female"]
  ::msgcat::mcset es "female" [encoding convertfrom utf-8 "mujer"]
  ::msgcat::mcset it "female" [encoding convertfrom utf-8 "femmina"]
  ::msgcat::mcset ru "female" [encoding convertfrom utf-8 "\320\266\320\265\320\275\321\211\320\270\320\275\320\260"]
  ::msgcat::mcset sk "female" [encoding convertfrom utf-8 "\305\276ena"]
  ::msgcat::mcset sq "female" [encoding convertfrom utf-8 "femer"]

  ::msgcat::mcset bg "height" [encoding convertfrom utf-8 "\320\240\321\212\321\201\321\202"]
  ::msgcat::mcset cz "height" [encoding convertfrom utf-8 "v\303\275\305\241ka"]
  ::msgcat::mcset de "height" [encoding convertfrom utf-8 "Gr\303\266\303\237e"]
  ::msgcat::mcset el "height" [encoding convertfrom utf-8 "\317\215\317\210\316\277\317\202"]
  ::msgcat::mcset en "height" [encoding convertfrom utf-8 "height"]
  ::msgcat::mcset es "height" [encoding convertfrom utf-8 "altura"]
  ::msgcat::mcset it "height" [encoding convertfrom utf-8 "altezza"]
  ::msgcat::mcset ru "height" [encoding convertfrom utf-8 "\320\240\320\276\321\201\321\202"]
  ::msgcat::mcset sk "height" [encoding convertfrom utf-8 "v\303\275\305\241ka"]
  ::msgcat::mcset sq "height" [encoding convertfrom utf-8 "gjatesia"]

  ::msgcat::mcset bg "weight" [encoding convertfrom utf-8 "\320\242\320\265\320\263\320\273\320\276"]
  ::msgcat::mcset cz "weight" [encoding convertfrom utf-8 "v\303\241ha"]
  ::msgcat::mcset de "weight" [encoding convertfrom utf-8 "Gewicht"]
  ::msgcat::mcset el "weight" [encoding convertfrom utf-8 "\316\262\316\254\317\201\316\277\317\202"]
  ::msgcat::mcset en "weight" [encoding convertfrom utf-8 "weight"]
  ::msgcat::mcset es "weight" [encoding convertfrom utf-8 "peso"]
  ::msgcat::mcset it "weight" [encoding convertfrom utf-8 "peso"]
  ::msgcat::mcset ru "weight" [encoding convertfrom utf-8 "\320\222\320\265\321\201"]
  ::msgcat::mcset sk "weight" [encoding convertfrom utf-8 "v\303\241ha"]
  ::msgcat::mcset sq "weight" [encoding convertfrom utf-8 "pesha"]

  ::msgcat::mcset bg "Consumption data" [encoding convertfrom utf-8 "\320\232\320\260\320\272\320\262\320\276 \321\201\321\202\320\265 \320\277\320\270\320\273\320\270"]
  ::msgcat::mcset cz "Consumption data" [encoding convertfrom utf-8 "\303\232daje o spot\305\231eb\304\233"]
  ::msgcat::mcset de "Consumption data" [encoding convertfrom utf-8 "Alkoholkonsum"]
  ::msgcat::mcset el "Consumption data" [encoding convertfrom utf-8 "\316\224\316\265\316\264\316\277\316\274\316\255\316\275\316\261 \316\272\316\261\317\204\316\261\316\275\316\254\316\273\317\211\317\203\316\267\317\202"]
  ::msgcat::mcset en "Consumption data" [encoding convertfrom utf-8 "Consumption data"]
  ::msgcat::mcset es "Consumption data" [encoding convertfrom utf-8 "Datos de ingesti\303\263n"]
  ::msgcat::mcset it "Consumption data" [encoding convertfrom utf-8 "Bevande assunte"]
  ::msgcat::mcset ru "Consumption data" [encoding convertfrom utf-8 "\320\245\320\260\321\200\320\260\320\272\321\202\320\265\321\200\320\270\321\201\321\202\320\270\320\272\320\260 \320\277\321\200\320\270\320\275\321\217\321\202\320\276\320\263\320\276"]
  ::msgcat::mcset sk "Consumption data" [encoding convertfrom utf-8 "\303\232daje o spotrebe"]
  ::msgcat::mcset sq "Consumption data" [encoding convertfrom utf-8 "shenimet e hargjimeve"]

  ::msgcat::mcset bg "volume" [encoding convertfrom utf-8 "\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276"]
  ::msgcat::mcset cz "volume" [encoding convertfrom utf-8 "objem"]
  ::msgcat::mcset de "volume" [encoding convertfrom utf-8 "Menge"]
  ::msgcat::mcset el "volume" [encoding convertfrom utf-8 "\317\214\316\263\316\272\316\277\317\202"]
  ::msgcat::mcset en "volume" [encoding convertfrom utf-8 "volume"]
  ::msgcat::mcset es "volume" [encoding convertfrom utf-8 "volumen"]
  ::msgcat::mcset it "volume" [encoding convertfrom utf-8 "volume"]
  ::msgcat::mcset ru "volume" [encoding convertfrom utf-8 "\320\236\320\261\321\212\320\265\320\274"]
  ::msgcat::mcset sk "volume" [encoding convertfrom utf-8 "objem"]
  ::msgcat::mcset sq "volume" [encoding convertfrom utf-8 "volumi"]

  ::msgcat::mcset bg "alcohol level" [encoding convertfrom utf-8 "\320\232\320\276\320\275\321\206\320\265\320\275\321\202\321\200\320\260\321\206\320\270\321\217"]
  ::msgcat::mcset cz "alcohol level" [encoding convertfrom utf-8 "koncentrace alkoholu"]
  ::msgcat::mcset de "alcohol level" [encoding convertfrom utf-8 "Alkoholgehalt"]
  ::msgcat::mcset el "alcohol level" [encoding convertfrom utf-8 "\317\200\316\265\317\201\316\271\316\265\316\272\317\204\316\271\316\272\317\214\317\204\316\267\317\204\316\261 \317\203\316\265 \316\261\316\273\316\272\316\277\317\214\316\273"]
  ::msgcat::mcset en "alcohol level" [encoding convertfrom utf-8 "alcohol level"]
  ::msgcat::mcset es "alcohol level" [encoding convertfrom utf-8 "contenido alcoh\303\263lico"]
  ::msgcat::mcset it "alcohol level" [encoding convertfrom utf-8 "tasso alcolico"]
  ::msgcat::mcset ru "alcohol level" [encoding convertfrom utf-8 "\320\232\321\200\320\265\320\277\320\276\321\201\321\202\321\214"]
  ::msgcat::mcset sk "alcohol level" [encoding convertfrom utf-8 "koncentr\303\241cia"]
  ::msgcat::mcset sq "alcohol level" [encoding convertfrom utf-8 "sasia e alkoolit"]

  ::msgcat::mcset bg "time elapsed" [encoding convertfrom utf-8 "\320\234\320\270\320\275\320\260\320\273\320\276 \320\262\321\200\320\265\320\274\320\265"]
  ::msgcat::mcset cz "time elapsed" [encoding convertfrom utf-8 "uplynul\303\275 \304\215as"]
  ::msgcat::mcset de "time elapsed" [encoding convertfrom utf-8 "vergangene Zeit"]
  ::msgcat::mcset el "time elapsed" [encoding convertfrom utf-8 "\317\216\317\201\316\261 \317\200\316\277\317\205 \317\200\316\255\317\201\316\261\317\203\316\265"]
  ::msgcat::mcset en "time elapsed" [encoding convertfrom utf-8 "time elapsed"]
  ::msgcat::mcset es "time elapsed" [encoding convertfrom utf-8 "tiempo transcurrido"]
  ::msgcat::mcset it "time elapsed" [encoding convertfrom utf-8 "tempo trascorso"]
  ::msgcat::mcset ru "time elapsed" [encoding convertfrom utf-8 "\320\237\321\200\320\276\321\210\320\273\320\276 \320\262\321\200\320\265\320\274\320\265\320\275\320\270"]
  ::msgcat::mcset sk "time elapsed" [encoding convertfrom utf-8 "uplynut\303\275 \304\215as"]
  ::msgcat::mcset sq "time elapsed" [encoding convertfrom utf-8 "koha e duhur"]

  ::msgcat::mcset bg "Calculate" [encoding convertfrom utf-8 "\320\230\320\267\321\207\320\270\321\201\320\273\320\270"]
  ::msgcat::mcset cz "Calculate" [encoding convertfrom utf-8 "Vypo\304\215\303\255tat"]
  ::msgcat::mcset de "Calculate" [encoding convertfrom utf-8 "Berechne"]
  ::msgcat::mcset el "Calculate" [encoding convertfrom utf-8 "\317\205\317\200\316\277\316\273\316\277\316\263\316\271\317\203\316\274\317\214\317\202"]
  ::msgcat::mcset en "Calculate" [encoding convertfrom utf-8 "Calculate"]
  ::msgcat::mcset es "Calculate" [encoding convertfrom utf-8 "Calcular"]
  ::msgcat::mcset it "Calculate" [encoding convertfrom utf-8 "Calcola"]
  ::msgcat::mcset ru "Calculate" [encoding convertfrom utf-8 "\320\237\320\276\321\201\321\207\320\270\321\202\320\260\321\202\321\214"]
  ::msgcat::mcset sk "Calculate" [encoding convertfrom utf-8 "Vypo\304\215\303\255ta\305\245"]
  ::msgcat::mcset sq "Calculate" [encoding convertfrom utf-8 "llogarit"]

  ::msgcat::mcset bg "BAC" [encoding convertfrom utf-8 "\320\235\320\260\320\273\320\270\321\207\320\270\320\265 \320\275\320\260 \320\260\320\273\320\272\320\276\321\205\320\276\320\273 \320\262 \320\272\321\200\321\212\320\262\321\202\320\260"]
  ::msgcat::mcset cz "BAC" [encoding convertfrom utf-8 "Hladina alkoholu v krvi"]
  ::msgcat::mcset de "BAC" [encoding convertfrom utf-8 "Blutalkoholpegel"]
  ::msgcat::mcset el "BAC" [encoding convertfrom utf-8 "\316\240\316\265\317\201\316\271\316\265\316\272\317\204\316\271\316\272\317\214\317\204\316\267\317\204\316\261 \316\261\316\257\316\274\316\261\317\204\316\277\317\202 \317\203\316\265 \316\261\316\273\316\272\316\277\317\214\316\273"]
  ::msgcat::mcset en "BAC" [encoding convertfrom utf-8 "BAC"]
  ::msgcat::mcset es "BAC" [encoding convertfrom utf-8 "tasa alcoholemia"]
  ::msgcat::mcset it "BAC" [encoding convertfrom utf-8 "BAC"]
  ::msgcat::mcset ru "BAC" [encoding convertfrom utf-8 "BAC"]
  ::msgcat::mcset sk "BAC" [encoding convertfrom utf-8 "Hladina alkoholu"]
  ::msgcat::mcset sq "BAC" [encoding convertfrom utf-8 "perqindja e alkoolit ne gjak-BAC"]

  ::msgcat::mcset bg "ETA" [encoding convertfrom utf-8 "\320\222\321\200\320\265\320\274\320\265 \320\264\320\276 \320\270\320\267\321\202\321\200\320\265\320\267\320\275\321\217\320\262\320\260\320\275\320\265"]
  ::msgcat::mcset cz "ETA" [encoding convertfrom utf-8 "\304\214as do vyst\305\231\303\255zliv\304\233n\303\255"]
  ::msgcat::mcset el "ETA" [encoding convertfrom utf-8 "\316\221\316\275\316\261\316\274\316\265\316\275\317\214\316\274\316\265\316\275\316\267 \317\216\317\201\316\261 \316\254\317\206\316\271\316\276\316\267\317\202"]
  ::msgcat::mcset en "ETA" [encoding convertfrom utf-8 "ETA"]
  ::msgcat::mcset es "ETA" [encoding convertfrom utf-8 "TBE (Tiempo Bajada Estimado)"]
  ::msgcat::mcset it "ETA" [encoding convertfrom utf-8 "ETA"]
  ::msgcat::mcset ru "ETA" [encoding convertfrom utf-8 "ETA"]
  ::msgcat::mcset sk "ETA" [encoding convertfrom utf-8 "\304\214as do vytriezvenia"]
  ::msgcat::mcset sq "ETA" [encoding convertfrom utf-8 "ETA"]

  ::msgcat::mcset bg "hours" [encoding convertfrom utf-8 "\321\207\320\260\321\201\320\276\320\262\320\265"]
  ::msgcat::mcset cz "hours" [encoding convertfrom utf-8 "hodin"]
  ::msgcat::mcset de "hours" [encoding convertfrom utf-8 "Stunden"]
  ::msgcat::mcset el "hours" [encoding convertfrom utf-8 "\317\216\317\201\316\265\317\202"]
  ::msgcat::mcset en "hours" [encoding convertfrom utf-8 "hours"]
  ::msgcat::mcset es "hours" [encoding convertfrom utf-8 "horas"]
  ::msgcat::mcset it "hours" [encoding convertfrom utf-8 "ore"]
  ::msgcat::mcset ru "hours" [encoding convertfrom utf-8 "\321\207\320\260\321\201\320\276\320\262"]
  ::msgcat::mcset sk "hours" [encoding convertfrom utf-8 "hod\303\255n"]
  ::msgcat::mcset sq "hours" [encoding convertfrom utf-8 "oret"]

  ::msgcat::mcset bg "MRR" [encoding convertfrom utf-8 "MRR"]
  ::msgcat::mcset cz "MRR" [encoding convertfrom utf-8 "Rychlost odbour\303\241v\303\241n\303\255"]
  ::msgcat::mcset el "MRR" [encoding convertfrom utf-8 "MRR"]
  ::msgcat::mcset en "MRR" [encoding convertfrom utf-8 "MRR"]
  ::msgcat::mcset es "MRR" [encoding convertfrom utf-8 "tasa de descenso"]
  ::msgcat::mcset it "MRR" [encoding convertfrom utf-8 "MRR"]
  ::msgcat::mcset ru "MRR" [encoding convertfrom utf-8 "MRR"]
  ::msgcat::mcset sk "MRR" [encoding convertfrom utf-8 "R\303\275chlos\305\245 odbur\303\241vania"]
  ::msgcat::mcset sq "MRR" [encoding convertfrom utf-8 "MRR"]

  ::msgcat::mcset bg "Compiler" [encoding convertfrom utf-8 "\320\232\320\276\320\274\320\277\320\270\320\273\320\260\321\202\320\276\321\200"]
  ::msgcat::mcset cz "Compiler" [encoding convertfrom utf-8 "Kompil\303\241tor"]
  ::msgcat::mcset de "Compiler" [encoding convertfrom utf-8 "Compiler"]
  ::msgcat::mcset el "Compiler" [encoding convertfrom utf-8 "\316\243\317\205\316\275\317\204\316\254\316\272\317\204\316\267\317\202"]
  ::msgcat::mcset en "Compiler" [encoding convertfrom utf-8 "Compiler"]
  ::msgcat::mcset es "Compiler" [encoding convertfrom utf-8 "Compilador"]
  ::msgcat::mcset it "Compiler" [encoding convertfrom utf-8 "Compilatore"]
  ::msgcat::mcset ru "Compiler" [encoding convertfrom utf-8 "\320\232\320\276\320\274\320\277\320\270\320\273\321\217\321\202\320\276\321\200"]
  ::msgcat::mcset sk "Compiler" [encoding convertfrom utf-8 "Kompil\303\241tor"]
  ::msgcat::mcset sq "Compiler" [encoding convertfrom utf-8 "kompilatori"]

  ::msgcat::mcset bg "Settings" [encoding convertfrom utf-8 "\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270"]
  ::msgcat::mcset cz "Settings" [encoding convertfrom utf-8 "Nastaven\303\255"]
  ::msgcat::mcset de "Settings" [encoding convertfrom utf-8 "Einstellungen"]
  ::msgcat::mcset el "Settings" [encoding convertfrom utf-8 "\316\241\317\205\316\270\316\274\316\257\317\203\316\265\316\271\317\202"]
  ::msgcat::mcset en "Settings" [encoding convertfrom utf-8 "Settings"]
  ::msgcat::mcset es "Settings" [encoding convertfrom utf-8 "Ajustes"]
  ::msgcat::mcset it "Settings" [encoding convertfrom utf-8 "Impostazioni"]
  ::msgcat::mcset ru "Settings" [encoding convertfrom utf-8 "\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270"]
  ::msgcat::mcset sk "Settings" [encoding convertfrom utf-8 "Nastavenia"]
  ::msgcat::mcset sq "Settings" [encoding convertfrom utf-8 "setingu"]

  ::msgcat::mcset bg "Survey structure" [encoding convertfrom utf-8 "\320\241\321\202\321\200\321\203\320\272\321\202\321\203\321\200\320\260 \320\275\320\260 \320\272\320\260\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\321\202\320\260"]
  ::msgcat::mcset cz "Survey structure" [encoding convertfrom utf-8 "Struktura m\304\233\305\231en\303\255 (survey)"]
  ::msgcat::mcset de "Survey structure" [encoding convertfrom utf-8 "Messdatenstruktur"]
  ::msgcat::mcset el "Survey structure" [encoding convertfrom utf-8 "\316\224\316\277\316\274\316\256 \317\207\316\261\317\201\317\204\316\277\316\263\317\201\316\254\317\206\316\267\317\203\316\267\317\202"]
  ::msgcat::mcset en "Survey structure" [encoding convertfrom utf-8 "Survey structure"]
  ::msgcat::mcset es "Survey structure" [encoding convertfrom utf-8 "Estructura de la poligonal"]
  ::msgcat::mcset it "Survey structure" [encoding convertfrom utf-8 "Struttura rilievi"]
  ::msgcat::mcset ru "Survey structure" [encoding convertfrom utf-8 "\320\241\321\202\321\200\321\203\320\272\321\202\321\203\321\200\320\260 \321\201\321\212\320\265\320\274\320\272\320\270"]
  ::msgcat::mcset sk "Survey structure" [encoding convertfrom utf-8 "\305\240trukt\303\272ra d\303\241t"]
  ::msgcat::mcset sq "Survey structure" [encoding convertfrom utf-8 "struktura e matjeve"]

  ::msgcat::mcset bg "Survey info" [encoding convertfrom utf-8 "\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\321\217"]
  ::msgcat::mcset cz "Survey info" [encoding convertfrom utf-8 "Info o m\304\233\305\231en\303\255 (survey)"]
  ::msgcat::mcset de "Survey info" [encoding convertfrom utf-8 "Infos zur Vermessung"]
  ::msgcat::mcset el "Survey info" [encoding convertfrom utf-8 "\316\240\316\273\316\267\317\201\316\277\317\206\316\277\317\201\316\257\316\265\317\202 \317\207\316\261\317\201\317\204\316\277\316\263\317\201\316\254\317\206\316\267\317\203\316\267\317\202"]
  ::msgcat::mcset en "Survey info" [encoding convertfrom utf-8 "Survey info"]
  ::msgcat::mcset es "Survey info" [encoding convertfrom utf-8 "Informaci\303\263n de la poligonal"]
  ::msgcat::mcset it "Survey info" [encoding convertfrom utf-8 "Informazioni rilievi"]
  ::msgcat::mcset ru "Survey info" [encoding convertfrom utf-8 "\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\321\217"]
  ::msgcat::mcset sk "Survey info" [encoding convertfrom utf-8 "Inform\303\241cie"]
  ::msgcat::mcset sq "Survey info" [encoding convertfrom utf-8 "informatat e matjeve"]

  ::msgcat::mcset bg "Map structure" [encoding convertfrom utf-8 "\320\241\321\202\321\200\321\203\320\272\321\202\321\203\321\200\320\260 \320\275\320\260 \320\272\320\260\321\200\321\202\320\260\321\202\320\260"]
  ::msgcat::mcset cz "Map structure" [encoding convertfrom utf-8 "Mapov\303\241 struktura"]
  ::msgcat::mcset de "Map structure" [encoding convertfrom utf-8 "Planstruktur"]
  ::msgcat::mcset el "Map structure" [encoding convertfrom utf-8 "\316\224\316\277\316\274\316\256 \316\261\317\200\316\277\317\204\317\215\317\200\317\211\317\203\316\267\317\202"]
  ::msgcat::mcset en "Map structure" [encoding convertfrom utf-8 "Map structure"]
  ::msgcat::mcset es "Map structure" [encoding convertfrom utf-8 "Estructura del mapa"]
  ::msgcat::mcset it "Map structure" [encoding convertfrom utf-8 "Struttura mappe"]
  ::msgcat::mcset ru "Map structure" [encoding convertfrom utf-8 "\320\241\321\202\321\200\321\203\320\272\321\202\321\203\321\200\320\260 \320\272\320\260\321\200\321\202\321\213"]
  ::msgcat::mcset sk "Map structure" [encoding convertfrom utf-8 "Mapov\303\241 \305\241trukt\303\272ra"]
  ::msgcat::mcset sq "Map structure" [encoding convertfrom utf-8 "struktura e hartes"]

  ::msgcat::mcset bg "Preview" [encoding convertfrom utf-8 "\320\237\321\200\320\265\320\264\320\262\320\260\321\200\320\270\321\202\320\265\320\273\320\265\320\275 \320\270\320\267\320\263\320\273\320\265\320\264"]
  ::msgcat::mcset cz "Preview" [encoding convertfrom utf-8 "N\303\241hled"]
  ::msgcat::mcset de "Preview" [encoding convertfrom utf-8 "Vorschau"]
  ::msgcat::mcset el "Preview" [encoding convertfrom utf-8 "\316\240\317\201\316\277\316\265\317\200\316\271\317\203\316\272\317\214\317\200\316\267\317\203\316\267"]
  ::msgcat::mcset it "Preview" [encoding convertfrom utf-8 "Anteprima"]
  ::msgcat::mcset ru "Preview" [encoding convertfrom utf-8 "\320\237\321\200\320\265\320\264\320\277\321\200\320\276\321\201\320\274\320\276\321\202\321\200"]
  ::msgcat::mcset sk "Preview" [encoding convertfrom utf-8 "N\303\241h\304\276ad"]
  ::msgcat::mcset sq "Preview" [encoding convertfrom utf-8 "parashiqimi"]

  ::msgcat::mcset bg "Working directory" [encoding convertfrom utf-8 "\320\240\320\260\320\261\320\276\321\202\320\275\320\260 \320\264\320\270\321\200\320\265\320\272\321\202\320\276\321\200\320\270\321\217"]
  ::msgcat::mcset cz "Working directory" [encoding convertfrom utf-8 "Pracovn\303\255 adres\303\241\305\231"]
  ::msgcat::mcset de "Working directory" [encoding convertfrom utf-8 "Arbeitsverzeichnis"]
  ::msgcat::mcset el "Working directory" [encoding convertfrom utf-8 "\316\246\316\254\316\272\316\265\316\273\316\277\317\202 \316\265\317\201\316\263\316\261\317\203\316\257\316\261\317\202"]
  ::msgcat::mcset en "Working directory" [encoding convertfrom utf-8 "Working directory"]
  ::msgcat::mcset es "Working directory" [encoding convertfrom utf-8 "Directorio actual"]
  ::msgcat::mcset it "Working directory" [encoding convertfrom utf-8 "Cartella di lavoro"]
  ::msgcat::mcset ru "Working directory" [encoding convertfrom utf-8 "\320\240\320\260\320\261\320\276\321\207\320\270\320\271 \320\272\320\260\321\202\320\260\320\273\320\276\320\263"]
  ::msgcat::mcset sk "Working directory" [encoding convertfrom utf-8 "Pracovn\303\275 adres\303\241r"]
  ::msgcat::mcset sq "Working directory" [encoding convertfrom utf-8 "direktorati i punes"]

  ::msgcat::mcset bg "Working directory path." [encoding convertfrom utf-8 "\320\237\321\212\321\202 \320\272\321\212\320\274 \321\200\320\260\320\261\320\276\321\202\320\275\320\260\321\202\320\260 \320\264\320\270\321\200\320\265\320\272\321\202\320\276\321\200\320\270\321\217"]
  ::msgcat::mcset cz "Working directory path." [encoding convertfrom utf-8 "Cesta k pracovn\303\255mu adres\303\241\305\231i."]
  ::msgcat::mcset de "Working directory path." [encoding convertfrom utf-8 "Pfad zum Arbeitsverzeichnis."]
  ::msgcat::mcset el "Working directory path." [encoding convertfrom utf-8 "\316\246\316\254\316\272\316\265\316\273\316\277\317\202 \316\265\317\201\316\263\316\261\317\203\316\257\316\261\317\202"]
  ::msgcat::mcset en "Working directory path." [encoding convertfrom utf-8 "Shows working directory path."]
  ::msgcat::mcset es "Working directory path." [encoding convertfrom utf-8 "Muestra el directorio actual."]
  ::msgcat::mcset it "Working directory path." [encoding convertfrom utf-8 "Path della cartella di lavoro"]
  ::msgcat::mcset ru "Working directory path." [encoding convertfrom utf-8 "\320\237\321\203\321\202\321\214 \320\272 \321\200\320\260\320\261\320\276\321\207\320\265\320\274\321\203 \320\272\320\260\321\202\320\260\320\273\320\276\320\263\321\203."]
  ::msgcat::mcset sk "Working directory path." [encoding convertfrom utf-8 "Cesta k pracovn\303\251mu adres\303\241ru."]
  ::msgcat::mcset sq "Working directory path." [encoding convertfrom utf-8 "tregon shtegun e direktoratit punues"]

  ::msgcat::mcset bg "Configuration file" [encoding convertfrom utf-8 "\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\276\320\275\320\265\320\275 \321\204\320\260\320\271\320\273"]
  ::msgcat::mcset cz "Configuration file" [encoding convertfrom utf-8 "Konfigura\304\215n\303\255 soubor"]
  ::msgcat::mcset de "Configuration file" [encoding convertfrom utf-8 "Konfigurationsdatei"]
  ::msgcat::mcset el "Configuration file" [encoding convertfrom utf-8 "\316\221\317\201\317\207\316\265\316\257\316\277 \317\203\317\207\316\267\316\274\316\261\317\204\316\271\317\203\316\274\316\277\317\215 (config)"]
  ::msgcat::mcset en "Configuration file" [encoding convertfrom utf-8 "Configuration file"]
  ::msgcat::mcset es "Configuration file" [encoding convertfrom utf-8 "Archivo configuraci\303\263n"]
  ::msgcat::mcset it "Configuration file" [encoding convertfrom utf-8 "File di configurazione"]
  ::msgcat::mcset ru "Configuration file" [encoding convertfrom utf-8 "\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\276\320\275\320\275\321\213\320\271 \321\204\320\260\320\271\320\273"]
  ::msgcat::mcset sk "Configuration file" [encoding convertfrom utf-8 "Konfigura\304\215n\303\275 s\303\272bor"]
  ::msgcat::mcset sq "Configuration file" [encoding convertfrom utf-8 "arkivi I konfiguracionit"]

  ::msgcat::mcset bg "Configuration file name." [encoding convertfrom utf-8 "\320\230\320\274\320\265 \320\275\320\260 \320\272\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\276\320\275\320\275\320\270\321\217\321\202 \321\204\320\260\320\271\320\273"]
  ::msgcat::mcset cz "Configuration file name." [encoding convertfrom utf-8 "Jm\303\251no konfigura\304\215n\303\255ho souboru."]
  ::msgcat::mcset de "Configuration file name." [encoding convertfrom utf-8 "Name der Konfigurationsdatei."]
  ::msgcat::mcset el "Configuration file name." [encoding convertfrom utf-8 "\316\225\316\274\317\206\316\261\316\275\316\257\316\266\316\265\316\271 \317\204\316\277 \317\214\316\275\316\277\316\274\316\261 \317\204\316\277\317\205 \316\261\317\201\317\207\316\265\316\257\316\277\317\205 \317\203\317\207\316\267\316\274\316\261\317\204\316\271\317\203\316\274\316\277\317\215 (config)"]
  ::msgcat::mcset en "Configuration file name." [encoding convertfrom utf-8 "Shows configuration file name."]
  ::msgcat::mcset es "Configuration file name." [encoding convertfrom utf-8 "Muestra el nombre del archivo de configuraci\303\263n."]
  ::msgcat::mcset it "Configuration file name." [encoding convertfrom utf-8 "Nome del file di configurazione"]
  ::msgcat::mcset ru "Configuration file name." [encoding convertfrom utf-8 "\320\230\320\274\321\217 \320\272\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\276\320\275\320\275\320\276\320\263\320\276 \321\204\320\260\320\271\320\273\320\260."]
  ::msgcat::mcset sk "Configuration file name." [encoding convertfrom utf-8 "Meno konfigura\304\215n\303\251ho s\303\272boru."]
  ::msgcat::mcset sq "Configuration file name." [encoding convertfrom utf-8 "tregon emrin e arkivit te konfiguracionit"]

  ::msgcat::mcset bg "Command line options" [encoding convertfrom utf-8 "\320\236\320\277\321\206\320\270\320\270 \320\275\320\260 \320\272\320\276\320\274\320\260\320\275\320\264\320\275\320\270\321\217\321\202 \321\200\320\265\320\264"]
  ::msgcat::mcset cz "Command line options" [encoding convertfrom utf-8 "Argumenty programu"]
  ::msgcat::mcset de "Command line options" [encoding convertfrom utf-8 "Kommandozeilenoptionen"]
  ::msgcat::mcset el "Command line options" [encoding convertfrom utf-8 "\316\225\317\200\316\271\316\273\316\277\316\263\316\255\317\202 \316\263\317\201\316\261\316\274\316\274\316\256\317\202 \316\265\316\275\317\204\316\277\316\273\316\256\317\202"]
  ::msgcat::mcset en "Command line options" [encoding convertfrom utf-8 "Command line options"]
  ::msgcat::mcset es "Command line options" [encoding convertfrom utf-8 "Opciones de l\303\255nea de comandos"]
  ::msgcat::mcset it "Command line options" [encoding convertfrom utf-8 "Opzioni del comando"]
  ::msgcat::mcset ru "Command line options" [encoding convertfrom utf-8 "\320\236\320\277\321\206\320\270\320\270 \320\272\320\276\320\274\320\260\320\275\320\264\320\275\320\276\320\271 \321\201\321\202\321\200\320\276\320\272\320\270"]
  ::msgcat::mcset sk "Command line options" [encoding convertfrom utf-8 "Argumenty programu"]
  ::msgcat::mcset sq "Command line options" [encoding convertfrom utf-8 "opcionet e vijes komanduese"]

  ::msgcat::mcset bg "Therion command line options." [encoding convertfrom utf-8 "\320\236\320\277\321\206\320\270\320\270 \320\275\320\260 \320\272\320\276\320\274\320\260\320\275\320\264\320\275\320\270\321\217\321\202 \321\200\320\265\320\264 \320\275\320\260 \320\242\320\265\321\200\320\270\320\276\320\275"]
  ::msgcat::mcset cz "Therion command line options." [encoding convertfrom utf-8 "Argumenty therionu pro p\305\231\303\255kazovou \305\231\303\241dku."]
  ::msgcat::mcset de "Therion command line options." [encoding convertfrom utf-8 "Therion Kommandozeilenoptionen."]
  ::msgcat::mcset el "Therion command line options." [encoding convertfrom utf-8 "\316\225\316\264\317\216 \316\274\317\200\316\277\317\201\316\265\316\257\317\204\316\265 \316\275\316\261 \317\200\316\265\317\201\316\254\317\203\316\265\317\204\316\265 \317\204\316\271\317\202 \316\265\317\200\316\271\316\273\316\277\316\263\316\255\317\202 \316\263\317\201\316\261\316\274\316\274\316\256\317\202 \316\265\316\275\317\204\316\277\316\273\316\256\317\202 \317\203\317\204\316\277 Therion"]
  ::msgcat::mcset en "Therion command line options." [encoding convertfrom utf-8 "Here you can pass command line options to Therion."]
  ::msgcat::mcset es "Therion command line options." [encoding convertfrom utf-8 "Aqu\303\255 se pueden pasar a therion opciones de l\303\255nea de comandos"]
  ::msgcat::mcset it "Therion command line options." [encoding convertfrom utf-8 "Opzioni del comando therion"]
  ::msgcat::mcset ru "Therion command line options." [encoding convertfrom utf-8 "\320\236\320\277\321\206\320\270\320\270 \320\272\320\276\320\274\320\260\320\275\320\264\320\275\320\276\320\271 \321\201\321\202\321\200\320\276\320\272\320\270 Therion."]
  ::msgcat::mcset sk "Therion command line options." [encoding convertfrom utf-8 "Argumenty programu v pr\303\255kazovom riadku."]
  ::msgcat::mcset sq "Therion command line options." [encoding convertfrom utf-8 "ketu ju mund te bartni vijen komanduese te arkivit tek Therion-i"]

  ::msgcat::mcset bg "Run therion." [encoding convertfrom utf-8 "\320\237\321\203\321\201\320\272\320\260\320\275\320\265 \320\275\320\260 therion"]
  ::msgcat::mcset cz "Run therion." [encoding convertfrom utf-8 "Spust\303\255 therion."]
  ::msgcat::mcset de "Run therion." [encoding convertfrom utf-8 "Therion ausf\303\274hren."]
  ::msgcat::mcset el "Run therion." [encoding convertfrom utf-8 "\316\225\316\272\317\204\316\255\316\273\316\265\317\203\316\267 \317\204\316\277\317\205 Therion"]
  ::msgcat::mcset en "Run therion." [encoding convertfrom utf-8 "Run therion."]
  ::msgcat::mcset es "Run therion." [encoding convertfrom utf-8 "Ejecutar therion."]
  ::msgcat::mcset it "Run therion." [encoding convertfrom utf-8 "Esegui therion"]
  ::msgcat::mcset ru "Run therion." [encoding convertfrom utf-8 "\320\227\320\260\320\277\321\203\321\201\320\272 therion."]
  ::msgcat::mcset sk "Run therion." [encoding convertfrom utf-8 "Spusti\305\245 therion."]
  ::msgcat::mcset sq "Run therion." [encoding convertfrom utf-8 "aktivizo Therion-in"]

  ::msgcat::mcset bg "Xpdf" [encoding convertfrom utf-8 "Xpdf"]
  ::msgcat::mcset cz "Xpdf" [encoding convertfrom utf-8 "Xpdf"]
  ::msgcat::mcset de "Xpdf" [encoding convertfrom utf-8 "Xpdf"]
  ::msgcat::mcset it "Xpdf" [encoding convertfrom utf-8 "Xpdf"]
  ::msgcat::mcset sk "Xpdf" [encoding convertfrom utf-8 "Xpdf"]
  ::msgcat::mcset sq "Xpdf" [encoding convertfrom utf-8 "Xpdf"]

  ::msgcat::mcset bg "Acrobat Reader" [encoding convertfrom utf-8 "Acrobat Reader"]
  ::msgcat::mcset cz "Acrobat Reader" [encoding convertfrom utf-8 "Acrobat Reader"]
  ::msgcat::mcset de "Acrobat Reader" [encoding convertfrom utf-8 "Acrobat Reader"]
  ::msgcat::mcset it "Acrobat Reader" [encoding convertfrom utf-8 "Acrobat Reader"]
  ::msgcat::mcset sk "Acrobat Reader" [encoding convertfrom utf-8 "Acrobat Reader"]
  ::msgcat::mcset sq "Acrobat Reader" [encoding convertfrom utf-8 "lexuesi I programit-Akrobat"]

  ::msgcat::mcset bg "PDF file path." [encoding convertfrom utf-8 "\320\237\321\212\321\202 \320\272\321\212\320\274 PDF \321\204\320\260\320\271\320\273"]
  ::msgcat::mcset cz "PDF file path." [encoding convertfrom utf-8 "Cesta k PDF souboru"]
  ::msgcat::mcset de "PDF file path." [encoding convertfrom utf-8 "Pfad zur PDF-Datei."]
  ::msgcat::mcset el "PDF file path." [encoding convertfrom utf-8 "\317\205\317\200\316\277\317\206\316\254\316\272\316\265\316\273\316\277\317\202 \317\204\316\277\317\205 .pdf"]
  ::msgcat::mcset it "PDF file path." [encoding convertfrom utf-8 "File PDF"]
  ::msgcat::mcset ru "PDF file path." [encoding convertfrom utf-8 "PDF-\321\204\320\260\320\271\320\273 \320\264\320\273\321\217 \320\277\321\200\320\276\321\201\320\274\320\276\321\202\321\200\320\260"]
  ::msgcat::mcset sk "PDF file path." [encoding convertfrom utf-8 "Cesta k PDF s\303\272boru."]
  ::msgcat::mcset sq "PDF file path." [encoding convertfrom utf-8 "arkivi-PDF"]

  ::msgcat::mcset bg "Survey informations." [encoding convertfrom utf-8 "\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\321\217 \320\267\320\260 \320\272\320\260\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\321\202\320\260"]
  ::msgcat::mcset cz "Survey informations." [encoding convertfrom utf-8 "Informace o jednotliv\303\275ch m\304\233\305\231en\303\255ch (survey)."]
  ::msgcat::mcset de "Survey informations." [encoding convertfrom utf-8 "Infos zur Vermessung."]
  ::msgcat::mcset el "Survey informations." [encoding convertfrom utf-8 "\316\243\317\204\316\277\316\271\317\207\316\265\316\257\316\261 \317\207\316\261\317\201\317\204\316\277\316\263\317\201\316\254\317\206\316\267\317\203\316\267\317\202"]
  ::msgcat::mcset en "Survey informations." [encoding convertfrom utf-8 "Survey informations."]
  ::msgcat::mcset es "Survey informations." [encoding convertfrom utf-8 "Estad\303\255sticas de la poligonal."]
  ::msgcat::mcset it "Survey informations." [encoding convertfrom utf-8 "Informazioni del rilievo"]
  ::msgcat::mcset ru "Survey informations." [encoding convertfrom utf-8 "\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\321\217 \320\276 \321\201\321\212\320\265\320\274\320\272\320\265."]
  ::msgcat::mcset sk "Survey informations." [encoding convertfrom utf-8 "Inform\303\241cie o \304\215astiach."]
  ::msgcat::mcset sq "Survey informations." [encoding convertfrom utf-8 "informatat e matjeve"]

  ::msgcat::mcset bg "User interface is not active. To activate it, open existing file or create new one." [encoding convertfrom utf-8 "\320\237\320\276\321\202\321\200\320\265\320\261\320\270\321\202\320\265\320\273\321\201\320\272\320\270\321\217\321\202 \320\270\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201 \320\265 \320\275\320\265\320\260\320\272\321\202\320\270\320\262\320\265\320\275. \320\227\320\260 \320\264\320\260 \320\263\320\276 \320\260\320\272\321\202\320\270\320\262\320\270\321\200\320\260\321\202\320\265 \320\276\321\202\320\262\320\276\321\200\320\265\321\202\320\265 \321\201\321\212\321\211\320\265\321\201\321\202\320\262\321\203\320\262\320\260\321\211 \321\204\320\260\320\271\320\273 \320\270\320\273\320\270 \321\201\321\212\320\267\320\264\320\260\320\271\321\202\320\265 \320\275\320\276\320\262."]
  ::msgcat::mcset cz "User interface is not active. To activate it, open existing file or create new one." [encoding convertfrom utf-8 "U\305\276ivatelsk\303\251 rozhran\303\255 nen\303\255 aktivn\303\255. Pro jeho aktivaci otev\305\231ete existuj\303\255c\303\255 soubor nebo vytvo\305\231te nov\303\275."]
  ::msgcat::mcset de "User interface is not active. To activate it, open existing file or create new one." [encoding convertfrom utf-8 "Fenster nicht aktiv. Um es zu benutzen, \303\266ffne eine existierende Datei oder lege eine neue an."]
  ::msgcat::mcset el "User interface is not active. To activate it, open existing file or create new one." [encoding convertfrom utf-8 "\316\224\316\271\316\261\317\203\317\215\316\275\316\264\316\265\317\203\316\267 \317\207\317\201\316\256\317\203\317\204\316\267 \316\261\316\275\316\265\316\275\316\265\317\201\316\263\316\256. \316\223\316\271\316\261 \316\275\316\261 \316\265\316\275\316\265\317\201\316\263\316\277\317\200\316\277\316\271\316\267\316\270\316\265\316\257, \316\261\316\275\316\277\316\257\316\276\317\204\316\265 \317\205\317\200\316\254\317\201\317\207\316\277\316\275 \316\261\317\201\317\207\316\265\316\257\316\277 \316\256 \316\264\316\267\316\274\316\271\316\277\317\205\317\201\316\263\316\256\317\203\317\204\316\265 \316\275\316\255\316\277."]
  ::msgcat::mcset en "User interface is not active. To activate it, open existing file or create new one." [encoding convertfrom utf-8 "User interface is not active. To activate it, open existing file or create new one."]
  ::msgcat::mcset es "User interface is not active. To activate it, open existing file or create new one." [encoding convertfrom utf-8 "El interfaz est\303\241 inactivo. Para activarlo, abre un archivo existente o crea uno nuevo."]
  ::msgcat::mcset it "User interface is not active. To activate it, open existing file or create new one." [encoding convertfrom utf-8 "L'interfaccia utente non \303\250 attiva. Per attivarla apri un file o creane uno"]
  ::msgcat::mcset ru "User interface is not active. To activate it, open existing file or create new one." [encoding convertfrom utf-8 "\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201 \320\275\320\265\320\260\320\272\321\202\320\270\320\262\320\265\320\275. \320\224\320\273\321\217 \320\260\320\272\321\202\320\270\320\262\320\260\321\206\320\270\320\270 \320\276\321\202\320\272\321\200\320\276\320\271\321\202\320\265 \321\201\321\203\321\211\320\265\321\201\321\202\320\262\321\203\321\216\321\211\320\270\320\271 \321\204\320\260\320\271\320\273 \320\270\320\273\320\270 \321\201\320\276\320\267\320\264\320\260\320\271\321\202\320\265 \320\275\320\276\320\262\321\213\320\271."]
  ::msgcat::mcset sk "User interface is not active. To activate it, open existing file or create new one." [encoding convertfrom utf-8 "XTherion moment\303\241lne nie je akt\303\255vny. Otvorte existuj\303\272ci konfigura\304\215n\303\275 s\303\272bor alebo vytvorte nov\303\275."]
  ::msgcat::mcset sq "User interface is not active. To activate it, open existing file or create new one." [encoding convertfrom utf-8 "interfejsi I perdoruesit nuk eshte aktiv. Ta aktivizosh, hape arkivin egzistues apo hape nje te ri."]

  ::msgcat::mcset bg "loading compiler..." [encoding convertfrom utf-8 "\320\227\320\260\321\200\320\265\320\266\320\264\320\260\320\275\320\265 \320\275\320\260 \320\272\320\276\320\274\320\277\320\270\320\273\320\260\321\202\320\276\321\200\320\260..."]
  ::msgcat::mcset cz "loading compiler..." [encoding convertfrom utf-8 "nahr\303\241v\303\241m kompil\303\241tor..."]
  ::msgcat::mcset de "loading compiler..." [encoding convertfrom utf-8 "Lade Compiler..."]
  ::msgcat::mcset el "loading compiler..." [encoding convertfrom utf-8 "\317\206\317\214\317\201\317\204\316\271\317\203\316\267 \317\203\317\205\316\275\317\204\316\254\316\272\317\204\316\267..."]
  ::msgcat::mcset en "loading compiler..." [encoding convertfrom utf-8 "loading compiler..."]
  ::msgcat::mcset es "loading compiler..." [encoding convertfrom utf-8 "compilador..."]
  ::msgcat::mcset it "loading compiler..." [encoding convertfrom utf-8 "compilatore ..."]
  ::msgcat::mcset ru "loading compiler..." [encoding convertfrom utf-8 "\320\267\320\260\320\263\321\200\321\203\320\267\320\272\320\260 \320\272\320\276\320\274\320\277\320\270\320\273\321\217\321\202\320\276\321\200\320\260..."]
  ::msgcat::mcset sk "loading compiler..." [encoding convertfrom utf-8 "kompil\303\241tor..."]
  ::msgcat::mcset sq "loading compiler..." [encoding convertfrom utf-8 "duke lexuar kompiluesin\342\200\246"]

  ::msgcat::mcset bg "Running therion ..." [encoding convertfrom utf-8 "\320\241\321\202\320\260\321\200\321\202\320\270\321\200\320\260\320\275\320\265 \320\275\320\260 therion ..."]
  ::msgcat::mcset cz "Running therion ..." [encoding convertfrom utf-8 "Prob\303\255h\303\241 kompilace ..."]
  ::msgcat::mcset de "Running therion ..." [encoding convertfrom utf-8 "Therion ausf\303\274hren ..."]
  ::msgcat::mcset el "Running therion ..." [encoding convertfrom utf-8 "\316\225\316\272\317\204\316\265\316\273\316\265\316\257\317\204\316\261\316\271 \317\204\316\277 Therion"]
  ::msgcat::mcset en "Running therion ..." [encoding convertfrom utf-8 "Running therion ..."]
  ::msgcat::mcset es "Running therion ..." [encoding convertfrom utf-8 "Ejecutando therion ..."]
  ::msgcat::mcset it "Running therion ..." [encoding convertfrom utf-8 "esecuzione therion ..."]
  ::msgcat::mcset ru "Running therion ..." [encoding convertfrom utf-8 "\320\227\320\260\320\277\321\203\321\201\320\272 therion ..."]
  ::msgcat::mcset sk "Running therion ..." [encoding convertfrom utf-8 "Prebieha v\303\275po\304\215et..."]
  ::msgcat::mcset sq "Running therion ..." [encoding convertfrom utf-8 "duke ve ne pune therion-in\342\200\246"]

  ::msgcat::mcset bg "RUNNING" [encoding convertfrom utf-8 "\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260"]
  ::msgcat::mcset cz "RUNNING" [encoding convertfrom utf-8 "PRACUJI"]
  ::msgcat::mcset de "RUNNING" [encoding convertfrom utf-8 "ARBEITE"]
  ::msgcat::mcset el "RUNNING" [encoding convertfrom utf-8 "\316\225\316\232\316\244\316\225\316\233\316\225\316\243\316\227"]
  ::msgcat::mcset en "RUNNING" [encoding convertfrom utf-8 "RUNNING"]
  ::msgcat::mcset es "RUNNING" [encoding convertfrom utf-8 "EJECUTANDO"]
  ::msgcat::mcset it "RUNNING" [encoding convertfrom utf-8 "ESECUZIONE"]
  ::msgcat::mcset ru "RUNNING" [encoding convertfrom utf-8 "\320\236\320\221\320\240\320\220\320\221\320\236\320\242\320\232\320\220"]
  ::msgcat::mcset sk "RUNNING" [encoding convertfrom utf-8 "V\303\235PO\304\214ET"]
  ::msgcat::mcset sq "RUNNING" [encoding convertfrom utf-8 "ne punim e siper"]

  ::msgcat::mcset bg "ERROR" [encoding convertfrom utf-8 "\320\223\321\200\320\265\321\210\320\272\320\260"]
  ::msgcat::mcset cz "ERROR" [encoding convertfrom utf-8 "CHYBA"]
  ::msgcat::mcset de "ERROR" [encoding convertfrom utf-8 "FEHLER"]
  ::msgcat::mcset el "ERROR" [encoding convertfrom utf-8 "\316\243\316\246\316\221\316\233\316\234\316\221"]
  ::msgcat::mcset en "ERROR" [encoding convertfrom utf-8 "ERROR"]
  ::msgcat::mcset es "ERROR" [encoding convertfrom utf-8 "ERROR"]
  ::msgcat::mcset it "ERROR" [encoding convertfrom utf-8 "ERRORE"]
  ::msgcat::mcset ru "ERROR" [encoding convertfrom utf-8 "\320\236\320\250\320\230\320\221\320\232\320\220"]
  ::msgcat::mcset sk "ERROR" [encoding convertfrom utf-8 "CHYBA"]
  ::msgcat::mcset sq "ERROR" [encoding convertfrom utf-8 "gabim"]

  ::msgcat::mcset bg "WARNING" [encoding convertfrom utf-8 "\320\222\320\275\320\270\320\274\320\260\320\275\320\270\320\265!"]
  ::msgcat::mcset de "WARNING" [encoding convertfrom utf-8 "WARNUNG"]

  ::msgcat::mcset bg "OK" [encoding convertfrom utf-8 "\320\236\320\232"]
  ::msgcat::mcset cz "OK" [encoding convertfrom utf-8 "OK"]
  ::msgcat::mcset de "OK" [encoding convertfrom utf-8 "OK"]
  ::msgcat::mcset el "OK" [encoding convertfrom utf-8 "\316\237\316\232"]
  ::msgcat::mcset en "OK" [encoding convertfrom utf-8 "OK"]
  ::msgcat::mcset es "OK" [encoding convertfrom utf-8 "OK"]
  ::msgcat::mcset it "OK" [encoding convertfrom utf-8 "OK"]
  ::msgcat::mcset ru "OK" [encoding convertfrom utf-8 "\320\243\320\241\320\237\320\225\320\245"]
  ::msgcat::mcset sk "OK" [encoding convertfrom utf-8 "OK"]
  ::msgcat::mcset sq "OK" [encoding convertfrom utf-8 "ne rregull-O.K."]

  ::msgcat::mcset bg "Reading therion log file ..." [encoding convertfrom utf-8 "\320\247\320\265\321\202\320\265\320\275\320\265 \320\275\320\260 \320\273\320\276\320\263-\321\204\320\260\320\271\320\273\320\260 \320\275\320\260 therion ..."]
  ::msgcat::mcset cz "Reading therion log file ..." [encoding convertfrom utf-8 "Na\304\215\303\255t\303\241m LOG soubor therionu ..."]
  ::msgcat::mcset de "Reading therion log file ..." [encoding convertfrom utf-8 "Lese Therion Logdatei ..."]
  ::msgcat::mcset el "Reading therion log file ..." [encoding convertfrom utf-8 "\316\221\316\275\316\254\316\263\316\275\317\211\317\203\316\267 \317\204\316\277\317\205 \316\261\317\201\317\207\316\265\316\257\316\277\317\205 log therion"]
  ::msgcat::mcset en "Reading therion log file ..." [encoding convertfrom utf-8 "Reading therion log file ..."]
  ::msgcat::mcset es "Reading therion log file ..." [encoding convertfrom utf-8 "Leyendo archivo log ..."]
  ::msgcat::mcset it "Reading therion log file ..." [encoding convertfrom utf-8 "Lettura file di log di therion ..."]
  ::msgcat::mcset ru "Reading therion log file ..." [encoding convertfrom utf-8 "\320\247\321\202\320\265\320\275\320\270\320\265 \320\273\320\276\320\263-\321\204\320\260\320\271\320\273\320\260 therion..."]
  ::msgcat::mcset sk "Reading therion log file ..." [encoding convertfrom utf-8 "Na\304\215it\303\241vam LOG s\303\272bor."]
  ::msgcat::mcset sq "Reading therion log file ..." [encoding convertfrom utf-8 "duke lexuar arkivin hyres te Therion-it"]

  ::msgcat::mcset bg "\nerror opening therion.log file\n" [encoding convertfrom utf-8 "\n\320\263\321\200\320\265\321\210\320\272\320\260 \320\277\321\200\320\270 \320\276\321\202\320\262\320\260\321\200\321\217\320\275\320\265\321\202\320\276 \320\275\320\260 \321\204\320\260\320\271\320\273\320\260 therion.log\n"]
  ::msgcat::mcset cz "\nerror opening therion.log file\n" [encoding convertfrom utf-8 "\nchyba p\305\231i otev\303\255r\303\241n\303\255 souboru therion.log\n"]
  ::msgcat::mcset de "\nerror opening therion.log file\n" [encoding convertfrom utf-8 "\nFehler beim \303\226ffnen von therion.log\n"]
  ::msgcat::mcset el "\nerror opening therion.log file\n" [encoding convertfrom utf-8 "\n\317\203\317\206\316\254\316\273\316\274\316\261 \316\272\316\261\317\204\316\261 \317\204\316\277 \316\254\316\275\316\277\316\271\316\263\316\274\316\261 \317\204\316\277\317\205 \316\261\317\201\317\207\316\265\316\257\316\277\317\205 therion.log\n"]
  ::msgcat::mcset en "\nerror opening therion.log file\n" [encoding convertfrom utf-8 "\nerror opening therion.log file\n"]
  ::msgcat::mcset es "\nerror opening therion.log file\n" [encoding convertfrom utf-8 "\nerror abriendo el archivo therion.log\n"]
  ::msgcat::mcset it "\nerror opening therion.log file\n" [encoding convertfrom utf-8 "\nerrore in apertura del file therion.log"]
  ::msgcat::mcset ru "\nerror opening therion.log file\n" [encoding convertfrom utf-8 "\n\320\276\321\210\320\270\320\261\320\272\320\260 \320\276\321\202\320\272\321\200\321\213\321\202\320\270\321\217 \321\204\320\260\320\271\320\273\320\260 therion.log\n"]
  ::msgcat::mcset sk "\nerror opening therion.log file\n" [encoding convertfrom utf-8 "\nchyba pri \304\215\303\255tan\303\255 s\303\272boru therion.log\n"]
  ::msgcat::mcset sq "\nerror opening therion.log file\n" [encoding convertfrom utf-8 "gabim gjate hapjes se Therion-it.arkivin hyres/n"]

  ::msgcat::mcset bg "Show or hide this control panel" [encoding convertfrom utf-8 "\320\237\320\276\320\272\320\260\320\267\320\262\320\260\320\275\320\265/\321\201\320\272\321\200\320\270\320\262\320\260\320\275\320\265 \320\275\320\260 \320\272\320\276\320\275\321\202\321\200\320\276\320\273\320\275\320\270\321\217\321\202 \320\277\320\260\320\275\320\265\320\273"]
  ::msgcat::mcset cz "Show or hide this control panel" [encoding convertfrom utf-8 "Zobrazit/skr\303\275t ovl\303\241dac\303\255 panel"]
  ::msgcat::mcset de "Show or hide this control panel" [encoding convertfrom utf-8 "Dieses Panel anzeigen oder verbergen"]
  ::msgcat::mcset el "Show or hide this control panel" [encoding convertfrom utf-8 "\316\232\316\254\316\275\317\204\316\265 \316\272\316\273\316\271\316\272 \316\263\316\271\316\261 \316\265\316\274\317\206\316\254\316\275\316\271\317\203\316\267 \316\256 \316\274\316\267-\316\265\316\274\317\206\316\254\316\275\316\271\317\203\316\267 \317\204\316\277\317\205 \317\200\316\257\316\275\316\261\316\272\316\261 \316\265\316\273\316\255\316\263\317\207\316\277\317\205"]
  ::msgcat::mcset en "Show or hide this control panel" [encoding convertfrom utf-8 "Click to show or hide this control panel."]
  ::msgcat::mcset es "Show or hide this control panel" [encoding convertfrom utf-8 "Clicar para mostrar u ocultar este panel de control"]
  ::msgcat::mcset it "Show or hide this control panel" [encoding convertfrom utf-8 "Visualizza o nascondi questo pannello"]
  ::msgcat::mcset ru "Show or hide this control panel" [encoding convertfrom utf-8 "\320\237\320\276\320\272\320\260\320\267\320\260\321\202\321\214 \320\270\320\273\320\270 \321\201\320\277\321\200\321\217\321\202\320\260\321\202\321\214 \320\277\320\260\320\275\320\265\320\273\321\214"]
  ::msgcat::mcset sk "Show or hide this control panel" [encoding convertfrom utf-8 "Stla\304\215te ak chcete zobrazi\305\245 alebo skry\305\245 tento panel"]
  ::msgcat::mcset sq "Show or hide this control panel" [encoding convertfrom utf-8 "kliko te hapesh ose te mbyllesh kete panel te kontrollit"]

  ::msgcat::mcset bg "loading map editor ..." [encoding convertfrom utf-8 "\320\227\320\260\321\200\320\265\320\266\320\264\320\260\320\275\320\265 \320\275\320\260 \321\200\320\265\320\264\320\260\320\272\321\202\320\276\321\200\320\260 \320\275\320\260 \320\272\320\260\321\200\321\202\320\270 ..."]
  ::msgcat::mcset cz "loading map editor ..." [encoding convertfrom utf-8 "nahr\303\241v\303\241m mapov\303\275 editor..."]
  ::msgcat::mcset de "loading map editor ..." [encoding convertfrom utf-8 "Lade Karteneditor ..."]
  ::msgcat::mcset el "loading map editor ..." [encoding convertfrom utf-8 "\317\206\317\214\317\201\317\204\316\271\317\203\316\267 \317\204\316\277\317\205 \316\265\317\200\316\265\316\276\316\265\317\201\316\263\316\261\317\203\317\204\316\256 \316\261\317\200\316\277\317\204\317\215\317\200\317\211\317\203\316\267\317\202..."]
  ::msgcat::mcset en "loading map editor ..." [encoding convertfrom utf-8 "loading map editor ..."]
  ::msgcat::mcset es "loading map editor ..." [encoding convertfrom utf-8 "editor de mapas..."]
  ::msgcat::mcset it "loading map editor ..." [encoding convertfrom utf-8 "editor di mappa ..."]
  ::msgcat::mcset ru "loading map editor ..." [encoding convertfrom utf-8 "\320\267\320\260\320\263\321\200\321\203\320\267\320\272\320\260 \321\200\320\265\320\264\320\260\320\272\321\202\320\276\321\200\320\260 \320\272\320\260\321\200\321\202..."]
  ::msgcat::mcset sk "loading map editor ..." [encoding convertfrom utf-8 "Mapov\303\275 editor"]
  ::msgcat::mcset sq "loading map editor ..." [encoding convertfrom utf-8 "duke lexuar permiresuesin e hartave\342\200\246"]

  ::msgcat::mcset bg "Undo %s" [encoding convertfrom utf-8 "\320\236\321\202\320\274\321\217\320\275\320\260"]
  ::msgcat::mcset cz "Undo %s" [encoding convertfrom utf-8 "Zp\304\233t - %s"]
  ::msgcat::mcset de "Undo %s" [encoding convertfrom utf-8 "R\303\274ckg\303\244ngig %s"]
  ::msgcat::mcset el "Undo %s" [encoding convertfrom utf-8 "\316\221\316\275\316\261\316\257\317\201\316\265\317\203\316\267 %s"]
  ::msgcat::mcset en "Undo %s" [encoding convertfrom utf-8 "Undo %s"]
  ::msgcat::mcset es "Undo %s" [encoding convertfrom utf-8 "Deshacer %s"]
  ::msgcat::mcset it "Undo %s" [encoding convertfrom utf-8 "Indietro %s"]
  ::msgcat::mcset ru "Undo %s" [encoding convertfrom utf-8 "\320\236\321\202\320\274\320\265\320\275\320\270\321\202\321\214 %s"]
  ::msgcat::mcset sk "Undo %s" [encoding convertfrom utf-8 "Sp\303\244\305\245 - %s"]
  ::msgcat::mcset sq "Undo %s" [encoding convertfrom utf-8 "prishe %s"]

  ::msgcat::mcset bg "Redo %s" [encoding convertfrom utf-8 "\320\222\321\212\320\267\321\201\321\202\320\260\320\275\320\276\320\262\321\217\320\262\320\260\320\275\320\265"]
  ::msgcat::mcset cz "Redo %s" [encoding convertfrom utf-8 "Znovu - %s"]
  ::msgcat::mcset de "Redo %s" [encoding convertfrom utf-8 "Wiederholen %s"]
  ::msgcat::mcset el "Redo %s" [encoding convertfrom utf-8 "\316\225\317\200\316\261\316\275\316\254\316\273\316\267\317\210\316\267 %s"]
  ::msgcat::mcset en "Redo %s" [encoding convertfrom utf-8 "Redo %s"]
  ::msgcat::mcset es "Redo %s" [encoding convertfrom utf-8 "Rehacer %s"]
  ::msgcat::mcset it "Redo %s" [encoding convertfrom utf-8 "Rifai %s"]
  ::msgcat::mcset ru "Redo %s" [encoding convertfrom utf-8 "\320\222\320\265\321\200\320\275\321\203\321\202\321\214 %s"]
  ::msgcat::mcset sk "Redo %s" [encoding convertfrom utf-8 "Opakova\305\245- %s"]
  ::msgcat::mcset sq "Redo %s" [encoding convertfrom utf-8 "beje perseri %s"]

  ::msgcat::mcset bg "%s \[%s\] -- multiple encoding commands in file" [encoding convertfrom utf-8 "%s \[%s\] -- \320\275\321\217\320\272\320\276\320\273\320\272\320\276 \320\272\320\276\320\274\320\260\320\275\320\264\320\270 encoding \320\262\321\212\320\262 \321\204\320\260\320\271\320\273\320\260"]
  ::msgcat::mcset cz "%s \[%s\] -- multiple encoding commands in file" [encoding convertfrom utf-8 "%s \[%s\] -- v\303\255cen\303\241sobn\303\275 v\303\275skyt p\305\231\303\255kazu encoding v jednom souboru"]
  ::msgcat::mcset el "%s \[%s\] -- multiple encoding commands in file" [encoding convertfrom utf-8 "%s \[%s\] -- \317\200\316\277\316\273\316\273\316\261\317\200\316\273\316\255\317\202 \316\265\316\275\317\204\316\277\316\273\316\255\317\202 \316\272\317\211\316\264\316\271\316\272\316\277\317\200\316\277\316\257\316\267\317\203\316\267\317\202 \317\203\317\204\316\277 \316\261\317\201\317\207\316\265\316\257\316\277"]
  ::msgcat::mcset en "%s \[%s\] -- multiple encoding commands in file" [encoding convertfrom utf-8 "%s \[%s\] -- multiple encoding commands in file"]
  ::msgcat::mcset es "%s \[%s\] -- multiple encoding commands in file" [encoding convertfrom utf-8 "%s \[%s\] -- m\303\272ltiples comandos de codificaci\303\263n en el archivo"]
  ::msgcat::mcset it "%s \[%s\] -- multiple encoding commands in file" [encoding convertfrom utf-8 "%s \[%s\] -- encoding ripetuto nel file di comandi"]
  ::msgcat::mcset ru "%s \[%s\] -- multiple encoding commands in file" [encoding convertfrom utf-8 "%s \[%s\] -- \320\275\320\265\321\201\320\272\320\276\320\273\321\214\320\272\320\276 \320\272\320\276\320\274\320\260\320\275\320\264 encoding \320\262 \321\204\320\260\320\271\320\273\320\265"]
  ::msgcat::mcset sk "%s \[%s\] -- multiple encoding commands in file" [encoding convertfrom utf-8 "%s \[%s\] -- viac encoding pr\303\255kazov v jednom s\303\272bore"]
  ::msgcat::mcset sq "%s \[%s\] -- multiple encoding commands in file" [encoding convertfrom utf-8 "%s \[%s\] \342\200\223shumezo komandat te deshifrimit ne arkiv"]

  ::msgcat::mcset bg "%s \[%s\] -- unknown encoding -- %s" [encoding convertfrom utf-8 "%s \[%s\] -- \320\275\320\265\320\270\320\267\320\262\320\265\321\201\321\202\320\275\320\260 \320\272\320\276\320\264\320\270\321\200\320\276\320\262\320\272\320\260 -- %s"]
  ::msgcat::mcset cz "%s \[%s\] -- unknown encoding -- %s" [encoding convertfrom utf-8 "%s \[%s\] -- nezn\303\241m\303\251 k\303\263dov\303\241n\303\255 znak\305\257 -- %s"]
  ::msgcat::mcset el "%s \[%s\] -- unknown encoding -- %s" [encoding convertfrom utf-8 "%s \[%s\] -- \316\254\316\263\316\275\317\211\317\203\317\204\316\267 \316\272\317\211\316\264\316\271\316\272\316\277\317\200\316\277\316\257\316\267\317\203\316\267 -- %s"]
  ::msgcat::mcset en "%s \[%s\] -- unknown encoding -- %s" [encoding convertfrom utf-8 "%s \[%s\] -- unknown encoding -- %s"]
  ::msgcat::mcset es "%s \[%s\] -- unknown encoding -- %s" [encoding convertfrom utf-8 "%s \[%s\] -- codificaci\303\263n desconocida -- %s"]
  ::msgcat::mcset it "%s \[%s\] -- unknown encoding -- %s" [encoding convertfrom utf-8 "%s \[%s\] -- encoding non conosciuto -- %s"]
  ::msgcat::mcset ru "%s \[%s\] -- unknown encoding -- %s" [encoding convertfrom utf-8 "%s \[%s\] -- \320\275\320\265\320\270\320\267\320\262\320\265\321\201\321\202\320\275\320\260\321\217 \320\272\320\276\320\264\320\270\321\200\320\276\320\262\320\272\320\260 -- %s"]
  ::msgcat::mcset sk "%s \[%s\] -- unknown encoding -- %s" [encoding convertfrom utf-8 "%s \[%s\] -- nezn\303\241me k\303\263dovanie znakov -- %s"]
  ::msgcat::mcset sq "%s \[%s\] -- unknown encoding -- %s" [encoding convertfrom utf-8 "%s \[%s\] \342\200\223 deshifrim I panjohur -- %s"]

  ::msgcat::mcset bg "adjusting area" [encoding convertfrom utf-8 "\321\200\320\265\320\263\321\203\320\273\320\270\321\200\320\260\320\275\320\265 \320\275\320\260 \320\276\320\261\320\273\320\260\321\201\321\202\321\202\320\260"]
  ::msgcat::mcset cz "adjusting area" [encoding convertfrom utf-8 "p\305\231izp\305\257soben\303\255 pracovn\303\255 plochy"]
  ::msgcat::mcset de "adjusting area" [encoding convertfrom utf-8 "Fl\303\244che anpassen"]
  ::msgcat::mcset el "adjusting area" [encoding convertfrom utf-8 "\317\200\317\201\316\277\317\203\316\261\317\201\316\274\316\277\316\263\316\256 \316\265\317\200\316\271\317\206\316\254\316\275\316\265\316\271\316\261\317\202"]
  ::msgcat::mcset en "adjusting area" [encoding convertfrom utf-8 "adjusting area"]
  ::msgcat::mcset es "adjusting area" [encoding convertfrom utf-8 "ajustando \303\241rea"]
  ::msgcat::mcset it "adjusting area" [encoding convertfrom utf-8 "aggiustamento area"]
  ::msgcat::mcset ru "adjusting area" [encoding convertfrom utf-8 "\321\200\320\265\320\263\321\203\320\273\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265 \320\276\320\261\320\273\320\260\321\201\321\202\320\270"]
  ::msgcat::mcset sk "adjusting area" [encoding convertfrom utf-8 "prisp\303\264sobenie pracovnej plochy"]

  ::msgcat::mcset bg "zooming" [encoding convertfrom utf-8 "\320\274\320\260\321\211\320\260\320\261\320\270\321\200\320\260\320\275\320\265"]
  ::msgcat::mcset cz "zooming" [encoding convertfrom utf-8 "zoomov\303\241n\303\255"]
  ::msgcat::mcset de "zooming" [encoding convertfrom utf-8 "Zoomen"]
  ::msgcat::mcset el "zooming" [encoding convertfrom utf-8 "\316\274\316\265\316\263\316\255\316\270\317\205\316\275\317\203\316\267"]
  ::msgcat::mcset en "zooming" [encoding convertfrom utf-8 "zooming"]
  ::msgcat::mcset es "zooming" [encoding convertfrom utf-8 "zooming"]
  ::msgcat::mcset it "zooming" [encoding convertfrom utf-8 "zooming"]
  ::msgcat::mcset ru "zooming" [encoding convertfrom utf-8 "\320\274\320\260\321\201\321\210\321\202\320\260\320\261\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265"]
  ::msgcat::mcset sk "zooming" [encoding convertfrom utf-8 "zoomovanie"]
  ::msgcat::mcset sq "zooming" [encoding convertfrom utf-8 "zmadhimi"]

  ::msgcat::mcset bg "Zoom %d %%" [encoding convertfrom utf-8 "\320\274\320\260\321\211\320\260\320\261 %d %%"]
  ::msgcat::mcset cz "Zoom %d %%" [encoding convertfrom utf-8 "Zoom %d %%"]
  ::msgcat::mcset de "Zoom %d %%" [encoding convertfrom utf-8 "Zoom %d %%"]
  ::msgcat::mcset el "Zoom %d %%" [encoding convertfrom utf-8 "\316\234\316\265\316\263\316\255\316\270\317\205\316\275\317\203\316\267 %d %%"]
  ::msgcat::mcset en "Zoom %d %%" [encoding convertfrom utf-8 "Zoom %d %%"]
  ::msgcat::mcset es "Zoom %d %%" [encoding convertfrom utf-8 "Zoom %d %%"]
  ::msgcat::mcset it "Zoom %d %%" [encoding convertfrom utf-8 "Zomm %d %%"]
  ::msgcat::mcset ru "Zoom %d %%" [encoding convertfrom utf-8 "\320\234\320\260\321\201\321\210\321\202\320\260\320\261 %d %%"]
  ::msgcat::mcset sk "Zoom %d %%" [encoding convertfrom utf-8 "Zoom %d %%"]
  ::msgcat::mcset sq "Zoom %d %%" [encoding convertfrom utf-8 "zmadho %d %%"]

  ::msgcat::mcset bg "Zooming objects ..." [encoding convertfrom utf-8 "\320\234\320\260\321\211\320\260\320\261\320\270\321\200\320\260\320\275\320\265 \320\275\320\260 \320\276\320\261\320\265\320\272\321\202\320\270 ..."]
  ::msgcat::mcset cz "Zooming objects ..." [encoding convertfrom utf-8 "Zoomov\303\241n\303\255 objekt\305\257 ..."]
  ::msgcat::mcset de "Zooming objects ..." [encoding convertfrom utf-8 "Zoome Objekte ..."]
  ::msgcat::mcset el "Zooming objects ..." [encoding convertfrom utf-8 "\316\234\316\265\316\263\316\255\316\270\317\205\316\275\317\203\316\267 \316\261\316\275\317\204\316\271\316\272\316\265\316\271\316\274\316\255\316\275\317\211\316\275..."]
  ::msgcat::mcset en "Zooming objects ..." [encoding convertfrom utf-8 "Zooming objects ..."]
  ::msgcat::mcset es "Zooming objects ..." [encoding convertfrom utf-8 "Zoom sobre objetos ..."]
  ::msgcat::mcset it "Zooming objects ..." [encoding convertfrom utf-8 "Zoom degli oggetti ..."]
  ::msgcat::mcset ru "Zooming objects ..." [encoding convertfrom utf-8 "\320\234\320\260\321\201\321\210\321\202\320\260\320\261\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265 \320\276\320\261\321\212\320\265\320\272\321\202\320\276\320\262..."]
  ::msgcat::mcset sk "Zooming objects ..." [encoding convertfrom utf-8 "Zoomovanie objektov ..."]
  ::msgcat::mcset sq "Zooming objects ..." [encoding convertfrom utf-8 "objektet e zmadhimit\342\200\246"]

  ::msgcat::mcset bg "dragging image" [encoding convertfrom utf-8 "\320\237\320\273\321\212\320\267\320\263\320\260\320\275\320\265 \320\275\320\260 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265"]
  ::msgcat::mcset cz "dragging image" [encoding convertfrom utf-8 "p\305\231esouv\303\241n\303\255 obr\303\241zku"]
  ::msgcat::mcset de "dragging image" [encoding convertfrom utf-8 "Bild verschieben"]
  ::msgcat::mcset el "dragging image" [encoding convertfrom utf-8 "\316\274\316\265\317\204\316\261\316\272\316\257\316\275\316\267\317\203\316\267 \316\265\316\271\316\272\317\214\316\275\316\261\317\202"]
  ::msgcat::mcset en "dragging image" [encoding convertfrom utf-8 "dragging image"]
  ::msgcat::mcset es "dragging image" [encoding convertfrom utf-8 "arrastrando imagen"]
  ::msgcat::mcset it "dragging image" [encoding convertfrom utf-8 "trascinamento immagine"]
  ::msgcat::mcset ru "dragging image" [encoding convertfrom utf-8 "\320\277\320\265\321\200\320\265\321\202\320\260\321\201\320\272\320\270\320\262\320\260\320\275\320\270\320\265 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\321\217"]
  ::msgcat::mcset sk "dragging image" [encoding convertfrom utf-8 "Pres\303\272vanie obr\303\241zku"]
  ::msgcat::mcset sq "dragging image" [encoding convertfrom utf-8 "imazhi per tu vizatuar"]

  ::msgcat::mcset bg "Map Editor" [encoding convertfrom utf-8 "\320\240\320\265\320\264\320\260\320\272\321\202\320\276\321\200 \320\275\320\260 \320\272\320\260\321\200\321\202\320\270"]
  ::msgcat::mcset cz "Map Editor" [encoding convertfrom utf-8 "Mapov\303\275 editor"]
  ::msgcat::mcset de "Map Editor" [encoding convertfrom utf-8 "Karteneditor"]
  ::msgcat::mcset el "Map Editor" [encoding convertfrom utf-8 "\316\225\317\200\316\265\316\276\316\265\317\201\316\263\316\261\317\203\317\204\316\256\317\202 \316\261\317\200\316\277\317\204\317\215\317\200\317\211\317\203\316\267\317\202"]
  ::msgcat::mcset en "Map Editor" [encoding convertfrom utf-8 "Map Editor"]
  ::msgcat::mcset es "Map Editor" [encoding convertfrom utf-8 "Editor de mapas"]
  ::msgcat::mcset it "Map Editor" [encoding convertfrom utf-8 "Editor di mappa"]
  ::msgcat::mcset ru "Map Editor" [encoding convertfrom utf-8 "\320\240\320\265\320\264\320\260\320\272\321\202\320\276\321\200 \320\272\320\260\321\200\321\202"]
  ::msgcat::mcset sk "Map Editor" [encoding convertfrom utf-8 "Mapov\303\275 Editor"]
  ::msgcat::mcset sq "Map Editor" [encoding convertfrom utf-8 "permiresuesi I hartave"]

  ::msgcat::mcset bg "File commands" [encoding convertfrom utf-8 "\320\232\320\276\320\274\320\260\320\275\320\264\320\270 \320\262\321\212\320\262 \321\204\320\260\320\271\320\273"]
  ::msgcat::mcset cz "File commands" [encoding convertfrom utf-8 "P\305\231\303\255kazy"]
  ::msgcat::mcset de "File commands" [encoding convertfrom utf-8 "Dateibefehle"]
  ::msgcat::mcset el "File commands" [encoding convertfrom utf-8 "\316\221\316\275\317\204\316\271\316\272\316\265\316\257\316\274\316\265\316\275\316\261"]
  ::msgcat::mcset en "File commands" [encoding convertfrom utf-8 "Objects"]
  ::msgcat::mcset es "File commands" [encoding convertfrom utf-8 "Objetos"]
  ::msgcat::mcset it "File commands" [encoding convertfrom utf-8 "Oggetti"]
  ::msgcat::mcset ru "File commands" [encoding convertfrom utf-8 "\320\232\320\276\320\274\320\260\320\275\320\264\321\213 \320\262 \321\204\320\260\320\271\320\273\320\265"]
  ::msgcat::mcset sk "File commands" [encoding convertfrom utf-8 "Pr\303\255kazy v s\303\272bore"]
  ::msgcat::mcset sq "File commands" [encoding convertfrom utf-8 "objektet"]

  ::msgcat::mcset bg "Search & Select" [encoding convertfrom utf-8 "\320\242\321\212\321\200\321\201\320\265\320\275\320\265 \320\270 \320\270\320\267\320\261\320\270\321\200\320\260\320\275\320\265"]
  ::msgcat::mcset cz "Search & Select" [encoding convertfrom utf-8 "Naj\303\255t & Vybrat"]
  ::msgcat::mcset de "Search & Select" [encoding convertfrom utf-8 "Suchen & ausw\303\244hlen"]
  ::msgcat::mcset el "Search & Select" [encoding convertfrom utf-8 "\316\221\316\275\316\261\316\266\316\256\317\204\316\267\317\203\316\267 \316\272\316\261\316\271 \316\265\317\200\316\271\316\273\316\277\316\263\316\256"]
  ::msgcat::mcset en "Search & Select" [encoding convertfrom utf-8 "Search & Select"]
  ::msgcat::mcset es "Search & Select" [encoding convertfrom utf-8 "Buscar y Seleccionar"]
  ::msgcat::mcset it "Search & Select" [encoding convertfrom utf-8 "Cerca e seleziona"]
  ::msgcat::mcset ru "Search & Select" [encoding convertfrom utf-8 "\320\237\320\276\320\270\321\201\320\272 \320\270 \320\222\321\213\320\264\320\265\320\273\320\265\320\275\320\270\320\265"]
  ::msgcat::mcset sk "Search & Select" [encoding convertfrom utf-8 "H\304\276adaj a Vyber"]
  ::msgcat::mcset sq "Search & Select" [encoding convertfrom utf-8 "kerko dhe zgjidh"]

  ::msgcat::mcset bg "Command preview" [encoding convertfrom utf-8 "\320\237\321\200\320\265\320\263\320\273\320\265\320\264 \320\275\320\260 \320\272\320\276\320\274\320\260\320\275\320\264\320\260"]
  ::msgcat::mcset cz "Command preview" [encoding convertfrom utf-8 "N\303\241hled p\305\231\303\255kazu"]
  ::msgcat::mcset de "Command preview" [encoding convertfrom utf-8 "Kommandovorschau"]
  ::msgcat::mcset el "Command preview" [encoding convertfrom utf-8 "\316\240\317\201\316\277\316\265\317\200\316\271\317\203\316\272\317\214\317\200\316\267\317\203\316\267 \316\265\316\275\317\204\316\277\316\273\316\256\317\202"]
  ::msgcat::mcset en "Command preview" [encoding convertfrom utf-8 "Command preview"]
  ::msgcat::mcset es "Command preview" [encoding convertfrom utf-8 "Ver comandos"]
  ::msgcat::mcset it "Command preview" [encoding convertfrom utf-8 "Anteprima comando"]
  ::msgcat::mcset ru "Command preview" [encoding convertfrom utf-8 "\320\237\321\200\320\276\321\201\320\274\320\276\321\202\321\200 \320\272\320\276\320\274\320\260\320\275\320\264\321\213"]
  ::msgcat::mcset sk "Command preview" [encoding convertfrom utf-8 "N\303\241h\304\276ad pr\303\255kazu"]
  ::msgcat::mcset sq "Command preview" [encoding convertfrom utf-8 "komanda e parashiqimit"]

  ::msgcat::mcset bg "Point control" [encoding convertfrom utf-8 "\320\242\320\276\321\207\320\272\320\260"]
  ::msgcat::mcset cz "Point control" [encoding convertfrom utf-8 "Bod"]
  ::msgcat::mcset de "Point control" [encoding convertfrom utf-8 "Punkte bearbeiten"]
  ::msgcat::mcset el "Point control" [encoding convertfrom utf-8 "\316\243\316\267\316\274\316\265\316\257\316\261"]
  ::msgcat::mcset en "Point control" [encoding convertfrom utf-8 "Points"]
  ::msgcat::mcset es "Point control" [encoding convertfrom utf-8 "Puntos"]
  ::msgcat::mcset it "Point control" [encoding convertfrom utf-8 "Punti"]
  ::msgcat::mcset ru "Point control" [encoding convertfrom utf-8 "\320\242\320\276\321\207\320\272\320\260"]
  ::msgcat::mcset sk "Point control" [encoding convertfrom utf-8 "Bod"]
  ::msgcat::mcset sq "Point control" [encoding convertfrom utf-8 "pikat"]

  ::msgcat::mcset bg "Line control" [encoding convertfrom utf-8 "\320\233\320\270\320\275\320\270\321\217"]
  ::msgcat::mcset cz "Line control" [encoding convertfrom utf-8 "K\305\231ivka"]
  ::msgcat::mcset de "Line control" [encoding convertfrom utf-8 "Linien bearbeiten"]
  ::msgcat::mcset el "Line control" [encoding convertfrom utf-8 "\316\223\317\201\316\261\316\274\316\274\316\255\317\202"]
  ::msgcat::mcset en "Line control" [encoding convertfrom utf-8 "Lines"]
  ::msgcat::mcset es "Line control" [encoding convertfrom utf-8 "L\303\255neas"]
  ::msgcat::mcset it "Line control" [encoding convertfrom utf-8 "Linee"]
  ::msgcat::mcset ru "Line control" [encoding convertfrom utf-8 "\320\233\320\270\320\275\320\270\321\217"]
  ::msgcat::mcset sk "Line control" [encoding convertfrom utf-8 "Krivka"]
  ::msgcat::mcset sq "Line control" [encoding convertfrom utf-8 "rjeshtat"]

  ::msgcat::mcset bg "Line point control" [encoding convertfrom utf-8 "\320\242\320\276\321\207\320\272\320\260 \320\275\320\260 \320\273\320\270\320\275\320\270\321\217"]
  ::msgcat::mcset cz "Line point control" [encoding convertfrom utf-8 "Bod k\305\231ivky"]
  ::msgcat::mcset de "Line point control" [encoding convertfrom utf-8 "Linienpunkte bearbeiten"]
  ::msgcat::mcset el "Line point control" [encoding convertfrom utf-8 "\316\243\316\267\316\274\316\265\316\257\316\261 \316\263\317\201\316\261\316\274\316\274\317\216\316\275"]
  ::msgcat::mcset en "Line point control" [encoding convertfrom utf-8 "Line points"]
  ::msgcat::mcset es "Line point control" [encoding convertfrom utf-8 "Puntos de l\303\255nea"]
  ::msgcat::mcset it "Line point control" [encoding convertfrom utf-8 "Punti della linea"]
  ::msgcat::mcset ru "Line point control" [encoding convertfrom utf-8 "\320\242\320\276\321\207\320\272\320\260 \320\273\320\270\320\275\320\270\320\270"]
  ::msgcat::mcset sk "Line point control" [encoding convertfrom utf-8 "Bod krivky"]
  ::msgcat::mcset sq "Line point control" [encoding convertfrom utf-8 "pikat e rjeshtit"]

  ::msgcat::mcset bg "Area control" [encoding convertfrom utf-8 "\320\236\320\261\320\273\320\260\321\201\321\202"]
  ::msgcat::mcset cz "Area control" [encoding convertfrom utf-8 "Oblast"]
  ::msgcat::mcset de "Area control" [encoding convertfrom utf-8 "Fl\303\244chen bearbeiten"]
  ::msgcat::mcset el "Area control" [encoding convertfrom utf-8 "\316\225\317\200\316\271\317\206\316\254\316\275\316\265\316\271\316\265\317\202"]
  ::msgcat::mcset en "Area control" [encoding convertfrom utf-8 "Areas"]
  ::msgcat::mcset es "Area control" [encoding convertfrom utf-8 "Areas"]
  ::msgcat::mcset it "Area control" [encoding convertfrom utf-8 "Aree"]
  ::msgcat::mcset ru "Area control" [encoding convertfrom utf-8 "\320\236\320\261\320\273\320\260\321\201\321\202\321\214"]
  ::msgcat::mcset sk "Area control" [encoding convertfrom utf-8 "Plocha"]
  ::msgcat::mcset sq "Area control" [encoding convertfrom utf-8 "fushat"]

  ::msgcat::mcset bg "Scrap control" [encoding convertfrom utf-8 "\320\241\320\272\321\200\320\260\320\277"]
  ::msgcat::mcset cz "Scrap control" [encoding convertfrom utf-8 "Scrap"]
  ::msgcat::mcset de "Scrap control" [encoding convertfrom utf-8 "Skizze bearbeiten"]
  ::msgcat::mcset el "Scrap control" [encoding convertfrom utf-8 "\316\243\316\272\317\201\316\261\317\200"]
  ::msgcat::mcset en "Scrap control" [encoding convertfrom utf-8 "Scraps"]
  ::msgcat::mcset es "Scrap control" [encoding convertfrom utf-8 "Croquis"]
  ::msgcat::mcset it "Scrap control" [encoding convertfrom utf-8 "Scrap"]
  ::msgcat::mcset ru "Scrap control" [encoding convertfrom utf-8 "\320\241\320\272\321\200\320\260\320\277"]
  ::msgcat::mcset sk "Scrap control" [encoding convertfrom utf-8 "Scrap"]
  ::msgcat::mcset sq "Scrap control" [encoding convertfrom utf-8 "mbeturinat"]

  ::msgcat::mcset bg "Text editor" [encoding convertfrom utf-8 "\320\242\320\265\320\272\321\201\321\202\320\276\320\262 \321\200\320\265\320\264\320\260\320\272\321\202\320\276\321\200"]
  ::msgcat::mcset cz "Text editor" [encoding convertfrom utf-8 "Textov\303\275 editor"]
  ::msgcat::mcset de "Text editor" [encoding convertfrom utf-8 "Texteditor"]
  ::msgcat::mcset el "Text editor" [encoding convertfrom utf-8 "\316\225\317\200\316\265\316\276\316\265\317\201\316\263\316\261\317\203\317\204\316\256\317\202 \316\272\316\265\316\271\316\274\316\255\316\275\316\277\317\205"]
  ::msgcat::mcset en "Text editor" [encoding convertfrom utf-8 "Text editor"]
  ::msgcat::mcset es "Text editor" [encoding convertfrom utf-8 "Editor de texto"]
  ::msgcat::mcset it "Text editor" [encoding convertfrom utf-8 "Editor di testo"]
  ::msgcat::mcset ru "Text editor" [encoding convertfrom utf-8 "\320\240\320\265\320\264\320\260\320\272\321\202\320\276\321\200"]
  ::msgcat::mcset sk "Text editor" [encoding convertfrom utf-8 "Textov\303\275 editor"]
  ::msgcat::mcset sq "Text editor" [encoding convertfrom utf-8 "permirsuesi I tekstit"]

  ::msgcat::mcset bg "Drawing area" [encoding convertfrom utf-8 "\320\227\320\276\320\275\320\260 \320\275\320\260 \321\207\320\265\321\200\321\202\320\260\320\275\320\265"]
  ::msgcat::mcset cz "Drawing area" [encoding convertfrom utf-8 "Kresl\303\255c\303\255 plocha"]
  ::msgcat::mcset de "Drawing area" [encoding convertfrom utf-8 "Zeichenfl\303\244che"]
  ::msgcat::mcset el "Drawing area" [encoding convertfrom utf-8 "\316\225\317\200\316\271\317\206\316\254\316\275\316\265\316\271\316\261 \317\203\317\207\316\265\316\264\316\271\316\261\317\203\316\274\316\277\317\215"]
  ::msgcat::mcset en "Drawing area" [encoding convertfrom utf-8 "Drawing area"]
  ::msgcat::mcset es "Drawing area" [encoding convertfrom utf-8 "Area de dibujo"]
  ::msgcat::mcset it "Drawing area" [encoding convertfrom utf-8 "Area di disegno"]
  ::msgcat::mcset ru "Drawing area" [encoding convertfrom utf-8 "\320\227\320\276\320\275\320\260 \321\200\320\270\321\201\320\276\320\262\320\260\320\275\320\270\321\217"]
  ::msgcat::mcset sk "Drawing area" [encoding convertfrom utf-8 "Pracovn\303\241 plocha"]
  ::msgcat::mcset sq "Drawing area" [encoding convertfrom utf-8 "fusha e vizatimit"]

  ::msgcat::mcset bg "Background images" [encoding convertfrom utf-8 "\320\244\320\276\320\275\320\276\320\262\320\276 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265"]
  ::msgcat::mcset cz "Background images" [encoding convertfrom utf-8 "Podkladov\303\251 obr\303\241zky"]
  ::msgcat::mcset de "Background images" [encoding convertfrom utf-8 "Hintergrundbilder"]
  ::msgcat::mcset el "Background images" [encoding convertfrom utf-8 "\316\225\316\271\316\272\317\214\316\275\316\265\317\202 \317\206\317\214\316\275\317\204\316\277\317\205"]
  ::msgcat::mcset en "Background images" [encoding convertfrom utf-8 "Background images"]
  ::msgcat::mcset es "Background images" [encoding convertfrom utf-8 "Im\303\241genes de fondo"]
  ::msgcat::mcset it "Background images" [encoding convertfrom utf-8 "Immagini di background"]
  ::msgcat::mcset ru "Background images" [encoding convertfrom utf-8 "\320\244\320\276\320\275\320\276\320\262\321\213\320\265 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\321\217"]
  ::msgcat::mcset sk "Background images" [encoding convertfrom utf-8 "Obr\303\241zky pozadia"]
  ::msgcat::mcset sq "Background images" [encoding convertfrom utf-8 "imazhet ne prapavije"]

  ::msgcat::mcset bg "Current drawing area." [encoding convertfrom utf-8 "\320\242\320\265\320\272\321\203\321\211\320\260 \320\267\320\276\320\275\320\260 \320\275\320\260 \321\207\320\265\321\200\321\202\320\260\320\275\320\265"]
  ::msgcat::mcset cz "Current drawing area." [encoding convertfrom utf-8 "Sou\304\215asn\303\241 kresl\303\255c\303\255 plocha."]
  ::msgcat::mcset de "Current drawing area." [encoding convertfrom utf-8 "Aktuelle Zeichenfl\303\244che"]
  ::msgcat::mcset el "Current drawing area." [encoding convertfrom utf-8 "\316\225\316\275\316\265\317\201\316\263\316\256 \316\265\317\200\316\271\317\206\316\254\316\275\316\265\316\271\316\261 \317\203\317\207\316\265\316\264\316\271\316\261\317\203\316\274\316\277\317\215"]
  ::msgcat::mcset en "Current drawing area." [encoding convertfrom utf-8 "Current drawing area."]
  ::msgcat::mcset es "Current drawing area." [encoding convertfrom utf-8 "Area de dibujo actual."]
  ::msgcat::mcset it "Current drawing area." [encoding convertfrom utf-8 "Area di disegno attiva"]
  ::msgcat::mcset ru "Current drawing area." [encoding convertfrom utf-8 "\320\242\320\265\320\272\321\203\321\211\320\260\321\217 \320\267\320\276\320\275\320\260 \321\200\320\270\321\201\320\276\320\262\320\260\320\275\320\270\321\217."]
  ::msgcat::mcset sk "Current drawing area." [encoding convertfrom utf-8 "S\303\272\304\215asn\303\241 pracovn\303\241 plocha."]
  ::msgcat::mcset sq "Current drawing area." [encoding convertfrom utf-8 "fusha momentale e vizatimit"]

  ::msgcat::mcset bg "X min." [encoding convertfrom utf-8 "X min."]
  ::msgcat::mcset cz "X min." [encoding convertfrom utf-8 "X min."]
  ::msgcat::mcset el "X min." [encoding convertfrom utf-8 "\316\225\316\273\316\254\317\207\316\271\317\203\317\204\316\277 \316\247"]
  ::msgcat::mcset en "X min." [encoding convertfrom utf-8 "X min."]
  ::msgcat::mcset es "X min." [encoding convertfrom utf-8 "X min"]
  ::msgcat::mcset it "X min." [encoding convertfrom utf-8 "Minimo X"]
  ::msgcat::mcset ru "X min." [encoding convertfrom utf-8 "X min."]
  ::msgcat::mcset sk "X min." [encoding convertfrom utf-8 "Minimum X."]
  ::msgcat::mcset sq "X min." [encoding convertfrom utf-8 "minimum X."]

  ::msgcat::mcset bg "Y min." [encoding convertfrom utf-8 "Y min."]
  ::msgcat::mcset cz "Y min." [encoding convertfrom utf-8 "Y min."]
  ::msgcat::mcset el "Y min." [encoding convertfrom utf-8 "\316\225\316\273\316\254\317\207\316\271\317\203\317\204\316\277 \316\245"]
  ::msgcat::mcset en "Y min." [encoding convertfrom utf-8 "Y min."]
  ::msgcat::mcset es "Y min." [encoding convertfrom utf-8 "Y min"]
  ::msgcat::mcset it "Y min." [encoding convertfrom utf-8 "Minimo Y"]
  ::msgcat::mcset ru "Y min." [encoding convertfrom utf-8 "Y min."]
  ::msgcat::mcset sk "Y min." [encoding convertfrom utf-8 "Minimum Y."]
  ::msgcat::mcset sq "Y min." [encoding convertfrom utf-8 "minimum Y."]

  ::msgcat::mcset bg "X max." [encoding convertfrom utf-8 "X max."]
  ::msgcat::mcset cz "X max." [encoding convertfrom utf-8 "X max."]
  ::msgcat::mcset el "X max." [encoding convertfrom utf-8 "\316\234\316\255\316\263\316\271\317\203\317\204\316\277 \316\247"]
  ::msgcat::mcset en "X max." [encoding convertfrom utf-8 "X max."]
  ::msgcat::mcset es "X max." [encoding convertfrom utf-8 "X max"]
  ::msgcat::mcset it "X max." [encoding convertfrom utf-8 "Massimo X"]
  ::msgcat::mcset ru "X max." [encoding convertfrom utf-8 "X max."]
  ::msgcat::mcset sk "X max." [encoding convertfrom utf-8 "Maximum X."]
  ::msgcat::mcset sq "X max." [encoding convertfrom utf-8 "maksimum X."]

  ::msgcat::mcset bg "Y max." [encoding convertfrom utf-8 "Y max."]
  ::msgcat::mcset cz "Y max." [encoding convertfrom utf-8 "Y max."]
  ::msgcat::mcset el "Y max." [encoding convertfrom utf-8 "\316\234\316\255\316\263\316\271\317\203\317\204\316\277 \316\245"]
  ::msgcat::mcset en "Y max." [encoding convertfrom utf-8 "Y max."]
  ::msgcat::mcset es "Y max." [encoding convertfrom utf-8 "Y max"]
  ::msgcat::mcset it "Y max." [encoding convertfrom utf-8 "Massimo Y"]
  ::msgcat::mcset ru "Y max." [encoding convertfrom utf-8 "Y max."]
  ::msgcat::mcset sk "Y max." [encoding convertfrom utf-8 "Maximum Y."]
  ::msgcat::mcset sq "Y max." [encoding convertfrom utf-8 "maksimum Y."]

  ::msgcat::mcset bg "Adjust" [encoding convertfrom utf-8 "\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\270"]
  ::msgcat::mcset cz "Adjust" [encoding convertfrom utf-8 "P\305\231izp\305\257sobit"]
  ::msgcat::mcset de "Adjust" [encoding convertfrom utf-8 "Anpassen"]
  ::msgcat::mcset el "Adjust" [encoding convertfrom utf-8 "\316\240\317\201\316\277\317\203\316\261\317\201\316\274\316\277\316\263\316\256"]
  ::msgcat::mcset en "Adjust" [encoding convertfrom utf-8 "Adjust"]
  ::msgcat::mcset es "Adjust" [encoding convertfrom utf-8 "Ajustar"]
  ::msgcat::mcset it "Adjust" [encoding convertfrom utf-8 "Ridimensiona"]
  ::msgcat::mcset ru "Adjust" [encoding convertfrom utf-8 "\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\270\321\202\321\214"]
  ::msgcat::mcset sk "Adjust" [encoding convertfrom utf-8 "Prisp\303\264sob"]
  ::msgcat::mcset sq "Adjust" [encoding convertfrom utf-8 "permireso"]

  ::msgcat::mcset bg "Adjust drawing area to given limits." [encoding convertfrom utf-8 "\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\270 \320\267\320\276\320\275\320\260\321\202\320\260 \320\267\320\260 \321\207\320\265\321\200\321\202\320\260\320\275\320\265 \320\262 \320\267\320\260\320\264\320\260\320\264\320\265\320\275\320\270\321\202\320\265 \320\263\321\200\320\260\320\275\320\270\321\206\320\270"]
  ::msgcat::mcset cz "Adjust drawing area to given limits." [encoding convertfrom utf-8 "P\305\231izp\305\257sob\303\255 kresl\303\255c\303\255 plochu dan\303\275m limit\305\257m."]
  ::msgcat::mcset de "Adjust drawing area to given limits." [encoding convertfrom utf-8 "Zeichenfl\303\244che an Begrenzung anpassen."]
  ::msgcat::mcset el "Adjust drawing area to given limits." [encoding convertfrom utf-8 "\316\240\317\201\316\277\317\203\316\261\317\201\316\274\316\277\316\263\316\256 \316\265\317\200\316\271\317\206\316\254\316\275\316\265\316\271\316\261\317\202 \317\203\317\207\316\265\316\264\316\257\316\277\317\205 \317\203\317\204\316\261 \316\264\316\265\316\264\316\277\316\274\316\255\316\275\316\261 \317\214\317\201\316\271\316\261"]
  ::msgcat::mcset en "Adjust drawing area to given limits." [encoding convertfrom utf-8 "Adjust drawing area to given limits."]
  ::msgcat::mcset es "Adjust drawing area to given limits." [encoding convertfrom utf-8 "Ajustar el \303\241rea de dibujo a los l\303\255mites indicados."]
  ::msgcat::mcset it "Adjust drawing area to given limits." [encoding convertfrom utf-8 "Ridimensiona l'area di disegno ai limiti dati"]
  ::msgcat::mcset ru "Adjust drawing area to given limits." [encoding convertfrom utf-8 "\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\270\321\202\321\214 \320\267\320\276\320\275\321\203 \321\200\320\270\321\201\320\276\320\262\320\260\320\275\320\270\321\217 \320\262 \320\267\320\260\320\264\320\260\320\275\320\275\321\213\321\205 \320\263\321\200\320\260\320\275\320\270\321\206\320\260\321\205."]
  ::msgcat::mcset sk "Adjust drawing area to given limits." [encoding convertfrom utf-8 "Prisp\303\264sobi\305\245 pracovn\303\272 plochu dan\303\275m limitom."]
  ::msgcat::mcset sq "Adjust drawing area to given limits." [encoding convertfrom utf-8 "permireso fushen e vizatimit deri ne kufijt e dhene."]

  ::msgcat::mcset bg "Auto adjust" [encoding convertfrom utf-8 "\320\220\320\262\321\202\320\276\320\274\320\260\321\202\320\270\321\207\320\275\320\276 \320\276\320\277\321\200\320\265\320\264\320\265\320\273\321\217\320\275\320\265"]
  ::msgcat::mcset cz "Auto adjust" [encoding convertfrom utf-8 "Auto p\305\231izp\305\257s."]
  ::msgcat::mcset de "Auto adjust" [encoding convertfrom utf-8 "Automatisch anpassen"]
  ::msgcat::mcset el "Auto adjust" [encoding convertfrom utf-8 "\316\221\317\205\317\204\317\214\316\274\316\261\317\204\316\267 \317\200\317\201\316\277\317\203\316\261\317\201\316\274\316\277\316\263\316\256"]
  ::msgcat::mcset en "Auto adjust" [encoding convertfrom utf-8 "Auto adjust"]
  ::msgcat::mcset es "Auto adjust" [encoding convertfrom utf-8 "Autoajustar"]
  ::msgcat::mcset it "Auto adjust" [encoding convertfrom utf-8 "Auto-ridimensiona"]
  ::msgcat::mcset ru "Auto adjust" [encoding convertfrom utf-8 "\320\220\320\262\321\202\320\276"]
  ::msgcat::mcset sk "Auto adjust" [encoding convertfrom utf-8 "Automaticky"]
  ::msgcat::mcset sq "Auto adjust" [encoding convertfrom utf-8 "permiresimi automatik"]

  ::msgcat::mcset bg "Adjust drawing area to automatically calculated limits." [encoding convertfrom utf-8 "\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\270 \320\260\320\262\321\202\320\276\320\274\320\260\321\202\320\270\321\207\320\275\320\276 \320\267\320\276\320\275\320\260\321\202\320\260 \320\267\320\260 \321\207\320\265\321\200\321\202\320\260\320\275\320\265"]
  ::msgcat::mcset cz "Adjust drawing area to automatically calculated limits." [encoding convertfrom utf-8 "Automaticky p\305\231izp\305\257sob\303\255 kresl\303\255c\303\255 plochu v\305\241em objekt\305\257m."]
  ::msgcat::mcset de "Adjust drawing area to automatically calculated limits." [encoding convertfrom utf-8 "Zeichenfl\303\244che an berechnete Begrenzung anpassen."]
  ::msgcat::mcset el "Adjust drawing area to automatically calculated limits." [encoding convertfrom utf-8 "\316\240\317\201\316\277\317\203\316\261\317\201\316\274\316\277\316\263\316\256 \316\265\317\200\316\271\317\206\316\254\316\275\316\265\316\271\316\261\317\202 \317\203\317\207\316\265\316\264\316\257\316\277\317\205 \317\203\317\204\316\261 \317\214\317\201\316\271\316\261 \317\200\316\277\317\205 \316\261\317\205\317\204\316\277\316\274\316\254\317\204\317\211\317\202 \316\277\317\201\316\257\317\203\317\204\316\267\316\272\316\261\316\275"]
  ::msgcat::mcset en "Adjust drawing area to automatically calculated limits." [encoding convertfrom utf-8 "Adjust drawing area to automatically calculated limits."]
  ::msgcat::mcset es "Adjust drawing area to automatically calculated limits." [encoding convertfrom utf-8 "Ajustar \303\241rea de dibujo autom\303\241ticamente."]
  ::msgcat::mcset it "Adjust drawing area to automatically calculated limits." [encoding convertfrom utf-8 "Ridimensiona l'area di disegno ai limiti calcolati"]
  ::msgcat::mcset ru "Adjust drawing area to automatically calculated limits." [encoding convertfrom utf-8 "\320\220\320\262\321\202\320\276\320\274\320\260\321\202\320\270\321\207\320\265\321\201\320\272\320\270 \321\203\321\201\321\202\320\260\320\275\320\276\320\262\320\270\321\202\321\214 \320\267\320\276\320\275\321\203 \321\200\320\270\321\201\320\276\320\262\320\260\320\275\320\270\321\217."]
  ::msgcat::mcset sk "Adjust drawing area to automatically calculated limits." [encoding convertfrom utf-8 "Automaticky prisp\303\264sobi\305\245 pracovn\303\272 plochu v\305\241etk\303\275m objektom."]
  ::msgcat::mcset sq "Adjust drawing area to automatically calculated limits." [encoding convertfrom utf-8 "permireso fushen e vizatimit ne kufirin e llogaritur automatikisht."]

  ::msgcat::mcset bg "zoom" [encoding convertfrom utf-8 "\320\274\320\260\321\211\320\260\320\261"]
  ::msgcat::mcset cz "zoom" [encoding convertfrom utf-8 "zoom"]
  ::msgcat::mcset de "zoom" [encoding convertfrom utf-8 "Zoom"]
  ::msgcat::mcset el "zoom" [encoding convertfrom utf-8 "\316\274\316\265\316\263\316\255\316\270\317\205\316\275\317\203\316\267"]
  ::msgcat::mcset en "zoom" [encoding convertfrom utf-8 "zoom"]
  ::msgcat::mcset es "zoom" [encoding convertfrom utf-8 "zoom"]
  ::msgcat::mcset it "zoom" [encoding convertfrom utf-8 "zoom"]
  ::msgcat::mcset ru "zoom" [encoding convertfrom utf-8 "\320\274\320\260\321\201\321\210\321\202\320\260\320\261"]
  ::msgcat::mcset sk "zoom" [encoding convertfrom utf-8 "zoom"]
  ::msgcat::mcset sq "zoom" [encoding convertfrom utf-8 "zmadho"]

  ::msgcat::mcset bg "Zoom drawing area." [encoding convertfrom utf-8 "\320\234\320\260\321\211\320\260\320\261\320\270\321\200\320\260\320\275\320\265 \320\275\320\260 \320\267\320\276\320\275\320\260\321\202\320\260 \320\267\320\260 \321\207\320\265\321\200\321\202\320\260\320\275\320\265"]
  ::msgcat::mcset cz "Zoom drawing area." [encoding convertfrom utf-8 "Zoom kresl\303\255c\303\255 plochy."]
  ::msgcat::mcset de "Zoom drawing area." [encoding convertfrom utf-8 "Zeichenfl\303\244che zoomen."]
  ::msgcat::mcset el "Zoom drawing area." [encoding convertfrom utf-8 "\316\210\316\273\316\265\316\263\317\207\316\277\317\202 \316\274\316\265\316\263\316\255\316\270\317\205\316\275\317\203\316\267\317\202. \316\232\316\254\316\275\317\204\316\265 \316\272\316\273\316\271\316\272 \317\203\317\204\316\277\316\275 \316\277\317\201\316\270\316\277\316\263\317\216\316\275\316\271\316\277 \316\263\316\271\316\261 \316\275\316\261 \316\264\316\265\316\257\317\204\316\265 \317\204\316\277 \316\274\316\265\316\275\316\277\317\215."]
  ::msgcat::mcset en "Zoom drawing area." [encoding convertfrom utf-8 "Zoom control. Click on rectangle to see menu."]
  ::msgcat::mcset es "Zoom drawing area." [encoding convertfrom utf-8 "Control del zoom. Clic en rect\303\241ngulo para ver men\303\272."]
  ::msgcat::mcset it "Zoom drawing area." [encoding convertfrom utf-8 "Zoom area di disegno"]
  ::msgcat::mcset ru "Zoom drawing area." [encoding convertfrom utf-8 "\320\234\320\260\321\201\321\210\321\202\320\260\320\261\320\270\321\200\320\276\320\262\320\260\321\202\321\214 \320\267\320\276\320\275\321\203 \321\200\320\270\321\201\320\276\320\262\320\260\320\275\320\270\321\217."]
  ::msgcat::mcset sk "Zoom drawing area." [encoding convertfrom utf-8 "Zoom pracovnej plochy."]
  ::msgcat::mcset sq "Zoom drawing area." [encoding convertfrom utf-8 "kontrolli I zmadhimit. Kliko ne gjashtekendesh te shohesh menyn"]

  ::msgcat::mcset bg "loading commands module ..." [encoding convertfrom utf-8 "\320\267\320\260\321\200\320\265\320\266\320\264\320\260\320\275\320\265 \320\275\320\260 \320\274\320\276\320\264\321\203\320\273\320\260 \320\267\320\260 \320\272\320\276\320\274\320\260\320\275\320\264\320\270"]
  ::msgcat::mcset cz "loading commands module ..." [encoding convertfrom utf-8 "nahr\303\241v\303\241m p\305\231\303\255kazov\303\275 modul ..."]
  ::msgcat::mcset de "loading commands module ..." [encoding convertfrom utf-8 "Lade Befehlsmodul ..."]
  ::msgcat::mcset el "loading commands module ..." [encoding convertfrom utf-8 "\317\206\317\214\317\201\317\204\316\271\317\203\316\267 \316\265\316\275\317\214\317\204\316\267\317\204\316\261 \316\265\316\275\317\204\316\277\316\273\317\216\316\275..."]
  ::msgcat::mcset en "loading commands module ..." [encoding convertfrom utf-8 "loading commands module ..."]
  ::msgcat::mcset es "loading commands module ..." [encoding convertfrom utf-8 "comandos ..."]
  ::msgcat::mcset it "loading commands module ..." [encoding convertfrom utf-8 "modulo comandi ..."]
  ::msgcat::mcset ru "loading commands module ..." [encoding convertfrom utf-8 "\320\267\320\260\320\263\321\200\321\203\320\267\320\272\320\260 \320\274\320\276\320\264\321\203\320\273\321\217 \320\272\320\276\320\274\320\260\320\275\320\264..."]
  ::msgcat::mcset sk "loading commands module ..." [encoding convertfrom utf-8 "pr\303\255kazov\303\275 modul..."]
  ::msgcat::mcset sq "loading commands module ..." [encoding convertfrom utf-8 "duke lexuar modulin komandues\342\200\246"]

  ::msgcat::mcset bg "Select command." [encoding convertfrom utf-8 "\320\230\320\267\320\261\320\265\321\200\320\265\321\202\320\265 \320\272\320\276\320\274\320\260\320\275\320\264\320\260"]
  ::msgcat::mcset cz "Select command." [encoding convertfrom utf-8 "V\303\275b\304\233r p\305\231\303\255kazu."]
  ::msgcat::mcset de "Select command." [encoding convertfrom utf-8 "W\303\244hle Befehl."]
  ::msgcat::mcset el "Select command." [encoding convertfrom utf-8 "\316\232\316\254\316\275\317\204\316\265 \316\272\316\273\316\271\316\272 \317\203\316\265 \316\274\316\271\316\261 \316\263\317\201\316\261\316\274\316\274\316\256 \316\263\316\271\316\261 \316\275\316\261 \317\203\317\205\316\273\316\273\316\255\316\276\316\265\317\204\316\265 \317\204\316\277 \316\261\316\275\317\204\316\271\316\272\316\265\316\257\316\274\316\265\316\275\316\277 \317\203\317\204\316\277\316\275 \316\272\316\261\316\274\316\262\316\254 \316\272\316\261\316\271 \317\204\316\277 \316\261\316\275\317\204\316\257\316\270\316\265\317\204\316\277."]
  ::msgcat::mcset en "Select command." [encoding convertfrom utf-8 "Click a line to get corresponding object selected on canvas or vice versa."]
  ::msgcat::mcset es "Select command." [encoding convertfrom utf-8 "Al clicar una de las l\303\255neas, se resaltar\303\241 en la topo el objeto correspondiente, y viceversa."]
  ::msgcat::mcset it "Select command." [encoding convertfrom utf-8 "Seleziona comando."]
  ::msgcat::mcset ru "Select command." [encoding convertfrom utf-8 "\320\222\321\213\320\261\320\265\321\200\320\270\321\202\320\265 \320\272\320\276\320\274\320\260\320\275\320\264\321\203."]
  ::msgcat::mcset sk "Select command." [encoding convertfrom utf-8 "Vyber pr\303\255kaz."]
  ::msgcat::mcset sq "Select command." [encoding convertfrom utf-8 "kliko ne resht qe te fitosh objektin e deshiruar I zgjedhur ne pelhure ose anasjelltas."]

  ::msgcat::mcset bg "Action button." [encoding convertfrom utf-8 "\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\265"]
  ::msgcat::mcset cz "Action button." [encoding convertfrom utf-8 "Tla\304\215\303\255tko Akce."]
  ::msgcat::mcset de "Action button." [encoding convertfrom utf-8 "Aktionsknopf."]
  ::msgcat::mcset el "Action button." [encoding convertfrom utf-8 "\316\240\316\261\317\204\317\216\316\275\317\204\316\261\317\202 \316\265\316\264\317\216 \316\274\317\200\316\277\317\201\316\265\316\257\317\204\316\265 \316\275\316\261 \316\265\316\271\317\203\316\254\316\263\316\265\317\204\316\265 \316\261\316\275\317\204\316\271\316\272\316\265\316\257\316\274\316\265\316\275\316\261 \316\274\316\265 \317\204\316\277 \317\200\316\277\316\275\317\204\316\257\316\272\316\271. \316\240\316\261\317\204\316\256\317\203\317\204\316\265 \317\204\316\267\316\275 \316\265\316\275\317\204\316\277\316\273\316\256 \316\275\316\261 \316\264\316\265\316\257\317\204\316\265 \317\204\316\277 \316\274\316\265\316\275\316\277\317\215."]
  ::msgcat::mcset en "Action button." [encoding convertfrom utf-8 "After clicking this button, you can insert objects by mouse. Click on action to see menu."]
  ::msgcat::mcset es "Action button." [encoding convertfrom utf-8 "Tras pulsar este bot\303\263n, se pueden insertar con el rat\303\263n puntos, lineas, etc. Clic en acci\303\263n para ver men\303\272."]
  ::msgcat::mcset it "Action button." [encoding convertfrom utf-8 "Bottone di azione."]
  ::msgcat::mcset ru "Action button." [encoding convertfrom utf-8 "\320\224\320\265\320\271\321\201\321\202\320\262\320\270\321\217."]
  ::msgcat::mcset sk "Action button." [encoding convertfrom utf-8 "Gomb\303\255k - akcia."]
  ::msgcat::mcset sq "Action button." [encoding convertfrom utf-8 "pasi te klikoni kete buton, ju mund te futni objekte me mi. kliko ne aksion qe te shohesh menyn."]

  ::msgcat::mcset bg "Switch mouse mode to select objects." [encoding convertfrom utf-8 "\320\237\321\200\320\265\320\274\320\270\320\275\320\265\321\202\320\265 \320\275\320\260 \320\274\320\270\321\210\320\272\320\260 \320\267\320\260 \320\264\320\260 \320\270\320\267\320\261\320\270\321\200\320\260\321\202\320\265 \320\276\320\261\320\265\320\272\321\202\320\270"]
  ::msgcat::mcset cz "Switch mouse mode to select objects." [encoding convertfrom utf-8 "P\305\231epnut\303\255 my\305\241i do v\303\275b\304\233rov\303\251ho m\303\263du."]
  ::msgcat::mcset de "Switch mouse mode to select objects." [encoding convertfrom utf-8 "Maus umschalten um Objekte auszuw\303\244hlen."]
  ::msgcat::mcset el "Switch mouse mode to select objects." [encoding convertfrom utf-8 "\316\221\317\206\316\277\317\215 \317\200\316\261\317\204\316\256\317\203\317\204\316\265 \316\265\316\264\317\216 \316\274\317\200\316\277\317\201\316\265\316\257\317\204\316\265 \316\275\316\261 \317\203\317\205\316\273\316\273\316\255\316\276\316\265\317\204\316\265 \316\261\316\275\317\204\316\271\316\272\316\265\316\257\316\274\316\265\316\275\316\261 \317\203\317\204\316\277\316\275 \316\272\316\261\316\274\316\262\316\254 \316\274\316\265 \317\204\316\277 \317\200\316\277\316\275\317\204\316\257\316\272\316\271."]
  ::msgcat::mcset en "Switch mouse mode to select objects." [encoding convertfrom utf-8 "After clicking this button, you can select objects on canvas by mouse."]
  ::msgcat::mcset es "Switch mouse mode to select objects." [encoding convertfrom utf-8 "Tras clicar aqu\303\255, podr\303\241s seleccionar cosas en la topo con el rat\303\263n."]
  ::msgcat::mcset it "Switch mouse mode to select objects." [encoding convertfrom utf-8 "Cambia la modalit\303\240 del mouse per selezionare oggetti."]
  ::msgcat::mcset ru "Switch mouse mode to select objects." [encoding convertfrom utf-8 "\320\237\320\265\321\200\320\265\320\272\320\273\321\216\321\207\320\270\321\202\320\265\321\201\321\214 \320\275\320\260 \320\274\321\213\321\210\321\214, \321\207\321\202\320\276\320\261\321\213 \320\262\321\213\320\261\320\270\321\200\320\260\321\202\321\214 \320\276\320\261\321\212\320\265\320\272\321\202\321\213."]
  ::msgcat::mcset sk "Switch mouse mode to select objects." [encoding convertfrom utf-8 "Nastav m\303\263d my\305\241i na vyberanie objektov."]
  ::msgcat::mcset sq "Switch mouse mode to select objects." [encoding convertfrom utf-8 "pasi te klikosh kete buton, ju mund te zgjedhni objektet ne pelhure me mi."]

  ::msgcat::mcset bg "Action" [encoding convertfrom utf-8 "\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\265"]
  ::msgcat::mcset cz "Action" [encoding convertfrom utf-8 "Akce"]
  ::msgcat::mcset de "Action" [encoding convertfrom utf-8 "Aktion"]
  ::msgcat::mcset el "Action" [encoding convertfrom utf-8 "\316\225\316\275\317\204\316\277\316\273\316\256"]
  ::msgcat::mcset en "Action" [encoding convertfrom utf-8 "Action"]
  ::msgcat::mcset es "Action" [encoding convertfrom utf-8 "Acci\303\263n"]
  ::msgcat::mcset it "Action" [encoding convertfrom utf-8 "Azione"]
  ::msgcat::mcset ru "Action" [encoding convertfrom utf-8 "\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\265"]
  ::msgcat::mcset sk "Action" [encoding convertfrom utf-8 "Akcia"]
  ::msgcat::mcset sq "Action" [encoding convertfrom utf-8 "aksion"]

  ::msgcat::mcset bg "Configure action assigned to action button." [encoding convertfrom utf-8 "\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\265\321\202\320\276, \320\272\320\276\320\265\321\202\320\276 \320\270\320\267\320\261\320\265\321\200\320\265\321\202\320\265, \321\211\320\265 \320\261\321\212\320\264\320\265 \320\270\320\267\320\277\321\212\320\273\320\275\320\265\320\275\320\265, \320\272\320\273\320\270\320\272\320\260\320\271\320\272\320\270 \320\262/\321\203 \320\261\321\203\321\202\320\276\320\275\320\260 '\320\222\320\274\321\212\320\272\320\275\320\270 <\320\276\320\261\320\265\320\272\321\202>'"]
  ::msgcat::mcset cz "Configure action assigned to action button." [encoding convertfrom utf-8 "Nastav\303\255 akci pro tla\304\215\303\255tko akc\303\255."]
  ::msgcat::mcset de "Configure action assigned to action button." [encoding convertfrom utf-8 "Dem Aktionsknopf zugewiesene Aktion konfigurieren."]
  ::msgcat::mcset el "Configure action assigned to action button." [encoding convertfrom utf-8 "\316\237\317\201\316\271\317\203\316\274\317\214\317\202 \316\265\316\275\317\204\316\277\316\273\316\256\317\202 \317\200\316\277\317\205 \316\270\316\261 \316\265\316\272\317\204\316\265\316\273\316\265\316\257\317\204\316\261\316\271 \316\272\316\254\316\275\316\277\316\275\317\204\316\261\317\202 \316\272\316\273\316\271\316\272 \317\203\317\204\316\277 \316\272\316\277\317\205\316\274\317\200\316\257 \316\225\316\271\317\203\316\261\316\263\317\211\316\263\316\256 <\316\261\316\275\317\204\316\271\316\272\316\265\316\257\316\274\316\265\316\275\316\277>"]
  ::msgcat::mcset en "Configure action assigned to action button." [encoding convertfrom utf-8 "Action you choose will be executed by clicking on Insert  button."]
  ::msgcat::mcset es "Configure action assigned to action button." [encoding convertfrom utf-8 "Clic para ver men\303\272. La acci\303\263n que escojas ser\303\241 la que ejecute el bot\303\263n Insertar "]
  ::msgcat::mcset it "Configure action assigned to action button." [encoding convertfrom utf-8 "Configura l'azione assegnata al bottone d'azione."]
  ::msgcat::mcset ru "Configure action assigned to action button." [encoding convertfrom utf-8 "\320\222\321\213\320\261\320\265\321\200\320\270\321\202\320\265 \320\264\320\265\320\271\321\201\321\202\320\262\320\270\320\265, \320\275\320\260\320\267\320\275\320\260\321\207\320\265\320\275\320\275\320\276\320\265 \320\264\320\273\321\217 \320\272\320\275\320\276\320\277\320\272\320\270."]
  ::msgcat::mcset sk "Configure action assigned to action button." [encoding convertfrom utf-8 "Nakonfiguruj akciu pre gomb\303\255k - akcia."]
  ::msgcat::mcset sq "Configure action assigned to action button." [encoding convertfrom utf-8 "aksionin qe e zgjedhni do te egzekutohet me klikimin ne butonin Fute "]

  ::msgcat::mcset bg "Move up" [encoding convertfrom utf-8 "\320\235\320\260\320\263\320\276\321\200\320\265"]
  ::msgcat::mcset cz "Move up" [encoding convertfrom utf-8 "P\305\231esun v\303\275\305\241"]
  ::msgcat::mcset de "Move up" [encoding convertfrom utf-8 "Schiebe nach oben"]
  ::msgcat::mcset el "Move up" [encoding convertfrom utf-8 "\316\234\316\265\317\204\316\261\316\272\316\257\316\275\316\267\317\203\316\267 \317\200\317\201\316\277\317\202 \317\204\316\261 \317\200\316\254\316\275\317\211"]
  ::msgcat::mcset en "Move up" [encoding convertfrom utf-8 "Move up"]
  ::msgcat::mcset es "Move up" [encoding convertfrom utf-8 "Arriba"]
  ::msgcat::mcset it "Move up" [encoding convertfrom utf-8 "Sposta s\303\271"]
  ::msgcat::mcset ru "Move up" [encoding convertfrom utf-8 "\320\222\320\262\320\265\321\200\321\205"]
  ::msgcat::mcset sk "Move up" [encoding convertfrom utf-8 "Presu\305\210 vy\305\241\305\241ie"]
  ::msgcat::mcset sq "Move up" [encoding convertfrom utf-8 "levize lart"]

  ::msgcat::mcset bg "Move file command up in the list." [encoding convertfrom utf-8 "\320\237\321\200\320\265\320\274\320\265\321\201\321\202\320\270 \320\275\320\260\320\263\320\276\321\200\320\265 \320\262 \321\201\320\277\320\270\321\201\321\212\320\272\320\260 \321\204\320\260\320\271\320\273\320\260 \321\201 \320\272\320\276\320\274\320\260\320\275\320\264\320\270"]
  ::msgcat::mcset cz "Move file command up in the list." [encoding convertfrom utf-8 "P\305\231esune p\305\231\303\255kaz v\303\275\305\241 v seznamu p\305\231\303\255kaz\305\257."]
  ::msgcat::mcset de "Move file command up in the list." [encoding convertfrom utf-8 "In der Liste nach oben schieben."]
  ::msgcat::mcset el "Move file command up in the list." [encoding convertfrom utf-8 "\316\234\316\265\317\204\316\261\316\272\316\257\316\275\316\267\317\203\316\267 \316\261\316\275\317\204\316\271\316\272\316\265\316\271\316\274\316\255\316\275\316\277\317\205 \317\210\316\267\316\273\317\214\317\204\316\265\317\201\316\261 \317\203\317\204\316\267\316\275 \316\273\316\257\317\203\317\204\316\261. \316\247\317\201\316\256\317\203\316\271\316\274\316\277 \317\203\316\265 \317\200\316\265\317\201\316\257\317\200\317\204\317\211\317\203\316\267 \317\200\316\277\317\205 \316\265\316\257\316\275\316\261\316\271 \317\203\316\265 \316\273\316\254\316\270\316\277\317\202 \317\203\316\272\317\201\316\254\317\200 \317\204\316\277 \316\261\316\275\317\204\316\271\316\272\316\265\316\257\316\274\316\265\316\275\316\277."]
  ::msgcat::mcset en "Move file command up in the list." [encoding convertfrom utf-8 "Move object up in the list. Use if object is in wrong scrap."]
  ::msgcat::mcset es "Move file command up in the list." [encoding convertfrom utf-8 "Desplaza el objeto hacia arriba en la lista. Usar si el objeto est\303\241 en lugar err\303\263neo."]
  ::msgcat::mcset it "Move file command up in the list." [encoding convertfrom utf-8 "Sposta il comando in s\303\271 nella lista."]
  ::msgcat::mcset ru "Move file command up in the list." [encoding convertfrom utf-8 "\320\237\320\265\321\200\320\265\320\274\320\265\321\201\321\202\320\270\321\202\321\214 \320\272\320\276\320\274\320\260\320\275\320\264\321\203 \320\262\320\262\320\265\321\200\321\205 \320\277\320\276 \321\204\320\260\320\271\320\273\321\203."]
  ::msgcat::mcset sk "Move file command up in the list." [encoding convertfrom utf-8 "Presu\305\210 pr\303\255kaz vy\305\241\305\241ie v zozname pr\303\255kazov."]
  ::msgcat::mcset sq "Move file command up in the list." [encoding convertfrom utf-8 "levize objektin lart ne liste. Perdor nese objekti eshte ne deponi te gabuar."]

  ::msgcat::mcset bg "Move down" [encoding convertfrom utf-8 "\320\235\320\260\320\264\320\276\320\273\321\203"]
  ::msgcat::mcset cz "Move down" [encoding convertfrom utf-8 "P\305\231esun n\303\255\305\276"]
  ::msgcat::mcset de "Move down" [encoding convertfrom utf-8 "Schiebe nach unten"]
  ::msgcat::mcset el "Move down" [encoding convertfrom utf-8 "\316\234\316\265\317\204\316\261\316\272\316\257\316\275\316\267\317\203\316\267 \317\200\317\201\316\277\317\202 \317\204\316\261 \316\272\316\254\317\204\317\211"]
  ::msgcat::mcset en "Move down" [encoding convertfrom utf-8 "Move down"]
  ::msgcat::mcset es "Move down" [encoding convertfrom utf-8 "Abajo"]
  ::msgcat::mcset it "Move down" [encoding convertfrom utf-8 "Sposta gi\303\271"]
  ::msgcat::mcset ru "Move down" [encoding convertfrom utf-8 "\320\222\320\275\320\270\320\267"]
  ::msgcat::mcset sk "Move down" [encoding convertfrom utf-8 "Presu\305\210 ni\305\276\305\241ie"]
  ::msgcat::mcset sq "Move down" [encoding convertfrom utf-8 "levize poshte"]

  ::msgcat::mcset bg "Move file command down in the list." [encoding convertfrom utf-8 "\320\237\321\200\320\265\320\274\320\265\321\201\321\202\320\270 \320\275\320\260\320\264\320\276\320\273\321\203 \320\262 \321\201\320\277\320\270\321\201\321\212\320\272\320\260 \321\204\320\260\320\271\320\273\320\260 \321\201 \320\272\320\276\320\274\320\260\320\275\320\264\320\270"]
  ::msgcat::mcset cz "Move file command down in the list." [encoding convertfrom utf-8 "P\305\231esune p\305\231\303\255kaz n\303\255\305\276 v seznamu p\305\231\303\255kaz\305\257."]
  ::msgcat::mcset de "Move file command down in the list." [encoding convertfrom utf-8 "In der Liste nach unten schieben."]
  ::msgcat::mcset el "Move file command down in the list." [encoding convertfrom utf-8 "\316\234\316\265\317\204\316\261\316\272\316\257\316\275\316\267\317\203\316\267 \316\261\316\275\317\204\316\271\316\272\316\265\316\271\316\274\316\255\316\275\316\277\317\205 \317\207\316\261\316\274\316\267\316\273\317\214\317\204\316\265\317\201\316\261 \317\203\317\204\316\267\316\275 \316\273\316\257\317\203\317\204\316\261. \316\247\317\201\316\256\317\203\316\271\316\274\316\277 \317\203\316\265 \317\200\316\265\317\201\316\257\317\200\317\204\317\211\317\203\316\267 \317\200\316\277\317\205 \316\265\316\257\316\275\316\261\316\271 \317\203\316\265 \316\273\316\254\316\270\316\277\317\202 \317\203\316\272\317\201\316\254\317\200 \317\204\316\277 \316\261\316\275\317\204\316\271\316\272\316\265\316\257\316\274\316\265\316\275\316\277."]
  ::msgcat::mcset en "Move file command down in the list." [encoding convertfrom utf-8 "Move object down in the list. Use if object is in wrong scrap."]
  ::msgcat::mcset es "Move file command down in the list." [encoding convertfrom utf-8 "Desplaza el objeto hacia abajo en la lista. Usar si el objeto est\303\241 en lugar err\303\263neo."]
  ::msgcat::mcset it "Move file command down in the list." [encoding convertfrom utf-8 "Sposta il comando in gi\303\271 nella lista."]
  ::msgcat::mcset ru "Move file command down in the list." [encoding convertfrom utf-8 "\320\237\320\265\321\200\320\265\320\274\320\265\321\201\321\202\320\270\321\202\321\214 \320\272\320\276\320\274\320\260\320\275\320\264\321\203 \320\262\320\275\320\270\320\267 \320\277\320\276 \321\204\320\260\320\271\320\273\321\203."]
  ::msgcat::mcset sk "Move file command down in the list." [encoding convertfrom utf-8 "Presu\305\210 pr\303\255kaz ni\305\276\305\241ie v zozname pr\303\255kazov."]
  ::msgcat::mcset sq "Move file command down in the list." [encoding convertfrom utf-8 "levize objektin poshte ne liste. Perdore nese objekti eshte ne deponi te gabuar."]

  ::msgcat::mcset bg "Move file command to given position." [encoding convertfrom utf-8 "\320\237\321\200\320\265\320\274\320\265\321\201\321\202\320\270 \321\204\320\260\320\271\320\273\320\260 \321\201 \320\272\320\276\320\274\320\260\320\275\320\264\320\270 \320\275\320\260 \321\203\320\272\320\260\320\267\320\260\320\275\320\260\321\202\320\260 \320\277\320\276\320\267\320\270\321\206\320\270\321\217"]
  ::msgcat::mcset cz "Move file command to given position." [encoding convertfrom utf-8 "P\305\231esunout p\305\231\303\255kaz na danou pozici v seznamu."]
  ::msgcat::mcset de "Move file command to given position." [encoding convertfrom utf-8 "Befehl an angegebene Position schieben."]
  ::msgcat::mcset el "Move file command to given position." [encoding convertfrom utf-8 "\316\234\316\265\317\204\316\261\316\272\316\257\316\275\316\267\317\203\316\267 \316\261\316\275\317\204\316\271\316\272\316\265\316\271\316\274\316\255\316\275\316\277\317\205 \317\203\316\265 \317\203\317\205\316\263\316\272\316\265\316\272\317\201\316\271\316\274\316\255\316\275\316\267 \316\270\316\255\317\203\316\267 (\316\270\316\255\317\203\316\267 = \316\261\317\201\316\271\316\270\316\274\317\214\317\202 \317\203\316\265 \316\272\316\254\316\270\316\265 \317\203\316\265\316\271\317\201\316\254)."]
  ::msgcat::mcset en "Move file command to given position." [encoding convertfrom utf-8 "Move object to given position (position = number on each line)."]
  ::msgcat::mcset es "Move file command to given position." [encoding convertfrom utf-8 "Mover el objeto a la posici\303\263n indicada (n\303\272mero al principio de cada l\303\255nea)."]
  ::msgcat::mcset it "Move file command to given position." [encoding convertfrom utf-8 "Sposta il comando nella posizione specificata."]
  ::msgcat::mcset ru "Move file command to given position." [encoding convertfrom utf-8 "\320\237\320\265\321\200\320\265\320\274\320\265\321\201\321\202\320\270\321\202\321\214 \320\272\320\276\320\274\320\260\320\275\320\264\321\203 \320\262 \321\203\320\272\320\260\320\267\320\260\320\275\320\275\321\203\321\216 \320\277\320\276\320\267\320\270\321\206\320\270\321\216 \320\262 \321\204\320\260\320\271\320\273\320\265."]
  ::msgcat::mcset sk "Move file command to given position." [encoding convertfrom utf-8 "Presu\305\210 pr\303\255kaz na dan\303\272 poz\303\255ciu v zozname."]
  ::msgcat::mcset sq "Move file command to given position." [encoding convertfrom utf-8 "levize objektin ne pozicion te dhanun( pozicioni = numri ne secilen rjesht)."]

  ::msgcat::mcset bg "Select destination scrap and position in it." [encoding convertfrom utf-8 "\320\230\320\267\320\261\320\265\321\200\320\265\321\202\320\265 \320\274\320\265\321\201\321\202\320\276\320\275\320\260\320\267\320\275\320\260\321\207\320\265\320\275\320\270\320\265\321\202\320\276 \320\275\320\260 \321\201\320\272\321\200\320\260\320\277 \320\270 \320\277\320\276\320\267\320\270\321\206\320\270\321\217\321\202\320\260 \320\262 \320\275\320\265\320\263\320\276"]
  ::msgcat::mcset cz "Select destination scrap and position in it." [encoding convertfrom utf-8 "V\303\275b\304\233r c\303\255lov\303\251ho scrapu a pozice v n\304\233m."]
  ::msgcat::mcset de "Select destination scrap and position in it." [encoding convertfrom utf-8 "Zielskizze ausw\303\244hlen und positionieren."]
  ::msgcat::mcset el "Select destination scrap and position in it." [encoding convertfrom utf-8 "\316\225\317\200\316\271\316\273\316\255\316\276\316\265\317\204\316\265 \317\204\316\277 \317\203\316\272\317\201\316\261\317\200 \317\200\317\201\316\277\316\277\317\201\316\271\317\203\316\274\316\277\317\215 \316\272\316\261\316\271 \317\204\316\267\316\275 \316\270\316\255\317\203\316\267 \316\274\316\255\317\203\316\261 \317\203\316\265 \316\261\317\205\317\204\317\214."]
  ::msgcat::mcset en "Select destination scrap and position in it." [encoding convertfrom utf-8 "Select destination scrap and position in it."]
  ::msgcat::mcset es "Select destination scrap and position in it." [encoding convertfrom utf-8 "Seleccionar croquis de destino y la posici\303\263n en \303\251l."]
  ::msgcat::mcset it "Select destination scrap and position in it." [encoding convertfrom utf-8 "Selezione lo scrap di destinazione e posizionati in esso."]
  ::msgcat::mcset ru "Select destination scrap and position in it." [encoding convertfrom utf-8 "\320\243\320\272\320\260\320\266\320\270\321\202\320\265 \321\206\320\265\320\273\320\265\320\262\320\276\320\271 \321\201\320\272\321\200\320\260\320\277 \320\270 \320\277\320\276\320\267\320\270\321\206\320\270\321\216 \320\262 \320\275\320\265\320\274."]
  ::msgcat::mcset sk "Select destination scrap and position in it." [encoding convertfrom utf-8 "Nastav cie\304\276ov\303\275 scrap a poz\303\255ciu v \305\210om."]
  ::msgcat::mcset sq "Select destination scrap and position in it." [encoding convertfrom utf-8 "zgjedhe destinacionin per deponi dhe poziciono ne te."]

  ::msgcat::mcset bg "Update text" [encoding convertfrom utf-8 "\320\236\320\261\320\275\320\276\320\262\320\270 \321\202\320\265\320\272\321\201\321\202\320\260"]
  ::msgcat::mcset cz "Update text" [encoding convertfrom utf-8 "Aktualizovat"]
  ::msgcat::mcset de "Update text" [encoding convertfrom utf-8 "Text aktualisieren"]
  ::msgcat::mcset el "Update text" [encoding convertfrom utf-8 "\316\221\316\275\316\261\316\275\316\255\317\211\317\203\316\267 \316\272\316\265\316\271\316\274\316\255\316\275\316\277\317\205"]
  ::msgcat::mcset en "Update text" [encoding convertfrom utf-8 "Update text"]
  ::msgcat::mcset es "Update text" [encoding convertfrom utf-8 "Actualizar texto"]
  ::msgcat::mcset it "Update text" [encoding convertfrom utf-8 "Aggiorna testo"]
  ::msgcat::mcset ru "Update text" [encoding convertfrom utf-8 "\320\241\320\276\321\205\321\200\320\260\320\275\320\270\321\202\321\214 \321\202\320\265\320\272\321\201\321\202"]
  ::msgcat::mcset sk "Update text" [encoding convertfrom utf-8 "Aktualizuj text"]
  ::msgcat::mcset sq "Update text" [encoding convertfrom utf-8 "aktualizo tekstin"]

  ::msgcat::mcset bg "Press this button to save code you have written." [encoding convertfrom utf-8 "\320\235\320\260\321\202\320\270\321\201\320\275\320\265\321\202\320\265 \321\202\320\276\320\267\320\270 \320\261\321\203\321\202\320\276\320\275 \320\267\320\260 \320\264\320\260 \320\267\320\260\320\277\320\260\320\267\320\270\321\202\320\265 \320\275\320\260\320\277\320\270\321\201\320\260\320\275\320\270\321\217\321\202 \320\272\320\276\320\264"]
  ::msgcat::mcset cz "Press this button to save code you have written." [encoding convertfrom utf-8 "Stiskn\304\233te toto tla\304\215\303\255tko pro ulo\305\276en\303\255 V\303\241mi zapsan\303\251ho k\303\263du."]
  ::msgcat::mcset de "Press this button to save code you have written." [encoding convertfrom utf-8 "Diesen Knopf dr\303\274cken, um Daten zu speichern."]
  ::msgcat::mcset el "Press this button to save code you have written." [encoding convertfrom utf-8 "\316\240\316\261\317\204\316\256\317\203\317\204\316\265 \317\204\316\277 \316\272\316\277\317\205\316\274\317\200\316\257 \316\275\316\261 \316\261\317\200\316\277\316\270\316\267\316\272\316\265\317\205\317\204\316\265\316\257 \316\277 \316\272\317\216\316\264\316\271\316\272\316\261\317\202 \317\200\316\277\317\205 \316\263\317\201\316\254\317\210\316\261\317\204\316\265"]
  ::msgcat::mcset en "Press this button to save code you have written." [encoding convertfrom utf-8 "Press this button to save code you have written."]
  ::msgcat::mcset es "Press this button to save code you have written." [encoding convertfrom utf-8 "Clicar aqu\303\255 para guardar los cambios hechos en el c\303\263digo."]
  ::msgcat::mcset it "Press this button to save code you have written." [encoding convertfrom utf-8 "Premi questo bottone per salvare il codice che hai scritto."]
  ::msgcat::mcset ru "Press this button to save code you have written." [encoding convertfrom utf-8 "\320\235\320\260\320\266\320\274\320\270\321\202\320\265 \321\215\321\202\321\203 \320\272\320\275\320\276\320\277\320\272\321\203 \320\264\320\273\321\217 \321\201\320\276\321\205\321\200\320\260\320\275\320\265\320\275\320\270\321\217 \320\275\320\260\320\277\320\270\321\201\320\260\320\275\320\275\320\276\320\263\320\276 \320\272\320\276\320\264\320\260."]
  ::msgcat::mcset sk "Press this button to save code you have written." [encoding convertfrom utf-8 "Stla\304\215te toto tla\304\215\303\255tko pre ulo\305\276enie Vami zap\303\255san\303\251ho k\303\263du."]
  ::msgcat::mcset sq "Press this button to save code you have written." [encoding convertfrom utf-8 "shtype kete buton ta ruajsh kodin te cilin e ke shkru."]

  ::msgcat::mcset bg "Editor for free text in therion 2D file." [encoding convertfrom utf-8 "\320\240\320\265\320\264\320\260\320\272\321\202\320\276\321\200 \320\267\320\260 \320\277\321\200\320\276\320\270\320\267\320\262\320\276\320\273\320\265\320\275 \321\202\320\265\320\272\321\201\321\202 \320\262 2D \321\204\320\260\320\271\320\273\320\260"]
  ::msgcat::mcset cz "Editor for free text in therion 2D file." [encoding convertfrom utf-8 "Editor pro text ve 2D souborech."]
  ::msgcat::mcset de "Editor for free text in therion 2D file." [encoding convertfrom utf-8 "Editor f\303\274r Freitext in Therion 2D Datei."]
  ::msgcat::mcset el "Editor for free text in therion 2D file." [encoding convertfrom utf-8 "\316\247\317\201\316\267\317\203\316\271\316\274\316\277\317\200\316\277\316\271\316\265\316\257\317\204\316\265 \317\204\316\277\316\275 \316\265\317\200\316\265\316\276\316\265\317\201\316\263\316\261\317\203\317\204\316\256 \316\261\317\205\317\204\317\214 \316\263\316\271\316\261 \316\265\317\200\316\265\316\276\316\265\317\201\316\263\316\261\317\203\316\257\316\261 \316\261\317\201\317\207\316\265\316\257\317\211\316\275 .th2"]
  ::msgcat::mcset en "Editor for free text in therion 2D file." [encoding convertfrom utf-8 "Use this editor window to modify .th2 files."]
  ::msgcat::mcset es "Editor for free text in therion 2D file." [encoding convertfrom utf-8 "Usa este editor para modificar los archivos .th2. Otros editores dar\303\241n problemas."]
  ::msgcat::mcset it "Editor for free text in therion 2D file." [encoding convertfrom utf-8 "Editor di testo libero per il file 2D di therion."]
  ::msgcat::mcset ru "Editor for free text in therion 2D file." [encoding convertfrom utf-8 "\320\240\320\265\320\264\320\260\320\272\321\202\320\276\321\200 \320\277\321\200\320\276\320\270\320\267\320\262\320\276\320\273\321\214\320\275\320\276\320\263\320\276 \321\202\320\265\320\272\321\201\321\202\320\260 \320\262 2D \321\204\320\260\320\271\320\273\320\265."]
  ::msgcat::mcset sk "Editor for free text in therion 2D file." [encoding convertfrom utf-8 "Editor pre \305\241peci\303\241lne pr\303\255kazy v 2D s\303\272boroch."]
  ::msgcat::mcset sq "Editor for free text in therion 2D file." [encoding convertfrom utf-8 "perdore kete dritare per permiresim qe te modofikosh. Th2 arkivin."]

  ::msgcat::mcset bg "expression" [encoding convertfrom utf-8 "\320\270\320\267\321\200\320\260\320\267"]
  ::msgcat::mcset cz "expression" [encoding convertfrom utf-8 "v\303\275raz"]
  ::msgcat::mcset de "expression" [encoding convertfrom utf-8 "Muster"]
  ::msgcat::mcset el "expression" [encoding convertfrom utf-8 "\316\261\316\275\316\261\316\266\316\256\317\204\316\267\317\203\316\267 \316\263\316\271\316\261"]
  ::msgcat::mcset en "expression" [encoding convertfrom utf-8 "search for"]
  ::msgcat::mcset es "expression" [encoding convertfrom utf-8 "buscar"]
  ::msgcat::mcset it "expression" [encoding convertfrom utf-8 "testo"]
  ::msgcat::mcset ru "expression" [encoding convertfrom utf-8 "\320\262\321\213\321\200\320\260\320\266\320\265\320\275\320\270\320\265"]
  ::msgcat::mcset sk "expression" [encoding convertfrom utf-8 "v\303\275raz"]
  ::msgcat::mcset sq "expression" [encoding convertfrom utf-8 "kerko per"]

  ::msgcat::mcset bg "Enter search expression." [encoding convertfrom utf-8 "\320\222\321\212\320\262\320\265\320\264\320\265\321\202\320\265 \320\264\321\203\320\274\320\260/\320\270 \320\267\320\260 \321\202\321\212\321\200\321\201\320\265\320\275\320\265"]
  ::msgcat::mcset cz "Enter search expression." [encoding convertfrom utf-8 "Vlo\305\276te hledan\303\275 v\303\275raz."]
  ::msgcat::mcset de "Enter search expression." [encoding convertfrom utf-8 "Suchmuster eingeben."]
  ::msgcat::mcset el "Enter search expression." [encoding convertfrom utf-8 "\316\225\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \316\273\316\255\316\276\316\265\316\271\317\202 \316\263\316\271\316\261 \316\261\316\275\316\261\316\266\316\256\317\204\316\267\317\203\316\267"]
  ::msgcat::mcset en "Enter search expression." [encoding convertfrom utf-8 "Enter word(s) to search for."]
  ::msgcat::mcset es "Enter search expression." [encoding convertfrom utf-8 "Introducir palabra(s) a buscar."]
  ::msgcat::mcset it "Enter search expression." [encoding convertfrom utf-8 "Scrivi il testo da cercare."]
  ::msgcat::mcset ru "Enter search expression." [encoding convertfrom utf-8 "\320\222\320\262\320\265\320\264\320\270\321\202\320\265 \320\262\321\213\321\200\320\260\320\266\320\265\320\275\320\270\320\265 \320\277\320\276\320\270\321\201\320\272\320\260."]
  ::msgcat::mcset sk "Enter search expression." [encoding convertfrom utf-8 "Vlo\305\276te h\304\276adan\303\275 v\303\275raz."]
  ::msgcat::mcset sq "Enter search expression." [encoding convertfrom utf-8 "fute fjalin qe do ta kerkosh."]

  ::msgcat::mcset bg "regular expression" [encoding convertfrom utf-8 "\321\200\320\265\320\263\321\203\320\273\321\217\321\200\320\265\320\275 \320\270\320\267\321\200\320\260\320\267"]
  ::msgcat::mcset cz "regular expression" [encoding convertfrom utf-8 "regul\303\241rn\303\255 v\303\275raz"]
  ::msgcat::mcset de "regular expression" [encoding convertfrom utf-8 "Regul\303\244rer Ausdruck"]
  ::msgcat::mcset el "regular expression" [encoding convertfrom utf-8 "\316\247\317\201\316\256\317\203\316\267 \316\274\317\200\316\261\316\273\316\261\316\275\317\204\316\255\317\201"]
  ::msgcat::mcset en "regular expression" [encoding convertfrom utf-8 "regular expression"]
  ::msgcat::mcset es "regular expression" [encoding convertfrom utf-8 "patr\303\263n regular (kob.*)"]
  ::msgcat::mcset it "regular expression" [encoding convertfrom utf-8 "espressione regolare"]
  ::msgcat::mcset ru "regular expression" [encoding convertfrom utf-8 "\321\200\320\265\320\263\321\203\320\273\321\217\321\200\320\275\320\276\320\265 \320\262\321\213\321\200\320\260\320\266\320\265\320\275\320\270\320\265"]
  ::msgcat::mcset sk "regular expression" [encoding convertfrom utf-8 "regul\303\241rny v\303\275raz"]
  ::msgcat::mcset sq "regular expression" [encoding convertfrom utf-8 "shprehje e rregullt"]

  ::msgcat::mcset bg "Search for regular expression." [encoding convertfrom utf-8 "\320\242\321\212\321\200\321\201\320\265\320\275\320\265 \320\277\320\276 \321\200\320\265\320\263\321\203\320\273\321\217\321\200\320\265\320\275 \320\270\320\267\321\200\320\260\320\267"]
  ::msgcat::mcset cz "Search for regular expression." [encoding convertfrom utf-8 "Vyhled\303\241v\303\241n\303\255 regul\303\241rn\303\255ho v\303\275razu."]
  ::msgcat::mcset de "Search for regular expression." [encoding convertfrom utf-8 "Suche nach regul\303\244rem Ausdruck."]
  ::msgcat::mcset el "Search for regular expression." [encoding convertfrom utf-8 "\316\247\317\201\316\256\317\203\316\267 \316\274\317\200\316\261\316\273\316\261\316\275\317\204\316\255\317\201 \317\203\317\204\316\267\316\275 \316\261\316\275\316\261\316\266\316\256\317\204\316\267\317\203\316\267 (\317\203\317\200\316\256.* \316\270\316\261 \316\262\317\201\316\265\316\271 \317\203\317\200\316\256\316\273\316\261\316\271\316\277, \317\203\317\200\316\256\316\273\316\261\316\271\316\261, \317\203\317\200\316\256\316\272\316\265\317\201)"]
  ::msgcat::mcset en "Search for regular expression." [encoding convertfrom utf-8 "Use wildcards on search (cav.* will find cave, cavern, cavalier...)"]
  ::msgcat::mcset es "Search for regular expression." [encoding convertfrom utf-8 "Usar comodines en la b\303\272squeda (kob.* encuentra koba, kobea, kobie, etc)."]
  ::msgcat::mcset it "Search for regular expression." [encoding convertfrom utf-8 "Cerca espressione regolare."]
  ::msgcat::mcset ru "Search for regular expression." [encoding convertfrom utf-8 "\320\230\321\201\320\272\320\260\321\202\321\214 \320\277\320\276 \321\200\320\265\320\263\321\203\320\273\321\217\321\200\320\275\320\276\320\274\321\203 \320\262\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\216."]
  ::msgcat::mcset sk "Search for regular expression." [encoding convertfrom utf-8 "Vyh\304\276ad\303\241vanie regul\303\241rneho v\303\275razu."]
  ::msgcat::mcset sq "Search for regular expression." [encoding convertfrom utf-8 "kerko per shprehje te rregullt."]

  ::msgcat::mcset bg "case sensitive" [encoding convertfrom utf-8 "\320\276\321\202\321\207\320\270\321\202\320\260 \321\201\320\265 \321\200\320\265\320\263\320\270\321\201\321\202\321\212\321\200\320\260"]
  ::msgcat::mcset cz "case sensitive" [encoding convertfrom utf-8 "rozli\305\241ovat velikost p\303\255smen"]
  ::msgcat::mcset de "case sensitive" [encoding convertfrom utf-8 "Gro\303\237- und Kleinschreibung ber\303\274cksichtigen"]
  ::msgcat::mcset el "case sensitive" [encoding convertfrom utf-8 "case sensitive"]
  ::msgcat::mcset en "case sensitive" [encoding convertfrom utf-8 "case sensitive"]
  ::msgcat::mcset es "case sensitive" [encoding convertfrom utf-8 "distinguir may\303\272sculas"]
  ::msgcat::mcset it "case sensitive" [encoding convertfrom utf-8 "case-sensitive"]
  ::msgcat::mcset ru "case sensitive" [encoding convertfrom utf-8 "\321\203\321\207\320\270\321\202\321\213\320\262\320\260\321\202\321\214 \321\200\320\265\320\263\320\270\321\201\321\202\321\200"]
  ::msgcat::mcset sk "case sensitive" [encoding convertfrom utf-8 "rozli\305\241ova\305\245 ve\304\276kos\305\245"]
  ::msgcat::mcset sq "case sensitive" [encoding convertfrom utf-8 "rast I ndjeshem-senzitiv"]

  ::msgcat::mcset bg "Case sensitive search." [encoding convertfrom utf-8 "\320\242\321\212\321\200\321\201\320\265\320\275\320\265 \321\201 \320\276\321\202\321\207\320\270\321\202\320\260\320\275\320\265 \320\275\320\260 \321\200\320\265\320\263\320\270\321\201\321\202\321\212\321\200\320\260"]
  ::msgcat::mcset cz "Case sensitive search." [encoding convertfrom utf-8 "Vyhled\303\241v\303\241n\303\255 s rozli\305\241en\303\255m velikosti p\303\255smen."]
  ::msgcat::mcset de "Case sensitive search." [encoding convertfrom utf-8 "Suche mit Gro\303\237- und Kleinbuchstaben."]
  ::msgcat::mcset el "Case sensitive search." [encoding convertfrom utf-8 "\316\221\316\275\316\261\316\266\316\256\317\204\316\267\317\203\316\267 case sensitive"]
  ::msgcat::mcset en "Case sensitive search." [encoding convertfrom utf-8 "Case sensitive search."]
  ::msgcat::mcset es "Case sensitive search." [encoding convertfrom utf-8 "B\303\272squeda sensible a las may\303\272sculas."]
  ::msgcat::mcset it "Case sensitive search." [encoding convertfrom utf-8 "Ricerca case-sensistive"]
  ::msgcat::mcset ru "Case sensitive search." [encoding convertfrom utf-8 "\320\237\320\276\320\270\321\201\320\272 \321\201 \321\203\321\207\320\265\321\202\320\276\320\274 \321\200\320\265\320\263\320\270\321\201\321\202\321\200\320\260."]
  ::msgcat::mcset sk "Case sensitive search." [encoding convertfrom utf-8 "Vyh\304\276ad\303\241vanie s rozli\305\241ovan\303\255m ve\304\276k\303\275ch a mal\303\275ch p\303\255smen."]
  ::msgcat::mcset sq "Case sensitive search." [encoding convertfrom utf-8 "kerko rast senzitiv"]

  ::msgcat::mcset bg "Find next" [encoding convertfrom utf-8 "\321\201\320\273\320\265\320\264\320\262\320\260\321\211"]
  ::msgcat::mcset cz "Find next" [encoding convertfrom utf-8 "Naj\303\255t dal\305\241\303\255"]
  ::msgcat::mcset de "Find next" [encoding convertfrom utf-8 "N\303\244chste Stelle finden"]
  ::msgcat::mcset el "Find next" [encoding convertfrom utf-8 "\316\225\317\215\317\201\316\265\317\203\316\267 \316\265\317\200\316\277\316\274\316\255\316\275\316\277\317\205"]
  ::msgcat::mcset en "Find next" [encoding convertfrom utf-8 "Find next"]
  ::msgcat::mcset es "Find next" [encoding convertfrom utf-8 "Siguiente"]
  ::msgcat::mcset it "Find next" [encoding convertfrom utf-8 "Prossimo"]
  ::msgcat::mcset ru "Find next" [encoding convertfrom utf-8 "\320\241\320\273\320\265\320\264\321\203\321\216\321\211\320\270\320\271"]
  ::msgcat::mcset sk "Find next" [encoding convertfrom utf-8 "Nasleduj\303\272ci"]
  ::msgcat::mcset sq "Find next" [encoding convertfrom utf-8 "gjeje tjetren me radhe"]

  ::msgcat::mcset bg "Select next object matching expression." [encoding convertfrom utf-8 "\320\230\320\267\320\261\320\265\321\200\320\270 \321\201\320\273\320\265\320\264\320\262\320\260\321\211\320\270\321\217\321\202 \320\276\320\261\320\265\320\272\321\202 \320\275\320\260 \321\202\321\212\321\200\321\201\320\265\320\275\320\265\321\202\320\276"]
  ::msgcat::mcset cz "Select next object matching expression." [encoding convertfrom utf-8 "Vybere dal\305\241\303\255 objekt odpov\303\255daj\303\255c\303\255 v\303\275razu."]
  ::msgcat::mcset de "Select next object matching expression." [encoding convertfrom utf-8 "N\303\244chstes Objekt ausw\303\244hlen, das auf Muster passt."]
  ::msgcat::mcset el "Select next object matching expression." [encoding convertfrom utf-8 "\316\225\317\200\316\271\316\273\316\277\316\263\316\256 \316\265\317\200\317\214\316\274\316\265\316\275\316\277\317\205 \316\261\316\275\317\204\316\271\316\272\316\265\316\257\316\274\316\265\316\275\316\277\317\205 \317\200\316\277\317\205 \317\204\316\261\316\271\317\201\316\271\316\254\316\266\316\265\316\271 \317\203\317\204\316\267\316\275 \316\261\316\275\316\261\316\266\316\256\317\204\316\267\317\203\316\267"]
  ::msgcat::mcset en "Select next object matching expression." [encoding convertfrom utf-8 "Select next object matching expression."]
  ::msgcat::mcset es "Select next object matching expression." [encoding convertfrom utf-8 "Selecionar siguiente objeto encontrado."]
  ::msgcat::mcset it "Select next object matching expression." [encoding convertfrom utf-8 "Seleziona il prossimo oggetto trovato"]
  ::msgcat::mcset ru "Select next object matching expression." [encoding convertfrom utf-8 "\320\222\321\213\320\261\321\200\320\260\321\202\321\214 \321\201\320\273\320\265\320\264\321\203\321\216\321\211\320\270\320\271 \320\276\320\261\321\212\320\265\320\272\321\202, \321\201\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\321\203\321\216\321\211\320\270\320\271 \320\262\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\216 \320\277\320\276\320\270\321\201\320\272\320\260."]
  ::msgcat::mcset sk "Select next object matching expression." [encoding convertfrom utf-8 "N\303\241jdi \304\217al\305\241\303\255 objekt zodpovedaj\303\272ci h\304\276adan\303\251mu v\303\275razu."]
  ::msgcat::mcset sq "Select next object matching expression." [encoding convertfrom utf-8 "zgjedhe objektin tjeter me radhe te shprehjes qe pershtatet"]

  ::msgcat::mcset bg "Find first" [encoding convertfrom utf-8 "\320\235\320\260\320\274\320\262\320\265\321\200\320\270 \320\277\321\212\321\200\320\262\320\270\321\217\321\202"]
  ::msgcat::mcset cz "Find first" [encoding convertfrom utf-8 "Naj\303\255t prvn\303\255"]
  ::msgcat::mcset de "Find first" [encoding convertfrom utf-8 "Finde erstes"]
  ::msgcat::mcset el "Find first" [encoding convertfrom utf-8 "\316\225\317\215\317\201\316\265\317\203\316\267 \317\200\317\201\317\216\317\204\316\277\317\205"]
  ::msgcat::mcset en "Find first" [encoding convertfrom utf-8 "Search"]
  ::msgcat::mcset es "Find first" [encoding convertfrom utf-8 "Buscar"]
  ::msgcat::mcset it "Find first" [encoding convertfrom utf-8 "Cerca"]
  ::msgcat::mcset ru "Find first" [encoding convertfrom utf-8 "\320\237\320\265\321\200\320\262\321\213\320\271"]
  ::msgcat::mcset sk "Find first" [encoding convertfrom utf-8 "N\303\241jdi prv\303\275"]
  ::msgcat::mcset sq "Find first" [encoding convertfrom utf-8 "kerko te parin"]

  ::msgcat::mcset bg "Select first object matching expression." [encoding convertfrom utf-8 "\320\230\320\267\320\261\320\265\321\200\320\270 \320\277\321\212\321\200\320\262\320\270\321\217\321\202 \320\276\320\261\320\265\320\272\321\202 \320\275\320\260 \321\202\321\212\321\200\321\201\320\265\320\275\320\265\321\202\320\276"]
  ::msgcat::mcset cz "Select first object matching expression." [encoding convertfrom utf-8 "Vybere prvn\303\255 objekt odpov\303\255daj\303\255c\303\255 v\303\275razu."]
  ::msgcat::mcset de "Select first object matching expression." [encoding convertfrom utf-8 "Erstes Objekt finden, das auf Muster passt."]
  ::msgcat::mcset el "Select first object matching expression." [encoding convertfrom utf-8 "\316\225\317\200\316\271\316\273\316\277\316\263\316\256 \317\200\317\201\317\216\317\204\316\277\317\205 \316\261\316\275\317\204\316\271\316\272\316\265\316\257\316\274\316\265\316\275\316\277\317\205 \317\200\316\277\317\205 \317\204\316\261\316\271\317\201\316\271\316\254\316\266\316\265\316\271 \317\203\317\204\316\267\316\275 \316\261\316\275\316\261\316\266\316\256\317\204\316\267\317\203\316\267"]
  ::msgcat::mcset en "Select first object matching expression." [encoding convertfrom utf-8 "Selects first object matching expression."]
  ::msgcat::mcset es "Select first object matching expression." [encoding convertfrom utf-8 "Selecionar el primer objeto encontrado."]
  ::msgcat::mcset it "Select first object matching expression." [encoding convertfrom utf-8 "Seleziona il primo oggetto trovato"]
  ::msgcat::mcset ru "Select first object matching expression." [encoding convertfrom utf-8 "\320\222\321\213\320\261\321\200\320\260\321\202\321\214 \320\277\320\265\321\200\320\262\321\213\320\271 \320\276\320\261\321\212\320\265\320\272\321\202, \321\201\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\321\203\321\216\321\211\320\270\320\271 \320\262\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\216 \320\277\320\276\320\270\321\201\320\272\320\260."]
  ::msgcat::mcset sk "Select first object matching expression." [encoding convertfrom utf-8 "N\303\241jdi prv\303\275 objekt zodpovedaj\303\272ci h\304\276adan\303\251mu v\303\275razu."]
  ::msgcat::mcset sq "Select first object matching expression." [encoding convertfrom utf-8 "zgjedh objektin e pare te shprehjes qe pershtatet"]

  ::msgcat::mcset bg "Show all" [encoding convertfrom utf-8 "\320\237\320\276\320\272\320\260\320\266\320\270 \320\262\321\201\320\270\321\207\320\272\320\276"]
  ::msgcat::mcset cz "Show all" [encoding convertfrom utf-8 "Zobrazit v\305\241e"]
  ::msgcat::mcset de "Show all" [encoding convertfrom utf-8 "Zeige alles"]
  ::msgcat::mcset el "Show all" [encoding convertfrom utf-8 "\316\225\316\274\317\206\316\254\316\275\316\271\317\203\316\267 \317\214\316\273\317\211\316\275"]
  ::msgcat::mcset en "Show all" [encoding convertfrom utf-8 "Show all"]
  ::msgcat::mcset es "Show all" [encoding convertfrom utf-8 "Mostrar todo"]
  ::msgcat::mcset it "Show all" [encoding convertfrom utf-8 "Tutti"]
  ::msgcat::mcset ru "Show all" [encoding convertfrom utf-8 "\320\237\320\276\320\272\320\260\320\267\320\260\321\202\321\214 \320\262\321\201\320\265"]
  ::msgcat::mcset sk "Show all" [encoding convertfrom utf-8 "Ozna\304\215 v\305\241etky"]
  ::msgcat::mcset sq "Show all" [encoding convertfrom utf-8 "tregoji te gjitha"]

  ::msgcat::mcset bg "Highlight all objects matching expression." [encoding convertfrom utf-8 "\320\236\321\201\320\262\320\265\321\202\320\270 \320\262\321\201\320\270\321\207\320\272\320\270 \320\276\320\261\320\265\320\272\321\202\320\270, \321\201\321\212\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\260\321\211\320\270 \320\275\320\260 \321\202\321\212\321\200\321\201\320\265\320\275\320\265\321\202\320\276"]
  ::msgcat::mcset cz "Highlight all objects matching expression." [encoding convertfrom utf-8 "Zv\303\275razn\303\255 v\305\241echny objekty odpov\303\255daj\303\255c\303\255 v\303\275razu."]
  ::msgcat::mcset de "Highlight all objects matching expression." [encoding convertfrom utf-8 "Alle Objekte hervorheben, die auf Muster passen."]
  ::msgcat::mcset el "Highlight all objects matching expression." [encoding convertfrom utf-8 "\316\244\317\214\316\275\317\211\317\203\316\267 \317\214\316\273\317\211\316\275 \317\214\317\203\317\211\316\275 \317\204\316\261\316\271\317\201\316\271\316\254\316\266\316\277\317\205\316\275 \317\203\317\204\316\267\316\275 \316\261\316\275\316\261\316\266\316\256\317\204\316\267\317\203\316\267."]
  ::msgcat::mcset en "Highlight all objects matching expression." [encoding convertfrom utf-8 "Highlight all objects matching expression."]
  ::msgcat::mcset es "Highlight all objects matching expression." [encoding convertfrom utf-8 "Seleccionar todos los objetos encontrados."]
  ::msgcat::mcset it "Highlight all objects matching expression." [encoding convertfrom utf-8 "Evidenzia tutti gli oggetti trovati"]
  ::msgcat::mcset ru "Highlight all objects matching expression." [encoding convertfrom utf-8 "\320\237\320\276\320\264\321\201\320\262\320\265\321\202\320\270\321\202\321\214 \320\262\321\201\320\265 \320\276\320\261\321\212\320\265\320\272\321\202\321\213, \321\201\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\321\203\321\216\321\211\320\270\320\265 \320\262\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\216 \320\277\320\276\320\270\321\201\320\272\320\260."]
  ::msgcat::mcset sk "Highlight all objects matching expression." [encoding convertfrom utf-8 "Zv\303\275razn\303\255 v\305\241etky objekty zodpovedaj\303\272ce h\304\276adan\303\251mu v\303\275razu."]
  ::msgcat::mcset sq "Highlight all objects matching expression." [encoding convertfrom utf-8 "zghedh te gjitha objektet qe pershtaten me shprehjen"]

  ::msgcat::mcset bg "Clear all" [encoding convertfrom utf-8 "\320\230\320\267\321\207\320\270\321\201\321\202\320\270 \320\262\321\201\320\270\321\207\320\272\320\276"]
  ::msgcat::mcset cz "Clear all" [encoding convertfrom utf-8 "Zru\305\241 v\303\275b\304\233r"]
  ::msgcat::mcset de "Clear all" [encoding convertfrom utf-8 "Alles l\303\266schen"]
  ::msgcat::mcset el "Clear all" [encoding convertfrom utf-8 "\316\221\316\275\316\261\316\257\317\201\316\265\317\203\316\267 \317\214\316\273\317\211\316\275"]
  ::msgcat::mcset en "Clear all" [encoding convertfrom utf-8 "Clear all"]
  ::msgcat::mcset es "Clear all" [encoding convertfrom utf-8 "Deseleccionar"]
  ::msgcat::mcset it "Clear all" [encoding convertfrom utf-8 "Cancella"]
  ::msgcat::mcset ru "Clear all" [encoding convertfrom utf-8 "\320\236\321\207\320\270\321\201\321\202\320\270\321\202\321\214 \320\262\321\201\320\265"]
  ::msgcat::mcset sk "Clear all" [encoding convertfrom utf-8 "Zru\305\241 v\303\275ber"]
  ::msgcat::mcset sq "Clear all" [encoding convertfrom utf-8 "fshij krejt"]

  ::msgcat::mcset bg "Clear highlighted objects." [encoding convertfrom utf-8 "\320\230\320\267\321\207\320\265\321\201\321\202\320\270 \320\276\321\201\320\262\320\265\321\202\321\217\320\262\320\260\320\275\320\265\321\202\320\276 \320\275\320\260 \320\262\321\201\320\270\321\207\320\272\320\270 \320\276\320\261\320\265\320\272\321\202\320\270"]
  ::msgcat::mcset cz "Clear highlighted objects." [encoding convertfrom utf-8 "Zru\305\241\303\255 zv\303\275razn\304\233n\303\255 vybran\303\275ch objekt\305\257."]
  ::msgcat::mcset de "Clear highlighted objects." [encoding convertfrom utf-8 "Hervorgehobene Objekte l\303\266schen."]
  ::msgcat::mcset el "Clear highlighted objects." [encoding convertfrom utf-8 "\316\221\316\275\316\261\316\257\317\201\316\265\317\203\316\267 \317\204\317\211\316\275 \317\204\316\277\316\275\316\271\317\203\316\270\316\255\316\275\317\204\317\211\316\275"]
  ::msgcat::mcset en "Clear highlighted objects." [encoding convertfrom utf-8 "Clear highlighted objects."]
  ::msgcat::mcset es "Clear highlighted objects." [encoding convertfrom utf-8 "Deseleccionar todos los objetos resaltados."]
  ::msgcat::mcset it "Clear highlighted objects." [encoding convertfrom utf-8 "Togli l'evidenziazione degli oggetti."]
  ::msgcat::mcset ru "Clear highlighted objects." [encoding convertfrom utf-8 "\320\241\320\275\321\217\321\202\321\214 \320\277\320\276\320\264\321\201\320\262\320\265\321\202\320\272\321\203 \321\201\320\276 \320\262\321\201\320\265\321\205 \320\276\320\261\321\212\320\265\320\272\321\202\320\276\320\262."]
  ::msgcat::mcset sk "Clear highlighted objects." [encoding convertfrom utf-8 "Zru\305\241\303\255 zv\303\275raznenie vybrat\303\275ch objektov."]
  ::msgcat::mcset sq "Clear highlighted objects." [encoding convertfrom utf-8 "fshij objektet e zgjedhura-te hijezuara"]

  ::msgcat::mcset bg "loading images module ..." [encoding convertfrom utf-8 "\320\267\320\260\321\200\320\265\320\266\320\264\320\260\320\275\320\265 \320\275\320\260 \320\274\320\276\320\264\321\203\320\273\320\260 \320\267\320\260 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\321\217"]
  ::msgcat::mcset cz "loading images module ..." [encoding convertfrom utf-8 "nahr\303\241v\303\241m obr\303\241zkov\303\275 modul ..."]
  ::msgcat::mcset de "loading images module ..." [encoding convertfrom utf-8 "Lade Bildmodul ..."]
  ::msgcat::mcset el "loading images module ..." [encoding convertfrom utf-8 "\317\206\316\277\317\201\317\204\316\257\316\266\316\265\317\204\316\261\316\271 \316\267 \316\265\316\275\317\214\317\204\316\267\317\204\316\261 \316\265\316\271\316\272\317\214\316\275\317\211\316\275..."]
  ::msgcat::mcset en "loading images module ..." [encoding convertfrom utf-8 "loading images module ..."]
  ::msgcat::mcset es "loading images module ..." [encoding convertfrom utf-8 "im\303\241genes ..."]
  ::msgcat::mcset it "loading images module ..." [encoding convertfrom utf-8 "modulo immagini ..."]
  ::msgcat::mcset ru "loading images module ..." [encoding convertfrom utf-8 "\320\267\320\260\320\263\321\200\321\203\320\267\320\272\320\260 \320\274\320\276\320\264\321\203\320\273\321\217 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\271..."]
  ::msgcat::mcset sk "loading images module ..." [encoding convertfrom utf-8 "nahr\303\241vam obr\303\241zkov\303\275 modul..."]
  ::msgcat::mcset sq "loading images module ..." [encoding convertfrom utf-8 "duke lexuar modulin e imazhit\342\200\246"]

  ::msgcat::mcset bg "Select background image." [encoding convertfrom utf-8 "\320\230\320\267\320\261\320\265\321\200\320\270 \321\204\320\276\320\275\320\276\320\262\320\276 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265"]
  ::msgcat::mcset cz "Select background image." [encoding convertfrom utf-8 "V\303\275b\304\233r podkladov\303\251ho obr\303\241zku."]
  ::msgcat::mcset de "Select background image." [encoding convertfrom utf-8 "W\303\244hle Hintergrundbild."]
  ::msgcat::mcset el "Select background image." [encoding convertfrom utf-8 "\316\232\316\254\316\275\317\204\316\265 \316\272\316\273\316\271\316\272 \317\203\317\204\316\277\316\275 \316\272\316\261\317\204\316\254\316\273\316\277\316\263\316\277 \316\275\316\261 \316\265\317\200\316\271\316\273\316\255\316\276\316\265\317\204\316\265 \317\204\316\267\316\275 \316\265\316\271\316\272\317\214\316\275\316\261 \317\200\316\277\317\205 \316\261\316\275\317\204\316\271\317\203\317\204\316\277\316\271\317\207\316\265\316\257."]
  ::msgcat::mcset en "Select background image." [encoding convertfrom utf-8 "Click on a line in the list to select correspondin image."]
  ::msgcat::mcset es "Select background image." [encoding convertfrom utf-8 "Al clicar un rengl\303\263n, seleccionar\303\241s la imagen de fondo correspondiente."]
  ::msgcat::mcset it "Select background image." [encoding convertfrom utf-8 "Seleziona l'immagine di background."]
  ::msgcat::mcset ru "Select background image." [encoding convertfrom utf-8 "\320\222\321\213\320\261\320\276\321\200 \321\204\320\276\320\275\320\276\320\262\320\276\320\263\320\276 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\321\217."]
  ::msgcat::mcset sk "Select background image." [encoding convertfrom utf-8 "Ozna\304\215 obr\303\241zok na pozad\303\255."]
  ::msgcat::mcset sq "Select background image." [encoding convertfrom utf-8 "kliko rreshtin ne liste qe te zgjedhesh imazhin qe pershtatet."]

  ::msgcat::mcset bg "Insert new background image." [encoding convertfrom utf-8 "\320\222\320\274\321\212\320\272\320\275\320\270 \320\275\320\276\320\262\320\276 \321\204\320\276\320\275\320\276\320\262\320\276 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265"]
  ::msgcat::mcset cz "Insert new background image." [encoding convertfrom utf-8 "Vlo\305\276en\303\255 nov\303\251ho podkladov\303\251ho obr\303\241zku."]
  ::msgcat::mcset de "Insert new background image." [encoding convertfrom utf-8 "Neues Hintergrundbild einf\303\274gen."]
  ::msgcat::mcset el "Insert new background image." [encoding convertfrom utf-8 "\316\225\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \316\275\316\255\316\261\317\202 \316\265\316\271\316\272\317\214\316\275\316\261\317\202 \317\206\317\214\316\275\317\204\316\277\317\205 (\317\200.\317\207. \316\261\317\201\317\207\316\265\316\257\316\277 .xvi \316\256 \317\210\316\267\317\206\316\271\316\261\316\272\317\214 \317\203\317\207\316\255\316\264\316\271\316\277)"]
  ::msgcat::mcset en "Insert new background image." [encoding convertfrom utf-8 "Insert new background image (e.g., .xvi image or scanned sketch)."]
  ::msgcat::mcset es "Insert new background image." [encoding convertfrom utf-8 "Insertar nueva imagen de fondo (p. ej: un croquis escaneado de la libreta topo)."]
  ::msgcat::mcset it "Insert new background image." [encoding convertfrom utf-8 "Inserisci una nuova immagine di background."]
  ::msgcat::mcset ru "Insert new background image." [encoding convertfrom utf-8 "\320\222\321\201\321\202\320\260\320\262\320\270\321\202\321\214 \320\275\320\276\320\262\320\276\320\265 \321\204\320\276\320\275\320\276\320\262\320\276\320\265 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265."]
  ::msgcat::mcset sk "Insert new background image." [encoding convertfrom utf-8 "Vlo\305\276enie nov\303\251ho podkladov\303\251ho obr\303\241zku."]
  ::msgcat::mcset sq "Insert new background image." [encoding convertfrom utf-8 "fute imazhin e ri ne prapavije (p.sh., . xvi imazhin apo vizatimin e skanuar)."]

  ::msgcat::mcset bg "Remove" [encoding convertfrom utf-8 "\320\237\321\200\320\265\320\274\320\260\321\205\320\275\320\270"]
  ::msgcat::mcset cz "Remove" [encoding convertfrom utf-8 "Odstranit"]
  ::msgcat::mcset de "Remove" [encoding convertfrom utf-8 "Entferne"]
  ::msgcat::mcset el "Remove" [encoding convertfrom utf-8 "\316\224\316\271\316\261\316\263\317\201\316\261\317\206\316\256"]
  ::msgcat::mcset en "Remove" [encoding convertfrom utf-8 "Remove"]
  ::msgcat::mcset es "Remove" [encoding convertfrom utf-8 "Eliminar"]
  ::msgcat::mcset it "Remove" [encoding convertfrom utf-8 "Rimuovi"]
  ::msgcat::mcset ru "Remove" [encoding convertfrom utf-8 "\320\243\320\261\321\200\320\260\321\202\321\214"]
  ::msgcat::mcset sk "Remove" [encoding convertfrom utf-8 "Odstr\303\241ni\305\245"]
  ::msgcat::mcset sq "Remove" [encoding convertfrom utf-8 "hiqe"]

  ::msgcat::mcset bg "Remove selected image." [encoding convertfrom utf-8 "\320\237\321\200\320\265\320\274\320\260\321\205\320\275\320\270 \320\270\320\267\320\261\321\200\320\260\320\275\320\276\321\202\320\276 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265"]
  ::msgcat::mcset cz "Remove selected image." [encoding convertfrom utf-8 "Odstran\303\255 vybran\303\275 obr\303\241zek."]
  ::msgcat::mcset de "Remove selected image." [encoding convertfrom utf-8 "Entferne ausgew\303\244hltes Bild."]
  ::msgcat::mcset el "Remove selected image." [encoding convertfrom utf-8 "\316\224\316\271\316\261\316\263\317\201\316\261\317\206\316\256 \316\265\317\200\316\271\316\273\316\265\316\263\316\274\316\255\316\275\316\267\317\202 \316\265\316\271\316\272\317\214\316\275\316\261\317\202"]
  ::msgcat::mcset en "Remove selected image." [encoding convertfrom utf-8 "Remove selected image."]
  ::msgcat::mcset es "Remove selected image." [encoding convertfrom utf-8 "Eliminar imagen seleccionada."]
  ::msgcat::mcset it "Remove selected image." [encoding convertfrom utf-8 "Rimuovi l'immagine selezionata."]
  ::msgcat::mcset ru "Remove selected image." [encoding convertfrom utf-8 "\320\243\320\261\321\200\320\260\321\202\321\214 \320\262\321\213\321\200\320\261\320\260\320\275\320\275\320\276\320\265 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265."]
  ::msgcat::mcset sk "Remove selected image." [encoding convertfrom utf-8 "Odstr\303\241ni ozna\304\215en\303\275 obr\303\241zok."]
  ::msgcat::mcset sq "Remove selected image." [encoding convertfrom utf-8 "hiqe imazhin e zgjedhur."]

  ::msgcat::mcset bg "visibility" [encoding convertfrom utf-8 "\320\237\320\276\320\272\320\260\320\266\320\270"]
  ::msgcat::mcset cz "visibility" [encoding convertfrom utf-8 "viditelnost"]
  ::msgcat::mcset de "visibility" [encoding convertfrom utf-8 "Sichtbarkeit"]
  ::msgcat::mcset el "visibility" [encoding convertfrom utf-8 "\316\277\317\201\316\261\317\204\317\214\317\204\316\267\317\204\316\261"]
  ::msgcat::mcset en "visibility" [encoding convertfrom utf-8 "visibility"]
  ::msgcat::mcset es "visibility" [encoding convertfrom utf-8 "visibilidad"]
  ::msgcat::mcset it "visibility" [encoding convertfrom utf-8 "visibilit\303\240"]
  ::msgcat::mcset ru "visibility" [encoding convertfrom utf-8 "\320\277\320\276\320\272\320\260\320\267\320\260\321\202\321\214"]
  ::msgcat::mcset sk "visibility" [encoding convertfrom utf-8 "vidite\304\276nos\305\245"]
  ::msgcat::mcset sq "visibility" [encoding convertfrom utf-8 "shiqueshmeria-vizibiliteti"]

  ::msgcat::mcset bg "Switch image visibility." [encoding convertfrom utf-8 "\320\237\320\276\320\272\320\260\320\266\320\270/\321\201\320\272\321\200\320\270\320\271 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265"]
  ::msgcat::mcset cz "Switch image visibility." [encoding convertfrom utf-8 "P\305\231ep\303\255n\303\241 viditelnost obr\303\241zku."]
  ::msgcat::mcset de "Switch image visibility." [encoding convertfrom utf-8 "Bildsichtbarkeit umschalten."]
  ::msgcat::mcset el "Switch image visibility." [encoding convertfrom utf-8 "\316\221\316\273\316\273\316\261\316\263\316\256 \316\277\317\201\316\261\317\204\317\214\317\204\316\267\317\204\316\261\317\202 \316\265\316\271\316\272\317\214\316\275\316\261\317\202"]
  ::msgcat::mcset en "Switch image visibility." [encoding convertfrom utf-8 "Switch image visibility."]
  ::msgcat::mcset es "Switch image visibility." [encoding convertfrom utf-8 "Cambiar visibilidad de la imagen."]
  ::msgcat::mcset it "Switch image visibility." [encoding convertfrom utf-8 "Cambia la visibilit\303\240 dell'immagine."]
  ::msgcat::mcset ru "Switch image visibility." [encoding convertfrom utf-8 "\320\237\320\276\320\272\320\260\320\267\320\260\321\202\321\214/\321\201\320\277\321\200\321\217\321\202\320\260\321\202\321\214 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265."]
  ::msgcat::mcset sk "Switch image visibility." [encoding convertfrom utf-8 "Prep\303\255na\304\215 vidite\304\276nosti obr\303\241zku."]
  ::msgcat::mcset sq "Switch image visibility." [encoding convertfrom utf-8 "lesho shiqueshmerine-vizibilitetin e imazhit."]

  ::msgcat::mcset bg "Control gamma value." [encoding convertfrom utf-8 "\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265 \320\275\320\260 \320\263\320\260\320\274\320\260\321\202\320\260"]
  ::msgcat::mcset cz "Control gamma value." [encoding convertfrom utf-8 "Nastaven\303\255 hodnoty gamma."]
  ::msgcat::mcset de "Control gamma value." [encoding convertfrom utf-8 "Gammawert einstellen."]
  ::msgcat::mcset el "Control gamma value." [encoding convertfrom utf-8 "\316\241\317\205\316\270\316\274\316\257\317\203\316\265\316\271\317\202 \317\204\316\271\316\274\317\216\316\275 gamma."]
  ::msgcat::mcset en "Control gamma value." [encoding convertfrom utf-8 "Control gamma value."]
  ::msgcat::mcset es "Control gamma value." [encoding convertfrom utf-8 "Controlar el valor gamma."]
  ::msgcat::mcset it "Control gamma value." [encoding convertfrom utf-8 "Controlla il valore di gamma."]
  ::msgcat::mcset ru "Control gamma value." [encoding convertfrom utf-8 "\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265 \320\263\320\260\320\274\320\274\320\276\320\271."]
  ::msgcat::mcset sk "Control gamma value." [encoding convertfrom utf-8 "Nastavenie gamma korekcie obr\303\241zku (farebn\303\251ho podania)."]
  ::msgcat::mcset sq "Control gamma value." [encoding convertfrom utf-8 "kontrollo vleren-gamma"]

  ::msgcat::mcset bg "Reset" [encoding convertfrom utf-8 "\320\222\321\212\320\267\320\276\320\261\320\275\320\276\320\262\320\270"]
  ::msgcat::mcset cz "Reset" [encoding convertfrom utf-8 "Reset"]
  ::msgcat::mcset de "Reset" [encoding convertfrom utf-8 "Zur\303\274cksetzen"]
  ::msgcat::mcset el "Reset" [encoding convertfrom utf-8 "\316\225\317\200\316\261\316\275\316\261\317\206\316\277\317\201\316\254"]
  ::msgcat::mcset en "Reset" [encoding convertfrom utf-8 "Reset"]
  ::msgcat::mcset es "Reset" [encoding convertfrom utf-8 "Reajustar"]
  ::msgcat::mcset it "Reset" [encoding convertfrom utf-8 "Ripristina"]
  ::msgcat::mcset ru "Reset" [encoding convertfrom utf-8 "\320\241\320\261\321\200\320\276\321\201"]
  ::msgcat::mcset sk "Reset" [encoding convertfrom utf-8 "Reset"]
  ::msgcat::mcset sq "Reset" [encoding convertfrom utf-8 "reseto"]

  ::msgcat::mcset bg "Reset image gamma value." [encoding convertfrom utf-8 "\320\222\321\212\320\267\320\276\320\261\320\275\320\276\320\262\320\270 \320\275\320\260\321\201\321\202\320\276\320\271\320\272\320\270\321\202\320\265 \320\275\320\260 \320\263\320\260\320\274\320\260\321\202\320\260"]
  ::msgcat::mcset cz "Reset image gamma value." [encoding convertfrom utf-8 "Resetuje nastavenou hodnotu gamma."]
  ::msgcat::mcset de "Reset image gamma value." [encoding convertfrom utf-8 "Gammawert zur\303\274cksetzen."]
  ::msgcat::mcset el "Reset image gamma value." [encoding convertfrom utf-8 "\316\225\317\200\316\261\316\275\316\261\317\206\316\277\317\201\316\254 \317\204\316\271\316\274\316\256\317\202 gamma \317\204\316\267\317\202 \316\265\316\271\316\272\317\214\316\275\316\261\317\202."]
  ::msgcat::mcset en "Reset image gamma value." [encoding convertfrom utf-8 "Click here to go back to original gamma value."]
  ::msgcat::mcset es "Reset image gamma value." [encoding convertfrom utf-8 "Click aqu\303\255 para volver a los ajustes de gamma iniciales."]
  ::msgcat::mcset it "Reset image gamma value." [encoding convertfrom utf-8 "Ripristina il valore di gamma dell'immagine."]
  ::msgcat::mcset ru "Reset image gamma value." [encoding convertfrom utf-8 "\320\241\320\261\321\200\320\276\321\201\320\270\321\202\321\214 \320\267\320\275\320\260\321\207\320\265\320\275\320\270\320\265 \320\263\320\260\320\274\320\274\321\213 \320\264\320\273\321\217 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\321\217."]
  ::msgcat::mcset sk "Reset image gamma value." [encoding convertfrom utf-8 "Resetuje nastaven\303\272 gamma korekciu obr\303\241zku."]
  ::msgcat::mcset sq "Reset image gamma value." [encoding convertfrom utf-8 "kliko ketu qe te kthehesh prapa tek vlera origjinale-gamma."]

  ::msgcat::mcset bg "Set image gamma value." [encoding convertfrom utf-8 "\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\270 \320\263\320\260\320\274\320\260\321\202\320\260 \320\275\320\260 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265\321\202\320\276"]
  ::msgcat::mcset cz "Set image gamma value." [encoding convertfrom utf-8 "Nastavuje hodnotu gamma obr\303\241zku."]
  ::msgcat::mcset de "Set image gamma value." [encoding convertfrom utf-8 "Setze Gammawert."]
  ::msgcat::mcset el "Set image gamma value." [encoding convertfrom utf-8 "\316\237\317\201\316\271\317\203\316\274\317\214\317\202 \317\204\316\271\316\274\316\256\317\202 gamma \317\204\316\267\317\202 \316\265\316\271\316\272\317\214\316\275\316\261\317\202."]
  ::msgcat::mcset en "Set image gamma value." [encoding convertfrom utf-8 "Set image gamma value."]
  ::msgcat::mcset es "Set image gamma value." [encoding convertfrom utf-8 "Ajustar valor gamma de la imagen."]
  ::msgcat::mcset it "Set image gamma value." [encoding convertfrom utf-8 "Imposta il valore di gamma dell'immagine."]
  ::msgcat::mcset ru "Set image gamma value." [encoding convertfrom utf-8 "\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\270\321\202\321\214 \320\263\320\260\320\274\320\274\321\203 \320\264\320\273\321\217 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\321\217."]
  ::msgcat::mcset sk "Set image gamma value." [encoding convertfrom utf-8 "Nastavuje gamma korekciu obr\303\241zku."]
  ::msgcat::mcset sq "Set image gamma value." [encoding convertfrom utf-8 "vendos vleren gamma te imazhit."]

  ::msgcat::mcset bg "Current position of selected image." [encoding convertfrom utf-8 "\320\242\320\265\320\272\321\203\321\211\320\260 \320\277\320\276\320\267\320\270\321\206\320\270\321\217 \320\275\320\260 \320\270\320\267\320\261\321\200\320\260\320\275\320\276\321\202\320\276 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265"]
  ::msgcat::mcset cz "Current position of selected image." [encoding convertfrom utf-8 "Sou\304\215asn\303\241 pozice vybran\303\251ho obr\303\241zku."]
  ::msgcat::mcset de "Current position of selected image." [encoding convertfrom utf-8 "Gegenw\303\244rtige Position des ausgew\303\244hlten Bildes."]
  ::msgcat::mcset el "Current position of selected image." [encoding convertfrom utf-8 "\316\244\317\201\316\255\317\207\316\277\317\205\317\203\316\261 \316\270\316\255\317\203\316\267 \316\265\317\200\316\271\316\273\316\265\316\263\316\274\316\255\316\275\316\267\317\202 \316\265\316\271\316\272\317\214\316\275\316\261\317\202"]
  ::msgcat::mcset en "Current position of selected image." [encoding convertfrom utf-8 "Current position of selected image (pixels from canvas lower letf corner)."]
  ::msgcat::mcset es "Current position of selected image." [encoding convertfrom utf-8 "Posici\303\263n actual de la imagen seleccionada (medida en pixels desde la esquina inf. izq del lienzo)."]
  ::msgcat::mcset it "Current position of selected image." [encoding convertfrom utf-8 "Posizione dell'immagine selezionata."]
  ::msgcat::mcset ru "Current position of selected image." [encoding convertfrom utf-8 "\320\242\320\265\320\272\321\203\321\211\320\260\321\217 \320\277\320\276\320\267\320\270\321\206\320\270\321\217 \320\262\321\213\320\261\321\200\320\260\320\275\320\275\320\276\320\263\320\276 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\321\217."]
  ::msgcat::mcset sk "Current position of selected image." [encoding convertfrom utf-8 "S\303\272\304\215asn\303\241 poz\303\255cia obr\303\241zku."]
  ::msgcat::mcset sq "Current position of selected image." [encoding convertfrom utf-8 "pozicioni momental I imazhit te zgjedhur(pikat apo pikselat prej pelhures kendi I poshtem I majte)."]

  ::msgcat::mcset bg "Move to" [encoding convertfrom utf-8 "\320\237\321\200\320\265\320\274\320\265\321\201\321\202\320\270"]
  ::msgcat::mcset cz "Move to" [encoding convertfrom utf-8 "P\305\231esunout"]
  ::msgcat::mcset de "Move to" [encoding convertfrom utf-8 "Verschiebe nach"]
  ::msgcat::mcset el "Move to" [encoding convertfrom utf-8 "\316\234\316\265\317\204\316\261\316\272\316\257\316\275\316\267\317\203\316\267 \317\200\317\201\316\277\317\202"]
  ::msgcat::mcset en "Move to" [encoding convertfrom utf-8 "Move to"]
  ::msgcat::mcset es "Move to" [encoding convertfrom utf-8 "Mover a"]
  ::msgcat::mcset it "Move to" [encoding convertfrom utf-8 "Sposta a"]
  ::msgcat::mcset ru "Move to" [encoding convertfrom utf-8 "\320\237\320\265\321\200\320\265\320\274\320\265\321\201\321\202\320\270\321\202\321\214"]
  ::msgcat::mcset sk "Move to" [encoding convertfrom utf-8 "Presu\305\210 na"]
  ::msgcat::mcset sq "Move to" [encoding convertfrom utf-8 "levize tek"]

  ::msgcat::mcset bg "Move image to given position." [encoding convertfrom utf-8 "\320\237\321\200\320\265\320\274\320\265\321\201\321\202\320\270 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265\321\202\320\276 \320\275\320\260 \321\203\320\272\320\260\320\267\320\260\320\275\320\260\321\202\320\260 \320\277\320\276\320\267\320\270\321\206\320\270\321\217"]
  ::msgcat::mcset cz "Move image to given position." [encoding convertfrom utf-8 "P\305\231esune obr\303\241zek na zadanou pozici."]
  ::msgcat::mcset de "Move image to given position." [encoding convertfrom utf-8 "Verschiebe Bild an angegebene Position."]
  ::msgcat::mcset el "Move image to given position." [encoding convertfrom utf-8 "\316\234\316\265\317\204\316\261\316\272\316\257\316\275\316\267\317\203\316\267 \316\265\316\271\316\272\317\214\316\275\316\261\317\202 \317\203\317\204\316\267\316\275 \317\200\317\201\316\277\317\203\316\264\316\271\316\277\317\201\316\271\317\203\316\274\316\255\316\275\316\267 \316\270\316\255\317\203\316\267 (\316\267 \317\200\316\254\316\275\317\211 \316\261\317\201\316\271\317\203\317\204\316\265\317\201\316\254 \316\263\317\211\316\275\316\257\316\261 \316\270\316\261 \316\265\316\257\316\275\316\261\316\271 \317\203\317\204\316\277 \316\264\316\265\316\264\316\277\316\274\316\255\316\275\316\277 \317\200\316\257\316\276\316\265\316\273)"]
  ::msgcat::mcset en "Move image to given position." [encoding convertfrom utf-8 "Move image to given position (image's upper left corner will be on given pixel)."]
  ::msgcat::mcset es "Move image to given position." [encoding convertfrom utf-8 "Mover imagen a la posici\303\263n indicada (la esquina sup. izda de la imagen aparecer\303\241 en ese pixel)."]
  ::msgcat::mcset it "Move image to given position." [encoding convertfrom utf-8 "Sposta l'immagine nella posizione specificata."]
  ::msgcat::mcset ru "Move image to given position." [encoding convertfrom utf-8 "\320\237\320\265\321\200\320\265\320\274\320\265\321\201\321\202\320\270\321\202\321\214 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 \320\272 \321\203\320\272\320\260\320\267\320\260\320\275\320\275\320\276\320\271 \320\277\320\276\320\267\320\270\321\206\320\270\320\270."]
  ::msgcat::mcset sk "Move image to given position." [encoding convertfrom utf-8 "Presunie obr\303\241zok na zadan\303\272 poz\303\255ciu."]
  ::msgcat::mcset sq "Move image to given position." [encoding convertfrom utf-8 "levize imazhin ne poziten e dhene(kendi I eperm I majte I imazhit do te jete ne pikselin e japur)."]

  ::msgcat::mcset bg "New X coordinate of image." [encoding convertfrom utf-8 "\320\235\320\276\320\262\320\260 \320\245 \320\272\320\276\320\276\321\200\320\264\320\270\320\275\320\260\321\202\320\260 \320\275\320\260 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265\321\202\320\276"]
  ::msgcat::mcset cz "New X coordinate of image." [encoding convertfrom utf-8 "Nov\303\241 sou\305\231adnice X obr\303\241zku."]
  ::msgcat::mcset de "New X coordinate of image." [encoding convertfrom utf-8 "Neue X-Koordinate des Bildes."]
  ::msgcat::mcset el "New X coordinate of image." [encoding convertfrom utf-8 "\316\235\316\255\316\261 \317\203\317\205\316\275\317\204\316\265\317\204\316\261\316\263\316\274\316\255\316\275\316\267 \316\247 \316\265\316\271\316\272\317\214\316\275\316\261\317\202"]
  ::msgcat::mcset en "New X coordinate of image." [encoding convertfrom utf-8 "New X coordinate of image."]
  ::msgcat::mcset es "New X coordinate of image." [encoding convertfrom utf-8 "Nueva coordenada X de la imagen."]
  ::msgcat::mcset it "New X coordinate of image." [encoding convertfrom utf-8 "Nuova coordinata X dell'immagine."]
  ::msgcat::mcset ru "New X coordinate of image." [encoding convertfrom utf-8 "\320\235\320\276\320\262\320\260\321\217 \320\272\320\276\320\276\321\200\320\264\320\270\320\275\320\260\321\202\320\260 X."]
  ::msgcat::mcset sk "New X coordinate of image." [encoding convertfrom utf-8 "Nov\303\241 X s\303\272radnica obr\303\241zku."]
  ::msgcat::mcset sq "New X coordinate of image." [encoding convertfrom utf-8 "X-koordinata e re e imazhit"]

  ::msgcat::mcset bg "New Y coordinate of image." [encoding convertfrom utf-8 "\320\235\320\276\320\262\320\260 Y \320\272\320\276\320\276\321\200\320\264\320\270\320\275\320\260\321\202\320\260 \320\275\320\260 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265\321\202\320\276"]
  ::msgcat::mcset cz "New Y coordinate of image." [encoding convertfrom utf-8 "Nov\303\241 sou\305\231adnice Y obr\303\241zku."]
  ::msgcat::mcset de "New Y coordinate of image." [encoding convertfrom utf-8 "Neue Y-Koordinate des Bildes."]
  ::msgcat::mcset el "New Y coordinate of image." [encoding convertfrom utf-8 "\316\235\316\255\316\261 \317\203\317\205\316\275\317\204\316\265\317\204\316\261\316\263\316\274\316\255\316\275\316\267 \316\245 \316\265\316\271\316\272\317\214\316\275\316\261\317\202"]
  ::msgcat::mcset en "New Y coordinate of image." [encoding convertfrom utf-8 "New Y coordinate of image."]
  ::msgcat::mcset es "New Y coordinate of image." [encoding convertfrom utf-8 "Nueva coordenada Y de la imagen."]
  ::msgcat::mcset it "New Y coordinate of image." [encoding convertfrom utf-8 "Nuova coordinata Y dell'immagine."]
  ::msgcat::mcset ru "New Y coordinate of image." [encoding convertfrom utf-8 "\320\235\320\276\320\262\320\260\321\217 \320\272\320\276\320\276\321\200\320\264\320\270\320\275\320\260\321\202\320\260 Y."]
  ::msgcat::mcset sk "New Y coordinate of image." [encoding convertfrom utf-8 "Nov\303\275 Y s\303\272radnica obr\303\241zku."]
  ::msgcat::mcset sq "New Y coordinate of image." [encoding convertfrom utf-8 "koordinata Y e re e imazhit."]

  ::msgcat::mcset bg "Move front" [encoding convertfrom utf-8 "\320\237\321\200\320\265\320\274\320\265\321\201\321\202\320\270 \320\276\321\202\320\277\321\200\320\265\320\264"]
  ::msgcat::mcset cz "Move front" [encoding convertfrom utf-8 "Dop\305\231edu"]
  ::msgcat::mcset de "Move front" [encoding convertfrom utf-8 "Nach vorne verschieben"]
  ::msgcat::mcset el "Move front" [encoding convertfrom utf-8 "\316\234\316\265\317\204\316\261\316\272\316\257\316\275\316\267\317\203\316\267 \317\200\317\201\316\277\317\202 \317\204\316\261 \316\274\317\200\317\201\316\277\317\202"]
  ::msgcat::mcset en "Move front" [encoding convertfrom utf-8 "Move front"]
  ::msgcat::mcset es "Move front" [encoding convertfrom utf-8 "Delante"]
  ::msgcat::mcset it "Move front" [encoding convertfrom utf-8 "Davanti"]
  ::msgcat::mcset ru "Move front" [encoding convertfrom utf-8 "\320\237\320\276\320\262\320\265\321\200\321\205 \320\262\321\201\320\265\321\205"]
  ::msgcat::mcset sk "Move front" [encoding convertfrom utf-8 "Navrch"]
  ::msgcat::mcset sq "Move front" [encoding convertfrom utf-8 "levize perpara"]

  ::msgcat::mcset bg "Move image in front of all images." [encoding convertfrom utf-8 "\320\237\321\200\320\265\320\274\320\265\321\201\321\202\320\270 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265\321\202\320\276 \320\277\321\200\320\265\320\264 \320\262\321\201\320\270\321\207\320\272\320\270 \320\276\321\201\321\202\320\260\320\275\320\260\320\273\320\270."]
  ::msgcat::mcset cz "Move image in front of all images." [encoding convertfrom utf-8 "P\305\231esune obr\303\241zek nad v\305\241echny ostatn\303\255."]
  ::msgcat::mcset de "Move image in front of all images." [encoding convertfrom utf-8 "Bild ganz nach vorne verschieben."]
  ::msgcat::mcset el "Move image in front of all images." [encoding convertfrom utf-8 "\316\234\316\265\317\204\316\261\316\272\316\257\316\275\316\267\317\203\316\267 \316\265\316\271\316\272\317\214\316\275\316\261\317\202 \317\203\317\204\316\267\316\275 \316\272\316\277\317\201\317\205\317\206\316\256"]
  ::msgcat::mcset en "Move image in front of all images." [encoding convertfrom utf-8 "Move image in front of all images."]
  ::msgcat::mcset es "Move image in front of all images." [encoding convertfrom utf-8 "Trae la imagen al frente de todas las im\303\241genes."]
  ::msgcat::mcset it "Move image in front of all images." [encoding convertfrom utf-8 "Sposta l'immagine davanti a tutte le immagini."]
  ::msgcat::mcset ru "Move image in front of all images." [encoding convertfrom utf-8 "\320\222\321\213\320\262\320\265\321\201\321\202\320\270 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 \320\277\320\276\320\262\320\265\321\200\321\205 \320\262\321\201\320\265\321\205 \320\276\321\201\321\202\320\260\320\273\321\214\320\275\321\213\321\205."]
  ::msgcat::mcset sk "Move image in front of all images." [encoding convertfrom utf-8 "Presunie obr\303\241zok nad v\305\241etky ostatn\303\251."]
  ::msgcat::mcset sq "Move image in front of all images." [encoding convertfrom utf-8 "levize imazhin para te gjitha imazheve."]

  ::msgcat::mcset bg "Move back" [encoding convertfrom utf-8 "\320\237\321\200\320\265\320\274\320\265\321\201\321\202\320\270 \320\275\320\260\320\267\320\260\320\264"]
  ::msgcat::mcset cz "Move back" [encoding convertfrom utf-8 "Dozadu"]
  ::msgcat::mcset de "Move back" [encoding convertfrom utf-8 "Nach hinten verschieben"]
  ::msgcat::mcset el "Move back" [encoding convertfrom utf-8 "\316\234\316\265\317\204\316\261\316\272\316\257\316\275\316\267\317\203\316\267 \317\200\317\201\316\277\317\202 \317\204\316\261 \317\200\316\257\317\203\317\211"]
  ::msgcat::mcset en "Move back" [encoding convertfrom utf-8 "Move back"]
  ::msgcat::mcset es "Move back" [encoding convertfrom utf-8 "Detr\303\241s"]
  ::msgcat::mcset it "Move back" [encoding convertfrom utf-8 "Dietro"]
  ::msgcat::mcset ru "Move back" [encoding convertfrom utf-8 "\320\237\320\276\320\264 \320\262\321\201\320\265\320\274\320\270"]
  ::msgcat::mcset sk "Move back" [encoding convertfrom utf-8 "Naspodok"]
  ::msgcat::mcset sq "Move back" [encoding convertfrom utf-8 "levize prapa"]

  ::msgcat::mcset bg "Move image behind all images." [encoding convertfrom utf-8 "\320\237\321\200\320\265\320\274\320\265\321\201\321\202\320\270 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265\321\202\320\276 \320\276\321\202\320\267\320\260\320\264 \320\276\321\201\321\202\320\260\320\275\320\260\320\273\320\270\321\202\320\265"]
  ::msgcat::mcset cz "Move image behind all images." [encoding convertfrom utf-8 "P\305\231esune obr\303\241zek pod v\305\241echny ostatn\303\255."]
  ::msgcat::mcset de "Move image behind all images." [encoding convertfrom utf-8 "Bild ganz nach hinten verschieben."]
  ::msgcat::mcset el "Move image behind all images." [encoding convertfrom utf-8 "\316\234\316\265\317\204\316\261\316\272\316\257\316\275\316\267\317\203\316\267 \317\204\316\267\317\202 \316\265\316\271\316\272\317\214\316\275\316\261\317\202 \317\203\317\204\316\277 \317\206\317\214\316\275\317\204\316\277"]
  ::msgcat::mcset en "Move image behind all images." [encoding convertfrom utf-8 "Move image behind all images."]
  ::msgcat::mcset es "Move image behind all images." [encoding convertfrom utf-8 "Enviar la imagen detr\303\241s de todas las dem\303\241s."]
  ::msgcat::mcset it "Move image behind all images." [encoding convertfrom utf-8 "Sposta l'immagine davanti a tutte le immagini."]
  ::msgcat::mcset ru "Move image behind all images." [encoding convertfrom utf-8 "\320\222\321\213\320\262\320\265\321\201\321\202\320\270 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 \320\267\320\260 \320\262\321\201\320\265\320\274\320\270 \320\276\321\201\321\202\320\260\320\273\321\214\320\275\321\213\320\274\320\270."]
  ::msgcat::mcset sk "Move image behind all images." [encoding convertfrom utf-8 "Presunie obr\303\241zok pod v\305\241etky ostatn\303\251."]
  ::msgcat::mcset sq "Move image behind all images." [encoding convertfrom utf-8 "levize imazhin prapa te gjitha imazheve."]

  ::msgcat::mcset bg "loading preview module ..." [encoding convertfrom utf-8 "\320\267\320\260\321\200\320\265\320\266\320\264\320\260\320\275\320\265 \320\275\320\260 \320\274\320\276\320\264\321\203\320\273\320\260 \320\267\320\260 \320\277\321\200\320\265\320\264\320\262\320\260\321\200\320\270\321\202\320\265\320\273\320\265\320\275 \320\277\321\200\320\265\320\263\320\273\320\265\320\264 ..."]
  ::msgcat::mcset cz "loading preview module ..." [encoding convertfrom utf-8 "nahr\303\241v\303\241m zobrazovac\303\255 modul ..."]
  ::msgcat::mcset de "loading preview module ..." [encoding convertfrom utf-8 "Lade Vorschaumodul ..."]
  ::msgcat::mcset el "loading preview module ..." [encoding convertfrom utf-8 "\316\246\316\277\317\201\317\204\316\257\316\266\316\265\317\204\316\261\316\271 \316\267 \316\265\316\275\317\214\317\204\316\267\317\204\316\261 \317\200\317\201\316\277\316\265\317\200\316\271\317\203\316\272\317\214\317\200\316\271\317\203\316\267\317\202..."]
  ::msgcat::mcset en "loading preview module ..." [encoding convertfrom utf-8 "loading preview module ..."]
  ::msgcat::mcset es "loading preview module ..." [encoding convertfrom utf-8 "ver comandos ..."]
  ::msgcat::mcset it "loading preview module ..." [encoding convertfrom utf-8 "modulo anteprima ..."]
  ::msgcat::mcset ru "loading preview module ..." [encoding convertfrom utf-8 "\320\267\320\260\320\263\321\200\321\203\320\267\320\272\320\260 \320\274\320\276\320\264\321\203\320\273\321\217 \320\277\321\200\320\265\320\264\320\277\321\200\320\276\321\201\320\274\320\276\321\202\321\200\320\260..."]
  ::msgcat::mcset sk "loading preview module ..." [encoding convertfrom utf-8 "nahr\303\241vam n\303\241h\304\276adov\303\275 modul ..."]
  ::msgcat::mcset sq "loading preview module ..." [encoding convertfrom utf-8 "duke lexuar modulin e perkohshem\342\200\246"]

  ::msgcat::mcset bg "Update command" [encoding convertfrom utf-8 "\320\236\320\261\320\275\320\276\320\262\320\270 \320\272\320\276\320\274\320\260\320\275\320\264\320\260\321\202\320\260"]
  ::msgcat::mcset cz "Update command" [encoding convertfrom utf-8 "Aktualizovat"]
  ::msgcat::mcset de "Update command" [encoding convertfrom utf-8 "Kommando aktualisieren"]
  ::msgcat::mcset el "Update command" [encoding convertfrom utf-8 "\316\221\316\275\316\261\316\275\316\255\317\211\317\203\316\267"]
  ::msgcat::mcset en "Update command" [encoding convertfrom utf-8 "Update command"]
  ::msgcat::mcset es "Update command" [encoding convertfrom utf-8 "Actualizar"]
  ::msgcat::mcset it "Update command" [encoding convertfrom utf-8 "Aggiorna comando"]
  ::msgcat::mcset ru "Update command" [encoding convertfrom utf-8 "\320\236\320\261\320\275\320\276\320\262\320\270\321\202\321\214 \320\272\320\276\320\274\320\260\320\275\320\264\321\203"]
  ::msgcat::mcset sk "Update command" [encoding convertfrom utf-8 "Aktualizova\305\245"]
  ::msgcat::mcset sq "Update command" [encoding convertfrom utf-8 "urdheri-komanda e aktualizimit"]

  ::msgcat::mcset bg "Press this button, if you have changed something and you can not see your changes here." [encoding convertfrom utf-8 "\320\235\320\260\321\202\320\270\321\201\320\275\320\265\321\202\320\265 \321\202\320\276\320\267\320\270 \320\261\321\203\321\202\320\276\320\275, \320\260\320\272\320\276 \321\201\321\202\320\265 \320\275\320\260\320\277\321\200\320\260\320\262\320\270\320\273\320\270 \320\277\321\200\320\276\320\274\320\265\320\275\320\270 \320\270 \320\275\320\265 \320\263\320\270 \320\262\320\270\320\266\320\264\320\260\321\202\320\265 \321\202\321\203\320\272."]
  ::msgcat::mcset cz "Press this button, if you have changed something and you can not see your changes here." [encoding convertfrom utf-8 "Stiskn\304\233te toto tla\304\215\303\255tko, pokud jste n\304\233co zm\304\233nili a zm\304\233ny nejsou v tomto okn\304\233 viditeln\303\251."]
  ::msgcat::mcset de "Press this button, if you have changed something and you can not see your changes here." [encoding convertfrom utf-8 "Dr\303\274cke diesen Knopf, falls du etwas ge\303\244ndert hast und die \303\204nderungen nicht hier sehen kannst."]
  ::msgcat::mcset el "Press this button, if you have changed something and you can not see your changes here." [encoding convertfrom utf-8 "\316\240\316\261\317\204\316\256\317\203\317\204\316\265 \316\265\316\264\317\216 \316\261\316\275 \316\261\316\273\316\273\316\254\316\276\316\261\317\204\316\265 \316\272\316\254\317\204\316\271 \316\272\316\261\316\271 \316\264\316\265\316\275 \316\265\316\274\317\206\316\261\316\275\316\257\316\266\316\277\316\275\317\204\316\261\316\271 \316\265\316\264\317\216 \316\277\316\271 \316\261\316\273\316\273\316\261\316\263\316\255\317\202."]
  ::msgcat::mcset en "Press this button, if you have changed something and you can not see your changes here." [encoding convertfrom utf-8 "Press this button, if you have changed something and you can not see your changes here."]
  ::msgcat::mcset es "Press this button, if you have changed something and you can not see your changes here." [encoding convertfrom utf-8 "Clicar aqu\303\255 si has cambiado algo y no ves aqu\303\255 los resultados del cambio"]
  ::msgcat::mcset it "Press this button, if you have changed something and you can not see your changes here." [encoding convertfrom utf-8 "Premi questo bottone se hai fatto modifiche che non sono visualizzate."]
  ::msgcat::mcset ru "Press this button, if you have changed something and you can not see your changes here." [encoding convertfrom utf-8 "\320\235\320\260\320\266\320\274\320\270\321\202\320\265 \321\215\321\202\321\203 \320\272\320\275\320\276\320\277\320\272\321\203, \320\265\321\201\320\273\320\270 \320\262\321\213 \321\207\321\202\320\276-\321\202\320\276 \320\270\320\267\320\274\320\265\320\275\320\270\320\273\320\270, \320\275\320\276 \320\275\320\265 \321\203\320\262\320\270\320\264\320\265\320\273\320\270 \320\267\320\264\320\265\321\201\321\214 \321\201\320\262\320\276\320\270\321\205 \320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\320\271."]
  ::msgcat::mcset sk "Press this button, if you have changed something and you can not see your changes here." [encoding convertfrom utf-8 "Stla\304\215te toto tla\304\215\303\255tko, ak ste nie\304\215o zmenili a zmeny nie su v tomto okne vidite\304\276n\303\251."]
  ::msgcat::mcset sq "Press this button, if you have changed something and you can not see your changes here." [encoding convertfrom utf-8 "shtype kete buton, nese ke ndryshuar diqka te cilin ndryshim nuk mund ta shohesh ketu."]

  ::msgcat::mcset bg "Command preview." [encoding convertfrom utf-8 "\320\237\321\200\320\265\320\263\320\273\320\265\320\264 \320\275\320\260 \320\272\320\276\320\274\320\260\320\275\320\264\320\260\321\202\320\260."]
  ::msgcat::mcset cz "Command preview." [encoding convertfrom utf-8 "N\303\241hled p\305\231\303\255kazu."]
  ::msgcat::mcset de "Command preview." [encoding convertfrom utf-8 "Kommando Vorschau."]
  ::msgcat::mcset el "Command preview." [encoding convertfrom utf-8 "\316\225\316\264\317\216 \316\262\316\273\316\255\317\200\316\265\317\204\316\265 \316\277\316\273\316\277\316\272\316\273\316\267\317\201\317\211\316\274\316\255\316\275\316\265\317\202 \316\265\316\275\317\204\316\277\316\273\316\255\317\202 \316\274\316\265 \316\265\317\206\316\261\317\201\316\274\316\277\316\263\316\256 \316\265\317\200\316\271\316\273\316\277\316\263\317\216\316\275."]
  ::msgcat::mcset en "Command preview." [encoding convertfrom utf-8 "Here you can see complete commands with options applied."]
  ::msgcat::mcset es "Command preview." [encoding convertfrom utf-8 "Aqu\303\255 se pueden ver los comandos completos, opciones inclu\303\255das."]
  ::msgcat::mcset it "Command preview." [encoding convertfrom utf-8 "Anteprima comando."]
  ::msgcat::mcset ru "Command preview." [encoding convertfrom utf-8 "\320\237\321\200\320\276\321\201\320\274\320\276\321\202\321\200 \320\272\320\276\320\274\320\260\320\275\320\264\321\213."]
  ::msgcat::mcset sk "Command preview." [encoding convertfrom utf-8 "N\303\241h\304\276ad pr\303\255kazu."]
  ::msgcat::mcset sq "Command preview." [encoding convertfrom utf-8 "ketu mund te shohesh komandat komplete me opcionet e vendosura."]

  ::msgcat::mcset bg "loading scrap module ..." [encoding convertfrom utf-8 "\320\227\320\260\321\200\320\265\320\266\320\264\320\260\320\275\320\265 \320\275\320\260 \321\201\320\272\321\200\320\260\320\277 \320\274\320\276\320\264\321\203\320\273\320\260 ..."]
  ::msgcat::mcset cz "loading scrap module ..." [encoding convertfrom utf-8 "nahr\303\241v\303\241m scrap modul ..."]
  ::msgcat::mcset de "loading scrap module ..." [encoding convertfrom utf-8 "Lade Skizzenmodul ..."]
  ::msgcat::mcset el "loading scrap module ..." [encoding convertfrom utf-8 "\317\206\316\277\317\201\317\204\316\257\316\266\316\265\317\204\316\261\316\271 \316\267 \316\265\316\275\317\214\317\204\316\267\317\204\316\261 \317\204\317\211\316\275 \317\203\316\272\317\201\316\261\317\200..."]
  ::msgcat::mcset en "loading scrap module ..." [encoding convertfrom utf-8 "loading scrap module ..."]
  ::msgcat::mcset es "loading scrap module ..." [encoding convertfrom utf-8 "croquis ..."]
  ::msgcat::mcset it "loading scrap module ..." [encoding convertfrom utf-8 "modulo scrap ..."]
  ::msgcat::mcset ru "loading scrap module ..." [encoding convertfrom utf-8 "\320\267\320\260\320\263\321\200\321\203\320\267\320\272\320\260 \321\201\320\272\321\200\320\260\320\277-\320\274\320\276\320\264\321\203\320\273\321\217..."]
  ::msgcat::mcset sk "loading scrap module ..." [encoding convertfrom utf-8 "nahr\303\241vam scrap modul ..."]
  ::msgcat::mcset sq "loading scrap module ..." [encoding convertfrom utf-8 "duke lexuar modulin e deponise\342\200\246"]

  ::msgcat::mcset bg "Scrap name." [encoding convertfrom utf-8 "\320\230\320\274\320\265 \320\275\320\260 \321\201\320\272\321\200\320\260\320\277."]
  ::msgcat::mcset cz "Scrap name." [encoding convertfrom utf-8 "N\303\241zev scrapu."]
  ::msgcat::mcset de "Scrap name." [encoding convertfrom utf-8 "Skizzenname."]
  ::msgcat::mcset el "Scrap name." [encoding convertfrom utf-8 "\316\214\316\275\316\277\316\274\316\261 \317\203\316\272\317\201\316\261\317\200"]
  ::msgcat::mcset en "Scrap name." [encoding convertfrom utf-8 "Scrap name."]
  ::msgcat::mcset es "Scrap name." [encoding convertfrom utf-8 "Nombre del croquis."]
  ::msgcat::mcset it "Scrap name." [encoding convertfrom utf-8 "Nome dello scrap."]
  ::msgcat::mcset ru "Scrap name." [encoding convertfrom utf-8 "\320\230\320\274\321\217 \321\201\320\272\321\200\320\260\320\277\320\260."]
  ::msgcat::mcset sk "Scrap name." [encoding convertfrom utf-8 "Identifik\303\241tor (meno) scrapu."]
  ::msgcat::mcset sq "Scrap name." [encoding convertfrom utf-8 "emri I deponise."]

  ::msgcat::mcset bg "projection" [encoding convertfrom utf-8 "\320\277\321\200\320\276\320\265\320\272\321\206\320\270\321\217"]
  ::msgcat::mcset cz "projection" [encoding convertfrom utf-8 "projekce"]
  ::msgcat::mcset de "projection" [encoding convertfrom utf-8 "Projektion"]
  ::msgcat::mcset el "projection" [encoding convertfrom utf-8 "\317\200\317\201\316\277\316\262\316\277\316\273\316\256"]
  ::msgcat::mcset en "projection" [encoding convertfrom utf-8 "projection"]
  ::msgcat::mcset es "projection" [encoding convertfrom utf-8 "proyecci\303\263n"]
  ::msgcat::mcset it "projection" [encoding convertfrom utf-8 "proiezione"]
  ::msgcat::mcset ru "projection" [encoding convertfrom utf-8 "\320\277\321\200\320\276\320\265\320\272\321\206\320\270\321\217"]
  ::msgcat::mcset sk "projection" [encoding convertfrom utf-8 "projekcia"]
  ::msgcat::mcset sq "projection" [encoding convertfrom utf-8 "projekcioni"]

  ::msgcat::mcset bg "Scrap projection." [encoding convertfrom utf-8 "\320\237\321\200\320\276\320\265\320\272\321\206\320\270\321\217 \320\275\320\260 \321\201\320\272\321\200\320\260\320\277\320\260."]
  ::msgcat::mcset cz "Scrap projection." [encoding convertfrom utf-8 "Projekce scrapu."]
  ::msgcat::mcset de "Scrap projection." [encoding convertfrom utf-8 "Skizzenprojektion"]
  ::msgcat::mcset el "Scrap projection." [encoding convertfrom utf-8 "\316\240\317\201\316\277\316\262\316\277\316\273\316\256 \317\203\316\272\317\201\316\261\317\200 (\316\272\316\273\316\271\316\272 \317\203\317\204\316\277 \317\204\317\201\316\257\316\263\317\211\316\275\316\277 \316\263\316\271\316\261 \316\274\316\265\316\275\316\277\317\215)"]
  ::msgcat::mcset en "Scrap projection." [encoding convertfrom utf-8 "Scrap projection (clic on triangle to see menu)."]
  ::msgcat::mcset es "Scrap projection." [encoding convertfrom utf-8 "Proyecci\303\263n del croquis (Clic en tri\303\241ngulo para ver el men\303\272)."]
  ::msgcat::mcset it "Scrap projection." [encoding convertfrom utf-8 "Proiezione dello scrap."]
  ::msgcat::mcset ru "Scrap projection." [encoding convertfrom utf-8 "\320\237\321\200\320\276\320\265\320\272\321\206\320\270\321\217 \321\201\320\272\321\200\320\260\320\277\320\260."]
  ::msgcat::mcset sk "Scrap projection." [encoding convertfrom utf-8 "Projekcia scrapu."]
  ::msgcat::mcset sq "Scrap projection." [encoding convertfrom utf-8 "projeksioni I deponise (kliko ne trekendesh te shohesh menyne)."]

  ::msgcat::mcset bg "Other scrap options." [encoding convertfrom utf-8 "\320\224\321\200\321\203\320\263\320\270 \320\276\320\277\321\206\320\270\320\270 \320\275\320\260 \321\201\320\272\321\200\320\260\320\277\320\260."]
  ::msgcat::mcset cz "Other scrap options." [encoding convertfrom utf-8 "Dal\305\241\303\255 volby pro scrap."]
  ::msgcat::mcset de "Other scrap options." [encoding convertfrom utf-8 "Andere Skizzenoptionen."]
  ::msgcat::mcset el "Other scrap options." [encoding convertfrom utf-8 "\316\206\316\273\316\273\316\265\317\202 \316\265\317\200\316\271\316\273\316\277\316\263\316\255\317\202 \317\204\317\211\316\275 \317\203\316\272\317\201\316\261\317\200 - \316\262\316\273\316\255\317\200\316\265\317\204\316\265 \317\204\316\277 thbook.pdf"]
  ::msgcat::mcset en "Other scrap options." [encoding convertfrom utf-8 "Other scrap options (more on this on thbook.pdf)"]
  ::msgcat::mcset es "Other scrap options." [encoding convertfrom utf-8 "Otras opciones del croquis. Consultar thbook.pdf"]
  ::msgcat::mcset it "Other scrap options." [encoding convertfrom utf-8 "Altre opzioni dello scrap"]
  ::msgcat::mcset ru "Other scrap options." [encoding convertfrom utf-8 "\320\224\321\200\321\203\320\263\320\270\320\265 \320\276\320\277\321\206\320\270\320\270 \321\201\320\272\321\200\320\260\320\277\320\260."]
  ::msgcat::mcset sk "Other scrap options." [encoding convertfrom utf-8 "Ostatn\303\251 mo\305\276nosti scrapu."]
  ::msgcat::mcset sq "Other scrap options." [encoding convertfrom utf-8 "opcionet tjera te deponise (me shume per kete ne librin e therion-it.pdf)"]

  ::msgcat::mcset bg "Scale" [encoding convertfrom utf-8 "\320\234\320\260\321\211\320\260\320\261"]
  ::msgcat::mcset cz "Scale" [encoding convertfrom utf-8 "M\304\233\305\231\303\255tko"]
  ::msgcat::mcset de "Scale" [encoding convertfrom utf-8 "Ma\303\237stab"]
  ::msgcat::mcset el "Scale" [encoding convertfrom utf-8 "\316\232\316\273\316\257\316\274\316\261\316\272\316\261\317\202"]
  ::msgcat::mcset it "Scale" [encoding convertfrom utf-8 "Scala"]
  ::msgcat::mcset ru "Scale" [encoding convertfrom utf-8 "\320\234\320\260\321\201\321\210\321\202\320\260\320\261"]
  ::msgcat::mcset sk "Scale" [encoding convertfrom utf-8 "Mierka"]
  ::msgcat::mcset sq "Scale" [encoding convertfrom utf-8 "matesi"]

  ::msgcat::mcset bg "Scrap scaling - push to click picture calibration points." [encoding convertfrom utf-8 "\320\234\320\260\321\211\320\260\320\261\320\270\321\200\320\260\320\275\320\265 \320\275\320\260 \321\201\320\272\321\200\320\260\320\277\320\260 - \320\275\320\260\321\202\320\270\321\201\320\275\320\265\321\202\320\265 \321\202\320\276\320\267\320\270 \320\261\321\203\321\202\320\276\320\275 \320\270 \320\277\320\276\321\201\321\202\320\260\320\262\320\265\321\202\320\265 \321\201 \320\274\320\270\321\210\320\272\320\260\321\202\320\260 \321\202\320\276\321\207\320\272\320\260 \320\267\320\260 \320\274\320\260\321\211\320\260\320\261\320\270\321\200\320\260\320\275\320\265 \320\262/\321\203 \321\201\320\272\321\200\320\260\320\277\320\260."]
  ::msgcat::mcset cz "Scrap scaling - push to click picture calibration points." [encoding convertfrom utf-8 "\305\240k\303\241lov\303\241n\303\255 scrapu - stiskni pro v\303\275b\304\233r kalibra\304\215n\303\255ch bod\305\257 obr\303\241zku."]
  ::msgcat::mcset de "Scrap scaling - push to click picture calibration points." [encoding convertfrom utf-8 "Skizze skalieren - dr\303\274cken um Bildeinstellungspunkte zu klicken."]
  ::msgcat::mcset el "Scrap scaling - push to click picture calibration points." [encoding convertfrom utf-8 "\316\232\316\261\316\273\316\271\317\200\317\201\316\254\317\201\316\271\317\203\316\274\316\261 \317\203\316\272\317\201\316\261\317\200 - \316\272\316\254\316\275\317\204\316\265 \316\272\316\273\316\271\316\272 \316\263\316\271\316\261 \316\275\316\261 \316\265\317\200\316\271\316\273\316\255\316\276\316\265\317\204\316\265 \317\204\316\261 \317\203\316\267\316\274\316\265\316\257\316\261 \316\263\316\271\316\261 \316\272\316\261\316\273\316\271\316\274\317\200\317\201\316\254\317\201\316\271\317\203\316\274\316\261."]
  ::msgcat::mcset it "Scrap scaling - push to click picture calibration points." [encoding convertfrom utf-8 "Rescalamento - premi per selezionare i punti di calibrazione."]
  ::msgcat::mcset ru "Scrap scaling - push to click picture calibration points." [encoding convertfrom utf-8 "\320\234\320\260\321\201\321\210\321\202\320\260\320\261\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265 \321\201\320\272\321\200\320\260\320\277\320\260 - \320\275\320\260\320\266\320\270\320\274\321\202\320\265 \321\215\321\202\321\203 \320\272\320\275\320\276\320\277\320\272\321\203 \320\270 \320\262\321\213\321\201\321\202\320\260\320\262\320\270\321\202\320\265 \321\202\320\276\321\207\320\272\320\270 \320\274\320\260\321\201\321\210\321\202\320\260\320\261\320\270\321\200\320\276\320\262\320\260\320\275\320\270\321\217 \320\274\321\213\321\210\321\214\321\216"]
  ::msgcat::mcset sk "Scrap scaling - push to click picture calibration points." [encoding convertfrom utf-8 "\305\240k\303\241lovanie scrapu - po stla\304\215en\303\255 klikni na \305\241k\303\241lovacie body."]
  ::msgcat::mcset sq "Scrap scaling - push to click picture calibration points." [encoding convertfrom utf-8 "matja e deponise-shtyp te klikosh pikat kalibruese te fotos."]

  ::msgcat::mcset bg "Update scrap" [encoding convertfrom utf-8 "\320\236\320\261\320\275\320\276\320\262\320\270 \321\201\320\272\321\200\320\260\320\277\320\260"]
  ::msgcat::mcset cz "Update scrap" [encoding convertfrom utf-8 "Aktualizovat"]
  ::msgcat::mcset de "Update scrap" [encoding convertfrom utf-8 "Skizze aktualisieren"]
  ::msgcat::mcset el "Update scrap" [encoding convertfrom utf-8 "\316\225\316\275\316\267\316\274\316\255\317\201\317\211\317\203\316\267 \317\203\316\272\317\201\316\261\317\200"]
  ::msgcat::mcset en "Update scrap" [encoding convertfrom utf-8 "Update scrap"]
  ::msgcat::mcset es "Update scrap" [encoding convertfrom utf-8 "Actualizar"]
  ::msgcat::mcset it "Update scrap" [encoding convertfrom utf-8 "Aggiorna scrap"]
  ::msgcat::mcset ru "Update scrap" [encoding convertfrom utf-8 "\320\236\320\261\320\275\320\276\320\262\320\270\321\202\321\214 \321\201\320\272\321\200\320\260\320\277"]
  ::msgcat::mcset sk "Update scrap" [encoding convertfrom utf-8 "Aktualizuj scrap"]
  ::msgcat::mcset sq "Update scrap" [encoding convertfrom utf-8 "aktualizo deponine"]

  ::msgcat::mcset bg "Press this button to apply your changes to current scrap." [encoding convertfrom utf-8 "\320\235\320\260\321\202\320\270\321\201\320\275\320\265\321\202\320\265 \321\202\320\276\320\267\320\270 \320\261\321\203\321\202\320\276\320\275 \320\267\320\260 \320\264\320\260 \320\277\321\200\320\270\320\273\320\276\320\266\320\270\321\202\320\265 \320\277\321\200\320\276\320\274\320\265\320\275\320\270\321\202\320\265 \320\262/\321\203 \321\202\320\265\320\272\321\203\321\211\320\270\321\217 \321\201\320\272\321\200\320\260\320\277."]
  ::msgcat::mcset cz "Press this button to apply your changes to current scrap." [encoding convertfrom utf-8 "Stiskn\304\233te toto tla\304\215\303\255tko po uplatn\304\233n\303\255 zm\304\233n aktu\303\241ln\303\255ho scrapu."]
  ::msgcat::mcset de "Press this button to apply your changes to current scrap." [encoding convertfrom utf-8 "Dr\303\274cke diesen Knopf, um deine \303\204nderungen auf diese Skizze anzuwenden."]
  ::msgcat::mcset el "Press this button to apply your changes to current scrap." [encoding convertfrom utf-8 "\316\240\316\261\317\204\316\256\317\203\317\204\316\265 \316\265\316\264\317\216 \316\263\316\271\316\261 \316\275\316\261 \316\263\316\257\316\275\316\265\316\271 \316\265\317\206\316\261\317\201\316\274\316\277\316\263\316\256 \317\204\317\211\316\275 \316\261\316\273\316\273\316\261\316\263\317\216\316\275 \317\203\316\261\317\202 \317\203\317\204\316\277 \317\204\317\201\316\255\317\207\316\277\316\275 \317\203\316\272\317\201\316\261\317\200."]
  ::msgcat::mcset en "Press this button to apply your changes to current scrap." [encoding convertfrom utf-8 "Press this button to apply your changes to current scrap."]
  ::msgcat::mcset es "Press this button to apply your changes to current scrap." [encoding convertfrom utf-8 "Clicar aqu\303\255 tras modificar las propiedades del croquis."]
  ::msgcat::mcset it "Press this button to apply your changes to current scrap." [encoding convertfrom utf-8 "Premi questo bottone per applicare le tue modifiche allo scrap."]
  ::msgcat::mcset ru "Press this button to apply your changes to current scrap." [encoding convertfrom utf-8 "\320\235\320\260\320\266\320\274\320\270\321\202\320\265 \321\215\321\202\321\203 \320\272\320\275\320\276\320\277\320\272\321\203 \320\264\320\273\321\217 \320\262\320\262\320\265\320\264\320\265\320\275\320\270\321\217 \320\262 \320\264\320\265\320\271\321\201\321\202\320\262\320\270\320\265 \320\262\320\260\321\210\320\270\321\205 \320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\320\271 \320\264\320\273\321\217 \321\202\320\265\320\272\321\203\321\211\320\265\320\263\320\276 \321\201\320\272\321\200\320\260\320\277\320\260"]
  ::msgcat::mcset sk "Press this button to apply your changes to current scrap." [encoding convertfrom utf-8 "Stla\304\215te tento gomb\303\255k, aby sa va\305\241e zmeny v scrape ulo\305\276ili."]
  ::msgcat::mcset sq "Press this button to apply your changes to current scrap." [encoding convertfrom utf-8 "shtype kete buton qe te besh ndrimet ne deponine momentale."]

  ::msgcat::mcset bg "picture scale points" [encoding convertfrom utf-8 "\320\274\320\260\321\211\320\260\320\261\320\270\321\200\320\260\321\211\320\270 \321\202\320\276\321\207\320\272\320\270 \320\267\320\260 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265"]
  ::msgcat::mcset cz "picture scale points" [encoding convertfrom utf-8 "body m\304\233\305\231\303\255tka (obr\303\241zek)"]
  ::msgcat::mcset de "picture scale points" [encoding convertfrom utf-8 "Bildskalierungspunkte"]
  ::msgcat::mcset el "picture scale points" [encoding convertfrom utf-8 "\317\203\316\267\316\274\316\265\316\257\316\261 \316\263\316\271\316\261 \316\272\316\261\316\273\316\271\316\274\317\200\317\201\316\254\317\201\316\271\317\203\316\274\316\261 (\317\200\316\257\316\276\316\265\316\273)"]
  ::msgcat::mcset en "picture scale points" [encoding convertfrom utf-8 "picture scale points (pixels)"]
  ::msgcat::mcset es "picture scale points" [encoding convertfrom utf-8 "puntos de escala (pixels)"]
  ::msgcat::mcset it "picture scale points" [encoding convertfrom utf-8 "punti nella scala del disegno"]
  ::msgcat::mcset ru "picture scale points" [encoding convertfrom utf-8 "\320\274\320\260\321\201\321\210\321\202\320\260\320\261\320\270\321\200\321\203\321\216\321\211\320\270\320\265 \321\202\320\276\321\207\320\272\320\270 \320\264\320\273\321\217 \320\272\320\260\321\200\321\202\320\270\320\275\320\272\320\270"]
  ::msgcat::mcset sk "picture scale points" [encoding convertfrom utf-8 "kalibra\304\215n\303\251 body (obrazovka)"]
  ::msgcat::mcset sq "picture scale points" [encoding convertfrom utf-8 "pikat matese te fotos-pikselat"]

  ::msgcat::mcset bg "Calibration points on the picture (X1:Y1 - X2:Y2)." [encoding convertfrom utf-8 "\320\232\320\260\320\273\320\270\320\261\321\200\320\270\321\200\320\260\321\211\320\270 \321\202\320\276\321\207\320\272\320\270 \320\275\320\260 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (X1:Y1 - X2:Y2)"]
  ::msgcat::mcset cz "Calibration points on the picture (X1:Y1 - X2:Y2)." [encoding convertfrom utf-8 "Kalibra\304\215n\303\255 body na obr\303\241zku (X1:Y1 - X2:Y2)."]
  ::msgcat::mcset de "Calibration points on the picture (X1:Y1 - X2:Y2)." [encoding convertfrom utf-8 "Kalibrierungspunkte auf dem Bild (X1:Y1 - X2:Y2)."]
  ::msgcat::mcset el "Calibration points on the picture (X1:Y1 - X2:Y2)." [encoding convertfrom utf-8 "\316\243\316\267\316\274\316\265\316\257\316\261 \316\272\316\261\316\273\316\271\316\274\317\200\317\201\316\261\317\201\316\257\317\203\316\274\316\261\317\204\316\277\317\202 \317\203\317\204\316\267\316\275 \316\265\316\271\316\272\317\214\316\275\316\261 (\316\2471:\316\2451 - \316\2472:\316\2452)."]
  ::msgcat::mcset en "Calibration points on the picture (X1:Y1 - X2:Y2)." [encoding convertfrom utf-8 "Calibration points on the picture (X1:Y1 - X2:Y2)."]
  ::msgcat::mcset es "Calibration points on the picture (X1:Y1 - X2:Y2)." [encoding convertfrom utf-8 "Puntos de calibraci\303\263n en la imagen (X1:Y1 - X2:Y2)."]
  ::msgcat::mcset it "Calibration points on the picture (X1:Y1 - X2:Y2)." [encoding convertfrom utf-8 "Punti di calibrazione sul disegno (X1:Y1 - X2:Y2)."]
  ::msgcat::mcset ru "Calibration points on the picture (X1:Y1 - X2:Y2)." [encoding convertfrom utf-8 "\320\232\320\260\320\273\320\270\320\261\321\200\320\276\320\262\320\276\321\207\320\275\321\213\320\265 \321\202\320\276\321\207\320\272\320\270 \320\275\320\260 \320\272\320\260\321\200\321\202\320\270\320\275\320\272\320\265 (X1:Y1 - X2:Y2)."]
  ::msgcat::mcset sk "Calibration points on the picture (X1:Y1 - X2:Y2)." [encoding convertfrom utf-8 "S\303\272radnice kalibra\304\215n\303\275ch bodov na obrazovke (X1:Y1 - X2:Y2)"]
  ::msgcat::mcset sq "Calibration points on the picture (X1:Y1 - X2:Y2)." [encoding convertfrom utf-8 "pikat e kalibrimit ne foto (X1:Y1 - X2:Y2)"]

  ::msgcat::mcset bg "X1 picture." [encoding convertfrom utf-8 "X1 \320\275\320\260 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265"]
  ::msgcat::mcset cz "X1 picture." [encoding convertfrom utf-8 "X1 obr\303\241zek."]
  ::msgcat::mcset de "X1 picture." [encoding convertfrom utf-8 "X1 Bild."]
  ::msgcat::mcset el "X1 picture." [encoding convertfrom utf-8 "\316\2471 \316\265\316\271\316\272\317\214\316\275\316\261\317\202"]
  ::msgcat::mcset en "X1 picture." [encoding convertfrom utf-8 "X1 picture."]
  ::msgcat::mcset es "X1 picture." [encoding convertfrom utf-8 "Punto de escala X1 en la imagen."]
  ::msgcat::mcset it "X1 picture." [encoding convertfrom utf-8 "X1 del disegno."]
  ::msgcat::mcset ru "X1 picture." [encoding convertfrom utf-8 "X1 \320\272\320\260\321\200\321\202\320\270\320\275\320\272\320\270."]
  ::msgcat::mcset sk "X1 picture." [encoding convertfrom utf-8 "X1 na obr\303\241zku."]
  ::msgcat::mcset sq "X1 picture." [encoding convertfrom utf-8 "x1 fotoja"]

  ::msgcat::mcset bg "Y1 picture." [encoding convertfrom utf-8 "Y1 \320\275\320\260 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265"]
  ::msgcat::mcset cz "Y1 picture." [encoding convertfrom utf-8 "Y1 obr\303\241zek."]
  ::msgcat::mcset de "Y1 picture." [encoding convertfrom utf-8 "Y1 Bild."]
  ::msgcat::mcset el "Y1 picture." [encoding convertfrom utf-8 "\316\2451 \316\265\316\271\316\272\317\214\316\275\316\261\317\202"]
  ::msgcat::mcset en "Y1 picture." [encoding convertfrom utf-8 "Y1 picture."]
  ::msgcat::mcset es "Y1 picture." [encoding convertfrom utf-8 "Punto de escala Y1 en la imagen."]
  ::msgcat::mcset it "Y1 picture." [encoding convertfrom utf-8 "Y1 del disegno."]
  ::msgcat::mcset ru "Y1 picture." [encoding convertfrom utf-8 "Y1 \320\272\320\260\321\200\321\202\320\270\320\275\320\272\320\270."]
  ::msgcat::mcset sk "Y1 picture." [encoding convertfrom utf-8 "Y1 na obr\303\241zku."]
  ::msgcat::mcset sq "Y1 picture." [encoding convertfrom utf-8 "Y1 fotoja"]

  ::msgcat::mcset bg "X2 picture." [encoding convertfrom utf-8 "X2 \320\275\320\260 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265"]
  ::msgcat::mcset cz "X2 picture." [encoding convertfrom utf-8 "X2 obr\303\241zek."]
  ::msgcat::mcset de "X2 picture." [encoding convertfrom utf-8 "X2 Bild."]
  ::msgcat::mcset el "X2 picture." [encoding convertfrom utf-8 "\316\2472 \316\265\316\271\316\272\317\214\316\275\316\261\317\202"]
  ::msgcat::mcset en "X2 picture." [encoding convertfrom utf-8 "X2 picture."]
  ::msgcat::mcset es "X2 picture." [encoding convertfrom utf-8 "Punto de escala X2 en la imagen."]
  ::msgcat::mcset it "X2 picture." [encoding convertfrom utf-8 "X2 del disegno."]
  ::msgcat::mcset ru "X2 picture." [encoding convertfrom utf-8 "X2 \320\272\320\260\321\200\321\202\320\270\320\275\320\272\320\270."]
  ::msgcat::mcset sk "X2 picture." [encoding convertfrom utf-8 "X2 na obr\303\241zku."]
  ::msgcat::mcset sq "X2 picture." [encoding convertfrom utf-8 "X2 fotoja"]

  ::msgcat::mcset bg "Y2 picture." [encoding convertfrom utf-8 "Y2 \320\275\320\260 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265"]
  ::msgcat::mcset cz "Y2 picture." [encoding convertfrom utf-8 "Y2 obr\303\241zek."]
  ::msgcat::mcset de "Y2 picture." [encoding convertfrom utf-8 "Y2 Bild."]
  ::msgcat::mcset el "Y2 picture." [encoding convertfrom utf-8 "\316\2452 \316\265\316\271\316\272\317\214\316\275\316\261\317\202"]
  ::msgcat::mcset en "Y2 picture." [encoding convertfrom utf-8 "Y2 picture."]
  ::msgcat::mcset es "Y2 picture." [encoding convertfrom utf-8 "Punto de escala Y2 en la imagen."]
  ::msgcat::mcset it "Y2 picture." [encoding convertfrom utf-8 "Y2 del disegno."]
  ::msgcat::mcset ru "Y2 picture." [encoding convertfrom utf-8 "Y2 \320\272\320\260\321\200\321\202\320\270\320\275\320\272\320\270."]
  ::msgcat::mcset sk "Y2 picture." [encoding convertfrom utf-8 "Y2 na obr\303\241zku."]
  ::msgcat::mcset sq "Y2 picture." [encoding convertfrom utf-8 "Y2 fotoja"]

  ::msgcat::mcset bg "real scale points" [encoding convertfrom utf-8 "\321\200\320\265\320\260\320\273\320\275\320\270 \320\274\320\260\321\211\320\260\320\261\320\270\321\200\320\260\321\211\320\270 \321\202\320\276\321\207\320\272\320\270"]
  ::msgcat::mcset cz "real scale points" [encoding convertfrom utf-8 "body m\304\233\305\231\303\255tka (skute\304\215n\303\251)"]
  ::msgcat::mcset de "real scale points" [encoding convertfrom utf-8 "Punkte f\303\274r Realma\303\237stab"]
  ::msgcat::mcset el "real scale points" [encoding convertfrom utf-8 "\317\200\317\201\316\261\316\263\316\274\316\261\317\204\316\271\316\272\316\254 \317\203\316\267\316\274\316\265\316\257\316\261 \316\263\316\271\316\261 \316\272\316\261\316\273\316\271\316\274\317\200\317\201\316\254\317\201\316\271\317\203\316\274\316\261"]
  ::msgcat::mcset en "real scale points" [encoding convertfrom utf-8 "real scale points"]
  ::msgcat::mcset es "real scale points" [encoding convertfrom utf-8 "puntos de escala (reales)"]
  ::msgcat::mcset it "real scale points" [encoding convertfrom utf-8 "punti nella scala effettiva"]
  ::msgcat::mcset ru "real scale points" [encoding convertfrom utf-8 "\321\200\320\265\320\260\320\273\321\214\320\275\321\213\320\265 \320\274\320\260\321\201\321\210\321\202\320\260\320\261\320\270\321\200\321\203\321\216\321\211\320\270\320\265 \321\202\320\276\321\207\320\272\320\270"]
  ::msgcat::mcset sk "real scale points" [encoding convertfrom utf-8 "kalibra\304\215n\303\251 body (skuto\304\215n\303\251)"]
  ::msgcat::mcset sq "real scale points" [encoding convertfrom utf-8 "pikat reale te matjes"]

  ::msgcat::mcset bg "Real coordinates of calibration points (X1:Y1 - X2:Y2)." [encoding convertfrom utf-8 "\320\240\320\265\320\260\320\273\320\275\320\270 \320\272\320\276\320\276\321\200\320\264\320\270\320\275\320\260\321\202\320\270 \320\275\320\260 \320\272\320\260\320\273\320\270\320\261\321\200\320\270\321\200\320\260\321\211\320\270\321\202\320\265 \321\202\320\276\321\207\320\272\320\270 (X1:Y1 - X2:Y2)."]
  ::msgcat::mcset cz "Real coordinates of calibration points (X1:Y1 - X2:Y2)." [encoding convertfrom utf-8 "Skute\304\215n\303\251 sou\305\231adnice kalibra\304\215n\303\255ch bod\305\257 (X1:Y1 - X2:Y2)."]
  ::msgcat::mcset de "Real coordinates of calibration points (X1:Y1 - X2:Y2)." [encoding convertfrom utf-8 "Realkoordinaten der Kalibrierungspunkte (X1:Y1 - X2:Y2)."]
  ::msgcat::mcset el "Real coordinates of calibration points (X1:Y1 - X2:Y2)." [encoding convertfrom utf-8 "\316\240\317\201\316\261\316\263\316\274\316\261\317\204\316\271\316\272\316\255\317\202 \317\203\317\205\316\275\317\204\316\265\317\204\316\261\316\263\316\274\316\255\316\275\316\265\317\202 \317\203\316\267\316\274\316\265\316\257\317\211\316\275 \316\272\316\261\316\273\316\271\316\274\317\200\317\201\316\261\317\201\316\257\317\203\316\274\316\261\317\204\316\277\317\202 (\316\2471:\316\2451 - \316\2472:\316\2452)"]
  ::msgcat::mcset en "Real coordinates of calibration points (X1:Y1 - X2:Y2)." [encoding convertfrom utf-8 "Real coordinates of calibration points (X1:Y1 - X2:Y2)."]
  ::msgcat::mcset es "Real coordinates of calibration points (X1:Y1 - X2:Y2)." [encoding convertfrom utf-8 "Coordenadas reales de los puntos de calibraci\303\263n (X1:Y1 - X2:Y2)."]
  ::msgcat::mcset it "Real coordinates of calibration points (X1:Y1 - X2:Y2)." [encoding convertfrom utf-8 "Coordinate reali dei punti di calibrazione (x1:y1 - x2:y2)."]
  ::msgcat::mcset ru "Real coordinates of calibration points (X1:Y1 - X2:Y2)." [encoding convertfrom utf-8 "\320\240\320\265\320\260\320\273\321\214\320\275\321\213\320\265 \320\272\320\276\320\276\321\200\320\264\320\270\320\275\320\260\321\202\321\213 \320\272\320\260\320\273\320\270\320\261\321\200\320\276\320\262\320\276\321\207\320\275\321\213\321\205 \321\202\320\276\321\207\320\265\320\272 (X1:Y1 - X2:Y2)."]
  ::msgcat::mcset sk "Real coordinates of calibration points (X1:Y1 - X2:Y2)." [encoding convertfrom utf-8 "Skuto\304\215n\303\251 s\303\272radnice kalibra\304\215n\303\275ch bodov (X1:Y1 - X2:Y2)."]
  ::msgcat::mcset sq "Real coordinates of calibration points (X1:Y1 - X2:Y2)." [encoding convertfrom utf-8 "koordinatat reale te pikave te kalibrimit (X1:Y1 - X2:Y2)."]

  ::msgcat::mcset bg "X1 real." [encoding convertfrom utf-8 "X1 \321\200\320\265\320\260\320\273\320\275\320\276."]
  ::msgcat::mcset cz "X1 real." [encoding convertfrom utf-8 "X1 skute\304\215n\303\275."]
  ::msgcat::mcset el "X1 real." [encoding convertfrom utf-8 "\316\240\317\201\316\261\316\263\316\274\316\261\317\204\316\271\316\272\317\214 \316\2471."]
  ::msgcat::mcset en "X1 real." [encoding convertfrom utf-8 "X1 real."]
  ::msgcat::mcset es "X1 real." [encoding convertfrom utf-8 "X1 real"]
  ::msgcat::mcset it "X1 real." [encoding convertfrom utf-8 "x1 reale."]
  ::msgcat::mcset ru "X1 real." [encoding convertfrom utf-8 "X1 \321\200\320\265\320\260\320\273\321\214\320\275\320\276\320\265."]
  ::msgcat::mcset sk "X1 real." [encoding convertfrom utf-8 "X1 skuto\304\215n\303\275"]
  ::msgcat::mcset sq "X1 real." [encoding convertfrom utf-8 "X1 I vertet-real"]

  ::msgcat::mcset bg "Y1 real." [encoding convertfrom utf-8 "Y1 \321\200\320\265\320\260\320\273\320\275\320\276."]
  ::msgcat::mcset cz "Y1 real." [encoding convertfrom utf-8 "Y1 skute\304\215n\303\275."]
  ::msgcat::mcset el "Y1 real." [encoding convertfrom utf-8 "\316\240\317\201\316\261\316\263\316\274\316\261\317\204\316\271\316\272\317\214 \316\2451."]
  ::msgcat::mcset en "Y1 real." [encoding convertfrom utf-8 "Y1 real."]
  ::msgcat::mcset es "Y1 real." [encoding convertfrom utf-8 "Y1 real"]
  ::msgcat::mcset it "Y1 real." [encoding convertfrom utf-8 "y1 reale."]
  ::msgcat::mcset ru "Y1 real." [encoding convertfrom utf-8 "Y1 \321\200\320\265\320\260\320\273\321\214\320\275\320\276\320\265."]
  ::msgcat::mcset sk "Y1 real." [encoding convertfrom utf-8 "Y1 skuto\304\215n\303\275"]
  ::msgcat::mcset sq "Y1 real." [encoding convertfrom utf-8 "Y1 I vertet-real"]

  ::msgcat::mcset bg "X2 real." [encoding convertfrom utf-8 "X2 \321\200\320\265\320\260\320\273\320\275\320\276."]
  ::msgcat::mcset cz "X2 real." [encoding convertfrom utf-8 "X2 skute\304\215n\303\275."]
  ::msgcat::mcset el "X2 real." [encoding convertfrom utf-8 "\316\240\317\201\316\261\316\263\316\274\316\261\317\204\316\271\316\272\317\214 \316\2471."]
  ::msgcat::mcset en "X2 real." [encoding convertfrom utf-8 "X2 real."]
  ::msgcat::mcset es "X2 real." [encoding convertfrom utf-8 "X2 real"]
  ::msgcat::mcset it "X2 real." [encoding convertfrom utf-8 "x2 reale."]
  ::msgcat::mcset ru "X2 real." [encoding convertfrom utf-8 "X2 \321\200\320\265\320\260\320\273\321\214\320\275\320\276\320\265."]
  ::msgcat::mcset sk "X2 real." [encoding convertfrom utf-8 "X2 skuto\304\215n\303\275"]
  ::msgcat::mcset sq "X2 real." [encoding convertfrom utf-8 "X2 I vertet-real"]

  ::msgcat::mcset bg "Y2 real." [encoding convertfrom utf-8 "Y2 \321\200\320\265\320\260\320\273\320\275\320\276."]
  ::msgcat::mcset cz "Y2 real." [encoding convertfrom utf-8 "Y2 skute\304\215n\303\275."]
  ::msgcat::mcset el "Y2 real." [encoding convertfrom utf-8 "\316\240\317\201\316\261\316\263\316\274\316\261\317\204\316\271\316\272\317\214 \316\2452"]
  ::msgcat::mcset en "Y2 real." [encoding convertfrom utf-8 "Y2 real."]
  ::msgcat::mcset es "Y2 real." [encoding convertfrom utf-8 "Y2 real"]
  ::msgcat::mcset it "Y2 real." [encoding convertfrom utf-8 "y2 reale."]
  ::msgcat::mcset ru "Y2 real." [encoding convertfrom utf-8 "Y2 \321\200\320\265\320\260\320\273\321\214\320\275\320\276\320\265."]
  ::msgcat::mcset sk "Y2 real." [encoding convertfrom utf-8 "Y2 skuto\304\215n\303\275"]
  ::msgcat::mcset sq "Y2 real." [encoding convertfrom utf-8 "Y2 I vertet-real"]

  ::msgcat::mcset bg "units" [encoding convertfrom utf-8 "\320\265\320\264\320\270\320\275\320\270\321\206\320\270"]
  ::msgcat::mcset cz "units" [encoding convertfrom utf-8 "jednotky"]
  ::msgcat::mcset de "units" [encoding convertfrom utf-8 "Einheiten"]
  ::msgcat::mcset el "units" [encoding convertfrom utf-8 "\316\274\316\277\316\275\316\254\316\264\316\265\317\202"]
  ::msgcat::mcset en "units" [encoding convertfrom utf-8 "units"]
  ::msgcat::mcset es "units" [encoding convertfrom utf-8 "unidades"]
  ::msgcat::mcset it "units" [encoding convertfrom utf-8 "unit\303\240"]
  ::msgcat::mcset ru "units" [encoding convertfrom utf-8 "\320\265\320\264\320\270\320\275\320\270\321\206\321\213"]
  ::msgcat::mcset sk "units" [encoding convertfrom utf-8 "jednotky"]
  ::msgcat::mcset sq "units" [encoding convertfrom utf-8 "njesite"]

  ::msgcat::mcset bg "Units of real coordinates." [encoding convertfrom utf-8 "\320\225\320\264\320\270\320\275\320\270\321\206\320\270 \320\275\320\260 \321\200\320\265\320\260\320\273\320\275\320\270\321\202\320\265 \320\272\320\276\320\276\321\200\320\264\320\270\320\275\320\260\321\202\320\270."]
  ::msgcat::mcset cz "Units of real coordinates." [encoding convertfrom utf-8 "Jednotky re\303\241ln\303\275ch sou\305\231adnic."]
  ::msgcat::mcset de "Units of real coordinates." [encoding convertfrom utf-8 "Einheiten der Realkoordinaten."]
  ::msgcat::mcset el "Units of real coordinates." [encoding convertfrom utf-8 "\316\234\316\277\316\275\316\254\316\264\316\265\317\202 \317\200\317\201\316\261\316\263\316\274\316\261\317\204\316\271\316\272\317\216\316\275 \317\203\317\205\316\275\317\204\316\265\317\204\316\261\316\263\316\274\316\255\316\275\317\211\316\275."]
  ::msgcat::mcset en "Units of real coordinates." [encoding convertfrom utf-8 "Units of real coordinates."]
  ::msgcat::mcset es "Units of real coordinates." [encoding convertfrom utf-8 "Unidades de las coordenadas reales."]
  ::msgcat::mcset it "Units of real coordinates." [encoding convertfrom utf-8 "Unit\303\240 delle coordinate reali."]
  ::msgcat::mcset ru "Units of real coordinates." [encoding convertfrom utf-8 "\320\225\320\264\320\270\320\275\320\270\321\206\321\213 \320\270\320\267\320\274\320\265\321\200\320\265\320\275\320\270\321\217 \321\200\320\265\320\260\320\273\321\214\320\275\321\213\321\205 \320\272\320\276\320\276\321\200\320\264\320\270\320\275\320\260\321\202."]
  ::msgcat::mcset sk "Units of real coordinates." [encoding convertfrom utf-8 "Jednotky re\303\241lnych s\303\272radn\303\255c."]
  ::msgcat::mcset sq "Units of real coordinates." [encoding convertfrom utf-8 "njesite e koordinatave te verteta."]

  ::msgcat::mcset bg "background sketches" [encoding convertfrom utf-8 "\320\244\320\276\320\275\320\276\320\262\320\260 \321\201\320\272\320\270\321\206\320\260."]
  ::msgcat::mcset cz "background sketches" [encoding convertfrom utf-8 "n\303\241\304\215rtky na pozad\303\255"]
  ::msgcat::mcset de "background sketches" [encoding convertfrom utf-8 "Hintergrundskizzen"]
  ::msgcat::mcset el "background sketches" [encoding convertfrom utf-8 "\316\243\317\207\316\255\316\264\316\271\316\261 \317\204\316\277\317\205 \317\206\317\214\316\275\317\204\316\277\317\205"]
  ::msgcat::mcset it "background sketches" [encoding convertfrom utf-8 "Immagini di background"]
  ::msgcat::mcset ru "background sketches" [encoding convertfrom utf-8 "\320\244\320\276\320\275\320\276\320\262\321\213\320\265 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\321\217"]
  ::msgcat::mcset sk "background sketches" [encoding convertfrom utf-8 "n\303\241\304\215rtky na pozad\303\255."]
  ::msgcat::mcset sq "background sketches" [encoding convertfrom utf-8 "skicat e prapavise."]

  ::msgcat::mcset bg "List of image files used as scrap background." [encoding convertfrom utf-8 "\320\241\320\277\320\270\321\201\321\212\320\272 \320\275\320\260 \320\263\321\200\320\260\321\204\320\270\321\207\320\275\320\270 \321\204\320\260\320\271\320\273\320\276\320\262\320\265, \320\270\320\267\320\277\320\276\320\273\320\267\320\262\320\260\320\275\320\270 \320\267\320\260 \321\204\320\276\320\275\320\276\320\262\320\270 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\321\217 \320\275\320\260 \321\201\320\272\321\200\320\260\320\277\320\260."]
  ::msgcat::mcset cz "List of image files used as scrap background." [encoding convertfrom utf-8 "Seznam obr\303\241zk\305\257 pou\305\276it\303\275ch jako pozad\303\255 scrapu"]
  ::msgcat::mcset de "List of image files used as scrap background." [encoding convertfrom utf-8 "Liste der als Hintergrund verwendeten Bilder."]
  ::msgcat::mcset el "List of image files used as scrap background." [encoding convertfrom utf-8 "\316\232\316\261\317\204\316\254\316\273\316\277\316\263\316\277\317\202 \316\261\317\201\317\207\316\265\316\257\317\211\316\275 \316\265\316\271\316\272\317\214\316\275\317\211\316\275 \317\200\316\277\317\205 \317\207\317\201\316\267\317\203\316\271\316\274\316\277\317\200\316\277\316\271\316\277\317\215\316\275\317\204\316\261\316\271 \317\211\317\202 \317\206\317\214\316\275\317\204\316\277 \317\204\316\277\317\205 \317\203\316\272\317\201\316\261\317\200"]
  ::msgcat::mcset it "List of image files used as scrap background." [encoding convertfrom utf-8 "Files usati come background dello scrap"]
  ::msgcat::mcset ru "List of image files used as scrap background." [encoding convertfrom utf-8 "\320\241\320\277\320\270\321\201\320\276\320\272 \320\263\321\200\320\260\321\204\320\270\321\207\320\265\321\201\320\272\320\270\321\205 \321\204\320\260\320\271\320\273\320\276\320\262, \320\270\321\201\320\277\320\276\320\273\321\214\320\267\321\203\320\265\320\274\321\213\321\205 \320\262 \320\272\320\260\321\207\320\265\321\201\321\202\320\262\320\265 \321\204\320\276\320\275\320\276\320\262\321\213\321\205 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\271 \321\201\320\272\321\200\320\260\320\277\320\260"]
  ::msgcat::mcset sk "List of image files used as scrap background." [encoding convertfrom utf-8 "Zoznam obr\303\241zkov pou\305\276it\303\275ch ako pozadie."]
  ::msgcat::mcset sq "List of image files used as scrap background." [encoding convertfrom utf-8 "lista e foto-arkivit te perdorura si prapavije e deponise."]

  ::msgcat::mcset bg "Press this button to insert sketch by clicking on it." [encoding convertfrom utf-8 "\320\235\320\260\321\202\320\270\321\201\320\275\320\265\321\202\320\265 \321\202\320\276\320\267\320\270 \320\261\321\203\321\202\320\276\320\275, \320\267\320\260 \320\264\320\260 \320\262\320\274\321\212\320\272\320\275\320\265\321\202\320\265 \321\201\320\272\320\270\321\206\320\260, \320\272\320\260\321\202\320\276 \320\272\320\273\320\270\320\272\320\275\320\265\321\202\320\265 \320\262\321\212\321\200\321\205\321\203 \320\275\320\265\321\217."]
  ::msgcat::mcset cz "Press this button to insert sketch by clicking on it." [encoding convertfrom utf-8 "Stiskn\304\233te toto tla\304\215\303\255tko a v\303\275b\304\233rem n\303\241\304\215rtku my\305\241\303\255 jej vlo\305\276te do scrapu."]
  ::msgcat::mcset de "Press this button to insert sketch by clicking on it." [encoding convertfrom utf-8 "Diesen Knopf dr\303\274cken um Skizze einzuf\303\274gen."]
  ::msgcat::mcset el "Press this button to insert sketch by clicking on it." [encoding convertfrom utf-8 "\316\240\316\261\317\204\316\256\317\203\317\204\316\265 \316\265\316\264\317\216 \316\263\316\271\316\261 \316\265\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \317\203\317\207\316\265\316\264\316\257\316\277\317\205 \316\274\316\265 \317\200\316\277\316\275\317\204\316\257\316\272\316\271"]
  ::msgcat::mcset it "Press this button to insert sketch by clicking on it." [encoding convertfrom utf-8 "Premi per inserire il disegno che scegli col mouse"]
  ::msgcat::mcset ru "Press this button to insert sketch by clicking on it." [encoding convertfrom utf-8 "\320\255\321\202\320\260 \320\272\320\275\320\276\320\277\320\272\320\260 \320\262\321\201\321\202\320\260\320\262\320\273\321\217\320\265\321\202 \321\204\320\276\320\275 \321\201\320\272\321\200\320\260\320\277\320\260 \320\262 \321\201\320\277\320\270\321\201\320\276\320\272"]
  ::msgcat::mcset sk "Press this button to insert sketch by clicking on it." [encoding convertfrom utf-8 "Po stla\304\215en\303\255 klikni na n\303\241\304\215rtok, ktor\303\275 treba vlo\305\276i\305\245 do scrapu."]
  ::msgcat::mcset sq "Press this button to insert sketch by clicking on it." [encoding convertfrom utf-8 "shtype kete buton te fusesh skicen duke klikuar ne te."]

  ::msgcat::mcset bg "Delete sketch from scrap." [encoding convertfrom utf-8 "\320\230\320\267\321\202\321\200\320\270\320\271 \321\201\320\272\320\270\321\206\320\260 \320\276\321\202 \321\201\320\272\321\200\320\260\320\277\320\260."]
  ::msgcat::mcset cz "Delete sketch from scrap." [encoding convertfrom utf-8 "Odstranit n\303\241\304\215rtek ze scrapu"]
  ::msgcat::mcset de "Delete sketch from scrap." [encoding convertfrom utf-8 "L\303\266sche Skizze."]
  ::msgcat::mcset el "Delete sketch from scrap." [encoding convertfrom utf-8 "\316\224\316\271\316\261\316\263\317\201\316\261\317\206\316\256 \317\203\317\207\316\265\316\264\316\257\316\277\317\205 \316\261\317\200\317\214 \317\203\316\272\317\201\316\261\317\200"]
  ::msgcat::mcset it "Delete sketch from scrap." [encoding convertfrom utf-8 "Rimuovi un disegno dallo scrap"]
  ::msgcat::mcset ru "Delete sketch from scrap." [encoding convertfrom utf-8 "\320\255\321\202\320\260 \320\272\320\275\320\276\320\277\320\272\320\260 \321\203\320\264\320\260\320\273\321\217\320\265\321\202 \321\204\320\276\320\275 \321\201\320\272\321\200\320\260\320\277\320\260 \320\270\320\267 \321\201\320\277\320\270\321\201\320\272\320\260"]
  ::msgcat::mcset sk "Delete sketch from scrap." [encoding convertfrom utf-8 "Odstr\303\241\305\210 n\303\241\304\215rtok zo scrapu."]
  ::msgcat::mcset sq "Delete sketch from scrap." [encoding convertfrom utf-8 "fshije skicen nga deponia"]

  ::msgcat::mcset bg "loading point module ..." [encoding convertfrom utf-8 "\320\267\320\260\321\200\320\265\320\266\320\264\320\260\320\275\320\265 \320\275\320\260 \320\274\320\276\320\264\321\203\320\273\320\260 \320\267\320\260 \321\202\320\276\321\207\320\272\320\270 ..."]
  ::msgcat::mcset cz "loading point module ..." [encoding convertfrom utf-8 "nahr\303\241v\303\241m point modul ..."]
  ::msgcat::mcset de "loading point module ..." [encoding convertfrom utf-8 "Lade Punktmodul ..."]
  ::msgcat::mcset el "loading point module ..." [encoding convertfrom utf-8 "\317\206\317\214\317\201\317\204\316\271\317\203\316\267 \316\265\316\275\317\214\317\204\316\267\317\204\316\261\317\202 \317\203\316\267\316\274\316\265\316\257\317\211\316\275\342\200\246"]
  ::msgcat::mcset en "loading point module ..." [encoding convertfrom utf-8 "loading point module ..."]
  ::msgcat::mcset es "loading point module ..." [encoding convertfrom utf-8 "puntos ..."]
  ::msgcat::mcset it "loading point module ..." [encoding convertfrom utf-8 "modolo punti ..."]
  ::msgcat::mcset ru "loading point module ..." [encoding convertfrom utf-8 "\320\267\320\260\320\263\321\200\321\203\320\267\320\272\320\260 \320\274\320\276\320\264\321\203\320\273\321\217 \321\202\320\276\321\207\320\265\320\272..."]
  ::msgcat::mcset sk "loading point module ..." [encoding convertfrom utf-8 "nahr\303\241vam editor bodov ..."]
  ::msgcat::mcset sq "loading point module ..." [encoding convertfrom utf-8 "duke lexuar modulin e pikes\342\200\246"]

  ::msgcat::mcset bg "Update point" [encoding convertfrom utf-8 "\320\236\320\261\320\275\320\276\320\262\320\270 \321\202\320\276\321\207\320\272\320\260"]
  ::msgcat::mcset cz "Update point" [encoding convertfrom utf-8 "Aktualizovat"]
  ::msgcat::mcset de "Update point" [encoding convertfrom utf-8 "Punkt aktualisieren"]
  ::msgcat::mcset el "Update point" [encoding convertfrom utf-8 "\316\225\316\275\316\267\316\274\316\255\317\201\317\211\317\203\316\267 \317\203\316\267\316\274\316\265\316\257\316\277\317\205"]
  ::msgcat::mcset en "Update point" [encoding convertfrom utf-8 "Update point"]
  ::msgcat::mcset es "Update point" [encoding convertfrom utf-8 "Actualizar"]
  ::msgcat::mcset it "Update point" [encoding convertfrom utf-8 "Aggiorna punto"]
  ::msgcat::mcset ru "Update point" [encoding convertfrom utf-8 "\320\236\320\261\320\275\320\276\320\262\320\270\321\202\321\214 \321\202\320\276\321\207\320\272\321\203"]
  ::msgcat::mcset sk "Update point" [encoding convertfrom utf-8 "Akualizuj bod"]
  ::msgcat::mcset sq "Update point" [encoding convertfrom utf-8 "pika e aktualizimit"]

  ::msgcat::mcset bg "Click this button to apply point changes." [encoding convertfrom utf-8 "\320\275\320\260\321\202\320\270\321\201\320\275\320\265\321\202\320\265 \321\202\320\276\320\267\320\270 \320\261\321\203\321\202\320\276\320\275 \320\267\320\260 \320\277\321\200\320\270\320\273\320\260\320\263\320\260\320\275\320\265 \320\275\320\260 \320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\321\217\321\202\320\260 \320\262/\321\203 \321\202\320\276\321\207\320\272\320\260\321\202\320\260."]
  ::msgcat::mcset cz "Click this button to apply point changes." [encoding convertfrom utf-8 "Aktualizuje data t\303\275kaj\303\255c\303\255 se bodu."]
  ::msgcat::mcset de "Click this button to apply point changes." [encoding convertfrom utf-8 "Klicke diesen Knopf, um \303\204nderungen am Punkt anzuwenden."]
  ::msgcat::mcset el "Click this button to apply point changes." [encoding convertfrom utf-8 "\316\232\316\254\316\275\317\204\316\265 \316\272\316\273\316\271\316\272 \316\263\316\271\316\261 \316\275\316\261 \316\263\316\257\316\275\316\265\316\271 \316\265\317\206\316\261\317\201\316\274\316\277\316\263\316\256 \317\204\317\211\316\275 \316\261\316\273\316\273\316\261\316\263\317\216\316\275 \317\200\316\277\317\205 \316\272\316\254\316\275\316\261\317\204\316\265 \317\203\317\204\316\261 \317\203\316\267\316\274\316\265\316\257\316\261"]
  ::msgcat::mcset en "Click this button to apply point changes." [encoding convertfrom utf-8 "Click this button to apply point changes."]
  ::msgcat::mcset es "Click this button to apply point changes." [encoding convertfrom utf-8 "Clicar aqu\303\255 tras modificar las propiedades del punto."]
  ::msgcat::mcset it "Click this button to apply point changes." [encoding convertfrom utf-8 "Premi il bottone per fare modifiche al punto."]
  ::msgcat::mcset ru "Click this button to apply point changes." [encoding convertfrom utf-8 "\320\235\320\260\320\266\320\274\320\270\321\202\320\265 \321\215\321\202\321\203 \320\272\320\275\320\276\320\277\320\272\321\203 \320\264\320\273\321\217 \320\277\321\200\320\270\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\320\271 \321\202\320\276\321\207\320\272\320\270."]
  ::msgcat::mcset sk "Click this button to apply point changes." [encoding convertfrom utf-8 "Stla\304\215te aby sa aktualizovali zmenen\303\251 \303\272daje bodu."]
  ::msgcat::mcset sq "Click this button to apply point changes." [encoding convertfrom utf-8 "kliko kete buton te aktualizosh nderrimet e pikes."]

  ::msgcat::mcset bg "Point type." [encoding convertfrom utf-8 "\320\242\320\270\320\277 \320\275\320\260 \321\202\320\276\321\207\320\272\320\260\321\202\320\260."]
  ::msgcat::mcset cz "Point type." [encoding convertfrom utf-8 "Typ bodu."]
  ::msgcat::mcset de "Point type." [encoding convertfrom utf-8 "Punkttyp."]
  ::msgcat::mcset el "Point type." [encoding convertfrom utf-8 "\316\225\316\257\316\264\316\277\317\202 \317\203\316\267\316\274\316\265\316\257\316\277\317\205"]
  ::msgcat::mcset en "Point type." [encoding convertfrom utf-8 "Point type (click on triangle to see menu)."]
  ::msgcat::mcset es "Point type." [encoding convertfrom utf-8 "Tipo de punto. Clic en tri\303\241ngulo para ver men\303\272"]
  ::msgcat::mcset it "Point type." [encoding convertfrom utf-8 "Tipo di punto"]
  ::msgcat::mcset ru "Point type." [encoding convertfrom utf-8 "\320\242\320\270\320\277 \321\202\320\276\321\207\320\272\320\270."]
  ::msgcat::mcset sk "Point type." [encoding convertfrom utf-8 "Typ bodu."]
  ::msgcat::mcset sq "Point type." [encoding convertfrom utf-8 "lloji I pikave (kliko ne trekendesh te shohesh menun)."]

  ::msgcat::mcset bg "Point identifier." [encoding convertfrom utf-8 "\320\230\320\275\320\264\320\265\321\202\320\270\321\204\320\270\320\272\320\260\321\202\320\276\321\200 \320\275\320\260 \321\202\320\276\321\207\320\272\320\260\321\202\320\260."]
  ::msgcat::mcset cz "Point identifier." [encoding convertfrom utf-8 "Identifik\303\241tor bodu."]
  ::msgcat::mcset de "Point identifier." [encoding convertfrom utf-8 "Punktbezeichner."]
  ::msgcat::mcset el "Point identifier." [encoding convertfrom utf-8 "ID \317\203\316\267\316\274\316\265\316\257\316\277\317\205"]
  ::msgcat::mcset en "Point identifier." [encoding convertfrom utf-8 "Point identifier."]
  ::msgcat::mcset es "Point identifier." [encoding convertfrom utf-8 "Nombre (ID) del punto."]
  ::msgcat::mcset it "Point identifier." [encoding convertfrom utf-8 "Identificatore del punto."]
  ::msgcat::mcset ru "Point identifier." [encoding convertfrom utf-8 "\320\230\320\264\320\265\320\275\321\202\320\270\321\204\320\270\320\272\320\260\321\202\320\276\321\200 \321\202\320\276\321\207\320\272\320\270."]
  ::msgcat::mcset sk "Point identifier." [encoding convertfrom utf-8 "Identifik\303\241tor bodu."]
  ::msgcat::mcset sq "Point identifier." [encoding convertfrom utf-8 "identifikuesi I pikes."]

  ::msgcat::mcset bg "Other point options." [encoding convertfrom utf-8 "\320\224\321\200\321\203\320\263\320\270 \320\276\320\277\321\206\320\270\320\270 \320\275\320\260 \321\202\320\276\321\207\320\272\320\260\321\202\320\260."]
  ::msgcat::mcset cz "Other point options." [encoding convertfrom utf-8 "Dal\305\241\303\255 volby pro bod."]
  ::msgcat::mcset de "Other point options." [encoding convertfrom utf-8 "Andere Punktoptionen."]
  ::msgcat::mcset el "Other point options." [encoding convertfrom utf-8 "\316\206\316\273\316\273\316\265\317\202 \316\265\317\200\316\271\316\273\316\277\316\263\316\255\317\202 \316\263\316\271\316\261 \317\203\316\267\316\274\316\265\316\257\316\261"]
  ::msgcat::mcset en "Other point options." [encoding convertfrom utf-8 "Options allow giving special characteristics to points."]
  ::msgcat::mcset es "Other point options." [encoding convertfrom utf-8 "Las opciones permiten dar caracter\303\255sticas especiales a los puntos."]
  ::msgcat::mcset it "Other point options." [encoding convertfrom utf-8 "Altre opzioni del punto."]
  ::msgcat::mcset ru "Other point options." [encoding convertfrom utf-8 "\320\224\321\200\321\203\320\263\320\270\320\265 \320\276\320\277\321\206\320\270\320\270 \321\202\320\276\321\207\320\272\320\270."]
  ::msgcat::mcset sk "Other point options." [encoding convertfrom utf-8 "Ostatn\303\251 \305\241pecifik\303\241cie bodu."]
  ::msgcat::mcset sq "Other point options." [encoding convertfrom utf-8 "opcionet tjera te pikes."]

  ::msgcat::mcset bg "I.e, if type is label, write here: -text \042this will be displayed (P100)\042" [encoding convertfrom utf-8 "\320\235\320\260\320\277\321\200\320\270\320\274\320\265\321\200, \320\260\320\272\320\276 \321\202\320\270\320\277\321\212\321\202 \320\275\320\260 \321\202\320\276\321\207\320\272\320\260\321\202\320\260 \320\265 label (\320\265\321\202\320\270\320\272\320\265\321\202), \321\202\321\203\320\272 \320\274\320\276\320\266\320\265\321\202\320\265 \320\264\320\260 \320\262\321\212\320\262\320\265\320\264\320\265\321\202\320\265: -text \042 , \321\202\320\276\320\262\320\260 \321\211\320\265 \320\270\320\267\320\276\320\261\321\200\320\260\320\267\320\270: (P100)\042"]
  ::msgcat::mcset cz "I.e, if type is label, write here: -text \042this will be displayed (P100)\042" [encoding convertfrom utf-8 "P\305\231\303\255klad: pokud type je label, zadejte: -text \042this will be displayed (P100)\042"]
  ::msgcat::mcset de "I.e, if type is label, write here: -text \042this will be displayed (P100)\042" [encoding convertfrom utf-8 "d.h., wenn der Typ Beschriftung ist, schreibe hier: -text \042das wird hier angezeigt (P100)\042"]
  ::msgcat::mcset el "I.e, if type is label, write here: -text \042this will be displayed (P100)\042" [encoding convertfrom utf-8 "\316\224\316\267\316\273\316\261\316\264\316\256, \316\261\316\275 \317\204\316\277 \316\265\316\257\316\264\316\277\317\202 \316\265\316\257\316\275\316\261\316\271 \317\204\316\261\316\274\317\200\316\255\316\273\316\261, \316\265\316\264\317\216 \316\263\317\201\316\254\317\206\316\265\317\204\316\265: -text \042\316\261\317\205\317\204\317\214 \316\265\316\274\317\206\316\261\316\275\316\257\316\266\316\265\317\204\316\261\316\271 (P100)\042"]
  ::msgcat::mcset en "I.e, if type is label, write here: -text \042this will be displayed (P100)\042" [encoding convertfrom utf-8 "I.e, if type is label, write here: -text \042this will be displayed (P100)\042"]
  ::msgcat::mcset es "I.e, if type is label, write here: -text \042this will be displayed (P100)\042" [encoding convertfrom utf-8 "P.ej, si el tipo es label, escribe: -text \042lo que se ver\303\241 (P100)\042."]
  ::msgcat::mcset it "I.e, if type is label, write here: -text \042this will be displayed (P100)\042" [encoding convertfrom utf-8 "Cio\303\251, se il tipo \303\250 etichetta, scrivi: -text \042questo sar\303\240 visualizzato (P100)\042"]
  ::msgcat::mcset ru "I.e, if type is label, write here: -text \042this will be displayed (P100)\042" [encoding convertfrom utf-8 "\320\235\320\260\320\277\321\200\320\270\320\274\320\265\321\200, \320\265\321\201\320\273\320\270 \321\202\320\270\320\277 \321\202\320\276\321\207\320\272\320\270 label, \320\267\320\264\320\265\321\201\321\214 \320\274\320\276\320\266\320\275\320\276 \320\275\320\260\320\261\321\200\320\260\321\202\321\214: -text \042\321\215\321\202\320\276 \320\275\320\260\320\277\320\265\321\207\320\260\321\202\320\260\320\265\321\202\321\201\321\217 (P100)\042"]
  ::msgcat::mcset sk "I.e, if type is label, write here: -text \042this will be displayed (P100)\042" [encoding convertfrom utf-8 "Pr\303\255klad: ak je typ label, zadajte: -text \042tento text bude zobrazen\303\275\042"]
  ::msgcat::mcset sq "I.e, if type is label, write here: -text \042this will be displayed (P100)\042" [encoding convertfrom utf-8 "p.sh. nese lloji eshte etikete, shkruaj ketu: -teksti \042 kjo do te lajmerohet (P100)\042"]

  ::msgcat::mcset bg "Enter symbol orientation angle." [encoding convertfrom utf-8 "\320\222\321\212\320\262\320\265\320\264\320\265\321\202\320\265 \320\276\321\200\320\270\320\265\320\275\321\202\320\260\321\206\320\270\321\217 \320\275\320\260 \321\201\320\270\320\274\320\262\320\276\320\273\320\260."]
  ::msgcat::mcset cz "Enter symbol orientation angle." [encoding convertfrom utf-8 "Zadejte orientaci bodu."]
  ::msgcat::mcset de "Enter symbol orientation angle." [encoding convertfrom utf-8 "Winkel der Symbolausrichtung angeben."]
  ::msgcat::mcset el "Enter symbol orientation angle." [encoding convertfrom utf-8 "\316\225\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \316\263\317\211\316\275\316\257\316\261\317\202 \317\200\317\201\316\277\317\203\316\261\316\275\316\261\317\204\316\277\316\273\316\271\317\203\316\274\316\277\317\215 \317\203\317\215\316\274\316\262\316\277\316\273\316\277\317\205."]
  ::msgcat::mcset en "Enter symbol orientation angle." [encoding convertfrom utf-8 "Enter symbol orientation angle."]
  ::msgcat::mcset es "Enter symbol orientation angle." [encoding convertfrom utf-8 "Introducir direcci\303\263n en que debe apuntar el s\303\255mbolo."]
  ::msgcat::mcset it "Enter symbol orientation angle." [encoding convertfrom utf-8 "Scrivi l'angolo di orientazione del simbolo."]
  ::msgcat::mcset ru "Enter symbol orientation angle." [encoding convertfrom utf-8 "\320\222\320\262\320\265\320\264\320\270\321\202\320\265 \320\276\321\200\320\270\320\265\320\275\321\202\320\260\321\206\320\270\321\216 \321\201\320\270\320\274\320\262\320\276\320\273\320\260."]
  ::msgcat::mcset sk "Enter symbol orientation angle." [encoding convertfrom utf-8 "Zadajte orient\303\241ciu bodu."]
  ::msgcat::mcset sq "Enter symbol orientation angle." [encoding convertfrom utf-8 "fute simbolin e kendit te orientimit."]

  ::msgcat::mcset bg "There are symbol types which must be orientated (i.e: gradients). Click here to giv'em orientation by mouse or keyboard." [encoding convertfrom utf-8 "\320\235\321\217\320\272\320\276\320\270 \321\202\320\270\320\277\320\276\320\262\320\265 \321\201\320\270\320\274\320\262\320\276\320\273\320\270 \321\202\321\200\321\217\320\261\320\262\320\260 \320\264\320\260 \320\261\321\212\320\264\320\260\321\202 \320\276\321\200\320\270\320\265\320\275\321\202\320\270\321\200\320\260\320\275\320\270 (\320\275\320\260\320\277\321\200\320\270\320\274\320\265\321\200 gradient). \320\235\320\260\321\202\320\270\321\201\320\275\320\265\321\202\320\265 \321\202\321\203\320\272 \320\267\320\260 \320\264\320\260 \320\270\320\274 \320\264\320\260\320\264\320\265\321\202\320\265 \320\275\320\260\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265 \321\201 \320\277\320\276\320\274\320\276\321\211\321\202\320\260 \320\275\320\260 \320\274\320\270\321\210\320\272\320\260\321\202\320\260 \320\270\320\273\320\270 \320\272\320\273\320\260\320\262\320\270\320\260\321\202\321\203\321\200\320\260\321\202\320\260."]
  ::msgcat::mcset cz "There are symbol types which must be orientated (i.e: gradients). Click here to giv'em orientation by mouse or keyboard." [encoding convertfrom utf-8 "Jsou symboly, kter\303\275m mus\303\255te specifikovat orientaci (nap\305\231. gradient). Zaklikn\304\233te tuto volbu a nastavte jim orientaci my\305\241\303\255 nebo z kl\303\241vesnice."]
  ::msgcat::mcset de "There are symbol types which must be orientated (i.e: gradients). Click here to giv'em orientation by mouse or keyboard." [encoding convertfrom utf-8 "Es gibt Symbole, die eine Ausrichtung haben m\303\274ssen (z.B. Gef\303\244lle). Klicke hier, um sie mit der Maus oder der Tastatur auszurichten."]
  ::msgcat::mcset el "There are symbol types which must be orientated (i.e: gradients). Click here to giv'em orientation by mouse or keyboard." [encoding convertfrom utf-8 "\316\232\316\254\317\200\316\277\316\271\316\261 \316\265\316\257\316\264\316\267 \317\203\317\205\316\274\316\262\317\214\316\273\317\211\316\275 \317\200\317\201\316\255\317\200\316\265\316\271 \316\275\316\261 \317\200\317\201\316\277\317\203\316\261\316\275\316\261\317\204\316\277\316\273\316\271\317\203\317\204\316\277\317\215\316\275 (\317\200.\317\207. \316\272\316\273\316\257\317\203\316\265\316\271\317\202). \316\232\316\254\316\275\317\204\316\265 \316\272\316\273\316\271\316\272 \316\265\316\264\317\216 \316\275\316\261 \316\277\317\201\316\271\317\203\316\270\316\265\316\257 \316\277 \317\200\317\201\316\277\317\203\316\261\316\275\316\261\317\204\316\277\316\273\316\271\317\203\316\274\317\214\317\202 \316\265\316\257\317\204\316\265 \316\261\317\200\317\214 \317\204\316\277 \317\200\316\273\316\267\316\272\317\204\317\201\316\277\316\273\317\214\316\263\316\271\316\277 \316\265\316\257\317\204\316\265 \316\274\316\265 \317\204\316\277 \317\200\316\277\316\275\317\204\316\257\316\272\316\271."]
  ::msgcat::mcset en "There are symbol types which must be orientated (i.e: gradients). Click here to giv'em orientation by mouse or keyboard." [encoding convertfrom utf-8 "Some symbol types must be orientated (i.e: gradients). Click here to giv'em orientation by mouse or keyboard."]
  ::msgcat::mcset es "There are symbol types which must be orientated (i.e: gradients). Click here to giv'em orientation by mouse or keyboard." [encoding convertfrom utf-8 "Hay tipos de s\303\255mbolo que deben ser orientados (p.ej, pendientes). Haz clic aqu\303\255 para orientarlos con rat\303\263n o teclado."]
  ::msgcat::mcset it "There are symbol types which must be orientated (i.e: gradients). Click here to giv'em orientation by mouse or keyboard." [encoding convertfrom utf-8 "Ci sono tipi di simboli che sono orientati (per es. gradiente). Premi qui per orientarli col mouse o la tastiera"]
  ::msgcat::mcset ru "There are symbol types which must be orientated (i.e: gradients). Click here to giv'em orientation by mouse or keyboard." [encoding convertfrom utf-8 "\320\235\320\265\320\272\320\276\321\202\320\276\321\200\321\213\320\265 \321\202\320\270\320\277\321\213 \321\201\320\270\320\274\320\262\320\276\320\273\320\276\320\262 \320\264\320\276\320\273\320\266\320\275\321\213 \320\261\321\213\321\202\321\214 \320\276\321\200\320\270\320\265\320\275\321\202\320\270\321\200\320\276\320\262\320\260\320\275\321\213 (\320\275\320\260\320\277\321\200\320\270\320\274\320\265\321\200 gradient). \320\235\320\260\320\266\320\274\320\270\321\202\320\265 \320\267\320\264\320\265\321\201\321\214 \320\264\320\273\321\217 \320\277\321\200\320\270\320\264\320\260\320\275\320\270\321\217 \320\270\320\274 \320\276\321\200\320\270\320\265\320\275\321\202\320\260\321\206\320\270\320\270 \321\201 \320\277\320\276\320\274\320\276\321\211\321\214\321\216 \320\274\321\213\321\210\320\270 \320\270\320\273\320\270 \320\272\320\273\320\260\320\262\320\270\320\260\321\202\321\203\321\200\321\213."]
  ::msgcat::mcset sk "There are symbol types which must be orientated (i.e: gradients). Click here to giv'em orientation by mouse or keyboard." [encoding convertfrom utf-8 "S\303\272 symboly, ktor\303\275m treba zada\305\245 orient\303\241ciu (napr. gradiet). Ozna\304\215te t\303\272to vo\304\276bu a nastavte orient\303\241ciu my\305\241ou alebo z kl\303\241vesnice."]
  ::msgcat::mcset sq "There are symbol types which must be orientated (i.e: gradients). Click here to giv'em orientation by mouse or keyboard." [encoding convertfrom utf-8 "disa lloje te simboleve duhet te orientohen (p.sh.:gradienti). Kliko ketu qe ti orientosh me mi apo tastature."]

  ::msgcat::mcset bg "x-size" [encoding convertfrom utf-8 "\321\205-\321\200\320\260\320\267\320\274\320\265\321\200"]
  ::msgcat::mcset cz "x-size" [encoding convertfrom utf-8 "x-rozsah"]
  ::msgcat::mcset de "x-size" [encoding convertfrom utf-8 "x-Gr\303\266\303\237e"]
  ::msgcat::mcset el "x-size" [encoding convertfrom utf-8 "\316\274\316\255\316\263\316\265\316\270\316\277\317\202 x"]
  ::msgcat::mcset en "x-size" [encoding convertfrom utf-8 "x-size"]
  ::msgcat::mcset es "x-size" [encoding convertfrom utf-8 "tama\303\261o-x"]
  ::msgcat::mcset it "x-size" [encoding convertfrom utf-8 "dim. x"]
  ::msgcat::mcset ru "x-size" [encoding convertfrom utf-8 "x-size"]
  ::msgcat::mcset sk "x-size" [encoding convertfrom utf-8 "ve\304\276kos\305\245-x"]
  ::msgcat::mcset sq "x-size" [encoding convertfrom utf-8 "madhesia-X"]

  ::msgcat::mcset bg "Set point size in main direction." [encoding convertfrom utf-8 "\320\243\320\272\320\260\320\266\320\265\321\202\320\265 \321\200\320\260\320\267\320\274\320\265\321\200\320\260 \320\275\320\260 \321\202\320\276\321\207\320\272\320\260\321\202\320\260 \320\262 \320\263\320\273\320\260\320\262\320\275\320\276\321\202\320\276 \320\275\320\260\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265."]
  ::msgcat::mcset cz "Set point size in main direction." [encoding convertfrom utf-8 "Nastav\303\255 rozsah bodu v hlavn\303\255m sm\304\233ru."]
  ::msgcat::mcset de "Set point size in main direction." [encoding convertfrom utf-8 "Setze Punktgr\303\266\303\237e in Hauptrichtung."]
  ::msgcat::mcset el "Set point size in main direction." [encoding convertfrom utf-8 "\316\237\317\201\316\271\317\203\316\274\317\214\317\202 \317\200\316\273\316\265\317\205\317\201\316\271\316\272\316\277\317\215 \316\274\316\265\316\263\316\255\316\270\316\277\317\205\317\202 \317\203\316\267\316\274\316\265\316\257\316\277\317\205"]
  ::msgcat::mcset en "Set point size in main direction." [encoding convertfrom utf-8 "Set point size in main direction."]
  ::msgcat::mcset es "Set point size in main direction." [encoding convertfrom utf-8 "Ajustar tama\303\261o del punto en direcci\303\263n principal."]
  ::msgcat::mcset it "Set point size in main direction." [encoding convertfrom utf-8 "Imposta la dimensione del punto nella direzione principale."]
  ::msgcat::mcset ru "Set point size in main direction." [encoding convertfrom utf-8 "\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\270\321\202\321\214 \321\200\320\260\320\267\320\274\320\265\321\200 \321\202\320\276\321\207\320\272\320\270 \320\262 \320\263\320\273\320\260\320\262\320\275\320\276\320\274 \320\275\320\260\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\270."]
  ::msgcat::mcset sk "Set point size in main direction." [encoding convertfrom utf-8 "Nastavte ve\304\276kos\305\245 bodu v hlavnom (X) smere."]
  ::msgcat::mcset sq "Set point size in main direction." [encoding convertfrom utf-8 "vene madhesine e pikes ne drejtimin kryesor."]

  ::msgcat::mcset bg "Enter point size in main direction." [encoding convertfrom utf-8 "\320\222\321\212\320\262\320\265\320\264\320\265\321\202\320\265 \321\200\320\260\320\267\320\274\320\265\321\200\320\260 \320\275\320\260 \321\202\320\276\321\207\320\272\320\260\321\202\320\260 \320\262 \320\263\320\273\320\260\320\262\320\275\320\276\321\202\320\276 \320\275\320\260\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265."]
  ::msgcat::mcset cz "Enter point size in main direction." [encoding convertfrom utf-8 "Zadejte rozsah bodu v hlavn\303\255m sm\304\233ru."]
  ::msgcat::mcset de "Enter point size in main direction." [encoding convertfrom utf-8 "Punktgr\303\266\303\237e in Hauptrichtung eingeben."]
  ::msgcat::mcset el "Enter point size in main direction." [encoding convertfrom utf-8 "\316\225\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \317\200\316\273\316\265\317\205\317\201\316\271\316\272\316\277\317\215 \316\274\316\265\316\263\316\255\316\270\316\277\317\205\317\202 \317\203\316\267\316\274\316\265\316\257\316\277\317\205"]
  ::msgcat::mcset en "Enter point size in main direction." [encoding convertfrom utf-8 "Enter point size in main direction."]
  ::msgcat::mcset es "Enter point size in main direction." [encoding convertfrom utf-8 "Introducir tama\303\261o del punto en direcci\303\263n principal."]
  ::msgcat::mcset it "Enter point size in main direction." [encoding convertfrom utf-8 "Scrivi la dimensione del punto nella direzione principale."]
  ::msgcat::mcset ru "Enter point size in main direction." [encoding convertfrom utf-8 "\320\222\320\262\320\265\320\264\320\270\321\202\320\265 \321\200\320\260\320\267\320\274\320\265\321\200 \321\202\320\276\321\207\320\272\320\270 \320\262 \320\263\320\273\320\260\320\262\320\275\320\276\320\274 \320\275\320\260\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\270."]
  ::msgcat::mcset sk "Enter point size in main direction." [encoding convertfrom utf-8 "Zadajte ve\304\276kos\305\245 bodu v hlavnom (X) smere."]
  ::msgcat::mcset sq "Enter point size in main direction." [encoding convertfrom utf-8 "fute madhesine e pikes ne drejtimin kryesor."]

  ::msgcat::mcset bg "y-size" [encoding convertfrom utf-8 "y-\321\200\320\260\320\267\320\274\320\265\321\200"]
  ::msgcat::mcset cz "y-size" [encoding convertfrom utf-8 "y-rozsah"]
  ::msgcat::mcset de "y-size" [encoding convertfrom utf-8 "y-Gr\303\266\303\237e"]
  ::msgcat::mcset el "y-size" [encoding convertfrom utf-8 "\316\274\316\255\316\263\316\265\316\270\316\277\317\202 y"]
  ::msgcat::mcset en "y-size" [encoding convertfrom utf-8 "y-size"]
  ::msgcat::mcset es "y-size" [encoding convertfrom utf-8 "tama\303\261o-y"]
  ::msgcat::mcset it "y-size" [encoding convertfrom utf-8 "dim. y"]
  ::msgcat::mcset ru "y-size" [encoding convertfrom utf-8 "y-size"]
  ::msgcat::mcset sk "y-size" [encoding convertfrom utf-8 "ve\304\276kos\305\245-y"]
  ::msgcat::mcset sq "y-size" [encoding convertfrom utf-8 "madhesia-Y"]

  ::msgcat::mcset bg "Set point size in side direction." [encoding convertfrom utf-8 "\320\243\320\272\320\260\320\266\320\265\321\202\320\265 \321\200\320\260\320\267\320\274\320\265\321\200\320\260 \320\275\320\260 \321\202\320\276\321\207\320\272\320\260\321\202\320\260 \320\262 \320\276\320\261\321\200\320\260\321\202\320\275\320\276\321\202\320\276 \320\275\320\260\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265."]
  ::msgcat::mcset cz "Set point size in side direction." [encoding convertfrom utf-8 "Nastav\303\255 rozsah bodu ve vedlej\305\241\303\255m sm\304\233ru."]
  ::msgcat::mcset de "Set point size in side direction." [encoding convertfrom utf-8 "Setze Punktgr\303\266\303\237e in seitlicher Richtung."]
  ::msgcat::mcset el "Set point size in side direction." [encoding convertfrom utf-8 "\316\237\317\201\316\271\317\203\316\274\317\214\317\202 \317\200\316\273\316\265\317\205\317\201\316\271\316\272\316\277\317\215 \316\274\316\265\316\263\316\255\316\270\316\277\317\205\317\202 \317\203\316\267\316\274\316\265\316\257\316\277\317\205"]
  ::msgcat::mcset en "Set point size in side direction." [encoding convertfrom utf-8 "Set point size in side direction."]
  ::msgcat::mcset es "Set point size in side direction." [encoding convertfrom utf-8 "Ajustar tama\303\261o del punto en direcci\303\263n lateral."]
  ::msgcat::mcset it "Set point size in side direction." [encoding convertfrom utf-8 "Imposta la dimensione del punto nella direzione trasversale."]
  ::msgcat::mcset ru "Set point size in side direction." [encoding convertfrom utf-8 "\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\270\321\202\321\214 \321\200\320\260\320\267\320\274\320\265\321\200 \321\202\320\276\321\207\320\272\320\270 \320\262 \320\261\320\276\320\272\320\276\320\262\320\276\320\274 \320\275\320\260\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\270."]
  ::msgcat::mcset sk "Set point size in side direction." [encoding convertfrom utf-8 "Nastavte ve\304\276kos\305\245 bodu vo ved\304\276aj\305\241om smere."]
  ::msgcat::mcset sq "Set point size in side direction." [encoding convertfrom utf-8 "vene madhesine e pikes ne drejtim anesore."]

  ::msgcat::mcset bg "Enter point size in side direction." [encoding convertfrom utf-8 "\320\222\321\212\320\262\320\265\320\264\320\265\321\202\320\265 \321\200\320\260\320\267\320\274\320\265\321\200\320\260 \320\275\320\260 \321\202\320\276\321\207\320\272\320\260\321\202\320\260 \320\262 \320\276\320\261\321\200\320\260\321\202\320\275\320\276\321\202\320\276 \320\275\320\260\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265."]
  ::msgcat::mcset cz "Enter point size in side direction." [encoding convertfrom utf-8 "Zadejte rozsah bodu ve vedlej\305\241\303\255m sm\304\233ru."]
  ::msgcat::mcset de "Enter point size in side direction." [encoding convertfrom utf-8 "Punktgr\303\266\303\237e in seitlicher Richtung eingeben."]
  ::msgcat::mcset el "Enter point size in side direction." [encoding convertfrom utf-8 "\316\225\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \317\200\316\273\316\265\317\205\317\201\316\271\316\272\316\277\317\215 \316\274\316\265\316\263\316\255\316\270\316\277\317\205\317\202 \317\203\316\267\316\274\316\265\316\257\316\277\317\205"]
  ::msgcat::mcset en "Enter point size in side direction." [encoding convertfrom utf-8 "Enter point size in side direction."]
  ::msgcat::mcset es "Enter point size in side direction." [encoding convertfrom utf-8 "Introducir tama\303\261o del punto en direcci\303\263n lateral."]
  ::msgcat::mcset it "Enter point size in side direction." [encoding convertfrom utf-8 "Scrivi la dimensione del punto nella direzione trasversale."]
  ::msgcat::mcset ru "Enter point size in side direction." [encoding convertfrom utf-8 "\320\222\320\262\320\265\320\264\320\270\321\202\320\265 \321\200\320\260\320\267\320\274\320\265\321\200 \321\202\320\276\321\207\320\272\320\270 \320\262 \320\261\320\276\320\272\320\276\320\262\320\276\320\274 \320\275\320\260\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\270."]
  ::msgcat::mcset sk "Enter point size in side direction." [encoding convertfrom utf-8 "Zadajte ve\304\276kos\305\245 bodu vo ved\304\276aj\305\241om smere."]
  ::msgcat::mcset sq "Enter point size in side direction." [encoding convertfrom utf-8 "fute madhesine e pikes ne drejtim anesore."]

  ::msgcat::mcset bg "loading line module ..." [encoding convertfrom utf-8 "\320\267\320\260\321\200\320\265\320\266\320\264\320\260\320\275\320\265 \320\275\320\260 \320\274\320\276\320\264\321\203\320\273\320\260 \320\267\320\260 \320\273\320\270\320\275\320\270\320\270 ..."]
  ::msgcat::mcset cz "loading line module ..." [encoding convertfrom utf-8 "nahr\303\241v\303\241m k\305\231ivkov\303\275 modul ..."]
  ::msgcat::mcset de "loading line module ..." [encoding convertfrom utf-8 "Lade Linienmodul ..."]
  ::msgcat::mcset el "loading line module ..." [encoding convertfrom utf-8 "\317\206\317\214\317\201\317\204\316\271\317\203\316\267 \316\265\316\275\317\214\317\204\316\267\317\204\316\261\317\202 \316\263\317\201\316\261\316\274\316\274\317\216\316\275..."]
  ::msgcat::mcset en "loading line module ..." [encoding convertfrom utf-8 "loading line module ..."]
  ::msgcat::mcset es "loading line module ..." [encoding convertfrom utf-8 "l\303\255neas ..."]
  ::msgcat::mcset it "loading line module ..." [encoding convertfrom utf-8 "modulo linee ..."]
  ::msgcat::mcset ru "loading line module ..." [encoding convertfrom utf-8 "\320\267\320\260\320\263\321\200\321\203\320\267\320\272\320\260 \320\274\320\276\320\264\321\203\320\273\321\217 \320\273\320\270\320\275\320\270\320\271 ..."]
  ::msgcat::mcset sk "loading line module ..." [encoding convertfrom utf-8 "nahr\303\241vam modul kriviek ..."]
  ::msgcat::mcset sq "loading line module ..." [encoding convertfrom utf-8 "duke lexuar modulin e rrjeshtit\342\200\246"]

  ::msgcat::mcset bg "Line type." [encoding convertfrom utf-8 "\320\242\320\270\320\277 \320\275\320\260 \320\273\320\270\320\275\320\270\321\217."]
  ::msgcat::mcset cz "Line type." [encoding convertfrom utf-8 "Typ k\305\231ivky."]
  ::msgcat::mcset de "Line type." [encoding convertfrom utf-8 "Linientyp."]
  ::msgcat::mcset el "Line type." [encoding convertfrom utf-8 "\316\225\316\257\316\264\316\277\317\202 \316\263\317\201\316\261\316\274\316\274\316\256\317\202"]
  ::msgcat::mcset en "Line type." [encoding convertfrom utf-8 "Line type (click on triangle to see menu)."]
  ::msgcat::mcset es "Line type." [encoding convertfrom utf-8 "Tipo de l\303\255nea. Clic en tri\303\241ngulo para ver el men\303\272."]
  ::msgcat::mcset it "Line type." [encoding convertfrom utf-8 "Tipo di linea."]
  ::msgcat::mcset ru "Line type." [encoding convertfrom utf-8 "\320\242\320\270\320\277 \320\273\320\270\320\275\320\270\320\270."]
  ::msgcat::mcset sk "Line type." [encoding convertfrom utf-8 "Typ krivky."]
  ::msgcat::mcset sq "Line type." [encoding convertfrom utf-8 "lloji I rrjeshtit."]

  ::msgcat::mcset bg "id" [encoding convertfrom utf-8 "id - \320\270\320\275\320\264\320\265\321\202\320\270\321\204\320\270\320\272\320\260\321\202\320\276\321\200"]
  ::msgcat::mcset cz "id" [encoding convertfrom utf-8 "id"]
  ::msgcat::mcset de "id" [encoding convertfrom utf-8 "id"]
  ::msgcat::mcset el "id" [encoding convertfrom utf-8 "ID"]
  ::msgcat::mcset en "id" [encoding convertfrom utf-8 "id"]
  ::msgcat::mcset es "id" [encoding convertfrom utf-8 "ID"]
  ::msgcat::mcset it "id" [encoding convertfrom utf-8 "Identificativo"]
  ::msgcat::mcset ru "id" [encoding convertfrom utf-8 "\320\230\320\264"]
  ::msgcat::mcset sk "id" [encoding convertfrom utf-8 "id"]
  ::msgcat::mcset sq "id" [encoding convertfrom utf-8 "ID-identifikimi"]

  ::msgcat::mcset bg "Line identifier." [encoding convertfrom utf-8 "\320\230\320\275\320\264\320\265\321\202\320\270\321\204\320\270\320\272\320\260\321\202\320\276\321\200 \320\275\320\260 \320\273\320\270\320\275\320\270\321\217"]
  ::msgcat::mcset cz "Line identifier." [encoding convertfrom utf-8 "Identifik\303\241tor k\305\231ivky."]
  ::msgcat::mcset de "Line identifier." [encoding convertfrom utf-8 "Linienbezeichner."]
  ::msgcat::mcset el "Line identifier." [encoding convertfrom utf-8 "ID \316\263\317\201\316\261\316\274\316\274\316\256\317\202."]
  ::msgcat::mcset en "Line identifier." [encoding convertfrom utf-8 "Line identifier."]
  ::msgcat::mcset es "Line identifier." [encoding convertfrom utf-8 "Nombre (ID) de la l\303\255nea."]
  ::msgcat::mcset it "Line identifier." [encoding convertfrom utf-8 "Identificativo della linea."]
  ::msgcat::mcset ru "Line identifier." [encoding convertfrom utf-8 "\320\230\320\264\320\265\320\275\321\202\320\270\321\204\320\270\320\272\320\260\321\202\320\276\321\200 \320\273\320\270\320\275\320\270\320\270"]
  ::msgcat::mcset sk "Line identifier." [encoding convertfrom utf-8 "Identifik\303\241tor krivky."]
  ::msgcat::mcset sq "Line identifier." [encoding convertfrom utf-8 "identifikimi I rrjeshtit."]

  ::msgcat::mcset bg "Other line options." [encoding convertfrom utf-8 "\320\224\321\200\321\203\320\263\320\270 \320\276\320\277\321\206\320\270\320\270 \320\275\320\260 \320\273\320\270\320\275\320\270\321\217\321\202\320\260"]
  ::msgcat::mcset cz "Other line options." [encoding convertfrom utf-8 "Dal\305\241\303\255 volby pro k\305\231ivku."]
  ::msgcat::mcset de "Other line options." [encoding convertfrom utf-8 "Andere Linienoptionen."]
  ::msgcat::mcset el "Other line options." [encoding convertfrom utf-8 "\316\206\316\273\316\273\316\265\317\202 \316\265\317\200\316\271\316\273\316\277\316\263\316\255\317\202 \316\263\317\201\316\261\316\274\316\274\316\256\317\202. \316\224\316\267\316\273\316\261\316\264\316\256 \316\263\316\271\316\261 \316\274\316\267-\316\265\316\274\317\206\316\254\316\275\316\271\317\203\316\267 \316\263\317\201\316\261\316\274\316\274\316\256\317\202 \316\263\317\201\316\254\317\206\316\265\317\204\316\265 \316\265\316\264\317\216: -subtype invisible. \316\222\316\273\316\255\317\200\316\265\317\204\316\265 \317\204\316\277 thbook.pdf"]
  ::msgcat::mcset en "Other line options." [encoding convertfrom utf-8 "Other line options. I.e., to make line invisible, write here: -subtype invisible. See thbook.pdf"]
  ::msgcat::mcset es "Other line options." [encoding convertfrom utf-8 "Otras opciones de l\303\255nea. P. ej: para hacerla invisible, escribe: -subtype invisible (consultar thbook.pdf)"]
  ::msgcat::mcset it "Other line options." [encoding convertfrom utf-8 "Altre opzioni della linea."]
  ::msgcat::mcset ru "Other line options." [encoding convertfrom utf-8 "\320\237\321\200\320\276\321\207\320\270\320\265 \320\276\320\277\321\206\320\270\320\270 \320\273\320\270\320\275\320\270\320\270"]
  ::msgcat::mcset sk "Other line options." [encoding convertfrom utf-8 "\304\216al\305\241ie mo\305\276nosti pre krivku."]
  ::msgcat::mcset sq "Other line options." [encoding convertfrom utf-8 "opcionet tjera te rrjeshtit."]

  ::msgcat::mcset bg "reverse" [encoding convertfrom utf-8 "\320\276\320\261\321\200\320\260\321\202\320\275\320\260"]
  ::msgcat::mcset cz "reverse" [encoding convertfrom utf-8 "obr\303\241tit"]
  ::msgcat::mcset de "reverse" [encoding convertfrom utf-8 "Umkehren"]
  ::msgcat::mcset el "reverse" [encoding convertfrom utf-8 "\316\261\316\275\316\261\317\203\317\204\317\201\316\277\317\206\316\256"]
  ::msgcat::mcset en "reverse" [encoding convertfrom utf-8 "reverse"]
  ::msgcat::mcset es "reverse" [encoding convertfrom utf-8 "invertir"]
  ::msgcat::mcset it "reverse" [encoding convertfrom utf-8 "inverti"]
  ::msgcat::mcset ru "reverse" [encoding convertfrom utf-8 "\320\276\320\261\321\200\320\260\321\202\320\275\320\260\321\217"]
  ::msgcat::mcset sk "reverse" [encoding convertfrom utf-8 "oto\304\215i\305\245"]
  ::msgcat::mcset sq "reverse" [encoding convertfrom utf-8 "ktheje pas"]

  ::msgcat::mcset bg "Reverse line." [encoding convertfrom utf-8 "\320\236\320\261\321\212\321\200\320\275\320\270 \320\273\320\270\320\275\320\270\321\217\321\202\320\260"]
  ::msgcat::mcset cz "Reverse line." [encoding convertfrom utf-8 "Obr\303\241tit k\305\231ivku."]
  ::msgcat::mcset de "Reverse line." [encoding convertfrom utf-8 "Linie umkehren."]
  ::msgcat::mcset el "Reverse line." [encoding convertfrom utf-8 "\316\221\316\275\316\261\317\203\317\204\317\201\316\277\317\206\316\256 \316\263\317\201\316\261\316\274\316\274\316\256\317\202. \316\243\316\265 \317\200\316\265\317\201\316\257\317\200\317\204\317\211\317\203\316\267 \317\200\316\277\317\205 \317\204\316\261 \317\203\316\267\316\274\316\261\316\264\316\254\316\272\316\271\316\261 \316\265\316\257\316\275\316\261\316\271 \316\261\316\275\316\254\317\200\316\277\316\264\316\261, \316\272\316\254\316\275\317\204\316\265 \316\272\316\273\316\271\316\272 \316\265\316\264\317\216."]
  ::msgcat::mcset en "Reverse line." [encoding convertfrom utf-8 "Reverse line. If symbol's ticks are on bad side, click here."]
  ::msgcat::mcset es "Reverse line." [encoding convertfrom utf-8 "Invertir l\303\255nea. Si p.ej el s\303\255mbolo de resalte aparece al rev\303\251s, haz clic aqu\303\255."]
  ::msgcat::mcset it "Reverse line." [encoding convertfrom utf-8 "Inverti la linea."]
  ::msgcat::mcset ru "Reverse line." [encoding convertfrom utf-8 "\320\227\320\260\320\264\320\260\321\202\321\214 \320\276\320\261\321\200\320\260\321\202\320\275\320\276\320\265 \320\275\320\260\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265 \320\264\320\273\321\217 \320\273\320\270\320\275\320\270\320\270."]
  ::msgcat::mcset sk "Reverse line." [encoding convertfrom utf-8 "Oto\304\215i\305\245 krivku."]
  ::msgcat::mcset sq "Reverse line." [encoding convertfrom utf-8 "rrjeshti I pasem-I kthyer"]

  ::msgcat::mcset bg "close" [encoding convertfrom utf-8 "\320\267\320\260\321\202\320\262\320\276\321\200\320\270"]
  ::msgcat::mcset cz "close" [encoding convertfrom utf-8 "zav\305\231\303\255t"]
  ::msgcat::mcset de "close" [encoding convertfrom utf-8 "schlie\303\237en"]
  ::msgcat::mcset el "close" [encoding convertfrom utf-8 "\316\272\316\273\316\265\316\257\317\203\316\271\316\274\316\277"]
  ::msgcat::mcset en "close" [encoding convertfrom utf-8 "close"]
  ::msgcat::mcset es "close" [encoding convertfrom utf-8 "cerrar"]
  ::msgcat::mcset it "close" [encoding convertfrom utf-8 "chiudi"]
  ::msgcat::mcset ru "close" [encoding convertfrom utf-8 "\320\267\320\260\320\274\320\272\320\275\321\203\321\202\321\214"]
  ::msgcat::mcset sk "close" [encoding convertfrom utf-8 "zavrie\305\245"]
  ::msgcat::mcset sq "close" [encoding convertfrom utf-8 "mbylle"]

  ::msgcat::mcset bg "Close line." [encoding convertfrom utf-8 "\320\227\320\260\321\202\320\262\320\276\321\200\320\270 \320\273\320\270\320\275\320\270\321\217\321\202\320\260 \321\201 \320\275\320\260\321\207\320\260\320\273\320\276\321\202\320\276 \320\270."]
  ::msgcat::mcset cz "Close line." [encoding convertfrom utf-8 "Uzav\305\231\303\255t k\305\231ivku."]
  ::msgcat::mcset de "Close line." [encoding convertfrom utf-8 "Linie schlie\303\237en."]
  ::msgcat::mcset el "Close line." [encoding convertfrom utf-8 "\316\232\316\273\316\265\316\257\317\203\316\271\316\274\316\277 \316\263\317\201\316\261\316\274\316\274\316\256\317\202"]
  ::msgcat::mcset en "Close line." [encoding convertfrom utf-8 "Close line."]
  ::msgcat::mcset es "Close line." [encoding convertfrom utf-8 "Cerrar l\303\255nea (o sea, unir \303\272ltimo punto con el primero para definir un espacio cerrado)."]
  ::msgcat::mcset it "Close line." [encoding convertfrom utf-8 "Chiudi la linea."]
  ::msgcat::mcset ru "Close line." [encoding convertfrom utf-8 "\320\227\320\260\320\274\320\272\320\275\321\203\321\202\321\214 \320\273\320\270\320\275\320\270\321\216 \320\275\320\260 \320\265\321\221 \320\266\320\265 \320\275\320\260\321\207\320\260\320\273\320\276."]
  ::msgcat::mcset sk "Close line." [encoding convertfrom utf-8 "Uzavrie\305\245 krivku."]
  ::msgcat::mcset sq "Close line." [encoding convertfrom utf-8 "mbylle rrjeshtin."]

  ::msgcat::mcset bg "Edit line" [encoding convertfrom utf-8 "\320\240\320\265\320\264\320\260\320\272\321\202\320\270\321\200\320\260\320\271 \320\273\320\270\320\275\320\270\321\217"]
  ::msgcat::mcset cz "Edit line" [encoding convertfrom utf-8 "Editovat"]
  ::msgcat::mcset de "Edit line" [encoding convertfrom utf-8 "Linie bearbeiten"]
  ::msgcat::mcset el "Edit line" [encoding convertfrom utf-8 "\316\225\317\200\316\265\316\276\316\265\317\201\316\263\316\261\317\203\316\257\316\261 \316\263\317\201\316\261\316\274\316\274\316\256\317\202"]
  ::msgcat::mcset en "Edit line" [encoding convertfrom utf-8 "Edit line"]
  ::msgcat::mcset es "Edit line" [encoding convertfrom utf-8 "Editar"]
  ::msgcat::mcset it "Edit line" [encoding convertfrom utf-8 "Edita"]
  ::msgcat::mcset ru "Edit line" [encoding convertfrom utf-8 "\320\237\321\200\320\260\320\262\320\270\321\202\321\214 \320\273\320\270\320\275\320\270\321\216"]
  ::msgcat::mcset sk "Edit line" [encoding convertfrom utf-8 "Upravi\305\245"]
  ::msgcat::mcset sq "Edit line" [encoding convertfrom utf-8 "permireso rrjeshtin"]

  ::msgcat::mcset bg "Insert/delete line point. Split line." [encoding convertfrom utf-8 "\320\222\320\274\321\212\320\272\320\262\320\260\320\275\320\265/\321\202\321\200\320\270\320\265\320\275\320\265 \320\275\320\260 \321\202\320\276\321\207\320\272\320\260. \320\240\320\260\320\267\320\264\320\265\320\273\321\217\320\275\320\265 \320\275\320\260 \320\273\320\270\320\275\320\270\321\217."]
  ::msgcat::mcset cz "Insert/delete line point. Split line." [encoding convertfrom utf-8 "Vlo\305\276en\303\255/smaz\303\241n\303\255 bodu k\305\231ivky. Rozd\304\233len\303\255 k\305\231ivky."]
  ::msgcat::mcset de "Insert/delete line point. Split line." [encoding convertfrom utf-8 "Punkt auf Linie eingeben/l\303\266schen. Linie teilen."]
  ::msgcat::mcset el "Insert/delete line point. Split line." [encoding convertfrom utf-8 "\316\225\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \316\272\316\261\316\271 \316\264\316\271\316\261\316\263\317\201\316\261\317\206\316\256 \317\203\316\267\316\274\316\265\316\257\317\211\316\275 \316\263\317\201\316\261\316\274\316\274\316\256\317\202. \316\224\316\271\316\261\316\257\317\201\316\265\317\203\316\267 \316\263\317\201\316\261\316\274\316\274\316\256\317\202."]
  ::msgcat::mcset en "Insert/delete line point. Split line." [encoding convertfrom utf-8 "Insert/delete line point. Split line."]
  ::msgcat::mcset es "Insert/delete line point. Split line." [encoding convertfrom utf-8 "Permite a\303\261adir o borrar puntos de la l\303\255nea, o cortar la l\303\255nea en dos."]
  ::msgcat::mcset it "Insert/delete line point. Split line." [encoding convertfrom utf-8 "Inserisci/rimuovi un punto della linea. Dividi la linea."]
  ::msgcat::mcset ru "Insert/delete line point. Split line." [encoding convertfrom utf-8 "\320\222\321\201\321\202\320\260\320\262\320\272\320\260/\321\203\320\264\320\260\320\273\320\265\320\275\320\270\320\265 \321\202\320\276\321\207\320\272\320\270, \321\200\320\260\320\267\320\264\320\265\320\273\320\265\320\275\320\270\320\265 \320\273\320\270\320\275\320\270\320\270."]
  ::msgcat::mcset sk "Insert/delete line point. Split line." [encoding convertfrom utf-8 "Vlo\305\276enie/odstr\303\241nenie bodu krivky. Rozdelenie krivky."]
  ::msgcat::mcset sq "Insert/delete line point. Split line." [encoding convertfrom utf-8 "fute/fshije piken e rrjeshtit. Ndaje rrjeshtin."]

  ::msgcat::mcset bg "Click this button to apply line changes." [encoding convertfrom utf-8 "\320\235\320\260\321\202\320\270\321\201\320\275\320\265\321\202\320\265 \321\202\320\276\320\267\320\270 \320\261\321\203\321\202\320\276\320\275 \320\267\320\260 \320\264\320\260 \320\277\321\200\320\270\320\273\320\276\320\266\320\270\321\202\320\265 \320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\321\217\321\202\320\260 \320\275\320\260 \320\273\320\270\320\275\320\270\321\217\321\202\320\260."]
  ::msgcat::mcset cz "Click this button to apply line changes." [encoding convertfrom utf-8 "Aktualizuje k\305\231ivku."]
  ::msgcat::mcset de "Click this button to apply line changes." [encoding convertfrom utf-8 "Klicke diesen Knopf, um Linien\303\244nderungen anzuwenden."]
  ::msgcat::mcset el "Click this button to apply line changes." [encoding convertfrom utf-8 "\316\232\316\254\316\275\317\204\316\265 \316\272\316\273\316\271\316\272 \316\263\316\271\316\261 \316\275\316\261 \316\263\316\257\316\275\316\265\316\271 \316\265\317\206\316\261\317\201\316\274\316\277\316\263\316\256 \317\204\317\211\316\275 \316\261\316\273\316\273\316\261\316\263\317\216\316\275 \317\203\317\204\316\267\316\275 \316\263\317\201\316\261\316\274\316\274\316\256."]
  ::msgcat::mcset en "Click this button to apply line changes." [encoding convertfrom utf-8 "Click this button to apply line changes."]
  ::msgcat::mcset es "Click this button to apply line changes." [encoding convertfrom utf-8 "Clicar aqu\303\255 tras modificar las propiedades de la l\303\255nea."]
  ::msgcat::mcset it "Click this button to apply line changes." [encoding convertfrom utf-8 "Primi questo bottone per fare modifiche alla linea."]
  ::msgcat::mcset ru "Click this button to apply line changes." [encoding convertfrom utf-8 "\320\235\320\260\320\266\320\274\320\270\321\202\320\265 \321\215\321\202\321\203 \320\272\320\275\320\276\320\277\320\272\321\203 \320\264\320\273\321\217 \320\277\321\200\320\270\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\320\271 \320\273\320\270\320\275\320\270\320\270."]
  ::msgcat::mcset sk "Click this button to apply line changes." [encoding convertfrom utf-8 "Aktualizuje krivku."]
  ::msgcat::mcset sq "Click this button to apply line changes." [encoding convertfrom utf-8 "kliko kete buton te aktualizosh nderrimet e rrjeshtit."]

  ::msgcat::mcset bg "Select line point." [encoding convertfrom utf-8 "\320\230\320\267\320\261\320\265\321\200\320\270 \320\265\320\264\320\275\320\260 \320\276\321\202 \321\202\320\276\321\207\320\272\320\270\321\202\320\265 \320\275\320\260 \320\273\320\270\320\275\320\270\321\217\321\202\320\260."]
  ::msgcat::mcset cz "Select line point." [encoding convertfrom utf-8 "V\303\275b\304\233r bodu k\305\231ivky."]
  ::msgcat::mcset de "Select line point." [encoding convertfrom utf-8 "Punkt auf Linie ausw\303\244hlen."]
  ::msgcat::mcset el "Select line point." [encoding convertfrom utf-8 "\316\221\317\205\317\204\316\254 \316\265\316\257\316\275\316\261\316\271 \317\204\316\261 \316\265\317\200\316\271\316\273\316\265\316\263\316\274\316\255\316\275\316\261 \317\203\316\267\316\274\316\265\316\257\316\261 \316\263\317\201\316\261\316\274\316\274\317\216\316\275. \316\232\316\254\316\275\317\204\316\265 \316\272\316\273\316\271\316\272 \317\203\316\265 \317\214\317\200\316\277\316\271\316\277 \317\203\316\261\317\202 \316\265\316\275\316\264\316\271\316\261\317\206\316\255\317\201\316\265\316\271 \316\263\316\271\316\261 \316\275\316\261 \316\265\316\274\317\206\316\261\316\275\316\271\317\203\317\204\316\265\316\257 \317\211\317\202 \316\265\317\200\316\271\316\273\316\265\316\263\316\274\316\255\316\275\316\277 \317\203\317\204\316\277\316\275 \316\272\316\261\316\274\316\262\316\254."]
  ::msgcat::mcset en "Select line point." [encoding convertfrom utf-8 "These are selected line points. Click on any to get it selected on canvas."]
  ::msgcat::mcset es "Select line point." [encoding convertfrom utf-8 "Lista de puntos que forman esta l\303\255nea. Clic para resaltar el punto en la topo."]
  ::msgcat::mcset it "Select line point." [encoding convertfrom utf-8 "Seleziona un punto della linea."]
  ::msgcat::mcset ru "Select line point." [encoding convertfrom utf-8 "\320\222\321\213\320\261\321\200\320\260\321\202\321\214 \320\276\320\264\320\275\321\203 \320\270\320\267 \321\202\320\276\321\207\320\265\320\272 \320\273\320\270\320\275\320\270\320\270."]
  ::msgcat::mcset sk "Select line point." [encoding convertfrom utf-8 "V\303\275ber bodu krivky."]
  ::msgcat::mcset sq "Select line point." [encoding convertfrom utf-8 "selekto piken e rrjeshtit."]

  ::msgcat::mcset bg "loading line point module ..." [encoding convertfrom utf-8 "\320\267\320\260\321\200\320\265\320\266\320\264\320\260\320\275\320\265 \320\275\320\260 \320\274\320\276\320\264\321\203\320\273\320\260 \320\273\320\270\320\275\320\265\320\271\320\275\320\270 \321\202\320\276\321\207\320\272\320\270 ..."]
  ::msgcat::mcset cz "loading line point module ..." [encoding convertfrom utf-8 "nahr\303\241v\303\241m modul pro body k\305\231ivky ..."]
  ::msgcat::mcset de "loading line point module ..." [encoding convertfrom utf-8 "Lade Linienpunktmodul ..."]
  ::msgcat::mcset el "loading line point module ..." [encoding convertfrom utf-8 "\317\206\317\214\317\201\317\204\316\271\317\203\316\267 \316\265\316\275\317\214\317\204\316\267\317\204\316\261\317\202 \317\203\316\267\316\274\316\265\316\257\317\211\316\275 \316\263\317\201\316\261\316\274\316\274\317\216\316\275..."]
  ::msgcat::mcset en "loading line point module ..." [encoding convertfrom utf-8 "loading line point module ..."]
  ::msgcat::mcset es "loading line point module ..." [encoding convertfrom utf-8 "puntos de l\303\255nea ..."]
  ::msgcat::mcset it "loading line point module ..." [encoding convertfrom utf-8 "caricando il modulo dei punti di linea ..."]
  ::msgcat::mcset ru "loading line point module ..." [encoding convertfrom utf-8 "\320\267\320\260\320\263\321\200\321\203\320\267\320\272\320\260 \320\274\320\276\320\264\321\203\320\273\321\217 \321\202\320\276\321\207\320\265\320\272 \320\273\320\270\320\275\320\270\320\270 ..."]
  ::msgcat::mcset sk "loading line point module ..." [encoding convertfrom utf-8 "nahr\303\241vam modul pre body krivky ..."]
  ::msgcat::mcset sq "loading line point module ..." [encoding convertfrom utf-8 "duke lexuar modulin e pikes se rrjeshtit."]

  ::msgcat::mcset bg "position" [encoding convertfrom utf-8 "\320\277\320\276\320\267\320\270\321\206\320\270\321\217"]
  ::msgcat::mcset cz "position" [encoding convertfrom utf-8 "pozice"]
  ::msgcat::mcset de "position" [encoding convertfrom utf-8 "Position"]
  ::msgcat::mcset el "position" [encoding convertfrom utf-8 "\316\270\316\255\317\203\316\267"]
  ::msgcat::mcset en "position" [encoding convertfrom utf-8 "position"]
  ::msgcat::mcset es "position" [encoding convertfrom utf-8 "posici\303\263n"]
  ::msgcat::mcset it "position" [encoding convertfrom utf-8 "posizione"]
  ::msgcat::mcset ru "position" [encoding convertfrom utf-8 "\320\277\320\276\320\267\320\270\321\206\320\270\321\217"]
  ::msgcat::mcset sk "position" [encoding convertfrom utf-8 "poloha"]
  ::msgcat::mcset sq "position" [encoding convertfrom utf-8 "pozicioni"]

  ::msgcat::mcset bg "Point position." [encoding convertfrom utf-8 "\320\237\320\276\320\267\320\270\321\206\320\270\321\217 \320\275\320\260 \321\202\320\276\321\207\320\272\320\260\321\202\320\260."]
  ::msgcat::mcset cz "Point position." [encoding convertfrom utf-8 "Pozice bodu."]
  ::msgcat::mcset de "Point position." [encoding convertfrom utf-8 "Punktposition."]
  ::msgcat::mcset el "Point position." [encoding convertfrom utf-8 "\316\230\316\255\317\203\316\267 \317\203\316\267\316\274\316\265\316\257\316\277\317\205"]
  ::msgcat::mcset en "Point position." [encoding convertfrom utf-8 "Point position."]
  ::msgcat::mcset es "Point position." [encoding convertfrom utf-8 "Posici\303\263n del punto."]
  ::msgcat::mcset it "Point position." [encoding convertfrom utf-8 "Posizione del punto."]
  ::msgcat::mcset ru "Point position." [encoding convertfrom utf-8 "\320\237\320\276\320\267\320\270\321\206\320\270\321\217 \321\202\320\276\321\207\320\272\320\270."]
  ::msgcat::mcset sk "Point position." [encoding convertfrom utf-8 "Poloha bodu."]
  ::msgcat::mcset sq "Point position." [encoding convertfrom utf-8 "pozicioni I pikes."]

  ::msgcat::mcset bg "Point X coordinate." [encoding convertfrom utf-8 "X \320\272\320\276\320\276\321\200\320\264\320\270\320\275\320\260\321\202\320\260 \320\275\320\260 \321\202\320\276\321\207\320\272\320\260\321\202\320\260."]
  ::msgcat::mcset cz "Point X coordinate." [encoding convertfrom utf-8 "sou\305\231adnice X bodu."]
  ::msgcat::mcset de "Point X coordinate." [encoding convertfrom utf-8 "Punkt X-Koordinate."]
  ::msgcat::mcset el "Point X coordinate." [encoding convertfrom utf-8 "\316\243\317\205\316\275\317\204\316\265\317\204\316\261\316\263\316\274\316\255\316\275\316\267 \316\247 \317\203\316\267\316\274\316\265\316\257\316\277\317\205"]
  ::msgcat::mcset en "Point X coordinate." [encoding convertfrom utf-8 "Point X coordinate."]
  ::msgcat::mcset es "Point X coordinate." [encoding convertfrom utf-8 "Coordenada X del punto."]
  ::msgcat::mcset it "Point X coordinate." [encoding convertfrom utf-8 "Coordinata X del punto."]
  ::msgcat::mcset ru "Point X coordinate." [encoding convertfrom utf-8 "X \320\272\320\276\320\276\321\200\320\264\320\270\320\275\320\260\321\202\320\260 \321\202\320\276\321\207\320\272\320\270."]
  ::msgcat::mcset sk "Point X coordinate." [encoding convertfrom utf-8 "X s\303\272radnica bodu."]
  ::msgcat::mcset sq "Point X coordinate." [encoding convertfrom utf-8 "pika X e koordinates."]

  ::msgcat::mcset bg "Point Y coordinate." [encoding convertfrom utf-8 "Y \320\272\320\276\320\276\321\200\320\264\320\270\320\275\320\260\321\202\320\260 \320\275\320\260 \321\202\320\276\321\207\320\272\320\260\321\202\320\260."]
  ::msgcat::mcset cz "Point Y coordinate." [encoding convertfrom utf-8 "sou\305\231adnice Y bodu."]
  ::msgcat::mcset de "Point Y coordinate." [encoding convertfrom utf-8 "Punkt Y-Koordinate."]
  ::msgcat::mcset el "Point Y coordinate." [encoding convertfrom utf-8 "\316\243\317\205\316\275\317\204\316\265\317\204\316\261\316\263\316\274\316\255\316\275\316\267 \316\245 \317\203\316\267\316\274\316\265\316\257\316\277\317\205"]
  ::msgcat::mcset en "Point Y coordinate." [encoding convertfrom utf-8 "Point Y coordinate."]
  ::msgcat::mcset es "Point Y coordinate." [encoding convertfrom utf-8 "coordenada Y del punto."]
  ::msgcat::mcset it "Point Y coordinate." [encoding convertfrom utf-8 "Coordinata Y del punto."]
  ::msgcat::mcset ru "Point Y coordinate." [encoding convertfrom utf-8 "Y \320\272\320\276\320\276\321\200\320\264\320\270\320\275\320\260\321\202\320\260 \321\202\320\276\321\207\320\272\320\270."]
  ::msgcat::mcset sk "Point Y coordinate." [encoding convertfrom utf-8 "Y s\303\272radnica bodu."]
  ::msgcat::mcset sq "Point Y coordinate." [encoding convertfrom utf-8 "pika Y e koordinates."]

  ::msgcat::mcset bg "Previous control point X coordinate." [encoding convertfrom utf-8 "X \320\272\320\276\320\276\321\200\320\264\320\270\320\275\320\260\321\202\320\260 \320\275\320\260 \320\277\321\200\320\265\320\264\320\270\321\210\320\275\320\260\321\202\320\260 \321\203\320\277\321\200\320\260\320\262\320\273\321\217\320\262\320\260\321\211\320\260 \321\202\320\276\321\207\320\272\320\260."]
  ::msgcat::mcset cz "Previous control point X coordinate." [encoding convertfrom utf-8 "Sou\305\231adnice X p\305\231edchoz\303\255ho \305\231\303\255d\303\255c\303\255ho bodu."]
  ::msgcat::mcset de "Previous control point X coordinate." [encoding convertfrom utf-8 "Vorherige X-Koordinate eines Kontrollpunkts."]
  ::msgcat::mcset el "Previous control point X coordinate." [encoding convertfrom utf-8 "\316\243\317\205\316\275\317\204\316\265\317\204\316\261\316\263\316\274\316\255\316\275\316\267 \316\247 \317\200\317\201\316\277\316\267\316\263\316\277\317\215\316\274\316\265\316\275\316\277\317\205 \317\203\316\267\316\274\316\265\316\257\316\277\317\205 \316\265\316\273\316\255\316\263\317\207\316\277\317\205"]
  ::msgcat::mcset en "Previous control point X coordinate." [encoding convertfrom utf-8 "Previous control point X coordinate."]
  ::msgcat::mcset es "Previous control point X coordinate." [encoding convertfrom utf-8 "Coordenada X del punto de control anterior."]
  ::msgcat::mcset it "Previous control point X coordinate." [encoding convertfrom utf-8 "Coordinata X del punto di controllo precedente."]
  ::msgcat::mcset ru "Previous control point X coordinate." [encoding convertfrom utf-8 "X \320\272\320\276\320\276\321\200\320\264\320\270\320\275\320\260\321\202\320\260 \320\277\321\200\320\265\320\264\321\213\320\264\321\203\321\211\320\265\320\271 \321\203\320\277\321\200\320\260\320\262\320\273\321\217\321\216\321\211\320\265\320\271 \321\202\320\276\321\207\320\272\320\270."]
  ::msgcat::mcset sk "Previous control point X coordinate." [encoding convertfrom utf-8 "X s\303\272radnica predch\303\241dzaj\303\272ceho kontroln\303\251ho bodu."]
  ::msgcat::mcset sq "Previous control point X coordinate." [encoding convertfrom utf-8 "pika e kontrollit te meparshem te koordinates X"]

  ::msgcat::mcset bg "Previous control point Y coordinate." [encoding convertfrom utf-8 "Y \320\272\320\276\320\276\321\200\320\264\320\270\320\275\320\260\321\202\320\260 \320\275\320\260 \320\277\321\200\320\265\320\264\320\270\321\210\320\275\320\260\321\202\320\260 \321\203\320\277\321\200\320\260\320\262\320\273\321\217\320\262\320\260\321\211\320\260 \321\202\320\276\321\207\320\272\320\260."]
  ::msgcat::mcset cz "Previous control point Y coordinate." [encoding convertfrom utf-8 "Sou\305\231adnice Y p\305\231edchoz\303\255ho \305\231\303\255d\303\255c\303\255ho bodu."]
  ::msgcat::mcset de "Previous control point Y coordinate." [encoding convertfrom utf-8 "Vorherige Y-Koordinate eines Kontrollpunkts."]
  ::msgcat::mcset el "Previous control point Y coordinate." [encoding convertfrom utf-8 "\316\243\317\205\316\275\317\204\316\265\317\204\316\261\316\263\316\274\316\255\316\275\316\267 \316\245 \317\200\317\201\316\277\316\267\316\263\316\277\317\215\316\274\316\265\316\275\316\277\317\205 \317\203\316\267\316\274\316\265\316\257\316\277\317\205 \316\265\316\273\316\255\316\263\317\207\316\277\317\205"]
  ::msgcat::mcset en "Previous control point Y coordinate." [encoding convertfrom utf-8 "Previous control point Y coordinate."]
  ::msgcat::mcset es "Previous control point Y coordinate." [encoding convertfrom utf-8 "Coordenada Y del punto de control anterior."]
  ::msgcat::mcset it "Previous control point Y coordinate." [encoding convertfrom utf-8 "Coordinata Y del punto di controllo precedente."]
  ::msgcat::mcset ru "Previous control point Y coordinate." [encoding convertfrom utf-8 "Y \320\272\320\276\320\276\321\200\320\264\320\270\320\275\320\260\321\202\320\260 \320\277\321\200\320\265\320\264\321\213\320\264\321\203\321\211\320\265\320\271 \321\203\320\277\321\200\320\260\320\262\320\273\321\217\321\216\321\211\320\265\320\271 \321\202\320\276\321\207\320\272\320\270."]
  ::msgcat::mcset sk "Previous control point Y coordinate." [encoding convertfrom utf-8 "Y s\303\272radnica predch\303\241dzaj\303\272ceho kontroln\303\251ho bodu."]
  ::msgcat::mcset sq "Previous control point Y coordinate." [encoding convertfrom utf-8 "pika e kontrollit te meparshem te koordinates-Y"]

  ::msgcat::mcset bg "Next control point X coordinate." [encoding convertfrom utf-8 "X \320\272\320\276\320\276\321\200\320\264\320\270\320\275\320\260\321\202\320\260 \320\275\320\260 \321\201\320\273\320\265\320\264\320\262\320\260\321\211\320\260\321\202\320\260 \321\203\320\277\321\200\320\260\320\262\320\273\321\217\320\262\320\260\321\211\320\260 \321\202\320\276\321\207\320\272\320\260."]
  ::msgcat::mcset cz "Next control point X coordinate." [encoding convertfrom utf-8 "Sou\305\231adnice X n\303\241sleduj\303\255c\303\255ho \305\231\303\255d\303\255c\303\255ho bodu."]
  ::msgcat::mcset de "Next control point X coordinate." [encoding convertfrom utf-8 "N\303\244chste X-Koordinate eines Kontrollpunkts."]
  ::msgcat::mcset el "Next control point X coordinate." [encoding convertfrom utf-8 "\316\243\317\205\316\275\317\204\316\265\317\204\316\261\316\263\316\274\316\255\316\275\316\267 \316\247 \316\265\317\200\317\214\316\274\316\265\316\275\316\277\317\205 \317\203\316\267\316\274\316\265\316\257\316\277\317\205 \316\265\316\273\316\255\316\263\317\207\316\277\317\205"]
  ::msgcat::mcset en "Next control point X coordinate." [encoding convertfrom utf-8 "Next control point X coordinate."]
  ::msgcat::mcset es "Next control point X coordinate." [encoding convertfrom utf-8 "Coordenada X del siguiente punto de control."]
  ::msgcat::mcset it "Next control point X coordinate." [encoding convertfrom utf-8 "Coordinata X del prossimo punto."]
  ::msgcat::mcset ru "Next control point X coordinate." [encoding convertfrom utf-8 "X \320\272\320\276\320\276\321\200\320\264\320\270\320\275\320\260\321\202\320\260 \321\201\320\273\320\265\320\264\321\203\321\216\321\211\320\265\320\271 \321\203\320\277\321\200\320\260\320\262\320\273\321\217\321\216\321\211\320\265\320\271 \321\202\320\276\321\207\320\272\320\270."]
  ::msgcat::mcset sk "Next control point X coordinate." [encoding convertfrom utf-8 "X s\303\272radnica nasleduj\303\272ceho kontroln\303\251ho bodu."]
  ::msgcat::mcset sq "Next control point X coordinate." [encoding convertfrom utf-8 "pika e ardhshme kontrollit te coordinates X"]

  ::msgcat::mcset bg "Next control point Y coordinate." [encoding convertfrom utf-8 "Y \320\272\320\276\320\276\321\200\320\264\320\270\320\275\320\260\321\202\320\260 \320\275\320\260 \321\201\320\273\320\265\320\264\320\262\320\260\321\211\320\260\321\202\320\260 \321\203\320\277\321\200\320\260\320\262\320\273\321\217\320\262\320\260\321\211\320\260 \321\202\320\276\321\207\320\272\320\260."]
  ::msgcat::mcset cz "Next control point Y coordinate." [encoding convertfrom utf-8 "Sou\305\231adnice Y n\303\241sleduj\303\255c\303\255ho \305\231\303\255d\303\255c\303\255ho bodu."]
  ::msgcat::mcset de "Next control point Y coordinate." [encoding convertfrom utf-8 "N\303\244chste Y-Koordinate eines Kontrollpunkts."]
  ::msgcat::mcset el "Next control point Y coordinate." [encoding convertfrom utf-8 "\316\243\317\205\316\275\317\204\316\265\317\204\316\261\316\263\316\274\316\255\316\275\316\267 \316\245 \316\265\317\200\317\214\316\274\316\265\316\275\316\277\317\205 \317\203\316\267\316\274\316\265\316\257\316\277\317\205 \316\265\316\273\316\255\316\263\317\207\316\277\317\205"]
  ::msgcat::mcset en "Next control point Y coordinate." [encoding convertfrom utf-8 "Next control point Y coordinate."]
  ::msgcat::mcset es "Next control point Y coordinate." [encoding convertfrom utf-8 "Coordenada Y del siguiente punto de control."]
  ::msgcat::mcset it "Next control point Y coordinate." [encoding convertfrom utf-8 "Coordinata Y del prossimo punto."]
  ::msgcat::mcset ru "Next control point Y coordinate." [encoding convertfrom utf-8 "Y \320\272\320\276\320\276\321\200\320\264\320\270\320\275\320\260\321\202\320\260 \321\201\320\273\320\265\320\264\321\203\321\216\321\211\320\265\320\271 \321\203\320\277\321\200\320\260\320\262\320\273\321\217\321\216\321\211\320\265\320\271 \321\202\320\276\321\207\320\272\320\270."]
  ::msgcat::mcset sk "Next control point Y coordinate." [encoding convertfrom utf-8 "Y s\303\272radnica nasleduj\303\272ceho kontroln\303\251ho bodu."]
  ::msgcat::mcset sq "Next control point Y coordinate." [encoding convertfrom utf-8 "pika e ardhshme kontrollit te coordinates Y"]

  ::msgcat::mcset bg "Checkbox whether to use previous control point." [encoding convertfrom utf-8 "\320\237\320\276\321\201\321\202\320\260\320\262\320\265\321\202\320\265 \320\276\321\202\320\261\320\265\320\273\321\217\320\267\320\272\320\260 \320\267\320\260 \320\270\320\267\320\277\320\276\320\273\320\267\320\262\320\260\320\275\320\265 \320\275\320\260 \320\277\321\200\320\265\320\264\320\270\321\210\320\275\320\260\321\202\320\260 \321\203\320\277\321\200\320\260\320\262\320\273\321\217\320\262\320\260\321\211\320\260 \321\202\320\276\321\207\320\272\320\260."]
  ::msgcat::mcset cz "Checkbox whether to use previous control point." [encoding convertfrom utf-8 "Za\305\241krtn\304\233te pokud chcete pro tvar k\305\231ivky pou\305\276\303\255t p\305\231edchoz\303\255 \305\231\303\255d\303\255c\303\255 bod."]
  ::msgcat::mcset de "Checkbox whether to use previous control point." [encoding convertfrom utf-8 "Auswahl, ob vorheriger Kontrollpunkt benutzt wird."]
  ::msgcat::mcset el "Checkbox whether to use previous control point." [encoding convertfrom utf-8 "\316\225\317\200\316\271\316\273\316\277\316\263\316\256 \316\263\316\271\316\261 \317\207\317\201\316\256\317\203\316\267 \317\200\317\201\316\277\316\267\316\263\316\277\317\215\316\274\316\265\316\275\316\277\317\205 \317\203\316\267\316\274\316\265\316\257\316\277\317\205 \316\265\316\273\316\255\316\263\317\207\316\277\317\205"]
  ::msgcat::mcset en "Checkbox whether to use previous control point." [encoding convertfrom utf-8 "Checkbox whether to use previous control point."]
  ::msgcat::mcset es "Checkbox whether to use previous control point." [encoding convertfrom utf-8 "Usar punto de control anterior."]
  ::msgcat::mcset it "Checkbox whether to use previous control point." [encoding convertfrom utf-8 "Checkbox per usare il punto di controllo precedente."]
  ::msgcat::mcset ru "Checkbox whether to use previous control point." [encoding convertfrom utf-8 "\320\237\320\276\321\201\321\202\320\260\320\262\321\214\321\202\320\265 \320\263\320\260\320\273\320\276\321\207\320\272\321\203 \320\264\320\273\321\217 \320\270\321\201\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\320\275\320\270\321\217 \320\277\321\200\320\265\320\264\321\213\320\264\321\203\321\211\320\265\320\271 \321\203\320\277\321\200\320\260\320\262\320\273\321\217\321\216\321\211\320\265\320\271 \321\202\320\276\321\207\320\272\320\270."]
  ::msgcat::mcset sk "Checkbox whether to use previous control point." [encoding convertfrom utf-8 "Pou\305\276i predch\303\241dzaj\303\272ci kontroln\303\275 bod."]
  ::msgcat::mcset sq "Checkbox whether to use previous control point." [encoding convertfrom utf-8 "kutia-kontrollit a duhet te perdoret pika e kontrollit e meparshme"]

  ::msgcat::mcset bg "smooth" [encoding convertfrom utf-8 "\320\270\320\267\320\263\320\273\320\260\320\266\320\264\320\260\320\275\320\265"]
  ::msgcat::mcset cz "smooth" [encoding convertfrom utf-8 "uhladit"]
  ::msgcat::mcset de "smooth" [encoding convertfrom utf-8 "gegl\303\244ttet"]
  ::msgcat::mcset el "smooth" [encoding convertfrom utf-8 "\316\261\317\200\316\261\316\273\316\256"]
  ::msgcat::mcset en "smooth" [encoding convertfrom utf-8 "smooth"]
  ::msgcat::mcset es "smooth" [encoding convertfrom utf-8 "suavizar"]
  ::msgcat::mcset it "smooth" [encoding convertfrom utf-8 "regolarizza"]
  ::msgcat::mcset ru "smooth" [encoding convertfrom utf-8 "\321\201\320\263\320\273\320\260\320\264\320\270\321\202\321\214"]
  ::msgcat::mcset sk "smooth" [encoding convertfrom utf-8 "vyhladi\305\245"]
  ::msgcat::mcset sq "smooth" [encoding convertfrom utf-8 "e bute"]

  ::msgcat::mcset bg "Set line to be smooth in given point." [encoding convertfrom utf-8 "\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\265\321\202\320\265 \320\267\320\260 \320\270\320\267\320\263\320\273\320\260\320\266\320\264\320\260\320\275\320\265 \320\275\320\260 \320\273\320\270\320\275\320\270\321\217\321\202\320\260 \320\262 \320\264\320\260\320\264\320\265\320\275\320\260\321\202\320\260 \321\202\320\276\321\207\320\272\320\260."]
  ::msgcat::mcset cz "Set line to be smooth in given point." [encoding convertfrom utf-8 "Nastav\303\255 hladkou k\305\231ivku v dan\303\251m bod\304\233."]
  ::msgcat::mcset de "Set line to be smooth in given point." [encoding convertfrom utf-8 "Setze Linie auf gegl\303\244ttet am gegebenen Punkt."]
  ::msgcat::mcset el "Set line to be smooth in given point." [encoding convertfrom utf-8 "\316\237\317\201\316\271\317\203\316\274\317\214\317\202 \316\261\317\200\316\261\316\273\316\256\317\202 \316\272\316\261\316\274\317\200\317\215\316\273\316\267\317\202 \317\203\317\204\316\277 \316\265\317\200\317\214\316\274\316\265\316\275\316\277 \317\203\316\267\316\274\316\265\316\257\316\277 \317\204\316\267\317\202 \316\263\317\201\316\261\316\274\316\274\316\256\317\202"]
  ::msgcat::mcset en "Set line to be smooth in given point." [encoding convertfrom utf-8 "Set line to be smooth in given point."]
  ::msgcat::mcset es "Set line to be smooth in given point." [encoding convertfrom utf-8 "Suavizar la l\303\255nea en el punto seleccionado."]
  ::msgcat::mcset it "Set line to be smooth in given point." [encoding convertfrom utf-8 "Imposta la linea ad essere regolare nelpunto specificato."]
  ::msgcat::mcset ru "Set line to be smooth in given point." [encoding convertfrom utf-8 "\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\270\321\202\320\265 \320\264\320\273\321\217 \321\201\320\263\320\273\320\260\320\266\320\270\320\262\320\260\320\275\320\270\321\217 \320\273\320\270\320\275\320\270\320\270 \320\262 \320\264\320\260\320\275\320\275\320\276\320\271 \321\202\320\276\321\207\320\272\320\265."]
  ::msgcat::mcset sk "Set line to be smooth in given point." [encoding convertfrom utf-8 "Nastav\303\255 kontroln\303\251 body tak, aby krivka bola v danom bode hladk\303\241."]
  ::msgcat::mcset sq "Set line to be smooth in given point." [encoding convertfrom utf-8 "vene rrjeshtin per te qene I bute ne piken e dhanun"]

  ::msgcat::mcset bg "Checkbox whether to use next control point." [encoding convertfrom utf-8 "\320\237\320\276\321\201\321\202\320\260\320\262\320\265\321\202\320\265 \320\276\321\202\320\261\320\265\320\273\321\217\320\267\320\272\320\260 \320\267\320\260 \320\270\320\267\320\277\320\276\320\273\320\267\320\262\320\260\320\275\320\265 \320\275\320\260 \321\201\320\273\320\265\320\264\320\262\320\260\321\211\320\260\321\202\320\260 \321\203\320\277\321\200\320\260\320\262\320\273\321\217\320\262\320\260\321\211\320\260 \321\202\320\276\321\207\320\272\320\260."]
  ::msgcat::mcset cz "Checkbox whether to use next control point." [encoding convertfrom utf-8 "Za\305\241krtn\304\233te pokud chcete pro tvar k\305\231ivky pou\305\276\303\255t n\303\241sleduj\303\255c\303\255 \305\231\303\255d\303\255c\303\255 bod."]
  ::msgcat::mcset de "Checkbox whether to use next control point." [encoding convertfrom utf-8 "Auswahl, ob n\303\244chster Kontrollpunkt benutzt wird."]
  ::msgcat::mcset el "Checkbox whether to use next control point." [encoding convertfrom utf-8 "\316\225\317\200\316\271\316\273\316\277\316\263\316\256 \316\263\316\271\316\261 \317\207\317\201\316\256\317\203\316\267 \316\265\317\200\317\214\316\274\316\265\316\275\316\277\317\205 \317\203\316\267\316\274\316\265\316\257\316\277\317\205 \316\265\316\273\316\255\316\263\317\207\316\277\317\205"]
  ::msgcat::mcset en "Checkbox whether to use next control point." [encoding convertfrom utf-8 "Checkbox whether to use next control point."]
  ::msgcat::mcset es "Checkbox whether to use next control point." [encoding convertfrom utf-8 "Usar siguiente punto de control."]
  ::msgcat::mcset it "Checkbox whether to use next control point." [encoding convertfrom utf-8 "Checkbox per usare il prossimo punto di controllo."]
  ::msgcat::mcset ru "Checkbox whether to use next control point." [encoding convertfrom utf-8 "\320\237\320\276\321\201\321\202\320\260\320\262\321\214\321\202\320\265 \320\263\320\260\320\273\320\276\321\207\320\272\321\203 \320\264\320\273\321\217 \320\270\321\201\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\320\275\320\270\321\217 \321\201\320\273\320\265\320\264\321\203\321\216\321\211\320\265\320\271 \321\203\320\277\321\200\320\260\320\262\320\273\321\217\321\216\321\211\320\265\320\271 \321\202\320\276\321\207\320\272\320\270."]
  ::msgcat::mcset sk "Checkbox whether to use next control point." [encoding convertfrom utf-8 "Pou\305\276i nasleduj\303\272ci kontroln\303\275 bod."]
  ::msgcat::mcset sq "Checkbox whether to use next control point." [encoding convertfrom utf-8 "kutia-kontrollit a duhet te perdoret pika e kontrollit e ardhshme"]

  ::msgcat::mcset bg "orientation" [encoding convertfrom utf-8 "\320\276\321\200\320\270\320\265\320\275\321\202\320\260\321\206\320\270\321\217"]
  ::msgcat::mcset cz "orientation" [encoding convertfrom utf-8 "orientace"]
  ::msgcat::mcset de "orientation" [encoding convertfrom utf-8 "Ausrichtung"]
  ::msgcat::mcset el "orientation" [encoding convertfrom utf-8 "\317\200\317\201\316\277\317\203\316\261\316\275\316\261\317\204\316\277\316\273\316\271\317\203\316\274\317\214\317\202"]
  ::msgcat::mcset en "orientation" [encoding convertfrom utf-8 "orientation"]
  ::msgcat::mcset es "orientation" [encoding convertfrom utf-8 "orientaci\303\263n"]
  ::msgcat::mcset it "orientation" [encoding convertfrom utf-8 "orientazione"]
  ::msgcat::mcset ru "orientation" [encoding convertfrom utf-8 "\320\276\321\200\320\270\320\265\320\275\321\202\320\260\321\206\320\270\321\217"]
  ::msgcat::mcset sk "orientation" [encoding convertfrom utf-8 "orient\303\241cia"]
  ::msgcat::mcset sq "orientation" [encoding convertfrom utf-8 "orientimi"]

  ::msgcat::mcset bg "Set line point orientation." [encoding convertfrom utf-8 "\320\243\320\272\320\260\320\266\320\265\321\202\320\265 \320\276\321\200\320\270\320\265\320\275\321\202\320\260\321\206\320\270\321\217\321\202\320\260 \320\275\320\260 \321\202\320\276\321\207\320\272\320\260 \320\275\320\260 \320\273\320\270\320\275\320\270\321\217\321\202\320\260."]
  ::msgcat::mcset cz "Set line point orientation." [encoding convertfrom utf-8 "Nastav\303\255 orientaci bodu."]
  ::msgcat::mcset de "Set line point orientation." [encoding convertfrom utf-8 "Setze Ausrichtung des Linienpunkts."]
  ::msgcat::mcset el "Set line point orientation." [encoding convertfrom utf-8 "\316\237\317\201\316\271\317\203\316\274\317\214\317\202 \317\200\317\201\316\277\317\203\316\261\316\275\316\261\317\204\316\277\316\273\316\271\317\203\316\274\316\277\317\215 \317\203\316\267\316\274\316\265\316\257\316\277\317\205 \316\263\317\201\316\261\316\274\316\274\316\256\317\202"]
  ::msgcat::mcset en "Set line point orientation." [encoding convertfrom utf-8 "Set line point orientation."]
  ::msgcat::mcset es "Set line point orientation." [encoding convertfrom utf-8 "Ajustar direcci\303\263n en que apunta un punto de la l\303\255nea (p.ej una pendiente)."]
  ::msgcat::mcset it "Set line point orientation." [encoding convertfrom utf-8 "Imposta l'orientazione del punto della linea."]
  ::msgcat::mcset ru "Set line point orientation." [encoding convertfrom utf-8 "\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\270\321\202\320\265 \320\276\321\200\320\270\320\265\320\275\321\202\320\260\321\206\320\270\321\216 \321\202\320\276\321\207\320\272\320\270 \320\273\320\270\320\275\320\270\320\270."]
  ::msgcat::mcset sk "Set line point orientation." [encoding convertfrom utf-8 "Nastav\303\255 orient\303\241ciu symbolov v bode krivky."]
  ::msgcat::mcset sq "Set line point orientation." [encoding convertfrom utf-8 "vene orientimin e pikes se rrjeshtit"]

  ::msgcat::mcset bg "Enter line point orientation." [encoding convertfrom utf-8 "\320\222\321\212\320\262\320\265\320\264\320\265\321\202\320\265 \320\276\321\200\320\270\320\265\320\275\321\202\320\260\321\206\320\270\321\217\321\202\320\260 \320\275\320\260 \321\202\320\276\321\207\320\272\320\260 \320\275\320\260 \320\273\320\270\320\275\320\270\321\217\321\202\320\260."]
  ::msgcat::mcset cz "Enter line point orientation." [encoding convertfrom utf-8 "Zadejte orientaci bodu."]
  ::msgcat::mcset de "Enter line point orientation." [encoding convertfrom utf-8 "Ausrichtung des Linienpunkts eingeben."]
  ::msgcat::mcset el "Enter line point orientation." [encoding convertfrom utf-8 "\316\225\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \317\200\317\201\316\277\317\203\316\261\316\275\316\261\317\204\316\277\316\273\316\271\317\203\316\274\316\277\317\215 \317\203\316\267\316\274\316\265\316\257\316\277\317\205 \316\263\317\201\316\261\316\274\316\274\316\256\317\202"]
  ::msgcat::mcset en "Enter line point orientation." [encoding convertfrom utf-8 "Enter line point orientation."]
  ::msgcat::mcset es "Enter line point orientation." [encoding convertfrom utf-8 "Introducir direcci\303\263n se\303\261alada por el punto."]
  ::msgcat::mcset it "Enter line point orientation." [encoding convertfrom utf-8 "Scrivi l'orientazione del punto della linea."]
  ::msgcat::mcset ru "Enter line point orientation." [encoding convertfrom utf-8 "\320\222\320\262\320\265\320\264\320\270\321\202\320\265 \320\276\321\200\320\270\320\265\320\275\321\202\320\260\321\206\320\270\321\216 \321\202\320\276\321\207\320\272\320\270 \320\273\320\270\320\275\320\270\320\270."]
  ::msgcat::mcset sk "Enter line point orientation." [encoding convertfrom utf-8 "Zadaj orient\303\241ciu symbolov v bode krivky."]
  ::msgcat::mcset sq "Enter line point orientation." [encoding convertfrom utf-8 "fute orientimin e pikes se rrjeshtit"]

  ::msgcat::mcset bg "r-size" [encoding convertfrom utf-8 "r-\321\200\320\260\320\267\320\274\320\265\321\200"]
  ::msgcat::mcset cz "r-size" [encoding convertfrom utf-8 "p-rozsah"]
  ::msgcat::mcset de "r-size" [encoding convertfrom utf-8 "r-Gr\303\266\303\237e"]
  ::msgcat::mcset el "r-size" [encoding convertfrom utf-8 "\316\264\316\271\316\254\317\203\317\204\316\261\317\203\316\267 (\316\264)"]
  ::msgcat::mcset en "r-size" [encoding convertfrom utf-8 "r-size"]
  ::msgcat::mcset es "r-size" [encoding convertfrom utf-8 "anchura-dcha"]
  ::msgcat::mcset it "r-size" [encoding convertfrom utf-8 "dim. destra"]
  ::msgcat::mcset ru "r-size" [encoding convertfrom utf-8 "r-size"]
  ::msgcat::mcset sk "r-size" [encoding convertfrom utf-8 "rozmer-p"]
  ::msgcat::mcset sq "r-size" [encoding convertfrom utf-8 "r-madhesia"]

  ::msgcat::mcset bg "Set line size in right direction." [encoding convertfrom utf-8 "\320\243\320\272\320\260\320\266\320\265\321\202\320\265 \321\200\320\260\320\267\320\274\320\265\321\200\320\260 \320\275\320\260 \320\273\320\270\320\275\320\270\321\217\321\202\320\260 \320\262 \320\275\320\260\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265 \320\275\320\260\320\264\321\217\321\201\320\275\320\276."]
  ::msgcat::mcset cz "Set line size in right direction." [encoding convertfrom utf-8 "Nastav\303\255 rozsah k\305\231ivky v prav\303\251m sm\304\233ru."]
  ::msgcat::mcset de "Set line size in right direction." [encoding convertfrom utf-8 "Setze Liniengr\303\266\303\237e nach rechts."]
  ::msgcat::mcset el "Set line size in right direction." [encoding convertfrom utf-8 "\316\237\317\201\316\271\317\203\316\274\317\214\317\202 \316\264\316\271\316\254\317\203\317\204\316\261\317\203\316\267\317\202 \316\263\317\201\316\261\316\274\316\274\316\256\317\202 \317\200\317\201\316\277\317\202 \317\204\316\261 \316\264\316\265\316\276\316\271\316\254"]
  ::msgcat::mcset en "Set line size in right direction." [encoding convertfrom utf-8 "Set line size in right direction."]
  ::msgcat::mcset es "Set line size in right direction." [encoding convertfrom utf-8 "Ajustar anchura de l\303\255nea (lado derecho de la l\303\255nea)."]
  ::msgcat::mcset it "Set line size in right direction." [encoding convertfrom utf-8 "Imposta la dimensione della linea a destra."]
  ::msgcat::mcset ru "Set line size in right direction." [encoding convertfrom utf-8 "\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\270\321\202\320\265 \321\200\320\260\320\267\320\274\320\265\321\200 \320\273\320\270\320\275\320\270\320\270 \320\262 \320\277\321\200\320\260\320\262\320\276\320\274 \320\275\320\260\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\270."]
  ::msgcat::mcset sk "Set line size in right direction." [encoding convertfrom utf-8 "Nastav\303\255 ve\304\276kos\305\245 symbolov napravo od krivky."]
  ::msgcat::mcset sq "Set line size in right direction." [encoding convertfrom utf-8 "cakto madhesine e rrjeshtit ne drejtim te djathte"]

  ::msgcat::mcset bg "Enter line size in right direction." [encoding convertfrom utf-8 "\320\222\321\212\320\262\320\265\320\264\320\265\321\202\320\265 \321\200\320\260\320\267\320\274\320\265\321\200\320\260 \320\275\320\260 \320\273\320\270\320\275\320\270\321\217\321\202\320\260 \320\262 \320\275\320\260\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265 \320\275\320\260\320\264\321\217\321\201\320\275\320\276."]
  ::msgcat::mcset cz "Enter line size in right direction." [encoding convertfrom utf-8 "Zadejte rozsah k\305\231ivky v prav\303\251m sm\304\233ru."]
  ::msgcat::mcset de "Enter line size in right direction." [encoding convertfrom utf-8 "Liniengr\303\266\303\237e nach rechts eingeben."]
  ::msgcat::mcset el "Enter line size in right direction." [encoding convertfrom utf-8 "\316\225\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \316\264\316\271\316\254\317\203\317\204\316\261\317\203\316\267 \316\263\317\201\316\261\316\274\316\274\316\256\317\202 \317\200\317\201\316\277\317\202 \317\204\316\261 \316\264\316\265\316\276\316\271\316\254"]
  ::msgcat::mcset en "Enter line size in right direction." [encoding convertfrom utf-8 "Enter line size in right direction."]
  ::msgcat::mcset es "Enter line size in right direction." [encoding convertfrom utf-8 "Introducir anchura de l\303\255nea (lado derecho de la l\303\255nea)."]
  ::msgcat::mcset it "Enter line size in right direction." [encoding convertfrom utf-8 "Scrivi la dimensione della linea a destra."]
  ::msgcat::mcset ru "Enter line size in right direction." [encoding convertfrom utf-8 "\320\222\320\262\320\265\320\264\320\270\321\202\320\265 \321\200\320\260\320\267\320\274\320\265\321\200 \320\273\320\270\320\275\320\270\320\270 \320\262 \320\277\321\200\320\260\320\262\320\276\320\274 \320\275\320\260\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\270."]
  ::msgcat::mcset sk "Enter line size in right direction." [encoding convertfrom utf-8 "Zadaj ve\304\276kos\305\245 symbolov napravo od krivky."]
  ::msgcat::mcset sq "Enter line size in right direction." [encoding convertfrom utf-8 "fute madhesine e rjeshtit ne drejtim te djathte"]

  ::msgcat::mcset bg "l-size" [encoding convertfrom utf-8 "l-\321\200\320\260\320\267\320\274\320\265\321\200"]
  ::msgcat::mcset cz "l-size" [encoding convertfrom utf-8 "l-rozsah"]
  ::msgcat::mcset de "l-size" [encoding convertfrom utf-8 "l-Gr\303\266\303\237e"]
  ::msgcat::mcset el "l-size" [encoding convertfrom utf-8 "\316\264\316\271\316\254\317\203\317\204\316\261\317\203\316\267 (\316\261)"]
  ::msgcat::mcset en "l-size" [encoding convertfrom utf-8 "l-size"]
  ::msgcat::mcset es "l-size" [encoding convertfrom utf-8 "anchura-izda"]
  ::msgcat::mcset it "l-size" [encoding convertfrom utf-8 "dim. sinistra"]
  ::msgcat::mcset ru "l-size" [encoding convertfrom utf-8 "l-size"]
  ::msgcat::mcset sk "l-size" [encoding convertfrom utf-8 "rozmer-\304\276"]
  ::msgcat::mcset sq "l-size" [encoding convertfrom utf-8 "madhesia-l"]

  ::msgcat::mcset bg "Set line size in left direction." [encoding convertfrom utf-8 "\320\243\320\272\320\260\320\266\320\265\321\202\320\265 \321\200\320\260\320\267\320\274\320\265\321\200\320\260 \320\275\320\260 \320\273\320\270\320\275\320\270\321\217\321\202\320\260 \320\262 \320\275\320\260\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265 \320\275\320\260\320\273\321\217\320\262\320\276."]
  ::msgcat::mcset cz "Set line size in left direction." [encoding convertfrom utf-8 "Nastav\303\255 rozsah k\305\231ivky v lev\303\251m sm\304\233ru."]
  ::msgcat::mcset de "Set line size in left direction." [encoding convertfrom utf-8 "Setze Liniengr\303\266\303\237e nach links."]
  ::msgcat::mcset el "Set line size in left direction." [encoding convertfrom utf-8 "\316\237\317\201\316\271\317\203\316\274\317\214\317\202 \316\264\316\271\316\254\317\203\317\204\316\261\317\203\316\267\317\202 \316\263\317\201\316\261\316\274\316\274\316\256\317\202 \317\200\317\201\316\277\317\202 \317\204\316\261 \316\261\317\201\316\271\317\203\317\204\316\265\317\201\316\254"]
  ::msgcat::mcset en "Set line size in left direction." [encoding convertfrom utf-8 "Set line size in left direction."]
  ::msgcat::mcset es "Set line size in left direction." [encoding convertfrom utf-8 "Ajustar anchura de l\303\255nea (lado izquierdo de la l\303\255nea). El tipo slope necesita este valor."]
  ::msgcat::mcset it "Set line size in left direction." [encoding convertfrom utf-8 "Imposta la dimensione della linea a sinistra."]
  ::msgcat::mcset ru "Set line size in left direction." [encoding convertfrom utf-8 "\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\270\321\202\320\265 \321\200\320\260\320\267\320\274\320\265\321\200 \320\273\320\270\320\275\320\270\320\270 \320\262 \320\273\320\265\320\262\320\276\320\274 \320\275\320\260\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\270."]
  ::msgcat::mcset sk "Set line size in left direction." [encoding convertfrom utf-8 "Nastav\303\255 ve\304\276kos\305\245 symbolov na\304\276avo od krivky."]
  ::msgcat::mcset sq "Set line size in left direction." [encoding convertfrom utf-8 "cakto madhesine e rjeshtit ne drejtim te majte"]

  ::msgcat::mcset bg "Enter line size in left direction." [encoding convertfrom utf-8 "\320\222\321\212\320\262\320\265\320\264\320\265\321\202\320\265 \321\200\320\260\320\267\320\274\320\265\321\200\320\260 \320\275\320\260 \320\273\320\270\320\275\320\270\321\217\321\202\320\260 \320\262 \320\275\320\260\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265 \320\275\320\260\320\273\321\217\320\262\320\276."]
  ::msgcat::mcset cz "Enter line size in left direction." [encoding convertfrom utf-8 "Zadejte rozsah k\305\231ivky v lev\303\251m sm\304\233ru."]
  ::msgcat::mcset de "Enter line size in left direction." [encoding convertfrom utf-8 "Liniengr\303\266\303\237e nach links eingeben."]
  ::msgcat::mcset el "Enter line size in left direction." [encoding convertfrom utf-8 "\316\225\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \316\264\316\271\316\254\317\203\317\204\316\261\317\203\316\267 \316\263\317\201\316\261\316\274\316\274\316\256\317\202 \317\200\317\201\316\277\317\202 \317\204\316\261 \316\261\317\201\316\271\317\203\317\204\316\265\317\201\316\254"]
  ::msgcat::mcset en "Enter line size in left direction." [encoding convertfrom utf-8 "Enter line size in left direction."]
  ::msgcat::mcset es "Enter line size in left direction." [encoding convertfrom utf-8 "Introducir anchura de l\303\255nea (lado izquierdo de la l\303\255nea). El tipo slope necesita este valor."]
  ::msgcat::mcset it "Enter line size in left direction." [encoding convertfrom utf-8 "Scrivi la dimensione della linea a sinistra."]
  ::msgcat::mcset ru "Enter line size in left direction." [encoding convertfrom utf-8 "\320\222\320\262\320\265\320\264\320\270\321\202\320\265 \321\200\320\260\320\267\320\274\320\265\321\200 \320\273\320\270\320\275\320\270\320\270 \320\262 \320\273\320\265\320\262\320\276\320\274 \320\275\320\260\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\270."]
  ::msgcat::mcset sk "Enter line size in left direction." [encoding convertfrom utf-8 "Zadaj ve\304\276kos\305\245 symbolov na\304\276avo od krivky."]
  ::msgcat::mcset sq "Enter line size in left direction." [encoding convertfrom utf-8 "fute madhesine e rjeshtit ne drejtim te majte"]

  ::msgcat::mcset bg "Line point options editor." [encoding convertfrom utf-8 "\320\240\320\265\320\264\320\260\320\272\321\202\320\276\321\200 \320\275\320\260 \320\276\320\277\321\206\320\270\320\270\321\202\320\265 \320\275\320\260 \321\202\320\276\321\207\320\272\320\260 \320\275\320\260 \320\273\320\270\320\275\320\270\321\217\321\202\320\260."]
  ::msgcat::mcset cz "Line point options editor." [encoding convertfrom utf-8 "Volby bodu k\305\231ivky."]
  ::msgcat::mcset de "Line point options editor." [encoding convertfrom utf-8 "Linienpunktoptionen bearbeiten."]
  ::msgcat::mcset el "Line point options editor." [encoding convertfrom utf-8 "\316\225\317\200\316\265\316\276\316\265\317\201\316\263\316\261\317\203\317\204\316\256\317\202 \316\265\317\200\316\271\316\273\316\277\316\263\317\216\316\275 \317\203\316\267\316\274\316\265\316\257\317\211\316\275 \316\263\317\201\316\261\316\274\316\274\317\216\316\275"]
  ::msgcat::mcset en "Line point options editor." [encoding convertfrom utf-8 "Line point options editor."]
  ::msgcat::mcset es "Line point options editor." [encoding convertfrom utf-8 "Editor de puntos pertenecientes a la l\303\255nea seleccionada. Consultar thbook.pdf"]
  ::msgcat::mcset it "Line point options editor." [encoding convertfrom utf-8 "Editor delle opzioni del punto della linea."]
  ::msgcat::mcset ru "Line point options editor." [encoding convertfrom utf-8 "\320\240\320\265\320\264\320\260\320\272\321\202\320\276\321\200 \320\276\320\277\321\206\320\270\320\271 \321\202\320\276\321\207\320\272\320\270 \320\273\320\270\320\275\320\270\320\270."]
  ::msgcat::mcset sk "Line point options editor." [encoding convertfrom utf-8 "Editor \304\217al\305\241\303\255ch mo\305\276nost\303\255 bodu krivky."]
  ::msgcat::mcset sq "Line point options editor." [encoding convertfrom utf-8 "opcioni I editimit te pikes se rjeshtit"]

  ::msgcat::mcset bg "Click this button to apply line point changes." [encoding convertfrom utf-8 "\320\235\320\260\321\202\320\270\321\201\320\274\320\265\321\202\320\265 \321\202\320\276\320\267\320\270 \320\261\321\203\321\202\320\276\320\275 \320\267\320\260 \320\277\321\200\320\270\320\273\320\260\320\263\320\260\320\275\320\265 \320\275\320\260 \320\277\321\200\320\276\320\274\320\265\320\275\320\270\321\202\320\265 \320\262/\321\203 \321\202\320\276\321\207\320\272\320\260 \320\275\320\260 \320\273\320\270\320\275\320\270\321\217\321\202\320\260."]
  ::msgcat::mcset cz "Click this button to apply line point changes." [encoding convertfrom utf-8 "Aktualizovat bod k\305\231ivky."]
  ::msgcat::mcset de "Click this button to apply line point changes." [encoding convertfrom utf-8 "Klicke diesen Knopf, um \303\204nderungen am Linienpunkt anzuwenden."]
  ::msgcat::mcset el "Click this button to apply line point changes." [encoding convertfrom utf-8 "\316\240\316\261\317\204\316\256\317\203\317\204\316\265 \316\265\316\264\317\216 \316\263\316\271\316\261 \316\275\316\261 \316\263\316\257\316\275\316\265\316\271 \316\265\317\206\316\261\317\201\316\274\316\277\316\263\316\256 \317\204\317\211\316\275 \316\261\316\273\316\273\316\261\316\263\317\216\316\275 \317\203\317\204\316\277 \317\203\316\267\316\274\316\265\316\257\316\277 \317\204\316\267\317\202 \316\263\317\201\316\261\316\274\316\274\316\256\317\202."]
  ::msgcat::mcset en "Click this button to apply line point changes." [encoding convertfrom utf-8 "Click this button to apply line point changes."]
  ::msgcat::mcset es "Click this button to apply line point changes." [encoding convertfrom utf-8 "Clicar tras modificar las propiedades de los puntos de una l\303\255nea."]
  ::msgcat::mcset it "Click this button to apply line point changes." [encoding convertfrom utf-8 "Premi questo bottone per fare modifiche ai punti della linea."]
  ::msgcat::mcset ru "Click this button to apply line point changes." [encoding convertfrom utf-8 "\320\235\320\260\320\266\320\274\320\270\321\202\320\265 \321\215\321\202\321\203 \320\272\320\275\320\276\320\277\320\272\321\203 \320\264\320\273\321\217 \320\277\321\200\320\270\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\320\271 \321\202\320\276\321\207\320\272\320\270 \320\273\320\270\320\275\320\270\320\270."]
  ::msgcat::mcset sk "Click this button to apply line point changes." [encoding convertfrom utf-8 "Aktializ\303\241cia bodu krivky."]
  ::msgcat::mcset sq "Click this button to apply line point changes." [encoding convertfrom utf-8 "kliko kete buton per te bere ndrimet e pikes se rjeshtit"]

  ::msgcat::mcset bg "Editor for line point options." [encoding convertfrom utf-8 "\320\240\320\265\320\264\320\260\320\272\321\202\320\276\321\200 \320\267\320\260 \320\276\320\277\321\206\320\270\320\270\321\202\320\265 \320\275\320\260 \321\202\320\276\321\207\320\272\320\260 \320\275\320\260 \320\273\320\270\320\275\320\270\321\217\321\202\320\260."]
  ::msgcat::mcset cz "Editor for line point options." [encoding convertfrom utf-8 "Editor voleb bodu k\305\231ivky."]
  ::msgcat::mcset de "Editor for line point options." [encoding convertfrom utf-8 "Edditor f\303\274r Linienpunktoptionen."]
  ::msgcat::mcset el "Editor for line point options." [encoding convertfrom utf-8 "\316\225\316\264\317\216 \316\274\317\200\316\277\317\201\316\265\316\257\317\204\316\265 \316\275\316\261 \316\265\316\271\317\203\316\254\316\263\316\265\317\204\316\265 \316\265\317\200\316\271\316\273\316\277\316\263\316\255\317\202 \316\263\316\271\316\261 \317\204\316\261 \317\203\316\267\316\274\316\265\316\257\316\261 \317\204\317\211\316\275 \316\263\317\201\316\261\316\274\316\274\317\216\316\275."]
  ::msgcat::mcset en "Editor for line point options." [encoding convertfrom utf-8 "Here you can enter options that will apply to line points."]
  ::msgcat::mcset es "Editor for line point options." [encoding convertfrom utf-8 "Aqu\303\255 se pueden meter opciones que afectar\303\241n a los puntos de esta l\303\255nea."]
  ::msgcat::mcset it "Editor for line point options." [encoding convertfrom utf-8 "Editor delle opzioni del punto della linea."]
  ::msgcat::mcset ru "Editor for line point options." [encoding convertfrom utf-8 "\320\240\320\265\320\264\320\260\320\272\321\202\320\276\321\200 \320\276\320\277\321\206\320\270\320\271 \321\202\320\276\321\207\320\272\320\270 \320\273\320\270\320\275\320\270\320\270."]
  ::msgcat::mcset sk "Editor for line point options." [encoding convertfrom utf-8 "Editor \304\217al\305\241\303\255ch mo\305\276nost\303\255 bodu krivky."]
  ::msgcat::mcset sq "Editor for line point options." [encoding convertfrom utf-8 "ketu mund te futni opcionet te cilat do te vlejne per pikat e rrjeshtit"]

  ::msgcat::mcset bg "loading area module ..." [encoding convertfrom utf-8 "\320\267\320\260\321\200\320\265\320\266\320\264\320\260\320\275\320\265 \320\275\320\260 \320\274\320\276\320\264\321\203\320\273\320\260 \320\267\320\260 \320\276\320\261\320\273\320\260\321\201\321\202\320\270 ..."]
  ::msgcat::mcset cz "loading area module ..." [encoding convertfrom utf-8 "nahr\303\241v\303\241m modul pro oblasti ..."]
  ::msgcat::mcset de "loading area module ..." [encoding convertfrom utf-8 "Lade Fl\303\244chenmodul ..."]
  ::msgcat::mcset el "loading area module ..." [encoding convertfrom utf-8 "\317\206\316\277\317\201\317\204\316\257\316\266\316\265\317\204\316\261\316\271 \316\267 \316\265\316\275\317\214\317\204\316\267\317\204\316\261 \316\265\317\200\316\271\317\206\316\261\316\275\316\265\316\271\317\216\316\275..."]
  ::msgcat::mcset en "loading area module ..." [encoding convertfrom utf-8 "oading area module ..."]
  ::msgcat::mcset es "loading area module ..." [encoding convertfrom utf-8 "\303\241reas..."]
  ::msgcat::mcset it "loading area module ..." [encoding convertfrom utf-8 "modulo aree ..."]
  ::msgcat::mcset ru "loading area module ..." [encoding convertfrom utf-8 "\320\267\320\260\320\263\321\200\321\203\320\267\320\272\320\260 \320\274\320\276\320\264\321\203\320\273\321\217 \320\276\320\261\320\273\320\260\321\201\321\202\320\265\320\271 ..."]
  ::msgcat::mcset sk "loading area module ..." [encoding convertfrom utf-8 "nahr\303\241vam modul pre plochy ..."]
  ::msgcat::mcset sq "loading area module ..." [encoding convertfrom utf-8 "duke lexuar modulin e fushes\342\200\246"]

  ::msgcat::mcset bg "Actual symbol theme." [encoding convertfrom utf-8 "\320\220\320\272\321\202\321\203\320\260\320\273\320\265\320\275 \320\275\320\260\320\261\320\270\321\200 \320\275\320\260 \321\201\320\270\320\274\320\262\320\276\320\273\320\270"]
  ::msgcat::mcset cz "Actual symbol theme." [encoding convertfrom utf-8 "Aktu\303\241ln\303\255 t\303\251ma symbol\305\257."]
  ::msgcat::mcset de "Actual symbol theme." [encoding convertfrom utf-8 "Aktueller Symbolsatz."]
  ::msgcat::mcset el "Actual symbol theme." [encoding convertfrom utf-8 "\316\243\317\215\316\274\316\262\316\277\316\273\316\277"]
  ::msgcat::mcset it "Actual symbol theme." [encoding convertfrom utf-8 "Simboli."]
  ::msgcat::mcset ru "Actual symbol theme." [encoding convertfrom utf-8 "\320\244\320\270\320\273\321\214\321\202\321\200 \320\263\321\200\321\203\320\277\320\277\321\213 \321\201\320\270\320\274\320\262\320\276\320\273\320\276\320\262."]
  ::msgcat::mcset sk "Actual symbol theme." [encoding convertfrom utf-8 "Aktu\303\241lna t\303\251ma symbolov."]
  ::msgcat::mcset sq "Actual symbol theme." [encoding convertfrom utf-8 "tema aktuale e simbolit."]

  ::msgcat::mcset bg "type" [encoding convertfrom utf-8 "\321\202\320\270\320\277"]
  ::msgcat::mcset cz "type" [encoding convertfrom utf-8 "typ"]
  ::msgcat::mcset de "type" [encoding convertfrom utf-8 "Typ"]
  ::msgcat::mcset el "type" [encoding convertfrom utf-8 "\316\265\316\257\316\264\316\277\317\202"]
  ::msgcat::mcset en "type" [encoding convertfrom utf-8 "type"]
  ::msgcat::mcset es "type" [encoding convertfrom utf-8 "tipo"]
  ::msgcat::mcset it "type" [encoding convertfrom utf-8 "tipo"]
  ::msgcat::mcset ru "type" [encoding convertfrom utf-8 "\321\202\320\270\320\277"]
  ::msgcat::mcset sk "type" [encoding convertfrom utf-8 "typ"]
  ::msgcat::mcset sq "type" [encoding convertfrom utf-8 "lloji"]

  ::msgcat::mcset bg "Area type." [encoding convertfrom utf-8 "\320\242\320\270\320\277 \320\275\320\260 \320\276\320\261\320\273\320\260\321\201\321\202\321\202\320\260"]
  ::msgcat::mcset cz "Area type." [encoding convertfrom utf-8 "Typ oblasti."]
  ::msgcat::mcset de "Area type." [encoding convertfrom utf-8 "Fl\303\244chentyp."]
  ::msgcat::mcset el "Area type." [encoding convertfrom utf-8 "\316\225\316\257\316\264\316\277\317\202 \316\265\317\200\316\271\317\206\316\254\316\275\316\265\316\271\316\261\317\202"]
  ::msgcat::mcset en "Area type." [encoding convertfrom utf-8 "Area type (clic on triangle to see menu)."]
  ::msgcat::mcset es "Area type." [encoding convertfrom utf-8 "Tipo de \303\241rea. Clic en tri\303\241ngulo para ver el men\303\272."]
  ::msgcat::mcset it "Area type." [encoding convertfrom utf-8 "Tipo dell'area"]
  ::msgcat::mcset ru "Area type." [encoding convertfrom utf-8 "\320\242\320\270\320\277 \320\276\320\261\320\273\320\260\321\201\321\202\320\270."]
  ::msgcat::mcset sk "Area type." [encoding convertfrom utf-8 "Typ plochy."]
  ::msgcat::mcset sq "Area type." [encoding convertfrom utf-8 "lloji I fushes."]

  ::msgcat::mcset bg "options" [encoding convertfrom utf-8 "\320\276\320\277\321\206\320\270\320\270"]
  ::msgcat::mcset cz "options" [encoding convertfrom utf-8 "volby"]
  ::msgcat::mcset de "options" [encoding convertfrom utf-8 "Optionen"]
  ::msgcat::mcset el "options" [encoding convertfrom utf-8 "\316\265\317\200\316\271\316\273\316\277\316\263\316\255\317\202"]
  ::msgcat::mcset en "options" [encoding convertfrom utf-8 "options"]
  ::msgcat::mcset es "options" [encoding convertfrom utf-8 "opciones"]
  ::msgcat::mcset it "options" [encoding convertfrom utf-8 "opzioni"]
  ::msgcat::mcset ru "options" [encoding convertfrom utf-8 "\320\276\320\277\321\206\320\270\320\270"]
  ::msgcat::mcset sk "options" [encoding convertfrom utf-8 "mo\305\276nosti"]
  ::msgcat::mcset sq "options" [encoding convertfrom utf-8 "opcionet"]

  ::msgcat::mcset bg "Other area options." [encoding convertfrom utf-8 "\320\224\321\200\321\203\320\263\320\270 \320\276\320\277\321\206\320\270\320\270 \320\275\320\260 \320\276\320\261\320\273\320\260\321\201\321\202\321\202\320\260."]
  ::msgcat::mcset cz "Other area options." [encoding convertfrom utf-8 "Dal\305\241\303\255 volby pro oblast."]
  ::msgcat::mcset de "Other area options." [encoding convertfrom utf-8 "Andere Fl\303\244chenoptionen."]
  ::msgcat::mcset el "Other area options." [encoding convertfrom utf-8 "\316\206\316\273\316\273\316\265\317\202 \316\265\317\200\316\271\316\273\316\277\316\263\316\255\317\202 \316\265\317\200\316\271\317\206\316\261\316\275\316\265\316\271\317\216\316\275. \316\222\316\273. thbook.pdf"]
  ::msgcat::mcset en "Other area options." [encoding convertfrom utf-8 "Other area options. See thbook.pdf"]
  ::msgcat::mcset es "Other area options." [encoding convertfrom utf-8 "Otras opciones de \303\241rea. Consultar thbook.pdf"]
  ::msgcat::mcset it "Other area options." [encoding convertfrom utf-8 "Altre opzioni dell'area."]
  ::msgcat::mcset ru "Other area options." [encoding convertfrom utf-8 "\320\224\321\200\321\203\320\263\320\270\320\265 \320\276\320\277\321\206\320\270\320\270 \320\276\320\261\320\273\320\260\321\201\321\202\320\270."]
  ::msgcat::mcset sk "Other area options." [encoding convertfrom utf-8 "\304\216al\305\241ie mo\305\276nosti plochy."]
  ::msgcat::mcset sq "Other area options." [encoding convertfrom utf-8 "opcionet tjera te fushes."]

  ::msgcat::mcset bg "Select lines" [encoding convertfrom utf-8 "\320\230\320\267\320\261\320\276\321\200 \320\275\320\260 \320\273\320\270\320\275\320\270\320\270"]
  ::msgcat::mcset cz "Select lines" [encoding convertfrom utf-8 "Vyber k\305\231ivky"]
  ::msgcat::mcset de "Select lines" [encoding convertfrom utf-8 "Linien ausw\303\244hlen"]
  ::msgcat::mcset el "Select lines" [encoding convertfrom utf-8 "\316\225\317\200\316\271\316\273\316\277\316\263\316\256 \316\263\317\201\316\261\316\274\316\274\317\216\316\275"]
  ::msgcat::mcset en "Select lines" [encoding convertfrom utf-8 "Select lines"]
  ::msgcat::mcset es "Select lines" [encoding convertfrom utf-8 "Seleccionar"]
  ::msgcat::mcset it "Select lines" [encoding convertfrom utf-8 "Selezione linee"]
  ::msgcat::mcset ru "Select lines" [encoding convertfrom utf-8 "\320\222\321\213\320\261\320\276\321\200 \320\273\320\270\320\275\320\270\320\271."]
  ::msgcat::mcset sk "Select lines" [encoding convertfrom utf-8 "Vyber krivky"]
  ::msgcat::mcset sq "Select lines" [encoding convertfrom utf-8 "selekto rjeshtat"]

  ::msgcat::mcset bg "Switch to insert line into area mode." [encoding convertfrom utf-8 "\320\237\321\200\320\265\320\262\320\272\320\273\321\216\321\207\320\270 \320\262 \321\200\320\265\320\266\320\270\320\274 \320\277\320\276\321\201\321\202\320\260\320\262\321\217\320\275\320\265 \320\275\320\260 \320\273\320\270\320\275\320\270\320\270-\320\263\321\200\320\260\320\275\320\270\321\206\320\270 \320\262 \320\276\320\261\320\273\320\260\321\201\321\202\321\202\320\260."]
  ::msgcat::mcset cz "Switch to insert line into area mode." [encoding convertfrom utf-8 "V\303\275b\304\233r ohrani\304\215uj\303\255c\303\255ch k\305\231ivek oblasti."]
  ::msgcat::mcset el "Switch to insert line into area mode." [encoding convertfrom utf-8 "\316\221\317\206\316\277\317\215 \317\200\316\261\317\204\316\256\317\203\317\204\316\265 \316\265\316\264\317\216, \316\265\317\200\316\271\316\273\316\255\316\263\316\265\317\204\316\265 \316\274\316\265 \317\204\316\277 \317\200\316\277\316\275\317\204\316\257\316\272\316\271 \317\204\316\271\317\202 \316\263\317\201\316\261\316\274\316\274\316\255\317\202 \316\277\317\201\316\257\317\211\316\275 \317\204\316\267\317\202 \316\265\317\200\316\271\317\206\316\254\316\275\316\265\316\271\316\261\317\202 (\317\200\317\201\316\255\317\200\316\265\316\271 \316\275\316\261 \317\204\316\255\316\274\316\275\316\277\316\275\317\204\316\261\316\271)"]
  ::msgcat::mcset en "Switch to insert line into area mode." [encoding convertfrom utf-8 "After clicking here, select by mouse this area border lines (they must intersect)."]
  ::msgcat::mcset es "Switch to insert line into area mode." [encoding convertfrom utf-8 "Tras clicar aqu\303\255, con el rat\303\263n puedes seleccionar l\303\255neas que limiten un \303\241rea (deben cortarse entre s\303\255)."]
  ::msgcat::mcset it "Switch to insert line into area mode." [encoding convertfrom utf-8 "Cambia per inserire linee nell'area."]
  ::msgcat::mcset ru "Switch to insert line into area mode." [encoding convertfrom utf-8 "\320\237\320\265\321\200\320\265\320\272\320\273\321\216\321\207\320\270\321\202\321\201\321\217 \320\262 \321\200\320\265\320\266\320\270\320\274 \320\262\321\201\321\202\320\260\320\262\320\272\320\270 \320\273\320\270\320\275\320\270\320\271-\320\263\321\200\320\260\320\275\320\270\321\206 \320\262 \320\276\320\261\320\273\320\260\321\201\321\202\321\214."]
  ::msgcat::mcset sk "Switch to insert line into area mode." [encoding convertfrom utf-8 "Po stla\304\215en\303\255 m\303\264\305\276ete za\304\215a\305\245 vklada\305\245 krivky ohrani\304\215uj\303\272ce plochu."]
  ::msgcat::mcset sq "Switch to insert line into area mode." [encoding convertfrom utf-8 "pasi te klikoni ketu, selekto me mi rjeshtat e kufirit te fushes (ato duhet te nderlidhen)"]

  ::msgcat::mcset bg "Delete ID from area." [encoding convertfrom utf-8 "\320\230\320\267\321\202\321\200\320\270\320\271 \320\273\320\270\320\275\320\270\321\217 \320\277\320\276 ID \320\276\321\202 \320\276\320\261\320\273\320\260\321\201\321\202\321\202\320\260."]
  ::msgcat::mcset cz "Delete ID from area." [encoding convertfrom utf-8 "Odstran\304\233n\303\255 objektu z oblasti."]
  ::msgcat::mcset de "Delete ID from area." [encoding convertfrom utf-8 "L\303\266sche ID aus Fl\303\244che."]
  ::msgcat::mcset el "Delete ID from area." [encoding convertfrom utf-8 "\316\224\316\271\316\261\316\263\317\201\316\261\317\206\316\256 ID \316\261\317\200\317\214 \316\265\317\200\316\271\317\206\316\254\316\275\316\265\316\271\316\261"]
  ::msgcat::mcset en "Delete ID from area." [encoding convertfrom utf-8 "Delete selected line from list (will not be part of area borders)"]
  ::msgcat::mcset es "Delete ID from area." [encoding convertfrom utf-8 "Borrar la l\303\255nea seleccionada de la lista (dejar\303\241 de limitar este \303\241rea)."]
  ::msgcat::mcset it "Delete ID from area." [encoding convertfrom utf-8 "Rimuovi identificativo dall'area."]
  ::msgcat::mcset ru "Delete ID from area." [encoding convertfrom utf-8 "\320\243\320\264\320\260\320\273\320\270\321\202\321\214 \320\273\320\270\320\275\320\270\321\216 \320\277\320\276 \320\230\320\224 \320\270\320\267 \320\276\320\261\320\273\320\260\321\201\321\202\320\270."]
  ::msgcat::mcset sk "Delete ID from area." [encoding convertfrom utf-8 "Odstr\303\241ni\305\245 krivku z dan\303\275m ID z plochy."]
  ::msgcat::mcset sq "Delete ID from area." [encoding convertfrom utf-8 "fshije ID prej fushes"]

  ::msgcat::mcset bg "Insert ID" [encoding convertfrom utf-8 "\320\222\320\274\321\212\320\272\320\275\320\270 \320\277\320\276 ID"]
  ::msgcat::mcset cz "Insert ID" [encoding convertfrom utf-8 "Vlo\305\276 ID"]
  ::msgcat::mcset de "Insert ID" [encoding convertfrom utf-8 "ID einf\303\274gen"]
  ::msgcat::mcset el "Insert ID" [encoding convertfrom utf-8 "\316\225\316\271\317\203\316\261\316\263\317\211\316\263\316\256 ID"]
  ::msgcat::mcset en "Insert ID" [encoding convertfrom utf-8 "Insert ID"]
  ::msgcat::mcset es "Insert ID" [encoding convertfrom utf-8 "Insertar ID"]
  ::msgcat::mcset it "Insert ID" [encoding convertfrom utf-8 "Identificativo"]
  ::msgcat::mcset ru "Insert ID" [encoding convertfrom utf-8 "\320\222\321\201\321\202\320\260\320\262\320\270\321\202\321\214 \320\277\320\276 \320\230\320\224"]
  ::msgcat::mcset sk "Insert ID" [encoding convertfrom utf-8 "Vlo\305\276 ID"]
  ::msgcat::mcset sq "Insert ID" [encoding convertfrom utf-8 "fute ID-ne"]

  ::msgcat::mcset bg "Insert given id." [encoding convertfrom utf-8 "\320\222\320\274\321\212\320\272\320\275\320\270 \320\273\320\270\320\275\320\270\321\217-\320\263\321\200\320\260\320\275\320\270\321\206\320\260 \320\277\320\276 \320\267\320\260\320\264\320\260\320\264\320\265\320\275\320\276 ID."]
  ::msgcat::mcset cz "Insert given id." [encoding convertfrom utf-8 "Vlo\305\276\303\255 objekt s dan\303\275m ID."]
  ::msgcat::mcset de "Insert given id." [encoding convertfrom utf-8 "Angegebene ID einf\303\274gen."]
  ::msgcat::mcset el "Insert given id." [encoding convertfrom utf-8 "\316\225\316\271\317\203\316\261\316\263\317\211\316\263\316\256 ID \316\254\316\273\316\273\316\277 \316\261\317\200\317\214 \317\204\316\277 \317\200\317\201\316\277\316\272\316\261\316\270\316\277\317\201\316\271\317\203\316\274\316\255\316\275\316\277 \317\204\316\277\317\205 Xtherion"]
  ::msgcat::mcset en "Insert given id." [encoding convertfrom utf-8 "Insert given id instead of Xtherion default."]
  ::msgcat::mcset es "Insert given id." [encoding convertfrom utf-8 "Insertar nombre (ID) indicado, no el nombre que therion crea autom\303\241ticamente"]
  ::msgcat::mcset it "Insert given id." [encoding convertfrom utf-8 "Inserisci l'identificativo specificato"]
  ::msgcat::mcset ru "Insert given id." [encoding convertfrom utf-8 "\320\222\321\201\321\202\320\260\320\262\320\270\321\202\321\214 \320\273\320\270\320\275\320\270\321\216-\320\263\321\200\320\260\320\275\320\270\321\206\321\203 \320\277\320\276 \320\267\320\260\320\264\320\260\320\275\320\275\320\276\320\274\321\203 \320\230\320\224."]
  ::msgcat::mcset sk "Insert given id." [encoding convertfrom utf-8 "Vlo\305\276i\305\245 ID krivky do zoznamu kriviek ohrani\304\215uj\303\272cich plochu."]
  ::msgcat::mcset sq "Insert given id." [encoding convertfrom utf-8 "fute ID-n e dhene ne vend te X-therion"]

  ::msgcat::mcset bg "ID to insert." [encoding convertfrom utf-8 "ID \320\267\320\260 \320\262\320\274\321\212\320\272\320\262\320\260\320\275\320\265"]
  ::msgcat::mcset cz "ID to insert." [encoding convertfrom utf-8 "ID objektu ke vlo\305\276en\303\255."]
  ::msgcat::mcset de "ID to insert." [encoding convertfrom utf-8 "einzuf\303\274gende ID."]
  ::msgcat::mcset el "ID to insert." [encoding convertfrom utf-8 "\316\225\316\271\317\203\316\261\316\263\317\211\316\263\316\256 ID."]
  ::msgcat::mcset en "ID to insert." [encoding convertfrom utf-8 "ID to insert."]
  ::msgcat::mcset es "ID to insert." [encoding convertfrom utf-8 "Escribir el nombre (ID) a insertar."]
  ::msgcat::mcset it "ID to insert." [encoding convertfrom utf-8 "Identificativo da inserire."]
  ::msgcat::mcset ru "ID to insert." [encoding convertfrom utf-8 "\320\230\320\224 \320\273\320\270\320\275\320\270\320\270 \320\264\320\273\321\217 \320\262\321\201\321\202\320\260\320\262\320\272\320\270"]
  ::msgcat::mcset sk "ID to insert." [encoding convertfrom utf-8 "ID na vlo\305\276enie."]
  ::msgcat::mcset sq "ID to insert." [encoding convertfrom utf-8 "ID-ja per tu futur."]

  ::msgcat::mcset bg "Update" [encoding convertfrom utf-8 "\320\236\320\261\320\275\320\276\320\262\320\270"]
  ::msgcat::mcset cz "Update" [encoding convertfrom utf-8 "Aktualizovat"]
  ::msgcat::mcset de "Update" [encoding convertfrom utf-8 "Aktualisieren"]
  ::msgcat::mcset el "Update" [encoding convertfrom utf-8 "\316\225\316\274\316\267\316\274\316\255\317\201\317\211\317\203\316\267"]
  ::msgcat::mcset en "Update" [encoding convertfrom utf-8 "Update"]
  ::msgcat::mcset es "Update" [encoding convertfrom utf-8 "Actualizar"]
  ::msgcat::mcset it "Update" [encoding convertfrom utf-8 "Aggiorna"]
  ::msgcat::mcset ru "Update" [encoding convertfrom utf-8 "\320\236\320\261\320\275\320\276\320\262\320\270\321\202\321\214"]
  ::msgcat::mcset sk "Update" [encoding convertfrom utf-8 "Aktualizova\305\245"]
  ::msgcat::mcset sq "Update" [encoding convertfrom utf-8 "aktualizo"]

  ::msgcat::mcset bg "Click this button to apply changes you made to area." [encoding convertfrom utf-8 "\320\235\320\260\321\202\320\270\321\201\320\275\320\265\321\202\320\265 \321\202\320\276\320\267\320\270 \320\261\321\203\321\202\320\276\320\275 \320\267\320\260 \320\264\320\260 \320\277\321\200\320\270\320\273\320\276\320\266\320\270\321\202\320\265 \320\277\321\200\320\276\320\274\320\265\320\275\320\270\321\202\320\265, \320\275\320\260\320\277\321\200\320\260\320\262\320\265\320\275\320\270 \320\262 \320\276\320\261\320\273\320\260\321\201\321\202\321\202\320\260."]
  ::msgcat::mcset cz "Click this button to apply changes you made to area." [encoding convertfrom utf-8 "Aktualizace oblasti."]
  ::msgcat::mcset de "Click this button to apply changes you made to area." [encoding convertfrom utf-8 "Klicke diesen Knopf, um \303\204nderungen an einer Fl\303\244che anzuwenden."]
  ::msgcat::mcset el "Click this button to apply changes you made to area." [encoding convertfrom utf-8 "\316\232\316\254\316\275\317\204\316\265 \316\272\316\273\316\271\316\272 \316\275\316\261 \316\263\316\257\316\275\316\265\316\271 \316\265\317\206\316\261\317\201\316\274\316\277\316\263\316\256 \317\204\317\211\316\275 \316\261\316\273\316\273\316\261\316\263\317\216\316\275 \317\200\316\277\317\205 \316\272\316\254\316\275\316\261\317\204\316\265 \317\203\317\204\316\267\316\275 \316\265\317\200\316\271\317\206\316\254\316\275\316\265\316\271\316\261."]
  ::msgcat::mcset en "Click this button to apply changes you made to area." [encoding convertfrom utf-8 "Click this button to apply changes you made to area."]
  ::msgcat::mcset es "Click this button to apply changes you made to area." [encoding convertfrom utf-8 "Clicar aqu\303\255 despu\303\251s de modificar las propiedades de un \303\241rea."]
  ::msgcat::mcset it "Click this button to apply changes you made to area." [encoding convertfrom utf-8 "Premi questo bottone per fare modifiche all'area."]
  ::msgcat::mcset ru "Click this button to apply changes you made to area." [encoding convertfrom utf-8 "\320\235\320\260\320\266\320\274\320\270\321\202\320\265 \321\215\321\202\321\203 \320\272\320\275\320\276\320\277\320\272\321\203 \320\264\320\273\321\217 \320\277\321\200\320\270\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\320\271 \321\201\320\264\320\265\320\273\320\260\320\275\320\275\321\213\321\205 \320\264\320\273\321\217 \320\276\320\261\320\273\320\260\321\201\321\202\320\270."]
  ::msgcat::mcset sk "Click this button to apply changes you made to area." [encoding convertfrom utf-8 "Aktualizova\305\245 plochu."]
  ::msgcat::mcset sq "Click this button to apply changes you made to area." [encoding convertfrom utf-8 "kliko kete buton te aktualizosh ndrimet te cilat I ke bere ne fushe"]

  ::msgcat::mcset bg "Show" [encoding convertfrom utf-8 "\320\237\320\276\320\272\320\260\320\266\320\270"]
  ::msgcat::mcset cz "Show" [encoding convertfrom utf-8 "Zobrazit"]
  ::msgcat::mcset de "Show" [encoding convertfrom utf-8 "Zeige"]
  ::msgcat::mcset el "Show" [encoding convertfrom utf-8 "\316\225\316\274\317\206\316\254\316\275\316\271\317\203\316\267"]
  ::msgcat::mcset en "Show" [encoding convertfrom utf-8 "Show"]
  ::msgcat::mcset es "Show" [encoding convertfrom utf-8 "Mostrar"]
  ::msgcat::mcset it "Show" [encoding convertfrom utf-8 "Mostra"]
  ::msgcat::mcset ru "Show" [encoding convertfrom utf-8 "\320\237\320\276\320\272\320\260\320\267\320\260\321\202\321\214"]
  ::msgcat::mcset sk "Show" [encoding convertfrom utf-8 "Zobrazi\305\245"]
  ::msgcat::mcset sq "Show" [encoding convertfrom utf-8 "trego"]

  ::msgcat::mcset bg "Show area border lines." [encoding convertfrom utf-8 "\320\237\320\276\320\272\320\260\320\266\320\270 \320\263\321\200\320\260\320\275\320\270\321\206\320\270\321\202\320\265 \320\275\320\260 \320\276\320\261\320\273\320\260\321\201\321\202\321\202\320\260."]
  ::msgcat::mcset cz "Show area border lines." [encoding convertfrom utf-8 "Zobraz\303\255 hranice oblasti."]
  ::msgcat::mcset de "Show area border lines." [encoding convertfrom utf-8 "Zeige Fl\303\244chenbegrenzungen."]
  ::msgcat::mcset el "Show area border lines." [encoding convertfrom utf-8 "\316\225\316\274\317\206\316\254\316\275\316\271\317\203\316\267 \316\263\317\201\316\261\316\274\316\274\317\216\316\275 \316\277\317\201\316\257\317\211\316\275 \316\265\317\200\316\271\317\206\316\254\316\275\316\265\316\271\316\261\317\202"]
  ::msgcat::mcset en "Show area border lines." [encoding convertfrom utf-8 "Show area border lines."]
  ::msgcat::mcset es "Show area border lines." [encoding convertfrom utf-8 "Mostrar l\303\255neas l\303\255mite de \303\241rea."]
  ::msgcat::mcset it "Show area border lines." [encoding convertfrom utf-8 "Mostra le linee del bordo dell'area."]
  ::msgcat::mcset ru "Show area border lines." [encoding convertfrom utf-8 "\320\237\320\276\320\272\320\260\320\267\320\260\321\202\321\214 \320\273\320\270\320\275\320\270\320\270-\320\263\321\200\320\260\320\275\320\270\321\206\321\213 \320\264\320\273\321\217 \320\276\320\261\320\273\320\260\321\201\321\202\320\270."]
  ::msgcat::mcset sk "Show area border lines." [encoding convertfrom utf-8 "Zobraz hranice plochy."]
  ::msgcat::mcset sq "Show area border lines." [encoding convertfrom utf-8 "trego kufirin e vijave te fushes."]

  ::msgcat::mcset bg "Select line in area." [encoding convertfrom utf-8 "\320\230\320\267\320\261\320\265\321\200\320\270 \320\273\320\270\320\275\320\270\321\217."]
  ::msgcat::mcset cz "Select line in area." [encoding convertfrom utf-8 "V\303\275b\304\233r k\305\231ivky ohrani\304\215uj\303\255c\303\255 oblast"]
  ::msgcat::mcset de "Select line in area." [encoding convertfrom utf-8 "W\303\244hle Linie in Fl\303\244che."]
  ::msgcat::mcset el "Select line in area." [encoding convertfrom utf-8 "\316\232\316\254\316\275\317\204\316\265 \316\272\316\273\316\271\316\272 \317\203\316\265 \316\277\317\200\316\277\316\271\316\261\316\264\316\256\317\200\316\277\317\204\316\265 \316\263\317\201\316\261\316\274\316\274\316\256 \317\204\316\277\317\205 \316\272\316\261\317\204\316\261\316\273\317\214\316\263\316\277\317\205 \316\263\316\271\316\261 \316\275\316\261 \316\265\317\200\316\271\316\273\316\265\317\207\316\270\316\265\316\257 \316\267 \316\261\316\275\317\204\316\257\317\203\317\204\316\277\316\271\317\207\316\267 \316\263\317\201\316\261\316\274\316\274\316\256 \316\277\317\201\316\257\316\277\317\205 \316\265\317\200\316\271\317\206\316\254\316\275\316\265\316\271\316\261\317\202 \317\203\317\204\316\277\316\275 \316\272\316\261\316\274\316\262\316\254."]
  ::msgcat::mcset en "Select line in area." [encoding convertfrom utf-8 "Click on any list line to get corresponding area border line selected on canvas."]
  ::msgcat::mcset es "Select line in area." [encoding convertfrom utf-8 "Cada rengl\303\263n de la lista corresponde a una l\303\255nea que limita esta \303\241rea"]
  ::msgcat::mcset it "Select line in area." [encoding convertfrom utf-8 "Seleziona una linea nell'area."]
  ::msgcat::mcset ru "Select line in area." [encoding convertfrom utf-8 "\320\222\321\213\320\261\320\276\321\200 \320\273\320\270\320\275\320\270\320\270."]
  ::msgcat::mcset sk "Select line in area." [encoding convertfrom utf-8 "Vyber hrani\304\215n\303\272 krivku."]
  ::msgcat::mcset sq "Select line in area." [encoding convertfrom utf-8 "kliko ne cilindo rrjesht te listes qe te kesh rrjeshtin kufizues te fushes pershtatese, I zgjedhur ne pelhure"]

  ::msgcat::mcset bg "loading main menu ..." [encoding convertfrom utf-8 "\320\227\320\260\321\200\320\265\320\266\320\264\320\260\320\275\320\265 \320\275\320\260 \320\263\320\273\320\260\320\262\320\275\320\276\321\202\320\276 \320\274\320\265\320\275\321\216 ..."]
  ::msgcat::mcset cz "loading main menu ..." [encoding convertfrom utf-8 "nahr\303\241v\303\241m hlavn\303\255 menu ..."]
  ::msgcat::mcset de "loading main menu ..." [encoding convertfrom utf-8 "Lade Hauptmen\303\274 ..."]
  ::msgcat::mcset el "loading main menu ..." [encoding convertfrom utf-8 "\317\206\317\214\317\201\317\204\316\271\317\203\316\267 \316\272\317\215\317\201\316\271\316\277\317\205 \316\274\316\265\316\275\316\277\317\215"]
  ::msgcat::mcset en "loading main menu ..." [encoding convertfrom utf-8 "loading main menu ..."]
  ::msgcat::mcset es "loading main menu ..." [encoding convertfrom utf-8 "men\303\272 principal ..."]
  ::msgcat::mcset it "loading main menu ..." [encoding convertfrom utf-8 "men\303\271 principale ..."]
  ::msgcat::mcset ru "loading main menu ..." [encoding convertfrom utf-8 "\320\267\320\260\320\263\321\200\321\203\320\267\320\272\320\260 \320\263\320\273\320\260\320\262\320\275\320\276\320\263\320\276 \320\274\320\265\320\275\321\216 ..."]
  ::msgcat::mcset sk "loading main menu ..." [encoding convertfrom utf-8 "nahr\303\241vam hlavn\303\251 menu ..."]
  ::msgcat::mcset sq "loading main menu ..." [encoding convertfrom utf-8 "duke lexuar menyn kryesore\342\200\246"]

  ::msgcat::mcset bg "Open (no pics)" [encoding convertfrom utf-8 "\320\236\321\202\320\262\320\276\321\200\320\270 (\320\261\320\265\320\267 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\321\217)"]
  ::msgcat::mcset cz "Open (no pics)" [encoding convertfrom utf-8 "Otev\305\231\303\255t (bez obr\303\241zk\305\257)"]
  ::msgcat::mcset de "Open (no pics)" [encoding convertfrom utf-8 "\303\226ffne (keine Bilder)"]
  ::msgcat::mcset el "Open (no pics)" [encoding convertfrom utf-8 "\316\206\316\275\316\277\316\271\316\263\316\274\316\261 (\317\207\317\211\317\201\316\257\317\202 \316\265\316\271\316\272\317\214\316\275\316\265\317\202)"]
  ::msgcat::mcset en "Open (no pics)" [encoding convertfrom utf-8 "Open (no pics)"]
  ::msgcat::mcset es "Open (no pics)" [encoding convertfrom utf-8 "Abrir (sin im\303\241genes)"]
  ::msgcat::mcset it "Open (no pics)" [encoding convertfrom utf-8 "Apri (no pics)"]
  ::msgcat::mcset ru "Open (no pics)" [encoding convertfrom utf-8 "\320\236\321\202\320\272\321\200\321\213\321\202\321\214 (\320\261\320\265\320\267 \320\272\320\260\321\200\321\202\320\270\320\275\320\276\320\272)"]
  ::msgcat::mcset sk "Open (no pics)" [encoding convertfrom utf-8 "Otvori\305\245 (bez obr\303\241zkov)"]
  ::msgcat::mcset sq "Open (no pics)" [encoding convertfrom utf-8 "hape (pa foto)"]

  ::msgcat::mcset bg "Insert ..." [encoding convertfrom utf-8 "\320\222\320\274\321\212\320\272\320\275\320\270 ..."]
  ::msgcat::mcset cz "Insert ..." [encoding convertfrom utf-8 "Vlo\305\276it ..."]
  ::msgcat::mcset de "Insert ..." [encoding convertfrom utf-8 "Einf\303\274gen ..."]
  ::msgcat::mcset el "Insert ..." [encoding convertfrom utf-8 "\316\225\316\271\317\203\316\261\316\263\317\211\316\263\316\256..."]
  ::msgcat::mcset en "Insert ..." [encoding convertfrom utf-8 "Insert ..."]
  ::msgcat::mcset es "Insert ..." [encoding convertfrom utf-8 "Insertar ..."]
  ::msgcat::mcset it "Insert ..." [encoding convertfrom utf-8 "Inserisci ..."]
  ::msgcat::mcset ru "Insert ..." [encoding convertfrom utf-8 "\320\222\321\201\321\202\320\260\320\262\320\272\320\260"]
  ::msgcat::mcset sk "Insert ..." [encoding convertfrom utf-8 "Vlo\305\276i\305\245 ..."]
  ::msgcat::mcset sq "Insert ..." [encoding convertfrom utf-8 "fute\342\200\246"]

  ::msgcat::mcset bg "point" [encoding convertfrom utf-8 "\321\202\320\276\321\207\320\272\320\260"]
  ::msgcat::mcset cz "point" [encoding convertfrom utf-8 "bod"]
  ::msgcat::mcset de "point" [encoding convertfrom utf-8 "Punkt"]
  ::msgcat::mcset el "point" [encoding convertfrom utf-8 "\317\203\316\267\316\274\316\265\316\257\316\277"]
  ::msgcat::mcset en "point" [encoding convertfrom utf-8 "point"]
  ::msgcat::mcset es "point" [encoding convertfrom utf-8 "punto"]
  ::msgcat::mcset it "point" [encoding convertfrom utf-8 "punto"]
  ::msgcat::mcset ru "point" [encoding convertfrom utf-8 "\321\202\320\276\321\207\320\272\320\260"]
  ::msgcat::mcset sk "point" [encoding convertfrom utf-8 "bod"]
  ::msgcat::mcset sq "point" [encoding convertfrom utf-8 "pika"]

  ::msgcat::mcset bg "line" [encoding convertfrom utf-8 "\320\273\320\270\320\275\320\270\321\217"]
  ::msgcat::mcset cz "line" [encoding convertfrom utf-8 "k\305\231ivka"]
  ::msgcat::mcset de "line" [encoding convertfrom utf-8 "Linie"]
  ::msgcat::mcset el "line" [encoding convertfrom utf-8 "\316\263\317\201\316\261\316\274\316\274\316\256"]
  ::msgcat::mcset en "line" [encoding convertfrom utf-8 "line"]
  ::msgcat::mcset es "line" [encoding convertfrom utf-8 "l\303\255nea"]
  ::msgcat::mcset it "line" [encoding convertfrom utf-8 "linea"]
  ::msgcat::mcset ru "line" [encoding convertfrom utf-8 "\320\273\320\270\320\275\320\270\321\217"]
  ::msgcat::mcset sk "line" [encoding convertfrom utf-8 "krivku"]
  ::msgcat::mcset sq "line" [encoding convertfrom utf-8 "vija apo rjeshti"]

  ::msgcat::mcset bg "area" [encoding convertfrom utf-8 "\320\276\320\261\320\273\320\260\321\201\321\202"]
  ::msgcat::mcset cz "area" [encoding convertfrom utf-8 "oblast"]
  ::msgcat::mcset de "area" [encoding convertfrom utf-8 "Fl\303\244che"]
  ::msgcat::mcset el "area" [encoding convertfrom utf-8 "\316\265\317\200\316\271\317\206\316\254\316\275\316\265\316\271\316\261"]
  ::msgcat::mcset en "area" [encoding convertfrom utf-8 "area"]
  ::msgcat::mcset es "area" [encoding convertfrom utf-8 "\303\241rea"]
  ::msgcat::mcset it "area" [encoding convertfrom utf-8 "area"]
  ::msgcat::mcset ru "area" [encoding convertfrom utf-8 "\320\276\320\261\320\273\320\260\321\201\321\202\321\214"]
  ::msgcat::mcset sk "area" [encoding convertfrom utf-8 "plochu"]
  ::msgcat::mcset sq "area" [encoding convertfrom utf-8 "fusha"]

  ::msgcat::mcset bg "scrap" [encoding convertfrom utf-8 "\321\201\320\272\321\200\320\260\320\277"]
  ::msgcat::mcset cz "scrap" [encoding convertfrom utf-8 "scrap"]
  ::msgcat::mcset de "scrap" [encoding convertfrom utf-8 "Skizze"]
  ::msgcat::mcset el "scrap" [encoding convertfrom utf-8 "\317\203\316\272\317\201\316\261\317\200"]
  ::msgcat::mcset en "scrap" [encoding convertfrom utf-8 "scrap"]
  ::msgcat::mcset es "scrap" [encoding convertfrom utf-8 "croquis"]
  ::msgcat::mcset it "scrap" [encoding convertfrom utf-8 "scrap"]
  ::msgcat::mcset ru "scrap" [encoding convertfrom utf-8 "\321\201\320\272\321\200\320\260\320\277"]
  ::msgcat::mcset sk "scrap" [encoding convertfrom utf-8 "scrap"]
  ::msgcat::mcset sq "scrap" [encoding convertfrom utf-8 "deponia"]

  ::msgcat::mcset bg "text" [encoding convertfrom utf-8 "\321\202\320\265\320\272\321\201\321\202"]
  ::msgcat::mcset cz "text" [encoding convertfrom utf-8 "text"]
  ::msgcat::mcset de "text" [encoding convertfrom utf-8 "Text"]
  ::msgcat::mcset el "text" [encoding convertfrom utf-8 "\316\272\316\265\316\257\316\274\316\265\316\275\316\277"]
  ::msgcat::mcset en "text" [encoding convertfrom utf-8 "text"]
  ::msgcat::mcset es "text" [encoding convertfrom utf-8 "texto"]
  ::msgcat::mcset it "text" [encoding convertfrom utf-8 "testo"]
  ::msgcat::mcset ru "text" [encoding convertfrom utf-8 "\321\202\320\265\320\272\321\201\321\202"]
  ::msgcat::mcset sk "text" [encoding convertfrom utf-8 "text"]
  ::msgcat::mcset sq "text" [encoding convertfrom utf-8 "teksti"]

  ::msgcat::mcset bg "Auto adjust area" [encoding convertfrom utf-8 "\320\220\320\262\321\202\320\276\320\274\320\260\321\202\320\270\321\207\320\275\320\260 \320\275\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\260 \320\275\320\260 \320\276\320\261\320\273\320\260\321\201\321\202"]
  ::msgcat::mcset cz "Auto adjust area" [encoding convertfrom utf-8 "Auto p\305\231izp\305\257sobit"]
  ::msgcat::mcset de "Auto adjust area" [encoding convertfrom utf-8 "Fl\303\244che automatisch anpassen"]
  ::msgcat::mcset el "Auto adjust area" [encoding convertfrom utf-8 "\316\221\317\205\317\204\317\214\316\274\316\261\317\204\316\267 \317\201\317\215\316\270\316\274\316\271\317\203\316\267 \316\265\317\200\316\271\317\206\316\254\316\275\316\265\316\271\316\261\317\202"]
  ::msgcat::mcset en "Auto adjust area" [encoding convertfrom utf-8 "Auto adjust area"]
  ::msgcat::mcset es "Auto adjust area" [encoding convertfrom utf-8 "Autoajustar \303\241rea"]
  ::msgcat::mcset it "Auto adjust area" [encoding convertfrom utf-8 "Auto-ridimensiona area"]
  ::msgcat::mcset ru "Auto adjust area" [encoding convertfrom utf-8 "\320\220\320\262\321\202\320\276\320\277\320\276\320\264\320\263\320\276\320\275\320\272\320\260 \320\263\321\200\320\260\320\275\320\270\321\206 \320\267\320\276\320\275\321\213 \321\200\320\270\321\201\320\276\320\262\320\260\320\275\320\270\321\217."]
  ::msgcat::mcset sk "Auto adjust area" [encoding convertfrom utf-8 "Prisp\303\264sob plochu"]
  ::msgcat::mcset sq "Auto adjust area" [encoding convertfrom utf-8 "fusha automatikisht e pershtatur"]

  ::msgcat::mcset bg "Insert image" [encoding convertfrom utf-8 "\320\222\320\274\321\212\320\272\320\275\320\270 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265"]
  ::msgcat::mcset cz "Insert image" [encoding convertfrom utf-8 "Vlo\305\276it obr\303\241zek"]
  ::msgcat::mcset de "Insert image" [encoding convertfrom utf-8 "Bild einf\303\274gen"]
  ::msgcat::mcset el "Insert image" [encoding convertfrom utf-8 "\316\225\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \316\265\316\271\316\272\317\214\316\275\316\261\317\202"]
  ::msgcat::mcset en "Insert image" [encoding convertfrom utf-8 "Insert image"]
  ::msgcat::mcset es "Insert image" [encoding convertfrom utf-8 "Insertar imagen"]
  ::msgcat::mcset it "Insert image" [encoding convertfrom utf-8 "Inserisci immagine"]
  ::msgcat::mcset ru "Insert image" [encoding convertfrom utf-8 "\320\222\321\201\321\202\320\260\320\262\320\270\321\202\321\214 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265"]
  ::msgcat::mcset sk "Insert image" [encoding convertfrom utf-8 "Vlo\305\276i\305\245 obr\303\241zok"]
  ::msgcat::mcset sq "Insert image" [encoding convertfrom utf-8 "fute imazhin"]

  ::msgcat::mcset bg "Zoom 100 %" [encoding convertfrom utf-8 "\320\234\320\260\321\211\320\260\320\261 100%"]
  ::msgcat::mcset cz "Zoom 100 %" [encoding convertfrom utf-8 "Zoom na 100 %"]
  ::msgcat::mcset el "Zoom 100 %" [encoding convertfrom utf-8 "\316\234\316\265\316\263\316\255\316\270\317\205\316\275\317\203\316\267 100%"]
  ::msgcat::mcset en "Zoom 100 %" [encoding convertfrom utf-8 "Zoom 100 %"]
  ::msgcat::mcset es "Zoom 100 %" [encoding convertfrom utf-8 "Zoom 100%"]
  ::msgcat::mcset it "Zoom 100 %" [encoding convertfrom utf-8 "Zoom 100 %"]
  ::msgcat::mcset ru "Zoom 100 %" [encoding convertfrom utf-8 "\320\234\320\260\321\201\321\210\321\202\320\260\320\261 100 %"]
  ::msgcat::mcset sk "Zoom 100 %" [encoding convertfrom utf-8 "Zoom 100%"]
  ::msgcat::mcset sq "Zoom 100 %" [encoding convertfrom utf-8 "zmadho 100%"]

  ::msgcat::mcset bg "Mouse mode." [encoding convertfrom utf-8 "\320\240\320\265\320\266\320\270\320\274 '\320\274\320\270\321\210\320\272\320\260'."]
  ::msgcat::mcset cz "Mouse mode." [encoding convertfrom utf-8 "Klikac\303\255 re\305\276im."]
  ::msgcat::mcset de "Mouse mode." [encoding convertfrom utf-8 "Mausmodus."]
  ::msgcat::mcset el "Mouse mode." [encoding convertfrom utf-8 "\316\233\316\265\316\271\317\204\316\277\317\205\317\201\316\263\316\257\316\261 \317\200\316\277\316\275\317\204\316\271\316\272\316\271\316\277\317\215."]
  ::msgcat::mcset en "Mouse mode." [encoding convertfrom utf-8 "Mouse mode."]
  ::msgcat::mcset es "Mouse mode." [encoding convertfrom utf-8 "Modo rat\303\263n."]
  ::msgcat::mcset it "Mouse mode." [encoding convertfrom utf-8 "Modalit\303\240 del mouse."]
  ::msgcat::mcset ru "Mouse mode." [encoding convertfrom utf-8 "\320\240\320\265\320\266\320\270\320\274 \320\274\321\213\321\210\320\270."]
  ::msgcat::mcset sk "Mouse mode." [encoding convertfrom utf-8 "M\303\263d my\305\241i."]
  ::msgcat::mcset sq "Mouse mode." [encoding convertfrom utf-8 "miu ne funkcion"]

  ::msgcat::mcset bg "Current mouse position." [encoding convertfrom utf-8 "\320\242\320\265\320\272\321\203\321\211\320\260 \320\277\320\276\320\267\320\270\321\206\320\270\321\217 \320\275\320\260 \320\272\321\203\321\200\321\201\320\276\321\200\320\260."]
  ::msgcat::mcset cz "Current mouse position." [encoding convertfrom utf-8 "Aktu\303\241ln\303\255 pozice ukazatele my\305\241i."]
  ::msgcat::mcset de "Current mouse position." [encoding convertfrom utf-8 "Aktuelle Mausposition."]
  ::msgcat::mcset el "Current mouse position." [encoding convertfrom utf-8 "\316\244\317\201\316\255\317\207\316\277\317\205\317\203\316\261 \316\270\316\255\317\203\316\267 \317\200\316\277\316\275\317\204\316\271\316\272\316\271\316\277\317\215."]
  ::msgcat::mcset en "Current mouse position." [encoding convertfrom utf-8 "Current mouse position."]
  ::msgcat::mcset es "Current mouse position." [encoding convertfrom utf-8 "Posici\303\263n actual del rat\303\263n."]
  ::msgcat::mcset it "Current mouse position." [encoding convertfrom utf-8 "Posizione del mouse."]
  ::msgcat::mcset ru "Current mouse position." [encoding convertfrom utf-8 "\320\242\320\265\320\272\321\203\321\211\320\260\321\217 \320\277\320\276\320\267\320\270\321\206\320\270\321\217 \321\203\320\272\320\260\320\267\320\260\321\202\320\265\320\273\321\217 \320\274\321\213\321\210\320\270."]
  ::msgcat::mcset sk "Current mouse position." [encoding convertfrom utf-8 "Aktu\303\241lna poloha my\305\241i."]
  ::msgcat::mcset sq "Current mouse position." [encoding convertfrom utf-8 "pozicioni aktual I miut."]

  ::msgcat::mcset bg "loading line procs ..." [encoding convertfrom utf-8 "\320\267\320\260\321\200\320\265\320\266\320\264\320\260\320\275\320\265 \320\275\320\260 \320\277\321\200\320\276\321\206\320\265\320\264\321\203\321\200\320\270\321\202\320\265 \320\267\320\260 \320\273\320\270\320\275\320\270\321\217 ..."]
  ::msgcat::mcset cz "loading line procs ..." [encoding convertfrom utf-8 "zpracov\303\241v\303\241m k\305\231ivky ..."]
  ::msgcat::mcset el "loading line procs ..." [encoding convertfrom utf-8 "\317\206\317\214\317\201\317\204\316\271\317\203\316\267 \316\263\317\201\316\261\316\274\316\274\316\271\316\272\317\216\316\275 \316\264\316\271\316\261\316\264\316\271\316\272\316\261\317\203\316\271\317\216\316\275..."]
  ::msgcat::mcset en "loading line procs ..." [encoding convertfrom utf-8 "loading line procs ..."]
  ::msgcat::mcset es "loading line procs ..." [encoding convertfrom utf-8 "procesos de l\303\255nea ..."]
  ::msgcat::mcset it "loading line procs ..." [encoding convertfrom utf-8 "procedure di linea ..."]
  ::msgcat::mcset ru "loading line procs ..." [encoding convertfrom utf-8 "\320\267\320\260\320\263\321\200\321\203\320\267\320\272\320\260 \320\277\321\200\320\276\321\206\320\265\320\264\321\203\321\200 \320\264\320\273\321\217 \320\273\320\270\320\275\320\270\320\271 ..."]
  ::msgcat::mcset sk "loading line procs ..." [encoding convertfrom utf-8 "na\304\215itavam modul kriviek ..."]
  ::msgcat::mcset sq "loading line procs ..." [encoding convertfrom utf-8 "duke lexuar proceduren rjeshtit\342\200\246"]

  ::msgcat::mcset bg "Map editor is not active. To activate it, open existing file or create new one." [encoding convertfrom utf-8 "\320\240\320\265\320\264\320\260\320\272\321\202\320\276\321\200\320\260 \320\275\320\260 \320\272\320\260\321\200\321\202\320\270 \320\275\320\265 \320\265 \320\260\320\272\321\202\320\270\320\262\320\265\320\275. \320\227\320\260 \320\260\320\272\321\202\320\270\320\262\320\270\321\200\320\260\320\275\320\265 \320\276\321\202\320\262\320\276\321\200\320\265\321\202\320\265 \321\201\321\212\321\211\320\265\321\201\321\202\320\262\321\203\320\262\320\260\321\211 \321\204\320\260\320\271\320\273 \320\270\320\273\320\270 \321\201\321\212\320\267\320\264\320\260\320\271\321\202\320\265 \320\275\320\276\320\262."]
  ::msgcat::mcset cz "Map editor is not active. To activate it, open existing file or create new one." [encoding convertfrom utf-8 "Mapov\303\275 editor nen\303\255 aktivn\303\255. Pro jeho aktivaci otev\305\231ete existuj\303\255c\303\255 soubor nebo vytvo\305\231te nov\303\275."]
  ::msgcat::mcset de "Map editor is not active. To activate it, open existing file or create new one." [encoding convertfrom utf-8 "Karteneditor ist nicht aktiv. Um ihn zu aktivieren, lade eine existierende Datei oder lege eine neue an."]
  ::msgcat::mcset el "Map editor is not active. To activate it, open existing file or create new one." [encoding convertfrom utf-8 "\316\237 \316\265\317\200\316\265\316\276\316\265\317\201\316\263\316\261\317\203\317\204\316\256\317\202 \317\203\317\207\316\265\316\264\316\257\316\277\317\205 \316\264\316\265\316\275 \316\265\316\257\316\275\316\261\316\271 \316\265\316\275\316\265\317\201\316\263\317\214\317\202. \316\223\316\271\316\261 \316\275\316\261 \317\204\316\277\316\275 \316\265\316\275\316\265\317\201\316\263\316\277\317\200\316\277\316\271\316\256\317\203\316\265\317\204\316\265, \316\261\316\275\316\277\316\257\316\276\317\204\316\265 \316\255\316\275\316\261 \316\261\317\201\317\207\316\265\316\257\316\277 \316\256 \316\264\316\267\316\274\316\271\316\277\317\205\317\201\316\263\316\256\317\203\317\204\316\265 \316\275\316\255\316\277."]
  ::msgcat::mcset en "Map editor is not active. To activate it, open existing file or create new one." [encoding convertfrom utf-8 "Map editor is not active. To activate it, open existing file or create new one."]
  ::msgcat::mcset es "Map editor is not active. To activate it, open existing file or create new one." [encoding convertfrom utf-8 "El editor de mapas est\303\241 inactivo. Para activarlo, abre un archivo existente o crea uno nuevo."]
  ::msgcat::mcset it "Map editor is not active. To activate it, open existing file or create new one." [encoding convertfrom utf-8 "L'editor di mappa non \303\250 attivo. Per attivarlo apri un file o creane uno."]
  ::msgcat::mcset ru "Map editor is not active. To activate it, open existing file or create new one." [encoding convertfrom utf-8 "\320\240\320\265\320\264\320\260\320\272\321\202\320\276\321\200 \320\272\320\260\321\200\321\202\321\213 \320\275\320\265 \320\260\320\272\321\202\320\270\320\262\320\265\320\275. \320\224\320\273\321\217 \320\260\320\272\321\202\320\270\320\262\320\260\321\206\320\270\320\270 \320\276\321\202\320\272\321\200\320\276\320\271\321\202\320\265 \321\201\321\203\321\211\320\265\321\201\321\202\320\262\321\203\321\216\321\211\320\270\320\271 \321\204\320\260\320\271\320\273 \320\270\320\273\320\270 \321\201\320\276\320\267\320\264\320\260\320\271\321\202\320\265 \320\275\320\276\320\262\321\213\320\271."]
  ::msgcat::mcset sk "Map editor is not active. To activate it, open existing file or create new one." [encoding convertfrom utf-8 "Mapov\303\275 editor nie je akt\303\255vny. Otvorte existuj\303\272ci s\303\272bor alebo vytvorte nov\303\275."]
  ::msgcat::mcset sq "Map editor is not active. To activate it, open existing file or create new one." [encoding convertfrom utf-8 "permiresuesi I hartes nuk eshte aktiv. Qe ta aktivizosh, hape fajlin egzistues ose krijo nje te ri"]

  ::msgcat::mcset bg "Insert line" [encoding convertfrom utf-8 "\320\222\320\274\321\212\320\272\320\275\320\270 \320\273\320\270\320\275\320\270\321\217"]
  ::msgcat::mcset cz "Insert line" [encoding convertfrom utf-8 "Vlo\305\276it k\305\231ivku"]
  ::msgcat::mcset de "Insert line" [encoding convertfrom utf-8 "Linie einf\303\274gen"]
  ::msgcat::mcset el "Insert line" [encoding convertfrom utf-8 "\316\225\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \316\263\317\201\316\261\316\274\316\274\316\256\317\202"]
  ::msgcat::mcset en "Insert line" [encoding convertfrom utf-8 "Insert line"]
  ::msgcat::mcset es "Insert line" [encoding convertfrom utf-8 "Insertar l\303\255nea"]
  ::msgcat::mcset it "Insert line" [encoding convertfrom utf-8 "Inserisci linea"]
  ::msgcat::mcset ru "Insert line" [encoding convertfrom utf-8 "\320\222\321\201\321\202\320\260\320\262\320\270\321\202\321\214 \320\273\320\270\320\275\320\270\321\216"]
  ::msgcat::mcset sk "Insert line" [encoding convertfrom utf-8 "Vlo\305\276i\305\245 krivku"]
  ::msgcat::mcset sq "Insert line" [encoding convertfrom utf-8 "fute rjeshtin-vijen"]

  ::msgcat::mcset bg "Insert scrap" [encoding convertfrom utf-8 "\320\222\320\274\321\212\320\272\320\275\320\270 \321\201\320\272\321\200\320\260\320\277"]
  ::msgcat::mcset cz "Insert scrap" [encoding convertfrom utf-8 "Vlo\305\276it scrap"]
  ::msgcat::mcset de "Insert scrap" [encoding convertfrom utf-8 "Skizze einf\303\274gen"]
  ::msgcat::mcset el "Insert scrap" [encoding convertfrom utf-8 "\316\225\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \317\203\316\272\317\201\316\261\317\200"]
  ::msgcat::mcset en "Insert scrap" [encoding convertfrom utf-8 "Insert scrap"]
  ::msgcat::mcset es "Insert scrap" [encoding convertfrom utf-8 "Insertar croquis"]
  ::msgcat::mcset it "Insert scrap" [encoding convertfrom utf-8 "Inserisci scrap"]
  ::msgcat::mcset ru "Insert scrap" [encoding convertfrom utf-8 "\320\222\321\201\321\202\320\260\320\262\320\270\321\202\321\214 \321\201\320\272\321\200\320\260\320\277"]
  ::msgcat::mcset sk "Insert scrap" [encoding convertfrom utf-8 "Vlo\305\276i\305\245 scrap"]
  ::msgcat::mcset sq "Insert scrap" [encoding convertfrom utf-8 "fute deponin"]

  ::msgcat::mcset bg "Insert text" [encoding convertfrom utf-8 "\320\222\320\274\321\212\320\272\320\275\320\270 \321\202\320\265\320\272\321\201\321\202"]
  ::msgcat::mcset cz "Insert text" [encoding convertfrom utf-8 "Vlo\305\276it text"]
  ::msgcat::mcset de "Insert text" [encoding convertfrom utf-8 "Text einf\303\274gen"]
  ::msgcat::mcset el "Insert text" [encoding convertfrom utf-8 "\316\225\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \316\272\316\265\316\271\316\274\316\255\316\275\316\277\317\205"]
  ::msgcat::mcset en "Insert text" [encoding convertfrom utf-8 "Insert text"]
  ::msgcat::mcset es "Insert text" [encoding convertfrom utf-8 "Insertar texto"]
  ::msgcat::mcset it "Insert text" [encoding convertfrom utf-8 "Inserisci testo"]
  ::msgcat::mcset ru "Insert text" [encoding convertfrom utf-8 "\320\222\321\201\321\202\320\260\320\262\320\270\321\202\321\214 \321\202\320\265\320\272\321\201\321\202"]
  ::msgcat::mcset sk "Insert text" [encoding convertfrom utf-8 "Vlo\305\276i\305\245 text"]
  ::msgcat::mcset sq "Insert text" [encoding convertfrom utf-8 "fute tekstin"]

  ::msgcat::mcset bg "Insert area" [encoding convertfrom utf-8 "\320\222\320\274\321\212\320\272\320\275\320\270 \320\276\320\261\320\273\320\260\321\201\321\202"]
  ::msgcat::mcset cz "Insert area" [encoding convertfrom utf-8 "Vlo\305\276it oblast"]
  ::msgcat::mcset de "Insert area" [encoding convertfrom utf-8 "Fl\303\244che einf\303\274gen"]
  ::msgcat::mcset el "Insert area" [encoding convertfrom utf-8 "\316\225\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \316\265\317\200\316\271\317\206\316\254\316\275\316\265\316\271\316\261\317\202"]
  ::msgcat::mcset en "Insert area" [encoding convertfrom utf-8 "Insert area"]
  ::msgcat::mcset es "Insert area" [encoding convertfrom utf-8 "Insertar \303\241rea"]
  ::msgcat::mcset it "Insert area" [encoding convertfrom utf-8 "Inserisci area"]
  ::msgcat::mcset ru "Insert area" [encoding convertfrom utf-8 "\320\222\321\201\321\202\320\260\320\262\320\270\321\202\321\214 \320\276\320\261\320\273\320\260\321\201\321\202\321\214"]
  ::msgcat::mcset sk "Insert area" [encoding convertfrom utf-8 "Vlo\305\276i\305\245 plochu"]
  ::msgcat::mcset sq "Insert area" [encoding convertfrom utf-8 "fute fushen"]

  ::msgcat::mcset bg "Delete" [encoding convertfrom utf-8 "\320\230\320\267\321\202\321\200\320\270\320\271"]
  ::msgcat::mcset cz "Delete" [encoding convertfrom utf-8 "Smazat"]
  ::msgcat::mcset de "Delete" [encoding convertfrom utf-8 "L\303\266sche"]
  ::msgcat::mcset el "Delete" [encoding convertfrom utf-8 "\316\224\316\271\316\261\316\263\317\201\316\261\317\206\316\256"]
  ::msgcat::mcset en "Delete" [encoding convertfrom utf-8 "Delete"]
  ::msgcat::mcset es "Delete" [encoding convertfrom utf-8 "Borrar"]
  ::msgcat::mcset it "Delete" [encoding convertfrom utf-8 "Rimuovi"]
  ::msgcat::mcset ru "Delete" [encoding convertfrom utf-8 "\320\243\320\264\320\260\320\273\320\270\321\202\321\214"]
  ::msgcat::mcset sk "Delete" [encoding convertfrom utf-8 "Odstr\303\241ni\305\245"]
  ::msgcat::mcset sq "Delete" [encoding convertfrom utf-8 "fshije"]

  ::msgcat::mcset bg "deleting" [encoding convertfrom utf-8 "\320\270\320\267\321\202\321\200\320\270\320\262\320\260\320\275\320\265"]
  ::msgcat::mcset cz "deleting" [encoding convertfrom utf-8 "maz\303\241n\303\255"]
  ::msgcat::mcset de "deleting" [encoding convertfrom utf-8 "l\303\266sche"]
  ::msgcat::mcset el "deleting" [encoding convertfrom utf-8 "\316\264\316\271\316\261\316\263\317\201\316\261\317\206\316\256"]
  ::msgcat::mcset en "deleting" [encoding convertfrom utf-8 "deleting"]
  ::msgcat::mcset es "deleting" [encoding convertfrom utf-8 "borrando"]
  ::msgcat::mcset it "deleting" [encoding convertfrom utf-8 "rimuovendo"]
  ::msgcat::mcset ru "deleting" [encoding convertfrom utf-8 "\321\203\320\264\320\260\320\273\320\265\320\275\320\270\320\265"]
  ::msgcat::mcset sk "deleting" [encoding convertfrom utf-8 "mazanie"]
  ::msgcat::mcset sq "deleting" [encoding convertfrom utf-8 "duke fshire"]

  ::msgcat::mcset bg "moving command" [encoding convertfrom utf-8 "\320\277\321\200\320\265\320\274\320\265\321\201\321\202\320\262\320\260\320\275\320\265 \320\275\320\260 \320\272\320\276\320\274\320\260\320\275\320\264\320\260"]
  ::msgcat::mcset cz "moving command" [encoding convertfrom utf-8 "p\305\231esun p\305\231\303\255kazu"]
  ::msgcat::mcset de "moving command" [encoding convertfrom utf-8 "Verschiebebefehl"]
  ::msgcat::mcset el "moving command" [encoding convertfrom utf-8 "\316\265\316\275\317\204\316\277\316\273\316\256 \316\274\316\265\317\204\316\261\316\272\316\257\316\275\316\267\317\203\316\267\317\202"]
  ::msgcat::mcset en "moving command" [encoding convertfrom utf-8 "moving command"]
  ::msgcat::mcset es "moving command" [encoding convertfrom utf-8 "desplazando comando"]
  ::msgcat::mcset it "moving command" [encoding convertfrom utf-8 "comando di spostamento"]
  ::msgcat::mcset ru "moving command" [encoding convertfrom utf-8 "\320\277\320\265\321\200\320\265\320\274\320\265\321\211\320\265\320\275\320\270\320\265 \320\272\320\276\320\274\320\260\320\275\320\264"]
  ::msgcat::mcset sk "moving command" [encoding convertfrom utf-8 "presun pr\303\255kazu"]
  ::msgcat::mcset sq "moving command" [encoding convertfrom utf-8 "komanda e levizjes"]

  ::msgcat::mcset bg "creating endscrap" [encoding convertfrom utf-8 "\321\201\321\212\320\267\320\264\320\260\320\262\320\260\320\275\320\265 \320\272\321\200\320\260\320\271 \320\275\320\260 \321\201\320\272\321\200\320\260\320\277\320\260"]
  ::msgcat::mcset cz "creating endscrap" [encoding convertfrom utf-8 "vytvo\305\231en\303\255 konce scrapu"]
  ::msgcat::mcset de "creating endscrap" [encoding convertfrom utf-8 "Erzeuge Skizzenende"]
  ::msgcat::mcset el "creating endscrap" [encoding convertfrom utf-8 "\316\264\316\267\316\274\316\271\316\277\317\205\317\201\316\263\316\257\316\261 \317\204\316\255\316\273\316\277\317\205\317\202 \317\203\316\272\317\201\316\261\317\200 (endscrap)"]
  ::msgcat::mcset en "creating endscrap" [encoding convertfrom utf-8 "creating endscrap"]
  ::msgcat::mcset es "creating endscrap" [encoding convertfrom utf-8 "creando l\303\255nea final de croquis (endscrap)"]
  ::msgcat::mcset it "creating endscrap" [encoding convertfrom utf-8 "creazione endscrap"]
  ::msgcat::mcset ru "creating endscrap" [encoding convertfrom utf-8 "\321\201\320\276\320\267\320\264\320\260\320\275\320\270\320\265 \320\272\320\276\320\275\321\206\320\260 \321\201\320\272\321\200\320\260\320\277\320\260"]
  ::msgcat::mcset sk "creating endscrap" [encoding convertfrom utf-8 "vytvorenie konca scrapu"]
  ::msgcat::mcset sq "creating endscrap" [encoding convertfrom utf-8 "duke kriju fundin e deponise"]

  ::msgcat::mcset bg "scrap changes" [encoding convertfrom utf-8 "\320\277\321\200\320\276\320\274\321\217\320\275\320\260 \320\275\320\260 \321\201\320\272\321\200\320\260\320\277\320\260"]
  ::msgcat::mcset cz "scrap changes" [encoding convertfrom utf-8 "zm\304\233na parametr\305\257 scrapu"]
  ::msgcat::mcset de "scrap changes" [encoding convertfrom utf-8 "Skizzen\303\244nderung"]
  ::msgcat::mcset el "scrap changes" [encoding convertfrom utf-8 "\316\261\316\273\316\273\316\261\316\263\316\255\317\202 \317\203\316\272\317\201\316\261\317\200"]
  ::msgcat::mcset en "scrap changes" [encoding convertfrom utf-8 "scrap changes"]
  ::msgcat::mcset es "scrap changes" [encoding convertfrom utf-8 "cambios del croquis (scrap)"]
  ::msgcat::mcset it "scrap changes" [encoding convertfrom utf-8 "modifiche dello scrap"]
  ::msgcat::mcset ru "scrap changes" [encoding convertfrom utf-8 "\320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\320\265 \321\201\320\272\321\200\320\260\320\277\320\260"]
  ::msgcat::mcset sk "scrap changes" [encoding convertfrom utf-8 "zmena parametrov scrapu"]
  ::msgcat::mcset sq "scrap changes" [encoding convertfrom utf-8 "ndryshimet ne deponi"]

  ::msgcat::mcset bg "creating scrap" [encoding convertfrom utf-8 "\321\201\321\212\320\267\320\264\320\260\320\262\320\260\320\275\320\265 \320\275\320\260 \321\201\320\272\321\200\320\260\320\277"]
  ::msgcat::mcset cz "creating scrap" [encoding convertfrom utf-8 "vytvo\305\231en\303\255 scrapu"]
  ::msgcat::mcset de "creating scrap" [encoding convertfrom utf-8 "Erzeuge Skizze"]
  ::msgcat::mcset el "creating scrap" [encoding convertfrom utf-8 "\316\264\316\267\316\274\316\271\316\277\317\205\317\201\316\263\316\257\316\261 \317\203\316\272\317\201\316\261\317\200"]
  ::msgcat::mcset en "creating scrap" [encoding convertfrom utf-8 "creating scrap"]
  ::msgcat::mcset es "creating scrap" [encoding convertfrom utf-8 "creando croquis (scrap)"]
  ::msgcat::mcset it "creating scrap" [encoding convertfrom utf-8 "creazione scrap"]
  ::msgcat::mcset ru "creating scrap" [encoding convertfrom utf-8 "\321\201\320\276\320\267\320\264\320\260\320\275\320\270\320\265 \321\201\320\272\321\200\320\260\320\277\320\260"]
  ::msgcat::mcset sk "creating scrap" [encoding convertfrom utf-8 "vytvorenie scrapu"]
  ::msgcat::mcset sq "creating scrap" [encoding convertfrom utf-8 "duke kriju deponin"]

  ::msgcat::mcset bg "creating text" [encoding convertfrom utf-8 "\321\201\321\212\320\267\320\264\320\260\320\262\320\260\320\275\320\265 \320\275\320\260 \321\202\320\265\320\272\321\201\321\202"]
  ::msgcat::mcset cz "creating text" [encoding convertfrom utf-8 "vytvo\305\231en\303\255 textu"]
  ::msgcat::mcset de "creating text" [encoding convertfrom utf-8 "Erzeuge Text"]
  ::msgcat::mcset el "creating text" [encoding convertfrom utf-8 "\316\264\316\267\316\274\316\271\316\277\317\205\317\201\316\263\316\257\316\261 \316\264\316\277\316\272\316\271\316\274\316\256\317\202"]
  ::msgcat::mcset en "creating text" [encoding convertfrom utf-8 "creating text"]
  ::msgcat::mcset es "creating text" [encoding convertfrom utf-8 "creando texto"]
  ::msgcat::mcset it "creating text" [encoding convertfrom utf-8 "creazione testo"]
  ::msgcat::mcset ru "creating text" [encoding convertfrom utf-8 "\321\201\320\276\320\267\320\264\320\260\320\275\320\270\320\265 \321\202\320\265\320\272\321\201\321\202\320\260"]
  ::msgcat::mcset sk "creating text" [encoding convertfrom utf-8 "vytvorenie textu"]
  ::msgcat::mcset sq "creating text" [encoding convertfrom utf-8 "duke kriju tekstin"]

  ::msgcat::mcset bg "text changes" [encoding convertfrom utf-8 "\320\277\321\200\320\276\320\274\321\217\320\275\320\260 \320\275\320\260 \321\202\320\265\320\272\321\201\321\202"]
  ::msgcat::mcset cz "text changes" [encoding convertfrom utf-8 "zm\304\233na textu"]
  ::msgcat::mcset de "text changes" [encoding convertfrom utf-8 "Text\303\244nderungen"]
  ::msgcat::mcset el "text changes" [encoding convertfrom utf-8 "\316\261\316\273\316\273\316\261\316\263\316\255\317\202 \316\272\316\265\316\271\316\274\316\255\316\275\316\277\317\205"]
  ::msgcat::mcset en "text changes" [encoding convertfrom utf-8 "text changes"]
  ::msgcat::mcset es "text changes" [encoding convertfrom utf-8 "cambios de texto"]
  ::msgcat::mcset it "text changes" [encoding convertfrom utf-8 "modifiche del testo"]
  ::msgcat::mcset ru "text changes" [encoding convertfrom utf-8 "\320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\320\265 \321\202\320\265\320\272\321\201\321\202\320\260"]
  ::msgcat::mcset sk "text changes" [encoding convertfrom utf-8 "zmena textu"]
  ::msgcat::mcset sq "text changes" [encoding convertfrom utf-8 "ndrimet e tekstit"]

  ::msgcat::mcset bg "end point insertion" [encoding convertfrom utf-8 "\321\201\320\273\320\260\320\263\320\260\320\275\320\265 \320\275\320\260 \321\202\320\276\321\207\320\272\320\260 \320\267\320\260 \320\272\321\200\320\260\320\271"]
  ::msgcat::mcset cz "end point insertion" [encoding convertfrom utf-8 "konec vkl\303\241d\303\241n\303\255 bod\305\257"]
  ::msgcat::mcset de "end point insertion" [encoding convertfrom utf-8 "Endpunkt eingef\303\274gt"]
  ::msgcat::mcset el "end point insertion" [encoding convertfrom utf-8 "\316\265\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \317\204\316\265\316\273\316\271\316\272\316\277\317\215 \317\203\316\267\316\274\316\265\316\257\316\277\317\205"]
  ::msgcat::mcset en "end point insertion" [encoding convertfrom utf-8 "end point insertion"]
  ::msgcat::mcset es "end point insertion" [encoding convertfrom utf-8 "final de inserci\303\263n de punto"]
  ::msgcat::mcset it "end point insertion" [encoding convertfrom utf-8 "inserimento punto finale"]
  ::msgcat::mcset ru "end point insertion" [encoding convertfrom utf-8 "\320\262\321\201\321\202\320\260\320\262\320\272\320\260 \320\272\320\276\320\275\320\265\321\207\320\275\320\276\320\271 \321\202\320\276\321\207\320\272\320\270"]
  ::msgcat::mcset sk "end point insertion" [encoding convertfrom utf-8 "koniec vkladania bodov"]
  ::msgcat::mcset sq "end point insertion" [encoding convertfrom utf-8 "perfundo futjet e pikave"]

  ::msgcat::mcset bg "select object" [encoding convertfrom utf-8 "\320\270\320\267\320\261\320\276\321\200 \320\275\320\260 \320\276\320\261\320\265\320\272\321\202"]
  ::msgcat::mcset cz "select object" [encoding convertfrom utf-8 "ozna\304\215 objekt"]
  ::msgcat::mcset de "select object" [encoding convertfrom utf-8 "Objekt ausw\303\244hlen"]
  ::msgcat::mcset el "select object" [encoding convertfrom utf-8 "\316\265\317\200\316\271\316\273\316\277\316\263\316\256 \316\261\316\275\317\204\316\271\316\272\316\265\316\271\316\274\316\255\316\275\316\277\317\205"]
  ::msgcat::mcset it "select object" [encoding convertfrom utf-8 "seleziona oggetto"]
  ::msgcat::mcset ru "select object" [encoding convertfrom utf-8 "\320\262\321\213\320\261\320\276\321\200 \320\276\320\261\321\212\320\265\320\272\321\202\320\260"]
  ::msgcat::mcset sk "select object" [encoding convertfrom utf-8 "ozna\304\215 objekt"]
  ::msgcat::mcset sq "select object" [encoding convertfrom utf-8 "selekto objektin"]

  ::msgcat::mcset bg "Insert" [encoding convertfrom utf-8 "\320\222\320\274\321\212\320\272\320\275\320\270"]
  ::msgcat::mcset cz "Insert" [encoding convertfrom utf-8 "Vlo\305\276it"]
  ::msgcat::mcset de "Insert" [encoding convertfrom utf-8 "Einf\303\274gen"]
  ::msgcat::mcset el "Insert" [encoding convertfrom utf-8 "\316\225\316\271\317\203\316\261\316\263\317\211\316\263\316\256"]
  ::msgcat::mcset en "Insert" [encoding convertfrom utf-8 "Insert"]
  ::msgcat::mcset es "Insert" [encoding convertfrom utf-8 "Insertar"]
  ::msgcat::mcset it "Insert" [encoding convertfrom utf-8 "Inserisci"]
  ::msgcat::mcset ru "Insert" [encoding convertfrom utf-8 "\320\222\321\201\321\202\320\260\320\262\320\272\320\260"]
  ::msgcat::mcset sk "Insert" [encoding convertfrom utf-8 "Vlo\305\276i\305\245"]
  ::msgcat::mcset sq "Insert" [encoding convertfrom utf-8 "fute"]

  ::msgcat::mcset bg "insert point" [encoding convertfrom utf-8 "\320\262\320\274\321\212\320\272\320\275\320\270 \321\202\320\276\321\207\320\272\320\260"]
  ::msgcat::mcset cz "insert point" [encoding convertfrom utf-8 "vlo\305\276 bod"]
  ::msgcat::mcset de "insert point" [encoding convertfrom utf-8 "Punkt einf\303\274gen"]
  ::msgcat::mcset el "insert point" [encoding convertfrom utf-8 "\316\265\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \317\203\316\267\316\274\316\265\316\257\316\277\317\205"]
  ::msgcat::mcset it "insert point" [encoding convertfrom utf-8 "inserisci punto"]
  ::msgcat::mcset ru "insert point" [encoding convertfrom utf-8 "\320\262\321\201\321\202\320\260\320\262\320\272\320\260 \321\202\320\276\321\207\320\272\320\270"]
  ::msgcat::mcset sk "insert point" [encoding convertfrom utf-8 "vlo\305\276 bod"]
  ::msgcat::mcset sq "insert point" [encoding convertfrom utf-8 "fute piken"]

  ::msgcat::mcset bg "insert line point" [encoding convertfrom utf-8 "\320\262\320\274\321\212\320\272\320\275\320\270 \321\202\320\276\321\207\320\272\320\260 \320\276\321\202 \320\273\320\270\320\275\320\270\321\217"]
  ::msgcat::mcset cz "insert line point" [encoding convertfrom utf-8 "vlo\305\276 bod k\305\231ivky"]
  ::msgcat::mcset de "insert line point" [encoding convertfrom utf-8 "Linienpunkt einf\303\274gen"]
  ::msgcat::mcset el "insert line point" [encoding convertfrom utf-8 "\316\265\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \317\203\316\267\316\274\316\265\316\257\316\277\317\205 \316\263\317\201\316\261\316\274\316\274\316\256\317\202"]
  ::msgcat::mcset it "insert line point" [encoding convertfrom utf-8 "inserisci punto di linea"]
  ::msgcat::mcset ru "insert line point" [encoding convertfrom utf-8 "\320\262\321\201\321\202\320\260\320\262\320\272\320\260 \321\202\320\276\321\207\320\272\320\270 \320\273\320\270\320\275\320\270\320\270"]
  ::msgcat::mcset sk "insert line point" [encoding convertfrom utf-8 "vlo\305\276 bod krivky"]
  ::msgcat::mcset sq "insert line point" [encoding convertfrom utf-8 "fute piken e rjeshtit"]

  ::msgcat::mcset bg "insert area border" [encoding convertfrom utf-8 "\320\262\320\274\321\212\320\272\320\275\320\270 \320\263\321\200\320\260\320\275\320\270\321\206\320\260 \320\275\320\260 \320\276\320\261\320\273\320\260\321\201\321\202"]
  ::msgcat::mcset cz "insert area border" [encoding convertfrom utf-8 "vlo\305\276 hranici plochy"]
  ::msgcat::mcset de "insert area border" [encoding convertfrom utf-8 "Fl\303\244chenrand einf\303\274gen"]
  ::msgcat::mcset el "insert area border" [encoding convertfrom utf-8 "\316\265\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \316\277\317\201\316\257\317\211\316\275 \316\265\317\200\316\271\317\206\316\254\316\275\316\265\316\271\316\261\317\202"]
  ::msgcat::mcset it "insert area border" [encoding convertfrom utf-8 "inserisci bordo dell'area"]
  ::msgcat::mcset ru "insert area border" [encoding convertfrom utf-8 "\320\262\321\201\321\202\320\260\320\262\320\272\320\260 \320\263\321\200\320\260\320\275\320\270\321\206\321\213 \320\276\320\261\320\273\320\260\321\201\321\202\320\270"]
  ::msgcat::mcset sk "insert area border" [encoding convertfrom utf-8 "vlo\305\276 okraj plochy"]
  ::msgcat::mcset sq "insert area border" [encoding convertfrom utf-8 "fute kufirin e fushes"]

  ::msgcat::mcset bg "Select" [encoding convertfrom utf-8 "\320\230\320\267\320\261\320\265\321\200\320\270"]
  ::msgcat::mcset cz "Select" [encoding convertfrom utf-8 "Vyber"]
  ::msgcat::mcset de "Select" [encoding convertfrom utf-8 "Ausw\303\244hlen"]
  ::msgcat::mcset el "Select" [encoding convertfrom utf-8 "\316\225\317\200\316\271\316\273\316\277\316\263\316\256"]
  ::msgcat::mcset en "Select" [encoding convertfrom utf-8 "Select"]
  ::msgcat::mcset es "Select" [encoding convertfrom utf-8 "Seleccionar"]
  ::msgcat::mcset it "Select" [encoding convertfrom utf-8 "Seleziona"]
  ::msgcat::mcset ru "Select" [encoding convertfrom utf-8 "\320\222\321\213\320\261\320\276\321\200"]
  ::msgcat::mcset sk "Select" [encoding convertfrom utf-8 "Vybra\305\245"]
  ::msgcat::mcset sq "Select" [encoding convertfrom utf-8 "selekto"]

  ::msgcat::mcset bg "scale scrap" [encoding convertfrom utf-8 "\320\274\320\260\321\211\320\260\320\261\320\270\321\200\320\260\320\275\320\265 \320\275\320\260 \321\201\320\272\321\200\320\260\320\277"]
  ::msgcat::mcset cz "scale scrap" [encoding convertfrom utf-8 "m\304\233\305\231\303\255tko scrapu"]
  ::msgcat::mcset de "scale scrap" [encoding convertfrom utf-8 "Skizze skalieren"]
  ::msgcat::mcset el "scale scrap" [encoding convertfrom utf-8 "\316\261\316\273\316\273\316\261\316\263\316\256 \316\272\316\273\316\257\316\274\316\261\316\272\316\261 \317\203\316\272\317\201\316\261\317\200"]
  ::msgcat::mcset it "scale scrap" [encoding convertfrom utf-8 "riscala lo scrap"]
  ::msgcat::mcset ru "scale scrap" [encoding convertfrom utf-8 "\320\274\320\260\321\201\321\210\321\202\320\260\320\261\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265 \321\201\320\272\321\200\320\260\320\277\320\260"]
  ::msgcat::mcset sk "scale scrap" [encoding convertfrom utf-8 "mierka scrapu"]
  ::msgcat::mcset sq "scale scrap" [encoding convertfrom utf-8 "deponia e matjeve"]

  ::msgcat::mcset bg "insert sketch" [encoding convertfrom utf-8 "\320\262\320\274\321\212\320\272\320\262\320\260\320\275\320\265 \320\275\320\260 \321\201\320\272\320\270\321\206\320\260"]
  ::msgcat::mcset cz "insert sketch" [encoding convertfrom utf-8 "vlo\305\276 n\303\241\304\215rtek"]
  ::msgcat::mcset de "insert sketch" [encoding convertfrom utf-8 "Skizze einf\303\274gen"]
  ::msgcat::mcset el "insert sketch" [encoding convertfrom utf-8 "\316\265\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \317\203\317\207\316\265\316\264\316\257\316\277\317\205"]
  ::msgcat::mcset it "insert sketch" [encoding convertfrom utf-8 "inserisci disegno"]
  ::msgcat::mcset ru "insert sketch" [encoding convertfrom utf-8 "\320\262\321\201\321\202\320\260\320\262\320\272\320\260 \321\204\320\276\320\275\320\260"]
  ::msgcat::mcset sk "insert sketch" [encoding convertfrom utf-8 "vlo\305\276 n\303\241\304\215rtok"]
  ::msgcat::mcset sq "insert sketch" [encoding convertfrom utf-8 "fute skicen"]

  ::msgcat::mcset bg "creating point" [encoding convertfrom utf-8 "\321\201\321\212\320\267\320\264\320\260\320\262\320\260\320\275\320\265 \320\275\320\260 \321\202\320\276\321\207\320\272\320\260"]
  ::msgcat::mcset cz "creating point" [encoding convertfrom utf-8 "vytvo\305\231en\303\255 bodu"]
  ::msgcat::mcset de "creating point" [encoding convertfrom utf-8 "Punkt erzeugen"]
  ::msgcat::mcset el "creating point" [encoding convertfrom utf-8 "\316\264\316\267\316\274\316\271\316\277\317\205\317\201\316\263\316\257\316\261 \317\203\316\267\316\274\316\265\316\257\316\277\317\205"]
  ::msgcat::mcset en "creating point" [encoding convertfrom utf-8 "creating point"]
  ::msgcat::mcset es "creating point" [encoding convertfrom utf-8 "creando punto"]
  ::msgcat::mcset it "creating point" [encoding convertfrom utf-8 "creazione punto"]
  ::msgcat::mcset ru "creating point" [encoding convertfrom utf-8 "\321\201\320\276\320\267\320\264\320\260\320\275\320\270\320\265 \321\202\320\276\321\207\320\272\320\270"]
  ::msgcat::mcset sk "creating point" [encoding convertfrom utf-8 "vytvorenie bodu"]
  ::msgcat::mcset sq "creating point" [encoding convertfrom utf-8 "duke kriju piken"]

  ::msgcat::mcset bg "area changes" [encoding convertfrom utf-8 "\320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\320\265 \320\275\320\260 \320\276\320\261\320\273\320\260\321\201\321\202\321\202\320\260"]
  ::msgcat::mcset cz "area changes" [encoding convertfrom utf-8 "zm\304\233na parametr\305\257 oblasti"]
  ::msgcat::mcset de "area changes" [encoding convertfrom utf-8 "Fl\303\244chen\303\244nderungen"]
  ::msgcat::mcset el "area changes" [encoding convertfrom utf-8 "\316\261\316\273\316\273\316\261\316\263\316\255\317\202 \316\265\317\200\316\271\317\206\316\261\316\275\316\265\316\271\317\216\316\275"]
  ::msgcat::mcset en "area changes" [encoding convertfrom utf-8 "area changes"]
  ::msgcat::mcset es "area changes" [encoding convertfrom utf-8 "cambios de \303\241rea"]
  ::msgcat::mcset it "area changes" [encoding convertfrom utf-8 "modifiche di area"]
  ::msgcat::mcset ru "area changes" [encoding convertfrom utf-8 "\320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\320\265 \320\276\320\261\320\273\320\260\321\201\321\202\320\270"]
  ::msgcat::mcset sk "area changes" [encoding convertfrom utf-8 "zmena parametrov plochy"]
  ::msgcat::mcset sq "area changes" [encoding convertfrom utf-8 "ndrimet e fushes"]

  ::msgcat::mcset bg "point changes" [encoding convertfrom utf-8 "\320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\320\265 \320\275\320\260 \321\202\320\276\321\207\320\272\320\260"]
  ::msgcat::mcset cz "point changes" [encoding convertfrom utf-8 "zm\304\233na parametr\305\257 bodu"]
  ::msgcat::mcset de "point changes" [encoding convertfrom utf-8 "Punkt\303\244nderungen"]
  ::msgcat::mcset el "point changes" [encoding convertfrom utf-8 "\316\261\316\273\316\273\316\261\316\263\316\255\317\202 \317\203\316\267\316\274\316\265\316\257\317\211\316\275"]
  ::msgcat::mcset en "point changes" [encoding convertfrom utf-8 "point changes"]
  ::msgcat::mcset es "point changes" [encoding convertfrom utf-8 "cambios de punto"]
  ::msgcat::mcset it "point changes" [encoding convertfrom utf-8 "modifiche di punto"]
  ::msgcat::mcset ru "point changes" [encoding convertfrom utf-8 "\320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\320\265 \321\202\320\276\321\207\320\272\320\270"]
  ::msgcat::mcset sk "point changes" [encoding convertfrom utf-8 "zmena parametrov bodu"]
  ::msgcat::mcset sq "point changes" [encoding convertfrom utf-8 "ndrimet e pikes"]

  ::msgcat::mcset bg "Scrap sketch not inserted." [encoding convertfrom utf-8 "\320\235\320\265 \320\265 \320\262\320\274\321\212\320\272\320\275\320\260\321\202\320\260 \321\201\320\272\320\270\321\206\320\260 \320\262 \321\201\320\272\321\200\320\260\320\277\320\260."]
  ::msgcat::mcset cz "Scrap sketch not inserted." [encoding convertfrom utf-8 "N\303\241\304\215rtek nebyl vlo\305\276en."]
  ::msgcat::mcset de "Scrap sketch not inserted." [encoding convertfrom utf-8 "Skizze nicht eingef\303\274gt."]
  ::msgcat::mcset el "Scrap sketch not inserted." [encoding convertfrom utf-8 "\316\264\316\265\316\275 \316\265\316\271\317\203\316\256\317\207\316\270\316\267 \317\203\317\207\316\255\316\264\316\271\316\277 \317\203\316\272\317\201\316\261\317\200"]
  ::msgcat::mcset it "Scrap sketch not inserted." [encoding convertfrom utf-8 "Disegno non inerito."]
  ::msgcat::mcset ru "Scrap sketch not inserted." [encoding convertfrom utf-8 "\320\244\320\276\320\275 \321\201\320\272\321\200\320\260\320\277\320\260 \320\275\320\265 \320\262\321\201\321\202\320\260\320\262\320\273\320\265\320\275."]
  ::msgcat::mcset sk "Scrap sketch not inserted." [encoding convertfrom utf-8 "N\303\241\304\215rtok nebol vlo\305\276en\303\275."]
  ::msgcat::mcset sq "Scrap sketch not inserted." [encoding convertfrom utf-8 "skica e deponise nuk eshte futur"]

  ::msgcat::mcset bg "inserting scrap sketch" [encoding convertfrom utf-8 "\320\262\320\274\321\212\320\272\320\262\320\260\320\275\320\265 \320\275\320\260 \321\201\320\272\320\270\321\206\320\260 \320\262 \321\201\320\272\321\200\320\260\320\277\320\260"]
  ::msgcat::mcset cz "inserting scrap sketch" [encoding convertfrom utf-8 "vkl\303\241d\303\241m n\303\241\304\215rtek"]
  ::msgcat::mcset de "inserting scrap sketch" [encoding convertfrom utf-8 "F\303\274ge Skizze ein"]
  ::msgcat::mcset el "inserting scrap sketch" [encoding convertfrom utf-8 "\316\265\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \317\203\317\207\316\265\316\264\316\257\316\277\317\205 \317\203\316\272\317\201\316\261\317\200"]
  ::msgcat::mcset it "inserting scrap sketch" [encoding convertfrom utf-8 "inserimento disegno"]
  ::msgcat::mcset ru "inserting scrap sketch" [encoding convertfrom utf-8 "\320\262\321\201\321\202\320\260\320\262\320\272\320\260 \321\204\320\276\320\275\320\260 \321\201\320\272\321\200\320\260\320\277\320\260"]
  ::msgcat::mcset sk "inserting scrap sketch" [encoding convertfrom utf-8 "vlo\305\276enie n\303\241\304\215rtku"]
  ::msgcat::mcset sq "inserting scrap sketch" [encoding convertfrom utf-8 "duke future skicen e deponise"]

  ::msgcat::mcset bg "deleting scrap sketch" [encoding convertfrom utf-8 "\320\270\320\267\321\202\321\200\320\270\320\262\320\260\320\275\320\265 \320\275\320\260 \321\201\320\272\320\270\321\206\320\260 \320\276\321\202 \321\201\320\272\321\200\320\260\320\277\320\260"]
  ::msgcat::mcset cz "deleting scrap sketch" [encoding convertfrom utf-8 "odstra\305\210uji n\303\241\304\215rtek"]
  ::msgcat::mcset de "deleting scrap sketch" [encoding convertfrom utf-8 "L\303\266sche Skizze"]
  ::msgcat::mcset el "deleting scrap sketch" [encoding convertfrom utf-8 "\316\264\316\271\316\261\316\263\317\201\316\261\317\206\316\256 \317\203\317\207\316\265\316\264\316\257\316\277\317\205 \317\203\316\272\317\201\316\261\317\200"]
  ::msgcat::mcset it "deleting scrap sketch" [encoding convertfrom utf-8 "rimozione disegno"]
  ::msgcat::mcset ru "deleting scrap sketch" [encoding convertfrom utf-8 "\321\203\320\264\320\260\320\273\320\265\320\275\320\270\320\265 \321\204\320\276\320\275\320\260 \321\201\320\272\321\200\320\260\320\277\320\260"]
  ::msgcat::mcset sk "deleting scrap sketch" [encoding convertfrom utf-8 "odstr\303\241nenie n\303\241\304\215rtku"]
  ::msgcat::mcset sq "deleting scrap sketch" [encoding convertfrom utf-8 "duke fshire skicen e deponise"]

  ::msgcat::mcset bg "toggle image visibility" [encoding convertfrom utf-8 "\320\277\321\200\320\265\320\262\320\272\320\273\321\216\321\207\320\262\320\260\320\275\320\265 \320\275\320\260 \320\262\320\270\320\264\320\270\320\274\320\276\321\201\321\202\321\202\320\260 \320\275\320\260 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265"]
  ::msgcat::mcset cz "toggle image visibility" [encoding convertfrom utf-8 "p\305\231epnut\303\255 viditelnosti obr\303\241zku"]
  ::msgcat::mcset de "toggle image visibility" [encoding convertfrom utf-8 "Bildsichtbarkeit umschalten"]
  ::msgcat::mcset el "toggle image visibility" [encoding convertfrom utf-8 "\316\261\316\273\316\273\316\261\316\263\316\256 \316\277\317\201\316\261\317\204\317\214\317\204\316\267\317\204\316\261\317\202 \316\265\316\271\316\272\317\214\316\275\316\261\317\202"]
  ::msgcat::mcset en "toggle image visibility" [encoding convertfrom utf-8 "toggle image visibility"]
  ::msgcat::mcset es "toggle image visibility" [encoding convertfrom utf-8 "Cambiar visibilidad de la imagen"]
  ::msgcat::mcset it "toggle image visibility" [encoding convertfrom utf-8 "cambia visibilit\303\240 immagine"]
  ::msgcat::mcset ru "toggle image visibility" [encoding convertfrom utf-8 "\320\277\320\265\321\200\320\265\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265 \320\262\320\270\320\264\320\270\320\274\320\276\321\201\321\202\320\270 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\321\217"]
  ::msgcat::mcset sk "toggle image visibility" [encoding convertfrom utf-8 "prepni vidite\304\276nos\305\245 obr\303\241zku"]
  ::msgcat::mcset sq "toggle image visibility" [encoding convertfrom utf-8 "shikueshmeria e toggle-imazhit"]

  ::msgcat::mcset bg "grid - spacing %s" [encoding convertfrom utf-8 "\320\274\321\200\320\265\320\266\320\260 - \321\201\321\202\321\212\320\277\320\272\320\260 %s"]
  ::msgcat::mcset cz "grid - spacing %s" [encoding convertfrom utf-8 "m\305\231\303\255\305\276ka - odstup %s"]
  ::msgcat::mcset de "grid - spacing %s" [encoding convertfrom utf-8 "Gitterweite - %s"]
  ::msgcat::mcset el "grid - spacing %s" [encoding convertfrom utf-8 "\317\200\316\273\316\255\316\263\316\274\316\261 - \316\274\316\255\316\263\316\265\316\270\316\277\317\202 %s"]
  ::msgcat::mcset en "grid - spacing %s" [encoding convertfrom utf-8 "grid - spacing %s"]
  ::msgcat::mcset es "grid - spacing %s" [encoding convertfrom utf-8 "anchura cuadr\303\255cula %s"]
  ::msgcat::mcset it "grid - spacing %s" [encoding convertfrom utf-8 "reticolato - passo %s"]
  ::msgcat::mcset ru "grid - spacing %s" [encoding convertfrom utf-8 "\321\201\320\265\321\202\320\272\320\260 - \321\210\320\260\320\263 %s"]
  ::msgcat::mcset sk "grid - spacing %s" [encoding convertfrom utf-8 "sie\305\245 - rozostupy %s"]
  ::msgcat::mcset sq "grid - spacing %s" [encoding convertfrom utf-8 "%s hapesira e katroreve"]

  ::msgcat::mcset bg "station - %s" [encoding convertfrom utf-8 "\321\200\320\265\320\277\320\265\321\200 %s"]
  ::msgcat::mcset cz "station - %s" [encoding convertfrom utf-8 "m\304\233\305\231i\304\215sk\303\275 bod - %s"]
  ::msgcat::mcset de "station - %s" [encoding convertfrom utf-8 "Messpunkt - %s"]
  ::msgcat::mcset el "station - %s" [encoding convertfrom utf-8 "\317\203\316\267\316\274\316\265\316\257\316\277 \317\207\316\261\317\201\317\204\316\277\316\263\317\201\316\254\317\206\316\267\317\203\316\267\317\202 - %s"]
  ::msgcat::mcset en "station - %s" [encoding convertfrom utf-8 "station - %s"]
  ::msgcat::mcset es "station - %s" [encoding convertfrom utf-8 "estaci\303\263n %s"]
  ::msgcat::mcset it "station - %s" [encoding convertfrom utf-8 "caposaldo - %s"]
  ::msgcat::mcset ru "station - %s" [encoding convertfrom utf-8 "\320\277\320\270\320\272\320\265\321\202 - %s"]
  ::msgcat::mcset sk "station - %s" [encoding convertfrom utf-8 "m\304\233ra\304\215sk\303\275 bod - %s"]
  ::msgcat::mcset sq "station - %s" [encoding convertfrom utf-8 "stacioni - %s"]

  ::msgcat::mcset bg "New *.th2 file needs to be saved before inserting background image. Save it now?" [encoding convertfrom utf-8 "\320\235\320\276\320\262\320\270\321\217\321\202 *.th2 \321\201\320\265 \320\275\321\203\320\266\320\264\320\260\320\265 \320\276\321\202 \321\201\321\212\321\205\321\200\320\260\320\275\321\217\320\262\320\260\320\275\320\265 \320\277\321\200\320\265\320\264\320\270 \320\264\320\260 \321\201\320\265 \320\262\320\274\321\212\320\272\320\275\320\265 \321\204\320\276\320\275\320\276\320\262\320\276 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265. \320\224\320\260 \321\201\320\265 \320\227\320\260\320\277\320\270\321\210\320\270 \321\201\320\265\320\263\320\260?"]
  ::msgcat::mcset cz "New *.th2 file needs to be saved before inserting background image. Save it now?" [encoding convertfrom utf-8 "Nov\303\275 *.th2 soubor mus\303\255 b\303\275t ulo\305\276en p\305\231ed vlo\305\276en\303\255m podkladov\303\251ho obr\303\241zku. Ulo\305\276it nyn\303\255?"]
  ::msgcat::mcset de "New *.th2 file needs to be saved before inserting background image. Save it now?" [encoding convertfrom utf-8 "Neue *.th2-Datei muss gespeichert werden, bevor ein Hintergrundbild eingef\303\274gt werden kann. Jetzt speichern?"]
  ::msgcat::mcset el "New *.th2 file needs to be saved before inserting background image. Save it now?" [encoding convertfrom utf-8 "\316\244\316\277 \316\275\316\255\316\277 \316\261\317\201\317\207\316\265\316\257\316\277 *.th2 \317\200\317\201\316\255\317\200\316\265\316\271 \316\275\316\261 \316\261\317\200\316\277\316\270\316\267\316\272\316\265\317\205\317\204\316\265\316\257 \317\200\317\201\316\271\316\275 \316\265\316\271\317\203\316\261\317\207\316\270\316\265\316\257 \316\265\316\271\316\272\317\214\316\275\316\261 \317\206\317\214\316\275\317\204\316\277\317\205. \316\221\317\200\316\277\316\270\316\256\316\272\316\265\317\205\317\203\316\267 \317\204\317\216\317\201\316\261;"]
  ::msgcat::mcset en "New *.th2 file needs to be saved before inserting background image. Save it now?" [encoding convertfrom utf-8 "New *.th2 file needs to be saved before inserting background image. Save it now?"]
  ::msgcat::mcset es "New *.th2 file needs to be saved before inserting background image. Save it now?" [encoding convertfrom utf-8 "Hay que guardar el nuevo archivo .th2 antes de cargar una imagen de fondo. \302\277Guardar ahora?"]
  ::msgcat::mcset it "New *.th2 file needs to be saved before inserting background image. Save it now?" [encoding convertfrom utf-8 "Il nuovo file *.th2 deve essere salvato prima di inserire immagini di background. Salvala ora?"]
  ::msgcat::mcset ru "New *.th2 file needs to be saved before inserting background image. Save it now?" [encoding convertfrom utf-8 "\320\235\320\276\320\262\321\213\320\271 *.th2 \321\204\320\260\320\271\320\273 \320\275\321\203\320\266\320\264\320\260\320\265\321\202\321\201\321\217 \320\262 \321\201\320\276\321\205\321\200\320\260\320\275\320\265\320\275\320\270\320\270 \320\277\320\265\321\200\320\265\320\264 \320\262\321\201\321\202\320\260\320\262\320\272\320\276\320\271 \321\204\320\276\320\275\320\276\320\262\320\276\320\263\320\276 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\321\217. \320\227\320\260\320\277\320\270\321\201\320\260\321\202\321\214 \321\201\320\265\320\271\321\207\320\260\321\201?"]
  ::msgcat::mcset sk "New *.th2 file needs to be saved before inserting background image. Save it now?" [encoding convertfrom utf-8 "Pred vlo\305\276en\303\255m obr\303\241zku mus\303\255te nov\303\275 *.th2 s\303\272bor ulo\305\276i\305\245. Chcete tak urobi\305\245?"]
  ::msgcat::mcset sq "New *.th2 file needs to be saved before inserting background image. Save it now?" [encoding convertfrom utf-8 "arkivi I ri *.th2 duhet te ruhet para se te futet imazhi I prapavise.Te ruhet tani?"]

  ::msgcat::mcset bg "inserting image" [encoding convertfrom utf-8 "\320\262\320\274\321\212\320\272\320\262\320\260\320\275\320\265 \320\275\320\260 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265"]
  ::msgcat::mcset cz "inserting image" [encoding convertfrom utf-8 "vkl\303\241d\303\241m obr\303\241zek"]
  ::msgcat::mcset de "inserting image" [encoding convertfrom utf-8 "Bild einf\303\274gen"]
  ::msgcat::mcset el "inserting image" [encoding convertfrom utf-8 "\316\265\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \316\265\316\271\316\272\317\214\316\275\316\261\317\202"]
  ::msgcat::mcset en "inserting image" [encoding convertfrom utf-8 "inserting image"]
  ::msgcat::mcset es "inserting image" [encoding convertfrom utf-8 "insertando imagen"]
  ::msgcat::mcset it "inserting image" [encoding convertfrom utf-8 "inserimento immagine"]
  ::msgcat::mcset ru "inserting image" [encoding convertfrom utf-8 "\320\262\321\201\321\202\320\260\320\262\320\272\320\260 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\321\217"]
  ::msgcat::mcset sk "inserting image" [encoding convertfrom utf-8 "vklad\303\241m obr\303\241zok"]
  ::msgcat::mcset sq "inserting image" [encoding convertfrom utf-8 "duke futur imazhin"]

  ::msgcat::mcset bg "removing image" [encoding convertfrom utf-8 "\320\274\320\260\321\205\320\260\320\275\320\265 \320\275\320\260 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265"]
  ::msgcat::mcset cz "removing image" [encoding convertfrom utf-8 "odstra\305\210uji obr\303\241zek"]
  ::msgcat::mcset de "removing image" [encoding convertfrom utf-8 "Bild entfernen"]
  ::msgcat::mcset el "removing image" [encoding convertfrom utf-8 "\316\264\316\271\316\261\316\263\317\201\316\261\317\206\316\256 \316\265\316\271\316\272\317\214\316\275\316\261\317\202"]
  ::msgcat::mcset en "removing image" [encoding convertfrom utf-8 "removing image"]
  ::msgcat::mcset es "removing image" [encoding convertfrom utf-8 "eliminando imagen"]
  ::msgcat::mcset it "removing image" [encoding convertfrom utf-8 "rimozione immagine"]
  ::msgcat::mcset ru "removing image" [encoding convertfrom utf-8 "\321\203\320\264\320\260\320\273\320\265\320\275\320\270\320\265 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\321\217"]
  ::msgcat::mcset sk "removing image" [encoding convertfrom utf-8 "odstr\303\241nenie obr\303\241zku"]
  ::msgcat::mcset sq "removing image" [encoding convertfrom utf-8 "duke hequr imazhin"]

  ::msgcat::mcset bg "moving image" [encoding convertfrom utf-8 "\320\277\321\200\320\265\320\274\320\265\321\201\321\202\320\262\320\260\320\275\320\265 \320\275\320\260 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265"]
  ::msgcat::mcset cz "moving image" [encoding convertfrom utf-8 "p\305\231esunuji obr\303\241zek"]
  ::msgcat::mcset de "moving image" [encoding convertfrom utf-8 "Bild verschieben"]
  ::msgcat::mcset el "moving image" [encoding convertfrom utf-8 "\316\274\316\265\317\204\316\261\316\272\316\257\316\275\316\267\317\203\316\267 \316\265\316\271\316\272\317\214\316\275\316\261\317\202"]
  ::msgcat::mcset en "moving image" [encoding convertfrom utf-8 "moving image"]
  ::msgcat::mcset es "moving image" [encoding convertfrom utf-8 "moviendo imagen"]
  ::msgcat::mcset it "moving image" [encoding convertfrom utf-8 "spostamento immagine"]
  ::msgcat::mcset ru "moving image" [encoding convertfrom utf-8 "\320\277\320\265\321\200\320\265\320\274\320\265\321\211\320\265\320\275\320\270\320\265 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\321\217"]
  ::msgcat::mcset sk "moving image" [encoding convertfrom utf-8 "posun obr\303\241zku"]
  ::msgcat::mcset sq "moving image" [encoding convertfrom utf-8 "duke levizur imazhin"]

  ::msgcat::mcset bg "gamma correction" [encoding convertfrom utf-8 "\320\272\320\276\321\200\320\265\320\272\321\206\320\270\321\217 \320\275\320\260 \320\263\320\260\320\274\320\260\321\202\320\260"]
  ::msgcat::mcset cz "gamma correction" [encoding convertfrom utf-8 "gamma korekce"]
  ::msgcat::mcset de "gamma correction" [encoding convertfrom utf-8 "Gammakorrektur"]
  ::msgcat::mcset el "gamma correction" [encoding convertfrom utf-8 "gamma correction"]
  ::msgcat::mcset en "gamma correction" [encoding convertfrom utf-8 "gamma correction"]
  ::msgcat::mcset es "gamma correction" [encoding convertfrom utf-8 "corecci\303\263n gamma"]
  ::msgcat::mcset it "gamma correction" [encoding convertfrom utf-8 "gamma"]
  ::msgcat::mcset ru "gamma correction" [encoding convertfrom utf-8 "\320\272\320\276\321\200\321\200\320\265\320\272\321\206\320\270\321\217 \320\263\320\260\320\274\320\274\321\213"]
  ::msgcat::mcset sk "gamma correction" [encoding convertfrom utf-8 "gamma korekcia"]
  ::msgcat::mcset sq "gamma correction" [encoding convertfrom utf-8 "korekcioni gamma"]

  ::msgcat::mcset bg "Insert point" [encoding convertfrom utf-8 "\320\222\320\274\321\212\320\272\320\275\320\270 \321\202\320\276\321\207\320\272\320\260"]
  ::msgcat::mcset cz "Insert point" [encoding convertfrom utf-8 "Vlo\305\276it bod"]
  ::msgcat::mcset de "Insert point" [encoding convertfrom utf-8 "Punkt einf\303\274gen"]
  ::msgcat::mcset el "Insert point" [encoding convertfrom utf-8 "\316\225\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \317\203\316\267\316\274\316\265\316\257\316\277\317\205"]
  ::msgcat::mcset en "Insert point" [encoding convertfrom utf-8 "Insert point"]
  ::msgcat::mcset es "Insert point" [encoding convertfrom utf-8 "Insertar punto"]
  ::msgcat::mcset it "Insert point" [encoding convertfrom utf-8 "Inserisci punto"]
  ::msgcat::mcset ru "Insert point" [encoding convertfrom utf-8 "\320\222\321\201\321\202\320\260\320\262\320\270\321\202\321\214 \321\202\320\276\321\207\320\272\321\203"]
  ::msgcat::mcset sk "Insert point" [encoding convertfrom utf-8 "Vlo\305\276i\305\245 bod"]
  ::msgcat::mcset sq "Insert point" [encoding convertfrom utf-8 "fute piken"]

  ::msgcat::mcset bg "Delete point" [encoding convertfrom utf-8 "\320\230\320\267\321\202\321\200\320\270\320\271 \321\202\320\276\321\207\320\272\320\260"]
  ::msgcat::mcset cz "Delete point" [encoding convertfrom utf-8 "Smazat bod"]
  ::msgcat::mcset de "Delete point" [encoding convertfrom utf-8 "Punkt l\303\266schen"]
  ::msgcat::mcset el "Delete point" [encoding convertfrom utf-8 "\316\224\316\271\316\261\316\263\317\201\316\261\317\206\316\256 \317\203\316\267\316\274\316\265\316\257\316\277\317\205"]
  ::msgcat::mcset en "Delete point" [encoding convertfrom utf-8 "Delete point"]
  ::msgcat::mcset es "Delete point" [encoding convertfrom utf-8 "Borrar punto"]
  ::msgcat::mcset it "Delete point" [encoding convertfrom utf-8 "Rimuovi"]
  ::msgcat::mcset ru "Delete point" [encoding convertfrom utf-8 "\320\243\320\264\320\260\320\273\320\270\321\202\321\214 \321\202\320\276\321\207\320\272\321\203"]
  ::msgcat::mcset sk "Delete point" [encoding convertfrom utf-8 "Odstr\303\241ni\305\245 bod"]
  ::msgcat::mcset sq "Delete point" [encoding convertfrom utf-8 "fshije piken"]

  ::msgcat::mcset bg "Split line" [encoding convertfrom utf-8 "\320\240\320\260\320\267\320\264\320\265\320\273\320\270 \320\273\320\270\320\275\320\270\321\217"]
  ::msgcat::mcset cz "Split line" [encoding convertfrom utf-8 "Rozd\304\233lit k\305\231ivku"]
  ::msgcat::mcset de "Split line" [encoding convertfrom utf-8 "Linie teilen"]
  ::msgcat::mcset el "Split line" [encoding convertfrom utf-8 "\316\224\316\271\316\261\316\257\317\201\316\265\317\203\316\267 \316\263\317\201\316\261\316\274\316\274\316\256\317\202"]
  ::msgcat::mcset en "Split line" [encoding convertfrom utf-8 "Split line"]
  ::msgcat::mcset es "Split line" [encoding convertfrom utf-8 "Cortar l\303\255nea"]
  ::msgcat::mcset it "Split line" [encoding convertfrom utf-8 "Dividi"]
  ::msgcat::mcset ru "Split line" [encoding convertfrom utf-8 "\320\240\320\260\320\267\320\264\320\265\320\273\320\270\321\202\321\214 \320\273\320\270\320\275\320\270\321\216"]
  ::msgcat::mcset sk "Split line" [encoding convertfrom utf-8 "Rozdeli\305\245 krivku"]
  ::msgcat::mcset sq "Split line" [encoding convertfrom utf-8 "ndaje rjeshtin-vijen"]

  ::msgcat::mcset bg "deleting line point" [encoding convertfrom utf-8 "\320\230\320\267\321\202\321\200\320\270\320\271 \321\202\320\276\321\207\320\272\320\260 \320\276\321\202 \320\273\320\270\320\275\320\270\321\217\321\202\320\260"]
  ::msgcat::mcset cz "deleting line point" [encoding convertfrom utf-8 "mazan\303\255 bodu na k\305\231ivce"]
  ::msgcat::mcset de "deleting line point" [encoding convertfrom utf-8 "Linienpunkt l\303\266schen"]
  ::msgcat::mcset el "deleting line point" [encoding convertfrom utf-8 "\316\264\316\271\316\261\316\263\317\201\316\261\317\206\316\256 \317\203\316\267\316\274\316\265\316\257\316\277\317\205 \316\263\317\201\316\261\316\274\316\274\316\256\317\202"]
  ::msgcat::mcset en "deleting line point" [encoding convertfrom utf-8 "deleting line point"]
  ::msgcat::mcset es "deleting line point" [encoding convertfrom utf-8 "borrando punto de l\303\255nea"]
  ::msgcat::mcset it "deleting line point" [encoding convertfrom utf-8 "rimozione punto di linea"]
  ::msgcat::mcset ru "deleting line point" [encoding convertfrom utf-8 "\320\243\320\264\320\260\320\273\320\270\321\202\321\214 \321\202\320\276\321\207\320\272\321\203 \320\273\320\270\320\275\320\270\320\270"]
  ::msgcat::mcset sk "deleting line point" [encoding convertfrom utf-8 "mazanie bodu na \304\215iare"]
  ::msgcat::mcset sq "deleting line point" [encoding convertfrom utf-8 "duke fshire piken e rjeshtit-vijes"]

  ::msgcat::mcset bg "inserting area border" [encoding convertfrom utf-8 "\320\222\320\274\321\212\320\272\320\262\320\260\320\275\320\265 \320\275\320\260 \320\263\321\200\320\260\320\275\320\270\321\206\320\260 \320\275\320\260 \320\276\320\261\320\273\320\260\321\201\321\202"]
  ::msgcat::mcset cz "inserting area border" [encoding convertfrom utf-8 "vlo\305\276en\303\255 hranice oblasti"]
  ::msgcat::mcset de "inserting area border" [encoding convertfrom utf-8 "Fl\303\244chenrand einf\303\274gen"]
  ::msgcat::mcset el "inserting area border" [encoding convertfrom utf-8 "\316\265\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \316\277\317\201\316\257\316\277\317\205 \316\265\317\200\316\271\317\206\316\254\316\275\316\265\316\271\316\261\317\202"]
  ::msgcat::mcset en "inserting area border" [encoding convertfrom utf-8 "inserting area border"]
  ::msgcat::mcset es "inserting area border" [encoding convertfrom utf-8 "insertando l\303\255mite de \303\241rea"]
  ::msgcat::mcset it "inserting area border" [encoding convertfrom utf-8 "inserimento bordo area"]
  ::msgcat::mcset ru "inserting area border" [encoding convertfrom utf-8 "\320\262\321\201\321\202\320\260\320\262\320\272\320\260 \320\263\321\200\320\260\320\275\320\270\321\206\321\213 \320\276\320\261\320\273\320\260\321\201\321\202\320\270"]
  ::msgcat::mcset sk "inserting area border" [encoding convertfrom utf-8 "vlo\305\276enie okraja plochy"]
  ::msgcat::mcset sq "inserting area border" [encoding convertfrom utf-8 "duke future kufirin e fushes"]

  ::msgcat::mcset bg "deleting area border" [encoding convertfrom utf-8 "\320\270\320\267\321\202\321\200\320\270\320\262\320\260\320\275\320\265 \320\275\320\260 \320\263\320\260\320\275\320\270\321\206\320\260 \320\275\320\260 \320\276\320\261\320\273\320\260\321\201\321\202"]
  ::msgcat::mcset cz "deleting area border" [encoding convertfrom utf-8 "mazan\303\255 hranice oblasti"]
  ::msgcat::mcset de "deleting area border" [encoding convertfrom utf-8 "Fl\303\244chenrand l\303\266schen"]
  ::msgcat::mcset el "deleting area border" [encoding convertfrom utf-8 "\317\214\317\201\316\271\316\277 \316\265\317\200\316\271\317\206\316\254\316\275\316\265\316\271\316\261\317\202"]
  ::msgcat::mcset en "deleting area border" [encoding convertfrom utf-8 "deleting area border"]
  ::msgcat::mcset es "deleting area border" [encoding convertfrom utf-8 "borrando l\303\255mite de \303\241rea"]
  ::msgcat::mcset it "deleting area border" [encoding convertfrom utf-8 "rimozione bordo area"]
  ::msgcat::mcset ru "deleting area border" [encoding convertfrom utf-8 "\321\203\320\264\320\260\320\273\320\265\320\275\320\270\320\265 \320\263\321\200\320\260\320\275\320\270\321\206\321\213 \320\276\320\261\320\273\320\260\321\201\321\202\320\270"]
  ::msgcat::mcset sk "deleting area border" [encoding convertfrom utf-8 "mazanie okraja plochy"]
  ::msgcat::mcset sq "deleting area border" [encoding convertfrom utf-8 "duke fshire kufirin e fushes"]

  ::msgcat::mcset bg "creating area" [encoding convertfrom utf-8 "\321\201\321\212\320\267\320\264\320\260\320\262\320\260\320\275\320\265 \320\275\320\260 \320\276\320\261\320\273\320\260\321\201\321\202"]
  ::msgcat::mcset cz "creating area" [encoding convertfrom utf-8 "vytvo\305\231en\303\255 oblasti"]
  ::msgcat::mcset de "creating area" [encoding convertfrom utf-8 "Fl\303\244che erzeugen"]
  ::msgcat::mcset el "creating area" [encoding convertfrom utf-8 "\316\264\316\267\316\274\316\271\316\277\317\205\317\201\316\263\316\257\316\261 \316\265\317\200\316\271\317\206\316\254\316\275\316\265\316\271\316\261\317\202"]
  ::msgcat::mcset en "creating area" [encoding convertfrom utf-8 "creating area"]
  ::msgcat::mcset es "creating area" [encoding convertfrom utf-8 "creando \303\241rea"]
  ::msgcat::mcset it "creating area" [encoding convertfrom utf-8 "creazione area"]
  ::msgcat::mcset ru "creating area" [encoding convertfrom utf-8 "\321\201\320\276\320\267\320\264\320\260\320\275\320\270\320\265 \320\276\320\261\320\273\320\260\321\201\321\202\320\270"]
  ::msgcat::mcset sk "creating area" [encoding convertfrom utf-8 "vytvorenie plochy"]
  ::msgcat::mcset sq "creating area" [encoding convertfrom utf-8 "duke kriju fushen"]

  ::msgcat::mcset bg "creating line" [encoding convertfrom utf-8 "\321\201\321\212\320\267\320\264\320\260\320\262\320\260\320\275\320\265 \320\275\320\260 \320\273\320\270\320\275\320\270\321\217"]
  ::msgcat::mcset cz "creating line" [encoding convertfrom utf-8 "vytvo\305\231en\303\255 k\305\231ivky"]
  ::msgcat::mcset de "creating line" [encoding convertfrom utf-8 "Linie erzeugen"]
  ::msgcat::mcset el "creating line" [encoding convertfrom utf-8 "\316\264\316\267\316\274\316\271\316\277\317\205\317\201\316\263\316\257\316\261 \316\263\317\201\316\261\316\274\316\274\316\256\317\202"]
  ::msgcat::mcset en "creating line" [encoding convertfrom utf-8 "creating line"]
  ::msgcat::mcset es "creating line" [encoding convertfrom utf-8 "creando l\303\255nea"]
  ::msgcat::mcset it "creating line" [encoding convertfrom utf-8 "creazione linea"]
  ::msgcat::mcset ru "creating line" [encoding convertfrom utf-8 "\321\201\320\276\320\267\320\264\320\260\320\275\320\270\320\265 \320\273\320\270\320\275\320\270\320\270"]
  ::msgcat::mcset sk "creating line" [encoding convertfrom utf-8 "vytvorenie krivky"]
  ::msgcat::mcset sq "creating line" [encoding convertfrom utf-8 "duke kriju vijen apo rrjeshtin"]

  ::msgcat::mcset bg "line changes" [encoding convertfrom utf-8 "\320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\320\265 \320\275\320\260 \320\273\320\270\320\275\320\270\321\217"]
  ::msgcat::mcset cz "line changes" [encoding convertfrom utf-8 "zm\304\233na parametr\305\257 k\305\231ivky"]
  ::msgcat::mcset de "line changes" [encoding convertfrom utf-8 "Linien\303\244nderung"]
  ::msgcat::mcset el "line changes" [encoding convertfrom utf-8 "\316\261\316\273\316\273\316\261\316\263\316\255\317\202 \316\263\317\201\316\261\316\274\316\274\316\256\317\202"]
  ::msgcat::mcset en "line changes" [encoding convertfrom utf-8 "line changes"]
  ::msgcat::mcset es "line changes" [encoding convertfrom utf-8 "cambios de l\303\255nea"]
  ::msgcat::mcset it "line changes" [encoding convertfrom utf-8 "modifiche di linea"]
  ::msgcat::mcset ru "line changes" [encoding convertfrom utf-8 "\320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\320\265 \320\273\320\270\320\275\320\270\320\270"]
  ::msgcat::mcset sk "line changes" [encoding convertfrom utf-8 "zmena parametrov krivky"]
  ::msgcat::mcset sq "line changes" [encoding convertfrom utf-8 "ndrimet e vijes"]

  ::msgcat::mcset bg "line closing" [encoding convertfrom utf-8 "\320\267\320\260\321\202\320\262\320\260\321\200\321\217\320\275\320\265 \320\275\320\260 \320\273\320\270\320\275\320\270\321\217"]
  ::msgcat::mcset cz "line closing" [encoding convertfrom utf-8 "uzav\305\231en\303\255 k\305\231ivky"]
  ::msgcat::mcset de "line closing" [encoding convertfrom utf-8 "Linie schlie\303\237en"]
  ::msgcat::mcset el "line closing" [encoding convertfrom utf-8 "\316\272\316\273\316\265\316\257\317\203\316\271\316\274\316\277 \316\263\317\201\316\261\316\274\316\274\316\256\317\202"]
  ::msgcat::mcset en "line closing" [encoding convertfrom utf-8 "line closing"]
  ::msgcat::mcset es "line closing" [encoding convertfrom utf-8 "cerrando l\303\255nea"]
  ::msgcat::mcset it "line closing" [encoding convertfrom utf-8 "chiusura linea"]
  ::msgcat::mcset ru "line closing" [encoding convertfrom utf-8 "\320\267\320\260\320\274\321\213\320\272\320\260\320\275\320\270\320\265 \320\273\320\270\320\275\320\270\320\270"]
  ::msgcat::mcset sk "line closing" [encoding convertfrom utf-8 "uzavretie krivky"]
  ::msgcat::mcset sq "line closing" [encoding convertfrom utf-8 "mbyllja e vijes-rjeshtit"]

  ::msgcat::mcset bg "line opening" [encoding convertfrom utf-8 "\320\276\321\202\320\262\320\260\321\200\321\217\320\275\320\265 (\321\200\320\260\320\267\320\264\320\265\320\273\321\217\320\275\320\265) \320\275\320\260 \320\273\320\270\320\275\320\270\321\217"]
  ::msgcat::mcset cz "line opening" [encoding convertfrom utf-8 "otev\305\231en\303\255 k\305\231ivky"]
  ::msgcat::mcset de "line opening" [encoding convertfrom utf-8 "Linie \303\266ffnen"]
  ::msgcat::mcset el "line opening" [encoding convertfrom utf-8 "\316\254\316\275\316\277\316\271\316\263\316\274\316\261 \316\263\317\201\316\261\316\274\316\274\316\256\317\202"]
  ::msgcat::mcset en "line opening" [encoding convertfrom utf-8 "line opening"]
  ::msgcat::mcset es "line opening" [encoding convertfrom utf-8 "abriendo l\303\255nea"]
  ::msgcat::mcset it "line opening" [encoding convertfrom utf-8 "apertura linea"]
  ::msgcat::mcset ru "line opening" [encoding convertfrom utf-8 "\321\200\320\260\320\267\320\274\321\213\320\272\320\260\320\275\320\270\320\265 \320\273\320\270\320\275\320\270\320\270"]
  ::msgcat::mcset sk "line opening" [encoding convertfrom utf-8 "otvorenie krivky"]
  ::msgcat::mcset sq "line opening" [encoding convertfrom utf-8 "hapja e vijes-rjeshtit"]

  ::msgcat::mcset bg "inserting line point" [encoding convertfrom utf-8 "\320\262\320\274\321\212\320\272\320\262\320\260\320\275\320\265 \320\275\320\260 \321\202\320\276\321\207\320\272\320\260 \320\262 \320\273\320\270\320\275\320\270\321\217"]
  ::msgcat::mcset cz "inserting line point" [encoding convertfrom utf-8 "vlo\305\276en\303\255 bodu k\305\231ivky"]
  ::msgcat::mcset de "inserting line point" [encoding convertfrom utf-8 "Linienpunkt einf\303\274gen"]
  ::msgcat::mcset el "inserting line point" [encoding convertfrom utf-8 "\316\265\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \317\203\316\267\316\274\316\265\316\257\316\277 \316\263\317\201\316\261\316\274\316\274\316\256\317\202"]
  ::msgcat::mcset en "inserting line point" [encoding convertfrom utf-8 "inserting line point"]
  ::msgcat::mcset es "inserting line point" [encoding convertfrom utf-8 "insertando punto en la l\303\255nea"]
  ::msgcat::mcset it "inserting line point" [encoding convertfrom utf-8 "inserimento punto di linea"]
  ::msgcat::mcset ru "inserting line point" [encoding convertfrom utf-8 "\320\262\321\201\321\202\320\260\320\262\320\272\320\260 \321\202\320\276\321\207\320\272\320\270 \320\262 \320\273\320\270\320\275\320\270\321\216"]
  ::msgcat::mcset sk "inserting line point" [encoding convertfrom utf-8 "vlo\305\276enie bodu krivky"]
  ::msgcat::mcset sq "inserting line point" [encoding convertfrom utf-8 "duke futur piken e vijes"]

  ::msgcat::mcset bg "line ending" [encoding convertfrom utf-8 "\320\267\320\260\320\262\321\212\321\200\321\210\320\262\320\260\320\275\320\265 \320\275\320\260 \320\273\320\270\320\275\320\270\321\217"]
  ::msgcat::mcset cz "line ending" [encoding convertfrom utf-8 "ukon\304\215en\303\255 k\305\231ivky"]
  ::msgcat::mcset de "line ending" [encoding convertfrom utf-8 "Linienende"]
  ::msgcat::mcset el "line ending" [encoding convertfrom utf-8 "\317\204\316\255\316\273\316\277\317\202 \316\263\317\201\316\261\316\274\316\274\316\256\317\202"]
  ::msgcat::mcset en "line ending" [encoding convertfrom utf-8 "line ending"]
  ::msgcat::mcset es "line ending" [encoding convertfrom utf-8 "finalizando l\303\255nea"]
  ::msgcat::mcset it "line ending" [encoding convertfrom utf-8 "fine linea"]
  ::msgcat::mcset ru "line ending" [encoding convertfrom utf-8 "\320\267\320\260\320\262\320\265\321\200\321\210\320\265\320\275\320\270\320\265 \320\273\320\270\320\275\320\270\320\270"]
  ::msgcat::mcset sk "line ending" [encoding convertfrom utf-8 "ukon\304\215enie krivky"]
  ::msgcat::mcset sq "line ending" [encoding convertfrom utf-8 "rjeshti ne perfundim"]

  ::msgcat::mcset bg "moving control point" [encoding convertfrom utf-8 "\320\277\321\200\320\265\320\274\320\265\321\201\321\202\320\262\320\260\320\275\320\265 \320\275\320\260 \321\203\320\277\321\200\320\260\320\262\320\273\321\217\320\262\320\260\321\211\320\260 \321\202\320\276\321\207\320\272\320\260"]
  ::msgcat::mcset cz "moving control point" [encoding convertfrom utf-8 "posun \305\231\303\255d\303\255c\303\255ho bodu"]
  ::msgcat::mcset de "moving control point" [encoding convertfrom utf-8 "Verschiebe Kontrollpunkt"]
  ::msgcat::mcset el "moving control point" [encoding convertfrom utf-8 "\316\274\316\265\317\204\316\261\316\262\316\261\316\273\316\273\317\214\316\274\316\265\316\275\316\277 \317\203\316\267\316\274\316\265\316\257\316\277 \316\265\316\273\316\255\316\263\317\207\316\277\317\205"]
  ::msgcat::mcset en "moving control point" [encoding convertfrom utf-8 "moving control point"]
  ::msgcat::mcset es "moving control point" [encoding convertfrom utf-8 "moviendo punto de control"]
  ::msgcat::mcset it "moving control point" [encoding convertfrom utf-8 "spostamento punto di controllo"]
  ::msgcat::mcset ru "moving control point" [encoding convertfrom utf-8 "\320\277\320\265\321\200\320\265\320\274\320\265\321\211\320\265\320\275\320\270\320\265 \321\203\320\277\321\200\320\260\320\262\320\273\321\217\321\216\321\211\320\265\320\271 \321\202\320\276\321\207\320\272\320\270"]
  ::msgcat::mcset sk "moving control point" [encoding convertfrom utf-8 "posun kontroln\303\251ho bodu"]
  ::msgcat::mcset sq "moving control point" [encoding convertfrom utf-8 "duke levize piken e kontrollit"]

  ::msgcat::mcset bg "split line" [encoding convertfrom utf-8 "\321\200\320\260\320\267\320\264\320\265\320\273\321\217\320\275\320\265 \320\275\320\260 \320\273\320\270\320\275\320\270\321\217"]
  ::msgcat::mcset cz "split line" [encoding convertfrom utf-8 "rozd\304\233lit k\305\231ivku"]
  ::msgcat::mcset de "split line" [encoding convertfrom utf-8 "Linie teilen"]
  ::msgcat::mcset el "split line" [encoding convertfrom utf-8 "\316\264\316\271\316\261\316\257\317\201\316\265\317\203\316\267 \316\263\317\201\316\261\316\274\316\274\316\256\317\202"]
  ::msgcat::mcset en "split line" [encoding convertfrom utf-8 "split line"]
  ::msgcat::mcset es "split line" [encoding convertfrom utf-8 "cortar l\303\255nea"]
  ::msgcat::mcset it "split line" [encoding convertfrom utf-8 "dividi la linea"]
  ::msgcat::mcset ru "split line" [encoding convertfrom utf-8 "\321\200\320\260\320\267\320\264\320\265\320\273\320\265\320\275\320\270\320\265 \320\273\320\270\320\275\320\270\320\270"]
  ::msgcat::mcset sk "split line" [encoding convertfrom utf-8 "rozdelenie \304\215iary"]
  ::msgcat::mcset sq "split line" [encoding convertfrom utf-8 "ndarja e pikes-rjeshtit"]

  ::msgcat::mcset bg "loading text editor ..." [encoding convertfrom utf-8 "\320\267\320\260\321\200\320\265\320\266\320\264\320\260\320\275\320\265 \320\275\320\260 \321\202\320\265\320\272\321\201\321\202\320\276\320\262\320\270\321\217 \321\200\320\265\320\264\320\260\320\272\321\202\320\276\321\200 ..."]
  ::msgcat::mcset cz "loading text editor ..." [encoding convertfrom utf-8 "nahr\303\241v\303\241m text editor ..."]
  ::msgcat::mcset de "loading text editor ..." [encoding convertfrom utf-8 "Lade Texteditor ..."]
  ::msgcat::mcset el "loading text editor ..." [encoding convertfrom utf-8 "\316\206\316\275\316\277\316\271\316\263\316\274\316\261 \316\265\317\200\316\265\316\276\316\265\317\201\316\263\316\261\317\203\317\204\316\256 \316\272\316\265\316\271\316\274\316\255\316\275\316\277\317\205..."]
  ::msgcat::mcset en "loading text editor ..." [encoding convertfrom utf-8 "loading text editor ..."]
  ::msgcat::mcset es "loading text editor ..." [encoding convertfrom utf-8 "editor de texto ..."]
  ::msgcat::mcset it "loading text editor ..." [encoding convertfrom utf-8 "editor di testo ..."]
  ::msgcat::mcset ru "loading text editor ..." [encoding convertfrom utf-8 "\320\267\320\260\320\263\321\200\321\203\320\267\320\272\320\260 \321\202\320\265\320\272\321\201\321\202\320\276\320\262\320\276\320\263\320\276 \321\200\320\265\320\264\320\260\320\272\321\202\320\276\321\200\320\260 ..."]
  ::msgcat::mcset sk "loading text editor ..." [encoding convertfrom utf-8 "na\304\215\303\255tavam textov\303\275 editor"]
  ::msgcat::mcset sq "loading text editor ..." [encoding convertfrom utf-8 "duke lexuar editorin e tekstit\342\200\246"]

  ::msgcat::mcset bg "Text Editor" [encoding convertfrom utf-8 "\320\242\320\265\320\272\321\201\321\202\320\276\320\262 \321\200\320\265\320\264\320\260\320\272\321\202\320\276\321\200"]
  ::msgcat::mcset cz "Text Editor" [encoding convertfrom utf-8 "Text editor"]
  ::msgcat::mcset de "Text Editor" [encoding convertfrom utf-8 "Texteditor"]
  ::msgcat::mcset el "Text Editor" [encoding convertfrom utf-8 "\316\225\317\200\316\265\316\276\316\265\317\201\316\263\316\261\317\203\317\204\316\256\317\202 \316\272\316\265\316\271\316\274\316\255\316\275\316\277\317\205"]
  ::msgcat::mcset en "Text Editor" [encoding convertfrom utf-8 "Text Editor"]
  ::msgcat::mcset es "Text Editor" [encoding convertfrom utf-8 "Editor de texto"]
  ::msgcat::mcset it "Text Editor" [encoding convertfrom utf-8 "Editor di testo"]
  ::msgcat::mcset ru "Text Editor" [encoding convertfrom utf-8 "\320\242\320\265\320\272\321\201\321\202\320\276\320\262\320\276\320\271 \321\200\320\265\320\264\320\260\320\272\321\202\320\276\321\200"]
  ::msgcat::mcset sk "Text Editor" [encoding convertfrom utf-8 "Textov\303\275 editor"]
  ::msgcat::mcset sq "Text Editor" [encoding convertfrom utf-8 "editori I tekstit"]

  ::msgcat::mcset bg "Files" [encoding convertfrom utf-8 "\320\244\320\260\320\271\320\273\320\276\320\262\320\265"]
  ::msgcat::mcset cz "Files" [encoding convertfrom utf-8 "Soubory"]
  ::msgcat::mcset de "Files" [encoding convertfrom utf-8 "Dateien"]
  ::msgcat::mcset el "Files" [encoding convertfrom utf-8 "\316\221\317\201\317\207\316\265\316\257\316\261"]
  ::msgcat::mcset en "Files" [encoding convertfrom utf-8 "Files"]
  ::msgcat::mcset es "Files" [encoding convertfrom utf-8 "Archivos"]
  ::msgcat::mcset it "Files" [encoding convertfrom utf-8 "File"]
  ::msgcat::mcset ru "Files" [encoding convertfrom utf-8 "\320\244\320\260\320\271\320\273\321\213"]
  ::msgcat::mcset sk "Files" [encoding convertfrom utf-8 "S\303\272bory"]
  ::msgcat::mcset sq "Files" [encoding convertfrom utf-8 "fajlat-arkivi"]

  ::msgcat::mcset bg "Data table" [encoding convertfrom utf-8 "\320\242\320\260\320\261\320\273\320\270\321\206\320\260 \321\201 \320\264\320\260\320\275\320\275\320\270"]
  ::msgcat::mcset cz "Data table" [encoding convertfrom utf-8 "Datov\303\241 tabulka"]
  ::msgcat::mcset de "Data table" [encoding convertfrom utf-8 "Datentabelle"]
  ::msgcat::mcset el "Data table" [encoding convertfrom utf-8 "\316\240\316\257\316\275\316\261\316\272\316\261\317\202 \316\264\316\265\316\264\316\277\316\274\316\255\316\275\317\211\316\275"]
  ::msgcat::mcset en "Data table" [encoding convertfrom utf-8 "Data table"]
  ::msgcat::mcset es "Data table" [encoding convertfrom utf-8 "Tabla de datos"]
  ::msgcat::mcset it "Data table" [encoding convertfrom utf-8 "Tabella dei dati"]
  ::msgcat::mcset ru "Data table" [encoding convertfrom utf-8 "\320\242\320\260\320\261\320\273\320\270\321\206\320\260 \320\264\320\260\320\275\320\275\321\213\321\205"]
  ::msgcat::mcset sk "Data table" [encoding convertfrom utf-8 "D\303\241tov\303\241 tabu\304\276ka"]
  ::msgcat::mcset sq "Data table" [encoding convertfrom utf-8 "tabela e te dhenave"]

  ::msgcat::mcset bg "Search & Replace" [encoding convertfrom utf-8 "\320\242\321\212\321\200\321\201\320\265\320\275\320\265 \320\270 \320\267\320\260\320\274\321\217\320\275\320\260"]
  ::msgcat::mcset cz "Search & Replace" [encoding convertfrom utf-8 "Naj\303\255t & Nahradit"]
  ::msgcat::mcset de "Search & Replace" [encoding convertfrom utf-8 "Suchen & ersetzen"]
  ::msgcat::mcset el "Search & Replace" [encoding convertfrom utf-8 "\316\221\316\275\316\261\316\266\316\256\317\204\316\267\317\203\316\267 \316\272\316\261\316\271 \316\261\316\275\317\204\316\271\316\272\316\261\317\204\316\254\317\203\317\204\316\261\317\203\316\267"]
  ::msgcat::mcset en "Search & Replace" [encoding convertfrom utf-8 "Search & Replace"]
  ::msgcat::mcset es "Search & Replace" [encoding convertfrom utf-8 "Buscar y cambiar"]
  ::msgcat::mcset it "Search & Replace" [encoding convertfrom utf-8 "Cerca e sostituisci"]
  ::msgcat::mcset ru "Search & Replace" [encoding convertfrom utf-8 "\320\237\320\276\320\270\321\201\320\272 \320\270 \320\227\320\260\320\274\320\265\320\275\320\260"]
  ::msgcat::mcset sk "Search & Replace" [encoding convertfrom utf-8 "N\303\241jdi a Nahra\304\217"]
  ::msgcat::mcset sq "Search & Replace" [encoding convertfrom utf-8 "kerko dhe ndero vendin"]

  ::msgcat::mcset bg "Switch open files." [encoding convertfrom utf-8 "\320\237\321\200\320\265\320\262\320\272\320\273\321\216\321\207\320\270 \320\276\321\202\320\262\320\276\321\200\320\265\320\275\320\270\321\217\321\202 \321\204\320\260\320\271\320\273"]
  ::msgcat::mcset cz "Switch open files." [encoding convertfrom utf-8 "P\305\231ep\303\255na\304\215 otev\305\231en\303\275ch soubor\305\257."]
  ::msgcat::mcset de "Switch open files." [encoding convertfrom utf-8 "Ge\303\266ffnete Dateien wechseln."]
  ::msgcat::mcset el "Switch open files." [encoding convertfrom utf-8 "\316\227 \316\273\316\257\317\203\317\204\316\261 \316\264\316\265\316\257\317\207\316\275\316\265\316\271 \317\204\316\261 \316\261\316\275\316\277\316\271\316\272\317\204\316\254 \316\261\317\201\317\207\316\265\316\257\316\261. \316\225\317\200\316\271\316\273\316\255\316\276\316\265\317\204\316\265 \316\261\317\205\317\204\317\214 \317\200\316\277\317\205 \317\203\316\261\317\202 \316\265\316\275\316\264\316\271\316\261\317\206\316\255\317\201\316\265\316\271."]
  ::msgcat::mcset en "Switch open files." [encoding convertfrom utf-8 "This list shows open files. Click on the one you are interested."]
  ::msgcat::mcset es "Switch open files." [encoding convertfrom utf-8 "Esta lista muestra los archivos abiertos. Haz clic en el que te interese."]
  ::msgcat::mcset it "Switch open files." [encoding convertfrom utf-8 "Cambia tra i file aperti."]
  ::msgcat::mcset ru "Switch open files." [encoding convertfrom utf-8 "\320\237\320\276\320\274\320\265\320\275\321\217\321\202\321\214 \320\276\321\202\320\272\321\200\321\213\321\202\321\213\320\271 \321\204\320\260\320\271\320\273."]
  ::msgcat::mcset sk "Switch open files." [encoding convertfrom utf-8 "Prep\303\255na\304\215 medzi otvoren\303\275mi s\303\272bormi."]
  ::msgcat::mcset sq "Switch open files." [encoding convertfrom utf-8 "kjo liste tregon fajlat e hapura. Kliko ne ate te cilen je I interesuar."]

  ::msgcat::mcset bg "Encoding" [encoding convertfrom utf-8 "\320\232\320\276\320\264\320\270\321\200\320\276\320\262\320\272\320\260"]
  ::msgcat::mcset cz "Encoding" [encoding convertfrom utf-8 "K\303\263dov\303\241n\303\255"]
  ::msgcat::mcset de "Encoding" [encoding convertfrom utf-8 "Zeichenkodierung"]
  ::msgcat::mcset el "Encoding" [encoding convertfrom utf-8 "\316\232\317\211\316\264\316\271\316\272\316\277\317\203\316\265\316\273\316\257\316\264\316\261"]
  ::msgcat::mcset en "Encoding" [encoding convertfrom utf-8 "Encoding"]
  ::msgcat::mcset es "Encoding" [encoding convertfrom utf-8 "Codificaci\303\263n"]
  ::msgcat::mcset it "Encoding" [encoding convertfrom utf-8 "Encoding"]
  ::msgcat::mcset ru "Encoding" [encoding convertfrom utf-8 "\320\232\320\276\320\264\320\270\321\200\320\276\320\262\320\272\320\260"]
  ::msgcat::mcset sk "Encoding" [encoding convertfrom utf-8 "K\303\263dovanie"]
  ::msgcat::mcset sq "Encoding" [encoding convertfrom utf-8 "de-kodimi"]

  ::msgcat::mcset bg "Change to" [encoding convertfrom utf-8 "\320\237\321\200\320\276\320\274\320\265\320\275\320\270 \320\275\320\260"]
  ::msgcat::mcset cz "Change to" [encoding convertfrom utf-8 "Zm\304\233nit na"]
  ::msgcat::mcset de "Change to" [encoding convertfrom utf-8 "\303\204ndern in"]
  ::msgcat::mcset el "Change to" [encoding convertfrom utf-8 "\316\221\316\273\316\273\316\261\316\263\316\256 \317\203\316\265"]
  ::msgcat::mcset en "Change to" [encoding convertfrom utf-8 "Change to"]
  ::msgcat::mcset es "Change to" [encoding convertfrom utf-8 "Cambiar a"]
  ::msgcat::mcset it "Change to" [encoding convertfrom utf-8 "Cambia a"]
  ::msgcat::mcset ru "Change to" [encoding convertfrom utf-8 "\320\230\320\267\320\274\320\265\320\275\320\270\321\202\321\214 \320\275\320\260"]
  ::msgcat::mcset sk "Change to" [encoding convertfrom utf-8 "Zmeni\305\245 na"]
  ::msgcat::mcset sq "Change to" [encoding convertfrom utf-8 "ndero ne"]

  ::msgcat::mcset bg "To set file encoding, type encoding name and press  button." [encoding convertfrom utf-8 "\320\227\320\260 \320\267\320\260\320\264\320\260\320\262\320\275\320\265 \320\275\320\260 \320\272\320\276\320\264\320\270\321\200\320\260\320\276\320\262\320\272\320\260\321\202\320\260 \320\275\320\260 \321\204\320\260\320\271\320\273\320\260, \320\262\321\212\320\262\320\265\320\264\320\265\321\202\320\265 \320\270\320\274\320\265\321\202\320\276 \320\275\320\260 \320\272\320\276\320\264\320\270\321\200\320\276\320\262\320\272\320\260\321\202\320\260 \320\270 \320\275\320\260\321\202\320\270\321\201\320\275\320\265\321\202\320\265 \320\261\321\203\321\202\320\276\320\275\320\260 <\320\237\321\200\320\276\320\274\321\217\320\275\320\260>"]
  ::msgcat::mcset cz "To set file encoding, type encoding name and press  button." [encoding convertfrom utf-8 "Nastaven\303\255 k\303\263dov\303\241n\303\255 - vyberte k\303\263dov\303\241n\303\255 a stiskn\304\233te tla\304\215\303\255tko ."]
  ::msgcat::mcset de "To set file encoding, type encoding name and press  button." [encoding convertfrom utf-8 "Um Zeichenkodierung zu \303\244ndern, gebe den Namen der Kodierung ein und dr\303\274cke den  Knopf."]
  ::msgcat::mcset el "To set file encoding, type encoding name and press  button." [encoding convertfrom utf-8 "\316\223\316\271\316\261 \317\201\317\215\316\270\316\274\316\271\317\203\316\267 \316\272\317\211\316\264\316\271\316\272\316\277\317\203\316\265\316\273\316\257\316\264\316\261\317\202, \316\265\316\271\317\203\316\254\316\263\316\265\317\204\316\265 \317\214\316\275\316\277\316\274\316\261 \316\272\316\261\316\271 \317\200\316\261\317\204\316\256\317\203\317\204\316\265 \317\204\316\277 \316\272\316\277\317\205\316\274\317\200\316\257 <\316\221\316\273\316\273\316\261\316\263\316\256>"]
  ::msgcat::mcset en "To set file encoding, type encoding name and press  button." [encoding convertfrom utf-8 "To set file encoding, type encoding name and press  button."]
  ::msgcat::mcset es "To set file encoding, type encoding name and press  button." [encoding convertfrom utf-8 "Para ajustar la codificaci\303\263n, escoje la que quieras y pulsa ."]
  ::msgcat::mcset it "To set file encoding, type encoding name and press  button." [encoding convertfrom utf-8 "Per impostare l'encoding, scrivi il nome dell'encoding e premi il bottone "]
  ::msgcat::mcset ru "To set file encoding, type encoding name and press  button." [encoding convertfrom utf-8 "\320\224\320\273\321\217 \320\267\320\260\320\264\320\260\320\275\320\270\321\217 \320\272\320\276\320\264\320\270\321\200\320\276\320\262\320\272\320\270 \321\204\320\260\320\271\320\273\320\260 \320\262\320\262\320\265\320\264\320\270\321\202\320\265 \320\270\320\274\321\217 \320\272\320\276\320\264\320\270\321\200\320\276\320\262\320\272\320\270 \320\270 \320\275\320\260\320\266\320\274\320\270\321\202\320\265 \320\272\320\275\320\276\320\277\320\272\321\203 <\320\230\320\267\320\274\320\265\320\275\320\270\321\202\321\214>."]
  ::msgcat::mcset sk "To set file encoding, type encoding name and press  button." [encoding convertfrom utf-8 "Na nastavenie k\303\263dovania, vlo\305\276te identifik\303\241tor k\303\263dovania a stla\304\215te ."]
  ::msgcat::mcset sq "To set file encoding, type encoding name and press  button." [encoding convertfrom utf-8 "per te vendos fajlin per dekodim, shtype emrin per dekodim dhe kliko butonin "]

  ::msgcat::mcset bg "Scan data format" [encoding convertfrom utf-8 "\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\270 \321\204\320\276\321\200\320\274\320\260\321\202\320\260 \320\275\320\260 \320\264\320\260\320\275\320\275\320\270\321\202\320\265"]
  ::msgcat::mcset cz "Scan data format" [encoding convertfrom utf-8 "Skenovat form\303\241t dat"]
  ::msgcat::mcset de "Scan data format" [encoding convertfrom utf-8 "Datenformat einlesen"]
  ::msgcat::mcset el "Scan data format" [encoding convertfrom utf-8 "\316\210\316\273\316\265\316\263\317\207\316\277\317\202 \316\274\316\277\317\201\317\206\316\256\317\202 \316\264\316\265\316\264\316\277\316\274\316\255\316\275\317\211\316\275"]
  ::msgcat::mcset en "Scan data format" [encoding convertfrom utf-8 "Scan data format"]
  ::msgcat::mcset es "Scan data format" [encoding convertfrom utf-8 "Escanear formato de datos"]
  ::msgcat::mcset it "Scan data format" [encoding convertfrom utf-8 "Imposta formato dati"]
  ::msgcat::mcset ru "Scan data format" [encoding convertfrom utf-8 "\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\270\321\202\321\214 \321\204\320\276\321\200\320\274\320\260\321\202 \320\264\320\260\320\275\320\275\321\213\321\205"]
  ::msgcat::mcset sk "Scan data format" [encoding convertfrom utf-8 "N\303\241jdi form\303\241t d\303\241t"]
  ::msgcat::mcset sq "Scan data format" [encoding convertfrom utf-8 "skano formatin e shenimeve"]

  ::msgcat::mcset bg "Scan data format and rebuild centerline data insertion tool." [encoding convertfrom utf-8 "\320\220\320\262\321\202\320\276\320\274\320\260\321\202\320\270\321\207\320\275\320\276 \320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\270 \321\204\320\276\321\200\320\274\320\260\321\202\320\260 \320\275\320\260 \320\264\320\260\320\275\320\275\320\270\321\202\320\265 \320\270 \320\277\321\200\320\265\321\203\321\201\321\202\321\200\320\276\320\271 \320\277\320\276\320\273\320\265\321\202\320\260\321\202\320\260 \320\267\320\260 \320\262\321\212\320\262\320\265\320\266\320\264\320\260\320\275\320\265."]
  ::msgcat::mcset cz "Scan data format and rebuild centerline data insertion tool." [encoding convertfrom utf-8 "P\305\231e\304\215te form\303\241t dat v souboru a uprav\303\255 pole pro vkl\303\241d\303\241n\303\255 m\304\233\305\231en\303\255."]
  ::msgcat::mcset de "Scan data format and rebuild centerline data insertion tool." [encoding convertfrom utf-8 "Datenformat einlesen und Messdateneditor anpassen."]
  ::msgcat::mcset el "Scan data format and rebuild centerline data insertion tool." [encoding convertfrom utf-8 "\316\225\316\273\316\255\316\263\317\207\316\265\316\271 \317\204\316\267\316\275 \317\203\316\265\316\271\317\201\316\254 \317\204\317\211\316\275 \316\264\316\265\316\264\316\277\316\274\316\255\316\275\317\211\316\275 \316\272\316\261\316\271 \316\276\316\261\316\275\316\261\317\203\317\205\316\275\317\204\316\254\317\203\317\203\316\265\316\271 \316\261\317\205\317\204\317\214\316\274\316\261\317\204\316\261 \317\204\316\261 textbox \316\263\316\271\316\261 \316\265\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \316\264\316\265\316\264\316\277\316\274\316\255\316\275\317\211\316\275."]
  ::msgcat::mcset en "Scan data format and rebuild centerline data insertion tool." [encoding convertfrom utf-8 "Scans data order and rebuilds data insertion textboxes accordingly."]
  ::msgcat::mcset es "Scan data format and rebuild centerline data insertion tool." [encoding convertfrom utf-8 "Ajusta las casillas al orden en que has tomado tus datos."]
  ::msgcat::mcset it "Scan data format and rebuild centerline data insertion tool." [encoding convertfrom utf-8 "Imposta il formato dati e ricostruisci la tabella inserimento dati."]
  ::msgcat::mcset ru "Scan data format and rebuild centerline data insertion tool." [encoding convertfrom utf-8 "\320\220\320\262\321\202\320\276\320\274\320\260\321\202\320\270\321\207\320\265\321\201\320\272\320\270 \320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\270\321\202\321\214 \321\204\320\276\321\200\320\274\320\260\321\202 \320\264\320\260\320\275\320\275\321\213\321\205 \320\270 \320\277\320\265\321\200\320\265\321\201\321\202\321\200\320\276\320\270\321\202\321\214 \320\277\320\276\320\273\321\217 \320\262\320\262\320\276\320\264\320\260."]
  ::msgcat::mcset sk "Scan data format and rebuild centerline data insertion tool." [encoding convertfrom utf-8 "Na\304\215\303\255ta form\303\241t d\303\241t z predch\303\241dzaj\303\272cich riadkov a pr\303\255slu\305\241ne zmen\303\255 panel na vkladanie d\303\241t."]
  ::msgcat::mcset sq "Scan data format and rebuild centerline data insertion tool." [encoding convertfrom utf-8 "skanon formatin e shenimeve dhe rinderton tekst-katroret per futjen e shenimeve net e njejten kohe"]

  ::msgcat::mcset bg "Enter station names" [encoding convertfrom utf-8 "\320\222\321\212\320\262\320\265\320\266\320\264\320\260\320\275\320\265 \320\275\320\260 \320\270\320\274\320\265\321\202\320\276 \320\275\320\260 \321\200\320\265\320\277\320\265\321\200\320\260\320\275\320\260\321\202\320\260 \321\202\320\276\321\207\320\272\320\260"]
  ::msgcat::mcset cz "Enter station names" [encoding convertfrom utf-8 "Zad\303\241vat n\303\241zvy bod\305\257"]
  ::msgcat::mcset de "Enter station names" [encoding convertfrom utf-8 "Messpunktnamen eingeben"]
  ::msgcat::mcset el "Enter station names" [encoding convertfrom utf-8 "\316\225\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \316\277\316\275\316\277\316\274\316\254\317\204\317\211\316\275 \317\203\316\267\316\274\316\265\316\257\317\211\316\275 \317\207\316\261\317\201\317\204\316\277\316\263\317\201\316\254\317\206\316\267\317\203\316\267\317\202"]
  ::msgcat::mcset en "Enter station names" [encoding convertfrom utf-8 "Enter station names"]
  ::msgcat::mcset es "Enter station names" [encoding convertfrom utf-8 "Nombrar estaciones"]
  ::msgcat::mcset it "Enter station names" [encoding convertfrom utf-8 "Scrivi nomi capisaldi"]
  ::msgcat::mcset ru "Enter station names" [encoding convertfrom utf-8 "\320\222\320\262\320\276\320\264 \320\275\320\276\320\274\320\265\321\200\320\260 \321\201\320\273\320\265\320\264\321\203\321\216\321\211\320\265\320\263\320\276 \320\277\320\270\320\272\320\265\321\202\320\260"]
  ::msgcat::mcset sk "Enter station names" [encoding convertfrom utf-8 "Zad\303\241vanie n\303\241zvov bodov"]
  ::msgcat::mcset sq "Enter station names" [encoding convertfrom utf-8 "futi emrat e stacioneve"]

  ::msgcat::mcset bg "Check if you want to insert station names for each shot." [encoding convertfrom utf-8 "\320\241\320\273\320\276\320\266\320\265\321\202\320\265 \320\276\321\202\320\261\320\265\320\273\321\217\320\267\320\272\320\260, \320\260\320\272\320\276 \320\270\321\201\320\272\320\260\321\202\320\265 \321\201\320\273\320\265\320\264\320\262\320\260\321\211\320\270\321\202\320\265 \320\270\320\274\320\265\320\275\320\260 \320\275\320\260 \321\200\320\265\320\277\320\265\321\200\320\270 \320\264\320\260 \321\201\320\265 \320\262\321\212\320\262\320\265\320\266\320\264\320\260\321\202 \320\260\320\262\321\202\320\276\320\274\320\260\321\202\320\270\321\207\320\275\320\276."]
  ::msgcat::mcset cz "Check if you want to insert station names for each shot." [encoding convertfrom utf-8 "Za\305\241krtn\304\233te pokud chcete zad\303\241vat n\303\241zev pro ka\305\276d\303\275 m\304\233\305\231i\304\215sk\303\275 bod."]
  ::msgcat::mcset de "Check if you want to insert station names for each shot." [encoding convertfrom utf-8 "Ankreuzen, wenn du Messpunktnamen f\303\274r jede Strecke eingeben willst."]
  ::msgcat::mcset el "Check if you want to insert station names for each shot." [encoding convertfrom utf-8 "\316\225\317\200\316\271\316\273\316\255\316\276\317\204\316\265 \316\263\316\271\316\261 \316\265\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \317\204\317\211\316\275 \316\277\316\275\316\277\316\274\316\254\317\204\317\211\316\275 \317\204\317\211\316\275 \317\203\316\267\316\274\316\265\316\257\317\211\316\275 \317\207\316\261\317\201\317\204\316\277\316\263\317\201\316\254\317\206\316\267\317\203\316\267\317\202 \316\263\316\271\316\261 \317\204\316\277 \316\272\316\254\316\270\316\265 \316\264\316\271\316\254\316\275\317\205\317\203\316\274\316\261."]
  ::msgcat::mcset en "Check if you want to insert station names for each shot." [encoding convertfrom utf-8 "Check if you want to insert station names for each shot."]
  ::msgcat::mcset es "Check if you want to insert station names for each shot." [encoding convertfrom utf-8 "Marcar si se quiere dar un nombre a cada tirada topo."]
  ::msgcat::mcset it "Check if you want to insert station names for each shot." [encoding convertfrom utf-8 "Attiva per inserire i nomi dei capisaldi per ogni tratta."]
  ::msgcat::mcset ru "Check if you want to insert station names for each shot." [encoding convertfrom utf-8 "\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\270\321\202\320\265 \320\276\321\202\320\274\320\265\321\202\320\272\321\203, \320\265\321\201\320\273\320\270 \321\205\320\276\321\202\320\270\321\202\320\265, \321\207\321\202\320\276\320\261\321\213 \320\277\321\200\320\276\320\270\321\201\321\205\320\276\320\264\320\270\320\273 \320\260\320\262\321\202\320\276\320\274\320\260\321\202\320\270\321\207\320\265\321\201\320\272\320\270\320\271 \320\262\320\262\320\276\320\264 \320\275\320\276\320\274\320\265\321\200\320\260 \321\201\320\273\320\265\320\264\321\203\321\216\321\211\320\265\320\263\320\276 \320\277\320\270\320\272\320\265\321\202\320\260."]
  ::msgcat::mcset sk "Check if you want to insert station names for each shot." [encoding convertfrom utf-8 "Za\305\241krtnite pokia\304\276 chcete vklada\305\245 aj men\303\241 bodov pre ka\305\276d\303\272 z\303\241meru."]
  ::msgcat::mcset sq "Check if you want to insert station names for each shot." [encoding convertfrom utf-8 "kontrollo nese deshiron ti fusesh emrat e stacioneve per secilin foto"]

  ::msgcat::mcset bg "Auto format selection" [encoding convertfrom utf-8 "\320\220\320\262\321\202\320\276\320\274\320\260\321\202\320\270\321\207\320\265\320\275 \320\270\320\267\320\261\320\276\321\200 \320\275\320\260 \321\204\320\276\321\200\320\274\320\260\321\202."]
  ::msgcat::mcset cz "Auto format selection" [encoding convertfrom utf-8 "Auto form\303\241tov\303\241n\303\255 v\303\275b\304\233ru"]
  ::msgcat::mcset de "Auto format selection" [encoding convertfrom utf-8 "Auswahl formatieren"]
  ::msgcat::mcset el "Auto format selection" [encoding convertfrom utf-8 "\316\221\317\205\317\204\317\214\316\274\316\261\317\204\316\267 \316\274\316\277\317\201\317\206\316\277\317\200\316\277\316\257\316\267\317\203\316\267 \316\265\317\200\316\271\316\273\316\277\316\263\316\256\317\202"]
  ::msgcat::mcset en "Auto format selection" [encoding convertfrom utf-8 "Auto format selection"]
  ::msgcat::mcset es "Auto format selection" [encoding convertfrom utf-8 "Autoformatear selecci\303\263n"]
  ::msgcat::mcset it "Auto format selection" [encoding convertfrom utf-8 "Selezione formato automatico."]
  ::msgcat::mcset ru "Auto format selection" [encoding convertfrom utf-8 "\320\237\320\265\321\200\320\265\321\201\321\202\321\200\320\276\320\270\321\202\321\214 \320\262\321\213\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265 \320\264\320\260\320\275\320\275\321\213\320\265"]
  ::msgcat::mcset sk "Auto format selection" [encoding convertfrom utf-8 "Naform\303\241tuj v\303\275ber"]
  ::msgcat::mcset sq "Auto format selection" [encoding convertfrom utf-8 "zgjedhja automatike e formatit"]

  ::msgcat::mcset bg "Format selection to given table." [encoding convertfrom utf-8 "\320\230\320\267\320\261\320\276\321\200 \320\275\320\260 \321\204\320\276\321\200\320\274\320\260\321\202 \320\267\320\260 \320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\260 \321\202\320\260\320\261\320\273\320\270\321\206\320\260"]
  ::msgcat::mcset cz "Format selection to given table." [encoding convertfrom utf-8 "Naform\303\241tuje v\303\275b\304\233r do tabulky."]
  ::msgcat::mcset de "Format selection to given table." [encoding convertfrom utf-8 "Formatiere Auswahl zur gegebenen Tabelle."]
  ::msgcat::mcset el "Format selection to given table." [encoding convertfrom utf-8 "\316\234\316\277\317\201\317\206\316\277\317\200\316\277\316\257\316\267\317\203\316\267 \316\265\317\200\316\271\316\273\316\277\316\263\316\256\317\202 \317\203\317\215\316\274\317\206\317\211\316\275\316\261 \316\274\316\265 \317\204\316\277 \316\264\316\265\316\264\316\277\316\274\316\255\316\275\316\277 \317\200\316\257\316\275\316\261\316\272\316\261."]
  ::msgcat::mcset en "Format selection to given table." [encoding convertfrom utf-8 "Format selection to given table."]
  ::msgcat::mcset es "Format selection to given table." [encoding convertfrom utf-8 "Formatea la seleccion (ajusta tabuladores, etc)."]
  ::msgcat::mcset it "Format selection to given table." [encoding convertfrom utf-8 "Imposta selezione alla tabella specificata."]
  ::msgcat::mcset ru "Format selection to given table." [encoding convertfrom utf-8 "\320\237\321\200\320\270\320\262\320\265\321\201\321\202\320\270 \320\262\321\213\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265 \320\264\320\260\320\275\320\275\321\213\320\265 \320\272 \320\267\320\260\320\264\320\260\320\275\320\275\320\276\320\274\321\203 \321\204\320\276\321\200\320\274\320\260\321\202\321\203."]
  ::msgcat::mcset sk "Format selection to given table." [encoding convertfrom utf-8 "Naform\303\241tuje v\303\275ber do d\303\241tovej tabu\304\276ky."]
  ::msgcat::mcset sq "Format selection to given table." [encoding convertfrom utf-8 "zgjedhja e formatit per tabelen e dhene"]

  ::msgcat::mcset bg "search" [encoding convertfrom utf-8 "\321\202\321\212\321\200\321\201\320\265\320\275\320\265"]
  ::msgcat::mcset cz "search" [encoding convertfrom utf-8 "hledat"]
  ::msgcat::mcset de "search" [encoding convertfrom utf-8 "Suche"]
  ::msgcat::mcset el "search" [encoding convertfrom utf-8 "\316\261\316\275\316\261\316\266\316\256\317\204\316\267\317\203\316\267"]
  ::msgcat::mcset en "search" [encoding convertfrom utf-8 "search"]
  ::msgcat::mcset es "search" [encoding convertfrom utf-8 "buscar"]
  ::msgcat::mcset it "search" [encoding convertfrom utf-8 "cerca"]
  ::msgcat::mcset ru "search" [encoding convertfrom utf-8 "\320\277\320\276\320\270\321\201\320\272"]
  ::msgcat::mcset sk "search" [encoding convertfrom utf-8 "h\304\276adaj"]
  ::msgcat::mcset sq "search" [encoding convertfrom utf-8 "kerko"]

  ::msgcat::mcset bg "Search expression." [encoding convertfrom utf-8 "\320\230\320\267\321\200\320\260\320\267 \320\267\320\260 \321\202\321\212\321\200\321\201\320\265\320\275\320\265"]
  ::msgcat::mcset cz "Search expression." [encoding convertfrom utf-8 "Hledan\303\275 v\303\275raz."]
  ::msgcat::mcset de "Search expression." [encoding convertfrom utf-8 "Suche Muster."]
  ::msgcat::mcset el "Search expression." [encoding convertfrom utf-8 "\316\240\316\273\316\267\316\272\317\204\317\201\316\277\316\273\316\277\316\263\316\256\317\203\316\265\317\204\316\265 \317\204\316\271\317\202 \316\273\316\255\316\276\316\265\316\271\317\202 \316\263\316\271\316\261 \316\261\316\275\316\261\316\266\316\256\317\204\316\267\317\203\316\267."]
  ::msgcat::mcset en "Search expression." [encoding convertfrom utf-8 "Enter word(s) to search for."]
  ::msgcat::mcset es "Search expression." [encoding convertfrom utf-8 "Introducir palabra(s) a buscar."]
  ::msgcat::mcset it "Search expression." [encoding convertfrom utf-8 "Testo da cercare."]
  ::msgcat::mcset ru "Search expression." [encoding convertfrom utf-8 "\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\320\265 \320\277\320\276\320\270\321\201\320\272\320\260."]
  ::msgcat::mcset sk "Search expression." [encoding convertfrom utf-8 "H\304\276adan\303\275 v\303\275raz."]
  ::msgcat::mcset sq "Search expression." [encoding convertfrom utf-8 "shkruaje fjalen per tu kerkuar"]

  ::msgcat::mcset bg "replace" [encoding convertfrom utf-8 "\320\267\320\260\320\274\321\217\320\275\320\260"]
  ::msgcat::mcset cz "replace" [encoding convertfrom utf-8 "nahradit"]
  ::msgcat::mcset de "replace" [encoding convertfrom utf-8 "Ersetze"]
  ::msgcat::mcset el "replace" [encoding convertfrom utf-8 "\316\221\316\275\317\204\316\271\316\272\316\261\317\204\316\254\317\203\317\204\316\261\317\203\316\267"]
  ::msgcat::mcset en "replace" [encoding convertfrom utf-8 "replace"]
  ::msgcat::mcset es "replace" [encoding convertfrom utf-8 "cambiar"]
  ::msgcat::mcset it "replace" [encoding convertfrom utf-8 "sostituisci"]
  ::msgcat::mcset ru "replace" [encoding convertfrom utf-8 "\320\267\320\260\320\274\320\265\320\275\320\260"]
  ::msgcat::mcset sk "replace" [encoding convertfrom utf-8 "nahradi\305\245"]
  ::msgcat::mcset sq "replace" [encoding convertfrom utf-8 "ndero vendin"]

  ::msgcat::mcset bg "Check whether to replace found expression." [encoding convertfrom utf-8 "\320\241\320\273\320\276\320\266\320\265\321\202\320\265 \320\276\321\202\320\261\320\265\320\273\321\217\320\267\320\272\320\260, \320\260\320\272\320\276 \320\270\321\201\320\272\320\260\321\202\320\265 \320\264\320\260 \321\201\320\265 \320\270\320\267\320\262\321\212\321\200\321\210\320\270 \320\267\320\260\320\274\321\217\320\275\320\260."]
  ::msgcat::mcset cz "Check whether to replace found expression." [encoding convertfrom utf-8 "Za\305\241krtn\304\233te pokud chcete nahradit nalezen\303\251 v\303\275razy."]
  ::msgcat::mcset el "Check whether to replace found expression." [encoding convertfrom utf-8 "\316\225\317\200\316\271\316\273\316\255\316\276\317\204\316\265 \316\263\316\271\316\261 \316\261\316\275\317\204\316\271\316\272\316\261\317\204\316\254\317\203\317\204\316\261\317\203\316\267 \317\204\316\267\317\202 \316\265\317\205\317\201\316\265\316\270\316\265\316\257\317\203\316\261\317\202 \317\200\316\265\317\201\316\257\317\200\317\204\317\211\317\203\316\267\317\202."]
  ::msgcat::mcset en "Check whether to replace found expression." [encoding convertfrom utf-8 "Check whether to replace found expression."]
  ::msgcat::mcset es "Check whether to replace found expression." [encoding convertfrom utf-8 "Marcar para cambiar los lo encontrado por lo que se escriba aqu\303\255."]
  ::msgcat::mcset it "Check whether to replace found expression." [encoding convertfrom utf-8 "Attiva per sostituire il testo trovato."]
  ::msgcat::mcset ru "Check whether to replace found expression." [encoding convertfrom utf-8 "\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\270\321\202\320\265 \320\276\321\202\320\274\320\265\321\202\320\272\321\203, \320\265\321\201\320\273\320\270 \321\205\320\276\321\202\320\270\321\202\320\265 \320\277\321\200\320\276\320\270\320\267\320\262\320\265\321\201\321\202\320\270 \320\267\320\260\320\274\320\265\320\275\321\203."]
  ::msgcat::mcset sk "Check whether to replace found expression." [encoding convertfrom utf-8 "Za\305\241krtn\303\272\305\245 pokia\304\276 sa m\303\241 n\303\241jden\303\275 v\303\275raz nahradi\305\245 in\303\275m."]
  ::msgcat::mcset sq "Check whether to replace found expression." [encoding convertfrom utf-8 "kontrollo a duhet te ndrohet fjalia e gjetur"]

  ::msgcat::mcset bg "Replace expression." [encoding convertfrom utf-8 "\320\230\320\267\321\200\320\260\320\267 \320\267\320\260 \320\267\320\260\320\274\321\217\320\275\320\260."]
  ::msgcat::mcset cz "Replace expression." [encoding convertfrom utf-8 "\305\230et\304\233zec, kter\303\275m bude v\303\275raz nahrazen."]
  ::msgcat::mcset de "Replace expression." [encoding convertfrom utf-8 "Ersetze Muster."]
  ::msgcat::mcset el "Replace expression." [encoding convertfrom utf-8 "\316\244\316\261 \316\261\317\200\316\277\317\204\316\265\316\273\316\255\317\203\316\274\316\261\317\204\316\261 \316\261\316\275\316\261\316\266\316\256\317\204\316\267\317\203\316\267\317\202 \316\270\316\261 \316\261\316\275\317\204\316\271\316\272\316\261\317\204\316\261\317\203\317\204\316\261\316\270\316\277\317\215\316\275 \316\261\317\200\317\214 \317\204\316\277 \317\203\317\205\316\263\316\272\316\265\316\272\317\201\316\271\316\274\316\255\316\275\316\277 \316\272\316\265\316\257\316\274\316\265\316\275\316\277."]
  ::msgcat::mcset en "Replace expression." [encoding convertfrom utf-8 "Search results will be replaced by the string entered here."]
  ::msgcat::mcset es "Replace expression." [encoding convertfrom utf-8 "Los resultados de la b\303\272squeda ser\303\241n cambiados por lo que escribas aqu\303\255."]
  ::msgcat::mcset it "Replace expression." [encoding convertfrom utf-8 "Sostituisci testo."]
  ::msgcat::mcset ru "Replace expression." [encoding convertfrom utf-8 "\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\320\265 \320\267\320\260\320\274\320\265\320\275\321\213."]
  ::msgcat::mcset sk "Replace expression." [encoding convertfrom utf-8 "V\303\275raz na nahradenie."]
  ::msgcat::mcset sq "Replace expression." [encoding convertfrom utf-8 "rezultatet e gjetura do te ndrohen nga fjalia e future ketu"]

  ::msgcat::mcset bg "case sensitive search" [encoding convertfrom utf-8 "\320\264\320\260 \321\201\320\265 \320\276\321\202\321\207\320\270\321\202\320\260 \321\200\320\265\320\263\320\270\321\201\321\202\321\212\321\200\320\260"]
  ::msgcat::mcset cz "case sensitive search" [encoding convertfrom utf-8 "rozli\305\241ovat velikost p\303\255smen"]
  ::msgcat::mcset de "case sensitive search" [encoding convertfrom utf-8 "Gro\303\237- und Kleinschreibung bei Suche ber\303\274cksichtigen"]
  ::msgcat::mcset el "case sensitive search" [encoding convertfrom utf-8 "case sensitive \316\261\316\275\316\261\316\266\316\256\317\204\316\267\317\203\316\267"]
  ::msgcat::mcset en "case sensitive search" [encoding convertfrom utf-8 "case sensitive search"]
  ::msgcat::mcset es "case sensitive search" [encoding convertfrom utf-8 "sensible a may\303\272sculas"]
  ::msgcat::mcset it "case sensitive search" [encoding convertfrom utf-8 "ricerca case-sensitive"]
  ::msgcat::mcset ru "case sensitive search" [encoding convertfrom utf-8 "\321\203\321\207\320\270\321\202\321\213\320\262\320\260\321\202\321\214 \321\200\320\265\320\263\320\270\321\201\321\202\321\200"]
  ::msgcat::mcset sk "case sensitive search" [encoding convertfrom utf-8 "rozli\305\241ova\305\245 mal\303\251 a ve\304\276k\303\251"]
  ::msgcat::mcset sq "case sensitive search" [encoding convertfrom utf-8 "kerkimi -rast sensitiv"]

  ::msgcat::mcset bg "Check if search should be case sensitive." [encoding convertfrom utf-8 "\320\241\320\273\320\276\320\266\320\265\321\202\320\265 \320\276\321\202\320\261\320\265\320\273\321\217\320\267\320\272\320\260 \320\267\320\260 \320\264\320\260 \321\201\320\265 \320\270\320\267\320\262\321\212\321\200\321\210\320\270 \321\202\321\212\321\200\321\201\320\265\320\275\320\265 \321\201 \320\276\321\202\321\207\320\270\321\202\320\260\320\275\320\265 \320\275\320\260 \321\200\320\265\320\263\320\270\321\201\321\202\321\212\321\200\320\260."]
  ::msgcat::mcset cz "Check if search should be case sensitive." [encoding convertfrom utf-8 "Vyhled\303\241v\303\241n\303\255 s rozli\305\241en\303\255m velikosti p\303\255smen."]
  ::msgcat::mcset de "Check if search should be case sensitive." [encoding convertfrom utf-8 "Ankreuzen, wenn Suche Gro\303\237- und Kleinschreibung ber\303\274cksichtigen soll."]
  ::msgcat::mcset el "Check if search should be case sensitive." [encoding convertfrom utf-8 "\316\225\317\200\316\271\316\273\316\255\316\276\316\265\317\204\316\265 \316\261\316\275 \316\267 \316\261\316\275\316\261\316\266\316\256\317\204\316\267\317\203\316\267 \317\200\317\201\316\255\317\200\316\265\316\271 \316\275\316\261 \316\265\316\257\316\275\316\261\316\271 case sensitive."]
  ::msgcat::mcset en "Check if search should be case sensitive." [encoding convertfrom utf-8 "Check if search should be case sensitive."]
  ::msgcat::mcset es "Check if search should be case sensitive." [encoding convertfrom utf-8 "Marcar para que la b\303\272squeda distinga entre may\303\272sculas y min\303\272sculas."]
  ::msgcat::mcset it "Check if search should be case sensitive." [encoding convertfrom utf-8 "Attiva se la ricerca deve essere case-sensitive."]
  ::msgcat::mcset ru "Check if search should be case sensitive." [encoding convertfrom utf-8 "\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\270\321\202\320\265 \320\276\321\202\320\274\320\265\321\202\320\272\321\203, \321\207\321\202\320\276\320\261\321\213 \320\277\320\276\320\270\321\201\320\272 \320\277\321\200\320\276\320\270\321\201\321\205\320\276\320\264\320\270\320\273 \321\201 \321\203\321\207\320\265\321\202\320\276\320\274 \321\200\320\265\320\263\320\270\321\201\321\202\321\200\320\260."]
  ::msgcat::mcset sk "Check if search should be case sensitive." [encoding convertfrom utf-8 "Za\305\241krtnite pokia\304\276 pri h\304\276adan\303\255 chcete rozli\305\241ova\305\245 mal\303\251 a ve\304\276k\303\251 p\303\255smen\303\241."]
  ::msgcat::mcset sq "Check if search should be case sensitive." [encoding convertfrom utf-8 "kontrollo nese kerkimi do te jete rast-sensitiv"]

  ::msgcat::mcset bg "regular expressions" [encoding convertfrom utf-8 "\321\200\320\265\320\263\321\203\320\273\321\217\321\200\320\275\320\270 \320\270\320\267\321\200\320\260\320\267\320\270"]
  ::msgcat::mcset cz "regular expressions" [encoding convertfrom utf-8 "regul\303\241rn\303\255 v\303\275razy"]
  ::msgcat::mcset de "regular expressions" [encoding convertfrom utf-8 "Regul\303\244rer Ausdruck."]
  ::msgcat::mcset el "regular expressions" [encoding convertfrom utf-8 "\316\272\316\261\316\275\316\277\316\275\316\271\316\272\317\214 \317\203\317\205\316\275\317\204\316\261\316\272\317\204\316\271\316\272\317\214 (\317\207\317\201\316\256\317\203\316\267 \316\274\317\200\316\261\316\273\316\261\316\275\317\204\316\255\317\201 \316\261\316\275\316\261\316\266\316\256\317\204\316\267\317\203\316\267\317\202)"]
  ::msgcat::mcset en "regular expressions" [encoding convertfrom utf-8 "regular expressions"]
  ::msgcat::mcset es "regular expressions" [encoding convertfrom utf-8 "patr\303\263n regular"]
  ::msgcat::mcset it "regular expressions" [encoding convertfrom utf-8 "esperssioni regolari"]
  ::msgcat::mcset ru "regular expressions" [encoding convertfrom utf-8 "\321\200\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265 \320\262\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217"]
  ::msgcat::mcset sk "regular expressions" [encoding convertfrom utf-8 "regul\303\241rny v\303\275raz"]
  ::msgcat::mcset sq "regular expressions" [encoding convertfrom utf-8 "shprehje te rregullta"]

  ::msgcat::mcset bg "Check whether to evaluate search and replace as regular expressions." [encoding convertfrom utf-8 "\320\241\320\273\320\276\320\266\320\265\321\202\320\265 \320\276\321\202\320\261\320\265\320\273\321\217\320\267\320\272\320\260 \320\267\320\260 \320\264\320\260 \321\201\320\265 \320\276\320\261\321\200\320\260\320\261\320\276\321\202\320\262\320\260\321\202 \321\200\320\265\320\263\321\203\320\273\321\217\321\200\320\275\320\270\321\202\320\265 \320\270\320\267\321\200\320\260\320\267\320\270 \320\277\321\200\320\270 \321\202\321\212\321\200\321\201\320\265\320\275\320\265 \320\270 \320\267\320\260\320\274\321\217\320\275\320\260."]
  ::msgcat::mcset cz "Check whether to evaluate search and replace as regular expressions." [encoding convertfrom utf-8 "Za\305\241krtn\304\233te pokud chcete vyhled\303\241vat nebo nahrazovat pomoc\303\255 regul\303\241rn\303\255ch v\303\275raz\305\257."]
  ::msgcat::mcset de "Check whether to evaluate search and replace as regular expressions." [encoding convertfrom utf-8 "Ankreuzen, ob Suchen und Ersetzen regul\303\244ren Ausdruck nutzen soll."]
  ::msgcat::mcset el "Check whether to evaluate search and replace as regular expressions." [encoding convertfrom utf-8 "\316\225\317\200\316\271\316\273\316\255\316\276\317\204\316\265 \316\263\316\271\316\261 \316\261\316\275\316\261\316\266\316\256\317\204\316\267\317\203\316\267 \316\274\316\265 \316\272\316\261\316\275\316\277\316\275\316\271\316\272\317\214 \317\203\317\205\316\275\317\204\316\261\316\272\317\204\316\271\316\272\317\214(\317\207\317\201\316\256\317\203\316\267 \316\274\317\200\316\261\316\273\316\261\316\275\317\204\316\255\317\201 \316\261\316\275\316\261\316\266\316\256\317\204\316\267\317\203\316\267\317\202)"]
  ::msgcat::mcset en "Check whether to evaluate search and replace as regular expressions." [encoding convertfrom utf-8 "Check whether to search using regular expressions."]
  ::msgcat::mcset es "Check whether to evaluate search and replace as regular expressions." [encoding convertfrom utf-8 "B\303\272squeda usando comodines."]
  ::msgcat::mcset it "Check whether to evaluate search and replace as regular expressions." [encoding convertfrom utf-8 "Attiva per ricerca e sostituzione con espressioni regolari."]
  ::msgcat::mcset ru "Check whether to evaluate search and replace as regular expressions." [encoding convertfrom utf-8 "\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\270\321\202\320\265 \320\276\321\202\320\274\320\265\321\202\320\272\321\203, \321\207\321\202\320\276\320\261\321\213 \320\276\320\261\321\200\320\260\320\261\320\260\321\202\321\213\320\262\320\260\321\202\321\214 \321\200\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265 \320\262\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217 \320\277\321\200\320\270 \320\277\320\276\320\270\321\201\320\272\320\265 \320\270 \320\267\320\260\320\274\320\265\320\275\320\265."]
  ::msgcat::mcset sk "Check whether to evaluate search and replace as regular expressions." [encoding convertfrom utf-8 "Za\305\241krtnite ak sa m\303\241 h\304\276adanie a nahradenie vykon\303\241va\305\245 v m\303\263de regul\303\241rnych v\303\275razov."]
  ::msgcat::mcset sq "Check whether to evaluate search and replace as regular expressions." [encoding convertfrom utf-8 "kontrollo a do te kerkosh duke perdor shprehje te zakonta-rregullta"]

  ::msgcat::mcset bg "search selection only" [encoding convertfrom utf-8 "\321\202\321\212\321\200\321\201\320\265\320\275\320\265 \321\201\320\260\320\274\320\276 \320\262 \320\270\320\267\320\261\321\200\320\260\320\275\320\276\321\202\320\276"]
  ::msgcat::mcset cz "search selection only" [encoding convertfrom utf-8 "pouze ve vybran\303\251m textu"]
  ::msgcat::mcset de "search selection only" [encoding convertfrom utf-8 "Nur in Auwahl suchen"]
  ::msgcat::mcset el "search selection only" [encoding convertfrom utf-8 "\316\261\316\275\316\261\316\266\316\256\317\204\316\267\317\203\316\267 \316\274\317\214\316\275\316\277 \317\203\316\265 \316\265\317\200\316\271\316\273\316\277\316\263\316\256"]
  ::msgcat::mcset en "search selection only" [encoding convertfrom utf-8 "search selection only"]
  ::msgcat::mcset es "search selection only" [encoding convertfrom utf-8 "selecci\303\263n solo"]
  ::msgcat::mcset it "search selection only" [encoding convertfrom utf-8 "cerca solo nella selezione"]
  ::msgcat::mcset ru "search selection only" [encoding convertfrom utf-8 "\320\270\321\201\320\272\320\260\321\202\321\214 \320\262 \320\262\321\213\320\264\320\265\320\273\320\265\320\275\320\275\320\276\320\274"]
  ::msgcat::mcset sk "search selection only" [encoding convertfrom utf-8 "iba vo vybratom texte"]
  ::msgcat::mcset sq "search selection only" [encoding convertfrom utf-8 "kerko vetem selekcionet"]

  ::msgcat::mcset bg "Check whether to do search only in selected text." [encoding convertfrom utf-8 "\320\241\320\273\320\276\320\266\320\265\321\202\320\265 \320\276\321\202\320\261\320\265\320\273\321\217\320\267\320\272\320\260 \320\267\320\260 \320\264\320\260 \320\260\320\265 \321\202\321\212\321\200\321\201\320\270 \321\201\320\260\320\274\320\276 \320\262 \320\270\320\267\320\261\321\200\320\260\320\275\320\270\321\217\321\202 \321\202\320\265\320\272\321\201\321\202."]
  ::msgcat::mcset cz "Check whether to do search only in selected text." [encoding convertfrom utf-8 "Za\305\241krtn\304\233te pokud chcete vyhled\303\241vat pouze ve vybran\303\251m textu."]
  ::msgcat::mcset de "Check whether to do search only in selected text." [encoding convertfrom utf-8 "Ankreuzen, wenn nur im ausgew\303\244hlten Text gesucht werden soll."]
  ::msgcat::mcset el "Check whether to do search only in selected text." [encoding convertfrom utf-8 "\316\225\317\200\316\271\316\273\316\255\316\276\316\265\317\204\316\265 \316\263\316\271\316\261 \316\275\316\261 \316\263\316\257\316\275\316\265\316\271 \316\267 \316\261\316\275\316\261\316\266\316\256\317\204\316\267\317\203\316\267 \316\274\317\214\316\275\316\277 \317\203\317\204\316\277 \316\265\317\200\316\271\316\273\316\265\316\263\316\274\316\255\316\275\316\277 \316\272\316\265\316\257\316\274\316\265\316\275\316\277."]
  ::msgcat::mcset en "Check whether to do search only in selected text." [encoding convertfrom utf-8 "Check whether to do search only in selected text."]
  ::msgcat::mcset es "Check whether to do search only in selected text." [encoding convertfrom utf-8 "Marcar para buscar solo dentro del texto seleccionado."]
  ::msgcat::mcset it "Check whether to do search only in selected text." [encoding convertfrom utf-8 "Attiva per cercare solo nel testo selezionato."]
  ::msgcat::mcset ru "Check whether to do search only in selected text." [encoding convertfrom utf-8 "\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\270\321\202\320\265 \320\276\321\202\320\274\320\265\321\202\320\272\321\203, \321\207\321\202\320\276\320\261\321\213 \320\270\321\201\320\272\320\260\321\202\321\214 \321\202\320\276\320\273\321\214\320\272\320\276 \320\262 \320\262\321\213\320\264\320\265\320\273\320\265\320\275\320\275\320\276\320\274 \321\202\320\265\320\272\321\201\321\202\320\265."]
  ::msgcat::mcset sk "Check whether to do search only in selected text." [encoding convertfrom utf-8 "Za\305\241krtnite pokia\304\276 hladanie m\303\241 prebehn\303\272\305\245 len v ozna\304\215enom texte."]
  ::msgcat::mcset sq "Check whether to do search only in selected text." [encoding convertfrom utf-8 "kontrollo a do te perdoresh kerkimin vetem ne tekstin e selekcionuar"]

  ::msgcat::mcset bg "First" [encoding convertfrom utf-8 "\320\237\321\212\321\200\320\262\320\270"]
  ::msgcat::mcset cz "First" [encoding convertfrom utf-8 "Prvn\303\255"]
  ::msgcat::mcset de "First" [encoding convertfrom utf-8 "Erstes"]
  ::msgcat::mcset el "First" [encoding convertfrom utf-8 "\316\240\317\201\317\216\317\204\316\277"]
  ::msgcat::mcset en "First" [encoding convertfrom utf-8 "First"]
  ::msgcat::mcset es "First" [encoding convertfrom utf-8 "Buscar"]
  ::msgcat::mcset it "First" [encoding convertfrom utf-8 "Primo"]
  ::msgcat::mcset ru "First" [encoding convertfrom utf-8 "\320\237\320\265\321\200\320\262\321\213\320\271"]
  ::msgcat::mcset sk "First" [encoding convertfrom utf-8 "Prv\303\275"]
  ::msgcat::mcset sq "First" [encoding convertfrom utf-8 "e para"]

  ::msgcat::mcset bg "Search or replace first expression in the file." [encoding convertfrom utf-8 "\320\242\321\212\321\200\321\201\320\265\320\275\320\265 \320\270\320\273\320\270 \320\267\320\260\320\274\321\217\320\275\320\260 \320\275\320\260 \320\277\321\212\321\200\320\262\320\270\321\217\321\202 \320\270\320\267\321\200\320\260\320\267 \320\262\321\212\320\262 \321\204\320\260\320\271\320\273\320\260."]
  ::msgcat::mcset cz "Search or replace first expression in the file." [encoding convertfrom utf-8 "Najde nebo nahrad\303\255 prvn\303\255 v\303\275raz v souboru."]
  ::msgcat::mcset de "Search or replace first expression in the file." [encoding convertfrom utf-8 "Suche oder ersetze erstes Muster in der Datei."]
  ::msgcat::mcset el "Search or replace first expression in the file." [encoding convertfrom utf-8 "\316\221\316\275\316\261\316\266\316\256\317\204\316\267\317\203\316\267 \316\256 \316\261\316\275\317\204\316\271\316\272\316\261\317\204\316\254\317\203\317\204\316\261\317\203\316\267 \317\200\317\201\317\216\317\204\316\267\317\202 \317\200\316\265\317\201\316\257\317\200\317\204\317\211\317\203\316\267\317\202 \317\203\317\204\316\277 \316\261\317\201\317\207\316\265\316\257\316\277."]
  ::msgcat::mcset en "Search or replace first expression in the file." [encoding convertfrom utf-8 "Search or replace first expression in the file."]
  ::msgcat::mcset es "Search or replace first expression in the file." [encoding convertfrom utf-8 "Buscar o reemplazar el primer resultado."]
  ::msgcat::mcset it "Search or replace first expression in the file." [encoding convertfrom utf-8 "Cerca o sostituisci la prima istanza del testo nel file."]
  ::msgcat::mcset ru "Search or replace first expression in the file." [encoding convertfrom utf-8 "\320\237\320\276\320\270\321\201\320\272 \320\270\320\273\320\270 \320\267\320\260\320\274\320\265\320\275\320\260 \320\277\320\265\321\200\320\262\320\276\320\263\320\276 \320\262\321\205\320\276\320\266\320\264\320\265\320\275\320\270\321\217 \320\262 \321\204\320\260\320\271\320\273\320\265."]
  ::msgcat::mcset sk "Search or replace first expression in the file." [encoding convertfrom utf-8 "N\303\241jte popr\303\255pade nahrad\303\255 prv\303\275 v\303\275skyt h\304\276adan\303\251ho v\303\275razu v s\303\272bore."]
  ::msgcat::mcset sq "Search or replace first expression in the file." [encoding convertfrom utf-8 "kerko ose ndro shprehjet e para ne fajlla"]

  ::msgcat::mcset bg "Search or replace next expression after the cursor in the file." [encoding convertfrom utf-8 "\320\242\321\212\321\200\321\201\320\265\320\275\320\265 \320\270\320\273\320\270 \320\267\320\260\320\274\321\217\320\275\320\260 \320\275\320\260 \321\201\320\273\320\265\320\264\320\262\320\260\321\211\320\270\321\217\321\202 \320\270\320\267\321\200\320\260\320\267 \321\201\320\273\320\265\320\264 \320\272\321\203\321\200\321\201\320\276\321\200\320\260 \320\262\321\212\320\262 \321\204\320\260\320\271\320\273\320\260."]
  ::msgcat::mcset cz "Search or replace next expression after the cursor in the file." [encoding convertfrom utf-8 "Najde nebo nahrad\303\255 n\303\241sleduj\303\255c\303\255 v\303\275raz v souboru."]
  ::msgcat::mcset de "Search or replace next expression after the cursor in the file." [encoding convertfrom utf-8 "Suche oder ersetze n\303\244chstes Muster nach dem Cursor in der Datei."]
  ::msgcat::mcset el "Search or replace next expression after the cursor in the file." [encoding convertfrom utf-8 "\316\221\316\275\316\261\316\266\316\256\317\204\316\267\317\203\316\267 \316\256 \316\261\316\275\317\204\316\271\316\272\316\261\317\204\316\254\317\203\317\204\316\261\317\203\316\267 \316\265\317\200\317\214\316\274\316\265\316\275\316\267\317\202 \317\200\316\265\317\201\316\257\317\200\317\204\317\211\317\203\316\267\317\202 \316\274\316\265\317\204\316\254 \317\204\316\277\316\275 \316\272\316\277\317\215\317\201\317\203\316\277\317\201\316\261."]
  ::msgcat::mcset en "Search or replace next expression after the cursor in the file." [encoding convertfrom utf-8 "Search or replace next expression after the cursor in the file."]
  ::msgcat::mcset es "Search or replace next expression after the cursor in the file." [encoding convertfrom utf-8 "Buscar o reemplazar el siguiente resultado."]
  ::msgcat::mcset it "Search or replace next expression after the cursor in the file." [encoding convertfrom utf-8 "Cerca o sostituisci la prossima istanza del testo nel file dopo il cursore."]
  ::msgcat::mcset ru "Search or replace next expression after the cursor in the file." [encoding convertfrom utf-8 "\320\237\320\276\320\270\321\201\320\272 \320\270\320\273\320\270 \320\267\320\260\320\274\320\265\320\275\320\260 \321\201\320\273\320\265\320\264\321\203\321\216\321\211\320\265\320\263\320\276 \320\277\320\276\321\201\320\273\320\265 \320\272\321\203\321\200\321\201\320\276\321\200\320\260 \320\262\321\205\320\276\320\266\320\264\320\265\320\275\320\270\321\217 \320\262 \321\204\320\260\320\271\320\273\320\265."]
  ::msgcat::mcset sk "Search or replace next expression after the cursor in the file." [encoding convertfrom utf-8 "N\303\241jdi alebo nahra\304\217 nasleduj\303\272ci v\303\275raz v s\303\272bore."]
  ::msgcat::mcset sq "Search or replace next expression after the cursor in the file." [encoding convertfrom utf-8 "kerko ose ndroje shprehjen e ardhshme pas kursorit ne fajll"]

  ::msgcat::mcset bg "All" [encoding convertfrom utf-8 "\320\222\321\201\320\270\321\207\320\272\320\276"]
  ::msgcat::mcset cz "All" [encoding convertfrom utf-8 "V\305\241e"]
  ::msgcat::mcset de "All" [encoding convertfrom utf-8 "Alles"]
  ::msgcat::mcset el "All" [encoding convertfrom utf-8 "\316\214\316\273\316\261"]
  ::msgcat::mcset en "All" [encoding convertfrom utf-8 "All"]
  ::msgcat::mcset es "All" [encoding convertfrom utf-8 "Todo"]
  ::msgcat::mcset it "All" [encoding convertfrom utf-8 "Tutti"]
  ::msgcat::mcset ru "All" [encoding convertfrom utf-8 "\320\222\321\201\320\265"]
  ::msgcat::mcset sk "All" [encoding convertfrom utf-8 "V\305\241etko"]
  ::msgcat::mcset sq "All" [encoding convertfrom utf-8 "te gjithat"]

  ::msgcat::mcset bg "Search or replace all expressions in the file." [encoding convertfrom utf-8 "\320\242\321\212\321\200\321\201\320\265\320\275\320\265 \320\270\320\273\320\270 \320\267\320\260\320\274\321\217\320\275\320\260 \320\275\320\260 \320\262\321\201\320\270\321\207\320\272\320\270 \320\270\320\267\321\200\320\260\320\267\320\270 \320\262\321\212\320\262 \321\204\320\260\320\271\320\273\320\260."]
  ::msgcat::mcset cz "Search or replace all expressions in the file." [encoding convertfrom utf-8 "Najde nebo nahrad\303\255 v\305\241echny v\303\275razy v souboru."]
  ::msgcat::mcset de "Search or replace all expressions in the file." [encoding convertfrom utf-8 "Suche oder ersetze alle Muster in der Datei."]
  ::msgcat::mcset el "Search or replace all expressions in the file." [encoding convertfrom utf-8 "\316\221\316\275\316\261\316\266\316\256\317\204\316\267\317\203\316\267 \316\256 \316\261\316\275\317\204\316\271\316\272\316\261\317\204\316\254\317\203\317\204\316\261\317\203\316\267 \317\214\316\273\317\211\316\275 \317\204\317\211\316\275 \317\200\316\265\317\201\316\271\317\200\317\204\317\216\317\203\316\265\317\211\316\275 \317\203\317\204\316\277 \316\261\317\201\317\207\316\265\316\257\316\277."]
  ::msgcat::mcset en "Search or replace all expressions in the file." [encoding convertfrom utf-8 "Search or replace all expressions in the file."]
  ::msgcat::mcset es "Search or replace all expressions in the file." [encoding convertfrom utf-8 "Buscar o reemplazar todos los resultados."]
  ::msgcat::mcset it "Search or replace all expressions in the file." [encoding convertfrom utf-8 "Cerca o sostituisci tuute le frasi nel file."]
  ::msgcat::mcset ru "Search or replace all expressions in the file." [encoding convertfrom utf-8 "\320\237\320\276\320\270\321\201\320\272 \320\270\320\273\320\270 \320\267\320\260\320\274\320\265\320\275\320\260 \320\262\321\201\320\265\321\205 \320\262\321\205\320\276\320\266\320\264\320\265\320\275\320\270\320\271 \320\262 \321\204\320\260\320\271\320\273\320\265."]
  ::msgcat::mcset sk "Search or replace all expressions in the file." [encoding convertfrom utf-8 "N\303\241jdi alebo nahra\304\217 v\305\241etky v\303\275razy v s\303\272bore."]
  ::msgcat::mcset sq "Search or replace all expressions in the file." [encoding convertfrom utf-8 "kerko ose ndroji te gjitha shprehjet ne fajlla"]

  ::msgcat::mcset bg "Clear" [encoding convertfrom utf-8 "\320\230\320\267\321\207\320\270\321\201\320\262\320\260\320\275\320\265"]
  ::msgcat::mcset cz "Clear" [encoding convertfrom utf-8 "Zru\305\241it"]
  ::msgcat::mcset de "Clear" [encoding convertfrom utf-8 "L\303\266schen"]
  ::msgcat::mcset el "Clear" [encoding convertfrom utf-8 "\316\221\316\275\316\261\316\257\317\201\316\265\317\203\316\267"]
  ::msgcat::mcset en "Clear" [encoding convertfrom utf-8 "Clear"]
  ::msgcat::mcset es "Clear" [encoding convertfrom utf-8 "Deseleccionar"]
  ::msgcat::mcset it "Clear" [encoding convertfrom utf-8 "Cancella"]
  ::msgcat::mcset ru "Clear" [encoding convertfrom utf-8 "\320\236\321\207\320\270\321\201\321\202\320\272\320\260"]
  ::msgcat::mcset sk "Clear" [encoding convertfrom utf-8 "Vy\304\215isti"]
  ::msgcat::mcset sq "Clear" [encoding convertfrom utf-8 "e paster"]

  ::msgcat::mcset bg "Clear all highlights in the file." [encoding convertfrom utf-8 "\320\230\320\267\321\207\320\270\321\201\321\202\320\262\320\260\320\275\320\265 \320\275\320\260 \320\262\321\201\320\270\321\207\320\272\320\270 \320\276\321\201\320\262\320\265\321\202\320\265\320\275\320\270 \321\202\320\265\320\272\321\201\321\202\320\276\320\262\320\270 \321\203\321\207\320\260\321\201\321\202\321\212\321\206\320\270 \320\262\321\212\320\262 \321\204\320\260\320\271\320\273\320\260."]
  ::msgcat::mcset cz "Clear all highlights in the file." [encoding convertfrom utf-8 "Zru\305\241\303\255 zv\303\275razn\304\233n\303\255 nalezen\303\275ch v\303\275raz\305\257 v souboru."]
  ::msgcat::mcset de "Clear all highlights in the file." [encoding convertfrom utf-8 "L\303\266sche alle Hervorhebungen in der Datei."]
  ::msgcat::mcset el "Clear all highlights in the file." [encoding convertfrom utf-8 "\316\221\316\275\316\261\316\257\317\201\316\265\317\203\316\267 \317\214\316\273\317\211\316\275 \317\204\317\211\316\275 \317\204\316\277\316\275\316\271\317\203\316\270\316\255\316\275\317\204\317\211\316\275."]
  ::msgcat::mcset en "Clear all highlights in the file." [encoding convertfrom utf-8 "Clear all highlights in the file."]
  ::msgcat::mcset es "Clear all highlights in the file." [encoding convertfrom utf-8 "Deseleccionar todo lo seleccionado."]
  ::msgcat::mcset it "Clear all highlights in the file." [encoding convertfrom utf-8 "Cancella tutte le evidenziazioni nel file."]
  ::msgcat::mcset ru "Clear all highlights in the file." [encoding convertfrom utf-8 "\320\236\321\207\320\270\321\201\321\202\320\272\320\260 \320\262\321\201\320\265\321\205 \320\277\320\276\320\264\321\201\320\262\320\265\321\207\320\265\320\275\320\275\321\213\321\205 \321\203\321\207\320\260\321\201\321\202\320\272\320\276\320\262 \321\202\320\265\320\272\321\201\321\202\320\260."]
  ::msgcat::mcset sk "Clear all highlights in the file." [encoding convertfrom utf-8 "Zru\305\241\303\255 zv\303\275raznenie n\303\241jden\303\275ch v\303\275razov v s\303\272bore."]
  ::msgcat::mcset sq "Clear all highlights in the file." [encoding convertfrom utf-8 "fshij te gjitha selekcionimet apo hijezimet ne fajlla"]

  ::msgcat::mcset bg "Opening %s ..." [encoding convertfrom utf-8 "\320\236\321\202\320\262\320\260\321\200\321\217\320\275\320\265 %s ..."]
  ::msgcat::mcset cz "Opening %s ..." [encoding convertfrom utf-8 "Otev\303\255r\303\241m %s ..."]
  ::msgcat::mcset de "Opening %s ..." [encoding convertfrom utf-8 "\303\226ffne %s ..."]
  ::msgcat::mcset el "Opening %s ..." [encoding convertfrom utf-8 "\316\206\316\275\316\277\316\271\316\263\316\274\316\261 \317\204\316\277\317\205 %s ..."]
  ::msgcat::mcset en "Opening %s ..." [encoding convertfrom utf-8 "Opening %s ..."]
  ::msgcat::mcset es "Opening %s ..." [encoding convertfrom utf-8 "Abriendo %s ..."]
  ::msgcat::mcset it "Opening %s ..." [encoding convertfrom utf-8 "Apertura %s ..."]
  ::msgcat::mcset ru "Opening %s ..." [encoding convertfrom utf-8 "\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\265 %s ..."]
  ::msgcat::mcset sk "Opening %s ..." [encoding convertfrom utf-8 "Otev\303\241ram %s ..."]
  ::msgcat::mcset sq "Opening %s ..." [encoding convertfrom utf-8 "duke hap %s \342\200\246"]

  ::msgcat::mcset bg "File %s is not saved. Save it now?" [encoding convertfrom utf-8 "\320\244\320\260\320\271\320\273\321\212\321\202 %s \320\275\320\265 \320\265 \321\201\321\212\321\205\321\200\320\260\320\275\320\265\320\275. \320\224\320\260 \320\263\320\276 \321\201\321\212\321\205\321\200\320\260\320\275\321\217 \321\201\320\265\320\263\320\260?"]
  ::msgcat::mcset cz "File %s is not saved. Save it now?" [encoding convertfrom utf-8 "Soubor %s nen\303\255 ulo\305\276en. Ulo\305\276it nyn\303\255?"]
  ::msgcat::mcset de "File %s is not saved. Save it now?" [encoding convertfrom utf-8 "datei %s nicht gespeichert. Speichere jetzt?"]
  ::msgcat::mcset el "File %s is not saved. Save it now?" [encoding convertfrom utf-8 "\316\244\316\277 \316\261\317\201\317\207\316\265\316\257\316\277 %s \316\264\316\265\316\275 \316\255\317\207\316\265\316\271 \316\261\317\200\316\277\316\270\316\267\316\272\316\265\317\205\317\204\316\265\316\257. \316\221\317\200\316\277\316\270\316\256\316\272\316\265\317\205\317\203\316\267 \317\204\317\216\317\201\316\261;"]
  ::msgcat::mcset en "File %s is not saved. Save it now?" [encoding convertfrom utf-8 "File %s is not saved. Save it now?"]
  ::msgcat::mcset es "File %s is not saved. Save it now?" [encoding convertfrom utf-8 "El archivo %s no ha sido guardado. \302\277Guardar ahora?"]
  ::msgcat::mcset it "File %s is not saved. Save it now?" [encoding convertfrom utf-8 "Il file %s non \303\250 salvato. Salva ora?"]
  ::msgcat::mcset ru "File %s is not saved. Save it now?" [encoding convertfrom utf-8 "\320\244\320\260\320\271\320\273 %s \320\275\320\265 \321\201\320\276\321\205\321\200\320\260\320\275\320\265\320\275. \320\241\320\276\321\205\321\200\320\260\320\275\320\270\321\202\321\214 \320\265\320\263\320\276 \321\201\320\265\320\271\321\207\320\260\321\201?"]
  ::msgcat::mcset sk "File %s is not saved. Save it now?" [encoding convertfrom utf-8 "S\303\272bor %s nie je ulo\305\276en\303\275. Ulo\305\276i\305\245 teraz?"]
  ::msgcat::mcset sq "File %s is not saved. Save it now?" [encoding convertfrom utf-8 "fajlli %s nuk eshte I ruajtur. Ta ruajm tani?"]

  ::msgcat::mcset bg "File %s was modified outside xtherion. Save it anyway?" [encoding convertfrom utf-8 "\320\244\320\260\320\271\320\273\321\212\321\202 %s \320\265 \320\270\320\267\320\274\320\265\320\275\320\265\320\275 \320\276\321\202 \320\264\321\200\321\203\320\263\320\276 \320\277\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\320\265. \320\224\320\260 \320\263\320\276 \321\201\321\212\321\205\321\200\320\260\320\275\321\217 \320\262\321\212\320\277\321\200\320\265\320\272\320\270 \321\202\320\276\320\262\320\260?"]
  ::msgcat::mcset cz "File %s was modified outside xtherion. Save it anyway?" [encoding convertfrom utf-8 "Soubor %s byl modifikov\303\241n mimo xtherion. P\305\231esto ulo\305\276it?"]
  ::msgcat::mcset de "File %s was modified outside xtherion. Save it anyway?" [encoding convertfrom utf-8 "Datei %s wurde au\303\237erhalb von Xtherion ge\303\244ndert. Trotzdem speichern?"]
  ::msgcat::mcset el "File %s was modified outside xtherion. Save it anyway?" [encoding convertfrom utf-8 "\316\244\316\277 \316\261\317\201\317\207\316\265\316\257\316\277 %s \317\204\317\201\316\277\317\200\316\277\317\200\316\277\316\271\316\256\316\270\316\267\316\272\316\265 \316\265\316\272\317\204\317\214\317\202 xtherion. \316\235\316\261 \316\261\317\200\316\277\316\270\316\267\316\272\316\265\317\205\317\204\316\265\316\257 \317\214\317\200\317\211\317\202 \316\272\316\261\316\271 \316\275\316\261'\316\275\316\261\316\271;"]
  ::msgcat::mcset en "File %s was modified outside xtherion. Save it anyway?" [encoding convertfrom utf-8 "File %s was modified outside xtherion. Save it anyway?"]
  ::msgcat::mcset es "File %s was modified outside xtherion. Save it anyway?" [encoding convertfrom utf-8 "El archivo %s ha sido modificado fuera de xtherion. \302\277Guardar de todos modos?"]
  ::msgcat::mcset it "File %s was modified outside xtherion. Save it anyway?" [encoding convertfrom utf-8 "Il file %s \303\250 stato modificato fuori da xtherion. Salva comunque?"]
  ::msgcat::mcset ru "File %s was modified outside xtherion. Save it anyway?" [encoding convertfrom utf-8 "\320\244\320\260\320\271\320\273 %s \320\261\321\213\320\273 \320\270\320\267\320\274\320\265\320\275\320\265\320\275 \320\264\321\200\321\203\320\263\320\270\320\274 \320\277\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\320\265\320\274. \320\241\320\276\321\205\321\200\320\260\320\275\320\270\321\202\321\214 \320\275\320\265 \321\201\320\274\320\276\321\202\321\200\321\217 \320\275\320\260 \321\215\321\202\320\276?"]
  ::msgcat::mcset sk "File %s was modified outside xtherion. Save it anyway?" [encoding convertfrom utf-8 "S\303\272bor %s bol modifikovan\303\275 mimo programu. Ulo\305\276i\305\245 aj tak?"]
  ::msgcat::mcset sq "File %s was modified outside xtherion. Save it anyway?" [encoding convertfrom utf-8 "fajlli %s eshte ndryshuar jashte x therion-it. Ta ruajm sido qe te jete?"]

  ::msgcat::mcset bg "Saving %s ..." [encoding convertfrom utf-8 "\320\241\321\212\321\205\321\200\320\260\320\275\320\265\320\275\320\270\320\265 %s ..."]
  ::msgcat::mcset cz "Saving %s ..." [encoding convertfrom utf-8 "Ukl\303\241d\303\241m %s ..."]
  ::msgcat::mcset de "Saving %s ..." [encoding convertfrom utf-8 "Speichere %s ..."]
  ::msgcat::mcset el "Saving %s ..." [encoding convertfrom utf-8 "\316\221\317\200\316\277\316\270\316\256\316\272\316\265\317\205\317\203\316\267 \317\204\316\277\317\205 %s ..."]
  ::msgcat::mcset en "Saving %s ..." [encoding convertfrom utf-8 "Saving %s ..."]
  ::msgcat::mcset es "Saving %s ..." [encoding convertfrom utf-8 "Guardando %s ..."]
  ::msgcat::mcset it "Saving %s ..." [encoding convertfrom utf-8 "Salvataggio %s ..."]
  ::msgcat::mcset ru "Saving %s ..." [encoding convertfrom utf-8 "\320\241\320\276\321\205\321\200\320\260\320\275\320\265\320\275\320\270\320\265 %s ..."]
  ::msgcat::mcset sk "Saving %s ..." [encoding convertfrom utf-8 "Uklad\303\241m %s ..."]
  ::msgcat::mcset sq "Saving %s ..." [encoding convertfrom utf-8 "duke ruajtur %s. . ."]

  ::msgcat::mcset bg "New" [encoding convertfrom utf-8 "\320\235\320\276\320\262"]
  ::msgcat::mcset cz "New" [encoding convertfrom utf-8 "Nov\303\275"]
  ::msgcat::mcset de "New" [encoding convertfrom utf-8 "Neu"]
  ::msgcat::mcset el "New" [encoding convertfrom utf-8 "\316\235\316\255\316\277"]
  ::msgcat::mcset en "New" [encoding convertfrom utf-8 "New"]
  ::msgcat::mcset es "New" [encoding convertfrom utf-8 "Nuevo"]
  ::msgcat::mcset it "New" [encoding convertfrom utf-8 "Nuovo"]
  ::msgcat::mcset ru "New" [encoding convertfrom utf-8 "\320\235\320\276\320\262\321\213\320\271"]
  ::msgcat::mcset sk "New" [encoding convertfrom utf-8 "Nov\303\275"]
  ::msgcat::mcset sq "New" [encoding convertfrom utf-8 "e re"]

  ::msgcat::mcset bg "Open" [encoding convertfrom utf-8 "\320\236\321\202\320\262\320\276\321\200\320\270"]
  ::msgcat::mcset cz "Open" [encoding convertfrom utf-8 "Otev\305\231\303\255t..."]
  ::msgcat::mcset de "Open" [encoding convertfrom utf-8 "\303\226ffnen"]
  ::msgcat::mcset el "Open" [encoding convertfrom utf-8 "\316\206\316\275\316\277\316\271\316\263\316\274\316\261"]
  ::msgcat::mcset en "Open" [encoding convertfrom utf-8 "Open"]
  ::msgcat::mcset es "Open" [encoding convertfrom utf-8 "Abrir"]
  ::msgcat::mcset it "Open" [encoding convertfrom utf-8 "Apri"]
  ::msgcat::mcset ru "Open" [encoding convertfrom utf-8 "\320\236\321\202\320\272\321\200\321\213\321\202\321\214"]
  ::msgcat::mcset sk "Open" [encoding convertfrom utf-8 "Otvori\305\245"]
  ::msgcat::mcset sq "Open" [encoding convertfrom utf-8 "hape"]

  ::msgcat::mcset bg "Save" [encoding convertfrom utf-8 "\320\227\320\260\320\277\320\270\321\210\320\270"]
  ::msgcat::mcset cz "Save" [encoding convertfrom utf-8 "Ulo\305\276it"]
  ::msgcat::mcset de "Save" [encoding convertfrom utf-8 "Speichern"]
  ::msgcat::mcset el "Save" [encoding convertfrom utf-8 "\316\221\317\200\316\277\316\270\316\256\316\272\316\265\317\205\317\203\316\267"]
  ::msgcat::mcset en "Save" [encoding convertfrom utf-8 "Save"]
  ::msgcat::mcset es "Save" [encoding convertfrom utf-8 "Guardar"]
  ::msgcat::mcset it "Save" [encoding convertfrom utf-8 "Salva"]
  ::msgcat::mcset ru "Save" [encoding convertfrom utf-8 "\320\241\320\276\321\205\321\200\320\260\320\275\320\270\321\202\321\214"]
  ::msgcat::mcset sk "Save" [encoding convertfrom utf-8 "Ulo\305\276i\305\245"]
  ::msgcat::mcset sq "Save" [encoding convertfrom utf-8 "ruaje"]

  ::msgcat::mcset bg "Save as" [encoding convertfrom utf-8 "\320\227\320\260\320\277\320\270\321\210\320\270 \320\272\320\260\321\202\320\276"]
  ::msgcat::mcset cz "Save as" [encoding convertfrom utf-8 "Ulo\305\276it jako..."]
  ::msgcat::mcset de "Save as" [encoding convertfrom utf-8 "Speichern als"]
  ::msgcat::mcset el "Save as" [encoding convertfrom utf-8 "\316\221\317\200\316\277\316\270\316\256\316\272\316\265\317\205\317\203\316\267 \317\211\317\202..."]
  ::msgcat::mcset en "Save as" [encoding convertfrom utf-8 "Save as"]
  ::msgcat::mcset es "Save as" [encoding convertfrom utf-8 "Guardar como"]
  ::msgcat::mcset it "Save as" [encoding convertfrom utf-8 "Salva come"]
  ::msgcat::mcset ru "Save as" [encoding convertfrom utf-8 "\320\241\320\276\321\205\321\200\320\260\320\275\320\270\321\202\321\214 \320\272\320\260\320\272"]
  ::msgcat::mcset sk "Save as" [encoding convertfrom utf-8 "Ulo\305\276i\305\245 ako"]
  ::msgcat::mcset sq "Save as" [encoding convertfrom utf-8 "ruaje si"]

  ::msgcat::mcset bg "Save all" [encoding convertfrom utf-8 "\320\227\320\260\320\277\320\270\321\210\320\270 \320\262\321\201\320\270\321\207\320\272\320\270"]
  ::msgcat::mcset cz "Save all" [encoding convertfrom utf-8 "Ulo\305\276it v\305\241e"]
  ::msgcat::mcset de "Save all" [encoding convertfrom utf-8 "Speichere alles"]
  ::msgcat::mcset el "Save all" [encoding convertfrom utf-8 "\316\221\317\200\316\277\316\270\316\256\316\272\316\265\317\205\317\203\316\267 \317\214\316\273\317\211\316\275"]
  ::msgcat::mcset en "Save all" [encoding convertfrom utf-8 "Save all"]
  ::msgcat::mcset es "Save all" [encoding convertfrom utf-8 "Guardar todo"]
  ::msgcat::mcset it "Save all" [encoding convertfrom utf-8 "Salva tutti"]
  ::msgcat::mcset ru "Save all" [encoding convertfrom utf-8 "\320\241\320\276\321\205\321\200\320\260\320\275\320\270\321\202\321\214 \320\262\321\201\321\221"]
  ::msgcat::mcset sk "Save all" [encoding convertfrom utf-8 "Ulo\305\276i\305\245 v\305\241etko"]
  ::msgcat::mcset sq "Save all" [encoding convertfrom utf-8 "ruaji te gjitha"]

  ::msgcat::mcset bg "Auto save" [encoding convertfrom utf-8 "\320\220\320\262\321\202\320\276\321\201\321\212\321\205\321\200\320\260\320\275\320\265\320\275\320\270\320\265"]
  ::msgcat::mcset cz "Auto save" [encoding convertfrom utf-8 "Automaticky ukl\303\241dat"]
  ::msgcat::mcset de "Auto save" [encoding convertfrom utf-8 "Automatisch speichern"]
  ::msgcat::mcset el "Auto save" [encoding convertfrom utf-8 "\316\221\317\205\317\204\317\214\316\274\316\261\317\204\316\267 \316\261\317\200\316\277\316\270\316\256\316\272\316\265\317\205\317\203\316\267"]
  ::msgcat::mcset en "Auto save" [encoding convertfrom utf-8 "Auto save"]
  ::msgcat::mcset es "Auto save" [encoding convertfrom utf-8 "Autoguardar"]
  ::msgcat::mcset it "Auto save" [encoding convertfrom utf-8 "Auto salva"]
  ::msgcat::mcset ru "Auto save" [encoding convertfrom utf-8 "\320\220\320\262\321\202\320\276\321\201\320\276\321\205\321\200\320\260\320\275\320\265\320\275\320\270\320\265"]
  ::msgcat::mcset sk "Auto save" [encoding convertfrom utf-8 "Uklada\305\245 automaticky"]
  ::msgcat::mcset sq "Auto save" [encoding convertfrom utf-8 "ruajtja automatike"]

  ::msgcat::mcset bg "Import" [encoding convertfrom utf-8 "\320\222\320\275\320\260\321\201\321\217\320\275\320\265"]
  ::msgcat::mcset cz "Import" [encoding convertfrom utf-8 "Import"]
  ::msgcat::mcset de "Import" [encoding convertfrom utf-8 "Importieren"]
  ::msgcat::mcset el "Import" [encoding convertfrom utf-8 "\316\225\316\271\317\203\316\261\316\263\317\211\316\263\316\256..."]
  ::msgcat::mcset it "Import" [encoding convertfrom utf-8 "Importa"]
  ::msgcat::mcset ru "Import" [encoding convertfrom utf-8 "\320\230\320\274\320\277\320\276\321\200\321\202"]
  ::msgcat::mcset sk "Import" [encoding convertfrom utf-8 "Import"]
  ::msgcat::mcset sq "Import" [encoding convertfrom utf-8 "importi"]

  ::msgcat::mcset bg "Next" [encoding convertfrom utf-8 "\320\241\320\273\320\265\320\264\320\262\320\260\321\211"]
  ::msgcat::mcset cz "Next" [encoding convertfrom utf-8 "N\303\241sleduj\303\255c\303\255"]
  ::msgcat::mcset de "Next" [encoding convertfrom utf-8 "N\303\244chstes"]
  ::msgcat::mcset el "Next" [encoding convertfrom utf-8 "\316\225\317\200\317\214\316\274\316\265\316\275\316\277"]
  ::msgcat::mcset en "Next" [encoding convertfrom utf-8 "Next"]
  ::msgcat::mcset es "Next" [encoding convertfrom utf-8 "Siguiente"]
  ::msgcat::mcset it "Next" [encoding convertfrom utf-8 "Prossima"]
  ::msgcat::mcset ru "Next" [encoding convertfrom utf-8 "\320\241\320\273\320\265\320\264\321\203\321\216\321\211\320\270\320\271"]
  ::msgcat::mcset sk "Next" [encoding convertfrom utf-8 "Nasleduj\303\272ci"]
  ::msgcat::mcset sq "Next" [encoding convertfrom utf-8 "tjetra"]

  ::msgcat::mcset bg "Previous" [encoding convertfrom utf-8 "\320\237\321\200\320\265\320\264\320\270\321\210\320\265\320\275"]
  ::msgcat::mcset cz "Previous" [encoding convertfrom utf-8 "P\305\231edchoz\303\255"]
  ::msgcat::mcset de "Previous" [encoding convertfrom utf-8 "Vorheriges"]
  ::msgcat::mcset el "Previous" [encoding convertfrom utf-8 "\316\240\317\201\316\277\316\267\316\263\316\277\317\215\316\274\316\265\316\275\316\277"]
  ::msgcat::mcset en "Previous" [encoding convertfrom utf-8 "Previous"]
  ::msgcat::mcset es "Previous" [encoding convertfrom utf-8 "Anterior"]
  ::msgcat::mcset it "Previous" [encoding convertfrom utf-8 "Precedente"]
  ::msgcat::mcset ru "Previous" [encoding convertfrom utf-8 "\320\237\321\200\320\265\320\264\321\213\320\264\321\203\321\211\320\270\320\271"]
  ::msgcat::mcset sk "Previous" [encoding convertfrom utf-8 "Predch\303\241dzaj\303\272ci"]
  ::msgcat::mcset sq "Previous" [encoding convertfrom utf-8 "e perparmja"]

  ::msgcat::mcset bg "Edit" [encoding convertfrom utf-8 "\320\240\320\265\320\264\320\260\320\272\321\202\320\270\321\200\320\260\320\275\320\265"]
  ::msgcat::mcset cz "Edit" [encoding convertfrom utf-8 "Editovat"]
  ::msgcat::mcset de "Edit" [encoding convertfrom utf-8 "Bearbeiten"]
  ::msgcat::mcset el "Edit" [encoding convertfrom utf-8 "\316\224\316\271\317\214\317\201\316\270\317\211\317\203\316\267"]
  ::msgcat::mcset en "Edit" [encoding convertfrom utf-8 "Edit"]
  ::msgcat::mcset es "Edit" [encoding convertfrom utf-8 "Editar"]
  ::msgcat::mcset it "Edit" [encoding convertfrom utf-8 "Edita"]
  ::msgcat::mcset ru "Edit" [encoding convertfrom utf-8 "\320\240\320\265\320\264\320\260\320\272\321\202\320\270\321\200\320\276\320\262\320\260\321\202\321\214"]
  ::msgcat::mcset sk "Edit" [encoding convertfrom utf-8 "Upravi\305\245"]
  ::msgcat::mcset sq "Edit" [encoding convertfrom utf-8 "permireso"]

  ::msgcat::mcset bg "Undo" [encoding convertfrom utf-8 "\320\236\321\202\320\274\321\217\320\275\320\260"]
  ::msgcat::mcset cz "Undo" [encoding convertfrom utf-8 "Zp\304\233t"]
  ::msgcat::mcset de "Undo" [encoding convertfrom utf-8 "R\303\274ckg\303\244ngig"]
  ::msgcat::mcset el "Undo" [encoding convertfrom utf-8 "\316\221\316\275\316\261\316\257\317\201\316\265\317\203\316\267"]
  ::msgcat::mcset en "Undo" [encoding convertfrom utf-8 "Undo"]
  ::msgcat::mcset es "Undo" [encoding convertfrom utf-8 "Deshacer"]
  ::msgcat::mcset it "Undo" [encoding convertfrom utf-8 "Indietro"]
  ::msgcat::mcset ru "Undo" [encoding convertfrom utf-8 "\320\236\321\202\320\274\320\265\320\275\320\270\321\202\321\214"]
  ::msgcat::mcset sk "Undo" [encoding convertfrom utf-8 "Sp\303\244\305\245"]
  ::msgcat::mcset sq "Undo" [encoding convertfrom utf-8 "prishe-undo"]

  ::msgcat::mcset bg "Redo" [encoding convertfrom utf-8 "\320\222\321\212\320\267\321\201\321\202\320\260\320\275\320\276\320\262\321\217\320\262\320\260\320\275\320\265"]
  ::msgcat::mcset cz "Redo" [encoding convertfrom utf-8 "Opakovat"]
  ::msgcat::mcset de "Redo" [encoding convertfrom utf-8 "Wiederholen"]
  ::msgcat::mcset el "Redo" [encoding convertfrom utf-8 "\316\225\317\200\316\261\316\275\316\254\316\273\316\267\317\210\316\267"]
  ::msgcat::mcset en "Redo" [encoding convertfrom utf-8 "Redo"]
  ::msgcat::mcset es "Redo" [encoding convertfrom utf-8 "Rehacer"]
  ::msgcat::mcset it "Redo" [encoding convertfrom utf-8 "Rifai"]
  ::msgcat::mcset ru "Redo" [encoding convertfrom utf-8 "\320\222\320\265\321\200\320\275\321\203\321\202\321\214"]
  ::msgcat::mcset sk "Redo" [encoding convertfrom utf-8 "Opakova\305\245"]
  ::msgcat::mcset sq "Redo" [encoding convertfrom utf-8 "beje prape-redo"]

  ::msgcat::mcset bg "Cut" [encoding convertfrom utf-8 "\320\230\320\267\321\200\320\265\320\266\320\270"]
  ::msgcat::mcset cz "Cut" [encoding convertfrom utf-8 "Vyjmout"]
  ::msgcat::mcset de "Cut" [encoding convertfrom utf-8 "Ausschneiden"]
  ::msgcat::mcset el "Cut" [encoding convertfrom utf-8 "\316\221\317\200\316\277\316\272\316\277\317\200\316\256"]
  ::msgcat::mcset en "Cut" [encoding convertfrom utf-8 "Cut"]
  ::msgcat::mcset es "Cut" [encoding convertfrom utf-8 "Cortar"]
  ::msgcat::mcset it "Cut" [encoding convertfrom utf-8 "Taglia"]
  ::msgcat::mcset ru "Cut" [encoding convertfrom utf-8 "\320\222\321\213\321\200\320\265\320\267\320\260\321\202\321\214"]
  ::msgcat::mcset sk "Cut" [encoding convertfrom utf-8 "Vystrihn\303\272\305\245"]
  ::msgcat::mcset sq "Cut" [encoding convertfrom utf-8 "preje"]

  ::msgcat::mcset bg "Copy" [encoding convertfrom utf-8 "\320\232\320\276\320\277\320\270\321\200\320\260\320\271"]
  ::msgcat::mcset cz "Copy" [encoding convertfrom utf-8 "Kop\303\255rovat"]
  ::msgcat::mcset de "Copy" [encoding convertfrom utf-8 "Kopieren"]
  ::msgcat::mcset el "Copy" [encoding convertfrom utf-8 "\316\221\316\275\317\204\316\271\316\263\317\201\316\261\317\206\316\256"]
  ::msgcat::mcset en "Copy" [encoding convertfrom utf-8 "Copy"]
  ::msgcat::mcset es "Copy" [encoding convertfrom utf-8 "Copiar"]
  ::msgcat::mcset it "Copy" [encoding convertfrom utf-8 "Copia"]
  ::msgcat::mcset ru "Copy" [encoding convertfrom utf-8 "\320\232\320\276\320\277\320\270\321\200\320\276\320\262\320\260\321\202\321\214"]
  ::msgcat::mcset sk "Copy" [encoding convertfrom utf-8 "Kop\303\255rova\305\245"]
  ::msgcat::mcset sq "Copy" [encoding convertfrom utf-8 "kopjo"]

  ::msgcat::mcset bg "Paste" [encoding convertfrom utf-8 "\320\222\320\274\321\212\320\272\320\275\320\270"]
  ::msgcat::mcset cz "Paste" [encoding convertfrom utf-8 "Vlo\305\276it"]
  ::msgcat::mcset de "Paste" [encoding convertfrom utf-8 "Einf\303\274gen"]
  ::msgcat::mcset el "Paste" [encoding convertfrom utf-8 "\316\225\317\200\316\271\316\272\317\214\316\273\316\273\316\267\317\203\316\267"]
  ::msgcat::mcset en "Paste" [encoding convertfrom utf-8 "Paste"]
  ::msgcat::mcset es "Paste" [encoding convertfrom utf-8 "Pegar"]
  ::msgcat::mcset it "Paste" [encoding convertfrom utf-8 "Incolla"]
  ::msgcat::mcset ru "Paste" [encoding convertfrom utf-8 "\320\222\321\201\321\202\320\260\320\262\320\270\321\202\321\214"]
  ::msgcat::mcset sk "Paste" [encoding convertfrom utf-8 "Vlo\305\276i\305\245"]
  ::msgcat::mcset sq "Paste" [encoding convertfrom utf-8 "vendose-paste"]

  ::msgcat::mcset bg "Select all" [encoding convertfrom utf-8 "\320\230\320\267\320\261\320\265\321\200\320\270 \320\262\321\201\320\270\321\207\320\272\320\276"]
  ::msgcat::mcset cz "Select all" [encoding convertfrom utf-8 "Vybrat v\305\241e"]
  ::msgcat::mcset de "Select all" [encoding convertfrom utf-8 "Alles ausw\303\244hlen"]
  ::msgcat::mcset el "Select all" [encoding convertfrom utf-8 "\316\225\317\200\316\271\316\273\316\277\316\263\316\256 \317\214\316\273\317\211\316\275"]
  ::msgcat::mcset en "Select all" [encoding convertfrom utf-8 "Select all"]
  ::msgcat::mcset es "Select all" [encoding convertfrom utf-8 "Seleccionar todo"]
  ::msgcat::mcset it "Select all" [encoding convertfrom utf-8 "Seleziona tutto"]
  ::msgcat::mcset ru "Select all" [encoding convertfrom utf-8 "\320\222\321\213\320\264\320\265\320\273\320\270\321\202\321\214 \320\262\321\201\321\221"]
  ::msgcat::mcset sk "Select all" [encoding convertfrom utf-8 "Vyber v\305\241etko"]
  ::msgcat::mcset sq "Select all" [encoding convertfrom utf-8 "zghedhi-selekciono te gjitha"]

  ::msgcat::mcset bg "Auto indent" [encoding convertfrom utf-8 "\320\220\320\262\321\202\320\276\320\274\320\260\321\202\320\270\321\207\320\265\320\275 \320\276\321\202\321\201\321\202\321\212\320\277"]
  ::msgcat::mcset cz "Auto indent" [encoding convertfrom utf-8 "Automaticky odsazovat"]
  ::msgcat::mcset de "Auto indent" [encoding convertfrom utf-8 "Automatisch einr\303\274cken"]
  ::msgcat::mcset el "Auto indent" [encoding convertfrom utf-8 "\316\221\317\205\317\204\317\214\316\274\316\261\317\204\316\267 \317\200\316\261\317\201\316\261\316\263\317\201\316\261\317\206\316\277\317\200\316\277\316\257\316\267\317\203\316\267"]
  ::msgcat::mcset en "Auto indent" [encoding convertfrom utf-8 "Auto indent"]
  ::msgcat::mcset es "Auto indent" [encoding convertfrom utf-8 "Autoindentar"]
  ::msgcat::mcset it "Auto indent" [encoding convertfrom utf-8 "Indentazione automatica"]
  ::msgcat::mcset ru "Auto indent" [encoding convertfrom utf-8 "\320\220\320\262\321\202\320\276\320\276\321\202\321\201\321\202\321\203\320\277"]
  ::msgcat::mcset sk "Auto indent" [encoding convertfrom utf-8 "Automatick\303\251 odsadenie"]
  ::msgcat::mcset sq "Auto indent" [encoding convertfrom utf-8 "indenti automatik"]

  ::msgcat::mcset bg "Processing line %s ..." [encoding convertfrom utf-8 "\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\262\320\260\320\275\320\265 \320\275\320\260 \321\200\320\265\320\264 %s ..."]
  ::msgcat::mcset cz "Processing line %s ..." [encoding convertfrom utf-8 "Zpracov\303\241v\303\241m \305\231\303\241dek %s ..."]
  ::msgcat::mcset de "Processing line %s ..." [encoding convertfrom utf-8 "Verarbeite Zeile %s ..."]
  ::msgcat::mcset el "Processing line %s ..." [encoding convertfrom utf-8 "\316\225\317\200\316\265\316\276\316\265\317\201\316\263\316\261\317\203\316\257\316\261 \316\263\317\201\316\261\316\274\316\274\316\256\317\202 %s ..."]
  ::msgcat::mcset en "Processing line %s ..." [encoding convertfrom utf-8 "Processing line %s ..."]
  ::msgcat::mcset es "Processing line %s ..." [encoding convertfrom utf-8 "Procesando l\303\255nea %s ..."]
  ::msgcat::mcset it "Processing line %s ..." [encoding convertfrom utf-8 "Elaborazione linea %s ..."]
  ::msgcat::mcset ru "Processing line %s ..." [encoding convertfrom utf-8 "\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260 \321\201\321\202\321\200\320\276\320\272\320\270 %s ..."]
  ::msgcat::mcset sk "Processing line %s ..." [encoding convertfrom utf-8 "Sprac\303\272vam riadok %s ..."]
  ::msgcat::mcset sq "Processing line %s ..." [encoding convertfrom utf-8 "rrjeshti %s ne proces\342\200\246"]

  ::msgcat::mcset bg "Text editor is not active. To activate it, open existing file or create new one." [encoding convertfrom utf-8 "\320\242\320\265\320\272\321\201\321\202\320\276\320\262\320\270\321\217\321\202 \321\200\320\265\320\264\320\260\320\272\321\202\320\276\321\200 \320\275\320\265 \320\265 \320\260\320\272\321\202\320\270\320\262\320\265\320\275. \320\227\320\260 \320\260\320\272\321\202\320\270\320\262\320\270\321\200\320\260\320\275\320\265 \320\276\321\202\320\262\320\276\321\200\320\265\321\202\320\265 \321\201\321\212\321\211\320\265\321\201\321\202\320\262\321\203\320\262\320\260\321\211 \321\204\320\260\320\271\320\273 \320\270\320\273\320\270 \321\201\321\212\320\267\320\264\320\260\320\271\321\202\320\265 \320\275\320\276\320\262."]
  ::msgcat::mcset cz "Text editor is not active. To activate it, open existing file or create new one." [encoding convertfrom utf-8 "Textov\303\275 editor nen\303\255 aktivn\303\255. Pro jeho aktivaci otev\305\231ete existuj\303\255c\303\255 soubor nebo vytvo\305\231te nov\303\275."]
  ::msgcat::mcset de "Text editor is not active. To activate it, open existing file or create new one." [encoding convertfrom utf-8 "Texteditor ist nicht aktiv. Um ihn zu aktivieren, \303\266ffne eine existierende Datei oder lege eine neue an."]
  ::msgcat::mcset el "Text editor is not active. To activate it, open existing file or create new one." [encoding convertfrom utf-8 "\316\237 \316\265\317\200\316\265\316\276\316\265\317\201\316\263\316\261\317\203\317\204\316\256\317\202 \316\272\316\265\316\271\316\274\316\255\316\275\316\277\317\205 \316\264\316\265\316\275 \316\265\316\257\316\275\316\261\316\271 \316\265\316\275\316\265\317\201\316\263\317\214\317\202. \316\223\316\271\316\261 \316\275\316\261 \317\204\316\277\316\275 \316\265\316\275\316\265\317\201\316\263\316\277\317\200\316\277\316\271\316\256\317\203\316\265\317\204\316\265, \316\261\316\275\316\277\316\257\316\276\317\204\316\265 \316\261\317\201\317\207\316\265\316\257\316\277, \316\256 \316\264\316\267\316\274\316\271\316\277\317\205\317\201\316\263\316\256\317\203\317\204\316\265 \316\275\316\255\316\277."]
  ::msgcat::mcset en "Text editor is not active. To activate it, open existing file or create new one." [encoding convertfrom utf-8 "Text editor is not active. To activate it, open existing file or create new one."]
  ::msgcat::mcset es "Text editor is not active. To activate it, open existing file or create new one." [encoding convertfrom utf-8 "El editor de texto est\303\241 inactivo. Para activarlo, abre un archivo existente o crea uno nuevo."]
  ::msgcat::mcset it "Text editor is not active. To activate it, open existing file or create new one." [encoding convertfrom utf-8 "L'editor di testo non \303\250 attivo. Per attivarlo apri un file o creane uno."]
  ::msgcat::mcset ru "Text editor is not active. To activate it, open existing file or create new one." [encoding convertfrom utf-8 "\320\242\320\265\320\272\321\201\321\202\320\276\320\262\321\213\320\271 \321\200\320\265\320\264\320\260\320\272\321\202\320\276\321\200 \320\275\320\265\320\260\320\272\321\202\320\270\320\262\320\265\320\275. \320\224\320\273\321\217 \320\260\320\272\321\202\320\270\320\262\320\260\321\206\320\270\320\270 \320\276\321\202\320\272\321\200\320\276\320\271\321\202\320\265 \321\201\321\203\321\211\320\265\321\201\321\202\320\262\321\203\321\216\321\211\320\270\320\271 \321\204\320\260\320\271\320\273 \320\270\320\273\320\270 \321\201\320\276\320\267\320\264\320\260\320\271\321\202\320\265 \320\275\320\276\320\262\321\213\320\271."]
  ::msgcat::mcset sk "Text editor is not active. To activate it, open existing file or create new one." [encoding convertfrom utf-8 "Textov\303\275 editor nie je akt\303\255vny. Otvorte existuj\303\272ci s\303\272bor alebo vytvorte nov\303\275."]
  ::msgcat::mcset sq "Text editor is not active. To activate it, open existing file or create new one." [encoding convertfrom utf-8 "editori I tekstit nuk eshte aktiv. Qe ta aktivizosh, hape fajllin egzistues ose krijo nje tjeter."]

  ::msgcat::mcset bg "Control..." [encoding convertfrom utf-8 "\320\232\320\276\320\275\321\202\321\200\320\276\320\273 ..."]
  ::msgcat::mcset cz "Control..." [encoding convertfrom utf-8 "Ovl\303\241d\303\241n\303\255..."]
  ::msgcat::mcset de "Control..." [encoding convertfrom utf-8 "Kontrollfeld..."]
  ::msgcat::mcset el "Control..." [encoding convertfrom utf-8 "\316\210\316\273\316\265\316\263\317\207\316\277\317\202..."]
  ::msgcat::mcset en "Control..." [encoding convertfrom utf-8 "Control..."]
  ::msgcat::mcset es "Control..." [encoding convertfrom utf-8 "Control"]
  ::msgcat::mcset it "Control..." [encoding convertfrom utf-8 "Controlli ..."]
  ::msgcat::mcset ru "Control..." [encoding convertfrom utf-8 "\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265..."]
  ::msgcat::mcset sk "Control..." [encoding convertfrom utf-8 "Ovl\303\241danie..."]
  ::msgcat::mcset sq "Control..." [encoding convertfrom utf-8 "kontrolli. . ."]

  ::msgcat::mcset bg "BAC calculator..." [encoding convertfrom utf-8 "\320\232\320\260\320\273\320\272\321\203\320\273\320\260\321\202\320\276\321\200 \320\275\320\260 \320\260\320\273\320\272\320\276\321\205\320\276\320\273 ..."]
  ::msgcat::mcset cz "BAC calculator..." [encoding convertfrom utf-8 "Alkohol tester..."]
  ::msgcat::mcset de "BAC calculator..." [encoding convertfrom utf-8 "Blutalkoholrechner"]
  ::msgcat::mcset el "BAC calculator..." [encoding convertfrom utf-8 "\316\221\316\273\316\272\316\277\317\204\316\255\317\203\317\204..."]
  ::msgcat::mcset en "BAC calculator..." [encoding convertfrom utf-8 "BAC calculator..."]
  ::msgcat::mcset es "BAC calculator..." [encoding convertfrom utf-8 "Borrach\303\255metro"]
  ::msgcat::mcset it "BAC calculator..." [encoding convertfrom utf-8 "Calcolatore BAC ..."]
  ::msgcat::mcset ru "BAC calculator..." [encoding convertfrom utf-8 "\320\232\320\260\320\273\321\214\320\272\321\203\320\273\321\217\321\202\320\276\321\200 \320\260\320\273\320\272\320\276\320\263\320\276\320\273\321\217..."]
  ::msgcat::mcset sk "BAC calculator..." [encoding convertfrom utf-8 "Alkohol tester..."]
  ::msgcat::mcset sq "BAC calculator..." [encoding convertfrom utf-8 "matesi I alkoolit-BAC"]

  ::msgcat::mcset bg "Calibrate bitmap..." [encoding convertfrom utf-8 "\320\232\320\260\320\273\320\270\320\261\321\200\320\270\321\200\320\260\320\275\320\265 \320\275\320\260 \320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 ..."]
  ::msgcat::mcset de "Calibrate bitmap..." [encoding convertfrom utf-8 "Bild kalibrieren..."]
  ::msgcat::mcset it "Calibrate bitmap..." [encoding convertfrom utf-8 "Mappa georeferenziata..."]

  ::msgcat::mcset bg "About..." [encoding convertfrom utf-8 "\320\227\320\260 \320\277\321\200\320\276\320\263\321\200\320\260\320\274\320\260\321\202\320\260 ..."]
  ::msgcat::mcset cz "About..." [encoding convertfrom utf-8 "O programu..."]
  ::msgcat::mcset de "About..." [encoding convertfrom utf-8 "\303\234ber..."]
  ::msgcat::mcset el "About..." [encoding convertfrom utf-8 "\316\243\317\207\316\265\317\204\316\271\316\272\316\254..."]
  ::msgcat::mcset en "About..." [encoding convertfrom utf-8 "About..."]
  ::msgcat::mcset es "About..." [encoding convertfrom utf-8 "Acerca de..."]
  ::msgcat::mcset it "About..." [encoding convertfrom utf-8 "Versione ..."]
  ::msgcat::mcset ru "About..." [encoding convertfrom utf-8 "\320\236 \320\277\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\265..."]
  ::msgcat::mcset sk "About..." [encoding convertfrom utf-8 "O programe..."]
  ::msgcat::mcset sq "About..." [encoding convertfrom utf-8 "per programin\342\200\246"]

  ::msgcat::mcset bg "Search" [encoding convertfrom utf-8 "\320\242\321\212\321\200\321\201\320\265\320\275\320\265"]
  ::msgcat::mcset cz "Search" [encoding convertfrom utf-8 "Hledat"]
  ::msgcat::mcset de "Search" [encoding convertfrom utf-8 "Suche"]
  ::msgcat::mcset el "Search" [encoding convertfrom utf-8 "\316\221\316\275\316\261\316\266\316\256\317\204\316\267\317\203\316\267"]
  ::msgcat::mcset en "Search" [encoding convertfrom utf-8 "Search"]
  ::msgcat::mcset es "Search" [encoding convertfrom utf-8 "Buscar"]
  ::msgcat::mcset it "Search" [encoding convertfrom utf-8 "Cerca"]
  ::msgcat::mcset ru "Search" [encoding convertfrom utf-8 "\320\237\320\276\320\270\321\201\320\272"]
  ::msgcat::mcset sk "Search" [encoding convertfrom utf-8 "H\304\276ada\305\245"]
  ::msgcat::mcset sq "Search" [encoding convertfrom utf-8 "kerko"]

  ::msgcat::mcset bg "Close" [encoding convertfrom utf-8 "\320\227\320\260\321\202\320\262\320\276\321\200\320\270"]
  ::msgcat::mcset cz "Close" [encoding convertfrom utf-8 "Zav\305\231\303\255t"]
  ::msgcat::mcset de "Close" [encoding convertfrom utf-8 "Schlie\303\237en"]
  ::msgcat::mcset el "Close" [encoding convertfrom utf-8 "\316\232\316\273\316\265\316\257\317\203\316\271\316\274\316\277"]
  ::msgcat::mcset en "Close" [encoding convertfrom utf-8 "Close"]
  ::msgcat::mcset es "Close" [encoding convertfrom utf-8 "Cerrar"]
  ::msgcat::mcset it "Close" [encoding convertfrom utf-8 "Chiudi"]
  ::msgcat::mcset ru "Close" [encoding convertfrom utf-8 "\320\227\320\260\320\272\321\200\321\213\321\202\321\214"]
  ::msgcat::mcset sk "Close" [encoding convertfrom utf-8 "Zavrie\305\245"]
  ::msgcat::mcset sq "Close" [encoding convertfrom utf-8 "mbyll"]

  ::msgcat::mcset bg "theme all-symbols" [encoding convertfrom utf-8 "\320\262\321\201\320\270\321\207\320\272\320\270 \321\201\320\270\320\274\320\262\320\276\320\273\320\270"]
  ::msgcat::mcset cz "theme all-symbols" [encoding convertfrom utf-8 "v\305\241echny symboly"]
  ::msgcat::mcset de "theme all-symbols" [encoding convertfrom utf-8 "Alle Zeichen"]
  ::msgcat::mcset el "theme all-symbols" [encoding convertfrom utf-8 "\317\214\316\273\316\261"]
  ::msgcat::mcset it "theme all-symbols" [encoding convertfrom utf-8 "tutti"]
  ::msgcat::mcset ru "theme all-symbols" [encoding convertfrom utf-8 "\320\262\321\201\320\265"]
  ::msgcat::mcset sk "theme all-symbols" [encoding convertfrom utf-8 "v\305\241etky symboly"]
  ::msgcat::mcset sq "theme all-symbols" [encoding convertfrom utf-8 "tematizo te gjitha simbolet-shenjat"]

  ::msgcat::mcset bg "New file" [encoding convertfrom utf-8 "\320\235\320\276\320\262 \321\204\320\260\320\271\320\273"]
  ::msgcat::mcset de "New file" [encoding convertfrom utf-8 "Neue Datei"]
  ::msgcat::mcset el "New file" [encoding convertfrom utf-8 "\316\235\316\255\316\277 \316\261\317\201\317\207\316\265\316\257\316\277"]
  ::msgcat::mcset it "New file" [encoding convertfrom utf-8 "Nuovo"]
  ::msgcat::mcset sk "New file" [encoding convertfrom utf-8 "Nov\303\275 s\303\272bor"]
  ::msgcat::mcset sq "New file" [encoding convertfrom utf-8 "arkivi-fajlli I ri"]

  ::msgcat::mcset bg "Open file" [encoding convertfrom utf-8 "\320\236\321\202\320\262\320\276\321\200\320\270 \321\204\320\260\320\271\320\273"]
  ::msgcat::mcset de "Open file" [encoding convertfrom utf-8 "Datei \303\266ffnen"]
  ::msgcat::mcset el "Open file" [encoding convertfrom utf-8 "\316\206\316\275\316\277\316\271\316\263\316\274\316\261"]
  ::msgcat::mcset it "Open file" [encoding convertfrom utf-8 "Apri"]
  ::msgcat::mcset sk "Open file" [encoding convertfrom utf-8 "Otvori\305\245 s\303\272bor"]
  ::msgcat::mcset sq "Open file" [encoding convertfrom utf-8 "hape fajllin"]

  ::msgcat::mcset bg "Save file" [encoding convertfrom utf-8 "\320\227\320\260\320\277\320\270\321\210\320\270 \321\204\320\260\320\271\320\273"]
  ::msgcat::mcset de "Save file" [encoding convertfrom utf-8 "Datei speichern"]
  ::msgcat::mcset el "Save file" [encoding convertfrom utf-8 "\316\221\317\200\316\277\316\270\316\256\316\272\316\265\317\205\317\203\316\267"]
  ::msgcat::mcset it "Save file" [encoding convertfrom utf-8 "Salva"]
  ::msgcat::mcset sk "Save file" [encoding convertfrom utf-8 "Ulo\305\276i\305\245 s\303\272bor"]
  ::msgcat::mcset sq "Save file" [encoding convertfrom utf-8 "ruaje fajllin"]

  ::msgcat::mcset bg "Save file as" [encoding convertfrom utf-8 "\320\227\320\260\320\277\320\270\321\210\320\270 \321\204\320\260\320\271\320\273 \320\272\320\260\321\202\320\276"]
  ::msgcat::mcset de "Save file as" [encoding convertfrom utf-8 "Datei speichern als"]
  ::msgcat::mcset el "Save file as" [encoding convertfrom utf-8 "\316\221\317\200\316\277\316\270\316\256\316\272\316\265\317\205\317\203\316\267 \317\211\317\202"]
  ::msgcat::mcset it "Save file as" [encoding convertfrom utf-8 "Salva come"]
  ::msgcat::mcset sk "Save file as" [encoding convertfrom utf-8 "Ulo\305\276i\305\245 s\303\272bor ako"]
  ::msgcat::mcset sq "Save file as" [encoding convertfrom utf-8 "ruaje fajllin si"]

  ::msgcat::mcset bg "Close file" [encoding convertfrom utf-8 "\320\227\320\260\321\202\320\262\320\276\321\200\320\270 \321\204\320\260\320\271\320\273"]
  ::msgcat::mcset de "Close file" [encoding convertfrom utf-8 "Datei schlie\303\237en"]
  ::msgcat::mcset el "Close file" [encoding convertfrom utf-8 "\316\232\316\273\316\265\316\257\317\203\316\271\316\274\316\277 \316\261\317\201\317\207\316\265\316\257\316\277\317\205"]
  ::msgcat::mcset it "Close file" [encoding convertfrom utf-8 "Chiudi"]
  ::msgcat::mcset sk "Close file" [encoding convertfrom utf-8 "Zatvori\305\245 s\303\272bor"]
  ::msgcat::mcset sq "Close file" [encoding convertfrom utf-8 "mbylle fajllin"]

  ::msgcat::mcset bg "Switch to text editor" [encoding convertfrom utf-8 "\320\237\321\200\320\265\320\262\320\272\320\273\321\216\321\207\320\270 \320\275\320\260 \321\202\320\265\320\272\321\201\321\202\320\276\320\262 \321\200\320\265\320\264\320\260\320\272\321\202\320\276\321\200"]
  ::msgcat::mcset de "Switch to text editor" [encoding convertfrom utf-8 "Zum Texteditor wechseln"]
  ::msgcat::mcset el "Switch to text editor" [encoding convertfrom utf-8 "\316\234\316\265\317\204\316\254\316\262\316\261\317\203\316\267 \317\203\316\265 \316\265\317\200\316\265\316\276\316\265\317\201\316\263\316\261\317\203\317\204\316\256 \316\272\316\265\316\271\316\274\316\255\316\275\316\277\317\205"]
  ::msgcat::mcset it "Switch to text editor" [encoding convertfrom utf-8 "Editor di testi"]
  ::msgcat::mcset sk "Switch to text editor" [encoding convertfrom utf-8 "Prepn\303\272\305\245 na textov\303\275 editor"]
  ::msgcat::mcset sq "Switch to text editor" [encoding convertfrom utf-8 "kalo tek editori i tekstit"]

  ::msgcat::mcset bg "Switch to map editor" [encoding convertfrom utf-8 "\320\237\321\200\320\265\320\262\320\272\320\273\321\216\321\207\320\270 \320\275\320\260 \321\200\320\265\320\264\320\260\320\272\321\202\320\276\321\200 \320\275\320\260 \320\272\320\260\321\200\321\202\320\270"]
  ::msgcat::mcset de "Switch to map editor" [encoding convertfrom utf-8 "Zum Karteneditor wechseln"]
  ::msgcat::mcset el "Switch to map editor" [encoding convertfrom utf-8 "\316\234\316\265\317\204\316\254\316\262\316\261\317\203\316\267 \317\203\316\265 \316\265\317\200\316\265\316\276\316\265\317\201\316\263\316\261\317\203\317\204\316\256 \317\203\317\207\316\265\316\264\316\257\316\277\317\205"]
  ::msgcat::mcset it "Switch to map editor" [encoding convertfrom utf-8 "Editor di mappe"]
  ::msgcat::mcset sk "Switch to map editor" [encoding convertfrom utf-8 "Prepn\303\272\305\245 na mapov\303\275 editor"]
  ::msgcat::mcset sq "Switch to map editor" [encoding convertfrom utf-8 "kalo tek editori I hartes"]

  ::msgcat::mcset bg "Switch to compiler" [encoding convertfrom utf-8 "\320\237\321\200\320\265\320\262\320\272\320\273\321\216\321\207\320\270 \320\275\320\260 \320\272\320\276\320\274\320\277\320\270\320\273\320\260\321\202\320\276\321\200"]
  ::msgcat::mcset de "Switch to compiler" [encoding convertfrom utf-8 "Zum Compiler wechseln"]
  ::msgcat::mcset el "Switch to compiler" [encoding convertfrom utf-8 "\316\234\316\265\317\204\316\254\316\262\316\261\317\203\316\267 \317\203\316\265 \317\203\317\205\316\275\317\204\316\254\316\272\317\204\316\267"]
  ::msgcat::mcset it "Switch to compiler" [encoding convertfrom utf-8 "Compilatore"]
  ::msgcat::mcset sk "Switch to compiler" [encoding convertfrom utf-8 "Prepn\303\272\305\245 na kompil\303\241tor"]
  ::msgcat::mcset sq "Switch to compiler" [encoding convertfrom utf-8 "kalo tek kompilatori"]

  ::msgcat::mcset bg "Compile" [encoding convertfrom utf-8 "\320\232\320\276\320\274\320\277\320\270\320\273\320\270\321\200\320\260\320\271"]
  ::msgcat::mcset cz "Compile" [encoding convertfrom utf-8 "Kompilovat"]
  ::msgcat::mcset de "Compile" [encoding convertfrom utf-8 "Compilieren"]
  ::msgcat::mcset el "Compile" [encoding convertfrom utf-8 "\316\243\317\215\316\275\317\204\316\261\316\276\316\267"]
  ::msgcat::mcset en "Compile" [encoding convertfrom utf-8 "Compile"]
  ::msgcat::mcset es "Compile" [encoding convertfrom utf-8 "Compilar"]
  ::msgcat::mcset it "Compile" [encoding convertfrom utf-8 "Compila"]
  ::msgcat::mcset ru "Compile" [encoding convertfrom utf-8 "\320\232\320\276\320\274\320\277\320\270\320\273\320\270\321\200\320\276\320\262\320\260\321\202\321\214"]
  ::msgcat::mcset sk "Compile" [encoding convertfrom utf-8 "Kompilova\305\245"]
  ::msgcat::mcset sq "Compile" [encoding convertfrom utf-8 "kompilo"]

  ::msgcat::mcset bg "Switch to select mode" [encoding convertfrom utf-8 "\320\237\321\200\320\265\320\262\320\272\320\273\321\216\321\207\320\270 \320\275\320\260 \321\200\320\265\320\266\320\270\320\274 '\320\230\320\267\320\261\320\270\321\200\320\260\320\275\320\265'"]
  ::msgcat::mcset de "Switch to select mode" [encoding convertfrom utf-8 "In Auswahlmodus wechseln"]
  ::msgcat::mcset el "Switch to select mode" [encoding convertfrom utf-8 "\316\234\316\265\317\204\316\254\316\262\316\261\317\203\316\267 \317\203\316\265 \316\273\316\265\316\271\317\204\316\277\317\205\317\201\316\263\316\257\316\261 \316\265\317\200\316\271\316\273\316\277\316\263\316\256\317\202"]
  ::msgcat::mcset it "Switch to select mode" [encoding convertfrom utf-8 "Modalit\303\240 di selezione"]
  ::msgcat::mcset sk "Switch to select mode" [encoding convertfrom utf-8 "Prepn\303\272\305\245 do m\303\263du na v\303\275ber objektu"]
  ::msgcat::mcset sq "Switch to select mode" [encoding convertfrom utf-8 "kalo tek moduli per selekcionim"]

  ::msgcat::mcset bg "Select next scrap" [encoding convertfrom utf-8 "\320\230\320\267\320\261\320\265\321\200\320\270 \321\201\320\273\320\265\320\264\320\262\320\260\321\211\320\270\321\217\321\202 \321\201\320\272\321\200\320\260\320\277"]
  ::msgcat::mcset de "Select next scrap" [encoding convertfrom utf-8 "N\303\244chste Skizze ausw\303\244hlen"]
  ::msgcat::mcset el "Select next scrap" [encoding convertfrom utf-8 "\316\225\317\200\316\271\316\273\316\277\316\263\316\256 \316\265\317\200\317\214\316\274\316\265\316\275\316\277\317\205 \317\203\316\272\317\201\316\261\317\200"]
  ::msgcat::mcset it "Select next scrap" [encoding convertfrom utf-8 "Seleziona il prossimo scrap"]
  ::msgcat::mcset sk "Select next scrap" [encoding convertfrom utf-8 "Vyber nasleduj\303\272ci scrap"]
  ::msgcat::mcset sq "Select next scrap" [encoding convertfrom utf-8 "zgjedhe deponin e ardhshme"]

  ::msgcat::mcset bg "Select next area" [encoding convertfrom utf-8 "\320\230\320\267\320\261\320\265\321\200\320\270 \321\201\320\273\320\265\320\264\320\262\320\260\321\211\320\260\321\202\320\260 \320\276\320\261\320\273\320\260\321\201\321\202"]
  ::msgcat::mcset de "Select next area" [encoding convertfrom utf-8 "N\303\244chste Fl\303\244che ausw\303\244hlen"]
  ::msgcat::mcset el "Select next area" [encoding convertfrom utf-8 "\316\225\317\200\316\271\316\273\316\277\316\263\316\256 \316\265\317\200\317\214\316\274\316\265\316\275\316\267\317\202 \316\265\317\200\316\271\317\206\316\254\316\275\316\265\316\271\316\261\317\202"]
  ::msgcat::mcset it "Select next area" [encoding convertfrom utf-8 "Seleziona la prossima area"]
  ::msgcat::mcset sk "Select next area" [encoding convertfrom utf-8 "Vyber nasleduj\303\272cu plochu"]
  ::msgcat::mcset sq "Select next area" [encoding convertfrom utf-8 "zgjedhe-selekto fushen e ardhshme"]

  ::msgcat::mcset bg "Zoom in" [encoding convertfrom utf-8 "\320\237\321\200\320\270\320\261\320\273\320\270\320\266\320\270"]
  ::msgcat::mcset de "Zoom in" [encoding convertfrom utf-8 "Vergr\303\266\303\237ern"]
  ::msgcat::mcset el "Zoom in" [encoding convertfrom utf-8 "\316\234\316\265\316\263\316\255\316\270\317\205\316\275\317\203\316\267"]
  ::msgcat::mcset it "Zoom in" [encoding convertfrom utf-8 "Zoom in"]
  ::msgcat::mcset sk "Zoom in" [encoding convertfrom utf-8 "Zv\303\244\304\215\305\241i\305\245"]
  ::msgcat::mcset sq "Zoom in" [encoding convertfrom utf-8 "zmadho"]

  ::msgcat::mcset bg "Zoom out" [encoding convertfrom utf-8 "\320\236\321\202\320\264\320\260\320\273\320\265\321\207\320\270"]
  ::msgcat::mcset de "Zoom out" [encoding convertfrom utf-8 "Verkleinern"]
  ::msgcat::mcset el "Zoom out" [encoding convertfrom utf-8 "\316\243\316\274\316\257\316\272\317\201\317\205\316\275\317\203\316\267"]
  ::msgcat::mcset it "Zoom out" [encoding convertfrom utf-8 "Zoom out"]
  ::msgcat::mcset sk "Zoom out" [encoding convertfrom utf-8 "Zmen\305\241i\305\245"]
  ::msgcat::mcset sq "Zoom out" [encoding convertfrom utf-8 "zvogelo"]

  ::msgcat::mcset bg "Insert new scrap" [encoding convertfrom utf-8 "\320\222\320\274\321\212\320\272\320\275\320\270 \320\275\320\276\320\262 \321\201\320\272\321\200\320\260\320\277"]
  ::msgcat::mcset de "Insert new scrap" [encoding convertfrom utf-8 "Neue Skizze einf\303\274gen"]
  ::msgcat::mcset el "Insert new scrap" [encoding convertfrom utf-8 "\316\225\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \316\275\316\255\316\277\317\205 \317\203\316\272\317\201\316\261\317\200"]
  ::msgcat::mcset it "Insert new scrap" [encoding convertfrom utf-8 "Inserisci un nuovo scrap"]
  ::msgcat::mcset sk "Insert new scrap" [encoding convertfrom utf-8 "Vlo\305\276i\305\245 nov\303\275 scrap"]
  ::msgcat::mcset sq "Insert new scrap" [encoding convertfrom utf-8 "fute deponin e re"]

  ::msgcat::mcset bg "Insert new point" [encoding convertfrom utf-8 "\320\222\320\274\321\212\320\272\320\275\320\270 \320\275\320\276\320\262\320\260 \321\202\320\276\321\207\320\272\320\260"]
  ::msgcat::mcset de "Insert new point" [encoding convertfrom utf-8 "Neuen Punkt einf\303\274gen"]
  ::msgcat::mcset el "Insert new point" [encoding convertfrom utf-8 "\316\225\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \316\275\316\255\316\277\317\205 \317\203\316\267\316\274\316\265\316\257\316\277\317\205"]
  ::msgcat::mcset it "Insert new point" [encoding convertfrom utf-8 "Inserisci un nuovo punto"]
  ::msgcat::mcset sk "Insert new point" [encoding convertfrom utf-8 "Vlo\305\276i\305\245 nov\303\275 bod"]
  ::msgcat::mcset sq "Insert new point" [encoding convertfrom utf-8 "fute piken e re"]

  ::msgcat::mcset bg "Insert new line" [encoding convertfrom utf-8 "\320\222\320\274\321\212\320\272\320\275\320\270 \320\275\320\276\320\262\320\260 \320\273\320\270\320\275\320\270\321\217"]
  ::msgcat::mcset de "Insert new line" [encoding convertfrom utf-8 "Neue Linie einf\303\274gen"]
  ::msgcat::mcset el "Insert new line" [encoding convertfrom utf-8 "\316\225\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \316\275\316\255\316\261\317\202 \316\263\317\201\316\261\316\274\316\274\316\256\317\202"]
  ::msgcat::mcset it "Insert new line" [encoding convertfrom utf-8 "Inserisci una nuova linea"]
  ::msgcat::mcset sk "Insert new line" [encoding convertfrom utf-8 "Vlo\305\276i\305\245 nov\303\272 krivku"]
  ::msgcat::mcset sq "Insert new line" [encoding convertfrom utf-8 "fute rrjeshtin e ri"]

  ::msgcat::mcset bg "Insert new area" [encoding convertfrom utf-8 "\320\222\320\274\321\212\320\272\320\275\320\270 \320\275\320\276\320\262\320\260 \320\276\320\261\320\273\320\260\321\201\321\202"]
  ::msgcat::mcset de "Insert new area" [encoding convertfrom utf-8 "Neue Fl\303\244che einf\303\274gen"]
  ::msgcat::mcset el "Insert new area" [encoding convertfrom utf-8 "\316\225\316\271\317\203\316\261\316\263\317\211\316\263\316\256 \316\275\316\255\316\261\317\202 \316\265\317\200\316\271\317\206\316\254\316\275\316\265\316\271\316\261\317\202"]
  ::msgcat::mcset it "Insert new area" [encoding convertfrom utf-8 "Inserisci una nuova area"]
  ::msgcat::mcset sk "Insert new area" [encoding convertfrom utf-8 "Vlo\305\276i\305\245 nov\303\272 plochu"]
  ::msgcat::mcset sq "Insert new area" [encoding convertfrom utf-8 "fute fushen e re"]

  ::msgcat::mcset bg "Delete selected object" [encoding convertfrom utf-8 "\320\230\320\267\321\202\321\200\320\270\320\271 \320\270\320\267\320\261\321\200\320\260\320\275\320\270\321\217\321\202 \320\276\320\261\320\265\320\272\321\202"]
  ::msgcat::mcset de "Delete selected object" [encoding convertfrom utf-8 "Ausgew\303\244hltes Objekt l\303\266schen"]
  ::msgcat::mcset el "Delete selected object" [encoding convertfrom utf-8 "\316\264\316\271\316\261\316\263\317\201\316\261\317\206\316\256 \316\265\317\200\316\271\316\273\316\265\316\263\316\274\316\255\316\275\316\277\317\205"]
  ::msgcat::mcset it "Delete selected object" [encoding convertfrom utf-8 "Rimuovi l'oggetto selezionato"]
  ::msgcat::mcset sk "Delete selected object" [encoding convertfrom utf-8 "Zma\305\276 ozna\304\215en\303\251 objekty"]
  ::msgcat::mcset sq "Delete selected object" [encoding convertfrom utf-8 "fshije objektin e selektuar"]

  ::msgcat::mcset bg "theme basic-symbols" [encoding convertfrom utf-8 "\320\276\321\201\320\275\320\276\320\262\320\275\320\270 \321\201\320\270\320\274\320\262\320\276\320\273\320\270"]
  ::msgcat::mcset cz "theme basic-symbols" [encoding convertfrom utf-8 "z\303\241kladn\303\255 symboly"]
  ::msgcat::mcset de "theme basic-symbols" [encoding convertfrom utf-8 "Grundsymbole"]
  ::msgcat::mcset el "theme basic-symbols" [encoding convertfrom utf-8 "\316\262\316\261\317\203\316\271\316\272\316\254 \317\203\317\215\316\274\316\262\316\277\316\273\316\261"]
  ::msgcat::mcset it "theme basic-symbols" [encoding convertfrom utf-8 "base"]
  ::msgcat::mcset ru "theme basic-symbols" [encoding convertfrom utf-8 "\320\276\321\201\320\275\320\276\320\262\320\275\321\213\320\265"]
  ::msgcat::mcset sk "theme basic-symbols" [encoding convertfrom utf-8 "z\303\241kladn\303\251 symboly"]
  ::msgcat::mcset sq "theme basic-symbols" [encoding convertfrom utf-8 "tema simbolet-baze"]

  ::msgcat::mcset bg "theme passage-fills" [encoding convertfrom utf-8 "\321\200\320\265\320\273\320\265\321\204 \320\275\320\260 \320\263\320\260\320\273\320\265\321\200\320\270\321\217\321\202\320\260"]
  ::msgcat::mcset cz "theme passage-fills" [encoding convertfrom utf-8 "v\303\275pl\305\210"]
  ::msgcat::mcset de "theme passage-fills" [encoding convertfrom utf-8 "Gangf\303\274llungen"]
  ::msgcat::mcset el "theme passage-fills" [encoding convertfrom utf-8 "\316\263\316\255\316\274\316\271\317\203\316\274\316\261 \317\203\317\204\316\277\317\216\316\275"]
  ::msgcat::mcset it "theme passage-fills" [encoding convertfrom utf-8 "riempimenti"]
  ::msgcat::mcset ru "theme passage-fills" [encoding convertfrom utf-8 "\321\200\320\265\320\273\321\214\320\265\321\204 \321\205\320\276\320\264\320\260"]
  ::msgcat::mcset sk "theme passage-fills" [encoding convertfrom utf-8 "v\303\275pl\305\210"]
  ::msgcat::mcset sq "theme passage-fills" [encoding convertfrom utf-8 "tema mbushjet e kalimeve"]

  ::msgcat::mcset bg "theme speleothems" [encoding convertfrom utf-8 "\321\201\320\277\320\265\320\273\320\265\320\276\321\204\320\276\321\200\320\274\320\270"]
  ::msgcat::mcset cz "theme speleothems" [encoding convertfrom utf-8 "v\303\275zdoba"]
  ::msgcat::mcset de "theme speleothems" [encoding convertfrom utf-8 "Sinter"]
  ::msgcat::mcset el "theme speleothems" [encoding convertfrom utf-8 "\317\203\317\200\316\267\316\273\316\261\316\271\316\277\316\270\316\255\316\274\316\261\317\204\316\261"]
  ::msgcat::mcset it "theme speleothems" [encoding convertfrom utf-8 "speleotemi"]
  ::msgcat::mcset ru "theme speleothems" [encoding convertfrom utf-8 "\321\201\320\277\320\265\320\273\320\265\320\276-\321\204\320\276\321\200\320\274\321\213"]
  ::msgcat::mcset sk "theme speleothems" [encoding convertfrom utf-8 "v\303\275zdoba"]
  ::msgcat::mcset sq "theme speleothems" [encoding convertfrom utf-8 "speleo-tema"]

  ::msgcat::mcset bg "theme equipement" [encoding convertfrom utf-8 "\320\265\320\272\320\270\320\277\320\270\321\200\320\260\320\275\320\265"]
  ::msgcat::mcset cz "theme equipement" [encoding convertfrom utf-8 "vystrojen\303\255"]
  ::msgcat::mcset de "theme equipement" [encoding convertfrom utf-8 "Ausr\303\274stung"]
  ::msgcat::mcset el "theme equipement" [encoding convertfrom utf-8 "\316\265\316\276\316\277\317\200\316\273\316\271\317\203\316\274\317\214\317\202"]
  ::msgcat::mcset it "theme equipement" [encoding convertfrom utf-8 "armo"]
  ::msgcat::mcset ru "theme equipement" [encoding convertfrom utf-8 "\320\276\320\261\320\276\321\200\321\203\320\264\320\276\320\262\320\260\320\275\320\270\320\265"]
  ::msgcat::mcset sk "theme equipement" [encoding convertfrom utf-8 "vystrojenie"]
  ::msgcat::mcset sq "theme equipement" [encoding convertfrom utf-8 "tema pajisjet"]

therion/xtherion/sbar.tcl0000644000076400010400000000526210625665160016574 0ustar  userAdministrators##
## sbar.tcl --
##
##     Status bar module.  
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------


proc xth_status_bar {aname widg stext} {
  global xth  
  if {$xth(gui,balloons)} {
    DynamicHelp::register $widg balloon $stext
  }
  set anml $aname
  foreach aname $anml {
    set sbar $xth(gui,$aname).sf.sbar
    set widgx "$aname$widg"
    set xth(gui,sbar,$widgx,exp) 0  
    bind $widg  "+ if {\$xth(gui,sbar,$widgx,exp) == 0} {catch {set xth(gui,sbar,$widgx,exp) 1; set xth(gui,sbar,$widgx,otext) \[$sbar cget -text\]; $sbar configure -text [list $stext]}}"
    bind $widg  "+ if {\$xth(gui,sbar,$widgx,exp) == 0} {catch {set xth(gui,sbar,$widgx,exp) 1; set xth(gui,sbar,$widgx,otext) \[$sbar cget -text\]; $sbar configure -text [list $stext]}}"
    bind $widg  "+ if {\$xth(gui,sbar,$widgx,exp) == 1} {catch {$sbar configure -text \$xth(gui,sbar,$widgx,otext); set xth(gui,sbar,$widgx,exp) 0}}"
    bind $widg  "+ if {\$xth(gui,sbar,$widgx,exp) == 1} {catch {$sbar configure -text \$xth(gui,sbar,$widgx,otext); set xth(gui,sbar,$widgx,exp) 0}}"
  }
}

proc xth_status_bar_push aname {
  global xth
  catch {
  set sbar $xth(gui,$aname).sf.sbar
  if {![info exists xth(gui,sbar,$aname)]} {
    set xth(gui,sbar,$aname) [$sbar cget -text]
  } else {
    set xth(gui,sbar,$aname) [lappend $xth(gui,sbar,$aname) [$sbar cget -text]]
  }
  }
}


proc xth_status_bar_pop aname {
  global xth
  catch {
  set sbar $xth(gui,$aname).sf.sbar
  if {! [info exists xth(gui,sbar,$aname)]} {
    set xth(gui,sbar,$aname) ""
  } else {
    $sbar configure -text [lindex $xth(gui,sbar,$aname) 0]
    set xth(gui,sbar,$aname) [lreplace $xth(gui,sbar,$aname) 0 0]
  }
  }
}


proc xth_status_bar_status {aname txt} {
  global xth
  catch {
  set sbar $xth(gui,$aname).sf.sbar
  $sbar configure -text $txt
  update idletasks
  }
}

therion/xtherion/scroll.tcl0000644000076400010400000000316410625665160017142 0ustar  userAdministrators##
## scroll.tcl --
##
##     Special scrollbar commands.  
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------


proc xth_scroll_showcmd {sbar cmd} {
  global xth
  set xth(scroll,$sbar,show) $cmd
  set xth(scroll,$sbar,open) 0
}

proc xth_scroll_hidecmd {sbar cmd} {
  global xth
  set xth(scroll,$sbar,hide) $cmd
  set xth(scroll,$sbar,open) 0
}

proc xth_scroll {sbar first last} {
  global xth
  if {[expr $first == 0.0] && [expr $last == 1.0]} {
    if {$xth(scroll,$sbar,open) == 1} {
      set xth(scroll,$sbar,open) 0
      eval $xth(scroll,$sbar,hide)
      update idletasks
    }
  } else {
    if {$xth(scroll,$sbar,open) == 0} {
      set xth(scroll,$sbar,open) 1
      eval $xth(scroll,$sbar,show)
      update idletasks
    }
    $sbar set $first $last
  }
}therion/xtherion/source.tcl0000755000076400010400000000327411057012246017140 0ustar  userAdministrators#! /usr/bin/wish
## source.tcl --
##
##     Main script.
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------

set xth(debug) 1

#@ALL
source ver.tcl
source global.tcl
source msgxth.tcl
source msgusr.tcl
#@XTHERION
source therion.tcl
#@SURVEX
if 0 {
source svx_global.tcl
}
#@ALL
source about.tcl
source init.tcl
source syntax.tcl
source sbar.tcl
source scroll.tcl
source help.tcl
source ctrl.tcl
source app.tcl
source te.tcl
source te_sdata.tcl
source te_sdata2.tcl
source te_import.tcl
#@XTHERION
source tools_imgs.tcl
source me_imgs.tcl
source me_cmds.tcl
source me_cmds2.tcl
source me_import.tcl
source me_ss.tcl
source me.tcl
source cp_procs.tcl
source bac.tcl
source cp.tcl
source tools.tcl
source mapcal.tcl
#@DEBUG
if {![string equal $xth(gui,platform) windows]} {
  source console.tcl
} else {
  source dbg.tcl
}
#@ALL
source main.tcl


therion/xtherion/svx_global.tcl0000644000076400010400000000325510625665160020005 0ustar  userAdministrators##
## svx_global.tcl --
##
##     Global variables for svxedit.   
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------


# file extensions
set xth(app,te,filetypes) {    
  {{Survex files}       {.svx}}    
  {{Text files}       {.txt}}    
  {{All files}       {*}}    
}
set xth(app,te,fileext) {.svx}

# command indenting
set xth(icmds) {}
set xth(cmds) {}
set xth(cmd,*begin) 2
set xth(endcmd,*begin) "*end"
set xth(cmd,*end) -2
set xth(endcmd,*end) ""

# application titles
set xth(prj,name) "svxedit"
set xth(prj,title) "survex source editor"
set xth(about,info) "svxedit v1.0 beta\n \u00A9 2002 Stacho Mudrak"

# fonts :-)
case $tcl_platform(platform) {
  unix {
    set xth(gui,lfont) "Helvetica 10"
    set xth(gui,efont) {fixed 10 roman}
  }
  windows {
    set xth(gui,efont) "Courier 12 roman"
  }
  macintosh {
  }
}
therion/xtherion/syntax.tcl0000644000076400010400000000561610625665160017176 0ustar  userAdministrators##
## syntax.tcl --
##
##     Syntax module.  
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------

# prepare the syntax commands
foreach cmd $xth(icmds) {
  set xth(cmd,$cmd) 2
  set xth(endcmd,$cmd) end$cmd
  set xth(endcmd,end$cmd) ""
  set xth(cmd,end$cmd) -2
}

foreach cmd $xth(cmds) {
  set xth(cmd,$cmd) 1
  set xth(endcmd,$cmd) end$cmd
  set xth(endcmd,end$cmd) ""
  set xth(cmd,end$cmd) -1
}

set xth(datafmts) [list \
  "unknown      $xth(datafmt,unknown)" \
  "station      $xth(datafmt,station)" \
  "from         $xth(datafmt,station)" \
  "to           $xth(datafmt,station)" \
  "compass      $xth(datafmt,bearing)" \
  "backcompass  $xth(datafmt,bearing)" \
  "bearing      $xth(datafmt,bearing)" \
  "backbearing  $xth(datafmt,bearing)" \
  "tape         $xth(datafmt,length)" \
  "length       $xth(datafmt,length)" \
  "count        $xth(datafmt,counter)" \
  "counter      $xth(datafmt,counter)" \
  "fromcount    $xth(datafmt,counter)" \
  "tocount      $xth(datafmt,counter)" \
  "fromcounter  $xth(datafmt,counter)" \
  "tocounter    $xth(datafmt,counter)" \
  "gradient     $xth(datafmt,gradient)" \
  "clino        $xth(datafmt,gradient)" \
  "backgradient $xth(datafmt,gradient)" \
  "backclino    $xth(datafmt,gradient)" \
  "depth        $xth(datafmt,depth)" \
  "fromdepth    $xth(datafmt,depth)" \
  "todepth      $xth(datafmt,depth)" \
  "depthchange  $xth(datafmt,depth)" \
  "dx           $xth(datafmt,length)" \
  "dy           $xth(datafmt,length)" \
  "dz           $xth(datafmt,length)" \
  "northing     $xth(datafmt,length)" \
  "easting      $xth(datafmt,length)" \
  "altitude     $xth(datafmt,length)" \
  "up           $xth(datafmt,dimensions)" \
  "down         $xth(datafmt,dimensions)" \
  "left         $xth(datafmt,dimensions)" \
  "right        $xth(datafmt,dimensions)" \
  "ceiling      $xth(datafmt,dimensions)" \
  "floor        $xth(datafmt,dimensions)" \
]

foreach datafmt $xth(datafmts) {
  set qt [lindex $datafmt 0]
  set xth(datafmt,$qt,format) [lindex $datafmt 1]
  set xth(datafmt,$qt,special) [lindex $datafmt 2]
}
therion/xtherion/te.tcl0000644000076400010400000010673112255643530016256 0ustar  userAdministrators##
## te.tcl --
##
##     Text editor.   
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------


xth_about_status [mc "loading text editor ..."]

if {[string equal -nocase $xth(prj,name) svxedit]} {
  xth_app_create te {}
} else {
  xth_app_create te [mc "Text Editor"]
}

xth_ctrl_add te files [mc "Files"]
xth_ctrl_add te sdata [mc "Data table"]
xth_ctrl_add te sr [mc "Search & Replace"]
xth_ctrl_finish te

set xth(te,open_file_encoding) $xth(app,fencoding)

set xth(te,bind,text_tab) {
  if { [string equal [%W cget -state] "normal"] } {
    xth_te_insert_tab %W
    break
  }
}

set xth(te,bind,text_return) {
  regexp {(\d+)\.} [%W index insert] dum cln
  set spcs ""
  regexp {^\s+} [%W get $cln.0 $cln.end] spcs
#  set spcsc [string length $spcs]
#  set indct [string length [xth_te_get_indent %W $cln.0 1]]
#  if {$spcsc == $indct} {
#  } elseif {$spcsc > $indct} {
#    %W delete $cln.0 $cln.[expr $spcsc - $indct]
#  } elseif {$spcsc < $indct} {
#    %W insert $cln.0 [format \x25[expr $indct - $spcsc]s " "]
#  }
#  xth_te_insert_text %W "\n[xth_te_get_indent %W [expr $cln + 1].0 0]"
  xth_te_insert_text %W "\n$spcs"
}


proc xth_te_insert_text {w s} {
    if {[string equal $s ""] || [string equal [$w cget -state] "disabled"]} {
	return
    }
    set compound 0
    catch {
	if {[$w compare sel.first <= insert] \
		&& [$w compare sel.last >= insert]} {
            set oldSeparator [$w cget -autoseparators]
            if { $oldSeparator } {
                $w configure -autoseparators 0
                $w edit separator
                set compound 1
            }
	    $w delete sel.first sel.last
	}
    }
    $w insert insert $s
    $w see insert
    if { $compound && $oldSeparator } {
        $w edit separator
        $w configure -autoseparators 1
    }
}


proc xth_te_insert_tab W {
  global xth
  regexp {\.(\d+)} [$W index insert] dum col
  set nsp [expr $xth(gui,etabsize) - ($col % $xth(gui,etabsize))]
  xth_te_insert_text $W  [format \x25$nsp\s " "]
  focus $W
}


proc xth_te_sdata_enable {w} {
  global xth
  if {[string length $w] < 1} {
    set w $xth(ctrl,te,sdata)
  }
  set chlist [winfo children $w]
  if {[llength $chlist] > 0} {
    foreach sdw $chlist {
      catch {$sdw configure -state normal}
      catch {xth_te_sdata_enable $sdw}
    }
  }
}

proc xth_te_sdata_disable {w} {
  global xth
  if {[string length $w] < 1} {
    set w $xth(ctrl,te,sdata)
  }
  set chlist [winfo children $w]
  if {[llength $chlist] > 0} {
    foreach sdw $chlist {
      catch {$sdw configure -state disabled}
      catch {xth_te_sdata_disable $sdw}
    }
  }
}


set xth(te,flist) {}
set xth(te,fcurr) -1
set xth(te,fltid) 0

# create position bar
set pbar $xth(gui,te).sf.pbar
label $pbar -text "2.0" -width 8 -relief sunken -font $xth(gui,lfont)
pack $pbar -side left


# file control
frame $xth(ctrl,te,files).fl
set flbox $xth(ctrl,te,files).fl.flbox 
listbox $flbox -height 6 -selectmode single -takefocus 1 \
  -yscrollcommand "xth_scroll $xth(ctrl,te,files).fl.sv" \
  -xscrollcommand "xth_scroll $xth(ctrl,te,files).fl.sh" \
  -font $xth(gui,lfont) -exportselection no \
  -selectborderwidth 1

scrollbar $xth(ctrl,te,files).fl.sv -orient vert  -command "$flbox yview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
scrollbar $xth(ctrl,te,files).fl.sh -orient horiz  -command "$flbox xview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
frame $xth(ctrl,te,files).ef

  
bind $flbox <> "xth_te_show_file \[lindex \[%W curselection\] 0\]"

grid columnconf $xth(ctrl,te,files).fl 0 -weight 1
grid rowconf $xth(ctrl,te,files).fl 0 -weight 1
grid $flbox -column 0 -row 0 -sticky news
xth_scroll_showcmd $xth(ctrl,te,files).fl.sv "grid $xth(ctrl,te,files).fl.sv -column 1 -row 0 -sticky news"
xth_scroll_hidecmd $xth(ctrl,te,files).fl.sv "grid forget $xth(ctrl,te,files).fl.sv"
xth_scroll_showcmd $xth(ctrl,te,files).fl.sh "grid $xth(ctrl,te,files).fl.sh -column 0 -row 1 -sticky news"
xth_scroll_hidecmd $xth(ctrl,te,files).fl.sh "grid forget $xth(ctrl,te,files).fl.sh"
xth_status_bar te $flbox [mc "Switch open files."]
grid columnconf $xth(ctrl,te,files) 0 -weight 1
grid $xth(ctrl,te,files).fl -column 0 -row 0 -sticky news
if {![string equal -nocase $xth(prj,name) svxedit]} {
grid $xth(ctrl,te,files).ef -column 0 -row 1 -sticky news
}
Label $xth(ctrl,te,files).ef.ecl -text [mc "Encoding"] -anchor e -font $xth(gui,lfont) -state disabled
ComboBox $xth(ctrl,te,files).ef.ecb -values $xth(encodings) \
  -textvariable xth(te,open_file_encoding) \
  -font $xth(gui,lfont) -height 4 -command xth_te_set_encoding \
  -state disabled
Button $xth(ctrl,te,files).ef.chb -text [mc "Change to"] -anchor e -font $xth(gui,lfont) -padx 1 -state disabled -command xth_te_set_encoding
Label $xth(ctrl,te,files).ef.cel -text "" -anchor w -padx 2 -font $xth(gui,lfont) -state disabled
#grid columnconf $xth(ctrl,te,files).ef 0 -weight 0
grid columnconf $xth(ctrl,te,files).ef 1 -weight 1
grid $xth(ctrl,te,files).ef.ecl -column 0 -row 0 -sticky news
grid $xth(ctrl,te,files).ef.cel -column 1 -row 0 -sticky news
grid $xth(ctrl,te,files).ef.chb -column 0 -row 1 -sticky news
grid $xth(ctrl,te,files).ef.ecb -column 1 -row 1 -sticky ew
xth_status_bar te $xth(ctrl,te,files).ef [mc "To set file encoding, type encoding name and press  button."]

frame $xth(gui,te).af.apps.ff -bg $xth(gui,ecolorbg)
pack $xth(gui,te).af.apps.ff -fill both -expand yes



# table control
Button $xth(ctrl,te,sdata).sfb -text [mc "Scan data format"] \
  -font $xth(gui,lfont) -state disabled
xth_status_bar te $xth(ctrl,te,sdata).sfb \
  [mc "Scan data format and rebuild centerline data insertion tool."]

checkbutton $xth(ctrl,te,sdata).sfs -text [mc "Enter station names"] -anchor w \
  -font $xth(gui,lfont) -variable xth(te,sdata,es) -state disabled
xth_status_bar te $xth(ctrl,te,sdata).sfs \
  [mc "Check if you want to insert station names for each shot."]

frame $xth(ctrl,te,sdata).sdf

button $xth(ctrl,te,sdata).taf -text [mc "Auto format selection"] \
  -font $xth(gui,lfont) -state disabled
xth_status_bar te $xth(ctrl,te,sdata).taf [mc "Format selection to given table."]

grid columnconf $xth(ctrl,te,sdata) 0 -weight 1
grid $xth(ctrl,te,sdata).sfb -column 0 -row 0 -sticky nsew
grid $xth(ctrl,te,sdata).sdf -column 0 -row 1 -sticky nsew
grid $xth(ctrl,te,sdata).sfs -column 0 -row 2 -sticky nsew
grid $xth(ctrl,te,sdata).taf -column 0 -row 3 -sticky nsew




set sfm $xth(ctrl,te,sr)

set xth(ctrl,te,sr,selection_io) 0
set xth(ctrl,te,sr,search) ""
set xth(ctrl,te,sr,replace_io) 0
set xth(ctrl,te,sr,replace) ""
set xth(ctrl,te,sr,case_io) 0
set xth(ctrl,te,sr,regular_io) 0
set xth(ctrl,te,sr,selection_io) 0

set xth(ctrl,te,sr,selection_start) {}
set xth(ctrl,te,sr,selection_end) {}
set xth(ctrl,te,sr,search_end) end

Label $sfm.seal -text [mc "search"] -anchor w -font $xth(gui,lfont) -state disabled \
  -width 4
xth_status_bar te $sfm.seal [mc "Search expression."]
Entry $sfm.seae -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,te,sr,search)
xth_status_bar te $sfm.seae [mc "Search expression."]

checkbutton $sfm.replc -text [mc "replace"] -anchor w -font $xth(gui,lfont) \
  -state disabled -width 4 \
  -variable xth(ctrl,te,sr,replace_io) \
  -command {}
xth_status_bar te $sfm.replc [mc "Check whether to replace found expression."]
Entry $sfm.reple -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,te,sr,replace)
xth_status_bar te $sfm.reple [mc "Replace expression."]

checkbutton $sfm.ccase -text [mc "case sensitive search"] -anchor w -font $xth(gui,lfont) \
  -state disabled -width 0 \
  -variable xth(ctrl,te,sr,case_io) \
  -command {}
xth_status_bar te $sfm.ccase [mc "Check if search should be case sensitive."]

checkbutton $sfm.creg -text [mc "regular expressions"] -anchor w -font $xth(gui,lfont) \
  -state disabled -width 0 \
  -variable xth(ctrl,te,sr,regular_io) \
  -command {}
xth_status_bar te $sfm.creg [mc "Check whether to evaluate search and replace as regular expressions."]

checkbutton $sfm.csel -text [mc "search selection only"] -anchor w -font $xth(gui,lfont) \
  -state disabled -width 0 \
  -variable xth(ctrl,te,sr,selection_io) \
  -command {}
xth_status_bar te $sfm.csel [mc "Check whether to do search only in selected text."]

Button $sfm.bfirst -text [mc "First"] -anchor center -font $xth(gui,lfont) \
  -state disabled -width 4 -command te_sr_first
xth_status_bar te $sfm.bfirst [mc "Search or replace first expression in the file."]
Button $sfm.bnext -text [mc "Next"] -anchor center -font $xth(gui,lfont) \
  -state disabled -width 4 -command te_sr_next
xth_status_bar te $sfm.bnext [mc "Search or replace next expression after the cursor in the file."]
Button $sfm.ball -text [mc "All"] -anchor center -font $xth(gui,lfont) \
  -state disabled -width 4 -command te_sr_all
xth_status_bar te $sfm.ball [mc "Search or replace all expressions in the file."]
Button $sfm.bclear -text [mc "Clear"] -anchor center -font $xth(gui,lfont) \
  -state disabled -width 4 -command {
    te_sr_clear
    set xth(ctrl,te,sr,replace_io) 0
    update idletasks
  }
xth_status_bar te $sfm.bclear [mc "Clear all highlights in the file."]


grid columnconf $sfm 0 -weight 1
grid columnconf $sfm 1 -weight 1
grid $sfm.seal -row 0 -column 0 -sticky news
grid $sfm.seae -row 1 -column 0 -sticky news
grid $sfm.replc -row 0 -column 1 -sticky news
grid $sfm.reple -row 1 -column 1 -sticky news
grid $sfm.ccase -row 2 -column 0 -columnspan 2 -sticky news
grid $sfm.creg -row 3 -column 0 -columnspan 2 -sticky news
grid $sfm.csel -row 4 -column 0 -columnspan 2 -sticky news
grid $sfm.bfirst -row 5 -column 0 -sticky news
grid $sfm.bnext -row 5 -column 1 -sticky news
grid $sfm.ball -row 6 -column 0 -sticky news
grid $sfm.bclear -row 6 -column 1 -sticky news





proc xth_te_show_file {fidx} {

  global xth
  
  if {$xth(te,fcurr) >= 0} {
    pack forget $xth(te,[lindex $xth(te,flist) $xth(te,fcurr)],frame)
  }
  
  if {$fidx < 0} {
    set fidx 0
  }
  if {$fidx >= [llength $xth(te,flist)]} {
    set fidx [expr [llength $xth(te,flist)] - 1]
  }
  
  set xth(te,fcurr) $fidx
  if {$xth(te,fcurr) >= 0} {
    set cfid [lindex $xth(te,flist) $xth(te,fcurr)]
    pack $xth(te,$cfid,frame) -expand yes -fill both
    $xth(ctrl,te,files).fl.flbox delete $xth(te,fcurr)
    $xth(ctrl,te,files).fl.flbox insert $xth(te,fcurr) "[expr $xth(te,fcurr) + 1]. $xth(te,$cfid,name) ($xth(te,$cfid,path))"
    $xth(ctrl,te,files).fl.flbox see $fidx
    $xth(ctrl,te,files).fl.flbox selection clear 0 end
    $xth(ctrl,te,files).fl.flbox selection set $fidx $fidx
    focus $xth(te,[lindex $xth(te,flist) $xth(te,fcurr)],frame).txt
    set xth(te,open_file) $xth(te,$cfid,name)
    # set xth(te,open_file_encoding) $xth(te,$cfid,encoding)
    $xth(ctrl,te,files).ef.cel configure -text $xth(te,$cfid,encoding)
    $xth(ctrl,te,files).ef.ecl configure -state normal
    $xth(ctrl,te,files).ef.ecb configure -state normal
    $xth(ctrl,te,files).ef.chb configure -state normal
    $xth(ctrl,te,files).ef.cel configure -state normal
    $xth(te,menu) entryconfigure [mc "Edit"] -state normal
    $xth(te,menu,file) entryconfigure [mc "Save"] -state normal
    $xth(te,menu,file) entryconfigure [mc "Save as"] -state normal
    $xth(te,menu,file) entryconfigure [mc "Import"] -state normal
    $xth(te,menu,file) entryconfigure [mc "Save all"] -state normal
    $xth(te,menu,file) entryconfigure [mc "Auto save"] -state normal
    $xth(te,menu,file) entryconfigure [mc "Close"] -state normal
    $xth(ctrl,te,sr).seal configure -state normal
    $xth(ctrl,te,sr).seae configure -state normal
    $xth(ctrl,te,sr).replc configure -state normal
    $xth(ctrl,te,sr).reple configure -state normal
    $xth(ctrl,te,sr).ccase configure -state normal
    $xth(ctrl,te,sr).creg configure -state normal
    $xth(ctrl,te,sr).csel configure -state normal
    $xth(ctrl,te,sr).bfirst configure -state normal
    $xth(ctrl,te,sr).bnext configure -state normal
    $xth(ctrl,te,sr).ball configure -state normal 
    $xth(ctrl,te,sr).bclear configure -state normal
    if {[llength $xth(te,flist)] > 1} {
      $xth(te,menu,file) entryconfigure [mc "Next"] -state normal
      $xth(te,menu,file) entryconfigure [mc "Previous"] -state normal
    } else {
      $xth(te,menu,file) entryconfigure [mc "Next"] -state disabled
      $xth(te,menu,file) entryconfigure [mc "Previous"] -state disabled
    }
    xth_te_sdata_enable ""
  } else {
    set xth(te,open_file) ""
    set xth(te,open_file_encoding) $xth(app,fencoding)
    $xth(te,menu,file) entryconfigure [mc "Save"] -state disabled
    $xth(te,menu,file) entryconfigure [mc "Save as"] -state disabled
    $xth(te,menu,file) entryconfigure [mc "Import"] -state disabled
    $xth(te,menu,file) entryconfigure [mc "Save all"] -state disabled
    $xth(te,menu,file) entryconfigure [mc "Auto save"] -state disabled
    $xth(te,menu,file) entryconfigure [mc "Close"] -state disabled
    $xth(te,menu,file) entryconfigure [mc "Next"] -state disabled
    $xth(te,menu,file) entryconfigure [mc "Previous"] -state disabled
    $xth(ctrl,te,files).ef.ecl configure -state disabled
    $xth(ctrl,te,files).ef.ecb configure -state disabled
    $xth(ctrl,te,files).ef.chb configure -state disabled
    $xth(ctrl,te,files).ef.cel configure -state disabled -text ""
    xth_te_sdata_disable ""
    $xth(te,menu) entryconfigure [mc "Edit"] -state disabled
    $xth(ctrl,te,sr).seal configure -state disabled
    $xth(ctrl,te,sr).seae configure -state disabled
    $xth(ctrl,te,sr).replc configure -state disabled
    $xth(ctrl,te,sr).reple configure -state disabled
    $xth(ctrl,te,sr).ccase configure -state disabled
    $xth(ctrl,te,sr).creg configure -state disabled
    $xth(ctrl,te,sr).csel configure -state disabled
    $xth(ctrl,te,sr).bfirst configure -state disabled
    $xth(ctrl,te,sr).bnext configure -state disabled
    $xth(ctrl,te,sr).ball configure -state disabled 
    $xth(ctrl,te,sr).bclear configure -state disabled
    xth_ctrl_minimize te sr
  }
  xth_app_title te
  
}


proc xth_te_set_encoding {} {

  global xth
 
  if {$xth(te,fcurr) >= 0} {
    # convert encoding into system's one
    set rxp "\\s+($xth(te,open_file_encoding))\\s+"
    if {[regexp -nocase $rxp $xth(encodings) dum temp]} {
      set xth(te,open_file_encoding) $temp
      set xth(te,[lindex $xth(te,flist) $xth(te,fcurr)],encoding) $temp
      $xth(ctrl,te,files).ef.cel configure -text $temp
    } else {
      MessageDlg $xth(gui,message) -parent $xth(gui,main) \
        -icon error -type ok \
        -message "uknown encoding -- $xth(te,open_file_encoding)" \
        -font $xth(gui,lfont)
    }
  }
}

proc xth_te_switch_file {fdr} {
  global xth
  set cf $xth(te,fcurr)
  if {$cf != -1} {
    incr cf $fdr
    if {$cf < 0} {
      set cf [expr [llength $xth(te,flist)] - 1]
    }
    if {$cf >= [llength $xth(te,flist)]} {
      set cf 0
    }
    xth_te_show_file $cf
  }
}


proc xth_te_create_file {} {

  global xth
  xth_status_bar_status te ""
  
  # create file variables
  incr xth(te,fltid)
  set cfid $xth(te,fltid)
  #set xth(te,$cfid,name) [format "noname%d$xth(app,te,fileext)" $cfid]
  set xth(te,$cfid,name) [format "(new file)" $cfid]
  set xth(te,$cfid,path) [file join $xth(gui,initdir) $xth(te,$cfid,name)]
  set xth(te,$cfid,newf) 1
  set xth(te,$cfid,mtime) 0
  set xth(te,$cfid,encoding) $xth(app,fencoding)
  set xth(te,$cfid,frame) $xth(gui,te).af.apps.ff.file$cfid
  set cfr $xth(te,$cfid,frame)

  # create the frame and bind the events
  set iac {if {[string equal $xth(app,active) te]} }
  frame $cfr
  text $cfr.txt  -font $xth(gui,efont) -bg $xth(gui,ecolorbg) \
    -fg $xth(gui,ecolorfg) -insertbackground $xth(gui,ecolorfg) \
    -yscrollcommand "$cfr.sv set" \
    -xscrollcommand "$cfr.sh set" \
    -relief sunken \
    -selectbackground $xth(gui,ecolorselbg) \
    -selectforeground $xth(gui,ecolorselfg) \
    -selectborderwidth 0 \
    -wrap none
  if {$xth(gui,text_undo)} {
    $cfr.txt configure -undo 1 -maxundo -1
  }
  set xth(te,$cfid,otext) [$cfr.txt get 1.0 end]
  scrollbar $cfr.sv -orient vert  -command "$cfr.txt yview" \
    -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
  scrollbar $cfr.sh -orient horiz  -command "$cfr.txt xview" \
    -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
  bind $cfr.txt  "$iac {$xth(te,bind,text_tab)}"
  bind $cfr.txt  "$iac {$xth(te,bind,text_return)}"
  bind $cfr.txt <> "xth_te_update_position $cfr.txt"
  bind $cfr.txt  "+ $iac {event generate $cfr.txt <> -when tail}"
  bind $cfr.txt  "+ $iac {event generate $cfr.txt <> -when tail}"
  bind $cfr.txt <$xth(kb_control)-Key-1> "$iac {xth_te_show_file 0}"
  bind $cfr.txt <$xth(kb_control)-Key-2> "$iac {xth_te_show_file 1}"
  bind $cfr.txt <$xth(kb_control)-Key-3> "$iac {xth_te_show_file 2}"
  bind $cfr.txt <$xth(kb_control)-Key-4> "$iac {xth_te_show_file 3}"
  bind $cfr.txt <$xth(kb_control)-Key-5> "$iac {xth_te_show_file 4}"
  bind $cfr.txt <$xth(kb_control)-Key-6> "$iac {xth_te_show_file 5}"
  bind $cfr.txt <$xth(kb_control)-Key-7> "$iac {xth_te_show_file 6}"
  bind $cfr.txt <$xth(kb_control)-Key-8> "$iac {xth_te_show_file 7}"
  bind $cfr.txt <$xth(kb_control)-Key-9> "$iac {xth_te_show_file 8}"
  bind $cfr.txt <$xth(kb_control)-Key-0> "$iac {xth_te_show_file 9}"
  bind $cfr.txt <$xth(kb_control)-Key-n> "$iac {xth_te_switch_file 1}"
  bind $cfr.txt <$xth(kb_control)-Key-p> "$iac {xth_te_switch_file -1}"
  bind $cfr.txt <$xth(kb_control)-Key-w> "$iac {xth_te_close_file}"
  bind $cfr.txt <$xth(kb_control)-Key-a> "$iac {xth_te_select_all}"
  bind $cfr.txt <$xth(kb_control)-Key-i> "$iac {xth_te_auto_indent}"
  bind $cfr.txt <$xth(kb_control)-Key-s> "$iac {xth_te_save_file 0 $cfid}"
  bind $cfr.txt  "xth_te_before_close_file $cfid yesno"  
#  if {$xth(gui,bindclip) == 1} {
    bind $cfr.txt <$xth(kb_control)-Key-x> "$iac {tk_textCut $cfr.txt}"
    bind $cfr.txt <$xth(kb_control)-Key-c> "$iac {tk_textCopy $cfr.txt}"
    bind $cfr.txt <$xth(kb_control)-Key-v> "$iac {tk_textPaste $cfr.txt}"
    bind $cfr.txt <$xth(kb_control)-Key-z> "$iac {catch {$cfr.txt edit undo}}"
    bind $cfr.txt <$xth(kb_control)-Key-y> "$iac {catch {$cfr.txt edit redo}}"
  if {$xth(gui,bindinsdel)} {
    bind $cfr.txt  {
      %W delete insert
      %W see insert
    }
    bind $cfr.txt  "$iac {tk_textCut $cfr.txt}"
    bind $cfr.txt <$xth(kb_control)-Key-Insert> "$iac {tk_textCopy $cfr.txt}"
    bind $cfr.txt  "$iac {tk_textPaste $cfr.txt}"
#    catch {
#      bind $cfr.txt  "$iac {tk_textCut $cfr.txt}"
#      bind $cfr.txt <$xth(kb_control)-Key-KP_Insert> "$iac {tk_textCopy $cfr.txt}"
#      bind $cfr.txt  "$iac {tk_textPaste $cfr.txt}"
#    }
  }
#  }
    
  grid columnconf $cfr 0 -weight 1
  grid rowconf $cfr 0 -weight 1
  grid $cfr.txt -column 0 -row 0 -sticky news
  grid $cfr.sv -column 1 -row 0 -sticky news
  grid $cfr.sh -column 0 -row 1 -sticky news
  
  
  # add file to list and listbox
  set xth(te,flist) [linsert $xth(te,flist) end $cfid]
  $xth(ctrl,te,files).fl.flbox insert end "[llength $xth(te,flist)]. $xth(te,$cfid,name) ($xth(te,$cfid,path))"
  
  xth_te_show_file [expr [llength $xth(te,flist)] - 1]

}


# xth_te_read_file --
#
# return list containing
# {success name encoding text}

proc xth_te_read_file {pth} {

  global errorInfo xth

  set curenc utf-8
  set nm [file tail $pth]
  set encspc 0
  set flnn 0
  set success 1
  set txt ""
  if {[catch {set fid [open $pth r]}]} {
    set success 0
    set nm $errorInfo
    return [list $success $nm $curenc $txt]
  }
  fconfigure $fid -encoding $curenc
  while {[eof $fid] != 1} {
    gets $fid fln
    if {$flnn == 0} {
        if {[scan [string index $fln 0] %c] == 65279} {
            set fln [string range $fln 1 end]
        }
    }
    # replace tabs
    regsub -all {\t} $fln "  " fln
    incr flnn
    if {[regexp {^\s*encoding\s+(\S+)\s*$} $fln encln enc]} {
      if {$encspc} {
        set success 0
        set nm "$pth \[$flnn\] -- multiple encoding commands in file"
        break
      }
      set encspc 1
      set rxp "\\s+($enc)\\s+"
      set validenc [regexp -nocase $rxp $xth(encodings) dum curenc]
      if {$validenc == 0} {
        set success 0
        set nm "$pth \[$flnn\] -- unknown encoding -- $enc"
        break
      }
      fconfigure $fid -encoding $curenc
    } else {
#      if {$encspc == 0} {
#        if {[regexp {^\s*[^\#]+} $fln]} {
#          set success 0
#          set nm "$pth \[$flnn\] -- encoding command expected"
#          break
#        }
#      }
      append txt "$fln\n"
    }
  }
  close $fid
  return [list $success $nm $curenc $txt]
  
}  


# xth_te_write_file --
#
# return list containing
# {success name}

proc xth_te_write_file {pth enc txt} {

  global errorInfo xth

  set curenc utf-8
  set nm [file tail $pth]
  set success 1
  if {[catch {set fid [open $pth w]}]} {
    set success 0
    set nm $errorInfo
    return [list $success $nm]
  }
  
  fconfigure $fid -encoding $curenc -translation {auto auto}
  if {![string equal $xth(prj,name) svxedit]} {
    puts $fid "encoding  $enc"
  }
  fconfigure $fid -encoding $enc -translation {auto auto}
  puts -nonewline $fid $txt
  close $fid
  return [list $success $nm]
  
}


proc xth_te_destroy_file {} {

  global xth

  if {$xth(te,fcurr) >= 0} {
  

    # delete file from list and listbox and destroy windows
    set tempcurr $xth(te,fcurr)
    set cfid [lindex $xth(te,flist) $tempcurr]
    pack forget $xth(te,$cfid,frame)
    set xth(te,flist) [lreplace $xth(te,flist) $xth(te,fcurr) $xth(te,fcurr)]
    $xth(ctrl,te,files).fl.flbox delete $tempcurr    
    set xth(te,fcurr) -1

    # set other window to be active
    xth_te_show_file $tempcurr
    
    # destroy variable
    unset xth(te,$cfid,name)
    unset xth(te,$cfid,path)
    unset xth(te,$cfid,newf)
    unset xth(te,$cfid,encoding)
    unset xth(te,$cfid,frame)
    unset xth(te,$cfid,otext)
  }  
  
}


proc xth_te_open_file {dialogid fname fline} {

  global xth
  
  if {$dialogid} {
    set fname [tk_getOpenFile -filetypes $xth(app,te,filetypes) \
      -parent $xth(gui,main) \
      -initialdir $xth(gui,initdir) -defaultextension $xth(app,te,fileext)]
  }
  
  if {[string length $fname] == 0} {
    return 0
  } else {
    set xth(gui,initdir) [file dirname $fname]
  }
  
  # now let's open file fname
  
  # check if not open exists
  for {set fid 0} {$fid < [llength $xth(te,flist)]} {incr fid} {
    if {[string equal $fname $xth(te,[lindex $xth(te,flist) $fid],path)]} {
      xth_te_show_file $fid
      return 1
    }
  }
  
  # read the file
  xth_status_bar_push te
  xth_status_bar_status te [format [mc "Opening %s ..."] $fname]
  
  set fdata [xth_te_read_file $fname]
  if {[lindex $fdata 0] == 0} {
      MessageDlg $xth(gui,message) -parent $xth(gui,main) \
        -icon error -type ok \
        -message [lindex $fdata 1] \
        -font $xth(gui,lfont)
      xth_status_bar_pop te
      return 0
  }
  
  # show the file
  xth_te_create_file
  set cfid [lindex $xth(te,flist) $xth(te,fcurr)]
  set xth(te,$cfid,name) [lindex $fdata 1]
  set xth(te,$cfid,path) $fname
  set xth(te,$cfid,newf) 0
  set xth(te,$cfid,mtime) [file mtime $fname]
  set xth(te,$cfid,encoding) [lindex $fdata 2]
  $xth(ctrl,te,files).ef.cel configure -text [lindex $fdata 2]
  regsub -all {\s*$} [lindex $fdata 3] "" ftext
  xth_te_insert_text $xth(te,$cfid,frame).txt "$ftext\n"
  catch {
    $xth(te,$cfid,frame).txt edit reset
  }
  set xth(te,$cfid,otext) [$xth(te,$cfid,frame).txt get 1.0 end]
  xth_te_show_file $xth(te,fcurr)
  if {$fline > 0} { 
      $xth(te,$cfid,frame).txt mark set insert "$fline.0"
  } else {
      $xth(te,$cfid,frame).txt mark set insert "1.0"
  }
  $xth(te,$cfid,frame).txt see insert
  if {$fline > 0} {
    $xth(te,$cfid,frame).txt tag remove sel 1.0 end
    $xth(te,$cfid,frame).txt tag add sel "$fline.0" "$fline.0 lineend"
  }
  
  xth_status_bar_pop te
  return 1
}


proc xth_te_before_close_file {cfid btns} {
  global xth
  if {
      [catch {winfo exists $xth(te,$cfid,frame).txt}] 
      || (![winfo exists $xth(te,$cfid,frame).txt])} {
    return 1
  }
  set ftext [$xth(te,$cfid,frame).txt get 1.0 end]
  if {[string compare $xth(te,$cfid,otext) $ftext] != 0} {    
    set wtd [MessageDlg $xth(gui,message) -parent $xth(gui,main) \
      -icon question -type $btns\
      -message [format [mc "File %s is not saved. Save it now?"] $xth(te,$cfid,path)]\
      -font $xth(gui,lfont)]
    switch $wtd {
      0 {
        if {[xth_te_save_file 0 $cfid] == 0} {
          return 0
        }
      }
      1 {}
      default {return 0}
    }
  }
  return 1
}

proc xth_te_close_file {} {

  global xth
  
  if {$xth(te,fcurr) < 0} {
    return
  }
  set cfid [lindex $xth(te,flist) $xth(te,fcurr)]
  if {[xth_te_before_close_file $cfid yesnocancel]} {
    xth_te_destroy_file
    return 1
  } else {
    return 0
  }
  
}

proc xth_te_save_file {dialogid cfid} {

  global xth
  
  if {[llength $xth(te,flist)] == 0} {
    return 0
  }

  set fid [lsearch -exact $xth(te,flist) $cfid]
  if {$fid == -1} {
    return 0
  }
  
  set cfid [lindex $xth(te,flist) $fid]
  
  # let's check if we need to save
  set ftext [$xth(te,$cfid,frame).txt get 1.0 end]
  if {! $dialogid} {
    if {[string compare $xth(te,$cfid,otext) $ftext] == 0} {
        return 1
    }
  }
  
  xth_status_bar_push te
  
  if {$xth(te,$cfid,newf)} {
    set dialogid 1
  }

  set fname $xth(te,$cfid,path)
  set ofname $fname
  if {$dialogid} {
    set fname [tk_getSaveFile -filetypes $xth(app,te,filetypes) \
      -parent $xth(gui,main) \
      -initialfile [file tail $fname] -initialdir [xth_getdir $fname] \
      -defaultextension $xth(app,te,fileext)]
  }
  
  if {($xth(te,$cfid,mtime) > 0) && [file exists $fname] && \
    ([file mtime $fname] > $xth(te,$cfid,mtime))} {
    set forcesave [MessageDlg $xth(gui,message) -parent $xth(gui,main) \
      -icon warning -type yesno -default 1 \
      -message [format [mc "File %s was modified outside xtherion. Save it anyway?"] $fname]\
      -font $xth(gui,lfont)]
    if {$forcesave != 0} {
      return 0
    }
  }
  
  if {[string length $fname] == 0} {
    return 0
  } else {
    set xth(gui,initdir) [file dirname $fname]
  }
  
  # save the file
  xth_status_bar_status te [format [mc "Saving %s ..."] $fname]
  set fdata [xth_te_write_file $fname $xth(te,$cfid,encoding) $ftext]
  if {[lindex $fdata 0] == 0} {
      MessageDlg $xth(gui,message) -parent $xth(gui,main) \
        -icon error -type ok \
        -message [lindex $fdata 1] \
        -font $xth(gui,lfont)
      xth_status_bar_pop te
      return 0
  }
  
  set xth(te,$cfid,mtime) [file mtime $fname]
  set xth(te,$cfid,otext) $ftext
  set xth(te,$cfid,newf) 0
  
  # if SaveAs, then redisplay the file
  if {$dialogid} {
    if {[string compare $ofname $fname] != 0} {
      set xth(te,$cfid,name) [lindex $fdata 1]
      set xth(te,$cfid,path) $fname
      xth_te_show_file $fid
    }
  }  

  after 250 {xth_status_bar_pop te}
  return 1
    
}

proc xth_te_save_all {} {

  global xth
  set ocur $xth(te,fcurr)
  foreach cfid $xth(te,flist) {
    xth_te_save_file 0 $cfid
  }
  xth_te_show_file $ocur
  
}


proc xth_te_update_position {W} {
  global xth
  regexp {(\d+)\.(\d+)} [$W index insert] dum lns pos
  $xth(gui,te).sf.pbar configure -text [format "%d.%d" [expr $lns + 1] $pos]
}


proc xth_te_text_select_all {txt} {
    $txt tag add sel 1.0 end
}


proc xth_te_select_all {} {
  global xth
  if {$xth(te,fcurr) > -1} {
    set cfid [lindex $xth(te,flist) $xth(te,fcurr)]
    $xth(te,$cfid,frame).txt tag add sel 1.0 end
  }
}

proc xth_te_new_file {} {
  global xth
  xth_te_create_file 
  set cfid [lindex $xth(te,flist) $xth(te,fcurr)]
  xth_te_insert_text $xth(te,$cfid,frame).txt $xth(te,template)
}

$xth(te,menu,file) add command -label [mc "New"] -command xth_te_new_file \
  -font $xth(gui,lfont) -underline 0
$xth(te,menu,file) add command -label [mc "Open"] -underline 0 \
  -accelerator "$xth(gui,controlk)-o" \
  -font $xth(gui,lfont) -command {xth_te_open_file 1 {} 0}
$xth(te,menu,file) add command -label [mc "Save"] -underline 0 \
  -accelerator "$xth(gui,controlk)-s" -state disabled \
  -font $xth(gui,lfont) -command {
    if {$xth(te,fcurr) >= 0} {
      xth_te_save_file 0 [lindex $xth(te,flist) $xth(te,fcurr)]
    }
  }
$xth(te,menu,file) add command -label [mc "Save as"] -underline 5 \
  -font $xth(gui,lfont) -state disabled -command {
    if {$xth(te,fcurr) >= 0} {
      xth_te_save_file 1 [lindex $xth(te,flist) $xth(te,fcurr)]
    }
  }
$xth(te,menu,file) add command -label [mc "Save all"] -underline 6 \
  -font $xth(gui,lfont) -state disabled -command xth_te_save_all
$xth(te,menu,file) add checkbutton -label [mc "Auto save"] -underline 1 \
  -variable xth(gui,auto_save) -font $xth(gui,lfont) \
  -state disabled -command xth_app_autosave_schedule
$xth(te,menu,file) add command -state disabled -label [mc "Close"] -underline 0 \
  -accelerator "$xth(gui,controlk)-w" \
  -font $xth(gui,lfont) \
  -command "xth_te_close_file"

$xth(te,menu,file) add separator
$xth(te,menu,file) add command -state disabled -label [mc "Import"] -underline 0 \
  -font $xth(gui,lfont) \
  -command "xth_te_import_file"

$xth(te,menu,file) add separator
$xth(te,menu,file) add command -state disabled -label [mc "Next"] \
  -accelerator "$xth(gui,controlk)-n" \
  -font $xth(gui,lfont) -command "xth_te_switch_file 1" -underline 2
$xth(te,menu,file) add command -state disabled -label [mc "Previous"] \
  -accelerator "$xth(gui,controlk)-p" \
  -font $xth(gui,lfont) -command "xth_te_switch_file -1" -underline 0
  
set xth(te,menu,edit) $xth(te,menu).edit
menu $xth(te,menu,edit) -tearoff 0
$xth(te,menu) add cascade -label [mc "Edit"] -state disabled \
  -font $xth(gui,lfont) -menu $xth(te,menu,edit) -underline 0
if {$xth(gui,text_undo)} {
  $xth(te,menu,edit) add command -label [mc "Undo"] -font $xth(gui,lfont) \
    -accelerator "$xth(gui,controlk)-z" -command "xth_app_clipboard undo"
  $xth(te,menu,edit) add command -label [mc "Redo"] -font $xth(gui,lfont) \
    -accelerator "$xth(gui,controlk)-y" -command "xth_app_clipboard redo"
  $xth(te,menu,edit) add separator
}
$xth(te,menu,edit) add command -label [mc "Cut"] -font $xth(gui,lfont) \
  -accelerator "$xth(gui,controlk)-x" -command "xth_app_clipboard cut"
$xth(te,menu,edit) add command -label [mc "Copy"] -font $xth(gui,lfont) \
  -accelerator "$xth(gui,controlk)-c" -command "xth_app_clipboard copy"
$xth(te,menu,edit) add command -label [mc "Paste"] -font $xth(gui,lfont) \
  -accelerator "$xth(gui,controlk)-v" -command "xth_app_clipboard paste"
$xth(te,menu,edit) add separator
$xth(te,menu,edit) add command -label [mc "Select all"] -font $xth(gui,lfont) \
  -accelerator "$xth(gui,controlk)-a" -command "xth_te_select_all"
$xth(te,menu,edit) add command -label [mc "Auto indent"] -font $xth(gui,lfont) \
  -command "xth_te_auto_indent" -accelerator "$xth(gui,controlk)-i"

proc xth_te_get_indent {w i cilc} {

  global xth
  set indls ""
  set cmdls ""
  set cmd0s ""
  set cmdl 0
  regexp {(\d+)\.} $i dum cln
  set line0 [$w get $cln.0 $cln.end]
  regexp {\S+} $line0 cmd0s
  if {[info exists xth(cmd,$cmd0s)]} {
    set cmd0 $xth(cmd,$cmd0s)
  } else {
    set cmd0 0
  }
  set sln [expr $cln - 1]
  set line1 [$w get $sln.0 $sln.end]
  set linel $line1
  set hasl 0
  set escan 0
  while {($sln > 1) && (! $hasl)} {
    incr sln -1
    if {[regexp {\S} $linel]} {
      set cline [$w get $sln.0 $sln.end]
      if {[regexp {\\\s*$} $cline]} {
        set linel $cline
      } else {
        set hasl 1
      }
    } else {
      set linel [$w get $sln.0 $sln.end]
    }
  }
  regexp {\S+} $linel cmdls
  if {[info exists xth(cmd,$cmdls)]} {
    set cmdl $xth(cmd,$cmdls)
    set endcmdls $xth(endcmd,$cmdls)
  } else {
    set cmdl 0
  }
  regexp {^\s+} $linel indls
  set indl [string length $indls]
  set bsl1 [regexp {\\\s*$} $line1]
  
  # preskenuje prikazy nad
  #puts "cilc |$cilc|\nindl |$indl|\ncmd0 |$cmd0|\ncmd0s |$cmd0s|\ncmdl |$cmdl|\ncmdls |$cmdls|\n"
  if {$cmdl == 1} {
#    puts "$cln. cilc |$cilc|"
    set cmdcomct 0
    set cmdcomctfi 1
    set enddetect 0
    set set_cmd_counts {
      regexp {\S+} $slns cmdcomx
#      puts "$cmdls ?? $cmdcomx"
      if {[string compare $endcmdls $cmdcomx] == 0} {
        set endscan 1
        set enddetect 1
      } elseif {[string compare $cmdls $cmdcomx] == 0} {
        if {! $cmdcomctfi} {
          if {$cmdcomct} {
            set endscan 1
          }
          incr cmdcomct
        } else {
          set cmdcomctfi 0
        }
      }
    }
    set sln [expr $cln - 1]
    set slns $line1
    set endscan 0
    while {($sln > 1) && (!$endscan)} {
      incr sln -1
      if {[regexp {\S} $slns]} {
        set clns [$w get $sln.0 $sln.end]
        if {[regexp {(.*)\\\s*$} $clns dum vlns]} {
          set slns "$vlns$slns"
        } else {
          eval $set_cmd_counts
          set slns $clns
        }
      } else {
        set slns [$w get $sln.0 $sln.end]
      }
    }
    if {!$enddetect} {
      eval $set_cmd_counts
    }
 #   puts $cmdcomct
    if {$cmdcomct > 0} {
      set cmdl 0
    }
  }
  # koniec scanovania
  
  if {$bsl1} {
    set ind [expr $indl + 2 * $xth(gui,etabsize)]
  } else {
    set ind $indl
    if {$cmdl > 0} {
      incr ind $xth(gui,etabsize)
    } 
    if {$cilc && ($cmd0 < 0)} {
      incr ind -$xth(gui,etabsize)
    } 
  }
  
  if {$ind > 0} {
    return [format %$ind\s " "]
  } else {
    return ""
  }
}

proc xth_te_auto_indent {} {

  global xth
  if {$xth(te,fcurr) < 0} {
    return
  }
  set cfid [lindex $xth(te,flist) $xth(te,fcurr)]
  set W $xth(te,$cfid,frame).txt
  set rngs [$W tag ranges sel]
  set fln 1
  set tln -1
  regexp {(\d+)\.} [lindex $rngs 0] dum fln
  regexp {(\d+)\.} [lindex $rngs 1] dum tln
  xth_status_bar_push te
  for {set cln $fln} {$cln < $tln} {incr cln} {
    xth_status_bar_status te [format [mc "Processing line %s ..."] $cln]
    $W see $cln.0
    set spcs ""
    regexp {^\s+} [$W get $cln.0 $cln.end] spcs
    set spcsc [string length $spcs]
    set indct [string length [xth_te_get_indent $W $cln.0 1]]
    if {$spcsc == $indct} {
    } elseif {$spcsc > $indct} {
      $W delete $cln.0 $cln.[expr $spcsc - $indct]
    } elseif {$spcsc < $indct} {
      $W insert $cln.0 [format \x25[expr $indct - $spcsc]s " "]
    }
  }
  $W see insert
  # $W tag remove sel 1.0 end
  xth_status_bar_pop te
}


proc xth_te_text_auto_indent {W} {

  set rngs [$W tag ranges sel]
  set fln 1
  set tln -1
  regexp {(\d+)\.} [lindex $rngs 0] dum fln
  regexp {(\d+)\.} [lindex $rngs 1] dum tln
  for {set cln $fln} {$cln < $tln} {incr cln} {
    $W see $cln.0
    set spcs ""
    regexp {^\s+} [$W get $cln.0 $cln.end] spcs
    set spcsc [string length $spcs]
    set indct [string length [xth_te_get_indent $W $cln.0 1]]
    if {$spcsc == $indct} {
    } elseif {$spcsc > $indct} {
      $W delete $cln.0 $cln.[expr $spcsc - $indct]
    } elseif {$spcsc < $indct} {
      $W insert $cln.0 [format \x25[expr $indct - $spcsc]s " "]
    }
  }
  $W see insert
  
}







xth_ctrl_minimize te sr
xth_status_bar_status te [mc "Text editor is not active. To activate it, open existing file or create new one."]
therion/xtherion/te_import.tcl0000644000076400010400000000625511106226524017642 0ustar  userAdministratorsproc xth_te_import_file {} {

  global xth
  
  set fname [tk_getOpenFile -filetypes {{{PocketTopo therion export} {.txt}} {{All files} {*}}} \
    -parent $xth(gui,main) \
    -initialdir $xth(gui,initdir) -defaultextension .txt]
  
  if {[string length $fname] == 0} {
    return 0
  } else {
    set xth(gui,initdir) [file dirname $fname]
  }
  
  # read the file
  xth_status_bar_push te
  xth_status_bar_status te [format [mc "Importing %s ..."] $fname]
  
  set fdata [xth_te_read_file $fname]
  if {[lindex $fdata 0] == 0} {
      MessageDlg $xth(gui,message) -parent $xth(gui,main) \
        -icon error -type ok \
        -message [lindex $fdata 1] \
        -font $xth(gui,lfont)
      xth_status_bar_pop te
      return 0
  }
  
  # show the file
  set cfid [lindex $xth(te,flist) $xth(te,fcurr)]
  catch {
    $xth(te,$cfid,frame).txt edit separator
  }
  xth_te_insert_text $xth(te,$cfid,frame).txt "[xth_te_read_ptopo $fname]\n"
  $xth(te,$cfid,frame).txt see insert

  xth_status_bar_pop te
  return 1
}






proc xth_te_read_ptopo {fname} {
  set fid [open $fname r]
  set ccline {}
  set cclines {}
  set csection {NULL}
  set indata 0
  set cdirec 0
  while {![eof $fid]} {
    gets $fid ln
    ##append ccline "### $csection: $ln\n"
    if {[string equal $ln FIX] || [string equal $ln TRIP] || [string equal $ln PLAN] || [string equal $ln ELEVATION]} {
      if {[string length $ccline] > 0} {
        lappend cclines $ccline
        set ccline {}
        set indata 0
        set cdirec 0
      }
      set csection $ln
    }
    if {[llength $ln] > 0} {
      switch $csection {
        FIX {
          if {[llength $ln] == 4} {
            append ccline "  fix [lindex $ln 0] [lindex $ln 1] [lindex $ln 2] [lindex $ln 3]\n"
          }
        }
        TRIP {
          if {$indata} {
            # check direction
            if {[string equal [lindex $ln end] "<"]} {
              if {$cdirec >= 0} {
                append ccline "  extend left\n"
                set cdirec -1
              }
            } elseif {[string equal [lindex $ln end] ">"]} {
              if {$cdirec <= 0} {
                append ccline "  extend right\n"
                set cdirec 1
              }
            }
            if {[llength $ln] == 5} {
              append ccline "  [lindex $ln 0] - [lindex $ln 1] [lindex $ln 2] [lindex $ln 3]\n"
            } elseif {[llength $ln] == 6} {
              append ccline "  [lindex $ln 0] [lindex $ln 1] [lindex $ln 2] [lindex $ln 3] [lindex $ln 4]\n"
            }
          } else {
            append $ccline "# --[lindex $ln 0]--"
            switch [lindex $ln 0] {
              DATE {
                set xd [lindex $ln 1]
                regsub -all {\-} $xd {.} xd
                append ccline "  date $xd\n"
              }
              DECLINATION {
              }
              DATA {
                append ccline "  data normal from to compass clino tape\n"
                set indata 1
              }
            }
          }
        }
      }
    }
  }
  if {[string length $ccline] > 0} {
    lappend cclines $ccline
  }
  close $fid
  set txt {}
  foreach cln $cclines {
    append txt "centreline\n$cln"
    append txt "endcentreline\n\n"
  }
  return $txt
}


therion/xtherion/te_sdata.tcl0000644000076400010400000004031211057011534017412 0ustar  userAdministratorsproc xth_te_sdata_scan {} {

  global xth
  if {$xth(te,fcurr) < 0} {
    return [list [expr 2 * $xth(gui,etabsize)] {from to compass clino tape}]
  }
  
  set w $xth(te,[lindex $xth(te,flist) $xth(te,fcurr)],frame).txt  

  # let's find the index
  set seli [$w tag ranges sel]
  if {[llength $seli] > 0} {
    set i [lindex $seli 0]
  } else {
    set i [$w index insert]
  }
  
  regexp {(\d+)\.} $i dum cln
  incr cln
  set i [$w index $cln.0]
  regexp {(\d+)\.} $i dum cln
    
  set dind [format \x25[expr 2 * $xth(gui,etabsize)]s " "]
  set dqts {from to compass clino tape}
  set scan_data {
    if {[regexp {(\s*)data\s+\w+\s+(.*)} $slns dum dind dqts]} {
      regexp {^([^\#]+)} $dqts dum dqts
      set endscan 1
    }
  }
  set sln $cln
  set slns ""
  set endscan 0
  while {($sln > 1) && (!$endscan)} {
    incr sln -1
    if {[regexp {\S} $slns]} {
      set clns [$w get $sln.0 $sln.end]
      if {[regexp {(.*)\\\s*$} $clns dum vlns]} {
        set slns "$vlns$slns"
      } else {
        eval $scan_data
        set slns $clns
      }
    } else {
      set slns [$w get $sln.0 $sln.end]
    }
  }
  if {!$endscan} {
    eval $scan_data
  }
  
  return [list [string length $dind] $dqts]     
}


proc xth_te_sdata_buid {qts indc} {

  global xth
  set cf $xth(ctrl,te,sdata).sdf
  catch {destroy $cf}
  frame $cf 
  grid $cf -in $xth(ctrl,te,sdata) -column 0 -row 1 -sticky nsew
  grid columnconf $cf 0 -weight 0
  grid columnconf $cf 1 -weight 1
  grid columnconf $cf 2 -weight 0

  set nent 0
  set invd 0
  set sent 0
  set grow 0
  foreach qtt $qts {
    switch $qtt {
      newline {
        if {(!$invd) && ($nent > 0)} {
          frame $cf.nlf
          grid columnconf $cf.nlf 0 -weight 1
          grid columnconf $cf.nlf 1 -weight 1
          Button $cf.nlf.s$grow -text "Start series" -font $xth(gui,lfont)
          Button $cf.nlf.b$grow -text "Break series" -font $xth(gui,lfont)
          grid $cf.nlf.s$grow -column 0 -row 0 -sticky news
          grid $cf.nlf.b$grow -column 1 -row 0 -sticky news
          grid $cf.nlf -in $cf -column 0 -columnspan 3 -row $grow \
            -sticky news
          set xth(te,sdata,invd,ssb) $cf.nlf.s$grow
          set xth(te,sdata,invd,bsb) $cf.nlf.b$grow
          set xth(te,sdata,invd,ent) $nent
          set invd 1
          incr grow
        }
      }
      default {
        # zistime typ
        if {[info exists xth(datafmt,$qtt,format)]} {
          set tqtt $qtt
        } else {
          set tqtt "unknown"
        }
        set xth(te,sdata,$nent,qtt) $tqtt
        set xth(te,sdata,$nent,format) $xth(datafmt,$tqtt,format)
        set xth(te,sdata,$nent,cvalue) ""
        set xth(te,sdata,$nent,special) $xth(datafmt,$tqtt,special)
        set xth(te,sdata,$nent,de) $cf.de$grow
        set xth(te,sdata,$nent,fe) $cf.fe$grow
        set xth(te,sdata,$nent,nextde) $cf.de$grow
        set xth(te,sdata,$nent,nextvde) $cf.de$grow
        Label $cf.l$grow -text $qtt -anchor e -font $xth(gui,lfont)
        Entry $cf.de$grow -font $xth(gui,lfont) \
          -textvariable xth(te,sdata,$nent,cvalue)
        Entry $cf.fe$grow -font $xth(gui,lfont) -width 6 \
          -textvariable xth(te,sdata,$nent,format)
        bind $cf.de$grow <> "focus $cf.de$grow; $cf.de$grow icursor 0; $cf.de$grow selection range 0 end"
        bind $cf.de$grow  "event generate \$xth(te,sdata,$nent,nextde) <> -when tail"
        bind $cf.de$grow  "event generate \$xth(te,sdata,$nent,nextvde) <> -when tail"
        bind $cf.de$grow  "event generate \$xth(te,sdata,$nent,nextvde) <> -when tail"
        grid $cf.l$grow -in $cf -column 0 -row $grow -sticky news
        grid $cf.de$grow -in $cf  -column 1 -row $grow -sticky news
        grid $cf.fe$grow -in $cf  -column 2 -row $grow -sticky news
        incr grow
        incr nent
      }
    }
  }
  
  set xth(te,sdata,nent) $nent
  set xth(te,sdata,indc) $indc
  set xth(te,sdata,invd) $invd
  
  xth_te_sdata_bind
}


proc xth_te_sdata_incr_station {ss} {
  return [xth_incr_station_name $ss 1]
}

proc xth_te_sdata_incr {} {

  global xth
  if {$xth(te,sdata,incr,station) != -1} {
    set xth(te,sdata,$xth(te,sdata,incr,station),cvalue) \
      [xth_te_sdata_incr_station \
      $xth(te,sdata,$xth(te,sdata,incr,station),cvalue)]
  } else {
    if {$xth(te,sdata,incr,from) != -1} {
      if {$xth(te,sdata,incr,to) != -1} {
        set xth(te,sdata,$xth(te,sdata,incr,from),cvalue) \
            $xth(te,sdata,$xth(te,sdata,incr,to),cvalue)
      }
    }
    if {$xth(te,sdata,incr,to) != -1} {
      set xth(te,sdata,$xth(te,sdata,incr,to),cvalue) \
        [xth_te_sdata_incr_station \
        $xth(te,sdata,$xth(te,sdata,incr,to),cvalue)]
    }    
  }
  
}


proc xth_te_sdata_cspc {itm} {
  if {[regexp {^\s*[^\"\[]\S*\s+\S+} $itm]} {
    #"
    set itm "\[$itm\]"
  }
  return $itm
}


proc xth_te_sdata_bind {} {

  global xth

  if {! [info exists xth(te,sdata,nent)]} {
    return
  } elseif {$xth(te,sdata,nent) < 1} {
    return
  }

  set xth(te,sdata,incr,station) -1
  set xth(te,sdata,incr,from) -1
  set xth(te,sdata,incr,to) -1
  for {set i 0} {$i < $xth(te,sdata,nent)} {incr i} {
    if {$i != [expr $xth(te,sdata,nent) - 1]} {
      set xth(te,sdata,$i,nextde) $xth(te,sdata,[expr $i + 1],de)
      set xth(te,sdata,$i,nextvde) $xth(te,sdata,[expr $i + 1],de)
    } else {
      set xth(te,sdata,$i,nextde) $xth(te,sdata,0,de)
      set xth(te,sdata,$i,nextvde) $xth(te,sdata,0,de)
    }
    set sx [lsearch {from to station} $xth(te,sdata,$i,qtt)]
    if {$sx != -1} {
      set xth(te,sdata,incr,[lindex {from to station} $sx]) $i
    }
  }
  
  if {! $xth(te,sdata,es)} {
    for {set i 0} {$i < $xth(te,sdata,nent)} {incr i} {
      if {[lsearch {station from to} $xth(te,sdata,$i,qtt)] == -1} {
        for {set j 1} {$j < $xth(te,sdata,nent)} {incr j} {
          set jj [expr ($i + $j) % $xth(te,sdata,nent)]
          if {[lsearch {station from to} $xth(te,sdata,$jj,qtt)] == -1} {
            set xth(te,sdata,$i,nextvde) $xth(te,sdata,$jj,de)
            set j $xth(te,sdata,nent)
          }
        }
      }
    }  
  }
  
  # now let's bind enter keys
  if {$xth(te,sdata,invd)} {
    set wtw1 ""
    set wtw2 ""
    set clw ""
    for {set iet 0} {$iet < $xth(te,sdata,nent)} {incr iet} {
      if {$iet < $xth(te,sdata,invd,ent)} {
        append wtw1 " \[xth_te_sdata_cspc \$xth(te,sdata,$iet,cvalue)\]"
      } else {
        append wtw2 " \[xth_te_sdata_cspc \$xth(te,sdata,$iet,cvalue)\]"
      }
      if {[lsearch {from to station} $xth(te,sdata,$iet,qtt)] == -1} {
        append clw "set xth(te,sdata,$iet,cvalue) \"\"\n"
      }
    }
    set enter_cmd "xth_te_sdata_insert \"$wtw2\" 2 insert\nxth_te_sdata_insert \"$wtw1\" 1 insert\nxth_te_sdata_incr\n$clw"
    append enter_cmd "event generate \$xth(te,sdata,[expr $xth(te,sdata,nent) - 1],nextvde) <> -when tail"
    bind $xth(te,sdata,[expr $xth(te,sdata,nent) - 1],de)  $enter_cmd
    bind $xth(te,sdata,[expr $xth(te,sdata,nent) - 1],de)  $enter_cmd

    set enter_cmd "xth_te_sdata_insert \"$wtw1\" 1 insert\nxth_te_sdata_incr\n$clw"
    append enter_cmd "event generate \$xth(te,sdata,[expr $xth(te,sdata,nent) - 1],nextvde) <> -when tail"
    $xth(te,sdata,invd,ssb) configure -command $enter_cmd

    set enter_cmd "xth_te_sdata_insert \"break\" 3 insert\n$clw"
    append enter_cmd "event generate \$xth(te,sdata,0,de) <> -when tail"
    $xth(te,sdata,invd,bsb) configure -command $enter_cmd
    
  } else {
    set wtw ""
    set clw ""
    for {set iet 0} {$iet < $xth(te,sdata,nent)} {incr iet} {
      append wtw " \[xth_te_sdata_cspc \$xth(te,sdata,$iet,cvalue)\]"
      if {[lsearch {from to station} $xth(te,sdata,$iet,qtt)] == -1} {
        append clw "set xth(te,sdata,$iet,cvalue) \"\"\n"
      }
    }
    set enter_cmd "xth_te_sdata_insert \"$wtw\" 0 insert\nxth_te_sdata_incr\n$clw"
    append enter_cmd "event generate \$xth(te,sdata,[expr $xth(te,sdata,nent) - 1],nextvde) <> -when tail"
    bind $xth(te,sdata,[expr $xth(te,sdata,nent) - 1],de)  $enter_cmd
    bind $xth(te,sdata,[expr $xth(te,sdata,nent) - 1],de)  $enter_cmd
  }  
}


$xth(ctrl,te,sdata).sfb configure -command {
  set dil [xth_te_sdata_scan]
  xth_te_sdata_buid [lindex $dil 1] [lindex $dil 0] 
}


$xth(ctrl,te,sdata).sfs configure -command xth_te_sdata_bind


proc xth_te_sdata_insert {data invd iidx} {

  global xth
  if {$xth(te,fcurr) < 0} {
    return
  }

  if {! [info exists xth(te,sdata,nent)]} {
    return
  } elseif {$xth(te,sdata,nent) < 1} {
    return
  }

  set w $xth(te,[lindex $xth(te,flist) $xth(te,fcurr)],frame).txt
  set xth(me,sdata,err_notenought) 0

  set err 0
#  if {$xth(gui,etabsize) > 0} {
#    set tabspc [format \x25$xth(gui,etabsize)s " "]
#  } else {
    set tabspc " "
#  }
  set sent 0
  set eent $xth(te,sdata,nent)
  switch $invd {
    1 {
      set eent $xth(te,sdata,invd,ent)
    }
    2 {
      set sent $xth(te,sdata,invd,ent)
    }
  }
  
  set txt ""
  set fst ""
  set iet $sent
  set tmp $data
  set ldata {}
  while {[string length $tmp] > 0} {
    if {[regexp {\S+} $tmp itm]} {
      lappend ldata $itm
    }
    regsub {\s*\S*\s*} $tmp {} tmp
  }
  if {([llength $ldata] < $eent) && (!$xth(te,sdata,invd))} {
    set xth(me,sdata,err_notenought) 1
  }
  foreach itm $ldata {
    set postwrt 0
    set tobreak 0
    if {$iet < $eent} {
      if {[lsearch -exact $xth(te,sdata,$iet,special) $itm] != -1} {
        set postwrt 1
      } else {
        set curfmt $xth(te,sdata,$iet,format)
        set extfmt 0
        if {[regsub {fx(\s*)$} $curfmt {f\1} curfmt]} {
          set extfmt 1
        }
#        puts "$itm -> $fst\x25$curfmt"
        if {[catch {append txt [format "$fst\x25$curfmt" $itm]}]} {
          set postwrt 1
#          puts "error"
          set err 1
        } elseif {$extfmt == 1} {
          if {[regexp {\.?0+\s*$} $txt txtextend]} {
            set teel [string length $txtextend]
            regsub {\.?0+\s*$} $txt [format \x25[expr $teel]s " "] txt
          }
        }
      }
    } else {
      # ak je dlhsie, uz neformatuj
#      puts $data
      set unfdata $data
      for {set ufi 0} {$ufi < $eent} {incr ufi} {
        regsub {^\s*\S+\s*} $unfdata "" unfdata
      }
      append txt $fst $unfdata
      # append txt [format $fst\x25$xth(datafmt,unknown,format) $itm]
      # set err 1
      set tobreak 1
    }
    
      
    if {$postwrt == 1} {
      if {[regexp {(\d+)\.?(\d*)} $xth(te,sdata,$iet,format) dum nfln nzadc]} {
        set nitm $itm
        if {[string length nzadc] > 0} {
          append nitm [format \x25[expr $nzadc + 1]s " "]
        }
        append txt [format $fst\x25[expr $nfln]s $nitm]
      } else {
        append txt [format $fst\x25$xth(datafmt,unknown,format) $itm]
      }
    }
    
    set fst $tabspc  
    incr iet
    if {$tobreak} {
      break
    }
  }
  
  set cind $xth(te,sdata,indc)
  if {($invd == 2) && (!$err)} {
    if {[regexp {\d+} $xth(te,sdata,0,format) plusindc]} {
      incr cind [expr $plusindc + 1]
    } else {
      incr cind [expr 2 * $xth(gui,etabsize)]
    }
  }
  
  if {($invd == 3) || $err} {
    set txt $data
    regsub {^\s+} $txt "" txt
    regsub {\s+$} $txt "" txt
  }
  
  if {$cind > 0} {
    set txt [format \x25[expr $cind + [string length $txt]]s $txt]  
  }
  
  if {[string compare $iidx insert] == 0} {
    xth_te_insert_text $w "\n$txt"
  } else {
    $w insert $iidx $txt
  }
  catch {
    $w edit separator
  }
  return $err
  
}


proc xth_te_sdata_auto_format {} {

  global xth
  if {$xth(te,fcurr) < 0} {
    return
  }

  if {! [info exists xth(te,sdata,nent)]} {
    return
  } elseif {$xth(te,sdata,nent) < 1} {
    return
  }
  
  set w $xth(te,[lindex $xth(te,flist) $xth(te,fcurr)],frame).txt
  set s [$w tag ranges sel]
  if {[llength $s] < 2} {
    return
  }
  
  set eline -1
  set sline 0
  regexp {(\d+)\.} [lindex $s 0] dum sline 
  regexp {(\d+)\.} [lindex $s 1] dum eline 
  # $w tag remove sel 1.0 end
  set ict 1
  for {set cline $sline} {$cline <= $eline} {incr cline} {
    set txt [$w get $cline.0 $cline.end]
    if {[regexp {\S+} $txt]} {
      set orig [$w get $cline.0 $cline.end]
      $w delete $cline.0 $cline.end
      if {$xth(te,sdata,invd)} {
        set formatres [xth_te_sdata_insert $txt $ict $cline.0]
        if {$formatres == 0} {
          if {$ict == 1} {
            set ict 2
          } else {
            set ict 1
          }
        } else {
          if {[regexp {^\s*break\s*$} $txt]} {
            set xth(me,sdata,err_notenought) 0
            set ict 1
          }
        }
      } else {
        set formatres [xth_te_sdata_insert $txt 0 $cline.0]
      }
      # an error occured
      if {$formatres || $xth(me,sdata,err_notenought)} {
#        puts "inserting >>$orig<<"
        $w delete $cline.0 $cline.end
        $w insert $cline.0 $orig
      }
    }
  }
  $w see insert
}


proc te_sr_reset {} {

  global xth
  if {$xth(te,fcurr) < 0} {
    return
  }
  set w $xth(te,[lindex $xth(te,flist) $xth(te,fcurr)],frame).txt

  set has_sel 0  
  if {$xth(ctrl,te,sr,selection_io)} {
    set seli [$w tag ranges sel]
    if {[llength $seli] > 0} {
      set xth(ctrl,te,sr,selection_start) [lindex $seli 0]
      set xth(ctrl,te,sr,selection_end) [lindex $seli 1]
      set xth(ctrl,te,sr,search_end) [lindex $seli 1]
      $w mark set insert [lindex $seli 0]
      set has_sel 1
    } else {
      set xth(ctrl,te,sr,selection_io) 0
      update idletasks
    }
  }
  
  if {!$has_sel} {
    set xth(ctrl,te,sr,selection_start) {}
    set xth(ctrl,te,sr,selection_end) {}
    set xth(ctrl,te,sr,search_end) end
    $w mark set insert 1.0
  }
  
}


proc te_sr_first {} {
  global xth
  if {$xth(te,fcurr) < 0} {
    return
  }
  if {[string length $xth(ctrl,te,sr,search)] == 0} {
    return
  }
  catch {
    $w edit separator
  }
  set w $xth(te,[lindex $xth(te,flist) $xth(te,fcurr)],frame).txt
  te_sr_clear  
  te_sr_reset
  if {![te_sr_next_next]} {
    bell
  }
  catch {
    $w edit separator
  }
  focus $w
}

proc te_sr_next_next {} {
  global xth
  if {$xth(te,fcurr) < 0} {
    return
  }
  if {[string length $xth(ctrl,te,sr,search)] == 0} {
    return
  }
  set w $xth(te,[lindex $xth(te,flist) $xth(te,fcurr)],frame).txt

  # prehlada text od pozicie kurzora po koniec (vyberu)
  # najde text - (zameni ho) - vyznaci ho a kurzor nastavi za neho
  
  set cnt 0
  set fndcmd "set fnd \[$w search -count cnt"
  if {!$xth(ctrl,te,sr,case_io)} {
    append fndcmd " -nocase"
  }
  if {$xth(ctrl,te,sr,regular_io)} {
    append fndcmd " -regexp"
  }
  append fndcmd { $xth(ctrl,te,sr,search) insert $xth(ctrl,te,sr,search_end)]}
  eval $fndcmd
  
  if {[string length $fnd] > 0} {
    $w mark set insert "$fnd + $cnt chars"
    $w mark set xthsrend "$fnd + $cnt chars"
    # do replace if necessary
    if {$xth(ctrl,te,sr,replace_io)} {
      set ostr [$w get $fnd xthsrend]
      $w delete $fnd xthsrend
      #puts "<<$ostr"
      set nstr $xth(ctrl,te,sr,replace)
      if {$xth(ctrl,te,sr,regular_io)} {
        set repcmd {regsub}
        if {!$xth(ctrl,te,sr,case_io)} {
          append repcmd " -nocase"
        }
        append repcmd { $xth(ctrl,te,sr,search) $ostr $xth(ctrl,te,sr,replace) nstr}
        eval $repcmd
      }
      #puts ">>$nstr"
      $w insert $fnd $nstr
    }
    $w tag add xthsr $fnd xthsrend
    $w tag configure xthsr -background $xth(gui,escolorbg) -foreground $xth(gui,escolorfg)
    $w see insert
    return 1
  } else {
    # uz sme nic nenasli
    return 0
  }  

}

proc te_sr_next {} {
  global xth
  if {$xth(te,fcurr) < 0} {
    return
  }
  if {[string length $xth(ctrl,te,sr,search)] == 0} {
    return
  }
  catch {
    $w edit separator
  }
  set w $xth(te,[lindex $xth(te,flist) $xth(te,fcurr)],frame).txt
  if {![te_sr_next_next]} {
    bell
  }
  catch {
    $w edit separator
  }
  focus $w
}

proc te_sr_all {} {
  global xth
  if {$xth(te,fcurr) < 0} {
    return
  }
  if {[string length $xth(ctrl,te,sr,search)] == 0} {
    return
  }
  catch {
    $w edit separator
  }
  set w $xth(te,[lindex $xth(te,flist) $xth(te,fcurr)],frame).txt
  te_sr_clear  
  te_sr_reset
  if {![te_sr_next_next]} {
    bell
  } else {
    while {[te_sr_next_next]} {}
  }
  catch {
    $w edit separator
  }
  focus $w
}

proc te_sr_clear {} {
  global xth
  if {$xth(te,fcurr) < 0} {
    return
  }
  set w $xth(te,[lindex $xth(te,flist) $xth(te,fcurr)],frame).txt
  $w tag remove xthsr 1.0 end
  focus $w
}


therion/xtherion/te_sdata2.tcl0000644000076400010400000000025210625665160017505 0ustar  userAdministrators$xth(ctrl,te,sdata).taf configure -command xth_te_sdata_auto_format
xth_te_sdata_buid {from to tape compass clino} [expr 2 * $xth(gui,etabsize)] 
xth_te_sdata_disable ""
therion/xtherion/therion.tcl0000644000076400010400000077307412065354202017322 0ustar  userAdministratorsset xth(point_types) {
	air-draught
	altitude
	anastomosis
	anchor
	aragonite
	archeo-material
	bedrock
	blocks
	breakdown-choke
	bridge
	camp
	cave-pearl
	clay
	clay-choke
	clay-tree
	continuation
	crystal
	curtain
	date
	debris
	dig
	dimensions
	disk
	entrance
	extra
	fixed-ladder
	flowstone
	flowstone-choke
	flute
	gradient
	guano
	gypsum
	gypsum-flower
	handrail
	height
	helictite
	ice
	ice-pillar
	ice-stalactite
	ice-stalagmite
	karren
	label
	low-end
	map-connection
	moonmilk
	narrow-end
	no-equipment
	paleo-material
	passage-height
	pebbles
	pillar
	pillars
	popcorn
	raft
	raft-cone
	remark
	rimstone-dam
	rimstone-pool
	root
	rope
	rope-ladder
	sand
	scallop
	section
	sink
	snow
	soda-straw
	spring
	stalactite
	stalactites
	stalagmite
	stalagmites
	station
	station-name
	steps
	traverse
	u
	vegetable-debris
	via-ferrata
	wall-calcite
	water
	water-flow
}

set xth(line_types) {
	arrow
	border
	ceiling-meander
	ceiling-step
	chimney
	contour
	fixed-ladder
	floor-meander
	floor-step
	flowstone
	gradient
	handrail
	label
	map-connection
	moonmilk
	overhang
	pit
	rock-border
	rock-edge
	rope
	rope-ladder
	section
	slope
	steps
	survey
	u
	via-ferrata
	wall
	water-flow
}

set xth(area_types) {
	bedrock
	blocks
	clay
	debris
	dimensions
	flowstone
	ice
	moonmilk
	pebbles
	sand
	snow
	sump
	u
	water
}

::msgcat::mcset bg "area bedrock" [encoding convertfrom utf-8 "\320\276\321\201\320\275\320\276\320\262\320\275\320\260 \321\201\320\272\320\260\320\273\320\260"]
::msgcat::mcset cz "area bedrock" [encoding convertfrom utf-8 "pevn\303\241 sk\303\241la"]
::msgcat::mcset de "area bedrock" [encoding convertfrom utf-8 "Deckgebirge"]
::msgcat::mcset el "area bedrock" [encoding convertfrom utf-8 "\317\200\316\255\317\204\317\201\317\211\316\274\316\261"]
::msgcat::mcset en "area bedrock" [encoding convertfrom utf-8 "bedrock"]
::msgcat::mcset en_UK "area bedrock" [encoding convertfrom utf-8 "bedrock"]
::msgcat::mcset en_US "area bedrock" [encoding convertfrom utf-8 "bedrock"]
::msgcat::mcset es "area bedrock" [encoding convertfrom utf-8 "roca madre"]
::msgcat::mcset fr "area bedrock" [encoding convertfrom utf-8 "roche"]
::msgcat::mcset it "area bedrock" [encoding convertfrom utf-8 "roccia"]
::msgcat::mcset pt "area bedrock" [encoding convertfrom utf-8 "rocha encaixante"]
::msgcat::mcset pt_BR "area bedrock" [encoding convertfrom utf-8 "rocha encaixante"]
::msgcat::mcset pt_PT "area bedrock" [encoding convertfrom utf-8 "rocha encaixante"]
::msgcat::mcset ru "area bedrock" [encoding convertfrom utf-8 "\320\272\320\276\321\200\320\265\320\275\320\275\320\260\321\217 \320\277\320\276\321\200\320\276\320\264\320\260"]
::msgcat::mcset sk "area bedrock" [encoding convertfrom utf-8 "pevn\303\241 skala"]
::msgcat::mcset sq "area bedrock" [encoding convertfrom utf-8 "shtrat shkembi"]
::msgcat::mcset bg "area blocks" [encoding convertfrom utf-8 "\320\261\320\273\320\276\320\272\320\260\320\266"]
::msgcat::mcset cz "area blocks" [encoding convertfrom utf-8 "skaln\303\255 bloky"]
::msgcat::mcset de "area blocks" [encoding convertfrom utf-8 "Fl\303\244che mit Bl\303\266cken"]
::msgcat::mcset el "area blocks" [encoding convertfrom utf-8 "\316\277\316\263\316\272\317\214\316\273\316\271\316\270\316\277\316\271"]
::msgcat::mcset en "area blocks" [encoding convertfrom utf-8 "blocks, breakdown"]
::msgcat::mcset en_UK "area blocks" [encoding convertfrom utf-8 "blocks, breakdown"]
::msgcat::mcset en_US "area blocks" [encoding convertfrom utf-8 "blocks, breakdown"]
::msgcat::mcset es "area blocks" [encoding convertfrom utf-8 "bloques"]
::msgcat::mcset fr "area blocks" [encoding convertfrom utf-8 "blocs"]
::msgcat::mcset it "area blocks" [encoding convertfrom utf-8 "massi"]
::msgcat::mcset mi "area blocks" [encoding convertfrom utf-8 "pakaru a k\305\215hatunui"]
::msgcat::mcset pt "area blocks" [encoding convertfrom utf-8 "blocos"]
::msgcat::mcset pt_BR "area blocks" [encoding convertfrom utf-8 "blocos"]
::msgcat::mcset pt_PT "area blocks" [encoding convertfrom utf-8 "blocos"]
::msgcat::mcset ru "area blocks" [encoding convertfrom utf-8 "\320\275\320\260\320\262\320\260\320\273 \320\263\320\273\321\213\320\261"]
::msgcat::mcset sk "area blocks" [encoding convertfrom utf-8 "skaln\303\251 bloky"]
::msgcat::mcset sq "area blocks" [encoding convertfrom utf-8 "blloqe"]
::msgcat::mcset bg "area clay" [encoding convertfrom utf-8 "\320\263\320\273\320\270\320\275\320\260"]
::msgcat::mcset cz "area clay" [encoding convertfrom utf-8 "bahno"]
::msgcat::mcset de "area clay" [encoding convertfrom utf-8 "Lehmfl\303\244che"]
::msgcat::mcset el "area clay" [encoding convertfrom utf-8 "\316\254\317\201\316\263\316\271\316\273\316\277\317\202"]
::msgcat::mcset en "area clay" [encoding convertfrom utf-8 "clay"]
::msgcat::mcset en_UK "area clay" [encoding convertfrom utf-8 "clay"]
::msgcat::mcset en_US "area clay" [encoding convertfrom utf-8 "clay"]
::msgcat::mcset es "area clay" [encoding convertfrom utf-8 "arcilla"]
::msgcat::mcset fr "area clay" [encoding convertfrom utf-8 "argile"]
::msgcat::mcset it "area clay" [encoding convertfrom utf-8 "argilla"]
::msgcat::mcset mi "area clay" [encoding convertfrom utf-8 "oneuku"]
::msgcat::mcset pt "area clay" [encoding convertfrom utf-8 "lama"]
::msgcat::mcset pt_BR "area clay" [encoding convertfrom utf-8 "lama"]
::msgcat::mcset pt_PT "area clay" [encoding convertfrom utf-8 "lama"]
::msgcat::mcset ru "area clay" [encoding convertfrom utf-8 "\320\263\320\273\320\270\320\275\320\260"]
::msgcat::mcset sk "area clay" [encoding convertfrom utf-8 "\303\255l"]
::msgcat::mcset sq "area clay" [encoding convertfrom utf-8 "argjil"]
::msgcat::mcset bg "area debris" [encoding convertfrom utf-8 "\321\207\320\260\320\272\321\212\320\273"]
::msgcat::mcset cz "area debris" [encoding convertfrom utf-8 "\305\241t\304\233rk"]
::msgcat::mcset de "area debris" [encoding convertfrom utf-8 "Schuttfl\303\244che"]
::msgcat::mcset el "area debris" [encoding convertfrom utf-8 "\317\207\316\261\316\273\316\254\317\203\316\274\316\261\317\204\316\261"]
::msgcat::mcset en "area debris" [encoding convertfrom utf-8 "debris"]
::msgcat::mcset en_UK "area debris" [encoding convertfrom utf-8 "debris"]
::msgcat::mcset en_US "area debris" [encoding convertfrom utf-8 "debris"]
::msgcat::mcset es "area debris" [encoding convertfrom utf-8 "derrubios"]
::msgcat::mcset fr "area debris" [encoding convertfrom utf-8 "d\303\251bris"]
::msgcat::mcset it "area debris" [encoding convertfrom utf-8 "detriti"]
::msgcat::mcset mi "area debris" [encoding convertfrom utf-8 "otaota"]
::msgcat::mcset pt "area debris" [encoding convertfrom utf-8 "escombros"]
::msgcat::mcset pt_BR "area debris" [encoding convertfrom utf-8 "escombros"]
::msgcat::mcset pt_PT "area debris" [encoding convertfrom utf-8 "escombros"]
::msgcat::mcset ru "area debris" [encoding convertfrom utf-8 "\321\211\320\265\320\261\320\265\320\275\321\214"]
::msgcat::mcset sk "area debris" [encoding convertfrom utf-8 "\305\241trk"]
::msgcat::mcset sq "area debris" [encoding convertfrom utf-8 "mbetje-gurresh"]
::msgcat::mcset bg "area flowstone" [encoding convertfrom utf-8 "\320\272\320\260\320\274\320\265\320\275\320\265\320\275 \320\262\320\276\320\264\320\276\320\277\320\260\320\264"]
::msgcat::mcset cz "area flowstone" [encoding convertfrom utf-8 "sintrov\303\251 n\303\241teky"]
::msgcat::mcset de "area flowstone" [encoding convertfrom utf-8 "fl\303\244chiger Sinter"]
::msgcat::mcset el "area flowstone" [encoding convertfrom utf-8 "\317\203\317\204\316\261\316\273\316\261\316\263\316\274\316\271\317\204\316\271\316\272\317\214 \317\205\316\273\316\271\316\272\317\214 \316\264\316\261\317\200\316\255\316\264\316\277\317\205"]
::msgcat::mcset en "area flowstone" [encoding convertfrom utf-8 "flowstone"]
::msgcat::mcset en_UK "area flowstone" [encoding convertfrom utf-8 "flowstone"]
::msgcat::mcset en_US "area flowstone" [encoding convertfrom utf-8 "flowstone"]
::msgcat::mcset es "area flowstone" [encoding convertfrom utf-8 "concreci\303\263n"]
::msgcat::mcset fr "area flowstone" [encoding convertfrom utf-8 "concr\303\251tion"]
::msgcat::mcset it "area flowstone" [encoding convertfrom utf-8 "concrezione"]
::msgcat::mcset pt "area flowstone" [encoding convertfrom utf-8 "escorrimento"]
::msgcat::mcset pt_BR "area flowstone" [encoding convertfrom utf-8 "escorrimento"]
::msgcat::mcset pt_PT "area flowstone" [encoding convertfrom utf-8 "escorrimento"]
::msgcat::mcset ru "area flowstone" [encoding convertfrom utf-8 "\320\275\320\260\321\202\320\265\321\207\320\275\321\213\320\271 \320\272\320\260\321\201\320\272\320\260\320\264"]
::msgcat::mcset sk "area flowstone" [encoding convertfrom utf-8 "sintrov\303\251 n\303\241teky"]
::msgcat::mcset sq "area flowstone" [encoding convertfrom utf-8 "gurre-rrjedhes"]
::msgcat::mcset bg "area ice" [encoding convertfrom utf-8 "\320\273\320\265\320\264"]
::msgcat::mcset cz "area ice" [encoding convertfrom utf-8 "led"]
::msgcat::mcset de "area ice" [encoding convertfrom utf-8 "Eisfl\303\244che"]
::msgcat::mcset el "area ice" [encoding convertfrom utf-8 "\317\200\316\254\316\263\316\277\317\202"]
::msgcat::mcset en "area ice" [encoding convertfrom utf-8 "ice"]
::msgcat::mcset en_UK "area ice" [encoding convertfrom utf-8 "ice"]
::msgcat::mcset en_US "area ice" [encoding convertfrom utf-8 "ice"]
::msgcat::mcset es "area ice" [encoding convertfrom utf-8 "hielo"]
::msgcat::mcset fr "area ice" [encoding convertfrom utf-8 "glace"]
::msgcat::mcset it "area ice" [encoding convertfrom utf-8 "ghiaccio"]
::msgcat::mcset mi "area ice" [encoding convertfrom utf-8 "k\305\215paka"]
::msgcat::mcset pt "area ice" [encoding convertfrom utf-8 "gelo"]
::msgcat::mcset pt_BR "area ice" [encoding convertfrom utf-8 "gelo"]
::msgcat::mcset pt_PT "area ice" [encoding convertfrom utf-8 "gelo"]
::msgcat::mcset ru "area ice" [encoding convertfrom utf-8 "\320\273\321\221\320\264"]
::msgcat::mcset sk "area ice" [encoding convertfrom utf-8 "\304\276ad"]
::msgcat::mcset sq "area ice" [encoding convertfrom utf-8 "akull"]
::msgcat::mcset bg "area moonmilk" [encoding convertfrom utf-8 "\320\277\320\265\321\211\320\265\321\200\320\275\320\276 \320\274\320\273\321\217\320\272\320\276"]
::msgcat::mcset cz "area moonmilk" [encoding convertfrom utf-8 "nickam\303\255nek"]
::msgcat::mcset de "area moonmilk" [encoding convertfrom utf-8 "Bergmilch"]
::msgcat::mcset el "area moonmilk" [encoding convertfrom utf-8 "\316\263\316\254\316\273\316\261 \317\203\317\200\316\267\316\273\316\261\316\257\316\277\317\205"]
::msgcat::mcset en "area moonmilk" [encoding convertfrom utf-8 "moonmilk"]
::msgcat::mcset en_UK "area moonmilk" [encoding convertfrom utf-8 "moonmilk"]
::msgcat::mcset en_US "area moonmilk" [encoding convertfrom utf-8 "moonmilk"]
::msgcat::mcset fr "area moonmilk" [encoding convertfrom utf-8 "mondmilch"]
::msgcat::mcset it "area moonmilk" [encoding convertfrom utf-8 "moonmilk"]
::msgcat::mcset ru "area moonmilk" [encoding convertfrom utf-8 "\320\273\321\203\320\275\320\275\320\276\320\265 \320\274\320\276\320\273\320\276\320\272\320\276"]
::msgcat::mcset sk "area moonmilk" [encoding convertfrom utf-8 "n\303\241teky m\303\244kk\303\251ho sintra"]
::msgcat::mcset sq "area moonmilk" [encoding convertfrom utf-8 "qumesht-hena"]
::msgcat::mcset bg "area pebbles" [encoding convertfrom utf-8 "\320\272\320\260\320\274\321\212\321\207\320\265\321\202\320\260"]
::msgcat::mcset cz "area pebbles" [encoding convertfrom utf-8 "valouny"]
::msgcat::mcset de "area pebbles" [encoding convertfrom utf-8 "Kiesfl\303\244che"]
::msgcat::mcset el "area pebbles" [encoding convertfrom utf-8 "\317\207\316\261\316\273\316\257\316\272\316\271\316\261"]
::msgcat::mcset en "area pebbles" [encoding convertfrom utf-8 "pebbles"]
::msgcat::mcset en_UK "area pebbles" [encoding convertfrom utf-8 "pebbles"]
::msgcat::mcset en_US "area pebbles" [encoding convertfrom utf-8 "pebbles"]
::msgcat::mcset es "area pebbles" [encoding convertfrom utf-8 "cantos rodados"]
::msgcat::mcset fr "area pebbles" [encoding convertfrom utf-8 "galets/pierres"]
::msgcat::mcset it "area pebbles" [encoding convertfrom utf-8 "ciotoli"]
::msgcat::mcset mi "area pebbles" [encoding convertfrom utf-8 "nga k\305\215hatu iti"]
::msgcat::mcset pt "area pebbles" [encoding convertfrom utf-8 "seixos"]
::msgcat::mcset pt_BR "area pebbles" [encoding convertfrom utf-8 "seixos"]
::msgcat::mcset pt_PT "area pebbles" [encoding convertfrom utf-8 "seixos"]
::msgcat::mcset ru "area pebbles" [encoding convertfrom utf-8 "\320\263\320\260\320\273\321\214\320\272\320\260"]
::msgcat::mcset sk "area pebbles" [encoding convertfrom utf-8 "okr\303\272hliaky"]
::msgcat::mcset sq "area pebbles" [encoding convertfrom utf-8 "gurralece"]
::msgcat::mcset bg "area sand" [encoding convertfrom utf-8 "\320\277\321\217\321\201\321\212\320\272"]
::msgcat::mcset cz "area sand" [encoding convertfrom utf-8 "p\303\255sek"]
::msgcat::mcset de "area sand" [encoding convertfrom utf-8 "Sandfl\303\244che"]
::msgcat::mcset el "area sand" [encoding convertfrom utf-8 "\316\254\316\274\316\274\316\277\317\202"]
::msgcat::mcset en "area sand" [encoding convertfrom utf-8 "sand"]
::msgcat::mcset en_UK "area sand" [encoding convertfrom utf-8 "sand"]
::msgcat::mcset en_US "area sand" [encoding convertfrom utf-8 "sand"]
::msgcat::mcset es "area sand" [encoding convertfrom utf-8 "arena"]
::msgcat::mcset fr "area sand" [encoding convertfrom utf-8 "sable"]
::msgcat::mcset it "area sand" [encoding convertfrom utf-8 "sabbia"]
::msgcat::mcset mi "area sand" [encoding convertfrom utf-8 "onep\305\253"]
::msgcat::mcset pt "area sand" [encoding convertfrom utf-8 "areia"]
::msgcat::mcset pt_BR "area sand" [encoding convertfrom utf-8 "areia"]
::msgcat::mcset pt_PT "area sand" [encoding convertfrom utf-8 "areia"]
::msgcat::mcset ru "area sand" [encoding convertfrom utf-8 "\320\277\320\265\321\201\320\276\320\272"]
::msgcat::mcset sk "area sand" [encoding convertfrom utf-8 "piesok"]
::msgcat::mcset sq "area sand" [encoding convertfrom utf-8 "rane"]
::msgcat::mcset bg "area snow" [encoding convertfrom utf-8 "\321\201\320\275\321\217\320\263"]
::msgcat::mcset cz "area snow" [encoding convertfrom utf-8 "sn\303\255h"]
::msgcat::mcset de "area snow" [encoding convertfrom utf-8 "Schneefl\303\244che"]
::msgcat::mcset el "area snow" [encoding convertfrom utf-8 "\317\207\316\271\317\214\316\275\316\271"]
::msgcat::mcset en "area snow" [encoding convertfrom utf-8 "snow"]
::msgcat::mcset en_UK "area snow" [encoding convertfrom utf-8 "snow"]
::msgcat::mcset en_US "area snow" [encoding convertfrom utf-8 "snow"]
::msgcat::mcset es "area snow" [encoding convertfrom utf-8 "nieve"]
::msgcat::mcset fr "area snow" [encoding convertfrom utf-8 "neige"]
::msgcat::mcset it "area snow" [encoding convertfrom utf-8 "neve"]
::msgcat::mcset mi "area snow" [encoding convertfrom utf-8 "huka"]
::msgcat::mcset pt "area snow" [encoding convertfrom utf-8 "neve"]
::msgcat::mcset pt_BR "area snow" [encoding convertfrom utf-8 "neve"]
::msgcat::mcset pt_PT "area snow" [encoding convertfrom utf-8 "neve"]
::msgcat::mcset ru "area snow" [encoding convertfrom utf-8 "\321\201\320\275\320\265\320\263"]
::msgcat::mcset sk "area snow" [encoding convertfrom utf-8 "sneh"]
::msgcat::mcset sq "area snow" [encoding convertfrom utf-8 "bore"]
::msgcat::mcset bg "area sump" [encoding convertfrom utf-8 "\321\201\320\270\321\204\320\276\320\275"]
::msgcat::mcset cz "area sump" [encoding convertfrom utf-8 "sifon"]
::msgcat::mcset de "area sump" [encoding convertfrom utf-8 "Siphonfl\303\244che"]
::msgcat::mcset el "area sump" [encoding convertfrom utf-8 "\317\203\316\271\317\206\317\214\316\275\316\271"]
::msgcat::mcset en "area sump" [encoding convertfrom utf-8 "sump"]
::msgcat::mcset en_UK "area sump" [encoding convertfrom utf-8 "sump"]
::msgcat::mcset en_US "area sump" [encoding convertfrom utf-8 "sump"]
::msgcat::mcset es "area sump" [encoding convertfrom utf-8 "sif\303\263n"]
::msgcat::mcset fr "area sump" [encoding convertfrom utf-8 "siphon"]
::msgcat::mcset it "area sump" [encoding convertfrom utf-8 "sifone"]
::msgcat::mcset mi "area sump" [encoding convertfrom utf-8 "kari a wai"]
::msgcat::mcset pt "area sump" [encoding convertfrom utf-8 "sif\303\243o"]
::msgcat::mcset pt_BR "area sump" [encoding convertfrom utf-8 "sif\303\243o"]
::msgcat::mcset pt_PT "area sump" [encoding convertfrom utf-8 "sif\303\243o"]
::msgcat::mcset ru "area sump" [encoding convertfrom utf-8 "\321\201\320\270\321\204\320\276\320\275"]
::msgcat::mcset sk "area sump" [encoding convertfrom utf-8 "zatopen\303\241 plocha (sif\303\263n)"]
::msgcat::mcset sq "area sump" [encoding convertfrom utf-8 "sifoni"]
::msgcat::mcset bg "area water" [encoding convertfrom utf-8 "\320\262\320\276\320\264\320\260"]
::msgcat::mcset cz "area water" [encoding convertfrom utf-8 "vodn\303\255 plocha"]
::msgcat::mcset de "area water" [encoding convertfrom utf-8 "Wasserfl\303\244che"]
::msgcat::mcset el "area water" [encoding convertfrom utf-8 "\316\275\316\265\317\201\317\214"]
::msgcat::mcset en "area water" [encoding convertfrom utf-8 "water"]
::msgcat::mcset en_UK "area water" [encoding convertfrom utf-8 "water"]
::msgcat::mcset en_US "area water" [encoding convertfrom utf-8 "water"]
::msgcat::mcset es "area water" [encoding convertfrom utf-8 "agua"]
::msgcat::mcset fr "area water" [encoding convertfrom utf-8 "eau"]
::msgcat::mcset it "area water" [encoding convertfrom utf-8 "acqua"]
::msgcat::mcset mi "area water" [encoding convertfrom utf-8 "wai"]
::msgcat::mcset pt "area water" [encoding convertfrom utf-8 "\303\241gua"]
::msgcat::mcset pt_BR "area water" [encoding convertfrom utf-8 "\303\241gua"]
::msgcat::mcset pt_PT "area water" [encoding convertfrom utf-8 "\303\241gua"]
::msgcat::mcset ru "area water" [encoding convertfrom utf-8 "\320\262\320\276\320\264\320\260"]
::msgcat::mcset sk "area water" [encoding convertfrom utf-8 "vodn\303\241 plocha"]
::msgcat::mcset sq "area water" [encoding convertfrom utf-8 "uje"]
::msgcat::mcset bg "line border" [encoding convertfrom utf-8 "\320\263\321\200\320\260\320\275\320\270\321\206\320\260"]
::msgcat::mcset cz "line border" [encoding convertfrom utf-8 "ohrani\304\215en\303\255"]
::msgcat::mcset de "line border" [encoding convertfrom utf-8 "Begrenzung"]
::msgcat::mcset el "line border" [encoding convertfrom utf-8 "\316\254\316\272\317\201\316\267"]
::msgcat::mcset en "line border" [encoding convertfrom utf-8 "border"]
::msgcat::mcset en_UK "line border" [encoding convertfrom utf-8 "border"]
::msgcat::mcset en_US "line border" [encoding convertfrom utf-8 "border"]
::msgcat::mcset es "line border" [encoding convertfrom utf-8 "l\303\255mite"]
::msgcat::mcset fr "line border" [encoding convertfrom utf-8 "bord"]
::msgcat::mcset it "line border" [encoding convertfrom utf-8 "bordo"]
::msgcat::mcset mi "line border" [encoding convertfrom utf-8 "rohe"]
::msgcat::mcset pt "line border" [encoding convertfrom utf-8 "borda"]
::msgcat::mcset pt_BR "line border" [encoding convertfrom utf-8 "borda"]
::msgcat::mcset pt_PT "line border" [encoding convertfrom utf-8 "borda"]
::msgcat::mcset ru "line border" [encoding convertfrom utf-8 "\320\263\321\200\320\260\320\275\320\270\321\206\320\260"]
::msgcat::mcset sk "line border" [encoding convertfrom utf-8 "ohrani\304\215enie"]
::msgcat::mcset sq "line border" [encoding convertfrom utf-8 "kufiri"]
::msgcat::mcset bg "line border:presumed" [encoding convertfrom utf-8 "\320\277\321\200\320\265\320\264\320\277\320\276\320\273\320\260\320\263\320\260\320\265\320\274\320\260 \320\263\321\200\320\260\320\275\320\270\321\206\320\260"]
::msgcat::mcset cz "line border:presumed" [encoding convertfrom utf-8 "p\305\231edpokl\303\241dan\303\251 ohrani\304\215en\303\255"]
::msgcat::mcset de "line border:presumed" [encoding convertfrom utf-8 "gesch\303\244tzte Begrenzung"]
::msgcat::mcset el "line border:presumed" [encoding convertfrom utf-8 "\317\205\317\200\316\277\316\270\316\265\317\204\316\271\316\272\316\256 \316\254\316\272\317\201\316\267"]
::msgcat::mcset en "line border:presumed" [encoding convertfrom utf-8 "presumed border"]
::msgcat::mcset en_UK "line border:presumed" [encoding convertfrom utf-8 "presumed border"]
::msgcat::mcset en_US "line border:presumed" [encoding convertfrom utf-8 "presumed border"]
::msgcat::mcset es "line border:presumed" [encoding convertfrom utf-8 "l\303\255mite supuesto"]
::msgcat::mcset fr "line border:presumed" [encoding convertfrom utf-8 "bord, suppos\303\251"]
::msgcat::mcset it "line border:presumed" [encoding convertfrom utf-8 "bordo presunto"]
::msgcat::mcset mi "line border:presumed" [encoding convertfrom utf-8 "rohe whakaaringa whakaaro"]
::msgcat::mcset pt "line border:presumed" [encoding convertfrom utf-8 "borda presumida"]
::msgcat::mcset pt_BR "line border:presumed" [encoding convertfrom utf-8 "borda presumida"]
::msgcat::mcset pt_PT "line border:presumed" [encoding convertfrom utf-8 "borda presumida"]
::msgcat::mcset ru "line border:presumed" [encoding convertfrom utf-8 "\320\277\321\200\320\265\320\264\320\277\320\276\320\273\320\260\320\263\320\260\320\265\320\274\320\260\321\217 \320\263\321\200\320\260\320\275\320\270\321\206\320\260"]
::msgcat::mcset sk "line border:presumed" [encoding convertfrom utf-8 "predpokladan\303\251 ohrani\304\215enie"]
::msgcat::mcset sq "line border:presumed" [encoding convertfrom utf-8 "kufij I supozuar"]
::msgcat::mcset bg "line border:temporary" [encoding convertfrom utf-8 "\320\262\321\200\320\265\320\274\320\265\320\275\320\275\320\260 \320\263\321\200\320\260\320\275\320\270\321\206\320\260"]
::msgcat::mcset cz "line border:temporary" [encoding convertfrom utf-8 "nest\303\241l\303\251 ohrani\304\215en\303\255"]
::msgcat::mcset de "line border:temporary" [encoding convertfrom utf-8 "vor\303\274bergehende Begrenzung"]
::msgcat::mcset el "line border:temporary" [encoding convertfrom utf-8 "\317\200\317\201\316\277\317\203\317\211\317\201\316\271\316\275\316\256 \316\254\316\272\317\201\316\267"]
::msgcat::mcset en "line border:temporary" [encoding convertfrom utf-8 "temporary border"]
::msgcat::mcset en_UK "line border:temporary" [encoding convertfrom utf-8 "temporary border"]
::msgcat::mcset en_US "line border:temporary" [encoding convertfrom utf-8 "temporary border"]
::msgcat::mcset es "line border:temporary" [encoding convertfrom utf-8 "l\303\255mite temporal"]
::msgcat::mcset fr "line border:temporary" [encoding convertfrom utf-8 "bord, temporaire"]
::msgcat::mcset it "line border:temporary" [encoding convertfrom utf-8 "bordo temporaneo"]
::msgcat::mcset mi "line border:temporary" [encoding convertfrom utf-8 "rohe mo te w\304\201"]
::msgcat::mcset pt "line border:temporary" [encoding convertfrom utf-8 "borda tempor\303\241ria"]
::msgcat::mcset pt_BR "line border:temporary" [encoding convertfrom utf-8 "borda tempor\303\241ria"]
::msgcat::mcset pt_PT "line border:temporary" [encoding convertfrom utf-8 "borda tempor\303\241ria"]
::msgcat::mcset ru "line border:temporary" [encoding convertfrom utf-8 "\320\262\321\200\320\265\320\274\320\265\320\275\320\275\320\260\321\217 \320\263\321\200\320\260\320\275\320\270\321\206\320\260"]
::msgcat::mcset sk "line border:temporary" [encoding convertfrom utf-8 "nest\303\241le ohrani\304\215enie"]
::msgcat::mcset sq "line border:temporary" [encoding convertfrom utf-8 "kufij i perkohshem"]
::msgcat::mcset bg "line border:visible" [encoding convertfrom utf-8 "\320\262\320\270\320\264\320\270\320\274\320\260 \320\263\321\200\320\260\320\275\320\270\321\206\320\260"]
::msgcat::mcset cz "line border:visible" [encoding convertfrom utf-8 "ohrani\304\215en\303\255"]
::msgcat::mcset de "line border:visible" [encoding convertfrom utf-8 "sichtbare Begrenzung"]
::msgcat::mcset el "line border:visible" [encoding convertfrom utf-8 "\316\254\316\272\317\201\316\267"]
::msgcat::mcset en "line border:visible" [encoding convertfrom utf-8 "border"]
::msgcat::mcset en_UK "line border:visible" [encoding convertfrom utf-8 "border"]
::msgcat::mcset en_US "line border:visible" [encoding convertfrom utf-8 "border"]
::msgcat::mcset es "line border:visible" [encoding convertfrom utf-8 "l\303\255mite"]
::msgcat::mcset fr "line border:visible" [encoding convertfrom utf-8 "bord"]
::msgcat::mcset it "line border:visible" [encoding convertfrom utf-8 "bordo"]
::msgcat::mcset mi "line border:visible" [encoding convertfrom utf-8 "rohe"]
::msgcat::mcset pt "line border:visible" [encoding convertfrom utf-8 "borda"]
::msgcat::mcset pt_BR "line border:visible" [encoding convertfrom utf-8 "borda"]
::msgcat::mcset pt_PT "line border:visible" [encoding convertfrom utf-8 "borda"]
::msgcat::mcset ru "line border:visible" [encoding convertfrom utf-8 "\320\262\320\270\320\264\320\270\320\274\320\260\321\217 \320\263\321\200\320\260\320\275\320\270\321\206\320\260"]
::msgcat::mcset sk "line border:visible" [encoding convertfrom utf-8 "ohrani\304\215enie"]
::msgcat::mcset sq "line border:visible" [encoding convertfrom utf-8 "vije kufiri-e dukshme"]
::msgcat::mcset bg "line ceiling-meander" [encoding convertfrom utf-8 "\320\274\320\265\320\260\320\275\320\264\321\212\321\200, \320\272\320\260\320\275\320\260\320\273 \320\262 \321\202\320\260\320\262\320\260\320\275\320\260"]
::msgcat::mcset cz "line ceiling-meander" [encoding convertfrom utf-8 "stropn\303\255 meandr"]
::msgcat::mcset de "line ceiling-meander" [encoding convertfrom utf-8 "Deckenm\303\244ander"]
::msgcat::mcset el "line ceiling-meander" [encoding convertfrom utf-8 "\316\274\316\261\316\257\316\261\316\275\316\264\317\201\316\277\317\202 \316\277\317\201\316\277\317\206\316\256\317\202"]
::msgcat::mcset en "line ceiling-meander" [encoding convertfrom utf-8 "ceiling meander"]
::msgcat::mcset en_UK "line ceiling-meander" [encoding convertfrom utf-8 "ceiling meander"]
::msgcat::mcset en_US "line ceiling-meander" [encoding convertfrom utf-8 "ceiling meander"]
::msgcat::mcset es "line ceiling-meander" [encoding convertfrom utf-8 "meandro inverso"]
::msgcat::mcset fr "line ceiling-meander" [encoding convertfrom utf-8 "m\303\251andre de plafond"]
::msgcat::mcset it "line ceiling-meander" [encoding convertfrom utf-8 "canale di volta"]
::msgcat::mcset mi "line ceiling-meander" [encoding convertfrom utf-8 "kopiko tuanui"]
::msgcat::mcset pt "line ceiling-meander" [encoding convertfrom utf-8 "meandro no teto"]
::msgcat::mcset pt_BR "line ceiling-meander" [encoding convertfrom utf-8 "meandro no teto"]
::msgcat::mcset pt_PT "line ceiling-meander" [encoding convertfrom utf-8 "meandro no tecto"]
::msgcat::mcset ru "line ceiling-meander" [encoding convertfrom utf-8 "\320\274\320\265\320\260\320\275\320\264\321\200, \320\272\320\260\320\275\320\260\320\273 \320\262 \320\277\320\276\321\202\320\276\320\273\320\272\320\265"]
::msgcat::mcset sk "line ceiling-meander" [encoding convertfrom utf-8 "stropn\303\275 meander"]
::msgcat::mcset sq "line ceiling-meander" [encoding convertfrom utf-8 "rrjedhe uji gjarperore ne tavan"]
::msgcat::mcset bg "line ceiling-step" [encoding convertfrom utf-8 "\320\275\320\270\321\210\320\260 \320\262 \321\202\320\260\320\262\320\260\320\275\320\260"]
::msgcat::mcset cz "line ceiling-step" [encoding convertfrom utf-8 "zm\304\233na v\303\275\305\241ky stropu"]
::msgcat::mcset de "line ceiling-step" [encoding convertfrom utf-8 "Deckenstufe"]
::msgcat::mcset el "line ceiling-step" [encoding convertfrom utf-8 "\317\203\316\272\316\261\316\273\316\277\317\200\316\254\317\204\316\271 \316\277\317\201\316\277\317\206\316\256\317\202"]
::msgcat::mcset en "line ceiling-step" [encoding convertfrom utf-8 "ceiling step"]
::msgcat::mcset en_UK "line ceiling-step" [encoding convertfrom utf-8 "ceiling step"]
::msgcat::mcset en_US "line ceiling-step" [encoding convertfrom utf-8 "ceiling step"]
::msgcat::mcset es "line ceiling-step" [encoding convertfrom utf-8 "resalte inverso"]
::msgcat::mcset fr "line ceiling-step" [encoding convertfrom utf-8 "marche de plafond"]
::msgcat::mcset it "line ceiling-step" [encoding convertfrom utf-8 "gradino a soffitto"]
::msgcat::mcset mi "line ceiling-step" [encoding convertfrom utf-8 "tapuae ki te tuanui"]
::msgcat::mcset pt "line ceiling-step" [encoding convertfrom utf-8 "degrau no teto"]
::msgcat::mcset pt_BR "line ceiling-step" [encoding convertfrom utf-8 "degrau no teto"]
::msgcat::mcset pt_PT "line ceiling-step" [encoding convertfrom utf-8 "degrau no tecto"]
::msgcat::mcset ru "line ceiling-step" [encoding convertfrom utf-8 "\321\203\321\201\321\202\321\203\320\277 \320\277\320\276\321\202\320\276\320\273\320\272\320\260"]
::msgcat::mcset sk "line ceiling-step" [encoding convertfrom utf-8 "zmena v\303\275\305\241ky stropu"]
::msgcat::mcset sq "line ceiling-step" [encoding convertfrom utf-8 "shkalle ne tavan"]
::msgcat::mcset bg "line chimney" [encoding convertfrom utf-8 "\320\272\320\276\320\274\320\270\320\275"]
::msgcat::mcset cz "line chimney" [encoding convertfrom utf-8 "kom\303\255n"]
::msgcat::mcset de "line chimney" [encoding convertfrom utf-8 "Schlot"]
::msgcat::mcset el "line chimney" [encoding convertfrom utf-8 "\316\272\316\261\316\274\316\271\316\275\316\254\316\264\316\261"]
::msgcat::mcset en "line chimney" [encoding convertfrom utf-8 "chimney"]
::msgcat::mcset en_UK "line chimney" [encoding convertfrom utf-8 "chimney"]
::msgcat::mcset en_US "line chimney" [encoding convertfrom utf-8 "chimney"]
::msgcat::mcset es "line chimney" [encoding convertfrom utf-8 "chimenea"]
::msgcat::mcset fr "line chimney" [encoding convertfrom utf-8 "chemin\303\251e"]
::msgcat::mcset it "line chimney" [encoding convertfrom utf-8 "camino"]
::msgcat::mcset mi "line chimney" [encoding convertfrom utf-8 "tumera"]
::msgcat::mcset pt "line chimney" [encoding convertfrom utf-8 "chamin\303\251"]
::msgcat::mcset pt_BR "line chimney" [encoding convertfrom utf-8 "chamin\303\251"]
::msgcat::mcset pt_PT "line chimney" [encoding convertfrom utf-8 "chamin\303\251"]
::msgcat::mcset ru "line chimney" [encoding convertfrom utf-8 "\321\202\321\200\321\203\320\261\320\260"]
::msgcat::mcset sk "line chimney" [encoding convertfrom utf-8 "kom\303\255n"]
::msgcat::mcset sq "line chimney" [encoding convertfrom utf-8 "oxhak"]
::msgcat::mcset bg "line contour" [encoding convertfrom utf-8 "\320\272\320\276\320\275\321\202\321\203\321\200"]
::msgcat::mcset cz "line contour" [encoding convertfrom utf-8 "vrstevnice"]
::msgcat::mcset de "line contour" [encoding convertfrom utf-8 "H\303\266henlinie"]
::msgcat::mcset el "line contour" [encoding convertfrom utf-8 "\316\271\317\203\316\277\317\213\317\210\316\256\317\202"]
::msgcat::mcset en "line contour" [encoding convertfrom utf-8 "contour"]
::msgcat::mcset en_UK "line contour" [encoding convertfrom utf-8 "contour"]
::msgcat::mcset en_US "line contour" [encoding convertfrom utf-8 "contour"]
::msgcat::mcset es "line contour" [encoding convertfrom utf-8 "contorno"]
::msgcat::mcset fr "line contour" [encoding convertfrom utf-8 "contour"]
::msgcat::mcset it "line contour" [encoding convertfrom utf-8 "contorno"]
::msgcat::mcset mi "line contour" [encoding convertfrom utf-8 "koru"]
::msgcat::mcset pt "line contour" [encoding convertfrom utf-8 "contorno"]
::msgcat::mcset pt_BR "line contour" [encoding convertfrom utf-8 "contorno"]
::msgcat::mcset pt_PT "line contour" [encoding convertfrom utf-8 "contorno"]
::msgcat::mcset ru "line contour" [encoding convertfrom utf-8 "\320\272\320\276\320\275\321\202\321\203\321\200"]
::msgcat::mcset sk "line contour" [encoding convertfrom utf-8 "vrstevnica"]
::msgcat::mcset sq "line contour" [encoding convertfrom utf-8 "kontura"]
::msgcat::mcset bg "line floor-meander" [encoding convertfrom utf-8 "\320\274\320\265\320\260\320\275\320\264\321\212\321\200, \320\272\320\260\320\275\320\260\320\273 \320\262 \320\277\320\276\320\264\320\260"]
::msgcat::mcset cz "line floor-meander" [encoding convertfrom utf-8 "meandr ve dn\304\233"]
::msgcat::mcset de "line floor-meander" [encoding convertfrom utf-8 "Bodenm\303\244ander"]
::msgcat::mcset el "line floor-meander" [encoding convertfrom utf-8 "\316\274\316\261\316\257\316\261\316\275\316\264\317\201\316\277\317\202 \316\264\316\261\317\200\316\255\316\264\316\277\317\205"]
::msgcat::mcset en "line floor-meander" [encoding convertfrom utf-8 "floor meander"]
::msgcat::mcset en_UK "line floor-meander" [encoding convertfrom utf-8 "floor meander"]
::msgcat::mcset en_US "line floor-meander" [encoding convertfrom utf-8 "floor meander"]
::msgcat::mcset es "line floor-meander" [encoding convertfrom utf-8 "meandro"]
::msgcat::mcset fr "line floor-meander" [encoding convertfrom utf-8 "m\303\251andre au sol"]
::msgcat::mcset it "line floor-meander" [encoding convertfrom utf-8 "meandro"]
::msgcat::mcset mi "line floor-meander" [encoding convertfrom utf-8 "kopiko"]
::msgcat::mcset pt "line floor-meander" [encoding convertfrom utf-8 "meandro no piso"]
::msgcat::mcset pt_BR "line floor-meander" [encoding convertfrom utf-8 "meandro no piso"]
::msgcat::mcset pt_PT "line floor-meander" [encoding convertfrom utf-8 "meandro no piso"]
::msgcat::mcset ru "line floor-meander" [encoding convertfrom utf-8 "\320\274\320\265\320\260\320\275\320\264\321\200, \320\272\320\260\320\275\320\260\320\273 \320\262 \320\277\320\276\320\273\321\203"]
::msgcat::mcset sk "line floor-meander" [encoding convertfrom utf-8 "meander v dne"]
::msgcat::mcset sq "line floor-meander" [encoding convertfrom utf-8 "rrjedhe uji gjarperore"]
::msgcat::mcset bg "line floor-step" [encoding convertfrom utf-8 "\320\277\321\200\320\260\320\263"]
::msgcat::mcset cz "line floor-step" [encoding convertfrom utf-8 "stupe\305\210"]
::msgcat::mcset de "line floor-step" [encoding convertfrom utf-8 "Bodenstufe"]
::msgcat::mcset el "line floor-step" [encoding convertfrom utf-8 "\317\203\316\272\316\261\316\273\316\277\317\200\316\254\317\204\316\271"]
::msgcat::mcset en "line floor-step" [encoding convertfrom utf-8 "floor step"]
::msgcat::mcset en_UK "line floor-step" [encoding convertfrom utf-8 "floor step"]
::msgcat::mcset en_US "line floor-step" [encoding convertfrom utf-8 "floor step"]
::msgcat::mcset es "line floor-step" [encoding convertfrom utf-8 "resalte"]
::msgcat::mcset fr "line floor-step" [encoding convertfrom utf-8 "marche"]
::msgcat::mcset it "line floor-step" [encoding convertfrom utf-8 "gradino"]
::msgcat::mcset mi "line floor-step" [encoding convertfrom utf-8 "tapuae"]
::msgcat::mcset pt "line floor-step" [encoding convertfrom utf-8 "degrau"]
::msgcat::mcset pt_BR "line floor-step" [encoding convertfrom utf-8 "degrau"]
::msgcat::mcset pt_PT "line floor-step" [encoding convertfrom utf-8 "degrau"]
::msgcat::mcset ru "line floor-step" [encoding convertfrom utf-8 "\321\203\321\201\321\202\321\203\320\277 \320\277\320\276\320\273\320\260"]
::msgcat::mcset sk "line floor-step" [encoding convertfrom utf-8 "stupe\305\210"]
::msgcat::mcset sq "line floor-step" [encoding convertfrom utf-8 "shkalle ne dysheme"]
::msgcat::mcset bg "line flowstone" [encoding convertfrom utf-8 "\320\272\320\260\320\274\320\265\320\275\320\265\320\275 \320\262\320\276\320\264\320\276\320\277\320\260\320\264"]
::msgcat::mcset cz "line flowstone" [encoding convertfrom utf-8 "sintrov\303\251 n\303\241teky"]
::msgcat::mcset de "line flowstone" [encoding convertfrom utf-8 "fl\303\244chiger Sinter"]
::msgcat::mcset el "line flowstone" [encoding convertfrom utf-8 "\317\203\317\204\316\261\316\273\316\261\316\263\316\274\316\271\317\204\316\271\316\272\317\214 \317\205\316\273\316\271\316\272\317\214 \316\264\316\261\317\200\316\255\316\264\316\277\317\205"]
::msgcat::mcset en "line flowstone" [encoding convertfrom utf-8 "flowstone"]
::msgcat::mcset en_UK "line flowstone" [encoding convertfrom utf-8 "flowstone"]
::msgcat::mcset en_US "line flowstone" [encoding convertfrom utf-8 "flowstone"]
::msgcat::mcset es "line flowstone" [encoding convertfrom utf-8 "concreci\303\263n"]
::msgcat::mcset fr "line flowstone" [encoding convertfrom utf-8 "concr\303\251tion"]
::msgcat::mcset it "line flowstone" [encoding convertfrom utf-8 "concrezione"]
::msgcat::mcset mi "line flowstone" [encoding convertfrom utf-8 "pari k\305\215hatu"]
::msgcat::mcset pt "line flowstone" [encoding convertfrom utf-8 "escorrimento"]
::msgcat::mcset pt_BR "line flowstone" [encoding convertfrom utf-8 "escorrimento"]
::msgcat::mcset pt_PT "line flowstone" [encoding convertfrom utf-8 "escorrimento"]
::msgcat::mcset ru "line flowstone" [encoding convertfrom utf-8 "\320\275\320\260\321\202\320\265\321\207\320\275\321\213\320\271 \320\272\320\260\321\201\320\272\320\260\320\264"]
::msgcat::mcset sk "line flowstone" [encoding convertfrom utf-8 "sintrov\303\251 n\303\241teky"]
::msgcat::mcset sq "line flowstone" [encoding convertfrom utf-8 "gurre-rrjedhes"]
::msgcat::mcset bg "line gradient" [encoding convertfrom utf-8 "\320\275\320\260\320\272\320\273\320\276\320\275 \320\275\320\260 \320\263\320\260\320\273\320\265\321\200\320\270\321\217\321\202\320\260"]
::msgcat::mcset cz "line gradient" [encoding convertfrom utf-8 "sklon chodby"]
::msgcat::mcset de "line gradient" [encoding convertfrom utf-8 "Gef\303\244lle"]
::msgcat::mcset el "line gradient" [encoding convertfrom utf-8 "\316\272\316\273\316\257\317\203\316\267 \317\203\317\204\316\277\316\254\317\202"]
::msgcat::mcset en "line gradient" [encoding convertfrom utf-8 "passage gradient"]
::msgcat::mcset en_UK "line gradient" [encoding convertfrom utf-8 "passage gradient"]
::msgcat::mcset en_US "line gradient" [encoding convertfrom utf-8 "passage gradient"]
::msgcat::mcset es "line gradient" [encoding convertfrom utf-8 "gradiente"]
::msgcat::mcset fr "line gradient" [encoding convertfrom utf-8 "pente"]
::msgcat::mcset it "line gradient" [encoding convertfrom utf-8 "scivolo"]
::msgcat::mcset mi "line gradient" [encoding convertfrom utf-8 "heke"]
::msgcat::mcset pt "line gradient" [encoding convertfrom utf-8 "declividade da galeria"]
::msgcat::mcset pt_BR "line gradient" [encoding convertfrom utf-8 "declividade da galeria"]
::msgcat::mcset pt_PT "line gradient" [encoding convertfrom utf-8 "declividade da galeria"]
::msgcat::mcset ru "line gradient" [encoding convertfrom utf-8 "\321\203\320\272\320\273\320\276\320\275 \321\205\320\276\320\264\320\260"]
::msgcat::mcset sk "line gradient" [encoding convertfrom utf-8 "sklon chodby"]
::msgcat::mcset sq "line gradient" [encoding convertfrom utf-8 "pjertesia e kalimit"]
::msgcat::mcset bg "line label" [encoding convertfrom utf-8 "\320\265\321\202\320\270\320\272\320\265\321\202"]
::msgcat::mcset cz "line label" [encoding convertfrom utf-8 "pojmenov\303\241n\303\255"]
::msgcat::mcset de "line label" [encoding convertfrom utf-8 "Beschriftung"]
::msgcat::mcset el "line label" [encoding convertfrom utf-8 "\317\200\316\265\317\201\316\271\316\263\317\201\316\261\317\206\316\256"]
::msgcat::mcset en "line label" [encoding convertfrom utf-8 "label"]
::msgcat::mcset en_UK "line label" [encoding convertfrom utf-8 "label"]
::msgcat::mcset en_US "line label" [encoding convertfrom utf-8 "label"]
::msgcat::mcset es "line label" [encoding convertfrom utf-8 "etiqueta"]
::msgcat::mcset fr "line label" [encoding convertfrom utf-8 "libell\303\251"]
::msgcat::mcset it "line label" [encoding convertfrom utf-8 "etichetta"]
::msgcat::mcset mi "line label" [encoding convertfrom utf-8 "ingoa"]
::msgcat::mcset pt "line label" [encoding convertfrom utf-8 "indica\303\247\303\243o"]
::msgcat::mcset pt_BR "line label" [encoding convertfrom utf-8 "indica\303\247\303\243o"]
::msgcat::mcset pt_PT "line label" [encoding convertfrom utf-8 "indica\303\247\303\243o"]
::msgcat::mcset ru "line label" [encoding convertfrom utf-8 "\321\202\320\265\320\272\321\201\321\202\320\276\320\262\320\260\321\217 \320\274\320\265\321\202\320\272\320\260"]
::msgcat::mcset sk "line label" [encoding convertfrom utf-8 "pomenovanie"]
::msgcat::mcset sq "line label" [encoding convertfrom utf-8 "mbishkrim"]
::msgcat::mcset bg "line map-connection" [encoding convertfrom utf-8 "\321\201\320\262\321\212\321\200\320\267\320\262\320\260\320\275\320\265 \320\275\320\260 \320\272\320\260\321\200\321\202\320\270"]
::msgcat::mcset cz "line map-connection" [encoding convertfrom utf-8 "spojen\303\255 map"]
::msgcat::mcset de "line map-connection" [encoding convertfrom utf-8 "zusammenh\303\244ngende Pl\303\244ne"]
::msgcat::mcset el "line map-connection" [encoding convertfrom utf-8 "\316\255\316\275\317\211\317\203\316\267 \317\207\316\261\317\201\317\204\317\216\316\275"]
::msgcat::mcset en "line map-connection" [encoding convertfrom utf-8 "map connection"]
::msgcat::mcset en_UK "line map-connection" [encoding convertfrom utf-8 "map connection"]
::msgcat::mcset en_US "line map-connection" [encoding convertfrom utf-8 "map connection"]
::msgcat::mcset fr "line map-connection" [encoding convertfrom utf-8 "jonction de carte"]
::msgcat::mcset it "line map-connection" [encoding convertfrom utf-8 "riporto di mappa"]
::msgcat::mcset mi "line map-connection" [encoding convertfrom utf-8 "mahere whenua ki te hui"]
::msgcat::mcset ru "line map-connection" [encoding convertfrom utf-8 "\320\273\320\270\320\275\320\270\321\217 \320\262\321\213\320\275\320\276\321\201\320\260"]
::msgcat::mcset sk "line map-connection" [encoding convertfrom utf-8 "prepojenie m\303\241p"]
::msgcat::mcset sq "line map-connection" [encoding convertfrom utf-8 "lidhjet ne harta"]
::msgcat::mcset bg "line moonmilk" [encoding convertfrom utf-8 "\320\277\320\265\321\211\320\265\321\200\320\275\320\276 \320\274\320\273\321\217\320\272\320\276"]
::msgcat::mcset cz "line moonmilk" [encoding convertfrom utf-8 "nickam\303\255nek"]
::msgcat::mcset de "line moonmilk" [encoding convertfrom utf-8 "Bergmilch"]
::msgcat::mcset el "line moonmilk" [encoding convertfrom utf-8 "\316\263\316\254\316\273\316\261 \317\203\317\200\316\267\316\273\316\261\316\257\316\277\317\205"]
::msgcat::mcset en "line moonmilk" [encoding convertfrom utf-8 "moonmilk"]
::msgcat::mcset en_UK "line moonmilk" [encoding convertfrom utf-8 "moonmilk"]
::msgcat::mcset en_US "line moonmilk" [encoding convertfrom utf-8 "moonmilk"]
::msgcat::mcset fr "line moonmilk" [encoding convertfrom utf-8 "mondmilch"]
::msgcat::mcset it "line moonmilk" [encoding convertfrom utf-8 "moonmilk"]
::msgcat::mcset mi "line moonmilk" [encoding convertfrom utf-8 "mirika marama"]
::msgcat::mcset ru "line moonmilk" [encoding convertfrom utf-8 "\320\273\321\203\320\275\320\275\320\276\320\265 \320\274\320\276\320\273\320\276\320\272\320\276"]
::msgcat::mcset sk "line moonmilk" [encoding convertfrom utf-8 "n\303\241teky m\303\244kk\303\251ho sintra"]
::msgcat::mcset sq "line moonmilk" [encoding convertfrom utf-8 "qumesht-hena"]
::msgcat::mcset bg "line overhang" [encoding convertfrom utf-8 "\321\201\320\272\320\260\320\273\320\275\320\260 \320\277\320\273\320\276\321\211\320\260\320\264\320\272\320\260"]
::msgcat::mcset cz "line overhang" [encoding convertfrom utf-8 "p\305\231evis"]
::msgcat::mcset de "line overhang" [encoding convertfrom utf-8 "\303\234berhang"]
::msgcat::mcset el "line overhang" [encoding convertfrom utf-8 "\317\200\317\201\316\277\316\255\316\272\317\204\316\261\317\203\316\267 \316\277\317\201\316\277\317\206\316\256\317\202"]
::msgcat::mcset en "line overhang" [encoding convertfrom utf-8 "overhang"]
::msgcat::mcset en_UK "line overhang" [encoding convertfrom utf-8 "overhang"]
::msgcat::mcset en_US "line overhang" [encoding convertfrom utf-8 "overhang"]
::msgcat::mcset es "line overhang" [encoding convertfrom utf-8 "extraplomo"]
::msgcat::mcset fr "line overhang" [encoding convertfrom utf-8 "surplomb"]
::msgcat::mcset it "line overhang" [encoding convertfrom utf-8 "sporgenza"]
::msgcat::mcset mi "line overhang" [encoding convertfrom utf-8 "tauwharenga"]
::msgcat::mcset pt "line overhang" [encoding convertfrom utf-8 "proje\303\247\303\243o"]
::msgcat::mcset pt_BR "line overhang" [encoding convertfrom utf-8 "proje\303\247\303\243o"]
::msgcat::mcset pt_PT "line overhang" [encoding convertfrom utf-8 "projec\303\247\303\243o"]
::msgcat::mcset ru "line overhang" [encoding convertfrom utf-8 "\320\275\320\260\320\262\320\270\321\201\320\260\320\275\320\270\320\265 \320\277\320\276\321\202\320\276\320\273\320\272\320\260"]
::msgcat::mcset sk "line overhang" [encoding convertfrom utf-8 "previs"]
::msgcat::mcset sq "line overhang" [encoding convertfrom utf-8 "varese"]
::msgcat::mcset bg "line pit" [encoding convertfrom utf-8 "\320\272\320\273\320\260\320\264\320\265\320\275\320\265\321\206"]
::msgcat::mcset cz "line pit" [encoding convertfrom utf-8 "propast"]
::msgcat::mcset de "line pit" [encoding convertfrom utf-8 "Schacht"]
::msgcat::mcset el "line pit" [encoding convertfrom utf-8 "\317\200\316\267\316\263\316\254\316\264\316\271"]
::msgcat::mcset en "line pit" [encoding convertfrom utf-8 "pitch"]
::msgcat::mcset en_UK "line pit" [encoding convertfrom utf-8 "pitch"]
::msgcat::mcset en_US "line pit" [encoding convertfrom utf-8 "pit"]
::msgcat::mcset es "line pit" [encoding convertfrom utf-8 "pozo"]
::msgcat::mcset fr "line pit" [encoding convertfrom utf-8 "puits"]
::msgcat::mcset it "line pit" [encoding convertfrom utf-8 "pozzo"]
::msgcat::mcset mi "line pit" [encoding convertfrom utf-8 "tupari"]
::msgcat::mcset pt "line pit" [encoding convertfrom utf-8 "desn\303\255vel"]
::msgcat::mcset pt_BR "line pit" [encoding convertfrom utf-8 "desn\303\255vel"]
::msgcat::mcset pt_PT "line pit" [encoding convertfrom utf-8 "desn\303\255vel"]
::msgcat::mcset ru "line pit" [encoding convertfrom utf-8 "\320\272\320\276\320\273\320\276\320\264\320\265\321\206"]
::msgcat::mcset sk "line pit" [encoding convertfrom utf-8 "priepas\305\245"]
::msgcat::mcset sq "line pit" [encoding convertfrom utf-8 "ngjitje"]
::msgcat::mcset bg "line rock-border" [encoding convertfrom utf-8 "\320\262\321\212\320\275\321\210\320\265\320\275 \321\200\321\212\320\261 \320\275\320\260 \320\272\320\260\320\274\321\212\320\272"]
::msgcat::mcset cz "line rock-border" [encoding convertfrom utf-8 "kameny"]
::msgcat::mcset de "line rock-border" [encoding convertfrom utf-8 "Umriss eines Felsens"]
::msgcat::mcset el "line rock-border" [encoding convertfrom utf-8 "\317\200\316\265\317\201\316\257\316\263\317\201\316\261\316\274\316\274\316\261 \316\262\317\201\316\254\317\207\316\277\317\205"]
::msgcat::mcset en "line rock-border" [encoding convertfrom utf-8 "rock border"]
::msgcat::mcset en_UK "line rock-border" [encoding convertfrom utf-8 "rock border"]
::msgcat::mcset en_US "line rock-border" [encoding convertfrom utf-8 "rock border"]
::msgcat::mcset es "line rock-border" [encoding convertfrom utf-8 "contorno bloque"]
::msgcat::mcset fr "line rock-border" [encoding convertfrom utf-8 "bord d\342\200\231un rocher"]
::msgcat::mcset it "line rock-border" [encoding convertfrom utf-8 "bordo masso"]
::msgcat::mcset mi "line rock-border" [encoding convertfrom utf-8 "rohe k\305\215hatu"]
::msgcat::mcset pt "line rock-border" [encoding convertfrom utf-8 "lateral da rocha"]
::msgcat::mcset pt_BR "line rock-border" [encoding convertfrom utf-8 "lateral da rocha"]
::msgcat::mcset pt_PT "line rock-border" [encoding convertfrom utf-8 "lateral da rocha"]
::msgcat::mcset ru "line rock-border" [encoding convertfrom utf-8 "\320\262\320\275\320\265\321\210\320\275\320\270\320\271 \320\272\321\200\320\276\320\274\320\272\320\260 \320\263\320\273\321\213\320\261\321\213"]
::msgcat::mcset sk "line rock-border" [encoding convertfrom utf-8 "obrys kame\305\210a"]
::msgcat::mcset sq "line rock-border" [encoding convertfrom utf-8 "kufij shkembinjsh"]
::msgcat::mcset bg "line rock-edge" [encoding convertfrom utf-8 "\320\262\321\212\321\202\321\200\320\265\321\210\320\265\320\275 \321\200\321\212\320\261 \320\275\320\260 \320\272\320\260\320\274\321\212\320\272"]
::msgcat::mcset cz "line rock-edge" [encoding convertfrom utf-8 "hrany kamen\305\257"]
::msgcat::mcset de "line rock-edge" [encoding convertfrom utf-8 "Struktur eines Felsens"]
::msgcat::mcset el "line rock-edge" [encoding convertfrom utf-8 "\316\254\316\272\317\201\316\267 \316\262\317\201\316\254\317\207\316\277\317\205"]
::msgcat::mcset en "line rock-edge" [encoding convertfrom utf-8 "rock edges"]
::msgcat::mcset en_UK "line rock-edge" [encoding convertfrom utf-8 "rock edges"]
::msgcat::mcset en_US "line rock-edge" [encoding convertfrom utf-8 "rock edges"]
::msgcat::mcset es "line rock-edge" [encoding convertfrom utf-8 "arista bloque"]
::msgcat::mcset fr "line rock-edge" [encoding convertfrom utf-8 "ar\303\252te d\342\200\231un rocher"]
::msgcat::mcset it "line rock-edge" [encoding convertfrom utf-8 "spigolo masso"]
::msgcat::mcset mi "line rock-edge" [encoding convertfrom utf-8 "mata kohatu"]
::msgcat::mcset pt "line rock-edge" [encoding convertfrom utf-8 "bordas da rocha"]
::msgcat::mcset pt_BR "line rock-edge" [encoding convertfrom utf-8 "bordas da rocha"]
::msgcat::mcset pt_PT "line rock-edge" [encoding convertfrom utf-8 "bordas da rocha"]
::msgcat::mcset ru "line rock-edge" [encoding convertfrom utf-8 "\320\262\320\275\321\203\321\202\321\200\320\265\320\275\320\275\321\217\321\217 \320\272\321\200\320\276\320\274\320\272\320\260 \320\263\320\273\321\213\320\261\321\213"]
::msgcat::mcset sk "line rock-edge" [encoding convertfrom utf-8 "hrany kame\305\210a"]
::msgcat::mcset sq "line rock-edge" [encoding convertfrom utf-8 "skaji I shkembit"]
::msgcat::mcset bg "line section" [encoding convertfrom utf-8 "\320\275\320\260\320\277\321\200\320\265\321\207\320\275\320\276 \321\201\320\265\321\207\320\265\320\275\320\270\320\265"]
::msgcat::mcset cz "line section" [encoding convertfrom utf-8 "p\305\231\303\255\304\215n\303\275 \305\231ez"]
::msgcat::mcset de "line section" [encoding convertfrom utf-8 "Schnittlinie"]
::msgcat::mcset el "line section" [encoding convertfrom utf-8 "\317\204\316\277\316\274\316\256"]
::msgcat::mcset en "line section" [encoding convertfrom utf-8 "cross-section"]
::msgcat::mcset en_UK "line section" [encoding convertfrom utf-8 "cross-section"]
::msgcat::mcset en_US "line section" [encoding convertfrom utf-8 "cross-section"]
::msgcat::mcset es "line section" [encoding convertfrom utf-8 "secci\303\263n"]
::msgcat::mcset fr "line section" [encoding convertfrom utf-8 "section"]
::msgcat::mcset it "line section" [encoding convertfrom utf-8 "sezione trasversale"]
::msgcat::mcset mi "line section" [encoding convertfrom utf-8 "taha papahanga"]
::msgcat::mcset pt "line section" [encoding convertfrom utf-8 "corte"]
::msgcat::mcset pt_BR "line section" [encoding convertfrom utf-8 "corte"]
::msgcat::mcset pt_PT "line section" [encoding convertfrom utf-8 "corte"]
::msgcat::mcset ru "line section" [encoding convertfrom utf-8 "\320\262\321\213\320\275\320\276\321\201\320\275\320\260\321\217 \320\273\320\270\320\275\320\270\321\217 \321\201\320\265\321\207\320\265\320\275\320\270\321\217"]
::msgcat::mcset sk "line section" [encoding convertfrom utf-8 "prie\304\215ny rez"]
::msgcat::mcset sq "line section" [encoding convertfrom utf-8 "kryq-ndarje"]
::msgcat::mcset bg "line slope" [encoding convertfrom utf-8 "\321\201\320\272\320\273\320\276\320\275"]
::msgcat::mcset cz "line slope" [encoding convertfrom utf-8 "svah"]
::msgcat::mcset de "line slope" [encoding convertfrom utf-8 "Hangform"]
::msgcat::mcset el "line slope" [encoding convertfrom utf-8 "\316\272\316\273\316\257\317\203\316\267"]
::msgcat::mcset en "line slope" [encoding convertfrom utf-8 "slope"]
::msgcat::mcset en_UK "line slope" [encoding convertfrom utf-8 "slope"]
::msgcat::mcset en_US "line slope" [encoding convertfrom utf-8 "slope"]
::msgcat::mcset es "line slope" [encoding convertfrom utf-8 "pendiente"]
::msgcat::mcset fr "line slope" [encoding convertfrom utf-8 "pente"]
::msgcat::mcset it "line slope" [encoding convertfrom utf-8 "scivolo"]
::msgcat::mcset mi "line slope" [encoding convertfrom utf-8 "tupari"]
::msgcat::mcset pt "line slope" [encoding convertfrom utf-8 "declive"]
::msgcat::mcset pt_BR "line slope" [encoding convertfrom utf-8 "declive"]
::msgcat::mcset pt_PT "line slope" [encoding convertfrom utf-8 "declive"]
::msgcat::mcset ru "line slope" [encoding convertfrom utf-8 "\321\201\320\272\320\273\320\276\320\275"]
::msgcat::mcset sk "line slope" [encoding convertfrom utf-8 "\305\241ikm\303\241 plocha"]
::msgcat::mcset sq "line slope" [encoding convertfrom utf-8 "breg"]
::msgcat::mcset bg "line survey" [encoding convertfrom utf-8 "\320\260\320\275\321\202\320\265\320\275\320\260"]
::msgcat::mcset cz "line survey" [encoding convertfrom utf-8 "polygonov\303\275 tah"]
::msgcat::mcset de "line survey" [encoding convertfrom utf-8 "Messzug"]
::msgcat::mcset el "line survey" [encoding convertfrom utf-8 "\316\263\317\201\316\261\316\274\316\274\316\256 \317\207\316\261\317\201\317\204\316\277\316\263\317\201\316\254\317\206\316\267\317\203\316\267\317\202"]
::msgcat::mcset en "line survey" [encoding convertfrom utf-8 "survey lines"]
::msgcat::mcset en_UK "line survey" [encoding convertfrom utf-8 "survey lines"]
::msgcat::mcset en_US "line survey" [encoding convertfrom utf-8 "survey lines"]
::msgcat::mcset es "line survey" [encoding convertfrom utf-8 "poligonal"]
::msgcat::mcset fr "line survey" [encoding convertfrom utf-8 "vis\303\251e topo"]
::msgcat::mcset it "line survey" [encoding convertfrom utf-8 "poligonale"]
::msgcat::mcset mi "line survey" [encoding convertfrom utf-8 "ruri r\304\201rangi"]
::msgcat::mcset pt "line survey" [encoding convertfrom utf-8 "linha de topografia"]
::msgcat::mcset pt_BR "line survey" [encoding convertfrom utf-8 "linha de topografia"]
::msgcat::mcset pt_PT "line survey" [encoding convertfrom utf-8 "linha de topografia"]
::msgcat::mcset ru "line survey" [encoding convertfrom utf-8 "\320\275\320\270\321\202\320\272\320\260 \321\205\320\276\320\264\320\260"]
::msgcat::mcset sk "line survey" [encoding convertfrom utf-8 "polyg\303\263nov\303\275 \305\245ah"]
::msgcat::mcset sq "line survey" [encoding convertfrom utf-8 "vijat matese-vrojtuese"]
::msgcat::mcset bg "line wall" [encoding convertfrom utf-8 "\321\201\321\202\320\265\320\275\320\260"]
::msgcat::mcset cz "line wall" [encoding convertfrom utf-8 "st\304\233na"]
::msgcat::mcset de "line wall" [encoding convertfrom utf-8 "Wand"]
::msgcat::mcset el "line wall" [encoding convertfrom utf-8 "\317\204\316\277\316\257\317\207\316\277\317\202"]
::msgcat::mcset en "line wall" [encoding convertfrom utf-8 "wall"]
::msgcat::mcset en_UK "line wall" [encoding convertfrom utf-8 "wall"]
::msgcat::mcset en_US "line wall" [encoding convertfrom utf-8 "wall"]
::msgcat::mcset es "line wall" [encoding convertfrom utf-8 "pared"]
::msgcat::mcset fr "line wall" [encoding convertfrom utf-8 "mur"]
::msgcat::mcset it "line wall" [encoding convertfrom utf-8 "parete"]
::msgcat::mcset mi "line wall" [encoding convertfrom utf-8 "tar\304\201"]
::msgcat::mcset pt "line wall" [encoding convertfrom utf-8 "parede"]
::msgcat::mcset pt_BR "line wall" [encoding convertfrom utf-8 "parede"]
::msgcat::mcset pt_PT "line wall" [encoding convertfrom utf-8 "parede"]
::msgcat::mcset ru "line wall" [encoding convertfrom utf-8 "\321\201\321\202\320\265\320\275\320\260"]
::msgcat::mcset sk "line wall" [encoding convertfrom utf-8 "stena"]
::msgcat::mcset sq "line wall" [encoding convertfrom utf-8 "muri"]
::msgcat::mcset bg "line wall:bedrock" [encoding convertfrom utf-8 "\321\201\321\202\320\265\320\275\320\260 (\320\276\321\201\320\275\320\276\320\262\320\275\320\260 \321\201\320\272\320\260\320\273\320\260)"]
::msgcat::mcset cz "line wall:bedrock" [encoding convertfrom utf-8 "st\304\233na"]
::msgcat::mcset de "line wall:bedrock" [encoding convertfrom utf-8 "Wand zum Deckgebirge"]
::msgcat::mcset el "line wall:bedrock" [encoding convertfrom utf-8 "\317\204\316\277\316\257\317\207\316\277\317\202"]
::msgcat::mcset en "line wall:bedrock" [encoding convertfrom utf-8 "wall"]
::msgcat::mcset en_UK "line wall:bedrock" [encoding convertfrom utf-8 "wall"]
::msgcat::mcset en_US "line wall:bedrock" [encoding convertfrom utf-8 "wall"]
::msgcat::mcset es "line wall:bedrock" [encoding convertfrom utf-8 "pared"]
::msgcat::mcset fr "line wall:bedrock" [encoding convertfrom utf-8 "mur"]
::msgcat::mcset it "line wall:bedrock" [encoding convertfrom utf-8 "roccia"]
::msgcat::mcset mi "line wall:bedrock" [encoding convertfrom utf-8 "tar\304\201"]
::msgcat::mcset pt "line wall:bedrock" [encoding convertfrom utf-8 "parede"]
::msgcat::mcset pt_BR "line wall:bedrock" [encoding convertfrom utf-8 "parede"]
::msgcat::mcset pt_PT "line wall:bedrock" [encoding convertfrom utf-8 "parede"]
::msgcat::mcset ru "line wall:bedrock" [encoding convertfrom utf-8 "\321\201\321\202\320\265\320\275\320\260"]
::msgcat::mcset sk "line wall:bedrock" [encoding convertfrom utf-8 "stena"]
::msgcat::mcset sq "line wall:bedrock" [encoding convertfrom utf-8 "shkembi-muri"]
::msgcat::mcset bg "line wall:blocks" [encoding convertfrom utf-8 "\321\201\321\202\320\265\320\275\320\260 - \320\261\320\273\320\276\320\272\320\260\320\266"]
::msgcat::mcset cz "line wall:blocks" [encoding convertfrom utf-8 "z\303\241val"]
::msgcat::mcset de "line wall:blocks" [encoding convertfrom utf-8 "Wand aus Versturz"]
::msgcat::mcset el "line wall:blocks" [encoding convertfrom utf-8 "\316\277\316\263\316\272\317\214\316\273\316\271\316\270\316\277\316\271"]
::msgcat::mcset en "line wall:blocks" [encoding convertfrom utf-8 "blocks, breakdown"]
::msgcat::mcset en_UK "line wall:blocks" [encoding convertfrom utf-8 "blocks, breakdown"]
::msgcat::mcset en_US "line wall:blocks" [encoding convertfrom utf-8 "blocks, breakdown"]
::msgcat::mcset es "line wall:blocks" [encoding convertfrom utf-8 "bloques"]
::msgcat::mcset fr "line wall:blocks" [encoding convertfrom utf-8 "effrondrement"]
::msgcat::mcset it "line wall:blocks" [encoding convertfrom utf-8 "massi"]
::msgcat::mcset mi "line wall:blocks" [encoding convertfrom utf-8 "pakaru"]
::msgcat::mcset pt "line wall:blocks" [encoding convertfrom utf-8 "desmoronamento"]
::msgcat::mcset pt_BR "line wall:blocks" [encoding convertfrom utf-8 "desmoronamento"]
::msgcat::mcset pt_PT "line wall:blocks" [encoding convertfrom utf-8 "desmoronamento"]
::msgcat::mcset ru "line wall:blocks" [encoding convertfrom utf-8 "\320\263\320\273\321\213\320\261\321\213"]
::msgcat::mcset sk "line wall:blocks" [encoding convertfrom utf-8 "stena tvoren\303\241 z\303\241valom"]
::msgcat::mcset sq "line wall:blocks" [encoding convertfrom utf-8 "blloqe"]
::msgcat::mcset bg "line wall:clay" [encoding convertfrom utf-8 "\320\263\320\273\320\270\320\275\320\260"]
::msgcat::mcset cz "line wall:clay" [encoding convertfrom utf-8 "bahno"]
::msgcat::mcset de "line wall:clay" [encoding convertfrom utf-8 "Wand aus Lehm"]
::msgcat::mcset el "line wall:clay" [encoding convertfrom utf-8 "\316\254\317\201\316\263\316\271\316\273\316\277\317\202"]
::msgcat::mcset en "line wall:clay" [encoding convertfrom utf-8 "clay"]
::msgcat::mcset en_UK "line wall:clay" [encoding convertfrom utf-8 "clay"]
::msgcat::mcset en_US "line wall:clay" [encoding convertfrom utf-8 "clay"]
::msgcat::mcset es "line wall:clay" [encoding convertfrom utf-8 "arcilla"]
::msgcat::mcset fr "line wall:clay" [encoding convertfrom utf-8 "argile"]
::msgcat::mcset it "line wall:clay" [encoding convertfrom utf-8 "argilla"]
::msgcat::mcset mi "line wall:clay" [encoding convertfrom utf-8 "oneuku"]
::msgcat::mcset pt "line wall:clay" [encoding convertfrom utf-8 "lama"]
::msgcat::mcset pt_BR "line wall:clay" [encoding convertfrom utf-8 "lama"]
::msgcat::mcset pt_PT "line wall:clay" [encoding convertfrom utf-8 "lama"]
::msgcat::mcset ru "line wall:clay" [encoding convertfrom utf-8 "\320\263\320\273\320\270\320\275\320\260"]
::msgcat::mcset sk "line wall:clay" [encoding convertfrom utf-8 "stena tvoren\303\241 \303\255lom"]
::msgcat::mcset sq "line wall:clay" [encoding convertfrom utf-8 "argjil"]
::msgcat::mcset bg "line wall:debris" [encoding convertfrom utf-8 "\321\207\320\260\320\272\321\212\320\273"]
::msgcat::mcset cz "line wall:debris" [encoding convertfrom utf-8 "\305\241t\304\233rk"]
::msgcat::mcset de "line wall:debris" [encoding convertfrom utf-8 "Wand aus Schutt"]
::msgcat::mcset el "line wall:debris" [encoding convertfrom utf-8 "\317\207\316\261\316\273\316\254\317\203\316\274\316\261\317\204\316\261"]
::msgcat::mcset en "line wall:debris" [encoding convertfrom utf-8 "debris"]
::msgcat::mcset en_UK "line wall:debris" [encoding convertfrom utf-8 "debris"]
::msgcat::mcset en_US "line wall:debris" [encoding convertfrom utf-8 "debris"]
::msgcat::mcset es "line wall:debris" [encoding convertfrom utf-8 "derrubios"]
::msgcat::mcset fr "line wall:debris" [encoding convertfrom utf-8 "d\303\251bris de roche"]
::msgcat::mcset it "line wall:debris" [encoding convertfrom utf-8 "detriti"]
::msgcat::mcset mi "line wall:debris" [encoding convertfrom utf-8 "otaota"]
::msgcat::mcset pt "line wall:debris" [encoding convertfrom utf-8 "escombros"]
::msgcat::mcset pt_BR "line wall:debris" [encoding convertfrom utf-8 "escombros"]
::msgcat::mcset pt_PT "line wall:debris" [encoding convertfrom utf-8 "escombros"]
::msgcat::mcset ru "line wall:debris" [encoding convertfrom utf-8 "\321\211\320\265\320\261\320\265\320\275\321\214"]
::msgcat::mcset sk "line wall:debris" [encoding convertfrom utf-8 "stena tvoren\303\241 su\305\245ou"]
::msgcat::mcset sq "line wall:debris" [encoding convertfrom utf-8 "depozitime/mbetje gurresh"]
::msgcat::mcset de "line wall:flowstone" [encoding convertfrom utf-8 "Wand aus Sinter"]
::msgcat::mcset en "line wall:flowstone" [encoding convertfrom utf-8 "flowstone wall"]
::msgcat::mcset en_UK "line wall:flowstone" [encoding convertfrom utf-8 "flowstone wall"]
::msgcat::mcset en_US "line wall:flowstone" [encoding convertfrom utf-8 "flowstone wall"]
::msgcat::mcset it "line wall:flowstone" [encoding convertfrom utf-8 "colata"]
::msgcat::mcset mi "line wall:flowstone" [encoding convertfrom utf-8 "t\304\201ra a pari k\305\215hatu"]
::msgcat::mcset sk "line wall:flowstone" [encoding convertfrom utf-8 "stena tvoren\303\241 sintrom"]
::msgcat::mcset bg "line wall:ice" [encoding convertfrom utf-8 "\320\273\320\265\320\264/\321\204\320\270\321\200\320\275"]
::msgcat::mcset cz "line wall:ice" [encoding convertfrom utf-8 "led"]
::msgcat::mcset de "line wall:ice" [encoding convertfrom utf-8 "Wand aus Eis"]
::msgcat::mcset el "line wall:ice" [encoding convertfrom utf-8 "\317\200\316\254\316\263\316\277\317\202"]
::msgcat::mcset en "line wall:ice" [encoding convertfrom utf-8 "ice"]
::msgcat::mcset en_UK "line wall:ice" [encoding convertfrom utf-8 "ice"]
::msgcat::mcset en_US "line wall:ice" [encoding convertfrom utf-8 "ice"]
::msgcat::mcset es "line wall:ice" [encoding convertfrom utf-8 "hielo"]
::msgcat::mcset fr "line wall:ice" [encoding convertfrom utf-8 "glace"]
::msgcat::mcset it "line wall:ice" [encoding convertfrom utf-8 "ghiaccio"]
::msgcat::mcset mi "line wall:ice" [encoding convertfrom utf-8 "k\305\215paka"]
::msgcat::mcset pt "line wall:ice" [encoding convertfrom utf-8 "gelo"]
::msgcat::mcset pt_BR "line wall:ice" [encoding convertfrom utf-8 "gelo"]
::msgcat::mcset pt_PT "line wall:ice" [encoding convertfrom utf-8 "gelo"]
::msgcat::mcset ru "line wall:ice" [encoding convertfrom utf-8 "\320\273\320\265\320\264, \321\204\320\270\321\200\320\275"]
::msgcat::mcset sk "line wall:ice" [encoding convertfrom utf-8 "stena tvoren\303\241 \304\276adom"]
::msgcat::mcset sq "line wall:ice" [encoding convertfrom utf-8 "akull"]
::msgcat::mcset de "line wall:moonmilk" [encoding convertfrom utf-8 "Wand aus Bergmilch"]
::msgcat::mcset en "line wall:moonmilk" [encoding convertfrom utf-8 "moonmilk wall"]
::msgcat::mcset en_UK "line wall:moonmilk" [encoding convertfrom utf-8 "moonmilk wall"]
::msgcat::mcset en_US "line wall:moonmilk" [encoding convertfrom utf-8 "moonmilk wall"]
::msgcat::mcset it "line wall:moonmilk" [encoding convertfrom utf-8 "moonmilk"]
::msgcat::mcset mi "line wall:moonmilk" [encoding convertfrom utf-8 "t\304\201ra a mirika marama"]
::msgcat::mcset sk "line wall:moonmilk" [encoding convertfrom utf-8 "stena tvoren\303\241 m\303\244kk\303\275m sintrom"]
::msgcat::mcset de "line wall:overlying" [encoding convertfrom utf-8 "\303\274berlagerter Wandverlauf"]
::msgcat::mcset en "line wall:overlying" [encoding convertfrom utf-8 "overlying wall"]
::msgcat::mcset en_UK "line wall:overlying" [encoding convertfrom utf-8 "overlying wall"]
::msgcat::mcset en_US "line wall:overlying" [encoding convertfrom utf-8 "overlying wall"]
::msgcat::mcset it "line wall:overlying" [encoding convertfrom utf-8 "parete:sovrastante"]
::msgcat::mcset mi "line wall:overlying" [encoding convertfrom utf-8 "t\304\201ra ki runga"]
::msgcat::mcset sk "line wall:overlying" [encoding convertfrom utf-8 "stena vy\305\241\305\241ej \303\272rovne"]
::msgcat::mcset bg "line wall:pebbles" [encoding convertfrom utf-8 "\320\272\320\260\320\274\321\212\321\207\320\265\321\202\320\260"]
::msgcat::mcset cz "line wall:pebbles" [encoding convertfrom utf-8 "valouny"]
::msgcat::mcset de "line wall:pebbles" [encoding convertfrom utf-8 "Wand aus Kies"]
::msgcat::mcset el "line wall:pebbles" [encoding convertfrom utf-8 "\317\207\316\261\316\273\316\257\316\272\316\271\316\261"]
::msgcat::mcset en "line wall:pebbles" [encoding convertfrom utf-8 "pebbles"]
::msgcat::mcset en_UK "line wall:pebbles" [encoding convertfrom utf-8 "pebbles"]
::msgcat::mcset en_US "line wall:pebbles" [encoding convertfrom utf-8 "pebbles"]
::msgcat::mcset es "line wall:pebbles" [encoding convertfrom utf-8 "cantos rodados"]
::msgcat::mcset fr "line wall:pebbles" [encoding convertfrom utf-8 "cailloux"]
::msgcat::mcset it "line wall:pebbles" [encoding convertfrom utf-8 "ciotoli"]
::msgcat::mcset mi "line wall:pebbles" [encoding convertfrom utf-8 "nga k\305\215hatu iti"]
::msgcat::mcset pt "line wall:pebbles" [encoding convertfrom utf-8 "seixos"]
::msgcat::mcset pt_BR "line wall:pebbles" [encoding convertfrom utf-8 "seixos"]
::msgcat::mcset pt_PT "line wall:pebbles" [encoding convertfrom utf-8 "seixos"]
::msgcat::mcset ru "line wall:pebbles" [encoding convertfrom utf-8 "\320\263\320\260\320\273\321\214\320\272\320\260"]
::msgcat::mcset sk "line wall:pebbles" [encoding convertfrom utf-8 "stena tvoren\303\241 okruhliakmi"]
::msgcat::mcset sq "line wall:pebbles" [encoding convertfrom utf-8 "gurralece"]
::msgcat::mcset de "line wall:pit" [encoding convertfrom utf-8 "Eingangsschacht"]
::msgcat::mcset en "line wall:pit" [encoding convertfrom utf-8 "entrance pit"]
::msgcat::mcset en_UK "line wall:pit" [encoding convertfrom utf-8 "entrance pit"]
::msgcat::mcset en_US "line wall:pit" [encoding convertfrom utf-8 "entrance pit"]
::msgcat::mcset it "line wall:pit" [encoding convertfrom utf-8 "parete:pozzo"]
::msgcat::mcset mi "line wall:pit" [encoding convertfrom utf-8 "rua"]
::msgcat::mcset sk "line wall:pit" [encoding convertfrom utf-8 "vstupn\303\241 priepas\305\245"]
::msgcat::mcset bg "line wall:presumed" [encoding convertfrom utf-8 "\320\277\321\200\320\265\320\264\320\277\320\276\320\273\320\260\320\263\320\260\320\265\320\274\320\260 \321\201\321\202\320\265\320\275\320\260"]
::msgcat::mcset cz "line wall:presumed" [encoding convertfrom utf-8 "p\305\231edpokl\303\241dan\303\241 st\304\233na"]
::msgcat::mcset de "line wall:presumed" [encoding convertfrom utf-8 "Wand gesch\303\244tzt"]
::msgcat::mcset el "line wall:presumed" [encoding convertfrom utf-8 "\317\204\316\277\316\257\317\207\316\277\317\202 \317\205\317\200\316\277\316\270\316\265\317\204\316\271\316\272\317\214\317\202"]
::msgcat::mcset en "line wall:presumed" [encoding convertfrom utf-8 "presumed wall"]
::msgcat::mcset en_UK "line wall:presumed" [encoding convertfrom utf-8 "presumed wall"]
::msgcat::mcset en_US "line wall:presumed" [encoding convertfrom utf-8 "presumed wall"]
::msgcat::mcset es "line wall:presumed" [encoding convertfrom utf-8 "pared supuesta"]
::msgcat::mcset fr "line wall:presumed" [encoding convertfrom utf-8 "mur suppos\303\251"]
::msgcat::mcset it "line wall:presumed" [encoding convertfrom utf-8 "parete:presunta"]
::msgcat::mcset mi "line wall:presumed" [encoding convertfrom utf-8 "t\304\201ra whakaaro"]
::msgcat::mcset pt "line wall:presumed" [encoding convertfrom utf-8 "parede presumida"]
::msgcat::mcset pt_BR "line wall:presumed" [encoding convertfrom utf-8 "parede presumida"]
::msgcat::mcset pt_PT "line wall:presumed" [encoding convertfrom utf-8 "parede presumida"]
::msgcat::mcset ru "line wall:presumed" [encoding convertfrom utf-8 "\320\277\321\200\320\265\320\264\320\277\320\276\320\273\320\276\320\263\320\260\320\265\320\274\320\260\321\217 \321\201\321\202\320\265\320\275\320\260"]
::msgcat::mcset sk "line wall:presumed" [encoding convertfrom utf-8 "predpokladan\303\241 stena"]
::msgcat::mcset sq "line wall:presumed" [encoding convertfrom utf-8 "muri I supozuar"]
::msgcat::mcset bg "line wall:sand" [encoding convertfrom utf-8 "\320\277\321\217\321\201\321\212\320\272"]
::msgcat::mcset cz "line wall:sand" [encoding convertfrom utf-8 "p\303\255sek"]
::msgcat::mcset de "line wall:sand" [encoding convertfrom utf-8 "Wand aus Sand"]
::msgcat::mcset el "line wall:sand" [encoding convertfrom utf-8 "\316\254\316\274\316\274\316\277\317\202"]
::msgcat::mcset en "line wall:sand" [encoding convertfrom utf-8 "sand"]
::msgcat::mcset en_UK "line wall:sand" [encoding convertfrom utf-8 "sand"]
::msgcat::mcset en_US "line wall:sand" [encoding convertfrom utf-8 "sand"]
::msgcat::mcset es "line wall:sand" [encoding convertfrom utf-8 "arena"]
::msgcat::mcset fr "line wall:sand" [encoding convertfrom utf-8 "sable"]
::msgcat::mcset it "line wall:sand" [encoding convertfrom utf-8 "sabbia"]
::msgcat::mcset mi "line wall:sand" [encoding convertfrom utf-8 "onep\305\253"]
::msgcat::mcset pt "line wall:sand" [encoding convertfrom utf-8 "areia"]
::msgcat::mcset pt_BR "line wall:sand" [encoding convertfrom utf-8 "areia"]
::msgcat::mcset pt_PT "line wall:sand" [encoding convertfrom utf-8 "areia"]
::msgcat::mcset ru "line wall:sand" [encoding convertfrom utf-8 "\320\277\320\265\321\201\320\276\320\272"]
::msgcat::mcset sk "line wall:sand" [encoding convertfrom utf-8 "stena tvoren\303\241 pieskom"]
::msgcat::mcset sq "line wall:sand" [encoding convertfrom utf-8 "rane"]
::msgcat::mcset bg "line wall:underlying" [encoding convertfrom utf-8 "\320\277\320\276-\320\275\320\270\321\201\320\272\320\276 \321\200\320\260\320\267\320\277\320\276\320\273\320\276\320\266\320\265\320\275\320\260 \321\201\321\202\320\265\320\275\320\260"]
::msgcat::mcset cz "line wall:underlying" [encoding convertfrom utf-8 "st\304\233na ni\305\276\305\241\303\255 \303\272rovn\304\233"]
::msgcat::mcset de "line wall:underlying" [encoding convertfrom utf-8 "Wand unterlagernder Gang"]
::msgcat::mcset el "line wall:underlying" [encoding convertfrom utf-8 "\317\205\317\200\316\277\316\272\316\265\316\257\316\274\316\265\316\275\316\277\317\202 \317\204\316\277\316\257\317\207\316\277\317\202"]
::msgcat::mcset en "line wall:underlying" [encoding convertfrom utf-8 "underlying wall"]
::msgcat::mcset en_UK "line wall:underlying" [encoding convertfrom utf-8 "underlying wall"]
::msgcat::mcset en_US "line wall:underlying" [encoding convertfrom utf-8 "underlying wall"]
::msgcat::mcset es "line wall:underlying" [encoding convertfrom utf-8 "pared subyacente"]
::msgcat::mcset fr "line wall:underlying" [encoding convertfrom utf-8 "mur sousjacent"]
::msgcat::mcset it "line wall:underlying" [encoding convertfrom utf-8 "parete:sottostante"]
::msgcat::mcset mi "line wall:underlying" [encoding convertfrom utf-8 "t\304\201ra ki raro"]
::msgcat::mcset pt "line wall:underlying" [encoding convertfrom utf-8 "parede subjacente"]
::msgcat::mcset pt_BR "line wall:underlying" [encoding convertfrom utf-8 "parede subjacente"]
::msgcat::mcset pt_PT "line wall:underlying" [encoding convertfrom utf-8 "parede subjacente"]
::msgcat::mcset ru "line wall:underlying" [encoding convertfrom utf-8 "\320\275\320\270\320\266\320\265\321\200\320\260\321\201\320\277\320\276\320\273\320\276\320\266\320\265\320\275\320\275\320\260\321\217 \321\201\321\202\320\265\320\275\320\260"]
::msgcat::mcset sk "line wall:underlying" [encoding convertfrom utf-8 "stena ni\305\276\305\241ej \303\272rovne"]
::msgcat::mcset sq "line wall:underlying" [encoding convertfrom utf-8 "muri I shtrire"]
::msgcat::mcset bg "line wall:unsurveyed" [encoding convertfrom utf-8 "\320\276\320\272\320\276\320\274\320\265\321\200\320\275\320\260 \321\201\320\272\320\270\321\206\320\260 \320\275\320\260 \321\201\321\202\320\265\320\275\320\270\321\202\320\265"]
::msgcat::mcset cz "line wall:unsurveyed" [encoding convertfrom utf-8 "nezam\304\233\305\231en\303\241 st\304\233na"]
::msgcat::mcset de "line wall:unsurveyed" [encoding convertfrom utf-8 "Wand unvermessen"]
::msgcat::mcset el "line wall:unsurveyed" [encoding convertfrom utf-8 "\317\204\316\277\316\257\317\207\316\277\317\202 (\316\274\316\267 \317\207\316\261\317\201\317\204\316\277\316\263\317\201\316\261\317\206\316\267\316\274\316\255\316\275\316\277\317\202)"]
::msgcat::mcset en "line wall:unsurveyed" [encoding convertfrom utf-8 "unsurveyed wall"]
::msgcat::mcset en_UK "line wall:unsurveyed" [encoding convertfrom utf-8 "unsurveyed wall"]
::msgcat::mcset en_US "line wall:unsurveyed" [encoding convertfrom utf-8 "unsurveyed wall"]
::msgcat::mcset es "line wall:unsurveyed" [encoding convertfrom utf-8 "pared no topografiada"]
::msgcat::mcset fr "line wall:unsurveyed" [encoding convertfrom utf-8 "mur non topographi\303\251"]
::msgcat::mcset it "line wall:unsurveyed" [encoding convertfrom utf-8 "parete:stimata"]
::msgcat::mcset mi "line wall:unsurveyed" [encoding convertfrom utf-8 "ka r\305\253ri t\304\201ra"]
::msgcat::mcset pt "line wall:unsurveyed" [encoding convertfrom utf-8 "parede n\303\243o-topografada"]
::msgcat::mcset pt_BR "line wall:unsurveyed" [encoding convertfrom utf-8 "parede n\303\243o-topografada"]
::msgcat::mcset pt_PT "line wall:unsurveyed" [encoding convertfrom utf-8 "parede n\303\243o-topografada"]
::msgcat::mcset ru "line wall:unsurveyed" [encoding convertfrom utf-8 "\320\263\320\273\320\260\320\267\320\276\320\274\320\265\321\200\320\275\320\260\321\217 \321\201\321\212\320\265\320\274\320\272\320\260 \321\201\321\202\320\265\320\275"]
::msgcat::mcset sk "line wall:unsurveyed" [encoding convertfrom utf-8 "nezameran\303\241 stena"]
::msgcat::mcset sq "line wall:unsurveyed" [encoding convertfrom utf-8 "muri I pamatur"]
::msgcat::mcset bg "line water-flow" [encoding convertfrom utf-8 "\320\262\320\276\320\264\320\275\320\276 \321\202\320\265\321\207\320\265\320\275\320\270\320\265"]
::msgcat::mcset cz "line water-flow" [encoding convertfrom utf-8 "vodn\303\255 tok"]
::msgcat::mcset de "line water-flow" [encoding convertfrom utf-8 "Gerinne"]
::msgcat::mcset el "line water-flow" [encoding convertfrom utf-8 "\317\205\316\264\317\201\316\277\317\201\317\201\316\277\316\256"]
::msgcat::mcset en "line water-flow" [encoding convertfrom utf-8 "water flow"]
::msgcat::mcset en_UK "line water-flow" [encoding convertfrom utf-8 "water flow"]
::msgcat::mcset en_US "line water-flow" [encoding convertfrom utf-8 "water flow"]
::msgcat::mcset es "line water-flow" [encoding convertfrom utf-8 "curso agua"]
::msgcat::mcset fr "line water-flow" [encoding convertfrom utf-8 "rivi\303\250re"]
::msgcat::mcset it "line water-flow" [encoding convertfrom utf-8 "corso d'acqua"]
::msgcat::mcset mi "line water-flow" [encoding convertfrom utf-8 "wairere"]
::msgcat::mcset pt "line water-flow" [encoding convertfrom utf-8 "fluxo de \303\241gua"]
::msgcat::mcset pt_BR "line water-flow" [encoding convertfrom utf-8 "fluxo de \303\241gua"]
::msgcat::mcset pt_PT "line water-flow" [encoding convertfrom utf-8 "fluxo de \303\241gua"]
::msgcat::mcset ru "line water-flow" [encoding convertfrom utf-8 "\320\262\320\276\320\264\320\276\321\202\320\276\320\272"]
::msgcat::mcset sk "line water-flow" [encoding convertfrom utf-8 "vodn\303\275 tok"]
::msgcat::mcset sq "line water-flow" [encoding convertfrom utf-8 "rrjedhe uji"]
::msgcat::mcset bg "line water-flow:conjectural" [encoding convertfrom utf-8 "\320\277\321\200\320\265\320\264\320\277\320\276\320\273\320\260\320\263\320\260\320\265\320\274\320\276 \320\262\320\276\320\264\320\275\320\276 \321\202\320\265\321\207\320\265\320\275\320\270\320\265"]
::msgcat::mcset cz "line water-flow:conjectural" [encoding convertfrom utf-8 "p\305\231edpokl\303\241dan\303\275 vodn\303\255 tok"]
::msgcat::mcset de "line water-flow:conjectural" [encoding convertfrom utf-8 "vermutetes Gerinne"]
::msgcat::mcset el "line water-flow:conjectural" [encoding convertfrom utf-8 "\317\205\317\200\316\277\317\204\316\271\316\270\316\255\316\274\316\265\316\275\316\267 \317\205\316\264\317\201\316\277\317\201\317\201\316\277\316\256"]
::msgcat::mcset en "line water-flow:conjectural" [encoding convertfrom utf-8 "conjectural water flow"]
::msgcat::mcset en_UK "line water-flow:conjectural" [encoding convertfrom utf-8 "conjectural water flow"]
::msgcat::mcset en_US "line water-flow:conjectural" [encoding convertfrom utf-8 "conjectural water flow"]
::msgcat::mcset es "line water-flow:conjectural" [encoding convertfrom utf-8 "curso agua supuesto"]
::msgcat::mcset fr "line water-flow:conjectural" [encoding convertfrom utf-8 "rivi\303\250re, conjoncturelle"]
::msgcat::mcset it "line water-flow:conjectural" [encoding convertfrom utf-8 "corso d'acqua presunto"]
::msgcat::mcset mi "line water-flow:conjectural" [encoding convertfrom utf-8 "wairere a p\304\201tai"]
::msgcat::mcset pt "line water-flow:conjectural" [encoding convertfrom utf-8 "fluxo de \303\241gua suposto"]
::msgcat::mcset pt_BR "line water-flow:conjectural" [encoding convertfrom utf-8 "fluxo de \303\241gua suposto"]
::msgcat::mcset pt_PT "line water-flow:conjectural" [encoding convertfrom utf-8 "fluxo de \303\241gua suposto"]
::msgcat::mcset ru "line water-flow:conjectural" [encoding convertfrom utf-8 "\320\277\321\200\320\265\320\264\320\277\320\276\320\273\320\260\320\263\320\260\320\265\320\274\321\213\320\271 \320\262\320\276\320\264\320\276\321\202\320\276\320\272"]
::msgcat::mcset sk "line water-flow:conjectural" [encoding convertfrom utf-8 "predpokladan\303\275 vodn\303\275 tok"]
::msgcat::mcset sq "line water-flow:conjectural" [encoding convertfrom utf-8 "rrjedhe uji e supozuar"]
::msgcat::mcset bg "line water-flow:intermittent" [encoding convertfrom utf-8 "\320\277\320\265\321\200\320\270\320\276\320\264\320\270\321\207\320\275\320\276 \320\262\320\276\320\264\320\275\320\276 \321\202\320\265\321\207\320\265\320\275\320\270\320\265"]
::msgcat::mcset cz "line water-flow:intermittent" [encoding convertfrom utf-8 "ob\304\215asn\303\275 vodn\303\255 tok"]
::msgcat::mcset de "line water-flow:intermittent" [encoding convertfrom utf-8 "zeitweises Gerinne"]
::msgcat::mcset el "line water-flow:intermittent" [encoding convertfrom utf-8 "\316\264\316\271\316\261\316\272\316\277\317\200\317\204\317\214\316\274\316\265\316\275\316\267 \317\205\316\264\317\201\316\277\317\201\317\201\316\277\316\256"]
::msgcat::mcset en "line water-flow:intermittent" [encoding convertfrom utf-8 "intermittent water flow"]
::msgcat::mcset en_UK "line water-flow:intermittent" [encoding convertfrom utf-8 "intermittent water flow"]
::msgcat::mcset en_US "line water-flow:intermittent" [encoding convertfrom utf-8 "intermittent water flow"]
::msgcat::mcset es "line water-flow:intermittent" [encoding convertfrom utf-8 "curso agua intermitente"]
::msgcat::mcset fr "line water-flow:intermittent" [encoding convertfrom utf-8 "rivi\303\250re, intermittente"]
::msgcat::mcset it "line water-flow:intermittent" [encoding convertfrom utf-8 "corso d'acqua temporaneo"]
::msgcat::mcset mi "line water-flow:intermittent" [encoding convertfrom utf-8 "wairere taumutumutu"]
::msgcat::mcset pt "line water-flow:intermittent" [encoding convertfrom utf-8 "fluxo de \303\241gua intermitente"]
::msgcat::mcset pt_BR "line water-flow:intermittent" [encoding convertfrom utf-8 "fluxo de \303\241gua intermitente"]
::msgcat::mcset pt_PT "line water-flow:intermittent" [encoding convertfrom utf-8 "fluxo de \303\241gua intermitente"]
::msgcat::mcset ru "line water-flow:intermittent" [encoding convertfrom utf-8 "\320\275\320\265\320\277\320\276\321\201\321\202\320\276\321\217\320\275\320\275\321\213\320\271 \320\262\320\276\320\264\320\276\321\202\320\276\320\272"]
::msgcat::mcset sk "line water-flow:intermittent" [encoding convertfrom utf-8 "ob\304\215asn\303\275 vodn\303\275 tok"]
::msgcat::mcset sq "line water-flow:intermittent" [encoding convertfrom utf-8 "rrjedhe uji me force"]
::msgcat::mcset bg "line water-flow:permanent" [encoding convertfrom utf-8 "\320\277\320\276\321\201\321\202\320\276\321\217\320\275\320\275\320\276 \320\262\320\276\320\264\320\275\320\276 \321\202\320\265\321\207\320\265\320\275\320\270\320\265"]
::msgcat::mcset cz "line water-flow:permanent" [encoding convertfrom utf-8 "vodn\303\255 tok"]
::msgcat::mcset de "line water-flow:permanent" [encoding convertfrom utf-8 "st\303\244ndiges Gerinne"]
::msgcat::mcset el "line water-flow:permanent" [encoding convertfrom utf-8 "\316\274\317\214\316\275\316\271\316\274\316\267 \317\205\316\264\317\201\316\277\317\201\317\201\316\277\316\256"]
::msgcat::mcset en "line water-flow:permanent" [encoding convertfrom utf-8 "water flow"]
::msgcat::mcset en_UK "line water-flow:permanent" [encoding convertfrom utf-8 "water flow"]
::msgcat::mcset en_US "line water-flow:permanent" [encoding convertfrom utf-8 "water flow"]
::msgcat::mcset es "line water-flow:permanent" [encoding convertfrom utf-8 "curso agua"]
::msgcat::mcset fr "line water-flow:permanent" [encoding convertfrom utf-8 "rivi\303\250re, permanente"]
::msgcat::mcset it "line water-flow:permanent" [encoding convertfrom utf-8 "corso d'acqua permanente"]
::msgcat::mcset mi "line water-flow:permanent" [encoding convertfrom utf-8 "wairere"]
::msgcat::mcset pt "line water-flow:permanent" [encoding convertfrom utf-8 "fluxo de \303\241gua permanente"]
::msgcat::mcset pt_BR "line water-flow:permanent" [encoding convertfrom utf-8 "fluxo de \303\241gua permanente"]
::msgcat::mcset pt_PT "line water-flow:permanent" [encoding convertfrom utf-8 "fluxo de \303\241gua permanente"]
::msgcat::mcset ru "line water-flow:permanent" [encoding convertfrom utf-8 "\320\277\320\276\321\201\321\202\320\276\321\217\320\275\320\275\321\213\320\271 \320\262\320\276\320\264\320\276\321\202\320\276\320\272"]
::msgcat::mcset sk "line water-flow:permanent" [encoding convertfrom utf-8 "vodn\303\275 tok"]
::msgcat::mcset sq "line water-flow:permanent" [encoding convertfrom utf-8 "rrjedhe uji e perhershme"]
::msgcat::mcset bg "point air-draught" [encoding convertfrom utf-8 "\320\262\321\212\320\267\320\264\321\203\321\210\320\275\320\276 \321\202\320\265\321\207\320\265\320\275\320\270\320\265"]
::msgcat::mcset cz "point air-draught" [encoding convertfrom utf-8 "pr\305\257van"]
::msgcat::mcset de "point air-draught" [encoding convertfrom utf-8 "Luftzug"]
::msgcat::mcset el "point air-draught" [encoding convertfrom utf-8 "\317\201\316\277\316\256 \316\261\316\255\317\201\316\261"]
::msgcat::mcset en "point air-draught" [encoding convertfrom utf-8 "air draught"]
::msgcat::mcset en_UK "point air-draught" [encoding convertfrom utf-8 "air draught"]
::msgcat::mcset en_US "point air-draught" [encoding convertfrom utf-8 "air draught"]
::msgcat::mcset es "point air-draught" [encoding convertfrom utf-8 "corriente aire"]
::msgcat::mcset fr "point air-draught" [encoding convertfrom utf-8 "courant d\342\200\231air"]
::msgcat::mcset it "point air-draught" [encoding convertfrom utf-8 "corrente d'aria"]
::msgcat::mcset mi "point air-draught" [encoding convertfrom utf-8 "tawhiri"]
::msgcat::mcset pt "point air-draught" [encoding convertfrom utf-8 "presen\303\247a de vento"]
::msgcat::mcset pt_BR "point air-draught" [encoding convertfrom utf-8 "presen\303\247a de vento"]
::msgcat::mcset pt_PT "point air-draught" [encoding convertfrom utf-8 "presen\303\247a de vento"]
::msgcat::mcset ru "point air-draught" [encoding convertfrom utf-8 "\321\202\320\276\320\272 \320\262\320\276\320\267\320\264\321\203\321\205\320\260"]
::msgcat::mcset sk "point air-draught" [encoding convertfrom utf-8 "prievan"]
::msgcat::mcset sq "point air-draught" [encoding convertfrom utf-8 "rrymim i ajrit"]
::msgcat::mcset bg "point air-draught:summer" [encoding convertfrom utf-8 "\320\273\320\265\321\202\320\265\320\275 \320\262\321\212\320\267\320\264\321\203\321\210\320\275\320\276 \321\202\320\265\321\207\320\265\320\275\320\270\320\265"]
::msgcat::mcset cz "point air-draught:summer" [encoding convertfrom utf-8 "letn\303\255 pr\305\257van"]
::msgcat::mcset de "point air-draught:summer" [encoding convertfrom utf-8 "Luftzug im Sommer"]
::msgcat::mcset el "point air-draught:summer" [encoding convertfrom utf-8 "\316\270\316\265\317\201\316\271\316\275\316\256 \317\201\316\277\316\256 \316\261\316\255\317\201\316\261"]
::msgcat::mcset en "point air-draught:summer" [encoding convertfrom utf-8 "summer air draught"]
::msgcat::mcset en_UK "point air-draught:summer" [encoding convertfrom utf-8 "summer air draught"]
::msgcat::mcset en_US "point air-draught:summer" [encoding convertfrom utf-8 "summer air draught"]
::msgcat::mcset fr "point air-draught:summer" [encoding convertfrom utf-8 "courant d\342\200\231air d\342\200\231\303\251t\303\251"]
::msgcat::mcset it "point air-draught:summer" [encoding convertfrom utf-8 "circolazione estiva"]
::msgcat::mcset mi "point air-draught:summer" [encoding convertfrom utf-8 "tawhiri a raumati"]
::msgcat::mcset ru "point air-draught:summer" [encoding convertfrom utf-8 "\321\202\320\276\320\272 \320\262\320\276\320\267\320\264\321\203\321\205\320\260 \320\273\320\265\321\202\320\275\320\270\320\271"]
::msgcat::mcset sk "point air-draught:summer" [encoding convertfrom utf-8 "letn\303\275 prievan"]
::msgcat::mcset sq "point air-draught:summer" [encoding convertfrom utf-8 "rrymim ajri-veror"]
::msgcat::mcset bg "point air-draught:winter" [encoding convertfrom utf-8 "\320\267\320\270\320\274\320\265\320\275 \320\262\321\212\320\267\320\264\321\203\321\210\320\275\320\276 \321\202\320\265\321\207\320\265\320\275\320\270\320\265"]
::msgcat::mcset cz "point air-draught:winter" [encoding convertfrom utf-8 "zimn\303\255 pr\305\257van"]
::msgcat::mcset de "point air-draught:winter" [encoding convertfrom utf-8 "Luftzug im Winter"]
::msgcat::mcset el "point air-draught:winter" [encoding convertfrom utf-8 "\317\207\316\265\316\271\316\274\316\265\317\201\316\271\316\275\316\256 \317\201\316\277\316\256 \316\261\316\255\317\201\316\261"]
::msgcat::mcset en "point air-draught:winter" [encoding convertfrom utf-8 "winter air draught"]
::msgcat::mcset en_UK "point air-draught:winter" [encoding convertfrom utf-8 "winter air draught"]
::msgcat::mcset en_US "point air-draught:winter" [encoding convertfrom utf-8 "winter air draught"]
::msgcat::mcset fr "point air-draught:winter" [encoding convertfrom utf-8 "courant d\342\200\231air d\342\200\231hiver"]
::msgcat::mcset it "point air-draught:winter" [encoding convertfrom utf-8 "circolazione invernale"]
::msgcat::mcset mi "point air-draught:winter" [encoding convertfrom utf-8 "tawhiri a takurua"]
::msgcat::mcset ru "point air-draught:winter" [encoding convertfrom utf-8 "\321\202\320\276\320\272 \320\262\320\276\320\267\320\264\321\203\321\205\320\260 \320\267\320\270\320\274\320\275\320\270\320\271"]
::msgcat::mcset sk "point air-draught:winter" [encoding convertfrom utf-8 "zimn\303\275 prievan"]
::msgcat::mcset sq "point air-draught:winter" [encoding convertfrom utf-8 "rrymim ajri-dimeror"]
::msgcat::mcset bg "point altitude" [encoding convertfrom utf-8 "\320\275.\320\274. \320\262\320\270\321\201\320\276\321\207\320\270\320\275\320\260"]
::msgcat::mcset cz "point altitude" [encoding convertfrom utf-8 "nadmo\305\231sk\303\241 v\303\275\305\241ka bodu v chodb\304\233"]
::msgcat::mcset de "point altitude" [encoding convertfrom utf-8 "H\303\266he \303\274ber Koordinatenursprung"]
::msgcat::mcset el "point altitude" [encoding convertfrom utf-8 "\317\215\317\210\316\277\317\202"]
::msgcat::mcset en "point altitude" [encoding convertfrom utf-8 "altitude"]
::msgcat::mcset en_UK "point altitude" [encoding convertfrom utf-8 "altitude"]
::msgcat::mcset en_US "point altitude" [encoding convertfrom utf-8 "altitude"]
::msgcat::mcset es "point altitude" [encoding convertfrom utf-8 "altura"]
::msgcat::mcset fr "point altitude" [encoding convertfrom utf-8 "altitude"]
::msgcat::mcset it "point altitude" [encoding convertfrom utf-8 "quota"]
::msgcat::mcset mi "point altitude" [encoding convertfrom utf-8 "teitei, tiketike"]
::msgcat::mcset pt "point altitude" [encoding convertfrom utf-8 "altura"]
::msgcat::mcset pt_BR "point altitude" [encoding convertfrom utf-8 "altura"]
::msgcat::mcset pt_PT "point altitude" [encoding convertfrom utf-8 "altura"]
::msgcat::mcset ru "point altitude" [encoding convertfrom utf-8 "\320\262\321\213\321\201\320\276\321\202\320\275\320\260\321\217 \320\276\321\202\320\274\320\265\321\202\320\272\320\260"]
::msgcat::mcset sk "point altitude" [encoding convertfrom utf-8 "nadmorsk\303\241 v\303\275\305\241ka bodu v chodbe"]
::msgcat::mcset sq "point altitude" [encoding convertfrom utf-8 "lartesia mbidetare"]
::msgcat::mcset bg "point anastomosis" [encoding convertfrom utf-8 "\320\260\320\275\320\260\321\201\321\202\320\276\320\274\320\276\320\267\320\260"]
::msgcat::mcset cz "point anastomosis" [encoding convertfrom utf-8 "anastom\303\263za"]
::msgcat::mcset de "point anastomosis" [encoding convertfrom utf-8 "Anastomose"]
::msgcat::mcset el "point anastomosis" [encoding convertfrom utf-8 "\316\261\316\275\316\261\317\203\317\204\317\214\316\274\317\211\317\203\316\267"]
::msgcat::mcset en "point anastomosis" [encoding convertfrom utf-8 "anastomosis"]
::msgcat::mcset en_UK "point anastomosis" [encoding convertfrom utf-8 "anastomosis"]
::msgcat::mcset en_US "point anastomosis" [encoding convertfrom utf-8 "anastomosis"]
::msgcat::mcset es "point anastomosis" [encoding convertfrom utf-8 "anastomosis"]
::msgcat::mcset fr "point anastomosis" [encoding convertfrom utf-8 "anastomose"]
::msgcat::mcset it "point anastomosis" [encoding convertfrom utf-8 "anastomosi"]
::msgcat::mcset mi "point anastomosis" [encoding convertfrom utf-8 "peka hono"]
::msgcat::mcset pt "point anastomosis" [encoding convertfrom utf-8 "anastomose"]
::msgcat::mcset pt_BR "point anastomosis" [encoding convertfrom utf-8 "anastomose"]
::msgcat::mcset pt_PT "point anastomosis" [encoding convertfrom utf-8 "anastomose"]
::msgcat::mcset ru "point anastomosis" [encoding convertfrom utf-8 "\320\260\320\275\320\260\321\201\321\202\320\276\320\274\320\276\320\267\320\270\321\201"]
::msgcat::mcset sk "point anastomosis" [encoding convertfrom utf-8 "anastom\303\263za"]
::msgcat::mcset sq "point anastomosis" [encoding convertfrom utf-8 "anastomosa(kuartz)"]
::msgcat::mcset bg "point anchor" [encoding convertfrom utf-8 "\320\267\320\260\320\272\321\200\320\265\320\277\320\262\320\260\320\275\320\265"]
::msgcat::mcset cz "point anchor" [encoding convertfrom utf-8 "kotven\303\255"]
::msgcat::mcset de "point anchor" [encoding convertfrom utf-8 "Seilbefestigung"]
::msgcat::mcset el "point anchor" [encoding convertfrom utf-8 "\316\261\316\263\316\272\317\215\317\201\317\211\317\203\316\267"]
::msgcat::mcset en "point anchor" [encoding convertfrom utf-8 "anchor"]
::msgcat::mcset en_UK "point anchor" [encoding convertfrom utf-8 "anchor"]
::msgcat::mcset en_US "point anchor" [encoding convertfrom utf-8 "anchor"]
::msgcat::mcset es "point anchor" [encoding convertfrom utf-8 "anclaje"]
::msgcat::mcset fr "point anchor" [encoding convertfrom utf-8 "ancrage"]
::msgcat::mcset it "point anchor" [encoding convertfrom utf-8 "ancoraggio"]
::msgcat::mcset mi "point anchor" [encoding convertfrom utf-8 "punga"]
::msgcat::mcset pt "point anchor" [encoding convertfrom utf-8 "ancoragem"]
::msgcat::mcset pt_BR "point anchor" [encoding convertfrom utf-8 "ancoragem"]
::msgcat::mcset pt_PT "point anchor" [encoding convertfrom utf-8 "ancoragem"]
::msgcat::mcset ru "point anchor" [encoding convertfrom utf-8 "\320\230\320\242\320\236"]
::msgcat::mcset sk "point anchor" [encoding convertfrom utf-8 "kotvenie"]
::msgcat::mcset sq "point anchor" [encoding convertfrom utf-8 "pike-sigurimi"]
::msgcat::mcset bg "point aragonite" [encoding convertfrom utf-8 "\320\260\321\200\320\260\320\263\320\276\320\275\320\270\321\202"]
::msgcat::mcset cz "point aragonite" [encoding convertfrom utf-8 "aragonit"]
::msgcat::mcset de "point aragonite" [encoding convertfrom utf-8 "Aragonit"]
::msgcat::mcset el "point aragonite" [encoding convertfrom utf-8 "\316\261\317\201\316\261\316\263\316\277\316\275\316\257\317\204\316\267\317\202"]
::msgcat::mcset en "point aragonite" [encoding convertfrom utf-8 "aragonite"]
::msgcat::mcset en_UK "point aragonite" [encoding convertfrom utf-8 "aragonite"]
::msgcat::mcset en_US "point aragonite" [encoding convertfrom utf-8 "aragonite"]
::msgcat::mcset es "point aragonite" [encoding convertfrom utf-8 "aragonito"]
::msgcat::mcset fr "point aragonite" [encoding convertfrom utf-8 "aragonite"]
::msgcat::mcset it "point aragonite" [encoding convertfrom utf-8 "aragonite"]
::msgcat::mcset mi "point aragonite" [encoding convertfrom utf-8 "p\304\201keho tuarua"]
::msgcat::mcset pt "point aragonite" [encoding convertfrom utf-8 "aragonita"]
::msgcat::mcset pt_BR "point aragonite" [encoding convertfrom utf-8 "aragonita"]
::msgcat::mcset pt_PT "point aragonite" [encoding convertfrom utf-8 "aragonite"]
::msgcat::mcset ru "point aragonite" [encoding convertfrom utf-8 "\320\260\321\200\320\260\320\263\320\276\320\275\320\270\321\202"]
::msgcat::mcset sk "point aragonite" [encoding convertfrom utf-8 "aragonit"]
::msgcat::mcset sq "point aragonite" [encoding convertfrom utf-8 "aragonite"]
::msgcat::mcset bg "point archeo-material" [encoding convertfrom utf-8 "\320\260\321\200\321\205\320\265\320\276\320\273\320\276\320\263\320\270\321\207\320\265\321\201\320\272\320\260 \320\275\320\260\321\205\320\276\320\264\320\272\320\260"]
::msgcat::mcset cz "point archeo-material" [encoding convertfrom utf-8 "archeologick\303\251 n\303\241lezy"]
::msgcat::mcset de "point archeo-material" [encoding convertfrom utf-8 "arch\303\244ologischer Fund"]
::msgcat::mcset el "point archeo-material" [encoding convertfrom utf-8 "\316\261\317\201\317\207\316\261\316\271\316\277\316\273\316\277\316\263\316\271\316\272\317\214 \316\265\317\215\317\201\316\267\316\274\316\261"]
::msgcat::mcset en "point archeo-material" [encoding convertfrom utf-8 "archaeological material"]
::msgcat::mcset en_UK "point archeo-material" [encoding convertfrom utf-8 "archaeological material"]
::msgcat::mcset en_US "point archeo-material" [encoding convertfrom utf-8 "archaeological material"]
::msgcat::mcset es "point archeo-material" [encoding convertfrom utf-8 "yacimiento (arq)"]
::msgcat::mcset fr "point archeo-material" [encoding convertfrom utf-8 "mat\303\251riel arch\303\251o"]
::msgcat::mcset it "point archeo-material" [encoding convertfrom utf-8 "materiale archeologico"]
::msgcat::mcset mi "point archeo-material" [encoding convertfrom utf-8 "taonga o nehe"]
::msgcat::mcset pt "point archeo-material" [encoding convertfrom utf-8 "material arqueol\303\263gico"]
::msgcat::mcset pt_BR "point archeo-material" [encoding convertfrom utf-8 "material arqueol\303\263gico"]
::msgcat::mcset pt_PT "point archeo-material" [encoding convertfrom utf-8 "material arqueol\303\263gico"]
::msgcat::mcset ru "point archeo-material" [encoding convertfrom utf-8 "\320\260\321\200\321\205\320\265\320\276\320\273\320\276\320\263\320\270\321\207\320\265\321\201\320\272\320\260\321\217 \320\275\320\260\321\205\320\276\320\264\320\272\320\260"]
::msgcat::mcset sk "point archeo-material" [encoding convertfrom utf-8 "archeologick\303\251 n\303\241lezy"]
::msgcat::mcset sq "point archeo-material" [encoding convertfrom utf-8 "material arkeologjik"]
::msgcat::mcset bg "point bedrock" [encoding convertfrom utf-8 "\320\276\321\201\320\275\320\276\320\262\320\275\320\260 \321\201\320\272\320\260\320\273\320\260"]
::msgcat::mcset cz "point bedrock" [encoding convertfrom utf-8 "pevn\303\241 sk\303\241la"]
::msgcat::mcset de "point bedrock" [encoding convertfrom utf-8 "Deckgebirge"]
::msgcat::mcset el "point bedrock" [encoding convertfrom utf-8 "\317\200\316\255\317\204\317\201\317\211\316\274\316\261"]
::msgcat::mcset en "point bedrock" [encoding convertfrom utf-8 "bedrock"]
::msgcat::mcset en_UK "point bedrock" [encoding convertfrom utf-8 "bedrock"]
::msgcat::mcset en_US "point bedrock" [encoding convertfrom utf-8 "bedrock"]
::msgcat::mcset es "point bedrock" [encoding convertfrom utf-8 "roca madre"]
::msgcat::mcset fr "point bedrock" [encoding convertfrom utf-8 "roche"]
::msgcat::mcset it "point bedrock" [encoding convertfrom utf-8 "roccia"]
::msgcat::mcset mi "point bedrock" [encoding convertfrom utf-8 "koiwi a papa"]
::msgcat::mcset pt "point bedrock" [encoding convertfrom utf-8 "rocha encaixante"]
::msgcat::mcset pt_BR "point bedrock" [encoding convertfrom utf-8 "rocha encaixante"]
::msgcat::mcset pt_PT "point bedrock" [encoding convertfrom utf-8 "rocha encaixante"]
::msgcat::mcset ru "point bedrock" [encoding convertfrom utf-8 "\320\272\320\276\321\200\320\265\320\275\320\275\320\260\321\217 \320\277\320\276\321\200\320\276\320\264\320\260"]
::msgcat::mcset sk "point bedrock" [encoding convertfrom utf-8 "pevn\303\241 skala"]
::msgcat::mcset sq "point bedrock" [encoding convertfrom utf-8 "shtrat shkembi"]
::msgcat::mcset bg "point blocks" [encoding convertfrom utf-8 "\320\272\320\260\320\274\321\212\320\275\320\270, \320\261\320\273\320\276\320\272\320\260\320\266"]
::msgcat::mcset cz "point blocks" [encoding convertfrom utf-8 "kamenn\303\251 bloky"]
::msgcat::mcset de "point blocks" [encoding convertfrom utf-8 "Bl\303\266cke"]
::msgcat::mcset el "point blocks" [encoding convertfrom utf-8 "\316\277\316\263\316\272\317\214\316\273\316\271\316\270\316\277\316\271"]
::msgcat::mcset en "point blocks" [encoding convertfrom utf-8 "blocks, breakdown"]
::msgcat::mcset en_UK "point blocks" [encoding convertfrom utf-8 "blocks, breakdown"]
::msgcat::mcset en_US "point blocks" [encoding convertfrom utf-8 "blocks, breakdown"]
::msgcat::mcset es "point blocks" [encoding convertfrom utf-8 "bloques"]
::msgcat::mcset fr "point blocks" [encoding convertfrom utf-8 "blocs"]
::msgcat::mcset it "point blocks" [encoding convertfrom utf-8 "massi"]
::msgcat::mcset mi "point blocks" [encoding convertfrom utf-8 "pakaru"]
::msgcat::mcset pt "point blocks" [encoding convertfrom utf-8 "blocos, desmoronamento"]
::msgcat::mcset pt_BR "point blocks" [encoding convertfrom utf-8 "blocos, desmoronamento"]
::msgcat::mcset pt_PT "point blocks" [encoding convertfrom utf-8 "blocos, desmoronamento"]
::msgcat::mcset ru "point blocks" [encoding convertfrom utf-8 "\320\263\320\273\321\213\320\261\321\213, \320\267\320\260\320\262\320\260\320\273"]
::msgcat::mcset sk "point blocks" [encoding convertfrom utf-8 "kamenn\303\251 bloky"]
::msgcat::mcset sq "point blocks" [encoding convertfrom utf-8 "blloqe, shembje"]
::msgcat::mcset bg "point breakdown-choke" [encoding convertfrom utf-8 "\320\267\320\260\321\202\320\262\320\276\321\200\320\265\320\275\320\276 \320\276\321\202 \321\201\321\200\321\203\321\202\320\270\321\211\320\265"]
::msgcat::mcset cz "point breakdown-choke" [encoding convertfrom utf-8 "zavalen\303\275 konec"]
::msgcat::mcset de "point breakdown-choke" [encoding convertfrom utf-8 "Fortsetzung verst\303\274rzt"]
::msgcat::mcset el "point breakdown-choke" [encoding convertfrom utf-8 "\316\272\316\273\316\265\316\257\317\203\316\271\316\274\316\277 \317\203\317\204\316\277\316\254\317\202 \316\273\317\214\316\263\316\277 \317\207\316\261\316\273\316\254\317\203\316\274\316\261\317\204\316\277\317\202"]
::msgcat::mcset en "point breakdown-choke" [encoding convertfrom utf-8 "breakdown choke"]
::msgcat::mcset en_UK "point breakdown-choke" [encoding convertfrom utf-8 "breakdown choke"]
::msgcat::mcset en_US "point breakdown-choke" [encoding convertfrom utf-8 "breakdown choke"]
::msgcat::mcset es "point breakdown-choke" [encoding convertfrom utf-8 "colmatado por derrumbe"]
::msgcat::mcset fr "point breakdown-choke" [encoding convertfrom utf-8 "tr\303\251mie"]
::msgcat::mcset it "point breakdown-choke" [encoding convertfrom utf-8 "chiude su frana"]
::msgcat::mcset mi "point breakdown-choke" [encoding convertfrom utf-8 "nati Pakaru"]
::msgcat::mcset pt "point breakdown-choke" [encoding convertfrom utf-8 "obstru\303\247\303\243o por desmoronamento"]
::msgcat::mcset pt_BR "point breakdown-choke" [encoding convertfrom utf-8 "obstru\303\247\303\243o por desmoronamento"]
::msgcat::mcset pt_PT "point breakdown-choke" [encoding convertfrom utf-8 "obstru\303\247\303\243o por desmoronamento"]
::msgcat::mcset ru "point breakdown-choke" [encoding convertfrom utf-8 "\320\261\320\273\320\276\320\272\320\270\321\200\320\276\320\262\320\260\320\275\320\276 \320\276\320\261\320\262\320\260\320\273\320\276\320\274"]
::msgcat::mcset sk "point breakdown-choke" [encoding convertfrom utf-8 "zavalen\303\275 koniec"]
::msgcat::mcset sq "point breakdown-choke" [encoding convertfrom utf-8 "gurre rrjedhes-fund"]
::msgcat::mcset bg "point bridge" [encoding convertfrom utf-8 "\320\274\320\276\321\201\321\202"]
::msgcat::mcset cz "point bridge" [encoding convertfrom utf-8 "most"]
::msgcat::mcset de "point bridge" [encoding convertfrom utf-8 "Br\303\274cke"]
::msgcat::mcset el "point bridge" [encoding convertfrom utf-8 "\316\263\316\255\317\206\317\205\317\201\316\261"]
::msgcat::mcset en "point bridge" [encoding convertfrom utf-8 "bridge"]
::msgcat::mcset en_UK "point bridge" [encoding convertfrom utf-8 "bridge"]
::msgcat::mcset en_US "point bridge" [encoding convertfrom utf-8 "bridge"]
::msgcat::mcset es "point bridge" [encoding convertfrom utf-8 "puente roca"]
::msgcat::mcset fr "point bridge" [encoding convertfrom utf-8 "pont"]
::msgcat::mcset it "point bridge" [encoding convertfrom utf-8 "ponte di roccia"]
::msgcat::mcset mi "point bridge" [encoding convertfrom utf-8 "piriti"]
::msgcat::mcset pt "point bridge" [encoding convertfrom utf-8 "ponte"]
::msgcat::mcset pt_BR "point bridge" [encoding convertfrom utf-8 "ponte"]
::msgcat::mcset pt_PT "point bridge" [encoding convertfrom utf-8 "ponte"]
::msgcat::mcset ru "point bridge" [encoding convertfrom utf-8 "\320\274\320\276\321\201\321\202"]
::msgcat::mcset sk "point bridge" [encoding convertfrom utf-8 "most"]
::msgcat::mcset sq "point bridge" [encoding convertfrom utf-8 "ure"]
::msgcat::mcset bg "point camp" [encoding convertfrom utf-8 "\320\273\320\260\320\263\320\265\321\200"]
::msgcat::mcset cz "point camp" [encoding convertfrom utf-8 "bivak"]
::msgcat::mcset de "point camp" [encoding convertfrom utf-8 "Biwak"]
::msgcat::mcset el "point camp" [encoding convertfrom utf-8 "\316\272\316\261\317\204\316\261\317\203\316\272\316\256\316\275\317\211\317\203\316\267"]
::msgcat::mcset en "point camp" [encoding convertfrom utf-8 "camp"]
::msgcat::mcset en_UK "point camp" [encoding convertfrom utf-8 "camp"]
::msgcat::mcset en_US "point camp" [encoding convertfrom utf-8 "camp"]
::msgcat::mcset es "point camp" [encoding convertfrom utf-8 "campamento"]
::msgcat::mcset fr "point camp" [encoding convertfrom utf-8 "camp"]
::msgcat::mcset it "point camp" [encoding convertfrom utf-8 "campo"]
::msgcat::mcset mi "point camp" [encoding convertfrom utf-8 "topuni"]
::msgcat::mcset pt "point camp" [encoding convertfrom utf-8 "acampamento"]
::msgcat::mcset pt_BR "point camp" [encoding convertfrom utf-8 "acampamento"]
::msgcat::mcset pt_PT "point camp" [encoding convertfrom utf-8 "acampamento"]
::msgcat::mcset ru "point camp" [encoding convertfrom utf-8 "\320\237\320\221\320\233"]
::msgcat::mcset sk "point camp" [encoding convertfrom utf-8 "bivak"]
::msgcat::mcset sq "point camp" [encoding convertfrom utf-8 "vend-pushim"]
::msgcat::mcset bg "point cave-pearl" [encoding convertfrom utf-8 "\320\277\320\265\321\211\320\265\321\200\320\265\320\275 \320\261\320\270\321\201\320\265\321\200"]
::msgcat::mcset cz "point cave-pearl" [encoding convertfrom utf-8 "jeskynn\303\255 perly"]
::msgcat::mcset de "point cave-pearl" [encoding convertfrom utf-8 "H\303\266hlenperle"]
::msgcat::mcset el "point cave-pearl" [encoding convertfrom utf-8 "\316\274\316\261\317\201\316\263\316\261\317\201\316\271\317\204\316\254\317\201\316\271 \317\204\317\211\316\275 \317\203\317\200\316\267\316\273\316\261\316\257\317\211\316\275"]
::msgcat::mcset en "point cave-pearl" [encoding convertfrom utf-8 "cave pearl"]
::msgcat::mcset en_UK "point cave-pearl" [encoding convertfrom utf-8 "cave pearl"]
::msgcat::mcset en_US "point cave-pearl" [encoding convertfrom utf-8 "cave pearl"]
::msgcat::mcset es "point cave-pearl" [encoding convertfrom utf-8 "perla de caverna"]
::msgcat::mcset fr "point cave-pearl" [encoding convertfrom utf-8 "perle des cavernes"]
::msgcat::mcset it "point cave-pearl" [encoding convertfrom utf-8 "pisolite"]
::msgcat::mcset mi "point cave-pearl" [encoding convertfrom utf-8 "ana kahurangi"]
::msgcat::mcset pt "point cave-pearl" [encoding convertfrom utf-8 "p\303\251rolas"]
::msgcat::mcset pt_BR "point cave-pearl" [encoding convertfrom utf-8 "p\303\251rolas"]
::msgcat::mcset pt_PT "point cave-pearl" [encoding convertfrom utf-8 "p\303\251rolas de Gruta"]
::msgcat::mcset ru "point cave-pearl" [encoding convertfrom utf-8 "\320\277\320\265\321\211\320\265\321\200\320\275\321\213\320\271 \320\266\320\265\320\274\321\207\321\203\320\263"]
::msgcat::mcset sk "point cave-pearl" [encoding convertfrom utf-8 "jaskynn\303\251 perly"]
::msgcat::mcset sq "point cave-pearl" [encoding convertfrom utf-8 "margaritar te shpelles"]
::msgcat::mcset bg "point clay" [encoding convertfrom utf-8 "\320\263\320\273\320\270\320\275\320\260"]
::msgcat::mcset cz "point clay" [encoding convertfrom utf-8 "bahno"]
::msgcat::mcset de "point clay" [encoding convertfrom utf-8 "Lehm"]
::msgcat::mcset el "point clay" [encoding convertfrom utf-8 "\316\254\317\201\316\263\316\271\316\273\316\277\317\202"]
::msgcat::mcset en "point clay" [encoding convertfrom utf-8 "clay"]
::msgcat::mcset en_UK "point clay" [encoding convertfrom utf-8 "clay"]
::msgcat::mcset en_US "point clay" [encoding convertfrom utf-8 "clay"]
::msgcat::mcset es "point clay" [encoding convertfrom utf-8 "arcilla"]
::msgcat::mcset fr "point clay" [encoding convertfrom utf-8 "argile"]
::msgcat::mcset it "point clay" [encoding convertfrom utf-8 "argilla"]
::msgcat::mcset mi "point clay" [encoding convertfrom utf-8 "oneuku"]
::msgcat::mcset pt "point clay" [encoding convertfrom utf-8 "lama"]
::msgcat::mcset pt_BR "point clay" [encoding convertfrom utf-8 "lama"]
::msgcat::mcset pt_PT "point clay" [encoding convertfrom utf-8 "lama"]
::msgcat::mcset ru "point clay" [encoding convertfrom utf-8 "\320\263\320\273\320\270\320\275\320\260"]
::msgcat::mcset sk "point clay" [encoding convertfrom utf-8 "\303\255l"]
::msgcat::mcset sq "point clay" [encoding convertfrom utf-8 "argjil"]
::msgcat::mcset de "point clay-choke" [encoding convertfrom utf-8 "Fortsetzung verlehmt"]
::msgcat::mcset en "point clay-choke" [encoding convertfrom utf-8 "clay choke"]
::msgcat::mcset en_UK "point clay-choke" [encoding convertfrom utf-8 "clay choke"]
::msgcat::mcset en_US "point clay-choke" [encoding convertfrom utf-8 "clay choke"]
::msgcat::mcset it "point clay-choke" [encoding convertfrom utf-8 "chiude su riempimento"]
::msgcat::mcset mi "point clay-choke" [encoding convertfrom utf-8 "uku pari"]
::msgcat::mcset sk "point clay-choke" [encoding convertfrom utf-8 "koniec uzavret\303\275 \303\255lom"]
::msgcat::mcset de "point clay-tree" [encoding convertfrom utf-8 "Lehmb\303\244umchen"]
::msgcat::mcset en "point clay-tree" [encoding convertfrom utf-8 "clay tree"]
::msgcat::mcset en_UK "point clay-tree" [encoding convertfrom utf-8 "clay tree"]
::msgcat::mcset en_US "point clay-tree" [encoding convertfrom utf-8 "clay tree"]
::msgcat::mcset it "point clay-tree" [encoding convertfrom utf-8 "pini d'argilla"]
::msgcat::mcset mi "point clay-tree" [encoding convertfrom utf-8 "rakau oneuku"]
::msgcat::mcset bg "point continuation" [encoding convertfrom utf-8 "\320\262\321\212\320\267\320\274\320\276\320\266\320\275\320\276 \320\277\321\200\320\276\320\264\321\212\320\273\320\266\320\265\320\275\320\270\320\265"]
::msgcat::mcset cz "point continuation" [encoding convertfrom utf-8 "mo\305\276n\303\251 pokra\304\215ov\303\241n\303\255"]
::msgcat::mcset de "point continuation" [encoding convertfrom utf-8 "Fortsetzung"]
::msgcat::mcset el "point continuation" [encoding convertfrom utf-8 "\317\200\316\271\316\270\316\261\316\275\316\256 \317\203\317\205\316\275\316\255\317\207\316\265\316\271\316\261"]
::msgcat::mcset en "point continuation" [encoding convertfrom utf-8 "possible continuation"]
::msgcat::mcset en_UK "point continuation" [encoding convertfrom utf-8 "possible continuation"]
::msgcat::mcset en_US "point continuation" [encoding convertfrom utf-8 "possible continuation"]
::msgcat::mcset es "point continuation" [encoding convertfrom utf-8 "continuaci\303\263n"]
::msgcat::mcset fr "point continuation" [encoding convertfrom utf-8 "suite possible"]
::msgcat::mcset it "point continuation" [encoding convertfrom utf-8 "possibile prosecuzione"]
::msgcat::mcset mi "point continuation" [encoding convertfrom utf-8 "roanga taea"]
::msgcat::mcset pt "point continuation" [encoding convertfrom utf-8 "poss\303\255vel continua\303\247\303\243o"]
::msgcat::mcset pt_BR "point continuation" [encoding convertfrom utf-8 "poss\303\255vel continua\303\247\303\243o"]
::msgcat::mcset pt_PT "point continuation" [encoding convertfrom utf-8 "poss\303\255vel continua\303\247\303\243o"]
::msgcat::mcset ru "point continuation" [encoding convertfrom utf-8 "\320\262\320\276\320\267\320\274\320\276\320\266\320\275\320\276\320\265 \320\277\321\200\320\276\320\264\320\276\320\273\320\266\320\265\320\275\320\270\320\265"]
::msgcat::mcset sk "point continuation" [encoding convertfrom utf-8 "mo\305\276n\303\251 pokra\304\215ovanie"]
::msgcat::mcset sq "point continuation" [encoding convertfrom utf-8 "vazhdim I mundshem"]
::msgcat::mcset bg "point crystal" [encoding convertfrom utf-8 "\320\272\321\200\320\270\321\201\321\202\320\260\320\273"]
::msgcat::mcset cz "point crystal" [encoding convertfrom utf-8 "krystal"]
::msgcat::mcset de "point crystal" [encoding convertfrom utf-8 "Kristall"]
::msgcat::mcset el "point crystal" [encoding convertfrom utf-8 "\316\272\317\201\317\215\317\203\317\204\316\261\316\273\316\273\316\277"]
::msgcat::mcset en "point crystal" [encoding convertfrom utf-8 "crystal"]
::msgcat::mcset en_UK "point crystal" [encoding convertfrom utf-8 "crystal"]
::msgcat::mcset en_US "point crystal" [encoding convertfrom utf-8 "crystal"]
::msgcat::mcset es "point crystal" [encoding convertfrom utf-8 "cristal"]
::msgcat::mcset fr "point crystal" [encoding convertfrom utf-8 "cristaux"]
::msgcat::mcset it "point crystal" [encoding convertfrom utf-8 "cristallo"]
::msgcat::mcset mi "point crystal" [encoding convertfrom utf-8 "kohatu piata"]
::msgcat::mcset pt "point crystal" [encoding convertfrom utf-8 "cristal"]
::msgcat::mcset pt_BR "point crystal" [encoding convertfrom utf-8 "cristal"]
::msgcat::mcset pt_PT "point crystal" [encoding convertfrom utf-8 "cristal"]
::msgcat::mcset ru "point crystal" [encoding convertfrom utf-8 "\320\272\321\200\320\270\321\201\321\202\320\260\320\273\320\273\321\213"]
::msgcat::mcset sk "point crystal" [encoding convertfrom utf-8 "kry\305\241t\303\241l"]
::msgcat::mcset sq "point crystal" [encoding convertfrom utf-8 "kristale"]
::msgcat::mcset bg "point curtain" [encoding convertfrom utf-8 "\320\264\321\200\320\260\320\277\320\265\321\200\320\270\321\217"]
::msgcat::mcset cz "point curtain" [encoding convertfrom utf-8 "sintrov\303\251 z\303\241clony"]
::msgcat::mcset de "point curtain" [encoding convertfrom utf-8 "Sinterfahne"]
::msgcat::mcset el "point curtain" [encoding convertfrom utf-8 "\316\272\316\277\317\205\317\201\317\204\316\257\316\275\316\261"]
::msgcat::mcset en "point curtain" [encoding convertfrom utf-8 "curtain"]
::msgcat::mcset en_UK "point curtain" [encoding convertfrom utf-8 "curtain"]
::msgcat::mcset en_US "point curtain" [encoding convertfrom utf-8 "curtain"]
::msgcat::mcset es "point curtain" [encoding convertfrom utf-8 "cortina"]
::msgcat::mcset fr "point curtain" [encoding convertfrom utf-8 "rideau"]
::msgcat::mcset it "point curtain" [encoding convertfrom utf-8 "cortina"]
::msgcat::mcset mi "point curtain" [encoding convertfrom utf-8 "araia"]
::msgcat::mcset pt "point curtain" [encoding convertfrom utf-8 "cortina"]
::msgcat::mcset pt_BR "point curtain" [encoding convertfrom utf-8 "cortina"]
::msgcat::mcset pt_PT "point curtain" [encoding convertfrom utf-8 "cortina"]
::msgcat::mcset ru "point curtain" [encoding convertfrom utf-8 "\320\275\320\260\321\202\320\265\321\207\320\275\321\213\320\271 \320\267\320\260\320\275\320\260\320\262\320\265\321\201"]
::msgcat::mcset sk "point curtain" [encoding convertfrom utf-8 "sintrov\303\251 z\303\241clony"]
::msgcat::mcset sq "point curtain" [encoding convertfrom utf-8 "perde"]
::msgcat::mcset bg "point date" [encoding convertfrom utf-8 "\320\264\320\260\321\202\320\260 \320\275\320\260 \320\275\320\260\320\261\320\273\321\216\320\264\320\265\320\275\320\270\320\265\321\202\320\276"]
::msgcat::mcset cz "point date" [encoding convertfrom utf-8 "datum pozorov\303\241n\303\255"]
::msgcat::mcset de "point date" [encoding convertfrom utf-8 "Datum"]
::msgcat::mcset el "point date" [encoding convertfrom utf-8 "\316\267\316\274\316\265\317\201\316\277\316\274\316\267\316\275\316\257\316\261"]
::msgcat::mcset en "point date" [encoding convertfrom utf-8 "date of observation"]
::msgcat::mcset en_UK "point date" [encoding convertfrom utf-8 "date of observation"]
::msgcat::mcset en_US "point date" [encoding convertfrom utf-8 "date of observation"]
::msgcat::mcset es "point date" [encoding convertfrom utf-8 "fecha"]
::msgcat::mcset fr "point date" [encoding convertfrom utf-8 "date"]
::msgcat::mcset it "point date" [encoding convertfrom utf-8 "data d'osservazione"]
::msgcat::mcset mi "point date" [encoding convertfrom utf-8 "r\304\201 o te titiro"]
::msgcat::mcset pt "point date" [encoding convertfrom utf-8 "data de observa\303\247\303\243o"]
::msgcat::mcset pt_BR "point date" [encoding convertfrom utf-8 "data de observa\303\247\303\243o"]
::msgcat::mcset pt_PT "point date" [encoding convertfrom utf-8 "data de observa\303\247\303\243o"]
::msgcat::mcset ru "point date" [encoding convertfrom utf-8 "\320\264\320\260\321\202\320\260 \320\275\320\260\320\261\320\273\321\216\320\264\320\265\320\275\320\270\321\217"]
::msgcat::mcset sk "point date" [encoding convertfrom utf-8 "d\303\241tum pozorovania"]
::msgcat::mcset sq "point date" [encoding convertfrom utf-8 "data e vrojtimit"]
::msgcat::mcset bg "point debris" [encoding convertfrom utf-8 "\321\207\320\260\320\272\321\212\320\273"]
::msgcat::mcset cz "point debris" [encoding convertfrom utf-8 "\305\241t\304\233rk"]
::msgcat::mcset de "point debris" [encoding convertfrom utf-8 "Schutt"]
::msgcat::mcset el "point debris" [encoding convertfrom utf-8 "\317\207\316\261\316\273\316\254\317\203\316\274\316\261\317\204\316\261"]
::msgcat::mcset en "point debris" [encoding convertfrom utf-8 "debris"]
::msgcat::mcset en_UK "point debris" [encoding convertfrom utf-8 "debris"]
::msgcat::mcset en_US "point debris" [encoding convertfrom utf-8 "debris"]
::msgcat::mcset es "point debris" [encoding convertfrom utf-8 "derrubios"]
::msgcat::mcset fr "point debris" [encoding convertfrom utf-8 "d\303\251bris"]
::msgcat::mcset it "point debris" [encoding convertfrom utf-8 "detriti"]
::msgcat::mcset mi "point debris" [encoding convertfrom utf-8 "otaota"]
::msgcat::mcset pt "point debris" [encoding convertfrom utf-8 "escombros"]
::msgcat::mcset pt_BR "point debris" [encoding convertfrom utf-8 "escombros"]
::msgcat::mcset pt_PT "point debris" [encoding convertfrom utf-8 "escombros"]
::msgcat::mcset ru "point debris" [encoding convertfrom utf-8 "\321\211\320\265\320\261\320\265\320\275\321\214"]
::msgcat::mcset sk "point debris" [encoding convertfrom utf-8 "sutina"]
::msgcat::mcset sq "point debris" [encoding convertfrom utf-8 "mbetje-mbeturina"]
::msgcat::mcset bg "point dig" [encoding convertfrom utf-8 "\320\270\320\267\320\272\320\276\320\277"]
::msgcat::mcset cz "point dig" [encoding convertfrom utf-8 "sonda"]
::msgcat::mcset de "point dig" [encoding convertfrom utf-8 "Grabung"]
::msgcat::mcset el "point dig" [encoding convertfrom utf-8 "\316\264\316\271\316\254\316\275\316\277\316\271\316\276\316\267"]
::msgcat::mcset en "point dig" [encoding convertfrom utf-8 "dig"]
::msgcat::mcset en_UK "point dig" [encoding convertfrom utf-8 "dig"]
::msgcat::mcset en_US "point dig" [encoding convertfrom utf-8 "dig"]
::msgcat::mcset fr "point dig" [encoding convertfrom utf-8 "d\303\251sobstruction"]
::msgcat::mcset it "point dig" [encoding convertfrom utf-8 "disostruzione"]
::msgcat::mcset mi "point dig" [encoding convertfrom utf-8 "kari"]
::msgcat::mcset sk "point dig" [encoding convertfrom utf-8 "sonda"]
::msgcat::mcset sq "point dig" [encoding convertfrom utf-8 "mihje"]
::msgcat::mcset bg "point dimensions" [encoding convertfrom utf-8 "\321\200\320\260\320\267\320\274\320\265\321\200\320\270 \320\275\320\260 \320\263\320\260\320\273\320\265\321\200\320\270\321\217\321\202\320\260"]
::msgcat::mcset cz "point dimensions" [encoding convertfrom utf-8 "rozm\304\233ry"]
::msgcat::mcset de "point dimensions" [encoding convertfrom utf-8 "Ausdehnung"]
::msgcat::mcset el "point dimensions" [encoding convertfrom utf-8 "\316\264\316\271\316\261\317\203\317\204\316\254\317\203\316\265\316\271\317\202"]
::msgcat::mcset en "point dimensions" [encoding convertfrom utf-8 "dimensions"]
::msgcat::mcset en_UK "point dimensions" [encoding convertfrom utf-8 "dimensions"]
::msgcat::mcset en_US "point dimensions" [encoding convertfrom utf-8 "dimensions"]
::msgcat::mcset es "point dimensions" [encoding convertfrom utf-8 "dimensiones"]
::msgcat::mcset fr "point dimensions" [encoding convertfrom utf-8 "proportions"]
::msgcat::mcset it "point dimensions" [encoding convertfrom utf-8 "dimensione"]
::msgcat::mcset mi "point dimensions" [encoding convertfrom utf-8 "rahinga, meiha"]
::msgcat::mcset pt "point dimensions" [encoding convertfrom utf-8 "dimens\303\265es"]
::msgcat::mcset pt_BR "point dimensions" [encoding convertfrom utf-8 "dimens\303\265es"]
::msgcat::mcset pt_PT "point dimensions" [encoding convertfrom utf-8 "dimens\303\265es"]
::msgcat::mcset ru "point dimensions" [encoding convertfrom utf-8 "\321\200\320\260\320\267\320\274\320\265\321\200\321\213 \321\205\320\276\320\264\320\260"]
::msgcat::mcset sk "point dimensions" [encoding convertfrom utf-8 "rozmery"]
::msgcat::mcset sq "point dimensions" [encoding convertfrom utf-8 "dimenzionet"]
::msgcat::mcset bg "point disk" [encoding convertfrom utf-8 "\320\264\320\270\321\201\320\272"]
::msgcat::mcset cz "point disk" [encoding convertfrom utf-8 "disk"]
::msgcat::mcset de "point disk" [encoding convertfrom utf-8 "Diskus"]
::msgcat::mcset el "point disk" [encoding convertfrom utf-8 "\316\264\316\257\317\203\316\272\316\277\317\202"]
::msgcat::mcset en "point disk" [encoding convertfrom utf-8 "disk"]
::msgcat::mcset en_UK "point disk" [encoding convertfrom utf-8 "disk"]
::msgcat::mcset en_US "point disk" [encoding convertfrom utf-8 "disk"]
::msgcat::mcset es "point disk" [encoding convertfrom utf-8 "disco"]
::msgcat::mcset fr "point disk" [encoding convertfrom utf-8 "disque"]
::msgcat::mcset it "point disk" [encoding convertfrom utf-8 "disco"]
::msgcat::mcset mi "point disk" [encoding convertfrom utf-8 "kiwhi"]
::msgcat::mcset pt "point disk" [encoding convertfrom utf-8 "disco"]
::msgcat::mcset pt_BR "point disk" [encoding convertfrom utf-8 "disco"]
::msgcat::mcset pt_PT "point disk" [encoding convertfrom utf-8 "disco"]
::msgcat::mcset ru "point disk" [encoding convertfrom utf-8 "\320\264\320\270\321\201\320\272"]
::msgcat::mcset sk "point disk" [encoding convertfrom utf-8 "disk"]
::msgcat::mcset sq "point disk" [encoding convertfrom utf-8 "pllake"]
::msgcat::mcset bg "point entrance" [encoding convertfrom utf-8 "\320\262\321\205\320\276\320\264"]
::msgcat::mcset cz "point entrance" [encoding convertfrom utf-8 "vchod"]
::msgcat::mcset de "point entrance" [encoding convertfrom utf-8 "Eingang"]
::msgcat::mcset el "point entrance" [encoding convertfrom utf-8 "\316\265\316\257\317\203\316\277\316\264\316\277\317\202"]
::msgcat::mcset en "point entrance" [encoding convertfrom utf-8 "entrance"]
::msgcat::mcset en_UK "point entrance" [encoding convertfrom utf-8 "entrance"]
::msgcat::mcset en_US "point entrance" [encoding convertfrom utf-8 "entrance"]
::msgcat::mcset es "point entrance" [encoding convertfrom utf-8 "boca"]
::msgcat::mcset fr "point entrance" [encoding convertfrom utf-8 "entr\303\251e"]
::msgcat::mcset it "point entrance" [encoding convertfrom utf-8 "ingresso"]
::msgcat::mcset mi "point entrance" [encoding convertfrom utf-8 "ana ngutu"]
::msgcat::mcset pt "point entrance" [encoding convertfrom utf-8 "entrada"]
::msgcat::mcset pt_BR "point entrance" [encoding convertfrom utf-8 "entrada"]
::msgcat::mcset pt_PT "point entrance" [encoding convertfrom utf-8 "entrada"]
::msgcat::mcset ru "point entrance" [encoding convertfrom utf-8 "\320\262\321\205\320\276\320\264"]
::msgcat::mcset sk "point entrance" [encoding convertfrom utf-8 "vchod"]
::msgcat::mcset sq "point entrance" [encoding convertfrom utf-8 "hyrja"]
::msgcat::mcset bg "point fixed-ladder" [encoding convertfrom utf-8 "\321\201\321\202\320\260\321\206\320\270\320\276\320\275\320\260\321\200\320\275\320\260 \321\201\321\202\321\212\320\273\320\261\320\260"]
::msgcat::mcset cz "point fixed-ladder" [encoding convertfrom utf-8 "pevn\303\275 \305\276eb\305\231\303\255k"]
::msgcat::mcset de "point fixed-ladder" [encoding convertfrom utf-8 "feste Leiter"]
::msgcat::mcset el "point fixed-ladder" [encoding convertfrom utf-8 "\316\274\317\214\316\275\316\271\316\274\316\267 \317\203\316\272\316\254\316\273\316\261"]
::msgcat::mcset en "point fixed-ladder" [encoding convertfrom utf-8 "fixed ladder"]
::msgcat::mcset en_UK "point fixed-ladder" [encoding convertfrom utf-8 "fixed ladder"]
::msgcat::mcset en_US "point fixed-ladder" [encoding convertfrom utf-8 "fixed ladder"]
::msgcat::mcset es "point fixed-ladder" [encoding convertfrom utf-8 "escala fija"]
::msgcat::mcset fr "point fixed-ladder" [encoding convertfrom utf-8 "\303\251chelle fixe"]
::msgcat::mcset it "point fixed-ladder" [encoding convertfrom utf-8 "scala fissa"]
::msgcat::mcset mi "point fixed-ladder" [encoding convertfrom utf-8 "arawhata"]
::msgcat::mcset pt "point fixed-ladder" [encoding convertfrom utf-8 "escada fixa"]
::msgcat::mcset pt_BR "point fixed-ladder" [encoding convertfrom utf-8 "escada fixa"]
::msgcat::mcset pt_PT "point fixed-ladder" [encoding convertfrom utf-8 "escada fixa"]
::msgcat::mcset ru "point fixed-ladder" [encoding convertfrom utf-8 "\320\266\320\265\321\201\321\202\320\272\320\260\321\217 \320\273\320\265\321\201\321\202\320\275\320\270\321\206\320\260"]
::msgcat::mcset sk "point fixed-ladder" [encoding convertfrom utf-8 "fixn\303\275 rebr\303\255k"]
::msgcat::mcset sq "point fixed-ladder" [encoding convertfrom utf-8 "shkalle fikse"]
::msgcat::mcset bg "point flowstone" [encoding convertfrom utf-8 "\320\275\320\260\321\202\320\265\320\272"]
::msgcat::mcset cz "point flowstone" [encoding convertfrom utf-8 "sintr"]
::msgcat::mcset de "point flowstone" [encoding convertfrom utf-8 "fl\303\244chiger Sinter"]
::msgcat::mcset el "point flowstone" [encoding convertfrom utf-8 "\317\203\317\204\316\261\316\273\316\261\316\263\316\274\316\271\317\204\316\271\316\272\317\214 \317\205\316\273\316\271\316\272\317\214 \316\264\316\261\317\200\316\255\316\264\316\277\317\205"]
::msgcat::mcset en "point flowstone" [encoding convertfrom utf-8 "flowstone"]
::msgcat::mcset en_UK "point flowstone" [encoding convertfrom utf-8 "flowstone"]
::msgcat::mcset en_US "point flowstone" [encoding convertfrom utf-8 "flowstone"]
::msgcat::mcset es "point flowstone" [encoding convertfrom utf-8 "concreci\303\263n"]
::msgcat::mcset fr "point flowstone" [encoding convertfrom utf-8 "concr\303\251tions"]
::msgcat::mcset it "point flowstone" [encoding convertfrom utf-8 "concrezione"]
::msgcat::mcset mi "point flowstone" [encoding convertfrom utf-8 "pari k\305\215hatu"]
::msgcat::mcset pt "point flowstone" [encoding convertfrom utf-8 "escorrimento"]
::msgcat::mcset pt_BR "point flowstone" [encoding convertfrom utf-8 "escorrimento"]
::msgcat::mcset pt_PT "point flowstone" [encoding convertfrom utf-8 "escorrimento"]
::msgcat::mcset ru "point flowstone" [encoding convertfrom utf-8 "\320\275\320\260\321\202\320\265\320\272"]
::msgcat::mcset sk "point flowstone" [encoding convertfrom utf-8 "sinter"]
::msgcat::mcset sq "point flowstone" [encoding convertfrom utf-8 "gurre-rrjedhes"]
::msgcat::mcset bg "point flowstone-choke" [encoding convertfrom utf-8 "\320\261\320\273\320\276\320\272\320\270\321\200\320\260\320\275\320\276 \320\276\321\202 \320\275\320\260\321\202\320\265\321\206\320\270"]
::msgcat::mcset cz "point flowstone-choke" [encoding convertfrom utf-8 "zasintrovan\303\275 konec"]
::msgcat::mcset de "point flowstone-choke" [encoding convertfrom utf-8 "Fortsetzung zugesintert"]
::msgcat::mcset el "point flowstone-choke" [encoding convertfrom utf-8 "\316\272\316\273\316\265\316\257\317\203\316\271\316\274\316\277 \317\203\317\204\316\277\316\254\317\202 \316\273\317\214\316\263\316\277 \317\203\317\204\316\261\316\273\316\261\316\263\316\274\316\271\317\204\316\271\316\272\316\277\317\215 \316\261\317\200\316\277\316\270\316\255\316\274\316\261\317\204\316\277\317\202"]
::msgcat::mcset en "point flowstone-choke" [encoding convertfrom utf-8 "flowstone choke"]
::msgcat::mcset en_UK "point flowstone-choke" [encoding convertfrom utf-8 "flowstone choke"]
::msgcat::mcset en_US "point flowstone-choke" [encoding convertfrom utf-8 "flowstone choke"]
::msgcat::mcset es "point flowstone-choke" [encoding convertfrom utf-8 "colmatado por concreci\303\263n"]
::msgcat::mcset fr "point flowstone-choke" [encoding convertfrom utf-8 "tr\303\251mie calcifi\303\251e"]
::msgcat::mcset it "point flowstone-choke" [encoding convertfrom utf-8 "chiude su colata"]
::msgcat::mcset mi "point flowstone-choke" [encoding convertfrom utf-8 "nati Pari k\305\215hatu"]
::msgcat::mcset pt "point flowstone-choke" [encoding convertfrom utf-8 "obstru\303\247\303\243o por escorrimento"]
::msgcat::mcset pt_BR "point flowstone-choke" [encoding convertfrom utf-8 "obstru\303\247\303\243o por escorrimento"]
::msgcat::mcset pt_PT "point flowstone-choke" [encoding convertfrom utf-8 "obstru\303\247\303\243o por escorrimento"]
::msgcat::mcset ru "point flowstone-choke" [encoding convertfrom utf-8 "\320\261\320\273\320\276\320\272\320\270\321\200\320\276\320\262\320\260\320\275\320\276 \320\275\320\260\321\202\320\265\320\272\320\260\320\274\320\270"]
::msgcat::mcset sk "point flowstone-choke" [encoding convertfrom utf-8 "zasintren\303\275 koniec"]
::msgcat::mcset sq "point flowstone-choke" [encoding convertfrom utf-8 "mbyllje me gurre-rrjedhes"]
::msgcat::mcset bg "point flute" [encoding convertfrom utf-8 "\320\272\320\260\321\200\320\275\320\270 \320\266\320\273\320\265\320\261\320\276\320\262\320\265"]
::msgcat::mcset cz "point flute" [encoding convertfrom utf-8 "p\303\255\305\241\305\245aly"]
::msgcat::mcset de "point flute" [encoding convertfrom utf-8 "Kolk"]
::msgcat::mcset el "point flute" [encoding convertfrom utf-8 "\316\261\317\205\316\273\316\254\316\272\316\271 \316\264\316\271\316\254\316\262\317\201\317\211\317\203\316\267\317\202"]
::msgcat::mcset en "point flute" [encoding convertfrom utf-8 "flute"]
::msgcat::mcset en_UK "point flute" [encoding convertfrom utf-8 "flute"]
::msgcat::mcset en_US "point flute" [encoding convertfrom utf-8 "flute"]
::msgcat::mcset es "point flute" [encoding convertfrom utf-8 "canaleta"]
::msgcat::mcset fr "point flute" [encoding convertfrom utf-8 "marmites"]
::msgcat::mcset it "point flute" [encoding convertfrom utf-8 "scanalatura"]
::msgcat::mcset mi "point flute" [encoding convertfrom utf-8 "koauau"]
::msgcat::mcset pt "point flute" [encoding convertfrom utf-8 "marcas de fluxo"]
::msgcat::mcset pt_BR "point flute" [encoding convertfrom utf-8 "marcas de fluxo"]
::msgcat::mcset pt_PT "point flute" [encoding convertfrom utf-8 "marcas de fluxo"]
::msgcat::mcset ru "point flute" [encoding convertfrom utf-8 "\320\272\320\260\320\275\320\260\320\262\320\272\320\270"]
::msgcat::mcset sk "point flute" [encoding convertfrom utf-8 "p\303\255\305\241\305\245aly"]
::msgcat::mcset sq "point flute" [encoding convertfrom utf-8 "flauta"]
::msgcat::mcset bg "point gradient" [encoding convertfrom utf-8 "\320\275\320\260\320\272\320\273\320\276\320\275 \320\275\320\260 \320\263\320\260\320\273\320\265\321\200\320\270\321\217\321\202\320\260"]
::msgcat::mcset cz "point gradient" [encoding convertfrom utf-8 "sklon chodby"]
::msgcat::mcset de "point gradient" [encoding convertfrom utf-8 "Gef\303\244lle"]
::msgcat::mcset el "point gradient" [encoding convertfrom utf-8 "\316\272\316\273\316\257\317\203\316\267 \317\203\317\204\316\277\316\254\317\202"]
::msgcat::mcset en "point gradient" [encoding convertfrom utf-8 "passage gradient"]
::msgcat::mcset en_UK "point gradient" [encoding convertfrom utf-8 "passage gradient"]
::msgcat::mcset en_US "point gradient" [encoding convertfrom utf-8 "passage gradient"]
::msgcat::mcset es "point gradient" [encoding convertfrom utf-8 "gradiente"]
::msgcat::mcset fr "point gradient" [encoding convertfrom utf-8 "pente"]
::msgcat::mcset it "point gradient" [encoding convertfrom utf-8 "scivolo"]
::msgcat::mcset mi "point gradient" [encoding convertfrom utf-8 "harapaki putanga"]
::msgcat::mcset pt "point gradient" [encoding convertfrom utf-8 "declividade da galeria"]
::msgcat::mcset pt_BR "point gradient" [encoding convertfrom utf-8 "declividade da galeria"]
::msgcat::mcset pt_PT "point gradient" [encoding convertfrom utf-8 "declividade da galeria"]
::msgcat::mcset ru "point gradient" [encoding convertfrom utf-8 "\321\203\320\272\320\273\320\276\320\275 \321\205\320\276\320\264\320\260"]
::msgcat::mcset sk "point gradient" [encoding convertfrom utf-8 "sklon chodby"]
::msgcat::mcset sq "point gradient" [encoding convertfrom utf-8 "pjertesia e kalimit"]
::msgcat::mcset bg "point guano" [encoding convertfrom utf-8 "\320\263\321\203\320\260\320\275\320\276"]
::msgcat::mcset cz "point guano" [encoding convertfrom utf-8 "guano"]
::msgcat::mcset de "point guano" [encoding convertfrom utf-8 "Guano"]
::msgcat::mcset el "point guano" [encoding convertfrom utf-8 "\316\263\316\272\316\277\317\205\316\261\316\275\317\214 (\317\200\316\265\317\201\316\271\317\204\317\204\317\216\316\274\316\261\317\204\316\261 \316\275\317\205\317\207\317\204\316\265\317\201\316\257\316\264\317\211\316\275)"]
::msgcat::mcset en "point guano" [encoding convertfrom utf-8 "guano"]
::msgcat::mcset en_UK "point guano" [encoding convertfrom utf-8 "guano"]
::msgcat::mcset en_US "point guano" [encoding convertfrom utf-8 "guano"]
::msgcat::mcset es "point guano" [encoding convertfrom utf-8 "guano"]
::msgcat::mcset fr "point guano" [encoding convertfrom utf-8 "guano"]
::msgcat::mcset it "point guano" [encoding convertfrom utf-8 "guano"]
::msgcat::mcset mi "point guano" [encoding convertfrom utf-8 "tutae"]
::msgcat::mcset pt "point guano" [encoding convertfrom utf-8 "guano"]
::msgcat::mcset pt_BR "point guano" [encoding convertfrom utf-8 "guano"]
::msgcat::mcset pt_PT "point guano" [encoding convertfrom utf-8 "guano"]
::msgcat::mcset ru "point guano" [encoding convertfrom utf-8 "\320\263\321\203\320\260\320\275\320\276"]
::msgcat::mcset sk "point guano" [encoding convertfrom utf-8 "gu\303\241no"]
::msgcat::mcset sq "point guano" [encoding convertfrom utf-8 "jashteqitje e lakuriqeve-guano"]
::msgcat::mcset bg "point gypsum" [encoding convertfrom utf-8 "\320\263\320\270\320\277\321\201"]
::msgcat::mcset cz "point gypsum" [encoding convertfrom utf-8 "s\303\241drovec"]
::msgcat::mcset de "point gypsum" [encoding convertfrom utf-8 "Gips"]
::msgcat::mcset el "point gypsum" [encoding convertfrom utf-8 "\316\263\317\215\317\210\316\277\317\202"]
::msgcat::mcset en "point gypsum" [encoding convertfrom utf-8 "gypsum"]
::msgcat::mcset en_UK "point gypsum" [encoding convertfrom utf-8 "gypsum"]
::msgcat::mcset en_US "point gypsum" [encoding convertfrom utf-8 "gypsum"]
::msgcat::mcset es "point gypsum" [encoding convertfrom utf-8 "yeso"]
::msgcat::mcset fr "point gypsum" [encoding convertfrom utf-8 "gypse"]
::msgcat::mcset it "point gypsum" [encoding convertfrom utf-8 "gesso"]
::msgcat::mcset mi "point gypsum" [encoding convertfrom utf-8 "tote"]
::msgcat::mcset pt "point gypsum" [encoding convertfrom utf-8 "gipsita"]
::msgcat::mcset pt_BR "point gypsum" [encoding convertfrom utf-8 "gipsita"]
::msgcat::mcset pt_PT "point gypsum" [encoding convertfrom utf-8 "gipsita"]
::msgcat::mcset ru "point gypsum" [encoding convertfrom utf-8 "\320\263\320\270\320\277\321\201"]
::msgcat::mcset sk "point gypsum" [encoding convertfrom utf-8 "s\303\241drovec"]
::msgcat::mcset sq "point gypsum" [encoding convertfrom utf-8 "gjips"]
::msgcat::mcset bg "point gypsum-flower" [encoding convertfrom utf-8 "\320\263\320\270\320\277\321\201\320\276\320\262\320\276 \321\206\320\262\320\265\321\202\320\265"]
::msgcat::mcset cz "point gypsum-flower" [encoding convertfrom utf-8 "s\303\241drovcov\303\275 kv\304\233t"]
::msgcat::mcset de "point gypsum-flower" [encoding convertfrom utf-8 "Gipsblume"]
::msgcat::mcset el "point gypsum-flower" [encoding convertfrom utf-8 "\316\254\316\275\316\270\316\277\317\202 \316\263\317\215\317\210\316\277\317\205"]
::msgcat::mcset en "point gypsum-flower" [encoding convertfrom utf-8 "gypsum flower"]
::msgcat::mcset en_UK "point gypsum-flower" [encoding convertfrom utf-8 "gypsum flower"]
::msgcat::mcset en_US "point gypsum-flower" [encoding convertfrom utf-8 "gypsum flower"]
::msgcat::mcset es "point gypsum-flower" [encoding convertfrom utf-8 "flor yeso"]
::msgcat::mcset fr "point gypsum-flower" [encoding convertfrom utf-8 "fleur de gypse"]
::msgcat::mcset it "point gypsum-flower" [encoding convertfrom utf-8 "fiore di gesso"]
::msgcat::mcset mi "point gypsum-flower" [encoding convertfrom utf-8 "putiputi tote"]
::msgcat::mcset pt "point gypsum-flower" [encoding convertfrom utf-8 "flor de gipsita"]
::msgcat::mcset pt_BR "point gypsum-flower" [encoding convertfrom utf-8 "flor de gipsita"]
::msgcat::mcset pt_PT "point gypsum-flower" [encoding convertfrom utf-8 "flor de gipsita"]
::msgcat::mcset ru "point gypsum-flower" [encoding convertfrom utf-8 "\320\263\320\270\320\277\321\201\320\276\320\262\321\213\320\265 \321\206\320\262\320\265\321\202\321\213"]
::msgcat::mcset sk "point gypsum-flower" [encoding convertfrom utf-8 "s\303\241drovcov\303\275 kvet"]
::msgcat::mcset sq "point gypsum-flower" [encoding convertfrom utf-8 "lule gjipsi"]
::msgcat::mcset bg "point height" [encoding convertfrom utf-8 "\320\262\320\270\321\201\320\276\321\207\320\270\320\275\320\260 \320\275\320\260 \320\277\321\200\320\260\320\263/\320\272\320\276\320\274\320\270\320\275/\320\272\320\273\320\260\320\264\320\265\320\275\320\265\321\206"]
::msgcat::mcset cz "point height" [encoding convertfrom utf-8 "v\303\275\305\241ka stupn\304\233/kom\303\255nu/hloubka propasti"]
::msgcat::mcset de "point height" [encoding convertfrom utf-8 "H\303\266he der Stufe oder des Schlotes oder Tiefe des Schachts"]
::msgcat::mcset el "point height" [encoding convertfrom utf-8 "\317\215\317\210\316\277\317\202 \317\203\316\272\316\261\316\273\316\277\317\200\316\261\317\204\316\271\316\277\317\215/\316\272\316\261\316\274\316\271\316\275\316\254\316\264\316\261\317\202 \316\256 \316\262\316\254\316\270\316\277\317\202 \317\200\316\267\316\263\316\261\316\264\316\271\316\277\317\215"]
::msgcat::mcset en "point height" [encoding convertfrom utf-8 "floor step/chimney/pit height/depth"]
::msgcat::mcset en_UK "point height" [encoding convertfrom utf-8 "floor step/chimney/pit height/depth"]
::msgcat::mcset en_US "point height" [encoding convertfrom utf-8 "floor step/chimney/pit height/depth"]
::msgcat::mcset es "point height" [encoding convertfrom utf-8 "altura resalte/chimenea/profundidad pozo"]
::msgcat::mcset fr "point height" [encoding convertfrom utf-8 "hauteur d\342\200\231une marche/d\342\200\231une chemin\303\251e/profondeur"]
::msgcat::mcset it "point height" [encoding convertfrom utf-8 "altezza"]
::msgcat::mcset mi "point height" [encoding convertfrom utf-8 "papa tapuae/tumera/teitei rua/h\305\215honu"]
::msgcat::mcset pt "point height" [encoding convertfrom utf-8 "altura do ch\303\243o para degrau/chamin\303\251/desn\303\255vel"]
::msgcat::mcset pt_BR "point height" [encoding convertfrom utf-8 "altura do ch\303\243o para degrau/chamin\303\251/desn\303\255vel"]
::msgcat::mcset pt_PT "point height" [encoding convertfrom utf-8 "altura do ch\303\243o para degrau/chamin\303\251/desn\303\255vel"]
::msgcat::mcset ru "point height" [encoding convertfrom utf-8 "\320\262\321\213\321\201\320\276\321\202\320\260 \321\203\321\201\321\202\321\203\320\277\320\260/\321\202\321\200\321\203\320\261\321\213/\320\272\320\276\320\273\320\276\320\264\321\206\320\260"]
::msgcat::mcset sk "point height" [encoding convertfrom utf-8 "v\303\275\305\241ka/h\304\272bka stup\305\210a/kom\303\255na"]
::msgcat::mcset sq "point height" [encoding convertfrom utf-8 "lartesia e shkalles ne dysheme/oxhaku/thellesia e leshimit"]
::msgcat::mcset bg "point height:negative" [encoding convertfrom utf-8 "\320\224\321\212\320\273\320\261\320\276\321\207\320\270\320\275\320\260 \320\275\320\260 \320\272\320\273\320\260\320\264\320\265\320\275\320\265\321\206"]
::msgcat::mcset cz "point height:negative" [encoding convertfrom utf-8 "hloubka propasti"]
::msgcat::mcset de "point height:negative" [encoding convertfrom utf-8 "Tiefe des Schachts"]
::msgcat::mcset el "point height:negative" [encoding convertfrom utf-8 "\316\262\316\254\316\270\316\277\317\202 \317\200\316\267\316\263\316\261\316\264\316\271\316\277\317\215"]
::msgcat::mcset en "point height:negative" [encoding convertfrom utf-8 "pit depth"]
::msgcat::mcset en_UK "point height:negative" [encoding convertfrom utf-8 "pit depth"]
::msgcat::mcset en_US "point height:negative" [encoding convertfrom utf-8 "pit depth"]
::msgcat::mcset es "point height:negative" [encoding convertfrom utf-8 "profundidad pozo"]
::msgcat::mcset fr "point height:negative" [encoding convertfrom utf-8 "profondeur"]
::msgcat::mcset it "point height:negative" [encoding convertfrom utf-8 "prodondit\303\240 pozzo"]
::msgcat::mcset mi "point height:negative" [encoding convertfrom utf-8 "rua h\305\215honu"]
::msgcat::mcset pt "point height:negative" [encoding convertfrom utf-8 "profundidade do desn\303\255vel"]
::msgcat::mcset pt_BR "point height:negative" [encoding convertfrom utf-8 "profundidade do desn\303\255vel"]
::msgcat::mcset pt_PT "point height:negative" [encoding convertfrom utf-8 "profundidade do desn\303\255vel"]
::msgcat::mcset ru "point height:negative" [encoding convertfrom utf-8 "\320\262\321\213\321\201\320\276\321\202\320\260 \320\272\320\276\320\273\320\276\320\264\321\206\320\260"]
::msgcat::mcset sk "point height:negative" [encoding convertfrom utf-8 "h\304\272bka priepasti"]
::msgcat::mcset sq "point height:negative" [encoding convertfrom utf-8 "thellesia e leshimit"]
::msgcat::mcset bg "point height:positive" [encoding convertfrom utf-8 "\320\262\320\270\321\201\320\276\321\207\320\270\320\275\320\260 \320\275\320\260 \320\272\320\276\320\274\320\270\320\275"]
::msgcat::mcset cz "point height:positive" [encoding convertfrom utf-8 "v\303\275\305\241ka kom\303\255nu"]
::msgcat::mcset de "point height:positive" [encoding convertfrom utf-8 "H\303\266he des Schlotes"]
::msgcat::mcset el "point height:positive" [encoding convertfrom utf-8 "\317\215\317\210\316\277\317\202 \316\272\316\261\316\274\316\271\316\275\316\254\316\264\316\261\317\202"]
::msgcat::mcset en "point height:positive" [encoding convertfrom utf-8 "chimney height"]
::msgcat::mcset en_UK "point height:positive" [encoding convertfrom utf-8 "chimney height"]
::msgcat::mcset en_US "point height:positive" [encoding convertfrom utf-8 "chimney height"]
::msgcat::mcset es "point height:positive" [encoding convertfrom utf-8 "altura chimenea"]
::msgcat::mcset fr "point height:positive" [encoding convertfrom utf-8 "hauteur d\342\200\231une chemin\303\251e"]
::msgcat::mcset it "point height:positive" [encoding convertfrom utf-8 "altezza camino"]
::msgcat::mcset mi "point height:positive" [encoding convertfrom utf-8 "teitei tumera"]
::msgcat::mcset pt "point height:positive" [encoding convertfrom utf-8 "altura da chamin\303\251"]
::msgcat::mcset pt_BR "point height:positive" [encoding convertfrom utf-8 "altura da chamin\303\251"]
::msgcat::mcset pt_PT "point height:positive" [encoding convertfrom utf-8 "altura da chamin\303\251"]
::msgcat::mcset ru "point height:positive" [encoding convertfrom utf-8 "\320\262\321\213\321\201\320\276\321\202\320\260 \321\202\321\200\321\203\320\261\321\213"]
::msgcat::mcset sk "point height:positive" [encoding convertfrom utf-8 "v\303\275\305\241ka kom\303\255na"]
::msgcat::mcset sq "point height:positive" [encoding convertfrom utf-8 "lartesia e oxhakut"]
::msgcat::mcset bg "point height:unsigned" [encoding convertfrom utf-8 "\320\262\320\270\321\201\320\276\321\207\320\270\320\275\320\260 \320\275\320\260 \320\275\320\270\321\210\320\260 \320\262 \321\202\320\260\320\262\320\260\320\275\320\260"]
::msgcat::mcset cz "point height:unsigned" [encoding convertfrom utf-8 "v\303\275\305\241ka stupn\304\233"]
::msgcat::mcset de "point height:unsigned" [encoding convertfrom utf-8 "H\303\266he der Bodenstufe"]
::msgcat::mcset el "point height:unsigned" [encoding convertfrom utf-8 "\317\215\317\210\316\277\317\202 \317\203\316\272\316\261\316\273\316\277\317\200\316\261\317\204\316\271\316\277\317\215"]
::msgcat::mcset en "point height:unsigned" [encoding convertfrom utf-8 "floor step height"]
::msgcat::mcset en_UK "point height:unsigned" [encoding convertfrom utf-8 "floor step height"]
::msgcat::mcset en_US "point height:unsigned" [encoding convertfrom utf-8 "floor step height"]
::msgcat::mcset es "point height:unsigned" [encoding convertfrom utf-8 "altura resalte"]
::msgcat::mcset fr "point height:unsigned" [encoding convertfrom utf-8 "hauteur d\342\200\231une marche"]
::msgcat::mcset it "point height:unsigned" [encoding convertfrom utf-8 "altezza camino"]
::msgcat::mcset mi "point height:unsigned" [encoding convertfrom utf-8 "teitei papa tapuae"]
::msgcat::mcset pt "point height:unsigned" [encoding convertfrom utf-8 "altura do degrau no ch\303\243o"]
::msgcat::mcset pt_BR "point height:unsigned" [encoding convertfrom utf-8 "altura do degrau no ch\303\243o"]
::msgcat::mcset pt_PT "point height:unsigned" [encoding convertfrom utf-8 "altura do degrau no ch\303\243o"]
::msgcat::mcset ru "point height:unsigned" [encoding convertfrom utf-8 "\320\262\321\213\321\201\320\276\321\202\320\260 \321\203\321\201\321\202\321\203\320\277\320\260"]
::msgcat::mcset sk "point height:unsigned" [encoding convertfrom utf-8 "v\303\275\305\241ka stup\305\210a"]
::msgcat::mcset sq "point height:unsigned" [encoding convertfrom utf-8 "lartesia e shkalles se dyshemes"]
::msgcat::mcset bg "point helictite" [encoding convertfrom utf-8 "\321\205\320\265\320\273\320\270\320\272\321\202\320\270\321\202\320\270"]
::msgcat::mcset cz "point helictite" [encoding convertfrom utf-8 "heliktit"]
::msgcat::mcset de "point helictite" [encoding convertfrom utf-8 "Excentrique"]
::msgcat::mcset el "point helictite" [encoding convertfrom utf-8 "\316\265\316\273\316\271\316\272\317\204\316\257\317\204\316\267\317\202"]
::msgcat::mcset en "point helictite" [encoding convertfrom utf-8 "helictite"]
::msgcat::mcset en_UK "point helictite" [encoding convertfrom utf-8 "helictite"]
::msgcat::mcset en_US "point helictite" [encoding convertfrom utf-8 "helictite"]
::msgcat::mcset es "point helictite" [encoding convertfrom utf-8 "exc\303\251ntrica"]
::msgcat::mcset fr "point helictite" [encoding convertfrom utf-8 "excentrique/h\303\251lictite"]
::msgcat::mcset it "point helictite" [encoding convertfrom utf-8 "eccentrica"]
::msgcat::mcset mi "point helictite" [encoding convertfrom utf-8 "p\304\201keho torotoro"]
::msgcat::mcset pt "point helictite" [encoding convertfrom utf-8 "helictite"]
::msgcat::mcset pt_BR "point helictite" [encoding convertfrom utf-8 "helictite"]
::msgcat::mcset pt_PT "point helictite" [encoding convertfrom utf-8 "exc\303\252ntrica"]
::msgcat::mcset ru "point helictite" [encoding convertfrom utf-8 "\320\263\320\265\320\273\320\270\320\272\321\202\320\270\321\202\321\213"]
::msgcat::mcset sk "point helictite" [encoding convertfrom utf-8 "heliktit"]
::msgcat::mcset sq "point helictite" [encoding convertfrom utf-8 "heliktite"]
::msgcat::mcset bg "point ice" [encoding convertfrom utf-8 "\320\273\320\265\320\264"]
::msgcat::mcset cz "point ice" [encoding convertfrom utf-8 "led"]
::msgcat::mcset de "point ice" [encoding convertfrom utf-8 "Eis"]
::msgcat::mcset el "point ice" [encoding convertfrom utf-8 "\317\200\316\254\316\263\316\277\317\202"]
::msgcat::mcset en "point ice" [encoding convertfrom utf-8 "ice"]
::msgcat::mcset en_UK "point ice" [encoding convertfrom utf-8 "ice"]
::msgcat::mcset en_US "point ice" [encoding convertfrom utf-8 "ice"]
::msgcat::mcset es "point ice" [encoding convertfrom utf-8 "hielo"]
::msgcat::mcset fr "point ice" [encoding convertfrom utf-8 "glace"]
::msgcat::mcset it "point ice" [encoding convertfrom utf-8 "ghiaccio"]
::msgcat::mcset mi "point ice" [encoding convertfrom utf-8 "k\305\215paka"]
::msgcat::mcset pt "point ice" [encoding convertfrom utf-8 "gelo"]
::msgcat::mcset pt_BR "point ice" [encoding convertfrom utf-8 "gelo"]
::msgcat::mcset pt_PT "point ice" [encoding convertfrom utf-8 "gelo"]
::msgcat::mcset ru "point ice" [encoding convertfrom utf-8 "\320\273\321\221\320\264"]
::msgcat::mcset sk "point ice" [encoding convertfrom utf-8 "\304\276ad"]
::msgcat::mcset sq "point ice" [encoding convertfrom utf-8 "akull"]
::msgcat::mcset de "point ice-pillar" [encoding convertfrom utf-8 "Eiss\303\244ule"]
::msgcat::mcset en "point ice-pillar" [encoding convertfrom utf-8 "ice pillar"]
::msgcat::mcset en_UK "point ice-pillar" [encoding convertfrom utf-8 "ice pillar"]
::msgcat::mcset en_US "point ice-pillar" [encoding convertfrom utf-8 "ice pillar"]
::msgcat::mcset it "point ice-pillar" [encoding convertfrom utf-8 "colonna di ghiaccio"]
::msgcat::mcset mi "point ice-pillar" [encoding convertfrom utf-8 "pou K\305\215paka"]
::msgcat::mcset sk "point ice-pillar" [encoding convertfrom utf-8 "\304\276adov\303\275 stalagn\303\241t"]
::msgcat::mcset de "point ice-stalactite" [encoding convertfrom utf-8 "Eisstalaktit"]
::msgcat::mcset en "point ice-stalactite" [encoding convertfrom utf-8 "ice stalactite"]
::msgcat::mcset en_UK "point ice-stalactite" [encoding convertfrom utf-8 "ice stalactite"]
::msgcat::mcset en_US "point ice-stalactite" [encoding convertfrom utf-8 "ice stalactite"]
::msgcat::mcset it "point ice-stalactite" [encoding convertfrom utf-8 "stalattite di ghiaccio"]
::msgcat::mcset mi "point ice-stalactite" [encoding convertfrom utf-8 "k\305\215paka ki te haere ki runga"]
::msgcat::mcset sk "point ice-stalactite" [encoding convertfrom utf-8 "\304\276adov\303\275 stalaktit"]
::msgcat::mcset de "point ice-stalagmite" [encoding convertfrom utf-8 "Eisstalagmit"]
::msgcat::mcset en "point ice-stalagmite" [encoding convertfrom utf-8 "ice stalagmite"]
::msgcat::mcset en_UK "point ice-stalagmite" [encoding convertfrom utf-8 "ice stalagmite"]
::msgcat::mcset en_US "point ice-stalagmite" [encoding convertfrom utf-8 "ice stalagmite"]
::msgcat::mcset it "point ice-stalagmite" [encoding convertfrom utf-8 "stalagmite di ghiaccio"]
::msgcat::mcset mi "point ice-stalagmite" [encoding convertfrom utf-8 "k\305\215paka ki te haere ki raro"]
::msgcat::mcset sk "point ice-stalagmite" [encoding convertfrom utf-8 "\304\276adov\303\275 stalagmit"]
::msgcat::mcset bg "point karren" [encoding convertfrom utf-8 "\320\272\320\260\321\200\320\270"]
::msgcat::mcset cz "point karren" [encoding convertfrom utf-8 "\305\241krapy"]
::msgcat::mcset de "point karren" [encoding convertfrom utf-8 "Karren"]
::msgcat::mcset el "point karren" [encoding convertfrom utf-8 "\316\272\316\254\317\201\317\201\316\265\316\275 - \316\263\317\205\316\274\316\275\317\214\317\202 \316\272\316\261\317\201\317\203\317\204\316\271\316\272\316\277\317\200\316\277\316\271\316\267\316\274\316\255\316\275\316\277\317\202 \316\262\317\201\316\254\317\207\316\277\317\202"]
::msgcat::mcset en "point karren" [encoding convertfrom utf-8 "karren"]
::msgcat::mcset en_UK "point karren" [encoding convertfrom utf-8 "karren"]
::msgcat::mcset en_US "point karren" [encoding convertfrom utf-8 "karren"]
::msgcat::mcset es "point karren" [encoding convertfrom utf-8 "lapiaz"]
::msgcat::mcset fr "point karren" [encoding convertfrom utf-8 "lapiez"]
::msgcat::mcset it "point karren" [encoding convertfrom utf-8 "karren"]
::msgcat::mcset mi "point karren" [encoding convertfrom utf-8 "awaawa"]
::msgcat::mcset pt "point karren" [encoding convertfrom utf-8 "lapi\303\241s"]
::msgcat::mcset pt_BR "point karren" [encoding convertfrom utf-8 "lapi\303\241s"]
::msgcat::mcset pt_PT "point karren" [encoding convertfrom utf-8 "lapi\303\241s"]
::msgcat::mcset ru "point karren" [encoding convertfrom utf-8 "\320\272\320\260\321\200\321\200\321\213"]
::msgcat::mcset sk "point karren" [encoding convertfrom utf-8 "\305\241krapy"]
::msgcat::mcset sq "point karren" [encoding convertfrom utf-8 "karreni"]
::msgcat::mcset bg "point label" [encoding convertfrom utf-8 "\320\265\321\202\320\270\320\272\320\265\321\202"]
::msgcat::mcset cz "point label" [encoding convertfrom utf-8 "pojmenov\303\241n\303\255"]
::msgcat::mcset de "point label" [encoding convertfrom utf-8 "Beschriftung"]
::msgcat::mcset el "point label" [encoding convertfrom utf-8 "\317\200\316\265\317\201\316\271\316\263\317\201\316\261\317\206\316\256"]
::msgcat::mcset en "point label" [encoding convertfrom utf-8 "label"]
::msgcat::mcset en_UK "point label" [encoding convertfrom utf-8 "label"]
::msgcat::mcset en_US "point label" [encoding convertfrom utf-8 "label"]
::msgcat::mcset es "point label" [encoding convertfrom utf-8 "etiqueta"]
::msgcat::mcset fr "point label" [encoding convertfrom utf-8 "libell\303\251"]
::msgcat::mcset it "point label" [encoding convertfrom utf-8 "etichetta"]
::msgcat::mcset mi "point label" [encoding convertfrom utf-8 "ingoa"]
::msgcat::mcset pt "point label" [encoding convertfrom utf-8 "indica\303\247\303\243o"]
::msgcat::mcset pt_BR "point label" [encoding convertfrom utf-8 "indica\303\247\303\243o"]
::msgcat::mcset pt_PT "point label" [encoding convertfrom utf-8 "indica\303\247\303\243o"]
::msgcat::mcset ru "point label" [encoding convertfrom utf-8 "\321\202\320\265\320\272\321\201\321\202\320\276\320\262\320\260\321\217 \320\274\320\265\321\202\320\272\320\260"]
::msgcat::mcset sk "point label" [encoding convertfrom utf-8 "pomenovanie"]
::msgcat::mcset sq "point label" [encoding convertfrom utf-8 "mbishkrim-etiket"]
::msgcat::mcset bg "point low-end" [encoding convertfrom utf-8 "\321\205\320\276\321\200\320\270\320\267\320\276\320\275\321\202\320\260\320\273\320\275\320\276 \321\201\321\202\320\265\321\201\320\275\320\265\320\275\320\270\320\265"]
::msgcat::mcset cz "point low-end" [encoding convertfrom utf-8 "nepr\305\257lezn\303\251 sn\303\255\305\276en\303\255"]
::msgcat::mcset de "point low-end" [encoding convertfrom utf-8 "Engstelle, zu flach"]
::msgcat::mcset el "point low-end" [encoding convertfrom utf-8 "\316\272\316\273\316\265\316\257\317\203\316\271\316\274\316\277 \317\203\317\204\316\277\316\254\317\202 \316\273\317\214\316\263\317\211 \317\207\316\261\316\274\316\267\316\273\316\256\317\202 \316\277\317\201\316\277\317\206\316\256\317\202"]
::msgcat::mcset en "point low-end" [encoding convertfrom utf-8 "passage end, low"]
::msgcat::mcset en_UK "point low-end" [encoding convertfrom utf-8 "passage end, low"]
::msgcat::mcset en_US "point low-end" [encoding convertfrom utf-8 "passage end, low"]
::msgcat::mcset es "point low-end" [encoding convertfrom utf-8 "final bajo"]
::msgcat::mcset fr "point low-end" [encoding convertfrom utf-8 "passage bas"]
::msgcat::mcset it "point low-end" [encoding convertfrom utf-8 "chiude su laminatoio"]
::msgcat::mcset mi "point low-end" [encoding convertfrom utf-8 "putanga p\304\201paku mutunga"]
::msgcat::mcset pt "point low-end" [encoding convertfrom utf-8 "passagem com final baixo"]
::msgcat::mcset pt_BR "point low-end" [encoding convertfrom utf-8 "passagem com final baixo"]
::msgcat::mcset pt_PT "point low-end" [encoding convertfrom utf-8 "passagem com final baixo"]
::msgcat::mcset ru "point low-end" [encoding convertfrom utf-8 "\320\263\320\276\321\200\320\270\320\267\320\276\320\275\321\202\320\260\320\273\321\214\320\275\320\260\321\217 \321\203\320\267\320\276\321\201\321\202\321\214"]
::msgcat::mcset sk "point low-end" [encoding convertfrom utf-8 "neprielezn\303\251 zn\303\255\305\276enie"]
::msgcat::mcset sq "point low-end" [encoding convertfrom utf-8 "kalim I poshtem-fund"]
::msgcat::mcset bg "point moonmilk" [encoding convertfrom utf-8 "\320\277\320\265\321\211\320\265\321\200\320\275\320\276 \320\274\320\273\321\217\320\272\320\276"]
::msgcat::mcset cz "point moonmilk" [encoding convertfrom utf-8 "nickam\303\255nek"]
::msgcat::mcset de "point moonmilk" [encoding convertfrom utf-8 "Bergmilch"]
::msgcat::mcset el "point moonmilk" [encoding convertfrom utf-8 "\316\263\316\254\316\273\316\261 \317\203\317\200\316\267\316\273\316\261\316\257\316\277\317\205"]
::msgcat::mcset en "point moonmilk" [encoding convertfrom utf-8 "moonmilk"]
::msgcat::mcset en_UK "point moonmilk" [encoding convertfrom utf-8 "moonmilk"]
::msgcat::mcset en_US "point moonmilk" [encoding convertfrom utf-8 "moonmilk"]
::msgcat::mcset es "point moonmilk" [encoding convertfrom utf-8 "mondmilch"]
::msgcat::mcset fr "point moonmilk" [encoding convertfrom utf-8 "mondmilch"]
::msgcat::mcset it "point moonmilk" [encoding convertfrom utf-8 "moonmilk"]
::msgcat::mcset mi "point moonmilk" [encoding convertfrom utf-8 "mirika marama"]
::msgcat::mcset pt "point moonmilk" [encoding convertfrom utf-8 "leite-de-lua"]
::msgcat::mcset pt_BR "point moonmilk" [encoding convertfrom utf-8 "leite-de-lua"]
::msgcat::mcset pt_PT "point moonmilk" [encoding convertfrom utf-8 "leite-de-lua"]
::msgcat::mcset ru "point moonmilk" [encoding convertfrom utf-8 "\320\273\321\203\320\275\320\275\320\276\320\265 \320\274\320\276\320\273\320\276\320\272\320\276"]
::msgcat::mcset sk "point moonmilk" [encoding convertfrom utf-8 "m\303\244kk\303\275 sinter"]
::msgcat::mcset sq "point moonmilk" [encoding convertfrom utf-8 "qumesht-hena"]
::msgcat::mcset bg "point narrow-end" [encoding convertfrom utf-8 "\320\275\320\265\320\277\321\200\320\276\321\205\320\276\320\264\320\270\320\274\320\276 \321\201\320\275\320\270\320\266\320\260\320\262\320\260\320\275\320\265"]
::msgcat::mcset cz "point narrow-end" [encoding convertfrom utf-8 "nepr\305\257lezn\303\251 z\303\272\305\276en\303\255"]
::msgcat::mcset de "point narrow-end" [encoding convertfrom utf-8 "Engstelle, zu schmal"]
::msgcat::mcset el "point narrow-end" [encoding convertfrom utf-8 "\316\272\316\273\316\265\316\257\317\203\316\271\316\274\316\277 \317\203\317\204\316\277\316\254\317\202 \316\273\317\214\316\263\317\211 \317\203\317\204\316\265\316\275\317\216\316\274\316\261\317\204\316\277\317\202"]
::msgcat::mcset en "point narrow-end" [encoding convertfrom utf-8 "passage end, narrow"]
::msgcat::mcset en_UK "point narrow-end" [encoding convertfrom utf-8 "passage end, narrow"]
::msgcat::mcset en_US "point narrow-end" [encoding convertfrom utf-8 "passage end, narrow"]
::msgcat::mcset es "point narrow-end" [encoding convertfrom utf-8 "final estrecho"]
::msgcat::mcset fr "point narrow-end" [encoding convertfrom utf-8 "passage imp\303\251n\303\251trable"]
::msgcat::mcset it "point narrow-end" [encoding convertfrom utf-8 "chiude su strettoia"]
::msgcat::mcset mi "point narrow-end" [encoding convertfrom utf-8 "putanga kuiti mutunga"]
::msgcat::mcset pt "point narrow-end" [encoding convertfrom utf-8 "passagem com final estreito"]
::msgcat::mcset pt_BR "point narrow-end" [encoding convertfrom utf-8 "passagem com final estreito"]
::msgcat::mcset pt_PT "point narrow-end" [encoding convertfrom utf-8 "passagem com final estreito"]
::msgcat::mcset ru "point narrow-end" [encoding convertfrom utf-8 "\320\262\320\265\321\200\321\202\320\270\320\272\320\260\320\273\321\214\320\275\320\260\321\217 \321\203\320\267\320\276\321\201\321\202\321\214"]
::msgcat::mcset sk "point narrow-end" [encoding convertfrom utf-8 "neprielezn\303\251 z\303\272\305\276enie"]
::msgcat::mcset sq "point narrow-end" [encoding convertfrom utf-8 "kalim I ngushte-fund"]
::msgcat::mcset bg "point no-equipment" [encoding convertfrom utf-8 "\320\273\320\270\320\277\321\201\320\262\320\260 \320\265\320\272\320\270\320\277\320\270\321\200\320\276\320\262\320\272\320\260!"]
::msgcat::mcset cz "point no-equipment" [encoding convertfrom utf-8 "nevystrojen\303\251 m\303\255sto"]
::msgcat::mcset de "point no-equipment" [encoding convertfrom utf-8 "keine Ausr\303\274stung"]
::msgcat::mcset el "point no-equipment" [encoding convertfrom utf-8 "\317\207\317\211\317\201\316\257\317\202 \317\205\316\273\316\271\316\272\316\254"]
::msgcat::mcset en "point no-equipment" [encoding convertfrom utf-8 "no equipment!"]
::msgcat::mcset en_UK "point no-equipment" [encoding convertfrom utf-8 "no equipment!"]
::msgcat::mcset en_US "point no-equipment" [encoding convertfrom utf-8 "no equipment!"]
::msgcat::mcset es "point no-equipment" [encoding convertfrom utf-8 "sin equipar"]
::msgcat::mcset fr "point no-equipment" [encoding convertfrom utf-8 "pas d\342\200\231\303\251quipement"]
::msgcat::mcset it "point no-equipment" [encoding convertfrom utf-8 "senza armo"]
::msgcat::mcset mi "point no-equipment" [encoding convertfrom utf-8 "wahi a taonga mahi kore"]
::msgcat::mcset pt "point no-equipment" [encoding convertfrom utf-8 "local sem equipamento"]
::msgcat::mcset pt_BR "point no-equipment" [encoding convertfrom utf-8 "local sem equipamento"]
::msgcat::mcset pt_PT "point no-equipment" [encoding convertfrom utf-8 "local sem equipamento"]
::msgcat::mcset ru "point no-equipment" [encoding convertfrom utf-8 "\321\201\320\275\320\260\321\200\321\217\320\266\320\265\320\275\320\270\320\265 \320\276\321\202\321\203\321\202\321\201\321\202\320\262\321\203\320\265\321\202!"]
::msgcat::mcset sk "point no-equipment" [encoding convertfrom utf-8 "nevystrojen\303\251 miesto"]
::msgcat::mcset sq "point no-equipment" [encoding convertfrom utf-8 "vend pa pajisje"]
::msgcat::mcset bg "point paleo-material" [encoding convertfrom utf-8 "\320\277\320\260\320\273\320\265\320\276\320\275\321\202\320\276\320\273\320\276\320\263\320\270\321\207\320\275\320\260 \320\275\320\260\321\205\320\276\320\264\320\272\320\260"]
::msgcat::mcset cz "point paleo-material" [encoding convertfrom utf-8 "paleontologick\303\251 n\303\241lezy"]
::msgcat::mcset de "point paleo-material" [encoding convertfrom utf-8 "pal\303\244ontologischer Fund"]
::msgcat::mcset el "point paleo-material" [encoding convertfrom utf-8 "\317\200\316\261\316\273\316\261\316\271\316\277\316\275\317\204\316\277\316\273\316\277\316\263\316\271\316\272\317\214 \316\265\317\215\317\201\316\267\316\274\316\261"]
::msgcat::mcset en "point paleo-material" [encoding convertfrom utf-8 "paleo material"]
::msgcat::mcset en_UK "point paleo-material" [encoding convertfrom utf-8 "paleo material"]
::msgcat::mcset en_US "point paleo-material" [encoding convertfrom utf-8 "paleo material"]
::msgcat::mcset es "point paleo-material" [encoding convertfrom utf-8 "yacimiento (pal)"]
::msgcat::mcset fr "point paleo-material" [encoding convertfrom utf-8 "mat\303\251riel pal\303\251o"]
::msgcat::mcset it "point paleo-material" [encoding convertfrom utf-8 "materiale paleologico"]
::msgcat::mcset mi "point paleo-material" [encoding convertfrom utf-8 "taiao taonga o nehe"]
::msgcat::mcset pt "point paleo-material" [encoding convertfrom utf-8 "material paleontol\303\263gico"]
::msgcat::mcset pt_BR "point paleo-material" [encoding convertfrom utf-8 "material paleontol\303\263gico"]
::msgcat::mcset pt_PT "point paleo-material" [encoding convertfrom utf-8 "material paleontol\303\263gico"]
::msgcat::mcset ru "point paleo-material" [encoding convertfrom utf-8 "\320\277\320\260\320\273\320\265\320\276-\320\275\320\260\321\205\320\276\320\264\320\272\320\260"]
::msgcat::mcset sk "point paleo-material" [encoding convertfrom utf-8 "paleontologick\303\251 n\303\241lezy"]
::msgcat::mcset sq "point paleo-material" [encoding convertfrom utf-8 "paleo-material"]
::msgcat::mcset bg "point passage-height" [encoding convertfrom utf-8 "\320\262\320\270\321\201\320\276\321\207\320\270\320\275\320\260 \320\275\320\260 \320\263\320\260\320\273\320\265\321\200\320\270\321\217\321\202\320\260"]
::msgcat::mcset cz "point passage-height" [encoding convertfrom utf-8 "v\303\275\305\241ka chodby"]
::msgcat::mcset de "point passage-height" [encoding convertfrom utf-8 "Raumh\303\266he"]
::msgcat::mcset el "point passage-height" [encoding convertfrom utf-8 "\317\215\317\210\316\277\317\202 \317\203\317\204\316\277\316\254\317\202"]
::msgcat::mcset en "point passage-height" [encoding convertfrom utf-8 "passage height"]
::msgcat::mcset en_UK "point passage-height" [encoding convertfrom utf-8 "passage height"]
::msgcat::mcset en_US "point passage-height" [encoding convertfrom utf-8 "passage height"]
::msgcat::mcset es "point passage-height" [encoding convertfrom utf-8 "altura galer\303\255a"]
::msgcat::mcset fr "point passage-height" [encoding convertfrom utf-8 "hauteur du passage"]
::msgcat::mcset it "point passage-height" [encoding convertfrom utf-8 "altezza galleria"]
::msgcat::mcset mi "point passage-height" [encoding convertfrom utf-8 "ara teitei"]
::msgcat::mcset pt "point passage-height" [encoding convertfrom utf-8 "altura da galeria"]
::msgcat::mcset pt_BR "point passage-height" [encoding convertfrom utf-8 "altura da galeria"]
::msgcat::mcset pt_PT "point passage-height" [encoding convertfrom utf-8 "altura da galeria"]
::msgcat::mcset ru "point passage-height" [encoding convertfrom utf-8 "\320\262\321\213\321\201\320\276\321\202\320\260 \321\205\320\276\320\264\320\260"]
::msgcat::mcset sk "point passage-height" [encoding convertfrom utf-8 "v\303\275\305\241ka chodby"]
::msgcat::mcset sq "point passage-height" [encoding convertfrom utf-8 "lartesia e kalimit"]
::msgcat::mcset bg "point passage-height:both" [encoding convertfrom utf-8 "\320\262\320\270\321\201\320\276\321\207\320\270\320\275\320\260 \320\275\320\260\320\264 \320\270 \320\264\321\212\320\273\320\261\320\276\321\207\320\270\320\275\320\260 \320\277\320\276\320\264 \320\262\320\276\320\264\320\260\321\202\320\260"]
::msgcat::mcset cz "point passage-height:both" [encoding convertfrom utf-8 "v\303\275\305\241ka nad i pod hladinou"]
::msgcat::mcset de "point passage-height:both" [encoding convertfrom utf-8 "Raumh\303\266he gesamt"]
::msgcat::mcset el "point passage-height:both" [encoding convertfrom utf-8 "\317\215\317\210\316\277\317\202 \316\272\316\261\316\271 \316\262\316\254\316\270\316\277\317\202 \317\203\317\204\316\277\316\254\317\202 \317\200\316\254\316\275\317\211 \316\272\316\261\316\271 \316\272\316\254\317\204\317\211 \316\261\317\200\317\214 \316\275\316\265\317\201\317\214"]
::msgcat::mcset en "point passage-height:both" [encoding convertfrom utf-8 "height above, depth below water"]
::msgcat::mcset en_UK "point passage-height:both" [encoding convertfrom utf-8 "height above, depth below water"]
::msgcat::mcset en_US "point passage-height:both" [encoding convertfrom utf-8 "height above, depth below water"]
::msgcat::mcset es "point passage-height:both" [encoding convertfrom utf-8 "altura y profundidad respecto nivel del mar"]
::msgcat::mcset fr "point passage-height:both" [encoding convertfrom utf-8 "hauteur au dessous et au dessus de l\342\200\231eau"]
::msgcat::mcset it "point passage-height:both" [encoding convertfrom utf-8 "altezza sopra e sotto il livello dell'acqua"]
::msgcat::mcset mi "point passage-height:both" [encoding convertfrom utf-8 "karewa ki runga ki raro"]
::msgcat::mcset pt "point passage-height:both" [encoding convertfrom utf-8 "altura acima e profundidade abaixo do n\303\255vel da \303\241gua"]
::msgcat::mcset pt_BR "point passage-height:both" [encoding convertfrom utf-8 "altura acima e profundidade abaixo do n\303\255vel da \303\241gua"]
::msgcat::mcset pt_PT "point passage-height:both" [encoding convertfrom utf-8 "altura acima e profundidade abaixo do n\303\255vel da \303\241gua"]
::msgcat::mcset ru "point passage-height:both" [encoding convertfrom utf-8 "\320\262\321\213\321\201\320\276\321\202\320\260 \320\275\320\260\320\264 \320\270 \320\263\320\273\321\203\320\261\320\270\320\275\320\260 \320\275\320\270\320\266\320\265 \321\203\321\200\320\276\320\262\320\275\321\217 \320\262\320\276\320\264\321\213"]
::msgcat::mcset sk "point passage-height:both" [encoding convertfrom utf-8 "v\303\275\305\241ka nad a h\304\272bka pod hladinou"]
::msgcat::mcset sq "point passage-height:both" [encoding convertfrom utf-8 "lartesia mbi dhe nen nivelin e ujit"]
::msgcat::mcset bg "point passage-height:negative" [encoding convertfrom utf-8 "\320\264\321\212\320\273\320\261\320\276\321\207\320\270\320\275\320\260 \320\275\320\260 \320\263\320\260\320\273\320\265\321\200\320\270\321\217\321\202\320\260 \320\277\320\276\320\264 \320\262\320\276\320\264\320\260\321\202\320\260"]
::msgcat::mcset cz "point passage-height:negative" [encoding convertfrom utf-8 "v\303\275\305\241ka chodby pod hladinou"]
::msgcat::mcset de "point passage-height:negative" [encoding convertfrom utf-8 "Raumh\303\266he nach unten"]
::msgcat::mcset el "point passage-height:negative" [encoding convertfrom utf-8 "\316\262\316\254\316\270\316\277\317\202 \317\203\317\204\316\277\316\254\317\202 \316\272\316\254\317\204\317\211 \316\261\317\200\317\214 \316\275\316\265\317\201\317\214"]
::msgcat::mcset en "point passage-height:negative" [encoding convertfrom utf-8 "depth below water level"]
::msgcat::mcset en_UK "point passage-height:negative" [encoding convertfrom utf-8 "depth below water level"]
::msgcat::mcset en_US "point passage-height:negative" [encoding convertfrom utf-8 "depth below water level"]
::msgcat::mcset es "point passage-height:negative" [encoding convertfrom utf-8 "profundidad bajo nivel del mar"]
::msgcat::mcset fr "point passage-height:negative" [encoding convertfrom utf-8 "hauteur en dessous de l\342\200\231eau"]
::msgcat::mcset it "point passage-height:negative" [encoding convertfrom utf-8 "profondit\303\240 sotto il livello dell'acqua"]
::msgcat::mcset mi "point passage-height:negative" [encoding convertfrom utf-8 "te h\305\215hunu a karewa ki raro"]
::msgcat::mcset pt "point passage-height:negative" [encoding convertfrom utf-8 "profundidade abaixo do n\303\255vel da \303\241gua"]
::msgcat::mcset pt_BR "point passage-height:negative" [encoding convertfrom utf-8 "profundidade abaixo do n\303\255vel da \303\241gua"]
::msgcat::mcset pt_PT "point passage-height:negative" [encoding convertfrom utf-8 "profundidade abaixo do n\303\255vel da \303\241gua"]
::msgcat::mcset ru "point passage-height:negative" [encoding convertfrom utf-8 "\320\263\320\273\321\203\320\261\320\270\320\275\320\260 \320\275\320\270\320\266\320\265 \321\203\321\200\320\276\320\262\320\275\321\217 \320\262\320\276\320\264\321\213"]
::msgcat::mcset sk "point passage-height:negative" [encoding convertfrom utf-8 "h\304\272bka pod hladinou"]
::msgcat::mcset sq "point passage-height:negative" [encoding convertfrom utf-8 "thellesia nen nivelin e ujit"]
::msgcat::mcset bg "point passage-height:positive" [encoding convertfrom utf-8 "\320\262\320\270\321\201\320\276\321\207\320\270\320\275\320\260 \320\275\320\260 \320\263\320\260\320\273\320\265\321\200\320\270\321\217\321\202\320\260 \320\275\320\260\320\264 \320\262\320\276\320\264\320\260\321\202\320\260"]
::msgcat::mcset cz "point passage-height:positive" [encoding convertfrom utf-8 "v\303\275\305\241ka chodby nad hladinou"]
::msgcat::mcset de "point passage-height:positive" [encoding convertfrom utf-8 "Raumh\303\266he nach oben"]
::msgcat::mcset el "point passage-height:positive" [encoding convertfrom utf-8 "\317\215\317\210\316\277\317\202 \317\203\317\204\316\277\316\254\317\202 \317\200\316\254\316\275\317\211 \316\261\317\200\317\214 \316\275\316\265\317\201\317\214"]
::msgcat::mcset en "point passage-height:positive" [encoding convertfrom utf-8 "height above water level"]
::msgcat::mcset en_UK "point passage-height:positive" [encoding convertfrom utf-8 "height above water level"]
::msgcat::mcset en_US "point passage-height:positive" [encoding convertfrom utf-8 "height above water level"]
::msgcat::mcset es "point passage-height:positive" [encoding convertfrom utf-8 "altura sobre nivel del mar"]
::msgcat::mcset fr "point passage-height:positive" [encoding convertfrom utf-8 "hauteur au-dessus de l\342\200\231eau"]
::msgcat::mcset it "point passage-height:positive" [encoding convertfrom utf-8 "altezza sopra il livello dell'acqua"]
::msgcat::mcset mi "point passage-height:positive" [encoding convertfrom utf-8 "te teitei a karewa ki runga"]
::msgcat::mcset pt "point passage-height:positive" [encoding convertfrom utf-8 "altura acima do n\303\255vel da \303\241gua"]
::msgcat::mcset pt_BR "point passage-height:positive" [encoding convertfrom utf-8 "altura acima do n\303\255vel da \303\241gua"]
::msgcat::mcset pt_PT "point passage-height:positive" [encoding convertfrom utf-8 "altura acima do n\303\255vel da \303\241gua"]
::msgcat::mcset ru "point passage-height:positive" [encoding convertfrom utf-8 "\320\262\321\213\321\201\320\276\321\202\320\260 \320\275\320\260\320\264 \321\203\321\200\320\276\320\262\320\275\320\265\320\274 \320\262\320\276\320\264\321\213"]
::msgcat::mcset sk "point passage-height:positive" [encoding convertfrom utf-8 "v\303\275\305\241ka nad hladinou"]
::msgcat::mcset sq "point passage-height:positive" [encoding convertfrom utf-8 "lartesia mbi nivelin e ujit"]
::msgcat::mcset bg "point passage-height:unsigned" [encoding convertfrom utf-8 "\320\262\320\270\321\201\320\276\321\207\320\270\320\275\320\260 \320\275\320\260 \320\263\320\260\320\273\320\265\321\200\320\270\321\217\321\202\320\260"]
::msgcat::mcset cz "point passage-height:unsigned" [encoding convertfrom utf-8 "v\303\275\305\241ka chodby"]
::msgcat::mcset de "point passage-height:unsigned" [encoding convertfrom utf-8 "Raumh\303\266he"]
::msgcat::mcset el "point passage-height:unsigned" [encoding convertfrom utf-8 "\317\215\317\210\316\277\317\202 \317\203\317\204\316\277\316\254\317\202"]
::msgcat::mcset en "point passage-height:unsigned" [encoding convertfrom utf-8 "passage height"]
::msgcat::mcset en_UK "point passage-height:unsigned" [encoding convertfrom utf-8 "passage height"]
::msgcat::mcset en_US "point passage-height:unsigned" [encoding convertfrom utf-8 "passage height"]
::msgcat::mcset es "point passage-height:unsigned" [encoding convertfrom utf-8 "altura galer\303\255a"]
::msgcat::mcset fr "point passage-height:unsigned" [encoding convertfrom utf-8 "hauteur du passage"]
::msgcat::mcset it "point passage-height:unsigned" [encoding convertfrom utf-8 "altezza galleria"]
::msgcat::mcset mi "point passage-height:unsigned" [encoding convertfrom utf-8 "ara teitei"]
::msgcat::mcset pt "point passage-height:unsigned" [encoding convertfrom utf-8 "altura da galeria"]
::msgcat::mcset pt_BR "point passage-height:unsigned" [encoding convertfrom utf-8 "altura da galeria"]
::msgcat::mcset pt_PT "point passage-height:unsigned" [encoding convertfrom utf-8 "altura da galeria"]
::msgcat::mcset ru "point passage-height:unsigned" [encoding convertfrom utf-8 "\320\262\321\213\321\201\320\276\321\202\320\260 \321\205\320\276\320\264\320\260"]
::msgcat::mcset sk "point passage-height:unsigned" [encoding convertfrom utf-8 "v\303\275\305\241ka chodby"]
::msgcat::mcset sq "point passage-height:unsigned" [encoding convertfrom utf-8 "lartesia e kalimit-e pashenuar"]
::msgcat::mcset bg "point pebbles" [encoding convertfrom utf-8 "\320\272\320\260\320\274\321\212\321\207\320\265\321\202\320\260"]
::msgcat::mcset cz "point pebbles" [encoding convertfrom utf-8 "valouny"]
::msgcat::mcset de "point pebbles" [encoding convertfrom utf-8 "Kies"]
::msgcat::mcset el "point pebbles" [encoding convertfrom utf-8 "\317\207\316\261\316\273\316\257\316\272\316\271\316\261"]
::msgcat::mcset en "point pebbles" [encoding convertfrom utf-8 "pebbles"]
::msgcat::mcset en_UK "point pebbles" [encoding convertfrom utf-8 "pebbles"]
::msgcat::mcset en_US "point pebbles" [encoding convertfrom utf-8 "pebbles"]
::msgcat::mcset es "point pebbles" [encoding convertfrom utf-8 "cantos rodados"]
::msgcat::mcset fr "point pebbles" [encoding convertfrom utf-8 "galets"]
::msgcat::mcset it "point pebbles" [encoding convertfrom utf-8 "ciotoli"]
::msgcat::mcset mi "point pebbles" [encoding convertfrom utf-8 "nga k\305\215hatu iti"]
::msgcat::mcset pt "point pebbles" [encoding convertfrom utf-8 "seixos"]
::msgcat::mcset pt_BR "point pebbles" [encoding convertfrom utf-8 "seixos"]
::msgcat::mcset pt_PT "point pebbles" [encoding convertfrom utf-8 "seixos"]
::msgcat::mcset ru "point pebbles" [encoding convertfrom utf-8 "\320\263\320\260\320\273\321\214\320\272\320\260"]
::msgcat::mcset sk "point pebbles" [encoding convertfrom utf-8 "okruhliaky"]
::msgcat::mcset sq "point pebbles" [encoding convertfrom utf-8 "gurralece"]
::msgcat::mcset bg "point pillar" [encoding convertfrom utf-8 "\321\201\321\202\320\260\320\273\320\260\320\272\321\202\320\276\320\275"]
::msgcat::mcset cz "point pillar" [encoding convertfrom utf-8 "stalagn\303\241t"]
::msgcat::mcset de "point pillar" [encoding convertfrom utf-8 "S\303\244ule"]
::msgcat::mcset el "point pillar" [encoding convertfrom utf-8 "\316\272\316\277\316\273\317\214\316\275\316\261"]
::msgcat::mcset en "point pillar" [encoding convertfrom utf-8 "pillar"]
::msgcat::mcset en_UK "point pillar" [encoding convertfrom utf-8 "pillar"]
::msgcat::mcset en_US "point pillar" [encoding convertfrom utf-8 "pillar"]
::msgcat::mcset es "point pillar" [encoding convertfrom utf-8 "pilar"]
::msgcat::mcset fr "point pillar" [encoding convertfrom utf-8 "pillier"]
::msgcat::mcset it "point pillar" [encoding convertfrom utf-8 "colonna"]
::msgcat::mcset mi "point pillar" [encoding convertfrom utf-8 "pou"]
::msgcat::mcset pt "point pillar" [encoding convertfrom utf-8 "coluna"]
::msgcat::mcset pt_BR "point pillar" [encoding convertfrom utf-8 "coluna"]
::msgcat::mcset pt_PT "point pillar" [encoding convertfrom utf-8 "coluna"]
::msgcat::mcset ru "point pillar" [encoding convertfrom utf-8 "\320\272\320\276\320\273\320\276\320\275\320\275\320\260"]
::msgcat::mcset sk "point pillar" [encoding convertfrom utf-8 "stalagn\303\241t"]
::msgcat::mcset sq "point pillar" [encoding convertfrom utf-8 "shtylle"]
::msgcat::mcset bg "point popcorn" [encoding convertfrom utf-8 "\320\272\320\276\321\200\320\260\320\273\320\270\321\202\320\270"]
::msgcat::mcset cz "point popcorn" [encoding convertfrom utf-8 "pizolity"]
::msgcat::mcset de "point popcorn" [encoding convertfrom utf-8 "Blumenkohlsinter"]
::msgcat::mcset el "point popcorn" [encoding convertfrom utf-8 "\316\274\316\261\316\275\316\271\317\204\316\254\317\201\316\271\316\261 \316\261\317\200\317\214 \317\203\317\204\316\261\316\273\316\261\316\263\316\274\316\271\317\204\316\271\316\272\317\214 \317\205\316\273\316\271\316\272\317\214"]
::msgcat::mcset en "point popcorn" [encoding convertfrom utf-8 "popcorn"]
::msgcat::mcset en_UK "point popcorn" [encoding convertfrom utf-8 "popcorn"]
::msgcat::mcset en_US "point popcorn" [encoding convertfrom utf-8 "popcorn"]
::msgcat::mcset es "point popcorn" [encoding convertfrom utf-8 "coliflor"]
::msgcat::mcset fr "point popcorn" [encoding convertfrom utf-8 "choux-fleur"]
::msgcat::mcset it "point popcorn" [encoding convertfrom utf-8 "cavolfiore"]
::msgcat::mcset mi "point popcorn" [encoding convertfrom utf-8 "kanga p\304\201huuhuu"]
::msgcat::mcset pt "point popcorn" [encoding convertfrom utf-8 "couve-flor"]
::msgcat::mcset pt_BR "point popcorn" [encoding convertfrom utf-8 "couve-flor"]
::msgcat::mcset pt_PT "point popcorn" [encoding convertfrom utf-8 "couve-flor"]
::msgcat::mcset ru "point popcorn" [encoding convertfrom utf-8 "\320\272\320\276\321\200\320\260\320\273\320\270\321\202\321\213"]
::msgcat::mcset sk "point popcorn" [encoding convertfrom utf-8 "pizolity"]
::msgcat::mcset sq "point popcorn" [encoding convertfrom utf-8 "palagaqa-kokorroshka"]
::msgcat::mcset bg "point raft" [encoding convertfrom utf-8 "\320\275\320\260\321\201\320\270\320\277"]
::msgcat::mcset cz "point raft" [encoding convertfrom utf-8 "n\303\241plav"]
::msgcat::mcset de "point raft" [encoding convertfrom utf-8 "schwimmendes Kalkh\303\244utchen"]
::msgcat::mcset el "point raft" [encoding convertfrom utf-8 "\317\203\317\204\316\261\316\273\316\261\316\263\316\274\316\271\317\204\316\271\316\272\317\214 \317\205\316\273\316\271\316\272\317\214 \317\200\316\277\317\205 \316\265\317\200\316\271\317\200\316\273\316\255\316\265\316\271"]
::msgcat::mcset en "point raft" [encoding convertfrom utf-8 "calcite raft"]
::msgcat::mcset en_UK "point raft" [encoding convertfrom utf-8 "calcite raft"]
::msgcat::mcset en_US "point raft" [encoding convertfrom utf-8 "calcite raft"]
::msgcat::mcset es "point raft" [encoding convertfrom utf-8 "calcita flotante"]
::msgcat::mcset fr "point raft" [encoding convertfrom utf-8 "calcite flottante"]
::msgcat::mcset it "point raft" [encoding convertfrom utf-8 "calcite flottante"]
::msgcat::mcset mi "point raft" [encoding convertfrom utf-8 "m\305\215kihi o k\305\215hatu h\305\215honu"]
::msgcat::mcset pt "point raft" [encoding convertfrom utf-8 "jangada"]
::msgcat::mcset pt_BR "point raft" [encoding convertfrom utf-8 "jangada"]
::msgcat::mcset pt_PT "point raft" [encoding convertfrom utf-8 "jangada"]
::msgcat::mcset ru "point raft" [encoding convertfrom utf-8 "\320\262\321\213\321\201\321\213\320\277\320\272\320\260"]
::msgcat::mcset sk "point raft" [encoding convertfrom utf-8 "n\303\241plav"]
::msgcat::mcset sq "point raft" [encoding convertfrom utf-8 "trap-skele"]
::msgcat::mcset bg "point raft-cone" [encoding convertfrom utf-8 "\320\275\320\260\321\201\320\270\320\277\320\265\320\275 \320\272\320\276\320\275\321\203\321\201"]
::msgcat::mcset cz "point raft-cone" [encoding convertfrom utf-8 "n\303\241plavov\303\275 ku\305\276el"]
::msgcat::mcset de "point raft-cone" [encoding convertfrom utf-8 "schwimmendes Kalkh\303\244utchen"]
::msgcat::mcset el "point raft-cone" [encoding convertfrom utf-8 "\317\203\317\204\316\261\316\273\316\261\316\263\316\274\316\271\317\204\316\271\316\272\317\214\317\202 \316\272\317\216\316\275\316\277\317\202 \317\200\316\277\317\205 \316\265\317\200\316\271\317\200\316\273\316\255\316\265\316\271"]
::msgcat::mcset en "point raft-cone" [encoding convertfrom utf-8 "raft cone"]
::msgcat::mcset en_UK "point raft-cone" [encoding convertfrom utf-8 "raft cone"]
::msgcat::mcset en_US "point raft-cone" [encoding convertfrom utf-8 "raft cone"]
::msgcat::mcset es "point raft-cone" [encoding convertfrom utf-8 "conos"]
::msgcat::mcset fr "point raft-cone" [encoding convertfrom utf-8 "cone"]
::msgcat::mcset it "point raft-cone" [encoding convertfrom utf-8 "calcite flottante"]
::msgcat::mcset mi "point raft-cone" [encoding convertfrom utf-8 "korere a m\305\215kihi k\305\215hatu h\305\215honu"]
::msgcat::mcset pt "point raft-cone" [encoding convertfrom utf-8 "cone de jangada"]
::msgcat::mcset pt_BR "point raft-cone" [encoding convertfrom utf-8 "cone de jangada"]
::msgcat::mcset pt_PT "point raft-cone" [encoding convertfrom utf-8 "cone de jangada"]
::msgcat::mcset ru "point raft-cone" [encoding convertfrom utf-8 "\320\262\321\213\321\201\321\213\320\277\320\275\320\276\320\271 \320\272\320\276\320\275\321\203\321\201"]
::msgcat::mcset sk "point raft-cone" [encoding convertfrom utf-8 "n\303\241plavov\303\275 ku\305\276e\304\276"]
::msgcat::mcset sq "point raft-cone" [encoding convertfrom utf-8 "rrjedhe uji konike"]
::msgcat::mcset bg "point remark" [encoding convertfrom utf-8 "\320\267\320\260\320\261\320\265\320\273\320\265\320\266\320\272\320\260"]
::msgcat::mcset cz "point remark" [encoding convertfrom utf-8 "pozn\303\241mka"]
::msgcat::mcset de "point remark" [encoding convertfrom utf-8 "Bemerkung"]
::msgcat::mcset el "point remark" [encoding convertfrom utf-8 "\317\203\317\207\317\214\316\273\316\271\316\277"]
::msgcat::mcset en "point remark" [encoding convertfrom utf-8 "remark"]
::msgcat::mcset en_UK "point remark" [encoding convertfrom utf-8 "remark"]
::msgcat::mcset en_US "point remark" [encoding convertfrom utf-8 "remark"]
::msgcat::mcset es "point remark" [encoding convertfrom utf-8 "nota"]
::msgcat::mcset fr "point remark" [encoding convertfrom utf-8 "remarque"]
::msgcat::mcset it "point remark" [encoding convertfrom utf-8 "nota"]
::msgcat::mcset mi "point remark" [encoding convertfrom utf-8 "korero"]
::msgcat::mcset pt "point remark" [encoding convertfrom utf-8 "anota\303\247\303\243o"]
::msgcat::mcset pt_BR "point remark" [encoding convertfrom utf-8 "anota\303\247\303\243o"]
::msgcat::mcset pt_PT "point remark" [encoding convertfrom utf-8 "anota\303\247\303\243o"]
::msgcat::mcset ru "point remark" [encoding convertfrom utf-8 "\320\267\320\260\320\274\320\265\321\202\320\272\320\260"]
::msgcat::mcset sk "point remark" [encoding convertfrom utf-8 "pozn\303\241mka"]
::msgcat::mcset sq "point remark" [encoding convertfrom utf-8 "shenim"]
::msgcat::mcset bg "point rimstone-dam" [encoding convertfrom utf-8 "\321\201\321\203\321\205\320\276 \321\201\320\270\320\275\321\202\321\200\320\276\320\262\320\276 \320\265\320\267\320\265\321\200\320\276"]
::msgcat::mcset cz "point rimstone-dam" [encoding convertfrom utf-8 "sintrov\303\241 hr\303\241zka"]
::msgcat::mcset de "point rimstone-dam" [encoding convertfrom utf-8 "Sinterbarriere"]
::msgcat::mcset el "point rimstone-dam" [encoding convertfrom utf-8 "\316\263\316\272\316\277\317\205\317\201 (\316\273\316\271\316\270\317\211\316\274\316\261\317\204\316\271\316\272\317\214 \317\206\317\201\316\254\316\263\316\274\316\261)"]
::msgcat::mcset en "point rimstone-dam" [encoding convertfrom utf-8 "rimstone dam"]
::msgcat::mcset en_UK "point rimstone-dam" [encoding convertfrom utf-8 "rimstone dam"]
::msgcat::mcset en_US "point rimstone-dam" [encoding convertfrom utf-8 "rimstone dam"]
::msgcat::mcset es "point rimstone-dam" [encoding convertfrom utf-8 "gour-presa"]
::msgcat::mcset fr "point rimstone-dam" [encoding convertfrom utf-8 "gours"]
::msgcat::mcset it "point rimstone-dam" [encoding convertfrom utf-8 "gour"]
::msgcat::mcset mi "point rimstone-dam" [encoding convertfrom utf-8 "k\305\215hatu matatara"]
::msgcat::mcset pt "point rimstone-dam" [encoding convertfrom utf-8 "travertino"]
::msgcat::mcset pt_BR "point rimstone-dam" [encoding convertfrom utf-8 "travertino"]
::msgcat::mcset pt_PT "point rimstone-dam" [encoding convertfrom utf-8 "travertino"]
::msgcat::mcset ru "point rimstone-dam" [encoding convertfrom utf-8 "\320\263\321\203\321\200\321\213 \320\261\320\265\320\267 \320\262\320\276\320\264\321\213"]
::msgcat::mcset sk "point rimstone-dam" [encoding convertfrom utf-8 "sintrov\303\241 hr\303\241dza"]
::msgcat::mcset sq "point rimstone-dam" [encoding convertfrom utf-8 "penda guri"]
::msgcat::mcset bg "point rimstone-pool" [encoding convertfrom utf-8 "\321\201\320\270\320\275\321\202\321\200\320\276\320\262\320\276 \320\265\320\267\320\265\321\200\320\276"]
::msgcat::mcset cz "point rimstone-pool" [encoding convertfrom utf-8 "sintrov\303\251 jez\303\255rko"]
::msgcat::mcset de "point rimstone-pool" [encoding convertfrom utf-8 "Sinterbecken"]
::msgcat::mcset el "point rimstone-pool" [encoding convertfrom utf-8 "\316\263\316\272\316\277\317\205\317\201 (\316\273\316\271\316\270\317\211\316\274\316\261\317\204\316\271\316\272\316\256 \316\273\316\265\316\272\316\254\316\275\316\267)"]
::msgcat::mcset en "point rimstone-pool" [encoding convertfrom utf-8 "rimstone pool"]
::msgcat::mcset en_UK "point rimstone-pool" [encoding convertfrom utf-8 "rimstone pool"]
::msgcat::mcset en_US "point rimstone-pool" [encoding convertfrom utf-8 "rimstone pool"]
::msgcat::mcset es "point rimstone-pool" [encoding convertfrom utf-8 "gour-poza"]
::msgcat::mcset fr "point rimstone-pool" [encoding convertfrom utf-8 "gour"]
::msgcat::mcset it "point rimstone-pool" [encoding convertfrom utf-8 "vasca"]
::msgcat::mcset mi "point rimstone-pool" [encoding convertfrom utf-8 "k\305\215hatu kopua wai"]
::msgcat::mcset pt "point rimstone-pool" [encoding convertfrom utf-8 "lago travertino"]
::msgcat::mcset pt_BR "point rimstone-pool" [encoding convertfrom utf-8 "lago travertino"]
::msgcat::mcset pt_PT "point rimstone-pool" [encoding convertfrom utf-8 "lago travertino"]
::msgcat::mcset ru "point rimstone-pool" [encoding convertfrom utf-8 "\320\263\321\203\321\200\321\213 \321\201 \320\262\320\276\320\264\320\276\320\271"]
::msgcat::mcset sk "point rimstone-pool" [encoding convertfrom utf-8 "sintrov\303\251 jazierko"]
::msgcat::mcset sq "point rimstone-pool" [encoding convertfrom utf-8 "vaska uji"]
::msgcat::mcset bg "point root" [encoding convertfrom utf-8 "\320\272\320\276\321\200\320\265\320\275\320\270"]
::msgcat::mcset cz "point root" [encoding convertfrom utf-8 "ko\305\231eny"]
::msgcat::mcset de "point root" [encoding convertfrom utf-8 "Holzreste"]
::msgcat::mcset el "point root" [encoding convertfrom utf-8 "\317\201\316\257\316\266\316\265\317\202"]
::msgcat::mcset en "point root" [encoding convertfrom utf-8 "root"]
::msgcat::mcset en_UK "point root" [encoding convertfrom utf-8 "root"]
::msgcat::mcset en_US "point root" [encoding convertfrom utf-8 "root"]
::msgcat::mcset es "point root" [encoding convertfrom utf-8 "ra\303\255z"]
::msgcat::mcset fr "point root" [encoding convertfrom utf-8 "racine"]
::msgcat::mcset it "point root" [encoding convertfrom utf-8 "radice"]
::msgcat::mcset mi "point root" [encoding convertfrom utf-8 "pakiaka"]
::msgcat::mcset pt "point root" [encoding convertfrom utf-8 "raiz"]
::msgcat::mcset pt_BR "point root" [encoding convertfrom utf-8 "raiz"]
::msgcat::mcset pt_PT "point root" [encoding convertfrom utf-8 "raiz"]
::msgcat::mcset ru "point root" [encoding convertfrom utf-8 "\320\272\320\276\321\200\320\275\320\270 \321\200\320\260\321\201\321\202\320\265\320\275\320\270\320\271"]
::msgcat::mcset sk "point root" [encoding convertfrom utf-8 "korene"]
::msgcat::mcset sq "point root" [encoding convertfrom utf-8 "rrenje"]
::msgcat::mcset bg "point rope" [encoding convertfrom utf-8 "\320\262\321\212\320\266\320\265"]
::msgcat::mcset cz "point rope" [encoding convertfrom utf-8 "lano"]
::msgcat::mcset de "point rope" [encoding convertfrom utf-8 "Seil"]
::msgcat::mcset el "point rope" [encoding convertfrom utf-8 "\317\203\317\207\316\277\316\271\316\275\316\257"]
::msgcat::mcset en "point rope" [encoding convertfrom utf-8 "rope"]
::msgcat::mcset en_UK "point rope" [encoding convertfrom utf-8 "rope"]
::msgcat::mcset en_US "point rope" [encoding convertfrom utf-8 "rope"]
::msgcat::mcset es "point rope" [encoding convertfrom utf-8 "cuerda"]
::msgcat::mcset fr "point rope" [encoding convertfrom utf-8 "corde"]
::msgcat::mcset it "point rope" [encoding convertfrom utf-8 "corda"]
::msgcat::mcset mi "point rope" [encoding convertfrom utf-8 "taura"]
::msgcat::mcset pt "point rope" [encoding convertfrom utf-8 "corda"]
::msgcat::mcset pt_BR "point rope" [encoding convertfrom utf-8 "corda"]
::msgcat::mcset pt_PT "point rope" [encoding convertfrom utf-8 "corda"]
::msgcat::mcset ru "point rope" [encoding convertfrom utf-8 "\320\273\320\270\320\275\320\265\320\271\320\275\320\260\321\217 \320\276\320\277\320\276\321\200\320\260"]
::msgcat::mcset sk "point rope" [encoding convertfrom utf-8 "lano"]
::msgcat::mcset sq "point rope" [encoding convertfrom utf-8 "litar"]
::msgcat::mcset bg "point rope-ladder" [encoding convertfrom utf-8 "\320\277\320\265\321\211\320\265\321\200\320\275\320\260 \321\201\321\202\321\212\320\273\320\261\320\260"]
::msgcat::mcset cz "point rope-ladder" [encoding convertfrom utf-8 "lanov\303\275 \305\276eb\305\231\303\255k"]
::msgcat::mcset de "point rope-ladder" [encoding convertfrom utf-8 "Drahtseilleiter"]
::msgcat::mcset el "point rope-ladder" [encoding convertfrom utf-8 "\316\261\316\275\316\265\316\274\317\214\317\203\316\272\316\261\316\273\316\261"]
::msgcat::mcset en "point rope-ladder" [encoding convertfrom utf-8 "rope ladder"]
::msgcat::mcset en_UK "point rope-ladder" [encoding convertfrom utf-8 "rope ladder"]
::msgcat::mcset en_US "point rope-ladder" [encoding convertfrom utf-8 "rope ladder"]
::msgcat::mcset es "point rope-ladder" [encoding convertfrom utf-8 "escala"]
::msgcat::mcset fr "point rope-ladder" [encoding convertfrom utf-8 "\303\251chelle de corde"]
::msgcat::mcset it "point rope-ladder" [encoding convertfrom utf-8 "scala di corda"]
::msgcat::mcset mi "point rope-ladder" [encoding convertfrom utf-8 "arawhata taura"]
::msgcat::mcset pt "point rope-ladder" [encoding convertfrom utf-8 "escada de corda"]
::msgcat::mcset pt_BR "point rope-ladder" [encoding convertfrom utf-8 "escada de corda"]
::msgcat::mcset pt_PT "point rope-ladder" [encoding convertfrom utf-8 "escada de corda"]
::msgcat::mcset ru "point rope-ladder" [encoding convertfrom utf-8 "\320\263\320\270\320\261\320\272\320\260\321\217 \320\273\320\265\321\201\321\202\320\275\320\270\321\206\320\260"]
::msgcat::mcset sk "point rope-ladder" [encoding convertfrom utf-8 "lanov\303\275 rebr\303\255k"]
::msgcat::mcset sq "point rope-ladder" [encoding convertfrom utf-8 "shkalle litari"]
::msgcat::mcset bg "point sand" [encoding convertfrom utf-8 "\320\277\321\217\321\201\321\212\320\272"]
::msgcat::mcset cz "point sand" [encoding convertfrom utf-8 "p\303\255sek"]
::msgcat::mcset de "point sand" [encoding convertfrom utf-8 "Sand"]
::msgcat::mcset el "point sand" [encoding convertfrom utf-8 "\316\254\316\274\316\274\316\277\317\202"]
::msgcat::mcset en "point sand" [encoding convertfrom utf-8 "sand"]
::msgcat::mcset en_UK "point sand" [encoding convertfrom utf-8 "sand"]
::msgcat::mcset en_US "point sand" [encoding convertfrom utf-8 "sand"]
::msgcat::mcset es "point sand" [encoding convertfrom utf-8 "arena"]
::msgcat::mcset fr "point sand" [encoding convertfrom utf-8 "sable"]
::msgcat::mcset it "point sand" [encoding convertfrom utf-8 "sabbia"]
::msgcat::mcset mi "point sand" [encoding convertfrom utf-8 "onep\305\253"]
::msgcat::mcset pt "point sand" [encoding convertfrom utf-8 "areia"]
::msgcat::mcset pt_BR "point sand" [encoding convertfrom utf-8 "areia"]
::msgcat::mcset pt_PT "point sand" [encoding convertfrom utf-8 "areia"]
::msgcat::mcset ru "point sand" [encoding convertfrom utf-8 "\320\277\320\265\321\201\320\276\320\272"]
::msgcat::mcset sk "point sand" [encoding convertfrom utf-8 "piesok"]
::msgcat::mcset sq "point sand" [encoding convertfrom utf-8 "rane"]
::msgcat::mcset bg "point scallop" [encoding convertfrom utf-8 "\321\204\320\260\321\201\320\265\321\202\320\272\320\270"]
::msgcat::mcset cz "point scallop" [encoding convertfrom utf-8 "erozn\303\255 \303\272tvary"]
::msgcat::mcset de "point scallop" [encoding convertfrom utf-8 "Flie\303\237facette"]
::msgcat::mcset el "point scallop" [encoding convertfrom utf-8 "\317\203\316\272\316\254\316\273\316\277\317\200 (\316\272\316\265\316\275\316\254 \316\264\316\271\316\254\316\262\317\201\317\211\317\203\316\267\317\202)"]
::msgcat::mcset en "point scallop" [encoding convertfrom utf-8 "scallop"]
::msgcat::mcset en_UK "point scallop" [encoding convertfrom utf-8 "scallop"]
::msgcat::mcset en_US "point scallop" [encoding convertfrom utf-8 "scallop"]
::msgcat::mcset es "point scallop" [encoding convertfrom utf-8 "cavitaciones"]
::msgcat::mcset fr "point scallop" [encoding convertfrom utf-8 "vagues d\342\200\231\303\251rosion (coups de gouge)"]
::msgcat::mcset it "point scallop" [encoding convertfrom utf-8 "scallop"]
::msgcat::mcset mi "point scallop" [encoding convertfrom utf-8 "anatipa"]
::msgcat::mcset pt "point scallop" [encoding convertfrom utf-8 "marcas de fluxo"]
::msgcat::mcset pt_BR "point scallop" [encoding convertfrom utf-8 "marcas de fluxo"]
::msgcat::mcset pt_PT "point scallop" [encoding convertfrom utf-8 "marcas de fluxo"]
::msgcat::mcset ru "point scallop" [encoding convertfrom utf-8 "\321\204\320\260\321\201\320\265\321\202\320\272\320\270"]
::msgcat::mcset sk "point scallop" [encoding convertfrom utf-8 "last\303\272rovit\303\251 jamky"]
::msgcat::mcset sq "point scallop" [encoding convertfrom utf-8 "guacat"]
::msgcat::mcset bg "point section" [encoding convertfrom utf-8 "\320\274\321\217\321\201\321\202\320\276 \320\275\320\260 \321\201\320\265\321\207\320\265\320\275\320\270\320\265"]
::msgcat::mcset cz "point section" [encoding convertfrom utf-8 "p\305\231\303\255\304\215n\303\275 \305\231ez"]
::msgcat::mcset de "point section" [encoding convertfrom utf-8 "Schnitt"]
::msgcat::mcset el "point section" [encoding convertfrom utf-8 "\317\204\316\277\316\274\316\256"]
::msgcat::mcset en "point section" [encoding convertfrom utf-8 "section"]
::msgcat::mcset en_UK "point section" [encoding convertfrom utf-8 "section"]
::msgcat::mcset en_US "point section" [encoding convertfrom utf-8 "section"]
::msgcat::mcset es "point section" [encoding convertfrom utf-8 "secci\303\263n"]
::msgcat::mcset fr "point section" [encoding convertfrom utf-8 "section"]
::msgcat::mcset it "point section" [encoding convertfrom utf-8 "sezione"]
::msgcat::mcset mi "point section" [encoding convertfrom utf-8 "roherohenga"]
::msgcat::mcset pt "point section" [encoding convertfrom utf-8 "se\303\247\303\243o"]
::msgcat::mcset pt_BR "point section" [encoding convertfrom utf-8 "se\303\247\303\243o"]
::msgcat::mcset pt_PT "point section" [encoding convertfrom utf-8 "sec\303\247\303\243o"]
::msgcat::mcset ru "point section" [encoding convertfrom utf-8 "\321\201\320\265\321\207\320\265\320\275\320\270\320\265"]
::msgcat::mcset sk "point section" [encoding convertfrom utf-8 "prie\304\215ny rez"]
::msgcat::mcset sq "point section" [encoding convertfrom utf-8 "pike-ndarje"]
::msgcat::mcset bg "point sink" [encoding convertfrom utf-8 "\320\277\320\276\320\275\320\276\321\200"]
::msgcat::mcset cz "point sink" [encoding convertfrom utf-8 "ponor"]
::msgcat::mcset de "point sink" [encoding convertfrom utf-8 "Schluckloch"]
::msgcat::mcset el "point sink" [encoding convertfrom utf-8 "\316\272\316\261\317\204\316\261\316\262\317\214\316\270\317\201\316\261"]
::msgcat::mcset en "point sink" [encoding convertfrom utf-8 "sink"]
::msgcat::mcset en_UK "point sink" [encoding convertfrom utf-8 "sink"]
::msgcat::mcset en_US "point sink" [encoding convertfrom utf-8 "sink"]
::msgcat::mcset es "point sink" [encoding convertfrom utf-8 "sumidero"]
::msgcat::mcset fr "point sink" [encoding convertfrom utf-8 "perte"]
::msgcat::mcset it "point sink" [encoding convertfrom utf-8 "perdita"]
::msgcat::mcset mi "point sink" [encoding convertfrom utf-8 "tapoko"]
::msgcat::mcset pt "point sink" [encoding convertfrom utf-8 "sumidouro"]
::msgcat::mcset pt_BR "point sink" [encoding convertfrom utf-8 "sumidouro"]
::msgcat::mcset pt_PT "point sink" [encoding convertfrom utf-8 "sumidouro"]
::msgcat::mcset ru "point sink" [encoding convertfrom utf-8 "\321\201\321\202\320\276\320\272"]
::msgcat::mcset sk "point sink" [encoding convertfrom utf-8 "ponor"]
::msgcat::mcset sq "point sink" [encoding convertfrom utf-8 "pus"]
::msgcat::mcset bg "point snow" [encoding convertfrom utf-8 "\321\201\320\275\321\217\320\263"]
::msgcat::mcset cz "point snow" [encoding convertfrom utf-8 "sn\303\255h"]
::msgcat::mcset de "point snow" [encoding convertfrom utf-8 "Schnee"]
::msgcat::mcset el "point snow" [encoding convertfrom utf-8 "\317\207\316\271\317\216\316\275\316\271"]
::msgcat::mcset en "point snow" [encoding convertfrom utf-8 "snow"]
::msgcat::mcset en_UK "point snow" [encoding convertfrom utf-8 "snow"]
::msgcat::mcset en_US "point snow" [encoding convertfrom utf-8 "snow"]
::msgcat::mcset es "point snow" [encoding convertfrom utf-8 "nieve"]
::msgcat::mcset fr "point snow" [encoding convertfrom utf-8 "neige"]
::msgcat::mcset it "point snow" [encoding convertfrom utf-8 "neve"]
::msgcat::mcset mi "point snow" [encoding convertfrom utf-8 "huka"]
::msgcat::mcset pt "point snow" [encoding convertfrom utf-8 "neve"]
::msgcat::mcset pt_BR "point snow" [encoding convertfrom utf-8 "neve"]
::msgcat::mcset pt_PT "point snow" [encoding convertfrom utf-8 "neve"]
::msgcat::mcset ru "point snow" [encoding convertfrom utf-8 "\321\201\320\275\320\265\320\263"]
::msgcat::mcset sk "point snow" [encoding convertfrom utf-8 "sneh"]
::msgcat::mcset sq "point snow" [encoding convertfrom utf-8 "bore"]
::msgcat::mcset bg "point soda-straw" [encoding convertfrom utf-8 "\321\206\320\265\320\262\320\270\321\207\320\265\320\275 \321\201\321\202\320\260\320\273\320\260\320\272\321\202\320\270\321\202"]
::msgcat::mcset cz "point soda-straw" [encoding convertfrom utf-8 "br\304\215ka"]
::msgcat::mcset de "point soda-straw" [encoding convertfrom utf-8 "Makkaroni"]
::msgcat::mcset el "point soda-straw" [encoding convertfrom utf-8 "\316\274\316\261\316\272\316\261\317\201\317\214\316\275\316\271\316\261"]
::msgcat::mcset en "point soda-straw" [encoding convertfrom utf-8 "soda straw"]
::msgcat::mcset en_UK "point soda-straw" [encoding convertfrom utf-8 "soda straw"]
::msgcat::mcset en_US "point soda-straw" [encoding convertfrom utf-8 "soda straw"]
::msgcat::mcset es "point soda-straw" [encoding convertfrom utf-8 "fistulosa"]
::msgcat::mcset fr "point soda-straw" [encoding convertfrom utf-8 "fistuleuse"]
::msgcat::mcset it "point soda-straw" [encoding convertfrom utf-8 "tubolare"]
::msgcat::mcset mi "point soda-straw" [encoding convertfrom utf-8 "p\305\253 ngote"]
::msgcat::mcset pt "point soda-straw" [encoding convertfrom utf-8 "canudos"]
::msgcat::mcset pt_BR "point soda-straw" [encoding convertfrom utf-8 "canudos"]
::msgcat::mcset pt_PT "point soda-straw" [encoding convertfrom utf-8 "tubulares"]
::msgcat::mcset ru "point soda-straw" [encoding convertfrom utf-8 "\321\201\321\202\320\260\320\273\320\260\320\272\321\202\320\270\321\202\321\213-\321\201\320\276\320\273\320\276\320\274\320\270\320\275\321\213"]
::msgcat::mcset sk "point soda-straw" [encoding convertfrom utf-8 "br\304\215k\303\241"]
::msgcat::mcset sq "point soda-straw" [encoding convertfrom utf-8 "shkopinje sode"]
::msgcat::mcset bg "point spring" [encoding convertfrom utf-8 "\320\270\320\267\320\262\320\276\321\200"]
::msgcat::mcset cz "point spring" [encoding convertfrom utf-8 "v\303\275v\304\233r"]
::msgcat::mcset de "point spring" [encoding convertfrom utf-8 "Quelle"]
::msgcat::mcset el "point spring" [encoding convertfrom utf-8 "\317\200\316\267\316\263\316\256"]
::msgcat::mcset en "point spring" [encoding convertfrom utf-8 "spring"]
::msgcat::mcset en_UK "point spring" [encoding convertfrom utf-8 "spring"]
::msgcat::mcset en_US "point spring" [encoding convertfrom utf-8 "spring"]
::msgcat::mcset es "point spring" [encoding convertfrom utf-8 "surgencia"]
::msgcat::mcset fr "point spring" [encoding convertfrom utf-8 "source"]
::msgcat::mcset it "point spring" [encoding convertfrom utf-8 "sorgente"]
::msgcat::mcset mi "point spring" [encoding convertfrom utf-8 "waipuna"]
::msgcat::mcset pt "point spring" [encoding convertfrom utf-8 "nascente"]
::msgcat::mcset pt_BR "point spring" [encoding convertfrom utf-8 "nascente"]
::msgcat::mcset pt_PT "point spring" [encoding convertfrom utf-8 "nascente"]
::msgcat::mcset ru "point spring" [encoding convertfrom utf-8 "\320\270\321\201\321\202\320\276\320\272"]
::msgcat::mcset sk "point spring" [encoding convertfrom utf-8 "v\303\275ver"]
::msgcat::mcset sq "point spring" [encoding convertfrom utf-8 "burim"]
::msgcat::mcset bg "point stalactite" [encoding convertfrom utf-8 "\321\201\321\202\320\260\320\273\320\260\320\272\321\202\320\270\321\202"]
::msgcat::mcset cz "point stalactite" [encoding convertfrom utf-8 "stalaktit"]
::msgcat::mcset de "point stalactite" [encoding convertfrom utf-8 "Stalaktit"]
::msgcat::mcset el "point stalactite" [encoding convertfrom utf-8 "\317\203\317\204\316\261\316\273\316\261\316\272\317\204\316\257\317\204\316\267\317\202"]
::msgcat::mcset en "point stalactite" [encoding convertfrom utf-8 "stalactite"]
::msgcat::mcset en_UK "point stalactite" [encoding convertfrom utf-8 "stalactite"]
::msgcat::mcset en_US "point stalactite" [encoding convertfrom utf-8 "stalactite"]
::msgcat::mcset es "point stalactite" [encoding convertfrom utf-8 "estalactita"]
::msgcat::mcset fr "point stalactite" [encoding convertfrom utf-8 "stalactite"]
::msgcat::mcset it "point stalactite" [encoding convertfrom utf-8 "stalattite"]
::msgcat::mcset mi "point stalactite" [encoding convertfrom utf-8 "k\305\215hatu ki te haere ki runga"]
::msgcat::mcset pt "point stalactite" [encoding convertfrom utf-8 "estalactite"]
::msgcat::mcset pt_BR "point stalactite" [encoding convertfrom utf-8 "estalactite"]
::msgcat::mcset pt_PT "point stalactite" [encoding convertfrom utf-8 "estalactite"]
::msgcat::mcset ru "point stalactite" [encoding convertfrom utf-8 "\321\201\321\202\320\260\320\273\320\260\320\272\321\202\320\270\321\202"]
::msgcat::mcset sk "point stalactite" [encoding convertfrom utf-8 "stalaktit"]
::msgcat::mcset sq "point stalactite" [encoding convertfrom utf-8 "stalaktit"]
::msgcat::mcset bg "point stalagmite" [encoding convertfrom utf-8 "\321\201\321\202\320\260\320\273\320\260\320\263\320\274\320\270\321\202"]
::msgcat::mcset cz "point stalagmite" [encoding convertfrom utf-8 "stalagmit"]
::msgcat::mcset de "point stalagmite" [encoding convertfrom utf-8 "Stalagmit"]
::msgcat::mcset el "point stalagmite" [encoding convertfrom utf-8 "\317\203\317\204\316\261\316\273\316\261\316\263\316\274\316\257\317\204\316\267\317\202"]
::msgcat::mcset en "point stalagmite" [encoding convertfrom utf-8 "stalagmite"]
::msgcat::mcset en_UK "point stalagmite" [encoding convertfrom utf-8 "stalagmite"]
::msgcat::mcset en_US "point stalagmite" [encoding convertfrom utf-8 "stalagmite"]
::msgcat::mcset es "point stalagmite" [encoding convertfrom utf-8 "estalagmita"]
::msgcat::mcset fr "point stalagmite" [encoding convertfrom utf-8 "stalagmite"]
::msgcat::mcset it "point stalagmite" [encoding convertfrom utf-8 "stalagmite"]
::msgcat::mcset mi "point stalagmite" [encoding convertfrom utf-8 "k\305\215hatu ki te haere ki raro"]
::msgcat::mcset pt "point stalagmite" [encoding convertfrom utf-8 "estalagmite"]
::msgcat::mcset pt_BR "point stalagmite" [encoding convertfrom utf-8 "estalagmite"]
::msgcat::mcset pt_PT "point stalagmite" [encoding convertfrom utf-8 "estalagmite"]
::msgcat::mcset ru "point stalagmite" [encoding convertfrom utf-8 "\321\201\321\202\320\260\320\273\320\260\320\263\320\274\320\270\321\202"]
::msgcat::mcset sk "point stalagmite" [encoding convertfrom utf-8 "stalagmit"]
::msgcat::mcset sq "point stalagmite" [encoding convertfrom utf-8 "stalagmit"]
::msgcat::mcset bg "point station" [encoding convertfrom utf-8 "\321\200\320\265\320\277\320\265\321\200\320\275\320\260 \321\202\320\276\321\207\320\272\320\260"]
::msgcat::mcset cz "point station" [encoding convertfrom utf-8 "m\304\233\305\231i\304\215sk\303\275 bod"]
::msgcat::mcset de "point station" [encoding convertfrom utf-8 "Messpunkt"]
::msgcat::mcset el "point station" [encoding convertfrom utf-8 "\317\203\316\267\316\274\316\265\316\257\316\277 \317\207\316\261\317\201\317\204\316\277\316\263\317\201\316\254\317\206\316\267\317\203\316\267\317\202"]
::msgcat::mcset en "point station" [encoding convertfrom utf-8 "survey station"]
::msgcat::mcset en_UK "point station" [encoding convertfrom utf-8 "survey station"]
::msgcat::mcset en_US "point station" [encoding convertfrom utf-8 "survey station"]
::msgcat::mcset es "point station" [encoding convertfrom utf-8 "estaci\303\263n"]
::msgcat::mcset fr "point station" [encoding convertfrom utf-8 "station topo"]
::msgcat::mcset it "point station" [encoding convertfrom utf-8 "caposaldo"]
::msgcat::mcset mi "point station" [encoding convertfrom utf-8 "kaimataara"]
::msgcat::mcset pt "point station" [encoding convertfrom utf-8 "base"]
::msgcat::mcset pt_BR "point station" [encoding convertfrom utf-8 "base"]
::msgcat::mcset pt_PT "point station" [encoding convertfrom utf-8 "base"]
::msgcat::mcset ru "point station" [encoding convertfrom utf-8 "\320\277\320\270\320\272\320\265\321\202"]
::msgcat::mcset sk "point station" [encoding convertfrom utf-8 "mera\304\215sk\303\275 bod"]
::msgcat::mcset sq "point station" [encoding convertfrom utf-8 "stacioni I matjes"]
::msgcat::mcset bg "point station-name" [encoding convertfrom utf-8 "\320\270\320\274\320\265 \320\275\320\260 \321\200\320\265\320\277\320\265\321\200\320\275\320\260 \321\202\320\276\321\207\320\272\320\260"]
::msgcat::mcset cz "point station-name" [encoding convertfrom utf-8 "\304\215\303\255slo m\304\233\305\231i\304\215sk\303\251ho bodu"]
::msgcat::mcset de "point station-name" [encoding convertfrom utf-8 "Messpunktname"]
::msgcat::mcset el "point station-name" [encoding convertfrom utf-8 "\317\214\316\275\316\277\316\274\316\261 \317\203\316\267\316\274\316\265\316\257\316\277\317\205 \317\207\316\261\317\201\317\204\316\277\316\263\317\201\316\254\317\206\316\267\317\203\316\267\317\202"]
::msgcat::mcset en "point station-name" [encoding convertfrom utf-8 "survey station name"]
::msgcat::mcset en_UK "point station-name" [encoding convertfrom utf-8 "survey station name"]
::msgcat::mcset en_US "point station-name" [encoding convertfrom utf-8 "survey station name"]
::msgcat::mcset es "point station-name" [encoding convertfrom utf-8 "nombre estacion"]
::msgcat::mcset fr "point station-name" [encoding convertfrom utf-8 "station topo, nom"]
::msgcat::mcset it "point station-name" [encoding convertfrom utf-8 "node del caposaldo"]
::msgcat::mcset mi "point station-name" [encoding convertfrom utf-8 "kaimatara ingoa"]
::msgcat::mcset pt "point station-name" [encoding convertfrom utf-8 "nome de base"]
::msgcat::mcset pt_BR "point station-name" [encoding convertfrom utf-8 "nome de base"]
::msgcat::mcset pt_PT "point station-name" [encoding convertfrom utf-8 "nome de base"]
::msgcat::mcset ru "point station-name" [encoding convertfrom utf-8 "\320\275\320\276\320\274\320\265\321\200 \320\277\320\270\320\272\320\265\321\202\320\260"]
::msgcat::mcset sk "point station-name" [encoding convertfrom utf-8 "\304\215\303\255slo mera\304\215sk\303\251ho bodu"]
::msgcat::mcset sq "point station-name" [encoding convertfrom utf-8 "emri I stacionit-mates"]
::msgcat::mcset bg "point station:fixed" [encoding convertfrom utf-8 "\321\200\320\265\320\277\320\265\321\200\320\275\320\260 \321\202\320\276\321\207\320\272\320\260 (\321\201\321\202\320\260\320\261\320\270\320\273\320\270\320\267\320\270\321\200\320\260\320\275\320\260)"]
::msgcat::mcset cz "point station:fixed" [encoding convertfrom utf-8 "m\304\233\305\231i\304\215sk\303\275 bod (stabilizovan\303\275)"]
::msgcat::mcset de "point station:fixed" [encoding convertfrom utf-8 "dauerhafter Messpunkt"]
::msgcat::mcset el "point station:fixed" [encoding convertfrom utf-8 "\316\274\317\214\316\275\316\271\316\274\316\277 \317\203\316\267\316\274\316\265\316\257\316\277 \317\207\316\261\317\201\317\204\316\277\316\263\317\201\316\254\317\206\316\267\317\203\316\267\317\202"]
::msgcat::mcset en "point station:fixed" [encoding convertfrom utf-8 "fixed survey station"]
::msgcat::mcset en_UK "point station:fixed" [encoding convertfrom utf-8 "fixed survey station"]
::msgcat::mcset en_US "point station:fixed" [encoding convertfrom utf-8 "fixed survey station"]
::msgcat::mcset es "point station:fixed" [encoding convertfrom utf-8 "estaci\303\263n (fija)"]
::msgcat::mcset fr "point station:fixed" [encoding convertfrom utf-8 "station topo, fixe"]
::msgcat::mcset it "point station:fixed" [encoding convertfrom utf-8 "caposaldo fisso"]
::msgcat::mcset mi "point station:fixed" [encoding convertfrom utf-8 "kaimataara whakak\305\215hatu"]
::msgcat::mcset pt "point station:fixed" [encoding convertfrom utf-8 "base fixa"]
::msgcat::mcset pt_BR "point station:fixed" [encoding convertfrom utf-8 "base fixa"]
::msgcat::mcset pt_PT "point station:fixed" [encoding convertfrom utf-8 "base fixa"]
::msgcat::mcset ru "point station:fixed" [encoding convertfrom utf-8 "\321\200\320\265\320\277\320\265\321\200"]
::msgcat::mcset sk "point station:fixed" [encoding convertfrom utf-8 "mera\304\215sk\303\275 bod (stabilizovan\303\275)"]
::msgcat::mcset sq "point station:fixed" [encoding convertfrom utf-8 "stacion mates I palevizshem"]
::msgcat::mcset bg "point station:natural" [encoding convertfrom utf-8 "\321\200\320\265\320\277\320\265\321\200\320\275\320\260 \321\202\320\276\321\207\320\272\320\260 (\320\265\321\201\321\202\320\265\321\201\321\202\320\262\320\265\320\275\320\260)"]
::msgcat::mcset cz "point station:natural" [encoding convertfrom utf-8 "m\304\233\305\231i\304\215sk\303\275 bod (p\305\231\303\255rodn\303\255)"]
::msgcat::mcset de "point station:natural" [encoding convertfrom utf-8 "nat\303\274rlicher Messpunkt"]
::msgcat::mcset el "point station:natural" [encoding convertfrom utf-8 "\317\203\316\267\316\274\316\265\316\257\316\277 \317\207\316\261\317\201\317\204\316\277\316\263\317\201\316\254\317\206\316\267\317\203\316\267\317\202 (\317\206\317\205\317\203\316\271\316\272\317\214)"]
::msgcat::mcset en "point station:natural" [encoding convertfrom utf-8 "natural survey station"]
::msgcat::mcset en_UK "point station:natural" [encoding convertfrom utf-8 "natural survey station"]
::msgcat::mcset en_US "point station:natural" [encoding convertfrom utf-8 "natural survey station"]
::msgcat::mcset es "point station:natural" [encoding convertfrom utf-8 "estaci\303\263n (natural)"]
::msgcat::mcset fr "point station:natural" [encoding convertfrom utf-8 "station topo, naturelle"]
::msgcat::mcset it "point station:natural" [encoding convertfrom utf-8 "caposaldo naturale"]
::msgcat::mcset mi "point station:natural" [encoding convertfrom utf-8 "kaimataara a papa"]
::msgcat::mcset pt "point station:natural" [encoding convertfrom utf-8 "base natural"]
::msgcat::mcset pt_BR "point station:natural" [encoding convertfrom utf-8 "base natural"]
::msgcat::mcset pt_PT "point station:natural" [encoding convertfrom utf-8 "base natural"]
::msgcat::mcset ru "point station:natural" [encoding convertfrom utf-8 "\320\265\321\201\321\202\320\265\321\201\321\202\320\262\320\265\320\275\320\275\320\260\321\217 \321\202\320\276\321\207\320\272\320\260 \320\277\321\200\320\270\320\262\321\217\320\267\320\272\320\270"]
::msgcat::mcset sk "point station:natural" [encoding convertfrom utf-8 "mera\304\215sk\303\275 bod (pr\303\255rodn\303\275)"]
::msgcat::mcset sq "point station:natural" [encoding convertfrom utf-8 "stacion mates natyral"]
::msgcat::mcset bg "point station:painted" [encoding convertfrom utf-8 "\321\200\320\265\320\277\320\265\321\200\320\275\320\260 \321\202\320\276\321\207\320\272\320\260 (\320\261\320\276\321\217\320\264\320\270\321\201\320\260\320\275\320\260)"]
::msgcat::mcset cz "point station:painted" [encoding convertfrom utf-8 "m\304\233\305\231i\304\215sk\303\275 bod (zabarven\303\275)"]
::msgcat::mcset de "point station:painted" [encoding convertfrom utf-8 "farbig markierter Messpunkt"]
::msgcat::mcset el "point station:painted" [encoding convertfrom utf-8 "\317\203\316\267\316\274\316\265\316\257\316\277 \317\207\316\261\317\201\317\204\316\277\316\263\317\201\316\254\317\206\316\267\317\203\316\267\317\202 (\316\262\316\261\316\274\316\274\316\255\316\275\316\277)"]
::msgcat::mcset en "point station:painted" [encoding convertfrom utf-8 "painted survey station"]
::msgcat::mcset en_UK "point station:painted" [encoding convertfrom utf-8 "painted survey station"]
::msgcat::mcset en_US "point station:painted" [encoding convertfrom utf-8 "painted survey station"]
::msgcat::mcset es "point station:painted" [encoding convertfrom utf-8 "estaci\303\263n (pintada)"]
::msgcat::mcset fr "point station:painted" [encoding convertfrom utf-8 "station topo, peinte"]
::msgcat::mcset it "point station:painted" [encoding convertfrom utf-8 "caposaldo verniciato"]
::msgcat::mcset mi "point station:painted" [encoding convertfrom utf-8 "kaimataara tohi"]
::msgcat::mcset pt "point station:painted" [encoding convertfrom utf-8 "base pintada"]
::msgcat::mcset pt_BR "point station:painted" [encoding convertfrom utf-8 "base pintada"]
::msgcat::mcset pt_PT "point station:painted" [encoding convertfrom utf-8 "base pintada"]
::msgcat::mcset ru "point station:painted" [encoding convertfrom utf-8 "\320\275\320\260\321\200\320\270\321\201\320\276\320\262\320\260\320\275\320\275\321\213\320\271 \320\277\320\270\320\272\320\265\321\202"]
::msgcat::mcset sk "point station:painted" [encoding convertfrom utf-8 "mera\304\215sk\303\275 bod (zafarben\303\275)"]
::msgcat::mcset sq "point station:painted" [encoding convertfrom utf-8 "stacion mates I ngjyrosur"]
::msgcat::mcset bg "point station:temporary" [encoding convertfrom utf-8 "\320\262\321\200\320\265\320\274\320\265\320\275\320\275\320\260 \321\200\320\265\320\277\320\265\321\200\320\275\320\260 \321\202\320\276\321\207\320\272\320\260"]
::msgcat::mcset cz "point station:temporary" [encoding convertfrom utf-8 "m\304\233\305\231i\304\215sk\303\275 bod (nestabilizovan\303\275)"]
::msgcat::mcset de "point station:temporary" [encoding convertfrom utf-8 "unmarkierter Messpunkt"]
::msgcat::mcset el "point station:temporary" [encoding convertfrom utf-8 "\317\200\317\201\316\277\317\203\317\211\317\201\316\271\316\275\317\214 \317\203\316\267\316\274\316\265\316\257\316\277 \317\207\316\261\317\201\317\204\316\277\316\263\317\201\316\254\317\206\316\267\317\203\316\267\317\202"]
::msgcat::mcset en "point station:temporary" [encoding convertfrom utf-8 "temporary survey station"]
::msgcat::mcset en_UK "point station:temporary" [encoding convertfrom utf-8 "temporary survey station"]
::msgcat::mcset en_US "point station:temporary" [encoding convertfrom utf-8 "temporary survey station"]
::msgcat::mcset es "point station:temporary" [encoding convertfrom utf-8 "estaci\303\263n topogr\303\241fica"]
::msgcat::mcset fr "point station:temporary" [encoding convertfrom utf-8 "station topo temporaire"]
::msgcat::mcset it "point station:temporary" [encoding convertfrom utf-8 "caposaldo termporaneo"]
::msgcat::mcset mi "point station:temporary" [encoding convertfrom utf-8 "kaimataara mo te w\304\201"]
::msgcat::mcset pt "point station:temporary" [encoding convertfrom utf-8 "base tempor\303\241ria"]
::msgcat::mcset pt_BR "point station:temporary" [encoding convertfrom utf-8 "base tempor\303\241ria"]
::msgcat::mcset pt_PT "point station:temporary" [encoding convertfrom utf-8 "base tempor\303\241ria"]
::msgcat::mcset ru "point station:temporary" [encoding convertfrom utf-8 "\320\262\321\200\320\265\320\274\320\265\320\275\320\275\321\213\320\271 \320\277\320\270\320\272\320\265\321\202"]
::msgcat::mcset sk "point station:temporary" [encoding convertfrom utf-8 "mera\304\215sk\303\275 bod (nestabilizovan\303\275)"]
::msgcat::mcset sq "point station:temporary" [encoding convertfrom utf-8 "stacion mates I perkohshem"]
::msgcat::mcset bg "point steps" [encoding convertfrom utf-8 "\321\201\321\202\321\212\320\277\320\260\320\273\320\260"]
::msgcat::mcset cz "point steps" [encoding convertfrom utf-8 "schody"]
::msgcat::mcset de "point steps" [encoding convertfrom utf-8 "Stufen"]
::msgcat::mcset el "point steps" [encoding convertfrom utf-8 "\317\203\316\272\316\261\316\273\316\277\317\200\316\254\317\204\316\271\316\261"]
::msgcat::mcset en "point steps" [encoding convertfrom utf-8 "steps"]
::msgcat::mcset en_UK "point steps" [encoding convertfrom utf-8 "steps"]
::msgcat::mcset en_US "point steps" [encoding convertfrom utf-8 "steps"]
::msgcat::mcset es "point steps" [encoding convertfrom utf-8 "escalones"]
::msgcat::mcset fr "point steps" [encoding convertfrom utf-8 "marches"]
::msgcat::mcset it "point steps" [encoding convertfrom utf-8 "scalini"]
::msgcat::mcset mi "point steps" [encoding convertfrom utf-8 "nga tapuae"]
::msgcat::mcset pt "point steps" [encoding convertfrom utf-8 "degraus"]
::msgcat::mcset pt_BR "point steps" [encoding convertfrom utf-8 "degraus"]
::msgcat::mcset pt_PT "point steps" [encoding convertfrom utf-8 "degraus"]
::msgcat::mcset ru "point steps" [encoding convertfrom utf-8 "\321\201\321\202\321\203\320\277\320\265\320\275\320\270"]
::msgcat::mcset sk "point steps" [encoding convertfrom utf-8 "schody"]
::msgcat::mcset sq "point steps" [encoding convertfrom utf-8 "shkalle"]
::msgcat::mcset bg "point traverse" [encoding convertfrom utf-8 "\321\202\321\200\320\260\320\262\320\265\321\200\321\201"]
::msgcat::mcset cz "point traverse" [encoding convertfrom utf-8 "traverz"]
::msgcat::mcset de "point traverse" [encoding convertfrom utf-8 "Querung"]
::msgcat::mcset el "point traverse" [encoding convertfrom utf-8 "\317\204\317\201\316\261\316\262\316\255\317\201\317\203\316\261"]
::msgcat::mcset en "point traverse" [encoding convertfrom utf-8 "traverse"]
::msgcat::mcset en_UK "point traverse" [encoding convertfrom utf-8 "traverse"]
::msgcat::mcset en_US "point traverse" [encoding convertfrom utf-8 "traverse"]
::msgcat::mcset es "point traverse" [encoding convertfrom utf-8 "pasamanos"]
::msgcat::mcset fr "point traverse" [encoding convertfrom utf-8 "travers\303\251e"]
::msgcat::mcset it "point traverse" [encoding convertfrom utf-8 "traverso"]
::msgcat::mcset mi "point traverse" [encoding convertfrom utf-8 "hikoi a tupari"]
::msgcat::mcset pt "point traverse" [encoding convertfrom utf-8 "travessia"]
::msgcat::mcset pt_BR "point traverse" [encoding convertfrom utf-8 "travessia"]
::msgcat::mcset pt_PT "point traverse" [encoding convertfrom utf-8 "travessia"]
::msgcat::mcset ru "point traverse" [encoding convertfrom utf-8 "\321\202\321\200\320\276\320\273\320\273\320\265\320\271"]
::msgcat::mcset sk "point traverse" [encoding convertfrom utf-8 "traverz"]
::msgcat::mcset sq "point traverse" [encoding convertfrom utf-8 "kalim anesore"]
::msgcat::mcset bg "point vegetable-debris" [encoding convertfrom utf-8 "\320\276\321\201\321\202\320\260\320\275\320\272\320\270 \320\276\321\202 \321\200\320\260\321\201\321\202\320\270\321\202\320\265\320\273\320\275\320\276\321\201\321\202"]
::msgcat::mcset cz "point vegetable-debris" [encoding convertfrom utf-8 "zbytky rostlin"]
::msgcat::mcset de "point vegetable-debris" [encoding convertfrom utf-8 "Pflanzenreste"]
::msgcat::mcset el "point vegetable-debris" [encoding convertfrom utf-8 "\317\206\317\205\317\204\316\271\316\272\316\254 \316\272\316\261\317\204\316\254\316\273\316\277\316\271\317\200\316\261"]
::msgcat::mcset en "point vegetable-debris" [encoding convertfrom utf-8 "vegetable debris"]
::msgcat::mcset en_UK "point vegetable-debris" [encoding convertfrom utf-8 "vegetable debris"]
::msgcat::mcset en_US "point vegetable-debris" [encoding convertfrom utf-8 "vegetable debris"]
::msgcat::mcset es "point vegetable-debris" [encoding convertfrom utf-8 "detritus vegetales"]
::msgcat::mcset fr "point vegetable-debris" [encoding convertfrom utf-8 "d\303\251bris v\303\251g\303\251taux"]
::msgcat::mcset it "point vegetable-debris" [encoding convertfrom utf-8 "detriti vegetali"]
::msgcat::mcset mi "point vegetable-debris" [encoding convertfrom utf-8 "otaota a hua whenua"]
::msgcat::mcset pt "point vegetable-debris" [encoding convertfrom utf-8 "restos vegetais"]
::msgcat::mcset pt_BR "point vegetable-debris" [encoding convertfrom utf-8 "restos vegetais"]
::msgcat::mcset pt_PT "point vegetable-debris" [encoding convertfrom utf-8 "restos vegetais"]
::msgcat::mcset ru "point vegetable-debris" [encoding convertfrom utf-8 "\320\276\321\201\321\202\320\260\320\275\320\272\320\270 \321\200\320\260\321\201\321\202\320\270\321\202\320\265\320\273\321\214\320\275\320\276\321\201\321\202\320\270"]
::msgcat::mcset sk "point vegetable-debris" [encoding convertfrom utf-8 "zvy\305\241ky rastl\303\255n"]
::msgcat::mcset sq "point vegetable-debris" [encoding convertfrom utf-8 "mbetje perimesh"]
::msgcat::mcset bg "point wall-altitude" [encoding convertfrom utf-8 "\320\262\320\270\321\201\320\276\321\207\320\270\320\275\320\275\320\260 \320\276\321\202\320\274\320\265\321\202\320\272\320\260 \320\275\320\260 \321\201\321\202\320\265\320\275\320\260\321\202\320\260"]
::msgcat::mcset cz "point wall-altitude" [encoding convertfrom utf-8 "nadmo\305\231sk\303\241 v\303\275\305\241ka bodu na st\304\233n\304\233"]
::msgcat::mcset de "point wall-altitude" [encoding convertfrom utf-8 "H\303\266he \303\274ber Koordinatenursprung"]
::msgcat::mcset el "point wall-altitude" [encoding convertfrom utf-8 "\317\215\317\210\316\277\317\202 \317\204\316\277\316\257\317\207\316\277\317\205"]
::msgcat::mcset en "point wall-altitude" [encoding convertfrom utf-8 "altitude"]
::msgcat::mcset en_UK "point wall-altitude" [encoding convertfrom utf-8 "altitude"]
::msgcat::mcset en_US "point wall-altitude" [encoding convertfrom utf-8 "altitude"]
::msgcat::mcset es "point wall-altitude" [encoding convertfrom utf-8 "altura pared"]
::msgcat::mcset fr "point wall-altitude" [encoding convertfrom utf-8 "altitude"]
::msgcat::mcset it "point wall-altitude" [encoding convertfrom utf-8 "altezza"]
::msgcat::mcset mi "point wall-altitude" [encoding convertfrom utf-8 "teitei, tiketike"]
::msgcat::mcset pt "point wall-altitude" [encoding convertfrom utf-8 "altura"]
::msgcat::mcset pt_BR "point wall-altitude" [encoding convertfrom utf-8 "altura"]
::msgcat::mcset pt_PT "point wall-altitude" [encoding convertfrom utf-8 "altura"]
::msgcat::mcset ru "point wall-altitude" [encoding convertfrom utf-8 "\320\262\321\213\321\201\320\276\321\202\320\275\320\260\321\217 \320\276\321\202\320\274\320\265\321\202\320\272\320\260 \321\201\321\202\320\265\320\275\321\213"]
::msgcat::mcset sk "point wall-altitude" [encoding convertfrom utf-8 "nadmorsk\303\241 v\303\275\305\241ka bodu na stene"]
::msgcat::mcset sq "point wall-altitude" [encoding convertfrom utf-8 "lartesia mbidetare e murit"]
::msgcat::mcset bg "point wall-calcite" [encoding convertfrom utf-8 "\320\277\320\276\320\262\320\273\320\265\320\272"]
::msgcat::mcset cz "point wall-calcite" [encoding convertfrom utf-8 "v\303\241pencov\303\275 povlak"]
::msgcat::mcset de "point wall-calcite" [encoding convertfrom utf-8 "Wandsinter"]
::msgcat::mcset el "point wall-calcite" [encoding convertfrom utf-8 "\316\261\317\203\316\262\316\265\317\203\317\204\316\257\317\204\316\267\317\202 \317\204\316\277\316\271\317\207\317\216\316\274\316\261\317\204\316\277\317\202"]
::msgcat::mcset en "point wall-calcite" [encoding convertfrom utf-8 "wall calcite"]
::msgcat::mcset en_UK "point wall-calcite" [encoding convertfrom utf-8 "wall calcite"]
::msgcat::mcset en_US "point wall-calcite" [encoding convertfrom utf-8 "wall calcite"]
::msgcat::mcset es "point wall-calcite" [encoding convertfrom utf-8 "calcita"]
::msgcat::mcset fr "point wall-calcite" [encoding convertfrom utf-8 "mur, calcite"]
::msgcat::mcset it "point wall-calcite" [encoding convertfrom utf-8 "calcite"]
::msgcat::mcset mi "point wall-calcite" [encoding convertfrom utf-8 "t\304\201ra a nga roimata a pakeho"]
::msgcat::mcset pt "point wall-calcite" [encoding convertfrom utf-8 "parede de calcita"]
::msgcat::mcset pt_BR "point wall-calcite" [encoding convertfrom utf-8 "parede de calcita"]
::msgcat::mcset pt_PT "point wall-calcite" [encoding convertfrom utf-8 "parede de calcite"]
::msgcat::mcset ru "point wall-calcite" [encoding convertfrom utf-8 "\320\275\320\260\321\201\321\202\320\265\320\275\320\275\321\213\320\271 \320\272\320\260\320\273\321\214\321\206\320\270\321\202"]
::msgcat::mcset sk "point wall-calcite" [encoding convertfrom utf-8 "v\303\241pencov\303\275 povlak"]
::msgcat::mcset sq "point wall-calcite" [encoding convertfrom utf-8 "kalcit-muri"]
::msgcat::mcset bg "point water" [encoding convertfrom utf-8 "\320\262\320\276\320\264\320\260"]
::msgcat::mcset cz "point water" [encoding convertfrom utf-8 "voda"]
::msgcat::mcset de "point water" [encoding convertfrom utf-8 "Wasser"]
::msgcat::mcset el "point water" [encoding convertfrom utf-8 "\316\275\316\265\317\201\317\214"]
::msgcat::mcset en "point water" [encoding convertfrom utf-8 "water"]
::msgcat::mcset en_UK "point water" [encoding convertfrom utf-8 "water"]
::msgcat::mcset en_US "point water" [encoding convertfrom utf-8 "water"]
::msgcat::mcset es "point water" [encoding convertfrom utf-8 "agua"]
::msgcat::mcset fr "point water" [encoding convertfrom utf-8 "eau"]
::msgcat::mcset it "point water" [encoding convertfrom utf-8 "acqua"]
::msgcat::mcset mi "point water" [encoding convertfrom utf-8 "wai"]
::msgcat::mcset pt "point water" [encoding convertfrom utf-8 "\303\241gua"]
::msgcat::mcset pt_BR "point water" [encoding convertfrom utf-8 "\303\241gua"]
::msgcat::mcset pt_PT "point water" [encoding convertfrom utf-8 "\303\241gua"]
::msgcat::mcset ru "point water" [encoding convertfrom utf-8 "\320\262\320\276\320\264\320\260"]
::msgcat::mcset sk "point water" [encoding convertfrom utf-8 "voda"]
::msgcat::mcset sq "point water" [encoding convertfrom utf-8 "uje"]
::msgcat::mcset bg "point water-flow" [encoding convertfrom utf-8 "\320\262\320\276\320\264\320\275\320\276 \321\202\320\265\321\207\320\265\320\275\320\270\320\265"]
::msgcat::mcset cz "point water-flow" [encoding convertfrom utf-8 "vodn\303\255 tok"]
::msgcat::mcset de "point water-flow" [encoding convertfrom utf-8 "Gerinne"]
::msgcat::mcset el "point water-flow" [encoding convertfrom utf-8 "\317\205\316\264\317\201\316\277\317\201\317\201\316\277\316\256"]
::msgcat::mcset en "point water-flow" [encoding convertfrom utf-8 "water flow"]
::msgcat::mcset en_UK "point water-flow" [encoding convertfrom utf-8 "water flow"]
::msgcat::mcset en_US "point water-flow" [encoding convertfrom utf-8 "water flow"]
::msgcat::mcset es "point water-flow" [encoding convertfrom utf-8 "curso agua"]
::msgcat::mcset fr "point water-flow" [encoding convertfrom utf-8 "rivi\303\250re"]
::msgcat::mcset it "point water-flow" [encoding convertfrom utf-8 "corso d'acqua"]
::msgcat::mcset mi "point water-flow" [encoding convertfrom utf-8 "wairere"]
::msgcat::mcset pt "point water-flow" [encoding convertfrom utf-8 "fluxo de \303\241gua"]
::msgcat::mcset pt_BR "point water-flow" [encoding convertfrom utf-8 "fluxo de \303\241gua"]
::msgcat::mcset pt_PT "point water-flow" [encoding convertfrom utf-8 "fluxo de \303\241gua"]
::msgcat::mcset ru "point water-flow" [encoding convertfrom utf-8 "\320\262\320\276\320\264\320\276\321\202\320\276\320\272"]
::msgcat::mcset sk "point water-flow" [encoding convertfrom utf-8 "vodn\303\275 tok"]
::msgcat::mcset sq "point water-flow" [encoding convertfrom utf-8 "rrjedhe uji"]
::msgcat::mcset bg "point water-flow:intermittent" [encoding convertfrom utf-8 "\320\275\320\265\320\277\320\276\321\201\321\202\320\276\321\217\320\275\320\275\320\276 \320\262\320\276\320\264\320\275\320\276 \321\202\320\265\321\207\320\265\320\275\320\270\320\265"]
::msgcat::mcset cz "point water-flow:intermittent" [encoding convertfrom utf-8 "ob\304\215asn\303\275 vodn\303\255 tok"]
::msgcat::mcset de "point water-flow:intermittent" [encoding convertfrom utf-8 "zeitweises Gerinne"]
::msgcat::mcset el "point water-flow:intermittent" [encoding convertfrom utf-8 "\316\264\316\271\316\261\316\272\316\277\317\200\317\204\317\214\316\274\316\265\316\275\316\267 \317\205\316\264\317\201\316\277\317\201\317\201\316\277\316\256"]
::msgcat::mcset en "point water-flow:intermittent" [encoding convertfrom utf-8 "intermittent water flow"]
::msgcat::mcset en_UK "point water-flow:intermittent" [encoding convertfrom utf-8 "intermittent water flow"]
::msgcat::mcset en_US "point water-flow:intermittent" [encoding convertfrom utf-8 "intermittent water flow"]
::msgcat::mcset es "point water-flow:intermittent" [encoding convertfrom utf-8 "curso agua intermitente"]
::msgcat::mcset fr "point water-flow:intermittent" [encoding convertfrom utf-8 "rivi\303\250re, intermittente"]
::msgcat::mcset it "point water-flow:intermittent" [encoding convertfrom utf-8 "corso d'acqua temporaneo"]
::msgcat::mcset mi "point water-flow:intermittent" [encoding convertfrom utf-8 "wairere taumutumutu"]
::msgcat::mcset pt "point water-flow:intermittent" [encoding convertfrom utf-8 "fluxo de \303\241gua intermitente"]
::msgcat::mcset pt_BR "point water-flow:intermittent" [encoding convertfrom utf-8 "fluxo de \303\241gua intermitente"]
::msgcat::mcset pt_PT "point water-flow:intermittent" [encoding convertfrom utf-8 "fluxo de \303\241gua intermitente"]
::msgcat::mcset ru "point water-flow:intermittent" [encoding convertfrom utf-8 "\320\275\320\265\320\277\320\276\321\201\321\202\320\276\321\217\320\275\320\275\321\213\320\271 \320\262\320\276\320\264\320\276\321\202\320\276\320\272"]
::msgcat::mcset sk "point water-flow:intermittent" [encoding convertfrom utf-8 "ob\304\215asn\303\275 vodn\303\275 tok"]
::msgcat::mcset sq "point water-flow:intermittent" [encoding convertfrom utf-8 "rrjedhe uji me force"]
::msgcat::mcset bg "point water-flow:paleo" [encoding convertfrom utf-8 "\320\277\320\260\320\273\320\265\320\276 \321\200\320\265\321\207\320\275\320\276 \320\273\320\265\320\263\320\273\320\276"]
::msgcat::mcset cz "point water-flow:paleo" [encoding convertfrom utf-8 "paleo\305\231e\304\215i\305\241t\304\233"]
::msgcat::mcset de "point water-flow:paleo" [encoding convertfrom utf-8 "ehemaliges Gerinne"]
::msgcat::mcset el "point water-flow:paleo" [encoding convertfrom utf-8 "\317\200\316\261\316\273\316\261\316\271\316\277\317\205\316\264\317\201\316\277\317\201\317\201\316\277\316\256"]
::msgcat::mcset en "point water-flow:paleo" [encoding convertfrom utf-8 "paleo water flow (scallops)"]
::msgcat::mcset en_UK "point water-flow:paleo" [encoding convertfrom utf-8 "paleo water flow (scallops)"]
::msgcat::mcset en_US "point water-flow:paleo" [encoding convertfrom utf-8 "paleo water flow (scallops)"]
::msgcat::mcset es "point water-flow:paleo" [encoding convertfrom utf-8 "paleocurso agua"]
::msgcat::mcset fr "point water-flow:paleo" [encoding convertfrom utf-8 "rivi\303\250re fossile"]
::msgcat::mcset it "point water-flow:paleo" [encoding convertfrom utf-8 "paleocorso d'acqua"]
::msgcat::mcset mi "point water-flow:paleo" [encoding convertfrom utf-8 "wairere nehera"]
::msgcat::mcset pt "point water-flow:paleo" [encoding convertfrom utf-8 "paleo-fluxo de \303\241gua"]
::msgcat::mcset pt_BR "point water-flow:paleo" [encoding convertfrom utf-8 "paleo-fluxo de \303\241gua"]
::msgcat::mcset pt_PT "point water-flow:paleo" [encoding convertfrom utf-8 "paleo-fluxo de \303\241gua"]
::msgcat::mcset ru "point water-flow:paleo" [encoding convertfrom utf-8 "\320\277\320\260\320\273\320\265\320\276-\320\277\320\276\321\202\320\276\320\272"]
::msgcat::mcset sk "point water-flow:paleo" [encoding convertfrom utf-8 "paleorie\304\215isko"]
::msgcat::mcset sq "point water-flow:paleo" [encoding convertfrom utf-8 "rrjedhe uji e vjeter"]
::msgcat::mcset bg "point water-flow:permanent" [encoding convertfrom utf-8 "\320\277\320\276\321\201\321\202\320\276\321\217\320\275\320\275\320\276 \320\262\320\276\320\264\320\275\320\276 \321\202\320\265\321\207\320\265\320\275\320\270\320\265"]
::msgcat::mcset cz "point water-flow:permanent" [encoding convertfrom utf-8 "vodn\303\255 tok"]
::msgcat::mcset de "point water-flow:permanent" [encoding convertfrom utf-8 "st\303\244ndiges Gerinne"]
::msgcat::mcset el "point water-flow:permanent" [encoding convertfrom utf-8 "\316\274\317\214\316\275\316\271\316\274\316\267 \317\205\316\264\317\201\316\277\317\201\317\201\316\277\316\256"]
::msgcat::mcset en "point water-flow:permanent" [encoding convertfrom utf-8 "water flow"]
::msgcat::mcset en_UK "point water-flow:permanent" [encoding convertfrom utf-8 "water flow"]
::msgcat::mcset en_US "point water-flow:permanent" [encoding convertfrom utf-8 "water flow"]
::msgcat::mcset es "point water-flow:permanent" [encoding convertfrom utf-8 "curso agua"]
::msgcat::mcset fr "point water-flow:permanent" [encoding convertfrom utf-8 "rivi\303\250re, permanente"]
::msgcat::mcset it "point water-flow:permanent" [encoding convertfrom utf-8 "corso d'acqua permanente"]
::msgcat::mcset mi "point water-flow:permanent" [encoding convertfrom utf-8 "wairere"]
::msgcat::mcset pt "point water-flow:permanent" [encoding convertfrom utf-8 "fluxo de \303\241gua permanente"]
::msgcat::mcset pt_BR "point water-flow:permanent" [encoding convertfrom utf-8 "fluxo de \303\241gua permanente"]
::msgcat::mcset pt_PT "point water-flow:permanent" [encoding convertfrom utf-8 "fluxo de \303\241gua permanente"]
::msgcat::mcset ru "point water-flow:permanent" [encoding convertfrom utf-8 "\320\277\320\276\321\201\321\202\320\276\321\217\320\275\320\275\321\213\320\271 \320\262\320\276\320\264\320\276\321\202\320\276\320\272"]
::msgcat::mcset sk "point water-flow:permanent" [encoding convertfrom utf-8 "vodn\303\275 tok"]
::msgcat::mcset sq "point water-flow:permanent" [encoding convertfrom utf-8 "rrjedhe uji e perhershme"]
::msgcat::mcset bg "title carto" [encoding convertfrom utf-8 "\320\223\320\273. \320\272\320\260\321\200\321\202\320\270\321\200\320\276\320\262\320\260\321\207"]
::msgcat::mcset cz "title carto" [encoding convertfrom utf-8 "Kreslil"]
::msgcat::mcset de "title carto" [encoding convertfrom utf-8 "Zeichnung"]
::msgcat::mcset el "title carto" [encoding convertfrom utf-8 "\316\243\316\272\316\261\317\201\316\257\317\206\316\267\316\274\316\261"]
::msgcat::mcset en "title carto" [encoding convertfrom utf-8 "Drawn by"]
::msgcat::mcset en_UK "title carto" [encoding convertfrom utf-8 "Drawn by"]
::msgcat::mcset en_US "title carto" [encoding convertfrom utf-8 "Drawn by"]
::msgcat::mcset es "title carto" [encoding convertfrom utf-8 "Cartograf\303\255a"]
::msgcat::mcset fr "title carto" [encoding convertfrom utf-8 "Dessinateur"]
::msgcat::mcset it "title carto" [encoding convertfrom utf-8 "Cartografia"]
::msgcat::mcset mi "title carto" [encoding convertfrom utf-8 "Kaituhi"]
::msgcat::mcset pt "title carto" [encoding convertfrom utf-8 "Desenhada por"]
::msgcat::mcset pt_BR "title carto" [encoding convertfrom utf-8 "Desenhada por"]
::msgcat::mcset pt_PT "title carto" [encoding convertfrom utf-8 "Desenhada por"]
::msgcat::mcset ru "title carto" [encoding convertfrom utf-8 "\320\232\320\260\320\274\320\265\321\200\320\260\320\273\321\214\320\275\320\260\321\217 \320\276\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260"]
::msgcat::mcset sk "title carto" [encoding convertfrom utf-8 "Kreslil"]
::msgcat::mcset sq "title carto" [encoding convertfrom utf-8 "vizatuar nga"]
::msgcat::mcset bg "title carto (plural)" [encoding convertfrom utf-8 "\320\223\320\273. \320\272\320\260\321\200\321\202\320\270\321\200\320\276\320\262\320\260\321\207\320\270"]
::msgcat::mcset cz "title carto (plural)" [encoding convertfrom utf-8 "Kreslili"]
::msgcat::mcset de "title carto (plural)" [encoding convertfrom utf-8 "Zeichnung"]
::msgcat::mcset el "title carto (plural)" [encoding convertfrom utf-8 "\316\243\316\272\316\261\317\201\316\257\317\206\316\267\316\274\316\261"]
::msgcat::mcset en "title carto (plural)" [encoding convertfrom utf-8 "Drawn by"]
::msgcat::mcset en_UK "title carto (plural)" [encoding convertfrom utf-8 "Drawn by"]
::msgcat::mcset en_US "title carto (plural)" [encoding convertfrom utf-8 "Drawn by"]
::msgcat::mcset es "title carto (plural)" [encoding convertfrom utf-8 "Cartograf\303\255a"]
::msgcat::mcset fr "title carto (plural)" [encoding convertfrom utf-8 "Dessinateurs"]
::msgcat::mcset it "title carto (plural)" [encoding convertfrom utf-8 "Cartografia"]
::msgcat::mcset mi "title carto (plural)" [encoding convertfrom utf-8 "Kaituhi"]
::msgcat::mcset pt "title carto (plural)" [encoding convertfrom utf-8 "Desenhadas por"]
::msgcat::mcset pt_BR "title carto (plural)" [encoding convertfrom utf-8 "Desenhadas por"]
::msgcat::mcset pt_PT "title carto (plural)" [encoding convertfrom utf-8 "Desenhadas por"]
::msgcat::mcset ru "title carto (plural)" [encoding convertfrom utf-8 "\320\232\320\260\320\274\320\265\321\200\320\260\320\273\321\214\320\275\320\260\321\217 \320\276\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260"]
::msgcat::mcset sk "title carto (plural)" [encoding convertfrom utf-8 "Kreslili"]
::msgcat::mcset sq "title carto (plural)" [encoding convertfrom utf-8 "vizatuar nga"]
::msgcat::mcset bg "title cave depth" [encoding convertfrom utf-8 "\320\224\320\265\320\275\320\270\320\262\320\265\320\273\320\260\321\206\320\270\321\217"]
::msgcat::mcset cz "title cave depth" [encoding convertfrom utf-8 "P\305\231ev\303\275\305\241en\303\255"]
::msgcat::mcset de "title cave depth" [encoding convertfrom utf-8 "Niveaudifferenz"]
::msgcat::mcset el "title cave depth" [encoding convertfrom utf-8 "\316\222\316\254\316\270\316\277\317\202"]
::msgcat::mcset en "title cave depth" [encoding convertfrom utf-8 "Depth"]
::msgcat::mcset en_UK "title cave depth" [encoding convertfrom utf-8 "Depth"]
::msgcat::mcset en_US "title cave depth" [encoding convertfrom utf-8 "Depth"]
::msgcat::mcset es "title cave depth" [encoding convertfrom utf-8 "Desnivel"]
::msgcat::mcset fr "title cave depth" [encoding convertfrom utf-8 "Profondeur"]
::msgcat::mcset it "title cave depth" [encoding convertfrom utf-8 "Profondit\303\240"]
::msgcat::mcset mi "title cave depth" [encoding convertfrom utf-8 "H\305\215honu a ana, R\304\223t\305\215tanga"]
::msgcat::mcset pt "title cave depth" [encoding convertfrom utf-8 "Desn\303\255vel"]
::msgcat::mcset pt_BR "title cave depth" [encoding convertfrom utf-8 "Desn\303\255vel"]
::msgcat::mcset pt_PT "title cave depth" [encoding convertfrom utf-8 "Desn\303\255vel"]
::msgcat::mcset ru "title cave depth" [encoding convertfrom utf-8 "\320\223\320\273\321\203\320\261\320\270\320\275\320\260"]
::msgcat::mcset sk "title cave depth" [encoding convertfrom utf-8 "Prev\303\275\305\241enie"]
::msgcat::mcset sq "title cave depth" [encoding convertfrom utf-8 "thellesia"]
::msgcat::mcset bg "title cave length" [encoding convertfrom utf-8 "\320\224\321\212\320\273\320\266\320\270\320\275\320\260"]
::msgcat::mcset cz "title cave length" [encoding convertfrom utf-8 "D\303\251lka"]
::msgcat::mcset de "title cave length" [encoding convertfrom utf-8 "Gesamtl\303\244nge"]
::msgcat::mcset el "title cave length" [encoding convertfrom utf-8 "\316\234\316\256\316\272\316\277\317\202"]
::msgcat::mcset en "title cave length" [encoding convertfrom utf-8 "Length"]
::msgcat::mcset en_UK "title cave length" [encoding convertfrom utf-8 "Length"]
::msgcat::mcset en_US "title cave length" [encoding convertfrom utf-8 "Length"]
::msgcat::mcset es "title cave length" [encoding convertfrom utf-8 "Desarrollo"]
::msgcat::mcset fr "title cave length" [encoding convertfrom utf-8 "Longueur"]
::msgcat::mcset it "title cave length" [encoding convertfrom utf-8 "Sviluppo"]
::msgcat::mcset mi "title cave length" [encoding convertfrom utf-8 "Roa a ana"]
::msgcat::mcset pt "title cave length" [encoding convertfrom utf-8 "Extens\303\243o"]
::msgcat::mcset pt_BR "title cave length" [encoding convertfrom utf-8 "Extens\303\243o"]
::msgcat::mcset pt_PT "title cave length" [encoding convertfrom utf-8 "Extens\303\243o"]
::msgcat::mcset ru "title cave length" [encoding convertfrom utf-8 "\320\224\320\273\320\270\320\275\320\260"]
::msgcat::mcset sk "title cave length" [encoding convertfrom utf-8 "D\304\272\305\276ka"]
::msgcat::mcset sq "title cave length" [encoding convertfrom utf-8 "gjatesia"]
::msgcat::mcset bg "title color-legend-altitude" [encoding convertfrom utf-8 "\320\222\320\270\321\201\320\276\321\207\320\270\320\275\320\275\320\260 \321\201\320\272\320\260\320\273\320\260"]
::msgcat::mcset cz "title color-legend-altitude" [encoding convertfrom utf-8 "Nadmo\305\231sk\303\251 v\303\275\305\241ky"]
::msgcat::mcset de "title color-legend-altitude" [encoding convertfrom utf-8 "H\303\266he des Titelfeldes"]
::msgcat::mcset el "title color-legend-altitude" [encoding convertfrom utf-8 "\316\245\317\210\316\277\316\274\316\265\317\204\317\201\316\271\316\272\316\254"]
::msgcat::mcset en "title color-legend-altitude" [encoding convertfrom utf-8 "Altitudes"]
::msgcat::mcset en_UK "title color-legend-altitude" [encoding convertfrom utf-8 "Altitudes"]
::msgcat::mcset en_US "title color-legend-altitude" [encoding convertfrom utf-8 "Altitudes"]
::msgcat::mcset es "title color-legend-altitude" [encoding convertfrom utf-8 "color (altitud)"]
::msgcat::mcset fr "title color-legend-altitude" [encoding convertfrom utf-8 "Altitudes"]
::msgcat::mcset it "title color-legend-altitude" [encoding convertfrom utf-8 "Profondit\303\240"]
::msgcat::mcset mi "title color-legend-altitude" [encoding convertfrom utf-8 "Teitei, Tiketike"]
::msgcat::mcset pt "title color-legend-altitude" [encoding convertfrom utf-8 "Altitudes"]
::msgcat::mcset pt_BR "title color-legend-altitude" [encoding convertfrom utf-8 "Altitudes"]
::msgcat::mcset pt_PT "title color-legend-altitude" [encoding convertfrom utf-8 "Altitudes"]
::msgcat::mcset ru "title color-legend-altitude" [encoding convertfrom utf-8 "\320\222\321\213\321\201\320\276\321\202\320\275\320\260\321\217 \321\210\320\272\320\260\320\273\320\260"]
::msgcat::mcset sk "title color-legend-altitude" [encoding convertfrom utf-8 "Nadmorsk\303\251 v\303\275\305\241ky"]
::msgcat::mcset sq "title color-legend-altitude" [encoding convertfrom utf-8 "titulli ngjyra-permbajtja-lartesia mbidetare"]
::msgcat::mcset bg "title color-legend-map" [encoding convertfrom utf-8 "\320\232\320\260\321\200\321\202\320\270"]
::msgcat::mcset cz "title color-legend-map" [encoding convertfrom utf-8 "Mapy"]
::msgcat::mcset de "title color-legend-map" [encoding convertfrom utf-8 "Karten"]
::msgcat::mcset el "title color-legend-map" [encoding convertfrom utf-8 "\316\247\316\254\317\201\317\204\316\265\317\202"]
::msgcat::mcset en "title color-legend-map" [encoding convertfrom utf-8 "Maps"]
::msgcat::mcset en_UK "title color-legend-map" [encoding convertfrom utf-8 "Maps"]
::msgcat::mcset en_US "title color-legend-map" [encoding convertfrom utf-8 "Maps"]
::msgcat::mcset es "title color-legend-map" [encoding convertfrom utf-8 "color (mapa)"]
::msgcat::mcset fr "title color-legend-map" [encoding convertfrom utf-8 "Cartes"]
::msgcat::mcset it "title color-legend-map" [encoding convertfrom utf-8 "Mappa"]
::msgcat::mcset mi "title color-legend-map" [encoding convertfrom utf-8 "Mahere whenua"]
::msgcat::mcset pt "title color-legend-map" [encoding convertfrom utf-8 "Mapas"]
::msgcat::mcset pt_BR "title color-legend-map" [encoding convertfrom utf-8 "Mapas"]
::msgcat::mcset pt_PT "title color-legend-map" [encoding convertfrom utf-8 "Mapas"]
::msgcat::mcset ru "title color-legend-map" [encoding convertfrom utf-8 "\320\232\320\260\321\200\321\202\321\213"]
::msgcat::mcset sk "title color-legend-map" [encoding convertfrom utf-8 "Mapy"]
::msgcat::mcset sq "title color-legend-map" [encoding convertfrom utf-8 "hartat"]
::msgcat::mcset bg "title explo" [encoding convertfrom utf-8 "\320\230\320\267\321\201\320\273\320\265\320\264\320\262\320\260\320\275\320\265"]
::msgcat::mcset cz "title explo" [encoding convertfrom utf-8 "Objevil"]
::msgcat::mcset de "title explo" [encoding convertfrom utf-8 "Entdeckung"]
::msgcat::mcset el "title explo" [encoding convertfrom utf-8 "\316\225\316\276\316\265\317\201\316\265\317\205\316\275\316\267\317\204\316\256\317\202"]
::msgcat::mcset en "title explo" [encoding convertfrom utf-8 "Explored by"]
::msgcat::mcset en_UK "title explo" [encoding convertfrom utf-8 "Explored by"]
::msgcat::mcset en_US "title explo" [encoding convertfrom utf-8 "Explored by"]
::msgcat::mcset es "title explo" [encoding convertfrom utf-8 "Exploraci\303\263n"]
::msgcat::mcset fr "title explo" [encoding convertfrom utf-8 "Explorateur"]
::msgcat::mcset it "title explo" [encoding convertfrom utf-8 "Esplorazione"]
::msgcat::mcset mi "title explo" [encoding convertfrom utf-8 "Kaipokai whenua"]
::msgcat::mcset pt "title explo" [encoding convertfrom utf-8 "Explorada por"]
::msgcat::mcset pt_BR "title explo" [encoding convertfrom utf-8 "Explorada por"]
::msgcat::mcset pt_PT "title explo" [encoding convertfrom utf-8 "Explorada por"]
::msgcat::mcset ru "title explo" [encoding convertfrom utf-8 "\320\230\321\201\321\201\320\273\320\265\320\264\320\276\320\262\320\260\320\275\320\270\320\265"]
::msgcat::mcset sk "title explo" [encoding convertfrom utf-8 "Objavil"]
::msgcat::mcset sq "title explo" [encoding convertfrom utf-8 "hulumtuar nga"]
::msgcat::mcset bg "title explo (plural)" [encoding convertfrom utf-8 "\320\230\320\267\321\201\320\273\320\265\320\264\320\262\320\260\320\275\320\265"]
::msgcat::mcset cz "title explo (plural)" [encoding convertfrom utf-8 "Objevili"]
::msgcat::mcset de "title explo (plural)" [encoding convertfrom utf-8 "Entdeckung"]
::msgcat::mcset el "title explo (plural)" [encoding convertfrom utf-8 "\316\225\316\276\316\265\317\201\316\265\317\205\316\275\316\267\317\204\316\255\317\202"]
::msgcat::mcset en "title explo (plural)" [encoding convertfrom utf-8 "Explored by"]
::msgcat::mcset en_UK "title explo (plural)" [encoding convertfrom utf-8 "Explored by"]
::msgcat::mcset en_US "title explo (plural)" [encoding convertfrom utf-8 "Explored by"]
::msgcat::mcset es "title explo (plural)" [encoding convertfrom utf-8 "Exploraci\303\263n"]
::msgcat::mcset fr "title explo (plural)" [encoding convertfrom utf-8 "Explorateurs"]
::msgcat::mcset it "title explo (plural)" [encoding convertfrom utf-8 "Esplorazione"]
::msgcat::mcset mi "title explo (plural)" [encoding convertfrom utf-8 "Kaipokai whenua"]
::msgcat::mcset pt "title explo (plural)" [encoding convertfrom utf-8 "Exploradas por"]
::msgcat::mcset pt_BR "title explo (plural)" [encoding convertfrom utf-8 "Exploradas por"]
::msgcat::mcset pt_PT "title explo (plural)" [encoding convertfrom utf-8 "Exploradas por"]
::msgcat::mcset ru "title explo (plural)" [encoding convertfrom utf-8 "\320\230\321\201\321\201\320\273\320\265\320\264\320\276\320\262\320\260\320\275\320\270\320\265"]
::msgcat::mcset sk "title explo (plural)" [encoding convertfrom utf-8 "Objavili"]
::msgcat::mcset sq "title explo (plural)" [encoding convertfrom utf-8 "hulumtuar nga"]
::msgcat::mcset bg "title legend" [encoding convertfrom utf-8 "\320\233\320\265\320\263\320\265\320\275\320\264\320\260"]
::msgcat::mcset cz "title legend" [encoding convertfrom utf-8 "Legenda"]
::msgcat::mcset de "title legend" [encoding convertfrom utf-8 "Legende"]
::msgcat::mcset el "title legend" [encoding convertfrom utf-8 "\316\244\316\257\317\204\316\273\316\277\317\202"]
::msgcat::mcset en "title legend" [encoding convertfrom utf-8 "Legend"]
::msgcat::mcset en_UK "title legend" [encoding convertfrom utf-8 "Legend"]
::msgcat::mcset en_US "title legend" [encoding convertfrom utf-8 "Legend"]
::msgcat::mcset es "title legend" [encoding convertfrom utf-8 "Leyenda"]
::msgcat::mcset fr "title legend" [encoding convertfrom utf-8 "L\303\251gende"]
::msgcat::mcset it "title legend" [encoding convertfrom utf-8 "Legenda"]
::msgcat::mcset mi "title legend" [encoding convertfrom utf-8 "Kaiwhakaatu"]
::msgcat::mcset pt "title legend" [encoding convertfrom utf-8 "Legenda"]
::msgcat::mcset pt_BR "title legend" [encoding convertfrom utf-8 "Legenda"]
::msgcat::mcset pt_PT "title legend" [encoding convertfrom utf-8 "Legenda"]
::msgcat::mcset ru "title legend" [encoding convertfrom utf-8 "\320\243\321\201\320\273\320\276\320\262\320\275\321\213\320\265 \320\276\320\261\320\276\320\267\320\275\320\260\321\207\320\265\320\275\320\270\321\217"]
::msgcat::mcset sk "title legend" [encoding convertfrom utf-8 "Legenda"]
::msgcat::mcset sq "title legend" [encoding convertfrom utf-8 "permbajtja"]
::msgcat::mcset bg "title preview above" [encoding convertfrom utf-8 "\320\230\320\267\320\263\320\273\320\265\320\264 \320\276\321\202 \320\263\320\276\321\200\320\265"]
::msgcat::mcset cz "title preview above" [encoding convertfrom utf-8 "\133N\303\241hled horn\303\255ch vrstev]"]
::msgcat::mcset de "title preview above" [encoding convertfrom utf-8 "Vorschau oben"]
::msgcat::mcset el "title preview above" [encoding convertfrom utf-8 "\133\317\200\317\201\316\277\316\265\317\200\316\271\317\203\316\272\317\214\317\200\316\267\317\203\316\267 \317\200\316\254\316\275\317\211]"]
::msgcat::mcset en "title preview above" [encoding convertfrom utf-8 "\133Preview above]"]
::msgcat::mcset en_UK "title preview above" [encoding convertfrom utf-8 "\133Preview above]"]
::msgcat::mcset en_US "title preview above" [encoding convertfrom utf-8 "\133Preview above]"]
::msgcat::mcset es "title preview above" [encoding convertfrom utf-8 "Vista previa superior"]
::msgcat::mcset fr "title preview above" [encoding convertfrom utf-8 "\133Pr\303\251visualisation au-dessus]"]
::msgcat::mcset it "title preview above" [encoding convertfrom utf-8 "Anteprima sopra"]
::msgcat::mcset mi "title preview above" [encoding convertfrom utf-8 "Tuhi a ana ki runga"]
::msgcat::mcset pt "title preview above" [encoding convertfrom utf-8 "\133Visualiza\303\247\303\243o acima]"]
::msgcat::mcset pt_BR "title preview above" [encoding convertfrom utf-8 "\133Visualiza\303\247\303\243o acima]"]
::msgcat::mcset pt_PT "title preview above" [encoding convertfrom utf-8 "\133Visualiza\303\247\303\243o acima]"]
::msgcat::mcset ru "title preview above" [encoding convertfrom utf-8 "\133\320\222\320\270\320\264 \320\262\321\213\321\210\320\265]"]
::msgcat::mcset sk "title preview above" [encoding convertfrom utf-8 "\133N\303\241h\304\276ad horn\303\275ch vrstiev]"]
::msgcat::mcset sq "title preview above" [encoding convertfrom utf-8 "parashiqimi lart"]
::msgcat::mcset bg "title preview below" [encoding convertfrom utf-8 "\320\230\320\267\320\263\320\273\320\265\320\264 \320\276\321\202 \320\264\320\276\320\273\321\203"]
::msgcat::mcset cz "title preview below" [encoding convertfrom utf-8 "\133N\303\241hled doln\303\255ch vrstev]"]
::msgcat::mcset de "title preview below" [encoding convertfrom utf-8 "Vorschau unten"]
::msgcat::mcset el "title preview below" [encoding convertfrom utf-8 "\133\317\200\317\201\316\277\316\265\317\200\316\271\317\203\316\272\317\214\317\200\316\267\317\203\316\267 \316\272\316\254\317\204\317\211]"]
::msgcat::mcset en "title preview below" [encoding convertfrom utf-8 "\133Preview below]"]
::msgcat::mcset en_UK "title preview below" [encoding convertfrom utf-8 "\133Preview below]"]
::msgcat::mcset en_US "title preview below" [encoding convertfrom utf-8 "\133Preview below]"]
::msgcat::mcset es "title preview below" [encoding convertfrom utf-8 "Vista previa inferior"]
::msgcat::mcset fr "title preview below" [encoding convertfrom utf-8 "\133Pr\303\251visualisation au-dessous]"]
::msgcat::mcset it "title preview below" [encoding convertfrom utf-8 "Anteprima sotto"]
::msgcat::mcset mi "title preview below" [encoding convertfrom utf-8 "Tuhi a ana ki raro"]
::msgcat::mcset pt "title preview below" [encoding convertfrom utf-8 "\133Visualiza\303\247\303\243o abaixo]"]
::msgcat::mcset pt_BR "title preview below" [encoding convertfrom utf-8 "\133Visualiza\303\247\303\243o abaixo]"]
::msgcat::mcset pt_PT "title preview below" [encoding convertfrom utf-8 "\133Visualiza\303\247\303\243o abaixo]"]
::msgcat::mcset ru "title preview below" [encoding convertfrom utf-8 "\133\320\222\320\270\320\264 \320\275\320\270\320\266\320\265]"]
::msgcat::mcset sk "title preview below" [encoding convertfrom utf-8 "\133N\303\241h\304\276ad spodn\303\275ch vrstiev]"]
::msgcat::mcset sq "title preview below" [encoding convertfrom utf-8 "parashiqimi perfundi"]
::msgcat::mcset bg "title surface bitmap" [encoding convertfrom utf-8 "\320\232\320\260\321\200\321\202\320\260 \320\275\320\260 \320\277\320\276\320\262\321\212\321\200\321\205\320\275\320\276\321\201\321\202\321\202\320\260"]
::msgcat::mcset cz "title surface bitmap" [encoding convertfrom utf-8 "\133Povrchov\303\241 mapa]"]
::msgcat::mcset de "title surface bitmap" [encoding convertfrom utf-8 "Erdoberfl\303\244che"]
::msgcat::mcset el "title surface bitmap" [encoding convertfrom utf-8 "\133\317\207\316\254\317\201\317\204\316\267\317\202 \316\265\317\200\316\271\317\206\316\254\316\275\316\265\316\271\316\261\317\202]"]
::msgcat::mcset en "title surface bitmap" [encoding convertfrom utf-8 "\133Surface Image]"]
::msgcat::mcset en_UK "title surface bitmap" [encoding convertfrom utf-8 "\133Surface Image]"]
::msgcat::mcset en_US "title surface bitmap" [encoding convertfrom utf-8 "\133Surface Image]"]
::msgcat::mcset es "title surface bitmap" [encoding convertfrom utf-8 "Mapa superficie"]
::msgcat::mcset fr "title surface bitmap" [encoding convertfrom utf-8 "\133Carte ext\303\251rieure]"]
::msgcat::mcset it "title surface bitmap" [encoding convertfrom utf-8 "Mappa superficie"]
::msgcat::mcset mi "title surface bitmap" [encoding convertfrom utf-8 "Konohi o te whenua"]
::msgcat::mcset pt "title surface bitmap" [encoding convertfrom utf-8 "\133Mapa de superf\303\255cie]"]
::msgcat::mcset pt_BR "title surface bitmap" [encoding convertfrom utf-8 "\133Mapa de superf\303\255cie]"]
::msgcat::mcset pt_PT "title surface bitmap" [encoding convertfrom utf-8 "\133Mapa de superf\303\255cie]"]
::msgcat::mcset ru "title surface bitmap" [encoding convertfrom utf-8 "\133\320\232\320\260\321\200\321\202\320\260 \320\277\320\276\320\262\320\265\321\200\321\205\320\275\320\276\321\201\321\202\320\270]"]
::msgcat::mcset sk "title surface bitmap" [encoding convertfrom utf-8 "\133Povrchov\303\241 mapa]"]
::msgcat::mcset sq "title surface bitmap" [encoding convertfrom utf-8 "harta e siperfaqes"]
::msgcat::mcset bg "title topo" [encoding convertfrom utf-8 "\320\232\320\260\321\200\321\202\320\270\321\200\320\260\320\273"]
::msgcat::mcset cz "title topo" [encoding convertfrom utf-8 "M\304\233\305\231il"]
::msgcat::mcset de "title topo" [encoding convertfrom utf-8 "Vermessung"]
::msgcat::mcset el "title topo" [encoding convertfrom utf-8 "\316\247\316\261\317\201\317\204\316\277\316\263\317\201\316\261\317\206\316\256\316\270\316\267\316\272\316\265 \316\261\317\200\317\214 \317\204\316\277\316\275"]
::msgcat::mcset en "title topo" [encoding convertfrom utf-8 "Surveyed by"]
::msgcat::mcset en_UK "title topo" [encoding convertfrom utf-8 "Surveyed by"]
::msgcat::mcset en_US "title topo" [encoding convertfrom utf-8 "Surveyed by"]
::msgcat::mcset es "title topo" [encoding convertfrom utf-8 "Topograf\303\255a"]
::msgcat::mcset fr "title topo" [encoding convertfrom utf-8 "Topographe"]
::msgcat::mcset it "title topo" [encoding convertfrom utf-8 "Topografia"]
::msgcat::mcset mi "title topo" [encoding convertfrom utf-8 "Kair\305\253ri"]
::msgcat::mcset pt "title topo" [encoding convertfrom utf-8 "Topografada por"]
::msgcat::mcset pt_BR "title topo" [encoding convertfrom utf-8 "Topografada por"]
::msgcat::mcset pt_PT "title topo" [encoding convertfrom utf-8 "Topografada por"]
::msgcat::mcset ru "title topo" [encoding convertfrom utf-8 "\320\241\321\212\320\265\320\274\320\272\320\260"]
::msgcat::mcset sk "title topo" [encoding convertfrom utf-8 "Zameral"]
::msgcat::mcset sq "title topo" [encoding convertfrom utf-8 "matur nga"]
::msgcat::mcset bg "title topo (plural)" [encoding convertfrom utf-8 "\320\232\320\260\321\200\321\202\320\270\321\200\320\260\320\273\320\270"]
::msgcat::mcset cz "title topo (plural)" [encoding convertfrom utf-8 "M\304\233\305\231ili"]
::msgcat::mcset de "title topo (plural)" [encoding convertfrom utf-8 "Vermessung"]
::msgcat::mcset el "title topo (plural)" [encoding convertfrom utf-8 "\316\247\316\261\317\201\317\204\316\277\316\263\317\201\316\261\317\206\316\256\316\270\316\267\316\272\316\265 \316\261\317\200\317\214 \317\204\316\277\317\205\317\202"]
::msgcat::mcset en "title topo (plural)" [encoding convertfrom utf-8 "Surveyed by"]
::msgcat::mcset en_UK "title topo (plural)" [encoding convertfrom utf-8 "Surveyed by"]
::msgcat::mcset en_US "title topo (plural)" [encoding convertfrom utf-8 "Surveyed by"]
::msgcat::mcset es "title topo (plural)" [encoding convertfrom utf-8 "Espeleometr\303\255a"]
::msgcat::mcset fr "title topo (plural)" [encoding convertfrom utf-8 "Topographes"]
::msgcat::mcset it "title topo (plural)" [encoding convertfrom utf-8 "Topografia"]
::msgcat::mcset mi "title topo (plural)" [encoding convertfrom utf-8 "Kair\305\253ri"]
::msgcat::mcset pt "title topo (plural)" [encoding convertfrom utf-8 "Topografadas por"]
::msgcat::mcset pt_BR "title topo (plural)" [encoding convertfrom utf-8 "Topografadas por"]
::msgcat::mcset pt_PT "title topo (plural)" [encoding convertfrom utf-8 "Topografadas por"]
::msgcat::mcset ru "title topo (plural)" [encoding convertfrom utf-8 "\320\241\321\212\320\265\320\274\320\272\320\260"]
::msgcat::mcset sk "title topo (plural)" [encoding convertfrom utf-8 "Zamerali"]
::msgcat::mcset sq "title topo (plural)" [encoding convertfrom utf-8 "matur nga"]
::msgcat::mcset bg "units ft" [encoding convertfrom utf-8 "\321\204\321\203\321\202\320\276\320\262\320\265"]
::msgcat::mcset cz "units ft" [encoding convertfrom utf-8 "ft"]
::msgcat::mcset de "units ft" [encoding convertfrom utf-8 "ft"]
::msgcat::mcset el "units ft" [encoding convertfrom utf-8 "\317\200\317\214\316\264\316\271\316\261"]
::msgcat::mcset en "units ft" [encoding convertfrom utf-8 "ft"]
::msgcat::mcset en_UK "units ft" [encoding convertfrom utf-8 "ft"]
::msgcat::mcset en_US "units ft" [encoding convertfrom utf-8 "ft"]
::msgcat::mcset es "units ft" [encoding convertfrom utf-8 "ft"]
::msgcat::mcset fr "units ft" [encoding convertfrom utf-8 "ft"]
::msgcat::mcset it "units ft" [encoding convertfrom utf-8 "ft"]
::msgcat::mcset mi "units ft" [encoding convertfrom utf-8 "wh\304\253ti"]
::msgcat::mcset pt "units ft" [encoding convertfrom utf-8 "p\303\251s"]
::msgcat::mcset pt_BR "units ft" [encoding convertfrom utf-8 "p\303\251s"]
::msgcat::mcset pt_PT "units ft" [encoding convertfrom utf-8 "p\303\251s"]
::msgcat::mcset ru "units ft" [encoding convertfrom utf-8 "\321\204\321\203\321\202\320\276\320\262"]
::msgcat::mcset sk "units ft" [encoding convertfrom utf-8 "ft"]
::msgcat::mcset sq "units ft" [encoding convertfrom utf-8 "njesia matese-kembe"]
::msgcat::mcset bg "units m" [encoding convertfrom utf-8 "\320\274"]
::msgcat::mcset cz "units m" [encoding convertfrom utf-8 "m"]
::msgcat::mcset de "units m" [encoding convertfrom utf-8 "m"]
::msgcat::mcset el "units m" [encoding convertfrom utf-8 "\316\274"]
::msgcat::mcset en "units m" [encoding convertfrom utf-8 "m"]
::msgcat::mcset en_UK "units m" [encoding convertfrom utf-8 "m"]
::msgcat::mcset en_US "units m" [encoding convertfrom utf-8 "m"]
::msgcat::mcset es "units m" [encoding convertfrom utf-8 "m"]
::msgcat::mcset fr "units m" [encoding convertfrom utf-8 "m"]
::msgcat::mcset it "units m" [encoding convertfrom utf-8 "m"]
::msgcat::mcset mi "units m" [encoding convertfrom utf-8 "mehua"]
::msgcat::mcset pt "units m" [encoding convertfrom utf-8 "m"]
::msgcat::mcset pt_BR "units m" [encoding convertfrom utf-8 "m"]
::msgcat::mcset pt_PT "units m" [encoding convertfrom utf-8 "m"]
::msgcat::mcset ru "units m" [encoding convertfrom utf-8 "\320\274"]
::msgcat::mcset sk "units m" [encoding convertfrom utf-8 "m"]
::msgcat::mcset sq "units m" [encoding convertfrom utf-8 "njesia matese-metri"]
therion/xtherion/tools.tcl0000644000076400010400000002267310625665162017014 0ustar  userAdministrators# - dzach add toolbar
set xth(tb,me,action) 0
set xth(gui,tb) $xth(gui,main).tb
set allapps {te me cp}

option add *tb*relief flat
option add *tb*overRelief groove
option add *tb*padx 0
option add *tb*indicatorOn off
option add *tb*offRelief flat
option add *tb*Button.width 20
option add *tb*Button.height 20
option add *tb*Radiobutton.width 18
option add *tb*Radiobutton.height 18

option add *edif*relief flat
option add *edif*overRelief groove
option add *edif*padx 0
option add *edif*indicatorOn off
option add *edif*offRelief flat
option add *edif*Button.width 20
option add *edif*Button.height 20
option add *edif*Radiobutton.width 18
option add *edif*Radiobutton.height 18

option add *movf*relief flat
option add *movf*overRelief groove
option add *movf*padx 0
option add *movf*indicatorOn off
option add *movf*offRelief flat
option add *movf*Button.width 20
option add *movf*Button.height 20

frame $xth(gui,tb) -relief raised -bd 1 -padx 5
pack $xth(gui,tb) -side top -anchor nw -fill x
frame $xth(gui,tb).filf

button $xth(gui,tb).newb -image {new_img} \
		-command {
			switch -- $xth(app,active) {
				te {
					xth_te_new_file
				}
				me {
					xth_me_create_file
				}
				cp {
					xth_cp_new_file
				}
			}
		}
xth_status_bar {te me cp} $xth(gui,tb).newb [mc "New file"]



button $xth(gui,tb).openb -image {open_img} \
		-command {
			switch -- $xth(app,active) {
				te {
					xth_te_open_file 1 {} 0
				}
				me {
					xth_me_open_file 1 {} 1
				}
				cp {
					xth_cp_open_file {}
				}
			}
		}
xth_status_bar $allapps $xth(gui,tb).openb [mc "Open file"]

button $xth(gui,tb).saveb -image {save_img} \
		-command {
			switch -- $xth(app,active) {
				te {
					if {$xth(te,fcurr) >= 0} {
					  xth_te_save_file 0 [lindex $xth(te,flist) $xth(te,fcurr)]
					}
				}
				me {
					xth_me_save_file 0
				}
			}
		}
xth_status_bar {te me cp} $xth(gui,tb).saveb [mc "Save file"]
    
button $xth(gui,tb).savasb -image {saveas_img} \
		-command {
			switch -- $xth(app,active) {
				te {
					if {$xth(te,fcurr) >= 0} {
					  xth_te_save_file 1 [lindex $xth(te,flist) $xth(te,fcurr)]
					}
				}
				me {
					xth_me_save_file 1
				}
				cp {
					xth_cp_save_as
				}
			}
		}
xth_status_bar {te me cp} $xth(gui,tb).savasb [mc "Save file as"]

button $xth(gui,tb).closeb -image {close_img} \
 	-command {
			switch -- $xth(app,active) {
				te {
					xth_te_close_file
				}
				me {
					xth_me_close_file
				}
				cp {
					xth_cp_close_file
				}
			}
		}
xth_status_bar {te me cp} $xth(gui,tb).closeb [mc "Close file"]

label $xth(gui,tb).sp01 -relief groove -width 0 -padx 0 -pady 0 -bd 1

frame $xth(gui,tb).winf
button $xth(gui,tb).edb -image {edit_img} \
		-command {
			xth_app_show te
		}
xth_status_bar $allapps $xth(gui,tb).edb [mc "Switch to text editor"]

button $xth(gui,tb).e2db -image {2d_img} \
		-command {
			xth_app_show me
		}
xth_status_bar $allapps $xth(gui,tb).e2db [mc "Switch to map editor"]

button $xth(gui,tb).cpb -image {compile_img} \
		-command {
			xth_app_show cp
		}
xth_status_bar $allapps $xth(gui,tb).cpb [mc "Switch to compiler"]

label $xth(gui,tb).sp02 -relief groove -width 0 -padx 0 -pady 0 -bd 1

frame $xth(gui,tb).makf
button $xth(gui,tb).makeb -text "Make" -image {make_img} \
	-command {
		xth_app_make
	}
xth_status_bar $allapps $xth(gui,tb).makeb [mc "Compile"]

label $xth(gui,tb).sp03 -relief groove -width 0 -padx 0 -pady 0 -bd 1

frame $xth(gui,tb).self
radiobutton $xth(gui,tb).selb -text "Select" -image {select_img} \
		-variable xth(tb,me,action) -value 0 \
		-command {
			xth_me_cmds_set_mode 0
		} -state disabled
xth_status_bar me $xth(gui,tb).selb [mc "Switch to select mode"]

button $xth(gui,tb).selscrb -text "Select scrap" -image {selscr_img} \
		-command {
			xth_me_cmds_set_mode 0
      xth_me_ss_next_cmd 4
		} -state disabled
xth_status_bar me $xth(gui,tb).selscrb [mc "Select next scrap"]

button $xth(gui,tb).selarrb -image {selare_img} \
		-command {
			xth_me_cmds_set_mode 0
      xth_me_ss_next_cmd 6
		} -state disabled
xth_status_bar me $xth(gui,tb).selarrb [mc "Select next area"]
    

label $xth(gui,tb).sp1 -relief groove -width 0 -padx 0 -pady 0 -bd 1
  
frame $xth(gui,tb).edif

button $xth(gui,tb).edif.zoo+b -image {zoom+_img} \
		-command {
			if {$::xth(me,zoom)*2 > 400} return
			xth_me_area_zoom_to [expr {$::xth(me,zoom) * 2}]
		} -state disabled
  xth_status_bar me $xth(gui,tb).edif.zoo+b [mc "Zoom in"]
button $xth(gui,tb).edif.zoo-b -image {zoom-_img} \
		-command {
			if {$::xth(me,zoom)/2 < 25} return
			xth_me_area_zoom_to [expr {$::xth(me,zoom) / 2}]
		} -state disabled
xth_status_bar me $xth(gui,tb).edif.zoo-b [mc "Zoom out"]
label $xth(gui,tb).edif.spZoom -relief groove -width 0 -padx 0 -pady 0 -bd 1

button $xth(gui,tb).edif.scb -image {scrap_img} \
  -command {
    xth_me_cmds_create_scrap {} 1 "" ""
    xth_ctrl_scroll_to me scrap
    xth_ctrl_maximize me scrap
  } -state disabled
xth_status_bar me $xth(gui,tb).edif.scb [mc "Insert new scrap"]

radiobutton $xth(gui,tb).edif.ptrb \
		-image {point_img} -indicatoron off \
		-variable xth(tb,me,action) -value 1 \
		-command {xth_me_cmds_set_mode 1} -state disabled
xth_status_bar me $xth(gui,tb).edif.ptrb [mc "Insert new point"]

radiobutton $xth(gui,tb).edif.lnrb \
		-image {line_img} -indicatoron off \
		-variable xth(tb,me,action) -value 2 \
		-command {
      xth_me_cmds_create_line {} 1 "" "" ""
      xth_ctrl_scroll_to me line
      xth_ctrl_maximize me line
      xth_ctrl_maximize me linept
    } -state disabled

xth_status_bar me $xth(gui,tb).edif.lnrb [mc "Insert new line"]

radiobutton $xth(gui,tb).edif.arrb \
		-image {area_img} -indicatoron off \
		-variable xth(tb,me,action) -value 3 \
		-command {
      xth_me_cmds_create_area {} 1 "" "" ""
      xth_ctrl_scroll_to me ac
      xth_ctrl_maximize me ac
    } -state disabled
xth_status_bar me $xth(gui,tb).edif.arrb [mc "Insert new area"]

button $xth(gui,tb).edif.txrb \
		-image {text_img} \
    -command {
      xth_me_cmds_create_text {} 1 "\n" "1.0"
      xth_ctrl_scroll_to me text
      xth_ctrl_maximize me text
      focus $xth(ctrl,me,text).txt
    } -state disabled

label $xth(gui,tb).sp2 -relief groove -width 0 -padx 0 -pady 0 -bd 1
frame $xth(gui,tb).movf
	button $xth(gui,tb).movf.topb -text "top" -image {top_img} \
		-command {xth_me_cmds_move_up {}}
	button $xth(gui,tb).movf.upb -text "Up" -image {up_img} \
		-command {xth_me_cmds_move_up {}}
	button $xth(gui,tb).movf.dob -text "Down" -image {down_img} \
		-command {xth_me_cmds_move_down {}}
	button $xth(gui,tb).movf.botb -text "Bottom" -image {bottom_img} \
		-command {xth_me_cmds_move_down {}}
	button $xth(gui,tb).movf.tob -text "To" -image {to_img} \
		-command {xth_me_cmds_move_to {} {}}

button $xth(gui,tb).deb -image {delete_img} \
	-command {xth_me_cmds_delete {}} -state disabled
xth_status_bar me $xth(gui,tb).deb [mc "Delete selected object"]

label $xth(gui,tb).sp3 -relief groove -width 0 -padx 0 -pady 0 -bd 1
# - file icons
pack $xth(gui,tb).filf -side left
pack $xth(gui,tb).newb $xth(gui,tb).openb $xth(gui,tb).saveb $xth(gui,tb).savasb \
	 $xth(gui,tb).closeb \
	-side left -anchor center -in $xth(gui,tb).filf
pack $xth(gui,tb).sp01 -padx 7 -pady 5 -fill y -side left -anchor center -in $xth(gui,tb).filf
# - window icons
pack $xth(gui,tb).winf -side left

pack $xth(gui,tb).edb $xth(gui,tb).e2db $xth(gui,tb).cpb \
	-side left -anchor center -in $xth(gui,tb).winf
pack $xth(gui,tb).sp02 -padx 7 -pady 5 -fill y -side left -anchor center -in $xth(gui,tb).winf

# - make icons
pack $xth(gui,tb).makf -side left
pack $xth(gui,tb).makeb \
	-side left -anchor center -in $xth(gui,tb).makf
pack $xth(gui,tb).sp03 -padx 7 -pady 5 -fill y -side left -anchor center -in $xth(gui,tb).makf

# - move icons
# pack $xth(gui,tb).movf -side right -anchor nw
pack $xth(gui,tb).movf.topb $xth(gui,tb).movf.botb $xth(gui,tb).movf.tob \
	$xth(gui,tb).movf.upb $xth(gui,tb).movf.dob \
	-side left -anchor center

# - select icons
pack $xth(gui,tb).self -side right -anchor nw
pack $xth(gui,tb).selb \
	-side left -anchor center -in $xth(gui,tb).self
pack $xth(gui,tb).selscrb $xth(gui,tb).selarrb \
	-side left -anchor center -in $xth(gui,tb).self
pack $xth(gui,tb).sp3 -padx 7 -pady 5 -fill y -side left -anchor center -in $xth(gui,tb).self
pack $xth(gui,tb).deb \
	-side left -anchor center -in $xth(gui,tb).self
#pack $xth(gui,tb).sp1 -padx 7 -pady 5 -fill y -side left -anchor center -in $xth(gui,tb).self

# - edit icons
pack $xth(gui,tb).edif -side right 
pack $xth(gui,tb).edif.zoo+b $xth(gui,tb).edif.zoo-b -side left -anchor center
pack $xth(gui,tb).edif.spZoom -padx 7 -pady 5 -fill y -side left -anchor center
pack $xth(gui,tb).edif.scb $xth(gui,tb).edif.ptrb $xth(gui,tb).edif.lnrb $xth(gui,tb).edif.arrb \
	-side left -anchor center
pack $xth(gui,tb).sp2 -padx 7 -pady 5 -fill y -side left -anchor center -in $xth(gui,tb).edif


proc xth_tools_me_enable {} {
  global xth
  set tools [list \
    $xth(gui,tb).deb $xth(gui,tb).selb $xth(gui,tb).selscrb $xth(gui,tb).selarrb \
    $xth(gui,tb).edif.zoo+b $xth(gui,tb).edif.zoo-b \
    $xth(gui,tb).edif.scb $xth(gui,tb).edif.ptrb $xth(gui,tb).edif.lnrb $xth(gui,tb).edif.arrb \
  ]
  if {$xth(me,fopen)} {
     foreach tl $tools {
       $tl configure -state normal
     }
  } else {
     foreach tl $tools {
       $tl configure -state disabled
     }
  }
}

proc xth_tools_toggle {} {
  global xth
  set xth(gui,toolbar) [expr !$xth(gui,toolbar)]
  if $xth(gui,toolbar) {
    catch {
      pack $xth(gui,tb) -side top -anchor nw -fill x -before $xth(gui,main).$xth(app,active)
    }
  } else {
    catch {
      pack forget $xth(gui,tb)
    }
  }
}therion/xtherion/tools_imgs.tcl0000644000076400010400000012532710625665162020033 0ustar  userAdministratorsimage create photo compile_img -data {
R0lGODlhEAASAPcAAFdVhrLM9LnT9Mfa+c7M+dXh+dXo+ePv+ero1urv+fH2
+QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAP///ywAAAAAEAASAAAImwABCBxIsKBABQgTKkiQQMGB
hwQOKlzo8CFEiQkZJnhowMCBiAAUMgRg8UBHkAgTANi4YEFHAB0NHGR4oKVN
lwYKgDywseZNlwUGgKRp06RNADoFPgRgs6PNAQZ2ejTw0+UAoQKnUv15FSvJ
lwYGtAwLYIAAkDE7DihQ1qxZtB2Dhr0qwOxZgUHl1qVLIEAAkAQCCx482KBh
ggEBADs=
}
image create photo save_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//////9sAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///////8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAMAALAAAAAASABIAQAjEAIEJHEiwYEE5
tm7ZsmRJkhw3EJOkCGCwokVgk7aBc6NCI7iP4Ha5KUFQiSRL27bZsiVpliRJ
SQoAILjSEktJjiC6SaKkhC2CklIK1bZN2y6WSUgOdGNpl9BtCi3dclKC4sAk
ThytnPTSoaQiAWZeHCvw1kdLTnaB/LhNjlKBQb8tXPvRVpO3wCTdutXw5UMn
SiSGIOjGllq2T0daFehEkq2Uu/aytOWkwOCrciRduyWrr8MkARYDK0G6tOkS
IQDgJVswIAA7
}
image create photo saveas_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//////9sAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///////8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAMAALAAAAAASABIAQAjXAIEJHEhQYD1r
1gq6uWXrlqVLsfLlq9coSYkCBTNqJGjrGzgnSXaBA5cPH714bUoQVCLH1jaG
sWQ5kuMmSYAAHG1NsiVJkiM3bmCZZCeJoKRtSJNmw1cPpRKVA91Y2oVUmz59
+WJJclMAAMESbhzpsmWp51ZJKQDg3EhQG7589hIO7AhOkhOR4PSZhNcKqsCj
28juG/m2XiuLRnfdumRpkqRqE1klQRzVlraRJCVGs+amxFqBTiTdQmpZn1a7
BT4DSyKVoaxGPYEmAUDga4nbuHN79st2Y0AAOw==
}
image create photo open_img -data {
R0lGODlhEgAPANUxAOLKdvryrtG5bPXnnNW+b+7Wffv2ybGaWquUV+nRe2pS
MHVeN9/HdIZvQtO8bv375/jspM+3a+DIde/Zg+TXmdnCcdjAcI53Rvz52aWO
VL+rbMGpY39oPfLgj9XBe/HeiMWtZe3Wfuvgp8mxaMy0adXChOvZi/Ljlbyl
YOXOeJmCTJR9Sfz2utzEc6CIT+3VfLegXf///wAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADEALAAAAAASAA8AAAas
wBhsSIwZYwALaXMUijCGR+ngUq2uBxXsWKGwNojMQeOhGDCswaqpCaAGrPjD
wIKcJq7mwc16BP4DHy+DeUcIJygsBhAdBSGDCSkqTQgvb3cFBS+RABKTRyMo
MAMnmi8pAC2qa0cOLjB2mwAMFRYEBKxHDTAnJikSLQQOAsQcTTELLpEMwQIR
KA0KCMcXLinMBAIZCwstx0bVqREqCrnfMVUg0Q7nxzAKn+1GQQA7
}
image create photo make_img -data {
R0lGODlhEAAQAMQfAM/PzyQkJIaGhklJST4+PgoKClVVVR0dHQEBAfn5+ezs
7KOjo5ubm1NTU0ZGRpSUlG9vb2lpaZqamn19fRQUFDo6OjAwMMbGxszMzJ6e
nuPj47Ozs8HBwTMzMwAAAP///yH5BAEAAB8ALAAAAAAQABAAAAVw4Pcl4gdR
hyAq5dpcX+B5xAc85Np5yEPMA8CskbvMeEfkLFOSJZ+F1uf5LHkChaToWCgc
dlUrl+ppJbMfzkI7PS42GNGAPEMwShI64nj/GOhJECMfFR4WH2AGHw4eDjkk
Gxofcx4qHxEsUiICMxOaIQA7
}
image create photo new_img -data {
R0lGODlhEAASAPcAAFdVhrLM9LnT9Mfa+c7M+dXh+dXo+ePv+ero1urv+fH2
+QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAP///yH5BAEAAP8ALAAAAAAQABIAQAiVAAEIHEhQ4L+D
/wAkSHCgoYEDBiIaKFCAgEACGDNq1ChQgUcFCxseAADRgEWSEg0MKDBApUoB
Jz9+TKBg5AGLBwGAZCiyZMSKAiH6lNhywICTElmqNCpggACYHWV6XAgAZ06p
CxkCiIhT506eEAsGBVuyJMuTDoeqVIq0bMSVRo0iTQmXqdOTLJU2ZUogQICT
YgMLDAgAOw==
}
image create photo edit_img -data {
R0lGODlhEgASAPcAABASCC4lJzgvJzgvMUIvJ1ZDMVZNUVZNhGBNMWBNPHRq
UYhNJ4hhMZJXPJxDCJxqMaZNCLBhMbCIcLDN97p+PLrX98RhEsR+RsTX985h
CM5+W85+Zc6whM7N99hqCNhqPNiSUdjh99jr9+JqJ+KcUeLr9+ySW+yccOyw
cOzr1+z19/d+CPeICPeSMfewj/e5j/fDrvfNpPfXuPfhw/fhzffh1/frrvf1
4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAP///yH5BAEAAP8ALAAAAAASABIAQAjdAA8IHEhQ4L+D
C1DYOKCihMMSIl7IqHFiBQsWGSAA+Hegg8ePIEEeOMhQhcmTDg88IBGjhUUW
B0qEkOlihgsNDRYgAIChw0iOJ4M2jNmBAQkZLWCifCjiAoiWLzPGhBgixAsa
Mk58GGHBAYCfB6qGUCBBQ4IEAjBgqDDBJ0mhQTuOXEDCRouScEscEGEUqUW8
JplSYJn0oge8TF+gaHkRo8apEEWEiHEDhokVKzJ4JSlThOQYNW5GWLAAgFuO
YifD2NAAQYC0FU4fwBCCg4IABAyorcA2NtiCwAkeDAgAOw==
}
image create photo close_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAiKAP8JHEiwYMEk
ACQJLAGAxLaBJAA8NDhQG8WCEQG0kWRLUkaFBRm2OQigpK2L2iQlSbIRZUmG
DgkiHDmwDYBIMhtaLGnQVsmSGQEkuUi0qM2fL08aPFpiosCjTv9J0rgtYkyB
2xrmVPoPIQCL/yI69VmCJAA3Qgv6FKp029S0FLe1YVgyCdeiRQMCADs=
}
image create photo 2d_img -data {
R0lGODlhEAASAPcAAFdVhrLM9LnT9Mfa+c7M+dXh+dXo+ePv+ero1urv+fH2
+QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAP///ywAAAAAEAASAAAImwABCBxIsKBABQgTKkiQQMGB
hwQOKlzo8CFEiQkZJnhowMCBiAAQLlAw0OKBjiBFJgBwgGXHlwYOJljQUuDJ
lwVAHphpMebNAgNAMqR58iRIAjltHqAJE8CAAgAM6DSwAGbMAVdBeqx6M6hA
Al5dVjXwFKtZAVqpdiw7YIAAt2kXyJ1LF61AoEANvG2LNkCAowQCCx4s2KBh
ggEBADs=
}
image create photo 3d_img -data {
R0lGODlhEAASAPcAAFdVhrLM9LnT9Mfa+c7M+dXh+dXo+ePv+ero1urv+fH2
+QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAP///ywAAAAAEAASAAAIngABCBxIsKBABQgTKkiQQMGB
hwQOKjx4YOCBiAAULkwAoKIBAwAwIlywUODDjiBFKljA8CTIjwBAZkyw4CTK
gQUwHqD58MBHnwYKDMDIsKZPoB8L5DR5oOZHAwsMDBBqQCfUp1GlSh0q0EBT
r1GnDhjLFWXUBWK1DhCA8eOCsELHCljbFurbu3jZChRKda5cAgECYCRAuLBh
wwYTEwwIADs=
}
image create photo up_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAiWAP9ts0WQ4L+D
CBMebFOCRImGthQiTNfuHwkAGDEmkahQUhIkH0OC3CiRBAEAJ09iPBnJHbmE
SRrKlMUxYSSROJFsswcOnL2DthzFESqp5j95RpNazKhRqdOS3KJKlUqpTTlw
4Z4irIiwBFMAJCXa0wd0oFlbZhHaK3cwicO3MkmQKNoxSQoiKZJoU2orTZM0
bdJsSxoQADs=
}
image create photo bottom_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAiqAP8JHCjQVpuD
BwkKLGePIICHEJMQREGLFiZalHDRykWpFiZKEhUqLEGiZAkQbgjaA5eOIAmI
D0MOvKcwSYmbJG0plKdwmy5rumzpEpmuocijBW0pXcpU506FMGMqBGcUKdGq
/17ClCkQ6z9bbtqETWlVoE0SSUgUcSowXTlyVdOSLClJoTuFumRZ0stWIAo4
gAFDgjN4MJsmBK01iuQokhtJbSBLktOIYEAAOw==
}
image create photo down_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAihAP8JHEjwnzZb
CG1pK8hwG4CHJAKQ2MaQoK2HGAHYYpikBJISHZOETDIwHThw2pBw48ZrJcuV
TDZWFLitBAmbJUoItCdvn71/kty0EdpmaFFJO//9nMm0qdOBtkgAAAFx4dOZ
8sppy8j14UZ37WZu26ZtLEV74MSSkEqCwESB6ci5Ayqyrt1IA3na24cECRO/
ff8iIem0bpEUhJu2qVv0X0AAOw==
}
image create photo to_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAiNAP8JHEiwoEGB
7eT9s4QkScOHbQ4SdAOgokVJEjNq/GeLBAkCH0ls0yjJ4kWSIACEUEnClj2B
L9OV09cGyUOHDTf+22VLly1bu3QmGZpiqNChQyNq7EgCRNOWG7fpuqVr18hy
9uSl+0cOXDoS3MKK5cbGVsF7OkmuBJASqsY2bdy0ceImapISJPAm+RcQADs=
}
image create photo top_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAilAP/922aroMGD
trYJXBipjcM2bhZKlGgLgMWLbSZq3ChR3sRtJEoAEFnClkRy9igywcWypUtc
cBot3AaCJIgCkhaWCxduYpISJFKQSKKto76J2mxZU3prYrqUC7UlgROHKhw4
bOKwoYrE5EJJD8OKlaiNAAgSJM7mXAjO48dtu7YplNiW4kWMEttx3KvRFom7
INbuBRt2orujEn+WWFxirkCoAgMCADs=
}
image create photo selscr_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAitAP8JHEiw4MBb
J0qceHOrYcN/AJJsO3HLoC1JBgWSSJJxWxISG0+IPOEG48BttyadMDGgIkQA
AEhI0paRoEqKBbe9UVJikkOXDgmWcPPz1seXEf9tI4hS4aSBNNsAqEm1qsBt
tgaYMHGiTRuDkki4seXwzZKHAwcsGeDz57+vkyYtFXhCwIm2DZ/ClGiCo7YS
DtcK4IgUwFeCKbWemAvAFonDBW+R6AjAjVWqAQEAOw==
}
image create photo delete_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAjCAP8JHKitTZKD
2wYq/CfpIImDbSK1aUPiYZKF/7QlseiwhCSMSbTZGkmypDZJkQY2nMhSosSJ
FxW2SWPp3zZJtradNJhyIIlIcSLJsqXNmi5rliI1avJR4EqWTdpETWIwplOq
EyU2arMVJsabaRLaTGIL4z8SJHXZioSzZJum/5JEIirSpEi2KgEkaYQykl+/
bUqQUPi0SZIiJQ5SPUgYycSucVh6HSgLa5zIWllazZiCSBs3Wx21ibwRLsaT
OMUqDAgAOw==
}
image create photo selare_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAjCAP8JHPhv25sl
J04cSXhC4LYT9iJKlLbmFokk/yJW/HdkzZElBEMmIRHyhDSJKFE2PGFN4iuQ
A0kAAEBCkrWQt07ISinx0RuBt47wtLft3z2JFdfsdNlQoEwARf4t2TbpUUR5
TQcWtQRAW0iHCh1Jk4fyyC6COU/yJCvtyMAlrlLeO1pW4JKlKbe1Marx1qQ1
EY/ee3Vi0j+ZGO0tubVEbcSs/0rMBJBk27YjjhcTrFkihVaI9hb9/PqPMsFJ
t0iTDggAOw==
}
image create photo select_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAhPAP8JHEiwoMGB
ABIqtHWwocOCCRk+PFgCgKSJ/yRiRKhQ20YASZIAaLNx4LaE20qqBKDxY8SS
Cl9OjJlE0sWHSf6dBKDyXyQAJHre7HkwIAA7
}
image create photo sellin_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAiXAP8JHEhw4JsT
J5bcKkiQ3L82JBgeXJKQoUBJALRZZDhrxKNJS5b8C/lmyQhrBNsAWNlG0saC
JybNunXrxMubBfWVsydQJYCIAkHekjXrkciBtgQCcIkzqMJbk2ziXPKolKya
TcnNWnLg0U198pji1MlTJVCCt5ZM+keOZ8+VPweeuDWrlNqUSZIAIDiX5l2G
Kc4GXdg0IAA7
}
image create photo selpt_img -data {
R0lGODlhFAASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAAUABIAQAhsAP8JHEiwoEGD
9tqQ2HawYUFJCx0KJDfr1i1n7SQeTAKgoyRbGgXKsxeSILlbDKVlLDmwSUcC
DFla+7cNgCSWOAfKI6csWTmW9pJZ3DWLHEt55aw10pZTYBsAEXG67Bg1ZBo3
T5sKLEFCq8OAADs=
}
image create photo insend_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAiDAP8JHEhQoL10
5MrJK0hwWxuGA5eckPgGoi05EDOWS3XLGTmBE98sMWExSUaG9pLdmtSx3cl/
tiS9HGjy5BKWSm7dJGirTRISbWTO/FdO1q1Z5fTNPLiy5VBrycilsze0qtVJ
S25l1Cb0H9amJwpybVNCkq1/Om+pDcvQVs2B2yZZDQgAOw==
}
image create photo inspt_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAinAP8JHEhw4JsT
J5ZsK/jPXrJbJdzISsfwVsIlJxgKbGNLo8ZZA5TcWvLm38E3Swa40Ziko8eC
JybdmpmRoTxyycoRk/RyIKlirpyBY7jtxC1JbibVHCinDYkkHHsKnLREJkqp
/6pGtPhSnr5/RZRgLKmR3CyIpeRhLbfVWTyN295M+pckjr12agVK0jYw5qQS
JsgOlCSpRJu9/2LOfCOYYMuCMrH+CwgAOw==
}
image create photo join_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAieAP8JPLFkyYk3
Av8RNIgwocNtECAwgADDoUWHA968WTLpYsJtu7aJTHht17VtHlNetCVJ0gA3
tzQmPHFrkpIlLVPWYaDSIwwIdVJq2zZ06IBJk5a8KUp0G0uXMGUOrKnERE6B
A5YcOTjTIFeVVRho65lQl7YqEP6NJftvJwOxbBNWjPtvwIkTBzpalJSkr98B
JUwI9uvXI9I3k25dDAgAOw==
}
image create photo split_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAimAP8JHPjmxJIl
AwYqXPgvXTpw5Ny1Yyhw0pI3BQdaxHiC4sBtAkF6ZGhPn0dJKFMqWeLGzYCU
KW15BFduJMOH4OJR1LbNzZJbtzpWfHNr0gltPFFGkhSpjRIVapy8jLTUjSSZ
Cx8ZXDLC5kJ38rwuBJdOrEB74NKCM2mWHDmbkwacGJCw4oERB+r+S5LEhAlJ
QTUSVTKAbxuBuzC+mTMw8ZtJjwYGBAA7
}
image create photo delpt_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAiZAP8JHEhQ4K0T
CCcVFEhulpsSt8rpW3hiyZITChdq3ChwgIlJb04IrBjSBMeTBCctucXyzRuN
5ZIlI0cG5b9WwJI5KyaP4qRbSlTeIigpidEkkmz+w3hr0oltKG8teXjrTcaF
9uz9k1RiTcWhC9s5u+WmSDmb6RSV+EluI8hblkj8i9duo0uyJUQSbcO3TVKh
t2bptdlU6b+AADs=
}
image create photo insbeg_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAikAP8JzKdPoEGD
b06cWLLNIL58B9s0PGjQHjllycpRNNhGG0V6EDfeGjBp0pIl/9yVa5aMnKyN
/5LYovgQ5olJt3KecFiQYhuYAvH1bDMTqL5ytyK5kaUxYhsSSYgapNeToslZ
t96gDFr14JJJl3DuDBpy45sjJ94cJLhxIkyQQIGiixdXkkeB5G7FkuSsHUVJ
kki0sfuvnKycfWHKpCjPXtyDAQEAOw==
}
image create photo point_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAhCAP8JHEiwoMGB
J24pXDLpoMOHECMSvPWmocSLDifdwphw4RuMIEOKHEnwzYklJ05IvLVE4a1J
KiOafIOSpM2b/wICADs=
}
image create photo scrap_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAiUAP8JHEiwIMEl
bwIMuMWw4a1JS05M2mYwiSSDGAvakpQkgIASAgKQaCPQVsM3J04IyMhy4LY3
tzJKIuHG4cOGLgUsmeSQI4ATJkycSGKL4K03A068acm0acEBEWNitEWihMVb
J5IyHIh1QAmeNh0OfBP0RFisQk+4oegmyck3SUpc3Ba14DasSoQ63caRotN/
flsGBAA7
}
image create photo text_img -data {
R0lGODlhEgASAPcAAAQEBBoaGiQkJC8vLzo6OkRERE9PT1paWmRkZG9vb4SE
hJqamqSkpK+vr7q6usTExM/Pz9ra2uTk5Pr6+gAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAP///yH5BAEAAP8ALAAAAAASABIAQAiPAP8JHEiwoMEF
ABI6+Bcg4YAHBgxKFEjgwAICDAwm3AhAwT+IBQVwHBkApEQHHAkINFnQQEIB
CjZCYCkwwsYDAhskLBlxYIKNHgdKAMBzosQABhwIWGAQwUgJH3sWZLBRJIAB
USVuTAABKE2KGwU6Jfo15siNRQd23VigbYEBZKX+S3CgrsEHM+Uarcn3X0AA
Ow==
}
image create photo area_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAiiAP8JHEjw1qQ3
a95M2iZw0hp7ECPak/VIorwT/xzae4SRoEeP207Ikkhy48IlEeWtmfRR4K03
IE8skgZRXkRpHf89eliSpLQl/06QlHWCocA1J179DBrRFdCWUAVyPLHm0StZ
rxLGnNUT4pJbA0+46toUZlBrZCViXEIz5asTR96MqGgP57YjNe1NKwpyyYmv
KO3ds5czKluvYKMO9LtG8cCAADs=
}
image create photo line_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAhyAP8JHEhw4K0l
kwoW3EbClsJ/205MuvVmycOLGE+UcEMx4ZsBJzRKwkiS4IlbKN+8Iclw5ESM
DTEivLVxya2SOCuqPLGtZMRJSm5NOuGzxIklIVnGxPlvKcae/0o4xHjr5CQT
REsueSO0KlSSB0+sxBkQADs=
}
image create photo zoom+_img -data {
R0lGODlhEgASAPcAAEdISVZXh3Z2d3Z+f31+nn1+po2VnpWVnpWdnpWdvZ2d
pp2drZ2lpqWlpqWltaWlvayltaytxbStvbS1vbS1zLy8xcS8xcTExcTU5MzM
zMzM3MzU69TU3NTc5NTc89vc6+Pr++vr6+vr8+vz+/Pz8/Pz+/v7+wAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAP///yH5BAEAAP8ALAAAAAASABIAQAiTAP8JHEiwoMEA
JhKaOMBghEMQAQxKnFiQQIAIHDQ8CEBgIgQCJRx26ACiZAAJFFMWlIAwYQgR
JkISmHBQYQmGI0pClJiBI4UNGCIEWKCyqMELFjk+SEnggcKEIxZEPEhCIYIG
IUd8mDrQAoGEAgCIBTCgZIELBQN8iDnCgAKdHrgSDADhoc4EHSlW2EjAQQWj
KgMCADs=
}
image create photo zoom-_img -data {
R0lGODlhEgASAPcAAEdISVZXh3Z2d3Z+f31+nn1+ppWdvZ2drZ2dtaWltaWl
vayltaytxbStvbS1vbS1zLy8xcS8xcTExcTU5MzMzMzM3MzU69TU3NTc89vc
6+Pr++vz+/Pz8/Pz+/v7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAP///yH5BAEAAP8ALAAAAAASABIAQAiGAP8JHEiwoMEA
HhIq3MBQQwCDECMWJBCAwYUKCgIQiLiAQAeGDTU4bCCxZMEGCBUm/EjAwUGF
H0M6hEhB4wMLExgEQGCyp0EJFDUqKElAgUoPGw48PMjhaMwMSwdGIJBQAICr
AAaILCChYIAMHmJuEKkBQ1SCARbI1GBgo0QIGQkkgODTZEAAOw==
}

therion/xtherion/xtherion.ini0000644000076400010400000001232611566246464017510 0ustar  userAdministrators## This TCL script is loaded whenever xtherion is started. You can
## modify some settings here. Only some variables are listed here.
## If you have specific needs, don't hesitate to ask authors.

## directory where xtherion starts
# set xth(gui,initdir) ""

## Enable/disable toolbar at startup
# set xth(gui,toolbar) 1

## Set template for text editor
# set xth(te,template) {
#survey ... -title "..."
#  centreline
#    team "..."
#    team "..."
#    date ...
#    units clino compass grad
#    data normal from to compass clino length
#       ... ... ... ... ...
#  endcentreline
#endsurvey
# }

## prefered language for messages
# ::msgcat::mclocale en

## Enable/disable balloon hints
# set xth(gui,balloons) 0

## Enable/disable auto save at startup
# set xth(gui,auto_save) 0

## Enable/disable creation of configuration backup files after successful 
## compilation. Second parameter is backup file extension.
# set xth(gui,auto_backup) 0
# set xth(gui,auto_backup_ext) "~"

## input keyboard encoding
# set xth(app,sencoding) iso8859-2

## default text file encoding
# set xth(app,fencoding) iso8859-2

## starting toolbar width (in pixels) for text editor (te), map editor (me)
## compiler (cp) or all applications (all)
# set xth(app,all,tbwidth) 256
# set xth(app,te,tbwidth) 256
# set xth(app,me,tbwidth) 256
# set xth(app,cp,tbwidth) 256

## supported keyboard encodings
# set xth(kbencodings) {iso8859-1 iso8859-2 cp1250 cp1251 macCentEuro unicode}

## editor font
# set xth(gui,efont) {fixed -20}

## label font
# set xth(gui,lfont) {helvetica -12 bold}

## show compilation progess
# set xth(gui,compshow) 0

## size of object type combobox
# set xth(gui,me,typelistwidth) 16

## size of scrap scaling square
# set xth(gui,me,scrap,psize) 4

## size of point
# set xth(gui,me,point,psize) 4

## size of line point
# set xth(gui,me,line,psize) 4

## line width
# set xth(gui,me,line,width) 3

## size of line control point
# set xth(gui,me,line,cpsize) 4

## width of line between point and control point
# set xth(gui,me,line,clwidth) 2

## size of start line tick
# set xth(gui,me,line,ticksize) 10

## width of start line tick
# set xth(gui,me,line,tickwidth) 3

## DXF/SVG import settings
## size of imported image in pixels
# set xth(import,size) 1024.0
## minimal distance betweend nearest points (in pixels)
# set xth(import,mind) 8.0 
## exact screen scale (number of pixels to 1 unit in imported file),
## (overrides previous two values)
# set xth(import,sscl) 1.0
## scale of DXF file (meters per unit)
# set xth(import,dxf,scale) 1.0
## default coordinate system for DXF file
# set xth(import,dxf,cs) {}
## scale of SVG file (meters per unit)
# set xth(import,svg,scale) 0.1
## default coordinate system for SVG file
# set xth(import,svg,cs) UTM34

## XVI settings
## grid color
# set xth(gui,xvi_grid_clr) #00D0D0
## station outline color
# set xth(gui,xvi_station_oclr) black
## station fill color
# set xth(gui,xvi_station_fclr) black
## station size (radius)
# set xth(gui,xvi_station_size) 3.0
## survey shot color
# set xth(gui,xvi_shot_clr) gray50
## walls outline color
# set xth(gui,xvi_walls_fclr) gray60
## walls fill color
# set xth(gui,xvi_walls_fclr) gray80
## walls fill pattern
# set xth(gui,xvi_walls_fptn) gray12
## sketch line width
# set xth(gui,xvi_sketch_line_width) 1

## Formats of items in centerline data table
## default format
# set xth(datafmt,unknown) {4s}                    
## survey stations
# set xth(datafmt,station) {4s}                    
## lengths (tape, length, dxyz, etc...)
# set xth(datafmt,length) {6.2fx {-}}             
## counter
# set xth(datafmt,counter) {6.2f {-}}            
## bearing (compass)
# set xth(datafmt,bearing) {5.1fx {-}}             
## gradient (clino)
# set xth(datafmt,gradient) {{5.1fx} {up down -}} 
## depth
# set xth(datafmt,depth) {6.2fx {-}}            
## dimensions (up, down, etc...)
# set xth(datafmt,dimensions) {4.1fx {-}}             
## To specify formatting for custom data item us
# set xth(datafmt,XXX,format) 4.1f
## where XXX is compass, gradient or any other data item.
## To specify special values, use
# set xth(datafmt,XXX,special) 4.1f


# dzach layout improvements
if 0 {
  option add *Text.highlightThickness 1
  option add *Text.highlightBackground #008080
  option add *Text.highlightColor #ff8000
  option add *Entry.highlightThickness 1
  option add *Entry.highlightBackground #008080
  option add *Entry.highlightColor #ff8000
  option add *Entry.relief flat
  option add *Listbox.highlightThickness 1
  option add *Listbox.highlightBackground #008080
  option add *Listbox.highlightColor #ff8000
  option add *Listbox.relief flat
  option add *Scrollbar.width 14
  option add *Radiobutton*offRelief flat
  #option add *me.Background #e0f0f0
  set xth(gui,sbwidth) 15;#[.def.scrollbar cget -width]
  
  set xth(gui,ecolorbg) #ffffff
  set xth(gui,ecolorfg) black
  set xth(gui,ecolorselbg) #808080
  set xth(gui,ecolorselfg) #fff000
    
  # - dzach map colors
  set xth(gui,me,emptybg) #b0c2c2
  set xth(gui,me,mapbg) #f0f0f0
  set xth(gui,me,dselclr) #ffc000
  set xth(gui,me,highlightfill) #00b000  

  set xth(gui,efont) {courier -12}
  set xth(gui,me,point,psize) 5
  set xth(gui,me,line,psize) 3
  set xth(gui,me,line,width) 2
  set xth(gui,me,line,cpsize) 4
  set xth(gui,me,line,clwidth) 1  
}